@vectoriox/iox-ui 4.2.10 → 4.2.12

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.
@@ -1,11 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, HostListener, Output, Input, Directive, NgModule, Injectable, ViewChild, Component, Host, Optional, forwardRef, Inject, inject, NgZone, InjectionToken, PLATFORM_ID, ChangeDetectionStrategy, ViewContainerRef } from '@angular/core';
2
+ import { EventEmitter, HostListener, Output, Input, Directive, NgModule, Injectable, ViewChild, Component, Host, Optional, inject, NgZone, Inject, InjectionToken, PLATFORM_ID, ChangeDetectionStrategy, ViewContainerRef } from '@angular/core';
3
3
  import * as i2 from '@angular/animations';
4
4
  import { style, animate } from '@angular/animations';
5
5
  import { Subject, fromEvent, of } from 'rxjs';
6
6
  import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
7
- import { Masonry } from '@fristys/masonry';
8
- import { BrowserModule } from '@angular/platform-browser';
9
7
  import * as i1$2 from '@angular/common';
10
8
  import { CommonModule, isPlatformBrowser } from '@angular/common';
11
9
  import Lenis from 'lenis';
@@ -385,111 +383,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImpo
385
383
  }]
386
384
  }] });
387
385
 
388
- class IoxMasonryService {
389
- constructor() { }
390
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: IoxMasonryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
391
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: IoxMasonryService, providedIn: 'root' }); }
392
- }
393
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: IoxMasonryService, decorators: [{
394
- type: Injectable,
395
- args: [{
396
- providedIn: 'root'
397
- }]
398
- }], ctorParameters: () => [] });
399
-
400
- class IoxMasonryComponent {
401
- constructor(_element) {
402
- this._element = _element;
403
- // Inputs
404
- this.options = {};
405
- this.useImagesLoaded = false;
406
- this.updateLayout = false;
407
- this.layoutComplete = new EventEmitter();
408
- this.isAppendAllowed = true;
409
- this.add = (element) => {
410
- setTimeout(() => {
411
- this._msnry.init();
412
- }, 200);
413
- };
414
- }
415
- ngAfterViewInit() {
416
- console.log("test");
417
- }
418
- ngOnInit() {
419
- this._msnry = new Masonry(document.getElementById('masonry'), this.options);
420
- this.layout();
421
- }
422
- ngOnChanges(changes) {
423
- console.log(changes);
424
- }
425
- remove(element) {
426
- this._msnry.remove(element);
427
- }
428
- layout() {
429
- setTimeout(() => {
430
- this._msnry.init();
431
- });
432
- }
433
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: IoxMasonryComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
434
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.11", type: IoxMasonryComponent, isStandalone: false, selector: "[iox-masonry], iox-masonry", inputs: { options: "options", useImagesLoaded: "useImagesLoaded", updateLayout: "updateLayout" }, outputs: { layoutComplete: "layoutComplete" }, usesOnChanges: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true }); }
435
- }
436
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: IoxMasonryComponent, decorators: [{
437
- type: Component,
438
- args: [{ selector: "[iox-masonry], iox-masonry", template: `<ng-content></ng-content>`, standalone: false }]
439
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { options: [{
440
- type: Input
441
- }], useImagesLoaded: [{
442
- type: Input
443
- }], updateLayout: [{
444
- type: Input
445
- }], layoutComplete: [{
446
- type: Output
447
- }] } });
448
-
449
- class IoxMasonryItemDirective {
450
- constructor(_element, _parent, _renderer) {
451
- this._element = _element;
452
- this._parent = _parent;
453
- this._renderer = _renderer;
454
- //this._renderer.setStyle(_element.nativeElement,'opacity', '0');
455
- }
456
- ngAfterViewInit() {
457
- console.log(this._element.nativeElement);
458
- this._parent.add(this._element.nativeElement);
459
- }
460
- ngOnDestroy() {
461
- this._parent.remove(this._element.nativeElement);
462
- }
463
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: IoxMasonryItemDirective, deps: [{ token: i0.ElementRef }, { token: forwardRef(() => IoxMasonryComponent) }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
464
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.11", type: IoxMasonryItemDirective, isStandalone: false, selector: "[ioxMasonryItem], ioxMasonryItem", ngImport: i0 }); }
465
- }
466
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: IoxMasonryItemDirective, decorators: [{
467
- type: Directive,
468
- args: [{
469
- selector: "[ioxMasonryItem], ioxMasonryItem",
470
- standalone: false
471
- }]
472
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: IoxMasonryComponent, decorators: [{
473
- type: Inject,
474
- args: [forwardRef(() => IoxMasonryComponent)]
475
- }] }, { type: i0.Renderer2 }] });
476
-
477
- class IoxMasonryModule {
478
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: IoxMasonryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
479
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.11", ngImport: i0, type: IoxMasonryModule, declarations: [IoxMasonryComponent, IoxMasonryItemDirective], imports: [BrowserModule], exports: [IoxMasonryComponent, IoxMasonryItemDirective] }); }
480
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: IoxMasonryModule, imports: [BrowserModule] }); }
481
- }
482
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: IoxMasonryModule, decorators: [{
483
- type: NgModule,
484
- args: [{
485
- declarations: [IoxMasonryComponent, IoxMasonryItemDirective],
486
- imports: [
487
- BrowserModule
488
- ],
489
- exports: [IoxMasonryComponent, IoxMasonryItemDirective]
490
- }]
491
- }] });
492
-
493
386
  class PageScrollProvider {
494
387
  constructor() {
495
388
  // inject() (not a ctor param) so subclasses like SsrSafePageScrollProvider keep `super()`.
@@ -1227,6 +1120,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImpo
1227
1120
  type: Input
1228
1121
  }] } });
1229
1122
 
1123
+ /**
1124
+ * Directive-host Heading: the real `<h1>`…`<h6>` IS the host — no `app-builder-heading`
1125
+ * wrapper, no inner/outer split. The tag is chosen by whoever CREATES the component
1126
+ * (engine: `createComponent({ hostElement: document.createElement(level) })`; builder:
1127
+ * RenderDirective does the same), NOT by an internal ngSwitch. `level` is kept as an input
1128
+ * for that creation logic + serialization. Editing (contenteditable) runs in the builder only.
1129
+ */
1230
1130
  class BuilderHeadingComponent {
1231
1131
  constructor(events, cdr) {
1232
1132
  this.events = events;
@@ -1263,11 +1163,12 @@ class BuilderHeadingComponent {
1263
1163
  this.syncTraitToPanel('content', newValue);
1264
1164
  }
1265
1165
  onKeyDown(event) {
1266
- if (event.key === 'Enter' && !event.shiftKey) {
1166
+ const ke = event;
1167
+ if (ke.key === 'Enter' && !ke.shiftKey) {
1267
1168
  event.preventDefault();
1268
1169
  event.target.blur();
1269
1170
  }
1270
- if (event.key === 'Escape') {
1171
+ if (ke.key === 'Escape') {
1271
1172
  this.editing = false;
1272
1173
  this.cdr.reattach();
1273
1174
  event.target.blur();
@@ -1287,65 +1188,18 @@ class BuilderHeadingComponent {
1287
1188
  this.events.emit('elementselect', { node: this.node, componentRef: null, isCanvasUpdate: true });
1288
1189
  }
1289
1190
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: BuilderHeadingComponent, deps: [{ token: IOX_BUILDER_EVENTS, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1290
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.11", type: BuilderHeadingComponent, isStandalone: false, selector: "app-builder-heading", inputs: { content: "content", level: "level", nodeId: "nodeId", node: "node" }, ngImport: i0, template: `
1291
- <ng-container [ngSwitch]="level">
1292
- <h1 *ngSwitchCase="'h1'" [ngClass]="'iox-node-' + nodeId"
1293
- [attr.contenteditable]="editing ? 'true' : null"
1294
- (mousedown)="onMouseDown($event)"
1295
- (dblclick)="startEdit($event)" (blur)="commitEdit($event)" (keydown)="onKeyDown($event)">{{ content }}</h1>
1296
- <h2 *ngSwitchCase="'h2'" [ngClass]="'iox-node-' + nodeId"
1297
- [attr.contenteditable]="editing ? 'true' : null"
1298
- (mousedown)="onMouseDown($event)"
1299
- (dblclick)="startEdit($event)" (blur)="commitEdit($event)" (keydown)="onKeyDown($event)">{{ content }}</h2>
1300
- <h3 *ngSwitchCase="'h3'" [ngClass]="'iox-node-' + nodeId"
1301
- [attr.contenteditable]="editing ? 'true' : null"
1302
- (mousedown)="onMouseDown($event)"
1303
- (dblclick)="startEdit($event)" (blur)="commitEdit($event)" (keydown)="onKeyDown($event)">{{ content }}</h3>
1304
- <h4 *ngSwitchCase="'h4'" [ngClass]="'iox-node-' + nodeId"
1305
- [attr.contenteditable]="editing ? 'true' : null"
1306
- (mousedown)="onMouseDown($event)"
1307
- (dblclick)="startEdit($event)" (blur)="commitEdit($event)" (keydown)="onKeyDown($event)">{{ content }}</h4>
1308
- <h5 *ngSwitchCase="'h5'" [ngClass]="'iox-node-' + nodeId"
1309
- [attr.contenteditable]="editing ? 'true' : null"
1310
- (mousedown)="onMouseDown($event)"
1311
- (dblclick)="startEdit($event)" (blur)="commitEdit($event)" (keydown)="onKeyDown($event)">{{ content }}</h5>
1312
- <h6 *ngSwitchDefault [ngClass]="'iox-node-' + nodeId"
1313
- [attr.contenteditable]="editing ? 'true' : null"
1314
- (mousedown)="onMouseDown($event)"
1315
- (dblclick)="startEdit($event)" (blur)="commitEdit($event)" (keydown)="onKeyDown($event)">{{ content }}</h6>
1316
- </ng-container>
1317
- `, isInline: true, styles: ["h1,h2,h3,h4,h5,h6{margin:0}[contenteditable]{outline:none;cursor:text}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$2.NgSwitchDefault, selector: "[ngSwitchDefault]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1191
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.11", type: BuilderHeadingComponent, isStandalone: false, selector: "h1[iox-heading],h2[iox-heading],h3[iox-heading],h4[iox-heading],h5[iox-heading],h6[iox-heading]", inputs: { content: "content", level: "level", nodeId: "nodeId", node: "node" }, host: { listeners: { "mousedown": "onMouseDown($event)", "dblclick": "startEdit($event)", "blur": "commitEdit($event)", "keydown": "onKeyDown($event)" }, properties: { "class": "'iox-node-' + nodeId", "attr.contenteditable": "editing ? 'true' : null" } }, ngImport: i0, template: `{{ content }}`, isInline: true, styles: [":host{margin:0}:host[contenteditable]{outline:none;cursor:text}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1318
1192
  }
1319
1193
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: BuilderHeadingComponent, decorators: [{
1320
1194
  type: Component,
1321
- args: [{ selector: 'app-builder-heading', template: `
1322
- <ng-container [ngSwitch]="level">
1323
- <h1 *ngSwitchCase="'h1'" [ngClass]="'iox-node-' + nodeId"
1324
- [attr.contenteditable]="editing ? 'true' : null"
1325
- (mousedown)="onMouseDown($event)"
1326
- (dblclick)="startEdit($event)" (blur)="commitEdit($event)" (keydown)="onKeyDown($event)">{{ content }}</h1>
1327
- <h2 *ngSwitchCase="'h2'" [ngClass]="'iox-node-' + nodeId"
1328
- [attr.contenteditable]="editing ? 'true' : null"
1329
- (mousedown)="onMouseDown($event)"
1330
- (dblclick)="startEdit($event)" (blur)="commitEdit($event)" (keydown)="onKeyDown($event)">{{ content }}</h2>
1331
- <h3 *ngSwitchCase="'h3'" [ngClass]="'iox-node-' + nodeId"
1332
- [attr.contenteditable]="editing ? 'true' : null"
1333
- (mousedown)="onMouseDown($event)"
1334
- (dblclick)="startEdit($event)" (blur)="commitEdit($event)" (keydown)="onKeyDown($event)">{{ content }}</h3>
1335
- <h4 *ngSwitchCase="'h4'" [ngClass]="'iox-node-' + nodeId"
1336
- [attr.contenteditable]="editing ? 'true' : null"
1337
- (mousedown)="onMouseDown($event)"
1338
- (dblclick)="startEdit($event)" (blur)="commitEdit($event)" (keydown)="onKeyDown($event)">{{ content }}</h4>
1339
- <h5 *ngSwitchCase="'h5'" [ngClass]="'iox-node-' + nodeId"
1340
- [attr.contenteditable]="editing ? 'true' : null"
1341
- (mousedown)="onMouseDown($event)"
1342
- (dblclick)="startEdit($event)" (blur)="commitEdit($event)" (keydown)="onKeyDown($event)">{{ content }}</h5>
1343
- <h6 *ngSwitchDefault [ngClass]="'iox-node-' + nodeId"
1344
- [attr.contenteditable]="editing ? 'true' : null"
1345
- (mousedown)="onMouseDown($event)"
1346
- (dblclick)="startEdit($event)" (blur)="commitEdit($event)" (keydown)="onKeyDown($event)">{{ content }}</h6>
1347
- </ng-container>
1348
- `, standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["h1,h2,h3,h4,h5,h6{margin:0}[contenteditable]{outline:none;cursor:text}\n"] }]
1195
+ args: [{ selector: 'h1[iox-heading],h2[iox-heading],h3[iox-heading],h4[iox-heading],h5[iox-heading],h6[iox-heading]', template: `{{ content }}`, host: {
1196
+ '[class]': "'iox-node-' + nodeId",
1197
+ '[attr.contenteditable]': "editing ? 'true' : null",
1198
+ '(mousedown)': 'onMouseDown($event)',
1199
+ '(dblclick)': 'startEdit($event)',
1200
+ '(blur)': 'commitEdit($event)',
1201
+ '(keydown)': 'onKeyDown($event)',
1202
+ }, standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{margin:0}:host[contenteditable]{outline:none;cursor:text}\n"] }]
1349
1203
  }], ctorParameters: () => [{ type: undefined, decorators: [{
1350
1204
  type: Optional
1351
1205
  }, {
@@ -1361,6 +1215,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImpo
1361
1215
  type: Input
1362
1216
  }] } });
1363
1217
 
1218
+ /**
1219
+ * Directive-host Text: the real `<p>`/`<span>` IS the host — no `app-text-block` wrapper,
1220
+ * no inner/outer split. The tag is chosen by whoever CREATES the component (engine/builder
1221
+ * pass `hostElement`), NOT an internal ngSwitch. Content is rich HTML (Quill) → bound via
1222
+ * `[innerHTML]` on the host. Editing (contenteditable) runs in the builder only.
1223
+ */
1364
1224
  class TextBlockComponent {
1365
1225
  constructor(events, cdr) {
1366
1226
  this.events = events;
@@ -1409,7 +1269,7 @@ class TextBlockComponent {
1409
1269
  const newValue = el.innerText;
1410
1270
  this.content = newValue;
1411
1271
  // Explicitly reset to plain text so any pasted HTML nodes are gone
1412
- // before Angular re-renders {{ content }}
1272
+ // before Angular re-renders [innerHTML]
1413
1273
  el.textContent = newValue;
1414
1274
  this.cdr.reattach();
1415
1275
  this.syncTraitToPanel('content', newValue);
@@ -1435,57 +1295,21 @@ class TextBlockComponent {
1435
1295
  this.events.emit('elementselect', { node: this.node, componentRef: null, isCanvasUpdate: true });
1436
1296
  }
1437
1297
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: TextBlockComponent, deps: [{ token: IOX_BUILDER_EVENTS, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1438
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.11", type: TextBlockComponent, isStandalone: false, selector: "app-text-block", inputs: { content: "content", tag: "tag", style: "style", nodeId: "nodeId", node: "node" }, ngImport: i0, template: `
1439
- <ng-container [ngSwitch]="tag">
1440
- <p *ngSwitchDefault
1441
- [ngClass]="'iox-node-' + nodeId"
1442
- [attr.contenteditable]="editing ? 'true' : null"
1443
- (pointerdown)="onPointerDown($event)"
1444
- (mousedown)="onMouseDown($event)"
1445
- (dblclick)="startEdit($event)"
1446
- (blur)="commitEdit($event)"
1447
- (keydown)="onKeyDown($event)"
1448
- (paste)="onPaste($event)"
1449
- [innerHTML]="content"></p>
1450
- <span *ngSwitchCase="'span'"
1451
- [ngClass]="'iox-node-' + nodeId"
1452
- [attr.contenteditable]="editing ? 'true' : null"
1453
- (pointerdown)="onPointerDown($event)"
1454
- (mousedown)="onMouseDown($event)"
1455
- (dblclick)="startEdit($event)"
1456
- (blur)="commitEdit($event)"
1457
- (keydown)="onKeyDown($event)"
1458
- (paste)="onPaste($event)"
1459
- [innerHTML]="content"></span>
1460
- </ng-container>
1461
- `, isInline: true, styles: ["p,span{margin:0;white-space:pre-wrap}[contenteditable]{outline:none;cursor:text}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$2.NgSwitchDefault, selector: "[ngSwitchDefault]" }] }); }
1298
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.11", type: TextBlockComponent, isStandalone: false, selector: "p[iox-text],span[iox-text]", inputs: { content: "content", tag: "tag", style: "style", nodeId: "nodeId", node: "node" }, host: { listeners: { "pointerdown": "onPointerDown($event)", "mousedown": "onMouseDown($event)", "dblclick": "startEdit($event)", "blur": "commitEdit($event)", "keydown": "onKeyDown($event)", "paste": "onPaste($event)" }, properties: { "class": "'iox-node-' + nodeId", "innerHTML": "content", "attr.contenteditable": "editing ? 'true' : null" } }, ngImport: i0, template: ``, isInline: true, styles: [":host{margin:0;white-space:pre-wrap}:host[contenteditable]{outline:none;cursor:text}\n"] }); }
1462
1299
  }
1463
1300
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: TextBlockComponent, decorators: [{
1464
1301
  type: Component,
1465
- args: [{ selector: 'app-text-block', template: `
1466
- <ng-container [ngSwitch]="tag">
1467
- <p *ngSwitchDefault
1468
- [ngClass]="'iox-node-' + nodeId"
1469
- [attr.contenteditable]="editing ? 'true' : null"
1470
- (pointerdown)="onPointerDown($event)"
1471
- (mousedown)="onMouseDown($event)"
1472
- (dblclick)="startEdit($event)"
1473
- (blur)="commitEdit($event)"
1474
- (keydown)="onKeyDown($event)"
1475
- (paste)="onPaste($event)"
1476
- [innerHTML]="content"></p>
1477
- <span *ngSwitchCase="'span'"
1478
- [ngClass]="'iox-node-' + nodeId"
1479
- [attr.contenteditable]="editing ? 'true' : null"
1480
- (pointerdown)="onPointerDown($event)"
1481
- (mousedown)="onMouseDown($event)"
1482
- (dblclick)="startEdit($event)"
1483
- (blur)="commitEdit($event)"
1484
- (keydown)="onKeyDown($event)"
1485
- (paste)="onPaste($event)"
1486
- [innerHTML]="content"></span>
1487
- </ng-container>
1488
- `, standalone: false, styles: ["p,span{margin:0;white-space:pre-wrap}[contenteditable]{outline:none;cursor:text}\n"] }]
1302
+ args: [{ selector: 'p[iox-text],span[iox-text]', template: ``, host: {
1303
+ '[class]': "'iox-node-' + nodeId",
1304
+ '[innerHTML]': 'content',
1305
+ '[attr.contenteditable]': "editing ? 'true' : null",
1306
+ '(pointerdown)': 'onPointerDown($event)',
1307
+ '(mousedown)': 'onMouseDown($event)',
1308
+ '(dblclick)': 'startEdit($event)',
1309
+ '(blur)': 'commitEdit($event)',
1310
+ '(keydown)': 'onKeyDown($event)',
1311
+ '(paste)': 'onPaste($event)',
1312
+ }, standalone: false, styles: [":host{margin:0;white-space:pre-wrap}:host[contenteditable]{outline:none;cursor:text}\n"] }]
1489
1313
  }], ctorParameters: () => [{ type: undefined, decorators: [{
1490
1314
  type: Optional
1491
1315
  }, {
@@ -1627,6 +1451,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImpo
1627
1451
  args: ['childrenHost', { read: ViewContainerRef, static: true }]
1628
1452
  }] } });
1629
1453
 
1454
+ /**
1455
+ * Directive-host ButtonBlock: the real `<a>`/`<button>` IS the host — no `app-button-block`
1456
+ * wrapper, no inner/outer split. The tag is chosen by whoever CREATES the component (engine
1457
+ * passes `hostElement`: `<a>` when `tag==='a'`, else `<button>`), NOT an internal `*ngIf`.
1458
+ * The `iox-btn-block` class (UA resets: inline-flex, color/font inherit, no border) matches the
1459
+ * string renderer and lives in the engine's global styles.scss — kept OFF `:host` so styleProps
1460
+ * (`.iox-node-{id}`) can override it. Children render into the host via `childrenHost`.
1461
+ */
1630
1462
  class ButtonBlockComponent {
1631
1463
  constructor() {
1632
1464
  this.tag = 'button';
@@ -1635,39 +1467,17 @@ class ButtonBlockComponent {
1635
1467
  this.type = 'button';
1636
1468
  this.nodeId = '';
1637
1469
  }
1638
- get childrenHost() {
1639
- return this.tag === 'a' ? this.linkHost : this.buttonHost;
1640
- }
1641
1470
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: ButtonBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1642
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.11", type: ButtonBlockComponent, isStandalone: false, selector: "app-button-block", inputs: { tag: "tag", href: "href", target: "target", type: "type", nodeId: "nodeId" }, viewQueries: [{ propertyName: "buttonHost", first: true, predicate: ["buttonHost"], descendants: true, read: ViewContainerRef }, { propertyName: "linkHost", first: true, predicate: ["linkHost"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: `
1643
- <button *ngIf="tag !== 'a'"
1644
- [ngClass]="'iox-node-' + nodeId"
1645
- [attr.type]="type">
1646
- <ng-container #buttonHost></ng-container>
1647
- </button>
1648
- <a *ngIf="tag === 'a'"
1649
- [ngClass]="'iox-node-' + nodeId"
1650
- [attr.href]="href || null"
1651
- [attr.target]="target || null">
1652
- <ng-container #linkHost></ng-container>
1653
- </a>
1654
- `, isInline: true, styles: ["button,a{width:100%;font:inherit;color:inherit;text-decoration:none;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
1471
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.11", type: ButtonBlockComponent, isStandalone: false, selector: "a[iox-button-block],button[iox-button-block]", inputs: { tag: "tag", href: "href", target: "target", type: "type", nodeId: "nodeId" }, host: { properties: { "class": "'iox-btn-block iox-node-' + nodeId", "attr.href": "tag === 'a' ? (href || null) : null", "attr.target": "tag === 'a' ? (target || null) : null", "attr.type": "tag === 'a' ? null : type" } }, viewQueries: [{ propertyName: "childrenHost", first: true, predicate: ["childrenHost"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: `<ng-container #childrenHost></ng-container>`, isInline: true, styles: [":host{box-sizing:border-box}\n"] }); }
1655
1472
  }
1656
1473
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: ButtonBlockComponent, decorators: [{
1657
1474
  type: Component,
1658
- args: [{ selector: 'app-button-block', template: `
1659
- <button *ngIf="tag !== 'a'"
1660
- [ngClass]="'iox-node-' + nodeId"
1661
- [attr.type]="type">
1662
- <ng-container #buttonHost></ng-container>
1663
- </button>
1664
- <a *ngIf="tag === 'a'"
1665
- [ngClass]="'iox-node-' + nodeId"
1666
- [attr.href]="href || null"
1667
- [attr.target]="target || null">
1668
- <ng-container #linkHost></ng-container>
1669
- </a>
1670
- `, standalone: false, styles: ["button,a{width:100%;font:inherit;color:inherit;text-decoration:none;box-sizing:border-box}\n"] }]
1475
+ args: [{ selector: 'a[iox-button-block],button[iox-button-block]', template: `<ng-container #childrenHost></ng-container>`, host: {
1476
+ '[class]': "'iox-btn-block iox-node-' + nodeId",
1477
+ '[attr.href]': "tag === 'a' ? (href || null) : null",
1478
+ '[attr.target]': "tag === 'a' ? (target || null) : null",
1479
+ '[attr.type]': "tag === 'a' ? null : type",
1480
+ }, standalone: false, styles: [":host{box-sizing:border-box}\n"] }]
1671
1481
  }], propDecorators: { tag: [{
1672
1482
  type: Input
1673
1483
  }], href: [{
@@ -1678,12 +1488,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImpo
1678
1488
  type: Input
1679
1489
  }], nodeId: [{
1680
1490
  type: Input
1681
- }], buttonHost: [{
1682
- type: ViewChild,
1683
- args: ['buttonHost', { read: ViewContainerRef, static: false }]
1684
- }], linkHost: [{
1491
+ }], childrenHost: [{
1685
1492
  type: ViewChild,
1686
- args: ['linkHost', { read: ViewContainerRef, static: false }]
1493
+ args: ['childrenHost', { read: ViewContainerRef, static: true }]
1687
1494
  }] } });
1688
1495
 
1689
1496
  class ClientSliderContainerComponent {
@@ -1915,12 +1722,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImpo
1915
1722
  }] } });
1916
1723
 
1917
1724
  /**
1918
- * Client-engine List. Renders a real `<ul>`/`<ol>` (chosen by the `htmlTag` trait) with the
1919
- * shared `iox-node-{id}` class, and inserts children into it via `childrenHost`. `:host` uses
1920
- * `display: contents` so the `<ul>`/`<ol>` is the effective layout child of its parent.
1921
- *
1922
- * The host is chosen from a `*ngIf` branch, so its ViewContainerRef only resolves after change
1923
- * detection — ClientTreeRendererService detects changes before reading `childrenHost`.
1725
+ * Directive-host List: the real `<ul>`/`<ol>` IS the host — no `iox-list` wrapper, no
1726
+ * inner/outer split. The tag is chosen by whoever CREATES the component (engine passes
1727
+ * `hostElement: document.createElement(htmlTag)`), NOT an internal `*ngIf`. Children render
1728
+ * into the host via `childrenHost`. `start`/`reversed` are host attrs (only meaningful on `<ol>`).
1924
1729
  */
1925
1730
  class ClientListComponent {
1926
1731
  constructor() {
@@ -1929,33 +1734,16 @@ class ClientListComponent {
1929
1734
  this.reversed = false;
1930
1735
  this.nodeId = '';
1931
1736
  }
1932
- get childrenHost() {
1933
- return this.htmlTag === 'ol' ? this.olHost : this.ulHost;
1934
- }
1935
1737
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: ClientListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1936
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.11", type: ClientListComponent, isStandalone: false, selector: "iox-list", inputs: { htmlTag: "htmlTag", start: "start", reversed: "reversed", nodeId: "nodeId" }, viewQueries: [{ propertyName: "olHost", first: true, predicate: ["olHost"], descendants: true, read: ViewContainerRef }, { propertyName: "ulHost", first: true, predicate: ["ulHost"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: `
1937
- <ol *ngIf="htmlTag === 'ol'" [ngClass]="'iox-node-' + nodeId"
1938
- [attr.start]="start !== '' && start != null ? start : null"
1939
- [attr.reversed]="reversed ? '' : null">
1940
- <ng-container #olHost></ng-container>
1941
- </ol>
1942
- <ul *ngIf="htmlTag !== 'ol'" [ngClass]="'iox-node-' + nodeId">
1943
- <ng-container #ulHost></ng-container>
1944
- </ul>
1945
- `, isInline: true, styles: [":host{display:contents}ul,ol{margin:0;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
1738
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.11", type: ClientListComponent, isStandalone: false, selector: "ul[iox-list],ol[iox-list]", inputs: { htmlTag: "htmlTag", start: "start", reversed: "reversed", nodeId: "nodeId" }, host: { properties: { "class": "'iox-node-' + nodeId", "attr.start": "htmlTag === 'ol' && start !== '' && start != null ? start : null", "attr.reversed": "htmlTag === 'ol' && reversed ? '' : null" } }, viewQueries: [{ propertyName: "childrenHost", first: true, predicate: ["childrenHost"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: `<ng-container #childrenHost></ng-container>`, isInline: true, styles: [":host{margin:0;box-sizing:border-box}\n"] }); }
1946
1739
  }
1947
1740
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: ClientListComponent, decorators: [{
1948
1741
  type: Component,
1949
- args: [{ selector: 'iox-list', template: `
1950
- <ol *ngIf="htmlTag === 'ol'" [ngClass]="'iox-node-' + nodeId"
1951
- [attr.start]="start !== '' && start != null ? start : null"
1952
- [attr.reversed]="reversed ? '' : null">
1953
- <ng-container #olHost></ng-container>
1954
- </ol>
1955
- <ul *ngIf="htmlTag !== 'ol'" [ngClass]="'iox-node-' + nodeId">
1956
- <ng-container #ulHost></ng-container>
1957
- </ul>
1958
- `, standalone: false, styles: [":host{display:contents}ul,ol{margin:0;box-sizing:border-box}\n"] }]
1742
+ args: [{ selector: 'ul[iox-list],ol[iox-list]', template: `<ng-container #childrenHost></ng-container>`, host: {
1743
+ '[class]': "'iox-node-' + nodeId",
1744
+ '[attr.start]': "htmlTag === 'ol' && start !== '' && start != null ? start : null",
1745
+ '[attr.reversed]': "htmlTag === 'ol' && reversed ? '' : null",
1746
+ }, standalone: false, styles: [":host{margin:0;box-sizing:border-box}\n"] }]
1959
1747
  }], propDecorators: { htmlTag: [{
1960
1748
  type: Input
1961
1749
  }], start: [{
@@ -1964,29 +1752,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImpo
1964
1752
  type: Input
1965
1753
  }], nodeId: [{
1966
1754
  type: Input
1967
- }], olHost: [{
1968
- type: ViewChild,
1969
- args: ['olHost', { read: ViewContainerRef }]
1970
- }], ulHost: [{
1755
+ }], childrenHost: [{
1971
1756
  type: ViewChild,
1972
- args: ['ulHost', { read: ViewContainerRef }]
1757
+ args: ['childrenHost', { read: ViewContainerRef, static: true }]
1973
1758
  }] } });
1974
1759
 
1975
1760
  /**
1976
- * Client-engine List item. Renders a real `<li>` with the shared `iox-node-{id}` class.
1977
- * `:host { display: contents }` removes the `iox-list-item` wrapper from the box tree so the
1978
- * `<li>` is a proper (marker-bearing) child of the parent `<ul>`/`<ol>`.
1761
+ * Directive-host List item: the real `<li>` IS the host — no `iox-list-item` wrapper, no
1762
+ * inner/outer split. Children render into the `<li>` via `childrenHost`. Fixed tag (`<li>`),
1763
+ * so the engine creates it with `vcr.createComponent` (no `hostElement` needed).
1979
1764
  */
1980
1765
  class ClientListItemComponent {
1981
1766
  constructor() {
1982
1767
  this.nodeId = '';
1983
1768
  }
1984
1769
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: ClientListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1985
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.11", type: ClientListItemComponent, isStandalone: false, selector: "iox-list-item", inputs: { nodeId: "nodeId" }, viewQueries: [{ propertyName: "childrenHost", first: true, predicate: ["childrenHost"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: `<li [ngClass]="'iox-node-' + nodeId"><ng-container #childrenHost></ng-container></li>`, isInline: true, styles: [":host{display:contents}li{box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
1770
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.11", type: ClientListItemComponent, isStandalone: false, selector: "li[iox-list-item]", inputs: { nodeId: "nodeId" }, host: { properties: { "class": "'iox-node-' + nodeId" } }, viewQueries: [{ propertyName: "childrenHost", first: true, predicate: ["childrenHost"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: `<ng-container #childrenHost></ng-container>`, isInline: true, styles: [":host{box-sizing:border-box}\n"] }); }
1986
1771
  }
1987
1772
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: ClientListItemComponent, decorators: [{
1988
1773
  type: Component,
1989
- args: [{ selector: 'iox-list-item', template: `<li [ngClass]="'iox-node-' + nodeId"><ng-container #childrenHost></ng-container></li>`, standalone: false, styles: [":host{display:contents}li{box-sizing:border-box}\n"] }]
1774
+ args: [{ selector: 'li[iox-list-item]', template: `<ng-container #childrenHost></ng-container>`, host: { '[class]': "'iox-node-' + nodeId" }, standalone: false, styles: [":host{box-sizing:border-box}\n"] }]
1990
1775
  }], propDecorators: { nodeId: [{
1991
1776
  type: Input
1992
1777
  }], childrenHost: [{
@@ -2243,5 +2028,5 @@ function renderDefaultDeclarations(type, styleProps, hasHoverState) {
2243
2028
  * Generated bundle index. Do not edit.
2244
2029
  */
2245
2030
 
2246
- export { AOSService, AnalyticsService, BuilderButtonComponent, BuilderDividerComponent, BuilderHeadingComponent, BuilderIconComponent, BuilderImageComponent, BuilderLinkComponent, BuilderSpacerComponent, ButtonBlockComponent, CMSClientInfraModule, CardComponent, ClientListComponent, ClientListItemComponent, ClientRepeaterComponent, ClientSliderContainerComponent, ClientSliderSlideComponent, ComponentInstanceRegistryService, ConsentService, ContainerComponent, ContentService, DEFAULT_WIDTH_BY_TYPE, ENVIRONMENT, IOX_BUILDER_EVENTS, IS_PREVIEW, IoxAnimateContainer, IoxAosDirective, IoxAosModule, IoxBuilderComponentsModule, IoxComponentRegistryService, IoxMasonryComponent, IoxMasonryItemDirective, IoxMasonryModule, IoxMasonryService, IoxPageComponent, IoxPageModule, IoxUiModule, LinkedContainerComponent, PageScrollProvider, PrivacyModalComponent, PrivacyModalService, PrivacyModelEvent, SectionComponent, TextBlockComponent, ViewPositionDirective, ViewPositionModule, WebSettingsService, compileDeclarations, renderDefaultDeclarations, rewriteViewportUnits, styleKeyToKebab };
2031
+ export { AOSService, AnalyticsService, BuilderButtonComponent, BuilderDividerComponent, BuilderHeadingComponent, BuilderIconComponent, BuilderImageComponent, BuilderLinkComponent, BuilderSpacerComponent, ButtonBlockComponent, CMSClientInfraModule, CardComponent, ClientListComponent, ClientListItemComponent, ClientRepeaterComponent, ClientSliderContainerComponent, ClientSliderSlideComponent, ComponentInstanceRegistryService, ConsentService, ContainerComponent, ContentService, DEFAULT_WIDTH_BY_TYPE, ENVIRONMENT, IOX_BUILDER_EVENTS, IS_PREVIEW, IoxAnimateContainer, IoxAosDirective, IoxAosModule, IoxBuilderComponentsModule, IoxComponentRegistryService, IoxPageComponent, IoxPageModule, IoxUiModule, LinkedContainerComponent, PageScrollProvider, PrivacyModalComponent, PrivacyModalService, PrivacyModelEvent, SectionComponent, TextBlockComponent, ViewPositionDirective, ViewPositionModule, WebSettingsService, compileDeclarations, renderDefaultDeclarations, rewriteViewportUnits, styleKeyToKebab };
2247
2032
  //# sourceMappingURL=vectoriox-iox-ui.mjs.map