@ukic/web-components 3.0.0-alpha.2 → 3.0.0-alpha.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (398) hide show
  1. package/dist/cjs/core.cjs.js +1 -1
  2. package/dist/cjs/{helpers-f1cf5156.js → helpers-69219f14.js} +24 -1
  3. package/dist/cjs/helpers-69219f14.js.map +1 -0
  4. package/dist/cjs/ic-accordion-group.cjs.entry.js +1 -1
  5. package/dist/cjs/ic-accordion.cjs.entry.js +1 -1
  6. package/dist/cjs/ic-alert.cjs.entry.js +2 -2
  7. package/dist/cjs/ic-alert.cjs.entry.js.map +1 -1
  8. package/dist/cjs/ic-back-to-top.cjs.entry.js +1 -1
  9. package/dist/cjs/ic-badge.cjs.entry.js +1 -1
  10. package/dist/cjs/ic-breadcrumb-group.cjs.entry.js +1 -1
  11. package/dist/cjs/ic-breadcrumb.cjs.entry.js +1 -1
  12. package/dist/cjs/ic-button_3.cjs.entry.js +2 -2
  13. package/dist/cjs/ic-button_3.cjs.entry.js.map +1 -1
  14. package/dist/cjs/ic-card-vertical.cjs.entry.js +1 -1
  15. package/dist/cjs/ic-checkbox-group.cjs.entry.js +2 -2
  16. package/dist/cjs/ic-checkbox-group.cjs.entry.js.map +1 -1
  17. package/dist/cjs/ic-checkbox.cjs.entry.js +3 -3
  18. package/dist/cjs/ic-checkbox.cjs.entry.js.map +1 -1
  19. package/dist/cjs/ic-chip.cjs.entry.js +1 -1
  20. package/dist/cjs/ic-data-row.cjs.entry.js +1 -1
  21. package/dist/cjs/ic-dialog.cjs.entry.js +1 -1
  22. package/dist/cjs/ic-divider.cjs.entry.js +1 -1
  23. package/dist/cjs/ic-empty-state.cjs.entry.js +1 -1
  24. package/dist/cjs/ic-footer-link-group.cjs.entry.js +1 -1
  25. package/dist/cjs/ic-footer-link.cjs.entry.js +1 -1
  26. package/dist/cjs/ic-footer.cjs.entry.js +1 -1
  27. package/dist/cjs/ic-hero.cjs.entry.js +1 -1
  28. package/dist/cjs/ic-horizontal-scroll.cjs.entry.js +1 -1
  29. package/dist/cjs/ic-input-component-container_3.cjs.entry.js +446 -164
  30. package/dist/cjs/ic-input-component-container_3.cjs.entry.js.map +1 -1
  31. package/dist/cjs/ic-input-label_2.cjs.entry.js +8 -6
  32. package/dist/cjs/ic-input-label_2.cjs.entry.js.map +1 -1
  33. package/dist/cjs/ic-link.cjs.entry.js +1 -1
  34. package/dist/cjs/ic-menu-group.cjs.entry.js +2 -2
  35. package/dist/cjs/ic-menu-group.cjs.entry.js.map +1 -1
  36. package/dist/cjs/ic-menu-item.cjs.entry.js +2 -2
  37. package/dist/cjs/ic-menu-item.cjs.entry.js.map +1 -1
  38. package/dist/cjs/ic-navigation-button.cjs.entry.js +1 -1
  39. package/dist/cjs/ic-navigation-group.cjs.entry.js +2 -2
  40. package/dist/cjs/ic-navigation-group.cjs.entry.js.map +1 -1
  41. package/dist/cjs/ic-navigation-item.cjs.entry.js +1 -1
  42. package/dist/cjs/ic-navigation-menu.cjs.entry.js +1 -1
  43. package/dist/cjs/ic-page-header.cjs.entry.js +5 -5
  44. package/dist/cjs/ic-page-header.cjs.entry.js.map +1 -1
  45. package/dist/cjs/ic-pagination-item.cjs.entry.js +1 -1
  46. package/dist/cjs/ic-pagination.cjs.entry.js +1 -1
  47. package/dist/cjs/ic-popover-menu.cjs.entry.js +9 -9
  48. package/dist/cjs/ic-popover-menu.cjs.entry.js.map +1 -1
  49. package/dist/cjs/ic-radio-group.cjs.entry.js +2 -2
  50. package/dist/cjs/ic-radio-group.cjs.entry.js.map +1 -1
  51. package/dist/cjs/ic-radio-option.cjs.entry.js +27 -22
  52. package/dist/cjs/ic-radio-option.cjs.entry.js.map +1 -1
  53. package/dist/cjs/ic-search-bar.cjs.entry.js +2 -2
  54. package/dist/cjs/ic-search-bar.cjs.entry.js.map +1 -1
  55. package/dist/cjs/ic-select.cjs.entry.js +147 -37
  56. package/dist/cjs/ic-select.cjs.entry.js.map +1 -1
  57. package/dist/cjs/ic-side-navigation.cjs.entry.js +1 -1
  58. package/dist/cjs/ic-status-tag.cjs.entry.js +1 -1
  59. package/dist/cjs/ic-step.cjs.entry.js +1 -1
  60. package/dist/cjs/ic-stepper.cjs.entry.js +1 -1
  61. package/dist/cjs/ic-switch.cjs.entry.js +7 -4
  62. package/dist/cjs/ic-switch.cjs.entry.js.map +1 -1
  63. package/dist/cjs/ic-tab-group.cjs.entry.js +1 -1
  64. package/dist/cjs/ic-tab-panel.cjs.entry.js +1 -1
  65. package/dist/cjs/ic-tab.cjs.entry.js +1 -1
  66. package/dist/cjs/ic-text-field.cjs.entry.js +2 -2
  67. package/dist/cjs/ic-text-field.cjs.entry.js.map +1 -1
  68. package/dist/cjs/ic-theme.cjs.entry.js +1 -1
  69. package/dist/cjs/ic-toast.cjs.entry.js +1 -1
  70. package/dist/cjs/ic-toggle-button.cjs.entry.js +1 -1
  71. package/dist/cjs/ic-top-navigation.cjs.entry.js +1 -1
  72. package/dist/cjs/ic-top-navigation.cjs.entry.js.map +1 -1
  73. package/dist/cjs/ic-typography.cjs.entry.js +1 -1
  74. package/dist/cjs/loader.cjs.js +1 -1
  75. package/dist/collection/components/ic-alert/ic-alert.css +3 -1
  76. package/dist/collection/components/ic-alert/ic-alert.js +1 -1
  77. package/dist/collection/components/ic-alert/ic-alert.js.map +1 -1
  78. package/dist/collection/components/ic-checkbox/ic-checkbox.css +5 -0
  79. package/dist/collection/components/ic-checkbox/ic-checkbox.js +1 -1
  80. package/dist/collection/components/ic-checkbox/ic-checkbox.js.map +1 -1
  81. package/dist/collection/components/ic-checkbox-group/ic-checkbox-group.js +1 -1
  82. package/dist/collection/components/ic-checkbox-group/ic-checkbox-group.js.map +1 -1
  83. package/dist/collection/components/ic-input-label/ic-input-label.css +1 -0
  84. package/dist/collection/components/ic-input-label/ic-input-label.js +45 -4
  85. package/dist/collection/components/ic-input-label/ic-input-label.js.map +1 -1
  86. package/dist/collection/components/ic-input-label/test/basic/ic-input-label.spec.js +35 -49
  87. package/dist/collection/components/ic-input-label/test/basic/ic-input-label.spec.js.map +1 -1
  88. package/dist/collection/components/ic-loading-indicator/ic-loading-indicator.css +1 -0
  89. package/dist/collection/components/ic-menu/ic-menu.css +70 -10
  90. package/dist/collection/components/ic-menu/ic-menu.js +485 -192
  91. package/dist/collection/components/ic-menu/ic-menu.js.map +1 -1
  92. package/dist/collection/components/ic-menu/test/basic/ic-menu.spec.js +381 -33
  93. package/dist/collection/components/ic-menu/test/basic/ic-menu.spec.js.map +1 -1
  94. package/dist/collection/components/ic-menu-group/ic-menu-group.css +2 -2
  95. package/dist/collection/components/ic-menu-item/ic-menu-item.css +32 -28
  96. package/dist/collection/components/ic-navigation-group/ic-navigation-group.css +1 -1
  97. package/dist/collection/components/ic-page-header/ic-page-header.css +5 -2
  98. package/dist/collection/components/ic-page-header/ic-page-header.js +3 -3
  99. package/dist/collection/components/ic-page-header/ic-page-header.js.map +1 -1
  100. package/dist/collection/components/ic-popover-menu/ic-popover-menu.css +5 -5
  101. package/dist/collection/components/ic-popover-menu/ic-popover-menu.js +31 -7
  102. package/dist/collection/components/ic-popover-menu/ic-popover-menu.js.map +1 -1
  103. package/dist/collection/components/ic-radio-group/ic-radio-group.js +1 -1
  104. package/dist/collection/components/ic-radio-group/ic-radio-group.js.map +1 -1
  105. package/dist/collection/components/ic-radio-group/test/basic/ic-radio-group.spec.js +2 -2
  106. package/dist/collection/components/ic-radio-group/test/basic/ic-radio-group.spec.js.map +1 -1
  107. package/dist/collection/components/ic-radio-option/ic-radio-option.css +1 -0
  108. package/dist/collection/components/ic-radio-option/ic-radio-option.js +26 -21
  109. package/dist/collection/components/ic-radio-option/ic-radio-option.js.map +1 -1
  110. package/dist/collection/components/ic-search-bar/ic-search-bar.css +1 -0
  111. package/dist/collection/components/ic-select/ic-select.css +36 -16
  112. package/dist/collection/components/ic-select/ic-select.js +191 -43
  113. package/dist/collection/components/ic-select/ic-select.js.map +1 -1
  114. package/dist/collection/components/ic-select/test/basic/ic-select.spec.js +160 -1
  115. package/dist/collection/components/ic-select/test/basic/ic-select.spec.js.map +1 -1
  116. package/dist/collection/components/ic-switch/ic-switch.css +27 -30
  117. package/dist/collection/components/ic-switch/ic-switch.js +29 -2
  118. package/dist/collection/components/ic-switch/ic-switch.js.map +1 -1
  119. package/dist/collection/components/ic-text-field/ic-text-field.css +1 -0
  120. package/dist/collection/components/ic-top-navigation/ic-top-navigation.js.map +1 -1
  121. package/dist/collection/utils/helpers.js +20 -0
  122. package/dist/collection/utils/helpers.js.map +1 -1
  123. package/dist/collection/utils/types.js.map +1 -1
  124. package/dist/components/helpers.js +22 -1
  125. package/dist/components/helpers.js.map +1 -1
  126. package/dist/components/ic-alert.js +1 -1
  127. package/dist/components/ic-alert.js.map +1 -1
  128. package/dist/components/ic-checkbox-group.js +1 -1
  129. package/dist/components/ic-checkbox-group.js.map +1 -1
  130. package/dist/components/ic-checkbox.js +2 -2
  131. package/dist/components/ic-checkbox.js.map +1 -1
  132. package/dist/components/ic-input-label2.js +10 -6
  133. package/dist/components/ic-input-label2.js.map +1 -1
  134. package/dist/components/ic-loading-indicator2.js +1 -1
  135. package/dist/components/ic-loading-indicator2.js.map +1 -1
  136. package/dist/components/ic-menu-group.js +1 -1
  137. package/dist/components/ic-menu-group.js.map +1 -1
  138. package/dist/components/ic-menu-item2.js +1 -1
  139. package/dist/components/ic-menu-item2.js.map +1 -1
  140. package/dist/components/ic-menu2.js +450 -167
  141. package/dist/components/ic-menu2.js.map +1 -1
  142. package/dist/components/ic-navigation-group.js +2 -2
  143. package/dist/components/ic-navigation-group.js.map +1 -1
  144. package/dist/components/ic-navigation-item.js +1 -1
  145. package/dist/components/ic-navigation-menu2.js +1 -1
  146. package/dist/components/ic-page-header.js +4 -4
  147. package/dist/components/ic-page-header.js.map +1 -1
  148. package/dist/components/ic-pagination-item2.js +1 -1
  149. package/dist/components/ic-popover-menu.js +9 -8
  150. package/dist/components/ic-popover-menu.js.map +1 -1
  151. package/dist/components/ic-radio-group.js +1 -1
  152. package/dist/components/ic-radio-group.js.map +1 -1
  153. package/dist/components/ic-radio-option.js +27 -22
  154. package/dist/components/ic-radio-option.js.map +1 -1
  155. package/dist/components/ic-search-bar.js +2 -2
  156. package/dist/components/ic-search-bar.js.map +1 -1
  157. package/dist/components/ic-select.js +148 -37
  158. package/dist/components/ic-select.js.map +1 -1
  159. package/dist/components/ic-side-navigation.js +1 -1
  160. package/dist/components/ic-stepper.js +1 -1
  161. package/dist/components/ic-switch.js +7 -3
  162. package/dist/components/ic-switch.js.map +1 -1
  163. package/dist/components/ic-text-field2.js +2 -2
  164. package/dist/components/ic-text-field2.js.map +1 -1
  165. package/dist/components/ic-theme.js +1 -1
  166. package/dist/components/ic-toast.js +1 -1
  167. package/dist/components/ic-top-navigation.js +1 -1
  168. package/dist/components/ic-top-navigation.js.map +1 -1
  169. package/dist/core/core.css +580 -10
  170. package/dist/core/core.esm.js +1 -1
  171. package/dist/core/core.esm.js.map +1 -1
  172. package/dist/core/{p-d2f89cb5.entry.js → p-0395442c.entry.js} +2 -2
  173. package/dist/core/{p-244d6dba.entry.js → p-0d233b0c.entry.js} +2 -2
  174. package/dist/core/{p-f38bce8d.entry.js → p-134def81.entry.js} +2 -2
  175. package/dist/core/p-134def81.entry.js.map +1 -0
  176. package/dist/core/p-14dfd8db.entry.js +2 -0
  177. package/dist/core/p-14dfd8db.entry.js.map +1 -0
  178. package/dist/core/p-1b116dd1.entry.js +2 -0
  179. package/dist/core/p-1b116dd1.entry.js.map +1 -0
  180. package/dist/core/p-21cc87c0.entry.js +2 -0
  181. package/dist/core/p-21cc87c0.entry.js.map +1 -0
  182. package/dist/core/p-2eae9b27.entry.js +2 -0
  183. package/dist/core/p-2eae9b27.entry.js.map +1 -0
  184. package/dist/core/p-3618ac34.entry.js +2 -0
  185. package/dist/core/p-3618ac34.entry.js.map +1 -0
  186. package/dist/core/{p-355acffa.entry.js → p-37dea10d.entry.js} +2 -2
  187. package/dist/core/{p-bf1f0ac7.entry.js → p-384d454d.entry.js} +2 -2
  188. package/dist/core/p-384d454d.entry.js.map +1 -0
  189. package/dist/core/p-3d417eff.entry.js +2 -0
  190. package/dist/core/p-3d417eff.entry.js.map +1 -0
  191. package/dist/core/p-3d9726a3.entry.js +2 -0
  192. package/dist/core/{p-408344d3.entry.js.map → p-3d9726a3.entry.js.map} +1 -1
  193. package/dist/core/{p-84526c3e.entry.js → p-43256b7c.entry.js} +2 -2
  194. package/dist/core/{p-93c23a35.entry.js → p-4a3b1f06.entry.js} +2 -2
  195. package/dist/core/{p-34db8aaf.entry.js → p-5cd016e1.entry.js} +2 -2
  196. package/dist/core/{p-d2f8e03f.entry.js → p-5ef8e106.entry.js} +2 -2
  197. package/dist/core/{p-0a808ec3.entry.js → p-690c5e80.entry.js} +2 -2
  198. package/dist/core/{p-43f9a711.entry.js → p-6d3e4bb1.entry.js} +2 -2
  199. package/dist/core/{p-4055f22c.entry.js → p-726673ee.entry.js} +2 -2
  200. package/dist/core/p-726673ee.entry.js.map +1 -0
  201. package/dist/core/{p-fa1b7a80.entry.js → p-72d30c8a.entry.js} +2 -2
  202. package/dist/core/{p-f30f3a3e.entry.js → p-76263187.entry.js} +2 -2
  203. package/dist/core/{p-c86d48b6.entry.js → p-7827b5cb.entry.js} +2 -2
  204. package/dist/core/p-79d0be03.entry.js +2 -0
  205. package/dist/core/p-79d0be03.entry.js.map +1 -0
  206. package/dist/core/{p-c06a3b97.entry.js → p-7b35de65.entry.js} +2 -2
  207. package/dist/core/{p-1684c8d4.entry.js → p-7fbf2d3e.entry.js} +2 -2
  208. package/dist/core/p-91cf9b2b.entry.js +2 -0
  209. package/dist/core/p-91cf9b2b.entry.js.map +1 -0
  210. package/dist/core/{p-1b573920.entry.js → p-922984cb.entry.js} +2 -2
  211. package/dist/core/{p-aab2c7aa.entry.js → p-95f603dd.entry.js} +2 -2
  212. package/dist/core/{p-e4b276b5.entry.js → p-97fb2bdf.entry.js} +2 -2
  213. package/dist/core/p-ac4b7329.entry.js +2 -0
  214. package/dist/core/p-ac4b7329.entry.js.map +1 -0
  215. package/dist/core/{p-e3ed9110.entry.js → p-acbd15ab.entry.js} +2 -2
  216. package/dist/core/{p-6d40baa9.entry.js → p-b17c94b7.entry.js} +2 -2
  217. package/dist/core/p-b78f8b8c.entry.js +2 -0
  218. package/dist/core/p-b78f8b8c.entry.js.map +1 -0
  219. package/dist/core/{p-312cacae.js → p-b7eb8ef9.js} +2 -2
  220. package/dist/core/p-b7eb8ef9.js.map +1 -0
  221. package/dist/core/{p-363d6e88.entry.js → p-b95a72a3.entry.js} +2 -2
  222. package/dist/core/{p-21e5dd29.entry.js → p-b997064c.entry.js} +2 -2
  223. package/dist/core/{p-4ff6d16f.entry.js → p-ba6ecc15.entry.js} +2 -2
  224. package/dist/core/{p-0d30ffab.entry.js → p-c0fc3d02.entry.js} +2 -2
  225. package/dist/core/p-c396bd4d.entry.js +2 -0
  226. package/dist/core/p-c396bd4d.entry.js.map +1 -0
  227. package/dist/core/{p-f828a6e1.entry.js → p-c9cf932c.entry.js} +2 -2
  228. package/dist/core/{p-aa0619ce.entry.js → p-cf7db84a.entry.js} +2 -2
  229. package/dist/core/{p-d58a10ec.entry.js → p-dd36bf1b.entry.js} +2 -2
  230. package/dist/core/p-e488de54.entry.js +2 -0
  231. package/dist/core/p-e488de54.entry.js.map +1 -0
  232. package/dist/core/{p-da14cd3c.entry.js → p-e4d1839e.entry.js} +2 -2
  233. package/dist/core/{p-0fb047e7.entry.js → p-eb3b4935.entry.js} +2 -2
  234. package/dist/core/{p-0fb047e7.entry.js.map → p-eb3b4935.entry.js.map} +1 -1
  235. package/dist/core/{p-60efd7fa.entry.js → p-ebafab37.entry.js} +2 -2
  236. package/dist/core/{p-82375dca.entry.js → p-ee6dd94c.entry.js} +2 -2
  237. package/dist/core/{p-9dba6823.entry.js → p-f0fc1bf0.entry.js} +2 -2
  238. package/dist/core/{p-49525194.entry.js → p-f24984c5.entry.js} +2 -2
  239. package/dist/core/p-f24984c5.entry.js.map +1 -0
  240. package/dist/core/{p-d8870804.entry.js → p-f5b2b26d.entry.js} +2 -2
  241. package/dist/core/p-f60dbd0e.entry.js +2 -0
  242. package/dist/core/p-f60dbd0e.entry.js.map +1 -0
  243. package/dist/core/{p-40e9e76a.entry.js → p-f71c00ce.entry.js} +2 -2
  244. package/dist/core/{p-cbcd4427.entry.js → p-ff4298b1.entry.js} +2 -2
  245. package/dist/esm/core.js +1 -1
  246. package/dist/esm/{helpers-1c9151ef.js → helpers-e8797e8d.js} +23 -2
  247. package/dist/esm/helpers-e8797e8d.js.map +1 -0
  248. package/dist/esm/ic-accordion-group.entry.js +1 -1
  249. package/dist/esm/ic-accordion.entry.js +1 -1
  250. package/dist/esm/ic-alert.entry.js +2 -2
  251. package/dist/esm/ic-alert.entry.js.map +1 -1
  252. package/dist/esm/ic-back-to-top.entry.js +1 -1
  253. package/dist/esm/ic-badge.entry.js +1 -1
  254. package/dist/esm/ic-breadcrumb-group.entry.js +1 -1
  255. package/dist/esm/ic-breadcrumb.entry.js +1 -1
  256. package/dist/esm/ic-button_3.entry.js +2 -2
  257. package/dist/esm/ic-button_3.entry.js.map +1 -1
  258. package/dist/esm/ic-card-vertical.entry.js +1 -1
  259. package/dist/esm/ic-checkbox-group.entry.js +2 -2
  260. package/dist/esm/ic-checkbox-group.entry.js.map +1 -1
  261. package/dist/esm/ic-checkbox.entry.js +3 -3
  262. package/dist/esm/ic-checkbox.entry.js.map +1 -1
  263. package/dist/esm/ic-chip.entry.js +1 -1
  264. package/dist/esm/ic-data-row.entry.js +1 -1
  265. package/dist/esm/ic-dialog.entry.js +1 -1
  266. package/dist/esm/ic-divider.entry.js +1 -1
  267. package/dist/esm/ic-empty-state.entry.js +1 -1
  268. package/dist/esm/ic-footer-link-group.entry.js +1 -1
  269. package/dist/esm/ic-footer-link.entry.js +1 -1
  270. package/dist/esm/ic-footer.entry.js +1 -1
  271. package/dist/esm/ic-hero.entry.js +1 -1
  272. package/dist/esm/ic-horizontal-scroll.entry.js +1 -1
  273. package/dist/esm/ic-input-component-container_3.entry.js +446 -164
  274. package/dist/esm/ic-input-component-container_3.entry.js.map +1 -1
  275. package/dist/esm/ic-input-label_2.entry.js +8 -6
  276. package/dist/esm/ic-input-label_2.entry.js.map +1 -1
  277. package/dist/esm/ic-link.entry.js +1 -1
  278. package/dist/esm/ic-menu-group.entry.js +2 -2
  279. package/dist/esm/ic-menu-group.entry.js.map +1 -1
  280. package/dist/esm/ic-menu-item.entry.js +2 -2
  281. package/dist/esm/ic-menu-item.entry.js.map +1 -1
  282. package/dist/esm/ic-navigation-button.entry.js +1 -1
  283. package/dist/esm/ic-navigation-group.entry.js +2 -2
  284. package/dist/esm/ic-navigation-group.entry.js.map +1 -1
  285. package/dist/esm/ic-navigation-item.entry.js +1 -1
  286. package/dist/esm/ic-navigation-menu.entry.js +1 -1
  287. package/dist/esm/ic-page-header.entry.js +5 -5
  288. package/dist/esm/ic-page-header.entry.js.map +1 -1
  289. package/dist/esm/ic-pagination-item.entry.js +1 -1
  290. package/dist/esm/ic-pagination.entry.js +1 -1
  291. package/dist/esm/ic-popover-menu.entry.js +9 -9
  292. package/dist/esm/ic-popover-menu.entry.js.map +1 -1
  293. package/dist/esm/ic-radio-group.entry.js +2 -2
  294. package/dist/esm/ic-radio-group.entry.js.map +1 -1
  295. package/dist/esm/ic-radio-option.entry.js +27 -22
  296. package/dist/esm/ic-radio-option.entry.js.map +1 -1
  297. package/dist/esm/ic-search-bar.entry.js +2 -2
  298. package/dist/esm/ic-search-bar.entry.js.map +1 -1
  299. package/dist/esm/ic-select.entry.js +147 -37
  300. package/dist/esm/ic-select.entry.js.map +1 -1
  301. package/dist/esm/ic-side-navigation.entry.js +1 -1
  302. package/dist/esm/ic-status-tag.entry.js +1 -1
  303. package/dist/esm/ic-step.entry.js +1 -1
  304. package/dist/esm/ic-stepper.entry.js +1 -1
  305. package/dist/esm/ic-switch.entry.js +7 -4
  306. package/dist/esm/ic-switch.entry.js.map +1 -1
  307. package/dist/esm/ic-tab-group.entry.js +1 -1
  308. package/dist/esm/ic-tab-panel.entry.js +1 -1
  309. package/dist/esm/ic-tab.entry.js +1 -1
  310. package/dist/esm/ic-text-field.entry.js +2 -2
  311. package/dist/esm/ic-text-field.entry.js.map +1 -1
  312. package/dist/esm/ic-theme.entry.js +1 -1
  313. package/dist/esm/ic-toast.entry.js +1 -1
  314. package/dist/esm/ic-toggle-button.entry.js +1 -1
  315. package/dist/esm/ic-top-navigation.entry.js +1 -1
  316. package/dist/esm/ic-top-navigation.entry.js.map +1 -1
  317. package/dist/esm/ic-typography.entry.js +1 -1
  318. package/dist/esm/loader.js +1 -1
  319. package/dist/types/components/ic-alert/ic-alert.d.ts +1 -1
  320. package/dist/types/components/ic-input-label/ic-input-label.d.ts +8 -0
  321. package/dist/types/components/ic-menu/ic-menu.d.ts +43 -15
  322. package/dist/types/components/ic-popover-menu/ic-popover-menu.d.ts +5 -0
  323. package/dist/types/components/ic-radio-option/ic-radio-option.d.ts +3 -2
  324. package/dist/types/components/ic-select/ic-select.d.ts +24 -10
  325. package/dist/types/components/ic-switch/ic-switch.d.ts +5 -1
  326. package/dist/types/components.d.ts +66 -20
  327. package/dist/types/utils/helpers.d.ts +7 -0
  328. package/dist/types/utils/types.d.ts +1 -1
  329. package/hydrate/index.js +685 -255
  330. package/package.json +2 -2
  331. package/vscode-data.json +49 -7
  332. package/dist/cjs/helpers-f1cf5156.js.map +0 -1
  333. package/dist/core/p-0c872824.entry.js +0 -2
  334. package/dist/core/p-0c872824.entry.js.map +0 -1
  335. package/dist/core/p-1f1758a9.entry.js +0 -2
  336. package/dist/core/p-1f1758a9.entry.js.map +0 -1
  337. package/dist/core/p-312cacae.js.map +0 -1
  338. package/dist/core/p-322edabc.entry.js +0 -2
  339. package/dist/core/p-322edabc.entry.js.map +0 -1
  340. package/dist/core/p-4055f22c.entry.js.map +0 -1
  341. package/dist/core/p-408344d3.entry.js +0 -2
  342. package/dist/core/p-4502d3c1.entry.js +0 -2
  343. package/dist/core/p-4502d3c1.entry.js.map +0 -1
  344. package/dist/core/p-49525194.entry.js.map +0 -1
  345. package/dist/core/p-5deb9730.entry.js +0 -2
  346. package/dist/core/p-5deb9730.entry.js.map +0 -1
  347. package/dist/core/p-6bd2e938.entry.js +0 -2
  348. package/dist/core/p-6bd2e938.entry.js.map +0 -1
  349. package/dist/core/p-7c89fc86.entry.js +0 -2
  350. package/dist/core/p-7c89fc86.entry.js.map +0 -1
  351. package/dist/core/p-af20322c.entry.js +0 -2
  352. package/dist/core/p-af20322c.entry.js.map +0 -1
  353. package/dist/core/p-bf1f0ac7.entry.js.map +0 -1
  354. package/dist/core/p-d1c9c32b.entry.js +0 -2
  355. package/dist/core/p-d1c9c32b.entry.js.map +0 -1
  356. package/dist/core/p-dc83a0e9.entry.js +0 -2
  357. package/dist/core/p-dc83a0e9.entry.js.map +0 -1
  358. package/dist/core/p-de3a5423.entry.js +0 -2
  359. package/dist/core/p-de3a5423.entry.js.map +0 -1
  360. package/dist/core/p-e53309b0.entry.js +0 -2
  361. package/dist/core/p-e53309b0.entry.js.map +0 -1
  362. package/dist/core/p-f38bce8d.entry.js.map +0 -1
  363. package/dist/core/p-fa587e6d.entry.js +0 -2
  364. package/dist/core/p-fa587e6d.entry.js.map +0 -1
  365. package/dist/esm/helpers-1c9151ef.js.map +0 -1
  366. /package/dist/core/{p-d2f89cb5.entry.js.map → p-0395442c.entry.js.map} +0 -0
  367. /package/dist/core/{p-244d6dba.entry.js.map → p-0d233b0c.entry.js.map} +0 -0
  368. /package/dist/core/{p-355acffa.entry.js.map → p-37dea10d.entry.js.map} +0 -0
  369. /package/dist/core/{p-84526c3e.entry.js.map → p-43256b7c.entry.js.map} +0 -0
  370. /package/dist/core/{p-93c23a35.entry.js.map → p-4a3b1f06.entry.js.map} +0 -0
  371. /package/dist/core/{p-34db8aaf.entry.js.map → p-5cd016e1.entry.js.map} +0 -0
  372. /package/dist/core/{p-d2f8e03f.entry.js.map → p-5ef8e106.entry.js.map} +0 -0
  373. /package/dist/core/{p-0a808ec3.entry.js.map → p-690c5e80.entry.js.map} +0 -0
  374. /package/dist/core/{p-43f9a711.entry.js.map → p-6d3e4bb1.entry.js.map} +0 -0
  375. /package/dist/core/{p-fa1b7a80.entry.js.map → p-72d30c8a.entry.js.map} +0 -0
  376. /package/dist/core/{p-f30f3a3e.entry.js.map → p-76263187.entry.js.map} +0 -0
  377. /package/dist/core/{p-c86d48b6.entry.js.map → p-7827b5cb.entry.js.map} +0 -0
  378. /package/dist/core/{p-c06a3b97.entry.js.map → p-7b35de65.entry.js.map} +0 -0
  379. /package/dist/core/{p-1684c8d4.entry.js.map → p-7fbf2d3e.entry.js.map} +0 -0
  380. /package/dist/core/{p-1b573920.entry.js.map → p-922984cb.entry.js.map} +0 -0
  381. /package/dist/core/{p-aab2c7aa.entry.js.map → p-95f603dd.entry.js.map} +0 -0
  382. /package/dist/core/{p-e4b276b5.entry.js.map → p-97fb2bdf.entry.js.map} +0 -0
  383. /package/dist/core/{p-e3ed9110.entry.js.map → p-acbd15ab.entry.js.map} +0 -0
  384. /package/dist/core/{p-6d40baa9.entry.js.map → p-b17c94b7.entry.js.map} +0 -0
  385. /package/dist/core/{p-363d6e88.entry.js.map → p-b95a72a3.entry.js.map} +0 -0
  386. /package/dist/core/{p-21e5dd29.entry.js.map → p-b997064c.entry.js.map} +0 -0
  387. /package/dist/core/{p-4ff6d16f.entry.js.map → p-ba6ecc15.entry.js.map} +0 -0
  388. /package/dist/core/{p-0d30ffab.entry.js.map → p-c0fc3d02.entry.js.map} +0 -0
  389. /package/dist/core/{p-f828a6e1.entry.js.map → p-c9cf932c.entry.js.map} +0 -0
  390. /package/dist/core/{p-aa0619ce.entry.js.map → p-cf7db84a.entry.js.map} +0 -0
  391. /package/dist/core/{p-d58a10ec.entry.js.map → p-dd36bf1b.entry.js.map} +0 -0
  392. /package/dist/core/{p-da14cd3c.entry.js.map → p-e4d1839e.entry.js.map} +0 -0
  393. /package/dist/core/{p-60efd7fa.entry.js.map → p-ebafab37.entry.js.map} +0 -0
  394. /package/dist/core/{p-82375dca.entry.js.map → p-ee6dd94c.entry.js.map} +0 -0
  395. /package/dist/core/{p-9dba6823.entry.js.map → p-f0fc1bf0.entry.js.map} +0 -0
  396. /package/dist/core/{p-d8870804.entry.js.map → p-f5b2b26d.entry.js.map} +0 -0
  397. /package/dist/core/{p-40e9e76a.entry.js.map → p-f71c00ce.entry.js.map} +0 -0
  398. /package/dist/core/{p-cbcd4427.entry.js.map → p-ff4298b1.entry.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, f as forceUpdate, h, H as Host, g as getElement, c as createEvent, F as Fragment } from './index-d1d2c456.js';
2
- import { c as checkSlotInChildMutations, s as slotHasContent, E as IcInformationStatus, P as successIcon, a as onComponentRequiredPropUndefined } from './helpers-1c9151ef.js';
2
+ import { c as checkSlotInChildMutations, s as slotHasContent, F as IcInformationStatus, Q as successIcon, R as isMacDevice, a as onComponentRequiredPropUndefined, C as getOptionsWithoutGroupTitlesCount } from './helpers-e8797e8d.js';
3
3
  import { C as Check } from './check-icon-4a9f8371.js';
4
4
  import { c as createPopper } from './popper-0fbeff6d.js';
5
5
 
@@ -73,7 +73,7 @@ const InputContainer = class {
73
73
  };
74
74
  InputContainer.style = icInputContainerCss;
75
75
 
76
- const icMenuCss = "html.sc-ic-menu{line-height:1.15;-webkit-text-size-adjust:100%}body.sc-ic-menu{margin:0}main.sc-ic-menu{display:block}h1.sc-ic-menu{font-size:2em;margin:0.67em 0}hr.sc-ic-menu{box-sizing:content-box;height:0;overflow:visible}pre.sc-ic-menu{font-family:monospace, monospace;font-size:1em}a.sc-ic-menu{background-color:transparent}abbr[title].sc-ic-menu{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b.sc-ic-menu,strong.sc-ic-menu{font-weight:bolder}code.sc-ic-menu,kbd.sc-ic-menu,samp.sc-ic-menu{font-family:monospace, monospace;font-size:1em}small.sc-ic-menu{font-size:80%}sub.sc-ic-menu,sup.sc-ic-menu{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub.sc-ic-menu{bottom:-0.25em}sup.sc-ic-menu{top:-0.5em}img.sc-ic-menu{border-style:none}button.sc-ic-menu,input.sc-ic-menu,optgroup.sc-ic-menu,select.sc-ic-menu,textarea.sc-ic-menu{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button.sc-ic-menu,input.sc-ic-menu{overflow:visible}button.sc-ic-menu,select.sc-ic-menu{text-transform:none}button.sc-ic-menu,[type=\"button\"].sc-ic-menu,[type=\"reset\"].sc-ic-menu,[type=\"submit\"].sc-ic-menu{-webkit-appearance:button}button.sc-ic-menu::-moz-focus-inner,[type=\"button\"].sc-ic-menu::-moz-focus-inner,[type=\"reset\"].sc-ic-menu::-moz-focus-inner,[type=\"submit\"].sc-ic-menu::-moz-focus-inner{border-style:none;padding:0}button.sc-ic-menu:-moz-focusring,[type=\"button\"].sc-ic-menu:-moz-focusring,[type=\"reset\"].sc-ic-menu:-moz-focusring,[type=\"submit\"].sc-ic-menu:-moz-focusring{outline:1px dotted ButtonText}fieldset.sc-ic-menu{padding:0.35em 0.75em 0.625em}legend.sc-ic-menu{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress.sc-ic-menu{vertical-align:baseline}textarea.sc-ic-menu{overflow:auto}[type=\"checkbox\"].sc-ic-menu,[type=\"radio\"].sc-ic-menu{box-sizing:border-box;padding:0}[type=\"number\"].sc-ic-menu::-webkit-inner-spin-button,[type=\"number\"].sc-ic-menu::-webkit-outer-spin-button{height:auto}[type=\"search\"].sc-ic-menu{-webkit-appearance:textfield;outline-offset:-2px}[type=\"search\"].sc-ic-menu::-webkit-search-decoration{-webkit-appearance:none}.sc-ic-menu::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details.sc-ic-menu{display:block}summary.sc-ic-menu{display:list-item}template.sc-ic-menu{display:none}[hidden].sc-ic-menu{display:none}html.sc-ic-menu,body.sc-ic-menu,div.sc-ic-menu,span.sc-ic-menu,applet.sc-ic-menu,object.sc-ic-menu,iframe.sc-ic-menu,h1.sc-ic-menu,h2.sc-ic-menu,h3.sc-ic-menu,h4.sc-ic-menu,h5.sc-ic-menu,h6.sc-ic-menu,p.sc-ic-menu,blockquote.sc-ic-menu,pre.sc-ic-menu,a.sc-ic-menu,abbr.sc-ic-menu,acronym.sc-ic-menu,address.sc-ic-menu,big.sc-ic-menu,cite.sc-ic-menu,code.sc-ic-menu,del.sc-ic-menu,dfn.sc-ic-menu,em.sc-ic-menu,img.sc-ic-menu,ins.sc-ic-menu,kbd.sc-ic-menu,q.sc-ic-menu,s.sc-ic-menu,samp.sc-ic-menu,small.sc-ic-menu,strike.sc-ic-menu,strong.sc-ic-menu,sub.sc-ic-menu,sup.sc-ic-menu,tt.sc-ic-menu,var.sc-ic-menu,b.sc-ic-menu,u.sc-ic-menu,i.sc-ic-menu,center.sc-ic-menu,dl.sc-ic-menu,dt.sc-ic-menu,dd.sc-ic-menu,ol.sc-ic-menu,ul.sc-ic-menu,li.sc-ic-menu,fieldset.sc-ic-menu,form.sc-ic-menu,label.sc-ic-menu,legend.sc-ic-menu,table.sc-ic-menu,caption.sc-ic-menu,tbody.sc-ic-menu,tfoot.sc-ic-menu,thead.sc-ic-menu,tr.sc-ic-menu,th.sc-ic-menu,td.sc-ic-menu,article.sc-ic-menu,aside.sc-ic-menu,canvas.sc-ic-menu,details.sc-ic-menu,embed.sc-ic-menu,figure.sc-ic-menu,figcaption.sc-ic-menu,footer.sc-ic-menu,header.sc-ic-menu,hgroup.sc-ic-menu,menu.sc-ic-menu,nav.sc-ic-menu,output.sc-ic-menu,ruby.sc-ic-menu,section.sc-ic-menu,summary.sc-ic-menu,time.sc-ic-menu,mark.sc-ic-menu,audio.sc-ic-menu,video.sc-ic-menu{margin:0;padding:0;border:0;font-size:100%;font-style:inherit;vertical-align:baseline}@media (prefers-reduced-motion: no-preference){.ic-menu-open.sc-ic-menu-h .menu.sc-ic-menu{transition:max-height var(--ic-transition-duration-slow)}}.sc-ic-menu-h{border-radius:var(--ic-border-radius);max-height:0;width:var(--input-width, 20rem);color:var(--ic-color-text-primary);--ic-typography-color:var(--ic-color-text-primary);background-color:var(--ic-architectural-white);position:relative;z-index:var(--ic-z-index-menu);box-sizing:border-box;box-shadow:var(--ic-elevation-overlay)}.sc-ic-menu-h:not(.ic-menu-no-focus):focus-within{box-shadow:var(--ic-border-focus)}#retry-button.sc-ic-menu::part(button){height:var(--ic-space-lg)}.small.sc-ic-menu #retry-button.sc-ic-menu::part(button){height:var(--ic-space-md)}.on-dialog.sc-ic-menu-h{inset:auto !important}.menu.sc-ic-menu{text-decoration:none;list-style-type:none;border:var(--ic-border-width) solid var(--ic-architectural-400);border-radius:var(--ic-border-radius);background-color:var(--ic-architectural-white);visibility:hidden;max-height:0;overflow-y:hidden}.menu-scroll.sc-ic-menu{overflow-y:auto}.menu.sc-ic-menu:focus-visible{outline:none}.ic-menu-open.sc-ic-menu-h{max-height:none;display:block}.ic-menu-open.sc-ic-menu-h .menu.sc-ic-menu{visibility:visible;max-height:calc(var(--ic-space-xl) * 10 + var(--ic-space-xxxs))}.ic-menu-full-width.sc-ic-menu-h{width:100%}.option.sc-ic-menu{padding:var(--ic-space-xs) calc(var(--ic-space-xs) - var(--ic-space-1px));cursor:pointer;display:flex;align-items:center;overflow-wrap:anywhere}.option.sc-ic-menu:not(.loading-option){justify-content:space-between}.ic-menu-small.sc-ic-menu-h .option.sc-ic-menu{padding:var(--ic-space-xxs) calc(var(--ic-space-xs) - var(--ic-space-1px))}.ic-menu-large.sc-ic-menu-h .option.sc-ic-menu{padding:var(--ic-space-sm) calc(var(--ic-space-xs) - var(--ic-space-1px))}.option.sc-ic-menu:last-child{border-radius:0 0 var(--ic-space-1px) var(--ic-space-1px)}.option.sc-ic-menu:first-child{border-radius:var(--ic-space-1px) var(--ic-space-1px) 0 0}.option.sc-ic-menu:not(.disabled-option):hover{background-color:var(--ic-action-dark-bg-hover)}.option.sc-ic-menu:not(.disabled-option):active{background-color:var(--ic-action-dark-bg-pressed)}.option.sc-ic-menu:focus-visible{outline:var(--ic-hc-focus-outline)}.option.sc-ic-menu:not(.disabled-option) .option-description.sc-ic-menu{--ic-typography-color:var(--ic-color-text-secondary)}.option.sc-ic-menu .option-label.sc-ic-menu{display:flex;flex-direction:row;align-items:top}.option.sc-ic-menu .option-element.sc-ic-menu{margin-top:var(--ic-space-xxs)}.option.sc-ic-menu .option-icon.sc-ic-menu{height:var(--ic-space-md);width:var(--ic-space-md);margin-top:var(--ic-space-xxs);margin-right:var(--ic-space-xxxs)}.option-text-container.sc-ic-menu{pointer-events:none}.option.loading-option.sc-ic-menu .option-text-container.sc-ic-menu{margin-left:calc(var(--ic-space-xs) + var(--ic-space-xxxs));color:var(--ic-color-text-secondary);--ic-typography-color:var(--ic-color-text-secondary)}.error-icon-svg.sc-ic-menu{height:var(--ic-space-md);width:var(--ic-space-md);fill:var(--ic-status-error-default);align-self:center;display:flex;margin-right:calc(var(--ic-space-xxs) * 1.2)}.loading-error-info.sc-ic-menu{display:flex}.check-icon.sc-ic-menu{height:var(--ic-space-lg);width:var(--ic-space-lg);margin-left:var(--ic-space-xs);pointer-events:none}.focused-option.sc-ic-menu .check-icon.sc-ic-menu *.sc-ic-menu{fill:currentcolor}.option-group-title.sc-ic-menu{padding:var(--ic-space-lg) calc(var(--ic-space-xs) - var(--ic-space-1px))\n var(--ic-space-xs);--ic-typography-color:var(--ic-color-text-tertiary)}.ic-menu-small.sc-ic-menu-h .option-group-title.sc-ic-menu{padding:var(--ic-space-sm) calc(var(--ic-space-xs) - var(--ic-space-1px))\n var(--ic-space-xxs)}.last-recommended-option.sc-ic-menu{border-bottom:var(--ic-border-default)}.disabled-option.sc-ic-menu{color:var(--ic-architectural-200);--ic-typography-color:var(--ic-architectural-200);cursor:default;pointer-events:none}.focused-option.sc-ic-menu,.focused-option.sc-ic-menu .option-description.sc-ic-menu{background-color:var(--ic-color-focus-inner) !important;color:var(--ic-architectural-white) !important;--ic-typography-color:var(--ic-architectural-white) !important}.no-results.sc-ic-menu-h li.sc-ic-menu{cursor:no-drop}.no-results.sc-ic-menu-h li.sc-ic-menu:hover{background-color:transparent}@media (forced-colors: active){.focused-option.sc-ic-menu:focus{outline:none;border:0.125rem solid transparent}}";
76
+ const icMenuCss = "html.sc-ic-menu{line-height:1.15;-webkit-text-size-adjust:100%}body.sc-ic-menu{margin:0}main.sc-ic-menu{display:block}h1.sc-ic-menu{font-size:2em;margin:0.67em 0}hr.sc-ic-menu{box-sizing:content-box;height:0;overflow:visible}pre.sc-ic-menu{font-family:monospace, monospace;font-size:1em}a.sc-ic-menu{background-color:transparent}abbr[title].sc-ic-menu{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b.sc-ic-menu,strong.sc-ic-menu{font-weight:bolder}code.sc-ic-menu,kbd.sc-ic-menu,samp.sc-ic-menu{font-family:monospace, monospace;font-size:1em}small.sc-ic-menu{font-size:80%}sub.sc-ic-menu,sup.sc-ic-menu{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub.sc-ic-menu{bottom:-0.25em}sup.sc-ic-menu{top:-0.5em}img.sc-ic-menu{border-style:none}button.sc-ic-menu,input.sc-ic-menu,optgroup.sc-ic-menu,select.sc-ic-menu,textarea.sc-ic-menu{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button.sc-ic-menu,input.sc-ic-menu{overflow:visible}button.sc-ic-menu,select.sc-ic-menu{text-transform:none}button.sc-ic-menu,[type=\"button\"].sc-ic-menu,[type=\"reset\"].sc-ic-menu,[type=\"submit\"].sc-ic-menu{-webkit-appearance:button}button.sc-ic-menu::-moz-focus-inner,[type=\"button\"].sc-ic-menu::-moz-focus-inner,[type=\"reset\"].sc-ic-menu::-moz-focus-inner,[type=\"submit\"].sc-ic-menu::-moz-focus-inner{border-style:none;padding:0}button.sc-ic-menu:-moz-focusring,[type=\"button\"].sc-ic-menu:-moz-focusring,[type=\"reset\"].sc-ic-menu:-moz-focusring,[type=\"submit\"].sc-ic-menu:-moz-focusring{outline:1px dotted ButtonText}fieldset.sc-ic-menu{padding:0.35em 0.75em 0.625em}legend.sc-ic-menu{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress.sc-ic-menu{vertical-align:baseline}textarea.sc-ic-menu{overflow:auto}[type=\"checkbox\"].sc-ic-menu,[type=\"radio\"].sc-ic-menu{box-sizing:border-box;padding:0}[type=\"number\"].sc-ic-menu::-webkit-inner-spin-button,[type=\"number\"].sc-ic-menu::-webkit-outer-spin-button{height:auto}[type=\"search\"].sc-ic-menu{-webkit-appearance:textfield;outline-offset:-2px}[type=\"search\"].sc-ic-menu::-webkit-search-decoration{-webkit-appearance:none}.sc-ic-menu::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details.sc-ic-menu{display:block}summary.sc-ic-menu{display:list-item}template.sc-ic-menu{display:none}[hidden].sc-ic-menu{display:none}html.sc-ic-menu,body.sc-ic-menu,div.sc-ic-menu,span.sc-ic-menu,applet.sc-ic-menu,object.sc-ic-menu,iframe.sc-ic-menu,h1.sc-ic-menu,h2.sc-ic-menu,h3.sc-ic-menu,h4.sc-ic-menu,h5.sc-ic-menu,h6.sc-ic-menu,p.sc-ic-menu,blockquote.sc-ic-menu,pre.sc-ic-menu,a.sc-ic-menu,abbr.sc-ic-menu,acronym.sc-ic-menu,address.sc-ic-menu,big.sc-ic-menu,cite.sc-ic-menu,code.sc-ic-menu,del.sc-ic-menu,dfn.sc-ic-menu,em.sc-ic-menu,img.sc-ic-menu,ins.sc-ic-menu,kbd.sc-ic-menu,q.sc-ic-menu,s.sc-ic-menu,samp.sc-ic-menu,small.sc-ic-menu,strike.sc-ic-menu,strong.sc-ic-menu,sub.sc-ic-menu,sup.sc-ic-menu,tt.sc-ic-menu,var.sc-ic-menu,b.sc-ic-menu,u.sc-ic-menu,i.sc-ic-menu,center.sc-ic-menu,dl.sc-ic-menu,dt.sc-ic-menu,dd.sc-ic-menu,ol.sc-ic-menu,ul.sc-ic-menu,li.sc-ic-menu,fieldset.sc-ic-menu,form.sc-ic-menu,label.sc-ic-menu,legend.sc-ic-menu,table.sc-ic-menu,caption.sc-ic-menu,tbody.sc-ic-menu,tfoot.sc-ic-menu,thead.sc-ic-menu,tr.sc-ic-menu,th.sc-ic-menu,td.sc-ic-menu,article.sc-ic-menu,aside.sc-ic-menu,canvas.sc-ic-menu,details.sc-ic-menu,embed.sc-ic-menu,figure.sc-ic-menu,figcaption.sc-ic-menu,footer.sc-ic-menu,header.sc-ic-menu,hgroup.sc-ic-menu,menu.sc-ic-menu,nav.sc-ic-menu,output.sc-ic-menu,ruby.sc-ic-menu,section.sc-ic-menu,summary.sc-ic-menu,time.sc-ic-menu,mark.sc-ic-menu,audio.sc-ic-menu,video.sc-ic-menu{margin:0;padding:0;border:0;font-size:100%;font-style:inherit;vertical-align:baseline}@media (prefers-reduced-motion: no-preference){.ic-menu-open.sc-ic-menu-h .menu.sc-ic-menu{transition:max-height var(--ic-transition-duration-slow)}}.sc-ic-menu-h{max-height:0;width:var(--menu-width, var(--input-width, 20rem));color:var(--ic-color-text-primary);--ic-typography-color:var(--ic-color-text-primary);background-color:var(--ic-architectural-white);position:relative;z-index:var(--ic-z-index-menu);box-sizing:border-box;box-shadow:var(--ic-elevation-overlay);border-radius:var(--ic-border-radius)}.ic-menu-open.sc-ic-menu-h:not(.ic-menu-no-focus):focus-within{box-shadow:var(--ic-border-focus);outline:var(--ic-hc-focus-outline)}.ic-select-select-all-focused.sc-ic-menu-h{box-shadow:var(--ic-elevation-overlay) !important}#retry-button.sc-ic-menu::part(button){height:var(--ic-space-lg)}.small.sc-ic-menu #retry-button.sc-ic-menu::part(button){height:var(--ic-space-md)}.on-dialog.sc-ic-menu-h{inset:auto !important}.menu.sc-ic-menu{text-decoration:none;list-style-type:none;border-radius:1px;background-color:var(--ic-architectural-white);visibility:hidden;max-height:0;overflow-y:hidden}.menu.sc-ic-menu:has(+.option-bar).sc-ic-menu{border-radius:0 0 1px 1px}.menu-scroll.sc-ic-menu{overflow-y:auto}.menu.sc-ic-menu:focus-visible{outline:none}.ic-menu-open.sc-ic-menu-h{max-height:none;display:flex;flex-direction:column-reverse;border:var(--ic-border-width) solid var(--ic-architectural-400);transition:box-shadow var(--ic-easing-transition-fast)}.ic-menu-open.sc-ic-menu-h .menu.sc-ic-menu{visibility:visible;max-height:calc(var(--ic-space-xl) * 10 + var(--ic-space-xxxs))}.ic-menu-open.sc-ic-menu-h .option-bar.sc-ic-menu{visibility:visible}.ic-menu-open.sc-ic-menu-h .select-all-button.sc-ic-menu{display:block}.ic-menu-full-width.sc-ic-menu-h{width:100%}.option.sc-ic-menu{padding:var(--ic-space-xs) calc(var(--ic-space-xs) - var(--ic-space-1px));cursor:pointer;display:flex;align-items:center}.loading-option.sc-ic-menu p.sc-ic-menu{margin-bottom:0 !important}.option.sc-ic-menu:not(.loading-option){justify-content:space-between}.ic-menu-small.sc-ic-menu-h .option.sc-ic-menu{padding:var(--ic-space-xxs) calc(var(--ic-space-xs) - var(--ic-space-1px))}.ic-menu-large.sc-ic-menu-h .option.sc-ic-menu{padding:var(--ic-space-sm) calc(var(--ic-space-xs) - var(--ic-space-1px))}.option.sc-ic-menu:last-child{border-radius:0 0 1px 1px}.sc-ic-menu:not(.menu:has(+.option-bar)).sc-ic-menu .option.sc-ic-menu:first-child{border-radius:1px 1px 0 0}.option.sc-ic-menu:not(.disabled-option):hover{background-color:var(--ic-action-dark-bg-hover)}.option.sc-ic-menu:not(.disabled-option):active{background-color:var(--ic-action-dark-bg-pressed)}.option.sc-ic-menu:focus-visible{outline:var(--ic-hc-focus-outline)}.option.sc-ic-menu:not(.disabled-option) .option-description.sc-ic-menu{--ic-typography-color:var(--ic-color-text-secondary)}.option.sc-ic-menu .option-label.sc-ic-menu{display:flex;flex-direction:row;align-items:top}.option.sc-ic-menu .option-label.sc-ic-menu ic-typography.sc-ic-menu{max-width:100%;word-wrap:break-word}.option.sc-ic-menu .option-element.sc-ic-menu{margin-top:var(--ic-space-xxs)}.option.sc-ic-menu .option-icon.sc-ic-menu{height:var(--ic-space-md);width:var(--ic-space-md);margin-top:var(--ic-space-xxs);margin-right:var(--ic-space-xxxs)}.option-text-container.sc-ic-menu{pointer-events:none;width:100%}.option-text-container.show-check-icon.sc-ic-menu{width:calc(var(--ic-space-lg) * 10 + var(--ic-space-xl))}.option.loading-option.sc-ic-menu .option-text-container.sc-ic-menu{margin-left:calc(var(--ic-space-xs) + var(--ic-space-xxxs));color:var(--ic-color-text-secondary);--ic-typography-color:var(--ic-color-text-secondary)}.error-icon-svg.sc-ic-menu{height:var(--ic-space-md);width:var(--ic-space-md);fill:var(--ic-status-error-default);align-self:center;display:flex;margin-right:calc(var(--ic-space-xxs) * 1.2)}.loading-error-info.sc-ic-menu{display:flex}.check-icon.sc-ic-menu{height:var(--ic-space-lg);min-width:var(--ic-space-lg);width:var(--ic-space-lg);margin-left:var(--ic-space-xs);pointer-events:none}.focused-option.sc-ic-menu .check-icon.sc-ic-menu *.sc-ic-menu{fill:currentcolor}.option-group-title.sc-ic-menu{padding:var(--ic-space-lg) calc(var(--ic-space-xs) - var(--ic-space-1px))\n var(--ic-space-xs);--ic-typography-color:var(--ic-color-text-tertiary)}.ic-menu-small.sc-ic-menu-h .option-group-title.sc-ic-menu{padding:var(--ic-space-sm) calc(var(--ic-space-xs) - var(--ic-space-1px))\n var(--ic-space-xxs)}.last-recommended-option.sc-ic-menu{border-bottom:var(--ic-border-default)}.disabled-option.sc-ic-menu{color:var(--ic-architectural-200);--ic-typography-color:var(--ic-architectural-200);cursor:default;pointer-events:none}.focused-option.sc-ic-menu,.focused-option.sc-ic-menu .option-description.sc-ic-menu{background-color:var(--ic-color-focus-inner) !important;color:var(--ic-architectural-white) !important;--ic-typography-color:var(--ic-architectural-white) !important}.no-results.sc-ic-menu-h li.sc-ic-menu{cursor:no-drop}.no-results.sc-ic-menu-h li.sc-ic-menu:hover{background-color:transparent}.option-bar.sc-ic-menu{padding:var(--ic-space-xxs) var(--ic-space-xs);display:flex;align-items:center;justify-content:space-between;background-color:var(--ic-architectural-40);visibility:hidden;border-bottom:var(--ic-border-width) solid var(--ic-architectural-400);border-radius:1px 1px 0 0}.option-bar.sc-ic-menu p.sc-ic-menu{margin-bottom:0 !important}.ic-menu-large.sc-ic-menu-h .option-bar.sc-ic-menu{padding:var(--ic-space-xs)}.select-all-button.sc-ic-menu{display:none}.select-all-button.sc-ic-menu:focus{z-index:calc(var(--ic-z-index-menu) + 1)}@media (forced-colors: active){.focused-option.sc-ic-menu:focus{outline:none;border:0.125rem solid transparent}}";
77
77
 
78
78
  const Menu = class {
79
79
  constructor(hostRef) {
@@ -81,19 +81,26 @@ const Menu = class {
81
81
  this.menuKeyPress = createEvent(this, "menuKeyPress", 7);
82
82
  this.menuOptionId = createEvent(this, "menuOptionId", 7);
83
83
  this.menuOptionSelect = createEvent(this, "menuOptionSelect", 7);
84
+ this.menuOptionSelectAll = createEvent(this, "menuOptionSelectAll", 7);
84
85
  this.menuStateChange = createEvent(this, "menuStateChange", 7);
85
- this.menuValueChange = createEvent(this, "menuValueChange", 7);
86
86
  this.retryButtonClicked = createEvent(this, "retryButtonClicked", 7);
87
87
  this.timeoutBlur = createEvent(this, "timeoutBlur", 7);
88
88
  this.ungroupedOptionsSet = createEvent(this, "ungroupedOptionsSet", 7);
89
+ this.ACTIVE_DESCENDANT = "aria-activedescendant";
90
+ this.CLEAR_BUTTON_ID = "clear-button";
89
91
  this.disabledOptionSelected = false;
90
92
  this.hasPreviouslyBlurred = false;
91
93
  this.hasTimedOut = false;
92
94
  this.isLoading = false;
95
+ this.isMultiSelect = false;
93
96
  this.isSearchBar = false;
94
97
  this.isSearchableSelect = false;
95
- // Prevents menu re-opening immediately after it is closed on blur when clicking input.
96
- this.preventClickOpen = false;
98
+ this.lastOptionSelected = null; // Index of last option selected
99
+ this.lastOptionFocused = null; // Index of last option focused
100
+ this.multiOptionClicked = null;
101
+ this.preventClickOpen = false; // Prevents menu re-opening immediately after it is closed on blur when clicking input.
102
+ this.preventMenuFocus = false; // (When multiple) ensures focus moves straight to select all button from menu.
103
+ this.shiftPressed = false;
97
104
  this.ungroupedOptions = [];
98
105
  this.handleClearListener = () => {
99
106
  this.optionHighlighted = "";
@@ -104,9 +111,16 @@ const Menu = class {
104
111
  };
105
112
  this.handleMenuChange = (open, focusInput) => {
106
113
  this.menuStateChange.emit({ open, focusInput });
107
- if (!open && focusInput !== false) {
108
- this.inputEl.focus();
109
- this.preventClickOpen = false;
114
+ if (!open) {
115
+ if (focusInput !== false) {
116
+ this.inputEl.focus();
117
+ this.preventClickOpen = false;
118
+ }
119
+ // Reset optionHighlighted so previously highlighted option doesn't get reselected when Enter pressed
120
+ if (this.isMultiSelect) {
121
+ this.optionHighlighted = undefined;
122
+ this.multiOptionClicked = null;
123
+ }
110
124
  }
111
125
  };
112
126
  this.setNextOptionValue = (selectedOptionIndex) => {
@@ -141,24 +155,34 @@ const Menu = class {
141
155
  if (parent.tagName === "IC-SEARCH-BAR") {
142
156
  this.isSearchBar = true;
143
157
  }
144
- else if (parent.tagName === "IC-SELECT" &&
145
- parent.getAttribute("searchable") !== null &&
146
- parent.getAttribute("searchable") !== undefined) {
147
- this.isSearchableSelect = true;
158
+ else if (parent.tagName === "IC-SELECT") {
159
+ if (parent.getAttribute("searchable") !== null &&
160
+ parent.getAttribute("searchable") !== undefined) {
161
+ this.isSearchableSelect = true;
162
+ }
163
+ else if (parent.getAttribute("multiple") !== null &&
164
+ parent.getAttribute("multiple") !== undefined) {
165
+ this.isMultiSelect = true;
166
+ }
148
167
  }
149
168
  };
169
+ // Open menu when up or down arrow keys are pressed
150
170
  this.arrowBehaviour = (event) => {
151
171
  event.preventDefault();
152
172
  this.handleMenuChange(true);
153
173
  };
154
- this.setMenuOptions = () => this.isSearchBar ? this.options : this.ungroupedOptions;
174
+ this.getMenuOptions = () => this.isSearchBar ? this.options : this.ungroupedOptions;
175
+ // Set option that is focused and so should show focus state
155
176
  this.setHighlightedOption = (highlightedIndex) => {
156
- const menuOptions = this.setMenuOptions();
177
+ const menuOptions = this.getMenuOptions();
157
178
  menuOptions[highlightedIndex] &&
158
179
  !menuOptions[highlightedIndex].timedOut &&
159
180
  (this.optionHighlighted =
160
181
  menuOptions[highlightedIndex][this.valueField] || undefined);
161
182
  };
183
+ // Determines keyboard behaviour when selection is automatic
184
+ // (i.e. you don't have to press Enter select an option - just focus on it)
185
+ // and menu is closed
162
186
  this.autoSetInputValueKeyboardOpen = (event) => {
163
187
  const selectedOptionIndex = this.ungroupedOptions.findIndex((option) => option[this.valueField] === this.value);
164
188
  this.keyboardNav = false;
@@ -175,147 +199,278 @@ const Menu = class {
175
199
  break;
176
200
  case " ":
177
201
  case "Enter":
178
- if (event.target.id !== "clear-button") {
202
+ if (event.target.id !== this.CLEAR_BUTTON_ID) {
179
203
  this.handleMenuChange(true);
180
204
  }
181
205
  break;
182
206
  }
183
207
  };
184
- this.manSetInputValueKeyboardOpen = (event) => {
185
- const menuOptions = this.setMenuOptions();
186
- const highlightedOptionIndex = menuOptions.findIndex((option) => option[this.valueField] === this.optionHighlighted);
187
- const getOptionId = (index) => { var _a; return (_a = Array.from(this.host.querySelectorAll("li"))[index]) === null || _a === void 0 ? void 0 : _a.id; };
208
+ this.selectHighlightedOption = (options, highlightedOptionIndex) => {
209
+ if (!this.isLoading && !this.hasTimedOut) {
210
+ this.keyboardNav = true;
211
+ }
188
212
  const isOpen = this.isSearchBar || this.isSearchableSelect || this.open;
189
- switch (event.key) {
190
- case "ArrowDown":
191
- this.keyboardNav = true;
192
- this.arrowBehaviour(event);
193
- if (highlightedOptionIndex < menuOptions.length - 1) {
194
- this.setHighlightedOption(highlightedOptionIndex + 1);
195
- this.menuOptionId.emit({
196
- optionId: getOptionId(highlightedOptionIndex + 1),
197
- });
198
- }
199
- else {
200
- this.setHighlightedOption(0);
201
- this.menuOptionId.emit({
202
- optionId: getOptionId(0),
203
- });
213
+ if (isOpen) {
214
+ if (highlightedOptionIndex >= 0) {
215
+ if (options[highlightedOptionIndex] !== undefined) {
216
+ if (this.isSearchBar &&
217
+ options[highlightedOptionIndex].disabled === true) {
218
+ this.disabledOptionSelected = true;
219
+ }
220
+ else {
221
+ this.setInputValue(highlightedOptionIndex);
222
+ }
204
223
  }
205
- this.preventIncorrectTabOrder = false;
206
- this.focusFromSearchKeypress = false;
207
- break;
208
- case "ArrowUp":
209
- this.keyboardNav = true;
210
- this.arrowBehaviour(event);
211
- if (highlightedOptionIndex <= 0 ||
212
- highlightedOptionIndex > menuOptions.length + 1) {
213
- this.setHighlightedOption(menuOptions.length - 1);
224
+ }
225
+ else {
226
+ this.setInputValue(highlightedOptionIndex);
227
+ }
228
+ }
229
+ else {
230
+ this.handleMenuChange(true);
231
+ }
232
+ };
233
+ // Check if option is selected based on the index of the option
234
+ this.isOptionSelected = (index) => {
235
+ const menuOptions = this.getMenuOptions();
236
+ return this.value
237
+ ? this.value.includes(menuOptions[index][this.valueField])
238
+ : false;
239
+ };
240
+ // Deselect currently selected options when shift pressed, but keep certain options selected
241
+ this.deselectSelectedOptions = (optionsToKeepSelected) => {
242
+ const menuOptions = this.getMenuOptions();
243
+ if (this.value) {
244
+ const selectedOptionIndexes = this.value.map((value) => {
245
+ return menuOptions.findIndex((option) => option[this.valueField] === value);
246
+ });
247
+ // Call setInputValue (which toggles the selected state) on options that need to be deselected
248
+ selectedOptionIndexes.forEach((index) => !optionsToKeepSelected.includes(index) && this.setInputValue(index));
249
+ }
250
+ };
251
+ // Determines keyboard behaviour when selection is manual (i.e. when you have to press Enter to select an option)
252
+ this.manualSetInputValueKeyboardOpen = (event) => {
253
+ const menuOptions = this.getMenuOptions();
254
+ // For preventing focus disappearing on currently focused option when Shift / Cmd / Ctrl pressed
255
+ // (i.e. when user is likely in the middle of executing a keyboard combination to select options)
256
+ const isKeyboardCombination = event.shiftKey || event.metaKey || event.ctrlKey;
257
+ const highlightedOptionIndex = this.getOptionHighlightedIndex();
258
+ const clickedMultiOptionIndex = menuOptions.findIndex((option) => option[this.valueField] === this.multiOptionClicked);
259
+ const getOptionId = (index) => { var _a; return (_a = Array.from(this.host.querySelectorAll("li"))[index]) === null || _a === void 0 ? void 0 : _a.id; };
260
+ // Space press should be equivalent to Enter when multi-select
261
+ if (event.key === " " && this.isMultiSelect) {
262
+ this.handleOptionSelect(event, highlightedOptionIndex);
263
+ }
264
+ else {
265
+ switch (event.key) {
266
+ case "ArrowDown":
267
+ this.keyboardNav = true;
268
+ this.arrowBehaviour(event);
269
+ if (this.multiOptionClicked) {
270
+ // Set focus to option last clicked
271
+ // Prevents it resetting to the top of the menu when user switches to using keyboard
272
+ this.setHighlightedOption(clickedMultiOptionIndex);
273
+ this.multiOptionClicked = null;
274
+ }
275
+ else {
276
+ this.handleSingleShiftSelect(event, highlightedOptionIndex, menuOptions);
277
+ if (highlightedOptionIndex < menuOptions.length - 1) {
278
+ this.setHighlightedOption(highlightedOptionIndex + 1);
279
+ this.menuOptionId.emit({
280
+ optionId: getOptionId(highlightedOptionIndex + 1),
281
+ });
282
+ this.handleSingleShiftSelect(event, highlightedOptionIndex + 1, menuOptions);
283
+ }
284
+ else {
285
+ this.setHighlightedOption(0);
286
+ this.menuOptionId.emit({
287
+ optionId: getOptionId(0),
288
+ });
289
+ this.handleSingleShiftSelect(event, 0, menuOptions);
290
+ }
291
+ // Deselect currently selected options if arrow was pressed for first time after shift is held
292
+ if (this.isMultiSelect && this.shiftPressed) {
293
+ this.deselectSelectedOptions([
294
+ highlightedOptionIndex,
295
+ this.getOptionHighlightedIndex(),
296
+ ]);
297
+ this.shiftPressed = false;
298
+ }
299
+ }
300
+ this.lastOptionFocused = this.getOptionHighlightedIndex();
301
+ this.preventIncorrectTabOrder = false;
302
+ this.focusFromSearchKeypress = false;
303
+ break;
304
+ case "ArrowUp":
305
+ this.keyboardNav = true;
306
+ this.arrowBehaviour(event);
307
+ if (this.multiOptionClicked) {
308
+ // Set focus to option last clicked
309
+ // Prevents it resetting to the bottom of the menu when user switches to using keyboard
310
+ this.setHighlightedOption(clickedMultiOptionIndex);
311
+ this.multiOptionClicked = null;
312
+ }
313
+ else {
314
+ this.handleSingleShiftSelect(event, highlightedOptionIndex, menuOptions);
315
+ if (highlightedOptionIndex <= 0 ||
316
+ highlightedOptionIndex > menuOptions.length + 1) {
317
+ this.setHighlightedOption(menuOptions.length - 1);
318
+ this.menuOptionId.emit({
319
+ optionId: getOptionId(menuOptions.length - 1),
320
+ });
321
+ this.handleSingleShiftSelect(event, menuOptions.length - 1, menuOptions);
322
+ }
323
+ else {
324
+ this.setHighlightedOption(highlightedOptionIndex - 1);
325
+ this.menuOptionId.emit({
326
+ optionId: getOptionId(highlightedOptionIndex - 1),
327
+ });
328
+ this.handleSingleShiftSelect(event, highlightedOptionIndex - 1, menuOptions);
329
+ }
330
+ // Deselect currently selected options if arrow was pressed for first time after shift is held
331
+ if (this.isMultiSelect && this.shiftPressed) {
332
+ this.deselectSelectedOptions([
333
+ highlightedOptionIndex,
334
+ this.getOptionHighlightedIndex(),
335
+ ]);
336
+ this.shiftPressed = false;
337
+ }
338
+ }
339
+ this.lastOptionFocused = this.getOptionHighlightedIndex();
340
+ this.preventIncorrectTabOrder = false;
341
+ this.focusFromSearchKeypress = false;
342
+ break;
343
+ case "Home": {
344
+ const startOptionIndex = 0;
345
+ this.keyboardNav = true;
346
+ event.preventDefault();
347
+ this.arrowBehaviour(event);
348
+ this.setHighlightedOption(startOptionIndex);
214
349
  this.menuOptionId.emit({
215
- optionId: getOptionId(menuOptions.length - 1),
350
+ optionId: getOptionId(startOptionIndex),
216
351
  });
352
+ if (event.shiftKey && event.ctrlKey) {
353
+ this.handleMultipleShiftSelect(startOptionIndex);
354
+ }
355
+ this.lastOptionFocused = startOptionIndex;
356
+ this.lastOptionSelected = startOptionIndex;
357
+ break;
217
358
  }
218
- else {
219
- this.setHighlightedOption(highlightedOptionIndex - 1);
359
+ case "End": {
360
+ const endOptionIndex = menuOptions.length - 1;
361
+ this.keyboardNav = true;
362
+ event.preventDefault();
363
+ this.arrowBehaviour(event);
364
+ this.setHighlightedOption(endOptionIndex);
220
365
  this.menuOptionId.emit({
221
- optionId: getOptionId(highlightedOptionIndex - 1),
366
+ optionId: getOptionId(endOptionIndex),
222
367
  });
223
- }
224
- this.preventIncorrectTabOrder = false;
225
- this.focusFromSearchKeypress = false;
226
- break;
227
- case "Home":
228
- this.keyboardNav = true;
229
- event.preventDefault();
230
- this.arrowBehaviour(event);
231
- this.setHighlightedOption(0);
232
- this.menuOptionId.emit({
233
- optionId: getOptionId(0),
234
- });
235
- break;
236
- case "End":
237
- this.keyboardNav = true;
238
- event.preventDefault();
239
- this.arrowBehaviour(event);
240
- this.setHighlightedOption(menuOptions.length - 1);
241
- this.menuOptionId.emit({
242
- optionId: getOptionId(menuOptions.length - 1),
243
- });
244
- break;
245
- case " ":
246
- this.keyboardNav = false;
247
- if (this.isSearchBar || this.isSearchableSelect) {
368
+ if (event.shiftKey && event.ctrlKey) {
369
+ this.handleMultipleShiftSelect(endOptionIndex);
370
+ }
371
+ this.lastOptionFocused = endOptionIndex;
372
+ this.lastOptionSelected = endOptionIndex;
248
373
  break;
249
374
  }
250
- else {
251
- if (event.target.id !== "clear-button") {
252
- this.handleMenuChange(true);
375
+ case " ":
376
+ if (!isKeyboardCombination) {
377
+ this.keyboardNav = false;
253
378
  }
254
- }
255
- break;
256
- case "Enter":
257
- event.preventDefault();
258
- this.keyboardNav = false;
259
- if (isOpen) {
260
- if (highlightedOptionIndex >= 0) {
261
- if (menuOptions[highlightedOptionIndex] !== undefined) {
262
- if (this.isSearchBar &&
263
- menuOptions[highlightedOptionIndex].disabled === true) {
264
- this.disabledOptionSelected = true;
265
- }
266
- else {
267
- this.setInputValue(highlightedOptionIndex);
268
- this.value =
269
- menuOptions[highlightedOptionIndex][this.valueField];
270
- }
379
+ if (this.isSearchBar || this.isSearchableSelect) {
380
+ break;
381
+ }
382
+ else {
383
+ if (event.target.id !== this.CLEAR_BUTTON_ID) {
384
+ this.handleMenuChange(true);
385
+ }
386
+ }
387
+ break;
388
+ case "Enter":
389
+ event.preventDefault();
390
+ if (!isKeyboardCombination) {
391
+ this.keyboardNav = false;
392
+ }
393
+ this.handleOptionSelect(event, highlightedOptionIndex);
394
+ break;
395
+ case "Escape":
396
+ if (this.open) {
397
+ event.stopImmediatePropagation();
398
+ }
399
+ this.handleMenuChange(false);
400
+ this.menuOptionId.emit({ optionId: undefined });
401
+ break;
402
+ case "a":
403
+ // Checks if Cmd (meta) key is pressed if Mac device (while excluding meta key on Windows)
404
+ // Otherwise, if a different OS, checks Ctrl key
405
+ if ((isMacDevice() && event.metaKey) ||
406
+ (!isMacDevice() && event.ctrlKey)) {
407
+ this.emitSelectAll();
408
+ this.lastOptionFocused = null;
409
+ this.lastOptionSelected = null;
410
+ }
411
+ break;
412
+ case "Shift":
413
+ case "Tab":
414
+ if (event.key === "Shift") {
415
+ this.shiftPressed = true;
416
+ }
417
+ if (this.isSearchBar) {
418
+ this.keyboardNav = true;
419
+ }
420
+ if (this.isMultiSelect) {
421
+ if (this.open && !event.shiftKey && this.selectAllButton) {
422
+ event.preventDefault();
423
+ this.selectAllButton.focus(); // Move focus to select all button instead of focused option
424
+ this.preventMenuFocus = true;
425
+ this.preventClickOpen = true;
426
+ this.optionHighlighted = undefined; // Stop any option focus states showing when focus moved to select all button
271
427
  }
272
428
  }
273
429
  else {
274
- this.setInputValue(highlightedOptionIndex);
430
+ this.preventIncorrectTabOrder = true;
275
431
  }
276
- }
277
- else {
278
- this.handleMenuChange(true);
279
- }
280
- break;
281
- case "Escape":
282
- if (this.open) {
283
- event.stopImmediatePropagation();
284
- }
285
- this.handleMenuChange(false);
286
- this.menuOptionId.emit({ optionId: undefined });
287
- break;
288
- case "Shift":
289
- case "Tab":
290
- if (this.isSearchBar) {
291
- this.keyboardNav = true;
292
- }
293
- this.preventIncorrectTabOrder = true;
294
- break;
295
- default:
296
- this.keyboardNav = false;
297
- this.focusOnSearchOrSelectInput(menuOptions, highlightedOptionIndex);
298
- break;
432
+ break;
433
+ default:
434
+ if (!isKeyboardCombination) {
435
+ this.keyboardNav = false;
436
+ }
437
+ this.focusOnSearchOrSelectInput(menuOptions, highlightedOptionIndex);
438
+ }
299
439
  }
300
440
  };
301
441
  this.setInputValue = (highlightedOptionIndex) => {
302
- const menuOptions = this.setMenuOptions();
442
+ const menuOptions = this.getMenuOptions();
303
443
  if (menuOptions[highlightedOptionIndex] !== undefined) {
304
444
  this.menuOptionSelect.emit({
305
445
  value: menuOptions[highlightedOptionIndex][this.valueField],
306
446
  });
307
- this.optionHighlighted = undefined;
308
- this.menuOptionId.emit({ optionId: undefined });
447
+ if (this.closeOnSelect) {
448
+ this.optionHighlighted = undefined;
449
+ this.menuOptionId.emit({ optionId: undefined });
450
+ }
451
+ }
452
+ if (this.closeOnSelect) {
453
+ if (!this.hasTimedOut) {
454
+ this.handleMenuChange(false);
455
+ }
456
+ else {
457
+ this.parentEl.setFocus();
458
+ }
309
459
  }
310
- if (!this.hasTimedOut)
311
- this.handleMenuChange(false);
312
- else
313
- this.parentEl.setFocus();
314
460
  };
315
461
  this.handleOptionClick = (event) => {
316
462
  const { value, label } = event.target.dataset;
317
- this.menuOptionSelect.emit({ value, label });
318
- this.handleMenuChange(false);
463
+ if (this.isMultiSelect) {
464
+ const menuOptions = this.getMenuOptions();
465
+ const selectedOptionIndex = menuOptions.findIndex((option) => option.value === value);
466
+ this.handleOptionSelect(event, selectedOptionIndex, true);
467
+ this.multiOptionClicked = value;
468
+ }
469
+ else {
470
+ this.menuOptionSelect.emit({ value, label });
471
+ this.handleMenuChange(false);
472
+ }
473
+ this.optionHighlighted = undefined;
319
474
  };
320
475
  this.handleRetry = () => {
321
476
  this.retryButtonClicked.emit({ value: this.value });
@@ -328,13 +483,23 @@ const Menu = class {
328
483
  };
329
484
  this.handleBlur = (event) => {
330
485
  if (event.relatedTarget !== this.inputEl) {
331
- if (!this.menu.contains(event.relatedTarget)) {
486
+ if (event.relatedTarget === this.selectAllButton) {
487
+ this.menu.removeAttribute(this.ACTIVE_DESCENDANT);
488
+ }
489
+ if (!(this.menu.contains(event.relatedTarget) ||
490
+ event.relatedTarget === this.selectAllButton)) {
332
491
  this.handleMenuChange(false, this.hasPreviouslyBlurred);
492
+ this.menu.removeAttribute(this.ACTIVE_DESCENDANT);
493
+ this.lastOptionFocused = null;
494
+ this.lastOptionSelected = null;
333
495
  }
334
496
  }
335
497
  else {
336
498
  this.handleMenuChange(false);
337
499
  this.preventClickOpen = true;
500
+ this.menu.removeAttribute(this.ACTIVE_DESCENDANT);
501
+ this.lastOptionFocused = null;
502
+ this.lastOptionSelected = null;
338
503
  }
339
504
  if (!this.isSearchBar)
340
505
  this.hasPreviouslyBlurred = !!event.relatedTarget;
@@ -347,12 +512,109 @@ const Menu = class {
347
512
  this.autoSetValueOnMenuKeyDown(event);
348
513
  }
349
514
  else if (this.activationType === "manual" && !this.isSearchBar) {
350
- this.manSetInputValueKeyboardOpen(event);
515
+ this.manualSetInputValueKeyboardOpen(event);
351
516
  }
352
517
  };
518
+ this.handleMenuKeyUp = (event) => {
519
+ if (event.key === "Tab" && event.shiftKey) {
520
+ this.preventClickOpen = false;
521
+ }
522
+ if (event.key === "Enter" && this.disabledOptionSelected) {
523
+ this.disabledOptionSelected = false;
524
+ event.stopImmediatePropagation();
525
+ }
526
+ if (event.key === "Shift") {
527
+ this.shiftPressed = false;
528
+ }
529
+ };
530
+ this.handleSelectAllClick = () => {
531
+ this.keyboardNav = false;
532
+ this.menu.focus();
533
+ this.emitSelectAll();
534
+ this.lastOptionFocused = null;
535
+ this.lastOptionSelected = null;
536
+ };
537
+ this.handleSelectAllBlur = (event) => {
538
+ this.host.classList.remove("ic-select-select-all-focused");
539
+ if (!this.menu.contains(event.relatedTarget)) {
540
+ this.handleMenuChange(false, false);
541
+ }
542
+ };
543
+ this.handleSelectAllFocus = () => {
544
+ this.host.classList.add("ic-select-select-all-focused");
545
+ this.lastOptionFocused = null;
546
+ this.lastOptionSelected = null;
547
+ };
548
+ // Fix for Safari - select all button click was causing menu to close
549
+ this.handleSelectAllMouseDown = (event) => {
550
+ event.preventDefault();
551
+ };
552
+ // When shift key is being used to select contiguous options one by one on a multi-select
553
+ // I.e. holding shift and pressing up and down arrow keys
554
+ this.handleSingleShiftSelect = (event, optionToSelectIndex, options) => {
555
+ if (this.isMultiSelect &&
556
+ event.shiftKey &&
557
+ !this.isOptionSelected(optionToSelectIndex)) {
558
+ this.selectHighlightedOption(options, optionToSelectIndex);
559
+ this.lastOptionSelected = optionToSelectIndex;
560
+ }
561
+ };
562
+ // When shift key is being used to select multiple options at once on a multi-select
563
+ // I.e. holding shift when selecting another option
564
+ this.handleMultipleShiftSelect = (lastOptionInSelection, useFocusForSelection = false, firstOptionSelected = null) => {
565
+ this.shiftPressed = false;
566
+ const firstOptionInSelection = firstOptionSelected === null
567
+ ? this.getFirstOptionInSelection(useFocusForSelection)
568
+ : firstOptionSelected;
569
+ if (firstOptionInSelection !== null) {
570
+ const optionsToSelect = [];
571
+ if (firstOptionInSelection < lastOptionInSelection) {
572
+ for (let i = firstOptionInSelection; i < lastOptionInSelection + 1; i++) {
573
+ optionsToSelect.push(i);
574
+ }
575
+ }
576
+ else {
577
+ for (let i = firstOptionInSelection; i > lastOptionInSelection - 1; i--) {
578
+ optionsToSelect.push(i);
579
+ }
580
+ }
581
+ optionsToSelect.forEach((optionIndex) => !this.isOptionSelected(optionIndex) && this.setInputValue(optionIndex));
582
+ this.deselectSelectedOptions(optionsToSelect);
583
+ }
584
+ };
585
+ this.handleOptionSelect = (event, optionIndex, useFocusForSelection = false) => {
586
+ const menuOptions = this.getMenuOptions();
587
+ const firstOptionInSelection = this.getFirstOptionInSelection(useFocusForSelection);
588
+ if (event.shiftKey && firstOptionInSelection !== null) {
589
+ this.handleMultipleShiftSelect(optionIndex, useFocusForSelection, firstOptionInSelection);
590
+ }
591
+ else {
592
+ this.selectHighlightedOption(menuOptions, optionIndex);
593
+ }
594
+ this.lastOptionFocused = optionIndex;
595
+ this.lastOptionSelected = optionIndex;
596
+ };
597
+ this.getFirstOptionInSelection = (useFocusForSelection) => {
598
+ return useFocusForSelection && this.lastOptionFocused !== null
599
+ ? this.lastOptionFocused
600
+ : this.lastOptionSelected !== null
601
+ ? this.lastOptionSelected
602
+ : null;
603
+ };
604
+ this.emitSelectAll = () => {
605
+ var _a;
606
+ // Select all if there is either no value or not all options are selected
607
+ // 'true' means select all, 'false' means clear all
608
+ this.menuOptionSelectAll.emit({
609
+ select: !this.value || !(((_a = this.value) === null || _a === void 0 ? void 0 : _a.length) === this.ungroupedOptions.length),
610
+ });
611
+ };
353
612
  this.emitMenuKeyPress = (isNavKey, key) => {
354
613
  this.menuKeyPress.emit({ isNavKey: isNavKey, key: key });
355
614
  };
615
+ // Determines keyboard behaviour when selection is automatic
616
+ // (i.e. you don't have to press Enter select an option - just focus on it)
617
+ // and menu is focused
356
618
  this.autoSetValueOnMenuKeyDown = (event) => {
357
619
  event.cancelBubble = true;
358
620
  const selectedOptionIndex = this.ungroupedOptions.findIndex((option) => option[this.valueField] === this.value);
@@ -412,15 +674,6 @@ const Menu = class {
412
674
  }
413
675
  this.emitMenuKeyPress(this.keyboardNav, event.key);
414
676
  };
415
- this.handleMenuKeyUp = (event) => {
416
- if (event.key === "Tab" && event.shiftKey) {
417
- this.preventClickOpen = false;
418
- }
419
- if (event.key === "Enter" && this.disabledOptionSelected) {
420
- this.disabledOptionSelected = false;
421
- event.stopImmediatePropagation();
422
- }
423
- };
424
677
  this.getOptionId = (value) => {
425
678
  return `${this.menuId}-${value}`;
426
679
  };
@@ -446,6 +699,10 @@ const Menu = class {
446
699
  }
447
700
  return sorted;
448
701
  };
702
+ this.getOptionHighlightedIndex = () => {
703
+ const menuOptions = this.getMenuOptions();
704
+ return menuOptions.findIndex((option) => option[this.valueField] === this.optionHighlighted);
705
+ };
449
706
  this.isManualMode = this.activationType === "manual";
450
707
  this.scrollToSelected = (menu) => {
451
708
  const selectedOption = this.selectOnEnter
@@ -457,9 +714,14 @@ const Menu = class {
457
714
  elTop < menu.scrollTop + menu.offsetHeight) {
458
715
  menu.scrollTop = selectedOption.offsetTop;
459
716
  }
717
+ // 'aria-activedescendant' affects screen reader focus
718
+ // https://www.w3.org/TR/2017/WD-wai-aria-practices-1.1-20170628/#kbd_focus_activedescendant
719
+ this.menu.setAttribute(this.ACTIVE_DESCENDANT, selectedOption.id);
460
720
  selectedOption.focus();
461
721
  }
462
722
  };
723
+ // Set 'ungroupedOptions' variable and emit its value
724
+ // - this is all the options with disabled options and group titles removed
463
725
  this.loadUngroupedOptions = () => {
464
726
  if (this.options.length > 0 && this.options.map) {
465
727
  this.options.map((option) => {
@@ -486,21 +748,24 @@ const Menu = class {
486
748
  this.handleTimeoutBlur = (ev) => {
487
749
  this.timeoutBlur.emit({ ev });
488
750
  };
489
- this.optionContent = (option) => {
490
- var _a;
491
- return (h(Fragment, null, option.loading && h("ic-loading-indicator", { size: "icon" }), h("div", { class: "option-text-container" }, h("div", { class: "option-label" }, option.icon && (h("div", { class: "option-icon", innerHTML: option.icon, "aria-hidden": "true" })), h("ic-typography", { variant: "body", "aria-hidden": "true" }, option[this.labelField])), option.description && (h("ic-typography", { id: `${this.getOptionId(option[this.valueField])}-description`, class: "option-description", variant: "caption", "aria-hidden": "true" }, h("p", null, option.description))), option.element && (h("div", { class: "option-element", innerHTML: option.element.component, "aria-hidden": "true" }))), !!option[this.valueField] &&
751
+ this.optionContent = (option, selected) => {
752
+ const showCheckIcon = !!option[this.valueField] &&
492
753
  !!this.value &&
493
- option[this.valueField].toLowerCase() === ((_a = this.value) === null || _a === void 0 ? void 0 : _a.toLowerCase()) &&
494
- this.parentEl.tagName !== "IC-SEARCH-BAR" && (h("span", { class: "check-icon", innerHTML: Check }))));
754
+ selected &&
755
+ this.parentEl.tagName !== "IC-SEARCH-BAR";
756
+ return (h(Fragment, null, option.loading && h("ic-loading-indicator", { size: "icon" }), h("div", { class: {
757
+ "option-text-container": true,
758
+ "show-check-icon": showCheckIcon,
759
+ } }, h("div", { class: "option-label" }, option.icon && (h("div", { class: "option-icon", innerHTML: option.icon, "aria-hidden": "true" })), h("ic-typography", { variant: "body", "aria-hidden": "true" }, option[this.labelField])), option.description && (h("ic-typography", { id: `${this.getOptionId(option[this.valueField])}-description`, class: "option-description", variant: "caption", "aria-hidden": "true" }, h("p", null, option.description))), option.element && (h("div", { class: "option-element", innerHTML: option.element.component, "aria-hidden": "true" }))), showCheckIcon && h("span", { class: "check-icon", innerHTML: Check })));
495
760
  };
496
- this.displayOption = (option, index, parentOption) => {
497
- const { open, value, keyboardNav, isManualMode, initialOptionsListRender, optionHighlighted, options, } = this;
761
+ this.displayOption = (option, selected, index, parentOption) => {
762
+ const { open, keyboardNav, isManualMode, initialOptionsListRender, optionHighlighted, options, } = this;
498
763
  return (h("li", { id: this.getOptionId(option[this.valueField]), class: {
499
764
  option: true,
500
765
  "focused-option": isManualMode
501
766
  ? (keyboardNav || initialOptionsListRender) &&
502
767
  option[this.valueField] === optionHighlighted
503
- : keyboardNav && option[this.valueField] === value,
768
+ : keyboardNav && selected,
504
769
  "last-recommended-option": option.recommended &&
505
770
  options[index + 1] &&
506
771
  !options[index + 1].recommended,
@@ -508,20 +773,21 @@ const Menu = class {
508
773
  "loading-option": option.loading,
509
774
  timeout: option.timedOut,
510
775
  }, role: "option", tabindex: open &&
511
- (option[this.valueField] === value ||
512
- option[this.valueField] === optionHighlighted) &&
776
+ (selected || option[this.valueField] === optionHighlighted) &&
513
777
  keyboardNav
514
778
  ? "0"
515
- : "-1", "aria-label": this.getOptionAriaLabel(option, parentOption), "aria-selected": `${option[this.valueField] === value}`, "aria-disabled": option.disabled ? "true" : "false", onClick: !option.timedOut && !option.loading && this.handleOptionClick, onBlur: this.handleBlur, onMouseDown: this.handleMouseDown, "data-value": option[this.valueField], "data-label": option[this.labelField] }, option.timedOut ? (h(Fragment, null, h("div", { class: "loading-error-info" }, h("svg", { class: "error-icon-svg", "aria-labelledby": "error-title", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "#000000" }, h("title", { id: "error-title" }, "Error"), h("g", { id: "close-octagon" }, h("path", { id: "Vector", d: "M8.77 3L3.5 8.27V15.73L8.77 21H16.23L21.5 15.73V8.27L16.23 3M8.91 7L12.5 10.59L16.09 7L17.5 8.41L13.91 12L17.5 15.59L16.09 17L12.5 13.41L8.91 17L7.5 15.59L11.09 12L7.5 8.41" }))), h("ic-typography", { variant: "label" }, option[this.labelField])), h("ic-button", { size: "small", variant: "tertiary", onClick: this.handleRetry, onKeyDown: this.handleRetryKeyDown, onBlur: this.handleTimeoutBlur, id: "retry-button" }, "Retry"))) : (this.optionContent(option))));
779
+ : "-1", "aria-label": this.getOptionAriaLabel(option, parentOption), "aria-selected": selected ? "true" : "false", "aria-disabled": option.disabled ? "true" : "false", onClick: !option.timedOut && !option.loading && this.handleOptionClick, onBlur: this.handleBlur, onMouseDown: this.handleMouseDown, "data-value": option[this.valueField], "data-label": option[this.labelField] }, option.timedOut ? (h(Fragment, null, h("div", { class: "loading-error-info" }, h("svg", { class: "error-icon-svg", "aria-labelledby": "error-title", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "#000000" }, h("title", { id: "error-title" }, "Error"), h("g", { id: "close-octagon" }, h("path", { id: "Vector", d: "M8.77 3L3.5 8.27V15.73L8.77 21H16.23L21.5 15.73V8.27L16.23 3M8.91 7L12.5 10.59L16.09 7L17.5 8.41L13.91 12L17.5 15.59L16.09 17L12.5 13.41L8.91 17L7.5 15.59L11.09 12L7.5 8.41" }))), h("ic-typography", { variant: "label" }, option[this.labelField])), h("ic-button", { size: "small", variant: "tertiary", onClick: this.handleRetry, onKeyDown: this.handleRetryKeyDown, onBlur: this.handleTimeoutBlur, id: "retry-button" }, "Retry"))) : (this.optionContent(option, selected))));
516
780
  };
517
781
  this.focusFromSearchKeypress = false;
518
782
  this.initialOptionsListRender = false;
519
783
  this.keyboardNav = false;
520
784
  this.optionHighlighted = undefined;
521
785
  this.preventIncorrectTabOrder = false;
786
+ this.menuOptions = undefined;
522
787
  this.activationType = "automatic";
523
788
  this.anchorEl = undefined;
524
789
  this.autoFocusOnSelected = true;
790
+ this.closeOnSelect = true;
525
791
  this.fullWidth = false;
526
792
  this.inputEl = undefined;
527
793
  this.inputLabel = undefined;
@@ -548,9 +814,6 @@ const Menu = class {
548
814
  this.ungroupedOptions = [];
549
815
  this.loadUngroupedOptions();
550
816
  }
551
- watchValueHandler() {
552
- this.menuValueChange.emit({ value: this.value });
553
- }
554
817
  connectedCallback() {
555
818
  this.getParentEl(this.parentEl);
556
819
  if (this.isSearchBar) {
@@ -589,7 +852,7 @@ const Menu = class {
589
852
  }
590
853
  componentDidUpdate() {
591
854
  const inputValueInOptions = this.options.some((option) => option[this.valueField] === this.value);
592
- if (this.open && this.options.length !== 0) {
855
+ if (this.open && this.options.length !== 0 && !this.preventMenuFocus) {
593
856
  if (this.value &&
594
857
  this.keyboardNav &&
595
858
  inputValueInOptions &&
@@ -597,8 +860,7 @@ const Menu = class {
597
860
  !this.isSearchableSelect) {
598
861
  this.scrollToSelected(this.menu);
599
862
  }
600
- else if (this.inputEl.tagName !== "IC-TEXT-FIELD" &&
601
- this.inputEl.tagName !== "INPUT") {
863
+ else if (this.selectOnEnter) {
602
864
  this.menu.focus();
603
865
  }
604
866
  else if (!!this.optionHighlighted &&
@@ -606,13 +868,19 @@ const Menu = class {
606
868
  !this.preventIncorrectTabOrder) {
607
869
  const highlightedEl = this.host.querySelector(`li[data-value="${this.optionHighlighted}"]`);
608
870
  if (highlightedEl) {
871
+ this.menu.setAttribute(this.ACTIVE_DESCENDANT, highlightedEl.id);
609
872
  highlightedEl.focus();
610
873
  }
611
874
  }
875
+ else if (this.inputEl.tagName !== "IC-TEXT-FIELD" &&
876
+ this.inputEl.tagName !== "INPUT") {
877
+ this.menu.focus();
878
+ }
612
879
  }
613
880
  if (this.open && !this.value && this.selectOnEnter) {
614
881
  this.scrollToSelected(this.menu);
615
882
  }
883
+ this.preventMenuFocus = false;
616
884
  }
617
885
  componentDidRender() {
618
886
  if (this.open && !this.popperInstance && this.anchorEl) {
@@ -642,7 +910,7 @@ const Menu = class {
642
910
  this.autoSetInputValueKeyboardOpen(event);
643
911
  }
644
912
  else {
645
- this.manSetInputValueKeyboardOpen(event);
913
+ this.manualSetInputValueKeyboardOpen(event);
646
914
  }
647
915
  }
648
916
  /**
@@ -657,8 +925,9 @@ const Menu = class {
657
925
  * boundary behaviour so sticking with PopperJS.
658
926
  */
659
927
  async initPopperJs(anchor) {
928
+ // Placements set to "-start" to accommodate for custom menu width - menu should always be aligned to the left
660
929
  this.popperInstance = createPopper(anchor, this.host, {
661
- placement: "bottom",
930
+ placement: "bottom-start",
662
931
  modifiers: [
663
932
  {
664
933
  name: "offset",
@@ -669,7 +938,7 @@ const Menu = class {
669
938
  {
670
939
  name: "flip",
671
940
  options: {
672
- fallbackPlacements: ["top"],
941
+ fallbackPlacements: ["top-start"],
673
942
  rootBoundary: "viewport",
674
943
  },
675
944
  },
@@ -691,30 +960,43 @@ const Menu = class {
691
960
  }
692
961
  render() {
693
962
  const { inputLabel, options, menuId, value, fullWidth, hasTimedOut, isLoading, size, open, inputEl, keyboardNav, } = this;
963
+ const selectAllButtonText = `${(value === null || value === void 0 ? void 0 : value.length) === this.ungroupedOptions.length ? "Clear" : "Select"} all`;
964
+ const hasNoResults = this.host.classList.contains("no-results");
694
965
  return (h(Host, { class: {
695
966
  "ic-menu-full-width": fullWidth,
696
967
  "ic-menu-no-focus": (inputEl === null || inputEl === void 0 ? void 0 : inputEl.tagName) === "INPUT" || hasTimedOut || isLoading,
697
968
  [`ic-menu-${size}`]: true,
698
- "ic-menu-open": open,
699
- } }, options.length !== 0 && (h("ul", { id: menuId, class: "menu", role: "listbox", "aria-label": inputLabel, "aria-activedescendant": value != null && value !== "" ? this.getOptionId(value) : "", tabindex: open && !keyboardNav && (inputEl === null || inputEl === void 0 ? void 0 : inputEl.tagName) !== "INPUT" ? "0" : "-1", ref: (el) => (this.menu = el), onKeyDown: this.handleMenuKeyDown, onKeyUp: this.handleMenuKeyUp, onBlur: this.handleBlur }, this.getSortedOptions(options).map((option, index) => {
969
+ "ic-menu-open": open && options.length !== 0,
970
+ "ic-menu-multiple": this.isMultiSelect,
971
+ } }, options.length !== 0 && (h("ul", { id: menuId, class: "menu", role: "listbox", "aria-label": `${inputLabel} pop-up`, "aria-multiselectable": this.isMultiSelect ? "true" : "false", tabindex: open && !keyboardNav && (inputEl === null || inputEl === void 0 ? void 0 : inputEl.tagName) !== "INPUT" ? "0" : "-1", ref: (el) => (this.menu = el), onKeyDown: this.handleMenuKeyDown, onKeyUp: this.handleMenuKeyUp, onBlur: this.handleBlur }, this.getSortedOptions(options).map((option, index) => {
700
972
  if (option.children) {
701
973
  if (option.children.length > 0) {
702
- return (h("div", null, h("ic-typography", { class: "option-group-title", role: "presentation", variant: "subtitle-small" }, h("p", null, option[this.labelField])), option.children.map((childOption) => this.displayOption(childOption, index, option))));
974
+ return (h("div", null, h("ic-typography", { class: "option-group-title", role: "presentation", variant: "subtitle-small" }, h("p", null, option[this.labelField])), option.children.map((childOption) => childOption.label &&
975
+ this.displayOption(childOption, this.isMultiSelect
976
+ ? value === null || value === void 0 ? void 0 : value.includes(childOption[this.valueField])
977
+ : childOption[this.valueField] === value, index, option))));
703
978
  }
704
979
  else {
705
980
  return null;
706
981
  }
707
982
  }
708
983
  else {
709
- return this.displayOption(option, index);
710
- }
711
- })))));
984
+ // Display option only if it has a label (rather than displaying an empty space)
985
+ return (option.label &&
986
+ this.displayOption(option, this.isMultiSelect
987
+ ? value === null || value === void 0 ? void 0 : value.includes(option[this.valueField])
988
+ : option[this.valueField] === value, index));
989
+ }
990
+ }))), options.length !== 0 &&
991
+ this.isMultiSelect &&
992
+ !isLoading &&
993
+ !hasTimedOut &&
994
+ !hasNoResults && (h("div", { class: "option-bar" }, h("ic-typography", null, h("p", null, `${value ? value.length : 0}/${getOptionsWithoutGroupTitlesCount(this.options)} selected`)), h("ic-button", { class: "select-all-button", "aria-label": `${selectAllButtonText} options for ${inputLabel}`, ref: (el) => (this.selectAllButton = el), variant: "tertiary", onClick: this.handleSelectAllClick, onMouseDown: this.handleSelectAllMouseDown, onBlur: this.handleSelectAllBlur, onFocus: this.handleSelectAllFocus, size: size === "small" ? "small" : "medium" }, selectAllButtonText)))));
712
995
  }
713
996
  get host() { return getElement(this); }
714
997
  static get watchers() { return {
715
998
  "open": ["watchOpenHandler"],
716
- "options": ["watchOptionsHandler"],
717
- "value": ["watchValueHandler"]
999
+ "options": ["watchOptionsHandler"]
718
1000
  }; }
719
1001
  };
720
1002
  Menu.style = icMenuCss;