@govtechsg/sgds-web-component 3.26.1-rc.2 → 3.27.0-rc.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 +9 -2
- package/base/dropdown-list-element.js.map +1 -1
- package/base/nav-element.d.ts +64 -0
- package/base/nav-element.js +263 -0
- package/base/nav-element.js.map +1 -0
- package/base/nav-profile-element.d.ts +47 -0
- package/base/nav-profile-element.js +191 -0
- package/base/nav-profile-element.js.map +1 -0
- package/base/nav-profile.js +6 -0
- package/base/nav-profile.js.map +1 -0
- package/components/Appnav/appnav-context.d.ts +6 -0
- package/components/Appnav/appnav-context.js +7 -0
- package/components/Appnav/appnav-context.js.map +1 -0
- package/components/Appnav/appnav.js +6 -0
- package/components/Appnav/appnav.js.map +1 -0
- package/components/Appnav/index.d.ts +9 -0
- package/components/Appnav/index.js +8 -0
- package/components/Appnav/index.js.map +1 -0
- package/components/Appnav/index.umd.min.js +2542 -0
- package/components/Appnav/index.umd.min.js.map +1 -0
- package/components/Appnav/sgds-appnav-profile.d.ts +17 -0
- package/components/Appnav/sgds-appnav-profile.js +31 -0
- package/components/Appnav/sgds-appnav-profile.js.map +1 -0
- package/components/Appnav/sgds-appnav.d.ts +44 -0
- package/components/Appnav/sgds-appnav.js +183 -0
- package/components/Appnav/sgds-appnav.js.map +1 -0
- package/components/Breadcrumb/index.umd.min.js +1 -1
- package/components/Breadcrumb/index.umd.min.js.map +1 -1
- package/components/ComboBox/index.umd.min.js +248 -248
- package/components/ComboBox/index.umd.min.js.map +1 -1
- package/components/Dropdown/index.umd.min.js +1 -1
- package/components/Dropdown/index.umd.min.js.map +1 -1
- package/components/Mainnav/index.umd.min.js +293 -281
- package/components/Mainnav/index.umd.min.js.map +1 -1
- package/components/Mainnav/mainnav.js +1 -1
- package/components/Mainnav/sgds-mainnav-profile.d.ts +5 -31
- package/components/Mainnav/sgds-mainnav-profile.js +5 -112
- package/components/Mainnav/sgds-mainnav-profile.js.map +1 -1
- package/components/Mainnav/sgds-mainnav.d.ts +5 -46
- package/components/Mainnav/sgds-mainnav.js +24 -260
- package/components/Mainnav/sgds-mainnav.js.map +1 -1
- package/components/OverflowMenu/index.umd.min.js +21 -21
- package/components/OverflowMenu/index.umd.min.js.map +1 -1
- package/components/QuantityToggle/index.umd.min.js +39 -39
- package/components/QuantityToggle/index.umd.min.js.map +1 -1
- package/components/QuantityToggle/sgds-quantity-toggle.d.ts +1 -2
- package/components/QuantityToggle/sgds-quantity-toggle.js +9 -18
- package/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
- package/components/Select/index.umd.min.js +1 -1
- package/components/Select/index.umd.min.js.map +1 -1
- package/components/index.d.ts +2 -0
- package/components/index.js +2 -0
- package/components/index.js.map +1 -1
- package/components/index.umd.min.js +592 -543
- package/components/index.umd.min.js.map +1 -1
- package/css/fouc.css +6 -4
- package/custom-elements.json +17733 -15914
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/index.umd.min.js +537 -483
- package/index.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/react/appnav/index.cjs.js +45 -0
- package/react/appnav/index.cjs.js.map +1 -0
- package/react/appnav/index.d.ts +4 -0
- package/react/appnav/index.js +21 -0
- package/react/appnav/index.js.map +1 -0
- package/react/appnav-profile/index.cjs.js +40 -0
- package/react/appnav-profile/index.cjs.js.map +1 -0
- package/react/appnav-profile/index.d.ts +4 -0
- package/react/appnav-profile/index.js +16 -0
- package/react/appnav-profile/index.js.map +1 -0
- package/react/base/dropdown-list-element.cjs.js +9 -2
- package/react/base/dropdown-list-element.cjs.js.map +1 -1
- package/react/base/dropdown-list-element.js +9 -2
- package/react/base/dropdown-list-element.js.map +1 -1
- package/react/base/nav-element.cjs.js +268 -0
- package/react/base/nav-element.cjs.js.map +1 -0
- package/react/base/nav-element.js +264 -0
- package/react/base/nav-element.js.map +1 -0
- package/react/base/nav-profile-element.cjs.js +196 -0
- package/react/base/nav-profile-element.cjs.js.map +1 -0
- package/react/base/nav-profile-element.js +192 -0
- package/react/base/nav-profile-element.js.map +1 -0
- package/react/base/nav-profile.cjs.js +11 -0
- package/react/base/nav-profile.cjs.js.map +1 -0
- package/react/base/nav-profile.js +7 -0
- package/react/base/nav-profile.js.map +1 -0
- package/react/components/Appnav/appnav-context.cjs.js +13 -0
- package/react/components/Appnav/appnav-context.cjs.js.map +1 -0
- package/react/components/Appnav/appnav-context.js +8 -0
- package/react/components/Appnav/appnav-context.js.map +1 -0
- package/react/components/Appnav/appnav.cjs.js +11 -0
- package/react/components/Appnav/appnav.cjs.js.map +1 -0
- package/react/components/Appnav/appnav.js +7 -0
- package/react/components/Appnav/appnav.js.map +1 -0
- package/react/components/Appnav/sgds-appnav-profile.cjs.js +37 -0
- package/react/components/Appnav/sgds-appnav-profile.cjs.js.map +1 -0
- package/react/components/Appnav/sgds-appnav-profile.js +32 -0
- package/react/components/Appnav/sgds-appnav-profile.js.map +1 -0
- package/react/components/Appnav/sgds-appnav.cjs.js +189 -0
- package/react/components/Appnav/sgds-appnav.cjs.js.map +1 -0
- package/react/components/Appnav/sgds-appnav.js +184 -0
- package/react/components/Appnav/sgds-appnav.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 +4 -111
- package/react/components/Mainnav/sgds-mainnav-profile.cjs.js.map +1 -1
- package/react/components/Mainnav/sgds-mainnav-profile.js +5 -112
- package/react/components/Mainnav/sgds-mainnav-profile.js.map +1 -1
- package/react/components/Mainnav/sgds-mainnav.cjs.js +22 -258
- package/react/components/Mainnav/sgds-mainnav.cjs.js.map +1 -1
- package/react/components/Mainnav/sgds-mainnav.js +24 -260
- package/react/components/Mainnav/sgds-mainnav.js.map +1 -1
- package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js +9 -18
- package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js.map +1 -1
- package/react/components/QuantityToggle/sgds-quantity-toggle.js +9 -18
- package/react/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
- package/react/index.cjs.js +130 -126
- package/react/index.cjs.js.map +1 -1
- package/react/index.d.ts +6 -4
- package/react/index.js +6 -4
- package/react/index.js.map +1 -1
- package/types/react.d.ts +197 -158
- package/components/Mainnav/mainnav-profile.js +0 -6
- package/components/Mainnav/mainnav-profile.js.map +0 -1
- package/react/components/Mainnav/mainnav-profile.cjs.js +0 -11
- package/react/components/Mainnav/mainnav-profile.cjs.js.map +0 -1
- package/react/components/Mainnav/mainnav-profile.js +0 -7
- package/react/components/Mainnav/mainnav-profile.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sgds-appnav.cjs.js","sources":["../../../../src/components/Appnav/sgds-appnav.ts"],"sourcesContent":["import { provide } from \"@lit/context\";\nimport { html, nothing } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport NavElement from \"../../base/nav-element\";\nimport { HasSlotController } from \"../../utils/slot\";\nimport { AppnavBreakpointContext, AppnavExpandedContext } from \"./appnav-context\";\nimport appnavStyle from \"./appnav.css\";\n\nexport type AppnavTone = \"brand\" | \"gradient-1\" | \"gradient-2\" | \"gradient-3\" | \"gradient-4\";\n\ninterface DefaultSlotItem {\n label: string;\n element: HTMLElement;\n}\n\n/**\n * @summary `SgdsAppnav` is a application navigation bar for operational apps. Accepts icon-buttons and profile in a fluid layout with collapse/expand behavior.\n *\n * @storyOrder 1\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 - Elements in this slot collapse into the mobile menu as text items. Accepts sgds-icon-button and other elements. Uses ariaLabel as menu item text.\n * @slot start - Elements in this slot will be positioned to the left of the brand.\n * @slot brand - Brand slot of SgdsAppnav. Pass in brand logo img here\n * @slot profile - Profile slot. sgds-appnav-profile goes here. Positioned to the right of the toggler.\n *\n */\nexport class SgdsAppnav extends NavElement {\n static styles = [...NavElement.styles, appnavStyle];\n\n @provide({ context: AppnavBreakpointContext })\n @state()\n private _breakpointReached = false;\n\n @provide({ context: AppnavExpandedContext })\n @state()\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private _expanded = false;\n\n /** Sets the visual tone of the navigation bar */\n @property({ type: String, reflect: true })\n tone: AppnavTone = \"brand\";\n\n /** Used only for SSR to indicate the presence of the `start` slot. */\n @property({ type: Boolean }) hasStartSlot = false;\n\n private readonly hasSlotController = new HasSlotController(this, \"start\");\n\n /** @internal Whether the default slot has assigned elements */\n @state()\n private _hasDefaultSlotItems = false;\n\n /** @internal Whether the profile slot has assigned elements */\n @state()\n private _hasProfileSlotItems = false;\n\n /** @internal Stored default slot items for mobile menu rendering */\n @state()\n private _defaultSlotItems: DefaultSlotItem[] = [];\n\n updated() {\n if (!this.hasStartSlot) this.hasStartSlot = this.hasSlotController.test(\"start\");\n this._expanded = this.expanded;\n }\n\n protected _onBreakpointReached(reached: boolean): void {\n this._breakpointReached = reached;\n }\n\n protected _isBreakpointReached(): boolean {\n return this._breakpointReached;\n }\n\n private _handleTogglerKeydown(e: KeyboardEvent) {\n if (e.key === \"Tab\" && !e.shiftKey && this.expanded) {\n e.preventDefault();\n const firstItem = this.shadowRoot?.querySelector(\".appnav-menu-item\") as HTMLElement | null;\n firstItem?.focus();\n }\n }\n\n private _handleDefaultSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true }) as HTMLElement[];\n this._hasDefaultSlotItems = childElements.length > 0;\n this._defaultSlotItems = childElements\n .filter(el => typeof el.tagName !== \"undefined\")\n .map(el => ({\n label: el.getAttribute(\"ariaLabel\") || el.getAttribute(\"aria-label\") || el.textContent?.trim() || \"\",\n element: el\n }));\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n });\n }\n\n private _handleMobileItemClick(item: DefaultSlotItem) {\n item.element.click();\n this.hide();\n }\n\n private _renderAppnavToggler() {\n return html`<sgds-icon-button\n name=\"three-dots-vertical\"\n variant=\"ghost\"\n size=\"sm\"\n tone=\"fixed-light\"\n class=\"navbar-toggler\"\n @click=${this._handleSummaryClick}\n @keydown=${this._handleTogglerKeydown}\n aria-controls=\"${this.collapseId}\"\n aria-expanded=\"${this.expanded}\"\n .ariaLabel=${\"Toggle navigation\"}\n ></sgds-icon-button>`;\n }\n\n private _handleProfileSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n this._hasProfileSlotItems = childElements.length > 0;\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n el.setAttribute(\"tone\", this.tone);\n });\n }\n\n render() {\n this.breakpointReached =\n window.innerWidth <\n (this.expand === \"always\"\n ? -1\n : this.expand === \"never\"\n ? Infinity\n : { sm: 512, md: 768, lg: 1024, xl: 1280, xxl: 1440 }[this.expand]);\n\n return html`\n <nav>\n <div class=\"navbar ${this._expandClass()}\">\n <slot name=\"start\" class=${classMap({ \"slot-empty\": !this.hasStartSlot })}></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\n class=${classMap({ \"slot-desktop-only\": this.breakpointReached })}\n @slotchange=${this._handleDefaultSlotChange}\n ></slot>\n ${this.breakpointReached\n ? this._defaultSlotItems.map(\n item => html`<a\n class=\"appnav-menu-item\"\n role=\"button\"\n tabindex=\"0\"\n @click=${() => this._handleMobileItemClick(item)}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n this._handleMobileItemClick(item);\n }\n }}\n >${item.label}</a\n >`\n )\n : nothing}\n </div>\n </div>\n <div\n class=\"navbar-end ${this._hasProfileSlotItems || (this._hasDefaultSlotItems && this.breakpointReached)\n ? \"\"\n : \"slot-empty\"}\"\n >\n ${this._hasDefaultSlotItems && this.breakpointReached ? this._renderAppnavToggler() : nothing}\n <slot name=\"profile\" @slotchange=${this._handleProfileSlotChange}></slot>\n </div>\n </div>\n </nav>\n `;\n }\n}\n\nexport default SgdsAppnav;\n"],"names":["NavElement","HasSlotController","html","classMap","nothing","appnavStyle","__decorate","provide","AppnavBreakpointContext","state","AppnavExpandedContext","property"],"mappings":"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"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { __decorate } from 'tslib';
|
|
3
|
+
import { provide } from '@lit/context';
|
|
4
|
+
import { html, nothing } from 'lit';
|
|
5
|
+
import { state, property } from 'lit/decorators.js';
|
|
6
|
+
import { classMap } from 'lit/directives/class-map.js';
|
|
7
|
+
import NavElement from '../../base/nav-element.js';
|
|
8
|
+
import { HasSlotController } from '../../utils/slot.js';
|
|
9
|
+
import { AppnavBreakpointContext, AppnavExpandedContext } from './appnav-context.js';
|
|
10
|
+
import css_248z from './appnav.js';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @summary `SgdsAppnav` is a application navigation bar for operational apps. Accepts icon-buttons and profile in a fluid layout with collapse/expand behavior.
|
|
14
|
+
*
|
|
15
|
+
* @storyOrder 1
|
|
16
|
+
*
|
|
17
|
+
* @event sgds-show - Emitted on show. Only for collapsed menu.
|
|
18
|
+
* @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.
|
|
19
|
+
* @event sgds-hide - Emitted on hide. Only for collapsed menu.
|
|
20
|
+
* @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.
|
|
21
|
+
*
|
|
22
|
+
* @slot default - Elements in this slot collapse into the mobile menu as text items. Accepts sgds-icon-button and other elements. Uses ariaLabel as menu item text.
|
|
23
|
+
* @slot start - Elements in this slot will be positioned to the left of the brand.
|
|
24
|
+
* @slot brand - Brand slot of SgdsAppnav. Pass in brand logo img here
|
|
25
|
+
* @slot profile - Profile slot. sgds-appnav-profile goes here. Positioned to the right of the toggler.
|
|
26
|
+
*
|
|
27
|
+
*/
|
|
28
|
+
class SgdsAppnav extends NavElement {
|
|
29
|
+
constructor() {
|
|
30
|
+
super(...arguments);
|
|
31
|
+
this._breakpointReached = false;
|
|
32
|
+
this._expanded = false;
|
|
33
|
+
/** Sets the visual tone of the navigation bar */
|
|
34
|
+
this.tone = "brand";
|
|
35
|
+
/** Used only for SSR to indicate the presence of the `start` slot. */
|
|
36
|
+
this.hasStartSlot = false;
|
|
37
|
+
this.hasSlotController = new HasSlotController(this, "start");
|
|
38
|
+
/** @internal Whether the default slot has assigned elements */
|
|
39
|
+
this._hasDefaultSlotItems = false;
|
|
40
|
+
/** @internal Whether the profile slot has assigned elements */
|
|
41
|
+
this._hasProfileSlotItems = false;
|
|
42
|
+
/** @internal Stored default slot items for mobile menu rendering */
|
|
43
|
+
this._defaultSlotItems = [];
|
|
44
|
+
}
|
|
45
|
+
updated() {
|
|
46
|
+
if (!this.hasStartSlot)
|
|
47
|
+
this.hasStartSlot = this.hasSlotController.test("start");
|
|
48
|
+
this._expanded = this.expanded;
|
|
49
|
+
}
|
|
50
|
+
_onBreakpointReached(reached) {
|
|
51
|
+
this._breakpointReached = reached;
|
|
52
|
+
}
|
|
53
|
+
_isBreakpointReached() {
|
|
54
|
+
return this._breakpointReached;
|
|
55
|
+
}
|
|
56
|
+
_handleTogglerKeydown(e) {
|
|
57
|
+
var _a;
|
|
58
|
+
if (e.key === "Tab" && !e.shiftKey && this.expanded) {
|
|
59
|
+
e.preventDefault();
|
|
60
|
+
const firstItem = (_a = this.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector(".appnav-menu-item");
|
|
61
|
+
firstItem === null || firstItem === void 0 ? void 0 : firstItem.focus();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
_handleDefaultSlotChange(e) {
|
|
65
|
+
const childElements = e.target.assignedElements({ flatten: true });
|
|
66
|
+
this._hasDefaultSlotItems = childElements.length > 0;
|
|
67
|
+
this._defaultSlotItems = childElements
|
|
68
|
+
.filter(el => typeof el.tagName !== "undefined")
|
|
69
|
+
.map(el => {
|
|
70
|
+
var _a;
|
|
71
|
+
return ({
|
|
72
|
+
label: el.getAttribute("ariaLabel") || el.getAttribute("aria-label") || ((_a = el.textContent) === null || _a === void 0 ? void 0 : _a.trim()) || "",
|
|
73
|
+
element: el
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
childElements.forEach(el => {
|
|
77
|
+
el.setAttribute("expand", this.expand);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
_handleMobileItemClick(item) {
|
|
81
|
+
item.element.click();
|
|
82
|
+
this.hide();
|
|
83
|
+
}
|
|
84
|
+
_renderAppnavToggler() {
|
|
85
|
+
return html `<sgds-icon-button
|
|
86
|
+
name="three-dots-vertical"
|
|
87
|
+
variant="ghost"
|
|
88
|
+
size="sm"
|
|
89
|
+
tone="fixed-light"
|
|
90
|
+
class="navbar-toggler"
|
|
91
|
+
@click=${this._handleSummaryClick}
|
|
92
|
+
@keydown=${this._handleTogglerKeydown}
|
|
93
|
+
aria-controls="${this.collapseId}"
|
|
94
|
+
aria-expanded="${this.expanded}"
|
|
95
|
+
.ariaLabel=${"Toggle navigation"}
|
|
96
|
+
></sgds-icon-button>`;
|
|
97
|
+
}
|
|
98
|
+
_handleProfileSlotChange(e) {
|
|
99
|
+
const childElements = e.target.assignedElements({ flatten: true });
|
|
100
|
+
this._hasProfileSlotItems = childElements.length > 0;
|
|
101
|
+
childElements.forEach(el => {
|
|
102
|
+
el.setAttribute("expand", this.expand);
|
|
103
|
+
el.setAttribute("tone", this.tone);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
render() {
|
|
107
|
+
this.breakpointReached =
|
|
108
|
+
window.innerWidth <
|
|
109
|
+
(this.expand === "always"
|
|
110
|
+
? -1
|
|
111
|
+
: this.expand === "never"
|
|
112
|
+
? Infinity
|
|
113
|
+
: { sm: 512, md: 768, lg: 1024, xl: 1280, xxl: 1440 }[this.expand]);
|
|
114
|
+
return html `
|
|
115
|
+
<nav>
|
|
116
|
+
<div class="navbar ${this._expandClass()}">
|
|
117
|
+
<slot name="start" class=${classMap({ "slot-empty": !this.hasStartSlot })}></slot>
|
|
118
|
+
<a class="navbar-brand" href=${this.brandHref} aria-label="brand-link">
|
|
119
|
+
<slot name="brand"></slot>
|
|
120
|
+
</a>
|
|
121
|
+
<div class="navbar-body navbar-collapse" id=${this.collapseId}>
|
|
122
|
+
<div class="navbar-nav navbar-nav-scroll">
|
|
123
|
+
<slot
|
|
124
|
+
class=${classMap({ "slot-desktop-only": this.breakpointReached })}
|
|
125
|
+
@slotchange=${this._handleDefaultSlotChange}
|
|
126
|
+
></slot>
|
|
127
|
+
${this.breakpointReached
|
|
128
|
+
? this._defaultSlotItems.map(item => html `<a
|
|
129
|
+
class="appnav-menu-item"
|
|
130
|
+
role="button"
|
|
131
|
+
tabindex="0"
|
|
132
|
+
@click=${() => this._handleMobileItemClick(item)}
|
|
133
|
+
@keydown=${(e) => {
|
|
134
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
135
|
+
e.preventDefault();
|
|
136
|
+
this._handleMobileItemClick(item);
|
|
137
|
+
}
|
|
138
|
+
}}
|
|
139
|
+
>${item.label}</a
|
|
140
|
+
>`)
|
|
141
|
+
: nothing}
|
|
142
|
+
</div>
|
|
143
|
+
</div>
|
|
144
|
+
<div
|
|
145
|
+
class="navbar-end ${this._hasProfileSlotItems || (this._hasDefaultSlotItems && this.breakpointReached)
|
|
146
|
+
? ""
|
|
147
|
+
: "slot-empty"}"
|
|
148
|
+
>
|
|
149
|
+
${this._hasDefaultSlotItems && this.breakpointReached ? this._renderAppnavToggler() : nothing}
|
|
150
|
+
<slot name="profile" @slotchange=${this._handleProfileSlotChange}></slot>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
</nav>
|
|
154
|
+
`;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
SgdsAppnav.styles = [...NavElement.styles, css_248z];
|
|
158
|
+
__decorate([
|
|
159
|
+
provide({ context: AppnavBreakpointContext }),
|
|
160
|
+
state()
|
|
161
|
+
], SgdsAppnav.prototype, "_breakpointReached", void 0);
|
|
162
|
+
__decorate([
|
|
163
|
+
provide({ context: AppnavExpandedContext }),
|
|
164
|
+
state()
|
|
165
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
166
|
+
], SgdsAppnav.prototype, "_expanded", void 0);
|
|
167
|
+
__decorate([
|
|
168
|
+
property({ type: String, reflect: true })
|
|
169
|
+
], SgdsAppnav.prototype, "tone", void 0);
|
|
170
|
+
__decorate([
|
|
171
|
+
property({ type: Boolean })
|
|
172
|
+
], SgdsAppnav.prototype, "hasStartSlot", void 0);
|
|
173
|
+
__decorate([
|
|
174
|
+
state()
|
|
175
|
+
], SgdsAppnav.prototype, "_hasDefaultSlotItems", void 0);
|
|
176
|
+
__decorate([
|
|
177
|
+
state()
|
|
178
|
+
], SgdsAppnav.prototype, "_hasProfileSlotItems", void 0);
|
|
179
|
+
__decorate([
|
|
180
|
+
state()
|
|
181
|
+
], SgdsAppnav.prototype, "_defaultSlotItems", void 0);
|
|
182
|
+
|
|
183
|
+
export { SgdsAppnav, SgdsAppnav as default };
|
|
184
|
+
//# sourceMappingURL=sgds-appnav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sgds-appnav.js","sources":["../../../../src/components/Appnav/sgds-appnav.ts"],"sourcesContent":["import { provide } from \"@lit/context\";\nimport { html, nothing } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport NavElement from \"../../base/nav-element\";\nimport { HasSlotController } from \"../../utils/slot\";\nimport { AppnavBreakpointContext, AppnavExpandedContext } from \"./appnav-context\";\nimport appnavStyle from \"./appnav.css\";\n\nexport type AppnavTone = \"brand\" | \"gradient-1\" | \"gradient-2\" | \"gradient-3\" | \"gradient-4\";\n\ninterface DefaultSlotItem {\n label: string;\n element: HTMLElement;\n}\n\n/**\n * @summary `SgdsAppnav` is a application navigation bar for operational apps. Accepts icon-buttons and profile in a fluid layout with collapse/expand behavior.\n *\n * @storyOrder 1\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 - Elements in this slot collapse into the mobile menu as text items. Accepts sgds-icon-button and other elements. Uses ariaLabel as menu item text.\n * @slot start - Elements in this slot will be positioned to the left of the brand.\n * @slot brand - Brand slot of SgdsAppnav. Pass in brand logo img here\n * @slot profile - Profile slot. sgds-appnav-profile goes here. Positioned to the right of the toggler.\n *\n */\nexport class SgdsAppnav extends NavElement {\n static styles = [...NavElement.styles, appnavStyle];\n\n @provide({ context: AppnavBreakpointContext })\n @state()\n private _breakpointReached = false;\n\n @provide({ context: AppnavExpandedContext })\n @state()\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private _expanded = false;\n\n /** Sets the visual tone of the navigation bar */\n @property({ type: String, reflect: true })\n tone: AppnavTone = \"brand\";\n\n /** Used only for SSR to indicate the presence of the `start` slot. */\n @property({ type: Boolean }) hasStartSlot = false;\n\n private readonly hasSlotController = new HasSlotController(this, \"start\");\n\n /** @internal Whether the default slot has assigned elements */\n @state()\n private _hasDefaultSlotItems = false;\n\n /** @internal Whether the profile slot has assigned elements */\n @state()\n private _hasProfileSlotItems = false;\n\n /** @internal Stored default slot items for mobile menu rendering */\n @state()\n private _defaultSlotItems: DefaultSlotItem[] = [];\n\n updated() {\n if (!this.hasStartSlot) this.hasStartSlot = this.hasSlotController.test(\"start\");\n this._expanded = this.expanded;\n }\n\n protected _onBreakpointReached(reached: boolean): void {\n this._breakpointReached = reached;\n }\n\n protected _isBreakpointReached(): boolean {\n return this._breakpointReached;\n }\n\n private _handleTogglerKeydown(e: KeyboardEvent) {\n if (e.key === \"Tab\" && !e.shiftKey && this.expanded) {\n e.preventDefault();\n const firstItem = this.shadowRoot?.querySelector(\".appnav-menu-item\") as HTMLElement | null;\n firstItem?.focus();\n }\n }\n\n private _handleDefaultSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true }) as HTMLElement[];\n this._hasDefaultSlotItems = childElements.length > 0;\n this._defaultSlotItems = childElements\n .filter(el => typeof el.tagName !== \"undefined\")\n .map(el => ({\n label: el.getAttribute(\"ariaLabel\") || el.getAttribute(\"aria-label\") || el.textContent?.trim() || \"\",\n element: el\n }));\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n });\n }\n\n private _handleMobileItemClick(item: DefaultSlotItem) {\n item.element.click();\n this.hide();\n }\n\n private _renderAppnavToggler() {\n return html`<sgds-icon-button\n name=\"three-dots-vertical\"\n variant=\"ghost\"\n size=\"sm\"\n tone=\"fixed-light\"\n class=\"navbar-toggler\"\n @click=${this._handleSummaryClick}\n @keydown=${this._handleTogglerKeydown}\n aria-controls=\"${this.collapseId}\"\n aria-expanded=\"${this.expanded}\"\n .ariaLabel=${\"Toggle navigation\"}\n ></sgds-icon-button>`;\n }\n\n private _handleProfileSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n this._hasProfileSlotItems = childElements.length > 0;\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n el.setAttribute(\"tone\", this.tone);\n });\n }\n\n render() {\n this.breakpointReached =\n window.innerWidth <\n (this.expand === \"always\"\n ? -1\n : this.expand === \"never\"\n ? Infinity\n : { sm: 512, md: 768, lg: 1024, xl: 1280, xxl: 1440 }[this.expand]);\n\n return html`\n <nav>\n <div class=\"navbar ${this._expandClass()}\">\n <slot name=\"start\" class=${classMap({ \"slot-empty\": !this.hasStartSlot })}></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\n class=${classMap({ \"slot-desktop-only\": this.breakpointReached })}\n @slotchange=${this._handleDefaultSlotChange}\n ></slot>\n ${this.breakpointReached\n ? this._defaultSlotItems.map(\n item => html`<a\n class=\"appnav-menu-item\"\n role=\"button\"\n tabindex=\"0\"\n @click=${() => this._handleMobileItemClick(item)}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n this._handleMobileItemClick(item);\n }\n }}\n >${item.label}</a\n >`\n )\n : nothing}\n </div>\n </div>\n <div\n class=\"navbar-end ${this._hasProfileSlotItems || (this._hasDefaultSlotItems && this.breakpointReached)\n ? \"\"\n : \"slot-empty\"}\"\n >\n ${this._hasDefaultSlotItems && this.breakpointReached ? this._renderAppnavToggler() : nothing}\n <slot name=\"profile\" @slotchange=${this._handleProfileSlotChange}></slot>\n </div>\n </div>\n </nav>\n `;\n }\n}\n\nexport default SgdsAppnav;\n"],"names":["appnavStyle"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
|
|
6
6
|
var lit = require('lit');
|
|
7
7
|
|
|
8
|
-
var css_248z = lit.css`:host{display:block}nav{background-color:var(--sgds-surface-default);box-shadow:0 2px 4px 0 hsla(0,0%,5%,.08);position:relative;z-index:var(--sgds-z-index-floating)}:host([tone=brand]) nav{background-color:var(--sgds-primary-surface-default)}:host([tone=gradient-1]) nav{background:var(--sgds-gradient-1)}:host([tone=gradient-2]) nav{background:var(--sgds-gradient-2)}:host([tone=gradient-3]) nav{background:var(--sgds-gradient-3)}:host([tone=gradient-4]) nav{background:var(--sgds-gradient-4)}.navbar{align-items:stretch;display:flex;flex-wrap:wrap;font-size:var(--sgds-font-size-label-sm);gap:var(--sgds-gap-xs);justify-content:flex-start;margin:auto;max-width:var(--sgds-mainnav-max-width,1440px);min-height:var(--sgds-mainnav-height,72px);padding:0 var(--sgds-mainnav-mobile-padding-x);width:100%}:host([fluid]) .navbar{max-width:none}.navbar-brand{align-items:center;color:var(--sgds-color-default);display:flex;text-decoration:none;white-space:nowrap}:host([tone=brand]) .navbar-brand,:host([tone^=gradient]) .navbar-brand{color:var(--sgds-color-fixed-light)}.navbar-brand:focus-visible{outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.navbar-nav{display:flex;flex-direction:column;height:100%;margin-bottom:0;margin-top:0;width:100%}nav>.navbar-body{background-color:var(--sgds-surface-default);border-top:var(--sgds-border-width-1) solid var(--sgds-border-color-translucent);box-shadow:0 2px 4px 0 hsla(0,0%,5%,.08);padding:var(--sgds-padding-md) 0;position:absolute;transition:transform .2s ease-in-out;width:100%;z-index:var(--sgds-z-index-floating)}nav>.navbar-body .navbar-nav{height:100dvh;margin:auto;max-width:var(--sgds-mainnav-max-width,1440px)}nav>.navbar-body slot::slotted(:not(sgds-mainnav-item):not(sgds-mainnav-dropdown):not(sgds-mainnav-profile)){padding:var(--sgds-padding-sm) var(--sgds-mainnav-mobile-padding-x)}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{align-self:center}
|
|
8
|
+
var css_248z = lit.css`:host{display:block}nav{background-color:var(--sgds-surface-default);box-shadow:0 2px 4px 0 hsla(0,0%,5%,.08);position:relative;z-index:var(--sgds-z-index-floating)}:host([tone=brand]) nav{background-color:var(--sgds-primary-surface-default)}:host([tone=gradient-1]) nav{background:var(--sgds-gradient-1)}:host([tone=gradient-2]) nav{background:var(--sgds-gradient-2)}:host([tone=gradient-3]) nav{background:var(--sgds-gradient-3)}:host([tone=gradient-4]) nav{background:var(--sgds-gradient-4)}.navbar{align-items:stretch;display:flex;flex-wrap:wrap;font-size:var(--sgds-font-size-label-sm);gap:var(--sgds-gap-xs);justify-content:flex-start;margin:auto;max-width:var(--sgds-mainnav-max-width,1440px);min-height:var(--sgds-mainnav-height,72px);padding:0 var(--sgds-mainnav-mobile-padding-x);width:100%}:host([fluid]) .navbar{max-width:none}.navbar-brand{align-items:center;color:var(--sgds-color-default);display:flex;text-decoration:none;white-space:nowrap}:host([tone=brand]) .navbar-brand,:host([tone^=gradient]) .navbar-brand{color:var(--sgds-color-fixed-light)}.navbar-brand:focus-visible{outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.navbar-nav{display:flex;flex-direction:column;height:100%;margin-bottom:0;margin-top:0;width:100%}nav>.navbar-body{background-color:var(--sgds-surface-default);border-top:var(--sgds-border-width-1) solid var(--sgds-border-color-translucent);box-shadow:0 2px 4px 0 hsla(0,0%,5%,.08);padding:var(--sgds-padding-md) 0;position:absolute;transition:transform .2s ease-in-out;width:100%;z-index:var(--sgds-z-index-floating)}nav>.navbar-body .navbar-nav{height:100dvh;margin:auto;max-width:var(--sgds-mainnav-max-width,1440px)}nav>.navbar-body slot::slotted(:not(sgds-mainnav-item):not(sgds-mainnav-dropdown):not(sgds-mainnav-profile)){padding:var(--sgds-padding-sm) var(--sgds-mainnav-mobile-padding-x)}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{align-self:center}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-nav-scroll{overflow-y:auto}@media (min-width:512px){.navbar-expand-sm{flex-wrap:nowrap;gap:var(--sgds-gap-xl);justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;gap:var(--sgds-gap-xl);justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (min-width:1024px){.navbar{padding:0 var(--sgds-mainnav-padding-x)}.navbar-expand-lg{flex-wrap:nowrap;gap:var(--sgds-gap-xl);justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (min-width:1280px){.navbar-expand-xl{flex-wrap:nowrap;gap:var(--sgds-gap-xl);justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .nav-link{padding-left:var(--mainnav-nav-link-padding-x);padding-right:var(--mainnav-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}@media (min-width:1440px){.navbar-expand-xxl{flex-wrap:nowrap;gap:var(--sgds-gap-xl);justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}}.navbar-expand{flex-wrap:nowrap;gap:var(--sgds-gap-xl);justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-end{align-items:center;display:flex;gap:var(--sgds-gap-xs);margin-left:auto}slot[name=non-collapsible].slot-empty{display:none}slot[name=profile]{align-self:stretch;display:flex}slot[name=non-collapsible]{align-items:center;display:flex;gap:var(--sgds-spacer-4)}:host([tone=brand]) slot[name=non-collapsible]::slotted(*),:host([tone^=gradient]) slot[name=non-collapsible]::slotted(*){color:var(--sgds-color-fixed-light)}.slot-end{align-items:stretch;display:flex;gap:var(--sgds-gap-xs);height:inherit;margin-left:auto}.slot-end::slotted(:not([name$=-mainnav-item]):not([name$=-mainnav-dropdown])){align-self:center}`;
|
|
9
9
|
|
|
10
10
|
exports["default"] = css_248z;
|
|
11
11
|
//# sourceMappingURL=mainnav.cjs.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { css } from 'lit';
|
|
3
3
|
|
|
4
|
-
var css_248z = css`:host{display:block}nav{background-color:var(--sgds-surface-default);box-shadow:0 2px 4px 0 hsla(0,0%,5%,.08);position:relative;z-index:var(--sgds-z-index-floating)}:host([tone=brand]) nav{background-color:var(--sgds-primary-surface-default)}:host([tone=gradient-1]) nav{background:var(--sgds-gradient-1)}:host([tone=gradient-2]) nav{background:var(--sgds-gradient-2)}:host([tone=gradient-3]) nav{background:var(--sgds-gradient-3)}:host([tone=gradient-4]) nav{background:var(--sgds-gradient-4)}.navbar{align-items:stretch;display:flex;flex-wrap:wrap;font-size:var(--sgds-font-size-label-sm);gap:var(--sgds-gap-xs);justify-content:flex-start;margin:auto;max-width:var(--sgds-mainnav-max-width,1440px);min-height:var(--sgds-mainnav-height,72px);padding:0 var(--sgds-mainnav-mobile-padding-x);width:100%}:host([fluid]) .navbar{max-width:none}.navbar-brand{align-items:center;color:var(--sgds-color-default);display:flex;text-decoration:none;white-space:nowrap}:host([tone=brand]) .navbar-brand,:host([tone^=gradient]) .navbar-brand{color:var(--sgds-color-fixed-light)}.navbar-brand:focus-visible{outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.navbar-nav{display:flex;flex-direction:column;height:100%;margin-bottom:0;margin-top:0;width:100%}nav>.navbar-body{background-color:var(--sgds-surface-default);border-top:var(--sgds-border-width-1) solid var(--sgds-border-color-translucent);box-shadow:0 2px 4px 0 hsla(0,0%,5%,.08);padding:var(--sgds-padding-md) 0;position:absolute;transition:transform .2s ease-in-out;width:100%;z-index:var(--sgds-z-index-floating)}nav>.navbar-body .navbar-nav{height:100dvh;margin:auto;max-width:var(--sgds-mainnav-max-width,1440px)}nav>.navbar-body slot::slotted(:not(sgds-mainnav-item):not(sgds-mainnav-dropdown):not(sgds-mainnav-profile)){padding:var(--sgds-padding-sm) var(--sgds-mainnav-mobile-padding-x)}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{align-self:center}
|
|
4
|
+
var css_248z = css`:host{display:block}nav{background-color:var(--sgds-surface-default);box-shadow:0 2px 4px 0 hsla(0,0%,5%,.08);position:relative;z-index:var(--sgds-z-index-floating)}:host([tone=brand]) nav{background-color:var(--sgds-primary-surface-default)}:host([tone=gradient-1]) nav{background:var(--sgds-gradient-1)}:host([tone=gradient-2]) nav{background:var(--sgds-gradient-2)}:host([tone=gradient-3]) nav{background:var(--sgds-gradient-3)}:host([tone=gradient-4]) nav{background:var(--sgds-gradient-4)}.navbar{align-items:stretch;display:flex;flex-wrap:wrap;font-size:var(--sgds-font-size-label-sm);gap:var(--sgds-gap-xs);justify-content:flex-start;margin:auto;max-width:var(--sgds-mainnav-max-width,1440px);min-height:var(--sgds-mainnav-height,72px);padding:0 var(--sgds-mainnav-mobile-padding-x);width:100%}:host([fluid]) .navbar{max-width:none}.navbar-brand{align-items:center;color:var(--sgds-color-default);display:flex;text-decoration:none;white-space:nowrap}:host([tone=brand]) .navbar-brand,:host([tone^=gradient]) .navbar-brand{color:var(--sgds-color-fixed-light)}.navbar-brand:focus-visible{outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.navbar-nav{display:flex;flex-direction:column;height:100%;margin-bottom:0;margin-top:0;width:100%}nav>.navbar-body{background-color:var(--sgds-surface-default);border-top:var(--sgds-border-width-1) solid var(--sgds-border-color-translucent);box-shadow:0 2px 4px 0 hsla(0,0%,5%,.08);padding:var(--sgds-padding-md) 0;position:absolute;transition:transform .2s ease-in-out;width:100%;z-index:var(--sgds-z-index-floating)}nav>.navbar-body .navbar-nav{height:100dvh;margin:auto;max-width:var(--sgds-mainnav-max-width,1440px)}nav>.navbar-body slot::slotted(:not(sgds-mainnav-item):not(sgds-mainnav-dropdown):not(sgds-mainnav-profile)){padding:var(--sgds-padding-sm) var(--sgds-mainnav-mobile-padding-x)}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{align-self:center}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-nav-scroll{overflow-y:auto}@media (min-width:512px){.navbar-expand-sm{flex-wrap:nowrap;gap:var(--sgds-gap-xl);justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;gap:var(--sgds-gap-xl);justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (min-width:1024px){.navbar{padding:0 var(--sgds-mainnav-padding-x)}.navbar-expand-lg{flex-wrap:nowrap;gap:var(--sgds-gap-xl);justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (min-width:1280px){.navbar-expand-xl{flex-wrap:nowrap;gap:var(--sgds-gap-xl);justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .nav-link{padding-left:var(--mainnav-nav-link-padding-x);padding-right:var(--mainnav-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}@media (min-width:1440px){.navbar-expand-xxl{flex-wrap:nowrap;gap:var(--sgds-gap-xl);justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}}.navbar-expand{flex-wrap:nowrap;gap:var(--sgds-gap-xl);justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-end{align-items:center;display:flex;gap:var(--sgds-gap-xs);margin-left:auto}slot[name=non-collapsible].slot-empty{display:none}slot[name=profile]{align-self:stretch;display:flex}slot[name=non-collapsible]{align-items:center;display:flex;gap:var(--sgds-spacer-4)}:host([tone=brand]) slot[name=non-collapsible]::slotted(*),:host([tone^=gradient]) slot[name=non-collapsible]::slotted(*){color:var(--sgds-color-fixed-light)}.slot-end{align-items:stretch;display:flex;gap:var(--sgds-gap-xs);height:inherit;margin-left:auto}.slot-end::slotted(:not([name$=-mainnav-item]):not([name$=-mainnav-dropdown])){align-self:center}`;
|
|
5
5
|
|
|
6
6
|
export { css_248z as default };
|
|
7
7
|
//# sourceMappingURL=mainnav.js.map
|
|
@@ -4,138 +4,31 @@
|
|
|
4
4
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
5
|
|
|
6
6
|
var tslib = require('tslib');
|
|
7
|
-
var lit = require('lit');
|
|
8
7
|
var context = require('@lit/context');
|
|
9
8
|
var decorators_js = require('lit/decorators.js');
|
|
10
|
-
var
|
|
11
|
-
var ifDefined_js = require('lit/directives/if-defined.js');
|
|
12
|
-
var dom = require('@floating-ui/dom');
|
|
13
|
-
var sgdsElement = require('../../base/sgds-element.cjs.js');
|
|
14
|
-
var sgdsDropdown = require('../Dropdown/sgds-dropdown.cjs.js');
|
|
15
|
-
var sgdsDropdownItem = require('../Dropdown/sgds-dropdown-item.cjs.js');
|
|
16
|
-
var sgdsIcon = require('../Icon/sgds-icon.cjs.js');
|
|
9
|
+
var navProfileElement = require('../../base/nav-profile-element.cjs.js');
|
|
17
10
|
var mainnavContext = require('./mainnav-context.cjs.js');
|
|
18
|
-
var mainnavProfile = require('./mainnav-profile.cjs.js');
|
|
19
|
-
var generateId = require('../../utils/generateId.cjs.js');
|
|
20
11
|
|
|
21
12
|
/**
|
|
22
13
|
* @summary A profile component for the mainnav that shows a full dropdown in desktop and handles its own mobile menu.
|
|
23
14
|
* In desktop: renders avatar + label + secondaryText with a dropdown.
|
|
24
15
|
* In mobile: renders the avatar as a toggler that opens a self-contained mobile panel with profile items.
|
|
16
|
+
* When no dropdown items are slotted, renders as a non-interactive read-only element (no caret, no pointer cursor, not focusable).
|
|
25
17
|
* When present, it disables the mainnav's default hamburger toggler.
|
|
26
18
|
*
|
|
27
19
|
* @slot avatar - Avatar element displayed in both desktop (before label) and mobile (as toggler)
|
|
28
|
-
* @slot default - Profile menu items (sgds-dropdown-item elements)
|
|
20
|
+
* @slot default - Profile menu items (sgds-dropdown-item elements). When empty, the component becomes read-only.
|
|
29
21
|
*/
|
|
30
|
-
class SgdsMainnavProfile extends
|
|
22
|
+
class SgdsMainnavProfile extends navProfileElement["default"] {
|
|
31
23
|
constructor() {
|
|
32
24
|
super(...arguments);
|
|
33
25
|
this._breakpointReached = true;
|
|
34
|
-
/** @internal Whether the mobile menu is open */
|
|
35
|
-
this._mobileMenuOpen = false;
|
|
36
|
-
/** Primary text displayed next to the avatar in desktop (e.g. user name) */
|
|
37
|
-
this.label = "";
|
|
38
|
-
/** Secondary text displayed below the label in desktop (e.g. agency or role) */
|
|
39
|
-
this.secondaryText = "";
|
|
40
|
-
/** When true, disables the profile dropdown */
|
|
41
|
-
this.disabled = false;
|
|
42
|
-
/** Accessible label for the profile toggle button */
|
|
43
|
-
this.ariaLabel = "";
|
|
44
|
-
/** Controls dropdown close behavior. "default" auto-closes on item/outside click, "outside" closes only on outside click, "inside" prevents auto-close. */
|
|
45
|
-
this.close = "default";
|
|
46
|
-
/** @internal */
|
|
47
|
-
this.togglerId = generateId["default"]("profile", "button");
|
|
48
|
-
this._handleMobileToggle = () => {
|
|
49
|
-
this._mobileMenuOpen = !this._mobileMenuOpen;
|
|
50
|
-
};
|
|
51
|
-
this._handleKeydown = (e) => {
|
|
52
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
53
|
-
e.preventDefault();
|
|
54
|
-
this._handleMobileToggle();
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
render() {
|
|
59
|
-
if (!this._breakpointReached) {
|
|
60
|
-
// Desktop: dropdown with avatar + label + secondaryText
|
|
61
|
-
return lit.html `
|
|
62
|
-
<sgds-dropdown .floatingOpts=${{ middleware: [dom.offset(0)] }} ?disabled=${this.disabled} close=${this.close}>
|
|
63
|
-
<button
|
|
64
|
-
class="${classMap_js.classMap({
|
|
65
|
-
"nav-link": true,
|
|
66
|
-
disabled: this.disabled
|
|
67
|
-
})}"
|
|
68
|
-
aria-disabled=${this.disabled ? "true" : "false"}
|
|
69
|
-
aria-label=${ifDefined_js.ifDefined(this.ariaLabel)}
|
|
70
|
-
id=${this.togglerId}
|
|
71
|
-
tabindex=${this.disabled ? "-1" : "0"}
|
|
72
|
-
slot="toggler"
|
|
73
|
-
>
|
|
74
|
-
<slot name="avatar"></slot>
|
|
75
|
-
${this.label || this.secondaryText
|
|
76
|
-
? lit.html `<div class="profile-text">
|
|
77
|
-
${this.label ? lit.html `<span class="profile-label">${this.label}</span>` : lit.nothing}
|
|
78
|
-
${this.secondaryText
|
|
79
|
-
? lit.html `<span class="profile-secondary-text">${this.secondaryText}</span>`
|
|
80
|
-
: lit.nothing}
|
|
81
|
-
</div>`
|
|
82
|
-
: lit.nothing}
|
|
83
|
-
<sgds-icon name="chevron-down" size="md"></sgds-icon>
|
|
84
|
-
</button>
|
|
85
|
-
<slot></slot>
|
|
86
|
-
</sgds-dropdown>
|
|
87
|
-
`;
|
|
88
|
-
}
|
|
89
|
-
// Mobile: avatar toggler + self-contained mobile panel
|
|
90
|
-
return lit.html `
|
|
91
|
-
<div
|
|
92
|
-
class="profile-avatar-mobile"
|
|
93
|
-
role="button"
|
|
94
|
-
tabindex="0"
|
|
95
|
-
aria-label=${this.ariaLabel || "Toggle navigation"}
|
|
96
|
-
aria-expanded=${this._mobileMenuOpen ? "true" : "false"}
|
|
97
|
-
@click=${this._handleMobileToggle}
|
|
98
|
-
@keydown=${this._handleKeydown}
|
|
99
|
-
>
|
|
100
|
-
<slot name="avatar"></slot>
|
|
101
|
-
</div>
|
|
102
|
-
<div class="profile-mobile-panel" ?hidden=${!this._mobileMenuOpen}>
|
|
103
|
-
<div class="profile-mobile-items">
|
|
104
|
-
<slot></slot>
|
|
105
|
-
</div>
|
|
106
|
-
</div>
|
|
107
|
-
`;
|
|
108
26
|
}
|
|
109
27
|
}
|
|
110
|
-
SgdsMainnavProfile.styles = [...sgdsElement["default"].styles, mainnavProfile["default"]];
|
|
111
|
-
/** @internal */
|
|
112
|
-
SgdsMainnavProfile.dependencies = {
|
|
113
|
-
"sgds-dropdown": sgdsDropdown.SgdsDropdown,
|
|
114
|
-
"sgds-dropdown-item": sgdsDropdownItem.SgdsDropdownItem,
|
|
115
|
-
"sgds-icon": sgdsIcon.SgdsIcon
|
|
116
|
-
};
|
|
117
28
|
tslib.__decorate([
|
|
118
29
|
context.consume({ context: mainnavContext.MainnavBreakpointContext, subscribe: true }),
|
|
119
30
|
decorators_js.state()
|
|
120
31
|
], SgdsMainnavProfile.prototype, "_breakpointReached", void 0);
|
|
121
|
-
tslib.__decorate([
|
|
122
|
-
decorators_js.state()
|
|
123
|
-
], SgdsMainnavProfile.prototype, "_mobileMenuOpen", void 0);
|
|
124
|
-
tslib.__decorate([
|
|
125
|
-
decorators_js.property({ type: String, reflect: true })
|
|
126
|
-
], SgdsMainnavProfile.prototype, "label", void 0);
|
|
127
|
-
tslib.__decorate([
|
|
128
|
-
decorators_js.property({ type: String, reflect: true })
|
|
129
|
-
], SgdsMainnavProfile.prototype, "secondaryText", void 0);
|
|
130
|
-
tslib.__decorate([
|
|
131
|
-
decorators_js.property({ type: Boolean })
|
|
132
|
-
], SgdsMainnavProfile.prototype, "disabled", void 0);
|
|
133
|
-
tslib.__decorate([
|
|
134
|
-
decorators_js.property({ type: String })
|
|
135
|
-
], SgdsMainnavProfile.prototype, "ariaLabel", void 0);
|
|
136
|
-
tslib.__decorate([
|
|
137
|
-
decorators_js.property({ type: String })
|
|
138
|
-
], SgdsMainnavProfile.prototype, "close", void 0);
|
|
139
32
|
|
|
140
33
|
exports.SgdsMainnavProfile = SgdsMainnavProfile;
|
|
141
34
|
exports["default"] = SgdsMainnavProfile;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sgds-mainnav-profile.cjs.js","sources":["../../../../src/components/Mainnav/sgds-mainnav-profile.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"sgds-mainnav-profile.cjs.js","sources":["../../../../src/components/Mainnav/sgds-mainnav-profile.ts"],"sourcesContent":["import { consume } from \"@lit/context\";\nimport { state } from \"lit/decorators.js\";\nimport NavProfileElement from \"../../base/nav-profile-element\";\nimport { MainnavBreakpointContext } from \"./mainnav-context\";\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 no dropdown items are slotted, renders as a non-interactive read-only element (no caret, no pointer cursor, not focusable).\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). When empty, the component becomes read-only.\n */\nexport class SgdsMainnavProfile extends NavProfileElement {\n @consume({ context: MainnavBreakpointContext, subscribe: true })\n @state()\n protected override _breakpointReached = true;\n}\n\nexport default SgdsMainnavProfile;\n"],"names":["NavProfileElement","__decorate","consume","MainnavBreakpointContext","state"],"mappings":";;;;;;;;;;;AAKA;;;;;;;;;AASG;AACG,MAAO,kBAAmB,SAAQA,4BAAiB,CAAA;AAAzD,IAAA,WAAA,GAAA;;QAGqB,IAAkB,CAAA,kBAAA,GAAG,IAAI,CAAC;KAC9C;AAAA,CAAA;AADoBC,gBAAA,CAAA;IAFlBC,eAAO,CAAC,EAAE,OAAO,EAAEC,uCAAwB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC/D,IAAAC,mBAAK,EAAE;AACqC,CAAA,EAAA,kBAAA,CAAA,SAAA,EAAA,oBAAA,EAAA,KAAA,CAAA,CAAA;;;;;"}
|
|
@@ -1,137 +1,30 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { __decorate } from 'tslib';
|
|
3
|
-
import { html, nothing } from 'lit';
|
|
4
3
|
import { consume } from '@lit/context';
|
|
5
|
-
import { state
|
|
6
|
-
import
|
|
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';
|
|
4
|
+
import { state } from 'lit/decorators.js';
|
|
5
|
+
import NavProfileElement from '../../base/nav-profile-element.js';
|
|
13
6
|
import { MainnavBreakpointContext } from './mainnav-context.js';
|
|
14
|
-
import css_248z from './mainnav-profile.js';
|
|
15
|
-
import genId from '../../utils/generateId.js';
|
|
16
7
|
|
|
17
8
|
/**
|
|
18
9
|
* @summary A profile component for the mainnav that shows a full dropdown in desktop and handles its own mobile menu.
|
|
19
10
|
* In desktop: renders avatar + label + secondaryText with a dropdown.
|
|
20
11
|
* In mobile: renders the avatar as a toggler that opens a self-contained mobile panel with profile items.
|
|
12
|
+
* When no dropdown items are slotted, renders as a non-interactive read-only element (no caret, no pointer cursor, not focusable).
|
|
21
13
|
* When present, it disables the mainnav's default hamburger toggler.
|
|
22
14
|
*
|
|
23
15
|
* @slot avatar - Avatar element displayed in both desktop (before label) and mobile (as toggler)
|
|
24
|
-
* @slot default - Profile menu items (sgds-dropdown-item elements)
|
|
16
|
+
* @slot default - Profile menu items (sgds-dropdown-item elements). When empty, the component becomes read-only.
|
|
25
17
|
*/
|
|
26
|
-
class SgdsMainnavProfile extends
|
|
18
|
+
class SgdsMainnavProfile extends NavProfileElement {
|
|
27
19
|
constructor() {
|
|
28
20
|
super(...arguments);
|
|
29
21
|
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
22
|
}
|
|
105
23
|
}
|
|
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
24
|
__decorate([
|
|
114
25
|
consume({ context: MainnavBreakpointContext, subscribe: true }),
|
|
115
26
|
state()
|
|
116
27
|
], 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
28
|
|
|
136
29
|
export { SgdsMainnavProfile, SgdsMainnavProfile as default };
|
|
137
30
|
//# sourceMappingURL=sgds-mainnav-profile.js.map
|