@zanichelli/albe-web-components 19.2.1-RC → 19.2.2

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 (216) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/cjs/{index-938c9669.js → index-c38e5b9e.js} +2 -2
  3. package/dist/cjs/{index-938c9669.js.map → index-c38e5b9e.js.map} +1 -1
  4. package/dist/cjs/index.cjs.js +1 -1
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/{utils-e8b453d5.js → utils-b1859d65.js} +7 -1
  7. package/dist/cjs/utils-b1859d65.js.map +1 -0
  8. package/dist/cjs/web-components-library.cjs.js +1 -1
  9. package/dist/cjs/z-app-header_12.cjs.entry.js +5 -4
  10. package/dist/cjs/z-app-header_12.cjs.entry.js.map +1 -1
  11. package/dist/cjs/z-book-card-deprecated.cjs.entry.js +1 -1
  12. package/dist/cjs/z-book-card.cjs.entry.js +1 -1
  13. package/dist/cjs/z-book-card.cjs.entry.js.map +1 -1
  14. package/dist/cjs/z-breadcrumb.cjs.entry.js +1 -1
  15. package/dist/cjs/z-color-picker.cjs.entry.js +1 -1
  16. package/dist/cjs/z-combobox.cjs.entry.js +125 -96
  17. package/dist/cjs/z-combobox.cjs.entry.js.map +1 -1
  18. package/dist/cjs/z-menu.cjs.entry.js +1 -1
  19. package/dist/cjs/z-myz-card-info.cjs.entry.js +1 -1
  20. package/dist/cjs/z-myz-list-item.cjs.entry.js +1 -1
  21. package/dist/cjs/z-popover.cjs.entry.js +1 -1
  22. package/dist/cjs/z-select.cjs.entry.js +100 -134
  23. package/dist/cjs/z-select.cjs.entry.js.map +1 -1
  24. package/dist/cjs/z-skip-to-content.cjs.entry.js +1 -1
  25. package/dist/cjs/z-slideshow.cjs.entry.js +1 -1
  26. package/dist/cjs/z-table.cjs.entry.js +2 -2
  27. package/dist/cjs/z-toast-notification-list.cjs.entry.js +2 -1
  28. package/dist/cjs/z-toast-notification-list.cjs.entry.js.map +1 -1
  29. package/dist/cjs/z-toggle-switch.cjs.entry.js +1 -1
  30. package/dist/cjs/z-tool.cjs.entry.js +1 -1
  31. package/dist/cjs/z-tr.cjs.entry.js +2 -2
  32. package/dist/collection/components/book-card/z-book-card/styles.css +2 -1
  33. package/dist/collection/components/list/z-list-group/index.js +21 -2
  34. package/dist/collection/components/list/z-list-group/index.js.map +1 -1
  35. package/dist/collection/components/list/z-list-group/index.stories.js +3 -0
  36. package/dist/collection/components/list/z-list-group/index.stories.js.map +1 -1
  37. package/dist/collection/components/z-combobox/index.js +141 -98
  38. package/dist/collection/components/z-combobox/index.js.map +1 -1
  39. package/dist/collection/components/z-combobox/index.stories.js +2 -0
  40. package/dist/collection/components/z-combobox/index.stories.js.map +1 -1
  41. package/dist/collection/components/z-combobox/styles.css +41 -0
  42. package/dist/collection/components/z-searchbar/styles.css +1 -1
  43. package/dist/collection/components/z-select/index.js +99 -142
  44. package/dist/collection/components/z-select/index.js.map +1 -1
  45. package/dist/collection/components/z-select/styles.css +9 -2
  46. package/dist/collection/components/z-toast-notification-list/index.js +2 -1
  47. package/dist/collection/components/z-toast-notification-list/index.js.map +1 -1
  48. package/dist/collection/utils/utils.js +5 -0
  49. package/dist/collection/utils/utils.js.map +1 -1
  50. package/dist/components/index12.js +1 -1
  51. package/dist/components/index16.js +5 -3
  52. package/dist/components/index16.js.map +1 -1
  53. package/dist/components/index24.js +1 -1
  54. package/dist/components/index25.js +2 -2
  55. package/dist/components/index25.js.map +1 -1
  56. package/dist/components/utils.js +6 -1
  57. package/dist/components/utils.js.map +1 -1
  58. package/dist/components/z-book-card.js +1 -1
  59. package/dist/components/z-book-card.js.map +1 -1
  60. package/dist/components/z-combobox.js +128 -100
  61. package/dist/components/z-combobox.js.map +1 -1
  62. package/dist/components/z-select.js +101 -135
  63. package/dist/components/z-select.js.map +1 -1
  64. package/dist/components/z-skip-to-content.js +1 -1
  65. package/dist/components/z-slideshow.js +1 -1
  66. package/dist/components/z-toast-notification-list.js +2 -1
  67. package/dist/components/z-toast-notification-list.js.map +1 -1
  68. package/dist/esm/{index-83248f5c.js → index-a0b957e0.js} +2 -2
  69. package/dist/esm/{index-83248f5c.js.map → index-a0b957e0.js.map} +1 -1
  70. package/dist/esm/index.js +1 -1
  71. package/dist/esm/loader.js +1 -1
  72. package/dist/esm/{utils-1b64bcd9.js → utils-8d6ca808.js} +7 -2
  73. package/dist/esm/utils-8d6ca808.js.map +1 -0
  74. package/dist/esm/web-components-library.js +1 -1
  75. package/dist/esm/z-app-header_12.entry.js +5 -4
  76. package/dist/esm/z-app-header_12.entry.js.map +1 -1
  77. package/dist/esm/z-book-card-deprecated.entry.js +1 -1
  78. package/dist/esm/z-book-card.entry.js +1 -1
  79. package/dist/esm/z-book-card.entry.js.map +1 -1
  80. package/dist/esm/z-breadcrumb.entry.js +1 -1
  81. package/dist/esm/z-color-picker.entry.js +1 -1
  82. package/dist/esm/z-combobox.entry.js +125 -96
  83. package/dist/esm/z-combobox.entry.js.map +1 -1
  84. package/dist/esm/z-menu.entry.js +1 -1
  85. package/dist/esm/z-myz-card-info.entry.js +1 -1
  86. package/dist/esm/z-myz-list-item.entry.js +1 -1
  87. package/dist/esm/z-popover.entry.js +1 -1
  88. package/dist/esm/z-select.entry.js +100 -134
  89. package/dist/esm/z-select.entry.js.map +1 -1
  90. package/dist/esm/z-skip-to-content.entry.js +1 -1
  91. package/dist/esm/z-slideshow.entry.js +1 -1
  92. package/dist/esm/z-table.entry.js +2 -2
  93. package/dist/esm/z-toast-notification-list.entry.js +2 -1
  94. package/dist/esm/z-toast-notification-list.entry.js.map +1 -1
  95. package/dist/esm/z-toggle-switch.entry.js +1 -1
  96. package/dist/esm/z-tool.entry.js +1 -1
  97. package/dist/esm/z-tr.entry.js +2 -2
  98. package/dist/types/components/list/z-list-group/index.d.ts +4 -0
  99. package/dist/types/components/list/z-list-group/index.stories.d.ts +1 -0
  100. package/dist/types/components/z-combobox/index.d.ts +10 -11
  101. package/dist/types/components/z-combobox/index.stories.d.ts +1 -0
  102. package/dist/types/components/z-select/index.d.ts +5 -7
  103. package/dist/types/components.d.ts +16 -0
  104. package/dist/types/utils/utils.d.ts +2 -0
  105. package/dist/web-components-library/index.esm.js +1 -1
  106. package/{www/build/p-a5146ef3.entry.js → dist/web-components-library/p-05be939d.entry.js} +2 -2
  107. package/dist/web-components-library/{p-a5146ef3.entry.js.map → p-05be939d.entry.js.map} +1 -1
  108. package/dist/web-components-library/{p-1a0c206d.js → p-061e28d6.js} +2 -2
  109. package/dist/web-components-library/p-061e28d6.js.map +1 -0
  110. package/dist/web-components-library/{p-4844c774.js → p-0b03b0e3.js} +2 -2
  111. package/dist/web-components-library/p-1b972597.entry.js +2 -0
  112. package/dist/web-components-library/{p-862989b6.entry.js.map → p-1b972597.entry.js.map} +1 -1
  113. package/dist/web-components-library/{p-19103e70.entry.js → p-35d73edf.entry.js} +2 -2
  114. package/dist/web-components-library/p-43adca09.entry.js +2 -0
  115. package/{www/build/p-2d4cf6ff.entry.js.map → dist/web-components-library/p-43adca09.entry.js.map} +1 -1
  116. package/{www/build/p-47813782.entry.js → dist/web-components-library/p-447a6391.entry.js} +2 -2
  117. package/dist/web-components-library/p-8503c87a.entry.js +2 -0
  118. package/dist/web-components-library/p-8503c87a.entry.js.map +1 -0
  119. package/dist/web-components-library/{p-a8609510.entry.js → p-869295ce.entry.js} +2 -2
  120. package/dist/web-components-library/{p-771dea79.entry.js → p-9814f864.entry.js} +2 -2
  121. package/{www/build/p-c5d52872.entry.js → dist/web-components-library/p-a3f9a5da.entry.js} +2 -2
  122. package/dist/web-components-library/p-a8790237.entry.js +2 -0
  123. package/dist/web-components-library/p-a8790237.entry.js.map +1 -0
  124. package/dist/web-components-library/{p-613987cd.entry.js → p-accbc381.entry.js} +2 -2
  125. package/dist/web-components-library/{p-613987cd.entry.js.map → p-accbc381.entry.js.map} +1 -1
  126. package/{www/build/p-8a53fefb.entry.js → dist/web-components-library/p-b0324c7d.entry.js} +2 -2
  127. package/dist/web-components-library/{p-c12f93e4.entry.js → p-bd76ca35.entry.js} +2 -2
  128. package/dist/web-components-library/p-c3e03e41.entry.js +2 -0
  129. package/dist/web-components-library/p-c3e03e41.entry.js.map +1 -0
  130. package/dist/web-components-library/{p-5905cca0.entry.js → p-ec1270db.entry.js} +2 -2
  131. package/{www/build/p-55e5e53a.entry.js → dist/web-components-library/p-f2c2ad04.entry.js} +2 -2
  132. package/dist/web-components-library/p-f7e65eb0.entry.js +2 -0
  133. package/dist/web-components-library/{p-26ed6c96.entry.js → p-fbce9614.entry.js} +2 -2
  134. package/dist/web-components-library/web-components-library.esm.js +1 -1
  135. package/dist/web-components-library/web-components-library.esm.js.map +1 -1
  136. package/package.json +2 -3
  137. package/www/build/index.esm.js +1 -1
  138. package/{dist/web-components-library/p-a5146ef3.entry.js → www/build/p-05be939d.entry.js} +2 -2
  139. package/www/build/{p-a5146ef3.entry.js.map → p-05be939d.entry.js.map} +1 -1
  140. package/www/build/{p-1a0c206d.js → p-061e28d6.js} +2 -2
  141. package/www/build/p-061e28d6.js.map +1 -0
  142. package/www/build/{p-4844c774.js → p-0b03b0e3.js} +2 -2
  143. package/www/build/p-1b972597.entry.js +2 -0
  144. package/www/build/{p-862989b6.entry.js.map → p-1b972597.entry.js.map} +1 -1
  145. package/www/build/{p-19103e70.entry.js → p-35d73edf.entry.js} +2 -2
  146. package/www/build/p-43adca09.entry.js +2 -0
  147. package/{dist/web-components-library/p-2d4cf6ff.entry.js.map → www/build/p-43adca09.entry.js.map} +1 -1
  148. package/{dist/web-components-library/p-47813782.entry.js → www/build/p-447a6391.entry.js} +2 -2
  149. package/www/build/p-4b38182a.js +2 -0
  150. package/www/build/p-8503c87a.entry.js +2 -0
  151. package/www/build/p-8503c87a.entry.js.map +1 -0
  152. package/www/build/{p-a8609510.entry.js → p-869295ce.entry.js} +2 -2
  153. package/www/build/{p-771dea79.entry.js → p-9814f864.entry.js} +2 -2
  154. package/{dist/web-components-library/p-c5d52872.entry.js → www/build/p-a3f9a5da.entry.js} +2 -2
  155. package/www/build/p-a8790237.entry.js +2 -0
  156. package/www/build/p-a8790237.entry.js.map +1 -0
  157. package/www/build/{p-613987cd.entry.js → p-accbc381.entry.js} +2 -2
  158. package/www/build/{p-613987cd.entry.js.map → p-accbc381.entry.js.map} +1 -1
  159. package/{dist/web-components-library/p-8a53fefb.entry.js → www/build/p-b0324c7d.entry.js} +2 -2
  160. package/www/build/{p-c12f93e4.entry.js → p-bd76ca35.entry.js} +2 -2
  161. package/www/build/p-c3e03e41.entry.js +2 -0
  162. package/www/build/p-c3e03e41.entry.js.map +1 -0
  163. package/www/build/{p-5905cca0.entry.js → p-ec1270db.entry.js} +2 -2
  164. package/{dist/web-components-library/p-55e5e53a.entry.js → www/build/p-f2c2ad04.entry.js} +2 -2
  165. package/www/build/p-f7e65eb0.entry.js +2 -0
  166. package/www/build/{p-26ed6c96.entry.js → p-fbce9614.entry.js} +2 -2
  167. package/www/build/web-components-library.esm.js +1 -1
  168. package/www/build/web-components-library.esm.js.map +1 -1
  169. package/www/index.html +1 -1
  170. package/dist/cjs/utils-e8b453d5.js.map +0 -1
  171. package/dist/esm/utils-1b64bcd9.js.map +0 -1
  172. package/dist/web-components-library/p-1a0c206d.js.map +0 -1
  173. package/dist/web-components-library/p-2d4cf6ff.entry.js +0 -2
  174. package/dist/web-components-library/p-3ba7621b.entry.js +0 -2
  175. package/dist/web-components-library/p-58aeaf21.entry.js +0 -2
  176. package/dist/web-components-library/p-58aeaf21.entry.js.map +0 -1
  177. package/dist/web-components-library/p-5e2f6ab7.entry.js +0 -2
  178. package/dist/web-components-library/p-5e2f6ab7.entry.js.map +0 -1
  179. package/dist/web-components-library/p-862989b6.entry.js +0 -2
  180. package/dist/web-components-library/p-daa442e6.entry.js +0 -2
  181. package/dist/web-components-library/p-daa442e6.entry.js.map +0 -1
  182. package/www/build/p-156f9df4.js +0 -2
  183. package/www/build/p-1a0c206d.js.map +0 -1
  184. package/www/build/p-2d4cf6ff.entry.js +0 -2
  185. package/www/build/p-3ba7621b.entry.js +0 -2
  186. package/www/build/p-58aeaf21.entry.js +0 -2
  187. package/www/build/p-58aeaf21.entry.js.map +0 -1
  188. package/www/build/p-5e2f6ab7.entry.js +0 -2
  189. package/www/build/p-5e2f6ab7.entry.js.map +0 -1
  190. package/www/build/p-862989b6.entry.js +0 -2
  191. package/www/build/p-daa442e6.entry.js +0 -2
  192. package/www/build/p-daa442e6.entry.js.map +0 -1
  193. /package/dist/web-components-library/{p-4844c774.js.map → p-0b03b0e3.js.map} +0 -0
  194. /package/dist/web-components-library/{p-19103e70.entry.js.map → p-35d73edf.entry.js.map} +0 -0
  195. /package/dist/web-components-library/{p-47813782.entry.js.map → p-447a6391.entry.js.map} +0 -0
  196. /package/dist/web-components-library/{p-a8609510.entry.js.map → p-869295ce.entry.js.map} +0 -0
  197. /package/dist/web-components-library/{p-771dea79.entry.js.map → p-9814f864.entry.js.map} +0 -0
  198. /package/dist/web-components-library/{p-c5d52872.entry.js.map → p-a3f9a5da.entry.js.map} +0 -0
  199. /package/dist/web-components-library/{p-8a53fefb.entry.js.map → p-b0324c7d.entry.js.map} +0 -0
  200. /package/dist/web-components-library/{p-c12f93e4.entry.js.map → p-bd76ca35.entry.js.map} +0 -0
  201. /package/dist/web-components-library/{p-5905cca0.entry.js.map → p-ec1270db.entry.js.map} +0 -0
  202. /package/dist/web-components-library/{p-55e5e53a.entry.js.map → p-f2c2ad04.entry.js.map} +0 -0
  203. /package/dist/web-components-library/{p-3ba7621b.entry.js.map → p-f7e65eb0.entry.js.map} +0 -0
  204. /package/dist/web-components-library/{p-26ed6c96.entry.js.map → p-fbce9614.entry.js.map} +0 -0
  205. /package/www/build/{p-4844c774.js.map → p-0b03b0e3.js.map} +0 -0
  206. /package/www/build/{p-19103e70.entry.js.map → p-35d73edf.entry.js.map} +0 -0
  207. /package/www/build/{p-47813782.entry.js.map → p-447a6391.entry.js.map} +0 -0
  208. /package/www/build/{p-a8609510.entry.js.map → p-869295ce.entry.js.map} +0 -0
  209. /package/www/build/{p-771dea79.entry.js.map → p-9814f864.entry.js.map} +0 -0
  210. /package/www/build/{p-c5d52872.entry.js.map → p-a3f9a5da.entry.js.map} +0 -0
  211. /package/www/build/{p-8a53fefb.entry.js.map → p-b0324c7d.entry.js.map} +0 -0
  212. /package/www/build/{p-c12f93e4.entry.js.map → p-bd76ca35.entry.js.map} +0 -0
  213. /package/www/build/{p-5905cca0.entry.js.map → p-ec1270db.entry.js.map} +0 -0
  214. /package/www/build/{p-55e5e53a.entry.js.map → p-f2c2ad04.entry.js.map} +0 -0
  215. /package/www/build/{p-3ba7621b.entry.js.map → p-f7e65eb0.entry.js.map} +0 -0
  216. /package/www/build/{p-26ed6c96.entry.js.map → p-fbce9614.entry.js.map} +0 -0
@@ -1,12 +1,9 @@
1
1
  import { h } from "@stencil/core";
2
2
  import { ControlSize, KeyboardCode, ListDividerType, ListSize } from "../../beans";
3
- import { boolean, getClickedElement, getElementTree, randomId } from "../../utils/utils";
3
+ import { boolean, getClickedElement, getElementTree, getPlainText, randomId } from "../../utils/utils";
4
4
  export class ZSelect {
5
5
  constructor() {
6
- this.flattenedList = [];
7
6
  this.itemsList = [];
8
- this.itemIdKeyMap = {};
9
- this.resetKey = -1;
10
7
  this.htmlid = `id-${randomId()}`;
11
8
  this.items = [];
12
9
  this.name = undefined;
@@ -37,9 +34,6 @@ export class ZSelect {
37
34
  this.itemsList = this.getInitialItemsArray();
38
35
  this.selectedItem = this.findSelectedItem(this.itemsList);
39
36
  }
40
- getFocusedItemHandler(e) {
41
- this.focusedItemId = e.target.id;
42
- }
43
37
  /** get the input selected options */
44
38
  async getSelectedItem() {
45
39
  return this.selectedItem;
@@ -79,7 +73,6 @@ export class ZSelect {
79
73
  }
80
74
  componentWillRender() {
81
75
  this.filterItems(this.searchString);
82
- this.updateFlattenedList();
83
76
  }
84
77
  getInitialItemsArray() {
85
78
  return typeof this.items === "string" ? JSON.parse(this.items) : this.items;
@@ -94,6 +87,15 @@ export class ZSelect {
94
87
  var _a;
95
88
  return (_a = this.selectedItem) === null || _a === void 0 ? void 0 : _a.id;
96
89
  }
90
+ getOptionId(item) {
91
+ return `${this.htmlid}_key_${item.id}`;
92
+ }
93
+ getResetOptionId() {
94
+ return `${this.htmlid}_key_reset`;
95
+ }
96
+ getItemIdFromOptionId(optionId) {
97
+ return optionId.replace(`${this.htmlid}_key_`, ``);
98
+ }
97
99
  getGroupedItems() {
98
100
  if (!this.itemsList.length) {
99
101
  return [];
@@ -105,33 +107,13 @@ export class ZSelect {
105
107
  return group;
106
108
  }, {}));
107
109
  }
108
- updateFlattenedList() {
109
- let orderedItems;
110
- if (this.hasGroupItems) {
111
- orderedItems = this.getGroupedItems()
112
- .map((item) => item[1])
113
- .flat();
114
- }
115
- else {
116
- orderedItems = this.itemsList;
117
- }
118
- this.flattenedList = this.flattenTreeItems(orderedItems);
119
- this.itemIdKeyMap = {};
120
- this.flattenedList.forEach(({ item, key }) => {
121
- this.itemIdKeyMap[item.id] = key;
122
- });
123
- }
124
- getPlainText(html) {
125
- const doc = new DOMParser().parseFromString(html, "text/html");
126
- return doc.body.textContent || "";
127
- }
128
110
  filterItems(searchString) {
129
111
  let prevList = this.mapSelectedItemToItemsArray();
130
112
  if (!(searchString === null || searchString === void 0 ? void 0 : searchString.length)) {
131
113
  this.itemsList = prevList;
132
114
  return;
133
115
  }
134
- prevList = prevList.map((item) => (Object.assign(Object.assign({}, item), { name: this.getPlainText(item.name) })));
116
+ prevList = prevList.map((item) => (Object.assign(Object.assign({}, item), { name: getPlainText(item.name) })));
135
117
  if (this.hasTreeItems) {
136
118
  this.itemsList = this.filterTree(prevList, searchString, false);
137
119
  }
@@ -153,7 +135,7 @@ export class ZSelect {
153
135
  const match = item.name.toUpperCase().includes(searchString.toUpperCase());
154
136
  const newItem = Object.assign({}, item);
155
137
  if (newItem.children && newItem.children.length > 0) {
156
- newItem.children = this.filterTree(newItem.children.map((item) => (Object.assign(Object.assign({}, item), { name: this.getPlainText(item.name) }))), searchString, match);
138
+ newItem.children = this.filterTree(newItem.children.map((item) => (Object.assign(Object.assign({}, item), { name: getPlainText(item.name) }))), searchString, match);
157
139
  }
158
140
  if (match) {
159
141
  newItem.name = this.getHighlightedText(newItem.name, searchString);
@@ -227,83 +209,76 @@ export class ZSelect {
227
209
  this.searchString = null;
228
210
  }
229
211
  }
230
- flattenTreeItems(items) {
231
- const flatItems = [];
232
- let index = 0;
233
- const flatten = (subItems, disabledAncestor) => {
234
- subItems.forEach((itm) => {
235
- const isDisabled = itm.disabled || disabledAncestor;
236
- flatItems.push({ item: Object.assign(Object.assign({}, itm), { disabled: isDisabled }), key: index++ });
237
- if (itm.children && itm.children.length > 0) {
238
- flatten(itm.children, isDisabled);
212
+ handleResetClick() {
213
+ this.selectedItem = null;
214
+ this.searchString = null;
215
+ this.focusedItemId = "";
216
+ this.emitResetSelect();
217
+ this.toggleSelectUl();
218
+ }
219
+ handleInputKeyDown(e) {
220
+ switch (e.code) {
221
+ case KeyboardCode.ENTER:
222
+ case KeyboardCode.SPACE:
223
+ if (this.focusedItemId) {
224
+ if (this.focusedItemId === this.getResetOptionId()) {
225
+ this.handleResetClick();
226
+ }
227
+ else {
228
+ const itemId = this.getItemIdFromOptionId(this.focusedItemId);
229
+ const item = this.itemsList.find((e) => e.id === itemId) || null;
230
+ if (item) {
231
+ this.selectedItem = item;
232
+ this.emitOptionSelect();
233
+ this.toggleSelectUl();
234
+ }
235
+ }
239
236
  }
240
- });
241
- };
242
- if (items) {
243
- flatten(items);
237
+ break;
238
+ case KeyboardCode.ARROW_DOWN:
239
+ case KeyboardCode.ARROW_UP:
240
+ this.arrowsSelectNav(e);
241
+ break;
244
242
  }
245
- return flatItems;
246
243
  }
247
- arrowsSelectNav(e, idOrReset) {
248
- const showResetIcon = this.resetItem && !!this.selectedItem;
244
+ arrowsSelectNav(e) {
249
245
  const arrows = [KeyboardCode.ARROW_DOWN, KeyboardCode.ARROW_UP];
250
246
  if (!arrows.includes(e.key)) {
251
247
  return;
252
248
  }
253
249
  e.preventDefault();
254
250
  e.stopPropagation();
255
- const flatItems = [...this.flattenedList].filter((f) => !f.item.disabled);
256
- if (this.resetItem && showResetIcon) {
257
- flatItems.unshift({
258
- item: { id: "__RESET_ITEM__" },
259
- key: this.resetKey,
260
- });
261
- }
262
- if (!flatItems.length) {
251
+ const currElem = this.focusedItemId ? this.host.querySelector(`#${this.focusedItemId}`) : null;
252
+ const options = Array.from(this.host.querySelectorAll('[role="option"]'));
253
+ if (!options.length) {
263
254
  return;
264
255
  }
265
- let currentIndex;
266
- if (typeof idOrReset === "number") {
267
- currentIndex = flatItems.findIndex((f) => f.key === idOrReset);
268
- }
269
- else {
270
- const k = this.itemIdKeyMap[idOrReset];
271
- currentIndex = flatItems.findIndex((f) => f.key === k);
272
- }
256
+ const currElemIndex = currElem ? options.indexOf(currElem) : null;
257
+ const firstElemIndex = 0;
258
+ const lastElemIndex = options.length - 1;
273
259
  if (!this.isOpen) {
274
260
  this.toggleSelectUl();
275
- if (currentIndex > -1) {
276
- this.focusSelectItem(flatItems[currentIndex].key);
261
+ if (this.selectedItem) {
262
+ this.focusSelectItem(this.getOptionId(this.selectedItem));
277
263
  return;
278
264
  }
279
265
  }
280
- const lastIndex = flatItems.length - 1;
281
- let newIndex = currentIndex;
282
- if (e.key === KeyboardCode.ARROW_DOWN) {
283
- do {
284
- if (newIndex === lastIndex) {
285
- return;
286
- }
287
- newIndex = newIndex + 1;
288
- } while (flatItems[newIndex].item.disabled);
266
+ let nextElem = null;
267
+ if (e.code === KeyboardCode.ARROW_DOWN) {
268
+ nextElem =
269
+ currElemIndex === null ? options[firstElemIndex] : options[currElemIndex + 1] || options[lastElemIndex];
289
270
  }
290
- else {
291
- do {
292
- if (newIndex <= 0) {
293
- return;
294
- }
295
- newIndex = newIndex - 1;
296
- } while (flatItems[newIndex].item.disabled);
271
+ else if (e.code === KeyboardCode.ARROW_UP) {
272
+ nextElem =
273
+ currElemIndex === null ? options[lastElemIndex] : options[currElemIndex - 1] || options[firstElemIndex];
297
274
  }
298
- this.focusSelectItem(flatItems[newIndex].key);
275
+ this.focusSelectItem(nextElem.id);
299
276
  }
300
- focusSelectItem(key) {
301
- const elemId = `${this.htmlid}_key_${key}`;
302
- const elem = this.host.querySelector(`#${elemId}`);
303
- if (elem) {
304
- this.focusedItemId = elemId;
305
- elem.focus();
306
- }
277
+ focusSelectItem(optionId) {
278
+ this.focusedItemId = optionId;
279
+ const elem = this.host.querySelector(`#${optionId}`);
280
+ // @ts-expect-error 'container' does not exist in type 'ScrollIntoViewOptions'
281
+ elem.scrollIntoView({ block: "nearest", container: "nearest" });
307
282
  }
308
283
  toggleSelectUl(selfFocusOnClose = false) {
309
284
  var _a;
@@ -356,35 +331,33 @@ export class ZSelect {
356
331
  if (!this.itemsList.length) {
357
332
  return;
358
333
  }
359
- const foundItem = this.itemsList.findIndex((item) => item.name.toLowerCase().charAt(0) === letter.toLowerCase());
360
- if (foundItem > -1) {
334
+ const foundItem = this.itemsList.find((item) => item.name.toLowerCase().charAt(0) === letter.toLowerCase());
335
+ if (foundItem) {
361
336
  if (!this.isOpen) {
362
337
  this.toggleSelectUl();
363
338
  }
364
- this.focusSelectItem(this.itemIdKeyMap[this.itemsList[foundItem].id]);
339
+ this.focusSelectItem(this.getOptionId(foundItem));
365
340
  }
366
341
  }
367
342
  renderInput() {
368
- return (h("z-input", { class: {
369
- "active-select": this.isOpen,
370
- "cursor-select": !this.autocomplete,
371
- }, id: `${this.htmlid}_input`, htmlid: `${this.htmlid}_select_input`, placeholder: this.placeholder, value: !this.isOpen && this.selectedItem ? this.selectedItem.name.replace(/<[^>]+>/g, "") : null, label: this.label, autocomplete: "off", "aria-label": this.ariaLabel, "html-aria-expanded": this.isOpen ? "true" : "false", "html-aria-controls": `${this.htmlid}_list`, "html-aria-autocomplete": this.hasAutocomplete() ? "list" : "none", "html-aria-activedescendant": this.isOpen ? this.focusedItemId : "", icon: this.isOpen ? "caret-up" : "caret-down", hasclearicon: false, message: false, name: this.name, disabled: this.disabled, readonly: this.readonly || (!this.hasAutocomplete() && this.isOpen), status: this.isOpen ? undefined : this.status, role: "combobox", size: this.size, onClick: (e) => {
372
- this.handleInputClick(e);
373
- }, onKeyDown: (e) => {
374
- const current = this.selectedItem
375
- ? this.itemIdKeyMap[this.selectedItem.id]
376
- : this.resetItem
377
- ? this.resetKey
378
- : "";
379
- return this.arrowsSelectNav(e, current);
380
- }, onInputChange: (e) => {
381
- this.handleInputChange(e);
382
- }, onKeyPress: (e) => {
383
- if (!this.hasAutocomplete()) {
384
- e.preventDefault();
385
- this.scrollToLetter(e.key);
386
- }
387
- } }));
343
+ let value = null;
344
+ if (this.selectedItem) {
345
+ value = getPlainText(this.selectedItem.name);
346
+ }
347
+ if (this.isOpen && this.searchString !== undefined) {
348
+ value = this.searchString;
349
+ }
350
+ return [
351
+ h("z-input", { class: {
352
+ "active-select": this.isOpen,
353
+ "cursor-select": !this.autocomplete,
354
+ }, id: `${this.htmlid}_input`, htmlid: `${this.htmlid}_select_input`, placeholder: this.placeholder, value: value, label: this.label, autocomplete: "off", "aria-label": this.ariaLabel, icon: this.isOpen ? "caret-up" : "caret-down", hasclearicon: false, message: false, name: this.name, disabled: this.disabled, readonly: this.readonly || (!this.hasAutocomplete() && this.isOpen), status: this.isOpen ? undefined : this.status, size: this.size, role: "combobox", "html-aria-expanded": this.isOpen ? "true" : "false", "html-aria-controls": `${this.htmlid}_list`, "html-aria-activedescendant": this.isOpen ? this.focusedItemId : "", "html-aria-autocomplete": this.hasAutocomplete() ? "list" : undefined, onClick: (e) => this.handleInputClick(e), onKeyDown: (e) => this.handleInputKeyDown(e), onInputChange: (e) => this.handleInputChange(e), onKeyPress: (e) => {
355
+ if (!this.hasAutocomplete()) {
356
+ e.preventDefault();
357
+ this.scrollToLetter(e.key);
358
+ }
359
+ } }),
360
+ ];
388
361
  }
389
362
  renderSelectUl() {
390
363
  return (h("div", { class: this.isOpen ? "open" : "closed" }, h("div", { class: {
@@ -398,22 +371,22 @@ export class ZSelect {
398
371
  } }, this.resetItem && this.renderResetItem(), this.renderSelectUlItems()))));
399
372
  }
400
373
  renderResetItem() {
374
+ const hidden = !this.selectedItem || !this.resetItem;
401
375
  return (h("z-list-element", { class: {
402
- "hide": !this.selectedItem || !this.resetItem,
376
+ "hide": hidden,
403
377
  "reset-item": true,
404
378
  "reset-item-margin": !this.hasGroupItems,
405
- }, clickable: true, disabled: false, dividerType: ListDividerType.ELEMENT, role: "option", "html-tabindex": 0, "aria-selected": "false", id: `${this.htmlid}_key_${this.resetKey}`, size: this.hasTreeItems ? ListSize.MEDIUM : this.listSizeType(), onClickItem: () => {
406
- this.selectedItem = null;
407
- this.searchString = null;
408
- this.emitResetSelect();
409
- }, onKeyDown: (e) => this.arrowsSelectNav(e, this.resetKey) }, h("div", { class: {
379
+ }, clickable: true, disabled: false, dividerType: ListDividerType.ELEMENT, role: hidden ? "presentation" : "option", "html-tabindex": 0, "aria-selected": "false", "aria-label": hidden ? undefined : this.resetItem, id: this.getResetOptionId(), size: this.hasTreeItems ? ListSize.MEDIUM : this.listSizeType(), onClickItem: () => this.handleResetClick() }, h("div", { class: {
410
380
  "reset-item-content": true,
411
381
  "tree-list-reset-item": this.hasTreeItems,
412
- } }, h("z-icon", { name: "multiply-circled" }), h("span", null, this.resetItem))));
382
+ "active": this.focusedItemId === this.getResetOptionId(),
383
+ }, "aria-hidden": "true" }, h("z-icon", { name: "multiply-circled" }), h("span", null, this.resetItem))));
413
384
  }
414
385
  renderItem(item, lastItem) {
415
- const thisItemKey = this.itemIdKeyMap[item.id];
416
- return (h("z-list-element", { clickable: !item.disabled, disabled: item.disabled, dividerType: lastItem ? ListDividerType.HEADER : ListDividerType.ELEMENT, role: "option", "html-tabindex": item.disabled || !this.isOpen || this.focusedItemId !== `${this.htmlid}_key_${thisItemKey}` ? -1 : 0, "aria-selected": item.selected ? "true" : "false", id: `${this.htmlid}_key_${thisItemKey}`, size: this.listSizeType(), onClickItem: () => this.selectItem(item), onKeyDown: (e) => this.arrowsSelectNav(e, thisItemKey) }, h("div", { class: "list-element-container" }, h("div", { class: {
386
+ return (h("z-list-element", { clickable: !item.disabled, disabled: item.disabled, dividerType: lastItem ? ListDividerType.HEADER : ListDividerType.ELEMENT, role: item.disabled ? "presentation" : "option", "html-tabindex": -1, "aria-selected": item.selected ? "true" : "false", "aria-label": item.disabled ? undefined : getPlainText(item.name), id: this.getOptionId(item), size: this.listSizeType(), onClickItem: () => this.selectItem(item) }, h("div", { class: {
387
+ "list-element-container": true,
388
+ "active": this.focusedItemId === this.getOptionId(item),
389
+ }, "aria-hidden": "true" }, h("div", { class: {
417
390
  "selected": !!item.selected,
418
391
  "list-element-content": true,
419
392
  }, innerHTML: item.name }), item.icon && h("z-tag", { icon: item.icon }))));
@@ -448,7 +421,6 @@ export class ZSelect {
448
421
  }
449
422
  renderTreeItems(item, isLastChild, parentHasSiblings, isTopLevel, disabledAncestor) {
450
423
  var _a, _b;
451
- const thisItemKey = this.itemIdKeyMap[item.id];
452
424
  const isDisabled = item.disabled || disabledAncestor;
453
425
  const hasDivider = this.hasGroupItems
454
426
  ? undefined
@@ -462,23 +434,17 @@ export class ZSelect {
462
434
  return (h("z-list-element", { clickable: !item.disabled, disabled: isDisabled, class: {
463
435
  "grouped-tree-parent-node": this.hasGroupItems && !!((_a = item.children) === null || _a === void 0 ? void 0 : _a.length),
464
436
  "tree-search-item": this.hasGroupItems && isTopLevel && !((_b = item.children) === null || _b === void 0 ? void 0 : _b.length) && !!this.searchString,
465
- }, size: this.listSizeType(), dividerType: hasDivider, hasTreeItems: this.hasTreeItems, "html-tabindex": null }, h("div", { id: `${this.htmlid}_key_${thisItemKey}`, role: "option", class: "list-element", tabIndex: !this.isOpen || isDisabled || this.focusedItemId !== `${this.htmlid}_key_${thisItemKey}` ? -1 : 0, onClick: () => this.selectItem(item), onKeyDown: (e) => {
466
- this.arrowsSelectNav(e, thisItemKey);
467
- if (e.key === KeyboardCode.ENTER) {
468
- this.selectItem(item);
469
- }
470
- } }, h("span", { class: "item ellipsis" }, h("span", { class: {
437
+ }, size: this.listSizeType(), dividerType: hasDivider, hasTreeItems: this.hasTreeItems, "html-tabindex": null, role: "presentation" }, h("div", { id: this.getOptionId(item), role: isDisabled ? "presentation" : "option", "aria-label": isDisabled ? undefined : getPlainText(item.name), class: { "list-element": true, "active": this.focusedItemId === this.getOptionId(item) }, onClick: () => this.selectItem(item) }, h("span", { class: "item ellipsis", "aria-hidden": "true" }, h("span", { class: {
471
438
  "item-label": true,
472
439
  "selected": !!item.selected,
473
- }, title: item.name, innerHTML: item.name })), item.icon && h("z-tag", { icon: item.icon })), item.children && item.children.length > 0 ? (h("z-list", null, h("div", { class: "children-node" }, item.children.map((child, index, arr) => this.renderTreeItems(child, index === arr.length - 1, arr.length > 1, false, // isTopLevel = false for children
440
+ }, title: item.name, innerHTML: item.name })), item.icon && h("z-tag", { icon: item.icon })), item.children && item.children.length > 0 ? (h("z-list", { role: "presentation" }, h("div", { class: "children-node" }, item.children.map((child, index, arr) => this.renderTreeItems(child, index === arr.length - 1, arr.length > 1, false, // isTopLevel = false for children
474
441
  isDisabled))))) : null));
475
442
  }
476
443
  renderGroupedTree() {
477
444
  const groupedItems = this.getGroupedItems();
478
445
  return groupedItems.map(([category, items], index, entries) => {
479
446
  const parentHasSiblings = Object.values(groupedItems).some((groupItems) => groupItems.length > 1);
480
- // const parentHasSiblings = items.length > 1;
481
- return (h("z-list-group", { "divider-type": index === entries.length - 1 ? undefined : ListDividerType.ELEMENT, hasTreeItems: true }, h("span", { class: "body-3-sb z-list-group-title", slot: "header-title" }, category), h("z-list", null, items.map((item, i, arr) => [
447
+ return (h("z-list-group", { "divider-type": index === entries.length - 1 ? undefined : ListDividerType.ELEMENT, hasTreeItems: true, "aria-labelledby": `${this.htmlid}_tree_${index}` }, h("span", { class: "body-3-sb z-list-group-title", slot: "header-title", id: `${this.htmlid}_tree_${index}`, "aria-hidden": "true" }, category), h("z-list", { role: "presentation" }, items.map((item, i, arr) => [
482
448
  this.renderTreeItems(item, i === arr.length - 1, parentHasSiblings, true, item.disabled),
483
449
  i < arr.length - 1 ? (h("z-divider", { key: `divider-${i}`, style: { zIndex: "100", height: "var(--border-size-small)" } })) : null,
484
450
  ])), index !== entries.length - 1 && h("z-divider", { style: { zIndex: "100", height: "var(--border-size-small)" } })));
@@ -488,14 +454,14 @@ export class ZSelect {
488
454
  const groupedItems = this.getGroupedItems();
489
455
  return groupedItems.map(([key, items], index) => {
490
456
  const isLastGroup = groupedItems.length === index + 1;
491
- return (h("z-list-group", { "divider-type": ListDividerType.ELEMENT }, h("span", { class: "body-3-sb z-list-group-title", slot: "header-title" }, key), items.map((item, subindex) => {
457
+ return (h("z-list-group", { "divider-type": ListDividerType.ELEMENT, "aria-labelledby": `${this.htmlid}_group_${index}` }, h("span", { class: "body-3-sb z-list-group-title", slot: "header-title", id: `${this.htmlid}_group_${index}`, "aria-hidden": "true" }, key), items.map((item, subindex) => {
492
458
  const isLastItem = items.length === subindex + 1;
493
459
  return this.renderItem(item, isLastGroup && isLastItem);
494
460
  })));
495
461
  });
496
462
  }
497
463
  renderNoSearchResults() {
498
- return (h("z-list-element", { class: "no-results", size: this.hasTreeItems ? ListSize.MEDIUM : this.listSizeType(), "html-tabindex": null }, this.noresultslabel));
464
+ return (h("z-list-element", { class: "no-results", size: this.hasTreeItems ? ListSize.MEDIUM : this.listSizeType(), "html-tabindex": null, role: "presentation" }, this.noresultslabel));
499
465
  }
500
466
  renderMessage() {
501
467
  if (boolean(this.message) === false) {
@@ -504,7 +470,7 @@ export class ZSelect {
504
470
  return (h("z-input-message", { message: boolean(this.message) === true ? undefined : this.message, status: this.status, class: this.size, disabled: this.disabled }));
505
471
  }
506
472
  render() {
507
- return (h("div", { key: '7a00d71c47441c98748ff45d90705c0450e668af', class: "select-wrapper" }, this.renderInput(), this.renderSelectUl(), this.renderMessage()));
473
+ return (h("div", { key: '85aeff414269872f796631044ffcafe9e500d6e6', class: "select-wrapper" }, this.renderInput(), this.renderSelectUl(), this.renderMessage()));
508
474
  }
509
475
  static get is() { return "z-select"; }
510
476
  static get encapsulation() { return "scoped"; }
@@ -985,14 +951,5 @@ export class ZSelect {
985
951
  "methodName": "watchItems"
986
952
  }];
987
953
  }
988
- static get listeners() {
989
- return [{
990
- "name": "ariaDescendantFocus",
991
- "method": "getFocusedItemHandler",
992
- "target": undefined,
993
- "capture": false,
994
- "passive": false
995
- }];
996
- }
997
954
  }
998
955
  //# sourceMappingURL=index.js.map