@deephaven/dashboard-core-plugins 0.17.1-beta.4 → 0.18.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.
@@ -1,5 +1,5 @@
1
1
  import { MouseEventHandler, PureComponent, ReactElement } from 'react';
2
- import { ReactComponentConfig } from '@deephaven/golden-layout';
2
+ import type { ReactComponentConfig } from '@deephaven/golden-layout';
3
3
  interface MarkdownStartPageProps {
4
4
  closedMarkdowns: ReactComponentConfig[];
5
5
  onOpen: (markdown: ReactComponentConfig) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownStartPage.d.ts","sourceRoot":"","sources":["../../../src/controls/markdown/MarkdownStartPage.tsx"],"names":[],"mappings":"AAAA,OAAc,EAEZ,iBAAiB,EACjB,aAAa,EACb,YAAY,EACb,MAAM,OAAO,CAAC;AAWf,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAIhE,UAAU,sBAAsB;IAC9B,eAAe,EAAE,oBAAoB,EAAE,CAAC;IACxC,MAAM,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACjD,QAAQ,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC/C,QAAQ,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;CACpD;AAED,UAAU,sBAAsB;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACpC;AAED,cAAM,iBAAkB,SAAQ,aAAa,CAC3C,sBAAsB,EACtB,sBAAsB,CACvB;IACC,MAAM,CAAC,YAAY;;sBAEL,IAAI;wBACF,IAAI;wBACJ,IAAI;MAClB;gBAEU,KAAK,EAAE,sBAAsB;IASzC,uBAAuB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAI7D,sBAAsB,IAAI,IAAI;IAI9B,oBAAoB,CAAC,QAAQ,CAAC,EAAE,oBAAoB,GAAG,IAAI;IAW3D,MAAM,IAAI,YAAY;CA0EvB;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"MarkdownStartPage.d.ts","sourceRoot":"","sources":["../../../src/controls/markdown/MarkdownStartPage.tsx"],"names":[],"mappings":"AAAA,OAAc,EAEZ,iBAAiB,EACjB,aAAa,EACb,YAAY,EACb,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAIrE,UAAU,sBAAsB;IAC9B,eAAe,EAAE,oBAAoB,EAAE,CAAC;IACxC,MAAM,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACjD,QAAQ,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC/C,QAAQ,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;CACpD;AAED,UAAU,sBAAsB;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACpC;AAED,cAAM,iBAAkB,SAAQ,aAAa,CAC3C,sBAAsB,EACtB,sBAAsB,CACvB;IACC,MAAM,CAAC,YAAY;;sBAEL,IAAI;wBACF,IAAI;wBACJ,IAAI;MAClB;gBAEU,KAAK,EAAE,sBAAsB;IASzC,uBAAuB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAI7D,sBAAsB,IAAI,IAAI;IAI9B,oBAAoB,CAAC,QAAQ,CAAC,EAAE,oBAAoB,GAAG,IAAI;IAW3D,MAAM,IAAI,YAAY;CA0EvB;AAED,eAAe,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownStartPage.js","names":["React","PureComponent","Modal","ModalBody","ModalFooter","ModalHeader","FontAwesomeIcon","vsTrash","Log","log","module","MarkdownStartPage","constructor","props","handleDeleteButtonClick","bind","handleDeleteModalClose","state","isDeleteModalShown","markdown","setState","toBeDeleted","undefined","handleDeleteMarkdown","debug","onDelete","render","closedMarkdowns","onOpen","onCreate","map","id","title"],"sources":["../../../src/controls/markdown/MarkdownStartPage.tsx"],"sourcesContent":["import React, {\n Key,\n MouseEventHandler,\n PureComponent,\n ReactElement,\n} from 'react';\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n} from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTrash } from '@deephaven/icons';\n\nimport Log from '@deephaven/log';\nimport { ReactComponentConfig } from '@deephaven/golden-layout';\n\nconst log = Log.module('MarkdownStartPage');\n\ninterface MarkdownStartPageProps {\n closedMarkdowns: ReactComponentConfig[];\n onOpen: (markdown: ReactComponentConfig) => void;\n onCreate: MouseEventHandler<HTMLButtonElement>;\n onDelete: (markdown: ReactComponentConfig) => void;\n}\n\ninterface MarkdownStartPageState {\n isDeleteModalShown: boolean;\n toBeDeleted?: ReactComponentConfig;\n}\n\nclass MarkdownStartPage extends PureComponent<\n MarkdownStartPageProps,\n MarkdownStartPageState\n> {\n static defaultProps = {\n closedMarkdowns: [],\n onOpen: (): void => undefined,\n onCreate: (): void => undefined,\n onDelete: (): void => undefined,\n };\n\n constructor(props: MarkdownStartPageProps) {\n super(props);\n this.handleDeleteButtonClick = this.handleDeleteButtonClick.bind(this);\n this.handleDeleteModalClose = this.handleDeleteModalClose.bind(this);\n this.state = {\n isDeleteModalShown: false,\n };\n }\n\n handleDeleteButtonClick(markdown: ReactComponentConfig): void {\n this.setState({ isDeleteModalShown: true, toBeDeleted: markdown });\n }\n\n handleDeleteModalClose(): void {\n this.setState({ isDeleteModalShown: false, toBeDeleted: undefined });\n }\n\n handleDeleteMarkdown(markdown?: ReactComponentConfig): void {\n log.debug('delete markdown: ', markdown);\n\n if (markdown !== undefined) {\n const { onDelete } = this.props;\n onDelete(markdown);\n }\n\n this.setState({ isDeleteModalShown: false, toBeDeleted: undefined });\n }\n\n render(): ReactElement {\n const { closedMarkdowns, onOpen, onCreate } = this.props;\n const { isDeleteModalShown, toBeDeleted } = this.state;\n\n return (\n <div className=\"markdown-panel-start-page h-100 w-100\">\n <div className=\"markdown-panel-start-page-container\">\n <div className=\"markdown-panel-start-list\">\n <h3 className=\"list-title\">Start</h3>\n <div className=\"list-item\">\n <button\n className=\"btn btn-link title\"\n type=\"button\"\n onClick={onCreate}\n >\n New Markdown Note\n </button>\n </div>\n </div>\n <div className=\"markdown-panel-start-list\">\n <h3 className=\"list-title\">Recently Closed from Dashboard</h3>\n {closedMarkdowns.map(markdown => (\n <div className=\"list-item\" key={markdown.id as Key}>\n <button\n className=\"btn btn-link title\"\n type=\"button\"\n onClick={() => onOpen(markdown)}\n >\n {markdown.title}\n </button>\n <button\n className=\"btn-link icon\"\n type=\"button\"\n onClick={() => {\n this.handleDeleteButtonClick(markdown);\n }}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </button>\n </div>\n ))}\n <Modal\n isOpen={isDeleteModalShown}\n toggle={this.handleDeleteModalClose}\n className=\"modal-dialog-centered markdown-delete-modal theme-bg-light\"\n >\n <ModalHeader>\n Are you sure you want to permanently delete this note?\n </ModalHeader>\n <ModalBody>You can&#39;t undo this action.</ModalBody>\n <ModalFooter>\n <button\n className=\"btn btn-outline-primary\"\n onClick={this.handleDeleteModalClose}\n type=\"button\"\n >\n Cancel\n </button>\n <button\n className=\"btn btn-danger\"\n onClick={() => {\n this.handleDeleteMarkdown(toBeDeleted);\n }}\n type=\"button\"\n >\n Delete\n </button>\n </ModalFooter>\n </Modal>\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default MarkdownStartPage;\n"],"mappings":"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"}
1
+ {"version":3,"file":"MarkdownStartPage.js","names":["React","PureComponent","Modal","ModalBody","ModalFooter","ModalHeader","FontAwesomeIcon","vsTrash","Log","log","module","MarkdownStartPage","constructor","props","handleDeleteButtonClick","bind","handleDeleteModalClose","state","isDeleteModalShown","markdown","setState","toBeDeleted","undefined","handleDeleteMarkdown","debug","onDelete","render","closedMarkdowns","onOpen","onCreate","map","id","title"],"sources":["../../../src/controls/markdown/MarkdownStartPage.tsx"],"sourcesContent":["import React, {\n Key,\n MouseEventHandler,\n PureComponent,\n ReactElement,\n} from 'react';\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n} from '@deephaven/components';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTrash } from '@deephaven/icons';\n\nimport Log from '@deephaven/log';\nimport type { ReactComponentConfig } from '@deephaven/golden-layout';\n\nconst log = Log.module('MarkdownStartPage');\n\ninterface MarkdownStartPageProps {\n closedMarkdowns: ReactComponentConfig[];\n onOpen: (markdown: ReactComponentConfig) => void;\n onCreate: MouseEventHandler<HTMLButtonElement>;\n onDelete: (markdown: ReactComponentConfig) => void;\n}\n\ninterface MarkdownStartPageState {\n isDeleteModalShown: boolean;\n toBeDeleted?: ReactComponentConfig;\n}\n\nclass MarkdownStartPage extends PureComponent<\n MarkdownStartPageProps,\n MarkdownStartPageState\n> {\n static defaultProps = {\n closedMarkdowns: [],\n onOpen: (): void => undefined,\n onCreate: (): void => undefined,\n onDelete: (): void => undefined,\n };\n\n constructor(props: MarkdownStartPageProps) {\n super(props);\n this.handleDeleteButtonClick = this.handleDeleteButtonClick.bind(this);\n this.handleDeleteModalClose = this.handleDeleteModalClose.bind(this);\n this.state = {\n isDeleteModalShown: false,\n };\n }\n\n handleDeleteButtonClick(markdown: ReactComponentConfig): void {\n this.setState({ isDeleteModalShown: true, toBeDeleted: markdown });\n }\n\n handleDeleteModalClose(): void {\n this.setState({ isDeleteModalShown: false, toBeDeleted: undefined });\n }\n\n handleDeleteMarkdown(markdown?: ReactComponentConfig): void {\n log.debug('delete markdown: ', markdown);\n\n if (markdown !== undefined) {\n const { onDelete } = this.props;\n onDelete(markdown);\n }\n\n this.setState({ isDeleteModalShown: false, toBeDeleted: undefined });\n }\n\n render(): ReactElement {\n const { closedMarkdowns, onOpen, onCreate } = this.props;\n const { isDeleteModalShown, toBeDeleted } = this.state;\n\n return (\n <div className=\"markdown-panel-start-page h-100 w-100\">\n <div className=\"markdown-panel-start-page-container\">\n <div className=\"markdown-panel-start-list\">\n <h3 className=\"list-title\">Start</h3>\n <div className=\"list-item\">\n <button\n className=\"btn btn-link title\"\n type=\"button\"\n onClick={onCreate}\n >\n New Markdown Note\n </button>\n </div>\n </div>\n <div className=\"markdown-panel-start-list\">\n <h3 className=\"list-title\">Recently Closed from Dashboard</h3>\n {closedMarkdowns.map(markdown => (\n <div className=\"list-item\" key={markdown.id as Key}>\n <button\n className=\"btn btn-link title\"\n type=\"button\"\n onClick={() => onOpen(markdown)}\n >\n {markdown.title}\n </button>\n <button\n className=\"btn-link icon\"\n type=\"button\"\n onClick={() => {\n this.handleDeleteButtonClick(markdown);\n }}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </button>\n </div>\n ))}\n <Modal\n isOpen={isDeleteModalShown}\n toggle={this.handleDeleteModalClose}\n className=\"modal-dialog-centered markdown-delete-modal theme-bg-light\"\n >\n <ModalHeader>\n Are you sure you want to permanently delete this note?\n </ModalHeader>\n <ModalBody>You can&#39;t undo this action.</ModalBody>\n <ModalFooter>\n <button\n className=\"btn btn-outline-primary\"\n onClick={this.handleDeleteModalClose}\n type=\"button\"\n >\n Cancel\n </button>\n <button\n className=\"btn btn-danger\"\n onClick={() => {\n this.handleDeleteMarkdown(toBeDeleted);\n }}\n type=\"button\"\n >\n Delete\n </button>\n </ModalFooter>\n </Modal>\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default MarkdownStartPage;\n"],"mappings":"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"}
@@ -17,6 +17,7 @@ export declare type FileExplorerPanelState = {
17
17
  language?: string;
18
18
  session?: IdeSession;
19
19
  showCreateFolder: boolean;
20
+ focusedFilePath: string;
20
21
  };
21
22
  /**
22
23
  * Panel for showing a FileExplorer in a Dashboard.
@@ -37,6 +38,7 @@ export declare class FileExplorerPanel extends React.Component<FileExplorerPanel
37
38
  handleCreateDirectoryCancel(): void;
38
39
  handleCreateDirectorySubmit(path: string): void;
39
40
  handleDelete(files: FileStorageItem[]): void;
41
+ handleSelectionChange(selectedItems: FileStorageItem[]): void;
40
42
  handleFileSelect(file: FileStorageItem, event: React.SyntheticEvent): void;
41
43
  handleRename(oldName: string, newName: string): void;
42
44
  handleSessionOpened(session: IdeSession, { language }: {
@@ -1 +1 @@
1
- {"version":3,"file":"FileExplorerPanel.d.ts","sourceRoot":"","sources":["../../src/panels/FileExplorerPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAqB,EAEnB,WAAW,EACX,eAAe,EAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAW,cAAc,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,0BAA0B,CAAC;AAKlC,aAAK,UAAU,GAAG;IAChB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB,CAAC;AAEF,aAAK,QAAQ,GAAG,mBAAmB,CAAC;AAkBpC,QAAA,MAAM,SAAS,4JAA6D,CAAC;AAE7E,oBAAY,sBAAsB,GAAG,QAAQ,GAC3C,UAAU,GACV,cAAc,CAAC,OAAO,SAAS,CAAC,CAAC;AAEnC,oBAAY,sBAAsB,GAAG;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAOF;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK,CAAC,SAAS,CACpD,sBAAsB,EACtB,sBAAsB,CACvB;IACC,MAAM,CAAC,SAAS,SAAuB;IAEvC,MAAM,CAAC,KAAK,SAAmB;IAE/B,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAItC;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,GAAG,OAAO;gBAU7C,KAAK,EAAE,sBAAsB;IA2BzC,iBAAiB,IAAI,IAAI;IAMzB,gBAAgB,IAAI,IAAI;IAgBxB,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAI1C,2BAA2B,IAAI,IAAI;IAOnC,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO/C,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,IAAI;IAU5C,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,GAAG,IAAI;IAwB1E,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAMpD,mBAAmB,CACjB,OAAO,EAAE,UAAU,EACnB,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GACjC,IAAI;IAOP,mBAAmB,IAAI,IAAI;IAO3B,UAAU,IAAI,IAAI;IAIlB,QAAQ,IAAI,OAAO;IAMnB,MAAM,IAAI,SAAS;CAqCpB;;;;;;;;AAED,wBAA4C"}
1
+ {"version":3,"file":"FileExplorerPanel.d.ts","sourceRoot":"","sources":["../../src/panels/FileExplorerPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAqB,EAEnB,WAAW,EACX,eAAe,EAGhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAW,cAAc,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,0BAA0B,CAAC;AAKlC,aAAK,UAAU,GAAG;IAChB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB,CAAC;AAEF,aAAK,QAAQ,GAAG,mBAAmB,CAAC;AAkBpC,QAAA,MAAM,SAAS,4JAA6D,CAAC;AAE7E,oBAAY,sBAAsB,GAAG,QAAQ,GAC3C,UAAU,GACV,cAAc,CAAC,OAAO,SAAS,CAAC,CAAC;AAEnC,oBAAY,sBAAsB,GAAG;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAOF;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK,CAAC,SAAS,CACpD,sBAAsB,EACtB,sBAAsB,CACvB;IACC,MAAM,CAAC,SAAS,SAAuB;IAEvC,MAAM,CAAC,KAAK,SAAmB;IAE/B,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAItC;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,GAAG,OAAO;gBAU7C,KAAK,EAAE,sBAAsB;IA6BzC,iBAAiB,IAAI,IAAI;IAMzB,gBAAgB,IAAI,IAAI;IAgBxB,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAI1C,2BAA2B,IAAI,IAAI;IAOnC,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO/C,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,IAAI;IAU5C,qBAAqB,CAAC,aAAa,EAAE,eAAe,EAAE,GAAG,IAAI;IAY7D,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,GAAG,IAAI;IAwB1E,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAMpD,mBAAmB,CACjB,OAAO,EAAE,UAAU,EACnB,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GACjC,IAAI;IAOP,mBAAmB,IAAI,IAAI;IAO3B,UAAU,IAAI,IAAI;IAIlB,QAAQ,IAAI,OAAO;IAMnB,MAAM,IAAI,SAAS;CAuCpB;;;;;;;;AAED,wBAA4C"}
@@ -2,7 +2,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
2
2
 
3
3
  import Log from '@deephaven/log';
4
4
  import { getFileStorage } from '@deephaven/redux';
5
- import FileExplorer, { FileExplorerToolbar, NewItemModal } from '@deephaven/file-explorer';
5
+ import FileExplorer, { FileExplorerToolbar, FileUtils, NewItemModal } from '@deephaven/file-explorer';
6
6
  import React from 'react';
7
7
  import { connect } from 'react-redux';
8
8
  import Panel from "./Panel.js";
@@ -71,6 +71,7 @@ export class FileExplorerPanel extends React.Component {
71
71
  this.handleSessionOpened = this.handleSessionOpened.bind(this);
72
72
  this.handleSessionClosed = this.handleSessionClosed.bind(this);
73
73
  this.handleShow = this.handleShow.bind(this);
74
+ this.handleSelectionChange = this.handleSelectionChange.bind(this);
74
75
  var {
75
76
  session,
76
77
  language
@@ -79,7 +80,8 @@ export class FileExplorerPanel extends React.Component {
79
80
  isShown: false,
80
81
  language,
81
82
  session,
82
- showCreateFolder: false
83
+ showCreateFolder: false,
84
+ focusedFilePath: '/'
83
85
  };
84
86
  }
85
87
 
@@ -143,6 +145,22 @@ export class FileExplorerPanel extends React.Component {
143
145
  });
144
146
  }
145
147
 
148
+ handleSelectionChange(selectedItems) {
149
+ var path = '/';
150
+
151
+ if (selectedItems.length === 1) {
152
+ if (selectedItems[0].type === 'directory') {
153
+ path = FileUtils.makePath(selectedItems[0].filename);
154
+ } else {
155
+ path = FileUtils.getPath(selectedItems[0].filename);
156
+ }
157
+ }
158
+
159
+ this.setState({
160
+ focusedFilePath: path
161
+ });
162
+ }
163
+
146
164
  handleFileSelect(file, event) {
147
165
  log.debug('fileSelect', file);
148
166
 
@@ -218,7 +236,8 @@ export class FileExplorerPanel extends React.Component {
218
236
  } = this.props;
219
237
  var {
220
238
  isShown,
221
- showCreateFolder
239
+ showCreateFolder,
240
+ focusedFilePath
222
241
  } = this.state;
223
242
  return /*#__PURE__*/React.createElement(Panel, {
224
243
  className: "file-explorer-panel",
@@ -236,14 +255,16 @@ export class FileExplorerPanel extends React.Component {
236
255
  storage: fileStorage,
237
256
  onDelete: this.handleDelete,
238
257
  onRename: this.handleRename,
239
- onSelect: this.handleFileSelect
258
+ onSelect: this.handleFileSelect,
259
+ onSelectionChange: this.handleSelectionChange
240
260
  }), /*#__PURE__*/React.createElement(NewItemModal, {
241
261
  isOpen: showCreateFolder,
242
262
  type: "directory",
243
263
  title: "Create New Folder",
244
264
  storage: fileStorage,
245
265
  onSubmit: this.handleCreateDirectorySubmit,
246
- onCancel: this.handleCreateDirectoryCancel
266
+ onCancel: this.handleCreateDirectoryCancel,
267
+ defaultValue: focusedFilePath
247
268
  }));
248
269
  }
249
270
 
@@ -1 +1 @@
1
- {"version":3,"file":"FileExplorerPanel.js","names":["Log","getFileStorage","FileExplorer","FileExplorerToolbar","NewItemModal","React","connect","Panel","NotebookEvent","getDashboardSessionWrapper","log","module","mapStateToProps","state","ownProps","fileStorage","sessionWrapper","localDashboardId","session","config","sessionConfig","language","type","connector","forwardRef","isMouseEvent","e","mouseEvent","button","FileExplorerPanel","Component","handleError","error","isFocusEvent","event","detail","constructor","props","handleFileSelect","bind","handleCreateFile","handleCreateDirectory","handleCreateDirectoryCancel","handleCreateDirectorySubmit","handleDelete","handleRename","handleSessionOpened","handleSessionClosed","handleShow","isShown","showCreateFolder","componentDidMount","isHidden","setState","glEventHub","notebookSettings","value","debug","emit","CREATE_NOTEBOOK","path","createDirectory","catch","files","forEach","file","CLOSE_FILE","id","filename","itemName","shouldFocus","fileMetadata","SELECT_NOTEBOOK","oldName","newName","RENAME_FILE","undefined","glContainer","render"],"sources":["../../src/panels/FileExplorerPanel.tsx"],"sourcesContent":["import { DashboardPanelProps } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { getFileStorage, RootState } from '@deephaven/redux';\nimport FileExplorer, {\n FileExplorerToolbar,\n FileStorage,\n FileStorageItem,\n NewItemModal,\n} from '@deephaven/file-explorer';\nimport React, { ReactNode } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport Panel from './Panel';\nimport { NotebookEvent } from '../events';\nimport './FileExplorerPanel.scss';\nimport { getDashboardSessionWrapper } from '../redux';\n\nconst log = Log.module('FileExplorerPanel');\n\ntype StateProps = {\n fileStorage: FileStorage;\n language: string;\n session?: IdeSession;\n};\n\ntype OwnProps = DashboardPanelProps;\n\nconst mapStateToProps = (state: RootState, ownProps: OwnProps): StateProps => {\n const fileStorage = getFileStorage(state);\n const sessionWrapper = getDashboardSessionWrapper(\n state,\n ownProps.localDashboardId\n );\n const { session, config: sessionConfig } = sessionWrapper ?? {};\n const language = sessionConfig?.type;\n\n return {\n fileStorage,\n language,\n session,\n };\n};\n\nconst connector = connect(mapStateToProps, null, null, { forwardRef: true });\n\nexport type FileExplorerPanelProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type FileExplorerPanelState = {\n isShown: boolean;\n language?: string;\n session?: IdeSession;\n showCreateFolder: boolean;\n};\n\nfunction isMouseEvent<T>(e: React.SyntheticEvent<T>): e is React.MouseEvent<T> {\n const mouseEvent = e as React.MouseEvent<T>;\n return mouseEvent && typeof mouseEvent.button === 'number';\n}\n\n/**\n * Panel for showing a FileExplorer in a Dashboard.\n */\nexport class FileExplorerPanel extends React.Component<\n FileExplorerPanelProps,\n FileExplorerPanelState\n> {\n static COMPONENT = 'FileExplorerPanel';\n\n static TITLE = 'File Explorer';\n\n static handleError(error: Error): void {\n log.error(error);\n }\n\n /**\n * Return true if the event should open a file and focus it, otherwise false\n * @param event The event to check\n */\n static isFocusEvent(event: React.SyntheticEvent): boolean {\n if (isMouseEvent(event)) {\n // If it's not a double click, then it's a preview event\n return event.detail >= 2;\n }\n\n // Keyboard event should always open with focus\n return true;\n }\n\n constructor(props: FileExplorerPanelProps) {\n super(props);\n\n this.handleFileSelect = this.handleFileSelect.bind(this);\n this.handleCreateFile = this.handleCreateFile.bind(this);\n this.handleCreateDirectory = this.handleCreateDirectory.bind(this);\n this.handleCreateDirectoryCancel = this.handleCreateDirectoryCancel.bind(\n this\n );\n this.handleCreateDirectorySubmit = this.handleCreateDirectorySubmit.bind(\n this\n );\n this.handleDelete = this.handleDelete.bind(this);\n this.handleRename = this.handleRename.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleShow = this.handleShow.bind(this);\n\n const { session, language } = props;\n this.state = {\n isShown: false,\n language,\n session,\n showCreateFolder: false,\n };\n }\n\n componentDidMount(): void {\n if (!this.isHidden()) {\n this.setState({ isShown: true });\n }\n }\n\n handleCreateFile(): void {\n const { glEventHub } = this.props;\n const { session, language } = this.state;\n const notebookSettings = {\n language,\n value: '',\n };\n log.debug('handleCreateFile', session, language, notebookSettings);\n glEventHub.emit(\n NotebookEvent.CREATE_NOTEBOOK,\n session,\n language,\n notebookSettings\n );\n }\n\n handleCreateDirectory(path?: string): void {\n this.setState({ showCreateFolder: true });\n }\n\n handleCreateDirectoryCancel(): void {\n log.debug('handleCreateDirectoryCancel');\n this.setState({\n showCreateFolder: false,\n });\n }\n\n handleCreateDirectorySubmit(path: string): void {\n log.debug('handleCreateDirectorySubmit', path);\n this.setState({ showCreateFolder: false });\n const { fileStorage } = this.props;\n fileStorage.createDirectory(path).catch(FileExplorerPanel.handleError);\n }\n\n handleDelete(files: FileStorageItem[]): void {\n const { glEventHub } = this.props;\n files.forEach(file => {\n glEventHub.emit(NotebookEvent.CLOSE_FILE, {\n id: file.filename,\n itemName: file.filename,\n });\n });\n }\n\n handleFileSelect(file: FileStorageItem, event: React.SyntheticEvent): void {\n log.debug('fileSelect', file);\n if (file.type === 'directory') {\n return;\n }\n\n const shouldFocus = FileExplorerPanel.isFocusEvent(event);\n const fileMetadata = { id: file.filename, itemName: file.filename };\n const { glEventHub } = this.props;\n const { session, language } = this.state;\n const notebookSettings = {\n value: null,\n language,\n };\n glEventHub.emit(\n NotebookEvent.SELECT_NOTEBOOK,\n session,\n language,\n notebookSettings,\n fileMetadata,\n shouldFocus\n );\n }\n\n handleRename(oldName: string, newName: string): void {\n const { glEventHub } = this.props;\n log.debug('handleRename', oldName, newName);\n glEventHub.emit(NotebookEvent.RENAME_FILE, oldName, newName);\n }\n\n handleSessionOpened(\n session: IdeSession,\n { language }: { language: string }\n ): void {\n this.setState({\n session,\n language,\n });\n }\n\n handleSessionClosed(): void {\n this.setState({\n session: undefined,\n language: undefined,\n });\n }\n\n handleShow(): void {\n this.setState({ isShown: true });\n }\n\n isHidden(): boolean {\n const { glContainer } = this.props;\n const { isHidden } = glContainer;\n return isHidden;\n }\n\n render(): ReactNode {\n const { fileStorage, glContainer, glEventHub } = this.props;\n const { isShown, showCreateFolder } = this.state;\n return (\n <Panel\n className=\"file-explorer-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onSessionOpen={this.handleSessionOpened}\n onSessionClose={this.handleSessionClosed}\n onShow={this.handleShow}\n >\n <FileExplorerToolbar\n createFile={this.handleCreateFile}\n createFolder={this.handleCreateDirectory}\n />\n {isShown && (\n <FileExplorer\n isMultiSelect\n storage={fileStorage}\n onDelete={this.handleDelete}\n onRename={this.handleRename}\n onSelect={this.handleFileSelect}\n />\n )}\n <NewItemModal\n isOpen={showCreateFolder}\n type=\"directory\"\n title=\"Create New Folder\"\n storage={fileStorage}\n onSubmit={this.handleCreateDirectorySubmit}\n onCancel={this.handleCreateDirectoryCancel}\n />\n </Panel>\n );\n }\n}\n\nexport default connector(FileExplorerPanel);\n"],"mappings":"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"}
1
+ {"version":3,"file":"FileExplorerPanel.js","names":["Log","getFileStorage","FileExplorer","FileExplorerToolbar","FileUtils","NewItemModal","React","connect","Panel","NotebookEvent","getDashboardSessionWrapper","log","module","mapStateToProps","state","ownProps","fileStorage","sessionWrapper","localDashboardId","session","config","sessionConfig","language","type","connector","forwardRef","isMouseEvent","e","mouseEvent","button","FileExplorerPanel","Component","handleError","error","isFocusEvent","event","detail","constructor","props","handleFileSelect","bind","handleCreateFile","handleCreateDirectory","handleCreateDirectoryCancel","handleCreateDirectorySubmit","handleDelete","handleRename","handleSessionOpened","handleSessionClosed","handleShow","handleSelectionChange","isShown","showCreateFolder","focusedFilePath","componentDidMount","isHidden","setState","glEventHub","notebookSettings","value","debug","emit","CREATE_NOTEBOOK","path","createDirectory","catch","files","forEach","file","CLOSE_FILE","id","filename","itemName","selectedItems","length","makePath","getPath","shouldFocus","fileMetadata","SELECT_NOTEBOOK","oldName","newName","RENAME_FILE","undefined","glContainer","render"],"sources":["../../src/panels/FileExplorerPanel.tsx"],"sourcesContent":["import { DashboardPanelProps } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport { getFileStorage, RootState } from '@deephaven/redux';\nimport FileExplorer, {\n FileExplorerToolbar,\n FileStorage,\n FileStorageItem,\n FileUtils,\n NewItemModal,\n} from '@deephaven/file-explorer';\nimport React, { ReactNode } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport Panel from './Panel';\nimport { NotebookEvent } from '../events';\nimport './FileExplorerPanel.scss';\nimport { getDashboardSessionWrapper } from '../redux';\n\nconst log = Log.module('FileExplorerPanel');\n\ntype StateProps = {\n fileStorage: FileStorage;\n language: string;\n session?: IdeSession;\n};\n\ntype OwnProps = DashboardPanelProps;\n\nconst mapStateToProps = (state: RootState, ownProps: OwnProps): StateProps => {\n const fileStorage = getFileStorage(state);\n const sessionWrapper = getDashboardSessionWrapper(\n state,\n ownProps.localDashboardId\n );\n const { session, config: sessionConfig } = sessionWrapper ?? {};\n const language = sessionConfig?.type;\n\n return {\n fileStorage,\n language,\n session,\n };\n};\n\nconst connector = connect(mapStateToProps, null, null, { forwardRef: true });\n\nexport type FileExplorerPanelProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type FileExplorerPanelState = {\n isShown: boolean;\n language?: string;\n session?: IdeSession;\n showCreateFolder: boolean;\n focusedFilePath: string;\n};\n\nfunction isMouseEvent<T>(e: React.SyntheticEvent<T>): e is React.MouseEvent<T> {\n const mouseEvent = e as React.MouseEvent<T>;\n return mouseEvent && typeof mouseEvent.button === 'number';\n}\n\n/**\n * Panel for showing a FileExplorer in a Dashboard.\n */\nexport class FileExplorerPanel extends React.Component<\n FileExplorerPanelProps,\n FileExplorerPanelState\n> {\n static COMPONENT = 'FileExplorerPanel';\n\n static TITLE = 'File Explorer';\n\n static handleError(error: Error): void {\n log.error(error);\n }\n\n /**\n * Return true if the event should open a file and focus it, otherwise false\n * @param event The event to check\n */\n static isFocusEvent(event: React.SyntheticEvent): boolean {\n if (isMouseEvent(event)) {\n // If it's not a double click, then it's a preview event\n return event.detail >= 2;\n }\n\n // Keyboard event should always open with focus\n return true;\n }\n\n constructor(props: FileExplorerPanelProps) {\n super(props);\n\n this.handleFileSelect = this.handleFileSelect.bind(this);\n this.handleCreateFile = this.handleCreateFile.bind(this);\n this.handleCreateDirectory = this.handleCreateDirectory.bind(this);\n this.handleCreateDirectoryCancel = this.handleCreateDirectoryCancel.bind(\n this\n );\n this.handleCreateDirectorySubmit = this.handleCreateDirectorySubmit.bind(\n this\n );\n this.handleDelete = this.handleDelete.bind(this);\n this.handleRename = this.handleRename.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleSelectionChange = this.handleSelectionChange.bind(this);\n\n const { session, language } = props;\n this.state = {\n isShown: false,\n language,\n session,\n showCreateFolder: false,\n focusedFilePath: '/',\n };\n }\n\n componentDidMount(): void {\n if (!this.isHidden()) {\n this.setState({ isShown: true });\n }\n }\n\n handleCreateFile(): void {\n const { glEventHub } = this.props;\n const { session, language } = this.state;\n const notebookSettings = {\n language,\n value: '',\n };\n log.debug('handleCreateFile', session, language, notebookSettings);\n glEventHub.emit(\n NotebookEvent.CREATE_NOTEBOOK,\n session,\n language,\n notebookSettings\n );\n }\n\n handleCreateDirectory(path?: string): void {\n this.setState({ showCreateFolder: true });\n }\n\n handleCreateDirectoryCancel(): void {\n log.debug('handleCreateDirectoryCancel');\n this.setState({\n showCreateFolder: false,\n });\n }\n\n handleCreateDirectorySubmit(path: string): void {\n log.debug('handleCreateDirectorySubmit', path);\n this.setState({ showCreateFolder: false });\n const { fileStorage } = this.props;\n fileStorage.createDirectory(path).catch(FileExplorerPanel.handleError);\n }\n\n handleDelete(files: FileStorageItem[]): void {\n const { glEventHub } = this.props;\n files.forEach(file => {\n glEventHub.emit(NotebookEvent.CLOSE_FILE, {\n id: file.filename,\n itemName: file.filename,\n });\n });\n }\n\n handleSelectionChange(selectedItems: FileStorageItem[]): void {\n let path = '/';\n if (selectedItems.length === 1) {\n if (selectedItems[0].type === 'directory') {\n path = FileUtils.makePath(selectedItems[0].filename);\n } else {\n path = FileUtils.getPath(selectedItems[0].filename);\n }\n }\n this.setState({ focusedFilePath: path });\n }\n\n handleFileSelect(file: FileStorageItem, event: React.SyntheticEvent): void {\n log.debug('fileSelect', file);\n if (file.type === 'directory') {\n return;\n }\n\n const shouldFocus = FileExplorerPanel.isFocusEvent(event);\n const fileMetadata = { id: file.filename, itemName: file.filename };\n const { glEventHub } = this.props;\n const { session, language } = this.state;\n const notebookSettings = {\n value: null,\n language,\n };\n glEventHub.emit(\n NotebookEvent.SELECT_NOTEBOOK,\n session,\n language,\n notebookSettings,\n fileMetadata,\n shouldFocus\n );\n }\n\n handleRename(oldName: string, newName: string): void {\n const { glEventHub } = this.props;\n log.debug('handleRename', oldName, newName);\n glEventHub.emit(NotebookEvent.RENAME_FILE, oldName, newName);\n }\n\n handleSessionOpened(\n session: IdeSession,\n { language }: { language: string }\n ): void {\n this.setState({\n session,\n language,\n });\n }\n\n handleSessionClosed(): void {\n this.setState({\n session: undefined,\n language: undefined,\n });\n }\n\n handleShow(): void {\n this.setState({ isShown: true });\n }\n\n isHidden(): boolean {\n const { glContainer } = this.props;\n const { isHidden } = glContainer;\n return isHidden;\n }\n\n render(): ReactNode {\n const { fileStorage, glContainer, glEventHub } = this.props;\n const { isShown, showCreateFolder, focusedFilePath } = this.state;\n return (\n <Panel\n className=\"file-explorer-panel\"\n componentPanel={this}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onSessionOpen={this.handleSessionOpened}\n onSessionClose={this.handleSessionClosed}\n onShow={this.handleShow}\n >\n <FileExplorerToolbar\n createFile={this.handleCreateFile}\n createFolder={this.handleCreateDirectory}\n />\n {isShown && (\n <FileExplorer\n isMultiSelect\n storage={fileStorage}\n onDelete={this.handleDelete}\n onRename={this.handleRename}\n onSelect={this.handleFileSelect}\n onSelectionChange={this.handleSelectionChange}\n />\n )}\n <NewItemModal\n isOpen={showCreateFolder}\n type=\"directory\"\n title=\"Create New Folder\"\n storage={fileStorage}\n onSubmit={this.handleCreateDirectorySubmit}\n onCancel={this.handleCreateDirectoryCancel}\n defaultValue={focusedFilePath}\n />\n </Panel>\n );\n }\n}\n\nexport default connector(FileExplorerPanel);\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Component, FocusEvent, MouseEvent, ReactElement } from 'react';
2
2
  import { ClosedPanel, ClosedPanels } from '@deephaven/dashboard';
3
- import { Container, EventEmitter, ReactComponentConfig } from '@deephaven/golden-layout';
3
+ import type { Container, EventEmitter, ReactComponentConfig } from '@deephaven/golden-layout';
4
4
  import type * as monaco from 'monaco-editor';
5
5
  import MarkdownEditor from '../controls/markdown/MarkdownEditor';
6
6
  import './MarkdownPanel.scss';
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownPanel.d.ts","sourceRoot":"","sources":["../../src/panels/MarkdownPanel.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG/E,OAAO,EACL,WAAW,EACX,YAAY,EAIb,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,SAAS,EACT,YAAY,EACZ,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAM7C,OAAO,cAAc,MAAM,qCAAqC,CAAC;AACjE,OAAO,sBAAsB,CAAC;AAI9B,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,kBAAkB;IAC1B,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,UAAU,kBAAkB;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGxB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,qBAAa,aAAc,SAAQ,SAAS,CAC1C,kBAAkB,EAClB,kBAAkB,CACnB;IACC,MAAM,CAAC,YAAY;;MAEjB;IAEF,MAAM,CAAC,SAAS,SAAmB;gBAEvB,KAAK,EAAE,kBAAkB;IA+BrC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IAEtC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;IAE7C,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IA2B/C,kBAAkB,yDAEhB;IAEF,0BAA0B,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI;IAW5D,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,GAAG,IAAI;IAK1E,oBAAoB,IAAI,IAAI;IAoB5B,kBAAkB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAQxD,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAK1D,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI;IAuBzD,kBAAkB,IAAI,IAAI;IAO1B,MAAM,IAAI,YAAY;CAyCvB;;;;;;AAYD,wBAEE"}
1
+ {"version":3,"file":"MarkdownPanel.d.ts","sourceRoot":"","sources":["../../src/panels/MarkdownPanel.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG/E,OAAO,EACL,WAAW,EACX,YAAY,EAIb,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAM7C,OAAO,cAAc,MAAM,qCAAqC,CAAC;AACjE,OAAO,sBAAsB,CAAC;AAI9B,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,kBAAkB;IAC1B,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,UAAU,kBAAkB;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGxB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,qBAAa,aAAc,SAAQ,SAAS,CAC1C,kBAAkB,EAClB,kBAAkB,CACnB;IACC,MAAM,CAAC,YAAY;;MAEjB;IAEF,MAAM,CAAC,SAAS,SAAmB;gBAEvB,KAAK,EAAE,kBAAkB;IA+BrC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IAEtC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC;IAE7C,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IA2B/C,kBAAkB,yDAEhB;IAEF,0BAA0B,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI;IAW5D,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,GAAG,IAAI;IAK1E,oBAAoB,IAAI,IAAI;IAoB5B,kBAAkB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAQxD,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAK1D,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI;IAuBzD,kBAAkB,IAAI,IAAI;IAO1B,MAAM,IAAI,YAAY;CAyCvB;;;;;;AAYD,wBAEE"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownPanel.js","names":["React","Component","memoize","connect","getClosedPanelsForDashboard","LayoutUtils","PanelEvent","Log","assertNotNull","Panel","MarkdownContainer","MarkdownStartPage","MarkdownEditor","log","module","MarkdownPanel","constructor","props","closedPanels","filter","panel","component","reverse","handleContainerDoubleClick","bind","handleCreateMarkdown","handleDeleteMarkdown","handleOpenMarkdown","handleEditorInitialized","handleEditorBlur","handleEditorResize","panelState","content","state","isStartPageShown","isEditing","markdownEditor","setEditorPosition","clickPositionY","container","markdownEditorContainer","editor","contentTop","getBoundingClientRect","top","contentScrollTop","scrollTop","contentScrollHeight","scrollHeight","totalLines","getModel","getLineCount","lineToFocus","Math","round","revealLine","setPosition","lineNumber","column","focus","event","dbClickPositionY","clientY","setState","debug","markdown","glContainer","glEventHub","config","getComponentConfigFromContainer","emit","REOPEN","DELETE","contains","relatedTarget","getValue","layout","render","closedMarkdowns","getClosedMarkdowns","undefined","mapStateToProps","ownProps","localDashboardId","forwardRef"],"sources":["../../src/panels/MarkdownPanel.tsx"],"sourcesContent":["import React, { Component, FocusEvent, MouseEvent, ReactElement } from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport {\n ClosedPanel,\n ClosedPanels,\n getClosedPanelsForDashboard,\n LayoutUtils,\n PanelEvent,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport {\n Container,\n EventEmitter,\n ReactComponentConfig,\n} from '@deephaven/golden-layout';\nimport type * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport { RootState } from '@deephaven/redux';\nimport Panel from './Panel';\nimport MarkdownContainer from '../controls/markdown/MarkdownContainer';\nimport MarkdownStartPage from '../controls/markdown/MarkdownStartPage';\nimport MarkdownEditor from '../controls/markdown/MarkdownEditor';\nimport './MarkdownPanel.scss';\n\nconst log = Log.module('MarkdownPanel');\n\ninterface PanelState {\n content?: string;\n}\n\ninterface MarkdownPanelProps {\n glContainer: Container;\n glEventHub: EventEmitter;\n panelState: PanelState;\n closedPanels: ClosedPanel[];\n}\n\ninterface MarkdownPanelState {\n isStartPageShown: boolean;\n isEditing: boolean;\n content?: string | null;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n}\n\nexport class MarkdownPanel extends Component<\n MarkdownPanelProps,\n MarkdownPanelState\n> {\n static defaultProps = {\n panelState: null,\n };\n\n static COMPONENT = 'MarkdownPanel';\n\n constructor(props: MarkdownPanelProps) {\n super(props);\n\n this.handleContainerDoubleClick = this.handleContainerDoubleClick.bind(\n this\n );\n this.handleCreateMarkdown = this.handleCreateMarkdown.bind(this);\n this.handleDeleteMarkdown = this.handleDeleteMarkdown.bind(this);\n this.handleOpenMarkdown = this.handleOpenMarkdown.bind(this);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleEditorResize = this.handleEditorResize.bind(this);\n\n const { panelState } = props;\n let content = null;\n if (panelState && panelState.content) {\n ({ content } = panelState);\n }\n\n this.state = {\n isStartPageShown: content == null,\n isEditing: false,\n content,\n\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n\n this.markdownEditor = null;\n }\n\n markdownEditor: MarkdownEditor | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n setEditorPosition(clickPositionY: number): void {\n assertNotNull(this.markdownEditor);\n const { container: markdownEditorContainer } = this.markdownEditor;\n if (this.editor && markdownEditorContainer) {\n const contentTop = markdownEditorContainer.getBoundingClientRect().top;\n const contentScrollTop = markdownEditorContainer.scrollTop;\n const contentScrollHeight = markdownEditorContainer.scrollHeight;\n const totalLines = this.editor.getModel()?.getLineCount() ?? 0;\n\n let lineToFocus = Math.round(\n ((contentScrollTop + clickPositionY - contentTop) /\n contentScrollHeight) *\n totalLines\n );\n if (lineToFocus > totalLines) {\n lineToFocus = totalLines;\n }\n\n this.editor.revealLine(lineToFocus);\n this.editor.setPosition({\n lineNumber: lineToFocus,\n column: 1,\n });\n this.editor.focus();\n }\n }\n\n getClosedMarkdowns = memoize((closedPanels: ClosedPanels) =>\n closedPanels.filter(panel => panel.component === 'MarkdownPanel').reverse()\n );\n\n handleContainerDoubleClick(event: MouseEvent<Element>): void {\n const { isEditing } = this.state;\n const dbClickPositionY = event.clientY;\n\n if (!isEditing) {\n this.setState({ isEditing: true }, () => {\n this.setEditorPosition(dbClickPositionY);\n });\n }\n }\n\n handleEditorInitialized(editor: monaco.editor.IStandaloneCodeEditor): void {\n log.debug('Markdown Editor Initialized...');\n this.editor = editor;\n }\n\n handleCreateMarkdown(): void {\n log.debug('create markdown...');\n\n this.setState(\n {\n isStartPageShown: false,\n content: '',\n isEditing: true,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content: '' },\n },\n () => {\n if (this.editor && this.editor.focus) {\n this.editor.focus();\n }\n }\n );\n }\n\n handleOpenMarkdown(markdown: ReactComponentConfig): void {\n log.debug('open markdown...', markdown);\n\n const { glContainer, glEventHub } = this.props;\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n glEventHub.emit(PanelEvent.REOPEN, markdown, config);\n }\n\n handleDeleteMarkdown(markdown: ReactComponentConfig): void {\n const { glEventHub } = this.props;\n glEventHub.emit(PanelEvent.DELETE, markdown);\n }\n\n handleEditorBlur(event: FocusEvent<HTMLDivElement>): void {\n log.debug(`markdown content changed, saving...`);\n const { isEditing } = this.state;\n\n // if not in edit mode, or in edit mode but blur went to an internal monaco field (like search)\n if (\n !isEditing ||\n this.markdownEditor?.container?.contains(event.relatedTarget)\n ) {\n return;\n }\n\n const content = this.editor?.getValue();\n\n this.setState({\n content,\n isEditing: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content },\n });\n }\n\n handleEditorResize(): void {\n const { isEditing } = this.state;\n if (isEditing && this.editor) {\n this.editor.layout();\n }\n }\n\n render(): ReactElement {\n const { glContainer, glEventHub, closedPanels } = this.props;\n const { isEditing, isStartPageShown, content } = this.state;\n const closedMarkdowns = this.getClosedMarkdowns(closedPanels);\n\n return (\n <Panel\n glContainer={glContainer}\n glEventHub={glEventHub}\n className=\"markdown-panel\"\n componentPanel={this}\n onResize={this.handleEditorResize}\n onBlur={this.handleEditorBlur}\n isClonable\n isRenamable\n >\n {isStartPageShown ? (\n <MarkdownStartPage\n closedMarkdowns={closedMarkdowns}\n onCreate={this.handleCreateMarkdown}\n onOpen={this.handleOpenMarkdown}\n onDelete={this.handleDeleteMarkdown}\n />\n ) : (\n <MarkdownContainer\n isEditing={isEditing}\n onDoubleClick={this.handleContainerDoubleClick}\n >\n <MarkdownEditor\n ref={markdownEditor => {\n this.markdownEditor = markdownEditor;\n }}\n isEditing={isEditing}\n content={content ?? undefined}\n onEditorInitialized={this.handleEditorInitialized}\n />\n </MarkdownContainer>\n )}\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n) => {\n const { localDashboardId } = ownProps;\n return {\n closedPanels: getClosedPanelsForDashboard(state, localDashboardId),\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n MarkdownPanel\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"MarkdownPanel.js","names":["React","Component","memoize","connect","getClosedPanelsForDashboard","LayoutUtils","PanelEvent","Log","assertNotNull","Panel","MarkdownContainer","MarkdownStartPage","MarkdownEditor","log","module","MarkdownPanel","constructor","props","closedPanels","filter","panel","component","reverse","handleContainerDoubleClick","bind","handleCreateMarkdown","handleDeleteMarkdown","handleOpenMarkdown","handleEditorInitialized","handleEditorBlur","handleEditorResize","panelState","content","state","isStartPageShown","isEditing","markdownEditor","setEditorPosition","clickPositionY","container","markdownEditorContainer","editor","contentTop","getBoundingClientRect","top","contentScrollTop","scrollTop","contentScrollHeight","scrollHeight","totalLines","getModel","getLineCount","lineToFocus","Math","round","revealLine","setPosition","lineNumber","column","focus","event","dbClickPositionY","clientY","setState","debug","markdown","glContainer","glEventHub","config","getComponentConfigFromContainer","emit","REOPEN","DELETE","contains","relatedTarget","getValue","layout","render","closedMarkdowns","getClosedMarkdowns","undefined","mapStateToProps","ownProps","localDashboardId","forwardRef"],"sources":["../../src/panels/MarkdownPanel.tsx"],"sourcesContent":["import React, { Component, FocusEvent, MouseEvent, ReactElement } from 'react';\nimport memoize from 'memoize-one';\nimport { connect } from 'react-redux';\nimport {\n ClosedPanel,\n ClosedPanels,\n getClosedPanelsForDashboard,\n LayoutUtils,\n PanelEvent,\n} from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type {\n Container,\n EventEmitter,\n ReactComponentConfig,\n} from '@deephaven/golden-layout';\nimport type * as monaco from 'monaco-editor';\nimport { assertNotNull } from '@deephaven/utils';\nimport { RootState } from '@deephaven/redux';\nimport Panel from './Panel';\nimport MarkdownContainer from '../controls/markdown/MarkdownContainer';\nimport MarkdownStartPage from '../controls/markdown/MarkdownStartPage';\nimport MarkdownEditor from '../controls/markdown/MarkdownEditor';\nimport './MarkdownPanel.scss';\n\nconst log = Log.module('MarkdownPanel');\n\ninterface PanelState {\n content?: string;\n}\n\ninterface MarkdownPanelProps {\n glContainer: Container;\n glEventHub: EventEmitter;\n panelState: PanelState;\n closedPanels: ClosedPanel[];\n}\n\ninterface MarkdownPanelState {\n isStartPageShown: boolean;\n isEditing: boolean;\n content?: string | null;\n\n // eslint-disable-next-line react/no-unused-state\n panelState: PanelState;\n}\n\nexport class MarkdownPanel extends Component<\n MarkdownPanelProps,\n MarkdownPanelState\n> {\n static defaultProps = {\n panelState: null,\n };\n\n static COMPONENT = 'MarkdownPanel';\n\n constructor(props: MarkdownPanelProps) {\n super(props);\n\n this.handleContainerDoubleClick = this.handleContainerDoubleClick.bind(\n this\n );\n this.handleCreateMarkdown = this.handleCreateMarkdown.bind(this);\n this.handleDeleteMarkdown = this.handleDeleteMarkdown.bind(this);\n this.handleOpenMarkdown = this.handleOpenMarkdown.bind(this);\n this.handleEditorInitialized = this.handleEditorInitialized.bind(this);\n this.handleEditorBlur = this.handleEditorBlur.bind(this);\n this.handleEditorResize = this.handleEditorResize.bind(this);\n\n const { panelState } = props;\n let content = null;\n if (panelState && panelState.content) {\n ({ content } = panelState);\n }\n\n this.state = {\n isStartPageShown: content == null,\n isEditing: false,\n content,\n\n // eslint-disable-next-line react/no-unused-state\n panelState,\n };\n\n this.markdownEditor = null;\n }\n\n markdownEditor: MarkdownEditor | null;\n\n editor?: monaco.editor.IStandaloneCodeEditor;\n\n setEditorPosition(clickPositionY: number): void {\n assertNotNull(this.markdownEditor);\n const { container: markdownEditorContainer } = this.markdownEditor;\n if (this.editor && markdownEditorContainer) {\n const contentTop = markdownEditorContainer.getBoundingClientRect().top;\n const contentScrollTop = markdownEditorContainer.scrollTop;\n const contentScrollHeight = markdownEditorContainer.scrollHeight;\n const totalLines = this.editor.getModel()?.getLineCount() ?? 0;\n\n let lineToFocus = Math.round(\n ((contentScrollTop + clickPositionY - contentTop) /\n contentScrollHeight) *\n totalLines\n );\n if (lineToFocus > totalLines) {\n lineToFocus = totalLines;\n }\n\n this.editor.revealLine(lineToFocus);\n this.editor.setPosition({\n lineNumber: lineToFocus,\n column: 1,\n });\n this.editor.focus();\n }\n }\n\n getClosedMarkdowns = memoize((closedPanels: ClosedPanels) =>\n closedPanels.filter(panel => panel.component === 'MarkdownPanel').reverse()\n );\n\n handleContainerDoubleClick(event: MouseEvent<Element>): void {\n const { isEditing } = this.state;\n const dbClickPositionY = event.clientY;\n\n if (!isEditing) {\n this.setState({ isEditing: true }, () => {\n this.setEditorPosition(dbClickPositionY);\n });\n }\n }\n\n handleEditorInitialized(editor: monaco.editor.IStandaloneCodeEditor): void {\n log.debug('Markdown Editor Initialized...');\n this.editor = editor;\n }\n\n handleCreateMarkdown(): void {\n log.debug('create markdown...');\n\n this.setState(\n {\n isStartPageShown: false,\n content: '',\n isEditing: true,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content: '' },\n },\n () => {\n if (this.editor && this.editor.focus) {\n this.editor.focus();\n }\n }\n );\n }\n\n handleOpenMarkdown(markdown: ReactComponentConfig): void {\n log.debug('open markdown...', markdown);\n\n const { glContainer, glEventHub } = this.props;\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n glEventHub.emit(PanelEvent.REOPEN, markdown, config);\n }\n\n handleDeleteMarkdown(markdown: ReactComponentConfig): void {\n const { glEventHub } = this.props;\n glEventHub.emit(PanelEvent.DELETE, markdown);\n }\n\n handleEditorBlur(event: FocusEvent<HTMLDivElement>): void {\n log.debug(`markdown content changed, saving...`);\n const { isEditing } = this.state;\n\n // if not in edit mode, or in edit mode but blur went to an internal monaco field (like search)\n if (\n !isEditing ||\n this.markdownEditor?.container?.contains(event.relatedTarget)\n ) {\n return;\n }\n\n const content = this.editor?.getValue();\n\n this.setState({\n content,\n isEditing: false,\n\n // eslint-disable-next-line react/no-unused-state\n panelState: { content },\n });\n }\n\n handleEditorResize(): void {\n const { isEditing } = this.state;\n if (isEditing && this.editor) {\n this.editor.layout();\n }\n }\n\n render(): ReactElement {\n const { glContainer, glEventHub, closedPanels } = this.props;\n const { isEditing, isStartPageShown, content } = this.state;\n const closedMarkdowns = this.getClosedMarkdowns(closedPanels);\n\n return (\n <Panel\n glContainer={glContainer}\n glEventHub={glEventHub}\n className=\"markdown-panel\"\n componentPanel={this}\n onResize={this.handleEditorResize}\n onBlur={this.handleEditorBlur}\n isClonable\n isRenamable\n >\n {isStartPageShown ? (\n <MarkdownStartPage\n closedMarkdowns={closedMarkdowns}\n onCreate={this.handleCreateMarkdown}\n onOpen={this.handleOpenMarkdown}\n onDelete={this.handleDeleteMarkdown}\n />\n ) : (\n <MarkdownContainer\n isEditing={isEditing}\n onDoubleClick={this.handleContainerDoubleClick}\n >\n <MarkdownEditor\n ref={markdownEditor => {\n this.markdownEditor = markdownEditor;\n }}\n isEditing={isEditing}\n content={content ?? undefined}\n onEditorInitialized={this.handleEditorInitialized}\n />\n </MarkdownContainer>\n )}\n </Panel>\n );\n }\n}\n\nconst mapStateToProps = (\n state: RootState,\n ownProps: { localDashboardId: string }\n) => {\n const { localDashboardId } = ownProps;\n return {\n closedPanels: getClosedPanelsForDashboard(state, localDashboardId),\n };\n};\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(\n MarkdownPanel\n);\n"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAuE,OAAvE;AACA,OAAOC,OAAP,MAAoB,aAApB;AACA,SAASC,OAAT,QAAwB,aAAxB;AACA,SAGEC,2BAHF,EAIEC,WAJF,EAKEC,UALF,QAMO,sBANP;AAOA,OAAOC,GAAP,MAAgB,gBAAhB;AAOA,SAASC,aAAT,QAA8B,kBAA9B;OAEOC,K;OACAC,iB;OACAC,iB;OACAC,c;;AAGP,IAAMC,GAAG,GAAGN,GAAG,CAACO,MAAJ,CAAW,eAAX,CAAZ;AAsBA,OAAO,MAAMC,aAAN,SAA4Bd,SAA5B,CAGL;EAOAe,WAAW,CAACC,KAAD,EAA4B;IACrC,MAAMA,KAAN;;IADqC;;IAAA;;IAAA,4CA8DlBf,OAAO,CAAEgB,YAAD,IAC3BA,YAAY,CAACC,MAAb,CAAoBC,KAAK,IAAIA,KAAK,CAACC,SAAN,KAAoB,eAAjD,EAAkEC,OAAlE,EAD0B,CA9DW;;IAGrC,KAAKC,0BAAL,GAAkC,KAAKA,0BAAL,CAAgCC,IAAhC,CAChC,IADgC,CAAlC;IAGA,KAAKC,oBAAL,GAA4B,KAAKA,oBAAL,CAA0BD,IAA1B,CAA+B,IAA/B,CAA5B;IACA,KAAKE,oBAAL,GAA4B,KAAKA,oBAAL,CAA0BF,IAA1B,CAA+B,IAA/B,CAA5B;IACA,KAAKG,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBH,IAAxB,CAA6B,IAA7B,CAA1B;IACA,KAAKI,uBAAL,GAA+B,KAAKA,uBAAL,CAA6BJ,IAA7B,CAAkC,IAAlC,CAA/B;IACA,KAAKK,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBL,IAAtB,CAA2B,IAA3B,CAAxB;IACA,KAAKM,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBN,IAAxB,CAA6B,IAA7B,CAA1B;IAEA,IAAM;MAAEO;IAAF,IAAiBd,KAAvB;IACA,IAAIe,OAAO,GAAG,IAAd;;IACA,IAAID,UAAU,IAAIA,UAAU,CAACC,OAA7B,EAAsC;MACpC,CAAC;QAAEA;MAAF,IAAcD,UAAf;IACD;;IAED,KAAKE,KAAL,GAAa;MACXC,gBAAgB,EAAEF,OAAO,IAAI,IADlB;MAEXG,SAAS,EAAE,KAFA;MAGXH,OAHW;MAKX;MACAD;IANW,CAAb;IASA,KAAKK,cAAL,GAAsB,IAAtB;EACD;;EAMDC,iBAAiB,CAACC,cAAD,EAA+B;IAC9C9B,aAAa,CAAC,KAAK4B,cAAN,CAAb;IACA,IAAM;MAAEG,SAAS,EAAEC;IAAb,IAAyC,KAAKJ,cAApD;;IACA,IAAI,KAAKK,MAAL,IAAeD,uBAAnB,EAA4C;MAAA;;MAC1C,IAAME,UAAU,GAAGF,uBAAuB,CAACG,qBAAxB,GAAgDC,GAAnE;MACA,IAAMC,gBAAgB,GAAGL,uBAAuB,CAACM,SAAjD;MACA,IAAMC,mBAAmB,GAAGP,uBAAuB,CAACQ,YAApD;MACA,IAAMC,UAAU,sDAAG,KAAKR,MAAL,CAAYS,QAAZ,EAAH,2DAAG,uBAAwBC,YAAxB,EAAH,yEAA6C,CAA7D;MAEA,IAAIC,WAAW,GAAGC,IAAI,CAACC,KAAL,CACf,CAACT,gBAAgB,GAAGP,cAAnB,GAAoCI,UAArC,IACCK,mBADF,GAEEE,UAHc,CAAlB;;MAKA,IAAIG,WAAW,GAAGH,UAAlB,EAA8B;QAC5BG,WAAW,GAAGH,UAAd;MACD;;MAED,KAAKR,MAAL,CAAYc,UAAZ,CAAuBH,WAAvB;MACA,KAAKX,MAAL,CAAYe,WAAZ,CAAwB;QACtBC,UAAU,EAAEL,WADU;QAEtBM,MAAM,EAAE;MAFc,CAAxB;MAIA,KAAKjB,MAAL,CAAYkB,KAAZ;IACD;EACF;;EAMDpC,0BAA0B,CAACqC,KAAD,EAAmC;IAC3D,IAAM;MAAEzB;IAAF,IAAgB,KAAKF,KAA3B;IACA,IAAM4B,gBAAgB,GAAGD,KAAK,CAACE,OAA/B;;IAEA,IAAI,CAAC3B,SAAL,EAAgB;MACd,KAAK4B,QAAL,CAAc;QAAE5B,SAAS,EAAE;MAAb,CAAd,EAAmC,MAAM;QACvC,KAAKE,iBAAL,CAAuBwB,gBAAvB;MACD,CAFD;IAGD;EACF;;EAEDjC,uBAAuB,CAACa,MAAD,EAAoD;IACzE5B,GAAG,CAACmD,KAAJ,CAAU,gCAAV;IACA,KAAKvB,MAAL,GAAcA,MAAd;EACD;;EAEDhB,oBAAoB,GAAS;IAC3BZ,GAAG,CAACmD,KAAJ,CAAU,oBAAV;IAEA,KAAKD,QAAL,CACE;MACE7B,gBAAgB,EAAE,KADpB;MAEEF,OAAO,EAAE,EAFX;MAGEG,SAAS,EAAE,IAHb;MAKE;MACAJ,UAAU,EAAE;QAAEC,OAAO,EAAE;MAAX;IANd,CADF,EASE,MAAM;MACJ,IAAI,KAAKS,MAAL,IAAe,KAAKA,MAAL,CAAYkB,KAA/B,EAAsC;QACpC,KAAKlB,MAAL,CAAYkB,KAAZ;MACD;IACF,CAbH;EAeD;;EAEDhC,kBAAkB,CAACsC,QAAD,EAAuC;IACvDpD,GAAG,CAACmD,KAAJ,CAAU,kBAAV,EAA8BC,QAA9B;IAEA,IAAM;MAAEC,WAAF;MAAeC;IAAf,IAA8B,KAAKlD,KAAzC;IACA,IAAMmD,MAAM,GAAG/D,WAAW,CAACgE,+BAAZ,CAA4CH,WAA5C,CAAf;IACAC,UAAU,CAACG,IAAX,CAAgBhE,UAAU,CAACiE,MAA3B,EAAmCN,QAAnC,EAA6CG,MAA7C;EACD;;EAED1C,oBAAoB,CAACuC,QAAD,EAAuC;IACzD,IAAM;MAAEE;IAAF,IAAiB,KAAKlD,KAA5B;IACAkD,UAAU,CAACG,IAAX,CAAgBhE,UAAU,CAACkE,MAA3B,EAAmCP,QAAnC;EACD;;EAEDpC,gBAAgB,CAAC+B,KAAD,EAA0C;IAAA;;IACxD/C,GAAG,CAACmD,KAAJ;IACA,IAAM;MAAE7B;IAAF,IAAgB,KAAKF,KAA3B,CAFwD,CAIxD;;IACA,IACE,CAACE,SAAD,4BACA,KAAKC,cADL,0EACA,qBAAqBG,SADrB,kDACA,sBAAgCkC,QAAhC,CAAyCb,KAAK,CAACc,aAA/C,CAFF,EAGE;MACA;IACD;;IAED,IAAM1C,OAAO,mBAAG,KAAKS,MAAR,iDAAG,aAAakC,QAAb,EAAhB;IAEA,KAAKZ,QAAL,CAAc;MACZ/B,OADY;MAEZG,SAAS,EAAE,KAFC;MAIZ;MACAJ,UAAU,EAAE;QAAEC;MAAF;IALA,CAAd;EAOD;;EAEDF,kBAAkB,GAAS;IACzB,IAAM;MAAEK;IAAF,IAAgB,KAAKF,KAA3B;;IACA,IAAIE,SAAS,IAAI,KAAKM,MAAtB,EAA8B;MAC5B,KAAKA,MAAL,CAAYmC,MAAZ;IACD;EACF;;EAEDC,MAAM,GAAiB;IACrB,IAAM;MAAEX,WAAF;MAAeC,UAAf;MAA2BjD;IAA3B,IAA4C,KAAKD,KAAvD;IACA,IAAM;MAAEkB,SAAF;MAAaD,gBAAb;MAA+BF;IAA/B,IAA2C,KAAKC,KAAtD;IACA,IAAM6C,eAAe,GAAG,KAAKC,kBAAL,CAAwB7D,YAAxB,CAAxB;IAEA,oBACE,oBAAC,KAAD;MACE,WAAW,EAAEgD,WADf;MAEE,UAAU,EAAEC,UAFd;MAGE,SAAS,EAAC,gBAHZ;MAIE,cAAc,EAAE,IAJlB;MAKE,QAAQ,EAAE,KAAKrC,kBALjB;MAME,MAAM,EAAE,KAAKD,gBANf;MAOE,UAAU,MAPZ;MAQE,WAAW;IARb,GAUGK,gBAAgB,gBACf,oBAAC,iBAAD;MACE,eAAe,EAAE4C,eADnB;MAEE,QAAQ,EAAE,KAAKrD,oBAFjB;MAGE,MAAM,EAAE,KAAKE,kBAHf;MAIE,QAAQ,EAAE,KAAKD;IAJjB,EADe,gBAQf,oBAAC,iBAAD;MACE,SAAS,EAAES,SADb;MAEE,aAAa,EAAE,KAAKZ;IAFtB,gBAIE,oBAAC,cAAD;MACE,GAAG,EAAEa,cAAc,IAAI;QACrB,KAAKA,cAAL,GAAsBA,cAAtB;MACD,CAHH;MAIE,SAAS,EAAED,SAJb;MAKE,OAAO,EAAEH,OAAF,aAAEA,OAAF,cAAEA,OAAF,GAAagD,SALtB;MAME,mBAAmB,EAAE,KAAKpD;IAN5B,EAJF,CAlBJ,CADF;EAmCD;;AAhMD;;gBAHWb,a,kBAIW;EACpBgB,UAAU,EAAE;AADQ,C;;gBAJXhB,a,eAQQ,e;;AA8LrB,IAAMkE,eAAe,GAAG,CACtBhD,KADsB,EAEtBiD,QAFsB,KAGnB;EACH,IAAM;IAAEC;EAAF,IAAuBD,QAA7B;EACA,OAAO;IACLhE,YAAY,EAAEd,2BAA2B,CAAC6B,KAAD,EAAQkD,gBAAR;EADpC,CAAP;AAGD,CARD;;AAUA,eAAehF,OAAO,CAAC8E,eAAD,EAAkB,IAAlB,EAAwB,IAAxB,EAA8B;EAAEG,UAAU,EAAE;AAAd,CAA9B,CAAP,CACbrE,aADa,CAAf"}
@@ -0,0 +1,14 @@
1
+ import { File, FileStorage, FileStorageItem, FileStorageTable } from '@deephaven/file-explorer';
2
+ export declare class MockFileStorage implements FileStorage {
3
+ private items;
4
+ constructor(items: FileStorageItem[]);
5
+ getTable(): Promise<FileStorageTable>;
6
+ saveFile(file: File): Promise<File>;
7
+ loadFile(name: string): Promise<File>;
8
+ deleteFile(name: string): Promise<void>;
9
+ moveFile(name: string, newName: string): Promise<void>;
10
+ info(name: string): Promise<FileStorageItem>;
11
+ createDirectory(name: string): Promise<FileStorageItem>;
12
+ }
13
+ export default MockFileStorage;
14
+ //# sourceMappingURL=MockFileStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockFileStorage.d.ts","sourceRoot":"","sources":["../../src/panels/MockFileStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,WAAW,EACX,eAAe,EACf,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAGlC,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,KAAK,CAAoB;gBAErB,KAAK,EAAE,eAAe,EAAE;IAI9B,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAK3C,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAInC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAI5C,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;CAGxD;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,51 @@
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2
+
3
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
4
+
5
+ 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; }
6
+
7
+ import MockFileStorageTable from "./MockFileStorageTable.js";
8
+ export class MockFileStorage {
9
+ constructor(items) {
10
+ _defineProperty(this, "items", void 0);
11
+
12
+ this.items = items;
13
+ }
14
+
15
+ getTable() {
16
+ var _this = this;
17
+
18
+ return _asyncToGenerator(function* () {
19
+ return new MockFileStorageTable(_this.items);
20
+ })();
21
+ }
22
+ /* eslint-disable class-methods-use-this */
23
+
24
+
25
+ saveFile(file) {
26
+ throw new Error('Method not implemented.');
27
+ }
28
+
29
+ loadFile(name) {
30
+ throw new Error('Method not implemented.');
31
+ }
32
+
33
+ deleteFile(name) {
34
+ throw new Error('Method not implemented.');
35
+ }
36
+
37
+ moveFile(name, newName) {
38
+ throw new Error('Method not implemented.');
39
+ }
40
+
41
+ info(name) {
42
+ throw new Error('Method not implemented.');
43
+ }
44
+
45
+ createDirectory(name) {
46
+ throw new Error('Method not implemented.');
47
+ }
48
+
49
+ }
50
+ export default MockFileStorage;
51
+ //# sourceMappingURL=MockFileStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockFileStorage.js","names":["MockFileStorageTable","MockFileStorage","constructor","items","getTable","saveFile","file","Error","loadFile","name","deleteFile","moveFile","newName","info","createDirectory"],"sources":["../../src/panels/MockFileStorage.ts"],"sourcesContent":["import {\n File,\n FileStorage,\n FileStorageItem,\n FileStorageTable,\n} from '@deephaven/file-explorer';\nimport MockFileStorageTable from './MockFileStorageTable';\n\nexport class MockFileStorage implements FileStorage {\n private items: FileStorageItem[];\n\n constructor(items: FileStorageItem[]) {\n this.items = items;\n }\n\n async getTable(): Promise<FileStorageTable> {\n return new MockFileStorageTable(this.items);\n }\n\n /* eslint-disable class-methods-use-this */\n saveFile(file: File): Promise<File> {\n throw new Error('Method not implemented.');\n }\n\n loadFile(name: string): Promise<File> {\n throw new Error('Method not implemented.');\n }\n\n deleteFile(name: string): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n moveFile(name: string, newName: string): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n info(name: string): Promise<FileStorageItem> {\n throw new Error('Method not implemented.');\n }\n\n createDirectory(name: string): Promise<FileStorageItem> {\n throw new Error('Method not implemented.');\n }\n}\n\nexport default MockFileStorage;\n"],"mappings":";;;;;;OAMOA,oB;AAEP,OAAO,MAAMC,eAAN,CAA6C;EAGlDC,WAAW,CAACC,KAAD,EAA2B;IAAA;;IACpC,KAAKA,KAAL,GAAaA,KAAb;EACD;;EAEKC,QAAQ,GAA8B;IAAA;;IAAA;MAC1C,OAAO,IAAIJ,oBAAJ,CAAyB,KAAI,CAACG,KAA9B,CAAP;IAD0C;EAE3C;EAED;;;EACAE,QAAQ,CAACC,IAAD,EAA4B;IAClC,MAAM,IAAIC,KAAJ,CAAU,yBAAV,CAAN;EACD;;EAEDC,QAAQ,CAACC,IAAD,EAA8B;IACpC,MAAM,IAAIF,KAAJ,CAAU,yBAAV,CAAN;EACD;;EAEDG,UAAU,CAACD,IAAD,EAA8B;IACtC,MAAM,IAAIF,KAAJ,CAAU,yBAAV,CAAN;EACD;;EAEDI,QAAQ,CAACF,IAAD,EAAeG,OAAf,EAA+C;IACrD,MAAM,IAAIL,KAAJ,CAAU,yBAAV,CAAN;EACD;;EAEDM,IAAI,CAACJ,IAAD,EAAyC;IAC3C,MAAM,IAAIF,KAAJ,CAAU,yBAAV,CAAN;EACD;;EAEDO,eAAe,CAACL,IAAD,EAAyC;IACtD,MAAM,IAAIF,KAAJ,CAAU,yBAAV,CAAN;EACD;;AAlCiD;AAqCpD,eAAeN,eAAf"}
@@ -0,0 +1,20 @@
1
+ import { FileStorageItem, FileStorageTable } from '@deephaven/file-explorer';
2
+ import { ViewportData, IndexRange, StorageSnapshot, StorageTableViewport, FilterConfig, SortConfig, ViewportUpdateCallback, StorageListenerRemover } from '@deephaven/storage';
3
+ export declare class MockFileStorageTable implements FileStorageTable {
4
+ private items;
5
+ private onUpdateCallback?;
6
+ constructor(items: FileStorageItem[]);
7
+ setSearch(search: string): void;
8
+ setExpanded(path: string, expanded: boolean): Promise<void>;
9
+ getViewportData(): Promise<ViewportData<FileStorageItem>>;
10
+ getSnapshot(sortedRanges: IndexRange[]): Promise<StorageSnapshot<FileStorageItem>>;
11
+ setViewport(viewport: StorageTableViewport): Promise<void>;
12
+ setFilters(config: FilterConfig[] | null): void;
13
+ setSorts(config: SortConfig[] | null): void;
14
+ setReversed(isReversed: boolean): void;
15
+ close(): void;
16
+ onUpdate(callback: ViewportUpdateCallback<FileStorageItem>): StorageListenerRemover;
17
+ get size(): number;
18
+ }
19
+ export default MockFileStorageTable;
20
+ //# sourceMappingURL=MockFileStorageTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockFileStorageTable.d.ts","sourceRoot":"","sources":["../../src/panels/MockFileStorageTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EACL,YAAY,EACZ,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,KAAK,CAAoB;IAEjC,OAAO,CAAC,gBAAgB,CAAC,CAA0C;gBAEvD,KAAK,EAAE,eAAe,EAAE;IAKpC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;IAOnD,WAAW,CACf,YAAY,EAAE,UAAU,EAAE,GACzB,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;IAItC,WAAW,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,IAAI;IAI/C,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,GAAG,IAAI;IAI3C,WAAW,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAItC,KAAK,IAAI,IAAI;IAIb,QAAQ,CACN,QAAQ,EAAE,sBAAsB,CAAC,eAAe,CAAC,GAChD,sBAAsB;IAKzB,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,73 @@
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
2
+
3
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
4
+
5
+ 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; }
6
+
7
+ export class MockFileStorageTable {
8
+ constructor(items) {
9
+ _defineProperty(this, "items", void 0);
10
+
11
+ _defineProperty(this, "onUpdateCallback", void 0);
12
+
13
+ this.items = items;
14
+ }
15
+ /* eslint-disable class-methods-use-this */
16
+
17
+
18
+ setSearch(search) {// no-op
19
+ }
20
+
21
+ setExpanded(path, expanded) {
22
+ return Promise.resolve();
23
+ }
24
+
25
+ getViewportData() {
26
+ return Promise.resolve({
27
+ items: this.items,
28
+ // Fill in with mock items
29
+ offset: 0
30
+ });
31
+ }
32
+
33
+ getSnapshot(sortedRanges) {
34
+ return _asyncToGenerator(function* () {
35
+ throw new Error('Method not implemented.');
36
+ })();
37
+ }
38
+
39
+ setViewport(viewport) {
40
+ var _this = this;
41
+
42
+ return _asyncToGenerator(function* () {
43
+ var _this$onUpdateCallbac;
44
+
45
+ var loadedViewportData = yield _this.getViewportData();
46
+ (_this$onUpdateCallbac = _this.onUpdateCallback) === null || _this$onUpdateCallbac === void 0 ? void 0 : _this$onUpdateCallbac.call(_this, loadedViewportData);
47
+ })();
48
+ }
49
+
50
+ setFilters(config) {// no-op
51
+ }
52
+
53
+ setSorts(config) {// no-op
54
+ }
55
+
56
+ setReversed(isReversed) {// no-op
57
+ }
58
+
59
+ close() {// no-op
60
+ }
61
+
62
+ onUpdate(callback) {
63
+ this.onUpdateCallback = callback;
64
+ return jest.fn();
65
+ }
66
+
67
+ get size() {
68
+ return this.items.length;
69
+ }
70
+
71
+ }
72
+ export default MockFileStorageTable;
73
+ //# sourceMappingURL=MockFileStorageTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockFileStorageTable.js","names":["MockFileStorageTable","constructor","items","setSearch","search","setExpanded","path","expanded","Promise","resolve","getViewportData","offset","getSnapshot","sortedRanges","Error","setViewport","viewport","loadedViewportData","onUpdateCallback","setFilters","config","setSorts","setReversed","isReversed","close","onUpdate","callback","jest","fn","size","length"],"sources":["../../src/panels/MockFileStorageTable.ts"],"sourcesContent":["import { FileStorageItem, FileStorageTable } from '@deephaven/file-explorer';\nimport {\n ViewportData,\n IndexRange,\n StorageSnapshot,\n StorageTableViewport,\n FilterConfig,\n SortConfig,\n ViewportUpdateCallback,\n StorageListenerRemover,\n} from '@deephaven/storage';\n\nexport class MockFileStorageTable implements FileStorageTable {\n private items: FileStorageItem[];\n\n private onUpdateCallback?: ViewportUpdateCallback<FileStorageItem>;\n\n constructor(items: FileStorageItem[]) {\n this.items = items;\n }\n\n /* eslint-disable class-methods-use-this */\n setSearch(search: string): void {\n // no-op\n }\n\n setExpanded(path: string, expanded: boolean): Promise<void> {\n return Promise.resolve();\n }\n\n getViewportData(): Promise<ViewportData<FileStorageItem>> {\n return Promise.resolve({\n items: this.items, // Fill in with mock items\n offset: 0,\n });\n }\n\n async getSnapshot(\n sortedRanges: IndexRange[]\n ): Promise<StorageSnapshot<FileStorageItem>> {\n throw new Error('Method not implemented.');\n }\n\n async setViewport(viewport: StorageTableViewport): Promise<void> {\n const loadedViewportData = await this.getViewportData();\n this.onUpdateCallback?.(loadedViewportData);\n }\n\n setFilters(config: FilterConfig[] | null): void {\n // no-op\n }\n\n setSorts(config: SortConfig[] | null): void {\n // no-op\n }\n\n setReversed(isReversed: boolean): void {\n // no-op\n }\n\n close(): void {\n // no-op\n }\n\n onUpdate(\n callback: ViewportUpdateCallback<FileStorageItem>\n ): StorageListenerRemover {\n this.onUpdateCallback = callback;\n return jest.fn();\n }\n\n get size(): number {\n return this.items.length;\n }\n}\n\nexport default MockFileStorageTable;\n"],"mappings":";;;;;;AAYA,OAAO,MAAMA,oBAAN,CAAuD;EAK5DC,WAAW,CAACC,KAAD,EAA2B;IAAA;;IAAA;;IACpC,KAAKA,KAAL,GAAaA,KAAb;EACD;EAED;;;EACAC,SAAS,CAACC,MAAD,EAAuB,CAC9B;EACD;;EAEDC,WAAW,CAACC,IAAD,EAAeC,QAAf,EAAiD;IAC1D,OAAOC,OAAO,CAACC,OAAR,EAAP;EACD;;EAEDC,eAAe,GAA2C;IACxD,OAAOF,OAAO,CAACC,OAAR,CAAgB;MACrBP,KAAK,EAAE,KAAKA,KADS;MACF;MACnBS,MAAM,EAAE;IAFa,CAAhB,CAAP;EAID;;EAEKC,WAAW,CACfC,YADe,EAE4B;IAAA;MAC3C,MAAM,IAAIC,KAAJ,CAAU,yBAAV,CAAN;IAD2C;EAE5C;;EAEKC,WAAW,CAACC,QAAD,EAAgD;IAAA;;IAAA;MAAA;;MAC/D,IAAMC,kBAAkB,SAAS,KAAI,CAACP,eAAL,EAAjC;MACA,8BAAI,CAACQ,gBAAL,0FAAI,EAAoBD,kBAApB,CAAJ;IAF+D;EAGhE;;EAEDE,UAAU,CAACC,MAAD,EAAsC,CAC9C;EACD;;EAEDC,QAAQ,CAACD,MAAD,EAAoC,CAC1C;EACD;;EAEDE,WAAW,CAACC,UAAD,EAA4B,CACrC;EACD;;EAEDC,KAAK,GAAS,CACZ;EACD;;EAEDC,QAAQ,CACNC,QADM,EAEkB;IACxB,KAAKR,gBAAL,GAAwBQ,QAAxB;IACA,OAAOC,IAAI,CAACC,EAAL,EAAP;EACD;;EAEO,IAAJC,IAAI,GAAW;IACjB,OAAO,KAAK3B,KAAL,CAAW4B,MAAlB;EACD;;AA7D2D;AAgE9D,eAAe9B,oBAAf"}
@@ -1,6 +1,6 @@
1
1
  import { Component, FocusEvent, FocusEventHandler, PureComponent, ReactElement, ReactNode } from 'react';
2
2
  import { ContextAction } from '@deephaven/components';
3
- import { Container, EventEmitter, Tab } from '@deephaven/golden-layout';
3
+ import type { Container, EventEmitter, Tab } from '@deephaven/golden-layout';
4
4
  import { IdeSession } from '@deephaven/jsapi-shim';
5
5
  interface PanelProps {
6
6
  componentPanel: Component;
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/panels/Panel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/panels/Panel.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.js","names":["React","PureComponent","ReactDOM","classNames","memoize","ContextActions","LoadingOverlay","Tooltip","LayoutUtils","PanelEvent","assertNotNull","Log","ConsoleEvent","InputFilterEvent","TabEvent","PanelContextMenu","RenameDialog","log","module","Panel","constructor","props","actions","isClonable","isRenamable","additionalActions","push","getCloneAction","getRenameAction","handleClearAllFilters","bind","handleCopyPanel","handleFocus","handleBlur","handleHide","handleResize","handleSessionClosed","handleSessionOpened","handleBeforeShow","handleShow","handleTabBlur","handleTabFocus","handleRenameCancel","handleRenameSubmit","handleShowRenameDialog","handleTabClicked","handleTab","glContainer","state","title","getTitleFromContainer","showRenameDialog","componentDidMount","componentPanel","glEventHub","on","SESSION_CLOSED","SESSION_OPENED","focus","blur","CLEAR_ALL_FILTERS","emit","MOUNT","componentWillUnmount","off","UNMOUNT","tab","setState","getTitleFromTab","forceUpdate","onTab","onTabClicked","onClearAllFilters","event","FOCUS","onFocus","onBlur","onHide","onResize","session","onSessionClose","params","onSessionOpen","onBeforeShow","onShow","onTabBlur","onTabFocus","newTitle","root","getRootFromContainer","config","getComponentConfigFromContainer","renameComponent","error","cloneConfig","cloneComponent","CLONED","order","group","groups","high","action","medium","render","children","className","renderTabTooltip","errorMessage","isLoaded","isLoading","glTab","createPortal","getAdditionActions","placement","element","undefined"],"sources":["../../src/panels/Panel.tsx"],"sourcesContent":["import React, {\n Component,\n FocusEvent,\n FocusEventHandler,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport {\n ContextAction,\n ContextActions,\n LoadingOverlay,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, PanelEvent } from '@deephaven/dashboard';\nimport {\n Container,\n EventEmitter,\n ReactComponentConfig,\n Tab,\n} from '@deephaven/golden-layout';\nimport { assertNotNull } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { ConsoleEvent, InputFilterEvent, TabEvent } from '../events';\nimport PanelContextMenu from './PanelContextMenu';\nimport RenameDialog from './RenameDialog';\n\nconst log = Log.module('Panel');\n\ninterface PanelProps {\n componentPanel: Component;\n children: ReactNode;\n glContainer: Container;\n glEventHub: EventEmitter;\n className: string;\n onFocus: FocusEventHandler<HTMLDivElement>;\n onBlur: FocusEventHandler<HTMLDivElement>;\n onTab: (tab: Tab) => void;\n onTabClicked: (...args: unknown[]) => void;\n onClearAllFilters: (...args: unknown[]) => void;\n onHide: (...args: unknown[]) => void;\n onResize: (...args: unknown[]) => void;\n onSessionClose: (session: IdeSession) => void;\n onSessionOpen: (\n session: IdeSession,\n { language, sessionId }: { language: string; sessionId: string }\n ) => void;\n onBeforeShow: (...args: unknown[]) => void;\n onShow: (...args: unknown[]) => void;\n onTabBlur: (...args: unknown[]) => void;\n onTabFocus: (...args: unknown[]) => void;\n renderTabTooltip: () => ReactNode;\n additionalActions: ContextAction[];\n errorMessage: string;\n isLoading: boolean;\n isLoaded: boolean;\n isClonable: boolean;\n isRenamable: boolean;\n}\n\ninterface PanelState {\n title?: string | null;\n showRenameDialog: boolean;\n}\n/**\n * Generic panel component that emits mount/unmount/focus events.\n * Also wires up some triggers for common events:\n * Focus, Resize, Show, Session open/close, client disconnect/reconnect.\n */\nclass Panel extends PureComponent<PanelProps, PanelState> {\n static defaultProps = {\n className: '',\n onTab: (): void => undefined,\n onTabClicked: (): void => undefined,\n onClearAllFilters: (): void => undefined,\n onFocus: (): void => undefined,\n onBlur: (): void => undefined,\n onHide: (): void => undefined,\n onResize: (): void => undefined,\n onSessionClose: (): void => undefined,\n onSessionOpen: (): void => undefined,\n onBeforeShow: (): void => undefined,\n onShow: (): void => undefined,\n onTabBlur: (): void => undefined,\n onTabFocus: (): void => undefined,\n renderTabTooltip: null,\n additionalActions: [],\n errorMessage: null,\n isLoading: false,\n isLoaded: true,\n isClonable: false,\n isRenamable: false,\n };\n\n constructor(props: PanelProps) {\n super(props);\n\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleCopyPanel = this.handleCopyPanel.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleBeforeShow = this.handleBeforeShow.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRenameSubmit = this.handleRenameSubmit.bind(this);\n this.handleShowRenameDialog = this.handleShowRenameDialog.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleTab = this.handleTab.bind(this);\n\n const { glContainer } = this.props;\n this.state = {\n title: LayoutUtils.getTitleFromContainer(glContainer),\n showRenameDialog: false,\n };\n }\n\n componentDidMount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.on('resize', this.handleResize);\n glContainer.on('show', this.handleBeforeShow);\n glContainer.on('shown', this.handleShow);\n glContainer.on('hide', this.handleHide);\n glContainer.on('tab', this.handleTab);\n glContainer.on('tabClicked', this.handleTabClicked);\n glEventHub.on(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.on(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.on(TabEvent.focus, this.handleTabFocus);\n glEventHub.on(TabEvent.blur, this.handleTabBlur);\n glEventHub.on(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n\n glEventHub.emit(PanelEvent.MOUNT, componentPanel);\n }\n\n componentWillUnmount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.off('resize', this.handleResize);\n glContainer.off('show', this.handleBeforeShow);\n glContainer.off('shown', this.handleShow);\n glContainer.off('hide', this.handleHide);\n glContainer.off('tab', this.handleTab);\n glContainer.off('tabClicked', this.handleTabClicked);\n glEventHub.off(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.off(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.off(TabEvent.focus, this.handleTabFocus);\n glEventHub.off(TabEvent.blur, this.handleTabBlur);\n glEventHub.off(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n\n glEventHub.emit(PanelEvent.UNMOUNT, componentPanel);\n }\n\n handleTab(tab: Tab): void {\n if (tab) {\n this.setState({\n title: LayoutUtils.getTitleFromTab(tab),\n });\n }\n // render after move can happen before tab event, glTab could be null\n // when tab event is emitted, force a render update\n this.forceUpdate();\n\n const { onTab } = this.props;\n onTab(tab);\n }\n\n handleTabClicked(...args: unknown[]): void {\n const { onTabClicked } = this.props;\n onTabClicked(...args);\n }\n\n handleClearAllFilters(...args: unknown[]): void {\n const { onClearAllFilters } = this.props;\n onClearAllFilters(...args);\n }\n\n handleFocus(event: FocusEvent<HTMLDivElement>): void {\n const { componentPanel, glEventHub } = this.props;\n glEventHub.emit(PanelEvent.FOCUS, componentPanel);\n\n const { onFocus } = this.props;\n onFocus(event);\n }\n\n handleBlur(event: FocusEvent<HTMLDivElement>): void {\n const { onBlur } = this.props;\n onBlur(event);\n }\n\n handleHide(...args: unknown[]): void {\n const { onHide } = this.props;\n onHide(...args);\n }\n\n handleResize(...args: unknown[]): void {\n const { onResize } = this.props;\n onResize(...args);\n }\n\n handleSessionClosed(session: IdeSession): void {\n const { onSessionClose } = this.props;\n onSessionClose(session);\n }\n\n handleSessionOpened(\n session: IdeSession,\n params: { language: string; sessionId: string }\n ): void {\n const { onSessionOpen } = this.props;\n onSessionOpen(session, params);\n }\n\n handleBeforeShow(...args: unknown[]): void {\n const { onBeforeShow } = this.props;\n onBeforeShow(...args);\n }\n\n handleShow(...args: unknown[]): void {\n const { onShow } = this.props;\n onShow(...args);\n }\n\n handleTabBlur(...args: unknown[]): void {\n const { onTabBlur } = this.props;\n onTabBlur(...args);\n }\n\n handleTabFocus(...args: unknown[]): void {\n const { onTabFocus } = this.props;\n onTabFocus(...args);\n }\n\n handleRenameCancel(): void {\n this.setState({ showRenameDialog: false });\n }\n\n handleShowRenameDialog(): void {\n this.setState({ showRenameDialog: true });\n }\n\n handleRenameSubmit(newTitle: string): void {\n const { glContainer } = this.props;\n this.setState({ showRenameDialog: false, title: newTitle });\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n assertNotNull(config);\n LayoutUtils.renameComponent(root, config, newTitle);\n }\n\n handleCopyPanel(): void {\n const { glContainer, glEventHub } = this.props;\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config == null) {\n log.error('Could not get component config from container', glContainer);\n return;\n }\n const cloneConfig = LayoutUtils.cloneComponent(\n root,\n config as ReactComponentConfig\n );\n if (cloneConfig !== null) {\n glEventHub.emit(PanelEvent.CLONED, this, cloneConfig);\n }\n }\n\n getCloneAction(): ContextAction {\n return {\n title: 'Copy Panel',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleCopyPanel,\n };\n }\n\n getRenameAction(): ContextAction {\n return {\n title: 'Rename',\n order: 10,\n group: ContextActions.groups.medium,\n action: this.handleShowRenameDialog,\n };\n }\n\n getAdditionActions = memoize((actions, isClonable, isRenamable) => {\n const additionalActions = [];\n if (isClonable) {\n additionalActions.push(this.getCloneAction());\n }\n if (isRenamable) {\n additionalActions.push(this.getRenameAction());\n }\n return [...additionalActions, ...actions];\n });\n\n render(): ReactElement {\n const {\n children,\n className,\n renderTabTooltip,\n glContainer,\n additionalActions,\n errorMessage,\n isLoaded,\n isLoading,\n isClonable,\n isRenamable,\n } = this.props;\n const { tab: glTab } = glContainer;\n const { showRenameDialog, title } = this.state;\n\n return (\n <div\n className={classNames('h-100 w-100 iris-panel', className)}\n onFocusCapture={this.handleFocus}\n onBlurCapture={this.handleBlur}\n >\n {children}\n <LoadingOverlay\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n />\n {glTab &&\n ReactDOM.createPortal(\n <>\n <PanelContextMenu\n glContainer={glContainer}\n additionalActions={this.getAdditionActions(\n additionalActions,\n isClonable,\n isRenamable\n )}\n />\n {isRenamable && (\n <RenameDialog\n isShown={showRenameDialog}\n value={title}\n itemType=\"Panel\"\n onCancel={this.handleRenameCancel}\n onSubmit={this.handleRenameSubmit}\n />\n )}\n {renderTabTooltip && (\n <Tooltip\n interactive\n options={{\n placement: 'bottom',\n }}\n popperClassName=\"panel-tab-popper\"\n >\n {renderTabTooltip()}\n </Tooltip>\n )}\n </>,\n glTab.element[0] // tab.element is jquery element, we want a dom element\n )}\n </div>\n );\n }\n}\n\nexport default Panel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Panel.js","names":["React","PureComponent","ReactDOM","classNames","memoize","ContextActions","LoadingOverlay","Tooltip","LayoutUtils","PanelEvent","assertNotNull","Log","ConsoleEvent","InputFilterEvent","TabEvent","PanelContextMenu","RenameDialog","log","module","Panel","constructor","props","actions","isClonable","isRenamable","additionalActions","push","getCloneAction","getRenameAction","handleClearAllFilters","bind","handleCopyPanel","handleFocus","handleBlur","handleHide","handleResize","handleSessionClosed","handleSessionOpened","handleBeforeShow","handleShow","handleTabBlur","handleTabFocus","handleRenameCancel","handleRenameSubmit","handleShowRenameDialog","handleTabClicked","handleTab","glContainer","state","title","getTitleFromContainer","showRenameDialog","componentDidMount","componentPanel","glEventHub","on","SESSION_CLOSED","SESSION_OPENED","focus","blur","CLEAR_ALL_FILTERS","emit","MOUNT","componentWillUnmount","off","UNMOUNT","tab","setState","getTitleFromTab","forceUpdate","onTab","onTabClicked","onClearAllFilters","event","FOCUS","onFocus","onBlur","onHide","onResize","session","onSessionClose","params","onSessionOpen","onBeforeShow","onShow","onTabBlur","onTabFocus","newTitle","root","getRootFromContainer","config","getComponentConfigFromContainer","renameComponent","error","cloneConfig","cloneComponent","CLONED","order","group","groups","high","action","medium","render","children","className","renderTabTooltip","errorMessage","isLoaded","isLoading","glTab","createPortal","getAdditionActions","placement","element","undefined"],"sources":["../../src/panels/Panel.tsx"],"sourcesContent":["import React, {\n Component,\n FocusEvent,\n FocusEventHandler,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport {\n ContextAction,\n ContextActions,\n LoadingOverlay,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, PanelEvent } from '@deephaven/dashboard';\nimport type {\n Container,\n EventEmitter,\n ReactComponentConfig,\n Tab,\n} from '@deephaven/golden-layout';\nimport { assertNotNull } from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { IdeSession } from '@deephaven/jsapi-shim';\nimport { ConsoleEvent, InputFilterEvent, TabEvent } from '../events';\nimport PanelContextMenu from './PanelContextMenu';\nimport RenameDialog from './RenameDialog';\n\nconst log = Log.module('Panel');\n\ninterface PanelProps {\n componentPanel: Component;\n children: ReactNode;\n glContainer: Container;\n glEventHub: EventEmitter;\n className: string;\n onFocus: FocusEventHandler<HTMLDivElement>;\n onBlur: FocusEventHandler<HTMLDivElement>;\n onTab: (tab: Tab) => void;\n onTabClicked: (...args: unknown[]) => void;\n onClearAllFilters: (...args: unknown[]) => void;\n onHide: (...args: unknown[]) => void;\n onResize: (...args: unknown[]) => void;\n onSessionClose: (session: IdeSession) => void;\n onSessionOpen: (\n session: IdeSession,\n { language, sessionId }: { language: string; sessionId: string }\n ) => void;\n onBeforeShow: (...args: unknown[]) => void;\n onShow: (...args: unknown[]) => void;\n onTabBlur: (...args: unknown[]) => void;\n onTabFocus: (...args: unknown[]) => void;\n renderTabTooltip: () => ReactNode;\n additionalActions: ContextAction[];\n errorMessage: string;\n isLoading: boolean;\n isLoaded: boolean;\n isClonable: boolean;\n isRenamable: boolean;\n}\n\ninterface PanelState {\n title?: string | null;\n showRenameDialog: boolean;\n}\n/**\n * Generic panel component that emits mount/unmount/focus events.\n * Also wires up some triggers for common events:\n * Focus, Resize, Show, Session open/close, client disconnect/reconnect.\n */\nclass Panel extends PureComponent<PanelProps, PanelState> {\n static defaultProps = {\n className: '',\n onTab: (): void => undefined,\n onTabClicked: (): void => undefined,\n onClearAllFilters: (): void => undefined,\n onFocus: (): void => undefined,\n onBlur: (): void => undefined,\n onHide: (): void => undefined,\n onResize: (): void => undefined,\n onSessionClose: (): void => undefined,\n onSessionOpen: (): void => undefined,\n onBeforeShow: (): void => undefined,\n onShow: (): void => undefined,\n onTabBlur: (): void => undefined,\n onTabFocus: (): void => undefined,\n renderTabTooltip: null,\n additionalActions: [],\n errorMessage: null,\n isLoading: false,\n isLoaded: true,\n isClonable: false,\n isRenamable: false,\n };\n\n constructor(props: PanelProps) {\n super(props);\n\n this.handleClearAllFilters = this.handleClearAllFilters.bind(this);\n this.handleCopyPanel = this.handleCopyPanel.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleBlur = this.handleBlur.bind(this);\n this.handleHide = this.handleHide.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleBeforeShow = this.handleBeforeShow.bind(this);\n this.handleShow = this.handleShow.bind(this);\n this.handleTabBlur = this.handleTabBlur.bind(this);\n this.handleTabFocus = this.handleTabFocus.bind(this);\n this.handleRenameCancel = this.handleRenameCancel.bind(this);\n this.handleRenameSubmit = this.handleRenameSubmit.bind(this);\n this.handleShowRenameDialog = this.handleShowRenameDialog.bind(this);\n this.handleTabClicked = this.handleTabClicked.bind(this);\n this.handleTab = this.handleTab.bind(this);\n\n const { glContainer } = this.props;\n this.state = {\n title: LayoutUtils.getTitleFromContainer(glContainer),\n showRenameDialog: false,\n };\n }\n\n componentDidMount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.on('resize', this.handleResize);\n glContainer.on('show', this.handleBeforeShow);\n glContainer.on('shown', this.handleShow);\n glContainer.on('hide', this.handleHide);\n glContainer.on('tab', this.handleTab);\n glContainer.on('tabClicked', this.handleTabClicked);\n glEventHub.on(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.on(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.on(TabEvent.focus, this.handleTabFocus);\n glEventHub.on(TabEvent.blur, this.handleTabBlur);\n glEventHub.on(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n\n glEventHub.emit(PanelEvent.MOUNT, componentPanel);\n }\n\n componentWillUnmount(): void {\n const { componentPanel, glContainer, glEventHub } = this.props;\n\n glContainer.off('resize', this.handleResize);\n glContainer.off('show', this.handleBeforeShow);\n glContainer.off('shown', this.handleShow);\n glContainer.off('hide', this.handleHide);\n glContainer.off('tab', this.handleTab);\n glContainer.off('tabClicked', this.handleTabClicked);\n glEventHub.off(ConsoleEvent.SESSION_CLOSED, this.handleSessionClosed);\n glEventHub.off(ConsoleEvent.SESSION_OPENED, this.handleSessionOpened);\n glEventHub.off(TabEvent.focus, this.handleTabFocus);\n glEventHub.off(TabEvent.blur, this.handleTabBlur);\n glEventHub.off(\n InputFilterEvent.CLEAR_ALL_FILTERS,\n this.handleClearAllFilters\n );\n\n glEventHub.emit(PanelEvent.UNMOUNT, componentPanel);\n }\n\n handleTab(tab: Tab): void {\n if (tab) {\n this.setState({\n title: LayoutUtils.getTitleFromTab(tab),\n });\n }\n // render after move can happen before tab event, glTab could be null\n // when tab event is emitted, force a render update\n this.forceUpdate();\n\n const { onTab } = this.props;\n onTab(tab);\n }\n\n handleTabClicked(...args: unknown[]): void {\n const { onTabClicked } = this.props;\n onTabClicked(...args);\n }\n\n handleClearAllFilters(...args: unknown[]): void {\n const { onClearAllFilters } = this.props;\n onClearAllFilters(...args);\n }\n\n handleFocus(event: FocusEvent<HTMLDivElement>): void {\n const { componentPanel, glEventHub } = this.props;\n glEventHub.emit(PanelEvent.FOCUS, componentPanel);\n\n const { onFocus } = this.props;\n onFocus(event);\n }\n\n handleBlur(event: FocusEvent<HTMLDivElement>): void {\n const { onBlur } = this.props;\n onBlur(event);\n }\n\n handleHide(...args: unknown[]): void {\n const { onHide } = this.props;\n onHide(...args);\n }\n\n handleResize(...args: unknown[]): void {\n const { onResize } = this.props;\n onResize(...args);\n }\n\n handleSessionClosed(session: IdeSession): void {\n const { onSessionClose } = this.props;\n onSessionClose(session);\n }\n\n handleSessionOpened(\n session: IdeSession,\n params: { language: string; sessionId: string }\n ): void {\n const { onSessionOpen } = this.props;\n onSessionOpen(session, params);\n }\n\n handleBeforeShow(...args: unknown[]): void {\n const { onBeforeShow } = this.props;\n onBeforeShow(...args);\n }\n\n handleShow(...args: unknown[]): void {\n const { onShow } = this.props;\n onShow(...args);\n }\n\n handleTabBlur(...args: unknown[]): void {\n const { onTabBlur } = this.props;\n onTabBlur(...args);\n }\n\n handleTabFocus(...args: unknown[]): void {\n const { onTabFocus } = this.props;\n onTabFocus(...args);\n }\n\n handleRenameCancel(): void {\n this.setState({ showRenameDialog: false });\n }\n\n handleShowRenameDialog(): void {\n this.setState({ showRenameDialog: true });\n }\n\n handleRenameSubmit(newTitle: string): void {\n const { glContainer } = this.props;\n this.setState({ showRenameDialog: false, title: newTitle });\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n assertNotNull(config);\n LayoutUtils.renameComponent(root, config, newTitle);\n }\n\n handleCopyPanel(): void {\n const { glContainer, glEventHub } = this.props;\n const root = LayoutUtils.getRootFromContainer(glContainer);\n const config = LayoutUtils.getComponentConfigFromContainer(glContainer);\n if (config == null) {\n log.error('Could not get component config from container', glContainer);\n return;\n }\n const cloneConfig = LayoutUtils.cloneComponent(\n root,\n config as ReactComponentConfig\n );\n if (cloneConfig !== null) {\n glEventHub.emit(PanelEvent.CLONED, this, cloneConfig);\n }\n }\n\n getCloneAction(): ContextAction {\n return {\n title: 'Copy Panel',\n order: 10,\n group: ContextActions.groups.high,\n action: this.handleCopyPanel,\n };\n }\n\n getRenameAction(): ContextAction {\n return {\n title: 'Rename',\n order: 10,\n group: ContextActions.groups.medium,\n action: this.handleShowRenameDialog,\n };\n }\n\n getAdditionActions = memoize((actions, isClonable, isRenamable) => {\n const additionalActions = [];\n if (isClonable) {\n additionalActions.push(this.getCloneAction());\n }\n if (isRenamable) {\n additionalActions.push(this.getRenameAction());\n }\n return [...additionalActions, ...actions];\n });\n\n render(): ReactElement {\n const {\n children,\n className,\n renderTabTooltip,\n glContainer,\n additionalActions,\n errorMessage,\n isLoaded,\n isLoading,\n isClonable,\n isRenamable,\n } = this.props;\n const { tab: glTab } = glContainer;\n const { showRenameDialog, title } = this.state;\n\n return (\n <div\n className={classNames('h-100 w-100 iris-panel', className)}\n onFocusCapture={this.handleFocus}\n onBlurCapture={this.handleBlur}\n >\n {children}\n <LoadingOverlay\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n />\n {glTab &&\n ReactDOM.createPortal(\n <>\n <PanelContextMenu\n glContainer={glContainer}\n additionalActions={this.getAdditionActions(\n additionalActions,\n isClonable,\n isRenamable\n )}\n />\n {isRenamable && (\n <RenameDialog\n isShown={showRenameDialog}\n value={title}\n itemType=\"Panel\"\n onCancel={this.handleRenameCancel}\n onSubmit={this.handleRenameSubmit}\n />\n )}\n {renderTabTooltip && (\n <Tooltip\n interactive\n options={{\n placement: 'bottom',\n }}\n popperClassName=\"panel-tab-popper\"\n >\n {renderTabTooltip()}\n </Tooltip>\n )}\n </>,\n glTab.element[0] // tab.element is jquery element, we want a dom element\n )}\n </div>\n );\n }\n}\n\nexport default Panel;\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { PureComponent, ReactElement } from 'react';
2
2
  import { ContextAction } from '@deephaven/components';
3
- import { Container, Tab } from '@deephaven/golden-layout';
3
+ import type { Container, Tab } from '@deephaven/golden-layout';
4
4
  interface PanelContextMenuProps {
5
5
  additionalActions: ContextAction[];
6
6
  glContainer: Container;
@@ -1 +1 @@
1
- {"version":3,"file":"PanelContextMenu.d.ts","sourceRoot":"","sources":["../../src/panels/PanelContextMenu.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAkB,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,UAAU,qBAAqB;IAC7B,iBAAiB,EAAE,aAAa,EAAE,CAAC;IACnC,WAAW,EAAE,SAAS,CAAC;CACxB;AAOD,cAAM,gBAAiB,SAAQ,aAAa,CAC1C,qBAAqB,EACrB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,YAAY;;MAEjB;gBAEU,KAAK,EAAE,qBAAqB;IAQxC,UAAU,IAAI,GAAG,EAAE;IAMnB,cAAc,IAAI,IAAI;IAKtB,kBAAkB,IAAI,IAAI;IAU1B,oBAAoB,IAAI,IAAI;IAiB5B,iBAAiB,IAAI,OAAO;IAoB5B,WAAW,IAAI,OAAO;IAatB,MAAM,IAAI,YAAY;CAkCvB;AAED,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"PanelContextMenu.d.ts","sourceRoot":"","sources":["../../src/panels/PanelContextMenu.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAkB,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE/D,UAAU,qBAAqB;IAC7B,iBAAiB,EAAE,aAAa,EAAE,CAAC;IACnC,WAAW,EAAE,SAAS,CAAC;CACxB;AAOD,cAAM,gBAAiB,SAAQ,aAAa,CAC1C,qBAAqB,EACrB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,YAAY;;MAEjB;gBAEU,KAAK,EAAE,qBAAqB;IAQxC,UAAU,IAAI,GAAG,EAAE;IAMnB,cAAc,IAAI,IAAI;IAKtB,kBAAkB,IAAI,IAAI;IAU1B,oBAAoB,IAAI,IAAI;IAiB5B,iBAAiB,IAAI,OAAO;IAoB5B,WAAW,IAAI,OAAO;IAatB,MAAM,IAAI,YAAY;CAkCvB;AAED,eAAe,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PanelContextMenu.js","names":["React","PureComponent","ContextActions","PanelContextMenu","constructor","props","handleCloseTab","bind","handleCloseTabsRight","handleCloseTabsAll","getAllTabs","glContainer","tab","header","tabs","close","forEach","contentItem","container","i","length","config","id","canCloseTabsRight","disabled","isClosable","canCloseAny","render","additionalActions","contextActions","push","title","order","group","groups","low","action"],"sources":["../../src/panels/PanelContextMenu.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { ContextAction, ContextActions } from '@deephaven/components';\nimport { Container, Tab } from '@deephaven/golden-layout';\n\ninterface PanelContextMenuProps {\n additionalActions: ContextAction[];\n glContainer: Container;\n}\n\ninterface HasContainer {\n container: {\n close: () => void;\n };\n}\nclass PanelContextMenu extends PureComponent<\n PanelContextMenuProps,\n Record<string, never>\n> {\n static defaultProps = {\n additionalActions: [],\n };\n\n constructor(props: PanelContextMenuProps) {\n super(props);\n\n this.handleCloseTab = this.handleCloseTab.bind(this);\n this.handleCloseTabsRight = this.handleCloseTabsRight.bind(this);\n this.handleCloseTabsAll = this.handleCloseTabsAll.bind(this);\n }\n\n getAllTabs(): Tab[] {\n // return a clone of the tabs array, or returns empty array if null\n const { glContainer } = this.props;\n return [...(glContainer?.tab?.header?.tabs ?? [])];\n }\n\n handleCloseTab(): void {\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseTabsAll(): void {\n const tabs = this.getAllTabs();\n\n // No need to check if isClosable, golden-layout returns\n // false when attempting to close tabs that you can't\n tabs.forEach(tab =>\n ((tab?.contentItem as unknown) as HasContainer).container?.close()\n );\n }\n\n handleCloseTabsRight(): void {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n\n // eslint-disable-next-line no-unused-expressions\n ((tabs[i]?.contentItem as unknown) as HasContainer).container?.close();\n }\n }\n\n canCloseTabsRight(): boolean {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n if (tabs[i]?.contentItem?.config?.isClosable) {\n disabled = false;\n break; // end if we find a closeable tab\n }\n }\n return disabled;\n }\n\n canCloseAny(): boolean {\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (tabs[i]?.contentItem?.config?.isClosable) {\n disabled = false;\n break;\n }\n }\n return disabled;\n }\n\n render(): ReactElement {\n const { additionalActions, glContainer } = this.props;\n\n const contextActions: (ContextAction | (() => ContextAction))[] = [\n ...additionalActions,\n ];\n\n contextActions.push({\n title: 'Close',\n order: 10,\n group: ContextActions.groups.low,\n action: this.handleCloseTab,\n disabled: !glContainer.tab?.contentItem?.config?.isClosable,\n });\n\n // pushed as function so the disable check happens on run\n contextActions.push(() => ({\n title: 'Close Tabs to Right',\n order: 20,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsRight,\n disabled: this.canCloseTabsRight(),\n }));\n\n contextActions.push(() => ({\n title: 'Close All',\n order: 30,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsAll,\n disabled: this.canCloseAny(),\n }));\n\n return <ContextActions actions={contextActions} />;\n }\n}\n\nexport default PanelContextMenu;\n"],"mappings":"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"}
1
+ {"version":3,"file":"PanelContextMenu.js","names":["React","PureComponent","ContextActions","PanelContextMenu","constructor","props","handleCloseTab","bind","handleCloseTabsRight","handleCloseTabsAll","getAllTabs","glContainer","tab","header","tabs","close","forEach","contentItem","container","i","length","config","id","canCloseTabsRight","disabled","isClosable","canCloseAny","render","additionalActions","contextActions","push","title","order","group","groups","low","action"],"sources":["../../src/panels/PanelContextMenu.tsx"],"sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport { ContextAction, ContextActions } from '@deephaven/components';\nimport type { Container, Tab } from '@deephaven/golden-layout';\n\ninterface PanelContextMenuProps {\n additionalActions: ContextAction[];\n glContainer: Container;\n}\n\ninterface HasContainer {\n container: {\n close: () => void;\n };\n}\nclass PanelContextMenu extends PureComponent<\n PanelContextMenuProps,\n Record<string, never>\n> {\n static defaultProps = {\n additionalActions: [],\n };\n\n constructor(props: PanelContextMenuProps) {\n super(props);\n\n this.handleCloseTab = this.handleCloseTab.bind(this);\n this.handleCloseTabsRight = this.handleCloseTabsRight.bind(this);\n this.handleCloseTabsAll = this.handleCloseTabsAll.bind(this);\n }\n\n getAllTabs(): Tab[] {\n // return a clone of the tabs array, or returns empty array if null\n const { glContainer } = this.props;\n return [...(glContainer?.tab?.header?.tabs ?? [])];\n }\n\n handleCloseTab(): void {\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseTabsAll(): void {\n const tabs = this.getAllTabs();\n\n // No need to check if isClosable, golden-layout returns\n // false when attempting to close tabs that you can't\n tabs.forEach(tab =>\n ((tab?.contentItem as unknown) as HasContainer).container?.close()\n );\n }\n\n handleCloseTabsRight(): void {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n\n // eslint-disable-next-line no-unused-expressions\n ((tabs[i]?.contentItem as unknown) as HasContainer).container?.close();\n }\n }\n\n canCloseTabsRight(): boolean {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n if (tabs[i]?.contentItem?.config?.isClosable) {\n disabled = false;\n break; // end if we find a closeable tab\n }\n }\n return disabled;\n }\n\n canCloseAny(): boolean {\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (tabs[i]?.contentItem?.config?.isClosable) {\n disabled = false;\n break;\n }\n }\n return disabled;\n }\n\n render(): ReactElement {\n const { additionalActions, glContainer } = this.props;\n\n const contextActions: (ContextAction | (() => ContextAction))[] = [\n ...additionalActions,\n ];\n\n contextActions.push({\n title: 'Close',\n order: 10,\n group: ContextActions.groups.low,\n action: this.handleCloseTab,\n disabled: !glContainer.tab?.contentItem?.config?.isClosable,\n });\n\n // pushed as function so the disable check happens on run\n contextActions.push(() => ({\n title: 'Close Tabs to Right',\n order: 20,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsRight,\n disabled: this.canCloseTabsRight(),\n }));\n\n contextActions.push(() => ({\n title: 'Close All',\n order: 30,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsAll,\n disabled: this.canCloseAny(),\n }));\n\n return <ContextActions actions={contextActions} />;\n }\n}\n\nexport default PanelContextMenu;\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Component, PureComponent, ReactElement, ReactNode } from 'react';
2
- import { Container, EventEmitter } from '@deephaven/golden-layout';
2
+ import type { Container, EventEmitter } from '@deephaven/golden-layout';
3
3
  import './WidgetPanel.scss';
4
4
  interface WidgetPanelProps {
5
5
  children: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetPanel.d.ts","sourceRoot":"","sources":["../../src/panels/WidgetPanel.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,SAAS,EACT,aAAa,EACb,YAAY,EACZ,SAAS,EACV,MAAM,OAAO,CAAC;AAGf,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAInE,OAAO,oBAAoB,CAAC;AAE5B,UAAU,gBAAgB;IACxB,QAAQ,EAAE,SAAS,CAAC;IACpB,cAAc,EAAE,SAAS,CAAC;IAE1B,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IAEzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,SAAS,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IAEpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC7C,aAAa,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC5C,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,UAAU,gBAAgB;IACxB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;CAC1B;AACD;;GAEG;AACH,cAAM,WAAY,SAAQ,aAAa,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACzE,MAAM,CAAC,YAAY;;;;;;;;;;;;;uBAcJ,IAAI;sBACL,IAAI;sBACJ,IAAI;iCACO,IAAI;wBACb,IAAI;8BACE,IAAI;6BACL,IAAI;sBACX,IAAI;yBACD,IAAI;0BACH,IAAI;4BACF,IAAI;MACtB;gBAEU,KAAK,EAAE,gBAAgB;IAgBnC,cAAc,IAAI,IAAI;IAKtB,eAAe,IAAI,MAAM,GAAG,SAAS;IA4BrC,yBAAyB,mBAEL,OAAO,eACV,SAAS,cACV,MAAM,cACN,MAAM,eACL,MAAM,gCAYrB;IAEF,mBAAmB,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAU7C,mBAAmB,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAK7C,MAAM,IAAI,YAAY;CAwFvB;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"WidgetPanel.d.ts","sourceRoot":"","sources":["../../src/panels/WidgetPanel.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,SAAS,EACT,aAAa,EACb,YAAY,EACZ,SAAS,EACV,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIxE,OAAO,oBAAoB,CAAC;AAE5B,UAAU,gBAAgB;IACxB,QAAQ,EAAE,SAAS,CAAC;IACpB,cAAc,EAAE,SAAS,CAAC;IAE1B,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IAEzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,SAAS,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IAEpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC7C,aAAa,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC5C,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,UAAU,gBAAgB;IACxB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;CAC1B;AACD;;GAEG;AACH,cAAM,WAAY,SAAQ,aAAa,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACzE,MAAM,CAAC,YAAY;;;;;;;;;;;;;uBAcJ,IAAI;sBACL,IAAI;sBACJ,IAAI;iCACO,IAAI;wBACb,IAAI;8BACE,IAAI;6BACL,IAAI;sBACX,IAAI;yBACD,IAAI;0BACH,IAAI;4BACF,IAAI;MACtB;gBAEU,KAAK,EAAE,gBAAgB;IAgBnC,cAAc,IAAI,IAAI;IAKtB,eAAe,IAAI,MAAM,GAAG,SAAS;IA4BrC,yBAAyB,mBAEL,OAAO,eACV,SAAS,cACV,MAAM,cACN,MAAM,eACL,MAAM,gCAYrB;IAEF,mBAAmB,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAU7C,mBAAmB,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAK7C,MAAM,IAAI,YAAY;CAwFvB;AAED,eAAe,WAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetPanel.js","names":["React","PureComponent","classNames","memoize","ContextActions","ContextActionUtils","Panel","WidgetPanelTooltip","WidgetPanel","constructor","props","showTabTooltip","glContainer","widgetType","widgetName","description","handleSessionClosed","bind","handleSessionOpened","handleCopyName","state","isClientDisconnected","isPanelDisconnected","isWidgetDisconnected","isWaitingForReconnect","isPanelInactive","copyToClipboard","getErrorMessage","errorMessage","undefined","onSessionClose","setState","onSessionOpen","render","children","className","componentPanel","isLoaded","isLoading","glEventHub","isDisconnected","isClonable","isRenamable","renderTabTooltip","onClearAllFilters","onHide","onFocus","onBlur","onResize","onShow","onTabBlur","onTabFocus","onTabClicked","doRenderTabTooltip","getCachedRenderTabTooltip","additionalActions","title","group","groups","medium","order","action","disconnected","inactive"],"sources":["../../src/panels/WidgetPanel.tsx"],"sourcesContent":["import React, {\n Component,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport { Container, EventEmitter } from '@deephaven/golden-layout';\nimport { ContextActions, ContextActionUtils } from '@deephaven/components';\nimport Panel from './Panel';\nimport WidgetPanelTooltip from './WidgetPanelTooltip';\nimport './WidgetPanel.scss';\n\ninterface WidgetPanelProps {\n children: ReactNode;\n componentPanel: Component;\n\n glContainer: Container;\n glEventHub: EventEmitter;\n\n className: string;\n errorMessage: string;\n isClonable: boolean;\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isRenamable: boolean;\n showTabTooltip: boolean;\n widgetName: string;\n widgetType: string;\n renderTabTooltip: () => ReactNode;\n description: string;\n\n onFocus: () => void;\n onBlur: () => void;\n onHide: () => void;\n onClearAllFilters: () => void;\n onResize: () => void;\n onSessionClose: (...args: unknown[]) => void;\n onSessionOpen: (...args: unknown[]) => void;\n onShow: () => void;\n onTabBlur: () => void;\n onTabFocus: () => void;\n onTabClicked: () => void;\n}\n\ninterface WidgetPanelState {\n isClientDisconnected: boolean;\n isPanelDisconnected: boolean;\n isWidgetDisconnected: boolean;\n isWaitingForReconnect: boolean;\n isPanelInactive: boolean;\n}\n/**\n * Widget panel component that has a loading spinner and displays an error message when set\n */\nclass WidgetPanel extends PureComponent<WidgetPanelProps, WidgetPanelState> {\n static defaultProps = {\n className: '',\n errorMessage: null,\n isClonable: true,\n isDisconnected: false,\n isLoading: false,\n isLoaded: true,\n isRenamable: true,\n showTabTooltip: true,\n widgetName: 'Widget',\n widgetType: 'Widget',\n renderTabTooltip: null,\n description: '',\n\n onFocus: (): void => undefined,\n onBlur: (): void => undefined,\n onHide: (): void => undefined,\n onClearAllFilters: (): void => undefined,\n onResize: (): void => undefined,\n onSessionClose: (): void => undefined,\n onSessionOpen: (): void => undefined,\n onShow: (): void => undefined,\n onTabBlur: (): void => undefined,\n onTabFocus: (): void => undefined,\n onTabClicked: (): void => undefined,\n };\n\n constructor(props: WidgetPanelProps) {\n super(props);\n\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleCopyName = this.handleCopyName.bind(this);\n\n this.state = {\n isClientDisconnected: false,\n isPanelDisconnected: false,\n isWidgetDisconnected: false,\n isWaitingForReconnect: false,\n isPanelInactive: false,\n };\n }\n\n handleCopyName(): void {\n const { widgetName } = this.props;\n ContextActionUtils.copyToClipboard(widgetName);\n }\n\n getErrorMessage(): string | undefined {\n const { errorMessage } = this.props;\n const {\n isClientDisconnected,\n isPanelDisconnected,\n isWidgetDisconnected,\n isWaitingForReconnect,\n } = this.state;\n if (errorMessage) {\n return `${errorMessage}`;\n }\n if (isClientDisconnected && isPanelDisconnected && isWaitingForReconnect) {\n return 'Disconnected from server.\\nCheck your internet connection.';\n }\n if (isClientDisconnected && isPanelDisconnected) {\n return 'Disconnected from server.';\n }\n if (isPanelDisconnected) {\n const { widgetName, widgetType } = this.props;\n return `Variable \"${widgetName}\" not set.\\n${widgetType} does not exist yet.`;\n }\n if (isWidgetDisconnected) {\n const { widgetName } = this.props;\n return `${widgetName} is unavailable.`;\n }\n return undefined;\n }\n\n getCachedRenderTabTooltip = memoize(\n (\n showTabTooltip: boolean,\n glContainer: Container,\n widgetType: string,\n widgetName: string,\n description: string\n ) =>\n showTabTooltip\n ? () => (\n <WidgetPanelTooltip\n glContainer={glContainer}\n widgetType={widgetType}\n widgetName={widgetName}\n description={description}\n />\n )\n : null\n );\n\n handleSessionClosed(...args: unknown[]): void {\n const { onSessionClose } = this.props;\n // The session has closed and we won't be able to reconnect, as this widget isn't persisted\n this.setState({\n isPanelDisconnected: true,\n isWaitingForReconnect: false,\n });\n onSessionClose(...args);\n }\n\n handleSessionOpened(...args: unknown[]): void {\n const { onSessionOpen } = this.props;\n onSessionOpen(...args);\n }\n\n render(): ReactElement {\n const {\n children,\n className,\n componentPanel,\n isLoaded,\n isLoading,\n glContainer,\n glEventHub,\n isDisconnected,\n isClonable,\n isRenamable,\n showTabTooltip,\n renderTabTooltip,\n widgetType,\n widgetName,\n description,\n\n onClearAllFilters,\n onHide,\n onFocus,\n onBlur,\n onResize,\n onShow,\n onTabBlur,\n onTabFocus,\n onTabClicked,\n } = this.props;\n\n const {\n isPanelDisconnected,\n isWidgetDisconnected,\n isPanelInactive,\n } = this.state;\n const errorMessage = this.getErrorMessage();\n const doRenderTabTooltip =\n renderTabTooltip ??\n this.getCachedRenderTabTooltip(\n showTabTooltip,\n glContainer,\n widgetType,\n widgetName,\n description\n );\n\n const additionalActions = [\n {\n title: `Copy ${widgetType} Name`,\n group: ContextActions.groups.medium,\n order: 20,\n action: this.handleCopyName,\n },\n ];\n\n return (\n <Panel\n className={classNames(className, {\n disconnected:\n isPanelDisconnected || isWidgetDisconnected || isDisconnected,\n inactive: isPanelInactive,\n })}\n componentPanel={componentPanel}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={onClearAllFilters}\n onHide={onHide}\n onFocus={onFocus}\n onBlur={onBlur}\n onResize={onResize}\n onShow={onShow}\n onSessionClose={this.handleSessionClosed}\n onSessionOpen={this.handleSessionOpened}\n onTabBlur={onTabBlur}\n onTabFocus={onTabFocus}\n onTabClicked={onTabClicked}\n renderTabTooltip={doRenderTabTooltip}\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n isClonable={isClonable}\n isRenamable={isRenamable}\n additionalActions={additionalActions}\n >\n {children}\n {isPanelInactive && <div className=\"fill-parent-absolute\" />}\n </Panel>\n );\n }\n}\n\nexport default WidgetPanel;\n"],"mappings":"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"}
1
+ {"version":3,"file":"WidgetPanel.js","names":["React","PureComponent","classNames","memoize","ContextActions","ContextActionUtils","Panel","WidgetPanelTooltip","WidgetPanel","constructor","props","showTabTooltip","glContainer","widgetType","widgetName","description","handleSessionClosed","bind","handleSessionOpened","handleCopyName","state","isClientDisconnected","isPanelDisconnected","isWidgetDisconnected","isWaitingForReconnect","isPanelInactive","copyToClipboard","getErrorMessage","errorMessage","undefined","onSessionClose","setState","onSessionOpen","render","children","className","componentPanel","isLoaded","isLoading","glEventHub","isDisconnected","isClonable","isRenamable","renderTabTooltip","onClearAllFilters","onHide","onFocus","onBlur","onResize","onShow","onTabBlur","onTabFocus","onTabClicked","doRenderTabTooltip","getCachedRenderTabTooltip","additionalActions","title","group","groups","medium","order","action","disconnected","inactive"],"sources":["../../src/panels/WidgetPanel.tsx"],"sourcesContent":["import React, {\n Component,\n PureComponent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoize-one';\nimport type { Container, EventEmitter } from '@deephaven/golden-layout';\nimport { ContextActions, ContextActionUtils } from '@deephaven/components';\nimport Panel from './Panel';\nimport WidgetPanelTooltip from './WidgetPanelTooltip';\nimport './WidgetPanel.scss';\n\ninterface WidgetPanelProps {\n children: ReactNode;\n componentPanel: Component;\n\n glContainer: Container;\n glEventHub: EventEmitter;\n\n className: string;\n errorMessage: string;\n isClonable: boolean;\n isDisconnected: boolean;\n isLoading: boolean;\n isLoaded: boolean;\n isRenamable: boolean;\n showTabTooltip: boolean;\n widgetName: string;\n widgetType: string;\n renderTabTooltip: () => ReactNode;\n description: string;\n\n onFocus: () => void;\n onBlur: () => void;\n onHide: () => void;\n onClearAllFilters: () => void;\n onResize: () => void;\n onSessionClose: (...args: unknown[]) => void;\n onSessionOpen: (...args: unknown[]) => void;\n onShow: () => void;\n onTabBlur: () => void;\n onTabFocus: () => void;\n onTabClicked: () => void;\n}\n\ninterface WidgetPanelState {\n isClientDisconnected: boolean;\n isPanelDisconnected: boolean;\n isWidgetDisconnected: boolean;\n isWaitingForReconnect: boolean;\n isPanelInactive: boolean;\n}\n/**\n * Widget panel component that has a loading spinner and displays an error message when set\n */\nclass WidgetPanel extends PureComponent<WidgetPanelProps, WidgetPanelState> {\n static defaultProps = {\n className: '',\n errorMessage: null,\n isClonable: true,\n isDisconnected: false,\n isLoading: false,\n isLoaded: true,\n isRenamable: true,\n showTabTooltip: true,\n widgetName: 'Widget',\n widgetType: 'Widget',\n renderTabTooltip: null,\n description: '',\n\n onFocus: (): void => undefined,\n onBlur: (): void => undefined,\n onHide: (): void => undefined,\n onClearAllFilters: (): void => undefined,\n onResize: (): void => undefined,\n onSessionClose: (): void => undefined,\n onSessionOpen: (): void => undefined,\n onShow: (): void => undefined,\n onTabBlur: (): void => undefined,\n onTabFocus: (): void => undefined,\n onTabClicked: (): void => undefined,\n };\n\n constructor(props: WidgetPanelProps) {\n super(props);\n\n this.handleSessionClosed = this.handleSessionClosed.bind(this);\n this.handleSessionOpened = this.handleSessionOpened.bind(this);\n this.handleCopyName = this.handleCopyName.bind(this);\n\n this.state = {\n isClientDisconnected: false,\n isPanelDisconnected: false,\n isWidgetDisconnected: false,\n isWaitingForReconnect: false,\n isPanelInactive: false,\n };\n }\n\n handleCopyName(): void {\n const { widgetName } = this.props;\n ContextActionUtils.copyToClipboard(widgetName);\n }\n\n getErrorMessage(): string | undefined {\n const { errorMessage } = this.props;\n const {\n isClientDisconnected,\n isPanelDisconnected,\n isWidgetDisconnected,\n isWaitingForReconnect,\n } = this.state;\n if (errorMessage) {\n return `${errorMessage}`;\n }\n if (isClientDisconnected && isPanelDisconnected && isWaitingForReconnect) {\n return 'Disconnected from server.\\nCheck your internet connection.';\n }\n if (isClientDisconnected && isPanelDisconnected) {\n return 'Disconnected from server.';\n }\n if (isPanelDisconnected) {\n const { widgetName, widgetType } = this.props;\n return `Variable \"${widgetName}\" not set.\\n${widgetType} does not exist yet.`;\n }\n if (isWidgetDisconnected) {\n const { widgetName } = this.props;\n return `${widgetName} is unavailable.`;\n }\n return undefined;\n }\n\n getCachedRenderTabTooltip = memoize(\n (\n showTabTooltip: boolean,\n glContainer: Container,\n widgetType: string,\n widgetName: string,\n description: string\n ) =>\n showTabTooltip\n ? () => (\n <WidgetPanelTooltip\n glContainer={glContainer}\n widgetType={widgetType}\n widgetName={widgetName}\n description={description}\n />\n )\n : null\n );\n\n handleSessionClosed(...args: unknown[]): void {\n const { onSessionClose } = this.props;\n // The session has closed and we won't be able to reconnect, as this widget isn't persisted\n this.setState({\n isPanelDisconnected: true,\n isWaitingForReconnect: false,\n });\n onSessionClose(...args);\n }\n\n handleSessionOpened(...args: unknown[]): void {\n const { onSessionOpen } = this.props;\n onSessionOpen(...args);\n }\n\n render(): ReactElement {\n const {\n children,\n className,\n componentPanel,\n isLoaded,\n isLoading,\n glContainer,\n glEventHub,\n isDisconnected,\n isClonable,\n isRenamable,\n showTabTooltip,\n renderTabTooltip,\n widgetType,\n widgetName,\n description,\n\n onClearAllFilters,\n onHide,\n onFocus,\n onBlur,\n onResize,\n onShow,\n onTabBlur,\n onTabFocus,\n onTabClicked,\n } = this.props;\n\n const {\n isPanelDisconnected,\n isWidgetDisconnected,\n isPanelInactive,\n } = this.state;\n const errorMessage = this.getErrorMessage();\n const doRenderTabTooltip =\n renderTabTooltip ??\n this.getCachedRenderTabTooltip(\n showTabTooltip,\n glContainer,\n widgetType,\n widgetName,\n description\n );\n\n const additionalActions = [\n {\n title: `Copy ${widgetType} Name`,\n group: ContextActions.groups.medium,\n order: 20,\n action: this.handleCopyName,\n },\n ];\n\n return (\n <Panel\n className={classNames(className, {\n disconnected:\n isPanelDisconnected || isWidgetDisconnected || isDisconnected,\n inactive: isPanelInactive,\n })}\n componentPanel={componentPanel}\n glContainer={glContainer}\n glEventHub={glEventHub}\n onClearAllFilters={onClearAllFilters}\n onHide={onHide}\n onFocus={onFocus}\n onBlur={onBlur}\n onResize={onResize}\n onShow={onShow}\n onSessionClose={this.handleSessionClosed}\n onSessionOpen={this.handleSessionOpened}\n onTabBlur={onTabBlur}\n onTabFocus={onTabFocus}\n onTabClicked={onTabClicked}\n renderTabTooltip={doRenderTabTooltip}\n errorMessage={errorMessage}\n isLoaded={isLoaded}\n isLoading={isLoading}\n isClonable={isClonable}\n isRenamable={isRenamable}\n additionalActions={additionalActions}\n >\n {children}\n {isPanelInactive && <div className=\"fill-parent-absolute\" />}\n </Panel>\n );\n }\n}\n\nexport default WidgetPanel;\n"],"mappings":";;AAAA,OAAOA,KAAP,IAEEC,aAFF,QAKO,OALP;AAMA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,OAAP,MAAoB,aAApB;AAEA,SAASC,cAAT,EAAyBC,kBAAzB,QAAmD,uBAAnD;OACOC,K;OACAC,kB;;;AA2CP;AACA;AACA;AACA,MAAMC,WAAN,SAA0BP,aAA1B,CAA4E;EA4B1EQ,WAAW,CAACC,KAAD,EAA0B;IACnC,MAAMA,KAAN;;IADmC,mDAiDTP,OAAO,CACjC,CACEQ,cADF,EAEEC,WAFF,EAGEC,UAHF,EAIEC,UAJF,EAKEC,WALF,KAOEJ,cAAc,GACV,mBACE,oBAAC,kBAAD;MACE,WAAW,EAAEC,WADf;MAEE,UAAU,EAAEC,UAFd;MAGE,UAAU,EAAEC,UAHd;MAIE,WAAW,EAAEC;IAJf,EAFQ,GASV,IAjB2B,CAjDE;;IAGnC,KAAKC,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBC,IAAzB,CAA8B,IAA9B,CAA3B;IACA,KAAKC,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBD,IAAzB,CAA8B,IAA9B,CAA3B;IACA,KAAKE,cAAL,GAAsB,KAAKA,cAAL,CAAoBF,IAApB,CAAyB,IAAzB,CAAtB;IAEA,KAAKG,KAAL,GAAa;MACXC,oBAAoB,EAAE,KADX;MAEXC,mBAAmB,EAAE,KAFV;MAGXC,oBAAoB,EAAE,KAHX;MAIXC,qBAAqB,EAAE,KAJZ;MAKXC,eAAe,EAAE;IALN,CAAb;EAOD;;EAEDN,cAAc,GAAS;IACrB,IAAM;MAAEL;IAAF,IAAiB,KAAKJ,KAA5B;IACAL,kBAAkB,CAACqB,eAAnB,CAAmCZ,UAAnC;EACD;;EAEDa,eAAe,GAAuB;IACpC,IAAM;MAAEC;IAAF,IAAmB,KAAKlB,KAA9B;IACA,IAAM;MACJW,oBADI;MAEJC,mBAFI;MAGJC,oBAHI;MAIJC;IAJI,IAKF,KAAKJ,KALT;;IAMA,IAAIQ,YAAJ,EAAkB;MAChB,iBAAUA,YAAV;IACD;;IACD,IAAIP,oBAAoB,IAAIC,mBAAxB,IAA+CE,qBAAnD,EAA0E;MACxE,OAAO,4DAAP;IACD;;IACD,IAAIH,oBAAoB,IAAIC,mBAA5B,EAAiD;MAC/C,OAAO,2BAAP;IACD;;IACD,IAAIA,mBAAJ,EAAyB;MACvB,IAAM;QAAER,UAAF;QAAcD;MAAd,IAA6B,KAAKH,KAAxC;MACA,4BAAoBI,UAApB,0BAA6CD,UAA7C;IACD;;IACD,IAAIU,oBAAJ,EAA0B;MACxB,IAAM;QAAET,UAAU,EAAVA;MAAF,IAAiB,KAAKJ,KAA5B;MACA,iBAAUI,WAAV;IACD;;IACD,OAAOe,SAAP;EACD;;EAsBDb,mBAAmB,GAA2B;IAC5C,IAAM;MAAEc;IAAF,IAAqB,KAAKpB,KAAhC,CAD4C,CAE5C;;IACA,KAAKqB,QAAL,CAAc;MACZT,mBAAmB,EAAE,IADT;MAEZE,qBAAqB,EAAE;IAFX,CAAd;IAIAM,cAAc,CAAC,YAAD,CAAd;EACD;;EAEDZ,mBAAmB,GAA2B;IAC5C,IAAM;MAAEc;IAAF,IAAoB,KAAKtB,KAA/B;IACAsB,aAAa,CAAC,YAAD,CAAb;EACD;;EAEDC,MAAM,GAAiB;IACrB,IAAM;MACJC,QADI;MAEJC,SAFI;MAGJC,cAHI;MAIJC,QAJI;MAKJC,SALI;MAMJ1B,WANI;MAOJ2B,UAPI;MAQJC,cARI;MASJC,UATI;MAUJC,WAVI;MAWJ/B,cAXI;MAYJgC,gBAZI;MAaJ9B,UAbI;MAcJC,UAdI;MAeJC,WAfI;MAiBJ6B,iBAjBI;MAkBJC,MAlBI;MAmBJC,OAnBI;MAoBJC,MApBI;MAqBJC,QArBI;MAsBJC,MAtBI;MAuBJC,SAvBI;MAwBJC,UAxBI;MAyBJC;IAzBI,IA0BF,KAAK1C,KA1BT;IA4BA,IAAM;MACJY,mBADI;MAEJC,oBAFI;MAGJE;IAHI,IAIF,KAAKL,KAJT;IAKA,IAAMQ,YAAY,GAAG,KAAKD,eAAL,EAArB;IACA,IAAM0B,kBAAkB,GACtBV,gBADsB,aACtBA,gBADsB,cACtBA,gBADsB,GAEtB,KAAKW,yBAAL,CACE3C,cADF,EAEEC,WAFF,EAGEC,UAHF,EAIEC,UAJF,EAKEC,WALF,CAFF;IAUA,IAAMwC,iBAAiB,GAAG,CACxB;MACEC,KAAK,iBAAU3C,UAAV,UADP;MAEE4C,KAAK,EAAErD,cAAc,CAACsD,MAAf,CAAsBC,MAF/B;MAGEC,KAAK,EAAE,EAHT;MAIEC,MAAM,EAAE,KAAK1C;IAJf,CADwB,CAA1B;IASA,oBACE,oBAAC,KAAD;MACE,SAAS,EAAEjB,UAAU,CAACiC,SAAD,EAAY;QAC/B2B,YAAY,EACVxC,mBAAmB,IAAIC,oBAAvB,IAA+CiB,cAFlB;QAG/BuB,QAAQ,EAAEtC;MAHqB,CAAZ,CADvB;MAME,cAAc,EAAEW,cANlB;MAOE,WAAW,EAAExB,WAPf;MAQE,UAAU,EAAE2B,UARd;MASE,iBAAiB,EAAEK,iBATrB;MAUE,MAAM,EAAEC,MAVV;MAWE,OAAO,EAAEC,OAXX;MAYE,MAAM,EAAEC,MAZV;MAaE,QAAQ,EAAEC,QAbZ;MAcE,MAAM,EAAEC,MAdV;MAeE,cAAc,EAAE,KAAKjC,mBAfvB;MAgBE,aAAa,EAAE,KAAKE,mBAhBtB;MAiBE,SAAS,EAAEgC,SAjBb;MAkBE,UAAU,EAAEC,UAlBd;MAmBE,YAAY,EAAEC,YAnBhB;MAoBE,gBAAgB,EAAEC,kBApBpB;MAqBE,YAAY,EAAEzB,YArBhB;MAsBE,QAAQ,EAAES,QAtBZ;MAuBE,SAAS,EAAEC,SAvBb;MAwBE,UAAU,EAAEG,UAxBd;MAyBE,WAAW,EAAEC,WAzBf;MA0BE,iBAAiB,EAAEa;IA1BrB,GA4BGrB,QA5BH,EA6BGT,eAAe,iBAAI;MAAK,SAAS,EAAC;IAAf,EA7BtB,CADF;EAiCD;;AAvMyE;;gBAAtEjB,W,kBACkB;EACpB2B,SAAS,EAAE,EADS;EAEpBP,YAAY,EAAE,IAFM;EAGpBa,UAAU,EAAE,IAHQ;EAIpBD,cAAc,EAAE,KAJI;EAKpBF,SAAS,EAAE,KALS;EAMpBD,QAAQ,EAAE,IANU;EAOpBK,WAAW,EAAE,IAPO;EAQpB/B,cAAc,EAAE,IARI;EASpBG,UAAU,EAAE,QATQ;EAUpBD,UAAU,EAAE,QAVQ;EAWpB8B,gBAAgB,EAAE,IAXE;EAYpB5B,WAAW,EAAE,EAZO;EAcpB+B,OAAO,EAAE,MAAYjB,SAdD;EAepBkB,MAAM,EAAE,MAAYlB,SAfA;EAgBpBgB,MAAM,EAAE,MAAYhB,SAhBA;EAiBpBe,iBAAiB,EAAE,MAAYf,SAjBX;EAkBpBmB,QAAQ,EAAE,MAAYnB,SAlBF;EAmBpBC,cAAc,EAAE,MAAYD,SAnBR;EAoBpBG,aAAa,EAAE,MAAYH,SApBP;EAqBpBoB,MAAM,EAAE,MAAYpB,SArBA;EAsBpBqB,SAAS,EAAE,MAAYrB,SAtBH;EAuBpBsB,UAAU,EAAE,MAAYtB,SAvBJ;EAwBpBuB,YAAY,EAAE,MAAYvB;AAxBN,C;;AAyMxB,eAAerB,WAAf"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/dashboard-core-plugins",
3
- "version": "0.17.1-beta.4+1995291",
3
+ "version": "0.18.0",
4
4
  "description": "Deephaven Dashboard Core Plugins",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -30,20 +30,21 @@
30
30
  "start": "cross-env NODE_ENV=development npm run watch"
31
31
  },
32
32
  "dependencies": {
33
- "@deephaven/chart": "^0.17.1-beta.4+1995291",
34
- "@deephaven/components": "^0.17.1-beta.4+1995291",
35
- "@deephaven/console": "^0.17.1-beta.4+1995291",
36
- "@deephaven/dashboard": "^0.17.1-beta.4+1995291",
37
- "@deephaven/file-explorer": "^0.17.1-beta.4+1995291",
38
- "@deephaven/golden-layout": "^0.17.1-beta.4+1995291",
39
- "@deephaven/grid": "^0.17.1-beta.4+1995291",
40
- "@deephaven/icons": "^0.17.1-beta.4+1995291",
41
- "@deephaven/iris-grid": "^0.17.1-beta.4+1995291",
42
- "@deephaven/jsapi-shim": "^0.17.1-beta.4+1995291",
43
- "@deephaven/jsapi-utils": "^0.17.1-beta.4+1995291",
44
- "@deephaven/log": "^0.17.1-beta.4+1995291",
45
- "@deephaven/redux": "^0.17.1-beta.4+1995291",
46
- "@deephaven/utils": "^0.17.1-beta.4+1995291",
33
+ "@deephaven/chart": "^0.18.0",
34
+ "@deephaven/components": "^0.18.0",
35
+ "@deephaven/console": "^0.18.0",
36
+ "@deephaven/dashboard": "^0.18.0",
37
+ "@deephaven/file-explorer": "^0.18.0",
38
+ "@deephaven/golden-layout": "^0.18.0",
39
+ "@deephaven/grid": "^0.18.0",
40
+ "@deephaven/icons": "^0.18.0",
41
+ "@deephaven/iris-grid": "^0.18.0",
42
+ "@deephaven/jsapi-shim": "^0.18.0",
43
+ "@deephaven/jsapi-utils": "^0.18.0",
44
+ "@deephaven/log": "^0.18.0",
45
+ "@deephaven/redux": "^0.18.0",
46
+ "@deephaven/storage": "^0.18.0",
47
+ "@deephaven/utils": "^0.18.0",
47
48
  "@fortawesome/react-fontawesome": "^0.1.18",
48
49
  "classnames": "^2.3.1",
49
50
  "deep-equal": "^2.0.5",
@@ -65,8 +66,8 @@
65
66
  "react-redux": "^7.2.4"
66
67
  },
67
68
  "devDependencies": {
68
- "@deephaven/mocks": "^0.17.1-beta.4+1995291",
69
- "@deephaven/tsconfig": "^0.17.1-beta.4+1995291"
69
+ "@deephaven/mocks": "^0.18.0",
70
+ "@deephaven/tsconfig": "^0.18.0"
70
71
  },
71
72
  "files": [
72
73
  "dist"
@@ -74,5 +75,5 @@
74
75
  "publishConfig": {
75
76
  "access": "public"
76
77
  },
77
- "gitHead": "1995291c1352e7571fa62963606a1108a6e8b3ea"
78
+ "gitHead": "3295265e760a8dc9133e5cc3e4cd857173ec7c29"
78
79
  }