@asante-org/atlascopco-vt-litesitegenerator 3.6.19 → 3.7.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 (34) hide show
  1. package/dist/index.esm.js +406 -603
  2. package/dist/index.esm.js.map +1 -1
  3. package/dist/index.esm.scss +445 -578
  4. package/dist/index.js +408 -601
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.scss +445 -578
  7. package/dist/src/components/lsg/LsgCarousel/LsgCarousel.d.ts +12 -33
  8. package/dist/src/components/lsg/LsgCarousel/LsgCarousel.stories.d.ts +3 -18
  9. package/dist/src/components/lsg/LsgCarousel/LsgCarouselController.d.ts +1 -46
  10. package/dist/src/components/lsg/LsgCarousel/bootLsgCarousel.d.ts +9 -2
  11. package/dist/src/components/lsg/LsgTable/LsgTable.d.ts +19 -0
  12. package/dist/src/components/lsg/LsgTable/LsgTable.stories.d.ts +8 -0
  13. package/dist/src/components/lsg/LsgTable/index.d.ts +2 -0
  14. package/dist/src/components/lsg/index.d.ts +2 -0
  15. package/dist/src/index.d.ts +5 -5
  16. package/dist/src/themes/createThemeComponents.d.ts +1 -0
  17. package/dist/src/themes/theme-1/components.d.ts +2 -1
  18. package/dist/src/themes/theme-2/components.d.ts +2 -1
  19. package/dist/src/themes/theme-3/components.d.ts +2 -1
  20. package/dist/themes/theme-1.css +722 -311
  21. package/dist/themes/theme-1.css.map +1 -1
  22. package/dist/themes/theme-1.js +49 -217
  23. package/dist/themes/theme-1.js.map +1 -1
  24. package/dist/themes/theme-2.css +440 -492
  25. package/dist/themes/theme-2.css.map +1 -1
  26. package/dist/themes/theme-2.js +49 -217
  27. package/dist/themes/theme-2.js.map +1 -1
  28. package/dist/themes/theme-3.css +345 -508
  29. package/dist/themes/theme-3.css.map +1 -1
  30. package/dist/themes/theme-3.js +49 -217
  31. package/dist/themes/theme-3.js.map +1 -1
  32. package/dist/tsconfig.sb.tsbuildinfo +1 -0
  33. package/dist/tsconfig.tsbuildinfo +1 -1
  34. package/package.json +1 -1
package/dist/index.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- import React, { useState, useRef, useMemo, useEffect, useId, useCallback, forwardRef, useImperativeHandle } from 'react';
1
+ import React, { useState, useRef, useEffect, useId, useCallback, useMemo, forwardRef, useImperativeHandle } from 'react';
2
2
 
3
3
  function _extends() {
4
4
  return _extends = Object.assign ? Object.assign.bind() : function (n) {
@@ -140,37 +140,6 @@ var LsgBanner = function (_a) {
140
140
  })))));
141
141
  };
142
142
 
143
- /******************************************************************************
144
- Copyright (c) Microsoft Corporation.
145
-
146
- Permission to use, copy, modify, and/or distribute this software for any
147
- purpose with or without fee is hereby granted.
148
-
149
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
150
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
151
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
152
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
153
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
154
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
155
- PERFORMANCE OF THIS SOFTWARE.
156
- ***************************************************************************** */
157
- /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
158
-
159
- var __assign = function () {
160
- __assign = Object.assign || function __assign(t) {
161
- for (var s, i = 1, n = arguments.length; i < n; i++) {
162
- s = arguments[i];
163
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
164
- }
165
- return t;
166
- };
167
- return __assign.apply(this, arguments);
168
- };
169
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
170
- var e = new Error(message);
171
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
172
- };
173
-
174
143
  function isSafeUrl$1(url) {
175
144
  if (!url) return false;
176
145
  var lower = url.toLowerCase().trim();
@@ -2136,240 +2105,8 @@ function EmblaCarousel(root, userOptions, userPlugins) {
2136
2105
  }
2137
2106
  EmblaCarousel.globalOptions = undefined;
2138
2107
 
2139
- function clampNumber(number, min, max) {
2140
- return Math.min(Math.max(number, min), max);
2141
- }
2142
- function isNumber(value) {
2143
- return typeof value === 'number' && !isNaN(value);
2144
- }
2145
- function Fade(userOptions = {}) {
2146
- const fullOpacity = 1;
2147
- const noOpacity = 0;
2148
- const fadeFriction = 0.68;
2149
- let emblaApi;
2150
- let opacities = [];
2151
- let fadeToNextDistance;
2152
- let distanceFromPointerDown = 0;
2153
- let fadeVelocity = 0;
2154
- let progress = 0;
2155
- let shouldFadePair = false;
2156
- let defaultSettledBehaviour;
2157
- let defaultProgressBehaviour;
2158
- function init(emblaApiInstance) {
2159
- emblaApi = emblaApiInstance;
2160
- const selectedSnap = emblaApi.selectedScrollSnap();
2161
- const {
2162
- scrollBody,
2163
- containerRect,
2164
- axis
2165
- } = emblaApi.internalEngine();
2166
- const containerSize = axis.measureSize(containerRect);
2167
- fadeToNextDistance = clampNumber(containerSize * 0.75, 200, 500);
2168
- shouldFadePair = false;
2169
- opacities = emblaApi.scrollSnapList().map((_, index) => index === selectedSnap ? fullOpacity : noOpacity);
2170
- defaultSettledBehaviour = scrollBody.settled;
2171
- defaultProgressBehaviour = emblaApi.scrollProgress;
2172
- scrollBody.settled = settled;
2173
- emblaApi.scrollProgress = scrollProgress;
2174
- emblaApi.on('select', select).on('slideFocus', fadeToSelectedSnapInstantly).on('pointerDown', pointerDown).on('pointerUp', pointerUp);
2175
- disableScroll();
2176
- fadeToSelectedSnapInstantly();
2177
- }
2178
- function destroy() {
2179
- const {
2180
- scrollBody
2181
- } = emblaApi.internalEngine();
2182
- scrollBody.settled = defaultSettledBehaviour;
2183
- emblaApi.scrollProgress = defaultProgressBehaviour;
2184
- emblaApi.off('select', select).off('slideFocus', fadeToSelectedSnapInstantly).off('pointerDown', pointerDown).off('pointerUp', pointerUp);
2185
- emblaApi.slideNodes().forEach(slideNode => {
2186
- const slideStyle = slideNode.style;
2187
- slideStyle.opacity = '';
2188
- slideStyle.transform = '';
2189
- slideStyle.pointerEvents = '';
2190
- if (!slideNode.getAttribute('style')) slideNode.removeAttribute('style');
2191
- });
2192
- }
2193
- function fadeToSelectedSnapInstantly() {
2194
- const selectedSnap = emblaApi.selectedScrollSnap();
2195
- setOpacities(selectedSnap, fullOpacity);
2196
- }
2197
- function pointerUp() {
2198
- shouldFadePair = false;
2199
- }
2200
- function pointerDown() {
2201
- shouldFadePair = false;
2202
- distanceFromPointerDown = 0;
2203
- fadeVelocity = 0;
2204
- }
2205
- function select() {
2206
- const duration = emblaApi.internalEngine().scrollBody.duration();
2207
- fadeVelocity = duration ? 0 : fullOpacity;
2208
- shouldFadePair = true;
2209
- if (!duration) fadeToSelectedSnapInstantly();
2210
- }
2211
- function getSlideTransform(position) {
2212
- const {
2213
- axis
2214
- } = emblaApi.internalEngine();
2215
- const translateAxis = axis.scroll.toUpperCase();
2216
- return `translate${translateAxis}(${axis.direction(position)}px)`;
2217
- }
2218
- function disableScroll() {
2219
- const {
2220
- translate,
2221
- slideLooper
2222
- } = emblaApi.internalEngine();
2223
- translate.clear();
2224
- translate.toggleActive(false);
2225
- slideLooper.loopPoints.forEach(({
2226
- translate
2227
- }) => {
2228
- translate.clear();
2229
- translate.toggleActive(false);
2230
- });
2231
- }
2232
- function lockExcessiveScroll(fadeIndex) {
2233
- const {
2234
- scrollSnaps,
2235
- location,
2236
- target
2237
- } = emblaApi.internalEngine();
2238
- if (!isNumber(fadeIndex) || opacities[fadeIndex] < 0.5) return;
2239
- location.set(scrollSnaps[fadeIndex]);
2240
- target.set(location);
2241
- }
2242
- function setOpacities(fadeIndex, velocity) {
2243
- const scrollSnaps = emblaApi.scrollSnapList();
2244
- scrollSnaps.forEach((_, indexA) => {
2245
- const absVelocity = Math.abs(velocity);
2246
- const currentOpacity = opacities[indexA];
2247
- const isFadeIndex = indexA === fadeIndex;
2248
- const nextOpacity = isFadeIndex ? currentOpacity + absVelocity : currentOpacity - absVelocity;
2249
- const clampedOpacity = clampNumber(nextOpacity, noOpacity, fullOpacity);
2250
- opacities[indexA] = clampedOpacity;
2251
- const fadePair = isFadeIndex && shouldFadePair;
2252
- const indexB = emblaApi.previousScrollSnap();
2253
- if (fadePair) opacities[indexB] = 1 - clampedOpacity;
2254
- if (isFadeIndex) setProgress(fadeIndex, clampedOpacity);
2255
- setOpacity(indexA);
2256
- });
2257
- }
2258
- function setOpacity(index) {
2259
- const slidesInSnap = emblaApi.internalEngine().slideRegistry[index];
2260
- const {
2261
- scrollSnaps,
2262
- containerRect
2263
- } = emblaApi.internalEngine();
2264
- const opacity = opacities[index];
2265
- slidesInSnap.forEach(slideIndex => {
2266
- const slideStyle = emblaApi.slideNodes()[slideIndex].style;
2267
- const roundedOpacity = parseFloat(opacity.toFixed(2));
2268
- const hasOpacity = roundedOpacity > noOpacity;
2269
- const position = hasOpacity ? scrollSnaps[index] : containerRect.width + 2;
2270
- const transform = getSlideTransform(position);
2271
- if (hasOpacity) slideStyle.transform = transform;
2272
- slideStyle.opacity = roundedOpacity.toString();
2273
- slideStyle.pointerEvents = opacity > 0.5 ? 'auto' : 'none';
2274
- if (!hasOpacity) slideStyle.transform = transform;
2275
- });
2276
- }
2277
- function setProgress(fadeIndex, opacity) {
2278
- const {
2279
- index,
2280
- dragHandler,
2281
- scrollSnaps
2282
- } = emblaApi.internalEngine();
2283
- const pointerDown = dragHandler.pointerDown();
2284
- const snapFraction = 1 / (scrollSnaps.length - 1);
2285
- let indexA = fadeIndex;
2286
- let indexB = pointerDown ? emblaApi.selectedScrollSnap() : emblaApi.previousScrollSnap();
2287
- if (pointerDown && indexA === indexB) {
2288
- const reverseSign = Math.sign(distanceFromPointerDown) * -1;
2289
- indexA = indexB;
2290
- indexB = index.clone().set(indexB).add(reverseSign).get();
2291
- }
2292
- const currentPosition = indexB * snapFraction;
2293
- const diffPosition = (indexA - indexB) * snapFraction;
2294
- progress = currentPosition + diffPosition * opacity;
2295
- }
2296
- function getFadeIndex() {
2297
- const {
2298
- dragHandler,
2299
- index,
2300
- scrollBody
2301
- } = emblaApi.internalEngine();
2302
- const selectedSnap = emblaApi.selectedScrollSnap();
2303
- if (!dragHandler.pointerDown()) return selectedSnap;
2304
- const directionSign = Math.sign(scrollBody.velocity());
2305
- const distanceSign = Math.sign(distanceFromPointerDown);
2306
- const nextSnap = index.clone().set(selectedSnap).add(directionSign * -1).get();
2307
- if (!directionSign || !distanceSign) return null;
2308
- return distanceSign === directionSign ? nextSnap : selectedSnap;
2309
- }
2310
- function fade(emblaApi) {
2311
- const {
2312
- dragHandler,
2313
- scrollBody
2314
- } = emblaApi.internalEngine();
2315
- const pointerDown = dragHandler.pointerDown();
2316
- const velocity = scrollBody.velocity();
2317
- const duration = scrollBody.duration();
2318
- const fadeIndex = getFadeIndex();
2319
- const noFadeIndex = !isNumber(fadeIndex);
2320
- if (pointerDown) {
2321
- if (!velocity) return;
2322
- distanceFromPointerDown += velocity;
2323
- fadeVelocity = Math.abs(velocity / fadeToNextDistance);
2324
- lockExcessiveScroll(fadeIndex);
2325
- }
2326
- if (!pointerDown) {
2327
- if (!duration || noFadeIndex) return;
2328
- fadeVelocity += (fullOpacity - opacities[fadeIndex]) / duration;
2329
- fadeVelocity *= fadeFriction;
2330
- }
2331
- if (noFadeIndex) return;
2332
- setOpacities(fadeIndex, fadeVelocity);
2333
- }
2334
- function settled() {
2335
- const {
2336
- target,
2337
- location
2338
- } = emblaApi.internalEngine();
2339
- const diffToTarget = target.get() - location.get();
2340
- const notReachedTarget = Math.abs(diffToTarget) >= 1;
2341
- const fadeIndex = getFadeIndex();
2342
- const noFadeIndex = !isNumber(fadeIndex);
2343
- fade(emblaApi);
2344
- if (noFadeIndex || notReachedTarget) return false;
2345
- return opacities[fadeIndex] > 0.999;
2346
- }
2347
- function scrollProgress() {
2348
- return progress;
2349
- }
2350
- const self = {
2351
- name: 'fade',
2352
- options: userOptions,
2353
- init,
2354
- destroy
2355
- };
2356
- return self;
2357
- }
2358
- Fade.globalOptions = undefined;
2359
-
2360
- var MOBILE_MEDIA_QUERY$1 = "(max-width: 767px)";
2361
- /** Media track slides. Also the dot/aria-label source of truth. */
2362
- var MEDIA_ITEM_SELECTOR = "[data-lsg-carousel-item]";
2363
- /** Text track slides, one per media slide. */
2364
- var CONTENT_ITEM_SELECTOR = "[data-lsg-carousel-content-item]";
2365
- var directChildren = function (container, selector) {
2366
- return container ? Array.from(container.children).filter(function (el) {
2367
- return el instanceof HTMLElement && el.matches(selector);
2368
- }) : [];
2369
- };
2370
2108
  var LsgCarouselController = /** @class */function () {
2371
2109
  function LsgCarouselController(viewport, elements, options) {
2372
- var _a;
2373
2110
  if (elements === void 0) {
2374
2111
  elements = {};
2375
2112
  }
@@ -2377,10 +2114,8 @@ var LsgCarouselController = /** @class */function () {
2377
2114
  options = {};
2378
2115
  }
2379
2116
  var _this = this;
2380
- var _b, _c, _d, _e, _f, _g, _h;
2381
- this.media = null;
2382
- this.content = null;
2383
- this.syncing = false;
2117
+ var _a, _b, _c, _d;
2118
+ this.embla = null;
2384
2119
  /**
2385
2120
  * Embla automatically falls back to non-looping mode when there is not enough
2386
2121
  * slide content to create a safe loop (most noticeable with two-up layouts and
@@ -2388,228 +2123,82 @@ var LsgCarouselController = /** @class */function () {
2388
2123
  * when there is no native previous snap, jump to the final authored snap.
2389
2124
  */
2390
2125
  this.scrollPrev = function () {
2391
- if (!_this.media) return;
2392
- if (_this.media.canScrollPrev()) {
2393
- _this.media.scrollPrev();
2126
+ if (!_this.embla) return;
2127
+ if (_this.embla.canScrollPrev()) {
2128
+ _this.embla.scrollPrev();
2394
2129
  return;
2395
2130
  }
2396
- var lastSnap = _this.media.scrollSnapList().length - 1;
2397
- if (lastSnap >= 0) _this.media.scrollTo(lastSnap);
2131
+ var lastSnap = _this.embla.scrollSnapList().length - 1;
2132
+ if (lastSnap >= 0) _this.embla.scrollTo(lastSnap);
2398
2133
  };
2399
2134
  /** See `scrollPrev` for why the explicit wrap fallback is required. */
2400
2135
  this.scrollNext = function () {
2401
- if (!_this.media) return;
2402
- if (_this.media.canScrollNext()) {
2403
- _this.media.scrollNext();
2136
+ if (!_this.embla) return;
2137
+ if (_this.embla.canScrollNext()) {
2138
+ _this.embla.scrollNext();
2404
2139
  return;
2405
2140
  }
2406
- if (_this.media.scrollSnapList().length > 0) _this.media.scrollTo(0);
2407
- };
2408
- /**
2409
- * The text track never initiates navigation, but it owns its own resize and
2410
- * mutation observers. If one instance re-measures without the other, this pulls
2411
- * the media track back onto the text track's index rather than letting them drift.
2412
- */
2413
- this.handleContentSelect = function () {
2414
- if (!_this.media || !_this.content || _this.syncing) return;
2415
- var target = _this.content.selectedScrollSnap();
2416
- if (_this.media.selectedScrollSnap() === target) return;
2417
- _this.syncing = true;
2418
- try {
2419
- _this.media.scrollTo(target, true);
2420
- } finally {
2421
- _this.syncing = false;
2422
- }
2423
- };
2424
- /** Reader-initiated navigation: repaint state, then crossfade the text. */
2425
- this.handleMediaSelect = function () {
2426
- _this.syncSelectedState();
2427
- _this.pushToContent();
2428
- };
2429
- /**
2430
- * Re-measure events (breakpoint flip, resize, authored items added/removed).
2431
- * The text is realigned with a hard cut because nothing moved for the reader.
2432
- */
2433
- this.handleResync = function () {
2434
- _this.syncSelectedState();
2435
- _this.pushToContent(true);
2141
+ if (_this.embla.scrollSnapList().length > 0) _this.embla.scrollTo(0);
2436
2142
  };
2437
- /** Repaints dot/arrow/a11y state from the media index. Never navigates. */
2438
2143
  this.syncSelectedState = function () {
2439
- var _a, _b, _c, _d, _e, _f;
2440
- var selected = (_b = (_a = _this.media) === null || _a === void 0 ? void 0 : _a.selectedScrollSnap()) !== null && _b !== void 0 ? _b : 0;
2441
- var snapCount = (_d = (_c = _this.media) === null || _c === void 0 ? void 0 : _c.scrollSnapList().length) !== null && _d !== void 0 ? _d : 0;
2144
+ var _a, _b;
2145
+ var selected = (_b = (_a = _this.embla) === null || _a === void 0 ? void 0 : _a.selectedScrollSnap()) !== null && _b !== void 0 ? _b : 0;
2442
2146
  _this.paginationBtns.forEach(function (button, index) {
2443
2147
  var active = index === selected;
2444
2148
  button.classList.toggle("lsg-carousel__dot--active", active);
2445
2149
  button.setAttribute("aria-current", active ? "true" : "false");
2446
2150
  });
2447
- // Cosmetic only. Looping plus the cyclic wrap above mean both arrows always
2448
- // act, so `disabled`/`aria-disabled` would misreport them to assistive tech.
2449
- // Themes use these classes to mute the leading/trailing half of the pill.
2450
- (_e = _this.els.prevBtn) === null || _e === void 0 ? void 0 : _e.classList.toggle("lsg-carousel__arrow--at-start", selected === 0);
2451
- (_f = _this.els.nextBtn) === null || _f === void 0 ? void 0 : _f.classList.toggle("lsg-carousel__arrow--at-end", snapCount > 0 && selected === snapCount - 1);
2452
- // The fade plugin only sets opacity and pointer-events, so without this every
2453
- // faded-out text block keeps its heading in the accessibility tree and its CTA
2454
- // in the tab order - N copies of the same landmark for a sighted-equivalent
2455
- // view of one.
2456
- _this.contentSlides.forEach(function (slide, index) {
2457
- var active = index === selected;
2458
- slide.toggleAttribute("inert", !active);
2459
- if (active) slide.removeAttribute("aria-hidden");else slide.setAttribute("aria-hidden", "true");
2460
- });
2461
2151
  };
2462
2152
  this.els = elements;
2463
- this.mediaViewport = viewport;
2464
2153
  this.paginationBtns = elements.paginationBtns ? Array.from(elements.paginationBtns) : [];
2465
- var mediaTrack = viewport.firstElementChild;
2466
- var mediaSlides = directChildren(mediaTrack, MEDIA_ITEM_SELECTOR);
2467
- // Embla resolves `container` as `root.children[0]` and `slides` as its
2468
- // element children. Passing both explicitly instead makes the instance
2469
- // immune to AEM injecting its own nodes (e.g. the edit-mode
2470
- // `div.new.section.aem-Grid-newComponent` drop target) into the track.
2471
- this.media = EmblaCarousel(viewport, {
2154
+ this.embla = EmblaCarousel(viewport, {
2472
2155
  align: "start",
2473
2156
  // Every authored media item owns a pagination dot. `trimSnaps` can remove
2474
2157
  // the final snap when two-up/peek layouts do not have enough overflow,
2475
2158
  // leaving the last authored item only partially reachable. Keep all snaps
2476
2159
  // so dot/item indexes stay 1:1 for 2, 3, 4, ... media items.
2477
- //
2478
- // This is ALSO load-bearing for the text/media sync: `containSnaps` is
2479
- // `!loop && !!containScroll`, so with this `false` the snap list is
2480
- // always `snapsAligned` - one snap per slide, whatever the slide's
2481
- // flex-basis. That is the only reason a 380px peek track and a 100%-wide
2482
- // crossfade track can share one index. Reverting this to `trimSnaps`
2483
- // drops trailing snaps on the media track alone and desyncs the tail.
2484
2160
  containScroll: false,
2485
- direction: (_b = options.direction) !== null && _b !== void 0 ? _b : "ltr",
2486
- loop: (_c = options.loop) !== null && _c !== void 0 ? _c : true,
2161
+ direction: (_a = options.direction) !== null && _a !== void 0 ? _a : "ltr",
2162
+ loop: (_b = options.loop) !== null && _b !== void 0 ? _b : true,
2487
2163
  skipSnaps: false,
2488
- slidesToScroll: 1,
2489
- container: mediaTrack !== null && mediaTrack !== void 0 ? mediaTrack : undefined,
2490
- slides: mediaSlides.length ? mediaSlides : undefined,
2491
- // All layouts collapse to the same mobile stack, which is never
2492
- // mirrored. Embla restores the selected index when a breakpoint
2493
- // re-activates, so the flip is not visible to the reader.
2494
- breakpoints: (_a = {}, _a[MOBILE_MEDIA_QUERY$1] = {
2495
- direction: "ltr"
2496
- }, _a)
2164
+ slidesToScroll: 1
2497
2165
  });
2498
- var contentViewport = (_d = elements.contentViewport) !== null && _d !== void 0 ? _d : null;
2499
- var contentTrack = contentViewport === null || contentViewport === void 0 ? void 0 : contentViewport.firstElementChild;
2500
- this.contentSlides = directChildren(contentTrack, CONTENT_ITEM_SELECTOR);
2501
- // Unequal counts are the one remaining way the two tracks can desync, and a
2502
- // text block silently paired with the wrong image is worse than no text
2503
- // animation at all. Degrade to media-only rather than risk it.
2504
- var countsMatch = mediaSlides.length > 0 && this.contentSlides.length === mediaSlides.length;
2505
- if (contentViewport && contentTrack && countsMatch) {
2506
- this.content = EmblaCarousel(contentViewport, {
2507
- align: "start",
2508
- // Must match the media track's snap arithmetic - see above.
2509
- containScroll: false,
2510
- // The text crossfades in place, so there is nothing to mirror.
2511
- direction: "ltr",
2512
- // Inert on a fade instance: the plugin calls `disableScroll()`, which
2513
- // deactivates the translate and every loop point. Set for config
2514
- // symmetry with the media track, not for behaviour.
2515
- loop: (_e = options.loop) !== null && _e !== void 0 ? _e : true,
2516
- skipSnaps: false,
2517
- slidesToScroll: 1,
2518
- // The reader drags the media, never the text. Without this the text
2519
- // track would fight the media track for the same pointer.
2520
- watchDrag: false,
2521
- container: contentTrack,
2522
- slides: this.contentSlides
2523
- }, [Fade()]);
2524
- }
2525
2166
  this.paginationHandlers = this.paginationBtns.map(function (_, index) {
2526
2167
  return function () {
2527
2168
  var _a;
2528
- (_a = _this.media) === null || _a === void 0 ? void 0 : _a.scrollTo(index);
2169
+ (_a = _this.embla) === null || _a === void 0 ? void 0 : _a.scrollTo(index);
2529
2170
  };
2530
2171
  });
2531
- (_f = this.els.prevBtn) === null || _f === void 0 ? void 0 : _f.addEventListener("click", this.scrollPrev);
2532
- (_g = this.els.nextBtn) === null || _g === void 0 ? void 0 : _g.addEventListener("click", this.scrollNext);
2172
+ (_c = this.els.prevBtn) === null || _c === void 0 ? void 0 : _c.addEventListener("click", this.scrollPrev);
2173
+ (_d = this.els.nextBtn) === null || _d === void 0 ? void 0 : _d.addEventListener("click", this.scrollNext);
2533
2174
  this.paginationBtns.forEach(function (button, index) {
2534
2175
  button.addEventListener("click", _this.paginationHandlers[index]);
2535
2176
  });
2536
- this.media.on("select", this.handleMediaSelect);
2537
- this.media.on("reInit", this.handleResync);
2538
- this.media.on("slidesChanged", this.handleResync);
2539
- (_h = this.content) === null || _h === void 0 ? void 0 : _h.on("select", this.handleContentSelect);
2540
- // Initial alignment is a hard cut - there is nothing to crossfade from.
2541
- this.handleResync();
2542
- }
2543
- /**
2544
- * Drive the text track from the media index.
2545
- *
2546
- * `jump` skips the crossfade (Embla sets duration 0, and the fade plugin then
2547
- * snaps opacity instantly). Use it only for re-measure events, never for
2548
- * reader-initiated navigation, or the text hard-cuts instead of fading.
2549
- */
2550
- LsgCarouselController.prototype.pushToContent = function (jump) {
2551
- if (jump === void 0) {
2552
- jump = false;
2553
- }
2554
- if (!this.media || !this.content || this.syncing) return;
2555
- var target = this.media.selectedScrollSnap();
2556
- if (this.content.selectedScrollSnap() === target) return;
2557
- this.syncing = true;
2558
- try {
2559
- this.content.scrollTo(target, jump);
2560
- } finally {
2561
- this.syncing = false;
2562
- }
2563
- };
2177
+ this.embla.on("select", this.syncSelectedState);
2178
+ this.embla.on("reInit", this.syncSelectedState);
2179
+ this.syncSelectedState();
2180
+ }
2564
2181
  Object.defineProperty(LsgCarouselController.prototype, "emblaApi", {
2565
2182
  get: function () {
2566
- return this.media;
2567
- },
2568
- enumerable: false,
2569
- configurable: true
2570
- });
2571
- Object.defineProperty(LsgCarouselController.prototype, "contentApi", {
2572
- /** Text track handle. Exposed for the index-parity checks in the test plan. */
2573
- get: function () {
2574
- return this.content;
2183
+ return this.embla;
2575
2184
  },
2576
2185
  enumerable: false,
2577
2186
  configurable: true
2578
2187
  });
2579
2188
  LsgCarouselController.prototype.destroy = function () {
2580
2189
  var _this = this;
2581
- var _a, _b, _c, _d;
2190
+ var _a, _b;
2582
2191
  (_a = this.els.prevBtn) === null || _a === void 0 ? void 0 : _a.removeEventListener("click", this.scrollPrev);
2583
2192
  (_b = this.els.nextBtn) === null || _b === void 0 ? void 0 : _b.removeEventListener("click", this.scrollNext);
2584
2193
  this.paginationBtns.forEach(function (button, index) {
2585
2194
  button.removeEventListener("click", _this.paginationHandlers[index]);
2586
2195
  });
2587
- // Content first: its plugin restores the inline opacity/transform it wrote,
2588
- // and it reads `internalEngine()` while doing so.
2589
- if (this.content) {
2590
- this.content.off("select", this.handleContentSelect);
2591
- this.content.destroy();
2592
- this.content = null;
2593
- }
2594
- if (this.media) {
2595
- this.media.off("select", this.handleMediaSelect);
2596
- this.media.off("reInit", this.handleResync);
2597
- this.media.off("slidesChanged", this.handleResync);
2598
- this.media.destroy();
2599
- this.media = null;
2196
+ if (this.embla) {
2197
+ this.embla.off("select", this.syncSelectedState);
2198
+ this.embla.off("reInit", this.syncSelectedState);
2199
+ this.embla.destroy();
2200
+ this.embla = null;
2600
2201
  }
2601
- // Embla restores what Embla wrote. Everything below is ours, and leaving it
2602
- // behind would make server-rendered markup re-initialise into a stale state.
2603
- this.paginationBtns.forEach(function (button) {
2604
- button.classList.remove("lsg-carousel__dot--active");
2605
- button.removeAttribute("aria-current");
2606
- });
2607
- (_c = this.els.prevBtn) === null || _c === void 0 ? void 0 : _c.classList.remove("lsg-carousel__arrow--at-start");
2608
- (_d = this.els.nextBtn) === null || _d === void 0 ? void 0 : _d.classList.remove("lsg-carousel__arrow--at-end");
2609
- this.contentSlides.forEach(function (slide) {
2610
- slide.removeAttribute("inert");
2611
- slide.removeAttribute("aria-hidden");
2612
- });
2613
2202
  };
2614
2203
  return LsgCarouselController;
2615
2204
  }();
@@ -2621,27 +2210,24 @@ var mediaTypeFor = function (item) {
2621
2210
  var directionForLayout = function (layout) {
2622
2211
  return layout === "media-left" ? "rtl" : "ltr";
2623
2212
  };
2624
- var hasText = function (item) {
2625
- return Boolean(item.preTitle || item.heading || item.body || item.cta);
2626
- };
2627
2213
  var LsgCarousel = function (_a) {
2628
- var _b = _a.items,
2629
- items = _b === void 0 ? [] : _b,
2630
- _c = _a.layout,
2631
- layout = _c === void 0 ? "media-right" : _c,
2632
- background = _a.background,
2633
- _d = _a.headingTag,
2634
- headingTag = _d === void 0 ? "h2" : _d,
2635
- _e = _a.ariaLabel,
2636
- ariaLabel = _e === void 0 ? "Media carousel" : _e,
2637
- _f = _a.className,
2638
- className = _f === void 0 ? "" : _f,
2639
- heading = _a.heading,
2214
+ var _b;
2215
+ var heading = _a.heading,
2640
2216
  preTitle = _a.preTitle,
2641
2217
  body = _a.body,
2642
- cta = _a.cta;
2218
+ cta = _a.cta,
2219
+ _c = _a.items,
2220
+ items = _c === void 0 ? [] : _c,
2221
+ _d = _a.layout,
2222
+ layout = _d === void 0 ? "media-right" : _d,
2223
+ _e = _a.headingTag,
2224
+ headingTag = _e === void 0 ? "h2" : _e,
2225
+ _f = _a.ariaLabel,
2226
+ ariaLabel = _f === void 0 ? "Media carousel" : _f,
2227
+ _g = _a.className,
2228
+ className = _g === void 0 ? "" : _g;
2229
+ var rootRef = useRef(null);
2643
2230
  var viewportRef = useRef(null);
2644
- var contentViewportRef = useRef(null);
2645
2231
  var prevBtnRef = useRef(null);
2646
2232
  var nextBtnRef = useRef(null);
2647
2233
  var dotsRef = useRef(null);
@@ -2649,29 +2235,13 @@ var LsgCarousel = function (_a) {
2649
2235
  var HeadingTag = headingTag;
2650
2236
  var isCarousel = items.length > 1;
2651
2237
  var carouselDirection = directionForLayout(layout);
2652
- // Legacy single-content-block callers passed the text alongside `items`. Fold
2653
- // it onto the first item so their carousel still renders its copy.
2654
- var resolvedItems = useMemo(function () {
2655
- var legacy = {
2656
- preTitle: preTitle,
2657
- heading: heading,
2658
- body: body,
2659
- cta: cta
2660
- };
2661
- var hasLegacy = Boolean(legacy.preTitle || legacy.heading || legacy.body || legacy.cta);
2662
- if (!hasLegacy || !items.length || hasText(items[0])) return items;
2663
- return items.map(function (item, index) {
2664
- return index === 0 ? __assign(__assign({}, legacy), item) : item;
2665
- });
2666
- }, [items, preTitle, heading, body, cta]);
2667
2238
  useEffect(function () {
2668
2239
  var _a, _b;
2669
2240
  if (!viewportRef.current || !isCarousel) return;
2670
2241
  controllerRef.current = new LsgCarouselController(viewportRef.current, {
2671
2242
  prevBtn: prevBtnRef.current,
2672
2243
  nextBtn: nextBtnRef.current,
2673
- paginationBtns: (_b = (_a = dotsRef.current) === null || _a === void 0 ? void 0 : _a.querySelectorAll("[data-lsg-carousel-dot]")) !== null && _b !== void 0 ? _b : [],
2674
- contentViewport: contentViewportRef.current
2244
+ paginationBtns: (_b = (_a = dotsRef.current) === null || _a === void 0 ? void 0 : _a.querySelectorAll("[data-lsg-carousel-dot]")) !== null && _b !== void 0 ? _b : []
2675
2245
  }, {
2676
2246
  loop: true,
2677
2247
  direction: carouselDirection
@@ -2681,72 +2251,55 @@ var LsgCarousel = function (_a) {
2681
2251
  (_a = controllerRef.current) === null || _a === void 0 ? void 0 : _a.destroy();
2682
2252
  controllerRef.current = null;
2683
2253
  };
2684
- }, [carouselDirection, isCarousel, resolvedItems.length]);
2685
- var rootClasses = ["lsg-carousel", "lsg-carousel--".concat(layout),
2686
- // In AEM this class arrives on the decoration div instead; the SCSS only
2687
- // sets inherited custom properties, so either position works.
2688
- background ? "lsg-carousel--bg-".concat(background) : "", className].filter(Boolean).join(" ");
2689
- var keyFor = function (item, index) {
2690
- var _a, _b, _c;
2691
- return (_a = item.id) !== null && _a !== void 0 ? _a : "".concat(mediaTypeFor(item), "-").concat((_c = (_b = item.imageUrl) !== null && _b !== void 0 ? _b : item.videoUrl) !== null && _c !== void 0 ? _c : index, "-").concat(index);
2692
- };
2254
+ }, [carouselDirection, isCarousel, items.length]);
2255
+ var rootClasses = ["lsg-carousel", "lsg-carousel--".concat(layout), className].filter(Boolean).join(" ");
2693
2256
  return /*#__PURE__*/React.createElement("section", {
2257
+ ref: rootRef,
2694
2258
  className: rootClasses,
2695
2259
  "data-lsg-is": "carousel",
2696
2260
  "data-lsg-carousel-layout": layout,
2697
2261
  "data-lsg-carousel-direction": carouselDirection,
2698
- "data-lsg-carousel-count": resolvedItems.length,
2262
+ "data-lsg-carousel-count": items.length,
2699
2263
  "aria-label": ariaLabel
2700
2264
  }, /*#__PURE__*/React.createElement("div", {
2701
2265
  className: "lsg-carousel__shell"
2702
2266
  }, /*#__PURE__*/React.createElement("div", {
2703
- className: "lsg-carousel__content",
2704
- ref: contentViewportRef,
2705
- "data-lsg-carousel-content-viewport": true
2706
- }, /*#__PURE__*/React.createElement("div", {
2707
- className: "lsg-carousel__content-track"
2708
- }, resolvedItems.map(function (item, index) {
2709
- var _a;
2710
- return /*#__PURE__*/React.createElement("div", {
2711
- key: keyFor(item, index),
2712
- className: "lsg-carousel__content-slide",
2713
- "data-lsg-carousel-content-item": true
2714
- }, item.preTitle && /*#__PURE__*/React.createElement("div", {
2715
- className: "lsg-carousel__pre-title"
2716
- }, /*#__PURE__*/React.createElement("span", {
2717
- className: "lsg-carousel__pre-title-marker",
2718
- "aria-hidden": "true"
2719
- }), /*#__PURE__*/React.createElement("span", null, item.preTitle)), item.heading && /*#__PURE__*/React.createElement(HeadingTag, {
2720
- className: "lsg-carousel__heading"
2721
- }, item.heading), item.body && /*#__PURE__*/React.createElement("p", {
2722
- className: "lsg-carousel__body"
2723
- }, item.body), item.cta && /*#__PURE__*/React.createElement("div", {
2724
- className: "lsg-carousel__actions"
2725
- }, /*#__PURE__*/React.createElement(LsgButton, {
2726
- className: "lsg-carousel__cta",
2727
- href: item.cta.href,
2728
- external: item.cta.external,
2729
- variant: (_a = item.cta.variant) !== null && _a !== void 0 ? _a : "primary",
2730
- onClick: item.cta.onClick
2731
- }, item.cta.label)));
2732
- }))), /*#__PURE__*/React.createElement("div", {
2267
+ className: "lsg-carousel__content"
2268
+ }, preTitle && /*#__PURE__*/React.createElement("div", {
2269
+ className: "lsg-carousel__pre-title"
2270
+ }, /*#__PURE__*/React.createElement("span", {
2271
+ className: "lsg-carousel__pre-title-marker",
2272
+ "aria-hidden": "true"
2273
+ }), /*#__PURE__*/React.createElement("span", null, preTitle)), /*#__PURE__*/React.createElement(HeadingTag, {
2274
+ className: "lsg-carousel__heading"
2275
+ }, heading), body && /*#__PURE__*/React.createElement("p", {
2276
+ className: "lsg-carousel__body"
2277
+ }, body), cta && /*#__PURE__*/React.createElement("div", {
2278
+ className: "lsg-carousel__actions"
2279
+ }, /*#__PURE__*/React.createElement(LsgButton, {
2280
+ className: "lsg-carousel__cta",
2281
+ href: cta.href,
2282
+ external: cta.external,
2283
+ variant: (_b = cta.variant) !== null && _b !== void 0 ? _b : "primary",
2284
+ onClick: cta.onClick
2285
+ }, cta.label))), /*#__PURE__*/React.createElement("div", {
2733
2286
  className: "lsg-carousel__media-column"
2734
2287
  }, /*#__PURE__*/React.createElement("div", {
2735
2288
  className: "lsg-carousel__viewport",
2736
2289
  ref: viewportRef,
2737
- dir: carouselDirection,
2738
- "data-lsg-carousel-media-viewport": true
2290
+ dir: carouselDirection
2739
2291
  }, /*#__PURE__*/React.createElement("div", {
2740
2292
  className: "lsg-carousel__track",
2741
2293
  role: "list"
2742
- }, resolvedItems.map(function (item, index) {
2743
- var _a, _b, _c, _d;
2294
+ }, items.map(function (item, index) {
2295
+ var _a, _b, _c, _d, _e, _f, _g;
2744
2296
  var type = mediaTypeFor(item);
2297
+ var key = (_a = item.id) !== null && _a !== void 0 ? _a : "".concat(type, "-").concat((_c = (_b = item.imageUrl) !== null && _b !== void 0 ? _b : item.videoUrl) !== null && _c !== void 0 ? _c : index, "-").concat(index);
2745
2298
  return /*#__PURE__*/React.createElement("article", {
2746
- key: keyFor(item, index),
2299
+ key: key,
2747
2300
  className: "lsg-carousel__slide",
2748
2301
  role: "listitem",
2749
- "aria-label": "Slide ".concat(index + 1, " of ").concat(resolvedItems.length),
2302
+ "aria-label": "Slide ".concat(index + 1, " of ").concat(items.length),
2750
2303
  "data-lsg-carousel-item": true
2751
2304
  }, /*#__PURE__*/React.createElement("div", {
2752
2305
  className: "lsg-carousel__media"
@@ -2754,10 +2307,10 @@ var LsgCarousel = function (_a) {
2754
2307
  videoUrl: item.videoUrl,
2755
2308
  imageUrl: item.videoPoster,
2756
2309
  imageAlt: item.imageAlt,
2757
- controls: (_a = item.videoControls) !== null && _a !== void 0 ? _a : true,
2758
- autoplay: (_b = item.videoAutoPlay) !== null && _b !== void 0 ? _b : false,
2759
- muted: (_c = item.videoMuted) !== null && _c !== void 0 ? _c : true,
2760
- loop: (_d = item.videoLoop) !== null && _d !== void 0 ? _d : false,
2310
+ controls: (_d = item.videoControls) !== null && _d !== void 0 ? _d : true,
2311
+ autoplay: (_e = item.videoAutoPlay) !== null && _e !== void 0 ? _e : false,
2312
+ muted: (_f = item.videoMuted) !== null && _f !== void 0 ? _f : true,
2313
+ loop: (_g = item.videoLoop) !== null && _g !== void 0 ? _g : false,
2761
2314
  displayMode: "content",
2762
2315
  showTags: false,
2763
2316
  className: "lsg-carousel__video-component"
@@ -2772,10 +2325,8 @@ var LsgCarousel = function (_a) {
2772
2325
  className: "lsg-carousel__media-label"
2773
2326
  }, item.label)));
2774
2327
  }))), isCarousel && /*#__PURE__*/React.createElement("div", {
2775
- className: "lsg-carousel__controls",
2328
+ className: "lsg-carousel__navigation",
2776
2329
  "aria-label": "Carousel navigation"
2777
- }, /*#__PURE__*/React.createElement("div", {
2778
- className: "lsg-carousel__nav"
2779
2330
  }, /*#__PURE__*/React.createElement("button", {
2780
2331
  ref: prevBtnRef,
2781
2332
  className: "lsg-carousel__arrow lsg-carousel__arrow--prev",
@@ -2785,19 +2336,10 @@ var LsgCarousel = function (_a) {
2785
2336
  }, /*#__PURE__*/React.createElement("span", {
2786
2337
  className: "lsg-carousel__arrow-icon",
2787
2338
  "aria-hidden": "true"
2788
- })), /*#__PURE__*/React.createElement("button", {
2789
- ref: nextBtnRef,
2790
- className: "lsg-carousel__arrow lsg-carousel__arrow--next",
2791
- type: "button",
2792
- "aria-label": "Next slide",
2793
- "data-lsg-carousel-next": true
2794
- }, /*#__PURE__*/React.createElement("span", {
2795
- className: "lsg-carousel__arrow-icon",
2796
- "aria-hidden": "true"
2797
- }))), /*#__PURE__*/React.createElement("div", {
2339
+ })), /*#__PURE__*/React.createElement("div", {
2798
2340
  className: "lsg-carousel__pagination",
2799
2341
  ref: dotsRef
2800
- }, resolvedItems.map(function (item, index) {
2342
+ }, items.map(function (item, index) {
2801
2343
  var _a;
2802
2344
  return /*#__PURE__*/React.createElement("button", {
2803
2345
  key: (_a = item.id) !== null && _a !== void 0 ? _a : "dot-".concat(index),
@@ -2807,6 +2349,15 @@ var LsgCarousel = function (_a) {
2807
2349
  "aria-current": index === 0 ? "true" : "false",
2808
2350
  "data-lsg-carousel-dot": true
2809
2351
  });
2352
+ })), /*#__PURE__*/React.createElement("button", {
2353
+ ref: nextBtnRef,
2354
+ className: "lsg-carousel__arrow lsg-carousel__arrow--next",
2355
+ type: "button",
2356
+ "aria-label": "Next slide",
2357
+ "data-lsg-carousel-next": true
2358
+ }, /*#__PURE__*/React.createElement("span", {
2359
+ className: "lsg-carousel__arrow-icon",
2360
+ "aria-hidden": "true"
2810
2361
  }))))));
2811
2362
  };
2812
2363
 
@@ -3830,12 +3381,12 @@ var PhoneIcon = function () {
3830
3381
  return /*#__PURE__*/React.createElement("svg", {
3831
3382
  width: "20",
3832
3383
  height: "20",
3833
- viewBox: "0 0 20 20",
3384
+ viewBox: "0 0 640 640",
3834
3385
  fill: "none",
3835
3386
  xmlns: "http://www.w3.org/2000/svg",
3836
3387
  "aria-hidden": "true"
3837
3388
  }, /*#__PURE__*/React.createElement("path", {
3838
- d: "M15.833 13.483c-.417-.416-1.25-.833-1.875-1.083-.625-.25-1.042-.167-1.458.208l-.834.833c-.208.209-.5.209-.708.042-.625-.5-1.833-1.583-2.583-2.333-.75-.75-1.75-1.875-2.25-2.583-.167-.208-.125-.5.083-.709l.834-.833c.416-.417.5-.833.25-1.458-.25-.625-.667-1.458-1.084-1.875C8.791 3.25 8.208 3 7.583 3c-.416 0-.833.167-1.125.458L5.625 4.292C4.5 5.417 4.708 7.125 5.333 8.833c.625 1.708 2 3.833 3.625 5.458 1.625 1.625 3.75 3 5.458 3.625 1.709.625 3.417.833 4.542-.292l.833-.833c.292-.292.458-.708.458-1.125 0-.625-.25-1.208-.416-1.583z",
3389
+ d: "M252.6 259L304.4 208L208.4 48L64.4 128L64.4 144C64.4 382.6 257.8 576 496.4 576L512.4 576L592.4 432L432.4 336L381.4 387.8C322.2 365 275.4 318.2 252.6 259zM440.1 396.6L527.9 449.3L484.3 527.8C281.9 521.5 118.9 358.6 112.6 156.1L191.1 112.5L243.8 200.3C226.8 217.1 211 232.6 196.5 246.9L207.8 276.3C235.5 348.2 292.3 404.9 364.1 432.6L393.5 443.9C407.8 429.4 423.3 413.6 440.1 396.6z",
3839
3390
  fill: "currentColor"
3840
3391
  }));
3841
3392
  };
@@ -3856,12 +3407,12 @@ var MailIcon = function () {
3856
3407
  return /*#__PURE__*/React.createElement("svg", {
3857
3408
  width: "24",
3858
3409
  height: "20",
3859
- viewBox: "0 0 24 20",
3410
+ viewBox: "0 0 640 640",
3860
3411
  fill: "none",
3861
3412
  xmlns: "http://www.w3.org/2000/svg",
3862
3413
  "aria-hidden": "true"
3863
3414
  }, /*#__PURE__*/React.createElement("path", {
3864
- d: "M20 0H4C2.9 0 2 .9 2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V2c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V2l8 5 8-5v2z",
3415
+ d: "M88 128L64 128L64 512L576 512L576 128L88 128zM528 192L528 196.1L320 353.9L112 196.1L112 176L528 176L528 192zM528 256.3L528 464L112 464L112 256.3L305.5 403.1L320 414.1L334.5 403.1L528 256.3z",
3865
3416
  fill: "currentColor"
3866
3417
  }));
3867
3418
  };
@@ -3907,12 +3458,12 @@ var SocialIcon = function (_a) {
3907
3458
  facebook: /*#__PURE__*/React.createElement("svg", {
3908
3459
  width: "20",
3909
3460
  height: "20",
3910
- viewBox: "0 0 24 24",
3461
+ viewBox: "0 0 640 640",
3911
3462
  fill: "currentColor",
3912
3463
  xmlns: "http://www.w3.org/2000/svg",
3913
3464
  "aria-hidden": "true"
3914
3465
  }, /*#__PURE__*/React.createElement("path", {
3915
- d: "M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"
3466
+ d: "M240 363.3L240 576L356 576L356 363.3L442.5 363.3L460.5 265.5L356 265.5L356 230.9C356 179.2 376.3 159.4 428.7 159.4C445 159.4 458.1 159.8 465.7 160.6L465.7 71.9C451.4 68 416.4 64 396.2 64C289.3 64 240 114.5 240 223.4L240 265.5L174 265.5L174 363.3L240 363.3z"
3916
3467
  })),
3917
3468
  twitter: /*#__PURE__*/React.createElement("svg", {
3918
3469
  width: "20",
@@ -3927,52 +3478,32 @@ var SocialIcon = function (_a) {
3927
3478
  linkedin: /*#__PURE__*/React.createElement("svg", {
3928
3479
  width: "20",
3929
3480
  height: "20",
3930
- viewBox: "0 0 24 24",
3481
+ viewBox: "0 0 640 640",
3931
3482
  fill: "currentColor",
3932
3483
  xmlns: "http://www.w3.org/2000/svg",
3933
3484
  "aria-hidden": "true"
3934
3485
  }, /*#__PURE__*/React.createElement("path", {
3935
- d: "M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6zM2 9h4v12H2z"
3936
- }), /*#__PURE__*/React.createElement("circle", {
3937
- cx: "4",
3938
- cy: "4",
3939
- r: "2"
3486
+ d: "M196.3 512L103.4 512L103.4 212.9L196.3 212.9L196.3 512zM149.8 172.1C120.1 172.1 96 147.5 96 117.8C96 103.5 101.7 89.9 111.8 79.8C121.9 69.7 135.6 64 149.8 64C164 64 177.7 69.7 187.8 79.8C197.9 89.9 203.6 103.6 203.6 117.8C203.6 147.5 179.5 172.1 149.8 172.1zM543.9 512L451.2 512L451.2 366.4C451.2 331.7 450.5 287.2 402.9 287.2C354.6 287.2 347.2 324.9 347.2 363.9L347.2 512L254.4 512L254.4 212.9L343.5 212.9L343.5 253.7L344.8 253.7C357.2 230.2 387.5 205.4 432.7 205.4C526.7 205.4 544 267.3 544 347.7L544 512L543.9 512z"
3940
3487
  })),
3941
3488
  youtube: /*#__PURE__*/React.createElement("svg", {
3942
3489
  width: "20",
3943
3490
  height: "20",
3944
- viewBox: "0 0 24 24",
3491
+ viewBox: "0 0 640 640",
3945
3492
  fill: "currentColor",
3946
3493
  xmlns: "http://www.w3.org/2000/svg",
3947
3494
  "aria-hidden": "true"
3948
3495
  }, /*#__PURE__*/React.createElement("path", {
3949
- d: "M22.54 6.42a2.78 2.78 0 0 0-1.95-1.96C18.88 4 12 4 12 4s-6.88 0-8.59.46a2.78 2.78 0 0 0-1.95 1.96A29 29 0 0 0 1 12a29 29 0 0 0 .46 5.58A2.78 2.78 0 0 0 3.41 19.6C5.12 20 12 20 12 20s6.88 0 8.59-.4a2.78 2.78 0 0 0 1.95-1.95A29 29 0 0 0 23 12a29 29 0 0 0-.46-5.58zM9.75 15.02V8.98L15.5 12l-5.75 3.02z"
3496
+ d: "M581.7 188.1C575.5 164.4 556.9 145.8 533.4 139.5C490.9 128 320.1 128 320.1 128C320.1 128 149.3 128 106.7 139.5C83.2 145.8 64.7 164.4 58.4 188.1C47 231 47 320.4 47 320.4C47 320.4 47 409.8 58.4 452.7C64.7 476.3 83.2 494.2 106.7 500.5C149.3 512 320.1 512 320.1 512C320.1 512 490.9 512 533.5 500.5C557 494.2 575.5 476.3 581.8 452.7C593.2 409.8 593.2 320.4 593.2 320.4C593.2 320.4 593.2 231 581.8 188.1zM264.2 401.6L264.2 239.2L406.9 320.4L264.2 401.6z"
3950
3497
  })),
3951
3498
  instagram: /*#__PURE__*/React.createElement("svg", {
3952
3499
  width: "20",
3953
3500
  height: "20",
3954
- viewBox: "0 0 24 24",
3955
- fill: "none",
3956
- stroke: "currentColor",
3957
- strokeWidth: "2",
3501
+ viewBox: "0 0 640 640",
3502
+ fill: "currentColor",
3958
3503
  xmlns: "http://www.w3.org/2000/svg",
3959
3504
  "aria-hidden": "true"
3960
- }, /*#__PURE__*/React.createElement("rect", {
3961
- x: "2",
3962
- y: "2",
3963
- width: "20",
3964
- height: "20",
3965
- rx: "5",
3966
- ry: "5"
3967
- }), /*#__PURE__*/React.createElement("circle", {
3968
- cx: "12",
3969
- cy: "12",
3970
- r: "4"
3971
- }), /*#__PURE__*/React.createElement("circle", {
3972
- cx: "17.5",
3973
- cy: "6.5",
3974
- r: "0.5",
3975
- fill: "currentColor"
3505
+ }, /*#__PURE__*/React.createElement("path", {
3506
+ d: "M320.3 205C256.8 204.8 205.2 256.2 205 319.7C204.8 383.2 256.2 434.8 319.7 435C383.2 435.2 434.8 383.8 435 320.3C435.2 256.8 383.8 205.2 320.3 205zM319.7 245.4C360.9 245.2 394.4 278.5 394.6 319.7C394.8 360.9 361.5 394.4 320.3 394.6C279.1 394.8 245.6 361.5 245.4 320.3C245.2 279.1 278.5 245.6 319.7 245.4zM413.1 200.3C413.1 185.5 425.1 173.5 439.9 173.5C454.7 173.5 466.7 185.5 466.7 200.3C466.7 215.1 454.7 227.1 439.9 227.1C425.1 227.1 413.1 215.1 413.1 200.3zM542.8 227.5C541.1 191.6 532.9 159.8 506.6 133.6C480.4 107.4 448.6 99.2 412.7 97.4C375.7 95.3 264.8 95.3 227.8 97.4C192 99.1 160.2 107.3 133.9 133.5C107.6 159.7 99.5 191.5 97.7 227.4C95.6 264.4 95.6 375.3 97.7 412.3C99.4 448.2 107.6 480 133.9 506.2C160.2 532.4 191.9 540.6 227.8 542.4C264.8 544.5 375.7 544.5 412.7 542.4C448.6 540.7 480.4 532.5 506.6 506.2C532.8 480 541 448.2 542.8 412.3C544.9 375.3 544.9 264.5 542.8 227.5zM495 452C487.2 471.6 472.1 486.7 452.4 494.6C422.9 506.3 352.9 503.6 320.3 503.6C287.7 503.6 217.6 506.2 188.2 494.6C168.6 486.8 153.5 471.7 145.6 452C133.9 422.5 136.6 352.5 136.6 319.9C136.6 287.3 134 217.2 145.6 187.8C153.4 168.2 168.5 153.1 188.2 145.2C217.7 133.5 287.7 136.2 320.3 136.2C352.9 136.2 423 133.6 452.4 145.2C472 153 487.1 168.1 495 187.8C506.7 217.3 504 287.3 504 319.9C504 352.5 506.7 422.6 495 452z"
3976
3507
  }))
3977
3508
  };
3978
3509
  return /*#__PURE__*/React.createElement(React.Fragment, null, (_b = icons[platform]) !== null && _b !== void 0 ? _b : null);
@@ -4032,9 +3563,9 @@ var LsgFooter = function (_a) {
4032
3563
  className: "lsg-footer lsg-footer--simple lsg-footer--simple-tworow".concat(className ? " ".concat(className) : "")
4033
3564
  }, /*#__PURE__*/React.createElement("div", {
4034
3565
  className: "lsg-footer__simple-top"
4035
- }, /*#__PURE__*/React.createElement("span", {
3566
+ }, /*#__PURE__*/React.createElement("div", {
4036
3567
  className: "lsg-footer__brand-line"
4037
- }, brandLine), navItems.length > 0 && /*#__PURE__*/React.createElement("nav", {
3568
+ }, /*#__PURE__*/React.createElement("span", null, brandLine)), navItems.length > 0 && /*#__PURE__*/React.createElement("nav", {
4038
3569
  className: "lsg-footer__simple-nav",
4039
3570
  "aria-label": "Footer navigation"
4040
3571
  }, navItems.map(function (item, i) {
@@ -4051,12 +3582,13 @@ var LsgFooter = function (_a) {
4051
3582
  className: "lsg-footer__simple-bottom"
4052
3583
  }, /*#__PURE__*/React.createElement("div", {
4053
3584
  className: "lsg-footer__simple-bottom-left"
4054
- }, cookieSetting && /*#__PURE__*/React.createElement("a", {
4055
- href: "#",
4056
- className: "lsg-footer__cookie-link"
4057
- }, cookieSetting), /*#__PURE__*/React.createElement("p", {
3585
+ }, /*#__PURE__*/React.createElement("p", {
4058
3586
  className: "lsg-footer__copyright"
4059
- }, copyrightText)), showAiBadge && /*#__PURE__*/React.createElement(AiBadge, null)));
3587
+ }, copyrightText),
3588
+ // This renders a One Trust cookie settings button in AEM. The class "lsg-footer__cookie-button" is used for styling and is unrelated to the functionality of the button itself.
3589
+ cookieSetting && /*#__PURE__*/React.createElement("button", {
3590
+ className: "lsg-footer__cookie-button"
3591
+ }, cookieSetting)), showAiBadge && /*#__PURE__*/React.createElement(AiBadge, null)));
4060
3592
  }
4061
3593
  return /*#__PURE__*/React.createElement("footer", {
4062
3594
  className: "lsg-footer lsg-footer--simple".concat(className ? " ".concat(className) : "")
@@ -4064,7 +3596,9 @@ var LsgFooter = function (_a) {
4064
3596
  className: "lsg-footer__simple-inner"
4065
3597
  }, /*#__PURE__*/React.createElement("p", {
4066
3598
  className: "lsg-footer__copyright"
4067
- }, copyrightText), navItems.length > 0 && /*#__PURE__*/React.createElement("nav", {
3599
+ }, copyrightText), /*#__PURE__*/React.createElement("div", {
3600
+ className: "lsg-footer__brand-line"
3601
+ }, /*#__PURE__*/React.createElement("span", null, brandLine)), navItems.length > 0 && /*#__PURE__*/React.createElement("nav", {
4068
3602
  className: "lsg-footer__simple-nav",
4069
3603
  "aria-label": "Footer navigation"
4070
3604
  }, navItems.map(function (item, i) {
@@ -4080,7 +3614,11 @@ var LsgFooter = function (_a) {
4080
3614
  href: item.href,
4081
3615
  className: "lsg-footer__simple-nav-item"
4082
3616
  }, item.label));
4083
- }))));
3617
+ })),
3618
+ // This renders a One Trust cookie settings button in AEM. The class "lsg-footer__cookie-button" is used for styling and is unrelated to the functionality of the button itself.
3619
+ cookieSetting && /*#__PURE__*/React.createElement("button", {
3620
+ className: "lsg-footer__cookie-button"
3621
+ }, cookieSetting)));
4084
3622
  }
4085
3623
  // ── Complex footer ─────────────────────────────────────────────────────────
4086
3624
  var is3col = complexColumns === "3col";
@@ -4090,18 +3628,28 @@ var LsgFooter = function (_a) {
4090
3628
  about: (_d = colHeadings === null || colHeadings === void 0 ? void 0 : colHeadings.about) !== null && _d !== void 0 ? _d : "About brand",
4091
3629
  contactAlt: (_e = colHeadings === null || colHeadings === void 0 ? void 0 : colHeadings.contactAlt) !== null && _e !== void 0 ? _e : "Contact"
4092
3630
  };
3631
+ var bottomTopBar = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
3632
+ className: "lsg-footer__bottom-top"
3633
+ }, /*#__PURE__*/React.createElement("div", {
3634
+ className: "lsg-footer__brand-line"
3635
+ }, /*#__PURE__*/React.createElement("span", null, "Discover how the Atlas Copco Group enables technology that transforms the future.")), /*#__PURE__*/React.createElement("div", {
3636
+ className: "lsg-footer__body-social"
3637
+ }, socialPosition === "body" && socialLinks && socialLinks.length > 0 && /*#__PURE__*/React.createElement(SocialIconsRow, {
3638
+ links: socialLinks
3639
+ }))));
4093
3640
  var bottomBar = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("hr", {
4094
3641
  className: "lsg-footer__bottom-divider"
4095
3642
  }), /*#__PURE__*/React.createElement("div", {
4096
3643
  className: "lsg-footer__bottom"
4097
3644
  }, /*#__PURE__*/React.createElement("div", {
4098
3645
  className: "lsg-footer__bottom-left"
4099
- }, cookieSetting && /*#__PURE__*/React.createElement("a", {
4100
- href: "#",
4101
- className: "lsg-footer__cookie-link"
4102
- }, cookieSetting), /*#__PURE__*/React.createElement("p", {
3646
+ }, /*#__PURE__*/React.createElement("p", {
4103
3647
  className: "lsg-footer__copyright"
4104
- }, copyrightText), is3col && showAiBadge && /*#__PURE__*/React.createElement(AiBadge, null)), !is3col && showAiBadge && /*#__PURE__*/React.createElement(AiBadge, null), socialPosition === "bottom-bar" && socialLinks && socialLinks.length > 0 && /*#__PURE__*/React.createElement(SocialIconsRow, {
3648
+ }, copyrightText),
3649
+ // This renders a One Trust cookie settings button in AEM. The class "lsg-footer__cookie-button" is used for styling and is unrelated to the functionality of the button itself.
3650
+ cookieSetting && /*#__PURE__*/React.createElement("button", {
3651
+ className: "lsg-footer__cookie-button"
3652
+ }, cookieSetting), is3col && showAiBadge && /*#__PURE__*/React.createElement(AiBadge, null)), !is3col && showAiBadge && /*#__PURE__*/React.createElement(AiBadge, null), socialPosition === "bottom-bar" && socialLinks && socialLinks.length > 0 && /*#__PURE__*/React.createElement(SocialIconsRow, {
4105
3653
  links: socialLinks
4106
3654
  })));
4107
3655
  if (is3col) {
@@ -4152,11 +3700,7 @@ var LsgFooter = function (_a) {
4152
3700
  }, link.label), /*#__PURE__*/React.createElement("hr", {
4153
3701
  className: "lsg-footer__divider"
4154
3702
  }));
4155
- })), socialPosition === "body" && socialLinks && socialLinks.length > 0 && /*#__PURE__*/React.createElement("div", {
4156
- className: "lsg-footer__body-social"
4157
- }, /*#__PURE__*/React.createElement(SocialIconsRow, {
4158
- links: socialLinks
4159
- }))))), bottomBar);
3703
+ }))))), bottomTopBar, bottomBar);
4160
3704
  }
4161
3705
  return /*#__PURE__*/React.createElement("footer", {
4162
3706
  className: "lsg-footer lsg-footer--complex".concat(className ? " ".concat(className) : "")
@@ -4203,13 +3747,230 @@ var LsgFooter = function (_a) {
4203
3747
  }, link.label), /*#__PURE__*/React.createElement("hr", {
4204
3748
  className: "lsg-footer__divider"
4205
3749
  }));
4206
- })), socialPosition === "body" && socialLinks && socialLinks.length > 0 && /*#__PURE__*/React.createElement("div", {
4207
- className: "lsg-footer__body-social"
4208
- }, /*#__PURE__*/React.createElement(SocialIconsRow, {
4209
- links: socialLinks
4210
- }))))), bottomBar);
3750
+ }))))), bottomTopBar, bottomBar);
4211
3751
  };
4212
3752
 
3753
+ function clampNumber(number, min, max) {
3754
+ return Math.min(Math.max(number, min), max);
3755
+ }
3756
+ function isNumber(value) {
3757
+ return typeof value === 'number' && !isNaN(value);
3758
+ }
3759
+ function Fade(userOptions = {}) {
3760
+ const fullOpacity = 1;
3761
+ const noOpacity = 0;
3762
+ const fadeFriction = 0.68;
3763
+ let emblaApi;
3764
+ let opacities = [];
3765
+ let fadeToNextDistance;
3766
+ let distanceFromPointerDown = 0;
3767
+ let fadeVelocity = 0;
3768
+ let progress = 0;
3769
+ let shouldFadePair = false;
3770
+ let defaultSettledBehaviour;
3771
+ let defaultProgressBehaviour;
3772
+ function init(emblaApiInstance) {
3773
+ emblaApi = emblaApiInstance;
3774
+ const selectedSnap = emblaApi.selectedScrollSnap();
3775
+ const {
3776
+ scrollBody,
3777
+ containerRect,
3778
+ axis
3779
+ } = emblaApi.internalEngine();
3780
+ const containerSize = axis.measureSize(containerRect);
3781
+ fadeToNextDistance = clampNumber(containerSize * 0.75, 200, 500);
3782
+ shouldFadePair = false;
3783
+ opacities = emblaApi.scrollSnapList().map((_, index) => index === selectedSnap ? fullOpacity : noOpacity);
3784
+ defaultSettledBehaviour = scrollBody.settled;
3785
+ defaultProgressBehaviour = emblaApi.scrollProgress;
3786
+ scrollBody.settled = settled;
3787
+ emblaApi.scrollProgress = scrollProgress;
3788
+ emblaApi.on('select', select).on('slideFocus', fadeToSelectedSnapInstantly).on('pointerDown', pointerDown).on('pointerUp', pointerUp);
3789
+ disableScroll();
3790
+ fadeToSelectedSnapInstantly();
3791
+ }
3792
+ function destroy() {
3793
+ const {
3794
+ scrollBody
3795
+ } = emblaApi.internalEngine();
3796
+ scrollBody.settled = defaultSettledBehaviour;
3797
+ emblaApi.scrollProgress = defaultProgressBehaviour;
3798
+ emblaApi.off('select', select).off('slideFocus', fadeToSelectedSnapInstantly).off('pointerDown', pointerDown).off('pointerUp', pointerUp);
3799
+ emblaApi.slideNodes().forEach(slideNode => {
3800
+ const slideStyle = slideNode.style;
3801
+ slideStyle.opacity = '';
3802
+ slideStyle.transform = '';
3803
+ slideStyle.pointerEvents = '';
3804
+ if (!slideNode.getAttribute('style')) slideNode.removeAttribute('style');
3805
+ });
3806
+ }
3807
+ function fadeToSelectedSnapInstantly() {
3808
+ const selectedSnap = emblaApi.selectedScrollSnap();
3809
+ setOpacities(selectedSnap, fullOpacity);
3810
+ }
3811
+ function pointerUp() {
3812
+ shouldFadePair = false;
3813
+ }
3814
+ function pointerDown() {
3815
+ shouldFadePair = false;
3816
+ distanceFromPointerDown = 0;
3817
+ fadeVelocity = 0;
3818
+ }
3819
+ function select() {
3820
+ const duration = emblaApi.internalEngine().scrollBody.duration();
3821
+ fadeVelocity = duration ? 0 : fullOpacity;
3822
+ shouldFadePair = true;
3823
+ if (!duration) fadeToSelectedSnapInstantly();
3824
+ }
3825
+ function getSlideTransform(position) {
3826
+ const {
3827
+ axis
3828
+ } = emblaApi.internalEngine();
3829
+ const translateAxis = axis.scroll.toUpperCase();
3830
+ return `translate${translateAxis}(${axis.direction(position)}px)`;
3831
+ }
3832
+ function disableScroll() {
3833
+ const {
3834
+ translate,
3835
+ slideLooper
3836
+ } = emblaApi.internalEngine();
3837
+ translate.clear();
3838
+ translate.toggleActive(false);
3839
+ slideLooper.loopPoints.forEach(({
3840
+ translate
3841
+ }) => {
3842
+ translate.clear();
3843
+ translate.toggleActive(false);
3844
+ });
3845
+ }
3846
+ function lockExcessiveScroll(fadeIndex) {
3847
+ const {
3848
+ scrollSnaps,
3849
+ location,
3850
+ target
3851
+ } = emblaApi.internalEngine();
3852
+ if (!isNumber(fadeIndex) || opacities[fadeIndex] < 0.5) return;
3853
+ location.set(scrollSnaps[fadeIndex]);
3854
+ target.set(location);
3855
+ }
3856
+ function setOpacities(fadeIndex, velocity) {
3857
+ const scrollSnaps = emblaApi.scrollSnapList();
3858
+ scrollSnaps.forEach((_, indexA) => {
3859
+ const absVelocity = Math.abs(velocity);
3860
+ const currentOpacity = opacities[indexA];
3861
+ const isFadeIndex = indexA === fadeIndex;
3862
+ const nextOpacity = isFadeIndex ? currentOpacity + absVelocity : currentOpacity - absVelocity;
3863
+ const clampedOpacity = clampNumber(nextOpacity, noOpacity, fullOpacity);
3864
+ opacities[indexA] = clampedOpacity;
3865
+ const fadePair = isFadeIndex && shouldFadePair;
3866
+ const indexB = emblaApi.previousScrollSnap();
3867
+ if (fadePair) opacities[indexB] = 1 - clampedOpacity;
3868
+ if (isFadeIndex) setProgress(fadeIndex, clampedOpacity);
3869
+ setOpacity(indexA);
3870
+ });
3871
+ }
3872
+ function setOpacity(index) {
3873
+ const slidesInSnap = emblaApi.internalEngine().slideRegistry[index];
3874
+ const {
3875
+ scrollSnaps,
3876
+ containerRect
3877
+ } = emblaApi.internalEngine();
3878
+ const opacity = opacities[index];
3879
+ slidesInSnap.forEach(slideIndex => {
3880
+ const slideStyle = emblaApi.slideNodes()[slideIndex].style;
3881
+ const roundedOpacity = parseFloat(opacity.toFixed(2));
3882
+ const hasOpacity = roundedOpacity > noOpacity;
3883
+ const position = hasOpacity ? scrollSnaps[index] : containerRect.width + 2;
3884
+ const transform = getSlideTransform(position);
3885
+ if (hasOpacity) slideStyle.transform = transform;
3886
+ slideStyle.opacity = roundedOpacity.toString();
3887
+ slideStyle.pointerEvents = opacity > 0.5 ? 'auto' : 'none';
3888
+ if (!hasOpacity) slideStyle.transform = transform;
3889
+ });
3890
+ }
3891
+ function setProgress(fadeIndex, opacity) {
3892
+ const {
3893
+ index,
3894
+ dragHandler,
3895
+ scrollSnaps
3896
+ } = emblaApi.internalEngine();
3897
+ const pointerDown = dragHandler.pointerDown();
3898
+ const snapFraction = 1 / (scrollSnaps.length - 1);
3899
+ let indexA = fadeIndex;
3900
+ let indexB = pointerDown ? emblaApi.selectedScrollSnap() : emblaApi.previousScrollSnap();
3901
+ if (pointerDown && indexA === indexB) {
3902
+ const reverseSign = Math.sign(distanceFromPointerDown) * -1;
3903
+ indexA = indexB;
3904
+ indexB = index.clone().set(indexB).add(reverseSign).get();
3905
+ }
3906
+ const currentPosition = indexB * snapFraction;
3907
+ const diffPosition = (indexA - indexB) * snapFraction;
3908
+ progress = currentPosition + diffPosition * opacity;
3909
+ }
3910
+ function getFadeIndex() {
3911
+ const {
3912
+ dragHandler,
3913
+ index,
3914
+ scrollBody
3915
+ } = emblaApi.internalEngine();
3916
+ const selectedSnap = emblaApi.selectedScrollSnap();
3917
+ if (!dragHandler.pointerDown()) return selectedSnap;
3918
+ const directionSign = Math.sign(scrollBody.velocity());
3919
+ const distanceSign = Math.sign(distanceFromPointerDown);
3920
+ const nextSnap = index.clone().set(selectedSnap).add(directionSign * -1).get();
3921
+ if (!directionSign || !distanceSign) return null;
3922
+ return distanceSign === directionSign ? nextSnap : selectedSnap;
3923
+ }
3924
+ function fade(emblaApi) {
3925
+ const {
3926
+ dragHandler,
3927
+ scrollBody
3928
+ } = emblaApi.internalEngine();
3929
+ const pointerDown = dragHandler.pointerDown();
3930
+ const velocity = scrollBody.velocity();
3931
+ const duration = scrollBody.duration();
3932
+ const fadeIndex = getFadeIndex();
3933
+ const noFadeIndex = !isNumber(fadeIndex);
3934
+ if (pointerDown) {
3935
+ if (!velocity) return;
3936
+ distanceFromPointerDown += velocity;
3937
+ fadeVelocity = Math.abs(velocity / fadeToNextDistance);
3938
+ lockExcessiveScroll(fadeIndex);
3939
+ }
3940
+ if (!pointerDown) {
3941
+ if (!duration || noFadeIndex) return;
3942
+ fadeVelocity += (fullOpacity - opacities[fadeIndex]) / duration;
3943
+ fadeVelocity *= fadeFriction;
3944
+ }
3945
+ if (noFadeIndex) return;
3946
+ setOpacities(fadeIndex, fadeVelocity);
3947
+ }
3948
+ function settled() {
3949
+ const {
3950
+ target,
3951
+ location
3952
+ } = emblaApi.internalEngine();
3953
+ const diffToTarget = target.get() - location.get();
3954
+ const notReachedTarget = Math.abs(diffToTarget) >= 1;
3955
+ const fadeIndex = getFadeIndex();
3956
+ const noFadeIndex = !isNumber(fadeIndex);
3957
+ fade(emblaApi);
3958
+ if (noFadeIndex || notReachedTarget) return false;
3959
+ return opacities[fadeIndex] > 0.999;
3960
+ }
3961
+ function scrollProgress() {
3962
+ return progress;
3963
+ }
3964
+ const self = {
3965
+ name: 'fade',
3966
+ options: userOptions,
3967
+ init,
3968
+ destroy
3969
+ };
3970
+ return self;
3971
+ }
3972
+ Fade.globalOptions = undefined;
3973
+
4213
3974
  var LsgHeroController = /** @class */function () {
4214
3975
  function LsgHeroController(viewport, elements, options) {
4215
3976
  if (elements === void 0) {
@@ -4772,6 +4533,43 @@ var LsgTabs = function (_a) {
4772
4533
  }));
4773
4534
  };
4774
4535
 
4536
+ /**
4537
+ * Storybook representation of the AEM LSG table markup.
4538
+ * It deliberately emits the same Style System class contract as AEM.
4539
+ */
4540
+ var LsgTable = function (_a) {
4541
+ var headers = _a.headers,
4542
+ rows = _a.rows,
4543
+ _b = _a.headerBackground,
4544
+ headerBackground = _b === void 0 ? "primary" : _b,
4545
+ _c = _a.accentColors,
4546
+ accentColors = _c === void 0 ? "black" : _c,
4547
+ _d = _a.noAlternatingRows,
4548
+ noAlternatingRows = _d === void 0 ? false : _d,
4549
+ caption = _a.caption,
4550
+ id = _a.id,
4551
+ className = _a.className;
4552
+ var wrapperClassName = ["table-focus", "background-color-".concat(headerBackground), "accent-color-".concat(accentColors), "no-alternating-rows-".concat(noAlternatingRows), className].filter(Boolean).join(" ");
4553
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
4554
+ id: id,
4555
+ className: wrapperClassName
4556
+ }, /*#__PURE__*/React.createElement("table", null, /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", null, headers.map(function (cell, index) {
4557
+ return /*#__PURE__*/React.createElement("td", {
4558
+ key: "header-".concat(index)
4559
+ }, cell);
4560
+ })), rows.map(function (row, rowIndex) {
4561
+ return /*#__PURE__*/React.createElement("tr", {
4562
+ key: "row-".concat(rowIndex)
4563
+ }, row.map(function (cell, cellIndex) {
4564
+ return /*#__PURE__*/React.createElement("td", {
4565
+ key: "cell-".concat(rowIndex, "-").concat(cellIndex)
4566
+ }, cell);
4567
+ }));
4568
+ })))), /*#__PURE__*/React.createElement("div", {
4569
+ className: "table-caption"
4570
+ }, caption));
4571
+ };
4572
+
4775
4573
  var LsgFormFieldText = function (_a) {
4776
4574
  var _b = _a.id,
4777
4575
  id = _b === void 0 ? "field-text" : _b,
@@ -5532,6 +5330,7 @@ var BASE_COMPONENTS = {
5532
5330
  LsgFooter: LsgFooter,
5533
5331
  LsgHero: LsgHero,
5534
5332
  LsgTabs: LsgTabs,
5333
+ LsgTable: LsgTable,
5535
5334
  LsgFormContainer: LsgFormContainer,
5536
5335
  LsgFormFieldText: LsgFormFieldText,
5537
5336
  LsgFormFieldEmail: LsgFormFieldEmail,
@@ -5580,7 +5379,8 @@ function createThemeComponents(themeName) {
5580
5379
  LsgFormFieldConsent: createThemeComponent(themeName, "form-field-consent", BASE_COMPONENTS.LsgFormFieldConsent),
5581
5380
  LsgFormPolicyNotice: createThemeComponent(themeName, "form-policy-notice", BASE_COMPONENTS.LsgFormPolicyNotice),
5582
5381
  LsgFormStep: createThemeComponent(themeName, "form-step", BASE_COMPONENTS.LsgFormStep),
5583
- LsgTabs: createThemeComponent(themeName, "tabs", BASE_COMPONENTS.LsgTabs)
5382
+ LsgTabs: createThemeComponent(themeName, "tabs", BASE_COMPONENTS.LsgTabs),
5383
+ LsgTable: createThemeComponent(themeName, "table", BASE_COMPONENTS.LsgTable)
5584
5384
  };
5585
5385
  }
5586
5386
 
@@ -5602,6 +5402,7 @@ var Theme1LsgButton = theme1Components.LsgButton,
5602
5402
  Theme1LsgFooter = theme1Components.LsgFooter,
5603
5403
  Theme1LsgHero = theme1Components.LsgHero;
5604
5404
  theme1Components.LsgTabs;
5405
+ var Theme1LsgTable = theme1Components.LsgTable;
5605
5406
  // Form components
5606
5407
  theme1Components.LsgFormContainer;
5607
5408
  theme1Components.LsgFormFieldText;
@@ -5630,7 +5431,8 @@ var Theme2LsgButton = theme2Components.LsgButton,
5630
5431
  Theme2LsgQuickLinks = theme2Components.LsgQuickLinks,
5631
5432
  Theme2LsgSocialMediaIcons = theme2Components.LsgSocialMediaIcons,
5632
5433
  Theme2LsgFooter = theme2Components.LsgFooter,
5633
- Theme2LsgHero = theme2Components.LsgHero;
5434
+ Theme2LsgHero = theme2Components.LsgHero,
5435
+ Theme2LsgTable = theme2Components.LsgTable;
5634
5436
  // Form components
5635
5437
  theme2Components.LsgFormContainer;
5636
5438
  theme2Components.LsgFormFieldText;
@@ -5658,7 +5460,8 @@ var Theme3LsgButton = theme3Components.LsgButton,
5658
5460
  Theme3LsgQuickLinks = theme3Components.LsgQuickLinks,
5659
5461
  Theme3LsgSocialMediaIcons = theme3Components.LsgSocialMediaIcons,
5660
5462
  Theme3LsgFooter = theme3Components.LsgFooter,
5661
- Theme3LsgHero = theme3Components.LsgHero;
5463
+ Theme3LsgHero = theme3Components.LsgHero,
5464
+ Theme3LsgTable = theme3Components.LsgTable;
5662
5465
  // Form components
5663
5466
  theme3Components.LsgFormContainer;
5664
5467
  theme3Components.LsgFormFieldText;
@@ -5670,5 +5473,5 @@ var Theme3LsgButton = theme3Components.LsgButton,
5670
5473
  theme3Components.LsgFormFieldConsent;
5671
5474
  theme3Components.LsgFormStep;
5672
5475
 
5673
- export { LsgBanner, LsgBreadcrumb, LsgButton, LsgCard, LsgCards, LsgCarousel, LsgCarouselController, LsgFooter, LsgHeader, LsgHero, LsgHeroCard, LsgHeroController, LsgLanguageSwitcher, LsgLogo, LsgNavigation, LsgQuickLinks, LsgSearchOverlay, LsgSearchTrigger, LsgSocialMediaIcons, Theme1LsgBanner, Theme1LsgBreadcrumb, Theme1LsgButton, Theme1LsgCard, Theme1LsgCards, Theme1LsgCarousel, Theme1LsgFooter, Theme1LsgHeader, Theme1LsgHero, Theme1LsgLanguageSwitcher, Theme1LsgLogo, Theme1LsgNavigation, Theme1LsgQuickLinks, Theme1LsgSearchOverlay, Theme1LsgSearchTrigger, Theme1LsgSocialMediaIcons, Theme2LsgBanner, Theme2LsgBreadcrumb, Theme2LsgButton, Theme2LsgCard, Theme2LsgCards, Theme2LsgCarousel, Theme2LsgFooter, Theme2LsgHeader, Theme2LsgHero, Theme2LsgLanguageSwitcher, Theme2LsgLogo, Theme2LsgNavigation, Theme2LsgQuickLinks, Theme2LsgSearchOverlay, Theme2LsgSearchTrigger, Theme2LsgSocialMediaIcons, Theme3LsgBanner, Theme3LsgBreadcrumb, Theme3LsgButton, Theme3LsgCard, Theme3LsgCards, Theme3LsgCarousel, Theme3LsgFooter, Theme3LsgHeader, Theme3LsgHero, Theme3LsgLanguageSwitcher, Theme3LsgLogo, Theme3LsgNavigation, Theme3LsgQuickLinks, Theme3LsgSearchOverlay, Theme3LsgSearchTrigger, Theme3LsgSocialMediaIcons, getTelValue, initTelPickers, theme1Components, theme2Components, theme3Components };
5476
+ export { LsgBanner, LsgBreadcrumb, LsgButton, LsgCard, LsgCards, LsgCarousel, LsgCarouselController, LsgFooter, LsgHeader, LsgHero, LsgHeroCard, LsgHeroController, LsgLanguageSwitcher, LsgLogo, LsgNavigation, LsgQuickLinks, LsgSearchOverlay, LsgSearchTrigger, LsgSocialMediaIcons, LsgTable, Theme1LsgBanner, Theme1LsgBreadcrumb, Theme1LsgButton, Theme1LsgCard, Theme1LsgCards, Theme1LsgCarousel, Theme1LsgFooter, Theme1LsgHeader, Theme1LsgHero, Theme1LsgLanguageSwitcher, Theme1LsgLogo, Theme1LsgNavigation, Theme1LsgQuickLinks, Theme1LsgSearchOverlay, Theme1LsgSearchTrigger, Theme1LsgSocialMediaIcons, Theme1LsgTable, Theme2LsgBanner, Theme2LsgBreadcrumb, Theme2LsgButton, Theme2LsgCard, Theme2LsgCards, Theme2LsgCarousel, Theme2LsgFooter, Theme2LsgHeader, Theme2LsgHero, Theme2LsgLanguageSwitcher, Theme2LsgLogo, Theme2LsgNavigation, Theme2LsgQuickLinks, Theme2LsgSearchOverlay, Theme2LsgSearchTrigger, Theme2LsgSocialMediaIcons, Theme2LsgTable, Theme3LsgBanner, Theme3LsgBreadcrumb, Theme3LsgButton, Theme3LsgCard, Theme3LsgCards, Theme3LsgCarousel, Theme3LsgFooter, Theme3LsgHeader, Theme3LsgHero, Theme3LsgLanguageSwitcher, Theme3LsgLogo, Theme3LsgNavigation, Theme3LsgQuickLinks, Theme3LsgSearchOverlay, Theme3LsgSearchTrigger, Theme3LsgSocialMediaIcons, Theme3LsgTable, getTelValue, initTelPickers, theme1Components, theme2Components, theme3Components };
5674
5477
  //# sourceMappingURL=index.esm.js.map