@deephaven/console 1.22.1-alpha-pivot-builder.0 → 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":"ConsoleInput.js","names":["React","PureComponent","classNames","monaco","Log","assertNotNull","PromiseUtils","MonacoProviders","MonacoTheme","MonacoUtils","jsx","_jsx","jsxs","_jsxs","log","module","LINE_HEIGHT","parseInt","TOP_PADDING","BOTTOM_PADDING","MIN_INPUT_HEIGHT","BUFFER_SIZE","ConsoleInput","constructor","props","_defineProperty","handleResize","bind","commandContainer","createRef","commandHistoryIndex","timestamp","Date","now","bufferIndex","history","modifiedCommands","Map","resizeObserver","window","ResizeObserver","state","commandEditorHeight","isFocused","model","componentDidMount","initCommandEditor","loadMoreHistory","componentDidUpdate","layoutEditor","componentWillUnmount","disconnect","loadingPromise","cancel","destroyCommandEditor","setConsoleText","text","focus","arguments","length","undefined","execute","debug","_this$commandEditor","commandEditor","setValue","focusEnd","updateDimensions","processCommand","language","session","editor","createModel","generateConsoleUri","commandSettings","copyWithSyntaxHighlighting","cursorStyle","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineHeight","lineDecorationsWidth","lineNumbers","minimap","enabled","renderLineHighlight","scrollBeyondLastLine","scrollbar","arrowSize","horizontal","horizontalScrollbarSize","padding","top","bottom","value","wordWrap","autoClosingBrackets","element","current","create","setEOL","openDocument","onDidChangeModelContent","_this$commandEditor2","getValue","set","onDidFocusEditorText","setState","onDidBlurEditorText","onKeyDown","keyEvent","position","getPosition","lineNumber","altKey","shiftKey","metaKey","code","isSuggestionMenuPopulated","loadCommand","focusStart","stopPropagation","preventDefault","getLineCount","keyCode","KeyCode","Enter","_this$commandEditor3","command","trim","_this$commandEditor4","disableKeyBindings","KeyMod","CtrlCmd","KeyF","registerPasteHandler","observe","getModel","closeDocument","dispose","isSuggestionMenuActive","_ref","commandSuggestionContainer","_this$commandEditor5","getDomNode","querySelector","classList","contains","_this$commandSuggesti","_this$commandSuggesti2","childElementCount","_this$commandEditor6","_this$commandEditor7","_this$commandEditor8","_this$commandEditor9","_this$commandEditor0","_this$commandEditor1","column","getLineLength","firstCharTop","getTopForPosition","setPosition","setScrollTop","_this$commandEditor10","_this$commandEditor11","_this$commandEditor12","_this$commandEditor13","_this$commandEditor14","lastLine","lastCharTop","clear","_this$commandEditor15","_this$commandEditor16","layout","index","_this$commandEditor17","modifiedValue","get","historyValue","_this","_asyncToGenerator","commandHistoryStorage","scope","makeCancelable","getTable","resolved","close","table","setReversed","setViewport","getViewportData","viewportData","size","items","filter","_ref2","pos","arr","name","map","_ref3","reverse","err","isCanceled","debug2","error","push","onSubmit","maxHeight","contentHeight","getContentHeight","Math","max","min","shouldScroll","options","overviewRulerLanes","_this$commandEditor18","_this$commandEditor19","updateOptions","render","disabled","className","children","INPUT_CLASS_NAME","ref","style","height"],"sources":["../src/ConsoleInput.tsx"],"sourcesContent":["import React, { PureComponent, type ReactElement, type RefObject } from 'react';\nimport classNames from 'classnames';\nimport * as monaco from 'monaco-editor';\nimport Log from '@deephaven/log';\nimport {\n assertNotNull,\n type CancelablePromise,\n PromiseUtils,\n} from '@deephaven/utils';\nimport { type ViewportData } from '@deephaven/storage';\nimport type { dh } from '@deephaven/jsapi-types';\nimport {\n type CommandHistoryStorage,\n type CommandHistoryStorageItem,\n type CommandHistoryTable,\n} from './command-history';\nimport { MonacoProviders, MonacoTheme, MonacoUtils } from './monaco';\nimport './ConsoleInput.scss';\n\nconst log = Log.module('ConsoleInput');\n\nconst LINE_HEIGHT = parseInt(MonacoTheme['line-height'], 10);\nconst TOP_PADDING = 6;\nconst BOTTOM_PADDING = 6;\nconst MIN_INPUT_HEIGHT = LINE_HEIGHT + TOP_PADDING + BOTTOM_PADDING;\nconst BUFFER_SIZE = 100;\n\ninterface ConsoleInputProps {\n session: dh.IdeSession;\n language: string;\n scope?: string;\n commandHistoryStorage: CommandHistoryStorage;\n onSubmit: (command: string) => void;\n maxHeight?: number;\n disabled?: boolean;\n}\n\ninterface ConsoleInputState {\n commandEditorHeight: number;\n isFocused: boolean;\n model: monaco.editor.ITextModel | null;\n}\n\n/**\n * Component for input in a console session. Handles loading the recent command history\n */\nexport class ConsoleInput extends PureComponent<\n ConsoleInputProps,\n ConsoleInputState\n> {\n static defaultProps = {\n maxHeight: LINE_HEIGHT * 10,\n scope: null,\n disabled: false,\n };\n\n static INPUT_CLASS_NAME = 'console-input';\n\n constructor(props: ConsoleInputProps) {\n super(props);\n\n this.handleResize = this.handleResize.bind(this);\n\n this.commandContainer = React.createRef();\n this.commandHistoryIndex = null;\n this.timestamp = Date.now();\n this.bufferIndex = 0;\n this.history = [];\n // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed\n this.modifiedCommands = new Map();\n this.resizeObserver = new window.ResizeObserver(this.handleResize);\n\n this.state = {\n commandEditorHeight: LINE_HEIGHT,\n isFocused: false,\n model: null,\n };\n }\n\n componentDidMount(): void {\n this.initCommandEditor();\n\n this.loadMoreHistory();\n }\n\n componentDidUpdate(): void {\n this.layoutEditor();\n }\n\n componentWillUnmount(): void {\n this.resizeObserver.disconnect();\n\n if (this.loadingPromise != null) {\n this.loadingPromise.cancel();\n }\n\n this.destroyCommandEditor();\n }\n\n cancelListener?: () => void;\n\n resizeObserver: ResizeObserver;\n\n commandContainer: RefObject<HTMLDivElement>;\n\n commandEditor?: monaco.editor.IStandaloneCodeEditor;\n\n commandHistoryIndex: number | null;\n\n commandSuggestionContainer?: Element | null;\n\n loadingPromise?:\n | CancelablePromise<ViewportData<CommandHistoryStorageItem>>\n | CancelablePromise<CommandHistoryTable>;\n\n timestamp: number;\n\n bufferIndex: number | null;\n\n history: string[];\n\n // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed\n modifiedCommands: Map<number | null, string | null>;\n\n /**\n * Sets the console text from an external source.\n * Sets commandHistoryIndex to null since the source is not part of the history\n * @param text The text to set in the input\n * @param focus If the input should be focused\n * @param execute If the input should be executed\n * @returns void\n */\n setConsoleText(text: string, focus = true, execute = false): void {\n if (!text) {\n return;\n }\n\n log.debug('Command received: ', text);\n\n // Only set the console text if we're not running this command\n if (!execute) {\n // Need to set commandHistoryIndex before value\n // On value change, modified commands map updates\n this.commandHistoryIndex = null;\n this.commandEditor?.setValue(text);\n }\n\n if (focus) {\n this.focusEnd();\n }\n\n this.updateDimensions();\n\n if (execute) {\n this.processCommand(text);\n }\n }\n\n initCommandEditor(): void {\n const { language, session } = this.props;\n const model = monaco.editor.createModel(\n '',\n language,\n MonacoUtils.generateConsoleUri()\n );\n const commandSettings = {\n copyWithSyntaxHighlighting: false,\n cursorStyle: 'block',\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language,\n lineHeight: LINE_HEIGHT,\n lineDecorationsWidth: 3,\n lineNumbers: 'off',\n minimap: { enabled: false },\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n scrollbar: {\n arrowSize: 0,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n },\n padding: {\n top: TOP_PADDING,\n bottom: BOTTOM_PADDING,\n },\n value: '',\n wordWrap: 'on',\n autoClosingBrackets: 'beforeWhitespace',\n model,\n } as const;\n\n const element = this.commandContainer.current;\n assertNotNull(element);\n\n this.commandEditor = monaco.editor.create(element, commandSettings);\n\n MonacoUtils.setEOL(this.commandEditor);\n MonacoUtils.openDocument(this.commandEditor, session);\n\n this.commandEditor.onDidChangeModelContent(() => {\n const value = this.commandEditor?.getValue();\n this.modifiedCommands.set(this.commandHistoryIndex, value ?? null);\n this.updateDimensions();\n });\n\n this.commandEditor.onDidFocusEditorText(() => {\n this.setState({ isFocused: true });\n });\n\n this.commandEditor.onDidBlurEditorText(() => {\n this.setState({ isFocused: false });\n });\n\n /**\n * Register for keydown events to capture the `Enter` key.\n * Need to do it this way instead of using `addCommand`, because that would eat the Enter key in all situations, which is not what we want.\n * Can't do it in `onDidChangeModelContent` either, since we want to stop the Enter action from modifying the command.\n */\n this.commandEditor.onKeyDown(keyEvent => {\n const { commandEditor, commandHistoryIndex } = this;\n const position = commandEditor?.getPosition();\n assertNotNull(position);\n const { lineNumber } = position;\n\n if (!keyEvent.altKey && !keyEvent.shiftKey && !keyEvent.metaKey) {\n if (\n keyEvent.code === 'ArrowUp' &&\n !this.isSuggestionMenuPopulated() &&\n lineNumber === 1\n ) {\n if (commandHistoryIndex != null) {\n this.loadCommand(commandHistoryIndex + 1);\n } else {\n this.loadCommand(0);\n }\n\n this.focusStart();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (\n keyEvent.code === 'ArrowDown' &&\n !this.isSuggestionMenuPopulated() &&\n lineNumber === model?.getLineCount()\n ) {\n if (commandHistoryIndex != null && commandHistoryIndex > 0) {\n this.loadCommand(commandHistoryIndex - 1);\n } else {\n this.loadCommand(null);\n }\n\n this.focusEnd();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (\n keyEvent.keyCode === monaco.KeyCode.Enter &&\n !this.isSuggestionMenuPopulated()\n ) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n const command = this.commandEditor?.getValue().trim();\n if (command !== undefined) {\n this.processCommand(command);\n this.commandEditor?.setValue('');\n }\n }\n }\n });\n\n // Disable the Ctrl+F functionality so that the find window doesn't appear\n MonacoUtils.disableKeyBindings(this.commandEditor, [\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF, // eslint-disable-line no-bitwise\n ]);\n\n MonacoUtils.registerPasteHandler(this.commandEditor);\n\n this.commandEditor.focus();\n\n this.resizeObserver.observe(element);\n\n this.updateDimensions();\n\n this.setState({ model: this.commandEditor.getModel() });\n }\n\n destroyCommandEditor(): void {\n const { session } = this.props;\n if (this.commandEditor) {\n MonacoUtils.closeDocument(this.commandEditor, session);\n this.commandEditor.dispose();\n this.commandEditor = undefined;\n }\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n isSuggestionMenuActive(): boolean {\n if (!this.commandSuggestionContainer) {\n this.commandSuggestionContainer = this.commandEditor\n ?.getDomNode()\n ?.querySelector('.suggest-widget');\n }\n\n return (\n (this.commandSuggestionContainer &&\n this.commandSuggestionContainer.classList.contains('visible')) ??\n false\n );\n }\n\n isSuggestionMenuPopulated(): boolean {\n return (\n this.isSuggestionMenuActive() &&\n (this.commandSuggestionContainer?.querySelector('.monaco-list-rows')\n ?.childElementCount ?? 0) > 0\n );\n }\n\n focus(): void {\n this.commandEditor?.focus();\n }\n\n focusStart(): void {\n const model = this.commandEditor?.getModel();\n assertNotNull(model);\n const column = model.getLineLength(1) + 1; // Length of 1st line\n const firstCharTop = this.commandEditor?.getTopForPosition(1, column);\n assertNotNull(firstCharTop);\n this.commandEditor?.setPosition({ lineNumber: 1, column });\n this.commandEditor?.setScrollTop(firstCharTop);\n this.commandEditor?.focus();\n }\n\n focusEnd(): void {\n const model = this.commandEditor?.getModel();\n assertNotNull(model);\n const lastLine = model.getLineCount();\n const column = model.getLineLength(lastLine) + 1;\n const lastCharTop = this.commandEditor?.getTopForPosition(lastLine, column);\n assertNotNull(lastCharTop);\n this.commandEditor?.setPosition({ lineNumber: lastLine, column });\n this.commandEditor?.setScrollTop(lastCharTop);\n this.commandEditor?.focus();\n }\n\n clear(): void {\n this.commandEditor?.focus();\n this.commandEditor?.getModel()?.setValue('');\n this.commandHistoryIndex = null;\n }\n\n layoutEditor(): void {\n if (this.commandEditor) {\n this.commandEditor.layout();\n }\n }\n\n /**\n * Loads the given command from history\n * If edits have been made to the command since last run command, loads the modified version\n * @param index The index to load. Null to load command started in the editor and not in the history\n */\n loadCommand(index: number | null): void {\n if (index !== null && index >= this.history.length) {\n return;\n }\n\n const modifiedValue = this.modifiedCommands.get(index);\n const historyValue =\n index === null ? '' : this.history[this.history.length - index - 1];\n\n this.commandHistoryIndex = index;\n this.commandEditor?.getModel()?.setValue(modifiedValue ?? historyValue);\n\n if (index !== null && index > this.history.length - BUFFER_SIZE) {\n this.loadMoreHistory();\n }\n }\n\n async loadMoreHistory(): Promise<void> {\n try {\n if (this.loadingPromise != null || this.bufferIndex == null) {\n return;\n }\n\n const { commandHistoryStorage, language, scope } = this.props;\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n commandHistoryStorage.getTable(language, scope ?? '', this.timestamp),\n resolved => resolved.close()\n );\n\n const table = await this.loadingPromise;\n table.setReversed(true);\n table.setViewport({\n top: this.bufferIndex,\n bottom: this.bufferIndex + BUFFER_SIZE - 1,\n });\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n table.getViewportData(),\n () => table.close()\n );\n const viewportData = await this.loadingPromise;\n this.bufferIndex += BUFFER_SIZE;\n if (this.bufferIndex >= table.size) {\n // We've loaded the full history, no need to load any more\n this.bufferIndex = null;\n }\n this.history = [\n ...viewportData.items\n .filter(\n ({ name }, pos, arr) => pos === 0 || name !== arr[pos - 1].name\n )\n .map(({ name }) => name)\n .reverse(),\n ...this.history,\n ];\n\n this.loadingPromise = undefined;\n\n table.close();\n } catch (err) {\n this.loadingPromise = undefined;\n if (PromiseUtils.isCanceled(err)) {\n log.debug2('Promise canceled, not loading history');\n return;\n }\n\n log.error('Error fetching history', err);\n }\n }\n\n processCommand(command: string): void {\n this.commandHistoryIndex = null;\n this.modifiedCommands.clear();\n\n assertNotNull(command);\n if (\n command !== '' &&\n (this.history.length === 0 ||\n command !== this.history[this.history.length - 1])\n ) {\n this.history.push(command);\n }\n this.updateDimensions();\n\n const { onSubmit } = this.props;\n onSubmit(command);\n }\n\n updateDimensions(): void {\n if (!this.commandEditor) {\n return;\n }\n\n const { maxHeight } = this.props;\n assertNotNull(maxHeight);\n const contentHeight = this.commandEditor.getContentHeight();\n const commandEditorHeight = Math.max(\n Math.min(contentHeight, maxHeight),\n MIN_INPUT_HEIGHT\n );\n\n // Only show the overview ruler (markings overlapping sroll bar area) if the scrollbar will show\n const shouldScroll = contentHeight > commandEditorHeight;\n\n const options = { overviewRulerLanes: shouldScroll ? undefined : 0 };\n\n this.setState(\n {\n commandEditorHeight,\n },\n () => {\n this.commandEditor?.updateOptions(options);\n this.commandEditor?.layout();\n }\n );\n }\n\n render(): ReactElement {\n const { disabled, language, session } = this.props;\n const { commandEditorHeight, isFocused, model } = this.state;\n return (\n <div className={classNames('console-input-wrapper', { disabled })}>\n <div\n className={classNames('console-input-inner-wrapper', {\n focus: isFocused,\n })}\n >\n <div\n className={ConsoleInput.INPUT_CLASS_NAME}\n ref={this.commandContainer}\n style={{ height: commandEditorHeight }}\n />\n {model && (\n <MonacoProviders\n model={model}\n language={language}\n session={session}\n />\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default ConsoleInput;\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,IAAIC,aAAa,QAA2C,OAAO;AAC/E,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SACEC,aAAa,EAEbC,YAAY,QACP,kBAAkB;AAAC,SAQjBC,eAAe,EAAEC,WAAW,EAAEC,WAAW;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGlD,IAAMC,GAAG,GAAGV,GAAG,CAACW,MAAM,CAAC,cAAc,CAAC;AAEtC,IAAMC,WAAW,GAAGC,QAAQ,CAACT,WAAW,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;AAC5D,IAAMU,WAAW,GAAG,CAAC;AACrB,IAAMC,cAAc,GAAG,CAAC;AACxB,IAAMC,gBAAgB,GAAGJ,WAAW,GAAGE,WAAW,GAAGC,cAAc;AACnE,IAAME,WAAW,GAAG,GAAG;AAkBvB;AACA;AACA;AACA,OAAO,MAAMC,YAAY,SAASrB,aAAa,CAG7C;EASAsB,WAAWA,CAACC,KAAwB,EAAE;IACpC,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IA8Df;IAAAA,eAAA;IA5DE,IAAI,CAACC,YAAY,GAAG,IAAI,CAACA,YAAY,CAACC,IAAI,CAAC,IAAI,CAAC;IAEhD,IAAI,CAACC,gBAAgB,gBAAG5B,KAAK,CAAC6B,SAAS,CAAC,CAAC;IACzC,IAAI,CAACC,mBAAmB,GAAG,IAAI;IAC/B,IAAI,CAACC,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAACC,WAAW,GAAG,CAAC;IACpB,IAAI,CAACC,OAAO,GAAG,EAAE;IACjB;IACA,IAAI,CAACC,gBAAgB,GAAG,IAAIC,GAAG,CAAC,CAAC;IACjC,IAAI,CAACC,cAAc,GAAG,IAAIC,MAAM,CAACC,cAAc,CAAC,IAAI,CAACd,YAAY,CAAC;IAElE,IAAI,CAACe,KAAK,GAAG;MACXC,mBAAmB,EAAE1B,WAAW;MAChC2B,SAAS,EAAE,KAAK;MAChBC,KAAK,EAAE;IACT,CAAC;EACH;EAEAC,iBAAiBA,CAAA,EAAS;IACxB,IAAI,CAACC,iBAAiB,CAAC,CAAC;IAExB,IAAI,CAACC,eAAe,CAAC,CAAC;EACxB;EAEAC,kBAAkBA,CAAA,EAAS;IACzB,IAAI,CAACC,YAAY,CAAC,CAAC;EACrB;EAEAC,oBAAoBA,CAAA,EAAS;IAC3B,IAAI,CAACZ,cAAc,CAACa,UAAU,CAAC,CAAC;IAEhC,IAAI,IAAI,CAACC,cAAc,IAAI,IAAI,EAAE;MAC/B,IAAI,CAACA,cAAc,CAACC,MAAM,CAAC,CAAC;IAC9B;IAEA,IAAI,CAACC,oBAAoB,CAAC,CAAC;EAC7B;EA2BA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,cAAcA,CAACC,IAAY,EAAuC;IAAA,IAArCC,KAAK,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;IAAA,IAAEG,OAAO,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IACxD,IAAI,CAACF,IAAI,EAAE;MACT;IACF;IAEA1C,GAAG,CAACgD,KAAK,CAAC,oBAAoB,EAAEN,IAAI,CAAC;;IAErC;IACA,IAAI,CAACK,OAAO,EAAE;MAAA,IAAAE,mBAAA;MACZ;MACA;MACA,IAAI,CAACjC,mBAAmB,GAAG,IAAI;MAC/B,CAAAiC,mBAAA,OAAI,CAACC,aAAa,cAAAD,mBAAA,eAAlBA,mBAAA,CAAoBE,QAAQ,CAACT,IAAI,CAAC;IACpC;IAEA,IAAIC,KAAK,EAAE;MACT,IAAI,CAACS,QAAQ,CAAC,CAAC;IACjB;IAEA,IAAI,CAACC,gBAAgB,CAAC,CAAC;IAEvB,IAAIN,OAAO,EAAE;MACX,IAAI,CAACO,cAAc,CAACZ,IAAI,CAAC;IAC3B;EACF;EAEAV,iBAAiBA,CAAA,EAAS;IACxB,IAAM;MAAEuB,QAAQ;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAAC9C,KAAK;IACxC,IAAMoB,KAAK,GAAGzC,MAAM,CAACoE,MAAM,CAACC,WAAW,CACrC,EAAE,EACFH,QAAQ,EACR5D,WAAW,CAACgE,kBAAkB,CAAC,CACjC,CAAC;IACD,IAAMC,eAAe,GAAG;MACtBC,0BAA0B,EAAE,KAAK;MACjCC,WAAW,EAAE,OAAO;MACpBC,oBAAoB,EAAE,IAAI;MAC1BC,OAAO,EAAE,KAAK;MACdC,UAAU,EAAE,WAAW;MACvBC,WAAW,EAAE,KAAK;MAClBX,QAAQ;MACRY,UAAU,EAAEjE,WAAW;MACvBkE,oBAAoB,EAAE,CAAC;MACvBC,WAAW,EAAE,KAAK;MAClBC,OAAO,EAAE;QAAEC,OAAO,EAAE;MAAM,CAAC;MAC3BC,mBAAmB,EAAE,MAAM;MAC3BC,oBAAoB,EAAE,KAAK;MAC3BC,SAAS,EAAE;QACTC,SAAS,EAAE,CAAC;QACZC,UAAU,EAAE,QAAQ;QACpBC,uBAAuB,EAAE;MAC3B,CAAC;MACDC,OAAO,EAAE;QACPC,GAAG,EAAE3E,WAAW;QAChB4E,MAAM,EAAE3E;MACV,CAAC;MACD4E,KAAK,EAAE,EAAE;MACTC,QAAQ,EAAE,IAAI;MACdC,mBAAmB,EAAE,kBAAkB;MACvCrD;IACF,CAAU;IAEV,IAAMsD,OAAO,GAAG,IAAI,CAACtE,gBAAgB,CAACuE,OAAO;IAC7C9F,aAAa,CAAC6F,OAAO,CAAC;IAEtB,IAAI,CAAClC,aAAa,GAAG7D,MAAM,CAACoE,MAAM,CAAC6B,MAAM,CAACF,OAAO,EAAExB,eAAe,CAAC;IAEnEjE,WAAW,CAAC4F,MAAM,CAAC,IAAI,CAACrC,aAAa,CAAC;IACtCvD,WAAW,CAAC6F,YAAY,CAAC,IAAI,CAACtC,aAAa,EAAEM,OAAO,CAAC;IAErD,IAAI,CAACN,aAAa,CAACuC,uBAAuB,CAAC,MAAM;MAAA,IAAAC,oBAAA;MAC/C,IAAMT,KAAK,IAAAS,oBAAA,GAAG,IAAI,CAACxC,aAAa,cAAAwC,oBAAA,uBAAlBA,oBAAA,CAAoBC,QAAQ,CAAC,CAAC;MAC5C,IAAI,CAACrE,gBAAgB,CAACsE,GAAG,CAAC,IAAI,CAAC5E,mBAAmB,EAAEiE,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,IAAI,CAAC;MAClE,IAAI,CAAC5B,gBAAgB,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,IAAI,CAACH,aAAa,CAAC2C,oBAAoB,CAAC,MAAM;MAC5C,IAAI,CAACC,QAAQ,CAAC;QAAEjE,SAAS,EAAE;MAAK,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,IAAI,CAACqB,aAAa,CAAC6C,mBAAmB,CAAC,MAAM;MAC3C,IAAI,CAACD,QAAQ,CAAC;QAAEjE,SAAS,EAAE;MAAM,CAAC,CAAC;IACrC,CAAC,CAAC;;IAEF;AACJ;AACA;AACA;AACA;IACI,IAAI,CAACqB,aAAa,CAAC8C,SAAS,CAACC,QAAQ,IAAI;MACvC,IAAM;QAAE/C,aAAa;QAAElC;MAAoB,CAAC,GAAG,IAAI;MACnD,IAAMkF,QAAQ,GAAGhD,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEiD,WAAW,CAAC,CAAC;MAC7C5G,aAAa,CAAC2G,QAAQ,CAAC;MACvB,IAAM;QAAEE;MAAW,CAAC,GAAGF,QAAQ;MAE/B,IAAI,CAACD,QAAQ,CAACI,MAAM,IAAI,CAACJ,QAAQ,CAACK,QAAQ,IAAI,CAACL,QAAQ,CAACM,OAAO,EAAE;QAC/D,IACEN,QAAQ,CAACO,IAAI,KAAK,SAAS,IAC3B,CAAC,IAAI,CAACC,yBAAyB,CAAC,CAAC,IACjCL,UAAU,KAAK,CAAC,EAChB;UACA,IAAIpF,mBAAmB,IAAI,IAAI,EAAE;YAC/B,IAAI,CAAC0F,WAAW,CAAC1F,mBAAmB,GAAG,CAAC,CAAC;UAC3C,CAAC,MAAM;YACL,IAAI,CAAC0F,WAAW,CAAC,CAAC,CAAC;UACrB;UAEA,IAAI,CAACC,UAAU,CAAC,CAAC;UACjBV,QAAQ,CAACW,eAAe,CAAC,CAAC;UAC1BX,QAAQ,CAACY,cAAc,CAAC,CAAC;UAEzB;QACF;QAEA,IACEZ,QAAQ,CAACO,IAAI,KAAK,WAAW,IAC7B,CAAC,IAAI,CAACC,yBAAyB,CAAC,CAAC,IACjCL,UAAU,MAAKtE,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEgF,YAAY,CAAC,CAAC,GACpC;UACA,IAAI9F,mBAAmB,IAAI,IAAI,IAAIA,mBAAmB,GAAG,CAAC,EAAE;YAC1D,IAAI,CAAC0F,WAAW,CAAC1F,mBAAmB,GAAG,CAAC,CAAC;UAC3C,CAAC,MAAM;YACL,IAAI,CAAC0F,WAAW,CAAC,IAAI,CAAC;UACxB;UAEA,IAAI,CAACtD,QAAQ,CAAC,CAAC;UACf6C,QAAQ,CAACW,eAAe,CAAC,CAAC;UAC1BX,QAAQ,CAACY,cAAc,CAAC,CAAC;UAEzB;QACF;QAEA,IACEZ,QAAQ,CAACc,OAAO,KAAK1H,MAAM,CAAC2H,OAAO,CAACC,KAAK,IACzC,CAAC,IAAI,CAACR,yBAAyB,CAAC,CAAC,EACjC;UAAA,IAAAS,oBAAA;UACAjB,QAAQ,CAACW,eAAe,CAAC,CAAC;UAC1BX,QAAQ,CAACY,cAAc,CAAC,CAAC;UAEzB,IAAMM,OAAO,IAAAD,oBAAA,GAAG,IAAI,CAAChE,aAAa,cAAAgE,oBAAA,uBAAlBA,oBAAA,CAAoBvB,QAAQ,CAAC,CAAC,CAACyB,IAAI,CAAC,CAAC;UACrD,IAAID,OAAO,KAAKrE,SAAS,EAAE;YAAA,IAAAuE,oBAAA;YACzB,IAAI,CAAC/D,cAAc,CAAC6D,OAAO,CAAC;YAC5B,CAAAE,oBAAA,OAAI,CAACnE,aAAa,cAAAmE,oBAAA,eAAlBA,oBAAA,CAAoBlE,QAAQ,CAAC,EAAE,CAAC;UAClC;QACF;MACF;IACF,CAAC,CAAC;;IAEF;IACAxD,WAAW,CAAC2H,kBAAkB,CAAC,IAAI,CAACpE,aAAa,EAAE,CACjD7D,MAAM,CAACkI,MAAM,CAACC,OAAO,GAAGnI,MAAM,CAAC2H,OAAO,CAACS,IAAI,CAAE;IAAA,CAC9C,CAAC;IAEF9H,WAAW,CAAC+H,oBAAoB,CAAC,IAAI,CAACxE,aAAa,CAAC;IAEpD,IAAI,CAACA,aAAa,CAACP,KAAK,CAAC,CAAC;IAE1B,IAAI,CAACnB,cAAc,CAACmG,OAAO,CAACvC,OAAO,CAAC;IAEpC,IAAI,CAAC/B,gBAAgB,CAAC,CAAC;IAEvB,IAAI,CAACyC,QAAQ,CAAC;MAAEhE,KAAK,EAAE,IAAI,CAACoB,aAAa,CAAC0E,QAAQ,CAAC;IAAE,CAAC,CAAC;EACzD;EAEApF,oBAAoBA,CAAA,EAAS;IAC3B,IAAM;MAAEgB;IAAQ,CAAC,GAAG,IAAI,CAAC9C,KAAK;IAC9B,IAAI,IAAI,CAACwC,aAAa,EAAE;MACtBvD,WAAW,CAACkI,aAAa,CAAC,IAAI,CAAC3E,aAAa,EAAEM,OAAO,CAAC;MACtD,IAAI,CAACN,aAAa,CAAC4E,OAAO,CAAC,CAAC;MAC5B,IAAI,CAAC5E,aAAa,GAAGJ,SAAS;IAChC;EACF;EAEAlC,YAAYA,CAAA,EAAS;IACnB,IAAI,CAACyC,gBAAgB,CAAC,CAAC;EACzB;EAEA0E,sBAAsBA,CAAA,EAAY;IAAA,IAAAC,IAAA;IAChC,IAAI,CAAC,IAAI,CAACC,0BAA0B,EAAE;MAAA,IAAAC,oBAAA;MACpC,IAAI,CAACD,0BAA0B,IAAAC,oBAAA,GAAG,IAAI,CAAChF,aAAa,cAAAgF,oBAAA,gBAAAA,oBAAA,GAAlBA,oBAAA,CAC9BC,UAAU,CAAC,CAAC,cAAAD,oBAAA,uBADkBA,oBAAA,CAE9BE,aAAa,CAAC,iBAAiB,CAAC;IACtC;IAEA,QAAAJ,IAAA,GACG,IAAI,CAACC,0BAA0B,IAC9B,IAAI,CAACA,0BAA0B,CAACI,SAAS,CAACC,QAAQ,CAAC,SAAS,CAAC,cAAAN,IAAA,cAAAA,IAAA,GAC/D,KAAK;EAET;EAEAvB,yBAAyBA,CAAA,EAAY;IAAA,IAAA8B,qBAAA,EAAAC,sBAAA;IACnC,OACE,IAAI,CAACT,sBAAsB,CAAC,CAAC,IAC7B,EAAAQ,qBAAA,IAAAC,sBAAA,GAAC,IAAI,CAACP,0BAA0B,cAAAO,sBAAA,gBAAAA,sBAAA,GAA/BA,sBAAA,CAAiCJ,aAAa,CAAC,mBAAmB,CAAC,cAAAI,sBAAA,uBAAnEA,sBAAA,CACGC,iBAAiB,cAAAF,qBAAA,cAAAA,qBAAA,GAAI,CAAC,IAAI,CAAC;EAEnC;EAEA5F,KAAKA,CAAA,EAAS;IAAA,IAAA+F,oBAAA;IACZ,CAAAA,oBAAA,OAAI,CAACxF,aAAa,cAAAwF,oBAAA,eAAlBA,oBAAA,CAAoB/F,KAAK,CAAC,CAAC;EAC7B;EAEAgE,UAAUA,CAAA,EAAS;IAAA,IAAAgC,oBAAA,EAAAC,oBAAA,EAAAC,oBAAA,EAAAC,oBAAA,EAAAC,oBAAA;IACjB,IAAMjH,KAAK,IAAA6G,oBAAA,GAAG,IAAI,CAACzF,aAAa,cAAAyF,oBAAA,uBAAlBA,oBAAA,CAAoBf,QAAQ,CAAC,CAAC;IAC5CrI,aAAa,CAACuC,KAAK,CAAC;IACpB,IAAMkH,MAAM,GAAGlH,KAAK,CAACmH,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAMC,YAAY,IAAAN,oBAAA,GAAG,IAAI,CAAC1F,aAAa,cAAA0F,oBAAA,uBAAlBA,oBAAA,CAAoBO,iBAAiB,CAAC,CAAC,EAAEH,MAAM,CAAC;IACrEzJ,aAAa,CAAC2J,YAAY,CAAC;IAC3B,CAAAL,oBAAA,OAAI,CAAC3F,aAAa,cAAA2F,oBAAA,eAAlBA,oBAAA,CAAoBO,WAAW,CAAC;MAAEhD,UAAU,EAAE,CAAC;MAAE4C;IAAO,CAAC,CAAC;IAC1D,CAAAF,oBAAA,OAAI,CAAC5F,aAAa,cAAA4F,oBAAA,eAAlBA,oBAAA,CAAoBO,YAAY,CAACH,YAAY,CAAC;IAC9C,CAAAH,oBAAA,OAAI,CAAC7F,aAAa,cAAA6F,oBAAA,eAAlBA,oBAAA,CAAoBpG,KAAK,CAAC,CAAC;EAC7B;EAEAS,QAAQA,CAAA,EAAS;IAAA,IAAAkG,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA;IACf,IAAM5H,KAAK,IAAAwH,qBAAA,GAAG,IAAI,CAACpG,aAAa,cAAAoG,qBAAA,uBAAlBA,qBAAA,CAAoB1B,QAAQ,CAAC,CAAC;IAC5CrI,aAAa,CAACuC,KAAK,CAAC;IACpB,IAAM6H,QAAQ,GAAG7H,KAAK,CAACgF,YAAY,CAAC,CAAC;IACrC,IAAMkC,MAAM,GAAGlH,KAAK,CAACmH,aAAa,CAACU,QAAQ,CAAC,GAAG,CAAC;IAChD,IAAMC,WAAW,IAAAL,qBAAA,GAAG,IAAI,CAACrG,aAAa,cAAAqG,qBAAA,uBAAlBA,qBAAA,CAAoBJ,iBAAiB,CAACQ,QAAQ,EAAEX,MAAM,CAAC;IAC3EzJ,aAAa,CAACqK,WAAW,CAAC;IAC1B,CAAAJ,qBAAA,OAAI,CAACtG,aAAa,cAAAsG,qBAAA,eAAlBA,qBAAA,CAAoBJ,WAAW,CAAC;MAAEhD,UAAU,EAAEuD,QAAQ;MAAEX;IAAO,CAAC,CAAC;IACjE,CAAAS,qBAAA,OAAI,CAACvG,aAAa,cAAAuG,qBAAA,eAAlBA,qBAAA,CAAoBJ,YAAY,CAACO,WAAW,CAAC;IAC7C,CAAAF,qBAAA,OAAI,CAACxG,aAAa,cAAAwG,qBAAA,eAAlBA,qBAAA,CAAoB/G,KAAK,CAAC,CAAC;EAC7B;EAEAkH,KAAKA,CAAA,EAAS;IAAA,IAAAC,qBAAA,EAAAC,qBAAA;IACZ,CAAAD,qBAAA,OAAI,CAAC5G,aAAa,cAAA4G,qBAAA,eAAlBA,qBAAA,CAAoBnH,KAAK,CAAC,CAAC;IAC3B,CAAAoH,qBAAA,OAAI,CAAC7G,aAAa,cAAA6G,qBAAA,gBAAAA,qBAAA,GAAlBA,qBAAA,CAAoBnC,QAAQ,CAAC,CAAC,cAAAmC,qBAAA,eAA9BA,qBAAA,CAAgC5G,QAAQ,CAAC,EAAE,CAAC;IAC5C,IAAI,CAACnC,mBAAmB,GAAG,IAAI;EACjC;EAEAmB,YAAYA,CAAA,EAAS;IACnB,IAAI,IAAI,CAACe,aAAa,EAAE;MACtB,IAAI,CAACA,aAAa,CAAC8G,MAAM,CAAC,CAAC;IAC7B;EACF;;EAEA;AACF;AACA;AACA;AACA;EACEtD,WAAWA,CAACuD,KAAoB,EAAQ;IAAA,IAAAC,qBAAA;IACtC,IAAID,KAAK,KAAK,IAAI,IAAIA,KAAK,IAAI,IAAI,CAAC5I,OAAO,CAACwB,MAAM,EAAE;MAClD;IACF;IAEA,IAAMsH,aAAa,GAAG,IAAI,CAAC7I,gBAAgB,CAAC8I,GAAG,CAACH,KAAK,CAAC;IACtD,IAAMI,YAAY,GAChBJ,KAAK,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC5I,OAAO,CAAC,IAAI,CAACA,OAAO,CAACwB,MAAM,GAAGoH,KAAK,GAAG,CAAC,CAAC;IAErE,IAAI,CAACjJ,mBAAmB,GAAGiJ,KAAK;IAChC,CAAAC,qBAAA,OAAI,CAAChH,aAAa,cAAAgH,qBAAA,gBAAAA,qBAAA,GAAlBA,qBAAA,CAAoBtC,QAAQ,CAAC,CAAC,cAAAsC,qBAAA,eAA9BA,qBAAA,CAAgC/G,QAAQ,CAACgH,aAAa,aAAbA,aAAa,cAAbA,aAAa,GAAIE,YAAY,CAAC;IAEvE,IAAIJ,KAAK,KAAK,IAAI,IAAIA,KAAK,GAAG,IAAI,CAAC5I,OAAO,CAACwB,MAAM,GAAGtC,WAAW,EAAE;MAC/D,IAAI,CAAC0B,eAAe,CAAC,CAAC;IACxB;EACF;EAEMA,eAAeA,CAAA,EAAkB;IAAA,IAAAqI,KAAA;IAAA,OAAAC,iBAAA;MACrC,IAAI;QACF,IAAID,KAAI,CAAChI,cAAc,IAAI,IAAI,IAAIgI,KAAI,CAAClJ,WAAW,IAAI,IAAI,EAAE;UAC3D;QACF;QAEA,IAAM;UAAEoJ,qBAAqB;UAAEjH,QAAQ;UAAEkH;QAAM,CAAC,GAAGH,KAAI,CAAC5J,KAAK;QAE7D4J,KAAI,CAAChI,cAAc,GAAG9C,YAAY,CAACkL,cAAc,CAC/CF,qBAAqB,CAACG,QAAQ,CAACpH,QAAQ,EAAEkH,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAE,EAAEH,KAAI,CAACrJ,SAAS,CAAC,EACrE2J,QAAQ,IAAIA,QAAQ,CAACC,KAAK,CAAC,CAC7B,CAAC;QAED,IAAMC,KAAK,SAASR,KAAI,CAAChI,cAAc;QACvCwI,KAAK,CAACC,WAAW,CAAC,IAAI,CAAC;QACvBD,KAAK,CAACE,WAAW,CAAC;UAChBjG,GAAG,EAAEuF,KAAI,CAAClJ,WAAW;UACrB4D,MAAM,EAAEsF,KAAI,CAAClJ,WAAW,GAAGb,WAAW,GAAG;QAC3C,CAAC,CAAC;QAEF+J,KAAI,CAAChI,cAAc,GAAG9C,YAAY,CAACkL,cAAc,CAC/CI,KAAK,CAACG,eAAe,CAAC,CAAC,EACvB,MAAMH,KAAK,CAACD,KAAK,CAAC,CACpB,CAAC;QACD,IAAMK,YAAY,SAASZ,KAAI,CAAChI,cAAc;QAC9CgI,KAAI,CAAClJ,WAAW,IAAIb,WAAW;QAC/B,IAAI+J,KAAI,CAAClJ,WAAW,IAAI0J,KAAK,CAACK,IAAI,EAAE;UAClC;UACAb,KAAI,CAAClJ,WAAW,GAAG,IAAI;QACzB;QACAkJ,KAAI,CAACjJ,OAAO,GAAG,CACb,GAAG6J,YAAY,CAACE,KAAK,CAClBC,MAAM,CACL,CAAAC,KAAA,EAAWC,GAAG,EAAEC,GAAG;UAAA,IAAlB;YAAEC;UAAK,CAAC,GAAAH,KAAA;UAAA,OAAeC,GAAG,KAAK,CAAC,IAAIE,IAAI,KAAKD,GAAG,CAACD,GAAG,GAAG,CAAC,CAAC,CAACE,IAAI;QAAA,CACjE,CAAC,CACAC,GAAG,CAACC,KAAA;UAAA,IAAC;YAAEF;UAAK,CAAC,GAAAE,KAAA;UAAA,OAAKF,IAAI;QAAA,EAAC,CACvBG,OAAO,CAAC,CAAC,EACZ,GAAGtB,KAAI,CAACjJ,OAAO,CAChB;QAEDiJ,KAAI,CAAChI,cAAc,GAAGQ,SAAS;QAE/BgI,KAAK,CAACD,KAAK,CAAC,CAAC;MACf,CAAC,CAAC,OAAOgB,GAAG,EAAE;QACZvB,KAAI,CAAChI,cAAc,GAAGQ,SAAS;QAC/B,IAAItD,YAAY,CAACsM,UAAU,CAACD,GAAG,CAAC,EAAE;UAChC7L,GAAG,CAAC+L,MAAM,CAAC,uCAAuC,CAAC;UACnD;QACF;QAEA/L,GAAG,CAACgM,KAAK,CAAC,wBAAwB,EAAEH,GAAG,CAAC;MAC1C;IAAC;EACH;EAEAvI,cAAcA,CAAC6D,OAAe,EAAQ;IACpC,IAAI,CAACnG,mBAAmB,GAAG,IAAI;IAC/B,IAAI,CAACM,gBAAgB,CAACuI,KAAK,CAAC,CAAC;IAE7BtK,aAAa,CAAC4H,OAAO,CAAC;IACtB,IACEA,OAAO,KAAK,EAAE,KACb,IAAI,CAAC9F,OAAO,CAACwB,MAAM,KAAK,CAAC,IACxBsE,OAAO,KAAK,IAAI,CAAC9F,OAAO,CAAC,IAAI,CAACA,OAAO,CAACwB,MAAM,GAAG,CAAC,CAAC,CAAC,EACpD;MACA,IAAI,CAACxB,OAAO,CAAC4K,IAAI,CAAC9E,OAAO,CAAC;IAC5B;IACA,IAAI,CAAC9D,gBAAgB,CAAC,CAAC;IAEvB,IAAM;MAAE6I;IAAS,CAAC,GAAG,IAAI,CAACxL,KAAK;IAC/BwL,QAAQ,CAAC/E,OAAO,CAAC;EACnB;EAEA9D,gBAAgBA,CAAA,EAAS;IACvB,IAAI,CAAC,IAAI,CAACH,aAAa,EAAE;MACvB;IACF;IAEA,IAAM;MAAEiJ;IAAU,CAAC,GAAG,IAAI,CAACzL,KAAK;IAChCnB,aAAa,CAAC4M,SAAS,CAAC;IACxB,IAAMC,aAAa,GAAG,IAAI,CAAClJ,aAAa,CAACmJ,gBAAgB,CAAC,CAAC;IAC3D,IAAMzK,mBAAmB,GAAG0K,IAAI,CAACC,GAAG,CAClCD,IAAI,CAACE,GAAG,CAACJ,aAAa,EAAED,SAAS,CAAC,EAClC7L,gBACF,CAAC;;IAED;IACA,IAAMmM,YAAY,GAAGL,aAAa,GAAGxK,mBAAmB;IAExD,IAAM8K,OAAO,GAAG;MAAEC,kBAAkB,EAAEF,YAAY,GAAG3J,SAAS,GAAG;IAAE,CAAC;IAEpE,IAAI,CAACgD,QAAQ,CACX;MACElE;IACF,CAAC,EACD,MAAM;MAAA,IAAAgL,qBAAA,EAAAC,qBAAA;MACJ,CAAAD,qBAAA,OAAI,CAAC1J,aAAa,cAAA0J,qBAAA,eAAlBA,qBAAA,CAAoBE,aAAa,CAACJ,OAAO,CAAC;MAC1C,CAAAG,qBAAA,OAAI,CAAC3J,aAAa,cAAA2J,qBAAA,eAAlBA,qBAAA,CAAoB7C,MAAM,CAAC,CAAC;IAC9B,CACF,CAAC;EACH;EAEA+C,MAAMA,CAAA,EAAiB;IACrB,IAAM;MAAEC,QAAQ;MAAEzJ,QAAQ;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAAC9C,KAAK;IAClD,IAAM;MAAEkB,mBAAmB;MAAEC,SAAS;MAAEC;IAAM,CAAC,GAAG,IAAI,CAACH,KAAK;IAC5D,oBACE9B,IAAA;MAAKoN,SAAS,EAAE7N,UAAU,CAAC,uBAAuB,EAAE;QAAE4N;MAAS,CAAC,CAAE;MAAAE,QAAA,eAChEnN,KAAA;QACEkN,SAAS,EAAE7N,UAAU,CAAC,6BAA6B,EAAE;UACnDuD,KAAK,EAAEd;QACT,CAAC,CAAE;QAAAqL,QAAA,gBAEHrN,IAAA;UACEoN,SAAS,EAAEzM,YAAY,CAAC2M,gBAAiB;UACzCC,GAAG,EAAE,IAAI,CAACtM,gBAAiB;UAC3BuM,KAAK,EAAE;YAAEC,MAAM,EAAE1L;UAAoB;QAAE,CACxC,CAAC,EACDE,KAAK,iBACJjC,IAAA,CAACJ,eAAe;UACdqC,KAAK,EAAEA,KAAM;UACbyB,QAAQ,EAAEA,QAAS;UACnBC,OAAO,EAAEA;QAAQ,CAClB,CACF;MAAA,CACE;IAAC,CACH,CAAC;EAEV;AACF;AAAC7C,eAAA,CAzdYH,YAAY,kBAID;EACpB2L,SAAS,EAAEjM,WAAW,GAAG,EAAE;EAC3BuK,KAAK,EAAE,IAAI;EACXuC,QAAQ,EAAE;AACZ,CAAC;AAAArM,eAAA,CARUH,YAAY,sBAUG,eAAe;AAid3C,eAAeA,YAAY","ignoreList":[]}
1
+ {"version":3,"file":"ConsoleInput.js","names":["React","PureComponent","classNames","monaco","Log","assertNotNull","PromiseUtils","MonacoProviders","MonacoTheme","MonacoUtils","jsx","_jsx","jsxs","_jsxs","log","module","LINE_HEIGHT","parseInt","TOP_PADDING","BOTTOM_PADDING","MIN_INPUT_HEIGHT","BUFFER_SIZE","ConsoleInput","constructor","props","_defineProperty","handleResize","bind","commandContainer","createRef","commandHistoryIndex","timestamp","Date","now","bufferIndex","history","modifiedCommands","Map","resizeObserver","window","ResizeObserver","state","commandEditorHeight","isFocused","model","componentDidMount","initCommandEditor","loadMoreHistory","componentDidUpdate","layoutEditor","componentWillUnmount","disconnect","loadingPromise","cancel","destroyCommandEditor","setConsoleText","text","focus","arguments","length","undefined","execute","debug","_this$commandEditor","commandEditor","setValue","focusEnd","updateDimensions","processCommand","_this$props","language","session","editor","createModel","generateConsoleUri","commandSettings","copyWithSyntaxHighlighting","cursorStyle","fixedOverflowWidgets","folding","fontFamily","glyphMargin","lineHeight","lineDecorationsWidth","lineNumbers","minimap","enabled","renderLineHighlight","scrollBeyondLastLine","scrollbar","arrowSize","horizontal","horizontalScrollbarSize","padding","top","bottom","value","wordWrap","autoClosingBrackets","element","current","create","setEOL","openDocument","onDidChangeModelContent","_this$commandEditor2","getValue","set","onDidFocusEditorText","setState","onDidBlurEditorText","onKeyDown","keyEvent","position","getPosition","lineNumber","altKey","shiftKey","metaKey","code","isSuggestionMenuPopulated","loadCommand","focusStart","stopPropagation","preventDefault","getLineCount","keyCode","KeyCode","Enter","_this$commandEditor3","command","trim","_this$commandEditor4","disableKeyBindings","KeyMod","CtrlCmd","KeyF","registerPasteHandler","observe","getModel","closeDocument","dispose","isSuggestionMenuActive","_ref","commandSuggestionContainer","_this$commandEditor5","getDomNode","querySelector","classList","contains","_this$commandSuggesti","_this$commandSuggesti2","childElementCount","_this$commandEditor6","_this$commandEditor7","_this$commandEditor8","_this$commandEditor9","_this$commandEditor0","_this$commandEditor1","column","getLineLength","firstCharTop","getTopForPosition","setPosition","setScrollTop","_this$commandEditor10","_this$commandEditor11","_this$commandEditor12","_this$commandEditor13","_this$commandEditor14","lastLine","lastCharTop","clear","_this$commandEditor15","_this$commandEditor16","layout","index","_this$commandEditor17","modifiedValue","get","historyValue","_this","_asyncToGenerator","_this$props2","commandHistoryStorage","scope","makeCancelable","getTable","resolved","close","table","setReversed","setViewport","getViewportData","viewportData","size","items","filter","_ref2","pos","arr","name","map","_ref3","reverse","err","isCanceled","debug2","error","push","onSubmit","maxHeight","contentHeight","getContentHeight","Math","max","min","shouldScroll","options","overviewRulerLanes","_this$commandEditor18","_this$commandEditor19","updateOptions","render","_this$props3","disabled","_this$state","className","children","INPUT_CLASS_NAME","ref","style","height"],"sources":["../src/ConsoleInput.tsx"],"sourcesContent":["import React, { PureComponent, type ReactElement, type RefObject } from 'react';\nimport classNames from 'classnames';\nimport * as monaco from 'monaco-editor';\nimport Log from '@deephaven/log';\nimport {\n assertNotNull,\n type CancelablePromise,\n PromiseUtils,\n} from '@deephaven/utils';\nimport { type ViewportData } from '@deephaven/storage';\nimport type { dh } from '@deephaven/jsapi-types';\nimport {\n type CommandHistoryStorage,\n type CommandHistoryStorageItem,\n type CommandHistoryTable,\n} from './command-history';\nimport { MonacoProviders, MonacoTheme, MonacoUtils } from './monaco';\nimport './ConsoleInput.scss';\n\nconst log = Log.module('ConsoleInput');\n\nconst LINE_HEIGHT = parseInt(MonacoTheme['line-height'], 10);\nconst TOP_PADDING = 6;\nconst BOTTOM_PADDING = 6;\nconst MIN_INPUT_HEIGHT = LINE_HEIGHT + TOP_PADDING + BOTTOM_PADDING;\nconst BUFFER_SIZE = 100;\n\ninterface ConsoleInputProps {\n session: dh.IdeSession;\n language: string;\n scope?: string;\n commandHistoryStorage: CommandHistoryStorage;\n onSubmit: (command: string) => void;\n maxHeight?: number;\n disabled?: boolean;\n}\n\ninterface ConsoleInputState {\n commandEditorHeight: number;\n isFocused: boolean;\n model: monaco.editor.ITextModel | null;\n}\n\n/**\n * Component for input in a console session. Handles loading the recent command history\n */\nexport class ConsoleInput extends PureComponent<\n ConsoleInputProps,\n ConsoleInputState\n> {\n static defaultProps = {\n maxHeight: LINE_HEIGHT * 10,\n scope: null,\n disabled: false,\n };\n\n static INPUT_CLASS_NAME = 'console-input';\n\n constructor(props: ConsoleInputProps) {\n super(props);\n\n this.handleResize = this.handleResize.bind(this);\n\n this.commandContainer = React.createRef();\n this.commandHistoryIndex = null;\n this.timestamp = Date.now();\n this.bufferIndex = 0;\n this.history = [];\n // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed\n this.modifiedCommands = new Map();\n this.resizeObserver = new window.ResizeObserver(this.handleResize);\n\n this.state = {\n commandEditorHeight: LINE_HEIGHT,\n isFocused: false,\n model: null,\n };\n }\n\n componentDidMount(): void {\n this.initCommandEditor();\n\n this.loadMoreHistory();\n }\n\n componentDidUpdate(): void {\n this.layoutEditor();\n }\n\n componentWillUnmount(): void {\n this.resizeObserver.disconnect();\n\n if (this.loadingPromise != null) {\n this.loadingPromise.cancel();\n }\n\n this.destroyCommandEditor();\n }\n\n cancelListener?: () => void;\n\n resizeObserver: ResizeObserver;\n\n commandContainer: RefObject<HTMLDivElement>;\n\n commandEditor?: monaco.editor.IStandaloneCodeEditor;\n\n commandHistoryIndex: number | null;\n\n commandSuggestionContainer?: Element | null;\n\n loadingPromise?:\n | CancelablePromise<ViewportData<CommandHistoryStorageItem>>\n | CancelablePromise<CommandHistoryTable>;\n\n timestamp: number;\n\n bufferIndex: number | null;\n\n history: string[];\n\n // Tracks every command that has been modified by its commandHistoryIndex. Cleared on any command being executed\n modifiedCommands: Map<number | null, string | null>;\n\n /**\n * Sets the console text from an external source.\n * Sets commandHistoryIndex to null since the source is not part of the history\n * @param text The text to set in the input\n * @param focus If the input should be focused\n * @param execute If the input should be executed\n * @returns void\n */\n setConsoleText(text: string, focus = true, execute = false): void {\n if (!text) {\n return;\n }\n\n log.debug('Command received: ', text);\n\n // Only set the console text if we're not running this command\n if (!execute) {\n // Need to set commandHistoryIndex before value\n // On value change, modified commands map updates\n this.commandHistoryIndex = null;\n this.commandEditor?.setValue(text);\n }\n\n if (focus) {\n this.focusEnd();\n }\n\n this.updateDimensions();\n\n if (execute) {\n this.processCommand(text);\n }\n }\n\n initCommandEditor(): void {\n const { language, session } = this.props;\n const model = monaco.editor.createModel(\n '',\n language,\n MonacoUtils.generateConsoleUri()\n );\n const commandSettings = {\n copyWithSyntaxHighlighting: false,\n cursorStyle: 'block',\n fixedOverflowWidgets: true,\n folding: false,\n fontFamily: 'Fira Mono',\n glyphMargin: false,\n language,\n lineHeight: LINE_HEIGHT,\n lineDecorationsWidth: 3,\n lineNumbers: 'off',\n minimap: { enabled: false },\n renderLineHighlight: 'none',\n scrollBeyondLastLine: false,\n scrollbar: {\n arrowSize: 0,\n horizontal: 'hidden',\n horizontalScrollbarSize: 0,\n },\n padding: {\n top: TOP_PADDING,\n bottom: BOTTOM_PADDING,\n },\n value: '',\n wordWrap: 'on',\n autoClosingBrackets: 'beforeWhitespace',\n model,\n } as const;\n\n const element = this.commandContainer.current;\n assertNotNull(element);\n\n this.commandEditor = monaco.editor.create(element, commandSettings);\n\n MonacoUtils.setEOL(this.commandEditor);\n MonacoUtils.openDocument(this.commandEditor, session);\n\n this.commandEditor.onDidChangeModelContent(() => {\n const value = this.commandEditor?.getValue();\n this.modifiedCommands.set(this.commandHistoryIndex, value ?? null);\n this.updateDimensions();\n });\n\n this.commandEditor.onDidFocusEditorText(() => {\n this.setState({ isFocused: true });\n });\n\n this.commandEditor.onDidBlurEditorText(() => {\n this.setState({ isFocused: false });\n });\n\n /**\n * Register for keydown events to capture the `Enter` key.\n * Need to do it this way instead of using `addCommand`, because that would eat the Enter key in all situations, which is not what we want.\n * Can't do it in `onDidChangeModelContent` either, since we want to stop the Enter action from modifying the command.\n */\n this.commandEditor.onKeyDown(keyEvent => {\n const { commandEditor, commandHistoryIndex } = this;\n const position = commandEditor?.getPosition();\n assertNotNull(position);\n const { lineNumber } = position;\n\n if (!keyEvent.altKey && !keyEvent.shiftKey && !keyEvent.metaKey) {\n if (\n keyEvent.code === 'ArrowUp' &&\n !this.isSuggestionMenuPopulated() &&\n lineNumber === 1\n ) {\n if (commandHistoryIndex != null) {\n this.loadCommand(commandHistoryIndex + 1);\n } else {\n this.loadCommand(0);\n }\n\n this.focusStart();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (\n keyEvent.code === 'ArrowDown' &&\n !this.isSuggestionMenuPopulated() &&\n lineNumber === model?.getLineCount()\n ) {\n if (commandHistoryIndex != null && commandHistoryIndex > 0) {\n this.loadCommand(commandHistoryIndex - 1);\n } else {\n this.loadCommand(null);\n }\n\n this.focusEnd();\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n return;\n }\n\n if (\n keyEvent.keyCode === monaco.KeyCode.Enter &&\n !this.isSuggestionMenuPopulated()\n ) {\n keyEvent.stopPropagation();\n keyEvent.preventDefault();\n\n const command = this.commandEditor?.getValue().trim();\n if (command !== undefined) {\n this.processCommand(command);\n this.commandEditor?.setValue('');\n }\n }\n }\n });\n\n // Disable the Ctrl+F functionality so that the find window doesn't appear\n MonacoUtils.disableKeyBindings(this.commandEditor, [\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyF, // eslint-disable-line no-bitwise\n ]);\n\n MonacoUtils.registerPasteHandler(this.commandEditor);\n\n this.commandEditor.focus();\n\n this.resizeObserver.observe(element);\n\n this.updateDimensions();\n\n this.setState({ model: this.commandEditor.getModel() });\n }\n\n destroyCommandEditor(): void {\n const { session } = this.props;\n if (this.commandEditor) {\n MonacoUtils.closeDocument(this.commandEditor, session);\n this.commandEditor.dispose();\n this.commandEditor = undefined;\n }\n }\n\n handleResize(): void {\n this.updateDimensions();\n }\n\n isSuggestionMenuActive(): boolean {\n if (!this.commandSuggestionContainer) {\n this.commandSuggestionContainer = this.commandEditor\n ?.getDomNode()\n ?.querySelector('.suggest-widget');\n }\n\n return (\n (this.commandSuggestionContainer &&\n this.commandSuggestionContainer.classList.contains('visible')) ??\n false\n );\n }\n\n isSuggestionMenuPopulated(): boolean {\n return (\n this.isSuggestionMenuActive() &&\n (this.commandSuggestionContainer?.querySelector('.monaco-list-rows')\n ?.childElementCount ?? 0) > 0\n );\n }\n\n focus(): void {\n this.commandEditor?.focus();\n }\n\n focusStart(): void {\n const model = this.commandEditor?.getModel();\n assertNotNull(model);\n const column = model.getLineLength(1) + 1; // Length of 1st line\n const firstCharTop = this.commandEditor?.getTopForPosition(1, column);\n assertNotNull(firstCharTop);\n this.commandEditor?.setPosition({ lineNumber: 1, column });\n this.commandEditor?.setScrollTop(firstCharTop);\n this.commandEditor?.focus();\n }\n\n focusEnd(): void {\n const model = this.commandEditor?.getModel();\n assertNotNull(model);\n const lastLine = model.getLineCount();\n const column = model.getLineLength(lastLine) + 1;\n const lastCharTop = this.commandEditor?.getTopForPosition(lastLine, column);\n assertNotNull(lastCharTop);\n this.commandEditor?.setPosition({ lineNumber: lastLine, column });\n this.commandEditor?.setScrollTop(lastCharTop);\n this.commandEditor?.focus();\n }\n\n clear(): void {\n this.commandEditor?.focus();\n this.commandEditor?.getModel()?.setValue('');\n this.commandHistoryIndex = null;\n }\n\n layoutEditor(): void {\n if (this.commandEditor) {\n this.commandEditor.layout();\n }\n }\n\n /**\n * Loads the given command from history\n * If edits have been made to the command since last run command, loads the modified version\n * @param index The index to load. Null to load command started in the editor and not in the history\n */\n loadCommand(index: number | null): void {\n if (index !== null && index >= this.history.length) {\n return;\n }\n\n const modifiedValue = this.modifiedCommands.get(index);\n const historyValue =\n index === null ? '' : this.history[this.history.length - index - 1];\n\n this.commandHistoryIndex = index;\n this.commandEditor?.getModel()?.setValue(modifiedValue ?? historyValue);\n\n if (index !== null && index > this.history.length - BUFFER_SIZE) {\n this.loadMoreHistory();\n }\n }\n\n async loadMoreHistory(): Promise<void> {\n try {\n if (this.loadingPromise != null || this.bufferIndex == null) {\n return;\n }\n\n const { commandHistoryStorage, language, scope } = this.props;\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n commandHistoryStorage.getTable(language, scope ?? '', this.timestamp),\n resolved => resolved.close()\n );\n\n const table = await this.loadingPromise;\n table.setReversed(true);\n table.setViewport({\n top: this.bufferIndex,\n bottom: this.bufferIndex + BUFFER_SIZE - 1,\n });\n\n this.loadingPromise = PromiseUtils.makeCancelable(\n table.getViewportData(),\n () => table.close()\n );\n const viewportData = await this.loadingPromise;\n this.bufferIndex += BUFFER_SIZE;\n if (this.bufferIndex >= table.size) {\n // We've loaded the full history, no need to load any more\n this.bufferIndex = null;\n }\n this.history = [\n ...viewportData.items\n .filter(\n ({ name }, pos, arr) => pos === 0 || name !== arr[pos - 1].name\n )\n .map(({ name }) => name)\n .reverse(),\n ...this.history,\n ];\n\n this.loadingPromise = undefined;\n\n table.close();\n } catch (err) {\n this.loadingPromise = undefined;\n if (PromiseUtils.isCanceled(err)) {\n log.debug2('Promise canceled, not loading history');\n return;\n }\n\n log.error('Error fetching history', err);\n }\n }\n\n processCommand(command: string): void {\n this.commandHistoryIndex = null;\n this.modifiedCommands.clear();\n\n assertNotNull(command);\n if (\n command !== '' &&\n (this.history.length === 0 ||\n command !== this.history[this.history.length - 1])\n ) {\n this.history.push(command);\n }\n this.updateDimensions();\n\n const { onSubmit } = this.props;\n onSubmit(command);\n }\n\n updateDimensions(): void {\n if (!this.commandEditor) {\n return;\n }\n\n const { maxHeight } = this.props;\n assertNotNull(maxHeight);\n const contentHeight = this.commandEditor.getContentHeight();\n const commandEditorHeight = Math.max(\n Math.min(contentHeight, maxHeight),\n MIN_INPUT_HEIGHT\n );\n\n // Only show the overview ruler (markings overlapping sroll bar area) if the scrollbar will show\n const shouldScroll = contentHeight > commandEditorHeight;\n\n const options = { overviewRulerLanes: shouldScroll ? undefined : 0 };\n\n this.setState(\n {\n commandEditorHeight,\n },\n () => {\n this.commandEditor?.updateOptions(options);\n this.commandEditor?.layout();\n }\n );\n }\n\n render(): ReactElement {\n const { disabled, language, session } = this.props;\n const { commandEditorHeight, isFocused, model } = this.state;\n return (\n <div className={classNames('console-input-wrapper', { disabled })}>\n <div\n className={classNames('console-input-inner-wrapper', {\n focus: isFocused,\n })}\n >\n <div\n className={ConsoleInput.INPUT_CLASS_NAME}\n ref={this.commandContainer}\n style={{ height: commandEditorHeight }}\n />\n {model && (\n <MonacoProviders\n model={model}\n language={language}\n session={session}\n />\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default ConsoleInput;\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,IAAIC,aAAa,QAA2C,OAAO;AAC/E,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SACEC,aAAa,EAEbC,YAAY,QACP,kBAAkB;AAAC,SAQjBC,eAAe,EAAEC,WAAW,EAAEC,WAAW;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGlD,IAAMC,GAAG,GAAGV,GAAG,CAACW,MAAM,CAAC,cAAc,CAAC;AAEtC,IAAMC,WAAW,GAAGC,QAAQ,CAACT,WAAW,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;AAC5D,IAAMU,WAAW,GAAG,CAAC;AACrB,IAAMC,cAAc,GAAG,CAAC;AACxB,IAAMC,gBAAgB,GAAGJ,WAAW,GAAGE,WAAW,GAAGC,cAAc;AACnE,IAAME,WAAW,GAAG,GAAG;AAkBvB;AACA;AACA;AACA,OAAO,MAAMC,YAAY,SAASrB,aAAa,CAG7C;EASAsB,WAAWA,CAACC,KAAwB,EAAE;IACpC,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IA8Df;IAAAA,eAAA;IA5DE,IAAI,CAACC,YAAY,GAAG,IAAI,CAACA,YAAY,CAACC,IAAI,CAAC,IAAI,CAAC;IAEhD,IAAI,CAACC,gBAAgB,gBAAG5B,KAAK,CAAC6B,SAAS,CAAC,CAAC;IACzC,IAAI,CAACC,mBAAmB,GAAG,IAAI;IAC/B,IAAI,CAACC,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAACC,WAAW,GAAG,CAAC;IACpB,IAAI,CAACC,OAAO,GAAG,EAAE;IACjB;IACA,IAAI,CAACC,gBAAgB,GAAG,IAAIC,GAAG,CAAC,CAAC;IACjC,IAAI,CAACC,cAAc,GAAG,IAAIC,MAAM,CAACC,cAAc,CAAC,IAAI,CAACd,YAAY,CAAC;IAElE,IAAI,CAACe,KAAK,GAAG;MACXC,mBAAmB,EAAE1B,WAAW;MAChC2B,SAAS,EAAE,KAAK;MAChBC,KAAK,EAAE;IACT,CAAC;EACH;EAEAC,iBAAiBA,CAAA,EAAS;IACxB,IAAI,CAACC,iBAAiB,CAAC,CAAC;IAExB,IAAI,CAACC,eAAe,CAAC,CAAC;EACxB;EAEAC,kBAAkBA,CAAA,EAAS;IACzB,IAAI,CAACC,YAAY,CAAC,CAAC;EACrB;EAEAC,oBAAoBA,CAAA,EAAS;IAC3B,IAAI,CAACZ,cAAc,CAACa,UAAU,CAAC,CAAC;IAEhC,IAAI,IAAI,CAACC,cAAc,IAAI,IAAI,EAAE;MAC/B,IAAI,CAACA,cAAc,CAACC,MAAM,CAAC,CAAC;IAC9B;IAEA,IAAI,CAACC,oBAAoB,CAAC,CAAC;EAC7B;EA2BA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,cAAcA,CAACC,IAAY,EAAuC;IAAA,IAArCC,KAAK,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;IAAA,IAAEG,OAAO,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IACxD,IAAI,CAACF,IAAI,EAAE;MACT;IACF;IAEA1C,GAAG,CAACgD,KAAK,CAAC,oBAAoB,EAAEN,IAAI,CAAC;;IAErC;IACA,IAAI,CAACK,OAAO,EAAE;MAAA,IAAAE,mBAAA;MACZ;MACA;MACA,IAAI,CAACjC,mBAAmB,GAAG,IAAI;MAC/B,CAAAiC,mBAAA,OAAI,CAACC,aAAa,cAAAD,mBAAA,eAAlBA,mBAAA,CAAoBE,QAAQ,CAACT,IAAI,CAAC;IACpC;IAEA,IAAIC,KAAK,EAAE;MACT,IAAI,CAACS,QAAQ,CAAC,CAAC;IACjB;IAEA,IAAI,CAACC,gBAAgB,CAAC,CAAC;IAEvB,IAAIN,OAAO,EAAE;MACX,IAAI,CAACO,cAAc,CAACZ,IAAI,CAAC;IAC3B;EACF;EAEAV,iBAAiBA,CAAA,EAAS;IACxB,IAAAuB,WAAA,GAA8B,IAAI,CAAC7C,KAAK;MAAhC8C,QAAQ,GAAAD,WAAA,CAARC,QAAQ;MAAEC,OAAO,GAAAF,WAAA,CAAPE,OAAO;IACzB,IAAM3B,KAAK,GAAGzC,MAAM,CAACqE,MAAM,CAACC,WAAW,CACrC,EAAE,EACFH,QAAQ,EACR7D,WAAW,CAACiE,kBAAkB,CAAC,CACjC,CAAC;IACD,IAAMC,eAAe,GAAG;MACtBC,0BAA0B,EAAE,KAAK;MACjCC,WAAW,EAAE,OAAO;MACpBC,oBAAoB,EAAE,IAAI;MAC1BC,OAAO,EAAE,KAAK;MACdC,UAAU,EAAE,WAAW;MACvBC,WAAW,EAAE,KAAK;MAClBX,QAAQ;MACRY,UAAU,EAAElE,WAAW;MACvBmE,oBAAoB,EAAE,CAAC;MACvBC,WAAW,EAAE,KAAK;MAClBC,OAAO,EAAE;QAAEC,OAAO,EAAE;MAAM,CAAC;MAC3BC,mBAAmB,EAAE,MAAM;MAC3BC,oBAAoB,EAAE,KAAK;MAC3BC,SAAS,EAAE;QACTC,SAAS,EAAE,CAAC;QACZC,UAAU,EAAE,QAAQ;QACpBC,uBAAuB,EAAE;MAC3B,CAAC;MACDC,OAAO,EAAE;QACPC,GAAG,EAAE5E,WAAW;QAChB6E,MAAM,EAAE5E;MACV,CAAC;MACD6E,KAAK,EAAE,EAAE;MACTC,QAAQ,EAAE,IAAI;MACdC,mBAAmB,EAAE,kBAAkB;MACvCtD;IACF,CAAU;IAEV,IAAMuD,OAAO,GAAG,IAAI,CAACvE,gBAAgB,CAACwE,OAAO;IAC7C/F,aAAa,CAAC8F,OAAO,CAAC;IAEtB,IAAI,CAACnC,aAAa,GAAG7D,MAAM,CAACqE,MAAM,CAAC6B,MAAM,CAACF,OAAO,EAAExB,eAAe,CAAC;IAEnElE,WAAW,CAAC6F,MAAM,CAAC,IAAI,CAACtC,aAAa,CAAC;IACtCvD,WAAW,CAAC8F,YAAY,CAAC,IAAI,CAACvC,aAAa,EAAEO,OAAO,CAAC;IAErD,IAAI,CAACP,aAAa,CAACwC,uBAAuB,CAAC,MAAM;MAAA,IAAAC,oBAAA;MAC/C,IAAMT,KAAK,IAAAS,oBAAA,GAAG,IAAI,CAACzC,aAAa,cAAAyC,oBAAA,uBAAlBA,oBAAA,CAAoBC,QAAQ,CAAC,CAAC;MAC5C,IAAI,CAACtE,gBAAgB,CAACuE,GAAG,CAAC,IAAI,CAAC7E,mBAAmB,EAAEkE,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,IAAI,CAAC;MAClE,IAAI,CAAC7B,gBAAgB,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,IAAI,CAACH,aAAa,CAAC4C,oBAAoB,CAAC,MAAM;MAC5C,IAAI,CAACC,QAAQ,CAAC;QAAElE,SAAS,EAAE;MAAK,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,IAAI,CAACqB,aAAa,CAAC8C,mBAAmB,CAAC,MAAM;MAC3C,IAAI,CAACD,QAAQ,CAAC;QAAElE,SAAS,EAAE;MAAM,CAAC,CAAC;IACrC,CAAC,CAAC;;IAEF;AACJ;AACA;AACA;AACA;IACI,IAAI,CAACqB,aAAa,CAAC+C,SAAS,CAACC,QAAQ,IAAI;MACvC,IAAQhD,aAAa,GAA0B,IAAI,CAA3CA,aAAa;QAAElC,mBAAmB,GAAK,IAAI,CAA5BA,mBAAmB;MAC1C,IAAMmF,QAAQ,GAAGjD,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEkD,WAAW,CAAC,CAAC;MAC7C7G,aAAa,CAAC4G,QAAQ,CAAC;MACvB,IAAQE,UAAU,GAAKF,QAAQ,CAAvBE,UAAU;MAElB,IAAI,CAACH,QAAQ,CAACI,MAAM,IAAI,CAACJ,QAAQ,CAACK,QAAQ,IAAI,CAACL,QAAQ,CAACM,OAAO,EAAE;QAC/D,IACEN,QAAQ,CAACO,IAAI,KAAK,SAAS,IAC3B,CAAC,IAAI,CAACC,yBAAyB,CAAC,CAAC,IACjCL,UAAU,KAAK,CAAC,EAChB;UACA,IAAIrF,mBAAmB,IAAI,IAAI,EAAE;YAC/B,IAAI,CAAC2F,WAAW,CAAC3F,mBAAmB,GAAG,CAAC,CAAC;UAC3C,CAAC,MAAM;YACL,IAAI,CAAC2F,WAAW,CAAC,CAAC,CAAC;UACrB;UAEA,IAAI,CAACC,UAAU,CAAC,CAAC;UACjBV,QAAQ,CAACW,eAAe,CAAC,CAAC;UAC1BX,QAAQ,CAACY,cAAc,CAAC,CAAC;UAEzB;QACF;QAEA,IACEZ,QAAQ,CAACO,IAAI,KAAK,WAAW,IAC7B,CAAC,IAAI,CAACC,yBAAyB,CAAC,CAAC,IACjCL,UAAU,MAAKvE,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEiF,YAAY,CAAC,CAAC,GACpC;UACA,IAAI/F,mBAAmB,IAAI,IAAI,IAAIA,mBAAmB,GAAG,CAAC,EAAE;YAC1D,IAAI,CAAC2F,WAAW,CAAC3F,mBAAmB,GAAG,CAAC,CAAC;UAC3C,CAAC,MAAM;YACL,IAAI,CAAC2F,WAAW,CAAC,IAAI,CAAC;UACxB;UAEA,IAAI,CAACvD,QAAQ,CAAC,CAAC;UACf8C,QAAQ,CAACW,eAAe,CAAC,CAAC;UAC1BX,QAAQ,CAACY,cAAc,CAAC,CAAC;UAEzB;QACF;QAEA,IACEZ,QAAQ,CAACc,OAAO,KAAK3H,MAAM,CAAC4H,OAAO,CAACC,KAAK,IACzC,CAAC,IAAI,CAACR,yBAAyB,CAAC,CAAC,EACjC;UAAA,IAAAS,oBAAA;UACAjB,QAAQ,CAACW,eAAe,CAAC,CAAC;UAC1BX,QAAQ,CAACY,cAAc,CAAC,CAAC;UAEzB,IAAMM,OAAO,IAAAD,oBAAA,GAAG,IAAI,CAACjE,aAAa,cAAAiE,oBAAA,uBAAlBA,oBAAA,CAAoBvB,QAAQ,CAAC,CAAC,CAACyB,IAAI,CAAC,CAAC;UACrD,IAAID,OAAO,KAAKtE,SAAS,EAAE;YAAA,IAAAwE,oBAAA;YACzB,IAAI,CAAChE,cAAc,CAAC8D,OAAO,CAAC;YAC5B,CAAAE,oBAAA,OAAI,CAACpE,aAAa,cAAAoE,oBAAA,eAAlBA,oBAAA,CAAoBnE,QAAQ,CAAC,EAAE,CAAC;UAClC;QACF;MACF;IACF,CAAC,CAAC;;IAEF;IACAxD,WAAW,CAAC4H,kBAAkB,CAAC,IAAI,CAACrE,aAAa,EAAE,CACjD7D,MAAM,CAACmI,MAAM,CAACC,OAAO,GAAGpI,MAAM,CAAC4H,OAAO,CAACS,IAAI,CAAE;IAAA,CAC9C,CAAC;IAEF/H,WAAW,CAACgI,oBAAoB,CAAC,IAAI,CAACzE,aAAa,CAAC;IAEpD,IAAI,CAACA,aAAa,CAACP,KAAK,CAAC,CAAC;IAE1B,IAAI,CAACnB,cAAc,CAACoG,OAAO,CAACvC,OAAO,CAAC;IAEpC,IAAI,CAAChC,gBAAgB,CAAC,CAAC;IAEvB,IAAI,CAAC0C,QAAQ,CAAC;MAAEjE,KAAK,EAAE,IAAI,CAACoB,aAAa,CAAC2E,QAAQ,CAAC;IAAE,CAAC,CAAC;EACzD;EAEArF,oBAAoBA,CAAA,EAAS;IAC3B,IAAQiB,OAAO,GAAK,IAAI,CAAC/C,KAAK,CAAtB+C,OAAO;IACf,IAAI,IAAI,CAACP,aAAa,EAAE;MACtBvD,WAAW,CAACmI,aAAa,CAAC,IAAI,CAAC5E,aAAa,EAAEO,OAAO,CAAC;MACtD,IAAI,CAACP,aAAa,CAAC6E,OAAO,CAAC,CAAC;MAC5B,IAAI,CAAC7E,aAAa,GAAGJ,SAAS;IAChC;EACF;EAEAlC,YAAYA,CAAA,EAAS;IACnB,IAAI,CAACyC,gBAAgB,CAAC,CAAC;EACzB;EAEA2E,sBAAsBA,CAAA,EAAY;IAAA,IAAAC,IAAA;IAChC,IAAI,CAAC,IAAI,CAACC,0BAA0B,EAAE;MAAA,IAAAC,oBAAA;MACpC,IAAI,CAACD,0BAA0B,IAAAC,oBAAA,GAAG,IAAI,CAACjF,aAAa,cAAAiF,oBAAA,gBAAAA,oBAAA,GAAlBA,oBAAA,CAC9BC,UAAU,CAAC,CAAC,cAAAD,oBAAA,uBADkBA,oBAAA,CAE9BE,aAAa,CAAC,iBAAiB,CAAC;IACtC;IAEA,QAAAJ,IAAA,GACG,IAAI,CAACC,0BAA0B,IAC9B,IAAI,CAACA,0BAA0B,CAACI,SAAS,CAACC,QAAQ,CAAC,SAAS,CAAC,cAAAN,IAAA,cAAAA,IAAA,GAC/D,KAAK;EAET;EAEAvB,yBAAyBA,CAAA,EAAY;IAAA,IAAA8B,qBAAA,EAAAC,sBAAA;IACnC,OACE,IAAI,CAACT,sBAAsB,CAAC,CAAC,IAC7B,EAAAQ,qBAAA,IAAAC,sBAAA,GAAC,IAAI,CAACP,0BAA0B,cAAAO,sBAAA,gBAAAA,sBAAA,GAA/BA,sBAAA,CAAiCJ,aAAa,CAAC,mBAAmB,CAAC,cAAAI,sBAAA,uBAAnEA,sBAAA,CACGC,iBAAiB,cAAAF,qBAAA,cAAAA,qBAAA,GAAI,CAAC,IAAI,CAAC;EAEnC;EAEA7F,KAAKA,CAAA,EAAS;IAAA,IAAAgG,oBAAA;IACZ,CAAAA,oBAAA,OAAI,CAACzF,aAAa,cAAAyF,oBAAA,eAAlBA,oBAAA,CAAoBhG,KAAK,CAAC,CAAC;EAC7B;EAEAiE,UAAUA,CAAA,EAAS;IAAA,IAAAgC,oBAAA,EAAAC,oBAAA,EAAAC,oBAAA,EAAAC,oBAAA,EAAAC,oBAAA;IACjB,IAAMlH,KAAK,IAAA8G,oBAAA,GAAG,IAAI,CAAC1F,aAAa,cAAA0F,oBAAA,uBAAlBA,oBAAA,CAAoBf,QAAQ,CAAC,CAAC;IAC5CtI,aAAa,CAACuC,KAAK,CAAC;IACpB,IAAMmH,MAAM,GAAGnH,KAAK,CAACoH,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAMC,YAAY,IAAAN,oBAAA,GAAG,IAAI,CAAC3F,aAAa,cAAA2F,oBAAA,uBAAlBA,oBAAA,CAAoBO,iBAAiB,CAAC,CAAC,EAAEH,MAAM,CAAC;IACrE1J,aAAa,CAAC4J,YAAY,CAAC;IAC3B,CAAAL,oBAAA,OAAI,CAAC5F,aAAa,cAAA4F,oBAAA,eAAlBA,oBAAA,CAAoBO,WAAW,CAAC;MAAEhD,UAAU,EAAE,CAAC;MAAE4C;IAAO,CAAC,CAAC;IAC1D,CAAAF,oBAAA,OAAI,CAAC7F,aAAa,cAAA6F,oBAAA,eAAlBA,oBAAA,CAAoBO,YAAY,CAACH,YAAY,CAAC;IAC9C,CAAAH,oBAAA,OAAI,CAAC9F,aAAa,cAAA8F,oBAAA,eAAlBA,oBAAA,CAAoBrG,KAAK,CAAC,CAAC;EAC7B;EAEAS,QAAQA,CAAA,EAAS;IAAA,IAAAmG,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA;IACf,IAAM7H,KAAK,IAAAyH,qBAAA,GAAG,IAAI,CAACrG,aAAa,cAAAqG,qBAAA,uBAAlBA,qBAAA,CAAoB1B,QAAQ,CAAC,CAAC;IAC5CtI,aAAa,CAACuC,KAAK,CAAC;IACpB,IAAM8H,QAAQ,GAAG9H,KAAK,CAACiF,YAAY,CAAC,CAAC;IACrC,IAAMkC,MAAM,GAAGnH,KAAK,CAACoH,aAAa,CAACU,QAAQ,CAAC,GAAG,CAAC;IAChD,IAAMC,WAAW,IAAAL,qBAAA,GAAG,IAAI,CAACtG,aAAa,cAAAsG,qBAAA,uBAAlBA,qBAAA,CAAoBJ,iBAAiB,CAACQ,QAAQ,EAAEX,MAAM,CAAC;IAC3E1J,aAAa,CAACsK,WAAW,CAAC;IAC1B,CAAAJ,qBAAA,OAAI,CAACvG,aAAa,cAAAuG,qBAAA,eAAlBA,qBAAA,CAAoBJ,WAAW,CAAC;MAAEhD,UAAU,EAAEuD,QAAQ;MAAEX;IAAO,CAAC,CAAC;IACjE,CAAAS,qBAAA,OAAI,CAACxG,aAAa,cAAAwG,qBAAA,eAAlBA,qBAAA,CAAoBJ,YAAY,CAACO,WAAW,CAAC;IAC7C,CAAAF,qBAAA,OAAI,CAACzG,aAAa,cAAAyG,qBAAA,eAAlBA,qBAAA,CAAoBhH,KAAK,CAAC,CAAC;EAC7B;EAEAmH,KAAKA,CAAA,EAAS;IAAA,IAAAC,qBAAA,EAAAC,qBAAA;IACZ,CAAAD,qBAAA,OAAI,CAAC7G,aAAa,cAAA6G,qBAAA,eAAlBA,qBAAA,CAAoBpH,KAAK,CAAC,CAAC;IAC3B,CAAAqH,qBAAA,OAAI,CAAC9G,aAAa,cAAA8G,qBAAA,gBAAAA,qBAAA,GAAlBA,qBAAA,CAAoBnC,QAAQ,CAAC,CAAC,cAAAmC,qBAAA,eAA9BA,qBAAA,CAAgC7G,QAAQ,CAAC,EAAE,CAAC;IAC5C,IAAI,CAACnC,mBAAmB,GAAG,IAAI;EACjC;EAEAmB,YAAYA,CAAA,EAAS;IACnB,IAAI,IAAI,CAACe,aAAa,EAAE;MACtB,IAAI,CAACA,aAAa,CAAC+G,MAAM,CAAC,CAAC;IAC7B;EACF;;EAEA;AACF;AACA;AACA;AACA;EACEtD,WAAWA,CAACuD,KAAoB,EAAQ;IAAA,IAAAC,qBAAA;IACtC,IAAID,KAAK,KAAK,IAAI,IAAIA,KAAK,IAAI,IAAI,CAAC7I,OAAO,CAACwB,MAAM,EAAE;MAClD;IACF;IAEA,IAAMuH,aAAa,GAAG,IAAI,CAAC9I,gBAAgB,CAAC+I,GAAG,CAACH,KAAK,CAAC;IACtD,IAAMI,YAAY,GAChBJ,KAAK,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC7I,OAAO,CAAC,IAAI,CAACA,OAAO,CAACwB,MAAM,GAAGqH,KAAK,GAAG,CAAC,CAAC;IAErE,IAAI,CAAClJ,mBAAmB,GAAGkJ,KAAK;IAChC,CAAAC,qBAAA,OAAI,CAACjH,aAAa,cAAAiH,qBAAA,gBAAAA,qBAAA,GAAlBA,qBAAA,CAAoBtC,QAAQ,CAAC,CAAC,cAAAsC,qBAAA,eAA9BA,qBAAA,CAAgChH,QAAQ,CAACiH,aAAa,aAAbA,aAAa,cAAbA,aAAa,GAAIE,YAAY,CAAC;IAEvE,IAAIJ,KAAK,KAAK,IAAI,IAAIA,KAAK,GAAG,IAAI,CAAC7I,OAAO,CAACwB,MAAM,GAAGtC,WAAW,EAAE;MAC/D,IAAI,CAAC0B,eAAe,CAAC,CAAC;IACxB;EACF;EAEMA,eAAeA,CAAA,EAAkB;IAAA,IAAAsI,KAAA;IAAA,OAAAC,iBAAA;MACrC,IAAI;QACF,IAAID,KAAI,CAACjI,cAAc,IAAI,IAAI,IAAIiI,KAAI,CAACnJ,WAAW,IAAI,IAAI,EAAE;UAC3D;QACF;QAEA,IAAAqJ,YAAA,GAAmDF,KAAI,CAAC7J,KAAK;UAArDgK,qBAAqB,GAAAD,YAAA,CAArBC,qBAAqB;UAAElH,QAAQ,GAAAiH,YAAA,CAARjH,QAAQ;UAAEmH,KAAK,GAAAF,YAAA,CAALE,KAAK;QAE9CJ,KAAI,CAACjI,cAAc,GAAG9C,YAAY,CAACoL,cAAc,CAC/CF,qBAAqB,CAACG,QAAQ,CAACrH,QAAQ,EAAEmH,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI,EAAE,EAAEJ,KAAI,CAACtJ,SAAS,CAAC,EACrE6J,QAAQ,IAAIA,QAAQ,CAACC,KAAK,CAAC,CAC7B,CAAC;QAED,IAAMC,KAAK,SAAST,KAAI,CAACjI,cAAc;QACvC0I,KAAK,CAACC,WAAW,CAAC,IAAI,CAAC;QACvBD,KAAK,CAACE,WAAW,CAAC;UAChBlG,GAAG,EAAEuF,KAAI,CAACnJ,WAAW;UACrB6D,MAAM,EAAEsF,KAAI,CAACnJ,WAAW,GAAGb,WAAW,GAAG;QAC3C,CAAC,CAAC;QAEFgK,KAAI,CAACjI,cAAc,GAAG9C,YAAY,CAACoL,cAAc,CAC/CI,KAAK,CAACG,eAAe,CAAC,CAAC,EACvB,MAAMH,KAAK,CAACD,KAAK,CAAC,CACpB,CAAC;QACD,IAAMK,YAAY,SAASb,KAAI,CAACjI,cAAc;QAC9CiI,KAAI,CAACnJ,WAAW,IAAIb,WAAW;QAC/B,IAAIgK,KAAI,CAACnJ,WAAW,IAAI4J,KAAK,CAACK,IAAI,EAAE;UAClC;UACAd,KAAI,CAACnJ,WAAW,GAAG,IAAI;QACzB;QACAmJ,KAAI,CAAClJ,OAAO,GAAG,CACb,GAAG+J,YAAY,CAACE,KAAK,CAClBC,MAAM,CACL,CAAAC,KAAA,EAAWC,GAAG,EAAEC,GAAG;UAAA,IAAhBC,IAAI,GAAAH,KAAA,CAAJG,IAAI;UAAA,OAAiBF,GAAG,KAAK,CAAC,IAAIE,IAAI,KAAKD,GAAG,CAACD,GAAG,GAAG,CAAC,CAAC,CAACE,IAAI;QAAA,CACjE,CAAC,CACAC,GAAG,CAACC,KAAA;UAAA,IAAGF,IAAI,GAAAE,KAAA,CAAJF,IAAI;UAAA,OAAOA,IAAI;QAAA,EAAC,CACvBG,OAAO,CAAC,CAAC,EACZ,GAAGvB,KAAI,CAAClJ,OAAO,CAChB;QAEDkJ,KAAI,CAACjI,cAAc,GAAGQ,SAAS;QAE/BkI,KAAK,CAACD,KAAK,CAAC,CAAC;MACf,CAAC,CAAC,OAAOgB,GAAG,EAAE;QACZxB,KAAI,CAACjI,cAAc,GAAGQ,SAAS;QAC/B,IAAItD,YAAY,CAACwM,UAAU,CAACD,GAAG,CAAC,EAAE;UAChC/L,GAAG,CAACiM,MAAM,CAAC,uCAAuC,CAAC;UACnD;QACF;QAEAjM,GAAG,CAACkM,KAAK,CAAC,wBAAwB,EAAEH,GAAG,CAAC;MAC1C;IAAC;EACH;EAEAzI,cAAcA,CAAC8D,OAAe,EAAQ;IACpC,IAAI,CAACpG,mBAAmB,GAAG,IAAI;IAC/B,IAAI,CAACM,gBAAgB,CAACwI,KAAK,CAAC,CAAC;IAE7BvK,aAAa,CAAC6H,OAAO,CAAC;IACtB,IACEA,OAAO,KAAK,EAAE,KACb,IAAI,CAAC/F,OAAO,CAACwB,MAAM,KAAK,CAAC,IACxBuE,OAAO,KAAK,IAAI,CAAC/F,OAAO,CAAC,IAAI,CAACA,OAAO,CAACwB,MAAM,GAAG,CAAC,CAAC,CAAC,EACpD;MACA,IAAI,CAACxB,OAAO,CAAC8K,IAAI,CAAC/E,OAAO,CAAC;IAC5B;IACA,IAAI,CAAC/D,gBAAgB,CAAC,CAAC;IAEvB,IAAQ+I,QAAQ,GAAK,IAAI,CAAC1L,KAAK,CAAvB0L,QAAQ;IAChBA,QAAQ,CAAChF,OAAO,CAAC;EACnB;EAEA/D,gBAAgBA,CAAA,EAAS;IACvB,IAAI,CAAC,IAAI,CAACH,aAAa,EAAE;MACvB;IACF;IAEA,IAAQmJ,SAAS,GAAK,IAAI,CAAC3L,KAAK,CAAxB2L,SAAS;IACjB9M,aAAa,CAAC8M,SAAS,CAAC;IACxB,IAAMC,aAAa,GAAG,IAAI,CAACpJ,aAAa,CAACqJ,gBAAgB,CAAC,CAAC;IAC3D,IAAM3K,mBAAmB,GAAG4K,IAAI,CAACC,GAAG,CAClCD,IAAI,CAACE,GAAG,CAACJ,aAAa,EAAED,SAAS,CAAC,EAClC/L,gBACF,CAAC;;IAED;IACA,IAAMqM,YAAY,GAAGL,aAAa,GAAG1K,mBAAmB;IAExD,IAAMgL,OAAO,GAAG;MAAEC,kBAAkB,EAAEF,YAAY,GAAG7J,SAAS,GAAG;IAAE,CAAC;IAEpE,IAAI,CAACiD,QAAQ,CACX;MACEnE;IACF,CAAC,EACD,MAAM;MAAA,IAAAkL,qBAAA,EAAAC,qBAAA;MACJ,CAAAD,qBAAA,OAAI,CAAC5J,aAAa,cAAA4J,qBAAA,eAAlBA,qBAAA,CAAoBE,aAAa,CAACJ,OAAO,CAAC;MAC1C,CAAAG,qBAAA,OAAI,CAAC7J,aAAa,cAAA6J,qBAAA,eAAlBA,qBAAA,CAAoB9C,MAAM,CAAC,CAAC;IAC9B,CACF,CAAC;EACH;EAEAgD,MAAMA,CAAA,EAAiB;IACrB,IAAAC,YAAA,GAAwC,IAAI,CAACxM,KAAK;MAA1CyM,QAAQ,GAAAD,YAAA,CAARC,QAAQ;MAAE3J,QAAQ,GAAA0J,YAAA,CAAR1J,QAAQ;MAAEC,OAAO,GAAAyJ,YAAA,CAAPzJ,OAAO;IACnC,IAAA2J,WAAA,GAAkD,IAAI,CAACzL,KAAK;MAApDC,mBAAmB,GAAAwL,WAAA,CAAnBxL,mBAAmB;MAAEC,SAAS,GAAAuL,WAAA,CAATvL,SAAS;MAAEC,KAAK,GAAAsL,WAAA,CAALtL,KAAK;IAC7C,oBACEjC,IAAA;MAAKwN,SAAS,EAAEjO,UAAU,CAAC,uBAAuB,EAAE;QAAE+N;MAAS,CAAC,CAAE;MAAAG,QAAA,eAChEvN,KAAA;QACEsN,SAAS,EAAEjO,UAAU,CAAC,6BAA6B,EAAE;UACnDuD,KAAK,EAAEd;QACT,CAAC,CAAE;QAAAyL,QAAA,gBAEHzN,IAAA;UACEwN,SAAS,EAAE7M,YAAY,CAAC+M,gBAAiB;UACzCC,GAAG,EAAE,IAAI,CAAC1M,gBAAiB;UAC3B2M,KAAK,EAAE;YAAEC,MAAM,EAAE9L;UAAoB;QAAE,CACxC,CAAC,EACDE,KAAK,iBACJjC,IAAA,CAACJ,eAAe;UACdqC,KAAK,EAAEA,KAAM;UACb0B,QAAQ,EAAEA,QAAS;UACnBC,OAAO,EAAEA;QAAQ,CAClB,CACF;MAAA,CACE;IAAC,CACH,CAAC;EAEV;AACF;AAAC9C,eAAA,CAzdYH,YAAY,kBAID;EACpB6L,SAAS,EAAEnM,WAAW,GAAG,EAAE;EAC3ByK,KAAK,EAAE,IAAI;EACXwC,QAAQ,EAAE;AACZ,CAAC;AAAAxM,eAAA,CARUH,YAAY,sBAUG,eAAe;AAid3C,eAAeA,YAAY","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
  import React, { useCallback, useMemo, useRef, useState } from 'react';
2
8
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
9
  import { Button, DropdownMenu, SearchInput } from '@deephaven/components';
@@ -8,11 +14,12 @@ import { ObjectIcon } from "./common/index.js";
8
14
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
15
  var RESET_FILTER_DELAY = 5000;
10
16
  function ConsoleObjectsMenu(_ref) {
11
- var {
12
- openObject,
13
- objects
14
- } = _ref;
15
- var [filterText, setFilterText] = useState('');
17
+ var openObject = _ref.openObject,
18
+ objects = _ref.objects;
19
+ var _useState = useState(''),
20
+ _useState2 = _slicedToArray(_useState, 2),
21
+ filterText = _useState2[0],
22
+ setFilterText = _useState2[1];
16
23
  var searchRef = useRef(null);
17
24
  var resetFilter = useDebouncedCallback(() => {
18
25
  setFilterText('');
@@ -40,9 +47,7 @@ function ConsoleObjectsMenu(_ref) {
40
47
  })
41
48
  };
42
49
  var filteredObjects = filterText ? objects.filter(_ref2 => {
43
- var {
44
- title
45
- } = _ref2;
50
+ var title = _ref2.title;
46
51
  return title != null && title.toLowerCase().includes(filterText.toLowerCase());
47
52
  }) : objects;
48
53
  var objectActions = filteredObjects.map(object => ({
@@ -1 +1 @@
1
- {"version":3,"file":"ConsoleObjectsMenu.js","names":["React","useCallback","useMemo","useRef","useState","FontAwesomeIcon","Button","DropdownMenu","SearchInput","vsGraph","vsTriangleDown","useDebouncedCallback","EMPTY_FUNCTION","ObjectIcon","jsx","_jsx","jsxs","_jsxs","RESET_FILTER_DELAY","ConsoleObjectsMenu","_ref","openObject","objects","filterText","setFilterText","searchRef","resetFilter","handleMenuOpen","_searchRef$current","cancel","current","select","handleMenuClose","actions","length","searchActions","menuElement","value","onChange","e","target","className","ref","filteredObjects","filter","_ref2","title","toLowerCase","includes","objectActions","map","object","action","icon","type","kind","disabled","onClick","tooltip","children","mask","transform","onMenuOpened","onMenuClosed","options","initialKeyboardIndex","popperOptions","placement"],"sources":["../src/ConsoleObjectsMenu.tsx"],"sourcesContent":["import React, {\n type ReactElement,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n type DropdownActions,\n DropdownMenu,\n SearchInput,\n} from '@deephaven/components';\nimport { vsGraph, vsTriangleDown } from '@deephaven/icons';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { useDebouncedCallback } from '@deephaven/react-hooks';\nimport { EMPTY_FUNCTION } from '@deephaven/utils';\nimport { ObjectIcon } from './common';\n\ninterface ConsoleObjectsMenuProps {\n openObject: (object: DhType.ide.VariableDefinition) => void;\n objects: readonly DhType.ide.VariableDefinition[];\n}\n\nconst RESET_FILTER_DELAY = 5000;\n\nfunction ConsoleObjectsMenu({\n openObject,\n objects,\n}: ConsoleObjectsMenuProps): ReactElement {\n const [filterText, setFilterText] = useState('');\n const searchRef = useRef<SearchInput>(null);\n\n const resetFilter = useDebouncedCallback(() => {\n setFilterText('');\n }, RESET_FILTER_DELAY);\n\n const handleMenuOpen = useCallback(() => {\n resetFilter.cancel();\n searchRef.current?.select();\n }, [resetFilter]);\n\n const handleMenuClose = useCallback(() => {\n resetFilter();\n }, [resetFilter]);\n\n const actions: DropdownActions = useMemo(() => {\n if (objects.length === 0) {\n return [];\n }\n const searchActions = {\n menuElement: (\n <SearchInput\n value={filterText}\n onChange={e => {\n setFilterText(e.target.value);\n }}\n className=\"console-menu\"\n ref={searchRef}\n />\n ),\n };\n const filteredObjects = filterText\n ? objects.filter(\n ({ title }) =>\n title != null &&\n title.toLowerCase().includes(filterText.toLowerCase())\n )\n : objects;\n const objectActions = filteredObjects.map(object => ({\n title: object.title,\n action: () => {\n openObject(object);\n },\n icon: <ObjectIcon type={object.type} />,\n }));\n return [searchActions, ...objectActions];\n }, [objects, filterText, openObject]);\n\n return (\n <Button\n aria-label=\"Objects\"\n kind=\"ghost\"\n disabled={objects.length === 0}\n // no-op: click is handled in `DropdownMenu`\n onClick={EMPTY_FUNCTION}\n tooltip={objects.length === 0 ? 'No objects available' : 'Objects'}\n icon={\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={vsGraph}\n icon={vsTriangleDown}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon icon={vsTriangleDown} transform=\"right-8 down-6\" />\n </div>\n }\n >\n <DropdownMenu\n actions={actions}\n onMenuOpened={handleMenuOpen}\n onMenuClosed={handleMenuClose}\n options={{ initialKeyboardIndex: 1 }}\n popperOptions={{ placement: 'bottom-end' }}\n />\n </Button>\n );\n}\n\nexport default ConsoleObjectsMenu;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ConsoleObjectsMenu.js","names":["React","useCallback","useMemo","useRef","useState","FontAwesomeIcon","Button","DropdownMenu","SearchInput","vsGraph","vsTriangleDown","useDebouncedCallback","EMPTY_FUNCTION","ObjectIcon","jsx","_jsx","jsxs","_jsxs","RESET_FILTER_DELAY","ConsoleObjectsMenu","_ref","openObject","objects","_useState","_useState2","_slicedToArray","filterText","setFilterText","searchRef","resetFilter","handleMenuOpen","_searchRef$current","cancel","current","select","handleMenuClose","actions","length","searchActions","menuElement","value","onChange","e","target","className","ref","filteredObjects","filter","_ref2","title","toLowerCase","includes","objectActions","map","object","action","icon","type","kind","disabled","onClick","tooltip","children","mask","transform","onMenuOpened","onMenuClosed","options","initialKeyboardIndex","popperOptions","placement"],"sources":["../src/ConsoleObjectsMenu.tsx"],"sourcesContent":["import React, {\n type ReactElement,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n type DropdownActions,\n DropdownMenu,\n SearchInput,\n} from '@deephaven/components';\nimport { vsGraph, vsTriangleDown } from '@deephaven/icons';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { useDebouncedCallback } from '@deephaven/react-hooks';\nimport { EMPTY_FUNCTION } from '@deephaven/utils';\nimport { ObjectIcon } from './common';\n\ninterface ConsoleObjectsMenuProps {\n openObject: (object: DhType.ide.VariableDefinition) => void;\n objects: readonly DhType.ide.VariableDefinition[];\n}\n\nconst RESET_FILTER_DELAY = 5000;\n\nfunction ConsoleObjectsMenu({\n openObject,\n objects,\n}: ConsoleObjectsMenuProps): ReactElement {\n const [filterText, setFilterText] = useState('');\n const searchRef = useRef<SearchInput>(null);\n\n const resetFilter = useDebouncedCallback(() => {\n setFilterText('');\n }, RESET_FILTER_DELAY);\n\n const handleMenuOpen = useCallback(() => {\n resetFilter.cancel();\n searchRef.current?.select();\n }, [resetFilter]);\n\n const handleMenuClose = useCallback(() => {\n resetFilter();\n }, [resetFilter]);\n\n const actions: DropdownActions = useMemo(() => {\n if (objects.length === 0) {\n return [];\n }\n const searchActions = {\n menuElement: (\n <SearchInput\n value={filterText}\n onChange={e => {\n setFilterText(e.target.value);\n }}\n className=\"console-menu\"\n ref={searchRef}\n />\n ),\n };\n const filteredObjects = filterText\n ? objects.filter(\n ({ title }) =>\n title != null &&\n title.toLowerCase().includes(filterText.toLowerCase())\n )\n : objects;\n const objectActions = filteredObjects.map(object => ({\n title: object.title,\n action: () => {\n openObject(object);\n },\n icon: <ObjectIcon type={object.type} />,\n }));\n return [searchActions, ...objectActions];\n }, [objects, filterText, openObject]);\n\n return (\n <Button\n aria-label=\"Objects\"\n kind=\"ghost\"\n disabled={objects.length === 0}\n // no-op: click is handled in `DropdownMenu`\n onClick={EMPTY_FUNCTION}\n tooltip={objects.length === 0 ? 'No objects available' : 'Objects'}\n icon={\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={vsGraph}\n icon={vsTriangleDown}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon icon={vsTriangleDown} transform=\"right-8 down-6\" />\n </div>\n }\n >\n <DropdownMenu\n actions={actions}\n onMenuOpened={handleMenuOpen}\n onMenuClosed={handleMenuClose}\n options={{ initialKeyboardIndex: 1 }}\n popperOptions={{ placement: 'bottom-end' }}\n />\n </Button>\n );\n}\n\nexport default ConsoleObjectsMenu;\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,11 @@
1
1
  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
2
  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
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
4
+ 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."); }
5
+ 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; } }
6
+ 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; }
7
+ 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; } }
8
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
3
9
  import React, { useCallback, useEffect, useState } from 'react';
4
10
  import classNames from 'classnames';
5
11
  import { vsKebabVertical } from '@deephaven/icons';
@@ -11,20 +17,19 @@ var POPPER_OPTIONS = {
11
17
  placement: 'bottom-end'
12
18
  };
13
19
  function ConsoleStatusBar(_ref) {
14
- var {
15
- children,
16
- dh,
17
- session,
18
- overflowActions
19
- } = _ref;
20
- var [pendingCommandCount, setPendingCommandCount] = useState(0);
20
+ var children = _ref.children,
21
+ dh = _ref.dh,
22
+ session = _ref.session,
23
+ overflowActions = _ref.overflowActions;
24
+ var _useState = useState(0),
25
+ _useState2 = _slicedToArray(_useState, 2),
26
+ pendingCommandCount = _useState2[0],
27
+ setPendingCommandCount = _useState2[1];
21
28
  var handleCommandStarted = useCallback(/*#__PURE__*/function () {
22
29
  var _ref2 = _asyncToGenerator(function* (event) {
23
30
  setPendingCommandCount(count => count + 1);
24
31
  try {
25
- var {
26
- result
27
- } = event.detail;
32
+ var result = event.detail.result;
28
33
  yield result;
29
34
  } catch (error) {
30
35
  // No-op, fall through
@@ -1 +1 @@
1
- {"version":3,"file":"ConsoleStatusBar.js","names":["React","useCallback","useEffect","useState","classNames","vsKebabVertical","Button","DropdownMenu","Tooltip","EMPTY_FUNCTION","jsx","_jsx","jsxs","_jsxs","POPPER_OPTIONS","placement","ConsoleStatusBar","_ref","children","dh","session","overflowActions","pendingCommandCount","setPendingCommandCount","handleCommandStarted","_ref2","_asyncToGenerator","event","count","result","detail","error","_x","apply","arguments","startListening","addEventListener","IdeSession","EVENT_COMMANDSTARTED","statusIconClass","tooltipText","hasActions","Array","isArray","length","className","kind","icon","tooltip","onClick","actions","popperOptions"],"sources":["../src/ConsoleStatusBar.tsx"],"sourcesContent":["import React, {\n type ReactElement,\n type ReactNode,\n useCallback,\n useEffect,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport { vsKebabVertical } from '@deephaven/icons';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n Button,\n type DropdownActions,\n DropdownMenu,\n type PopperOptions,\n Tooltip,\n} from '@deephaven/components';\nimport './ConsoleStatusBar.scss';\nimport { EMPTY_FUNCTION } from '@deephaven/utils';\n\nconst POPPER_OPTIONS: PopperOptions = { placement: 'bottom-end' };\n\ninterface ConsoleStatusBarProps {\n children?: ReactNode;\n dh: typeof DhType;\n session: DhType.IdeSession;\n overflowActions?: DropdownActions;\n}\n\nfunction ConsoleStatusBar({\n children,\n dh,\n session,\n overflowActions,\n}: ConsoleStatusBarProps): ReactElement {\n const [pendingCommandCount, setPendingCommandCount] = useState(0);\n\n const handleCommandStarted = useCallback(\n async (event: DhType.Event<{ result: Promise<unknown> }>) => {\n setPendingCommandCount(count => count + 1);\n\n try {\n const { result } = event.detail;\n await result;\n } catch (error) {\n // No-op, fall through\n }\n\n setPendingCommandCount(count => count - 1);\n },\n []\n );\n\n useEffect(\n function startListening() {\n return session.addEventListener(\n dh.IdeSession.EVENT_COMMANDSTARTED,\n handleCommandStarted\n );\n },\n [dh, handleCommandStarted, session]\n );\n\n let statusIconClass = null;\n let tooltipText = null;\n if (pendingCommandCount > 0) {\n // Connected, Pending\n statusIconClass = 'console-status-icon-pending';\n tooltipText = 'Worker is busy';\n } else {\n // Connected, Idle\n statusIconClass = 'console-status-icon-idle';\n tooltipText = 'Worker is idle';\n }\n\n const hasActions =\n overflowActions != null &&\n (!Array.isArray(overflowActions) || overflowActions.length > 0);\n\n return (\n <div className=\"console-pane-status-bar\">\n <div>\n <div className={classNames('console-status-icon', statusIconClass)} />\n <Tooltip>{tooltipText}</Tooltip>\n </div>\n {children}\n {hasActions && (\n <Button\n kind=\"ghost\"\n icon={vsKebabVertical}\n tooltip=\"More Actions...\"\n aria-label=\"More Actions...\"\n // no-op: click is handled in `DropdownMenu`\n onClick={EMPTY_FUNCTION}\n >\n <DropdownMenu\n actions={overflowActions}\n popperOptions={POPPER_OPTIONS}\n />\n </Button>\n )}\n </div>\n );\n}\n\nexport default ConsoleStatusBar;\n"],"mappings":";;AAAA,OAAOA,KAAK,IAGVC,WAAW,EACXC,SAAS,EACTC,QAAQ,QACH,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,kBAAkB;AAElD,SACEC,MAAM,EAENC,YAAY,EAEZC,OAAO,QACF,uBAAuB;AAAC;AAE/B,SAASC,cAAc,QAAQ,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAElD,IAAMC,cAA6B,GAAG;EAAEC,SAAS,EAAE;AAAa,CAAC;AASjE,SAASC,gBAAgBA,CAAAC,IAAA,EAKe;EAAA,IALd;IACxBC,QAAQ;IACRC,EAAE;IACFC,OAAO;IACPC;EACqB,CAAC,GAAAJ,IAAA;EACtB,IAAM,CAACK,mBAAmB,EAAEC,sBAAsB,CAAC,GAAGpB,QAAQ,CAAC,CAAC,CAAC;EAEjE,IAAMqB,oBAAoB,GAAGvB,WAAW;IAAA,IAAAwB,KAAA,GAAAC,iBAAA,CACtC,WAAOC,KAAiD,EAAK;MAC3DJ,sBAAsB,CAACK,KAAK,IAAIA,KAAK,GAAG,CAAC,CAAC;MAE1C,IAAI;QACF,IAAM;UAAEC;QAAO,CAAC,GAAGF,KAAK,CAACG,MAAM;QAC/B,MAAMD,MAAM;MACd,CAAC,CAAC,OAAOE,KAAK,EAAE;QACd;MAAA;MAGFR,sBAAsB,CAACK,KAAK,IAAIA,KAAK,GAAG,CAAC,CAAC;IAC5C,CAAC;IAAA,iBAAAI,EAAA;MAAA,OAAAP,KAAA,CAAAQ,KAAA,OAAAC,SAAA;IAAA;EAAA,KACD,EACF,CAAC;EAEDhC,SAAS,CACP,SAASiC,cAAcA,CAAA,EAAG;IACxB,OAAOf,OAAO,CAACgB,gBAAgB,CAC7BjB,EAAE,CAACkB,UAAU,CAACC,oBAAoB,EAClCd,oBACF,CAAC;EACH,CAAC,EACD,CAACL,EAAE,EAAEK,oBAAoB,EAAEJ,OAAO,CACpC,CAAC;EAED,IAAImB,eAAe,GAAG,IAAI;EAC1B,IAAIC,WAAW,GAAG,IAAI;EACtB,IAAIlB,mBAAmB,GAAG,CAAC,EAAE;IAC3B;IACAiB,eAAe,GAAG,6BAA6B;IAC/CC,WAAW,GAAG,gBAAgB;EAChC,CAAC,MAAM;IACL;IACAD,eAAe,GAAG,0BAA0B;IAC5CC,WAAW,GAAG,gBAAgB;EAChC;EAEA,IAAMC,UAAU,GACdpB,eAAe,IAAI,IAAI,KACtB,CAACqB,KAAK,CAACC,OAAO,CAACtB,eAAe,CAAC,IAAIA,eAAe,CAACuB,MAAM,GAAG,CAAC,CAAC;EAEjE,oBACE/B,KAAA;IAAKgC,SAAS,EAAC,yBAAyB;IAAA3B,QAAA,gBACtCL,KAAA;MAAAK,QAAA,gBACEP,IAAA;QAAKkC,SAAS,EAAEzC,UAAU,CAAC,qBAAqB,EAAEmC,eAAe;MAAE,CAAE,CAAC,eACtE5B,IAAA,CAACH,OAAO;QAAAU,QAAA,EAAEsB;MAAW,CAAU,CAAC;IAAA,CAC7B,CAAC,EACLtB,QAAQ,EACRuB,UAAU,iBACT9B,IAAA,CAACL,MAAM;MACLwC,IAAI,EAAC,OAAO;MACZC,IAAI,EAAE1C,eAAgB;MACtB2C,OAAO,EAAC,iBAAiB;MACzB,cAAW;MACX;MAAA;MACAC,OAAO,EAAExC,cAAe;MAAAS,QAAA,eAExBP,IAAA,CAACJ,YAAY;QACX2C,OAAO,EAAE7B,eAAgB;QACzB8B,aAAa,EAAErC;MAAe,CAC/B;IAAC,CACI,CACT;EAAA,CACE,CAAC;AAEV;AAEA,eAAeE,gBAAgB","ignoreList":[]}
1
+ {"version":3,"file":"ConsoleStatusBar.js","names":["React","useCallback","useEffect","useState","classNames","vsKebabVertical","Button","DropdownMenu","Tooltip","EMPTY_FUNCTION","jsx","_jsx","jsxs","_jsxs","POPPER_OPTIONS","placement","ConsoleStatusBar","_ref","children","dh","session","overflowActions","_useState","_useState2","_slicedToArray","pendingCommandCount","setPendingCommandCount","handleCommandStarted","_ref2","_asyncToGenerator","event","count","result","detail","error","_x","apply","arguments","startListening","addEventListener","IdeSession","EVENT_COMMANDSTARTED","statusIconClass","tooltipText","hasActions","Array","isArray","length","className","kind","icon","tooltip","onClick","actions","popperOptions"],"sources":["../src/ConsoleStatusBar.tsx"],"sourcesContent":["import React, {\n type ReactElement,\n type ReactNode,\n useCallback,\n useEffect,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport { vsKebabVertical } from '@deephaven/icons';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport {\n Button,\n type DropdownActions,\n DropdownMenu,\n type PopperOptions,\n Tooltip,\n} from '@deephaven/components';\nimport './ConsoleStatusBar.scss';\nimport { EMPTY_FUNCTION } from '@deephaven/utils';\n\nconst POPPER_OPTIONS: PopperOptions = { placement: 'bottom-end' };\n\ninterface ConsoleStatusBarProps {\n children?: ReactNode;\n dh: typeof DhType;\n session: DhType.IdeSession;\n overflowActions?: DropdownActions;\n}\n\nfunction ConsoleStatusBar({\n children,\n dh,\n session,\n overflowActions,\n}: ConsoleStatusBarProps): ReactElement {\n const [pendingCommandCount, setPendingCommandCount] = useState(0);\n\n const handleCommandStarted = useCallback(\n async (event: DhType.Event<{ result: Promise<unknown> }>) => {\n setPendingCommandCount(count => count + 1);\n\n try {\n const { result } = event.detail;\n await result;\n } catch (error) {\n // No-op, fall through\n }\n\n setPendingCommandCount(count => count - 1);\n },\n []\n );\n\n useEffect(\n function startListening() {\n return session.addEventListener(\n dh.IdeSession.EVENT_COMMANDSTARTED,\n handleCommandStarted\n );\n },\n [dh, handleCommandStarted, session]\n );\n\n let statusIconClass = null;\n let tooltipText = null;\n if (pendingCommandCount > 0) {\n // Connected, Pending\n statusIconClass = 'console-status-icon-pending';\n tooltipText = 'Worker is busy';\n } else {\n // Connected, Idle\n statusIconClass = 'console-status-icon-idle';\n tooltipText = 'Worker is idle';\n }\n\n const hasActions =\n overflowActions != null &&\n (!Array.isArray(overflowActions) || overflowActions.length > 0);\n\n return (\n <div className=\"console-pane-status-bar\">\n <div>\n <div className={classNames('console-status-icon', statusIconClass)} />\n <Tooltip>{tooltipText}</Tooltip>\n </div>\n {children}\n {hasActions && (\n <Button\n kind=\"ghost\"\n icon={vsKebabVertical}\n tooltip=\"More Actions...\"\n aria-label=\"More Actions...\"\n // no-op: click is handled in `DropdownMenu`\n onClick={EMPTY_FUNCTION}\n >\n <DropdownMenu\n actions={overflowActions}\n popperOptions={POPPER_OPTIONS}\n />\n </Button>\n )}\n </div>\n );\n}\n\nexport default ConsoleStatusBar;\n"],"mappings":";;;;;;;;AAAA,OAAOA,KAAK,IAGVC,WAAW,EACXC,SAAS,EACTC,QAAQ,QACH,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,kBAAkB;AAElD,SACEC,MAAM,EAENC,YAAY,EAEZC,OAAO,QACF,uBAAuB;AAAC;AAE/B,SAASC,cAAc,QAAQ,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAElD,IAAMC,cAA6B,GAAG;EAAEC,SAAS,EAAE;AAAa,CAAC;AASjE,SAASC,gBAAgBA,CAAAC,IAAA,EAKe;EAAA,IAJtCC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACRC,EAAE,GAAAF,IAAA,CAAFE,EAAE;IACFC,OAAO,GAAAH,IAAA,CAAPG,OAAO;IACPC,eAAe,GAAAJ,IAAA,CAAfI,eAAe;EAEf,IAAAC,SAAA,GAAsDnB,QAAQ,CAAC,CAAC,CAAC;IAAAoB,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAA1DG,mBAAmB,GAAAF,UAAA;IAAEG,sBAAsB,GAAAH,UAAA;EAElD,IAAMI,oBAAoB,GAAG1B,WAAW;IAAA,IAAA2B,KAAA,GAAAC,iBAAA,CACtC,WAAOC,KAAiD,EAAK;MAC3DJ,sBAAsB,CAACK,KAAK,IAAIA,KAAK,GAAG,CAAC,CAAC;MAE1C,IAAI;QACF,IAAQC,MAAM,GAAKF,KAAK,CAACG,MAAM,CAAvBD,MAAM;QACd,MAAMA,MAAM;MACd,CAAC,CAAC,OAAOE,KAAK,EAAE;QACd;MAAA;MAGFR,sBAAsB,CAACK,KAAK,IAAIA,KAAK,GAAG,CAAC,CAAC;IAC5C,CAAC;IAAA,iBAAAI,EAAA;MAAA,OAAAP,KAAA,CAAAQ,KAAA,OAAAC,SAAA;IAAA;EAAA,KACD,EACF,CAAC;EAEDnC,SAAS,CACP,SAASoC,cAAcA,CAAA,EAAG;IACxB,OAAOlB,OAAO,CAACmB,gBAAgB,CAC7BpB,EAAE,CAACqB,UAAU,CAACC,oBAAoB,EAClCd,oBACF,CAAC;EACH,CAAC,EACD,CAACR,EAAE,EAAEQ,oBAAoB,EAAEP,OAAO,CACpC,CAAC;EAED,IAAIsB,eAAe,GAAG,IAAI;EAC1B,IAAIC,WAAW,GAAG,IAAI;EACtB,IAAIlB,mBAAmB,GAAG,CAAC,EAAE;IAC3B;IACAiB,eAAe,GAAG,6BAA6B;IAC/CC,WAAW,GAAG,gBAAgB;EAChC,CAAC,MAAM;IACL;IACAD,eAAe,GAAG,0BAA0B;IAC5CC,WAAW,GAAG,gBAAgB;EAChC;EAEA,IAAMC,UAAU,GACdvB,eAAe,IAAI,IAAI,KACtB,CAACwB,KAAK,CAACC,OAAO,CAACzB,eAAe,CAAC,IAAIA,eAAe,CAAC0B,MAAM,GAAG,CAAC,CAAC;EAEjE,oBACElC,KAAA;IAAKmC,SAAS,EAAC,yBAAyB;IAAA9B,QAAA,gBACtCL,KAAA;MAAAK,QAAA,gBACEP,IAAA;QAAKqC,SAAS,EAAE5C,UAAU,CAAC,qBAAqB,EAAEsC,eAAe;MAAE,CAAE,CAAC,eACtE/B,IAAA,CAACH,OAAO;QAAAU,QAAA,EAAEyB;MAAW,CAAU,CAAC;IAAA,CAC7B,CAAC,EACLzB,QAAQ,EACR0B,UAAU,iBACTjC,IAAA,CAACL,MAAM;MACL2C,IAAI,EAAC,OAAO;MACZC,IAAI,EAAE7C,eAAgB;MACtB8C,OAAO,EAAC,iBAAiB;MACzB,cAAW;MACX;MAAA;MACAC,OAAO,EAAE3C,cAAe;MAAAS,QAAA,eAExBP,IAAA,CAACJ,YAAY;QACX8C,OAAO,EAAEhC,eAAgB;QACzBiC,aAAa,EAAExC;MAAe,CAC/B;IAAC,CACI,CACT;EAAA,CACE,CAAC;AAEV;AAEA,eAAeE,gBAAgB","ignoreList":[]}
package/dist/HeapUsage.js CHANGED
@@ -1,5 +1,11 @@
1
1
  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
2
  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
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
4
+ 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."); }
5
+ 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; } }
6
+ 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; }
7
+ 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; } }
8
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
3
9
  import { useState, useRef, useCallback } from 'react';
4
10
  import classNames from 'classnames';
5
11
  import { Tooltip } from '@deephaven/components';
@@ -11,20 +17,25 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
17
  var log = Log.module('HeapUsage');
12
18
  function HeapUsage(_ref) {
13
19
  var _timestamps2;
14
- var {
15
- connection,
16
- defaultUpdateInterval,
17
- hoverUpdateInterval,
18
- bgMonitoring = true,
19
- monitorDuration
20
- } = _ref;
20
+ var connection = _ref.connection,
21
+ defaultUpdateInterval = _ref.defaultUpdateInterval,
22
+ hoverUpdateInterval = _ref.hoverUpdateInterval,
23
+ _ref$bgMonitoring = _ref.bgMonitoring,
24
+ bgMonitoring = _ref$bgMonitoring === void 0 ? true : _ref$bgMonitoring,
25
+ monitorDuration = _ref.monitorDuration;
21
26
  var chartTheme = useChartTheme();
22
- var [memoryUsage, setMemoryUsage] = useState({
23
- freeMemory: 0,
24
- maximumHeapSize: 999,
25
- totalHeapSize: 0
26
- });
27
- var [isOpen, setIsOpen] = useState(false);
27
+ var _useState = useState({
28
+ freeMemory: 0,
29
+ maximumHeapSize: 999,
30
+ totalHeapSize: 0
31
+ }),
32
+ _useState2 = _slicedToArray(_useState, 2),
33
+ memoryUsage = _useState2[0],
34
+ setMemoryUsage = _useState2[1];
35
+ var _useState3 = useState(false),
36
+ _useState4 = _slicedToArray(_useState3, 2),
37
+ isOpen = _useState4[0],
38
+ setIsOpen = _useState4[1];
28
39
  var historyUsage = useRef({
29
40
  timestamps: [],
30
41
  usages: []
@@ -40,10 +51,9 @@ function HeapUsage(_ref) {
40
51
  if (bgMonitoring || isOpen) {
41
52
  var currentUsage = (newUsage.totalHeapSize - newUsage.freeMemory) / newUsage.maximumHeapSize;
42
53
  var currentTime = Date.now();
43
- var {
44
- timestamps: _timestamps,
45
- usages: _usages
46
- } = historyUsage.current;
54
+ var _historyUsage$current = historyUsage.current,
55
+ _timestamps = _historyUsage$current.timestamps,
56
+ _usages = _historyUsage$current.usages;
47
57
  while (_timestamps.length !== 0 && currentTime - _timestamps[0] > monitorDuration * 1.5) {
48
58
  _timestamps.shift();
49
59
  _usages.shift();
@@ -64,11 +74,9 @@ function HeapUsage(_ref) {
64
74
  var toDecimalPlace = (num, dec) => Math.round(num * 10 ** dec) / 10 ** dec;
65
75
  var decimalPlace = 2;
66
76
  var GbToByte = 1024 ** 3;
67
- var {
68
- freeMemory,
69
- totalHeapSize,
70
- maximumHeapSize
71
- } = memoryUsage;
77
+ var freeMemory = memoryUsage.freeMemory,
78
+ totalHeapSize = memoryUsage.totalHeapSize,
79
+ maximumHeapSize = memoryUsage.maximumHeapSize;
72
80
  var freeMemoryGB = toDecimalPlace(freeMemory / GbToByte, decimalPlace);
73
81
  var totalHeapGB = toDecimalPlace(totalHeapSize / GbToByte, decimalPlace);
74
82
  var maxHeapGB = toDecimalPlace(maximumHeapSize / GbToByte, decimalPlace);
@@ -87,10 +95,9 @@ function HeapUsage(_ref) {
87
95
  })]
88
96
  });
89
97
  };
90
- var {
91
- timestamps,
92
- usages
93
- } = historyUsage.current;
98
+ var _historyUsage$current2 = historyUsage.current,
99
+ timestamps = _historyUsage$current2.timestamps,
100
+ usages = _historyUsage$current2.usages;
94
101
  var lastTimestamp = (_timestamps2 = timestamps[timestamps.length - 1]) !== null && _timestamps2 !== void 0 ? _timestamps2 : 0;
95
102
  var totalPercentage = totalHeapSize / maximumHeapSize;
96
103
  var usedPercentage = (totalHeapSize - freeMemory) / maximumHeapSize;
@@ -1 +1 @@
1
- {"version":3,"file":"HeapUsage.js","names":["useState","useRef","useCallback","classNames","Tooltip","Plot","useChartTheme","Log","useAsyncInterval","useIsMountedRef","jsx","_jsx","jsxs","_jsxs","log","module","HeapUsage","_ref","_timestamps2","connection","defaultUpdateInterval","hoverUpdateInterval","bgMonitoring","monitorDuration","chartTheme","memoryUsage","setMemoryUsage","freeMemory","maximumHeapSize","totalHeapSize","isOpen","setIsOpen","historyUsage","timestamps","usages","isMountedRef","setUsageUpdateInterval","_asyncToGenerator","newUsage","getWorkerHeapInfo","current","currentUsage","currentTime","Date","now","length","shift","push","e","warn","toDecimalPlace","num","dec","Math","round","decimalPlace","GbToByte","freeMemoryGB","totalHeapGB","maxHeapGB","inUseGB","getRow","text","size","bottomBorder","arguments","undefined","className","children","lastTimestamp","totalPercentage","usedPercentage","style","width","concat","toFixed","onEntered","onExited","interactive","data","x","y","type","mode","config","staticPlot","responsive","height","layout","margin","l","t","r","b","plot_bgcolor","paper_bgcolor","colorway","xaxis","dtick","gridcolor","linecolor","range","linewidth","mirror","yaxis"],"sources":["../src/HeapUsage.tsx"],"sourcesContent":["import { useState, type ReactElement, useRef, useCallback } from 'react';\nimport classNames from 'classnames';\nimport { Tooltip } from '@deephaven/components';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { Plot, useChartTheme } from '@deephaven/chart';\nimport Log from '@deephaven/log';\nimport { useAsyncInterval, useIsMountedRef } from '@deephaven/react-hooks';\nimport './HeapUsage.scss';\n\nconst log = Log.module('HeapUsage');\n\ninterface HeapUsageProps {\n connection: dh.IdeConnection;\n defaultUpdateInterval: number;\n hoverUpdateInterval: number;\n bgMonitoring?: boolean;\n\n // in millis\n monitorDuration: number;\n}\n\nfunction HeapUsage({\n connection,\n defaultUpdateInterval,\n hoverUpdateInterval,\n bgMonitoring = true,\n monitorDuration,\n}: HeapUsageProps): ReactElement {\n const chartTheme = useChartTheme();\n\n const [memoryUsage, setMemoryUsage] = useState({\n freeMemory: 0,\n maximumHeapSize: 999,\n totalHeapSize: 0,\n });\n\n const [isOpen, setIsOpen] = useState(false);\n\n const historyUsage = useRef<{ timestamps: number[]; usages: number[] }>({\n timestamps: [],\n usages: [],\n });\n\n const isMountedRef = useIsMountedRef();\n\n const setUsageUpdateInterval = useCallback(async () => {\n try {\n const newUsage = await connection.getWorkerHeapInfo();\n\n if (!isMountedRef.current) {\n return;\n }\n\n setMemoryUsage(newUsage);\n\n if (bgMonitoring || isOpen) {\n const currentUsage =\n (newUsage.totalHeapSize - newUsage.freeMemory) /\n newUsage.maximumHeapSize;\n const currentTime = Date.now();\n\n const { timestamps, usages } = historyUsage.current;\n while (\n timestamps.length !== 0 &&\n currentTime - timestamps[0] > monitorDuration * 1.5\n ) {\n timestamps.shift();\n usages.shift();\n }\n\n timestamps.push(currentTime);\n usages.push(currentUsage);\n } else {\n historyUsage.current = { timestamps: [], usages: [] };\n }\n } catch (e) {\n log.warn('Unable to get heap usage', e);\n }\n }, [connection, isMountedRef, bgMonitoring, isOpen, monitorDuration]);\n\n useAsyncInterval(\n setUsageUpdateInterval,\n isOpen ? hoverUpdateInterval : defaultUpdateInterval\n );\n\n const toDecimalPlace = (num: number, dec: number): number =>\n Math.round(num * 10 ** dec) / 10 ** dec;\n\n const decimalPlace = 2;\n const GbToByte = 1024 ** 3;\n\n const { freeMemory, totalHeapSize, maximumHeapSize } = memoryUsage;\n\n const freeMemoryGB = toDecimalPlace(freeMemory / GbToByte, decimalPlace);\n const totalHeapGB = toDecimalPlace(totalHeapSize / GbToByte, decimalPlace);\n const maxHeapGB = toDecimalPlace(maximumHeapSize / GbToByte, decimalPlace);\n const inUseGB = totalHeapGB - freeMemoryGB;\n\n const getRow = (\n text: string,\n size: string,\n bottomBorder = false\n ): JSX.Element => (\n <div\n className={classNames(`heap-usage-info-row`, {\n 'heading-bottom-border': bottomBorder,\n })}\n >\n <div className=\"font-weight-bold\">{text}</div>\n <div>{size}</div>\n </div>\n );\n\n const { timestamps, usages } = historyUsage.current;\n\n const lastTimestamp = timestamps[timestamps.length - 1] ?? 0;\n\n const totalPercentage = totalHeapSize / maximumHeapSize;\n const usedPercentage = (totalHeapSize - freeMemory) / maximumHeapSize;\n\n return (\n <div className=\"max-memory\">\n <div\n className=\"total-memory\"\n style={{\n width: `calc(${totalPercentage * 100}% - ${totalPercentage * 2}px`,\n }}\n />\n <div\n className={classNames('used-memory', {\n 'heap-overflow':\n (totalHeapSize - freeMemory) / maximumHeapSize > 0.95,\n })}\n style={{\n width: `calc(${usedPercentage * 100}% - ${usedPercentage * 2}px`,\n }}\n />\n <div className=\"memory-text\">{maxHeapGB.toFixed(1)} GB</div>\n\n <Tooltip\n onEntered={(): void => setIsOpen(true)}\n onExited={(): void => setIsOpen(false)}\n interactive\n >\n <div className=\"heap-tooltip\">\n {getRow(\n 'In use:',\n `${inUseGB.toFixed(decimalPlace)} of ${maxHeapGB.toFixed(\n decimalPlace\n )} GB`,\n true\n )}\n {getRow('Free:', `${freeMemoryGB.toFixed(decimalPlace)} GB`)}\n {getRow('Total:', `${totalHeapGB.toFixed(decimalPlace)} GB`)}\n {getRow('Max:', `${maxHeapGB.toFixed(decimalPlace)} GB`)}\n <div className=\"heap-plot\">\n <Plot\n data={[\n {\n x: [...timestamps],\n y: [...usages],\n type: 'scatter',\n mode: 'lines',\n },\n ]}\n config={{ staticPlot: true, responsive: true }}\n style={{\n width: '196px',\n height: '100px',\n }}\n layout={{\n margin: { l: 2, t: 2, r: 2, b: 2 },\n plot_bgcolor: 'transparent',\n paper_bgcolor: 'transparent',\n colorway: ['#4878ea'],\n xaxis: {\n dtick: Math.round(monitorDuration / 6),\n gridcolor: chartTheme.linecolor,\n range: [lastTimestamp - monitorDuration, lastTimestamp],\n linecolor: chartTheme.linecolor,\n linewidth: 2,\n mirror: true,\n },\n yaxis: {\n dtick: 0.2,\n gridcolor: chartTheme.linecolor,\n range: [0, 1],\n linecolor: chartTheme.linecolor,\n linewidth: 2,\n mirror: true,\n },\n }}\n />\n </div>\n <div className=\"heap-utilisation-text\">\n % utilization over {Math.round(monitorDuration / 1000 / 60)} min.\n </div>\n </div>\n </Tooltip>\n </div>\n );\n}\n\nexport default HeapUsage;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"HeapUsage.js","names":["useState","useRef","useCallback","classNames","Tooltip","Plot","useChartTheme","Log","useAsyncInterval","useIsMountedRef","jsx","_jsx","jsxs","_jsxs","log","module","HeapUsage","_ref","_timestamps2","connection","defaultUpdateInterval","hoverUpdateInterval","_ref$bgMonitoring","bgMonitoring","monitorDuration","chartTheme","_useState","freeMemory","maximumHeapSize","totalHeapSize","_useState2","_slicedToArray","memoryUsage","setMemoryUsage","_useState3","_useState4","isOpen","setIsOpen","historyUsage","timestamps","usages","isMountedRef","setUsageUpdateInterval","_asyncToGenerator","newUsage","getWorkerHeapInfo","current","currentUsage","currentTime","Date","now","_historyUsage$current","length","shift","push","e","warn","toDecimalPlace","num","dec","Math","round","decimalPlace","GbToByte","freeMemoryGB","totalHeapGB","maxHeapGB","inUseGB","getRow","text","size","bottomBorder","arguments","undefined","className","children","_historyUsage$current2","lastTimestamp","totalPercentage","usedPercentage","style","width","concat","toFixed","onEntered","onExited","interactive","data","x","y","type","mode","config","staticPlot","responsive","height","layout","margin","l","t","r","b","plot_bgcolor","paper_bgcolor","colorway","xaxis","dtick","gridcolor","linecolor","range","linewidth","mirror","yaxis"],"sources":["../src/HeapUsage.tsx"],"sourcesContent":["import { useState, type ReactElement, useRef, useCallback } from 'react';\nimport classNames from 'classnames';\nimport { Tooltip } from '@deephaven/components';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { Plot, useChartTheme } from '@deephaven/chart';\nimport Log from '@deephaven/log';\nimport { useAsyncInterval, useIsMountedRef } from '@deephaven/react-hooks';\nimport './HeapUsage.scss';\n\nconst log = Log.module('HeapUsage');\n\ninterface HeapUsageProps {\n connection: dh.IdeConnection;\n defaultUpdateInterval: number;\n hoverUpdateInterval: number;\n bgMonitoring?: boolean;\n\n // in millis\n monitorDuration: number;\n}\n\nfunction HeapUsage({\n connection,\n defaultUpdateInterval,\n hoverUpdateInterval,\n bgMonitoring = true,\n monitorDuration,\n}: HeapUsageProps): ReactElement {\n const chartTheme = useChartTheme();\n\n const [memoryUsage, setMemoryUsage] = useState({\n freeMemory: 0,\n maximumHeapSize: 999,\n totalHeapSize: 0,\n });\n\n const [isOpen, setIsOpen] = useState(false);\n\n const historyUsage = useRef<{ timestamps: number[]; usages: number[] }>({\n timestamps: [],\n usages: [],\n });\n\n const isMountedRef = useIsMountedRef();\n\n const setUsageUpdateInterval = useCallback(async () => {\n try {\n const newUsage = await connection.getWorkerHeapInfo();\n\n if (!isMountedRef.current) {\n return;\n }\n\n setMemoryUsage(newUsage);\n\n if (bgMonitoring || isOpen) {\n const currentUsage =\n (newUsage.totalHeapSize - newUsage.freeMemory) /\n newUsage.maximumHeapSize;\n const currentTime = Date.now();\n\n const { timestamps, usages } = historyUsage.current;\n while (\n timestamps.length !== 0 &&\n currentTime - timestamps[0] > monitorDuration * 1.5\n ) {\n timestamps.shift();\n usages.shift();\n }\n\n timestamps.push(currentTime);\n usages.push(currentUsage);\n } else {\n historyUsage.current = { timestamps: [], usages: [] };\n }\n } catch (e) {\n log.warn('Unable to get heap usage', e);\n }\n }, [connection, isMountedRef, bgMonitoring, isOpen, monitorDuration]);\n\n useAsyncInterval(\n setUsageUpdateInterval,\n isOpen ? hoverUpdateInterval : defaultUpdateInterval\n );\n\n const toDecimalPlace = (num: number, dec: number): number =>\n Math.round(num * 10 ** dec) / 10 ** dec;\n\n const decimalPlace = 2;\n const GbToByte = 1024 ** 3;\n\n const { freeMemory, totalHeapSize, maximumHeapSize } = memoryUsage;\n\n const freeMemoryGB = toDecimalPlace(freeMemory / GbToByte, decimalPlace);\n const totalHeapGB = toDecimalPlace(totalHeapSize / GbToByte, decimalPlace);\n const maxHeapGB = toDecimalPlace(maximumHeapSize / GbToByte, decimalPlace);\n const inUseGB = totalHeapGB - freeMemoryGB;\n\n const getRow = (\n text: string,\n size: string,\n bottomBorder = false\n ): JSX.Element => (\n <div\n className={classNames(`heap-usage-info-row`, {\n 'heading-bottom-border': bottomBorder,\n })}\n >\n <div className=\"font-weight-bold\">{text}</div>\n <div>{size}</div>\n </div>\n );\n\n const { timestamps, usages } = historyUsage.current;\n\n const lastTimestamp = timestamps[timestamps.length - 1] ?? 0;\n\n const totalPercentage = totalHeapSize / maximumHeapSize;\n const usedPercentage = (totalHeapSize - freeMemory) / maximumHeapSize;\n\n return (\n <div className=\"max-memory\">\n <div\n className=\"total-memory\"\n style={{\n width: `calc(${totalPercentage * 100}% - ${totalPercentage * 2}px`,\n }}\n />\n <div\n className={classNames('used-memory', {\n 'heap-overflow':\n (totalHeapSize - freeMemory) / maximumHeapSize > 0.95,\n })}\n style={{\n width: `calc(${usedPercentage * 100}% - ${usedPercentage * 2}px`,\n }}\n />\n <div className=\"memory-text\">{maxHeapGB.toFixed(1)} GB</div>\n\n <Tooltip\n onEntered={(): void => setIsOpen(true)}\n onExited={(): void => setIsOpen(false)}\n interactive\n >\n <div className=\"heap-tooltip\">\n {getRow(\n 'In use:',\n `${inUseGB.toFixed(decimalPlace)} of ${maxHeapGB.toFixed(\n decimalPlace\n )} GB`,\n true\n )}\n {getRow('Free:', `${freeMemoryGB.toFixed(decimalPlace)} GB`)}\n {getRow('Total:', `${totalHeapGB.toFixed(decimalPlace)} GB`)}\n {getRow('Max:', `${maxHeapGB.toFixed(decimalPlace)} GB`)}\n <div className=\"heap-plot\">\n <Plot\n data={[\n {\n x: [...timestamps],\n y: [...usages],\n type: 'scatter',\n mode: 'lines',\n },\n ]}\n config={{ staticPlot: true, responsive: true }}\n style={{\n width: '196px',\n height: '100px',\n }}\n layout={{\n margin: { l: 2, t: 2, r: 2, b: 2 },\n plot_bgcolor: 'transparent',\n paper_bgcolor: 'transparent',\n colorway: ['#4878ea'],\n xaxis: {\n dtick: Math.round(monitorDuration / 6),\n gridcolor: chartTheme.linecolor,\n range: [lastTimestamp - monitorDuration, lastTimestamp],\n linecolor: chartTheme.linecolor,\n linewidth: 2,\n mirror: true,\n },\n yaxis: {\n dtick: 0.2,\n gridcolor: chartTheme.linecolor,\n range: [0, 1],\n linecolor: chartTheme.linecolor,\n linewidth: 2,\n mirror: true,\n },\n }}\n />\n </div>\n <div className=\"heap-utilisation-text\">\n % utilization over {Math.round(monitorDuration / 1000 / 60)} min.\n </div>\n </div>\n </Tooltip>\n </div>\n );\n}\n\nexport default HeapUsage;\n"],"mappings":"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","ignoreList":[]}