@govtechsg/sgds-web-component 3.26.1-rc.0 → 3.26.1-rc.2
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/components/Breadcrumb/index.umd.min.js +25 -25
- package/components/Breadcrumb/index.umd.min.js.map +1 -1
- package/components/Dropdown/dropdown-item.js +1 -1
- package/components/Dropdown/index.umd.min.js +4 -4
- package/components/Dropdown/index.umd.min.js.map +1 -1
- package/components/Dropdown/sgds-dropdown-item.d.ts +2 -0
- package/components/Dropdown/sgds-dropdown-item.js +8 -2
- package/components/Dropdown/sgds-dropdown-item.js.map +1 -1
- package/components/Mainnav/index.d.ts +2 -0
- package/components/Mainnav/index.js +2 -0
- package/components/Mainnav/index.js.map +1 -1
- package/components/Mainnav/index.umd.min.js +327 -286
- 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-profile.js +6 -0
- package/components/Mainnav/mainnav-profile.js.map +1 -0
- package/components/Mainnav/mainnav.js +1 -1
- package/components/Mainnav/sgds-mainnav-profile.d.ts +41 -0
- package/components/Mainnav/sgds-mainnav-profile.js +136 -0
- package/components/Mainnav/sgds-mainnav-profile.js.map +1 -0
- package/components/Mainnav/sgds-mainnav.d.ts +14 -16
- package/components/Mainnav/sgds-mainnav.js +59 -21
- package/components/Mainnav/sgds-mainnav.js.map +1 -1
- package/components/OverflowMenu/index.umd.min.js +4 -4
- package/components/OverflowMenu/index.umd.min.js.map +1 -1
- package/components/QuantityToggle/index.umd.min.js +22 -22
- package/components/QuantityToggle/index.umd.min.js.map +1 -1
- package/components/QuantityToggle/sgds-quantity-toggle.js +9 -11
- package/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
- package/components/index.d.ts +1 -0
- package/components/index.js +1 -0
- package/components/index.js.map +1 -1
- package/components/index.umd.min.js +336 -295
- package/components/index.umd.min.js.map +1 -1
- package/css/fouc.css +3 -2
- package/custom-elements.json +6127 -5751
- package/index.umd.min.js +404 -363
- package/index.umd.min.js.map +1 -1
- package/package.json +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 +8 -2
- package/react/components/Dropdown/sgds-dropdown-item.cjs.js.map +1 -1
- package/react/components/Dropdown/sgds-dropdown-item.js +8 -2
- package/react/components/Dropdown/sgds-dropdown-item.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-profile.cjs.js +11 -0
- package/react/components/Mainnav/mainnav-profile.cjs.js.map +1 -0
- package/react/components/Mainnav/mainnav-profile.js +7 -0
- package/react/components/Mainnav/mainnav-profile.js.map +1 -0
- package/react/components/Mainnav/mainnav.cjs.js +1 -1
- package/react/components/Mainnav/mainnav.js +1 -1
- package/react/components/Mainnav/sgds-mainnav-profile.cjs.js +142 -0
- package/react/components/Mainnav/sgds-mainnav-profile.cjs.js.map +1 -0
- package/react/components/Mainnav/sgds-mainnav-profile.js +137 -0
- package/react/components/Mainnav/sgds-mainnav-profile.js.map +1 -0
- package/react/components/Mainnav/sgds-mainnav.cjs.js +58 -20
- package/react/components/Mainnav/sgds-mainnav.cjs.js.map +1 -1
- package/react/components/Mainnav/sgds-mainnav.js +59 -21
- package/react/components/Mainnav/sgds-mainnav.js.map +1 -1
- package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js +9 -11
- package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js.map +1 -1
- package/react/components/QuantityToggle/sgds-quantity-toggle.js +9 -11
- package/react/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
- package/react/index.cjs.js +82 -80
- package/react/index.cjs.js.map +1 -1
- package/react/index.d.ts +3 -2
- package/react/index.js +3 -2
- package/react/index.js.map +1 -1
- package/react/mainnav-profile/index.cjs.js +40 -0
- package/react/mainnav-profile/index.cjs.js.map +1 -0
- package/react/mainnav-profile/index.d.ts +4 -0
- package/react/mainnav-profile/index.js +16 -0
- package/react/mainnav-profile/index.js.map +1 -0
- package/themes/blue.css +11 -11
- package/themes/cyan.css +10 -10
- 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 +5 -0
- package/types/react.d.ts +71 -51
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { __decorate } from 'tslib';
|
|
3
|
+
import { html, nothing } from 'lit';
|
|
4
|
+
import { consume } from '@lit/context';
|
|
5
|
+
import { state, property } from 'lit/decorators.js';
|
|
6
|
+
import { classMap } from 'lit/directives/class-map.js';
|
|
7
|
+
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
8
|
+
import { offset } from '@floating-ui/dom';
|
|
9
|
+
import SgdsElement from '../../base/sgds-element.js';
|
|
10
|
+
import { SgdsDropdown } from '../Dropdown/sgds-dropdown.js';
|
|
11
|
+
import { SgdsDropdownItem } from '../Dropdown/sgds-dropdown-item.js';
|
|
12
|
+
import { SgdsIcon } from '../Icon/sgds-icon.js';
|
|
13
|
+
import { MainnavBreakpointContext } from './mainnav-context.js';
|
|
14
|
+
import css_248z from './mainnav-profile.js';
|
|
15
|
+
import genId from '../../utils/generateId.js';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @summary A profile component for the mainnav that shows a full dropdown in desktop and handles its own mobile menu.
|
|
19
|
+
* In desktop: renders avatar + label + secondaryText with a dropdown.
|
|
20
|
+
* In mobile: renders the avatar as a toggler that opens a self-contained mobile panel with profile items.
|
|
21
|
+
* When present, it disables the mainnav's default hamburger toggler.
|
|
22
|
+
*
|
|
23
|
+
* @slot avatar - Avatar element displayed in both desktop (before label) and mobile (as toggler)
|
|
24
|
+
* @slot default - Profile menu items (sgds-dropdown-item elements)
|
|
25
|
+
*/
|
|
26
|
+
class SgdsMainnavProfile extends SgdsElement {
|
|
27
|
+
constructor() {
|
|
28
|
+
super(...arguments);
|
|
29
|
+
this._breakpointReached = true;
|
|
30
|
+
/** @internal Whether the mobile menu is open */
|
|
31
|
+
this._mobileMenuOpen = false;
|
|
32
|
+
/** Primary text displayed next to the avatar in desktop (e.g. user name) */
|
|
33
|
+
this.label = "";
|
|
34
|
+
/** Secondary text displayed below the label in desktop (e.g. agency or role) */
|
|
35
|
+
this.secondaryText = "";
|
|
36
|
+
/** When true, disables the profile dropdown */
|
|
37
|
+
this.disabled = false;
|
|
38
|
+
/** Accessible label for the profile toggle button */
|
|
39
|
+
this.ariaLabel = "";
|
|
40
|
+
/** Controls dropdown close behavior. "default" auto-closes on item/outside click, "outside" closes only on outside click, "inside" prevents auto-close. */
|
|
41
|
+
this.close = "default";
|
|
42
|
+
/** @internal */
|
|
43
|
+
this.togglerId = genId("profile", "button");
|
|
44
|
+
this._handleMobileToggle = () => {
|
|
45
|
+
this._mobileMenuOpen = !this._mobileMenuOpen;
|
|
46
|
+
};
|
|
47
|
+
this._handleKeydown = (e) => {
|
|
48
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
49
|
+
e.preventDefault();
|
|
50
|
+
this._handleMobileToggle();
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
render() {
|
|
55
|
+
if (!this._breakpointReached) {
|
|
56
|
+
// Desktop: dropdown with avatar + label + secondaryText
|
|
57
|
+
return html `
|
|
58
|
+
<sgds-dropdown .floatingOpts=${{ middleware: [offset(0)] }} ?disabled=${this.disabled} close=${this.close}>
|
|
59
|
+
<button
|
|
60
|
+
class="${classMap({
|
|
61
|
+
"nav-link": true,
|
|
62
|
+
disabled: this.disabled
|
|
63
|
+
})}"
|
|
64
|
+
aria-disabled=${this.disabled ? "true" : "false"}
|
|
65
|
+
aria-label=${ifDefined(this.ariaLabel)}
|
|
66
|
+
id=${this.togglerId}
|
|
67
|
+
tabindex=${this.disabled ? "-1" : "0"}
|
|
68
|
+
slot="toggler"
|
|
69
|
+
>
|
|
70
|
+
<slot name="avatar"></slot>
|
|
71
|
+
${this.label || this.secondaryText
|
|
72
|
+
? html `<div class="profile-text">
|
|
73
|
+
${this.label ? html `<span class="profile-label">${this.label}</span>` : nothing}
|
|
74
|
+
${this.secondaryText
|
|
75
|
+
? html `<span class="profile-secondary-text">${this.secondaryText}</span>`
|
|
76
|
+
: nothing}
|
|
77
|
+
</div>`
|
|
78
|
+
: nothing}
|
|
79
|
+
<sgds-icon name="chevron-down" size="md"></sgds-icon>
|
|
80
|
+
</button>
|
|
81
|
+
<slot></slot>
|
|
82
|
+
</sgds-dropdown>
|
|
83
|
+
`;
|
|
84
|
+
}
|
|
85
|
+
// Mobile: avatar toggler + self-contained mobile panel
|
|
86
|
+
return html `
|
|
87
|
+
<div
|
|
88
|
+
class="profile-avatar-mobile"
|
|
89
|
+
role="button"
|
|
90
|
+
tabindex="0"
|
|
91
|
+
aria-label=${this.ariaLabel || "Toggle navigation"}
|
|
92
|
+
aria-expanded=${this._mobileMenuOpen ? "true" : "false"}
|
|
93
|
+
@click=${this._handleMobileToggle}
|
|
94
|
+
@keydown=${this._handleKeydown}
|
|
95
|
+
>
|
|
96
|
+
<slot name="avatar"></slot>
|
|
97
|
+
</div>
|
|
98
|
+
<div class="profile-mobile-panel" ?hidden=${!this._mobileMenuOpen}>
|
|
99
|
+
<div class="profile-mobile-items">
|
|
100
|
+
<slot></slot>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
SgdsMainnavProfile.styles = [...SgdsElement.styles, css_248z];
|
|
107
|
+
/** @internal */
|
|
108
|
+
SgdsMainnavProfile.dependencies = {
|
|
109
|
+
"sgds-dropdown": SgdsDropdown,
|
|
110
|
+
"sgds-dropdown-item": SgdsDropdownItem,
|
|
111
|
+
"sgds-icon": SgdsIcon
|
|
112
|
+
};
|
|
113
|
+
__decorate([
|
|
114
|
+
consume({ context: MainnavBreakpointContext, subscribe: true }),
|
|
115
|
+
state()
|
|
116
|
+
], SgdsMainnavProfile.prototype, "_breakpointReached", void 0);
|
|
117
|
+
__decorate([
|
|
118
|
+
state()
|
|
119
|
+
], SgdsMainnavProfile.prototype, "_mobileMenuOpen", void 0);
|
|
120
|
+
__decorate([
|
|
121
|
+
property({ type: String, reflect: true })
|
|
122
|
+
], SgdsMainnavProfile.prototype, "label", void 0);
|
|
123
|
+
__decorate([
|
|
124
|
+
property({ type: String, reflect: true })
|
|
125
|
+
], SgdsMainnavProfile.prototype, "secondaryText", void 0);
|
|
126
|
+
__decorate([
|
|
127
|
+
property({ type: Boolean })
|
|
128
|
+
], SgdsMainnavProfile.prototype, "disabled", void 0);
|
|
129
|
+
__decorate([
|
|
130
|
+
property({ type: String })
|
|
131
|
+
], SgdsMainnavProfile.prototype, "ariaLabel", void 0);
|
|
132
|
+
__decorate([
|
|
133
|
+
property({ type: String })
|
|
134
|
+
], SgdsMainnavProfile.prototype, "close", void 0);
|
|
135
|
+
|
|
136
|
+
export { SgdsMainnavProfile, SgdsMainnavProfile as default };
|
|
137
|
+
//# sourceMappingURL=sgds-mainnav-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sgds-mainnav-profile.js","sources":["../../../../src/components/Mainnav/sgds-mainnav-profile.ts"],"sourcesContent":["import { html, nothing } from \"lit\";\nimport { consume } from \"@lit/context\";\nimport { property, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { offset } from \"@floating-ui/dom\";\nimport SgdsElement from \"../../base/sgds-element\";\nimport SgdsDropdown from \"../Dropdown/sgds-dropdown\";\nimport SgdsDropdownItem from \"../Dropdown/sgds-dropdown-item\";\nimport SgdsIcon from \"../Icon/sgds-icon\";\nimport { MainnavBreakpointContext } from \"./mainnav-context\";\nimport mainnavProfileStyle from \"./mainnav-profile.css\";\nimport genId from \"../../utils/generateId\";\n\n/**\n * @summary A profile component for the mainnav that shows a full dropdown in desktop and handles its own mobile menu.\n * In desktop: renders avatar + label + secondaryText with a dropdown.\n * In mobile: renders the avatar as a toggler that opens a self-contained mobile panel with profile items.\n * When present, it disables the mainnav's default hamburger toggler.\n *\n * @slot avatar - Avatar element displayed in both desktop (before label) and mobile (as toggler)\n * @slot default - Profile menu items (sgds-dropdown-item elements)\n */\nexport class SgdsMainnavProfile extends SgdsElement {\n static styles = [...SgdsElement.styles, mainnavProfileStyle];\n /** @internal */\n static dependencies = {\n \"sgds-dropdown\": SgdsDropdown,\n \"sgds-dropdown-item\": SgdsDropdownItem,\n \"sgds-icon\": SgdsIcon\n };\n\n @consume({ context: MainnavBreakpointContext, subscribe: true })\n @state()\n private _breakpointReached = true;\n\n /** @internal Whether the mobile menu is open */\n @state()\n private _mobileMenuOpen = false;\n\n /** Primary text displayed next to the avatar in desktop (e.g. user name) */\n @property({ type: String, reflect: true })\n label = \"\";\n\n /** Secondary text displayed below the label in desktop (e.g. agency or role) */\n @property({ type: String, reflect: true })\n secondaryText = \"\";\n\n /** When true, disables the profile dropdown */\n @property({ type: Boolean })\n disabled = false;\n\n /** Accessible label for the profile toggle button */\n @property({ type: String })\n ariaLabel = \"\";\n\n /** Controls dropdown close behavior. \"default\" auto-closes on item/outside click, \"outside\" closes only on outside click, \"inside\" prevents auto-close. */\n @property({ type: String })\n close: \"default\" | \"outside\" | \"inside\" = \"default\";\n\n /** @internal */\n private togglerId: string = genId(\"profile\", \"button\");\n\n private _handleMobileToggle = () => {\n this._mobileMenuOpen = !this._mobileMenuOpen;\n };\n\n private _handleKeydown = (e: KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n this._handleMobileToggle();\n }\n };\n\n render() {\n if (!this._breakpointReached) {\n // Desktop: dropdown with avatar + label + secondaryText\n return html`\n <sgds-dropdown .floatingOpts=${{ middleware: [offset(0)] }} ?disabled=${this.disabled} close=${this.close}>\n <button\n class=\"${classMap({\n \"nav-link\": true,\n disabled: this.disabled\n })}\"\n aria-disabled=${this.disabled ? \"true\" : \"false\"}\n aria-label=${ifDefined(this.ariaLabel)}\n id=${this.togglerId}\n tabindex=${this.disabled ? \"-1\" : \"0\"}\n slot=\"toggler\"\n >\n <slot name=\"avatar\"></slot>\n ${this.label || this.secondaryText\n ? html`<div class=\"profile-text\">\n ${this.label ? html`<span class=\"profile-label\">${this.label}</span>` : nothing}\n ${this.secondaryText\n ? html`<span class=\"profile-secondary-text\">${this.secondaryText}</span>`\n : nothing}\n </div>`\n : nothing}\n <sgds-icon name=\"chevron-down\" size=\"md\"></sgds-icon>\n </button>\n <slot></slot>\n </sgds-dropdown>\n `;\n }\n\n // Mobile: avatar toggler + self-contained mobile panel\n return html`\n <div\n class=\"profile-avatar-mobile\"\n role=\"button\"\n tabindex=\"0\"\n aria-label=${this.ariaLabel || \"Toggle navigation\"}\n aria-expanded=${this._mobileMenuOpen ? \"true\" : \"false\"}\n @click=${this._handleMobileToggle}\n @keydown=${this._handleKeydown}\n >\n <slot name=\"avatar\"></slot>\n </div>\n <div class=\"profile-mobile-panel\" ?hidden=${!this._mobileMenuOpen}>\n <div class=\"profile-mobile-items\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n}\n\nexport default SgdsMainnavProfile;\n"],"names":["mainnavProfileStyle"],"mappings":"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"}
|
|
@@ -38,8 +38,10 @@ const SIZES = {
|
|
|
38
38
|
* @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.
|
|
39
39
|
*
|
|
40
40
|
* @slot default - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.
|
|
41
|
+
* @slot start - Elements in this slot will be positioned to the left of the brand.
|
|
41
42
|
* @slot end - Elements in this slot will be positioned to the right end of .navbar-nav. Elements in this slot will also be included in collapsed menu.
|
|
42
43
|
* @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here
|
|
44
|
+
* @slot profile - Profile slot positioned at the far right in desktop. In mobile, moves into the collapsed menu as the first item.
|
|
43
45
|
* @slot non-collapsible - Elements in this slot will not be collapsed
|
|
44
46
|
*
|
|
45
47
|
*/
|
|
@@ -51,16 +53,18 @@ class SgdsMainnav extends sgdsElement["default"] {
|
|
|
51
53
|
this.expanded = false;
|
|
52
54
|
/** Denotes the transition state of mobile mainnav menu opening */
|
|
53
55
|
this.expanding = false;
|
|
56
|
+
/** @internal Whether sgds-mainnav-profile is slotted in the profile slot */
|
|
57
|
+
this._hasProfileComponent = false;
|
|
54
58
|
/** Used only for SSR to indicate the presence of the `non-collapsible` slot. */
|
|
55
59
|
this.hasNonCollapsibleSlot = false;
|
|
56
60
|
/** The href link for brand logo */
|
|
57
61
|
this.brandHref = "";
|
|
62
|
+
this.tone = "default";
|
|
58
63
|
this.collapseId = generateId["default"]("mainnav", "collapse");
|
|
59
64
|
/** 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 */
|
|
60
65
|
this.expand = "lg";
|
|
61
66
|
/** When true, removes max-width constraint to allow content to stretch full screen width */
|
|
62
67
|
this.fluid = false;
|
|
63
|
-
/** @internal */
|
|
64
68
|
this.breakpointReached = false;
|
|
65
69
|
this.hasSlotController = new slot.HasSlotController(this, "non-collapsible");
|
|
66
70
|
this._handleMobileNavBound = this._handleMobileNav.bind(this);
|
|
@@ -98,7 +102,7 @@ class SgdsMainnav extends sgdsElement["default"] {
|
|
|
98
102
|
this.hasNonCollapsibleSlot = this.hasSlotController.test("non-collapsible");
|
|
99
103
|
}
|
|
100
104
|
_handleClickOutOfElement(e, self) {
|
|
101
|
-
if (!e.composedPath().includes(self) && !e.composedPath().includes(this.header)) {
|
|
105
|
+
if (!e.composedPath().includes(self) && !(this.header && e.composedPath().includes(this.header))) {
|
|
102
106
|
this.hide();
|
|
103
107
|
}
|
|
104
108
|
}
|
|
@@ -145,7 +149,7 @@ class SgdsMainnav extends sgdsElement["default"] {
|
|
|
145
149
|
}
|
|
146
150
|
_handleDesktopNav() {
|
|
147
151
|
var _a;
|
|
148
|
-
(_a = this.navbar) === null || _a === void 0 ? void 0 : _a.insertBefore(this.body, this.
|
|
152
|
+
(_a = this.navbar) === null || _a === void 0 ? void 0 : _a.insertBefore(this.body, this.navbarEnd);
|
|
149
153
|
}
|
|
150
154
|
async _animateToShow() {
|
|
151
155
|
const sgdsShow = this.emit("sgds-show", { cancelable: true });
|
|
@@ -177,13 +181,14 @@ class SgdsMainnav extends sgdsElement["default"] {
|
|
|
177
181
|
}
|
|
178
182
|
/** @internal */
|
|
179
183
|
async handleOpenChange() {
|
|
184
|
+
var _a;
|
|
180
185
|
if (this.expanding) {
|
|
181
186
|
// Show
|
|
182
187
|
await this._animateToShow();
|
|
183
188
|
this.expanded = true;
|
|
184
189
|
}
|
|
185
190
|
else {
|
|
186
|
-
this.header.focus();
|
|
191
|
+
(_a = this.header) === null || _a === void 0 ? void 0 : _a.focus();
|
|
187
192
|
// Hide
|
|
188
193
|
await this._animateToHide();
|
|
189
194
|
this.expanded = false;
|
|
@@ -210,7 +215,13 @@ class SgdsMainnav extends sgdsElement["default"] {
|
|
|
210
215
|
const childElements = e.target.assignedElements({ flatten: true });
|
|
211
216
|
childElements.forEach(el => {
|
|
212
217
|
el.setAttribute("expand", this.expand);
|
|
218
|
+
el.setAttribute("tone", this.tone);
|
|
213
219
|
});
|
|
220
|
+
if (this._hasProfileComponent && childElements.length > 0) {
|
|
221
|
+
console.warn("[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. " +
|
|
222
|
+
"The profile component disables the mainnav hamburger menu, so nav items will have no mobile menu. " +
|
|
223
|
+
"Use a sidebar for navigation in operational apps.");
|
|
224
|
+
}
|
|
214
225
|
}
|
|
215
226
|
// assigning name attribute to elements added in slot="end", to use wildcard css selector to assign styles only to *-mainnav-item
|
|
216
227
|
_handleSlotChange(e) {
|
|
@@ -218,13 +229,28 @@ class SgdsMainnav extends sgdsElement["default"] {
|
|
|
218
229
|
childElements.forEach(e => {
|
|
219
230
|
e.setAttribute("name", e.tagName.toLowerCase());
|
|
220
231
|
e.setAttribute("expand", this.expand);
|
|
232
|
+
e.setAttribute("tone", this.tone);
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
_handleProfileSlotChange(e) {
|
|
236
|
+
const childElements = e.target.assignedElements({ flatten: true });
|
|
237
|
+
this._hasProfileComponent = childElements.some(el => el.tagName.toLowerCase() === "sgds-mainnav-profile");
|
|
238
|
+
childElements.forEach(el => {
|
|
239
|
+
el.setAttribute("expand", this.expand);
|
|
240
|
+
el.setAttribute("tone", this.tone);
|
|
221
241
|
});
|
|
242
|
+
if (this._hasProfileComponent && this.defaultSlotItems.length > 0) {
|
|
243
|
+
console.warn("[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. " +
|
|
244
|
+
"The profile component disables the mainnav hamburger menu, so nav items will have no mobile menu. " +
|
|
245
|
+
"Use a sidebar for navigation in operational apps.");
|
|
246
|
+
}
|
|
222
247
|
}
|
|
223
248
|
render() {
|
|
224
249
|
this.breakpointReached = window.innerWidth < SIZES[this.expand];
|
|
225
250
|
return lit.html `
|
|
226
251
|
<nav>
|
|
227
252
|
<div class="navbar ${this._expandClass()}">
|
|
253
|
+
<slot name="start"></slot>
|
|
228
254
|
<a class="navbar-brand" href=${this.brandHref} aria-label="brand-link">
|
|
229
255
|
<slot name="brand"></slot>
|
|
230
256
|
</a>
|
|
@@ -238,20 +264,26 @@ class SgdsMainnav extends sgdsElement["default"] {
|
|
|
238
264
|
></slot>
|
|
239
265
|
</div>
|
|
240
266
|
</div>
|
|
241
|
-
<
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
name=${this.
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
267
|
+
<div class="navbar-end">
|
|
268
|
+
<slot
|
|
269
|
+
name="non-collapsible"
|
|
270
|
+
class=${classMap_js.classMap({ "non-collapsible-empty": !this.hasNonCollapsibleSlot })}
|
|
271
|
+
></slot>
|
|
272
|
+
<slot name="profile" @slotchange=${this._handleProfileSlotChange}></slot>
|
|
273
|
+
${!(this._hasProfileComponent && this.breakpointReached)
|
|
274
|
+
? lit.html `<sgds-icon-button
|
|
275
|
+
name=${this.expanded ? "cross" : "menu"}
|
|
276
|
+
variant="ghost"
|
|
277
|
+
size="sm"
|
|
278
|
+
tone=${this.tone !== "default" ? "fixed-light" : lit.nothing}
|
|
279
|
+
class="navbar-toggler"
|
|
280
|
+
@click=${this._handleSummaryClick}
|
|
281
|
+
aria-controls="${this.collapseId}"
|
|
282
|
+
aria-expanded="${this.expanded}"
|
|
283
|
+
.ariaLabel=${"Toggle navigation"}
|
|
284
|
+
></sgds-icon-button>`
|
|
285
|
+
: lit.nothing}
|
|
286
|
+
</div>
|
|
255
287
|
</div>
|
|
256
288
|
</nav>
|
|
257
289
|
`;
|
|
@@ -299,14 +331,20 @@ tslib.__decorate([
|
|
|
299
331
|
decorators_js.query(".navbar-nav-scroll")
|
|
300
332
|
], SgdsMainnav.prototype, "navScroll", void 0);
|
|
301
333
|
tslib.__decorate([
|
|
302
|
-
decorators_js.query("
|
|
303
|
-
], SgdsMainnav.prototype, "
|
|
334
|
+
decorators_js.query(".navbar-end")
|
|
335
|
+
], SgdsMainnav.prototype, "navbarEnd", void 0);
|
|
336
|
+
tslib.__decorate([
|
|
337
|
+
decorators_js.state()
|
|
338
|
+
], SgdsMainnav.prototype, "_hasProfileComponent", void 0);
|
|
304
339
|
tslib.__decorate([
|
|
305
340
|
decorators_js.property({ type: Boolean })
|
|
306
341
|
], SgdsMainnav.prototype, "hasNonCollapsibleSlot", void 0);
|
|
307
342
|
tslib.__decorate([
|
|
308
343
|
decorators_js.property({ type: String })
|
|
309
344
|
], SgdsMainnav.prototype, "brandHref", void 0);
|
|
345
|
+
tslib.__decorate([
|
|
346
|
+
decorators_js.property({ type: String, reflect: true })
|
|
347
|
+
], SgdsMainnav.prototype, "tone", void 0);
|
|
310
348
|
tslib.__decorate([
|
|
311
349
|
decorators_js.property({ type: String })
|
|
312
350
|
], SgdsMainnav.prototype, "expand", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sgds-mainnav.cjs.js","sources":["../../../../src/components/Mainnav/sgds-mainnav.ts"],"sourcesContent":["import { provide } from \"@lit/context\";\nimport { html, PropertyValueMap } from \"lit\";\nimport { property, query, queryAssignedElements, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport SgdsElement from \"../../base/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 \"../IconButton/sgds-icon-button\";\nimport { MainnavBreakpointContext, MainnavExpandedContext } from \"./mainnav-context\";\nimport mainnavStyle from \"./mainnav.css\";\nimport SgdsMainnavDropdown from \"./sgds-mainnav-dropdown\";\nimport SgdsMainnavItem from \"./sgds-mainnav-item\";\nimport { HasSlotController } from \"../../utils/slot\";\nexport type MainnavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\n\nconst SIZES = {\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 * @summary This component is the primary means that your users will use to navigate through your portal. It includes horizontal navigation and branding to identify your site.\n *\n * @event sgds-show - Emitted on show. Only for collapsed menu.\n * @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.\n * @event sgds-hide - Emitted on hide. Only for collapsed menu.\n * @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.\n *\n * @slot default - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.\n * @slot end - Elements in this slot will be positioned to the right end of .navbar-nav. Elements in this slot will also be included in collapsed menu.\n * @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here\n * @slot non-collapsible - Elements in this slot will not be collapsed\n *\n */\nexport class SgdsMainnav extends SgdsElement {\n static styles = [...SgdsElement.styles, mainnavStyle];\n /** @internal */\n static dependencies = {\n \"sgds-icon-button\": SgdsIconButton\n };\n\n @provide({ context: MainnavBreakpointContext })\n @state()\n private _breakpointReached = false;\n /** Indicates if mobile menu is open or closed */\n @provide({ context: MainnavExpandedContext })\n @state()\n private expanded = false;\n /** Denotes the transition state of mobile mainnav menu opening */\n @state()\n private expanding = false;\n\n /** @internal */\n @query(\"nav\") nav: HTMLElement;\n /** @internal */\n @query(\".navbar\") navbar: HTMLElement;\n /** @internal */\n @query(\".navbar-toggler\") header: HTMLElement;\n /** @internal */\n @query(\".navbar-body\") body: HTMLElement;\n /** @internal */\n @query(\".navbar-nav-scroll\") navScroll: HTMLElement;\n /** @internal */\n @query(\"slot[name='non-collapsible']\") nonCollapsibleSlot: HTMLSlotElement;\n\n /** Used only for SSR to indicate the presence of the `non-collapsible` slot. */\n @property({ type: Boolean }) hasNonCollapsibleSlot = false;\n\n /** The href link for brand logo */\n @property({ type: String })\n brandHref = \"\";\n\n private collapseId = genId(\"mainnav\", \"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: MainnavExpandSize = \"lg\";\n\n /** When true, removes max-width constraint to allow content to stretch full screen width */\n @property({ type: Boolean, reflect: true })\n fluid = false;\n\n /** @internal */\n @state()\n breakpointReached = false;\n\n /** @internal */\n @queryAssignedElements() private defaultNodes!: SgdsMainnavItem[] | SgdsMainnavDropdown[];\n\n /** @internal */\n @queryAssignedElements({ slot: \"end\" }) private endNodes!: SgdsMainnavItem[] | SgdsMainnavDropdown[];\n\n /** @internal */\n get defaultSlotItems(): SgdsMainnavItem[] | SgdsMainnavDropdown[] {\n return [...(this.defaultNodes || [])].filter((node: HTMLElement) => typeof node.tagName !== \"undefined\") as\n | SgdsMainnavItem[]\n | SgdsMainnavDropdown[];\n }\n\n /** @internal */\n get endSlotItems(): SgdsMainnavItem[] | SgdsMainnavDropdown[] {\n return [...(this.endNodes || [])].filter((node: HTMLElement) => typeof node.tagName !== \"undefined\") as\n | SgdsMainnavItem[]\n | SgdsMainnavDropdown[];\n }\n\n private readonly hasSlotController = new HasSlotController(this, \"non-collapsible\");\n\n connectedCallback() {\n super.connectedCallback();\n\n this._handleResize();\n\n window.addEventListener(\"click\", (event: MouseEvent) => this._handleClickOutOfElement(event, this.body));\n window.addEventListener(\"resize\", this._handleResize.bind(this));\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n\n window.removeEventListener(\"click\", (event: MouseEvent) => this._handleClickOutOfElement(event, this.body));\n window.removeEventListener(\"resize\", this._handleResize.bind(this));\n }\n\n firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n\n if (this.breakpointReached && this.body) {\n this.expanded = false;\n this.body.hidden = true;\n this._handleMobileNav();\n this._breakpointReached = true;\n }\n }\n\n updated() {\n if (!this.hasNonCollapsibleSlot) this.hasNonCollapsibleSlot = this.hasSlotController.test(\"non-collapsible\");\n }\n\n private _handleClickOutOfElement(e: MouseEvent, self: HTMLElement) {\n if (!e.composedPath().includes(self) && !e.composedPath().includes(this.header)) {\n this.hide();\n }\n }\n\n private _handleSummaryClick() {\n if (this.expanded) {\n this.hide();\n } else {\n document.body.style.overflow = \"hidden\";\n this.show();\n }\n }\n\n private _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.expanded = false;\n this.expanding = false;\n }\n\n if (newBreakpointReachedValue) {\n this._handleMobileNav();\n\n if (!this._breakpointReached) {\n this._breakpointReached = true;\n\n window.addEventListener(\"scrollend\", this._handleMobileNavBound);\n }\n } else {\n this._handleDesktopNav();\n this._breakpointReached = false;\n window.removeEventListener(\"scrollend\", this._handleMobileNavBound);\n }\n }\n\n private _handleMobileNavBound = this._handleMobileNav.bind(this);\n\n private async _handleMobileNav() {\n if (!this.nav) return;\n\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 private _handleDesktopNav() {\n this.navbar?.insertBefore(this.body, this.nonCollapsibleSlot);\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, \"mainnav.show\");\n await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);\n this.body.style.height = \"auto\";\n\n this.emit(\"sgds-after-show\");\n }\n\n private async _animateToHide() {\n const slHide = this.emit(\"sgds-hide\", { cancelable: true });\n if (slHide.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, \"mainnav.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 /** @internal */\n @watch(\"expanding\", { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n if (this.expanding) {\n // Show\n await this._animateToShow();\n this.expanded = true;\n } else {\n this.header.focus();\n // Hide\n await this._animateToHide();\n this.expanded = false;\n }\n }\n\n /** Shows the menu. For when mainnav is in the collapsed form */\n public async show() {\n if (this.expanded) {\n return;\n }\n\n this.expanding = true;\n return waitForEvent(this, \"sgds-after-show\");\n }\n\n /** Hide the menu. For when mainnav is in the collapsed form */\n public async hide() {\n if (!this.expanded) {\n return;\n }\n\n this.expanding = false;\n document.body.style.removeProperty(\"overflow\");\n\n return waitForEvent(this, \"sgds-after-hide\");\n }\n\n private _handleDefaultSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n });\n }\n\n // assigning name attribute to elements added in slot=\"end\", to use wildcard css selector to assign styles only to *-mainnav-item\n private _handleSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n\n childElements.forEach(e => {\n e.setAttribute(\"name\", e.tagName.toLowerCase());\n e.setAttribute(\"expand\", this.expand);\n });\n }\n\n render() {\n this.breakpointReached = window.innerWidth < SIZES[this.expand];\n\n return html`\n <nav>\n <div class=\"navbar ${this._expandClass()}\">\n <a class=\"navbar-brand\" href=${this.brandHref} aria-label=\"brand-link\">\n <slot name=\"brand\"></slot>\n </a>\n <div class=\"navbar-body navbar-collapse\" id=${this.collapseId}>\n <div class=\"navbar-nav navbar-nav-scroll\">\n <slot @slotchange=${this._handleDefaultSlotChange}></slot>\n <slot\n name=\"end\"\n class=${classMap({ \"slot-end\": !this.breakpointReached })}\n @slotchange=${this._handleSlotChange}\n ></slot>\n </div>\n </div>\n <slot\n name=\"non-collapsible\"\n class=${classMap({ \"non-collapsible-empty\": !this.hasNonCollapsibleSlot })}\n ></slot>\n <sgds-icon-button\n name=${this.expanded ? \"cross\" : \"menu\"}\n variant=\"ghost\"\n size=\"sm\"\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 </div>\n </nav>\n `;\n }\n _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}\nsetDefaultAnimation(\"mainnav.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(\"mainnav.hide\", {\n keyframes: [\n { height: \"auto\", opacity: \"1\" },\n { height: \"0\", opacity: \"0\" }\n ],\n options: { duration: 200, easing: \"ease-in-out\" }\n});\n\nexport default SgdsMainnav;\n"],"names":["SM_BREAKPOINT","MD_BREAKPOINT","LG_BREAKPOINT","XL_BREAKPOINT","XXL_BREAKPOINT","SgdsElement","genId","HasSlotController","stopAnimations","getAnimation","animateTo","shimKeyframesHeightAuto","waitForEvent","html","classMap","mainnavStyle","SgdsIconButton","__decorate","provide","MainnavBreakpointContext","state","MainnavExpandedContext","query","property","queryAssignedElements","watch","setDefaultAnimation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sgds-mainnav.cjs.js","sources":["../../../../src/components/Mainnav/sgds-mainnav.ts"],"sourcesContent":["import { provide } from \"@lit/context\";\nimport { html, nothing, PropertyValueMap } from \"lit\";\nimport { property, query, queryAssignedElements, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport SgdsElement from \"../../base/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 \"../IconButton/sgds-icon-button\";\nimport { MainnavBreakpointContext, MainnavExpandedContext } from \"./mainnav-context\";\nimport mainnavStyle from \"./mainnav.css\";\nimport SgdsMainnavDropdown from \"./sgds-mainnav-dropdown\";\nimport SgdsMainnavItem from \"./sgds-mainnav-item\";\nimport { HasSlotController } from \"../../utils/slot\";\nexport type MainnavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\nexport type MainnavTone = \"default\" | \"brand\" | \"gradient-1\" | \"gradient-2\" | \"gradient-3\" | \"gradient-4\";\n\nconst SIZES = {\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 * @summary This component is the primary means that your users will use to navigate through your portal. It includes horizontal navigation and branding to identify your site.\n *\n * @event sgds-show - Emitted on show. Only for collapsed menu.\n * @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.\n * @event sgds-hide - Emitted on hide. Only for collapsed menu.\n * @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.\n *\n * @slot default - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.\n * @slot start - Elements in this slot will be positioned to the left of the brand.\n * @slot end - Elements in this slot will be positioned to the right end of .navbar-nav. Elements in this slot will also be included in collapsed menu.\n * @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here\n * @slot profile - Profile slot positioned at the far right in desktop. In mobile, moves into the collapsed menu as the first item.\n * @slot non-collapsible - Elements in this slot will not be collapsed\n *\n */\nexport class SgdsMainnav extends SgdsElement {\n static styles = [...SgdsElement.styles, mainnavStyle];\n /** @internal */\n static dependencies = {\n \"sgds-icon-button\": SgdsIconButton\n };\n\n @provide({ context: MainnavBreakpointContext })\n @state()\n private _breakpointReached = false;\n /** Indicates if mobile menu is open or closed */\n @provide({ context: MainnavExpandedContext })\n @state()\n private expanded = false;\n /** Denotes the transition state of mobile mainnav menu opening */\n @state()\n private expanding = false;\n\n @query(\"nav\") private nav: HTMLElement;\n @query(\".navbar\") private navbar: HTMLElement;\n @query(\".navbar-toggler\") private header: HTMLElement;\n @query(\".navbar-body\") private body: HTMLElement;\n @query(\".navbar-nav-scroll\") private navScroll: HTMLElement;\n @query(\".navbar-end\") private navbarEnd: HTMLElement;\n\n /** @internal Whether sgds-mainnav-profile is slotted in the profile slot */\n @state()\n private _hasProfileComponent = false;\n\n /** Used only for SSR to indicate the presence of the `non-collapsible` slot. */\n @property({ type: Boolean }) hasNonCollapsibleSlot = false;\n\n /** The href link for brand logo */\n @property({ type: String })\n brandHref = \"\";\n\n @property({ type: String, reflect: true })\n tone: MainnavTone = \"default\";\n\n private collapseId = genId(\"mainnav\", \"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: MainnavExpandSize = \"lg\";\n\n /** When true, removes max-width constraint to allow content to stretch full screen width */\n @property({ type: Boolean, reflect: true })\n fluid = false;\n\n @state()\n private breakpointReached = false;\n\n @queryAssignedElements() private defaultNodes!: SgdsMainnavItem[] | SgdsMainnavDropdown[];\n\n @queryAssignedElements({ slot: \"end\" }) private endNodes!: SgdsMainnavItem[] | SgdsMainnavDropdown[];\n\n /** @internal */\n get defaultSlotItems(): SgdsMainnavItem[] | SgdsMainnavDropdown[] {\n return [...(this.defaultNodes || [])].filter((node: HTMLElement) => typeof node.tagName !== \"undefined\") as\n | SgdsMainnavItem[]\n | SgdsMainnavDropdown[];\n }\n\n /** @internal */\n get endSlotItems(): SgdsMainnavItem[] | SgdsMainnavDropdown[] {\n return [...(this.endNodes || [])].filter((node: HTMLElement) => typeof node.tagName !== \"undefined\") as\n | SgdsMainnavItem[]\n | SgdsMainnavDropdown[];\n }\n\n private readonly hasSlotController = new HasSlotController(this, \"non-collapsible\");\n\n connectedCallback() {\n super.connectedCallback();\n\n this._handleResize();\n\n window.addEventListener(\"click\", (event: MouseEvent) => this._handleClickOutOfElement(event, this.body));\n window.addEventListener(\"resize\", this._handleResize.bind(this));\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n\n window.removeEventListener(\"click\", (event: MouseEvent) => this._handleClickOutOfElement(event, this.body));\n window.removeEventListener(\"resize\", this._handleResize.bind(this));\n }\n\n firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n\n if (this.breakpointReached && this.body) {\n this.expanded = false;\n this.body.hidden = true;\n this._handleMobileNav();\n this._breakpointReached = true;\n }\n }\n\n updated() {\n if (!this.hasNonCollapsibleSlot) this.hasNonCollapsibleSlot = this.hasSlotController.test(\"non-collapsible\");\n }\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 private _handleSummaryClick() {\n if (this.expanded) {\n this.hide();\n } else {\n document.body.style.overflow = \"hidden\";\n this.show();\n }\n }\n\n private _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.expanded = false;\n this.expanding = false;\n }\n\n if (newBreakpointReachedValue) {\n this._handleMobileNav();\n\n if (!this._breakpointReached) {\n this._breakpointReached = true;\n\n window.addEventListener(\"scrollend\", this._handleMobileNavBound);\n }\n } else {\n this._handleDesktopNav();\n this._breakpointReached = false;\n window.removeEventListener(\"scrollend\", this._handleMobileNavBound);\n }\n }\n\n private _handleMobileNavBound = this._handleMobileNav.bind(this);\n\n private async _handleMobileNav() {\n if (!this.nav) return;\n\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 private _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, \"mainnav.show\");\n await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);\n this.body.style.height = \"auto\";\n\n this.emit(\"sgds-after-show\");\n }\n\n private async _animateToHide() {\n const slHide = this.emit(\"sgds-hide\", { cancelable: true });\n if (slHide.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, \"mainnav.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 /** @internal */\n @watch(\"expanding\", { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n if (this.expanding) {\n // Show\n await this._animateToShow();\n this.expanded = true;\n } else {\n this.header?.focus();\n // Hide\n await this._animateToHide();\n this.expanded = false;\n }\n }\n\n /** Shows the menu. For when mainnav is in the collapsed form */\n public async show() {\n if (this.expanded) {\n return;\n }\n\n this.expanding = true;\n return waitForEvent(this, \"sgds-after-show\");\n }\n\n /** Hide the menu. For when mainnav is in the collapsed form */\n public async hide() {\n if (!this.expanded) {\n return;\n }\n\n this.expanding = false;\n document.body.style.removeProperty(\"overflow\");\n\n return waitForEvent(this, \"sgds-after-hide\");\n }\n\n private _handleDefaultSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n el.setAttribute(\"tone\", this.tone);\n });\n\n if (this._hasProfileComponent && childElements.length > 0) {\n console.warn(\n \"[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. \" +\n \"The profile component disables the mainnav hamburger menu, so nav items will have no mobile menu. \" +\n \"Use a sidebar for navigation in operational apps.\"\n );\n }\n }\n\n // assigning name attribute to elements added in slot=\"end\", to use wildcard css selector to assign styles only to *-mainnav-item\n private _handleSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n childElements.forEach(e => {\n e.setAttribute(\"name\", e.tagName.toLowerCase());\n e.setAttribute(\"expand\", this.expand);\n e.setAttribute(\"tone\", this.tone);\n });\n }\n\n private _handleProfileSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n this._hasProfileComponent = childElements.some(el => el.tagName.toLowerCase() === \"sgds-mainnav-profile\");\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n el.setAttribute(\"tone\", this.tone);\n });\n\n if (this._hasProfileComponent && this.defaultSlotItems.length > 0) {\n console.warn(\n \"[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. \" +\n \"The profile component disables the mainnav hamburger menu, so nav items will have no mobile menu. \" +\n \"Use a sidebar for navigation in operational apps.\"\n );\n }\n }\n\n render() {\n this.breakpointReached = window.innerWidth < SIZES[this.expand];\n\n return html`\n <nav>\n <div class=\"navbar ${this._expandClass()}\">\n <slot name=\"start\"></slot>\n <a class=\"navbar-brand\" href=${this.brandHref} aria-label=\"brand-link\">\n <slot name=\"brand\"></slot>\n </a>\n <div class=\"navbar-body navbar-collapse\" id=${this.collapseId}>\n <div class=\"navbar-nav navbar-nav-scroll\">\n <slot @slotchange=${this._handleDefaultSlotChange}></slot>\n <slot\n name=\"end\"\n class=${classMap({ \"slot-end\": !this.breakpointReached })}\n @slotchange=${this._handleSlotChange}\n ></slot>\n </div>\n </div>\n <div class=\"navbar-end\">\n <slot\n name=\"non-collapsible\"\n class=${classMap({ \"non-collapsible-empty\": !this.hasNonCollapsibleSlot })}\n ></slot>\n <slot name=\"profile\" @slotchange=${this._handleProfileSlotChange}></slot>\n ${!(this._hasProfileComponent && this.breakpointReached)\n ? html`<sgds-icon-button\n name=${this.expanded ? \"cross\" : \"menu\"}\n variant=\"ghost\"\n size=\"sm\"\n tone=${this.tone !== \"default\" ? \"fixed-light\" : nothing}\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 : nothing}\n </div>\n </div>\n </nav>\n `;\n }\n _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}\nsetDefaultAnimation(\"mainnav.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(\"mainnav.hide\", {\n keyframes: [\n { height: \"auto\", opacity: \"1\" },\n { height: \"0\", opacity: \"0\" }\n ],\n options: { duration: 200, easing: \"ease-in-out\" }\n});\n\nexport default SgdsMainnav;\n"],"names":["SM_BREAKPOINT","MD_BREAKPOINT","LG_BREAKPOINT","XL_BREAKPOINT","XXL_BREAKPOINT","SgdsElement","genId","HasSlotController","stopAnimations","getAnimation","animateTo","shimKeyframesHeightAuto","waitForEvent","html","classMap","nothing","mainnavStyle","SgdsIconButton","__decorate","provide","MainnavBreakpointContext","state","MainnavExpandedContext","query","property","queryAssignedElements","watch","setDefaultAnimation"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { __decorate } from 'tslib';
|
|
3
3
|
import { provide } from '@lit/context';
|
|
4
|
-
import { html } from 'lit';
|
|
4
|
+
import { html, nothing } from 'lit';
|
|
5
5
|
import { state, query, property, queryAssignedElements } from 'lit/decorators.js';
|
|
6
6
|
import { classMap } from 'lit/directives/class-map.js';
|
|
7
7
|
import SgdsElement from '../../base/sgds-element.js';
|
|
@@ -34,8 +34,10 @@ const SIZES = {
|
|
|
34
34
|
* @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.
|
|
35
35
|
*
|
|
36
36
|
* @slot default - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.
|
|
37
|
+
* @slot start - Elements in this slot will be positioned to the left of the brand.
|
|
37
38
|
* @slot end - Elements in this slot will be positioned to the right end of .navbar-nav. Elements in this slot will also be included in collapsed menu.
|
|
38
39
|
* @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here
|
|
40
|
+
* @slot profile - Profile slot positioned at the far right in desktop. In mobile, moves into the collapsed menu as the first item.
|
|
39
41
|
* @slot non-collapsible - Elements in this slot will not be collapsed
|
|
40
42
|
*
|
|
41
43
|
*/
|
|
@@ -47,16 +49,18 @@ class SgdsMainnav extends SgdsElement {
|
|
|
47
49
|
this.expanded = false;
|
|
48
50
|
/** Denotes the transition state of mobile mainnav menu opening */
|
|
49
51
|
this.expanding = false;
|
|
52
|
+
/** @internal Whether sgds-mainnav-profile is slotted in the profile slot */
|
|
53
|
+
this._hasProfileComponent = false;
|
|
50
54
|
/** Used only for SSR to indicate the presence of the `non-collapsible` slot. */
|
|
51
55
|
this.hasNonCollapsibleSlot = false;
|
|
52
56
|
/** The href link for brand logo */
|
|
53
57
|
this.brandHref = "";
|
|
58
|
+
this.tone = "default";
|
|
54
59
|
this.collapseId = genId("mainnav", "collapse");
|
|
55
60
|
/** 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 */
|
|
56
61
|
this.expand = "lg";
|
|
57
62
|
/** When true, removes max-width constraint to allow content to stretch full screen width */
|
|
58
63
|
this.fluid = false;
|
|
59
|
-
/** @internal */
|
|
60
64
|
this.breakpointReached = false;
|
|
61
65
|
this.hasSlotController = new HasSlotController(this, "non-collapsible");
|
|
62
66
|
this._handleMobileNavBound = this._handleMobileNav.bind(this);
|
|
@@ -94,7 +98,7 @@ class SgdsMainnav extends SgdsElement {
|
|
|
94
98
|
this.hasNonCollapsibleSlot = this.hasSlotController.test("non-collapsible");
|
|
95
99
|
}
|
|
96
100
|
_handleClickOutOfElement(e, self) {
|
|
97
|
-
if (!e.composedPath().includes(self) && !e.composedPath().includes(this.header)) {
|
|
101
|
+
if (!e.composedPath().includes(self) && !(this.header && e.composedPath().includes(this.header))) {
|
|
98
102
|
this.hide();
|
|
99
103
|
}
|
|
100
104
|
}
|
|
@@ -141,7 +145,7 @@ class SgdsMainnav extends SgdsElement {
|
|
|
141
145
|
}
|
|
142
146
|
_handleDesktopNav() {
|
|
143
147
|
var _a;
|
|
144
|
-
(_a = this.navbar) === null || _a === void 0 ? void 0 : _a.insertBefore(this.body, this.
|
|
148
|
+
(_a = this.navbar) === null || _a === void 0 ? void 0 : _a.insertBefore(this.body, this.navbarEnd);
|
|
145
149
|
}
|
|
146
150
|
async _animateToShow() {
|
|
147
151
|
const sgdsShow = this.emit("sgds-show", { cancelable: true });
|
|
@@ -173,13 +177,14 @@ class SgdsMainnav extends SgdsElement {
|
|
|
173
177
|
}
|
|
174
178
|
/** @internal */
|
|
175
179
|
async handleOpenChange() {
|
|
180
|
+
var _a;
|
|
176
181
|
if (this.expanding) {
|
|
177
182
|
// Show
|
|
178
183
|
await this._animateToShow();
|
|
179
184
|
this.expanded = true;
|
|
180
185
|
}
|
|
181
186
|
else {
|
|
182
|
-
this.header.focus();
|
|
187
|
+
(_a = this.header) === null || _a === void 0 ? void 0 : _a.focus();
|
|
183
188
|
// Hide
|
|
184
189
|
await this._animateToHide();
|
|
185
190
|
this.expanded = false;
|
|
@@ -206,7 +211,13 @@ class SgdsMainnav extends SgdsElement {
|
|
|
206
211
|
const childElements = e.target.assignedElements({ flatten: true });
|
|
207
212
|
childElements.forEach(el => {
|
|
208
213
|
el.setAttribute("expand", this.expand);
|
|
214
|
+
el.setAttribute("tone", this.tone);
|
|
209
215
|
});
|
|
216
|
+
if (this._hasProfileComponent && childElements.length > 0) {
|
|
217
|
+
console.warn("[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. " +
|
|
218
|
+
"The profile component disables the mainnav hamburger menu, so nav items will have no mobile menu. " +
|
|
219
|
+
"Use a sidebar for navigation in operational apps.");
|
|
220
|
+
}
|
|
210
221
|
}
|
|
211
222
|
// assigning name attribute to elements added in slot="end", to use wildcard css selector to assign styles only to *-mainnav-item
|
|
212
223
|
_handleSlotChange(e) {
|
|
@@ -214,13 +225,28 @@ class SgdsMainnav extends SgdsElement {
|
|
|
214
225
|
childElements.forEach(e => {
|
|
215
226
|
e.setAttribute("name", e.tagName.toLowerCase());
|
|
216
227
|
e.setAttribute("expand", this.expand);
|
|
228
|
+
e.setAttribute("tone", this.tone);
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
_handleProfileSlotChange(e) {
|
|
232
|
+
const childElements = e.target.assignedElements({ flatten: true });
|
|
233
|
+
this._hasProfileComponent = childElements.some(el => el.tagName.toLowerCase() === "sgds-mainnav-profile");
|
|
234
|
+
childElements.forEach(el => {
|
|
235
|
+
el.setAttribute("expand", this.expand);
|
|
236
|
+
el.setAttribute("tone", this.tone);
|
|
217
237
|
});
|
|
238
|
+
if (this._hasProfileComponent && this.defaultSlotItems.length > 0) {
|
|
239
|
+
console.warn("[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. " +
|
|
240
|
+
"The profile component disables the mainnav hamburger menu, so nav items will have no mobile menu. " +
|
|
241
|
+
"Use a sidebar for navigation in operational apps.");
|
|
242
|
+
}
|
|
218
243
|
}
|
|
219
244
|
render() {
|
|
220
245
|
this.breakpointReached = window.innerWidth < SIZES[this.expand];
|
|
221
246
|
return html `
|
|
222
247
|
<nav>
|
|
223
248
|
<div class="navbar ${this._expandClass()}">
|
|
249
|
+
<slot name="start"></slot>
|
|
224
250
|
<a class="navbar-brand" href=${this.brandHref} aria-label="brand-link">
|
|
225
251
|
<slot name="brand"></slot>
|
|
226
252
|
</a>
|
|
@@ -234,20 +260,26 @@ class SgdsMainnav extends SgdsElement {
|
|
|
234
260
|
></slot>
|
|
235
261
|
</div>
|
|
236
262
|
</div>
|
|
237
|
-
<
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
name=${this.
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
263
|
+
<div class="navbar-end">
|
|
264
|
+
<slot
|
|
265
|
+
name="non-collapsible"
|
|
266
|
+
class=${classMap({ "non-collapsible-empty": !this.hasNonCollapsibleSlot })}
|
|
267
|
+
></slot>
|
|
268
|
+
<slot name="profile" @slotchange=${this._handleProfileSlotChange}></slot>
|
|
269
|
+
${!(this._hasProfileComponent && this.breakpointReached)
|
|
270
|
+
? html `<sgds-icon-button
|
|
271
|
+
name=${this.expanded ? "cross" : "menu"}
|
|
272
|
+
variant="ghost"
|
|
273
|
+
size="sm"
|
|
274
|
+
tone=${this.tone !== "default" ? "fixed-light" : nothing}
|
|
275
|
+
class="navbar-toggler"
|
|
276
|
+
@click=${this._handleSummaryClick}
|
|
277
|
+
aria-controls="${this.collapseId}"
|
|
278
|
+
aria-expanded="${this.expanded}"
|
|
279
|
+
.ariaLabel=${"Toggle navigation"}
|
|
280
|
+
></sgds-icon-button>`
|
|
281
|
+
: nothing}
|
|
282
|
+
</div>
|
|
251
283
|
</div>
|
|
252
284
|
</nav>
|
|
253
285
|
`;
|
|
@@ -295,14 +327,20 @@ __decorate([
|
|
|
295
327
|
query(".navbar-nav-scroll")
|
|
296
328
|
], SgdsMainnav.prototype, "navScroll", void 0);
|
|
297
329
|
__decorate([
|
|
298
|
-
query("
|
|
299
|
-
], SgdsMainnav.prototype, "
|
|
330
|
+
query(".navbar-end")
|
|
331
|
+
], SgdsMainnav.prototype, "navbarEnd", void 0);
|
|
332
|
+
__decorate([
|
|
333
|
+
state()
|
|
334
|
+
], SgdsMainnav.prototype, "_hasProfileComponent", void 0);
|
|
300
335
|
__decorate([
|
|
301
336
|
property({ type: Boolean })
|
|
302
337
|
], SgdsMainnav.prototype, "hasNonCollapsibleSlot", void 0);
|
|
303
338
|
__decorate([
|
|
304
339
|
property({ type: String })
|
|
305
340
|
], SgdsMainnav.prototype, "brandHref", void 0);
|
|
341
|
+
__decorate([
|
|
342
|
+
property({ type: String, reflect: true })
|
|
343
|
+
], SgdsMainnav.prototype, "tone", void 0);
|
|
306
344
|
__decorate([
|
|
307
345
|
property({ type: String })
|
|
308
346
|
], SgdsMainnav.prototype, "expand", void 0);
|