@dotcms/angular 1.6.0 → 1.7.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/README.md +84 -65
- package/fesm2022/dotcms-angular.mjs +501 -257
- package/fesm2022/dotcms-angular.mjs.map +1 -1
- package/lib/components/dotcms-block-editor-renderer/blocks/table.component.d.ts +6 -1
- package/lib/components/dotcms-block-editor-renderer/blocks/table.component.d.ts.map +1 -1
- package/lib/components/dotcms-block-editor-renderer/dotcms-block-editor-renderer.component.d.ts +9 -0
- package/lib/components/dotcms-block-editor-renderer/dotcms-block-editor-renderer.component.d.ts.map +1 -1
- package/lib/components/dotcms-block-editor-renderer-semantic/blocks/semantic-blocks.component.d.ts +40 -0
- package/lib/components/dotcms-block-editor-renderer-semantic/blocks/semantic-blocks.component.d.ts.map +1 -0
- package/lib/components/dotcms-block-editor-renderer-semantic/dotcms-block-editor-renderer-native.component.d.ts +73 -0
- package/lib/components/dotcms-block-editor-renderer-semantic/dotcms-block-editor-renderer-native.component.d.ts.map +1 -0
- package/lib/components/dotcms-editable-text/dotcms-editable-text.component.d.ts.map +1 -1
- package/lib/components/dotcms-layout-body/components/container/container.component.d.ts +1 -5
- package/lib/components/dotcms-layout-body/components/container/container.component.d.ts.map +1 -1
- package/lib/components/dotcms-layout-body/components/contentlet/contentlet.component.d.ts +6 -12
- package/lib/components/dotcms-layout-body/components/contentlet/contentlet.component.d.ts.map +1 -1
- package/lib/store/dotcms.store.d.ts +16 -1
- package/lib/store/dotcms.store.d.ts.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +1 -0
- package/public_api.d.ts.map +1 -1
|
@@ -8,8 +8,9 @@ import { createDotCMSClient } from '@dotcms/client';
|
|
|
8
8
|
import { EditorComponent, TINYMCE_SCRIPT_SRC } from '@tinymce/tinymce-angular';
|
|
9
9
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
10
10
|
import { __DOTCMS_UVE_EVENT__, BlockEditorDefaultBlocks } from '@dotcms/types/internal';
|
|
11
|
-
import { __DEFAULT_TINYMCE_CONFIG__, __BASE_TINYMCE_CONFIG_WITH_NO_DEFAULT__, __TINYMCE_PATH_ON_DOTCMS__, isValidBlocks, PRODUCTION_MODE, DEVELOPMENT_MODE, EMPTY_CONTAINER_STYLE_ANGULAR, getDotContentletAttributes, CUSTOM_NO_COMPONENT, getDotContainerAttributes, getContainersData, getContentletsInContainer, getColumnPositionClasses, combineClasses, DOT_SECTION_ID_PREFIX, registerStyleEditorSchemas } from '@dotcms/uve/internal';
|
|
12
|
-
import { Subject, of } from 'rxjs';
|
|
11
|
+
import { __DEFAULT_TINYMCE_CONFIG__, __BASE_TINYMCE_CONFIG_WITH_NO_DEFAULT__, __TINYMCE_PATH_ON_DOTCMS__, isValidBlocks, PRODUCTION_MODE, ANALYTICS_READY_EVENT, isDotAnalyticsActive, DEVELOPMENT_MODE, EMPTY_CONTAINER_STYLE_ANGULAR, getDotContentletAttributes, getAnalyticsContentletAttributes, CUSTOM_NO_COMPONENT, getDotContainerAttributes, getContainersData, getContentletsInContainer, getColumnPositionClasses, combineClasses, DOT_SECTION_ID_PREFIX, registerStyleEditorSchemas } from '@dotcms/uve/internal';
|
|
12
|
+
import { fromEvent, map, Subject, of } from 'rxjs';
|
|
13
|
+
import { toSignal } from '@angular/core/rxjs-interop';
|
|
13
14
|
import { finalize } from 'rxjs/operators';
|
|
14
15
|
|
|
15
16
|
/**
|
|
@@ -44,10 +45,10 @@ class DotCMSShowWhenDirective {
|
|
|
44
45
|
this.#hasView = false;
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
48
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.
|
|
48
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSShowWhenDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
49
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.4", type: DotCMSShowWhenDirective, isStandalone: true, selector: "[dotCMSShowWhen]", inputs: { dotCMSShowWhen: "dotCMSShowWhen" }, ngImport: i0 }); }
|
|
49
50
|
}
|
|
50
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
51
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSShowWhenDirective, decorators: [{
|
|
51
52
|
type: Directive,
|
|
52
53
|
args: [{
|
|
53
54
|
selector: '[dotCMSShowWhen]'
|
|
@@ -289,9 +290,13 @@ class DotCMSEditableTextComponent {
|
|
|
289
290
|
if (name !== __DOTCMS_UVE_EVENT__.UVE_COPY_CONTENTLET_INLINE_EDITING_SUCCESS) {
|
|
290
291
|
return;
|
|
291
292
|
}
|
|
292
|
-
const { oldInode, inode } = payload;
|
|
293
|
+
const { oldInode, inode, fieldName } = payload;
|
|
293
294
|
const currentInode = this.contentlet.inode;
|
|
294
|
-
|
|
295
|
+
const matchesInode = currentInode === oldInode || currentInode === inode;
|
|
296
|
+
// Match the field too: a contentlet's fields all share one inode, so an
|
|
297
|
+
// inode-only check focuses every editable field on the contentlet (the
|
|
298
|
+
// last one wins) instead of the one the user clicked.
|
|
299
|
+
if (matchesInode && fieldName === this.fieldName) {
|
|
295
300
|
this.editorComponent.editor.focus();
|
|
296
301
|
return;
|
|
297
302
|
}
|
|
@@ -404,8 +409,8 @@ class DotCMSEditableTextComponent {
|
|
|
404
409
|
didContentChange(editedContent) {
|
|
405
410
|
return this.content !== editedContent;
|
|
406
411
|
}
|
|
407
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
408
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
412
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSEditableTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
413
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DotCMSEditableTextComponent, isStandalone: true, selector: "dotcms-editable-text", inputs: { mode: "mode", format: "format", contentlet: "contentlet", fieldName: "fieldName" }, host: { listeners: { "window:message": "onMessage($event)" } }, providers: [
|
|
409
414
|
{
|
|
410
415
|
provide: TINYMCE_SCRIPT_SRC,
|
|
411
416
|
useFactory: () => {
|
|
@@ -415,7 +420,7 @@ class DotCMSEditableTextComponent {
|
|
|
415
420
|
}
|
|
416
421
|
], viewQueries: [{ propertyName: "editorComponent", first: true, predicate: EditorComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (isEditMode) {\n <editor\n #tinyEditor\n [init]=\"init\"\n [initialValue]=\"content\"\n (onMouseDown)=\"onMouseDown($event)\"\n (onFocusOut)=\"onFocusOut()\" />\n}\n", styles: [":host ::ng-deep .mce-content-body:not(.mce-edit-focus){outline:2px solid #006ce7;border-radius:4px}\n"], dependencies: [{ kind: "component", type: EditorComponent, selector: "editor", inputs: ["cloudChannel", "apiKey", "init", "id", "initialValue", "outputFormat", "inline", "tagName", "plugins", "toolbar", "modelEvents", "allowedEvents", "ignoreEvents", "disabled"] }] }); }
|
|
417
422
|
}
|
|
418
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
423
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSEditableTextComponent, decorators: [{
|
|
419
424
|
type: Component,
|
|
420
425
|
args: [{ selector: 'dotcms-editable-text', imports: [EditorComponent], providers: [
|
|
421
426
|
{
|
|
@@ -443,8 +448,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
443
448
|
}] } });
|
|
444
449
|
|
|
445
450
|
class DotCodeBlock {
|
|
446
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
447
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
451
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCodeBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
452
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: DotCodeBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-code-block", ngImport: i0, template: `
|
|
448
453
|
<pre>
|
|
449
454
|
<code>
|
|
450
455
|
<ng-content />
|
|
@@ -452,7 +457,7 @@ class DotCodeBlock {
|
|
|
452
457
|
</pre>
|
|
453
458
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
454
459
|
}
|
|
455
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
460
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCodeBlock, decorators: [{
|
|
456
461
|
type: Component,
|
|
457
462
|
args: [{
|
|
458
463
|
selector: 'dotcms-block-editor-renderer-code-block',
|
|
@@ -467,14 +472,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
467
472
|
}]
|
|
468
473
|
}] });
|
|
469
474
|
class DotBlockQuote {
|
|
470
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
471
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
475
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotBlockQuote, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
476
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: DotBlockQuote, isStandalone: true, selector: "dotcms-block-editor-renderer-block-quote", ngImport: i0, template: `
|
|
472
477
|
<blockquote>
|
|
473
478
|
<ng-content />
|
|
474
479
|
</blockquote>
|
|
475
480
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
476
481
|
}
|
|
477
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
482
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotBlockQuote, decorators: [{
|
|
478
483
|
type: Component,
|
|
479
484
|
args: [{
|
|
480
485
|
selector: 'dotcms-block-editor-renderer-block-quote',
|
|
@@ -499,8 +504,8 @@ class NoComponentProvided {
|
|
|
499
504
|
border: '1px solid #ed8936'
|
|
500
505
|
};
|
|
501
506
|
}
|
|
502
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
503
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
507
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NoComponentProvided, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
508
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: NoComponentProvided, isStandalone: true, selector: "dotcms-no-component-provided", inputs: { contentType: "contentType" }, ngImport: i0, template: `
|
|
504
509
|
<div data-testid="no-component-provided" [style]="style">
|
|
505
510
|
<strong style="color: #c05621">Dev Warning</strong>
|
|
506
511
|
: No component or custom renderer provided for content type
|
|
@@ -519,7 +524,7 @@ class NoComponentProvided {
|
|
|
519
524
|
</div>
|
|
520
525
|
`, isInline: true }); }
|
|
521
526
|
}
|
|
522
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
527
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NoComponentProvided, decorators: [{
|
|
523
528
|
type: Component,
|
|
524
529
|
args: [{
|
|
525
530
|
selector: 'dotcms-no-component-provided',
|
|
@@ -550,7 +555,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
550
555
|
*/
|
|
551
556
|
class DotContentletBlock {
|
|
552
557
|
constructor() {
|
|
553
|
-
this.$data = computed(() => this.node?.attrs?.['data'], ...(ngDevMode ? [{ debugName: "$data" }] : []));
|
|
558
|
+
this.$data = computed(() => this.node?.attrs?.['data'], ...(ngDevMode ? [{ debugName: "$data" }] : /* istanbul ignore next */ []));
|
|
554
559
|
this.DOT_CONTENT_NO_DATA_MESSAGE = '[DotCMSBlockEditorRenderer]: No data provided for Contentlet Block. Try to add a contentlet to the block editor. If the error persists, please contact the DotCMS support team.';
|
|
555
560
|
this.DOT_CONTENT_NO_MATCHING_COMPONENT_MESSAGE = (contentType) => `[DotCMSBlockEditorRenderer]: No matching component found for content type: ${contentType}. Provide a custom renderer for this content type to fix this error.`;
|
|
556
561
|
}
|
|
@@ -568,8 +573,8 @@ class DotContentletBlock {
|
|
|
568
573
|
console.warn(this.DOT_CONTENT_NO_MATCHING_COMPONENT_MESSAGE(contentType));
|
|
569
574
|
}
|
|
570
575
|
}
|
|
571
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
572
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
576
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotContentletBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
577
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DotContentletBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-contentlet", inputs: { customRenderers: "customRenderers", node: "node" }, ngImport: i0, template: `
|
|
573
578
|
@if (contentComponent) {
|
|
574
579
|
<ng-container *ngComponentOutlet="contentComponent | async; inputs: { node: node }" />
|
|
575
580
|
} @else if (isDevMode) {
|
|
@@ -577,7 +582,7 @@ class DotContentletBlock {
|
|
|
577
582
|
}
|
|
578
583
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: NoComponentProvided, selector: "dotcms-no-component-provided", inputs: ["contentType"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
579
584
|
}
|
|
580
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
585
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotContentletBlock, decorators: [{
|
|
581
586
|
type: Component,
|
|
582
587
|
args: [{
|
|
583
588
|
selector: 'dotcms-block-editor-renderer-contentlet',
|
|
@@ -610,8 +615,8 @@ class DotGridBlock {
|
|
|
610
615
|
? rawCols
|
|
611
616
|
: [6, 6];
|
|
612
617
|
}
|
|
613
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
614
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
618
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotGridBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
619
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DotGridBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-grid-block", inputs: { node: "node", customRenderers: "customRenderers" }, ngImport: i0, template: `
|
|
615
620
|
<div
|
|
616
621
|
data-type="gridBlock"
|
|
617
622
|
class="grid-block"
|
|
@@ -633,7 +638,7 @@ class DotGridBlock {
|
|
|
633
638
|
</div>
|
|
634
639
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }] }); }
|
|
635
640
|
}
|
|
636
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
641
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotGridBlock, decorators: [{
|
|
637
642
|
type: Component,
|
|
638
643
|
args: [{
|
|
639
644
|
selector: 'dotcms-block-editor-renderer-grid-block',
|
|
@@ -668,7 +673,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
668
673
|
|
|
669
674
|
class DotImageBlock {
|
|
670
675
|
constructor() {
|
|
671
|
-
this.$srcURL = computed(() => this.attrs?.['src'], ...(ngDevMode ? [{ debugName: "$srcURL" }] : []));
|
|
676
|
+
this.$srcURL = computed(() => this.attrs?.['src'], ...(ngDevMode ? [{ debugName: "$srcURL" }] : /* istanbul ignore next */ []));
|
|
672
677
|
this.$wrapperStyle = computed(() => {
|
|
673
678
|
const textWrap = this.attrs?.['textWrap'];
|
|
674
679
|
const textAlign = this.attrs?.['textAlign'];
|
|
@@ -682,16 +687,16 @@ class DotImageBlock {
|
|
|
682
687
|
return { 'text-align': textAlign };
|
|
683
688
|
}
|
|
684
689
|
return {};
|
|
685
|
-
}, ...(ngDevMode ? [{ debugName: "$wrapperStyle" }] : []));
|
|
690
|
+
}, ...(ngDevMode ? [{ debugName: "$wrapperStyle" }] : /* istanbul ignore next */ []));
|
|
686
691
|
}
|
|
687
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
688
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
692
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotImageBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
693
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: DotImageBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-image", inputs: { attrs: "attrs" }, ngImport: i0, template: `
|
|
689
694
|
<figure [style]="$wrapperStyle()">
|
|
690
695
|
<img [alt]="attrs?.['alt']" [src]="$srcURL()" />
|
|
691
696
|
</figure>
|
|
692
697
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
693
698
|
}
|
|
694
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
699
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotImageBlock, decorators: [{
|
|
695
700
|
type: Component,
|
|
696
701
|
args: [{
|
|
697
702
|
selector: 'dotcms-block-editor-renderer-image',
|
|
@@ -708,14 +713,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
708
713
|
}] } });
|
|
709
714
|
|
|
710
715
|
class DotBulletList {
|
|
711
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
712
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
716
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotBulletList, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
717
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: DotBulletList, isStandalone: true, selector: "dotcms-block-editor-renderer-bullet-list", ngImport: i0, template: `
|
|
713
718
|
<ul>
|
|
714
719
|
<ng-content />
|
|
715
720
|
</ul>
|
|
716
721
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
717
722
|
}
|
|
718
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
723
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotBulletList, decorators: [{
|
|
719
724
|
type: Component,
|
|
720
725
|
args: [{
|
|
721
726
|
selector: 'dotcms-block-editor-renderer-bullet-list',
|
|
@@ -728,14 +733,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
728
733
|
}]
|
|
729
734
|
}] });
|
|
730
735
|
class DotOrdererList {
|
|
731
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
732
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
736
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotOrdererList, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
737
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: DotOrdererList, isStandalone: true, selector: "dotcms-block-editor-renderer-ordered-list", ngImport: i0, template: `
|
|
733
738
|
<ol>
|
|
734
739
|
<ng-content />
|
|
735
740
|
</ol>
|
|
736
741
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
737
742
|
}
|
|
738
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
743
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotOrdererList, decorators: [{
|
|
739
744
|
type: Component,
|
|
740
745
|
args: [{
|
|
741
746
|
selector: 'dotcms-block-editor-renderer-ordered-list',
|
|
@@ -748,14 +753,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
748
753
|
}]
|
|
749
754
|
}] });
|
|
750
755
|
class DotListItem {
|
|
751
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
752
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
756
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotListItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
757
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: DotListItem, isStandalone: true, selector: "dotcms-block-editor-renderer-list-item", ngImport: i0, template: `
|
|
753
758
|
<li>
|
|
754
759
|
<ng-content />
|
|
755
760
|
</li>
|
|
756
761
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
757
762
|
}
|
|
758
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
763
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotListItem, decorators: [{
|
|
759
764
|
type: Component,
|
|
760
765
|
args: [{
|
|
761
766
|
selector: 'dotcms-block-editor-renderer-list-item',
|
|
@@ -772,39 +777,45 @@ class DotTableBlock {
|
|
|
772
777
|
constructor() {
|
|
773
778
|
this.blockEditorItem = DotCMSBlockEditorItemComponent;
|
|
774
779
|
}
|
|
775
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
776
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
777
|
-
<table
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
[attr.colspan]="cellNode.attrs?.['colspan'] || 1"
|
|
784
|
-
[attr.rowspan]="cellNode.attrs?.['rowspan'] || 1">
|
|
785
|
-
<ng-container
|
|
786
|
-
*ngComponentOutlet="
|
|
787
|
-
blockEditorItem;
|
|
788
|
-
inputs: { content: cellNode.content }
|
|
789
|
-
" />
|
|
790
|
-
</th>
|
|
791
|
-
}
|
|
792
|
-
</tr>
|
|
793
|
-
}
|
|
794
|
-
</thead>
|
|
780
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotTableBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
781
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DotTableBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-table", inputs: { content: "content", attrs: "attrs" }, ngImport: i0, template: `
|
|
782
|
+
<table
|
|
783
|
+
[attr.aria-label]="attrs?.['ariaLabel'] || null"
|
|
784
|
+
[attr.aria-labelledby]="attrs?.['ariaLabelledby'] || null">
|
|
785
|
+
@if (attrs?.['caption']) {
|
|
786
|
+
<caption>{{ attrs?.['caption'] }}</caption>
|
|
787
|
+
}
|
|
795
788
|
<tbody>
|
|
796
|
-
@for (rowNode of content
|
|
789
|
+
@for (rowNode of content; track $index) {
|
|
797
790
|
<tr>
|
|
798
|
-
@for (cellNode of rowNode.content; track
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
"
|
|
807
|
-
|
|
791
|
+
@for (cellNode of rowNode.content; track $index) {
|
|
792
|
+
<!--
|
|
793
|
+
Cell type — not row index — decides th vs td. Matches the
|
|
794
|
+
VTL renderer (storyblock/render.vtl) so headless markup
|
|
795
|
+
stays consistent with server-rendered pages.
|
|
796
|
+
-->
|
|
797
|
+
@if (cellNode.type === 'tableHeader') {
|
|
798
|
+
<th
|
|
799
|
+
[attr.colspan]="cellNode.attrs?.['colspan'] || 1"
|
|
800
|
+
[attr.rowspan]="cellNode.attrs?.['rowspan'] || 1"
|
|
801
|
+
[attr.scope]="cellNode.attrs?.['scope'] || null">
|
|
802
|
+
<ng-container
|
|
803
|
+
*ngComponentOutlet="
|
|
804
|
+
blockEditorItem;
|
|
805
|
+
inputs: { content: cellNode.content }
|
|
806
|
+
" />
|
|
807
|
+
</th>
|
|
808
|
+
} @else {
|
|
809
|
+
<td
|
|
810
|
+
[attr.colspan]="cellNode.attrs?.['colspan'] || 1"
|
|
811
|
+
[attr.rowspan]="cellNode.attrs?.['rowspan'] || 1">
|
|
812
|
+
<ng-container
|
|
813
|
+
*ngComponentOutlet="
|
|
814
|
+
blockEditorItem;
|
|
815
|
+
inputs: { content: cellNode.content }
|
|
816
|
+
" />
|
|
817
|
+
</td>
|
|
818
|
+
}
|
|
808
819
|
}
|
|
809
820
|
</tr>
|
|
810
821
|
}
|
|
@@ -812,43 +823,49 @@ class DotTableBlock {
|
|
|
812
823
|
</table>
|
|
813
824
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }] }); }
|
|
814
825
|
}
|
|
815
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
826
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotTableBlock, decorators: [{
|
|
816
827
|
type: Component,
|
|
817
828
|
args: [{
|
|
818
829
|
selector: 'dotcms-block-editor-renderer-table',
|
|
819
830
|
imports: [NgComponentOutlet],
|
|
820
831
|
template: `
|
|
821
|
-
<table
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
[attr.colspan]="cellNode.attrs?.['colspan'] || 1"
|
|
828
|
-
[attr.rowspan]="cellNode.attrs?.['rowspan'] || 1">
|
|
829
|
-
<ng-container
|
|
830
|
-
*ngComponentOutlet="
|
|
831
|
-
blockEditorItem;
|
|
832
|
-
inputs: { content: cellNode.content }
|
|
833
|
-
" />
|
|
834
|
-
</th>
|
|
835
|
-
}
|
|
836
|
-
</tr>
|
|
837
|
-
}
|
|
838
|
-
</thead>
|
|
832
|
+
<table
|
|
833
|
+
[attr.aria-label]="attrs?.['ariaLabel'] || null"
|
|
834
|
+
[attr.aria-labelledby]="attrs?.['ariaLabelledby'] || null">
|
|
835
|
+
@if (attrs?.['caption']) {
|
|
836
|
+
<caption>{{ attrs?.['caption'] }}</caption>
|
|
837
|
+
}
|
|
839
838
|
<tbody>
|
|
840
|
-
@for (rowNode of content
|
|
839
|
+
@for (rowNode of content; track $index) {
|
|
841
840
|
<tr>
|
|
842
|
-
@for (cellNode of rowNode.content; track
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
"
|
|
851
|
-
|
|
841
|
+
@for (cellNode of rowNode.content; track $index) {
|
|
842
|
+
<!--
|
|
843
|
+
Cell type — not row index — decides th vs td. Matches the
|
|
844
|
+
VTL renderer (storyblock/render.vtl) so headless markup
|
|
845
|
+
stays consistent with server-rendered pages.
|
|
846
|
+
-->
|
|
847
|
+
@if (cellNode.type === 'tableHeader') {
|
|
848
|
+
<th
|
|
849
|
+
[attr.colspan]="cellNode.attrs?.['colspan'] || 1"
|
|
850
|
+
[attr.rowspan]="cellNode.attrs?.['rowspan'] || 1"
|
|
851
|
+
[attr.scope]="cellNode.attrs?.['scope'] || null">
|
|
852
|
+
<ng-container
|
|
853
|
+
*ngComponentOutlet="
|
|
854
|
+
blockEditorItem;
|
|
855
|
+
inputs: { content: cellNode.content }
|
|
856
|
+
" />
|
|
857
|
+
</th>
|
|
858
|
+
} @else {
|
|
859
|
+
<td
|
|
860
|
+
[attr.colspan]="cellNode.attrs?.['colspan'] || 1"
|
|
861
|
+
[attr.rowspan]="cellNode.attrs?.['rowspan'] || 1">
|
|
862
|
+
<ng-container
|
|
863
|
+
*ngComponentOutlet="
|
|
864
|
+
blockEditorItem;
|
|
865
|
+
inputs: { content: cellNode.content }
|
|
866
|
+
" />
|
|
867
|
+
</td>
|
|
868
|
+
}
|
|
852
869
|
}
|
|
853
870
|
</tr>
|
|
854
871
|
}
|
|
@@ -858,17 +875,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
858
875
|
}]
|
|
859
876
|
}], propDecorators: { content: [{
|
|
860
877
|
type: Input
|
|
878
|
+
}], attrs: [{
|
|
879
|
+
type: Input
|
|
861
880
|
}] } });
|
|
862
881
|
|
|
863
882
|
class DotParagraphBlock {
|
|
864
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
865
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
883
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotParagraphBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
884
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: DotParagraphBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-paragraph", ngImport: i0, template: `
|
|
866
885
|
<p>
|
|
867
886
|
<ng-content />
|
|
868
887
|
</p>
|
|
869
888
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
870
889
|
}
|
|
871
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
890
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotParagraphBlock, decorators: [{
|
|
872
891
|
type: Component,
|
|
873
892
|
args: [{
|
|
874
893
|
selector: 'dotcms-block-editor-renderer-paragraph',
|
|
@@ -882,15 +901,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
882
901
|
}] });
|
|
883
902
|
class DotHeadingBlock {
|
|
884
903
|
constructor() {
|
|
885
|
-
this.level = input.required(...(ngDevMode ? [{ debugName: "level" }] : []));
|
|
904
|
+
this.level = input.required(...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
|
|
886
905
|
this.$normalizedLevel = computed(() => {
|
|
887
906
|
return this.level() != null && typeof this.level() === 'number'
|
|
888
907
|
? String(this.level())
|
|
889
908
|
: (this.level() ?? '1');
|
|
890
|
-
}, ...(ngDevMode ? [{ debugName: "$normalizedLevel" }] : []));
|
|
909
|
+
}, ...(ngDevMode ? [{ debugName: "$normalizedLevel" }] : /* istanbul ignore next */ []));
|
|
891
910
|
}
|
|
892
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
893
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
911
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotHeadingBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
912
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DotHeadingBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-heading", inputs: { level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
894
913
|
@switch ($normalizedLevel()) {
|
|
895
914
|
@case ('1') {
|
|
896
915
|
<h1>
|
|
@@ -934,7 +953,7 @@ class DotHeadingBlock {
|
|
|
934
953
|
</ng-template>
|
|
935
954
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
936
955
|
}
|
|
937
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
956
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotHeadingBlock, decorators: [{
|
|
938
957
|
type: Component,
|
|
939
958
|
args: [{
|
|
940
959
|
selector: 'dotcms-block-editor-renderer-heading',
|
|
@@ -989,7 +1008,7 @@ class DotTextBlock {
|
|
|
989
1008
|
constructor() {
|
|
990
1009
|
this.marks = [];
|
|
991
1010
|
this.text = '';
|
|
992
|
-
this.$remainingMarks = computed(() => this.marks?.slice(1), ...(ngDevMode ? [{ debugName: "$remainingMarks" }] : []));
|
|
1011
|
+
this.$remainingMarks = computed(() => this.marks?.slice(1), ...(ngDevMode ? [{ debugName: "$remainingMarks" }] : /* istanbul ignore next */ []));
|
|
993
1012
|
this.$currentAttrs = computed(() => {
|
|
994
1013
|
const attrs = { ...(this.marks?.[0]?.attrs || {}) };
|
|
995
1014
|
if (attrs['class']) {
|
|
@@ -997,10 +1016,10 @@ class DotTextBlock {
|
|
|
997
1016
|
delete attrs['class'];
|
|
998
1017
|
}
|
|
999
1018
|
return attrs;
|
|
1000
|
-
}, ...(ngDevMode ? [{ debugName: "$currentAttrs" }] : []));
|
|
1019
|
+
}, ...(ngDevMode ? [{ debugName: "$currentAttrs" }] : /* istanbul ignore next */ []));
|
|
1001
1020
|
}
|
|
1002
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1003
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
1021
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotTextBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1022
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DotTextBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-text", inputs: { marks: "marks", text: "text" }, ngImport: i0, template: `
|
|
1004
1023
|
@switch (marks?.[0]?.type) {
|
|
1005
1024
|
@case ('link') {
|
|
1006
1025
|
<a
|
|
@@ -1048,7 +1067,7 @@ class DotTextBlock {
|
|
|
1048
1067
|
}
|
|
1049
1068
|
`, isInline: true, dependencies: [{ kind: "component", type: DotTextBlock, selector: "dotcms-block-editor-renderer-text", inputs: ["marks", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1050
1069
|
}
|
|
1051
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1070
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotTextBlock, decorators: [{
|
|
1052
1071
|
type: Component,
|
|
1053
1072
|
args: [{
|
|
1054
1073
|
selector: 'dotcms-block-editor-renderer-text',
|
|
@@ -1122,8 +1141,8 @@ class DotUnknownBlockComponent {
|
|
|
1122
1141
|
get isEditMode() {
|
|
1123
1142
|
return getUVEState()?.mode === UVE_MODE.EDIT;
|
|
1124
1143
|
}
|
|
1125
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1126
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
1144
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotUnknownBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1145
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DotUnknownBlockComponent, isStandalone: true, selector: "dotcms-block-editor-renderer-unknown", inputs: { node: "node" }, ngImport: i0, template: `
|
|
1127
1146
|
@if (isEditMode) {
|
|
1128
1147
|
<div [style]="style" data-testid="unknown-block-type">
|
|
1129
1148
|
<strong style="color: #c53030">Warning:</strong>
|
|
@@ -1141,7 +1160,7 @@ class DotUnknownBlockComponent {
|
|
|
1141
1160
|
}
|
|
1142
1161
|
`, isInline: true }); }
|
|
1143
1162
|
}
|
|
1144
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1163
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotUnknownBlockComponent, decorators: [{
|
|
1145
1164
|
type: Component,
|
|
1146
1165
|
args: [{
|
|
1147
1166
|
selector: 'dotcms-block-editor-renderer-unknown',
|
|
@@ -1169,11 +1188,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
1169
1188
|
|
|
1170
1189
|
class DotVideoBlock {
|
|
1171
1190
|
constructor() {
|
|
1172
|
-
this.$srcURL = computed(() => this.attrs?.['src'], ...(ngDevMode ? [{ debugName: "$srcURL" }] : []));
|
|
1173
|
-
this.$posterURL = computed(() => this.attrs?.['data']?.['thumbnail'], ...(ngDevMode ? [{ debugName: "$posterURL" }] : []));
|
|
1191
|
+
this.$srcURL = computed(() => this.attrs?.['src'], ...(ngDevMode ? [{ debugName: "$srcURL" }] : /* istanbul ignore next */ []));
|
|
1192
|
+
this.$posterURL = computed(() => this.attrs?.['data']?.['thumbnail'], ...(ngDevMode ? [{ debugName: "$posterURL" }] : /* istanbul ignore next */ []));
|
|
1174
1193
|
}
|
|
1175
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1176
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
1194
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotVideoBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1195
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: DotVideoBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-video", inputs: { attrs: "attrs" }, ngImport: i0, template: `
|
|
1177
1196
|
<video
|
|
1178
1197
|
[controls]="true"
|
|
1179
1198
|
preload="metadata"
|
|
@@ -1188,7 +1207,7 @@ class DotVideoBlock {
|
|
|
1188
1207
|
</video>
|
|
1189
1208
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1190
1209
|
}
|
|
1191
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1210
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotVideoBlock, decorators: [{
|
|
1192
1211
|
type: Component,
|
|
1193
1212
|
args: [{
|
|
1194
1213
|
selector: 'dotcms-block-editor-renderer-video',
|
|
@@ -1216,10 +1235,10 @@ class DotCMSBlockEditorItemComponent {
|
|
|
1216
1235
|
constructor() {
|
|
1217
1236
|
this.BLOCKS = BlockEditorDefaultBlocks;
|
|
1218
1237
|
}
|
|
1219
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1220
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
1238
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSBlockEditorItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1239
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DotCMSBlockEditorItemComponent, isStandalone: true, selector: "dotcms-block-editor-renderer-block", inputs: { content: "content", customRenderers: "customRenderers" }, ngImport: i0, template: "@for (node of content; track node) {\n @if (customRenderers?.[node.type]) {\n <ng-container\n *ngTemplateOutlet=\"\n customRender;\n context: { customRender: customRenderers?.[node.type], node: node }\n \" />\n } @else {\n @switch (node.type) {\n @case (BLOCKS.PARAGRAPH) {\n <dotcms-block-editor-renderer-paragraph [style]=\"node.attrs\">\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-paragraph>\n }\n\n @case (BLOCKS.TEXT) {\n <dotcms-block-editor-renderer-text [marks]=\"node.marks\" [text]=\"node.text || ''\" />\n }\n\n @case (BLOCKS.HEADING) {\n <dotcms-block-editor-renderer-heading\n [style]=\"node.attrs || {}\"\n [level]=\"node.attrs?.['level'] || '1'\">\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-heading>\n }\n\n @case (BLOCKS.BULLET_LIST) {\n <dotcms-block-editor-renderer-bullet-list>\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-bullet-list>\n }\n\n @case (BLOCKS.ORDERED_LIST) {\n <dotcms-block-editor-renderer-ordered-list>\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-ordered-list>\n }\n\n @case (BLOCKS.LIST_ITEM) {\n <dotcms-block-editor-renderer-list-item>\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-list-item>\n }\n\n @case (BLOCKS.BLOCK_QUOTE) {\n <dotcms-block-editor-renderer-block-quote>\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-block-quote>\n }\n\n @case (BLOCKS.CODE_BLOCK) {\n <dotcms-block-editor-renderer-code-block>\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-code-block>\n }\n\n @case (BLOCKS.HARDBREAK) {\n <br />\n }\n\n @case (BLOCKS.HORIZONTAL_RULE) {\n <hr />\n }\n\n @case (BLOCKS.DOT_IMAGE) {\n <dotcms-block-editor-renderer-image [attrs]=\"node.attrs || {}\" />\n }\n\n @case (BLOCKS.DOT_VIDEO) {\n <dotcms-block-editor-renderer-video [attrs]=\"node.attrs || {}\" />\n }\n\n @case (BLOCKS.TABLE) {\n <dotcms-block-editor-renderer-table [content]=\"node.content\" [attrs]=\"node.attrs\" />\n }\n\n @case (BLOCKS.GRID_BLOCK) {\n <dotcms-block-editor-renderer-grid-block\n [node]=\"node\"\n [customRenderers]=\"customRenderers\" />\n }\n\n @case (BLOCKS.DOT_CONTENT) {\n <dotcms-block-editor-renderer-contentlet\n [node]=\"node\"\n [customRenderers]=\"customRenderers\" />\n }\n\n @default {\n <dotcms-block-editor-renderer-unknown [node]=\"node\" />\n }\n }\n }\n}\n\n<ng-template #customRender let-customRender=\"customRender\" let-node=\"node\">\n <ng-container *ngComponentOutlet=\"customRender | async; inputs: { node: node }\" />\n</ng-template>\n", styles: [""], dependencies: [{ kind: "component", type: DotCMSBlockEditorItemComponent, selector: "dotcms-block-editor-renderer-block", inputs: ["content", "customRenderers"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: DotParagraphBlock, selector: "dotcms-block-editor-renderer-paragraph" }, { kind: "component", type: DotTextBlock, selector: "dotcms-block-editor-renderer-text", inputs: ["marks", "text"] }, { kind: "component", type: DotHeadingBlock, selector: "dotcms-block-editor-renderer-heading", inputs: ["level"] }, { kind: "component", type: DotBulletList, selector: "dotcms-block-editor-renderer-bullet-list" }, { kind: "component", type: DotOrdererList, selector: "dotcms-block-editor-renderer-ordered-list" }, { kind: "component", type: DotListItem, selector: "dotcms-block-editor-renderer-list-item" }, { kind: "component", type: DotCodeBlock, selector: "dotcms-block-editor-renderer-code-block" }, { kind: "component", type: DotBlockQuote, selector: "dotcms-block-editor-renderer-block-quote" }, { kind: "component", type: DotImageBlock, selector: "dotcms-block-editor-renderer-image", inputs: ["attrs"] }, { kind: "component", type: DotVideoBlock, selector: "dotcms-block-editor-renderer-video", inputs: ["attrs"] }, { kind: "component", type: DotTableBlock, selector: "dotcms-block-editor-renderer-table", inputs: ["content", "attrs"] }, { kind: "component", type: DotGridBlock, selector: "dotcms-block-editor-renderer-grid-block", inputs: ["node", "customRenderers"] }, { kind: "component", type: DotContentletBlock, selector: "dotcms-block-editor-renderer-contentlet", inputs: ["customRenderers", "node"] }, { kind: "component", type: DotUnknownBlockComponent, selector: "dotcms-block-editor-renderer-unknown", inputs: ["node"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
|
|
1221
1240
|
}
|
|
1222
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1241
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSBlockEditorItemComponent, decorators: [{
|
|
1223
1242
|
type: Component,
|
|
1224
1243
|
args: [{ selector: 'dotcms-block-editor-renderer-block', imports: [
|
|
1225
1244
|
NgTemplateOutlet,
|
|
@@ -1239,7 +1258,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
1239
1258
|
DotGridBlock,
|
|
1240
1259
|
DotContentletBlock,
|
|
1241
1260
|
DotUnknownBlockComponent
|
|
1242
|
-
], template: "@for (node of content; track node) {\n @if (customRenderers?.[node.type]) {\n <ng-container\n *ngTemplateOutlet=\"\n customRender;\n context: { customRender: customRenderers?.[node.type], node: node }\n \" />\n } @else {\n @switch (node.type) {\n @case (BLOCKS.PARAGRAPH) {\n <dotcms-block-editor-renderer-paragraph [style]=\"node.attrs\">\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-paragraph>\n }\n\n @case (BLOCKS.TEXT) {\n <dotcms-block-editor-renderer-text [marks]=\"node.marks\" [text]=\"node.text || ''\" />\n }\n\n @case (BLOCKS.HEADING) {\n <dotcms-block-editor-renderer-heading\n [style]=\"node.attrs || {}\"\n [level]=\"node.attrs?.['level'] || '1'\">\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-heading>\n }\n\n @case (BLOCKS.BULLET_LIST) {\n <dotcms-block-editor-renderer-bullet-list>\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-bullet-list>\n }\n\n @case (BLOCKS.ORDERED_LIST) {\n <dotcms-block-editor-renderer-ordered-list>\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-ordered-list>\n }\n\n @case (BLOCKS.LIST_ITEM) {\n <dotcms-block-editor-renderer-list-item>\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-list-item>\n }\n\n @case (BLOCKS.BLOCK_QUOTE) {\n <dotcms-block-editor-renderer-block-quote>\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-block-quote>\n }\n\n @case (BLOCKS.CODE_BLOCK) {\n <dotcms-block-editor-renderer-code-block>\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-code-block>\n }\n\n @case (BLOCKS.HARDBREAK) {\n <br />\n }\n\n @case (BLOCKS.HORIZONTAL_RULE) {\n <hr />\n }\n\n @case (BLOCKS.DOT_IMAGE) {\n <dotcms-block-editor-renderer-image [attrs]=\"node.attrs || {}\" />\n }\n\n @case (BLOCKS.DOT_VIDEO) {\n <dotcms-block-editor-renderer-video [attrs]=\"node.attrs || {}\" />\n }\n\n @case (BLOCKS.TABLE) {\n <dotcms-block-editor-renderer-table [content]=\"node.content\" />\n }\n\n @case (BLOCKS.GRID_BLOCK) {\n <dotcms-block-editor-renderer-grid-block\n [node]=\"node\"\n [customRenderers]=\"customRenderers\" />\n }\n\n @case (BLOCKS.DOT_CONTENT) {\n <dotcms-block-editor-renderer-contentlet\n [node]=\"node\"\n [customRenderers]=\"customRenderers\" />\n }\n\n @default {\n <dotcms-block-editor-renderer-unknown [node]=\"node\" />\n }\n }\n }\n}\n\n<ng-template #customRender let-customRender=\"customRender\" let-node=\"node\">\n <ng-container *ngComponentOutlet=\"customRender | async; inputs: { node: node }\" />\n</ng-template>\n" }]
|
|
1261
|
+
], template: "@for (node of content; track node) {\n @if (customRenderers?.[node.type]) {\n <ng-container\n *ngTemplateOutlet=\"\n customRender;\n context: { customRender: customRenderers?.[node.type], node: node }\n \" />\n } @else {\n @switch (node.type) {\n @case (BLOCKS.PARAGRAPH) {\n <dotcms-block-editor-renderer-paragraph [style]=\"node.attrs\">\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-paragraph>\n }\n\n @case (BLOCKS.TEXT) {\n <dotcms-block-editor-renderer-text [marks]=\"node.marks\" [text]=\"node.text || ''\" />\n }\n\n @case (BLOCKS.HEADING) {\n <dotcms-block-editor-renderer-heading\n [style]=\"node.attrs || {}\"\n [level]=\"node.attrs?.['level'] || '1'\">\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-heading>\n }\n\n @case (BLOCKS.BULLET_LIST) {\n <dotcms-block-editor-renderer-bullet-list>\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-bullet-list>\n }\n\n @case (BLOCKS.ORDERED_LIST) {\n <dotcms-block-editor-renderer-ordered-list>\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-ordered-list>\n }\n\n @case (BLOCKS.LIST_ITEM) {\n <dotcms-block-editor-renderer-list-item>\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-list-item>\n }\n\n @case (BLOCKS.BLOCK_QUOTE) {\n <dotcms-block-editor-renderer-block-quote>\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-block-quote>\n }\n\n @case (BLOCKS.CODE_BLOCK) {\n <dotcms-block-editor-renderer-code-block>\n <dotcms-block-editor-renderer-block\n [content]=\"node.content\"\n [customRenderers]=\"customRenderers\" />\n </dotcms-block-editor-renderer-code-block>\n }\n\n @case (BLOCKS.HARDBREAK) {\n <br />\n }\n\n @case (BLOCKS.HORIZONTAL_RULE) {\n <hr />\n }\n\n @case (BLOCKS.DOT_IMAGE) {\n <dotcms-block-editor-renderer-image [attrs]=\"node.attrs || {}\" />\n }\n\n @case (BLOCKS.DOT_VIDEO) {\n <dotcms-block-editor-renderer-video [attrs]=\"node.attrs || {}\" />\n }\n\n @case (BLOCKS.TABLE) {\n <dotcms-block-editor-renderer-table [content]=\"node.content\" [attrs]=\"node.attrs\" />\n }\n\n @case (BLOCKS.GRID_BLOCK) {\n <dotcms-block-editor-renderer-grid-block\n [node]=\"node\"\n [customRenderers]=\"customRenderers\" />\n }\n\n @case (BLOCKS.DOT_CONTENT) {\n <dotcms-block-editor-renderer-contentlet\n [node]=\"node\"\n [customRenderers]=\"customRenderers\" />\n }\n\n @default {\n <dotcms-block-editor-renderer-unknown [node]=\"node\" />\n }\n }\n }\n}\n\n<ng-template #customRender let-customRender=\"customRender\" let-node=\"node\">\n <ng-container *ngComponentOutlet=\"customRender | async; inputs: { node: node }\" />\n</ng-template>\n" }]
|
|
1243
1262
|
}], propDecorators: { content: [{
|
|
1244
1263
|
type: Input
|
|
1245
1264
|
}], customRenderers: [{
|
|
@@ -1261,11 +1280,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
1261
1280
|
* [customRenderers]="myCustomRenderers">
|
|
1262
1281
|
* </dotcms-block-editor-renderer>
|
|
1263
1282
|
* ```
|
|
1283
|
+
*
|
|
1284
|
+
* @deprecated Use {@link DotCMSBlockEditorRendererNativeComponent}
|
|
1285
|
+
* (`<dotcms-block-editor-renderer-native>`) for accessible, semantic DOM output.
|
|
1286
|
+
* This component wraps every semantic tag in a custom element (e.g. a dispatcher
|
|
1287
|
+
* element sits between `<ul>` and its `<li>` children), which breaks the
|
|
1288
|
+
* `list → listitem` relationship required by the HTML spec and assistive technology.
|
|
1289
|
+
* The native renderer keeps the identical public input API — migration is just
|
|
1290
|
+
* swapping the tag and import. This component is retained for backward compatibility
|
|
1291
|
+
* and will be removed in a future major version.
|
|
1264
1292
|
*/
|
|
1265
1293
|
class DotCMSBlockEditorRendererComponent {
|
|
1266
1294
|
constructor() {
|
|
1267
|
-
this.$blockEditorState = signal({ error: null }, ...(ngDevMode ? [{ debugName: "$blockEditorState" }] : []));
|
|
1268
|
-
this.$isInEditMode = signal(getUVEState()?.mode === UVE_MODE.EDIT, ...(ngDevMode ? [{ debugName: "$isInEditMode" }] : []));
|
|
1295
|
+
this.$blockEditorState = signal({ error: null }, ...(ngDevMode ? [{ debugName: "$blockEditorState" }] : /* istanbul ignore next */ []));
|
|
1296
|
+
this.$isInEditMode = signal(getUVEState()?.mode === UVE_MODE.EDIT, ...(ngDevMode ? [{ debugName: "$isInEditMode" }] : /* istanbul ignore next */ []));
|
|
1269
1297
|
}
|
|
1270
1298
|
ngOnInit() {
|
|
1271
1299
|
const state = isValidBlocks(this.blocks);
|
|
@@ -1274,10 +1302,10 @@ class DotCMSBlockEditorRendererComponent {
|
|
|
1274
1302
|
}
|
|
1275
1303
|
this.$blockEditorState.set(isValidBlocks(this.blocks));
|
|
1276
1304
|
}
|
|
1277
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1278
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
1305
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSBlockEditorRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1306
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DotCMSBlockEditorRendererComponent, isStandalone: true, selector: "dotcms-block-editor-renderer", inputs: { blocks: "blocks", customRenderers: "customRenderers", class: "class", style: "style" }, ngImport: i0, template: "@if ($blockEditorState().error && $isInEditMode()) {\n <div data-testid=\"invalid-blocks-message\">\n {{ $blockEditorState().error }}\n </div>\n} @else if (!$blockEditorState().error) {\n <div [class]=\"class\" [style]=\"style\">\n <dotcms-block-editor-renderer-block\n [content]=\"blocks.content\"\n [customRenderers]=\"customRenderers\" />\n </div>\n}\n", styles: [""], dependencies: [{ kind: "component", type: DotCMSBlockEditorItemComponent, selector: "dotcms-block-editor-renderer-block", inputs: ["content", "customRenderers"] }] }); }
|
|
1279
1307
|
}
|
|
1280
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1308
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSBlockEditorRendererComponent, decorators: [{
|
|
1281
1309
|
type: Component,
|
|
1282
1310
|
args: [{ selector: 'dotcms-block-editor-renderer', imports: [DotCMSBlockEditorItemComponent], template: "@if ($blockEditorState().error && $isInEditMode()) {\n <div data-testid=\"invalid-blocks-message\">\n {{ $blockEditorState().error }}\n </div>\n} @else if (!$blockEditorState().error) {\n <div [class]=\"class\" [style]=\"style\">\n <dotcms-block-editor-renderer-block\n [content]=\"blocks.content\"\n [customRenderers]=\"customRenderers\" />\n </div>\n}\n" }]
|
|
1283
1311
|
}], propDecorators: { blocks: [{
|
|
@@ -1290,6 +1318,240 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
1290
1318
|
type: Input
|
|
1291
1319
|
}] } });
|
|
1292
1320
|
|
|
1321
|
+
/**
|
|
1322
|
+
* Internal semantic block components for the accessible Block Editor renderer.
|
|
1323
|
+
*
|
|
1324
|
+
* Each component uses an **attribute selector** so the host element *is* the real
|
|
1325
|
+
* semantic tag (`<ul>`, `<ol>`, `<li>`, ...). The template is just `<ng-content />`,
|
|
1326
|
+
* so no extra wrapper element is added to the DOM and the
|
|
1327
|
+
* `list → listitem` relationship required by the HTML spec and assistive
|
|
1328
|
+
* technology is preserved.
|
|
1329
|
+
*
|
|
1330
|
+
* These are not exported from the SDK; they are an implementation detail of
|
|
1331
|
+
* {@link DotCMSBlockEditorRendererNativeComponent}.
|
|
1332
|
+
*
|
|
1333
|
+
* @internal
|
|
1334
|
+
*/
|
|
1335
|
+
class DotSemanticBulletList {
|
|
1336
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticBulletList, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1337
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: DotSemanticBulletList, isStandalone: true, selector: "ul[dotBulletList]", ngImport: i0, template: `
|
|
1338
|
+
<ng-content />
|
|
1339
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1340
|
+
}
|
|
1341
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticBulletList, decorators: [{
|
|
1342
|
+
type: Component,
|
|
1343
|
+
args: [{
|
|
1344
|
+
selector: 'ul[dotBulletList]',
|
|
1345
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1346
|
+
template: `
|
|
1347
|
+
<ng-content />
|
|
1348
|
+
`
|
|
1349
|
+
}]
|
|
1350
|
+
}] });
|
|
1351
|
+
class DotSemanticOrderedList {
|
|
1352
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticOrderedList, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1353
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: DotSemanticOrderedList, isStandalone: true, selector: "ol[dotOrderedList]", ngImport: i0, template: `
|
|
1354
|
+
<ng-content />
|
|
1355
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1356
|
+
}
|
|
1357
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticOrderedList, decorators: [{
|
|
1358
|
+
type: Component,
|
|
1359
|
+
args: [{
|
|
1360
|
+
selector: 'ol[dotOrderedList]',
|
|
1361
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1362
|
+
template: `
|
|
1363
|
+
<ng-content />
|
|
1364
|
+
`
|
|
1365
|
+
}]
|
|
1366
|
+
}] });
|
|
1367
|
+
class DotSemanticListItem {
|
|
1368
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticListItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1369
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: DotSemanticListItem, isStandalone: true, selector: "li[dotListItem]", ngImport: i0, template: `
|
|
1370
|
+
<ng-content />
|
|
1371
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1372
|
+
}
|
|
1373
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticListItem, decorators: [{
|
|
1374
|
+
type: Component,
|
|
1375
|
+
args: [{
|
|
1376
|
+
selector: 'li[dotListItem]',
|
|
1377
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1378
|
+
template: `
|
|
1379
|
+
<ng-content />
|
|
1380
|
+
`
|
|
1381
|
+
}]
|
|
1382
|
+
}] });
|
|
1383
|
+
class DotSemanticParagraph {
|
|
1384
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticParagraph, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1385
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: DotSemanticParagraph, isStandalone: true, selector: "p[dotParagraph]", ngImport: i0, template: `
|
|
1386
|
+
<ng-content />
|
|
1387
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1388
|
+
}
|
|
1389
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticParagraph, decorators: [{
|
|
1390
|
+
type: Component,
|
|
1391
|
+
args: [{
|
|
1392
|
+
selector: 'p[dotParagraph]',
|
|
1393
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1394
|
+
template: `
|
|
1395
|
+
<ng-content />
|
|
1396
|
+
`
|
|
1397
|
+
}]
|
|
1398
|
+
}] });
|
|
1399
|
+
class DotSemanticBlockQuote {
|
|
1400
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticBlockQuote, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1401
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: DotSemanticBlockQuote, isStandalone: true, selector: "blockquote[dotBlockQuote]", ngImport: i0, template: `
|
|
1402
|
+
<ng-content />
|
|
1403
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1404
|
+
}
|
|
1405
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticBlockQuote, decorators: [{
|
|
1406
|
+
type: Component,
|
|
1407
|
+
args: [{
|
|
1408
|
+
selector: 'blockquote[dotBlockQuote]',
|
|
1409
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1410
|
+
template: `
|
|
1411
|
+
<ng-content />
|
|
1412
|
+
`
|
|
1413
|
+
}]
|
|
1414
|
+
}] });
|
|
1415
|
+
class DotSemanticCodeBlock {
|
|
1416
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticCodeBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1417
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: DotSemanticCodeBlock, isStandalone: true, selector: "pre[dotCodeBlock]", ngImport: i0, template: `
|
|
1418
|
+
<code><ng-content /></code>
|
|
1419
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1420
|
+
}
|
|
1421
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticCodeBlock, decorators: [{
|
|
1422
|
+
type: Component,
|
|
1423
|
+
args: [{
|
|
1424
|
+
selector: 'pre[dotCodeBlock]',
|
|
1425
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1426
|
+
template: `
|
|
1427
|
+
<code><ng-content /></code>
|
|
1428
|
+
`
|
|
1429
|
+
}]
|
|
1430
|
+
}] });
|
|
1431
|
+
|
|
1432
|
+
/**
|
|
1433
|
+
* An accessible component that renders content from DotCMS's Block Editor field.
|
|
1434
|
+
*
|
|
1435
|
+
* This is the semantic-DOM successor to {@link DotCMSBlockEditorRendererComponent}.
|
|
1436
|
+
* It emits clean semantic HTML — `<ul><li><p>…</p></li></ul>` — with no custom
|
|
1437
|
+
* wrapper elements between semantic tags, so the `list → listitem` relationship
|
|
1438
|
+
* required by the HTML spec and assistive technology is preserved. The recursive
|
|
1439
|
+
* dispatch is performed with `ng-template` outlets, whose host `<ng-container>`s
|
|
1440
|
+
* render as HTML comment nodes (invisible to the accessibility tree).
|
|
1441
|
+
*
|
|
1442
|
+
* It exposes the **identical public input API** and the same `customRenderers`
|
|
1443
|
+
* contract as the deprecated renderer, so migration is just swapping the tag and
|
|
1444
|
+
* import.
|
|
1445
|
+
*
|
|
1446
|
+
* For more information about Block Editor, see {@link https://dev.dotcms.com/docs/block-editor}
|
|
1447
|
+
*
|
|
1448
|
+
* @example
|
|
1449
|
+
* ```html
|
|
1450
|
+
* <dotcms-block-editor-renderer-native
|
|
1451
|
+
* [blocks]="myBlockEditorContent"
|
|
1452
|
+
* [customRenderers]="myCustomRenderers">
|
|
1453
|
+
* </dotcms-block-editor-renderer-native>
|
|
1454
|
+
* ```
|
|
1455
|
+
*/
|
|
1456
|
+
class DotCMSBlockEditorRendererNativeComponent {
|
|
1457
|
+
constructor() {
|
|
1458
|
+
/** The Block Editor `doc` node to render. */
|
|
1459
|
+
this.blocks = input(...(ngDevMode ? [undefined, { debugName: "blocks" }] : /* istanbul ignore next */ []));
|
|
1460
|
+
/** Map of `node.type` → component to override the built-in render path. */
|
|
1461
|
+
this.customRenderers = input(undefined, ...(ngDevMode ? [{ debugName: "customRenderers" }] : /* istanbul ignore next */ []));
|
|
1462
|
+
/**
|
|
1463
|
+
* CSS class on the wrapper element. Aliased as `class` so consumers can
|
|
1464
|
+
* pass `[class]="…"` like a normal Angular class binding.
|
|
1465
|
+
*/
|
|
1466
|
+
this.cssClass = input(undefined, { ...(ngDevMode ? { debugName: "cssClass" } : /* istanbul ignore next */ {}), alias: 'class' });
|
|
1467
|
+
/** Inline style on the wrapper element. */
|
|
1468
|
+
this.style = input(undefined, ...(ngDevMode ? [{ debugName: "style" }] : /* istanbul ignore next */ []));
|
|
1469
|
+
this.$blockEditorState = signal({ error: null }, ...(ngDevMode ? [{ debugName: "$blockEditorState" }] : /* istanbul ignore next */ []));
|
|
1470
|
+
this.$isInEditMode = signal(getUVEState()?.mode === UVE_MODE.EDIT, ...(ngDevMode ? [{ debugName: "$isInEditMode" }] : /* istanbul ignore next */ []));
|
|
1471
|
+
this.BLOCKS = BlockEditorDefaultBlocks;
|
|
1472
|
+
}
|
|
1473
|
+
ngOnInit() {
|
|
1474
|
+
// `isValidBlocks` declares `blocks: BlockEditorNode` but its first guard
|
|
1475
|
+
// handles `undefined` — the cast lines up the types without changing the
|
|
1476
|
+
// published `@dotcms/uve` signature.
|
|
1477
|
+
const state = isValidBlocks(this.blocks());
|
|
1478
|
+
if (state.error) {
|
|
1479
|
+
console.error('Error in dotcms-block-editor-renderer-native: ', state.error);
|
|
1480
|
+
}
|
|
1481
|
+
this.$blockEditorState.set(state);
|
|
1482
|
+
}
|
|
1483
|
+
/**
|
|
1484
|
+
* Normalizes a heading `level` attribute (which may be a number such as `6`
|
|
1485
|
+
* or a string such as `'6'`) to a string for use in the heading `@switch`.
|
|
1486
|
+
* Returns `''` for missing or out-of-range levels so the template falls
|
|
1487
|
+
* through to the safe `@default` case (`<h2>`).
|
|
1488
|
+
*/
|
|
1489
|
+
asLevel(level) {
|
|
1490
|
+
const normalized = level != null ? String(level) : '';
|
|
1491
|
+
return /^[1-6]$/.test(normalized) ? normalized : '';
|
|
1492
|
+
}
|
|
1493
|
+
/** The marks after the current (outermost) one — used to recurse inward. */
|
|
1494
|
+
restMarks(marks) {
|
|
1495
|
+
return marks?.slice(1) ?? [];
|
|
1496
|
+
}
|
|
1497
|
+
/** The attributes of the current (outermost) mark. */
|
|
1498
|
+
markAttrs(marks) {
|
|
1499
|
+
return marks?.[0]?.attrs ?? {};
|
|
1500
|
+
}
|
|
1501
|
+
/**
|
|
1502
|
+
* Wrapper style for a `dotImage` `<figure>`, derived from the node's
|
|
1503
|
+
* `textWrap` (float left/right) or `textAlign` attribute.
|
|
1504
|
+
*/
|
|
1505
|
+
imageStyle(attrs) {
|
|
1506
|
+
const textWrap = attrs?.['textWrap'];
|
|
1507
|
+
const textAlign = attrs?.['textAlign'];
|
|
1508
|
+
if (textWrap === 'left') {
|
|
1509
|
+
return { float: 'left', width: '50%', margin: '0 1rem 1rem 0' };
|
|
1510
|
+
}
|
|
1511
|
+
if (textWrap === 'right') {
|
|
1512
|
+
return { float: 'right', width: '50%', margin: '0 0 1rem 1rem' };
|
|
1513
|
+
}
|
|
1514
|
+
if (textAlign) {
|
|
1515
|
+
return { 'text-align': textAlign };
|
|
1516
|
+
}
|
|
1517
|
+
return {};
|
|
1518
|
+
}
|
|
1519
|
+
/** Poster URL for a `dotVideo` `<video>` (from `attrs.data.thumbnail`). */
|
|
1520
|
+
videoPoster(attrs) {
|
|
1521
|
+
return attrs?.['data']?.['thumbnail'];
|
|
1522
|
+
}
|
|
1523
|
+
/**
|
|
1524
|
+
* The column span (1–12) for a grid column. Falls back to `6` for malformed
|
|
1525
|
+
* `columns` attrs or for an out-of-range column index, matching the legacy
|
|
1526
|
+
* renderer.
|
|
1527
|
+
*/
|
|
1528
|
+
columnSpan(attrs, index) {
|
|
1529
|
+
const rawCols = Array.isArray(attrs?.['columns']) ? attrs['columns'] : [6, 6];
|
|
1530
|
+
const valid = rawCols.length === 2 &&
|
|
1531
|
+
rawCols.every((v) => typeof v === 'number' && Number.isFinite(v));
|
|
1532
|
+
const span = valid ? rawCols[index] : 6;
|
|
1533
|
+
return typeof span === 'number' ? span : 6;
|
|
1534
|
+
}
|
|
1535
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSBlockEditorRendererNativeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1536
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DotCMSBlockEditorRendererNativeComponent, isStandalone: true, selector: "dotcms-block-editor-renderer-native", inputs: { blocks: { classPropertyName: "blocks", publicName: "blocks", isSignal: true, isRequired: false, transformFunction: null }, customRenderers: { classPropertyName: "customRenderers", publicName: "customRenderers", isSignal: true, isRequired: false, transformFunction: null }, cssClass: { classPropertyName: "cssClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, style: { classPropertyName: "style", publicName: "style", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if ($blockEditorState().error && $isInEditMode()) {\n <div data-testid=\"invalid-blocks-message\">\n {{ $blockEditorState().error }}\n </div>\n} @else if (!$blockEditorState().error) {\n <div [class]=\"cssClass()\" [style]=\"style()\">\n <ng-container *ngTemplateOutlet=\"nodeList; context: { $implicit: blocks()?.content }\" />\n </div>\n}\n\n<!-- Renders a list of nodes by dispatching each one. -->\n<ng-template #nodeList let-content>\n @for (node of content; track node) {\n <ng-container *ngTemplateOutlet=\"dispatch; context: { $implicit: node }\" />\n }\n</ng-template>\n\n<!--\n Dispatches a single node to its semantic tag. The host ng-container of each\n ngTemplateOutlet renders as an HTML comment node, so a list item stays a true\n DOM child of its list element \u2014 the property that makes this AT-proof.\n-->\n<ng-template #dispatch let-node>\n @if (customRenderers()?.[node.type]) {\n <ng-container\n *ngTemplateOutlet=\"\n customRender;\n context: { customRender: customRenderers()?.[node.type], node: node }\n \" />\n } @else {\n @switch (node.type) {\n @case (BLOCKS.PARAGRAPH) {\n <p dotParagraph [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" />\n </p>\n }\n\n @case (BLOCKS.TEXT) {\n <ng-container\n *ngTemplateOutlet=\"\n textRun;\n context: { marks: node.marks, text: node.text || '' }\n \" />\n }\n\n @case (BLOCKS.HEADING) {\n @switch (asLevel(node.attrs?.['level'])) {\n @case ('1') {\n <h1 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: node.content }\n \" />\n </h1>\n }\n @case ('2') {\n <h2 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: node.content }\n \" />\n </h2>\n }\n @case ('3') {\n <h3 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: node.content }\n \" />\n </h3>\n }\n @case ('4') {\n <h4 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: node.content }\n \" />\n </h4>\n }\n @case ('5') {\n <h5 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: node.content }\n \" />\n </h5>\n }\n @case ('6') {\n <h6 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: node.content }\n \" />\n </h6>\n }\n @default {\n <!--\n Unknown level: fall back to <h2>, not <h1>. An\n unexpected <h1> in an article tanks the heading\n outline that assistive technology relies on, and\n articles typically already have a page <h1>.\n -->\n <h2 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: node.content }\n \" />\n </h2>\n }\n }\n }\n\n @case (BLOCKS.BULLET_LIST) {\n <ul dotBulletList>\n <ng-container\n *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" />\n </ul>\n }\n\n @case (BLOCKS.ORDERED_LIST) {\n <ol dotOrderedList>\n <ng-container\n *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" />\n </ol>\n }\n\n @case (BLOCKS.LIST_ITEM) {\n <li dotListItem>\n <ng-container\n *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" />\n </li>\n }\n\n @case (BLOCKS.BLOCK_QUOTE) {\n <blockquote dotBlockQuote>\n <ng-container\n *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" />\n </blockquote>\n }\n\n @case (BLOCKS.CODE_BLOCK) {\n <pre dotCodeBlock>\n <ng-container\n *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" /></pre>\n }\n\n @case (BLOCKS.HARDBREAK) {\n <br />\n }\n\n @case (BLOCKS.HORIZONTAL_RULE) {\n <hr />\n }\n\n @case (BLOCKS.DOT_IMAGE) {\n <figure [style]=\"imageStyle(node.attrs)\">\n <img\n [alt]=\"node.attrs?.['alt']\"\n [src]=\"node.attrs?.['src']\"\n style=\"max-width: 100%; height: auto\" />\n </figure>\n }\n\n @case (BLOCKS.DOT_VIDEO) {\n <video\n [controls]=\"true\"\n preload=\"metadata\"\n [poster]=\"videoPoster(node.attrs)\"\n [width]=\"node.attrs?.['width']\"\n [height]=\"node.attrs?.['height']\">\n <track default kind=\"captions\" srclang=\"en\" />\n <source [src]=\"node.attrs?.['src']\" [type]=\"node.attrs?.['mimeType']\" />\n Your browser does not support the\n <code>video</code>\n element.\n </video>\n }\n\n @case (BLOCKS.TABLE) {\n <table>\n <thead>\n @for (rowNode of node.content?.slice(0, 1); track $index) {\n <tr>\n @for (cellNode of rowNode.content; track $index) {\n <th\n [attr.colspan]=\"cellNode.attrs?.['colspan'] || 1\"\n [attr.rowspan]=\"cellNode.attrs?.['rowspan'] || 1\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: cellNode.content }\n \" />\n </th>\n }\n </tr>\n }\n </thead>\n <tbody>\n @for (rowNode of node.content?.slice(1); track $index) {\n <tr>\n @for (cellNode of rowNode.content; track $index) {\n <td\n [attr.colspan]=\"cellNode.attrs?.['colspan'] || 1\"\n [attr.rowspan]=\"cellNode.attrs?.['rowspan'] || 1\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: cellNode.content }\n \" />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n\n @case (BLOCKS.GRID_BLOCK) {\n <div\n data-type=\"gridBlock\"\n class=\"grid-block\"\n style=\"display: grid; grid-template-columns: repeat(12, 1fr); gap: 1rem\">\n @for (column of node.content; track $index) {\n <div\n data-type=\"gridColumn\"\n class=\"grid-block__column\"\n [style.grid-column]=\"'span ' + columnSpan(node.attrs, $index)\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: column.content }\n \" />\n </div>\n }\n </div>\n }\n\n @case (BLOCKS.DOT_CONTENT) {\n <dotcms-block-editor-renderer-contentlet\n [node]=\"node\"\n [customRenderers]=\"customRenderers()\" />\n }\n\n @default {\n <dotcms-block-editor-renderer-unknown [node]=\"node\" />\n }\n }\n }\n</ng-template>\n\n<ng-template #customRender let-customRender=\"customRender\" let-node=\"node\">\n <ng-container *ngComponentOutlet=\"customRender | async; inputs: { node: node }\" />\n</ng-template>\n\n<!--\n Renders a text node and its marks as native inline elements (<strong>, <u>,\n <em>, <a>, ...) with no wrapper element. Recurses through itself (rendered as a\n comment node) one mark at a time, so stacked marks nest directly:\n <u><strong>text</strong></u>.\n-->\n<ng-template #textRun let-marks=\"marks\" let-text=\"text\">\n @switch (marks?.[0]?.type) {\n @case ('link') {\n @if (markAttrs(marks)['href']) {\n <a\n [attr.href]=\"markAttrs(marks)['href']\"\n [attr.target]=\"markAttrs(marks)['target'] || null\"\n [attr.title]=\"markAttrs(marks)['title'] || null\"\n [attr.aria-label]=\"markAttrs(marks)['aria-label'] || null\"\n [attr.rel]=\"\n markAttrs(marks)['rel'] ||\n (markAttrs(marks)['target'] === '_blank' ? 'noopener noreferrer' : null)\n \"\n [class]=\"markAttrs(marks)['class'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n textRun;\n context: { marks: restMarks(marks), text: text }\n \" />\n </a>\n } @else {\n <!--\n Malformed link mark with no href: a hrefless <a> isn't a\n link to assistive tech (no role, not focusable). Skip the\n element and recurse \u2014 any remaining marks (bold, etc.)\n still render around the text.\n -->\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n }\n }\n @case ('bold') {\n <strong>\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n </strong>\n }\n @case ('underline') {\n <u>\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n </u>\n }\n @case ('italic') {\n <em>\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n </em>\n }\n @case ('strike') {\n <s>\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n </s>\n }\n @case ('superscript') {\n <sup>\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n </sup>\n }\n @case ('subscript') {\n <sub>\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n </sub>\n }\n @default {\n @if (marks?.length) {\n <!-- Unknown mark type: skip it but keep rendering any marks beneath. -->\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n } @else {\n {{ text }}\n }\n }\n }\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: DotSemanticParagraph, selector: "p[dotParagraph]" }, { kind: "component", type: DotSemanticBulletList, selector: "ul[dotBulletList]" }, { kind: "component", type: DotSemanticOrderedList, selector: "ol[dotOrderedList]" }, { kind: "component", type: DotSemanticListItem, selector: "li[dotListItem]" }, { kind: "component", type: DotSemanticBlockQuote, selector: "blockquote[dotBlockQuote]" }, { kind: "component", type: DotSemanticCodeBlock, selector: "pre[dotCodeBlock]" }, { kind: "component", type: DotContentletBlock, selector: "dotcms-block-editor-renderer-contentlet", inputs: ["customRenderers", "node"] }, { kind: "component", type: DotUnknownBlockComponent, selector: "dotcms-block-editor-renderer-unknown", inputs: ["node"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1537
|
+
}
|
|
1538
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSBlockEditorRendererNativeComponent, decorators: [{
|
|
1539
|
+
type: Component,
|
|
1540
|
+
args: [{ selector: 'dotcms-block-editor-renderer-native', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
1541
|
+
NgTemplateOutlet,
|
|
1542
|
+
NgComponentOutlet,
|
|
1543
|
+
AsyncPipe,
|
|
1544
|
+
DotSemanticParagraph,
|
|
1545
|
+
DotSemanticBulletList,
|
|
1546
|
+
DotSemanticOrderedList,
|
|
1547
|
+
DotSemanticListItem,
|
|
1548
|
+
DotSemanticBlockQuote,
|
|
1549
|
+
DotSemanticCodeBlock,
|
|
1550
|
+
DotContentletBlock,
|
|
1551
|
+
DotUnknownBlockComponent
|
|
1552
|
+
], template: "@if ($blockEditorState().error && $isInEditMode()) {\n <div data-testid=\"invalid-blocks-message\">\n {{ $blockEditorState().error }}\n </div>\n} @else if (!$blockEditorState().error) {\n <div [class]=\"cssClass()\" [style]=\"style()\">\n <ng-container *ngTemplateOutlet=\"nodeList; context: { $implicit: blocks()?.content }\" />\n </div>\n}\n\n<!-- Renders a list of nodes by dispatching each one. -->\n<ng-template #nodeList let-content>\n @for (node of content; track node) {\n <ng-container *ngTemplateOutlet=\"dispatch; context: { $implicit: node }\" />\n }\n</ng-template>\n\n<!--\n Dispatches a single node to its semantic tag. The host ng-container of each\n ngTemplateOutlet renders as an HTML comment node, so a list item stays a true\n DOM child of its list element \u2014 the property that makes this AT-proof.\n-->\n<ng-template #dispatch let-node>\n @if (customRenderers()?.[node.type]) {\n <ng-container\n *ngTemplateOutlet=\"\n customRender;\n context: { customRender: customRenderers()?.[node.type], node: node }\n \" />\n } @else {\n @switch (node.type) {\n @case (BLOCKS.PARAGRAPH) {\n <p dotParagraph [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" />\n </p>\n }\n\n @case (BLOCKS.TEXT) {\n <ng-container\n *ngTemplateOutlet=\"\n textRun;\n context: { marks: node.marks, text: node.text || '' }\n \" />\n }\n\n @case (BLOCKS.HEADING) {\n @switch (asLevel(node.attrs?.['level'])) {\n @case ('1') {\n <h1 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: node.content }\n \" />\n </h1>\n }\n @case ('2') {\n <h2 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: node.content }\n \" />\n </h2>\n }\n @case ('3') {\n <h3 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: node.content }\n \" />\n </h3>\n }\n @case ('4') {\n <h4 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: node.content }\n \" />\n </h4>\n }\n @case ('5') {\n <h5 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: node.content }\n \" />\n </h5>\n }\n @case ('6') {\n <h6 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: node.content }\n \" />\n </h6>\n }\n @default {\n <!--\n Unknown level: fall back to <h2>, not <h1>. An\n unexpected <h1> in an article tanks the heading\n outline that assistive technology relies on, and\n articles typically already have a page <h1>.\n -->\n <h2 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: node.content }\n \" />\n </h2>\n }\n }\n }\n\n @case (BLOCKS.BULLET_LIST) {\n <ul dotBulletList>\n <ng-container\n *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" />\n </ul>\n }\n\n @case (BLOCKS.ORDERED_LIST) {\n <ol dotOrderedList>\n <ng-container\n *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" />\n </ol>\n }\n\n @case (BLOCKS.LIST_ITEM) {\n <li dotListItem>\n <ng-container\n *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" />\n </li>\n }\n\n @case (BLOCKS.BLOCK_QUOTE) {\n <blockquote dotBlockQuote>\n <ng-container\n *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" />\n </blockquote>\n }\n\n @case (BLOCKS.CODE_BLOCK) {\n <pre dotCodeBlock>\n <ng-container\n *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" /></pre>\n }\n\n @case (BLOCKS.HARDBREAK) {\n <br />\n }\n\n @case (BLOCKS.HORIZONTAL_RULE) {\n <hr />\n }\n\n @case (BLOCKS.DOT_IMAGE) {\n <figure [style]=\"imageStyle(node.attrs)\">\n <img\n [alt]=\"node.attrs?.['alt']\"\n [src]=\"node.attrs?.['src']\"\n style=\"max-width: 100%; height: auto\" />\n </figure>\n }\n\n @case (BLOCKS.DOT_VIDEO) {\n <video\n [controls]=\"true\"\n preload=\"metadata\"\n [poster]=\"videoPoster(node.attrs)\"\n [width]=\"node.attrs?.['width']\"\n [height]=\"node.attrs?.['height']\">\n <track default kind=\"captions\" srclang=\"en\" />\n <source [src]=\"node.attrs?.['src']\" [type]=\"node.attrs?.['mimeType']\" />\n Your browser does not support the\n <code>video</code>\n element.\n </video>\n }\n\n @case (BLOCKS.TABLE) {\n <table>\n <thead>\n @for (rowNode of node.content?.slice(0, 1); track $index) {\n <tr>\n @for (cellNode of rowNode.content; track $index) {\n <th\n [attr.colspan]=\"cellNode.attrs?.['colspan'] || 1\"\n [attr.rowspan]=\"cellNode.attrs?.['rowspan'] || 1\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: cellNode.content }\n \" />\n </th>\n }\n </tr>\n }\n </thead>\n <tbody>\n @for (rowNode of node.content?.slice(1); track $index) {\n <tr>\n @for (cellNode of rowNode.content; track $index) {\n <td\n [attr.colspan]=\"cellNode.attrs?.['colspan'] || 1\"\n [attr.rowspan]=\"cellNode.attrs?.['rowspan'] || 1\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: cellNode.content }\n \" />\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n\n @case (BLOCKS.GRID_BLOCK) {\n <div\n data-type=\"gridBlock\"\n class=\"grid-block\"\n style=\"display: grid; grid-template-columns: repeat(12, 1fr); gap: 1rem\">\n @for (column of node.content; track $index) {\n <div\n data-type=\"gridColumn\"\n class=\"grid-block__column\"\n [style.grid-column]=\"'span ' + columnSpan(node.attrs, $index)\">\n <ng-container\n *ngTemplateOutlet=\"\n nodeList;\n context: { $implicit: column.content }\n \" />\n </div>\n }\n </div>\n }\n\n @case (BLOCKS.DOT_CONTENT) {\n <dotcms-block-editor-renderer-contentlet\n [node]=\"node\"\n [customRenderers]=\"customRenderers()\" />\n }\n\n @default {\n <dotcms-block-editor-renderer-unknown [node]=\"node\" />\n }\n }\n }\n</ng-template>\n\n<ng-template #customRender let-customRender=\"customRender\" let-node=\"node\">\n <ng-container *ngComponentOutlet=\"customRender | async; inputs: { node: node }\" />\n</ng-template>\n\n<!--\n Renders a text node and its marks as native inline elements (<strong>, <u>,\n <em>, <a>, ...) with no wrapper element. Recurses through itself (rendered as a\n comment node) one mark at a time, so stacked marks nest directly:\n <u><strong>text</strong></u>.\n-->\n<ng-template #textRun let-marks=\"marks\" let-text=\"text\">\n @switch (marks?.[0]?.type) {\n @case ('link') {\n @if (markAttrs(marks)['href']) {\n <a\n [attr.href]=\"markAttrs(marks)['href']\"\n [attr.target]=\"markAttrs(marks)['target'] || null\"\n [attr.title]=\"markAttrs(marks)['title'] || null\"\n [attr.aria-label]=\"markAttrs(marks)['aria-label'] || null\"\n [attr.rel]=\"\n markAttrs(marks)['rel'] ||\n (markAttrs(marks)['target'] === '_blank' ? 'noopener noreferrer' : null)\n \"\n [class]=\"markAttrs(marks)['class'] || null\">\n <ng-container\n *ngTemplateOutlet=\"\n textRun;\n context: { marks: restMarks(marks), text: text }\n \" />\n </a>\n } @else {\n <!--\n Malformed link mark with no href: a hrefless <a> isn't a\n link to assistive tech (no role, not focusable). Skip the\n element and recurse \u2014 any remaining marks (bold, etc.)\n still render around the text.\n -->\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n }\n }\n @case ('bold') {\n <strong>\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n </strong>\n }\n @case ('underline') {\n <u>\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n </u>\n }\n @case ('italic') {\n <em>\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n </em>\n }\n @case ('strike') {\n <s>\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n </s>\n }\n @case ('superscript') {\n <sup>\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n </sup>\n }\n @case ('subscript') {\n <sub>\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n </sub>\n }\n @default {\n @if (marks?.length) {\n <!-- Unknown mark type: skip it but keep rendering any marks beneath. -->\n <ng-container\n *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n } @else {\n {{ text }}\n }\n }\n }\n</ng-template>\n" }]
|
|
1553
|
+
}], propDecorators: { blocks: [{ type: i0.Input, args: [{ isSignal: true, alias: "blocks", required: false }] }], customRenderers: [{ type: i0.Input, args: [{ isSignal: true, alias: "customRenderers", required: false }] }], cssClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], style: [{ type: i0.Input, args: [{ isSignal: true, alias: "style", required: false }] }] } });
|
|
1554
|
+
|
|
1293
1555
|
/**
|
|
1294
1556
|
* @description This component is used to display a message when a page is missing the required `layout.body` property.
|
|
1295
1557
|
* @internal
|
|
@@ -1299,8 +1561,8 @@ class PageErrorMessageComponent {
|
|
|
1299
1561
|
ngOnInit() {
|
|
1300
1562
|
console.warn('Missing required layout.body property in page');
|
|
1301
1563
|
}
|
|
1302
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1303
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.
|
|
1564
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: PageErrorMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1565
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: PageErrorMessageComponent, isStandalone: true, selector: "dotcms-page-error-message", ngImport: i0, template: `
|
|
1304
1566
|
<div
|
|
1305
1567
|
data-testid="error-message"
|
|
1306
1568
|
style="padding: 1rem; border: 1px solid #e0e0e0; border-radius: 4px;">
|
|
@@ -1317,7 +1579,7 @@ class PageErrorMessageComponent {
|
|
|
1317
1579
|
</div>
|
|
1318
1580
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1319
1581
|
}
|
|
1320
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1582
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: PageErrorMessageComponent, decorators: [{
|
|
1321
1583
|
type: Component,
|
|
1322
1584
|
args: [{
|
|
1323
1585
|
selector: 'dotcms-page-error-message',
|
|
@@ -1356,7 +1618,23 @@ const EMPTY_DOTCMS_PAGE_STORE = {
|
|
|
1356
1618
|
*/
|
|
1357
1619
|
class DotCMSStore {
|
|
1358
1620
|
constructor() {
|
|
1359
|
-
this.$store = signal(EMPTY_DOTCMS_PAGE_STORE, ...(ngDevMode ? [{ debugName: "$store" }] : []));
|
|
1621
|
+
this.$store = signal(EMPTY_DOTCMS_PAGE_STORE, ...(ngDevMode ? [{ debugName: "$store" }] : /* istanbul ignore next */ []));
|
|
1622
|
+
/**
|
|
1623
|
+
* @description Get whether DotCMS Analytics is active on the page. Used in
|
|
1624
|
+
* live mode to decide if the minimal contentlet attributes Analytics needs
|
|
1625
|
+
* should be kept.
|
|
1626
|
+
*
|
|
1627
|
+
* Analytics may initialize after the page renders, so we track its `ready`
|
|
1628
|
+
* event as a stream and project it into a signal. `fromEvent` registers via
|
|
1629
|
+
* zone-patched `addEventListener`, so change detection is scheduled without
|
|
1630
|
+
* any manual `NgZone` handling.
|
|
1631
|
+
* @readonly
|
|
1632
|
+
* @type {Signal<boolean>}
|
|
1633
|
+
* @memberof DotCMSStore
|
|
1634
|
+
*/
|
|
1635
|
+
this.$isAnalyticsActive = typeof window === 'undefined'
|
|
1636
|
+
? signal(false)
|
|
1637
|
+
: toSignal(fromEvent(window, ANALYTICS_READY_EVENT).pipe(map(() => isDotAnalyticsActive())), { initialValue: isDotAnalyticsActive() });
|
|
1360
1638
|
/**
|
|
1361
1639
|
* @description Get if the current context is in development mode
|
|
1362
1640
|
* @readonly
|
|
@@ -1369,7 +1647,7 @@ class DotCMSStore {
|
|
|
1369
1647
|
return uveState?.mode === UVE_MODE.EDIT;
|
|
1370
1648
|
}
|
|
1371
1649
|
return this.$store()?.mode === DEVELOPMENT_MODE;
|
|
1372
|
-
}, ...(ngDevMode ? [{ debugName: "$isDevMode" }] : []));
|
|
1650
|
+
}, ...(ngDevMode ? [{ debugName: "$isDevMode" }] : /* istanbul ignore next */ []));
|
|
1373
1651
|
}
|
|
1374
1652
|
/**
|
|
1375
1653
|
* @description Get the store
|
|
@@ -1388,10 +1666,10 @@ class DotCMSStore {
|
|
|
1388
1666
|
setStore(store) {
|
|
1389
1667
|
this.$store.set(store);
|
|
1390
1668
|
}
|
|
1391
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1392
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
1669
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1670
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSStore, providedIn: 'root' }); }
|
|
1393
1671
|
}
|
|
1394
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1672
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSStore, decorators: [{
|
|
1395
1673
|
type: Injectable,
|
|
1396
1674
|
args: [{
|
|
1397
1675
|
providedIn: 'root'
|
|
@@ -1418,8 +1696,8 @@ class ContainerNotFoundComponent {
|
|
|
1418
1696
|
console.error(`Container with identifier ${this.identifier} not found`);
|
|
1419
1697
|
}
|
|
1420
1698
|
}
|
|
1421
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1422
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
1699
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ContainerNotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1700
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: ContainerNotFoundComponent, isStandalone: true, selector: "dotcms-container-not-found", inputs: { identifier: "identifier" }, ngImport: i0, template: `
|
|
1423
1701
|
@if ($isDevMode()) {
|
|
1424
1702
|
<div [attr.data-testid]="'container-not-found'" [ngStyle]="emptyContainerStyle">
|
|
1425
1703
|
This container with identifier {{ identifier }} was not found.
|
|
@@ -1427,7 +1705,7 @@ class ContainerNotFoundComponent {
|
|
|
1427
1705
|
}
|
|
1428
1706
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
|
|
1429
1707
|
}
|
|
1430
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1708
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ContainerNotFoundComponent, decorators: [{
|
|
1431
1709
|
type: Component,
|
|
1432
1710
|
args: [{
|
|
1433
1711
|
selector: 'dotcms-container-not-found',
|
|
@@ -1457,8 +1735,8 @@ class EmptyContainerComponent {
|
|
|
1457
1735
|
this.$isDevMode = this.#dotCMSStore.$isDevMode;
|
|
1458
1736
|
}
|
|
1459
1737
|
#dotCMSStore;
|
|
1460
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1461
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
1738
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: EmptyContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1739
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: EmptyContainerComponent, isStandalone: true, selector: "dotcms-empty-container", ngImport: i0, template: `
|
|
1462
1740
|
@if ($isDevMode()) {
|
|
1463
1741
|
<div [ngStyle]="emptyContainerStyle" data-testid="empty-container">
|
|
1464
1742
|
<span data-testid="empty-container-message" data-dot-object="empty-content">
|
|
@@ -1468,7 +1746,7 @@ class EmptyContainerComponent {
|
|
|
1468
1746
|
}
|
|
1469
1747
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
|
|
1470
1748
|
}
|
|
1471
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1749
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: EmptyContainerComponent, decorators: [{
|
|
1472
1750
|
type: Component,
|
|
1473
1751
|
args: [{
|
|
1474
1752
|
selector: 'dotcms-empty-container',
|
|
@@ -1495,8 +1773,8 @@ class FallbackComponent {
|
|
|
1495
1773
|
constructor() {
|
|
1496
1774
|
this.UserNoComponent = null;
|
|
1497
1775
|
}
|
|
1498
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1499
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
1776
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: FallbackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1777
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: FallbackComponent, isStandalone: true, selector: "dotcms-fallback-component", inputs: { UserNoComponent: "UserNoComponent", contentlet: "contentlet" }, ngImport: i0, template: `
|
|
1500
1778
|
@if (UserNoComponent) {
|
|
1501
1779
|
<ng-container *ngComponentOutlet="UserNoComponent | async; inputs: { contentlet }" />
|
|
1502
1780
|
} @else {
|
|
@@ -1506,7 +1784,7 @@ class FallbackComponent {
|
|
|
1506
1784
|
}
|
|
1507
1785
|
`, isInline: true, dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1508
1786
|
}
|
|
1509
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1787
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: FallbackComponent, decorators: [{
|
|
1510
1788
|
type: Component,
|
|
1511
1789
|
args: [{
|
|
1512
1790
|
selector: 'dotcms-fallback-component',
|
|
@@ -1538,43 +1816,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
1538
1816
|
*/
|
|
1539
1817
|
class ContentletComponent {
|
|
1540
1818
|
constructor() {
|
|
1541
|
-
this.dotObject = 'contentlet';
|
|
1542
1819
|
this.#dotCMSStore = inject(DotCMSStore);
|
|
1543
|
-
this.$contentlet = signal(null, ...(ngDevMode ? [{ debugName: "$contentlet" }] : []));
|
|
1544
|
-
this.$UserComponent = signal(null, ...(ngDevMode ? [{ debugName: "$UserComponent" }] : []));
|
|
1545
|
-
this.$UserNoComponent = signal(null, ...(ngDevMode ? [{ debugName: "$UserNoComponent" }] : []));
|
|
1820
|
+
this.$contentlet = signal(null, ...(ngDevMode ? [{ debugName: "$contentlet" }] : /* istanbul ignore next */ []));
|
|
1821
|
+
this.$UserComponent = signal(null, ...(ngDevMode ? [{ debugName: "$UserComponent" }] : /* istanbul ignore next */ []));
|
|
1822
|
+
this.$UserNoComponent = signal(null, ...(ngDevMode ? [{ debugName: "$UserNoComponent" }] : /* istanbul ignore next */ []));
|
|
1546
1823
|
this.$isDevMode = this.#dotCMSStore.$isDevMode;
|
|
1547
|
-
this.$
|
|
1548
|
-
this.$
|
|
1824
|
+
this.$isAnalyticsActive = this.#dotCMSStore.$isAnalyticsActive;
|
|
1825
|
+
this.$haveContent = signal(false, ...(ngDevMode ? [{ debugName: "$haveContent" }] : /* istanbul ignore next */ []));
|
|
1826
|
+
this.$style = computed(() => this.$isDevMode() && !this.$haveContent() ? { minHeight: '4rem' } : {}, ...(ngDevMode ? [{ debugName: "$style" }] : /* istanbul ignore next */ []));
|
|
1549
1827
|
this.$dotAttributes = computed(() => {
|
|
1550
1828
|
const contentlet = this.$contentlet();
|
|
1551
|
-
if (!contentlet
|
|
1829
|
+
if (!contentlet)
|
|
1552
1830
|
return {};
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
this.onNumberOfPages = null;
|
|
1562
|
-
this.styleProperties = null;
|
|
1563
|
-
this.styleAttribute = null;
|
|
1831
|
+
if (this.$isDevMode()) {
|
|
1832
|
+
return getDotContentletAttributes(contentlet, this.containerData.identifier);
|
|
1833
|
+
}
|
|
1834
|
+
if (this.$isAnalyticsActive()) {
|
|
1835
|
+
return getAnalyticsContentletAttributes(contentlet);
|
|
1836
|
+
}
|
|
1837
|
+
return {};
|
|
1838
|
+
}, ...(ngDevMode ? [{ debugName: "$dotAttributes" }] : /* istanbul ignore next */ []));
|
|
1564
1839
|
}
|
|
1565
1840
|
#dotCMSStore;
|
|
1566
1841
|
ngOnChanges() {
|
|
1567
1842
|
this.$contentlet.set(this.contentlet);
|
|
1568
1843
|
this.setupComponents();
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
this.
|
|
1576
|
-
this.styleProperties = this.$dotAttributes()['data-dot-style-properties'] || null;
|
|
1577
|
-
this.styleAttribute = this.$style();
|
|
1844
|
+
}
|
|
1845
|
+
/**
|
|
1846
|
+
* Serializes the container data for the `data-dot-container` editor attribute.
|
|
1847
|
+
* Only consumed by the host binding while in edit mode.
|
|
1848
|
+
*/
|
|
1849
|
+
getContainerAttribute() {
|
|
1850
|
+
return JSON.stringify(this.containerData);
|
|
1578
1851
|
}
|
|
1579
1852
|
ngAfterViewInit() {
|
|
1580
1853
|
this.checkContent();
|
|
@@ -1595,8 +1868,8 @@ class ContentletComponent {
|
|
|
1595
1868
|
this.$haveContent.set(hasContent);
|
|
1596
1869
|
}
|
|
1597
1870
|
}
|
|
1598
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1599
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
1871
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ContentletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1872
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: ContentletComponent, isStandalone: true, selector: "dotcms-contentlet", inputs: { contentlet: "contentlet", containerData: "containerData" }, host: { properties: { "attr.data-dot-object": "$isDevMode() ? 'contentlet' : null", "attr.data-dot-identifier": "$dotAttributes()['data-dot-identifier'] ?? null", "attr.data-dot-basetype": "$dotAttributes()['data-dot-basetype'] ?? null", "attr.data-dot-title": "$dotAttributes()['data-dot-title'] ?? null", "attr.data-dot-inode": "$dotAttributes()['data-dot-inode'] ?? null", "attr.data-dot-type": "$dotAttributes()['data-dot-type'] ?? null", "attr.data-dot-container": "$isDevMode() ? getContainerAttribute() : null", "attr.data-dot-on-number-of-pages": "$dotAttributes()['data-dot-on-number-of-pages'] ?? null", "attr.data-dot-style-properties": "$dotAttributes()['data-dot-style-properties'] ?? null", "style": "$style()" } }, viewQueries: [{ propertyName: "contentletRef", first: true, predicate: ["contentletRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
1600
1873
|
@if ($UserComponent()) {
|
|
1601
1874
|
<ng-container
|
|
1602
1875
|
*ngComponentOutlet="
|
|
@@ -1610,7 +1883,7 @@ class ContentletComponent {
|
|
|
1610
1883
|
}
|
|
1611
1884
|
`, isInline: true, dependencies: [{ kind: "component", type: FallbackComponent, selector: "dotcms-fallback-component", inputs: ["UserNoComponent", "contentlet"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1612
1885
|
}
|
|
1613
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1886
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ContentletComponent, decorators: [{
|
|
1614
1887
|
type: Component,
|
|
1615
1888
|
args: [{
|
|
1616
1889
|
selector: 'dotcms-contentlet',
|
|
@@ -1628,6 +1901,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
1628
1901
|
[contentlet]="$contentlet() ?? contentlet" />
|
|
1629
1902
|
}
|
|
1630
1903
|
`,
|
|
1904
|
+
// Editor-only metadata (data-dot-object, data-dot-container, etc.) is bound
|
|
1905
|
+
// only in edit mode. In live mode we keep the minimal set Analytics needs
|
|
1906
|
+
// via $dotAttributes (empty when Analytics is inactive).
|
|
1907
|
+
host: {
|
|
1908
|
+
'[attr.data-dot-object]': "$isDevMode() ? 'contentlet' : null",
|
|
1909
|
+
'[attr.data-dot-identifier]': "$dotAttributes()['data-dot-identifier'] ?? null",
|
|
1910
|
+
'[attr.data-dot-basetype]': "$dotAttributes()['data-dot-basetype'] ?? null",
|
|
1911
|
+
'[attr.data-dot-title]': "$dotAttributes()['data-dot-title'] ?? null",
|
|
1912
|
+
'[attr.data-dot-inode]': "$dotAttributes()['data-dot-inode'] ?? null",
|
|
1913
|
+
'[attr.data-dot-type]': "$dotAttributes()['data-dot-type'] ?? null",
|
|
1914
|
+
'[attr.data-dot-container]': '$isDevMode() ? getContainerAttribute() : null',
|
|
1915
|
+
'[attr.data-dot-on-number-of-pages]': "$dotAttributes()['data-dot-on-number-of-pages'] ?? null",
|
|
1916
|
+
'[attr.data-dot-style-properties]': "$dotAttributes()['data-dot-style-properties'] ?? null",
|
|
1917
|
+
'[style]': '$style()'
|
|
1918
|
+
},
|
|
1631
1919
|
changeDetection: ChangeDetectionStrategy.OnPush
|
|
1632
1920
|
}]
|
|
1633
1921
|
}], propDecorators: { contentlet: [{
|
|
@@ -1639,36 +1927,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
1639
1927
|
}], contentletRef: [{
|
|
1640
1928
|
type: ViewChild,
|
|
1641
1929
|
args: ['contentletRef']
|
|
1642
|
-
}], dotObject: [{
|
|
1643
|
-
type: HostBinding,
|
|
1644
|
-
args: ['attr.data-dot-object']
|
|
1645
|
-
}], identifier: [{
|
|
1646
|
-
type: HostBinding,
|
|
1647
|
-
args: ['attr.data-dot-identifier']
|
|
1648
|
-
}], basetype: [{
|
|
1649
|
-
type: HostBinding,
|
|
1650
|
-
args: ['attr.data-dot-basetype']
|
|
1651
|
-
}], title: [{
|
|
1652
|
-
type: HostBinding,
|
|
1653
|
-
args: ['attr.data-dot-title']
|
|
1654
|
-
}], inode: [{
|
|
1655
|
-
type: HostBinding,
|
|
1656
|
-
args: ['attr.data-dot-inode']
|
|
1657
|
-
}], type: [{
|
|
1658
|
-
type: HostBinding,
|
|
1659
|
-
args: ['attr.data-dot-type']
|
|
1660
|
-
}], containerAttribute: [{
|
|
1661
|
-
type: HostBinding,
|
|
1662
|
-
args: ['attr.data-dot-container']
|
|
1663
|
-
}], onNumberOfPages: [{
|
|
1664
|
-
type: HostBinding,
|
|
1665
|
-
args: ['attr.data-dot-on-number-of-pages']
|
|
1666
|
-
}], styleProperties: [{
|
|
1667
|
-
type: HostBinding,
|
|
1668
|
-
args: ['attr.data-dot-style-properties']
|
|
1669
|
-
}], styleAttribute: [{
|
|
1670
|
-
type: HostBinding,
|
|
1671
|
-
args: ['style']
|
|
1672
1930
|
}] } });
|
|
1673
1931
|
|
|
1674
1932
|
/**
|
|
@@ -1682,21 +1940,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
1682
1940
|
class ContainerComponent {
|
|
1683
1941
|
constructor() {
|
|
1684
1942
|
this.#dotCMSStore = inject(DotCMSStore);
|
|
1685
|
-
this.$containerData = signal(null, ...(ngDevMode ? [{ debugName: "$containerData" }] : []));
|
|
1686
|
-
this.$contentlets = signal([], ...(ngDevMode ? [{ debugName: "$contentlets" }] : []));
|
|
1687
|
-
this.$isEmpty = computed(() => this.$contentlets().length === 0, ...(ngDevMode ? [{ debugName: "$isEmpty" }] : []));
|
|
1943
|
+
this.$containerData = signal(null, ...(ngDevMode ? [{ debugName: "$containerData" }] : /* istanbul ignore next */ []));
|
|
1944
|
+
this.$contentlets = signal([], ...(ngDevMode ? [{ debugName: "$contentlets" }] : /* istanbul ignore next */ []));
|
|
1945
|
+
this.$isEmpty = computed(() => this.$contentlets().length === 0, ...(ngDevMode ? [{ debugName: "$isEmpty" }] : /* istanbul ignore next */ []));
|
|
1946
|
+
this.$isDevMode = this.#dotCMSStore.$isDevMode;
|
|
1688
1947
|
this.$dotAttributes = computed(() => {
|
|
1689
1948
|
const containerData = this.$containerData();
|
|
1690
|
-
if (!containerData || !this
|
|
1949
|
+
if (!containerData || !this.$isDevMode()) {
|
|
1691
1950
|
return {};
|
|
1692
1951
|
}
|
|
1693
1952
|
return getDotContainerAttributes(containerData);
|
|
1694
|
-
}, ...(ngDevMode ? [{ debugName: "$dotAttributes" }] : []));
|
|
1695
|
-
this.dotObject = 'container';
|
|
1696
|
-
this.acceptTypes = null;
|
|
1697
|
-
this.identifier = null;
|
|
1698
|
-
this.maxContentlets = null;
|
|
1699
|
-
this.uuid = null;
|
|
1953
|
+
}, ...(ngDevMode ? [{ debugName: "$dotAttributes" }] : /* istanbul ignore next */ []));
|
|
1700
1954
|
}
|
|
1701
1955
|
#dotCMSStore;
|
|
1702
1956
|
ngOnChanges() {
|
|
@@ -1706,13 +1960,9 @@ class ContainerComponent {
|
|
|
1706
1960
|
}
|
|
1707
1961
|
this.$containerData.set(getContainersData(page, this.container));
|
|
1708
1962
|
this.$contentlets.set(getContentletsInContainer(page, this.container));
|
|
1709
|
-
this.acceptTypes = this.$dotAttributes()['data-dot-accept-types'];
|
|
1710
|
-
this.identifier = this.$dotAttributes()['data-dot-identifier'];
|
|
1711
|
-
this.maxContentlets = this.$dotAttributes()['data-max-contentlets'];
|
|
1712
|
-
this.uuid = this.$dotAttributes()['data-dot-uuid'];
|
|
1713
1963
|
}
|
|
1714
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1715
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
1964
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1965
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: ContainerComponent, isStandalone: true, selector: "dotcms-container", inputs: { container: "container" }, host: { properties: { "attr.data-dot-object": "$isDevMode() ? 'container' : null", "attr.data-dot-accept-types": "$dotAttributes()['data-dot-accept-types'] ?? null", "attr.data-dot-identifier": "$dotAttributes()['data-dot-identifier'] ?? null", "attr.data-max-contentlets": "$dotAttributes()['data-max-contentlets'] ?? null", "attr.data-dot-uuid": "$dotAttributes()['data-dot-uuid'] ?? null" } }, usesOnChanges: true, ngImport: i0, template: `
|
|
1716
1966
|
@if (!$containerData()) {
|
|
1717
1967
|
<dotcms-container-not-found [identifier]="container.identifier" />
|
|
1718
1968
|
} @else if ($isEmpty()) {
|
|
@@ -1724,7 +1974,7 @@ class ContainerComponent {
|
|
|
1724
1974
|
}
|
|
1725
1975
|
`, isInline: true, dependencies: [{ kind: "component", type: ContainerNotFoundComponent, selector: "dotcms-container-not-found", inputs: ["identifier"] }, { kind: "component", type: EmptyContainerComponent, selector: "dotcms-empty-container" }, { kind: "component", type: ContentletComponent, selector: "dotcms-contentlet", inputs: ["contentlet", "containerData"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1726
1976
|
}
|
|
1727
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1977
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ContainerComponent, decorators: [{
|
|
1728
1978
|
type: Component,
|
|
1729
1979
|
args: [{
|
|
1730
1980
|
selector: 'dotcms-container',
|
|
@@ -1740,26 +1990,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
1740
1990
|
}
|
|
1741
1991
|
}
|
|
1742
1992
|
`,
|
|
1993
|
+
// Container metadata is editor-only — bound only in edit mode so it never
|
|
1994
|
+
// leaks into live output. $dotAttributes is empty outside edit mode.
|
|
1995
|
+
host: {
|
|
1996
|
+
'[attr.data-dot-object]': "$isDevMode() ? 'container' : null",
|
|
1997
|
+
'[attr.data-dot-accept-types]': "$dotAttributes()['data-dot-accept-types'] ?? null",
|
|
1998
|
+
'[attr.data-dot-identifier]': "$dotAttributes()['data-dot-identifier'] ?? null",
|
|
1999
|
+
'[attr.data-max-contentlets]': "$dotAttributes()['data-max-contentlets'] ?? null",
|
|
2000
|
+
'[attr.data-dot-uuid]': "$dotAttributes()['data-dot-uuid'] ?? null"
|
|
2001
|
+
},
|
|
1743
2002
|
changeDetection: ChangeDetectionStrategy.OnPush
|
|
1744
2003
|
}]
|
|
1745
2004
|
}], propDecorators: { container: [{
|
|
1746
2005
|
type: Input,
|
|
1747
2006
|
args: [{ required: true }]
|
|
1748
|
-
}], dotObject: [{
|
|
1749
|
-
type: HostBinding,
|
|
1750
|
-
args: ['attr.data-dot-object']
|
|
1751
|
-
}], acceptTypes: [{
|
|
1752
|
-
type: HostBinding,
|
|
1753
|
-
args: ['attr.data-dot-accept-types']
|
|
1754
|
-
}], identifier: [{
|
|
1755
|
-
type: HostBinding,
|
|
1756
|
-
args: ['attr.data-dot-identifier']
|
|
1757
|
-
}], maxContentlets: [{
|
|
1758
|
-
type: HostBinding,
|
|
1759
|
-
args: ['attr.data-max-contentlets']
|
|
1760
|
-
}], uuid: [{
|
|
1761
|
-
type: HostBinding,
|
|
1762
|
-
args: ['attr.data-dot-uuid']
|
|
1763
2007
|
}] } });
|
|
1764
2008
|
|
|
1765
2009
|
/**
|
|
@@ -1777,8 +2021,8 @@ class ColumnComponent {
|
|
|
1777
2021
|
const positionClasses = getColumnPositionClasses(this.column);
|
|
1778
2022
|
this.customClasses = combineClasses([positionClasses.startClass, positionClasses.endClass]);
|
|
1779
2023
|
}
|
|
1780
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1781
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
2024
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2025
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: ColumnComponent, isStandalone: true, selector: "dotcms-column", inputs: { column: "column" }, host: { properties: { "class": "this.customClasses" } }, usesOnChanges: true, ngImport: i0, template: `
|
|
1782
2026
|
<div [class]="column.styleClass" data-testid="dotcms-column">
|
|
1783
2027
|
@for (container of column.containers; track $index) {
|
|
1784
2028
|
<dotcms-container [container]="container" />
|
|
@@ -1786,7 +2030,7 @@ class ColumnComponent {
|
|
|
1786
2030
|
</div>
|
|
1787
2031
|
`, isInline: true, styles: [":host.col-start-1{grid-column-start:1}:host.col-start-2{grid-column-start:2}:host.col-start-3{grid-column-start:3}:host.col-start-4{grid-column-start:4}:host.col-start-5{grid-column-start:5}:host.col-start-6{grid-column-start:6}:host.col-start-7{grid-column-start:7}:host.col-start-8{grid-column-start:8}:host.col-start-9{grid-column-start:9}:host.col-start-10{grid-column-start:10}:host.col-start-11{grid-column-start:11}:host.col-start-12{grid-column-start:12}:host.col-end-1{grid-column-end:1}:host.col-end-2{grid-column-end:2}:host.col-end-3{grid-column-end:3}:host.col-end-4{grid-column-end:4}:host.col-end-5{grid-column-end:5}:host.col-end-6{grid-column-end:6}:host.col-end-7{grid-column-end:7}:host.col-end-8{grid-column-end:8}:host.col-end-9{grid-column-end:9}:host.col-end-10{grid-column-end:10}:host.col-end-11{grid-column-end:11}:host.col-end-12{grid-column-end:12}:host.col-end-13{grid-column-end:13}\n"], dependencies: [{ kind: "component", type: ContainerComponent, selector: "dotcms-container", inputs: ["container"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1788
2032
|
}
|
|
1789
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
2033
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ColumnComponent, decorators: [{
|
|
1790
2034
|
type: Component,
|
|
1791
2035
|
args: [{ selector: 'dotcms-column', imports: [ContainerComponent], template: `
|
|
1792
2036
|
<div [class]="column.styleClass" data-testid="dotcms-column">
|
|
@@ -1813,15 +2057,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
1813
2057
|
*/
|
|
1814
2058
|
class RowComponent {
|
|
1815
2059
|
constructor() {
|
|
1816
|
-
this.customClasses = signal('', ...(ngDevMode ? [{ debugName: "customClasses" }] : []));
|
|
1817
|
-
this.sectionId = signal('', ...(ngDevMode ? [{ debugName: "sectionId" }] : []));
|
|
2060
|
+
this.customClasses = signal('', ...(ngDevMode ? [{ debugName: "customClasses" }] : /* istanbul ignore next */ []));
|
|
2061
|
+
this.sectionId = signal('', ...(ngDevMode ? [{ debugName: "sectionId" }] : /* istanbul ignore next */ []));
|
|
1818
2062
|
}
|
|
1819
2063
|
ngOnChanges() {
|
|
1820
2064
|
this.customClasses.set(combineClasses(['dot-row-container', this.row.styleClass ?? '']));
|
|
1821
2065
|
this.sectionId.set(`${DOT_SECTION_ID_PREFIX}${this.sectionIndex}`);
|
|
1822
2066
|
}
|
|
1823
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1824
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
2067
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2068
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: RowComponent, isStandalone: true, selector: "dotcms-row", inputs: { row: "row", sectionIndex: "sectionIndex" }, usesOnChanges: true, ngImport: i0, template: `
|
|
1825
2069
|
<div [id]="sectionId()" [class]="customClasses()">
|
|
1826
2070
|
<div class="dot-row" data-dot-object="row" data-testid="dotcms-row">
|
|
1827
2071
|
@for (column of row.columns; track $index) {
|
|
@@ -1831,7 +2075,7 @@ class RowComponent {
|
|
|
1831
2075
|
</div>
|
|
1832
2076
|
`, isInline: true, styles: [".dot-row{display:grid;grid-template-columns:repeat(12,1fr);gap:1rem}\n"], dependencies: [{ kind: "component", type: ColumnComponent, selector: "dotcms-column", inputs: ["column"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1833
2077
|
}
|
|
1834
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
2078
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RowComponent, decorators: [{
|
|
1835
2079
|
type: Component,
|
|
1836
2080
|
args: [{ selector: 'dotcms-row', imports: [ColumnComponent], template: `
|
|
1837
2081
|
<div [id]="sectionId()" [class]="customClasses()">
|
|
@@ -1869,8 +2113,8 @@ class DotCMSLayoutBodyComponent {
|
|
|
1869
2113
|
this.mode = 'production';
|
|
1870
2114
|
this.#dotCMSStore = inject(DotCMSStore);
|
|
1871
2115
|
this.$isDevMode = this.#dotCMSStore.$isDevMode;
|
|
1872
|
-
this.$rows = signal([], ...(ngDevMode ? [{ debugName: "$rows" }] : []));
|
|
1873
|
-
this.$isEmpty = signal(false, ...(ngDevMode ? [{ debugName: "$isEmpty" }] : []));
|
|
2116
|
+
this.$rows = signal([], ...(ngDevMode ? [{ debugName: "$rows" }] : /* istanbul ignore next */ []));
|
|
2117
|
+
this.$isEmpty = signal(false, ...(ngDevMode ? [{ debugName: "$isEmpty" }] : /* istanbul ignore next */ []));
|
|
1874
2118
|
}
|
|
1875
2119
|
#dotCMSStore;
|
|
1876
2120
|
ngOnChanges() {
|
|
@@ -1882,8 +2126,8 @@ class DotCMSLayoutBodyComponent {
|
|
|
1882
2126
|
this.$isEmpty.set(!this.page?.layout?.body);
|
|
1883
2127
|
this.$rows.set(this.page?.layout?.body?.rows ?? []);
|
|
1884
2128
|
}
|
|
1885
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1886
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
2129
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSLayoutBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2130
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DotCMSLayoutBodyComponent, isStandalone: true, selector: "dotcms-layout-body", inputs: { page: "page", components: "components", mode: "mode" }, providers: [DotCMSStore], usesOnChanges: true, ngImport: i0, template: `
|
|
1887
2131
|
@if ($isEmpty() && $isDevMode()) {
|
|
1888
2132
|
<dotcms-page-error-message />
|
|
1889
2133
|
} @else {
|
|
@@ -1893,7 +2137,7 @@ class DotCMSLayoutBodyComponent {
|
|
|
1893
2137
|
}
|
|
1894
2138
|
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: PageErrorMessageComponent, selector: "dotcms-page-error-message" }, { kind: "component", type: RowComponent, selector: "dotcms-row", inputs: ["row", "sectionIndex"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1895
2139
|
}
|
|
1896
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
2140
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSLayoutBodyComponent, decorators: [{
|
|
1897
2141
|
type: Component,
|
|
1898
2142
|
args: [{ selector: 'dotcms-layout-body', imports: [PageErrorMessageComponent, RowComponent], providers: [DotCMSStore], template: `
|
|
1899
2143
|
@if ($isEmpty() && $isDevMode()) {
|
|
@@ -1994,10 +2238,10 @@ class DotCMSEditablePageService {
|
|
|
1994
2238
|
});
|
|
1995
2239
|
return unsubscribe;
|
|
1996
2240
|
}
|
|
1997
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1998
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
2241
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSEditablePageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2242
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSEditablePageService, providedIn: 'root' }); }
|
|
1999
2243
|
}
|
|
2000
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
2244
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSEditablePageService, decorators: [{
|
|
2001
2245
|
type: Injectable,
|
|
2002
2246
|
args: [{
|
|
2003
2247
|
providedIn: 'root'
|
|
@@ -2008,5 +2252,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
|
|
|
2008
2252
|
* Generated bundle index. Do not edit.
|
|
2009
2253
|
*/
|
|
2010
2254
|
|
|
2011
|
-
export { DotCMSBlockEditorRendererComponent, DotCMSClient, DotCMSEditablePageService, DotCMSEditableTextComponent, DotCMSLayoutBodyComponent, DotCMSShowWhenDirective, provideDotCMSClient, provideDotCMSImageLoader };
|
|
2255
|
+
export { DotCMSBlockEditorRendererComponent, DotCMSBlockEditorRendererNativeComponent, DotCMSClient, DotCMSEditablePageService, DotCMSEditableTextComponent, DotCMSLayoutBodyComponent, DotCMSShowWhenDirective, provideDotCMSClient, provideDotCMSImageLoader };
|
|
2012
2256
|
//# sourceMappingURL=dotcms-angular.mjs.map
|