@vectoriox/iox-ui 4.27.0 → 4.28.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.
package/index.d.ts CHANGED
@@ -875,9 +875,185 @@ declare class ClientGalleryComponent implements AfterViewInit, OnDestroy {
875
875
  static ɵcmp: i0.ɵɵComponentDeclaration<ClientGalleryComponent, "iox-gallery", never, { "nodeId": { "alias": "nodeId"; "required": false; }; "effect": { "alias": "effect"; "required": false; }; "autoStart": { "alias": "autoStart"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "images": { "alias": "images"; "required": false; }; "showDuration": { "alias": "showDuration"; "required": false; }; "fadeDuration": { "alias": "fadeDuration"; "required": false; }; }, {}, never, never, false, never>;
876
876
  }
877
877
 
878
+ /** Which of the form's four states the canvas / runtime is showing. */
879
+ declare enum FormRenderState {
880
+ Idle = "idle",
881
+ Submitting = "submitting",
882
+ Success = "success",
883
+ Error = "error"
884
+ }
885
+ /**
886
+ * Directive-host Form: the real `<form>` IS the host — no wrapper, no inner/outer split. Children
887
+ * (fields, layout, the submit button, and the two state blocks) render into it via `childrenHost`.
888
+ *
889
+ * Scope is ANCESTRY, not naming (decision D1): a Field belongs to its nearest ancestor Form, so
890
+ * there is no form-id to pick and nothing to mis-wire. The runtime finds its fields by walking the
891
+ * DOM it owns.
892
+ *
893
+ * `renderState` drives which children are visible. In the builder it is set by the canvas state
894
+ * switcher so an author can DESIGN the success and error blocks; at runtime the same input is
895
+ * driven by the submit lifecycle. One mechanism, two drivers — the author designs exactly what a
896
+ * visitor will see.
897
+ *
898
+ * ⚠️ `novalidate` is deliberate: the browser's native bubbles would pre-empt our own messages,
899
+ * which are styleable, translated and announced. Validation still runs — ours does it.
900
+ */
901
+ declare class IoxFormComponent {
902
+ nodeId: string;
903
+ /** Stable id the submit endpoint resolves the saved spec by. */
904
+ formId: string;
905
+ /** Author-facing name — what the submissions inbox groups by. */
906
+ name: string;
907
+ renderState: FormRenderState | string;
908
+ /**
909
+ * Emitted instead of navigating. The host (builder canvas or engine runtime) owns the transport;
910
+ * this component owns only the DOM contract, so the same component works in both renderers.
911
+ */
912
+ formSubmit: EventEmitter<Event>;
913
+ childrenHost: ViewContainerRef;
914
+ onSubmit(event: Event): void;
915
+ static ɵfac: i0.ɵɵFactoryDeclaration<IoxFormComponent, never>;
916
+ static ɵcmp: i0.ɵɵComponentDeclaration<IoxFormComponent, "form[iox-form]", never, { "nodeId": { "alias": "nodeId"; "required": false; }; "formId": { "alias": "formId"; "required": false; }; "name": { "alias": "name"; "required": false; }; "renderState": { "alias": "renderState"; "required": false; }; }, { "formSubmit": "formSubmit"; }, never, never, false, never>;
917
+ }
918
+
919
+ /** What the visitor actually types into. Chosen by a trait; it also implies a validation rule. */
920
+ declare enum ControlType {
921
+ Text = "text",
922
+ Email = "email",
923
+ Tel = "tel",
924
+ Url = "url",
925
+ Number = "number",
926
+ Password = "password",
927
+ Textarea = "textarea",
928
+ Select = "select",
929
+ Checkbox = "checkbox",
930
+ Radio = "radio",
931
+ Date = "date",
932
+ Time = "time",
933
+ File = "file",
934
+ /** Not shown; carries a constant or a bound value (campaign, source page, …). */
935
+ Hidden = "hidden"
936
+ }
937
+ interface FieldOption {
938
+ label: string;
939
+ value: string;
940
+ }
941
+
942
+ /**
943
+ * The compound Field: label + control + help + error + required mark, as ONE node (decision D2).
944
+ *
945
+ * This is the biggest divergence from Webflow, and it is deliberate. There, a form field is four
946
+ * loose elements an author can delete — and they do delete the label, which breaks the
947
+ * `for`/`id` pairing and with it screen-reader support. Here the structure is fixed and
948
+ * accessibility is guaranteed by construction: the label can be visually hidden, never removed.
949
+ *
950
+ * The PARTS are styled through the virtual-trait mechanism (`__labelStyles`, `__errorStyles`, …)
951
+ * that already compiles `::marker` rules for List — so per-part styling invents no new concept in
952
+ * the style engine. Each part carries a stable class the compiler targets.
953
+ *
954
+ * ⚠️ Control type is a TRAIT, not a component per type (decision D4) — one component, one config,
955
+ * and choosing `email` also chooses email validation.
956
+ */
957
+ declare class IoxFieldComponent {
958
+ nodeId: string;
959
+ name: string;
960
+ label: string;
961
+ control: ControlType | string;
962
+ placeholder: string;
963
+ help: string;
964
+ required: boolean;
965
+ disabled: boolean;
966
+ labelHidden: boolean;
967
+ requiredMark: string;
968
+ rows: number;
969
+ accept: string;
970
+ options: FieldOption[];
971
+ value: any;
972
+ /** The resolved, already-translated message. Resolving the key is the host's job, not ours. */
973
+ errorText: string;
974
+ /** Design-time or runtime failure. The style compiler targets `.iox-invalid`. */
975
+ invalid: boolean;
976
+ /** Only after a successful check — never on an untouched field. */
977
+ showValid: boolean;
978
+ valueChange: EventEmitter<any>;
979
+ touched: EventEmitter<void>;
980
+ /** Stable per instance so `for`/`id` and `aria-describedby` always pair up. */
981
+ readonly controlId: string;
982
+ /** `file`, `date`, `number`… map straight through; everything else is a text input. */
983
+ get inputType(): string;
984
+ /** Help and error are BOTH announced, in that order, when both are present. */
985
+ get describedBy(): string | null;
986
+ emit(value: any): void;
987
+ touch(): void;
988
+ static ɵfac: i0.ɵɵFactoryDeclaration<IoxFieldComponent, never>;
989
+ static ɵcmp: i0.ɵɵComponentDeclaration<IoxFieldComponent, "div[iox-field]", never, { "nodeId": { "alias": "nodeId"; "required": false; }; "name": { "alias": "name"; "required": false; }; "label": { "alias": "label"; "required": false; }; "control": { "alias": "control"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "help": { "alias": "help"; "required": false; }; "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "labelHidden": { "alias": "labelHidden"; "required": false; }; "requiredMark": { "alias": "requiredMark"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "accept": { "alias": "accept"; "required": false; }; "options": { "alias": "options"; "required": false; }; "value": { "alias": "value"; "required": false; }; "errorText": { "alias": "errorText"; "required": false; }; "invalid": { "alias": "invalid"; "required": false; }; "showValid": { "alias": "showValid"; "required": false; }; }, { "valueChange": "valueChange"; "touched": "touched"; }, never, never, false, never>;
990
+ }
991
+
992
+ /**
993
+ * Directive-host SubmitButton: the real `<button type="submit">` IS the host.
994
+ *
995
+ * It carries no destination configuration of its own — "what happens with the data" is an ordered
996
+ * action list on the FORM (decision D9), so there is nothing here to wire and nothing to get out of
997
+ * sync. The button owns only its own appearance and its busy state.
998
+ *
999
+ * While submitting it shows `loadingLabel` and is disabled, which is the whole double-submit
1000
+ * defence on the client side (the server's rate limit is the real one).
1001
+ */
1002
+ declare class IoxSubmitButtonComponent {
1003
+ nodeId: string;
1004
+ label: string;
1005
+ loadingLabel: string;
1006
+ disableWhileSubmitting: boolean;
1007
+ /** Driven by the form's lifecycle, not by the author. */
1008
+ submitting: boolean;
1009
+ static ɵfac: i0.ɵɵFactoryDeclaration<IoxSubmitButtonComponent, never>;
1010
+ static ɵcmp: i0.ɵɵComponentDeclaration<IoxSubmitButtonComponent, "button[iox-submit]", never, { "nodeId": { "alias": "nodeId"; "required": false; }; "label": { "alias": "label"; "required": false; }; "loadingLabel": { "alias": "loadingLabel"; "required": false; }; "disableWhileSubmitting": { "alias": "disableWhileSubmitting"; "required": false; }; "submitting": { "alias": "submitting"; "required": false; }; }, {}, never, never, false, never>;
1011
+ }
1012
+
1013
+ /**
1014
+ * The Success and Error blocks — real, fully styleable container nodes that the Form auto-creates
1015
+ * and the author cannot delete (decision D7). Hiding one is allowed; removing it is not, because
1016
+ * "the author deleted the success block and the form went quiet" is Webflow's commonest form
1017
+ * failure and we designed it out.
1018
+ *
1019
+ * ⚠️ VISIBILITY IS NOT AN INPUT. Which block shows is decided by CSS keyed on the parent form's
1020
+ * `data-iox-state` attribute (see `iox-form-states.css` / the engine's `styles.scss`):
1021
+ *
1022
+ * .iox-form-success { display: none }
1023
+ * .iox-form[data-iox-state="success"] .iox-form-success { display: block }
1024
+ *
1025
+ * That is deliberate. It means the builder's state switcher and the runtime's submit lifecycle
1026
+ * drive the SAME mechanism through one attribute, with no input plumbing down the tree and no
1027
+ * chance of the canvas and the live site disagreeing about what a visitor sees. The selector
1028
+ * out-specifies `.iox-node-{id}`, so the state machine owns visibility and the author owns
1029
+ * everything else about the block.
1030
+ */
1031
+ declare class IoxFormSuccessComponent {
1032
+ nodeId: string;
1033
+ childrenHost: ViewContainerRef;
1034
+ static ɵfac: i0.ɵɵFactoryDeclaration<IoxFormSuccessComponent, never>;
1035
+ static ɵcmp: i0.ɵɵComponentDeclaration<IoxFormSuccessComponent, "div[iox-form-success]", never, { "nodeId": { "alias": "nodeId"; "required": false; }; }, {}, never, never, false, never>;
1036
+ }
1037
+ /**
1038
+ * The Error block. One design, five reasons: the renderer writes the resolved reason text into
1039
+ * `message`, so an author designs the block once and every failure mode (network, rejected, spam,
1040
+ * rate-limited, server) renders through it.
1041
+ *
1042
+ * `role="alert"` rather than `status`: a failed submit must interrupt, because the visitor is
1043
+ * about to walk away believing they sent it.
1044
+ */
1045
+ declare class IoxFormErrorComponent {
1046
+ nodeId: string;
1047
+ /** Already-translated reason. Resolving the key is the host's job. */
1048
+ message: string;
1049
+ childrenHost: ViewContainerRef;
1050
+ static ɵfac: i0.ɵɵFactoryDeclaration<IoxFormErrorComponent, never>;
1051
+ static ɵcmp: i0.ɵɵComponentDeclaration<IoxFormErrorComponent, "div[iox-form-error]", never, { "nodeId": { "alias": "nodeId"; "required": false; }; "message": { "alias": "message"; "required": false; }; }, {}, never, never, false, never>;
1052
+ }
1053
+
878
1054
  declare class IoxBuilderComponentsModule {
879
1055
  static ɵfac: i0.ɵɵFactoryDeclaration<IoxBuilderComponentsModule, never>;
880
- static ɵmod: i0.ɵɵNgModuleDeclaration<IoxBuilderComponentsModule, [typeof BuilderImageComponent, typeof BuilderSpacerComponent, typeof CardComponent, typeof BuilderDividerComponent, typeof BuilderIconComponent, typeof BuilderLinkComponent, typeof BuilderButtonComponent, typeof BuilderHeadingComponent, typeof TextBlockComponent, typeof SectionComponent, typeof ContainerComponent, typeof LinkedContainerComponent, typeof ClientRepeaterComponent, typeof ButtonBlockComponent, typeof ClientSliderContainerComponent, typeof ClientSliderSlideComponent, typeof ClientListComponent, typeof ClientListItemComponent, typeof ClientGalleryComponent], [typeof i2.CommonModule], [typeof BuilderImageComponent, typeof BuilderSpacerComponent, typeof CardComponent, typeof BuilderDividerComponent, typeof BuilderIconComponent, typeof BuilderLinkComponent, typeof BuilderButtonComponent, typeof BuilderHeadingComponent, typeof TextBlockComponent, typeof SectionComponent, typeof ContainerComponent, typeof LinkedContainerComponent, typeof ClientRepeaterComponent, typeof ButtonBlockComponent, typeof ClientSliderContainerComponent, typeof ClientSliderSlideComponent, typeof ClientListComponent, typeof ClientListItemComponent, typeof ClientGalleryComponent]>;
1056
+ static ɵmod: i0.ɵɵNgModuleDeclaration<IoxBuilderComponentsModule, [typeof BuilderImageComponent, typeof BuilderSpacerComponent, typeof CardComponent, typeof BuilderDividerComponent, typeof BuilderIconComponent, typeof BuilderLinkComponent, typeof BuilderButtonComponent, typeof BuilderHeadingComponent, typeof TextBlockComponent, typeof SectionComponent, typeof ContainerComponent, typeof LinkedContainerComponent, typeof ClientRepeaterComponent, typeof ButtonBlockComponent, typeof ClientSliderContainerComponent, typeof ClientSliderSlideComponent, typeof ClientListComponent, typeof ClientListItemComponent, typeof ClientGalleryComponent, typeof IoxFormComponent, typeof IoxFieldComponent, typeof IoxSubmitButtonComponent, typeof IoxFormSuccessComponent, typeof IoxFormErrorComponent], [typeof i2.CommonModule], [typeof BuilderImageComponent, typeof BuilderSpacerComponent, typeof CardComponent, typeof BuilderDividerComponent, typeof BuilderIconComponent, typeof BuilderLinkComponent, typeof BuilderButtonComponent, typeof BuilderHeadingComponent, typeof TextBlockComponent, typeof SectionComponent, typeof ContainerComponent, typeof LinkedContainerComponent, typeof ClientRepeaterComponent, typeof ButtonBlockComponent, typeof ClientSliderContainerComponent, typeof ClientSliderSlideComponent, typeof ClientListComponent, typeof ClientListItemComponent, typeof ClientGalleryComponent, typeof IoxFormComponent, typeof IoxFieldComponent, typeof IoxSubmitButtonComponent, typeof IoxFormSuccessComponent, typeof IoxFormErrorComponent]>;
881
1057
  static ɵinj: i0.ɵɵInjectorDeclaration<IoxBuilderComponentsModule>;
882
1058
  }
883
1059
 
@@ -2002,5 +2178,5 @@ declare class GalleryLoop {
2002
2178
  private emit;
2003
2179
  }
2004
2180
 
2005
- export { AOSService, AnalyticsService, BREAKPOINTS, Breakpoint, BreakpointQueryKind, BuilderButtonComponent, BuilderDividerComponent, BuilderHeadingComponent, BuilderIconComponent, BuilderImageComponent, BuilderLinkComponent, BuilderSpacerComponent, ButtonBlockComponent, CMSClientInfraModule, CONTEXT_ACTION_TYPES, CardComponent, ClientGalleryComponent, ClientListComponent, ClientListItemComponent, ClientRepeaterComponent, ClientSliderContainerComponent, ClientSliderSlideComponent, ComponentInstanceRegistryService, ConsentService, ContainerComponent, ContentService, ContextStore, DEFAULT_GALLERY_SCHEDULER, DEFAULT_PAGE_TRANSITION, DEFAULT_PAGE_TRANSITION_DURATION, DEFAULT_PAGE_TRANSITION_EASING, DEFAULT_PAGE_TRANSITION_PERSPECTIVE, DEFAULT_WIDTH_BY_TYPE, DeclarationContext, ENVIRONMENT, GALLERY_EFFECTS, GALLERY_EFFECT_DESCRIPTORS, GalleryLoop, IOX_BUILDER_EVENTS, IS_PREVIEW, IoxAnimateContainer, IoxAosDirective, IoxAosModule, IoxBuilderComponentsModule, IoxComponentRegistryService, IoxPageComponent, IoxPageModule, IoxUiModule, LinkedContainerComponent, PAGE_TRANSITION_CATEGORIES, PAGE_TRANSITION_PRESETS, PIPE_DESCRIPTORS, PIPE_REGISTRY, PageScrollProvider, PrivacyModalComponent, PrivacyModalService, PrivacyModelEvent, RESERVED_ALIAS_PREFIX, SUPPRESSED_STYLE_PROPS_BY_TYPE, SWIPER_RESPONSIVE_TRAITS, SectionComponent, TRANSITION_FEELS, TextBlockComponent, VIRTUAL_TRAIT_GROUPS, VIRTUAL_TRAIT_KEYS, ViewPositionDirective, ViewPositionModule, WebSettingsService, activeActions, applyBindingPipes, applyFeel, breakpointDef, breakpointForWidth, breakpointQueryFor, buildDataSourceFilter, buildRelatedFilter, buildSwiperBreakpoints, buildTargetedStateSelector, buildTransitionTimeline, cascadeChain, clearInputOverride, clearOverride, collectContextSlotKeys, collectReferencedAliases, compileDeclarations, composeVirtualTraits, computeRelative, contextActionEffect, contextSlotKeys, countOverrides, dataSourcePlanToRequest, declaredInputNames, effectiveTransitionId, excludeSelf, feelFor, getByPath, initialSlotValues, isActionEnabled, isContextAction, isInputOverriddenAt, isOverriddenAt, isReservedAlias, isValidSlotKey, legacyEnterToTransition, matchRouteParams, mediaQueryFor, mergeSwiperBreakpoints, nearestCommonAncestorId, nodeCssId, nodeUsesContext, normalizeCollectionResult, normalizeGalleryImage, parentBreakpoint, parseUrlList, planDataSource, planResponsiveRules, referencedDataSources, referencedDataSourcesDeep, renderDefaultDeclarations, resolveContextValue, resolveDerivedInto, resolveGalleryEffect, resolveGalleryUrls, resolveInputChain, resolveInputs, resolvePageTransition, resolvePath, resolveRelativeInto, resolveRepeaterItems, resolveSiblings, resolveSingleItemId, resolveStateStyles, resolveStyleProps, resolveValueChain, rewriteViewportUnits, safeSetInput, setInputOverride, setOverride, stateNamesIn, stripSuppressedProps, styleKeyToKebab, variableAliases, variableItemsFrom, withContextSlots, wrapInBreakpointQuery, wrapInMediaQuery };
2181
+ export { AOSService, AnalyticsService, BREAKPOINTS, Breakpoint, BreakpointQueryKind, BuilderButtonComponent, BuilderDividerComponent, BuilderHeadingComponent, BuilderIconComponent, BuilderImageComponent, BuilderLinkComponent, BuilderSpacerComponent, ButtonBlockComponent, CMSClientInfraModule, CONTEXT_ACTION_TYPES, CardComponent, ClientGalleryComponent, ClientListComponent, ClientListItemComponent, ClientRepeaterComponent, ClientSliderContainerComponent, ClientSliderSlideComponent, ComponentInstanceRegistryService, ConsentService, ContainerComponent, ContentService, ContextStore, DEFAULT_GALLERY_SCHEDULER, DEFAULT_PAGE_TRANSITION, DEFAULT_PAGE_TRANSITION_DURATION, DEFAULT_PAGE_TRANSITION_EASING, DEFAULT_PAGE_TRANSITION_PERSPECTIVE, DEFAULT_WIDTH_BY_TYPE, DeclarationContext, ENVIRONMENT, FormRenderState, GALLERY_EFFECTS, GALLERY_EFFECT_DESCRIPTORS, GalleryLoop, IOX_BUILDER_EVENTS, IS_PREVIEW, IoxAnimateContainer, IoxAosDirective, IoxAosModule, IoxBuilderComponentsModule, IoxComponentRegistryService, IoxFieldComponent, IoxFormComponent, IoxFormErrorComponent, IoxFormSuccessComponent, IoxPageComponent, IoxPageModule, IoxSubmitButtonComponent, IoxUiModule, LinkedContainerComponent, PAGE_TRANSITION_CATEGORIES, PAGE_TRANSITION_PRESETS, PIPE_DESCRIPTORS, PIPE_REGISTRY, PageScrollProvider, PrivacyModalComponent, PrivacyModalService, PrivacyModelEvent, RESERVED_ALIAS_PREFIX, SUPPRESSED_STYLE_PROPS_BY_TYPE, SWIPER_RESPONSIVE_TRAITS, SectionComponent, TRANSITION_FEELS, TextBlockComponent, VIRTUAL_TRAIT_GROUPS, VIRTUAL_TRAIT_KEYS, ViewPositionDirective, ViewPositionModule, WebSettingsService, activeActions, applyBindingPipes, applyFeel, breakpointDef, breakpointForWidth, breakpointQueryFor, buildDataSourceFilter, buildRelatedFilter, buildSwiperBreakpoints, buildTargetedStateSelector, buildTransitionTimeline, cascadeChain, clearInputOverride, clearOverride, collectContextSlotKeys, collectReferencedAliases, compileDeclarations, composeVirtualTraits, computeRelative, contextActionEffect, contextSlotKeys, countOverrides, dataSourcePlanToRequest, declaredInputNames, effectiveTransitionId, excludeSelf, feelFor, getByPath, initialSlotValues, isActionEnabled, isContextAction, isInputOverriddenAt, isOverriddenAt, isReservedAlias, isValidSlotKey, legacyEnterToTransition, matchRouteParams, mediaQueryFor, mergeSwiperBreakpoints, nearestCommonAncestorId, nodeCssId, nodeUsesContext, normalizeCollectionResult, normalizeGalleryImage, parentBreakpoint, parseUrlList, planDataSource, planResponsiveRules, referencedDataSources, referencedDataSourcesDeep, renderDefaultDeclarations, resolveContextValue, resolveDerivedInto, resolveGalleryEffect, resolveGalleryUrls, resolveInputChain, resolveInputs, resolvePageTransition, resolvePath, resolveRelativeInto, resolveRepeaterItems, resolveSiblings, resolveSingleItemId, resolveStateStyles, resolveStyleProps, resolveValueChain, rewriteViewportUnits, safeSetInput, setInputOverride, setOverride, stateNamesIn, stripSuppressedProps, styleKeyToKebab, variableAliases, variableItemsFrom, withContextSlots, wrapInBreakpointQuery, wrapInMediaQuery };
2006
2182
  export type { BreakpointDef, BuildRelatedFilterOptions, ContextActionEffect, ContextActionLike, ContextItemRef, ContextSlotDefault, ContextValueSpec, ContextWriteScope, DataSourceDomain, DataSourceEndpoints, DataSourceMode, DataSourcePlan, DataSourceQueryFilter, DataSourceRequest, DataSourceRequestSpec, DataSourceRouteFilter, DataSourceSpec, GalleryBoundSource, GalleryDurations, GalleryEffect, GalleryEffectDescriptor, GalleryImage, GalleryLoopOptions, GalleryLoopScheduler, GalleryLoopState, GallerySlideState, IBuilderEventEmitter, InputMap, IoxContextSlot, IoxPipe, OverrideBreakpoint, PageTransitionCategory, PageTransitionCategoryMeta, PageTransitionOptions, PageTransitionPreset, PipeArgSpec, PipeContext, PipeDescriptor, RelativeInputs, RelativeSourceKind, RelativeSourceSpec, ResolveSiblingsOptions, ResolvedPageTransition, ResponsiveLayer, ResponsiveOverrides, ResponsiveRuleSet, RouteContext, SetContextParams, SiblingsResult, StateStyleMap, StyleMap, StyleTreeNode, SwiperBreakpointMap, ToggleableAction, TransitionFeel, TransitionPhase, TransitionTimelineInput, ValueSource, VirtualTraitGroup };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vectoriox/iox-ui",
3
- "version": "4.27.0",
3
+ "version": "4.28.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=20.0.0",
6
6
  "@angular/core": ">=20.0.0",