@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.js CHANGED
@@ -1,6 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
+ var reactFontawesome = require('@fortawesome/react-fontawesome');
5
+ var freeSolidSvgIcons = require('@fortawesome/free-solid-svg-icons');
6
+ var freeBrandsSvgIcons = require('@fortawesome/free-brands-svg-icons');
4
7
  var edwardsvacuumDesignSystem = require('@asantemedia-org/edwardsvacuum-design-system');
5
8
 
6
9
  function _extends() {
@@ -13,7 +16,7 @@ function _extends() {
13
16
  }, _extends.apply(null, arguments);
14
17
  }
15
18
 
16
- 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"};
19
+ 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"};
17
20
 
18
21
  function getDefaultExportFromCjs (x) {
19
22
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
@@ -90,6 +93,79 @@ function requireClassnames() {
90
93
  var classnamesExports = requireClassnames();
91
94
  var classNames = /*@__PURE__*/getDefaultExportFromCjs(classnamesExports);
92
95
 
96
+ /**
97
+ * Button variant types
98
+ */
99
+
100
+ /**
101
+ * Icon types for button
102
+ */
103
+
104
+ /**
105
+ * Icon position
106
+ */
107
+
108
+ /**
109
+ * Get the icon component based on icon type
110
+ */
111
+ const getIcon = icon => {
112
+ switch (icon) {
113
+ case "arrow-right":
114
+ return /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
115
+ icon: freeSolidSvgIcons.faArrowRight
116
+ });
117
+ case "external":
118
+ return /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
119
+ icon: freeSolidSvgIcons.faArrowUpRightFromSquare
120
+ });
121
+ case "chevron-left":
122
+ return /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
123
+ icon: freeSolidSvgIcons.faChevronLeft
124
+ });
125
+ case "chevron-right":
126
+ return /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
127
+ icon: freeSolidSvgIcons.faChevronRight
128
+ });
129
+ default:
130
+ return null;
131
+ }
132
+ };
133
+
134
+ /**
135
+ * Get default icon for certain variants
136
+ */
137
+ const getDefaultIcon = variant => {
138
+ switch (variant) {
139
+ case "link-text":
140
+ case "link-text-alt":
141
+ case "text":
142
+ // Alias
143
+ return "arrow-right";
144
+ case "external-link":
145
+ return "external";
146
+ case "carousel-arrow-left":
147
+ return "chevron-left";
148
+ case "carousel-arrow-right":
149
+ return "chevron-right";
150
+ default:
151
+ return "none";
152
+ }
153
+ };
154
+
155
+ /**
156
+ * Map alias variants to their actual CSS class variants
157
+ */
158
+ const mapVariantToClass = variant => {
159
+ switch (variant) {
160
+ case "outline":
161
+ return "outlined-red";
162
+ case "text":
163
+ return "link-text";
164
+ default:
165
+ return variant;
166
+ }
167
+ };
168
+
93
169
  /**
94
170
  * Primary UI component for user interaction
95
171
  */
@@ -101,17 +177,384 @@ const Button = ({
101
177
  onClick,
102
178
  type = "button",
103
179
  className,
180
+ icon,
181
+ iconPosition = "right",
182
+ ariaLabel,
183
+ opensInNewTab,
104
184
  ...props
105
185
  }) => {
106
- const buttonClasses = classNames(styles$f.button, styles$f[`button--${variant}`], styles$f[`button--${size}`], {
107
- [styles$f["button--disabled"]]: disabled
186
+ // Map alias variants to actual class names
187
+ const cssVariant = mapVariantToClass(variant);
188
+
189
+ // Determine the icon to display
190
+ const displayIcon = icon ?? getDefaultIcon(variant);
191
+ const iconElement = getIcon(displayIcon);
192
+
193
+ // Check if this is an icon-only button (carousel arrows)
194
+ const isIconOnly = variant === "carousel-arrow-left" || variant === "carousel-arrow-right";
195
+ const isCarouselLeft = variant === "carousel-arrow-left";
196
+ const isCarouselRight = variant === "carousel-arrow-right";
197
+ const buttonClasses = classNames(styles$g.button, styles$g[`button--${cssVariant}`], styles$g[`button--${size}`], {
198
+ [styles$g["button--disabled"]]: disabled
108
199
  }, className);
200
+ const iconClasses = classNames(styles$g.button__icon, styles$g[`button__icon--${iconPosition}`]);
201
+
202
+ // Generate accessible label for icon-only buttons
203
+ const accessibleLabel = ariaLabel || (isIconOnly ? variant === "carousel-arrow-left" ? "Previous" : "Next" : undefined);
109
204
  return /*#__PURE__*/React.createElement("button", _extends({
110
205
  type: type,
111
206
  className: buttonClasses,
112
207
  disabled: disabled,
113
- onClick: onClick
114
- }, props), children);
208
+ onClick: onClick,
209
+ "aria-label": accessibleLabel,
210
+ "data-force-state": props['data-force-state']
211
+ }, props), !isIconOnly && children, isCarouselLeft && /*#__PURE__*/React.createElement("span", {
212
+ className: iconClasses
213
+ }, /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
214
+ icon: freeSolidSvgIcons.faArrowLeft,
215
+ className: styles$g.button__icon__default
216
+ }), /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
217
+ icon: freeSolidSvgIcons.faArrowLeftLong,
218
+ className: styles$g.button__icon__hover
219
+ })), isCarouselRight && /*#__PURE__*/React.createElement("span", {
220
+ className: iconClasses
221
+ }, /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
222
+ icon: freeSolidSvgIcons.faArrowRight,
223
+ className: styles$g.button__icon__default
224
+ }), /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
225
+ icon: freeSolidSvgIcons.faArrowRightLong,
226
+ className: styles$g.button__icon__hover
227
+ })), !isIconOnly && iconElement && /*#__PURE__*/React.createElement("span", {
228
+ className: iconClasses
229
+ }, iconElement));
230
+ };
231
+
232
+ 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"};
233
+
234
+ /**
235
+ * External link icon (↗) for footer links that open in new tabs
236
+ */
237
+ const ExternalLinkIcon = ({
238
+ className,
239
+ size = 15
240
+ }) => /*#__PURE__*/React.createElement("svg", {
241
+ width: size,
242
+ height: size,
243
+ viewBox: "0 0 15 15",
244
+ fill: "none",
245
+ xmlns: "http://www.w3.org/2000/svg",
246
+ className: className,
247
+ "aria-hidden": "true"
248
+ }, /*#__PURE__*/React.createElement("path", {
249
+ 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",
250
+ stroke: "currentColor",
251
+ strokeWidth: "1.5",
252
+ strokeLinecap: "round",
253
+ strokeLinejoin: "round"
254
+ }));
255
+
256
+ /**
257
+ * Atlas Copco Group badge icon (square)
258
+ */
259
+ const AtlasCopcoIcon = ({
260
+ className,
261
+ size = 14
262
+ }) => /*#__PURE__*/React.createElement("svg", {
263
+ width: size,
264
+ height: size,
265
+ viewBox: "0 0 14 14",
266
+ fill: "none",
267
+ xmlns: "http://www.w3.org/2000/svg",
268
+ className: className,
269
+ "aria-hidden": "true"
270
+ }, /*#__PURE__*/React.createElement("rect", {
271
+ x: "0.5",
272
+ y: "0.5",
273
+ width: "13",
274
+ height: "13",
275
+ rx: "1.5",
276
+ fill: "#D9D9D9",
277
+ stroke: "#D9D9D9"
278
+ }));
279
+
280
+ // =============================================================================
281
+ // TYPE DEFINITIONS
282
+ // =============================================================================
283
+
284
+ // =============================================================================
285
+ // SOCIAL ICON COMPONENT
286
+ // =============================================================================
287
+
288
+ const SocialIconComponent = ({
289
+ platform
290
+ }) => {
291
+ const iconMap = {
292
+ facebook: freeBrandsSvgIcons.faFacebookF,
293
+ x: freeBrandsSvgIcons.faXTwitter,
294
+ linkedin: freeBrandsSvgIcons.faLinkedinIn,
295
+ youtube: freeBrandsSvgIcons.faYoutube,
296
+ instagram: freeBrandsSvgIcons.faInstagram
297
+ };
298
+ return /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
299
+ icon: iconMap[platform]
300
+ });
301
+ };
302
+
303
+ // =============================================================================
304
+ // FOOTER LINK COMPONENT
305
+ // =============================================================================
306
+
307
+ const FooterLink = ({
308
+ item,
309
+ className,
310
+ variant = 'default'
311
+ }) => {
312
+ const baseClass = variant === 'bottom' ? styles$f.footer__bottomLink : styles$f.footer__link;
313
+ const linkClasses = classNames(baseClass, className);
314
+ const handleClick = e => {
315
+ if (item.onClick) {
316
+ e.preventDefault();
317
+ item.onClick();
318
+ }
319
+ };
320
+ return /*#__PURE__*/React.createElement("a", _extends({
321
+ href: item.href,
322
+ className: linkClasses,
323
+ onClick: item.onClick ? handleClick : undefined
324
+ }, item.external && {
325
+ target: '_blank',
326
+ rel: 'noopener noreferrer'
327
+ }), /*#__PURE__*/React.createElement("span", {
328
+ className: styles$f.footer__linkText
329
+ }, item.label), item.external && /*#__PURE__*/React.createElement("span", {
330
+ className: styles$f.footer__linkIcon
331
+ }, /*#__PURE__*/React.createElement(ExternalLinkIcon, {
332
+ size: 15
333
+ })));
334
+ };
335
+
336
+ // =============================================================================
337
+ // FOOTER LINK GROUP COMPONENT
338
+ // =============================================================================
339
+
340
+ const FooterLinkGroup = ({
341
+ heading,
342
+ links,
343
+ className,
344
+ children
345
+ }) => {
346
+ return /*#__PURE__*/React.createElement("div", {
347
+ className: classNames(styles$f.footer__linkGroup, className)
348
+ }, /*#__PURE__*/React.createElement("h3", {
349
+ className: styles$f.footer__linkHeading
350
+ }, heading), /*#__PURE__*/React.createElement("ul", {
351
+ className: styles$f.footer__linkList
352
+ }, links.map((link, index) => /*#__PURE__*/React.createElement("li", {
353
+ key: index
354
+ }, /*#__PURE__*/React.createElement(FooterLink, {
355
+ item: link
356
+ })))), children);
357
+ };
358
+
359
+ // =============================================================================
360
+ // FOOTER SOCIAL ICONS COMPONENT
361
+ // =============================================================================
362
+
363
+ const FooterSocialIcons = ({
364
+ links,
365
+ className
366
+ }) => {
367
+ return /*#__PURE__*/React.createElement("div", {
368
+ className: classNames(styles$f.footer__socialIcons, className)
369
+ }, links.map((link, index) => /*#__PURE__*/React.createElement("a", {
370
+ key: index,
371
+ href: link.href,
372
+ className: styles$f.footer__socialIcon,
373
+ "aria-label": link.ariaLabel,
374
+ target: "_blank",
375
+ rel: "noopener noreferrer"
376
+ }, /*#__PURE__*/React.createElement(SocialIconComponent, {
377
+ platform: link.platform
378
+ }))));
379
+ };
380
+
381
+ // =============================================================================
382
+ // FOOTER SOCIAL ICON (STANDALONE) COMPONENT
383
+ // =============================================================================
384
+
385
+ const FooterSocialIcon = ({
386
+ platform,
387
+ className
388
+ }) => {
389
+ const iconClasses = classNames(styles$f.footer__socialIcon, className);
390
+ return /*#__PURE__*/React.createElement("span", {
391
+ className: iconClasses
392
+ }, /*#__PURE__*/React.createElement(SocialIconComponent, {
393
+ platform: platform
394
+ }));
395
+ };
396
+
397
+ // =============================================================================
398
+ // FOOTER BOTTOM COMPONENT
399
+ // =============================================================================
400
+
401
+ const FooterBottom = ({
402
+ links,
403
+ copyright,
404
+ countrySelector,
405
+ className
406
+ }) => {
407
+ return /*#__PURE__*/React.createElement("div", {
408
+ className: classNames(styles$f.footer__bottom, className)
409
+ }, /*#__PURE__*/React.createElement("div", {
410
+ className: styles$f.footer__bottomLeft
411
+ }, /*#__PURE__*/React.createElement("div", {
412
+ className: styles$f.footer__bottomLinks
413
+ }, links.map((link, index) => /*#__PURE__*/React.createElement(FooterLink, {
414
+ key: index,
415
+ item: link,
416
+ variant: "bottom"
417
+ }))), /*#__PURE__*/React.createElement("p", {
418
+ className: styles$f.footer__copyright
419
+ }, copyright)), countrySelector && /*#__PURE__*/React.createElement("a", {
420
+ href: countrySelector.href || '#',
421
+ className: styles$f.footer__countrySelector
422
+ }, countrySelector.showIcon !== false && /*#__PURE__*/React.createElement("span", {
423
+ className: styles$f.footer__countrySelectorIcon
424
+ }, /*#__PURE__*/React.createElement(reactFontawesome.FontAwesomeIcon, {
425
+ icon: freeSolidSvgIcons.faGlobe
426
+ })), countrySelector.label));
427
+ };
428
+
429
+ // =============================================================================
430
+ // MAIN FOOTER COMPONENT
431
+ // =============================================================================
432
+
433
+ /**
434
+ * Footer component with brand identity, navigation links, social icons, and legal information.
435
+ * Supports two layout variants:
436
+ * - desktop: Logo at top, 3-column main content
437
+ * - mobile: Logo at bottom, stacked layout with CTA button
438
+ */
439
+ const Footer = ({
440
+ variant = 'desktop',
441
+ logo,
442
+ motto,
443
+ atlasCopcoBadge,
444
+ quickLinks,
445
+ quickLinksHeading = 'Quick links',
446
+ contactLinks,
447
+ contactHeading = 'Contact us',
448
+ socialLinks,
449
+ contactFormButton,
450
+ bottomLinks,
451
+ copyright,
452
+ countrySelector,
453
+ className
454
+ }) => {
455
+ const isMobile = variant === 'mobile';
456
+ const footerClasses = classNames(styles$f.footer, isMobile && styles$f['footer--mobile'], className);
457
+ const LogoWrapper = logo.href ? 'a' : 'div';
458
+ const logoProps = logo.href ? {
459
+ href: logo.href,
460
+ className: styles$f.footer__logo
461
+ } : {
462
+ className: styles$f.footer__logo
463
+ };
464
+
465
+ // Logo + Motto + Badge component (used in both layouts)
466
+ const LogoSection = () => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(LogoWrapper, logoProps, /*#__PURE__*/React.createElement("img", {
467
+ src: logo.src,
468
+ alt: logo.alt
469
+ })), /*#__PURE__*/React.createElement("div", {
470
+ className: styles$f.footer__leftCol
471
+ }, /*#__PURE__*/React.createElement("h2", {
472
+ className: styles$f.footer__motto
473
+ }, motto), atlasCopcoBadge && /*#__PURE__*/React.createElement("div", {
474
+ className: styles$f.footer__badge
475
+ }, atlasCopcoBadge.showIcon !== false && /*#__PURE__*/React.createElement("span", {
476
+ className: styles$f.footer__badgeIcon
477
+ }, /*#__PURE__*/React.createElement(AtlasCopcoIcon, {
478
+ size: 14
479
+ })), /*#__PURE__*/React.createElement("span", {
480
+ className: styles$f.footer__badgeText
481
+ }, atlasCopcoBadge.text))));
482
+
483
+ // Mobile layout: Links at top, logo/motto at bottom
484
+ if (isMobile) {
485
+ return /*#__PURE__*/React.createElement("footer", {
486
+ className: footerClasses
487
+ }, /*#__PURE__*/React.createElement("div", {
488
+ className: styles$f.footer__container
489
+ }, /*#__PURE__*/React.createElement("div", {
490
+ className: styles$f.footer__links
491
+ }, /*#__PURE__*/React.createElement(FooterLinkGroup, {
492
+ heading: quickLinksHeading,
493
+ links: quickLinks
494
+ }), /*#__PURE__*/React.createElement(FooterLinkGroup, {
495
+ heading: contactHeading,
496
+ links: contactLinks
497
+ })), contactFormButton && /*#__PURE__*/React.createElement("div", {
498
+ className: styles$f.footer__cta
499
+ }, /*#__PURE__*/React.createElement("a", {
500
+ href: contactFormButton.href,
501
+ style: {
502
+ textDecoration: 'none',
503
+ width: '100%'
504
+ }
505
+ }, /*#__PURE__*/React.createElement(Button, {
506
+ variant: "solid-red",
507
+ style: {
508
+ width: '100%'
509
+ }
510
+ }, contactFormButton.label))), socialLinks.length > 0 && /*#__PURE__*/React.createElement(FooterSocialIcons, {
511
+ links: socialLinks
512
+ }), /*#__PURE__*/React.createElement(FooterBottom, {
513
+ links: bottomLinks,
514
+ copyright: copyright,
515
+ countrySelector: countrySelector
516
+ }), /*#__PURE__*/React.createElement("div", {
517
+ className: styles$f.footer__brandSection
518
+ }, /*#__PURE__*/React.createElement(LogoSection, null))));
519
+ }
520
+
521
+ // Desktop layout: Logo at top, 3-column main content
522
+ return /*#__PURE__*/React.createElement("footer", {
523
+ className: footerClasses
524
+ }, /*#__PURE__*/React.createElement("div", {
525
+ className: styles$f.footer__container
526
+ }, /*#__PURE__*/React.createElement(LogoWrapper, logoProps, /*#__PURE__*/React.createElement("img", {
527
+ src: logo.src,
528
+ alt: logo.alt
529
+ })), /*#__PURE__*/React.createElement("div", {
530
+ className: styles$f.footer__main
531
+ }, /*#__PURE__*/React.createElement("div", {
532
+ className: styles$f.footer__leftCol
533
+ }, /*#__PURE__*/React.createElement("h2", {
534
+ className: styles$f.footer__motto
535
+ }, motto), atlasCopcoBadge && /*#__PURE__*/React.createElement("div", {
536
+ className: styles$f.footer__badge
537
+ }, atlasCopcoBadge.showIcon !== false && /*#__PURE__*/React.createElement("span", {
538
+ className: styles$f.footer__badgeIcon
539
+ }, /*#__PURE__*/React.createElement(AtlasCopcoIcon, {
540
+ size: 14
541
+ })), /*#__PURE__*/React.createElement("span", {
542
+ className: styles$f.footer__badgeText
543
+ }, atlasCopcoBadge.text))), /*#__PURE__*/React.createElement("div", {
544
+ className: styles$f.footer__links
545
+ }, /*#__PURE__*/React.createElement(FooterLinkGroup, {
546
+ heading: quickLinksHeading,
547
+ links: quickLinks
548
+ }), /*#__PURE__*/React.createElement(FooterLinkGroup, {
549
+ heading: contactHeading,
550
+ links: contactLinks
551
+ }, socialLinks.length > 0 && /*#__PURE__*/React.createElement(FooterSocialIcons, {
552
+ links: socialLinks
553
+ })))), /*#__PURE__*/React.createElement(FooterBottom, {
554
+ links: bottomLinks,
555
+ copyright: copyright,
556
+ countrySelector: countrySelector
557
+ })));
115
558
  };
116
559
 
117
560
  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"};
@@ -1788,6 +2231,12 @@ exports.FilterAccordion = FilterAccordion;
1788
2231
  exports.FilterItem = FilterItem;
1789
2232
  exports.FilterSearch = FilterSearch;
1790
2233
  exports.FiltersPanel = FiltersPanel;
2234
+ exports.Footer = Footer;
2235
+ exports.FooterBottom = FooterBottom;
2236
+ exports.FooterLink = FooterLink;
2237
+ exports.FooterLinkGroup = FooterLinkGroup;
2238
+ exports.FooterSocialIcon = FooterSocialIcon;
2239
+ exports.FooterSocialIcons = FooterSocialIcons;
1791
2240
  exports.ModalCloseButton = ModalCloseButton;
1792
2241
  exports.Pagination = Pagination;
1793
2242
  exports.PaginationButton = PaginationButton;