@vectoriox/iox-ui 4.25.0 → 4.26.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
@@ -509,6 +509,180 @@ declare class ButtonBlockComponent {
509
509
  static ɵcmp: i0.ɵɵComponentDeclaration<ButtonBlockComponent, "a[iox-button-block],button[iox-button-block]", never, { "tag": { "alias": "tag"; "required": false; }; "href": { "alias": "href"; "required": false; }; "target": { "alias": "target"; "required": false; }; "type": { "alias": "type"; "required": false; }; "nodeId": { "alias": "nodeId"; "required": false; }; }, {}, never, never, false, never>;
510
510
  }
511
511
 
512
+ /** The five fixed breakpoints (plan decision D2). Desktop-first: each narrower one
513
+ * overrides the wider ones through `max-width`. */
514
+ declare enum Breakpoint {
515
+ Base = "base",
516
+ Laptop = "laptop",
517
+ Tablet = "tablet",
518
+ Mobile = "mobile",
519
+ Small = "small"
520
+ }
521
+ /** Every breakpoint that can hold overrides. Base styles live in `styleProps`. */
522
+ type OverrideBreakpoint = Exclude<Breakpoint, Breakpoint.Base>;
523
+ interface BreakpointDef {
524
+ readonly id: Breakpoint;
525
+ readonly label: string;
526
+ /** Inclusive upper bound in CSS px (`max-width`). `null` for Base, which has no query. */
527
+ readonly maxWidth: number | null;
528
+ /** Width the builder canvas simulates while this breakpoint is being edited. Always
529
+ * inside the breakpoint's own range (above the next one's `maxWidth`). */
530
+ readonly previewWidth: number;
531
+ }
532
+ /**
533
+ * Widest → narrowest. This order IS the cascade order and the `@media` emission order.
534
+ *
535
+ * ⚠️ Phones in portrait (360–430px) land in `Small`, NOT `Mobile` — `Mobile` is 480–767,
536
+ * a phone held landscape. The labels say so (as Webflow's do). The ids stay short because
537
+ * they are storage keys; the cascade still makes a `Mobile` override reach every phone.
538
+ */
539
+ declare const BREAKPOINTS: readonly BreakpointDef[];
540
+ /** The definition for `bp`, or `undefined` for an unknown id (e.g. hand-edited JSON). */
541
+ declare function breakpointDef(bp: Breakpoint | string): BreakpointDef | undefined;
542
+ /** Base → `bp`, inclusive — the layers whose values apply at `bp`. Unknown → `[Base]`. */
543
+ declare function cascadeChain(bp: Breakpoint | string): Breakpoint[];
544
+ /**
545
+ * The breakpoint a viewport (or canvas) of `width` CSS px falls in — the narrowest one whose
546
+ * `maxWidth` it fits under, else Base. Mirrors how the `max-width` media queries resolve, so the
547
+ * builder's editing scope is always the breakpoint the canvas is actually showing.
548
+ */
549
+ declare function breakpointForWidth(width: number): Breakpoint;
550
+ /** The next-wider breakpoint (what `bp` inherits from), or `null` for Base / unknown. */
551
+ declare function parentBreakpoint(bp: Breakpoint | string): Breakpoint | null;
552
+ /**
553
+ * What a breakpoint's width is measured against.
554
+ *
555
+ * `Media` — the browser viewport. The SSR engine: a visitor's window IS the page.
556
+ * `Container` — a named CSS size container. The builder: its canvas is a fixed-width frame inside a
557
+ * desktop browser (and `transform: scale`d for zoom), so a media query would read the EDITOR's width.
558
+ * A container query reads the frame's own layout width — which equals the simulated viewport and
559
+ * ignores the zoom transform — so the builder emits the same structure as the engine.
560
+ */
561
+ declare enum BreakpointQueryKind {
562
+ Media = "media",
563
+ Container = "container"
564
+ }
565
+ /**
566
+ * The at-rule prelude for `bp` — `@media (max-width: 767px)`, or with `Container`
567
+ * `@container iox-canvas (max-width: 767px)`. `null` for Base or an unknown id.
568
+ * `containerName` is required for `Container` (an unnamed container query would match
569
+ * whichever ancestor container is nearest, which is not guaranteed to be the canvas).
570
+ */
571
+ declare function breakpointQueryFor(bp: Breakpoint | string, kind?: BreakpointQueryKind, containerName?: string): string | null;
572
+ /** Wrap already-compiled rules for `bp`. Base (and blank css) passes through unwrapped. */
573
+ declare function wrapInBreakpointQuery(bp: Breakpoint | string, css: string, kind?: BreakpointQueryKind, containerName?: string): string;
574
+ /** `@media (max-width: 767px)` for `bp`; `null` for Base or an unknown id. */
575
+ declare function mediaQueryFor(bp: Breakpoint | string): string | null;
576
+ /** Wrap already-compiled rules for `bp` in its media query. Base (and blank css) passes through. */
577
+ declare function wrapInMediaQuery(bp: Breakpoint | string, css: string): string;
578
+ type StyleMap = Record<string, any>;
579
+ type StateStyleMap = Record<string, StyleMap>;
580
+ /** Component trait values (node `props`/`inputs`), keyed by trait name. */
581
+ type InputMap = Record<string, any>;
582
+ /** What one breakpoint overrides. All maps are SPARSE — only keys that differ. */
583
+ interface ResponsiveLayer {
584
+ styleProps?: StyleMap;
585
+ stateStyles?: StateStyleMap;
586
+ /**
587
+ * Per-breakpoint COMPONENT TRAIT overrides (`slidesPerView`, `limit`, …) — the things a media
588
+ * query cannot express because they are component inputs, not CSS. Without this a 4-up slider
589
+ * stays 4-up on a phone; the only escape used to be hand-typed Swiper JSON.
590
+ *
591
+ * Sparse and additive like the maps above, so a page with no trait overrides serialises exactly
592
+ * as before. Only traits declared `responsive` on their `TraitConfig` may appear here.
593
+ */
594
+ inputs?: InputMap;
595
+ }
596
+ type ResponsiveOverrides = Partial<Record<OverrideBreakpoint, ResponsiveLayer>>;
597
+ /** The full effective style map at `bp`: base, then each layer down the cascade. */
598
+ declare function resolveStyleProps(styleProps: StyleMap | null | undefined, responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string): StyleMap;
599
+ /**
600
+ * The full effective TRAIT map at `bp`: the node's own inputs, then each layer down the cascade.
601
+ * Deliberately identical in shape and cascade order to `resolveStyleProps`, so "how does a value
602
+ * at this width get decided" has ONE answer on both sides of the renderer split.
603
+ */
604
+ declare function resolveInputs(inputs: InputMap | null | undefined, responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string): InputMap;
605
+ /** True when `bp` itself sets trait `name` — the panel's override indicator. Never true for Base. */
606
+ declare function isInputOverriddenAt(responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string, name: string): boolean;
607
+ /**
608
+ * Every level from Base down to `bp` that sets trait `name`, in cascade order — the trait-row
609
+ * equivalent of `resolveValueChain`, driving the same "Base 4 → Tablet 2 → Mobile 1" source chain.
610
+ */
611
+ declare function resolveInputChain(name: string, inputs: InputMap | null | undefined, responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string): ValueSource[];
612
+ /** The effective per-state maps at `bp`. States with no values anywhere are omitted. */
613
+ declare function resolveStateStyles(stateStyles: StateStyleMap | null | undefined, responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string): StateStyleMap;
614
+ /**
615
+ * Every state that has a value anywhere — at base or at any breakpoint — in a stable order
616
+ * (base states first, then any that exist only at a breakpoint). A renderer iterates this, not
617
+ * `Object.keys(stateStyles)`, so a state defined ONLY at a breakpoint (a Mobile-only hover) still
618
+ * gets its selector scope resolved.
619
+ */
620
+ declare function stateNamesIn(stateStyles: StateStyleMap | null | undefined, responsive: ResponsiveOverrides | null | undefined): string[];
621
+ /** One level of the cascade that sets a value. */
622
+ interface ValueSource {
623
+ breakpoint: Breakpoint;
624
+ value: any;
625
+ }
626
+ /**
627
+ * Every level from Base down to `bp` that sets `prop` (optionally within `state`), in
628
+ * cascade order. The LAST entry is the effective value; an empty array means unset.
629
+ * Drives the style panel's source chain ("Base 34 → Tablet 28 → Mobile 22").
630
+ */
631
+ declare function resolveValueChain(prop: string, styleProps: StyleMap | null | undefined, stateStyles: StateStyleMap | null | undefined, responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string, state?: string): ValueSource[];
632
+ /** True when `bp` itself sets `prop` (the style panel's orange edge). Never true for Base. */
633
+ declare function isOverriddenAt(responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string, prop: string, state?: string): boolean;
634
+ /** Number of overridden values — at `bp`, or across every breakpoint when omitted. */
635
+ declare function countOverrides(responsive: ResponsiveOverrides | null | undefined, bp?: Breakpoint | string): number;
636
+ /** Returns a new overrides object with `prop` set at `bp` (optionally within `state`). */
637
+ declare function setOverride(responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string, prop: string, value: any, state?: string): ResponsiveOverrides;
638
+ /** Returns a new overrides object with trait `name` set at `bp`. */
639
+ declare function setInputOverride(responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string, name: string, value: any): ResponsiveOverrides;
640
+ /**
641
+ * Remove trait overrides at `bp`, pruning empties exactly like `clearOverride` — omit `name` to
642
+ * drop every trait override at that width. Returns `undefined` when nothing is left anywhere.
643
+ */
644
+ declare function clearInputOverride(responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string, name?: string): ResponsiveOverrides | undefined;
645
+ /**
646
+ * Remove overrides at `bp` and PRUNE whatever becomes empty, so "reset" and "never
647
+ * overridden" are the same state on disk — no tombstones, no nulls.
648
+ *
649
+ * clearOverride(r, bp) — the whole breakpoint
650
+ * clearOverride(r, bp, undefined, st) — one state at that breakpoint
651
+ * clearOverride(r, bp, prop) — one base-state value
652
+ * clearOverride(r, bp, prop, st) — one value within a state
653
+ *
654
+ * Returns `undefined` when nothing is left, so a serialiser omits the key entirely.
655
+ */
656
+ declare function clearOverride(responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string, prop?: string, state?: string): ResponsiveOverrides | undefined;
657
+ /**
658
+ * Everything one breakpoint must emit, already composed. Wrap in `mediaQuery` (engine)
659
+ * or apply directly (builder, flattened).
660
+ *
661
+ * ⚠️ Compile these maps with `compileDeclarations(map, …, DeclarationContext.Override)`. The
662
+ * default Base context drops CSS initial values as no-ops — but here `width: auto` or
663
+ * `transform: none` is how a breakpoint UNDOES the wider value, and dropping it silently keeps
664
+ * the desktop style.
665
+ */
666
+ interface ResponsiveRuleSet {
667
+ breakpoint: OverrideBreakpoint;
668
+ mediaQuery: string;
669
+ /** Sparse declarations for the node itself at this width (virtual traits composed). */
670
+ styleProps: StyleMap;
671
+ /** Sparse declarations per state at this width (virtual traits composed). */
672
+ stateStyles: StateStyleMap;
673
+ }
674
+ /**
675
+ * The per-breakpoint rule sets a node needs, widest → narrowest (the order they must be
676
+ * emitted in, AFTER every base rule — equal specificity means source order decides).
677
+ * Breakpoints with nothing to emit are omitted.
678
+ *
679
+ * Handles the cross-axis case: a breakpoint that changes a virtual group (say
680
+ * `translateX`) also re-emits that group for every state the node has, because the wider
681
+ * state rule was composed against the wider value and would otherwise snap back to it on
682
+ * hover.
683
+ */
684
+ declare function planResponsiveRules(styleProps: StyleMap | null | undefined, stateStyles: StateStyleMap | null | undefined, responsive: ResponsiveOverrides | null | undefined): ResponsiveRuleSet[];
685
+
512
686
  declare class ClientSliderContainerComponent implements OnInit, AfterViewInit, OnDestroy {
513
687
  private platformId;
514
688
  nodeId: string;
@@ -519,6 +693,9 @@ declare class ClientSliderContainerComponent implements OnInit, AfterViewInit, O
519
693
  direction: 'horizontal' | 'vertical';
520
694
  loop: boolean;
521
695
  slidesPerView: number;
696
+ /** Declared by the config since the slider shipped, but never declared HERE — so `safeSetInput`
697
+ * dropped it and the panel control did nothing on either renderer. */
698
+ slidesPerGroup: number;
522
699
  spaceBetween: number;
523
700
  speed: number;
524
701
  effect: string;
@@ -540,12 +717,20 @@ declare class ClientSliderContainerComponent implements OnInit, AfterViewInit, O
540
717
  paginationType: 'bullets' | 'fraction' | 'progressbar';
541
718
  paginationClickable: boolean;
542
719
  gridRows: number;
720
+ /** Advanced escape hatch: raw Swiper `breakpoints` JSON. Merged OVER the map derived from the
721
+ * node's per-breakpoint traits, so an explicit hand-written value always wins. */
543
722
  breakpoints: string;
723
+ /** The node's per-breakpoint overrides. Only its `inputs` layer is read here — the style layers
724
+ * are compiled to CSS by the style engine, not handed to Swiper. */
725
+ responsive: ResponsiveOverrides | null;
544
726
  childrenHost: ViewContainerRef;
545
727
  swiperEl: {
546
728
  nativeElement: HTMLElement;
547
729
  };
548
730
  private _swiper;
731
+ /** The base (Base-breakpoint) values of the traits Swiper reads per width. Read from the live
732
+ * inputs rather than the node, so the builder's direct-assignment edits are picked up too. */
733
+ private collectSwiperInputs;
549
734
  private instanceRegistry;
550
735
  constructor(platformId: object);
551
736
  ngOnInit(): void;
@@ -553,7 +738,7 @@ declare class ClientSliderContainerComponent implements OnInit, AfterViewInit, O
553
738
  ngOnDestroy(): void;
554
739
  private _initSwiper;
555
740
  static ɵfac: i0.ɵɵFactoryDeclaration<ClientSliderContainerComponent, never>;
556
- static ɵcmp: i0.ɵɵComponentDeclaration<ClientSliderContainerComponent, "iox-slider-container", never, { "nodeId": { "alias": "nodeId"; "required": false; }; "dir": { "alias": "dir"; "required": false; }; "direction": { "alias": "direction"; "required": false; }; "loop": { "alias": "loop"; "required": false; }; "slidesPerView": { "alias": "slidesPerView"; "required": false; }; "spaceBetween": { "alias": "spaceBetween"; "required": false; }; "speed": { "alias": "speed"; "required": false; }; "effect": { "alias": "effect"; "required": false; }; "grabCursor": { "alias": "grabCursor"; "required": false; }; "centeredSlides": { "alias": "centeredSlides"; "required": false; }; "initialSlide": { "alias": "initialSlide"; "required": false; }; "enableNavigation": { "alias": "enableNavigation"; "required": false; }; "enablePagination": { "alias": "enablePagination"; "required": false; }; "enableScrollbar": { "alias": "enableScrollbar"; "required": false; }; "enableAutoplay": { "alias": "enableAutoplay"; "required": false; }; "enableKeyboard": { "alias": "enableKeyboard"; "required": false; }; "enableMousewheel": { "alias": "enableMousewheel"; "required": false; }; "enableZoom": { "alias": "enableZoom"; "required": false; }; "enableGrid": { "alias": "enableGrid"; "required": false; }; "enableParallax": { "alias": "enableParallax"; "required": false; }; "autoplayDelay": { "alias": "autoplayDelay"; "required": false; }; "autoplayPauseOnMouseEnter": { "alias": "autoplayPauseOnMouseEnter"; "required": false; }; "autoplayDisableOnInteraction": { "alias": "autoplayDisableOnInteraction"; "required": false; }; "paginationType": { "alias": "paginationType"; "required": false; }; "paginationClickable": { "alias": "paginationClickable"; "required": false; }; "gridRows": { "alias": "gridRows"; "required": false; }; "breakpoints": { "alias": "breakpoints"; "required": false; }; }, {}, never, never, false, never>;
741
+ static ɵcmp: i0.ɵɵComponentDeclaration<ClientSliderContainerComponent, "iox-slider-container", never, { "nodeId": { "alias": "nodeId"; "required": false; }; "dir": { "alias": "dir"; "required": false; }; "direction": { "alias": "direction"; "required": false; }; "loop": { "alias": "loop"; "required": false; }; "slidesPerView": { "alias": "slidesPerView"; "required": false; }; "slidesPerGroup": { "alias": "slidesPerGroup"; "required": false; }; "spaceBetween": { "alias": "spaceBetween"; "required": false; }; "speed": { "alias": "speed"; "required": false; }; "effect": { "alias": "effect"; "required": false; }; "grabCursor": { "alias": "grabCursor"; "required": false; }; "centeredSlides": { "alias": "centeredSlides"; "required": false; }; "initialSlide": { "alias": "initialSlide"; "required": false; }; "enableNavigation": { "alias": "enableNavigation"; "required": false; }; "enablePagination": { "alias": "enablePagination"; "required": false; }; "enableScrollbar": { "alias": "enableScrollbar"; "required": false; }; "enableAutoplay": { "alias": "enableAutoplay"; "required": false; }; "enableKeyboard": { "alias": "enableKeyboard"; "required": false; }; "enableMousewheel": { "alias": "enableMousewheel"; "required": false; }; "enableZoom": { "alias": "enableZoom"; "required": false; }; "enableGrid": { "alias": "enableGrid"; "required": false; }; "enableParallax": { "alias": "enableParallax"; "required": false; }; "autoplayDelay": { "alias": "autoplayDelay"; "required": false; }; "autoplayPauseOnMouseEnter": { "alias": "autoplayPauseOnMouseEnter"; "required": false; }; "autoplayDisableOnInteraction": { "alias": "autoplayDisableOnInteraction"; "required": false; }; "paginationType": { "alias": "paginationType"; "required": false; }; "paginationClickable": { "alias": "paginationClickable"; "required": false; }; "gridRows": { "alias": "gridRows"; "required": false; }; "breakpoints": { "alias": "breakpoints"; "required": false; }; "responsive": { "alias": "responsive"; "required": false; }; }, {}, never, never, false, never>;
557
742
  }
558
743
 
559
744
  /**
@@ -875,148 +1060,30 @@ declare function nearestCommonAncestorId(root: readonly StyleTreeNode[], styledC
875
1060
  */
876
1061
  declare function buildTargetedStateSelector(scopeCssId: string, triggerCssId: string, styledCssId: string, base: string): string;
877
1062
 
878
- /** The five fixed breakpoints (plan decision D2). Desktop-first: each narrower one
879
- * overrides the wider ones through `max-width`. */
880
- declare enum Breakpoint {
881
- Base = "base",
882
- Laptop = "laptop",
883
- Tablet = "tablet",
884
- Mobile = "mobile",
885
- Small = "small"
886
- }
887
- /** Every breakpoint that can hold overrides. Base styles live in `styleProps`. */
888
- type OverrideBreakpoint = Exclude<Breakpoint, Breakpoint.Base>;
889
- interface BreakpointDef {
890
- readonly id: Breakpoint;
891
- readonly label: string;
892
- /** Inclusive upper bound in CSS px (`max-width`). `null` for Base, which has no query. */
893
- readonly maxWidth: number | null;
894
- /** Width the builder canvas simulates while this breakpoint is being edited. Always
895
- * inside the breakpoint's own range (above the next one's `maxWidth`). */
896
- readonly previewWidth: number;
897
- }
898
- /**
899
- * Widest → narrowest. This order IS the cascade order and the `@media` emission order.
900
- *
901
- * ⚠️ Phones in portrait (360–430px) land in `Small`, NOT `Mobile` — `Mobile` is 480–767,
902
- * a phone held landscape. The labels say so (as Webflow's do). The ids stay short because
903
- * they are storage keys; the cascade still makes a `Mobile` override reach every phone.
904
- */
905
- declare const BREAKPOINTS: readonly BreakpointDef[];
906
- /** The definition for `bp`, or `undefined` for an unknown id (e.g. hand-edited JSON). */
907
- declare function breakpointDef(bp: Breakpoint | string): BreakpointDef | undefined;
908
- /** Base → `bp`, inclusive — the layers whose values apply at `bp`. Unknown → `[Base]`. */
909
- declare function cascadeChain(bp: Breakpoint | string): Breakpoint[];
910
- /**
911
- * The breakpoint a viewport (or canvas) of `width` CSS px falls in — the narrowest one whose
912
- * `maxWidth` it fits under, else Base. Mirrors how the `max-width` media queries resolve, so the
913
- * builder's editing scope is always the breakpoint the canvas is actually showing.
914
- */
915
- declare function breakpointForWidth(width: number): Breakpoint;
916
- /** The next-wider breakpoint (what `bp` inherits from), or `null` for Base / unknown. */
917
- declare function parentBreakpoint(bp: Breakpoint | string): Breakpoint | null;
918
- /**
919
- * What a breakpoint's width is measured against.
920
- *
921
- * `Media` — the browser viewport. The SSR engine: a visitor's window IS the page.
922
- * `Container` — a named CSS size container. The builder: its canvas is a fixed-width frame inside a
923
- * desktop browser (and `transform: scale`d for zoom), so a media query would read the EDITOR's width.
924
- * A container query reads the frame's own layout width — which equals the simulated viewport and
925
- * ignores the zoom transform — so the builder emits the same structure as the engine.
926
- */
927
- declare enum BreakpointQueryKind {
928
- Media = "media",
929
- Container = "container"
930
- }
931
- /**
932
- * The at-rule prelude for `bp` — `@media (max-width: 767px)`, or with `Container`
933
- * `@container iox-canvas (max-width: 767px)`. `null` for Base or an unknown id.
934
- * `containerName` is required for `Container` (an unnamed container query would match
935
- * whichever ancestor container is nearest, which is not guaranteed to be the canvas).
936
- */
937
- declare function breakpointQueryFor(bp: Breakpoint | string, kind?: BreakpointQueryKind, containerName?: string): string | null;
938
- /** Wrap already-compiled rules for `bp`. Base (and blank css) passes through unwrapped. */
939
- declare function wrapInBreakpointQuery(bp: Breakpoint | string, css: string, kind?: BreakpointQueryKind, containerName?: string): string;
940
- /** `@media (max-width: 767px)` for `bp`; `null` for Base or an unknown id. */
941
- declare function mediaQueryFor(bp: Breakpoint | string): string | null;
942
- /** Wrap already-compiled rules for `bp` in its media query. Base (and blank css) passes through. */
943
- declare function wrapInMediaQuery(bp: Breakpoint | string, css: string): string;
944
- type StyleMap = Record<string, any>;
945
- type StateStyleMap = Record<string, StyleMap>;
946
- /** What one breakpoint overrides. Both maps are SPARSE — only keys that differ. */
947
- interface ResponsiveLayer {
948
- styleProps?: StyleMap;
949
- stateStyles?: StateStyleMap;
950
- }
951
- type ResponsiveOverrides = Partial<Record<OverrideBreakpoint, ResponsiveLayer>>;
952
- /** The full effective style map at `bp`: base, then each layer down the cascade. */
953
- declare function resolveStyleProps(styleProps: StyleMap | null | undefined, responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string): StyleMap;
954
- /** The effective per-state maps at `bp`. States with no values anywhere are omitted. */
955
- declare function resolveStateStyles(stateStyles: StateStyleMap | null | undefined, responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string): StateStyleMap;
956
- /**
957
- * Every state that has a value anywhere — at base or at any breakpoint — in a stable order
958
- * (base states first, then any that exist only at a breakpoint). A renderer iterates this, not
959
- * `Object.keys(stateStyles)`, so a state defined ONLY at a breakpoint (a Mobile-only hover) still
960
- * gets its selector scope resolved.
961
- */
962
- declare function stateNamesIn(stateStyles: StateStyleMap | null | undefined, responsive: ResponsiveOverrides | null | undefined): string[];
963
- /** One level of the cascade that sets a value. */
964
- interface ValueSource {
965
- breakpoint: Breakpoint;
966
- value: any;
967
- }
1063
+ /** Trait names whose value Swiper reads per breakpoint. Anything else is config-wide. */
1064
+ declare const SWIPER_RESPONSIVE_TRAITS: readonly string[];
1065
+ /** `{ [minWidth]: { slidesPerView, … } }` — Swiper's own `breakpoints` shape. */
1066
+ type SwiperBreakpointMap = Record<number, InputMap>;
968
1067
  /**
969
- * Every level from Base down to `bp` that sets `prop` (optionally within `state`), in
970
- * cascade order. The LAST entry is the effective value; an empty array means unset.
971
- * Drives the style panel's source chain ("Base 34 → Tablet 28 → Mobile 22").
972
- */
973
- declare function resolveValueChain(prop: string, styleProps: StyleMap | null | undefined, stateStyles: StateStyleMap | null | undefined, responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string, state?: string): ValueSource[];
974
- /** True when `bp` itself sets `prop` (the style panel's orange edge). Never true for Base. */
975
- declare function isOverriddenAt(responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string, prop: string, state?: string): boolean;
976
- /** Number of overridden values — at `bp`, or across every breakpoint when omitted. */
977
- declare function countOverrides(responsive: ResponsiveOverrides | null | undefined, bp?: Breakpoint | string): number;
978
- /** Returns a new overrides object with `prop` set at `bp` (optionally within `state`). */
979
- declare function setOverride(responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string, prop: string, value: any, state?: string): ResponsiveOverrides;
980
- /**
981
- * Remove overrides at `bp` and PRUNE whatever becomes empty, so "reset" and "never
982
- * overridden" are the same state on disk — no tombstones, no nulls.
1068
+ * Build Swiper's mobile-first `breakpoints` map from IOX's desktop-first layers.
983
1069
  *
984
- * clearOverride(r, bp) — the whole breakpoint
985
- * clearOverride(r, bp, undefined, st) — one state at that breakpoint
986
- * clearOverride(r, bp, prop) — one base-state value
987
- * clearOverride(r, bp, prop, st) — one value within a state
1070
+ * Each IOX breakpoint covers `[nextNarrower.maxWidth + 1 … this.maxWidth]`, so the Swiper key for a
1071
+ * layer is **one px above the next-narrower breakpoint's max-width** — the low edge of the band the
1072
+ * layer governs. Base becomes the key above the widest bounded breakpoint.
988
1073
  *
989
- * Returns `undefined` when nothing is left, so a serialiser omits the key entirely.
990
- */
991
- declare function clearOverride(responsive: ResponsiveOverrides | null | undefined, bp: Breakpoint | string, prop?: string, state?: string): ResponsiveOverrides | undefined;
992
- /**
993
- * Everything one breakpoint must emit, already composed. Wrap in `mediaQuery` (engine)
994
- * or apply directly (builder, flattened).
1074
+ * Values are the RESOLVED ones at each width (base + every wider layer), never the raw sparse layer:
1075
+ * Swiper does not cascade between its own breakpoints the way CSS does — the largest matching key
1076
+ * wins outright and is not merged with smaller ones — so each entry must be self-sufficient.
995
1077
  *
996
- * ⚠️ Compile these maps with `compileDeclarations(map, …, DeclarationContext.Override)`. The
997
- * default Base context drops CSS initial values as no-ops — but here `width: auto` or
998
- * `transform: none` is how a breakpoint UNDOES the wider value, and dropping it silently keeps
999
- * the desktop style.
1078
+ * Only `SWIPER_RESPONSIVE_TRAITS` are emitted, and a band is omitted when it matches the band below
1079
+ * it, keeping the config as small as the author's actual overrides.
1000
1080
  */
1001
- interface ResponsiveRuleSet {
1002
- breakpoint: OverrideBreakpoint;
1003
- mediaQuery: string;
1004
- /** Sparse declarations for the node itself at this width (virtual traits composed). */
1005
- styleProps: StyleMap;
1006
- /** Sparse declarations per state at this width (virtual traits composed). */
1007
- stateStyles: StateStyleMap;
1008
- }
1081
+ declare function buildSwiperBreakpoints(inputs: InputMap | null | undefined, responsive: ResponsiveOverrides | null | undefined): SwiperBreakpointMap;
1009
1082
  /**
1010
- * The per-breakpoint rule sets a node needs, widest → narrowest (the order they must be
1011
- * emitted in, AFTER every base rule — equal specificity means source order decides).
1012
- * Breakpoints with nothing to emit are omitted.
1013
- *
1014
- * Handles the cross-axis case: a breakpoint that changes a virtual group (say
1015
- * `translateX`) also re-emits that group for every state the node has, because the wider
1016
- * state rule was composed against the wider value and would otherwise snap back to it on
1017
- * hover.
1083
+ * The full `breakpoints` value to hand Swiper: the derived map, with any hand-written advanced JSON
1084
+ * merged OVER it so an author's explicit escape hatch always wins.
1018
1085
  */
1019
- declare function planResponsiveRules(styleProps: StyleMap | null | undefined, stateStyles: StateStyleMap | null | undefined, responsive: ResponsiveOverrides | null | undefined): ResponsiveRuleSet[];
1086
+ declare function mergeSwiperBreakpoints(derived: SwiperBreakpointMap, advancedJson: string | null | undefined): SwiperBreakpointMap | undefined;
1020
1087
 
1021
1088
  /**
1022
1089
  * Shared data-source resolving pattern — the SINGLE source of truth for how an IoxDataSource
@@ -1935,5 +2002,5 @@ declare class GalleryLoop {
1935
2002
  private emit;
1936
2003
  }
1937
2004
 
1938
- 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, SectionComponent, TRANSITION_FEELS, TextBlockComponent, VIRTUAL_TRAIT_GROUPS, VIRTUAL_TRAIT_KEYS, ViewPositionDirective, ViewPositionModule, WebSettingsService, activeActions, applyBindingPipes, applyFeel, breakpointDef, breakpointForWidth, breakpointQueryFor, buildDataSourceFilter, buildRelatedFilter, buildTargetedStateSelector, buildTransitionTimeline, cascadeChain, clearOverride, collectContextSlotKeys, collectReferencedAliases, compileDeclarations, composeVirtualTraits, computeRelative, contextActionEffect, contextSlotKeys, countOverrides, dataSourcePlanToRequest, declaredInputNames, effectiveTransitionId, excludeSelf, feelFor, getByPath, initialSlotValues, isActionEnabled, isContextAction, isOverriddenAt, isReservedAlias, isValidSlotKey, legacyEnterToTransition, matchRouteParams, mediaQueryFor, nearestCommonAncestorId, nodeCssId, nodeUsesContext, normalizeCollectionResult, normalizeGalleryImage, parentBreakpoint, parseUrlList, planDataSource, planResponsiveRules, referencedDataSources, referencedDataSourcesDeep, renderDefaultDeclarations, resolveContextValue, resolveDerivedInto, resolveGalleryEffect, resolveGalleryUrls, resolvePageTransition, resolvePath, resolveRelativeInto, resolveRepeaterItems, resolveSiblings, resolveSingleItemId, resolveStateStyles, resolveStyleProps, resolveValueChain, rewriteViewportUnits, safeSetInput, setOverride, stateNamesIn, stripSuppressedProps, styleKeyToKebab, variableAliases, variableItemsFrom, withContextSlots, wrapInBreakpointQuery, wrapInMediaQuery };
1939
- 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, IoxContextSlot, IoxPipe, OverrideBreakpoint, PageTransitionCategory, PageTransitionCategoryMeta, PageTransitionOptions, PageTransitionPreset, PipeArgSpec, PipeContext, PipeDescriptor, RelativeInputs, RelativeSourceKind, RelativeSourceSpec, ResolveSiblingsOptions, ResolvedPageTransition, ResponsiveLayer, ResponsiveOverrides, ResponsiveRuleSet, RouteContext, SetContextParams, SiblingsResult, StateStyleMap, StyleMap, StyleTreeNode, ToggleableAction, TransitionFeel, TransitionPhase, TransitionTimelineInput, ValueSource, VirtualTraitGroup };
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 };
2006
+ 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.25.0",
3
+ "version": "4.26.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=20.0.0",
6
6
  "@angular/core": ">=20.0.0",