@asante-org/atlascopco-vt-litesitegenerator 3.8.8 → 3.8.10

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 +571 -123
  2. package/dist/index.esm.js.map +1 -1
  3. package/dist/index.esm.scss +505 -34
  4. package/dist/index.js +583 -121
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.scss +505 -34
  7. package/dist/src/components/lsg/LsgBanner/LsgBanner.d.ts +23 -1
  8. package/dist/src/components/lsg/LsgBanner/LsgBanner.stories.d.ts +0 -2
  9. package/dist/src/components/lsg/LsgBanner/index.d.ts +1 -1
  10. package/dist/src/components/lsg/LsgBlogOverview/LsgBlogOverview.d.ts +27 -0
  11. package/dist/src/components/lsg/LsgBlogOverview/LsgBlogOverview.stories.d.ts +11 -0
  12. package/dist/src/components/lsg/LsgBlogOverview/index.d.ts +4 -0
  13. package/dist/src/components/lsg/LsgBlogOverview/mapAemGeneratedListJson.d.ts +40 -0
  14. package/dist/src/components/lsg/LsgGeneratedList/LsgGeneratedList.d.ts +31 -0
  15. package/dist/src/components/lsg/LsgGeneratedList/LsgGeneratedList.stories.d.ts +13 -0
  16. package/dist/src/components/lsg/LsgGeneratedList/index.d.ts +2 -0
  17. package/dist/src/components/lsg/LsgImage/LsgImage.stories.d.ts +0 -1
  18. package/dist/src/components/lsg/LsgPagination/LsgPagination.d.ts +35 -0
  19. package/dist/src/components/lsg/LsgPagination/LsgPagination.stories.d.ts +13 -0
  20. package/dist/src/components/lsg/LsgPagination/index.d.ts +2 -0
  21. package/dist/src/components/lsg/index.d.ts +7 -1
  22. package/dist/src/index.d.ts +5 -5
  23. package/dist/src/themes/createThemeComponents.d.ts +3 -0
  24. package/dist/src/themes/theme-1/components.d.ts +4 -1
  25. package/dist/src/themes/theme-2/components.d.ts +4 -1
  26. package/dist/src/themes/theme-3/components.d.ts +4 -1
  27. package/dist/themes/theme-1.css +813 -232
  28. package/dist/themes/theme-1.css.map +1 -1
  29. package/dist/themes/theme-2.css +1166 -32
  30. package/dist/themes/theme-2.css.map +1 -1
  31. package/dist/themes/theme-3.css +990 -65
  32. package/dist/themes/theme-3.css.map +1 -1
  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, useEffect, useId, useCallback, useMemo, forwardRef, useImperativeHandle } from 'react';
1
+ import React, { useId, useState, useRef, useEffect, useCallback, useMemo, forwardRef, useImperativeHandle } from 'react';
2
2
 
3
3
  function _extends() {
4
4
  return _extends = Object.assign ? Object.assign.bind() : function (n) {
@@ -46,12 +46,87 @@ var LsgButton = function (_a) {
46
46
  }, children);
47
47
  };
48
48
 
49
- function bannerClassName(layout, mobileMediaPosition, background, className) {
50
- return ["lsg-banner", "lsg-banner--".concat(layout), "lsg-banner--mobile-media-".concat(mobileMediaPosition),
51
- // In AEM this class arrives on the decoration div instead; the SCSS only
52
- // sets inherited custom properties, so either position works.
53
- background ? "lsg-banner--bg-".concat(background) : "", className].filter(Boolean).join(" ");
49
+ // ─────────────────────────────────────────────────────────────────────────────
50
+ // AEM markup helpers
51
+ //
52
+ // The banner's content region is a parsys in AEM, filled by _cq_template with
53
+ // Group > Title / Text / Button components. These helpers reproduce the HTML
54
+ // those components (and their Sling decoration divs) emit on publish, so the
55
+ // theme CSS written here applies to AEM unchanged. Reference page:
56
+ // /content/vtba/varovac/en (wcmmode=disabled).
57
+ // ─────────────────────────────────────────────────────────────────────────────
58
+ var GRID_COLUMN = "aem-GridColumn aem-GridColumn--default--12";
59
+ /** vtba/components/lsg/structure/group — a responsivegrid with two wrappers. */
60
+ var AemGroup = function (_a) {
61
+ var styleClasses = _a.styleClasses,
62
+ children = _a.children;
63
+ return /*#__PURE__*/React.createElement("div", {
64
+ className: ["lsg-group", styleClasses].filter(Boolean).join(" ")
65
+ }, /*#__PURE__*/React.createElement("div", {
66
+ className: "layout-container-color-wrapper"
67
+ }, /*#__PURE__*/React.createElement("div", {
68
+ className: "layout-container-spacing-wrapper aem-Grid aem-Grid--12 aem-Grid--default--12 "
69
+ }, children)));
70
+ };
71
+ /**
72
+ * AEM decoration class for a grid column: the component's own class, then either
73
+ * its authored style classes or — when none are set — the component name.
74
+ */
75
+ function columnClassName(componentClass, name, styleClass) {
76
+ return "".concat(componentClass, " ").concat(styleClass !== null && styleClass !== void 0 ? styleClass : name, " ").concat(GRID_COLUMN);
54
77
  }
78
+ /** vtba/components/lsg/content/title — type "p" is the pre-title. */
79
+ var AemTitle = function (_a) {
80
+ var Tag = _a.tag,
81
+ colour = _a.colour,
82
+ children = _a.children;
83
+ return /*#__PURE__*/React.createElement("div", {
84
+ className: columnClassName("cmp-lsg-title", "title", colour && "cmp-title__colour-".concat(colour))
85
+ }, /*#__PURE__*/React.createElement(Tag, {
86
+ className: "cmp-title__element".concat(Tag === "p" ? " cmp-title__element--pretitle" : "")
87
+ }, children));
88
+ };
89
+ /** vtba/components/lsg/content/text — core text v2 inside the decoration div. */
90
+ var AemText = function (_a) {
91
+ var id = _a.id,
92
+ colour = _a.colour,
93
+ children = _a.children;
94
+ return /*#__PURE__*/React.createElement("div", {
95
+ className: columnClassName("cmp-lsg-text", "text", colour && "cmp-text__colour-".concat(colour))
96
+ }, /*#__PURE__*/React.createElement("div", {
97
+ id: id,
98
+ className: "cmp-text"
99
+ }, /*#__PURE__*/React.createElement("p", null, children)));
100
+ };
101
+ /** vtba/components/lsg/content/button — the variant is a style class on the decoration div. */
102
+ var AemButton = function (_a) {
103
+ var _b, _c;
104
+ var cta = _a.cta;
105
+ return /*#__PURE__*/React.createElement("div", {
106
+ className: "cmp-lsg-button button--".concat((_b = cta.variant) !== null && _b !== void 0 ? _b : "primary", " ").concat(GRID_COLUMN)
107
+ }, /*#__PURE__*/React.createElement("div", {
108
+ className: "lsg-button-container"
109
+ }, /*#__PURE__*/React.createElement("a", {
110
+ className: "lsg-button",
111
+ href: (_c = cta.href) !== null && _c !== void 0 ? _c : "#",
112
+ target: cta.external ? "_blank" : undefined,
113
+ rel: cta.external ? "noopener noreferrer" : undefined,
114
+ onClick: cta.onClick
115
+ }, /*#__PURE__*/React.createElement("span", {
116
+ className: "lsg-button__text"
117
+ }, cta.label))));
118
+ };
119
+ /** Same extension mapping as BannerModel.getVideoMimeType. */
120
+ function videoMimeType(url) {
121
+ var path = url.split(/[?#]/)[0].toLowerCase();
122
+ if (path.endsWith(".mp4")) return "video/mp4";
123
+ if (path.endsWith(".webm")) return "video/webm";
124
+ if (path.endsWith(".ogg") || path.endsWith(".ogv")) return "video/ogg";
125
+ return undefined;
126
+ }
127
+ // ─────────────────────────────────────────────────────────────────────────────
128
+ // LsgBanner
129
+ // ─────────────────────────────────────────────────────────────────────────────
55
130
  var LsgBanner = function (_a) {
56
131
  var heading = _a.heading,
57
132
  preTitle = _a.preTitle,
@@ -60,10 +135,15 @@ var LsgBanner = function (_a) {
60
135
  copy = _a.copy,
61
136
  ctas = _a.ctas,
62
137
  cta = _a.cta,
138
+ preTitleColour = _a.preTitleColour,
139
+ headingColour = _a.headingColour,
140
+ bodyColour = _a.bodyColour,
63
141
  mediaType = _a.mediaType,
64
142
  imageUrl = _a.imageUrl,
65
143
  _b = _a.imageAlt,
66
144
  imageAlt = _b === void 0 ? "" : _b,
145
+ mediaHref = _a.mediaHref,
146
+ mediaTarget = _a.mediaTarget,
67
147
  videoUrl = _a.videoUrl,
68
148
  videoPoster = _a.videoPoster,
69
149
  _c = _a.videoControls,
@@ -79,65 +159,78 @@ var LsgBanner = function (_a) {
79
159
  _h = _a.mobileMediaPosition,
80
160
  mobileMediaPosition = _h === void 0 ? "top" : _h,
81
161
  background = _a.background,
162
+ accent = _a.accent,
82
163
  _j = _a.headingTag,
83
- headingTag = _j === void 0 ? "h1" : _j,
164
+ headingTag = _j === void 0 ? "h2" : _j,
84
165
  className = _a.className;
166
+ var textId = "text-".concat(useId().replace(/[^a-zA-Z0-9]/g, ""));
85
167
  var resolvedPreTitle = preTitle !== null && preTitle !== void 0 ? preTitle : eyebrow;
86
168
  var resolvedBody = body !== null && body !== void 0 ? body : copy;
87
169
  var actions = ((ctas === null || ctas === void 0 ? void 0 : ctas.length) ? ctas : cta ? [cta] : []).slice(0, 3);
88
170
  var resolvedMediaType = mediaType !== null && mediaType !== void 0 ? mediaType : videoUrl ? "video" : "image";
89
171
  var hasMedia = layout !== "text-only" && (resolvedMediaType === "video" ? Boolean(videoUrl) : Boolean(imageUrl));
90
- var HeadingTag = headingTag;
91
- return /*#__PURE__*/React.createElement("section", {
92
- className: bannerClassName(layout, mobileMediaPosition, background, className),
93
- "data-lsg-is": "banner",
94
- "data-lsg-banner-layout": layout,
95
- "data-lsg-banner-mobile-media": mobileMediaPosition,
96
- "data-lsg-banner-media": hasMedia ? resolvedMediaType : "none"
97
- }, /*#__PURE__*/React.createElement("div", {
98
- className: "lsg-banner__shell"
99
- }, hasMedia && /*#__PURE__*/React.createElement("div", {
100
- className: "lsg-banner__media"
101
- }, resolvedMediaType === "video" && videoUrl ? /*#__PURE__*/React.createElement("video", {
102
- className: "lsg-banner__video",
103
- src: videoUrl,
104
- poster: videoPoster,
105
- controls: videoControls,
106
- autoPlay: videoAutoPlay,
107
- muted: videoMuted,
108
- loop: videoLoop,
109
- playsInline: true,
110
- "aria-label": imageAlt || heading
111
- }) : imageUrl ? /*#__PURE__*/React.createElement("img", {
112
- className: "lsg-banner__image",
172
+ var picture = /*#__PURE__*/React.createElement("picture", {
173
+ className: "lsg-banner__image"
174
+ }, /*#__PURE__*/React.createElement("img", {
113
175
  src: imageUrl,
114
- alt: imageAlt
115
- }) : null), /*#__PURE__*/React.createElement("div", {
116
- className: "lsg-banner__content"
117
- }, resolvedPreTitle && /*#__PURE__*/React.createElement("div", {
118
- className: "lsg-banner__pre-title"
119
- }, /*#__PURE__*/React.createElement("span", {
120
- className: "lsg-banner__pre-title-marker",
121
- "aria-hidden": "true"
122
- }), /*#__PURE__*/React.createElement("span", {
123
- className: "lsg-banner__pre-title-text"
124
- }, resolvedPreTitle)), /*#__PURE__*/React.createElement(HeadingTag, {
125
- className: "lsg-banner__heading"
126
- }, heading), resolvedBody && /*#__PURE__*/React.createElement("div", {
127
- className: "lsg-banner__body"
128
- }, /*#__PURE__*/React.createElement("p", null, resolvedBody)), actions.length > 0 && /*#__PURE__*/React.createElement("div", {
129
- className: "lsg-banner__actions"
130
- }, actions.map(function (action, index) {
131
- var _a, _b;
132
- return /*#__PURE__*/React.createElement(LsgButton, {
133
- key: "".concat(action.label, "-").concat((_a = action.href) !== null && _a !== void 0 ? _a : "button", "-").concat(index),
134
- href: action.href,
135
- external: action.external,
136
- variant: (_b = action.variant) !== null && _b !== void 0 ? _b : "primary",
137
- onClick: action.onClick,
138
- className: "lsg-banner__cta"
139
- }, action.label);
140
- })))));
176
+ alt: imageAlt,
177
+ loading: "lazy"
178
+ }));
179
+ return (
180
+ /*#__PURE__*/
181
+ // The Sling decoration div. Background / accent style-system classes land
182
+ // here in AEM, not on the section.
183
+ React.createElement("div", {
184
+ className: ["banner teaser", background && "lsg-banner--bg-".concat(background), accent && "lsg-banner--accent-".concat(accent), GRID_COLUMN, className].filter(Boolean).join(" ")
185
+ }, /*#__PURE__*/React.createElement("section", {
186
+ className: "lsg-banner lsg-banner--".concat(layout, " lsg-banner--mobile-media-").concat(mobileMediaPosition),
187
+ "data-lsg-is": "banner",
188
+ "data-lsg-banner-layout": layout,
189
+ "data-lsg-banner-mobile-media": mobileMediaPosition,
190
+ "data-lsg-banner-media": hasMedia ? resolvedMediaType : "none"
191
+ }, /*#__PURE__*/React.createElement("div", {
192
+ className: "lsg-banner__shell"
193
+ }, hasMedia && /*#__PURE__*/React.createElement("div", {
194
+ className: "lsg-banner__media"
195
+ }, resolvedMediaType === "video" && videoUrl ? /*#__PURE__*/React.createElement("video", {
196
+ className: "lsg-banner__video",
197
+ poster: videoPoster,
198
+ autoPlay: videoAutoPlay,
199
+ muted: videoMuted,
200
+ loop: videoLoop,
201
+ controls: videoControls,
202
+ playsInline: true,
203
+ "aria-label": imageAlt
204
+ }, /*#__PURE__*/React.createElement("source", {
205
+ src: videoUrl,
206
+ type: videoMimeType(videoUrl)
207
+ })) : mediaHref ? /*#__PURE__*/React.createElement("a", {
208
+ className: "lsg-banner__media-link",
209
+ href: mediaHref,
210
+ target: mediaTarget
211
+ }, picture) : picture), /*#__PURE__*/React.createElement("div", {
212
+ className: "lsg-banner__content"
213
+ }, /*#__PURE__*/React.createElement(AemGroup, {
214
+ styleClasses: "lsg-group-display--flex lsg-group-direction--column lsg-group-gap--16"
215
+ }, resolvedPreTitle && /*#__PURE__*/React.createElement(AemTitle, {
216
+ tag: "p",
217
+ colour: preTitleColour
218
+ }, resolvedPreTitle), /*#__PURE__*/React.createElement(AemTitle, {
219
+ tag: headingTag,
220
+ colour: headingColour
221
+ }, heading)), resolvedBody && /*#__PURE__*/React.createElement(AemGroup, null, /*#__PURE__*/React.createElement(AemText, {
222
+ id: textId,
223
+ colour: bodyColour
224
+ }, resolvedBody)), actions.length > 0 && /*#__PURE__*/React.createElement(AemGroup, {
225
+ styleClasses: "lsg-group-display--flex lsg-group-gap--16"
226
+ }, actions.map(function (action, index) {
227
+ var _a;
228
+ return /*#__PURE__*/React.createElement(AemButton, {
229
+ key: "".concat(action.label, "-").concat((_a = action.href) !== null && _a !== void 0 ? _a : "button", "-").concat(index),
230
+ cta: action
231
+ });
232
+ }))))))
233
+ );
141
234
  };
142
235
 
143
236
  function isSafeUrl$1(url) {
@@ -2476,6 +2569,357 @@ var LsgCards = function (_a) {
2476
2569
  }));
2477
2570
  };
2478
2571
 
2572
+ /**
2573
+ * Mirrors AEM `vtba/components/content/generated-list` in "LSG Card" mode,
2574
+ * including its `cq:htmlTag` wrapper. Card styling comes from LsgCard.
2575
+ */
2576
+ var LsgGeneratedList = function (_a) {
2577
+ var items = _a.items,
2578
+ _b = _a.cardVariant,
2579
+ cardVariant = _b === void 0 ? "withImage" : _b,
2580
+ _c = _a.maxColumns,
2581
+ maxColumns = _c === void 0 ? 3 : _c,
2582
+ className = _a.className;
2583
+ var wrapperClassName = ["c-row--divider", "generated-list", className].filter(Boolean).join(" ");
2584
+ return /*#__PURE__*/React.createElement("div", {
2585
+ className: wrapperClassName
2586
+ }, /*#__PURE__*/React.createElement("div", {
2587
+ className: "generated-list-container"
2588
+ }, /*#__PURE__*/React.createElement("ul", {
2589
+ className: "generated-list-container__ul lsg-cards lsg-cards--cols-".concat(maxColumns),
2590
+ "data-total-items": items.length,
2591
+ "data-item-per-row": maxColumns,
2592
+ "data-columns": maxColumns
2593
+ }, items.map(function (item, index) {
2594
+ var _a;
2595
+ return /*#__PURE__*/React.createElement("li", {
2596
+ className: "lsg-cards__item",
2597
+ key: "".concat(item.href, "-").concat(index)
2598
+ }, /*#__PURE__*/React.createElement(LsgCard, _extends({}, item, {
2599
+ imageAlt: (_a = item.imageAlt) !== null && _a !== void 0 ? _a : item.title,
2600
+ variant: cardVariant
2601
+ })));
2602
+ }))));
2603
+ };
2604
+
2605
+ /******************************************************************************
2606
+ Copyright (c) Microsoft Corporation.
2607
+
2608
+ Permission to use, copy, modify, and/or distribute this software for any
2609
+ purpose with or without fee is hereby granted.
2610
+
2611
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
2612
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
2613
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
2614
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
2615
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
2616
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2617
+ PERFORMANCE OF THIS SOFTWARE.
2618
+ ***************************************************************************** */
2619
+ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
2620
+
2621
+ var __assign = function () {
2622
+ __assign = Object.assign || function __assign(t) {
2623
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
2624
+ s = arguments[i];
2625
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
2626
+ }
2627
+ return t;
2628
+ };
2629
+ return __assign.apply(this, arguments);
2630
+ };
2631
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
2632
+ var e = new Error(message);
2633
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
2634
+ };
2635
+
2636
+ var DEFAULT_LABELS = {
2637
+ nav: "Pagination",
2638
+ first: "First",
2639
+ previous: "Previous",
2640
+ next: "Next",
2641
+ last: "Last",
2642
+ page: function (page) {
2643
+ return "Page ".concat(page);
2644
+ }
2645
+ };
2646
+ /**
2647
+ * Page numbers to show: always the first and last page plus the current page
2648
+ * ± `siblingCount`. A gap of a single page shows that page rather than "…".
2649
+ * Page 2 of 6 → [1, 2, 3, "ellipsis", 6].
2650
+ */
2651
+ function getLsgPaginationRange(currentPage, totalPages, siblingCount) {
2652
+ if (siblingCount === void 0) {
2653
+ siblingCount = 1;
2654
+ }
2655
+ if (totalPages < 1) {
2656
+ return [];
2657
+ }
2658
+ var current = Math.min(Math.max(currentPage, 1), totalPages);
2659
+ var pages = new Set([1, totalPages]);
2660
+ for (var page = current - siblingCount; page <= current + siblingCount; page += 1) {
2661
+ if (page >= 1 && page <= totalPages) {
2662
+ pages.add(page);
2663
+ }
2664
+ }
2665
+ var sorted = Array.from(pages).sort(function (a, b) {
2666
+ return a - b;
2667
+ });
2668
+ var range = [];
2669
+ sorted.forEach(function (page, index) {
2670
+ var previous = sorted[index - 1];
2671
+ if (previous !== undefined) {
2672
+ if (page - previous === 2) {
2673
+ range.push(previous + 1);
2674
+ } else if (page - previous > 2) {
2675
+ range.push("ellipsis");
2676
+ }
2677
+ }
2678
+ range.push(page);
2679
+ });
2680
+ return range;
2681
+ }
2682
+ // Left-pointing glyphs on a 24×24 grid; next/last mirror them. Each control
2683
+ // carries every glyph its themes need and theme CSS shows one: theme 1 uses
2684
+ // the chevrons (‹ «), theme 2 the bar (|<), theme 3 the arrow (←).
2685
+ var GLYPHS = {
2686
+ previous: {
2687
+ chevron: "M14.5 6.5 9 12l5.5 5.5",
2688
+ arrow: "M19 12H5M11 6l-6 6 6 6"
2689
+ },
2690
+ first: {
2691
+ "chevron-double": "M12 6.5 6.5 12l5.5 5.5M18 6.5 12.5 12l5.5 5.5",
2692
+ bar: "M7 6.5v11M16.5 6.5 11 12l5.5 5.5"
2693
+ }
2694
+ };
2695
+ var PaginationIcon = function (_a) {
2696
+ var kind = _a.kind;
2697
+ var glyphs = GLYPHS[kind === "first" || kind === "last" ? "first" : "previous"];
2698
+ var mirrored = kind === "next" || kind === "last";
2699
+ return /*#__PURE__*/React.createElement("svg", {
2700
+ className: "lsg-pagination__icon",
2701
+ xmlns: "http://www.w3.org/2000/svg",
2702
+ viewBox: "0 0 24 24",
2703
+ "aria-hidden": "true",
2704
+ focusable: "false"
2705
+ }, /*#__PURE__*/React.createElement("g", {
2706
+ transform: mirrored ? "matrix(-1 0 0 1 24 0)" : undefined
2707
+ }, Object.entries(glyphs).map(function (_a) {
2708
+ var name = _a[0],
2709
+ d = _a[1];
2710
+ return /*#__PURE__*/React.createElement("path", {
2711
+ key: name,
2712
+ className: "lsg-pagination__glyph lsg-pagination__glyph--".concat(name),
2713
+ d: d
2714
+ });
2715
+ })));
2716
+ };
2717
+ var LsgPagination = function (_a) {
2718
+ var currentPage = _a.currentPage,
2719
+ totalPages = _a.totalPages,
2720
+ onPageChange = _a.onPageChange,
2721
+ _b = _a.siblingCount,
2722
+ siblingCount = _b === void 0 ? 1 : _b,
2723
+ _c = _a.truncate,
2724
+ truncate = _c === void 0 ? true : _c,
2725
+ _d = _a.showFirstLast,
2726
+ showFirstLast = _d === void 0 ? false : _d,
2727
+ labels = _a.labels,
2728
+ className = _a.className;
2729
+ if (totalPages <= 1) {
2730
+ return null;
2731
+ }
2732
+ var text = __assign(__assign({}, DEFAULT_LABELS), labels);
2733
+ var current = Math.min(Math.max(currentPage, 1), totalPages);
2734
+ var goTo = function (page) {
2735
+ if (page !== current && page >= 1 && page <= totalPages) {
2736
+ onPageChange(page);
2737
+ }
2738
+ };
2739
+ var control = function (kind, target, disabled) {
2740
+ var label = /*#__PURE__*/React.createElement("span", {
2741
+ className: "lsg-pagination__label"
2742
+ }, text[kind]);
2743
+ var iconFirst = kind === "first" || kind === "previous";
2744
+ return /*#__PURE__*/React.createElement("li", {
2745
+ className: "lsg-pagination__item lsg-pagination__item--".concat(kind)
2746
+ }, /*#__PURE__*/React.createElement("button", {
2747
+ type: "button",
2748
+ className: "lsg-pagination__control lsg-pagination__control--".concat(kind),
2749
+ disabled: disabled,
2750
+ onClick: function () {
2751
+ return goTo(target);
2752
+ }
2753
+ }, iconFirst && /*#__PURE__*/React.createElement(PaginationIcon, {
2754
+ kind: kind
2755
+ }), label, !iconFirst && /*#__PURE__*/React.createElement(PaginationIcon, {
2756
+ kind: kind
2757
+ })));
2758
+ };
2759
+ return /*#__PURE__*/React.createElement("nav", {
2760
+ className: ["lsg-pagination", className].filter(Boolean).join(" "),
2761
+ "aria-label": text.nav
2762
+ }, /*#__PURE__*/React.createElement("ul", {
2763
+ className: "lsg-pagination__list"
2764
+ }, showFirstLast && control("first", 1, current === 1), control("previous", current - 1, current === 1), (truncate ? getLsgPaginationRange(current, totalPages, siblingCount) : Array.from({
2765
+ length: totalPages
2766
+ }, function (_, index) {
2767
+ return index + 1;
2768
+ })).map(function (item, index) {
2769
+ return item === "ellipsis" ? /*#__PURE__*/React.createElement("li", {
2770
+ key: "ellipsis-".concat(index),
2771
+ className: "lsg-pagination__item lsg-pagination__ellipsis",
2772
+ "aria-hidden": "true"
2773
+ }, "\u2026") : /*#__PURE__*/React.createElement("li", {
2774
+ key: item,
2775
+ className: "lsg-pagination__item"
2776
+ }, /*#__PURE__*/React.createElement("button", {
2777
+ type: "button",
2778
+ className: "lsg-pagination__page",
2779
+ "aria-label": text.page(item),
2780
+ "aria-current": item === current ? "page" : undefined,
2781
+ onClick: function () {
2782
+ return goTo(item);
2783
+ }
2784
+ }, /*#__PURE__*/React.createElement("span", {
2785
+ className: "lsg-pagination__page-text",
2786
+ "data-text": item
2787
+ }, item)));
2788
+ }), control("next", current + 1, current === totalPages), showFirstLast && control("last", totalPages, current === totalPages)));
2789
+ };
2790
+
2791
+ var defaultStatusLabel = function (page, totalPages) {
2792
+ return "Page ".concat(page, " of ").concat(totalPages);
2793
+ };
2794
+ /**
2795
+ * Client-side, paginated card list for the AEM Generated List when "Enable
2796
+ * client-side React rendering" is on. ac-react-app mounts it into the
2797
+ * component's placeholder; see mapAemGeneratedListJson for the data.
2798
+ */
2799
+ var LsgBlogOverview = function (_a) {
2800
+ var items = _a.items,
2801
+ _b = _a.cardVariant,
2802
+ cardVariant = _b === void 0 ? "withImage" : _b,
2803
+ _c = _a.maxColumns,
2804
+ maxColumns = _c === void 0 ? 3 : _c,
2805
+ _d = _a.rows,
2806
+ rows = _d === void 0 ? 3 : _d,
2807
+ paginationLabels = _a.paginationLabels,
2808
+ _e = _a.showFirstLast,
2809
+ showFirstLast = _e === void 0 ? false : _e,
2810
+ _f = _a.truncatePages,
2811
+ truncatePages = _f === void 0 ? true : _f,
2812
+ _g = _a.statusLabel,
2813
+ statusLabel = _g === void 0 ? defaultStatusLabel : _g,
2814
+ className = _a.className;
2815
+ var rootRef = useRef(null);
2816
+ var _h = useState(1),
2817
+ page = _h[0],
2818
+ setPage = _h[1];
2819
+ var _j = useState(""),
2820
+ status = _j[0],
2821
+ setStatus = _j[1];
2822
+ var pageSize = Math.max(1, maxColumns * Math.max(1, rows));
2823
+ var totalPages = Math.max(1, Math.ceil(items.length / pageSize));
2824
+ // Clamped on read, so a shorter item list never strands the user on an empty page.
2825
+ var currentPage = Math.min(page, totalPages);
2826
+ var pageItems = items.slice((currentPage - 1) * pageSize, currentPage * pageSize);
2827
+ var handlePageChange = function (nextPage) {
2828
+ var _a;
2829
+ setPage(nextPage);
2830
+ setStatus(statusLabel(nextPage, totalPages));
2831
+ // Bring the list back into view when its top has scrolled off the screen.
2832
+ var root = rootRef.current;
2833
+ if (root && root.getBoundingClientRect().top < 0) {
2834
+ var reduceMotion = (_a = window.matchMedia) === null || _a === void 0 ? void 0 : _a.call(window, "(prefers-reduced-motion: reduce)").matches;
2835
+ root.scrollIntoView({
2836
+ behavior: reduceMotion ? "auto" : "smooth",
2837
+ block: "start"
2838
+ });
2839
+ }
2840
+ };
2841
+ return /*#__PURE__*/React.createElement("div", {
2842
+ ref: rootRef,
2843
+ className: ["lsg-blog-overview", className].filter(Boolean).join(" ")
2844
+ }, /*#__PURE__*/React.createElement(LsgCards, {
2845
+ columns: maxColumns,
2846
+ cards: pageItems.map(function (item) {
2847
+ var _a;
2848
+ return __assign(__assign({}, item), {
2849
+ imageAlt: (_a = item.imageAlt) !== null && _a !== void 0 ? _a : item.title,
2850
+ variant: cardVariant
2851
+ });
2852
+ })
2853
+ }), /*#__PURE__*/React.createElement(LsgPagination, {
2854
+ currentPage: currentPage,
2855
+ totalPages: totalPages,
2856
+ onPageChange: handlePageChange,
2857
+ labels: paginationLabels,
2858
+ showFirstLast: showFirstLast,
2859
+ truncate: truncatePages
2860
+ }), /*#__PURE__*/React.createElement("p", {
2861
+ className: "lsg-visually-hidden",
2862
+ "aria-live": "polite"
2863
+ }, status));
2864
+ };
2865
+
2866
+ var CARD_VARIANTS = ["withImage", "onlyText", "withIcon"];
2867
+ var isRecord = function (value) {
2868
+ return typeof value === "object" && value !== null && !Array.isArray(value);
2869
+ };
2870
+ /** Trimmed string, or undefined for anything empty or not a string. */
2871
+ var text = function (value) {
2872
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
2873
+ };
2874
+ function toColumns(value) {
2875
+ var columns = Number.parseInt(String(value), 10);
2876
+ return columns >= 2 && columns <= 5 ? columns : 3;
2877
+ }
2878
+ function toCardVariant(value) {
2879
+ var _a;
2880
+ return (_a = CARD_VARIANTS.find(function (variant) {
2881
+ return variant === value;
2882
+ })) !== null && _a !== void 0 ? _a : "withImage";
2883
+ }
2884
+ function toItem(raw) {
2885
+ var _a;
2886
+ if (!isRecord(raw)) {
2887
+ return null;
2888
+ }
2889
+ var path = text(raw.path);
2890
+ var title = (_a = text(raw.referenceTitle)) !== null && _a !== void 0 ? _a : text(raw["jcr:title"]);
2891
+ if (!path || !title) {
2892
+ return null;
2893
+ }
2894
+ var image = text(raw.referenceImage);
2895
+ return {
2896
+ // The HTL adds the extension with `@ extension='html'`; the JSON doesn't.
2897
+ href: path.endsWith(".html") ? path : "".concat(path, ".html"),
2898
+ title: title,
2899
+ preTitle: text(raw.referencePreTitle),
2900
+ subtitle: text(raw.referenceSubtitle),
2901
+ description: text(raw.referenceText),
2902
+ // DAM file names can contain spaces.
2903
+ imageUrl: image ? encodeURI(image) : undefined
2904
+ };
2905
+ }
2906
+ /**
2907
+ * Maps the AEM Generated List JSON to LsgBlogOverview props. Tolerates missing
2908
+ * or malformed fields and never throws on the shape; items without a path or
2909
+ * title are dropped.
2910
+ */
2911
+ function mapAemGeneratedListJson(json) {
2912
+ var data = isRecord(json) ? json : {};
2913
+ var items = Array.isArray(data.items) ? data.items.map(toItem).filter(function (item) {
2914
+ return item !== null;
2915
+ }) : [];
2916
+ return {
2917
+ items: items,
2918
+ cardVariant: toCardVariant(data.cardVariant),
2919
+ maxColumns: toColumns(data.maxColumns)
2920
+ };
2921
+ }
2922
+
2479
2923
  var LSG_ICON_PATHS = {
2480
2924
  bars: "M96 160C96 142.3 110.3 128 128 128L512 128C529.7 128 544 142.3 544 160C544 177.7 529.7 192 512 192L128 192C110.3 192 96 177.7 96 160zM96 320C96 302.3 110.3 288 128 288L512 288C529.7 288 544 302.3 544 320C544 337.7 529.7 352 512 352L128 352C110.3 352 96 337.7 96 320zM544 480C544 497.7 529.7 512 512 512L128 512C110.3 512 96 497.7 96 480C96 462.3 110.3 448 128 448L512 448C529.7 448 544 462.3 544 480z",
2481
2925
  chevronLeft: "M169.4 297.4C156.9 309.9 156.9 330.2 169.4 342.7L361.4 534.7C373.9 547.2 394.2 547.2 406.7 534.7C419.2 522.2 419.2 501.9 406.7 489.4L237.3 320L406.6 150.6C419.1 138.1 419.1 117.8 406.6 105.3C394.1 92.8 373.8 92.8 361.3 105.3L169.3 297.3z",
@@ -3381,12 +3825,12 @@ var PhoneIcon = function () {
3381
3825
  return /*#__PURE__*/React.createElement("svg", {
3382
3826
  width: "20",
3383
3827
  height: "20",
3384
- viewBox: "0 0 20 20",
3828
+ viewBox: "0 0 640 640",
3385
3829
  fill: "none",
3386
3830
  xmlns: "http://www.w3.org/2000/svg",
3387
3831
  "aria-hidden": "true"
3388
3832
  }, /*#__PURE__*/React.createElement("path", {
3389
- 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",
3833
+ 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",
3390
3834
  fill: "currentColor"
3391
3835
  }));
3392
3836
  };
@@ -3407,12 +3851,12 @@ var MailIcon = function () {
3407
3851
  return /*#__PURE__*/React.createElement("svg", {
3408
3852
  width: "24",
3409
3853
  height: "20",
3410
- viewBox: "0 0 24 20",
3854
+ viewBox: "0 0 640 640",
3411
3855
  fill: "none",
3412
3856
  xmlns: "http://www.w3.org/2000/svg",
3413
3857
  "aria-hidden": "true"
3414
3858
  }, /*#__PURE__*/React.createElement("path", {
3415
- 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",
3859
+ 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",
3416
3860
  fill: "currentColor"
3417
3861
  }));
3418
3862
  };
@@ -3458,12 +3902,12 @@ var SocialIcon = function (_a) {
3458
3902
  facebook: /*#__PURE__*/React.createElement("svg", {
3459
3903
  width: "20",
3460
3904
  height: "20",
3461
- viewBox: "0 0 24 24",
3905
+ viewBox: "0 0 640 640",
3462
3906
  fill: "currentColor",
3463
3907
  xmlns: "http://www.w3.org/2000/svg",
3464
3908
  "aria-hidden": "true"
3465
3909
  }, /*#__PURE__*/React.createElement("path", {
3466
- d: "M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"
3910
+ 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"
3467
3911
  })),
3468
3912
  twitter: /*#__PURE__*/React.createElement("svg", {
3469
3913
  width: "20",
@@ -3478,52 +3922,32 @@ var SocialIcon = function (_a) {
3478
3922
  linkedin: /*#__PURE__*/React.createElement("svg", {
3479
3923
  width: "20",
3480
3924
  height: "20",
3481
- viewBox: "0 0 24 24",
3925
+ viewBox: "0 0 640 640",
3482
3926
  fill: "currentColor",
3483
3927
  xmlns: "http://www.w3.org/2000/svg",
3484
3928
  "aria-hidden": "true"
3485
3929
  }, /*#__PURE__*/React.createElement("path", {
3486
- 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"
3487
- }), /*#__PURE__*/React.createElement("circle", {
3488
- cx: "4",
3489
- cy: "4",
3490
- r: "2"
3930
+ 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"
3491
3931
  })),
3492
3932
  youtube: /*#__PURE__*/React.createElement("svg", {
3493
3933
  width: "20",
3494
3934
  height: "20",
3495
- viewBox: "0 0 24 24",
3935
+ viewBox: "0 0 640 640",
3496
3936
  fill: "currentColor",
3497
3937
  xmlns: "http://www.w3.org/2000/svg",
3498
3938
  "aria-hidden": "true"
3499
3939
  }, /*#__PURE__*/React.createElement("path", {
3500
- 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"
3940
+ 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"
3501
3941
  })),
3502
3942
  instagram: /*#__PURE__*/React.createElement("svg", {
3503
3943
  width: "20",
3504
3944
  height: "20",
3505
- viewBox: "0 0 24 24",
3506
- fill: "none",
3507
- stroke: "currentColor",
3508
- strokeWidth: "2",
3945
+ viewBox: "0 0 640 640",
3946
+ fill: "currentColor",
3509
3947
  xmlns: "http://www.w3.org/2000/svg",
3510
3948
  "aria-hidden": "true"
3511
- }, /*#__PURE__*/React.createElement("rect", {
3512
- x: "2",
3513
- y: "2",
3514
- width: "20",
3515
- height: "20",
3516
- rx: "5",
3517
- ry: "5"
3518
- }), /*#__PURE__*/React.createElement("circle", {
3519
- cx: "12",
3520
- cy: "12",
3521
- r: "4"
3522
- }), /*#__PURE__*/React.createElement("circle", {
3523
- cx: "17.5",
3524
- cy: "6.5",
3525
- r: "0.5",
3526
- fill: "currentColor"
3949
+ }, /*#__PURE__*/React.createElement("path", {
3950
+ 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"
3527
3951
  }))
3528
3952
  };
3529
3953
  return /*#__PURE__*/React.createElement(React.Fragment, null, (_b = icons[platform]) !== null && _b !== void 0 ? _b : null);
@@ -3583,9 +4007,9 @@ var LsgFooter = function (_a) {
3583
4007
  className: "lsg-footer lsg-footer--simple lsg-footer--simple-tworow".concat(className ? " ".concat(className) : "")
3584
4008
  }, /*#__PURE__*/React.createElement("div", {
3585
4009
  className: "lsg-footer__simple-top"
3586
- }, /*#__PURE__*/React.createElement("span", {
4010
+ }, /*#__PURE__*/React.createElement("div", {
3587
4011
  className: "lsg-footer__brand-line"
3588
- }, brandLine), navItems.length > 0 && /*#__PURE__*/React.createElement("nav", {
4012
+ }, /*#__PURE__*/React.createElement("span", null, brandLine)), navItems.length > 0 && /*#__PURE__*/React.createElement("nav", {
3589
4013
  className: "lsg-footer__simple-nav",
3590
4014
  "aria-label": "Footer navigation"
3591
4015
  }, navItems.map(function (item, i) {
@@ -3602,12 +4026,13 @@ var LsgFooter = function (_a) {
3602
4026
  className: "lsg-footer__simple-bottom"
3603
4027
  }, /*#__PURE__*/React.createElement("div", {
3604
4028
  className: "lsg-footer__simple-bottom-left"
3605
- }, cookieSetting && /*#__PURE__*/React.createElement("a", {
3606
- href: "#",
3607
- className: "lsg-footer__cookie-link"
3608
- }, cookieSetting), /*#__PURE__*/React.createElement("p", {
4029
+ }, /*#__PURE__*/React.createElement("p", {
3609
4030
  className: "lsg-footer__copyright"
3610
- }, copyrightText)), showAiBadge && /*#__PURE__*/React.createElement(AiBadge, null)));
4031
+ }, copyrightText),
4032
+ // 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.
4033
+ cookieSetting && /*#__PURE__*/React.createElement("button", {
4034
+ className: "lsg-footer__cookie-button"
4035
+ }, cookieSetting)), showAiBadge && /*#__PURE__*/React.createElement(AiBadge, null)));
3611
4036
  }
3612
4037
  return /*#__PURE__*/React.createElement("footer", {
3613
4038
  className: "lsg-footer lsg-footer--simple".concat(className ? " ".concat(className) : "")
@@ -3615,7 +4040,9 @@ var LsgFooter = function (_a) {
3615
4040
  className: "lsg-footer__simple-inner"
3616
4041
  }, /*#__PURE__*/React.createElement("p", {
3617
4042
  className: "lsg-footer__copyright"
3618
- }, copyrightText), navItems.length > 0 && /*#__PURE__*/React.createElement("nav", {
4043
+ }, copyrightText), /*#__PURE__*/React.createElement("div", {
4044
+ className: "lsg-footer__brand-line"
4045
+ }, /*#__PURE__*/React.createElement("span", null, brandLine)), navItems.length > 0 && /*#__PURE__*/React.createElement("nav", {
3619
4046
  className: "lsg-footer__simple-nav",
3620
4047
  "aria-label": "Footer navigation"
3621
4048
  }, navItems.map(function (item, i) {
@@ -3631,7 +4058,11 @@ var LsgFooter = function (_a) {
3631
4058
  href: item.href,
3632
4059
  className: "lsg-footer__simple-nav-item"
3633
4060
  }, item.label));
3634
- }))));
4061
+ })),
4062
+ // 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.
4063
+ cookieSetting && /*#__PURE__*/React.createElement("button", {
4064
+ className: "lsg-footer__cookie-button"
4065
+ }, cookieSetting)));
3635
4066
  }
3636
4067
  // ── Complex footer ─────────────────────────────────────────────────────────
3637
4068
  var is3col = complexColumns === "3col";
@@ -3641,18 +4072,28 @@ var LsgFooter = function (_a) {
3641
4072
  about: (_d = colHeadings === null || colHeadings === void 0 ? void 0 : colHeadings.about) !== null && _d !== void 0 ? _d : "About brand",
3642
4073
  contactAlt: (_e = colHeadings === null || colHeadings === void 0 ? void 0 : colHeadings.contactAlt) !== null && _e !== void 0 ? _e : "Contact"
3643
4074
  };
4075
+ var bottomTopBar = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
4076
+ className: "lsg-footer__bottom-top"
4077
+ }, /*#__PURE__*/React.createElement("div", {
4078
+ className: "lsg-footer__brand-line"
4079
+ }, /*#__PURE__*/React.createElement("span", null, "Discover how the Atlas Copco Group enables technology that transforms the future.")), /*#__PURE__*/React.createElement("div", {
4080
+ className: "lsg-footer__body-social"
4081
+ }, socialPosition === "body" && socialLinks && socialLinks.length > 0 && /*#__PURE__*/React.createElement(SocialIconsRow, {
4082
+ links: socialLinks
4083
+ }))));
3644
4084
  var bottomBar = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("hr", {
3645
4085
  className: "lsg-footer__bottom-divider"
3646
4086
  }), /*#__PURE__*/React.createElement("div", {
3647
4087
  className: "lsg-footer__bottom"
3648
4088
  }, /*#__PURE__*/React.createElement("div", {
3649
4089
  className: "lsg-footer__bottom-left"
3650
- }, cookieSetting && /*#__PURE__*/React.createElement("a", {
3651
- href: "#",
3652
- className: "lsg-footer__cookie-link"
3653
- }, cookieSetting), /*#__PURE__*/React.createElement("p", {
4090
+ }, /*#__PURE__*/React.createElement("p", {
3654
4091
  className: "lsg-footer__copyright"
3655
- }, 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, {
4092
+ }, copyrightText),
4093
+ // 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.
4094
+ cookieSetting && /*#__PURE__*/React.createElement("button", {
4095
+ className: "lsg-footer__cookie-button"
4096
+ }, 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, {
3656
4097
  links: socialLinks
3657
4098
  })));
3658
4099
  if (is3col) {
@@ -3703,11 +4144,7 @@ var LsgFooter = function (_a) {
3703
4144
  }, link.label), /*#__PURE__*/React.createElement("hr", {
3704
4145
  className: "lsg-footer__divider"
3705
4146
  }));
3706
- })), socialPosition === "body" && socialLinks && socialLinks.length > 0 && /*#__PURE__*/React.createElement("div", {
3707
- className: "lsg-footer__body-social"
3708
- }, /*#__PURE__*/React.createElement(SocialIconsRow, {
3709
- links: socialLinks
3710
- }))))), bottomBar);
4147
+ }))))), bottomTopBar, bottomBar);
3711
4148
  }
3712
4149
  return /*#__PURE__*/React.createElement("footer", {
3713
4150
  className: "lsg-footer lsg-footer--complex".concat(className ? " ".concat(className) : "")
@@ -3754,11 +4191,7 @@ var LsgFooter = function (_a) {
3754
4191
  }, link.label), /*#__PURE__*/React.createElement("hr", {
3755
4192
  className: "lsg-footer__divider"
3756
4193
  }));
3757
- })), socialPosition === "body" && socialLinks && socialLinks.length > 0 && /*#__PURE__*/React.createElement("div", {
3758
- className: "lsg-footer__body-social"
3759
- }, /*#__PURE__*/React.createElement(SocialIconsRow, {
3760
- links: socialLinks
3761
- }))))), bottomBar);
4194
+ }))))), bottomTopBar, bottomBar);
3762
4195
  };
3763
4196
 
3764
4197
  function clampNumber(number, min, max) {
@@ -4561,13 +4994,15 @@ var LsgTable = function (_a) {
4561
4994
  id = _a.id,
4562
4995
  className = _a.className;
4563
4996
  var wrapperClassName = ["table-focus", "background-color-".concat(headerBackground), "accent-color-".concat(accentColors), "no-alternating-rows-".concat(noAlternatingRows), className].filter(Boolean).join(" ");
4564
- // Keep the normal 3-column Figma layout untouched. Wider tables get a
4565
- // 120px-per-column minimum so the existing overflow-x wrapper can be tested
4566
- // and used naturally on mobile instead of squeezing every column.
4997
+ // Three-column Figma examples fill the available width. Wider datasets keep
4998
+ // equal-width columns but receive a practical minimum width so mobile can
4999
+ // scroll horizontally instead of crushing every column.
4567
5000
  var tableStyle = headers.length > 3 ? {
4568
5001
  minWidth: "".concat(headers.length * 120, "px")
4569
5002
  } : undefined;
4570
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
5003
+ return /*#__PURE__*/React.createElement(React.Fragment, null, caption ? /*#__PURE__*/React.createElement("div", {
5004
+ className: "table-caption"
5005
+ }, caption) : null, /*#__PURE__*/React.createElement("div", {
4571
5006
  id: id,
4572
5007
  className: wrapperClassName
4573
5008
  }, /*#__PURE__*/React.createElement("table", {
@@ -4584,9 +5019,7 @@ var LsgTable = function (_a) {
4584
5019
  key: "cell-".concat(rowIndex, "-").concat(cellIndex)
4585
5020
  }, cell);
4586
5021
  }));
4587
- })))), /*#__PURE__*/React.createElement("div", {
4588
- className: "table-caption"
4589
- }, caption));
5022
+ })))));
4590
5023
  };
4591
5024
 
4592
5025
  var LsgFormFieldText = function (_a) {
@@ -5337,6 +5770,9 @@ var BASE_COMPONENTS = {
5337
5770
  LsgCarousel: LsgCarousel,
5338
5771
  LsgCard: LsgCard,
5339
5772
  LsgCards: LsgCards,
5773
+ LsgGeneratedList: LsgGeneratedList,
5774
+ LsgPagination: LsgPagination,
5775
+ LsgBlogOverview: LsgBlogOverview,
5340
5776
  LsgBreadcrumb: LsgBreadcrumb,
5341
5777
  LsgLogo: LsgLogo,
5342
5778
  LsgNavigation: LsgNavigation,
@@ -5377,6 +5813,9 @@ function createThemeComponents(themeName) {
5377
5813
  LsgCarousel: createThemeComponent(themeName, "carousel", BASE_COMPONENTS.LsgCarousel),
5378
5814
  LsgCard: createThemeComponent(themeName, "card", BASE_COMPONENTS.LsgCard),
5379
5815
  LsgCards: createThemeComponent(themeName, "cards", BASE_COMPONENTS.LsgCards),
5816
+ LsgGeneratedList: createThemeComponent(themeName, "generated-list", BASE_COMPONENTS.LsgGeneratedList),
5817
+ LsgPagination: createThemeComponent(themeName, "pagination", BASE_COMPONENTS.LsgPagination),
5818
+ LsgBlogOverview: createThemeComponent(themeName, "blog-overview", BASE_COMPONENTS.LsgBlogOverview),
5380
5819
  LsgBreadcrumb: createThemeComponent(themeName, "breadcrumb", BASE_COMPONENTS.LsgBreadcrumb),
5381
5820
  LsgLogo: createThemeComponent(themeName, "logo", BASE_COMPONENTS.LsgLogo),
5382
5821
  LsgNavigation: createThemeComponent(themeName, "navigation", BASE_COMPONENTS.LsgNavigation),
@@ -5409,6 +5848,9 @@ var Theme1LsgButton = theme1Components.LsgButton,
5409
5848
  Theme1LsgCarousel = theme1Components.LsgCarousel,
5410
5849
  Theme1LsgCard = theme1Components.LsgCard,
5411
5850
  Theme1LsgCards = theme1Components.LsgCards,
5851
+ Theme1LsgGeneratedList = theme1Components.LsgGeneratedList,
5852
+ Theme1LsgPagination = theme1Components.LsgPagination,
5853
+ Theme1LsgBlogOverview = theme1Components.LsgBlogOverview,
5412
5854
  Theme1LsgBreadcrumb = theme1Components.LsgBreadcrumb,
5413
5855
  Theme1LsgLogo = theme1Components.LsgLogo,
5414
5856
  Theme1LsgNavigation = theme1Components.LsgNavigation,
@@ -5440,6 +5882,9 @@ var Theme2LsgButton = theme2Components.LsgButton,
5440
5882
  Theme2LsgCarousel = theme2Components.LsgCarousel,
5441
5883
  Theme2LsgCard = theme2Components.LsgCard,
5442
5884
  Theme2LsgCards = theme2Components.LsgCards,
5885
+ Theme2LsgGeneratedList = theme2Components.LsgGeneratedList,
5886
+ Theme2LsgPagination = theme2Components.LsgPagination,
5887
+ Theme2LsgBlogOverview = theme2Components.LsgBlogOverview,
5443
5888
  Theme2LsgBreadcrumb = theme2Components.LsgBreadcrumb,
5444
5889
  Theme2LsgLogo = theme2Components.LsgLogo,
5445
5890
  Theme2LsgNavigation = theme2Components.LsgNavigation,
@@ -5469,6 +5914,9 @@ var Theme3LsgButton = theme3Components.LsgButton,
5469
5914
  Theme3LsgCarousel = theme3Components.LsgCarousel,
5470
5915
  Theme3LsgCard = theme3Components.LsgCard,
5471
5916
  Theme3LsgCards = theme3Components.LsgCards,
5917
+ Theme3LsgGeneratedList = theme3Components.LsgGeneratedList,
5918
+ Theme3LsgPagination = theme3Components.LsgPagination,
5919
+ Theme3LsgBlogOverview = theme3Components.LsgBlogOverview,
5472
5920
  Theme3LsgBreadcrumb = theme3Components.LsgBreadcrumb,
5473
5921
  Theme3LsgLogo = theme3Components.LsgLogo,
5474
5922
  Theme3LsgNavigation = theme3Components.LsgNavigation,
@@ -5492,5 +5940,5 @@ var Theme3LsgButton = theme3Components.LsgButton,
5492
5940
  theme3Components.LsgFormFieldConsent;
5493
5941
  theme3Components.LsgFormStep;
5494
5942
 
5495
- 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 };
5943
+ export { LsgBanner, LsgBlogOverview, LsgBreadcrumb, LsgButton, LsgCard, LsgCards, LsgCarousel, LsgCarouselController, LsgFooter, LsgGeneratedList, LsgHeader, LsgHero, LsgHeroCard, LsgHeroController, LsgLanguageSwitcher, LsgLogo, LsgNavigation, LsgPagination, LsgQuickLinks, LsgSearchOverlay, LsgSearchTrigger, LsgSocialMediaIcons, LsgTable, Theme1LsgBanner, Theme1LsgBlogOverview, Theme1LsgBreadcrumb, Theme1LsgButton, Theme1LsgCard, Theme1LsgCards, Theme1LsgCarousel, Theme1LsgFooter, Theme1LsgGeneratedList, Theme1LsgHeader, Theme1LsgHero, Theme1LsgLanguageSwitcher, Theme1LsgLogo, Theme1LsgNavigation, Theme1LsgPagination, Theme1LsgQuickLinks, Theme1LsgSearchOverlay, Theme1LsgSearchTrigger, Theme1LsgSocialMediaIcons, Theme1LsgTable, Theme2LsgBanner, Theme2LsgBlogOverview, Theme2LsgBreadcrumb, Theme2LsgButton, Theme2LsgCard, Theme2LsgCards, Theme2LsgCarousel, Theme2LsgFooter, Theme2LsgGeneratedList, Theme2LsgHeader, Theme2LsgHero, Theme2LsgLanguageSwitcher, Theme2LsgLogo, Theme2LsgNavigation, Theme2LsgPagination, Theme2LsgQuickLinks, Theme2LsgSearchOverlay, Theme2LsgSearchTrigger, Theme2LsgSocialMediaIcons, Theme2LsgTable, Theme3LsgBanner, Theme3LsgBlogOverview, Theme3LsgBreadcrumb, Theme3LsgButton, Theme3LsgCard, Theme3LsgCards, Theme3LsgCarousel, Theme3LsgFooter, Theme3LsgGeneratedList, Theme3LsgHeader, Theme3LsgHero, Theme3LsgLanguageSwitcher, Theme3LsgLogo, Theme3LsgNavigation, Theme3LsgPagination, Theme3LsgQuickLinks, Theme3LsgSearchOverlay, Theme3LsgSearchTrigger, Theme3LsgSocialMediaIcons, Theme3LsgTable, getLsgPaginationRange, getTelValue, initTelPickers, mapAemGeneratedListJson, theme1Components, theme2Components, theme3Components };
5496
5944
  //# sourceMappingURL=index.esm.js.map