@vectoriox/iox-ui 5.84.0 → 5.85.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.
Files changed (37) hide show
  1. package/actions-core/index.d.ts +18 -2
  2. package/composite-core/index.d.ts +93 -15
  3. package/design-core/index.d.ts +566 -4
  4. package/fesm2022/vectoriox-iox-ui-actions-core.mjs +18 -1
  5. package/fesm2022/vectoriox-iox-ui-actions-core.mjs.map +1 -1
  6. package/fesm2022/vectoriox-iox-ui-composite-core.mjs +307 -39
  7. package/fesm2022/vectoriox-iox-ui-composite-core.mjs.map +1 -1
  8. package/fesm2022/vectoriox-iox-ui-design-core.mjs +680 -15
  9. package/fesm2022/vectoriox-iox-ui-design-core.mjs.map +1 -1
  10. package/fesm2022/vectoriox-iox-ui-generation-core.mjs +35 -4
  11. package/fesm2022/vectoriox-iox-ui-generation-core.mjs.map +1 -1
  12. package/fesm2022/vectoriox-iox-ui-scene-core.mjs +101 -5
  13. package/fesm2022/vectoriox-iox-ui-scene-core.mjs.map +1 -1
  14. package/fesm2022/vectoriox-iox-ui.mjs +285 -12
  15. package/fesm2022/vectoriox-iox-ui.mjs.map +1 -1
  16. package/generation-core/index.d.ts +13 -0
  17. package/index.d.ts +143 -42
  18. package/package.json +1 -1
  19. package/scene-core/index.d.ts +32 -4
  20. package/src/actions-core/dialog-motion.ts +25 -0
  21. package/src/composite-core/header.ts +25 -0
  22. package/src/composite-core/public-api.ts +1 -0
  23. package/src/composite-core/slider-runtime.ts +82 -0
  24. package/src/composite-core/slider.ts +194 -27
  25. package/src/composite-core/structure.ts +14 -9
  26. package/src/design-core/flavor-spec.generated.ts +596 -9
  27. package/src/design-core/header-behaviour.ts +76 -0
  28. package/src/design-core/public-api.ts +1 -0
  29. package/src/design-core/theme-color.ts +21 -5
  30. package/src/generation-core/compose-site.ts +8 -0
  31. package/src/generation-core/node-baselines.generated.ts +17 -3
  32. package/src/generation-core/patterns.ts +2 -0
  33. package/src/generation-core/site-spec.generated.ts +8 -0
  34. package/src/scene-core/scene.ts +18 -0
  35. package/src/scene-core/scroll-driver.ts +83 -6
  36. package/styles/iox-design.css +232 -1
  37. package/styles/iox-forms.css +5 -2
@@ -6,16 +6,16 @@ import { Subject, fromEvent } from 'rxjs';
6
6
  import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
7
7
  import * as i1 from '@angular/common';
8
8
  import { CommonModule, isPlatformBrowser } from '@angular/common';
9
- import { SPEC_AXES, resolveDesignMotion } from '@vectoriox/iox-ui/design-core';
9
+ import { SPEC_AXES, resolveDesignMotion, HeaderAttribute, HeaderBehaviour, headerAttributes, HeaderTrait } from '@vectoriox/iox-ui/design-core';
10
10
  export * from '@vectoriox/iox-ui/design-core';
11
11
  import Lenis from 'lenis';
12
- import { SLIDER_WORDS, sliderPartElement, SliderRole, sliderWords, attachCarouselA11y, isSliderPart } from '@vectoriox/iox-ui/composite-core';
12
+ import { SLIDER_WORDS, sliderPartElement, SliderRole, sliderWords, attachCarouselA11y, attachSliderBar, isSliderPart, SLIDE_TYPE, SLIDE_CAPTION_TRAIT } from '@vectoriox/iox-ui/composite-core';
13
+ import { SceneAttribute, SCENE_WAKE_EVENT, SCENE_REVEAL_DEFAULT, SceneRevealFrom, revealClipPath, TextRevealBy, playTextReveal } from '@vectoriox/iox-ui/scene-core';
13
14
  import { getByPath } from '@vectoriox/iox-ui/data-core';
14
15
  export * from '@vectoriox/iox-ui/data-core';
15
16
  import { dialogOpenerAttributes, dialogDomId } from '@vectoriox/iox-ui/actions-core';
16
17
  import { VideoKind, planVideo, videoRootAttributes, videoInnerHtml, videoWords, VideoAttribute, attachVideoAt, VideoClass } from '@vectoriox/iox-ui/media-core';
17
18
  import * as i1$1 from '@angular/platform-browser';
18
- import { SCENE_REVEAL_DEFAULT, SceneRevealFrom, revealClipPath, TextRevealBy, playTextReveal } from '@vectoriox/iox-ui/scene-core';
19
19
 
20
20
  class ViewPositionDirective {
21
21
  constructor(_elr) {
@@ -2140,10 +2140,19 @@ function stateTransitionProperties(stateStyles, responsive, type) {
2140
2140
  }
2141
2141
  return out;
2142
2142
  }
2143
+ /**
2144
+ * What an element style animates beyond the properties its states change (premium M4): a link's underline is DRAWN by
2145
+ * the shared CSS (`iox-design.css`) as a background line that grows from the reading start on hover — its growth is a
2146
+ * `background-size` the node's own transition must name, or it would jump.
2147
+ */
2148
+ const ELEMENT_STYLE_TRANSITION_EXTRAS = {
2149
+ link: ['background-size'],
2150
+ };
2143
2151
  /**
2144
2152
  * `styleProps` as a renderer compiles them: a hovering node with no timing of its own takes the default hover timing,
2145
- * and a node whose transition names no properties gets the ones its states change. An author's own `transitionProperty`
2146
- * (or a raw `transition`) always wins. Pure: the node's stored styles are never touched.
2153
+ * and a node whose transition names no properties gets the ones its states change (and what its element style draws,
2154
+ * `ELEMENT_STYLE_TRANSITION_EXTRAS`). An author's own `transitionProperty` (or a raw `transition`) always wins. Pure:
2155
+ * the node's stored styles are never touched.
2147
2156
  */
2148
2157
  function withStateTransitions(styleProps, stateStyles, elementStyle, responsive, type) {
2149
2158
  let out = styleProps;
@@ -2151,6 +2160,9 @@ function withStateTransitions(styleProps, stateStyles, elementStyle, responsive,
2151
2160
  out = { ...out, ...defaultHoverTransitionTraits(elementStyle) };
2152
2161
  if (!isFilled(out['transitionProperty']) && !isFilled(out['transition'])) {
2153
2162
  const props = stateTransitionProperties(stateStyles, responsive, type);
2163
+ for (const extra of (elementStyle ? ELEMENT_STYLE_TRANSITION_EXTRAS[elementStyle] : null) ?? [])
2164
+ if (props.length && !props.includes(extra))
2165
+ props.push(extra);
2154
2166
  if (props.length)
2155
2167
  out = { ...out, transitionProperty: props.join(', ') };
2156
2168
  }
@@ -2840,6 +2852,16 @@ const LEGACY_SWIPER_CONTROLS = {
2840
2852
  pagination: '.swiper-pagination',
2841
2853
  scrollbar: '.swiper-scrollbar',
2842
2854
  };
2855
+ /**
2856
+ * The feel every live slider gets (premium M4, T3 — Emil 114/121): past either end a drag meets friction, not a wall
2857
+ * (resistance), and a swipe commits only after a few px of travel, so a vertical scroll that drifts never moves a slide.
2858
+ * The easing of the slides is the look's (`slider-ease`, iox-design.css).
2859
+ */
2860
+ const SLIDER_FEEL = { resistanceRatio: 0.65, threshold: 6 };
2861
+ /** At or under this width one picture takes the full width (M1.3) unless the author said otherwise there. */
2862
+ const SLIDER_PHONE_BREAKPOINT = 'mobile';
2863
+ /** Effects that always show one slide (a stack, a turn): a phone keeps their own layout. */
2864
+ const ONE_SLIDE_EFFECTS = new Set(['fade', 'cube', 'flip', 'cards']);
2843
2865
  /** The pagination part's classes — Swiper's own position CSS (`.swiper-pagination-bullets.swiper-pagination-horizontal`)
2844
2866
  * must not pin a PART: its place is its own styles'. The dots keep Swiper's bullet class. */
2845
2867
  const PART_PAGINATION_MODIFIER = 'iox-slider-pagination-';
@@ -2862,6 +2884,24 @@ function perView(v) {
2862
2884
  const n = num$1(v, 1);
2863
2885
  return n > 0 ? n : 'auto';
2864
2886
  }
2887
+ /**
2888
+ * One picture the full width on a phone (M1.3) — the default the M1 prototype proved: a 1.15 "peek" left an empty strip
2889
+ * beside the picture. Added as a phone layer only where the author set no slides-per-view at a phone width; an effect
2890
+ * that shows one slide anyway keeps its own (a "cards" stack stays a centred card, iox-design.css).
2891
+ */
2892
+ function withPhoneDefaults(inputs) {
2893
+ const responsive = inputs.responsive ?? null;
2894
+ if (ONE_SLIDE_EFFECTS.has(String(inputs.effect ?? 'slide')))
2895
+ return responsive;
2896
+ const authored = (bp) => {
2897
+ const layer = responsive?.[bp];
2898
+ return layer?.inputs?.['slidesPerView'] !== undefined;
2899
+ };
2900
+ if (authored('mobile') || authored('small'))
2901
+ return responsive;
2902
+ const phone = responsive?.[SLIDER_PHONE_BREAKPOINT];
2903
+ return { ...(responsive ?? {}), [SLIDER_PHONE_BREAKPOINT]: { ...(phone ?? {}), inputs: { ...(phone?.inputs ?? {}), slidesPerView: 1 } } };
2904
+ }
2865
2905
  function collectResponsiveInputs(inputs) {
2866
2906
  const all = { slidesPerView: inputs.slidesPerView, slidesPerGroup: inputs.slidesPerGroup, spaceBetween: inputs.spaceBetween };
2867
2907
  const out = {};
@@ -2876,7 +2916,10 @@ function planSwiperOptions(inputs, ctx) {
2876
2916
  const edit = !!ctx.edit;
2877
2917
  const hasNav = parts ? !!(parts.prev || parts.next) : on(inputs.enableNavigation);
2878
2918
  const hasDots = parts ? !!parts.pagination : on(inputs.enablePagination);
2879
- const autoplay = !edit && on(inputs.enableAutoplay);
2919
+ // M4: a slider the scroll plays is moved by the page's scroll only (and only while motion is allowed — under reduced
2920
+ // motion it is an ordinary slider).
2921
+ const played = !edit && on(inputs.scrollPlays) && ctx.motion;
2922
+ const autoplay = !edit && !played && on(inputs.enableAutoplay);
2880
2923
  const flags = {
2881
2924
  enableNavigation: hasNav,
2882
2925
  enablePagination: hasDots,
@@ -2915,10 +2958,17 @@ function planSwiperOptions(inputs, ctx) {
2915
2958
  // disabling them at either end (a disabled <button> takes no click).
2916
2959
  options['rewind'] = true;
2917
2960
  }
2961
+ else if (played) {
2962
+ options['allowTouchMove'] = false;
2963
+ options['simulateTouch'] = false;
2964
+ options['grabCursor'] = false;
2965
+ options['loop'] = false;
2966
+ options['rewind'] = false;
2967
+ }
2918
2968
  else {
2919
2969
  options['grabCursor'] = inputs.grabCursor !== false;
2920
2970
  options['slideToClickedSlide'] = on(inputs.slideToClickedSlide);
2921
- Object.assign(options, swiperLoopOptions(inputs.loop));
2971
+ Object.assign(options, swiperLoopOptions(inputs.loop), SLIDER_FEEL);
2922
2972
  if (on(inputs.freeMode))
2923
2973
  options['freeMode'] = true;
2924
2974
  }
@@ -2966,7 +3016,7 @@ function planSwiperOptions(inputs, ctx) {
2966
3016
  containerRole: ctx.named ? 'region' : 'group',
2967
3017
  };
2968
3018
  if (!edit) {
2969
- const derived = buildSwiperBreakpoints(collectResponsiveInputs(inputs), inputs.responsive ?? null);
3019
+ const derived = buildSwiperBreakpoints(collectResponsiveInputs(inputs), withPhoneDefaults(inputs));
2970
3020
  const map = mergeSwiperBreakpoints(derived, inputs.breakpoints ?? '');
2971
3021
  if (map)
2972
3022
  options['breakpoints'] = map;
@@ -3020,8 +3070,46 @@ async function bootSlider(el, inputs, options = {}) {
3020
3070
  const swiper = new Swiper(el, { ...plan.options, modules, on });
3021
3071
  if (!options.edit)
3022
3072
  attachCarouselA11y(swiper, { words });
3073
+ attachSliderBar(swiper);
3074
+ if (inputs.scrollPlays)
3075
+ prepareScrollPlay(el, swiper);
3023
3076
  return swiper;
3024
3077
  }
3078
+ /** The element a slider the scroll plays is held in: its runway, the Scene root the ONE driver drives (premium M4). */
3079
+ const SLIDER_RUNWAY_CLASS = 'iox-slider-runway';
3080
+ /** The runway's steps (slides − 1): how many half-screens of scroll it reserves (iox-design.css). */
3081
+ const SLIDER_STEPS_PROPERTY = '--slider-steps';
3082
+ /**
3083
+ * The runway a slider the scroll plays sits in — ONE answer for the string path (it writes this wrapper, steps known at
3084
+ * render, so the page never shifts) and the component path (the same class and Scene root; its boot writes the steps).
3085
+ * Null when the scroll does not play it.
3086
+ */
3087
+ function sliderRunwayHtml(inputs, slideCount) {
3088
+ if (!(inputs?.scrollPlays === true || inputs?.scrollPlays === 'true'))
3089
+ return null;
3090
+ const steps = Math.max(0, Math.floor(slideCount) - 1);
3091
+ return { open: `<div class="${SLIDER_RUNWAY_CLASS}" ${SceneAttribute.Root}="" style="${SLIDER_STEPS_PROPERTY}: ${steps}">`, close: '</div>' };
3092
+ }
3093
+ /**
3094
+ * Ready a slider the scroll plays: its runway learns how tall it is (it holds the slider mid-screen — iox-design.css) and
3095
+ * how many steps it has, its stage is marked for the scene driver, and the driver is woken — the Swiper it plays has
3096
+ * just arrived (an event, never a DOM scroll). Measured on resize, never per frame.
3097
+ */
3098
+ function prepareScrollPlay(el, swiper) {
3099
+ const runway = el.closest(`.${SLIDER_RUNWAY_CLASS}`);
3100
+ // The stage is what the runway holds: the `.swiper` itself, or the canvas's shell around it.
3101
+ const stage = runway ? Array.from(runway.children).find(c => c.contains(el)) : undefined;
3102
+ if (!runway || !stage)
3103
+ return;
3104
+ stage.setAttribute(SceneAttribute.Stage, '');
3105
+ runway.style.setProperty(SLIDER_STEPS_PROPERTY, String(Math.max(0, (swiper.slides?.length ?? 1) - 1)));
3106
+ const measure = () => runway.style.setProperty('--slider-h', `${stage.offsetHeight}px`);
3107
+ measure();
3108
+ const Observer = stage.ownerDocument?.defaultView?.ResizeObserver;
3109
+ if (Observer)
3110
+ new Observer(measure).observe(stage);
3111
+ el.dispatchEvent(new CustomEvent(SCENE_WAKE_EVENT, { bubbles: true }));
3112
+ }
3025
3113
  /** The inputs a string-path slider carries (`data-iox-slider`), or null. */
3026
3114
  function sliderInputsOf(el) {
3027
3115
  const raw = el.getAttribute(SLIDER_INPUTS_ATTRIBUTE);
@@ -3041,6 +3129,7 @@ const SLIDER_INPUT_NAMES = [
3041
3129
  'autoHeight', 'slideToClickedSlide', 'freeMode', 'loop', 'enableNavigation', 'enablePagination', 'enableScrollbar', 'enableAutoplay',
3042
3130
  'enableKeyboard', 'enableMousewheel', 'enableZoom', 'enableGrid', 'enableParallax', 'autoplayDelay', 'autoplayPauseOnMouseEnter',
3043
3131
  'autoplayDisableOnInteraction', 'paginationType', 'paginationClickable', 'paginationDynamicBullets', 'gridRows', 'breakpoints',
3132
+ 'scrollPlays',
3044
3133
  ];
3045
3134
  function sliderInputsFromProps(props, responsive) {
3046
3135
  const out = {};
@@ -3057,7 +3146,8 @@ function sliderInputsFromProps(props, responsive) {
3057
3146
  * shared boot). The slides render into `.swiper-wrapper` (`childrenHost` — the `.swiper-slide` direct-child invariant,
3058
3147
  * slider.md); the control PARTS (CC3: Previous, Next, Pause, Pagination — `childHostFor`) render beside it, inside
3059
3148
  * `.swiper`: those before the first slide before the wrapper, the rest after it. A saved slider with no parts keeps
3060
- * Swiper-drawn controls (the legacy switches). Swiper is booted by the ONE shared `bootSlider`.
3149
+ * Swiper-drawn controls (the legacy switches). Swiper is booted by the ONE shared `bootSlider`. A slider the scroll plays
3150
+ * (premium M4) sits in its runway — the string path writes the same `iox-slider-runway` wrapper.
3061
3151
  */
3062
3152
  class ClientSliderContainerComponent {
3063
3153
  constructor(platformId) {
@@ -3103,6 +3193,9 @@ class ClientSliderContainerComponent {
3103
3193
  this.responsive = null;
3104
3194
  /** The slider's controls are parts (set by the renderer from the node): Swiper draws none of its own. */
3105
3195
  this.controlParts = false;
3196
+ /** Premium M4: the scroll plays it — a runway (a Scene root the ONE driver drives) holds it mid-screen; otherwise the
3197
+ * wrapper is `display: contents` and the slider lays out exactly as before. */
3198
+ this.scrollPlays = false;
3106
3199
  this.swiper = null;
3107
3200
  this.slidesSeen = false;
3108
3201
  this.instanceRegistry = inject(ComponentInstanceRegistryService);
@@ -3151,11 +3244,12 @@ class ClientSliderContainerComponent {
3151
3244
  enableZoom: this.enableZoom, enableGrid: this.enableGrid, enableParallax: this.enableParallax, autoplayDelay: this.autoplayDelay,
3152
3245
  autoplayPauseOnMouseEnter: this.autoplayPauseOnMouseEnter, autoplayDisableOnInteraction: this.autoplayDisableOnInteraction,
3153
3246
  paginationType: this.paginationType, paginationClickable: this.paginationClickable, paginationDynamicBullets: this.paginationDynamicBullets,
3154
- gridRows: this.gridRows, breakpoints: this.breakpoints, responsive: this.responsive,
3247
+ gridRows: this.gridRows, breakpoints: this.breakpoints, responsive: this.responsive, scrollPlays: this.scrollPlays,
3155
3248
  };
3156
3249
  }
3157
3250
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: ClientSliderContainerComponent, deps: [{ token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
3158
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.31", type: ClientSliderContainerComponent, isStandalone: false, selector: "iox-slider-container", inputs: { nodeId: "nodeId", dir: "dir", direction: "direction", loop: "loop", slidesPerView: "slidesPerView", slidesPerGroup: "slidesPerGroup", spaceBetween: "spaceBetween", speed: "speed", effect: "effect", grabCursor: "grabCursor", centeredSlides: "centeredSlides", initialSlide: "initialSlide", autoHeight: "autoHeight", slideToClickedSlide: "slideToClickedSlide", freeMode: "freeMode", enableNavigation: "enableNavigation", enablePagination: "enablePagination", enableScrollbar: "enableScrollbar", enableAutoplay: "enableAutoplay", enableKeyboard: "enableKeyboard", enableMousewheel: "enableMousewheel", enableZoom: "enableZoom", enableGrid: "enableGrid", enableParallax: "enableParallax", autoplayDelay: "autoplayDelay", autoplayPauseOnMouseEnter: "autoplayPauseOnMouseEnter", autoplayDisableOnInteraction: "autoplayDisableOnInteraction", paginationType: "paginationType", paginationClickable: "paginationClickable", paginationDynamicBullets: "paginationDynamicBullets", navigationColor: "navigationColor", paginationColor: "paginationColor", gridRows: "gridRows", breakpoints: "breakpoints", responsive: "responsive", controlParts: "controlParts" }, viewQueries: [{ propertyName: "childrenHost", first: true, predicate: ["childrenHost"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "leadHost", first: true, predicate: ["leadHost"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "trailHost", first: true, predicate: ["trailHost"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "swiperEl", first: true, predicate: ["swiperEl"], descendants: true, static: true }], ngImport: i0, template: `
3251
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.31", type: ClientSliderContainerComponent, isStandalone: false, selector: "iox-slider-container", inputs: { nodeId: "nodeId", dir: "dir", direction: "direction", loop: "loop", slidesPerView: "slidesPerView", slidesPerGroup: "slidesPerGroup", spaceBetween: "spaceBetween", speed: "speed", effect: "effect", grabCursor: "grabCursor", centeredSlides: "centeredSlides", initialSlide: "initialSlide", autoHeight: "autoHeight", slideToClickedSlide: "slideToClickedSlide", freeMode: "freeMode", enableNavigation: "enableNavigation", enablePagination: "enablePagination", enableScrollbar: "enableScrollbar", enableAutoplay: "enableAutoplay", enableKeyboard: "enableKeyboard", enableMousewheel: "enableMousewheel", enableZoom: "enableZoom", enableGrid: "enableGrid", enableParallax: "enableParallax", autoplayDelay: "autoplayDelay", autoplayPauseOnMouseEnter: "autoplayPauseOnMouseEnter", autoplayDisableOnInteraction: "autoplayDisableOnInteraction", paginationType: "paginationType", paginationClickable: "paginationClickable", paginationDynamicBullets: "paginationDynamicBullets", navigationColor: "navigationColor", paginationColor: "paginationColor", gridRows: "gridRows", breakpoints: "breakpoints", responsive: "responsive", controlParts: "controlParts", scrollPlays: "scrollPlays" }, viewQueries: [{ propertyName: "childrenHost", first: true, predicate: ["childrenHost"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "leadHost", first: true, predicate: ["leadHost"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "trailHost", first: true, predicate: ["trailHost"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "swiperEl", first: true, predicate: ["swiperEl"], descendants: true, static: true }], ngImport: i0, template: `
3252
+ <div [class.iox-slider-runway]="scrollPlays" [attr.data-iox-scene]="scrollPlays ? '' : null" [style.display]="scrollPlays ? null : 'contents'">
3159
3253
  <div class="swiper" [class]="'swiper iox-node-' + nodeId" [attr.dir]="dir" [style.direction]="dir"
3160
3254
  [style.--swiper-navigation-color]="legacyControls ? (navigationColor || null) : null"
3161
3255
  [style.--swiper-pagination-color]="legacyControls ? (paginationColor || null) : null" #swiperEl>
@@ -3169,11 +3263,13 @@ class ClientSliderContainerComponent {
3169
3263
  <div *ngIf="legacyControls && enablePagination" class="swiper-pagination"></div>
3170
3264
  <div *ngIf="enableScrollbar" class="swiper-scrollbar"></div>
3171
3265
  </div>
3266
+ </div>
3172
3267
  `, isInline: true, styles: [".swiper{width:100%;height:100%;box-sizing:border-box}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
3173
3268
  }
3174
3269
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: ClientSliderContainerComponent, decorators: [{
3175
3270
  type: Component,
3176
3271
  args: [{ selector: 'iox-slider-container', template: `
3272
+ <div [class.iox-slider-runway]="scrollPlays" [attr.data-iox-scene]="scrollPlays ? '' : null" [style.display]="scrollPlays ? null : 'contents'">
3177
3273
  <div class="swiper" [class]="'swiper iox-node-' + nodeId" [attr.dir]="dir" [style.direction]="dir"
3178
3274
  [style.--swiper-navigation-color]="legacyControls ? (navigationColor || null) : null"
3179
3275
  [style.--swiper-pagination-color]="legacyControls ? (paginationColor || null) : null" #swiperEl>
@@ -3187,6 +3283,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
3187
3283
  <div *ngIf="legacyControls && enablePagination" class="swiper-pagination"></div>
3188
3284
  <div *ngIf="enableScrollbar" class="swiper-scrollbar"></div>
3189
3285
  </div>
3286
+ </div>
3190
3287
  `, standalone: false, styles: [".swiper{width:100%;height:100%;box-sizing:border-box}\n"] }]
3191
3288
  }], ctorParameters: () => [{ type: undefined, decorators: [{
3192
3289
  type: Inject,
@@ -3263,6 +3360,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
3263
3360
  type: Input
3264
3361
  }], controlParts: [{
3265
3362
  type: Input
3363
+ }], scrollPlays: [{
3364
+ type: Input
3266
3365
  }], childrenHost: [{
3267
3366
  type: ViewChild,
3268
3367
  args: ['childrenHost', { read: ViewContainerRef, static: true }]
@@ -7771,6 +7870,170 @@ function isCurrentLink(href, currentPath, options = {}) {
7771
7870
  return !!options.prefix && target !== '' && here.startsWith(`${target}/`);
7772
7871
  }
7773
7872
 
7873
+ /**
7874
+ * A header that HIDES (premium components T2, M4): it steps aside while the page scrolls down and comes back the moment
7875
+ * it scrolls up — ONE runtime for the live site (the window's scroll) and the builder canvas (its Lenis scroll, handed in
7876
+ * through `update`). It never moves while the visitor is inside it: keyboard focus in the header, or its own drawer
7877
+ * open, keeps it in place, and it is always there at the top of the page.
7878
+ *
7879
+ * Motion (Emil 30/41/52/59/192): `translate` only, from the live value (a run interrupted by a change of direction turns
7880
+ * back from where it is — never stacked); the exit is faster than the return (dur-fast out, dur-ui back, on the look's
7881
+ * standard easing — the tokens collapse with the look's motion); under reduced motion it fades in place (opacity, no
7882
+ * movement — gentler, not zero), and is not clickable while faded. The return RELEASES (no inline frame is left), the
7883
+ * hidden frame is held, as every exit in the product (M2's settle rule).
7884
+ *
7885
+ * A header that only STAYS needs no runtime: the shared CSS keeps it at the top (`iox-design.css`).
7886
+ */
7887
+ /** Page px the scroll must travel in one direction before the header answers — past a trackpad's jitter. */
7888
+ const HEADER_SCROLL_HYSTERESIS_PX = 6;
7889
+ const FALLBACK_HIDE_MS = 150;
7890
+ const FALLBACK_SHOW_MS = 200;
7891
+ const FALLBACK_EASING = 'ease-out';
7892
+ const HIDE_DURATION_TOKEN = '--iox-dur-fast';
7893
+ const SHOW_DURATION_TOKEN = '--iox-dur-ui';
7894
+ const EASING_TOKEN = '--iox-ease-standard';
7895
+ const SUPPORTED_EASING = /^(linear|ease|ease-in|ease-out|ease-in-out|cubic-bezier\(.+\)|linear\(.+\)|steps\(.+\))$/;
7896
+ const OPEN_DIALOG = 'dialog[open]';
7897
+ /** `120ms` / `0.2s` → milliseconds; anything else → null. */
7898
+ function durationMs(value) {
7899
+ const m = /^(-?\d*\.?\d+)(ms|s)$/.exec(String(value ?? '').trim());
7900
+ if (!m)
7901
+ return null;
7902
+ const n = Number(m[1]) * (m[2] === 's' ? 1000 : 1);
7903
+ return Number.isFinite(n) && n >= 0 ? n : null;
7904
+ }
7905
+ /**
7906
+ * Whether a hiding header should step aside now: the page moved DOWN past the header's own height, the header is not
7907
+ * held (focus inside, its drawer open). Pure: the direction and the offsets come from the caller.
7908
+ */
7909
+ function headerShouldHide(offset, delta, headerHeight, held) {
7910
+ if (held || !(delta > 0))
7911
+ return false;
7912
+ return offset > Math.max(0, headerHeight);
7913
+ }
7914
+ class HeaderRuntime {
7915
+ constructor(header, options = {}) {
7916
+ this.header = header;
7917
+ this.options = options;
7918
+ this.lastOffset = 0;
7919
+ this.hidden = false;
7920
+ this.height = 0;
7921
+ this.anim = null;
7922
+ this.onFocusIn = () => this.setHidden(false);
7923
+ const view = header.ownerDocument?.defaultView;
7924
+ this.height = header.offsetHeight;
7925
+ this.resize = view?.ResizeObserver ? new view.ResizeObserver(() => { this.height = this.header.offsetHeight; }) : null;
7926
+ this.resize?.observe(header);
7927
+ header.addEventListener('focusin', this.onFocusIn);
7928
+ }
7929
+ /** True while the header has stepped aside. */
7930
+ get isHidden() {
7931
+ return this.hidden;
7932
+ }
7933
+ /** The page now stands at `offset` page px (layout px — the canvas divides out its zoom). */
7934
+ update(offset) {
7935
+ if (!Number.isFinite(offset))
7936
+ return;
7937
+ const delta = offset - this.lastOffset;
7938
+ if (offset <= this.height) {
7939
+ // Its own height from the top: the header is where it belongs, whichever way the page moves.
7940
+ this.lastOffset = offset;
7941
+ this.setHidden(false);
7942
+ return;
7943
+ }
7944
+ if (Math.abs(delta) < HEADER_SCROLL_HYSTERESIS_PX)
7945
+ return;
7946
+ this.lastOffset = offset;
7947
+ this.setHidden(headerShouldHide(offset, delta, this.height, this.held()));
7948
+ }
7949
+ /** Back in place now, with no motion (a page change, the runtime going away). */
7950
+ reset() {
7951
+ this.anim?.cancel();
7952
+ this.anim = null;
7953
+ this.hidden = false;
7954
+ this.header.removeAttribute(HeaderAttribute.Hidden);
7955
+ }
7956
+ destroy() {
7957
+ this.reset();
7958
+ this.resize?.disconnect();
7959
+ this.header.removeEventListener('focusin', this.onFocusIn);
7960
+ }
7961
+ held() {
7962
+ return this.header.matches(':focus-within') || !!this.header.querySelector(OPEN_DIALOG);
7963
+ }
7964
+ setHidden(hidden) {
7965
+ if (hidden === this.hidden)
7966
+ return;
7967
+ this.hidden = hidden;
7968
+ this.header.toggleAttribute(HeaderAttribute.Hidden, hidden);
7969
+ const reduce = prefersReducedMotion(this.options.host ?? this.header.ownerDocument?.defaultView ?? null);
7970
+ const prop = reduce ? 'opacity' : 'translate';
7971
+ const shown = reduce ? '1' : '0px 0px';
7972
+ const away = reduce ? '0' : '0px -100%';
7973
+ const style = this.header.ownerDocument?.defaultView?.getComputedStyle(this.header);
7974
+ // From the live value when a run is in flight (a change of direction mid-way turns back from where it is).
7975
+ const from = this.anim ? (style?.getPropertyValue(prop) || (hidden ? shown : away)) : (hidden ? shown : away);
7976
+ this.anim?.cancel();
7977
+ this.anim = null;
7978
+ if (typeof this.header.animate !== 'function')
7979
+ return;
7980
+ const duration = durationMs(style?.getPropertyValue(hidden ? HIDE_DURATION_TOKEN : SHOW_DURATION_TOKEN)) ?? (hidden ? FALLBACK_HIDE_MS : FALLBACK_SHOW_MS);
7981
+ const easing = style?.getPropertyValue(EASING_TOKEN)?.trim() ?? '';
7982
+ const anim = this.header.animate([{ [prop]: from }, { [prop]: hidden ? away : shown }], {
7983
+ duration, easing: SUPPORTED_EASING.test(easing) ? easing : FALLBACK_EASING, fill: hidden ? 'forwards' : 'none',
7984
+ });
7985
+ this.anim = anim;
7986
+ if (!hidden)
7987
+ anim.finished?.then(() => { if (this.anim === anim) {
7988
+ anim.cancel();
7989
+ this.anim = null;
7990
+ } }).catch(() => { });
7991
+ }
7992
+ }
7993
+ const HIDING_SELECTOR = `[${HeaderAttribute.Behaviour}="${HeaderBehaviour.Hides}"]`;
7994
+ /** The headers that hide while the page scrolls down: in `root`, or among `elements` (each, and what it holds — what a
7995
+ * runtime instance owns: the page's nodes or the globals'). */
7996
+ function hidingHeadersIn(root) {
7997
+ if (typeof root.querySelectorAll === 'function')
7998
+ return Array.from(root.querySelectorAll(HIDING_SELECTOR));
7999
+ const out = new Set();
8000
+ for (const el of root) {
8001
+ if (el.matches?.(HIDING_SELECTOR))
8002
+ out.add(el);
8003
+ el.querySelectorAll?.(HIDING_SELECTOR).forEach(h => out.add(h));
8004
+ }
8005
+ return [...out];
8006
+ }
8007
+ /**
8008
+ * The live site's door: every hiding header in `root` (or among `elements`) follows `source` (the window), through ONE
8009
+ * passive listener read once per frame. Returns the stop.
8010
+ */
8011
+ function watchHeaders(source, root, options = {}) {
8012
+ const runtimes = hidingHeadersIn(root).map(el => new HeaderRuntime(el, options));
8013
+ if (!runtimes.length)
8014
+ return () => { };
8015
+ let frame = 0;
8016
+ const raf = typeof requestAnimationFrame === 'function' ? requestAnimationFrame : (fn) => setTimeout(() => fn(0), 16);
8017
+ const caf = typeof cancelAnimationFrame === 'function' ? cancelAnimationFrame : (id) => clearTimeout(id);
8018
+ const sync = () => {
8019
+ frame = 0;
8020
+ const offset = source.scrollY ?? source.scrollTop ?? 0;
8021
+ for (const r of runtimes)
8022
+ r.update(offset);
8023
+ };
8024
+ const onScroll = () => { if (!frame)
8025
+ frame = raf(sync); };
8026
+ source.addEventListener('scroll', onScroll, { passive: true });
8027
+ sync();
8028
+ return () => {
8029
+ source.removeEventListener('scroll', onScroll);
8030
+ if (frame)
8031
+ caf(frame);
8032
+ for (const r of runtimes)
8033
+ r.destroy();
8034
+ };
8035
+ }
8036
+
7774
8037
  /**
7775
8038
  * The accessibility attributes a node renders (CC1: N2 current page, N3 dialog openers, N4 a drawer
7776
8039
  * that closes when the window widens, N6 accessible names). ONE function decides them and every
@@ -7789,6 +8052,8 @@ const SLIDER_PAUSE_ROLE = 'slider.pause';
7789
8052
  const NAMED_GROUP_ROLES = ['segmented'];
7790
8053
  /** Carries the min-width (px) at which an open dialog closes itself; the engine listens on it. */
7791
8054
  const DIALOG_CLOSE_ABOVE_ATTRIBUTE = 'data-iox-dialog-close-above';
8055
+ /** A slide's caption (premium M4, T3): the Slider's Caption part shows the caption of the slide in view. */
8056
+ const SLIDE_CAPTION_ATTRIBUTE = 'data-iox-caption';
7792
8057
  var A11yAttribute;
7793
8058
  (function (A11yAttribute) {
7794
8059
  A11yAttribute["Label"] = "aria-label";
@@ -7800,6 +8065,7 @@ var A11yAttribute;
7800
8065
  const MANAGED_A11Y_ATTRIBUTES = [
7801
8066
  A11yAttribute.Label, A11yAttribute.Hidden, A11yAttribute.Current, A11yAttribute.Id,
7802
8067
  'aria-haspopup', 'aria-expanded', 'aria-controls', DIALOG_CLOSE_ABOVE_ATTRIBUTE,
8068
+ HeaderAttribute.Behaviour, HeaderAttribute.Edge, SLIDE_CAPTION_ATTRIBUTE,
7803
8069
  ];
7804
8070
  /** A content trait's value from `props` (serialized) or `traits[]` (builder). */
7805
8071
  function nodeTraitValue(node, name) {
@@ -7844,6 +8110,13 @@ function nodeA11yAttributes(node, ctx = {}) {
7844
8110
  if (minWidth !== null)
7845
8111
  out[DIALOG_CLOSE_ABOVE_ATTRIBUTE] = String(minWidth);
7846
8112
  }
8113
+ // T2 (M4): how a header behaves as the page scrolls — the shared CSS and the header runtime read these.
8114
+ Object.assign(out, headerAttributes(nodeTraitValue(node, HeaderTrait.Behaviour), nodeTraitValue(node, HeaderTrait.Edge)));
8115
+ if (node.type === SLIDE_TYPE) {
8116
+ const caption = trimmed$1(nodeTraitValue(node, SLIDE_CAPTION_TRAIT));
8117
+ if (caption)
8118
+ out[SLIDE_CAPTION_ATTRIBUTE] = caption;
8119
+ }
7847
8120
  return out;
7848
8121
  }
7849
8122
  /** The attributes as an HTML string fragment (` name="value"`…) for a string renderer. */
@@ -10383,5 +10656,5 @@ function attachStringForm(form, options = {}) {
10383
10656
  * Generated bundle index. Do not edit.
10384
10657
  */
10385
10658
 
10386
- export { A11yAttribute, A11yTrait, ACCESSIBLE_NAME_TYPES, AOSService, ARIA_CURRENT_PAGE, BACKDROP_TWIN_KEY, BACKDROP_WHOLE_KEY, BREAKPOINTS, Breakpoint, BreakpointQueryKind, BuilderButtonComponent, BuilderDividerComponent, BuilderHeadingComponent, BuilderIconComponent, BuilderImageComponent, BuilderLinkComponent, BuilderSpacerComponent, ButtonBlockComponent, CALENDAR_CLOSING_ATTRIBUTE, CALENDAR_DESIGN_ATTRIBUTE, CALENDAR_INSTANT_ATTRIBUTE, CALENDAR_SHEET_QUERY, COMPONENT_STATE_SELECTOR, CONTAINER_HTML_TAGS, CONTEXT_ACTION_TYPES, CURRENT_LINK_TYPES, CalendarClass, CardComponent, ClientGalleryComponent, ClientListComponent, ClientListItemComponent, ClientRepeaterComponent, ClientSliderContainerComponent, ClientSliderSlideComponent, ComponentInstanceRegistryService, ComponentState, ContainerComponent, ContextStore, DECORATIVE_TYPES, DEFAULT_GALLERY_SCHEDULER, DEFAULT_INTERACTION_EASING, DEFAULT_PAGE_TRANSITION, DEFAULT_PAGE_TRANSITION_DURATION, DEFAULT_PAGE_TRANSITION_EASING, DEFAULT_PAGE_TRANSITION_PERSPECTIVE, DEFAULT_PHOSPHOR_WEIGHT, DEFAULT_WIDTH_BY_TYPE, DIALOG_CLOSE_ABOVE_ATTRIBUTE, DIALOG_NODE_TYPE, DatePickerRuntime, DeclarationContext, EASING_KEYWORDS, EASING_TOKENS, ENTRANCE_ACTION_TYPES, ENTRANCE_FALLBACK_CSS, ENTRANCE_NOSCRIPT_CSS, ENTRANCE_PRESTATE_ATTRIBUTE, EXIT_ACTION_TYPES, EasingKeyword, EasingToken, FLOATING_GAP, FLOATING_MARGIN, FloatingSide, FormRenderState, FormRuntimeService, GALLERY_EFFECTS, GALLERY_EFFECT_DESCRIPTORS, GalleryLoop, HOVER_DEFAULT_TRANSITION_TRAITS, HOVER_MEDIA_QUERY, HOVER_STATES, INTERACTION_ANIMATION_ID, INTERACTION_HIDDEN_ATTRIBUTE, IOX_BUILDER_EVENTS, IOX_FORM_MESSAGES, IOX_FORM_NAVIGATOR, IOX_FORM_TRANSPORT, IS_PREVIEW, IoxAnimateContainer, IoxAosDirective, IoxAosModule, IoxBuilderComponentsModule, IoxComponentRegistryService, IoxDialogComponent, IoxFieldComponent, IoxFormComponent, IoxFormErrorComponent, IoxFormSuccessComponent, IoxPageComponent, IoxPageModule, IoxSubmitButtonComponent, IoxUiModule, IoxVideoComponent, LAST_EMITTED_STATES, LEGACY_DIRECTION_KEY, LEGACY_HOVER_TRANSITION_TRAITS, LEGACY_SWIPER_CONTROLS, LinkedContainerComponent, MANAGED_A11Y_ATTRIBUTES, MAX_LINES_KEY, NAMED_GROUP_ROLES, NO_PAGE_TRANSITION, ON_STATE_ROLES, OUTER_STYLE_PROPS, PAGE_STYLE_TOKENS, PAGE_TOKEN_FALLBACKS, PAGE_TRANSITION_CATEGORIES, PAGE_TRANSITION_PRESETS, PART_CLASS_NAMES, PART_PAGINATION_MODIFIER, PHONE_TRANSITION_QUERY, PIPE_DESCRIPTORS, PIPE_REGISTRY, PageScrollProvider, PageStyleField, PageStyleSource, PointerKind, REDUCED_MOTION_QUERY, RELATIONAL_STATE_PSEUDO, RevealActionType, SCROLLED_ATTRIBUTE, SCROLLED_STATE_ROLE, SCROLLED_THRESHOLD_PX, SCROLL_EASINGS, SELF_PLAYING_TRIGGERS, SHAKE_DURATION_MS, SHAKE_EASING, SHAKE_KEYFRAMES, SLIDER_INPUTS_ATTRIBUTE, SLIDER_INPUT_NAMES, STATE_PSEUDO_CLASS, STRUCTURAL_STATES, SUPPRESSED_STYLE_PROPS_BY_TYPE, SWIPER_A11Y_OPTIONS, SWIPER_RESPONSIVE_TRAITS, SWIPER_TRIGGER_EVENTS, ScrollEasing, SectionComponent, SettleMode, StringFormRuntime, SwiperModuleName, TARGETED_STATE_SUFFIX, TEXT_ALIGN_KEY, TEXT_DIRECTION_KEY, TRANSITION_FEELS, TRANSITION_PROPERTY_KEY, TextAlign, TextBlockComponent, VALIDATION_STATES, VALIDATION_STATE_CLASS, VIRTUAL_TRAIT_GROUPS, VIRTUAL_TRAIT_KEYS, ViewPositionDirective, ViewPositionModule, VisibilityActionType, activeActions, animateAction, applyBindingPipes, applyFeel, attachDatePicker, attachDatePickers, attachStringForm, bootSlider, breakpointDef, breakpointForWidth, breakpointQueryFor, buildInteractionKeyframes, buildPartSelector, buildSwiperBreakpoints, buildTargetedStateSelector, buildTargetedSuffixSelector, buildTransitionTimeline, cascadeChain, clearInputOverride, clearOverride, closeAboveMediaQuery, collectContextSlotKeys, compileDeclarations, compilePageStyle, componentStatesFor, composeVirtualTraits, containerHtmlTag, contextActionEffect, contextSlotKeys, countOverrides, datePickerOf, declaredInputNames, decomposeBackdropFilter, defaultHoverTransitionTraits, defaultMessageResolver, deriveSeoFromContent, describePageStyle, describeSeoFields, dialogCloseAboveMinWidth, domHasSliderParts, effectiveActionType, effectiveTransitionId, entrancePreStateStyle, entranceStartsHidden, feelFor, fieldLanguage, finalKeyframe, framesFromLiveValue, gateHoverRule, getSeoValue, hasHoverState, hasOwnPageTransition, hasOwnTransition, initialSlotValues, isActionEnabled, isContextAction, isCubicBezier, isCurrentLink, isEasingToken, isExternalOrFragment, isGradientPaint, isHoverPointer, isHoverState, isInputOverriddenAt, isInteractionEasing, isLastEmittedStateKey, isOverriddenAt, isPressFeedback, isScrolled, isStructuralState, isValidSlotKey, isWholeBackdropSet, keyframePropertyName, keyframeStyleEntries, legacyEnterToTransition, mediaQueryFor, mergeSwiperBreakpoints, migrateLegacyDirection, migrateLegacyTextAlign, motionAllowed, nearestCommonAncestorId, needsAccessibleName, needsGroupName, nodeA11yAttributes, nodeCssId, nodeTraitValue, nodeUsesContext, normalizeAppPath, normalizeGalleryImage, normalizeIconClass, orderStatesForEmit, pageTransitionOf, parentBreakpoint, parseUrlList, partClassName, placeFloating, planPartRule, planResponsiveRules, planScroll, planStateRule, planSwiperOptions, playDualLayerTransition, playInteraction, prefersReducedMotion, renderDefaultDeclarations, resetPageStyleField, resetSeoField, resolveBoundValue, resolveContextValue, resolveGalleryEffect, resolveGalleryUrls, resolveInputChain, resolveInputs, resolveInteractionEasing, resolvePageTransition, resolvePath, resolveSeo, resolveStateStyles, resolveStyleProps, resolveToggleVisibility, resolveValueChain, rewriteViewportUnits, safeSetInput, serializeA11yAttributes, setDateFieldValue, setInputOverride, setOverride, setSeoAuto, setSeoBinding, setSeoOverride, setSeoValue, settleInteraction, settleModeFor, shakeElement, showCalendarDesign, sliderControlElements, sliderInputsFromProps, sliderInputsOf, splitOuterProps, splitPressFeedback, stateNamesIn, statePseudoClass, stateSelectorSuffix, stateTransitionProperties, stringFormRuntimeOf, stripSuppressedProps, swiperAutoplayAllowed, swiperLoopOptions, swiperModuleNames, syncNodeA11yAttributes, syncSubmitButtons, targetedStateSelector, transitionPropertyList, viewportTransitionContext, watchScrolled, withContextSlots, withStateTransitions, wrapInBreakpointQuery, wrapInMediaQuery };
10659
+ export { A11yAttribute, A11yTrait, ACCESSIBLE_NAME_TYPES, AOSService, ARIA_CURRENT_PAGE, BACKDROP_TWIN_KEY, BACKDROP_WHOLE_KEY, BREAKPOINTS, Breakpoint, BreakpointQueryKind, BuilderButtonComponent, BuilderDividerComponent, BuilderHeadingComponent, BuilderIconComponent, BuilderImageComponent, BuilderLinkComponent, BuilderSpacerComponent, ButtonBlockComponent, CALENDAR_CLOSING_ATTRIBUTE, CALENDAR_DESIGN_ATTRIBUTE, CALENDAR_INSTANT_ATTRIBUTE, CALENDAR_SHEET_QUERY, COMPONENT_STATE_SELECTOR, CONTAINER_HTML_TAGS, CONTEXT_ACTION_TYPES, CURRENT_LINK_TYPES, CalendarClass, CardComponent, ClientGalleryComponent, ClientListComponent, ClientListItemComponent, ClientRepeaterComponent, ClientSliderContainerComponent, ClientSliderSlideComponent, ComponentInstanceRegistryService, ComponentState, ContainerComponent, ContextStore, DECORATIVE_TYPES, DEFAULT_GALLERY_SCHEDULER, DEFAULT_INTERACTION_EASING, DEFAULT_PAGE_TRANSITION, DEFAULT_PAGE_TRANSITION_DURATION, DEFAULT_PAGE_TRANSITION_EASING, DEFAULT_PAGE_TRANSITION_PERSPECTIVE, DEFAULT_PHOSPHOR_WEIGHT, DEFAULT_WIDTH_BY_TYPE, DIALOG_CLOSE_ABOVE_ATTRIBUTE, DIALOG_NODE_TYPE, DatePickerRuntime, DeclarationContext, EASING_KEYWORDS, EASING_TOKENS, ELEMENT_STYLE_TRANSITION_EXTRAS, ENTRANCE_ACTION_TYPES, ENTRANCE_FALLBACK_CSS, ENTRANCE_NOSCRIPT_CSS, ENTRANCE_PRESTATE_ATTRIBUTE, EXIT_ACTION_TYPES, EasingKeyword, EasingToken, FLOATING_GAP, FLOATING_MARGIN, FloatingSide, FormRenderState, FormRuntimeService, GALLERY_EFFECTS, GALLERY_EFFECT_DESCRIPTORS, GalleryLoop, HEADER_SCROLL_HYSTERESIS_PX, HOVER_DEFAULT_TRANSITION_TRAITS, HOVER_MEDIA_QUERY, HOVER_STATES, HeaderRuntime, INTERACTION_ANIMATION_ID, INTERACTION_HIDDEN_ATTRIBUTE, IOX_BUILDER_EVENTS, IOX_FORM_MESSAGES, IOX_FORM_NAVIGATOR, IOX_FORM_TRANSPORT, IS_PREVIEW, IoxAnimateContainer, IoxAosDirective, IoxAosModule, IoxBuilderComponentsModule, IoxComponentRegistryService, IoxDialogComponent, IoxFieldComponent, IoxFormComponent, IoxFormErrorComponent, IoxFormSuccessComponent, IoxPageComponent, IoxPageModule, IoxSubmitButtonComponent, IoxUiModule, IoxVideoComponent, LAST_EMITTED_STATES, LEGACY_DIRECTION_KEY, LEGACY_HOVER_TRANSITION_TRAITS, LEGACY_SWIPER_CONTROLS, LinkedContainerComponent, MANAGED_A11Y_ATTRIBUTES, MAX_LINES_KEY, NAMED_GROUP_ROLES, NO_PAGE_TRANSITION, ON_STATE_ROLES, OUTER_STYLE_PROPS, PAGE_STYLE_TOKENS, PAGE_TOKEN_FALLBACKS, PAGE_TRANSITION_CATEGORIES, PAGE_TRANSITION_PRESETS, PART_CLASS_NAMES, PART_PAGINATION_MODIFIER, PHONE_TRANSITION_QUERY, PIPE_DESCRIPTORS, PIPE_REGISTRY, PageScrollProvider, PageStyleField, PageStyleSource, PointerKind, REDUCED_MOTION_QUERY, RELATIONAL_STATE_PSEUDO, RevealActionType, SCROLLED_ATTRIBUTE, SCROLLED_STATE_ROLE, SCROLLED_THRESHOLD_PX, SCROLL_EASINGS, SELF_PLAYING_TRIGGERS, SHAKE_DURATION_MS, SHAKE_EASING, SHAKE_KEYFRAMES, SLIDER_FEEL, SLIDER_INPUTS_ATTRIBUTE, SLIDER_INPUT_NAMES, SLIDER_PHONE_BREAKPOINT, SLIDER_RUNWAY_CLASS, SLIDER_STEPS_PROPERTY, SLIDE_CAPTION_ATTRIBUTE, STATE_PSEUDO_CLASS, STRUCTURAL_STATES, SUPPRESSED_STYLE_PROPS_BY_TYPE, SWIPER_A11Y_OPTIONS, SWIPER_RESPONSIVE_TRAITS, SWIPER_TRIGGER_EVENTS, ScrollEasing, SectionComponent, SettleMode, StringFormRuntime, SwiperModuleName, TARGETED_STATE_SUFFIX, TEXT_ALIGN_KEY, TEXT_DIRECTION_KEY, TRANSITION_FEELS, TRANSITION_PROPERTY_KEY, TextAlign, TextBlockComponent, VALIDATION_STATES, VALIDATION_STATE_CLASS, VIRTUAL_TRAIT_GROUPS, VIRTUAL_TRAIT_KEYS, ViewPositionDirective, ViewPositionModule, VisibilityActionType, activeActions, animateAction, applyBindingPipes, applyFeel, attachDatePicker, attachDatePickers, attachStringForm, bootSlider, breakpointDef, breakpointForWidth, breakpointQueryFor, buildInteractionKeyframes, buildPartSelector, buildSwiperBreakpoints, buildTargetedStateSelector, buildTargetedSuffixSelector, buildTransitionTimeline, cascadeChain, clearInputOverride, clearOverride, closeAboveMediaQuery, collectContextSlotKeys, compileDeclarations, compilePageStyle, componentStatesFor, composeVirtualTraits, containerHtmlTag, contextActionEffect, contextSlotKeys, countOverrides, datePickerOf, declaredInputNames, decomposeBackdropFilter, defaultHoverTransitionTraits, defaultMessageResolver, deriveSeoFromContent, describePageStyle, describeSeoFields, dialogCloseAboveMinWidth, domHasSliderParts, durationMs, effectiveActionType, effectiveTransitionId, entrancePreStateStyle, entranceStartsHidden, feelFor, fieldLanguage, finalKeyframe, framesFromLiveValue, gateHoverRule, getSeoValue, hasHoverState, hasOwnPageTransition, hasOwnTransition, headerShouldHide, hidingHeadersIn, initialSlotValues, isActionEnabled, isContextAction, isCubicBezier, isCurrentLink, isEasingToken, isExternalOrFragment, isGradientPaint, isHoverPointer, isHoverState, isInputOverriddenAt, isInteractionEasing, isLastEmittedStateKey, isOverriddenAt, isPressFeedback, isScrolled, isStructuralState, isValidSlotKey, isWholeBackdropSet, keyframePropertyName, keyframeStyleEntries, legacyEnterToTransition, mediaQueryFor, mergeSwiperBreakpoints, migrateLegacyDirection, migrateLegacyTextAlign, motionAllowed, nearestCommonAncestorId, needsAccessibleName, needsGroupName, nodeA11yAttributes, nodeCssId, nodeTraitValue, nodeUsesContext, normalizeAppPath, normalizeGalleryImage, normalizeIconClass, orderStatesForEmit, pageTransitionOf, parentBreakpoint, parseUrlList, partClassName, placeFloating, planPartRule, planResponsiveRules, planScroll, planStateRule, planSwiperOptions, playDualLayerTransition, playInteraction, prefersReducedMotion, renderDefaultDeclarations, resetPageStyleField, resetSeoField, resolveBoundValue, resolveContextValue, resolveGalleryEffect, resolveGalleryUrls, resolveInputChain, resolveInputs, resolveInteractionEasing, resolvePageTransition, resolvePath, resolveSeo, resolveStateStyles, resolveStyleProps, resolveToggleVisibility, resolveValueChain, rewriteViewportUnits, safeSetInput, serializeA11yAttributes, setDateFieldValue, setInputOverride, setOverride, setSeoAuto, setSeoBinding, setSeoOverride, setSeoValue, settleInteraction, settleModeFor, shakeElement, showCalendarDesign, sliderControlElements, sliderInputsFromProps, sliderInputsOf, sliderRunwayHtml, splitOuterProps, splitPressFeedback, stateNamesIn, statePseudoClass, stateSelectorSuffix, stateTransitionProperties, stringFormRuntimeOf, stripSuppressedProps, swiperAutoplayAllowed, swiperLoopOptions, swiperModuleNames, syncNodeA11yAttributes, syncSubmitButtons, targetedStateSelector, transitionPropertyList, viewportTransitionContext, watchHeaders, watchScrolled, withContextSlots, withPhoneDefaults, withStateTransitions, wrapInBreakpointQuery, wrapInMediaQuery };
10387
10660
  //# sourceMappingURL=vectoriox-iox-ui.mjs.map