@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,22 +3,24 @@
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
+ var event = require('../../utils/event.cjs.js');
12
13
  var generateId = require('../../utils/generateId.cjs.js');
14
+ var watch = require('../../utils/watch.cjs.js');
13
15
  var sgdsSidenavItem = require('./sgds-sidenav-item.cjs2.js');
14
16
 
15
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
16
-
17
- var Collapse__default = /*#__PURE__*/_interopDefaultLegacy(Collapse);
18
-
19
17
  /**
20
18
  *
21
- * @event sgds-toggle - Emitted when the dropdown is clicked.
19
+ * @event sgds-toggle - Emitted when the sidenav item's button is clicked.
20
+ * @event sgds-show - Emitted on show.
21
+ * @event sgds-after-show - Emitted on show after animation has completed.
22
+ * @event sgds-hide - Emitted on hide.
23
+ * @event sgds-after-hide - Emitted on hide after animation has completed.
22
24
  *
23
25
  * @slot - default slot for SgdsSidenavLink element.
24
26
  * @slot title - title slot for the content of SgdsSidenavItem's button / anchor element.
@@ -32,10 +34,6 @@ var Collapse__default = /*#__PURE__*/_interopDefaultLegacy(Collapse);
32
34
  class SgdsSidenavItem extends sgdsElement["default"] {
33
35
  constructor() {
34
36
  super(...arguments);
35
- /** @internal */
36
- this.myCollapse = ref_js.createRef();
37
- /** @internal */
38
- this.bsCollapse = null;
39
37
  /**
40
38
  * when true, toggles the sidenav-item to open on first load and set the active stylings.
41
39
  */
@@ -59,59 +57,115 @@ class SgdsSidenavItem extends sgdsElement["default"] {
59
57
  /** @internal */
60
58
  this.index = "-1";
61
59
  }
62
- _onClick() {
60
+ _onToggle() {
63
61
  this.emit("sgds-toggle", { detail: { index: this.index } });
64
62
  }
65
- _onClickButton() {
66
- this._onClick();
67
- if (this.bsCollapse) {
68
- this.bsCollapse.toggle();
69
- }
70
- }
71
63
  _onClickLink() {
72
- this._onClick();
64
+ this._onToggle();
65
+ this.active = true;
66
+ }
67
+ /** Shows the sidenav item. */
68
+ async show() {
69
+ if (this.active) {
70
+ return;
71
+ }
73
72
  this.active = true;
73
+ return event.waitForEvent(this, "sgds-after-show");
74
+ }
75
+ /** Hide the sidenav item */
76
+ async hide() {
77
+ if (!this.active) {
78
+ return;
79
+ }
80
+ this.active = false;
81
+ return event.waitForEvent(this, "sgds-after-hide");
74
82
  }
75
83
  /**
84
+ * @deprecated since 1.1. Will be removed in 2.0 and replaced by hide.
76
85
  * When invoked, closes the SgdsSidenavItem
77
86
  */
78
- closeItem() {
79
- this.active = false;
80
- if (this.bsCollapse)
81
- this.bsCollapse.hide();
87
+ async closeItem() {
88
+ return await this.hide();
82
89
  }
83
90
  /**
91
+ * @deprecated since 1.1. Will be removed in 2.0 and replaced by show.
84
92
  * When invoked, opens the SgdsSidenavItem
85
93
  */
86
- openItem() {
87
- this.active = true;
88
- if (this.bsCollapse)
89
- this.bsCollapse.show();
94
+ async openItem() {
95
+ return await this.show();
90
96
  }
91
97
  firstUpdated() {
92
- // if sidenav has menu, initialise bootstrap collapse
93
98
  if (!this.href) {
94
- this.bsCollapse = new Collapse__default["default"](this.myCollapse.value, {
95
- toggle: this.active
96
- });
97
- this.myCollapse.value.addEventListener("show.bs.collapse", () => {
98
- this.active = true;
99
- });
100
- this.myCollapse.value.addEventListener("shown.bs.collapse", () => {
101
- this.active = true;
102
- });
103
- this.myCollapse.value.addEventListener("hide.bs.collapse", () => {
104
- this.active = false;
105
- });
106
- this.myCollapse.value.addEventListener("hidden.bs.collapse", () => {
99
+ this.body.hidden = !this.active;
100
+ this.body.style.height = this.active ? "auto" : "0";
101
+ }
102
+ }
103
+ _handleSummaryClick() {
104
+ if (this.active) {
105
+ this.hide();
106
+ }
107
+ else {
108
+ this.show();
109
+ }
110
+ this._onToggle();
111
+ this.header.focus();
112
+ }
113
+ _handleSummaryKeyDown(event) {
114
+ if (event.key === "Enter" || event.key === " ") {
115
+ event.preventDefault();
116
+ if (this.active) {
117
+ this.hide();
118
+ }
119
+ else {
120
+ this.show();
121
+ }
122
+ }
123
+ if (event.key === "ArrowUp" || event.key === "ArrowLeft") {
124
+ event.preventDefault();
125
+ this.hide();
126
+ }
127
+ if (event.key === "ArrowDown" || event.key === "ArrowRight") {
128
+ event.preventDefault();
129
+ this.show();
130
+ }
131
+ }
132
+ async handleOpenChange() {
133
+ if (this.href)
134
+ return;
135
+ if (this.active) {
136
+ // Show
137
+ const sgdsShow = this.emit("sgds-show", { cancelable: true });
138
+ if (sgdsShow.defaultPrevented) {
107
139
  this.active = false;
108
- });
140
+ return;
141
+ }
142
+ await animate.stopAnimations(this.body);
143
+ this.body.hidden = false;
144
+ const { keyframes, options } = animationRegistry.getAnimation(this, "sidenav.show");
145
+ await animate.animateTo(this.body, animate.shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
146
+ this.body.style.height = "auto";
147
+ this.emit("sgds-after-show");
148
+ }
149
+ else {
150
+ // Hide
151
+ const sgdsHide = this.emit("sgds-hide", { cancelable: true });
152
+ if (sgdsHide.defaultPrevented) {
153
+ this.active = true;
154
+ return;
155
+ }
156
+ await animate.stopAnimations(this.body);
157
+ const { keyframes, options } = animationRegistry.getAnimation(this, "sidenav.hide");
158
+ await animate.animateTo(this.body, animate.shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
159
+ this.body.hidden = true;
160
+ this.body.style.height = "auto";
161
+ this.emit("sgds-after-hide");
109
162
  }
110
163
  }
111
164
  render() {
112
165
  const withMenuTemplate = lit.html ` <button
113
- @click=${() => this._onClickButton()}
114
- class="collapsed sidenav-btn ${classMap_js.classMap({
166
+ @click=${this._handleSummaryClick}
167
+ @keydown=${this._handleSummaryKeyDown}
168
+ class="sidenav-btn ${classMap_js.classMap({
115
169
  disabled: this.disabled,
116
170
  active: this.active
117
171
  })} "
@@ -138,7 +192,7 @@ class SgdsSidenavItem extends sgdsElement["default"] {
138
192
  />
139
193
  </svg>
140
194
  </button>
141
- <div class="collapse" ${ref_js.ref(this.myCollapse)} id="${this.collapseId}">
195
+ <div class="sidenav-body" id="${this.collapseId}">
142
196
  <ul class="sidenav-list" aria-labelledby="${this.buttonId}">
143
197
  <slot></slot>
144
198
  </ul>
@@ -165,6 +219,12 @@ class SgdsSidenavItem extends sgdsElement["default"] {
165
219
  }
166
220
  }
167
221
  SgdsSidenavItem.styles = [sgdsElement["default"].styles, sgdsSidenavItem["default"]];
222
+ tslib.__decorate([
223
+ decorators_js.query(".sidenav-body")
224
+ ], SgdsSidenavItem.prototype, "body", void 0);
225
+ tslib.__decorate([
226
+ decorators_js.query(".sidenav-btn")
227
+ ], SgdsSidenavItem.prototype, "header", void 0);
168
228
  tslib.__decorate([
169
229
  decorators_js.property({ type: Boolean })
170
230
  ], SgdsSidenavItem.prototype, "active", void 0);
@@ -174,6 +234,23 @@ tslib.__decorate([
174
234
  tslib.__decorate([
175
235
  decorators_js.property({ type: Boolean, reflect: true })
176
236
  ], SgdsSidenavItem.prototype, "disabled", void 0);
237
+ tslib.__decorate([
238
+ watch.watch("active", { waitUntilFirstUpdate: true })
239
+ ], SgdsSidenavItem.prototype, "handleOpenChange", null);
240
+ animationRegistry.setDefaultAnimation("sidenav.show", {
241
+ keyframes: [
242
+ { height: "0", opacity: "0" },
243
+ { height: "auto", opacity: "1" }
244
+ ],
245
+ options: { duration: 200, easing: "ease-in-out" }
246
+ });
247
+ animationRegistry.setDefaultAnimation("sidenav.hide", {
248
+ keyframes: [
249
+ { height: "auto", opacity: "1" },
250
+ { height: "0", opacity: "0" }
251
+ ],
252
+ options: { duration: 200, easing: "ease-in-out" }
253
+ });
177
254
 
178
255
  exports.SgdsSidenavItem = SgdsSidenavItem;
179
256
  exports["default"] = SgdsSidenavItem;
@@ -1 +1 @@
1
- {"version":3,"file":"sgds-sidenav-item.cjs.js","sources":["../../../src/components/Sidenav/sgds-sidenav-item.ts"],"sourcesContent":["import Collapse from \"bootstrap/js/src/collapse\";\nimport type { Collapse as BsCollapse } from \"bootstrap\";\nimport { html } from \"lit\";\nimport { property } 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 genId from \"../../utils/generateId\";\nimport styles from \"./sgds-sidenav-item.scss\";\n\n/**\n *\n * @event sgds-toggle - Emitted when the dropdown is clicked.\n *\n * @slot - default slot for SgdsSidenavLink element.\n * @slot title - title slot for the content of SgdsSidenavItem's button / anchor element.\n * @slot icon - icon slot for the content of SgdsSidenavItem's button / anchor element.\n *\n * @cssproperty --sidenav-item-button-border-left-width - sidenav item left border width\n * @cssproperty --sidenav-item-padding-x - sidenav item padding left and right\n * @cssproperty --sidenav-item-padding-y - sidenav item padding top and bottom\n * @cssproperty --sidenav-item-icon-title-gap - the flex gap between sidenav item icon and title\n */\n\nexport class SgdsSidenavItem extends SgdsElement {\n static styles = [SgdsElement.styles, styles];\n\n /** @internal */\n private myCollapse: Ref<HTMLElement> = createRef();\n /** @internal */\n private bsCollapse: BsCollapse = null;\n\n /**\n * when true, toggles the sidenav-item to open on first load and set the active stylings.\n */\n @property({ type: Boolean })\n active = false;\n\n /**\n * When defined, converts SgdsSidenavItem from a button element to an Anchor element. In this case, only one level of navigation is allowed\n */\n @property({ type: String })\n href = \"\";\n\n /**\n * Disables the SgdsSidenavItem\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * @internal Forwards to id attribute of div.collapse and aria-controls attribute of button in SgdsSidenavItem. By default, SgdsSidenavItem auto-generates a unique id. Override the default id by specifiying your own\n */\n\n private collapseId: string = genId(\"sidenav\", \"collapse\");\n\n /**\n * @internal Forwards to id attribute of button and aria-labelledby attribute of ul.sidenav-list in SgdsSidenavItem. By default, SgdsSidenavItem auto-generates a unique id. Override the default id by specifiying your own\n */\n private buttonId: string = genId(\"sidenav\", \"button\");\n\n /** @internal */\n private index = \"-1\";\n\n private _onClick() {\n this.emit(\"sgds-toggle\", { detail: { index: this.index } });\n }\n\n private _onClickButton() {\n this._onClick();\n if (this.bsCollapse) {\n this.bsCollapse.toggle();\n }\n }\n private _onClickLink() {\n this._onClick();\n this.active = true;\n }\n\n /**\n * When invoked, closes the SgdsSidenavItem\n */\n public closeItem() {\n this.active = false;\n if (this.bsCollapse) this.bsCollapse.hide();\n }\n /**\n * When invoked, opens the SgdsSidenavItem\n */\n public openItem() {\n this.active = true;\n if (this.bsCollapse) this.bsCollapse.show();\n }\n\n firstUpdated() {\n // if sidenav has menu, initialise bootstrap collapse\n if (!this.href) {\n this.bsCollapse = new Collapse(this.myCollapse.value, {\n toggle: this.active\n });\n\n this.myCollapse.value.addEventListener(\"show.bs.collapse\", () => {\n this.active = true;\n });\n this.myCollapse.value.addEventListener(\"shown.bs.collapse\", () => {\n this.active = true;\n });\n this.myCollapse.value.addEventListener(\"hide.bs.collapse\", () => {\n this.active = false;\n });\n this.myCollapse.value.addEventListener(\"hidden.bs.collapse\", () => {\n this.active = false;\n });\n }\n }\n\n render() {\n const withMenuTemplate = html` <button\n @click=${() => this._onClickButton()}\n class=\"collapsed sidenav-btn ${classMap({\n disabled: this.disabled,\n active: this.active\n })} \"\n aria-expanded=\"${this.active}\"\n aria-controls=\"${this.collapseId}\"\n aria-selected=\"${this.active}\"\n id=\"${this.buttonId}\"\n ?disabled=${this.disabled}\n aria-disabled=${this.disabled ? \"true\" : \"false\"}\n >\n <slot name=\"icon\"></slot>\n <slot name=\"title\"></slot>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-chevron-down\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z\"\n />\n </svg>\n </button>\n <div class=\"collapse\" ${ref(this.myCollapse)} id=\"${this.collapseId}\">\n <ul class=\"sidenav-list\" aria-labelledby=\"${this.buttonId}\">\n <slot></slot>\n </ul>\n </div>`;\n\n const noMenuTemplate = html`\n <a\n href=${this.href}\n @click=${() => this._onClickLink()}\n class=\"sidenav-btn ${classMap({\n disabled: this.disabled,\n active: this.active\n })} \"\n aria-selected=\"${this.active}\"\n ?disabled=${this.disabled}\n aria-disabled=${this.disabled ? \"true\" : \"false\"}\n >\n <slot name=\"icon\"></slot>\n <slot name=\"title\"></slot>\n </a>\n `;\n return html`\n <li class=\"sidenav-item\" aria-haspopup=\"${!this.href}\">${this.href ? noMenuTemplate : withMenuTemplate}</li>\n `;\n }\n}\n\nexport default SgdsSidenavItem;\n"],"names":["SgdsElement","createRef","genId","Collapse","html","classMap","ref","styles","__decorate","property"],"mappings":"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"}
1
+ {"version":3,"file":"sgds-sidenav-item.cjs.js","sources":["../../../src/components/Sidenav/sgds-sidenav-item.ts"],"sourcesContent":["import { html } from \"lit\";\nimport { property, query } 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 { waitForEvent } from \"../../utils/event\";\nimport genId from \"../../utils/generateId\";\nimport { watch } from \"../../utils/watch\";\nimport styles from \"./sgds-sidenav-item.scss\";\n\n/**\n *\n * @event sgds-toggle - Emitted when the sidenav item's button is clicked.\n * @event sgds-show - Emitted on show.\n * @event sgds-after-show - Emitted on show after animation has completed.\n * @event sgds-hide - Emitted on hide.\n * @event sgds-after-hide - Emitted on hide after animation has completed.\n *\n * @slot - default slot for SgdsSidenavLink element.\n * @slot title - title slot for the content of SgdsSidenavItem's button / anchor element.\n * @slot icon - icon slot for the content of SgdsSidenavItem's button / anchor element.\n *\n * @cssproperty --sidenav-item-button-border-left-width - sidenav item left border width\n * @cssproperty --sidenav-item-padding-x - sidenav item padding left and right\n * @cssproperty --sidenav-item-padding-y - sidenav item padding top and bottom\n * @cssproperty --sidenav-item-icon-title-gap - the flex gap between sidenav item icon and title\n */\n\nexport class SgdsSidenavItem extends SgdsElement {\n static styles = [SgdsElement.styles, styles];\n\n @query(\".sidenav-body\") body: HTMLElement;\n /** @internal */\n @query(\".sidenav-btn\") header: HTMLElement;\n /**\n * when true, toggles the sidenav-item to open on first load and set the active stylings.\n */\n @property({ type: Boolean })\n active = false;\n\n /**\n * When defined, converts SgdsSidenavItem from a button element to an Anchor element. In this case, only one level of navigation is allowed\n */\n @property({ type: String })\n href = \"\";\n\n /**\n * Disables the SgdsSidenavItem\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * @internal Forwards to id attribute of div.collapse and aria-controls attribute of button in SgdsSidenavItem. By default, SgdsSidenavItem auto-generates a unique id. Override the default id by specifiying your own\n */\n\n private collapseId: string = genId(\"sidenav\", \"collapse\");\n\n /**\n * @internal Forwards to id attribute of button and aria-labelledby attribute of ul.sidenav-list in SgdsSidenavItem. By default, SgdsSidenavItem auto-generates a unique id. Override the default id by specifiying your own\n */\n private buttonId: string = genId(\"sidenav\", \"button\");\n\n /** @internal */\n private index = \"-1\";\n\n private _onToggle() {\n this.emit(\"sgds-toggle\", { detail: { index: this.index } });\n }\n\n private _onClickLink() {\n this._onToggle();\n this.active = true;\n }\n\n /** Shows the sidenav item. */\n public async show() {\n if (this.active) {\n return;\n }\n\n this.active = true;\n return waitForEvent(this, \"sgds-after-show\");\n }\n\n /** Hide the sidenav item */\n public async hide() {\n if (!this.active) {\n return;\n }\n this.active = false;\n return waitForEvent(this, \"sgds-after-hide\");\n }\n\n /**\n * @deprecated since 1.1. Will be removed in 2.0 and replaced by hide.\n * When invoked, closes the SgdsSidenavItem\n */\n public async closeItem() {\n return await this.hide();\n }\n /**\n * @deprecated since 1.1. Will be removed in 2.0 and replaced by show.\n * When invoked, opens the SgdsSidenavItem\n */\n public async openItem() {\n return await this.show();\n }\n\n firstUpdated() {\n if (!this.href) {\n this.body.hidden = !this.active;\n this.body.style.height = this.active ? \"auto\" : \"0\";\n }\n }\n private _handleSummaryClick() {\n if (this.active) {\n this.hide();\n } else {\n this.show();\n }\n\n this._onToggle();\n this.header.focus();\n }\n private _handleSummaryKeyDown(event: KeyboardEvent) {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n\n if (this.active) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n if (event.key === \"ArrowUp\" || event.key === \"ArrowLeft\") {\n event.preventDefault();\n this.hide();\n }\n\n if (event.key === \"ArrowDown\" || event.key === \"ArrowRight\") {\n event.preventDefault();\n this.show();\n }\n }\n\n @watch(\"active\", { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n if (this.href) return;\n if (this.active) {\n // Show\n const sgdsShow = this.emit(\"sgds-show\", { cancelable: true });\n if (sgdsShow.defaultPrevented) {\n this.active = false;\n return;\n }\n\n await stopAnimations(this.body);\n this.body.hidden = false;\n\n const { keyframes, options } = getAnimation(this, \"sidenav.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 } else {\n // Hide\n const sgdsHide = this.emit(\"sgds-hide\", { cancelable: true });\n if (sgdsHide.defaultPrevented) {\n this.active = true;\n return;\n }\n\n await stopAnimations(this.body);\n\n const { keyframes, options } = getAnimation(this, \"sidenav.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\n render() {\n const withMenuTemplate = html` <button\n @click=${this._handleSummaryClick}\n @keydown=${this._handleSummaryKeyDown}\n class=\"sidenav-btn ${classMap({\n disabled: this.disabled,\n active: this.active\n })} \"\n aria-expanded=\"${this.active}\"\n aria-controls=\"${this.collapseId}\"\n aria-selected=\"${this.active}\"\n id=\"${this.buttonId}\"\n ?disabled=${this.disabled}\n aria-disabled=${this.disabled ? \"true\" : \"false\"}\n >\n <slot name=\"icon\"></slot>\n <slot name=\"title\"></slot>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-chevron-down\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z\"\n />\n </svg>\n </button>\n <div class=\"sidenav-body\" id=\"${this.collapseId}\">\n <ul class=\"sidenav-list\" aria-labelledby=\"${this.buttonId}\">\n <slot></slot>\n </ul>\n </div>`;\n\n const noMenuTemplate = html`\n <a\n href=${this.href}\n @click=${() => this._onClickLink()}\n class=\"sidenav-btn ${classMap({\n disabled: this.disabled,\n active: this.active\n })} \"\n aria-selected=\"${this.active}\"\n ?disabled=${this.disabled}\n aria-disabled=${this.disabled ? \"true\" : \"false\"}\n >\n <slot name=\"icon\"></slot>\n <slot name=\"title\"></slot>\n </a>\n `;\n return html`\n <li class=\"sidenav-item\" aria-haspopup=\"${!this.href}\">${this.href ? noMenuTemplate : withMenuTemplate}</li>\n `;\n }\n}\nsetDefaultAnimation(\"sidenav.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(\"sidenav.hide\", {\n keyframes: [\n { height: \"auto\", opacity: \"1\" },\n { height: \"0\", opacity: \"0\" }\n ],\n options: { duration: 200, easing: \"ease-in-out\" }\n});\nexport default SgdsSidenavItem;\n"],"names":["SgdsElement","genId","waitForEvent","stopAnimations","getAnimation","animateTo","shimKeyframesHeightAuto","html","classMap","styles","__decorate","query","property","watch","setDefaultAnimation"],"mappings":"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"}
@@ -1,7 +1,11 @@
1
1
  import SgdsElement from "../../base/sgds-element";
2
2
  /**
3
3
  *
4
- * @event sgds-toggle - Emitted when the dropdown is clicked.
4
+ * @event sgds-toggle - Emitted when the sidenav item's button is clicked.
5
+ * @event sgds-show - Emitted on show.
6
+ * @event sgds-after-show - Emitted on show after animation has completed.
7
+ * @event sgds-hide - Emitted on hide.
8
+ * @event sgds-after-hide - Emitted on hide after animation has completed.
5
9
  *
6
10
  * @slot - default slot for SgdsSidenavLink element.
7
11
  * @slot title - title slot for the content of SgdsSidenavItem's button / anchor element.
@@ -14,10 +18,9 @@ import SgdsElement from "../../base/sgds-element";
14
18
  */
15
19
  export declare class SgdsSidenavItem extends SgdsElement {
16
20
  static styles: import("lit").CSSResultGroup[];
21
+ body: HTMLElement;
17
22
  /** @internal */
18
- private myCollapse;
19
- /** @internal */
20
- private bsCollapse;
23
+ header: HTMLElement;
21
24
  /**
22
25
  * when true, toggles the sidenav-item to open on first load and set the active stylings.
23
26
  */
@@ -40,18 +43,26 @@ export declare class SgdsSidenavItem extends SgdsElement {
40
43
  private buttonId;
41
44
  /** @internal */
42
45
  private index;
43
- private _onClick;
44
- private _onClickButton;
46
+ private _onToggle;
45
47
  private _onClickLink;
48
+ /** Shows the sidenav item. */
49
+ show(): Promise<void>;
50
+ /** Hide the sidenav item */
51
+ hide(): Promise<void>;
46
52
  /**
53
+ * @deprecated since 1.1. Will be removed in 2.0 and replaced by hide.
47
54
  * When invoked, closes the SgdsSidenavItem
48
55
  */
49
- closeItem(): void;
56
+ closeItem(): Promise<void>;
50
57
  /**
58
+ * @deprecated since 1.1. Will be removed in 2.0 and replaced by show.
51
59
  * When invoked, opens the SgdsSidenavItem
52
60
  */
53
- openItem(): void;
61
+ openItem(): Promise<void>;
54
62
  firstUpdated(): void;
63
+ private _handleSummaryClick;
64
+ private _handleSummaryKeyDown;
65
+ handleOpenChange(): Promise<void>;
55
66
  render(): import("lit-html").TemplateResult<1>;
56
67
  }
57
68
  export default SgdsSidenavItem;
@@ -1,16 +1,22 @@
1
1
  import { __decorate } from 'tslib';
2
- import Collapse from 'bootstrap/js/src/collapse';
3
2
  import { html } from 'lit';
4
- import { property } from 'lit/decorators.js';
3
+ import { query, property } 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
+ import { waitForEvent } from '../../utils/event.js';
8
9
  import genId from '../../utils/generateId.js';
10
+ import { watch } from '../../utils/watch.js';
9
11
  import css_248z from './sgds-sidenav-item2.js';
10
12
 
11
13
  /**
12
14
  *
13
- * @event sgds-toggle - Emitted when the dropdown is clicked.
15
+ * @event sgds-toggle - Emitted when the sidenav item's button is clicked.
16
+ * @event sgds-show - Emitted on show.
17
+ * @event sgds-after-show - Emitted on show after animation has completed.
18
+ * @event sgds-hide - Emitted on hide.
19
+ * @event sgds-after-hide - Emitted on hide after animation has completed.
14
20
  *
15
21
  * @slot - default slot for SgdsSidenavLink element.
16
22
  * @slot title - title slot for the content of SgdsSidenavItem's button / anchor element.
@@ -24,10 +30,6 @@ import css_248z from './sgds-sidenav-item2.js';
24
30
  class SgdsSidenavItem extends SgdsElement {
25
31
  constructor() {
26
32
  super(...arguments);
27
- /** @internal */
28
- this.myCollapse = createRef();
29
- /** @internal */
30
- this.bsCollapse = null;
31
33
  /**
32
34
  * when true, toggles the sidenav-item to open on first load and set the active stylings.
33
35
  */
@@ -51,59 +53,115 @@ class SgdsSidenavItem extends SgdsElement {
51
53
  /** @internal */
52
54
  this.index = "-1";
53
55
  }
54
- _onClick() {
56
+ _onToggle() {
55
57
  this.emit("sgds-toggle", { detail: { index: this.index } });
56
58
  }
57
- _onClickButton() {
58
- this._onClick();
59
- if (this.bsCollapse) {
60
- this.bsCollapse.toggle();
61
- }
62
- }
63
59
  _onClickLink() {
64
- this._onClick();
60
+ this._onToggle();
65
61
  this.active = true;
66
62
  }
63
+ /** Shows the sidenav item. */
64
+ async show() {
65
+ if (this.active) {
66
+ return;
67
+ }
68
+ this.active = true;
69
+ return waitForEvent(this, "sgds-after-show");
70
+ }
71
+ /** Hide the sidenav item */
72
+ async hide() {
73
+ if (!this.active) {
74
+ return;
75
+ }
76
+ this.active = false;
77
+ return waitForEvent(this, "sgds-after-hide");
78
+ }
67
79
  /**
80
+ * @deprecated since 1.1. Will be removed in 2.0 and replaced by hide.
68
81
  * When invoked, closes the SgdsSidenavItem
69
82
  */
70
- closeItem() {
71
- this.active = false;
72
- if (this.bsCollapse)
73
- this.bsCollapse.hide();
83
+ async closeItem() {
84
+ return await this.hide();
74
85
  }
75
86
  /**
87
+ * @deprecated since 1.1. Will be removed in 2.0 and replaced by show.
76
88
  * When invoked, opens the SgdsSidenavItem
77
89
  */
78
- openItem() {
79
- this.active = true;
80
- if (this.bsCollapse)
81
- this.bsCollapse.show();
90
+ async openItem() {
91
+ return await this.show();
82
92
  }
83
93
  firstUpdated() {
84
- // if sidenav has menu, initialise bootstrap collapse
85
94
  if (!this.href) {
86
- this.bsCollapse = new Collapse(this.myCollapse.value, {
87
- toggle: this.active
88
- });
89
- this.myCollapse.value.addEventListener("show.bs.collapse", () => {
90
- this.active = true;
91
- });
92
- this.myCollapse.value.addEventListener("shown.bs.collapse", () => {
93
- this.active = true;
94
- });
95
- this.myCollapse.value.addEventListener("hide.bs.collapse", () => {
96
- this.active = false;
97
- });
98
- this.myCollapse.value.addEventListener("hidden.bs.collapse", () => {
95
+ this.body.hidden = !this.active;
96
+ this.body.style.height = this.active ? "auto" : "0";
97
+ }
98
+ }
99
+ _handleSummaryClick() {
100
+ if (this.active) {
101
+ this.hide();
102
+ }
103
+ else {
104
+ this.show();
105
+ }
106
+ this._onToggle();
107
+ this.header.focus();
108
+ }
109
+ _handleSummaryKeyDown(event) {
110
+ if (event.key === "Enter" || event.key === " ") {
111
+ event.preventDefault();
112
+ if (this.active) {
113
+ this.hide();
114
+ }
115
+ else {
116
+ this.show();
117
+ }
118
+ }
119
+ if (event.key === "ArrowUp" || event.key === "ArrowLeft") {
120
+ event.preventDefault();
121
+ this.hide();
122
+ }
123
+ if (event.key === "ArrowDown" || event.key === "ArrowRight") {
124
+ event.preventDefault();
125
+ this.show();
126
+ }
127
+ }
128
+ async handleOpenChange() {
129
+ if (this.href)
130
+ return;
131
+ if (this.active) {
132
+ // Show
133
+ const sgdsShow = this.emit("sgds-show", { cancelable: true });
134
+ if (sgdsShow.defaultPrevented) {
99
135
  this.active = false;
100
- });
136
+ return;
137
+ }
138
+ await stopAnimations(this.body);
139
+ this.body.hidden = false;
140
+ const { keyframes, options } = getAnimation(this, "sidenav.show");
141
+ await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
142
+ this.body.style.height = "auto";
143
+ this.emit("sgds-after-show");
144
+ }
145
+ else {
146
+ // Hide
147
+ const sgdsHide = this.emit("sgds-hide", { cancelable: true });
148
+ if (sgdsHide.defaultPrevented) {
149
+ this.active = true;
150
+ return;
151
+ }
152
+ await stopAnimations(this.body);
153
+ const { keyframes, options } = getAnimation(this, "sidenav.hide");
154
+ await animateTo(this.body, shimKeyframesHeightAuto(keyframes, this.body.scrollHeight), options);
155
+ this.body.hidden = true;
156
+ this.body.style.height = "auto";
157
+ this.emit("sgds-after-hide");
101
158
  }
102
159
  }
103
160
  render() {
104
161
  const withMenuTemplate = html ` <button
105
- @click=${() => this._onClickButton()}
106
- class="collapsed sidenav-btn ${classMap({
162
+ @click=${this._handleSummaryClick}
163
+ @keydown=${this._handleSummaryKeyDown}
164
+ class="sidenav-btn ${classMap({
107
165
  disabled: this.disabled,
108
166
  active: this.active
109
167
  })} "
@@ -130,7 +188,7 @@ class SgdsSidenavItem extends SgdsElement {
130
188
  />
131
189
  </svg>
132
190
  </button>
133
- <div class="collapse" ${ref(this.myCollapse)} id="${this.collapseId}">
191
+ <div class="sidenav-body" id="${this.collapseId}">
134
192
  <ul class="sidenav-list" aria-labelledby="${this.buttonId}">
135
193
  <slot></slot>
136
194
  </ul>
@@ -157,6 +215,12 @@ class SgdsSidenavItem extends SgdsElement {
157
215
  }
158
216
  }
159
217
  SgdsSidenavItem.styles = [SgdsElement.styles, css_248z];
218
+ __decorate([
219
+ query(".sidenav-body")
220
+ ], SgdsSidenavItem.prototype, "body", void 0);
221
+ __decorate([
222
+ query(".sidenav-btn")
223
+ ], SgdsSidenavItem.prototype, "header", void 0);
160
224
  __decorate([
161
225
  property({ type: Boolean })
162
226
  ], SgdsSidenavItem.prototype, "active", void 0);
@@ -166,6 +230,23 @@ __decorate([
166
230
  __decorate([
167
231
  property({ type: Boolean, reflect: true })
168
232
  ], SgdsSidenavItem.prototype, "disabled", void 0);
233
+ __decorate([
234
+ watch("active", { waitUntilFirstUpdate: true })
235
+ ], SgdsSidenavItem.prototype, "handleOpenChange", null);
236
+ setDefaultAnimation("sidenav.show", {
237
+ keyframes: [
238
+ { height: "0", opacity: "0" },
239
+ { height: "auto", opacity: "1" }
240
+ ],
241
+ options: { duration: 200, easing: "ease-in-out" }
242
+ });
243
+ setDefaultAnimation("sidenav.hide", {
244
+ keyframes: [
245
+ { height: "auto", opacity: "1" },
246
+ { height: "0", opacity: "0" }
247
+ ],
248
+ options: { duration: 200, easing: "ease-in-out" }
249
+ });
169
250
 
170
251
  export { SgdsSidenavItem, SgdsSidenavItem as default };
171
252
  //# sourceMappingURL=sgds-sidenav-item.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sgds-sidenav-item.js","sources":["../../../src/components/Sidenav/sgds-sidenav-item.ts"],"sourcesContent":["import Collapse from \"bootstrap/js/src/collapse\";\nimport type { Collapse as BsCollapse } from \"bootstrap\";\nimport { html } from \"lit\";\nimport { property } 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 genId from \"../../utils/generateId\";\nimport styles from \"./sgds-sidenav-item.scss\";\n\n/**\n *\n * @event sgds-toggle - Emitted when the dropdown is clicked.\n *\n * @slot - default slot for SgdsSidenavLink element.\n * @slot title - title slot for the content of SgdsSidenavItem's button / anchor element.\n * @slot icon - icon slot for the content of SgdsSidenavItem's button / anchor element.\n *\n * @cssproperty --sidenav-item-button-border-left-width - sidenav item left border width\n * @cssproperty --sidenav-item-padding-x - sidenav item padding left and right\n * @cssproperty --sidenav-item-padding-y - sidenav item padding top and bottom\n * @cssproperty --sidenav-item-icon-title-gap - the flex gap between sidenav item icon and title\n */\n\nexport class SgdsSidenavItem extends SgdsElement {\n static styles = [SgdsElement.styles, styles];\n\n /** @internal */\n private myCollapse: Ref<HTMLElement> = createRef();\n /** @internal */\n private bsCollapse: BsCollapse = null;\n\n /**\n * when true, toggles the sidenav-item to open on first load and set the active stylings.\n */\n @property({ type: Boolean })\n active = false;\n\n /**\n * When defined, converts SgdsSidenavItem from a button element to an Anchor element. In this case, only one level of navigation is allowed\n */\n @property({ type: String })\n href = \"\";\n\n /**\n * Disables the SgdsSidenavItem\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * @internal Forwards to id attribute of div.collapse and aria-controls attribute of button in SgdsSidenavItem. By default, SgdsSidenavItem auto-generates a unique id. Override the default id by specifiying your own\n */\n\n private collapseId: string = genId(\"sidenav\", \"collapse\");\n\n /**\n * @internal Forwards to id attribute of button and aria-labelledby attribute of ul.sidenav-list in SgdsSidenavItem. By default, SgdsSidenavItem auto-generates a unique id. Override the default id by specifiying your own\n */\n private buttonId: string = genId(\"sidenav\", \"button\");\n\n /** @internal */\n private index = \"-1\";\n\n private _onClick() {\n this.emit(\"sgds-toggle\", { detail: { index: this.index } });\n }\n\n private _onClickButton() {\n this._onClick();\n if (this.bsCollapse) {\n this.bsCollapse.toggle();\n }\n }\n private _onClickLink() {\n this._onClick();\n this.active = true;\n }\n\n /**\n * When invoked, closes the SgdsSidenavItem\n */\n public closeItem() {\n this.active = false;\n if (this.bsCollapse) this.bsCollapse.hide();\n }\n /**\n * When invoked, opens the SgdsSidenavItem\n */\n public openItem() {\n this.active = true;\n if (this.bsCollapse) this.bsCollapse.show();\n }\n\n firstUpdated() {\n // if sidenav has menu, initialise bootstrap collapse\n if (!this.href) {\n this.bsCollapse = new Collapse(this.myCollapse.value, {\n toggle: this.active\n });\n\n this.myCollapse.value.addEventListener(\"show.bs.collapse\", () => {\n this.active = true;\n });\n this.myCollapse.value.addEventListener(\"shown.bs.collapse\", () => {\n this.active = true;\n });\n this.myCollapse.value.addEventListener(\"hide.bs.collapse\", () => {\n this.active = false;\n });\n this.myCollapse.value.addEventListener(\"hidden.bs.collapse\", () => {\n this.active = false;\n });\n }\n }\n\n render() {\n const withMenuTemplate = html` <button\n @click=${() => this._onClickButton()}\n class=\"collapsed sidenav-btn ${classMap({\n disabled: this.disabled,\n active: this.active\n })} \"\n aria-expanded=\"${this.active}\"\n aria-controls=\"${this.collapseId}\"\n aria-selected=\"${this.active}\"\n id=\"${this.buttonId}\"\n ?disabled=${this.disabled}\n aria-disabled=${this.disabled ? \"true\" : \"false\"}\n >\n <slot name=\"icon\"></slot>\n <slot name=\"title\"></slot>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-chevron-down\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z\"\n />\n </svg>\n </button>\n <div class=\"collapse\" ${ref(this.myCollapse)} id=\"${this.collapseId}\">\n <ul class=\"sidenav-list\" aria-labelledby=\"${this.buttonId}\">\n <slot></slot>\n </ul>\n </div>`;\n\n const noMenuTemplate = html`\n <a\n href=${this.href}\n @click=${() => this._onClickLink()}\n class=\"sidenav-btn ${classMap({\n disabled: this.disabled,\n active: this.active\n })} \"\n aria-selected=\"${this.active}\"\n ?disabled=${this.disabled}\n aria-disabled=${this.disabled ? \"true\" : \"false\"}\n >\n <slot name=\"icon\"></slot>\n <slot name=\"title\"></slot>\n </a>\n `;\n return html`\n <li class=\"sidenav-item\" aria-haspopup=\"${!this.href}\">${this.href ? noMenuTemplate : withMenuTemplate}</li>\n `;\n }\n}\n\nexport default SgdsSidenavItem;\n"],"names":["styles"],"mappings":"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"}
1
+ {"version":3,"file":"sgds-sidenav-item.js","sources":["../../../src/components/Sidenav/sgds-sidenav-item.ts"],"sourcesContent":["import { html } from \"lit\";\nimport { property, query } 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 { waitForEvent } from \"../../utils/event\";\nimport genId from \"../../utils/generateId\";\nimport { watch } from \"../../utils/watch\";\nimport styles from \"./sgds-sidenav-item.scss\";\n\n/**\n *\n * @event sgds-toggle - Emitted when the sidenav item's button is clicked.\n * @event sgds-show - Emitted on show.\n * @event sgds-after-show - Emitted on show after animation has completed.\n * @event sgds-hide - Emitted on hide.\n * @event sgds-after-hide - Emitted on hide after animation has completed.\n *\n * @slot - default slot for SgdsSidenavLink element.\n * @slot title - title slot for the content of SgdsSidenavItem's button / anchor element.\n * @slot icon - icon slot for the content of SgdsSidenavItem's button / anchor element.\n *\n * @cssproperty --sidenav-item-button-border-left-width - sidenav item left border width\n * @cssproperty --sidenav-item-padding-x - sidenav item padding left and right\n * @cssproperty --sidenav-item-padding-y - sidenav item padding top and bottom\n * @cssproperty --sidenav-item-icon-title-gap - the flex gap between sidenav item icon and title\n */\n\nexport class SgdsSidenavItem extends SgdsElement {\n static styles = [SgdsElement.styles, styles];\n\n @query(\".sidenav-body\") body: HTMLElement;\n /** @internal */\n @query(\".sidenav-btn\") header: HTMLElement;\n /**\n * when true, toggles the sidenav-item to open on first load and set the active stylings.\n */\n @property({ type: Boolean })\n active = false;\n\n /**\n * When defined, converts SgdsSidenavItem from a button element to an Anchor element. In this case, only one level of navigation is allowed\n */\n @property({ type: String })\n href = \"\";\n\n /**\n * Disables the SgdsSidenavItem\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * @internal Forwards to id attribute of div.collapse and aria-controls attribute of button in SgdsSidenavItem. By default, SgdsSidenavItem auto-generates a unique id. Override the default id by specifiying your own\n */\n\n private collapseId: string = genId(\"sidenav\", \"collapse\");\n\n /**\n * @internal Forwards to id attribute of button and aria-labelledby attribute of ul.sidenav-list in SgdsSidenavItem. By default, SgdsSidenavItem auto-generates a unique id. Override the default id by specifiying your own\n */\n private buttonId: string = genId(\"sidenav\", \"button\");\n\n /** @internal */\n private index = \"-1\";\n\n private _onToggle() {\n this.emit(\"sgds-toggle\", { detail: { index: this.index } });\n }\n\n private _onClickLink() {\n this._onToggle();\n this.active = true;\n }\n\n /** Shows the sidenav item. */\n public async show() {\n if (this.active) {\n return;\n }\n\n this.active = true;\n return waitForEvent(this, \"sgds-after-show\");\n }\n\n /** Hide the sidenav item */\n public async hide() {\n if (!this.active) {\n return;\n }\n this.active = false;\n return waitForEvent(this, \"sgds-after-hide\");\n }\n\n /**\n * @deprecated since 1.1. Will be removed in 2.0 and replaced by hide.\n * When invoked, closes the SgdsSidenavItem\n */\n public async closeItem() {\n return await this.hide();\n }\n /**\n * @deprecated since 1.1. Will be removed in 2.0 and replaced by show.\n * When invoked, opens the SgdsSidenavItem\n */\n public async openItem() {\n return await this.show();\n }\n\n firstUpdated() {\n if (!this.href) {\n this.body.hidden = !this.active;\n this.body.style.height = this.active ? \"auto\" : \"0\";\n }\n }\n private _handleSummaryClick() {\n if (this.active) {\n this.hide();\n } else {\n this.show();\n }\n\n this._onToggle();\n this.header.focus();\n }\n private _handleSummaryKeyDown(event: KeyboardEvent) {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n\n if (this.active) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n if (event.key === \"ArrowUp\" || event.key === \"ArrowLeft\") {\n event.preventDefault();\n this.hide();\n }\n\n if (event.key === \"ArrowDown\" || event.key === \"ArrowRight\") {\n event.preventDefault();\n this.show();\n }\n }\n\n @watch(\"active\", { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n if (this.href) return;\n if (this.active) {\n // Show\n const sgdsShow = this.emit(\"sgds-show\", { cancelable: true });\n if (sgdsShow.defaultPrevented) {\n this.active = false;\n return;\n }\n\n await stopAnimations(this.body);\n this.body.hidden = false;\n\n const { keyframes, options } = getAnimation(this, \"sidenav.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 } else {\n // Hide\n const sgdsHide = this.emit(\"sgds-hide\", { cancelable: true });\n if (sgdsHide.defaultPrevented) {\n this.active = true;\n return;\n }\n\n await stopAnimations(this.body);\n\n const { keyframes, options } = getAnimation(this, \"sidenav.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\n render() {\n const withMenuTemplate = html` <button\n @click=${this._handleSummaryClick}\n @keydown=${this._handleSummaryKeyDown}\n class=\"sidenav-btn ${classMap({\n disabled: this.disabled,\n active: this.active\n })} \"\n aria-expanded=\"${this.active}\"\n aria-controls=\"${this.collapseId}\"\n aria-selected=\"${this.active}\"\n id=\"${this.buttonId}\"\n ?disabled=${this.disabled}\n aria-disabled=${this.disabled ? \"true\" : \"false\"}\n >\n <slot name=\"icon\"></slot>\n <slot name=\"title\"></slot>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-chevron-down\"\n viewBox=\"0 0 16 16\"\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z\"\n />\n </svg>\n </button>\n <div class=\"sidenav-body\" id=\"${this.collapseId}\">\n <ul class=\"sidenav-list\" aria-labelledby=\"${this.buttonId}\">\n <slot></slot>\n </ul>\n </div>`;\n\n const noMenuTemplate = html`\n <a\n href=${this.href}\n @click=${() => this._onClickLink()}\n class=\"sidenav-btn ${classMap({\n disabled: this.disabled,\n active: this.active\n })} \"\n aria-selected=\"${this.active}\"\n ?disabled=${this.disabled}\n aria-disabled=${this.disabled ? \"true\" : \"false\"}\n >\n <slot name=\"icon\"></slot>\n <slot name=\"title\"></slot>\n </a>\n `;\n return html`\n <li class=\"sidenav-item\" aria-haspopup=\"${!this.href}\">${this.href ? noMenuTemplate : withMenuTemplate}</li>\n `;\n }\n}\nsetDefaultAnimation(\"sidenav.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(\"sidenav.hide\", {\n keyframes: [\n { height: \"auto\", opacity: \"1\" },\n { height: \"0\", opacity: \"0\" }\n ],\n options: { duration: 200, easing: \"ease-in-out\" }\n});\nexport default SgdsSidenavItem;\n"],"names":["styles"],"mappings":"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"}