@asante-org/leybold-design-system 1.3.2 → 1.3.3
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.
- package/README.md +163 -163
- package/dist/app/layout.d.ts +9 -0
- package/dist/app/page.d.ts +2 -0
- package/dist/assets/.gitkeep +2 -2
- package/dist/assets/desktop-layout-alt.svg +27 -27
- package/dist/assets/desktop-layout.svg +29 -29
- package/dist/assets/globe.svg +7 -7
- package/dist/assets/leybold-footer-logo.svg +19 -19
- package/dist/assets/leybold-white.svg +18 -18
- package/dist/assets/list-product-overlay-tip-active.svg +3 -3
- package/dist/assets/list-product-overlay-tip.svg +3 -3
- package/dist/assets/logo-example.svg +9 -9
- package/dist/assets/logo.svg +19 -19
- package/dist/assets/phone-layout.svg +14 -14
- package/dist/assets/red-tip.svg +10 -10
- package/dist/assets/tablet-layout.svg +28 -28
- package/dist/index.css +88 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.esm.css +88 -0
- package/dist/index.esm.js +155 -155
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +247 -289
- package/dist/index.js.map +1 -1
- package/dist/src/experience/qr-form-journey/QrFormJourney.d.ts +1 -0
- package/dist/stories/components/Algolia-dynamic-search/algolia-dynamic-search.d.ts +4 -0
- package/dist/stories/components/Algolia-dynamic-search/algolia-dynamic-search.stories.d.ts +7 -0
- package/dist/stories/components/Button/Button.d.ts +35 -0
- package/dist/stories/components/Button/Button.stories.d.ts +15 -0
- package/dist/stories/components/Button/index.d.ts +2 -0
- package/dist/stories/components/QRFormJourney/Qr-form/Qr-form.d.ts +2 -0
- package/dist/stories/components/QRFormJourney/Qr-form/Qr-form.stories.d.ts +7 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/styles/index.d.ts +1 -0
- package/package.json +115 -115
package/dist/index.css
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
.Button-module__button___yfSXe {
|
|
2
|
+
display: inline-flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
justify-content: center;
|
|
5
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
|
|
6
|
+
font-weight: 600;
|
|
7
|
+
line-height: 1.5;
|
|
8
|
+
text-align: center;
|
|
9
|
+
text-decoration: none;
|
|
10
|
+
vertical-align: middle;
|
|
11
|
+
cursor: pointer;
|
|
12
|
+
-webkit-user-select: none;
|
|
13
|
+
-moz-user-select: none;
|
|
14
|
+
user-select: none;
|
|
15
|
+
border: 2px solid transparent;
|
|
16
|
+
border-radius: 4px;
|
|
17
|
+
transition: all 0.2s ease-in-out;
|
|
18
|
+
}
|
|
19
|
+
.Button-module__button___yfSXe:focus-visible {
|
|
20
|
+
outline: 2px solid #0066cc;
|
|
21
|
+
outline-offset: 2px;
|
|
22
|
+
}
|
|
23
|
+
.Button-module__button--primary___XhVfu {
|
|
24
|
+
color: white;
|
|
25
|
+
background-color: #0066cc;
|
|
26
|
+
border-color: #0066cc;
|
|
27
|
+
}
|
|
28
|
+
.Button-module__button--primary___XhVfu:hover:not(.Button-module__button--disabled___zC2nI) {
|
|
29
|
+
background-color: rgb(0, 76.5, 153);
|
|
30
|
+
border-color: rgb(0, 76.5, 153);
|
|
31
|
+
}
|
|
32
|
+
.Button-module__button--primary___XhVfu:active:not(.Button-module__button--disabled___zC2nI) {
|
|
33
|
+
background-color: rgb(0, 63.75, 127.5);
|
|
34
|
+
border-color: rgb(0, 63.75, 127.5);
|
|
35
|
+
}
|
|
36
|
+
.Button-module__button--secondary___iFz5O {
|
|
37
|
+
color: white;
|
|
38
|
+
background-color: #6c757d;
|
|
39
|
+
border-color: #6c757d;
|
|
40
|
+
}
|
|
41
|
+
.Button-module__button--secondary___iFz5O:hover:not(.Button-module__button--disabled___zC2nI) {
|
|
42
|
+
background-color: rgb(84.3605150215, 91.3905579399, 97.6394849785);
|
|
43
|
+
border-color: rgb(84.3605150215, 91.3905579399, 97.6394849785);
|
|
44
|
+
}
|
|
45
|
+
.Button-module__button--secondary___iFz5O:active:not(.Button-module__button--disabled___zC2nI) {
|
|
46
|
+
background-color: rgb(72.5407725322, 78.5858369099, 83.9592274678);
|
|
47
|
+
border-color: rgb(72.5407725322, 78.5858369099, 83.9592274678);
|
|
48
|
+
}
|
|
49
|
+
.Button-module__button--outline___G4qIX {
|
|
50
|
+
color: #0066cc;
|
|
51
|
+
background-color: transparent;
|
|
52
|
+
border-color: #0066cc;
|
|
53
|
+
}
|
|
54
|
+
.Button-module__button--outline___G4qIX:hover:not(.Button-module__button--disabled___zC2nI) {
|
|
55
|
+
color: white;
|
|
56
|
+
background-color: #0066cc;
|
|
57
|
+
}
|
|
58
|
+
.Button-module__button--outline___G4qIX:active:not(.Button-module__button--disabled___zC2nI) {
|
|
59
|
+
background-color: rgb(0, 76.5, 153);
|
|
60
|
+
border-color: rgb(0, 76.5, 153);
|
|
61
|
+
}
|
|
62
|
+
.Button-module__button--text___6Kh5s {
|
|
63
|
+
color: #0066cc;
|
|
64
|
+
background-color: transparent;
|
|
65
|
+
border-color: transparent;
|
|
66
|
+
}
|
|
67
|
+
.Button-module__button--text___6Kh5s:hover:not(.Button-module__button--disabled___zC2nI) {
|
|
68
|
+
background-color: rgba(0, 102, 204, 0.1);
|
|
69
|
+
}
|
|
70
|
+
.Button-module__button--text___6Kh5s:active:not(.Button-module__button--disabled___zC2nI) {
|
|
71
|
+
background-color: rgba(0, 102, 204, 0.2);
|
|
72
|
+
}
|
|
73
|
+
.Button-module__button--small___T4-Pw {
|
|
74
|
+
padding: 0.5rem 1rem;
|
|
75
|
+
font-size: 0.875rem;
|
|
76
|
+
}
|
|
77
|
+
.Button-module__button--medium___EwhUs {
|
|
78
|
+
padding: 1rem 1.5rem;
|
|
79
|
+
font-size: 1rem;
|
|
80
|
+
}
|
|
81
|
+
.Button-module__button--large___uuXbF {
|
|
82
|
+
padding: 1.5rem 2rem;
|
|
83
|
+
font-size: 1.125rem;
|
|
84
|
+
}
|
|
85
|
+
.Button-module__button--disabled___zC2nI {
|
|
86
|
+
opacity: 0.5;
|
|
87
|
+
cursor: not-allowed;
|
|
88
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
.Button-module__button___yfSXe {
|
|
2
|
+
display: inline-flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
justify-content: center;
|
|
5
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
|
|
6
|
+
font-weight: 600;
|
|
7
|
+
line-height: 1.5;
|
|
8
|
+
text-align: center;
|
|
9
|
+
text-decoration: none;
|
|
10
|
+
vertical-align: middle;
|
|
11
|
+
cursor: pointer;
|
|
12
|
+
-webkit-user-select: none;
|
|
13
|
+
-moz-user-select: none;
|
|
14
|
+
user-select: none;
|
|
15
|
+
border: 2px solid transparent;
|
|
16
|
+
border-radius: 4px;
|
|
17
|
+
transition: all 0.2s ease-in-out;
|
|
18
|
+
}
|
|
19
|
+
.Button-module__button___yfSXe:focus-visible {
|
|
20
|
+
outline: 2px solid #0066cc;
|
|
21
|
+
outline-offset: 2px;
|
|
22
|
+
}
|
|
23
|
+
.Button-module__button--primary___XhVfu {
|
|
24
|
+
color: white;
|
|
25
|
+
background-color: #0066cc;
|
|
26
|
+
border-color: #0066cc;
|
|
27
|
+
}
|
|
28
|
+
.Button-module__button--primary___XhVfu:hover:not(.Button-module__button--disabled___zC2nI) {
|
|
29
|
+
background-color: rgb(0, 76.5, 153);
|
|
30
|
+
border-color: rgb(0, 76.5, 153);
|
|
31
|
+
}
|
|
32
|
+
.Button-module__button--primary___XhVfu:active:not(.Button-module__button--disabled___zC2nI) {
|
|
33
|
+
background-color: rgb(0, 63.75, 127.5);
|
|
34
|
+
border-color: rgb(0, 63.75, 127.5);
|
|
35
|
+
}
|
|
36
|
+
.Button-module__button--secondary___iFz5O {
|
|
37
|
+
color: white;
|
|
38
|
+
background-color: #6c757d;
|
|
39
|
+
border-color: #6c757d;
|
|
40
|
+
}
|
|
41
|
+
.Button-module__button--secondary___iFz5O:hover:not(.Button-module__button--disabled___zC2nI) {
|
|
42
|
+
background-color: rgb(84.3605150215, 91.3905579399, 97.6394849785);
|
|
43
|
+
border-color: rgb(84.3605150215, 91.3905579399, 97.6394849785);
|
|
44
|
+
}
|
|
45
|
+
.Button-module__button--secondary___iFz5O:active:not(.Button-module__button--disabled___zC2nI) {
|
|
46
|
+
background-color: rgb(72.5407725322, 78.5858369099, 83.9592274678);
|
|
47
|
+
border-color: rgb(72.5407725322, 78.5858369099, 83.9592274678);
|
|
48
|
+
}
|
|
49
|
+
.Button-module__button--outline___G4qIX {
|
|
50
|
+
color: #0066cc;
|
|
51
|
+
background-color: transparent;
|
|
52
|
+
border-color: #0066cc;
|
|
53
|
+
}
|
|
54
|
+
.Button-module__button--outline___G4qIX:hover:not(.Button-module__button--disabled___zC2nI) {
|
|
55
|
+
color: white;
|
|
56
|
+
background-color: #0066cc;
|
|
57
|
+
}
|
|
58
|
+
.Button-module__button--outline___G4qIX:active:not(.Button-module__button--disabled___zC2nI) {
|
|
59
|
+
background-color: rgb(0, 76.5, 153);
|
|
60
|
+
border-color: rgb(0, 76.5, 153);
|
|
61
|
+
}
|
|
62
|
+
.Button-module__button--text___6Kh5s {
|
|
63
|
+
color: #0066cc;
|
|
64
|
+
background-color: transparent;
|
|
65
|
+
border-color: transparent;
|
|
66
|
+
}
|
|
67
|
+
.Button-module__button--text___6Kh5s:hover:not(.Button-module__button--disabled___zC2nI) {
|
|
68
|
+
background-color: rgba(0, 102, 204, 0.1);
|
|
69
|
+
}
|
|
70
|
+
.Button-module__button--text___6Kh5s:active:not(.Button-module__button--disabled___zC2nI) {
|
|
71
|
+
background-color: rgba(0, 102, 204, 0.2);
|
|
72
|
+
}
|
|
73
|
+
.Button-module__button--small___T4-Pw {
|
|
74
|
+
padding: 0.5rem 1rem;
|
|
75
|
+
font-size: 0.875rem;
|
|
76
|
+
}
|
|
77
|
+
.Button-module__button--medium___EwhUs {
|
|
78
|
+
padding: 1rem 1.5rem;
|
|
79
|
+
font-size: 1rem;
|
|
80
|
+
}
|
|
81
|
+
.Button-module__button--large___uuXbF {
|
|
82
|
+
padding: 1.5rem 2rem;
|
|
83
|
+
font-size: 1.125rem;
|
|
84
|
+
}
|
|
85
|
+
.Button-module__button--disabled___zC2nI {
|
|
86
|
+
opacity: 0.5;
|
|
87
|
+
cursor: not-allowed;
|
|
88
|
+
}
|
package/dist/index.esm.js
CHANGED
|
@@ -92,20 +92,20 @@ function requireClassnames() {
|
|
|
92
92
|
var classnamesExports = requireClassnames();
|
|
93
93
|
var classNames = /*@__PURE__*/getDefaultExportFromCjs(classnamesExports);
|
|
94
94
|
|
|
95
|
-
/**
|
|
96
|
-
* Button variant types
|
|
95
|
+
/**
|
|
96
|
+
* Button variant types
|
|
97
97
|
*/
|
|
98
98
|
|
|
99
|
-
/**
|
|
100
|
-
* Icon types for button
|
|
99
|
+
/**
|
|
100
|
+
* Icon types for button
|
|
101
101
|
*/
|
|
102
102
|
|
|
103
|
-
/**
|
|
104
|
-
* Icon position
|
|
103
|
+
/**
|
|
104
|
+
* Icon position
|
|
105
105
|
*/
|
|
106
106
|
|
|
107
|
-
/**
|
|
108
|
-
* Get the icon component based on icon type
|
|
107
|
+
/**
|
|
108
|
+
* Get the icon component based on icon type
|
|
109
109
|
*/
|
|
110
110
|
const getIcon = icon => {
|
|
111
111
|
switch (icon) {
|
|
@@ -130,8 +130,8 @@ const getIcon = icon => {
|
|
|
130
130
|
}
|
|
131
131
|
};
|
|
132
132
|
|
|
133
|
-
/**
|
|
134
|
-
* Get default icon for certain variants
|
|
133
|
+
/**
|
|
134
|
+
* Get default icon for certain variants
|
|
135
135
|
*/
|
|
136
136
|
const getDefaultIcon = variant => {
|
|
137
137
|
switch (variant) {
|
|
@@ -151,8 +151,8 @@ const getDefaultIcon = variant => {
|
|
|
151
151
|
}
|
|
152
152
|
};
|
|
153
153
|
|
|
154
|
-
/**
|
|
155
|
-
* Map alias variants to their actual CSS class variants
|
|
154
|
+
/**
|
|
155
|
+
* Map alias variants to their actual CSS class variants
|
|
156
156
|
*/
|
|
157
157
|
const mapVariantToClass = variant => {
|
|
158
158
|
switch (variant) {
|
|
@@ -163,8 +163,8 @@ const mapVariantToClass = variant => {
|
|
|
163
163
|
}
|
|
164
164
|
};
|
|
165
165
|
|
|
166
|
-
/**
|
|
167
|
-
* Primary UI component for user interaction
|
|
166
|
+
/**
|
|
167
|
+
* Primary UI component for user interaction
|
|
168
168
|
*/
|
|
169
169
|
const Button = ({
|
|
170
170
|
children,
|
|
@@ -390,8 +390,8 @@ const CarouselCard = ({
|
|
|
390
390
|
|
|
391
391
|
var styles$j = {"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"};
|
|
392
392
|
|
|
393
|
-
/**
|
|
394
|
-
* External link icon (↗) for footer links that open in new tabs
|
|
393
|
+
/**
|
|
394
|
+
* External link icon (↗) for footer links that open in new tabs
|
|
395
395
|
*/
|
|
396
396
|
const ExternalLinkIcon = ({
|
|
397
397
|
className,
|
|
@@ -412,8 +412,8 @@ const ExternalLinkIcon = ({
|
|
|
412
412
|
strokeLinejoin: "round"
|
|
413
413
|
}));
|
|
414
414
|
|
|
415
|
-
/**
|
|
416
|
-
* Atlas Copco Group badge icon (square)
|
|
415
|
+
/**
|
|
416
|
+
* Atlas Copco Group badge icon (square)
|
|
417
417
|
*/
|
|
418
418
|
const AtlasCopcoIcon = ({
|
|
419
419
|
className,
|
|
@@ -589,11 +589,11 @@ const FooterBottom = ({
|
|
|
589
589
|
// MAIN FOOTER COMPONENT
|
|
590
590
|
// =============================================================================
|
|
591
591
|
|
|
592
|
-
/**
|
|
593
|
-
* Footer component with brand identity, navigation links, social icons, and legal information.
|
|
594
|
-
* Supports two layout variants:
|
|
595
|
-
* - desktop: Logo at top, 3-column main content
|
|
596
|
-
* - mobile: Logo at bottom, stacked layout with CTA button
|
|
592
|
+
/**
|
|
593
|
+
* Footer component with brand identity, navigation links, social icons, and legal information.
|
|
594
|
+
* Supports two layout variants:
|
|
595
|
+
* - desktop: Logo at top, 3-column main content
|
|
596
|
+
* - mobile: Logo at bottom, stacked layout with CTA button
|
|
597
597
|
*/
|
|
598
598
|
const Footer = ({
|
|
599
599
|
variant = 'desktop',
|
|
@@ -793,8 +793,8 @@ const PaginationEllipsis = ({
|
|
|
793
793
|
}, "..."));
|
|
794
794
|
};
|
|
795
795
|
|
|
796
|
-
/**
|
|
797
|
-
* Generate page numbers to display with ellipsis logic
|
|
796
|
+
/**
|
|
797
|
+
* Generate page numbers to display with ellipsis logic
|
|
798
798
|
*/
|
|
799
799
|
const generatePageNumbers = (currentPage, totalPages, maxVisiblePages) => {
|
|
800
800
|
if (totalPages <= maxVisiblePages) {
|
|
@@ -1939,8 +1939,8 @@ const faXmark = {
|
|
|
1939
1939
|
icon: [384, 512, [128473, 10005, 10006, 10060, 215, "close", "multiply", "remove", "times"], "f00d", "M324.5 411.1c6.2 6.2 16.4 6.2 22.6 0s6.2-16.4 0-22.6L214.6 256 347.1 123.5c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.2-22.6 0L192 233.4 59.6 100.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6L169.4 256 36.9 388.5c-6.2 6.2-6.2 16.4 0 22.6s16.4 6.2 22.6 0L192 278.6 324.5 411.1z"]
|
|
1940
1940
|
};
|
|
1941
1941
|
|
|
1942
|
-
/**
|
|
1943
|
-
* FilterSearch - Search input for filtering facet values
|
|
1942
|
+
/**
|
|
1943
|
+
* FilterSearch - Search input for filtering facet values
|
|
1944
1944
|
*/
|
|
1945
1945
|
const FilterSearch = ({
|
|
1946
1946
|
value,
|
|
@@ -1988,8 +1988,8 @@ const CheckIcon = () => /*#__PURE__*/React.createElement("svg", {
|
|
|
1988
1988
|
fill: "#E2001A"
|
|
1989
1989
|
}));
|
|
1990
1990
|
|
|
1991
|
-
/**
|
|
1992
|
-
* FilterItem - Individual facet item with checkbox and count
|
|
1991
|
+
/**
|
|
1992
|
+
* FilterItem - Individual facet item with checkbox and count
|
|
1993
1993
|
*/
|
|
1994
1994
|
const FilterItem = ({
|
|
1995
1995
|
value,
|
|
@@ -2064,8 +2064,8 @@ const FilterItem = ({
|
|
|
2064
2064
|
}, "(", value.count, ")"));
|
|
2065
2065
|
};
|
|
2066
2066
|
|
|
2067
|
-
/**
|
|
2068
|
-
* FilterAccordion - Collapsible facet section with optional search
|
|
2067
|
+
/**
|
|
2068
|
+
* FilterAccordion - Collapsible facet section with optional search
|
|
2069
2069
|
*/
|
|
2070
2070
|
const FilterAccordion = ({
|
|
2071
2071
|
facet,
|
|
@@ -2149,8 +2149,8 @@ const FilterAccordion = ({
|
|
|
2149
2149
|
}, "No results found"))));
|
|
2150
2150
|
};
|
|
2151
2151
|
|
|
2152
|
-
/**
|
|
2153
|
-
* AppliedFilterTag - Individual removable filter tag/chip
|
|
2152
|
+
/**
|
|
2153
|
+
* AppliedFilterTag - Individual removable filter tag/chip
|
|
2154
2154
|
*/
|
|
2155
2155
|
const AppliedFilterTag = ({
|
|
2156
2156
|
attribute,
|
|
@@ -2194,8 +2194,8 @@ const AppliedFilterTag = ({
|
|
|
2194
2194
|
}))));
|
|
2195
2195
|
};
|
|
2196
2196
|
|
|
2197
|
-
/**
|
|
2198
|
-
* AppliedFilters - Shows all active filters as removable tags
|
|
2197
|
+
/**
|
|
2198
|
+
* AppliedFilters - Shows all active filters as removable tags
|
|
2199
2199
|
*/
|
|
2200
2200
|
const AppliedFilters = ({
|
|
2201
2201
|
facets,
|
|
@@ -2240,12 +2240,12 @@ const AppliedFilters = ({
|
|
|
2240
2240
|
}))));
|
|
2241
2241
|
};
|
|
2242
2242
|
|
|
2243
|
-
/**
|
|
2244
|
-
* FiltersPanel - Main container for all filters
|
|
2245
|
-
*
|
|
2246
|
-
* Fully controlled component - renders based on facets prop.
|
|
2247
|
-
* When facets change (e.g., after API refetch), component re-renders with new data.
|
|
2248
|
-
* Accordion expansion state persists across refetches, with new facets respecting defaultExpanded.
|
|
2243
|
+
/**
|
|
2244
|
+
* FiltersPanel - Main container for all filters
|
|
2245
|
+
*
|
|
2246
|
+
* Fully controlled component - renders based on facets prop.
|
|
2247
|
+
* When facets change (e.g., after API refetch), component re-renders with new data.
|
|
2248
|
+
* Accordion expansion state persists across refetches, with new facets respecting defaultExpanded.
|
|
2249
2249
|
*/
|
|
2250
2250
|
const FiltersPanel = ({
|
|
2251
2251
|
facets,
|
|
@@ -2354,23 +2354,23 @@ const isPlaceholderImg = url => {
|
|
|
2354
2354
|
return !!url && url.includes(PLACEHOLDER_INDICATOR);
|
|
2355
2355
|
};
|
|
2356
2356
|
|
|
2357
|
-
/**
|
|
2358
|
-
* ProductCardVertical - Vertical product card for grid layouts
|
|
2359
|
-
*
|
|
2360
|
-
* Used in full results view with 4-column grid (desktop) or 2-column grid (mobile).
|
|
2361
|
-
* Figma spec: Default (no shadow) → Hover (shadow + grey button) → Focus (border + shadow)
|
|
2362
|
-
*
|
|
2363
|
-
* @example
|
|
2364
|
-
* ```tsx
|
|
2365
|
-
* <ProductCardVertical
|
|
2366
|
-
* title="TURBOVAC i - High vacuum turbopump"
|
|
2367
|
-
* url="/products/turbovac-i"
|
|
2368
|
-
* imageUrl="/assets/search-product.png"
|
|
2369
|
-
* productId="21312VISH"
|
|
2370
|
-
* description="Premium high-performance turbomolecular pump"
|
|
2371
|
-
* buttonLabel="BUY ONLINE"
|
|
2372
|
-
* />
|
|
2373
|
-
* ```
|
|
2357
|
+
/**
|
|
2358
|
+
* ProductCardVertical - Vertical product card for grid layouts
|
|
2359
|
+
*
|
|
2360
|
+
* Used in full results view with 4-column grid (desktop) or 2-column grid (mobile).
|
|
2361
|
+
* Figma spec: Default (no shadow) → Hover (shadow + grey button) → Focus (border + shadow)
|
|
2362
|
+
*
|
|
2363
|
+
* @example
|
|
2364
|
+
* ```tsx
|
|
2365
|
+
* <ProductCardVertical
|
|
2366
|
+
* title="TURBOVAC i - High vacuum turbopump"
|
|
2367
|
+
* url="/products/turbovac-i"
|
|
2368
|
+
* imageUrl="/assets/search-product.png"
|
|
2369
|
+
* productId="21312VISH"
|
|
2370
|
+
* description="Premium high-performance turbomolecular pump"
|
|
2371
|
+
* buttonLabel="BUY ONLINE"
|
|
2372
|
+
* />
|
|
2373
|
+
* ```
|
|
2374
2374
|
*/
|
|
2375
2375
|
const ProductCardVertical = ({
|
|
2376
2376
|
id,
|
|
@@ -2528,32 +2528,32 @@ const ResultsList = ({
|
|
|
2528
2528
|
|
|
2529
2529
|
var styles$4 = {"tabButton":"TabButton-module__tabButton___cMU45","tabButton__count":"TabButton-module__tabButton__count___nlS1p","tabButton__label":"TabButton-module__tabButton__label___YGpiC","tabButton__results":"TabButton-module__tabButton__results___Nr6gr","tabButton--desktop":"TabButton-module__tabButton--desktop___fbAaC","tabButton--active":"TabButton-module__tabButton--active___gj6Jp","tabButton--mobile":"TabButton-module__tabButton--mobile___AnLwy"};
|
|
2530
2530
|
|
|
2531
|
-
/**
|
|
2532
|
-
* TabButton - Tab navigation component with result counts
|
|
2533
|
-
*
|
|
2534
|
-
* Supports two layout variants:
|
|
2535
|
-
* - Desktop: Background colours, top red underline when active, rounded corners
|
|
2536
|
-
* - Mobile: Text-only with bottom border underline when active
|
|
2537
|
-
*
|
|
2538
|
-
* @example
|
|
2539
|
-
* ```tsx
|
|
2540
|
-
* // Desktop variant
|
|
2541
|
-
* <TabButton
|
|
2542
|
-
* label="WEB SHOP RESULTS"
|
|
2543
|
-
* count={542}
|
|
2544
|
-
* isActive={true}
|
|
2545
|
-
* onClick={() => setActiveTab('products')}
|
|
2546
|
-
* variant="desktop"
|
|
2547
|
-
* />
|
|
2548
|
-
*
|
|
2549
|
-
* // Mobile variant
|
|
2550
|
-
* <TabButton
|
|
2551
|
-
* label="WEB SHOP"
|
|
2552
|
-
* isActive={false}
|
|
2553
|
-
* onClick={() => setActiveTab('content')}
|
|
2554
|
-
* variant="mobile"
|
|
2555
|
-
* />
|
|
2556
|
-
* ```
|
|
2531
|
+
/**
|
|
2532
|
+
* TabButton - Tab navigation component with result counts
|
|
2533
|
+
*
|
|
2534
|
+
* Supports two layout variants:
|
|
2535
|
+
* - Desktop: Background colours, top red underline when active, rounded corners
|
|
2536
|
+
* - Mobile: Text-only with bottom border underline when active
|
|
2537
|
+
*
|
|
2538
|
+
* @example
|
|
2539
|
+
* ```tsx
|
|
2540
|
+
* // Desktop variant
|
|
2541
|
+
* <TabButton
|
|
2542
|
+
* label="WEB SHOP RESULTS"
|
|
2543
|
+
* count={542}
|
|
2544
|
+
* isActive={true}
|
|
2545
|
+
* onClick={() => setActiveTab('products')}
|
|
2546
|
+
* variant="desktop"
|
|
2547
|
+
* />
|
|
2548
|
+
*
|
|
2549
|
+
* // Mobile variant
|
|
2550
|
+
* <TabButton
|
|
2551
|
+
* label="WEB SHOP"
|
|
2552
|
+
* isActive={false}
|
|
2553
|
+
* onClick={() => setActiveTab('content')}
|
|
2554
|
+
* variant="mobile"
|
|
2555
|
+
* />
|
|
2556
|
+
* ```
|
|
2557
2557
|
*/
|
|
2558
2558
|
const TabButton = ({
|
|
2559
2559
|
label,
|
|
@@ -2602,23 +2602,23 @@ const AssistanceIcon = props => {
|
|
|
2602
2602
|
|
|
2603
2603
|
var styles$3 = {"assistanceBanner":"AssistanceBanner-module__assistanceBanner___b97es","assistanceBanner__icon":"AssistanceBanner-module__assistanceBanner__icon___8NzJj","assistanceBanner__title":"AssistanceBanner-module__assistanceBanner__title___Wtkkt","assistanceBanner__description":"AssistanceBanner-module__assistanceBanner__description___AjoOr","assistanceBanner__link":"AssistanceBanner-module__assistanceBanner__link___5L45N","assistanceBanner__chevron":"AssistanceBanner-module__assistanceBanner__chevron___4km-f"};
|
|
2604
2604
|
|
|
2605
|
-
/**
|
|
2606
|
-
* AssistanceBanner - Help widget for search sidebar
|
|
2607
|
-
*
|
|
2608
|
-
* Displays a call-to-action for users who need assistance finding products.
|
|
2609
|
-
* Features chat icon, heading, description, and contact link with chevron.
|
|
2610
|
-
*
|
|
2611
|
-
* Desktop only - hidden on mobile to save space.
|
|
2612
|
-
*
|
|
2613
|
-
* @example
|
|
2614
|
-
* ```tsx
|
|
2615
|
-
* <AssistanceBanner
|
|
2616
|
-
* title="Need Assistance?"
|
|
2617
|
-
* description="Can't find what you're looking for? Our team is ready to help."
|
|
2618
|
-
* linkText="Contact support"
|
|
2619
|
-
* linkUrl="/contact"
|
|
2620
|
-
* />
|
|
2621
|
-
* ```
|
|
2605
|
+
/**
|
|
2606
|
+
* AssistanceBanner - Help widget for search sidebar
|
|
2607
|
+
*
|
|
2608
|
+
* Displays a call-to-action for users who need assistance finding products.
|
|
2609
|
+
* Features chat icon, heading, description, and contact link with chevron.
|
|
2610
|
+
*
|
|
2611
|
+
* Desktop only - hidden on mobile to save space.
|
|
2612
|
+
*
|
|
2613
|
+
* @example
|
|
2614
|
+
* ```tsx
|
|
2615
|
+
* <AssistanceBanner
|
|
2616
|
+
* title="Need Assistance?"
|
|
2617
|
+
* description="Can't find what you're looking for? Our team is ready to help."
|
|
2618
|
+
* linkText="Contact support"
|
|
2619
|
+
* linkUrl="/contact"
|
|
2620
|
+
* />
|
|
2621
|
+
* ```
|
|
2622
2622
|
*/
|
|
2623
2623
|
const AssistanceBanner = ({
|
|
2624
2624
|
title = 'Need Assistance?',
|
|
@@ -2671,25 +2671,25 @@ const OVERLAY_FADE_MS = 300;
|
|
|
2671
2671
|
const PANEL_SLIDE_MS = 300;
|
|
2672
2672
|
const CLOSE_ANIMATION_BUFFER_MS = 50;
|
|
2673
2673
|
|
|
2674
|
-
/**
|
|
2675
|
-
* FilterDrawer - Mobile slide-in filter panel
|
|
2676
|
-
*
|
|
2677
|
-
* Slides in from the right with a dark overlay. Used on mobile to show filters
|
|
2678
|
-
* when screen space is limited. Includes focus trap, escape key handling, and
|
|
2679
|
-
* body scroll prevention.
|
|
2680
|
-
*
|
|
2681
|
-
* Desktop: Hidden (filters shown in sidebar)
|
|
2682
|
-
* Mobile: Slide-in drawer overlay
|
|
2683
|
-
*
|
|
2684
|
-
* @example
|
|
2685
|
-
* ```tsx
|
|
2686
|
-
* <FilterDrawer
|
|
2687
|
-
* isOpen={isFilterDrawerOpen}
|
|
2688
|
-
* onClose={() => setIsFilterDrawerOpen(false)}
|
|
2689
|
-
* >
|
|
2690
|
-
* <FiltersPanel facets={facets} onFacetToggle={handleToggle} />
|
|
2691
|
-
* </FilterDrawer>
|
|
2692
|
-
* ```
|
|
2674
|
+
/**
|
|
2675
|
+
* FilterDrawer - Mobile slide-in filter panel
|
|
2676
|
+
*
|
|
2677
|
+
* Slides in from the right with a dark overlay. Used on mobile to show filters
|
|
2678
|
+
* when screen space is limited. Includes focus trap, escape key handling, and
|
|
2679
|
+
* body scroll prevention.
|
|
2680
|
+
*
|
|
2681
|
+
* Desktop: Hidden (filters shown in sidebar)
|
|
2682
|
+
* Mobile: Slide-in drawer overlay
|
|
2683
|
+
*
|
|
2684
|
+
* @example
|
|
2685
|
+
* ```tsx
|
|
2686
|
+
* <FilterDrawer
|
|
2687
|
+
* isOpen={isFilterDrawerOpen}
|
|
2688
|
+
* onClose={() => setIsFilterDrawerOpen(false)}
|
|
2689
|
+
* >
|
|
2690
|
+
* <FiltersPanel facets={facets} onFacetToggle={handleToggle} />
|
|
2691
|
+
* </FilterDrawer>
|
|
2692
|
+
* ```
|
|
2693
2693
|
*/
|
|
2694
2694
|
const FilterDrawer = ({
|
|
2695
2695
|
isOpen,
|
|
@@ -3006,41 +3006,41 @@ const FederatedResultsView = ({
|
|
|
3006
3006
|
|
|
3007
3007
|
var styles$1 = {"searchExperience":"FederatedSearchExperience-module__searchExperience___gug9X","searchBarSection":"FederatedSearchExperience-module__searchBarSection___f0Ykq","searchBarDesktopOnly":"FederatedSearchExperience-module__searchBarDesktopOnly___CetKZ","searchBarMobileOnly":"FederatedSearchExperience-module__searchBarMobileOnly___Ityxp","resultsHeaderMobileOnly":"FederatedSearchExperience-module__resultsHeaderMobileOnly___09ef-","tabsContainerSticky":"FederatedSearchExperience-module__tabsContainerSticky___-HdY5","tabs":"FederatedSearchExperience-module__tabs___Vatv8","tabSeparator":"FederatedSearchExperience-module__tabSeparator___AUjhW","mobileFilterButtonWrapper":"FederatedSearchExperience-module__mobileFilterButtonWrapper___JkRtk","mobileFilterButton":"FederatedSearchExperience-module__mobileFilterButton___sRc-w","filterIndicatorDot":"FederatedSearchExperience-module__filterIndicatorDot___vqVi2","instantResultsSection":"FederatedSearchExperience-module__instantResultsSection___AG3qn","fullResultsSection":"FederatedSearchExperience-module__fullResultsSection___NH16U"};
|
|
3008
3008
|
|
|
3009
|
-
/**
|
|
3010
|
-
* FederatedSearchExperience - Top-level search experience component
|
|
3011
|
-
*
|
|
3012
|
-
* This component orchestrates the entire federated search experience, including:
|
|
3013
|
-
* - Modal container
|
|
3014
|
-
* - Search input
|
|
3015
|
-
* - Instant results (2-column layout)
|
|
3016
|
-
* - Full results view with tabs and filters
|
|
3017
|
-
*
|
|
3018
|
-
* The component is fully controlled and does not contain any data fetching logic.
|
|
3019
|
-
* All data and callbacks are passed in via props, making it suitable for use in AEM
|
|
3020
|
-
* where a controller layer will handle Algolia integration.
|
|
3021
|
-
*
|
|
3022
|
-
* @example
|
|
3023
|
-
* ```tsx
|
|
3024
|
-
* <FederatedSearchExperience
|
|
3025
|
-
* isOpen={isOpen}
|
|
3026
|
-
* onOpen={handleOpen}
|
|
3027
|
-
* onClose={handleClose}
|
|
3028
|
-
* query={query}
|
|
3029
|
-
* onQueryChange={setQuery}
|
|
3030
|
-
* onSearchSubmit={handleSubmit}
|
|
3031
|
-
* products={products}
|
|
3032
|
-
* contents={contents}
|
|
3033
|
-
* isLoadingProducts={isLoadingProducts}
|
|
3034
|
-
* isLoadingContents={isLoadingContents}
|
|
3035
|
-
* onSeeAllProducts={handleSeeAllProducts}
|
|
3036
|
-
* onSeeAllContents={handleSeeAllContents}
|
|
3037
|
-
* onSeeAllCombined={handleSeeAllCombined}
|
|
3038
|
-
* activeView={activeView}
|
|
3039
|
-
* onChangeView={setActiveView}
|
|
3040
|
-
* activeTab={activeTab}
|
|
3041
|
-
* onTabChange={setActiveTab}
|
|
3042
|
-
* />
|
|
3043
|
-
* ```
|
|
3009
|
+
/**
|
|
3010
|
+
* FederatedSearchExperience - Top-level search experience component
|
|
3011
|
+
*
|
|
3012
|
+
* This component orchestrates the entire federated search experience, including:
|
|
3013
|
+
* - Modal container
|
|
3014
|
+
* - Search input
|
|
3015
|
+
* - Instant results (2-column layout)
|
|
3016
|
+
* - Full results view with tabs and filters
|
|
3017
|
+
*
|
|
3018
|
+
* The component is fully controlled and does not contain any data fetching logic.
|
|
3019
|
+
* All data and callbacks are passed in via props, making it suitable for use in AEM
|
|
3020
|
+
* where a controller layer will handle Algolia integration.
|
|
3021
|
+
*
|
|
3022
|
+
* @example
|
|
3023
|
+
* ```tsx
|
|
3024
|
+
* <FederatedSearchExperience
|
|
3025
|
+
* isOpen={isOpen}
|
|
3026
|
+
* onOpen={handleOpen}
|
|
3027
|
+
* onClose={handleClose}
|
|
3028
|
+
* query={query}
|
|
3029
|
+
* onQueryChange={setQuery}
|
|
3030
|
+
* onSearchSubmit={handleSubmit}
|
|
3031
|
+
* products={products}
|
|
3032
|
+
* contents={contents}
|
|
3033
|
+
* isLoadingProducts={isLoadingProducts}
|
|
3034
|
+
* isLoadingContents={isLoadingContents}
|
|
3035
|
+
* onSeeAllProducts={handleSeeAllProducts}
|
|
3036
|
+
* onSeeAllContents={handleSeeAllContents}
|
|
3037
|
+
* onSeeAllCombined={handleSeeAllCombined}
|
|
3038
|
+
* activeView={activeView}
|
|
3039
|
+
* onChangeView={setActiveView}
|
|
3040
|
+
* activeTab={activeTab}
|
|
3041
|
+
* onTabChange={setActiveTab}
|
|
3042
|
+
* />
|
|
3043
|
+
* ```
|
|
3044
3044
|
*/
|
|
3045
3045
|
const FederatedSearchExperience = ({
|
|
3046
3046
|
isOpen,
|