@deephaven/dashboard-core-plugins 0.15.5 → 0.15.6-beta.5

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 (44) hide show
  1. package/dist/ChartBuilderPlugin.js.map +1 -1
  2. package/dist/ChartPlugin.d.ts +2 -1
  3. package/dist/ChartPlugin.d.ts.map +1 -1
  4. package/dist/ChartPlugin.js.map +1 -1
  5. package/dist/GridPlugin.d.ts +2 -1
  6. package/dist/GridPlugin.d.ts.map +1 -1
  7. package/dist/GridPlugin.js.map +1 -1
  8. package/dist/PandasPlugin.d.ts +2 -1
  9. package/dist/PandasPlugin.d.ts.map +1 -1
  10. package/dist/PandasPlugin.js.map +1 -1
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +1 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/linker/index.d.ts +2 -0
  16. package/dist/linker/index.d.ts.map +1 -0
  17. package/dist/linker/index.js +2 -0
  18. package/dist/linker/index.js.map +1 -0
  19. package/dist/panels/ChartFilterOverlay.d.ts +4 -2
  20. package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
  21. package/dist/panels/ChartFilterOverlay.js.map +1 -1
  22. package/dist/panels/ChartPanel.d.ts +57 -19
  23. package/dist/panels/ChartPanel.d.ts.map +1 -1
  24. package/dist/panels/ChartPanel.js +25 -14
  25. package/dist/panels/ChartPanel.js.map +1 -1
  26. package/dist/panels/IrisGridPanel.d.ts +1 -1
  27. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  28. package/dist/panels/IrisGridPanel.js +5 -5
  29. package/dist/panels/IrisGridPanel.js.map +1 -1
  30. package/dist/panels/NotebookPanel.d.ts.map +1 -1
  31. package/dist/panels/NotebookPanel.js +2 -3
  32. package/dist/panels/NotebookPanel.js.map +1 -1
  33. package/dist/panels/PandasPanel.d.ts +1 -1
  34. package/dist/panels/PandasPanel.d.ts.map +1 -1
  35. package/dist/panels/PandasPanel.js +2 -2
  36. package/dist/panels/PandasPanel.js.map +1 -1
  37. package/dist/panels/index.d.ts +3 -0
  38. package/dist/panels/index.d.ts.map +1 -1
  39. package/dist/panels/index.js +3 -0
  40. package/dist/panels/index.js.map +1 -1
  41. package/dist/redux/selectors.d.ts +4 -4
  42. package/dist/redux/selectors.js +4 -4
  43. package/dist/redux/selectors.js.map +1 -1
  44. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/panels/NotebookPanel.tsx"],"names":["React","Component","ReactDOM","memoize","connect","FontAwesomeIcon","BasicModal","ContextActions","DropdownMenu","Tooltip","GLOBAL_SHORTCUTS","ScriptEditor","ScriptEditorUtils","SHORTCUTS","FileUtils","NewItemModal","vsSave","vsKebabVertical","dhFileSearch","vsPlay","dhRunSelection","getFileStorage","classNames","debounce","Log","assertNotNull","Pending","PromiseUtils","ConsoleEvent","NotebookEvent","getDashboardSessionWrapper","Panel","MarkdownNotebook","log","module","DEBOUNCE_PANEL_STATE_UPDATE","NotebookPanel","handleError","error","isCanceled","languageFromFileName","fileName","extension","getExtension","toLowerCase","constructor","props","title","icon","action","handleFind","group","groups","high","shortcut","NOTEBOOK","FIND","order","handleBlur","bind","handleCloseCancel","handleCloseDiscard","handleCloseSave","handleCopy","handleEditorChange","handleFocus","handleLinkClick","handleLoadSuccess","handleLoadError","handlePanelTabClick","handleRenameFile","handleResize","handleRunCommand","handleRunAll","handleRunSelected","handleSave","handleSaveAsCancel","handleSaveAsSubmit","handleSaveError","handleSaveSuccess","handleSessionOpened","handleSessionClosed","handleShow","handleShowRename","handleTab","handleTabFocus","handleTabBlur","handleTransformLinkUri","pending","debouncedSavePanelState","savePanelState","debouncedLoad","load","notebook","tabTitleElement","tabInitOnce","shouldPromptClose","isDashboardActive","session","sessionLanguage","panelState","settings","value","language","fileMetadata","isPreview","hasFileId","itemName","hasPath","isUnsaved","changeCount","state","undefined","isFocused","isLoading","isLoaded","savedChangeCount","showCloseModal","showSaveAsModal","scriptCode","debug","componentDidMount","glContainer","glEventHub","tab","initTab","initNotebookContent","on","RENAME_FILE","componentDidUpdate","prevProps","prevState","setPreviewStatus","componentWillUnmount","flush","cancel","off","emit","UNREGISTER_FILE","initTabCloseOverride","initTabClasses","close","setState","tabElement","element","get","titleElement","querySelector","classList","add","getNotebookValue","notebookValue","getValue","id","registerFileMetadata","Error","closeFileTabById","CLOSE_FILE","metadata","tabId","REGISTER_FILE","renameTab","RENAME","fileStorage","loadFile","then","loadedFile","filename","prevItemName","getBaseName","updatedSettings","content","catch","save","saveContent","updateSavedChangeCount","saveFile","basename","remove","initialSettings","dehydratedValue","dehydratedSettings","copyName","getCopyFileName","createNotebook","e","debug2","removePreviewStatus","isUndoing","isRedoing","toggleFind","event","notebooksUrl","href","currentTarget","startsWith","stopPropagation","preventDefault","notebookPath","substring","length","replace","notebookSettings","SELECT_NOTEBOOK","errorParam","isTimedOut","file","oldMetadata","deleteFile","name","oldName","newName","updateDimensions","command","runCommand","getSelectedCommand","args","isHidden","focus","src","endsWith","charAt","itemUri","URL","requestAnimationFrame","CREATE_NOTEBOOK","SEND_COMMAND","render","focusOnMount","DEFAULT_NAME","isMarkdown","isExistingItem","overflowActions","getOverflowActions","isSessionConnected","isLanguageMatching","runButtonsDisabled","toolbarDisabled","contextActions","SAVE","disabledRunButtonTooltip","getDisabledRunTooltip","disabledRunSelectedButtonTooltip","additionalActions","portal","find","createPortal","RUN","getDisplayText","RUN_SELECTED","POPPER_OPTIONS","placement","process","env","REACT_APP_NOTEBOOKS_URL","window","location","mapStateToProps","ownProps","sessionWrapper","localDashboardId","config","sessionConfig","type","forwardRef"],"mappings":"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","sourcesContent":["// Wrapper for the Notebook for use in a golden layout container\nimport React, { Component, MouseEvent, ReactElement } from 'react';\nimport ReactDOM from 'react-dom';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport type { editor } from 'monaco-editor';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n BasicModal,\n ContextActions,\n DropdownMenu,\n Tooltip,\n GLOBAL_SHORTCUTS,\n} from '@deephaven/components';\nimport { ScriptEditor, ScriptEditorUtils, SHORTCUTS } from '@deephaven/console';\nimport {\n FileStorage,\n FileUtils,\n NewItemModal,\n File,\n} from '@deephaven/file-explorer';\nimport {\n vsSave,\n vsKebabVertical,\n dhFileSearch,\n vsPlay,\n dhRunSelection,\n} from '@deephaven/icons';\nimport { getFileStorage, RootState } from '@deephaven/redux';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';\nimport { Container, EventEmitter, Tab } from '@deephaven/golden-layout';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { ConsoleEvent, NotebookEvent } from '../events';\nimport { getDashboardSessionWrapper } from '../redux';\nimport Panel from './Panel';\nimport MarkdownNotebook from './MarkdownNotebook';\nimport './NotebookPanel.scss';\n\nconst log = Log.module('NotebookPanel');\n\nconst DEBOUNCE_PANEL_STATE_UPDATE = 400;\n\ninterface Metadata {\n id: string;\n}\n\ninterface Settings {\n language: string;\n value: string | null;\n}\n\ninterface FileMetadata {\n itemName: string;\n id: string;\n}\n\ninterface PanelState {\n isPreview?: boolean;\n settings: Settings;\n fileMetadata: FileMetadata | null;\n}\n\ninterface NotebookPanelProps {\n fileStorage: FileStorage;\n glContainer: Container;\n glEventHub: EventEmitter;\n isDashboardActive: boolean;\n isPreview: boolean;\n metadata: Metadata;\n session: IdeSession;\n sessionLanguage: string;\n panelState: PanelState;\n notebooksUrl: string;\n}\n\ninterface NotebookPanelState {\n error?: {\n message?: string | undefined;\n };\n isDashboardActive: boolean;\n isFocused: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isPreview: boolean;\n\n savedChangeCount: number;\n changeCount: number;\n fileMetadata: FileMetadata | null;\n settings: Settings;\n\n session?: IdeSession;\n sessionLanguage?: string;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n\n showCloseModal: boolean;\n showSaveAsModal: boolean;\n\n scriptCode: string;\n\n itemName?: string;\n}\n\nclass NotebookPanel extends Component<NotebookPanelProps, NotebookPanelState> {\n static COMPONENT = 'NotebookPanel';\n\n static POPPER_OPTIONS = { placement: 'bottom-end' } as const;\n\n static DEFAULT_NAME = 'Untitled';\n\n static handleError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n }\n\n static defaultProps = {\n isDashboardActive: true,\n isPreview: false,\n session: null,\n sessionLanguage: null,\n notebooksUrl: new URL(\n `${process.env.REACT_APP_NOTEBOOKS_URL}/`,\n `${window.location}`\n ).href,\n };\n\n static languageFromFileName(fileName: string): string | null {\n const extension = FileUtils.getExtension(fileName).toLowerCase();\n switch (extension) {\n case 'py':\n case 'python':\n return 'python';\n case 'groovy':\n return 'groovy';\n case 'scala':\n return 'scala';\n default:\n return null;\n }\n }\n\n constructor(props: NotebookPanelProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleCloseCancel = this.handleCloseCancel.bind(this);\n this.handleCloseDiscard = this.handleCloseDiscard.bind(this);\n this.handleCloseSave = this.handleCloseSave.bind(this);\n this.handleCopy = this.handleCopy.bind(this);\n this.handleEditorChange = this.handleEditorChange.bind(this);\n this.handleFind = this.handleFind.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleLinkClick = this.handleLinkClick.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handlePanelTabClick = this.handlePanelTabClick.bind(this);\n this.handleRenameFile = this.handleRenameFile.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleRunCommand = this.handleRunCommand.bind(this);\n this.handleRunAll = this.handleRunAll.bind(this);\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.handleSaveAsCancel = this.handleSaveAsCancel.bind(this);\n this.handleSaveAsSubmit = this.handleSaveAsSubmit.bind(this);\n this.handleSaveError = this.handleSaveError.bind(this);\n this.handleSaveSuccess = this.handleSaveSuccess.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleShowRename = this.handleShowRename.bind(this);\n this.handleTab = this.handleTab.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTransformLinkUri = this.handleTransformLinkUri.bind(this);\n\n this.pending = new Pending();\n\n this.debouncedSavePanelState = debounce(\n this.savePanelState.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.debouncedLoad = debounce(\n this.load.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.notebook = null;\n\n this.tabTitleElement = null;\n\n this.tabInitOnce = false;\n this.shouldPromptClose = true;\n\n const { isDashboardActive, session, sessionLanguage, panelState } = props;\n\n let settings: { value: string | null; language: string } = {\n value: '',\n language: '',\n };\n let fileMetadata = null;\n let { isPreview } = props;\n if (panelState) {\n ({\n fileMetadata = fileMetadata,\n isPreview = isPreview,\n settings = settings,\n } = panelState);\n }\n\n // Not showing the unsaved indicator for null file id and editor content === '',\n // may need to implement some other indication that this notebook has never been saved\n const hasFileId =\n fileMetadata?.itemName && FileUtils.hasPath(fileMetadata.itemName);\n\n // Unsaved if file id != null and content != null\n // OR file id is null AND content is not null or ''\n const isUnsaved =\n (hasFileId && settings.value != null) || (!hasFileId && settings.value);\n const changeCount = isUnsaved ? 1 : 0;\n\n this.state = {\n error: undefined,\n isDashboardActive,\n isFocused: false,\n isLoading: true,\n isLoaded: false,\n isPreview,\n\n savedChangeCount: 0,\n changeCount,\n fileMetadata,\n settings,\n\n session,\n sessionLanguage,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n fileMetadata,\n settings,\n },\n\n showCloseModal: false,\n showSaveAsModal: false,\n\n scriptCode: '',\n };\n\n log.debug('constructor', props, this.state);\n }\n\n componentDidMount() {\n const { glContainer, glEventHub } = this.props;\n const { tab } = glContainer;\n if (tab) this.initTab(tab);\n this.initNotebookContent();\n glEventHub.on(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.on('tabClicked', this.handlePanelTabClick);\n }\n\n componentDidUpdate(\n prevProps: NotebookPanelProps,\n prevState: NotebookPanelState\n ): void {\n const { isPreview } = this.state;\n if (isPreview !== prevState.isPreview) {\n this.setPreviewStatus();\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSavePanelState.flush();\n this.pending.cancel();\n\n const { glContainer, glEventHub } = this.props;\n\n const { fileMetadata, isPreview } = this.state;\n glEventHub.off(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.off('tabClicked', this.handlePanelTabClick);\n glEventHub.emit(NotebookEvent.UNREGISTER_FILE, fileMetadata, isPreview);\n }\n\n pending: Pending;\n\n debouncedSavePanelState;\n\n debouncedLoad;\n\n notebook: ScriptEditor | null;\n\n tabTitleElement: Element | null;\n\n tabInitOnce: boolean;\n\n shouldPromptClose: boolean;\n\n // Called by TabEvent. Happens once when created, but also each time its moved.\n // when moved, need to re-init the unsaved indicators on title elements\n initTab(tab: Tab): void {\n if (!this.tabInitOnce) {\n this.tabInitOnce = true;\n this.initTabCloseOverride();\n }\n this.initTabClasses(tab);\n }\n\n // override glContainer.close() with a custom closure that checks if needs saving\n initTabCloseOverride() {\n const { glContainer } = this.props;\n const close = glContainer.close.bind(glContainer);\n glContainer.close = () => {\n const { changeCount, savedChangeCount } = this.state;\n if (changeCount !== savedChangeCount && this.shouldPromptClose) {\n this.setState({ showCloseModal: true });\n } else {\n close();\n }\n return true;\n };\n }\n\n initTabClasses(tab: Tab) {\n const tabElement = tab.element.get(0);\n assertNotNull(tabElement);\n const titleElement = tabElement.querySelector('.lm_title');\n this.tabTitleElement = titleElement;\n titleElement?.classList.add('notebook-title');\n this.setPreviewStatus();\n }\n\n getNotebookValue(): string | null {\n const { changeCount, savedChangeCount, settings } = this.state;\n const { value } = settings;\n if (changeCount !== savedChangeCount && this.notebook) {\n const notebookValue = this.notebook.getValue();\n return notebookValue != null ? notebookValue : value;\n }\n return value;\n }\n\n initNotebookContent(): void {\n // Init from file,\n // fallback to content from settings for unsaved notebook\n const { fileMetadata, settings, isPreview } = this.state;\n if (fileMetadata && fileMetadata.id) {\n log.debug('Init content from file');\n this.registerFileMetadata(fileMetadata, isPreview);\n this.load();\n return;\n }\n if (settings.value != null) {\n log.debug('Use content passed in the settings prop');\n this.handleLoadSuccess();\n return;\n }\n // No settings, no metadata\n this.handleLoadError(new Error('Missing file metadata'));\n }\n\n closeFileTabById(id: string): void {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.CLOSE_FILE, { id });\n }\n\n // Associate file id with the current tab\n // so the next time the file is opened this tab can be focused instead of opening a new tab\n registerFileMetadata(fileMetadata: FileMetadata, isPreview: boolean): void {\n const { glEventHub, metadata } = this.props;\n const { id: tabId } = metadata;\n glEventHub.emit(\n NotebookEvent.REGISTER_FILE,\n tabId,\n fileMetadata,\n isPreview\n );\n }\n\n renameTab(id: string, title: string): void {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.RENAME, id, title);\n }\n\n load() {\n const { fileMetadata, settings } = this.state;\n assertNotNull(fileMetadata);\n const { id } = fileMetadata;\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.loadFile(id))\n .then(loadedFile => {\n log.debug('Loaded file', loadedFile);\n const { filename: itemName } = loadedFile;\n const { itemName: prevItemName } = this.state;\n if (itemName !== prevItemName) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(itemName));\n }\n const updatedSettings = {\n ...settings,\n language: NotebookPanel.languageFromFileName(itemName) ?? '',\n };\n if (settings.value == null) {\n updatedSettings.value = loadedFile.content;\n }\n this.setState({\n fileMetadata: { id: itemName, itemName },\n settings: updatedSettings,\n });\n this.debouncedSavePanelState();\n })\n .then(this.handleLoadSuccess)\n .catch(this.handleLoadError);\n }\n\n /**\n * Attempts to save the notebook.\n * @returns Returns true if save has begun, false if user needed to be prompted\n */\n save(): boolean {\n const { fileMetadata } = this.state;\n if (fileMetadata && FileUtils.hasPath(fileMetadata.itemName)) {\n const content = this.getNotebookValue();\n if (content != null) {\n this.saveContent(fileMetadata.itemName, content);\n return true;\n }\n return false;\n }\n\n this.setState({ showSaveAsModal: true });\n return false;\n }\n\n /**\n * Update existing file content\n * @param filename The name of the file\n * @param content New file content\n */\n saveContent(filename: string, content: string): void {\n log.debug('saveContent', filename, content);\n this.updateSavedChangeCount();\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.saveFile({ filename, content, basename: filename }))\n .then(this.handleSaveSuccess)\n .catch(this.handleSaveError);\n }\n\n updateSavedChangeCount() {\n this.setState(({ changeCount }) => ({ savedChangeCount: changeCount }));\n }\n\n setPreviewStatus() {\n if (!this.tabTitleElement) {\n return;\n }\n const { isPreview } = this.state;\n log.debug('setPreviewStatus', this.tabTitleElement, isPreview);\n if (isPreview) {\n this.tabTitleElement.classList.add('is-preview');\n } else {\n this.tabTitleElement.classList.remove('is-preview');\n }\n }\n\n getOverflowActions = memoize(() => [\n {\n title: 'Find',\n icon: dhFileSearch,\n action: this.handleFind,\n group: ContextActions.groups.high,\n shortcut: SHORTCUTS.NOTEBOOK.FIND,\n order: 10,\n },\n ]);\n\n savePanelState() {\n this.setState(state => {\n const {\n changeCount,\n savedChangeCount,\n fileMetadata,\n isPreview,\n settings: initialSettings,\n } = state;\n const value = this.getNotebookValue();\n // notebooks with no unsaved changes have value === null in dehydrated state\n // content will be loaded from file when hydrating\n const dehydratedValue = changeCount !== savedChangeCount ? value : null;\n const settings = {\n ...initialSettings,\n value,\n };\n const dehydratedSettings = {\n ...initialSettings,\n value: dehydratedValue,\n };\n const panelState = {\n settings: dehydratedSettings,\n fileMetadata,\n isPreview,\n };\n log.debug('Saving panel state', panelState);\n return {\n settings,\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n });\n }\n\n handleCloseDiscard(): void {\n this.shouldPromptClose = false;\n this.setState({ showCloseModal: false });\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseSave(): void {\n this.shouldPromptClose = false;\n this.setState({ showCloseModal: false });\n if (this.save()) {\n const { glContainer } = this.props;\n glContainer.close();\n }\n }\n\n handleCloseCancel(): void {\n this.shouldPromptClose = true;\n this.setState({ showCloseModal: false });\n }\n\n handleCopy(): void {\n const { fileMetadata, settings } = this.state;\n assertNotNull(fileMetadata);\n const content = this.getNotebookValue();\n const { language } = settings;\n const { itemName } = fileMetadata;\n const copyName = FileUtils.getCopyFileName(itemName);\n log.debug('handleCopy', fileMetadata, itemName, copyName);\n this.createNotebook(copyName, language, content ?? undefined);\n }\n\n handleEditorChange(e: editor.IModelContentChangedEvent): void {\n log.debug2('handleEditorChanged', e);\n\n this.removePreviewStatus();\n\n this.setState(state => {\n const { changeCount, savedChangeCount } = state;\n const { isUndoing, isRedoing } = e;\n if (isUndoing) {\n // Note that it's possible to undo past where the user last saved, if they save and then undo for example\n return { changeCount: changeCount - 1, savedChangeCount };\n }\n\n if (!isRedoing && changeCount < savedChangeCount) {\n // We made another change after undoing some changes from the previous save\n // Just reset the saved counter to zero and increase the unchanged saves\n // It'll be set correctly on the next save\n return { changeCount: changeCount + 1, savedChangeCount: 0 };\n }\n\n return { changeCount: changeCount + 1, savedChangeCount };\n });\n this.debouncedSavePanelState();\n }\n\n handleFind() {\n if (this.notebook) {\n this.notebook.toggleFind();\n }\n }\n\n handleBlur(): void {\n log.debug('handleBlur');\n this.setState({ isFocused: false });\n }\n\n handleFocus(): void {\n log.debug('handleFocus');\n this.setState({ isFocused: true });\n }\n\n /**\n * @param event The click event from clicking on the link\n */\n handleLinkClick(event: MouseEvent<HTMLAnchorElement>) {\n const { notebooksUrl, session, sessionLanguage } = this.props;\n const { href } = event.currentTarget;\n if (!href || !href.startsWith(notebooksUrl)) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n\n const notebookPath = `/${href.substring(notebooksUrl.length)}`.replace(\n /%20/g,\n ' '\n );\n if (notebookPath === '/') {\n log.debug('Ignoring invalid notebook link', notebookPath);\n return;\n }\n\n log.debug('Notebook link clicked, opening', notebookPath);\n\n const { glEventHub } = this.props;\n const notebookSettings = {\n value: null,\n language: sessionLanguage,\n };\n const fileMetadata = { id: notebookPath, itemName: notebookPath };\n glEventHub.emit(\n NotebookEvent.SELECT_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n handleLoadSuccess() {\n this.setState({\n error: undefined,\n isLoaded: true,\n isLoading: false,\n });\n }\n\n handleLoadError(errorParam: { message?: string | undefined }) {\n let error = errorParam;\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n if (PromiseUtils.isTimedOut(error)) {\n error = new Error('File not found.');\n }\n log.error(error);\n this.setState({ error, isLoading: false });\n }\n\n handleSave() {\n log.debug('handleSave');\n this.save();\n }\n\n handleSaveSuccess(file: File) {\n const { fileStorage } = this.props;\n const fileMetadata = { id: file.filename, itemName: file.filename };\n const language = NotebookPanel.languageFromFileName(file.filename) ?? '';\n this.setState(state => {\n const { fileMetadata: oldMetadata } = state;\n const settings = {\n ...state.settings,\n language,\n };\n log.debug('handleSaveSuccess', fileMetadata, oldMetadata, settings);\n if (\n oldMetadata &&\n FileUtils.hasPath(oldMetadata.itemName) &&\n oldMetadata.itemName !== fileMetadata.itemName\n ) {\n log.debug('handleSaveSuccess deleting old file', oldMetadata.itemName);\n fileStorage\n .deleteFile(oldMetadata.itemName)\n .catch(NotebookPanel.handleError);\n }\n return {\n fileMetadata,\n settings,\n isPreview: false,\n };\n });\n this.debouncedSavePanelState();\n this.registerFileMetadata(fileMetadata, false);\n }\n\n handleSaveError(error: unknown) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n // There was an error saving, just reset the savedChangeCount\n // It's possible if they undo changes they'll be back at the spot where it was last saved successfully,\n // But we may as well continue showing the error until they actually save again\n this.setState({ savedChangeCount: 0 });\n log.error(error);\n }\n\n handleSaveAsCancel() {\n this.setState({ showSaveAsModal: false });\n }\n\n handleSaveAsSubmit(name: string): void {\n log.debug('handleSaveAsSubmit', name);\n const { fileMetadata } = this.state;\n if (!fileMetadata) {\n return;\n }\n const { itemName: prevItemName } = fileMetadata;\n const content = this.getNotebookValue() ?? '';\n this.setState({\n showSaveAsModal: false,\n });\n\n if (FileUtils.getBaseName(prevItemName) !== FileUtils.getBaseName(name)) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(name));\n }\n\n this.saveContent(name, content);\n }\n\n handleRenameFile(oldName: string, newName: string) {\n const { fileMetadata } = this.state;\n if (fileMetadata && fileMetadata.id === oldName) {\n this.setState({ fileMetadata: { id: newName, itemName: newName } });\n this.debouncedSavePanelState();\n }\n }\n\n handleResize(): void {\n this.notebook?.updateDimensions();\n }\n\n handleRunCommand(command?: string): void {\n this.runCommand(command);\n }\n\n handleRunAll(): void {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getValue() ?? undefined);\n }\n\n handleRunSelected(): void {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getSelectedCommand());\n }\n\n handleSessionOpened(\n session: IdeSession,\n { language }: { language: string }\n ): void {\n this.setState({\n session,\n sessionLanguage: language,\n });\n }\n\n handleSessionClosed(): void {\n this.setState({\n session: undefined,\n sessionLanguage: undefined,\n });\n }\n\n handleShow(): void {\n log.debug('handleShow');\n this.notebook?.updateDimensions();\n }\n\n handleShowRename(): void {\n this.setState({ showSaveAsModal: true });\n }\n\n handleTab(tab: Tab): void {\n log.debug('NotebookPanel tab event', tab);\n this.initTab(tab);\n }\n\n handleTabFocus(...args: unknown[]): void {\n log.debug('handleTabFocus', ...args);\n const { glContainer } = this.props;\n this.setState({\n isDashboardActive: true,\n });\n if (this.notebook && !glContainer.isHidden) {\n this.notebook.updateDimensions();\n }\n }\n\n handleTabBlur(): void {\n log.debug('handleTabBlur');\n this.setState({\n isDashboardActive: false,\n });\n }\n\n handlePanelTabClick(): void {\n log.debug('handlePanelTabClick');\n this.focus();\n }\n\n /**\n * Transform the link URI to load from where the notebook is if it's relative\n * @param src The link to transform\n * @returns String the transformed link\n */\n handleTransformLinkUri(src: string): string {\n const { notebooksUrl } = this.props;\n const { fileMetadata } = this.state;\n\n if (src.endsWith('/')) {\n return src;\n }\n\n if (src.startsWith('/')) {\n return `${notebooksUrl}${src.substring(1)}`;\n }\n\n let itemName = fileMetadata?.itemName;\n if (!itemName) {\n return src;\n }\n if (itemName.charAt(0) === '/') {\n itemName = itemName.substring(1);\n }\n\n const itemUri = new URL(itemName, notebooksUrl);\n return new URL(src, itemUri).href;\n }\n\n focus(): void {\n requestAnimationFrame(() => {\n if (this.notebook) {\n this.notebook.focus();\n }\n });\n }\n\n createNotebook(\n itemName: string,\n language: string | undefined,\n content = ''\n ): void {\n const { glEventHub } = this.props;\n const { session, sessionLanguage, settings } = this.state;\n const notebookSettings = {\n ...settings,\n language,\n value: content,\n };\n const fileMetadata = {\n id: null,\n itemName,\n };\n log.debug(\n 'handleCreateNotebook',\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n glEventHub.emit(\n NotebookEvent.CREATE_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n runCommand(command?: string): void {\n if (!command) {\n log.debug('Ignoring empty command.');\n return;\n }\n\n this.removePreviewStatus();\n\n const { glEventHub } = this.props;\n glEventHub.emit(ConsoleEvent.SEND_COMMAND, command, false, true);\n }\n\n removePreviewStatus(): void {\n this.setState(({ isPreview }) => {\n if (isPreview) {\n const { fileMetadata } = this.state;\n if (fileMetadata) {\n this.registerFileMetadata(fileMetadata, false);\n }\n return { isPreview: false };\n }\n return null;\n });\n }\n\n render(): ReactElement {\n const {\n fileStorage,\n glContainer,\n glContainer: { tab },\n glEventHub,\n } = this.props;\n const {\n changeCount,\n savedChangeCount,\n error,\n isDashboardActive,\n isLoaded,\n isLoading,\n isPreview,\n fileMetadata,\n session,\n sessionLanguage,\n settings: initialSettings,\n showCloseModal,\n showSaveAsModal,\n } = this.state;\n // We don't want to steal focus if this isn't shown or it's just a preview\n const focusOnMount =\n isDashboardActive && !glContainer.isHidden && !isPreview;\n const itemName = fileMetadata?.itemName ?? NotebookPanel.DEFAULT_NAME;\n const isMarkdown = itemName.endsWith('.md');\n const isExistingItem = fileMetadata?.id != null;\n const overflowActions = this.getOverflowActions();\n const settings = {\n ...initialSettings,\n };\n const isSessionConnected = session != null;\n const isLanguageMatching = sessionLanguage === settings.language;\n const runButtonsDisabled =\n !isLoaded || !isSessionConnected || !isLanguageMatching;\n const toolbarDisabled = !isLoaded;\n const contextActions = [\n {\n action: this.handleSave,\n shortcut: GLOBAL_SHORTCUTS.SAVE,\n },\n ];\n const disabledRunButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run'\n );\n const disabledRunSelectedButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run Selected'\n );\n\n const additionalActions = [\n {\n title: isExistingItem ? 'Rename' : 'Save As…',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleShowRename,\n },\n {\n title: 'Copy File',\n action: this.handleCopy,\n group: ContextActions.groups.high,\n order: 20,\n },\n ];\n\n const portal = tab.element.find('.lm_title_before').get(0);\n assertNotNull(portal);\n\n return (\n <>\n {tab &&\n ReactDOM.createPortal(\n <span\n className={classNames('editor-unsaved-indicator', {\n 'is-unsaved': changeCount !== savedChangeCount,\n })}\n />,\n portal // tab.element is jquery element, we want a dom element\n )}\n\n <Panel\n className=\"notebook-container\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onTab={this.handleTab}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabFocus={this.handleTabFocus}\n onTabBlur={this.handleTabBlur}\n onSessionOpen={this.handleSessionOpened}\n onSessionClose={this.handleSessionClosed}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n additionalActions={additionalActions}\n renderTabTooltip={() => itemName}\n >\n {!isMarkdown && (\n <>\n <div className=\"notebook-toolbar\">\n <span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-play\"\n onClick={this.handleRunAll}\n disabled={runButtonsDisabled}\n >\n <FontAwesomeIcon icon={vsPlay} transform=\"grow-4\" />\n <Tooltip>\n Run {SHORTCUTS.NOTEBOOK.RUN.getDisplayText()}\n </Tooltip>\n </button>\n {disabledRunButtonTooltip && (\n <Tooltip>{disabledRunButtonTooltip}</Tooltip>\n )}\n </span>\n <span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-play\"\n onClick={this.handleRunSelected}\n disabled={runButtonsDisabled}\n >\n <FontAwesomeIcon icon={dhRunSelection} transform=\"grow-4\" />\n <Tooltip>\n Run Selected{' '}\n {SHORTCUTS.NOTEBOOK.RUN_SELECTED.getDisplayText()}\n </Tooltip>\n </button>\n {disabledRunSelectedButtonTooltip && (\n <Tooltip>{disabledRunSelectedButtonTooltip}</Tooltip>\n )}\n </span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon mr-auto\"\n disabled={toolbarDisabled}\n onClick={this.handleSave}\n >\n <FontAwesomeIcon icon={vsSave} />\n <Tooltip>Save</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-overflow btn-link-icon\"\n disabled={toolbarDisabled}\n >\n <FontAwesomeIcon icon={vsKebabVertical} />\n <Tooltip>More Actions...</Tooltip>\n <DropdownMenu\n actions={overflowActions}\n popperOptions={NotebookPanel.POPPER_OPTIONS}\n />\n </button>\n </div>\n <ScriptEditor\n isLoaded={isLoaded}\n isLoading={isLoading}\n error={error}\n onChange={this.handleEditorChange}\n onRunCommand={this.handleRunCommand}\n session={session}\n sessionLanguage={sessionLanguage}\n settings={settings}\n focusOnMount={focusOnMount}\n ref={notebook => {\n this.notebook = notebook;\n }}\n />\n </>\n )}\n {isMarkdown && (\n <MarkdownNotebook\n content={settings.value ?? ''}\n onLinkClick={this.handleLinkClick}\n onRunCode={this.handleRunCommand}\n transformImageUri={this.handleTransformLinkUri}\n transformLinkUri={this.handleTransformLinkUri}\n />\n )}\n <NewItemModal\n isOpen={showSaveAsModal}\n type=\"file\"\n defaultValue={itemName}\n title={isExistingItem ? 'Rename' : 'Save file as'}\n onSubmit={this.handleSaveAsSubmit}\n onCancel={this.handleSaveAsCancel}\n notifyOnExtensionChange\n storage={fileStorage}\n />\n <BasicModal\n isOpen={showCloseModal}\n headerText={`Do you want to save the changes you made to ${itemName}?`}\n bodyText=\"Your changes will be lost if you don't save them.\"\n onCancel={this.handleCloseCancel}\n onDiscard={this.handleCloseDiscard}\n onConfirm={this.handleCloseSave}\n discardButtonText=\"Discard Changes\"\n confirmButtonText=\"Save\"\n />\n <ContextActions actions={contextActions} />\n </Panel>\n </>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n) => {\n const fileStorage = getFileStorage(state);\n const sessionWrapper = getDashboardSessionWrapper(\n state,\n ownProps.localDashboardId\n );\n const { session, config: sessionConfig } = sessionWrapper ?? {};\n const { type: sessionLanguage } = sessionConfig ?? {};\n return {\n fileStorage,\n session,\n sessionLanguage,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n NotebookPanel\n);\n"],"file":"NotebookPanel.js"}
1
+ {"version":3,"sources":["../../src/panels/NotebookPanel.tsx"],"names":["React","Component","ReactDOM","memoize","connect","FontAwesomeIcon","BasicModal","ContextActions","DropdownMenu","Tooltip","GLOBAL_SHORTCUTS","ScriptEditor","ScriptEditorUtils","SHORTCUTS","FileUtils","NewItemModal","vsSave","vsKebabVertical","dhFileSearch","vsPlay","dhRunSelection","getFileStorage","classNames","debounce","Log","assertNotNull","Pending","PromiseUtils","ConsoleEvent","NotebookEvent","getDashboardSessionWrapper","Panel","MarkdownNotebook","log","module","DEBOUNCE_PANEL_STATE_UPDATE","NotebookPanel","handleError","error","isCanceled","languageFromFileName","fileName","extension","getExtension","toLowerCase","constructor","props","title","icon","action","handleFind","group","groups","high","shortcut","NOTEBOOK","FIND","order","handleBlur","bind","handleCloseCancel","handleCloseDiscard","handleCloseSave","handleCopy","handleEditorChange","handleFocus","handleLinkClick","handleLoadSuccess","handleLoadError","handlePanelTabClick","handleRenameFile","handleResize","handleRunCommand","handleRunAll","handleRunSelected","handleSave","handleSaveAsCancel","handleSaveAsSubmit","handleSaveError","handleSaveSuccess","handleSessionOpened","handleSessionClosed","handleShow","handleShowRename","handleTab","handleTabFocus","handleTabBlur","handleTransformLinkUri","pending","debouncedSavePanelState","savePanelState","debouncedLoad","load","notebook","tabTitleElement","tabInitOnce","shouldPromptClose","isDashboardActive","session","sessionLanguage","panelState","settings","value","language","fileMetadata","isPreview","hasFileId","itemName","hasPath","isUnsaved","changeCount","state","undefined","isFocused","isLoading","isLoaded","savedChangeCount","showCloseModal","showSaveAsModal","scriptCode","debug","componentDidMount","glContainer","glEventHub","tab","initTab","initNotebookContent","on","RENAME_FILE","componentDidUpdate","prevProps","prevState","setPreviewStatus","componentWillUnmount","flush","cancel","off","emit","UNREGISTER_FILE","initTabCloseOverride","initTabClasses","close","setState","tabElement","element","get","titleElement","querySelector","classList","add","getNotebookValue","notebookValue","getValue","id","registerFileMetadata","Error","closeFileTabById","CLOSE_FILE","metadata","tabId","REGISTER_FILE","renameTab","RENAME","fileStorage","loadFile","then","loadedFile","filename","prevItemName","getBaseName","updatedSettings","content","catch","save","saveContent","updateSavedChangeCount","saveFile","basename","remove","initialSettings","dehydratedValue","dehydratedSettings","copyName","getCopyFileName","createNotebook","e","debug2","removePreviewStatus","isUndoing","isRedoing","toggleFind","event","notebooksUrl","href","currentTarget","startsWith","stopPropagation","preventDefault","notebookPath","substring","length","replace","notebookSettings","SELECT_NOTEBOOK","errorParam","isTimedOut","file","oldMetadata","deleteFile","name","oldName","newName","updateDimensions","command","runCommand","getSelectedCommand","args","isHidden","focus","src","endsWith","charAt","itemUri","URL","requestAnimationFrame","CREATE_NOTEBOOK","SEND_COMMAND","render","focusOnMount","DEFAULT_NAME","isMarkdown","isExistingItem","overflowActions","getOverflowActions","isSessionConnected","isLanguageMatching","runButtonsDisabled","toolbarDisabled","contextActions","SAVE","disabledRunButtonTooltip","getDisabledRunTooltip","disabledRunSelectedButtonTooltip","additionalActions","portal","find","createPortal","RUN","getDisplayText","RUN_SELECTED","POPPER_OPTIONS","placement","process","env","REACT_APP_NOTEBOOKS_URL","window","location","mapStateToProps","ownProps","sessionWrapper","localDashboardId","config","sessionConfig","type","forwardRef"],"mappings":";;;;;;AAAA;AACA,OAAOA,KAAP,IAAgBC,SAAhB,QAA2D,OAA3D;AACA,OAAOC,QAAP,MAAqB,WAArB;AACA,OAAOC,OAAP,MAAoB,aAApB;AACA,SAASC,OAAT,QAAwB,aAAxB;AAEA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SACEC,UADF,EAEEC,cAFF,EAGEC,YAHF,EAIEC,OAJF,EAKEC,gBALF,QAMO,uBANP;AAOA,SAASC,YAAT,EAAuBC,iBAAvB,EAA0CC,SAA1C,QAA2D,oBAA3D;AACA,SAEEC,SAFF,EAGEC,YAHF,QAKO,0BALP;AAMA,SACEC,MADF,EAEEC,eAFF,EAGEC,YAHF,EAIEC,MAJF,EAKEC,cALF,QAMO,kBANP;AAOA,SAASC,cAAT,QAA0C,kBAA1C;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,QAAP,MAAqB,iBAArB;AACA,OAAOC,GAAP,MAAgB,gBAAhB;AACA,SAASC,aAAT,EAAwBC,OAAxB,EAAiCC,YAAjC,QAAqD,kBAArD;SAGSC,Y,EAAcC,a;SACdC,0B;OACFC,K;OACAC,gB;;AAGP,IAAMC,GAAG,GAAGT,GAAG,CAACU,MAAJ,CAAW,eAAX,CAAZ;AAEA,IAAMC,2BAA2B,GAAG,GAApC;;AAgEA,MAAMC,aAAN,SAA4BnC,SAA5B,CAA8E;AAO1D,SAAXoC,WAAW,CAACC,KAAD,EAAuB;AACvC,QAAIX,YAAY,CAACY,UAAb,CAAwBD,KAAxB,CAAJ,EAAoC;AAClC;AACD;;AACDL,IAAAA,GAAG,CAACK,KAAJ,CAAUA,KAAV;AACD;;AAa0B,SAApBE,oBAAoB,CAACC,QAAD,EAAkC;AAC3D,QAAMC,SAAS,GAAG5B,SAAS,CAAC6B,YAAV,CAAuBF,QAAvB,EAAiCG,WAAjC,EAAlB;;AACA,YAAQF,SAAR;AACE,WAAK,IAAL;AACA,WAAK,QAAL;AACE,eAAO,QAAP;;AACF,WAAK,QAAL;AACE,eAAO,QAAP;;AACF,WAAK,OAAL;AACE,eAAO,OAAP;;AACF;AACE,eAAO,IAAP;AATJ;AAWD;;AAEDG,EAAAA,WAAW,CAACC,KAAD,EAA4B;AAAA;;AACrC,UAAMA,KAAN;;AADqC;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA,gDAsUlB3C,OAAO,CAAC,MAAM,CACjC;AACE4C,MAAAA,KAAK,EAAE,MADT;AAEEC,MAAAA,IAAI,EAAE9B,YAFR;AAGE+B,MAAAA,MAAM,EAAE,KAAKC,UAHf;AAIEC,MAAAA,KAAK,EAAE5C,cAAc,CAAC6C,MAAf,CAAsBC,IAJ/B;AAKEC,MAAAA,QAAQ,EAAEzC,SAAS,CAAC0C,QAAV,CAAmBC,IAL/B;AAMEC,MAAAA,KAAK,EAAE;AANT,KADiC,CAAP,CAtUW;;AAGrC,SAAKC,UAAL,GAAkB,KAAKA,UAAL,CAAgBC,IAAhB,CAAqB,IAArB,CAAlB;AACA,SAAKC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBD,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKE,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBF,IAAxB,CAA6B,IAA7B,CAA1B;AACA,SAAKG,eAAL,GAAuB,KAAKA,eAAL,CAAqBH,IAArB,CAA0B,IAA1B,CAAvB;AACA,SAAKI,UAAL,GAAkB,KAAKA,UAAL,CAAgBJ,IAAhB,CAAqB,IAArB,CAAlB;AACA,SAAKK,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBL,IAAxB,CAA6B,IAA7B,CAA1B;AACA,SAAKT,UAAL,GAAkB,KAAKA,UAAL,CAAgBS,IAAhB,CAAqB,IAArB,CAAlB;AACA,SAAKM,WAAL,GAAmB,KAAKA,WAAL,CAAiBN,IAAjB,CAAsB,IAAtB,CAAnB;AACA,SAAKO,eAAL,GAAuB,KAAKA,eAAL,CAAqBP,IAArB,CAA0B,IAA1B,CAAvB;AACA,SAAKQ,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBR,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKS,eAAL,GAAuB,KAAKA,eAAL,CAAqBT,IAArB,CAA0B,IAA1B,CAAvB;AACA,SAAKU,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBV,IAAzB,CAA8B,IAA9B,CAA3B;AACA,SAAKW,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBX,IAAtB,CAA2B,IAA3B,CAAxB;AACA,SAAKY,YAAL,GAAoB,KAAKA,YAAL,CAAkBZ,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKa,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBb,IAAtB,CAA2B,IAA3B,CAAxB;AACA,SAAKc,YAAL,GAAoB,KAAKA,YAAL,CAAkBd,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKe,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBf,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKgB,UAAL,GAAkB,KAAKA,UAAL,CAAgBhB,IAAhB,CAAqB,IAArB,CAAlB;AACA,SAAKiB,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBjB,IAAxB,CAA6B,IAA7B,CAA1B;AACA,SAAKkB,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBlB,IAAxB,CAA6B,IAA7B,CAA1B;AACA,SAAKmB,eAAL,GAAuB,KAAKA,eAAL,CAAqBnB,IAArB,CAA0B,IAA1B,CAAvB;AACA,SAAKoB,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBpB,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKqB,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBrB,IAAzB,CAA8B,IAA9B,CAA3B;AACA,SAAKsB,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBtB,IAAzB,CAA8B,IAA9B,CAA3B;AACA,SAAKuB,UAAL,GAAkB,KAAKA,UAAL,CAAgBvB,IAAhB,CAAqB,IAArB,CAAlB;AACA,SAAKwB,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBxB,IAAtB,CAA2B,IAA3B,CAAxB;AACA,SAAKyB,SAAL,GAAiB,KAAKA,SAAL,CAAezB,IAAf,CAAoB,IAApB,CAAjB;AACA,SAAK0B,cAAL,GAAsB,KAAKA,cAAL,CAAoB1B,IAApB,CAAyB,IAAzB,CAAtB;AACA,SAAK2B,aAAL,GAAqB,KAAKA,aAAL,CAAmB3B,IAAnB,CAAwB,IAAxB,CAArB;AACA,SAAK4B,sBAAL,GAA8B,KAAKA,sBAAL,CAA4B5B,IAA5B,CAAiC,IAAjC,CAA9B;AAEA,SAAK6B,OAAL,GAAe,IAAI9D,OAAJ,EAAf;AAEA,SAAK+D,uBAAL,GAA+BlE,QAAQ,CACrC,KAAKmE,cAAL,CAAoB/B,IAApB,CAAyB,IAAzB,CADqC,EAErCxB,2BAFqC,CAAvC;AAKA,SAAKwD,aAAL,GAAqBpE,QAAQ,CAC3B,KAAKqE,IAAL,CAAUjC,IAAV,CAAe,IAAf,CAD2B,EAE3BxB,2BAF2B,CAA7B;AAKA,SAAK0D,QAAL,GAAgB,IAAhB;AAEA,SAAKC,eAAL,GAAuB,IAAvB;AAEA,SAAKC,WAAL,GAAmB,KAAnB;AACA,SAAKC,iBAAL,GAAyB,IAAzB;AAEA,QAAM;AAAEC,MAAAA,iBAAF;AAAqBC,MAAAA,OAArB;AAA8BC,MAAAA,eAA9B;AAA+CC,MAAAA;AAA/C,QAA8DtD,KAApE;AAEA,QAAIuD,QAAoD,GAAG;AACzDC,MAAAA,KAAK,EAAE,EADkD;AAEzDC,MAAAA,QAAQ,EAAE;AAF+C,KAA3D;AAIA,QAAIC,YAAY,GAAG,IAAnB;AACA,QAAI;AAAEC,MAAAA;AAAF,QAAgB3D,KAApB;;AACA,QAAIsD,UAAJ,EAAgB;AACd,OAAC;AACCI,QAAAA,YAAY,GAAGA,YADhB;AAECC,QAAAA,SAAS,GAAGA,SAFb;AAGCJ,QAAAA,QAAQ,GAAGA;AAHZ,UAIGD,UAJJ;AAKD,KAnEoC,CAqErC;AACA;;;AACA,QAAMM,SAAS,GACb,kBAAAF,YAAY,UAAZ,sDAAcG,QAAd,KAA0B7F,SAAS,CAAC8F,OAAV,CAAkBJ,YAAY,CAACG,QAA/B,CAD5B,CAvEqC,CA0ErC;AACA;;AACA,QAAME,SAAS,GACZH,SAAS,IAAIL,QAAQ,CAACC,KAAT,IAAkB,IAAhC,IAA0C,CAACI,SAAD,IAAcL,QAAQ,CAACC,KADnE;AAEA,QAAMQ,WAAW,GAAGD,SAAS,GAAG,CAAH,GAAO,CAApC;AAEA,SAAKE,KAAL,GAAa;AACXzE,MAAAA,KAAK,EAAE0E,SADI;AAEXf,MAAAA,iBAFW;AAGXgB,MAAAA,SAAS,EAAE,KAHA;AAIXC,MAAAA,SAAS,EAAE,IAJA;AAKXC,MAAAA,QAAQ,EAAE,KALC;AAMXV,MAAAA,SANW;AAQXW,MAAAA,gBAAgB,EAAE,CARP;AASXN,MAAAA,WATW;AAUXN,MAAAA,YAVW;AAWXH,MAAAA,QAXW;AAaXH,MAAAA,OAbW;AAcXC,MAAAA,eAdW;AAgBX;AACAC,MAAAA,UAAU,EAAE;AACVI,QAAAA,YADU;AAEVH,QAAAA;AAFU,OAjBD;AAsBXgB,MAAAA,cAAc,EAAE,KAtBL;AAuBXC,MAAAA,eAAe,EAAE,KAvBN;AAyBXC,MAAAA,UAAU,EAAE;AAzBD,KAAb;AA4BAtF,IAAAA,GAAG,CAACuF,KAAJ,CAAU,aAAV,EAAyB1E,KAAzB,EAAgC,KAAKiE,KAArC;AACD;;AAEDU,EAAAA,iBAAiB,GAAG;AAClB,QAAM;AAAEC,MAAAA,WAAF;AAAeC,MAAAA;AAAf,QAA8B,KAAK7E,KAAzC;AACA,QAAM;AAAE8E,MAAAA;AAAF,QAAUF,WAAhB;AACA,QAAIE,GAAJ,EAAS,KAAKC,OAAL,CAAaD,GAAb;AACT,SAAKE,mBAAL;AACAH,IAAAA,UAAU,CAACI,EAAX,CAAclG,aAAa,CAACmG,WAA5B,EAAyC,KAAK1D,gBAA9C;AACAoD,IAAAA,WAAW,CAACK,EAAZ,CAAe,YAAf,EAA6B,KAAK1D,mBAAlC;AACD;;AAED4D,EAAAA,kBAAkB,CAChBC,SADgB,EAEhBC,SAFgB,EAGV;AACN,QAAM;AAAE1B,MAAAA;AAAF,QAAgB,KAAKM,KAA3B;;AACA,QAAIN,SAAS,KAAK0B,SAAS,CAAC1B,SAA5B,EAAuC;AACrC,WAAK2B,gBAAL;AACD;AACF;;AAEDC,EAAAA,oBAAoB,GAAS;AAC3B,SAAK5C,uBAAL,CAA6B6C,KAA7B;AACA,SAAK9C,OAAL,CAAa+C,MAAb;AAEA,QAAM;AAAEb,MAAAA,WAAF;AAAeC,MAAAA;AAAf,QAA8B,KAAK7E,KAAzC;AAEA,QAAM;AAAE0D,MAAAA,YAAF;AAAgBC,MAAAA;AAAhB,QAA8B,KAAKM,KAAzC;AACAY,IAAAA,UAAU,CAACa,GAAX,CAAe3G,aAAa,CAACmG,WAA7B,EAA0C,KAAK1D,gBAA/C;AACAoD,IAAAA,WAAW,CAACc,GAAZ,CAAgB,YAAhB,EAA8B,KAAKnE,mBAAnC;AACAsD,IAAAA,UAAU,CAACc,IAAX,CAAgB5G,aAAa,CAAC6G,eAA9B,EAA+ClC,YAA/C,EAA6DC,SAA7D;AACD;;AAgBD;AACA;AACAoB,EAAAA,OAAO,CAACD,GAAD,EAAiB;AACtB,QAAI,CAAC,KAAK7B,WAAV,EAAuB;AACrB,WAAKA,WAAL,GAAmB,IAAnB;AACA,WAAK4C,oBAAL;AACD;;AACD,SAAKC,cAAL,CAAoBhB,GAApB;AACD,GA5M2E,CA8M5E;;;AACAe,EAAAA,oBAAoB,GAAG;AACrB,QAAM;AAAEjB,MAAAA;AAAF,QAAkB,KAAK5E,KAA7B;AACA,QAAM+F,KAAK,GAAGnB,WAAW,CAACmB,KAAZ,CAAkBlF,IAAlB,CAAuB+D,WAAvB,CAAd;;AACAA,IAAAA,WAAW,CAACmB,KAAZ,GAAoB,MAAM;AACxB,UAAM;AAAE/B,QAAAA,WAAF;AAAeM,QAAAA;AAAf,UAAoC,KAAKL,KAA/C;;AACA,UAAID,WAAW,KAAKM,gBAAhB,IAAoC,KAAKpB,iBAA7C,EAAgE;AAC9D,aAAK8C,QAAL,CAAc;AAAEzB,UAAAA,cAAc,EAAE;AAAlB,SAAd;AACD,OAFD,MAEO;AACLwB,QAAAA,KAAK;AACN;;AACD,aAAO,IAAP;AACD,KARD;AASD;;AAEDD,EAAAA,cAAc,CAAChB,GAAD,EAAW;AACvB,QAAMmB,UAAU,GAAGnB,GAAG,CAACoB,OAAJ,CAAYC,GAAZ,CAAgB,CAAhB,CAAnB;AACAxH,IAAAA,aAAa,CAACsH,UAAD,CAAb;AACA,QAAMG,YAAY,GAAGH,UAAU,CAACI,aAAX,CAAyB,WAAzB,CAArB;AACA,SAAKrD,eAAL,GAAuBoD,YAAvB;AACAA,IAAAA,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEE,SAAd,CAAwBC,GAAxB,CAA4B,gBAA5B;AACA,SAAKjB,gBAAL;AACD;;AAEDkB,EAAAA,gBAAgB,GAAkB;AAChC,QAAM;AAAExC,MAAAA,WAAF;AAAeM,MAAAA,gBAAf;AAAiCf,MAAAA;AAAjC,QAA8C,KAAKU,KAAzD;AACA,QAAM;AAAET,MAAAA;AAAF,QAAYD,QAAlB;;AACA,QAAIS,WAAW,KAAKM,gBAAhB,IAAoC,KAAKvB,QAA7C,EAAuD;AACrD,UAAM0D,aAAa,GAAG,KAAK1D,QAAL,CAAc2D,QAAd,EAAtB;AACA,aAAOD,aAAa,IAAI,IAAjB,GAAwBA,aAAxB,GAAwCjD,KAA/C;AACD;;AACD,WAAOA,KAAP;AACD;;AAEDwB,EAAAA,mBAAmB,GAAS;AAC1B;AACA;AACA,QAAM;AAAEtB,MAAAA,YAAF;AAAgBH,MAAAA,QAAhB;AAA0BI,MAAAA;AAA1B,QAAwC,KAAKM,KAAnD;;AACA,QAAIP,YAAY,IAAIA,YAAY,CAACiD,EAAjC,EAAqC;AACnCxH,MAAAA,GAAG,CAACuF,KAAJ,CAAU,wBAAV;AACA,WAAKkC,oBAAL,CAA0BlD,YAA1B,EAAwCC,SAAxC;AACA,WAAKb,IAAL;AACA;AACD;;AACD,QAAIS,QAAQ,CAACC,KAAT,IAAkB,IAAtB,EAA4B;AAC1BrE,MAAAA,GAAG,CAACuF,KAAJ,CAAU,yCAAV;AACA,WAAKrD,iBAAL;AACA;AACD,KAdyB,CAe1B;;;AACA,SAAKC,eAAL,CAAqB,IAAIuF,KAAJ,CAAU,uBAAV,CAArB;AACD;;AAEDC,EAAAA,gBAAgB,CAACH,EAAD,EAAmB;AACjC,QAAM;AAAE9B,MAAAA;AAAF,QAAiB,KAAK7E,KAA5B;AACA6E,IAAAA,UAAU,CAACc,IAAX,CAAgB5G,aAAa,CAACgI,UAA9B,EAA0C;AAAEJ,MAAAA;AAAF,KAA1C;AACD,GAtQ2E,CAwQ5E;AACA;;;AACAC,EAAAA,oBAAoB,CAAClD,YAAD,EAA6BC,SAA7B,EAAuD;AACzE,QAAM;AAAEkB,MAAAA,UAAF;AAAcmC,MAAAA;AAAd,QAA2B,KAAKhH,KAAtC;AACA,QAAM;AAAE2G,MAAAA,EAAE,EAAEM;AAAN,QAAgBD,QAAtB;AACAnC,IAAAA,UAAU,CAACc,IAAX,CACE5G,aAAa,CAACmI,aADhB,EAEED,KAFF,EAGEvD,YAHF,EAIEC,SAJF;AAMD;;AAEDwD,EAAAA,SAAS,CAACR,EAAD,EAAa1G,KAAb,EAAkC;AACzC,QAAM;AAAE4E,MAAAA;AAAF,QAAiB,KAAK7E,KAA5B;AACA6E,IAAAA,UAAU,CAACc,IAAX,CAAgB5G,aAAa,CAACqI,MAA9B,EAAsCT,EAAtC,EAA0C1G,KAA1C;AACD;;AAED6C,EAAAA,IAAI,GAAG;AACL,QAAM;AAAEY,MAAAA,YAAF;AAAgBH,MAAAA;AAAhB,QAA6B,KAAKU,KAAxC;AACAtF,IAAAA,aAAa,CAAC+E,YAAD,CAAb;AACA,QAAM;AAAEiD,MAAAA;AAAF,QAASjD,YAAf;AACA,QAAM;AAAE2D,MAAAA;AAAF,QAAkB,KAAKrH,KAA7B;AACA,SAAK0C,OAAL,CACG6D,GADH,CACOc,WAAW,CAACC,QAAZ,CAAqBX,EAArB,CADP,EAEGY,IAFH,CAEQC,UAAU,IAAI;AAAA;;AAClBrI,MAAAA,GAAG,CAACuF,KAAJ,CAAU,aAAV,EAAyB8C,UAAzB;AACA,UAAM;AAAEC,QAAAA,QAAQ,EAAE5D;AAAZ,UAAyB2D,UAA/B;AACA,UAAM;AAAE3D,QAAAA,QAAQ,EAAE6D;AAAZ,UAA6B,KAAKzD,KAAxC;;AACA,UAAIJ,QAAQ,KAAK6D,YAAjB,EAA+B;AAC7B,YAAM;AAAEV,UAAAA;AAAF,YAAe,KAAKhH,KAA1B;AACA,YAAM;AAAE2G,UAAAA,EAAE,EAAEM;AAAN,YAAgBD,QAAtB;AACA,aAAKG,SAAL,CAAeF,KAAf,EAAsBjJ,SAAS,CAAC2J,WAAV,CAAsB9D,QAAtB,CAAtB;AACD;;AACD,UAAM+D,eAAe,mCAChBrE,QADgB;AAEnBE,QAAAA,QAAQ,2BAAEnE,aAAa,CAACI,oBAAd,CAAmCmE,QAAnC,CAAF,yEAAkD;AAFvC,QAArB;;AAIA,UAAIN,QAAQ,CAACC,KAAT,IAAkB,IAAtB,EAA4B;AAC1BoE,QAAAA,eAAe,CAACpE,KAAhB,GAAwBgE,UAAU,CAACK,OAAnC;AACD;;AACD,WAAK7B,QAAL,CAAc;AACZtC,QAAAA,YAAY,EAAE;AAAEiD,UAAAA,EAAE,EAAE9C,QAAN;AAAgBA,UAAAA;AAAhB,SADF;AAEZN,QAAAA,QAAQ,EAAEqE;AAFE,OAAd;AAIA,WAAKjF,uBAAL;AACD,KAvBH,EAwBG4E,IAxBH,CAwBQ,KAAKlG,iBAxBb,EAyBGyG,KAzBH,CAyBS,KAAKxG,eAzBd;AA0BD;AAED;AACF;AACA;AACA;;;AACEyG,EAAAA,IAAI,GAAY;AACd,QAAM;AAAErE,MAAAA;AAAF,QAAmB,KAAKO,KAA9B;;AACA,QAAIP,YAAY,IAAI1F,SAAS,CAAC8F,OAAV,CAAkBJ,YAAY,CAACG,QAA/B,CAApB,EAA8D;AAC5D,UAAMgE,OAAO,GAAG,KAAKrB,gBAAL,EAAhB;;AACA,UAAIqB,OAAO,IAAI,IAAf,EAAqB;AACnB,aAAKG,WAAL,CAAiBtE,YAAY,CAACG,QAA9B,EAAwCgE,OAAxC;AACA,eAAO,IAAP;AACD;;AACD,aAAO,KAAP;AACD;;AAED,SAAK7B,QAAL,CAAc;AAAExB,MAAAA,eAAe,EAAE;AAAnB,KAAd;AACA,WAAO,KAAP;AACD;AAED;AACF;AACA;AACA;AACA;;;AACEwD,EAAAA,WAAW,CAACP,QAAD,EAAmBI,OAAnB,EAA0C;AACnD1I,IAAAA,GAAG,CAACuF,KAAJ,CAAU,aAAV,EAAyB+C,QAAzB,EAAmCI,OAAnC;AACA,SAAKI,sBAAL;AACA,QAAM;AAAEZ,MAAAA;AAAF,QAAkB,KAAKrH,KAA7B;AACA,SAAK0C,OAAL,CACG6D,GADH,CACOc,WAAW,CAACa,QAAZ,CAAqB;AAAET,MAAAA,QAAF;AAAYI,MAAAA,OAAZ;AAAqBM,MAAAA,QAAQ,EAAEV;AAA/B,KAArB,CADP,EAEGF,IAFH,CAEQ,KAAKtF,iBAFb,EAGG6F,KAHH,CAGS,KAAK9F,eAHd;AAID;;AAEDiG,EAAAA,sBAAsB,GAAG;AACvB,SAAKjC,QAAL,CAAc;AAAA,UAAC;AAAEhC,QAAAA;AAAF,OAAD;AAAA,aAAsB;AAAEM,QAAAA,gBAAgB,EAAEN;AAApB,OAAtB;AAAA,KAAd;AACD;;AAEDsB,EAAAA,gBAAgB,GAAG;AACjB,QAAI,CAAC,KAAKtC,eAAV,EAA2B;AACzB;AACD;;AACD,QAAM;AAAEW,MAAAA;AAAF,QAAgB,KAAKM,KAA3B;AACA9E,IAAAA,GAAG,CAACuF,KAAJ,CAAU,kBAAV,EAA8B,KAAK1B,eAAnC,EAAoDW,SAApD;;AACA,QAAIA,SAAJ,EAAe;AACb,WAAKX,eAAL,CAAqBsD,SAArB,CAA+BC,GAA/B,CAAmC,YAAnC;AACD,KAFD,MAEO;AACL,WAAKvD,eAAL,CAAqBsD,SAArB,CAA+B8B,MAA/B,CAAsC,YAAtC;AACD;AACF;;AAaDxF,EAAAA,cAAc,GAAG;AACf,SAAKoD,QAAL,CAAc/B,KAAK,IAAI;AACrB,UAAM;AACJD,QAAAA,WADI;AAEJM,QAAAA,gBAFI;AAGJZ,QAAAA,YAHI;AAIJC,QAAAA,SAJI;AAKJJ,QAAAA,QAAQ,EAAE8E;AALN,UAMFpE,KANJ;AAOA,UAAMT,KAAK,GAAG,KAAKgD,gBAAL,EAAd,CARqB,CASrB;AACA;;AACA,UAAM8B,eAAe,GAAGtE,WAAW,KAAKM,gBAAhB,GAAmCd,KAAnC,GAA2C,IAAnE;;AACA,UAAMD,QAAQ,mCACT8E,eADS;AAEZ7E,QAAAA;AAFY,QAAd;;AAIA,UAAM+E,kBAAkB,mCACnBF,eADmB;AAEtB7E,QAAAA,KAAK,EAAE8E;AAFe,QAAxB;;AAIA,UAAMhF,UAAU,GAAG;AACjBC,QAAAA,QAAQ,EAAEgF,kBADO;AAEjB7E,QAAAA,YAFiB;AAGjBC,QAAAA;AAHiB,OAAnB;AAKAxE,MAAAA,GAAG,CAACuF,KAAJ,CAAU,oBAAV,EAAgCpB,UAAhC;AACA,aAAO;AACLC,QAAAA,QADK;AAEL;AACAD,QAAAA;AAHK,OAAP;AAKD,KA/BD;AAgCD;;AAEDvC,EAAAA,kBAAkB,GAAS;AACzB,SAAKmC,iBAAL,GAAyB,KAAzB;AACA,SAAK8C,QAAL,CAAc;AAAEzB,MAAAA,cAAc,EAAE;AAAlB,KAAd;AACA,QAAM;AAAEK,MAAAA;AAAF,QAAkB,KAAK5E,KAA7B;AACA4E,IAAAA,WAAW,CAACmB,KAAZ;AACD;;AAED/E,EAAAA,eAAe,GAAS;AACtB,SAAKkC,iBAAL,GAAyB,KAAzB;AACA,SAAK8C,QAAL,CAAc;AAAEzB,MAAAA,cAAc,EAAE;AAAlB,KAAd;;AACA,QAAI,KAAKwD,IAAL,EAAJ,EAAiB;AACf,UAAM;AAAEnD,QAAAA;AAAF,UAAkB,KAAK5E,KAA7B;AACA4E,MAAAA,WAAW,CAACmB,KAAZ;AACD;AACF;;AAEDjF,EAAAA,iBAAiB,GAAS;AACxB,SAAKoC,iBAAL,GAAyB,IAAzB;AACA,SAAK8C,QAAL,CAAc;AAAEzB,MAAAA,cAAc,EAAE;AAAlB,KAAd;AACD;;AAEDtD,EAAAA,UAAU,GAAS;AACjB,QAAM;AAAEyC,MAAAA,YAAF;AAAgBH,MAAAA;AAAhB,QAA6B,KAAKU,KAAxC;AACAtF,IAAAA,aAAa,CAAC+E,YAAD,CAAb;AACA,QAAMmE,OAAO,GAAG,KAAKrB,gBAAL,EAAhB;AACA,QAAM;AAAE/C,MAAAA;AAAF,QAAeF,QAArB;AACA,QAAM;AAAEM,MAAAA;AAAF,QAAeH,YAArB;AACA,QAAM8E,QAAQ,GAAGxK,SAAS,CAACyK,eAAV,CAA0B5E,QAA1B,CAAjB;AACA1E,IAAAA,GAAG,CAACuF,KAAJ,CAAU,YAAV,EAAwBhB,YAAxB,EAAsCG,QAAtC,EAAgD2E,QAAhD;AACA,SAAKE,cAAL,CAAoBF,QAApB,EAA8B/E,QAA9B,EAAwCoE,OAAxC,aAAwCA,OAAxC,cAAwCA,OAAxC,GAAmD3D,SAAnD;AACD;;AAEDhD,EAAAA,kBAAkB,CAACyH,CAAD,EAA4C;AAC5DxJ,IAAAA,GAAG,CAACyJ,MAAJ,CAAW,qBAAX,EAAkCD,CAAlC;AAEA,SAAKE,mBAAL;AAEA,SAAK7C,QAAL,CAAc/B,KAAK,IAAI;AACrB,UAAM;AAAED,QAAAA,WAAF;AAAeM,QAAAA;AAAf,UAAoCL,KAA1C;AACA,UAAM;AAAE6E,QAAAA,SAAF;AAAaC,QAAAA;AAAb,UAA2BJ,CAAjC;;AACA,UAAIG,SAAJ,EAAe;AACb;AACA,eAAO;AAAE9E,UAAAA,WAAW,EAAEA,WAAW,GAAG,CAA7B;AAAgCM,UAAAA;AAAhC,SAAP;AACD;;AAED,UAAI,CAACyE,SAAD,IAAc/E,WAAW,GAAGM,gBAAhC,EAAkD;AAChD;AACA;AACA;AACA,eAAO;AAAEN,UAAAA,WAAW,EAAEA,WAAW,GAAG,CAA7B;AAAgCM,UAAAA,gBAAgB,EAAE;AAAlD,SAAP;AACD;;AAED,aAAO;AAAEN,QAAAA,WAAW,EAAEA,WAAW,GAAG,CAA7B;AAAgCM,QAAAA;AAAhC,OAAP;AACD,KAhBD;AAiBA,SAAK3B,uBAAL;AACD;;AAEDvC,EAAAA,UAAU,GAAG;AACX,QAAI,KAAK2C,QAAT,EAAmB;AACjB,WAAKA,QAAL,CAAciG,UAAd;AACD;AACF;;AAEDpI,EAAAA,UAAU,GAAS;AACjBzB,IAAAA,GAAG,CAACuF,KAAJ,CAAU,YAAV;AACA,SAAKsB,QAAL,CAAc;AAAE7B,MAAAA,SAAS,EAAE;AAAb,KAAd;AACD;;AAEDhD,EAAAA,WAAW,GAAS;AAClBhC,IAAAA,GAAG,CAACuF,KAAJ,CAAU,aAAV;AACA,SAAKsB,QAAL,CAAc;AAAE7B,MAAAA,SAAS,EAAE;AAAb,KAAd;AACD;AAED;AACF;AACA;;;AACE/C,EAAAA,eAAe,CAAC6H,KAAD,EAAuC;AACpD,QAAM;AAAEC,MAAAA,YAAF;AAAgB9F,MAAAA,OAAhB;AAAyBC,MAAAA;AAAzB,QAA6C,KAAKrD,KAAxD;AACA,QAAM;AAAEmJ,MAAAA;AAAF,QAAWF,KAAK,CAACG,aAAvB;;AACA,QAAI,CAACD,IAAD,IAAS,CAACA,IAAI,CAACE,UAAL,CAAgBH,YAAhB,CAAd,EAA6C;AAC3C;AACD;;AAEDD,IAAAA,KAAK,CAACK,eAAN;AACAL,IAAAA,KAAK,CAACM,cAAN;AAEA,QAAMC,YAAY,GAAG,WAAIL,IAAI,CAACM,SAAL,CAAeP,YAAY,CAACQ,MAA5B,CAAJ,EAA0CC,OAA1C,CACnB,MADmB,EAEnB,GAFmB,CAArB;;AAIA,QAAIH,YAAY,KAAK,GAArB,EAA0B;AACxBrK,MAAAA,GAAG,CAACuF,KAAJ,CAAU,gCAAV,EAA4C8E,YAA5C;AACA;AACD;;AAEDrK,IAAAA,GAAG,CAACuF,KAAJ,CAAU,gCAAV,EAA4C8E,YAA5C;AAEA,QAAM;AAAE3E,MAAAA;AAAF,QAAiB,KAAK7E,KAA5B;AACA,QAAM4J,gBAAgB,GAAG;AACvBpG,MAAAA,KAAK,EAAE,IADgB;AAEvBC,MAAAA,QAAQ,EAAEJ;AAFa,KAAzB;AAIA,QAAMK,YAAY,GAAG;AAAEiD,MAAAA,EAAE,EAAE6C,YAAN;AAAoB3F,MAAAA,QAAQ,EAAE2F;AAA9B,KAArB;AACA3E,IAAAA,UAAU,CAACc,IAAX,CACE5G,aAAa,CAAC8K,eADhB,EAEEzG,OAFF,EAGEC,eAHF,EAIEuG,gBAJF,EAKElG,YALF;AAOD;;AAEDrC,EAAAA,iBAAiB,GAAG;AAClB,SAAK2E,QAAL,CAAc;AACZxG,MAAAA,KAAK,EAAE0E,SADK;AAEZG,MAAAA,QAAQ,EAAE,IAFE;AAGZD,MAAAA,SAAS,EAAE;AAHC,KAAd;AAKD;;AAED9C,EAAAA,eAAe,CAACwI,UAAD,EAA+C;AAC5D,QAAItK,KAAK,GAAGsK,UAAZ;;AACA,QAAIjL,YAAY,CAACY,UAAb,CAAwBD,KAAxB,CAAJ,EAAoC;AAClC;AACD;;AACD,QAAIX,YAAY,CAACkL,UAAb,CAAwBvK,KAAxB,CAAJ,EAAoC;AAClCA,MAAAA,KAAK,GAAG,IAAIqH,KAAJ,CAAU,iBAAV,CAAR;AACD;;AACD1H,IAAAA,GAAG,CAACK,KAAJ,CAAUA,KAAV;AACA,SAAKwG,QAAL,CAAc;AAAExG,MAAAA,KAAF;AAAS4E,MAAAA,SAAS,EAAE;AAApB,KAAd;AACD;;AAEDvC,EAAAA,UAAU,GAAG;AACX1C,IAAAA,GAAG,CAACuF,KAAJ,CAAU,YAAV;AACA,SAAKqD,IAAL;AACD;;AAED9F,EAAAA,iBAAiB,CAAC+H,IAAD,EAAa;AAAA;;AAC5B,QAAM;AAAE3C,MAAAA;AAAF,QAAkB,KAAKrH,KAA7B;AACA,QAAM0D,YAAY,GAAG;AAAEiD,MAAAA,EAAE,EAAEqD,IAAI,CAACvC,QAAX;AAAqB5D,MAAAA,QAAQ,EAAEmG,IAAI,CAACvC;AAApC,KAArB;AACA,QAAMhE,QAAQ,6BAAGnE,aAAa,CAACI,oBAAd,CAAmCsK,IAAI,CAACvC,QAAxC,CAAH,2EAAwD,EAAtE;AACA,SAAKzB,QAAL,CAAc/B,KAAK,IAAI;AACrB,UAAM;AAAEP,QAAAA,YAAY,EAAEuG;AAAhB,UAAgChG,KAAtC;;AACA,UAAMV,QAAQ,mCACTU,KAAK,CAACV,QADG;AAEZE,QAAAA;AAFY,QAAd;;AAIAtE,MAAAA,GAAG,CAACuF,KAAJ,CAAU,mBAAV,EAA+BhB,YAA/B,EAA6CuG,WAA7C,EAA0D1G,QAA1D;;AACA,UACE0G,WAAW,IACXjM,SAAS,CAAC8F,OAAV,CAAkBmG,WAAW,CAACpG,QAA9B,CADA,IAEAoG,WAAW,CAACpG,QAAZ,KAAyBH,YAAY,CAACG,QAHxC,EAIE;AACA1E,QAAAA,GAAG,CAACuF,KAAJ,CAAU,qCAAV,EAAiDuF,WAAW,CAACpG,QAA7D;AACAwD,QAAAA,WAAW,CACR6C,UADH,CACcD,WAAW,CAACpG,QAD1B,EAEGiE,KAFH,CAESxI,aAAa,CAACC,WAFvB;AAGD;;AACD,aAAO;AACLmE,QAAAA,YADK;AAELH,QAAAA,QAFK;AAGLI,QAAAA,SAAS,EAAE;AAHN,OAAP;AAKD,KAtBD;AAuBA,SAAKhB,uBAAL;AACA,SAAKiE,oBAAL,CAA0BlD,YAA1B,EAAwC,KAAxC;AACD;;AAED1B,EAAAA,eAAe,CAACxC,KAAD,EAAiB;AAC9B,QAAIX,YAAY,CAACY,UAAb,CAAwBD,KAAxB,CAAJ,EAAoC;AAClC;AACD,KAH6B,CAI9B;AACA;AACA;;;AACA,SAAKwG,QAAL,CAAc;AAAE1B,MAAAA,gBAAgB,EAAE;AAApB,KAAd;AACAnF,IAAAA,GAAG,CAACK,KAAJ,CAAUA,KAAV;AACD;;AAEDsC,EAAAA,kBAAkB,GAAG;AACnB,SAAKkE,QAAL,CAAc;AAAExB,MAAAA,eAAe,EAAE;AAAnB,KAAd;AACD;;AAEDzC,EAAAA,kBAAkB,CAACoI,IAAD,EAAqB;AAAA;;AACrChL,IAAAA,GAAG,CAACuF,KAAJ,CAAU,oBAAV,EAAgCyF,IAAhC;AACA,QAAM;AAAEzG,MAAAA;AAAF,QAAmB,KAAKO,KAA9B;;AACA,QAAI,CAACP,YAAL,EAAmB;AACjB;AACD;;AACD,QAAM;AAAEG,MAAAA,QAAQ,EAAE6D;AAAZ,QAA6BhE,YAAnC;AACA,QAAMmE,OAAO,4BAAG,KAAKrB,gBAAL,EAAH,yEAA8B,EAA3C;AACA,SAAKR,QAAL,CAAc;AACZxB,MAAAA,eAAe,EAAE;AADL,KAAd;;AAIA,QAAIxG,SAAS,CAAC2J,WAAV,CAAsBD,YAAtB,MAAwC1J,SAAS,CAAC2J,WAAV,CAAsBwC,IAAtB,CAA5C,EAAyE;AACvE,UAAM;AAAEnD,QAAAA;AAAF,UAAe,KAAKhH,KAA1B;AACA,UAAM;AAAE2G,QAAAA,EAAE,EAAEM;AAAN,UAAgBD,QAAtB;AACA,WAAKG,SAAL,CAAeF,KAAf,EAAsBjJ,SAAS,CAAC2J,WAAV,CAAsBwC,IAAtB,CAAtB;AACD;;AAED,SAAKnC,WAAL,CAAiBmC,IAAjB,EAAuBtC,OAAvB;AACD;;AAEDrG,EAAAA,gBAAgB,CAAC4I,OAAD,EAAkBC,OAAlB,EAAmC;AACjD,QAAM;AAAE3G,MAAAA;AAAF,QAAmB,KAAKO,KAA9B;;AACA,QAAIP,YAAY,IAAIA,YAAY,CAACiD,EAAb,KAAoByD,OAAxC,EAAiD;AAC/C,WAAKpE,QAAL,CAAc;AAAEtC,QAAAA,YAAY,EAAE;AAAEiD,UAAAA,EAAE,EAAE0D,OAAN;AAAexG,UAAAA,QAAQ,EAAEwG;AAAzB;AAAhB,OAAd;AACA,WAAK1H,uBAAL;AACD;AACF;;AAEDlB,EAAAA,YAAY,GAAS;AAAA;;AACnB,2BAAKsB,QAAL,kEAAeuH,gBAAf;AACD;;AAED5I,EAAAA,gBAAgB,CAAC6I,OAAD,EAAyB;AACvC,SAAKC,UAAL,CAAgBD,OAAhB;AACD;;AAED5I,EAAAA,YAAY,GAAS;AAAA;;AACnB,QAAI,CAAC,KAAKoB,QAAV,EAAoB;AAClB5D,MAAAA,GAAG,CAACK,KAAJ,CAAU,4BAAV;AACA;AACD;;AACD,SAAKgL,UAAL,0BAAgB,KAAKzH,QAAL,CAAc2D,QAAd,EAAhB,yEAA4CxC,SAA5C;AACD;;AAEDtC,EAAAA,iBAAiB,GAAS;AACxB,QAAI,CAAC,KAAKmB,QAAV,EAAoB;AAClB5D,MAAAA,GAAG,CAACK,KAAJ,CAAU,4BAAV;AACA;AACD;;AACD,SAAKgL,UAAL,CAAgB,KAAKzH,QAAL,CAAc0H,kBAAd,EAAhB;AACD;;AAEDvI,EAAAA,mBAAmB,CACjBkB,OADiB,SAGX;AAAA,QADN;AAAEK,MAAAA;AAAF,KACM;AACN,SAAKuC,QAAL,CAAc;AACZ5C,MAAAA,OADY;AAEZC,MAAAA,eAAe,EAAEI;AAFL,KAAd;AAID;;AAEDtB,EAAAA,mBAAmB,GAAS;AAC1B,SAAK6D,QAAL,CAAc;AACZ5C,MAAAA,OAAO,EAAEc,SADG;AAEZb,MAAAA,eAAe,EAAEa;AAFL,KAAd;AAID;;AAED9B,EAAAA,UAAU,GAAS;AAAA;;AACjBjD,IAAAA,GAAG,CAACuF,KAAJ,CAAU,YAAV;AACA,4BAAK3B,QAAL,oEAAeuH,gBAAf;AACD;;AAEDjI,EAAAA,gBAAgB,GAAS;AACvB,SAAK2D,QAAL,CAAc;AAAExB,MAAAA,eAAe,EAAE;AAAnB,KAAd;AACD;;AAEDlC,EAAAA,SAAS,CAACwC,GAAD,EAAiB;AACxB3F,IAAAA,GAAG,CAACuF,KAAJ,CAAU,yBAAV,EAAqCI,GAArC;AACA,SAAKC,OAAL,CAAaD,GAAb;AACD;;AAEDvC,EAAAA,cAAc,GAA2B;AAAA,sCAAvBmI,IAAuB;AAAvBA,MAAAA,IAAuB;AAAA;;AACvCvL,IAAAA,GAAG,CAACuF,KAAJ,CAAU,gBAAV,EAA4B,GAAGgG,IAA/B;AACA,QAAM;AAAE9F,MAAAA;AAAF,QAAkB,KAAK5E,KAA7B;AACA,SAAKgG,QAAL,CAAc;AACZ7C,MAAAA,iBAAiB,EAAE;AADP,KAAd;;AAGA,QAAI,KAAKJ,QAAL,IAAiB,CAAC6B,WAAW,CAAC+F,QAAlC,EAA4C;AAC1C,WAAK5H,QAAL,CAAcuH,gBAAd;AACD;AACF;;AAED9H,EAAAA,aAAa,GAAS;AACpBrD,IAAAA,GAAG,CAACuF,KAAJ,CAAU,eAAV;AACA,SAAKsB,QAAL,CAAc;AACZ7C,MAAAA,iBAAiB,EAAE;AADP,KAAd;AAGD;;AAED5B,EAAAA,mBAAmB,GAAS;AAC1BpC,IAAAA,GAAG,CAACuF,KAAJ,CAAU,qBAAV;AACA,SAAKkG,KAAL;AACD;AAED;AACF;AACA;AACA;AACA;;;AACEnI,EAAAA,sBAAsB,CAACoI,GAAD,EAAsB;AAC1C,QAAM;AAAE3B,MAAAA;AAAF,QAAmB,KAAKlJ,KAA9B;AACA,QAAM;AAAE0D,MAAAA;AAAF,QAAmB,KAAKO,KAA9B;;AAEA,QAAI4G,GAAG,CAACC,QAAJ,CAAa,GAAb,CAAJ,EAAuB;AACrB,aAAOD,GAAP;AACD;;AAED,QAAIA,GAAG,CAACxB,UAAJ,CAAe,GAAf,CAAJ,EAAyB;AACvB,uBAAUH,YAAV,SAAyB2B,GAAG,CAACpB,SAAJ,CAAc,CAAd,CAAzB;AACD;;AAED,QAAI5F,QAAQ,GAAGH,YAAH,aAAGA,YAAH,uBAAGA,YAAY,CAAEG,QAA7B;;AACA,QAAI,CAACA,QAAL,EAAe;AACb,aAAOgH,GAAP;AACD;;AACD,QAAIhH,QAAQ,CAACkH,MAAT,CAAgB,CAAhB,MAAuB,GAA3B,EAAgC;AAC9BlH,MAAAA,QAAQ,GAAGA,QAAQ,CAAC4F,SAAT,CAAmB,CAAnB,CAAX;AACD;;AAED,QAAMuB,OAAO,GAAG,IAAIC,GAAJ,CAAQpH,QAAR,EAAkBqF,YAAlB,CAAhB;AACA,WAAO,IAAI+B,GAAJ,CAAQJ,GAAR,EAAaG,OAAb,EAAsB7B,IAA7B;AACD;;AAEDyB,EAAAA,KAAK,GAAS;AACZM,IAAAA,qBAAqB,CAAC,MAAM;AAC1B,UAAI,KAAKnI,QAAT,EAAmB;AACjB,aAAKA,QAAL,CAAc6H,KAAd;AACD;AACF,KAJoB,CAArB;AAKD;;AAEDlC,EAAAA,cAAc,CACZ7E,QADY,EAEZJ,QAFY,EAIN;AAAA,QADNoE,OACM,uEADI,EACJ;AACN,QAAM;AAAEhD,MAAAA;AAAF,QAAiB,KAAK7E,KAA5B;AACA,QAAM;AAAEoD,MAAAA,OAAF;AAAWC,MAAAA,eAAX;AAA4BE,MAAAA;AAA5B,QAAyC,KAAKU,KAApD;;AACA,QAAM2F,gBAAgB,mCACjBrG,QADiB;AAEpBE,MAAAA,QAFoB;AAGpBD,MAAAA,KAAK,EAAEqE;AAHa,MAAtB;;AAKA,QAAMnE,YAAY,GAAG;AACnBiD,MAAAA,EAAE,EAAE,IADe;AAEnB9C,MAAAA;AAFmB,KAArB;AAIA1E,IAAAA,GAAG,CAACuF,KAAJ,CACE,sBADF,EAEEtB,OAFF,EAGEC,eAHF,EAIEuG,gBAJF,EAKElG,YALF;AAOAmB,IAAAA,UAAU,CAACc,IAAX,CACE5G,aAAa,CAACoM,eADhB,EAEE/H,OAFF,EAGEC,eAHF,EAIEuG,gBAJF,EAKElG,YALF;AAOD;;AAED8G,EAAAA,UAAU,CAACD,OAAD,EAAyB;AACjC,QAAI,CAACA,OAAL,EAAc;AACZpL,MAAAA,GAAG,CAACuF,KAAJ,CAAU,yBAAV;AACA;AACD;;AAED,SAAKmE,mBAAL;AAEA,QAAM;AAAEhE,MAAAA;AAAF,QAAiB,KAAK7E,KAA5B;AACA6E,IAAAA,UAAU,CAACc,IAAX,CAAgB7G,YAAY,CAACsM,YAA7B,EAA2Cb,OAA3C,EAAoD,KAApD,EAA2D,IAA3D;AACD;;AAED1B,EAAAA,mBAAmB,GAAS;AAC1B,SAAK7C,QAAL,CAAc,SAAmB;AAAA,UAAlB;AAAErC,QAAAA;AAAF,OAAkB;;AAC/B,UAAIA,SAAJ,EAAe;AACb,YAAM;AAAED,UAAAA;AAAF,YAAmB,KAAKO,KAA9B;;AACA,YAAIP,YAAJ,EAAkB;AAChB,eAAKkD,oBAAL,CAA0BlD,YAA1B,EAAwC,KAAxC;AACD;;AACD,eAAO;AAAEC,UAAAA,SAAS,EAAE;AAAb,SAAP;AACD;;AACD,aAAO,IAAP;AACD,KATD;AAUD;;AAED0H,EAAAA,MAAM,GAAiB;AAAA;;AACrB,QAAM;AACJhE,MAAAA,WADI;AAEJzC,MAAAA,WAFI;AAGJA,MAAAA,WAAW,EAAE;AAAEE,QAAAA;AAAF,OAHT;AAIJD,MAAAA;AAJI,QAKF,KAAK7E,KALT;AAMA,QAAM;AACJgE,MAAAA,WADI;AAEJM,MAAAA,gBAFI;AAGJ9E,MAAAA,KAHI;AAIJ2D,MAAAA,iBAJI;AAKJkB,MAAAA,QALI;AAMJD,MAAAA,SANI;AAOJT,MAAAA,SAPI;AAQJD,MAAAA,YARI;AASJN,MAAAA,OATI;AAUJC,MAAAA,eAVI;AAWJE,MAAAA,QAAQ,EAAE8E,eAXN;AAYJ9D,MAAAA,cAZI;AAaJC,MAAAA;AAbI,QAcF,KAAKP,KAdT,CAPqB,CAsBrB;;AACA,QAAMqH,YAAY,GAChBnI,iBAAiB,IAAI,CAACyB,WAAW,CAAC+F,QAAlC,IAA8C,CAAChH,SADjD;AAEA,QAAME,QAAQ,4BAAGH,YAAH,aAAGA,YAAH,uBAAGA,YAAY,CAAEG,QAAjB,yEAA6BvE,aAAa,CAACiM,YAAzD;AACA,QAAMC,UAAU,GAAG3H,QAAQ,CAACiH,QAAT,CAAkB,KAAlB,CAAnB;AACA,QAAMW,cAAc,GAAG,CAAA/H,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEiD,EAAd,KAAoB,IAA3C;AACA,QAAM+E,eAAe,GAAG,KAAKC,kBAAL,EAAxB;;AACA,QAAMpI,QAAQ,qBACT8E,eADS,CAAd;;AAGA,QAAMuD,kBAAkB,GAAGxI,OAAO,IAAI,IAAtC;AACA,QAAMyI,kBAAkB,GAAGxI,eAAe,KAAKE,QAAQ,CAACE,QAAxD;AACA,QAAMqI,kBAAkB,GACtB,CAACzH,QAAD,IAAa,CAACuH,kBAAd,IAAoC,CAACC,kBADvC;AAEA,QAAME,eAAe,GAAG,CAAC1H,QAAzB;AACA,QAAM2H,cAAc,GAAG,CACrB;AACE7L,MAAAA,MAAM,EAAE,KAAK0B,UADf;AAEErB,MAAAA,QAAQ,EAAE5C,gBAAgB,CAACqO;AAF7B,KADqB,CAAvB;AAMA,QAAMC,wBAAwB,GAAGpO,iBAAiB,CAACqO,qBAAlB,CAC/BP,kBAD+B,EAE/BC,kBAF+B,EAG/B,oBAH+B,EAI/B,KAJ+B,CAAjC;AAMA,QAAMO,gCAAgC,GAAGtO,iBAAiB,CAACqO,qBAAlB,CACvCP,kBADuC,EAEvCC,kBAFuC,EAGvC,oBAHuC,EAIvC,cAJuC,CAAzC;AAOA,QAAMQ,iBAAiB,GAAG,CACxB;AACEpM,MAAAA,KAAK,EAAEwL,cAAc,GAAG,QAAH,GAAc,UADrC;AAEE9K,MAAAA,KAAK,EAAE,EAFT;AAGEN,MAAAA,KAAK,EAAE5C,cAAc,CAAC6C,MAAf,CAAsBC,IAH/B;AAIEJ,MAAAA,MAAM,EAAE,KAAKkC;AAJf,KADwB,EAOxB;AACEpC,MAAAA,KAAK,EAAE,WADT;AAEEE,MAAAA,MAAM,EAAE,KAAKc,UAFf;AAGEZ,MAAAA,KAAK,EAAE5C,cAAc,CAAC6C,MAAf,CAAsBC,IAH/B;AAIEI,MAAAA,KAAK,EAAE;AAJT,KAPwB,CAA1B;AAeA,QAAM2L,MAAM,GAAGxH,GAAH,aAAGA,GAAH,uBAAGA,GAAG,CAAEoB,OAAL,CAAaqG,IAAb,CAAkB,kBAAlB,EAAsCpG,GAAtC,CAA0C,CAA1C,CAAf;AAEA,wBACE,0CACGmG,MAAM,iBACLlP,QAAQ,CAACoP,YAAT,eACE;AACE,MAAA,SAAS,EAAEhO,UAAU,CAAC,0BAAD,EAA6B;AAChD,sBAAcwF,WAAW,KAAKM;AADkB,OAA7B;AADvB,MADF,EAMEgI,MANF,CAMS;AANT,KAFJ,eAWE,oBAAC,KAAD;AACE,MAAA,SAAS,EAAC,oBADZ;AAEE,MAAA,cAAc,EAAE,IAFlB;AAGE,MAAA,WAAW,EAAE1H,WAHf;AAIE,MAAA,UAAU,EAAEC,UAJd;AAKE,MAAA,KAAK,EAAE,KAAKvC,SALd;AAME,MAAA,QAAQ,EAAE,KAAKb,YANjB;AAOE,MAAA,MAAM,EAAE,KAAKW,UAPf;AAQE,MAAA,UAAU,EAAE,KAAKG,cARnB;AASE,MAAA,SAAS,EAAE,KAAKC,aATlB;AAUE,MAAA,aAAa,EAAE,KAAKN,mBAVtB;AAWE,MAAA,cAAc,EAAE,KAAKC,mBAXvB;AAYE,MAAA,OAAO,EAAE,KAAKhB,WAZhB;AAaE,MAAA,MAAM,EAAE,KAAKP,UAbf;AAcE,MAAA,iBAAiB,EAAEyL,iBAdrB;AAeE,MAAA,gBAAgB,EAAE,MAAMxI;AAf1B,OAiBG,CAAC2H,UAAD,iBACC,uDACE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE,+CACE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,qCAFZ;AAGE,MAAA,OAAO,EAAE,KAAK7J,YAHhB;AAIE,MAAA,QAAQ,EAAEmK;AAJZ,oBAME,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAEzN,MAAvB;AAA+B,MAAA,SAAS,EAAC;AAAzC,MANF,eAOE,oBAAC,OAAD,gBACON,SAAS,CAAC0C,QAAV,CAAmBgM,GAAnB,CAAuBC,cAAvB,EADP,CAPF,CADF,EAYGR,wBAAwB,iBACvB,oBAAC,OAAD,QAAUA,wBAAV,CAbJ,CADF,eAiBE,+CACE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,qCAFZ;AAGE,MAAA,OAAO,EAAE,KAAKtK,iBAHhB;AAIE,MAAA,QAAQ,EAAEkK;AAJZ,oBAME,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAExN,cAAvB;AAAuC,MAAA,SAAS,EAAC;AAAjD,MANF,eAOE,oBAAC,OAAD,wBACe,GADf,EAEGP,SAAS,CAAC0C,QAAV,CAAmBkM,YAAnB,CAAgCD,cAAhC,EAFH,CAPF,CADF,EAaGN,gCAAgC,iBAC/B,oBAAC,OAAD,QAAUA,gCAAV,CAdJ,CAjBF,eAkCE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,oCAFZ;AAGE,MAAA,QAAQ,EAAEL,eAHZ;AAIE,MAAA,OAAO,EAAE,KAAKlK;AAJhB,oBAME,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAE3D;AAAvB,MANF,eAOE,oBAAC,OAAD,eAPF,CAlCF,eA2CE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,yCAFZ;AAGE,MAAA,QAAQ,EAAE6N;AAHZ,oBAKE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAE5N;AAAvB,MALF,eAME,oBAAC,OAAD,0BANF,eAOE,oBAAC,YAAD;AACE,MAAA,OAAO,EAAEuN,eADX;AAEE,MAAA,aAAa,EAAEpM,aAAa,CAACsN;AAF/B,MAPF,CA3CF,CADF,eAyDE,oBAAC,YAAD;AACE,MAAA,QAAQ,EAAEvI,QADZ;AAEE,MAAA,SAAS,EAAED,SAFb;AAGE,MAAA,KAAK,EAAE5E,KAHT;AAIE,MAAA,QAAQ,EAAE,KAAK0B,kBAJjB;AAKE,MAAA,YAAY,EAAE,KAAKQ,gBALrB;AAME,MAAA,OAAO,EAAE0B,OANX;AAOE,MAAA,eAAe,EAAEC,eAPnB;AAQE,MAAA,QAAQ,EAAEE,QARZ;AASE,MAAA,YAAY,EAAE+H,YAThB;AAUE,MAAA,GAAG,EAAEvI,QAAQ,IAAI;AACf,aAAKA,QAAL,GAAgBA,QAAhB;AACD;AAZH,MAzDF,CAlBJ,EA2FGyI,UAAU,iBACT,oBAAC,gBAAD;AACE,MAAA,OAAO,qBAAEjI,QAAQ,CAACC,KAAX,6DAAoB,EAD7B;AAEE,MAAA,WAAW,EAAE,KAAKpC,eAFpB;AAGE,MAAA,SAAS,EAAE,KAAKM,gBAHlB;AAIE,MAAA,iBAAiB,EAAE,KAAKe,sBAJ1B;AAKE,MAAA,gBAAgB,EAAE,KAAKA;AALzB,MA5FJ,eAoGE,oBAAC,YAAD;AACE,MAAA,MAAM,EAAE+B,eADV;AAEE,MAAA,IAAI,EAAC,MAFP;AAGE,MAAA,YAAY,EAAEX,QAHhB;AAIE,MAAA,KAAK,EAAE4H,cAAc,GAAG,QAAH,GAAc,cAJrC;AAKE,MAAA,QAAQ,EAAE,KAAK1J,kBALjB;AAME,MAAA,QAAQ,EAAE,KAAKD,kBANjB;AAOE,MAAA,uBAAuB,MAPzB;AAQE,MAAA,OAAO,EAAEuF;AARX,MApGF,eA8GE,oBAAC,UAAD;AACE,MAAA,MAAM,EAAE9C,cADV;AAEE,MAAA,UAAU,wDAAiDV,QAAjD,MAFZ;AAGE,MAAA,QAAQ,EAAC,mDAHX;AAIE,MAAA,QAAQ,EAAE,KAAK/C,iBAJjB;AAKE,MAAA,SAAS,EAAE,KAAKC,kBALlB;AAME,MAAA,SAAS,EAAE,KAAKC,eANlB;AAOE,MAAA,iBAAiB,EAAC,iBAPpB;AAQE,MAAA,iBAAiB,EAAC;AARpB,MA9GF,eAwHE,oBAAC,cAAD;AAAgB,MAAA,OAAO,EAAEgL;AAAzB,MAxHF,CAXF,CADF;AAwID;;AA7+B2E;;gBAAxE1M,a,eACe,e;;gBADfA,a,oBAGoB;AAAEuN,EAAAA,SAAS,EAAE;AAAb,C;;gBAHpBvN,a,kBAKkB,U;;gBALlBA,a,kBAckB;AACpB6D,EAAAA,iBAAiB,EAAE,IADC;AAEpBQ,EAAAA,SAAS,EAAE,KAFS;AAGpBP,EAAAA,OAAO,EAAE,IAHW;AAIpBC,EAAAA,eAAe,EAAE,IAJG;AAKpB6F,EAAAA,YAAY,EAAE,IAAI+B,GAAJ,WACT6B,OAAO,CAACC,GAAR,CAAYC,uBADH,kBAETC,MAAM,CAACC,QAFE,GAGZ/D;AARkB,C;;AAk+BxB,IAAMgE,eAAe,GAAG,CACtBlJ,KADsB,EAEtBmJ,QAFsB,KAGnB;AACH,MAAM/F,WAAW,GAAG9I,cAAc,CAAC0F,KAAD,CAAlC;AACA,MAAMoJ,cAAc,GAAGrO,0BAA0B,CAC/CiF,KAD+C,EAE/CmJ,QAAQ,CAACE,gBAFsC,CAAjD;AAIA,MAAM;AAAElK,IAAAA,OAAF;AAAWmK,IAAAA,MAAM,EAAEC;AAAnB,MAAqCH,cAArC,aAAqCA,cAArC,cAAqCA,cAArC,GAAuD,EAA7D;AACA,MAAM;AAAEI,IAAAA,IAAI,EAAEpK;AAAR,MAA4BmK,aAA5B,aAA4BA,aAA5B,cAA4BA,aAA5B,GAA6C,EAAnD;AACA,SAAO;AACLnG,IAAAA,WADK;AAELjE,IAAAA,OAFK;AAGLC,IAAAA;AAHK,GAAP;AAKD,CAhBD;;AAkBA,eAAe/F,OAAO,CAAC6P,eAAD,EAAkB,IAAlB,EAAwB,IAAxB,EAA8B;AAAEO,EAAAA,UAAU,EAAE;AAAd,CAA9B,CAAP,CACbpO,aADa,CAAf","sourcesContent":["// Wrapper for the Notebook for use in a golden layout container\nimport React, { Component, MouseEvent, ReactElement } from 'react';\nimport ReactDOM from 'react-dom';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport type { editor } from 'monaco-editor';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n BasicModal,\n ContextActions,\n DropdownMenu,\n Tooltip,\n GLOBAL_SHORTCUTS,\n} from '@deephaven/components';\nimport { ScriptEditor, ScriptEditorUtils, SHORTCUTS } from '@deephaven/console';\nimport {\n FileStorage,\n FileUtils,\n NewItemModal,\n File,\n} from '@deephaven/file-explorer';\nimport {\n vsSave,\n vsKebabVertical,\n dhFileSearch,\n vsPlay,\n dhRunSelection,\n} from '@deephaven/icons';\nimport { getFileStorage, RootState } from '@deephaven/redux';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport Log from '@deephaven/log';\nimport { assertNotNull, Pending, PromiseUtils } from '@deephaven/utils';\nimport { Container, EventEmitter, Tab } from '@deephaven/golden-layout';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { ConsoleEvent, NotebookEvent } from '../events';\nimport { getDashboardSessionWrapper } from '../redux';\nimport Panel from './Panel';\nimport MarkdownNotebook from './MarkdownNotebook';\nimport './NotebookPanel.scss';\n\nconst log = Log.module('NotebookPanel');\n\nconst DEBOUNCE_PANEL_STATE_UPDATE = 400;\n\ninterface Metadata {\n id: string;\n}\n\ninterface Settings {\n language: string;\n value: string | null;\n}\n\ninterface FileMetadata {\n itemName: string;\n id: string;\n}\n\ninterface PanelState {\n isPreview?: boolean;\n settings: Settings;\n fileMetadata: FileMetadata | null;\n}\n\ninterface NotebookPanelProps {\n fileStorage: FileStorage;\n glContainer: Container;\n glEventHub: EventEmitter;\n isDashboardActive: boolean;\n isPreview: boolean;\n metadata: Metadata;\n session: IdeSession;\n sessionLanguage: string;\n panelState: PanelState;\n notebooksUrl: string;\n}\n\ninterface NotebookPanelState {\n error?: {\n message?: string | undefined;\n };\n isDashboardActive: boolean;\n isFocused: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isPreview: boolean;\n\n savedChangeCount: number;\n changeCount: number;\n fileMetadata: FileMetadata | null;\n settings: Settings;\n\n session?: IdeSession;\n sessionLanguage?: string;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n\n showCloseModal: boolean;\n showSaveAsModal: boolean;\n\n scriptCode: string;\n\n itemName?: string;\n}\n\nclass NotebookPanel extends Component<NotebookPanelProps, NotebookPanelState> {\n static COMPONENT = 'NotebookPanel';\n\n static POPPER_OPTIONS = { placement: 'bottom-end' } as const;\n\n static DEFAULT_NAME = 'Untitled';\n\n static handleError(error: unknown): void {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n log.error(error);\n }\n\n static defaultProps = {\n isDashboardActive: true,\n isPreview: false,\n session: null,\n sessionLanguage: null,\n notebooksUrl: new URL(\n `${process.env.REACT_APP_NOTEBOOKS_URL}/`,\n `${window.location}`\n ).href,\n };\n\n static languageFromFileName(fileName: string): string | null {\n const extension = FileUtils.getExtension(fileName).toLowerCase();\n switch (extension) {\n case 'py':\n case 'python':\n return 'python';\n case 'groovy':\n return 'groovy';\n case 'scala':\n return 'scala';\n default:\n return null;\n }\n }\n\n constructor(props: NotebookPanelProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleCloseCancel = this.handleCloseCancel.bind(this);\n this.handleCloseDiscard = this.handleCloseDiscard.bind(this);\n this.handleCloseSave = this.handleCloseSave.bind(this);\n this.handleCopy = this.handleCopy.bind(this);\n this.handleEditorChange = this.handleEditorChange.bind(this);\n this.handleFind = this.handleFind.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleLinkClick = this.handleLinkClick.bind(this);\n this.handleLoadSuccess = this.handleLoadSuccess.bind(this);\n this.handleLoadError = this.handleLoadError.bind(this);\n this.handlePanelTabClick = this.handlePanelTabClick.bind(this);\n this.handleRenameFile = this.handleRenameFile.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleRunCommand = this.handleRunCommand.bind(this);\n this.handleRunAll = this.handleRunAll.bind(this);\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.handleSave = this.handleSave.bind(this);\n this.handleSaveAsCancel = this.handleSaveAsCancel.bind(this);\n this.handleSaveAsSubmit = this.handleSaveAsSubmit.bind(this);\n this.handleSaveError = this.handleSaveError.bind(this);\n this.handleSaveSuccess = this.handleSaveSuccess.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleShowRename = this.handleShowRename.bind(this);\n this.handleTab = this.handleTab.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTransformLinkUri = this.handleTransformLinkUri.bind(this);\n\n this.pending = new Pending();\n\n this.debouncedSavePanelState = debounce(\n this.savePanelState.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.debouncedLoad = debounce(\n this.load.bind(this),\n DEBOUNCE_PANEL_STATE_UPDATE\n );\n\n this.notebook = null;\n\n this.tabTitleElement = null;\n\n this.tabInitOnce = false;\n this.shouldPromptClose = true;\n\n const { isDashboardActive, session, sessionLanguage, panelState } = props;\n\n let settings: { value: string | null; language: string } = {\n value: '',\n language: '',\n };\n let fileMetadata = null;\n let { isPreview } = props;\n if (panelState) {\n ({\n fileMetadata = fileMetadata,\n isPreview = isPreview,\n settings = settings,\n } = panelState);\n }\n\n // Not showing the unsaved indicator for null file id and editor content === '',\n // may need to implement some other indication that this notebook has never been saved\n const hasFileId =\n fileMetadata?.itemName && FileUtils.hasPath(fileMetadata.itemName);\n\n // Unsaved if file id != null and content != null\n // OR file id is null AND content is not null or ''\n const isUnsaved =\n (hasFileId && settings.value != null) || (!hasFileId && settings.value);\n const changeCount = isUnsaved ? 1 : 0;\n\n this.state = {\n error: undefined,\n isDashboardActive,\n isFocused: false,\n isLoading: true,\n isLoaded: false,\n isPreview,\n\n savedChangeCount: 0,\n changeCount,\n fileMetadata,\n settings,\n\n session,\n sessionLanguage,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: {\n fileMetadata,\n settings,\n },\n\n showCloseModal: false,\n showSaveAsModal: false,\n\n scriptCode: '',\n };\n\n log.debug('constructor', props, this.state);\n }\n\n componentDidMount() {\n const { glContainer, glEventHub } = this.props;\n const { tab } = glContainer;\n if (tab) this.initTab(tab);\n this.initNotebookContent();\n glEventHub.on(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.on('tabClicked', this.handlePanelTabClick);\n }\n\n componentDidUpdate(\n prevProps: NotebookPanelProps,\n prevState: NotebookPanelState\n ): void {\n const { isPreview } = this.state;\n if (isPreview !== prevState.isPreview) {\n this.setPreviewStatus();\n }\n }\n\n componentWillUnmount(): void {\n this.debouncedSavePanelState.flush();\n this.pending.cancel();\n\n const { glContainer, glEventHub } = this.props;\n\n const { fileMetadata, isPreview } = this.state;\n glEventHub.off(NotebookEvent.RENAME_FILE, this.handleRenameFile);\n glContainer.off('tabClicked', this.handlePanelTabClick);\n glEventHub.emit(NotebookEvent.UNREGISTER_FILE, fileMetadata, isPreview);\n }\n\n pending: Pending;\n\n debouncedSavePanelState;\n\n debouncedLoad;\n\n notebook: ScriptEditor | null;\n\n tabTitleElement: Element | null;\n\n tabInitOnce: boolean;\n\n shouldPromptClose: boolean;\n\n // Called by TabEvent. Happens once when created, but also each time its moved.\n // when moved, need to re-init the unsaved indicators on title elements\n initTab(tab: Tab): void {\n if (!this.tabInitOnce) {\n this.tabInitOnce = true;\n this.initTabCloseOverride();\n }\n this.initTabClasses(tab);\n }\n\n // override glContainer.close() with a custom closure that checks if needs saving\n initTabCloseOverride() {\n const { glContainer } = this.props;\n const close = glContainer.close.bind(glContainer);\n glContainer.close = () => {\n const { changeCount, savedChangeCount } = this.state;\n if (changeCount !== savedChangeCount && this.shouldPromptClose) {\n this.setState({ showCloseModal: true });\n } else {\n close();\n }\n return true;\n };\n }\n\n initTabClasses(tab: Tab) {\n const tabElement = tab.element.get(0);\n assertNotNull(tabElement);\n const titleElement = tabElement.querySelector('.lm_title');\n this.tabTitleElement = titleElement;\n titleElement?.classList.add('notebook-title');\n this.setPreviewStatus();\n }\n\n getNotebookValue(): string | null {\n const { changeCount, savedChangeCount, settings } = this.state;\n const { value } = settings;\n if (changeCount !== savedChangeCount && this.notebook) {\n const notebookValue = this.notebook.getValue();\n return notebookValue != null ? notebookValue : value;\n }\n return value;\n }\n\n initNotebookContent(): void {\n // Init from file,\n // fallback to content from settings for unsaved notebook\n const { fileMetadata, settings, isPreview } = this.state;\n if (fileMetadata && fileMetadata.id) {\n log.debug('Init content from file');\n this.registerFileMetadata(fileMetadata, isPreview);\n this.load();\n return;\n }\n if (settings.value != null) {\n log.debug('Use content passed in the settings prop');\n this.handleLoadSuccess();\n return;\n }\n // No settings, no metadata\n this.handleLoadError(new Error('Missing file metadata'));\n }\n\n closeFileTabById(id: string): void {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.CLOSE_FILE, { id });\n }\n\n // Associate file id with the current tab\n // so the next time the file is opened this tab can be focused instead of opening a new tab\n registerFileMetadata(fileMetadata: FileMetadata, isPreview: boolean): void {\n const { glEventHub, metadata } = this.props;\n const { id: tabId } = metadata;\n glEventHub.emit(\n NotebookEvent.REGISTER_FILE,\n tabId,\n fileMetadata,\n isPreview\n );\n }\n\n renameTab(id: string, title: string): void {\n const { glEventHub } = this.props;\n glEventHub.emit(NotebookEvent.RENAME, id, title);\n }\n\n load() {\n const { fileMetadata, settings } = this.state;\n assertNotNull(fileMetadata);\n const { id } = fileMetadata;\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.loadFile(id))\n .then(loadedFile => {\n log.debug('Loaded file', loadedFile);\n const { filename: itemName } = loadedFile;\n const { itemName: prevItemName } = this.state;\n if (itemName !== prevItemName) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(itemName));\n }\n const updatedSettings = {\n ...settings,\n language: NotebookPanel.languageFromFileName(itemName) ?? '',\n };\n if (settings.value == null) {\n updatedSettings.value = loadedFile.content;\n }\n this.setState({\n fileMetadata: { id: itemName, itemName },\n settings: updatedSettings,\n });\n this.debouncedSavePanelState();\n })\n .then(this.handleLoadSuccess)\n .catch(this.handleLoadError);\n }\n\n /**\n * Attempts to save the notebook.\n * @returns Returns true if save has begun, false if user needed to be prompted\n */\n save(): boolean {\n const { fileMetadata } = this.state;\n if (fileMetadata && FileUtils.hasPath(fileMetadata.itemName)) {\n const content = this.getNotebookValue();\n if (content != null) {\n this.saveContent(fileMetadata.itemName, content);\n return true;\n }\n return false;\n }\n\n this.setState({ showSaveAsModal: true });\n return false;\n }\n\n /**\n * Update existing file content\n * @param filename The name of the file\n * @param content New file content\n */\n saveContent(filename: string, content: string): void {\n log.debug('saveContent', filename, content);\n this.updateSavedChangeCount();\n const { fileStorage } = this.props;\n this.pending\n .add(fileStorage.saveFile({ filename, content, basename: filename }))\n .then(this.handleSaveSuccess)\n .catch(this.handleSaveError);\n }\n\n updateSavedChangeCount() {\n this.setState(({ changeCount }) => ({ savedChangeCount: changeCount }));\n }\n\n setPreviewStatus() {\n if (!this.tabTitleElement) {\n return;\n }\n const { isPreview } = this.state;\n log.debug('setPreviewStatus', this.tabTitleElement, isPreview);\n if (isPreview) {\n this.tabTitleElement.classList.add('is-preview');\n } else {\n this.tabTitleElement.classList.remove('is-preview');\n }\n }\n\n getOverflowActions = memoize(() => [\n {\n title: 'Find',\n icon: dhFileSearch,\n action: this.handleFind,\n group: ContextActions.groups.high,\n shortcut: SHORTCUTS.NOTEBOOK.FIND,\n order: 10,\n },\n ]);\n\n savePanelState() {\n this.setState(state => {\n const {\n changeCount,\n savedChangeCount,\n fileMetadata,\n isPreview,\n settings: initialSettings,\n } = state;\n const value = this.getNotebookValue();\n // notebooks with no unsaved changes have value === null in dehydrated state\n // content will be loaded from file when hydrating\n const dehydratedValue = changeCount !== savedChangeCount ? value : null;\n const settings = {\n ...initialSettings,\n value,\n };\n const dehydratedSettings = {\n ...initialSettings,\n value: dehydratedValue,\n };\n const panelState = {\n settings: dehydratedSettings,\n fileMetadata,\n isPreview,\n };\n log.debug('Saving panel state', panelState);\n return {\n settings,\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n });\n }\n\n handleCloseDiscard(): void {\n this.shouldPromptClose = false;\n this.setState({ showCloseModal: false });\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseSave(): void {\n this.shouldPromptClose = false;\n this.setState({ showCloseModal: false });\n if (this.save()) {\n const { glContainer } = this.props;\n glContainer.close();\n }\n }\n\n handleCloseCancel(): void {\n this.shouldPromptClose = true;\n this.setState({ showCloseModal: false });\n }\n\n handleCopy(): void {\n const { fileMetadata, settings } = this.state;\n assertNotNull(fileMetadata);\n const content = this.getNotebookValue();\n const { language } = settings;\n const { itemName } = fileMetadata;\n const copyName = FileUtils.getCopyFileName(itemName);\n log.debug('handleCopy', fileMetadata, itemName, copyName);\n this.createNotebook(copyName, language, content ?? undefined);\n }\n\n handleEditorChange(e: editor.IModelContentChangedEvent): void {\n log.debug2('handleEditorChanged', e);\n\n this.removePreviewStatus();\n\n this.setState(state => {\n const { changeCount, savedChangeCount } = state;\n const { isUndoing, isRedoing } = e;\n if (isUndoing) {\n // Note that it's possible to undo past where the user last saved, if they save and then undo for example\n return { changeCount: changeCount - 1, savedChangeCount };\n }\n\n if (!isRedoing && changeCount < savedChangeCount) {\n // We made another change after undoing some changes from the previous save\n // Just reset the saved counter to zero and increase the unchanged saves\n // It'll be set correctly on the next save\n return { changeCount: changeCount + 1, savedChangeCount: 0 };\n }\n\n return { changeCount: changeCount + 1, savedChangeCount };\n });\n this.debouncedSavePanelState();\n }\n\n handleFind() {\n if (this.notebook) {\n this.notebook.toggleFind();\n }\n }\n\n handleBlur(): void {\n log.debug('handleBlur');\n this.setState({ isFocused: false });\n }\n\n handleFocus(): void {\n log.debug('handleFocus');\n this.setState({ isFocused: true });\n }\n\n /**\n * @param event The click event from clicking on the link\n */\n handleLinkClick(event: MouseEvent<HTMLAnchorElement>) {\n const { notebooksUrl, session, sessionLanguage } = this.props;\n const { href } = event.currentTarget;\n if (!href || !href.startsWith(notebooksUrl)) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n\n const notebookPath = `/${href.substring(notebooksUrl.length)}`.replace(\n /%20/g,\n ' '\n );\n if (notebookPath === '/') {\n log.debug('Ignoring invalid notebook link', notebookPath);\n return;\n }\n\n log.debug('Notebook link clicked, opening', notebookPath);\n\n const { glEventHub } = this.props;\n const notebookSettings = {\n value: null,\n language: sessionLanguage,\n };\n const fileMetadata = { id: notebookPath, itemName: notebookPath };\n glEventHub.emit(\n NotebookEvent.SELECT_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n handleLoadSuccess() {\n this.setState({\n error: undefined,\n isLoaded: true,\n isLoading: false,\n });\n }\n\n handleLoadError(errorParam: { message?: string | undefined }) {\n let error = errorParam;\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n if (PromiseUtils.isTimedOut(error)) {\n error = new Error('File not found.');\n }\n log.error(error);\n this.setState({ error, isLoading: false });\n }\n\n handleSave() {\n log.debug('handleSave');\n this.save();\n }\n\n handleSaveSuccess(file: File) {\n const { fileStorage } = this.props;\n const fileMetadata = { id: file.filename, itemName: file.filename };\n const language = NotebookPanel.languageFromFileName(file.filename) ?? '';\n this.setState(state => {\n const { fileMetadata: oldMetadata } = state;\n const settings = {\n ...state.settings,\n language,\n };\n log.debug('handleSaveSuccess', fileMetadata, oldMetadata, settings);\n if (\n oldMetadata &&\n FileUtils.hasPath(oldMetadata.itemName) &&\n oldMetadata.itemName !== fileMetadata.itemName\n ) {\n log.debug('handleSaveSuccess deleting old file', oldMetadata.itemName);\n fileStorage\n .deleteFile(oldMetadata.itemName)\n .catch(NotebookPanel.handleError);\n }\n return {\n fileMetadata,\n settings,\n isPreview: false,\n };\n });\n this.debouncedSavePanelState();\n this.registerFileMetadata(fileMetadata, false);\n }\n\n handleSaveError(error: unknown) {\n if (PromiseUtils.isCanceled(error)) {\n return;\n }\n // There was an error saving, just reset the savedChangeCount\n // It's possible if they undo changes they'll be back at the spot where it was last saved successfully,\n // But we may as well continue showing the error until they actually save again\n this.setState({ savedChangeCount: 0 });\n log.error(error);\n }\n\n handleSaveAsCancel() {\n this.setState({ showSaveAsModal: false });\n }\n\n handleSaveAsSubmit(name: string): void {\n log.debug('handleSaveAsSubmit', name);\n const { fileMetadata } = this.state;\n if (!fileMetadata) {\n return;\n }\n const { itemName: prevItemName } = fileMetadata;\n const content = this.getNotebookValue() ?? '';\n this.setState({\n showSaveAsModal: false,\n });\n\n if (FileUtils.getBaseName(prevItemName) !== FileUtils.getBaseName(name)) {\n const { metadata } = this.props;\n const { id: tabId } = metadata;\n this.renameTab(tabId, FileUtils.getBaseName(name));\n }\n\n this.saveContent(name, content);\n }\n\n handleRenameFile(oldName: string, newName: string) {\n const { fileMetadata } = this.state;\n if (fileMetadata && fileMetadata.id === oldName) {\n this.setState({ fileMetadata: { id: newName, itemName: newName } });\n this.debouncedSavePanelState();\n }\n }\n\n handleResize(): void {\n this.notebook?.updateDimensions();\n }\n\n handleRunCommand(command?: string): void {\n this.runCommand(command);\n }\n\n handleRunAll(): void {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getValue() ?? undefined);\n }\n\n handleRunSelected(): void {\n if (!this.notebook) {\n log.error('Editor is not initialized.');\n return;\n }\n this.runCommand(this.notebook.getSelectedCommand());\n }\n\n handleSessionOpened(\n session: IdeSession,\n { language }: { language: string }\n ): void {\n this.setState({\n session,\n sessionLanguage: language,\n });\n }\n\n handleSessionClosed(): void {\n this.setState({\n session: undefined,\n sessionLanguage: undefined,\n });\n }\n\n handleShow(): void {\n log.debug('handleShow');\n this.notebook?.updateDimensions();\n }\n\n handleShowRename(): void {\n this.setState({ showSaveAsModal: true });\n }\n\n handleTab(tab: Tab): void {\n log.debug('NotebookPanel tab event', tab);\n this.initTab(tab);\n }\n\n handleTabFocus(...args: unknown[]): void {\n log.debug('handleTabFocus', ...args);\n const { glContainer } = this.props;\n this.setState({\n isDashboardActive: true,\n });\n if (this.notebook && !glContainer.isHidden) {\n this.notebook.updateDimensions();\n }\n }\n\n handleTabBlur(): void {\n log.debug('handleTabBlur');\n this.setState({\n isDashboardActive: false,\n });\n }\n\n handlePanelTabClick(): void {\n log.debug('handlePanelTabClick');\n this.focus();\n }\n\n /**\n * Transform the link URI to load from where the notebook is if it's relative\n * @param src The link to transform\n * @returns String the transformed link\n */\n handleTransformLinkUri(src: string): string {\n const { notebooksUrl } = this.props;\n const { fileMetadata } = this.state;\n\n if (src.endsWith('/')) {\n return src;\n }\n\n if (src.startsWith('/')) {\n return `${notebooksUrl}${src.substring(1)}`;\n }\n\n let itemName = fileMetadata?.itemName;\n if (!itemName) {\n return src;\n }\n if (itemName.charAt(0) === '/') {\n itemName = itemName.substring(1);\n }\n\n const itemUri = new URL(itemName, notebooksUrl);\n return new URL(src, itemUri).href;\n }\n\n focus(): void {\n requestAnimationFrame(() => {\n if (this.notebook) {\n this.notebook.focus();\n }\n });\n }\n\n createNotebook(\n itemName: string,\n language: string | undefined,\n content = ''\n ): void {\n const { glEventHub } = this.props;\n const { session, sessionLanguage, settings } = this.state;\n const notebookSettings = {\n ...settings,\n language,\n value: content,\n };\n const fileMetadata = {\n id: null,\n itemName,\n };\n log.debug(\n 'handleCreateNotebook',\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n glEventHub.emit(\n NotebookEvent.CREATE_NOTEBOOK,\n session,\n sessionLanguage,\n notebookSettings,\n fileMetadata\n );\n }\n\n runCommand(command?: string): void {\n if (!command) {\n log.debug('Ignoring empty command.');\n return;\n }\n\n this.removePreviewStatus();\n\n const { glEventHub } = this.props;\n glEventHub.emit(ConsoleEvent.SEND_COMMAND, command, false, true);\n }\n\n removePreviewStatus(): void {\n this.setState(({ isPreview }) => {\n if (isPreview) {\n const { fileMetadata } = this.state;\n if (fileMetadata) {\n this.registerFileMetadata(fileMetadata, false);\n }\n return { isPreview: false };\n }\n return null;\n });\n }\n\n render(): ReactElement {\n const {\n fileStorage,\n glContainer,\n glContainer: { tab },\n glEventHub,\n } = this.props;\n const {\n changeCount,\n savedChangeCount,\n error,\n isDashboardActive,\n isLoaded,\n isLoading,\n isPreview,\n fileMetadata,\n session,\n sessionLanguage,\n settings: initialSettings,\n showCloseModal,\n showSaveAsModal,\n } = this.state;\n // We don't want to steal focus if this isn't shown or it's just a preview\n const focusOnMount =\n isDashboardActive && !glContainer.isHidden && !isPreview;\n const itemName = fileMetadata?.itemName ?? NotebookPanel.DEFAULT_NAME;\n const isMarkdown = itemName.endsWith('.md');\n const isExistingItem = fileMetadata?.id != null;\n const overflowActions = this.getOverflowActions();\n const settings = {\n ...initialSettings,\n };\n const isSessionConnected = session != null;\n const isLanguageMatching = sessionLanguage === settings.language;\n const runButtonsDisabled =\n !isLoaded || !isSessionConnected || !isLanguageMatching;\n const toolbarDisabled = !isLoaded;\n const contextActions = [\n {\n action: this.handleSave,\n shortcut: GLOBAL_SHORTCUTS.SAVE,\n },\n ];\n const disabledRunButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run'\n );\n const disabledRunSelectedButtonTooltip = ScriptEditorUtils.getDisabledRunTooltip(\n isSessionConnected,\n isLanguageMatching,\n 'Notebook extension',\n 'Run Selected'\n );\n\n const additionalActions = [\n {\n title: isExistingItem ? 'Rename' : 'Save As…',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleShowRename,\n },\n {\n title: 'Copy File',\n action: this.handleCopy,\n group: ContextActions.groups.high,\n order: 20,\n },\n ];\n\n const portal = tab?.element.find('.lm_title_before').get(0);\n\n return (\n <>\n {portal &&\n ReactDOM.createPortal(\n <span\n className={classNames('editor-unsaved-indicator', {\n 'is-unsaved': changeCount !== savedChangeCount,\n })}\n />,\n portal // tab.element is jquery element, we want a dom element\n )}\n\n <Panel\n className=\"notebook-container\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onTab={this.handleTab}\n onResize={this.handleResize}\n onShow={this.handleShow}\n onTabFocus={this.handleTabFocus}\n onTabBlur={this.handleTabBlur}\n onSessionOpen={this.handleSessionOpened}\n onSessionClose={this.handleSessionClosed}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n additionalActions={additionalActions}\n renderTabTooltip={() => itemName}\n >\n {!isMarkdown && (\n <>\n <div className=\"notebook-toolbar\">\n <span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-play\"\n onClick={this.handleRunAll}\n disabled={runButtonsDisabled}\n >\n <FontAwesomeIcon icon={vsPlay} transform=\"grow-4\" />\n <Tooltip>\n Run {SHORTCUTS.NOTEBOOK.RUN.getDisplayText()}\n </Tooltip>\n </button>\n {disabledRunButtonTooltip && (\n <Tooltip>{disabledRunButtonTooltip}</Tooltip>\n )}\n </span>\n <span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-play\"\n onClick={this.handleRunSelected}\n disabled={runButtonsDisabled}\n >\n <FontAwesomeIcon icon={dhRunSelection} transform=\"grow-4\" />\n <Tooltip>\n Run Selected{' '}\n {SHORTCUTS.NOTEBOOK.RUN_SELECTED.getDisplayText()}\n </Tooltip>\n </button>\n {disabledRunSelectedButtonTooltip && (\n <Tooltip>{disabledRunSelectedButtonTooltip}</Tooltip>\n )}\n </span>\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon mr-auto\"\n disabled={toolbarDisabled}\n onClick={this.handleSave}\n >\n <FontAwesomeIcon icon={vsSave} />\n <Tooltip>Save</Tooltip>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-link btn-overflow btn-link-icon\"\n disabled={toolbarDisabled}\n >\n <FontAwesomeIcon icon={vsKebabVertical} />\n <Tooltip>More Actions...</Tooltip>\n <DropdownMenu\n actions={overflowActions}\n popperOptions={NotebookPanel.POPPER_OPTIONS}\n />\n </button>\n </div>\n <ScriptEditor\n isLoaded={isLoaded}\n isLoading={isLoading}\n error={error}\n onChange={this.handleEditorChange}\n onRunCommand={this.handleRunCommand}\n session={session}\n sessionLanguage={sessionLanguage}\n settings={settings}\n focusOnMount={focusOnMount}\n ref={notebook => {\n this.notebook = notebook;\n }}\n />\n </>\n )}\n {isMarkdown && (\n <MarkdownNotebook\n content={settings.value ?? ''}\n onLinkClick={this.handleLinkClick}\n onRunCode={this.handleRunCommand}\n transformImageUri={this.handleTransformLinkUri}\n transformLinkUri={this.handleTransformLinkUri}\n />\n )}\n <NewItemModal\n isOpen={showSaveAsModal}\n type=\"file\"\n defaultValue={itemName}\n title={isExistingItem ? 'Rename' : 'Save file as'}\n onSubmit={this.handleSaveAsSubmit}\n onCancel={this.handleSaveAsCancel}\n notifyOnExtensionChange\n storage={fileStorage}\n />\n <BasicModal\n isOpen={showCloseModal}\n headerText={`Do you want to save the changes you made to ${itemName}?`}\n bodyText=\"Your changes will be lost if you don't save them.\"\n onCancel={this.handleCloseCancel}\n onDiscard={this.handleCloseDiscard}\n onConfirm={this.handleCloseSave}\n discardButtonText=\"Discard Changes\"\n confirmButtonText=\"Save\"\n />\n <ContextActions actions={contextActions} />\n </Panel>\n </>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n) => {\n const fileStorage = getFileStorage(state);\n const sessionWrapper = getDashboardSessionWrapper(\n state,\n ownProps.localDashboardId\n );\n const { session, config: sessionConfig } = sessionWrapper ?? {};\n const { type: sessionLanguage } = sessionConfig ?? {};\n return {\n fileStorage,\n session,\n sessionLanguage,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n NotebookPanel\n);\n"],"file":"NotebookPanel.js"}
@@ -1,7 +1,7 @@
1
1
  import { Component, ReactElement, RefObject } from 'react';
2
2
  import { IrisGridPanel, IrisGridPanelProps, PanelState } from './IrisGridPanel';
3
3
  import './PandasPanel.scss';
4
- interface PandasPanelProps extends IrisGridPanelProps {
4
+ export interface PandasPanelProps extends IrisGridPanelProps {
5
5
  panelState: PanelState | null;
6
6
  }
7
7
  interface PandasPanelState {
@@ -1 +1 @@
1
- {"version":3,"file":"PandasPanel.d.ts","sourceRoot":"","sources":["../../src/panels/PandasPanel.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,oBAAoB,CAAC;AAE5B,UAAU,gBAAiB,SAAQ,kBAAkB;IACnD,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AAED,UAAU,gBAAgB;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,cAAM,WAAY,SAAQ,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACrE,MAAM,CAAC,YAAY;;MAEjB;IAEF,MAAM,CAAC,SAAS,SAAiB;gBAErB,KAAK,EAAE,gBAAgB;IAiBnC,SAAS,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAExC,WAAW,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IAEtC,YAAY,IAAI,IAAI;IAQpB,qBAAqB,IAAI,IAAI;IAU7B,sBAAsB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAMpD,MAAM,IAAI,YAAY;CAiCvB;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"PandasPanel.d.ts","sourceRoot":"","sources":["../../src/panels/PandasPanel.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlE,OAA+B,EAC7B,aAAa,EACb,kBAAkB,EAClB,UAAU,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,oBAAoB,CAAC;AAE5B,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AAED,UAAU,gBAAgB;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,cAAM,WAAY,SAAQ,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACrE,MAAM,CAAC,YAAY;;MAEjB;IAEF,MAAM,CAAC,SAAS,SAAiB;gBAErB,KAAK,EAAE,gBAAgB;IAiBnC,SAAS,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAExC,WAAW,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IAEtC,YAAY,IAAI,IAAI;IAQpB,qBAAqB,IAAI,IAAI;IAU7B,sBAAsB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAMpD,MAAM,IAAI,YAAY;CAiCvB;AAED,eAAe,WAAW,CAAC"}
@@ -9,7 +9,7 @@ import React, { Component } from 'react';
9
9
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
10
10
  import { dhRefresh } from '@deephaven/icons';
11
11
  import { Tooltip } from '@deephaven/components';
12
- import { IrisGridPanel } from "./IrisGridPanel.js";
12
+ import ConnectedIrisGridPanel from "./IrisGridPanel.js";
13
13
  import "./PandasPanel.css";
14
14
 
15
15
  /**
@@ -73,7 +73,7 @@ class PandasPanel extends Component {
73
73
  var _this$props = this.props,
74
74
  props = _extends({}, _this$props);
75
75
 
76
- return /*#__PURE__*/React.createElement(IrisGridPanel, _extends({
76
+ return /*#__PURE__*/React.createElement(ConnectedIrisGridPanel, _extends({
77
77
  ref: this.irisGridRef,
78
78
  onStateChange: this.handleGridStateChange,
79
79
  onPanelStateUpdate: this.handlePanelStateUpdate
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/panels/PandasPanel.tsx"],"names":["React","Component","FontAwesomeIcon","dhRefresh","Tooltip","IrisGridPanel","PandasPanel","constructor","props","irisGridRef","createRef","buttonRef","handleReload","bind","handleGridStateChange","handlePanelStateUpdate","panelState","state","shouldFocusGrid","current","initModel","blur","setState","irisGrid","grid","focus","render"],"mappings":";;;;AAAA;;AACA;AACA,OAAOA,KAAP,IAAgBC,SAAhB,QAA0D,OAA1D;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,SAAT,QAA0B,kBAA1B;AACA,SAASC,OAAT,QAAwB,uBAAxB;SACSC,a;;;AAYT;AACA;AACA;AACA,MAAMC,WAAN,SAA0BL,SAA1B,CAAwE;AAOtEM,EAAAA,WAAW,CAACC,KAAD,EAA0B;AACnC,UAAMA,KAAN;;AADmC;;AAAA;;AAGnC,SAAKC,WAAL,gBAAmBT,KAAK,CAACU,SAAN,EAAnB;AACA,SAAKC,SAAL,gBAAiBX,KAAK,CAACU,SAAN,EAAjB;AAEA,SAAKE,YAAL,GAAoB,KAAKA,YAAL,CAAkBC,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKC,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BD,IAA3B,CAAgC,IAAhC,CAA7B;AACA,SAAKE,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BF,IAA5B,CAAiC,IAAjC,CAA9B;AAEA,QAAM;AAAEG,MAAAA;AAAF,QAAiBR,KAAvB;AACA,SAAKS,KAAL,GAAa;AACXC,MAAAA,eAAe,EAAE,KADN;AAEXF,MAAAA,UAFW,CAEC;;AAFD,KAAb;AAID;;AAMDJ,EAAAA,YAAY,GAAS;AAAA;;AACnB,kCAAKH,WAAL,CAAiBU,OAAjB,gFAA0BC,SAA1B;AACA,kCAAKT,SAAL,CAAeQ,OAAf,gFAAwBE,IAAxB;AACA,SAAKC,QAAL,CAAc;AACZJ,MAAAA,eAAe,EAAE;AADL,KAAd;AAGD;;AAEDJ,EAAAA,qBAAqB,GAAS;AAAA;;AAC5B,QAAM;AAAEI,MAAAA;AAAF,QAAsB,KAAKD,KAAjC;;AACA,QAAIC,eAAe,8BAAI,KAAKT,WAAL,CAAiBU,OAArB,6EAAI,uBAA0BI,QAA9B,6EAAI,uBAAoCJ,OAAxC,mDAAI,uBAA6CK,IAApE,EAA0E;AACxE,WAAKf,WAAL,CAAiBU,OAAjB,CAAyBI,QAAzB,CAAkCJ,OAAlC,CAA0CK,IAA1C,CAA+CC,KAA/C;AACA,WAAKH,QAAL,CAAc;AACZJ,QAAAA,eAAe,EAAE;AADL,OAAd;AAGD;AACF;;AAEDH,EAAAA,sBAAsB,CAACC,UAAD,EAA+B;AACnD,SAAKM,QAAL,CAAc;AACZN,MAAAA;AADY,KAAd;AAGD;;AAEDU,EAAAA,MAAM,GAAiB;AACrB,sBAAqB,KAAKlB,KAA1B;AAAA,QAAWA,KAAX;;AAEA,wBACE,oBAAC,aAAD;AACE,MAAA,GAAG,EAAE,KAAKC,WADZ;AAEE,MAAA,aAAa,EAAE,KAAKK,qBAFtB;AAGE,MAAA,kBAAkB,EAAE,KAAKC;AAH3B,OAIMP,KAJN,gBAME;AACE,MAAA,GAAG,EAAE,KAAKG,SADZ;AAEE,MAAA,IAAI,EAAC,QAFP;AAGE,MAAA,SAAS,EAAC,4BAHZ;AAIE,MAAA,OAAO,EAAE,KAAKC;AAJhB,wCAOE,+CACE,oBAAC,eAAD;AACE,MAAA,IAAI,EAAET,SADR;AAEE,MAAA,SAAS,EAAC,UAFZ;AAGE,MAAA,SAAS,EAAC;AAHZ,MADF,WAPF,eAeE,oBAAC,OAAD,iFAfF,CANF,CADF;AA6BD;;AApFqE;;gBAAlEG,W,kBACkB;AACpBU,EAAAA,UAAU,EAAE;AADQ,C;;gBADlBV,W,eAKe,a;;AAkFrB,eAAeA,WAAf","sourcesContent":["/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/no-unused-state */\nimport React, { Component, ReactElement, RefObject } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhRefresh } from '@deephaven/icons';\nimport { Tooltip } from '@deephaven/components';\nimport { IrisGridPanel, IrisGridPanelProps, PanelState } from './IrisGridPanel';\nimport './PandasPanel.scss';\n\ninterface PandasPanelProps extends IrisGridPanelProps {\n panelState: PanelState | null;\n}\n\ninterface PandasPanelState {\n shouldFocusGrid: boolean;\n panelState: PanelState | null;\n}\n\n/**\n * Wraps and IrisGridPanel to add a refresh button for Pandas.\n */\nclass PandasPanel extends Component<PandasPanelProps, PandasPanelState> {\n static defaultProps = {\n panelState: null,\n };\n\n static COMPONENT = 'PandasPanel';\n\n constructor(props: PandasPanelProps) {\n super(props);\n\n this.irisGridRef = React.createRef();\n this.buttonRef = React.createRef();\n\n this.handleReload = this.handleReload.bind(this);\n this.handleGridStateChange = this.handleGridStateChange.bind(this);\n this.handlePanelStateUpdate = this.handlePanelStateUpdate.bind(this);\n\n const { panelState } = props;\n this.state = {\n shouldFocusGrid: false,\n panelState, // Dehydrated panel state that can load this panel\n };\n }\n\n buttonRef: RefObject<HTMLButtonElement>;\n\n irisGridRef: RefObject<IrisGridPanel>;\n\n handleReload(): void {\n this.irisGridRef.current?.initModel();\n this.buttonRef.current?.blur();\n this.setState({\n shouldFocusGrid: true,\n });\n }\n\n handleGridStateChange(): void {\n const { shouldFocusGrid } = this.state;\n if (shouldFocusGrid && this.irisGridRef.current?.irisGrid?.current?.grid) {\n this.irisGridRef.current.irisGrid.current.grid.focus();\n this.setState({\n shouldFocusGrid: false,\n });\n }\n }\n\n handlePanelStateUpdate(panelState: PanelState): void {\n this.setState({\n panelState,\n });\n }\n\n render(): ReactElement {\n const { ...props } = this.props;\n\n return (\n <IrisGridPanel\n ref={this.irisGridRef}\n onStateChange={this.handleGridStateChange}\n onPanelStateUpdate={this.handlePanelStateUpdate}\n {...props}\n >\n <button\n ref={this.buttonRef}\n type=\"button\"\n className=\"btn btn-primary btn-pandas\"\n onClick={this.handleReload}\n >\n pandas dataframe\n <span>\n <FontAwesomeIcon\n icon={dhRefresh}\n transform=\"shrink-1\"\n className=\"mr-1\"\n />\n Reload\n </span>\n <Tooltip>\n Click to refresh pandas dataframe, updates do not occur\n automatically.\n </Tooltip>\n </button>\n </IrisGridPanel>\n );\n }\n}\n\nexport default PandasPanel;\n"],"file":"PandasPanel.js"}
1
+ {"version":3,"sources":["../../src/panels/PandasPanel.tsx"],"names":["React","Component","FontAwesomeIcon","dhRefresh","Tooltip","ConnectedIrisGridPanel","PandasPanel","constructor","props","irisGridRef","createRef","buttonRef","handleReload","bind","handleGridStateChange","handlePanelStateUpdate","panelState","state","shouldFocusGrid","current","initModel","blur","setState","irisGrid","grid","focus","render"],"mappings":";;;;AAAA;;AACA;AACA,OAAOA,KAAP,IAAgBC,SAAhB,QAA0D,OAA1D;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,SAAT,QAA0B,kBAA1B;AACA,SAASC,OAAT,QAAwB,uBAAxB;OACOC,sB;;;AAgBP;AACA;AACA;AACA,MAAMC,WAAN,SAA0BL,SAA1B,CAAwE;AAOtEM,EAAAA,WAAW,CAACC,KAAD,EAA0B;AACnC,UAAMA,KAAN;;AADmC;;AAAA;;AAGnC,SAAKC,WAAL,gBAAmBT,KAAK,CAACU,SAAN,EAAnB;AACA,SAAKC,SAAL,gBAAiBX,KAAK,CAACU,SAAN,EAAjB;AAEA,SAAKE,YAAL,GAAoB,KAAKA,YAAL,CAAkBC,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKC,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BD,IAA3B,CAAgC,IAAhC,CAA7B;AACA,SAAKE,sBAAL,GAA8B,KAAKA,sBAAL,CAA4BF,IAA5B,CAAiC,IAAjC,CAA9B;AAEA,QAAM;AAAEG,MAAAA;AAAF,QAAiBR,KAAvB;AACA,SAAKS,KAAL,GAAa;AACXC,MAAAA,eAAe,EAAE,KADN;AAEXF,MAAAA,UAFW,CAEC;;AAFD,KAAb;AAID;;AAMDJ,EAAAA,YAAY,GAAS;AAAA;;AACnB,kCAAKH,WAAL,CAAiBU,OAAjB,gFAA0BC,SAA1B;AACA,kCAAKT,SAAL,CAAeQ,OAAf,gFAAwBE,IAAxB;AACA,SAAKC,QAAL,CAAc;AACZJ,MAAAA,eAAe,EAAE;AADL,KAAd;AAGD;;AAEDJ,EAAAA,qBAAqB,GAAS;AAAA;;AAC5B,QAAM;AAAEI,MAAAA;AAAF,QAAsB,KAAKD,KAAjC;;AACA,QAAIC,eAAe,8BAAI,KAAKT,WAAL,CAAiBU,OAArB,6EAAI,uBAA0BI,QAA9B,6EAAI,uBAAoCJ,OAAxC,mDAAI,uBAA6CK,IAApE,EAA0E;AACxE,WAAKf,WAAL,CAAiBU,OAAjB,CAAyBI,QAAzB,CAAkCJ,OAAlC,CAA0CK,IAA1C,CAA+CC,KAA/C;AACA,WAAKH,QAAL,CAAc;AACZJ,QAAAA,eAAe,EAAE;AADL,OAAd;AAGD;AACF;;AAEDH,EAAAA,sBAAsB,CAACC,UAAD,EAA+B;AACnD,SAAKM,QAAL,CAAc;AACZN,MAAAA;AADY,KAAd;AAGD;;AAEDU,EAAAA,MAAM,GAAiB;AACrB,sBAAqB,KAAKlB,KAA1B;AAAA,QAAWA,KAAX;;AAEA,wBACE,oBAAC,sBAAD;AACE,MAAA,GAAG,EAAE,KAAKC,WADZ;AAEE,MAAA,aAAa,EAAE,KAAKK,qBAFtB;AAGE,MAAA,kBAAkB,EAAE,KAAKC;AAH3B,OAIMP,KAJN,gBAME;AACE,MAAA,GAAG,EAAE,KAAKG,SADZ;AAEE,MAAA,IAAI,EAAC,QAFP;AAGE,MAAA,SAAS,EAAC,4BAHZ;AAIE,MAAA,OAAO,EAAE,KAAKC;AAJhB,wCAOE,+CACE,oBAAC,eAAD;AACE,MAAA,IAAI,EAAET,SADR;AAEE,MAAA,SAAS,EAAC,UAFZ;AAGE,MAAA,SAAS,EAAC;AAHZ,MADF,WAPF,eAeE,oBAAC,OAAD,iFAfF,CANF,CADF;AA6BD;;AApFqE;;gBAAlEG,W,kBACkB;AACpBU,EAAAA,UAAU,EAAE;AADQ,C;;gBADlBV,W,eAKe,a;;AAkFrB,eAAeA,WAAf","sourcesContent":["/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/no-unused-state */\nimport React, { Component, ReactElement, RefObject } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhRefresh } from '@deephaven/icons';\nimport { Tooltip } from '@deephaven/components';\nimport ConnectedIrisGridPanel, {\n IrisGridPanel,\n IrisGridPanelProps,\n PanelState,\n} from './IrisGridPanel';\nimport './PandasPanel.scss';\n\nexport interface PandasPanelProps extends IrisGridPanelProps {\n panelState: PanelState | null;\n}\n\ninterface PandasPanelState {\n shouldFocusGrid: boolean;\n panelState: PanelState | null;\n}\n\n/**\n * Wraps and IrisGridPanel to add a refresh button for Pandas.\n */\nclass PandasPanel extends Component<PandasPanelProps, PandasPanelState> {\n static defaultProps = {\n panelState: null,\n };\n\n static COMPONENT = 'PandasPanel';\n\n constructor(props: PandasPanelProps) {\n super(props);\n\n this.irisGridRef = React.createRef();\n this.buttonRef = React.createRef();\n\n this.handleReload = this.handleReload.bind(this);\n this.handleGridStateChange = this.handleGridStateChange.bind(this);\n this.handlePanelStateUpdate = this.handlePanelStateUpdate.bind(this);\n\n const { panelState } = props;\n this.state = {\n shouldFocusGrid: false,\n panelState, // Dehydrated panel state that can load this panel\n };\n }\n\n buttonRef: RefObject<HTMLButtonElement>;\n\n irisGridRef: RefObject<IrisGridPanel>;\n\n handleReload(): void {\n this.irisGridRef.current?.initModel();\n this.buttonRef.current?.blur();\n this.setState({\n shouldFocusGrid: true,\n });\n }\n\n handleGridStateChange(): void {\n const { shouldFocusGrid } = this.state;\n if (shouldFocusGrid && this.irisGridRef.current?.irisGrid?.current?.grid) {\n this.irisGridRef.current.irisGrid.current.grid.focus();\n this.setState({\n shouldFocusGrid: false,\n });\n }\n }\n\n handlePanelStateUpdate(panelState: PanelState): void {\n this.setState({\n panelState,\n });\n }\n\n render(): ReactElement {\n const { ...props } = this.props;\n\n return (\n <ConnectedIrisGridPanel\n ref={this.irisGridRef}\n onStateChange={this.handleGridStateChange}\n onPanelStateUpdate={this.handlePanelStateUpdate}\n {...props}\n >\n <button\n ref={this.buttonRef}\n type=\"button\"\n className=\"btn btn-primary btn-pandas\"\n onClick={this.handleReload}\n >\n pandas dataframe\n <span>\n <FontAwesomeIcon\n icon={dhRefresh}\n transform=\"shrink-1\"\n className=\"mr-1\"\n />\n Reload\n </span>\n <Tooltip>\n Click to refresh pandas dataframe, updates do not occur\n automatically.\n </Tooltip>\n </button>\n </ConnectedIrisGridPanel>\n );\n }\n}\n\nexport default PandasPanel;\n"],"file":"PandasPanel.js"}
@@ -1,4 +1,5 @@
1
1
  export { default as ChartPanel } from './ChartPanel';
2
+ export * from './ChartPanel';
2
3
  export { default as CommandHistoryPanel } from './CommandHistoryPanel';
3
4
  export { default as ConsolePanel } from './ConsolePanel';
4
5
  export { default as DropdownFilterPanel } from './DropdownFilterPanel';
@@ -8,10 +9,12 @@ export type { FilterSet } from './FilterSetManager';
8
9
  export { default as FilterSetManagerPanel } from './FilterSetManagerPanel';
9
10
  export { default as InputFilterPanel } from './InputFilterPanel';
10
11
  export { default as IrisGridPanel } from './IrisGridPanel';
12
+ export * from './IrisGridPanel';
11
13
  export { default as LogPanel } from './LogPanel';
12
14
  export { default as MarkdownPanel } from './MarkdownPanel';
13
15
  export { default as NotebookPanel } from './NotebookPanel';
14
16
  export { default as PandasPanel } from './PandasPanel';
17
+ export * from './PandasPanel';
15
18
  export { default as Panel } from './Panel';
16
19
  export { default as WidgetPanel } from './WidgetPanel';
17
20
  export { default as WidgetPanelTooltip } from './WidgetPanelTooltip';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/panels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/panels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { default as ChartPanel } from "./ChartPanel.js";
2
+ export * from "./ChartPanel.js";
2
3
  export { default as CommandHistoryPanel } from "./CommandHistoryPanel.js";
3
4
  export { default as ConsolePanel } from "./ConsolePanel.js";
4
5
  export { default as DropdownFilterPanel } from "./DropdownFilterPanel.js";
@@ -7,10 +8,12 @@ export { default as FilterSetManager } from "./FilterSetManager.js";
7
8
  export { default as FilterSetManagerPanel } from "./FilterSetManagerPanel.js";
8
9
  export { default as InputFilterPanel } from "./InputFilterPanel.js";
9
10
  export { default as IrisGridPanel } from "./IrisGridPanel.js";
11
+ export * from "./IrisGridPanel.js";
10
12
  export { default as LogPanel } from "./LogPanel.js";
11
13
  export { default as MarkdownPanel } from "./MarkdownPanel.js";
12
14
  export { default as NotebookPanel } from "./NotebookPanel.js";
13
15
  export { default as PandasPanel } from "./PandasPanel.js";
16
+ export * from "./PandasPanel.js";
14
17
  export { default as Panel } from "./Panel.js";
15
18
  export { default as WidgetPanel } from "./WidgetPanel.js";
16
19
  export { default as WidgetPanelTooltip } from "./WidgetPanelTooltip.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/panels/index.ts"],"names":["default","ChartPanel","CommandHistoryPanel","ConsolePanel","DropdownFilterPanel","FileExplorerPanel","FilterSetManager","FilterSetManagerPanel","InputFilterPanel","IrisGridPanel","LogPanel","MarkdownPanel","NotebookPanel","PandasPanel","Panel","WidgetPanel","WidgetPanelTooltip"],"mappings":"SAASA,OAAO,IAAIC,U;SACXD,OAAO,IAAIE,mB;SACXF,OAAO,IAAIG,Y;SACXH,OAAO,IAAII,mB;SACXJ,OAAO,IAAIK,iB;SACXL,OAAO,IAAIM,gB;SAEXN,OAAO,IAAIO,qB;SACXP,OAAO,IAAIQ,gB;SACXR,OAAO,IAAIS,a;SACXT,OAAO,IAAIU,Q;SACXV,OAAO,IAAIW,a;SACXX,OAAO,IAAIY,a;SACXZ,OAAO,IAAIa,W;SACXb,OAAO,IAAIc,K;SACXd,OAAO,IAAIe,W;SACXf,OAAO,IAAIgB,kB","sourcesContent":["export { default as ChartPanel } from './ChartPanel';\nexport { default as CommandHistoryPanel } from './CommandHistoryPanel';\nexport { default as ConsolePanel } from './ConsolePanel';\nexport { default as DropdownFilterPanel } from './DropdownFilterPanel';\nexport { default as FileExplorerPanel } from './FileExplorerPanel';\nexport { default as FilterSetManager } from './FilterSetManager';\nexport type { FilterSet } from './FilterSetManager';\nexport { default as FilterSetManagerPanel } from './FilterSetManagerPanel';\nexport { default as InputFilterPanel } from './InputFilterPanel';\nexport { default as IrisGridPanel } from './IrisGridPanel';\nexport { default as LogPanel } from './LogPanel';\nexport { default as MarkdownPanel } from './MarkdownPanel';\nexport { default as NotebookPanel } from './NotebookPanel';\nexport { default as PandasPanel } from './PandasPanel';\nexport { default as Panel } from './Panel';\nexport { default as WidgetPanel } from './WidgetPanel';\nexport { default as WidgetPanelTooltip } from './WidgetPanelTooltip';\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/panels/index.ts"],"names":["default","ChartPanel","CommandHistoryPanel","ConsolePanel","DropdownFilterPanel","FileExplorerPanel","FilterSetManager","FilterSetManagerPanel","InputFilterPanel","IrisGridPanel","LogPanel","MarkdownPanel","NotebookPanel","PandasPanel","Panel","WidgetPanel","WidgetPanelTooltip"],"mappings":"SAASA,OAAO,IAAIC,U;;SAEXD,OAAO,IAAIE,mB;SACXF,OAAO,IAAIG,Y;SACXH,OAAO,IAAII,mB;SACXJ,OAAO,IAAIK,iB;SACXL,OAAO,IAAIM,gB;SAEXN,OAAO,IAAIO,qB;SACXP,OAAO,IAAIQ,gB;SACXR,OAAO,IAAIS,a;;SAEXT,OAAO,IAAIU,Q;SACXV,OAAO,IAAIW,a;SACXX,OAAO,IAAIY,a;SACXZ,OAAO,IAAIa,W;;SAEXb,OAAO,IAAIc,K;SACXd,OAAO,IAAIe,W;SACXf,OAAO,IAAIgB,kB","sourcesContent":["export { default as ChartPanel } from './ChartPanel';\nexport * from './ChartPanel';\nexport { default as CommandHistoryPanel } from './CommandHistoryPanel';\nexport { default as ConsolePanel } from './ConsolePanel';\nexport { default as DropdownFilterPanel } from './DropdownFilterPanel';\nexport { default as FileExplorerPanel } from './FileExplorerPanel';\nexport { default as FilterSetManager } from './FilterSetManager';\nexport type { FilterSet } from './FilterSetManager';\nexport { default as FilterSetManagerPanel } from './FilterSetManagerPanel';\nexport { default as InputFilterPanel } from './InputFilterPanel';\nexport { default as IrisGridPanel } from './IrisGridPanel';\nexport * from './IrisGridPanel';\nexport { default as LogPanel } from './LogPanel';\nexport { default as MarkdownPanel } from './MarkdownPanel';\nexport { default as NotebookPanel } from './NotebookPanel';\nexport { default as PandasPanel } from './PandasPanel';\nexport * from './PandasPanel';\nexport { default as Panel } from './Panel';\nexport { default as WidgetPanel } from './WidgetPanel';\nexport { default as WidgetPanelTooltip } from './WidgetPanelTooltip';\n"],"file":"index.js"}
@@ -33,7 +33,7 @@ export declare const getTableMapForDashboard: (store: RootState, dashboardId: st
33
33
  /**
34
34
  * @param store The redux store
35
35
  * @param dashboardId The dashboard ID to get the data for
36
- * @return The panel ID that is isolated, undefined if none is isolated
36
+ * @returns The panel ID that is isolated, undefined if none is isolated
37
37
  */
38
38
  export declare const getIsolatedLinkerPanelIdForDashboard: (store: RootState, dashboardId: string) => string | undefined;
39
39
  /**
@@ -49,9 +49,9 @@ export declare const getLinksForDashboard: (store: RootState, dashboardId: strin
49
49
  */
50
50
  export declare const getColumnSelectionValidatorForDashboard: (store: RootState, dashboardId: string) => ColumnSelectionValidator | undefined;
51
51
  /**
52
- * @param {Store} store The redux store
53
- * @param {string} dashboardId The dashboard ID to get the console settings for
54
- * @returns {ConsoleSettings|undefined} Console settings for this dashboard
52
+ * @param store The redux store
53
+ * @param dashboardId The dashboard ID to get the console settings for
54
+ * @returns Console settings for this dashboard
55
55
  */
56
56
  export declare const getDashboardConsoleSettings: (store: RootState, dashboardId: string) => Record<string, unknown>;
57
57
  /**
@@ -49,7 +49,7 @@ export var getTableMapForDashboard = (store, dashboardId) => {
49
49
  /**
50
50
  * @param store The redux store
51
51
  * @param dashboardId The dashboard ID to get the data for
52
- * @return The panel ID that is isolated, undefined if none is isolated
52
+ * @returns The panel ID that is isolated, undefined if none is isolated
53
53
  */
54
54
 
55
55
  export var getIsolatedLinkerPanelIdForDashboard = (store, dashboardId) => getDashboardData(store, dashboardId).isolatedLinkerPanelId;
@@ -72,9 +72,9 @@ export var getLinksForDashboard = (store, dashboardId) => {
72
72
 
73
73
  export var getColumnSelectionValidatorForDashboard = (store, dashboardId) => getDashboardData(store, dashboardId).columnSelectionValidator;
74
74
  /**
75
- * @param {Store} store The redux store
76
- * @param {string} dashboardId The dashboard ID to get the console settings for
77
- * @returns {ConsoleSettings|undefined} Console settings for this dashboard
75
+ * @param store The redux store
76
+ * @param dashboardId The dashboard ID to get the console settings for
77
+ * @returns Console settings for this dashboard
78
78
  */
79
79
 
80
80
  export var getDashboardConsoleSettings = (store, dashboardId) => getDashboardData(store, dashboardId).consoleSettings;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/redux/selectors.ts"],"names":["getDashboardData","EMPTY_MAP","Map","EMPTY_ARRAY","Object","freeze","getColumnsForDashboard","store","dashboardId","columns","getFilterSetsForDashboard","filterSets","getInputFiltersForDashboard","filters","getTableMapForDashboard","tableMap","getIsolatedLinkerPanelIdForDashboard","isolatedLinkerPanelId","getLinksForDashboard","links","getColumnSelectionValidatorForDashboard","columnSelectionValidator","getDashboardConsoleSettings","consoleSettings","getDashboardSessionWrapper","sessionWrapper"],"mappings":"AAAA,SAASA,gBAAT,QAAiC,sBAAjC;AASA,IAAMC,SAAS,GAAG,IAAIC,GAAJ,EAAlB;AAEA,IAAMC,WAAW,GAAGC,MAAM,CAACC,MAAP,CAAc,EAAd,CAApB;AAEA;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,sBAAsB,GAAG,CACpCC,KADoC,EAEpCC,WAFoC;AAAA;;AAAA,kCAInCR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCC,OAJF,yEAIaN,WAJb;AAAA,CAA/B;AAMP;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMO,yBAAyB,GAAG,CACvCH,KADuC,EAEvCC,WAFuC;AAAA;;AAAA,kCAItCR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCG,UAJC,yEAKrCR,WALqC;AAAA,CAAlC;AAOP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMS,2BAA2B,GAAG,CACzCL,KADyC,EAEzCC,WAFyC;AAAA;;AAAA,mCAIxCR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCK,OAJG,2EAKvCV,WALuC;AAAA,CAApC;AAOP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMW,uBAAuB,GAAG,CACrCP,KADqC,EAErCC,WAFqC;AAAA;;AAAA,kCAIpCR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCO,QAJD,yEAIad,SAJb;AAAA,CAAhC;AASP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMe,oCAAoC,GAAG,CAClDT,KADkD,EAElDC,WAFkD,KAIlDR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCS,qBAJhC;AAQP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,oBAAoB,GAAG,CAClCX,KADkC,EAElCC,WAFkC;AAAA;;AAAA,kCAIjCR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCW,KAJJ,yEAIahB,WAJb;AAAA,CAA7B;AAMP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMiB,uCAAuC,GAAG,CACrDb,KADqD,EAErDC,WAFqD,KAIrDR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCa,wBAJhC;AAQP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,2BAA2B,GAAG,CACzCf,KADyC,EAEzCC,WAFyC,KAIzCR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCe,eAJhC;AASP;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,0BAA0B,GAAG,CACxCjB,KADwC,EAExCC,WAFwC,KAIxCR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCiB,cAJhC","sourcesContent":["import { getDashboardData } from '@deephaven/dashboard';\nimport { Column, Table } from '@deephaven/jsapi-shim';\nimport { RootState } from '@deephaven/redux';\nimport { FilterChangeEvent } from '../FilterPlugin';\nimport { Link } from '../linker/LinkerUtils';\nimport { FilterSet } from '../panels';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\nimport { SessionWrapper } from './actions';\n\nconst EMPTY_MAP = new Map();\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns All column objects found in all panels in this dashboard\n */\nexport const getColumnsForDashboard = (\n store: RootState,\n dashboardId: string\n): Column[] =>\n (getDashboardData(store, dashboardId).columns ?? EMPTY_ARRAY) as Column[];\n\n/**\n * Get the known filter sets for the dashboard.\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filter sets set on this dashboard\n */\nexport const getFilterSetsForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterSet[] =>\n (getDashboardData(store, dashboardId).filterSets ??\n EMPTY_ARRAY) as FilterSet[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filters set on this dashboard\n */\nexport const getInputFiltersForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterChangeEvent[] =>\n (getDashboardData(store, dashboardId).filters ??\n EMPTY_ARRAY) as FilterChangeEvent[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns Map from panel ID to the table used in that panel\n */\nexport const getTableMapForDashboard = (\n store: RootState,\n dashboardId: string\n): Map<string, Table> =>\n (getDashboardData(store, dashboardId).tableMap ?? EMPTY_MAP) as Map<\n string,\n Table\n >;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data for\n * @return The panel ID that is isolated, undefined if none is isolated\n */\nexport const getIsolatedLinkerPanelIdForDashboard = (\n store: RootState,\n dashboardId: string\n): string | undefined =>\n getDashboardData(store, dashboardId).isolatedLinkerPanelId as\n | string\n | undefined;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data from\n * @returns The links for the dashboard\n */\nexport const getLinksForDashboard = (\n store: RootState,\n dashboardId: string\n): Link[] =>\n (getDashboardData(store, dashboardId).links ?? EMPTY_ARRAY) as Link[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the column selection validators for\n * @returns Column selection validator active on a dashboard\n */\nexport const getColumnSelectionValidatorForDashboard = (\n store: RootState,\n dashboardId: string\n): ColumnSelectionValidator | undefined =>\n getDashboardData(store, dashboardId).columnSelectionValidator as\n | ColumnSelectionValidator\n | undefined;\n\n/**\n * @param {Store} store The redux store\n * @param {string} dashboardId The dashboard ID to get the console settings for\n * @returns {ConsoleSettings|undefined} Console settings for this dashboard\n */\nexport const getDashboardConsoleSettings = (\n store: RootState,\n dashboardId: string\n): Record<string, unknown> =>\n getDashboardData(store, dashboardId).consoleSettings as Record<\n string,\n unknown\n >;\n\n/**\n *\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the SessionWrapper for\n * @returns The session wrapper for the dashboard\n */\nexport const getDashboardSessionWrapper = (\n store: RootState,\n dashboardId: string\n): SessionWrapper =>\n getDashboardData(store, dashboardId).sessionWrapper as SessionWrapper;\n"],"file":"selectors.js"}
1
+ {"version":3,"sources":["../../src/redux/selectors.ts"],"names":["getDashboardData","EMPTY_MAP","Map","EMPTY_ARRAY","Object","freeze","getColumnsForDashboard","store","dashboardId","columns","getFilterSetsForDashboard","filterSets","getInputFiltersForDashboard","filters","getTableMapForDashboard","tableMap","getIsolatedLinkerPanelIdForDashboard","isolatedLinkerPanelId","getLinksForDashboard","links","getColumnSelectionValidatorForDashboard","columnSelectionValidator","getDashboardConsoleSettings","consoleSettings","getDashboardSessionWrapper","sessionWrapper"],"mappings":"AAAA,SAASA,gBAAT,QAAiC,sBAAjC;AASA,IAAMC,SAAS,GAAG,IAAIC,GAAJ,EAAlB;AAEA,IAAMC,WAAW,GAAGC,MAAM,CAACC,MAAP,CAAc,EAAd,CAApB;AAEA;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,sBAAsB,GAAG,CACpCC,KADoC,EAEpCC,WAFoC;AAAA;;AAAA,kCAInCR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCC,OAJF,yEAIaN,WAJb;AAAA,CAA/B;AAMP;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMO,yBAAyB,GAAG,CACvCH,KADuC,EAEvCC,WAFuC;AAAA;;AAAA,kCAItCR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCG,UAJC,yEAKrCR,WALqC;AAAA,CAAlC;AAOP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMS,2BAA2B,GAAG,CACzCL,KADyC,EAEzCC,WAFyC;AAAA;;AAAA,mCAIxCR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCK,OAJG,2EAKvCV,WALuC;AAAA,CAApC;AAOP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMW,uBAAuB,GAAG,CACrCP,KADqC,EAErCC,WAFqC;AAAA;;AAAA,kCAIpCR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCO,QAJD,yEAIad,SAJb;AAAA,CAAhC;AASP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMe,oCAAoC,GAAG,CAClDT,KADkD,EAElDC,WAFkD,KAIlDR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCS,qBAJhC;AAQP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,oBAAoB,GAAG,CAClCX,KADkC,EAElCC,WAFkC;AAAA;;AAAA,kCAIjCR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCW,KAJJ,yEAIahB,WAJb;AAAA,CAA7B;AAMP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMiB,uCAAuC,GAAG,CACrDb,KADqD,EAErDC,WAFqD,KAIrDR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCa,wBAJhC;AAQP;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,2BAA2B,GAAG,CACzCf,KADyC,EAEzCC,WAFyC,KAIzCR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCe,eAJhC;AASP;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,IAAMC,0BAA0B,GAAG,CACxCjB,KADwC,EAExCC,WAFwC,KAIxCR,gBAAgB,CAACO,KAAD,EAAQC,WAAR,CAAhB,CAAqCiB,cAJhC","sourcesContent":["import { getDashboardData } from '@deephaven/dashboard';\nimport { Column, Table } from '@deephaven/jsapi-shim';\nimport { RootState } from '@deephaven/redux';\nimport { FilterChangeEvent } from '../FilterPlugin';\nimport { Link } from '../linker/LinkerUtils';\nimport { FilterSet } from '../panels';\nimport { ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\nimport { SessionWrapper } from './actions';\n\nconst EMPTY_MAP = new Map();\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns All column objects found in all panels in this dashboard\n */\nexport const getColumnsForDashboard = (\n store: RootState,\n dashboardId: string\n): Column[] =>\n (getDashboardData(store, dashboardId).columns ?? EMPTY_ARRAY) as Column[];\n\n/**\n * Get the known filter sets for the dashboard.\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filter sets set on this dashboard\n */\nexport const getFilterSetsForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterSet[] =>\n (getDashboardData(store, dashboardId).filterSets ??\n EMPTY_ARRAY) as FilterSet[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filters set on this dashboard\n */\nexport const getInputFiltersForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterChangeEvent[] =>\n (getDashboardData(store, dashboardId).filters ??\n EMPTY_ARRAY) as FilterChangeEvent[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns Map from panel ID to the table used in that panel\n */\nexport const getTableMapForDashboard = (\n store: RootState,\n dashboardId: string\n): Map<string, Table> =>\n (getDashboardData(store, dashboardId).tableMap ?? EMPTY_MAP) as Map<\n string,\n Table\n >;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data for\n * @returns The panel ID that is isolated, undefined if none is isolated\n */\nexport const getIsolatedLinkerPanelIdForDashboard = (\n store: RootState,\n dashboardId: string\n): string | undefined =>\n getDashboardData(store, dashboardId).isolatedLinkerPanelId as\n | string\n | undefined;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data from\n * @returns The links for the dashboard\n */\nexport const getLinksForDashboard = (\n store: RootState,\n dashboardId: string\n): Link[] =>\n (getDashboardData(store, dashboardId).links ?? EMPTY_ARRAY) as Link[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the column selection validators for\n * @returns Column selection validator active on a dashboard\n */\nexport const getColumnSelectionValidatorForDashboard = (\n store: RootState,\n dashboardId: string\n): ColumnSelectionValidator | undefined =>\n getDashboardData(store, dashboardId).columnSelectionValidator as\n | ColumnSelectionValidator\n | undefined;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the console settings for\n * @returns Console settings for this dashboard\n */\nexport const getDashboardConsoleSettings = (\n store: RootState,\n dashboardId: string\n): Record<string, unknown> =>\n getDashboardData(store, dashboardId).consoleSettings as Record<\n string,\n unknown\n >;\n\n/**\n *\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the SessionWrapper for\n * @returns The session wrapper for the dashboard\n */\nexport const getDashboardSessionWrapper = (\n store: RootState,\n dashboardId: string\n): SessionWrapper =>\n getDashboardData(store, dashboardId).sessionWrapper as SessionWrapper;\n"],"file":"selectors.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/dashboard-core-plugins",
3
- "version": "0.15.5",
3
+ "version": "0.15.6-beta.5+0a9a917",
4
4
  "description": "Deephaven Dashboard Core Plugins",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -30,20 +30,20 @@
30
30
  "start": "cross-env NODE_ENV=development npm run watch"
31
31
  },
32
32
  "dependencies": {
33
- "@deephaven/chart": "^0.15.5",
34
- "@deephaven/components": "^0.15.5",
35
- "@deephaven/console": "^0.15.5",
36
- "@deephaven/dashboard": "^0.15.5",
37
- "@deephaven/file-explorer": "^0.15.5",
38
- "@deephaven/golden-layout": "^0.15.2",
39
- "@deephaven/grid": "^0.15.2",
40
- "@deephaven/icons": "^0.15.0",
41
- "@deephaven/iris-grid": "^0.15.5",
42
- "@deephaven/jsapi-shim": "^0.15.5",
43
- "@deephaven/jsapi-utils": "^0.15.5",
44
- "@deephaven/log": "^0.15.5",
45
- "@deephaven/redux": "^0.15.5",
46
- "@deephaven/utils": "^0.15.0",
33
+ "@deephaven/chart": "^0.15.6-beta.5+0a9a917",
34
+ "@deephaven/components": "^0.15.6-beta.5+0a9a917",
35
+ "@deephaven/console": "^0.15.6-beta.5+0a9a917",
36
+ "@deephaven/dashboard": "^0.15.6-beta.5+0a9a917",
37
+ "@deephaven/file-explorer": "^0.15.6-beta.5+0a9a917",
38
+ "@deephaven/golden-layout": "^0.15.6-beta.5+0a9a917",
39
+ "@deephaven/grid": "^0.15.6-beta.5+0a9a917",
40
+ "@deephaven/icons": "^0.15.6-beta.5+0a9a917",
41
+ "@deephaven/iris-grid": "^0.15.6-beta.5+0a9a917",
42
+ "@deephaven/jsapi-shim": "^0.15.6-beta.5+0a9a917",
43
+ "@deephaven/jsapi-utils": "^0.15.6-beta.5+0a9a917",
44
+ "@deephaven/log": "^0.15.6-beta.5+0a9a917",
45
+ "@deephaven/redux": "^0.15.6-beta.5+0a9a917",
46
+ "@deephaven/utils": "^0.15.6-beta.5+0a9a917",
47
47
  "@fortawesome/react-fontawesome": "^0.1.18",
48
48
  "classnames": "^2.3.1",
49
49
  "deep-equal": "^2.0.5",
@@ -66,8 +66,8 @@
66
66
  "react-redux": "^7.2.4"
67
67
  },
68
68
  "devDependencies": {
69
- "@deephaven/mocks": "^0.15.0",
70
- "@deephaven/tsconfig": "^0.15.2"
69
+ "@deephaven/mocks": "^0.15.6-beta.5+0a9a917",
70
+ "@deephaven/tsconfig": "^0.15.6-beta.5+0a9a917"
71
71
  },
72
72
  "files": [
73
73
  "dist"
@@ -75,5 +75,5 @@
75
75
  "publishConfig": {
76
76
  "access": "public"
77
77
  },
78
- "gitHead": "0556c0fe73d2cabf66682a955950defd6130bbfa"
78
+ "gitHead": "0a9a917b4eefeb720261af4368f5c6d73cfc268f"
79
79
  }