@govtechsg/sgds-web-component 1.1.0 → 1.2.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 (123) hide show
  1. package/Masthead/index.js +1 -1
  2. package/base/sgds-element.cjs2.js +1 -1
  3. package/base/sgds-element2.js +1 -1
  4. package/components/Accordion/index.umd.js +3 -3
  5. package/components/Accordion/index.umd.js.map +1 -1
  6. package/components/Accordion/sgds-accordion.cjs.js +2 -2
  7. package/components/Accordion/sgds-accordion.cjs.js.map +1 -1
  8. package/components/Accordion/sgds-accordion.js +2 -2
  9. package/components/Accordion/sgds-accordion.js.map +1 -1
  10. package/components/ActionCard/index.umd.js +1 -1
  11. package/components/Alert/index.umd.js +1 -1
  12. package/components/Badge/index.umd.js +1 -1
  13. package/components/Breadcrumb/index.umd.js +1 -1
  14. package/components/Button/index.umd.js +1 -1
  15. package/components/Card/index.umd.js +1 -1
  16. package/components/Checkbox/index.umd.js +1 -1
  17. package/components/ComboBox/index.umd.js +10 -5
  18. package/components/ComboBox/index.umd.js.map +1 -1
  19. package/components/Datepicker/datepicker-calendar.cjs.js +43 -23
  20. package/components/Datepicker/datepicker-calendar.cjs.js.map +1 -1
  21. package/components/Datepicker/datepicker-calendar.cjs2.js +1 -1
  22. package/components/Datepicker/datepicker-calendar.d.ts +0 -1
  23. package/components/Datepicker/datepicker-calendar.js +43 -23
  24. package/components/Datepicker/datepicker-calendar.js.map +1 -1
  25. package/components/Datepicker/datepicker-calendar2.js +1 -1
  26. package/components/Datepicker/datepicker-header.cjs.js +44 -9
  27. package/components/Datepicker/datepicker-header.cjs.js.map +1 -1
  28. package/components/Datepicker/datepicker-header.cjs2.js +1 -1
  29. package/components/Datepicker/datepicker-header.d.ts +5 -1
  30. package/components/Datepicker/datepicker-header.js +44 -9
  31. package/components/Datepicker/datepicker-header.js.map +1 -1
  32. package/components/Datepicker/datepicker-header2.js +1 -1
  33. package/components/Datepicker/datepicker-input.cjs.js +4 -0
  34. package/components/Datepicker/datepicker-input.cjs.js.map +1 -1
  35. package/components/Datepicker/datepicker-input.d.ts +1 -0
  36. package/components/Datepicker/datepicker-input.js +4 -0
  37. package/components/Datepicker/datepicker-input.js.map +1 -1
  38. package/components/Datepicker/index.umd.js +252 -166
  39. package/components/Datepicker/index.umd.js.map +1 -1
  40. package/components/Datepicker/sgds-datepicker.cjs.js +25 -2
  41. package/components/Datepicker/sgds-datepicker.cjs.js.map +1 -1
  42. package/components/Datepicker/sgds-datepicker.d.ts +7 -1
  43. package/components/Datepicker/sgds-datepicker.js +25 -2
  44. package/components/Datepicker/sgds-datepicker.js.map +1 -1
  45. package/components/Datepicker/types.d.ts +0 -3
  46. package/components/Drawer/index.umd.js +1 -1
  47. package/components/Dropdown/index.umd.js +1 -1
  48. package/components/FileUpload/index.umd.js +2 -1
  49. package/components/FileUpload/index.umd.js.map +1 -1
  50. package/components/FileUpload/sgds-file-upload.cjs.js +1 -0
  51. package/components/FileUpload/sgds-file-upload.cjs.js.map +1 -1
  52. package/components/FileUpload/sgds-file-upload.d.ts +1 -0
  53. package/components/FileUpload/sgds-file-upload.js +1 -0
  54. package/components/FileUpload/sgds-file-upload.js.map +1 -1
  55. package/components/Footer/index.umd.js +1 -1
  56. package/components/Input/index.umd.js +10 -5
  57. package/components/Input/index.umd.js.map +1 -1
  58. package/components/Input/sgds-input.cjs.js +9 -4
  59. package/components/Input/sgds-input.cjs.js.map +1 -1
  60. package/components/Input/sgds-input.d.ts +1 -0
  61. package/components/Input/sgds-input.js +9 -4
  62. package/components/Input/sgds-input.js.map +1 -1
  63. package/components/Mainnav/index.umd.js +5989 -6128
  64. package/components/Mainnav/index.umd.js.map +1 -1
  65. package/components/Mainnav/sgds-mainnav.cjs.js +102 -29
  66. package/components/Mainnav/sgds-mainnav.cjs.js.map +1 -1
  67. package/components/Mainnav/sgds-mainnav.d.ts +16 -4
  68. package/components/Mainnav/sgds-mainnav.js +103 -26
  69. package/components/Mainnav/sgds-mainnav.js.map +1 -1
  70. package/components/Masthead/index.umd.js +1 -1
  71. package/components/Modal/index.umd.js +1 -1
  72. package/components/Pagination/index.umd.js +231 -41
  73. package/components/Pagination/index.umd.js.map +1 -1
  74. package/components/Pagination/sgds-pagination.cjs.js +94 -39
  75. package/components/Pagination/sgds-pagination.cjs.js.map +1 -1
  76. package/components/Pagination/sgds-pagination.cjs2.js +1 -1
  77. package/components/Pagination/sgds-pagination.d.ts +20 -13
  78. package/components/Pagination/sgds-pagination.js +95 -40
  79. package/components/Pagination/sgds-pagination.js.map +1 -1
  80. package/components/Pagination/sgds-pagination2.js +1 -1
  81. package/components/Progress/index.umd.js +1 -1
  82. package/components/QuantityToggle/index.umd.js +26 -8
  83. package/components/QuantityToggle/index.umd.js.map +1 -1
  84. package/components/QuantityToggle/sgds-quantity-toggle.cjs.js +25 -7
  85. package/components/QuantityToggle/sgds-quantity-toggle.cjs.js.map +1 -1
  86. package/components/QuantityToggle/sgds-quantity-toggle.d.ts +1 -0
  87. package/components/QuantityToggle/sgds-quantity-toggle.js +25 -7
  88. package/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
  89. package/components/Radio/index.umd.js +1 -1
  90. package/components/Sidenav/index.umd.js +505 -1648
  91. package/components/Sidenav/index.umd.js.map +1 -1
  92. package/components/Sidenav/sgds-sidenav-item.cjs.js +122 -45
  93. package/components/Sidenav/sgds-sidenav-item.cjs.js.map +1 -1
  94. package/components/Sidenav/sgds-sidenav-item.d.ts +19 -8
  95. package/components/Sidenav/sgds-sidenav-item.js +123 -42
  96. package/components/Sidenav/sgds-sidenav-item.js.map +1 -1
  97. package/components/Sidenav/sgds-sidenav.cjs.js +38 -12
  98. package/components/Sidenav/sgds-sidenav.cjs.js.map +1 -1
  99. package/components/Sidenav/sgds-sidenav.cjs2.js +1 -1
  100. package/components/Sidenav/sgds-sidenav.d.ts +9 -0
  101. package/components/Sidenav/sgds-sidenav.js +39 -13
  102. package/components/Sidenav/sgds-sidenav.js.map +1 -1
  103. package/components/Sidenav/sgds-sidenav2.js +1 -1
  104. package/components/Spinner/index.umd.js +1 -1
  105. package/components/Stepper/index.umd.js +1 -1
  106. package/components/Tab/index.umd.js +1 -1
  107. package/components/Table/index.umd.js +1 -1
  108. package/components/Textarea/index.umd.js +1 -1
  109. package/components/Toast/index.umd.js +1 -1
  110. package/components/Tooltip/index.umd.js +1 -1
  111. package/components/index.umd.js +534 -539
  112. package/components/index.umd.js.map +1 -1
  113. package/index.umd.js +534 -539
  114. package/index.umd.js.map +1 -1
  115. package/package.json +2 -2
  116. package/react/mainnav/index.cjs.js +6 -1
  117. package/react/mainnav/index.cjs.js.map +1 -1
  118. package/react/mainnav/index.js +6 -1
  119. package/react/mainnav/index.js.map +1 -1
  120. package/react/sidenav-item/index.cjs.js +5 -1
  121. package/react/sidenav-item/index.cjs.js.map +1 -1
  122. package/react/sidenav-item/index.js +5 -1
  123. package/react/sidenav-item/index.js.map +1 -1
@@ -3,20 +3,18 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var tslib = require('tslib');
6
- var Collapse = require('bootstrap/js/src/collapse');
7
6
  var lit = require('lit');
8
7
  var decorators_js = require('lit/decorators.js');
9
8
  var classMap_js = require('lit/directives/class-map.js');
10
- var ref_js = require('lit/directives/ref.js');
11
9
  var sgdsElement = require('../../base/sgds-element.cjs.js');
10
+ var animate = require('../../utils/animate.cjs.js');
11
+ var animationRegistry = require('../../utils/animation-registry.cjs.js');
12
12
  var breakpoints = require('../../utils/breakpoints.cjs.js');
13
+ var event = require('../../utils/event.cjs.js');
13
14
  var generateId = require('../../utils/generateId.cjs.js');
15
+ var watch = require('../../utils/watch.cjs.js');
14
16
  var sgdsMainnav = require('./sgds-mainnav.cjs2.js');
15
17
 
16
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
17
-
18
- var Collapse__default = /*#__PURE__*/_interopDefaultLegacy(Collapse);
19
-
20
18
  const SIZES = {
21
19
  sm: breakpoints.SM_BREAKPOINT,
22
20
  md: breakpoints.MD_BREAKPOINT,
@@ -29,6 +27,11 @@ const SIZES = {
29
27
  /**
30
28
  * @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.
31
29
  *
30
+ * @event sgds-show - Emitted on show. Only for collapsed menu.
31
+ * @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.
32
+ * @event sgds-hide - Emitted on hide. Only for collapsed menu.
33
+ * @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.
34
+ *
32
35
  * @slot - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.
33
36
  * @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.
34
37
  * @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here
@@ -45,10 +48,6 @@ const SIZES = {
45
48
  class SgdsMainnav extends sgdsElement["default"] {
46
49
  constructor() {
47
50
  super();
48
- /** @internal */
49
- this.myCollapse = ref_js.createRef();
50
- /** @internal */
51
- this.bsCollapse = null;
52
51
  /** The href link for brand logo */
53
52
  this.brandHref = "";
54
53
  this.collapseId = generateId["default"]("mainnav", "collapse");
@@ -63,27 +62,78 @@ class SgdsMainnav extends sgdsElement["default"] {
63
62
  if (newBreakpointReachedValue !== this.breakpointReached) {
64
63
  this.requestUpdate();
65
64
  }
65
+ else {
66
+ this.body ? (this.body.hidden = true) : null;
67
+ this.expanded = false;
68
+ }
66
69
  });
67
70
  }
68
- _onClickButton() {
69
- this.bsCollapse.toggle();
70
- }
71
71
  firstUpdated() {
72
- this.bsCollapse = new Collapse__default["default"](this.myCollapse.value, {
73
- toggle: false
74
- });
75
- this.myCollapse.value.addEventListener("show.bs.collapse", () => {
76
- this.expanded = true;
77
- });
78
- this.myCollapse.value.addEventListener("shown.bs.collapse", () => {
79
- this.expanded = true;
80
- });
81
- this.myCollapse.value.addEventListener("hide.bs.collapse", () => {
72
+ if (this.breakpointReached && this.body) {
82
73
  this.expanded = false;
83
- });
84
- this.myCollapse.value.addEventListener("hidden.bs.collapse", () => {
74
+ this.body.hidden = true;
75
+ }
76
+ }
77
+ handleSummaryClick() {
78
+ if (this.expanded) {
79
+ this.hide();
80
+ }
81
+ else {
82
+ this.show();
83
+ }
84
+ this.header.focus();
85
+ }
86
+ async _animateToShow() {
87
+ const sgdsShow = this.emit("sgds-show", { cancelable: true });
88
+ if (sgdsShow.defaultPrevented) {
85
89
  this.expanded = false;
86
- });
90
+ return;
91
+ }
92
+ await animate.stopAnimations(this.body);
93
+ this.body.hidden = false;
94
+ const { keyframes, options } = animationRegistry.getAnimation(this, "mainnav.show");
95
+ await animate.animateTo(this.body, animate.shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
96
+ this.body.style.height = "auto";
97
+ this.emit("sgds-after-show");
98
+ }
99
+ async _animateToHide() {
100
+ const slHide = this.emit("sgds-hide", { cancelable: true });
101
+ if (slHide.defaultPrevented) {
102
+ this.expanded = true;
103
+ return;
104
+ }
105
+ await animate.stopAnimations(this.body);
106
+ const { keyframes, options } = animationRegistry.getAnimation(this, "mainnav.hide");
107
+ await animate.animateTo(this.body, animate.shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
108
+ this.body.hidden = true;
109
+ this.body.style.height = "auto";
110
+ this.emit("sgds-after-hide");
111
+ }
112
+ async handleOpenChange() {
113
+ if (this.expanded) {
114
+ // Show
115
+ this._animateToShow();
116
+ }
117
+ else {
118
+ // Hide
119
+ this._animateToHide();
120
+ }
121
+ }
122
+ /** Shows the menu. For when mainnav is in the collapsed form */
123
+ async show() {
124
+ if (this.expanded) {
125
+ return;
126
+ }
127
+ this.expanded = true;
128
+ return event.waitForEvent(this, "sgds-after-show");
129
+ }
130
+ /** Hide the menu. For when mainnav is in the collapsed form */
131
+ async hide() {
132
+ if (!this.expanded) {
133
+ return;
134
+ }
135
+ this.expanded = false;
136
+ return event.waitForEvent(this, "sgds-after-hide");
87
137
  }
88
138
  // assigning name attribute to elements added in slot="end", to use wildcard css selector to assign styles only to *-mainnav-item
89
139
  _handleSlotChange(e) {
@@ -94,7 +144,7 @@ class SgdsMainnav extends sgdsElement["default"] {
94
144
  }
95
145
  render() {
96
146
  this.breakpointReached = window.innerWidth < SIZES[this.expand];
97
- const collapseClass = "collapse navbar-collapse order-2";
147
+ const collapseClass = "navbar-body navbar-collapse order-2";
98
148
  return lit.html `
99
149
  <nav
100
150
  class="sgds navbar navbar-light
@@ -107,7 +157,7 @@ class SgdsMainnav extends sgdsElement["default"] {
107
157
  <button
108
158
  class="navbar-toggler order-1"
109
159
  type="button"
110
- @click=${() => this._onClickButton()}
160
+ @click=${this.handleSummaryClick}
111
161
  aria-controls="${this.collapseId}"
112
162
  aria-expanded="${this.expanded}"
113
163
  aria-label="Toggle navigation"
@@ -126,7 +176,7 @@ class SgdsMainnav extends sgdsElement["default"] {
126
176
  />
127
177
  </svg>
128
178
  </button>
129
- <div class=${collapseClass} ${ref_js.ref(this.myCollapse)} id=${this.collapseId}>
179
+ <div class=${collapseClass} id=${this.collapseId}>
130
180
  <ul class="navbar-nav">
131
181
  <slot></slot>
132
182
  <slot
@@ -151,6 +201,12 @@ class SgdsMainnav extends sgdsElement["default"] {
151
201
  }
152
202
  }
153
203
  SgdsMainnav.styles = [sgdsElement["default"].styles, sgdsMainnav["default"]];
204
+ tslib.__decorate([
205
+ decorators_js.query(".navbar-toggler")
206
+ ], SgdsMainnav.prototype, "header", void 0);
207
+ tslib.__decorate([
208
+ decorators_js.query(".navbar-body")
209
+ ], SgdsMainnav.prototype, "body", void 0);
154
210
  tslib.__decorate([
155
211
  decorators_js.property({ type: String })
156
212
  ], SgdsMainnav.prototype, "brandHref", void 0);
@@ -163,6 +219,23 @@ tslib.__decorate([
163
219
  tslib.__decorate([
164
220
  decorators_js.state()
165
221
  ], SgdsMainnav.prototype, "expanded", void 0);
222
+ tslib.__decorate([
223
+ watch.watch("expanded", { waitUntilFirstUpdate: true })
224
+ ], SgdsMainnav.prototype, "handleOpenChange", null);
225
+ animationRegistry.setDefaultAnimation("mainnav.show", {
226
+ keyframes: [
227
+ { height: "0", opacity: "0" },
228
+ { height: "auto", opacity: "1" }
229
+ ],
230
+ options: { duration: 200, easing: "ease-in-out" }
231
+ });
232
+ animationRegistry.setDefaultAnimation("mainnav.hide", {
233
+ keyframes: [
234
+ { height: "auto", opacity: "1" },
235
+ { height: "0", opacity: "0" }
236
+ ],
237
+ options: { duration: 200, easing: "ease-in-out" }
238
+ });
166
239
 
167
240
  exports.SgdsMainnav = SgdsMainnav;
168
241
  exports["default"] = SgdsMainnav;
@@ -1 +1 @@
1
- {"version":3,"file":"sgds-mainnav.cjs.js","sources":["../../../src/components/Mainnav/sgds-mainnav.ts"],"sourcesContent":["import Collapse from \"bootstrap/js/src/collapse\";\nimport type { Collapse as BsCollapse } from \"bootstrap\";\nimport { html } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { Ref, createRef, ref } from \"lit/directives/ref.js\";\nimport SgdsElement from \"../../base/sgds-element\";\nimport { LG_BREAKPOINT, MD_BREAKPOINT, SM_BREAKPOINT, XL_BREAKPOINT, XXL_BREAKPOINT } from \"../../utils/breakpoints\";\nimport genId from \"../../utils/generateId\";\nimport styles from \"./sgds-mainnav.scss\";\n\nexport type MainnavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\n\nconst SIZES = {\n sm: SM_BREAKPOINT,\n md: MD_BREAKPOINT,\n lg: LG_BREAKPOINT,\n xl: XL_BREAKPOINT,\n XXL: XXL_BREAKPOINT,\n never: Infinity,\n always: -1\n};\n\n/**\n * @summary This component is the primary means that your users will use to navigate through your portal. It includes horizontal navigation and branding to identify your site.\n *\n * @slot - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.\n * @slot end - Elements in this slot will be positioned to the right end of .navbar-nav. Elements in this slot will also be included in collapsed menu.\n * @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here\n * @slot non-collapsible - Elements in this slot will not be collapsed\n *\n * @cssproperty --mainnav-background-color - Navbar's background color.\n * @cssproperty --mainnav-padding-x - left and right padding for browser width > 768px\n * @cssproperty --mainnav-padding-y - top and bottom padding for browser width > 768px\n * @cssproperty --mainnav-mobile-padding-x - left and right padding for browser width < 768px\n * @cssproperty --mainnav-mobile-padding-y - top and bottom padding for browser width < 768px\n * @cssproperty --mainnav-borderBottom-width - bottom border width\n * @cssproperty --mainnav-borderBottom-color - borderBottom width color\n */\nexport class SgdsMainnav extends SgdsElement {\n static styles = [SgdsElement.styles, styles];\n\n constructor() {\n super();\n window.addEventListener(\"resize\", () => {\n const newBreakpointReachedValue = window.innerWidth < SIZES[this.expand];\n if (newBreakpointReachedValue !== this.breakpointReached) {\n this.requestUpdate();\n }\n });\n }\n /** @internal */\n private myCollapse: Ref<HTMLElement> = createRef();\n /** @internal */\n private bsCollapse: BsCollapse = null;\n\n private _onClickButton() {\n this.bsCollapse.toggle();\n }\n\n /** The href link for brand logo */\n @property({ type: String })\n brandHref = \"\";\n\n private collapseId = genId(\"mainnav\", \"collapse\");\n\n /** The breakpoint, below which, the Navbar will collapse. When always the Navbar will always be expanded regardless of screen size. When never, the Navbar will always be collapsed */\n @property({ type: String })\n expand: MainnavExpandSize = \"lg\";\n\n /** @internal */\n @state()\n breakpointReached = false;\n\n /** @internal */\n @state()\n expanded = false;\n\n firstUpdated() {\n this.bsCollapse = new Collapse(this.myCollapse.value, {\n toggle: false\n });\n this.myCollapse.value.addEventListener(\"show.bs.collapse\", () => {\n this.expanded = true;\n });\n this.myCollapse.value.addEventListener(\"shown.bs.collapse\", () => {\n this.expanded = true;\n });\n this.myCollapse.value.addEventListener(\"hide.bs.collapse\", () => {\n this.expanded = false;\n });\n this.myCollapse.value.addEventListener(\"hidden.bs.collapse\", () => {\n this.expanded = false;\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 _handleSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n\n childElements.forEach(e => {\n e.setAttribute(\"name\", e.tagName.toLowerCase());\n });\n }\n\n render() {\n this.breakpointReached = window.innerWidth < SIZES[this.expand];\n const collapseClass = \"collapse navbar-collapse order-2\";\n return html`\n <nav\n class=\"sgds navbar navbar-light\n ${this._expandClass()}\"\n >\n <a class=\"navbar-brand me-auto order-first\" href=${this.brandHref} aria-label=\"brand-link\">\n <slot name=\"brand\"></slot>\n </a>\n <slot name=\"non-collapsible\" class=\"${this.breakpointReached ? \"order-1\" : \"order-last\"}\"></slot>\n <button\n class=\"navbar-toggler order-1\"\n type=\"button\"\n @click=${() => this._onClickButton()}\n aria-controls=\"${this.collapseId}\"\n aria-expanded=\"${this.expanded}\"\n aria-label=\"Toggle navigation\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"30\"\n height=\"30\"\n fill=\"currentColor\"\n class=\"bi bi-list\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z\"\n />\n </svg>\n </button>\n <div class=${collapseClass} ${ref(this.myCollapse)} id=${this.collapseId}>\n <ul class=\"navbar-nav\">\n <slot></slot>\n <slot\n name=\"end\"\n class=${classMap({ \"slot-end\": !this.breakpointReached })}\n @slotchange=${this._handleSlotChange}\n ></slot>\n </ul>\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}\n\nexport default SgdsMainnav;\n"],"names":["SM_BREAKPOINT","MD_BREAKPOINT","LG_BREAKPOINT","XL_BREAKPOINT","XXL_BREAKPOINT","SgdsElement","createRef","genId","Collapse","html","ref","classMap","styles","__decorate","property","state"],"mappings":"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"}
1
+ {"version":3,"file":"sgds-mainnav.cjs.js","sources":["../../../src/components/Mainnav/sgds-mainnav.ts"],"sourcesContent":["import { html } from \"lit\";\nimport { property, query, 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 styles from \"./sgds-mainnav.scss\";\n\nexport type MainnavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\n\nconst SIZES = {\n sm: SM_BREAKPOINT,\n md: MD_BREAKPOINT,\n lg: LG_BREAKPOINT,\n xl: XL_BREAKPOINT,\n XXL: XXL_BREAKPOINT,\n never: Infinity,\n always: -1\n};\n\n/**\n * @summary This component is the primary means that your users will use to navigate through your portal. It includes horizontal navigation and branding to identify your site.\n *\n * @event sgds-show - Emitted on show. Only for collapsed menu.\n * @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.\n * @event sgds-hide - Emitted on hide. Only for collapsed menu.\n * @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.\n *\n * @slot - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.\n * @slot end - Elements in this slot will be positioned to the right end of .navbar-nav. Elements in this slot will also be included in collapsed menu.\n * @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here\n * @slot non-collapsible - Elements in this slot will not be collapsed\n *\n * @cssproperty --mainnav-background-color - Navbar's background color.\n * @cssproperty --mainnav-padding-x - left and right padding for browser width > 768px\n * @cssproperty --mainnav-padding-y - top and bottom padding for browser width > 768px\n * @cssproperty --mainnav-mobile-padding-x - left and right padding for browser width < 768px\n * @cssproperty --mainnav-mobile-padding-y - top and bottom padding for browser width < 768px\n * @cssproperty --mainnav-borderBottom-width - bottom border width\n * @cssproperty --mainnav-borderBottom-color - borderBottom width color\n */\nexport class SgdsMainnav extends SgdsElement {\n static styles = [SgdsElement.styles, styles];\n\n /** @internal */\n @query(\".navbar-toggler\") header: HTMLElement;\n /** @internal */\n @query(\".navbar-body\") body: HTMLElement;\n\n constructor() {\n super();\n window.addEventListener(\"resize\", () => {\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 }\n });\n }\n\n /** The href link for brand logo */\n @property({ type: String })\n brandHref = \"\";\n\n private collapseId = genId(\"mainnav\", \"collapse\");\n\n /** The breakpoint, below which, the Navbar will collapse. When always the Navbar will always be expanded regardless of screen size. When never, the Navbar will always be collapsed */\n @property({ type: String })\n expand: MainnavExpandSize = \"lg\";\n\n /** @internal */\n @state()\n breakpointReached = false;\n\n /** @internal */\n @state()\n expanded = false;\n firstUpdated() {\n if (this.breakpointReached && this.body) {\n this.expanded = false;\n this.body.hidden = true;\n }\n }\n private handleSummaryClick() {\n if (this.expanded) {\n this.hide();\n } else {\n this.show();\n }\n\n this.header.focus();\n }\n\n private async _animateToShow() {\n const sgdsShow = this.emit(\"sgds-show\", { cancelable: true });\n if (sgdsShow.defaultPrevented) {\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.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\n this.emit(\"sgds-after-hide\");\n }\n\n @watch(\"expanded\", { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n if (this.expanded) {\n // Show\n this._animateToShow();\n } else {\n // Hide\n this._animateToHide();\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.expanded = 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 this.expanded = false;\n return waitForEvent(this, \"sgds-after-hide\");\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 _handleSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n\n childElements.forEach(e => {\n e.setAttribute(\"name\", e.tagName.toLowerCase());\n });\n }\n\n render() {\n this.breakpointReached = window.innerWidth < SIZES[this.expand];\n const collapseClass = \"navbar-body navbar-collapse order-2\";\n return html`\n <nav\n class=\"sgds navbar navbar-light\n ${this._expandClass()}\"\n >\n <a class=\"navbar-brand me-auto order-first\" href=${this.brandHref} aria-label=\"brand-link\">\n <slot name=\"brand\"></slot>\n </a>\n <slot name=\"non-collapsible\" class=\"${this.breakpointReached ? \"order-1\" : \"order-last\"}\"></slot>\n <button\n class=\"navbar-toggler order-1\"\n type=\"button\"\n @click=${this.handleSummaryClick}\n aria-controls=\"${this.collapseId}\"\n aria-expanded=\"${this.expanded}\"\n aria-label=\"Toggle navigation\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"30\"\n height=\"30\"\n fill=\"currentColor\"\n class=\"bi bi-list\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z\"\n />\n </svg>\n </button>\n <div class=${collapseClass} id=${this.collapseId}>\n <ul class=\"navbar-nav\">\n <slot></slot>\n <slot\n name=\"end\"\n class=${classMap({ \"slot-end\": !this.breakpointReached })}\n @slotchange=${this._handleSlotChange}\n ></slot>\n </ul>\n </div>\n </nav>\n `;\n }\n _expandClass() {\n switch (this.expand) {\n case \"always\":\n return \"navbar-expand\";\n case \"never\":\n break;\n default:\n return `navbar-expand-${this.expand}`;\n }\n }\n}\nsetDefaultAnimation(\"mainnav.show\", {\n keyframes: [\n { height: \"0\", opacity: \"0\" },\n { height: \"auto\", opacity: \"1\" }\n ],\n options: { duration: 200, easing: \"ease-in-out\" }\n});\n\nsetDefaultAnimation(\"mainnav.hide\", {\n keyframes: [\n { height: \"auto\", opacity: \"1\" },\n { height: \"0\", opacity: \"0\" }\n ],\n options: { duration: 200, easing: \"ease-in-out\" }\n});\n\nexport default SgdsMainnav;\n"],"names":["SM_BREAKPOINT","MD_BREAKPOINT","LG_BREAKPOINT","XL_BREAKPOINT","XXL_BREAKPOINT","SgdsElement","genId","stopAnimations","getAnimation","animateTo","shimKeyframesHeightAuto","waitForEvent","html","classMap","styles","__decorate","query","property","state","watch","setDefaultAnimation"],"mappings":"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"}
@@ -3,6 +3,11 @@ export type MainnavExpandSize = "sm" | "md" | "lg" | "xl" | "xxl" | "always" | "
3
3
  /**
4
4
  * @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.
5
5
  *
6
+ * @event sgds-show - Emitted on show. Only for collapsed menu.
7
+ * @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.
8
+ * @event sgds-hide - Emitted on hide. Only for collapsed menu.
9
+ * @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.
10
+ *
6
11
  * @slot - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.
7
12
  * @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.
8
13
  * @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here
@@ -18,12 +23,11 @@ export type MainnavExpandSize = "sm" | "md" | "lg" | "xl" | "xxl" | "always" | "
18
23
  */
19
24
  export declare class SgdsMainnav extends SgdsElement {
20
25
  static styles: import("lit").CSSResultGroup[];
21
- constructor();
22
26
  /** @internal */
23
- private myCollapse;
27
+ header: HTMLElement;
24
28
  /** @internal */
25
- private bsCollapse;
26
- private _onClickButton;
29
+ body: HTMLElement;
30
+ constructor();
27
31
  /** The href link for brand logo */
28
32
  brandHref: string;
29
33
  private collapseId;
@@ -34,6 +38,14 @@ export declare class SgdsMainnav extends SgdsElement {
34
38
  /** @internal */
35
39
  expanded: boolean;
36
40
  firstUpdated(): void;
41
+ private handleSummaryClick;
42
+ private _animateToShow;
43
+ private _animateToHide;
44
+ handleOpenChange(): Promise<void>;
45
+ /** Shows the menu. For when mainnav is in the collapsed form */
46
+ show(): Promise<void>;
47
+ /** Hide the menu. For when mainnav is in the collapsed form */
48
+ hide(): Promise<void>;
37
49
  _handleSlotChange(e: Event): void;
38
50
  render(): import("lit-html").TemplateResult<1>;
39
51
  _expandClass(): string;
@@ -1,12 +1,14 @@
1
1
  import { __decorate } from 'tslib';
2
- import Collapse from 'bootstrap/js/src/collapse';
3
2
  import { html } from 'lit';
4
- import { property, state } from 'lit/decorators.js';
3
+ import { query, property, state } from 'lit/decorators.js';
5
4
  import { classMap } from 'lit/directives/class-map.js';
6
- import { createRef, ref } from 'lit/directives/ref.js';
7
5
  import SgdsElement from '../../base/sgds-element.js';
6
+ import { stopAnimations, animateTo, shimKeyframesHeightAuto } from '../../utils/animate.js';
7
+ import { setDefaultAnimation, getAnimation } from '../../utils/animation-registry.js';
8
8
  import { SM_BREAKPOINT, MD_BREAKPOINT, LG_BREAKPOINT, XL_BREAKPOINT, XXL_BREAKPOINT } from '../../utils/breakpoints.js';
9
+ import { waitForEvent } from '../../utils/event.js';
9
10
  import genId from '../../utils/generateId.js';
11
+ import { watch } from '../../utils/watch.js';
10
12
  import css_248z from './sgds-mainnav2.js';
11
13
 
12
14
  const SIZES = {
@@ -21,6 +23,11 @@ const SIZES = {
21
23
  /**
22
24
  * @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.
23
25
  *
26
+ * @event sgds-show - Emitted on show. Only for collapsed menu.
27
+ * @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.
28
+ * @event sgds-hide - Emitted on hide. Only for collapsed menu.
29
+ * @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.
30
+ *
24
31
  * @slot - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.
25
32
  * @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.
26
33
  * @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here
@@ -37,10 +44,6 @@ const SIZES = {
37
44
  class SgdsMainnav extends SgdsElement {
38
45
  constructor() {
39
46
  super();
40
- /** @internal */
41
- this.myCollapse = createRef();
42
- /** @internal */
43
- this.bsCollapse = null;
44
47
  /** The href link for brand logo */
45
48
  this.brandHref = "";
46
49
  this.collapseId = genId("mainnav", "collapse");
@@ -55,27 +58,78 @@ class SgdsMainnav extends SgdsElement {
55
58
  if (newBreakpointReachedValue !== this.breakpointReached) {
56
59
  this.requestUpdate();
57
60
  }
61
+ else {
62
+ this.body ? (this.body.hidden = true) : null;
63
+ this.expanded = false;
64
+ }
58
65
  });
59
66
  }
60
- _onClickButton() {
61
- this.bsCollapse.toggle();
62
- }
63
67
  firstUpdated() {
64
- this.bsCollapse = new Collapse(this.myCollapse.value, {
65
- toggle: false
66
- });
67
- this.myCollapse.value.addEventListener("show.bs.collapse", () => {
68
- this.expanded = true;
69
- });
70
- this.myCollapse.value.addEventListener("shown.bs.collapse", () => {
71
- this.expanded = true;
72
- });
73
- this.myCollapse.value.addEventListener("hide.bs.collapse", () => {
68
+ if (this.breakpointReached && this.body) {
74
69
  this.expanded = false;
75
- });
76
- this.myCollapse.value.addEventListener("hidden.bs.collapse", () => {
70
+ this.body.hidden = true;
71
+ }
72
+ }
73
+ handleSummaryClick() {
74
+ if (this.expanded) {
75
+ this.hide();
76
+ }
77
+ else {
78
+ this.show();
79
+ }
80
+ this.header.focus();
81
+ }
82
+ async _animateToShow() {
83
+ const sgdsShow = this.emit("sgds-show", { cancelable: true });
84
+ if (sgdsShow.defaultPrevented) {
77
85
  this.expanded = false;
78
- });
86
+ return;
87
+ }
88
+ await stopAnimations(this.body);
89
+ this.body.hidden = false;
90
+ const { keyframes, options } = getAnimation(this, "mainnav.show");
91
+ await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
92
+ this.body.style.height = "auto";
93
+ this.emit("sgds-after-show");
94
+ }
95
+ async _animateToHide() {
96
+ const slHide = this.emit("sgds-hide", { cancelable: true });
97
+ if (slHide.defaultPrevented) {
98
+ this.expanded = true;
99
+ return;
100
+ }
101
+ await stopAnimations(this.body);
102
+ const { keyframes, options } = getAnimation(this, "mainnav.hide");
103
+ await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
104
+ this.body.hidden = true;
105
+ this.body.style.height = "auto";
106
+ this.emit("sgds-after-hide");
107
+ }
108
+ async handleOpenChange() {
109
+ if (this.expanded) {
110
+ // Show
111
+ this._animateToShow();
112
+ }
113
+ else {
114
+ // Hide
115
+ this._animateToHide();
116
+ }
117
+ }
118
+ /** Shows the menu. For when mainnav is in the collapsed form */
119
+ async show() {
120
+ if (this.expanded) {
121
+ return;
122
+ }
123
+ this.expanded = true;
124
+ return waitForEvent(this, "sgds-after-show");
125
+ }
126
+ /** Hide the menu. For when mainnav is in the collapsed form */
127
+ async hide() {
128
+ if (!this.expanded) {
129
+ return;
130
+ }
131
+ this.expanded = false;
132
+ return waitForEvent(this, "sgds-after-hide");
79
133
  }
80
134
  // assigning name attribute to elements added in slot="end", to use wildcard css selector to assign styles only to *-mainnav-item
81
135
  _handleSlotChange(e) {
@@ -86,7 +140,7 @@ class SgdsMainnav extends SgdsElement {
86
140
  }
87
141
  render() {
88
142
  this.breakpointReached = window.innerWidth < SIZES[this.expand];
89
- const collapseClass = "collapse navbar-collapse order-2";
143
+ const collapseClass = "navbar-body navbar-collapse order-2";
90
144
  return html `
91
145
  <nav
92
146
  class="sgds navbar navbar-light
@@ -99,7 +153,7 @@ class SgdsMainnav extends SgdsElement {
99
153
  <button
100
154
  class="navbar-toggler order-1"
101
155
  type="button"
102
- @click=${() => this._onClickButton()}
156
+ @click=${this.handleSummaryClick}
103
157
  aria-controls="${this.collapseId}"
104
158
  aria-expanded="${this.expanded}"
105
159
  aria-label="Toggle navigation"
@@ -118,7 +172,7 @@ class SgdsMainnav extends SgdsElement {
118
172
  />
119
173
  </svg>
120
174
  </button>
121
- <div class=${collapseClass} ${ref(this.myCollapse)} id=${this.collapseId}>
175
+ <div class=${collapseClass} id=${this.collapseId}>
122
176
  <ul class="navbar-nav">
123
177
  <slot></slot>
124
178
  <slot
@@ -143,6 +197,12 @@ class SgdsMainnav extends SgdsElement {
143
197
  }
144
198
  }
145
199
  SgdsMainnav.styles = [SgdsElement.styles, css_248z];
200
+ __decorate([
201
+ query(".navbar-toggler")
202
+ ], SgdsMainnav.prototype, "header", void 0);
203
+ __decorate([
204
+ query(".navbar-body")
205
+ ], SgdsMainnav.prototype, "body", void 0);
146
206
  __decorate([
147
207
  property({ type: String })
148
208
  ], SgdsMainnav.prototype, "brandHref", void 0);
@@ -155,6 +215,23 @@ __decorate([
155
215
  __decorate([
156
216
  state()
157
217
  ], SgdsMainnav.prototype, "expanded", void 0);
218
+ __decorate([
219
+ watch("expanded", { waitUntilFirstUpdate: true })
220
+ ], SgdsMainnav.prototype, "handleOpenChange", null);
221
+ setDefaultAnimation("mainnav.show", {
222
+ keyframes: [
223
+ { height: "0", opacity: "0" },
224
+ { height: "auto", opacity: "1" }
225
+ ],
226
+ options: { duration: 200, easing: "ease-in-out" }
227
+ });
228
+ setDefaultAnimation("mainnav.hide", {
229
+ keyframes: [
230
+ { height: "auto", opacity: "1" },
231
+ { height: "0", opacity: "0" }
232
+ ],
233
+ options: { duration: 200, easing: "ease-in-out" }
234
+ });
158
235
 
159
236
  export { SgdsMainnav, SgdsMainnav as default };
160
237
  //# sourceMappingURL=sgds-mainnav.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sgds-mainnav.js","sources":["../../../src/components/Mainnav/sgds-mainnav.ts"],"sourcesContent":["import Collapse from \"bootstrap/js/src/collapse\";\nimport type { Collapse as BsCollapse } from \"bootstrap\";\nimport { html } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { Ref, createRef, ref } from \"lit/directives/ref.js\";\nimport SgdsElement from \"../../base/sgds-element\";\nimport { LG_BREAKPOINT, MD_BREAKPOINT, SM_BREAKPOINT, XL_BREAKPOINT, XXL_BREAKPOINT } from \"../../utils/breakpoints\";\nimport genId from \"../../utils/generateId\";\nimport styles from \"./sgds-mainnav.scss\";\n\nexport type MainnavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\n\nconst SIZES = {\n sm: SM_BREAKPOINT,\n md: MD_BREAKPOINT,\n lg: LG_BREAKPOINT,\n xl: XL_BREAKPOINT,\n XXL: XXL_BREAKPOINT,\n never: Infinity,\n always: -1\n};\n\n/**\n * @summary This component is the primary means that your users will use to navigate through your portal. It includes horizontal navigation and branding to identify your site.\n *\n * @slot - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.\n * @slot end - Elements in this slot will be positioned to the right end of .navbar-nav. Elements in this slot will also be included in collapsed menu.\n * @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here\n * @slot non-collapsible - Elements in this slot will not be collapsed\n *\n * @cssproperty --mainnav-background-color - Navbar's background color.\n * @cssproperty --mainnav-padding-x - left and right padding for browser width > 768px\n * @cssproperty --mainnav-padding-y - top and bottom padding for browser width > 768px\n * @cssproperty --mainnav-mobile-padding-x - left and right padding for browser width < 768px\n * @cssproperty --mainnav-mobile-padding-y - top and bottom padding for browser width < 768px\n * @cssproperty --mainnav-borderBottom-width - bottom border width\n * @cssproperty --mainnav-borderBottom-color - borderBottom width color\n */\nexport class SgdsMainnav extends SgdsElement {\n static styles = [SgdsElement.styles, styles];\n\n constructor() {\n super();\n window.addEventListener(\"resize\", () => {\n const newBreakpointReachedValue = window.innerWidth < SIZES[this.expand];\n if (newBreakpointReachedValue !== this.breakpointReached) {\n this.requestUpdate();\n }\n });\n }\n /** @internal */\n private myCollapse: Ref<HTMLElement> = createRef();\n /** @internal */\n private bsCollapse: BsCollapse = null;\n\n private _onClickButton() {\n this.bsCollapse.toggle();\n }\n\n /** The href link for brand logo */\n @property({ type: String })\n brandHref = \"\";\n\n private collapseId = genId(\"mainnav\", \"collapse\");\n\n /** The breakpoint, below which, the Navbar will collapse. When always the Navbar will always be expanded regardless of screen size. When never, the Navbar will always be collapsed */\n @property({ type: String })\n expand: MainnavExpandSize = \"lg\";\n\n /** @internal */\n @state()\n breakpointReached = false;\n\n /** @internal */\n @state()\n expanded = false;\n\n firstUpdated() {\n this.bsCollapse = new Collapse(this.myCollapse.value, {\n toggle: false\n });\n this.myCollapse.value.addEventListener(\"show.bs.collapse\", () => {\n this.expanded = true;\n });\n this.myCollapse.value.addEventListener(\"shown.bs.collapse\", () => {\n this.expanded = true;\n });\n this.myCollapse.value.addEventListener(\"hide.bs.collapse\", () => {\n this.expanded = false;\n });\n this.myCollapse.value.addEventListener(\"hidden.bs.collapse\", () => {\n this.expanded = false;\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 _handleSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n\n childElements.forEach(e => {\n e.setAttribute(\"name\", e.tagName.toLowerCase());\n });\n }\n\n render() {\n this.breakpointReached = window.innerWidth < SIZES[this.expand];\n const collapseClass = \"collapse navbar-collapse order-2\";\n return html`\n <nav\n class=\"sgds navbar navbar-light\n ${this._expandClass()}\"\n >\n <a class=\"navbar-brand me-auto order-first\" href=${this.brandHref} aria-label=\"brand-link\">\n <slot name=\"brand\"></slot>\n </a>\n <slot name=\"non-collapsible\" class=\"${this.breakpointReached ? \"order-1\" : \"order-last\"}\"></slot>\n <button\n class=\"navbar-toggler order-1\"\n type=\"button\"\n @click=${() => this._onClickButton()}\n aria-controls=\"${this.collapseId}\"\n aria-expanded=\"${this.expanded}\"\n aria-label=\"Toggle navigation\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"30\"\n height=\"30\"\n fill=\"currentColor\"\n class=\"bi bi-list\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z\"\n />\n </svg>\n </button>\n <div class=${collapseClass} ${ref(this.myCollapse)} id=${this.collapseId}>\n <ul class=\"navbar-nav\">\n <slot></slot>\n <slot\n name=\"end\"\n class=${classMap({ \"slot-end\": !this.breakpointReached })}\n @slotchange=${this._handleSlotChange}\n ></slot>\n </ul>\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}\n\nexport default SgdsMainnav;\n"],"names":["styles"],"mappings":"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"}
1
+ {"version":3,"file":"sgds-mainnav.js","sources":["../../../src/components/Mainnav/sgds-mainnav.ts"],"sourcesContent":["import { html } from \"lit\";\nimport { property, query, 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 styles from \"./sgds-mainnav.scss\";\n\nexport type MainnavExpandSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\" | \"always\" | \"never\";\n\nconst SIZES = {\n sm: SM_BREAKPOINT,\n md: MD_BREAKPOINT,\n lg: LG_BREAKPOINT,\n xl: XL_BREAKPOINT,\n XXL: XXL_BREAKPOINT,\n never: Infinity,\n always: -1\n};\n\n/**\n * @summary This component is the primary means that your users will use to navigate through your portal. It includes horizontal navigation and branding to identify your site.\n *\n * @event sgds-show - Emitted on show. Only for collapsed menu.\n * @event sgds-after-show - Emitted on show after animation has completed. Only for collapsed menu.\n * @event sgds-hide - Emitted on hide. Only for collapsed menu.\n * @event sgds-after-hide - Emitted on hide after animation has completed. Only for collapsed menu.\n *\n * @slot - Default slot of SgdsMainnav. Pass in SgdsMainnavItem elements here.\n * @slot end - Elements in this slot will be positioned to the right end of .navbar-nav. Elements in this slot will also be included in collapsed menu.\n * @slot brand - Brand slot of SgdsMainnav. Pass in brand logo img here\n * @slot non-collapsible - Elements in this slot will not be collapsed\n *\n * @cssproperty --mainnav-background-color - Navbar's background color.\n * @cssproperty --mainnav-padding-x - left and right padding for browser width > 768px\n * @cssproperty --mainnav-padding-y - top and bottom padding for browser width > 768px\n * @cssproperty --mainnav-mobile-padding-x - left and right padding for browser width < 768px\n * @cssproperty --mainnav-mobile-padding-y - top and bottom padding for browser width < 768px\n * @cssproperty --mainnav-borderBottom-width - bottom border width\n * @cssproperty --mainnav-borderBottom-color - borderBottom width color\n */\nexport class SgdsMainnav extends SgdsElement {\n static styles = [SgdsElement.styles, styles];\n\n /** @internal */\n @query(\".navbar-toggler\") header: HTMLElement;\n /** @internal */\n @query(\".navbar-body\") body: HTMLElement;\n\n constructor() {\n super();\n window.addEventListener(\"resize\", () => {\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 }\n });\n }\n\n /** The href link for brand logo */\n @property({ type: String })\n brandHref = \"\";\n\n private collapseId = genId(\"mainnav\", \"collapse\");\n\n /** The breakpoint, below which, the Navbar will collapse. When always the Navbar will always be expanded regardless of screen size. When never, the Navbar will always be collapsed */\n @property({ type: String })\n expand: MainnavExpandSize = \"lg\";\n\n /** @internal */\n @state()\n breakpointReached = false;\n\n /** @internal */\n @state()\n expanded = false;\n firstUpdated() {\n if (this.breakpointReached && this.body) {\n this.expanded = false;\n this.body.hidden = true;\n }\n }\n private handleSummaryClick() {\n if (this.expanded) {\n this.hide();\n } else {\n this.show();\n }\n\n this.header.focus();\n }\n\n private async _animateToShow() {\n const sgdsShow = this.emit(\"sgds-show\", { cancelable: true });\n if (sgdsShow.defaultPrevented) {\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.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\n this.emit(\"sgds-after-hide\");\n }\n\n @watch(\"expanded\", { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n if (this.expanded) {\n // Show\n this._animateToShow();\n } else {\n // Hide\n this._animateToHide();\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.expanded = 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 this.expanded = false;\n return waitForEvent(this, \"sgds-after-hide\");\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 _handleSlotChange(e: Event) {\n const childElements = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\n\n childElements.forEach(e => {\n e.setAttribute(\"name\", e.tagName.toLowerCase());\n });\n }\n\n render() {\n this.breakpointReached = window.innerWidth < SIZES[this.expand];\n const collapseClass = \"navbar-body navbar-collapse order-2\";\n return html`\n <nav\n class=\"sgds navbar navbar-light\n ${this._expandClass()}\"\n >\n <a class=\"navbar-brand me-auto order-first\" href=${this.brandHref} aria-label=\"brand-link\">\n <slot name=\"brand\"></slot>\n </a>\n <slot name=\"non-collapsible\" class=\"${this.breakpointReached ? \"order-1\" : \"order-last\"}\"></slot>\n <button\n class=\"navbar-toggler order-1\"\n type=\"button\"\n @click=${this.handleSummaryClick}\n aria-controls=\"${this.collapseId}\"\n aria-expanded=\"${this.expanded}\"\n aria-label=\"Toggle navigation\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"30\"\n height=\"30\"\n fill=\"currentColor\"\n class=\"bi bi-list\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z\"\n />\n </svg>\n </button>\n <div class=${collapseClass} id=${this.collapseId}>\n <ul class=\"navbar-nav\">\n <slot></slot>\n <slot\n name=\"end\"\n class=${classMap({ \"slot-end\": !this.breakpointReached })}\n @slotchange=${this._handleSlotChange}\n ></slot>\n </ul>\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":["styles"],"mappings":"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"}