@asante-org/atlascopco-vt-litesitegenerator 3.0.18 → 3.0.19
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/dist/index.esm.js +251 -10
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.scss +900 -8
- package/dist/index.js +251 -10
- package/dist/index.js.map +1 -1
- package/dist/index.scss +900 -8
- package/dist/src/components/lsg/LsgHeader/LsgHeaderInSitu.stories.d.ts +8 -0
- package/dist/src/components/lsg/LsgTabs/LsgTabs.d.ts +19 -0
- package/dist/src/components/lsg/LsgTabs/LsgTabs.stories.d.ts +12 -0
- package/dist/src/components/lsg/LsgTabs/index.d.ts +2 -0
- package/dist/src/components/lsg/index.d.ts +2 -0
- package/dist/src/components/lsg/lsg-clientlib-runtime.d.ts +1 -0
- package/dist/src/themes/createThemeComponents.d.ts +1 -0
- package/dist/src/themes/theme-1/components.d.ts +2 -1
- package/dist/src/themes/theme-2/components.d.ts +1 -0
- package/dist/src/themes/theme-3/components.d.ts +1 -0
- package/dist/themes/theme-1.css +445 -10
- package/dist/themes/theme-1.css.map +1 -1
- package/dist/themes/theme-1.js +184 -0
- package/dist/themes/theme-1.js.map +1 -1
- package/dist/themes/theme-2.css +575 -16
- package/dist/themes/theme-2.css.map +1 -1
- package/dist/themes/theme-2.js +184 -0
- package/dist/themes/theme-2.js.map +1 -1
- package/dist/themes/theme-3.css +676 -14
- package/dist/themes/theme-3.css.map +1 -1
- package/dist/themes/theme-3.js +184 -0
- package/dist/themes/theme-3.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/lsg-clientlib.css +0 -2106
- package/dist/lsg-clientlib.css.map +0 -1
- package/dist/lsg-clientlib.js +0 -524
- package/dist/lsg-clientlib.js.map +0 -1
package/dist/index.esm.js
CHANGED
|
@@ -871,7 +871,14 @@ var LsgHeader = function (_a) {
|
|
|
871
871
|
})));
|
|
872
872
|
}))));
|
|
873
873
|
};
|
|
874
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(
|
|
874
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(LsgSearchOverlay, {
|
|
875
|
+
id: SEARCH_OVERLAY_ID,
|
|
876
|
+
isOpen: searchOpen,
|
|
877
|
+
onClose: function () {
|
|
878
|
+
return setSearchOpen(false);
|
|
879
|
+
},
|
|
880
|
+
placeholder: searchPlaceholder
|
|
881
|
+
}), /*#__PURE__*/React.createElement("header", {
|
|
875
882
|
ref: headerRef,
|
|
876
883
|
className: ["lsg-header", "lsg-header--".concat(variant), menuOpen ? "lsg-header--menu-open" : "", "lsg-header--mobile-level-".concat(mobileLevel)].filter(Boolean).join(" ")
|
|
877
884
|
}, /*#__PURE__*/React.createElement("div", {
|
|
@@ -917,14 +924,7 @@ var LsgHeader = function (_a) {
|
|
|
917
924
|
"data-lsg-menu-trigger": true
|
|
918
925
|
}, /*#__PURE__*/React.createElement(LsgHeaderIcon, {
|
|
919
926
|
name: mobileOpen ? "close" : "bars"
|
|
920
|
-
})))), variant === "mega" && menuOpen && (children || renderMegaPanel()), mobileOpen && renderMobileMenu())
|
|
921
|
-
id: SEARCH_OVERLAY_ID,
|
|
922
|
-
isOpen: searchOpen,
|
|
923
|
-
onClose: function () {
|
|
924
|
-
return setSearchOpen(false);
|
|
925
|
-
},
|
|
926
|
-
placeholder: searchPlaceholder
|
|
927
|
-
}));
|
|
927
|
+
})))), variant === "mega" && menuOpen && (children || renderMegaPanel()), mobileOpen && renderMobileMenu()));
|
|
928
928
|
};
|
|
929
929
|
|
|
930
930
|
var LsgQuickLinks = function (_a) {
|
|
@@ -3548,6 +3548,244 @@ var LsgHero = function (_a) {
|
|
|
3548
3548
|
}))));
|
|
3549
3549
|
};
|
|
3550
3550
|
|
|
3551
|
+
// Matches $lsg-tabs-accordion-breakpoint in LsgTabs.scss ($breakpoint-sm - 1px)
|
|
3552
|
+
// and MOBILE_MEDIA_QUERY in lsg-clientlib-runtime.ts.
|
|
3553
|
+
var MOBILE_MEDIA_QUERY = "(max-width: 767px)";
|
|
3554
|
+
// Sub-pixel layout rounding when comparing scroll offsets against extents
|
|
3555
|
+
var SCROLL_EPSILON = 1;
|
|
3556
|
+
var CHEVRON_SVG = /*#__PURE__*/React.createElement("svg", {
|
|
3557
|
+
className: "lsg-tabs__tab-icon-svg",
|
|
3558
|
+
width: "16",
|
|
3559
|
+
height: "16",
|
|
3560
|
+
viewBox: "0 0 16 16",
|
|
3561
|
+
fill: "none",
|
|
3562
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
3563
|
+
"aria-hidden": "true",
|
|
3564
|
+
focusable: "false"
|
|
3565
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
3566
|
+
d: "M3 6L8 11L13 6",
|
|
3567
|
+
stroke: "currentColor",
|
|
3568
|
+
strokeWidth: "1.5",
|
|
3569
|
+
strokeLinecap: "round",
|
|
3570
|
+
strokeLinejoin: "round"
|
|
3571
|
+
}));
|
|
3572
|
+
var LsgTabs = function (_a) {
|
|
3573
|
+
var _b, _c;
|
|
3574
|
+
var items = _a.items,
|
|
3575
|
+
activeId = _a.activeId,
|
|
3576
|
+
_d = _a.variant,
|
|
3577
|
+
variant = _d === void 0 ? "default" : _d,
|
|
3578
|
+
accessibilityLabel = _a.accessibilityLabel,
|
|
3579
|
+
_e = _a.className,
|
|
3580
|
+
className = _e === void 0 ? "" : _e;
|
|
3581
|
+
var _f = useState((_c = activeId !== null && activeId !== void 0 ? activeId : (_b = items[0]) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : ""),
|
|
3582
|
+
selectedId = _f[0],
|
|
3583
|
+
setSelectedId = _f[1];
|
|
3584
|
+
// Below the breakpoint the tabs render as a single-open accordion and the open
|
|
3585
|
+
// header can be collapsed. Tracked separately from selection so exactly one tab
|
|
3586
|
+
// stays selected at every width — resizing back to desktop just reveals it again.
|
|
3587
|
+
var _g = useState(false),
|
|
3588
|
+
collapsed = _g[0],
|
|
3589
|
+
setCollapsed = _g[1];
|
|
3590
|
+
var _h = useState(false),
|
|
3591
|
+
isMobile = _h[0],
|
|
3592
|
+
setIsMobile = _h[1];
|
|
3593
|
+
// Scroll-arrow state. The arrows themselves are ::before / ::after on the root
|
|
3594
|
+
// (see LsgTabs.scss) — these only say whether there is more to reveal.
|
|
3595
|
+
var _j = useState(false),
|
|
3596
|
+
scrollStart = _j[0],
|
|
3597
|
+
setScrollStart = _j[1];
|
|
3598
|
+
var _k = useState(false),
|
|
3599
|
+
scrollEnd = _k[0],
|
|
3600
|
+
setScrollEnd = _k[1];
|
|
3601
|
+
var tabRefs = useRef({});
|
|
3602
|
+
var stripRef = useRef(null);
|
|
3603
|
+
var isVertical = variant === "vertical";
|
|
3604
|
+
var selectedIndex = Math.max(0, items.findIndex(function (item) {
|
|
3605
|
+
return item.id === selectedId;
|
|
3606
|
+
}));
|
|
3607
|
+
useEffect(function () {
|
|
3608
|
+
var mql = window.matchMedia(MOBILE_MEDIA_QUERY);
|
|
3609
|
+
var sync = function () {
|
|
3610
|
+
return setIsMobile(mql.matches);
|
|
3611
|
+
};
|
|
3612
|
+
sync();
|
|
3613
|
+
mql.addEventListener("change", sync);
|
|
3614
|
+
return function () {
|
|
3615
|
+
return mql.removeEventListener("change", sync);
|
|
3616
|
+
};
|
|
3617
|
+
}, []);
|
|
3618
|
+
var updateArrows = function () {
|
|
3619
|
+
var strip = stripRef.current;
|
|
3620
|
+
// Below the breakpoint this is an accordion — nothing scrolls, so the arrows
|
|
3621
|
+
// must not be offered.
|
|
3622
|
+
if (!strip || isMobile) {
|
|
3623
|
+
setScrollStart(false);
|
|
3624
|
+
setScrollEnd(false);
|
|
3625
|
+
return;
|
|
3626
|
+
}
|
|
3627
|
+
var offset = isVertical ? strip.scrollTop : strip.scrollLeft;
|
|
3628
|
+
var visible = isVertical ? strip.clientHeight : strip.clientWidth;
|
|
3629
|
+
var total = isVertical ? strip.scrollHeight : strip.scrollWidth;
|
|
3630
|
+
setScrollStart(offset > SCROLL_EPSILON);
|
|
3631
|
+
setScrollEnd(offset + visible < total - SCROLL_EPSILON);
|
|
3632
|
+
};
|
|
3633
|
+
useEffect(function () {
|
|
3634
|
+
updateArrows();
|
|
3635
|
+
}, [isMobile, isVertical, items, selectedIndex]);
|
|
3636
|
+
useEffect(function () {
|
|
3637
|
+
var strip = stripRef.current;
|
|
3638
|
+
if (!strip || typeof ResizeObserver === "undefined") return;
|
|
3639
|
+
// The strip can start overflowing because its container changed, with no
|
|
3640
|
+
// viewport resize at all.
|
|
3641
|
+
var observer = new ResizeObserver(function () {
|
|
3642
|
+
return updateArrows();
|
|
3643
|
+
});
|
|
3644
|
+
observer.observe(strip);
|
|
3645
|
+
return function () {
|
|
3646
|
+
return observer.disconnect();
|
|
3647
|
+
};
|
|
3648
|
+
}, [isMobile, isVertical]);
|
|
3649
|
+
useEffect(function () {
|
|
3650
|
+
var _a;
|
|
3651
|
+
// A late web-font swap widens the labels, growing scrollWidth without changing
|
|
3652
|
+
// the strip's own box — so ResizeObserver may never fire. Re-measure once the
|
|
3653
|
+
// fonts have settled, otherwise the arrows can be stale on first paint.
|
|
3654
|
+
var cancelled = false;
|
|
3655
|
+
(_a = document.fonts) === null || _a === void 0 ? void 0 : _a.ready.then(function () {
|
|
3656
|
+
if (!cancelled) updateArrows();
|
|
3657
|
+
});
|
|
3658
|
+
return function () {
|
|
3659
|
+
cancelled = true;
|
|
3660
|
+
};
|
|
3661
|
+
}, [isMobile, isVertical]);
|
|
3662
|
+
var scrollStrip = function (direction) {
|
|
3663
|
+
var strip = stripRef.current;
|
|
3664
|
+
if (!strip) return;
|
|
3665
|
+
// A step just under one viewport keeps a sliver of context in view
|
|
3666
|
+
var visible = isVertical ? strip.clientHeight : strip.clientWidth;
|
|
3667
|
+
var step = Math.max(visible * 0.8, 1);
|
|
3668
|
+
if (isVertical) {
|
|
3669
|
+
strip.scrollTop += direction * step;
|
|
3670
|
+
} else {
|
|
3671
|
+
strip.scrollLeft += direction * step;
|
|
3672
|
+
}
|
|
3673
|
+
};
|
|
3674
|
+
// The arrows are pseudo-elements painted above the strip, so a click on one
|
|
3675
|
+
// hit-tests to the root rather than to a tab or panel. Nothing else on the root
|
|
3676
|
+
// is clickable, which is what makes this unambiguous.
|
|
3677
|
+
var onRootClick = function (event) {
|
|
3678
|
+
if (event.target !== event.currentTarget) return;
|
|
3679
|
+
var strip = stripRef.current;
|
|
3680
|
+
if (!strip) return;
|
|
3681
|
+
var rect = strip.getBoundingClientRect();
|
|
3682
|
+
var beforeMidpoint = isVertical ? event.clientY < rect.top + rect.height / 2 : event.clientX < rect.left + rect.width / 2;
|
|
3683
|
+
scrollStrip(beforeMidpoint ? -1 : 1);
|
|
3684
|
+
};
|
|
3685
|
+
var select = function (index, moveFocus) {
|
|
3686
|
+
var item = items[index];
|
|
3687
|
+
if (!item) return;
|
|
3688
|
+
setSelectedId(item.id);
|
|
3689
|
+
setCollapsed(false);
|
|
3690
|
+
var tab = tabRefs.current[item.id];
|
|
3691
|
+
// Arrow-key navigation can land on a tab that is scrolled out of the strip
|
|
3692
|
+
tab === null || tab === void 0 ? void 0 : tab.scrollIntoView({
|
|
3693
|
+
block: "nearest",
|
|
3694
|
+
inline: "nearest"
|
|
3695
|
+
});
|
|
3696
|
+
if (moveFocus) tab === null || tab === void 0 ? void 0 : tab.focus();
|
|
3697
|
+
};
|
|
3698
|
+
var press = function (index) {
|
|
3699
|
+
if (isMobile && index === selectedIndex) {
|
|
3700
|
+
setCollapsed(function (prev) {
|
|
3701
|
+
return !prev;
|
|
3702
|
+
});
|
|
3703
|
+
return;
|
|
3704
|
+
}
|
|
3705
|
+
select(index, false);
|
|
3706
|
+
};
|
|
3707
|
+
// Roving tabindex keyboard model for role="tab" — see bootLsgTabs for the AEM twin.
|
|
3708
|
+
var onKeyDown = function (event, index) {
|
|
3709
|
+
var last = items.length - 1;
|
|
3710
|
+
switch (event.key) {
|
|
3711
|
+
case "ArrowRight":
|
|
3712
|
+
case "ArrowDown":
|
|
3713
|
+
event.preventDefault();
|
|
3714
|
+
select(selectedIndex === last ? 0 : selectedIndex + 1, true);
|
|
3715
|
+
break;
|
|
3716
|
+
case "ArrowLeft":
|
|
3717
|
+
case "ArrowUp":
|
|
3718
|
+
event.preventDefault();
|
|
3719
|
+
select(selectedIndex === 0 ? last : selectedIndex - 1, true);
|
|
3720
|
+
break;
|
|
3721
|
+
case "Home":
|
|
3722
|
+
event.preventDefault();
|
|
3723
|
+
select(0, true);
|
|
3724
|
+
break;
|
|
3725
|
+
case "End":
|
|
3726
|
+
event.preventDefault();
|
|
3727
|
+
select(last, true);
|
|
3728
|
+
break;
|
|
3729
|
+
case "Enter":
|
|
3730
|
+
case " ":
|
|
3731
|
+
event.preventDefault();
|
|
3732
|
+
press(index);
|
|
3733
|
+
break;
|
|
3734
|
+
}
|
|
3735
|
+
};
|
|
3736
|
+
var rootClass = ["lsg-tabs", isVertical ? "lsg-tabs--vertical" : "", scrollStart ? "lsg-tabs--scroll-start" : "", scrollEnd ? "lsg-tabs--scroll-end" : "", className].filter(Boolean).join(" ");
|
|
3737
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
3738
|
+
className: rootClass,
|
|
3739
|
+
onClick: onRootClick
|
|
3740
|
+
}, /*#__PURE__*/React.createElement("ol", {
|
|
3741
|
+
ref: stripRef,
|
|
3742
|
+
className: "lsg-tabs__tablist",
|
|
3743
|
+
role: "tablist",
|
|
3744
|
+
"aria-label": accessibilityLabel,
|
|
3745
|
+
"aria-multiselectable": "false",
|
|
3746
|
+
onScroll: updateArrows
|
|
3747
|
+
}, items.map(function (item, index) {
|
|
3748
|
+
var isActive = index === selectedIndex;
|
|
3749
|
+
return /*#__PURE__*/React.createElement("li", {
|
|
3750
|
+
key: item.id,
|
|
3751
|
+
ref: function (node) {
|
|
3752
|
+
tabRefs.current[item.id] = node;
|
|
3753
|
+
},
|
|
3754
|
+
role: "tab",
|
|
3755
|
+
id: "lsg-tab-".concat(item.id),
|
|
3756
|
+
className: "lsg-tabs__tab".concat(isActive ? " lsg-tabs__tab--active" : ""),
|
|
3757
|
+
"aria-controls": "lsg-tabpanel-".concat(item.id),
|
|
3758
|
+
"aria-selected": isActive
|
|
3759
|
+
// Desktop is a tab strip — aria-selected carries the state there, and
|
|
3760
|
+
// the collapsed class has no styling, so aria-expanded would mislead.
|
|
3761
|
+
,
|
|
3762
|
+
"aria-expanded": isMobile ? isActive && !collapsed : undefined,
|
|
3763
|
+
tabIndex: isActive ? 0 : -1,
|
|
3764
|
+
onClick: function () {
|
|
3765
|
+
return press(index);
|
|
3766
|
+
},
|
|
3767
|
+
onKeyDown: function (event) {
|
|
3768
|
+
return onKeyDown(event, index);
|
|
3769
|
+
}
|
|
3770
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
3771
|
+
className: "lsg-tabs__tab-label"
|
|
3772
|
+
}, item.title), /*#__PURE__*/React.createElement("span", {
|
|
3773
|
+
className: "lsg-tabs__tab-icon",
|
|
3774
|
+
"aria-hidden": "true"
|
|
3775
|
+
}, CHEVRON_SVG));
|
|
3776
|
+
})), items.map(function (item, index) {
|
|
3777
|
+
var isActive = index === selectedIndex;
|
|
3778
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
3779
|
+
key: item.id,
|
|
3780
|
+
id: "lsg-tabpanel-".concat(item.id),
|
|
3781
|
+
role: "tabpanel",
|
|
3782
|
+
"aria-labelledby": "lsg-tab-".concat(item.id),
|
|
3783
|
+
tabIndex: 0,
|
|
3784
|
+
className: ["lsg-tabs__panel", isActive ? "lsg-tabs__panel--active" : "", isActive && collapsed ? "lsg-tabs__panel--collapsed" : ""].filter(Boolean).join(" ")
|
|
3785
|
+
}, item.content);
|
|
3786
|
+
}));
|
|
3787
|
+
};
|
|
3788
|
+
|
|
3551
3789
|
var LsgFormFieldText = function (_a) {
|
|
3552
3790
|
var _b = _a.id,
|
|
3553
3791
|
id = _b === void 0 ? "field-text" : _b,
|
|
@@ -4291,6 +4529,7 @@ var BASE_COMPONENTS = {
|
|
|
4291
4529
|
LsgSocialMediaIcons: LsgSocialMediaIcons,
|
|
4292
4530
|
LsgFooter: LsgFooter,
|
|
4293
4531
|
LsgHero: LsgHero,
|
|
4532
|
+
LsgTabs: LsgTabs,
|
|
4294
4533
|
LsgFormContainer: LsgFormContainer,
|
|
4295
4534
|
LsgFormFieldText: LsgFormFieldText,
|
|
4296
4535
|
LsgFormFieldEmail: LsgFormFieldEmail,
|
|
@@ -4334,7 +4573,8 @@ function createThemeComponents(themeName) {
|
|
|
4334
4573
|
LsgFormFieldCountry: createThemeComponent(themeName, "form-field-country", BASE_COMPONENTS.LsgFormFieldCountry),
|
|
4335
4574
|
LsgFormFieldTextarea: createThemeComponent(themeName, "form-field-textarea", BASE_COMPONENTS.LsgFormFieldTextarea),
|
|
4336
4575
|
LsgFormFieldConsent: createThemeComponent(themeName, "form-field-consent", BASE_COMPONENTS.LsgFormFieldConsent),
|
|
4337
|
-
LsgFormStep: createThemeComponent(themeName, "form-step", BASE_COMPONENTS.LsgFormStep)
|
|
4576
|
+
LsgFormStep: createThemeComponent(themeName, "form-step", BASE_COMPONENTS.LsgFormStep),
|
|
4577
|
+
LsgTabs: createThemeComponent(themeName, "tabs", BASE_COMPONENTS.LsgTabs)
|
|
4338
4578
|
};
|
|
4339
4579
|
}
|
|
4340
4580
|
|
|
@@ -4353,6 +4593,7 @@ var Theme1LsgButton = theme1Components.LsgButton,
|
|
|
4353
4593
|
Theme1LsgSocialMediaIcons = theme1Components.LsgSocialMediaIcons,
|
|
4354
4594
|
Theme1LsgFooter = theme1Components.LsgFooter,
|
|
4355
4595
|
Theme1LsgHero = theme1Components.LsgHero;
|
|
4596
|
+
theme1Components.LsgTabs;
|
|
4356
4597
|
// Form components
|
|
4357
4598
|
theme1Components.LsgFormContainer;
|
|
4358
4599
|
theme1Components.LsgFormFieldText;
|