@asante-org/atlascopco-vt-litesitegenerator 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +160 -0
  2. package/dist/.storybook/AtlasCopcoTheme.d.ts +2 -0
  3. package/dist/.storybook/main.d.ts +3 -0
  4. package/dist/.storybook/manager.d.ts +1 -0
  5. package/dist/.storybook/preview.d.ts +4 -0
  6. package/dist/assets/.gitkeep +0 -0
  7. package/dist/index.esm.js +696 -0
  8. package/dist/index.esm.js.map +1 -0
  9. package/dist/index.esm.scss +2050 -0
  10. package/dist/index.js +752 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/index.scss +2050 -0
  13. package/dist/src/components/lsg/LsgBanner/LsgBanner.d.ts +17 -0
  14. package/dist/src/components/lsg/LsgBanner/LsgBanner.stories.d.ts +7 -0
  15. package/dist/src/components/lsg/LsgBanner/index.d.ts +2 -0
  16. package/dist/src/components/lsg/LsgButton/LsgButton.d.ts +16 -0
  17. package/dist/src/components/lsg/LsgButton/LsgButton.stories.d.ts +10 -0
  18. package/dist/src/components/lsg/LsgButton/index.d.ts +2 -0
  19. package/dist/src/components/lsg/LsgCard/LsgCard.d.ts +22 -0
  20. package/dist/src/components/lsg/LsgCard/LsgCard.stories.d.ts +9 -0
  21. package/dist/src/components/lsg/LsgCard/index.d.ts +2 -0
  22. package/dist/src/components/lsg/LsgFooter/LsgFooter.d.ts +14 -0
  23. package/dist/src/components/lsg/LsgFooter/LsgFooter.stories.d.ts +6 -0
  24. package/dist/src/components/lsg/LsgFooter/index.d.ts +2 -0
  25. package/dist/src/components/lsg/LsgHeader/LsgHeader.d.ts +14 -0
  26. package/dist/src/components/lsg/LsgHeader/LsgHeader.stories.d.ts +6 -0
  27. package/dist/src/components/lsg/LsgHeader/index.d.ts +2 -0
  28. package/dist/src/components/lsg/LsgLanguageSwitcher/LsgLanguageSwitcher.d.ts +20 -0
  29. package/dist/src/components/lsg/LsgLanguageSwitcher/LsgLanguageSwitcher.stories.d.ts +6 -0
  30. package/dist/src/components/lsg/LsgLanguageSwitcher/index.d.ts +2 -0
  31. package/dist/src/components/lsg/LsgLogo/LsgLogo.d.ts +13 -0
  32. package/dist/src/components/lsg/LsgLogo/LsgLogo.stories.d.ts +7 -0
  33. package/dist/src/components/lsg/LsgLogo/index.d.ts +2 -0
  34. package/dist/src/components/lsg/LsgNavigation/LsgNavigation.d.ts +13 -0
  35. package/dist/src/components/lsg/LsgNavigation/LsgNavigation.stories.d.ts +6 -0
  36. package/dist/src/components/lsg/LsgNavigation/index.d.ts +2 -0
  37. package/dist/src/components/lsg/LsgQuickLinks/LsgQuickLinks.d.ts +11 -0
  38. package/dist/src/components/lsg/LsgQuickLinks/LsgQuickLinks.stories.d.ts +6 -0
  39. package/dist/src/components/lsg/LsgQuickLinks/index.d.ts +2 -0
  40. package/dist/src/components/lsg/LsgSearchOverlay/LsgSearchOverlay.d.ts +19 -0
  41. package/dist/src/components/lsg/LsgSearchOverlay/LsgSearchOverlay.stories.d.ts +6 -0
  42. package/dist/src/components/lsg/LsgSearchOverlay/index.d.ts +2 -0
  43. package/dist/src/components/lsg/LsgSearchTrigger/LsgSearchTrigger.d.ts +10 -0
  44. package/dist/src/components/lsg/LsgSearchTrigger/LsgSearchTrigger.stories.d.ts +6 -0
  45. package/dist/src/components/lsg/LsgSearchTrigger/index.d.ts +2 -0
  46. package/dist/src/components/lsg/LsgSocialMediaIcons/LsgSocialMediaIcons.d.ts +13 -0
  47. package/dist/src/components/lsg/LsgSocialMediaIcons/LsgSocialMediaIcons.stories.d.ts +6 -0
  48. package/dist/src/components/lsg/LsgSocialMediaIcons/index.d.ts +2 -0
  49. package/dist/src/components/lsg/_LsgOverviewComponents.d.ts +35 -0
  50. package/dist/src/components/lsg/index.d.ts +24 -0
  51. package/dist/src/components/lsg/lsg-clientlib-runtime.d.ts +1 -0
  52. package/dist/src/components/lsg/lsg-clientlib.d.ts +14 -0
  53. package/dist/src/index.d.ts +6 -0
  54. package/dist/src/stories/foundation/_components/StoryLayout.d.ts +11 -0
  55. package/dist/src/themes/createThemeComponents.d.ts +19 -0
  56. package/dist/src/themes/theme-1/components.d.ts +16 -0
  57. package/dist/src/themes/theme-1/theme-clientlib.d.ts +1 -0
  58. package/dist/src/themes/theme-2/components.d.ts +16 -0
  59. package/dist/src/themes/theme-2/theme-clientlib.d.ts +1 -0
  60. package/dist/src/themes/theme-3/components.d.ts +16 -0
  61. package/dist/src/themes/theme-3/theme-clientlib.d.ts +1 -0
  62. package/dist/themes/theme-1.css +754 -0
  63. package/dist/themes/theme-1.css.map +1 -0
  64. package/dist/themes/theme-1.js +99 -0
  65. package/dist/themes/theme-1.js.map +1 -0
  66. package/dist/themes/theme-2.css +754 -0
  67. package/dist/themes/theme-2.css.map +1 -0
  68. package/dist/themes/theme-2.js +99 -0
  69. package/dist/themes/theme-2.js.map +1 -0
  70. package/dist/themes/theme-3.css +762 -0
  71. package/dist/themes/theme-3.css.map +1 -0
  72. package/dist/themes/theme-3.js +99 -0
  73. package/dist/themes/theme-3.js.map +1 -0
  74. package/dist/tsconfig.tsbuildinfo +1 -0
  75. package/package.json +115 -0
@@ -0,0 +1,696 @@
1
+ import React, { useState, useRef, useEffect } from 'react';
2
+
3
+ function _extends() {
4
+ return _extends = Object.assign ? Object.assign.bind() : function (n) {
5
+ for (var e = 1; e < arguments.length; e++) {
6
+ var t = arguments[e];
7
+ for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
8
+ }
9
+ return n;
10
+ }, _extends.apply(null, arguments);
11
+ }
12
+
13
+ var LsgButton = function (_a) {
14
+ var children = _a.children,
15
+ _b = _a.variant,
16
+ variant = _b === void 0 ? "primary" : _b,
17
+ _c = _a.disabled,
18
+ disabled = _c === void 0 ? false : _c,
19
+ href = _a.href,
20
+ onClick = _a.onClick,
21
+ _d = _a.type,
22
+ type = _d === void 0 ? "button" : _d,
23
+ _e = _a.className,
24
+ className = _e === void 0 ? "" : _e,
25
+ _f = _a.external,
26
+ external = _f === void 0 ? false : _f;
27
+ var classNames = ["lsg-button", "lsg-button--".concat(variant), disabled ? "lsg-button--disabled" : "", className].filter(Boolean).join(" ");
28
+ if (href) {
29
+ return /*#__PURE__*/React.createElement("a", _extends({
30
+ href: disabled ? undefined : href,
31
+ className: classNames,
32
+ "aria-disabled": disabled || undefined,
33
+ onClick: disabled ? undefined : onClick
34
+ }, external ? {
35
+ target: "_blank",
36
+ rel: "noopener noreferrer"
37
+ } : {}), children);
38
+ }
39
+ return /*#__PURE__*/React.createElement("button", {
40
+ type: type,
41
+ className: classNames,
42
+ disabled: disabled,
43
+ onClick: onClick
44
+ }, children);
45
+ };
46
+
47
+ var LsgBanner = function (_a) {
48
+ var heading = _a.heading,
49
+ eyebrow = _a.eyebrow,
50
+ copy = _a.copy,
51
+ cta = _a.cta,
52
+ imageUrl = _a.imageUrl,
53
+ _b = _a.imageAlt,
54
+ imageAlt = _b === void 0 ? "" : _b;
55
+ return /*#__PURE__*/React.createElement("section", {
56
+ className: "lsg-banner"
57
+ }, imageUrl && /*#__PURE__*/React.createElement("div", {
58
+ className: "lsg-banner__background",
59
+ "aria-hidden": "true"
60
+ }, /*#__PURE__*/React.createElement("img", {
61
+ src: imageUrl,
62
+ alt: imageAlt
63
+ })), /*#__PURE__*/React.createElement("div", {
64
+ className: "lsg-banner__inner"
65
+ }, eyebrow && /*#__PURE__*/React.createElement("span", {
66
+ className: "lsg-banner__eyebrow"
67
+ }, eyebrow), /*#__PURE__*/React.createElement("h1", {
68
+ className: "lsg-banner__heading"
69
+ }, heading), copy && /*#__PURE__*/React.createElement("p", {
70
+ className: "lsg-banner__copy"
71
+ }, copy), cta && /*#__PURE__*/React.createElement(LsgButton, {
72
+ href: cta.href,
73
+ external: cta.external,
74
+ variant: "primary",
75
+ className: "lsg-banner__cta"
76
+ }, cta.label)));
77
+ };
78
+
79
+ var LsgCard = function (_a) {
80
+ var title = _a.title,
81
+ description = _a.description,
82
+ imageUrl = _a.imageUrl,
83
+ _b = _a.imageAlt,
84
+ imageAlt = _b === void 0 ? "" : _b,
85
+ href = _a.href,
86
+ cta = _a.cta;
87
+ var inner = /*#__PURE__*/React.createElement(React.Fragment, null, imageUrl && /*#__PURE__*/React.createElement("div", {
88
+ className: "lsg-card__image"
89
+ }, /*#__PURE__*/React.createElement("img", {
90
+ src: imageUrl,
91
+ alt: imageAlt,
92
+ loading: "lazy"
93
+ })), /*#__PURE__*/React.createElement("div", {
94
+ className: "lsg-card__body"
95
+ }, /*#__PURE__*/React.createElement("h3", {
96
+ className: "lsg-card__title"
97
+ }, title), description && /*#__PURE__*/React.createElement("p", {
98
+ className: "lsg-card__description"
99
+ }, description), cta && !href && /*#__PURE__*/React.createElement("div", {
100
+ className: "lsg-card__footer"
101
+ }, /*#__PURE__*/React.createElement(LsgButton, {
102
+ href: cta.href,
103
+ external: cta.external,
104
+ variant: "ghost"
105
+ }, cta.label))));
106
+ if (href) {
107
+ return /*#__PURE__*/React.createElement("article", {
108
+ className: "lsg-card"
109
+ }, /*#__PURE__*/React.createElement("a", {
110
+ href: href,
111
+ className: "lsg-card__link",
112
+ "aria-label": title
113
+ }, inner));
114
+ }
115
+ return /*#__PURE__*/React.createElement("article", {
116
+ className: "lsg-card"
117
+ }, inner);
118
+ };
119
+ /** Renders a responsive grid of LsgCard items. */
120
+ var LsgCards = function (_a) {
121
+ var cards = _a.cards;
122
+ return /*#__PURE__*/React.createElement("ul", {
123
+ className: "lsg-cards"
124
+ }, cards.map(function (card, i) {
125
+ var _a;
126
+ return /*#__PURE__*/React.createElement("li", {
127
+ key: (_a = card.href) !== null && _a !== void 0 ? _a : i
128
+ }, /*#__PURE__*/React.createElement(LsgCard, card));
129
+ }));
130
+ };
131
+
132
+ var LsgLogo = function (_a) {
133
+ var src = _a.src,
134
+ _b = _a.alt,
135
+ alt = _b === void 0 ? "Logo" : _b,
136
+ _c = _a.href,
137
+ href = _c === void 0 ? "/" : _c,
138
+ width = _a.width,
139
+ _d = _a.height,
140
+ height = _d === void 0 ? 40 : _d,
141
+ _e = _a.text,
142
+ text = _e === void 0 ? "Atlas Copco" : _e;
143
+ var content = src ? /*#__PURE__*/React.createElement("img", {
144
+ src: src,
145
+ alt: alt,
146
+ width: width,
147
+ height: height,
148
+ className: "lsg-logo__image"
149
+ }) : /*#__PURE__*/React.createElement("span", {
150
+ className: "lsg-logo__text"
151
+ }, text);
152
+ return /*#__PURE__*/React.createElement("a", {
153
+ href: href,
154
+ className: "lsg-logo",
155
+ "aria-label": src ? alt : undefined
156
+ }, content);
157
+ };
158
+
159
+ var LsgNavigation = function (_a) {
160
+ var items = _a.items,
161
+ _b = _a.label,
162
+ label = _b === void 0 ? "Main navigation" : _b;
163
+ return /*#__PURE__*/React.createElement("nav", {
164
+ className: "lsg-nav",
165
+ "aria-label": label
166
+ }, /*#__PURE__*/React.createElement("ul", {
167
+ className: "lsg-nav__list",
168
+ role: "list"
169
+ }, items.map(function (item) {
170
+ return /*#__PURE__*/React.createElement("li", {
171
+ key: item.href,
172
+ className: "lsg-nav__item"
173
+ }, /*#__PURE__*/React.createElement("a", {
174
+ href: item.href,
175
+ className: ["lsg-nav__link", item.current ? "lsg-nav__link--current" : ""].filter(Boolean).join(" "),
176
+ "aria-current": item.current ? "page" : undefined
177
+ }, item.label));
178
+ })));
179
+ };
180
+
181
+ var ChevronIcon = function () {
182
+ return /*#__PURE__*/React.createElement("svg", {
183
+ xmlns: "http://www.w3.org/2000/svg",
184
+ viewBox: "0 0 12 12",
185
+ fill: "none",
186
+ stroke: "currentColor",
187
+ strokeWidth: "1.5",
188
+ strokeLinecap: "round",
189
+ strokeLinejoin: "round",
190
+ "aria-hidden": "true",
191
+ focusable: "false"
192
+ }, /*#__PURE__*/React.createElement("polyline", {
193
+ points: "2 4 6 8 10 4"
194
+ }));
195
+ };
196
+ /**
197
+ * Language Switcher
198
+ *
199
+ * Hydrated: state managed by React (useState).
200
+ * Clientlib-only: driven by lsg-clientlib.js targeting [data-lsg-lang-switcher].
201
+ */
202
+ var LsgLanguageSwitcher = function (_a) {
203
+ var currentLanguage = _a.currentLanguage,
204
+ languages = _a.languages,
205
+ _b = _a.label,
206
+ label = _b === void 0 ? "Select language" : _b;
207
+ var _c = useState(false),
208
+ isOpen = _c[0],
209
+ setIsOpen = _c[1];
210
+ var containerRef = useRef(null);
211
+ var triggerId = "lsg-lang-trigger";
212
+ var dropdownId = "lsg-lang-dropdown";
213
+ // Close on outside click
214
+ useEffect(function () {
215
+ if (!isOpen) return;
216
+ var handleClick = function (e) {
217
+ if (containerRef.current && !containerRef.current.contains(e.target)) {
218
+ setIsOpen(false);
219
+ }
220
+ };
221
+ document.addEventListener("mousedown", handleClick);
222
+ return function () {
223
+ return document.removeEventListener("mousedown", handleClick);
224
+ };
225
+ }, [isOpen]);
226
+ // Close on Escape
227
+ useEffect(function () {
228
+ if (!isOpen) return;
229
+ var handleKey = function (e) {
230
+ if (e.key === "Escape") setIsOpen(false);
231
+ };
232
+ document.addEventListener("keydown", handleKey);
233
+ return function () {
234
+ return document.removeEventListener("keydown", handleKey);
235
+ };
236
+ }, [isOpen]);
237
+ return /*#__PURE__*/React.createElement("div", {
238
+ className: "lsg-lang-switcher",
239
+ ref: containerRef,
240
+ "data-lsg-lang-switcher": true
241
+ }, /*#__PURE__*/React.createElement("button", {
242
+ id: triggerId,
243
+ type: "button",
244
+ className: "lsg-lang-switcher__trigger",
245
+ "aria-label": label,
246
+ "aria-haspopup": "listbox",
247
+ "aria-expanded": isOpen,
248
+ "aria-controls": dropdownId,
249
+ onClick: function () {
250
+ return setIsOpen(function (prev) {
251
+ return !prev;
252
+ });
253
+ }
254
+ }, currentLanguage, /*#__PURE__*/React.createElement(ChevronIcon, null)), isOpen && /*#__PURE__*/React.createElement("ul", {
255
+ id: dropdownId,
256
+ className: "lsg-lang-switcher__dropdown",
257
+ role: "listbox",
258
+ "aria-labelledby": triggerId
259
+ }, languages.map(function (lang) {
260
+ return /*#__PURE__*/React.createElement("li", {
261
+ key: lang.code,
262
+ className: "lsg-lang-switcher__option",
263
+ role: "option"
264
+ }, /*#__PURE__*/React.createElement("a", {
265
+ href: lang.href,
266
+ className: ["lsg-lang-switcher__option-link", lang.code === currentLanguage ? "lsg-lang-switcher__option-link--active" : ""].filter(Boolean).join(" "),
267
+ "aria-current": lang.code === currentLanguage ? true : undefined
268
+ }, lang.label));
269
+ })));
270
+ };
271
+
272
+ var SearchIcon$1 = function () {
273
+ return /*#__PURE__*/React.createElement("svg", {
274
+ xmlns: "http://www.w3.org/2000/svg",
275
+ viewBox: "0 0 24 24",
276
+ fill: "none",
277
+ stroke: "currentColor",
278
+ strokeWidth: "2",
279
+ strokeLinecap: "round",
280
+ strokeLinejoin: "round",
281
+ "aria-hidden": "true",
282
+ focusable: "false"
283
+ }, /*#__PURE__*/React.createElement("circle", {
284
+ cx: "11",
285
+ cy: "11",
286
+ r: "8"
287
+ }), /*#__PURE__*/React.createElement("line", {
288
+ x1: "21",
289
+ y1: "21",
290
+ x2: "16.65",
291
+ y2: "16.65"
292
+ }));
293
+ };
294
+ var LsgSearchTrigger = function (_a) {
295
+ var _b = _a.label,
296
+ label = _b === void 0 ? "Open search" : _b,
297
+ targetId = _a.targetId,
298
+ onClick = _a.onClick;
299
+ return /*#__PURE__*/React.createElement("button", {
300
+ type: "button",
301
+ className: "lsg-search-trigger",
302
+ "aria-label": label,
303
+ "aria-haspopup": "dialog",
304
+ "aria-controls": targetId,
305
+ onClick: onClick,
306
+ "data-lsg-search-trigger": true
307
+ }, /*#__PURE__*/React.createElement(SearchIcon$1, null));
308
+ };
309
+
310
+ var SearchIcon = function () {
311
+ return /*#__PURE__*/React.createElement("svg", {
312
+ xmlns: "http://www.w3.org/2000/svg",
313
+ viewBox: "0 0 24 24",
314
+ fill: "none",
315
+ stroke: "currentColor",
316
+ strokeWidth: "2",
317
+ strokeLinecap: "round",
318
+ strokeLinejoin: "round",
319
+ "aria-hidden": "true",
320
+ focusable: "false"
321
+ }, /*#__PURE__*/React.createElement("circle", {
322
+ cx: "11",
323
+ cy: "11",
324
+ r: "8"
325
+ }), /*#__PURE__*/React.createElement("line", {
326
+ x1: "21",
327
+ y1: "21",
328
+ x2: "16.65",
329
+ y2: "16.65"
330
+ }));
331
+ };
332
+ var CloseIcon = function () {
333
+ return /*#__PURE__*/React.createElement("svg", {
334
+ xmlns: "http://www.w3.org/2000/svg",
335
+ viewBox: "0 0 24 24",
336
+ fill: "none",
337
+ stroke: "currentColor",
338
+ strokeWidth: "2",
339
+ strokeLinecap: "round",
340
+ strokeLinejoin: "round",
341
+ "aria-hidden": "true",
342
+ focusable: "false"
343
+ }, /*#__PURE__*/React.createElement("line", {
344
+ x1: "18",
345
+ y1: "6",
346
+ x2: "6",
347
+ y2: "18"
348
+ }), /*#__PURE__*/React.createElement("line", {
349
+ x1: "6",
350
+ y1: "6",
351
+ x2: "18",
352
+ y2: "18"
353
+ }));
354
+ };
355
+ /**
356
+ * Search Overlay
357
+ *
358
+ * Hydrated: isOpen/onClose controlled by parent (e.g. LsgHeader).
359
+ * Clientlib-only: driven by lsg-clientlib.js targeting [data-lsg-search-overlay].
360
+ * The CSS class lsg-search-overlay--open drives visibility in both modes.
361
+ */
362
+ var LsgSearchOverlay = function (_a) {
363
+ var _b = _a.id,
364
+ id = _b === void 0 ? "lsg-search-overlay" : _b,
365
+ _c = _a.placeholder,
366
+ placeholder = _c === void 0 ? "Search…" : _c,
367
+ _d = _a.label,
368
+ label = _d === void 0 ? "Search" : _d,
369
+ _e = _a.isOpen,
370
+ isOpen = _e === void 0 ? false : _e,
371
+ onClose = _a.onClose,
372
+ onSearch = _a.onSearch;
373
+ var inputRef = useRef(null);
374
+ var inputId = "".concat(id, "-input");
375
+ // Focus the input when overlay opens
376
+ useEffect(function () {
377
+ var _a;
378
+ if (isOpen) (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
379
+ }, [isOpen]);
380
+ // Close on Escape
381
+ useEffect(function () {
382
+ if (!isOpen) return;
383
+ var handleKey = function (e) {
384
+ if (e.key === "Escape") onClose === null || onClose === void 0 ? void 0 : onClose();
385
+ };
386
+ document.addEventListener("keydown", handleKey);
387
+ return function () {
388
+ return document.removeEventListener("keydown", handleKey);
389
+ };
390
+ }, [isOpen, onClose]);
391
+ var handleSubmit = function (e) {
392
+ var _a, _b;
393
+ e.preventDefault();
394
+ var query = (_b = (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : "";
395
+ if (query.trim()) onSearch === null || onSearch === void 0 ? void 0 : onSearch(query.trim());
396
+ };
397
+ var overlayClass = ["lsg-search-overlay", isOpen ? "lsg-search-overlay--open" : ""].filter(Boolean).join(" ");
398
+ return /*#__PURE__*/React.createElement("div", {
399
+ id: id,
400
+ className: overlayClass,
401
+ role: "dialog",
402
+ "aria-modal": "true",
403
+ "aria-label": label,
404
+ "data-lsg-search-overlay": true
405
+ }, /*#__PURE__*/React.createElement("div", {
406
+ className: "lsg-search-overlay__backdrop",
407
+ "aria-hidden": "true",
408
+ onClick: onClose,
409
+ style: {
410
+ position: "absolute",
411
+ inset: 0,
412
+ cursor: "default"
413
+ }
414
+ }), /*#__PURE__*/React.createElement("div", {
415
+ className: "lsg-search-overlay__panel"
416
+ }, /*#__PURE__*/React.createElement("form", {
417
+ className: "lsg-search-overlay__form",
418
+ role: "search",
419
+ onSubmit: handleSubmit
420
+ }, /*#__PURE__*/React.createElement("label", {
421
+ htmlFor: inputId,
422
+ className: "lsg-search-overlay__label"
423
+ }, /*#__PURE__*/React.createElement(SearchIcon, null), /*#__PURE__*/React.createElement("span", {
424
+ className: "lsg-visually-hidden"
425
+ }, label)), /*#__PURE__*/React.createElement("input", {
426
+ id: inputId,
427
+ ref: inputRef,
428
+ type: "search",
429
+ className: "lsg-search-overlay__input",
430
+ placeholder: placeholder,
431
+ autoComplete: "off"
432
+ }), /*#__PURE__*/React.createElement("button", {
433
+ type: "submit",
434
+ className: "lsg-search-overlay__submit",
435
+ "aria-label": "Submit search"
436
+ }, /*#__PURE__*/React.createElement(SearchIcon, null)), /*#__PURE__*/React.createElement("button", {
437
+ type: "button",
438
+ className: "lsg-search-overlay__close",
439
+ "aria-label": "Close search",
440
+ onClick: onClose
441
+ }, /*#__PURE__*/React.createElement(CloseIcon, null)))));
442
+ };
443
+
444
+ var SEARCH_OVERLAY_ID = "lsg-header-search-overlay";
445
+ var LsgHeader = function (_a) {
446
+ var logo = _a.logo,
447
+ _b = _a.navItems,
448
+ navItems = _b === void 0 ? [] : _b,
449
+ _c = _a.languages,
450
+ languages = _c === void 0 ? [] : _c,
451
+ _d = _a.currentLanguage,
452
+ currentLanguage = _d === void 0 ? "EN" : _d,
453
+ _e = _a.searchLabel,
454
+ searchLabel = _e === void 0 ? "Open search" : _e,
455
+ _f = _a.searchPlaceholder,
456
+ searchPlaceholder = _f === void 0 ? "Search products, documents…" : _f;
457
+ var _g = useState(false),
458
+ searchOpen = _g[0],
459
+ setSearchOpen = _g[1];
460
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("header", {
461
+ className: "lsg-header"
462
+ }, /*#__PURE__*/React.createElement("div", {
463
+ className: "lsg-header__inner"
464
+ }, /*#__PURE__*/React.createElement("div", {
465
+ className: "lsg-header__brand"
466
+ }, /*#__PURE__*/React.createElement(LsgLogo, logo)), navItems.length > 0 && /*#__PURE__*/React.createElement("div", {
467
+ className: "lsg-header__nav"
468
+ }, /*#__PURE__*/React.createElement(LsgNavigation, {
469
+ items: navItems
470
+ })), /*#__PURE__*/React.createElement("div", {
471
+ className: "lsg-header__actions"
472
+ }, languages.length > 0 && /*#__PURE__*/React.createElement(LsgLanguageSwitcher, {
473
+ currentLanguage: currentLanguage,
474
+ languages: languages
475
+ }), /*#__PURE__*/React.createElement(LsgSearchTrigger, {
476
+ label: searchLabel,
477
+ targetId: SEARCH_OVERLAY_ID,
478
+ onClick: function () {
479
+ return setSearchOpen(true);
480
+ }
481
+ })))), /*#__PURE__*/React.createElement(LsgSearchOverlay, {
482
+ id: SEARCH_OVERLAY_ID,
483
+ isOpen: searchOpen,
484
+ onClose: function () {
485
+ return setSearchOpen(false);
486
+ },
487
+ placeholder: searchPlaceholder
488
+ }));
489
+ };
490
+
491
+ var LsgQuickLinks = function (_a) {
492
+ var heading = _a.heading,
493
+ links = _a.links;
494
+ return /*#__PURE__*/React.createElement("nav", {
495
+ className: "lsg-quick-links",
496
+ "aria-label": heading !== null && heading !== void 0 ? heading : "Quick links"
497
+ }, heading && /*#__PURE__*/React.createElement("p", {
498
+ className: "lsg-quick-links__heading",
499
+ "aria-hidden": "true"
500
+ }, heading), /*#__PURE__*/React.createElement("ul", {
501
+ className: "lsg-quick-links__list",
502
+ role: "list"
503
+ }, links.map(function (link) {
504
+ return /*#__PURE__*/React.createElement("li", {
505
+ key: link.href,
506
+ className: "lsg-quick-links__item"
507
+ }, /*#__PURE__*/React.createElement("a", {
508
+ href: link.href,
509
+ className: "lsg-quick-links__link"
510
+ }, link.label));
511
+ })));
512
+ };
513
+
514
+ var platformIcons = {
515
+ linkedin: /*#__PURE__*/React.createElement("svg", {
516
+ viewBox: "0 0 24 24",
517
+ xmlns: "http://www.w3.org/2000/svg",
518
+ "aria-hidden": "true",
519
+ focusable: "false"
520
+ }, /*#__PURE__*/React.createElement("path", {
521
+ d: "M20.45 20.45h-3.56v-5.57c0-1.33-.03-3.04-1.85-3.04-1.86 0-2.14 1.45-2.14 2.95v5.66H9.34V9h3.41v1.56h.05c.48-.9 1.64-1.85 3.37-1.85 3.6 0 4.27 2.37 4.27 5.45v6.29zM5.34 7.43a2.07 2.07 0 1 1 0-4.14 2.07 2.07 0 0 1 0 4.14zM7.12 20.45H3.55V9h3.57v11.45z"
522
+ })),
523
+ twitter: /*#__PURE__*/React.createElement("svg", {
524
+ viewBox: "0 0 24 24",
525
+ xmlns: "http://www.w3.org/2000/svg",
526
+ "aria-hidden": "true",
527
+ focusable: "false"
528
+ }, /*#__PURE__*/React.createElement("path", {
529
+ d: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"
530
+ })),
531
+ facebook: /*#__PURE__*/React.createElement("svg", {
532
+ viewBox: "0 0 24 24",
533
+ xmlns: "http://www.w3.org/2000/svg",
534
+ "aria-hidden": "true",
535
+ focusable: "false"
536
+ }, /*#__PURE__*/React.createElement("path", {
537
+ d: "M24 12.073C24 5.405 18.627 0 12 0S0 5.405 0 12.073C0 18.1 4.388 23.094 10.125 24v-8.437H7.078v-3.49h3.047V9.41c0-3.025 1.792-4.697 4.533-4.697 1.312 0 2.686.236 2.686.236v2.97h-1.513c-1.491 0-1.956.93-1.956 1.874v2.25h3.328l-.532 3.49h-2.796V24C19.612 23.094 24 18.1 24 12.073z"
538
+ })),
539
+ instagram: /*#__PURE__*/React.createElement("svg", {
540
+ viewBox: "0 0 24 24",
541
+ xmlns: "http://www.w3.org/2000/svg",
542
+ "aria-hidden": "true",
543
+ focusable: "false"
544
+ }, /*#__PURE__*/React.createElement("path", {
545
+ d: "M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zM12 0C8.741 0 8.333.014 7.053.072 2.695.272.273 2.69.073 7.052.014 8.333 0 8.741 0 12c0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98C8.333 23.986 8.741 24 12 24c3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98C15.668.014 15.259 0 12 0zm0 5.838a6.162 6.162 0 1 0 0 12.324 6.162 6.162 0 0 0 0-12.324zM12 16a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm6.406-11.845a1.44 1.44 0 1 0 0 2.881 1.44 1.44 0 0 0 0-2.881z"
546
+ })),
547
+ youtube: /*#__PURE__*/React.createElement("svg", {
548
+ viewBox: "0 0 24 24",
549
+ xmlns: "http://www.w3.org/2000/svg",
550
+ "aria-hidden": "true",
551
+ focusable: "false"
552
+ }, /*#__PURE__*/React.createElement("path", {
553
+ d: "M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"
554
+ }))
555
+ };
556
+ var LsgSocialMediaIcons = function (_a) {
557
+ var items = _a.items;
558
+ return /*#__PURE__*/React.createElement("ul", {
559
+ className: "lsg-social-icons",
560
+ role: "list"
561
+ }, items.map(function (item) {
562
+ return /*#__PURE__*/React.createElement("li", {
563
+ key: item.platform,
564
+ className: "lsg-social-icons__item"
565
+ }, /*#__PURE__*/React.createElement("a", {
566
+ href: item.href,
567
+ className: "lsg-social-icons__link",
568
+ "aria-label": item.label,
569
+ target: "_blank",
570
+ rel: "noopener noreferrer"
571
+ }, platformIcons[item.platform]));
572
+ }));
573
+ };
574
+
575
+ var LsgFooter = function (_a) {
576
+ var logo = _a.logo,
577
+ tagline = _a.tagline,
578
+ _b = _a.quickLinksGroups,
579
+ quickLinksGroups = _b === void 0 ? [] : _b,
580
+ _c = _a.socialItems,
581
+ socialItems = _c === void 0 ? [] : _c,
582
+ copyright = _a.copyright;
583
+ var year = new Date().getFullYear();
584
+ return /*#__PURE__*/React.createElement("footer", {
585
+ className: "lsg-footer"
586
+ }, /*#__PURE__*/React.createElement("div", {
587
+ className: "lsg-footer__inner"
588
+ }, /*#__PURE__*/React.createElement("div", {
589
+ className: "lsg-footer__brand"
590
+ }, /*#__PURE__*/React.createElement(LsgLogo, logo), tagline && /*#__PURE__*/React.createElement("p", {
591
+ className: "lsg-footer__tagline"
592
+ }, tagline), socialItems.length > 0 && /*#__PURE__*/React.createElement(LsgSocialMediaIcons, {
593
+ items: socialItems
594
+ })), quickLinksGroups.length > 0 && /*#__PURE__*/React.createElement("div", {
595
+ className: "lsg-footer__nav"
596
+ }, quickLinksGroups.map(function (group, i) {
597
+ var _a;
598
+ return /*#__PURE__*/React.createElement(LsgQuickLinks, _extends({
599
+ key: (_a = group.heading) !== null && _a !== void 0 ? _a : i
600
+ }, group));
601
+ }))), /*#__PURE__*/React.createElement("div", {
602
+ className: "lsg-footer__bottom"
603
+ }, /*#__PURE__*/React.createElement("p", {
604
+ className: "lsg-footer__copyright"
605
+ }, copyright !== null && copyright !== void 0 ? copyright : "\u00A9 ".concat(year, " Atlas Copco AB. All rights reserved."))));
606
+ };
607
+
608
+ var BASE_COMPONENTS = {
609
+ LsgButton: LsgButton,
610
+ LsgBanner: LsgBanner,
611
+ LsgCard: LsgCard,
612
+ LsgCards: LsgCards,
613
+ LsgLogo: LsgLogo,
614
+ LsgNavigation: LsgNavigation,
615
+ LsgLanguageSwitcher: LsgLanguageSwitcher,
616
+ LsgSearchTrigger: LsgSearchTrigger,
617
+ LsgSearchOverlay: LsgSearchOverlay,
618
+ LsgHeader: LsgHeader,
619
+ LsgQuickLinks: LsgQuickLinks,
620
+ LsgSocialMediaIcons: LsgSocialMediaIcons,
621
+ LsgFooter: LsgFooter
622
+ };
623
+ function createThemeComponent(themeName, componentName, Component) {
624
+ var WrappedComponent = function (props) {
625
+ return /*#__PURE__*/React.createElement("div", {
626
+ className: ["lsg-themed-component", "lsg-themed-component--".concat(themeName), "lsg-themed-component--".concat(componentName)].join(" ")
627
+ }, /*#__PURE__*/React.createElement(Component, props));
628
+ };
629
+ WrappedComponent.displayName = "".concat(themeName, "-").concat(componentName);
630
+ return WrappedComponent;
631
+ }
632
+ function createThemeComponents(themeName) {
633
+ return {
634
+ LsgButton: createThemeComponent(themeName, "button", BASE_COMPONENTS.LsgButton),
635
+ LsgBanner: createThemeComponent(themeName, "banner", BASE_COMPONENTS.LsgBanner),
636
+ LsgCard: createThemeComponent(themeName, "card", BASE_COMPONENTS.LsgCard),
637
+ LsgCards: createThemeComponent(themeName, "cards", BASE_COMPONENTS.LsgCards),
638
+ LsgLogo: createThemeComponent(themeName, "logo", BASE_COMPONENTS.LsgLogo),
639
+ LsgNavigation: createThemeComponent(themeName, "navigation", BASE_COMPONENTS.LsgNavigation),
640
+ LsgLanguageSwitcher: createThemeComponent(themeName, "language-switcher", BASE_COMPONENTS.LsgLanguageSwitcher),
641
+ LsgSearchTrigger: createThemeComponent(themeName, "search-trigger", BASE_COMPONENTS.LsgSearchTrigger),
642
+ LsgSearchOverlay: createThemeComponent(themeName, "search-overlay", BASE_COMPONENTS.LsgSearchOverlay),
643
+ LsgHeader: createThemeComponent(themeName, "header", BASE_COMPONENTS.LsgHeader),
644
+ LsgQuickLinks: createThemeComponent(themeName, "quick-links", BASE_COMPONENTS.LsgQuickLinks),
645
+ LsgSocialMediaIcons: createThemeComponent(themeName, "social-media-icons", BASE_COMPONENTS.LsgSocialMediaIcons),
646
+ LsgFooter: createThemeComponent(themeName, "footer", BASE_COMPONENTS.LsgFooter)
647
+ };
648
+ }
649
+
650
+ var theme1Components = createThemeComponents("theme-1");
651
+ var Theme1LsgButton = theme1Components.LsgButton,
652
+ Theme1LsgBanner = theme1Components.LsgBanner,
653
+ Theme1LsgCard = theme1Components.LsgCard,
654
+ Theme1LsgCards = theme1Components.LsgCards,
655
+ Theme1LsgLogo = theme1Components.LsgLogo,
656
+ Theme1LsgNavigation = theme1Components.LsgNavigation,
657
+ Theme1LsgLanguageSwitcher = theme1Components.LsgLanguageSwitcher,
658
+ Theme1LsgSearchTrigger = theme1Components.LsgSearchTrigger,
659
+ Theme1LsgSearchOverlay = theme1Components.LsgSearchOverlay,
660
+ Theme1LsgHeader = theme1Components.LsgHeader,
661
+ Theme1LsgQuickLinks = theme1Components.LsgQuickLinks,
662
+ Theme1LsgSocialMediaIcons = theme1Components.LsgSocialMediaIcons,
663
+ Theme1LsgFooter = theme1Components.LsgFooter;
664
+
665
+ var theme2Components = createThemeComponents("theme-2");
666
+ var Theme2LsgButton = theme2Components.LsgButton,
667
+ Theme2LsgBanner = theme2Components.LsgBanner,
668
+ Theme2LsgCard = theme2Components.LsgCard,
669
+ Theme2LsgCards = theme2Components.LsgCards,
670
+ Theme2LsgLogo = theme2Components.LsgLogo,
671
+ Theme2LsgNavigation = theme2Components.LsgNavigation,
672
+ Theme2LsgLanguageSwitcher = theme2Components.LsgLanguageSwitcher,
673
+ Theme2LsgSearchTrigger = theme2Components.LsgSearchTrigger,
674
+ Theme2LsgSearchOverlay = theme2Components.LsgSearchOverlay,
675
+ Theme2LsgHeader = theme2Components.LsgHeader,
676
+ Theme2LsgQuickLinks = theme2Components.LsgQuickLinks,
677
+ Theme2LsgSocialMediaIcons = theme2Components.LsgSocialMediaIcons,
678
+ Theme2LsgFooter = theme2Components.LsgFooter;
679
+
680
+ var theme3Components = createThemeComponents("theme-3");
681
+ var Theme3LsgButton = theme3Components.LsgButton,
682
+ Theme3LsgBanner = theme3Components.LsgBanner,
683
+ Theme3LsgCard = theme3Components.LsgCard,
684
+ Theme3LsgCards = theme3Components.LsgCards,
685
+ Theme3LsgLogo = theme3Components.LsgLogo,
686
+ Theme3LsgNavigation = theme3Components.LsgNavigation,
687
+ Theme3LsgLanguageSwitcher = theme3Components.LsgLanguageSwitcher,
688
+ Theme3LsgSearchTrigger = theme3Components.LsgSearchTrigger,
689
+ Theme3LsgSearchOverlay = theme3Components.LsgSearchOverlay,
690
+ Theme3LsgHeader = theme3Components.LsgHeader,
691
+ Theme3LsgQuickLinks = theme3Components.LsgQuickLinks,
692
+ Theme3LsgSocialMediaIcons = theme3Components.LsgSocialMediaIcons,
693
+ Theme3LsgFooter = theme3Components.LsgFooter;
694
+
695
+ export { LsgBanner, LsgButton, LsgCard, LsgCards, LsgFooter, LsgHeader, LsgLanguageSwitcher, LsgLogo, LsgNavigation, LsgQuickLinks, LsgSearchOverlay, LsgSearchTrigger, LsgSocialMediaIcons, Theme1LsgBanner, Theme1LsgButton, Theme1LsgCard, Theme1LsgCards, Theme1LsgFooter, Theme1LsgHeader, Theme1LsgLanguageSwitcher, Theme1LsgLogo, Theme1LsgNavigation, Theme1LsgQuickLinks, Theme1LsgSearchOverlay, Theme1LsgSearchTrigger, Theme1LsgSocialMediaIcons, Theme2LsgBanner, Theme2LsgButton, Theme2LsgCard, Theme2LsgCards, Theme2LsgFooter, Theme2LsgHeader, Theme2LsgLanguageSwitcher, Theme2LsgLogo, Theme2LsgNavigation, Theme2LsgQuickLinks, Theme2LsgSearchOverlay, Theme2LsgSearchTrigger, Theme2LsgSocialMediaIcons, Theme3LsgBanner, Theme3LsgButton, Theme3LsgCard, Theme3LsgCards, Theme3LsgFooter, Theme3LsgHeader, Theme3LsgLanguageSwitcher, Theme3LsgLogo, Theme3LsgNavigation, Theme3LsgQuickLinks, Theme3LsgSearchOverlay, Theme3LsgSearchTrigger, Theme3LsgSocialMediaIcons, theme1Components, theme2Components, theme3Components };
696
+ //# sourceMappingURL=index.esm.js.map