@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.
Files changed (131) hide show
  1. package/base/dropdown-list-element.js +9 -2
  2. package/base/dropdown-list-element.js.map +1 -1
  3. package/base/nav-element.d.ts +64 -0
  4. package/base/nav-element.js +263 -0
  5. package/base/nav-element.js.map +1 -0
  6. package/base/nav-profile-element.d.ts +47 -0
  7. package/base/nav-profile-element.js +191 -0
  8. package/base/nav-profile-element.js.map +1 -0
  9. package/base/nav-profile.js +6 -0
  10. package/base/nav-profile.js.map +1 -0
  11. package/components/Appnav/appnav-context.d.ts +6 -0
  12. package/components/Appnav/appnav-context.js +7 -0
  13. package/components/Appnav/appnav-context.js.map +1 -0
  14. package/components/Appnav/appnav.js +6 -0
  15. package/components/Appnav/appnav.js.map +1 -0
  16. package/components/Appnav/index.d.ts +9 -0
  17. package/components/Appnav/index.js +8 -0
  18. package/components/Appnav/index.js.map +1 -0
  19. package/components/Appnav/index.umd.min.js +2542 -0
  20. package/components/Appnav/index.umd.min.js.map +1 -0
  21. package/components/Appnav/sgds-appnav-profile.d.ts +17 -0
  22. package/components/Appnav/sgds-appnav-profile.js +31 -0
  23. package/components/Appnav/sgds-appnav-profile.js.map +1 -0
  24. package/components/Appnav/sgds-appnav.d.ts +44 -0
  25. package/components/Appnav/sgds-appnav.js +183 -0
  26. package/components/Appnav/sgds-appnav.js.map +1 -0
  27. package/components/Breadcrumb/index.umd.min.js +1 -1
  28. package/components/Breadcrumb/index.umd.min.js.map +1 -1
  29. package/components/ComboBox/index.umd.min.js +248 -248
  30. package/components/ComboBox/index.umd.min.js.map +1 -1
  31. package/components/Dropdown/index.umd.min.js +1 -1
  32. package/components/Dropdown/index.umd.min.js.map +1 -1
  33. package/components/Mainnav/index.umd.min.js +293 -281
  34. package/components/Mainnav/index.umd.min.js.map +1 -1
  35. package/components/Mainnav/mainnav.js +1 -1
  36. package/components/Mainnav/sgds-mainnav-profile.d.ts +5 -31
  37. package/components/Mainnav/sgds-mainnav-profile.js +5 -112
  38. package/components/Mainnav/sgds-mainnav-profile.js.map +1 -1
  39. package/components/Mainnav/sgds-mainnav.d.ts +5 -46
  40. package/components/Mainnav/sgds-mainnav.js +24 -260
  41. package/components/Mainnav/sgds-mainnav.js.map +1 -1
  42. package/components/OverflowMenu/index.umd.min.js +21 -21
  43. package/components/OverflowMenu/index.umd.min.js.map +1 -1
  44. package/components/QuantityToggle/index.umd.min.js +39 -39
  45. package/components/QuantityToggle/index.umd.min.js.map +1 -1
  46. package/components/QuantityToggle/sgds-quantity-toggle.d.ts +1 -2
  47. package/components/QuantityToggle/sgds-quantity-toggle.js +9 -18
  48. package/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
  49. package/components/Select/index.umd.min.js +1 -1
  50. package/components/Select/index.umd.min.js.map +1 -1
  51. package/components/index.d.ts +2 -0
  52. package/components/index.js +2 -0
  53. package/components/index.js.map +1 -1
  54. package/components/index.umd.min.js +592 -543
  55. package/components/index.umd.min.js.map +1 -1
  56. package/css/fouc.css +6 -4
  57. package/custom-elements.json +17733 -15914
  58. package/index.d.ts +1 -0
  59. package/index.js +1 -0
  60. package/index.js.map +1 -1
  61. package/index.umd.min.js +537 -483
  62. package/index.umd.min.js.map +1 -1
  63. package/package.json +1 -1
  64. package/react/appnav/index.cjs.js +45 -0
  65. package/react/appnav/index.cjs.js.map +1 -0
  66. package/react/appnav/index.d.ts +4 -0
  67. package/react/appnav/index.js +21 -0
  68. package/react/appnav/index.js.map +1 -0
  69. package/react/appnav-profile/index.cjs.js +40 -0
  70. package/react/appnav-profile/index.cjs.js.map +1 -0
  71. package/react/appnav-profile/index.d.ts +4 -0
  72. package/react/appnav-profile/index.js +16 -0
  73. package/react/appnav-profile/index.js.map +1 -0
  74. package/react/base/dropdown-list-element.cjs.js +9 -2
  75. package/react/base/dropdown-list-element.cjs.js.map +1 -1
  76. package/react/base/dropdown-list-element.js +9 -2
  77. package/react/base/dropdown-list-element.js.map +1 -1
  78. package/react/base/nav-element.cjs.js +268 -0
  79. package/react/base/nav-element.cjs.js.map +1 -0
  80. package/react/base/nav-element.js +264 -0
  81. package/react/base/nav-element.js.map +1 -0
  82. package/react/base/nav-profile-element.cjs.js +196 -0
  83. package/react/base/nav-profile-element.cjs.js.map +1 -0
  84. package/react/base/nav-profile-element.js +192 -0
  85. package/react/base/nav-profile-element.js.map +1 -0
  86. package/react/base/nav-profile.cjs.js +11 -0
  87. package/react/base/nav-profile.cjs.js.map +1 -0
  88. package/react/base/nav-profile.js +7 -0
  89. package/react/base/nav-profile.js.map +1 -0
  90. package/react/components/Appnav/appnav-context.cjs.js +13 -0
  91. package/react/components/Appnav/appnav-context.cjs.js.map +1 -0
  92. package/react/components/Appnav/appnav-context.js +8 -0
  93. package/react/components/Appnav/appnav-context.js.map +1 -0
  94. package/react/components/Appnav/appnav.cjs.js +11 -0
  95. package/react/components/Appnav/appnav.cjs.js.map +1 -0
  96. package/react/components/Appnav/appnav.js +7 -0
  97. package/react/components/Appnav/appnav.js.map +1 -0
  98. package/react/components/Appnav/sgds-appnav-profile.cjs.js +37 -0
  99. package/react/components/Appnav/sgds-appnav-profile.cjs.js.map +1 -0
  100. package/react/components/Appnav/sgds-appnav-profile.js +32 -0
  101. package/react/components/Appnav/sgds-appnav-profile.js.map +1 -0
  102. package/react/components/Appnav/sgds-appnav.cjs.js +189 -0
  103. package/react/components/Appnav/sgds-appnav.cjs.js.map +1 -0
  104. package/react/components/Appnav/sgds-appnav.js +184 -0
  105. package/react/components/Appnav/sgds-appnav.js.map +1 -0
  106. package/react/components/Mainnav/mainnav.cjs.js +1 -1
  107. package/react/components/Mainnav/mainnav.js +1 -1
  108. package/react/components/Mainnav/sgds-mainnav-profile.cjs.js +4 -111
  109. package/react/components/Mainnav/sgds-mainnav-profile.cjs.js.map +1 -1
  110. package/react/components/Mainnav/sgds-mainnav-profile.js +5 -112
  111. package/react/components/Mainnav/sgds-mainnav-profile.js.map +1 -1
  112. package/react/components/Mainnav/sgds-mainnav.cjs.js +22 -258
  113. package/react/components/Mainnav/sgds-mainnav.cjs.js.map +1 -1
  114. package/react/components/Mainnav/sgds-mainnav.js +24 -260
  115. package/react/components/Mainnav/sgds-mainnav.js.map +1 -1
  116. package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js +9 -18
  117. package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js.map +1 -1
  118. package/react/components/QuantityToggle/sgds-quantity-toggle.js +9 -18
  119. package/react/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
  120. package/react/index.cjs.js +130 -126
  121. package/react/index.cjs.js.map +1 -1
  122. package/react/index.d.ts +6 -4
  123. package/react/index.js +6 -4
  124. package/react/index.js.map +1 -1
  125. package/types/react.d.ts +197 -158
  126. package/components/Mainnav/mainnav-profile.js +0 -6
  127. package/components/Mainnav/mainnav-profile.js.map +0 -1
  128. package/react/components/Mainnav/mainnav-profile.cjs.js +0 -11
  129. package/react/components/Mainnav/mainnav-profile.cjs.js.map +0 -1
  130. package/react/components/Mainnav/mainnav-profile.js +0 -7
  131. package/react/components/Mainnav/mainnav-profile.js.map +0 -1
@@ -1,30 +1,14 @@
1
1
  'use client';
2
2
  import { __decorate } from 'tslib';
3
3
  import { provide } from '@lit/context';
4
- import { html, nothing } from 'lit';
5
- import { state, query, property, queryAssignedElements } from 'lit/decorators.js';
4
+ import { html } from 'lit';
5
+ import { state, property, queryAssignedElements } from 'lit/decorators.js';
6
6
  import { classMap } from 'lit/directives/class-map.js';
7
- import SgdsElement from '../../base/sgds-element.js';
8
- import { stopAnimations, animateTo, shimKeyframesHeightAuto } from '../../utils/animate.js';
9
- import { setDefaultAnimation, getAnimation } from '../../utils/animation-registry.js';
10
- import { SM_BREAKPOINT, MD_BREAKPOINT, LG_BREAKPOINT, XL_BREAKPOINT, XXL_BREAKPOINT } from '../../utils/breakpoints.js';
11
- import { waitForEvent } from '../../utils/event.js';
12
- import genId from '../../utils/generateId.js';
13
- import { watch } from '../../utils/watch.js';
14
- import { SgdsIconButton } from '../IconButton/sgds-icon-button.js';
7
+ import NavElement from '../../base/nav-element.js';
8
+ import { HasSlotController } from '../../utils/slot.js';
15
9
  import { MainnavBreakpointContext, MainnavExpandedContext } from './mainnav-context.js';
16
10
  import css_248z from './mainnav.js';
17
- import { HasSlotController } from '../../utils/slot.js';
18
11
 
19
- const SIZES = {
20
- sm: SM_BREAKPOINT,
21
- md: MD_BREAKPOINT,
22
- lg: LG_BREAKPOINT,
23
- xl: XL_BREAKPOINT,
24
- xxl: XXL_BREAKPOINT,
25
- never: Infinity,
26
- always: -1
27
- };
28
12
  /**
29
13
  * @summary This component is the primary means that your users will use to navigate through your portal. It includes horizontal navigation and branding to identify your site.
30
14
  *
@@ -41,29 +25,16 @@ const SIZES = {
41
25
  * @slot non-collapsible - Elements in this slot will not be collapsed
42
26
  *
43
27
  */
44
- class SgdsMainnav extends SgdsElement {
28
+ class SgdsMainnav extends NavElement {
45
29
  constructor() {
46
30
  super(...arguments);
47
31
  this._breakpointReached = false;
48
- /** Indicates if mobile menu is open or closed */
49
- this.expanded = false;
50
- /** Denotes the transition state of mobile mainnav menu opening */
51
- this.expanding = false;
52
- /** @internal Whether sgds-mainnav-profile is slotted in the profile slot */
53
- this._hasProfileComponent = false;
32
+ this._expanded = false;
54
33
  /** Used only for SSR to indicate the presence of the `non-collapsible` slot. */
55
34
  this.hasNonCollapsibleSlot = false;
56
- /** The href link for brand logo */
57
- this.brandHref = "";
58
- this.tone = "default";
59
- this.collapseId = genId("mainnav", "collapse");
60
- /** The breakpoint, below which, the Navbar will collapse. When always the Navbar will always be expanded regardless of screen size. When never, the Navbar will always be collapsed */
61
- this.expand = "lg";
62
35
  /** When true, removes max-width constraint to allow content to stretch full screen width */
63
36
  this.fluid = false;
64
- this.breakpointReached = false;
65
37
  this.hasSlotController = new HasSlotController(this, "non-collapsible");
66
- this._handleMobileNavBound = this._handleMobileNav.bind(this);
67
38
  }
68
39
  /** @internal */
69
40
  get defaultSlotItems() {
@@ -73,145 +44,22 @@ class SgdsMainnav extends SgdsElement {
73
44
  get endSlotItems() {
74
45
  return [...(this.endNodes || [])].filter((node) => typeof node.tagName !== "undefined");
75
46
  }
76
- connectedCallback() {
77
- super.connectedCallback();
78
- this._handleResize();
79
- window.addEventListener("click", (event) => this._handleClickOutOfElement(event, this.body));
80
- window.addEventListener("resize", this._handleResize.bind(this));
81
- }
82
- disconnectedCallback() {
83
- super.disconnectedCallback();
84
- window.removeEventListener("click", (event) => this._handleClickOutOfElement(event, this.body));
85
- window.removeEventListener("resize", this._handleResize.bind(this));
86
- }
87
- firstUpdated(changedProperties) {
88
- super.firstUpdated(changedProperties);
89
- if (this.breakpointReached && this.body) {
90
- this.expanded = false;
91
- this.body.hidden = true;
92
- this._handleMobileNav();
93
- this._breakpointReached = true;
94
- }
95
- }
96
47
  updated() {
97
48
  if (!this.hasNonCollapsibleSlot)
98
49
  this.hasNonCollapsibleSlot = this.hasSlotController.test("non-collapsible");
50
+ // Sync expanded state to context
51
+ this._expanded = this.expanded;
99
52
  }
100
- _handleClickOutOfElement(e, self) {
101
- if (!e.composedPath().includes(self) && !(this.header && e.composedPath().includes(this.header))) {
102
- this.hide();
103
- }
104
- }
105
- _handleSummaryClick() {
106
- if (this.expanded) {
107
- this.hide();
108
- }
109
- else {
110
- document.body.style.overflow = "hidden";
111
- this.show();
112
- }
113
- }
114
- _handleResize() {
115
- const newBreakpointReachedValue = window.innerWidth < SIZES[this.expand];
116
- if (newBreakpointReachedValue !== this.breakpointReached) {
117
- this.requestUpdate();
118
- }
119
- else {
120
- this.body ? (this.body.hidden = true) : null;
121
- // this.expanded = false;
122
- this.expanding = false;
123
- }
124
- if (newBreakpointReachedValue) {
125
- this._handleMobileNav();
126
- if (!this._breakpointReached) {
127
- this._breakpointReached = true;
128
- window.addEventListener("scrollend", this._handleMobileNavBound);
129
- }
130
- }
131
- else {
132
- this._handleDesktopNav();
133
- this._breakpointReached = false;
134
- window.removeEventListener("scrollend", this._handleMobileNavBound);
135
- }
136
- }
137
- async _handleMobileNav() {
138
- if (!this.nav)
139
- return;
140
- this.nav.appendChild(this.body);
141
- await customElements.whenDefined("sgds-masthead");
142
- const { bottom } = this.nav.getBoundingClientRect();
143
- const navBodyPaddingY = parseFloat(getComputedStyle(this.body).paddingTop) + parseFloat(getComputedStyle(this.body).paddingBottom);
144
- this.navScroll.style.maxHeight = `calc(100dvh - ${bottom}px - ${navBodyPaddingY}px)`;
145
- }
146
- _handleDesktopNav() {
147
- var _a;
148
- (_a = this.navbar) === null || _a === void 0 ? void 0 : _a.insertBefore(this.body, this.navbarEnd);
149
- }
150
- async _animateToShow() {
151
- const sgdsShow = this.emit("sgds-show", { cancelable: true });
152
- if (sgdsShow.defaultPrevented) {
153
- this.expanding = false;
154
- this.expanded = false;
155
- return;
156
- }
157
- await stopAnimations(this.body);
158
- this.body.hidden = false;
159
- const { keyframes, options } = getAnimation(this, "mainnav.show");
160
- await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
161
- this.body.style.height = "auto";
162
- this.emit("sgds-after-show");
163
- }
164
- async _animateToHide() {
165
- const slHide = this.emit("sgds-hide", { cancelable: true });
166
- if (slHide.defaultPrevented) {
167
- this.expanding = false;
168
- this.expanded = true;
169
- return;
170
- }
171
- await stopAnimations(this.body);
172
- const { keyframes, options } = getAnimation(this, "mainnav.hide");
173
- await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
174
- this.body.hidden = true;
175
- this.body.style.height = "auto";
176
- this.emit("sgds-after-hide");
177
- }
178
- /** @internal */
179
- async handleOpenChange() {
180
- var _a;
181
- if (this.expanding) {
182
- // Show
183
- await this._animateToShow();
184
- this.expanded = true;
185
- }
186
- else {
187
- (_a = this.header) === null || _a === void 0 ? void 0 : _a.focus();
188
- // Hide
189
- await this._animateToHide();
190
- this.expanded = false;
191
- }
192
- }
193
- /** Shows the menu. For when mainnav is in the collapsed form */
194
- async show() {
195
- if (this.expanded) {
196
- return;
197
- }
198
- this.expanding = true;
199
- return waitForEvent(this, "sgds-after-show");
53
+ _onBreakpointReached(reached) {
54
+ this._breakpointReached = reached;
200
55
  }
201
- /** Hide the menu. For when mainnav is in the collapsed form */
202
- async hide() {
203
- if (!this.expanded) {
204
- return;
205
- }
206
- this.expanding = false;
207
- document.body.style.removeProperty("overflow");
208
- return waitForEvent(this, "sgds-after-hide");
56
+ _isBreakpointReached() {
57
+ return this._breakpointReached;
209
58
  }
210
59
  _handleDefaultSlotChange(e) {
211
60
  const childElements = e.target.assignedElements({ flatten: true });
212
61
  childElements.forEach(el => {
213
62
  el.setAttribute("expand", this.expand);
214
- el.setAttribute("tone", this.tone);
215
63
  });
216
64
  if (this._hasProfileComponent && childElements.length > 0) {
217
65
  console.warn("[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. " +
@@ -219,30 +67,27 @@ class SgdsMainnav extends SgdsElement {
219
67
  "Use a sidebar for navigation in operational apps.");
220
68
  }
221
69
  }
222
- // assigning name attribute to elements added in slot="end", to use wildcard css selector to assign styles only to *-mainnav-item
223
70
  _handleSlotChange(e) {
224
71
  const childElements = e.target.assignedElements({ flatten: true });
225
72
  childElements.forEach(e => {
226
73
  e.setAttribute("name", e.tagName.toLowerCase());
227
74
  e.setAttribute("expand", this.expand);
228
- e.setAttribute("tone", this.tone);
229
75
  });
230
76
  }
231
77
  _handleProfileSlotChange(e) {
232
78
  const childElements = e.target.assignedElements({ flatten: true });
233
- this._hasProfileComponent = childElements.some(el => el.tagName.toLowerCase() === "sgds-mainnav-profile");
234
79
  childElements.forEach(el => {
235
80
  el.setAttribute("expand", this.expand);
236
- el.setAttribute("tone", this.tone);
237
81
  });
238
- if (this._hasProfileComponent && this.defaultSlotItems.length > 0) {
239
- console.warn("[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. " +
240
- "The profile component disables the mainnav hamburger menu, so nav items will have no mobile menu. " +
241
- "Use a sidebar for navigation in operational apps.");
242
- }
243
82
  }
244
83
  render() {
245
- this.breakpointReached = window.innerWidth < SIZES[this.expand];
84
+ this.breakpointReached =
85
+ window.innerWidth <
86
+ (this.expand === "always"
87
+ ? -1
88
+ : this.expand === "never"
89
+ ? Infinity
90
+ : { sm: 512, md: 768, lg: 1024, xl: 1280, xxl: 1440 }[this.expand]);
246
91
  return html `
247
92
  <nav>
248
93
  <div class="navbar ${this._expandClass()}">
@@ -261,45 +106,16 @@ class SgdsMainnav extends SgdsElement {
261
106
  </div>
262
107
  </div>
263
108
  <div class="navbar-end">
264
- <slot
265
- name="non-collapsible"
266
- class=${classMap({ "non-collapsible-empty": !this.hasNonCollapsibleSlot })}
267
- ></slot>
109
+ <slot name="non-collapsible" class=${classMap({ "slot-empty": !this.hasNonCollapsibleSlot })}></slot>
268
110
  <slot name="profile" @slotchange=${this._handleProfileSlotChange}></slot>
269
- ${!(this._hasProfileComponent && this.breakpointReached)
270
- ? html `<sgds-icon-button
271
- name=${this.expanded ? "cross" : "menu"}
272
- variant="ghost"
273
- size="sm"
274
- tone=${this.tone !== "default" ? "fixed-light" : nothing}
275
- class="navbar-toggler"
276
- @click=${this._handleSummaryClick}
277
- aria-controls="${this.collapseId}"
278
- aria-expanded="${this.expanded}"
279
- .ariaLabel=${"Toggle navigation"}
280
- ></sgds-icon-button>`
281
- : nothing}
111
+ ${this._renderToggler()}
282
112
  </div>
283
113
  </div>
284
114
  </nav>
285
115
  `;
286
116
  }
287
- _expandClass() {
288
- switch (this.expand) {
289
- case "always":
290
- return "navbar-expand";
291
- case "never":
292
- break;
293
- default:
294
- return `navbar-expand-${this.expand}`;
295
- }
296
- }
297
117
  }
298
- SgdsMainnav.styles = [...SgdsElement.styles, css_248z];
299
- /** @internal */
300
- SgdsMainnav.dependencies = {
301
- "sgds-icon-button": SgdsIconButton
302
- };
118
+ SgdsMainnav.styles = [...NavElement.styles, css_248z];
303
119
  __decorate([
304
120
  provide({ context: MainnavBreakpointContext }),
305
121
  state()
@@ -307,72 +123,20 @@ __decorate([
307
123
  __decorate([
308
124
  provide({ context: MainnavExpandedContext }),
309
125
  state()
310
- ], SgdsMainnav.prototype, "expanded", void 0);
311
- __decorate([
312
- state()
313
- ], SgdsMainnav.prototype, "expanding", void 0);
314
- __decorate([
315
- query("nav")
316
- ], SgdsMainnav.prototype, "nav", void 0);
317
- __decorate([
318
- query(".navbar")
319
- ], SgdsMainnav.prototype, "navbar", void 0);
320
- __decorate([
321
- query(".navbar-toggler")
322
- ], SgdsMainnav.prototype, "header", void 0);
323
- __decorate([
324
- query(".navbar-body")
325
- ], SgdsMainnav.prototype, "body", void 0);
326
- __decorate([
327
- query(".navbar-nav-scroll")
328
- ], SgdsMainnav.prototype, "navScroll", void 0);
329
- __decorate([
330
- query(".navbar-end")
331
- ], SgdsMainnav.prototype, "navbarEnd", void 0);
332
- __decorate([
333
- state()
334
- ], SgdsMainnav.prototype, "_hasProfileComponent", void 0);
126
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
127
+ ], SgdsMainnav.prototype, "_expanded", void 0);
335
128
  __decorate([
336
129
  property({ type: Boolean })
337
130
  ], SgdsMainnav.prototype, "hasNonCollapsibleSlot", void 0);
338
- __decorate([
339
- property({ type: String })
340
- ], SgdsMainnav.prototype, "brandHref", void 0);
341
- __decorate([
342
- property({ type: String, reflect: true })
343
- ], SgdsMainnav.prototype, "tone", void 0);
344
- __decorate([
345
- property({ type: String })
346
- ], SgdsMainnav.prototype, "expand", void 0);
347
131
  __decorate([
348
132
  property({ type: Boolean, reflect: true })
349
133
  ], SgdsMainnav.prototype, "fluid", void 0);
350
- __decorate([
351
- state()
352
- ], SgdsMainnav.prototype, "breakpointReached", void 0);
353
134
  __decorate([
354
135
  queryAssignedElements()
355
136
  ], SgdsMainnav.prototype, "defaultNodes", void 0);
356
137
  __decorate([
357
138
  queryAssignedElements({ slot: "end" })
358
139
  ], SgdsMainnav.prototype, "endNodes", void 0);
359
- __decorate([
360
- watch("expanding", { waitUntilFirstUpdate: true })
361
- ], SgdsMainnav.prototype, "handleOpenChange", null);
362
- setDefaultAnimation("mainnav.show", {
363
- keyframes: [
364
- { height: "0", opacity: "0" },
365
- { height: "auto", opacity: "1" }
366
- ],
367
- options: { duration: 200, easing: "ease-in-out" }
368
- });
369
- setDefaultAnimation("mainnav.hide", {
370
- keyframes: [
371
- { height: "auto", opacity: "1" },
372
- { height: "0", opacity: "0" }
373
- ],
374
- options: { duration: 200, easing: "ease-in-out" }
375
- });
376
140
 
377
141
  export { SgdsMainnav, SgdsMainnav as default };
378
142
  //# sourceMappingURL=sgds-mainnav.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sgds-mainnav.js","sources":["../../../../src/components/Mainnav/sgds-mainnav.ts"],"sourcesContent":["import { provide } from \"@lit/context\";\nimport { html, nothing, PropertyValueMap } from \"lit\";\nimport { property, query, queryAssignedElements, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport SgdsElement from \"../../base/sgds-element\";\nimport { animateTo, shimKeyframesHeightAuto, stopAnimations } from \"../../utils/animate\";\nimport { getAnimation, setDefaultAnimation } from \"../../utils/animation-registry\";\nimport { LG_BREAKPOINT, MD_BREAKPOINT, SM_BREAKPOINT, XL_BREAKPOINT, XXL_BREAKPOINT } from \"../../utils/breakpoints\";\nimport { waitForEvent } from \"../../utils/event\";\nimport genId from \"../../utils/generateId\";\nimport { watch } from \"../../utils/watch\";\nimport SgdsIconButton from \"../IconButton/sgds-icon-button\";\nimport { MainnavBreakpointContext, MainnavExpandedContext } from \"./mainnav-context\";\nimport mainnavStyle from \"./mainnav.css\";\nimport SgdsMainnavDropdown from \"./sgds-mainnav-dropdown\";\nimport SgdsMainnavItem from \"./sgds-mainnav-item\";\nimport { HasSlotController } from \"../../utils/slot\";\nexport type MainnavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\nexport type MainnavTone = \"default\" | \"brand\" | \"gradient-1\" | \"gradient-2\" | \"gradient-3\" | \"gradient-4\";\n\nconst SIZES = {\n sm: SM_BREAKPOINT,\n md: MD_BREAKPOINT,\n lg: LG_BREAKPOINT,\n xl: XL_BREAKPOINT,\n xxl: XXL_BREAKPOINT,\n never: Infinity,\n always: -1\n};\n\n/**\n * @summary This component is the primary means that your users will use to navigate through your portal. It includes horizontal navigation and branding to identify your site.\n *\n * @event sgds-show - Emitted on show. Only for collapsed menu.\n * @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.\n * @event sgds-hide - Emitted on hide. Only for collapsed menu.\n * @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.\n *\n * @slot default - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.\n * @slot start - Elements in this slot will be positioned to the left of the brand.\n * @slot end - Elements in this slot will be positioned to the right end of .navbar-nav. Elements in this slot will also be included in collapsed menu.\n * @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here\n * @slot profile - Profile slot positioned at the far right in desktop. In mobile, moves into the collapsed menu as the first item.\n * @slot non-collapsible - Elements in this slot will not be collapsed\n *\n */\nexport class SgdsMainnav extends SgdsElement {\n static styles = [...SgdsElement.styles, mainnavStyle];\n /** @internal */\n static dependencies = {\n \"sgds-icon-button\": SgdsIconButton\n };\n\n @provide({ context: MainnavBreakpointContext })\n @state()\n private _breakpointReached = false;\n /** Indicates if mobile menu is open or closed */\n @provide({ context: MainnavExpandedContext })\n @state()\n private expanded = false;\n /** Denotes the transition state of mobile mainnav menu opening */\n @state()\n private expanding = false;\n\n @query(\"nav\") private nav: HTMLElement;\n @query(\".navbar\") private navbar: HTMLElement;\n @query(\".navbar-toggler\") private header: HTMLElement;\n @query(\".navbar-body\") private body: HTMLElement;\n @query(\".navbar-nav-scroll\") private navScroll: HTMLElement;\n @query(\".navbar-end\") private navbarEnd: HTMLElement;\n\n /** @internal Whether sgds-mainnav-profile is slotted in the profile slot */\n @state()\n private _hasProfileComponent = false;\n\n /** Used only for SSR to indicate the presence of the `non-collapsible` slot. */\n @property({ type: Boolean }) hasNonCollapsibleSlot = false;\n\n /** The href link for brand logo */\n @property({ type: String })\n brandHref = \"\";\n\n @property({ type: String, reflect: true })\n tone: MainnavTone = \"default\";\n\n private collapseId = genId(\"mainnav\", \"collapse\");\n\n /** The breakpoint, below which, the Navbar will collapse. When always the Navbar will always be expanded regardless of screen size. When never, the Navbar will always be collapsed */\n @property({ type: String })\n expand: MainnavExpandSize = \"lg\";\n\n /** When true, removes max-width constraint to allow content to stretch full screen width */\n @property({ type: Boolean, reflect: true })\n fluid = false;\n\n @state()\n private breakpointReached = false;\n\n @queryAssignedElements() private defaultNodes!: SgdsMainnavItem[] | SgdsMainnavDropdown[];\n\n @queryAssignedElements({ slot: \"end\" }) private endNodes!: SgdsMainnavItem[] | SgdsMainnavDropdown[];\n\n /** @internal */\n get defaultSlotItems(): SgdsMainnavItem[] | SgdsMainnavDropdown[] {\n return [...(this.defaultNodes || [])].filter((node: HTMLElement) => typeof node.tagName !== \"undefined\") as\n | SgdsMainnavItem[]\n | SgdsMainnavDropdown[];\n }\n\n /** @internal */\n get endSlotItems(): SgdsMainnavItem[] | SgdsMainnavDropdown[] {\n return [...(this.endNodes || [])].filter((node: HTMLElement) => typeof node.tagName !== \"undefined\") as\n | SgdsMainnavItem[]\n | SgdsMainnavDropdown[];\n }\n\n private readonly hasSlotController = new HasSlotController(this, \"non-collapsible\");\n\n connectedCallback() {\n super.connectedCallback();\n\n this._handleResize();\n\n window.addEventListener(\"click\", (event: MouseEvent) => this._handleClickOutOfElement(event, this.body));\n window.addEventListener(\"resize\", this._handleResize.bind(this));\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n\n window.removeEventListener(\"click\", (event: MouseEvent) => this._handleClickOutOfElement(event, this.body));\n window.removeEventListener(\"resize\", this._handleResize.bind(this));\n }\n\n firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n\n if (this.breakpointReached && this.body) {\n this.expanded = false;\n this.body.hidden = true;\n this._handleMobileNav();\n this._breakpointReached = true;\n }\n }\n\n updated() {\n if (!this.hasNonCollapsibleSlot) this.hasNonCollapsibleSlot = this.hasSlotController.test(\"non-collapsible\");\n }\n\n private _handleClickOutOfElement(e: MouseEvent, self: HTMLElement) {\n if (!e.composedPath().includes(self) && !(this.header && e.composedPath().includes(this.header))) {\n this.hide();\n }\n }\n\n private _handleSummaryClick() {\n if (this.expanded) {\n this.hide();\n } else {\n document.body.style.overflow = \"hidden\";\n this.show();\n }\n }\n\n private _handleResize() {\n const newBreakpointReachedValue = window.innerWidth < SIZES[this.expand];\n if (newBreakpointReachedValue !== this.breakpointReached) {\n this.requestUpdate();\n } else {\n this.body ? (this.body.hidden = true) : null;\n // this.expanded = false;\n this.expanding = false;\n }\n\n if (newBreakpointReachedValue) {\n this._handleMobileNav();\n\n if (!this._breakpointReached) {\n this._breakpointReached = true;\n\n window.addEventListener(\"scrollend\", this._handleMobileNavBound);\n }\n } else {\n this._handleDesktopNav();\n this._breakpointReached = false;\n window.removeEventListener(\"scrollend\", this._handleMobileNavBound);\n }\n }\n\n private _handleMobileNavBound = this._handleMobileNav.bind(this);\n\n private async _handleMobileNav() {\n if (!this.nav) return;\n\n this.nav.appendChild(this.body);\n await customElements.whenDefined(\"sgds-masthead\");\n\n const { bottom } = this.nav.getBoundingClientRect();\n const navBodyPaddingY =\n parseFloat(getComputedStyle(this.body).paddingTop) + parseFloat(getComputedStyle(this.body).paddingBottom);\n\n this.navScroll.style.maxHeight = `calc(100dvh - ${bottom}px - ${navBodyPaddingY}px)`;\n }\n\n private _handleDesktopNav() {\n this.navbar?.insertBefore(this.body, this.navbarEnd);\n }\n\n private async _animateToShow() {\n const sgdsShow = this.emit(\"sgds-show\", { cancelable: true });\n if (sgdsShow.defaultPrevented) {\n this.expanding = false;\n this.expanded = false;\n return;\n }\n\n await stopAnimations(this.body);\n this.body.hidden = false;\n\n const { keyframes, options } = getAnimation(this, \"mainnav.show\");\n await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);\n this.body.style.height = \"auto\";\n\n this.emit(\"sgds-after-show\");\n }\n\n private async _animateToHide() {\n const slHide = this.emit(\"sgds-hide\", { cancelable: true });\n if (slHide.defaultPrevented) {\n this.expanding = false;\n this.expanded = true;\n return;\n }\n\n await stopAnimations(this.body);\n\n const { keyframes, options } = getAnimation(this, \"mainnav.hide\");\n await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);\n this.body.hidden = true;\n this.body.style.height = \"auto\";\n this.emit(\"sgds-after-hide\");\n }\n /** @internal */\n @watch(\"expanding\", { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n if (this.expanding) {\n // Show\n await this._animateToShow();\n this.expanded = true;\n } else {\n this.header?.focus();\n // Hide\n await this._animateToHide();\n this.expanded = false;\n }\n }\n\n /** Shows the menu. For when mainnav is in the collapsed form */\n public async show() {\n if (this.expanded) {\n return;\n }\n\n this.expanding = true;\n return waitForEvent(this, \"sgds-after-show\");\n }\n\n /** Hide the menu. For when mainnav is in the collapsed form */\n public async hide() {\n if (!this.expanded) {\n return;\n }\n\n this.expanding = false;\n document.body.style.removeProperty(\"overflow\");\n\n return waitForEvent(this, \"sgds-after-hide\");\n }\n\n private _handleDefaultSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n el.setAttribute(\"tone\", this.tone);\n });\n\n if (this._hasProfileComponent && childElements.length > 0) {\n console.warn(\n \"[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. \" +\n \"The profile component disables the mainnav hamburger menu, so nav items will have no mobile menu. \" +\n \"Use a sidebar for navigation in operational apps.\"\n );\n }\n }\n\n // assigning name attribute to elements added in slot=\"end\", to use wildcard css selector to assign styles only to *-mainnav-item\n private _handleSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n childElements.forEach(e => {\n e.setAttribute(\"name\", e.tagName.toLowerCase());\n e.setAttribute(\"expand\", this.expand);\n e.setAttribute(\"tone\", this.tone);\n });\n }\n\n private _handleProfileSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n this._hasProfileComponent = childElements.some(el => el.tagName.toLowerCase() === \"sgds-mainnav-profile\");\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n el.setAttribute(\"tone\", this.tone);\n });\n\n if (this._hasProfileComponent && this.defaultSlotItems.length > 0) {\n console.warn(\n \"[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. \" +\n \"The profile component disables the mainnav hamburger menu, so nav items will have no mobile menu. \" +\n \"Use a sidebar for navigation in operational apps.\"\n );\n }\n }\n\n render() {\n this.breakpointReached = window.innerWidth < SIZES[this.expand];\n\n return html`\n <nav>\n <div class=\"navbar ${this._expandClass()}\">\n <slot name=\"start\"></slot>\n <a class=\"navbar-brand\" href=${this.brandHref} aria-label=\"brand-link\">\n <slot name=\"brand\"></slot>\n </a>\n <div class=\"navbar-body navbar-collapse\" id=${this.collapseId}>\n <div class=\"navbar-nav navbar-nav-scroll\">\n <slot @slotchange=${this._handleDefaultSlotChange}></slot>\n <slot\n name=\"end\"\n class=${classMap({ \"slot-end\": !this.breakpointReached })}\n @slotchange=${this._handleSlotChange}\n ></slot>\n </div>\n </div>\n <div class=\"navbar-end\">\n <slot\n name=\"non-collapsible\"\n class=${classMap({ \"non-collapsible-empty\": !this.hasNonCollapsibleSlot })}\n ></slot>\n <slot name=\"profile\" @slotchange=${this._handleProfileSlotChange}></slot>\n ${!(this._hasProfileComponent && this.breakpointReached)\n ? html`<sgds-icon-button\n name=${this.expanded ? \"cross\" : \"menu\"}\n variant=\"ghost\"\n size=\"sm\"\n tone=${this.tone !== \"default\" ? \"fixed-light\" : nothing}\n class=\"navbar-toggler\"\n @click=${this._handleSummaryClick}\n aria-controls=\"${this.collapseId}\"\n aria-expanded=\"${this.expanded}\"\n .ariaLabel=${\"Toggle navigation\"}\n ></sgds-icon-button>`\n : nothing}\n </div>\n </div>\n </nav>\n `;\n }\n _expandClass() {\n switch (this.expand) {\n case \"always\":\n return \"navbar-expand\";\n case \"never\":\n break;\n default:\n return `navbar-expand-${this.expand}`;\n }\n }\n}\nsetDefaultAnimation(\"mainnav.show\", {\n keyframes: [\n { height: \"0\", opacity: \"0\" },\n { height: \"auto\", opacity: \"1\" }\n ],\n options: { duration: 200, easing: \"ease-in-out\" }\n});\n\nsetDefaultAnimation(\"mainnav.hide\", {\n keyframes: [\n { height: \"auto\", opacity: \"1\" },\n { height: \"0\", opacity: \"0\" }\n ],\n options: { duration: 200, easing: \"ease-in-out\" }\n});\n\nexport default SgdsMainnav;\n"],"names":["mainnavStyle"],"mappings":"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"}
1
+ {"version":3,"file":"sgds-mainnav.js","sources":["../../../../src/components/Mainnav/sgds-mainnav.ts"],"sourcesContent":["import { provide } from \"@lit/context\";\nimport { html } from \"lit\";\nimport { property, queryAssignedElements, 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 { MainnavBreakpointContext, MainnavExpandedContext } from \"./mainnav-context\";\nimport mainnavStyle from \"./mainnav.css\";\nimport SgdsMainnavDropdown from \"./sgds-mainnav-dropdown\";\nimport SgdsMainnavItem from \"./sgds-mainnav-item\";\n\nexport type MainnavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\n\n/**\n * @summary This component is the primary means that your users will use to navigate through your portal. It includes horizontal navigation and branding to identify your site.\n *\n * @event sgds-show - Emitted on show. Only for collapsed menu.\n * @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.\n * @event sgds-hide - Emitted on hide. Only for collapsed menu.\n * @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.\n *\n * @slot default - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.\n * @slot start - Elements in this slot will be positioned to the left of the brand.\n * @slot end - Elements in this slot will be positioned to the right end of .navbar-nav. Elements in this slot will also be included in collapsed menu.\n * @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here\n * @slot profile - Profile slot positioned at the far right in desktop. In mobile, moves into the collapsed menu as the first item.\n * @slot non-collapsible - Elements in this slot will not be collapsed\n *\n */\nexport class SgdsMainnav extends NavElement {\n static styles = [...NavElement.styles, mainnavStyle];\n\n @provide({ context: MainnavBreakpointContext })\n @state()\n private _breakpointReached = false;\n\n @provide({ context: MainnavExpandedContext })\n @state()\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private _expanded = false;\n\n /** Used only for SSR to indicate the presence of the `non-collapsible` slot. */\n @property({ type: Boolean }) hasNonCollapsibleSlot = false;\n\n /** When true, removes max-width constraint to allow content to stretch full screen width */\n @property({ type: Boolean, reflect: true })\n fluid = false;\n\n @queryAssignedElements() private defaultNodes!: SgdsMainnavItem[] | SgdsMainnavDropdown[];\n\n @queryAssignedElements({ slot: \"end\" }) private endNodes!: SgdsMainnavItem[] | SgdsMainnavDropdown[];\n\n /** @internal */\n get defaultSlotItems(): SgdsMainnavItem[] | SgdsMainnavDropdown[] {\n return [...(this.defaultNodes || [])].filter((node: HTMLElement) => typeof node.tagName !== \"undefined\") as\n | SgdsMainnavItem[]\n | SgdsMainnavDropdown[];\n }\n\n /** @internal */\n get endSlotItems(): SgdsMainnavItem[] | SgdsMainnavDropdown[] {\n return [...(this.endNodes || [])].filter((node: HTMLElement) => typeof node.tagName !== \"undefined\") as\n | SgdsMainnavItem[]\n | SgdsMainnavDropdown[];\n }\n\n private readonly hasSlotController = new HasSlotController(this, \"non-collapsible\");\n\n updated() {\n if (!this.hasNonCollapsibleSlot) this.hasNonCollapsibleSlot = this.hasSlotController.test(\"non-collapsible\");\n // Sync expanded state to context\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 _handleDefaultSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n });\n\n if (this._hasProfileComponent && childElements.length > 0) {\n console.warn(\n \"[sgds-mainnav] Using <sgds-mainnav-item> alongside <sgds-mainnav-profile> is not recommended. \" +\n \"The profile component disables the mainnav hamburger menu, so nav items will have no mobile menu. \" +\n \"Use a sidebar for navigation in operational apps.\"\n );\n }\n }\n\n private _handleSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n childElements.forEach(e => {\n e.setAttribute(\"name\", e.tagName.toLowerCase());\n e.setAttribute(\"expand\", this.expand);\n });\n }\n\n private _handleProfileSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n childElements.forEach(el => {\n el.setAttribute(\"expand\", this.expand);\n });\n }\n\n 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\"></slot>\n <a class=\"navbar-brand\" href=${this.brandHref} aria-label=\"brand-link\">\n <slot name=\"brand\"></slot>\n </a>\n <div class=\"navbar-body navbar-collapse\" id=${this.collapseId}>\n <div class=\"navbar-nav navbar-nav-scroll\">\n <slot @slotchange=${this._handleDefaultSlotChange}></slot>\n <slot\n name=\"end\"\n class=${classMap({ \"slot-end\": !this.breakpointReached })}\n @slotchange=${this._handleSlotChange}\n ></slot>\n </div>\n </div>\n <div class=\"navbar-end\">\n <slot name=\"non-collapsible\" class=${classMap({ \"slot-empty\": !this.hasNonCollapsibleSlot })}></slot>\n <slot name=\"profile\" @slotchange=${this._handleProfileSlotChange}></slot>\n ${this._renderToggler()}\n </div>\n </div>\n </nav>\n `;\n }\n}\n\nexport default SgdsMainnav;\n"],"names":["mainnavStyle"],"mappings":"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"}
@@ -69,7 +69,7 @@ class SgdsQuantityToggle extends validatorMixin.SgdsFormValidatorMixin(formContr
69
69
  get validationMessage() {
70
70
  return this._mixinGetValidationMessage();
71
71
  }
72
- async _handleChange(e) {
72
+ async _handleValueChange(e, eventName) {
73
73
  e.stopPropagation();
74
74
  const sgdsInput = await this._sgdsInput;
75
75
  if (parseInt(sgdsInput.value) < this.step || sgdsInput.value === "") {
@@ -77,25 +77,16 @@ class SgdsQuantityToggle extends validatorMixin.SgdsFormValidatorMixin(formContr
77
77
  }
78
78
  this.value = parseInt(sgdsInput.value);
79
79
  this._mixinSetFormValue();
80
- this.emit("sgds-change");
80
+ this.emit(eventName);
81
81
  if (this._mixinShouldSkipSgdsValidation())
82
82
  return;
83
- this._mixinValidate(sgdsInput.input);
84
- this.invalid = !this._mixinReportValidity();
85
- }
86
- async _handleInputChange(e) {
87
- e.stopPropagation();
88
- const sgdsInput = await this._sgdsInput;
89
- if (parseInt(sgdsInput.value) < this.step || sgdsInput.value === "") {
90
- sgdsInput.value = "0";
83
+ if (eventName === "sgds-input") {
84
+ this.invalid = false;
91
85
  }
92
- this.value = parseInt(sgdsInput.value);
93
- this._mixinSetFormValue();
94
- this.emit("sgds-input");
95
- if (this._mixinShouldSkipSgdsValidation())
96
- return;
97
- this.invalid = false;
98
86
  this._mixinValidate(sgdsInput.input);
87
+ if (eventName === "sgds-change") {
88
+ this.invalid = !this._mixinReportValidity();
89
+ }
99
90
  }
100
91
  async _mixinResetFormControl() {
101
92
  const sgdsInput = await this._sgdsInput;
@@ -230,8 +221,8 @@ class SgdsQuantityToggle extends validatorMixin.SgdsFormValidatorMixin(formContr
230
221
  min=${ifDefined_js.ifDefined(this.min)}
231
222
  max=${ifDefined_js.ifDefined(this.max)}
232
223
  .value=${live_js.live(this.value)}
233
- @sgds-change=${this._handleChange}
234
- @sgds-input=${this._handleInputChange}
224
+ @sgds-change=${(e) => this._handleValueChange(e, "sgds-change")}
225
+ @sgds-input=${(e) => this._handleValueChange(e, "sgds-input")}
235
226
  @sgds-invalid=${this._handleInvalid}
236
227
  @sgds-valid=${this._handleValid}
237
228
  @keydown=${this._handleKeyDown}
@@ -1 +1 @@
1
- {"version":3,"file":"sgds-quantity-toggle.cjs.js","sources":["../../../../src/components/QuantityToggle/sgds-quantity-toggle.ts"],"sourcesContent":["import { property, query, queryAsync } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { live } from \"lit/directives/live.js\";\nimport { html } from \"lit/static-html.js\";\nimport FormControlElement from \"../../base/form-control-element\";\nimport formPlaceholderStyles from \"../../styles/form-placeholder.css\";\nimport svgStyles from \"../../styles/svg.css\";\nimport { defaultValue } from \"../../utils/defaultvalue\";\nimport { SgdsFormControl } from \"../../utils/formSubmitController\";\nimport { SgdsFormValidatorMixin } from \"../../utils/validatorMixin\";\nimport SgdsIconButton from \"../IconButton/sgds-icon-button\";\nimport SgdsInput from \"../Input/sgds-input\";\nimport quantityToggleStyle from \"./quantity-toggle.css\";\nimport formControlStyle from \"../../styles/form-text-control.css\";\n/**\n * @summary The quantity toggle component is used to increase or decrease an incremental venue, best used when the user needs to enter or adjust the quantity of a selected item.\n *\n * @slot invalidIcon - The slot for invalid icon\n *\n * @event sgds-change - Emitted when an alteration to the control's value is committed by the user.\n * @event sgds-input - Emitted when the control receives input and its value changes.\n * @event sgds-invalid - Emitted when the control's invalid state is set to true.\n * @event sgds-valid - Emitted when the control's invalid state is set to false.\n *\n */\nexport class SgdsQuantityToggle extends SgdsFormValidatorMixin(FormControlElement) implements SgdsFormControl {\n static styles = [\n ...FormControlElement.styles,\n formPlaceholderStyles,\n svgStyles,\n formControlStyle,\n quantityToggleStyle\n ];\n\n /** @internal */\n static dependencies = {\n \"sgds-input\": SgdsInput,\n \"sgds-icon-button\": SgdsIconButton\n };\n /** @internal */\n @query(\"sgds-icon-button[ariaLabel^='increase by']\") private plusBtn: HTMLButtonElement;\n /** @internal */\n @query(\"sgds-icon-button[ariaLabel^='decrease by']\") private minusBtn: HTMLButtonElement;\n\n /** The input's value. Set to 0 by default */\n @property({ type: Number, reflect: true }) value = 0;\n\n /** Controls the incremental / decremental value of the input */\n @property({ type: Number }) step = 1;\n\n /** The input's minimum value. Only applies number input types. */\n @property({ type: Number }) min: number;\n\n /** The input's maximum value. Only applies number input types. */\n @property({ type: Number }) max: number;\n /** Allows invalidFeedback, invalid and valid styles to be visible with the input */\n @property({ type: String, reflect: true }) hasFeedback: \"style\" | \"text\" | \"both\";\n\n /**Feedback text for error state when validated */\n @property({ type: String, reflect: true }) invalidFeedback: string;\n /** Disables native and sgds validation for the quantity toggle. */\n @property({ type: Boolean, reflect: true }) noValidate = false;\n /** Sets the quantity toggle as readonly */\n @property({ type: Boolean, reflect: true }) readonly = false;\n\n /** Gets or sets the default value used to reset this element. The initial value corresponds to the one originally specified in the HTML that created this element. */\n @defaultValue()\n defaultValue = 0;\n\n @queryAsync(\"sgds-input\") private _sgdsInput: Promise<SgdsInput>;\n\n /**\n * Checks for validity. Under the hood, HTMLFormElement's reportValidity method calls this method to check for component's validity state\n * Note that the native error popup is prevented for SGDS form components by default. Instead the validation message shows up in the feedback container of SgdsInput\n */\n public reportValidity(): boolean {\n return this._mixinReportValidity();\n }\n /**\n * Checks for validity without any native error popup message\n */\n public checkValidity(): boolean {\n return this._mixinCheckValidity();\n }\n\n /**\n * Returns the ValidityState object\n */\n public get validity(): ValidityState {\n return this._mixinGetValidity();\n }\n /**\n * Returns the validation message based on the ValidityState\n */\n public get validationMessage() {\n return this._mixinGetValidationMessage();\n }\n\n private async _handleChange(e: Event) {\n e.stopPropagation();\n const sgdsInput = await this._sgdsInput;\n if (parseInt(sgdsInput.value) < this.step || sgdsInput.value === \"\") {\n sgdsInput.value = \"0\";\n }\n this.value = parseInt(sgdsInput.value);\n this._mixinSetFormValue();\n this.emit(\"sgds-change\");\n if (this._mixinShouldSkipSgdsValidation()) return;\n this._mixinValidate(sgdsInput.input);\n this.invalid = !this._mixinReportValidity();\n }\n private async _handleInputChange(e: Event) {\n e.stopPropagation();\n const sgdsInput = await this._sgdsInput;\n if (parseInt(sgdsInput.value) < this.step || sgdsInput.value === \"\") {\n sgdsInput.value = \"0\";\n }\n this.value = parseInt(sgdsInput.value);\n this._mixinSetFormValue();\n this.emit(\"sgds-input\");\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.invalid = false;\n this._mixinValidate(sgdsInput.input);\n }\n\n private async _mixinResetFormControl() {\n const sgdsInput = await this._sgdsInput;\n this.value = this.defaultValue;\n sgdsInput.input.value = this.value.toString();\n this._mixinResetValidity(sgdsInput.input);\n }\n\n private _handleKeyDown(event: KeyboardEvent) {\n const allowedKeys = [\n \"Backspace\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n ...Array.from(Array(10).keys()).map(key => key.toString()),\n \"Tab\"\n ];\n\n // Allow keydown event only if the pressed key is in the allowedKeys array\n if (!allowedKeys.includes(event.key)) {\n event.preventDefault();\n }\n }\n\n private _handleInvalid() {\n this.invalid = true;\n }\n private _handleValid() {\n this.invalid = false;\n }\n\n /** Simulates a click on the plus button */\n public plus() {\n this.plusBtn.click();\n }\n\n /** Simulates a click on the minus button */\n public minus() {\n this.minusBtn.click();\n }\n\n private async _onPlus(event: MouseEvent) {\n const sgdsInput = await this._sgdsInput;\n event.preventDefault();\n event.stopPropagation();\n this.value = parseInt(sgdsInput.value) + parseInt(sgdsInput.step.toString());\n this._validateOnClick(sgdsInput.input);\n this.emit(\"sgds-change\");\n }\n private async _onMinus(event: MouseEvent) {\n const sgdsInput = await this._sgdsInput;\n event.preventDefault();\n event.stopPropagation();\n if (this.value < this.step) {\n this.value = 0;\n } else {\n this.value = parseInt(sgdsInput.value) - parseInt(sgdsInput.step.toString());\n }\n this._validateOnClick(sgdsInput.input);\n this.emit(\"sgds-change\");\n }\n\n /**\n * Validates the input on button clicks of the toggle.\n * Input is validated every time the button is click to update the invalid state\n * to indiciate the validity of quantity toggle\n * @param input native HTMLInputElement\n */\n private async _validateOnClick(input: HTMLInputElement) {\n const sgdsInput = await this._sgdsInput;\n await sgdsInput.updateComplete;\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this._mixinValidate(input);\n this.invalid = !this._mixinReportValidity();\n }\n\n protected _renderFeedback() {\n const wantFeedbackText = this.hasFeedback === \"both\" || this.hasFeedback === \"text\";\n return this.invalid && wantFeedbackText\n ? html` <div class=\"invalid-feedback-container\">\n <slot name=\"invalidIcon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M17.5 10C17.5 14.1421 14.1421 17.5 10 17.5C5.85786 17.5 2.5 14.1421 2.5 10C2.5 5.85786 5.85786 2.5 10 2.5C14.1421 2.5 17.5 5.85786 17.5 10ZM10 6.25C9.49805 6.25 9.10584 6.68339 9.15578 7.18285L9.48461 10.4711C9.51109 10.7359 9.7339 10.9375 10 10.9375C10.2661 10.9375 10.4889 10.7359 10.5154 10.4711L10.8442 7.18285C10.8942 6.68339 10.5019 6.25 10 6.25ZM10.0014 11.875C9.48368 11.875 9.06394 12.2947 9.06394 12.8125C9.06394 13.3303 9.48368 13.75 10.0014 13.75C10.5192 13.75 10.9389 13.3303 10.9389 12.8125C10.9389 12.2947 10.5192 11.875 10.0014 11.875Z\"\n fill=\"currentColor\"\n />\n </svg>\n </slot>\n <div id=\"${this._controlId}-invalid\" class=\"invalid-feedback\">\n ${this.invalidFeedback ? this.invalidFeedback : this.validationMessage}\n </div>\n </div>`\n : html`${this._renderHintText()}`;\n }\n\n protected _renderLabel() {\n const labelTemplate = html`\n <label\n for=${this._controlId}\n id=${this._labelId}\n class=${classMap({\n \"form-label\": true,\n disabled: this.disabled\n })}\n >${this.label}</label\n >\n `;\n return this.label && labelTemplate;\n }\n\n protected _renderHintText() {\n const hintTextTemplate = html` <div id=\"${this._controlId}Help\" class=\"form-text\">${this.hintText}</div> `;\n return this.hintText && hintTextTemplate;\n }\n\n render() {\n return html`\n <div class=\"form-control-container m-width-160\">\n ${this._renderLabel()}\n <div class=\"input-group\">\n <sgds-icon-button\n class=\"minus-btn\"\n variant=\"outline\"\n tone=\"neutral\"\n size=\"md\"\n ariaLabel=${`decrease by ${this.step}`}\n ?disabled=${this.disabled ||\n (this.min !== undefined ? this.value <= this.min : this.value < 1) ||\n this.readonly}\n @click=${this._onMinus}\n name=\"dash\"\n >\n </sgds-icon-button>\n <sgds-input\n type=\"number\"\n class=\"quantity-toggle\"\n name=${ifDefined(this.name)}\n step=${ifDefined(this.step)}\n min=${ifDefined(this.min)}\n max=${ifDefined(this.max)}\n .value=${live(this.value)}\n @sgds-change=${this._handleChange}\n @sgds-input=${this._handleInputChange}\n @sgds-invalid=${this._handleInvalid}\n @sgds-valid=${this._handleValid}\n @keydown=${this._handleKeyDown}\n ?disabled=${this.disabled}\n ?noValidate=${this._mixinShouldSkipSgdsValidation()}\n id=${this._controlId}\n ?invalid=${this.invalid}\n hasFeedback=${ifDefined(this.hasFeedback !== \"text\" ? \"style\" : undefined)}\n ></sgds-input>\n <sgds-icon-button\n class=\"plus-btn\"\n variant=\"outline\"\n tone=\"neutral\"\n size=\"md\"\n ariaLabel=${`increase by ${this.step}`}\n @click=${this._onPlus}\n ?disabled=${this.disabled ||\n (this.max !== undefined && this.max && this.value >= this.max) ||\n this.readonly}\n name=\"plus\"\n >\n </sgds-icon-button>\n </div>\n <div id=\"${this._controlId}-announcer\" aria-live=\"assertive\" class=\"visually-hidden\">${this.value}</div>\n ${this._renderFeedback()}\n </div>\n `;\n }\n}\n\nexport default SgdsQuantityToggle;\n"],"names":["SgdsFormValidatorMixin","FormControlElement","html","classMap","ifDefined","live","formPlaceholderStyles","svgStyles","formControlStyle","quantityToggleStyle","SgdsInput","SgdsIconButton","__decorate","query","property","defaultValue","queryAsync"],"mappings":"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"}
1
+ {"version":3,"file":"sgds-quantity-toggle.cjs.js","sources":["../../../../src/components/QuantityToggle/sgds-quantity-toggle.ts"],"sourcesContent":["import { property, query, queryAsync } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { live } from \"lit/directives/live.js\";\nimport { html } from \"lit/static-html.js\";\nimport FormControlElement from \"../../base/form-control-element\";\nimport formPlaceholderStyles from \"../../styles/form-placeholder.css\";\nimport svgStyles from \"../../styles/svg.css\";\nimport { defaultValue } from \"../../utils/defaultvalue\";\nimport { SgdsFormControl } from \"../../utils/formSubmitController\";\nimport { SgdsFormValidatorMixin } from \"../../utils/validatorMixin\";\nimport SgdsIconButton from \"../IconButton/sgds-icon-button\";\nimport SgdsInput from \"../Input/sgds-input\";\nimport quantityToggleStyle from \"./quantity-toggle.css\";\nimport formControlStyle from \"../../styles/form-text-control.css\";\n/**\n * @summary The quantity toggle component is used to increase or decrease an incremental venue, best used when the user needs to enter or adjust the quantity of a selected item.\n *\n * @slot invalidIcon - The slot for invalid icon\n *\n * @event sgds-change - Emitted when an alteration to the control's value is committed by the user.\n * @event sgds-input - Emitted when the control receives input and its value changes.\n * @event sgds-invalid - Emitted when the control's invalid state is set to true.\n * @event sgds-valid - Emitted when the control's invalid state is set to false.\n *\n */\nexport class SgdsQuantityToggle extends SgdsFormValidatorMixin(FormControlElement) implements SgdsFormControl {\n static styles = [\n ...FormControlElement.styles,\n formPlaceholderStyles,\n svgStyles,\n formControlStyle,\n quantityToggleStyle\n ];\n\n /** @internal */\n static dependencies = {\n \"sgds-input\": SgdsInput,\n \"sgds-icon-button\": SgdsIconButton\n };\n /** @internal */\n @query(\"sgds-icon-button[ariaLabel^='increase by']\") private plusBtn: HTMLButtonElement;\n /** @internal */\n @query(\"sgds-icon-button[ariaLabel^='decrease by']\") private minusBtn: HTMLButtonElement;\n\n /** The input's value. Set to 0 by default */\n @property({ type: Number, reflect: true }) value = 0;\n\n /** Controls the incremental / decremental value of the input */\n @property({ type: Number }) step = 1;\n\n /** The input's minimum value. Only applies number input types. */\n @property({ type: Number }) min: number;\n\n /** The input's maximum value. Only applies number input types. */\n @property({ type: Number }) max: number;\n /** Allows invalidFeedback, invalid and valid styles to be visible with the input */\n @property({ type: String, reflect: true }) hasFeedback: \"style\" | \"text\" | \"both\";\n\n /**Feedback text for error state when validated */\n @property({ type: String, reflect: true }) invalidFeedback: string;\n /** Disables native and sgds validation for the quantity toggle. */\n @property({ type: Boolean, reflect: true }) noValidate = false;\n /** Sets the quantity toggle as readonly */\n @property({ type: Boolean, reflect: true }) readonly = false;\n\n /** Gets or sets the default value used to reset this element. The initial value corresponds to the one originally specified in the HTML that created this element. */\n @defaultValue()\n defaultValue = 0;\n\n @queryAsync(\"sgds-input\") private _sgdsInput: Promise<SgdsInput>;\n\n /**\n * Checks for validity. Under the hood, HTMLFormElement's reportValidity method calls this method to check for component's validity state\n * Note that the native error popup is prevented for SGDS form components by default. Instead the validation message shows up in the feedback container of SgdsInput\n */\n public reportValidity(): boolean {\n return this._mixinReportValidity();\n }\n /**\n * Checks for validity without any native error popup message\n */\n public checkValidity(): boolean {\n return this._mixinCheckValidity();\n }\n\n /**\n * Returns the ValidityState object\n */\n public get validity(): ValidityState {\n return this._mixinGetValidity();\n }\n /**\n * Returns the validation message based on the ValidityState\n */\n public get validationMessage() {\n return this._mixinGetValidationMessage();\n }\n\n private async _handleValueChange(e: Event, eventName: \"sgds-change\" | \"sgds-input\") {\n e.stopPropagation();\n const sgdsInput = await this._sgdsInput;\n if (parseInt(sgdsInput.value) < this.step || sgdsInput.value === \"\") {\n sgdsInput.value = \"0\";\n }\n this.value = parseInt(sgdsInput.value);\n this._mixinSetFormValue();\n this.emit(eventName);\n if (this._mixinShouldSkipSgdsValidation()) return;\n if (eventName === \"sgds-input\") {\n this.invalid = false;\n }\n this._mixinValidate(sgdsInput.input);\n if (eventName === \"sgds-change\") {\n this.invalid = !this._mixinReportValidity();\n }\n }\n\n private async _mixinResetFormControl() {\n const sgdsInput = await this._sgdsInput;\n this.value = this.defaultValue;\n sgdsInput.input.value = this.value.toString();\n this._mixinResetValidity(sgdsInput.input);\n }\n\n private _handleKeyDown(event: KeyboardEvent) {\n const allowedKeys = [\n \"Backspace\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n ...Array.from(Array(10).keys()).map(key => key.toString()),\n \"Tab\"\n ];\n\n // Allow keydown event only if the pressed key is in the allowedKeys array\n if (!allowedKeys.includes(event.key)) {\n event.preventDefault();\n }\n }\n\n private _handleInvalid() {\n this.invalid = true;\n }\n private _handleValid() {\n this.invalid = false;\n }\n\n /** Simulates a click on the plus button */\n public plus() {\n this.plusBtn.click();\n }\n\n /** Simulates a click on the minus button */\n public minus() {\n this.minusBtn.click();\n }\n\n private async _onPlus(event: MouseEvent) {\n const sgdsInput = await this._sgdsInput;\n event.preventDefault();\n event.stopPropagation();\n this.value = parseInt(sgdsInput.value) + parseInt(sgdsInput.step.toString());\n this._validateOnClick(sgdsInput.input);\n this.emit(\"sgds-change\");\n }\n private async _onMinus(event: MouseEvent) {\n const sgdsInput = await this._sgdsInput;\n event.preventDefault();\n event.stopPropagation();\n if (this.value < this.step) {\n this.value = 0;\n } else {\n this.value = parseInt(sgdsInput.value) - parseInt(sgdsInput.step.toString());\n }\n this._validateOnClick(sgdsInput.input);\n this.emit(\"sgds-change\");\n }\n\n /**\n * Validates the input on button clicks of the toggle.\n * Input is validated every time the button is click to update the invalid state\n * to indiciate the validity of quantity toggle\n * @param input native HTMLInputElement\n */\n private async _validateOnClick(input: HTMLInputElement) {\n const sgdsInput = await this._sgdsInput;\n await sgdsInput.updateComplete;\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this._mixinValidate(input);\n this.invalid = !this._mixinReportValidity();\n }\n\n protected _renderFeedback() {\n const wantFeedbackText = this.hasFeedback === \"both\" || this.hasFeedback === \"text\";\n return this.invalid && wantFeedbackText\n ? html` <div class=\"invalid-feedback-container\">\n <slot name=\"invalidIcon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M17.5 10C17.5 14.1421 14.1421 17.5 10 17.5C5.85786 17.5 2.5 14.1421 2.5 10C2.5 5.85786 5.85786 2.5 10 2.5C14.1421 2.5 17.5 5.85786 17.5 10ZM10 6.25C9.49805 6.25 9.10584 6.68339 9.15578 7.18285L9.48461 10.4711C9.51109 10.7359 9.7339 10.9375 10 10.9375C10.2661 10.9375 10.4889 10.7359 10.5154 10.4711L10.8442 7.18285C10.8942 6.68339 10.5019 6.25 10 6.25ZM10.0014 11.875C9.48368 11.875 9.06394 12.2947 9.06394 12.8125C9.06394 13.3303 9.48368 13.75 10.0014 13.75C10.5192 13.75 10.9389 13.3303 10.9389 12.8125C10.9389 12.2947 10.5192 11.875 10.0014 11.875Z\"\n fill=\"currentColor\"\n />\n </svg>\n </slot>\n <div id=\"${this._controlId}-invalid\" class=\"invalid-feedback\">\n ${this.invalidFeedback ? this.invalidFeedback : this.validationMessage}\n </div>\n </div>`\n : html`${this._renderHintText()}`;\n }\n\n protected _renderLabel() {\n const labelTemplate = html`\n <label\n for=${this._controlId}\n id=${this._labelId}\n class=${classMap({\n \"form-label\": true,\n disabled: this.disabled\n })}\n >${this.label}</label\n >\n `;\n return this.label && labelTemplate;\n }\n\n protected _renderHintText() {\n const hintTextTemplate = html` <div id=\"${this._controlId}Help\" class=\"form-text\">${this.hintText}</div> `;\n return this.hintText && hintTextTemplate;\n }\n\n render() {\n return html`\n <div class=\"form-control-container m-width-160\">\n ${this._renderLabel()}\n <div class=\"input-group\">\n <sgds-icon-button\n class=\"minus-btn\"\n variant=\"outline\"\n tone=\"neutral\"\n size=\"md\"\n ariaLabel=${`decrease by ${this.step}`}\n ?disabled=${this.disabled ||\n (this.min !== undefined ? this.value <= this.min : this.value < 1) ||\n this.readonly}\n @click=${this._onMinus}\n name=\"dash\"\n >\n </sgds-icon-button>\n <sgds-input\n type=\"number\"\n class=\"quantity-toggle\"\n name=${ifDefined(this.name)}\n step=${ifDefined(this.step)}\n min=${ifDefined(this.min)}\n max=${ifDefined(this.max)}\n .value=${live(this.value)}\n @sgds-change=${(e: Event) => this._handleValueChange(e, \"sgds-change\")}\n @sgds-input=${(e: Event) => this._handleValueChange(e, \"sgds-input\")}\n @sgds-invalid=${this._handleInvalid}\n @sgds-valid=${this._handleValid}\n @keydown=${this._handleKeyDown}\n ?disabled=${this.disabled}\n ?noValidate=${this._mixinShouldSkipSgdsValidation()}\n id=${this._controlId}\n ?invalid=${this.invalid}\n hasFeedback=${ifDefined(this.hasFeedback !== \"text\" ? \"style\" : undefined)}\n ></sgds-input>\n <sgds-icon-button\n class=\"plus-btn\"\n variant=\"outline\"\n tone=\"neutral\"\n size=\"md\"\n ariaLabel=${`increase by ${this.step}`}\n @click=${this._onPlus}\n ?disabled=${this.disabled ||\n (this.max !== undefined && this.max && this.value >= this.max) ||\n this.readonly}\n name=\"plus\"\n >\n </sgds-icon-button>\n </div>\n <div id=\"${this._controlId}-announcer\" aria-live=\"assertive\" class=\"visually-hidden\">${this.value}</div>\n ${this._renderFeedback()}\n </div>\n `;\n }\n}\n\nexport default SgdsQuantityToggle;\n"],"names":["SgdsFormValidatorMixin","FormControlElement","html","classMap","ifDefined","live","formPlaceholderStyles","svgStyles","formControlStyle","quantityToggleStyle","SgdsInput","SgdsIconButton","__decorate","query","property","defaultValue","queryAsync"],"mappings":"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"}