@govtechsg/sgds-web-component 3.27.0-rc.3 → 3.27.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.
- package/base/dropdown-list-element.js +2 -9
- package/base/dropdown-list-element.js.map +1 -1
- package/components/Breadcrumb/index.umd.min.js +5 -5
- package/components/Breadcrumb/index.umd.min.js.map +1 -1
- package/components/ComboBox/index.umd.min.js +1 -1
- package/components/ComboBox/index.umd.min.js.map +1 -1
- package/components/DataTable/data-table.js +1 -1
- package/components/DataTable/index.umd.min.js +49 -42
- package/components/DataTable/index.umd.min.js.map +1 -1
- package/components/DataTable/sgds-data-table-cell.d.ts +2 -2
- package/components/DataTable/sgds-data-table-cell.js.map +1 -1
- package/components/DataTable/sgds-data-table-head.d.ts +2 -2
- package/components/DataTable/sgds-data-table-head.js.map +1 -1
- package/components/DataTable/sgds-data-table-row.d.ts +0 -3
- package/components/DataTable/sgds-data-table-row.js +0 -13
- package/components/DataTable/sgds-data-table-row.js.map +1 -1
- package/components/DataTable/sgds-data-table.d.ts +7 -4
- package/components/DataTable/sgds-data-table.js +49 -38
- package/components/DataTable/sgds-data-table.js.map +1 -1
- package/components/DataTable/types.d.ts +7 -0
- package/components/Datepicker/index.umd.min.js +1 -1
- package/components/Dropdown/dropdown-item.js +1 -1
- package/components/Dropdown/index.umd.min.js +5 -5
- package/components/Dropdown/index.umd.min.js.map +1 -1
- package/components/Dropdown/sgds-dropdown-item.d.ts +0 -2
- package/components/Dropdown/sgds-dropdown-item.js +2 -8
- package/components/Dropdown/sgds-dropdown-item.js.map +1 -1
- package/components/Footer/index.umd.min.js +1 -1
- package/components/Footer/index.umd.min.js.map +1 -1
- package/components/Footer/sgds-footer.js +1 -1
- package/components/Footer/sgds-footer.js.map +1 -1
- package/components/Input/index.umd.min.js +1 -1
- package/components/Mainnav/index.d.ts +0 -2
- package/components/Mainnav/index.js +0 -2
- package/components/Mainnav/index.js.map +1 -1
- package/components/Mainnav/index.umd.min.js +285 -338
- package/components/Mainnav/index.umd.min.js.map +1 -1
- package/components/Mainnav/mainnav-dropdown.js +1 -1
- package/components/Mainnav/mainnav-item.js +1 -1
- package/components/Mainnav/mainnav.js +1 -1
- package/components/Mainnav/sgds-mainnav.d.ts +51 -8
- package/components/Mainnav/sgds-mainnav.js +238 -40
- package/components/Mainnav/sgds-mainnav.js.map +1 -1
- package/components/OverflowMenu/index.umd.min.js +5 -5
- package/components/OverflowMenu/index.umd.min.js.map +1 -1
- package/components/QuantityToggle/index.umd.min.js +1 -1
- package/components/Select/index.umd.min.js +21 -21
- package/components/Select/index.umd.min.js.map +1 -1
- package/components/Tab/index.umd.min.js +1 -1
- package/components/Tab/index.umd.min.js.map +1 -1
- package/components/Tab/tab-panel.js +1 -1
- package/components/Textarea/index.umd.min.js +1 -1
- package/components/index.d.ts +0 -3
- package/components/index.js +0 -3
- package/components/index.js.map +1 -1
- package/components/index.umd.min.js +587 -665
- package/components/index.umd.min.js.map +1 -1
- package/css/fouc.css +5 -8
- package/custom-elements.json +15246 -17418
- package/index.d.ts +0 -1
- package/index.js +0 -1
- package/index.js.map +1 -1
- package/index.umd.min.js +353 -441
- package/index.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/react/base/dropdown-list-element.cjs.js +2 -9
- package/react/base/dropdown-list-element.cjs.js.map +1 -1
- package/react/base/dropdown-list-element.js +2 -9
- package/react/base/dropdown-list-element.js.map +1 -1
- package/react/components/DataTable/data-table.cjs.js +1 -1
- package/react/components/DataTable/data-table.js +1 -1
- package/react/components/DataTable/sgds-data-table-cell.cjs.js.map +1 -1
- package/react/components/DataTable/sgds-data-table-cell.js.map +1 -1
- package/react/components/DataTable/sgds-data-table-head.cjs.js.map +1 -1
- package/react/components/DataTable/sgds-data-table-head.js.map +1 -1
- package/react/components/DataTable/sgds-data-table-row.cjs.js +0 -13
- package/react/components/DataTable/sgds-data-table-row.cjs.js.map +1 -1
- package/react/components/DataTable/sgds-data-table-row.js +0 -13
- package/react/components/DataTable/sgds-data-table-row.js.map +1 -1
- package/react/components/DataTable/sgds-data-table.cjs.js +49 -38
- package/react/components/DataTable/sgds-data-table.cjs.js.map +1 -1
- package/react/components/DataTable/sgds-data-table.js +49 -38
- package/react/components/DataTable/sgds-data-table.js.map +1 -1
- package/react/components/Dropdown/dropdown-item.cjs.js +1 -1
- package/react/components/Dropdown/dropdown-item.js +1 -1
- package/react/components/Dropdown/sgds-dropdown-item.cjs.js +2 -8
- package/react/components/Dropdown/sgds-dropdown-item.cjs.js.map +1 -1
- package/react/components/Dropdown/sgds-dropdown-item.js +2 -8
- package/react/components/Dropdown/sgds-dropdown-item.js.map +1 -1
- package/react/components/Footer/sgds-footer.cjs.js +1 -1
- package/react/components/Footer/sgds-footer.cjs.js.map +1 -1
- package/react/components/Footer/sgds-footer.js +1 -1
- package/react/components/Footer/sgds-footer.js.map +1 -1
- package/react/components/Mainnav/mainnav-dropdown.cjs.js +1 -1
- package/react/components/Mainnav/mainnav-dropdown.js +1 -1
- package/react/components/Mainnav/mainnav-item.cjs.js +1 -1
- package/react/components/Mainnav/mainnav-item.js +1 -1
- package/react/components/Mainnav/mainnav.cjs.js +1 -1
- package/react/components/Mainnav/mainnav.js +1 -1
- package/react/components/Mainnav/sgds-mainnav.cjs.js +237 -39
- package/react/components/Mainnav/sgds-mainnav.cjs.js.map +1 -1
- package/react/components/Mainnav/sgds-mainnav.js +238 -40
- package/react/components/Mainnav/sgds-mainnav.js.map +1 -1
- package/react/components/Tab/tab-panel.cjs.js +1 -1
- package/react/components/Tab/tab-panel.js +1 -1
- package/react/index.cjs.js +146 -152
- package/react/index.cjs.js.map +1 -1
- package/react/index.d.ts +5 -8
- package/react/index.js +5 -8
- package/react/index.js.map +1 -1
- package/react/styles/form-text-control.cjs.js +1 -1
- package/react/styles/form-text-control.js +1 -1
- package/styles/form-text-control.js +1 -1
- package/themes/blue.css +11 -11
- package/themes/cyan.css +10 -10
- package/themes/day.css +1 -1
- package/themes/gt/blue.css +11 -11
- package/themes/gt/cyan.css +10 -10
- package/themes/gt/magenta.css +11 -11
- package/themes/gt/pink.css +11 -11
- package/themes/gt/purple.css +11 -11
- package/themes/gt/red.css +11 -11
- package/themes/magenta.css +11 -11
- package/themes/pink.css +11 -11
- package/themes/purple.css +11 -11
- package/themes/red.css +11 -11
- package/themes/root.css +0 -5
- package/types/react.d.ts +97 -148
- package/base/nav-element.d.ts +0 -64
- package/base/nav-element.js +0 -263
- package/base/nav-element.js.map +0 -1
- package/base/nav-profile-element.d.ts +0 -47
- package/base/nav-profile-element.js +0 -191
- package/base/nav-profile-element.js.map +0 -1
- package/base/nav-profile.js +0 -6
- package/base/nav-profile.js.map +0 -1
- package/components/Appnav/appnav-context.d.ts +0 -6
- package/components/Appnav/appnav-context.js +0 -7
- package/components/Appnav/appnav-context.js.map +0 -1
- package/components/Appnav/appnav.js +0 -6
- package/components/Appnav/appnav.js.map +0 -1
- package/components/Appnav/index.d.ts +0 -9
- package/components/Appnav/index.js +0 -8
- package/components/Appnav/index.js.map +0 -1
- package/components/Appnav/index.umd.min.js +0 -2535
- package/components/Appnav/index.umd.min.js.map +0 -1
- package/components/Appnav/sgds-appnav-profile.d.ts +0 -17
- package/components/Appnav/sgds-appnav-profile.js +0 -31
- package/components/Appnav/sgds-appnav-profile.js.map +0 -1
- package/components/Appnav/sgds-appnav.d.ts +0 -44
- package/components/Appnav/sgds-appnav.js +0 -183
- package/components/Appnav/sgds-appnav.js.map +0 -1
- package/components/Mainnav/sgds-mainnav-profile.d.ts +0 -15
- package/components/Mainnav/sgds-mainnav-profile.js +0 -29
- package/components/Mainnav/sgds-mainnav-profile.js.map +0 -1
- package/react/appnav/index.cjs.js +0 -45
- package/react/appnav/index.cjs.js.map +0 -1
- package/react/appnav/index.d.ts +0 -4
- package/react/appnav/index.js +0 -21
- package/react/appnav/index.js.map +0 -1
- package/react/appnav-profile/index.cjs.js +0 -40
- package/react/appnav-profile/index.cjs.js.map +0 -1
- package/react/appnav-profile/index.d.ts +0 -4
- package/react/appnav-profile/index.js +0 -16
- package/react/appnav-profile/index.js.map +0 -1
- package/react/base/nav-element.cjs.js +0 -268
- package/react/base/nav-element.cjs.js.map +0 -1
- package/react/base/nav-element.js +0 -264
- package/react/base/nav-element.js.map +0 -1
- package/react/base/nav-profile-element.cjs.js +0 -196
- package/react/base/nav-profile-element.cjs.js.map +0 -1
- package/react/base/nav-profile-element.js +0 -192
- package/react/base/nav-profile-element.js.map +0 -1
- package/react/base/nav-profile.cjs.js +0 -11
- package/react/base/nav-profile.cjs.js.map +0 -1
- package/react/base/nav-profile.js +0 -7
- package/react/base/nav-profile.js.map +0 -1
- package/react/components/Appnav/appnav-context.cjs.js +0 -13
- package/react/components/Appnav/appnav-context.cjs.js.map +0 -1
- package/react/components/Appnav/appnav-context.js +0 -8
- package/react/components/Appnav/appnav-context.js.map +0 -1
- package/react/components/Appnav/appnav.cjs.js +0 -11
- package/react/components/Appnav/appnav.cjs.js.map +0 -1
- package/react/components/Appnav/appnav.js +0 -7
- package/react/components/Appnav/appnav.js.map +0 -1
- package/react/components/Appnav/sgds-appnav-profile.cjs.js +0 -37
- package/react/components/Appnav/sgds-appnav-profile.cjs.js.map +0 -1
- package/react/components/Appnav/sgds-appnav-profile.js +0 -32
- package/react/components/Appnav/sgds-appnav-profile.js.map +0 -1
- package/react/components/Appnav/sgds-appnav.cjs.js +0 -189
- package/react/components/Appnav/sgds-appnav.cjs.js.map +0 -1
- package/react/components/Appnav/sgds-appnav.js +0 -184
- package/react/components/Appnav/sgds-appnav.js.map +0 -1
- package/react/components/Mainnav/sgds-mainnav-profile.cjs.js +0 -35
- package/react/components/Mainnav/sgds-mainnav-profile.cjs.js.map +0 -1
- package/react/components/Mainnav/sgds-mainnav-profile.js +0 -30
- package/react/components/Mainnav/sgds-mainnav-profile.js.map +0 -1
- package/react/mainnav-profile/index.cjs.js +0 -40
- package/react/mainnav-profile/index.cjs.js.map +0 -1
- package/react/mainnav-profile/index.d.ts +0 -4
- package/react/mainnav-profile/index.js +0 -16
- package/react/mainnav-profile/index.js.map +0 -1
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
-
|
|
6
|
-
var tslib = require('tslib');
|
|
7
|
-
var lit = require('lit');
|
|
8
|
-
var decorators_js = require('lit/decorators.js');
|
|
9
|
-
var ifDefined_js = require('lit/directives/if-defined.js');
|
|
10
|
-
var sgdsElement = require('./sgds-element.cjs.js');
|
|
11
|
-
var animate = require('../utils/animate.cjs.js');
|
|
12
|
-
var animationRegistry = require('../utils/animation-registry.cjs.js');
|
|
13
|
-
var breakpoints = require('../utils/breakpoints.cjs.js');
|
|
14
|
-
var event = require('../utils/event.cjs.js');
|
|
15
|
-
var generateId = require('../utils/generateId.cjs.js');
|
|
16
|
-
var watch = require('../utils/watch.cjs.js');
|
|
17
|
-
var sgdsIconButton = require('../components/IconButton/sgds-icon-button.cjs.js');
|
|
18
|
-
|
|
19
|
-
const SIZES = {
|
|
20
|
-
sm: breakpoints.SM_BREAKPOINT,
|
|
21
|
-
md: breakpoints.MD_BREAKPOINT,
|
|
22
|
-
lg: breakpoints.LG_BREAKPOINT,
|
|
23
|
-
xl: breakpoints.XL_BREAKPOINT,
|
|
24
|
-
xxl: breakpoints.XXL_BREAKPOINT,
|
|
25
|
-
never: Infinity,
|
|
26
|
-
always: -1
|
|
27
|
-
};
|
|
28
|
-
/**
|
|
29
|
-
* Base class for navigation components (sgds-mainnav and sgds-appnav).
|
|
30
|
-
* Provides collapse/expand behavior, breakpoint handling, and animation logic.
|
|
31
|
-
* Subclasses must implement `render()` and provide their own context.
|
|
32
|
-
*/
|
|
33
|
-
class NavElement extends sgdsElement["default"] {
|
|
34
|
-
constructor() {
|
|
35
|
-
super(...arguments);
|
|
36
|
-
/** Indicates if mobile menu is open or closed */
|
|
37
|
-
this.expanded = false;
|
|
38
|
-
/** Denotes the transition state of mobile mainnav menu opening */
|
|
39
|
-
this.expanding = false;
|
|
40
|
-
/** The href link for brand logo */
|
|
41
|
-
this.brandHref = "";
|
|
42
|
-
/** @internal */
|
|
43
|
-
this.collapseId = generateId["default"]("nav", "collapse");
|
|
44
|
-
/** The breakpoint, below which, the Navbar will collapse. When always the Navbar will always be expanded regardless of screen size. When never, the Navbar will always be collapsed */
|
|
45
|
-
this.expand = "lg";
|
|
46
|
-
this.breakpointReached = false;
|
|
47
|
-
/** @internal Whether sgds-*-profile is slotted in the profile slot */
|
|
48
|
-
this._hasProfileComponent = false;
|
|
49
|
-
this._handleClickOutsideBound = (event) => this._handleClickOutOfElement(event, this.body);
|
|
50
|
-
this._handleResizeBound = () => this._handleResize();
|
|
51
|
-
this._handleMobileNavBound = this._handleMobileNav.bind(this);
|
|
52
|
-
}
|
|
53
|
-
connectedCallback() {
|
|
54
|
-
super.connectedCallback();
|
|
55
|
-
this._handleResize();
|
|
56
|
-
window.addEventListener("click", this._handleClickOutsideBound);
|
|
57
|
-
window.addEventListener("resize", this._handleResizeBound);
|
|
58
|
-
}
|
|
59
|
-
disconnectedCallback() {
|
|
60
|
-
super.disconnectedCallback();
|
|
61
|
-
window.removeEventListener("click", this._handleClickOutsideBound);
|
|
62
|
-
window.removeEventListener("resize", this._handleResizeBound);
|
|
63
|
-
}
|
|
64
|
-
firstUpdated(changedProperties) {
|
|
65
|
-
super.firstUpdated(changedProperties);
|
|
66
|
-
if (this.breakpointReached && this.body) {
|
|
67
|
-
this.expanded = false;
|
|
68
|
-
this.body.hidden = true;
|
|
69
|
-
this._handleMobileNav();
|
|
70
|
-
this._onBreakpointReached(true);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
_handleClickOutOfElement(e, self) {
|
|
74
|
-
if (!e.composedPath().includes(self) && !(this.header && e.composedPath().includes(this.header))) {
|
|
75
|
-
this.hide();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
_handleSummaryClick() {
|
|
79
|
-
if (this.expanded) {
|
|
80
|
-
this.hide();
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
document.body.style.overflow = "hidden";
|
|
84
|
-
this.show();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
_handleResize() {
|
|
88
|
-
const newBreakpointReachedValue = window.innerWidth < SIZES[this.expand];
|
|
89
|
-
if (newBreakpointReachedValue !== this.breakpointReached) {
|
|
90
|
-
this.requestUpdate();
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
this.body ? (this.body.hidden = true) : null;
|
|
94
|
-
this.expanding = false;
|
|
95
|
-
}
|
|
96
|
-
if (newBreakpointReachedValue) {
|
|
97
|
-
this._handleMobileNav();
|
|
98
|
-
if (!this._isBreakpointReached()) {
|
|
99
|
-
this._onBreakpointReached(true);
|
|
100
|
-
window.addEventListener("scrollend", this._handleMobileNavBound);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
this._handleDesktopNav();
|
|
105
|
-
this._onBreakpointReached(false);
|
|
106
|
-
window.removeEventListener("scrollend", this._handleMobileNavBound);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
async _handleMobileNav() {
|
|
110
|
-
if (!this.nav)
|
|
111
|
-
return;
|
|
112
|
-
this.nav.appendChild(this.body);
|
|
113
|
-
await customElements.whenDefined("sgds-masthead");
|
|
114
|
-
const { bottom } = this.nav.getBoundingClientRect();
|
|
115
|
-
const navBodyPaddingY = parseFloat(getComputedStyle(this.body).paddingTop) + parseFloat(getComputedStyle(this.body).paddingBottom);
|
|
116
|
-
this.navScroll.style.maxHeight = `calc(100dvh - ${bottom}px - ${navBodyPaddingY}px)`;
|
|
117
|
-
}
|
|
118
|
-
_handleDesktopNav() {
|
|
119
|
-
var _a;
|
|
120
|
-
(_a = this.navbar) === null || _a === void 0 ? void 0 : _a.insertBefore(this.body, this.navbarEnd);
|
|
121
|
-
}
|
|
122
|
-
async _animateToShow() {
|
|
123
|
-
const sgdsShow = this.emit("sgds-show", { cancelable: true });
|
|
124
|
-
if (sgdsShow.defaultPrevented) {
|
|
125
|
-
this.expanding = false;
|
|
126
|
-
this.expanded = false;
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
await animate.stopAnimations(this.body);
|
|
130
|
-
this.body.hidden = false;
|
|
131
|
-
const { keyframes, options } = animationRegistry.getAnimation(this, "nav.show");
|
|
132
|
-
await animate.animateTo(this.body, animate.shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
|
|
133
|
-
this.body.style.height = "auto";
|
|
134
|
-
this._onMenuShown();
|
|
135
|
-
this.emit("sgds-after-show");
|
|
136
|
-
}
|
|
137
|
-
/** Hook for subclasses to perform actions after the mobile menu opens (e.g., focus management) */
|
|
138
|
-
_onMenuShown() {
|
|
139
|
-
// Default: no-op. Subclasses can override.
|
|
140
|
-
}
|
|
141
|
-
async _animateToHide() {
|
|
142
|
-
const sgdsHide = this.emit("sgds-hide", { cancelable: true });
|
|
143
|
-
if (sgdsHide.defaultPrevented) {
|
|
144
|
-
this.expanding = false;
|
|
145
|
-
this.expanded = true;
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
await animate.stopAnimations(this.body);
|
|
149
|
-
const { keyframes, options } = animationRegistry.getAnimation(this, "nav.hide");
|
|
150
|
-
await animate.animateTo(this.body, animate.shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
|
|
151
|
-
this.body.hidden = true;
|
|
152
|
-
this.body.style.height = "auto";
|
|
153
|
-
this.emit("sgds-after-hide");
|
|
154
|
-
}
|
|
155
|
-
/** @internal */
|
|
156
|
-
async handleOpenChange() {
|
|
157
|
-
var _a;
|
|
158
|
-
if (this.expanding) {
|
|
159
|
-
await this._animateToShow();
|
|
160
|
-
this.expanded = true;
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
(_a = this.header) === null || _a === void 0 ? void 0 : _a.focus();
|
|
164
|
-
await this._animateToHide();
|
|
165
|
-
this.expanded = false;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
/** Shows the menu. For when nav is in the collapsed form */
|
|
169
|
-
async show() {
|
|
170
|
-
if (this.expanded)
|
|
171
|
-
return;
|
|
172
|
-
this.expanding = true;
|
|
173
|
-
return event.waitForEvent(this, "sgds-after-show");
|
|
174
|
-
}
|
|
175
|
-
/** Hide the menu. For when nav is in the collapsed form */
|
|
176
|
-
async hide() {
|
|
177
|
-
if (!this.expanded)
|
|
178
|
-
return;
|
|
179
|
-
this.expanding = false;
|
|
180
|
-
document.body.style.removeProperty("overflow");
|
|
181
|
-
return event.waitForEvent(this, "sgds-after-hide");
|
|
182
|
-
}
|
|
183
|
-
/** Helper to get the expand CSS class */
|
|
184
|
-
_expandClass() {
|
|
185
|
-
switch (this.expand) {
|
|
186
|
-
case "always":
|
|
187
|
-
return "navbar-expand";
|
|
188
|
-
case "never":
|
|
189
|
-
break;
|
|
190
|
-
default:
|
|
191
|
-
return `navbar-expand-${this.expand}`;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
/** Helper: renders the hamburger toggler icon-button. Subclasses should call this in their render(). */
|
|
195
|
-
_renderToggler(tone) {
|
|
196
|
-
return lit.html `<sgds-icon-button
|
|
197
|
-
name=${this.expanded ? "cross" : "menu"}
|
|
198
|
-
variant="ghost"
|
|
199
|
-
size="sm"
|
|
200
|
-
tone=${ifDefined_js.ifDefined(tone && tone !== "default" ? "fixed-light" : undefined)}
|
|
201
|
-
class="navbar-toggler"
|
|
202
|
-
@click=${this._handleSummaryClick}
|
|
203
|
-
aria-controls="${this.collapseId}"
|
|
204
|
-
aria-expanded="${this.expanded}"
|
|
205
|
-
.ariaLabel=${"Toggle navigation"}
|
|
206
|
-
></sgds-icon-button>`;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
/** @internal */
|
|
210
|
-
NavElement.dependencies = {
|
|
211
|
-
"sgds-icon-button": sgdsIconButton.SgdsIconButton
|
|
212
|
-
};
|
|
213
|
-
tslib.__decorate([
|
|
214
|
-
decorators_js.state()
|
|
215
|
-
], NavElement.prototype, "expanded", void 0);
|
|
216
|
-
tslib.__decorate([
|
|
217
|
-
decorators_js.state()
|
|
218
|
-
], NavElement.prototype, "expanding", void 0);
|
|
219
|
-
tslib.__decorate([
|
|
220
|
-
decorators_js.query("nav")
|
|
221
|
-
], NavElement.prototype, "nav", void 0);
|
|
222
|
-
tslib.__decorate([
|
|
223
|
-
decorators_js.query(".navbar")
|
|
224
|
-
], NavElement.prototype, "navbar", void 0);
|
|
225
|
-
tslib.__decorate([
|
|
226
|
-
decorators_js.query(".navbar-toggler")
|
|
227
|
-
], NavElement.prototype, "header", void 0);
|
|
228
|
-
tslib.__decorate([
|
|
229
|
-
decorators_js.query(".navbar-body")
|
|
230
|
-
], NavElement.prototype, "body", void 0);
|
|
231
|
-
tslib.__decorate([
|
|
232
|
-
decorators_js.query(".navbar-nav-scroll")
|
|
233
|
-
], NavElement.prototype, "navScroll", void 0);
|
|
234
|
-
tslib.__decorate([
|
|
235
|
-
decorators_js.query(".navbar-end")
|
|
236
|
-
], NavElement.prototype, "navbarEnd", void 0);
|
|
237
|
-
tslib.__decorate([
|
|
238
|
-
decorators_js.property({ type: String })
|
|
239
|
-
], NavElement.prototype, "brandHref", void 0);
|
|
240
|
-
tslib.__decorate([
|
|
241
|
-
decorators_js.property({ type: String })
|
|
242
|
-
], NavElement.prototype, "expand", void 0);
|
|
243
|
-
tslib.__decorate([
|
|
244
|
-
decorators_js.state()
|
|
245
|
-
], NavElement.prototype, "breakpointReached", void 0);
|
|
246
|
-
tslib.__decorate([
|
|
247
|
-
decorators_js.state()
|
|
248
|
-
], NavElement.prototype, "_hasProfileComponent", void 0);
|
|
249
|
-
tslib.__decorate([
|
|
250
|
-
watch.watch("expanding", { waitUntilFirstUpdate: true })
|
|
251
|
-
], NavElement.prototype, "handleOpenChange", null);
|
|
252
|
-
animationRegistry.setDefaultAnimation("nav.show", {
|
|
253
|
-
keyframes: [
|
|
254
|
-
{ height: "0", opacity: "0" },
|
|
255
|
-
{ height: "auto", opacity: "1" }
|
|
256
|
-
],
|
|
257
|
-
options: { duration: 200, easing: "ease-in-out" }
|
|
258
|
-
});
|
|
259
|
-
animationRegistry.setDefaultAnimation("nav.hide", {
|
|
260
|
-
keyframes: [
|
|
261
|
-
{ height: "auto", opacity: "1" },
|
|
262
|
-
{ height: "0", opacity: "0" }
|
|
263
|
-
],
|
|
264
|
-
options: { duration: 200, easing: "ease-in-out" }
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
exports["default"] = NavElement;
|
|
268
|
-
//# sourceMappingURL=nav-element.cjs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nav-element.cjs.js","sources":["../../../src/base/nav-element.ts"],"sourcesContent":["import { html, nothing, PropertyValueMap, TemplateResult } from \"lit\";\nimport { property, query, state } from \"lit/decorators.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport SgdsElement from \"./sgds-element\";\nimport { animateTo, shimKeyframesHeightAuto, stopAnimations } from \"../utils/animate\";\nimport { getAnimation, setDefaultAnimation } from \"../utils/animation-registry\";\nimport { LG_BREAKPOINT, MD_BREAKPOINT, SM_BREAKPOINT, XL_BREAKPOINT, XXL_BREAKPOINT } from \"../utils/breakpoints\";\nimport { waitForEvent } from \"../utils/event\";\nimport genId from \"../utils/generateId\";\nimport { watch } from \"../utils/watch\";\nimport SgdsIconButton from \"../components/IconButton/sgds-icon-button\";\n\nexport type NavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\nexport type NavTone = \"default\" | \"brand\" | \"gradient-1\" | \"gradient-2\" | \"gradient-3\" | \"gradient-4\";\n\nconst SIZES: Record<NavExpandSize, number> = {\n sm: SM_BREAKPOINT,\n md: MD_BREAKPOINT,\n lg: LG_BREAKPOINT,\n xl: XL_BREAKPOINT,\n xxl: XXL_BREAKPOINT,\n never: Infinity,\n always: -1\n};\n\n/**\n * Base class for navigation components (sgds-mainnav and sgds-appnav).\n * Provides collapse/expand behavior, breakpoint handling, and animation logic.\n * Subclasses must implement `render()` and provide their own context.\n */\nexport default abstract class NavElement extends SgdsElement {\n /** @internal */\n static dependencies = {\n \"sgds-icon-button\": SgdsIconButton\n };\n\n /** Indicates if mobile menu is open or closed */\n @state()\n protected expanded = false;\n\n /** Denotes the transition state of mobile mainnav menu opening */\n @state()\n protected expanding = false;\n\n @query(\"nav\") protected nav!: HTMLElement;\n @query(\".navbar\") protected navbar!: HTMLElement;\n @query(\".navbar-toggler\") protected header!: HTMLElement;\n @query(\".navbar-body\") protected body!: HTMLElement;\n @query(\".navbar-nav-scroll\") protected navScroll!: HTMLElement;\n @query(\".navbar-end\") protected navbarEnd!: HTMLElement;\n\n /** The href link for brand logo */\n @property({ type: String })\n brandHref = \"\";\n\n /** @internal */\n protected collapseId = genId(\"nav\", \"collapse\");\n\n /** The breakpoint, below which, the Navbar will collapse. When always the Navbar will always be expanded regardless of screen size. When never, the Navbar will always be collapsed */\n @property({ type: String })\n expand: NavExpandSize = \"lg\";\n\n @state()\n protected breakpointReached = false;\n\n /** @internal Whether sgds-*-profile is slotted in the profile slot */\n @state()\n protected _hasProfileComponent = false;\n\n connectedCallback() {\n super.connectedCallback();\n this._handleResize();\n window.addEventListener(\"click\", this._handleClickOutsideBound);\n window.addEventListener(\"resize\", this._handleResizeBound);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener(\"click\", this._handleClickOutsideBound);\n window.removeEventListener(\"resize\", this._handleResizeBound);\n }\n\n firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n if (this.breakpointReached && this.body) {\n this.expanded = false;\n this.body.hidden = true;\n this._handleMobileNav();\n this._onBreakpointReached(true);\n }\n }\n\n private _handleClickOutsideBound = (event: MouseEvent) => this._handleClickOutOfElement(event, this.body);\n private _handleResizeBound = () => this._handleResize();\n\n private _handleClickOutOfElement(e: MouseEvent, self: HTMLElement) {\n if (!e.composedPath().includes(self) && !(this.header && e.composedPath().includes(this.header))) {\n this.hide();\n }\n }\n\n protected _handleSummaryClick() {\n if (this.expanded) {\n this.hide();\n } else {\n document.body.style.overflow = \"hidden\";\n this.show();\n }\n }\n\n protected _handleResize() {\n const newBreakpointReachedValue = window.innerWidth < SIZES[this.expand];\n if (newBreakpointReachedValue !== this.breakpointReached) {\n this.requestUpdate();\n } else {\n this.body ? (this.body.hidden = true) : null;\n this.expanding = false;\n }\n\n if (newBreakpointReachedValue) {\n this._handleMobileNav();\n if (!this._isBreakpointReached()) {\n this._onBreakpointReached(true);\n window.addEventListener(\"scrollend\", this._handleMobileNavBound);\n }\n } else {\n this._handleDesktopNav();\n this._onBreakpointReached(false);\n window.removeEventListener(\"scrollend\", this._handleMobileNavBound);\n }\n }\n\n /** Hook for subclasses to update context providers when breakpoint state changes */\n protected abstract _onBreakpointReached(reached: boolean): void;\n\n /** Hook for subclasses to check current breakpoint context state */\n protected abstract _isBreakpointReached(): boolean;\n\n private _handleMobileNavBound = this._handleMobileNav.bind(this);\n\n protected async _handleMobileNav() {\n if (!this.nav) return;\n this.nav.appendChild(this.body);\n await customElements.whenDefined(\"sgds-masthead\");\n\n const { bottom } = this.nav.getBoundingClientRect();\n const navBodyPaddingY =\n parseFloat(getComputedStyle(this.body).paddingTop) + parseFloat(getComputedStyle(this.body).paddingBottom);\n\n this.navScroll.style.maxHeight = `calc(100dvh - ${bottom}px - ${navBodyPaddingY}px)`;\n }\n\n protected _handleDesktopNav() {\n this.navbar?.insertBefore(this.body, this.navbarEnd);\n }\n\n private async _animateToShow() {\n const sgdsShow = this.emit(\"sgds-show\", { cancelable: true });\n if (sgdsShow.defaultPrevented) {\n this.expanding = false;\n this.expanded = false;\n return;\n }\n\n await stopAnimations(this.body);\n this.body.hidden = false;\n\n const { keyframes, options } = getAnimation(this, \"nav.show\");\n await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);\n this.body.style.height = \"auto\";\n\n this._onMenuShown();\n this.emit(\"sgds-after-show\");\n }\n\n /** Hook for subclasses to perform actions after the mobile menu opens (e.g., focus management) */\n protected _onMenuShown(): void {\n // Default: no-op. Subclasses can override.\n }\n\n private async _animateToHide() {\n const sgdsHide = this.emit(\"sgds-hide\", { cancelable: true });\n if (sgdsHide.defaultPrevented) {\n this.expanding = false;\n this.expanded = true;\n return;\n }\n\n await stopAnimations(this.body);\n\n const { keyframes, options } = getAnimation(this, \"nav.hide\");\n await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);\n this.body.hidden = true;\n this.body.style.height = \"auto\";\n this.emit(\"sgds-after-hide\");\n }\n\n /** @internal */\n @watch(\"expanding\", { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n if (this.expanding) {\n await this._animateToShow();\n this.expanded = true;\n } else {\n this.header?.focus();\n await this._animateToHide();\n this.expanded = false;\n }\n }\n\n /** Shows the menu. For when nav is in the collapsed form */\n public async show() {\n if (this.expanded) return;\n this.expanding = true;\n return waitForEvent(this, \"sgds-after-show\");\n }\n\n /** Hide the menu. For when nav is in the collapsed form */\n public async hide() {\n if (!this.expanded) return;\n this.expanding = false;\n document.body.style.removeProperty(\"overflow\");\n return waitForEvent(this, \"sgds-after-hide\");\n }\n\n /** Helper to get the expand CSS class */\n protected _expandClass() {\n switch (this.expand) {\n case \"always\":\n return \"navbar-expand\";\n case \"never\":\n break;\n default:\n return `navbar-expand-${this.expand}`;\n }\n }\n\n /** Helper: renders the hamburger toggler icon-button. Subclasses should call this in their render(). */\n protected _renderToggler(tone?: NavTone): TemplateResult | typeof nothing {\n return html`<sgds-icon-button\n name=${this.expanded ? \"cross\" : \"menu\"}\n variant=\"ghost\"\n size=\"sm\"\n tone=${ifDefined(tone && tone !== \"default\" ? \"fixed-light\" : undefined)}\n class=\"navbar-toggler\"\n @click=${this._handleSummaryClick}\n aria-controls=\"${this.collapseId}\"\n aria-expanded=\"${this.expanded}\"\n .ariaLabel=${\"Toggle navigation\"}\n ></sgds-icon-button>`;\n }\n}\n\nsetDefaultAnimation(\"nav.show\", {\n keyframes: [\n { height: \"0\", opacity: \"0\" },\n { height: \"auto\", opacity: \"1\" }\n ],\n options: { duration: 200, easing: \"ease-in-out\" }\n});\n\nsetDefaultAnimation(\"nav.hide\", {\n keyframes: [\n { height: \"auto\", opacity: \"1\" },\n { height: \"0\", opacity: \"0\" }\n ],\n options: { duration: 200, easing: \"ease-in-out\" }\n});\n"],"names":["SM_BREAKPOINT","MD_BREAKPOINT","LG_BREAKPOINT","XL_BREAKPOINT","XXL_BREAKPOINT","SgdsElement","genId","stopAnimations","getAnimation","animateTo","shimKeyframesHeightAuto","waitForEvent","html","ifDefined","SgdsIconButton","__decorate","state","query","property","watch","setDefaultAnimation"],"mappings":"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"}
|
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { __decorate } from 'tslib';
|
|
3
|
-
import { html } from 'lit';
|
|
4
|
-
import { state, query, property } from 'lit/decorators.js';
|
|
5
|
-
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
6
|
-
import SgdsElement from './sgds-element.js';
|
|
7
|
-
import { stopAnimations, animateTo, shimKeyframesHeightAuto } from '../utils/animate.js';
|
|
8
|
-
import { setDefaultAnimation, getAnimation } from '../utils/animation-registry.js';
|
|
9
|
-
import { SM_BREAKPOINT, MD_BREAKPOINT, LG_BREAKPOINT, XL_BREAKPOINT, XXL_BREAKPOINT } from '../utils/breakpoints.js';
|
|
10
|
-
import { waitForEvent } from '../utils/event.js';
|
|
11
|
-
import genId from '../utils/generateId.js';
|
|
12
|
-
import { watch } from '../utils/watch.js';
|
|
13
|
-
import { SgdsIconButton } from '../components/IconButton/sgds-icon-button.js';
|
|
14
|
-
|
|
15
|
-
const SIZES = {
|
|
16
|
-
sm: SM_BREAKPOINT,
|
|
17
|
-
md: MD_BREAKPOINT,
|
|
18
|
-
lg: LG_BREAKPOINT,
|
|
19
|
-
xl: XL_BREAKPOINT,
|
|
20
|
-
xxl: XXL_BREAKPOINT,
|
|
21
|
-
never: Infinity,
|
|
22
|
-
always: -1
|
|
23
|
-
};
|
|
24
|
-
/**
|
|
25
|
-
* Base class for navigation components (sgds-mainnav and sgds-appnav).
|
|
26
|
-
* Provides collapse/expand behavior, breakpoint handling, and animation logic.
|
|
27
|
-
* Subclasses must implement `render()` and provide their own context.
|
|
28
|
-
*/
|
|
29
|
-
class NavElement extends SgdsElement {
|
|
30
|
-
constructor() {
|
|
31
|
-
super(...arguments);
|
|
32
|
-
/** Indicates if mobile menu is open or closed */
|
|
33
|
-
this.expanded = false;
|
|
34
|
-
/** Denotes the transition state of mobile mainnav menu opening */
|
|
35
|
-
this.expanding = false;
|
|
36
|
-
/** The href link for brand logo */
|
|
37
|
-
this.brandHref = "";
|
|
38
|
-
/** @internal */
|
|
39
|
-
this.collapseId = genId("nav", "collapse");
|
|
40
|
-
/** The breakpoint, below which, the Navbar will collapse. When always the Navbar will always be expanded regardless of screen size. When never, the Navbar will always be collapsed */
|
|
41
|
-
this.expand = "lg";
|
|
42
|
-
this.breakpointReached = false;
|
|
43
|
-
/** @internal Whether sgds-*-profile is slotted in the profile slot */
|
|
44
|
-
this._hasProfileComponent = false;
|
|
45
|
-
this._handleClickOutsideBound = (event) => this._handleClickOutOfElement(event, this.body);
|
|
46
|
-
this._handleResizeBound = () => this._handleResize();
|
|
47
|
-
this._handleMobileNavBound = this._handleMobileNav.bind(this);
|
|
48
|
-
}
|
|
49
|
-
connectedCallback() {
|
|
50
|
-
super.connectedCallback();
|
|
51
|
-
this._handleResize();
|
|
52
|
-
window.addEventListener("click", this._handleClickOutsideBound);
|
|
53
|
-
window.addEventListener("resize", this._handleResizeBound);
|
|
54
|
-
}
|
|
55
|
-
disconnectedCallback() {
|
|
56
|
-
super.disconnectedCallback();
|
|
57
|
-
window.removeEventListener("click", this._handleClickOutsideBound);
|
|
58
|
-
window.removeEventListener("resize", this._handleResizeBound);
|
|
59
|
-
}
|
|
60
|
-
firstUpdated(changedProperties) {
|
|
61
|
-
super.firstUpdated(changedProperties);
|
|
62
|
-
if (this.breakpointReached && this.body) {
|
|
63
|
-
this.expanded = false;
|
|
64
|
-
this.body.hidden = true;
|
|
65
|
-
this._handleMobileNav();
|
|
66
|
-
this._onBreakpointReached(true);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
_handleClickOutOfElement(e, self) {
|
|
70
|
-
if (!e.composedPath().includes(self) && !(this.header && e.composedPath().includes(this.header))) {
|
|
71
|
-
this.hide();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
_handleSummaryClick() {
|
|
75
|
-
if (this.expanded) {
|
|
76
|
-
this.hide();
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
document.body.style.overflow = "hidden";
|
|
80
|
-
this.show();
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
_handleResize() {
|
|
84
|
-
const newBreakpointReachedValue = window.innerWidth < SIZES[this.expand];
|
|
85
|
-
if (newBreakpointReachedValue !== this.breakpointReached) {
|
|
86
|
-
this.requestUpdate();
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
this.body ? (this.body.hidden = true) : null;
|
|
90
|
-
this.expanding = false;
|
|
91
|
-
}
|
|
92
|
-
if (newBreakpointReachedValue) {
|
|
93
|
-
this._handleMobileNav();
|
|
94
|
-
if (!this._isBreakpointReached()) {
|
|
95
|
-
this._onBreakpointReached(true);
|
|
96
|
-
window.addEventListener("scrollend", this._handleMobileNavBound);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
this._handleDesktopNav();
|
|
101
|
-
this._onBreakpointReached(false);
|
|
102
|
-
window.removeEventListener("scrollend", this._handleMobileNavBound);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
async _handleMobileNav() {
|
|
106
|
-
if (!this.nav)
|
|
107
|
-
return;
|
|
108
|
-
this.nav.appendChild(this.body);
|
|
109
|
-
await customElements.whenDefined("sgds-masthead");
|
|
110
|
-
const { bottom } = this.nav.getBoundingClientRect();
|
|
111
|
-
const navBodyPaddingY = parseFloat(getComputedStyle(this.body).paddingTop) + parseFloat(getComputedStyle(this.body).paddingBottom);
|
|
112
|
-
this.navScroll.style.maxHeight = `calc(100dvh - ${bottom}px - ${navBodyPaddingY}px)`;
|
|
113
|
-
}
|
|
114
|
-
_handleDesktopNav() {
|
|
115
|
-
var _a;
|
|
116
|
-
(_a = this.navbar) === null || _a === void 0 ? void 0 : _a.insertBefore(this.body, this.navbarEnd);
|
|
117
|
-
}
|
|
118
|
-
async _animateToShow() {
|
|
119
|
-
const sgdsShow = this.emit("sgds-show", { cancelable: true });
|
|
120
|
-
if (sgdsShow.defaultPrevented) {
|
|
121
|
-
this.expanding = false;
|
|
122
|
-
this.expanded = false;
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
await stopAnimations(this.body);
|
|
126
|
-
this.body.hidden = false;
|
|
127
|
-
const { keyframes, options } = getAnimation(this, "nav.show");
|
|
128
|
-
await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
|
|
129
|
-
this.body.style.height = "auto";
|
|
130
|
-
this._onMenuShown();
|
|
131
|
-
this.emit("sgds-after-show");
|
|
132
|
-
}
|
|
133
|
-
/** Hook for subclasses to perform actions after the mobile menu opens (e.g., focus management) */
|
|
134
|
-
_onMenuShown() {
|
|
135
|
-
// Default: no-op. Subclasses can override.
|
|
136
|
-
}
|
|
137
|
-
async _animateToHide() {
|
|
138
|
-
const sgdsHide = this.emit("sgds-hide", { cancelable: true });
|
|
139
|
-
if (sgdsHide.defaultPrevented) {
|
|
140
|
-
this.expanding = false;
|
|
141
|
-
this.expanded = true;
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
await stopAnimations(this.body);
|
|
145
|
-
const { keyframes, options } = getAnimation(this, "nav.hide");
|
|
146
|
-
await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
|
|
147
|
-
this.body.hidden = true;
|
|
148
|
-
this.body.style.height = "auto";
|
|
149
|
-
this.emit("sgds-after-hide");
|
|
150
|
-
}
|
|
151
|
-
/** @internal */
|
|
152
|
-
async handleOpenChange() {
|
|
153
|
-
var _a;
|
|
154
|
-
if (this.expanding) {
|
|
155
|
-
await this._animateToShow();
|
|
156
|
-
this.expanded = true;
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
(_a = this.header) === null || _a === void 0 ? void 0 : _a.focus();
|
|
160
|
-
await this._animateToHide();
|
|
161
|
-
this.expanded = false;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
/** Shows the menu. For when nav is in the collapsed form */
|
|
165
|
-
async show() {
|
|
166
|
-
if (this.expanded)
|
|
167
|
-
return;
|
|
168
|
-
this.expanding = true;
|
|
169
|
-
return waitForEvent(this, "sgds-after-show");
|
|
170
|
-
}
|
|
171
|
-
/** Hide the menu. For when nav is in the collapsed form */
|
|
172
|
-
async hide() {
|
|
173
|
-
if (!this.expanded)
|
|
174
|
-
return;
|
|
175
|
-
this.expanding = false;
|
|
176
|
-
document.body.style.removeProperty("overflow");
|
|
177
|
-
return waitForEvent(this, "sgds-after-hide");
|
|
178
|
-
}
|
|
179
|
-
/** Helper to get the expand CSS class */
|
|
180
|
-
_expandClass() {
|
|
181
|
-
switch (this.expand) {
|
|
182
|
-
case "always":
|
|
183
|
-
return "navbar-expand";
|
|
184
|
-
case "never":
|
|
185
|
-
break;
|
|
186
|
-
default:
|
|
187
|
-
return `navbar-expand-${this.expand}`;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
/** Helper: renders the hamburger toggler icon-button. Subclasses should call this in their render(). */
|
|
191
|
-
_renderToggler(tone) {
|
|
192
|
-
return html `<sgds-icon-button
|
|
193
|
-
name=${this.expanded ? "cross" : "menu"}
|
|
194
|
-
variant="ghost"
|
|
195
|
-
size="sm"
|
|
196
|
-
tone=${ifDefined(tone && tone !== "default" ? "fixed-light" : undefined)}
|
|
197
|
-
class="navbar-toggler"
|
|
198
|
-
@click=${this._handleSummaryClick}
|
|
199
|
-
aria-controls="${this.collapseId}"
|
|
200
|
-
aria-expanded="${this.expanded}"
|
|
201
|
-
.ariaLabel=${"Toggle navigation"}
|
|
202
|
-
></sgds-icon-button>`;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
/** @internal */
|
|
206
|
-
NavElement.dependencies = {
|
|
207
|
-
"sgds-icon-button": SgdsIconButton
|
|
208
|
-
};
|
|
209
|
-
__decorate([
|
|
210
|
-
state()
|
|
211
|
-
], NavElement.prototype, "expanded", void 0);
|
|
212
|
-
__decorate([
|
|
213
|
-
state()
|
|
214
|
-
], NavElement.prototype, "expanding", void 0);
|
|
215
|
-
__decorate([
|
|
216
|
-
query("nav")
|
|
217
|
-
], NavElement.prototype, "nav", void 0);
|
|
218
|
-
__decorate([
|
|
219
|
-
query(".navbar")
|
|
220
|
-
], NavElement.prototype, "navbar", void 0);
|
|
221
|
-
__decorate([
|
|
222
|
-
query(".navbar-toggler")
|
|
223
|
-
], NavElement.prototype, "header", void 0);
|
|
224
|
-
__decorate([
|
|
225
|
-
query(".navbar-body")
|
|
226
|
-
], NavElement.prototype, "body", void 0);
|
|
227
|
-
__decorate([
|
|
228
|
-
query(".navbar-nav-scroll")
|
|
229
|
-
], NavElement.prototype, "navScroll", void 0);
|
|
230
|
-
__decorate([
|
|
231
|
-
query(".navbar-end")
|
|
232
|
-
], NavElement.prototype, "navbarEnd", void 0);
|
|
233
|
-
__decorate([
|
|
234
|
-
property({ type: String })
|
|
235
|
-
], NavElement.prototype, "brandHref", void 0);
|
|
236
|
-
__decorate([
|
|
237
|
-
property({ type: String })
|
|
238
|
-
], NavElement.prototype, "expand", void 0);
|
|
239
|
-
__decorate([
|
|
240
|
-
state()
|
|
241
|
-
], NavElement.prototype, "breakpointReached", void 0);
|
|
242
|
-
__decorate([
|
|
243
|
-
state()
|
|
244
|
-
], NavElement.prototype, "_hasProfileComponent", void 0);
|
|
245
|
-
__decorate([
|
|
246
|
-
watch("expanding", { waitUntilFirstUpdate: true })
|
|
247
|
-
], NavElement.prototype, "handleOpenChange", null);
|
|
248
|
-
setDefaultAnimation("nav.show", {
|
|
249
|
-
keyframes: [
|
|
250
|
-
{ height: "0", opacity: "0" },
|
|
251
|
-
{ height: "auto", opacity: "1" }
|
|
252
|
-
],
|
|
253
|
-
options: { duration: 200, easing: "ease-in-out" }
|
|
254
|
-
});
|
|
255
|
-
setDefaultAnimation("nav.hide", {
|
|
256
|
-
keyframes: [
|
|
257
|
-
{ height: "auto", opacity: "1" },
|
|
258
|
-
{ height: "0", opacity: "0" }
|
|
259
|
-
],
|
|
260
|
-
options: { duration: 200, easing: "ease-in-out" }
|
|
261
|
-
});
|
|
262
|
-
|
|
263
|
-
export { NavElement as default };
|
|
264
|
-
//# sourceMappingURL=nav-element.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nav-element.js","sources":["../../../src/base/nav-element.ts"],"sourcesContent":["import { html, nothing, PropertyValueMap, TemplateResult } from \"lit\";\nimport { property, query, state } from \"lit/decorators.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport SgdsElement from \"./sgds-element\";\nimport { animateTo, shimKeyframesHeightAuto, stopAnimations } from \"../utils/animate\";\nimport { getAnimation, setDefaultAnimation } from \"../utils/animation-registry\";\nimport { LG_BREAKPOINT, MD_BREAKPOINT, SM_BREAKPOINT, XL_BREAKPOINT, XXL_BREAKPOINT } from \"../utils/breakpoints\";\nimport { waitForEvent } from \"../utils/event\";\nimport genId from \"../utils/generateId\";\nimport { watch } from \"../utils/watch\";\nimport SgdsIconButton from \"../components/IconButton/sgds-icon-button\";\n\nexport type NavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\nexport type NavTone = \"default\" | \"brand\" | \"gradient-1\" | \"gradient-2\" | \"gradient-3\" | \"gradient-4\";\n\nconst SIZES: Record<NavExpandSize, number> = {\n sm: SM_BREAKPOINT,\n md: MD_BREAKPOINT,\n lg: LG_BREAKPOINT,\n xl: XL_BREAKPOINT,\n xxl: XXL_BREAKPOINT,\n never: Infinity,\n always: -1\n};\n\n/**\n * Base class for navigation components (sgds-mainnav and sgds-appnav).\n * Provides collapse/expand behavior, breakpoint handling, and animation logic.\n * Subclasses must implement `render()` and provide their own context.\n */\nexport default abstract class NavElement extends SgdsElement {\n /** @internal */\n static dependencies = {\n \"sgds-icon-button\": SgdsIconButton\n };\n\n /** Indicates if mobile menu is open or closed */\n @state()\n protected expanded = false;\n\n /** Denotes the transition state of mobile mainnav menu opening */\n @state()\n protected expanding = false;\n\n @query(\"nav\") protected nav!: HTMLElement;\n @query(\".navbar\") protected navbar!: HTMLElement;\n @query(\".navbar-toggler\") protected header!: HTMLElement;\n @query(\".navbar-body\") protected body!: HTMLElement;\n @query(\".navbar-nav-scroll\") protected navScroll!: HTMLElement;\n @query(\".navbar-end\") protected navbarEnd!: HTMLElement;\n\n /** The href link for brand logo */\n @property({ type: String })\n brandHref = \"\";\n\n /** @internal */\n protected collapseId = genId(\"nav\", \"collapse\");\n\n /** The breakpoint, below which, the Navbar will collapse. When always the Navbar will always be expanded regardless of screen size. When never, the Navbar will always be collapsed */\n @property({ type: String })\n expand: NavExpandSize = \"lg\";\n\n @state()\n protected breakpointReached = false;\n\n /** @internal Whether sgds-*-profile is slotted in the profile slot */\n @state()\n protected _hasProfileComponent = false;\n\n connectedCallback() {\n super.connectedCallback();\n this._handleResize();\n window.addEventListener(\"click\", this._handleClickOutsideBound);\n window.addEventListener(\"resize\", this._handleResizeBound);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener(\"click\", this._handleClickOutsideBound);\n window.removeEventListener(\"resize\", this._handleResizeBound);\n }\n\n firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n if (this.breakpointReached && this.body) {\n this.expanded = false;\n this.body.hidden = true;\n this._handleMobileNav();\n this._onBreakpointReached(true);\n }\n }\n\n private _handleClickOutsideBound = (event: MouseEvent) => this._handleClickOutOfElement(event, this.body);\n private _handleResizeBound = () => this._handleResize();\n\n private _handleClickOutOfElement(e: MouseEvent, self: HTMLElement) {\n if (!e.composedPath().includes(self) && !(this.header && e.composedPath().includes(this.header))) {\n this.hide();\n }\n }\n\n protected _handleSummaryClick() {\n if (this.expanded) {\n this.hide();\n } else {\n document.body.style.overflow = \"hidden\";\n this.show();\n }\n }\n\n protected _handleResize() {\n const newBreakpointReachedValue = window.innerWidth < SIZES[this.expand];\n if (newBreakpointReachedValue !== this.breakpointReached) {\n this.requestUpdate();\n } else {\n this.body ? (this.body.hidden = true) : null;\n this.expanding = false;\n }\n\n if (newBreakpointReachedValue) {\n this._handleMobileNav();\n if (!this._isBreakpointReached()) {\n this._onBreakpointReached(true);\n window.addEventListener(\"scrollend\", this._handleMobileNavBound);\n }\n } else {\n this._handleDesktopNav();\n this._onBreakpointReached(false);\n window.removeEventListener(\"scrollend\", this._handleMobileNavBound);\n }\n }\n\n /** Hook for subclasses to update context providers when breakpoint state changes */\n protected abstract _onBreakpointReached(reached: boolean): void;\n\n /** Hook for subclasses to check current breakpoint context state */\n protected abstract _isBreakpointReached(): boolean;\n\n private _handleMobileNavBound = this._handleMobileNav.bind(this);\n\n protected async _handleMobileNav() {\n if (!this.nav) return;\n this.nav.appendChild(this.body);\n await customElements.whenDefined(\"sgds-masthead\");\n\n const { bottom } = this.nav.getBoundingClientRect();\n const navBodyPaddingY =\n parseFloat(getComputedStyle(this.body).paddingTop) + parseFloat(getComputedStyle(this.body).paddingBottom);\n\n this.navScroll.style.maxHeight = `calc(100dvh - ${bottom}px - ${navBodyPaddingY}px)`;\n }\n\n protected _handleDesktopNav() {\n this.navbar?.insertBefore(this.body, this.navbarEnd);\n }\n\n private async _animateToShow() {\n const sgdsShow = this.emit(\"sgds-show\", { cancelable: true });\n if (sgdsShow.defaultPrevented) {\n this.expanding = false;\n this.expanded = false;\n return;\n }\n\n await stopAnimations(this.body);\n this.body.hidden = false;\n\n const { keyframes, options } = getAnimation(this, \"nav.show\");\n await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);\n this.body.style.height = \"auto\";\n\n this._onMenuShown();\n this.emit(\"sgds-after-show\");\n }\n\n /** Hook for subclasses to perform actions after the mobile menu opens (e.g., focus management) */\n protected _onMenuShown(): void {\n // Default: no-op. Subclasses can override.\n }\n\n private async _animateToHide() {\n const sgdsHide = this.emit(\"sgds-hide\", { cancelable: true });\n if (sgdsHide.defaultPrevented) {\n this.expanding = false;\n this.expanded = true;\n return;\n }\n\n await stopAnimations(this.body);\n\n const { keyframes, options } = getAnimation(this, \"nav.hide\");\n await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);\n this.body.hidden = true;\n this.body.style.height = \"auto\";\n this.emit(\"sgds-after-hide\");\n }\n\n /** @internal */\n @watch(\"expanding\", { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n if (this.expanding) {\n await this._animateToShow();\n this.expanded = true;\n } else {\n this.header?.focus();\n await this._animateToHide();\n this.expanded = false;\n }\n }\n\n /** Shows the menu. For when nav is in the collapsed form */\n public async show() {\n if (this.expanded) return;\n this.expanding = true;\n return waitForEvent(this, \"sgds-after-show\");\n }\n\n /** Hide the menu. For when nav is in the collapsed form */\n public async hide() {\n if (!this.expanded) return;\n this.expanding = false;\n document.body.style.removeProperty(\"overflow\");\n return waitForEvent(this, \"sgds-after-hide\");\n }\n\n /** Helper to get the expand CSS class */\n protected _expandClass() {\n switch (this.expand) {\n case \"always\":\n return \"navbar-expand\";\n case \"never\":\n break;\n default:\n return `navbar-expand-${this.expand}`;\n }\n }\n\n /** Helper: renders the hamburger toggler icon-button. Subclasses should call this in their render(). */\n protected _renderToggler(tone?: NavTone): TemplateResult | typeof nothing {\n return html`<sgds-icon-button\n name=${this.expanded ? \"cross\" : \"menu\"}\n variant=\"ghost\"\n size=\"sm\"\n tone=${ifDefined(tone && tone !== \"default\" ? \"fixed-light\" : undefined)}\n class=\"navbar-toggler\"\n @click=${this._handleSummaryClick}\n aria-controls=\"${this.collapseId}\"\n aria-expanded=\"${this.expanded}\"\n .ariaLabel=${\"Toggle navigation\"}\n ></sgds-icon-button>`;\n }\n}\n\nsetDefaultAnimation(\"nav.show\", {\n keyframes: [\n { height: \"0\", opacity: \"0\" },\n { height: \"auto\", opacity: \"1\" }\n ],\n options: { duration: 200, easing: \"ease-in-out\" }\n});\n\nsetDefaultAnimation(\"nav.hide\", {\n keyframes: [\n { height: \"auto\", opacity: \"1\" },\n { height: \"0\", opacity: \"0\" }\n ],\n options: { duration: 200, easing: \"ease-in-out\" }\n});\n"],"names":[],"mappings":"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"}
|