@vectoriox/iox-ui 4.35.0 → 4.37.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
@@ -308,6 +308,12 @@ declare class BuilderIconComponent {
308
308
  /** Full Phosphor icon CSS class string, e.g. "ph-thin ph-star" */
309
309
  iconClass: string;
310
310
  nodeId: string;
311
+ /**
312
+ * Repaired at render time: a Phosphor class saved without its weight (`ph-house`) matches no CSS
313
+ * rule and renders as an invisible box. The picker used to emit exactly that, so this keeps
314
+ * every already-saved icon working. Shared with the SSR engine — see `normalizeIconClass`.
315
+ */
316
+ get normalizedIconClass(): string;
311
317
  static ɵfac: i0.ɵɵFactoryDeclaration<BuilderIconComponent, never>;
312
318
  static ɵcmp: i0.ɵɵComponentDeclaration<BuilderIconComponent, "i[iox-icon]", never, { "iconClass": { "alias": "iconClass"; "required": false; }; "nodeId": { "alias": "nodeId"; "required": false; }; }, {}, never, never, false, never>;
313
319
  }
@@ -1928,6 +1934,26 @@ declare function declaredInputNames(type: Type<unknown>): Set<string>;
1928
1934
  */
1929
1935
  declare function safeSetInput(ref: ComponentRef<unknown>, name: string, value: unknown): boolean;
1930
1936
 
1937
+ /**
1938
+ * Phosphor's CSS needs TWO classes — a weight and a name (`.ph-thin.ph-house:before`). A class
1939
+ * string carrying only the name matches nothing at all: no `font-family`, no glyph, so the element
1940
+ * renders as an invisible, zero-glyph box.
1941
+ *
1942
+ * The icon picker used to emit exactly that (`ph-house`), so every icon chosen through it was blank
1943
+ * on the canvas, in the picker grid and on the live site. Fixing the picker alone would leave every
1944
+ * icon already saved broken, so the repair happens at RENDER time, here, and is shared by the
1945
+ * builder's Icon component and the SSR engine's renderer.
1946
+ *
1947
+ * Everything that is not a weightless Phosphor class passes through untouched — Iconoir
1948
+ * (`iconoir-home`), custom icon-set fonts, Font Awesome, and Phosphor strings that already carry a
1949
+ * weight.
1950
+ *
1951
+ * See iox-ai-guidance `architecture/cms/custom-icon-fonts.md`.
1952
+ */
1953
+ /** The weight assumed when a Phosphor class has none — the weight this platform uses everywhere. */
1954
+ declare const DEFAULT_PHOSPHOR_WEIGHT = "ph-thin";
1955
+ declare function normalizeIconClass(iconClass: string | null | undefined): string;
1956
+
1931
1957
  /**
1932
1958
  * THE binding path resolver — one implementation, shared by every renderer.
1933
1959
  *
@@ -2006,6 +2032,17 @@ interface SeoDoc {
2006
2032
  structuredData?: unknown;
2007
2033
  sitemap?: SeoSitemap;
2008
2034
  }
2035
+ /**
2036
+ * A binding on an SEO field. Structurally the resolvable part of an `IoxBinding` — `source` picks an
2037
+ * entry in the page's resolved data (`$current` on a template page), `path` walks into it, `pipes`
2038
+ * are the render-time transforms. Typed loosely because the pipe catalog lives in the main
2039
+ * `@vectoriox/iox-ui` entry point, which this framework-free one must not import.
2040
+ */
2041
+ interface SeoBinding {
2042
+ source: string;
2043
+ path?: string;
2044
+ pipes?: readonly unknown[];
2045
+ }
2009
2046
 
2010
2047
  /**
2011
2048
  * Turn a page's STORED SEO document into the resolved one a crawler should see.
@@ -2050,6 +2087,54 @@ declare function resolveSeo(seo: unknown, ctx?: SeoResolveContext): SeoDoc;
2050
2087
  */
2051
2088
  declare function deriveSeoFromContent(tree: readonly unknown[] | null | undefined, resolvedData?: Record<string, unknown> | null): SeoDerivedContent;
2052
2089
 
2090
+ /**
2091
+ * The authoring-side view of the SEO ladder: which rung won for each field, and what to show.
2092
+ *
2093
+ * The panel must never re-derive this. The chip an author reads ("AUTO" / "BOUND" / "MANUAL") has to
2094
+ * mean exactly what the renderer will do, and the only way to guarantee that is to compute it from
2095
+ * the same `resolveSeo` the renderer uses. See iox-ai-guidance `architecture/cms/seo-plan.md`.
2096
+ */
2097
+ type SeoFieldSource =
2098
+ /** The author typed it. */
2099
+ 'manual'
2100
+ /** A binding supplies it — the value is only known at render time. */
2101
+ | 'bound'
2102
+ /** Derived from the page's own content or URL. */
2103
+ | 'auto'
2104
+ /** Nothing supplies it: automatic derivation is off, or there was nothing to derive. */
2105
+ | 'empty';
2106
+ interface SeoFieldState {
2107
+ /** Dotted path into the document, e.g. `title`, `og.image`. */
2108
+ field: string;
2109
+ /** What the author typed, when they did. Drives the input's value. */
2110
+ override: string;
2111
+ /** The binding, when one is set. */
2112
+ binding?: SeoBinding;
2113
+ /** The value as far as it can be known here — empty for a bound field. */
2114
+ resolved: string;
2115
+ /** Which rung won. */
2116
+ source: SeoFieldSource;
2117
+ /** Recommended length, where one applies — for the character counter. */
2118
+ maxLength?: number;
2119
+ }
2120
+ /**
2121
+ * Describe every bindable field for the authoring panel.
2122
+ *
2123
+ * ⚠️ `resolved` is deliberately EMPTY for a bound field on the builder side. The canvas has no
2124
+ * page-level resolved data — each component fetches its own — so a bound value genuinely is not
2125
+ * knowable here. Showing the binding expression and saying so is honest; inventing a preview from
2126
+ * design-time props is how a placeholder ends up looking like real content.
2127
+ */
2128
+ declare function describeSeoFields(seo: unknown, ctx?: SeoResolveContext): SeoFieldState[];
2129
+ /** Set a field's typed value. An empty string CLEARS the override so the lower rungs take over. */
2130
+ declare function setSeoOverride(seo: unknown, field: string, value: string): Record<string, unknown>;
2131
+ /** Attach or replace a field's binding. `undefined` removes it. */
2132
+ declare function setSeoBinding(seo: unknown, field: string, binding: SeoBinding | undefined): Record<string, unknown>;
2133
+ /** Turn the automatic rung on or off for a field. Off leaves the field genuinely empty. */
2134
+ declare function setSeoAuto(seo: unknown, field: string, enabled: boolean): Record<string, unknown>;
2135
+ /** Drop everything an author set on a field — back to the automatic rung. */
2136
+ declare function resetSeoField(seo: unknown, field: string): Record<string, unknown>;
2137
+
2053
2138
  /**
2054
2139
  * Element context state — shared types.
2055
2140
  *
@@ -2550,5 +2635,5 @@ declare class GalleryLoop {
2550
2635
  private emit;
2551
2636
  }
2552
2637
 
2553
- 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, FormRuntimeService, GALLERY_EFFECTS, GALLERY_EFFECT_DESCRIPTORS, GalleryLoop, IOX_BUILDER_EVENTS, IOX_FORM_MESSAGES, IOX_FORM_NAVIGATOR, IOX_FORM_TRANSPORT, 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, defaultMessageResolver, deriveSeoFromContent, 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, resolveBoundValue, resolveContextValue, resolveDerivedInto, resolveGalleryEffect, resolveGalleryUrls, resolveInputChain, resolveInputs, resolvePageTransition, resolvePath, resolveRelativeInto, resolveRepeaterItems, resolveSeo, resolveSiblings, resolveSingleItemId, resolveStateStyles, resolveStyleProps, resolveValueChain, rewriteViewportUnits, safeSetInput, setInputOverride, setOverride, stateNamesIn, stripSuppressedProps, styleKeyToKebab, variableAliases, variableItemsFrom, withContextSlots, wrapInBreakpointQuery, wrapInMediaQuery };
2554
- export type { BoundValueSpec, BreakpointDef, BuildRelatedFilterOptions, ContextActionEffect, ContextActionLike, ContextItemRef, ContextSlotDefault, ContextValueSpec, ContextWriteScope, DataSourceDomain, DataSourceEndpoints, DataSourceMode, DataSourcePlan, DataSourceQueryFilter, DataSourceRequest, DataSourceRequestSpec, DataSourceRouteFilter, DataSourceSpec, FormMessageResolver, 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, SeoDerivedContent, SeoResolveContext, SetContextParams, SiblingsResult, StateStyleMap, StyleMap, StyleTreeNode, SwiperBreakpointMap, ToggleableAction, TransitionFeel, TransitionPhase, TransitionTimelineInput, ValueSource, VirtualTraitGroup };
2638
+ 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_PHOSPHOR_WEIGHT, DEFAULT_WIDTH_BY_TYPE, DeclarationContext, ENVIRONMENT, FormRenderState, FormRuntimeService, GALLERY_EFFECTS, GALLERY_EFFECT_DESCRIPTORS, GalleryLoop, IOX_BUILDER_EVENTS, IOX_FORM_MESSAGES, IOX_FORM_NAVIGATOR, IOX_FORM_TRANSPORT, 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, defaultMessageResolver, deriveSeoFromContent, describeSeoFields, effectiveTransitionId, excludeSelf, feelFor, getByPath, initialSlotValues, isActionEnabled, isContextAction, isInputOverriddenAt, isOverriddenAt, isReservedAlias, isValidSlotKey, legacyEnterToTransition, matchRouteParams, mediaQueryFor, mergeSwiperBreakpoints, nearestCommonAncestorId, nodeCssId, nodeUsesContext, normalizeCollectionResult, normalizeGalleryImage, normalizeIconClass, parentBreakpoint, parseUrlList, planDataSource, planResponsiveRules, referencedDataSources, referencedDataSourcesDeep, renderDefaultDeclarations, resetSeoField, resolveBoundValue, resolveContextValue, resolveDerivedInto, resolveGalleryEffect, resolveGalleryUrls, resolveInputChain, resolveInputs, resolvePageTransition, resolvePath, resolveRelativeInto, resolveRepeaterItems, resolveSeo, resolveSiblings, resolveSingleItemId, resolveStateStyles, resolveStyleProps, resolveValueChain, rewriteViewportUnits, safeSetInput, setInputOverride, setOverride, setSeoAuto, setSeoBinding, setSeoOverride, stateNamesIn, stripSuppressedProps, styleKeyToKebab, variableAliases, variableItemsFrom, withContextSlots, wrapInBreakpointQuery, wrapInMediaQuery };
2639
+ export type { BoundValueSpec, BreakpointDef, BuildRelatedFilterOptions, ContextActionEffect, ContextActionLike, ContextItemRef, ContextSlotDefault, ContextValueSpec, ContextWriteScope, DataSourceDomain, DataSourceEndpoints, DataSourceMode, DataSourcePlan, DataSourceQueryFilter, DataSourceRequest, DataSourceRequestSpec, DataSourceRouteFilter, DataSourceSpec, FormMessageResolver, 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, SeoDerivedContent, SeoFieldSource, SeoFieldState, SeoResolveContext, 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.35.0",
3
+ "version": "4.37.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=20.0.0",
6
6
  "@angular/core": ">=20.0.0",