@ethlete/contentful 3.6.3 → 3.6.4
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/CHANGELOG.md +10 -0
- package/esm2022/lib/components/audio/contentful-audio.component.mjs +3 -3
- package/esm2022/lib/components/file/contentful-file.component.mjs +3 -3
- package/esm2022/lib/components/image/contentful-image.component.mjs +3 -3
- package/esm2022/lib/components/rich-text-renderer/rich-text-renderer.component.mjs +50 -32
- package/esm2022/lib/components/video/contentful-video.component.mjs +3 -3
- package/fesm2022/ethlete-contentful.mjs +61 -43
- package/fesm2022/ethlete-contentful.mjs.map +1 -1
- package/lib/components/rich-text-renderer/rich-text-renderer.component.d.ts +9 -5
- package/package.json +1 -1
|
@@ -50,8 +50,8 @@ class ContentfulAudioComponent {
|
|
|
50
50
|
};
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.
|
|
54
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.
|
|
53
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ContentfulAudioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
54
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.2", type: ContentfulAudioComponent, isStandalone: true, selector: "et-contentful-audio", inputs: { asset: { classPropertyName: "asset", publicName: "asset", isSignal: true, isRequired: true, transformFunction: null }, audioClass: { classPropertyName: "audioClass", publicName: "audioClass", isSignal: true, isRequired: false, transformFunction: null }, figureClass: { classPropertyName: "figureClass", publicName: "figureClass", isSignal: true, isRequired: false, transformFunction: null }, figcaptionClass: { classPropertyName: "figcaptionClass", publicName: "figcaptionClass", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
55
55
|
@if (data(); as data) {
|
|
56
56
|
<figure [ngClass]="figureClass()">
|
|
57
57
|
<figcaption [ngClass]="figcaptionClass()">{{ data.title }}</figcaption>
|
|
@@ -60,7 +60,7 @@ class ContentfulAudioComponent {
|
|
|
60
60
|
}
|
|
61
61
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
62
62
|
}
|
|
63
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ContentfulAudioComponent, decorators: [{
|
|
64
64
|
type: Component,
|
|
65
65
|
args: [{
|
|
66
66
|
selector: 'et-contentful-audio',
|
|
@@ -104,8 +104,8 @@ class ContentfulFileComponent {
|
|
|
104
104
|
};
|
|
105
105
|
});
|
|
106
106
|
}
|
|
107
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.
|
|
108
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.
|
|
107
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ContentfulFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
108
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.2", type: ContentfulFileComponent, isStandalone: true, selector: "et-contentful-file", inputs: { asset: { classPropertyName: "asset", publicName: "asset", isSignal: true, isRequired: true, transformFunction: null }, fileClass: { classPropertyName: "fileClass", publicName: "fileClass", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
109
109
|
@if (data(); as data) {
|
|
110
110
|
<a [href]="data.url" [ngClass]="fileClass()" class="underline" target="_blank">
|
|
111
111
|
{{ data.title }} ({{ data.size }} Bytes)
|
|
@@ -113,7 +113,7 @@ class ContentfulFileComponent {
|
|
|
113
113
|
}
|
|
114
114
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
115
115
|
}
|
|
116
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.
|
|
116
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ContentfulFileComponent, decorators: [{
|
|
117
117
|
type: Component,
|
|
118
118
|
args: [{
|
|
119
119
|
selector: 'et-contentful-file',
|
|
@@ -273,8 +273,8 @@ class ContentfulImageComponent {
|
|
|
273
273
|
return asset ? generateDefaultContentfulImageSource(asset) : null;
|
|
274
274
|
});
|
|
275
275
|
}
|
|
276
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.
|
|
277
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.
|
|
276
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ContentfulImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
277
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.2", type: ContentfulImageComponent, isStandalone: true, selector: "et-contentful-image", inputs: { asset: { classPropertyName: "asset", publicName: "asset", isSignal: true, isRequired: true, transformFunction: null }, backgroundColor: { classPropertyName: "backgroundColor", publicName: "backgroundColor", isSignal: true, isRequired: false, transformFunction: null }, srcsetSizes: { classPropertyName: "srcsetSizes", publicName: "srcsetSizes", isSignal: true, isRequired: false, transformFunction: null }, quality: { classPropertyName: "quality", publicName: "quality", isSignal: true, isRequired: false, transformFunction: null }, focusArea: { classPropertyName: "focusArea", publicName: "focusArea", isSignal: true, isRequired: false, transformFunction: null }, resizeBehavior: { classPropertyName: "resizeBehavior", publicName: "resizeBehavior", isSignal: true, isRequired: false, transformFunction: null }, hasPriority: { classPropertyName: "hasPriority", publicName: "hasPriority", isSignal: true, isRequired: false, transformFunction: null }, imgClass: { classPropertyName: "imgClass", publicName: "imgClass", isSignal: true, isRequired: false, transformFunction: null }, figureClass: { classPropertyName: "figureClass", publicName: "figureClass", isSignal: true, isRequired: false, transformFunction: null }, figcaptionClass: { classPropertyName: "figcaptionClass", publicName: "figcaptionClass", isSignal: true, isRequired: false, transformFunction: null }, pictureClass: { classPropertyName: "pictureClass", publicName: "pictureClass", isSignal: true, isRequired: false, transformFunction: null }, sizes: { classPropertyName: "sizes", publicName: "sizes", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "et-contentful-image" }, ngImport: i0, template: `
|
|
278
278
|
<et-picture
|
|
279
279
|
[imgClass]="imgClass()"
|
|
280
280
|
[hasPriority]="hasPriority()"
|
|
@@ -291,7 +291,7 @@ class ContentfulImageComponent {
|
|
|
291
291
|
/>
|
|
292
292
|
`, isInline: true, dependencies: [{ kind: "component", type: PictureComponent, selector: "et-picture", inputs: ["sources", "hasPriority", "imgClass", "figureClass", "figcaptionClass", "pictureClass", "defaultSrc", "alt", "figcaption", "width", "height", "sizes"], outputs: ["imgLoaded", "imgError"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
293
293
|
}
|
|
294
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.
|
|
294
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ContentfulImageComponent, decorators: [{
|
|
295
295
|
type: Component,
|
|
296
296
|
args: [{
|
|
297
297
|
selector: 'et-contentful-image',
|
|
@@ -342,8 +342,8 @@ class ContentfulVideoComponent {
|
|
|
342
342
|
};
|
|
343
343
|
});
|
|
344
344
|
}
|
|
345
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.
|
|
346
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.
|
|
345
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ContentfulVideoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
346
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.2", type: ContentfulVideoComponent, isStandalone: true, selector: "et-contentful-video", inputs: { asset: { classPropertyName: "asset", publicName: "asset", isSignal: true, isRequired: true, transformFunction: null }, videoClass: { classPropertyName: "videoClass", publicName: "videoClass", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
347
347
|
@if (data(); as data) {
|
|
348
348
|
<video [ngClass]="videoClass()" controls>
|
|
349
349
|
<source src="{{ data.url }}" type="{{ data.contentType }}" />
|
|
@@ -351,7 +351,7 @@ class ContentfulVideoComponent {
|
|
|
351
351
|
}
|
|
352
352
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
353
353
|
}
|
|
354
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.
|
|
354
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ContentfulVideoComponent, decorators: [{
|
|
355
355
|
type: Component,
|
|
356
356
|
args: [{
|
|
357
357
|
selector: 'et-contentful-video',
|
|
@@ -490,13 +490,15 @@ const HTML_CLOSE_RENDER_COMMAND_POSITION = {
|
|
|
490
490
|
ELEMENT_ID: 5,
|
|
491
491
|
};
|
|
492
492
|
const TEXT_RENDER_COMMAND_POSITION = {
|
|
493
|
-
|
|
493
|
+
ATTRIBUTES: 4,
|
|
494
|
+
TEXT: 5,
|
|
495
|
+
TEXT_ID: 6,
|
|
494
496
|
};
|
|
495
497
|
const COMPONENT_RENDER_COMMAND_POSITION = {
|
|
496
498
|
ATTRIBUTES: 4,
|
|
497
499
|
COMPONENT: 5,
|
|
498
500
|
INPUTS: 6,
|
|
499
|
-
|
|
501
|
+
COMPONENT_ID: 7,
|
|
500
502
|
};
|
|
501
503
|
const RENDER_INSTRUCTION_POSITION = {
|
|
502
504
|
TYPE: 0,
|
|
@@ -546,10 +548,10 @@ const getRenderCommandId = (command) => {
|
|
|
546
548
|
return command[HTML_CLOSE_RENDER_COMMAND_POSITION.ELEMENT_ID];
|
|
547
549
|
}
|
|
548
550
|
else if (isTextRenderCommand(command)) {
|
|
549
|
-
return command[TEXT_RENDER_COMMAND_POSITION.
|
|
551
|
+
return command[TEXT_RENDER_COMMAND_POSITION.TEXT_ID];
|
|
550
552
|
}
|
|
551
553
|
else {
|
|
552
|
-
return command[COMPONENT_RENDER_COMMAND_POSITION.
|
|
554
|
+
return command[COMPONENT_RENDER_COMMAND_POSITION.COMPONENT_ID];
|
|
553
555
|
}
|
|
554
556
|
};
|
|
555
557
|
const CLASS_ATTR = 'class';
|
|
@@ -763,15 +765,18 @@ class ContentfulRichTextRendererComponent {
|
|
|
763
765
|
/** List of all render commands */
|
|
764
766
|
const rootCommands = [];
|
|
765
767
|
/** Counter for generating unique html element IDs. */
|
|
766
|
-
let
|
|
768
|
+
let elementOpenId = 0;
|
|
769
|
+
/** Counter for generating unique html element IDs. */
|
|
770
|
+
let elementCloseId = 0;
|
|
767
771
|
/** Counter for generating unique component IDs. */
|
|
768
772
|
const componentIdMap = new Map();
|
|
769
773
|
/** The nesting level of the current node. */
|
|
770
774
|
let nestingLevel = 0;
|
|
771
775
|
/** The position (index) of the current node inside the parent node. */
|
|
772
776
|
let domPosition = 0;
|
|
777
|
+
let textId = 0;
|
|
773
778
|
let commandIndex = 0;
|
|
774
|
-
const traverse = (node
|
|
779
|
+
const traverse = (node) => {
|
|
775
780
|
switch (node.nodeType) {
|
|
776
781
|
case 'text': {
|
|
777
782
|
// Render media
|
|
@@ -779,19 +784,7 @@ class ContentfulRichTextRendererComponent {
|
|
|
779
784
|
const text = node.value;
|
|
780
785
|
if (!text)
|
|
781
786
|
break;
|
|
782
|
-
const
|
|
783
|
-
rootCommands.push(command);
|
|
784
|
-
domPosition++;
|
|
785
|
-
if (!parent) {
|
|
786
|
-
throw richTextRendererError('text_parent_not_found', false, { node });
|
|
787
|
-
}
|
|
788
|
-
if (!isHtmlOpenRenderCommand(parent) && !isComponentRenderCommand(parent)) {
|
|
789
|
-
throw richTextRendererError('text_parent_wrong_type', false, { node, parent });
|
|
790
|
-
}
|
|
791
|
-
const attributesPosition = parent[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_OPEN
|
|
792
|
-
? HTML_OPEN_RENDER_COMMAND_POSITION.ATTRIBUTES
|
|
793
|
-
: COMPONENT_RENDER_COMMAND_POSITION.ATTRIBUTES;
|
|
794
|
-
const attributes = parent[attributesPosition];
|
|
787
|
+
const attributes = {};
|
|
795
788
|
if (node.marks.length) {
|
|
796
789
|
const markClasses = marksToClass(node.marks);
|
|
797
790
|
if (CLASS_ATTR in attributes) {
|
|
@@ -801,6 +794,10 @@ class ContentfulRichTextRendererComponent {
|
|
|
801
794
|
attributes[CLASS_ATTR] = markClasses;
|
|
802
795
|
}
|
|
803
796
|
}
|
|
797
|
+
const id = 't' + textId++;
|
|
798
|
+
const command = [type, nestingLevel, domPosition, commandIndex++, attributes, text, id];
|
|
799
|
+
rootCommands.push(command);
|
|
800
|
+
domPosition++;
|
|
804
801
|
break;
|
|
805
802
|
}
|
|
806
803
|
case BLOCKS.EMBEDDED_ASSET: {
|
|
@@ -903,7 +900,7 @@ class ContentfulRichTextRendererComponent {
|
|
|
903
900
|
const type = RENDER_COMMAND_TYPE.HTML_OPEN;
|
|
904
901
|
const tag = translateContentfulNodeTypeToHtmlTag(node.nodeType);
|
|
905
902
|
const attributes = {};
|
|
906
|
-
const id = 'e' +
|
|
903
|
+
const id = 'e-o' + elementOpenId++;
|
|
907
904
|
const command = [type, nestingLevel, domPosition, commandIndex++, attributes, tag, id];
|
|
908
905
|
rootCommands.push(command);
|
|
909
906
|
const domPositionAtThisLevel = domPosition;
|
|
@@ -911,17 +908,21 @@ class ContentfulRichTextRendererComponent {
|
|
|
911
908
|
for (const child of node.content) {
|
|
912
909
|
domPosition = 0;
|
|
913
910
|
nestingLevel++;
|
|
914
|
-
traverse(child
|
|
911
|
+
traverse(child);
|
|
915
912
|
nestingLevel--;
|
|
916
913
|
domPosition = domPositionAtThisLevel;
|
|
917
914
|
}
|
|
918
915
|
const lastCommand = rootCommands[rootCommands.length - 1];
|
|
919
|
-
if (lastCommand?.[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_OPEN
|
|
916
|
+
if (lastCommand?.[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_OPEN &&
|
|
917
|
+
lastCommand[HTML_OPEN_RENDER_COMMAND_POSITION.TAG_NAME] !== 'td' &&
|
|
918
|
+
lastCommand[HTML_OPEN_RENDER_COMMAND_POSITION.TAG_NAME] !== 'hr') {
|
|
920
919
|
// If the last command is an open command, we can remove it since it's empty
|
|
921
920
|
rootCommands.pop();
|
|
921
|
+
elementOpenId--;
|
|
922
|
+
commandIndex--;
|
|
922
923
|
}
|
|
923
924
|
else {
|
|
924
|
-
const closeId = 'e' +
|
|
925
|
+
const closeId = 'e-c' + elementCloseId++;
|
|
925
926
|
const closeCommand = [
|
|
926
927
|
RENDER_COMMAND_TYPE.HTML_CLOSE,
|
|
927
928
|
nestingLevel,
|
|
@@ -947,7 +948,7 @@ class ContentfulRichTextRendererComponent {
|
|
|
947
948
|
}
|
|
948
949
|
};
|
|
949
950
|
for (const node of richTextData.content) {
|
|
950
|
-
traverse(node
|
|
951
|
+
traverse(node);
|
|
951
952
|
}
|
|
952
953
|
return rootCommands;
|
|
953
954
|
}
|
|
@@ -988,14 +989,31 @@ class ContentfulRichTextRendererComponent {
|
|
|
988
989
|
}
|
|
989
990
|
else if (isTextRenderCommand(command)) {
|
|
990
991
|
const text = command[TEXT_RENDER_COMMAND_POSITION.TEXT];
|
|
991
|
-
const textNode = this._renderer.createText(text);
|
|
992
992
|
const span = this._renderer.createElement('span');
|
|
993
|
-
|
|
993
|
+
const attributes = command[TEXT_RENDER_COMMAND_POSITION.ATTRIBUTES];
|
|
994
|
+
const textSplitInLineBreaks = text.split('\n').filter((t) => t.trim().length > 0);
|
|
995
|
+
const textNodes = [];
|
|
996
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
997
|
+
this._renderer.setAttribute(span, key, value);
|
|
998
|
+
}
|
|
999
|
+
if (text.startsWith('\n')) {
|
|
1000
|
+
const brNode = this._renderer.createElement('br');
|
|
1001
|
+
this._renderer.appendChild(parentElement, brNode);
|
|
1002
|
+
}
|
|
1003
|
+
for (const [textPartIndex, textPart] of textSplitInLineBreaks.entries()) {
|
|
1004
|
+
if (textPartIndex > 0) {
|
|
1005
|
+
const brNode = this._renderer.createElement('br');
|
|
1006
|
+
this._renderer.appendChild(span, brNode);
|
|
1007
|
+
}
|
|
1008
|
+
const textNode = this._renderer.createText(textPart);
|
|
1009
|
+
this._renderer.appendChild(span, textNode);
|
|
1010
|
+
textNodes.push(textNode);
|
|
1011
|
+
}
|
|
994
1012
|
this._renderInsertOrAppend(span, parentElement, nextElement);
|
|
995
1013
|
this._executedCommandsCache.set(id, {
|
|
996
1014
|
command,
|
|
997
1015
|
element: span,
|
|
998
|
-
textNode,
|
|
1016
|
+
textNode: textNodes,
|
|
999
1017
|
});
|
|
1000
1018
|
}
|
|
1001
1019
|
else if (isHtmlOpenRenderCommand(command)) {
|
|
@@ -1112,7 +1130,7 @@ class ContentfulRichTextRendererComponent {
|
|
|
1112
1130
|
if (!cmd) {
|
|
1113
1131
|
throw new Error('Command not found!');
|
|
1114
1132
|
}
|
|
1115
|
-
if (cmd[RENDER_COMMAND_POSITION.NESTING_LEVEL] === nestingLevel - 1) {
|
|
1133
|
+
if (cmd[RENDER_COMMAND_POSITION.NESTING_LEVEL] === nestingLevel - 1 && isHtmlOpenRenderCommand(cmd)) {
|
|
1116
1134
|
parentCommand = cmd;
|
|
1117
1135
|
break;
|
|
1118
1136
|
}
|
|
@@ -1155,10 +1173,10 @@ class ContentfulRichTextRendererComponent {
|
|
|
1155
1173
|
this._renderer.appendChild(parentElement, nodeToRender);
|
|
1156
1174
|
}
|
|
1157
1175
|
}
|
|
1158
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.
|
|
1159
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.
|
|
1176
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ContentfulRichTextRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1177
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.2", type: ContentfulRichTextRendererComponent, isStandalone: true, selector: "et-contentful-rich-text-renderer", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null }, richTextPath: { classPropertyName: "richTextPath", publicName: "richTextPath", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "et-contentful-rich-text-renderer" }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1160
1178
|
}
|
|
1161
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.
|
|
1179
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: ContentfulRichTextRendererComponent, decorators: [{
|
|
1162
1180
|
type: Component,
|
|
1163
1181
|
args: [{
|
|
1164
1182
|
selector: 'et-contentful-rich-text-renderer',
|