@deephaven/dashboard-core-plugins 0.16.0 → 0.16.1-beta.2

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,6 +1,6 @@
1
1
  import { PureComponent, ReactElement } from 'react';
2
2
  import { CodeComponent } from 'react-markdown/src/ast-to-react';
3
- import type * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';
3
+ import type * as monaco from 'monaco-editor';
4
4
  interface MarkdownEditorProps {
5
5
  isEditing: boolean;
6
6
  content: string;
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownEditor.d.ts","sourceRoot":"","sources":["../../../src/controls/markdown/MarkdownEditor.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE,OAAO,KAAK,KAAK,MAAM,MAAM,2CAA2C,CAAC;AAEzE,UAAU,mBAAmB;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,KAAK,IAAI,CAAC;CAC5E;AACD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,aAAa,CACvD,mBAAmB,EACnB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,YAAY;;;MAGjB;gBAEU,KAAK,EAAE,mBAAmB;IAKtC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IAEjC,cAAc,EAAE,aAAa,CAgB3B;IAEF,MAAM,IAAI,YAAY;CA0BvB"}
1
+ {"version":3,"file":"MarkdownEditor.d.ts","sourceRoot":"","sources":["../../../src/controls/markdown/MarkdownEditor.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAE7C,UAAU,mBAAmB;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,KAAK,IAAI,CAAC;CAC5E;AACD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,aAAa,CACvD,mBAAmB,EACnB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,YAAY;;;MAGjB;gBAEU,KAAK,EAAE,mBAAmB;IAKtC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IAEjC,cAAc,EAAE,aAAa,CAgB3B;IAEF,MAAM,IAAI,YAAY;CA0BvB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/controls/markdown/MarkdownEditor.tsx"],"names":["React","PureComponent","Markdown","Code","Editor","MarkdownEditor","constructor","props","children","className","language","startsWith","substring","Children","map","child","trim","container","render","isEditing","content","onEditorInitialized","value","lineNumbers","code","renderMarkdown"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAmD,OAAnD;AACA,OAAOC,QAAP,MAAqB,gBAArB;AAEA,SAASC,IAAT,EAAeC,MAAf,QAA6B,oBAA7B;AAQA,eAAe,MAAMC,cAAN,SAA6BJ,aAA7B,CAGb;AAMAK,EAAAA,WAAW,CAACC,MAAD,EAA6B;AACtC,UAAMA,MAAN;;AADsC;;AAAA,4CAORA,KAAK,IAAI;AACvC,UAAM;AAAEC,QAAAA,QAAF;AAAYC,QAAAA;AAAZ,UAA0BF,KAAhC;AACA,UAAMG,QAAQ,GAAGD,SAAS,SAAT,IAAAA,SAAS,WAAT,IAAAA,SAAS,CAAEE,UAAX,CAAsB,WAAtB,IACbF,SAAS,CAACG,SAAV,CAAoB,CAApB,CADa,GAEb,WAFJ;AAGA,0BACE,8CACE,+CACE,oBAAC,IAAD;AAAM,QAAA,QAAQ,EAAEF;AAAhB,SACGV,KAAK,CAACa,QAAN,CAAeC,GAAf,CAAmBN,QAAnB,EAA6BO,KAAK,IACjC,OAAOA,KAAP,KAAiB,QAAjB,GAA4BA,KAAK,CAACC,IAAN,EAA5B,GAA2CD,KAD5C,CADH,CADF,CADF,CADF;AAWD,KAvBuC;;AAEtC,SAAKE,SAAL,GAAiB,IAAjB;AACD;;AAsBDC,EAAAA,MAAM,GAAiB;AACrB,QAAM;AAAEC,MAAAA,SAAF;AAAaC,MAAAA,OAAb;AAAsBC,MAAAA;AAAtB,QAA8C,KAAKd,KAAzD;AACA,wBACE;AACE,MAAA,SAAS,EAAC,2BADZ;AAEE,MAAA,GAAG,EAAEU,SAAS,IAAI;AAChB,aAAKA,SAAL,GAAiBA,SAAjB;AACD;AAJH,OAMGE,SAAS,gBACR,oBAAC,MAAD;AACE,MAAA,QAAQ,EAAE;AACRT,QAAAA,QAAQ,EAAE,UADF;AAERY,QAAAA,KAAK,EAAEF,OAFC;AAGRG,QAAAA,WAAW,EAAE;AAHL,OADZ;AAME,MAAA,mBAAmB,EAAEF;AANvB,MADQ,gBAUR,oBAAC,QAAD;AAAU,MAAA,UAAU,EAAE;AAAEG,QAAAA,IAAI,EAAE,KAAKC;AAAb;AAAtB,OACGL,OADH,CAhBJ,CADF;AAuBD;;AAxDD;;gBAHmBf,c,kBAIG;AACpBc,EAAAA,SAAS,EAAE,KADS;AAEpBC,EAAAA,OAAO,EAAE;AAFW,C","sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport Markdown from 'react-markdown';\nimport { CodeComponent } from 'react-markdown/src/ast-to-react';\nimport { Code, Editor } from '@deephaven/console';\nimport type * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';\n\ninterface MarkdownEditorProps {\n isEditing: boolean;\n content: string;\n onEditorInitialized: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n}\nexport default class MarkdownEditor extends PureComponent<\n MarkdownEditorProps,\n Record<string, never>\n> {\n static defaultProps = {\n isEditing: false,\n content: '',\n };\n\n constructor(props: MarkdownEditorProps) {\n super(props);\n this.container = null;\n }\n\n container: HTMLDivElement | null;\n\n renderMarkdown: CodeComponent = props => {\n const { children, className } = props;\n const language = className?.startsWith('language-')\n ? className.substring(9)\n : 'plaintext';\n return (\n <pre>\n <code>\n <Code language={language}>\n {React.Children.map(children, child =>\n typeof child === 'string' ? child.trim() : child\n )}\n </Code>\n </code>\n </pre>\n );\n };\n\n render(): ReactElement {\n const { isEditing, content, onEditorInitialized } = this.props;\n return (\n <div\n className=\"markdown-editor-container\"\n ref={container => {\n this.container = container;\n }}\n >\n {isEditing ? (\n <Editor\n settings={{\n language: 'markdown',\n value: content,\n lineNumbers: 'off',\n }}\n onEditorInitialized={onEditorInitialized}\n />\n ) : (\n <Markdown components={{ code: this.renderMarkdown }}>\n {content}\n </Markdown>\n )}\n </div>\n );\n }\n}\n"],"file":"MarkdownEditor.js"}
1
+ {"version":3,"sources":["../../../src/controls/markdown/MarkdownEditor.tsx"],"names":["React","PureComponent","Markdown","Code","Editor","MarkdownEditor","constructor","props","children","className","language","startsWith","substring","Children","map","child","trim","container","render","isEditing","content","onEditorInitialized","value","lineNumbers","code","renderMarkdown"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAmD,OAAnD;AACA,OAAOC,QAAP,MAAqB,gBAArB;AAEA,SAASC,IAAT,EAAeC,MAAf,QAA6B,oBAA7B;AAQA,eAAe,MAAMC,cAAN,SAA6BJ,aAA7B,CAGb;AAMAK,EAAAA,WAAW,CAACC,MAAD,EAA6B;AACtC,UAAMA,MAAN;;AADsC;;AAAA,4CAORA,KAAK,IAAI;AACvC,UAAM;AAAEC,QAAAA,QAAF;AAAYC,QAAAA;AAAZ,UAA0BF,KAAhC;AACA,UAAMG,QAAQ,GAAGD,SAAS,SAAT,IAAAA,SAAS,WAAT,IAAAA,SAAS,CAAEE,UAAX,CAAsB,WAAtB,IACbF,SAAS,CAACG,SAAV,CAAoB,CAApB,CADa,GAEb,WAFJ;AAGA,0BACE,8CACE,+CACE,oBAAC,IAAD;AAAM,QAAA,QAAQ,EAAEF;AAAhB,SACGV,KAAK,CAACa,QAAN,CAAeC,GAAf,CAAmBN,QAAnB,EAA6BO,KAAK,IACjC,OAAOA,KAAP,KAAiB,QAAjB,GAA4BA,KAAK,CAACC,IAAN,EAA5B,GAA2CD,KAD5C,CADH,CADF,CADF,CADF;AAWD,KAvBuC;;AAEtC,SAAKE,SAAL,GAAiB,IAAjB;AACD;;AAsBDC,EAAAA,MAAM,GAAiB;AACrB,QAAM;AAAEC,MAAAA,SAAF;AAAaC,MAAAA,OAAb;AAAsBC,MAAAA;AAAtB,QAA8C,KAAKd,KAAzD;AACA,wBACE;AACE,MAAA,SAAS,EAAC,2BADZ;AAEE,MAAA,GAAG,EAAEU,SAAS,IAAI;AAChB,aAAKA,SAAL,GAAiBA,SAAjB;AACD;AAJH,OAMGE,SAAS,gBACR,oBAAC,MAAD;AACE,MAAA,QAAQ,EAAE;AACRT,QAAAA,QAAQ,EAAE,UADF;AAERY,QAAAA,KAAK,EAAEF,OAFC;AAGRG,QAAAA,WAAW,EAAE;AAHL,OADZ;AAME,MAAA,mBAAmB,EAAEF;AANvB,MADQ,gBAUR,oBAAC,QAAD;AAAU,MAAA,UAAU,EAAE;AAAEG,QAAAA,IAAI,EAAE,KAAKC;AAAb;AAAtB,OACGL,OADH,CAhBJ,CADF;AAuBD;;AAxDD;;gBAHmBf,c,kBAIG;AACpBc,EAAAA,SAAS,EAAE,KADS;AAEpBC,EAAAA,OAAO,EAAE;AAFW,C","sourcesContent":["import React, { PureComponent, ReactElement } from 'react';\nimport Markdown from 'react-markdown';\nimport { CodeComponent } from 'react-markdown/src/ast-to-react';\nimport { Code, Editor } from '@deephaven/console';\nimport type * as monaco from 'monaco-editor';\n\ninterface MarkdownEditorProps {\n isEditing: boolean;\n content: string;\n onEditorInitialized: (editor: monaco.editor.IStandaloneCodeEditor) => void;\n}\nexport default class MarkdownEditor extends PureComponent<\n MarkdownEditorProps,\n Record<string, never>\n> {\n static defaultProps = {\n isEditing: false,\n content: '',\n };\n\n constructor(props: MarkdownEditorProps) {\n super(props);\n this.container = null;\n }\n\n container: HTMLDivElement | null;\n\n renderMarkdown: CodeComponent = props => {\n const { children, className } = props;\n const language = className?.startsWith('language-')\n ? className.substring(9)\n : 'plaintext';\n return (\n <pre>\n <code>\n <Code language={language}>\n {React.Children.map(children, child =>\n typeof child === 'string' ? child.trim() : child\n )}\n </Code>\n </code>\n </pre>\n );\n };\n\n render(): ReactElement {\n const { isEditing, content, onEditorInitialized } = this.props;\n return (\n <div\n className=\"markdown-editor-container\"\n ref={container => {\n this.container = container;\n }}\n >\n {isEditing ? (\n <Editor\n settings={{\n language: 'markdown',\n value: content,\n lineNumbers: 'off',\n }}\n onEditorInitialized={onEditorInitialized}\n />\n ) : (\n <Markdown components={{ code: this.renderMarkdown }}>\n {content}\n </Markdown>\n )}\n </div>\n );\n }\n}\n"],"file":"MarkdownEditor.js"}
@@ -1,7 +1,7 @@
1
1
  import { Component, FocusEvent, MouseEvent, ReactElement } from 'react';
2
2
  import { ClosedPanel, ClosedPanels } from '@deephaven/dashboard';
3
3
  import { Container, EventEmitter, ReactComponentConfig } from '@deephaven/golden-layout';
4
- import type * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';
4
+ import type * as monaco from 'monaco-editor';
5
5
  import MarkdownEditor from '../controls/markdown/MarkdownEditor';
6
6
  import './MarkdownPanel.scss';
7
7
  interface PanelState {
@@ -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,2CAA2C,CAAC;AAMzE,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,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 +1 @@
1
- {"version":3,"sources":["../../src/panels/MarkdownPanel.tsx"],"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"],"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;AAOAe,EAAAA,WAAW,CAACC,KAAD,EAA4B;AACrC,UAAMA,KAAN;;AADqC;;AAAA;;AAAA,gDA8DlBf,OAAO,CAAEgB,YAAD,IAC3BA,YAAY,CAACC,MAAb,CAAoBC,KAAK,IAAIA,KAAK,CAACC,SAAN,KAAoB,eAAjD,EAAkEC,OAAlE,EAD0B,CA9DW;;AAGrC,SAAKC,0BAAL,GAAkC,KAAKA,0BAAL,CAAgCC,IAAhC,CAChC,IADgC,CAAlC;AAGA,SAAKC,oBAAL,GAA4B,KAAKA,oBAAL,CAA0BD,IAA1B,CAA+B,IAA/B,CAA5B;AACA,SAAKE,oBAAL,GAA4B,KAAKA,oBAAL,CAA0BF,IAA1B,CAA+B,IAA/B,CAA5B;AACA,SAAKG,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBH,IAAxB,CAA6B,IAA7B,CAA1B;AACA,SAAKI,uBAAL,GAA+B,KAAKA,uBAAL,CAA6BJ,IAA7B,CAAkC,IAAlC,CAA/B;AACA,SAAKK,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBL,IAAtB,CAA2B,IAA3B,CAAxB;AACA,SAAKM,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBN,IAAxB,CAA6B,IAA7B,CAA1B;AAEA,QAAM;AAAEO,MAAAA;AAAF,QAAiBd,KAAvB;AACA,QAAIe,OAAO,GAAG,IAAd;;AACA,QAAID,UAAU,IAAIA,UAAU,CAACC,OAA7B,EAAsC;AACpC,OAAC;AAAEA,QAAAA;AAAF,UAAcD,UAAf;AACD;;AAED,SAAKE,KAAL,GAAa;AACXC,MAAAA,gBAAgB,EAAEF,OAAO,IAAI,IADlB;AAEXG,MAAAA,SAAS,EAAE,KAFA;AAGXH,MAAAA,OAHW;AAKX;AACAD,MAAAA;AANW,KAAb;AASA,SAAKK,cAAL,GAAsB,IAAtB;AACD;;AAMDC,EAAAA,iBAAiB,CAACC,cAAD,EAA+B;AAC9C9B,IAAAA,aAAa,CAAC,KAAK4B,cAAN,CAAb;AACA,QAAM;AAAEG,MAAAA,SAAS,EAAEC;AAAb,QAAyC,KAAKJ,cAApD;;AACA,QAAI,KAAKK,MAAL,IAAeD,uBAAnB,EAA4C;AAAA;;AAC1C,UAAME,UAAU,GAAGF,uBAAuB,CAACG,qBAAxB,GAAgDC,GAAnE;AACA,UAAMC,gBAAgB,GAAGL,uBAAuB,CAACM,SAAjD;AACA,UAAMC,mBAAmB,GAAGP,uBAAuB,CAACQ,YAApD;AACA,UAAMC,UAAU,sDAAG,KAAKR,MAAL,CAAYS,QAAZ,EAAH,2DAAG,uBAAwBC,YAAxB,EAAH,yEAA6C,CAA7D;AAEA,UAAIC,WAAW,GAAGC,IAAI,CAACC,KAAL,CACf,CAACT,gBAAgB,GAAGP,cAAnB,GAAoCI,UAArC,IACCK,mBADF,GAEEE,UAHc,CAAlB;;AAKA,UAAIG,WAAW,GAAGH,UAAlB,EAA8B;AAC5BG,QAAAA,WAAW,GAAGH,UAAd;AACD;;AAED,WAAKR,MAAL,CAAYc,UAAZ,CAAuBH,WAAvB;AACA,WAAKX,MAAL,CAAYe,WAAZ,CAAwB;AACtBC,QAAAA,UAAU,EAAEL,WADU;AAEtBM,QAAAA,MAAM,EAAE;AAFc,OAAxB;AAIA,WAAKjB,MAAL,CAAYkB,KAAZ;AACD;AACF;;AAMDpC,EAAAA,0BAA0B,CAACqC,KAAD,EAAmC;AAC3D,QAAM;AAAEzB,MAAAA;AAAF,QAAgB,KAAKF,KAA3B;AACA,QAAM4B,gBAAgB,GAAGD,KAAK,CAACE,OAA/B;;AAEA,QAAI,CAAC3B,SAAL,EAAgB;AACd,WAAK4B,QAAL,CAAc;AAAE5B,QAAAA,SAAS,EAAE;AAAb,OAAd,EAAmC,MAAM;AACvC,aAAKE,iBAAL,CAAuBwB,gBAAvB;AACD,OAFD;AAGD;AACF;;AAEDjC,EAAAA,uBAAuB,CAACa,MAAD,EAAoD;AACzE5B,IAAAA,GAAG,CAACmD,KAAJ,CAAU,gCAAV;AACA,SAAKvB,MAAL,GAAcA,MAAd;AACD;;AAEDhB,EAAAA,oBAAoB,GAAS;AAC3BZ,IAAAA,GAAG,CAACmD,KAAJ,CAAU,oBAAV;AAEA,SAAKD,QAAL,CACE;AACE7B,MAAAA,gBAAgB,EAAE,KADpB;AAEEF,MAAAA,OAAO,EAAE,EAFX;AAGEG,MAAAA,SAAS,EAAE,IAHb;AAKE;AACAJ,MAAAA,UAAU,EAAE;AAAEC,QAAAA,OAAO,EAAE;AAAX;AANd,KADF,EASE,MAAM;AACJ,UAAI,KAAKS,MAAL,IAAe,KAAKA,MAAL,CAAYkB,KAA/B,EAAsC;AACpC,aAAKlB,MAAL,CAAYkB,KAAZ;AACD;AACF,KAbH;AAeD;;AAEDhC,EAAAA,kBAAkB,CAACsC,QAAD,EAAuC;AACvDpD,IAAAA,GAAG,CAACmD,KAAJ,CAAU,kBAAV,EAA8BC,QAA9B;AAEA,QAAM;AAAEC,MAAAA,WAAF;AAAeC,MAAAA;AAAf,QAA8B,KAAKlD,KAAzC;AACA,QAAMmD,MAAM,GAAG/D,WAAW,CAACgE,+BAAZ,CAA4CH,WAA5C,CAAf;AACAC,IAAAA,UAAU,CAACG,IAAX,CAAgBhE,UAAU,CAACiE,MAA3B,EAAmCN,QAAnC,EAA6CG,MAA7C;AACD;;AAED1C,EAAAA,oBAAoB,CAACuC,QAAD,EAAuC;AACzD,QAAM;AAAEE,MAAAA;AAAF,QAAiB,KAAKlD,KAA5B;AACAkD,IAAAA,UAAU,CAACG,IAAX,CAAgBhE,UAAU,CAACkE,MAA3B,EAAmCP,QAAnC;AACD;;AAEDpC,EAAAA,gBAAgB,CAAC+B,KAAD,EAA0C;AAAA;;AACxD/C,IAAAA,GAAG,CAACmD,KAAJ;AACA,QAAM;AAAE7B,MAAAA;AAAF,QAAgB,KAAKF,KAA3B,CAFwD,CAIxD;;AACA,QACE,CAACE,SAAD,4BACA,KAAKC,cADL,0EACA,qBAAqBG,SADrB,kDACA,sBAAgCkC,QAAhC,CAAyCb,KAAK,CAACc,aAA/C,CAFF,EAGE;AACA;AACD;;AAED,QAAM1C,OAAO,mBAAG,KAAKS,MAAR,iDAAG,aAAakC,QAAb,EAAhB;AAEA,SAAKZ,QAAL,CAAc;AACZ/B,MAAAA,OADY;AAEZG,MAAAA,SAAS,EAAE,KAFC;AAIZ;AACAJ,MAAAA,UAAU,EAAE;AAAEC,QAAAA;AAAF;AALA,KAAd;AAOD;;AAEDF,EAAAA,kBAAkB,GAAS;AACzB,QAAM;AAAEK,MAAAA;AAAF,QAAgB,KAAKF,KAA3B;;AACA,QAAIE,SAAS,IAAI,KAAKM,MAAtB,EAA8B;AAC5B,WAAKA,MAAL,CAAYmC,MAAZ;AACD;AACF;;AAEDC,EAAAA,MAAM,GAAiB;AACrB,QAAM;AAAEX,MAAAA,WAAF;AAAeC,MAAAA,UAAf;AAA2BjD,MAAAA;AAA3B,QAA4C,KAAKD,KAAvD;AACA,QAAM;AAAEkB,MAAAA,SAAF;AAAaD,MAAAA,gBAAb;AAA+BF,MAAAA;AAA/B,QAA2C,KAAKC,KAAtD;AACA,QAAM6C,eAAe,GAAG,KAAKC,kBAAL,CAAwB7D,YAAxB,CAAxB;AAEA,wBACE,oBAAC,KAAD;AACE,MAAA,WAAW,EAAEgD,WADf;AAEE,MAAA,UAAU,EAAEC,UAFd;AAGE,MAAA,SAAS,EAAC,gBAHZ;AAIE,MAAA,cAAc,EAAE,IAJlB;AAKE,MAAA,QAAQ,EAAE,KAAKrC,kBALjB;AAME,MAAA,MAAM,EAAE,KAAKD,gBANf;AAOE,MAAA,UAAU,MAPZ;AAQE,MAAA,WAAW;AARb,OAUGK,gBAAgB,gBACf,oBAAC,iBAAD;AACE,MAAA,eAAe,EAAE4C,eADnB;AAEE,MAAA,QAAQ,EAAE,KAAKrD,oBAFjB;AAGE,MAAA,MAAM,EAAE,KAAKE,kBAHf;AAIE,MAAA,QAAQ,EAAE,KAAKD;AAJjB,MADe,gBAQf,oBAAC,iBAAD;AACE,MAAA,SAAS,EAAES,SADb;AAEE,MAAA,aAAa,EAAE,KAAKZ;AAFtB,oBAIE,oBAAC,cAAD;AACE,MAAA,GAAG,EAAEa,cAAc,IAAI;AACrB,aAAKA,cAAL,GAAsBA,cAAtB;AACD,OAHH;AAIE,MAAA,SAAS,EAAED,SAJb;AAKE,MAAA,OAAO,EAAEH,OAAF,aAAEA,OAAF,cAAEA,OAAF,GAAagD,SALtB;AAME,MAAA,mBAAmB,EAAE,KAAKpD;AAN5B,MAJF,CAlBJ,CADF;AAmCD;;AAhMD;;gBAHWb,a,kBAIW;AACpBgB,EAAAA,UAAU,EAAE;AADQ,C;;gBAJXhB,a,eAQQ,e;;AA8LrB,IAAMkE,eAAe,GAAG,CACtBhD,KADsB,EAEtBiD,QAFsB,KAGnB;AACH,MAAM;AAAEC,IAAAA;AAAF,MAAuBD,QAA7B;AACA,SAAO;AACLhE,IAAAA,YAAY,EAAEd,2BAA2B,CAAC6B,KAAD,EAAQkD,gBAAR;AADpC,GAAP;AAGD,CARD;;AAUA,eAAehF,OAAO,CAAC8E,eAAD,EAAkB,IAAlB,EAAwB,IAAxB,EAA8B;AAAEG,EAAAA,UAAU,EAAE;AAAd,CAA9B,CAAP,CACbrE,aADa,CAAf","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/esm/vs/editor/editor.api.js';\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"],"file":"MarkdownPanel.js"}
1
+ {"version":3,"sources":["../../src/panels/MarkdownPanel.tsx"],"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"],"mappings":"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","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"],"file":"MarkdownPanel.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/dashboard-core-plugins",
3
- "version": "0.16.0",
3
+ "version": "0.16.1-beta.2+8c9fe7c",
4
4
  "description": "Deephaven Dashboard Core Plugins",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -30,20 +30,20 @@
30
30
  "start": "cross-env NODE_ENV=development npm run watch"
31
31
  },
32
32
  "dependencies": {
33
- "@deephaven/chart": "^0.16.0",
34
- "@deephaven/components": "^0.16.0",
35
- "@deephaven/console": "^0.16.0",
36
- "@deephaven/dashboard": "^0.16.0",
37
- "@deephaven/file-explorer": "^0.16.0",
38
- "@deephaven/golden-layout": "^0.16.0",
39
- "@deephaven/grid": "^0.16.0",
40
- "@deephaven/icons": "^0.16.0",
41
- "@deephaven/iris-grid": "^0.16.0",
42
- "@deephaven/jsapi-shim": "^0.16.0",
43
- "@deephaven/jsapi-utils": "^0.16.0",
44
- "@deephaven/log": "^0.16.0",
45
- "@deephaven/redux": "^0.16.0",
46
- "@deephaven/utils": "^0.16.0",
33
+ "@deephaven/chart": "^0.16.1-beta.2+8c9fe7c",
34
+ "@deephaven/components": "^0.16.1-beta.2+8c9fe7c",
35
+ "@deephaven/console": "^0.16.1-beta.2+8c9fe7c",
36
+ "@deephaven/dashboard": "^0.16.1-beta.2+8c9fe7c",
37
+ "@deephaven/file-explorer": "^0.16.1-beta.2+8c9fe7c",
38
+ "@deephaven/golden-layout": "^0.16.1-beta.2+8c9fe7c",
39
+ "@deephaven/grid": "^0.16.1-beta.2+8c9fe7c",
40
+ "@deephaven/icons": "^0.16.1-beta.2+8c9fe7c",
41
+ "@deephaven/iris-grid": "^0.16.1-beta.2+8c9fe7c",
42
+ "@deephaven/jsapi-shim": "^0.16.1-beta.2+8c9fe7c",
43
+ "@deephaven/jsapi-utils": "^0.16.1-beta.2+8c9fe7c",
44
+ "@deephaven/log": "^0.16.1-beta.2+8c9fe7c",
45
+ "@deephaven/redux": "^0.16.1-beta.2+8c9fe7c",
46
+ "@deephaven/utils": "^0.16.1-beta.2+8c9fe7c",
47
47
  "@fortawesome/react-fontawesome": "^0.1.18",
48
48
  "classnames": "^2.3.1",
49
49
  "deep-equal": "^2.0.5",
@@ -66,8 +66,8 @@
66
66
  "react-redux": "^7.2.4"
67
67
  },
68
68
  "devDependencies": {
69
- "@deephaven/mocks": "^0.16.0",
70
- "@deephaven/tsconfig": "^0.16.0"
69
+ "@deephaven/mocks": "^0.16.1-beta.2+8c9fe7c",
70
+ "@deephaven/tsconfig": "^0.16.1-beta.2+8c9fe7c"
71
71
  },
72
72
  "files": [
73
73
  "dist"
@@ -75,5 +75,5 @@
75
75
  "publishConfig": {
76
76
  "access": "public"
77
77
  },
78
- "gitHead": "1d10956499cd451145e704690bc8f2d5cfb6a786"
78
+ "gitHead": "8c9fe7c421c3b53b9af6820a3d74f0574426c15d"
79
79
  }