@deephaven/dashboard-core-plugins 1.22.1-alpha-pivot-builder.0 → 1.22.2-alpha-pivot-builder.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/ChartBuilderPlugin.js +8 -15
  2. package/dist/ChartBuilderPlugin.js.map +1 -1
  3. package/dist/ChartPanelPlugin.js +13 -6
  4. package/dist/ChartPanelPlugin.js.map +1 -1
  5. package/dist/ChartWidgetPlugin.js +11 -4
  6. package/dist/ChartWidgetPlugin.js.map +1 -1
  7. package/dist/ConsolePlugin.js +38 -46
  8. package/dist/ConsolePlugin.js.map +1 -1
  9. package/dist/FilterPlugin.js +63 -44
  10. package/dist/FilterPlugin.js.map +1 -1
  11. package/dist/GridPanelPlugin.js +3 -5
  12. package/dist/GridPanelPlugin.js.map +1 -1
  13. package/dist/GridWidgetPlugin.js +35 -29
  14. package/dist/GridWidgetPlugin.js.map +1 -1
  15. package/dist/LinkerPlugin.js +3 -5
  16. package/dist/LinkerPlugin.js.map +1 -1
  17. package/dist/MarkdownPlugin.js +18 -17
  18. package/dist/MarkdownPlugin.js.map +1 -1
  19. package/dist/PandasPanelPlugin.js +3 -5
  20. package/dist/PandasPanelPlugin.js.map +1 -1
  21. package/dist/PandasWidgetPlugin.js +3 -7
  22. package/dist/PandasWidgetPlugin.js.map +1 -1
  23. package/dist/TablePluginWrapper.js +8 -10
  24. package/dist/TablePluginWrapper.js.map +1 -1
  25. package/dist/WidgetLoaderPlugin.js +24 -29
  26. package/dist/WidgetLoaderPlugin.js.map +1 -1
  27. package/dist/controls/dropdown-filter/DropdownFilter.js +63 -79
  28. package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
  29. package/dist/controls/input-filter/InputFilter.js +32 -58
  30. package/dist/controls/input-filter/InputFilter.js.map +1 -1
  31. package/dist/controls/markdown/MarkdownContainer.js +4 -5
  32. package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
  33. package/dist/controls/markdown/MarkdownEditor.js +7 -10
  34. package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
  35. package/dist/controls/markdown/MarkdownStartPage.js +8 -12
  36. package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
  37. package/dist/linker/Linker.js +100 -192
  38. package/dist/linker/Linker.js.map +1 -1
  39. package/dist/linker/LinkerLink.js +23 -31
  40. package/dist/linker/LinkerLink.js.map +1 -1
  41. package/dist/linker/LinkerOverlayContent.js +65 -66
  42. package/dist/linker/LinkerOverlayContent.js.map +1 -1
  43. package/dist/linker/LinkerUtils.js +6 -14
  44. package/dist/linker/LinkerUtils.js.map +1 -1
  45. package/dist/panels/ChartColumnSelectorOverlay.js +4 -6
  46. package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
  47. package/dist/panels/ChartFilterOverlay.js +7 -9
  48. package/dist/panels/ChartFilterOverlay.js.map +1 -1
  49. package/dist/panels/ChartPanel.js +136 -220
  50. package/dist/panels/ChartPanel.js.map +1 -1
  51. package/dist/panels/ChartPanelUtils.js +3 -4
  52. package/dist/panels/ChartPanelUtils.js.map +1 -1
  53. package/dist/panels/CommandHistoryPanel.js +33 -52
  54. package/dist/panels/CommandHistoryPanel.js.map +1 -1
  55. package/dist/panels/ConsolePanel.js +68 -130
  56. package/dist/panels/ConsolePanel.js.map +1 -1
  57. package/dist/panels/CorePanel.js +6 -18
  58. package/dist/panels/CorePanel.js.map +1 -1
  59. package/dist/panels/DropdownFilterPanel.js +109 -165
  60. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  61. package/dist/panels/FileExplorerPanel.js +30 -55
  62. package/dist/panels/FileExplorerPanel.js.map +1 -1
  63. package/dist/panels/FilterSetManager.js +81 -141
  64. package/dist/panels/FilterSetManager.js.map +1 -1
  65. package/dist/panels/FilterSetManagerPanel.js +68 -87
  66. package/dist/panels/FilterSetManagerPanel.js.map +1 -1
  67. package/dist/panels/InputFilterPanel.js +45 -68
  68. package/dist/panels/InputFilterPanel.js.map +1 -1
  69. package/dist/panels/IrisGridPanel.js +197 -272
  70. package/dist/panels/IrisGridPanel.js.map +1 -1
  71. package/dist/panels/IrisGridPanelTooltip.js +1 -3
  72. package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
  73. package/dist/panels/LogPanel.js +6 -13
  74. package/dist/panels/LogPanel.js.map +1 -1
  75. package/dist/panels/MarkdownNotebook.js +28 -50
  76. package/dist/panels/MarkdownNotebook.js.map +1 -1
  77. package/dist/panels/MarkdownPanel.js +19 -38
  78. package/dist/panels/MarkdownPanel.js.map +1 -1
  79. package/dist/panels/NotebookPanel.js +157 -292
  80. package/dist/panels/NotebookPanel.js.map +1 -1
  81. package/dist/panels/PandasPanel.js +5 -15
  82. package/dist/panels/PandasPanel.js.map +1 -1
  83. package/dist/panels/PandasReloadButton.js +1 -3
  84. package/dist/panels/PandasReloadButton.js.map +1 -1
  85. package/dist/panels/WidgetPanel.js +42 -51
  86. package/dist/panels/WidgetPanel.js.map +1 -1
  87. package/dist/panels/WidgetPanelTooltip.js +6 -10
  88. package/dist/panels/WidgetPanelTooltip.js.map +1 -1
  89. package/dist/useConfigureRuff.js +8 -9
  90. package/dist/useConfigureRuff.js.map +1 -1
  91. package/dist/useDashboardColumnFilters.js +4 -7
  92. package/dist/useDashboardColumnFilters.js.map +1 -1
  93. package/dist/useGridLinker.js +9 -16
  94. package/dist/useGridLinker.js.map +1 -1
  95. package/dist/useIrisGridModel.js +18 -3
  96. package/dist/useIrisGridModel.js.map +1 -1
  97. package/dist/useTablePlugin.js +27 -14
  98. package/dist/useTablePlugin.js.map +1 -1
  99. package/package.json +24 -24
@@ -42,9 +42,7 @@ export class MarkdownNotebook extends PureComponent {
42
42
  this.updateHasCode();
43
43
  }
44
44
  updateHasCode() {
45
- var {
46
- hasCode
47
- } = this.state;
45
+ var hasCode = this.state.hasCode;
48
46
  if (this.commands.size === 0 && hasCode) {
49
47
  this.setState({
50
48
  hasCode: false
@@ -73,9 +71,7 @@ export class MarkdownNotebook extends PureComponent {
73
71
  var _this$codeElements$ge, _element$parentElemen;
74
72
  event.preventDefault();
75
73
  event.stopPropagation();
76
- var {
77
- nextStartLine
78
- } = this.state;
74
+ var nextStartLine = this.state.nextStartLine;
79
75
  var keys = [...this.commands.keys()];
80
76
  var keyIndex = keys.findIndex(key => key === nextStartLine || nextStartLine == null);
81
77
  if (keyIndex < 0) {
@@ -88,9 +84,8 @@ export class MarkdownNotebook extends PureComponent {
88
84
  var nextElement = element === null || element === void 0 || (_element$parentElemen = element.parentElement) === null || _element$parentElemen === void 0 ? void 0 : _element$parentElemen.nextElementSibling;
89
85
  if (nextElement != null) {
90
86
  var _this$editorScrollVie;
91
- var {
92
- offsetTop
93
- } = nextElement;
87
+ var _ref = nextElement,
88
+ offsetTop = _ref.offsetTop;
94
89
  var top = offsetTop;
95
90
  (_this$editorScrollVie = this.editorScrollView.current) === null || _this$editorScrollVie === void 0 || _this$editorScrollVie.scroll({
96
91
  top,
@@ -103,36 +98,25 @@ export class MarkdownNotebook extends PureComponent {
103
98
  });
104
99
  }
105
100
  runCode(command) {
106
- var {
107
- onRunCode
108
- } = this.props;
101
+ var onRunCode = this.props.onRunCode;
109
102
  onRunCode(command);
110
103
  this.setState({
111
104
  hasRunCode: true
112
105
  });
113
106
  }
114
107
  renderCodeBlock(props) {
115
- var {
116
- children,
117
- className,
118
- inline,
119
- node
120
- } = props;
121
- var {
122
- hasRunCode,
123
- nextStartLine
124
- } = this.state;
125
- var {
126
- children: nodeChildren,
127
- position
128
- } = node;
108
+ var children = props.children,
109
+ className = props.className,
110
+ inline = props.inline,
111
+ node = props.node;
112
+ var _this$state = this.state,
113
+ hasRunCode = _this$state.hasRunCode,
114
+ nextStartLine = _this$state.nextStartLine;
115
+ var nodeChildren = node.children,
116
+ position = node.position;
129
117
  assertNotNull(position);
130
- var {
131
- start
132
- } = position;
133
- var {
134
- line
135
- } = start;
118
+ var start = position.start;
119
+ var line = start.line;
136
120
  var command = nodeChildren[0].value;
137
121
  var ref = /*#__PURE__*/React.createRef();
138
122
  var isFirstBlock = this.commands.size === 0;
@@ -179,14 +163,10 @@ export class MarkdownNotebook extends PureComponent {
179
163
  });
180
164
  }
181
165
  renderLink(props) {
182
- var {
183
- onLinkClick
184
- } = this.props;
185
- var {
186
- href,
187
- children,
188
- target
189
- } = props;
166
+ var onLinkClick = this.props.onLinkClick;
167
+ var href = props.href,
168
+ children = props.children,
169
+ target = props.target;
190
170
  return /*#__PURE__*/_jsx("a", {
191
171
  href: href,
192
172
  onClick: onLinkClick,
@@ -195,16 +175,14 @@ export class MarkdownNotebook extends PureComponent {
195
175
  });
196
176
  }
197
177
  render() {
198
- var {
199
- content,
200
- transformImageUri,
201
- transformLinkUri
202
- } = this.props;
203
- var {
204
- hasCode,
205
- hasRunCode,
206
- nextStartLine
207
- } = this.state;
178
+ var _this$props = this.props,
179
+ content = _this$props.content,
180
+ transformImageUri = _this$props.transformImageUri,
181
+ transformLinkUri = _this$props.transformLinkUri;
182
+ var _this$state2 = this.state,
183
+ hasCode = _this$state2.hasCode,
184
+ hasRunCode = _this$state2.hasRunCode,
185
+ nextStartLine = _this$state2.nextStartLine;
208
186
  return /*#__PURE__*/_jsxs("div", {
209
187
  className: "markdown-notebook",
210
188
  children: [/*#__PURE__*/_jsx("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownNotebook.js","names":["React","PureComponent","classNames","Markdown","remarkGfm","remarkMath","rehypeMathjax","Button","Code","vsPlay","assertNotNull","jsx","_jsx","jsxs","_jsxs","MarkdownNotebook","constructor","props","_defineProperty","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","_this$codeElements$ge","_element$parentElemen","preventDefault","stopPropagation","keyIndex","startLine","command","get","newNextStartLine","element","current","nextElement","parentElement","nextElementSibling","_this$editorScrollVie","offsetTop","top","scroll","left","runCode","onRunCode","children","className","inline","node","nodeChildren","position","start","value","ref","isFirstBlock","isSelected","language","undefined","startsWith","substring","set","onClick","role","kind","icon","tooltip","Children","map","child","trim","onLinkClick","href","target","render","content","transformImageUri","transformLinkUri","flashing","disabled","components","code","a","linkTarget","remarkPlugins","rehypePlugins","includeElementIndex"],"sources":["../../src/panels/MarkdownNotebook.tsx"],"sourcesContent":["import React, {\n PureComponent,\n type ReactElement,\n type RefObject,\n type MouseEvent,\n type MouseEventHandler,\n} from 'react';\nimport classNames from 'classnames';\nimport Markdown, { type Options } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remarkMath from 'remark-math';\nimport rehypeMathjax from 'rehype-mathjax';\nimport { Button } from '@deephaven/components';\nimport { Code } from '@deephaven/console';\nimport { vsPlay } from '@deephaven/icons';\nimport './MarkdownNotebook.scss';\nimport { type ReactMarkdownProps } from 'react-markdown/lib/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?: Options['transformImageUri'];\n transformLinkUri?: Options['transformLinkUri'];\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, remarkMath]}\n rehypePlugins={[rehypeMathjax]}\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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","ignoreList":[]}
1
+ {"version":3,"file":"MarkdownNotebook.js","names":["React","PureComponent","classNames","Markdown","remarkGfm","remarkMath","rehypeMathjax","Button","Code","vsPlay","assertNotNull","jsx","_jsx","jsxs","_jsxs","MarkdownNotebook","constructor","props","_defineProperty","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","_this$codeElements$ge","_element$parentElemen","preventDefault","stopPropagation","keyIndex","startLine","command","get","newNextStartLine","element","current","nextElement","parentElement","nextElementSibling","_this$editorScrollVie","_ref","offsetTop","top","scroll","left","runCode","onRunCode","children","className","inline","node","_this$state","nodeChildren","position","start","value","ref","isFirstBlock","isSelected","language","undefined","startsWith","substring","set","onClick","role","kind","icon","tooltip","Children","map","child","trim","onLinkClick","href","target","render","_this$props","content","transformImageUri","transformLinkUri","_this$state2","flashing","disabled","components","code","a","linkTarget","remarkPlugins","rehypePlugins","includeElementIndex"],"sources":["../../src/panels/MarkdownNotebook.tsx"],"sourcesContent":["import React, {\n PureComponent,\n type ReactElement,\n type RefObject,\n type MouseEvent,\n type MouseEventHandler,\n} from 'react';\nimport classNames from 'classnames';\nimport Markdown, { type Options } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remarkMath from 'remark-math';\nimport rehypeMathjax from 'rehype-mathjax';\nimport { Button } from '@deephaven/components';\nimport { Code } from '@deephaven/console';\nimport { vsPlay } from '@deephaven/icons';\nimport './MarkdownNotebook.scss';\nimport { type ReactMarkdownProps } from 'react-markdown/lib/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?: Options['transformImageUri'];\n transformLinkUri?: Options['transformLinkUri'];\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, remarkMath]}\n rehypePlugins={[rehypeMathjax]}\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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","ignoreList":[]}
@@ -29,15 +29,11 @@ export class MarkdownPanel extends Component {
29
29
  this.handleEditorInitialized = this.handleEditorInitialized.bind(this);
30
30
  this.handleEditorBlur = this.handleEditorBlur.bind(this);
31
31
  this.handleEditorResize = this.handleEditorResize.bind(this);
32
- var {
33
- panelState
34
- } = props;
32
+ var panelState = props.panelState;
35
33
  var content = null;
36
34
  if (panelState != null && panelState.content != null) {
37
35
  if (panelState.content !== '') {
38
- ({
39
- content
40
- } = panelState);
36
+ content = panelState.content;
41
37
  } else {
42
38
  content = MarkdownUtils.DEFAULT_CONTENT;
43
39
  }
@@ -53,9 +49,7 @@ export class MarkdownPanel extends Component {
53
49
  }
54
50
  setEditorPosition(clickPositionY) {
55
51
  assertNotNull(this.markdownEditor);
56
- var {
57
- container: markdownEditorContainer
58
- } = this.markdownEditor;
52
+ var markdownEditorContainer = this.markdownEditor.container;
59
53
  if (this.editor && markdownEditorContainer != null) {
60
54
  var _this$editor$getModel, _this$editor$getModel2;
61
55
  var contentTop = markdownEditorContainer.getBoundingClientRect().top;
@@ -75,9 +69,7 @@ export class MarkdownPanel extends Component {
75
69
  }
76
70
  }
77
71
  handleContainerDoubleClick(event) {
78
- var {
79
- isEditing
80
- } = this.state;
72
+ var isEditing = this.state.isEditing;
81
73
  var dbClickPositionY = event.clientY;
82
74
  if (!isEditing) {
83
75
  this.setState({
@@ -109,25 +101,20 @@ export class MarkdownPanel extends Component {
109
101
  }
110
102
  handleOpenMarkdown(markdown) {
111
103
  log.debug('open markdown...', markdown);
112
- var {
113
- glContainer,
114
- glEventHub
115
- } = this.props;
104
+ var _this$props = this.props,
105
+ glContainer = _this$props.glContainer,
106
+ glEventHub = _this$props.glEventHub;
116
107
  var config = LayoutUtils.getComponentConfigFromContainer(glContainer);
117
108
  glEventHub.emit(PanelEvent.REOPEN, markdown, config);
118
109
  }
119
110
  handleDeleteMarkdown(markdown) {
120
- var {
121
- glEventHub
122
- } = this.props;
111
+ var glEventHub = this.props.glEventHub;
123
112
  glEventHub.emit(PanelEvent.DELETE, markdown);
124
113
  }
125
114
  handleEditorBlur(event) {
126
115
  var _this$editor;
127
116
  log.debug("markdown content changed, saving...");
128
- var {
129
- isEditing
130
- } = this.state;
117
+ var isEditing = this.state.isEditing;
131
118
 
132
119
  // if not in edit mode, or in edit mode but blur went to an internal monaco field (like search)
133
120
  if (!isEditing || this.markdownEditor != null && this.markdownEditor.container != null && this.markdownEditor.container.contains(event.relatedTarget)) {
@@ -144,24 +131,20 @@ export class MarkdownPanel extends Component {
144
131
  });
145
132
  }
146
133
  handleEditorResize() {
147
- var {
148
- isEditing
149
- } = this.state;
134
+ var isEditing = this.state.isEditing;
150
135
  if (isEditing && this.editor) {
151
136
  this.editor.layout();
152
137
  }
153
138
  }
154
139
  render() {
155
- var {
156
- glContainer,
157
- glEventHub,
158
- closedPanels
159
- } = this.props;
160
- var {
161
- isEditing,
162
- isStartPageShown,
163
- content
164
- } = this.state;
140
+ var _this$props2 = this.props,
141
+ glContainer = _this$props2.glContainer,
142
+ glEventHub = _this$props2.glEventHub,
143
+ closedPanels = _this$props2.closedPanels;
144
+ var _this$state = this.state,
145
+ isEditing = _this$state.isEditing,
146
+ isStartPageShown = _this$state.isStartPageShown,
147
+ content = _this$state.content;
165
148
  var closedMarkdowns = this.getClosedMarkdowns(closedPanels);
166
149
  return /*#__PURE__*/_jsx(Panel, {
167
150
  glContainer: glContainer,
@@ -202,9 +185,7 @@ _defineProperty(MarkdownPanel, "defaultProps", {
202
185
  });
203
186
  _defineProperty(MarkdownPanel, "COMPONENT", 'MarkdownPanel');
204
187
  var mapStateToProps = (state, ownProps) => {
205
- var {
206
- localDashboardId
207
- } = ownProps;
188
+ var localDashboardId = ownProps.localDashboardId;
208
189
  return {
209
190
  closedPanels: getClosedPanelsForDashboard(state, localDashboardId)
210
191
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownPanel.js","names":["React","Component","Suspense","lazy","memoize","connect","getClosedPanelsForDashboard","LayoutUtils","PanelEvent","Log","assertNotNull","LoadingOverlay","Panel","MarkdownContainer","MarkdownStartPage","MarkdownUtils","jsx","_jsx","MarkdownEditor","log","module","MarkdownPanel","constructor","props","_defineProperty","getClosedMarkdowns","handleContainerDoubleClick","bind","handleCreateMarkdown","handleDeleteMarkdown","handleOpenMarkdown","handleEditorInitialized","handleEditorBlur","handleEditorResize","panelState","content","DEFAULT_CONTENT","state","isStartPageShown","closedPanels","length","isEditing","markdownEditor","setEditorPosition","clickPositionY","container","markdownEditorContainer","editor","_this$editor$getModel","_this$editor$getModel2","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","_this$editor","contains","relatedTarget","getValue","layout","render","closedMarkdowns","className","componentPanel","onResize","onBlur","isClonable","isRenamable","children","onCreate","onOpen","onDelete","onDoubleClick","fallback","ref","onEditorInitialized","mapStateToProps","ownProps","localDashboardId","ConnectedMarkdownPanel","forwardRef"],"sources":["../../src/panels/MarkdownPanel.tsx"],"sourcesContent":["import React, {\n Component,\n type FocusEvent,\n type MouseEvent,\n type ReactElement,\n Suspense,\n lazy,\n} from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport {\n type ClosedPanel,\n type DashboardPanelProps,\n getClosedPanelsForDashboard,\n LayoutUtils,\n PanelEvent,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { ReactComponentConfig } from '@deephaven/golden-layout';\nimport type * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport { type RootState } from '@deephaven/redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport Panel from './CorePanel';\nimport MarkdownContainer from '../controls/markdown/MarkdownContainer';\nimport MarkdownStartPage from '../controls/markdown/MarkdownStartPage';\nimport './MarkdownPanel.scss';\nimport type MarkdownEditorType from '../controls/markdown/MarkdownEditor';\nimport MarkdownUtils from '../controls/markdown/MarkdownUtils';\n\nconst MarkdownEditor = lazy(\n () => import('../controls/markdown/MarkdownEditor')\n);\n\nconst log = Log.module('MarkdownPanel');\n\ninterface PanelState {\n content?: string;\n}\n\ninterface MarkdownPanelProps extends DashboardPanelProps {\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 =\n this.handleContainerDoubleClick.bind(this);\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 if (panelState.content !== '') {\n ({ content } = panelState);\n } else {\n content = MarkdownUtils.DEFAULT_CONTENT;\n }\n }\n\n this.state = {\n isStartPageShown:\n content == null &&\n this.getClosedMarkdowns(props.closedPanels).length !== 0,\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: MarkdownEditorType | 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 != null) {\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(MarkdownUtils.getClosedMarkdowns);\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 <Suspense\n fallback={<LoadingOverlay data-testid=\"markdown-panel-loading\" />}\n >\n <MarkdownEditor\n ref={markdownEditor => {\n this.markdownEditor = markdownEditor;\n }}\n isEditing={isEditing}\n content={content ?? MarkdownUtils.DEFAULT_CONTENT}\n onEditorInitialized={this.handleEditorInitialized}\n />\n </Suspense>\n </MarkdownContainer>\n )}\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n): Pick<MarkdownPanelProps, 'closedPanels'> => {\n const { localDashboardId } = ownProps;\n return {\n closedPanels: getClosedPanelsForDashboard(state, localDashboardId),\n };\n};\n\nconst ConnectedMarkdownPanel = connect(mapStateToProps, null, null, {\n forwardRef: true,\n})(MarkdownPanel);\n\nexport default ConnectedMarkdownPanel;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MarkdownPanel.js","names":["React","Component","Suspense","lazy","memoize","connect","getClosedPanelsForDashboard","LayoutUtils","PanelEvent","Log","assertNotNull","LoadingOverlay","Panel","MarkdownContainer","MarkdownStartPage","MarkdownUtils","jsx","_jsx","MarkdownEditor","log","module","MarkdownPanel","constructor","props","_defineProperty","getClosedMarkdowns","handleContainerDoubleClick","bind","handleCreateMarkdown","handleDeleteMarkdown","handleOpenMarkdown","handleEditorInitialized","handleEditorBlur","handleEditorResize","panelState","content","DEFAULT_CONTENT","state","isStartPageShown","closedPanels","length","isEditing","markdownEditor","setEditorPosition","clickPositionY","markdownEditorContainer","container","editor","_this$editor$getModel","_this$editor$getModel2","contentTop","getBoundingClientRect","top","contentScrollTop","scrollTop","contentScrollHeight","scrollHeight","totalLines","getModel","getLineCount","lineToFocus","Math","round","revealLine","setPosition","lineNumber","column","focus","event","dbClickPositionY","clientY","setState","debug","markdown","_this$props","glContainer","glEventHub","config","getComponentConfigFromContainer","emit","REOPEN","DELETE","_this$editor","contains","relatedTarget","getValue","layout","render","_this$props2","_this$state","closedMarkdowns","className","componentPanel","onResize","onBlur","isClonable","isRenamable","children","onCreate","onOpen","onDelete","onDoubleClick","fallback","ref","onEditorInitialized","mapStateToProps","ownProps","localDashboardId","ConnectedMarkdownPanel","forwardRef"],"sources":["../../src/panels/MarkdownPanel.tsx"],"sourcesContent":["import React, {\n Component,\n type FocusEvent,\n type MouseEvent,\n type ReactElement,\n Suspense,\n lazy,\n} from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport {\n type ClosedPanel,\n type DashboardPanelProps,\n getClosedPanelsForDashboard,\n LayoutUtils,\n PanelEvent,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { ReactComponentConfig } from '@deephaven/golden-layout';\nimport type * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport { type RootState } from '@deephaven/redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport Panel from './CorePanel';\nimport MarkdownContainer from '../controls/markdown/MarkdownContainer';\nimport MarkdownStartPage from '../controls/markdown/MarkdownStartPage';\nimport './MarkdownPanel.scss';\nimport type MarkdownEditorType from '../controls/markdown/MarkdownEditor';\nimport MarkdownUtils from '../controls/markdown/MarkdownUtils';\n\nconst MarkdownEditor = lazy(\n () => import('../controls/markdown/MarkdownEditor')\n);\n\nconst log = Log.module('MarkdownPanel');\n\ninterface PanelState {\n content?: string;\n}\n\ninterface MarkdownPanelProps extends DashboardPanelProps {\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 =\n this.handleContainerDoubleClick.bind(this);\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 if (panelState.content !== '') {\n ({ content } = panelState);\n } else {\n content = MarkdownUtils.DEFAULT_CONTENT;\n }\n }\n\n this.state = {\n isStartPageShown:\n content == null &&\n this.getClosedMarkdowns(props.closedPanels).length !== 0,\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: MarkdownEditorType | 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 != null) {\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(MarkdownUtils.getClosedMarkdowns);\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 <Suspense\n fallback={<LoadingOverlay data-testid=\"markdown-panel-loading\" />}\n >\n <MarkdownEditor\n ref={markdownEditor => {\n this.markdownEditor = markdownEditor;\n }}\n isEditing={isEditing}\n content={content ?? MarkdownUtils.DEFAULT_CONTENT}\n onEditorInitialized={this.handleEditorInitialized}\n />\n </Suspense>\n </MarkdownContainer>\n )}\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n): Pick<MarkdownPanelProps, 'closedPanels'> => {\n const { localDashboardId } = ownProps;\n return {\n closedPanels: getClosedPanelsForDashboard(state, localDashboardId),\n };\n};\n\nconst ConnectedMarkdownPanel = connect(mapStateToProps, null, null, {\n forwardRef: true,\n})(MarkdownPanel);\n\nexport default ConnectedMarkdownPanel;\n"],"mappings":"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","ignoreList":[]}