@ni/nimble-components 19.9.0 → 19.9.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.
@@ -5,7 +5,7 @@ export const styles = css `
5
5
 
6
6
  :host {
7
7
  box-sizing: border-box;
8
- grid-template-columns: auto auto 1fr;
8
+ grid-template-columns: auto 1fr;
9
9
  grid-template-rows: auto 1fr;
10
10
  }
11
11
 
@@ -8,5 +8,35 @@ declare global {
8
8
  * A nimble styled rich text viewer
9
9
  */
10
10
  export declare class RichTextViewer extends FoundationElement {
11
+ /**
12
+ *
13
+ * @public
14
+ * Markdown string to render its corresponding rich text content in the component.
15
+ */
16
+ markdown: string;
17
+ /**
18
+ * @internal
19
+ */
20
+ viewer: HTMLDivElement;
21
+ private readonly markdownParser;
22
+ private readonly domSerializer;
23
+ constructor();
24
+ /**
25
+ * @internal
26
+ */
27
+ connectedCallback(): void;
28
+ /**
29
+ * @internal
30
+ */
31
+ markdownChanged(): void;
32
+ private initializeMarkdownParser;
33
+ /**
34
+ *
35
+ * This function takes a markdown string, parses it using the ProseMirror MarkdownParser, serializes the parsed content into a
36
+ * DOM structure using a DOMSerializer, and returns the serialized result.
37
+ * If the markdown parser returns null, it will clear the viewer component by creating an empty document fragment.
38
+ */
39
+ private parseMarkdownToDOM;
40
+ private updateView;
11
41
  }
12
42
  export declare const richTextViewerTag: string;
@@ -1,11 +1,83 @@
1
+ import { __decorate } from "tslib";
1
2
  import { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';
3
+ import { schema, defaultMarkdownParser, MarkdownParser } from 'prosemirror-markdown';
4
+ import { DOMSerializer } from 'prosemirror-model';
5
+ import { observable } from '@microsoft/fast-element';
2
6
  import { template } from './template';
3
7
  import { styles } from './styles';
4
8
  /**
5
9
  * A nimble styled rich text viewer
6
10
  */
7
11
  export class RichTextViewer extends FoundationElement {
12
+ constructor() {
13
+ super();
14
+ /**
15
+ *
16
+ * @public
17
+ * Markdown string to render its corresponding rich text content in the component.
18
+ */
19
+ this.markdown = '';
20
+ this.domSerializer = DOMSerializer.fromSchema(schema);
21
+ this.markdownParser = this.initializeMarkdownParser();
22
+ }
23
+ /**
24
+ * @internal
25
+ */
26
+ connectedCallback() {
27
+ super.connectedCallback();
28
+ this.updateView();
29
+ }
30
+ /**
31
+ * @internal
32
+ */
33
+ markdownChanged() {
34
+ if (this.$fastController.isConnected) {
35
+ this.updateView();
36
+ }
37
+ }
38
+ initializeMarkdownParser() {
39
+ /**
40
+ * It configures the tokenizer of the default Markdown parser with the 'zero' preset.
41
+ * The 'zero' preset is a configuration with no rules enabled by default to selectively enable specific rules.
42
+ * https://github.com/markdown-it/markdown-it/blob/2b6cac25823af011ff3bc7628bc9b06e483c5a08/lib/presets/zero.js#L1
43
+ *
44
+ */
45
+ const zeroTokenizerConfiguration = defaultMarkdownParser.tokenizer.configure('zero');
46
+ // The detailed information of the supported rules were provided in the below CommonMark spec document.
47
+ // https://spec.commonmark.org/0.30/
48
+ const supportedTokenizerRules = zeroTokenizerConfiguration.enable([
49
+ 'emphasis',
50
+ 'list',
51
+ 'autolink'
52
+ ]);
53
+ return new MarkdownParser(schema, supportedTokenizerRules, defaultMarkdownParser.tokens);
54
+ }
55
+ /**
56
+ *
57
+ * This function takes a markdown string, parses it using the ProseMirror MarkdownParser, serializes the parsed content into a
58
+ * DOM structure using a DOMSerializer, and returns the serialized result.
59
+ * If the markdown parser returns null, it will clear the viewer component by creating an empty document fragment.
60
+ */
61
+ parseMarkdownToDOM(value) {
62
+ const parsedMarkdownContent = this.markdownParser.parse(value);
63
+ if (parsedMarkdownContent === null) {
64
+ return document.createDocumentFragment();
65
+ }
66
+ return this.domSerializer.serializeFragment(parsedMarkdownContent.content);
67
+ }
68
+ updateView() {
69
+ if (this.markdown) {
70
+ const serializedContent = this.parseMarkdownToDOM(this.markdown);
71
+ this.viewer.replaceChildren(serializedContent);
72
+ }
73
+ else {
74
+ this.viewer.innerHTML = '';
75
+ }
76
+ }
8
77
  }
78
+ __decorate([
79
+ observable
80
+ ], RichTextViewer.prototype, "markdown", void 0);
9
81
  const nimbleRichTextViewer = RichTextViewer.compose({
10
82
  baseName: 'rich-text-viewer',
11
83
  template,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rich-text-viewer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAQlC;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,iBAAiB;CAAG;AAExD,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,CAAC;IAChD,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE;KACrB,UAAU,CAAC,QAAQ,CAAC;KACpB,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rich-text-viewer/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EACH,MAAM,EACN,qBAAqB,EACrB,cAAc,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAQlC;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,iBAAiB;IAgBjD;QACI,KAAK,EAAE,CAAC;QAhBZ;;;;WAIG;QAEI,aAAQ,GAAG,EAAE,CAAC;QAWjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAC1D,CAAC;IAED;;OAEG;IACa,iBAAiB;QAC7B,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACI,eAAe;QAClB,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;YAClC,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;IACL,CAAC;IAEO,wBAAwB;QAC5B;;;;;WAKG;QACH,MAAM,0BAA0B,GAAG,qBAAqB,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAErF,uGAAuG;QACvG,oCAAoC;QACpC,MAAM,uBAAuB,GAAG,0BAA0B,CAAC,MAAM,CAAC;YAC9D,UAAU;YACV,MAAM;YACN,UAAU;SACb,CAAC,CAAC;QAEH,OAAO,IAAI,cAAc,CACrB,MAAM,EACN,uBAAuB,EACvB,qBAAqB,CAAC,MAAM,CAC/B,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACK,kBAAkB,CAAC,KAAa;QACpC,MAAM,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAI,qBAAqB,KAAK,IAAI,EAAE;YAChC,OAAO,QAAQ,CAAC,sBAAsB,EAAE,CAAC;SAC5C;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAiB,CACvC,qBAAqB,CAAC,OAAO,CAChC,CAAC;IACN,CAAC;IAEO,UAAU;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;SAClD;aAAM;YACH,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC;SAC9B;IACL,CAAC;CACJ;AAjFG;IADC,UAAU;gDACU;AAmFzB,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,CAAC;IAChD,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE;KACrB,UAAU,CAAC,QAAQ,CAAC;KACpB,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC"}
@@ -1,12 +1,52 @@
1
1
  import { css } from '@microsoft/fast-element';
2
2
  import { display } from '@microsoft/fast-foundation';
3
- import { bodyFont, bodyFontColor } from '../theme-provider/design-tokens';
3
+ import { bodyFont, bodyFontColor, linkActiveFontColor, linkFontColor } from '../theme-provider/design-tokens';
4
4
  export const styles = css `
5
5
  ${display('flex')}
6
6
 
7
7
  :host {
8
8
  font: ${bodyFont};
9
+ outline: none;
9
10
  color: ${bodyFontColor};
11
+ inline-size: auto;
12
+ overflow: auto;
13
+ block-size: 100%;
14
+ min-block-size: 36px;
15
+ }
16
+
17
+ .viewer {
18
+ font: inherit;
19
+ outline: none;
20
+ box-sizing: border-box;
21
+ position: relative;
22
+ color: inherit;
23
+ }
24
+
25
+ .viewer > :first-child {
26
+ margin-block-start: 0;
27
+ }
28
+
29
+ .viewer > :last-child {
30
+ margin-block-end: 0;
31
+ }
32
+
33
+ li > p {
34
+ margin-block: 0;
35
+ }
36
+
37
+ ${
38
+ /* In Firefox, if the paragraph within the list is empty, the ordered lists overlap. Therefore, hiding the paragraph element allows for the proper rendering of empty lists. */ ''}
39
+ li > p:empty {
40
+ display: none;
41
+ }
42
+
43
+ a {
44
+ word-break: break-all;
45
+ color: ${linkFontColor};
46
+ }
47
+
48
+ a:active {
49
+ color: ${linkActiveFontColor};
10
50
  }
11
51
  `;
12
52
  //# sourceMappingURL=styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/rich-text-viewer/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAE1E,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,MAAM,CAAC;;;gBAGL,QAAQ;iBACP,aAAa;;CAE7B,CAAC"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/rich-text-viewer/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EACH,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,aAAa,EAChB,MAAM,iCAAiC,CAAC;AAEzC,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,MAAM,CAAC;;;gBAGL,QAAQ;;iBAEP,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;MA2BxB;AACE,gLAAgL,CAAC,EACrL;;;;;;;iBAOa,aAAa;;;;iBAIb,mBAAmB;;CAEnC,CAAC"}
@@ -1,5 +1,5 @@
1
- import { html } from '@microsoft/fast-element';
1
+ import { html, ref } from '@microsoft/fast-element';
2
2
  export const template = html `
3
- <template> Rich Text Viewer here. </template>
3
+ <div ${ref('viewer')} class="viewer"></div>
4
4
  `;
5
5
  //# sourceMappingURL=template.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/rich-text-viewer/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAG/C,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAgB;;CAE3C,CAAC"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/rich-text-viewer/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAGpD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAgB;WACjC,GAAG,CAAC,QAAQ,CAAC;CACvB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { RichTextViewer } from '..';
2
+ /**
3
+ * Page object for the `nimble-rich-text-viewer` component.
4
+ */
5
+ export declare class RichTextViewerPageObject {
6
+ private readonly richTextViewerElement;
7
+ constructor(richTextViewerElement: RichTextViewer);
8
+ getRenderedMarkdownLastChildContents(): string;
9
+ getRenderedMarkdownLastChildAttribute(attribute: string): string;
10
+ /**
11
+ * Retrieves tag names for the rendered markdown content in document order
12
+ * @returns An array of tag names in document order
13
+ */
14
+ getRenderedMarkdownTagNames(): string[];
15
+ /**
16
+ * Retrieves text contents for the rendered markdown content in document order
17
+ * @returns An array of text contents of last elements in a tree
18
+ */
19
+ getRenderedMarkdownLeafContents(): string[];
20
+ private getMarkdownRenderedElement;
21
+ private getLastChildMarkdownRenderedElement;
22
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Page object for the `nimble-rich-text-viewer` component.
3
+ */
4
+ export class RichTextViewerPageObject {
5
+ constructor(richTextViewerElement) {
6
+ this.richTextViewerElement = richTextViewerElement;
7
+ }
8
+ getRenderedMarkdownLastChildContents() {
9
+ return this.getLastChildMarkdownRenderedElement()?.textContent || '';
10
+ }
11
+ getRenderedMarkdownLastChildAttribute(attribute) {
12
+ return (this.getLastChildMarkdownRenderedElement()?.getAttribute(attribute) || '');
13
+ }
14
+ /**
15
+ * Retrieves tag names for the rendered markdown content in document order
16
+ * @returns An array of tag names in document order
17
+ */
18
+ getRenderedMarkdownTagNames() {
19
+ return Array.from(this.getMarkdownRenderedElement().querySelectorAll('*')).map(el => el.tagName);
20
+ }
21
+ /**
22
+ * Retrieves text contents for the rendered markdown content in document order
23
+ * @returns An array of text contents of last elements in a tree
24
+ */
25
+ getRenderedMarkdownLeafContents() {
26
+ return Array.from(this.getMarkdownRenderedElement().querySelectorAll('*'))
27
+ .filter((el, _) => {
28
+ return el.children.length === 0;
29
+ })
30
+ .map(el => el.textContent || '');
31
+ }
32
+ getMarkdownRenderedElement() {
33
+ return this.richTextViewerElement.shadowRoot?.querySelector('.viewer');
34
+ }
35
+ getLastChildMarkdownRenderedElement() {
36
+ let lastElement = this.getMarkdownRenderedElement()?.lastElementChild;
37
+ while (lastElement?.lastElementChild) {
38
+ lastElement = lastElement?.lastElementChild;
39
+ }
40
+ return lastElement;
41
+ }
42
+ }
43
+ //# sourceMappingURL=rich-text-viewer.pageobject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rich-text-viewer.pageobject.js","sourceRoot":"","sources":["../../../../src/rich-text-viewer/testing/rich-text-viewer.pageobject.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,wBAAwB;IACjC,YACqB,qBAAqC;QAArC,0BAAqB,GAArB,qBAAqB,CAAgB;IACvD,CAAC;IAEG,oCAAoC;QACvC,OAAO,IAAI,CAAC,mCAAmC,EAAE,EAAE,WAAW,IAAI,EAAE,CAAC;IACzE,CAAC;IAEM,qCAAqC,CAAC,SAAiB;QAC1D,OAAO,CACH,IAAI,CAAC,mCAAmC,EAAE,EAAE,YAAY,CACpD,SAAS,CACZ,IAAI,EAAE,CACV,CAAC;IACN,CAAC;IAED;;;OAGG;IACI,2BAA2B;QAC9B,OAAO,KAAK,CAAC,IAAI,CACb,IAAI,CAAC,0BAA0B,EAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAC3D,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,+BAA+B;QAClC,OAAO,KAAK,CAAC,IAAI,CACb,IAAI,CAAC,0BAA0B,EAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAC3D;aACI,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACd,OAAO,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;QACpC,CAAC,CAAC;aACD,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAEO,0BAA0B;QAC9B,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC3E,CAAC;IAEO,mCAAmC;QACvC,IAAI,WAAW,GAAG,IAAI,CAAC,0BAA0B,EAAE,EAAE,gBAAgB,CAAC;QAEtE,OAAO,WAAW,EAAE,gBAAgB,EAAE;YAClC,WAAW,GAAG,WAAW,EAAE,gBAAgB,CAAC;SAC/C;QACD,OAAO,WAAW,CAAC;IACvB,CAAC;CACJ"}
@@ -8,5 +8,35 @@ declare global {
8
8
  * A nimble styled rich text viewer
9
9
  */
10
10
  export declare class RichTextViewer extends FoundationElement {
11
+ /**
12
+ *
13
+ * @public
14
+ * Markdown string to render its corresponding rich text content in the component.
15
+ */
16
+ markdown: string;
17
+ /**
18
+ * @internal
19
+ */
20
+ viewer: HTMLDivElement;
21
+ private readonly markdownParser;
22
+ private readonly domSerializer;
23
+ constructor();
24
+ /**
25
+ * @internal
26
+ */
27
+ connectedCallback(): void;
28
+ /**
29
+ * @internal
30
+ */
31
+ markdownChanged(): void;
32
+ private initializeMarkdownParser;
33
+ /**
34
+ *
35
+ * This function takes a markdown string, parses it using the ProseMirror MarkdownParser, serializes the parsed content into a
36
+ * DOM structure using a DOMSerializer, and returns the serialized result.
37
+ * If the markdown parser returns null, it will clear the viewer component by creating an empty document fragment.
38
+ */
39
+ private parseMarkdownToDOM;
40
+ private updateView;
11
41
  }
12
42
  export declare const richTextViewerTag: string;
@@ -0,0 +1,22 @@
1
+ import type { RichTextViewer } from '..';
2
+ /**
3
+ * Page object for the `nimble-rich-text-viewer` component.
4
+ */
5
+ export declare class RichTextViewerPageObject {
6
+ private readonly richTextViewerElement;
7
+ constructor(richTextViewerElement: RichTextViewer);
8
+ getRenderedMarkdownLastChildContents(): string;
9
+ getRenderedMarkdownLastChildAttribute(attribute: string): string;
10
+ /**
11
+ * Retrieves tag names for the rendered markdown content in document order
12
+ * @returns An array of tag names in document order
13
+ */
14
+ getRenderedMarkdownTagNames(): string[];
15
+ /**
16
+ * Retrieves text contents for the rendered markdown content in document order
17
+ * @returns An array of text contents of last elements in a tree
18
+ */
19
+ getRenderedMarkdownLeafContents(): string[];
20
+ private getMarkdownRenderedElement;
21
+ private getLastChildMarkdownRenderedElement;
22
+ }
@@ -5,7 +5,7 @@ export const styles = css `
5
5
 
6
6
  :host {
7
7
  box-sizing: border-box;
8
- grid-template-columns: auto auto 1fr;
8
+ grid-template-columns: auto 1fr;
9
9
  grid-template-rows: auto 1fr;
10
10
  }
11
11
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ni/nimble-components",
3
- "version": "19.9.0",
3
+ "version": "19.9.2",
4
4
  "description": "Styled web components for the NI Nimble Design System",
5
5
  "scripts": {
6
6
  "build": "npm run generate-icons && npm run build-components && npm run bundle-components && npm run generate-scss && npm run build-storybook",
@@ -69,11 +69,14 @@
69
69
  "@types/d3-scale": "^4.0.2",
70
70
  "@types/d3-selection": "^3.0.0",
71
71
  "@types/d3-zoom": "^3.0.0",
72
+ "@types/markdown-it": "^12.2.3",
72
73
  "d3-array": "^3.2.2",
73
74
  "d3-random": "^3.0.1",
74
75
  "d3-scale": "^4.0.2",
75
76
  "d3-selection": "^3.0.0",
76
77
  "d3-zoom": "^3.0.0",
78
+ "prosemirror-markdown": "^1.11.0",
79
+ "prosemirror-model": "^1.19.2",
77
80
  "tslib": "^2.2.0"
78
81
  },
79
82
  "devDependencies": {
@@ -82,6 +85,7 @@
82
85
  "@ni/eslint-config-javascript": "^4.2.0",
83
86
  "@ni/eslint-config-typescript": "^4.2.0",
84
87
  "@rollup/plugin-commonjs": "^24.0.1",
88
+ "@rollup/plugin-json": "^6.0.0",
85
89
  "@rollup/plugin-node-resolve": "^15.0.1",
86
90
  "@rollup/plugin-replace": "^5.0.1",
87
91
  "@rollup/plugin-terser": "^0.4.0",
@@ -125,6 +129,7 @@
125
129
  "puppeteer": "^10.1.0",
126
130
  "remark-gfm": "^3.0.1",
127
131
  "rollup": "^3.10.1",
132
+ "rollup-plugin-polyfill-node": "^0.12.0",
128
133
  "rollup-plugin-sourcemaps": "^0.6.3",
129
134
  "storybook": "^7.0.4",
130
135
  "ts-loader": "^9.2.5",