@asantemedia-org/leybold-design-system 1.0.10 → 1.0.12

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 (82) hide show
  1. package/dist/assets/ai-banner-desktop.png +0 -0
  2. package/dist/assets/ai-banner-mobile.png +0 -0
  3. package/dist/assets/carousel-card.png +0 -0
  4. package/dist/assets/desktop-layout-alt.svg +27 -0
  5. package/dist/assets/desktop-layout.svg +29 -0
  6. package/dist/assets/globe.svg +7 -0
  7. package/dist/assets/language-selector-bg.png +0 -0
  8. package/dist/assets/leybold-footer-logo.svg +19 -0
  9. package/dist/assets/leybold-white.svg +19 -0
  10. package/dist/assets/list-card-alt.png +0 -0
  11. package/dist/assets/list-card.png +0 -0
  12. package/dist/assets/list-link-a.png +0 -0
  13. package/dist/assets/list-link-b.png +0 -0
  14. package/dist/assets/list-link-c.png +0 -0
  15. package/dist/assets/list-product-overlay-tip-active.svg +3 -0
  16. package/dist/assets/list-product-overlay-tip.svg +3 -0
  17. package/dist/assets/list-product.png +0 -0
  18. package/dist/assets/logo-example.svg +9 -0
  19. package/dist/assets/logo.svg +19 -0
  20. package/dist/assets/phone-layout.svg +14 -0
  21. package/dist/assets/red-tip.svg +10 -0
  22. package/dist/assets/tablet-layout.svg +28 -0
  23. package/dist/index.esm.js +449 -6
  24. package/dist/index.esm.js.map +1 -1
  25. package/dist/index.esm.scss +1542 -84
  26. package/dist/index.js +454 -5
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.scss +1542 -84
  29. package/dist/src/app/layout.d.ts +1 -0
  30. package/dist/src/app/page.d.ts +1 -0
  31. package/dist/src/components/AIBanner/AIBanner.d.ts +15 -0
  32. package/dist/src/components/AIBanner/AIBanner.stories.d.ts +7 -0
  33. package/dist/src/components/AIBanner/index.d.ts +2 -0
  34. package/dist/src/components/Button/Button.d.ts +50 -5
  35. package/dist/src/components/Button/Button.stories.d.ts +16 -3
  36. package/dist/src/components/LanguageSelector/LanguageSelector.d.ts +7 -0
  37. package/dist/src/components/LanguageSelector/LanguageSelector.stories.d.ts +32 -0
  38. package/dist/src/components/LanguageSelector/LanguageSelector.types.d.ts +64 -0
  39. package/dist/src/components/LanguageSelector/LanguageSelectorLink.d.ts +20 -0
  40. package/dist/src/components/LanguageSelector/LocationDropdown.d.ts +6 -0
  41. package/dist/src/components/LanguageSelector/LocationSelectorLink.d.ts +20 -0
  42. package/dist/src/components/LanguageSelector/index.d.ts +7 -0
  43. package/dist/src/experience/Carousel/Carousel.d.ts +36 -0
  44. package/dist/src/experience/Carousel/Carousel.stories.d.ts +7 -0
  45. package/dist/src/experience/Carousel/index.d.ts +2 -0
  46. package/dist/src/experience/Footer/Footer.d.ts +201 -0
  47. package/dist/src/experience/Footer/Footer.stories.d.ts +28 -0
  48. package/dist/src/experience/Footer/icons/AtlasCopcoIcon.d.ts +10 -0
  49. package/dist/src/experience/Footer/icons/ExternalLinkIcon.d.ts +10 -0
  50. package/dist/src/experience/Footer/icons/index.d.ts +2 -0
  51. package/dist/src/experience/Footer/index.d.ts +2 -0
  52. package/dist/src/experience/GeneratedList/GeneratedList.d.ts +40 -0
  53. package/dist/src/experience/GeneratedList/GeneratedList.stories.d.ts +7 -0
  54. package/dist/src/experience/GeneratedList/GeneratedList.types.d.ts +131 -0
  55. package/dist/src/experience/GeneratedList/GeneratedListExternalLink.stories.d.ts +7 -0
  56. package/dist/src/experience/GeneratedList/GeneratedListList.stories.d.ts +9 -0
  57. package/dist/src/experience/GeneratedList/GeneratedListProduct.stories.d.ts +7 -0
  58. package/dist/src/experience/GeneratedList/_Card.d.ts +8 -0
  59. package/dist/src/experience/GeneratedList/_CardMobile.d.ts +8 -0
  60. package/dist/src/experience/GeneratedList/_ExternalLink.d.ts +8 -0
  61. package/dist/src/experience/GeneratedList/_List.d.ts +8 -0
  62. package/dist/src/experience/GeneratedList/_Product.d.ts +9 -0
  63. package/dist/src/experience/GeneratedList/index.d.ts +2 -0
  64. package/dist/src/experience/Header/Header.d.ts +20 -0
  65. package/dist/src/experience/Header/Header.stories.d.ts +9 -0
  66. package/dist/src/experience/Header/HeaderNavButton.d.ts +9 -0
  67. package/dist/src/experience/Header/MegaMenu.d.ts +10 -0
  68. package/dist/src/experience/Header/MenuLink.d.ts +8 -0
  69. package/dist/src/experience/Header/MobileHeader.stories.d.ts +6 -0
  70. package/dist/src/experience/Header/MobileMenu.d.ts +9 -0
  71. package/dist/src/experience/Header/MobileNavBar.d.ts +13 -0
  72. package/dist/src/experience/Header/index.d.ts +6 -0
  73. package/dist/src/experience/algolia-dynamic-search/AlgoliaDynamicSearch.d.ts +1 -0
  74. package/dist/src/experience/qr-form-journey/QrFormJourney.d.ts +1 -0
  75. package/dist/src/index.d.ts +2 -0
  76. package/dist/src/stories/foundation/Buttons/ButtonComponents.d.ts +56 -0
  77. package/dist/src/stories/foundation/Typography/TypographyComponents.d.ts +45 -0
  78. package/dist/src/stories/foundation/_components/StoryLayout.d.ts +11 -0
  79. package/dist/src/types/cards.d.ts +1 -0
  80. package/dist/src/types/search.d.ts +5 -2
  81. package/dist/tsconfig.tsbuildinfo +1 -1
  82. package/package.json +5 -2
package/dist/index.esm.js CHANGED
@@ -1,4 +1,7 @@
1
1
  import React, { useMemo, useState, useCallback, useRef, useEffect } from 'react';
2
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
+ import { faArrowLeft, faArrowLeftLong, faArrowRight, faArrowRightLong, faChevronRight, faChevronLeft, faArrowUpRightFromSquare, faGlobe } from '@fortawesome/free-solid-svg-icons';
4
+ import { faInstagram, faYoutube, faLinkedinIn, faXTwitter, faFacebookF } from '@fortawesome/free-brands-svg-icons';
2
5
  import { ProductDetailsCard, AlgoliaDynamicSearchRaw, QrForm } from '@asantemedia-org/edwardsvacuum-design-system';
3
6
 
4
7
  function _extends() {
@@ -11,7 +14,7 @@ function _extends() {
11
14
  }, _extends.apply(null, arguments);
12
15
  }
13
16
 
14
- var styles$f = {"button":"Button-module__button___18Bed","button--primary":"Button-module__button--primary___VuF-P","button--disabled":"Button-module__button--disabled___IuOY8","button--secondary":"Button-module__button--secondary___lD5E3","button--outline":"Button-module__button--outline___wB6-g","button--text":"Button-module__button--text___iZIMo","button--extra-small":"Button-module__button--extra-small___R0QTM","button--small":"Button-module__button--small___ADJQe","button--medium":"Button-module__button--medium___ZuR4Z","button--large":"Button-module__button--large___-FaV5"};
17
+ var styles$g = {"button":"Button-module__button___18Bed","button--primary":"Button-module__button--primary___VuF-P","button--default":"Button-module__button--default___MDa35","button--disabled":"Button-module__button--disabled___IuOY8","button--secondary":"Button-module__button--secondary___lD5E3","button--solid-red":"Button-module__button--solid-red___YPpnL","button--solid-grey":"Button-module__button--solid-grey___oRbEy","button--solid-black":"Button-module__button--solid-black___1Ma5K","button--solid-white":"Button-module__button--solid-white___bE-Z0","button--outlined-red":"Button-module__button--outlined-red___cgZXa","button--outlined-grey":"Button-module__button--outlined-grey___xWGbB","button--outlined-black":"Button-module__button--outlined-black___qfX5o","button--outlined-white":"Button-module__button--outlined-white___QLXNP","button--link-text":"Button-module__button--link-text___R2kun","button__icon":"Button-module__button__icon___hlcHo","button--link-text-alt":"Button-module__button--link-text-alt___1p7wH","button--external-link":"Button-module__button--external-link___Mhxuk","button--carousel-arrow-left":"Button-module__button--carousel-arrow-left___Wx-Jo","button--carousel-arrow-right":"Button-module__button--carousel-arrow-right___3ZtgT","button__icon__default":"Button-module__button__icon__default___0qlF1","button__icon__hover":"Button-module__button__icon__hover___3xPGT","button--extra-small":"Button-module__button--extra-small___R0QTM","button--small":"Button-module__button--small___ADJQe","button--medium":"Button-module__button--medium___ZuR4Z","button--large":"Button-module__button--large___-FaV5","button__icon--left":"Button-module__button__icon--left___wMCeH","button__icon--right":"Button-module__button__icon--right___-pGHl"};
15
18
 
16
19
  function getDefaultExportFromCjs (x) {
17
20
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
@@ -88,6 +91,79 @@ function requireClassnames() {
88
91
  var classnamesExports = requireClassnames();
89
92
  var classNames = /*@__PURE__*/getDefaultExportFromCjs(classnamesExports);
90
93
 
94
+ /**
95
+ * Button variant types
96
+ */
97
+
98
+ /**
99
+ * Icon types for button
100
+ */
101
+
102
+ /**
103
+ * Icon position
104
+ */
105
+
106
+ /**
107
+ * Get the icon component based on icon type
108
+ */
109
+ const getIcon = icon => {
110
+ switch (icon) {
111
+ case "arrow-right":
112
+ return /*#__PURE__*/React.createElement(FontAwesomeIcon, {
113
+ icon: faArrowRight
114
+ });
115
+ case "external":
116
+ return /*#__PURE__*/React.createElement(FontAwesomeIcon, {
117
+ icon: faArrowUpRightFromSquare
118
+ });
119
+ case "chevron-left":
120
+ return /*#__PURE__*/React.createElement(FontAwesomeIcon, {
121
+ icon: faChevronLeft
122
+ });
123
+ case "chevron-right":
124
+ return /*#__PURE__*/React.createElement(FontAwesomeIcon, {
125
+ icon: faChevronRight
126
+ });
127
+ default:
128
+ return null;
129
+ }
130
+ };
131
+
132
+ /**
133
+ * Get default icon for certain variants
134
+ */
135
+ const getDefaultIcon = variant => {
136
+ switch (variant) {
137
+ case "link-text":
138
+ case "link-text-alt":
139
+ case "text":
140
+ // Alias
141
+ return "arrow-right";
142
+ case "external-link":
143
+ return "external";
144
+ case "carousel-arrow-left":
145
+ return "chevron-left";
146
+ case "carousel-arrow-right":
147
+ return "chevron-right";
148
+ default:
149
+ return "none";
150
+ }
151
+ };
152
+
153
+ /**
154
+ * Map alias variants to their actual CSS class variants
155
+ */
156
+ const mapVariantToClass = variant => {
157
+ switch (variant) {
158
+ case "outline":
159
+ return "outlined-red";
160
+ case "text":
161
+ return "link-text";
162
+ default:
163
+ return variant;
164
+ }
165
+ };
166
+
91
167
  /**
92
168
  * Primary UI component for user interaction
93
169
  */
@@ -99,17 +175,384 @@ const Button = ({
99
175
  onClick,
100
176
  type = "button",
101
177
  className,
178
+ icon,
179
+ iconPosition = "right",
180
+ ariaLabel,
181
+ opensInNewTab,
102
182
  ...props
103
183
  }) => {
104
- const buttonClasses = classNames(styles$f.button, styles$f[`button--${variant}`], styles$f[`button--${size}`], {
105
- [styles$f["button--disabled"]]: disabled
184
+ // Map alias variants to actual class names
185
+ const cssVariant = mapVariantToClass(variant);
186
+
187
+ // Determine the icon to display
188
+ const displayIcon = icon ?? getDefaultIcon(variant);
189
+ const iconElement = getIcon(displayIcon);
190
+
191
+ // Check if this is an icon-only button (carousel arrows)
192
+ const isIconOnly = variant === "carousel-arrow-left" || variant === "carousel-arrow-right";
193
+ const isCarouselLeft = variant === "carousel-arrow-left";
194
+ const isCarouselRight = variant === "carousel-arrow-right";
195
+ const buttonClasses = classNames(styles$g.button, styles$g[`button--${cssVariant}`], styles$g[`button--${size}`], {
196
+ [styles$g["button--disabled"]]: disabled
106
197
  }, className);
198
+ const iconClasses = classNames(styles$g.button__icon, styles$g[`button__icon--${iconPosition}`]);
199
+
200
+ // Generate accessible label for icon-only buttons
201
+ const accessibleLabel = ariaLabel || (isIconOnly ? variant === "carousel-arrow-left" ? "Previous" : "Next" : undefined);
107
202
  return /*#__PURE__*/React.createElement("button", _extends({
108
203
  type: type,
109
204
  className: buttonClasses,
110
205
  disabled: disabled,
111
- onClick: onClick
112
- }, props), children);
206
+ onClick: onClick,
207
+ "aria-label": accessibleLabel,
208
+ "data-force-state": props['data-force-state']
209
+ }, props), !isIconOnly && children, isCarouselLeft && /*#__PURE__*/React.createElement("span", {
210
+ className: iconClasses
211
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
212
+ icon: faArrowLeft,
213
+ className: styles$g.button__icon__default
214
+ }), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
215
+ icon: faArrowLeftLong,
216
+ className: styles$g.button__icon__hover
217
+ })), isCarouselRight && /*#__PURE__*/React.createElement("span", {
218
+ className: iconClasses
219
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
220
+ icon: faArrowRight,
221
+ className: styles$g.button__icon__default
222
+ }), /*#__PURE__*/React.createElement(FontAwesomeIcon, {
223
+ icon: faArrowRightLong,
224
+ className: styles$g.button__icon__hover
225
+ })), !isIconOnly && iconElement && /*#__PURE__*/React.createElement("span", {
226
+ className: iconClasses
227
+ }, iconElement));
228
+ };
229
+
230
+ var styles$f = {"footer":"Footer-module__footer___Oavyx","footer--mobile":"Footer-module__footer--mobile___9HQC-","footer__container":"Footer-module__footer__container___ohvnm","footer__links":"Footer-module__footer__links___DdVK8","footer__linkGroup":"Footer-module__footer__linkGroup___1B7JA","footer__linkList":"Footer-module__footer__linkList___j-DWF","footer__linkHeading":"Footer-module__footer__linkHeading___LtE6X","footer__link":"Footer-module__footer__link___G5HPW","footer__cta":"Footer-module__footer__cta___MRJLr","footer__socialIcons":"Footer-module__footer__socialIcons___j0aRp","footer__socialIcon":"Footer-module__footer__socialIcon___1uVTm","footer__countrySelector":"Footer-module__footer__countrySelector___pVtN5","footer__bottom":"Footer-module__footer__bottom___77bPL","footer__bottomLeft":"Footer-module__footer__bottomLeft___tlst1","footer__bottomLinks":"Footer-module__footer__bottomLinks___s22h7","footer__bottomLink":"Footer-module__footer__bottomLink___SLzwY","footer__copyright":"Footer-module__footer__copyright___4bZOF","footer__brandSection":"Footer-module__footer__brandSection___BBr5f","footer__logo":"Footer-module__footer__logo___mv-9M","footer__leftCol":"Footer-module__footer__leftCol___vmKNN","footer__motto":"Footer-module__footer__motto___QtB2m","footer__main":"Footer-module__footer__main___NSU9d","footer__badge":"Footer-module__footer__badge___faejb","footer__badgeIcon":"Footer-module__footer__badgeIcon___xJ519","footer__badgeText":"Footer-module__footer__badgeText___imXgG","footer__linkText":"Footer-module__footer__linkText___Gc18Z","footer__linkIcon":"Footer-module__footer__linkIcon___IZzJM","footer__countrySelectorIcon":"Footer-module__footer__countrySelectorIcon___hhEd4"};
231
+
232
+ /**
233
+ * External link icon (↗) for footer links that open in new tabs
234
+ */
235
+ const ExternalLinkIcon = ({
236
+ className,
237
+ size = 15
238
+ }) => /*#__PURE__*/React.createElement("svg", {
239
+ width: size,
240
+ height: size,
241
+ viewBox: "0 0 15 15",
242
+ fill: "none",
243
+ xmlns: "http://www.w3.org/2000/svg",
244
+ className: className,
245
+ "aria-hidden": "true"
246
+ }, /*#__PURE__*/React.createElement("path", {
247
+ d: "M11.25 8.125V11.875C11.25 12.2065 11.1183 12.5245 10.8839 12.7589C10.6495 12.9933 10.3315 13.125 10 13.125H3.125C2.79348 13.125 2.47554 12.9933 2.24112 12.7589C2.0067 12.5245 1.875 12.2065 1.875 11.875V5C1.875 4.66848 2.0067 4.35054 2.24112 4.11612C2.47554 3.8817 2.79348 3.75 3.125 3.75H6.875M9.375 1.875H13.125M13.125 1.875V5.625M13.125 1.875L6.25 8.75",
248
+ stroke: "currentColor",
249
+ strokeWidth: "1.5",
250
+ strokeLinecap: "round",
251
+ strokeLinejoin: "round"
252
+ }));
253
+
254
+ /**
255
+ * Atlas Copco Group badge icon (square)
256
+ */
257
+ const AtlasCopcoIcon = ({
258
+ className,
259
+ size = 14
260
+ }) => /*#__PURE__*/React.createElement("svg", {
261
+ width: size,
262
+ height: size,
263
+ viewBox: "0 0 14 14",
264
+ fill: "none",
265
+ xmlns: "http://www.w3.org/2000/svg",
266
+ className: className,
267
+ "aria-hidden": "true"
268
+ }, /*#__PURE__*/React.createElement("rect", {
269
+ x: "0.5",
270
+ y: "0.5",
271
+ width: "13",
272
+ height: "13",
273
+ rx: "1.5",
274
+ fill: "#D9D9D9",
275
+ stroke: "#D9D9D9"
276
+ }));
277
+
278
+ // =============================================================================
279
+ // TYPE DEFINITIONS
280
+ // =============================================================================
281
+
282
+ // =============================================================================
283
+ // SOCIAL ICON COMPONENT
284
+ // =============================================================================
285
+
286
+ const SocialIconComponent = ({
287
+ platform
288
+ }) => {
289
+ const iconMap = {
290
+ facebook: faFacebookF,
291
+ x: faXTwitter,
292
+ linkedin: faLinkedinIn,
293
+ youtube: faYoutube,
294
+ instagram: faInstagram
295
+ };
296
+ return /*#__PURE__*/React.createElement(FontAwesomeIcon, {
297
+ icon: iconMap[platform]
298
+ });
299
+ };
300
+
301
+ // =============================================================================
302
+ // FOOTER LINK COMPONENT
303
+ // =============================================================================
304
+
305
+ const FooterLink = ({
306
+ item,
307
+ className,
308
+ variant = 'default'
309
+ }) => {
310
+ const baseClass = variant === 'bottom' ? styles$f.footer__bottomLink : styles$f.footer__link;
311
+ const linkClasses = classNames(baseClass, className);
312
+ const handleClick = e => {
313
+ if (item.onClick) {
314
+ e.preventDefault();
315
+ item.onClick();
316
+ }
317
+ };
318
+ return /*#__PURE__*/React.createElement("a", _extends({
319
+ href: item.href,
320
+ className: linkClasses,
321
+ onClick: item.onClick ? handleClick : undefined
322
+ }, item.external && {
323
+ target: '_blank',
324
+ rel: 'noopener noreferrer'
325
+ }), /*#__PURE__*/React.createElement("span", {
326
+ className: styles$f.footer__linkText
327
+ }, item.label), item.external && /*#__PURE__*/React.createElement("span", {
328
+ className: styles$f.footer__linkIcon
329
+ }, /*#__PURE__*/React.createElement(ExternalLinkIcon, {
330
+ size: 15
331
+ })));
332
+ };
333
+
334
+ // =============================================================================
335
+ // FOOTER LINK GROUP COMPONENT
336
+ // =============================================================================
337
+
338
+ const FooterLinkGroup = ({
339
+ heading,
340
+ links,
341
+ className,
342
+ children
343
+ }) => {
344
+ return /*#__PURE__*/React.createElement("div", {
345
+ className: classNames(styles$f.footer__linkGroup, className)
346
+ }, /*#__PURE__*/React.createElement("h3", {
347
+ className: styles$f.footer__linkHeading
348
+ }, heading), /*#__PURE__*/React.createElement("ul", {
349
+ className: styles$f.footer__linkList
350
+ }, links.map((link, index) => /*#__PURE__*/React.createElement("li", {
351
+ key: index
352
+ }, /*#__PURE__*/React.createElement(FooterLink, {
353
+ item: link
354
+ })))), children);
355
+ };
356
+
357
+ // =============================================================================
358
+ // FOOTER SOCIAL ICONS COMPONENT
359
+ // =============================================================================
360
+
361
+ const FooterSocialIcons = ({
362
+ links,
363
+ className
364
+ }) => {
365
+ return /*#__PURE__*/React.createElement("div", {
366
+ className: classNames(styles$f.footer__socialIcons, className)
367
+ }, links.map((link, index) => /*#__PURE__*/React.createElement("a", {
368
+ key: index,
369
+ href: link.href,
370
+ className: styles$f.footer__socialIcon,
371
+ "aria-label": link.ariaLabel,
372
+ target: "_blank",
373
+ rel: "noopener noreferrer"
374
+ }, /*#__PURE__*/React.createElement(SocialIconComponent, {
375
+ platform: link.platform
376
+ }))));
377
+ };
378
+
379
+ // =============================================================================
380
+ // FOOTER SOCIAL ICON (STANDALONE) COMPONENT
381
+ // =============================================================================
382
+
383
+ const FooterSocialIcon = ({
384
+ platform,
385
+ className
386
+ }) => {
387
+ const iconClasses = classNames(styles$f.footer__socialIcon, className);
388
+ return /*#__PURE__*/React.createElement("span", {
389
+ className: iconClasses
390
+ }, /*#__PURE__*/React.createElement(SocialIconComponent, {
391
+ platform: platform
392
+ }));
393
+ };
394
+
395
+ // =============================================================================
396
+ // FOOTER BOTTOM COMPONENT
397
+ // =============================================================================
398
+
399
+ const FooterBottom = ({
400
+ links,
401
+ copyright,
402
+ countrySelector,
403
+ className
404
+ }) => {
405
+ return /*#__PURE__*/React.createElement("div", {
406
+ className: classNames(styles$f.footer__bottom, className)
407
+ }, /*#__PURE__*/React.createElement("div", {
408
+ className: styles$f.footer__bottomLeft
409
+ }, /*#__PURE__*/React.createElement("div", {
410
+ className: styles$f.footer__bottomLinks
411
+ }, links.map((link, index) => /*#__PURE__*/React.createElement(FooterLink, {
412
+ key: index,
413
+ item: link,
414
+ variant: "bottom"
415
+ }))), /*#__PURE__*/React.createElement("p", {
416
+ className: styles$f.footer__copyright
417
+ }, copyright)), countrySelector && /*#__PURE__*/React.createElement("a", {
418
+ href: countrySelector.href || '#',
419
+ className: styles$f.footer__countrySelector
420
+ }, countrySelector.showIcon !== false && /*#__PURE__*/React.createElement("span", {
421
+ className: styles$f.footer__countrySelectorIcon
422
+ }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
423
+ icon: faGlobe
424
+ })), countrySelector.label));
425
+ };
426
+
427
+ // =============================================================================
428
+ // MAIN FOOTER COMPONENT
429
+ // =============================================================================
430
+
431
+ /**
432
+ * Footer component with brand identity, navigation links, social icons, and legal information.
433
+ * Supports two layout variants:
434
+ * - desktop: Logo at top, 3-column main content
435
+ * - mobile: Logo at bottom, stacked layout with CTA button
436
+ */
437
+ const Footer = ({
438
+ variant = 'desktop',
439
+ logo,
440
+ motto,
441
+ atlasCopcoBadge,
442
+ quickLinks,
443
+ quickLinksHeading = 'Quick links',
444
+ contactLinks,
445
+ contactHeading = 'Contact us',
446
+ socialLinks,
447
+ contactFormButton,
448
+ bottomLinks,
449
+ copyright,
450
+ countrySelector,
451
+ className
452
+ }) => {
453
+ const isMobile = variant === 'mobile';
454
+ const footerClasses = classNames(styles$f.footer, isMobile && styles$f['footer--mobile'], className);
455
+ const LogoWrapper = logo.href ? 'a' : 'div';
456
+ const logoProps = logo.href ? {
457
+ href: logo.href,
458
+ className: styles$f.footer__logo
459
+ } : {
460
+ className: styles$f.footer__logo
461
+ };
462
+
463
+ // Logo + Motto + Badge component (used in both layouts)
464
+ const LogoSection = () => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(LogoWrapper, logoProps, /*#__PURE__*/React.createElement("img", {
465
+ src: logo.src,
466
+ alt: logo.alt
467
+ })), /*#__PURE__*/React.createElement("div", {
468
+ className: styles$f.footer__leftCol
469
+ }, /*#__PURE__*/React.createElement("h2", {
470
+ className: styles$f.footer__motto
471
+ }, motto), atlasCopcoBadge && /*#__PURE__*/React.createElement("div", {
472
+ className: styles$f.footer__badge
473
+ }, atlasCopcoBadge.showIcon !== false && /*#__PURE__*/React.createElement("span", {
474
+ className: styles$f.footer__badgeIcon
475
+ }, /*#__PURE__*/React.createElement(AtlasCopcoIcon, {
476
+ size: 14
477
+ })), /*#__PURE__*/React.createElement("span", {
478
+ className: styles$f.footer__badgeText
479
+ }, atlasCopcoBadge.text))));
480
+
481
+ // Mobile layout: Links at top, logo/motto at bottom
482
+ if (isMobile) {
483
+ return /*#__PURE__*/React.createElement("footer", {
484
+ className: footerClasses
485
+ }, /*#__PURE__*/React.createElement("div", {
486
+ className: styles$f.footer__container
487
+ }, /*#__PURE__*/React.createElement("div", {
488
+ className: styles$f.footer__links
489
+ }, /*#__PURE__*/React.createElement(FooterLinkGroup, {
490
+ heading: quickLinksHeading,
491
+ links: quickLinks
492
+ }), /*#__PURE__*/React.createElement(FooterLinkGroup, {
493
+ heading: contactHeading,
494
+ links: contactLinks
495
+ })), contactFormButton && /*#__PURE__*/React.createElement("div", {
496
+ className: styles$f.footer__cta
497
+ }, /*#__PURE__*/React.createElement("a", {
498
+ href: contactFormButton.href,
499
+ style: {
500
+ textDecoration: 'none',
501
+ width: '100%'
502
+ }
503
+ }, /*#__PURE__*/React.createElement(Button, {
504
+ variant: "solid-red",
505
+ style: {
506
+ width: '100%'
507
+ }
508
+ }, contactFormButton.label))), socialLinks.length > 0 && /*#__PURE__*/React.createElement(FooterSocialIcons, {
509
+ links: socialLinks
510
+ }), /*#__PURE__*/React.createElement(FooterBottom, {
511
+ links: bottomLinks,
512
+ copyright: copyright,
513
+ countrySelector: countrySelector
514
+ }), /*#__PURE__*/React.createElement("div", {
515
+ className: styles$f.footer__brandSection
516
+ }, /*#__PURE__*/React.createElement(LogoSection, null))));
517
+ }
518
+
519
+ // Desktop layout: Logo at top, 3-column main content
520
+ return /*#__PURE__*/React.createElement("footer", {
521
+ className: footerClasses
522
+ }, /*#__PURE__*/React.createElement("div", {
523
+ className: styles$f.footer__container
524
+ }, /*#__PURE__*/React.createElement(LogoWrapper, logoProps, /*#__PURE__*/React.createElement("img", {
525
+ src: logo.src,
526
+ alt: logo.alt
527
+ })), /*#__PURE__*/React.createElement("div", {
528
+ className: styles$f.footer__main
529
+ }, /*#__PURE__*/React.createElement("div", {
530
+ className: styles$f.footer__leftCol
531
+ }, /*#__PURE__*/React.createElement("h2", {
532
+ className: styles$f.footer__motto
533
+ }, motto), atlasCopcoBadge && /*#__PURE__*/React.createElement("div", {
534
+ className: styles$f.footer__badge
535
+ }, atlasCopcoBadge.showIcon !== false && /*#__PURE__*/React.createElement("span", {
536
+ className: styles$f.footer__badgeIcon
537
+ }, /*#__PURE__*/React.createElement(AtlasCopcoIcon, {
538
+ size: 14
539
+ })), /*#__PURE__*/React.createElement("span", {
540
+ className: styles$f.footer__badgeText
541
+ }, atlasCopcoBadge.text))), /*#__PURE__*/React.createElement("div", {
542
+ className: styles$f.footer__links
543
+ }, /*#__PURE__*/React.createElement(FooterLinkGroup, {
544
+ heading: quickLinksHeading,
545
+ links: quickLinks
546
+ }), /*#__PURE__*/React.createElement(FooterLinkGroup, {
547
+ heading: contactHeading,
548
+ links: contactLinks
549
+ }, socialLinks.length > 0 && /*#__PURE__*/React.createElement(FooterSocialIcons, {
550
+ links: socialLinks
551
+ })))), /*#__PURE__*/React.createElement(FooterBottom, {
552
+ links: bottomLinks,
553
+ copyright: copyright,
554
+ countrySelector: countrySelector
555
+ })));
113
556
  };
114
557
 
115
558
  var styles$e = {"pagination":"Pagination-module__pagination___Kih79","paginationList":"Pagination-module__paginationList___-lZpm","paginationItem":"Pagination-module__paginationItem___VsGFa","pageButton":"Pagination-module__pageButton___b6UNF","pageButtonActive":"Pagination-module__pageButtonActive___D9m18","navButton":"Pagination-module__navButton___ZCIai","navIcon":"Pagination-module__navIcon___-BVJ3","navButton--previous":"Pagination-module__navButton--previous___Cy5TE","navButton--next":"Pagination-module__navButton--next___kTmgK","navButtonDisabled":"Pagination-module__navButtonDisabled___IZK8H","ellipsis":"Pagination-module__ellipsis___iAsGN","ellipsisText":"Pagination-module__ellipsisText___fd6u1"};
@@ -1773,5 +2216,5 @@ const SearchTriggerButton = ({
1773
2216
  }, label));
1774
2217
  };
1775
2218
 
1776
- export { AlgoliaDynamicSearchLeybold as AlgoliaDynamicSearch, AlgoliaDynamicSearchLeybold, AppliedFilterTag, AppliedFilters, Button, ContentCardHorizontal, FederatedInstantResultsLayout, FederatedResultsView, FederatedSearchExperience, FilterAccordion, FilterItem, FilterSearch, FiltersPanel, ModalCloseButton, Pagination, PaginationButton, PaginationEllipsis, PaginationItem, ProductCardHorizontal, QrFormLeybold as QrForm, QrFormLeybold, ResultsColumn, ResultsCount, ResultsList, SearchBar, SearchIcon, SearchInput, SearchModal, SearchSubmitButton, SearchTriggerButton, SeeAllLinkButton };
2219
+ export { AlgoliaDynamicSearchLeybold as AlgoliaDynamicSearch, AlgoliaDynamicSearchLeybold, AppliedFilterTag, AppliedFilters, Button, ContentCardHorizontal, FederatedInstantResultsLayout, FederatedResultsView, FederatedSearchExperience, FilterAccordion, FilterItem, FilterSearch, FiltersPanel, Footer, FooterBottom, FooterLink, FooterLinkGroup, FooterSocialIcon, FooterSocialIcons, ModalCloseButton, Pagination, PaginationButton, PaginationEllipsis, PaginationItem, ProductCardHorizontal, QrFormLeybold as QrForm, QrFormLeybold, ResultsColumn, ResultsCount, ResultsList, SearchBar, SearchIcon, SearchInput, SearchModal, SearchSubmitButton, SearchTriggerButton, SeeAllLinkButton };
1777
2220
  //# sourceMappingURL=index.esm.js.map