@deephaven/dashboard-core-plugins 1.22.1 → 1.22.2-alpha-pivot-builder.0730ba6.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.
- package/dist/ChartBuilderPlugin.js +8 -15
- package/dist/ChartBuilderPlugin.js.map +1 -1
- package/dist/ChartPanelPlugin.js +13 -6
- package/dist/ChartPanelPlugin.js.map +1 -1
- package/dist/ChartWidgetPlugin.js +11 -4
- package/dist/ChartWidgetPlugin.js.map +1 -1
- package/dist/ConsolePlugin.js +38 -46
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/FilterPlugin.js +63 -44
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/GridPanelPlugin.js +3 -5
- package/dist/GridPanelPlugin.js.map +1 -1
- package/dist/GridWidgetPlugin.d.ts +18 -1
- package/dist/GridWidgetPlugin.d.ts.map +1 -1
- package/dist/GridWidgetPlugin.js +54 -30
- package/dist/GridWidgetPlugin.js.map +1 -1
- package/dist/LinkerPlugin.js +3 -5
- package/dist/LinkerPlugin.js.map +1 -1
- package/dist/MarkdownPlugin.js +18 -17
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/PandasPanelPlugin.js +3 -5
- package/dist/PandasPanelPlugin.js.map +1 -1
- package/dist/PandasWidgetPlugin.js +3 -7
- package/dist/PandasWidgetPlugin.js.map +1 -1
- package/dist/TablePluginWrapper.js +8 -10
- package/dist/TablePluginWrapper.js.map +1 -1
- package/dist/WidgetLoaderPlugin.js +24 -29
- package/dist/WidgetLoaderPlugin.js.map +1 -1
- package/dist/controls/dropdown-filter/DropdownFilter.js +63 -79
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/controls/input-filter/InputFilter.js +32 -58
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/controls/markdown/MarkdownContainer.js +4 -5
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/controls/markdown/MarkdownEditor.js +7 -10
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/controls/markdown/MarkdownStartPage.js +8 -12
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/linker/Linker.js +100 -192
- package/dist/linker/Linker.js.map +1 -1
- package/dist/linker/LinkerLink.js +23 -31
- package/dist/linker/LinkerLink.js.map +1 -1
- package/dist/linker/LinkerOverlayContent.js +65 -66
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/linker/LinkerUtils.js +6 -14
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/panels/ChartColumnSelectorOverlay.js +4 -6
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/panels/ChartFilterOverlay.js +7 -9
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/panels/ChartPanel.js +136 -220
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/panels/ChartPanelUtils.js +3 -4
- package/dist/panels/ChartPanelUtils.js.map +1 -1
- package/dist/panels/CommandHistoryPanel.js +33 -52
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/panels/ConsolePanel.js +68 -130
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/CorePanel.js +6 -18
- package/dist/panels/CorePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.js +109 -165
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/panels/FileExplorerPanel.js +30 -55
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.js +81 -141
- package/dist/panels/FilterSetManager.js.map +1 -1
- package/dist/panels/FilterSetManagerPanel.js +68 -87
- package/dist/panels/FilterSetManagerPanel.js.map +1 -1
- package/dist/panels/InputFilterPanel.js +45 -68
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +28 -6
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +224 -280
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/panels/IrisGridPanelTooltip.js +1 -3
- package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
- package/dist/panels/LogPanel.js +6 -13
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebook.js +28 -50
- package/dist/panels/MarkdownNotebook.js.map +1 -1
- package/dist/panels/MarkdownPanel.js +19 -38
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/panels/NotebookPanel.js +157 -292
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/panels/PandasPanel.js +5 -15
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/panels/PandasReloadButton.js +1 -3
- package/dist/panels/PandasReloadButton.js.map +1 -1
- package/dist/panels/WidgetPanel.js +42 -51
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/panels/WidgetPanelTooltip.js +6 -10
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/useConfigureRuff.js +8 -9
- package/dist/useConfigureRuff.js.map +1 -1
- package/dist/useDashboardColumnFilters.js +4 -7
- package/dist/useDashboardColumnFilters.js.map +1 -1
- package/dist/useGridLinker.js +9 -16
- package/dist/useGridLinker.js.map +1 -1
- package/dist/useIrisGridModel.d.ts +2 -2
- package/dist/useIrisGridModel.d.ts.map +1 -1
- package/dist/useIrisGridModel.js +34 -6
- package/dist/useIrisGridModel.js.map +1 -1
- package/dist/useTablePlugin.js +27 -14
- package/dist/useTablePlugin.js.map +1 -1
- 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
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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
|
-
|
|
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
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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":";;;AAAA,OAAOA,KAAK,IACVC,aAAa,QAKR,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,QAAQ,MAAwB,gBAAgB;AACvD,OAAOC,SAAS,MAAM,YAAY;AAClC,OAAOC,UAAU,MAAM,aAAa;AACpC,OAAOC,aAAa,MAAM,gBAAgB;AAC1C,SAASC,MAAM,QAAQ,uBAAuB;AAC9C,SAASC,IAAI,QAAQ,oBAAoB;AACzC,SAASC,MAAM,QAAQ,kBAAkB;AAAC;AAG1C,SAASC,aAAa,QAAQ,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAoBjD,OAAO,MAAMC,gBAAgB,SAASd,aAAa,CAGjD;EAKAe,WAAWA,CAACC,KAA4B,EAAE;IACxC,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAEb,IAAI,CAACC,iBAAiB,GAAG,IAAI,CAACA,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACC,eAAe,GAAG,IAAI,CAACA,eAAe,CAACD,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACE,UAAU,GAAG,IAAI,CAACA,UAAU,CAACF,IAAI,CAAC,IAAI,CAAC;;IAE5C;IACA,IAAI,CAACG,QAAQ,GAAG,IAAIC,GAAG,CAAC,CAAC;IACzB,IAAI,CAACC,YAAY,GAAG,IAAID,GAAG,CAAC,CAAC;IAC7B,IAAI,CAACE,gBAAgB,gBAAG1B,KAAK,CAAC2B,SAAS,CAAC,CAAC;IAEzC,IAAI,CAACC,KAAK,GAAG;MACXC,OAAO,EAAE,KAAK;MAEd;MACAC,UAAU,EAAE,KAAK;MAEjB;MACAC,aAAa,EAAE;IACjB,CAAC;EACH;EAEAC,iBAAiBA,CAAA,EAAS;IACxB,IAAI,CAACC,aAAa,CAAC,CAAC;EACtB;EAEAC,kBAAkBA,CAAA,EAAS;IACzB,IAAI,CAACD,aAAa,CAAC,CAAC;EACtB;EAQAA,aAAaA,CAAA,EAAS;IACpB,IAAM;MAAEJ;IAAQ,CAAC,GAAG,IAAI,CAACD,KAAK;IAC9B,IAAI,IAAI,CAACL,QAAQ,CAACY,IAAI,KAAK,CAAC,IAAIN,OAAO,EAAE;MACvC,IAAI,CAACO,QAAQ,CAAC;QAAEP,OAAO,EAAE;MAAM,CAAC,CAAC;IACnC,CAAC,MAAM,IAAI,IAAI,CAACN,QAAQ,CAACY,IAAI,GAAG,CAAC,IAAI,CAACN,OAAO,EAAE;MAC7C,IAAI,CAACO,QAAQ,CAAC;QAAEP,OAAO,EAAE;MAAK,CAAC,CAAC;IAClC;EACF;;EAEA;AACF;AACA;AACA;EACEQ,gBAAgBA,CAACC,IAAmB,EAAiB;IACnD,IAAMC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAChB,QAAQ,CAACgB,IAAI,CAAC,CAAC,CAAC;IACtC,IAAMC,SAAS,GAAGD,IAAI,CAACE,SAAS,CAACC,GAAG,IAAIA,GAAG,KAAKJ,IAAI,CAAC,GAAG,CAAC;IACzD,IAAIE,SAAS,IAAID,IAAI,CAACI,MAAM,EAAE;MAC5B;MACA,OAAO,IAAI;IACb;IAEA,OAAOJ,IAAI,CAACC,SAAS,CAAC;EACxB;EAEArB,iBAAiBA,CAACyB,KAAoC,EAAQ;IAAA,IAAAC,qBAAA,EAAAC,qBAAA;IAC5DF,KAAK,CAACG,cAAc,CAAC,CAAC;IACtBH,KAAK,CAACI,eAAe,CAAC,CAAC;IAEvB,IAAM;MAAEjB;IAAc,CAAC,GAAG,IAAI,CAACH,KAAK;IACpC,IAAMW,IAAI,GAAG,CAAC,GAAG,IAAI,CAAChB,QAAQ,CAACgB,IAAI,CAAC,CAAC,CAAC;IACtC,IAAMU,QAAQ,GAAGV,IAAI,CAACE,SAAS,CAC7BC,GAAG,IAAIA,GAAG,KAAKX,aAAa,IAAIA,aAAa,IAAI,IACnD,CAAC;IACD,IAAIkB,QAAQ,GAAG,CAAC,EAAE;MAChB;IACF;IACA,IAAMC,SAAS,GAAGX,IAAI,CAACU,QAAQ,CAAC;IAChC,IAAME,OAAO,GAAG,IAAI,CAAC5B,QAAQ,CAAC6B,GAAG,CAACF,SAAS,CAAC;IAC5C,IAAMG,gBAAgB,GAAG,IAAI,CAAChB,gBAAgB,CAACa,SAAS,CAAC;IACzD,IAAMI,OAAO,IAAAT,qBAAA,GAAG,IAAI,CAACpB,YAAY,CAAC2B,GAAG,CAACF,SAAS,CAAC,cAAAL,qBAAA,uBAAhCA,qBAAA,CAAkCU,OAAO;IACzD,IAAMC,WAAW,GAAGF,OAAO,aAAPA,OAAO,gBAAAR,qBAAA,GAAPQ,OAAO,CAAEG,aAAa,cAAAX,qBAAA,uBAAtBA,qBAAA,CAAwBY,kBAAkB;IAC9D,IAAIF,WAAW,IAAI,IAAI,EAAE;MAAA,IAAAG,qBAAA;MACvB,IAAM;QAAEC;MAAU,CAAC,GAAGJ,WAA0B;MAChD,IAAMK,GAAG,GAAGD,SAAS;MACrB,CAAAD,qBAAA,OAAI,CAACjC,gBAAgB,CAAC6B,OAAO,cAAAI,qBAAA,eAA7BA,qBAAA,CAA+BG,MAAM,CAAC;QACpCD,GAAG;QACHE,IAAI,EAAE;MACR,CAAC,CAAC;IACJ;IAEA,IAAI,CAACC,OAAO,CAACb,OAAO,CAAC;IACrB,IAAI,CAACf,QAAQ,CAAC;MAAEL,aAAa,EAAEsB;IAAiB,CAAC,CAAC;EACpD;EAEAW,OAAOA,CAACb,OAAgB,EAAQ;IAC9B,IAAM;MAAEc;IAAU,CAAC,GAAG,IAAI,CAAChD,KAAK;IAChCgD,SAAS,CAACd,OAAO,CAAC;IAElB,IAAI,CAACf,QAAQ,CAAC;MAAEN,UAAU,EAAE;IAAK,CAAC,CAAC;EACrC;EAEAT,eAAeA,CACbJ,KAGG,EACW;IACd,IAAM;MAAEiD,QAAQ;MAAEC,SAAS;MAAEC,MAAM;MAAEC;IAAK,CAAC,GAAGpD,KAAK;IACnD,IAAM;MAAEa,UAAU;MAAEC;IAAc,CAAC,GAAG,IAAI,CAACH,KAAK;IAChD,IAAM;MAAEsC,QAAQ,EAAEI,YAAY;MAAEC;IAAS,CAAC,GAAGF,IAAI;IACjD3D,aAAa,CAAC6D,QAAQ,CAAC;IACvB,IAAM;MAAEC;IAAM,CAAC,GAAGD,QAAQ;IAC1B,IAAM;MAAEjC;IAAK,CAAC,GAAGkC,KAAK;IACtB,IAAMrB,OAAO,GAAImB,YAAY,CAAC,CAAC,CAAC,CAAuBG,KAAK;IAC5D,IAAMC,GAAG,gBAAG1E,KAAK,CAAC2B,SAAS,CAAiB,CAAC;IAC7C,IAAMgD,YAAY,GAAG,IAAI,CAACpD,QAAQ,CAACY,IAAI,KAAK,CAAC;IAC7C,IAAMyC,UAAU,GACd7C,aAAa,KAAKO,IAAI,IACrBqC,YAAY,IAAI5C,aAAa,IAAI,IAAI,IAAI,CAACD,UAAW;IACxD,IAAM+C,QAAQ,GACZV,SAAS,KAAKW,SAAS,IAAIX,SAAS,CAACY,UAAU,CAAC,WAAW,CAAC,GACxDZ,SAAS,CAACa,SAAS,CAAC,CAAC,CAAC,GACtB,WAAW;IAEjB,IAAIZ,MAAM,IAAI,IAAI,IAAIA,MAAM,EAAE;MAC5B,oBAAOxD,IAAA;QAAMuD,SAAS,EAAEA,SAAU;QAAAD,QAAA,EAAEA;MAAQ,CAAO,CAAC;IACtD;IAEA,IAAI,CAAC3C,QAAQ,CAAC0D,GAAG,CAAC3C,IAAI,EAAEa,OAAO,CAAC;IAChC,IAAI,CAAC1B,YAAY,CAACwD,GAAG,CAAC3C,IAAI,EAAEoC,GAAG,CAAC;IAEhC,oBACE5D,KAAA;MACEqD,SAAS,EAAEjE,UAAU,CAAC,8BAA8B,EAAE;QACpD,aAAa,EAAE0E;MACjB,CAAC,CAAE;MACHF,GAAG,EAAEA,GAAI;MACTQ,OAAO,EAAEA,CAAA,KAAM;QACb,IAAI,CAAC9C,QAAQ,CAAC;UAAEL,aAAa,EAAEO;QAAK,CAAC,CAAC;MACxC,CAAE;MACF6C,IAAI,EAAC,cAAc;MAAAjB,QAAA,gBAEnBtD,IAAA,CAACL,MAAM;QACL6E,IAAI,EAAC,OAAO;QACZC,IAAI,EAAE5E,MAAO;QACb0D,SAAS,EAAC,gBAAgB;QAC1Be,OAAO,EAAEtC,KAAK,IAAI;UAChBA,KAAK,CAACI,eAAe,CAAC,CAAC;UACvBJ,KAAK,CAACG,cAAc,CAAC,CAAC;UAEtB,IAAI,CAACiB,OAAO,CAACb,OAAO,CAAC;UACrB,IAAI,CAACf,QAAQ,CAAC;YAAEL,aAAa,EAAEO;UAAK,CAAC,CAAC;QACxC,CAAE;QACFgD,OAAO,EAAC;MAAU,CACnB,CAAC,eACF1E,IAAA;QAAAsD,QAAA,eACEtD,IAAA,CAACJ,IAAI;UAACqE,QAAQ,EAAEA,QAAS;UAAAX,QAAA,EACtBlE,KAAK,CAACuF,QAAQ,CAACC,GAAG,CAACtB,QAAQ,EAAEuB,KAAK,IACjC,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,CAACC,IAAI,CAAC,CAAC,GAAGD,KAC7C;QAAC,CACG;MAAC,CACH,CAAC;IAAA,CACJ,CAAC;EAEV;EAEAnE,UAAUA,CACRL,KAEoB,EACN;IACd,IAAM;MAAE0E;IAAY,CAAC,GAAG,IAAI,CAAC1E,KAAK;IAClC,IAAM;MAAE2E,IAAI;MAAE1B,QAAQ;MAAE2B;IAAO,CAAC,GAAG5E,KAAK;IACxC,oBACEL,IAAA;MAAGgF,IAAI,EAAEA,IAAK;MAACV,OAAO,EAAES,WAAY;MAACE,MAAM,EAAEA,MAAO;MAAA3B,QAAA,EACjDA;IAAQ,CACR,CAAC;EAER;EAEA4B,MAAMA,CAAA,EAAiB;IACrB,IAAM;MAAEC,OAAO;MAAEC,iBAAiB;MAAEC;IAAiB,CAAC,GAAG,IAAI,CAAChF,KAAK;IACnE,IAAM;MAAEY,OAAO;MAAEC,UAAU;MAAEC;IAAc,CAAC,GAAG,IAAI,CAACH,KAAK;IACzD,oBACEd,KAAA;MAAKqD,SAAS,EAAC,mBAAmB;MAAAD,QAAA,gBAChCtD,IAAA;QAAKuD,SAAS,EAAC,2BAA2B;QAAAD,QAAA,eACxCtD,IAAA,CAACL,MAAM;UACL4D,SAAS,EAAEjE,UAAU,CAAC,wBAAwB,EAAE;YAC9CgG,QAAQ,EAAErE,OAAO,IAAI,CAACC;UACxB,CAAC,CAAE;UACHsD,IAAI,EAAC,OAAO;UACZC,IAAI,EAAE5E,MAAO;UACbyE,OAAO,EAAE,IAAI,CAAC/D,iBAAkB;UAChCmE,OAAO,EAAC,0BAA0B;UAClCa,QAAQ,EAAGrE,UAAU,IAAIC,aAAa,IAAI,IAAI,IAAK,CAACF,OAAQ;UAAAqC,QAAA,EAC7D;QAED,CAAQ;MAAC,CACN,CAAC,eACNtD,IAAA;QAAKuD,SAAS,EAAC,2BAA2B;QAACO,GAAG,EAAE,IAAI,CAAChD,gBAAiB;QAAAwC,QAAA,eACpEtD,IAAA,CAACT,QAAQ;UACPiG,UAAU,EAAE;YAAEC,IAAI,EAAE,IAAI,CAAChF,eAAe;YAAEiF,CAAC,EAAE,IAAI,CAAChF;UAAW,CAAE;UAC/DiF,UAAU,EAAC,QAAQ;UACnBC,aAAa,EAAE,CAACpG,SAAS,EAAEC,UAAU,CAAE;UACvCoG,aAAa,EAAE,CAACnG,aAAa,CAAE;UAC/B2F,gBAAgB,EAAEA,gBAAiB;UACnCD,iBAAiB,EAAEA,iBAAkB;UACrCU,mBAAmB;UAAAxC,QAAA,EAElB6B;QAAO,CACA;MAAC,CACR,CAAC;IAAA,CACH,CAAC;EAEV;AACF;AAAC7E,eAAA,CA5NYH,gBAAgB,kBAIL;EACpBkD,SAAS,EAAEA,CAAA,KAAYa;AACzB,CAAC;AAwNH,eAAe/D,gBAAgB","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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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":[]}
|