@deephaven/dashboard-core-plugins 0.19.1 → 0.19.2-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ConsolePlugin.d.ts +4 -0
- package/dist/ConsolePlugin.d.ts.map +1 -1
- package/dist/ConsolePlugin.js +12 -12
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/MarkdownPlugin.d.ts.map +1 -1
- package/dist/MarkdownPlugin.js +3 -3
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.d.ts.map +1 -1
- package/dist/controls/input-filter/InputFilter.js +1 -1
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js +1 -1
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.d.ts.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js +1 -1
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/linker/Linker.d.ts +1 -1
- package/dist/linker/Linker.d.ts.map +1 -1
- package/dist/linker/Linker.js +6 -6
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.js +1 -1
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.js +1 -1
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
- package/dist/panels/ChartFilterOverlay.js +2 -2
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.d.ts.map +1 -1
- package/dist/panels/ChartPanel.js +6 -6
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.d.ts.map +1 -1
- package/dist/panels/ConsolePanel.js +6 -8
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +2 -2
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.js +1 -1
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.js +1 -1
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/InputFilterPanel.js +1 -1
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +1 -1
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +9 -11
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/LogPanel.js +2 -2
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebook.d.ts +1 -1
- package/dist/panels/MarkdownNotebook.d.ts.map +1 -1
- package/dist/panels/MarkdownNotebook.js +3 -3
- package/dist/panels/MarkdownNotebook.js.map +1 -1
- package/dist/panels/MarkdownPanel.d.ts.map +1 -1
- package/dist/panels/MarkdownPanel.js +4 -4
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/NotebookPanel.d.ts.map +1 -1
- package/dist/panels/NotebookPanel.js +8 -10
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/Panel.d.ts +1 -1
- package/dist/panels/Panel.d.ts.map +1 -1
- package/dist/panels/Panel.js +3 -3
- package/dist/panels/Panel.js.map +1 -1
- package/dist/panels/PanelContextMenu.d.ts.map +1 -1
- package/dist/panels/PanelContextMenu.js +8 -3
- package/dist/panels/PanelContextMenu.js.map +1 -1
- package/dist/panels/RenameDialog.d.ts.map +1 -1
- package/dist/panels/RenameDialog.js +2 -4
- package/dist/panels/RenameDialog.js.map +1 -1
- package/package.json +19 -19
|
@@ -97,7 +97,7 @@ export class MarkdownNotebook extends PureComponent {
|
|
|
97
97
|
var element = (_this$codeElements$ge = this.codeElements.get(startLine)) === null || _this$codeElements$ge === void 0 ? void 0 : _this$codeElements$ge.current;
|
|
98
98
|
var nextElement = element === null || element === void 0 ? void 0 : (_element$parentElemen = element.parentElement) === null || _element$parentElemen === void 0 ? void 0 : _element$parentElemen.nextElementSibling;
|
|
99
99
|
|
|
100
|
-
if (nextElement) {
|
|
100
|
+
if (nextElement != null) {
|
|
101
101
|
var _this$editorScrollVie;
|
|
102
102
|
|
|
103
103
|
var {
|
|
@@ -152,9 +152,9 @@ export class MarkdownNotebook extends PureComponent {
|
|
|
152
152
|
var ref = /*#__PURE__*/React.createRef();
|
|
153
153
|
var isFirstBlock = this.commands.size === 0;
|
|
154
154
|
var isSelected = nextStartLine === line || isFirstBlock && nextStartLine == null && !hasRunCode;
|
|
155
|
-
var language = className !==
|
|
155
|
+
var language = className !== undefined && className.startsWith('language-') ? className.substring(9) : 'plaintext';
|
|
156
156
|
|
|
157
|
-
if (inline) {
|
|
157
|
+
if (inline != null && inline) {
|
|
158
158
|
return /*#__PURE__*/React.createElement("code", {
|
|
159
159
|
className: className
|
|
160
160
|
}, children);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownNotebook.js","names":["React","PureComponent","classNames","Markdown","remarkGfm","Button","Code","vsPlay","assertNotNull","MarkdownNotebook","constructor","props","handleRunSelected","bind","renderCodeBlock","renderLink","commands","Map","codeElements","editorScrollView","createRef","state","hasCode","hasRunCode","nextStartLine","componentDidMount","updateHasCode","componentDidUpdate","size","setState","getNextStartLine","line","keys","nextIndex","findIndex","key","length","event","preventDefault","stopPropagation","keyIndex","startLine","command","get","newNextStartLine","element","current","nextElement","parentElement","nextElementSibling","offsetTop","top","scroll","left","runCode","onRunCode","children","className","inline","node","nodeChildren","position","start","value","ref","isFirstBlock","isSelected","language","startsWith","substring","set","Children","map","child","trim","onLinkClick","href","target","render","content","transformImageUri","transformLinkUri","flashing","code","a","undefined"],"sources":["../../src/panels/MarkdownNotebook.tsx"],"sourcesContent":["import React, {\n PureComponent,\n ReactElement,\n RefObject,\n MouseEvent,\n MouseEventHandler,\n} from 'react';\nimport classNames from 'classnames';\nimport Markdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport { Button } from '@deephaven/components';\nimport { Code } from '@deephaven/console';\nimport { vsPlay } from '@deephaven/icons';\nimport './MarkdownNotebook.scss';\nimport {\n ReactMarkdownProps,\n TransformImage,\n TransformLink,\n} from 'react-markdown/src/ast-to-react';\nimport { assertNotNull } from '@deephaven/utils';\n\ninterface MarkdownNotebookProps {\n onRunCode: (command?: string) => void;\n content: string;\n onLinkClick: MouseEventHandler<HTMLAnchorElement>;\n transformImageUri?: TransformImage;\n transformLinkUri?: false | TransformLink | null;\n}\n\ninterface MarkdownNotebookState {\n hasCode: boolean;\n\n // Keep track if any code has been executed yet. If not, make the run button flash\n hasRunCode: boolean;\n\n // Line of the next block to execute. Null to start at the first block\n nextStartLine: number | null;\n}\n\nexport class MarkdownNotebook extends PureComponent<\n MarkdownNotebookProps,\n MarkdownNotebookState\n> {\n static defaultProps = {\n onRunCode: (): void => undefined,\n };\n\n constructor(props: MarkdownNotebookProps) {\n super(props);\n\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.renderCodeBlock = this.renderCodeBlock.bind(this);\n this.renderLink = this.renderLink.bind(this);\n\n // Map of each code block from it's starting line number to the code within that block\n this.commands = new Map();\n this.codeElements = new Map();\n this.editorScrollView = React.createRef();\n\n this.state = {\n hasCode: false,\n\n // Keep track if any code has been executed yet. If not, make the run button flash\n hasRunCode: false,\n\n // Line of the next block to execute. Null to start at the first block\n nextStartLine: null,\n };\n }\n\n componentDidMount(): void {\n this.updateHasCode();\n }\n\n componentDidUpdate(): void {\n this.updateHasCode();\n }\n\n commands: Map<number, string>;\n\n codeElements;\n\n editorScrollView: RefObject<HTMLDivElement>;\n\n updateHasCode(): void {\n const { hasCode } = this.state;\n if (this.commands.size === 0 && hasCode) {\n this.setState({ hasCode: false });\n } else if (this.commands.size > 0 && !hasCode) {\n this.setState({ hasCode: true });\n }\n }\n\n /**\n * @param line The line of the code block to start from\n * @returns The next line of the code block to start from\n */\n getNextStartLine(line: number | null): number | null {\n const keys = [...this.commands.keys()];\n const nextIndex = keys.findIndex(key => key === line) + 1;\n if (nextIndex >= keys.length) {\n // We got to the last block, disable\n return null;\n }\n\n return keys[nextIndex];\n }\n\n handleRunSelected(event: MouseEvent<HTMLButtonElement>): void {\n event.preventDefault();\n event.stopPropagation();\n\n const { nextStartLine } = this.state;\n const keys = [...this.commands.keys()];\n const keyIndex = keys.findIndex(\n key => key === nextStartLine || nextStartLine == null\n );\n if (keyIndex < 0) {\n return;\n }\n const startLine = keys[keyIndex];\n const command = this.commands.get(startLine);\n const newNextStartLine = this.getNextStartLine(startLine);\n const element = this.codeElements.get(startLine)?.current;\n const nextElement = element?.parentElement?.nextElementSibling;\n if (nextElement) {\n const { offsetTop } = nextElement;\n const top = offsetTop;\n this.editorScrollView.current?.scroll({\n top,\n left: 0,\n });\n }\n\n this.runCode(command);\n this.setState({ nextStartLine: newNextStartLine });\n }\n\n runCode(command?: string): void {\n const { onRunCode } = this.props;\n onRunCode(command);\n\n this.setState({ hasRunCode: true });\n }\n\n renderCodeBlock(\n props: JSX.IntrinsicElements['code'] &\n ReactMarkdownProps & {\n inline?: boolean;\n }\n ): ReactElement {\n const { children, className, inline, node } = props;\n const { hasRunCode, nextStartLine } = this.state;\n const { children: nodeChildren, position } = node;\n assertNotNull(position);\n const { start } = position;\n const { line } = start;\n const command = (nodeChildren[0] as { value: string }).value;\n const ref = React.createRef<HTMLDivElement>();\n const isFirstBlock = this.commands.size === 0;\n const isSelected =\n nextStartLine === line ||\n (isFirstBlock && nextStartLine == null && !hasRunCode);\n const language = className?.startsWith('language-')\n ? className.substring(9)\n : 'plaintext';\n\n if (inline) {\n return <code className={className}>{children}</code>;\n }\n\n this.commands.set(line, command);\n this.codeElements.set(line, ref);\n\n return (\n <div\n className={classNames('markdown-notebook-code-block', {\n 'is-selected': isSelected,\n })}\n ref={ref}\n onClick={() => {\n this.setState({ nextStartLine: line });\n }}\n role=\"presentation\"\n >\n <Button\n kind=\"ghost\"\n icon={vsPlay}\n className=\"btn-play-block\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n\n this.runCode(command);\n this.setState({ nextStartLine: line });\n }}\n tooltip=\"Run code\"\n />\n <code>\n <Code language={language}>\n {React.Children.map(children, child =>\n typeof child === 'string' ? child.trim() : child\n )}\n </Code>\n </code>\n </div>\n );\n }\n\n renderLink(\n props: React.ClassAttributes<HTMLAnchorElement> &\n React.AnchorHTMLAttributes<HTMLAnchorElement> &\n ReactMarkdownProps\n ): ReactElement {\n const { onLinkClick } = this.props;\n const { href, children, target } = props;\n return (\n <a href={href} onClick={onLinkClick} target={target}>\n {children}\n </a>\n );\n }\n\n render(): ReactElement {\n const { content, transformImageUri, transformLinkUri } = this.props;\n const { hasCode, hasRunCode, nextStartLine } = this.state;\n return (\n <div className=\"markdown-notebook\">\n <div className=\"markdown-notebook-toolbar\">\n <Button\n className={classNames('btn-play-selected-cell', {\n flashing: hasCode && !hasRunCode,\n })}\n kind=\"ghost\"\n icon={vsPlay}\n onClick={this.handleRunSelected}\n tooltip=\"Run code and select next\"\n disabled={(hasRunCode && nextStartLine == null) || !hasCode}\n >\n Run Selected Code\n </Button>\n </div>\n <div className=\"markdown-notebook-content\" ref={this.editorScrollView}>\n <Markdown\n components={{ code: this.renderCodeBlock, a: this.renderLink }}\n linkTarget=\"_blank\"\n remarkPlugins={[remarkGfm]}\n transformLinkUri={transformLinkUri}\n transformImageUri={transformImageUri}\n includeElementIndex\n >\n {content}\n </Markdown>\n </div>\n </div>\n );\n }\n}\n\nexport default MarkdownNotebook;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarkdownNotebook.js","names":["React","PureComponent","classNames","Markdown","remarkGfm","Button","Code","vsPlay","assertNotNull","MarkdownNotebook","constructor","props","handleRunSelected","bind","renderCodeBlock","renderLink","commands","Map","codeElements","editorScrollView","createRef","state","hasCode","hasRunCode","nextStartLine","componentDidMount","updateHasCode","componentDidUpdate","size","setState","getNextStartLine","line","keys","nextIndex","findIndex","key","length","event","preventDefault","stopPropagation","keyIndex","startLine","command","get","newNextStartLine","element","current","nextElement","parentElement","nextElementSibling","offsetTop","top","scroll","left","runCode","onRunCode","children","className","inline","node","nodeChildren","position","start","value","ref","isFirstBlock","isSelected","language","undefined","startsWith","substring","set","Children","map","child","trim","onLinkClick","href","target","render","content","transformImageUri","transformLinkUri","flashing","code","a"],"sources":["../../src/panels/MarkdownNotebook.tsx"],"sourcesContent":["import React, {\n PureComponent,\n ReactElement,\n RefObject,\n MouseEvent,\n MouseEventHandler,\n} from 'react';\nimport classNames from 'classnames';\nimport Markdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport { Button } from '@deephaven/components';\nimport { Code } from '@deephaven/console';\nimport { vsPlay } from '@deephaven/icons';\nimport './MarkdownNotebook.scss';\nimport {\n ReactMarkdownProps,\n TransformImage,\n TransformLink,\n} from 'react-markdown/src/ast-to-react';\nimport { assertNotNull } from '@deephaven/utils';\n\ninterface MarkdownNotebookProps {\n onRunCode: (command?: string) => void;\n content: string;\n onLinkClick: MouseEventHandler<HTMLAnchorElement>;\n transformImageUri?: TransformImage;\n transformLinkUri?: false | TransformLink | null;\n}\n\ninterface MarkdownNotebookState {\n hasCode: boolean;\n\n // Keep track if any code has been executed yet. If not, make the run button flash\n hasRunCode: boolean;\n\n // Line of the next block to execute. Null to start at the first block\n nextStartLine: number | null;\n}\n\nexport class MarkdownNotebook extends PureComponent<\n MarkdownNotebookProps,\n MarkdownNotebookState\n> {\n static defaultProps = {\n onRunCode: (): void => undefined,\n };\n\n constructor(props: MarkdownNotebookProps) {\n super(props);\n\n this.handleRunSelected = this.handleRunSelected.bind(this);\n this.renderCodeBlock = this.renderCodeBlock.bind(this);\n this.renderLink = this.renderLink.bind(this);\n\n // Map of each code block from it's starting line number to the code within that block\n this.commands = new Map();\n this.codeElements = new Map();\n this.editorScrollView = React.createRef();\n\n this.state = {\n hasCode: false,\n\n // Keep track if any code has been executed yet. If not, make the run button flash\n hasRunCode: false,\n\n // Line of the next block to execute. Null to start at the first block\n nextStartLine: null,\n };\n }\n\n componentDidMount(): void {\n this.updateHasCode();\n }\n\n componentDidUpdate(): void {\n this.updateHasCode();\n }\n\n commands: Map<number, string>;\n\n codeElements: Map<number, React.RefObject<HTMLDivElement>>;\n\n editorScrollView: RefObject<HTMLDivElement>;\n\n updateHasCode(): void {\n const { hasCode } = this.state;\n if (this.commands.size === 0 && hasCode) {\n this.setState({ hasCode: false });\n } else if (this.commands.size > 0 && !hasCode) {\n this.setState({ hasCode: true });\n }\n }\n\n /**\n * @param line The line of the code block to start from\n * @returns The next line of the code block to start from\n */\n getNextStartLine(line: number | null): number | null {\n const keys = [...this.commands.keys()];\n const nextIndex = keys.findIndex(key => key === line) + 1;\n if (nextIndex >= keys.length) {\n // We got to the last block, disable\n return null;\n }\n\n return keys[nextIndex];\n }\n\n handleRunSelected(event: MouseEvent<HTMLButtonElement>): void {\n event.preventDefault();\n event.stopPropagation();\n\n const { nextStartLine } = this.state;\n const keys = [...this.commands.keys()];\n const keyIndex = keys.findIndex(\n key => key === nextStartLine || nextStartLine == null\n );\n if (keyIndex < 0) {\n return;\n }\n const startLine = keys[keyIndex];\n const command = this.commands.get(startLine);\n const newNextStartLine = this.getNextStartLine(startLine);\n const element = this.codeElements.get(startLine)?.current;\n const nextElement = element?.parentElement?.nextElementSibling;\n if (nextElement != null) {\n const { offsetTop } = nextElement as HTMLElement;\n const top = offsetTop;\n this.editorScrollView.current?.scroll({\n top,\n left: 0,\n });\n }\n\n this.runCode(command);\n this.setState({ nextStartLine: newNextStartLine });\n }\n\n runCode(command?: string): void {\n const { onRunCode } = this.props;\n onRunCode(command);\n\n this.setState({ hasRunCode: true });\n }\n\n renderCodeBlock(\n props: JSX.IntrinsicElements['code'] &\n ReactMarkdownProps & {\n inline?: boolean;\n }\n ): ReactElement {\n const { children, className, inline, node } = props;\n const { hasRunCode, nextStartLine } = this.state;\n const { children: nodeChildren, position } = node;\n assertNotNull(position);\n const { start } = position;\n const { line } = start;\n const command = (nodeChildren[0] as { value: string }).value;\n const ref = React.createRef<HTMLDivElement>();\n const isFirstBlock = this.commands.size === 0;\n const isSelected =\n nextStartLine === line ||\n (isFirstBlock && nextStartLine == null && !hasRunCode);\n const language =\n className !== undefined && className.startsWith('language-')\n ? className.substring(9)\n : 'plaintext';\n\n if (inline != null && inline) {\n return <code className={className}>{children}</code>;\n }\n\n this.commands.set(line, command);\n this.codeElements.set(line, ref);\n\n return (\n <div\n className={classNames('markdown-notebook-code-block', {\n 'is-selected': isSelected,\n })}\n ref={ref}\n onClick={() => {\n this.setState({ nextStartLine: line });\n }}\n role=\"presentation\"\n >\n <Button\n kind=\"ghost\"\n icon={vsPlay}\n className=\"btn-play-block\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n\n this.runCode(command);\n this.setState({ nextStartLine: line });\n }}\n tooltip=\"Run code\"\n />\n <code>\n <Code language={language}>\n {React.Children.map(children, child =>\n typeof child === 'string' ? child.trim() : child\n )}\n </Code>\n </code>\n </div>\n );\n }\n\n renderLink(\n props: React.ClassAttributes<HTMLAnchorElement> &\n React.AnchorHTMLAttributes<HTMLAnchorElement> &\n ReactMarkdownProps\n ): ReactElement {\n const { onLinkClick } = this.props;\n const { href, children, target } = props;\n return (\n <a href={href} onClick={onLinkClick} target={target}>\n {children}\n </a>\n );\n }\n\n render(): ReactElement {\n const { content, transformImageUri, transformLinkUri } = this.props;\n const { hasCode, hasRunCode, nextStartLine } = this.state;\n return (\n <div className=\"markdown-notebook\">\n <div className=\"markdown-notebook-toolbar\">\n <Button\n className={classNames('btn-play-selected-cell', {\n flashing: hasCode && !hasRunCode,\n })}\n kind=\"ghost\"\n icon={vsPlay}\n onClick={this.handleRunSelected}\n tooltip=\"Run code and select next\"\n disabled={(hasRunCode && nextStartLine == null) || !hasCode}\n >\n Run Selected Code\n </Button>\n </div>\n <div className=\"markdown-notebook-content\" ref={this.editorScrollView}>\n <Markdown\n components={{ code: this.renderCodeBlock, a: this.renderLink }}\n linkTarget=\"_blank\"\n remarkPlugins={[remarkGfm]}\n transformLinkUri={transformLinkUri}\n transformImageUri={transformImageUri}\n includeElementIndex\n >\n {content}\n </Markdown>\n </div>\n </div>\n );\n }\n}\n\nexport default MarkdownNotebook;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownPanel.d.ts","sourceRoot":"","sources":["../../src/panels/MarkdownPanel.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG/E,OAAO,EACL,WAAW,EACX,YAAY,EAIb,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAM7C,OAAO,cAAc,MAAM,qCAAqC,CAAC;AACjE,OAAO,sBAAsB,CAAC;AAI9B,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,kBAAkB;IAC1B,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,UAAU,kBAAkB;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGxB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,qBAAa,aAAc,SAAQ,SAAS,CAC1C,kBAAkB,EAClB,kBAAkB,CACnB;IACC,MAAM,CAAC,YAAY;;MAEjB;IAEF,MAAM,CAAC,SAAS,SAAmB;gBAEvB,KAAK,EAAE,kBAAkB;IA+BrC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IAEtC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;IAE7C,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IA2B/C,kBAAkB,yDAEhB;IAEF,0BAA0B,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI;IAW5D,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,GAAG,IAAI;IAK1E,oBAAoB,IAAI,IAAI;IAoB5B,kBAAkB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAQxD,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAK1D,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"MarkdownPanel.d.ts","sourceRoot":"","sources":["../../src/panels/MarkdownPanel.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG/E,OAAO,EACL,WAAW,EACX,YAAY,EAIb,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAM7C,OAAO,cAAc,MAAM,qCAAqC,CAAC;AACjE,OAAO,sBAAsB,CAAC;AAI9B,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,kBAAkB;IAC1B,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,UAAU,kBAAkB;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGxB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,qBAAa,aAAc,SAAQ,SAAS,CAC1C,kBAAkB,EAClB,kBAAkB,CACnB;IACC,MAAM,CAAC,YAAY;;MAEjB;IAEF,MAAM,CAAC,SAAS,SAAmB;gBAEvB,KAAK,EAAE,kBAAkB;IA+BrC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IAEtC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;IAE7C,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IA2B/C,kBAAkB,yDAEhB;IAEF,0BAA0B,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI;IAW5D,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,GAAG,IAAI;IAK1E,oBAAoB,IAAI,IAAI;IAoB5B,kBAAkB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAQxD,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAK1D,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI;IAyBzD,kBAAkB,IAAI,IAAI;IAO1B,MAAM,IAAI,YAAY;CAyCvB;;;;;;AAYD,wBAEE"}
|
|
@@ -34,7 +34,7 @@ export class MarkdownPanel extends Component {
|
|
|
34
34
|
} = props;
|
|
35
35
|
var content = null;
|
|
36
36
|
|
|
37
|
-
if (panelState && panelState.content) {
|
|
37
|
+
if (panelState != null && panelState.content != null) {
|
|
38
38
|
({
|
|
39
39
|
content
|
|
40
40
|
} = panelState);
|
|
@@ -109,7 +109,7 @@ export class MarkdownPanel extends Component {
|
|
|
109
109
|
content: ''
|
|
110
110
|
}
|
|
111
111
|
}, () => {
|
|
112
|
-
if (this.editor && this.editor.focus) {
|
|
112
|
+
if (this.editor != null && this.editor.focus != null) {
|
|
113
113
|
this.editor.focus();
|
|
114
114
|
}
|
|
115
115
|
});
|
|
@@ -133,14 +133,14 @@ export class MarkdownPanel extends Component {
|
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
handleEditorBlur(event) {
|
|
136
|
-
var _this$
|
|
136
|
+
var _this$editor;
|
|
137
137
|
|
|
138
138
|
log.debug("markdown content changed, saving...");
|
|
139
139
|
var {
|
|
140
140
|
isEditing
|
|
141
141
|
} = this.state; // if not in edit mode, or in edit mode but blur went to an internal monaco field (like search)
|
|
142
142
|
|
|
143
|
-
if (!isEditing ||
|
|
143
|
+
if (!isEditing || this.markdownEditor != null && this.markdownEditor.container != null && this.markdownEditor.container.contains(event.relatedTarget)) {
|
|
144
144
|
return;
|
|
145
145
|
}
|
|
146
146
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownPanel.js","names":["React","Component","memoize","connect","getClosedPanelsForDashboard","LayoutUtils","PanelEvent","Log","assertNotNull","Panel","MarkdownContainer","MarkdownStartPage","MarkdownEditor","log","module","MarkdownPanel","constructor","props","closedPanels","filter","panel","component","reverse","handleContainerDoubleClick","bind","handleCreateMarkdown","handleDeleteMarkdown","handleOpenMarkdown","handleEditorInitialized","handleEditorBlur","handleEditorResize","panelState","content","state","isStartPageShown","isEditing","markdownEditor","setEditorPosition","clickPositionY","container","markdownEditorContainer","editor","contentTop","getBoundingClientRect","top","contentScrollTop","scrollTop","contentScrollHeight","scrollHeight","totalLines","getModel","getLineCount","lineToFocus","Math","round","revealLine","setPosition","lineNumber","column","focus","event","dbClickPositionY","clientY","setState","debug","markdown","glContainer","glEventHub","config","getComponentConfigFromContainer","emit","REOPEN","DELETE","contains","relatedTarget","getValue","layout","render","closedMarkdowns","getClosedMarkdowns","undefined","mapStateToProps","ownProps","localDashboardId","forwardRef"],"sources":["../../src/panels/MarkdownPanel.tsx"],"sourcesContent":["import React, { Component, FocusEvent, MouseEvent, ReactElement } from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport {\n ClosedPanel,\n ClosedPanels,\n getClosedPanelsForDashboard,\n LayoutUtils,\n PanelEvent,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type {\n Container,\n EventEmitter,\n ReactComponentConfig,\n} from '@deephaven/golden-layout';\nimport type * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport { RootState } from '@deephaven/redux';\nimport Panel from './Panel';\nimport MarkdownContainer from '../controls/markdown/MarkdownContainer';\nimport MarkdownStartPage from '../controls/markdown/MarkdownStartPage';\nimport MarkdownEditor from '../controls/markdown/MarkdownEditor';\nimport './MarkdownPanel.scss';\n\nconst log = Log.module('MarkdownPanel');\n\ninterface PanelState {\n content?: string;\n}\n\ninterface MarkdownPanelProps {\n glContainer: Container;\n glEventHub: EventEmitter;\n panelState: PanelState;\n closedPanels: ClosedPanel[];\n}\n\ninterface MarkdownPanelState {\n isStartPageShown: boolean;\n isEditing: boolean;\n content?: string | null;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n}\n\nexport class MarkdownPanel extends Component<\n MarkdownPanelProps,\n MarkdownPanelState\n> {\n static defaultProps = {\n panelState: null,\n };\n\n static COMPONENT = 'MarkdownPanel';\n\n constructor(props: MarkdownPanelProps) {\n super(props);\n\n this.handleContainerDoubleClick = this.handleContainerDoubleClick.bind(\n this\n );\n this.handleCreateMarkdown = this.handleCreateMarkdown.bind(this);\n this.handleDeleteMarkdown = this.handleDeleteMarkdown.bind(this);\n this.handleOpenMarkdown = this.handleOpenMarkdown.bind(this);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleEditorResize = this.handleEditorResize.bind(this);\n\n const { panelState } = props;\n let content = null;\n if (panelState && panelState.content) {\n ({ content } = panelState);\n }\n\n this.state = {\n isStartPageShown: content == null,\n isEditing: false,\n content,\n\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n\n this.markdownEditor = null;\n }\n\n markdownEditor: MarkdownEditor | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n setEditorPosition(clickPositionY: number): void {\n assertNotNull(this.markdownEditor);\n const { container: markdownEditorContainer } = this.markdownEditor;\n if (this.editor && markdownEditorContainer) {\n const contentTop = markdownEditorContainer.getBoundingClientRect().top;\n const contentScrollTop = markdownEditorContainer.scrollTop;\n const contentScrollHeight = markdownEditorContainer.scrollHeight;\n const totalLines = this.editor.getModel()?.getLineCount() ?? 0;\n\n let lineToFocus = Math.round(\n ((contentScrollTop + clickPositionY - contentTop) /\n contentScrollHeight) *\n totalLines\n );\n if (lineToFocus > totalLines) {\n lineToFocus = totalLines;\n }\n\n this.editor.revealLine(lineToFocus);\n this.editor.setPosition({\n lineNumber: lineToFocus,\n column: 1,\n });\n this.editor.focus();\n }\n }\n\n getClosedMarkdowns = memoize((closedPanels: ClosedPanels) =>\n closedPanels.filter(panel => panel.component === 'MarkdownPanel').reverse()\n );\n\n handleContainerDoubleClick(event: MouseEvent<Element>): void {\n const { isEditing } = this.state;\n const dbClickPositionY = event.clientY;\n\n if (!isEditing) {\n this.setState({ isEditing: true }, () => {\n this.setEditorPosition(dbClickPositionY);\n });\n }\n }\n\n handleEditorInitialized(editor: monaco.editor.IStandaloneCodeEditor): void {\n log.debug('Markdown Editor Initialized...');\n this.editor = editor;\n }\n\n handleCreateMarkdown(): void {\n log.debug('create markdown...');\n\n this.setState(\n {\n isStartPageShown: false,\n content: '',\n isEditing: true,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content: '' },\n },\n () => {\n if (this.editor && this.editor.focus) {\n this.editor.focus();\n }\n }\n );\n }\n\n handleOpenMarkdown(markdown: ReactComponentConfig): void {\n log.debug('open markdown...', markdown);\n\n const { glContainer, glEventHub } = this.props;\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n glEventHub.emit(PanelEvent.REOPEN, markdown, config);\n }\n\n handleDeleteMarkdown(markdown: ReactComponentConfig): void {\n const { glEventHub } = this.props;\n glEventHub.emit(PanelEvent.DELETE, markdown);\n }\n\n handleEditorBlur(event: FocusEvent<HTMLDivElement>): void {\n log.debug(`markdown content changed, saving...`);\n const { isEditing } = this.state;\n\n // if not in edit mode, or in edit mode but blur went to an internal monaco field (like search)\n if (\n !isEditing ||\n this.markdownEditor?.container?.contains(event.relatedTarget)\n ) {\n return;\n }\n\n const content = this.editor?.getValue();\n\n this.setState({\n content,\n isEditing: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content },\n });\n }\n\n handleEditorResize(): void {\n const { isEditing } = this.state;\n if (isEditing && this.editor) {\n this.editor.layout();\n }\n }\n\n render(): ReactElement {\n const { glContainer, glEventHub, closedPanels } = this.props;\n const { isEditing, isStartPageShown, content } = this.state;\n const closedMarkdowns = this.getClosedMarkdowns(closedPanels);\n\n return (\n <Panel\n glContainer={glContainer}\n glEventHub={glEventHub}\n className=\"markdown-panel\"\n componentPanel={this}\n onResize={this.handleEditorResize}\n onBlur={this.handleEditorBlur}\n isClonable\n isRenamable\n >\n {isStartPageShown ? (\n <MarkdownStartPage\n closedMarkdowns={closedMarkdowns}\n onCreate={this.handleCreateMarkdown}\n onOpen={this.handleOpenMarkdown}\n onDelete={this.handleDeleteMarkdown}\n />\n ) : (\n <MarkdownContainer\n isEditing={isEditing}\n onDoubleClick={this.handleContainerDoubleClick}\n >\n <MarkdownEditor\n ref={markdownEditor => {\n this.markdownEditor = markdownEditor;\n }}\n isEditing={isEditing}\n content={content ?? undefined}\n onEditorInitialized={this.handleEditorInitialized}\n />\n </MarkdownContainer>\n )}\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n) => {\n const { localDashboardId } = ownProps;\n return {\n closedPanels: getClosedPanelsForDashboard(state, localDashboardId),\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n MarkdownPanel\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarkdownPanel.js","names":["React","Component","memoize","connect","getClosedPanelsForDashboard","LayoutUtils","PanelEvent","Log","assertNotNull","Panel","MarkdownContainer","MarkdownStartPage","MarkdownEditor","log","module","MarkdownPanel","constructor","props","closedPanels","filter","panel","component","reverse","handleContainerDoubleClick","bind","handleCreateMarkdown","handleDeleteMarkdown","handleOpenMarkdown","handleEditorInitialized","handleEditorBlur","handleEditorResize","panelState","content","state","isStartPageShown","isEditing","markdownEditor","setEditorPosition","clickPositionY","container","markdownEditorContainer","editor","contentTop","getBoundingClientRect","top","contentScrollTop","scrollTop","contentScrollHeight","scrollHeight","totalLines","getModel","getLineCount","lineToFocus","Math","round","revealLine","setPosition","lineNumber","column","focus","event","dbClickPositionY","clientY","setState","debug","markdown","glContainer","glEventHub","config","getComponentConfigFromContainer","emit","REOPEN","DELETE","contains","relatedTarget","getValue","layout","render","closedMarkdowns","getClosedMarkdowns","undefined","mapStateToProps","ownProps","localDashboardId","forwardRef"],"sources":["../../src/panels/MarkdownPanel.tsx"],"sourcesContent":["import React, { Component, FocusEvent, MouseEvent, ReactElement } from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport {\n ClosedPanel,\n ClosedPanels,\n getClosedPanelsForDashboard,\n LayoutUtils,\n PanelEvent,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type {\n Container,\n EventEmitter,\n ReactComponentConfig,\n} from '@deephaven/golden-layout';\nimport type * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport { RootState } from '@deephaven/redux';\nimport Panel from './Panel';\nimport MarkdownContainer from '../controls/markdown/MarkdownContainer';\nimport MarkdownStartPage from '../controls/markdown/MarkdownStartPage';\nimport MarkdownEditor from '../controls/markdown/MarkdownEditor';\nimport './MarkdownPanel.scss';\n\nconst log = Log.module('MarkdownPanel');\n\ninterface PanelState {\n content?: string;\n}\n\ninterface MarkdownPanelProps {\n glContainer: Container;\n glEventHub: EventEmitter;\n panelState: PanelState;\n closedPanels: ClosedPanel[];\n}\n\ninterface MarkdownPanelState {\n isStartPageShown: boolean;\n isEditing: boolean;\n content?: string | null;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n}\n\nexport class MarkdownPanel extends Component<\n MarkdownPanelProps,\n MarkdownPanelState\n> {\n static defaultProps = {\n panelState: null,\n };\n\n static COMPONENT = 'MarkdownPanel';\n\n constructor(props: MarkdownPanelProps) {\n super(props);\n\n this.handleContainerDoubleClick = this.handleContainerDoubleClick.bind(\n this\n );\n this.handleCreateMarkdown = this.handleCreateMarkdown.bind(this);\n this.handleDeleteMarkdown = this.handleDeleteMarkdown.bind(this);\n this.handleOpenMarkdown = this.handleOpenMarkdown.bind(this);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleEditorResize = this.handleEditorResize.bind(this);\n\n const { panelState } = props;\n let content = null;\n if (panelState != null && panelState.content != null) {\n ({ content } = panelState);\n }\n\n this.state = {\n isStartPageShown: content == null,\n isEditing: false,\n content,\n\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n\n this.markdownEditor = null;\n }\n\n markdownEditor: MarkdownEditor | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n setEditorPosition(clickPositionY: number): void {\n assertNotNull(this.markdownEditor);\n const { container: markdownEditorContainer } = this.markdownEditor;\n if (this.editor && markdownEditorContainer) {\n const contentTop = markdownEditorContainer.getBoundingClientRect().top;\n const contentScrollTop = markdownEditorContainer.scrollTop;\n const contentScrollHeight = markdownEditorContainer.scrollHeight;\n const totalLines = this.editor.getModel()?.getLineCount() ?? 0;\n\n let lineToFocus = Math.round(\n ((contentScrollTop + clickPositionY - contentTop) /\n contentScrollHeight) *\n totalLines\n );\n if (lineToFocus > totalLines) {\n lineToFocus = totalLines;\n }\n\n this.editor.revealLine(lineToFocus);\n this.editor.setPosition({\n lineNumber: lineToFocus,\n column: 1,\n });\n this.editor.focus();\n }\n }\n\n getClosedMarkdowns = memoize((closedPanels: ClosedPanels) =>\n closedPanels.filter(panel => panel.component === 'MarkdownPanel').reverse()\n );\n\n handleContainerDoubleClick(event: MouseEvent<Element>): void {\n const { isEditing } = this.state;\n const dbClickPositionY = event.clientY;\n\n if (!isEditing) {\n this.setState({ isEditing: true }, () => {\n this.setEditorPosition(dbClickPositionY);\n });\n }\n }\n\n handleEditorInitialized(editor: monaco.editor.IStandaloneCodeEditor): void {\n log.debug('Markdown Editor Initialized...');\n this.editor = editor;\n }\n\n handleCreateMarkdown(): void {\n log.debug('create markdown...');\n\n this.setState(\n {\n isStartPageShown: false,\n content: '',\n isEditing: true,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content: '' },\n },\n () => {\n if (this.editor != null && this.editor.focus != null) {\n this.editor.focus();\n }\n }\n );\n }\n\n handleOpenMarkdown(markdown: ReactComponentConfig): void {\n log.debug('open markdown...', markdown);\n\n const { glContainer, glEventHub } = this.props;\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n glEventHub.emit(PanelEvent.REOPEN, markdown, config);\n }\n\n handleDeleteMarkdown(markdown: ReactComponentConfig): void {\n const { glEventHub } = this.props;\n glEventHub.emit(PanelEvent.DELETE, markdown);\n }\n\n handleEditorBlur(event: FocusEvent<HTMLDivElement>): void {\n log.debug(`markdown content changed, saving...`);\n const { isEditing } = this.state;\n\n // if not in edit mode, or in edit mode but blur went to an internal monaco field (like search)\n if (\n !isEditing ||\n (this.markdownEditor != null &&\n this.markdownEditor.container != null &&\n this.markdownEditor.container.contains(event.relatedTarget))\n ) {\n return;\n }\n\n const content = this.editor?.getValue();\n\n this.setState({\n content,\n isEditing: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content },\n });\n }\n\n handleEditorResize(): void {\n const { isEditing } = this.state;\n if (isEditing && this.editor) {\n this.editor.layout();\n }\n }\n\n render(): ReactElement {\n const { glContainer, glEventHub, closedPanels } = this.props;\n const { isEditing, isStartPageShown, content } = this.state;\n const closedMarkdowns = this.getClosedMarkdowns(closedPanels);\n\n return (\n <Panel\n glContainer={glContainer}\n glEventHub={glEventHub}\n className=\"markdown-panel\"\n componentPanel={this}\n onResize={this.handleEditorResize}\n onBlur={this.handleEditorBlur}\n isClonable\n isRenamable\n >\n {isStartPageShown ? (\n <MarkdownStartPage\n closedMarkdowns={closedMarkdowns}\n onCreate={this.handleCreateMarkdown}\n onOpen={this.handleOpenMarkdown}\n onDelete={this.handleDeleteMarkdown}\n />\n ) : (\n <MarkdownContainer\n isEditing={isEditing}\n onDoubleClick={this.handleContainerDoubleClick}\n >\n <MarkdownEditor\n ref={markdownEditor => {\n this.markdownEditor = markdownEditor;\n }}\n isEditing={isEditing}\n content={content ?? undefined}\n onEditorInitialized={this.handleEditorInitialized}\n />\n </MarkdownContainer>\n )}\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n) => {\n const { localDashboardId } = ownProps;\n return {\n closedPanels: getClosedPanelsForDashboard(state, localDashboardId),\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n MarkdownPanel\n);\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotebookPanel.d.ts","sourceRoot":"","sources":["../../src/panels/NotebookPanel.tsx"],"names":[],"mappings":"AACA,OAAc,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAInE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAS5C,OAAO,EAAE,YAAY,EAAgC,MAAM,oBAAoB,CAAC;AAChF,OAAO,EACL,WAAW,EAGX,IAAI,EACL,MAAM,0BAA0B,CAAC;AAYlC,OAAO,EAAiB,OAAO,EAAgB,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAKnD,OAAO,sBAAsB,CAAC;AAM9B,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,QAAQ;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;CACnC;AAED,UAAU,kBAAkB;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,UAAU,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC9B,CAAC;IACF,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IAEnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,QAAQ,EAAE,QAAQ,CAAC;IAEnB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,UAAU,EAAE,UAAU,CAAC;IAEvB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IAEzB,UAAU,EAAE,MAAM,CAAC;IAEnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,cAAM,aAAc,SAAQ,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAC3E,MAAM,CAAC,SAAS,SAAmB;IAEnC,MAAM,CAAC,cAAc;;MAAwC;IAE7D,MAAM,CAAC,YAAY,SAAc;IAEjC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAOxC,MAAM,CAAC,YAAY;;;;;MAKjB;IAEF,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;gBAehD,KAAK,EAAE,kBAAkB;
|
|
1
|
+
{"version":3,"file":"NotebookPanel.d.ts","sourceRoot":"","sources":["../../src/panels/NotebookPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -56,8 +56,6 @@ class NotebookPanel extends Component {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
constructor(props) {
|
|
59
|
-
var _fileMetadata;
|
|
60
|
-
|
|
61
59
|
super(props);
|
|
62
60
|
|
|
63
61
|
_defineProperty(this, "pending", void 0);
|
|
@@ -135,7 +133,7 @@ class NotebookPanel extends Component {
|
|
|
135
133
|
isPreview
|
|
136
134
|
} = props;
|
|
137
135
|
|
|
138
|
-
if (panelState) {
|
|
136
|
+
if (panelState != null) {
|
|
139
137
|
({
|
|
140
138
|
fileMetadata = fileMetadata,
|
|
141
139
|
isPreview = isPreview,
|
|
@@ -145,10 +143,10 @@ class NotebookPanel extends Component {
|
|
|
145
143
|
// may need to implement some other indication that this notebook has never been saved
|
|
146
144
|
|
|
147
145
|
|
|
148
|
-
var hasFileId =
|
|
146
|
+
var hasFileId = fileMetadata != null && FileUtils.hasPath(fileMetadata.itemName); // Unsaved if file id != null and content != null
|
|
149
147
|
// OR file id is null AND content is not null or ''
|
|
150
148
|
|
|
151
|
-
var isUnsaved = hasFileId && settings.value != null || !hasFileId && settings.value;
|
|
149
|
+
var isUnsaved = hasFileId === true && settings.value != null || !hasFileId && settings.value != null && settings.value.length > 0;
|
|
152
150
|
var changeCount = isUnsaved ? 1 : 0;
|
|
153
151
|
this.state = {
|
|
154
152
|
error: undefined,
|
|
@@ -183,7 +181,7 @@ class NotebookPanel extends Component {
|
|
|
183
181
|
var {
|
|
184
182
|
tab
|
|
185
183
|
} = glContainer;
|
|
186
|
-
if (tab) this.initTab(tab);
|
|
184
|
+
if (tab != null) this.initTab(tab);
|
|
187
185
|
this.initNotebookContent();
|
|
188
186
|
glEventHub.on(NotebookEvent.RENAME_FILE, this.handleRenameFile);
|
|
189
187
|
glContainer.on('tabClicked', this.handlePanelTabClick);
|
|
@@ -902,7 +900,7 @@ class NotebookPanel extends Component {
|
|
|
902
900
|
|
|
903
901
|
var itemName = fileMetadata === null || fileMetadata === void 0 ? void 0 : fileMetadata.itemName;
|
|
904
902
|
|
|
905
|
-
if (
|
|
903
|
+
if (itemName === undefined) {
|
|
906
904
|
return src;
|
|
907
905
|
}
|
|
908
906
|
|
|
@@ -947,7 +945,7 @@ class NotebookPanel extends Component {
|
|
|
947
945
|
}
|
|
948
946
|
|
|
949
947
|
runCommand(command) {
|
|
950
|
-
if (
|
|
948
|
+
if (command === undefined) {
|
|
951
949
|
log.debug('Ignoring empty command.');
|
|
952
950
|
return;
|
|
953
951
|
}
|
|
@@ -1071,7 +1069,7 @@ class NotebookPanel extends Component {
|
|
|
1071
1069
|
}, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
1072
1070
|
icon: vsPlay,
|
|
1073
1071
|
transform: "grow-4"
|
|
1074
|
-
}), /*#__PURE__*/React.createElement(Tooltip, null, "Run ", SHORTCUTS.NOTEBOOK.RUN.getDisplayText())), disabledRunButtonTooltip && /*#__PURE__*/React.createElement(Tooltip, null, disabledRunButtonTooltip)), /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("button", {
|
|
1072
|
+
}), /*#__PURE__*/React.createElement(Tooltip, null, "Run ", SHORTCUTS.NOTEBOOK.RUN.getDisplayText())), disabledRunButtonTooltip != null && /*#__PURE__*/React.createElement(Tooltip, null, disabledRunButtonTooltip)), /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("button", {
|
|
1075
1073
|
type: "button",
|
|
1076
1074
|
className: "btn btn-link btn-link-icon btn-play",
|
|
1077
1075
|
onClick: this.handleRunSelected,
|
|
@@ -1079,7 +1077,7 @@ class NotebookPanel extends Component {
|
|
|
1079
1077
|
}, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
1080
1078
|
icon: dhRunSelection,
|
|
1081
1079
|
transform: "grow-4"
|
|
1082
|
-
}), /*#__PURE__*/React.createElement(Tooltip, null, "Run Selected", ' ', SHORTCUTS.NOTEBOOK.RUN_SELECTED.getDisplayText())), disabledRunSelectedButtonTooltip && /*#__PURE__*/React.createElement(Tooltip, null, disabledRunSelectedButtonTooltip)), /*#__PURE__*/React.createElement("button", {
|
|
1080
|
+
}), /*#__PURE__*/React.createElement(Tooltip, null, "Run Selected", ' ', SHORTCUTS.NOTEBOOK.RUN_SELECTED.getDisplayText())), disabledRunSelectedButtonTooltip != null && /*#__PURE__*/React.createElement(Tooltip, null, disabledRunSelectedButtonTooltip)), /*#__PURE__*/React.createElement("button", {
|
|
1083
1081
|
type: "button",
|
|
1084
1082
|
className: "btn btn-link btn-link-icon mr-auto",
|
|
1085
1083
|
disabled: toolbarDisabled,
|