@dotcms/angular 1.5.5-next.2180 → 1.5.5-next.2253

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.
@@ -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.1", ngImport: i0, type: DotCMSShowWhenDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
48
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.1", type: DotCMSShowWhenDirective, isStandalone: true, selector: "[dotCMSShowWhen]", inputs: { dotCMSShowWhen: "dotCMSShowWhen" }, ngImport: i0 }); }
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.1", ngImport: i0, type: DotCMSShowWhenDirective, decorators: [{
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]'
@@ -408,8 +409,8 @@ class DotCMSEditableTextComponent {
408
409
  didContentChange(editedContent) {
409
410
  return this.content !== editedContent;
410
411
  }
411
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSEditableTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
412
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: DotCMSEditableTextComponent, isStandalone: true, selector: "dotcms-editable-text", inputs: { mode: "mode", format: "format", contentlet: "contentlet", fieldName: "fieldName" }, host: { listeners: { "window:message": "onMessage($event)" } }, providers: [
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: [
413
414
  {
414
415
  provide: TINYMCE_SCRIPT_SRC,
415
416
  useFactory: () => {
@@ -419,7 +420,7 @@ class DotCMSEditableTextComponent {
419
420
  }
420
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"] }] }); }
421
422
  }
422
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSEditableTextComponent, decorators: [{
423
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSEditableTextComponent, decorators: [{
423
424
  type: Component,
424
425
  args: [{ selector: 'dotcms-editable-text', imports: [EditorComponent], providers: [
425
426
  {
@@ -447,8 +448,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
447
448
  }] } });
448
449
 
449
450
  class DotCodeBlock {
450
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCodeBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
451
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: DotCodeBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-code-block", ngImport: i0, template: `
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: `
452
453
  <pre>
453
454
  <code>
454
455
  <ng-content />
@@ -456,7 +457,7 @@ class DotCodeBlock {
456
457
  </pre>
457
458
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
458
459
  }
459
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCodeBlock, decorators: [{
460
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCodeBlock, decorators: [{
460
461
  type: Component,
461
462
  args: [{
462
463
  selector: 'dotcms-block-editor-renderer-code-block',
@@ -471,14 +472,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
471
472
  }]
472
473
  }] });
473
474
  class DotBlockQuote {
474
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotBlockQuote, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
475
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: DotBlockQuote, isStandalone: true, selector: "dotcms-block-editor-renderer-block-quote", ngImport: i0, template: `
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: `
476
477
  <blockquote>
477
478
  <ng-content />
478
479
  </blockquote>
479
480
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
480
481
  }
481
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotBlockQuote, decorators: [{
482
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotBlockQuote, decorators: [{
482
483
  type: Component,
483
484
  args: [{
484
485
  selector: 'dotcms-block-editor-renderer-block-quote',
@@ -503,8 +504,8 @@ class NoComponentProvided {
503
504
  border: '1px solid #ed8936'
504
505
  };
505
506
  }
506
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: NoComponentProvided, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
507
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: NoComponentProvided, isStandalone: true, selector: "dotcms-no-component-provided", inputs: { contentType: "contentType" }, ngImport: i0, template: `
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: `
508
509
  <div data-testid="no-component-provided" [style]="style">
509
510
  <strong style="color: #c05621">Dev Warning</strong>
510
511
  : No component or custom renderer provided for content type
@@ -523,7 +524,7 @@ class NoComponentProvided {
523
524
  </div>
524
525
  `, isInline: true }); }
525
526
  }
526
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: NoComponentProvided, decorators: [{
527
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NoComponentProvided, decorators: [{
527
528
  type: Component,
528
529
  args: [{
529
530
  selector: 'dotcms-no-component-provided',
@@ -554,7 +555,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
554
555
  */
555
556
  class DotContentletBlock {
556
557
  constructor() {
557
- this.$data = computed(() => this.node?.attrs?.['data'], ...(ngDevMode ? [{ debugName: "$data" }] : []));
558
+ this.$data = computed(() => this.node?.attrs?.['data'], ...(ngDevMode ? [{ debugName: "$data" }] : /* istanbul ignore next */ []));
558
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.';
559
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.`;
560
561
  }
@@ -572,8 +573,8 @@ class DotContentletBlock {
572
573
  console.warn(this.DOT_CONTENT_NO_MATCHING_COMPONENT_MESSAGE(contentType));
573
574
  }
574
575
  }
575
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotContentletBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
576
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: DotContentletBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-contentlet", inputs: { customRenderers: "customRenderers", node: "node" }, ngImport: i0, template: `
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: `
577
578
  @if (contentComponent) {
578
579
  <ng-container *ngComponentOutlet="contentComponent | async; inputs: { node: node }" />
579
580
  } @else if (isDevMode) {
@@ -581,7 +582,7 @@ class DotContentletBlock {
581
582
  }
582
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 }); }
583
584
  }
584
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotContentletBlock, decorators: [{
585
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotContentletBlock, decorators: [{
585
586
  type: Component,
586
587
  args: [{
587
588
  selector: 'dotcms-block-editor-renderer-contentlet',
@@ -614,8 +615,8 @@ class DotGridBlock {
614
615
  ? rawCols
615
616
  : [6, 6];
616
617
  }
617
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotGridBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
618
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: DotGridBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-grid-block", inputs: { node: "node", customRenderers: "customRenderers" }, ngImport: i0, template: `
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: `
619
620
  <div
620
621
  data-type="gridBlock"
621
622
  class="grid-block"
@@ -637,7 +638,7 @@ class DotGridBlock {
637
638
  </div>
638
639
  `, isInline: true, dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }] }); }
639
640
  }
640
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotGridBlock, decorators: [{
641
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotGridBlock, decorators: [{
641
642
  type: Component,
642
643
  args: [{
643
644
  selector: 'dotcms-block-editor-renderer-grid-block',
@@ -672,7 +673,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
672
673
 
673
674
  class DotImageBlock {
674
675
  constructor() {
675
- this.$srcURL = computed(() => this.attrs?.['src'], ...(ngDevMode ? [{ debugName: "$srcURL" }] : []));
676
+ this.$srcURL = computed(() => this.attrs?.['src'], ...(ngDevMode ? [{ debugName: "$srcURL" }] : /* istanbul ignore next */ []));
676
677
  this.$wrapperStyle = computed(() => {
677
678
  const textWrap = this.attrs?.['textWrap'];
678
679
  const textAlign = this.attrs?.['textAlign'];
@@ -686,16 +687,16 @@ class DotImageBlock {
686
687
  return { 'text-align': textAlign };
687
688
  }
688
689
  return {};
689
- }, ...(ngDevMode ? [{ debugName: "$wrapperStyle" }] : []));
690
+ }, ...(ngDevMode ? [{ debugName: "$wrapperStyle" }] : /* istanbul ignore next */ []));
690
691
  }
691
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotImageBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
692
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: DotImageBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-image", inputs: { attrs: "attrs" }, ngImport: i0, template: `
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: `
693
694
  <figure [style]="$wrapperStyle()">
694
695
  <img [alt]="attrs?.['alt']" [src]="$srcURL()" />
695
696
  </figure>
696
697
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
697
698
  }
698
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotImageBlock, decorators: [{
699
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotImageBlock, decorators: [{
699
700
  type: Component,
700
701
  args: [{
701
702
  selector: 'dotcms-block-editor-renderer-image',
@@ -712,14 +713,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
712
713
  }] } });
713
714
 
714
715
  class DotBulletList {
715
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotBulletList, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
716
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: DotBulletList, isStandalone: true, selector: "dotcms-block-editor-renderer-bullet-list", ngImport: i0, template: `
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: `
717
718
  <ul>
718
719
  <ng-content />
719
720
  </ul>
720
721
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
721
722
  }
722
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotBulletList, decorators: [{
723
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotBulletList, decorators: [{
723
724
  type: Component,
724
725
  args: [{
725
726
  selector: 'dotcms-block-editor-renderer-bullet-list',
@@ -732,14 +733,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
732
733
  }]
733
734
  }] });
734
735
  class DotOrdererList {
735
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotOrdererList, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
736
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: DotOrdererList, isStandalone: true, selector: "dotcms-block-editor-renderer-ordered-list", ngImport: i0, template: `
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: `
737
738
  <ol>
738
739
  <ng-content />
739
740
  </ol>
740
741
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
741
742
  }
742
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotOrdererList, decorators: [{
743
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotOrdererList, decorators: [{
743
744
  type: Component,
744
745
  args: [{
745
746
  selector: 'dotcms-block-editor-renderer-ordered-list',
@@ -752,14 +753,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
752
753
  }]
753
754
  }] });
754
755
  class DotListItem {
755
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotListItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
756
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: DotListItem, isStandalone: true, selector: "dotcms-block-editor-renderer-list-item", ngImport: i0, template: `
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: `
757
758
  <li>
758
759
  <ng-content />
759
760
  </li>
760
761
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
761
762
  }
762
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotListItem, decorators: [{
763
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotListItem, decorators: [{
763
764
  type: Component,
764
765
  args: [{
765
766
  selector: 'dotcms-block-editor-renderer-list-item',
@@ -776,8 +777,8 @@ class DotTableBlock {
776
777
  constructor() {
777
778
  this.blockEditorItem = DotCMSBlockEditorItemComponent;
778
779
  }
779
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotTableBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
780
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: DotTableBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-table", inputs: { content: "content", attrs: "attrs" }, ngImport: i0, template: `
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: `
781
782
  <table
782
783
  [attr.aria-label]="attrs?.['ariaLabel'] || null"
783
784
  [attr.aria-labelledby]="attrs?.['ariaLabelledby'] || null">
@@ -822,7 +823,7 @@ class DotTableBlock {
822
823
  </table>
823
824
  `, isInline: true, dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }] }); }
824
825
  }
825
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotTableBlock, decorators: [{
826
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotTableBlock, decorators: [{
826
827
  type: Component,
827
828
  args: [{
828
829
  selector: 'dotcms-block-editor-renderer-table',
@@ -879,14 +880,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
879
880
  }] } });
880
881
 
881
882
  class DotParagraphBlock {
882
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotParagraphBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
883
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: DotParagraphBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-paragraph", ngImport: i0, template: `
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: `
884
885
  <p>
885
886
  <ng-content />
886
887
  </p>
887
888
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
888
889
  }
889
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotParagraphBlock, decorators: [{
890
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotParagraphBlock, decorators: [{
890
891
  type: Component,
891
892
  args: [{
892
893
  selector: 'dotcms-block-editor-renderer-paragraph',
@@ -900,15 +901,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
900
901
  }] });
901
902
  class DotHeadingBlock {
902
903
  constructor() {
903
- this.level = input.required(...(ngDevMode ? [{ debugName: "level" }] : []));
904
+ this.level = input.required(...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
904
905
  this.$normalizedLevel = computed(() => {
905
906
  return this.level() != null && typeof this.level() === 'number'
906
907
  ? String(this.level())
907
908
  : (this.level() ?? '1');
908
- }, ...(ngDevMode ? [{ debugName: "$normalizedLevel" }] : []));
909
+ }, ...(ngDevMode ? [{ debugName: "$normalizedLevel" }] : /* istanbul ignore next */ []));
909
910
  }
910
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotHeadingBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
911
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", 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: `
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: `
912
913
  @switch ($normalizedLevel()) {
913
914
  @case ('1') {
914
915
  <h1>
@@ -952,7 +953,7 @@ class DotHeadingBlock {
952
953
  </ng-template>
953
954
  `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
954
955
  }
955
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotHeadingBlock, decorators: [{
956
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotHeadingBlock, decorators: [{
956
957
  type: Component,
957
958
  args: [{
958
959
  selector: 'dotcms-block-editor-renderer-heading',
@@ -1007,7 +1008,7 @@ class DotTextBlock {
1007
1008
  constructor() {
1008
1009
  this.marks = [];
1009
1010
  this.text = '';
1010
- this.$remainingMarks = computed(() => this.marks?.slice(1), ...(ngDevMode ? [{ debugName: "$remainingMarks" }] : []));
1011
+ this.$remainingMarks = computed(() => this.marks?.slice(1), ...(ngDevMode ? [{ debugName: "$remainingMarks" }] : /* istanbul ignore next */ []));
1011
1012
  this.$currentAttrs = computed(() => {
1012
1013
  const attrs = { ...(this.marks?.[0]?.attrs || {}) };
1013
1014
  if (attrs['class']) {
@@ -1015,10 +1016,10 @@ class DotTextBlock {
1015
1016
  delete attrs['class'];
1016
1017
  }
1017
1018
  return attrs;
1018
- }, ...(ngDevMode ? [{ debugName: "$currentAttrs" }] : []));
1019
+ }, ...(ngDevMode ? [{ debugName: "$currentAttrs" }] : /* istanbul ignore next */ []));
1019
1020
  }
1020
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotTextBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1021
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: DotTextBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-text", inputs: { marks: "marks", text: "text" }, ngImport: i0, template: `
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: `
1022
1023
  @switch (marks?.[0]?.type) {
1023
1024
  @case ('link') {
1024
1025
  <a
@@ -1066,7 +1067,7 @@ class DotTextBlock {
1066
1067
  }
1067
1068
  `, isInline: true, dependencies: [{ kind: "component", type: DotTextBlock, selector: "dotcms-block-editor-renderer-text", inputs: ["marks", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1068
1069
  }
1069
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotTextBlock, decorators: [{
1070
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotTextBlock, decorators: [{
1070
1071
  type: Component,
1071
1072
  args: [{
1072
1073
  selector: 'dotcms-block-editor-renderer-text',
@@ -1140,8 +1141,8 @@ class DotUnknownBlockComponent {
1140
1141
  get isEditMode() {
1141
1142
  return getUVEState()?.mode === UVE_MODE.EDIT;
1142
1143
  }
1143
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotUnknownBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1144
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: DotUnknownBlockComponent, isStandalone: true, selector: "dotcms-block-editor-renderer-unknown", inputs: { node: "node" }, ngImport: i0, template: `
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: `
1145
1146
  @if (isEditMode) {
1146
1147
  <div [style]="style" data-testid="unknown-block-type">
1147
1148
  <strong style="color: #c53030">Warning:</strong>
@@ -1159,7 +1160,7 @@ class DotUnknownBlockComponent {
1159
1160
  }
1160
1161
  `, isInline: true }); }
1161
1162
  }
1162
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotUnknownBlockComponent, decorators: [{
1163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotUnknownBlockComponent, decorators: [{
1163
1164
  type: Component,
1164
1165
  args: [{
1165
1166
  selector: 'dotcms-block-editor-renderer-unknown',
@@ -1187,11 +1188,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1187
1188
 
1188
1189
  class DotVideoBlock {
1189
1190
  constructor() {
1190
- this.$srcURL = computed(() => this.attrs?.['src'], ...(ngDevMode ? [{ debugName: "$srcURL" }] : []));
1191
- 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 */ []));
1192
1193
  }
1193
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotVideoBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1194
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: DotVideoBlock, isStandalone: true, selector: "dotcms-block-editor-renderer-video", inputs: { attrs: "attrs" }, ngImport: i0, template: `
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: `
1195
1196
  <video
1196
1197
  [controls]="true"
1197
1198
  preload="metadata"
@@ -1206,7 +1207,7 @@ class DotVideoBlock {
1206
1207
  </video>
1207
1208
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1208
1209
  }
1209
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotVideoBlock, decorators: [{
1210
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotVideoBlock, decorators: [{
1210
1211
  type: Component,
1211
1212
  args: [{
1212
1213
  selector: 'dotcms-block-editor-renderer-video',
@@ -1234,10 +1235,10 @@ class DotCMSBlockEditorItemComponent {
1234
1235
  constructor() {
1235
1236
  this.BLOCKS = BlockEditorDefaultBlocks;
1236
1237
  }
1237
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSBlockEditorItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1238
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", 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" }] }); }
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" }] }); }
1239
1240
  }
1240
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSBlockEditorItemComponent, decorators: [{
1241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSBlockEditorItemComponent, decorators: [{
1241
1242
  type: Component,
1242
1243
  args: [{ selector: 'dotcms-block-editor-renderer-block', imports: [
1243
1244
  NgTemplateOutlet,
@@ -1291,8 +1292,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1291
1292
  */
1292
1293
  class DotCMSBlockEditorRendererComponent {
1293
1294
  constructor() {
1294
- this.$blockEditorState = signal({ error: null }, ...(ngDevMode ? [{ debugName: "$blockEditorState" }] : []));
1295
- 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 */ []));
1296
1297
  }
1297
1298
  ngOnInit() {
1298
1299
  const state = isValidBlocks(this.blocks);
@@ -1301,10 +1302,10 @@ class DotCMSBlockEditorRendererComponent {
1301
1302
  }
1302
1303
  this.$blockEditorState.set(isValidBlocks(this.blocks));
1303
1304
  }
1304
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSBlockEditorRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1305
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", 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"] }] }); }
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"] }] }); }
1306
1307
  }
1307
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSBlockEditorRendererComponent, decorators: [{
1308
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSBlockEditorRendererComponent, decorators: [{
1308
1309
  type: Component,
1309
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" }]
1310
1311
  }], propDecorators: { blocks: [{
@@ -1332,12 +1333,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1332
1333
  * @internal
1333
1334
  */
1334
1335
  class DotSemanticBulletList {
1335
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotSemanticBulletList, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1336
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: DotSemanticBulletList, isStandalone: true, selector: "ul[dotBulletList]", ngImport: i0, template: `
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: `
1337
1338
  <ng-content />
1338
1339
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1339
1340
  }
1340
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotSemanticBulletList, decorators: [{
1341
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticBulletList, decorators: [{
1341
1342
  type: Component,
1342
1343
  args: [{
1343
1344
  selector: 'ul[dotBulletList]',
@@ -1348,12 +1349,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1348
1349
  }]
1349
1350
  }] });
1350
1351
  class DotSemanticOrderedList {
1351
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotSemanticOrderedList, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1352
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: DotSemanticOrderedList, isStandalone: true, selector: "ol[dotOrderedList]", ngImport: i0, template: `
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: `
1353
1354
  <ng-content />
1354
1355
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1355
1356
  }
1356
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotSemanticOrderedList, decorators: [{
1357
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticOrderedList, decorators: [{
1357
1358
  type: Component,
1358
1359
  args: [{
1359
1360
  selector: 'ol[dotOrderedList]',
@@ -1364,12 +1365,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1364
1365
  }]
1365
1366
  }] });
1366
1367
  class DotSemanticListItem {
1367
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotSemanticListItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1368
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: DotSemanticListItem, isStandalone: true, selector: "li[dotListItem]", ngImport: i0, template: `
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: `
1369
1370
  <ng-content />
1370
1371
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1371
1372
  }
1372
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotSemanticListItem, decorators: [{
1373
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticListItem, decorators: [{
1373
1374
  type: Component,
1374
1375
  args: [{
1375
1376
  selector: 'li[dotListItem]',
@@ -1380,12 +1381,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1380
1381
  }]
1381
1382
  }] });
1382
1383
  class DotSemanticParagraph {
1383
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotSemanticParagraph, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1384
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: DotSemanticParagraph, isStandalone: true, selector: "p[dotParagraph]", ngImport: i0, template: `
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: `
1385
1386
  <ng-content />
1386
1387
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1387
1388
  }
1388
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotSemanticParagraph, decorators: [{
1389
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticParagraph, decorators: [{
1389
1390
  type: Component,
1390
1391
  args: [{
1391
1392
  selector: 'p[dotParagraph]',
@@ -1396,12 +1397,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1396
1397
  }]
1397
1398
  }] });
1398
1399
  class DotSemanticBlockQuote {
1399
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotSemanticBlockQuote, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1400
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: DotSemanticBlockQuote, isStandalone: true, selector: "blockquote[dotBlockQuote]", ngImport: i0, template: `
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: `
1401
1402
  <ng-content />
1402
1403
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1403
1404
  }
1404
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotSemanticBlockQuote, decorators: [{
1405
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticBlockQuote, decorators: [{
1405
1406
  type: Component,
1406
1407
  args: [{
1407
1408
  selector: 'blockquote[dotBlockQuote]',
@@ -1412,12 +1413,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1412
1413
  }]
1413
1414
  }] });
1414
1415
  class DotSemanticCodeBlock {
1415
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotSemanticCodeBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1416
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: DotSemanticCodeBlock, isStandalone: true, selector: "pre[dotCodeBlock]", ngImport: i0, template: `
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: `
1417
1418
  <code><ng-content /></code>
1418
1419
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1419
1420
  }
1420
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotSemanticCodeBlock, decorators: [{
1421
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotSemanticCodeBlock, decorators: [{
1421
1422
  type: Component,
1422
1423
  args: [{
1423
1424
  selector: 'pre[dotCodeBlock]',
@@ -1455,18 +1456,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1455
1456
  class DotCMSBlockEditorRendererNativeComponent {
1456
1457
  constructor() {
1457
1458
  /** The Block Editor `doc` node to render. */
1458
- this.blocks = input(...(ngDevMode ? [undefined, { debugName: "blocks" }] : []));
1459
+ this.blocks = input(...(ngDevMode ? [undefined, { debugName: "blocks" }] : /* istanbul ignore next */ []));
1459
1460
  /** Map of `node.type` → component to override the built-in render path. */
1460
- this.customRenderers = input(undefined, ...(ngDevMode ? [{ debugName: "customRenderers" }] : []));
1461
+ this.customRenderers = input(undefined, ...(ngDevMode ? [{ debugName: "customRenderers" }] : /* istanbul ignore next */ []));
1461
1462
  /**
1462
1463
  * CSS class on the wrapper element. Aliased as `class` so consumers can
1463
1464
  * pass `[class]="…"` like a normal Angular class binding.
1464
1465
  */
1465
- this.cssClass = input(undefined, { ...(ngDevMode ? { debugName: "cssClass" } : {}), alias: 'class' });
1466
+ this.cssClass = input(undefined, { ...(ngDevMode ? { debugName: "cssClass" } : /* istanbul ignore next */ {}), alias: 'class' });
1466
1467
  /** Inline style on the wrapper element. */
1467
- this.style = input(undefined, ...(ngDevMode ? [{ debugName: "style" }] : []));
1468
- this.$blockEditorState = signal({ error: null }, ...(ngDevMode ? [{ debugName: "$blockEditorState" }] : []));
1469
- this.$isInEditMode = signal(getUVEState()?.mode === UVE_MODE.EDIT, ...(ngDevMode ? [{ debugName: "$isInEditMode" }] : []));
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 */ []));
1470
1471
  this.BLOCKS = BlockEditorDefaultBlocks;
1471
1472
  }
1472
1473
  ngOnInit() {
@@ -1531,10 +1532,10 @@ class DotCMSBlockEditorRendererNativeComponent {
1531
1532
  const span = valid ? rawCols[index] : 6;
1532
1533
  return typeof span === 'number' ? span : 6;
1533
1534
  }
1534
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSBlockEditorRendererNativeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1535
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", 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 }); }
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 }); }
1536
1537
  }
1537
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSBlockEditorRendererNativeComponent, decorators: [{
1538
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSBlockEditorRendererNativeComponent, decorators: [{
1538
1539
  type: Component,
1539
1540
  args: [{ selector: 'dotcms-block-editor-renderer-native', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
1540
1541
  NgTemplateOutlet,
@@ -1560,8 +1561,8 @@ class PageErrorMessageComponent {
1560
1561
  ngOnInit() {
1561
1562
  console.warn('Missing required layout.body property in page');
1562
1563
  }
1563
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PageErrorMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1564
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: PageErrorMessageComponent, isStandalone: true, selector: "dotcms-page-error-message", ngImport: i0, template: `
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: `
1565
1566
  <div
1566
1567
  data-testid="error-message"
1567
1568
  style="padding: 1rem; border: 1px solid #e0e0e0; border-radius: 4px;">
@@ -1578,7 +1579,7 @@ class PageErrorMessageComponent {
1578
1579
  </div>
1579
1580
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1580
1581
  }
1581
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PageErrorMessageComponent, decorators: [{
1582
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: PageErrorMessageComponent, decorators: [{
1582
1583
  type: Component,
1583
1584
  args: [{
1584
1585
  selector: 'dotcms-page-error-message',
@@ -1617,7 +1618,23 @@ const EMPTY_DOTCMS_PAGE_STORE = {
1617
1618
  */
1618
1619
  class DotCMSStore {
1619
1620
  constructor() {
1620
- 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() });
1621
1638
  /**
1622
1639
  * @description Get if the current context is in development mode
1623
1640
  * @readonly
@@ -1630,7 +1647,7 @@ class DotCMSStore {
1630
1647
  return uveState?.mode === UVE_MODE.EDIT;
1631
1648
  }
1632
1649
  return this.$store()?.mode === DEVELOPMENT_MODE;
1633
- }, ...(ngDevMode ? [{ debugName: "$isDevMode" }] : []));
1650
+ }, ...(ngDevMode ? [{ debugName: "$isDevMode" }] : /* istanbul ignore next */ []));
1634
1651
  }
1635
1652
  /**
1636
1653
  * @description Get the store
@@ -1649,10 +1666,10 @@ class DotCMSStore {
1649
1666
  setStore(store) {
1650
1667
  this.$store.set(store);
1651
1668
  }
1652
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1653
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSStore, providedIn: 'root' }); }
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' }); }
1654
1671
  }
1655
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSStore, decorators: [{
1672
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSStore, decorators: [{
1656
1673
  type: Injectable,
1657
1674
  args: [{
1658
1675
  providedIn: 'root'
@@ -1679,8 +1696,8 @@ class ContainerNotFoundComponent {
1679
1696
  console.error(`Container with identifier ${this.identifier} not found`);
1680
1697
  }
1681
1698
  }
1682
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ContainerNotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1683
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: ContainerNotFoundComponent, isStandalone: true, selector: "dotcms-container-not-found", inputs: { identifier: "identifier" }, ngImport: i0, template: `
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: `
1684
1701
  @if ($isDevMode()) {
1685
1702
  <div [attr.data-testid]="'container-not-found'" [ngStyle]="emptyContainerStyle">
1686
1703
  This container with identifier {{ identifier }} was not found.
@@ -1688,7 +1705,7 @@ class ContainerNotFoundComponent {
1688
1705
  }
1689
1706
  `, isInline: true, dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
1690
1707
  }
1691
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ContainerNotFoundComponent, decorators: [{
1708
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ContainerNotFoundComponent, decorators: [{
1692
1709
  type: Component,
1693
1710
  args: [{
1694
1711
  selector: 'dotcms-container-not-found',
@@ -1718,8 +1735,8 @@ class EmptyContainerComponent {
1718
1735
  this.$isDevMode = this.#dotCMSStore.$isDevMode;
1719
1736
  }
1720
1737
  #dotCMSStore;
1721
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: EmptyContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1722
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: EmptyContainerComponent, isStandalone: true, selector: "dotcms-empty-container", ngImport: i0, template: `
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: `
1723
1740
  @if ($isDevMode()) {
1724
1741
  <div [ngStyle]="emptyContainerStyle" data-testid="empty-container">
1725
1742
  <span data-testid="empty-container-message" data-dot-object="empty-content">
@@ -1729,7 +1746,7 @@ class EmptyContainerComponent {
1729
1746
  }
1730
1747
  `, isInline: true, dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
1731
1748
  }
1732
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: EmptyContainerComponent, decorators: [{
1749
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: EmptyContainerComponent, decorators: [{
1733
1750
  type: Component,
1734
1751
  args: [{
1735
1752
  selector: 'dotcms-empty-container',
@@ -1756,8 +1773,8 @@ class FallbackComponent {
1756
1773
  constructor() {
1757
1774
  this.UserNoComponent = null;
1758
1775
  }
1759
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: FallbackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1760
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: FallbackComponent, isStandalone: true, selector: "dotcms-fallback-component", inputs: { UserNoComponent: "UserNoComponent", contentlet: "contentlet" }, ngImport: i0, template: `
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: `
1761
1778
  @if (UserNoComponent) {
1762
1779
  <ng-container *ngComponentOutlet="UserNoComponent | async; inputs: { contentlet }" />
1763
1780
  } @else {
@@ -1767,7 +1784,7 @@ class FallbackComponent {
1767
1784
  }
1768
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 }); }
1769
1786
  }
1770
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: FallbackComponent, decorators: [{
1787
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: FallbackComponent, decorators: [{
1771
1788
  type: Component,
1772
1789
  args: [{
1773
1790
  selector: 'dotcms-fallback-component',
@@ -1799,43 +1816,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1799
1816
  */
1800
1817
  class ContentletComponent {
1801
1818
  constructor() {
1802
- this.dotObject = 'contentlet';
1803
1819
  this.#dotCMSStore = inject(DotCMSStore);
1804
- this.$contentlet = signal(null, ...(ngDevMode ? [{ debugName: "$contentlet" }] : []));
1805
- this.$UserComponent = signal(null, ...(ngDevMode ? [{ debugName: "$UserComponent" }] : []));
1806
- 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 */ []));
1807
1823
  this.$isDevMode = this.#dotCMSStore.$isDevMode;
1808
- this.$haveContent = signal(false, ...(ngDevMode ? [{ debugName: "$haveContent" }] : []));
1809
- this.$style = computed(() => this.$isDevMode() && !this.$haveContent() ? { minHeight: '4rem' } : {}, ...(ngDevMode ? [{ debugName: "$style" }] : []));
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 */ []));
1810
1827
  this.$dotAttributes = computed(() => {
1811
1828
  const contentlet = this.$contentlet();
1812
- if (!contentlet || !this.$isDevMode())
1829
+ if (!contentlet)
1813
1830
  return {};
1814
- return getDotContentletAttributes(contentlet, this.containerData.identifier);
1815
- }, ...(ngDevMode ? [{ debugName: "$dotAttributes" }] : []));
1816
- this.identifier = null;
1817
- this.basetype = null;
1818
- this.title = null;
1819
- this.inode = null;
1820
- this.type = null;
1821
- this.containerAttribute = null;
1822
- this.onNumberOfPages = null;
1823
- this.styleProperties = null;
1824
- 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 */ []));
1825
1839
  }
1826
1840
  #dotCMSStore;
1827
1841
  ngOnChanges() {
1828
1842
  this.$contentlet.set(this.contentlet);
1829
1843
  this.setupComponents();
1830
- this.identifier = this.$dotAttributes()['data-dot-identifier'];
1831
- this.basetype = this.$dotAttributes()['data-dot-basetype'];
1832
- this.title = this.$dotAttributes()['data-dot-title'];
1833
- this.inode = this.$dotAttributes()['data-dot-inode'];
1834
- this.type = this.$dotAttributes()['data-dot-type'];
1835
- this.containerAttribute = JSON.stringify(this.containerData);
1836
- this.onNumberOfPages = this.$dotAttributes()['data-dot-on-number-of-pages'];
1837
- this.styleProperties = this.$dotAttributes()['data-dot-style-properties'] || null;
1838
- 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);
1839
1851
  }
1840
1852
  ngAfterViewInit() {
1841
1853
  this.checkContent();
@@ -1856,8 +1868,8 @@ class ContentletComponent {
1856
1868
  this.$haveContent.set(hasContent);
1857
1869
  }
1858
1870
  }
1859
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ContentletComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1860
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: ContentletComponent, isStandalone: true, selector: "dotcms-contentlet", inputs: { contentlet: "contentlet", containerData: "containerData" }, host: { properties: { "attr.data-dot-object": "this.dotObject", "attr.data-dot-identifier": "this.identifier", "attr.data-dot-basetype": "this.basetype", "attr.data-dot-title": "this.title", "attr.data-dot-inode": "this.inode", "attr.data-dot-type": "this.type", "attr.data-dot-container": "this.containerAttribute", "attr.data-dot-on-number-of-pages": "this.onNumberOfPages", "attr.data-dot-style-properties": "this.styleProperties", "style": "this.styleAttribute" } }, viewQueries: [{ propertyName: "contentletRef", first: true, predicate: ["contentletRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
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: `
1861
1873
  @if ($UserComponent()) {
1862
1874
  <ng-container
1863
1875
  *ngComponentOutlet="
@@ -1871,7 +1883,7 @@ class ContentletComponent {
1871
1883
  }
1872
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 }); }
1873
1885
  }
1874
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ContentletComponent, decorators: [{
1886
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ContentletComponent, decorators: [{
1875
1887
  type: Component,
1876
1888
  args: [{
1877
1889
  selector: 'dotcms-contentlet',
@@ -1889,6 +1901,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1889
1901
  [contentlet]="$contentlet() ?? contentlet" />
1890
1902
  }
1891
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
+ },
1892
1919
  changeDetection: ChangeDetectionStrategy.OnPush
1893
1920
  }]
1894
1921
  }], propDecorators: { contentlet: [{
@@ -1900,36 +1927,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1900
1927
  }], contentletRef: [{
1901
1928
  type: ViewChild,
1902
1929
  args: ['contentletRef']
1903
- }], dotObject: [{
1904
- type: HostBinding,
1905
- args: ['attr.data-dot-object']
1906
- }], identifier: [{
1907
- type: HostBinding,
1908
- args: ['attr.data-dot-identifier']
1909
- }], basetype: [{
1910
- type: HostBinding,
1911
- args: ['attr.data-dot-basetype']
1912
- }], title: [{
1913
- type: HostBinding,
1914
- args: ['attr.data-dot-title']
1915
- }], inode: [{
1916
- type: HostBinding,
1917
- args: ['attr.data-dot-inode']
1918
- }], type: [{
1919
- type: HostBinding,
1920
- args: ['attr.data-dot-type']
1921
- }], containerAttribute: [{
1922
- type: HostBinding,
1923
- args: ['attr.data-dot-container']
1924
- }], onNumberOfPages: [{
1925
- type: HostBinding,
1926
- args: ['attr.data-dot-on-number-of-pages']
1927
- }], styleProperties: [{
1928
- type: HostBinding,
1929
- args: ['attr.data-dot-style-properties']
1930
- }], styleAttribute: [{
1931
- type: HostBinding,
1932
- args: ['style']
1933
1930
  }] } });
1934
1931
 
1935
1932
  /**
@@ -1943,21 +1940,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
1943
1940
  class ContainerComponent {
1944
1941
  constructor() {
1945
1942
  this.#dotCMSStore = inject(DotCMSStore);
1946
- this.$containerData = signal(null, ...(ngDevMode ? [{ debugName: "$containerData" }] : []));
1947
- this.$contentlets = signal([], ...(ngDevMode ? [{ debugName: "$contentlets" }] : []));
1948
- 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;
1949
1947
  this.$dotAttributes = computed(() => {
1950
1948
  const containerData = this.$containerData();
1951
- if (!containerData || !this.#dotCMSStore.$isDevMode()) {
1949
+ if (!containerData || !this.$isDevMode()) {
1952
1950
  return {};
1953
1951
  }
1954
1952
  return getDotContainerAttributes(containerData);
1955
- }, ...(ngDevMode ? [{ debugName: "$dotAttributes" }] : []));
1956
- this.dotObject = 'container';
1957
- this.acceptTypes = null;
1958
- this.identifier = null;
1959
- this.maxContentlets = null;
1960
- this.uuid = null;
1953
+ }, ...(ngDevMode ? [{ debugName: "$dotAttributes" }] : /* istanbul ignore next */ []));
1961
1954
  }
1962
1955
  #dotCMSStore;
1963
1956
  ngOnChanges() {
@@ -1967,13 +1960,9 @@ class ContainerComponent {
1967
1960
  }
1968
1961
  this.$containerData.set(getContainersData(page, this.container));
1969
1962
  this.$contentlets.set(getContentletsInContainer(page, this.container));
1970
- this.acceptTypes = this.$dotAttributes()['data-dot-accept-types'];
1971
- this.identifier = this.$dotAttributes()['data-dot-identifier'];
1972
- this.maxContentlets = this.$dotAttributes()['data-max-contentlets'];
1973
- this.uuid = this.$dotAttributes()['data-dot-uuid'];
1974
1963
  }
1975
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1976
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: ContainerComponent, isStandalone: true, selector: "dotcms-container", inputs: { container: "container" }, host: { properties: { "attr.data-dot-object": "this.dotObject", "attr.data-dot-accept-types": "this.acceptTypes", "attr.data-dot-identifier": "this.identifier", "attr.data-max-contentlets": "this.maxContentlets", "attr.data-dot-uuid": "this.uuid" } }, usesOnChanges: true, ngImport: i0, template: `
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: `
1977
1966
  @if (!$containerData()) {
1978
1967
  <dotcms-container-not-found [identifier]="container.identifier" />
1979
1968
  } @else if ($isEmpty()) {
@@ -1985,7 +1974,7 @@ class ContainerComponent {
1985
1974
  }
1986
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 }); }
1987
1976
  }
1988
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ContainerComponent, decorators: [{
1977
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ContainerComponent, decorators: [{
1989
1978
  type: Component,
1990
1979
  args: [{
1991
1980
  selector: 'dotcms-container',
@@ -2001,26 +1990,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
2001
1990
  }
2002
1991
  }
2003
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
+ },
2004
2002
  changeDetection: ChangeDetectionStrategy.OnPush
2005
2003
  }]
2006
2004
  }], propDecorators: { container: [{
2007
2005
  type: Input,
2008
2006
  args: [{ required: true }]
2009
- }], dotObject: [{
2010
- type: HostBinding,
2011
- args: ['attr.data-dot-object']
2012
- }], acceptTypes: [{
2013
- type: HostBinding,
2014
- args: ['attr.data-dot-accept-types']
2015
- }], identifier: [{
2016
- type: HostBinding,
2017
- args: ['attr.data-dot-identifier']
2018
- }], maxContentlets: [{
2019
- type: HostBinding,
2020
- args: ['attr.data-max-contentlets']
2021
- }], uuid: [{
2022
- type: HostBinding,
2023
- args: ['attr.data-dot-uuid']
2024
2007
  }] } });
2025
2008
 
2026
2009
  /**
@@ -2038,8 +2021,8 @@ class ColumnComponent {
2038
2021
  const positionClasses = getColumnPositionClasses(this.column);
2039
2022
  this.customClasses = combineClasses([positionClasses.startClass, positionClasses.endClass]);
2040
2023
  }
2041
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2042
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: ColumnComponent, isStandalone: true, selector: "dotcms-column", inputs: { column: "column" }, host: { properties: { "class": "this.customClasses" } }, usesOnChanges: true, ngImport: i0, template: `
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: `
2043
2026
  <div [class]="column.styleClass" data-testid="dotcms-column">
2044
2027
  @for (container of column.containers; track $index) {
2045
2028
  <dotcms-container [container]="container" />
@@ -2047,7 +2030,7 @@ class ColumnComponent {
2047
2030
  </div>
2048
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 }); }
2049
2032
  }
2050
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: ColumnComponent, decorators: [{
2033
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ColumnComponent, decorators: [{
2051
2034
  type: Component,
2052
2035
  args: [{ selector: 'dotcms-column', imports: [ContainerComponent], template: `
2053
2036
  <div [class]="column.styleClass" data-testid="dotcms-column">
@@ -2074,15 +2057,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImpor
2074
2057
  */
2075
2058
  class RowComponent {
2076
2059
  constructor() {
2077
- this.customClasses = signal('', ...(ngDevMode ? [{ debugName: "customClasses" }] : []));
2078
- 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 */ []));
2079
2062
  }
2080
2063
  ngOnChanges() {
2081
2064
  this.customClasses.set(combineClasses(['dot-row-container', this.row.styleClass ?? '']));
2082
2065
  this.sectionId.set(`${DOT_SECTION_ID_PREFIX}${this.sectionIndex}`);
2083
2066
  }
2084
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: RowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2085
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: RowComponent, isStandalone: true, selector: "dotcms-row", inputs: { row: "row", sectionIndex: "sectionIndex" }, usesOnChanges: true, ngImport: i0, template: `
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: `
2086
2069
  <div [id]="sectionId()" [class]="customClasses()">
2087
2070
  <div class="dot-row" data-dot-object="row" data-testid="dotcms-row">
2088
2071
  @for (column of row.columns; track $index) {
@@ -2092,7 +2075,7 @@ class RowComponent {
2092
2075
  </div>
2093
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 }); }
2094
2077
  }
2095
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: RowComponent, decorators: [{
2078
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: RowComponent, decorators: [{
2096
2079
  type: Component,
2097
2080
  args: [{ selector: 'dotcms-row', imports: [ColumnComponent], template: `
2098
2081
  <div [id]="sectionId()" [class]="customClasses()">
@@ -2130,8 +2113,8 @@ class DotCMSLayoutBodyComponent {
2130
2113
  this.mode = 'production';
2131
2114
  this.#dotCMSStore = inject(DotCMSStore);
2132
2115
  this.$isDevMode = this.#dotCMSStore.$isDevMode;
2133
- this.$rows = signal([], ...(ngDevMode ? [{ debugName: "$rows" }] : []));
2134
- 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 */ []));
2135
2118
  }
2136
2119
  #dotCMSStore;
2137
2120
  ngOnChanges() {
@@ -2143,8 +2126,8 @@ class DotCMSLayoutBodyComponent {
2143
2126
  this.$isEmpty.set(!this.page?.layout?.body);
2144
2127
  this.$rows.set(this.page?.layout?.body?.rows ?? []);
2145
2128
  }
2146
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSLayoutBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2147
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: DotCMSLayoutBodyComponent, isStandalone: true, selector: "dotcms-layout-body", inputs: { page: "page", components: "components", mode: "mode" }, providers: [DotCMSStore], usesOnChanges: true, ngImport: i0, template: `
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: `
2148
2131
  @if ($isEmpty() && $isDevMode()) {
2149
2132
  <dotcms-page-error-message />
2150
2133
  } @else {
@@ -2154,7 +2137,7 @@ class DotCMSLayoutBodyComponent {
2154
2137
  }
2155
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 }); }
2156
2139
  }
2157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSLayoutBodyComponent, decorators: [{
2140
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSLayoutBodyComponent, decorators: [{
2158
2141
  type: Component,
2159
2142
  args: [{ selector: 'dotcms-layout-body', imports: [PageErrorMessageComponent, RowComponent], providers: [DotCMSStore], template: `
2160
2143
  @if ($isEmpty() && $isDevMode()) {
@@ -2255,10 +2238,10 @@ class DotCMSEditablePageService {
2255
2238
  });
2256
2239
  return unsubscribe;
2257
2240
  }
2258
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSEditablePageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2259
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSEditablePageService, providedIn: 'root' }); }
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' }); }
2260
2243
  }
2261
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: DotCMSEditablePageService, decorators: [{
2244
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DotCMSEditablePageService, decorators: [{
2262
2245
  type: Injectable,
2263
2246
  args: [{
2264
2247
  providedIn: 'root'