@deephaven/dashboard-core-plugins 0.6.1-markdownnotebooks.7 → 0.6.3-bard.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ConsolePlugin.d.ts.map +1 -1
- package/dist/ConsolePlugin.js +5 -11
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/controls/ControlType.d.ts +0 -1
- package/dist/controls/ControlType.d.ts.map +1 -1
- package/dist/controls/ControlType.js +0 -2
- package/dist/controls/ControlType.js.map +1 -1
- package/dist/events/index.d.ts +0 -1
- package/dist/events/index.js +0 -1
- package/dist/events/index.js.map +1 -1
- package/dist/linker/Linker.d.ts +13 -13
- package/dist/linker/Linker.d.ts.map +1 -1
- package/dist/linker/Linker.js +5 -6
- package/dist/linker/Linker.js.map +1 -1
- package/dist/panels/ConsolePanel.d.ts.map +1 -1
- package/dist/panels/ConsolePanel.js +3 -3
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/panels/DropdownFilterPanel.d.ts +1 -1
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/IrisGridPanel.d.ts +9 -3
- package/dist/panels/IrisGridPanel.d.ts.map +1 -1
- package/dist/panels/IrisGridPanel.js +40 -11
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/redux/reducers/sessionWrapper.d.ts +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +17 -17
- package/dist/events/ControlEvent.d.ts +0 -5
- package/dist/events/ControlEvent.d.ts.map +0 -1
- package/dist/events/ControlEvent.js +0 -8
- package/dist/events/ControlEvent.js.map +0 -1
- package/dist/panels/MarkdownNotebookContainer.d.ts +0 -21
- package/dist/panels/MarkdownNotebookContainer.d.ts.map +0 -1
- package/dist/panels/MarkdownNotebookContainer.js +0 -35
- package/dist/panels/MarkdownNotebookContainer.js.map +0 -1
- package/dist/panels/MarkdownNotebookEditor.d.ts +0 -46
- package/dist/panels/MarkdownNotebookEditor.d.ts.map +0 -1
- package/dist/panels/MarkdownNotebookEditor.js +0 -257
- package/dist/panels/MarkdownNotebookEditor.js.map +0 -1
- package/dist/panels/MarkdownNotebookPanel.css +0 -127
- package/dist/panels/MarkdownNotebookPanel.css.map +0 -1
- package/dist/panels/MarkdownNotebookPanel.d.ts +0 -91
- package/dist/panels/MarkdownNotebookPanel.d.ts.map +0 -1
- package/dist/panels/MarkdownNotebookPanel.js +0 -446
- package/dist/panels/MarkdownNotebookPanel.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/dashboard-core-plugins",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3-bard.1+efeb75a",
|
|
4
4
|
"description": "Deephaven Dashboard Core Plugins",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"build-dev": "cross-env NODE_ENV=development run-s clean build-steps",
|
|
21
21
|
"build-steps": "run-p build:*",
|
|
22
22
|
"babel": "babel ./src --out-dir ./dist --extensions \".ts,.tsx,.js,.jsx\" --source-maps --root-mode upward",
|
|
23
|
-
"sass": "sass
|
|
23
|
+
"sass": "sass ./src:./dist",
|
|
24
24
|
"types": "tsc",
|
|
25
25
|
"build:babel": "npm run babel",
|
|
26
26
|
"build:sass": "npm run sass",
|
|
@@ -34,15 +34,15 @@
|
|
|
34
34
|
"start": "cross-env NODE_ENV=development npm run watch"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@deephaven/chart": "^0.6.
|
|
38
|
-
"@deephaven/console": "^0.6.
|
|
39
|
-
"@deephaven/dashboard": "^0.6.
|
|
40
|
-
"@deephaven/file-explorer": "^0.6.
|
|
41
|
-
"@deephaven/golden-layout": "^0.6.
|
|
42
|
-
"@deephaven/icons": "^0.6.
|
|
43
|
-
"@deephaven/iris-grid": "^0.6.
|
|
44
|
-
"@deephaven/jsapi-shim": "^0.6.
|
|
45
|
-
"@deephaven/utils": "^0.6.
|
|
37
|
+
"@deephaven/chart": "^0.6.3-bard.1+efeb75a",
|
|
38
|
+
"@deephaven/console": "^0.6.3-bard.1+efeb75a",
|
|
39
|
+
"@deephaven/dashboard": "^0.6.3-bard.1+efeb75a",
|
|
40
|
+
"@deephaven/file-explorer": "^0.6.3-bard.1+efeb75a",
|
|
41
|
+
"@deephaven/golden-layout": "^0.6.3-bard.1+efeb75a",
|
|
42
|
+
"@deephaven/icons": "^0.6.3-bard.1+efeb75a",
|
|
43
|
+
"@deephaven/iris-grid": "^0.6.3-bard.1+efeb75a",
|
|
44
|
+
"@deephaven/jsapi-shim": "^0.6.3-bard.1+efeb75a",
|
|
45
|
+
"@deephaven/utils": "^0.6.3-bard.1+efeb75a",
|
|
46
46
|
"@fortawesome/react-fontawesome": "^0.1.12",
|
|
47
47
|
"classnames": "^2.3.1",
|
|
48
48
|
"deep-equal": "^2.0.4",
|
|
@@ -66,11 +66,11 @@
|
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@babel/cli": "^7.14.8",
|
|
69
|
-
"@deephaven/components": "^0.6.
|
|
70
|
-
"@deephaven/log": "^0.6.
|
|
71
|
-
"@deephaven/mocks": "^0.6.
|
|
72
|
-
"@deephaven/redux": "^0.6.
|
|
73
|
-
"@deephaven/tsconfig": "^0.6.
|
|
69
|
+
"@deephaven/components": "^0.6.3-bard.1+efeb75a",
|
|
70
|
+
"@deephaven/log": "^0.6.3-bard.1+efeb75a",
|
|
71
|
+
"@deephaven/mocks": "^0.6.3-bard.1+efeb75a",
|
|
72
|
+
"@deephaven/redux": "^0.6.3-bard.1+efeb75a",
|
|
73
|
+
"@deephaven/tsconfig": "^0.6.3-bard.1+efeb75a",
|
|
74
74
|
"@storybook/addon-actions": "^6.2.3",
|
|
75
75
|
"@storybook/addon-essentials": "^6.2.3",
|
|
76
76
|
"@storybook/addon-links": "^6.2.3",
|
|
@@ -92,5 +92,5 @@
|
|
|
92
92
|
"publishConfig": {
|
|
93
93
|
"access": "public"
|
|
94
94
|
},
|
|
95
|
-
"gitHead": "
|
|
95
|
+
"gitHead": "efeb75ac28c37ccf3fa966286a3535ebcaae071a"
|
|
96
96
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ControlEvent.d.ts","sourceRoot":"","sources":["../../src/events/ControlEvent.js"],"names":[],"mappings":";AAAA;IACE,qBAAoC;CACrC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
|
-
class ControlEvent {}
|
|
4
|
-
|
|
5
|
-
_defineProperty(ControlEvent, "CLOSE", 'ControlEvent.CLOSE');
|
|
6
|
-
|
|
7
|
-
export default ControlEvent;
|
|
8
|
-
//# sourceMappingURL=ControlEvent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/events/ControlEvent.js"],"names":["ControlEvent"],"mappings":";;AAAA,MAAMA,YAAN,CAAmB;;gBAAbA,Y,WACW,oB;;AAGjB,eAAeA,YAAf","sourcesContent":["class ControlEvent {\n static CLOSE = 'ControlEvent.CLOSE';\n}\n\nexport default ControlEvent;\n"],"file":"ControlEvent.js"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
declare class MarkdownNotebookContainer extends React.PureComponent<any, any, any> {
|
|
2
|
-
constructor(props: any);
|
|
3
|
-
constructor(props: any, context: any);
|
|
4
|
-
}
|
|
5
|
-
declare namespace MarkdownNotebookContainer {
|
|
6
|
-
namespace propTypes {
|
|
7
|
-
const onDoubleClick: PropTypes.Requireable<(...args: any[]) => any>;
|
|
8
|
-
const children: PropTypes.Validator<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
|
|
9
|
-
const isEditing: PropTypes.Requireable<boolean>;
|
|
10
|
-
}
|
|
11
|
-
namespace defaultProps {
|
|
12
|
-
const isEditing_1: boolean;
|
|
13
|
-
export { isEditing_1 as isEditing };
|
|
14
|
-
const onDoubleClick_1: null;
|
|
15
|
-
export { onDoubleClick_1 as onDoubleClick };
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
export default MarkdownNotebookContainer;
|
|
19
|
-
import React from "react";
|
|
20
|
-
import PropTypes from "prop-types";
|
|
21
|
-
//# sourceMappingURL=MarkdownNotebookContainer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownNotebookContainer.d.ts","sourceRoot":"","sources":["../../src/panels/MarkdownNotebookContainer.jsx"],"names":[],"mappings":"AAMA;IAoCi4kB,wBAA8C;IAAA,sCAAyJ;CAZvklB"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import React, { PureComponent } from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
import classNames from 'classnames';
|
|
4
|
-
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
5
|
-
import { vsEdit } from '@deephaven/icons';
|
|
6
|
-
export default class MarkdownNotebookContainer extends PureComponent {
|
|
7
|
-
render() {
|
|
8
|
-
var {
|
|
9
|
-
isEditing,
|
|
10
|
-
children,
|
|
11
|
-
onDoubleClick
|
|
12
|
-
} = this.props;
|
|
13
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
14
|
-
className: "markdown-notebook-container h-100 w-100",
|
|
15
|
-
onDoubleClick: onDoubleClick
|
|
16
|
-
}, onDoubleClick && /*#__PURE__*/React.createElement("div", {
|
|
17
|
-
className: classNames('text-muted', 'edit-hint', {
|
|
18
|
-
viewing: !isEditing
|
|
19
|
-
})
|
|
20
|
-
}, /*#__PURE__*/React.createElement("span", null, "double-click to edit ", /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
21
|
-
icon: vsEdit
|
|
22
|
-
}))), children);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
MarkdownNotebookContainer.propTypes = {
|
|
27
|
-
onDoubleClick: PropTypes.func,
|
|
28
|
-
children: PropTypes.node.isRequired,
|
|
29
|
-
isEditing: PropTypes.bool
|
|
30
|
-
};
|
|
31
|
-
MarkdownNotebookContainer.defaultProps = {
|
|
32
|
-
isEditing: false,
|
|
33
|
-
onDoubleClick: null
|
|
34
|
-
};
|
|
35
|
-
//# sourceMappingURL=MarkdownNotebookContainer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/panels/MarkdownNotebookContainer.jsx"],"names":["React","PureComponent","PropTypes","classNames","FontAwesomeIcon","vsEdit","MarkdownNotebookContainer","render","isEditing","children","onDoubleClick","props","viewing","propTypes","func","node","isRequired","bool","defaultProps"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,MAAT,QAAuB,kBAAvB;AAEA,eAAe,MAAMC,yBAAN,SAAwCL,aAAxC,CAAsD;AACnEM,EAAAA,MAAM,GAAG;AACP,QAAM;AAAEC,MAAAA,SAAF;AAAaC,MAAAA,QAAb;AAAuBC,MAAAA;AAAvB,QAAyC,KAAKC,KAApD;AAEA,wBACE;AACE,MAAA,SAAS,EAAC,yCADZ;AAEE,MAAA,aAAa,EAAED;AAFjB,OAIGA,aAAa,iBACZ;AACE,MAAA,SAAS,EAAEP,UAAU,CAAC,YAAD,EAAe,WAAf,EAA4B;AAC/CS,QAAAA,OAAO,EAAE,CAACJ;AADqC,OAA5B;AADvB,oBAKE,wEACuB,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAEH;AAAvB,MADvB,CALF,CALJ,EAeGI,QAfH,CADF;AAmBD;;AAvBkE;AA0BrEH,yBAAyB,CAACO,SAA1B,GAAsC;AACpCH,EAAAA,aAAa,EAAER,SAAS,CAACY,IADW;AAEpCL,EAAAA,QAAQ,EAAEP,SAAS,CAACa,IAAV,CAAeC,UAFW;AAGpCR,EAAAA,SAAS,EAAEN,SAAS,CAACe;AAHe,CAAtC;AAMAX,yBAAyB,CAACY,YAA1B,GAAyC;AACvCV,EAAAA,SAAS,EAAE,KAD4B;AAEvCE,EAAAA,aAAa,EAAE;AAFwB,CAAzC","sourcesContent":["import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsEdit } from '@deephaven/icons';\n\nexport default class MarkdownNotebookContainer extends PureComponent {\n render() {\n const { isEditing, children, onDoubleClick } = this.props;\n\n return (\n <div\n className=\"markdown-notebook-container h-100 w-100\"\n onDoubleClick={onDoubleClick}\n >\n {onDoubleClick && (\n <div\n className={classNames('text-muted', 'edit-hint', {\n viewing: !isEditing,\n })}\n >\n <span>\n double-click to edit <FontAwesomeIcon icon={vsEdit} />\n </span>\n </div>\n )}\n {children}\n </div>\n );\n }\n}\n\nMarkdownNotebookContainer.propTypes = {\n onDoubleClick: PropTypes.func,\n children: PropTypes.node.isRequired,\n isEditing: PropTypes.bool,\n};\n\nMarkdownNotebookContainer.defaultProps = {\n isEditing: false,\n onDoubleClick: null,\n};\n"],"file":"MarkdownNotebookContainer.js"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
declare class MarkdownNotebookEditor extends React.PureComponent<any, any, any> {
|
|
2
|
-
constructor(props: any);
|
|
3
|
-
handleRunSelected(event: any): void;
|
|
4
|
-
renderCodeBlock(props: any): JSX.Element;
|
|
5
|
-
renderLink(props: any): JSX.Element;
|
|
6
|
-
container: HTMLDivElement | null;
|
|
7
|
-
commands: Map<any, any>;
|
|
8
|
-
codeElements: Map<any, any>;
|
|
9
|
-
editorScrollView: React.RefObject<any>;
|
|
10
|
-
resetBlocks(): void;
|
|
11
|
-
/**
|
|
12
|
-
* @param {number|null} line The line of the code block to start from
|
|
13
|
-
* @returns {number} The next line of the code block to start from
|
|
14
|
-
*/
|
|
15
|
-
getNextStartLine(line: number | null): number;
|
|
16
|
-
runCode(command: any): void;
|
|
17
|
-
}
|
|
18
|
-
declare namespace MarkdownNotebookEditor {
|
|
19
|
-
namespace propTypes {
|
|
20
|
-
const isEditing: PropTypes.Requireable<boolean>;
|
|
21
|
-
const onRunCode: PropTypes.Requireable<(...args: any[]) => any>;
|
|
22
|
-
const content: PropTypes.Requireable<string>;
|
|
23
|
-
const onEditorInitialized: PropTypes.Validator<(...args: any[]) => any>;
|
|
24
|
-
const onLinkClick: PropTypes.Requireable<(...args: any[]) => any>;
|
|
25
|
-
const transformImageUri: PropTypes.Requireable<(...args: any[]) => any>;
|
|
26
|
-
const transformLinkUri: PropTypes.Requireable<(...args: any[]) => any>;
|
|
27
|
-
}
|
|
28
|
-
namespace defaultProps {
|
|
29
|
-
const isEditing_1: boolean;
|
|
30
|
-
export { isEditing_1 as isEditing };
|
|
31
|
-
const content_1: string;
|
|
32
|
-
export { content_1 as content };
|
|
33
|
-
const onLinkClick_1: undefined;
|
|
34
|
-
export { onLinkClick_1 as onLinkClick };
|
|
35
|
-
export function onRunCode_1(): void;
|
|
36
|
-
export { onRunCode_1 as onRunCode };
|
|
37
|
-
const transformImageUri_1: undefined;
|
|
38
|
-
export { transformImageUri_1 as transformImageUri };
|
|
39
|
-
const transformLinkUri_1: undefined;
|
|
40
|
-
export { transformLinkUri_1 as transformLinkUri };
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
export default MarkdownNotebookEditor;
|
|
44
|
-
import React from "react";
|
|
45
|
-
import PropTypes from "prop-types";
|
|
46
|
-
//# sourceMappingURL=MarkdownNotebookEditor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownNotebookEditor.d.ts","sourceRoot":"","sources":["../../src/panels/MarkdownNotebookEditor.jsx"],"names":[],"mappings":"AASA;IACE,wBAqBC;IA8BD,oCA4BC;IASD,yCAwDC;IAGD,oCAIC;IAhJC,iCAAqB;IAGrB,wBAAyB;IACzB,4BAA6B;IAC7B,uCAAyC;IAkB3C,oBAIC;IAED;;;OAGG;IACH,uBAHW,MAAM,GAAC,IAAI,GACT,MAAM,CAWlB;IAgCD,4BAKC;CA2HF;;;;;;;;;;;;;;;;;;QAgBY,oCAAQ"}
|
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
-
|
|
3
|
-
import React, { PureComponent } from 'react';
|
|
4
|
-
import PropTypes from 'prop-types';
|
|
5
|
-
import Markdown from 'react-markdown';
|
|
6
|
-
import { Button } from '@deephaven/components';
|
|
7
|
-
import { Code, Editor } from '@deephaven/console';
|
|
8
|
-
import classNames from 'classnames';
|
|
9
|
-
import { vsPlay } from '@deephaven/icons';
|
|
10
|
-
import remarkGfm from 'remark-gfm';
|
|
11
|
-
export default class MarkdownNotebookEditor extends PureComponent {
|
|
12
|
-
constructor(props) {
|
|
13
|
-
super(props);
|
|
14
|
-
this.handleRunSelected = this.handleRunSelected.bind(this);
|
|
15
|
-
this.renderCodeBlock = this.renderCodeBlock.bind(this);
|
|
16
|
-
this.renderLink = this.renderLink.bind(this);
|
|
17
|
-
this.container = null; // Map of each code block from it's starting line number to the code within that block
|
|
18
|
-
|
|
19
|
-
this.commands = new Map();
|
|
20
|
-
this.codeElements = new Map();
|
|
21
|
-
this.editorScrollView = /*#__PURE__*/React.createRef();
|
|
22
|
-
this.state = {
|
|
23
|
-
// Keep track if any code has been executed yet. If not, make the run button flash
|
|
24
|
-
hasRunCode: false,
|
|
25
|
-
// Line of the next block to execute. Null to start at the first block
|
|
26
|
-
nextStartLine: null
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
componentDidUpdate(prevProps) {
|
|
31
|
-
var {
|
|
32
|
-
content
|
|
33
|
-
} = this.props;
|
|
34
|
-
|
|
35
|
-
if (prevProps.content !== content) {
|
|
36
|
-
this.resetBlocks();
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
resetBlocks() {
|
|
41
|
-
this.codeElements.clear();
|
|
42
|
-
this.commands.clear();
|
|
43
|
-
this.setState({
|
|
44
|
-
nextStartLine: null
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* @param {number|null} line The line of the code block to start from
|
|
49
|
-
* @returns {number} The next line of the code block to start from
|
|
50
|
-
*/
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
getNextStartLine(line) {
|
|
54
|
-
var keys = [...this.commands.keys()];
|
|
55
|
-
var nextIndex = keys.findIndex(key => key === line) + 1;
|
|
56
|
-
|
|
57
|
-
if (nextIndex >= keys.length) {
|
|
58
|
-
// We got to the last block, disable
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return keys[nextIndex];
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
handleRunSelected(event) {
|
|
66
|
-
var _this$codeElements$ge, _element$parentElemen;
|
|
67
|
-
|
|
68
|
-
event.preventDefault();
|
|
69
|
-
event.stopPropagation();
|
|
70
|
-
var {
|
|
71
|
-
nextStartLine
|
|
72
|
-
} = this.state;
|
|
73
|
-
var keys = [...this.commands.keys()];
|
|
74
|
-
var keyIndex = keys.findIndex(key => key === nextStartLine || nextStartLine == null);
|
|
75
|
-
|
|
76
|
-
if (keyIndex < 0) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
var startLine = keys[keyIndex];
|
|
81
|
-
var command = this.commands.get(startLine);
|
|
82
|
-
var newNextStartLine = this.getNextStartLine(startLine);
|
|
83
|
-
var element = (_this$codeElements$ge = this.codeElements.get(startLine)) === null || _this$codeElements$ge === void 0 ? void 0 : _this$codeElements$ge.current;
|
|
84
|
-
var nextElement = element === null || element === void 0 ? void 0 : (_element$parentElemen = element.parentElement) === null || _element$parentElemen === void 0 ? void 0 : _element$parentElemen.nextElementSibling;
|
|
85
|
-
|
|
86
|
-
if (nextElement) {
|
|
87
|
-
var {
|
|
88
|
-
offsetTop
|
|
89
|
-
} = nextElement;
|
|
90
|
-
var top = offsetTop;
|
|
91
|
-
this.editorScrollView.current.scroll({
|
|
92
|
-
top,
|
|
93
|
-
left: 0
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
this.runCode(command);
|
|
98
|
-
this.setState({
|
|
99
|
-
nextStartLine: newNextStartLine
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
runCode(command) {
|
|
104
|
-
var {
|
|
105
|
-
onRunCode
|
|
106
|
-
} = this.props;
|
|
107
|
-
onRunCode(command);
|
|
108
|
-
this.setState({
|
|
109
|
-
hasRunCode: true
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
renderCodeBlock(props) {
|
|
114
|
-
var {
|
|
115
|
-
children,
|
|
116
|
-
className,
|
|
117
|
-
inline,
|
|
118
|
-
node
|
|
119
|
-
} = props;
|
|
120
|
-
var {
|
|
121
|
-
hasRunCode,
|
|
122
|
-
nextStartLine
|
|
123
|
-
} = this.state;
|
|
124
|
-
var {
|
|
125
|
-
children: nodeChildren,
|
|
126
|
-
position
|
|
127
|
-
} = node;
|
|
128
|
-
var {
|
|
129
|
-
start
|
|
130
|
-
} = position;
|
|
131
|
-
var {
|
|
132
|
-
line
|
|
133
|
-
} = start;
|
|
134
|
-
var command = nodeChildren[0].value;
|
|
135
|
-
var ref = /*#__PURE__*/React.createRef();
|
|
136
|
-
var isFirstBlock = this.commands.size === 0;
|
|
137
|
-
var isSelected = nextStartLine === line || isFirstBlock && nextStartLine == null && !hasRunCode;
|
|
138
|
-
var language = className !== null && className !== void 0 && className.startsWith('language-') ? className.substring(9) : 'plaintext';
|
|
139
|
-
|
|
140
|
-
if (inline) {
|
|
141
|
-
return /*#__PURE__*/React.createElement("code", {
|
|
142
|
-
className: className
|
|
143
|
-
}, children);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
this.commands.set(line, command);
|
|
147
|
-
this.codeElements.set(line, ref);
|
|
148
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
149
|
-
className: classNames('markdown-notebook-editor-code-block', {
|
|
150
|
-
'is-selected': isSelected
|
|
151
|
-
}),
|
|
152
|
-
ref: ref,
|
|
153
|
-
onClick: () => {
|
|
154
|
-
this.setState({
|
|
155
|
-
nextStartLine: line
|
|
156
|
-
});
|
|
157
|
-
},
|
|
158
|
-
role: "presentation"
|
|
159
|
-
}, /*#__PURE__*/React.createElement(Button, {
|
|
160
|
-
kind: "ghost",
|
|
161
|
-
icon: vsPlay,
|
|
162
|
-
className: "btn-play-block",
|
|
163
|
-
onClick: event => {
|
|
164
|
-
event.stopPropagation();
|
|
165
|
-
event.preventDefault();
|
|
166
|
-
this.runCode(command);
|
|
167
|
-
this.setState({
|
|
168
|
-
nextStartLine: line
|
|
169
|
-
});
|
|
170
|
-
},
|
|
171
|
-
tooltip: "Run code"
|
|
172
|
-
}), /*#__PURE__*/React.createElement("code", null, /*#__PURE__*/React.createElement(Code, {
|
|
173
|
-
language: language
|
|
174
|
-
}, React.Children.map(children, child => typeof child === 'string' ? child.trim() : child))));
|
|
175
|
-
} // eslint-disable-next-line class-methods-use-this
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
renderLink(props) {
|
|
179
|
-
var {
|
|
180
|
-
onLinkClick
|
|
181
|
-
} = this.props; // eslint-disable-next-line react/jsx-props-no-spreading,jsx-a11y/anchor-has-content,jsx-a11y/no-static-element-interactions
|
|
182
|
-
|
|
183
|
-
return /*#__PURE__*/React.createElement("a", _extends({}, props, {
|
|
184
|
-
onClick: onLinkClick
|
|
185
|
-
}));
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
render() {
|
|
189
|
-
var {
|
|
190
|
-
isEditing,
|
|
191
|
-
content,
|
|
192
|
-
onEditorInitialized,
|
|
193
|
-
transformImageUri,
|
|
194
|
-
transformLinkUri
|
|
195
|
-
} = this.props;
|
|
196
|
-
var {
|
|
197
|
-
hasRunCode,
|
|
198
|
-
nextStartLine
|
|
199
|
-
} = this.state;
|
|
200
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
201
|
-
className: "markdown-notebook-editor-container",
|
|
202
|
-
ref: container => {
|
|
203
|
-
this.container = container;
|
|
204
|
-
}
|
|
205
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
206
|
-
className: "markdown-notebook-editor-toolbar"
|
|
207
|
-
}, /*#__PURE__*/React.createElement(Button, {
|
|
208
|
-
className: classNames('btn-play-selected-cell', {
|
|
209
|
-
flashing: !hasRunCode
|
|
210
|
-
}),
|
|
211
|
-
kind: "ghost",
|
|
212
|
-
icon: vsPlay,
|
|
213
|
-
onClick: this.handleRunSelected,
|
|
214
|
-
tooltip: "Run code and select next",
|
|
215
|
-
disabled: hasRunCode && nextStartLine == null
|
|
216
|
-
}, "Run Selected Code")), /*#__PURE__*/React.createElement("div", {
|
|
217
|
-
className: "markdown-notebook-editor",
|
|
218
|
-
ref: this.editorScrollView
|
|
219
|
-
}, isEditing ? /*#__PURE__*/React.createElement(Editor, {
|
|
220
|
-
settings: {
|
|
221
|
-
language: 'markdown',
|
|
222
|
-
value: content,
|
|
223
|
-
lineNumbers: 'off'
|
|
224
|
-
},
|
|
225
|
-
onEditorInitialized: onEditorInitialized
|
|
226
|
-
}) : /*#__PURE__*/React.createElement(Markdown, {
|
|
227
|
-
components: {
|
|
228
|
-
code: this.renderCodeBlock,
|
|
229
|
-
a: this.renderLink
|
|
230
|
-
},
|
|
231
|
-
linkTarget: "_blank",
|
|
232
|
-
remarkPlugins: [remarkGfm],
|
|
233
|
-
transformLinkUri: transformLinkUri,
|
|
234
|
-
transformImageUri: transformImageUri,
|
|
235
|
-
includeElementIndex: true
|
|
236
|
-
}, content)));
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
}
|
|
240
|
-
MarkdownNotebookEditor.propTypes = {
|
|
241
|
-
isEditing: PropTypes.bool,
|
|
242
|
-
onRunCode: PropTypes.func,
|
|
243
|
-
content: PropTypes.string,
|
|
244
|
-
onEditorInitialized: PropTypes.func.isRequired,
|
|
245
|
-
onLinkClick: PropTypes.func,
|
|
246
|
-
transformImageUri: PropTypes.func,
|
|
247
|
-
transformLinkUri: PropTypes.func
|
|
248
|
-
};
|
|
249
|
-
MarkdownNotebookEditor.defaultProps = {
|
|
250
|
-
isEditing: false,
|
|
251
|
-
content: '',
|
|
252
|
-
onLinkClick: undefined,
|
|
253
|
-
onRunCode: () => {},
|
|
254
|
-
transformImageUri: undefined,
|
|
255
|
-
transformLinkUri: undefined
|
|
256
|
-
};
|
|
257
|
-
//# sourceMappingURL=MarkdownNotebookEditor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/panels/MarkdownNotebookEditor.jsx"],"names":["React","PureComponent","PropTypes","Markdown","Button","Code","Editor","classNames","vsPlay","remarkGfm","MarkdownNotebookEditor","constructor","props","handleRunSelected","bind","renderCodeBlock","renderLink","container","commands","Map","codeElements","editorScrollView","createRef","state","hasRunCode","nextStartLine","componentDidUpdate","prevProps","content","resetBlocks","clear","setState","getNextStartLine","line","keys","nextIndex","findIndex","key","length","event","preventDefault","stopPropagation","keyIndex","startLine","command","get","newNextStartLine","element","current","nextElement","parentElement","nextElementSibling","offsetTop","top","scroll","left","runCode","onRunCode","children","className","inline","node","nodeChildren","position","start","value","ref","isFirstBlock","size","isSelected","language","startsWith","substring","set","Children","map","child","trim","onLinkClick","render","isEditing","onEditorInitialized","transformImageUri","transformLinkUri","flashing","lineNumbers","code","a","propTypes","bool","func","string","isRequired","defaultProps","undefined"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport Markdown from 'react-markdown';\nimport { Button } from '@deephaven/components';\nimport { Code, Editor } from '@deephaven/console';\nimport classNames from 'classnames';\nimport { vsPlay } from '@deephaven/icons';\nimport remarkGfm from 'remark-gfm';\n\nexport default class MarkdownNotebookEditor extends PureComponent {\n constructor(props) {\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 this.container = null;\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 // 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 componentDidUpdate(prevProps) {\n const { content } = this.props;\n if (prevProps.content !== content) {\n this.resetBlocks();\n }\n }\n\n resetBlocks() {\n this.codeElements.clear();\n this.commands.clear();\n this.setState({ nextStartLine: null });\n }\n\n /**\n * @param {number|null} line The line of the code block to start from\n * @returns {number} The next line of the code block to start from\n */\n getNextStartLine(line) {\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) {\n event.preventDefault();\n event.stopPropagation();\n\n const { nextStartLine } = this.state;\n const keys = [...this.commands.keys()];\n const keyIndex = keys.findIndex(\n key => key === nextStartLine || nextStartLine == null\n );\n if (keyIndex < 0) {\n return;\n }\n const startLine = keys[keyIndex];\n const command = this.commands.get(startLine);\n const newNextStartLine = this.getNextStartLine(startLine);\n const element = this.codeElements.get(startLine)?.current;\n const nextElement = element?.parentElement?.nextElementSibling;\n if (nextElement) {\n const { offsetTop } = nextElement;\n const top = offsetTop;\n this.editorScrollView.current.scroll({\n top,\n left: 0,\n });\n }\n\n this.runCode(command);\n this.setState({ nextStartLine: newNextStartLine });\n }\n\n runCode(command) {\n const { onRunCode } = this.props;\n onRunCode(command);\n\n this.setState({ hasRunCode: true });\n }\n\n renderCodeBlock(props) {\n const { children, className, inline, node } = props;\n const { hasRunCode, nextStartLine } = this.state;\n const { children: nodeChildren, position } = node;\n const { start } = position;\n const { line } = start;\n const command = nodeChildren[0].value;\n const ref = React.createRef();\n const isFirstBlock = this.commands.size === 0;\n const isSelected =\n nextStartLine === line ||\n (isFirstBlock && nextStartLine == null && !hasRunCode);\n const language = className?.startsWith('language-')\n ? className.substring(9)\n : 'plaintext';\n\n if (inline) {\n return <code className={className}>{children}</code>;\n }\n\n this.commands.set(line, command);\n this.codeElements.set(line, ref);\n\n return (\n <div\n className={classNames('markdown-notebook-editor-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 // eslint-disable-next-line class-methods-use-this\n renderLink(props) {\n const { onLinkClick } = this.props;\n // eslint-disable-next-line react/jsx-props-no-spreading,jsx-a11y/anchor-has-content,jsx-a11y/no-static-element-interactions\n return <a {...props} onClick={onLinkClick} />;\n }\n\n render() {\n const {\n isEditing,\n content,\n onEditorInitialized,\n transformImageUri,\n transformLinkUri,\n } = this.props;\n const { hasRunCode, nextStartLine } = this.state;\n return (\n <div\n className=\"markdown-notebook-editor-container\"\n ref={container => {\n this.container = container;\n }}\n >\n <div className=\"markdown-notebook-editor-toolbar\">\n <Button\n className={classNames('btn-play-selected-cell', {\n flashing: !hasRunCode,\n })}\n kind=\"ghost\"\n icon={vsPlay}\n onClick={this.handleRunSelected}\n tooltip=\"Run code and select next\"\n disabled={hasRunCode && nextStartLine == null}\n >\n Run Selected Code\n </Button>\n </div>\n <div className=\"markdown-notebook-editor\" ref={this.editorScrollView}>\n {isEditing ? (\n <Editor\n settings={{\n language: 'markdown',\n value: content,\n lineNumbers: 'off',\n }}\n onEditorInitialized={onEditorInitialized}\n />\n ) : (\n <Markdown\n components={{ code: this.renderCodeBlock, a: this.renderLink }}\n linkTarget=\"_blank\"\n remarkPlugins={[remarkGfm]}\n transformLinkUri={transformLinkUri}\n transformImageUri={transformImageUri}\n includeElementIndex\n >\n {content}\n </Markdown>\n )}\n </div>\n </div>\n );\n }\n}\n\nMarkdownNotebookEditor.propTypes = {\n isEditing: PropTypes.bool,\n onRunCode: PropTypes.func,\n content: PropTypes.string,\n onEditorInitialized: PropTypes.func.isRequired,\n onLinkClick: PropTypes.func,\n transformImageUri: PropTypes.func,\n transformLinkUri: PropTypes.func,\n};\n\nMarkdownNotebookEditor.defaultProps = {\n isEditing: false,\n content: '',\n onLinkClick: undefined,\n onRunCode: () => {},\n transformImageUri: undefined,\n transformLinkUri: undefined,\n};\n"],"file":"MarkdownNotebookEditor.js"}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
.markdown-notebook-title.is-preview {
|
|
2
|
-
font-style: italic;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
.markdown-notebook-container .markdown-notebook-editor-container {
|
|
6
|
-
width: 100%;
|
|
7
|
-
height: 100%;
|
|
8
|
-
display: flex;
|
|
9
|
-
flex-direction: column;
|
|
10
|
-
}
|
|
11
|
-
.markdown-notebook-container .markdown-notebook-editor-toolbar {
|
|
12
|
-
display: flex;
|
|
13
|
-
align-items: center;
|
|
14
|
-
padding: 0.25rem;
|
|
15
|
-
width: 100%;
|
|
16
|
-
flex: 0 0 36px;
|
|
17
|
-
border-bottom: 2px solid #1a171a;
|
|
18
|
-
}
|
|
19
|
-
.markdown-notebook-container .markdown-notebook-editor-toolbar .btn-play-selected-cell {
|
|
20
|
-
color: #9edc6f;
|
|
21
|
-
min-height: 34px;
|
|
22
|
-
}
|
|
23
|
-
.markdown-notebook-container .edit-hint {
|
|
24
|
-
position: absolute;
|
|
25
|
-
top: 0;
|
|
26
|
-
right: 0;
|
|
27
|
-
padding: 5px 20px;
|
|
28
|
-
text-align: right;
|
|
29
|
-
width: 100%;
|
|
30
|
-
min-height: 30px;
|
|
31
|
-
height: 30px;
|
|
32
|
-
opacity: 0;
|
|
33
|
-
user-select: none;
|
|
34
|
-
transition: opacity 0.15s ease-out;
|
|
35
|
-
pointer-events: none;
|
|
36
|
-
}
|
|
37
|
-
.markdown-notebook-container .markdown-notebook-editor {
|
|
38
|
-
flex-grow: 1;
|
|
39
|
-
width: 100%;
|
|
40
|
-
padding: 0 15px;
|
|
41
|
-
overflow: auto;
|
|
42
|
-
position: relative;
|
|
43
|
-
scroll-behavior: smooth;
|
|
44
|
-
}
|
|
45
|
-
.markdown-notebook-container .markdown-notebook-editor h1,
|
|
46
|
-
.markdown-notebook-container .markdown-notebook-editor h2,
|
|
47
|
-
.markdown-notebook-container .markdown-notebook-editor h3 {
|
|
48
|
-
margin-top: 3rem;
|
|
49
|
-
}
|
|
50
|
-
.markdown-notebook-container:hover .edit-hint.viewing {
|
|
51
|
-
opacity: 1;
|
|
52
|
-
}
|
|
53
|
-
.markdown-notebook-container blockquote {
|
|
54
|
-
border-left: 0.25em solid #929192;
|
|
55
|
-
padding: 0 1em;
|
|
56
|
-
color: #f0f0ee;
|
|
57
|
-
}
|
|
58
|
-
.markdown-notebook-container pre {
|
|
59
|
-
overflow: hidden;
|
|
60
|
-
}
|
|
61
|
-
.markdown-notebook-container pre > code {
|
|
62
|
-
display: block;
|
|
63
|
-
padding: 0.5rem;
|
|
64
|
-
}
|
|
65
|
-
.markdown-notebook-container a {
|
|
66
|
-
color: #4878ea;
|
|
67
|
-
}
|
|
68
|
-
.markdown-notebook-container a:visited {
|
|
69
|
-
color: #aa9af4;
|
|
70
|
-
}
|
|
71
|
-
.markdown-notebook-container .markdown-notebook-editor-code-block {
|
|
72
|
-
position: relative;
|
|
73
|
-
border-radius: 0 4px 4px 0;
|
|
74
|
-
}
|
|
75
|
-
.markdown-notebook-container .markdown-notebook-editor-code-block .btn-play-block {
|
|
76
|
-
color: #9edc6f;
|
|
77
|
-
opacity: 0;
|
|
78
|
-
position: absolute;
|
|
79
|
-
top: 0;
|
|
80
|
-
right: 0;
|
|
81
|
-
margin: 3px;
|
|
82
|
-
transition: opacity 0.15s ease-out;
|
|
83
|
-
}
|
|
84
|
-
.markdown-notebook-container .markdown-notebook-editor-code-block code {
|
|
85
|
-
color: #f0f0ee;
|
|
86
|
-
background: #403e41;
|
|
87
|
-
padding: 0.5rem;
|
|
88
|
-
border-radius: 4px;
|
|
89
|
-
border: 1px solid #1a171a;
|
|
90
|
-
overflow: auto;
|
|
91
|
-
display: block;
|
|
92
|
-
}
|
|
93
|
-
.markdown-notebook-container .markdown-notebook-editor-code-block.is-selected::after {
|
|
94
|
-
position: absolute;
|
|
95
|
-
top: 0;
|
|
96
|
-
left: 0;
|
|
97
|
-
bottom: 0;
|
|
98
|
-
width: 5px;
|
|
99
|
-
margin: 1px 0 1px 0;
|
|
100
|
-
background: #4878ea;
|
|
101
|
-
content: "";
|
|
102
|
-
pointer-events: none;
|
|
103
|
-
border-radius: 4px 0 0 4px;
|
|
104
|
-
}
|
|
105
|
-
.markdown-notebook-container .markdown-notebook-editor-code-block.is-selected .btn-play-block, .markdown-notebook-container .markdown-notebook-editor-code-block:hover .btn-play-block {
|
|
106
|
-
opacity: 1;
|
|
107
|
-
}
|
|
108
|
-
.markdown-notebook-container .flashing {
|
|
109
|
-
animation-duration: 1s;
|
|
110
|
-
animation-name: flash;
|
|
111
|
-
animation-timing-function: ease-in-out;
|
|
112
|
-
animation-iteration-count: infinite;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
@keyframes flash {
|
|
116
|
-
0% {
|
|
117
|
-
text-shadow: 0 0 5px #2d2a2e, 0 0 20px #2d2a2e;
|
|
118
|
-
}
|
|
119
|
-
50% {
|
|
120
|
-
text-shadow: 0 0 2px rgba(255, 255, 255, 0.5), 0 0 10px #9edc6f;
|
|
121
|
-
}
|
|
122
|
-
100% {
|
|
123
|
-
text-shadow: 0 0 5px #2d2a2e, 0 0 20px #2d2a2e;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/*# sourceMappingURL=MarkdownNotebookPanel.css.map */
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../src/panels/MarkdownNotebookPanel.scss","../../../components/scss/new_variables.scss","../../../components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAME;EACE;;;AAKF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA,SCpBO;EDqBP;EACA;EACA;;AACA;EACE,OErBE;EFsBF;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA,YAtCe;EAuCf,QAvCe;EAwCf;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGE;;AAIJ;EACE;;AAGF;EACE;EACA;EACA,OExDa;;AF2Df;EACE;;AAGF;EACE;EACA,SC3EO;;AD8ET;EACE,OEtEY;;AFwEZ;EACE,OE7EG;;AFiFP;EACE;EACA;;AAEA;EACE,OExFE;EFyFF;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE,OE3FW;EF4FX,YEjFK;EFkFL,SCvGK;EDwGL,eEcU;EFbV;EACA;EACA;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA,YE7GQ;EF8GR;EACA;EACA;;AAMF;EACE;;AAKN;EACE;EACA;EACA;EACA;;;AAIJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE","file":"MarkdownNotebookPanel.css"}
|