@ukic/web-components 3.27.0 → 3.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/components/close-icon.js +1 -2
  2. package/components/close-icon.js.map +1 -1
  3. package/components/ic-breadcrumb-group.js +16 -12
  4. package/components/ic-breadcrumb-group.js.map +1 -1
  5. package/components/ic-data-list.js +1 -1
  6. package/components/ic-data-list.js.map +1 -1
  7. package/components/ic-data-row.js +1 -1
  8. package/components/ic-data-row.js.map +1 -1
  9. package/components/ic-menu-item2.js +7 -2
  10. package/components/ic-menu-item2.js.map +1 -1
  11. package/components/ic-menu2.js +1153 -306
  12. package/components/ic-menu2.js.map +1 -1
  13. package/components/ic-pagination-bar.js.map +1 -1
  14. package/components/ic-pagination-item2.js +1 -1
  15. package/components/ic-pagination-item2.js.map +1 -1
  16. package/components/ic-pagination2.js +12 -8
  17. package/components/ic-pagination2.js.map +1 -1
  18. package/components/ic-popover-menu.js +46 -12
  19. package/components/ic-popover-menu.js.map +1 -1
  20. package/components/ic-radio-group.js.map +1 -1
  21. package/components/ic-search-bar.js +2 -6
  22. package/components/ic-search-bar.js.map +1 -1
  23. package/components/ic-section-container2.js +2 -2
  24. package/components/ic-skeleton.js +2 -2
  25. package/components/ic-skip-link.js +2 -2
  26. package/components/ic-status-tag.js +2 -2
  27. package/components/ic-step.js +13 -13
  28. package/components/ic-stepper.js +2 -2
  29. package/components/ic-switch.js +4 -4
  30. package/components/ic-switch.js.map +1 -1
  31. package/components/ic-tab-context.js +1 -1
  32. package/components/ic-tab-group.js +2 -2
  33. package/components/ic-tab-panel.js +2 -2
  34. package/components/ic-theme.js +1 -1
  35. package/components/ic-toast-region.js +1 -1
  36. package/components/ic-toast.js +5 -5
  37. package/components/ic-toggle-button-group.js +2 -2
  38. package/components/ic-toggle-button.js +2 -2
  39. package/dist/cjs/{close-icon-7f6ef8e4.js → close-icon-30d8bb41.js} +2 -3
  40. package/dist/cjs/close-icon-30d8bb41.js.map +1 -0
  41. package/dist/cjs/core.cjs.js +1 -1
  42. package/dist/cjs/ic-alert.cjs.entry.js +1 -1
  43. package/dist/cjs/ic-breadcrumb-group.cjs.entry.js +16 -12
  44. package/dist/cjs/ic-breadcrumb-group.cjs.entry.js.map +1 -1
  45. package/dist/cjs/ic-data-list.cjs.entry.js +1 -1
  46. package/dist/cjs/ic-data-list.cjs.entry.js.map +1 -1
  47. package/dist/cjs/ic-data-row.cjs.entry.js +1 -1
  48. package/dist/cjs/ic-data-row.cjs.entry.js.map +1 -1
  49. package/dist/cjs/ic-dialog.cjs.entry.js +1 -1
  50. package/dist/cjs/ic-input-component-container_3.cjs.entry.js +1153 -306
  51. package/dist/cjs/ic-input-component-container_3.cjs.entry.js.map +1 -1
  52. package/dist/cjs/ic-menu-item.cjs.entry.js +5 -1
  53. package/dist/cjs/ic-menu-item.cjs.entry.js.map +1 -1
  54. package/dist/cjs/ic-pagination-item.cjs.entry.js +1 -1
  55. package/dist/cjs/ic-pagination-item.cjs.entry.js.map +1 -1
  56. package/dist/cjs/ic-pagination_3.cjs.entry.js +12 -8
  57. package/dist/cjs/ic-pagination_3.cjs.entry.js.map +1 -1
  58. package/dist/cjs/ic-popover-menu.cjs.entry.js +44 -11
  59. package/dist/cjs/ic-popover-menu.cjs.entry.js.map +1 -1
  60. package/dist/cjs/ic-search-bar.cjs.entry.js +2 -6
  61. package/dist/cjs/ic-search-bar.cjs.entry.js.map +1 -1
  62. package/dist/cjs/ic-section-container.cjs.entry.js +2 -2
  63. package/dist/cjs/ic-side-navigation.cjs.entry.js +1 -1
  64. package/dist/cjs/ic-skeleton.cjs.entry.js +2 -2
  65. package/dist/cjs/ic-skip-link.cjs.entry.js +2 -2
  66. package/dist/cjs/ic-status-tag.cjs.entry.js +2 -2
  67. package/dist/cjs/ic-step.cjs.entry.js +13 -13
  68. package/dist/cjs/ic-stepper.cjs.entry.js +2 -2
  69. package/dist/cjs/ic-switch.cjs.entry.js +4 -4
  70. package/dist/cjs/ic-tab-context.cjs.entry.js +1 -1
  71. package/dist/cjs/ic-tab-group.cjs.entry.js +2 -2
  72. package/dist/cjs/ic-tab-panel.cjs.entry.js +2 -2
  73. package/dist/cjs/ic-theme.cjs.entry.js +1 -1
  74. package/dist/cjs/ic-toast-region.cjs.entry.js +1 -1
  75. package/dist/cjs/ic-toast.cjs.entry.js +6 -6
  76. package/dist/cjs/ic-toggle-button-group.cjs.entry.js +2 -2
  77. package/dist/cjs/ic-toggle-button.cjs.entry.js +2 -2
  78. package/dist/cjs/loader.cjs.js +1 -1
  79. package/dist/collection/assets/close-icon.svg +1 -2
  80. package/dist/collection/components/ic-breadcrumb-group/ic-breadcrumb-group.js +17 -13
  81. package/dist/collection/components/ic-breadcrumb-group/ic-breadcrumb-group.js.map +1 -1
  82. package/dist/collection/components/ic-data-list/ic-data-list.css +4 -0
  83. package/dist/collection/components/ic-data-row/ic-data-row.css +1 -1
  84. package/dist/collection/components/ic-menu-item/ic-menu-item.css +9 -14
  85. package/dist/collection/components/ic-menu-item/ic-menu-item.js +24 -0
  86. package/dist/collection/components/ic-menu-item/ic-menu-item.js.map +1 -1
  87. package/dist/collection/components/ic-pagination/ic-pagination.js +12 -8
  88. package/dist/collection/components/ic-pagination/ic-pagination.js.map +1 -1
  89. package/dist/collection/components/ic-pagination-item/ic-pagination-item.css +2 -1
  90. package/dist/collection/components/ic-popover-menu/ic-popover-menu.css +4 -4
  91. package/dist/collection/components/ic-popover-menu/ic-popover-menu.js +67 -11
  92. package/dist/collection/components/ic-popover-menu/ic-popover-menu.js.map +1 -1
  93. package/dist/collection/components/ic-popover-menu/ic-popover-menu.stories.js +241 -1
  94. package/dist/collection/components/ic-search-bar/ic-search-bar.js +1 -1
  95. package/dist/collection/components/ic-search-bar/ic-search-bar.js.map +1 -1
  96. package/dist/collection/components/ic-section-container/ic-section-container.js +2 -2
  97. package/dist/collection/components/ic-skeleton/ic-skeleton.js +2 -2
  98. package/dist/collection/components/ic-skip-link/ic-skip-link.js +2 -2
  99. package/dist/collection/components/ic-status-tag/ic-status-tag.js +2 -2
  100. package/dist/collection/components/ic-step/ic-step.js +13 -13
  101. package/dist/collection/components/ic-stepper/ic-stepper.js +2 -2
  102. package/dist/collection/components/ic-switch/ic-switch.js +4 -4
  103. package/dist/collection/components/ic-tab-context/ic-tab-context.js +1 -1
  104. package/dist/collection/components/ic-tab-group/ic-tab-group.js +2 -2
  105. package/dist/collection/components/ic-tab-panel/ic-tab-panel.js +2 -2
  106. package/dist/collection/components/ic-theme/ic-theme.js +1 -1
  107. package/dist/collection/components/ic-toast/ic-toast.js +5 -5
  108. package/dist/collection/components/ic-toast-region/ic-toast-region.js +1 -1
  109. package/dist/collection/components/ic-toggle-button/ic-toggle-button.js +2 -2
  110. package/dist/collection/components/ic-toggle-button-group/ic-toggle-button-group.js +2 -2
  111. package/dist/components/close-icon.js +1 -2
  112. package/dist/components/close-icon.js.map +1 -1
  113. package/dist/components/ic-breadcrumb-group.js +16 -12
  114. package/dist/components/ic-breadcrumb-group.js.map +1 -1
  115. package/dist/components/ic-data-list.js +1 -1
  116. package/dist/components/ic-data-list.js.map +1 -1
  117. package/dist/components/ic-data-row.js +1 -1
  118. package/dist/components/ic-data-row.js.map +1 -1
  119. package/dist/components/ic-hero.js.map +1 -1
  120. package/dist/components/ic-menu-item2.js +7 -2
  121. package/dist/components/ic-menu-item2.js.map +1 -1
  122. package/dist/components/ic-menu2.js +1153 -306
  123. package/dist/components/ic-menu2.js.map +1 -1
  124. package/dist/components/ic-pagination-bar.js.map +1 -1
  125. package/dist/components/ic-pagination-item2.js +1 -1
  126. package/dist/components/ic-pagination-item2.js.map +1 -1
  127. package/dist/components/ic-pagination2.js +12 -8
  128. package/dist/components/ic-pagination2.js.map +1 -1
  129. package/dist/components/ic-popover-menu.js +46 -12
  130. package/dist/components/ic-popover-menu.js.map +1 -1
  131. package/dist/components/ic-radio-group.js.map +1 -1
  132. package/dist/components/ic-search-bar.js +2 -6
  133. package/dist/components/ic-search-bar.js.map +1 -1
  134. package/dist/components/ic-section-container2.js +2 -2
  135. package/dist/components/ic-skeleton.js +2 -2
  136. package/dist/components/ic-skeleton.js.map +1 -1
  137. package/dist/components/ic-skip-link.js +2 -2
  138. package/dist/components/ic-status-tag.js +2 -2
  139. package/dist/components/ic-step.js +13 -13
  140. package/dist/components/ic-stepper.js +2 -2
  141. package/dist/components/ic-switch.js +4 -4
  142. package/dist/components/ic-switch.js.map +1 -1
  143. package/dist/components/ic-tab-context.js +1 -1
  144. package/dist/components/ic-tab-group.js +2 -2
  145. package/dist/components/ic-tab-panel.js +2 -2
  146. package/dist/components/ic-theme.js +1 -1
  147. package/dist/components/ic-toast-region.js +1 -1
  148. package/dist/components/ic-toast.js +5 -5
  149. package/dist/components/ic-toggle-button-group.js +2 -2
  150. package/dist/components/ic-toggle-button.js +2 -2
  151. package/dist/core/core.esm.js +1 -1
  152. package/dist/core/core.esm.js.map +1 -1
  153. package/dist/core/{p-23fb87be.entry.js → p-0558baed.entry.js} +2 -2
  154. package/dist/core/{p-a0c54a50.entry.js → p-0740be66.entry.js} +2 -2
  155. package/dist/core/{p-d0dd9f2c.entry.js → p-0cd21e04.entry.js} +2 -2
  156. package/dist/core/p-0cd21e04.entry.js.map +1 -0
  157. package/dist/core/{p-bb52e752.entry.js → p-1043f3dd.entry.js} +2 -2
  158. package/dist/core/{p-74a3a450.entry.js → p-1843357b.entry.js} +2 -2
  159. package/dist/core/{p-b58fb588.entry.js → p-2251df98.entry.js} +2 -2
  160. package/dist/core/{p-cf87b6db.entry.js → p-2bb815ef.entry.js} +2 -2
  161. package/dist/core/p-305d9639.entry.js +3 -0
  162. package/dist/core/p-305d9639.entry.js.map +1 -0
  163. package/dist/core/p-308be45e.entry.js +2 -0
  164. package/dist/core/p-308be45e.entry.js.map +1 -0
  165. package/dist/core/p-4b61e92e.entry.js +2 -0
  166. package/dist/core/{p-99b20121.entry.js.map → p-4b61e92e.entry.js.map} +1 -1
  167. package/dist/core/{p-fd9ea62a.entry.js → p-75f91c8c.entry.js} +2 -2
  168. package/dist/core/p-77f011e7.entry.js +2 -0
  169. package/dist/core/p-77f011e7.entry.js.map +1 -0
  170. package/dist/core/{p-70ca7796.entry.js → p-85db7e71.entry.js} +2 -2
  171. package/dist/core/{p-ab104baa.entry.js → p-987b08f9.entry.js} +2 -2
  172. package/dist/core/{p-85ac0d78.entry.js → p-9b144bed.entry.js} +2 -2
  173. package/dist/core/{p-d1220d2a.entry.js → p-a8d98164.entry.js} +2 -2
  174. package/dist/core/{p-a7c263bd.entry.js → p-ba8799ea.entry.js} +2 -2
  175. package/dist/core/p-ba8799ea.entry.js.map +1 -0
  176. package/dist/core/p-be8bbed8.entry.js +2 -0
  177. package/dist/core/p-be8bbed8.entry.js.map +1 -0
  178. package/dist/core/{p-85232cec.entry.js → p-bf06d022.entry.js} +2 -2
  179. package/dist/core/{p-c41fd2cf.entry.js → p-c0f6f568.entry.js} +2 -2
  180. package/dist/core/p-c391e323.js +2 -0
  181. package/dist/core/{p-271ee0bc.entry.js → p-c75c316b.entry.js} +2 -2
  182. package/dist/core/{p-970e190c.entry.js → p-e0b52a71.entry.js} +2 -2
  183. package/dist/core/p-ef289935.entry.js +2 -0
  184. package/dist/core/p-ef289935.entry.js.map +1 -0
  185. package/dist/core/{p-3da9774b.entry.js → p-ef91cf17.entry.js} +2 -2
  186. package/dist/core/p-f8aa89ff.entry.js +2 -0
  187. package/dist/core/p-f8aa89ff.entry.js.map +1 -0
  188. package/dist/core/{p-d7c6fc8d.entry.js → p-f8e5d8f8.entry.js} +2 -2
  189. package/dist/core/{p-6b5edd6b.entry.js → p-f9daecc7.entry.js} +2 -2
  190. package/dist/esm/{close-icon-539ec8d1.js → close-icon-0db44bf2.js} +2 -3
  191. package/dist/esm/close-icon-0db44bf2.js.map +1 -0
  192. package/dist/esm/core.js +1 -1
  193. package/dist/esm/ic-alert.entry.js +1 -1
  194. package/dist/esm/ic-breadcrumb-group.entry.js +16 -12
  195. package/dist/esm/ic-breadcrumb-group.entry.js.map +1 -1
  196. package/dist/esm/ic-data-list.entry.js +1 -1
  197. package/dist/esm/ic-data-list.entry.js.map +1 -1
  198. package/dist/esm/ic-data-row.entry.js +1 -1
  199. package/dist/esm/ic-data-row.entry.js.map +1 -1
  200. package/dist/esm/ic-dialog.entry.js +1 -1
  201. package/dist/esm/ic-input-component-container_3.entry.js +1153 -306
  202. package/dist/esm/ic-input-component-container_3.entry.js.map +1 -1
  203. package/dist/esm/ic-menu-item.entry.js +5 -1
  204. package/dist/esm/ic-menu-item.entry.js.map +1 -1
  205. package/dist/esm/ic-pagination-item.entry.js +1 -1
  206. package/dist/esm/ic-pagination-item.entry.js.map +1 -1
  207. package/dist/esm/ic-pagination_3.entry.js +12 -8
  208. package/dist/esm/ic-pagination_3.entry.js.map +1 -1
  209. package/dist/esm/ic-popover-menu.entry.js +45 -12
  210. package/dist/esm/ic-popover-menu.entry.js.map +1 -1
  211. package/dist/esm/ic-search-bar.entry.js +2 -6
  212. package/dist/esm/ic-search-bar.entry.js.map +1 -1
  213. package/dist/esm/ic-section-container.entry.js +2 -2
  214. package/dist/esm/ic-side-navigation.entry.js +1 -1
  215. package/dist/esm/ic-skeleton.entry.js +2 -2
  216. package/dist/esm/ic-skip-link.entry.js +2 -2
  217. package/dist/esm/ic-status-tag.entry.js +2 -2
  218. package/dist/esm/ic-step.entry.js +13 -13
  219. package/dist/esm/ic-stepper.entry.js +2 -2
  220. package/dist/esm/ic-switch.entry.js +4 -4
  221. package/dist/esm/ic-tab-context.entry.js +1 -1
  222. package/dist/esm/ic-tab-group.entry.js +2 -2
  223. package/dist/esm/ic-tab-panel.entry.js +2 -2
  224. package/dist/esm/ic-theme.entry.js +1 -1
  225. package/dist/esm/ic-toast-region.entry.js +1 -1
  226. package/dist/esm/ic-toast.entry.js +6 -6
  227. package/dist/esm/ic-toggle-button-group.entry.js +2 -2
  228. package/dist/esm/ic-toggle-button.entry.js +2 -2
  229. package/dist/esm/loader.js +1 -1
  230. package/dist/types/components/ic-breadcrumb-group/ic-breadcrumb-group.d.ts +6 -1
  231. package/dist/types/components/ic-menu-item/ic-menu-item.d.ts +4 -0
  232. package/dist/types/components/ic-popover-menu/ic-popover-menu.d.ts +8 -0
  233. package/dist/types/components.d.ts +18 -2
  234. package/hydrate/index.js +1284 -393
  235. package/hydrate/index.mjs +1284 -393
  236. package/package.json +12 -9
  237. package/vscode-data.json +20 -1
  238. package/dist/cjs/close-icon-7f6ef8e4.js.map +0 -1
  239. package/dist/collection/assets/clear-icon.svg +0 -3
  240. package/dist/core/p-023cf5d9.entry.js +0 -2
  241. package/dist/core/p-023cf5d9.entry.js.map +0 -1
  242. package/dist/core/p-2424f82f.entry.js +0 -2
  243. package/dist/core/p-2424f82f.entry.js.map +0 -1
  244. package/dist/core/p-2b1ce5b7.entry.js +0 -2
  245. package/dist/core/p-2b1ce5b7.entry.js.map +0 -1
  246. package/dist/core/p-99b20121.entry.js +0 -2
  247. package/dist/core/p-a7c263bd.entry.js.map +0 -1
  248. package/dist/core/p-d0dd9f2c.entry.js.map +0 -1
  249. package/dist/core/p-d5fcd4f9.entry.js +0 -2
  250. package/dist/core/p-d5fcd4f9.entry.js.map +0 -1
  251. package/dist/core/p-e0b66371.entry.js +0 -2
  252. package/dist/core/p-e0b66371.entry.js.map +0 -1
  253. package/dist/core/p-f074ef5b.js +0 -2
  254. package/dist/core/p-fdc4376e.entry.js +0 -3
  255. package/dist/core/p-fdc4376e.entry.js.map +0 -1
  256. package/dist/esm/close-icon-539ec8d1.js.map +0 -1
  257. /package/dist/core/{p-23fb87be.entry.js.map → p-0558baed.entry.js.map} +0 -0
  258. /package/dist/core/{p-a0c54a50.entry.js.map → p-0740be66.entry.js.map} +0 -0
  259. /package/dist/core/{p-bb52e752.entry.js.map → p-1043f3dd.entry.js.map} +0 -0
  260. /package/dist/core/{p-74a3a450.entry.js.map → p-1843357b.entry.js.map} +0 -0
  261. /package/dist/core/{p-b58fb588.entry.js.map → p-2251df98.entry.js.map} +0 -0
  262. /package/dist/core/{p-cf87b6db.entry.js.map → p-2bb815ef.entry.js.map} +0 -0
  263. /package/dist/core/{p-fd9ea62a.entry.js.map → p-75f91c8c.entry.js.map} +0 -0
  264. /package/dist/core/{p-70ca7796.entry.js.map → p-85db7e71.entry.js.map} +0 -0
  265. /package/dist/core/{p-ab104baa.entry.js.map → p-987b08f9.entry.js.map} +0 -0
  266. /package/dist/core/{p-85ac0d78.entry.js.map → p-9b144bed.entry.js.map} +0 -0
  267. /package/dist/core/{p-d1220d2a.entry.js.map → p-a8d98164.entry.js.map} +0 -0
  268. /package/dist/core/{p-85232cec.entry.js.map → p-bf06d022.entry.js.map} +0 -0
  269. /package/dist/core/{p-c41fd2cf.entry.js.map → p-c0f6f568.entry.js.map} +0 -0
  270. /package/dist/core/{p-f074ef5b.js.map → p-c391e323.js.map} +0 -0
  271. /package/dist/core/{p-271ee0bc.entry.js.map → p-c75c316b.entry.js.map} +0 -0
  272. /package/dist/core/{p-970e190c.entry.js.map → p-e0b52a71.entry.js.map} +0 -0
  273. /package/dist/core/{p-3da9774b.entry.js.map → p-ef91cf17.entry.js.map} +0 -0
  274. /package/dist/core/{p-d7c6fc8d.entry.js.map → p-f8e5d8f8.entry.js.map} +0 -0
  275. /package/dist/core/{p-6b5edd6b.entry.js.map → p-f9daecc7.entry.js.map} +0 -0
@@ -1,7 +1,10 @@
1
1
  import { Host, h, } from "@stencil/core";
2
- import { getSlotElements, isPropDefined } from "../../utils/helpers";
2
+ import { getSlotElements, isPropDefined, isSlotUsed, } from "../../utils/helpers";
3
3
  import { createPopper, } from "@popperjs/core";
4
4
  const MENU_SELECTOR = "div.menu-body";
5
+ /**
6
+ * @slot anchor - The default anchor element for the popover menu. This will take precedence over the `anchor` prop.
7
+ */
5
8
  export class PopoverMenu {
6
9
  constructor() {
7
10
  this.ARIA_LABEL = "aria-label";
@@ -25,6 +28,10 @@ export class PopoverMenu {
25
28
  * If `true`, the popover menu will be displayed.
26
29
  */
27
30
  this.open = undefined;
31
+ /**
32
+ * If `always`, the popover menu will close when any menu item is clicked. If `toggle`, the popover menu will close when a non-toggle menu item is clicked. If `never`, the popover menu will not close when any menu item is clicked.
33
+ */
34
+ this.closeOnItemSelect = "always";
28
35
  this.setButtonFocus = () => {
29
36
  var _a;
30
37
  (_a = this.popoverMenuEls[this.currentFocus]) === null || _a === void 0 ? void 0 : _a.focus();
@@ -45,8 +52,11 @@ export class PopoverMenu {
45
52
  return anchorElement;
46
53
  };
47
54
  this.isNotPopoverMenuEl = (ev) => {
48
- const { id, tagName } = ev.target;
49
- return (id !== this.anchor &&
55
+ const target = ev.target;
56
+ const { id, tagName } = target;
57
+ const isAnchor = this.anchorEl && target === this.anchorEl;
58
+ return (!isAnchor &&
59
+ id !== this.anchor &&
50
60
  tagName !== "IC-MENU-ITEM" &&
51
61
  tagName !== "IC-MENU-GROUP" &&
52
62
  tagName !== "IC-POPOVER-MENU");
@@ -83,7 +93,16 @@ export class PopoverMenu {
83
93
  }
84
94
  };
85
95
  this.getMenuAriaLabel = () => {
86
- const ariaLabel = this.el.getAttribute(this.ARIA_LABEL);
96
+ let ariaLabel = this.el.getAttribute(this.ARIA_LABEL);
97
+ if (ariaLabel) {
98
+ this.menuAriaLabel = ariaLabel;
99
+ this.el.removeAttribute(this.ARIA_LABEL);
100
+ }
101
+ else if (this.menuAriaLabel) {
102
+ ariaLabel = this.menuAriaLabel;
103
+ }
104
+ if (!ariaLabel)
105
+ return null;
87
106
  if (isPropDefined(this.submenuId)) {
88
107
  return `${ariaLabel}, within nested level ${this.submenuLevel} ${this.parentLabel} submenu,`;
89
108
  }
@@ -97,8 +116,10 @@ export class PopoverMenu {
97
116
  this.open = false;
98
117
  };
99
118
  this.initPopperJS = () => {
119
+ var _a;
120
+ const popoverMenu = (_a = this.el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector(".ic-popover-menu");
100
121
  if (this.anchorEl) {
101
- this.popperInstance = createPopper(this.anchorEl, this.el, Object.assign({ strategy: this.fixedPositioning ? "fixed" : "absolute", placement: "bottom-start", modifiers: [
122
+ this.popperInstance = createPopper(this.anchorEl, popoverMenu, Object.assign({ strategy: this.fixedPositioning ? "fixed" : "absolute", placement: "bottom-start", modifiers: [
102
123
  {
103
124
  name: "offset",
104
125
  options: {
@@ -169,7 +190,13 @@ export class PopoverMenu {
169
190
  this.watchOpenHandler();
170
191
  }
171
192
  componentWillRender() {
172
- this.anchorEl = this.findAnchorEl(this.anchor);
193
+ const slottedAnchor = this.el.querySelector('[slot="anchor"]');
194
+ if (slottedAnchor) {
195
+ this.anchorEl = slottedAnchor;
196
+ }
197
+ else {
198
+ this.anchorEl = this.findAnchorEl(this.anchor);
199
+ }
173
200
  }
174
201
  componentDidRender() {
175
202
  if (this.open && !this.popperInstance) {
@@ -178,6 +205,13 @@ export class PopoverMenu {
178
205
  }
179
206
  handleMenuItemClick(ev) {
180
207
  if (!ev.detail.submenuTriggerFor && ev.detail.label !== "Back") {
208
+ if (this.closeOnItemSelect === "never" ||
209
+ (ev.detail.variant === "toggle" &&
210
+ this.closeOnItemSelect === "toggle") ||
211
+ ev.detail.closeMenuOnSelect === false) {
212
+ this.currentFocus = this.popoverMenuEls.findIndex((menuItem) => menuItem === ev.detail);
213
+ return;
214
+ }
181
215
  this.closeMenu(false, ev.detail);
182
216
  }
183
217
  }
@@ -273,17 +307,19 @@ export class PopoverMenu {
273
307
  this.popperProps = props;
274
308
  }
275
309
  render() {
276
- return (h(Host, { key: '331cedc179eb4d558f29f7704df951210f43fa77', class: {
277
- ["ic-popover-menu-open"]: !!this.open,
310
+ return (h(Host, { key: 'b664e4a0944016c88fe19232ea7b1cf2fa65cbd9', class: {
278
311
  [`ic-theme-${this.theme}`]: this.theme !== "inherit",
279
- } }, h("div", { key: '4efbe811a462e960af2d7a5ab63d3df5f69209cb', id: this.parentPopover === undefined
312
+ } }, isSlotUsed(this.el, "anchor") && h("slot", { key: '978425aac1a58c1f19ad59e8ebe9869492fe8a5d', name: "anchor" }), h("div", { key: 'c36a21a4f9913deebed1c418ce4c85995fa49054', class: {
313
+ ["ic-popover-menu"]: true,
314
+ ["ic-popover-menu-open"]: !!this.open,
315
+ } }, h("div", { key: '5e54d43f8699270ea59ee2d408d099e73b51a5e0', id: this.parentPopover === undefined
280
316
  ? `ic-popover-submenu-${this.submenuId}`
281
317
  : "", class: {
282
318
  menu: true,
283
- } }, h("span", { key: '25207afa860d6d4b897a8d7b7406d5a450652949', class: {
319
+ } }, h("span", { key: '50b901cdd6ce1c6e51839cdacb61034f45972a3a', class: {
284
320
  "opening-from-parent": this.openingFromParent,
285
321
  "opening-from-child": this.openingFromChild,
286
- } }, isPropDefined(this.submenuId) && (h("span", { key: '21bebc9796ecd62d6c0a51247f450eb0f61de6fb' }, h("span", { key: 'bf64a9672b93e4831bce7309514121108e79f26c', role: "menu" }, h("ic-menu-item", { key: 'a6bbb41562f8047a34e81f7afb72f6fdf7489b53', class: "ic-popover-submenu-back-button", ref: (el) => (this.backButton = el), label: "Back", onClick: this.handleBackButtonClick, id: `ic-popover-submenu-back-button-${this.submenuLevel}` }, h("svg", { key: 'a5267871273dfffa86198105d325adf3b62f2728', slot: "icon", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", class: "submenu-back-icon" }, h("path", { key: 'cfba5502e9594fe2dc299d7e8922a39e64e6e282', d: "M20 11H7.83L13.42 5.41L12 4L4 12L12 20L13.41 18.59L7.83 13H20V11Z", fill: "currentColor" })))), h("ic-typography", { key: '4c718558761258605c42ad71966c54cc09fc7bac', variant: "subtitle-small", class: "parent-label" }, this.parentLabel))), h("div", { key: '8c127ed3e934a257795e0b3472c6d901e8e3fb62', class: "menu-body", "aria-label": this.getMenuAriaLabel(), role: "menu" }, h("slot", { key: '8f06fc83099461573082afc75d008e37ee84cf65' }))))));
322
+ } }, isPropDefined(this.submenuId) && (h("span", { key: 'b152354aff6888ea5dd18850fb7ce40f3e7d975c' }, h("span", { key: 'b7f43d96c7980573f740ff5d6495aa5416b6b89c', role: "menu" }, h("ic-menu-item", { key: '62eb52181ef3b9c647573202a90940f3f90b2b1f', class: "ic-popover-submenu-back-button", ref: (el) => (this.backButton = el), label: "Back", onClick: this.handleBackButtonClick, id: `ic-popover-submenu-back-button-${this.submenuLevel}` }, h("svg", { key: 'ea5fe2b6bedb7a97c146e9bf19f0c4538bcd7cc4', slot: "icon", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", class: "submenu-back-icon" }, h("path", { key: '57795916b6c3026915b4b166647512bc7b2571e0', d: "M20 11H7.83L13.42 5.41L12 4L4 12L12 20L13.41 18.59L7.83 13H20V11Z", fill: "currentColor" })))), h("ic-typography", { key: 'c6b1a275a79f431eb9c32b8b811302c2bc7e86a2', variant: "subtitle-small", class: "parent-label" }, this.parentLabel))), h("div", { key: 'a227dd549ab5bc60aad95d62d4ab8a13fdd4e46f', class: "menu-body", "aria-label": this.getMenuAriaLabel(), role: "menu" }, h("slot", { key: '5f991353095b3d406ff76d101be9c72dd1ff26b7' })))))));
287
323
  }
288
324
  static get is() { return "ic-popover-menu"; }
289
325
  static get encapsulation() { return "shadow"; }
@@ -473,6 +509,26 @@ export class PopoverMenu {
473
509
  "attribute": "open",
474
510
  "reflect": true,
475
511
  "defaultValue": "undefined"
512
+ },
513
+ "closeOnItemSelect": {
514
+ "type": "string",
515
+ "mutable": false,
516
+ "complexType": {
517
+ "original": "\"always\" | \"toggle\" | \"never\"",
518
+ "resolved": "\"always\" | \"never\" | \"toggle\"",
519
+ "references": {}
520
+ },
521
+ "required": false,
522
+ "optional": false,
523
+ "docs": {
524
+ "tags": [],
525
+ "text": "If `always`, the popover menu will close when any menu item is clicked. If `toggle`, the popover menu will close when a non-toggle menu item is clicked. If `never`, the popover menu will not close when any menu item is clicked."
526
+ },
527
+ "getter": false,
528
+ "setter": false,
529
+ "attribute": "close-on-item-select",
530
+ "reflect": false,
531
+ "defaultValue": "\"always\""
476
532
  }
477
533
  };
478
534
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ic-popover-menu.js","sourceRoot":"","sources":["../../../src/components/ic-popover-menu/ic-popover-menu.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,IAAI,EACJ,CAAC,EACD,IAAI,EACJ,MAAM,EACN,KAAK,EACL,KAAK,EACL,MAAM,EACN,KAAK,GAEN,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EACL,YAAY,GAGb,MAAM,gBAAgB,CAAC;AAGxB,MAAM,aAAa,GAAG,eAAe,CAAC;AAStC,MAAM,OAAO,WAAW;IAPxB;QASU,eAAU,GAAW,YAAY,CAAC;QAGlC,mBAAc,GAA4B,EAAE,CAAC;QAK5C,qBAAgB,GAAY,KAAK,CAAC;QAClC,sBAAiB,GAAY,KAAK,CAAC;QACnC,gBAAW,GAAqB,EAAE,CAAC;QAO5C;;WAEG;QACK,qBAAgB,GAAY,KAAK,CAAC;QAiB1C;;WAEG;QACK,iBAAY,GAAY,CAAC,CAAC;QAElC;;WAEG;QACK,UAAK,GAAiB,SAAS,CAAC;QAExC;;WAEG;QACqC,SAAI,GAC1C,SAAS,CAAC;QA8KJ,mBAAc,GAAG,GAAG,EAAE;;YAC5B,MAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,0CAAE,KAAK,EAAE,CAAC;QAClD,CAAC,CAAC;QAEF,6CAA6C;QACrC,iBAAY,GAAG,CAAC,MAA0B,EAAsB,EAAE;YACxE,IAAI,aAAa,GAAuB,IAAI,CAAC;YAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,SAAS,KAAK,SAAS;oBAC1B,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,aAAa,GAAG,QAAQ,CAAC,aAAa,CACpC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAClD,CAAC;gBACF,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;oBAC3B,OAAO,CAAC,KAAK,CAAC,2BAA2B,MAAM,aAAa,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;YACD,OAAO,aAAa,CAAC;QACvB,CAAC,CAAC;QAEM,uBAAkB,GAAG,CAAC,EAAS,EAAE,EAAE;YACzC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAqB,CAAC;YACjD,OAAO,CACL,EAAE,KAAK,IAAI,CAAC,MAAM;gBAClB,OAAO,KAAK,cAAc;gBAC1B,OAAO,KAAK,eAAe;gBAC3B,OAAO,KAAK,iBAAiB,CAC9B,CAAC;QACJ,CAAC,CAAC;QA+BM,wBAAmB,GAAG,CAC5B,WAAmB,EACnB,UAAmB,EACX,EAAE;YACV,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;YAElD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBACpB,WAAW,GAAG,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;YAE9D,iCAAiC;YACjC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACjB,QAAQ,GAAG,UAAU,CAAC;YACxB,CAAC;iBAAM,IAAI,QAAQ,GAAG,UAAU,EAAE,CAAC;gBACjC,QAAQ,GAAG,CAAC,CAAC;YACf,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC;QAEM,iBAAY,GAAG,CAAC,QAA2C,EAAE,EAAE;;YACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAA0B,CAAC;gBAChD,IAAI,EAAE,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;oBAClC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC/B,CAAC;qBAAM,IAAI,EAAE,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;oBAC1C,MAAM,gBAAgB,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CACnD,qBAAqB,CACtB,CAAC;oBACF,IAAI,gBAAgB,EAAE,CAAC;wBACrB,MAAM,iBAAiB,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;wBAC5D,iBAAiB,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;oBAC5D,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEM,qBAAgB,GAAG,GAAkB,EAAE;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAExD,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClC,OAAO,GAAG,SAAS,yBAAyB,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,WAAW,CAAC;YAC/F,CAAC;iBAAM,CAAC;gBACN,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;QAEM,0BAAqB,GAAG,GAAS,EAAE;;YACzC,MAAA,IAAI,CAAC,aAAa,0CAAE,aAAa,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QACpB,CAAC,CAAC;QAEM,iBAAY,GAAG,GAAG,EAAE;YAC1B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,kBACvD,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EACtD,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE;wBACT;4BACE,IAAI,EAAE,QAAQ;4BACd,OAAO,EAAE;gCACP,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;6BACf;yBACF;wBACD;4BACE,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE;gCACP,kBAAkB,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC;gCAC1D,YAAY,EAAE,UAAU;6BACzB;yBACF;qBACF,IACE,IAAI,CAAC,WAAW,EACnB,CAAC;YACL,CAAC;QACH,CAAC,CAAC;KAmEH;IAvXC,gBAAgB;;QACd,MAAM,UAAU,GAAG,MAAA,IAAI,CAAC,EAAE,CAAC,aAAa,0CAAE,gBAAgB,CACxD,iBAAiB,CACsB,CAAC;QAC1C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBAC7B,IAAI,OAAO,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;wBACxB,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;oBACvB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YACD,IACE,IAAI,CAAC,aAAa,KAAK,SAAS;gBAChC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EACpD,CAAC;gBACD,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAClE,CAAC;YAED,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,+CAA+C;YAC/C,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBAC7B,IAAI,OAAO,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;wBACxB,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;oBACvB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAOD,oBAAoB;QAClB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,gBAAgB;;QACd,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,aAAa,CAAC,CAAC;QACrE,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,mBAAmB,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;YAEzD,IAAI,mBAAmB,KAAK,IAAI,EAAE,CAAC;gBACjC,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,IACE,IAAI,CAAC,SAAS,KAAK,SAAS;YAC5B,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,EAC9C,CAAC;YACD,OAAO,CAAC,KAAK,CACX,0EAA0E,CAC3E,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,kBAAkB;QAChB,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAGD,mBAAmB,CAAC,EAAsC;QACxD,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC/D,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,yFAAyF;IAEzF,mBAAmB,CAAC,EAAS;QAC3B,yDAAyD;QACzD,MAAM,MAAM,GAAG,EAAE,CAAC,MAA+B,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAElB,+FAA+F;QAC/F,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CACpC,8BAA8B,MAAM,CAAC,iBAAiB,GAAG,CAC9B,CAAC;QAC9B,kEAAkE;QAClE,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,OAAO,CAAC,cAAc,EAAE,CAAC;QACzB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,YAAa,GAAG,CAAC,CAAC;QAC9C,2FAA2F;QAC3F,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;IACrC,CAAC;IAGD,WAAW,CAAC,EAAS;QACnB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7C,4FAA4F;YAC5F,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,sDAAsD;IAEtD,aAAa,CAAC,EAAiB;QAC7B,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC;YACf,KAAK,WAAW,CAAC;YACjB,KAAK,SAAS;gBACZ,EAAE,CAAC,cAAc,EAAE,CAAC;gBACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAC1C,IAAI,CAAC,YAAY,EACjB,EAAE,CAAC,GAAG,KAAK,WAAW,CACvB,CAAC;gBACF,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,MAAM;YACR,KAAK,MAAM;gBACT,kDAAkD;gBAClD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,MAAM;YACR,KAAK,KAAK;gBACR,gCAAgC;gBAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;gBACnD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,KAAK;gBACR,EAAE,CAAC,cAAc,EAAE,CAAC;gBACpB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBACrB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;gBACjB,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;IAED;;OAEG;IAEH,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IAEH,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAE9B,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAiCD;;;OAGG;IAEH,KAAK,CAAC,SAAS,CACb,gBAAgB,GAAG,KAAK,EACxB,WAAmC;;QAEnC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAK,EAAE,CAAC;YACzB,CAAC;YACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;;OAGG;IAEH,KAAK,CAAC,sBAAsB,CAA6B,KAAQ;QAC/D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAiFD,MAAM;QACJ,OAAO,CACL,EAAC,IAAI,qDACH,KAAK,EAAE;gBACL,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI;gBACrC,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,KAAK,SAAS;aACrD;YAED,4DACE,EAAE,EACA,IAAI,CAAC,aAAa,KAAK,SAAS;oBAC9B,CAAC,CAAC,sBAAsB,IAAI,CAAC,SAAS,EAAE;oBACxC,CAAC,CAAC,EAAE,EAER,KAAK,EAAE;oBACL,IAAI,EAAE,IAAI;iBACX;gBAED,6DACE,KAAK,EAAE;wBACL,qBAAqB,EAAE,IAAI,CAAC,iBAAiB;wBAC7C,oBAAoB,EAAE,IAAI,CAAC,gBAAgB;qBAC5C;oBAEA,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAChC;wBACE,6DAAM,IAAI,EAAC,MAAM;4BACf,qEACE,KAAK,EAAC,gCAAgC,EACtC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,EACnC,KAAK,EAAC,MAAM,EACZ,OAAO,EAAE,IAAI,CAAC,qBAAqB,EACnC,EAAE,EAAE,kCAAkC,IAAI,CAAC,YAAY,EAAE;gCAEzD,4DACE,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,4BAA4B,EAClC,KAAK,EAAC,mBAAmB;oCAEzB,6DACE,CAAC,EAAC,mEAAmE,EACrE,IAAI,EAAC,cAAc,GACnB,CACE,CACO,CACV;wBACP,sEAAe,OAAO,EAAC,gBAAgB,EAAC,KAAK,EAAC,cAAc,IACzD,IAAI,CAAC,WAAW,CACH,CACX,CACR;oBACD,4DACE,KAAK,EAAC,WAAW,gBACL,IAAI,CAAC,gBAAgB,EAAE,EACnC,IAAI,EAAC,MAAM;wBAEX,8DAAa,CACT,CACD,CACH,CACD,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["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 {\n createPopper,\n Instance as PopperInstance,\n Options,\n} from \"@popperjs/core\";\nimport { IcThemeMode } from \"../../utils/types\";\n\nconst MENU_SELECTOR = \"div.menu-body\";\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 | null;\n private ARIA_LABEL: string = \"aria-label\";\n private backButton?: HTMLIcMenuItemElement;\n private currentFocus: number;\n private popoverMenuEls: HTMLIcMenuItemElement[] = [];\n private popperInstance: PopperInstance | null;\n\n @Element() el: HTMLIcPopoverMenuElement;\n\n @State() openingFromChild: boolean = false;\n @State() openingFromParent: boolean = false;\n @State() popperProps: Partial<Options> = {};\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 * Setting to `true` can help in situations where tooltip content is clipped by a parent element.\n */\n @Prop() fixedPositioning: boolean = false;\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 undefined;\n\n @Watch(\"open\")\n watchOpenHandler(): void {\n const popoverArr = this.el.parentElement?.querySelectorAll(\n `ic-popover-menu`\n ) as NodeListOf<HTMLIcPopoverMenuElement>;\n if (this.open) {\n if (popoverArr.length > 0) {\n popoverArr.forEach((popover) => {\n if (popover !== this.el) {\n popover.open = false;\n }\n });\n }\n if (\n this.parentPopover !== undefined &&\n !this.popoverMenuEls.some((menuItem) => menuItem.id)\n ) {\n this.backButton && 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 if (popoverArr.length > 0) {\n popoverArr.forEach((popover) => {\n if (popover !== this.el) {\n popover.open = false;\n }\n });\n }\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<HTMLIcMenuItemElement>;\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(MENU_SELECTOR);\n if (slotWrapper) {\n const popoverMenuElements = getSlotElements(slotWrapper);\n\n if (popoverMenuElements !== null) {\n this.addMenuItems(popoverMenuElements);\n }\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 this.watchOpenHandler();\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(ev: CustomEvent<HTMLIcMenuItemElement>): void {\n if (!ev.detail.submenuTriggerFor && ev.detail.label !== \"Back\") {\n this.closeMenu(false, ev.detail);\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 | undefined): HTMLElement | null => {\n let anchorElement: HTMLElement | null = 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(\n setFocusToAnchor = false,\n menuElement?: HTMLIcMenuItemElement\n ): Promise<void> {\n this.open = false;\n if (this.parentPopover) {\n this.parentPopover.closeMenu(setFocusToAnchor, menuElement);\n } else {\n if (setFocusToAnchor) {\n this.anchorEl?.focus();\n }\n this.icPopoverClosed.emit(menuElement);\n }\n }\n\n /**\n * @internal This method allows props to be added to the PopperJS createPopper instance outside of the popover menu\n * @param props object - createPopper props set externally\n */\n @Method()\n async setExternalPopperProps<T extends Partial<Options>>(props: T) {\n this.popperProps = props;\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 if (groupSlotWrapper) {\n const menuGroupElements = getSlotElements(groupSlotWrapper);\n menuGroupElements && this.addMenuItems(menuGroupElements);\n }\n }\n }\n };\n\n private getMenuAriaLabel = (): string | null => {\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 if (this.anchorEl) {\n this.popperInstance = createPopper(this.anchorEl, this.el, {\n strategy: this.fixedPositioning ? \"fixed\" : \"absolute\",\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 ...this.popperProps,\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 >\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 <div\n class=\"menu-body\"\n aria-label={this.getMenuAriaLabel()}\n role=\"menu\"\n >\n <slot></slot>\n </div>\n </span>\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"ic-popover-menu.js","sourceRoot":"","sources":["../../../src/components/ic-popover-menu/ic-popover-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["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 {\n getSlotElements,\n isPropDefined,\n isSlotUsed,\n} from \"../../utils/helpers\";\nimport {\n createPopper,\n Instance as PopperInstance,\n Options,\n} from \"@popperjs/core\";\nimport { IcThemeMode } from \"../../utils/types\";\n\nconst MENU_SELECTOR = \"div.menu-body\";\n\n/**\n * @slot anchor - The default anchor element for the popover menu. This will take precedence over the `anchor` prop.\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 | null;\n private ARIA_LABEL: string = \"aria-label\";\n private backButton?: HTMLIcMenuItemElement;\n private currentFocus: number;\n private popoverMenuEls: HTMLIcMenuItemElement[] = [];\n private popperInstance: PopperInstance | null;\n private menuAriaLabel?: string;\n\n @Element() el: HTMLIcPopoverMenuElement;\n\n @State() openingFromChild: boolean = false;\n @State() openingFromParent: boolean = false;\n @State() popperProps: Partial<Options> = {};\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 * Setting to `true` can help in situations where tooltip content is clipped by a parent element.\n */\n @Prop() fixedPositioning: boolean = false;\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 undefined;\n\n /**\n * If `always`, the popover menu will close when any menu item is clicked. If `toggle`, the popover menu will close when a non-toggle menu item is clicked. If `never`, the popover menu will not close when any menu item is clicked.\n */\n @Prop() closeOnItemSelect: \"always\" | \"toggle\" | \"never\" = \"always\";\n\n @Watch(\"open\")\n watchOpenHandler(): void {\n const popoverArr = this.el.parentElement?.querySelectorAll(\n `ic-popover-menu`\n ) as NodeListOf<HTMLIcPopoverMenuElement>;\n if (this.open) {\n if (popoverArr.length > 0) {\n popoverArr.forEach((popover) => {\n if (popover !== this.el) {\n popover.open = false;\n }\n });\n }\n if (\n this.parentPopover !== undefined &&\n !this.popoverMenuEls.some((menuItem) => menuItem.id)\n ) {\n this.backButton && 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 if (popoverArr.length > 0) {\n popoverArr.forEach((popover) => {\n if (popover !== this.el) {\n popover.open = false;\n }\n });\n }\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<HTMLIcMenuItemElement>;\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(MENU_SELECTOR);\n if (slotWrapper) {\n const popoverMenuElements = getSlotElements(slotWrapper);\n\n if (popoverMenuElements !== null) {\n this.addMenuItems(popoverMenuElements);\n }\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 this.watchOpenHandler();\n }\n\n componentWillRender(): void {\n const slottedAnchor = this.el.querySelector(\n '[slot=\"anchor\"]'\n ) as HTMLElement | null;\n\n if (slottedAnchor) {\n this.anchorEl = slottedAnchor;\n } else {\n this.anchorEl = this.findAnchorEl(this.anchor);\n }\n }\n\n componentDidRender(): void {\n if (this.open && !this.popperInstance) {\n this.initPopperJS();\n }\n }\n\n @Listen(\"handleMenuItemClick\")\n handleMenuItemClick(ev: CustomEvent<HTMLIcMenuItemElement>): void {\n if (!ev.detail.submenuTriggerFor && ev.detail.label !== \"Back\") {\n if (\n this.closeOnItemSelect === \"never\" ||\n (ev.detail.variant === \"toggle\" &&\n this.closeOnItemSelect === \"toggle\") ||\n ev.detail.closeMenuOnSelect === false\n ) {\n this.currentFocus = this.popoverMenuEls.findIndex(\n (menuItem) => menuItem === ev.detail\n );\n return;\n }\n this.closeMenu(false, ev.detail);\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 | undefined): HTMLElement | null => {\n let anchorElement: HTMLElement | null = 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 target = ev.target as HTMLElement;\n const { id, tagName } = target;\n const isAnchor = this.anchorEl && target === this.anchorEl;\n return (\n !isAnchor &&\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(\n setFocusToAnchor = false,\n menuElement?: HTMLIcMenuItemElement\n ): Promise<void> {\n this.open = false;\n if (this.parentPopover) {\n this.parentPopover.closeMenu(setFocusToAnchor, menuElement);\n } else {\n if (setFocusToAnchor) {\n this.anchorEl?.focus();\n }\n this.icPopoverClosed.emit(menuElement);\n }\n }\n\n /**\n * @internal This method allows props to be added to the PopperJS createPopper instance outside of the popover menu\n * @param props object - createPopper props set externally\n */\n @Method()\n async setExternalPopperProps<T extends Partial<Options>>(props: T) {\n this.popperProps = props;\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 if (groupSlotWrapper) {\n const menuGroupElements = getSlotElements(groupSlotWrapper);\n menuGroupElements && this.addMenuItems(menuGroupElements);\n }\n }\n }\n };\n\n private getMenuAriaLabel = (): string | null => {\n let ariaLabel = this.el.getAttribute(this.ARIA_LABEL);\n if (ariaLabel) {\n this.menuAriaLabel = ariaLabel;\n this.el.removeAttribute(this.ARIA_LABEL);\n } else if (this.menuAriaLabel) {\n ariaLabel = this.menuAriaLabel;\n }\n if (!ariaLabel) return null;\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 const popoverMenu = this.el.shadowRoot?.querySelector(\n \".ic-popover-menu\"\n ) as HTMLElement;\n if (this.anchorEl) {\n this.popperInstance = createPopper(this.anchorEl, popoverMenu, {\n strategy: this.fixedPositioning ? \"fixed\" : \"absolute\",\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 ...this.popperProps,\n });\n }\n };\n\n render() {\n return (\n <Host\n class={{\n [`ic-theme-${this.theme}`]: this.theme !== \"inherit\",\n }}\n >\n {isSlotUsed(this.el, \"anchor\") && <slot name=\"anchor\"></slot>}\n <div\n class={{\n [\"ic-popover-menu\"]: true,\n [\"ic-popover-menu-open\"]: !!this.open,\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 >\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 <div\n class=\"menu-body\"\n aria-label={this.getMenuAriaLabel()}\n role=\"menu\"\n >\n <slot></slot>\n </div>\n </span>\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -34,13 +34,21 @@ export const Default = {
34
34
  }
35
35
  </script>
36
36
  <div>
37
- <ic-popover-menu anchor="button-1" aria-label="popover">
37
+ <ic-popover-menu
38
+ anchor="button-1"
39
+ aria-label="popover"
40
+ close-on-item-select="toggle"
41
+ >
38
42
  <ic-menu-item label="Copy code" disabled="true"></ic-menu-item>
39
43
  <ic-menu-group label="View">
40
44
  <ic-menu-item
41
45
  label="Zoom in"
42
46
  keyboard-shortcut-label="Cmd+"
43
47
  ></ic-menu-item>
48
+ <ic-menu-item
49
+ label="Full Screen Mode"
50
+ variant="toggle"
51
+ ></ic-menu-item>
44
52
  <ic-menu-item
45
53
  label="Zoom out"
46
54
  keyboard-shortcut-label="Cmd-"
@@ -90,6 +98,166 @@ export const Default = {
90
98
  name: "Default",
91
99
  };
92
100
 
101
+ export const MenuOnToggle = {
102
+ render: () => html`
103
+ <ic-button id="button-1" onclick="buttonClick()"
104
+ >Show/Hide popover</ic-button
105
+ >
106
+ <script>
107
+ var icPopover = document.querySelector("ic-popover-menu");
108
+ function buttonClick() {
109
+ icPopover.open = !icPopover.open;
110
+ }
111
+ icPopover.addEventListener("icPopoverClosed", handleClosed);
112
+ function handleClosed(event) {
113
+ console.log("icPopoverClosed: ", event);
114
+ }
115
+ </script>
116
+ <div>
117
+ <ic-popover-menu
118
+ anchor="button-1"
119
+ aria-label="popover"
120
+ close-on-item-select="toggle"
121
+ >
122
+ <ic-menu-item label="Copy code" disabled="true"></ic-menu-item>
123
+ <ic-menu-group label="View">
124
+ <ic-menu-item
125
+ label="Zoom in"
126
+ keyboard-shortcut-label="Cmd+"
127
+ ></ic-menu-item>
128
+ <ic-menu-item
129
+ label="Full Screen Mode"
130
+ variant="toggle"
131
+ ></ic-menu-item>
132
+ <ic-menu-item
133
+ label="Zoom out"
134
+ keyboard-shortcut-label="Cmd-"
135
+ ></ic-menu-item>
136
+ </ic-menu-group>
137
+ <ic-menu-item label="Actions" submenu-trigger-for="abc"></ic-menu-item>
138
+ <ic-menu-item
139
+ label="Logout"
140
+ variant="destructive"
141
+ disabled="true"
142
+ ></ic-menu-item>
143
+ </ic-popover-menu>
144
+ <ic-popover-menu submenu-id="abc" close-on-item-select="toggle">
145
+ <ic-menu-item label="Edit"></ic-menu-item>
146
+ <ic-menu-item label="Auto-save" variant="toggle"></ic-menu-item>
147
+ <ic-menu-item label="Find" submenu-trigger-for="abc123"></ic-menu-item>
148
+ <ic-menu-item label="Delete" variant="destructive"></ic-menu-item>
149
+ </ic-popover-menu>
150
+ <ic-popover-menu submenu-id="abc123" close-on-item-select="toggle">
151
+ <ic-menu-item
152
+ disabled="true"
153
+ label="Search the web"
154
+ description="This will search the web to find the thing you are looking for."
155
+ ></ic-menu-item>
156
+ <ic-menu-item label="Find..."></ic-menu-item>
157
+ <ic-menu-item label="Find icons">
158
+ <svg
159
+ slot="icon"
160
+ xmlns="http://www.w3.org/2000/svg"
161
+ height="24px"
162
+ viewBox="0 0 24 24"
163
+ width="24px"
164
+ >
165
+ <path d="M0 0h24v24H0V0z" fill="none" />
166
+ <path
167
+ d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"
168
+ />
169
+ </svg>
170
+ </ic-menu-item>
171
+ <ic-menu-item
172
+ label="Show found results"
173
+ variant="toggle"
174
+ ></ic-menu-item>
175
+ </ic-popover-menu>
176
+ </div>
177
+ `,
178
+ name: "Menu On Toggle",
179
+ };
180
+
181
+ export const MenuNeverCloses = {
182
+ render: () => html`
183
+ <ic-button id="button-1" onclick="buttonClick()"
184
+ >Show/Hide popover</ic-button
185
+ >
186
+ <script>
187
+ var icPopover = document.querySelector("ic-popover-menu");
188
+ function buttonClick() {
189
+ icPopover.open = !icPopover.open;
190
+ }
191
+ icPopover.addEventListener("icPopoverClosed", handleClosed);
192
+ function handleClosed(event) {
193
+ console.log("icPopoverClosed: ", event);
194
+ }
195
+ </script>
196
+ <div>
197
+ <ic-popover-menu
198
+ anchor="button-1"
199
+ aria-label="popover"
200
+ close-on-item-select="never"
201
+ >
202
+ <ic-menu-item label="Copy code" disabled="true"></ic-menu-item>
203
+ <ic-menu-group label="View">
204
+ <ic-menu-item
205
+ label="Zoom in"
206
+ keyboard-shortcut-label="Cmd+"
207
+ ></ic-menu-item>
208
+ <ic-menu-item
209
+ label="Full Screen Mode"
210
+ variant="toggle"
211
+ ></ic-menu-item>
212
+ <ic-menu-item
213
+ label="Zoom out"
214
+ keyboard-shortcut-label="Cmd-"
215
+ ></ic-menu-item>
216
+ </ic-menu-group>
217
+ <ic-menu-item label="Actions" submenu-trigger-for="abc"></ic-menu-item>
218
+ <ic-menu-item
219
+ label="Logout"
220
+ variant="destructive"
221
+ disabled="true"
222
+ ></ic-menu-item>
223
+ </ic-popover-menu>
224
+ <ic-popover-menu submenu-id="abc" close-on-item-select="never">
225
+ <ic-menu-item label="Edit"></ic-menu-item>
226
+ <ic-menu-item label="Auto-save" variant="toggle"></ic-menu-item>
227
+ <ic-menu-item label="Find" submenu-trigger-for="abc123"></ic-menu-item>
228
+ <ic-menu-item label="Delete" variant="destructive"></ic-menu-item>
229
+ </ic-popover-menu>
230
+ <ic-popover-menu submenu-id="abc123" close-on-item-select="never">
231
+ <ic-menu-item
232
+ disabled="true"
233
+ label="Search the web"
234
+ description="This will search the web to find the thing you are looking for."
235
+ ></ic-menu-item>
236
+ <ic-menu-item label="Find..."></ic-menu-item>
237
+ <ic-menu-item label="Find icons">
238
+ <svg
239
+ slot="icon"
240
+ xmlns="http://www.w3.org/2000/svg"
241
+ height="24px"
242
+ viewBox="0 0 24 24"
243
+ width="24px"
244
+ >
245
+ <path d="M0 0h24v24H0V0z" fill="none" />
246
+ <path
247
+ d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"
248
+ />
249
+ </svg>
250
+ </ic-menu-item>
251
+ <ic-menu-item
252
+ label="Show found results"
253
+ variant="toggle"
254
+ ></ic-menu-item>
255
+ </ic-popover-menu>
256
+ </div>
257
+ `,
258
+ name: "Menu Never Closes",
259
+ };
260
+
93
261
  export const MaxHeight = {
94
262
  render: () => html`
95
263
  <style>
@@ -591,6 +759,78 @@ export const PositioningStrategy = {
591
759
  name: "Positioning strategy",
592
760
  };
593
761
 
762
+ export const SlottedAnchor = {
763
+ render: () => html`
764
+ <script>
765
+ var icPopover = document.querySelector("ic-popover-menu");
766
+ function buttonClick() {
767
+ icPopover.open = !icPopover.open;
768
+ }
769
+ icPopover.addEventListener("icPopoverClosed", handleClosed);
770
+ function handleClosed(event) {
771
+ console.log("icPopoverClosed: ", event);
772
+ }
773
+ </script>
774
+ <div>
775
+ <ic-popover-menu aria-label="popover">
776
+ <ic-button slot="anchor" onclick="buttonClick()"
777
+ >Show/Hide popover</ic-button
778
+ >
779
+ <ic-menu-item label="Copy code" disabled="true"></ic-menu-item>
780
+ <ic-menu-group label="View">
781
+ <ic-menu-item
782
+ label="Zoom in"
783
+ keyboard-shortcut-label="Cmd+"
784
+ ></ic-menu-item>
785
+ <ic-menu-item
786
+ label="Zoom out"
787
+ keyboard-shortcut-label="Cmd-"
788
+ ></ic-menu-item>
789
+ </ic-menu-group>
790
+ <ic-menu-item label="Actions" submenu-trigger-for="abc"></ic-menu-item>
791
+ <ic-menu-item
792
+ label="Logout"
793
+ variant="destructive"
794
+ disabled="true"
795
+ ></ic-menu-item>
796
+ </ic-popover-menu>
797
+ <ic-popover-menu submenu-id="abc">
798
+ <ic-menu-item label="Edit"></ic-menu-item>
799
+ <ic-menu-item label="Find" submenu-trigger-for="abc123"></ic-menu-item>
800
+ <ic-menu-item label="Delete" variant="destructive"></ic-menu-item>
801
+ </ic-popover-menu>
802
+ <ic-popover-menu submenu-id="abc123">
803
+ <ic-menu-item
804
+ disabled="true"
805
+ label="Search the web"
806
+ description="This will search the web to find the thing you are looking for."
807
+ ></ic-menu-item>
808
+ <ic-menu-item label="Find..."></ic-menu-item>
809
+ <ic-menu-item label="Find icons">
810
+ <svg
811
+ slot="icon"
812
+ xmlns="http://www.w3.org/2000/svg"
813
+ height="24px"
814
+ viewBox="0 0 24 24"
815
+ width="24px"
816
+ >
817
+ <path d="M0 0h24v24H0V0z" fill="none" />
818
+ <path
819
+ d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"
820
+ />
821
+ </svg>
822
+ </ic-menu-item>
823
+ <ic-menu-item
824
+ label="Show found results"
825
+ variant="toggle"
826
+ ></ic-menu-item>
827
+ </ic-popover-menu>
828
+ </div>
829
+ `,
830
+
831
+ name: "Slotted anchor",
832
+ };
833
+
594
834
  export const Playground = {
595
835
  render: (args) =>
596
836
  html`<div>
@@ -1,6 +1,6 @@
1
1
  import { Host, h, } from "@stencil/core";
2
2
  import { getInputDescribedByText, renderHiddenInput, handleHiddenFormButtonClick, getLabelFromValue, onComponentRequiredPropUndefined, getFilteredMenuOptions, removeDisabledFalse, debounceEvent, } from "../../utils/helpers";
3
- import clearIcon from "../../assets/clear-icon.svg";
3
+ import clearIcon from "../../assets/close-icon.svg";
4
4
  import searchIcon from "../../assets/search-icon.svg";
5
5
  let inputIds = 0;
6
6
  /**