@vectoriox/iox-builder 9.8.0 → 9.9.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.
@@ -18,13 +18,13 @@ import { DialogModule } from 'primeng/dialog';
18
18
  import * as i1$1 from '@vectoriox/iox-ui';
19
19
  import { resolveBoundValue, VALIDATION_STATES as VALIDATION_STATES$1, VALIDATION_STATE_CLASS as VALIDATION_STATE_CLASS$1, DEFAULT_WIDTH_BY_TYPE, TEXT_DIRECTION_KEY, TEXT_ALIGN_KEY, TextAlign, COLOR_SCHEME_TRAIT, COLOR_SCHEMES, ColorScheme, LinkType, MAX_LINES_KEY, A11yTrait, BREAKPOINTS, Breakpoint, withSchemeInk, stripSuppressedProps, DeclarationContext, buildPartSelector, planResponsiveRules, resolveStyleProps, targetedStateSelector, stateSelectorSuffix, compileTokenCssBlocks, catalogFontId, fontsForTokens, GOOGLE_FONTS_FILE_ORIGIN, googleFontHref, compileDeclarations, wrapInBreakpointQuery, BreakpointQueryKind, NEW_NODE_STYLE_DEFAULTS, defaultElementStyleFor, applyElementStyle, planDataSource, dataSourcePlanToRequest, normalizeCollectionResult, resolveRepeaterItems, getByPath, computeRelative, ContextStore, ENTRANCE_ACTION_TYPES, EXIT_ACTION_TYPES, ComponentInstanceRegistryService, isActionEnabled, isContextAction, contextActionEffect, resolveContextValue, effectiveActionType, INTERACTION_HIDDEN_ATTRIBUTE, motionAllowed, finalKeyframe, keyframeStyleEntries, buildInteractionKeyframes, declaredInputNames, emptyImagePlaceholder, syncNodeDesignClasses, nodeTraitValue, syncNodeA11yAttributes, nodeA11yAttributes, safeSetInput, colorSchemeOf, composeVirtualTraits, withDefaultHoverTransition, stateNamesIn, partClassName, switchElementStyle, countOverrides, setOverride, breakpointDef, breakpointForWidth, FormRenderState, needsAccessibleName, resolveInputs, setInputOverride, barReserveClass, collectContextSlotKeys, withContextSlots, compilePageStyle, nodeUsesContext, IS_PREVIEW, buttonBlockHref, IoxPageModule, PALETTE_PRESETS, elementStyleById, PART_CLASS_NAMES } from '@vectoriox/iox-ui';
20
20
  export { ComponentInstanceRegistryService, VIRTUAL_TRAIT_KEYS, composeVirtualTraits } from '@vectoriox/iox-ui';
21
- import { structureRefusal, StructureEdit, isAccordionPart, AccordionRole, CompositeBehaviourTrait, ACCORDION_DEFAULT_ONS, onAccordionItemState, isAccordionItemOn, AccordionRuntime, accordionBehaviour, closestAccordionItem, isAccordionRoot, buildCardRecipe, buildBadge, buildChip, buildAccordionRecipe, accordionItemLabel, isLockedPart, accordionRootOf, isAccordionFromContent, accordionItemOf, addAccordionItem, accordionHeadingLevel } from '@vectoriox/iox-ui/composite-core';
21
+ import { StructureEdit, isAccordionPart, isDisclosurePart, structureRefusal, AccordionRole, CompositeBehaviourTrait, ACCORDION_DEFAULT_ONS, onAccordionItemState, isAccordionItemOn, runCompositeItemAction, shouldScrollToItem, DisclosureRole, AccordionRuntime, accordionBehaviour, compositeScopeId, compositeRowKeys, compositeKindOfRole, closestAccordionItem, isCompositeRoot, isAccordionRoot, buildCardRecipe, buildBadge, buildChip, buildAccordionRecipe, buildDisclosureRecipe, CompositeKind, accordionItemLabel, isLockedPart, accordionRootOf, isAccordionFromContent, accordionItemOf, addAccordionItem, isCompositeItem, accordionHeadingLevel, isCompositePanel, isCompositeTrigger } from '@vectoriox/iox-ui/composite-core';
22
22
  import { Subject, BehaviorSubject, of, forkJoin } from 'rxjs';
23
23
  import interact from 'interactjs';
24
24
  import { formContentInHost, isInteractiveHost, findFormContentInHosts } from '@vectoriox/iox-ui/forms-core';
25
25
  import { map, catchError } from 'rxjs/operators';
26
26
  import * as i1 from '@angular/common/http';
27
- import { BEHAVIOUR_ACTION_TYPES, SERVER_ELEMENT_ACTION_TYPES, CONSENT_ACTION_TYPES } from '@vectoriox/iox-ui/actions-core';
27
+ import { itemActionOf, BEHAVIOUR_ACTION_TYPES, SERVER_ELEMENT_ACTION_TYPES, CONSENT_ACTION_TYPES } from '@vectoriox/iox-ui/actions-core';
28
28
  import Lenis from 'lenis';
29
29
  import Moveable from 'moveable';
30
30
  import Selecto from 'selecto';
@@ -176,6 +176,10 @@ const IOX_BUILDER_LABELS = new InjectionToken('IOX_BUILDER_LABELS', {
176
176
  providedIn: 'root',
177
177
  factory: () => defaultBuilderLabels,
178
178
  });
179
+ const IOX_CONTENT_TYPE_LABELS = new InjectionToken('IOX_CONTENT_TYPE_LABELS', {
180
+ providedIn: 'root',
181
+ factory: () => () => null,
182
+ });
179
183
  /** Standalone behaviour: the English text the library ships with. */
180
184
  const defaultBuilderLabels = (_key, fallback) => fallback;
181
185
  /**
@@ -207,11 +211,14 @@ const BUILDER_CHROME_EN = Object.freeze({
207
211
  'builder.chrome.compositeRole': 'Composite role',
208
212
  'builder.chrome.kindCard': 'Card',
209
213
  'builder.chrome.kindAccordion': 'Accordion',
214
+ 'builder.chrome.kindDisclosure': 'Disclosure',
215
+ 'builder.chrome.refuseLockedDisclosurePart': 'A disclosure keeps its toggle and its panel. Delete the whole disclosure instead.',
216
+ 'builder.chrome.refuseLockedDisclosurePartMove': 'This part belongs to its disclosure — it can’t be moved out.',
210
217
  'builder.chrome.refuseLockedItemPart': 'An item keeps its header and its panel. Delete the whole item, or the accordion.',
211
218
  'builder.chrome.refuseLockedItemPartMove': 'This part belongs to its item — it can’t be moved out.',
212
219
  'builder.chrome.refuseLastItem': 'An accordion keeps at least one item. Delete the whole accordion instead.',
213
220
  'builder.chrome.addItem': 'Add item',
214
- 'builder.chrome.fromContent': 'From {alias} · {count} rows',
221
+ 'builder.chrome.fromContent': 'From {source} · {count} rows',
215
222
  'builder.chrome.emptySource': 'No rows in “{alias}”.',
216
223
  'builder.chrome.emptySourceHint': 'The {type} content type has no published items that match this source’s filters. Add items in Content ▸ {type}, or change the source.',
217
224
  'builder.chrome.fromRow': 'row {row} — every row wears this part',
@@ -244,6 +251,20 @@ const CANVAS_EMPTY_IMAGE_LABEL_EN = BUILDER_CHROME_EN[CANVAS_EMPTY_IMAGE_LABEL_K
244
251
  */
245
252
  const EDITOR_CHROME_ATTRIBUTE = 'data-iox-chrome';
246
253
 
254
+ /** The content type a data source reads (`faqs`), or '' for a source that reads none (external, static). */
255
+ function sourceContentType(ds) {
256
+ return ds?.request?.cms?.contentType || ds?.request?.shop?.contentType || '';
257
+ }
258
+ /**
259
+ * What the builder's chrome calls the list a source reads — the CONTENT TYPE's label ("From FAQ", board 3), as the
260
+ * host knows it (`IOX_CONTENT_TYPE_LABELS`), else the source's alias. ONE answer for the layer tree's
261
+ * "From FAQ · 3 rows", the Repeater's empty-source hint and the Items section's source options.
262
+ */
263
+ function sourceTypeLabel(alias, ds, resolve) {
264
+ const type = sourceContentType(ds);
265
+ return (type && resolve(type)) || alias;
266
+ }
267
+
247
268
  const freshId = () => Math.random().toString(36).substr(2, 9);
248
269
  /**
249
270
  * Assign fresh ids to a cloned ComponentNode subtree AND remap intra-subtree references to the
@@ -445,6 +466,10 @@ var InsertRefusal;
445
466
  InsertRefusal["LockedItemPart"] = "lockedItemPart";
446
467
  /** An accordion's LAST item (composite plan T11): it keeps at least one. */
447
468
  InsertRefusal["LastItem"] = "lastItem";
469
+ /** A disclosure's toggle or panel (CC2.1) moved out of it. */
470
+ InsertRefusal["LockedDisclosurePartMove"] = "lockedDisclosurePartMove";
471
+ /** A disclosure's toggle or panel (CC2.1) deleted on its own. */
472
+ InsertRefusal["LockedDisclosurePart"] = "lockedDisclosurePart";
448
473
  })(InsertRefusal || (InsertRefusal = {}));
449
474
  const FORM_STATE_BLOCK_TYPES = new Set(['FormSuccess', 'FormError']);
450
475
  /** The builder-chrome label that says each refusal on screen (English in `BUILDER_CHROME_EN`). */
@@ -457,7 +482,18 @@ const INSERT_REFUSAL_LABEL_KEYS = Object.freeze({
457
482
  [InsertRefusal.LockedItemPartMove]: 'builder.chrome.refuseLockedItemPartMove',
458
483
  [InsertRefusal.LockedItemPart]: 'builder.chrome.refuseLockedItemPart',
459
484
  [InsertRefusal.LastItem]: 'builder.chrome.refuseLastItem',
485
+ [InsertRefusal.LockedDisclosurePartMove]: 'builder.chrome.refuseLockedDisclosurePartMove',
486
+ [InsertRefusal.LockedDisclosurePart]: 'builder.chrome.refuseLockedDisclosurePart',
460
487
  });
488
+ /** Which refusal says a locked part's move / delete, by the composite it belongs to (a card's is the default). */
489
+ function lockedRefusal(node, edit) {
490
+ const move = edit === StructureEdit.Move;
491
+ if (isAccordionPart(node))
492
+ return move ? InsertRefusal.LockedItemPartMove : InsertRefusal.LockedItemPart;
493
+ if (isDisclosurePart(node))
494
+ return move ? InsertRefusal.LockedDisclosurePartMove : InsertRefusal.LockedDisclosurePart;
495
+ return move ? InsertRefusal.LockedPartMove : InsertRefusal.LockedPart;
496
+ }
461
497
  /** The refusal in the host's language (the library's English when no host resolver is provided). */
462
498
  function insertRefusalLabel(reason, labels = defaultBuilderLabels) {
463
499
  const key = INSERT_REFUSAL_LABEL_KEYS[reason];
@@ -484,7 +520,7 @@ function insertRefusal(node, ancestors) {
484
520
  if (formContentInHost(node, ancestors.some(isInteractiveHost)))
485
521
  return InsertRefusal.FormInInteractive;
486
522
  if (structureRefusal(node, StructureEdit.Move, ancestors))
487
- return isAccordionPart(node) ? InsertRefusal.LockedItemPartMove : InsertRefusal.LockedPartMove;
523
+ return lockedRefusal(node, StructureEdit.Move);
488
524
  return null;
489
525
  }
490
526
  /** Why `node` may not be REMOVED from where it is (deleted, cut, made global), or null when it may: a
@@ -492,7 +528,7 @@ function insertRefusal(node, ancestors) {
492
528
  * accordion keeps its last item. `siblings` = the list `node` sits in (where the caller has it). */
493
529
  function removalRefusal(node, siblings) {
494
530
  if (structureRefusal(node, StructureEdit.Delete))
495
- return isAccordionPart(node) ? InsertRefusal.LockedItemPart : InsertRefusal.LockedPart;
531
+ return lockedRefusal(node, StructureEdit.Delete);
496
532
  if (node?.role === AccordionRole.Item && siblings && siblings.filter(s => s?.role === AccordionRole.Item).length <= 1)
497
533
  return InsertRefusal.LastItem;
498
534
  return null;
@@ -600,6 +636,8 @@ const INVERSE_ACTION = {
600
636
  clearContext: 'setContext',
601
637
  openDialog: 'closeDialog',
602
638
  closeDialog: 'openDialog',
639
+ openItem: 'closeItem',
640
+ closeItem: 'openItem',
603
641
  };
604
642
  const TRIGGER_OPTIONS = [
605
643
  { value: 'pageLoad', label: 'Page load', icon: 'ph-thin ph-play' },
@@ -3679,8 +3717,11 @@ class InteractionEngineService {
3679
3717
  this.runActions(node, ix.actions, element);
3680
3718
  }
3681
3719
  };
3682
- element.addEventListener('click', handler);
3683
- return () => element.removeEventListener('click', handler);
3720
+ // CAPTURE, like the composite runtime: on the canvas every part's own listener stops the click to select
3721
+ // that part, so a click on a button's LABEL never bubbled to the button's click interaction — the live
3722
+ // site runs it (CC2.1: "Open an item" on a ButtonBlock did nothing on the canvas).
3723
+ element.addEventListener('click', handler, true);
3724
+ return () => element.removeEventListener('click', handler, true);
3684
3725
  }
3685
3726
  attachHover(node, ix, element) {
3686
3727
  const enterHandler = () => this.runActions(node, ix.actions, element);
@@ -3724,6 +3765,13 @@ class InteractionEngineService {
3724
3765
  this.executeDialogAction(action);
3725
3766
  continue;
3726
3767
  }
3768
+ // Item actions (CC2.1 — composite T14): the canvas RUNS them on the target item's own runtime — the
3769
+ // one the live site runs — and brings an item that opened out of view into it.
3770
+ const itemAction = itemActionOf(action.type);
3771
+ if (itemAction) {
3772
+ this.executeItemAction(node, action, itemAction, selfEl);
3773
+ continue;
3774
+ }
3727
3775
  // Tier-A behaviour (A1c). The canvas-is-live rules are catalog DATA
3728
3776
  // (ELEMENT_ACTION_DESCRIPTORS): copy runs, scrollTo runs (scrollIntoView — the frame
3729
3777
  // scrolls natively here; the Lenis rule is the LIVE side's), navigate and submitForm
@@ -3819,6 +3867,14 @@ class InteractionEngineService {
3819
3867
  }
3820
3868
  }
3821
3869
  }
3870
+ executeItemAction(node, action, itemAction, selfEl) {
3871
+ const target = this.resolveTarget(node, action, selfEl);
3872
+ const open = runCompositeItemAction(target, itemAction);
3873
+ if (!open || !target)
3874
+ return;
3875
+ if (shouldScrollToItem(target.getBoundingClientRect().top, window.innerHeight))
3876
+ target.scrollIntoView({ behavior: 'smooth', block: 'start' });
3877
+ }
3822
3878
  executeConsentAction(action) {
3823
3879
  if (action.type === 'openConsentPreferences') {
3824
3880
  const dialog = action.target && action.target !== 'self' ? this.instanceRegistry.get(action.target) : null;
@@ -4006,10 +4062,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
4006
4062
  * screen until something opens them, so on the canvas they show only while selected into or switched
4007
4063
  * open ("Showing on canvas"). The layer tree marks them with the eye-slash glyph. A Dialog (the mobile
4008
4064
  * menu's drawer, a consent banner) by its type; an Accordion's PANEL by its role (CC2 — closed until its
4009
- * item opens). An inactive tab joins in CC4.
4065
+ * item opens); a Disclosure's panel and its "Read less" word (CC2.1 — shown only while it is open). An inactive
4066
+ * tab joins in CC4.
4010
4067
  */
4011
4068
  const HIDDEN_AT_REST_TYPES = ['Dialog'];
4012
- const HIDDEN_AT_REST_ROLES = [AccordionRole.Panel];
4069
+ const HIDDEN_AT_REST_ROLES = [AccordionRole.Panel, DisclosureRole.Panel, DisclosureRole.Less];
4013
4070
  function isHiddenAtRest(node) {
4014
4071
  return (!!node?.type && HIDDEN_AT_REST_TYPES.includes(node.type)) || (!!node?.role && HIDDEN_AT_REST_ROLES.includes(node.role));
4015
4072
  }
@@ -4145,10 +4202,17 @@ function sameSet(a, b) {
4145
4202
  return a.size === b.size && [...a].every(id => b.has(id));
4146
4203
  }
4147
4204
 
4205
+ /** The node whose "Showing on canvas" choice a rendered root follows: itself, or — a preview row's copy — its
4206
+ * template (a copy shares its template's style id). */
4207
+ function designIdOf(node) {
4208
+ return node.__previewClone ? (node.styleId ?? node.id) : node.id;
4209
+ }
4148
4210
  /**
4149
- * The composites' runtime ON THE CANVAS (CC2) — the canvas is a live runtime, so an Accordion opens and
4150
- * closes on the canvas exactly as on the site: the SAME composite-core `AccordionRuntime` the live engine
4151
- * attaches. On top of the live state it shows what the author is designing (R2, CC1's design state):
4211
+ * The composites' runtime ON THE CANVAS (CC2) — the canvas is a live runtime, so an Accordion (and a Disclosure,
4212
+ * CC2.1) opens and closes on the canvas exactly as on the site: the SAME composite-core `AccordionRuntime` the live
4213
+ * engine attaches. A composite repeated in a Repeater's preview rows runs one per row, each with its own ARIA ids
4214
+ * (its row folded into the scope id — vectoriox/iox-ui#20). On top of the live state it shows what the author is
4215
+ * designing (R2, CC1's design state):
4152
4216
  * - selecting anything inside a CLOSED panel (canvas, tree, crumb, an Items row, SELECT_NODE) opens its item
4153
4217
  * while it is selected, and deselecting closes it again;
4154
4218
  * - "Showing on canvas ▸ All open" opens every item; "As saved" goes back to the saved default.
@@ -4166,18 +4230,21 @@ class CompositeCanvasService {
4166
4230
  for (const id of [...this.attached.keys()])
4167
4231
  this.detach(id);
4168
4232
  }
4169
- /** An accordion root rendered on the canvas: run it. `element` is the root's rendered element. */
4233
+ /** A composite root rendered on the canvas (the template, or a preview row's copy): run it. `element` is the
4234
+ * root's rendered element. Its ARIA ids are scoped by the preview rows it sits in. */
4170
4235
  attach(node, element) {
4171
4236
  if (!node.id)
4172
4237
  return;
4173
4238
  this.detach(node.id);
4239
+ const cssId = node.styleId ?? node.id;
4174
4240
  const runtime = this.zone.runOutsideAngular(() => new AccordionRuntime(element, {
4175
- rootId: node.styleId ?? node.id,
4241
+ kind: compositeKindOfRole(node.role) ?? undefined,
4242
+ rootId: () => compositeScopeId(cssId, compositeRowKeys(element)),
4176
4243
  behaviour: accordionBehaviour(node),
4177
4244
  observe: true,
4178
4245
  forced: () => this.forcedFor(node, element),
4179
4246
  }));
4180
- this.attached.set(node.id, { node, runtime, shown: this.designState?.shownState(node.id) ?? CanvasShowState.Closed });
4247
+ this.attached.set(node.id, { node, runtime, shown: this.designState?.shownState(designIdOf(node)) ?? CanvasShowState.Closed });
4181
4248
  }
4182
4249
  detach(nodeId) {
4183
4250
  if (!nodeId)
@@ -4195,8 +4262,8 @@ class CompositeCanvasService {
4195
4262
  return (nodeId && this.attached.get(nodeId)?.runtime) || null;
4196
4263
  }
4197
4264
  applyDesignState() {
4198
- for (const [id, entry] of this.attached) {
4199
- const shown = this.designState?.shownState(id) ?? CanvasShowState.Closed;
4265
+ for (const entry of this.attached.values()) {
4266
+ const shown = this.designState?.shownState(designIdOf(entry.node)) ?? CanvasShowState.Closed;
4200
4267
  // Back to "As saved": the saved default, whatever the author clicked open meanwhile (board 3).
4201
4268
  if (shown !== entry.shown && shown === CanvasShowState.Closed)
4202
4269
  entry.runtime.resetLive();
@@ -4206,7 +4273,8 @@ class CompositeCanvasService {
4206
4273
  }
4207
4274
  }
4208
4275
  /** The keys the design state holds open: every item ("All open"), or the items whose hidden part the
4209
- * selection sits in. A preview row shares its template's classes, so the template (row 1) answers. */
4276
+ * selection sits in. A preview row shares its template's classes, so the template (row 1) answers — and a
4277
+ * composite copied into a preview row follows its template's choice. */
4210
4278
  forcedFor(node, root) {
4211
4279
  const forced = new Set();
4212
4280
  const state = this.designState;
@@ -4214,7 +4282,7 @@ class CompositeCanvasService {
4214
4282
  return forced;
4215
4283
  const runtime = this.attached.get(node.id)?.runtime;
4216
4284
  const items = runtime?.items() ?? [];
4217
- if (state.shownState(node.id) === CanvasShowState.Open) {
4285
+ if (state.shownState(designIdOf(node)) === CanvasShowState.Open) {
4218
4286
  for (const item of items)
4219
4287
  forced.add(runtime.keyOf(item, items));
4220
4288
  return forced;
@@ -4735,8 +4803,10 @@ class RenderDirective {
4735
4803
  this.overlayService.triggerContextMenu(event.clientX, event.clientY);
4736
4804
  });
4737
4805
  }
4738
- // A composite root runs its behaviour on the canvas — the live site's runtime (CC2).
4739
- if (nativeEl && !isPreviewClone && node.id && isAccordionRoot(node) && this.compositeCanvas) {
4806
+ // A composite root runs its behaviour on the canvas — the live site's runtime (CC2; the Disclosure, CC2.1).
4807
+ // A preview row's copy runs too, scoped by its row (vectoriox/iox-ui#20): its ids are its own and it shows
4808
+ // the saved default, as every row does on the live site.
4809
+ if (nativeEl && node.id && isCompositeRoot(node) && this.compositeCanvas) {
4740
4810
  this.compositeCanvas.attach(node, nativeEl);
4741
4811
  this.compositeRootId = node.id;
4742
4812
  }
@@ -4859,6 +4929,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
4859
4929
 
4860
4930
  const EMPTY_SOURCE_KEY = 'builder.chrome.emptySource';
4861
4931
  const EMPTY_SOURCE_HINT_KEY = 'builder.chrome.emptySourceHint';
4932
+ const NO_TYPE_LABELS = () => null;
4862
4933
  class BuilderRepeaterComponent {
4863
4934
  get children() { return this._children; }
4864
4935
  /** RenderDirective sets `source` (→ fetchData) BEFORE `children`. With an async source the response
@@ -4880,8 +4951,9 @@ class BuilderRepeaterComponent {
4880
4951
  get emptySourceTitle() {
4881
4952
  return this.label(EMPTY_SOURCE_KEY).replace('{alias}', this._source);
4882
4953
  }
4954
+ /** "The FAQ content type has no published items…" — the type's LABEL (board 4), else the alias. */
4883
4955
  get emptySourceHint() {
4884
- const type = this.dsRegistry.findByAlias(this._source)?.request?.cms?.contentType ?? this._source;
4956
+ const type = sourceTypeLabel(this._source, this.dsRegistry.findByAlias(this._source), this.typeLabels ?? NO_TYPE_LABELS);
4885
4957
  return this.label(EMPTY_SOURCE_HINT_KEY).split('{type}').join(type);
4886
4958
  }
4887
4959
  label(key) {
@@ -4921,7 +4993,7 @@ class BuilderRepeaterComponent {
4921
4993
  this.fetchData();
4922
4994
  }
4923
4995
  }
4924
- constructor(dragEngine, overlayService, dataSourceService, dsRegistry, panelEventService, cdr, interactionEngine, labels) {
4996
+ constructor(dragEngine, overlayService, dataSourceService, dsRegistry, panelEventService, cdr, interactionEngine, labels, typeLabels) {
4925
4997
  this.dragEngine = dragEngine;
4926
4998
  this.overlayService = overlayService;
4927
4999
  this.dataSourceService = dataSourceService;
@@ -4930,6 +5002,7 @@ class BuilderRepeaterComponent {
4930
5002
  this.cdr = cdr;
4931
5003
  this.interactionEngine = interactionEngine;
4932
5004
  this.labels = labels;
5005
+ this.typeLabels = typeLabels;
4933
5006
  this._children = [];
4934
5007
  this.style = {};
4935
5008
  this.nodeId = '';
@@ -5070,7 +5143,7 @@ class BuilderRepeaterComponent {
5070
5143
  if (this.items.length)
5071
5144
  setTimeout(() => this.refreshPreviews());
5072
5145
  }
5073
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: BuilderRepeaterComponent, deps: [{ token: DragEngineService }, { token: OverlayService }, { token: BuilderDataSourceService }, { token: DataSourceRegistryService }, { token: PanelEventService }, { token: i0.ChangeDetectorRef }, { token: InteractionEngineService }, { token: IOX_BUILDER_LABELS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
5146
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: BuilderRepeaterComponent, deps: [{ token: DragEngineService }, { token: OverlayService }, { token: BuilderDataSourceService }, { token: DataSourceRegistryService }, { token: PanelEventService }, { token: i0.ChangeDetectorRef }, { token: InteractionEngineService }, { token: IOX_BUILDER_LABELS, optional: true }, { token: IOX_CONTENT_TYPE_LABELS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
5074
5147
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.31", type: BuilderRepeaterComponent, isStandalone: false, selector: "app-builder-repeater", inputs: { children: "children", style: "style", nodeId: "nodeId", dropListId: "dropListId", source: "source", sourcePath: "sourcePath", limit: "limit" }, outputs: { childClick: "childClick", childMouseEnter: "childMouseEnter", childMouseLeave: "childMouseLeave" }, ngImport: i0, template: `
5075
5148
  <ng-template #badgeContent>
5076
5149
  <i class="ph-thin ph-repeat"></i>
@@ -5261,6 +5334,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
5261
5334
  }, {
5262
5335
  type: Inject,
5263
5336
  args: [IOX_BUILDER_LABELS]
5337
+ }] }, { type: undefined, decorators: [{
5338
+ type: Optional
5339
+ }, {
5340
+ type: Inject,
5341
+ args: [IOX_CONTENT_TYPE_LABELS]
5264
5342
  }] }], propDecorators: { children: [{
5265
5343
  type: Input
5266
5344
  }], style: [{
@@ -5294,9 +5372,10 @@ var CompositePresetId;
5294
5372
  CompositePresetId["Badge"] = "badge";
5295
5373
  CompositePresetId["Chip"] = "chip";
5296
5374
  CompositePresetId["Accordion"] = "accordion";
5375
+ CompositePresetId["Disclosure"] = "disclosure";
5297
5376
  })(CompositePresetId || (CompositePresetId = {}));
5298
5377
  /** Where a composite sits in the Components panel (composite plan §6d): content blocks, or the interactive
5299
- * composites (the Accordion — CC2; Tabs and the floating family later). */
5378
+ * composites (the Accordion — CC2, the Disclosure — CC2.1; Tabs and the floating family later). */
5300
5379
  var CompositePaletteGroup;
5301
5380
  (function (CompositePaletteGroup) {
5302
5381
  CompositePaletteGroup["ContentBlocks"] = "content-blocks";
@@ -5323,6 +5402,11 @@ const COMPOSITE_PRESETS = Object.freeze([
5323
5402
  description: 'Questions that open — three items, one open at a time. Every header, icon and panel is its own element.',
5324
5403
  build: create => buildAccordionRecipe(create),
5325
5404
  },
5405
+ {
5406
+ id: CompositePresetId.Disclosure, group: CompositePaletteGroup.Interactive, name: 'Disclosure', icon: 'ph-thin ph-caret-circle-down',
5407
+ description: '"Read more" — a button that reveals the text below it and reads "Read less" while it is open.',
5408
+ build: create => buildDisclosureRecipe(create),
5409
+ },
5326
5410
  ]);
5327
5411
  /**
5328
5412
  * The builder's node factory for composite-core recipes: a NEW node as the palette creates one
@@ -6768,13 +6852,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
6768
6852
  * breadcrumb and the tree row's sub-label share these, so the four surfaces never disagree (board 3: "The
6769
6853
  * four surfaces, all driven by the same selection").
6770
6854
  *
6771
- * An accordion's parts are named by the part alone (`trigger`, "Accordion · trigger", board 3); a card keeps
6772
- * its full role (`card.title`, "Card · card.title", board 8).
6855
+ * An accordion's and a disclosure's parts are named by the part alone (`trigger`, "Accordion · trigger", board 3);
6856
+ * a card keeps its full role (`card.title`, "Card · card.title", board 8).
6773
6857
  */
6774
- const SHORT_ROLE_KINDS = new Set(['accordion']);
6858
+ const SHORT_ROLE_KINDS = new Set([CompositeKind.Accordion, CompositeKind.Disclosure]);
6775
6859
  /** A composite kind's glyph (Phosphor, weight-less): the badge, the root's crumb and its tree row carry it
6776
6860
  * (board 3: "the composite root carrying its kind icon"). A card keeps the generic stack glyph. */
6777
- const KIND_GLYPHS = { accordion: 'ph-rows' };
6861
+ const KIND_GLYPHS = { [CompositeKind.Accordion]: 'ph-rows', [CompositeKind.Disclosure]: 'ph-caret-circle-down' };
6778
6862
  const DEFAULT_KIND_GLYPH = 'ph-stack';
6779
6863
  /** The tree icon of an accordion's structural parts (board 3): rows on the root, a stack on an item and a
6780
6864
  * panel, a cursor on the header, a sparkle on the icon. Other parts keep their type's icon. */
@@ -6784,6 +6868,12 @@ const PART_ICONS = {
6784
6868
  [AccordionRole.Trigger]: 'ph-thin ph-cursor',
6785
6869
  [AccordionRole.Panel]: 'ph-thin ph-stack',
6786
6870
  [AccordionRole.Icon]: 'ph-thin ph-sparkle',
6871
+ // CC2.1 — the disclosure follows the accordion's drawn conventions (board 3): its kind glyph on the root, a
6872
+ // cursor on its toggle, a stack on its panel, a sparkle on its icon; its two words keep the Text icon.
6873
+ [DisclosureRole.Disclosure]: 'ph-thin ph-caret-circle-down',
6874
+ [DisclosureRole.Trigger]: 'ph-thin ph-cursor',
6875
+ [DisclosureRole.Panel]: 'ph-thin ph-stack',
6876
+ [DisclosureRole.Icon]: 'ph-thin ph-sparkle',
6787
6877
  };
6788
6878
  /** The glyph of a role's composite kind (`ph-rows` for an accordion and its parts). */
6789
6879
  function compositeKindGlyph(role) {
@@ -6868,7 +6958,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
6868
6958
  const FROM_ROW_KEY = 'builder.chrome.fromRow';
6869
6959
  const ADD_ITEM_KEY = 'builder.chrome.addItem';
6870
6960
  /** The kind label a composite part's selection badge shows (Card v2: "Card · card.title"). */
6871
- const COMPOSITE_KIND_KEYS = { card: 'builder.chrome.kindCard', accordion: 'builder.chrome.kindAccordion' };
6961
+ const COMPOSITE_KIND_KEYS = { card: 'builder.chrome.kindCard', accordion: 'builder.chrome.kindAccordion', disclosure: 'builder.chrome.kindDisclosure' };
6872
6962
  /** The parts that offer "Add item" on the selection toolbar (board 3: the "Add slide" pattern). */
6873
6963
  const ADD_ITEM_ROLES = new Set([AccordionRole.Accordion, AccordionRole.Item, AccordionRole.Trigger, AccordionRole.Panel]);
6874
6964
  class OverlayComponent {
@@ -7737,7 +7827,7 @@ function walk(nodes, depth, out, ctx, inTemplate, templateOf) {
7737
7827
  }
7738
7828
  }
7739
7829
 
7740
- /** An Accordion from content's root row (CC2, board 9): "From faqs · 6 rows". */
7830
+ /** An Accordion from content's root row (CC2, board 3 / 9): "From FAQ · 6 rows" — the content type's label. */
7741
7831
  const FROM_CONTENT_KEY = 'builder.chrome.fromContent';
7742
7832
  const LOCKED_PART_KEY = 'builder.chrome.lockedPart';
7743
7833
  const COMPOSITE_ROLE_KEY = 'builder.chrome.compositeRole';
@@ -7775,6 +7865,8 @@ class LayerTreeComponent {
7775
7865
  this.activeSection = 'page';
7776
7866
  this.labels = inject(IOX_BUILDER_LABELS);
7777
7867
  this.panelEvents = inject(PanelEventService);
7868
+ this.typeLabels = inject(IOX_CONTENT_TYPE_LABELS);
7869
+ this.dataSources = inject(DataSourceRegistryService, { optional: true });
7778
7870
  this.lockedPartTitle = this.labels(LOCKED_PART_KEY, BUILDER_CHROME_EN[LOCKED_PART_KEY]);
7779
7871
  this.roleTitle = this.labels(COMPOSITE_ROLE_KEY, BUILDER_CHROME_EN[COMPOSITE_ROLE_KEY]);
7780
7872
  this.templateLabel = this.labels(TEMPLATE_KEY, BUILDER_CHROME_EN[TEMPLATE_KEY]);
@@ -7946,7 +8038,9 @@ class LayerTreeComponent {
7946
8038
  isExpanded: (node) => (node.id ? (this.expandedState.get(node.id) ?? true) : true),
7947
8039
  repeaterRows: (node) => this.repeaterRows(node),
7948
8040
  fromContentLabel: (rows) => rows.alias
7949
- ? this.labels(FROM_CONTENT_KEY, BUILDER_CHROME_EN[FROM_CONTENT_KEY]).replace('{alias}', rows.alias).replace('{count}', String(rows.count))
8041
+ ? this.labels(FROM_CONTENT_KEY, BUILDER_CHROME_EN[FROM_CONTENT_KEY])
8042
+ .replace('{source}', sourceTypeLabel(rows.alias, this.dataSources?.findByAlias(rows.alias), this.typeLabels))
8043
+ .replace('{count}', String(rows.count))
7950
8044
  : null,
7951
8045
  };
7952
8046
  this.flatTree = flattenLayerTree(this.layout, ctx);
@@ -8019,7 +8113,7 @@ class BreadcrumbBarComponent {
8019
8113
  ...nodes.map((node, i) => ({
8020
8114
  node,
8021
8115
  label: crumbLabel(node),
8022
- icon: isAccordionRoot(node) ? `ph-thin ${compositeKindGlyph(node.role)}` : null,
8116
+ icon: isCompositeRoot(node) ? `ph-thin ${compositeKindGlyph(node.role)}` : null,
8023
8117
  isCurrent: i === last,
8024
8118
  key: node,
8025
8119
  })),
@@ -9883,13 +9977,14 @@ const ACCORDION_TRACK_WRAPPER = 'track';
9883
9977
  * See moveable-migration.md.
9884
9978
  */
9885
9979
  class BuilderContainerComponent {
9886
- /** The wrapper a child renders in: an Accordion item's header → its heading level, its panel → the track. */
9980
+ /** The wrapper a child renders in: an Accordion item's header → its heading level; an item's panel (either
9981
+ * kind) → the track. A disclosure's toggle has no heading — it is a button in the flow. */
9887
9982
  wrapperOf(child) {
9888
- if (this.node?.role !== AccordionRole.Item)
9983
+ if (!isCompositeItem(this.node))
9889
9984
  return null;
9890
- if (child.role === AccordionRole.Trigger)
9985
+ if (child.role === AccordionRole.Trigger && this.node?.role === AccordionRole.Item)
9891
9986
  return accordionHeadingLevel(child);
9892
- if (child.role === AccordionRole.Panel)
9987
+ if (isCompositePanel(child))
9893
9988
  return ACCORDION_TRACK_WRAPPER;
9894
9989
  return null;
9895
9990
  }
@@ -9962,7 +10057,8 @@ class BuilderContainerComponent {
9962
10057
  </ng-template>
9963
10058
  <!-- An Accordion ITEM (CC2) wraps its parts in the markup every renderer writes: the header inside a
9964
10059
  heading of its question's level, the panel inside the track + region the ONE hiding rule collapses
9965
- (iox-design.css). Structural only — the runtime stamps their state. -->
10060
+ (iox-design.css). A Disclosure (CC2.1) is its own item: its toggle stays a bare button, its panel
10061
+ takes the same track. Structural only — the runtime stamps their state. -->
9966
10062
  @for (child of children; track child) {
9967
10063
  @switch (wrapperOf(child)) {
9968
10064
  @case ('h2') { <h2 class="iox-accordion-heading"><ng-container *ngTemplateOutlet="childTpl; context: { $implicit: child }"></ng-container></h2> }
@@ -10003,7 +10099,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
10003
10099
  </ng-template>
10004
10100
  <!-- An Accordion ITEM (CC2) wraps its parts in the markup every renderer writes: the header inside a
10005
10101
  heading of its question's level, the panel inside the track + region the ONE hiding rule collapses
10006
- (iox-design.css). Structural only — the runtime stamps their state. -->
10102
+ (iox-design.css). A Disclosure (CC2.1) is its own item: its toggle stays a bare button, its panel
10103
+ takes the same track. Structural only — the runtime stamps their state. -->
10007
10104
  @for (child of children; track child) {
10008
10105
  @switch (wrapperOf(child)) {
10009
10106
  @case ('h2') { <h2 class="iox-accordion-heading"><ng-container *ngTemplateOutlet="childTpl; context: { $implicit: child }"></ng-container></h2> }
@@ -10024,7 +10121,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
10024
10121
  '[attr.data-iox-state]': 'formClass === "iox-form" ? formState : null',
10025
10122
  '[attr.start]': "htmlTag === 'ol' && start !== 1 ? start : null",
10026
10123
  '[attr.reversed]': "htmlTag === 'ol' && reversed ? '' : null",
10027
- // An accordion item's identity — the runtime pairs its header and panel ids from it (CC2).
10124
+ // An item's identity (an accordion item, or a disclosure) — the runtime pairs its header and panel ids from it.
10028
10125
  '[attr.data-iox-item-key]': 'node?.itemKey ?? null',
10029
10126
  }, standalone: false, styles: [":host{position:relative;box-sizing:border-box}.container-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;z-index:0;opacity:0;transition:opacity .15s}:host(:hover) .container-placeholder,:host(.iox-drag-over) .container-placeholder{opacity:1}.container-placeholder i{font-size:18px}:host ::ng-deep>[class*=iox-outer-]{min-width:0}\n"] }]
10030
10127
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: DragEngineService }, { type: i0.ChangeDetectorRef }], propDecorators: { children: [{
@@ -10056,9 +10153,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
10056
10153
  /** `click` covers plain and modified clicks; a middle click opens a tab through `auxclick` alone. */
10057
10154
  const NAVIGATING_CLICKS = ['click', 'auxclick'];
10058
10155
  class BuilderLinkedContainerComponent {
10059
- /** An Accordion's header renders a <button> (CC2). */
10156
+ /** An Accordion's header (CC2) or a Disclosure's toggle (CC2.1) renders a <button>. */
10060
10157
  get isTrigger() {
10061
- return this.node?.role === AccordionRole.Trigger;
10158
+ return isCompositeTrigger(this.node);
10062
10159
  }
10063
10160
  constructor(dragEngine, cdr, elRef, isPreview) {
10064
10161
  this.dragEngine = dragEngine;
@@ -13265,5 +13362,5 @@ class BuilderSpacerComponentConfig extends ComponentConfig {
13265
13362
  * Generated bundle index. Do not edit.
13266
13363
  */
13267
13364
 
13268
- export { ACTION_TYPE_OPTIONS, AuditCode, AuditPanelComponent, AuditSeverity, BODY_CRUMB_LABEL, BOUND_ICON, 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, CANVAS_ROOT_RESET_CSS, COMPOSITE_PRESETS, CanvasDesignStateService, CanvasShowState, CardComponentConfig, ChildLayoutGroupStyleConfig, ComponentConfig, ComponentRegistryService, CompositeCanvasService, CompositePaletteGroup, CompositePresetId, DEFAULT_ESSENTIAL_TRAITS, DESCRIPTOR_MAX_LENGTH, DRAG_HANDLE_ATTR, DROP_REFUSED_CLASS, 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_STATE_BLOCK_TYPES, FORM_TYPE, FieldComponentConfig, FieldGroupComponentConfig, FormComponentConfig, FormErrorComponentConfig, FormStateService, FormSuccessComponentConfig, GLOBALS_AFTER_CLASS, GalleryConfig, GlobalCanvasLayer, GroupStyleConfig, HIDDEN_AT_REST_LABEL_KEY, HIDDEN_AT_REST_ROLES, HIDDEN_AT_REST_TYPES, INSERT_REFUSAL_LABEL_KEYS, INTERACTION_STATES, INVERSE_ACTION, IOX_BUILDER_CANVAS, IOX_BUILDER_LABELS, IOX_DATA_SOURCE_ENDPOINTS, InsertRefusal, 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, REPEATER_SOURCE_PROP, REPEATER_TYPE, ROOT_ESCAPE_PX, ROUTE_ANIMATION_OPTIONS, RenderDirective, RepeaterComponentConfig, RootZone, SCREEN_WIDTH_OPTIONS, STRUCTURAL_STATES, SUPPORTED_STATES, SectionComponent, SectionComponentConfig, SelectionReveal, SizeGroupStyleConfig, SliderContainerComponent, SliderContainerConfig, SliderSlideComponent, SliderSlideConfig, SpacingGroupStyleConfig, StructureFix, 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, bindingLabel, bindingLabels, buildCompositePreset, buildConsentPreset, buildElementStyleSpecimen, buildFieldKindPreset, buildFlavorSpecimen, buildFormPreset, buildFullStyleTraits, buildLayoutPreset, buildPalettePreset, buildPresetStyleTraits, builderCompositeFactory, canFluidise, canvasEmptyImageLabel, collapseColumnsProps, columnCountOf, defaultBuilderLabels, defaultPageSettings, dropChildren, dropTargetLabel, escapesRoot, essentialTraitsFor, findNodeLocation, findParentOf, flattenLayerTree, flattenSchemaFields, fluidiseProps, generateNodeId, globalCanvasLayer, insertRefusal, insertRefusalLabel, isHiddenAt, isHiddenAtRest, isPinnedGlobal, isSpecimen, markSpecimen, matchesControlSearch, nearestFormNode, nodeAncestorPath, nodeAncestorPathInEither, nodeDescriptor, nodeStyleMap, overlayGlobals, pathToNode, refreshSubtree, regenerateNodeIds, removalRefusal, reorderProps, repeaterSourceAlias, repeaterSubLabel, resolveInsertTarget, resolveTraitControllerType, resolveTraitOptions, retypeNode, rootEscapeBand, rootZone, selectionRevealOf, setStyleTrait, setTrait, shortDescriptor, stackChildrenProps, summarise, syncEmptyImagePlaceholder, syncNodeDesign, syncNodeInputs, textNode, upsertNodeStyles, visibilityProps, walkNodes, wrapNode };
13365
+ export { ACTION_TYPE_OPTIONS, AuditCode, AuditPanelComponent, AuditSeverity, BODY_CRUMB_LABEL, BOUND_ICON, 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, CANVAS_ROOT_RESET_CSS, COMPOSITE_PRESETS, CanvasDesignStateService, CanvasShowState, CardComponentConfig, ChildLayoutGroupStyleConfig, ComponentConfig, ComponentRegistryService, CompositeCanvasService, CompositePaletteGroup, CompositePresetId, DEFAULT_ESSENTIAL_TRAITS, DESCRIPTOR_MAX_LENGTH, DRAG_HANDLE_ATTR, DROP_REFUSED_CLASS, 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_STATE_BLOCK_TYPES, FORM_TYPE, FieldComponentConfig, FieldGroupComponentConfig, FormComponentConfig, FormErrorComponentConfig, FormStateService, FormSuccessComponentConfig, GLOBALS_AFTER_CLASS, GalleryConfig, GlobalCanvasLayer, GroupStyleConfig, HIDDEN_AT_REST_LABEL_KEY, HIDDEN_AT_REST_ROLES, HIDDEN_AT_REST_TYPES, INSERT_REFUSAL_LABEL_KEYS, INTERACTION_STATES, INVERSE_ACTION, IOX_BUILDER_CANVAS, IOX_BUILDER_LABELS, IOX_CONTENT_TYPE_LABELS, IOX_DATA_SOURCE_ENDPOINTS, InsertRefusal, 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, REPEATER_SOURCE_PROP, REPEATER_TYPE, ROOT_ESCAPE_PX, ROUTE_ANIMATION_OPTIONS, RenderDirective, RepeaterComponentConfig, RootZone, SCREEN_WIDTH_OPTIONS, STRUCTURAL_STATES, SUPPORTED_STATES, SectionComponent, SectionComponentConfig, SelectionReveal, SizeGroupStyleConfig, SliderContainerComponent, SliderContainerConfig, SliderSlideComponent, SliderSlideConfig, SpacingGroupStyleConfig, StructureFix, 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, bindingLabel, bindingLabels, buildCompositePreset, buildConsentPreset, buildElementStyleSpecimen, buildFieldKindPreset, buildFlavorSpecimen, buildFormPreset, buildFullStyleTraits, buildLayoutPreset, buildPalettePreset, buildPresetStyleTraits, builderCompositeFactory, canFluidise, canvasEmptyImageLabel, collapseColumnsProps, columnCountOf, defaultBuilderLabels, defaultPageSettings, dropChildren, dropTargetLabel, escapesRoot, essentialTraitsFor, findNodeLocation, findParentOf, flattenLayerTree, flattenSchemaFields, fluidiseProps, generateNodeId, globalCanvasLayer, insertRefusal, insertRefusalLabel, isHiddenAt, isHiddenAtRest, isPinnedGlobal, isSpecimen, markSpecimen, matchesControlSearch, nearestFormNode, nodeAncestorPath, nodeAncestorPathInEither, nodeDescriptor, nodeStyleMap, overlayGlobals, pathToNode, refreshSubtree, regenerateNodeIds, removalRefusal, reorderProps, repeaterSourceAlias, repeaterSubLabel, resolveInsertTarget, resolveTraitControllerType, resolveTraitOptions, retypeNode, rootEscapeBand, rootZone, selectionRevealOf, setStyleTrait, setTrait, shortDescriptor, sourceContentType, sourceTypeLabel, stackChildrenProps, summarise, syncEmptyImagePlaceholder, syncNodeDesign, syncNodeInputs, textNode, upsertNodeStyles, visibilityProps, walkNodes, wrapNode };
13269
13366
  //# sourceMappingURL=vectoriox-iox-builder.mjs.map