@govtechsg/sgds-web-component 3.27.0-rc.3 → 3.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/base/dropdown-list-element.js +2 -9
  2. package/base/dropdown-list-element.js.map +1 -1
  3. package/components/Breadcrumb/index.umd.min.js +5 -5
  4. package/components/Breadcrumb/index.umd.min.js.map +1 -1
  5. package/components/ComboBox/index.umd.min.js +1 -1
  6. package/components/ComboBox/index.umd.min.js.map +1 -1
  7. package/components/DataTable/data-table.js +1 -1
  8. package/components/DataTable/index.umd.min.js +49 -42
  9. package/components/DataTable/index.umd.min.js.map +1 -1
  10. package/components/DataTable/sgds-data-table-cell.d.ts +2 -2
  11. package/components/DataTable/sgds-data-table-cell.js.map +1 -1
  12. package/components/DataTable/sgds-data-table-head.d.ts +2 -2
  13. package/components/DataTable/sgds-data-table-head.js.map +1 -1
  14. package/components/DataTable/sgds-data-table-row.d.ts +0 -3
  15. package/components/DataTable/sgds-data-table-row.js +0 -13
  16. package/components/DataTable/sgds-data-table-row.js.map +1 -1
  17. package/components/DataTable/sgds-data-table.d.ts +7 -4
  18. package/components/DataTable/sgds-data-table.js +49 -38
  19. package/components/DataTable/sgds-data-table.js.map +1 -1
  20. package/components/DataTable/types.d.ts +7 -0
  21. package/components/Datepicker/index.umd.min.js +1 -1
  22. package/components/Dropdown/dropdown-item.js +1 -1
  23. package/components/Dropdown/index.umd.min.js +5 -5
  24. package/components/Dropdown/index.umd.min.js.map +1 -1
  25. package/components/Dropdown/sgds-dropdown-item.d.ts +0 -2
  26. package/components/Dropdown/sgds-dropdown-item.js +2 -8
  27. package/components/Dropdown/sgds-dropdown-item.js.map +1 -1
  28. package/components/Footer/index.umd.min.js +1 -1
  29. package/components/Footer/index.umd.min.js.map +1 -1
  30. package/components/Footer/sgds-footer.js +1 -1
  31. package/components/Footer/sgds-footer.js.map +1 -1
  32. package/components/Input/index.umd.min.js +1 -1
  33. package/components/Mainnav/index.d.ts +0 -2
  34. package/components/Mainnav/index.js +0 -2
  35. package/components/Mainnav/index.js.map +1 -1
  36. package/components/Mainnav/index.umd.min.js +285 -338
  37. package/components/Mainnav/index.umd.min.js.map +1 -1
  38. package/components/Mainnav/mainnav-dropdown.js +1 -1
  39. package/components/Mainnav/mainnav-item.js +1 -1
  40. package/components/Mainnav/mainnav.js +1 -1
  41. package/components/Mainnav/sgds-mainnav.d.ts +51 -8
  42. package/components/Mainnav/sgds-mainnav.js +238 -40
  43. package/components/Mainnav/sgds-mainnav.js.map +1 -1
  44. package/components/OverflowMenu/index.umd.min.js +5 -5
  45. package/components/OverflowMenu/index.umd.min.js.map +1 -1
  46. package/components/QuantityToggle/index.umd.min.js +1 -1
  47. package/components/Select/index.umd.min.js +21 -21
  48. package/components/Select/index.umd.min.js.map +1 -1
  49. package/components/Tab/index.umd.min.js +1 -1
  50. package/components/Tab/index.umd.min.js.map +1 -1
  51. package/components/Tab/tab-panel.js +1 -1
  52. package/components/Textarea/index.umd.min.js +1 -1
  53. package/components/index.d.ts +0 -3
  54. package/components/index.js +0 -3
  55. package/components/index.js.map +1 -1
  56. package/components/index.umd.min.js +587 -665
  57. package/components/index.umd.min.js.map +1 -1
  58. package/css/fouc.css +5 -8
  59. package/custom-elements.json +15246 -17418
  60. package/index.d.ts +0 -1
  61. package/index.js +0 -1
  62. package/index.js.map +1 -1
  63. package/index.umd.min.js +353 -441
  64. package/index.umd.min.js.map +1 -1
  65. package/package.json +1 -1
  66. package/react/base/dropdown-list-element.cjs.js +2 -9
  67. package/react/base/dropdown-list-element.cjs.js.map +1 -1
  68. package/react/base/dropdown-list-element.js +2 -9
  69. package/react/base/dropdown-list-element.js.map +1 -1
  70. package/react/components/DataTable/data-table.cjs.js +1 -1
  71. package/react/components/DataTable/data-table.js +1 -1
  72. package/react/components/DataTable/sgds-data-table-cell.cjs.js.map +1 -1
  73. package/react/components/DataTable/sgds-data-table-cell.js.map +1 -1
  74. package/react/components/DataTable/sgds-data-table-head.cjs.js.map +1 -1
  75. package/react/components/DataTable/sgds-data-table-head.js.map +1 -1
  76. package/react/components/DataTable/sgds-data-table-row.cjs.js +0 -13
  77. package/react/components/DataTable/sgds-data-table-row.cjs.js.map +1 -1
  78. package/react/components/DataTable/sgds-data-table-row.js +0 -13
  79. package/react/components/DataTable/sgds-data-table-row.js.map +1 -1
  80. package/react/components/DataTable/sgds-data-table.cjs.js +49 -38
  81. package/react/components/DataTable/sgds-data-table.cjs.js.map +1 -1
  82. package/react/components/DataTable/sgds-data-table.js +49 -38
  83. package/react/components/DataTable/sgds-data-table.js.map +1 -1
  84. package/react/components/Dropdown/dropdown-item.cjs.js +1 -1
  85. package/react/components/Dropdown/dropdown-item.js +1 -1
  86. package/react/components/Dropdown/sgds-dropdown-item.cjs.js +2 -8
  87. package/react/components/Dropdown/sgds-dropdown-item.cjs.js.map +1 -1
  88. package/react/components/Dropdown/sgds-dropdown-item.js +2 -8
  89. package/react/components/Dropdown/sgds-dropdown-item.js.map +1 -1
  90. package/react/components/Footer/sgds-footer.cjs.js +1 -1
  91. package/react/components/Footer/sgds-footer.cjs.js.map +1 -1
  92. package/react/components/Footer/sgds-footer.js +1 -1
  93. package/react/components/Footer/sgds-footer.js.map +1 -1
  94. package/react/components/Mainnav/mainnav-dropdown.cjs.js +1 -1
  95. package/react/components/Mainnav/mainnav-dropdown.js +1 -1
  96. package/react/components/Mainnav/mainnav-item.cjs.js +1 -1
  97. package/react/components/Mainnav/mainnav-item.js +1 -1
  98. package/react/components/Mainnav/mainnav.cjs.js +1 -1
  99. package/react/components/Mainnav/mainnav.js +1 -1
  100. package/react/components/Mainnav/sgds-mainnav.cjs.js +237 -39
  101. package/react/components/Mainnav/sgds-mainnav.cjs.js.map +1 -1
  102. package/react/components/Mainnav/sgds-mainnav.js +238 -40
  103. package/react/components/Mainnav/sgds-mainnav.js.map +1 -1
  104. package/react/components/Tab/tab-panel.cjs.js +1 -1
  105. package/react/components/Tab/tab-panel.js +1 -1
  106. package/react/index.cjs.js +146 -152
  107. package/react/index.cjs.js.map +1 -1
  108. package/react/index.d.ts +5 -8
  109. package/react/index.js +5 -8
  110. package/react/index.js.map +1 -1
  111. package/react/styles/form-text-control.cjs.js +1 -1
  112. package/react/styles/form-text-control.js +1 -1
  113. package/styles/form-text-control.js +1 -1
  114. package/themes/blue.css +11 -11
  115. package/themes/cyan.css +10 -10
  116. package/themes/day.css +1 -1
  117. package/themes/gt/blue.css +11 -11
  118. package/themes/gt/cyan.css +10 -10
  119. package/themes/gt/magenta.css +11 -11
  120. package/themes/gt/pink.css +11 -11
  121. package/themes/gt/purple.css +11 -11
  122. package/themes/gt/red.css +11 -11
  123. package/themes/magenta.css +11 -11
  124. package/themes/pink.css +11 -11
  125. package/themes/purple.css +11 -11
  126. package/themes/red.css +11 -11
  127. package/themes/root.css +0 -5
  128. package/types/react.d.ts +97 -148
  129. package/base/nav-element.d.ts +0 -64
  130. package/base/nav-element.js +0 -263
  131. package/base/nav-element.js.map +0 -1
  132. package/base/nav-profile-element.d.ts +0 -47
  133. package/base/nav-profile-element.js +0 -191
  134. package/base/nav-profile-element.js.map +0 -1
  135. package/base/nav-profile.js +0 -6
  136. package/base/nav-profile.js.map +0 -1
  137. package/components/Appnav/appnav-context.d.ts +0 -6
  138. package/components/Appnav/appnav-context.js +0 -7
  139. package/components/Appnav/appnav-context.js.map +0 -1
  140. package/components/Appnav/appnav.js +0 -6
  141. package/components/Appnav/appnav.js.map +0 -1
  142. package/components/Appnav/index.d.ts +0 -9
  143. package/components/Appnav/index.js +0 -8
  144. package/components/Appnav/index.js.map +0 -1
  145. package/components/Appnav/index.umd.min.js +0 -2535
  146. package/components/Appnav/index.umd.min.js.map +0 -1
  147. package/components/Appnav/sgds-appnav-profile.d.ts +0 -17
  148. package/components/Appnav/sgds-appnav-profile.js +0 -31
  149. package/components/Appnav/sgds-appnav-profile.js.map +0 -1
  150. package/components/Appnav/sgds-appnav.d.ts +0 -44
  151. package/components/Appnav/sgds-appnav.js +0 -183
  152. package/components/Appnav/sgds-appnav.js.map +0 -1
  153. package/components/Mainnav/sgds-mainnav-profile.d.ts +0 -15
  154. package/components/Mainnav/sgds-mainnav-profile.js +0 -29
  155. package/components/Mainnav/sgds-mainnav-profile.js.map +0 -1
  156. package/react/appnav/index.cjs.js +0 -45
  157. package/react/appnav/index.cjs.js.map +0 -1
  158. package/react/appnav/index.d.ts +0 -4
  159. package/react/appnav/index.js +0 -21
  160. package/react/appnav/index.js.map +0 -1
  161. package/react/appnav-profile/index.cjs.js +0 -40
  162. package/react/appnav-profile/index.cjs.js.map +0 -1
  163. package/react/appnav-profile/index.d.ts +0 -4
  164. package/react/appnav-profile/index.js +0 -16
  165. package/react/appnav-profile/index.js.map +0 -1
  166. package/react/base/nav-element.cjs.js +0 -268
  167. package/react/base/nav-element.cjs.js.map +0 -1
  168. package/react/base/nav-element.js +0 -264
  169. package/react/base/nav-element.js.map +0 -1
  170. package/react/base/nav-profile-element.cjs.js +0 -196
  171. package/react/base/nav-profile-element.cjs.js.map +0 -1
  172. package/react/base/nav-profile-element.js +0 -192
  173. package/react/base/nav-profile-element.js.map +0 -1
  174. package/react/base/nav-profile.cjs.js +0 -11
  175. package/react/base/nav-profile.cjs.js.map +0 -1
  176. package/react/base/nav-profile.js +0 -7
  177. package/react/base/nav-profile.js.map +0 -1
  178. package/react/components/Appnav/appnav-context.cjs.js +0 -13
  179. package/react/components/Appnav/appnav-context.cjs.js.map +0 -1
  180. package/react/components/Appnav/appnav-context.js +0 -8
  181. package/react/components/Appnav/appnav-context.js.map +0 -1
  182. package/react/components/Appnav/appnav.cjs.js +0 -11
  183. package/react/components/Appnav/appnav.cjs.js.map +0 -1
  184. package/react/components/Appnav/appnav.js +0 -7
  185. package/react/components/Appnav/appnav.js.map +0 -1
  186. package/react/components/Appnav/sgds-appnav-profile.cjs.js +0 -37
  187. package/react/components/Appnav/sgds-appnav-profile.cjs.js.map +0 -1
  188. package/react/components/Appnav/sgds-appnav-profile.js +0 -32
  189. package/react/components/Appnav/sgds-appnav-profile.js.map +0 -1
  190. package/react/components/Appnav/sgds-appnav.cjs.js +0 -189
  191. package/react/components/Appnav/sgds-appnav.cjs.js.map +0 -1
  192. package/react/components/Appnav/sgds-appnav.js +0 -184
  193. package/react/components/Appnav/sgds-appnav.js.map +0 -1
  194. package/react/components/Mainnav/sgds-mainnav-profile.cjs.js +0 -35
  195. package/react/components/Mainnav/sgds-mainnav-profile.cjs.js.map +0 -1
  196. package/react/components/Mainnav/sgds-mainnav-profile.js +0 -30
  197. package/react/components/Mainnav/sgds-mainnav-profile.js.map +0 -1
  198. package/react/mainnav-profile/index.cjs.js +0 -40
  199. package/react/mainnav-profile/index.cjs.js.map +0 -1
  200. package/react/mainnav-profile/index.d.ts +0 -4
  201. package/react/mainnav-profile/index.js +0 -16
  202. package/react/mainnav-profile/index.js.map +0 -1
@@ -1,196 +0,0 @@
1
- 'use client';
2
- 'use strict';
3
-
4
- Object.defineProperty(exports, '__esModule', { value: true });
5
-
6
- var tslib = require('tslib');
7
- var lit = require('lit');
8
- var decorators_js = require('lit/decorators.js');
9
- var classMap_js = require('lit/directives/class-map.js');
10
- var ifDefined_js = require('lit/directives/if-defined.js');
11
- var dom = require('@floating-ui/dom');
12
- var sgdsElement = require('./sgds-element.cjs.js');
13
- var sgdsDropdown = require('../components/Dropdown/sgds-dropdown.cjs.js');
14
- var sgdsIcon = require('../components/Icon/sgds-icon.cjs.js');
15
- var navProfile = require('./nav-profile.cjs.js');
16
- var generateId = require('../utils/generateId.cjs.js');
17
-
18
- /**
19
- * Base class for navigation profile components (sgds-mainnav-profile and sgds-appnav-profile).
20
- * Provides the full profile dropdown (desktop) and mobile panel behavior.
21
- * When no dropdown items are slotted into the default slot, renders as a non-interactive
22
- * read-only element (no dropdown menu, no caret icon, cursor default, not focusable by keyboard or mouse).
23
- * Subclasses must consume the appropriate breakpoint context and set `_breakpointReached`.
24
- *
25
- * @slot avatar - Avatar element displayed in both desktop (before label) and mobile (as toggler)
26
- * @slot default - Profile menu items (sgds-dropdown-item elements). When empty, the component becomes read-only.
27
- */
28
- class NavProfileElement extends sgdsElement["default"] {
29
- constructor() {
30
- super(...arguments);
31
- /** @internal Whether the breakpoint is reached (mobile mode). Subclasses set this via context consumption. */
32
- this._breakpointReached = true;
33
- /** @internal Whether the mobile menu is open */
34
- this._mobileMenuOpen = false;
35
- /** @internal Whether dropdown items are slotted */
36
- this._hasDropdownItems = false;
37
- /** Primary text displayed next to the avatar in desktop (e.g. user name) */
38
- this.label = "";
39
- /** Secondary text displayed below the label in desktop (e.g. agency or role) */
40
- this.secondaryText = "";
41
- /** When true, disables the profile dropdown */
42
- this.disabled = false;
43
- /** Accessible label for the profile toggle button */
44
- this.ariaLabel = "";
45
- /** Controls dropdown close behavior. "default" auto-closes on item/outside click, "outside" closes only on outside click, "inside" prevents auto-close. */
46
- this.close = "default";
47
- /** @internal */
48
- this.togglerId = generateId["default"]("profile", "button");
49
- this._handleMobileToggle = () => {
50
- this._mobileMenuOpen = !this._mobileMenuOpen;
51
- };
52
- this._handleClickOutside = (e) => {
53
- if (!this._mobileMenuOpen)
54
- return;
55
- if (this.close === "inside")
56
- return;
57
- if (!e.composedPath().includes(this)) {
58
- this._mobileMenuOpen = false;
59
- }
60
- };
61
- this._handleSlotChange = () => {
62
- this._hasDropdownItems = this._defaultSlotElements.length > 0;
63
- };
64
- this._handleKeydown = (e) => {
65
- if (e.key === "Enter" || e.key === " ") {
66
- e.preventDefault();
67
- this._handleMobileToggle();
68
- }
69
- };
70
- }
71
- connectedCallback() {
72
- super.connectedCallback();
73
- window.addEventListener("click", this._handleClickOutside);
74
- }
75
- disconnectedCallback() {
76
- super.disconnectedCallback();
77
- window.removeEventListener("click", this._handleClickOutside);
78
- }
79
- render() {
80
- if (!this._breakpointReached) {
81
- // Desktop: read-only (no dropdown items)
82
- if (!this._hasDropdownItems) {
83
- return lit.html `
84
- <div
85
- class="${classMap_js.classMap({
86
- "nav-link": true,
87
- "read-only": true
88
- })}"
89
- aria-label=${ifDefined_js.ifDefined(this.ariaLabel)}
90
- >
91
- <slot name="avatar"></slot>
92
- ${this.label || this.secondaryText
93
- ? lit.html `<div class="profile-text">
94
- ${this.label ? lit.html `<span class="profile-label">${this.label}</span>` : lit.nothing}
95
- ${this.secondaryText
96
- ? lit.html `<span class="profile-secondary-text">${this.secondaryText}</span>`
97
- : lit.nothing}
98
- </div>`
99
- : lit.nothing}
100
- </div>
101
- <slot @slotchange=${this._handleSlotChange}></slot>
102
- `;
103
- }
104
- // Desktop: dropdown with avatar + label + secondaryText
105
- return lit.html `
106
- <sgds-dropdown .floatingOpts=${{ middleware: [dom.offset(0)] }} ?disabled=${this.disabled} close=${this.close}>
107
- <button
108
- class="${classMap_js.classMap({
109
- "nav-link": true,
110
- disabled: this.disabled
111
- })}"
112
- aria-disabled=${this.disabled ? "true" : "false"}
113
- aria-label=${ifDefined_js.ifDefined(this.ariaLabel)}
114
- id=${this.togglerId}
115
- tabindex=${this.disabled ? "-1" : "0"}
116
- slot="toggler"
117
- >
118
- <slot name="avatar"></slot>
119
- ${this.label || this.secondaryText
120
- ? lit.html `<div class="profile-text">
121
- ${this.label ? lit.html `<span class="profile-label">${this.label}</span>` : lit.nothing}
122
- ${this.secondaryText
123
- ? lit.html `<span class="profile-secondary-text">${this.secondaryText}</span>`
124
- : lit.nothing}
125
- </div>`
126
- : lit.nothing}
127
- <sgds-icon name="chevron-down" size="md"></sgds-icon>
128
- </button>
129
- <slot @slotchange=${this._handleSlotChange}></slot>
130
- </sgds-dropdown>
131
- `;
132
- }
133
- // Mobile: read-only (no dropdown items)
134
- if (!this._hasDropdownItems) {
135
- return lit.html `
136
- <div class="profile-avatar-mobile read-only">
137
- <slot name="avatar"></slot>
138
- </div>
139
- <slot @slotchange=${this._handleSlotChange}></slot>
140
- `;
141
- }
142
- // Mobile: avatar toggler + self-contained mobile panel
143
- return lit.html `
144
- <button
145
- class="profile-avatar-mobile"
146
- aria-label=${this.ariaLabel || "Toggle navigation"}
147
- aria-expanded=${this._mobileMenuOpen ? "true" : "false"}
148
- @click=${this._handleMobileToggle}
149
- @keydown=${this._handleKeydown}
150
- >
151
- <slot name="avatar"></slot>
152
- </button>
153
- <div class="profile-mobile-panel" ?hidden=${!this._mobileMenuOpen}>
154
- <div class="profile-mobile-items">
155
- <slot @slotchange=${this._handleSlotChange}></slot>
156
- </div>
157
- </div>
158
- `;
159
- }
160
- }
161
- NavProfileElement.styles = [...sgdsElement["default"].styles, navProfile["default"]];
162
- /** @internal */
163
- NavProfileElement.dependencies = {
164
- "sgds-dropdown": sgdsDropdown.SgdsDropdown,
165
- "sgds-icon": sgdsIcon.SgdsIcon
166
- };
167
- tslib.__decorate([
168
- decorators_js.state()
169
- ], NavProfileElement.prototype, "_breakpointReached", void 0);
170
- tslib.__decorate([
171
- decorators_js.state()
172
- ], NavProfileElement.prototype, "_mobileMenuOpen", void 0);
173
- tslib.__decorate([
174
- decorators_js.state()
175
- ], NavProfileElement.prototype, "_hasDropdownItems", void 0);
176
- tslib.__decorate([
177
- decorators_js.queryAssignedElements({ flatten: true })
178
- ], NavProfileElement.prototype, "_defaultSlotElements", void 0);
179
- tslib.__decorate([
180
- decorators_js.property({ type: String, reflect: true })
181
- ], NavProfileElement.prototype, "label", void 0);
182
- tslib.__decorate([
183
- decorators_js.property({ type: String, reflect: true })
184
- ], NavProfileElement.prototype, "secondaryText", void 0);
185
- tslib.__decorate([
186
- decorators_js.property({ type: Boolean })
187
- ], NavProfileElement.prototype, "disabled", void 0);
188
- tslib.__decorate([
189
- decorators_js.property({ type: String })
190
- ], NavProfileElement.prototype, "ariaLabel", void 0);
191
- tslib.__decorate([
192
- decorators_js.property({ type: String })
193
- ], NavProfileElement.prototype, "close", void 0);
194
-
195
- exports["default"] = NavProfileElement;
196
- //# sourceMappingURL=nav-profile-element.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nav-profile-element.cjs.js","sources":["../../../src/base/nav-profile-element.ts"],"sourcesContent":["import { html, nothing } from \"lit\";\nimport { property, queryAssignedElements, 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 \"./sgds-element\";\nimport SgdsDropdown from \"../components/Dropdown/sgds-dropdown\";\nimport SgdsIcon from \"../components/Icon/sgds-icon\";\nimport navProfileStyle from \"./nav-profile.css\";\nimport genId from \"../utils/generateId\";\n\n/**\n * Base class for navigation profile components (sgds-mainnav-profile and sgds-appnav-profile).\n * Provides the full profile dropdown (desktop) and mobile panel behavior.\n * When no dropdown items are slotted into the default slot, renders as a non-interactive\n * read-only element (no dropdown menu, no caret icon, cursor default, not focusable by keyboard or mouse).\n * Subclasses must consume the appropriate breakpoint context and set `_breakpointReached`.\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 default abstract class NavProfileElement extends SgdsElement {\n static styles = [...SgdsElement.styles, navProfileStyle];\n /** @internal */\n static dependencies = {\n \"sgds-dropdown\": SgdsDropdown,\n \"sgds-icon\": SgdsIcon\n };\n\n /** @internal Whether the breakpoint is reached (mobile mode). Subclasses set this via context consumption. */\n @state()\n protected _breakpointReached = true;\n\n /** @internal Whether the mobile menu is open */\n @state()\n private _mobileMenuOpen = false;\n\n /** @internal Whether dropdown items are slotted */\n @state()\n private _hasDropdownItems = false;\n\n @queryAssignedElements({ flatten: true })\n private _defaultSlotElements!: HTMLElement[];\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 _handleClickOutside = (e: MouseEvent) => {\n if (!this._mobileMenuOpen) return;\n if (this.close === \"inside\") return;\n if (!e.composedPath().includes(this)) {\n this._mobileMenuOpen = false;\n }\n };\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"click\", this._handleClickOutside);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener(\"click\", this._handleClickOutside);\n }\n\n private _handleSlotChange = () => {\n this._hasDropdownItems = this._defaultSlotElements.length > 0;\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: read-only (no dropdown items)\n if (!this._hasDropdownItems) {\n return html`\n <div\n class=\"${classMap({\n \"nav-link\": true,\n \"read-only\": true\n })}\"\n aria-label=${ifDefined(this.ariaLabel)}\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 </div>\n <slot @slotchange=${this._handleSlotChange}></slot>\n `;\n }\n\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 @slotchange=${this._handleSlotChange}></slot>\n </sgds-dropdown>\n `;\n }\n\n // Mobile: read-only (no dropdown items)\n if (!this._hasDropdownItems) {\n return html`\n <div class=\"profile-avatar-mobile read-only\">\n <slot name=\"avatar\"></slot>\n </div>\n <slot @slotchange=${this._handleSlotChange}></slot>\n `;\n }\n\n // Mobile: avatar toggler + self-contained mobile panel\n return html`\n <button\n class=\"profile-avatar-mobile\"\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 </button>\n <div class=\"profile-mobile-panel\" ?hidden=${!this._mobileMenuOpen}>\n <div class=\"profile-mobile-items\">\n <slot @slotchange=${this._handleSlotChange}></slot>\n </div>\n </div>\n `;\n }\n}\n"],"names":["SgdsElement","genId","html","classMap","ifDefined","nothing","offset","navProfileStyle","SgdsDropdown","SgdsIcon","__decorate","state","queryAssignedElements","property"],"mappings":"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"}
@@ -1,192 +0,0 @@
1
- 'use client';
2
- import { __decorate } from 'tslib';
3
- import { html, nothing } from 'lit';
4
- import { state, queryAssignedElements, property } from 'lit/decorators.js';
5
- import { classMap } from 'lit/directives/class-map.js';
6
- import { ifDefined } from 'lit/directives/if-defined.js';
7
- import { offset } from '@floating-ui/dom';
8
- import SgdsElement from './sgds-element.js';
9
- import { SgdsDropdown } from '../components/Dropdown/sgds-dropdown.js';
10
- import { SgdsIcon } from '../components/Icon/sgds-icon.js';
11
- import css_248z from './nav-profile.js';
12
- import genId from '../utils/generateId.js';
13
-
14
- /**
15
- * Base class for navigation profile components (sgds-mainnav-profile and sgds-appnav-profile).
16
- * Provides the full profile dropdown (desktop) and mobile panel behavior.
17
- * When no dropdown items are slotted into the default slot, renders as a non-interactive
18
- * read-only element (no dropdown menu, no caret icon, cursor default, not focusable by keyboard or mouse).
19
- * Subclasses must consume the appropriate breakpoint context and set `_breakpointReached`.
20
- *
21
- * @slot avatar - Avatar element displayed in both desktop (before label) and mobile (as toggler)
22
- * @slot default - Profile menu items (sgds-dropdown-item elements). When empty, the component becomes read-only.
23
- */
24
- class NavProfileElement extends SgdsElement {
25
- constructor() {
26
- super(...arguments);
27
- /** @internal Whether the breakpoint is reached (mobile mode). Subclasses set this via context consumption. */
28
- this._breakpointReached = true;
29
- /** @internal Whether the mobile menu is open */
30
- this._mobileMenuOpen = false;
31
- /** @internal Whether dropdown items are slotted */
32
- this._hasDropdownItems = false;
33
- /** Primary text displayed next to the avatar in desktop (e.g. user name) */
34
- this.label = "";
35
- /** Secondary text displayed below the label in desktop (e.g. agency or role) */
36
- this.secondaryText = "";
37
- /** When true, disables the profile dropdown */
38
- this.disabled = false;
39
- /** Accessible label for the profile toggle button */
40
- this.ariaLabel = "";
41
- /** Controls dropdown close behavior. "default" auto-closes on item/outside click, "outside" closes only on outside click, "inside" prevents auto-close. */
42
- this.close = "default";
43
- /** @internal */
44
- this.togglerId = genId("profile", "button");
45
- this._handleMobileToggle = () => {
46
- this._mobileMenuOpen = !this._mobileMenuOpen;
47
- };
48
- this._handleClickOutside = (e) => {
49
- if (!this._mobileMenuOpen)
50
- return;
51
- if (this.close === "inside")
52
- return;
53
- if (!e.composedPath().includes(this)) {
54
- this._mobileMenuOpen = false;
55
- }
56
- };
57
- this._handleSlotChange = () => {
58
- this._hasDropdownItems = this._defaultSlotElements.length > 0;
59
- };
60
- this._handleKeydown = (e) => {
61
- if (e.key === "Enter" || e.key === " ") {
62
- e.preventDefault();
63
- this._handleMobileToggle();
64
- }
65
- };
66
- }
67
- connectedCallback() {
68
- super.connectedCallback();
69
- window.addEventListener("click", this._handleClickOutside);
70
- }
71
- disconnectedCallback() {
72
- super.disconnectedCallback();
73
- window.removeEventListener("click", this._handleClickOutside);
74
- }
75
- render() {
76
- if (!this._breakpointReached) {
77
- // Desktop: read-only (no dropdown items)
78
- if (!this._hasDropdownItems) {
79
- return html `
80
- <div
81
- class="${classMap({
82
- "nav-link": true,
83
- "read-only": true
84
- })}"
85
- aria-label=${ifDefined(this.ariaLabel)}
86
- >
87
- <slot name="avatar"></slot>
88
- ${this.label || this.secondaryText
89
- ? html `<div class="profile-text">
90
- ${this.label ? html `<span class="profile-label">${this.label}</span>` : nothing}
91
- ${this.secondaryText
92
- ? html `<span class="profile-secondary-text">${this.secondaryText}</span>`
93
- : nothing}
94
- </div>`
95
- : nothing}
96
- </div>
97
- <slot @slotchange=${this._handleSlotChange}></slot>
98
- `;
99
- }
100
- // Desktop: dropdown with avatar + label + secondaryText
101
- return html `
102
- <sgds-dropdown .floatingOpts=${{ middleware: [offset(0)] }} ?disabled=${this.disabled} close=${this.close}>
103
- <button
104
- class="${classMap({
105
- "nav-link": true,
106
- disabled: this.disabled
107
- })}"
108
- aria-disabled=${this.disabled ? "true" : "false"}
109
- aria-label=${ifDefined(this.ariaLabel)}
110
- id=${this.togglerId}
111
- tabindex=${this.disabled ? "-1" : "0"}
112
- slot="toggler"
113
- >
114
- <slot name="avatar"></slot>
115
- ${this.label || this.secondaryText
116
- ? html `<div class="profile-text">
117
- ${this.label ? html `<span class="profile-label">${this.label}</span>` : nothing}
118
- ${this.secondaryText
119
- ? html `<span class="profile-secondary-text">${this.secondaryText}</span>`
120
- : nothing}
121
- </div>`
122
- : nothing}
123
- <sgds-icon name="chevron-down" size="md"></sgds-icon>
124
- </button>
125
- <slot @slotchange=${this._handleSlotChange}></slot>
126
- </sgds-dropdown>
127
- `;
128
- }
129
- // Mobile: read-only (no dropdown items)
130
- if (!this._hasDropdownItems) {
131
- return html `
132
- <div class="profile-avatar-mobile read-only">
133
- <slot name="avatar"></slot>
134
- </div>
135
- <slot @slotchange=${this._handleSlotChange}></slot>
136
- `;
137
- }
138
- // Mobile: avatar toggler + self-contained mobile panel
139
- return html `
140
- <button
141
- class="profile-avatar-mobile"
142
- aria-label=${this.ariaLabel || "Toggle navigation"}
143
- aria-expanded=${this._mobileMenuOpen ? "true" : "false"}
144
- @click=${this._handleMobileToggle}
145
- @keydown=${this._handleKeydown}
146
- >
147
- <slot name="avatar"></slot>
148
- </button>
149
- <div class="profile-mobile-panel" ?hidden=${!this._mobileMenuOpen}>
150
- <div class="profile-mobile-items">
151
- <slot @slotchange=${this._handleSlotChange}></slot>
152
- </div>
153
- </div>
154
- `;
155
- }
156
- }
157
- NavProfileElement.styles = [...SgdsElement.styles, css_248z];
158
- /** @internal */
159
- NavProfileElement.dependencies = {
160
- "sgds-dropdown": SgdsDropdown,
161
- "sgds-icon": SgdsIcon
162
- };
163
- __decorate([
164
- state()
165
- ], NavProfileElement.prototype, "_breakpointReached", void 0);
166
- __decorate([
167
- state()
168
- ], NavProfileElement.prototype, "_mobileMenuOpen", void 0);
169
- __decorate([
170
- state()
171
- ], NavProfileElement.prototype, "_hasDropdownItems", void 0);
172
- __decorate([
173
- queryAssignedElements({ flatten: true })
174
- ], NavProfileElement.prototype, "_defaultSlotElements", void 0);
175
- __decorate([
176
- property({ type: String, reflect: true })
177
- ], NavProfileElement.prototype, "label", void 0);
178
- __decorate([
179
- property({ type: String, reflect: true })
180
- ], NavProfileElement.prototype, "secondaryText", void 0);
181
- __decorate([
182
- property({ type: Boolean })
183
- ], NavProfileElement.prototype, "disabled", void 0);
184
- __decorate([
185
- property({ type: String })
186
- ], NavProfileElement.prototype, "ariaLabel", void 0);
187
- __decorate([
188
- property({ type: String })
189
- ], NavProfileElement.prototype, "close", void 0);
190
-
191
- export { NavProfileElement as default };
192
- //# sourceMappingURL=nav-profile-element.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nav-profile-element.js","sources":["../../../src/base/nav-profile-element.ts"],"sourcesContent":["import { html, nothing } from \"lit\";\nimport { property, queryAssignedElements, 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 \"./sgds-element\";\nimport SgdsDropdown from \"../components/Dropdown/sgds-dropdown\";\nimport SgdsIcon from \"../components/Icon/sgds-icon\";\nimport navProfileStyle from \"./nav-profile.css\";\nimport genId from \"../utils/generateId\";\n\n/**\n * Base class for navigation profile components (sgds-mainnav-profile and sgds-appnav-profile).\n * Provides the full profile dropdown (desktop) and mobile panel behavior.\n * When no dropdown items are slotted into the default slot, renders as a non-interactive\n * read-only element (no dropdown menu, no caret icon, cursor default, not focusable by keyboard or mouse).\n * Subclasses must consume the appropriate breakpoint context and set `_breakpointReached`.\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 default abstract class NavProfileElement extends SgdsElement {\n static styles = [...SgdsElement.styles, navProfileStyle];\n /** @internal */\n static dependencies = {\n \"sgds-dropdown\": SgdsDropdown,\n \"sgds-icon\": SgdsIcon\n };\n\n /** @internal Whether the breakpoint is reached (mobile mode). Subclasses set this via context consumption. */\n @state()\n protected _breakpointReached = true;\n\n /** @internal Whether the mobile menu is open */\n @state()\n private _mobileMenuOpen = false;\n\n /** @internal Whether dropdown items are slotted */\n @state()\n private _hasDropdownItems = false;\n\n @queryAssignedElements({ flatten: true })\n private _defaultSlotElements!: HTMLElement[];\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 _handleClickOutside = (e: MouseEvent) => {\n if (!this._mobileMenuOpen) return;\n if (this.close === \"inside\") return;\n if (!e.composedPath().includes(this)) {\n this._mobileMenuOpen = false;\n }\n };\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"click\", this._handleClickOutside);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener(\"click\", this._handleClickOutside);\n }\n\n private _handleSlotChange = () => {\n this._hasDropdownItems = this._defaultSlotElements.length > 0;\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: read-only (no dropdown items)\n if (!this._hasDropdownItems) {\n return html`\n <div\n class=\"${classMap({\n \"nav-link\": true,\n \"read-only\": true\n })}\"\n aria-label=${ifDefined(this.ariaLabel)}\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 </div>\n <slot @slotchange=${this._handleSlotChange}></slot>\n `;\n }\n\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 @slotchange=${this._handleSlotChange}></slot>\n </sgds-dropdown>\n `;\n }\n\n // Mobile: read-only (no dropdown items)\n if (!this._hasDropdownItems) {\n return html`\n <div class=\"profile-avatar-mobile read-only\">\n <slot name=\"avatar\"></slot>\n </div>\n <slot @slotchange=${this._handleSlotChange}></slot>\n `;\n }\n\n // Mobile: avatar toggler + self-contained mobile panel\n return html`\n <button\n class=\"profile-avatar-mobile\"\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 </button>\n <div class=\"profile-mobile-panel\" ?hidden=${!this._mobileMenuOpen}>\n <div class=\"profile-mobile-items\">\n <slot @slotchange=${this._handleSlotChange}></slot>\n </div>\n </div>\n `;\n }\n}\n"],"names":["navProfileStyle"],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- 'use client';
2
- 'use strict';
3
-
4
- Object.defineProperty(exports, '__esModule', { value: true });
5
-
6
- var lit = require('lit');
7
-
8
- var css_248z = lit.css`:host([expand=always]) .nav-link{border-bottom:var(--sgds-border-width-4) solid transparent;min-height:100%;padding:0 var(--sgds-padding-md)}@media (min-width:512px){:host([expand=sm]) .nav-link{border-bottom:var(--sgds-border-width-4) solid transparent;min-height:100%;padding:0 var(--sgds-padding-md)}}@media (min-width:768px){:host([expand=md]) .nav-link{border-bottom:var(--sgds-border-width-4) solid transparent;min-height:100%;padding:0 var(--sgds-padding-md)}}@media (min-width:1024px){:host(:not([expand])) .nav-link,:host([expand=lg]) .nav-link{border-bottom:var(--sgds-border-width-4) solid transparent;min-height:100%;padding:0 var(--sgds-padding-md)}}@media (min-width:1280px){:host([expand=xl]) .nav-link{border-bottom:var(--sgds-border-width-4) solid transparent;min-height:100%;padding:0 var(--sgds-padding-md)}}@media (min-width:1440px){:host([expand=xxl]) .nav-link{border-bottom:var(--sgds-border-width-4) solid transparent;min-height:100%;padding:0 var(--sgds-padding-md)}}button.nav-link{appearance:none;background:none;border:none;font-family:inherit}.nav-link{align-items:center;box-sizing:border-box;color:var(--sgds-color-default);cursor:pointer;display:flex;font-size:var(--sgds-font-size-label-sm);gap:var(--sgds-gap-xs);line-height:var(--sgds-line-height-2-xs,20px);padding:var(--sgds-padding-sm) var(--sgds-mainnav-mobile-padding-x);text-decoration:none}.nav-link:not(.disabled):hover{color:var(--sgds-primary-color-default)}.nav-link:not(.disabled):focus-visible{color:var(--sgds-primary-color-default);outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.nav-link.disabled{cursor:not-allowed;opacity:var(--sgds-opacity-40)}.nav-link.read-only,.profile-avatar-mobile.read-only{cursor:default;pointer-events:none}:host([tone=brand][expand=always]) .nav-link,:host([tone^=gradient][expand=always]) .nav-link{color:var(--sgds-color-fixed-light)}@media screen and (min-width:512px){:host([tone=brand][expand=sm]) .nav-link,:host([tone^=gradient][expand=sm]) .nav-link{color:var(--sgds-color-fixed-light)}}@media screen and (min-width:768px){:host([tone=brand][expand=md]) .nav-link,:host([tone^=gradient][expand=md]) .nav-link{color:var(--sgds-color-fixed-light)}}@media screen and (min-width:1024px){:host([tone=brand][expand=lg]) .nav-link,:host([tone^=gradient][expand=lg]) .nav-link{color:var(--sgds-color-fixed-light)}}@media screen and (min-width:1280px){:host([tone=brand][expand=xl]) .nav-link,:host([tone^=gradient][expand=xl]) .nav-link{color:var(--sgds-color-fixed-light)}}@media screen and (min-width:1440px){:host([tone=brand][expand=xxl]) .nav-link,:host([tone^=gradient][expand=xxl]) .nav-link{color:var(--sgds-color-fixed-light)}}.profile-text{display:flex;flex:1;flex-direction:column;gap:var(--sgds-gap-text-2-xs,2px);text-align:left}.profile-label{font-weight:var(--sgds-font-weight-semibold)}.profile-label,.profile-secondary-text{font-size:var(--sgds-font-size-body-xs);line-height:var(--sgds-line-height-3-xs,16px)}sgds-dropdown{display:block;height:100%}.profile-avatar-mobile{align-items:center;background:none;border:none;border-radius:var(--sgds-border-radius-full);color:inherit;cursor:pointer;display:flex;font:inherit;height:100%;margin:0;padding:0}.profile-avatar-mobile:focus-visible{outline:none}.profile-avatar-mobile:focus-visible ::slotted(*){border-radius:var(--sgds-border-radius-full);outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.profile-mobile-panel{animation:profile-panel-show .2s ease-in-out;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);left:0;padding:var(--sgds-padding-md) 0;position:absolute;top:100%;width:100%;z-index:var(--sgds-z-index-floating)}.profile-mobile-panel[hidden]{display:none}@keyframes profile-panel-show{0%{max-height:0;opacity:0}to{max-height:100dvh;opacity:1}}.profile-mobile-items{display:flex;flex-direction:column;height:100dvh;margin:auto;max-width:var(--sgds-mainnav-max-width,1440px);overflow-y:auto;width:100%}@media screen and (min-width:1024px){.nav-link{padding:var(--sgds-padding-sm) var(--sgds-mainnav-padding-x)}}`;
9
-
10
- exports["default"] = css_248z;
11
- //# sourceMappingURL=nav-profile.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nav-profile.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
@@ -1,7 +0,0 @@
1
- 'use client';
2
- import { css } from 'lit';
3
-
4
- var css_248z = css`:host([expand=always]) .nav-link{border-bottom:var(--sgds-border-width-4) solid transparent;min-height:100%;padding:0 var(--sgds-padding-md)}@media (min-width:512px){:host([expand=sm]) .nav-link{border-bottom:var(--sgds-border-width-4) solid transparent;min-height:100%;padding:0 var(--sgds-padding-md)}}@media (min-width:768px){:host([expand=md]) .nav-link{border-bottom:var(--sgds-border-width-4) solid transparent;min-height:100%;padding:0 var(--sgds-padding-md)}}@media (min-width:1024px){:host(:not([expand])) .nav-link,:host([expand=lg]) .nav-link{border-bottom:var(--sgds-border-width-4) solid transparent;min-height:100%;padding:0 var(--sgds-padding-md)}}@media (min-width:1280px){:host([expand=xl]) .nav-link{border-bottom:var(--sgds-border-width-4) solid transparent;min-height:100%;padding:0 var(--sgds-padding-md)}}@media (min-width:1440px){:host([expand=xxl]) .nav-link{border-bottom:var(--sgds-border-width-4) solid transparent;min-height:100%;padding:0 var(--sgds-padding-md)}}button.nav-link{appearance:none;background:none;border:none;font-family:inherit}.nav-link{align-items:center;box-sizing:border-box;color:var(--sgds-color-default);cursor:pointer;display:flex;font-size:var(--sgds-font-size-label-sm);gap:var(--sgds-gap-xs);line-height:var(--sgds-line-height-2-xs,20px);padding:var(--sgds-padding-sm) var(--sgds-mainnav-mobile-padding-x);text-decoration:none}.nav-link:not(.disabled):hover{color:var(--sgds-primary-color-default)}.nav-link:not(.disabled):focus-visible{color:var(--sgds-primary-color-default);outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.nav-link.disabled{cursor:not-allowed;opacity:var(--sgds-opacity-40)}.nav-link.read-only,.profile-avatar-mobile.read-only{cursor:default;pointer-events:none}:host([tone=brand][expand=always]) .nav-link,:host([tone^=gradient][expand=always]) .nav-link{color:var(--sgds-color-fixed-light)}@media screen and (min-width:512px){:host([tone=brand][expand=sm]) .nav-link,:host([tone^=gradient][expand=sm]) .nav-link{color:var(--sgds-color-fixed-light)}}@media screen and (min-width:768px){:host([tone=brand][expand=md]) .nav-link,:host([tone^=gradient][expand=md]) .nav-link{color:var(--sgds-color-fixed-light)}}@media screen and (min-width:1024px){:host([tone=brand][expand=lg]) .nav-link,:host([tone^=gradient][expand=lg]) .nav-link{color:var(--sgds-color-fixed-light)}}@media screen and (min-width:1280px){:host([tone=brand][expand=xl]) .nav-link,:host([tone^=gradient][expand=xl]) .nav-link{color:var(--sgds-color-fixed-light)}}@media screen and (min-width:1440px){:host([tone=brand][expand=xxl]) .nav-link,:host([tone^=gradient][expand=xxl]) .nav-link{color:var(--sgds-color-fixed-light)}}.profile-text{display:flex;flex:1;flex-direction:column;gap:var(--sgds-gap-text-2-xs,2px);text-align:left}.profile-label{font-weight:var(--sgds-font-weight-semibold)}.profile-label,.profile-secondary-text{font-size:var(--sgds-font-size-body-xs);line-height:var(--sgds-line-height-3-xs,16px)}sgds-dropdown{display:block;height:100%}.profile-avatar-mobile{align-items:center;background:none;border:none;border-radius:var(--sgds-border-radius-full);color:inherit;cursor:pointer;display:flex;font:inherit;height:100%;margin:0;padding:0}.profile-avatar-mobile:focus-visible{outline:none}.profile-avatar-mobile:focus-visible ::slotted(*){border-radius:var(--sgds-border-radius-full);outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.profile-mobile-panel{animation:profile-panel-show .2s ease-in-out;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);left:0;padding:var(--sgds-padding-md) 0;position:absolute;top:100%;width:100%;z-index:var(--sgds-z-index-floating)}.profile-mobile-panel[hidden]{display:none}@keyframes profile-panel-show{0%{max-height:0;opacity:0}to{max-height:100dvh;opacity:1}}.profile-mobile-items{display:flex;flex-direction:column;height:100dvh;margin:auto;max-width:var(--sgds-mainnav-max-width,1440px);overflow-y:auto;width:100%}@media screen and (min-width:1024px){.nav-link{padding:var(--sgds-padding-sm) var(--sgds-mainnav-padding-x)}}`;
5
-
6
- export { css_248z as default };
7
- //# sourceMappingURL=nav-profile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nav-profile.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -1,13 +0,0 @@
1
- 'use client';
2
- 'use strict';
3
-
4
- Object.defineProperty(exports, '__esModule', { value: true });
5
-
6
- var context = require('@lit/context');
7
-
8
- const AppnavBreakpointContext = context.createContext("appnav-context");
9
- const AppnavExpandedContext = context.createContext("appnav-expanded-context");
10
-
11
- exports.AppnavBreakpointContext = AppnavBreakpointContext;
12
- exports.AppnavExpandedContext = AppnavExpandedContext;
13
- //# sourceMappingURL=appnav-context.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"appnav-context.cjs.js","sources":["../../../../src/components/Appnav/appnav-context.ts"],"sourcesContent":["import { createContext } from \"@lit/context\";\n\nexport const AppnavBreakpointContext = createContext<boolean>(\"appnav-context\");\n\nexport const AppnavExpandedContext = createContext<boolean>(\"appnav-expanded-context\");\n"],"names":["createContext"],"mappings":";;;;;;;MAEa,uBAAuB,GAAGA,qBAAa,CAAU,gBAAgB,EAAE;MAEnE,qBAAqB,GAAGA,qBAAa,CAAU,yBAAyB;;;;;"}
@@ -1,8 +0,0 @@
1
- 'use client';
2
- import { createContext } from '@lit/context';
3
-
4
- const AppnavBreakpointContext = createContext("appnav-context");
5
- const AppnavExpandedContext = createContext("appnav-expanded-context");
6
-
7
- export { AppnavBreakpointContext, AppnavExpandedContext };
8
- //# sourceMappingURL=appnav-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"appnav-context.js","sources":["../../../../src/components/Appnav/appnav-context.ts"],"sourcesContent":["import { createContext } from \"@lit/context\";\n\nexport const AppnavBreakpointContext = createContext<boolean>(\"appnav-context\");\n\nexport const AppnavExpandedContext = createContext<boolean>(\"appnav-expanded-context\");\n"],"names":[],"mappings":";;;MAEa,uBAAuB,GAAG,aAAa,CAAU,gBAAgB,EAAE;MAEnE,qBAAqB,GAAG,aAAa,CAAU,yBAAyB;;;;"}
@@ -1,11 +0,0 @@
1
- 'use client';
2
- 'use strict';
3
-
4
- Object.defineProperty(exports, '__esModule', { value: true });
5
-
6
- var lit = require('lit');
7
-
8
- var css_248z = lit.css`:host{display:block}nav{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;min-height:var(--sgds-mainnav-height,72px);padding:0 var(--sgds-mainnav-mobile-padding-x);width:100%}.navbar-brand{align-items:center;color:var(--sgds-color-fixed-light);display:flex;text-decoration:none;white-space:nowrap}.navbar-brand:focus-visible{outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.navbar-nav{align-items:flex-start;display:flex;flex-direction:column;gap:var(--sgds-gap-xs);height:100%;margin-bottom:0;margin-left:auto;margin-top:0}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}nav>.navbar-body slot::slotted(*){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{align-items:center;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{align-items:center;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{align-items:center;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{align-items:center;flex-direction:row}.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{align-items:center;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{align-items:center;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{margin-left:auto}.navbar-end,slot[name=start]{align-items:center;display:flex;gap:var(--sgds-gap-xs)}slot[name=start].slot-empty{display:none}slot[name=profile]{align-self:stretch;display:flex}slot[name=start]::slotted(*){color:var(--sgds-color-fixed-light)}.navbar-end.slot-empty,.slot-desktop-only{display:none}.appnav-menu-item{align-items:center;box-sizing:border-box;cursor:pointer;display:flex;font-size:var(--sgds-font-size-label-sm);line-height:var(--sgds-line-height-2-xs,20px);padding:var(--sgds-padding-sm) var(--sgds-mainnav-mobile-padding-x);text-decoration:none;width:100%}.appnav-menu-item,.appnav-menu-item:hover{color:var(--sgds-color-default)}.appnav-menu-item:focus-visible{color:var(--sgds-primary-color-default);outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}`;
9
-
10
- exports["default"] = css_248z;
11
- //# sourceMappingURL=appnav.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"appnav.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
@@ -1,7 +0,0 @@
1
- 'use client';
2
- import { css } from 'lit';
3
-
4
- var css_248z = css`:host{display:block}nav{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;min-height:var(--sgds-mainnav-height,72px);padding:0 var(--sgds-mainnav-mobile-padding-x);width:100%}.navbar-brand{align-items:center;color:var(--sgds-color-fixed-light);display:flex;text-decoration:none;white-space:nowrap}.navbar-brand:focus-visible{outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}.navbar-nav{align-items:flex-start;display:flex;flex-direction:column;gap:var(--sgds-gap-xs);height:100%;margin-bottom:0;margin-left:auto;margin-top:0}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}nav>.navbar-body slot::slotted(*){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{align-items:center;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{align-items:center;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{align-items:center;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{align-items:center;flex-direction:row}.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{align-items:center;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{align-items:center;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{margin-left:auto}.navbar-end,slot[name=start]{align-items:center;display:flex;gap:var(--sgds-gap-xs)}slot[name=start].slot-empty{display:none}slot[name=profile]{align-self:stretch;display:flex}slot[name=start]::slotted(*){color:var(--sgds-color-fixed-light)}.navbar-end.slot-empty,.slot-desktop-only{display:none}.appnav-menu-item{align-items:center;box-sizing:border-box;cursor:pointer;display:flex;font-size:var(--sgds-font-size-label-sm);line-height:var(--sgds-line-height-2-xs,20px);padding:var(--sgds-padding-sm) var(--sgds-mainnav-mobile-padding-x);text-decoration:none;width:100%}.appnav-menu-item,.appnav-menu-item:hover{color:var(--sgds-color-default)}.appnav-menu-item:focus-visible{color:var(--sgds-primary-color-default);outline:var(--sgds-outline-focus);outline-offset:var(--sgds-outline-offset-focus)}`;
5
-
6
- export { css_248z as default };
7
- //# sourceMappingURL=appnav.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"appnav.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -1,37 +0,0 @@
1
- 'use client';
2
- 'use strict';
3
-
4
- Object.defineProperty(exports, '__esModule', { value: true });
5
-
6
- var tslib = require('tslib');
7
- var context = require('@lit/context');
8
- var decorators_js = require('lit/decorators.js');
9
- var navProfileElement = require('../../base/nav-profile-element.cjs.js');
10
- var appnavContext = require('./appnav-context.cjs.js');
11
-
12
- /**
13
- * @summary `SgdsAppnavProfile` is a profile component for the appnav that shows a full dropdown in desktop and handles its own mobile menu.
14
- * In desktop: renders avatar + label + secondaryText with a dropdown.
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).
17
- * When present, it disables the appnav's default hamburger toggler.
18
- *
19
- * @storyOrder 2
20
- *
21
- * @slot avatar - Avatar element displayed in both desktop (before label) and mobile (as toggler)
22
- * @slot default - Profile menu items (sgds-dropdown-item elements). When empty, the component becomes read-only.
23
- */
24
- class SgdsAppnavProfile extends navProfileElement["default"] {
25
- constructor() {
26
- super(...arguments);
27
- this._breakpointReached = true;
28
- }
29
- }
30
- tslib.__decorate([
31
- context.consume({ context: appnavContext.AppnavBreakpointContext, subscribe: true }),
32
- decorators_js.state()
33
- ], SgdsAppnavProfile.prototype, "_breakpointReached", void 0);
34
-
35
- exports.SgdsAppnavProfile = SgdsAppnavProfile;
36
- exports["default"] = SgdsAppnavProfile;
37
- //# sourceMappingURL=sgds-appnav-profile.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sgds-appnav-profile.cjs.js","sources":["../../../../src/components/Appnav/sgds-appnav-profile.ts"],"sourcesContent":["import { consume } from \"@lit/context\";\nimport { state } from \"lit/decorators.js\";\nimport NavProfileElement from \"../../base/nav-profile-element\";\nimport { AppnavBreakpointContext } from \"./appnav-context\";\n\n/**\n * @summary `SgdsAppnavProfile` is a profile component for the appnav 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 appnav's default hamburger toggler.\n *\n * @storyOrder 2\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 SgdsAppnavProfile extends NavProfileElement {\n @consume({ context: AppnavBreakpointContext, subscribe: true })\n @state()\n protected override _breakpointReached = true;\n}\n\nexport default SgdsAppnavProfile;\n"],"names":["NavProfileElement","__decorate","consume","AppnavBreakpointContext","state"],"mappings":";;;;;;;;;;;AAKA;;;;;;;;;;;AAWG;AACG,MAAO,iBAAkB,SAAQA,4BAAiB,CAAA;AAAxD,IAAA,WAAA,GAAA;;QAGqB,IAAkB,CAAA,kBAAA,GAAG,IAAI,CAAC;KAC9C;AAAA,CAAA;AADoBC,gBAAA,CAAA;IAFlBC,eAAO,CAAC,EAAE,OAAO,EAAEC,qCAAuB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC9D,IAAAC,mBAAK,EAAE;AACqC,CAAA,EAAA,iBAAA,CAAA,SAAA,EAAA,oBAAA,EAAA,KAAA,CAAA,CAAA;;;;;"}