@vectoriox/iox-ui 4.16.1 → 4.17.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vectoriox/iox-ui",
3
- "version": "4.16.1",
3
+ "version": "4.17.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=20.0.0",
6
6
  "@angular/core": ">=20.0.0",
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { AfterViewInit, EventEmitter, ElementRef, SimpleChanges, OnDestroy, OnInit, Renderer2, ModuleWithProviders, InjectionToken, ChangeDetectorRef, ViewContainerRef, OnChanges, Type } from '@angular/core';
2
+ import { AfterViewInit, EventEmitter, ElementRef, SimpleChanges, OnDestroy, OnInit, Renderer2, ModuleWithProviders, InjectionToken, ChangeDetectorRef, ViewContainerRef, Type } from '@angular/core';
3
3
  import { AnimationPlayer, AnimationBuilder } from '@angular/animations';
4
4
  import { Observable, Subject } from 'rxjs';
5
5
  import * as i3 from '@angular/platform-browser/animations';
@@ -634,26 +634,33 @@ declare function parseUrlList(text: string): GalleryImage[];
634
634
  * frame (SEO + no-JS baseline). In the browser `ngAfterViewInit` starts the loop, which begins on the
635
635
  * same index 0 — so the static frame and the first live frame match and there is no hydration flash.
636
636
  */
637
- declare class ClientGalleryComponent implements AfterViewInit, OnChanges, OnDestroy {
637
+ declare class ClientGalleryComponent implements AfterViewInit, OnDestroy {
638
638
  private cdr;
639
639
  nodeId: string;
640
- /** Manual images — `GalleryImage[]` or a plain `string[]` of URLs (normalised on set). */
641
- images: (GalleryImage | string)[];
642
640
  effect: string;
643
- showDuration: number;
644
- fadeDuration: number;
645
641
  autoStart: boolean;
646
642
  /** Layout mode — only `'stack'` is rendered in v1 (`'grid'` scaffolded for later). */
647
643
  layout: 'stack' | 'grid';
648
- /** The flat, display-ready URLs the loop cycles. Recomputed when `images` changes. */
644
+ private _images;
645
+ /** Manual images — `GalleryImage[]` or a plain `string[]` of URLs (normalised on set). */
646
+ set images(v: (GalleryImage | string)[]);
647
+ get images(): (GalleryImage | string)[];
648
+ private _showDuration;
649
+ set showDuration(v: number);
650
+ get showDuration(): number;
651
+ private _fadeDuration;
652
+ set fadeDuration(v: number);
653
+ get fadeDuration(): number;
654
+ /** The flat, display-ready URLs the loop cycles. Recomputed whenever `images` is set. */
649
655
  urls: string[];
650
656
  private currentIndex;
651
657
  private fadingOutIndex;
652
658
  private started;
659
+ /** True once the loop has been started (in ngAfterViewInit) — gates the setter-driven restart. */
660
+ private loopActive;
653
661
  private loop;
654
662
  private readonly isBrowser;
655
663
  constructor(platformId: object, cdr: ChangeDetectorRef);
656
- ngOnChanges(changes: SimpleChanges): void;
657
664
  ngAfterViewInit(): void;
658
665
  ngOnDestroy(): void;
659
666
  /** Per-slide inline style. Before the loop activates (server + no-JS + pre-first-frame) the first
@@ -662,7 +669,7 @@ declare class ClientGalleryComponent implements AfterViewInit, OnChanges, OnDest
662
669
  private startLoop;
663
670
  private normalizeImages;
664
671
  static ɵfac: i0.ɵɵFactoryDeclaration<ClientGalleryComponent, never>;
665
- static ɵcmp: i0.ɵɵComponentDeclaration<ClientGalleryComponent, "iox-gallery", never, { "nodeId": { "alias": "nodeId"; "required": false; }; "images": { "alias": "images"; "required": false; }; "effect": { "alias": "effect"; "required": false; }; "showDuration": { "alias": "showDuration"; "required": false; }; "fadeDuration": { "alias": "fadeDuration"; "required": false; }; "autoStart": { "alias": "autoStart"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; }, {}, never, never, false, never>;
672
+ 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>;
666
673
  }
667
674
 
668
675
  declare class IoxBuilderComponentsModule {
@@ -772,6 +779,50 @@ declare const VIRTUAL_TRAIT_KEYS: Set<string>;
772
779
  */
773
780
  declare function composeVirtualTraits(raw: Record<string, any>, base?: Record<string, any>): Record<string, any>;
774
781
 
782
+ /**
783
+ * tree-relations — framework-agnostic helpers for reasoning about a rendered node
784
+ * tree's structural relationships. Lives in @vectoriox/iox-ui because BOTH renderers
785
+ * depend on iox-ui (the engine does NOT depend on iox-builder), so the same logic
786
+ * drives the builder canvas AND the SSR site — no fork.
787
+ * See iox-ai-guidance `architecture/builder/targeted-hover-state-plan.md`.
788
+ */
789
+ /**
790
+ * Minimal shape both renderers can satisfy. `styleId` (present on repeater/slider/symbol
791
+ * clones) points back to the template node's css id; when set it is the id used in the
792
+ * compiled selector, so we resolve against it in preference to `id`.
793
+ */
794
+ interface StyleTreeNode {
795
+ id?: string;
796
+ styleId?: string;
797
+ children?: StyleTreeNode[] | null;
798
+ }
799
+ /** The css id a node contributes to selectors: its clone `styleId`, else its own `id`. */
800
+ declare function nodeCssId(node: StyleTreeNode): string | undefined;
801
+ /**
802
+ * The css id of the NEAREST COMMON ANCESTOR of two nodes (identified by their css ids),
803
+ * used to scope a `:has()` targeted-state selector so it stays repetition-safe.
804
+ *
805
+ * The result may equal `styledCssId` (the trigger sits INSIDE the styled node) or
806
+ * `triggerCssId` (the styled node sits inside the trigger) — both are valid scopes;
807
+ * `buildTargetedStateSelector` picks the right selector shape for each. Returns
808
+ * `undefined` only when a valid scope can't exist: an id is blank, the two ids are the
809
+ * same node, or they share no ancestor in `root`. Callers MUST skip emitting the rule
810
+ * when this is `undefined` — never emit an unscoped (page-global) `:has()`, which would
811
+ * break under repetition.
812
+ */
813
+ declare function nearestCommonAncestorId(root: readonly StyleTreeNode[], styledCssId: string, triggerCssId: string): string | undefined;
814
+ /**
815
+ * Build the selector BODY (no leading `.`, matching the builder's `compile()` convention)
816
+ * for a targeted state, given the resolved scope. Three topologies, one shared rule:
817
+ *
818
+ * - trigger INSIDE styled (scope === styled): `iox-node-{styled}:has(.iox-node-{trigger}:{base})`
819
+ * - styled INSIDE trigger (scope === trigger): `iox-node-{trigger}:{base} .iox-node-{styled}`
820
+ * - separate subtrees (scope is above both): `iox-node-{scope}:has(.iox-node-{trigger}:{base}) .iox-node-{styled}`
821
+ *
822
+ * `scopeCssId` MUST be a value returned by `nearestCommonAncestorId` for the same pair.
823
+ */
824
+ declare function buildTargetedStateSelector(scopeCssId: string, triggerCssId: string, styledCssId: string, base: string): string;
825
+
775
826
  /**
776
827
  * Shared data-source resolving pattern — the SINGLE source of truth for how an IoxDataSource
777
828
  * becomes a backend fetch, consumed by BOTH the page builder (iox-cms-client bindings panel) and
@@ -1409,5 +1460,5 @@ declare class GalleryLoop {
1409
1460
  private emit;
1410
1461
  }
1411
1462
 
1412
- export { AOSService, AnalyticsService, BuilderButtonComponent, BuilderDividerComponent, BuilderHeadingComponent, BuilderIconComponent, BuilderImageComponent, BuilderLinkComponent, BuilderSpacerComponent, ButtonBlockComponent, CMSClientInfraModule, CardComponent, ClientGalleryComponent, ClientListComponent, ClientListItemComponent, ClientRepeaterComponent, ClientSliderContainerComponent, ClientSliderSlideComponent, ComponentInstanceRegistryService, ConsentService, ContainerComponent, ContentService, DEFAULT_GALLERY_SCHEDULER, DEFAULT_PAGE_TRANSITION, DEFAULT_PAGE_TRANSITION_DURATION, DEFAULT_PAGE_TRANSITION_EASING, DEFAULT_PAGE_TRANSITION_PERSPECTIVE, DEFAULT_WIDTH_BY_TYPE, 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, SectionComponent, TRANSITION_FEELS, TextBlockComponent, VIRTUAL_TRAIT_KEYS, ViewPositionDirective, ViewPositionModule, WebSettingsService, applyBindingPipes, applyFeel, buildDataSourceFilter, buildRelatedFilter, buildTransitionTimeline, collectReferencedAliases, compileDeclarations, composeVirtualTraits, computeRelative, dataSourcePlanToRequest, effectiveTransitionId, excludeSelf, feelFor, getByPath, isReservedAlias, legacyEnterToTransition, matchRouteParams, normalizeCollectionResult, parseUrlList, planDataSource, referencedDataSources, referencedDataSourcesDeep, renderDefaultDeclarations, resolveDerivedInto, resolveGalleryEffect, resolveGalleryUrls, resolvePageTransition, resolveRelativeInto, resolveRepeaterItems, resolveSiblings, resolveSingleItemId, rewriteViewportUnits, stripSuppressedProps, styleKeyToKebab };
1413
- export type { BuildRelatedFilterOptions, DataSourceDomain, DataSourceEndpoints, DataSourceMode, DataSourcePlan, DataSourceQueryFilter, DataSourceRequest, DataSourceRequestSpec, DataSourceRouteFilter, DataSourceSpec, GalleryBoundSource, GalleryDurations, GalleryEffect, GalleryEffectDescriptor, GalleryImage, GalleryLoopOptions, GalleryLoopScheduler, GalleryLoopState, GallerySlideState, IBuilderEventEmitter, IoxPipe, PageTransitionCategory, PageTransitionCategoryMeta, PageTransitionOptions, PageTransitionPreset, PipeArgSpec, PipeContext, PipeDescriptor, RelativeInputs, RelativeSourceKind, RelativeSourceSpec, ResolveSiblingsOptions, ResolvedPageTransition, RouteContext, SiblingsResult, TransitionFeel, TransitionPhase, TransitionTimelineInput };
1463
+ export { AOSService, AnalyticsService, BuilderButtonComponent, BuilderDividerComponent, BuilderHeadingComponent, BuilderIconComponent, BuilderImageComponent, BuilderLinkComponent, BuilderSpacerComponent, ButtonBlockComponent, CMSClientInfraModule, CardComponent, ClientGalleryComponent, ClientListComponent, ClientListItemComponent, ClientRepeaterComponent, ClientSliderContainerComponent, ClientSliderSlideComponent, ComponentInstanceRegistryService, ConsentService, ContainerComponent, ContentService, DEFAULT_GALLERY_SCHEDULER, DEFAULT_PAGE_TRANSITION, DEFAULT_PAGE_TRANSITION_DURATION, DEFAULT_PAGE_TRANSITION_EASING, DEFAULT_PAGE_TRANSITION_PERSPECTIVE, DEFAULT_WIDTH_BY_TYPE, 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, SectionComponent, TRANSITION_FEELS, TextBlockComponent, VIRTUAL_TRAIT_KEYS, ViewPositionDirective, ViewPositionModule, WebSettingsService, applyBindingPipes, applyFeel, buildDataSourceFilter, buildRelatedFilter, buildTargetedStateSelector, buildTransitionTimeline, collectReferencedAliases, compileDeclarations, composeVirtualTraits, computeRelative, dataSourcePlanToRequest, effectiveTransitionId, excludeSelf, feelFor, getByPath, isReservedAlias, legacyEnterToTransition, matchRouteParams, nearestCommonAncestorId, nodeCssId, normalizeCollectionResult, parseUrlList, planDataSource, referencedDataSources, referencedDataSourcesDeep, renderDefaultDeclarations, resolveDerivedInto, resolveGalleryEffect, resolveGalleryUrls, resolvePageTransition, resolveRelativeInto, resolveRepeaterItems, resolveSiblings, resolveSingleItemId, rewriteViewportUnits, stripSuppressedProps, styleKeyToKebab };
1464
+ export type { BuildRelatedFilterOptions, DataSourceDomain, DataSourceEndpoints, DataSourceMode, DataSourcePlan, DataSourceQueryFilter, DataSourceRequest, DataSourceRequestSpec, DataSourceRouteFilter, DataSourceSpec, GalleryBoundSource, GalleryDurations, GalleryEffect, GalleryEffectDescriptor, GalleryImage, GalleryLoopOptions, GalleryLoopScheduler, GalleryLoopState, GallerySlideState, IBuilderEventEmitter, IoxPipe, PageTransitionCategory, PageTransitionCategoryMeta, PageTransitionOptions, PageTransitionPreset, PipeArgSpec, PipeContext, PipeDescriptor, RelativeInputs, RelativeSourceKind, RelativeSourceSpec, ResolveSiblingsOptions, ResolvedPageTransition, RouteContext, SiblingsResult, StyleTreeNode, TransitionFeel, TransitionPhase, TransitionTimelineInput };