@vectoriox/iox-builder 5.2.0 → 5.3.1

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,34 @@ 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
+ // Panels hold the selected node's ref untyped; anything without a component type has no inputs.
4637
+ if (!ref?.componentType || !declaredInputNames(ref.componentType).has(EMPTY_SRC_INPUT))
4638
+ return;
4639
+ ref.setInput(EMPTY_SRC_INPUT, emptyImagePlaceholder(node, emptyLabel));
4640
+ }
4641
+ /**
4642
+ * Everything a node's element style / colour scheme decides on its rendered host, in ONE call: the
4643
+ * design classes (marker + scheme) and the empty-image placeholder. Every place that switches or
4644
+ * resets a node's style on the canvas calls this, so an adopted Image gains its placeholder at once
4645
+ * instead of after a reload (DS3 D2).
4646
+ */
4647
+ function syncNodeDesign(ref, node, emptyLabel) {
4648
+ syncNodeDesignClasses(ref?.location?.nativeElement ?? null, node);
4649
+ syncEmptyImagePlaceholder(ref, node, emptyLabel);
4650
+ }
4651
+
4614
4652
  // Module-level counter — unique drop-list ID per Section instance across the whole app session.
4615
4653
  let dropListCounter = 0;
4616
4654
  /**
@@ -4823,14 +4861,11 @@ class RenderDirective {
4823
4861
  // safeSetInput for every component that does not declare it.
4824
4862
  if (node.responsive)
4825
4863
  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
- }
4864
+ // Empty images (DS3): a MARKED Image shows the shared placeholder whenever its source is empty —
4865
+ // the "Add image" label on the editing canvas, the bare blank anywhere else (Preview), which is
4866
+ // what the live site shows. An unmarked Image gets null and renders exactly as before. Set from
4867
+ // the marker alone, so a source cleared later (Bindings) shows it with no re-render.
4868
+ syncEmptyImagePlaceholder(componentRef, node, this.onCanvas ? canvasEmptyImageLabel(this.labels) : null);
4834
4869
  // Build initial style map from styleTraits defaults.
4835
4870
  const initialStyle = {};
4836
4871
  if (node.styleTraits?.length) {
@@ -7671,7 +7706,7 @@ class SectionComponent {
7671
7706
  }
7672
7707
  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
7708
  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">
7709
+ <div *ngIf="!children.length" class="section-placeholder" data-iox-chrome>
7675
7710
  <i class="ph-thin ph-rows"></i>
7676
7711
  <span>Drop components here</span>
7677
7712
  </div>
@@ -7689,7 +7724,7 @@ class SectionComponent {
7689
7724
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: SectionComponent, decorators: [{
7690
7725
  type: Component,
7691
7726
  args: [{ selector: 'section[iox-section]', template: `
7692
- <div *ngIf="!children.length" class="section-placeholder">
7727
+ <div *ngIf="!children.length" class="section-placeholder" data-iox-chrome>
7693
7728
  <i class="ph-thin ph-rows"></i>
7694
7729
  <span>Drop components here</span>
7695
7730
  </div>
@@ -7777,7 +7812,7 @@ class BuilderContainerComponent {
7777
7812
  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
7813
  <!-- Empty-container slot (B2). pointer-events:none, so a click falls through and SELECTS
7779
7814
  this container — and the components panel then inserts INSIDE it. -->
7780
- <div *ngIf="!children.length" class="container-placeholder">
7815
+ <div *ngIf="!children.length" class="container-placeholder" data-iox-chrome>
7781
7816
  <i class="ph-thin ph-plus"></i>
7782
7817
  <span>Click to select, then add an element</span>
7783
7818
  </div>
@@ -7800,7 +7835,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
7800
7835
  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
7836
  <!-- Empty-container slot (B2). pointer-events:none, so a click falls through and SELECTS
7802
7837
  this container — and the components panel then inserts INSIDE it. -->
7803
- <div *ngIf="!children.length" class="container-placeholder">
7838
+ <div *ngIf="!children.length" class="container-placeholder" data-iox-chrome>
7804
7839
  <i class="ph-thin ph-plus"></i>
7805
7840
  <span>Click to select, then add an element</span>
7806
7841
  </div>
@@ -7884,6 +7919,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
7884
7919
  type: Output
7885
7920
  }] } });
7886
7921
 
7922
+ /** `click` covers plain and modified clicks; a middle click opens a tab through `auxclick` alone. */
7923
+ const NAVIGATING_CLICKS = ['click', 'auxclick'];
7887
7924
  class BuilderLinkedContainerComponent {
7888
7925
  constructor(dragEngine, cdr, elRef, isPreview) {
7889
7926
  this.dragEngine = dragEngine;
@@ -7905,12 +7942,14 @@ class BuilderLinkedContainerComponent {
7905
7942
  }
7906
7943
  ngOnInit() {
7907
7944
  if (!this.isPreview) {
7908
- this.elRef.nativeElement.addEventListener('click', this.capturePreventDefault, true);
7945
+ for (const type of NAVIGATING_CLICKS)
7946
+ this.elRef.nativeElement.addEventListener(type, this.capturePreventDefault, true);
7909
7947
  }
7910
7948
  }
7911
7949
  ngOnDestroy() {
7912
7950
  if (!this.isPreview) {
7913
- this.elRef.nativeElement.removeEventListener('click', this.capturePreventDefault, true);
7951
+ for (const type of NAVIGATING_CLICKS)
7952
+ this.elRef.nativeElement.removeEventListener(type, this.capturePreventDefault, true);
7914
7953
  }
7915
7954
  }
7916
7955
  get resolvedHref() {
@@ -7941,7 +7980,7 @@ class BuilderLinkedContainerComponent {
7941
7980
  [ioxDropzoneData]="children"
7942
7981
  (ioxDrop)="onDrop($event)">
7943
7982
 
7944
- <div *ngIf="!children.length" class="linked-container-placeholder">
7983
+ <div *ngIf="!children.length" class="linked-container-placeholder" data-iox-chrome>
7945
7984
  <i class="ph-thin ph-link"></i>
7946
7985
  <span>Drop components here</span>
7947
7986
  </div>
@@ -7970,7 +8009,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
7970
8009
  [ioxDropzoneData]="children"
7971
8010
  (ioxDrop)="onDrop($event)">
7972
8011
 
7973
- <div *ngIf="!children.length" class="linked-container-placeholder">
8012
+ <div *ngIf="!children.length" class="linked-container-placeholder" data-iox-chrome>
7974
8013
  <i class="ph-thin ph-link"></i>
7975
8014
  <span>Drop components here</span>
7976
8015
  </div>
@@ -8370,7 +8409,7 @@ class BuilderRepeaterComponent {
8370
8409
  <div class="repeater-wrapper" [class.has-children]="children.length > 0">
8371
8410
 
8372
8411
  <!-- HAS-CHILDREN: badge outside root, absolute over wrapper -->
8373
- <div *ngIf="children.length > 0" class="repeater-badge">
8412
+ <div *ngIf="children.length > 0" class="repeater-badge" data-iox-chrome>
8374
8413
  <ng-container *ngTemplateOutlet="badgeContent"></ng-container>
8375
8414
  </div>
8376
8415
 
@@ -8384,10 +8423,10 @@ class BuilderRepeaterComponent {
8384
8423
 
8385
8424
  <!-- EMPTY STATE: badge + placeholder inside root -->
8386
8425
  <ng-container *ngIf="!children.length">
8387
- <div class="repeater-badge">
8426
+ <div class="repeater-badge" data-iox-chrome>
8388
8427
  <ng-container *ngTemplateOutlet="badgeContent"></ng-container>
8389
8428
  </div>
8390
- <div class="repeater-placeholder">
8429
+ <div class="repeater-placeholder" data-iox-chrome>
8391
8430
  <i class="ph-thin ph-rows"></i>
8392
8431
  <span>Drop a component here as the item template</span>
8393
8432
  </div>
@@ -8452,7 +8491,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
8452
8491
  <div class="repeater-wrapper" [class.has-children]="children.length > 0">
8453
8492
 
8454
8493
  <!-- HAS-CHILDREN: badge outside root, absolute over wrapper -->
8455
- <div *ngIf="children.length > 0" class="repeater-badge">
8494
+ <div *ngIf="children.length > 0" class="repeater-badge" data-iox-chrome>
8456
8495
  <ng-container *ngTemplateOutlet="badgeContent"></ng-container>
8457
8496
  </div>
8458
8497
 
@@ -8466,10 +8505,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
8466
8505
 
8467
8506
  <!-- EMPTY STATE: badge + placeholder inside root -->
8468
8507
  <ng-container *ngIf="!children.length">
8469
- <div class="repeater-badge">
8508
+ <div class="repeater-badge" data-iox-chrome>
8470
8509
  <ng-container *ngTemplateOutlet="badgeContent"></ng-container>
8471
8510
  </div>
8472
- <div class="repeater-placeholder">
8511
+ <div class="repeater-placeholder" data-iox-chrome>
8473
8512
  <i class="ph-thin ph-rows"></i>
8474
8513
  <span>Drop a component here as the item template</span>
8475
8514
  </div>
@@ -8575,7 +8614,7 @@ class BuilderButtonBlockComponent {
8575
8614
  }
8576
8615
  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
8616
  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>
8617
+ <span *ngIf="!children.length" class="button-block-placeholder" data-iox-chrome>Button</span>
8579
8618
 
8580
8619
  <!-- WRAPPER COLLAPSE (task 9c): render children directly into the host; iox-outer + drag land
8581
8620
  on each child's host (via ioxDragSourceId), matching the SSR engine. -->
@@ -8591,7 +8630,7 @@ class BuilderButtonBlockComponent {
8591
8630
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: BuilderButtonBlockComponent, decorators: [{
8592
8631
  type: Component,
8593
8632
  args: [{ selector: 'button[iox-button-block],a[iox-button-block]', template: `
8594
- <span *ngIf="!children.length" class="button-block-placeholder">Button</span>
8633
+ <span *ngIf="!children.length" class="button-block-placeholder" data-iox-chrome>Button</span>
8595
8634
 
8596
8635
  <!-- WRAPPER COLLAPSE (task 9c): render children directly into the host; iox-outer + drag land
8597
8636
  on each child's host (via ioxDragSourceId), matching the SSR engine. -->
@@ -8742,7 +8781,7 @@ class BuilderDialogComponent {
8742
8781
  <i class="ph-thin ph-x"></i>
8743
8782
  </button>
8744
8783
 
8745
- <div *ngIf="!children.length" class="dialog-placeholder">
8784
+ <div *ngIf="!children.length" class="dialog-placeholder" data-iox-chrome>
8746
8785
  <i class="ph-thin ph-browser"></i>
8747
8786
  <span>Drop components here</span>
8748
8787
  </div>
@@ -8778,7 +8817,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
8778
8817
  <i class="ph-thin ph-x"></i>
8779
8818
  </button>
8780
8819
 
8781
- <div *ngIf="!children.length" class="dialog-placeholder">
8820
+ <div *ngIf="!children.length" class="dialog-placeholder" data-iox-chrome>
8782
8821
  <i class="ph-thin ph-browser"></i>
8783
8822
  <span>Drop components here</span>
8784
8823
  </div>
@@ -9218,7 +9257,7 @@ class SliderContainerComponent {
9218
9257
  (ioxDrop)="onDrop($event)">
9219
9258
 
9220
9259
  <!-- Repeat badge: hover-only, anchored top-left of shell -->
9221
- <div *ngIf="source" class="slider-repeat-badge">
9260
+ <div *ngIf="source" class="slider-repeat-badge" data-iox-chrome>
9222
9261
  <i class="ph-thin ph-repeat"></i>
9223
9262
  <span>{{ source }}</span>
9224
9263
  <span *ngIf="items.length" class="slider-repeat-badge-count">&times; {{ items.length }}</span>
@@ -9276,7 +9315,7 @@ class SliderContainerComponent {
9276
9315
 
9277
9316
  </div>
9278
9317
 
9279
- <div *ngIf="!source && !children.length" class="slider-edit-placeholder">
9318
+ <div *ngIf="!source && !children.length" class="slider-edit-placeholder" data-iox-chrome>
9280
9319
  <i class="ph-thin ph-sliders-horizontal"></i>
9281
9320
  <span>Click + in toolbar to add a slide</span>
9282
9321
  </div>
@@ -9369,7 +9408,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
9369
9408
  (ioxDrop)="onDrop($event)">
9370
9409
 
9371
9410
  <!-- Repeat badge: hover-only, anchored top-left of shell -->
9372
- <div *ngIf="source" class="slider-repeat-badge">
9411
+ <div *ngIf="source" class="slider-repeat-badge" data-iox-chrome>
9373
9412
  <i class="ph-thin ph-repeat"></i>
9374
9413
  <span>{{ source }}</span>
9375
9414
  <span *ngIf="items.length" class="slider-repeat-badge-count">&times; {{ items.length }}</span>
@@ -9427,7 +9466,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
9427
9466
 
9428
9467
  </div>
9429
9468
 
9430
- <div *ngIf="!source && !children.length" class="slider-edit-placeholder">
9469
+ <div *ngIf="!source && !children.length" class="slider-edit-placeholder" data-iox-chrome>
9431
9470
  <i class="ph-thin ph-sliders-horizontal"></i>
9432
9471
  <span>Click + in toolbar to add a slide</span>
9433
9472
  </div>
@@ -9613,24 +9652,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
9613
9652
  }] } });
9614
9653
 
9615
9654
  class SliderSlideComponent {
9616
- constructor(dragEngine, cdr, isPreview) {
9655
+ constructor(dragEngine, cdr) {
9617
9656
  this.dragEngine = dragEngine;
9618
9657
  this.cdr = cdr;
9619
- this.isPreview = isPreview;
9620
9658
  this.children = [];
9621
9659
  this.nodeId = '';
9622
9660
  this.dropListId = '';
9623
9661
  this.childClick = new EventEmitter();
9624
9662
  this.childMouseEnter = new EventEmitter();
9625
9663
  this.childMouseLeave = new EventEmitter();
9626
- this.isPreview = !!isPreview;
9627
9664
  }
9628
9665
  ngOnInit() { }
9629
9666
  ngOnDestroy() { }
9630
9667
  onDrop(event) {
9631
9668
  this.dragEngine.handleDrop(this.children, event, this.dropListId, this.cdr);
9632
9669
  }
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 }); }
9670
+ 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
9671
  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
9672
  <!-- The .swiper-slide wrapper (with the iox-outer-* class) is provided by SliderContainer —
9636
9673
  Swiper needs it as a direct child of .swiper-wrapper — and the SLIDE'S size lands there
@@ -9645,7 +9682,7 @@ class SliderSlideComponent {
9645
9682
  [ioxDropzoneData]="children"
9646
9683
  (ioxDrop)="onDrop($event)">
9647
9684
 
9648
- <div *ngIf="!children.length" class="slide-placeholder">
9685
+ <div *ngIf="!children.length" class="slide-placeholder" data-iox-chrome>
9649
9686
  <i class="ph-thin ph-image"></i>
9650
9687
  <span>Drop components here</span>
9651
9688
  </div>
@@ -9681,7 +9718,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
9681
9718
  [ioxDropzoneData]="children"
9682
9719
  (ioxDrop)="onDrop($event)">
9683
9720
 
9684
- <div *ngIf="!children.length" class="slide-placeholder">
9721
+ <div *ngIf="!children.length" class="slide-placeholder" data-iox-chrome>
9685
9722
  <i class="ph-thin ph-image"></i>
9686
9723
  <span>Drop components here</span>
9687
9724
  </div>
@@ -9700,12 +9737,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
9700
9737
  </div>
9701
9738
  </div>
9702
9739
  `, 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: [{
9740
+ }], ctorParameters: () => [{ type: DragEngineService }, { type: i0.ChangeDetectorRef }], propDecorators: { children: [{
9709
9741
  type: Input
9710
9742
  }], nodeId: [{
9711
9743
  type: Input
@@ -11456,5 +11488,5 @@ class BuilderSpacerComponentConfig extends ComponentConfig {
11456
11488
  * Generated bundle index. Do not edit.
11457
11489
  */
11458
11490
 
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 };
11491
+ 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
11492
  //# sourceMappingURL=vectoriox-iox-builder.mjs.map