@ni/nimble-components 19.9.1 → 20.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/all-components-bundle.js +15661 -42
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +3814 -2978
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/banner/index.d.ts +0 -6
- package/dist/esm/banner/index.js +0 -3
- package/dist/esm/banner/index.js.map +1 -1
- package/dist/esm/banner/template.js +1 -1
- package/dist/esm/banner/template.js.map +1 -1
- package/dist/esm/rich-text-viewer/index.d.ts +30 -0
- package/dist/esm/rich-text-viewer/index.js +72 -0
- package/dist/esm/rich-text-viewer/index.js.map +1 -1
- package/dist/esm/rich-text-viewer/styles.js +41 -1
- package/dist/esm/rich-text-viewer/styles.js.map +1 -1
- package/dist/esm/rich-text-viewer/template.js +2 -2
- package/dist/esm/rich-text-viewer/template.js.map +1 -1
- package/dist/esm/rich-text-viewer/testing/rich-text-viewer.pageobject.d.ts +22 -0
- package/dist/esm/rich-text-viewer/testing/rich-text-viewer.pageobject.js +43 -0
- package/dist/esm/rich-text-viewer/testing/rich-text-viewer.pageobject.js.map +1 -0
- package/dist/esm/src/banner/index.d.ts +0 -6
- package/dist/esm/src/rich-text-viewer/index.d.ts +30 -0
- package/dist/esm/src/rich-text-viewer/testing/rich-text-viewer.pageobject.d.ts +22 -0
- package/package.json +6 -1
|
@@ -33,12 +33,6 @@ export declare class Banner extends FoundationElement {
|
|
|
33
33
|
* Hides the dismiss button
|
|
34
34
|
*/
|
|
35
35
|
preventDismiss: boolean;
|
|
36
|
-
/**
|
|
37
|
-
* @public
|
|
38
|
-
* @description
|
|
39
|
-
* Label (not visible) for the dismiss button
|
|
40
|
-
*/
|
|
41
|
-
dismissButtonLabel?: string;
|
|
42
36
|
/**
|
|
43
37
|
* @internal
|
|
44
38
|
*/
|
package/dist/esm/banner/index.js
CHANGED
|
@@ -64,9 +64,6 @@ __decorate([
|
|
|
64
64
|
__decorate([
|
|
65
65
|
attr({ attribute: 'prevent-dismiss', mode: 'boolean' })
|
|
66
66
|
], Banner.prototype, "preventDismiss", void 0);
|
|
67
|
-
__decorate([
|
|
68
|
-
attr({ attribute: 'dismiss-button-label' })
|
|
69
|
-
], Banner.prototype, "dismissButtonLabel", void 0);
|
|
70
67
|
applyMixins(Banner, ARIAGlobalStatesAndProperties);
|
|
71
68
|
const nimbleBanner = Banner.compose({
|
|
72
69
|
baseName: 'banner',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/banner/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EACH,WAAW,EACX,6BAA6B,EAC7B,YAAY,EACZ,iBAAiB,EACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAA2B,MAAM,SAAS,CAAC;AAQlE;;GAEG;AACH,MAAM,OAAO,MAAO,SAAQ,iBAAiB;IAA7C;;QACI;;;;WAIG;QAEI,SAAI,GAAG,KAAK,CAAC;QAEpB;;;;WAIG;QAEI,aAAQ,GAAmB,cAAc,CAAC,OAAO,CAAC;QAEzD;;;;WAIG;QAEI,gBAAW,GAAG,KAAK,CAAC;QAE3B;;;;WAIG;QAEI,mBAAc,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/banner/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EACH,WAAW,EACX,6BAA6B,EAC7B,YAAY,EACZ,iBAAiB,EACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAA2B,MAAM,SAAS,CAAC;AAQlE;;GAEG;AACH,MAAM,OAAO,MAAO,SAAQ,iBAAiB;IAA7C;;QACI;;;;WAIG;QAEI,SAAI,GAAG,KAAK,CAAC;QAEpB;;;;WAIG;QAEI,aAAQ,GAAmB,cAAc,CAAC,OAAO,CAAC;QAEzD;;;;WAIG;QAEI,gBAAW,GAAG,KAAK,CAAC;QAE3B;;;;WAIG;QAEI,mBAAc,GAAG,KAAK,CAAC;IAmBlC,CAAC;IAjBG;;OAEG;IACI,WAAW;QACd,MAAM,WAAW,GAA4B;YACzC,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI;SACvB,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACI,aAAa;QAChB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;IACtB,CAAC;CACJ;AA3CG;IADC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;oCACN;AAQpB;IADC,IAAI,EAAE;wCACkD;AAQzD;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;2CAC1B;AAQ3B;IADC,IAAI,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;8CAC1B;AAuBlC,WAAW,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;AAEnD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,QAAQ,EAAE,QAAQ;IAClB,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -52,7 +52,7 @@ export const template = html `
|
|
|
52
52
|
${when(x => !x.preventDismiss, html `
|
|
53
53
|
<${buttonTag} appearance="ghost" content-hidden @click="${x => x.dismissBanner()}">
|
|
54
54
|
<${iconXmarkTag} slot="start"></${iconXmarkTag}>
|
|
55
|
-
${x =>
|
|
55
|
+
${x => popupDismissLabel.getValueFor(x)}
|
|
56
56
|
</${buttonTag}>
|
|
57
57
|
`)}
|
|
58
58
|
</div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/banner/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAQ;;;uBAGb,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU;qBACnB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;yBACX,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;wBACpB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;4BACd,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe;wBAC1B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;yBACjB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;6BACf,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB;yBAC3B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;uBACrB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU;yBACf,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;uBACrB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU;wBAChB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;6BACb,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB;sBAC9B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;;qBAEjB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;qBACf,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;yBACX,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;gCACZ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB;;;cAG5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,EAAE,IAAI,CAAA;mBAC9C,sBAAsB,MAAM,sBAAsB;aACxD,CAAC;cACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,OAAO,EAAE,IAAI,CAAA;mBAChD,qBAAqB,MAAM,qBAAqB;aACtD,CAAC;cACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,WAAW,EAAE,IAAI,CAAA;mBACpD,WAAW,MAAM,WAAW;aAClC,CAAC;;;;;;;;;kBASI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAQ;uBACpC,SAAS,8CAA8C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE;2BACzE,YAAY,mBAAmB,YAAY;0BAC5C,CAAC,CAAC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/banner/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAQ;;;uBAGb,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU;qBACnB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;yBACX,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;wBACpB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;4BACd,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe;wBAC1B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;yBACjB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;6BACf,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB;yBAC3B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;uBACrB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU;yBACf,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;uBACrB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU;wBAChB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;6BACb,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB;sBAC9B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;;qBAEjB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;qBACf,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;yBACX,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;gCACZ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB;;;cAG5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,KAAK,EAAE,IAAI,CAAA;mBAC9C,sBAAsB,MAAM,sBAAsB;aACxD,CAAC;cACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,OAAO,EAAE,IAAI,CAAA;mBAChD,qBAAqB,MAAM,qBAAqB;aACtD,CAAC;cACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,WAAW,EAAE,IAAI,CAAA;mBACpD,WAAW,MAAM,WAAW;aAClC,CAAC;;;;;;;;;kBASI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAQ;uBACpC,SAAS,8CAA8C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE;2BACzE,YAAY,mBAAmB,YAAY;0BAC5C,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;wBACvC,SAAS;iBAChB,CAAC;;;;CAIjB,CAAC"}
|
|
@@ -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;
|
|
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,
|
|
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
|
-
<
|
|
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;
|
|
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"}
|
|
@@ -33,12 +33,6 @@ export declare class Banner extends FoundationElement {
|
|
|
33
33
|
* Hides the dismiss button
|
|
34
34
|
*/
|
|
35
35
|
preventDismiss: boolean;
|
|
36
|
-
/**
|
|
37
|
-
* @public
|
|
38
|
-
* @description
|
|
39
|
-
* Label (not visible) for the dismiss button
|
|
40
|
-
*/
|
|
41
|
-
dismissButtonLabel?: string;
|
|
42
36
|
/**
|
|
43
37
|
* @internal
|
|
44
38
|
*/
|
|
@@ -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
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ni/nimble-components",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "20.0.0",
|
|
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",
|