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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (447) hide show
  1. package/dist/cjs/core.cjs.js +1 -1
  2. package/dist/cjs/helpers-69219f14.js.map +1 -1
  3. package/dist/cjs/ic-accordion-group.cjs.entry.js +9 -9
  4. package/dist/cjs/ic-accordion-group.cjs.entry.js.map +1 -1
  5. package/dist/cjs/ic-accordion.cjs.entry.js +4 -4
  6. package/dist/cjs/ic-accordion.cjs.entry.js.map +1 -1
  7. package/dist/cjs/ic-alert.cjs.entry.js +6 -4
  8. package/dist/cjs/ic-alert.cjs.entry.js.map +1 -1
  9. package/dist/cjs/ic-card-vertical.cjs.entry.js +21 -23
  10. package/dist/cjs/ic-card-vertical.cjs.entry.js.map +1 -1
  11. package/dist/cjs/ic-checkbox-group.cjs.entry.js +15 -4
  12. package/dist/cjs/ic-checkbox-group.cjs.entry.js.map +1 -1
  13. package/dist/cjs/ic-checkbox.cjs.entry.js +4 -2
  14. package/dist/cjs/ic-checkbox.cjs.entry.js.map +1 -1
  15. package/dist/cjs/ic-classification-banner.cjs.entry.js +1 -1
  16. package/dist/cjs/ic-classification-banner.cjs.entry.js.map +1 -1
  17. package/dist/cjs/ic-dialog.cjs.entry.js +3 -1
  18. package/dist/cjs/ic-dialog.cjs.entry.js.map +1 -1
  19. package/dist/cjs/ic-divider.cjs.entry.js +70 -6
  20. package/dist/cjs/ic-divider.cjs.entry.js.map +1 -1
  21. package/dist/cjs/ic-footer-link-group.cjs.entry.js +1 -1
  22. package/dist/cjs/ic-footer-link-group.cjs.entry.js.map +1 -1
  23. package/dist/cjs/ic-footer-link.cjs.entry.js +1 -1
  24. package/dist/cjs/ic-footer-link.cjs.entry.js.map +1 -1
  25. package/dist/cjs/ic-footer.cjs.entry.js +1 -1
  26. package/dist/cjs/ic-footer.cjs.entry.js.map +1 -1
  27. package/dist/cjs/ic-hero.cjs.entry.js +1 -1
  28. package/dist/cjs/ic-hero.cjs.entry.js.map +1 -1
  29. package/dist/cjs/ic-horizontal-scroll.cjs.entry.js +3 -2
  30. package/dist/cjs/ic-horizontal-scroll.cjs.entry.js.map +1 -1
  31. package/dist/cjs/ic-input-component-container_3.cjs.entry.js +5 -4
  32. package/dist/cjs/ic-input-component-container_3.cjs.entry.js.map +1 -1
  33. package/dist/cjs/ic-input-label_2.cjs.entry.js +2 -2
  34. package/dist/cjs/ic-input-label_2.cjs.entry.js.map +1 -1
  35. package/dist/cjs/ic-menu-group.cjs.entry.js +1 -1
  36. package/dist/cjs/ic-menu-group.cjs.entry.js.map +1 -1
  37. package/dist/cjs/ic-menu-item.cjs.entry.js +9 -9
  38. package/dist/cjs/ic-menu-item.cjs.entry.js.map +1 -1
  39. package/dist/cjs/ic-navigation-button.cjs.entry.js.map +1 -1
  40. package/dist/cjs/ic-navigation-group.cjs.entry.js +3 -2
  41. package/dist/cjs/ic-navigation-group.cjs.entry.js.map +1 -1
  42. package/dist/cjs/ic-navigation-item.cjs.entry.js +28 -1
  43. package/dist/cjs/ic-navigation-item.cjs.entry.js.map +1 -1
  44. package/dist/cjs/ic-pagination-item.cjs.entry.js +7 -10
  45. package/dist/cjs/ic-pagination-item.cjs.entry.js.map +1 -1
  46. package/dist/cjs/ic-pagination.cjs.entry.js +36 -14
  47. package/dist/cjs/ic-pagination.cjs.entry.js.map +1 -1
  48. package/dist/cjs/ic-popover-menu.cjs.entry.js +3 -3
  49. package/dist/cjs/ic-popover-menu.cjs.entry.js.map +1 -1
  50. package/dist/cjs/ic-radio-group.cjs.entry.js +13 -4
  51. package/dist/cjs/ic-radio-group.cjs.entry.js.map +1 -1
  52. package/dist/cjs/ic-radio-option.cjs.entry.js +7 -3
  53. package/dist/cjs/ic-radio-option.cjs.entry.js.map +1 -1
  54. package/dist/cjs/ic-search-bar.cjs.entry.js +11 -8
  55. package/dist/cjs/ic-search-bar.cjs.entry.js.map +1 -1
  56. package/dist/cjs/ic-select.cjs.entry.js.map +1 -1
  57. package/dist/cjs/ic-side-navigation.cjs.entry.js +3 -2
  58. package/dist/cjs/ic-side-navigation.cjs.entry.js.map +1 -1
  59. package/dist/cjs/ic-tab-context.cjs.entry.js +2 -1
  60. package/dist/cjs/ic-tab-context.cjs.entry.js.map +1 -1
  61. package/dist/cjs/ic-text-field.cjs.entry.js +1 -1
  62. package/dist/cjs/ic-text-field.cjs.entry.js.map +1 -1
  63. package/dist/cjs/ic-toast.cjs.entry.js +2 -2
  64. package/dist/cjs/ic-toast.cjs.entry.js.map +1 -1
  65. package/dist/cjs/ic-toggle-button-group.cjs.entry.js +1 -1
  66. package/dist/cjs/ic-toggle-button-group.cjs.entry.js.map +1 -1
  67. package/dist/cjs/loader.cjs.js +1 -1
  68. package/dist/collection/ag-theme-icds.css +217 -0
  69. package/dist/collection/collection-manifest.json +1 -1
  70. package/dist/collection/components/ic-accordion/ic-accordion.css +21 -19
  71. package/dist/collection/components/ic-accordion/ic-accordion.js +27 -30
  72. package/dist/collection/components/ic-accordion/ic-accordion.js.map +1 -1
  73. package/dist/collection/components/ic-accordion/test/basic/ic-accordion.spec.js +3 -3
  74. package/dist/collection/components/ic-accordion/test/basic/ic-accordion.spec.js.map +1 -1
  75. package/dist/collection/components/ic-accordion-group/ic-accordion-group.css +2 -12
  76. package/dist/collection/components/ic-accordion-group/ic-accordion-group.js +18 -18
  77. package/dist/collection/components/ic-accordion-group/ic-accordion-group.js.map +1 -1
  78. package/dist/collection/components/ic-accordion-group/test/basic/ic-accordion-group.spec.js +3 -3
  79. package/dist/collection/components/ic-accordion-group/test/basic/ic-accordion-group.spec.js.map +1 -1
  80. package/dist/collection/components/ic-alert/ic-alert.css +22 -17
  81. package/dist/collection/components/ic-alert/ic-alert.js +48 -22
  82. package/dist/collection/components/ic-alert/ic-alert.js.map +1 -1
  83. package/dist/collection/components/ic-alert/test/basic/ic-alert.spec.js +1 -1
  84. package/dist/collection/components/ic-alert/test/basic/ic-alert.spec.js.map +1 -1
  85. package/dist/collection/components/ic-card-vertical/ic-card-vertical.css +98 -114
  86. package/dist/collection/components/ic-card-vertical/ic-card-vertical.js +46 -24
  87. package/dist/collection/components/ic-card-vertical/ic-card-vertical.js.map +1 -1
  88. package/dist/collection/components/ic-checkbox/ic-checkbox.css +42 -39
  89. package/dist/collection/components/ic-checkbox/ic-checkbox.js +28 -2
  90. package/dist/collection/components/ic-checkbox/ic-checkbox.js.map +1 -1
  91. package/dist/collection/components/ic-checkbox-group/ic-checkbox-group.css +15 -2
  92. package/dist/collection/components/ic-checkbox-group/ic-checkbox-group.js +39 -2
  93. package/dist/collection/components/ic-checkbox-group/ic-checkbox-group.js.map +1 -1
  94. package/dist/collection/components/ic-classification-banner/ic-classification-banner.css +13 -25
  95. package/dist/collection/components/ic-dialog/ic-dialog.css +16 -3
  96. package/dist/collection/components/ic-dialog/ic-dialog.js +26 -0
  97. package/dist/collection/components/ic-dialog/ic-dialog.js.map +1 -1
  98. package/dist/collection/components/ic-divider/ic-divider.css +341 -4
  99. package/dist/collection/components/ic-divider/ic-divider.js +235 -8
  100. package/dist/collection/components/ic-divider/ic-divider.js.map +1 -1
  101. package/dist/collection/components/ic-divider/ic-divider.types.js +2 -0
  102. package/dist/collection/components/ic-divider/ic-divider.types.js.map +1 -0
  103. package/dist/collection/components/ic-divider/test/basic/ic-divider.spec.js +89 -4
  104. package/dist/collection/components/ic-divider/test/basic/ic-divider.spec.js.map +1 -1
  105. package/dist/collection/components/ic-footer/ic-footer.css +20 -19
  106. package/dist/collection/components/ic-footer-link/ic-footer-link.css +2 -2
  107. package/dist/collection/components/ic-footer-link-group/ic-footer-link-group.css +9 -21
  108. package/dist/collection/components/ic-footer-link-group/ic-footer-link-group.js.map +1 -1
  109. package/dist/collection/components/ic-hero/ic-hero.css +17 -2
  110. package/dist/collection/components/ic-horizontal-scroll/ic-horizontal-scroll.js +3 -2
  111. package/dist/collection/components/ic-horizontal-scroll/ic-horizontal-scroll.js.map +1 -1
  112. package/dist/collection/components/ic-input-component-container/ic-input-component-container.css +4 -2
  113. package/dist/collection/components/ic-input-label/ic-input-label.css +12 -1
  114. package/dist/collection/components/ic-input-validation/ic-input-validation.css +5 -1
  115. package/dist/collection/components/ic-menu/ic-menu.css +9 -5
  116. package/dist/collection/components/ic-menu/ic-menu.js +3 -2
  117. package/dist/collection/components/ic-menu/ic-menu.js.map +1 -1
  118. package/dist/collection/components/ic-menu-group/ic-menu-group.js +1 -1
  119. package/dist/collection/components/ic-menu-group/ic-menu-group.js.map +1 -1
  120. package/dist/collection/components/ic-menu-item/ic-menu-item.js +11 -11
  121. package/dist/collection/components/ic-menu-item/ic-menu-item.js.map +1 -1
  122. package/dist/collection/components/ic-menu-item/test/basic/ic-menu-item.spec.js +1 -1
  123. package/dist/collection/components/ic-menu-item/test/basic/ic-menu-item.spec.js.map +1 -1
  124. package/dist/collection/components/ic-navigation-button/ic-navigation-button.js.map +1 -1
  125. package/dist/collection/components/ic-navigation-group/ic-navigation-group.js +3 -2
  126. package/dist/collection/components/ic-navigation-group/ic-navigation-group.js.map +1 -1
  127. package/dist/collection/components/ic-navigation-item/ic-navigation-item.js +31 -3
  128. package/dist/collection/components/ic-navigation-item/ic-navigation-item.js.map +1 -1
  129. package/dist/collection/components/ic-navigation-item/test/basic/ic-navigation-item.spec.js +12 -0
  130. package/dist/collection/components/ic-navigation-item/test/basic/ic-navigation-item.spec.js.map +1 -1
  131. package/dist/collection/components/ic-pagination/ic-pagination.css +15 -0
  132. package/dist/collection/components/ic-pagination/ic-pagination.js +77 -37
  133. package/dist/collection/components/ic-pagination/ic-pagination.js.map +1 -1
  134. package/dist/collection/components/ic-pagination/test/basic/ic-pagination.spec.js +1 -1
  135. package/dist/collection/components/ic-pagination/test/basic/ic-pagination.spec.js.map +1 -1
  136. package/dist/collection/components/ic-pagination-item/ic-pagination-item.css +26 -6
  137. package/dist/collection/components/ic-pagination-item/ic-pagination-item.js +48 -33
  138. package/dist/collection/components/ic-pagination-item/ic-pagination-item.js.map +1 -1
  139. package/dist/collection/components/ic-popover-menu/ic-popover-menu.js +3 -3
  140. package/dist/collection/components/ic-popover-menu/ic-popover-menu.js.map +1 -1
  141. package/dist/collection/components/ic-radio-group/ic-radio-group.css +17 -1
  142. package/dist/collection/components/ic-radio-group/ic-radio-group.js +37 -2
  143. package/dist/collection/components/ic-radio-group/ic-radio-group.js.map +1 -1
  144. package/dist/collection/components/ic-radio-option/ic-radio-option.css +34 -25
  145. package/dist/collection/components/ic-radio-option/ic-radio-option.js +30 -2
  146. package/dist/collection/components/ic-radio-option/ic-radio-option.js.map +1 -1
  147. package/dist/collection/components/ic-search-bar/ic-search-bar.css +40 -5
  148. package/dist/collection/components/ic-search-bar/ic-search-bar.js +34 -7
  149. package/dist/collection/components/ic-search-bar/ic-search-bar.js.map +1 -1
  150. package/dist/collection/components/ic-select/ic-select.css +1 -0
  151. package/dist/collection/components/ic-side-navigation/ic-side-navigation.css +0 -1
  152. package/dist/collection/components/ic-side-navigation/ic-side-navigation.js +2 -1
  153. package/dist/collection/components/ic-side-navigation/ic-side-navigation.js.map +1 -1
  154. package/dist/collection/components/ic-tab-context/ic-tab-context.js +2 -1
  155. package/dist/collection/components/ic-tab-context/ic-tab-context.js.map +1 -1
  156. package/dist/collection/components/ic-text-field/ic-text-field.css +6 -4
  157. package/dist/collection/components/ic-toast/ic-toast.css +25 -16
  158. package/dist/collection/components/ic-toast/ic-toast.js +1 -2
  159. package/dist/collection/components/ic-toast/ic-toast.js.map +1 -1
  160. package/dist/collection/components/ic-toast/test/basic/ic-toast.spec.js +12 -12
  161. package/dist/collection/components/ic-toast/test/basic/ic-toast.spec.js.map +1 -1
  162. package/dist/collection/components/ic-toggle-button-group/ic-toggle-button-group.js +1 -1
  163. package/dist/collection/components/ic-toggle-button-group/ic-toggle-button-group.js.map +1 -1
  164. package/dist/collection/components/ic-toggle-button-group/test/ic-toggle-button-group.spec.js +1 -0
  165. package/dist/collection/components/ic-toggle-button-group/test/ic-toggle-button-group.spec.js.map +1 -1
  166. package/dist/collection/utils/helpers.js.map +1 -1
  167. package/dist/components/helpers.js.map +1 -1
  168. package/dist/components/ic-accordion-group.js +11 -11
  169. package/dist/components/ic-accordion-group.js.map +1 -1
  170. package/dist/components/ic-accordion.js +5 -5
  171. package/dist/components/ic-accordion.js.map +1 -1
  172. package/dist/components/ic-alert.js +8 -5
  173. package/dist/components/ic-alert.js.map +1 -1
  174. package/dist/components/ic-card-vertical.js +23 -24
  175. package/dist/components/ic-card-vertical.js.map +1 -1
  176. package/dist/components/ic-checkbox-group.js +18 -5
  177. package/dist/components/ic-checkbox-group.js.map +1 -1
  178. package/dist/components/ic-checkbox.js +5 -2
  179. package/dist/components/ic-checkbox.js.map +1 -1
  180. package/dist/components/ic-classification-banner.js +1 -1
  181. package/dist/components/ic-classification-banner.js.map +1 -1
  182. package/dist/components/ic-dialog.js +4 -1
  183. package/dist/components/ic-dialog.js.map +1 -1
  184. package/dist/components/ic-divider2.js +86 -9
  185. package/dist/components/ic-divider2.js.map +1 -1
  186. package/dist/components/ic-footer-link-group.js +1 -1
  187. package/dist/components/ic-footer-link-group.js.map +1 -1
  188. package/dist/components/ic-footer-link.js +1 -1
  189. package/dist/components/ic-footer-link.js.map +1 -1
  190. package/dist/components/ic-footer.js +1 -1
  191. package/dist/components/ic-footer.js.map +1 -1
  192. package/dist/components/ic-hero.js +1 -1
  193. package/dist/components/ic-hero.js.map +1 -1
  194. package/dist/components/ic-horizontal-scroll2.js +3 -2
  195. package/dist/components/ic-horizontal-scroll2.js.map +1 -1
  196. package/dist/components/ic-input-component-container2.js +1 -1
  197. package/dist/components/ic-input-component-container2.js.map +1 -1
  198. package/dist/components/ic-input-label2.js +1 -1
  199. package/dist/components/ic-input-label2.js.map +1 -1
  200. package/dist/components/ic-input-validation2.js +1 -1
  201. package/dist/components/ic-input-validation2.js.map +1 -1
  202. package/dist/components/ic-menu-group.js +1 -1
  203. package/dist/components/ic-menu-group.js.map +1 -1
  204. package/dist/components/ic-menu-item2.js +10 -10
  205. package/dist/components/ic-menu-item2.js.map +1 -1
  206. package/dist/components/ic-menu2.js +4 -3
  207. package/dist/components/ic-menu2.js.map +1 -1
  208. package/dist/components/ic-navigation-button.js.map +1 -1
  209. package/dist/components/ic-navigation-group.js +3 -2
  210. package/dist/components/ic-navigation-group.js.map +1 -1
  211. package/dist/components/ic-navigation-item.js +30 -2
  212. package/dist/components/ic-navigation-item.js.map +1 -1
  213. package/dist/components/ic-pagination-item2.js +9 -11
  214. package/dist/components/ic-pagination-item2.js.map +1 -1
  215. package/dist/components/ic-pagination.js +38 -15
  216. package/dist/components/ic-pagination.js.map +1 -1
  217. package/dist/components/ic-popover-menu.js +3 -3
  218. package/dist/components/ic-popover-menu.js.map +1 -1
  219. package/dist/components/ic-radio-group.js +16 -5
  220. package/dist/components/ic-radio-group.js.map +1 -1
  221. package/dist/components/ic-radio-option.js +8 -3
  222. package/dist/components/ic-radio-option.js.map +1 -1
  223. package/dist/components/ic-search-bar.js +12 -8
  224. package/dist/components/ic-search-bar.js.map +1 -1
  225. package/dist/components/ic-select.js.map +1 -1
  226. package/dist/components/ic-side-navigation.js +3 -2
  227. package/dist/components/ic-side-navigation.js.map +1 -1
  228. package/dist/components/ic-tab-context.js +2 -1
  229. package/dist/components/ic-tab-context.js.map +1 -1
  230. package/dist/components/ic-text-field2.js +1 -1
  231. package/dist/components/ic-text-field2.js.map +1 -1
  232. package/dist/components/ic-toast.js +3 -3
  233. package/dist/components/ic-toast.js.map +1 -1
  234. package/dist/components/ic-toggle-button-group.js +1 -1
  235. package/dist/components/ic-toggle-button-group.js.map +1 -1
  236. package/dist/core/ag-theme-icds.css +217 -0
  237. package/dist/core/core.css +125 -13
  238. package/dist/core/core.esm.js +1 -1
  239. package/dist/core/core.esm.js.map +1 -1
  240. package/dist/core/{p-43256b7c.entry.js → p-13d5875c.entry.js} +2 -2
  241. package/dist/core/p-13d5875c.entry.js.map +1 -0
  242. package/dist/core/p-19872973.entry.js +2 -0
  243. package/dist/core/p-19872973.entry.js.map +1 -0
  244. package/dist/core/p-2140431c.entry.js +2 -0
  245. package/dist/core/p-2140431c.entry.js.map +1 -0
  246. package/dist/core/p-29767574.entry.js +2 -0
  247. package/dist/core/p-29767574.entry.js.map +1 -0
  248. package/dist/core/p-2e909738.entry.js +2 -0
  249. package/dist/core/p-2e909738.entry.js.map +1 -0
  250. package/dist/core/p-2eae9b27.entry.js.map +1 -1
  251. package/dist/core/p-2ef46ead.entry.js +2 -0
  252. package/dist/core/p-2ef46ead.entry.js.map +1 -0
  253. package/dist/core/{p-14dfd8db.entry.js → p-428f95f8.entry.js} +2 -2
  254. package/dist/core/{p-14dfd8db.entry.js.map → p-428f95f8.entry.js.map} +1 -1
  255. package/dist/core/p-4973c563.entry.js +2 -0
  256. package/dist/core/p-4973c563.entry.js.map +1 -0
  257. package/dist/core/p-5f4a6555.entry.js +2 -0
  258. package/dist/core/p-5f4a6555.entry.js.map +1 -0
  259. package/dist/core/p-605c0c92.entry.js +2 -0
  260. package/dist/core/p-605c0c92.entry.js.map +1 -0
  261. package/dist/core/p-655a9e0f.entry.js +2 -0
  262. package/dist/core/p-655a9e0f.entry.js.map +1 -0
  263. package/dist/core/p-65a16de9.entry.js +2 -0
  264. package/dist/core/p-65a16de9.entry.js.map +1 -0
  265. package/dist/core/p-705eb610.entry.js +2 -0
  266. package/dist/core/p-705eb610.entry.js.map +1 -0
  267. package/dist/core/p-78c1f1cc.entry.js +2 -0
  268. package/dist/core/p-78c1f1cc.entry.js.map +1 -0
  269. package/dist/core/p-7bff1e96.entry.js +2 -0
  270. package/dist/core/p-7bff1e96.entry.js.map +1 -0
  271. package/dist/core/{p-726673ee.entry.js → p-806a0fab.entry.js} +2 -2
  272. package/dist/core/p-806a0fab.entry.js.map +1 -0
  273. package/dist/core/p-85173458.entry.js +2 -0
  274. package/dist/core/p-85173458.entry.js.map +1 -0
  275. package/dist/core/{p-b01ffa55.entry.js → p-96b4ca6e.entry.js} +2 -2
  276. package/dist/core/p-96b4ca6e.entry.js.map +1 -0
  277. package/dist/core/p-979c2792.entry.js +2 -0
  278. package/dist/core/p-979c2792.entry.js.map +1 -0
  279. package/dist/core/p-9ec7f96c.entry.js +2 -0
  280. package/dist/core/p-9ec7f96c.entry.js.map +1 -0
  281. package/dist/core/{p-f60dbd0e.entry.js → p-9fa93dfe.entry.js} +2 -2
  282. package/dist/core/p-9fa93dfe.entry.js.map +1 -0
  283. package/dist/core/p-a9341313.entry.js +2 -0
  284. package/dist/core/p-a9341313.entry.js.map +1 -0
  285. package/dist/core/{p-31fc8756.entry.js → p-ae0775aa.entry.js} +2 -2
  286. package/dist/core/p-ae0775aa.entry.js.map +1 -0
  287. package/dist/core/p-b7eb8ef9.js.map +1 -1
  288. package/dist/core/p-bbeb03ef.entry.js +2 -0
  289. package/dist/core/p-bbeb03ef.entry.js.map +1 -0
  290. package/dist/core/p-cedc375e.entry.js +2 -0
  291. package/dist/core/p-cedc375e.entry.js.map +1 -0
  292. package/dist/core/{p-dd36bf1b.entry.js → p-d4a83e25.entry.js} +2 -2
  293. package/dist/core/p-d4a83e25.entry.js.map +1 -0
  294. package/dist/core/{p-b78f8b8c.entry.js → p-d93bac01.entry.js} +2 -2
  295. package/dist/core/p-d93bac01.entry.js.map +1 -0
  296. package/dist/core/{p-50ead56c.entry.js → p-df957570.entry.js} +2 -2
  297. package/dist/core/p-df957570.entry.js.map +1 -0
  298. package/dist/core/p-ebafab37.entry.js.map +1 -1
  299. package/dist/core/p-ef78bebc.entry.js +2 -0
  300. package/dist/core/p-ef78bebc.entry.js.map +1 -0
  301. package/dist/core/p-f0ae2b99.entry.js +2 -0
  302. package/dist/core/p-f0ae2b99.entry.js.map +1 -0
  303. package/dist/core/p-fdd0b732.entry.js +2 -0
  304. package/dist/core/p-fdd0b732.entry.js.map +1 -0
  305. package/dist/esm/core.js +1 -1
  306. package/dist/esm/helpers-e8797e8d.js.map +1 -1
  307. package/dist/esm/ic-accordion-group.entry.js +9 -9
  308. package/dist/esm/ic-accordion-group.entry.js.map +1 -1
  309. package/dist/esm/ic-accordion.entry.js +4 -4
  310. package/dist/esm/ic-accordion.entry.js.map +1 -1
  311. package/dist/esm/ic-alert.entry.js +6 -4
  312. package/dist/esm/ic-alert.entry.js.map +1 -1
  313. package/dist/esm/ic-card-vertical.entry.js +22 -24
  314. package/dist/esm/ic-card-vertical.entry.js.map +1 -1
  315. package/dist/esm/ic-checkbox-group.entry.js +15 -4
  316. package/dist/esm/ic-checkbox-group.entry.js.map +1 -1
  317. package/dist/esm/ic-checkbox.entry.js +4 -2
  318. package/dist/esm/ic-checkbox.entry.js.map +1 -1
  319. package/dist/esm/ic-classification-banner.entry.js +1 -1
  320. package/dist/esm/ic-classification-banner.entry.js.map +1 -1
  321. package/dist/esm/ic-dialog.entry.js +3 -1
  322. package/dist/esm/ic-dialog.entry.js.map +1 -1
  323. package/dist/esm/ic-divider.entry.js +72 -8
  324. package/dist/esm/ic-divider.entry.js.map +1 -1
  325. package/dist/esm/ic-footer-link-group.entry.js +1 -1
  326. package/dist/esm/ic-footer-link-group.entry.js.map +1 -1
  327. package/dist/esm/ic-footer-link.entry.js +1 -1
  328. package/dist/esm/ic-footer-link.entry.js.map +1 -1
  329. package/dist/esm/ic-footer.entry.js +1 -1
  330. package/dist/esm/ic-footer.entry.js.map +1 -1
  331. package/dist/esm/ic-hero.entry.js +1 -1
  332. package/dist/esm/ic-hero.entry.js.map +1 -1
  333. package/dist/esm/ic-horizontal-scroll.entry.js +3 -2
  334. package/dist/esm/ic-horizontal-scroll.entry.js.map +1 -1
  335. package/dist/esm/ic-input-component-container_3.entry.js +5 -4
  336. package/dist/esm/ic-input-component-container_3.entry.js.map +1 -1
  337. package/dist/esm/ic-input-label_2.entry.js +2 -2
  338. package/dist/esm/ic-input-label_2.entry.js.map +1 -1
  339. package/dist/esm/ic-menu-group.entry.js +1 -1
  340. package/dist/esm/ic-menu-group.entry.js.map +1 -1
  341. package/dist/esm/ic-menu-item.entry.js +9 -9
  342. package/dist/esm/ic-menu-item.entry.js.map +1 -1
  343. package/dist/esm/ic-navigation-button.entry.js.map +1 -1
  344. package/dist/esm/ic-navigation-group.entry.js +3 -2
  345. package/dist/esm/ic-navigation-group.entry.js.map +1 -1
  346. package/dist/esm/ic-navigation-item.entry.js +29 -2
  347. package/dist/esm/ic-navigation-item.entry.js.map +1 -1
  348. package/dist/esm/ic-pagination-item.entry.js +7 -10
  349. package/dist/esm/ic-pagination-item.entry.js.map +1 -1
  350. package/dist/esm/ic-pagination.entry.js +36 -14
  351. package/dist/esm/ic-pagination.entry.js.map +1 -1
  352. package/dist/esm/ic-popover-menu.entry.js +3 -3
  353. package/dist/esm/ic-popover-menu.entry.js.map +1 -1
  354. package/dist/esm/ic-radio-group.entry.js +13 -4
  355. package/dist/esm/ic-radio-group.entry.js.map +1 -1
  356. package/dist/esm/ic-radio-option.entry.js +7 -3
  357. package/dist/esm/ic-radio-option.entry.js.map +1 -1
  358. package/dist/esm/ic-search-bar.entry.js +11 -8
  359. package/dist/esm/ic-search-bar.entry.js.map +1 -1
  360. package/dist/esm/ic-select.entry.js.map +1 -1
  361. package/dist/esm/ic-side-navigation.entry.js +3 -2
  362. package/dist/esm/ic-side-navigation.entry.js.map +1 -1
  363. package/dist/esm/ic-tab-context.entry.js +2 -1
  364. package/dist/esm/ic-tab-context.entry.js.map +1 -1
  365. package/dist/esm/ic-text-field.entry.js +1 -1
  366. package/dist/esm/ic-text-field.entry.js.map +1 -1
  367. package/dist/esm/ic-toast.entry.js +3 -3
  368. package/dist/esm/ic-toast.entry.js.map +1 -1
  369. package/dist/esm/ic-toggle-button-group.entry.js +1 -1
  370. package/dist/esm/ic-toggle-button-group.entry.js.map +1 -1
  371. package/dist/esm/loader.js +1 -1
  372. package/dist/types/components/ic-accordion/ic-accordion.d.ts +5 -5
  373. package/dist/types/components/ic-accordion-group/ic-accordion-group.d.ts +4 -4
  374. package/dist/types/components/ic-alert/ic-alert.d.ts +9 -5
  375. package/dist/types/components/ic-card-vertical/ic-card-vertical.d.ts +7 -3
  376. package/dist/types/components/ic-checkbox/ic-checkbox.d.ts +6 -2
  377. package/dist/types/components/ic-checkbox-group/ic-checkbox-group.d.ts +7 -1
  378. package/dist/types/components/ic-dialog/ic-dialog.d.ts +5 -0
  379. package/dist/types/components/ic-divider/ic-divider.d.ts +31 -1
  380. package/dist/types/components/ic-divider/ic-divider.types.d.ts +3 -0
  381. package/dist/types/components/ic-footer-link-group/ic-footer-link-group.d.ts +2 -1
  382. package/dist/types/components/ic-menu-item/ic-menu-item.d.ts +1 -1
  383. package/dist/types/components/ic-navigation-button/ic-navigation-button.d.ts +2 -2
  384. package/dist/types/components/ic-navigation-group/ic-navigation-group.d.ts +2 -2
  385. package/dist/types/components/ic-navigation-item/ic-navigation-item.d.ts +7 -2
  386. package/dist/types/components/ic-pagination/ic-pagination.d.ts +13 -5
  387. package/dist/types/components/ic-pagination-item/ic-pagination-item.d.ts +9 -5
  388. package/dist/types/components/ic-radio-group/ic-radio-group.d.ts +6 -1
  389. package/dist/types/components/ic-radio-option/ic-radio-option.d.ts +5 -1
  390. package/dist/types/components/ic-search-bar/ic-search-bar.d.ts +5 -1
  391. package/dist/types/components.d.ts +176 -31
  392. package/dist/types/utils/helpers.d.ts +2 -2
  393. package/hydrate/index.js +294 -135
  394. package/package.json +2 -2
  395. package/vscode-data.json +281 -48
  396. package/dist/core/p-0395442c.entry.js +0 -2
  397. package/dist/core/p-0395442c.entry.js.map +0 -1
  398. package/dist/core/p-0d233b0c.entry.js +0 -2
  399. package/dist/core/p-0d233b0c.entry.js.map +0 -1
  400. package/dist/core/p-134def81.entry.js +0 -2
  401. package/dist/core/p-134def81.entry.js.map +0 -1
  402. package/dist/core/p-1b116dd1.entry.js +0 -2
  403. package/dist/core/p-1b116dd1.entry.js.map +0 -1
  404. package/dist/core/p-21cc87c0.entry.js +0 -2
  405. package/dist/core/p-21cc87c0.entry.js.map +0 -1
  406. package/dist/core/p-31fc8756.entry.js.map +0 -1
  407. package/dist/core/p-3618ac34.entry.js +0 -2
  408. package/dist/core/p-3618ac34.entry.js.map +0 -1
  409. package/dist/core/p-384d454d.entry.js +0 -2
  410. package/dist/core/p-384d454d.entry.js.map +0 -1
  411. package/dist/core/p-3d417eff.entry.js +0 -2
  412. package/dist/core/p-3d417eff.entry.js.map +0 -1
  413. package/dist/core/p-43256b7c.entry.js.map +0 -1
  414. package/dist/core/p-50ead56c.entry.js.map +0 -1
  415. package/dist/core/p-6d3e4bb1.entry.js +0 -2
  416. package/dist/core/p-6d3e4bb1.entry.js.map +0 -1
  417. package/dist/core/p-726673ee.entry.js.map +0 -1
  418. package/dist/core/p-72d30c8a.entry.js +0 -2
  419. package/dist/core/p-72d30c8a.entry.js.map +0 -1
  420. package/dist/core/p-7827b5cb.entry.js +0 -2
  421. package/dist/core/p-7827b5cb.entry.js.map +0 -1
  422. package/dist/core/p-7fbf2d3e.entry.js +0 -2
  423. package/dist/core/p-7fbf2d3e.entry.js.map +0 -1
  424. package/dist/core/p-91cf9b2b.entry.js +0 -2
  425. package/dist/core/p-91cf9b2b.entry.js.map +0 -1
  426. package/dist/core/p-ac4b7329.entry.js +0 -2
  427. package/dist/core/p-ac4b7329.entry.js.map +0 -1
  428. package/dist/core/p-b01ffa55.entry.js.map +0 -1
  429. package/dist/core/p-b17c94b7.entry.js +0 -2
  430. package/dist/core/p-b17c94b7.entry.js.map +0 -1
  431. package/dist/core/p-b78f8b8c.entry.js.map +0 -1
  432. package/dist/core/p-b95a72a3.entry.js +0 -2
  433. package/dist/core/p-b95a72a3.entry.js.map +0 -1
  434. package/dist/core/p-b997064c.entry.js +0 -2
  435. package/dist/core/p-b997064c.entry.js.map +0 -1
  436. package/dist/core/p-cf7db84a.entry.js +0 -2
  437. package/dist/core/p-cf7db84a.entry.js.map +0 -1
  438. package/dist/core/p-dd36bf1b.entry.js.map +0 -1
  439. package/dist/core/p-e488de54.entry.js +0 -2
  440. package/dist/core/p-e488de54.entry.js.map +0 -1
  441. package/dist/core/p-e4d1839e.entry.js +0 -2
  442. package/dist/core/p-e4d1839e.entry.js.map +0 -1
  443. package/dist/core/p-f0fc1bf0.entry.js +0 -2
  444. package/dist/core/p-f0fc1bf0.entry.js.map +0 -1
  445. package/dist/core/p-f60dbd0e.entry.js.map +0 -1
  446. package/dist/core/p-ff4298b1.entry.js +0 -2
  447. package/dist/core/p-ff4298b1.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["icSelectCss","inputIds","MUTABLE_ATTRIBUTES","IC_INHERITED_ARIA","Select","this","hasSetDefaultValue","inheritedAttributes","initialOptionsEmpty","inputId","menuId","searchableMenuItemSelected","ungroupedOptions","hostMutationObserver","hostMutationCallback","mutationList","forceComponentUpdate","forEach","attributeName","type","addedNodes","removedNodes","includes","el","getAttribute","checkSlotInChildMutations","forceUpdate","handleRetry","ev","detail","keyPressed","_a","searchableSelectElement","focus","blurredBecauseButtonPressed","retryButtonClick","icRetryLoad","emit","value","hiddenInputValue","emitIcChange","searchable","multiple","Array","isArray","handleMultipleSelectChange","clearTimeout","debounceIcChange","window","setTimeout","valueToEmit","icChange","currDebounce","emitImmediateIcChange","deduplicateOptions","options","uniqueValues","dedupedOptions","dedupedChildren","option","children","child","console","warn","label","push","modifiedParent","Object","assign","setOptionsValuesFromLabels","length","map","setUngroupedOptions","event","setTextColor","nativeSelectElement","selectedIndex","className","setMenuChange","open","getLabelFromValue","uniqueOptions","getMultipleOptionsString","selectedValues","selectedLabels","join","getFilteredChildMenuOptions","getFilteredMenuOptions","includeDescriptionsInSearch","searchableSelectInputValue","searchMatchPosition","pressedCharacters","newOption","getValueSortedByOptions","valueArray","valuesFromAllOptions","sort","a","b","indexOf","handleNativeSelectChange","icOptionSelect","handleCustomSelectChange","emptyOptionListText","currValue","inputValueToFilter","getValueFromLabel","icOptionDeselect","ariaActiveDescendant","optionId","slice","valueIndex","splice","handleSelectAllChange","selectAllOptions","select","allEnabledOptions","filter","disabled","allValues","newValue","unselectedValues","handleMenuChange","handleFocusIndicatorDisplay","handleMenuKeyPress","cancelBubble","handleCharacterKeyDown","key","focusIndicator","shadowRoot","querySelector","classList","add","remove","handleMouseDown","preventDefault","isExternalFiltering","disableAutoFiltering","handleClick","menu","filteredOptions","hasTimedOut","loading","noOptions","handleClickOpen","handleExpandIconMouseDown","handleClear","stopPropagation","timeoutTimer","icClear","customSelectElement","characterKeyPressTimer","handleFilter","handleNativeSelectKeyDown","handleKeyDown","isArrowKey","handleKeyboardOpen","handleClearButtonFocus","clearButtonFocused","handleClearButtonBlur","retryButton","relatedTarget","isGrouped","newFilteredOptions","menuOptionsFiltered","includeGroupTitlesInSearch","noChildOptionsWhenFiltered","triggerLoading","loadingLabel","timeout","loadingErrorLabel","timedOut","find","handleSearchableSelectInput","target","icInput","debounceAriaLiveUpdate","updateSearchableSelectResultAriaLive","searchableSelectResultsStatusEl","innerText","updateMultiSelectedCountAriaLive","multiSelectSelectedCountEl","selectedCount","getOptionsWithoutGroupTitlesCount","getDefaultValue","setDefaultValue","initialValue","onFocus","icFocus","onBlur","tagName","isSearchableAndNoFocusedInternalElements","from","querySelectorAll","clearButton","icBlur","onTimeoutBlur","handleFormReset","debounce","loadingHandler","watchOptionsHandler","debounceChangedHandler","updateOnChangeDebounce","valueChangedHandler","openChangedHandler","icOpen","icClose","disconnectedCallback","removeFormResetListener","disconnect","componentWillLoad","inheritAttributes","removeDisabledFalse","addFormResetListener","componentDidLoad","onComponentRequiredPropUndefined","prop","propName","MutationObserver","observe","attributes","childList","componentDidRender","setFocus","debounceAria","render","size","fullWidth","helperText","hideLabel","name","placeholder","readonly","required","showClearButton","validationStatus","validationText","renderHiddenInput","invalid","IcInformationStatus","Error","describedBy","getInputDescribedByText","hasValidationStatus","trim","showLeftIcon","optionsSelectedCount","h","Host","class","for","ref","anchorEl","slot","isMobileOrTablet","onChange","id","onKeyDown","form","selected","role","autocomplete","onInput","onClick","innerHTML","Clear","variant","appearance","IcThemeForegroundEnum","Light","Dark","onMouseDown","Expand","inputEl","inputLabel","selectOnEnter","onMenuStateChange","onMenuOptionSelect","onMenuOptionSelectAll","onMenuKeyPress","onUngroupedOptionsSet","onRetryButtonClicked","parentEl","activationType","closeOnSelect","ariaLiveMode","status","message"],"sources":["src/components/ic-select/ic-select.css?tag=ic-select&encapsulation=shadow","src/components/ic-select/ic-select.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n/**\n * @prop --input-width: Width of the input field\n * @prop --menu-width: Width of the dropdown menu\n * @prop --ic-z-index-menu: z-index of select menu\n */\n\n:host {\n display: block;\n position: relative;\n --ic-input-label-helpertext-padding: var(--ic-space-xxs);\n --menu-max-height: 100px;\n}\n\n:host(.ic-select-full-width) {\n width: 100%;\n}\n\nic-input-component-container:hover {\n --border-color: var(--ic-action-dark-hover);\n}\n\nic-input-component-container:active {\n --border-color: var(--ic-action-dark-pressed);\n\n color: var(--ic-action-dark-pressed);\n}\n\nic-input-component-container.menu-open {\n --border-color: var(--ic-architectural-400);\n\n color: var(--ic-action-dark);\n}\n\nic-input-validation .status-icon,\nic-input-validation .statustext {\n visibility: visible;\n}\n\nic-input-validation.menu-open .status-icon,\nic-input-validation.menu-open .statustext {\n visibility: hidden;\n transition: visibility 0s;\n}\n\nic-input-label {\n margin-bottom: var(--ic-space-xs) !important;\n}\n\nselect {\n border: 0;\n border-radius: var(--ic-border-radius);\n background-color: var(--ic-architectural-white);\n color: var(--ic-color-text-primary);\n line-height: 1.5rem;\n letter-spacing: 0.005rem;\n width: 100%;\n height: 100%;\n padding-left: 0.375rem;\n appearance: none;\n background-repeat: no-repeat;\n background-position: right 0.375rem center;\n background-image: url(\"data:image/svg+xml;utf8,<svg fill='black' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/><path d='M0 0h24v24H0z' fill='none'/></svg>\");\n}\n\nselect option,\n.select-option-selected {\n color: var(--ic-color-text-primary);\n}\n\nselect:disabled {\n color: var(--ic-architectural-200);\n background-image: url(\"data:image/svg+xml;utf8,<svg fill='grey' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/><path d='M0 0h24v24H0z' fill='none'/></svg>\");\n}\n\nselect:focus {\n border: 0;\n outline: 0;\n}\n\nselect:not([disabled]) {\n cursor: pointer;\n}\n\n.select-container {\n width: 100%;\n display: flex;\n align-items: center;\n position: relative;\n}\n\n.select-input {\n width: 100%;\n height: 100%;\n padding: 0 0.375rem;\n display: flex;\n cursor: pointer;\n align-items: center;\n justify-content: space-between;\n background: none;\n border: none;\n}\n\n.select-input:focus {\n outline: var(--ic-hc-focus-outline);\n}\n\n:host(:not(.ic-select-disabled))\n ic-input-component-container:hover\n .select-input {\n background-color: var(--ic-architectural-white);\n}\n\n.select-input[disabled] {\n pointer-events: none;\n}\n\n:host(.ic-select-searchable) .select-input {\n cursor: auto;\n}\n\n.select-input.with-clear-button {\n padding-right: 0;\n}\n\n.value-text {\n max-width: calc(100% - (var(--ic-space-lg) + var(--ic-space-xxs)));\n box-sizing: border-box;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n margin-bottom: 0 !important;\n}\n\n.value-text.with-clear-button {\n padding-right: calc(var(--ic-space-xl) + var(--ic-space-xs));\n}\n\n.searchable-select-container {\n align-items: center;\n display: flex;\n width: 100%;\n position: relative;\n}\n\n.expand-icon {\n height: var(--ic-space-lg);\n padding-left: var(--ic-space-xxs);\n color: var(--ic-action-dark);\n}\n\n.expand-icon > svg {\n display: inline-block;\n width: var(--ic-space-lg);\n height: var(--ic-space-lg);\n}\n\n:host(.ic-select-disabled) .expand-icon,\n:host(.ic-select-disabled) .expand-icon > svg > path {\n color: var(--ic-architectural-200);\n}\n\n:host(.ic-select-searchable) .expand-icon {\n padding-left: 0;\n height: 2.25rem;\n}\n\n:host(.ic-select-searchable) .expand-icon > svg {\n height: 2.25rem;\n padding: 0 calc(var(--ic-space-xxxs) + var(--ic-space-xxs)) 0\n var(--ic-space-xxs);\n}\n\n:host(.ic-select-searchable:not(.ic-select-disabled)) .expand-icon > svg {\n cursor: pointer;\n}\n\n.expand-icon-open {\n color: var(--ic-action-dark);\n}\n\n.expand-icon-open,\n:host(.ic-select-searchable) .expand-icon-open {\n transform: rotateX(180deg);\n}\n\n:host(.ic-select-disabled) .value-text,\n.placeholder {\n color: var(--ic-color-text-tertiary);\n}\n\n.select-input-end {\n display: flex;\n align-items: center;\n}\n\n.clear-button-container {\n display: flex;\n align-items: center;\n}\n\n.divider {\n width: var(--ic-space-1px);\n background-color: var(--ic-architectural-400);\n margin: var(--ic-space-xxs) 0;\n border-radius: var(--ic-space-1px);\n height: var(--ic-space-lg);\n}\n\n:host(.ic-select-small) .divider {\n height: var(--ic-space-md);\n}\n\n:host(.ic-select-large) .divider {\n height: var(--ic-space-xl);\n}\n\n.clear-button {\n position: absolute;\n right: calc(var(--ic-space-xl) + var(--ic-space-xxs) - var(--ic-space-1px));\n border-radius: var(--ic-border-radius);\n transition: box-shadow var(--ic-easing-transition),\n border-radius var(--ic-easing-transition);\n}\n\n.clear-button:focus {\n background-color: var(--ic-color-focus-inner);\n box-shadow: inset 0 0 0 0.125rem var(--ic-color-focus-outer);\n border-radius: 0.25rem;\n}\n\n.clear-button:focus * {\n fill: white;\n}\n\n.clear-button.searchable {\n position: static;\n}\n\n.searchable-select-results-status,\n.multi-select-selected-count {\n border: 0;\n clip: rect(0, 0, 0, 0, 0);\n height: var(--ic-space-1px);\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: var(--ic-space-1px);\n}\n\n::slotted([slot=\"icon\"]) {\n fill: var(--ic-color-text-tertiary);\n}\n\n.has-value ::slotted([slot=\"icon\"]) {\n fill: var(--ic-color-text-primary);\n}\n\n.readonly ::slotted([slot=\"icon\"]) {\n padding: 0.375rem;\n margin-bottom: 0.75rem;\n}\n\n@media (forced-colors: active) {\n .has-value ::slotted([slot=\"icon\"]) {\n fill: currentcolor;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n Method,\n Prop,\n h,\n State,\n Watch,\n forceUpdate,\n} from \"@stencil/core\";\n\nimport {\n getInputDescribedByText,\n getLabelFromValue,\n hasValidationStatus,\n inheritAttributes,\n onComponentRequiredPropUndefined,\n renderHiddenInput,\n isMobileOrTablet,\n getFilteredMenuOptions,\n getOptionsWithoutGroupTitlesCount,\n addFormResetListener,\n removeFormResetListener,\n removeDisabledFalse,\n checkSlotInChildMutations,\n} from \"../../utils/helpers\";\nimport { IC_INHERITED_ARIA } from \"../../utils/constants\";\nimport {\n IcInformationStatus,\n IcInformationStatusOrEmpty,\n IcMenuOption,\n IcSearchMatchPositions,\n IcThemeForegroundEnum,\n IcValueEventDetail,\n IcSizes,\n} from \"../../utils/types\";\nimport Expand from \"./assets/Expand.svg\";\nimport Clear from \"./assets/Clear.svg\";\nimport { IcOptionSelectEventDetail } from \"../ic-menu/ic-menu.types\";\n\nlet inputIds = 0;\nconst MUTABLE_ATTRIBUTES = [...IC_INHERITED_ARIA, \"tabindex\", \"title\"];\n\n/**\n * @slot icon - Content will be placed to the left of the select text input.\n */\n@Component({\n tag: \"ic-select\",\n styleUrl: \"ic-select.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class Select {\n private anchorEl: HTMLElement;\n private blurredBecauseButtonPressed: boolean;\n private characterKeyPressTimer: number;\n private clearButton: HTMLIcButtonElement;\n private customSelectElement: HTMLButtonElement;\n private debounceAria: number;\n private hasSetDefaultValue = false;\n private hasTimedOut: boolean;\n private inheritedAttributes: { [k: string]: string } = {};\n private initialOptionsEmpty = false;\n private inputId = `ic-select-input-${inputIds++}`;\n private menu: HTMLIcMenuElement;\n private menuId = `${this.inputId}-menu`;\n private nativeSelectElement: HTMLSelectElement;\n private retryButtonClick: boolean;\n private searchableMenuItemSelected: boolean = false;\n private searchableSelectElement: HTMLInputElement;\n private timeoutTimer: number;\n private ungroupedOptions: IcMenuOption[] = [];\n private hostMutationObserver: MutationObserver = null;\n\n @Element() el!: HTMLIcSelectElement;\n\n @State() ariaActiveDescendant: string;\n @State() clearButtonFocused: boolean = false;\n @State() debounceIcChange: number;\n @State() hiddenInputValue: string;\n @State() noOptions: IcMenuOption[] = null;\n @State() open: boolean = false;\n @State() pressedCharacters: string = \"\";\n @State() searchableSelectInputValue: string = null;\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop({ reflect: true }) disabled?: boolean = false;\n\n /**\n * If `true`, the built in filtering will be disabled for a searchable variant. For example, if options will already be filtered from external source.\n */\n @Prop() disableAutoFiltering?: boolean = false;\n\n /**\n * The text displayed when there are no options in the option list.\n */\n @Prop() emptyOptionListText = \"No results found\";\n\n /**\n * The <form> element to associate the select with.\n */\n @Prop() form?: string;\n\n /**\n * If `true`, the select will fill the width of the container.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * The helper text that will be displayed for additional field guidance.\n */\n @Prop() helperText?: string = \"\";\n\n /**\n * If `true`, the label will be hidden and the required label value will be applied as an aria-label.\n */\n @Prop() hideLabel?: boolean = false;\n\n /**\n * If `true`, descriptions of options will be included when filtering options in a searchable select. Only applies to built in filtering.\n */\n @Prop() includeDescriptionsInSearch?: boolean = false;\n\n /**\n * If `true`, group titles of grouped options will be included when filtering options in a searchable select. Only applies to built in filtering.\n */\n @Prop() includeGroupTitlesInSearch?: boolean = false;\n\n /**\n * The label for the select.\n */\n @Prop() label!: string;\n\n /**\n * The message displayed when external loading times out.\n */\n @Prop() loadingErrorLabel?: string = \"Loading Error\";\n\n /**\n * The message displayed whilst the options are being loaded externally.\n */\n @Prop() loadingLabel?: string = \"Loading...\";\n\n /**\n * If `true`, multiple options can be selected.\n */\n @Prop() multiple?: boolean = false;\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop() name?: string = this.inputId;\n\n /**\n * The placeholder value to be displayed.\n */\n @Prop() placeholder?: string = \"Select an option\";\n\n /**\n * If `true`, the readonly state will be set.\n */\n @Prop() readonly?: boolean = false;\n\n /**\n * If `true`, the select will require a value.\n */\n @Prop() required?: boolean = false;\n\n /**\n * If `true`, a searchable variant of the select will be displayed which can be typed in to filter options.\n */\n @Prop() searchable?: boolean = false;\n\n /**\n * Whether the search string of the searchable select should match the start of or anywhere in the options. Only applies to built in filtering.\n */\n @Prop() searchMatchPosition?: IcSearchMatchPositions = \"anywhere\";\n\n /**\n * If `true`, the icOptionSelect event will be fired on enter instead of ArrowUp and ArrowDown on the single select.\n */\n @Prop() selectOnEnter?: boolean = false;\n\n /**\n * If `true`, a button which clears the select input when clicked will be displayed. The button will always appear on the searchable select.\n */\n @Prop() showClearButton?: boolean = false;\n\n /**\n * The size of the select.\n */\n @Prop() size?: IcSizes = \"medium\";\n\n /**\n * If using external filtering, set a timeout for when loading takes too long.\n */\n @Prop() timeout?: number;\n\n /**\n * The validation status - e.g. 'error' | 'warning' | 'success'.\n */\n @Prop() validationStatus?: IcInformationStatusOrEmpty = \"\";\n\n /**\n * The text to display as the validation message.\n */\n @Prop() validationText?: string = \"\";\n\n /**\n * If `true`, the loading state will be triggered when fetching options asynchronously.\n */\n @Prop({ mutable: true }) loading?: boolean = false;\n\n @Watch(\"loading\")\n loadingHandler(newValue: boolean): void {\n newValue && this.triggerLoading();\n }\n\n /**\n * The possible selection options.\n */\n @Prop() options?: IcMenuOption[] = [];\n @State() filteredOptions: IcMenuOption[] = this.options;\n @State() uniqueOptions: IcMenuOption[] = this.options;\n\n @Watch(\"options\")\n watchOptionsHandler(): void {\n if (!this.hasTimedOut && this.options !== this.noOptions) {\n this.loading = false;\n clearTimeout(this.timeoutTimer);\n if (this.isExternalFiltering()) {\n // When searchable select\n if (this.options?.length > 0) {\n this.setOptionsValuesFromLabels();\n this.noOptions = null;\n this.uniqueOptions = this.deduplicateOptions(this.options);\n this.filteredOptions = this.uniqueOptions;\n } else {\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.uniqueOptions = this.noOptions;\n this.filteredOptions = this.noOptions;\n }\n this.updateSearchableSelectResultAriaLive();\n this.setDefaultValue();\n } else {\n this.setOptionsValuesFromLabels();\n this.uniqueOptions = this.deduplicateOptions(this.options);\n this.filteredOptions = this.uniqueOptions;\n if (this.initialOptionsEmpty) {\n this.setDefaultValue();\n this.initialOptionsEmpty = false;\n }\n }\n } else {\n if (!this.searchable) {\n this.options = this.noOptions;\n }\n }\n }\n\n /**\n * The amount of time, in milliseconds, to wait to trigger the `icChange` event after each keystroke.\n */\n @Prop() debounce?: number = 0;\n @State() currDebounce = this.debounce;\n\n @Watch(\"debounce\")\n debounceChangedHandler(newValue: number): void {\n this.updateOnChangeDebounce(newValue);\n }\n\n /**\n * The value of the select, reflected by the value of the currently selected option.\n * For the searchable variant, the value is also reflected by the user input.\n * For the multi-select variant, the value must be an array of option values.\n */\n @Prop({ mutable: true }) value?: string | string[];\n @State() initialValue = this.value;\n @State() inputValueToFilter = this.value as string;\n @State() currValue = this.value;\n\n @Watch(\"value\")\n valueChangedHandler(): void {\n if (this.value !== this.currValue) {\n if (this.value && this.multiple) {\n this.currValue = this.getValueSortedByOptions(this.value as string[]);\n this.updateMultiSelectedCountAriaLive();\n } else {\n this.currValue = this.value;\n }\n }\n\n if (this.searchable) {\n this.searchableSelectInputValue =\n this.getLabelFromValue(this.currValue as string) ||\n (this.currValue as string);\n }\n }\n\n @Watch(\"open\")\n openChangedHandler(): void {\n this.open ? this.icOpen.emit() : this.icClose.emit();\n }\n\n /**\n * Emitted when the select loses focus.\n */\n @Event() icBlur: EventEmitter<void>;\n\n /**\n * Emitted when the value changes.\n */\n @Event() icChange: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when the clear button is clicked.\n */\n @Event() icClear: EventEmitter<void>;\n\n /**\n * Emitted when the select options menu is closed.\n */\n @Event() icClose: EventEmitter<void>;\n\n /**\n * Emitted when the select gains focus.\n */\n @Event() icFocus: EventEmitter<void>;\n\n /**\n * Emitted when a keyboard input occurred.\n */\n @Event() icInput: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when the select options menu is opened.\n */\n @Event() icOpen: EventEmitter<void>;\n\n /**\n * Emitted when an option is selected.\n * Selecting an option will also trigger an `icChange/onIcChange` due to the value being updated.\n */\n @Event() icOptionSelect: EventEmitter<IcOptionSelectEventDetail>;\n\n /**\n * Emitted when `multiple` is `true` and an option is deselected.\n */\n @Event() icOptionDeselect: EventEmitter<IcOptionSelectEventDetail>;\n\n /**\n * Emitted when the 'retry loading' button is clicked for a searchable variant.\n */\n @Event() icRetryLoad: EventEmitter<IcValueEventDetail>;\n\n disconnectedCallback(): void {\n removeFormResetListener(this.el, this.handleFormReset);\n this.hostMutationObserver?.disconnect();\n }\n\n componentWillLoad(): void {\n this.inheritedAttributes = inheritAttributes(this.el, MUTABLE_ATTRIBUTES);\n\n removeDisabledFalse(this.disabled, this.el);\n\n this.setOptionsValuesFromLabels();\n\n addFormResetListener(this.el, this.handleFormReset);\n\n if (!this.options?.length) {\n this.initialOptionsEmpty = true;\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.uniqueOptions = this.noOptions;\n this.filteredOptions = this.noOptions;\n } else {\n this.setDefaultValue();\n this.uniqueOptions = this.deduplicateOptions(this.options);\n }\n }\n\n componentDidLoad(): void {\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Select\"\n );\n\n if (this.loading) {\n this.triggerLoading();\n }\n\n this.hiddenInputValue = this.searchable && (this.currValue as string);\n\n this.hostMutationObserver = new MutationObserver(this.hostMutationCallback);\n this.hostMutationObserver.observe(this.el, {\n attributes: true,\n childList: true,\n });\n }\n\n componentDidRender(): void {\n if (this.nativeSelectElement && !this.disabled) {\n this.setTextColor();\n }\n }\n\n /**\n * Sets focus on the input box.\n */\n @Method()\n async setFocus(): Promise<void> {\n if (this.nativeSelectElement) {\n this.nativeSelectElement.focus();\n } else if (this.customSelectElement) {\n this.customSelectElement.focus();\n } else if (this.searchableSelectElement) {\n this.searchableSelectElement.focus();\n }\n }\n\n // triggered when attributes of host element change\n private hostMutationCallback = (mutationList: MutationRecord[]): void => {\n let forceComponentUpdate = false;\n mutationList.forEach(\n ({ attributeName, type, addedNodes, removedNodes }) => {\n if (MUTABLE_ATTRIBUTES.includes(attributeName)) {\n this.inheritedAttributes[attributeName] =\n this.el.getAttribute(attributeName);\n forceComponentUpdate = true;\n } else if (type === \"childList\") {\n forceComponentUpdate = checkSlotInChildMutations(\n addedNodes,\n removedNodes,\n \"icon\"\n );\n }\n }\n );\n if (forceComponentUpdate) {\n forceUpdate(this);\n }\n };\n\n private handleRetry = (ev: CustomEvent<IcValueEventDetail>) => {\n if (ev.detail.keyPressed) this.searchableSelectElement?.focus();\n this.blurredBecauseButtonPressed = true;\n this.retryButtonClick = true;\n this.hasSetDefaultValue = true;\n this.icRetryLoad.emit({ value: this.hiddenInputValue });\n };\n\n private updateOnChangeDebounce(newValue: number) {\n if (this.currDebounce !== newValue) {\n this.currDebounce = newValue;\n }\n }\n\n private emitIcChange = (value: string | string[] | null) => {\n if (!this.searchable) {\n // If \"Select all\" button clicked, replace value with new value (array of all option values)\n if (this.multiple && !Array.isArray(value) && value !== null) {\n this.handleMultipleSelectChange(value as string);\n } else {\n this.value = value;\n }\n }\n\n clearTimeout(this.debounceIcChange);\n this.debounceIcChange = window.setTimeout(() => {\n const valueToEmit = this.multiple ? this.value : value;\n this.icChange.emit({ value: valueToEmit });\n }, this.currDebounce);\n };\n\n private emitImmediateIcChange = (value: string) => {\n this.value = value;\n clearTimeout(this.debounceIcChange);\n this.icChange.emit({ value });\n };\n\n /**\n * Processes the provided array of IcMenuOptions, removing duplicates and reporting them with a console.warn\n * @param options array of IcMenuOptions\n * @returns a new options object, with all entries possessing a duplicate 'value' field removed\n */\n private deduplicateOptions = (options: IcMenuOption[]): IcMenuOption[] => {\n const uniqueValues: string[] = [];\n const dedupedOptions: IcMenuOption[] = [];\n let dedupedChildren: IcMenuOption[];\n\n options.forEach((option: IcMenuOption) => {\n if (option.children) {\n //If an option has children, we will loop through them\n dedupedChildren = [];\n option.children.forEach((child) => {\n if (uniqueValues.includes(child.value)) {\n console.warn(\n `ic-select with label ${this.label} was populated with duplicate option (value: ${child.value}) which has been removed.`\n );\n } else {\n uniqueValues.push(child.value);\n dedupedChildren.push(child);\n }\n });\n // construct a modified option, inserting the deduplicated children alongside the original information\n const modifiedParent: IcMenuOption = {\n ...option,\n children: dedupedChildren,\n };\n dedupedOptions.push(modifiedParent);\n } else {\n // If an option does not have children, assess to see if it's value has been included already\n if (uniqueValues.includes(option.value)) {\n console.warn(\n `ic-select with label ${this.label} was populated with duplicate option (value: ${option.value}) which has been removed.`\n );\n } else {\n uniqueValues.push(option.value);\n dedupedOptions.push(option);\n }\n }\n });\n return dedupedOptions;\n };\n\n /**\n * Loop through options array and for all options with no value, infer it from the label\n */\n private setOptionsValuesFromLabels = (): void => {\n if (this.options?.length > 0 && this.options.map) {\n this.options.map((option) => {\n if (!option.value) {\n option.value = option.label;\n }\n });\n }\n };\n\n private setUngroupedOptions = (event: CustomEvent): void => {\n this.ungroupedOptions = event.detail.options;\n };\n\n private setTextColor = (): void => {\n if (this.nativeSelectElement.selectedIndex === 0) {\n this.nativeSelectElement.className = \"placeholder\";\n } else {\n this.nativeSelectElement.className = \"select-option-selected\";\n }\n };\n\n private setMenuChange = (open: boolean) => {\n if (this.open !== open) {\n this.open = open;\n }\n };\n\n private getLabelFromValue = (value: string): string | undefined => {\n return getLabelFromValue(value, this.uniqueOptions);\n };\n\n private getMultipleOptionsString = (selectedValues: string[]) => {\n const selectedLabels = selectedValues?.map((value) =>\n this.getLabelFromValue(value)\n );\n return selectedLabels?.join(\", \");\n };\n\n private getFilteredChildMenuOptions = (option: IcMenuOption) => {\n let children = option.children;\n\n if (this.searchable) {\n children = getFilteredMenuOptions(\n option.children,\n this.includeDescriptionsInSearch,\n this.searchableSelectInputValue,\n this.searchMatchPosition\n );\n } else {\n children = getFilteredMenuOptions(\n option.children,\n false,\n this.pressedCharacters,\n \"start\"\n );\n }\n\n const newOption = { ...option };\n newOption.children = children;\n return newOption;\n };\n\n // (For multi-select) get value array, i.e. selected option values, in order they appear in option list\n private getValueSortedByOptions = (value: string[]) => {\n const valueArray = value;\n const valuesFromAllOptions = this.ungroupedOptions.map(\n (option) => option.value\n );\n\n valueArray.sort(\n (a, b) =>\n valuesFromAllOptions.indexOf(a) - valuesFromAllOptions.indexOf(b)\n );\n\n return valueArray;\n };\n\n private handleNativeSelectChange = (): void => {\n this.icOptionSelect.emit({ value: this.nativeSelectElement.value });\n this.emitImmediateIcChange(this.nativeSelectElement.value);\n this.setTextColor();\n };\n\n // Handle option select for when a custom input box and menu is rendered\n // (rather than native <select> - rendered when viewed on a mobile / tablet screen)\n private handleCustomSelectChange = (event: CustomEvent): void => {\n const value = event.detail.value;\n\n if (this.searchable && event.detail.label === this.emptyOptionListText) {\n this.searchableSelectElement.focus();\n return;\n }\n\n if (this.searchable) {\n this.value = value;\n this.searchableMenuItemSelected = true;\n\n // After editing the input, if selecting the same option as before, set the input value to label again\n if (this.value === this.currValue) {\n this.searchableSelectInputValue = this.getLabelFromValue(\n this.value as string\n );\n }\n\n this.inputValueToFilter = null;\n this.hiddenInputValue = this.getValueFromLabel(\n this.searchableSelectInputValue\n );\n }\n\n if (this.multiple && this.value?.includes(value)) {\n this.icOptionDeselect.emit({ value });\n } else {\n this.icOptionSelect.emit({ value });\n }\n\n this.ariaActiveDescendant = event.detail.optionId;\n this.emitIcChange(value);\n };\n\n // Update selected options - adds / removes them, in order of option list\n // Create new array if value prop is undefined\n private handleMultipleSelectChange = (value: string) => {\n if (this.value) {\n let valueArray = (this.value as string[]).slice();\n\n if (this.value.includes(value)) {\n const valueIndex = valueArray.indexOf(value);\n valueArray.splice(valueIndex, 1);\n } else {\n valueArray.push(value);\n valueArray = this.getValueSortedByOptions(valueArray);\n }\n\n this.value = valueArray.length === 0 ? null : valueArray;\n } else {\n const valueArray = [];\n valueArray.push(value);\n this.value = valueArray;\n }\n };\n\n private handleSelectAllChange = (event: CustomEvent) => {\n const selectAllOptions = event.detail.select;\n const allEnabledOptions = this.ungroupedOptions.filter(\n (option) => !option.disabled\n );\n const allValues = allEnabledOptions.map((option) => option.value);\n let newValue: string[];\n\n if (selectAllOptions) {\n let unselectedValues;\n\n // Only emit icOptionSelect for all values that are newly selected\n if (this.value) {\n unselectedValues = allValues.filter(\n (value) => this.value && !(this.value as string[]).includes(value)\n );\n } else {\n unselectedValues = allValues;\n }\n\n unselectedValues.forEach((value) => this.icOptionSelect.emit({ value }));\n newValue = allValues;\n } else {\n // Only emit icOptionDeselect for values that were selected\n (this.value as string[]).forEach((value) =>\n this.icOptionDeselect.emit({ value })\n );\n newValue = null;\n }\n\n this.emitIcChange(newValue);\n };\n\n private handleMenuChange = (event: CustomEvent): void => {\n this.open = event.detail.open;\n this.pressedCharacters = \"\";\n\n this.searchable && this.handleFocusIndicatorDisplay();\n };\n\n // clears the debounce delay when navigating the menu with arrow keys etc\n // to prevent delay in change event, which should only occur when typing in input\n private handleMenuKeyPress = (ev: CustomEvent): void => {\n ev.cancelBubble = true;\n if (!this.multiple) {\n this.handleCharacterKeyDown(ev.detail.key);\n }\n };\n\n private handleFocusIndicatorDisplay = () => {\n const focusIndicator = this.el.shadowRoot.querySelector(\".focus-indicator\");\n\n if (this.open) {\n focusIndicator.classList.add(\"focus-indicator-enabled\");\n } else {\n focusIndicator.classList.remove(\"focus-indicator-enabled\");\n }\n };\n\n private handleMouseDown = (event: Event): void => {\n if (!this.open) {\n event.preventDefault();\n }\n };\n\n private isExternalFiltering = (): boolean =>\n this.searchable && this.disableAutoFiltering;\n\n private handleClick = (event: MouseEvent): void => {\n if (!this.open) {\n if (this.isExternalFiltering()) {\n this.menu.options = this.filteredOptions;\n } else if (\n !this.hasTimedOut &&\n !this.loading &&\n !this.noOptions?.length &&\n (!this.searchable || this.searchableMenuItemSelected)\n ) {\n this.noOptions = null;\n this.menu.options = this.uniqueOptions;\n }\n }\n\n if (event.detail !== 0) {\n this.menu.handleClickOpen();\n }\n };\n\n private handleExpandIconMouseDown = (event: MouseEvent) => {\n if (!this.disabled) {\n event.preventDefault();\n this.searchableSelectElement.focus();\n this.handleClick(event);\n }\n };\n\n private handleClear = (event: Event): void => {\n event.stopPropagation();\n this.hasTimedOut = false;\n clearTimeout(this.timeoutTimer);\n this.noOptions = null;\n this.emitImmediateIcChange(null);\n this.icClear.emit();\n\n if (this.searchable) {\n this.searchableSelectElement.value = null;\n this.searchableSelectInputValue = null;\n this.filteredOptions = this.uniqueOptions;\n this.hiddenInputValue = null;\n this.searchableSelectElement.focus();\n } else {\n this.customSelectElement.focus();\n }\n };\n\n private handleCharacterKeyDown = (key: string) => {\n // Only close menu when space is pressed if not being used alongside character keys to quickly select options\n if (\n this.open &&\n key === \" \" &&\n this.pressedCharacters.length === 0 &&\n !this.hasTimedOut &&\n !this.loading\n ) {\n this.setMenuChange(false);\n }\n\n if (key.length === 1 && !this.searchable) {\n window.clearTimeout(this.characterKeyPressTimer);\n this.characterKeyPressTimer = window.setTimeout(\n () => (this.pressedCharacters = \"\"),\n 1000\n );\n\n if (!(key === \" \" && !this.pressedCharacters)) {\n this.pressedCharacters += key;\n this.handleFilter();\n\n if (!this.noOptions) {\n this.emitImmediateIcChange(this.filteredOptions[0].value);\n }\n }\n } else {\n this.pressedCharacters = \"\";\n }\n };\n\n private handleNativeSelectKeyDown = (event: KeyboardEvent) => {\n if ((event.key !== \"Escape\" && event.key !== \"Tab\") || this.open) {\n event.cancelBubble = true;\n }\n this.handleCharacterKeyDown(event.key);\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if ((event.key !== \"Escape\" && event.key !== \"Tab\") || this.open) {\n event.cancelBubble = true;\n }\n const isArrowKey = event.key === \"ArrowDown\" || event.key === \"ArrowUp\";\n\n if (!this.open) {\n if (this.isExternalFiltering() && (event.key === \"Enter\" || isArrowKey)) {\n this.menu.options = this.filteredOptions;\n } else {\n if (!this.hasTimedOut) {\n this.noOptions = null;\n this.menu.options = this.uniqueOptions;\n }\n }\n }\n\n if (this.open && event.key === \"Enter\") {\n this.setMenuChange(false);\n } else {\n if (!(isArrowKey && this.noOptions !== null)) {\n if (!(event.key === \" \" && this.pressedCharacters.length > 0)) {\n // Keyboard events get passed onto ic-menu\n this.menu.handleKeyboardOpen(event);\n }\n if (!this.multiple) {\n this.handleCharacterKeyDown(event.key);\n }\n }\n }\n };\n\n private handleClearButtonFocus = (): void => {\n this.clearButtonFocused = true;\n };\n\n private handleClearButtonBlur = (ev: FocusEvent): void => {\n const retryButton = this.menu?.querySelector(\"#retry-button\");\n if (\n !(\n this.searchableSelectElement &&\n ev.relatedTarget === this.searchableSelectElement\n ) &&\n !(retryButton && ev.relatedTarget === retryButton)\n ) {\n this.setMenuChange(false);\n this.handleFocusIndicatorDisplay();\n }\n this.clearButtonFocused = false;\n };\n\n private handleFilter = (): void => {\n const options = this.deduplicateOptions(\n this.searchable ? [...this.uniqueOptions] : this.ungroupedOptions\n );\n\n let isGrouped = false;\n let newFilteredOptions: IcMenuOption[] = [];\n\n options.map((option) => {\n if (option.children) isGrouped = true;\n });\n\n let menuOptionsFiltered: IcMenuOption[];\n\n if (this.searchable) {\n menuOptionsFiltered = getFilteredMenuOptions(\n options,\n this.includeDescriptionsInSearch,\n this.inputValueToFilter,\n this.searchMatchPosition\n );\n this.searchableMenuItemSelected = false;\n } else {\n menuOptionsFiltered = getFilteredMenuOptions(\n options,\n false,\n this.pressedCharacters,\n \"start\"\n );\n }\n\n if (\n !isGrouped &&\n menuOptionsFiltered[0]?.label !== this.emptyOptionListText\n ) {\n newFilteredOptions = menuOptionsFiltered;\n } else if (isGrouped) {\n options.map((option) => {\n if (this.includeGroupTitlesInSearch) {\n if (menuOptionsFiltered.indexOf(option) !== -1) {\n newFilteredOptions.push(option);\n } else {\n newFilteredOptions.push(this.getFilteredChildMenuOptions(option));\n }\n } else {\n newFilteredOptions.push(this.getFilteredChildMenuOptions(option));\n }\n });\n }\n\n let noChildOptionsWhenFiltered = false;\n\n if (isGrouped) {\n noChildOptionsWhenFiltered = true;\n newFilteredOptions.map((option) => {\n if (option.children.length > 0) {\n noChildOptionsWhenFiltered = false;\n }\n });\n }\n\n if (newFilteredOptions.length > 0 && !noChildOptionsWhenFiltered) {\n this.noOptions = null;\n this.filteredOptions = newFilteredOptions;\n } else {\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.filteredOptions = this.noOptions;\n }\n };\n\n /**\n * Put the select component into loading state.\n * Replace options with the loading message. If timeout is enabled, set the timeout and once passed, replace options with the loading error message\n */\n private triggerLoading = () => {\n this.hasTimedOut = false;\n this.noOptions = [{ label: this.loadingLabel, value: \"\", loading: true }];\n if (this.filteredOptions !== this.noOptions && this.searchable) {\n this.filteredOptions = this.noOptions;\n } else if (this.uniqueOptions !== this.noOptions && !this.searchable) {\n this.uniqueOptions = this.noOptions;\n }\n if (this.timeout) {\n this.timeoutTimer = window.setTimeout(() => {\n this.loading = false;\n this.hasTimedOut = true;\n this.noOptions = [\n { label: this.loadingErrorLabel, value: \"\", timedOut: true },\n ];\n this.filteredOptions = this.noOptions;\n if (!this.searchable) this.uniqueOptions = this.noOptions;\n }, this.timeout);\n }\n };\n\n private getValueFromLabel = (label: string): string | undefined => {\n return this.uniqueOptions.find((option) => option.label === label)?.value;\n };\n\n private handleSearchableSelectInput = (event: Event): void => {\n this.searchableSelectInputValue = (event.target as HTMLInputElement).value;\n this.icInput.emit({ value: this.searchableSelectInputValue });\n this.emitIcChange(this.searchableSelectInputValue);\n\n this.hiddenInputValue = this.searchableSelectInputValue;\n this.inputValueToFilter = this.searchableSelectInputValue;\n this.setMenuChange(true);\n\n if (!this.disableAutoFiltering) {\n this.handleFilter();\n this.debounceAriaLiveUpdate();\n }\n };\n\n private updateSearchableSelectResultAriaLive = (): void => {\n const searchableSelectResultsStatusEl = this.el.shadowRoot.querySelector(\n \".searchable-select-results-status\"\n ) as HTMLDivElement;\n\n if (searchableSelectResultsStatusEl) {\n if (this.noOptions !== null) {\n searchableSelectResultsStatusEl.innerText = this.emptyOptionListText;\n } else {\n searchableSelectResultsStatusEl.innerText = \"\";\n }\n }\n };\n\n private debounceAriaLiveUpdate() {\n clearTimeout(this.debounceAria);\n\n window.setTimeout(() => {\n this.updateSearchableSelectResultAriaLive();\n }, 800);\n }\n\n private updateMultiSelectedCountAriaLive = (): void => {\n const multiSelectSelectedCountEl = this.el.shadowRoot.querySelector(\n \".multi-select-selected-count\"\n ) as HTMLDivElement;\n\n const selectedCount = `${\n this.currValue?.length\n } of ${getOptionsWithoutGroupTitlesCount(this.options)} selected`;\n\n if (\n multiSelectSelectedCountEl &&\n multiSelectSelectedCountEl.innerText !== selectedCount\n ) {\n multiSelectSelectedCountEl.innerText = selectedCount;\n }\n };\n\n private getDefaultValue = (value: string): string | null =>\n this.getLabelFromValue(value) || value || null;\n\n private setDefaultValue = (): void => {\n if (!this.hasSetDefaultValue && this.currValue) {\n this.searchableSelectInputValue =\n this.searchable && this.getDefaultValue(this.currValue as string);\n\n this.initialValue = this.currValue;\n this.hasSetDefaultValue = true;\n }\n };\n\n private onFocus = (): void => {\n this.icFocus.emit();\n };\n\n private onBlur = ({ relatedTarget }: FocusEvent): void => {\n const target = relatedTarget as HTMLElement;\n if (\n target !== null &&\n ((target.tagName === \"UL\" && target.className.includes(\"menu\")) ||\n (target.tagName === \"LI\" && target.className.includes(\"option\")))\n ) {\n return;\n }\n\n const retryButton = this.menu?.querySelector(\"#retry-button\");\n const isSearchableAndNoFocusedInternalElements =\n this.searchable &&\n !!this.menu &&\n target !== this.menu &&\n !Array.from(this.menu.querySelectorAll(\"[role='option']\")).includes(\n target\n ) &&\n !(this.clearButton && target === this.clearButton) &&\n !(retryButton && target === retryButton);\n\n if (isSearchableAndNoFocusedInternalElements) {\n if (!this.retryButtonClick) {\n this.setMenuChange(false);\n }\n this.handleFocusIndicatorDisplay();\n }\n\n this.retryButtonClick = false;\n this.icBlur.emit();\n };\n\n private onTimeoutBlur = (ev: CustomEvent) => {\n if (\n (ev.detail.ev as FocusEvent).relatedTarget !==\n this.searchableSelectElement &&\n !this.blurredBecauseButtonPressed\n ) {\n this.setMenuChange(false);\n this.handleFocusIndicatorDisplay();\n this.icBlur.emit();\n }\n this.blurredBecauseButtonPressed = false;\n };\n\n private handleFormReset = (): void => {\n this.value = this.initialValue;\n if (this.searchable) {\n this.searchableSelectInputValue = this.getDefaultValue(\n this.value as string\n );\n this.hiddenInputValue = this.value as string;\n }\n };\n\n render() {\n const {\n size,\n disabled,\n fullWidth,\n helperText,\n hideLabel,\n label,\n menuId,\n multiple,\n name,\n options,\n placeholder,\n readonly,\n required,\n searchable,\n showClearButton,\n validationStatus,\n validationText,\n currValue,\n } = this;\n\n // HTML inputs only accept 'string' for their value\n // Does not cause errors when it is a multi-select - sets value correctly, to a comma-separated string\n renderHiddenInput(\n true,\n this.el,\n name,\n this.searchable ? this.hiddenInputValue : (currValue as string),\n disabled\n );\n\n const invalid = `${validationStatus === IcInformationStatus.Error}`;\n\n const describedBy = getInputDescribedByText(\n this.inputId,\n helperText !== \"\",\n hasValidationStatus(this.validationStatus, this.disabled)\n ).trim();\n\n let showLeftIcon = !!this.el.querySelector(`[slot=\"icon\"]`);\n if (showLeftIcon && (disabled || (readonly && !this.value))) {\n showLeftIcon = false;\n }\n\n const optionsSelectedCount = `${\n currValue?.length\n } of ${getOptionsWithoutGroupTitlesCount(this.options)} selected`;\n\n return (\n <Host\n class={{\n [\"ic-select-disabled\"]: disabled,\n [\"ic-select-searchable\"]: searchable,\n [`ic-select-${size}`]: size !== \"medium\",\n [\"ic-select-full-width\"]: fullWidth,\n }}\n onBlur={this.onBlur}\n >\n <ic-input-container readonly={readonly}>\n {!hideLabel && (\n <ic-input-label\n for={this.inputId}\n label={label}\n helperText={helperText}\n required={required}\n disabled={disabled}\n readonly={readonly}\n ></ic-input-label>\n )}\n <ic-input-component-container\n ref={(el: HTMLElement) => (this.anchorEl = el)}\n class={{ \"menu-open\": this.open }}\n size={size}\n fullWidth={fullWidth}\n disabled={disabled}\n readonly={readonly}\n validationStatus={validationStatus}\n >\n {showLeftIcon && (\n <span\n slot=\"left-icon\"\n class={{\n [\"readonly\"]: readonly,\n [\"has-value\"]: !!this.value,\n }}\n >\n <slot name=\"icon\" />\n </span>\n )}\n {readonly ? (\n <ic-typography>\n <p>\n {multiple\n ? this.getMultipleOptionsString(currValue as string[])\n : this.getLabelFromValue(currValue as string)}\n </p>\n </ic-typography>\n ) : isMobileOrTablet() && !multiple ? (\n <select\n ref={(el) => (this.nativeSelectElement = el)}\n disabled={disabled}\n onChange={this.handleNativeSelectChange}\n required={required}\n id={this.inputId}\n aria-label={label}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onKeyDown={this.handleNativeSelectKeyDown}\n form={this.form}\n {...this.inheritedAttributes}\n >\n <option value=\"\" selected disabled={!showClearButton}>\n {placeholder}\n </option>\n {options.map((option) => {\n if (option.children) {\n return (\n <optgroup label={option.label}>\n {option.children.map((option) => (\n <option\n value={option.value}\n disabled={option.disabled}\n selected={option.value === currValue}\n >\n {option.label}\n </option>\n ))}\n </optgroup>\n );\n } else {\n return (\n <option\n value={option.value}\n disabled={option.disabled}\n selected={option.value === currValue}\n >\n {option.label}\n </option>\n );\n }\n })}\n </select>\n ) : searchable ? (\n <div class=\"searchable-select-container\">\n <input\n class={{\n \"select-input\": true,\n \"with-clear-button\": !!this.searchableSelectInputValue,\n }}\n role=\"combobox\"\n autocomplete=\"off\"\n aria-label={label}\n aria-describedby={describedBy}\n aria-activedescendant={this.ariaActiveDescendant}\n aria-autocomplete=\"list\"\n aria-expanded={`${this.open}`}\n aria-invalid={invalid}\n aria-required={`${required}`}\n aria-controls={menuId}\n ref={(el) => (this.searchableSelectElement = el)}\n id={this.inputId}\n value={this.searchableSelectInputValue}\n placeholder={placeholder}\n disabled={disabled}\n onInput={this.handleSearchableSelectInput}\n onClick={this.handleClick}\n onKeyDown={this.handleKeyDown}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n form={this.form}\n ></input>\n {this.searchableSelectInputValue &&\n (showClearButton || searchable) && (\n <div class=\"clear-button-container\">\n <ic-button\n id=\"clear-button\"\n ref={(el: HTMLIcButtonElement) =>\n (this.clearButton = el)\n }\n aria-label={\n this.searchableSelectInputValue && currValue === null\n ? \"Clear input\"\n : \"Clear selection\"\n }\n class=\"clear-button\"\n innerHTML={Clear}\n onClick={this.handleClear}\n onFocus={this.handleClearButtonFocus}\n onBlur={this.handleClearButtonBlur}\n size={size}\n variant=\"icon\"\n appearance={\n this.clearButtonFocused\n ? IcThemeForegroundEnum.Light\n : IcThemeForegroundEnum.Dark\n }\n ></ic-button>\n <div class=\"divider\"></div>\n </div>\n )}\n <span\n onMouseDown={this.handleExpandIconMouseDown}\n class={{\n \"expand-icon\": true,\n \"expand-icon-open\": this.open,\n }}\n innerHTML={Expand}\n aria-hidden=\"true\"\n />\n <div\n aria-live=\"polite\"\n role=\"status\"\n class=\"searchable-select-results-status\"\n ></div>\n </div>\n ) : (\n <div class=\"select-container\">\n <button\n class=\"select-input\"\n ref={(el) => (this.customSelectElement = el)}\n id={this.inputId}\n aria-label={`${label}, ${\n (multiple && currValue\n ? `${optionsSelectedCount}, ${this.getMultipleOptionsString(\n currValue as string[]\n )}`\n : this.getLabelFromValue(currValue as string)) ||\n placeholder\n }${required ? \", required\" : \"\"}`}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n aria-haspopup=\"listbox\"\n aria-expanded={this.open ? \"true\" : \"false\"}\n aria-owns={menuId}\n aria-controls={menuId}\n disabled={disabled}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onClick={this.handleClick}\n onMouseDown={this.handleMouseDown}\n onKeyDown={this.handleKeyDown}\n >\n <ic-typography\n variant=\"body\"\n class={{\n \"value-text\": true,\n \"with-clear-button\": currValue && showClearButton,\n placeholder:\n !this.value || (multiple && this.value.length < 1),\n }}\n >\n {(multiple\n ? this.getMultipleOptionsString(currValue as string[])\n : this.getLabelFromValue(currValue as string)) ||\n placeholder}\n </ic-typography>\n <div class=\"select-input-end\">\n {currValue && showClearButton && (\n <div class=\"divider\"></div>\n )}\n <span\n class={{\n \"expand-icon\": true,\n \"expand-icon-open\": this.open,\n }}\n innerHTML={Expand}\n aria-hidden=\"true\"\n />\n </div>\n </button>\n {currValue && showClearButton && (\n <ic-button\n id=\"clear-button\"\n aria-label=\"Clear selection\"\n class=\"clear-button\"\n innerHTML={Clear}\n onClick={this.handleClear}\n onFocus={this.handleClearButtonFocus}\n onBlur={this.handleClearButtonBlur}\n size={size}\n variant=\"icon\"\n appearance={\n this.clearButtonFocused\n ? IcThemeForegroundEnum.Light\n : IcThemeForegroundEnum.Dark\n }\n ></ic-button>\n )}\n </div>\n )}\n </ic-input-component-container>\n {(!isMobileOrTablet() || multiple) && (\n <ic-menu\n class={{\n \"no-results\":\n this.loading ||\n this.hasTimedOut ||\n (this.noOptions !== null &&\n this.noOptions[0] &&\n this.noOptions[0].label === this.emptyOptionListText),\n }}\n ref={(el: HTMLIcMenuElement) => (this.menu = el)}\n inputEl={\n searchable\n ? this.searchableSelectElement\n : this.customSelectElement\n }\n inputLabel={label}\n anchorEl={this.anchorEl}\n size={size}\n menuId={menuId}\n open={this.open}\n options={searchable ? this.filteredOptions : this.uniqueOptions}\n value={multiple ? (currValue as string[]) : (currValue as string)}\n fullWidth={fullWidth}\n selectOnEnter={this.selectOnEnter}\n onMenuStateChange={this.handleMenuChange}\n onMenuOptionSelect={this.handleCustomSelectChange}\n onMenuOptionSelectAll={this.handleSelectAllChange}\n onMenuKeyPress={this.handleMenuKeyPress}\n onUngroupedOptionsSet={this.setUngroupedOptions}\n onRetryButtonClicked={this.handleRetry}\n parentEl={this.el}\n onTimeoutBlur={this.onTimeoutBlur}\n activationType={\n this.searchable || multiple || this.selectOnEnter\n ? \"manual\"\n : \"automatic\"\n }\n closeOnSelect={!multiple}\n ></ic-menu>\n )}\n {this.multiple && (\n <div\n aria-live=\"polite\"\n role=\"status\"\n class=\"multi-select-selected-count\"\n ></div>\n )}\n {hasValidationStatus(this.validationStatus, this.disabled) && (\n <ic-input-validation\n class={{ \"menu-open\": this.open }}\n ariaLiveMode=\"polite\"\n status={validationStatus}\n message={validationText}\n for={this.inputId}\n ></ic-input-validation>\n )}\n </ic-input-container>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["icSelectCss","inputIds","MUTABLE_ATTRIBUTES","IC_INHERITED_ARIA","Select","this","hasSetDefaultValue","inheritedAttributes","initialOptionsEmpty","inputId","menuId","searchableMenuItemSelected","ungroupedOptions","hostMutationObserver","hostMutationCallback","mutationList","forceComponentUpdate","forEach","attributeName","type","addedNodes","removedNodes","includes","el","getAttribute","checkSlotInChildMutations","forceUpdate","handleRetry","ev","detail","keyPressed","_a","searchableSelectElement","focus","blurredBecauseButtonPressed","retryButtonClick","icRetryLoad","emit","value","hiddenInputValue","emitIcChange","searchable","multiple","Array","isArray","handleMultipleSelectChange","clearTimeout","debounceIcChange","window","setTimeout","valueToEmit","icChange","currDebounce","emitImmediateIcChange","deduplicateOptions","options","uniqueValues","dedupedOptions","dedupedChildren","option","children","child","console","warn","label","push","modifiedParent","Object","assign","setOptionsValuesFromLabels","length","map","setUngroupedOptions","event","setTextColor","nativeSelectElement","selectedIndex","className","setMenuChange","open","getLabelFromValue","uniqueOptions","getMultipleOptionsString","selectedValues","selectedLabels","join","getFilteredChildMenuOptions","getFilteredMenuOptions","includeDescriptionsInSearch","searchableSelectInputValue","searchMatchPosition","pressedCharacters","newOption","getValueSortedByOptions","valueArray","valuesFromAllOptions","sort","a","b","indexOf","handleNativeSelectChange","icOptionSelect","handleCustomSelectChange","emptyOptionListText","currValue","inputValueToFilter","getValueFromLabel","icOptionDeselect","ariaActiveDescendant","optionId","slice","valueIndex","splice","handleSelectAllChange","selectAllOptions","select","allEnabledOptions","filter","disabled","allValues","newValue","unselectedValues","handleMenuChange","handleFocusIndicatorDisplay","handleMenuKeyPress","cancelBubble","handleCharacterKeyDown","key","focusIndicator","shadowRoot","querySelector","classList","add","remove","handleMouseDown","preventDefault","isExternalFiltering","disableAutoFiltering","handleClick","menu","filteredOptions","hasTimedOut","loading","noOptions","handleClickOpen","handleExpandIconMouseDown","handleClear","stopPropagation","timeoutTimer","icClear","customSelectElement","characterKeyPressTimer","handleFilter","handleNativeSelectKeyDown","handleKeyDown","isArrowKey","handleKeyboardOpen","handleClearButtonFocus","clearButtonFocused","handleClearButtonBlur","retryButton","relatedTarget","isGrouped","newFilteredOptions","menuOptionsFiltered","includeGroupTitlesInSearch","noChildOptionsWhenFiltered","triggerLoading","loadingLabel","timeout","loadingErrorLabel","timedOut","find","handleSearchableSelectInput","target","icInput","debounceAriaLiveUpdate","updateSearchableSelectResultAriaLive","searchableSelectResultsStatusEl","innerText","updateMultiSelectedCountAriaLive","multiSelectSelectedCountEl","selectedCount","getOptionsWithoutGroupTitlesCount","getDefaultValue","setDefaultValue","initialValue","onFocus","icFocus","onBlur","tagName","isSearchableAndNoFocusedInternalElements","from","querySelectorAll","clearButton","icBlur","onTimeoutBlur","handleFormReset","debounce","loadingHandler","watchOptionsHandler","debounceChangedHandler","updateOnChangeDebounce","valueChangedHandler","openChangedHandler","icOpen","icClose","disconnectedCallback","removeFormResetListener","disconnect","componentWillLoad","inheritAttributes","removeDisabledFalse","addFormResetListener","componentDidLoad","onComponentRequiredPropUndefined","prop","propName","MutationObserver","observe","attributes","childList","componentDidRender","setFocus","debounceAria","render","size","fullWidth","helperText","hideLabel","name","placeholder","readonly","required","showClearButton","validationStatus","validationText","renderHiddenInput","invalid","IcInformationStatus","Error","describedBy","getInputDescribedByText","hasValidationStatus","trim","showLeftIcon","optionsSelectedCount","h","Host","class","for","ref","anchorEl","slot","isMobileOrTablet","onChange","id","onKeyDown","form","selected","role","autocomplete","onInput","onClick","innerHTML","Clear","variant","appearance","IcThemeForegroundEnum","Light","Dark","onMouseDown","Expand","inputEl","inputLabel","selectOnEnter","onMenuStateChange","onMenuOptionSelect","onMenuOptionSelectAll","onMenuKeyPress","onUngroupedOptionsSet","onRetryButtonClicked","parentEl","activationType","closeOnSelect","ariaLiveMode","status","message"],"sources":["src/components/ic-select/ic-select.css?tag=ic-select&encapsulation=shadow","src/components/ic-select/ic-select.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n/**\n * @prop --input-width: Width of the input field\n * @prop --menu-width: Width of the dropdown menu\n * @prop --ic-z-index-menu: z-index of select menu\n */\n\n:host {\n display: block;\n position: relative;\n\n --ic-input-label-helpertext-padding: var(--ic-space-xxs);\n --menu-max-height: 100px;\n}\n\n:host(.ic-select-full-width) {\n width: 100%;\n}\n\nic-input-component-container:hover {\n --border-color: var(--ic-action-dark-hover);\n}\n\nic-input-component-container:active {\n --border-color: var(--ic-action-dark-pressed);\n\n color: var(--ic-action-dark-pressed);\n}\n\nic-input-component-container.menu-open {\n --border-color: var(--ic-architectural-400);\n\n color: var(--ic-action-dark);\n}\n\nic-input-validation .status-icon,\nic-input-validation .statustext {\n visibility: visible;\n}\n\nic-input-validation.menu-open .status-icon,\nic-input-validation.menu-open .statustext {\n visibility: hidden;\n transition: visibility 0s;\n}\n\nic-input-label {\n margin-bottom: var(--ic-space-xs) !important;\n}\n\nselect {\n border: 0;\n border-radius: var(--ic-border-radius);\n background-color: var(--ic-architectural-white);\n color: var(--ic-color-text-primary);\n line-height: 1.5rem;\n letter-spacing: 0.005rem;\n width: 100%;\n height: 100%;\n padding-left: 0.375rem;\n appearance: none;\n background-repeat: no-repeat;\n background-position: right 0.375rem center;\n background-image: url(\"data:image/svg+xml;utf8,<svg fill='black' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/><path d='M0 0h24v24H0z' fill='none'/></svg>\");\n}\n\nselect option,\n.select-option-selected {\n color: var(--ic-color-text-primary);\n}\n\nselect:disabled {\n color: var(--ic-architectural-200);\n background-image: url(\"data:image/svg+xml;utf8,<svg fill='grey' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/><path d='M0 0h24v24H0z' fill='none'/></svg>\");\n}\n\nselect:focus {\n border: 0;\n outline: 0;\n}\n\nselect:not([disabled]) {\n cursor: pointer;\n}\n\n.select-container {\n width: 100%;\n display: flex;\n align-items: center;\n position: relative;\n}\n\n.select-input {\n width: 100%;\n height: 100%;\n padding: 0 0.375rem;\n display: flex;\n cursor: pointer;\n align-items: center;\n justify-content: space-between;\n background: none;\n border: none;\n}\n\n.select-input:focus {\n outline: var(--ic-hc-focus-outline);\n}\n\n:host(:not(.ic-select-disabled))\n ic-input-component-container:hover\n .select-input {\n background-color: var(--ic-architectural-white);\n}\n\n.select-input[disabled] {\n pointer-events: none;\n}\n\n:host(.ic-select-searchable) .select-input {\n cursor: auto;\n}\n\n.select-input.with-clear-button {\n padding-right: 0;\n}\n\n.value-text {\n max-width: calc(100% - (var(--ic-space-lg) + var(--ic-space-xxs)));\n box-sizing: border-box;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n margin-bottom: 0 !important;\n}\n\n.value-text.with-clear-button {\n padding-right: calc(var(--ic-space-xl) + var(--ic-space-xs));\n}\n\n.searchable-select-container {\n align-items: center;\n display: flex;\n width: 100%;\n position: relative;\n}\n\n.expand-icon {\n height: var(--ic-space-lg);\n padding-left: var(--ic-space-xxs);\n color: var(--ic-action-dark);\n}\n\n.expand-icon > svg {\n display: inline-block;\n width: var(--ic-space-lg);\n height: var(--ic-space-lg);\n}\n\n:host(.ic-select-disabled) .expand-icon,\n:host(.ic-select-disabled) .expand-icon > svg > path {\n color: var(--ic-architectural-200);\n}\n\n:host(.ic-select-searchable) .expand-icon {\n padding-left: 0;\n height: 2.25rem;\n}\n\n:host(.ic-select-searchable) .expand-icon > svg {\n height: 2.25rem;\n padding: 0 calc(var(--ic-space-xxxs) + var(--ic-space-xxs)) 0\n var(--ic-space-xxs);\n}\n\n:host(.ic-select-searchable:not(.ic-select-disabled)) .expand-icon > svg {\n cursor: pointer;\n}\n\n.expand-icon-open {\n color: var(--ic-action-dark);\n}\n\n.expand-icon-open,\n:host(.ic-select-searchable) .expand-icon-open {\n transform: rotateX(180deg);\n}\n\n:host(.ic-select-disabled) .value-text,\n.placeholder {\n color: var(--ic-color-text-tertiary);\n}\n\n.select-input-end {\n display: flex;\n align-items: center;\n}\n\n.clear-button-container {\n display: flex;\n align-items: center;\n}\n\n.divider {\n width: var(--ic-space-1px);\n background-color: var(--ic-architectural-400);\n margin: var(--ic-space-xxs) 0;\n border-radius: var(--ic-space-1px);\n height: var(--ic-space-lg);\n}\n\n:host(.ic-select-small) .divider {\n height: var(--ic-space-md);\n}\n\n:host(.ic-select-large) .divider {\n height: var(--ic-space-xl);\n}\n\n.clear-button {\n position: absolute;\n right: calc(var(--ic-space-xl) + var(--ic-space-xxs) - var(--ic-space-1px));\n border-radius: var(--ic-border-radius);\n transition: box-shadow var(--ic-easing-transition),\n border-radius var(--ic-easing-transition);\n}\n\n.clear-button:focus {\n background-color: var(--ic-color-focus-inner);\n box-shadow: inset 0 0 0 0.125rem var(--ic-color-focus-outer);\n border-radius: 0.25rem;\n}\n\n.clear-button:focus * {\n fill: white;\n}\n\n.clear-button.searchable {\n position: static;\n}\n\n.searchable-select-results-status,\n.multi-select-selected-count {\n border: 0;\n clip: rect(0, 0, 0, 0, 0);\n height: var(--ic-space-1px);\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: var(--ic-space-1px);\n}\n\n::slotted([slot=\"icon\"]) {\n fill: var(--ic-color-text-tertiary);\n}\n\n.has-value ::slotted([slot=\"icon\"]) {\n fill: var(--ic-color-text-primary);\n}\n\n.readonly ::slotted([slot=\"icon\"]) {\n padding: 0.375rem;\n margin-bottom: 0.75rem;\n}\n\n@media (forced-colors: active) {\n .has-value ::slotted([slot=\"icon\"]) {\n fill: currentcolor;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n Method,\n Prop,\n h,\n State,\n Watch,\n forceUpdate,\n} from \"@stencil/core\";\n\nimport {\n getInputDescribedByText,\n getLabelFromValue,\n hasValidationStatus,\n inheritAttributes,\n onComponentRequiredPropUndefined,\n renderHiddenInput,\n isMobileOrTablet,\n getFilteredMenuOptions,\n getOptionsWithoutGroupTitlesCount,\n addFormResetListener,\n removeFormResetListener,\n removeDisabledFalse,\n checkSlotInChildMutations,\n} from \"../../utils/helpers\";\nimport { IC_INHERITED_ARIA } from \"../../utils/constants\";\nimport {\n IcInformationStatus,\n IcInformationStatusOrEmpty,\n IcMenuOption,\n IcSearchMatchPositions,\n IcThemeForegroundEnum,\n IcValueEventDetail,\n IcSizes,\n} from \"../../utils/types\";\nimport Expand from \"./assets/Expand.svg\";\nimport Clear from \"./assets/Clear.svg\";\nimport { IcOptionSelectEventDetail } from \"../ic-menu/ic-menu.types\";\n\nlet inputIds = 0;\nconst MUTABLE_ATTRIBUTES = [...IC_INHERITED_ARIA, \"tabindex\", \"title\"];\n\n/**\n * @slot icon - Content will be placed to the left of the select text input.\n */\n@Component({\n tag: \"ic-select\",\n styleUrl: \"ic-select.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class Select {\n private anchorEl: HTMLElement;\n private blurredBecauseButtonPressed: boolean;\n private characterKeyPressTimer: number;\n private clearButton: HTMLIcButtonElement;\n private customSelectElement: HTMLButtonElement;\n private debounceAria: number;\n private hasSetDefaultValue = false;\n private hasTimedOut: boolean;\n private inheritedAttributes: { [k: string]: string } = {};\n private initialOptionsEmpty = false;\n private inputId = `ic-select-input-${inputIds++}`;\n private menu: HTMLIcMenuElement;\n private menuId = `${this.inputId}-menu`;\n private nativeSelectElement: HTMLSelectElement;\n private retryButtonClick: boolean;\n private searchableMenuItemSelected: boolean = false;\n private searchableSelectElement: HTMLInputElement;\n private timeoutTimer: number;\n private ungroupedOptions: IcMenuOption[] = [];\n private hostMutationObserver: MutationObserver = null;\n\n @Element() el!: HTMLIcSelectElement;\n\n @State() ariaActiveDescendant: string;\n @State() clearButtonFocused: boolean = false;\n @State() debounceIcChange: number;\n @State() hiddenInputValue: string;\n @State() noOptions: IcMenuOption[] = null;\n @State() open: boolean = false;\n @State() pressedCharacters: string = \"\";\n @State() searchableSelectInputValue: string = null;\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop({ reflect: true }) disabled?: boolean = false;\n\n /**\n * If `true`, the built in filtering will be disabled for a searchable variant. For example, if options will already be filtered from external source.\n */\n @Prop() disableAutoFiltering?: boolean = false;\n\n /**\n * The text displayed when there are no options in the option list.\n */\n @Prop() emptyOptionListText = \"No results found\";\n\n /**\n * The <form> element to associate the select with.\n */\n @Prop() form?: string;\n\n /**\n * If `true`, the select will fill the width of the container.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * The helper text that will be displayed for additional field guidance.\n */\n @Prop() helperText?: string = \"\";\n\n /**\n * If `true`, the label will be hidden and the required label value will be applied as an aria-label.\n */\n @Prop() hideLabel?: boolean = false;\n\n /**\n * If `true`, descriptions of options will be included when filtering options in a searchable select. Only applies to built in filtering.\n */\n @Prop() includeDescriptionsInSearch?: boolean = false;\n\n /**\n * If `true`, group titles of grouped options will be included when filtering options in a searchable select. Only applies to built in filtering.\n */\n @Prop() includeGroupTitlesInSearch?: boolean = false;\n\n /**\n * The label for the select.\n */\n @Prop() label!: string;\n\n /**\n * The message displayed when external loading times out.\n */\n @Prop() loadingErrorLabel?: string = \"Loading Error\";\n\n /**\n * The message displayed whilst the options are being loaded externally.\n */\n @Prop() loadingLabel?: string = \"Loading...\";\n\n /**\n * If `true`, multiple options can be selected.\n */\n @Prop() multiple?: boolean = false;\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop() name?: string = this.inputId;\n\n /**\n * The placeholder value to be displayed.\n */\n @Prop() placeholder?: string = \"Select an option\";\n\n /**\n * If `true`, the readonly state will be set.\n */\n @Prop() readonly?: boolean = false;\n\n /**\n * If `true`, the select will require a value.\n */\n @Prop() required?: boolean = false;\n\n /**\n * If `true`, a searchable variant of the select will be displayed which can be typed in to filter options.\n */\n @Prop() searchable?: boolean = false;\n\n /**\n * Whether the search string of the searchable select should match the start of or anywhere in the options. Only applies to built in filtering.\n */\n @Prop() searchMatchPosition?: IcSearchMatchPositions = \"anywhere\";\n\n /**\n * If `true`, the icOptionSelect event will be fired on enter instead of ArrowUp and ArrowDown on the single select.\n */\n @Prop() selectOnEnter?: boolean = false;\n\n /**\n * If `true`, a button which clears the select input when clicked will be displayed. The button will always appear on the searchable select.\n */\n @Prop() showClearButton?: boolean = false;\n\n /**\n * The size of the select.\n */\n @Prop() size?: IcSizes = \"medium\";\n\n /**\n * If using external filtering, set a timeout for when loading takes too long.\n */\n @Prop() timeout?: number;\n\n /**\n * The validation status - e.g. 'error' | 'warning' | 'success'.\n */\n @Prop() validationStatus?: IcInformationStatusOrEmpty = \"\";\n\n /**\n * The text to display as the validation message.\n */\n @Prop() validationText?: string = \"\";\n\n /**\n * If `true`, the loading state will be triggered when fetching options asynchronously.\n */\n @Prop({ mutable: true }) loading?: boolean = false;\n\n @Watch(\"loading\")\n loadingHandler(newValue: boolean): void {\n newValue && this.triggerLoading();\n }\n\n /**\n * The possible selection options.\n */\n @Prop() options?: IcMenuOption[] = [];\n @State() filteredOptions: IcMenuOption[] = this.options;\n @State() uniqueOptions: IcMenuOption[] = this.options;\n\n @Watch(\"options\")\n watchOptionsHandler(): void {\n if (!this.hasTimedOut && this.options !== this.noOptions) {\n this.loading = false;\n clearTimeout(this.timeoutTimer);\n if (this.isExternalFiltering()) {\n // When searchable select\n if (this.options?.length > 0) {\n this.setOptionsValuesFromLabels();\n this.noOptions = null;\n this.uniqueOptions = this.deduplicateOptions(this.options);\n this.filteredOptions = this.uniqueOptions;\n } else {\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.uniqueOptions = this.noOptions;\n this.filteredOptions = this.noOptions;\n }\n this.updateSearchableSelectResultAriaLive();\n this.setDefaultValue();\n } else {\n this.setOptionsValuesFromLabels();\n this.uniqueOptions = this.deduplicateOptions(this.options);\n this.filteredOptions = this.uniqueOptions;\n if (this.initialOptionsEmpty) {\n this.setDefaultValue();\n this.initialOptionsEmpty = false;\n }\n }\n } else {\n if (!this.searchable) {\n this.options = this.noOptions;\n }\n }\n }\n\n /**\n * The amount of time, in milliseconds, to wait to trigger the `icChange` event after each keystroke.\n */\n @Prop() debounce?: number = 0;\n @State() currDebounce = this.debounce;\n\n @Watch(\"debounce\")\n debounceChangedHandler(newValue: number): void {\n this.updateOnChangeDebounce(newValue);\n }\n\n /**\n * The value of the select, reflected by the value of the currently selected option.\n * For the searchable variant, the value is also reflected by the user input.\n * For the multi-select variant, the value must be an array of option values.\n */\n @Prop({ mutable: true }) value?: string | string[];\n @State() initialValue = this.value;\n @State() inputValueToFilter = this.value as string;\n @State() currValue = this.value;\n\n @Watch(\"value\")\n valueChangedHandler(): void {\n if (this.value !== this.currValue) {\n if (this.value && this.multiple) {\n this.currValue = this.getValueSortedByOptions(this.value as string[]);\n this.updateMultiSelectedCountAriaLive();\n } else {\n this.currValue = this.value;\n }\n }\n\n if (this.searchable) {\n this.searchableSelectInputValue =\n this.getLabelFromValue(this.currValue as string) ||\n (this.currValue as string);\n }\n }\n\n @Watch(\"open\")\n openChangedHandler(): void {\n this.open ? this.icOpen.emit() : this.icClose.emit();\n }\n\n /**\n * Emitted when the select loses focus.\n */\n @Event() icBlur: EventEmitter<void>;\n\n /**\n * Emitted when the value changes.\n */\n @Event() icChange: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when the clear button is clicked.\n */\n @Event() icClear: EventEmitter<void>;\n\n /**\n * Emitted when the select options menu is closed.\n */\n @Event() icClose: EventEmitter<void>;\n\n /**\n * Emitted when the select gains focus.\n */\n @Event() icFocus: EventEmitter<void>;\n\n /**\n * Emitted when a keyboard input occurred.\n */\n @Event() icInput: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when the select options menu is opened.\n */\n @Event() icOpen: EventEmitter<void>;\n\n /**\n * Emitted when an option is selected.\n * Selecting an option will also trigger an `icChange/onIcChange` due to the value being updated.\n */\n @Event() icOptionSelect: EventEmitter<IcOptionSelectEventDetail>;\n\n /**\n * Emitted when `multiple` is `true` and an option is deselected.\n */\n @Event() icOptionDeselect: EventEmitter<IcOptionSelectEventDetail>;\n\n /**\n * Emitted when the 'retry loading' button is clicked for a searchable variant.\n */\n @Event() icRetryLoad: EventEmitter<IcValueEventDetail>;\n\n disconnectedCallback(): void {\n removeFormResetListener(this.el, this.handleFormReset);\n this.hostMutationObserver?.disconnect();\n }\n\n componentWillLoad(): void {\n this.inheritedAttributes = inheritAttributes(this.el, MUTABLE_ATTRIBUTES);\n\n removeDisabledFalse(this.disabled, this.el);\n\n this.setOptionsValuesFromLabels();\n\n addFormResetListener(this.el, this.handleFormReset);\n\n if (!this.options?.length) {\n this.initialOptionsEmpty = true;\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.uniqueOptions = this.noOptions;\n this.filteredOptions = this.noOptions;\n } else {\n this.setDefaultValue();\n this.uniqueOptions = this.deduplicateOptions(this.options);\n }\n }\n\n componentDidLoad(): void {\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Select\"\n );\n\n if (this.loading) {\n this.triggerLoading();\n }\n\n this.hiddenInputValue = this.searchable && (this.currValue as string);\n\n this.hostMutationObserver = new MutationObserver(this.hostMutationCallback);\n this.hostMutationObserver.observe(this.el, {\n attributes: true,\n childList: true,\n });\n }\n\n componentDidRender(): void {\n if (this.nativeSelectElement && !this.disabled) {\n this.setTextColor();\n }\n }\n\n /**\n * Sets focus on the input box.\n */\n @Method()\n async setFocus(): Promise<void> {\n if (this.nativeSelectElement) {\n this.nativeSelectElement.focus();\n } else if (this.customSelectElement) {\n this.customSelectElement.focus();\n } else if (this.searchableSelectElement) {\n this.searchableSelectElement.focus();\n }\n }\n\n // triggered when attributes of host element change\n private hostMutationCallback = (mutationList: MutationRecord[]): void => {\n let forceComponentUpdate = false;\n mutationList.forEach(\n ({ attributeName, type, addedNodes, removedNodes }) => {\n if (MUTABLE_ATTRIBUTES.includes(attributeName)) {\n this.inheritedAttributes[attributeName] =\n this.el.getAttribute(attributeName);\n forceComponentUpdate = true;\n } else if (type === \"childList\") {\n forceComponentUpdate = checkSlotInChildMutations(\n addedNodes,\n removedNodes,\n \"icon\"\n );\n }\n }\n );\n if (forceComponentUpdate) {\n forceUpdate(this);\n }\n };\n\n private handleRetry = (ev: CustomEvent<IcValueEventDetail>) => {\n if (ev.detail.keyPressed) this.searchableSelectElement?.focus();\n this.blurredBecauseButtonPressed = true;\n this.retryButtonClick = true;\n this.hasSetDefaultValue = true;\n this.icRetryLoad.emit({ value: this.hiddenInputValue });\n };\n\n private updateOnChangeDebounce(newValue: number) {\n if (this.currDebounce !== newValue) {\n this.currDebounce = newValue;\n }\n }\n\n private emitIcChange = (value: string | string[] | null) => {\n if (!this.searchable) {\n // If \"Select all\" button clicked, replace value with new value (array of all option values)\n if (this.multiple && !Array.isArray(value) && value !== null) {\n this.handleMultipleSelectChange(value as string);\n } else {\n this.value = value;\n }\n }\n\n clearTimeout(this.debounceIcChange);\n this.debounceIcChange = window.setTimeout(() => {\n const valueToEmit = this.multiple ? this.value : value;\n this.icChange.emit({ value: valueToEmit });\n }, this.currDebounce);\n };\n\n private emitImmediateIcChange = (value: string) => {\n this.value = value;\n clearTimeout(this.debounceIcChange);\n this.icChange.emit({ value });\n };\n\n /**\n * Processes the provided array of IcMenuOptions, removing duplicates and reporting them with a console.warn\n * @param options array of IcMenuOptions\n * @returns a new options object, with all entries possessing a duplicate 'value' field removed\n */\n private deduplicateOptions = (options: IcMenuOption[]): IcMenuOption[] => {\n const uniqueValues: string[] = [];\n const dedupedOptions: IcMenuOption[] = [];\n let dedupedChildren: IcMenuOption[];\n\n options.forEach((option: IcMenuOption) => {\n if (option.children) {\n //If an option has children, we will loop through them\n dedupedChildren = [];\n option.children.forEach((child) => {\n if (uniqueValues.includes(child.value)) {\n console.warn(\n `ic-select with label ${this.label} was populated with duplicate option (value: ${child.value}) which has been removed.`\n );\n } else {\n uniqueValues.push(child.value);\n dedupedChildren.push(child);\n }\n });\n // construct a modified option, inserting the deduplicated children alongside the original information\n const modifiedParent: IcMenuOption = {\n ...option,\n children: dedupedChildren,\n };\n dedupedOptions.push(modifiedParent);\n } else {\n // If an option does not have children, assess to see if it's value has been included already\n if (uniqueValues.includes(option.value)) {\n console.warn(\n `ic-select with label ${this.label} was populated with duplicate option (value: ${option.value}) which has been removed.`\n );\n } else {\n uniqueValues.push(option.value);\n dedupedOptions.push(option);\n }\n }\n });\n return dedupedOptions;\n };\n\n /**\n * Loop through options array and for all options with no value, infer it from the label\n */\n private setOptionsValuesFromLabels = (): void => {\n if (this.options?.length > 0 && this.options.map) {\n this.options.map((option) => {\n if (!option.value) {\n option.value = option.label;\n }\n });\n }\n };\n\n private setUngroupedOptions = (event: CustomEvent): void => {\n this.ungroupedOptions = event.detail.options;\n };\n\n private setTextColor = (): void => {\n if (this.nativeSelectElement.selectedIndex === 0) {\n this.nativeSelectElement.className = \"placeholder\";\n } else {\n this.nativeSelectElement.className = \"select-option-selected\";\n }\n };\n\n private setMenuChange = (open: boolean) => {\n if (this.open !== open) {\n this.open = open;\n }\n };\n\n private getLabelFromValue = (value: string): string | undefined => {\n return getLabelFromValue(value, this.uniqueOptions);\n };\n\n private getMultipleOptionsString = (selectedValues: string[]) => {\n const selectedLabels = selectedValues?.map((value) =>\n this.getLabelFromValue(value)\n );\n return selectedLabels?.join(\", \");\n };\n\n private getFilteredChildMenuOptions = (option: IcMenuOption) => {\n let children = option.children;\n\n if (this.searchable) {\n children = getFilteredMenuOptions(\n option.children,\n this.includeDescriptionsInSearch,\n this.searchableSelectInputValue,\n this.searchMatchPosition\n );\n } else {\n children = getFilteredMenuOptions(\n option.children,\n false,\n this.pressedCharacters,\n \"start\"\n );\n }\n\n const newOption = { ...option };\n newOption.children = children;\n return newOption;\n };\n\n // (For multi-select) get value array, i.e. selected option values, in order they appear in option list\n private getValueSortedByOptions = (value: string[]) => {\n const valueArray = value;\n const valuesFromAllOptions = this.ungroupedOptions.map(\n (option) => option.value\n );\n\n valueArray.sort(\n (a, b) =>\n valuesFromAllOptions.indexOf(a) - valuesFromAllOptions.indexOf(b)\n );\n\n return valueArray;\n };\n\n private handleNativeSelectChange = (): void => {\n this.icOptionSelect.emit({ value: this.nativeSelectElement.value });\n this.emitImmediateIcChange(this.nativeSelectElement.value);\n this.setTextColor();\n };\n\n // Handle option select for when a custom input box and menu is rendered\n // (rather than native <select> - rendered when viewed on a mobile / tablet screen)\n private handleCustomSelectChange = (event: CustomEvent): void => {\n const value = event.detail.value;\n\n if (this.searchable && event.detail.label === this.emptyOptionListText) {\n this.searchableSelectElement.focus();\n return;\n }\n\n if (this.searchable) {\n this.value = value;\n this.searchableMenuItemSelected = true;\n\n // After editing the input, if selecting the same option as before, set the input value to label again\n if (this.value === this.currValue) {\n this.searchableSelectInputValue = this.getLabelFromValue(\n this.value as string\n );\n }\n\n this.inputValueToFilter = null;\n this.hiddenInputValue = this.getValueFromLabel(\n this.searchableSelectInputValue\n );\n }\n\n if (this.multiple && this.value?.includes(value)) {\n this.icOptionDeselect.emit({ value });\n } else {\n this.icOptionSelect.emit({ value });\n }\n\n this.ariaActiveDescendant = event.detail.optionId;\n this.emitIcChange(value);\n };\n\n // Update selected options - adds / removes them, in order of option list\n // Create new array if value prop is undefined\n private handleMultipleSelectChange = (value: string) => {\n if (this.value) {\n let valueArray = (this.value as string[]).slice();\n\n if (this.value.includes(value)) {\n const valueIndex = valueArray.indexOf(value);\n valueArray.splice(valueIndex, 1);\n } else {\n valueArray.push(value);\n valueArray = this.getValueSortedByOptions(valueArray);\n }\n\n this.value = valueArray.length === 0 ? null : valueArray;\n } else {\n const valueArray = [];\n valueArray.push(value);\n this.value = valueArray;\n }\n };\n\n private handleSelectAllChange = (event: CustomEvent) => {\n const selectAllOptions = event.detail.select;\n const allEnabledOptions = this.ungroupedOptions.filter(\n (option) => !option.disabled\n );\n const allValues = allEnabledOptions.map((option) => option.value);\n let newValue: string[];\n\n if (selectAllOptions) {\n let unselectedValues;\n\n // Only emit icOptionSelect for all values that are newly selected\n if (this.value) {\n unselectedValues = allValues.filter(\n (value) => this.value && !(this.value as string[]).includes(value)\n );\n } else {\n unselectedValues = allValues;\n }\n\n unselectedValues.forEach((value) => this.icOptionSelect.emit({ value }));\n newValue = allValues;\n } else {\n // Only emit icOptionDeselect for values that were selected\n (this.value as string[]).forEach((value) =>\n this.icOptionDeselect.emit({ value })\n );\n newValue = null;\n }\n\n this.emitIcChange(newValue);\n };\n\n private handleMenuChange = (event: CustomEvent): void => {\n this.open = event.detail.open;\n this.pressedCharacters = \"\";\n\n this.searchable && this.handleFocusIndicatorDisplay();\n };\n\n // clears the debounce delay when navigating the menu with arrow keys etc\n // to prevent delay in change event, which should only occur when typing in input\n private handleMenuKeyPress = (ev: CustomEvent): void => {\n ev.cancelBubble = true;\n if (!this.multiple) {\n this.handleCharacterKeyDown(ev.detail.key);\n }\n };\n\n private handleFocusIndicatorDisplay = () => {\n const focusIndicator = this.el.shadowRoot.querySelector(\".focus-indicator\");\n\n if (this.open) {\n focusIndicator.classList.add(\"focus-indicator-enabled\");\n } else {\n focusIndicator.classList.remove(\"focus-indicator-enabled\");\n }\n };\n\n private handleMouseDown = (event: Event): void => {\n if (!this.open) {\n event.preventDefault();\n }\n };\n\n private isExternalFiltering = (): boolean =>\n this.searchable && this.disableAutoFiltering;\n\n private handleClick = (event: MouseEvent): void => {\n if (!this.open) {\n if (this.isExternalFiltering()) {\n this.menu.options = this.filteredOptions;\n } else if (\n !this.hasTimedOut &&\n !this.loading &&\n !this.noOptions?.length &&\n (!this.searchable || this.searchableMenuItemSelected)\n ) {\n this.noOptions = null;\n this.menu.options = this.uniqueOptions;\n }\n }\n\n if (event.detail !== 0) {\n this.menu.handleClickOpen();\n }\n };\n\n private handleExpandIconMouseDown = (event: MouseEvent) => {\n if (!this.disabled) {\n event.preventDefault();\n this.searchableSelectElement.focus();\n this.handleClick(event);\n }\n };\n\n private handleClear = (event: Event): void => {\n event.stopPropagation();\n this.hasTimedOut = false;\n clearTimeout(this.timeoutTimer);\n this.noOptions = null;\n this.emitImmediateIcChange(null);\n this.icClear.emit();\n\n if (this.searchable) {\n this.searchableSelectElement.value = null;\n this.searchableSelectInputValue = null;\n this.filteredOptions = this.uniqueOptions;\n this.hiddenInputValue = null;\n this.searchableSelectElement.focus();\n } else {\n this.customSelectElement.focus();\n }\n };\n\n private handleCharacterKeyDown = (key: string) => {\n // Only close menu when space is pressed if not being used alongside character keys to quickly select options\n if (\n this.open &&\n key === \" \" &&\n this.pressedCharacters.length === 0 &&\n !this.hasTimedOut &&\n !this.loading\n ) {\n this.setMenuChange(false);\n }\n\n if (key.length === 1 && !this.searchable) {\n window.clearTimeout(this.characterKeyPressTimer);\n this.characterKeyPressTimer = window.setTimeout(\n () => (this.pressedCharacters = \"\"),\n 1000\n );\n\n if (!(key === \" \" && !this.pressedCharacters)) {\n this.pressedCharacters += key;\n this.handleFilter();\n\n if (!this.noOptions) {\n this.emitImmediateIcChange(this.filteredOptions[0].value);\n }\n }\n } else {\n this.pressedCharacters = \"\";\n }\n };\n\n private handleNativeSelectKeyDown = (event: KeyboardEvent) => {\n if ((event.key !== \"Escape\" && event.key !== \"Tab\") || this.open) {\n event.cancelBubble = true;\n }\n this.handleCharacterKeyDown(event.key);\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if ((event.key !== \"Escape\" && event.key !== \"Tab\") || this.open) {\n event.cancelBubble = true;\n }\n const isArrowKey = event.key === \"ArrowDown\" || event.key === \"ArrowUp\";\n\n if (!this.open) {\n if (this.isExternalFiltering() && (event.key === \"Enter\" || isArrowKey)) {\n this.menu.options = this.filteredOptions;\n } else {\n if (!this.hasTimedOut) {\n this.noOptions = null;\n this.menu.options = this.uniqueOptions;\n }\n }\n }\n\n if (this.open && event.key === \"Enter\") {\n this.setMenuChange(false);\n } else {\n if (!(isArrowKey && this.noOptions !== null)) {\n if (!(event.key === \" \" && this.pressedCharacters.length > 0)) {\n // Keyboard events get passed onto ic-menu\n this.menu.handleKeyboardOpen(event);\n }\n if (!this.multiple) {\n this.handleCharacterKeyDown(event.key);\n }\n }\n }\n };\n\n private handleClearButtonFocus = (): void => {\n this.clearButtonFocused = true;\n };\n\n private handleClearButtonBlur = (ev: FocusEvent): void => {\n const retryButton = this.menu?.querySelector(\"#retry-button\");\n if (\n !(\n this.searchableSelectElement &&\n ev.relatedTarget === this.searchableSelectElement\n ) &&\n !(retryButton && ev.relatedTarget === retryButton)\n ) {\n this.setMenuChange(false);\n this.handleFocusIndicatorDisplay();\n }\n this.clearButtonFocused = false;\n };\n\n private handleFilter = (): void => {\n const options = this.deduplicateOptions(\n this.searchable ? [...this.uniqueOptions] : this.ungroupedOptions\n );\n\n let isGrouped = false;\n let newFilteredOptions: IcMenuOption[] = [];\n\n options.map((option) => {\n if (option.children) isGrouped = true;\n });\n\n let menuOptionsFiltered: IcMenuOption[];\n\n if (this.searchable) {\n menuOptionsFiltered = getFilteredMenuOptions(\n options,\n this.includeDescriptionsInSearch,\n this.inputValueToFilter,\n this.searchMatchPosition\n );\n this.searchableMenuItemSelected = false;\n } else {\n menuOptionsFiltered = getFilteredMenuOptions(\n options,\n false,\n this.pressedCharacters,\n \"start\"\n );\n }\n\n if (\n !isGrouped &&\n menuOptionsFiltered[0]?.label !== this.emptyOptionListText\n ) {\n newFilteredOptions = menuOptionsFiltered;\n } else if (isGrouped) {\n options.map((option) => {\n if (this.includeGroupTitlesInSearch) {\n if (menuOptionsFiltered.indexOf(option) !== -1) {\n newFilteredOptions.push(option);\n } else {\n newFilteredOptions.push(this.getFilteredChildMenuOptions(option));\n }\n } else {\n newFilteredOptions.push(this.getFilteredChildMenuOptions(option));\n }\n });\n }\n\n let noChildOptionsWhenFiltered = false;\n\n if (isGrouped) {\n noChildOptionsWhenFiltered = true;\n newFilteredOptions.map((option) => {\n if (option.children.length > 0) {\n noChildOptionsWhenFiltered = false;\n }\n });\n }\n\n if (newFilteredOptions.length > 0 && !noChildOptionsWhenFiltered) {\n this.noOptions = null;\n this.filteredOptions = newFilteredOptions;\n } else {\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.filteredOptions = this.noOptions;\n }\n };\n\n /**\n * Put the select component into loading state.\n * Replace options with the loading message. If timeout is enabled, set the timeout and once passed, replace options with the loading error message\n */\n private triggerLoading = () => {\n this.hasTimedOut = false;\n this.noOptions = [{ label: this.loadingLabel, value: \"\", loading: true }];\n if (this.filteredOptions !== this.noOptions && this.searchable) {\n this.filteredOptions = this.noOptions;\n } else if (this.uniqueOptions !== this.noOptions && !this.searchable) {\n this.uniqueOptions = this.noOptions;\n }\n if (this.timeout) {\n this.timeoutTimer = window.setTimeout(() => {\n this.loading = false;\n this.hasTimedOut = true;\n this.noOptions = [\n { label: this.loadingErrorLabel, value: \"\", timedOut: true },\n ];\n this.filteredOptions = this.noOptions;\n if (!this.searchable) this.uniqueOptions = this.noOptions;\n }, this.timeout);\n }\n };\n\n private getValueFromLabel = (label: string): string | undefined => {\n return this.uniqueOptions.find((option) => option.label === label)?.value;\n };\n\n private handleSearchableSelectInput = (event: Event): void => {\n this.searchableSelectInputValue = (event.target as HTMLInputElement).value;\n this.icInput.emit({ value: this.searchableSelectInputValue });\n this.emitIcChange(this.searchableSelectInputValue);\n\n this.hiddenInputValue = this.searchableSelectInputValue;\n this.inputValueToFilter = this.searchableSelectInputValue;\n this.setMenuChange(true);\n\n if (!this.disableAutoFiltering) {\n this.handleFilter();\n this.debounceAriaLiveUpdate();\n }\n };\n\n private updateSearchableSelectResultAriaLive = (): void => {\n const searchableSelectResultsStatusEl = this.el.shadowRoot.querySelector(\n \".searchable-select-results-status\"\n ) as HTMLDivElement;\n\n if (searchableSelectResultsStatusEl) {\n if (this.noOptions !== null) {\n searchableSelectResultsStatusEl.innerText = this.emptyOptionListText;\n } else {\n searchableSelectResultsStatusEl.innerText = \"\";\n }\n }\n };\n\n private debounceAriaLiveUpdate() {\n clearTimeout(this.debounceAria);\n\n window.setTimeout(() => {\n this.updateSearchableSelectResultAriaLive();\n }, 800);\n }\n\n private updateMultiSelectedCountAriaLive = (): void => {\n const multiSelectSelectedCountEl = this.el.shadowRoot.querySelector(\n \".multi-select-selected-count\"\n ) as HTMLDivElement;\n\n const selectedCount = `${\n this.currValue?.length\n } of ${getOptionsWithoutGroupTitlesCount(this.options)} selected`;\n\n if (\n multiSelectSelectedCountEl &&\n multiSelectSelectedCountEl.innerText !== selectedCount\n ) {\n multiSelectSelectedCountEl.innerText = selectedCount;\n }\n };\n\n private getDefaultValue = (value: string): string | null =>\n this.getLabelFromValue(value) || value || null;\n\n private setDefaultValue = (): void => {\n if (!this.hasSetDefaultValue && this.currValue) {\n this.searchableSelectInputValue =\n this.searchable && this.getDefaultValue(this.currValue as string);\n\n this.initialValue = this.currValue;\n this.hasSetDefaultValue = true;\n }\n };\n\n private onFocus = (): void => {\n this.icFocus.emit();\n };\n\n private onBlur = ({ relatedTarget }: FocusEvent): void => {\n const target = relatedTarget as HTMLElement;\n if (\n target !== null &&\n ((target.tagName === \"UL\" && target.className.includes(\"menu\")) ||\n (target.tagName === \"LI\" && target.className.includes(\"option\")))\n ) {\n return;\n }\n\n const retryButton = this.menu?.querySelector(\"#retry-button\");\n const isSearchableAndNoFocusedInternalElements =\n this.searchable &&\n !!this.menu &&\n target !== this.menu &&\n !Array.from(this.menu.querySelectorAll(\"[role='option']\")).includes(\n target\n ) &&\n !(this.clearButton && target === this.clearButton) &&\n !(retryButton && target === retryButton);\n\n if (isSearchableAndNoFocusedInternalElements) {\n if (!this.retryButtonClick) {\n this.setMenuChange(false);\n }\n this.handleFocusIndicatorDisplay();\n }\n\n this.retryButtonClick = false;\n this.icBlur.emit();\n };\n\n private onTimeoutBlur = (ev: CustomEvent) => {\n if (\n (ev.detail.ev as FocusEvent).relatedTarget !==\n this.searchableSelectElement &&\n !this.blurredBecauseButtonPressed\n ) {\n this.setMenuChange(false);\n this.handleFocusIndicatorDisplay();\n this.icBlur.emit();\n }\n this.blurredBecauseButtonPressed = false;\n };\n\n private handleFormReset = (): void => {\n this.value = this.initialValue;\n if (this.searchable) {\n this.searchableSelectInputValue = this.getDefaultValue(\n this.value as string\n );\n this.hiddenInputValue = this.value as string;\n }\n };\n\n render() {\n const {\n size,\n disabled,\n fullWidth,\n helperText,\n hideLabel,\n label,\n menuId,\n multiple,\n name,\n options,\n placeholder,\n readonly,\n required,\n searchable,\n showClearButton,\n validationStatus,\n validationText,\n currValue,\n } = this;\n\n // HTML inputs only accept 'string' for their value\n // Does not cause errors when it is a multi-select - sets value correctly, to a comma-separated string\n renderHiddenInput(\n true,\n this.el,\n name,\n this.searchable ? this.hiddenInputValue : (currValue as string),\n disabled\n );\n\n const invalid = `${validationStatus === IcInformationStatus.Error}`;\n\n const describedBy = getInputDescribedByText(\n this.inputId,\n helperText !== \"\",\n hasValidationStatus(this.validationStatus, this.disabled)\n ).trim();\n\n let showLeftIcon = !!this.el.querySelector(`[slot=\"icon\"]`);\n if (showLeftIcon && (disabled || (readonly && !this.value))) {\n showLeftIcon = false;\n }\n\n const optionsSelectedCount = `${\n currValue?.length\n } of ${getOptionsWithoutGroupTitlesCount(this.options)} selected`;\n\n return (\n <Host\n class={{\n [\"ic-select-disabled\"]: disabled,\n [\"ic-select-searchable\"]: searchable,\n [`ic-select-${size}`]: size !== \"medium\",\n [\"ic-select-full-width\"]: fullWidth,\n }}\n onBlur={this.onBlur}\n >\n <ic-input-container readonly={readonly}>\n {!hideLabel && (\n <ic-input-label\n for={this.inputId}\n label={label}\n helperText={helperText}\n required={required}\n disabled={disabled}\n readonly={readonly}\n ></ic-input-label>\n )}\n <ic-input-component-container\n ref={(el: HTMLElement) => (this.anchorEl = el)}\n class={{ \"menu-open\": this.open }}\n size={size}\n fullWidth={fullWidth}\n disabled={disabled}\n readonly={readonly}\n validationStatus={validationStatus}\n >\n {showLeftIcon && (\n <span\n slot=\"left-icon\"\n class={{\n [\"readonly\"]: readonly,\n [\"has-value\"]: !!this.value,\n }}\n >\n <slot name=\"icon\" />\n </span>\n )}\n {readonly ? (\n <ic-typography>\n <p>\n {multiple\n ? this.getMultipleOptionsString(currValue as string[])\n : this.getLabelFromValue(currValue as string)}\n </p>\n </ic-typography>\n ) : isMobileOrTablet() && !multiple ? (\n <select\n ref={(el) => (this.nativeSelectElement = el)}\n disabled={disabled}\n onChange={this.handleNativeSelectChange}\n required={required}\n id={this.inputId}\n aria-label={label}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onKeyDown={this.handleNativeSelectKeyDown}\n form={this.form}\n {...this.inheritedAttributes}\n >\n <option value=\"\" selected disabled={!showClearButton}>\n {placeholder}\n </option>\n {options.map((option) => {\n if (option.children) {\n return (\n <optgroup label={option.label}>\n {option.children.map((option) => (\n <option\n value={option.value}\n disabled={option.disabled}\n selected={option.value === currValue}\n >\n {option.label}\n </option>\n ))}\n </optgroup>\n );\n } else {\n return (\n <option\n value={option.value}\n disabled={option.disabled}\n selected={option.value === currValue}\n >\n {option.label}\n </option>\n );\n }\n })}\n </select>\n ) : searchable ? (\n <div class=\"searchable-select-container\">\n <input\n class={{\n \"select-input\": true,\n \"with-clear-button\": !!this.searchableSelectInputValue,\n }}\n role=\"combobox\"\n autocomplete=\"off\"\n aria-label={label}\n aria-describedby={describedBy}\n aria-activedescendant={this.ariaActiveDescendant}\n aria-autocomplete=\"list\"\n aria-expanded={`${this.open}`}\n aria-invalid={invalid}\n aria-required={`${required}`}\n aria-controls={menuId}\n ref={(el) => (this.searchableSelectElement = el)}\n id={this.inputId}\n value={this.searchableSelectInputValue}\n placeholder={placeholder}\n disabled={disabled}\n onInput={this.handleSearchableSelectInput}\n onClick={this.handleClick}\n onKeyDown={this.handleKeyDown}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n form={this.form}\n ></input>\n {this.searchableSelectInputValue &&\n (showClearButton || searchable) && (\n <div class=\"clear-button-container\">\n <ic-button\n id=\"clear-button\"\n ref={(el: HTMLIcButtonElement) =>\n (this.clearButton = el)\n }\n aria-label={\n this.searchableSelectInputValue && currValue === null\n ? \"Clear input\"\n : \"Clear selection\"\n }\n class=\"clear-button\"\n innerHTML={Clear}\n onClick={this.handleClear}\n onFocus={this.handleClearButtonFocus}\n onBlur={this.handleClearButtonBlur}\n size={size}\n variant=\"icon\"\n appearance={\n this.clearButtonFocused\n ? IcThemeForegroundEnum.Light\n : IcThemeForegroundEnum.Dark\n }\n ></ic-button>\n <div class=\"divider\"></div>\n </div>\n )}\n <span\n onMouseDown={this.handleExpandIconMouseDown}\n class={{\n \"expand-icon\": true,\n \"expand-icon-open\": this.open,\n }}\n innerHTML={Expand}\n aria-hidden=\"true\"\n />\n <div\n aria-live=\"polite\"\n role=\"status\"\n class=\"searchable-select-results-status\"\n ></div>\n </div>\n ) : (\n <div class=\"select-container\">\n <button\n class=\"select-input\"\n ref={(el) => (this.customSelectElement = el)}\n id={this.inputId}\n aria-label={`${label}, ${\n (multiple && currValue\n ? `${optionsSelectedCount}, ${this.getMultipleOptionsString(\n currValue as string[]\n )}`\n : this.getLabelFromValue(currValue as string)) ||\n placeholder\n }${required ? \", required\" : \"\"}`}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n aria-haspopup=\"listbox\"\n aria-expanded={this.open ? \"true\" : \"false\"}\n aria-owns={menuId}\n aria-controls={menuId}\n disabled={disabled}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onClick={this.handleClick}\n onMouseDown={this.handleMouseDown}\n onKeyDown={this.handleKeyDown}\n >\n <ic-typography\n variant=\"body\"\n class={{\n \"value-text\": true,\n \"with-clear-button\": currValue && showClearButton,\n placeholder:\n !this.value || (multiple && this.value.length < 1),\n }}\n >\n {(multiple\n ? this.getMultipleOptionsString(currValue as string[])\n : this.getLabelFromValue(currValue as string)) ||\n placeholder}\n </ic-typography>\n <div class=\"select-input-end\">\n {currValue && showClearButton && (\n <div class=\"divider\"></div>\n )}\n <span\n class={{\n \"expand-icon\": true,\n \"expand-icon-open\": this.open,\n }}\n innerHTML={Expand}\n aria-hidden=\"true\"\n />\n </div>\n </button>\n {currValue && showClearButton && (\n <ic-button\n id=\"clear-button\"\n aria-label=\"Clear selection\"\n class=\"clear-button\"\n innerHTML={Clear}\n onClick={this.handleClear}\n onFocus={this.handleClearButtonFocus}\n onBlur={this.handleClearButtonBlur}\n size={size}\n variant=\"icon\"\n appearance={\n this.clearButtonFocused\n ? IcThemeForegroundEnum.Light\n : IcThemeForegroundEnum.Dark\n }\n ></ic-button>\n )}\n </div>\n )}\n </ic-input-component-container>\n {(!isMobileOrTablet() || multiple) && (\n <ic-menu\n class={{\n \"no-results\":\n this.loading ||\n this.hasTimedOut ||\n (this.noOptions !== null &&\n this.noOptions[0] &&\n this.noOptions[0].label === this.emptyOptionListText),\n }}\n ref={(el: HTMLIcMenuElement) => (this.menu = el)}\n inputEl={\n searchable\n ? this.searchableSelectElement\n : this.customSelectElement\n }\n inputLabel={label}\n anchorEl={this.anchorEl}\n size={size}\n menuId={menuId}\n open={this.open}\n options={searchable ? this.filteredOptions : this.uniqueOptions}\n value={multiple ? (currValue as string[]) : (currValue as string)}\n fullWidth={fullWidth}\n selectOnEnter={this.selectOnEnter}\n onMenuStateChange={this.handleMenuChange}\n onMenuOptionSelect={this.handleCustomSelectChange}\n onMenuOptionSelectAll={this.handleSelectAllChange}\n onMenuKeyPress={this.handleMenuKeyPress}\n onUngroupedOptionsSet={this.setUngroupedOptions}\n onRetryButtonClicked={this.handleRetry}\n parentEl={this.el}\n onTimeoutBlur={this.onTimeoutBlur}\n activationType={\n this.searchable || multiple || this.selectOnEnter\n ? \"manual\"\n : \"automatic\"\n }\n closeOnSelect={!multiple}\n ></ic-menu>\n )}\n {this.multiple && (\n <div\n aria-live=\"polite\"\n role=\"status\"\n class=\"multi-select-selected-count\"\n ></div>\n )}\n {hasValidationStatus(this.validationStatus, this.disabled) && (\n <ic-input-validation\n class={{ \"menu-open\": this.open }}\n ariaLiveMode=\"polite\"\n status={validationStatus}\n message={validationText}\n for={this.inputId}\n ></ic-input-validation>\n )}\n </ic-input-container>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{r as e,c as t,h as o,g as i}from"./p-6b5e91e2.js";import{O as a,r as n}from"./p-b7eb8ef9.js";const r='/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible;}pre{font-family:monospace, monospace;font-size:1em;}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em;}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0;}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px;}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font-style:inherit;vertical-align:baseline}a{text-align:center}.item-container{display:flex;justify-content:center;align-items:center;width:calc(var(--ic-space-xl) + var(--ic-space-sm));height:var(--ic-space-xl);margin:var(--ic-space-xxs) var(--ic-space-xxxs);cursor:pointer;text-decoration:none}button{background:none;border:none;outline:inherit;position:relative}.ellipsis{pointer-events:none;--ic-typography-color:var(--ic-pagination-ellipsis)}.monochrome .ellipsis{--ic-typography-color:var(--ic-pagination-ellipsis-monochrome)}.item-container:focus{box-shadow:var(--ic-border-focus);outline:var(--ic-hc-focus-outline);border-radius:var(--ic-border-radius);transition:var(--ic-easing-transition-fast)}.page{--ic-typography-color:var(--ic-pagination-page-number)}.monochrome .page{--ic-typography-color:var(--ic-pagination-page-number-monochrome)}.simple-current{min-width:calc(var(--ic-space-xxl) + var(--ic-space-md));height:var(--ic-space-lg);cursor:default}.item-container.page:hover:not(.selected):not(:focus){border-radius:var(--ic-border-radius);background-color:var(--ic-pagination-hover)}.item-container.page:active:not(.selected):not(:focus){background-color:var(--ic-pagination-pressed)}.monochrome .item-container.page:hover:not(.selected):not(:focus){background-color:var(--ic-pagination-hover-monochrome)}.monochrome .item-container.page:active:not(.selected):not(:focus){background-color:var(--ic-pagination-pressed-monochrome)}.selected{pointer-events:none;outline:none}.selected::after{content:"";height:var(--ic-space-xxs);width:100%;position:absolute;bottom:0;background-color:var(--ic-pagination-selected-banner)}.monochrome .selected::after{background-color:var(--ic-pagination-selected-banner-monochrome)}.page-selected{--ic-typography-color:var(--ic-pagination-text)}.item-container.page.light:hover:not(.selected):not(:focus){background-color:var(--ic-action-light-bg-hover)}.item-container.page.light:active:not(.selected):not(:focus){background-color:var(--ic-action-light-bg-pressed)}ic-typography.light,ic-typography.page-selected.light{--ic-typography-color:var(--ic-architectural-white)}.selected.light::after{content:"";height:var(--ic-space-xxs);width:100%;position:absolute;bottom:0;background-color:var(--ic-action-light)}.item-container.page.dark:hover:not(.selected):not(:focus){background-color:var(--ic-action-dark-bg-hover)}.item-container.page.dark:active:not(.selected):not(:focus){background-color:var(--ic-action-dark-bg-pressed)}ic-typography.dark{--ic-typography-color:var(--ic-color-text-primary)}.selected.dark::after{content:"";height:var(--ic-space-xxs);width:100%;position:absolute;bottom:0;background-color:var(--ic-action-dark)}.disabled{--ic-typography-color:var(--ic-architectural-200);pointer-events:none;cursor:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (forced-colors: active){.selected::after{background-color:Highlight}.selected.light::after{background-color:Highlight}.selected.dark::after{background-color:Highlight}.disabled{--ic-typography-color:GrayText}}';const c=class{constructor(o){e(this,o);this.paginationItemClick=t(this,"paginationItemClick",7);this.handleClick=()=>{this.paginationItemClick.emit({page:this.page})};this.capitalizedLabel=undefined;this.disabled=false;this.label="Page";this.monochrome=false;this.page=undefined;this.selected=false;this.theme="inherit";this.type=undefined}watchLabelHandler(){this.capitalizedLabel=a(this.label)}componentWillLoad(){this.watchLabelHandler();n(this.disabled,this.el)}render(){const{page:e,selected:t,type:i,disabled:a,label:n,capitalizedLabel:r,monochrome:c}=this;return o("a",{class:{["monochrome"]:c}},i==="ellipsis"?o("div",{class:{["item-container"]:true,["ellipsis"]:true,["disabled"]:a}},o("ic-typography",{variant:"label"},"...")):i==="page"?o("button",{disabled:a,onClick:this.handleClick,tabindex:t?"-1":"0",role:"button","aria-current":t&&"page","aria-label":t?`${n}: ${e}`:`Go to ${n} ${e}`,class:{["selected"]:!a&&t,["disabled"]:a,["item-container"]:true,["page"]:i==="page"}},o("ic-typography",{variant:"label",class:{["page-selected"]:t,["disabled"]:a}},e)):o("ic-typography",{"aria-live":"polite",class:{[`simple-current`]:true,["disabled"]:a},variant:"label"},r," ",e))}get el(){return i(this)}static get watchers(){return{label:["watchLabelHandler"]}}};c.style=r;export{c as ic_pagination_item};
2
+ //# sourceMappingURL=p-2ef46ead.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["icPaginationItemCss","PaginationItem","this","handleClick","paginationItemClick","emit","page","watchLabelHandler","capitalizedLabel","capitalize","label","componentWillLoad","removeDisabledFalse","disabled","el","render","selected","type","monochrome","h","class","variant","onClick","tabindex","role"],"sources":["src/components/ic-pagination-item/ic-pagination-item.css?tag=ic-pagination-item&encapsulation=shadow","src/components/ic-pagination-item/ic-pagination-item.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\na {\n text-align: center;\n}\n\n.item-container {\n display: flex;\n justify-content: center;\n align-items: center;\n width: calc(var(--ic-space-xl) + var(--ic-space-sm));\n height: var(--ic-space-xl);\n margin: var(--ic-space-xxs) var(--ic-space-xxxs);\n cursor: pointer;\n text-decoration: none;\n}\n\nbutton {\n background: none;\n border: none;\n outline: inherit;\n position: relative;\n}\n\n.ellipsis {\n pointer-events: none;\n\n --ic-typography-color: var(--ic-pagination-ellipsis);\n}\n\n.monochrome .ellipsis {\n --ic-typography-color: var(--ic-pagination-ellipsis-monochrome);\n}\n\n.item-container:focus {\n box-shadow: var(--ic-border-focus);\n outline: var(--ic-hc-focus-outline);\n border-radius: var(--ic-border-radius);\n transition: var(--ic-easing-transition-fast);\n}\n\n.page {\n --ic-typography-color: var(--ic-pagination-page-number);\n}\n\n.monochrome .page {\n --ic-typography-color: var(--ic-pagination-page-number-monochrome);\n}\n\n.simple-current {\n min-width: calc(var(--ic-space-xxl) + var(--ic-space-md));\n height: var(--ic-space-lg);\n cursor: default;\n}\n\n/** DEFAULT STATES **/\n.item-container.page:hover:not(.selected):not(:focus) {\n border-radius: var(--ic-border-radius);\n background-color: var(--ic-pagination-hover);\n}\n\n.item-container.page:active:not(.selected):not(:focus) {\n background-color: var(--ic-pagination-pressed);\n}\n\n.monochrome .item-container.page:hover:not(.selected):not(:focus) {\n background-color: var(--ic-pagination-hover-monochrome);\n}\n\n.monochrome .item-container.page:active:not(.selected):not(:focus) {\n background-color: var(--ic-pagination-pressed-monochrome);\n}\n\n.selected {\n pointer-events: none;\n outline: none;\n}\n\n.selected::after {\n content: \"\";\n height: var(--ic-space-xxs);\n width: 100%;\n position: absolute;\n bottom: 0;\n background-color: var(--ic-pagination-selected-banner);\n}\n\n.monochrome .selected::after {\n background-color: var(--ic-pagination-selected-banner-monochrome);\n}\n\n.page-selected {\n --ic-typography-color: var(--ic-pagination-text);\n}\n\n/** LIGHT STATES **/\n.item-container.page.light:hover:not(.selected):not(:focus) {\n background-color: var(--ic-action-light-bg-hover);\n}\n\n.item-container.page.light:active:not(.selected):not(:focus) {\n background-color: var(--ic-action-light-bg-pressed);\n}\n\nic-typography.light,\nic-typography.page-selected.light {\n --ic-typography-color: var(--ic-architectural-white);\n}\n\n.selected.light::after {\n content: \"\";\n height: var(--ic-space-xxs);\n width: 100%;\n position: absolute;\n bottom: 0;\n background-color: var(--ic-action-light);\n}\n\n/** DARK STATES **/\n.item-container.page.dark:hover:not(.selected):not(:focus) {\n background-color: var(--ic-action-dark-bg-hover);\n}\n\n.item-container.page.dark:active:not(.selected):not(:focus) {\n background-color: var(--ic-action-dark-bg-pressed);\n}\n\nic-typography.dark {\n --ic-typography-color: var(--ic-color-text-primary);\n}\n\n.selected.dark::after {\n content: \"\";\n height: var(--ic-space-xxs);\n width: 100%;\n position: absolute;\n bottom: 0;\n background-color: var(--ic-action-dark);\n}\n\n.disabled {\n --ic-typography-color: var(--ic-architectural-200);\n\n pointer-events: none;\n cursor: none;\n user-select: none;\n}\n\n@media (forced-colors: active) {\n .selected::after {\n background-color: Highlight;\n }\n\n .selected.light::after {\n background-color: Highlight;\n }\n\n .selected.dark::after {\n background-color: Highlight;\n }\n\n .disabled {\n --ic-typography-color: GrayText;\n }\n}\n","import {\n Component,\n Prop,\n State,\n Element,\n h,\n Event,\n EventEmitter,\n Watch,\n} from \"@stencil/core\";\nimport { IcPaginationItemType } from \"./ic-pagination-item.types\";\nimport { IcThemeMode } from \"../../utils/types\";\nimport { removeDisabledFalse, capitalize } from \"../../utils/helpers\";\n\n@Component({\n tag: \"ic-pagination-item\",\n styleUrl: \"ic-pagination-item.css\",\n shadow: true,\n})\nexport class PaginationItem {\n @Element() el: HTMLIcPaginationItemElement;\n\n @State() capitalizedLabel: string;\n\n /**\n * If `true`, the pagination item will be disabled.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * The label for the pagination item (applicable when simple pagination is being used).\n */\n @Prop() label: string = \"Page\";\n\n @Watch(\"label\")\n watchLabelHandler(): void {\n this.capitalizedLabel = capitalize(this.label);\n }\n\n /**\n * If `true`, the pagination item will display as black in the light theme, and white in dark theme.\n */\n @Prop() monochrome?: boolean = false;\n\n /**\n * The current page number.\n */\n @Prop() page: number | null;\n\n /**\n * If `true`, the pagination item will be selected.\n */\n @Prop() selected: boolean = false;\n\n /**\n * Sets the theme color to the dark or light theme color. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme?: IcThemeMode = \"inherit\";\n\n /**\n * The type of pagination item - 'page' or 'ellipsis'.\n */\n @Prop() type: IcPaginationItemType;\n\n /**\n * @internal - Emitted when a pagination item is clicked.\n */\n @Event() paginationItemClick: EventEmitter<{ page: number }>;\n\n componentWillLoad(): void {\n this.watchLabelHandler();\n removeDisabledFalse(this.disabled, this.el);\n }\n\n private handleClick = () => {\n this.paginationItemClick.emit({ page: this.page });\n };\n\n render() {\n const {\n page,\n selected,\n type,\n disabled,\n label,\n capitalizedLabel,\n monochrome,\n } = this;\n\n return (\n <a class={{ [\"monochrome\"]: monochrome }}>\n {type === \"ellipsis\" ? (\n <div\n class={{\n [\"item-container\"]: true,\n [\"ellipsis\"]: true,\n [\"disabled\"]: disabled,\n }}\n >\n <ic-typography variant=\"label\">...</ic-typography>\n </div>\n ) : type === \"page\" ? (\n <button\n disabled={disabled}\n onClick={this.handleClick}\n tabindex={selected ? \"-1\" : \"0\"}\n role=\"button\"\n aria-current={selected && \"page\"}\n aria-label={\n selected ? `${label}: ${page}` : `Go to ${label} ${page}`\n }\n class={{\n [\"selected\"]: !disabled && selected,\n [\"disabled\"]: disabled,\n [\"item-container\"]: true,\n [\"page\"]: type === \"page\",\n }}\n >\n <ic-typography\n variant=\"label\"\n class={{\n [\"page-selected\"]: selected,\n [\"disabled\"]: disabled,\n }}\n >\n {page}\n </ic-typography>\n </button>\n ) : (\n <ic-typography\n aria-live=\"polite\"\n class={{\n [`simple-current`]: true,\n [\"disabled\"]: disabled,\n }}\n variant=\"label\"\n >\n {capitalizedLabel} {page}\n </ic-typography>\n )}\n </a>\n );\n }\n}\n"],"mappings":"oGAAA,MAAMA,EAAsB,wyK,MCmBfC,EAAc,M,kFAuDjBC,KAAAC,YAAc,KACpBD,KAAKE,oBAAoBC,KAAK,CAAEC,KAAMJ,KAAKI,MAAO,E,8CAhDxB,M,WAKJ,O,gBAUO,M,kCAUH,M,WAKE,U,oBAtB9B,iBAAAC,GACEL,KAAKM,iBAAmBC,EAAWP,KAAKQ,M,CAiC1C,iBAAAC,GACET,KAAKK,oBACLK,EAAoBV,KAAKW,SAAUX,KAAKY,G,CAO1C,MAAAC,GACE,MAAMT,KACJA,EAAIU,SACJA,EAAQC,KACRA,EAAIJ,SACJA,EAAQH,MACRA,EAAKF,iBACLA,EAAgBU,WAChBA,GACEhB,KAEJ,OACEiB,EAAA,KAAGC,MAAO,CAAE,CAAC,cAAeF,IACzBD,IAAS,WACRE,EAAA,OACEC,MAAO,CACL,CAAC,kBAAmB,KACpB,CAAC,YAAa,KACd,CAAC,YAAaP,IAGhBM,EAAA,iBAAeE,QAAQ,SAAO,QAE9BJ,IAAS,OACXE,EAAA,UACEN,SAAUA,EACVS,QAASpB,KAAKC,YACdoB,SAAUP,EAAW,KAAO,IAC5BQ,KAAK,SAAQ,eACCR,GAAY,OAAM,aAE9BA,EAAW,GAAGN,MAAUJ,IAAS,SAASI,KAASJ,IAErDc,MAAO,CACL,CAAC,aAAcP,GAAYG,EAC3B,CAAC,YAAaH,EACd,CAAC,kBAAmB,KACpB,CAAC,QAASI,IAAS,SAGrBE,EAAA,iBACEE,QAAQ,QACRD,MAAO,CACL,CAAC,iBAAkBJ,EACnB,CAAC,YAAaH,IAGfP,IAILa,EAAA,6BACY,SACVC,MAAO,CACL,CAAC,kBAAmB,KACpB,CAAC,YAAaP,GAEhBQ,QAAQ,SAEPb,EAAgB,IAAGF,G"}
@@ -1,2 +1,2 @@
1
- import{r as e,c as t,h as i,H as o,g as s}from"./p-6b5e91e2.js";import{y as n,d as a}from"./p-b7eb8ef9.js";import{c as r}from"./p-68a5aaff.js";const l='/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible;}pre{font-family:monospace, monospace;font-size:1em;}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em;}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0;}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px;}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font-style:inherit;vertical-align:baseline}@media (prefers-reduced-motion: no-preference){:host .opening-from-parent{animation:slide-in var(--ic-transition-duration-slow) ease-in-out}:host .opening-from-child{animation:slide-out var(--ic-transition-duration-slow) ease-in-out}}:host{border-radius:var(--ic-border-radius);color:var(--ic-popover-nav-text);--ic-typography-color:var(--ic-popover-nav-text);position:relative;z-index:var(--ic-z-index-popover);box-sizing:border-box;box-shadow:var(--ic-elevation-overlay);display:none}:host(.on-dialog){inset:auto !important}:host(.on-dialog-fix-translate){transform:translate(0, var(--ic-space-xs)) !important}:host(.on-dialog-translate-y){transform:translate(0, calc(-1 * var(--translate-y))) !important}.menu{border:var(--ic-border-default);border-color:var(--ic-popover-border);border-radius:var(--ic-border-radius);background-color:var(--ic-popover-background);visibility:hidden;height:0}.button{text-decoration:none;list-style-type:none}:host(:focus-within){box-shadow:var(--ic-border-focus)}.menu:focus-visible{outline:none}:host(.ic-popover-menu-open){display:block;min-width:calc(20rem - var(--ic-space-xl));width:var(--popover-width, 20rem);max-width:calc(100vw - var(--ic-space-xl))}:host(.ic-popover-menu-open) .menu{visibility:visible;height:-moz-fit-content;height:fit-content;max-height:var(--max-height, -moz-fit-content);max-height:var(--max-height, fit-content);overflow-y:auto;overflow-x:hidden}.parent-label{--ic-typography-color:var(--ic-popover-parent-label);margin:var(--ic-space-xs) var(--ic-space-xs) 0}@keyframes slide-in{from{opacity:0;transform:translateX(10rem)}to{opacity:1;transform:translateX(0)}}@keyframes slide-out{from{opacity:0;transform:translateX(-10rem)}to{opacity:1;transform:translateX(0)}}';const h=class{constructor(i){e(this,i);this.icPopoverClosed=t(this,"icPopoverClosed",7);this.ARIA_LABEL="aria-label";this.popoverMenuEls=[];this.setButtonFocus=()=>{var e;(e=this.popoverMenuEls[this.currentFocus])===null||e===void 0?void 0:e.focus()};this.findAnchorEl=e=>{let t=null;if(!e){this.submenuId===undefined&&console.error("No anchor specified for popover component")}else{t=document.querySelector(e.indexOf("#")===0?e:"#"+e);if(t===null){console.error(`Popover anchor element '${e}' not found`)}}return t};this.isNotPopoverMenuEl=e=>{const{id:t,tagName:i}=e.target;return t!==this.anchor&&i!=="IC-MENU-ITEM"&&i!=="IC-MENU-GROUP"&&i!=="IC-POPOVER-MENU"};this.getNextItemToSelect=(e,t)=>{const i=this.popoverMenuEls.length-1;if(e<1){e=0}let o=t?e+1:e-1;if(o<0){o=i}else if(o>i){o=0}return o};this.addMenuItems=e=>{for(let t=0;t<e.length;t++){const i=e[t];if(i.tagName==="IC-MENU-ITEM"){this.popoverMenuEls.push(i)}else if(i.tagName==="IC-MENU-GROUP"){const e=i.shadowRoot.querySelector("ul");const t=n(e);this.addMenuItems(t)}}};this.getMenuAriaLabel=()=>{const e=this.el.getAttribute(this.ARIA_LABEL);if(a(this.submenuId)){return`${e}, within nested level ${this.submenuLevel} ${this.parentLabel} submenu,`}else{return e}};this.handleBackButtonClick=()=>{this.parentPopover.openFromChild();this.open=false};this.initPopperJS=()=>{this.popperInstance=r(this.anchorEl,this.el,{placement:"bottom-start",modifiers:[{name:"offset",options:{offset:[0,4]}},{name:"flip",options:{fallbackPlacements:["top-start","top-end","bottom-end"],rootBoundary:"viewport"}}]})};this.openingFromChild=false;this.openingFromParent=false;this.anchor=undefined;this.parentLabel=undefined;this.parentPopover=undefined;this.submenuId=undefined;this.submenuLevel=1;this.theme="inherit";this.open=undefined}watchOpenHandler(){if(this.open){if(this.parentPopover!==undefined&&!this.popoverMenuEls.some((e=>e.id))){this.popoverMenuEls.unshift(this.backButton)}this.currentFocus=0;setTimeout(this.setButtonFocus,50)}else if(this.popperInstance){this.popperInstance.destroy();this.popperInstance=null}}disconnectedCallback(){if(this.popperInstance){this.popperInstance.destroy();this.popperInstance=null}}componentDidLoad(){const e=this.el.shadowRoot.querySelector("ul.button");const t=n(e);if(t!==null){this.addMenuItems(t)}if(this.submenuId===undefined&&this.el.getAttribute(this.ARIA_LABEL)===null){console.error(`No aria-label specified for popover menu component - aria-label required`)}}componentWillRender(){this.anchorEl=this.findAnchorEl(this.anchor)}componentDidRender(){if(this.open&&!this.popperInstance){this.initPopperJS()}}handleMenuItemClick(e){if(!e.detail.hasSubMenu&&e.detail.label!=="Back"){this.closeMenu()}}handleSubmenuChange(e){const t=e.target;this.open=false;const i=document.querySelector(`ic-popover-menu[submenu-id=${t.submenuTriggerFor}]`);i.parentPopover=this.el;i.anchor=this.anchor;i.ariaLabel=this.el.getAttribute(this.ARIA_LABEL);i.openFromParent();i.submenuLevel=this.submenuLevel+1;i.parentLabel=t.label}handleClick(e){if(this.open&&this.isNotPopoverMenuEl(e)){this.closeMenu()}}handleKeyDown(e){switch(e.key){case"ArrowDown":case"ArrowUp":e.preventDefault();this.currentFocus=this.getNextItemToSelect(this.currentFocus,e.key==="ArrowDown");this.setButtonFocus();break;case"Home":this.currentFocus=0;this.setButtonFocus();break;case"End":this.currentFocus=this.popoverMenuEls.length-1;this.setButtonFocus();break;case"Escape":case"Tab":e.preventDefault();if(this.open){this.closeMenu(true);this.el.blur()}break}}async openFromChild(){this.open=true;this.openingFromChild=true;setTimeout((()=>this.openingFromChild=false),1e3)}async openFromParent(){this.open=true;this.openingFromParent=true;setTimeout((()=>this.openingFromParent=false),1e3)}async closeMenu(e=false){var t;this.open=false;if(this.parentPopover){this.parentPopover.closeMenu(e)}else{if(e){(t=this.anchorEl)===null||t===void 0?void 0:t.focus()}this.icPopoverClosed.emit()}}render(){return i(o,{class:{["ic-popover-menu-open"]:this.open,[`ic-theme-${this.theme}`]:this.theme!=="inherit"}},i("div",{id:this.parentPopover===undefined?`ic-popover-submenu-${this.submenuId}`:"",class:{menu:true},tabindex:open?"0":"-1"},i("div",{class:{"opening-from-parent":this.openingFromParent,"opening-from-child":this.openingFromChild}},a(this.submenuId)&&i("div",null,i("ic-menu-item",{class:"ic-popover-submenu-back-button",ref:e=>this.backButton=e,label:"Back",onClick:this.handleBackButtonClick,id:`ic-popover-submenu-back-button-${this.submenuLevel}`},i("svg",{slot:"icon",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:"submenu-back-icon"},i("path",{d:"M20 11H7.83L13.42 5.41L12 4L4 12L12 20L13.41 18.59L7.83 13H20V11Z",fill:"currentColor"}))),i("ic-typography",{variant:"subtitle-small",class:"parent-label"},this.parentLabel)),i("ul",{class:"button","aria-label":this.getMenuAriaLabel(),role:"menu"},i("slot",null)))))}static get delegatesFocus(){return true}get el(){return s(this)}static get watchers(){return{open:["watchOpenHandler"]}}};h.style=l;export{h as ic_popover_menu};
2
- //# sourceMappingURL=p-14dfd8db.entry.js.map
1
+ import{r as e,c as t,h as i,H as o,g as s}from"./p-6b5e91e2.js";import{y as n,d as a}from"./p-b7eb8ef9.js";import{c as r}from"./p-68a5aaff.js";const l='/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible;}pre{font-family:monospace, monospace;font-size:1em;}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em;}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0;}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px;}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font-style:inherit;vertical-align:baseline}@media (prefers-reduced-motion: no-preference){:host .opening-from-parent{animation:slide-in var(--ic-transition-duration-slow) ease-in-out}:host .opening-from-child{animation:slide-out var(--ic-transition-duration-slow) ease-in-out}}:host{border-radius:var(--ic-border-radius);color:var(--ic-popover-nav-text);--ic-typography-color:var(--ic-popover-nav-text);position:relative;z-index:var(--ic-z-index-popover);box-sizing:border-box;box-shadow:var(--ic-elevation-overlay);display:none}:host(.on-dialog){inset:auto !important}:host(.on-dialog-fix-translate){transform:translate(0, var(--ic-space-xs)) !important}:host(.on-dialog-translate-y){transform:translate(0, calc(-1 * var(--translate-y))) !important}.menu{border:var(--ic-border-default);border-color:var(--ic-popover-border);border-radius:var(--ic-border-radius);background-color:var(--ic-popover-background);visibility:hidden;height:0}.button{text-decoration:none;list-style-type:none}:host(:focus-within){box-shadow:var(--ic-border-focus)}.menu:focus-visible{outline:none}:host(.ic-popover-menu-open){display:block;min-width:calc(20rem - var(--ic-space-xl));width:var(--popover-width, 20rem);max-width:calc(100vw - var(--ic-space-xl))}:host(.ic-popover-menu-open) .menu{visibility:visible;height:-moz-fit-content;height:fit-content;max-height:var(--max-height, -moz-fit-content);max-height:var(--max-height, fit-content);overflow-y:auto;overflow-x:hidden}.parent-label{--ic-typography-color:var(--ic-popover-parent-label);margin:var(--ic-space-xs) var(--ic-space-xs) 0}@keyframes slide-in{from{opacity:0;transform:translateX(10rem)}to{opacity:1;transform:translateX(0)}}@keyframes slide-out{from{opacity:0;transform:translateX(-10rem)}to{opacity:1;transform:translateX(0)}}';const h=class{constructor(i){e(this,i);this.icPopoverClosed=t(this,"icPopoverClosed",7);this.ARIA_LABEL="aria-label";this.popoverMenuEls=[];this.setButtonFocus=()=>{var e;(e=this.popoverMenuEls[this.currentFocus])===null||e===void 0?void 0:e.focus()};this.findAnchorEl=e=>{let t=null;if(!e){this.submenuId===undefined&&console.error("No anchor specified for popover component")}else{t=document.querySelector(e.indexOf("#")===0?e:"#"+e);if(t===null){console.error(`Popover anchor element '${e}' not found`)}}return t};this.isNotPopoverMenuEl=e=>{const{id:t,tagName:i}=e.target;return t!==this.anchor&&i!=="IC-MENU-ITEM"&&i!=="IC-MENU-GROUP"&&i!=="IC-POPOVER-MENU"};this.getNextItemToSelect=(e,t)=>{const i=this.popoverMenuEls.length-1;if(e<1){e=0}let o=t?e+1:e-1;if(o<0){o=i}else if(o>i){o=0}return o};this.addMenuItems=e=>{for(let t=0;t<e.length;t++){const i=e[t];if(i.tagName==="IC-MENU-ITEM"){this.popoverMenuEls.push(i)}else if(i.tagName==="IC-MENU-GROUP"){const e=i.shadowRoot.querySelector(".menu-items-wrapper");const t=n(e);this.addMenuItems(t)}}};this.getMenuAriaLabel=()=>{const e=this.el.getAttribute(this.ARIA_LABEL);if(a(this.submenuId)){return`${e}, within nested level ${this.submenuLevel} ${this.parentLabel} submenu,`}else{return e}};this.handleBackButtonClick=()=>{this.parentPopover.openFromChild();this.open=false};this.initPopperJS=()=>{this.popperInstance=r(this.anchorEl,this.el,{placement:"bottom-start",modifiers:[{name:"offset",options:{offset:[0,4]}},{name:"flip",options:{fallbackPlacements:["top-start","top-end","bottom-end"],rootBoundary:"viewport"}}]})};this.openingFromChild=false;this.openingFromParent=false;this.anchor=undefined;this.parentLabel=undefined;this.parentPopover=undefined;this.submenuId=undefined;this.submenuLevel=1;this.theme="inherit";this.open=undefined}watchOpenHandler(){if(this.open){if(this.parentPopover!==undefined&&!this.popoverMenuEls.some((e=>e.id))){this.popoverMenuEls.unshift(this.backButton)}this.currentFocus=0;setTimeout(this.setButtonFocus,50)}else if(this.popperInstance){this.popperInstance.destroy();this.popperInstance=null}}disconnectedCallback(){if(this.popperInstance){this.popperInstance.destroy();this.popperInstance=null}}componentDidLoad(){const e=this.el.shadowRoot.querySelector("ul.button");const t=n(e);if(t!==null){this.addMenuItems(t)}if(this.submenuId===undefined&&this.el.getAttribute(this.ARIA_LABEL)===null){console.error(`No aria-label specified for popover menu component - aria-label required`)}}componentWillRender(){this.anchorEl=this.findAnchorEl(this.anchor)}componentDidRender(){if(this.open&&!this.popperInstance){this.initPopperJS()}}handleMenuItemClick(e){if(!e.detail.hasSubMenu&&e.detail.label!=="Back"){this.closeMenu()}}handleSubmenuChange(e){const t=e.target;this.open=false;const i=document.querySelector(`ic-popover-menu[submenu-id=${t.submenuTriggerFor}]`);i.parentPopover=this.el;i.anchor=this.anchor;i.ariaLabel=this.el.getAttribute(this.ARIA_LABEL);i.openFromParent();i.submenuLevel=this.submenuLevel+1;i.parentLabel=t.label}handleClick(e){if(this.open&&this.isNotPopoverMenuEl(e)){this.closeMenu()}}handleKeyDown(e){switch(e.key){case"ArrowDown":case"ArrowUp":e.preventDefault();this.currentFocus=this.getNextItemToSelect(this.currentFocus,e.key==="ArrowDown");this.setButtonFocus();break;case"Home":this.currentFocus=0;this.setButtonFocus();break;case"End":this.currentFocus=this.popoverMenuEls.length-1;this.setButtonFocus();break;case"Escape":case"Tab":e.preventDefault();if(this.open){this.closeMenu(true);this.el.blur()}break}}async openFromChild(){this.open=true;this.openingFromChild=true;setTimeout((()=>this.openingFromChild=false),1e3)}async openFromParent(){this.open=true;this.openingFromParent=true;setTimeout((()=>this.openingFromParent=false),1e3)}async closeMenu(e=false){var t;this.open=false;if(this.parentPopover){this.parentPopover.closeMenu(e)}else{if(e){(t=this.anchorEl)===null||t===void 0?void 0:t.focus()}this.icPopoverClosed.emit()}}render(){return i(o,{class:{["ic-popover-menu-open"]:this.open,[`ic-theme-${this.theme}`]:this.theme!=="inherit"}},i("div",{id:this.parentPopover===undefined?`ic-popover-submenu-${this.submenuId}`:"",class:{menu:true},tabindex:open?"0":"-1"},i("span",{class:{"opening-from-parent":this.openingFromParent,"opening-from-child":this.openingFromChild}},a(this.submenuId)&&i("span",null,i("span",{role:"menu"},i("ic-menu-item",{class:"ic-popover-submenu-back-button",ref:e=>this.backButton=e,label:"Back",onClick:this.handleBackButtonClick,id:`ic-popover-submenu-back-button-${this.submenuLevel}`},i("svg",{slot:"icon",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:"submenu-back-icon"},i("path",{d:"M20 11H7.83L13.42 5.41L12 4L4 12L12 20L13.41 18.59L7.83 13H20V11Z",fill:"currentColor"})))),i("ic-typography",{variant:"subtitle-small",class:"parent-label"},this.parentLabel)),i("ul",{class:"button","aria-label":this.getMenuAriaLabel(),role:"menu"},i("slot",null)))))}static get delegatesFocus(){return true}get el(){return s(this)}static get watchers(){return{open:["watchOpenHandler"]}}};h.style=l;export{h as ic_popover_menu};
2
+ //# sourceMappingURL=p-428f95f8.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["icPopoverMenuCss","PopoverMenu","this","ARIA_LABEL","popoverMenuEls","setButtonFocus","_a","currentFocus","focus","findAnchorEl","anchor","anchorElement","submenuId","undefined","console","error","document","querySelector","indexOf","isNotPopoverMenuEl","ev","id","tagName","target","getNextItemToSelect","currentItem","movingDown","numButtons","length","nextItem","addMenuItems","elements","i","el","push","groupSlotWrapper","shadowRoot","menuGroupElements","getSlotElements","getMenuAriaLabel","ariaLabel","getAttribute","isPropDefined","submenuLevel","parentLabel","handleBackButtonClick","parentPopover","openFromChild","open","initPopperJS","popperInstance","createPopper","anchorEl","placement","modifiers","name","options","offset","fallbackPlacements","rootBoundary","watchOpenHandler","some","menuItem","unshift","backButton","setTimeout","destroy","disconnectedCallback","componentDidLoad","slotWrapper","popoverMenuElements","componentWillRender","componentDidRender","handleMenuItemClick","detail","hasSubMenu","label","closeMenu","handleSubmenuChange","childEl","submenuTriggerFor","openFromParent","handleClick","handleKeyDown","key","preventDefault","blur","openingFromChild","openingFromParent","setFocusToAnchor","icPopoverClosed","emit","render","h","Host","class","theme","menu","tabindex","ref","onClick","slot","viewBox","fill","xmlns","d","variant","role"],"sources":["src/components/ic-popover-menu/ic-popover-menu.css?tag=ic-popover-menu&encapsulation=shadow","src/components/ic-popover-menu/ic-popover-menu.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n/**\n* @prop --ic-z-index-popover: z-index of popover menu. \n* @prop --max-height: Maximum height of the popover menu.\n* @prop --popover-width: Default width of the popover menu.\n*/\n\n@media (prefers-reduced-motion: no-preference) {\n :host .opening-from-parent {\n animation: slide-in var(--ic-transition-duration-slow) ease-in-out;\n }\n\n :host .opening-from-child {\n animation: slide-out var(--ic-transition-duration-slow) ease-in-out;\n }\n}\n\n:host {\n border-radius: var(--ic-border-radius);\n color: var(--ic-popover-nav-text);\n\n --ic-typography-color: var(--ic-popover-nav-text);\n\n position: relative;\n z-index: var(--ic-z-index-popover);\n box-sizing: border-box;\n box-shadow: var(--ic-elevation-overlay);\n display: none;\n}\n\n:host(.on-dialog) {\n inset: auto !important;\n}\n\n:host(.on-dialog-fix-translate) {\n transform: translate(0, var(--ic-space-xs)) !important;\n}\n\n:host(.on-dialog-translate-y) {\n transform: translate(0, calc(-1 * var(--translate-y))) !important;\n}\n\n.menu {\n border: var(--ic-border-default);\n border-color: var(--ic-popover-border);\n border-radius: var(--ic-border-radius);\n background-color: var(--ic-popover-background);\n visibility: hidden;\n height: 0;\n}\n\n.button {\n text-decoration: none;\n list-style-type: none;\n}\n\n:host(:focus-within) {\n box-shadow: var(--ic-border-focus);\n}\n\n.menu:focus-visible {\n outline: none;\n}\n\n:host(.ic-popover-menu-open) {\n display: block;\n min-width: calc(20rem - var(--ic-space-xl));\n width: var(--popover-width, 20rem);\n max-width: calc(100vw - var(--ic-space-xl));\n}\n\n:host(.ic-popover-menu-open) .menu {\n visibility: visible;\n height: fit-content;\n max-height: var(--max-height, fit-content);\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.parent-label {\n --ic-typography-color: var(--ic-popover-parent-label);\n\n margin: var(--ic-space-xs) var(--ic-space-xs) 0;\n}\n\n@keyframes slide-in {\n from {\n opacity: 0;\n transform: translateX(10rem);\n }\n\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n@keyframes slide-out {\n from {\n opacity: 0;\n transform: translateX(-10rem);\n }\n\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n","import {\n Component,\n Element,\n Host,\n h,\n Prop,\n Listen,\n Watch,\n State,\n Method,\n Event,\n EventEmitter,\n} from \"@stencil/core\";\nimport { getSlotElements, isPropDefined } from \"../../utils/helpers\";\nimport { createPopper, Instance as PopperInstance } from \"@popperjs/core\";\nimport { IcThemeMode } from \"../../utils/types\";\n\n@Component({\n tag: \"ic-popover-menu\",\n styleUrl: \"ic-popover-menu.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class PopoverMenu {\n private anchorEl: HTMLElement;\n private ARIA_LABEL: string = \"aria-label\";\n private backButton: HTMLIcMenuItemElement;\n private currentFocus: number;\n private popoverMenuEls: HTMLIcMenuItemElement[] = [];\n private popperInstance: PopperInstance;\n\n @Element() el: HTMLIcPopoverMenuElement;\n\n @State() openingFromChild: boolean = false;\n @State() openingFromParent: boolean = false;\n\n /**\n * The ID of the element the popover menu will anchor itself to. This is required unless the popover is a submenu.\n */\n @Prop() anchor: string;\n\n /**\n * @internal The parent popover menu of a child popover menu.\n */\n @Prop() parentLabel?: string;\n\n /**\n * @internal The parent popover menu of a child popover menu.\n */\n @Prop() parentPopover?: HTMLIcPopoverMenuElement;\n\n /**\n * The unique identifier for a popover submenu.\n */\n @Prop() submenuId?: string;\n\n /**\n * @internal The level of menu being displayed.\n */\n @Prop() submenuLevel: number = 1;\n\n /**\n * Sets the theme color to the dark or light theme color. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme?: IcThemeMode = \"inherit\";\n\n /**\n * If `true`, the popover menu will be displayed.\n */\n @Prop({ reflect: true, mutable: true }) open: boolean = undefined;\n\n @Watch(\"open\")\n watchOpenHandler(): void {\n if (this.open) {\n if (\n this.parentPopover !== undefined &&\n !this.popoverMenuEls.some((menuItem) => menuItem.id)\n ) {\n this.popoverMenuEls.unshift(this.backButton);\n }\n\n this.currentFocus = 0;\n // Needed so that anchorEl isn't always focused\n setTimeout(this.setButtonFocus, 50);\n } else if (this.popperInstance) {\n this.popperInstance.destroy();\n this.popperInstance = null;\n }\n }\n\n /**\n * Emitted when the popover menu is closed.\n */\n @Event() icPopoverClosed: EventEmitter<void>;\n\n disconnectedCallback(): void {\n if (this.popperInstance) {\n this.popperInstance.destroy();\n this.popperInstance = null;\n }\n }\n\n componentDidLoad(): void {\n const slotWrapper = this.el.shadowRoot.querySelector(\"ul.button\");\n const popoverMenuElements = getSlotElements(slotWrapper);\n\n if (popoverMenuElements !== null) {\n this.addMenuItems(popoverMenuElements);\n }\n\n if (\n this.submenuId === undefined &&\n this.el.getAttribute(this.ARIA_LABEL) === null\n ) {\n console.error(\n `No aria-label specified for popover menu component - aria-label required`\n );\n }\n }\n\n componentWillRender(): void {\n this.anchorEl = this.findAnchorEl(this.anchor);\n }\n\n componentDidRender(): void {\n if (this.open && !this.popperInstance) {\n this.initPopperJS();\n }\n }\n\n @Listen(\"handleMenuItemClick\")\n handleMenuItemClick(\n ev: CustomEvent<{\n label: string;\n hasSubMenu: boolean;\n }>\n ): void {\n if (!ev.detail.hasSubMenu && ev.detail.label !== \"Back\") {\n this.closeMenu();\n }\n }\n\n // This is listening for the event emitted when a menu item is acting as a trigger button\n @Listen(\"triggerPopoverMenuInstance\", { capture: true })\n handleSubmenuChange(ev: Event): void {\n // Finds the trigger menu item that has emitted the event\n const target = ev.target as HTMLIcMenuItemElement;\n this.open = false;\n\n // Find the popover menu that the menu item triggers (i.e. submenu-trigger-for === submenu-id).\n const childEl = document.querySelector(\n `ic-popover-menu[submenu-id=${target.submenuTriggerFor}]`\n ) as HTMLIcPopoverMenuElement;\n // Set the parent popover menu of the submenu and open the submenu\n childEl.parentPopover = this.el;\n childEl.anchor = this.anchor;\n childEl.ariaLabel = this.el.getAttribute(this.ARIA_LABEL);\n childEl.openFromParent();\n childEl.submenuLevel = this.submenuLevel + 1;\n // Set the label in the submenu using the label of the menu item that has emitted the event\n childEl.parentLabel = target.label;\n }\n\n @Listen(\"click\", { target: \"document\" })\n handleClick(ev: Event): void {\n if (this.open && this.isNotPopoverMenuEl(ev)) {\n // If menu is open and the next click on the document is not a popover El, close the popover\n this.closeMenu();\n }\n }\n\n // Manages the keyboard navigation in the popover menu\n @Listen(\"keydown\", {})\n handleKeyDown(ev: KeyboardEvent): void {\n switch (ev.key) {\n case \"ArrowDown\":\n case \"ArrowUp\":\n ev.preventDefault();\n this.currentFocus = this.getNextItemToSelect(\n this.currentFocus,\n ev.key === \"ArrowDown\"\n );\n this.setButtonFocus();\n break;\n case \"Home\":\n //Sets home focus as first element, or back button\n this.currentFocus = 0;\n this.setButtonFocus();\n break;\n case \"End\":\n //Sets end focus as last element\n this.currentFocus = this.popoverMenuEls.length - 1;\n this.setButtonFocus();\n break;\n case \"Escape\":\n case \"Tab\":\n ev.preventDefault();\n if (this.open) {\n this.closeMenu(true);\n this.el.blur();\n }\n break;\n }\n }\n\n /**\n * @internal Opens the menu from the child menu.\n */\n @Method()\n async openFromChild(): Promise<void> {\n this.open = true;\n this.openingFromChild = true;\n\n setTimeout(() => (this.openingFromChild = false), 1000);\n }\n\n /**\n * @internal Opens the menu from the parent menu.\n */\n @Method()\n async openFromParent(): Promise<void> {\n this.open = true;\n this.openingFromParent = true;\n\n setTimeout(() => (this.openingFromParent = false), 1000);\n }\n\n private setButtonFocus = () => {\n this.popoverMenuEls[this.currentFocus]?.focus();\n };\n\n // Checks that the popover menu has an anchor\n private findAnchorEl = (anchor: string): HTMLElement => {\n let anchorElement: HTMLElement = null;\n if (!anchor) {\n this.submenuId === undefined &&\n console.error(\"No anchor specified for popover component\");\n } else {\n anchorElement = document.querySelector(\n anchor.indexOf(\"#\") === 0 ? anchor : \"#\" + anchor\n );\n if (anchorElement === null) {\n console.error(`Popover anchor element '${anchor}' not found`);\n }\n }\n return anchorElement;\n };\n\n private isNotPopoverMenuEl = (ev: Event) => {\n const { id, tagName } = ev.target as HTMLElement;\n return (\n id !== this.anchor &&\n tagName !== \"IC-MENU-ITEM\" &&\n tagName !== \"IC-MENU-GROUP\" &&\n tagName !== \"IC-POPOVER-MENU\"\n );\n };\n\n /**\n * @internal Close the menu, emit icPopoverClosed of the root popover\n * @param setFocusToAnchor when true return focus to anchor element when menu is closed\n */\n @Method()\n async closeMenu(setFocusToAnchor = false): Promise<void> {\n this.open = false;\n if (this.parentPopover) {\n this.parentPopover.closeMenu(setFocusToAnchor);\n } else {\n if (setFocusToAnchor) {\n this.anchorEl?.focus();\n }\n this.icPopoverClosed.emit();\n }\n }\n\n private getNextItemToSelect = (\n currentItem: number,\n movingDown: boolean\n ): number => {\n const numButtons = this.popoverMenuEls.length - 1;\n\n if (currentItem < 1) {\n currentItem = 0;\n }\n\n let nextItem = movingDown ? currentItem + 1 : currentItem - 1;\n\n // Check if wrap around necessary\n if (nextItem < 0) {\n nextItem = numButtons;\n } else if (nextItem > numButtons) {\n nextItem = 0;\n }\n\n return nextItem;\n };\n\n private addMenuItems = (elements: Element[] | NodeListOf<ChildNode>) => {\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i] as HTMLIcMenuItemElement;\n if (el.tagName === \"IC-MENU-ITEM\") {\n this.popoverMenuEls.push(el);\n } else if (el.tagName === \"IC-MENU-GROUP\") {\n const groupSlotWrapper = el.shadowRoot.querySelector(\"ul\");\n const menuGroupElements = getSlotElements(groupSlotWrapper);\n\n this.addMenuItems(menuGroupElements);\n }\n }\n };\n\n private getMenuAriaLabel = (): string => {\n const ariaLabel = this.el.getAttribute(this.ARIA_LABEL);\n\n if (isPropDefined(this.submenuId)) {\n return `${ariaLabel}, within nested level ${this.submenuLevel} ${this.parentLabel} submenu,`;\n } else {\n return ariaLabel;\n }\n };\n\n private handleBackButtonClick = (): void => {\n this.parentPopover.openFromChild();\n this.open = false;\n };\n\n private initPopperJS = () => {\n this.popperInstance = createPopper(this.anchorEl, this.el, {\n placement: \"bottom-start\",\n modifiers: [\n {\n name: \"offset\",\n options: {\n offset: [0, 4],\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top-start\", \"top-end\", \"bottom-end\"],\n rootBoundary: \"viewport\",\n },\n },\n ],\n });\n };\n\n render() {\n return (\n <Host\n class={{\n [\"ic-popover-menu-open\"]: this.open,\n [`ic-theme-${this.theme}`]: this.theme !== \"inherit\",\n }}\n >\n <div\n id={\n this.parentPopover === undefined\n ? `ic-popover-submenu-${this.submenuId}`\n : \"\"\n }\n class={{\n menu: true,\n }}\n tabindex={open ? \"0\" : \"-1\"}\n >\n <div\n class={{\n \"opening-from-parent\": this.openingFromParent,\n \"opening-from-child\": this.openingFromChild,\n }}\n >\n {isPropDefined(this.submenuId) && (\n <div>\n <ic-menu-item\n class=\"ic-popover-submenu-back-button\"\n ref={(el) => (this.backButton = el)}\n label=\"Back\"\n onClick={this.handleBackButtonClick}\n id={`ic-popover-submenu-back-button-${this.submenuLevel}`}\n >\n <svg\n slot=\"icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"submenu-back-icon\"\n >\n <path\n d=\"M20 11H7.83L13.42 5.41L12 4L4 12L12 20L13.41 18.59L7.83 13H20V11Z\"\n fill=\"currentColor\"\n />\n </svg>\n </ic-menu-item>\n <ic-typography variant=\"subtitle-small\" class=\"parent-label\">\n {this.parentLabel}\n </ic-typography>\n </div>\n )}\n <ul class=\"button\" aria-label={this.getMenuAriaLabel()} role=\"menu\">\n <slot></slot>\n </ul>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["icPopoverMenuCss","PopoverMenu","this","ARIA_LABEL","popoverMenuEls","setButtonFocus","_a","currentFocus","focus","findAnchorEl","anchor","anchorElement","submenuId","undefined","console","error","document","querySelector","indexOf","isNotPopoverMenuEl","ev","id","tagName","target","getNextItemToSelect","currentItem","movingDown","numButtons","length","nextItem","addMenuItems","elements","i","el","push","groupSlotWrapper","shadowRoot","menuGroupElements","getSlotElements","getMenuAriaLabel","ariaLabel","getAttribute","isPropDefined","submenuLevel","parentLabel","handleBackButtonClick","parentPopover","openFromChild","open","initPopperJS","popperInstance","createPopper","anchorEl","placement","modifiers","name","options","offset","fallbackPlacements","rootBoundary","watchOpenHandler","some","menuItem","unshift","backButton","setTimeout","destroy","disconnectedCallback","componentDidLoad","slotWrapper","popoverMenuElements","componentWillRender","componentDidRender","handleMenuItemClick","detail","hasSubMenu","label","closeMenu","handleSubmenuChange","childEl","submenuTriggerFor","openFromParent","handleClick","handleKeyDown","key","preventDefault","blur","openingFromChild","openingFromParent","setFocusToAnchor","icPopoverClosed","emit","render","h","Host","class","theme","menu","tabindex","role","ref","onClick","slot","viewBox","fill","xmlns","d","variant"],"sources":["src/components/ic-popover-menu/ic-popover-menu.css?tag=ic-popover-menu&encapsulation=shadow","src/components/ic-popover-menu/ic-popover-menu.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n/**\n* @prop --ic-z-index-popover: z-index of popover menu. \n* @prop --max-height: Maximum height of the popover menu.\n* @prop --popover-width: Default width of the popover menu.\n*/\n\n@media (prefers-reduced-motion: no-preference) {\n :host .opening-from-parent {\n animation: slide-in var(--ic-transition-duration-slow) ease-in-out;\n }\n\n :host .opening-from-child {\n animation: slide-out var(--ic-transition-duration-slow) ease-in-out;\n }\n}\n\n:host {\n border-radius: var(--ic-border-radius);\n color: var(--ic-popover-nav-text);\n\n --ic-typography-color: var(--ic-popover-nav-text);\n\n position: relative;\n z-index: var(--ic-z-index-popover);\n box-sizing: border-box;\n box-shadow: var(--ic-elevation-overlay);\n display: none;\n}\n\n:host(.on-dialog) {\n inset: auto !important;\n}\n\n:host(.on-dialog-fix-translate) {\n transform: translate(0, var(--ic-space-xs)) !important;\n}\n\n:host(.on-dialog-translate-y) {\n transform: translate(0, calc(-1 * var(--translate-y))) !important;\n}\n\n.menu {\n border: var(--ic-border-default);\n border-color: var(--ic-popover-border);\n border-radius: var(--ic-border-radius);\n background-color: var(--ic-popover-background);\n visibility: hidden;\n height: 0;\n}\n\n.button {\n text-decoration: none;\n list-style-type: none;\n}\n\n:host(:focus-within) {\n box-shadow: var(--ic-border-focus);\n}\n\n.menu:focus-visible {\n outline: none;\n}\n\n:host(.ic-popover-menu-open) {\n display: block;\n min-width: calc(20rem - var(--ic-space-xl));\n width: var(--popover-width, 20rem);\n max-width: calc(100vw - var(--ic-space-xl));\n}\n\n:host(.ic-popover-menu-open) .menu {\n visibility: visible;\n height: fit-content;\n max-height: var(--max-height, fit-content);\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.parent-label {\n --ic-typography-color: var(--ic-popover-parent-label);\n\n margin: var(--ic-space-xs) var(--ic-space-xs) 0;\n}\n\n@keyframes slide-in {\n from {\n opacity: 0;\n transform: translateX(10rem);\n }\n\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n@keyframes slide-out {\n from {\n opacity: 0;\n transform: translateX(-10rem);\n }\n\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n","import {\n Component,\n Element,\n Host,\n h,\n Prop,\n Listen,\n Watch,\n State,\n Method,\n Event,\n EventEmitter,\n} from \"@stencil/core\";\nimport { getSlotElements, isPropDefined } from \"../../utils/helpers\";\nimport { createPopper, Instance as PopperInstance } from \"@popperjs/core\";\nimport { IcThemeMode } from \"../../utils/types\";\n\n@Component({\n tag: \"ic-popover-menu\",\n styleUrl: \"ic-popover-menu.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class PopoverMenu {\n private anchorEl: HTMLElement;\n private ARIA_LABEL: string = \"aria-label\";\n private backButton: HTMLIcMenuItemElement;\n private currentFocus: number;\n private popoverMenuEls: HTMLIcMenuItemElement[] = [];\n private popperInstance: PopperInstance;\n\n @Element() el: HTMLIcPopoverMenuElement;\n\n @State() openingFromChild: boolean = false;\n @State() openingFromParent: boolean = false;\n\n /**\n * The ID of the element the popover menu will anchor itself to. This is required unless the popover is a submenu.\n */\n @Prop() anchor: string;\n\n /**\n * @internal The parent popover menu of a child popover menu.\n */\n @Prop() parentLabel?: string;\n\n /**\n * @internal The parent popover menu of a child popover menu.\n */\n @Prop() parentPopover?: HTMLIcPopoverMenuElement;\n\n /**\n * The unique identifier for a popover submenu.\n */\n @Prop() submenuId?: string;\n\n /**\n * @internal The level of menu being displayed.\n */\n @Prop() submenuLevel: number = 1;\n\n /**\n * Sets the theme color to the dark or light theme color. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme?: IcThemeMode = \"inherit\";\n\n /**\n * If `true`, the popover menu will be displayed.\n */\n @Prop({ reflect: true, mutable: true }) open: boolean = undefined;\n\n @Watch(\"open\")\n watchOpenHandler(): void {\n if (this.open) {\n if (\n this.parentPopover !== undefined &&\n !this.popoverMenuEls.some((menuItem) => menuItem.id)\n ) {\n this.popoverMenuEls.unshift(this.backButton);\n }\n\n this.currentFocus = 0;\n // Needed so that anchorEl isn't always focused\n setTimeout(this.setButtonFocus, 50);\n } else if (this.popperInstance) {\n this.popperInstance.destroy();\n this.popperInstance = null;\n }\n }\n\n /**\n * Emitted when the popover menu is closed.\n */\n @Event() icPopoverClosed: EventEmitter<void>;\n\n disconnectedCallback(): void {\n if (this.popperInstance) {\n this.popperInstance.destroy();\n this.popperInstance = null;\n }\n }\n\n componentDidLoad(): void {\n const slotWrapper = this.el.shadowRoot.querySelector(\"ul.button\");\n const popoverMenuElements = getSlotElements(slotWrapper);\n\n if (popoverMenuElements !== null) {\n this.addMenuItems(popoverMenuElements);\n }\n\n if (\n this.submenuId === undefined &&\n this.el.getAttribute(this.ARIA_LABEL) === null\n ) {\n console.error(\n `No aria-label specified for popover menu component - aria-label required`\n );\n }\n }\n\n componentWillRender(): void {\n this.anchorEl = this.findAnchorEl(this.anchor);\n }\n\n componentDidRender(): void {\n if (this.open && !this.popperInstance) {\n this.initPopperJS();\n }\n }\n\n @Listen(\"handleMenuItemClick\")\n handleMenuItemClick(\n ev: CustomEvent<{\n label: string;\n hasSubMenu: boolean;\n }>\n ): void {\n if (!ev.detail.hasSubMenu && ev.detail.label !== \"Back\") {\n this.closeMenu();\n }\n }\n\n // This is listening for the event emitted when a menu item is acting as a trigger button\n @Listen(\"triggerPopoverMenuInstance\", { capture: true })\n handleSubmenuChange(ev: Event): void {\n // Finds the trigger menu item that has emitted the event\n const target = ev.target as HTMLIcMenuItemElement;\n this.open = false;\n\n // Find the popover menu that the menu item triggers (i.e. submenu-trigger-for === submenu-id).\n const childEl = document.querySelector(\n `ic-popover-menu[submenu-id=${target.submenuTriggerFor}]`\n ) as HTMLIcPopoverMenuElement;\n // Set the parent popover menu of the submenu and open the submenu\n childEl.parentPopover = this.el;\n childEl.anchor = this.anchor;\n childEl.ariaLabel = this.el.getAttribute(this.ARIA_LABEL);\n childEl.openFromParent();\n childEl.submenuLevel = this.submenuLevel + 1;\n // Set the label in the submenu using the label of the menu item that has emitted the event\n childEl.parentLabel = target.label;\n }\n\n @Listen(\"click\", { target: \"document\" })\n handleClick(ev: Event): void {\n if (this.open && this.isNotPopoverMenuEl(ev)) {\n // If menu is open and the next click on the document is not a popover El, close the popover\n this.closeMenu();\n }\n }\n\n // Manages the keyboard navigation in the popover menu\n @Listen(\"keydown\", {})\n handleKeyDown(ev: KeyboardEvent): void {\n switch (ev.key) {\n case \"ArrowDown\":\n case \"ArrowUp\":\n ev.preventDefault();\n this.currentFocus = this.getNextItemToSelect(\n this.currentFocus,\n ev.key === \"ArrowDown\"\n );\n this.setButtonFocus();\n break;\n case \"Home\":\n //Sets home focus as first element, or back button\n this.currentFocus = 0;\n this.setButtonFocus();\n break;\n case \"End\":\n //Sets end focus as last element\n this.currentFocus = this.popoverMenuEls.length - 1;\n this.setButtonFocus();\n break;\n case \"Escape\":\n case \"Tab\":\n ev.preventDefault();\n if (this.open) {\n this.closeMenu(true);\n this.el.blur();\n }\n break;\n }\n }\n\n /**\n * @internal Opens the menu from the child menu.\n */\n @Method()\n async openFromChild(): Promise<void> {\n this.open = true;\n this.openingFromChild = true;\n\n setTimeout(() => (this.openingFromChild = false), 1000);\n }\n\n /**\n * @internal Opens the menu from the parent menu.\n */\n @Method()\n async openFromParent(): Promise<void> {\n this.open = true;\n this.openingFromParent = true;\n\n setTimeout(() => (this.openingFromParent = false), 1000);\n }\n\n private setButtonFocus = () => {\n this.popoverMenuEls[this.currentFocus]?.focus();\n };\n\n // Checks that the popover menu has an anchor\n private findAnchorEl = (anchor: string): HTMLElement => {\n let anchorElement: HTMLElement = null;\n if (!anchor) {\n this.submenuId === undefined &&\n console.error(\"No anchor specified for popover component\");\n } else {\n anchorElement = document.querySelector(\n anchor.indexOf(\"#\") === 0 ? anchor : \"#\" + anchor\n );\n if (anchorElement === null) {\n console.error(`Popover anchor element '${anchor}' not found`);\n }\n }\n return anchorElement;\n };\n\n private isNotPopoverMenuEl = (ev: Event) => {\n const { id, tagName } = ev.target as HTMLElement;\n return (\n id !== this.anchor &&\n tagName !== \"IC-MENU-ITEM\" &&\n tagName !== \"IC-MENU-GROUP\" &&\n tagName !== \"IC-POPOVER-MENU\"\n );\n };\n\n /**\n * @internal Close the menu, emit icPopoverClosed of the root popover\n * @param setFocusToAnchor when true return focus to anchor element when menu is closed\n */\n @Method()\n async closeMenu(setFocusToAnchor = false): Promise<void> {\n this.open = false;\n if (this.parentPopover) {\n this.parentPopover.closeMenu(setFocusToAnchor);\n } else {\n if (setFocusToAnchor) {\n this.anchorEl?.focus();\n }\n this.icPopoverClosed.emit();\n }\n }\n\n private getNextItemToSelect = (\n currentItem: number,\n movingDown: boolean\n ): number => {\n const numButtons = this.popoverMenuEls.length - 1;\n\n if (currentItem < 1) {\n currentItem = 0;\n }\n\n let nextItem = movingDown ? currentItem + 1 : currentItem - 1;\n\n // Check if wrap around necessary\n if (nextItem < 0) {\n nextItem = numButtons;\n } else if (nextItem > numButtons) {\n nextItem = 0;\n }\n\n return nextItem;\n };\n\n private addMenuItems = (elements: Element[] | NodeListOf<ChildNode>) => {\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i] as HTMLIcMenuItemElement;\n if (el.tagName === \"IC-MENU-ITEM\") {\n this.popoverMenuEls.push(el);\n } else if (el.tagName === \"IC-MENU-GROUP\") {\n const groupSlotWrapper = el.shadowRoot.querySelector(\n \".menu-items-wrapper\"\n );\n const menuGroupElements = getSlotElements(groupSlotWrapper);\n\n this.addMenuItems(menuGroupElements);\n }\n }\n };\n\n private getMenuAriaLabel = (): string => {\n const ariaLabel = this.el.getAttribute(this.ARIA_LABEL);\n\n if (isPropDefined(this.submenuId)) {\n return `${ariaLabel}, within nested level ${this.submenuLevel} ${this.parentLabel} submenu,`;\n } else {\n return ariaLabel;\n }\n };\n\n private handleBackButtonClick = (): void => {\n this.parentPopover.openFromChild();\n this.open = false;\n };\n\n private initPopperJS = () => {\n this.popperInstance = createPopper(this.anchorEl, this.el, {\n placement: \"bottom-start\",\n modifiers: [\n {\n name: \"offset\",\n options: {\n offset: [0, 4],\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top-start\", \"top-end\", \"bottom-end\"],\n rootBoundary: \"viewport\",\n },\n },\n ],\n });\n };\n\n render() {\n return (\n <Host\n class={{\n [\"ic-popover-menu-open\"]: this.open,\n [`ic-theme-${this.theme}`]: this.theme !== \"inherit\",\n }}\n >\n <div\n id={\n this.parentPopover === undefined\n ? `ic-popover-submenu-${this.submenuId}`\n : \"\"\n }\n class={{\n menu: true,\n }}\n tabindex={open ? \"0\" : \"-1\"}\n >\n <span\n class={{\n \"opening-from-parent\": this.openingFromParent,\n \"opening-from-child\": this.openingFromChild,\n }}\n >\n {isPropDefined(this.submenuId) && (\n <span>\n <span role=\"menu\">\n <ic-menu-item\n class=\"ic-popover-submenu-back-button\"\n ref={(el) => (this.backButton = el)}\n label=\"Back\"\n onClick={this.handleBackButtonClick}\n id={`ic-popover-submenu-back-button-${this.submenuLevel}`}\n >\n <svg\n slot=\"icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"submenu-back-icon\"\n >\n <path\n d=\"M20 11H7.83L13.42 5.41L12 4L4 12L12 20L13.41 18.59L7.83 13H20V11Z\"\n fill=\"currentColor\"\n />\n </svg>\n </ic-menu-item>\n </span>\n <ic-typography variant=\"subtitle-small\" class=\"parent-label\">\n {this.parentLabel}\n </ic-typography>\n </span>\n )}\n <ul class=\"button\" aria-label={this.getMenuAriaLabel()} role=\"menu\">\n <slot></slot>\n </ul>\n </span>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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"}