@vectoriox/iox-builder 4.13.0 → 4.15.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 i17 from '@vectoriox/iox-ui';
19
- import { DEFAULT_WIDTH_BY_TYPE, Breakpoint, BREAKPOINTS, countOverrides, setOverride, breakpointDef, breakpointForWidth, ContextStore, ComponentInstanceRegistryService, isActionEnabled, isContextAction, contextActionEffect, resolveContextValue, DeclarationContext, planResponsiveRules, resolveStyleProps, buildTargetedStateSelector, compileDeclarations, wrapInBreakpointQuery, BreakpointQueryKind, safeSetInput, composeVirtualTraits, stateNamesIn, FormRenderState, resolveInputs, setInputOverride, collectContextSlotKeys, withContextSlots, nodeUsesContext, resolvePath, applyBindingPipes, IS_PREVIEW, planDataSource, dataSourcePlanToRequest, normalizeCollectionResult, resolveRepeaterItems, getByPath, computeRelative, IoxPageModule } from '@vectoriox/iox-ui';
19
+ import { DEFAULT_WIDTH_BY_TYPE, Breakpoint, BREAKPOINTS, countOverrides, setOverride, breakpointDef, breakpointForWidth, ContextStore, ComponentInstanceRegistryService, isActionEnabled, isContextAction, contextActionEffect, resolveContextValue, DeclarationContext, planResponsiveRules, resolveStyleProps, buildTargetedStateSelector, compileDeclarations, wrapInBreakpointQuery, BreakpointQueryKind, safeSetInput, composeVirtualTraits, stateNamesIn, FormRenderState, resolveInputs, setInputOverride, collectContextSlotKeys, withContextSlots, nodeUsesContext, resolveBoundValue, IS_PREVIEW, resolvePath, planDataSource, dataSourcePlanToRequest, normalizeCollectionResult, resolveRepeaterItems, getByPath, computeRelative, IoxPageModule } 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';
@@ -180,6 +180,12 @@ var TraitInputType;
180
180
  /** Ordered list of images (URL / one-by-one / filebox; per-item binding in a later phase).
181
181
  * Controller registered in the consumer (iox-cms-client) as `mediaList`. Value: GalleryImage[]. */
182
182
  TraitInputType["MediaList"] = "mediaList";
183
+ /** Additive validation rules for a Field (`ValidationRule[]` from forms-core). Controller
184
+ * registered in the consumer (iox-cms-client) as `ruleList`. */
185
+ TraitInputType["RuleList"] = "ruleList";
186
+ /** The ordered "After submit" action list on a Form (`SubmitAction[]`). Controller registered
187
+ * in the consumer as `actionList`. */
188
+ TraitInputType["ActionList"] = "actionList";
183
189
  TraitInputType["FontFamily"] = "fontFamily";
184
190
  TraitInputType["GridTemplate"] = "gridTemplate";
185
191
  TraitInputType["SectionLabel"] = "sectionLabel";
@@ -6273,8 +6279,9 @@ class BuilderComponent {
6273
6279
  const sourceData = data[binding.source];
6274
6280
  if (sourceData == null)
6275
6281
  continue;
6276
- const raw = binding.path ? resolvePath(sourceData, binding.path) : sourceData;
6277
- const value = applyBindingPipes(raw, binding.pipes);
6282
+ // Path + pipes is the SHARED resolveBoundValue — the same two lines used to
6283
+ // be retyped here, in the SSR string renderer and in the SSR component renderer.
6284
+ const value = resolveBoundValue(sourceData, binding);
6278
6285
  if (value !== undefined && value !== null)
6279
6286
  safeSetInput(ref, binding.prop, value);
6280
6287
  }
@@ -9690,6 +9697,10 @@ class FormComponentConfig extends ComponentConfig {
9690
9697
  // On by default and invisible to the visitor (decision D12).
9691
9698
  new TraitConfig('honeypot', 'Honeypot field', TraitInputType.Checkbox, undefined, true),
9692
9699
  new TraitConfig('minFillMs', 'Minimum fill time (ms)', TraitInputType.Number, undefined, 1200),
9700
+ new TraitConfig('__afterSubmitLabel', 'After submit', TraitInputType.SectionLabel),
9701
+ // The ordered destination list. `store` is always first and cannot be removed — it is
9702
+ // the safety net the whole store-first design rests on.
9703
+ new TraitConfig('actions', 'Destinations', TraitInputType.ActionList, undefined, [{ type: 'store' }]),
9693
9704
  new TraitConfig('__dataLabel', 'Data', TraitInputType.SectionLabel),
9694
9705
  // Absent means keep forever — the confirmed default. A number opts into purging.
9695
9706
  new TraitConfig('retentionDays', 'Delete submissions after (days)', TraitInputType.Number, undefined, ''),
@@ -9757,9 +9768,9 @@ class FieldComponentConfig extends ComponentConfig {
9757
9768
  new TraitConfig('optionsText', 'Choices (one per line)', TraitInputType.Textarea, undefined, '', false, { trait: 'control', values: ['select', 'radio'] }),
9758
9769
  new TraitConfig('__validationLabel', 'Validation', TraitInputType.SectionLabel),
9759
9770
  new TraitConfig('required', 'Required', TraitInputType.Checkbox, undefined, false),
9760
- // `rules` is the additive list (minLength, pattern, matches, …). Its editor is a panel
9761
- // concern; the node just carries the array.
9762
- new TraitConfig('rules', 'Rules', TraitInputType.Textarea, undefined, ''),
9771
+ // The additive rule list (minLength, pattern, matches, …). Unused rules are invisible
9772
+ // rather than a wall of empty controls — the Effects-group pattern.
9773
+ new TraitConfig('rules', 'Rules', TraitInputType.RuleList, undefined, []),
9763
9774
  ];
9764
9775
  this.styleTraits = fullStyles();
9765
9776
  this.applyStyleDefaults({