@vectoriox/iox-builder 5.2.0 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -16,7 +16,7 @@ import { SelectModule } from 'primeng/select';
16
16
  import { TooltipModule } from 'primeng/tooltip';
17
17
  import { DialogModule } from 'primeng/dialog';
18
18
  import * as i1 from '@vectoriox/iox-ui';
19
- import { VALIDATION_STATES as VALIDATION_STATES$1, VALIDATION_STATE_CLASS as VALIDATION_STATE_CLASS$1, DEFAULT_WIDTH_BY_TYPE, COLOR_SCHEME_TRAIT, COLOR_SCHEMES, ColorScheme, Breakpoint, BREAKPOINTS, countOverrides, setOverride, defaultElementStyleFor, applyElementStyle, stripSuppressedProps, DeclarationContext, buildPartSelector, planResponsiveRules, resolveStyleProps, buildTargetedStateSelector, statePseudoClass, compileTokenCssBlocks, fontsForTokens, GOOGLE_FONTS_FILE_ORIGIN, googleFontHref, compileDeclarations, wrapInBreakpointQuery, BreakpointQueryKind, breakpointDef, breakpointForWidth, FormRenderState, safeSetInput, ContextStore, ComponentInstanceRegistryService, isActionEnabled, isContextAction, contextActionEffect, resolveContextValue, emptyImageSrc, composeVirtualTraits, withDefaultHoverTransition, stateNamesIn, partClassName, syncNodeDesignClasses, resolveInputs, setInputOverride, collectContextSlotKeys, withContextSlots, compilePageStyle, nodeUsesContext, resolveBoundValue, IS_PREVIEW, planDataSource, dataSourcePlanToRequest, normalizeCollectionResult, resolveRepeaterItems, getByPath, computeRelative, IoxPageModule, PALETTE_PRESETS, PART_CLASS_NAMES } from '@vectoriox/iox-ui';
19
+ import { VALIDATION_STATES as VALIDATION_STATES$1, VALIDATION_STATE_CLASS as VALIDATION_STATE_CLASS$1, DEFAULT_WIDTH_BY_TYPE, COLOR_SCHEME_TRAIT, COLOR_SCHEMES, ColorScheme, Breakpoint, BREAKPOINTS, countOverrides, setOverride, defaultElementStyleFor, applyElementStyle, stripSuppressedProps, DeclarationContext, buildPartSelector, planResponsiveRules, resolveStyleProps, buildTargetedStateSelector, statePseudoClass, compileTokenCssBlocks, fontsForTokens, GOOGLE_FONTS_FILE_ORIGIN, googleFontHref, compileDeclarations, wrapInBreakpointQuery, BreakpointQueryKind, breakpointDef, breakpointForWidth, FormRenderState, safeSetInput, ContextStore, ComponentInstanceRegistryService, isActionEnabled, isContextAction, contextActionEffect, resolveContextValue, declaredInputNames, emptyImagePlaceholder, syncNodeDesignClasses, composeVirtualTraits, withDefaultHoverTransition, stateNamesIn, partClassName, resolveInputs, setInputOverride, collectContextSlotKeys, withContextSlots, compilePageStyle, nodeUsesContext, resolveBoundValue, IS_PREVIEW, planDataSource, dataSourcePlanToRequest, normalizeCollectionResult, resolveRepeaterItems, getByPath, computeRelative, IoxPageModule, PALETTE_PRESETS, PART_CLASS_NAMES } from '@vectoriox/iox-ui';
20
20
  export { ComponentInstanceRegistryService, VIRTUAL_TRAIT_KEYS, composeVirtualTraits } from '@vectoriox/iox-ui';
21
21
  import Lenis from 'lenis';
22
22
  import { Subject, BehaviorSubject, of, forkJoin } from 'rxjs';
@@ -1558,8 +1558,10 @@ function buildLayoutPreset(def, createNode) {
1558
1558
  /**
1559
1559
  * True for nodes rendered on the EDITING canvas — provided by `BuilderComponent` at component level,
1560
1560
  * so it reaches every `[ioxRender]` under `<app-builder>` and nothing else (Preview renders the same
1561
- * directive outside it). Not `IS_PREVIEW`: the admin provides that one from an eagerly imported module,
1562
- * so it reads true everywhere, the canvas included.
1561
+ * directive outside it). It answers "is this the editor?" — the canvas-only "Add image" label hangs off
1562
+ * it. `IS_PREVIEW` answers the other question, "is this a preview/live render?" (links navigate,
1563
+ * sliders run live), and is provided ONLY by Preview (component level) and the engine; neither token
1564
+ * implies the other — a design sampler, for one, is neither.
1563
1565
  */
1564
1566
  const IOX_BUILDER_CANVAS = new InjectionToken('IOX_BUILDER_CANVAS');
1565
1567
  /** Optional font manager. Provide from the host app to populate the fontFamily dropdown. */
@@ -1602,6 +1604,14 @@ const BUILDER_CHROME_EN = Object.freeze({
1602
1604
  'builder.chrome.preview': 'Preview',
1603
1605
  'builder.chrome.addImage': 'Add image',
1604
1606
  });
1607
+ const CANVAS_EMPTY_IMAGE_LABEL_KEY = 'builder.chrome.addImage';
1608
+ const CANVAS_EMPTY_IMAGE_LABEL_EN = BUILDER_CHROME_EN[CANVAS_EMPTY_IMAGE_LABEL_KEY];
1609
+ /**
1610
+ * Marks an element the builder draws on the canvas that the live site never has — drop placeholders,
1611
+ * repeat badges, the empty slider hint. A page thumbnail is a picture of the SITE, so its capture
1612
+ * leaves every marked element out.
1613
+ */
1614
+ const EDITOR_CHROME_ATTRIBUTE = 'data-iox-chrome';
1605
1615
 
1606
1616
  class ComponentRegistryService {
1607
1617
  constructor() {
@@ -4611,6 +4621,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
4611
4621
  args: [{ providedIn: 'root' }]
4612
4622
  }] });
4613
4623
 
4624
+ /** The input a component declares to receive its empty-image placeholder (the Image). */
4625
+ const EMPTY_SRC_INPUT = 'emptySrc';
4626
+ /** The editing canvas's "Add image" label, through the host's i18n. */
4627
+ function canvasEmptyImageLabel(labels) {
4628
+ return labels(CANVAS_EMPTY_IMAGE_LABEL_KEY, CANVAS_EMPTY_IMAGE_LABEL_EN);
4629
+ }
4630
+ /**
4631
+ * Push a node's empty-image placeholder (design-system DS3) to its rendered component — a no-op for
4632
+ * a component that declares no `emptySrc`. The placeholder depends on the MARKER only, never on the
4633
+ * source, so it is set once at render and again whenever the node's element style changes.
4634
+ */
4635
+ function syncEmptyImagePlaceholder(ref, node, emptyLabel) {
4636
+ if (!ref || !declaredInputNames(ref.componentType).has(EMPTY_SRC_INPUT))
4637
+ return;
4638
+ ref.setInput(EMPTY_SRC_INPUT, emptyImagePlaceholder(node, emptyLabel));
4639
+ }
4640
+ /**
4641
+ * Everything a node's element style / colour scheme decides on its rendered host, in ONE call: the
4642
+ * design classes (marker + scheme) and the empty-image placeholder. Every place that switches or
4643
+ * resets a node's style on the canvas calls this, so an adopted Image gains its placeholder at once
4644
+ * instead of after a reload (DS3 D2).
4645
+ */
4646
+ function syncNodeDesign(ref, node, emptyLabel) {
4647
+ syncNodeDesignClasses(ref?.location?.nativeElement ?? null, node);
4648
+ syncEmptyImagePlaceholder(ref, node, emptyLabel);
4649
+ }
4650
+
4614
4651
  // Module-level counter — unique drop-list ID per Section instance across the whole app session.
4615
4652
  let dropListCounter = 0;
4616
4653
  /**
@@ -4823,14 +4860,11 @@ class RenderDirective {
4823
4860
  // safeSetInput for every component that does not declare it.
4824
4861
  if (node.responsive)
4825
4862
  safeSetInput(componentRef, 'responsive', node.responsive);
4826
- // Empty images (DS3): a MARKED Image with no source shows the shared placeholder — the
4827
- // "Add image" label on the editing canvas, the bare blank anywhere else (Preview), which is
4828
- // what the live site shows. An unmarked Image gets null and renders exactly as before.
4829
- if (node.type === 'Image') {
4830
- const src = node.traits?.find(t => t.name === 'src')?.default;
4831
- const label = this.onCanvas ? this.labels('builder.chrome.addImage', 'Add image') : null;
4832
- safeSetInput(componentRef, 'emptySrc', emptyImageSrc(node, src, label));
4833
- }
4863
+ // Empty images (DS3): a MARKED Image shows the shared placeholder whenever its source is empty —
4864
+ // the "Add image" label on the editing canvas, the bare blank anywhere else (Preview), which is
4865
+ // what the live site shows. An unmarked Image gets null and renders exactly as before. Set from
4866
+ // the marker alone, so a source cleared later (Bindings) shows it with no re-render.
4867
+ syncEmptyImagePlaceholder(componentRef, node, this.onCanvas ? canvasEmptyImageLabel(this.labels) : null);
4834
4868
  // Build initial style map from styleTraits defaults.
4835
4869
  const initialStyle = {};
4836
4870
  if (node.styleTraits?.length) {
@@ -7671,7 +7705,7 @@ class SectionComponent {
7671
7705
  }
7672
7706
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: SectionComponent, deps: [{ token: i0.ElementRef }, { token: DragEngineService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
7673
7707
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.31", type: SectionComponent, isStandalone: false, selector: "section[iox-section]", inputs: { children: "children", style: "style", nodeId: "nodeId", dropListId: "dropListId" }, outputs: { childClick: "childClick", childMouseEnter: "childMouseEnter", childMouseLeave: "childMouseLeave" }, host: { properties: { "class": "'section-root iox-node-' + nodeId + (listOrientation === 'horizontal' ? ' is-horizontal' : '')" } }, ngImport: i0, template: `
7674
- <div *ngIf="!children.length" class="section-placeholder">
7708
+ <div *ngIf="!children.length" class="section-placeholder" data-iox-chrome>
7675
7709
  <i class="ph-thin ph-rows"></i>
7676
7710
  <span>Drop components here</span>
7677
7711
  </div>
@@ -7689,7 +7723,7 @@ class SectionComponent {
7689
7723
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: SectionComponent, decorators: [{
7690
7724
  type: Component,
7691
7725
  args: [{ selector: 'section[iox-section]', template: `
7692
- <div *ngIf="!children.length" class="section-placeholder">
7726
+ <div *ngIf="!children.length" class="section-placeholder" data-iox-chrome>
7693
7727
  <i class="ph-thin ph-rows"></i>
7694
7728
  <span>Drop components here</span>
7695
7729
  </div>
@@ -7777,7 +7811,7 @@ class BuilderContainerComponent {
7777
7811
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.31", type: BuilderContainerComponent, isStandalone: false, selector: "div[iox-container],section[iox-container],article[iox-container],header[iox-container],footer[iox-container],main[iox-container],nav[iox-container],ul[iox-container],ol[iox-container],li[iox-container],form[iox-container]", inputs: { children: "children", style: "style", nodeId: "nodeId", dropListId: "dropListId", htmlTag: "htmlTag", start: "start", reversed: "reversed", formClass: "formClass", formState: "formState" }, outputs: { childClick: "childClick", childMouseEnter: "childMouseEnter", childMouseLeave: "childMouseLeave" }, host: { properties: { "class": "'container-root iox-node-' + nodeId + (listOrientation === 'horizontal' ? ' is-horizontal' : '') + (formClass ? ' ' + formClass : '')", "attr.data-iox-state": "formClass === \"iox-form\" ? formState : null", "attr.start": "htmlTag === 'ol' && start !== 1 ? start : null", "attr.reversed": "htmlTag === 'ol' && reversed ? '' : null" } }, ngImport: i0, template: `
7778
7812
  <!-- Empty-container slot (B2). pointer-events:none, so a click falls through and SELECTS
7779
7813
  this container — and the components panel then inserts INSIDE it. -->
7780
- <div *ngIf="!children.length" class="container-placeholder">
7814
+ <div *ngIf="!children.length" class="container-placeholder" data-iox-chrome>
7781
7815
  <i class="ph-thin ph-plus"></i>
7782
7816
  <span>Click to select, then add an element</span>
7783
7817
  </div>
@@ -7800,7 +7834,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
7800
7834
  args: [{ selector: 'div[iox-container],section[iox-container],article[iox-container],header[iox-container],footer[iox-container],main[iox-container],nav[iox-container],ul[iox-container],ol[iox-container],li[iox-container],form[iox-container]', template: `
7801
7835
  <!-- Empty-container slot (B2). pointer-events:none, so a click falls through and SELECTS
7802
7836
  this container — and the components panel then inserts INSIDE it. -->
7803
- <div *ngIf="!children.length" class="container-placeholder">
7837
+ <div *ngIf="!children.length" class="container-placeholder" data-iox-chrome>
7804
7838
  <i class="ph-thin ph-plus"></i>
7805
7839
  <span>Click to select, then add an element</span>
7806
7840
  </div>
@@ -7884,6 +7918,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
7884
7918
  type: Output
7885
7919
  }] } });
7886
7920
 
7921
+ /** `click` covers plain and modified clicks; a middle click opens a tab through `auxclick` alone. */
7922
+ const NAVIGATING_CLICKS = ['click', 'auxclick'];
7887
7923
  class BuilderLinkedContainerComponent {
7888
7924
  constructor(dragEngine, cdr, elRef, isPreview) {
7889
7925
  this.dragEngine = dragEngine;
@@ -7905,12 +7941,14 @@ class BuilderLinkedContainerComponent {
7905
7941
  }
7906
7942
  ngOnInit() {
7907
7943
  if (!this.isPreview) {
7908
- this.elRef.nativeElement.addEventListener('click', this.capturePreventDefault, true);
7944
+ for (const type of NAVIGATING_CLICKS)
7945
+ this.elRef.nativeElement.addEventListener(type, this.capturePreventDefault, true);
7909
7946
  }
7910
7947
  }
7911
7948
  ngOnDestroy() {
7912
7949
  if (!this.isPreview) {
7913
- this.elRef.nativeElement.removeEventListener('click', this.capturePreventDefault, true);
7950
+ for (const type of NAVIGATING_CLICKS)
7951
+ this.elRef.nativeElement.removeEventListener(type, this.capturePreventDefault, true);
7914
7952
  }
7915
7953
  }
7916
7954
  get resolvedHref() {
@@ -7941,7 +7979,7 @@ class BuilderLinkedContainerComponent {
7941
7979
  [ioxDropzoneData]="children"
7942
7980
  (ioxDrop)="onDrop($event)">
7943
7981
 
7944
- <div *ngIf="!children.length" class="linked-container-placeholder">
7982
+ <div *ngIf="!children.length" class="linked-container-placeholder" data-iox-chrome>
7945
7983
  <i class="ph-thin ph-link"></i>
7946
7984
  <span>Drop components here</span>
7947
7985
  </div>
@@ -7970,7 +8008,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
7970
8008
  [ioxDropzoneData]="children"
7971
8009
  (ioxDrop)="onDrop($event)">
7972
8010
 
7973
- <div *ngIf="!children.length" class="linked-container-placeholder">
8011
+ <div *ngIf="!children.length" class="linked-container-placeholder" data-iox-chrome>
7974
8012
  <i class="ph-thin ph-link"></i>
7975
8013
  <span>Drop components here</span>
7976
8014
  </div>
@@ -8370,7 +8408,7 @@ class BuilderRepeaterComponent {
8370
8408
  <div class="repeater-wrapper" [class.has-children]="children.length > 0">
8371
8409
 
8372
8410
  <!-- HAS-CHILDREN: badge outside root, absolute over wrapper -->
8373
- <div *ngIf="children.length > 0" class="repeater-badge">
8411
+ <div *ngIf="children.length > 0" class="repeater-badge" data-iox-chrome>
8374
8412
  <ng-container *ngTemplateOutlet="badgeContent"></ng-container>
8375
8413
  </div>
8376
8414
 
@@ -8384,10 +8422,10 @@ class BuilderRepeaterComponent {
8384
8422
 
8385
8423
  <!-- EMPTY STATE: badge + placeholder inside root -->
8386
8424
  <ng-container *ngIf="!children.length">
8387
- <div class="repeater-badge">
8425
+ <div class="repeater-badge" data-iox-chrome>
8388
8426
  <ng-container *ngTemplateOutlet="badgeContent"></ng-container>
8389
8427
  </div>
8390
- <div class="repeater-placeholder">
8428
+ <div class="repeater-placeholder" data-iox-chrome>
8391
8429
  <i class="ph-thin ph-rows"></i>
8392
8430
  <span>Drop a component here as the item template</span>
8393
8431
  </div>
@@ -8452,7 +8490,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
8452
8490
  <div class="repeater-wrapper" [class.has-children]="children.length > 0">
8453
8491
 
8454
8492
  <!-- HAS-CHILDREN: badge outside root, absolute over wrapper -->
8455
- <div *ngIf="children.length > 0" class="repeater-badge">
8493
+ <div *ngIf="children.length > 0" class="repeater-badge" data-iox-chrome>
8456
8494
  <ng-container *ngTemplateOutlet="badgeContent"></ng-container>
8457
8495
  </div>
8458
8496
 
@@ -8466,10 +8504,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
8466
8504
 
8467
8505
  <!-- EMPTY STATE: badge + placeholder inside root -->
8468
8506
  <ng-container *ngIf="!children.length">
8469
- <div class="repeater-badge">
8507
+ <div class="repeater-badge" data-iox-chrome>
8470
8508
  <ng-container *ngTemplateOutlet="badgeContent"></ng-container>
8471
8509
  </div>
8472
- <div class="repeater-placeholder">
8510
+ <div class="repeater-placeholder" data-iox-chrome>
8473
8511
  <i class="ph-thin ph-rows"></i>
8474
8512
  <span>Drop a component here as the item template</span>
8475
8513
  </div>
@@ -8575,7 +8613,7 @@ class BuilderButtonBlockComponent {
8575
8613
  }
8576
8614
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: BuilderButtonBlockComponent, deps: [{ token: i0.ElementRef }, { token: DragEngineService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
8577
8615
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.31", type: BuilderButtonBlockComponent, isStandalone: false, selector: "button[iox-button-block],a[iox-button-block]", inputs: { children: "children", style: "style", tag: "tag", href: "href", target: "target", type: "type", nodeId: "nodeId", dropListId: "dropListId" }, outputs: { childClick: "childClick", childMouseEnter: "childMouseEnter", childMouseLeave: "childMouseLeave" }, host: { properties: { "class": "'button-block-root iox-node-' + nodeId", "attr.href": "tag === 'a' ? (href || null) : null", "attr.target": "tag === 'a' ? (target || null) : null", "attr.type": "tag === 'a' ? null : type" } }, ngImport: i0, template: `
8578
- <span *ngIf="!children.length" class="button-block-placeholder">Button</span>
8616
+ <span *ngIf="!children.length" class="button-block-placeholder" data-iox-chrome>Button</span>
8579
8617
 
8580
8618
  <!-- WRAPPER COLLAPSE (task 9c): render children directly into the host; iox-outer + drag land
8581
8619
  on each child's host (via ioxDragSourceId), matching the SSR engine. -->
@@ -8591,7 +8629,7 @@ class BuilderButtonBlockComponent {
8591
8629
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: BuilderButtonBlockComponent, decorators: [{
8592
8630
  type: Component,
8593
8631
  args: [{ selector: 'button[iox-button-block],a[iox-button-block]', template: `
8594
- <span *ngIf="!children.length" class="button-block-placeholder">Button</span>
8632
+ <span *ngIf="!children.length" class="button-block-placeholder" data-iox-chrome>Button</span>
8595
8633
 
8596
8634
  <!-- WRAPPER COLLAPSE (task 9c): render children directly into the host; iox-outer + drag land
8597
8635
  on each child's host (via ioxDragSourceId), matching the SSR engine. -->
@@ -8742,7 +8780,7 @@ class BuilderDialogComponent {
8742
8780
  <i class="ph-thin ph-x"></i>
8743
8781
  </button>
8744
8782
 
8745
- <div *ngIf="!children.length" class="dialog-placeholder">
8783
+ <div *ngIf="!children.length" class="dialog-placeholder" data-iox-chrome>
8746
8784
  <i class="ph-thin ph-browser"></i>
8747
8785
  <span>Drop components here</span>
8748
8786
  </div>
@@ -8778,7 +8816,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
8778
8816
  <i class="ph-thin ph-x"></i>
8779
8817
  </button>
8780
8818
 
8781
- <div *ngIf="!children.length" class="dialog-placeholder">
8819
+ <div *ngIf="!children.length" class="dialog-placeholder" data-iox-chrome>
8782
8820
  <i class="ph-thin ph-browser"></i>
8783
8821
  <span>Drop components here</span>
8784
8822
  </div>
@@ -9218,7 +9256,7 @@ class SliderContainerComponent {
9218
9256
  (ioxDrop)="onDrop($event)">
9219
9257
 
9220
9258
  <!-- Repeat badge: hover-only, anchored top-left of shell -->
9221
- <div *ngIf="source" class="slider-repeat-badge">
9259
+ <div *ngIf="source" class="slider-repeat-badge" data-iox-chrome>
9222
9260
  <i class="ph-thin ph-repeat"></i>
9223
9261
  <span>{{ source }}</span>
9224
9262
  <span *ngIf="items.length" class="slider-repeat-badge-count">&times; {{ items.length }}</span>
@@ -9276,7 +9314,7 @@ class SliderContainerComponent {
9276
9314
 
9277
9315
  </div>
9278
9316
 
9279
- <div *ngIf="!source && !children.length" class="slider-edit-placeholder">
9317
+ <div *ngIf="!source && !children.length" class="slider-edit-placeholder" data-iox-chrome>
9280
9318
  <i class="ph-thin ph-sliders-horizontal"></i>
9281
9319
  <span>Click + in toolbar to add a slide</span>
9282
9320
  </div>
@@ -9369,7 +9407,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
9369
9407
  (ioxDrop)="onDrop($event)">
9370
9408
 
9371
9409
  <!-- Repeat badge: hover-only, anchored top-left of shell -->
9372
- <div *ngIf="source" class="slider-repeat-badge">
9410
+ <div *ngIf="source" class="slider-repeat-badge" data-iox-chrome>
9373
9411
  <i class="ph-thin ph-repeat"></i>
9374
9412
  <span>{{ source }}</span>
9375
9413
  <span *ngIf="items.length" class="slider-repeat-badge-count">&times; {{ items.length }}</span>
@@ -9427,7 +9465,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
9427
9465
 
9428
9466
  </div>
9429
9467
 
9430
- <div *ngIf="!source && !children.length" class="slider-edit-placeholder">
9468
+ <div *ngIf="!source && !children.length" class="slider-edit-placeholder" data-iox-chrome>
9431
9469
  <i class="ph-thin ph-sliders-horizontal"></i>
9432
9470
  <span>Click + in toolbar to add a slide</span>
9433
9471
  </div>
@@ -9613,24 +9651,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
9613
9651
  }] } });
9614
9652
 
9615
9653
  class SliderSlideComponent {
9616
- constructor(dragEngine, cdr, isPreview) {
9654
+ constructor(dragEngine, cdr) {
9617
9655
  this.dragEngine = dragEngine;
9618
9656
  this.cdr = cdr;
9619
- this.isPreview = isPreview;
9620
9657
  this.children = [];
9621
9658
  this.nodeId = '';
9622
9659
  this.dropListId = '';
9623
9660
  this.childClick = new EventEmitter();
9624
9661
  this.childMouseEnter = new EventEmitter();
9625
9662
  this.childMouseLeave = new EventEmitter();
9626
- this.isPreview = !!isPreview;
9627
9663
  }
9628
9664
  ngOnInit() { }
9629
9665
  ngOnDestroy() { }
9630
9666
  onDrop(event) {
9631
9667
  this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);
9632
9668
  }
9633
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: SliderSlideComponent, deps: [{ token: DragEngineService }, { token: i0.ChangeDetectorRef }, { token: IS_PREVIEW, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
9669
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: SliderSlideComponent, deps: [{ token: DragEngineService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
9634
9670
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.31", type: SliderSlideComponent, isStandalone: false, selector: "app-slider-slide", inputs: { children: "children", nodeId: "nodeId", dropListId: "dropListId" }, outputs: { childClick: "childClick", childMouseEnter: "childMouseEnter", childMouseLeave: "childMouseLeave" }, ngImport: i0, template: `
9635
9671
  <!-- The .swiper-slide wrapper (with the iox-outer-* class) is provided by SliderContainer —
9636
9672
  Swiper needs it as a direct child of .swiper-wrapper — and the SLIDE'S size lands there
@@ -9645,7 +9681,7 @@ class SliderSlideComponent {
9645
9681
  [ioxDropzoneData]="children"
9646
9682
  (ioxDrop)="onDrop($event)">
9647
9683
 
9648
- <div *ngIf="!children.length" class="slide-placeholder">
9684
+ <div *ngIf="!children.length" class="slide-placeholder" data-iox-chrome>
9649
9685
  <i class="ph-thin ph-image"></i>
9650
9686
  <span>Drop components here</span>
9651
9687
  </div>
@@ -9681,7 +9717,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
9681
9717
  [ioxDropzoneData]="children"
9682
9718
  (ioxDrop)="onDrop($event)">
9683
9719
 
9684
- <div *ngIf="!children.length" class="slide-placeholder">
9720
+ <div *ngIf="!children.length" class="slide-placeholder" data-iox-chrome>
9685
9721
  <i class="ph-thin ph-image"></i>
9686
9722
  <span>Drop components here</span>
9687
9723
  </div>
@@ -9700,12 +9736,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
9700
9736
  </div>
9701
9737
  </div>
9702
9738
  `, standalone: false, styles: [":where(.slide-edit-block){position:relative;box-sizing:border-box;display:flex;align-items:center;justify-content:center;overflow:hidden;width:100%;background-color:var(--p-surface-300)}.slide-placeholder{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;border:1.5px dashed rgba(100,116,139,.35);border-radius:4px;color:#64748b80;font-size:12px;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:0;transition:opacity .15s}:host:hover .slide-placeholder,:host.iox-drag-over .slide-placeholder{opacity:1}.slide-placeholder i{font-size:22px}\n"] }]
9703
- }], ctorParameters: () => [{ type: DragEngineService }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
9704
- type: Optional
9705
- }, {
9706
- type: Inject,
9707
- args: [IS_PREVIEW]
9708
- }] }], propDecorators: { children: [{
9739
+ }], ctorParameters: () => [{ type: DragEngineService }, { type: i0.ChangeDetectorRef }], propDecorators: { children: [{
9709
9740
  type: Input
9710
9741
  }], nodeId: [{
9711
9742
  type: Input
@@ -11456,5 +11487,5 @@ class BuilderSpacerComponentConfig extends ComponentConfig {
11456
11487
  * Generated bundle index. Do not edit.
11457
11488
  */
11458
11489
 
11459
- export { ACTION_TYPE_OPTIONS, AuditCode, AuditPanelComponent, AuditSeverity, BODY_CRUMB_LABEL, BREAKPOINT_PRESENTATION, BUILDER_CANVAS_CONTAINER, BUILDER_CHROME_EN, BUILDER_FONT_LINK_ATTR, BUILDER_TOKEN_SCOPE_CLASS, BackgroundGroupStyleConfig, BorderGroupStyleConfig, BreadcrumbBarComponent, BuilderButtonBlockComponent, BuilderButtonComponentConfig, BuilderClipboardService, BuilderComponent, BuilderContainerComponent, BuilderContainerComponentConfig, BuilderDataSourceService, BuilderDialogComponent, BuilderDividerComponentConfig, BuilderHeadingComponentConfig, BuilderHistoryService, BuilderIconComponentConfig, BuilderImageComponentConfig, BuilderLinkComponentConfig, BuilderLinkedContainerComponent, BuilderLinkedContainerConfig, BuilderListComponentConfig, BuilderListItemComponentConfig, BuilderMode, BuilderRepeaterComponent, BuilderSpacerComponentConfig, ButtonBlockComponentConfig, CardComponentConfig, ChildLayoutGroupStyleConfig, ComponentConfig, ComponentRegistryService, DEFAULT_ESSENTIAL_TRAITS, DRAG_HANDLE_ATTR, DataSourceRegistryService, DataSourceType, DialogComponentConfig, DimensionsGroupStyleConfig, DragEngineService, EASING_OPTIONS$1 as EASING_OPTIONS, ESSENTIAL_TRAITS_BY_TYPE, EffectsGroupStyleConfig, FIELD_KIND_PRESETS, FIELD_PARTS, FORM_PRESETS, FORM_TYPE, FieldComponentConfig, FieldGroupComponentConfig, FormComponentConfig, FormErrorComponentConfig, FormStateService, FormSuccessComponentConfig, GalleryConfig, GroupStyleConfig, INTERACTION_STATES, INVERSE_ACTION, IOX_BUILDER_CANVAS, IOX_BUILDER_LABELS, IOX_DATA_SOURCE_ENDPOINTS, IOX_FONT_MANAGER, InteractionEngineService, InteractionPresetRegistryService, IoxBuilderModule, IoxDraggableDirective, IoxDropzoneDirective, LAYOUT_PRESETS, LayerTreeComponent, LayoutGroupStyleConfig, ListGroupStyleConfig, NodeAction, OverlayComponent, OverlayService, PALETTE_PRESET_DEFS, PanelChildComponent, PanelComponent, PanelEventService, PanelEventTypes, PanelTypes, PositionGroupStyleConfig, PresetRegistryService, RELATIONAL_STATES, RELATIONAL_STATE_BASE, ROUTE_ANIMATION_OPTIONS, RenderDirective, RepeaterComponentConfig, SCREEN_WIDTH_OPTIONS, STRUCTURAL_STATES, SUPPORTED_STATES, SectionComponent, SectionComponentConfig, SizeGroupStyleConfig, SliderContainerComponent, SliderContainerConfig, SliderSlideComponent, SliderSlideConfig, SpacingGroupStyleConfig, StyleCategory, StyleRegistryService, TraitConfig as StyleTraitConfig, SubmitButtonComponentConfig, SymbolRegistryService, TARGETED_STATES, TARGETED_STATE_BASE, TRIGGER_OPTIONS, TextBlockComponentConfig, ToolbarAction, ToolbarComponent, TraitConfig, TraitInputType, TypographyGroupStyleConfig, UNITS_ALL, UNITS_DEG, UNITS_FIXED, UNITS_NO_VW, VALIDATION_STATES, VALIDATION_STATE_CLASS, ViewportService, ZOOM_OPTIONS, arrayItemSchemaFields, arraySchemaFields, auditNodes, buildConsentPreset, buildFieldKindPreset, buildFlavorSampler, buildFormPreset, buildFullStyleTraits, buildLayoutPreset, buildPalettePreset, buildPresetStyleTraits, canFluidise, collapseColumnsProps, columnCountOf, defaultBuilderLabels, defaultPageSettings, dropTargetLabel, essentialTraitsFor, findNodeLocation, findParentOf, flattenSchemaFields, fluidiseProps, generateNodeId, isHiddenAt, matchesControlSearch, nearestFormNode, nodeAncestorPath, nodeAncestorPathInEither, reorderProps, resolveInsertTarget, resolveTraitControllerType, resolveTraitOptions, setStyleTrait, setTrait, stackChildrenProps, summarise, textNode, visibilityProps, wrapNode };
11490
+ export { ACTION_TYPE_OPTIONS, AuditCode, AuditPanelComponent, AuditSeverity, BODY_CRUMB_LABEL, BREAKPOINT_PRESENTATION, BUILDER_CANVAS_CONTAINER, BUILDER_CHROME_EN, BUILDER_FONT_LINK_ATTR, BUILDER_TOKEN_SCOPE_CLASS, BackgroundGroupStyleConfig, BorderGroupStyleConfig, BreadcrumbBarComponent, BuilderButtonBlockComponent, BuilderButtonComponentConfig, BuilderClipboardService, BuilderComponent, BuilderContainerComponent, BuilderContainerComponentConfig, BuilderDataSourceService, BuilderDialogComponent, BuilderDividerComponentConfig, BuilderHeadingComponentConfig, BuilderHistoryService, BuilderIconComponentConfig, BuilderImageComponentConfig, BuilderLinkComponentConfig, BuilderLinkedContainerComponent, BuilderLinkedContainerConfig, BuilderListComponentConfig, BuilderListItemComponentConfig, BuilderMode, BuilderRepeaterComponent, BuilderSpacerComponentConfig, ButtonBlockComponentConfig, CANVAS_EMPTY_IMAGE_LABEL_EN, CANVAS_EMPTY_IMAGE_LABEL_KEY, CardComponentConfig, ChildLayoutGroupStyleConfig, ComponentConfig, ComponentRegistryService, DEFAULT_ESSENTIAL_TRAITS, DRAG_HANDLE_ATTR, DataSourceRegistryService, DataSourceType, DialogComponentConfig, DimensionsGroupStyleConfig, DragEngineService, EASING_OPTIONS$1 as EASING_OPTIONS, EDITOR_CHROME_ATTRIBUTE, ESSENTIAL_TRAITS_BY_TYPE, EffectsGroupStyleConfig, FIELD_KIND_PRESETS, FIELD_PARTS, FORM_PRESETS, FORM_TYPE, FieldComponentConfig, FieldGroupComponentConfig, FormComponentConfig, FormErrorComponentConfig, FormStateService, FormSuccessComponentConfig, GalleryConfig, GroupStyleConfig, INTERACTION_STATES, INVERSE_ACTION, IOX_BUILDER_CANVAS, IOX_BUILDER_LABELS, IOX_DATA_SOURCE_ENDPOINTS, IOX_FONT_MANAGER, InteractionEngineService, InteractionPresetRegistryService, IoxBuilderModule, IoxDraggableDirective, IoxDropzoneDirective, LAYOUT_PRESETS, LayerTreeComponent, LayoutGroupStyleConfig, ListGroupStyleConfig, NodeAction, OverlayComponent, OverlayService, PALETTE_PRESET_DEFS, PanelChildComponent, PanelComponent, PanelEventService, PanelEventTypes, PanelTypes, PositionGroupStyleConfig, PresetRegistryService, RELATIONAL_STATES, RELATIONAL_STATE_BASE, ROUTE_ANIMATION_OPTIONS, RenderDirective, RepeaterComponentConfig, SCREEN_WIDTH_OPTIONS, STRUCTURAL_STATES, SUPPORTED_STATES, SectionComponent, SectionComponentConfig, SizeGroupStyleConfig, SliderContainerComponent, SliderContainerConfig, SliderSlideComponent, SliderSlideConfig, SpacingGroupStyleConfig, StyleCategory, StyleRegistryService, TraitConfig as StyleTraitConfig, SubmitButtonComponentConfig, SymbolRegistryService, TARGETED_STATES, TARGETED_STATE_BASE, TRIGGER_OPTIONS, TextBlockComponentConfig, ToolbarAction, ToolbarComponent, TraitConfig, TraitInputType, TypographyGroupStyleConfig, UNITS_ALL, UNITS_DEG, UNITS_FIXED, UNITS_NO_VW, VALIDATION_STATES, VALIDATION_STATE_CLASS, ViewportService, ZOOM_OPTIONS, arrayItemSchemaFields, arraySchemaFields, auditNodes, buildConsentPreset, buildFieldKindPreset, buildFlavorSampler, buildFormPreset, buildFullStyleTraits, buildLayoutPreset, buildPalettePreset, buildPresetStyleTraits, canFluidise, canvasEmptyImageLabel, collapseColumnsProps, columnCountOf, defaultBuilderLabels, defaultPageSettings, dropTargetLabel, essentialTraitsFor, findNodeLocation, findParentOf, flattenSchemaFields, fluidiseProps, generateNodeId, isHiddenAt, matchesControlSearch, nearestFormNode, nodeAncestorPath, nodeAncestorPathInEither, reorderProps, resolveInsertTarget, resolveTraitControllerType, resolveTraitOptions, setStyleTrait, setTrait, stackChildrenProps, summarise, syncEmptyImagePlaceholder, syncNodeDesign, textNode, visibilityProps, wrapNode };
11460
11491
  //# sourceMappingURL=vectoriox-iox-builder.mjs.map