@vectoriox/iox-ui 5.36.0 → 5.38.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/actions-core/index.d.ts +17 -3
- package/composite-core/index.d.ts +463 -31
- package/design-core/index.d.ts +130 -3
- package/fesm2022/vectoriox-iox-ui-actions-core.mjs +33 -3
- package/fesm2022/vectoriox-iox-ui-actions-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-composite-core.mjs +1062 -121
- package/fesm2022/vectoriox-iox-ui-composite-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-design-core.mjs +172 -3
- package/fesm2022/vectoriox-iox-ui-design-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-generation-core.mjs +410 -10
- package/fesm2022/vectoriox-iox-ui-generation-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-media-core.mjs +571 -0
- package/fesm2022/vectoriox-iox-ui-media-core.mjs.map +1 -0
- package/fesm2022/vectoriox-iox-ui.mjs +482 -120
- package/fesm2022/vectoriox-iox-ui.mjs.map +1 -1
- package/generation-core/index.d.ts +167 -4
- package/index.d.ts +209 -25
- package/media-core/index.d.ts +277 -0
- package/media-core/package.json +3 -0
- package/package.json +5 -1
- package/src/actions-core/action.model.ts +4 -2
- package/src/actions-core/element-actions.ts +37 -2
- package/src/composite-core/accordion-runtime.ts +117 -28
- package/src/composite-core/accordion.ts +89 -45
- package/src/composite-core/composite-kinds.ts +110 -0
- package/src/composite-core/composite-node.ts +15 -0
- package/src/composite-core/disclosure.ts +125 -0
- package/src/composite-core/lightbox.ts +192 -0
- package/src/composite-core/public-api.ts +7 -1
- package/src/composite-core/slider-runtime.ts +180 -0
- package/src/composite-core/slider.ts +378 -0
- package/src/composite-core/structure.ts +25 -5
- package/src/design-core/element-styles.ts +27 -0
- package/src/design-core/flavor-spec.generated.ts +146 -2
- package/src/generation-core/baseline-roles.ts +2 -0
- package/src/generation-core/compose-site.ts +80 -4
- package/src/generation-core/node-baselines.generated.ts +148 -4
- package/src/generation-core/patterns.ts +17 -0
- package/src/generation-core/site-spec.generated.ts +164 -0
- package/src/media-core/public-api.ts +9 -0
- package/src/media-core/video-runtime.ts +239 -0
- package/src/media-core/video.ts +443 -0
- package/styles/iox-design.css +96 -0
|
@@ -7,7 +7,10 @@ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
|
|
7
7
|
import * as i1 from '@angular/common';
|
|
8
8
|
import { CommonModule, isPlatformBrowser } from '@angular/common';
|
|
9
9
|
import Lenis from 'lenis';
|
|
10
|
+
import { SLIDER_WORDS, sliderPartElement, SliderRole, sliderWords, attachCarouselA11y, isSliderPart } from '@vectoriox/iox-ui/composite-core';
|
|
10
11
|
import { dialogOpenerAttributes, dialogDomId } from '@vectoriox/iox-ui/actions-core';
|
|
12
|
+
import { planVideo, videoRootAttributes, videoInnerHtml, videoWords, VideoAttribute, attachVideoAt, VideoClass } from '@vectoriox/iox-ui/media-core';
|
|
13
|
+
import * as i1$1 from '@angular/platform-browser';
|
|
11
14
|
export * from '@vectoriox/iox-ui/design-core';
|
|
12
15
|
|
|
13
16
|
class ViewPositionDirective {
|
|
@@ -1397,6 +1400,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
|
|
|
1397
1400
|
args: ['childrenHost', { read: ViewContainerRef, static: true }]
|
|
1398
1401
|
}] } });
|
|
1399
1402
|
|
|
1403
|
+
/**
|
|
1404
|
+
* Reduced motion (CC1, R1 — complex-components plan §2d). The token sheet already collapses the
|
|
1405
|
+
* motion tokens under `prefers-reduced-motion`; everything that moves through SCRIPT must ask the
|
|
1406
|
+
* same question, and ask it HERE: the interaction engines (builder canvas + live site), the Slider's
|
|
1407
|
+
* autoplay and the Gallery's crossfade loop. Publishable gate #6: reduced motion = motion dial 0.
|
|
1408
|
+
*/
|
|
1409
|
+
const REDUCED_MOTION_QUERY = '(prefers-reduced-motion: reduce)';
|
|
1410
|
+
function defaultHost() {
|
|
1411
|
+
return typeof window !== 'undefined' ? window : null;
|
|
1412
|
+
}
|
|
1413
|
+
/** True when the visitor asked their system for reduced motion. No `matchMedia` (SSR) → false. */
|
|
1414
|
+
function prefersReducedMotion(host = defaultHost()) {
|
|
1415
|
+
try {
|
|
1416
|
+
return !!host?.matchMedia?.(REDUCED_MOTION_QUERY)?.matches;
|
|
1417
|
+
}
|
|
1418
|
+
catch {
|
|
1419
|
+
return false;
|
|
1420
|
+
}
|
|
1421
|
+
}
|
|
1422
|
+
/** True when script may animate. The ONE question every runtime asks before moving anything. */
|
|
1423
|
+
function motionAllowed(host = defaultHost()) {
|
|
1424
|
+
return !prefersReducedMotion(host);
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1400
1427
|
// Virtual trait → composed CSS property helpers.
|
|
1401
1428
|
//
|
|
1402
1429
|
// Several style traits are "virtual" — they don't map 1:1 to a CSS property but
|
|
@@ -2197,30 +2224,6 @@ function sameValues(a, b) {
|
|
|
2197
2224
|
return true;
|
|
2198
2225
|
}
|
|
2199
2226
|
|
|
2200
|
-
/**
|
|
2201
|
-
* Reduced motion (CC1, R1 — complex-components plan §2d). The token sheet already collapses the
|
|
2202
|
-
* motion tokens under `prefers-reduced-motion`; everything that moves through SCRIPT must ask the
|
|
2203
|
-
* same question, and ask it HERE: the interaction engines (builder canvas + live site), the Slider's
|
|
2204
|
-
* autoplay and the Gallery's crossfade loop. Publishable gate #6: reduced motion = motion dial 0.
|
|
2205
|
-
*/
|
|
2206
|
-
const REDUCED_MOTION_QUERY = '(prefers-reduced-motion: reduce)';
|
|
2207
|
-
function defaultHost() {
|
|
2208
|
-
return typeof window !== 'undefined' ? window : null;
|
|
2209
|
-
}
|
|
2210
|
-
/** True when the visitor asked their system for reduced motion. No `matchMedia` (SSR) → false. */
|
|
2211
|
-
function prefersReducedMotion(host = defaultHost()) {
|
|
2212
|
-
try {
|
|
2213
|
-
return !!host?.matchMedia?.(REDUCED_MOTION_QUERY)?.matches;
|
|
2214
|
-
}
|
|
2215
|
-
catch {
|
|
2216
|
-
return false;
|
|
2217
|
-
}
|
|
2218
|
-
}
|
|
2219
|
-
/** True when script may animate. The ONE question every runtime asks before moving anything. */
|
|
2220
|
-
function motionAllowed(host = defaultHost()) {
|
|
2221
|
-
return !prefersReducedMotion(host);
|
|
2222
|
-
}
|
|
2223
|
-
|
|
2224
2227
|
/**
|
|
2225
2228
|
* Which Swiper modules a Slider loads, and how its autoplay boots — a pure decision, so the module list
|
|
2226
2229
|
* is unit-tested (CC1 R1/R2 floor; complex-components plan §7c). Swiper's A11y module is ALWAYS loaded:
|
|
@@ -2240,6 +2243,7 @@ var SwiperModuleName;
|
|
|
2240
2243
|
SwiperModuleName["Zoom"] = "Zoom";
|
|
2241
2244
|
SwiperModuleName["Grid"] = "Grid";
|
|
2242
2245
|
SwiperModuleName["Parallax"] = "Parallax";
|
|
2246
|
+
SwiperModuleName["FreeMode"] = "FreeMode";
|
|
2243
2247
|
})(SwiperModuleName || (SwiperModuleName = {}));
|
|
2244
2248
|
const FLAGGED = [
|
|
2245
2249
|
['enableNavigation', SwiperModuleName.Navigation],
|
|
@@ -2270,33 +2274,242 @@ const SWIPER_A11Y_OPTIONS = {
|
|
|
2270
2274
|
slideLabelMessage: '{{index}} of {{slidesLength}}',
|
|
2271
2275
|
};
|
|
2272
2276
|
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
|
|
2279
|
-
|
|
2280
|
-
|
|
2277
|
+
/** The selectors Swiper's own (legacy) controls answer to inside `.swiper`. */
|
|
2278
|
+
const LEGACY_SWIPER_CONTROLS = {
|
|
2279
|
+
prev: '.swiper-button-prev',
|
|
2280
|
+
next: '.swiper-button-next',
|
|
2281
|
+
pagination: '.swiper-pagination',
|
|
2282
|
+
scrollbar: '.swiper-scrollbar',
|
|
2283
|
+
};
|
|
2284
|
+
/** The pagination part's classes — Swiper's own position CSS (`.swiper-pagination-bullets.swiper-pagination-horizontal`)
|
|
2285
|
+
* must not pin a PART: its place is its own styles'. The dots keep Swiper's bullet class. */
|
|
2286
|
+
const PART_PAGINATION_MODIFIER = 'iox-slider-pagination-';
|
|
2287
|
+
const EFFECT_MODULES = {
|
|
2288
|
+
fade: 'EffectFade', cube: 'EffectCube', flip: 'EffectFlip', coverflow: 'EffectCoverflow', cards: 'EffectCards', creative: 'EffectCreative',
|
|
2289
|
+
};
|
|
2290
|
+
const num$1 = (v, fallback) => {
|
|
2291
|
+
const n = typeof v === 'number' ? v : Number(v);
|
|
2292
|
+
return Number.isFinite(n) ? n : fallback;
|
|
2293
|
+
};
|
|
2294
|
+
const on = (v) => v === true || v === 'true';
|
|
2295
|
+
/** The loop trait as Swiper's two booleans. `'off'` is a string — truthy — which made every saved slider loop. */
|
|
2296
|
+
function swiperLoopOptions(loop) {
|
|
2297
|
+
return { loop: loop === true || loop === 'loop' || loop === 'true', rewind: loop === 'rewind' };
|
|
2298
|
+
}
|
|
2299
|
+
/** `slidesPerView` as Swiper reads it: a number, or `'auto'`. */
|
|
2300
|
+
function perView(v) {
|
|
2301
|
+
if (v === 'auto' || v === undefined || v === null || v === '')
|
|
2302
|
+
return 'auto';
|
|
2303
|
+
const n = num$1(v, 1);
|
|
2304
|
+
return n > 0 ? n : 'auto';
|
|
2305
|
+
}
|
|
2306
|
+
function collectResponsiveInputs(inputs) {
|
|
2307
|
+
const all = { slidesPerView: inputs.slidesPerView, slidesPerGroup: inputs.slidesPerGroup, spaceBetween: inputs.spaceBetween };
|
|
2308
|
+
const out = {};
|
|
2309
|
+
for (const name of SWIPER_RESPONSIVE_TRAITS)
|
|
2310
|
+
if (all[name] !== undefined)
|
|
2311
|
+
out[name] = all[name];
|
|
2312
|
+
return out;
|
|
2313
|
+
}
|
|
2314
|
+
function planSwiperOptions(inputs, ctx) {
|
|
2315
|
+
const words = ctx.words ?? SLIDER_WORDS.en;
|
|
2316
|
+
const parts = ctx.parts ?? null;
|
|
2317
|
+
const edit = !!ctx.edit;
|
|
2318
|
+
const hasNav = parts ? !!(parts.prev || parts.next) : on(inputs.enableNavigation);
|
|
2319
|
+
const hasDots = parts ? !!parts.pagination : on(inputs.enablePagination);
|
|
2320
|
+
const autoplay = !edit && on(inputs.enableAutoplay);
|
|
2321
|
+
const flags = {
|
|
2322
|
+
enableNavigation: hasNav,
|
|
2323
|
+
enablePagination: hasDots,
|
|
2324
|
+
enableScrollbar: on(inputs.enableScrollbar),
|
|
2325
|
+
// The Autoplay module is LOADED whenever the switch is on, so a visitor under reduced motion can still start
|
|
2326
|
+
// it from the pause control — it never BOOTS then (`autoplay.enabled`).
|
|
2327
|
+
enableAutoplay: autoplay,
|
|
2328
|
+
enableKeyboard: !edit && on(inputs.enableKeyboard),
|
|
2329
|
+
enableMousewheel: !edit && on(inputs.enableMousewheel),
|
|
2330
|
+
enableZoom: !edit && on(inputs.enableZoom),
|
|
2331
|
+
enableGrid: !edit && on(inputs.enableGrid),
|
|
2332
|
+
enableParallax: !edit && on(inputs.enableParallax),
|
|
2333
|
+
};
|
|
2334
|
+
const modules = swiperModuleNames(flags, true);
|
|
2335
|
+
if (!edit && on(inputs.freeMode))
|
|
2336
|
+
modules.push(SwiperModuleName.FreeMode);
|
|
2337
|
+
const effect = edit ? 'slide' : (inputs.effect || 'slide');
|
|
2338
|
+
const options = {
|
|
2339
|
+
dir: inputs.dir === 'rtl' ? 'rtl' : 'ltr',
|
|
2340
|
+
direction: inputs.direction === 'vertical' ? 'vertical' : 'horizontal',
|
|
2341
|
+
slidesPerView: perView(inputs.slidesPerView),
|
|
2342
|
+
slidesPerGroup: Math.max(1, num$1(inputs.slidesPerGroup, 1)),
|
|
2343
|
+
spaceBetween: num$1(inputs.spaceBetween, 0),
|
|
2344
|
+
speed: edit ? 300 : num$1(inputs.speed, 300),
|
|
2345
|
+
effect,
|
|
2346
|
+
centeredSlides: on(inputs.centeredSlides),
|
|
2347
|
+
initialSlide: num$1(inputs.initialSlide, 0),
|
|
2348
|
+
autoHeight: on(inputs.autoHeight),
|
|
2349
|
+
// Swiper marks the slides in view (`swiper-slide-visible`) — the carousel runtime makes the others inert.
|
|
2350
|
+
watchSlidesProgress: true,
|
|
2351
|
+
};
|
|
2352
|
+
if (edit) {
|
|
2353
|
+
options['allowTouchMove'] = false;
|
|
2354
|
+
options['simulateTouch'] = false;
|
|
2355
|
+
// On the canvas Previous / Next are PARTS an author clicks to select (R2): rewinding keeps Swiper from
|
|
2356
|
+
// disabling them at either end (a disabled <button> takes no click).
|
|
2357
|
+
options['rewind'] = true;
|
|
2358
|
+
}
|
|
2359
|
+
else {
|
|
2360
|
+
options['grabCursor'] = inputs.grabCursor !== false;
|
|
2361
|
+
options['slideToClickedSlide'] = on(inputs.slideToClickedSlide);
|
|
2362
|
+
Object.assign(options, swiperLoopOptions(inputs.loop));
|
|
2363
|
+
if (on(inputs.freeMode))
|
|
2364
|
+
options['freeMode'] = true;
|
|
2365
|
+
}
|
|
2366
|
+
if (hasNav) {
|
|
2367
|
+
options['navigation'] = parts
|
|
2368
|
+
? { prevEl: parts.prev ?? null, nextEl: parts.next ?? null }
|
|
2369
|
+
: { prevEl: LEGACY_SWIPER_CONTROLS.prev, nextEl: LEGACY_SWIPER_CONTROLS.next };
|
|
2370
|
+
}
|
|
2371
|
+
if (hasDots) {
|
|
2372
|
+
const type = inputs.paginationType === 'fraction' || inputs.paginationType === 'progressbar' ? inputs.paginationType : 'bullets';
|
|
2373
|
+
options['pagination'] = parts
|
|
2374
|
+
? { el: parts.pagination, type, clickable: inputs.paginationClickable !== false, dynamicBullets: on(inputs.paginationDynamicBullets),
|
|
2375
|
+
modifierClass: PART_PAGINATION_MODIFIER, bulletElement: 'button' }
|
|
2376
|
+
: { el: LEGACY_SWIPER_CONTROLS.pagination, type, clickable: inputs.paginationClickable !== false, dynamicBullets: on(inputs.paginationDynamicBullets) };
|
|
2377
|
+
}
|
|
2378
|
+
if (flags.enableScrollbar)
|
|
2379
|
+
options['scrollbar'] = { el: LEGACY_SWIPER_CONTROLS.scrollbar, draggable: !edit };
|
|
2380
|
+
if (autoplay) {
|
|
2381
|
+
options['autoplay'] = {
|
|
2382
|
+
enabled: ctx.motion,
|
|
2383
|
+
delay: num$1(inputs.autoplayDelay, 3000),
|
|
2384
|
+
pauseOnMouseEnter: inputs.autoplayPauseOnMouseEnter !== false,
|
|
2385
|
+
disableOnInteraction: on(inputs.autoplayDisableOnInteraction),
|
|
2281
2386
|
};
|
|
2282
|
-
const out = {};
|
|
2283
|
-
for (const name of SWIPER_RESPONSIVE_TRAITS)
|
|
2284
|
-
if (all[name] !== undefined)
|
|
2285
|
-
out[name] = all[name];
|
|
2286
|
-
return out;
|
|
2287
2387
|
}
|
|
2388
|
+
if (flags.enableKeyboard)
|
|
2389
|
+
options['keyboard'] = { enabled: true, onlyInViewport: true };
|
|
2390
|
+
if (flags.enableMousewheel)
|
|
2391
|
+
options['mousewheel'] = true;
|
|
2392
|
+
if (flags.enableZoom)
|
|
2393
|
+
options['zoom'] = true;
|
|
2394
|
+
if (flags.enableParallax)
|
|
2395
|
+
options['parallax'] = true;
|
|
2396
|
+
if (flags.enableGrid && num$1(inputs.gridRows, 1) > 1)
|
|
2397
|
+
options['grid'] = { rows: num$1(inputs.gridRows, 1) };
|
|
2398
|
+
options['a11y'] = {
|
|
2399
|
+
...SWIPER_A11Y_OPTIONS,
|
|
2400
|
+
prevSlideMessage: (parts?.prev?.getAttribute('aria-label')) || words.prev,
|
|
2401
|
+
nextSlideMessage: (parts?.next?.getAttribute('aria-label')) || words.next,
|
|
2402
|
+
paginationBulletMessage: words.goTo,
|
|
2403
|
+
slideLabelMessage: words.slideLabel,
|
|
2404
|
+
containerRoleDescriptionMessage: words.carousel,
|
|
2405
|
+
itemRoleDescriptionMessage: words.slide,
|
|
2406
|
+
// aria-roledescription needs a role to describe (axe): a named carousel is a region, an unnamed one a group.
|
|
2407
|
+
containerRole: ctx.named ? 'region' : 'group',
|
|
2408
|
+
};
|
|
2409
|
+
if (!edit) {
|
|
2410
|
+
const derived = buildSwiperBreakpoints(collectResponsiveInputs(inputs), inputs.responsive ?? null);
|
|
2411
|
+
const map = mergeSwiperBreakpoints(derived, inputs.breakpoints ?? '');
|
|
2412
|
+
if (map)
|
|
2413
|
+
options['breakpoints'] = map;
|
|
2414
|
+
}
|
|
2415
|
+
return { modules, effectModule: effect !== 'slide' ? EFFECT_MODULES[effect] ?? null : null, options };
|
|
2416
|
+
}
|
|
2417
|
+
|
|
2418
|
+
/**
|
|
2419
|
+
* Boot a Swiper on a rendered slider — ONE path for the engine's component path, its string path (globals and the
|
|
2420
|
+
* fallback renderer: `data-iox-slider` carries the inputs) and the admin's Preview (CC3). It hands Swiper the
|
|
2421
|
+
* slider's control PARTS when it has them (else the legacy Swiper-drawn controls), plans the options through the
|
|
2422
|
+
* shared `planSwiperOptions`, and attaches the accessible-carousel runtime (pause control, live region, inert
|
|
2423
|
+
* slides). The builder's EDIT canvas boots with `edit: true` and no carousel runtime.
|
|
2424
|
+
*/
|
|
2425
|
+
/** The string path's slider: `data-iox-slider` holds its inputs as JSON. */
|
|
2426
|
+
const SLIDER_INPUTS_ATTRIBUTE = 'data-iox-slider';
|
|
2427
|
+
/** Swiper events a builder can replay as interaction triggers (`swiperSlideChange`…). */
|
|
2428
|
+
const SWIPER_TRIGGER_EVENTS = ['slideChange', 'reachBeginning', 'reachEnd', 'autoplayStart', 'autoplayStop'];
|
|
2429
|
+
/** The slider's own control parts in the DOM (never a nested slider's). */
|
|
2430
|
+
function sliderControlElements(el) {
|
|
2431
|
+
return {
|
|
2432
|
+
prev: sliderPartElement(el, SliderRole.Prev),
|
|
2433
|
+
next: sliderPartElement(el, SliderRole.Next),
|
|
2434
|
+
pagination: sliderPartElement(el, SliderRole.Pagination),
|
|
2435
|
+
pause: sliderPartElement(el, SliderRole.Pause),
|
|
2436
|
+
};
|
|
2437
|
+
}
|
|
2438
|
+
/** True when the rendered slider holds any control part (the model's `hasSliderParts`, read off the DOM). */
|
|
2439
|
+
function domHasSliderParts(el) {
|
|
2440
|
+
const c = sliderControlElements(el);
|
|
2441
|
+
return !!(c.prev || c.next || c.pagination || c.pause);
|
|
2442
|
+
}
|
|
2443
|
+
async function bootSlider(el, inputs, options = {}) {
|
|
2444
|
+
const [{ default: Swiper }, swiperModules] = await Promise.all([import('swiper'), import('swiper/modules')]);
|
|
2445
|
+
if (!el.isConnected)
|
|
2446
|
+
return null;
|
|
2447
|
+
const controls = sliderControlElements(el);
|
|
2448
|
+
const parts = domHasSliderParts(el) ? controls : null;
|
|
2449
|
+
const words = sliderWords(el.ownerDocument?.documentElement?.getAttribute('lang'));
|
|
2450
|
+
const plan = planSwiperOptions(inputs, {
|
|
2451
|
+
motion: motionAllowed(), edit: options.edit, parts, words, named: !!el.getAttribute('aria-label'),
|
|
2452
|
+
});
|
|
2453
|
+
const lib = swiperModules;
|
|
2454
|
+
const modules = plan.modules.map(name => lib[name]).filter(Boolean);
|
|
2455
|
+
if (plan.effectModule && lib[plan.effectModule])
|
|
2456
|
+
modules.push(lib[plan.effectModule]);
|
|
2457
|
+
const on = {};
|
|
2458
|
+
if (options.onEvent)
|
|
2459
|
+
for (const event of SWIPER_TRIGGER_EVENTS)
|
|
2460
|
+
on[event] = (swiper) => options.onEvent(event, swiper);
|
|
2461
|
+
const swiper = new Swiper(el, { ...plan.options, modules, on });
|
|
2462
|
+
if (!options.edit)
|
|
2463
|
+
attachCarouselA11y(swiper, { words });
|
|
2464
|
+
return swiper;
|
|
2465
|
+
}
|
|
2466
|
+
/** The inputs a string-path slider carries (`data-iox-slider`), or null. */
|
|
2467
|
+
function sliderInputsOf(el) {
|
|
2468
|
+
const raw = el.getAttribute(SLIDER_INPUTS_ATTRIBUTE);
|
|
2469
|
+
if (!raw)
|
|
2470
|
+
return null;
|
|
2471
|
+
try {
|
|
2472
|
+
const parsed = JSON.parse(raw);
|
|
2473
|
+
return parsed && typeof parsed === 'object' ? parsed : null;
|
|
2474
|
+
}
|
|
2475
|
+
catch {
|
|
2476
|
+
return null;
|
|
2477
|
+
}
|
|
2478
|
+
}
|
|
2479
|
+
/** The Swiper inputs of a saved SliderContainer node — what the string path serialises into `data-iox-slider`. */
|
|
2480
|
+
const SLIDER_INPUT_NAMES = [
|
|
2481
|
+
'dir', 'direction', 'slidesPerView', 'slidesPerGroup', 'spaceBetween', 'speed', 'effect', 'grabCursor', 'centeredSlides', 'initialSlide',
|
|
2482
|
+
'autoHeight', 'slideToClickedSlide', 'freeMode', 'loop', 'enableNavigation', 'enablePagination', 'enableScrollbar', 'enableAutoplay',
|
|
2483
|
+
'enableKeyboard', 'enableMousewheel', 'enableZoom', 'enableGrid', 'enableParallax', 'autoplayDelay', 'autoplayPauseOnMouseEnter',
|
|
2484
|
+
'autoplayDisableOnInteraction', 'paginationType', 'paginationClickable', 'paginationDynamicBullets', 'gridRows', 'breakpoints',
|
|
2485
|
+
];
|
|
2486
|
+
function sliderInputsFromProps(props, responsive) {
|
|
2487
|
+
const out = {};
|
|
2488
|
+
for (const name of SLIDER_INPUT_NAMES)
|
|
2489
|
+
if (props[name] !== undefined)
|
|
2490
|
+
out[name] = props[name];
|
|
2491
|
+
if (responsive)
|
|
2492
|
+
out['responsive'] = responsive;
|
|
2493
|
+
return out;
|
|
2494
|
+
}
|
|
2495
|
+
|
|
2496
|
+
/**
|
|
2497
|
+
* `iox-slider-container` — the Slider's engine twin (component path, and the admin's Preview through the builder twin's
|
|
2498
|
+
* shared boot). The slides render into `.swiper-wrapper` (`childrenHost` — the `.swiper-slide` direct-child invariant,
|
|
2499
|
+
* slider.md); the control PARTS (CC3: Previous, Next, Pause, Pagination — `childHostFor`) render beside it, inside
|
|
2500
|
+
* `.swiper`: those before the first slide before the wrapper, the rest after it. A saved slider with no parts keeps
|
|
2501
|
+
* Swiper-drawn controls (the legacy switches). Swiper is booted by the ONE shared `bootSlider`.
|
|
2502
|
+
*/
|
|
2503
|
+
class ClientSliderContainerComponent {
|
|
2288
2504
|
constructor(platformId) {
|
|
2289
2505
|
this.platformId = platformId;
|
|
2290
2506
|
this.nodeId = '';
|
|
2291
|
-
/** Language (writing) direction
|
|
2292
|
-
* Swiper's RTL layout — must match the builder's app-slider-container, which had `dir` while
|
|
2293
|
-
* this engine-runtime component did not (RTL showed in the editor but never on the live site). */
|
|
2507
|
+
/** Language (writing) direction — the `dir` attribute, so it survives SSR and drives Swiper's RTL layout. */
|
|
2294
2508
|
this.dir = 'ltr';
|
|
2295
2509
|
this.direction = 'horizontal';
|
|
2296
|
-
|
|
2510
|
+
/** `'off' | 'loop' | 'rewind'` (or a boolean from older saves). */
|
|
2511
|
+
this.loop = 'off';
|
|
2297
2512
|
this.slidesPerView = 1;
|
|
2298
|
-
/** Declared by the config since the slider shipped, but never declared HERE — so `safeSetInput`
|
|
2299
|
-
* dropped it and the panel control did nothing on either renderer. */
|
|
2300
2513
|
this.slidesPerGroup = 1;
|
|
2301
2514
|
this.spaceBetween = 0;
|
|
2302
2515
|
this.speed = 300;
|
|
@@ -2304,6 +2517,9 @@ class ClientSliderContainerComponent {
|
|
|
2304
2517
|
this.grabCursor = true;
|
|
2305
2518
|
this.centeredSlides = false;
|
|
2306
2519
|
this.initialSlide = 0;
|
|
2520
|
+
this.autoHeight = false;
|
|
2521
|
+
this.slideToClickedSlide = false;
|
|
2522
|
+
this.freeMode = false;
|
|
2307
2523
|
this.enableNavigation = false;
|
|
2308
2524
|
this.enablePagination = false;
|
|
2309
2525
|
this.enableScrollbar = false;
|
|
@@ -2318,96 +2534,80 @@ class ClientSliderContainerComponent {
|
|
|
2318
2534
|
this.autoplayDisableOnInteraction = false;
|
|
2319
2535
|
this.paginationType = 'bullets';
|
|
2320
2536
|
this.paginationClickable = true;
|
|
2537
|
+
this.paginationDynamicBullets = false;
|
|
2538
|
+
this.navigationColor = '';
|
|
2539
|
+
this.paginationColor = '';
|
|
2321
2540
|
this.gridRows = 1;
|
|
2322
|
-
/** Advanced escape hatch: raw Swiper `breakpoints` JSON
|
|
2323
|
-
* node's per-breakpoint traits, so an explicit hand-written value always wins. */
|
|
2541
|
+
/** Advanced escape hatch: raw Swiper `breakpoints` JSON, merged OVER the per-breakpoint traits' map. */
|
|
2324
2542
|
this.breakpoints = '';
|
|
2325
|
-
/** The node's per-breakpoint overrides
|
|
2326
|
-
* are compiled to CSS by the style engine, not handed to Swiper. */
|
|
2543
|
+
/** The node's per-breakpoint overrides (only its `inputs` layer is read here). */
|
|
2327
2544
|
this.responsive = null;
|
|
2328
|
-
|
|
2545
|
+
/** The slider's controls are parts (set by the renderer from the node): Swiper draws none of its own. */
|
|
2546
|
+
this.controlParts = false;
|
|
2547
|
+
this.swiper = null;
|
|
2548
|
+
this.slidesSeen = false;
|
|
2329
2549
|
this.instanceRegistry = inject(ComponentInstanceRegistryService);
|
|
2330
2550
|
}
|
|
2331
|
-
|
|
2551
|
+
/** Swiper draws its own arrows / dots only for a saved slider whose controls are not parts yet. */
|
|
2552
|
+
get legacyControls() {
|
|
2553
|
+
return !this.controlParts;
|
|
2554
|
+
}
|
|
2555
|
+
/** Where a child renders: a control part beside the wrapper (before it until the first slide, after it from
|
|
2556
|
+
* then on), a slide into the wrapper. The renderer asks in the children's order. */
|
|
2557
|
+
childHostFor(child) {
|
|
2558
|
+
if (!isSliderPart(child)) {
|
|
2559
|
+
this.slidesSeen = true;
|
|
2560
|
+
return this.childrenHost;
|
|
2561
|
+
}
|
|
2562
|
+
return this.slidesSeen ? this.trailHost : this.leadHost;
|
|
2563
|
+
}
|
|
2332
2564
|
ngAfterViewInit() {
|
|
2333
2565
|
if (isPlatformBrowser(this.platformId)) {
|
|
2334
|
-
// Defer so all child slides are rendered first
|
|
2335
|
-
requestAnimationFrame(() => this.
|
|
2566
|
+
// Defer so all child slides and parts are rendered first.
|
|
2567
|
+
requestAnimationFrame(() => void this.boot());
|
|
2336
2568
|
}
|
|
2337
2569
|
}
|
|
2338
2570
|
ngOnDestroy() {
|
|
2339
|
-
if (this.
|
|
2340
|
-
this.
|
|
2341
|
-
this.
|
|
2571
|
+
if (this.swiper) {
|
|
2572
|
+
this.swiper.destroy(true, true);
|
|
2573
|
+
this.swiper = null;
|
|
2342
2574
|
this.instanceRegistry.unregister(this.nodeId);
|
|
2343
2575
|
}
|
|
2344
2576
|
}
|
|
2345
|
-
async
|
|
2577
|
+
async boot() {
|
|
2346
2578
|
const el = this.swiperEl?.nativeElement;
|
|
2347
2579
|
if (!el)
|
|
2348
2580
|
return;
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
const config = {
|
|
2365
|
-
modules,
|
|
2366
|
-
// Swiper reads the container's `dir` attribute, but pass it explicitly so RTL is applied
|
|
2367
|
-
// on init regardless of attribute timing.
|
|
2368
|
-
dir: this.dir,
|
|
2369
|
-
direction: this.direction,
|
|
2370
|
-
loop: this.loop,
|
|
2371
|
-
slidesPerView: this.slidesPerView,
|
|
2372
|
-
slidesPerGroup: this.slidesPerGroup,
|
|
2373
|
-
spaceBetween: this.spaceBetween,
|
|
2374
|
-
speed: this.speed,
|
|
2375
|
-
effect: this.effect,
|
|
2376
|
-
grabCursor: this.grabCursor,
|
|
2377
|
-
centeredSlides: this.centeredSlides,
|
|
2378
|
-
initialSlide: this.initialSlide,
|
|
2581
|
+
this.swiper = await bootSlider(el, this.inputs());
|
|
2582
|
+
if (this.swiper)
|
|
2583
|
+
this.instanceRegistry.register(this.nodeId, this.swiper);
|
|
2584
|
+
}
|
|
2585
|
+
inputs() {
|
|
2586
|
+
return {
|
|
2587
|
+
dir: this.dir, direction: this.direction, loop: this.loop, slidesPerView: this.slidesPerView, slidesPerGroup: this.slidesPerGroup,
|
|
2588
|
+
spaceBetween: this.spaceBetween, speed: this.speed, effect: this.effect, grabCursor: this.grabCursor, centeredSlides: this.centeredSlides,
|
|
2589
|
+
initialSlide: this.initialSlide, autoHeight: this.autoHeight, slideToClickedSlide: this.slideToClickedSlide, freeMode: this.freeMode,
|
|
2590
|
+
enableNavigation: this.enableNavigation, enablePagination: this.enablePagination, enableScrollbar: this.enableScrollbar,
|
|
2591
|
+
enableAutoplay: this.enableAutoplay, enableKeyboard: this.enableKeyboard, enableMousewheel: this.enableMousewheel,
|
|
2592
|
+
enableZoom: this.enableZoom, enableGrid: this.enableGrid, enableParallax: this.enableParallax, autoplayDelay: this.autoplayDelay,
|
|
2593
|
+
autoplayPauseOnMouseEnter: this.autoplayPauseOnMouseEnter, autoplayDisableOnInteraction: this.autoplayDisableOnInteraction,
|
|
2594
|
+
paginationType: this.paginationType, paginationClickable: this.paginationClickable, paginationDynamicBullets: this.paginationDynamicBullets,
|
|
2595
|
+
gridRows: this.gridRows, breakpoints: this.breakpoints, responsive: this.responsive,
|
|
2379
2596
|
};
|
|
2380
|
-
if (this.enableNavigation)
|
|
2381
|
-
config['navigation'] = { prevEl: '.swiper-button-prev', nextEl: '.swiper-button-next' };
|
|
2382
|
-
if (this.enablePagination)
|
|
2383
|
-
config['pagination'] = { el: '.swiper-pagination', type: this.paginationType, clickable: this.paginationClickable };
|
|
2384
|
-
if (this.enableScrollbar)
|
|
2385
|
-
config['scrollbar'] = { el: '.swiper-scrollbar', draggable: true };
|
|
2386
|
-
config['a11y'] = { ...SWIPER_A11Y_OPTIONS };
|
|
2387
|
-
if (swiperAutoplayAllowed(this.enableAutoplay, motion))
|
|
2388
|
-
config['autoplay'] = { delay: this.autoplayDelay, pauseOnMouseEnter: this.autoplayPauseOnMouseEnter, disableOnInteraction: this.autoplayDisableOnInteraction };
|
|
2389
|
-
if (this.enableGrid && this.gridRows > 1)
|
|
2390
|
-
config['grid'] = { rows: this.gridRows };
|
|
2391
|
-
// Per-breakpoint traits (slidesPerView/slidesPerGroup/spaceBetween) become Swiper's own
|
|
2392
|
-
// mobile-first `breakpoints` map via the SHARED converter — the desktop-first → mobile-first
|
|
2393
|
-
// inversion lives there, tested, not at each call site. The hand-written `breakpoints` JSON
|
|
2394
|
-
// stays as an advanced escape hatch and is merged OVER the derived map.
|
|
2395
|
-
const derived = buildSwiperBreakpoints(this.collectSwiperInputs(), this.responsive);
|
|
2396
|
-
const breakpointMap = mergeSwiperBreakpoints(derived, this.breakpoints);
|
|
2397
|
-
if (breakpointMap)
|
|
2398
|
-
config['breakpoints'] = breakpointMap;
|
|
2399
|
-
this._swiper = new Swiper(el, config);
|
|
2400
|
-
this.instanceRegistry.register(this.nodeId, this._swiper);
|
|
2401
2597
|
}
|
|
2402
2598
|
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 }); }
|
|
2403
|
-
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", 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", gridRows: "gridRows", breakpoints: "breakpoints", responsive: "responsive" }, viewQueries: [{ propertyName: "childrenHost", first: true, predicate: ["childrenHost"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "swiperEl", first: true, predicate: ["swiperEl"], descendants: true, static: true }], ngImport: i0, template: `
|
|
2404
|
-
<div class="swiper" [class]="'iox-node-' + nodeId" [attr.dir]="dir" [style.direction]="dir"
|
|
2599
|
+
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: `
|
|
2600
|
+
<div class="swiper" [class]="'swiper iox-node-' + nodeId" [attr.dir]="dir" [style.direction]="dir"
|
|
2601
|
+
[style.--swiper-navigation-color]="legacyControls ? (navigationColor || null) : null"
|
|
2602
|
+
[style.--swiper-pagination-color]="legacyControls ? (paginationColor || null) : null" #swiperEl>
|
|
2603
|
+
<ng-container #leadHost></ng-container>
|
|
2405
2604
|
<div class="swiper-wrapper">
|
|
2406
2605
|
<ng-container #childrenHost></ng-container>
|
|
2407
2606
|
</div>
|
|
2408
|
-
<
|
|
2409
|
-
<div *ngIf="enableNavigation" class="swiper-button-
|
|
2410
|
-
<div *ngIf="
|
|
2607
|
+
<ng-container #trailHost></ng-container>
|
|
2608
|
+
<div *ngIf="legacyControls && enableNavigation" class="swiper-button-prev"></div>
|
|
2609
|
+
<div *ngIf="legacyControls && enableNavigation" class="swiper-button-next"></div>
|
|
2610
|
+
<div *ngIf="legacyControls && enablePagination" class="swiper-pagination"></div>
|
|
2411
2611
|
<div *ngIf="enableScrollbar" class="swiper-scrollbar"></div>
|
|
2412
2612
|
</div>
|
|
2413
2613
|
`, 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"] }] }); }
|
|
@@ -2415,13 +2615,17 @@ class ClientSliderContainerComponent {
|
|
|
2415
2615
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: ClientSliderContainerComponent, decorators: [{
|
|
2416
2616
|
type: Component,
|
|
2417
2617
|
args: [{ selector: 'iox-slider-container', template: `
|
|
2418
|
-
<div class="swiper" [class]="'iox-node-' + nodeId" [attr.dir]="dir" [style.direction]="dir"
|
|
2618
|
+
<div class="swiper" [class]="'swiper iox-node-' + nodeId" [attr.dir]="dir" [style.direction]="dir"
|
|
2619
|
+
[style.--swiper-navigation-color]="legacyControls ? (navigationColor || null) : null"
|
|
2620
|
+
[style.--swiper-pagination-color]="legacyControls ? (paginationColor || null) : null" #swiperEl>
|
|
2621
|
+
<ng-container #leadHost></ng-container>
|
|
2419
2622
|
<div class="swiper-wrapper">
|
|
2420
2623
|
<ng-container #childrenHost></ng-container>
|
|
2421
2624
|
</div>
|
|
2422
|
-
<
|
|
2423
|
-
<div *ngIf="enableNavigation" class="swiper-button-
|
|
2424
|
-
<div *ngIf="
|
|
2625
|
+
<ng-container #trailHost></ng-container>
|
|
2626
|
+
<div *ngIf="legacyControls && enableNavigation" class="swiper-button-prev"></div>
|
|
2627
|
+
<div *ngIf="legacyControls && enableNavigation" class="swiper-button-next"></div>
|
|
2628
|
+
<div *ngIf="legacyControls && enablePagination" class="swiper-pagination"></div>
|
|
2425
2629
|
<div *ngIf="enableScrollbar" class="swiper-scrollbar"></div>
|
|
2426
2630
|
</div>
|
|
2427
2631
|
`, standalone: false, styles: [".swiper{width:100%;height:100%;box-sizing:border-box}\n"] }]
|
|
@@ -2452,6 +2656,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
|
|
|
2452
2656
|
type: Input
|
|
2453
2657
|
}], initialSlide: [{
|
|
2454
2658
|
type: Input
|
|
2659
|
+
}], autoHeight: [{
|
|
2660
|
+
type: Input
|
|
2661
|
+
}], slideToClickedSlide: [{
|
|
2662
|
+
type: Input
|
|
2663
|
+
}], freeMode: [{
|
|
2664
|
+
type: Input
|
|
2455
2665
|
}], enableNavigation: [{
|
|
2456
2666
|
type: Input
|
|
2457
2667
|
}], enablePagination: [{
|
|
@@ -2480,15 +2690,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
|
|
|
2480
2690
|
type: Input
|
|
2481
2691
|
}], paginationClickable: [{
|
|
2482
2692
|
type: Input
|
|
2693
|
+
}], paginationDynamicBullets: [{
|
|
2694
|
+
type: Input
|
|
2695
|
+
}], navigationColor: [{
|
|
2696
|
+
type: Input
|
|
2697
|
+
}], paginationColor: [{
|
|
2698
|
+
type: Input
|
|
2483
2699
|
}], gridRows: [{
|
|
2484
2700
|
type: Input
|
|
2485
2701
|
}], breakpoints: [{
|
|
2486
2702
|
type: Input
|
|
2487
2703
|
}], responsive: [{
|
|
2488
2704
|
type: Input
|
|
2705
|
+
}], controlParts: [{
|
|
2706
|
+
type: Input
|
|
2489
2707
|
}], childrenHost: [{
|
|
2490
2708
|
type: ViewChild,
|
|
2491
2709
|
args: ['childrenHost', { read: ViewContainerRef, static: true }]
|
|
2710
|
+
}], leadHost: [{
|
|
2711
|
+
type: ViewChild,
|
|
2712
|
+
args: ['leadHost', { read: ViewContainerRef, static: true }]
|
|
2713
|
+
}], trailHost: [{
|
|
2714
|
+
type: ViewChild,
|
|
2715
|
+
args: ['trailHost', { read: ViewContainerRef, static: true }]
|
|
2492
2716
|
}], swiperEl: [{
|
|
2493
2717
|
type: ViewChild,
|
|
2494
2718
|
args: ['swiperEl', { static: true }]
|
|
@@ -5171,6 +5395,131 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImpo
|
|
|
5171
5395
|
args: ['childrenHost', { read: ViewContainerRef, static: true }]
|
|
5172
5396
|
}] } });
|
|
5173
5397
|
|
|
5398
|
+
const escapeHtml = (v) => v.replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(/</g, '<').replace(/>/g, '>');
|
|
5399
|
+
/**
|
|
5400
|
+
* `iox-video` — the Video's ONE component (CC3, board 5), like the Gallery's: the builder canvas, the admin's Preview
|
|
5401
|
+
* and the engine's component path all render it; the engine's string path writes the same markup from the same
|
|
5402
|
+
* `videoInnerHtml`. On the EDITING canvas (no `IS_PREVIEW`) it draws the poster ONLY — never a `<video>`, never a
|
|
5403
|
+
* player: an iframe would eat the selection's clicks and would leak before consent. Live, it attaches the shared
|
|
5404
|
+
* media-core runtime (the facade behind consent, the background video's pause button).
|
|
5405
|
+
*
|
|
5406
|
+
* Inputs recompute in SETTERS: the builder's trait panel assigns them directly (no ngOnChanges).
|
|
5407
|
+
*/
|
|
5408
|
+
class IoxVideoComponent {
|
|
5409
|
+
set videoSource(v) { this.set('videoSource', v); }
|
|
5410
|
+
get videoSource() { return this.values['videoSource']; }
|
|
5411
|
+
set src(v) { this.set('src', v); }
|
|
5412
|
+
get src() { return this.values['src']; }
|
|
5413
|
+
set poster(v) { this.set('poster', v); }
|
|
5414
|
+
get poster() { return this.values['poster']; }
|
|
5415
|
+
set mode(v) { this.set('mode', v); }
|
|
5416
|
+
get mode() { return this.values['mode']; }
|
|
5417
|
+
set autoplay(v) { this.set('autoplay', v); }
|
|
5418
|
+
get autoplay() { return this.values['autoplay']; }
|
|
5419
|
+
set title(v) { this.set('title', v); }
|
|
5420
|
+
get title() { return this.values['title']; }
|
|
5421
|
+
set captions(v) { this.set('captions', v); }
|
|
5422
|
+
get captions() { return this.values['captions']; }
|
|
5423
|
+
set captionsLang(v) { this.set('captionsLang', v); }
|
|
5424
|
+
get captionsLang() { return this.values['captionsLang']; }
|
|
5425
|
+
set consentCategory(v) { this.set('consentCategory', v); }
|
|
5426
|
+
get consentCategory() { return this.values['consentCategory']; }
|
|
5427
|
+
constructor(sanitizer, platformId, isPreview) {
|
|
5428
|
+
this.sanitizer = sanitizer;
|
|
5429
|
+
this.nodeId = '';
|
|
5430
|
+
this.values = {};
|
|
5431
|
+
this.attrs = {};
|
|
5432
|
+
this.html = '';
|
|
5433
|
+
this.runtime = null;
|
|
5434
|
+
this.viewReady = false;
|
|
5435
|
+
this.browser = isPlatformBrowser(platformId);
|
|
5436
|
+
this.live = !!isPreview;
|
|
5437
|
+
this.render();
|
|
5438
|
+
}
|
|
5439
|
+
ngAfterViewInit() {
|
|
5440
|
+
this.viewReady = true;
|
|
5441
|
+
this.attach();
|
|
5442
|
+
}
|
|
5443
|
+
ngOnDestroy() {
|
|
5444
|
+
this.runtime?.destroy();
|
|
5445
|
+
this.runtime = null;
|
|
5446
|
+
}
|
|
5447
|
+
set(name, value) {
|
|
5448
|
+
if (this.values[name] === value)
|
|
5449
|
+
return;
|
|
5450
|
+
this.values[name] = value;
|
|
5451
|
+
this.render();
|
|
5452
|
+
}
|
|
5453
|
+
render() {
|
|
5454
|
+
this.plan = planVideo({ props: this.values }, null);
|
|
5455
|
+
this.attrs = videoRootAttributes(this.plan);
|
|
5456
|
+
const lang = typeof document !== 'undefined' ? document.documentElement?.getAttribute('lang') : null;
|
|
5457
|
+
this.html = this.sanitizer.bypassSecurityTrustHtml(videoInnerHtml(this.plan, { esc: escapeHtml, canvas: !this.live, words: videoWords(lang) }));
|
|
5458
|
+
if (this.viewReady) {
|
|
5459
|
+
// The new markup lands with this change detection; the runtime re-attaches to it after.
|
|
5460
|
+
this.runtime?.destroy();
|
|
5461
|
+
this.runtime = null;
|
|
5462
|
+
queueMicrotask(() => this.attach());
|
|
5463
|
+
}
|
|
5464
|
+
}
|
|
5465
|
+
attach() {
|
|
5466
|
+
if (!this.browser || !this.live || this.runtime)
|
|
5467
|
+
return;
|
|
5468
|
+
const el = this.root?.nativeElement;
|
|
5469
|
+
if (!el?.hasAttribute(VideoAttribute.Root))
|
|
5470
|
+
return;
|
|
5471
|
+
this.runtime = attachVideoAt(el);
|
|
5472
|
+
}
|
|
5473
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: IoxVideoComponent, deps: [{ token: i1$1.DomSanitizer }, { token: PLATFORM_ID }, { token: IS_PREVIEW, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5474
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.31", type: IoxVideoComponent, isStandalone: false, selector: "iox-video", inputs: { nodeId: "nodeId", videoSource: "videoSource", src: "src", poster: "poster", mode: "mode", autoplay: "autoplay", title: "title", captions: "captions", captionsLang: "captionsLang", consentCategory: "consentCategory" }, viewQueries: [{ propertyName: "root", first: true, predicate: ["root"], descendants: true, static: true }], ngImport: i0, template: "<div #root\n [class]=\"'iox-video iox-node-' + nodeId\"\n [attr.data-iox-video]=\"attrs['data-iox-video'] ?? null\"\n [attr.data-iox-video-source]=\"attrs['data-iox-video-source'] ?? null\"\n [attr.data-iox-video-id]=\"attrs['data-iox-video-id'] ?? null\"\n [attr.data-iox-video-hash]=\"attrs['data-iox-video-hash'] ?? null\"\n [attr.data-iox-video-mode]=\"attrs['data-iox-video-mode'] ?? null\"\n [attr.data-iox-video-autoplay]=\"attrs['data-iox-video-autoplay'] ?? null\"\n [attr.data-iox-video-consent]=\"attrs['data-iox-video-consent'] ?? null\"\n [attr.data-iox-video-title]=\"attrs['data-iox-video-title'] ?? null\"\n [attr.data-iox-video-poster-empty]=\"attrs['data-iox-video-poster-empty'] ?? null\"\n [innerHTML]=\"html\"></div>", isInline: true, styles: [":host{display:block;min-width:0;max-width:100%}\n"] }); }
|
|
5475
|
+
}
|
|
5476
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.31", ngImport: i0, type: IoxVideoComponent, decorators: [{
|
|
5477
|
+
type: Component,
|
|
5478
|
+
args: [{ selector: 'iox-video', template: `<div #root
|
|
5479
|
+
[class]="'${VideoClass.Root} iox-node-' + nodeId"
|
|
5480
|
+
[attr.data-iox-video]="attrs['${VideoAttribute.Root}'] ?? null"
|
|
5481
|
+
[attr.data-iox-video-source]="attrs['${VideoAttribute.Source}'] ?? null"
|
|
5482
|
+
[attr.data-iox-video-id]="attrs['${VideoAttribute.Id}'] ?? null"
|
|
5483
|
+
[attr.data-iox-video-hash]="attrs['${VideoAttribute.Hash}'] ?? null"
|
|
5484
|
+
[attr.data-iox-video-mode]="attrs['${VideoAttribute.Mode}'] ?? null"
|
|
5485
|
+
[attr.data-iox-video-autoplay]="attrs['${VideoAttribute.Autoplay}'] ?? null"
|
|
5486
|
+
[attr.data-iox-video-consent]="attrs['${VideoAttribute.Consent}'] ?? null"
|
|
5487
|
+
[attr.data-iox-video-title]="attrs['${VideoAttribute.Title}'] ?? null"
|
|
5488
|
+
[attr.data-iox-video-poster-empty]="attrs['${VideoAttribute.PosterEmpty}'] ?? null"
|
|
5489
|
+
[innerHTML]="html"></div>`, standalone: false, styles: [":host{display:block;min-width:0;max-width:100%}\n"] }]
|
|
5490
|
+
}], ctorParameters: () => [{ type: i1$1.DomSanitizer }, { type: undefined, decorators: [{
|
|
5491
|
+
type: Inject,
|
|
5492
|
+
args: [PLATFORM_ID]
|
|
5493
|
+
}] }, { type: undefined, decorators: [{
|
|
5494
|
+
type: Optional
|
|
5495
|
+
}, {
|
|
5496
|
+
type: Inject,
|
|
5497
|
+
args: [IS_PREVIEW]
|
|
5498
|
+
}] }], propDecorators: { nodeId: [{
|
|
5499
|
+
type: Input
|
|
5500
|
+
}], videoSource: [{
|
|
5501
|
+
type: Input
|
|
5502
|
+
}], src: [{
|
|
5503
|
+
type: Input
|
|
5504
|
+
}], poster: [{
|
|
5505
|
+
type: Input
|
|
5506
|
+
}], mode: [{
|
|
5507
|
+
type: Input
|
|
5508
|
+
}], autoplay: [{
|
|
5509
|
+
type: Input
|
|
5510
|
+
}], title: [{
|
|
5511
|
+
type: Input
|
|
5512
|
+
}], captions: [{
|
|
5513
|
+
type: Input
|
|
5514
|
+
}], captionsLang: [{
|
|
5515
|
+
type: Input
|
|
5516
|
+
}], consentCategory: [{
|
|
5517
|
+
type: Input
|
|
5518
|
+
}], root: [{
|
|
5519
|
+
type: ViewChild,
|
|
5520
|
+
args: ['root', { static: true }]
|
|
5521
|
+
}] } });
|
|
5522
|
+
|
|
5174
5523
|
const COMPONENTS = [
|
|
5175
5524
|
BuilderImageComponent,
|
|
5176
5525
|
BuilderSpacerComponent,
|
|
@@ -5191,6 +5540,7 @@ const COMPONENTS = [
|
|
|
5191
5540
|
ClientListComponent,
|
|
5192
5541
|
ClientListItemComponent,
|
|
5193
5542
|
ClientGalleryComponent,
|
|
5543
|
+
IoxVideoComponent,
|
|
5194
5544
|
IoxFormComponent,
|
|
5195
5545
|
IoxFieldComponent,
|
|
5196
5546
|
IoxSubmitButtonComponent,
|
|
@@ -5219,6 +5569,7 @@ class IoxBuilderComponentsModule {
|
|
|
5219
5569
|
ClientListComponent,
|
|
5220
5570
|
ClientListItemComponent,
|
|
5221
5571
|
ClientGalleryComponent,
|
|
5572
|
+
IoxVideoComponent,
|
|
5222
5573
|
IoxFormComponent,
|
|
5223
5574
|
IoxFieldComponent,
|
|
5224
5575
|
IoxSubmitButtonComponent,
|
|
@@ -5243,6 +5594,7 @@ class IoxBuilderComponentsModule {
|
|
|
5243
5594
|
ClientListComponent,
|
|
5244
5595
|
ClientListItemComponent,
|
|
5245
5596
|
ClientGalleryComponent,
|
|
5597
|
+
IoxVideoComponent,
|
|
5246
5598
|
IoxFormComponent,
|
|
5247
5599
|
IoxFieldComponent,
|
|
5248
5600
|
IoxSubmitButtonComponent,
|
|
@@ -5306,6 +5658,8 @@ class IoxComponentRegistryService {
|
|
|
5306
5658
|
// Dialog (DS2) — the live <dialog> twin, so a page holding one no longer falls back to
|
|
5307
5659
|
// the string renderer.
|
|
5308
5660
|
['Dialog', IoxDialogComponent],
|
|
5661
|
+
// Video (CC3) — one component for the canvas (poster only), Preview and the live site.
|
|
5662
|
+
['Video', IoxVideoComponent],
|
|
5309
5663
|
]);
|
|
5310
5664
|
}
|
|
5311
5665
|
getComponent(type) {
|
|
@@ -5343,7 +5697,7 @@ var A11yTrait;
|
|
|
5343
5697
|
A11yTrait["CloseAbove"] = "closeAbove";
|
|
5344
5698
|
})(A11yTrait || (A11yTrait = {}));
|
|
5345
5699
|
/** The types that carry an Accessible name trait. */
|
|
5346
|
-
const ACCESSIBLE_NAME_TYPES = ['ButtonBlock', 'LinkedContainer', 'Link', 'Dialog'];
|
|
5700
|
+
const ACCESSIBLE_NAME_TYPES = ['ButtonBlock', 'LinkedContainer', 'Link', 'Dialog', 'SliderContainer'];
|
|
5347
5701
|
/** The types that link to a page and can therefore be the current page's link. */
|
|
5348
5702
|
const CURRENT_LINK_TYPES = ['Link', 'LinkedContainer', 'ButtonBlock'];
|
|
5349
5703
|
|
|
@@ -5519,8 +5873,10 @@ const COMPONENT_STATE_SELECTOR = {
|
|
|
5519
5873
|
[ComponentState.Current]: '[aria-current="page"]',
|
|
5520
5874
|
[ComponentState.On]: '[data-iox-on]',
|
|
5521
5875
|
};
|
|
5522
|
-
/** The composite roles that are themselves "on" when their item is open (they carry `data-iox-on`)
|
|
5523
|
-
|
|
5876
|
+
/** The composite roles that are themselves "on" when their item is open (they carry `data-iox-on`): an accordion's
|
|
5877
|
+
* item, header and panel; a disclosure (its own item), its toggle and its panel (CC2.1). The main entry does not
|
|
5878
|
+
* import composite-core, so the roles are spelled here — `style-compiler.spec` pins them to its enums. */
|
|
5879
|
+
const ON_STATE_ROLES = ['accordion.item', 'accordion.trigger', 'accordion.panel', 'disclosure', 'disclosure.trigger', 'disclosure.panel'];
|
|
5524
5880
|
/**
|
|
5525
5881
|
* The component states a node offers in the Style panel's "Component state" group: Current page (a link),
|
|
5526
5882
|
* Open (an accordion's item, header or panel), Item open (any other part inside an item — `insideItem`).
|
|
@@ -5897,6 +6253,9 @@ function isCurrentLink(href, currentPath, options = {}) {
|
|
|
5897
6253
|
/** The types that are pure decoration to assistive technology (an Icon has no name of its own). */
|
|
5898
6254
|
const DECORATIVE_TYPES = ['Icon'];
|
|
5899
6255
|
const DIALOG_NODE_TYPE = 'Dialog';
|
|
6256
|
+
/** Named for assistive technology, but never an icon-only CONTROL the audit should flag: a Dialog, a carousel. */
|
|
6257
|
+
const NAME_NOT_REQUIRED_TYPES = [DIALOG_NODE_TYPE, 'SliderContainer'];
|
|
6258
|
+
const SLIDER_PAUSE_ROLE = 'slider.pause';
|
|
5900
6259
|
/** Carries the min-width (px) at which an open dialog closes itself; the engine listens on it. */
|
|
5901
6260
|
const DIALOG_CLOSE_ABOVE_ATTRIBUTE = 'data-iox-dialog-close-above';
|
|
5902
6261
|
var A11yAttribute;
|
|
@@ -5992,7 +6351,10 @@ function scanNames(node, acc) {
|
|
|
5992
6351
|
* button or link (WCAG 4.1.2, CC1 N6). The responsive audit flags it; an Icon on its own is decoration.
|
|
5993
6352
|
*/
|
|
5994
6353
|
function needsAccessibleName(node) {
|
|
5995
|
-
if (!node?.type || !ACCESSIBLE_NAME_TYPES.includes(node.type) || node.type
|
|
6354
|
+
if (!node?.type || !ACCESSIBLE_NAME_TYPES.includes(node.type) || NAME_NOT_REQUIRED_TYPES.includes(node.type))
|
|
6355
|
+
return false;
|
|
6356
|
+
// A Slider's pause control is named by its runtime ("Stop / Start automatic slide show", CC3).
|
|
6357
|
+
if (node.role === SLIDER_PAUSE_ROLE)
|
|
5996
6358
|
return false;
|
|
5997
6359
|
if (trimmed$1(nodeTraitValue(node, A11yTrait.AccessibleName)))
|
|
5998
6360
|
return false;
|
|
@@ -8008,5 +8370,5 @@ function effectiveTransitionId(anim) {
|
|
|
8008
8370
|
* Generated bundle index. Do not edit.
|
|
8009
8371
|
*/
|
|
8010
8372
|
|
|
8011
|
-
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, COMPONENT_STATE_SELECTOR, CONTAINER_HTML_TAGS, CONTEXT_ACTION_TYPES, CURRENT_LINK_TYPES, CardComponent, ClientGalleryComponent, ClientListComponent, ClientListItemComponent, ClientRepeaterComponent, ClientSliderContainerComponent, ClientSliderSlideComponent, ComponentInstanceRegistryService, ComponentState, ContainerComponent, ContextStore, DECORATIVE_TYPES, DEFAULT_GALLERY_SCHEDULER, DEFAULT_PAGE_TRANSITION, DEFAULT_PAGE_TRANSITION_DURATION, DEFAULT_PAGE_TRANSITION_EASING, DEFAULT_PAGE_TRANSITION_PERSPECTIVE, DEFAULT_PHOSPHOR_WEIGHT, DEFAULT_WIDTH_BY_TYPE, DIALOG_CLOSE_ABOVE_ATTRIBUTE, DIALOG_NODE_TYPE, DataSourceSortDir, DeclarationContext, ENTRANCE_ACTION_TYPES, EXIT_ACTION_TYPES, FormRenderState, FormRuntimeService, GALLERY_EFFECTS, GALLERY_EFFECT_DESCRIPTORS, GalleryLoop, HOVER_DEFAULT_TRANSITION, HOVER_STATES, 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, LEGACY_DIRECTION_KEY, LEGACY_HOVER_TRANSITION, LinkedContainerComponent, MANAGED_A11Y_ATTRIBUTES, MAX_LINES_KEY, ON_STATE_ROLES, PAGE_STYLE_TOKENS, PAGE_TOKEN_FALLBACKS, PAGE_TRANSITION_CATEGORIES, PAGE_TRANSITION_PRESETS, PART_CLASS_NAMES, PIPE_DESCRIPTORS, PIPE_REGISTRY, PageScrollProvider, PageStyleField, PageStyleSource, REDUCED_MOTION_QUERY, RESERVED_ALIAS_PREFIX, SORT_PARAM, STATE_PSEUDO_CLASS, SUPPRESSED_STYLE_PROPS_BY_TYPE, SWIPER_A11Y_OPTIONS, SWIPER_RESPONSIVE_TRAITS, SectionComponent, SwiperModuleName, TARGETED_STATE_SUFFIX, TEXT_ALIGN_KEY, TEXT_DIRECTION_KEY, TRANSITION_FEELS, TextAlign, TextBlockComponent, VALIDATION_STATES, VALIDATION_STATE_CLASS, VIRTUAL_TRAIT_GROUPS, VIRTUAL_TRAIT_KEYS, ViewPositionDirective, ViewPositionModule, VisibilityActionType, activeActions, applyBindingPipes, applyFeel, breakpointDef, breakpointForWidth, breakpointQueryFor, buildDataSourceFilter, buildInteractionKeyframes, buildPartSelector, buildRelatedFilter, buildSwiperBreakpoints, buildTargetedStateSelector, buildTargetedSuffixSelector, buildTransitionTimeline, cascadeChain, clearInputOverride, clearOverride, closeAboveMediaQuery, collectContextSlotKeys, collectReferencedAliases, compileDeclarations, compilePageStyle, componentStatesFor, composeVirtualTraits, computeRelative, containerHtmlTag, contextActionEffect, contextSlotKeys, countOverrides, dataSourcePlanToRequest, declaredInputNames, decomposeBackdropFilter, defaultHoverTransition, defaultMessageResolver, deriveSeoFromContent, describePageStyle, describeSeoFields, dialogCloseAboveMinWidth, effectiveActionType, effectiveTransitionId, entrancePreStateStyle, excludeSelf, feelFor, finalKeyframe, getByPath, getSeoValue, hasHoverState, hasOwnTransition, initialSlotValues, isActionEnabled, isContextAction, isCurrentLink, isExternalOrFragment, isGradientPaint, isInputOverriddenAt, isOverriddenAt, isReservedAlias, isValidSlotKey, isWholeBackdropSet, keyframePropertyName, keyframeStyleEntries, legacyEnterToTransition, matchRouteParams, mediaQueryFor, mergeSwiperBreakpoints, migrateLegacyDirection, migrateLegacyTextAlign, motionAllowed, nearestCommonAncestorId, needsAccessibleName, nodeA11yAttributes, nodeCssId, nodeTraitValue, nodeUsesContext, normalizeAppPath, normalizeCollectionResult, normalizeGalleryImage, normalizeIconClass, parentBreakpoint, parseUrlList, partClassName, planDataSource, planResponsiveRules, prefersReducedMotion, referencedDataSources, referencedDataSourcesDeep, renderDefaultDeclarations, resetPageStyleField, resetSeoField, resolveBoundValue, resolveContextValue, resolveDerivedInto, resolveGalleryEffect, resolveGalleryUrls, resolveInputChain, resolveInputs, resolvePageTransition, resolvePath, resolveRelativeInto, resolveRepeaterItems, resolveSeo, resolveSiblings, resolveSingleItemId, resolveStateStyles, resolveStyleProps, resolveToggleVisibility, resolveValueChain, rewriteViewportUnits, safeSetInput, serializeA11yAttributes, setInputOverride, setOverride, setSeoAuto, setSeoBinding, setSeoOverride, setSeoValue, sortParamValue, stateNamesIn, statePseudoClass, stateSelectorSuffix, stripSuppressedProps, swiperAutoplayAllowed, swiperModuleNames, syncNodeA11yAttributes, targetedStateSelector, variableAliases, variableItemsFrom, withContextSlots, withDefaultHoverTransition, wrapInBreakpointQuery, wrapInMediaQuery };
|
|
8373
|
+
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, COMPONENT_STATE_SELECTOR, CONTAINER_HTML_TAGS, CONTEXT_ACTION_TYPES, CURRENT_LINK_TYPES, CardComponent, ClientGalleryComponent, ClientListComponent, ClientListItemComponent, ClientRepeaterComponent, ClientSliderContainerComponent, ClientSliderSlideComponent, ComponentInstanceRegistryService, ComponentState, ContainerComponent, ContextStore, DECORATIVE_TYPES, DEFAULT_GALLERY_SCHEDULER, DEFAULT_PAGE_TRANSITION, DEFAULT_PAGE_TRANSITION_DURATION, DEFAULT_PAGE_TRANSITION_EASING, DEFAULT_PAGE_TRANSITION_PERSPECTIVE, DEFAULT_PHOSPHOR_WEIGHT, DEFAULT_WIDTH_BY_TYPE, DIALOG_CLOSE_ABOVE_ATTRIBUTE, DIALOG_NODE_TYPE, DataSourceSortDir, DeclarationContext, ENTRANCE_ACTION_TYPES, EXIT_ACTION_TYPES, FormRenderState, FormRuntimeService, GALLERY_EFFECTS, GALLERY_EFFECT_DESCRIPTORS, GalleryLoop, HOVER_DEFAULT_TRANSITION, HOVER_STATES, 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, LEGACY_DIRECTION_KEY, LEGACY_HOVER_TRANSITION, LEGACY_SWIPER_CONTROLS, LinkedContainerComponent, MANAGED_A11Y_ATTRIBUTES, MAX_LINES_KEY, ON_STATE_ROLES, PAGE_STYLE_TOKENS, PAGE_TOKEN_FALLBACKS, PAGE_TRANSITION_CATEGORIES, PAGE_TRANSITION_PRESETS, PART_CLASS_NAMES, PART_PAGINATION_MODIFIER, PIPE_DESCRIPTORS, PIPE_REGISTRY, PageScrollProvider, PageStyleField, PageStyleSource, REDUCED_MOTION_QUERY, RESERVED_ALIAS_PREFIX, SLIDER_INPUTS_ATTRIBUTE, SLIDER_INPUT_NAMES, SORT_PARAM, STATE_PSEUDO_CLASS, SUPPRESSED_STYLE_PROPS_BY_TYPE, SWIPER_A11Y_OPTIONS, SWIPER_RESPONSIVE_TRAITS, SWIPER_TRIGGER_EVENTS, SectionComponent, SwiperModuleName, TARGETED_STATE_SUFFIX, TEXT_ALIGN_KEY, TEXT_DIRECTION_KEY, TRANSITION_FEELS, TextAlign, TextBlockComponent, VALIDATION_STATES, VALIDATION_STATE_CLASS, VIRTUAL_TRAIT_GROUPS, VIRTUAL_TRAIT_KEYS, ViewPositionDirective, ViewPositionModule, VisibilityActionType, activeActions, applyBindingPipes, applyFeel, bootSlider, breakpointDef, breakpointForWidth, breakpointQueryFor, buildDataSourceFilter, buildInteractionKeyframes, buildPartSelector, buildRelatedFilter, buildSwiperBreakpoints, buildTargetedStateSelector, buildTargetedSuffixSelector, buildTransitionTimeline, cascadeChain, clearInputOverride, clearOverride, closeAboveMediaQuery, collectContextSlotKeys, collectReferencedAliases, compileDeclarations, compilePageStyle, componentStatesFor, composeVirtualTraits, computeRelative, containerHtmlTag, contextActionEffect, contextSlotKeys, countOverrides, dataSourcePlanToRequest, declaredInputNames, decomposeBackdropFilter, defaultHoverTransition, defaultMessageResolver, deriveSeoFromContent, describePageStyle, describeSeoFields, dialogCloseAboveMinWidth, domHasSliderParts, effectiveActionType, effectiveTransitionId, entrancePreStateStyle, excludeSelf, feelFor, finalKeyframe, getByPath, getSeoValue, hasHoverState, hasOwnTransition, initialSlotValues, isActionEnabled, isContextAction, isCurrentLink, isExternalOrFragment, isGradientPaint, isInputOverriddenAt, isOverriddenAt, isReservedAlias, isValidSlotKey, isWholeBackdropSet, keyframePropertyName, keyframeStyleEntries, legacyEnterToTransition, matchRouteParams, mediaQueryFor, mergeSwiperBreakpoints, migrateLegacyDirection, migrateLegacyTextAlign, motionAllowed, nearestCommonAncestorId, needsAccessibleName, nodeA11yAttributes, nodeCssId, nodeTraitValue, nodeUsesContext, normalizeAppPath, normalizeCollectionResult, normalizeGalleryImage, normalizeIconClass, parentBreakpoint, parseUrlList, partClassName, planDataSource, planResponsiveRules, planSwiperOptions, prefersReducedMotion, referencedDataSources, referencedDataSourcesDeep, renderDefaultDeclarations, resetPageStyleField, resetSeoField, resolveBoundValue, resolveContextValue, resolveDerivedInto, resolveGalleryEffect, resolveGalleryUrls, resolveInputChain, resolveInputs, resolvePageTransition, resolvePath, resolveRelativeInto, resolveRepeaterItems, resolveSeo, resolveSiblings, resolveSingleItemId, resolveStateStyles, resolveStyleProps, resolveToggleVisibility, resolveValueChain, rewriteViewportUnits, safeSetInput, serializeA11yAttributes, setInputOverride, setOverride, setSeoAuto, setSeoBinding, setSeoOverride, setSeoValue, sliderControlElements, sliderInputsFromProps, sliderInputsOf, sortParamValue, stateNamesIn, statePseudoClass, stateSelectorSuffix, stripSuppressedProps, swiperAutoplayAllowed, swiperLoopOptions, swiperModuleNames, syncNodeA11yAttributes, targetedStateSelector, variableAliases, variableItemsFrom, withContextSlots, withDefaultHoverTransition, wrapInBreakpointQuery, wrapInMediaQuery };
|
|
8012
8374
|
//# sourceMappingURL=vectoriox-iox-ui.mjs.map
|