@muraldevkit/ui-toolkit 4.72.0 → 4.73.0-dev-t0WE.1

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 (273) hide show
  1. package/dist/cjs/components/avatar/MrlAvatarButton/MrlAvatarButton.js +8 -1
  2. package/dist/cjs/components/avatar/MrlAvatarButton/MrlAvatarButton.js.map +1 -1
  3. package/dist/cjs/components/breadcrumb/MrlBreadcrumbItem/MrlBreadcrumbItem.js +14 -4
  4. package/dist/cjs/components/breadcrumb/MrlBreadcrumbItem/MrlBreadcrumbItem.js.map +1 -1
  5. package/dist/cjs/components/button/MrlAnimatedIconButton/MrlAnimatedIconButton.js +8 -1
  6. package/dist/cjs/components/button/MrlAnimatedIconButton/MrlAnimatedIconButton.js.map +1 -1
  7. package/dist/cjs/components/button/MrlButton/MrlButton.js +3 -3
  8. package/dist/cjs/components/button/MrlButton/MrlButton.js.map +1 -1
  9. package/dist/cjs/components/button/MrlIconButton/MrlIconButton.js +8 -1
  10. package/dist/cjs/components/button/MrlIconButton/MrlIconButton.js.map +1 -1
  11. package/dist/cjs/components/button/MrlProcessingButton/MrlProcessingButton.js +21 -2
  12. package/dist/cjs/components/button/MrlProcessingButton/MrlProcessingButton.js.map +1 -1
  13. package/dist/cjs/components/callout/MrlCallout/MrlCallout.js +36 -3
  14. package/dist/cjs/components/callout/MrlCallout/MrlCallout.js.map +1 -1
  15. package/dist/cjs/components/filter/MrlFilter/MrlFilter.js +18 -2
  16. package/dist/cjs/components/filter/MrlFilter/MrlFilter.js.map +1 -1
  17. package/dist/cjs/components/filter/MrlFilterItem/MrlFilterItem.js +11 -1
  18. package/dist/cjs/components/filter/MrlFilterItem/MrlFilterItem.js.map +1 -1
  19. package/dist/cjs/components/form/checkbox/MrlCheckbox/MrlCheckbox.js +17 -1
  20. package/dist/cjs/components/form/checkbox/MrlCheckbox/MrlCheckbox.js.map +1 -1
  21. package/dist/cjs/components/form/checkbox/MrlCheckboxStandalone/MrlCheckboxStandalone.js +24 -1
  22. package/dist/cjs/components/form/checkbox/MrlCheckboxStandalone/MrlCheckboxStandalone.js.map +1 -1
  23. package/dist/cjs/components/form/date-picker/MrlDatePicker.js +17 -2
  24. package/dist/cjs/components/form/date-picker/MrlDatePicker.js.map +1 -1
  25. package/dist/cjs/components/form/legacy-select/MrlLegacySelect/MrlLegacySelect.js +11 -2
  26. package/dist/cjs/components/form/legacy-select/MrlLegacySelect/MrlLegacySelect.js.map +1 -1
  27. package/dist/cjs/components/form/legacy-select/MrlLegacySelectItem/MrlLegacySelectItem.js +8 -1
  28. package/dist/cjs/components/form/legacy-select/MrlLegacySelectItem/MrlLegacySelectItem.js.map +1 -1
  29. package/dist/cjs/components/form/radio/MrlRadioButton/MrlRadioButton.js +19 -1
  30. package/dist/cjs/components/form/radio/MrlRadioButton/MrlRadioButton.js.map +1 -1
  31. package/dist/cjs/components/form/radio/MrlRadioButtonStandalone/MrlRadioButtonStandalone.js +19 -1
  32. package/dist/cjs/components/form/radio/MrlRadioButtonStandalone/MrlRadioButtonStandalone.js.map +1 -1
  33. package/dist/cjs/components/form/select/MrlCreatableSelect/MrlCreatableSelect.js +42 -2
  34. package/dist/cjs/components/form/select/MrlCreatableSelect/MrlCreatableSelect.js.map +1 -1
  35. package/dist/cjs/components/form/select/MrlMultiCreatableSelect/MrlMultiCreatableSelect.js +42 -2
  36. package/dist/cjs/components/form/select/MrlMultiCreatableSelect/MrlMultiCreatableSelect.js.map +1 -1
  37. package/dist/cjs/components/form/select/MrlMultiSelect/MrlMultiSelect.js +34 -2
  38. package/dist/cjs/components/form/select/MrlMultiSelect/MrlMultiSelect.js.map +1 -1
  39. package/dist/cjs/components/form/select/MrlSelect/MrlSelect.js +34 -2
  40. package/dist/cjs/components/form/select/MrlSelect/MrlSelect.js.map +1 -1
  41. package/dist/cjs/components/form/switch/MrlSwitch/MrlSwitch.js +14 -2
  42. package/dist/cjs/components/form/switch/MrlSwitch/MrlSwitch.js.map +1 -1
  43. package/dist/cjs/components/form/switch/MrlSwitchStandalone/MrlSwitchStandalone.js +10 -1
  44. package/dist/cjs/components/form/switch/MrlSwitchStandalone/MrlSwitchStandalone.js.map +1 -1
  45. package/dist/cjs/components/form/text-input/MrlEditableTextInput/MrlEditableTextInput.js +20 -3
  46. package/dist/cjs/components/form/text-input/MrlEditableTextInput/MrlEditableTextInput.js.map +1 -1
  47. package/dist/cjs/components/form/text-input/MrlTextInput/MrlTextInput.js +20 -3
  48. package/dist/cjs/components/form/text-input/MrlTextInput/MrlTextInput.js.map +1 -1
  49. package/dist/cjs/components/form/textarea/MrlEditableTextarea/MrlEditableTextarea.js +20 -3
  50. package/dist/cjs/components/form/textarea/MrlEditableTextarea/MrlEditableTextarea.js.map +1 -1
  51. package/dist/cjs/components/form/textarea/MrlTextarea/MrlTextarea.js +38 -1
  52. package/dist/cjs/components/form/textarea/MrlTextarea/MrlTextarea.js.map +1 -1
  53. package/dist/cjs/components/layout/MrlSidebar/MrlSidebar.js +12 -2
  54. package/dist/cjs/components/layout/MrlSidebar/MrlSidebar.js.map +1 -1
  55. package/dist/cjs/components/link/MrlLink/MrlLink.js +21 -2
  56. package/dist/cjs/components/link/MrlLink/MrlLink.js.map +1 -1
  57. package/dist/cjs/components/link/MrlLinkButton/MrlLinkButton.js +12 -1
  58. package/dist/cjs/components/link/MrlLinkButton/MrlLinkButton.js.map +1 -1
  59. package/dist/cjs/components/menu/MrlMenu/MrlMenu.js +20 -1
  60. package/dist/cjs/components/menu/MrlMenu/MrlMenu.js.map +1 -1
  61. package/dist/cjs/components/menu/MrlMenuItem/MrlMenuItem.js +18 -1
  62. package/dist/cjs/components/menu/MrlMenuItem/MrlMenuItem.js.map +1 -1
  63. package/dist/cjs/components/menu/MrlMenuItemLink/MrlMenuItemLink.js +10 -1
  64. package/dist/cjs/components/menu/MrlMenuItemLink/MrlMenuItemLink.js.map +1 -1
  65. package/dist/cjs/components/modal/MrlModal/MrlModal.js +22 -1
  66. package/dist/cjs/components/modal/MrlModal/MrlModal.js.map +1 -1
  67. package/dist/cjs/components/notification/MrlBlockNotification/MrlBlockNotification.js +27 -1
  68. package/dist/cjs/components/notification/MrlBlockNotification/MrlBlockNotification.js.map +1 -1
  69. package/dist/cjs/components/notification/MrlToast/MrlToast.js +28 -3
  70. package/dist/cjs/components/notification/MrlToast/MrlToast.js.map +1 -1
  71. package/dist/cjs/components/pagination/MrlPaginationButton/MrlPaginationButton.js +18 -2
  72. package/dist/cjs/components/pagination/MrlPaginationButton/MrlPaginationButton.js.map +1 -1
  73. package/dist/cjs/components/panel/MrlPanel/MrlPanel.js +24 -4
  74. package/dist/cjs/components/panel/MrlPanel/MrlPanel.js.map +1 -1
  75. package/dist/cjs/components/popover/MrlPopover/MrlPopover.js +18 -1
  76. package/dist/cjs/components/popover/MrlPopover/MrlPopover.js.map +1 -1
  77. package/dist/cjs/components/table/MrlSmartTable/MrlSmartTable.js +31 -2
  78. package/dist/cjs/components/table/MrlSmartTable/MrlSmartTable.js.map +1 -1
  79. package/dist/cjs/components/table/MrlTableRow/MrlTableRow.js +13 -3
  80. package/dist/cjs/components/table/MrlTableRow/MrlTableRow.js.map +1 -1
  81. package/dist/cjs/components/tabs/MrlTab/MrlTab.js +10 -1
  82. package/dist/cjs/components/tabs/MrlTab/MrlTab.js.map +1 -1
  83. package/dist/cjs/components/tabs/MrlTabLink/MrlTabLink.js +10 -1
  84. package/dist/cjs/components/tabs/MrlTabLink/MrlTabLink.js.map +1 -1
  85. package/dist/cjs/components/toolbar/MrlToolbarButton/MrlToolbarButton.js +19 -3
  86. package/dist/cjs/components/toolbar/MrlToolbarButton/MrlToolbarButton.js.map +1 -1
  87. package/dist/cjs/components/tooltip/MrlTooltip/MrlTooltip.js +23 -1
  88. package/dist/cjs/components/tooltip/MrlTooltip/MrlTooltip.js.map +1 -1
  89. package/dist/cjs/hooks/useMrlAnalytics/useMrlAnalytics.js +7 -7
  90. package/dist/cjs/hooks/useMrlAnalytics/useMrlAnalytics.js.map +1 -1
  91. package/dist/cjs/version.js +1 -1
  92. package/dist/cjs/version.js.map +1 -1
  93. package/dist/components/avatar/MrlAvatarButton/MrlAvatarButton.d.ts +6 -1
  94. package/dist/components/breadcrumb/MrlBreadcrumbItem/MrlBreadcrumbItem.d.ts +5 -0
  95. package/dist/components/button/MrlButton/MrlButton.d.ts +1 -1
  96. package/dist/components/button/MrlIconButton/MrlIconButton.d.ts +5 -0
  97. package/dist/components/callout/MrlCallout/MrlCallout.d.ts +7 -0
  98. package/dist/components/filter/MrlFilter/MrlFilter.d.ts +7 -0
  99. package/dist/components/filter/MrlFilterItem/MrlFilterItem.d.ts +7 -0
  100. package/dist/components/form/checkbox/MrlCheckbox/MrlCheckbox.d.ts +6 -1
  101. package/dist/components/form/checkbox/MrlCheckboxStandalone/MrlCheckboxStandalone.d.ts +6 -1
  102. package/dist/components/form/date-picker/MrlDatePicker.d.ts +7 -0
  103. package/dist/components/form/legacy-select/MrlLegacySelect/MrlLegacySelect.d.ts +6 -1
  104. package/dist/components/form/legacy-select/MrlLegacySelectItem/MrlLegacySelectItem.d.ts +8 -1
  105. package/dist/components/form/radio/MrlRadioButton/MrlRadioButton.d.ts +6 -1
  106. package/dist/components/form/radio/MrlRadioButtonStandalone/MrlRadioButtonStandalone.d.ts +6 -1
  107. package/dist/components/form/select/MrlCreatableSelect/MrlCreatableSelect.d.ts +7 -0
  108. package/dist/components/form/select/MrlMultiCreatableSelect/MrlMultiCreatableSelect.d.ts +7 -0
  109. package/dist/components/form/select/MrlMultiSelect/MrlMultiSelect.d.ts +7 -0
  110. package/dist/components/form/select/MrlSelect/MrlSelect.d.ts +7 -0
  111. package/dist/components/form/switch/MrlSwitch/MrlSwitch.d.ts +6 -1
  112. package/dist/components/form/switch/MrlSwitchStandalone/MrlSwitchStandalone.d.ts +6 -1
  113. package/dist/components/form/text-input/MrlEditableTextInput/MrlEditableTextInput.d.ts +8 -0
  114. package/dist/components/form/text-input/MrlTextInput/MrlTextInput.d.ts +8 -0
  115. package/dist/components/form/textarea/MrlEditableTextarea/MrlEditableTextarea.d.ts +8 -0
  116. package/dist/components/form/textarea/MrlTextarea/MrlTextarea.d.ts +9 -1
  117. package/dist/components/layout/MrlSidebar/MrlSidebar.d.ts +8 -1
  118. package/dist/components/link/MrlLink/MrlLink.d.ts +6 -1
  119. package/dist/components/link/MrlLinkButton/MrlLinkButton.d.ts +5 -0
  120. package/dist/components/menu/MrlMenu/MrlMenu.d.ts +6 -1
  121. package/dist/components/menu/MrlMenuItem/MrlMenuItem.d.ts +6 -1
  122. package/dist/components/menu/MrlMenuItemLink/MrlMenuItemLink.d.ts +6 -1
  123. package/dist/components/modal/MrlModal/MrlModal.d.ts +5 -0
  124. package/dist/components/notification/MrlBlockNotification/MrlBlockNotification.d.ts +7 -0
  125. package/dist/components/notification/MrlToast/MrlToast.d.ts +8 -1
  126. package/dist/components/pagination/MrlPaginationButton/MrlPaginationButton.d.ts +6 -1
  127. package/dist/components/panel/MrlPanel/MrlPanel.d.ts +8 -0
  128. package/dist/components/popover/MrlPopover/MrlPopover.d.ts +6 -1
  129. package/dist/components/table/MrlSmartTable/MrlSmartTable.d.ts +7 -0
  130. package/dist/components/table/MrlTableRow/MrlTableRow.d.ts +7 -0
  131. package/dist/components/tabs/MrlTab/MrlTab.d.ts +6 -1
  132. package/dist/components/tabs/MrlTabLink/MrlTabLink.d.ts +6 -1
  133. package/dist/components/toolbar/MrlToolbarButton/MrlToolbarButton.d.ts +5 -0
  134. package/dist/components/tooltip/MrlTooltip/MrlTooltip.d.ts +8 -0
  135. package/dist/contexts/MrlAnalyticsContext/types.d.ts +1 -1
  136. package/dist/esm/components/avatar/MrlAvatarButton/MrlAvatarButton.js +8 -1
  137. package/dist/esm/components/avatar/MrlAvatarButton/MrlAvatarButton.js.map +1 -1
  138. package/dist/esm/components/breadcrumb/MrlBreadcrumbItem/MrlBreadcrumbItem.js +14 -4
  139. package/dist/esm/components/breadcrumb/MrlBreadcrumbItem/MrlBreadcrumbItem.js.map +1 -1
  140. package/dist/esm/components/button/MrlAnimatedIconButton/MrlAnimatedIconButton.js +8 -1
  141. package/dist/esm/components/button/MrlAnimatedIconButton/MrlAnimatedIconButton.js.map +1 -1
  142. package/dist/esm/components/button/MrlButton/MrlButton.js +3 -3
  143. package/dist/esm/components/button/MrlButton/MrlButton.js.map +1 -1
  144. package/dist/esm/components/button/MrlIconButton/MrlIconButton.js +8 -1
  145. package/dist/esm/components/button/MrlIconButton/MrlIconButton.js.map +1 -1
  146. package/dist/esm/components/button/MrlProcessingButton/MrlProcessingButton.js +21 -2
  147. package/dist/esm/components/button/MrlProcessingButton/MrlProcessingButton.js.map +1 -1
  148. package/dist/esm/components/callout/MrlCallout/MrlCallout.js +36 -3
  149. package/dist/esm/components/callout/MrlCallout/MrlCallout.js.map +1 -1
  150. package/dist/esm/components/filter/MrlFilter/MrlFilter.js +18 -2
  151. package/dist/esm/components/filter/MrlFilter/MrlFilter.js.map +1 -1
  152. package/dist/esm/components/filter/MrlFilterItem/MrlFilterItem.js +11 -1
  153. package/dist/esm/components/filter/MrlFilterItem/MrlFilterItem.js.map +1 -1
  154. package/dist/esm/components/form/checkbox/MrlCheckbox/MrlCheckbox.js +17 -1
  155. package/dist/esm/components/form/checkbox/MrlCheckbox/MrlCheckbox.js.map +1 -1
  156. package/dist/esm/components/form/checkbox/MrlCheckboxStandalone/MrlCheckboxStandalone.js +24 -1
  157. package/dist/esm/components/form/checkbox/MrlCheckboxStandalone/MrlCheckboxStandalone.js.map +1 -1
  158. package/dist/esm/components/form/date-picker/MrlDatePicker.js +17 -2
  159. package/dist/esm/components/form/date-picker/MrlDatePicker.js.map +1 -1
  160. package/dist/esm/components/form/legacy-select/MrlLegacySelect/MrlLegacySelect.js +11 -2
  161. package/dist/esm/components/form/legacy-select/MrlLegacySelect/MrlLegacySelect.js.map +1 -1
  162. package/dist/esm/components/form/legacy-select/MrlLegacySelectItem/MrlLegacySelectItem.js +8 -1
  163. package/dist/esm/components/form/legacy-select/MrlLegacySelectItem/MrlLegacySelectItem.js.map +1 -1
  164. package/dist/esm/components/form/radio/MrlRadioButton/MrlRadioButton.js +19 -1
  165. package/dist/esm/components/form/radio/MrlRadioButton/MrlRadioButton.js.map +1 -1
  166. package/dist/esm/components/form/radio/MrlRadioButtonStandalone/MrlRadioButtonStandalone.js +19 -1
  167. package/dist/esm/components/form/radio/MrlRadioButtonStandalone/MrlRadioButtonStandalone.js.map +1 -1
  168. package/dist/esm/components/form/select/MrlCreatableSelect/MrlCreatableSelect.js +42 -2
  169. package/dist/esm/components/form/select/MrlCreatableSelect/MrlCreatableSelect.js.map +1 -1
  170. package/dist/esm/components/form/select/MrlMultiCreatableSelect/MrlMultiCreatableSelect.js +42 -2
  171. package/dist/esm/components/form/select/MrlMultiCreatableSelect/MrlMultiCreatableSelect.js.map +1 -1
  172. package/dist/esm/components/form/select/MrlMultiSelect/MrlMultiSelect.js +34 -2
  173. package/dist/esm/components/form/select/MrlMultiSelect/MrlMultiSelect.js.map +1 -1
  174. package/dist/esm/components/form/select/MrlSelect/MrlSelect.js +34 -2
  175. package/dist/esm/components/form/select/MrlSelect/MrlSelect.js.map +1 -1
  176. package/dist/esm/components/form/switch/MrlSwitch/MrlSwitch.js +14 -2
  177. package/dist/esm/components/form/switch/MrlSwitch/MrlSwitch.js.map +1 -1
  178. package/dist/esm/components/form/switch/MrlSwitchStandalone/MrlSwitchStandalone.js +10 -1
  179. package/dist/esm/components/form/switch/MrlSwitchStandalone/MrlSwitchStandalone.js.map +1 -1
  180. package/dist/esm/components/form/text-input/MrlEditableTextInput/MrlEditableTextInput.js +20 -3
  181. package/dist/esm/components/form/text-input/MrlEditableTextInput/MrlEditableTextInput.js.map +1 -1
  182. package/dist/esm/components/form/text-input/MrlTextInput/MrlTextInput.js +20 -3
  183. package/dist/esm/components/form/text-input/MrlTextInput/MrlTextInput.js.map +1 -1
  184. package/dist/esm/components/form/textarea/MrlEditableTextarea/MrlEditableTextarea.js +20 -3
  185. package/dist/esm/components/form/textarea/MrlEditableTextarea/MrlEditableTextarea.js.map +1 -1
  186. package/dist/esm/components/form/textarea/MrlTextarea/MrlTextarea.js +38 -1
  187. package/dist/esm/components/form/textarea/MrlTextarea/MrlTextarea.js.map +1 -1
  188. package/dist/esm/components/layout/MrlSidebar/MrlSidebar.js +12 -2
  189. package/dist/esm/components/layout/MrlSidebar/MrlSidebar.js.map +1 -1
  190. package/dist/esm/components/link/MrlLink/MrlLink.js +21 -2
  191. package/dist/esm/components/link/MrlLink/MrlLink.js.map +1 -1
  192. package/dist/esm/components/link/MrlLinkButton/MrlLinkButton.js +12 -1
  193. package/dist/esm/components/link/MrlLinkButton/MrlLinkButton.js.map +1 -1
  194. package/dist/esm/components/menu/MrlMenu/MrlMenu.js +20 -1
  195. package/dist/esm/components/menu/MrlMenu/MrlMenu.js.map +1 -1
  196. package/dist/esm/components/menu/MrlMenuItem/MrlMenuItem.js +18 -1
  197. package/dist/esm/components/menu/MrlMenuItem/MrlMenuItem.js.map +1 -1
  198. package/dist/esm/components/menu/MrlMenuItemLink/MrlMenuItemLink.js +10 -1
  199. package/dist/esm/components/menu/MrlMenuItemLink/MrlMenuItemLink.js.map +1 -1
  200. package/dist/esm/components/modal/MrlModal/MrlModal.js +22 -1
  201. package/dist/esm/components/modal/MrlModal/MrlModal.js.map +1 -1
  202. package/dist/esm/components/notification/MrlBlockNotification/MrlBlockNotification.js +27 -1
  203. package/dist/esm/components/notification/MrlBlockNotification/MrlBlockNotification.js.map +1 -1
  204. package/dist/esm/components/notification/MrlToast/MrlToast.js +28 -3
  205. package/dist/esm/components/notification/MrlToast/MrlToast.js.map +1 -1
  206. package/dist/esm/components/pagination/MrlPaginationButton/MrlPaginationButton.js +18 -2
  207. package/dist/esm/components/pagination/MrlPaginationButton/MrlPaginationButton.js.map +1 -1
  208. package/dist/esm/components/panel/MrlPanel/MrlPanel.js +24 -4
  209. package/dist/esm/components/panel/MrlPanel/MrlPanel.js.map +1 -1
  210. package/dist/esm/components/popover/MrlPopover/MrlPopover.js +18 -1
  211. package/dist/esm/components/popover/MrlPopover/MrlPopover.js.map +1 -1
  212. package/dist/esm/components/table/MrlSmartTable/MrlSmartTable.js +31 -2
  213. package/dist/esm/components/table/MrlSmartTable/MrlSmartTable.js.map +1 -1
  214. package/dist/esm/components/table/MrlTableRow/MrlTableRow.js +13 -3
  215. package/dist/esm/components/table/MrlTableRow/MrlTableRow.js.map +1 -1
  216. package/dist/esm/components/tabs/MrlTab/MrlTab.js +10 -1
  217. package/dist/esm/components/tabs/MrlTab/MrlTab.js.map +1 -1
  218. package/dist/esm/components/tabs/MrlTabLink/MrlTabLink.js +10 -1
  219. package/dist/esm/components/tabs/MrlTabLink/MrlTabLink.js.map +1 -1
  220. package/dist/esm/components/toolbar/MrlToolbarButton/MrlToolbarButton.js +19 -3
  221. package/dist/esm/components/toolbar/MrlToolbarButton/MrlToolbarButton.js.map +1 -1
  222. package/dist/esm/components/tooltip/MrlTooltip/MrlTooltip.js +23 -1
  223. package/dist/esm/components/tooltip/MrlTooltip/MrlTooltip.js.map +1 -1
  224. package/dist/esm/hooks/useMrlAnalytics/useMrlAnalytics.js +7 -7
  225. package/dist/esm/hooks/useMrlAnalytics/useMrlAnalytics.js.map +1 -1
  226. package/dist/esm/version.js +1 -1
  227. package/dist/esm/version.js.map +1 -1
  228. package/dist/hooks/useMrlAnalytics/useMrlAnalytics.d.ts +4 -4
  229. package/dist/types/components/avatar/MrlAvatarButton/MrlAvatarButton.d.ts +6 -1
  230. package/dist/types/components/breadcrumb/MrlBreadcrumbItem/MrlBreadcrumbItem.d.ts +5 -0
  231. package/dist/types/components/button/MrlButton/MrlButton.d.ts +1 -1
  232. package/dist/types/components/button/MrlIconButton/MrlIconButton.d.ts +5 -0
  233. package/dist/types/components/callout/MrlCallout/MrlCallout.d.ts +7 -0
  234. package/dist/types/components/filter/MrlFilter/MrlFilter.d.ts +7 -0
  235. package/dist/types/components/filter/MrlFilterItem/MrlFilterItem.d.ts +7 -0
  236. package/dist/types/components/form/checkbox/MrlCheckbox/MrlCheckbox.d.ts +6 -1
  237. package/dist/types/components/form/checkbox/MrlCheckboxStandalone/MrlCheckboxStandalone.d.ts +6 -1
  238. package/dist/types/components/form/date-picker/MrlDatePicker.d.ts +7 -0
  239. package/dist/types/components/form/legacy-select/MrlLegacySelect/MrlLegacySelect.d.ts +6 -1
  240. package/dist/types/components/form/legacy-select/MrlLegacySelectItem/MrlLegacySelectItem.d.ts +8 -1
  241. package/dist/types/components/form/radio/MrlRadioButton/MrlRadioButton.d.ts +6 -1
  242. package/dist/types/components/form/radio/MrlRadioButtonStandalone/MrlRadioButtonStandalone.d.ts +6 -1
  243. package/dist/types/components/form/select/MrlCreatableSelect/MrlCreatableSelect.d.ts +7 -0
  244. package/dist/types/components/form/select/MrlMultiCreatableSelect/MrlMultiCreatableSelect.d.ts +7 -0
  245. package/dist/types/components/form/select/MrlMultiSelect/MrlMultiSelect.d.ts +7 -0
  246. package/dist/types/components/form/select/MrlSelect/MrlSelect.d.ts +7 -0
  247. package/dist/types/components/form/switch/MrlSwitch/MrlSwitch.d.ts +6 -1
  248. package/dist/types/components/form/switch/MrlSwitchStandalone/MrlSwitchStandalone.d.ts +6 -1
  249. package/dist/types/components/form/text-input/MrlEditableTextInput/MrlEditableTextInput.d.ts +8 -0
  250. package/dist/types/components/form/text-input/MrlTextInput/MrlTextInput.d.ts +8 -0
  251. package/dist/types/components/form/textarea/MrlEditableTextarea/MrlEditableTextarea.d.ts +8 -0
  252. package/dist/types/components/form/textarea/MrlTextarea/MrlTextarea.d.ts +9 -1
  253. package/dist/types/components/layout/MrlSidebar/MrlSidebar.d.ts +8 -1
  254. package/dist/types/components/link/MrlLink/MrlLink.d.ts +6 -1
  255. package/dist/types/components/link/MrlLinkButton/MrlLinkButton.d.ts +5 -0
  256. package/dist/types/components/menu/MrlMenu/MrlMenu.d.ts +6 -1
  257. package/dist/types/components/menu/MrlMenuItem/MrlMenuItem.d.ts +6 -1
  258. package/dist/types/components/menu/MrlMenuItemLink/MrlMenuItemLink.d.ts +6 -1
  259. package/dist/types/components/modal/MrlModal/MrlModal.d.ts +5 -0
  260. package/dist/types/components/notification/MrlBlockNotification/MrlBlockNotification.d.ts +7 -0
  261. package/dist/types/components/notification/MrlToast/MrlToast.d.ts +8 -1
  262. package/dist/types/components/pagination/MrlPaginationButton/MrlPaginationButton.d.ts +6 -1
  263. package/dist/types/components/panel/MrlPanel/MrlPanel.d.ts +8 -0
  264. package/dist/types/components/popover/MrlPopover/MrlPopover.d.ts +6 -1
  265. package/dist/types/components/table/MrlSmartTable/MrlSmartTable.d.ts +7 -0
  266. package/dist/types/components/table/MrlTableRow/MrlTableRow.d.ts +7 -0
  267. package/dist/types/components/tabs/MrlTab/MrlTab.d.ts +6 -1
  268. package/dist/types/components/tabs/MrlTabLink/MrlTabLink.d.ts +6 -1
  269. package/dist/types/components/toolbar/MrlToolbarButton/MrlToolbarButton.d.ts +5 -0
  270. package/dist/types/components/tooltip/MrlTooltip/MrlTooltip.d.ts +8 -0
  271. package/dist/types/contexts/MrlAnalyticsContext/types.d.ts +1 -1
  272. package/dist/types/hooks/useMrlAnalytics/useMrlAnalytics.d.ts +4 -4
  273. package/package.json +1 -1
@@ -12,12 +12,13 @@ import { useTransition, animated } from '@react-spring/web';
12
12
  import { isTouchDevice } from '../../../utils/isTouch/index.js';
13
13
  import { getScrollableParent } from '../utilities/get-scrollable-parent.js';
14
14
  import { useMenuScroll } from '../hooks/useMenuScroll.js';
15
+ import { useMrlTrackInteraction } from '../../../hooks/useMrlAnalytics/useMrlAnalytics.js';
15
16
  import { isElementAriaDisabled } from '../../../utils/isElementAriaDisabled/isElementAriaDisabled.js';
16
17
  import { preventDefault } from '../../../utils/preventDefault/preventDefault.js';
17
18
  import { findAdjacentInteractiveElement } from '../../../utils/findAdjacentInteractiveElement/findAdjacentInteractiveElement.js';
18
19
  import { MrlPortal } from '../../portal/MrlPortal.js';
19
20
 
20
- var _excluded = ["actionState", "alignment", "children", "closeOnScroll", "closeParent", "customPosition", "clickOutsideEvent", "disableArrowOpen", "disableFlipping", "id", "isInternal", "isSubMenu", "spacing", "menuOffset", "portalProps", "position", "triggerStopPropagation", "onClose", "triggerRef"];
21
+ var _excluded = ["actionState", "alignment", "children", "closeOnScroll", "closeParent", "customPosition", "clickOutsideEvent", "disableArrowOpen", "disableFlipping", "id", "isInternal", "isSubMenu", "spacing", "menuOffset", "portalProps", "position", "triggerStopPropagation", "onClose", "eventId", "triggerRef"];
21
22
  var MENU_ITEM_SELECTOR = '[role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"]';
22
23
 
23
24
  /**
@@ -63,6 +64,7 @@ function MrlMenu(_ref) {
63
64
  _ref$triggerStopPropa = _ref.triggerStopPropagation,
64
65
  triggerStopPropagation = _ref$triggerStopPropa === void 0 ? false : _ref$triggerStopPropa,
65
66
  onClose = _ref.onClose,
67
+ eventId = _ref.eventId,
66
68
  triggerRef = _ref.triggerRef,
67
69
  remainingProps = _objectWithoutProperties(_ref, _excluded);
68
70
  var defaultOpenState = position === 'static' || false;
@@ -73,6 +75,23 @@ function MrlMenu(_ref) {
73
75
  _React$useState2 = _slicedToArray(_React$useState, 2),
74
76
  state = _React$useState2[0],
75
77
  setState = _React$useState2[1];
78
+ var trackInteraction = useMrlTrackInteraction('MrlMenu', eventId);
79
+ // the menu opens and closes from several paths (click, keyboard, hover, click outside),
80
+ // so open/close is emitted from the resulting state rather than each individual handler.
81
+ var wasOpenRef = React.useRef(defaultOpenState);
82
+ React.useEffect(() => {
83
+ var _state$actionType;
84
+ if (wasOpenRef.current === state.isOpen) return;
85
+ wasOpenRef.current = state.isOpen;
86
+ trackInteraction({
87
+ action: state.isOpen ? 'open' : 'close',
88
+ metadata: {
89
+ isSubMenu,
90
+ trigger: (_state$actionType = state.actionType) !== null && _state$actionType !== void 0 ? _state$actionType : 'unknown'
91
+ },
92
+ variant: position
93
+ });
94
+ }, [state.isOpen, state.actionType, isSubMenu, position, trackInteraction]);
76
95
  var menuRef = React.useRef(null);
77
96
  var listRef = React.useRef(null);
78
97
  var _React$useState3 = React.useState([]),
@@ -1 +1 @@
1
- {"version":3,"file":"MrlMenu.js","sources":["../../../../../src/components/menu/MrlMenu/MrlMenu.tsx"],"sourcesContent":["import * as React from 'react';\nimport { MrlPortal, PortalProps } from '../../../components';\nimport { useTriggerPosition } from '../../../hooks/useTriggerPosition';\nimport { useClickOutside } from '../../../hooks/useClickOutside';\nimport { useSubMenuElementPosition } from '../hooks/useSubMenuElementPosition';\nimport {\n\tMenuPosition,\n\tMenuAlignment,\n\tActionState,\n\tActionType,\n\tCustomMenuPosition\n} from '../constants';\nimport { PORTAL_LAYERS } from '../../../utils/layers';\nimport {\n\tfindAdjacentInteractiveElement,\n\tpreventDefault,\n\tisElementAriaDisabled\n} from '../../../utils';\nimport classnames from 'classnames';\nimport { MrlMenuContext } from '../context/MrlMenuContext';\nimport styles from './MrlMenu.module.scss';\nimport itemStyles from '../MrlMenuItem/MrlMenuItem.module.scss';\nimport { useTransition, animated } from '@react-spring/web';\nimport { isTouchDevice } from '../../../utils/isTouch';\nimport { getScrollableParent } from '../utilities/get-scrollable-parent';\nimport { useMenuScroll } from '../hooks/useMenuScroll';\n\nexport interface MrlMenuProps {\n\t/** Custom position for the menu */\n\tcustomPosition?: CustomMenuPosition;\n\n\t/** Children to be rendered within the menu component*/\n\tchildren: React.ReactNode;\n\n\t/** Event to close the menu */\n\tclickOutsideEvent?: 'mousedown' | 'mouseup' | 'click';\n\n\t/**\n\t * Enables closing the menu when scrolling. Default is false.\n\t *\n\t */\n\tcloseOnScroll?: boolean;\n\n\t/**\n\t * Private closeParent prop for use with MrlMenuItem\n\t *\n\t * !!! Please do not use this prop directly, it is only used internally by MrlMenuItem !!!\n\t * @private\n\t */\n\tcloseParent?: () => void;\n\n\t/**\n\t * Disable arrows from opening the menu\n\t * - This is useful when you want to disable the default browser behavior of opening a menu on arrow down.\n\t *\n\t * Example usage: the menu is within a vertical toolbar and you want to use the arrow keys to navigate the toolbar.\n\t * By using this prop you can disable the arrow key open/close so that navigating the toolbar does not conflict\n\t * with opening/closing the menu.\n\t */\n\tdisableArrowOpen?: boolean;\n\n\t/**\n\t * Disable flipping of the menu when it goes off the screen\n\t * @default false\n\t */\n\tdisableFlipping?: boolean;\n\n\t/** Unique identifier for the menu */\n\tid?: string;\n\n\t/**\n\t * Use when the menu is embedded within another component\n\t * Removes the following styles:\n\t * - padding on the menu\n\t * - drop shadow and border\n\t * @default false\n\t */\n\tisInternal?: boolean;\n\n\t/**\n\t * Private isSubMenu prop for use with MrlMenuItem\n\t *\n\t * !!! Please do not use this prop directly, it is only used internally by MrlMenuItem !!!\n\t * @private\n\t */\n\tisSubMenu?: boolean;\n\n\t/**\n\t * spacing of menu\n\t * - compact has less padding\n\t * @default 'default'\n\t */\n\tspacing?: 'default' | 'compact';\n\n\t/**\n\t * Offset of the menu from the trigger element in pixels\n\t * @default 10px\n\t */\n\tmenuOffset?: number;\n\n\t/**\n\t * Configuration for the portal component\n\t */\n\tportalProps?: Omit<PortalProps, 'children'>;\n\n\t/**\n\t * Horizontal and vertical alignment of the menu relative to the trigger element\n\t * - position 'left', 'right', 'top', 'bottom' position relative to the trigger\n\t * - position 'static' renders the menu in place, not using the portal\n\t * - position 'ignore' will not position the menu, allowing you to use the customPosition prop to position the element\n\t * @default 'bottom'\n\t */\n\tposition?: MenuPosition;\n\n\t/**\n\t * Set initial state of menu\n\t * @default { actionType: null, isOpen: false }\n\t */\n\tactionState?: ActionState;\n\n\t/**\n\t * Reference to the DOM element that triggers this menu.\n\t */\n\ttriggerRef?: React.RefObject<HTMLButtonElement>;\n\n\t/**\n\t * Trigger stop propagation on click\n\t *\n\t * In some instances we may want the trigger element to stop propogation to the\n\t * rest of the DOM. Use this flag to enable and disable it.\n\t * @default false\n\t */\n\ttriggerStopPropagation?: boolean;\n\n\t/**\n\t * Vertical and horizontal alignment of the menu relative to the position of the menu with the trigger\n\t * - 'left' and 'right' work with position 'top' and 'bottom'\n\t * - 'top' and 'bottom' work with position 'left' and 'right'\n\t * - 'center' works with all positions\n\t *\n\t * This does not impact submenus\n\t */\n\talignment?: MenuAlignment;\n\n\t/**\n\t * Callback to be called when the menu is closed\n\t * @param type - type of close event\n\t */\n\tonClose?: (type?: string) => void;\n}\n\nconst MENU_ITEM_SELECTOR = '[role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"menuitemradio\"]';\n\n/**\n * MrlMenu component\n *\n * Renders a menu component with alignment relative to a trigger element\n * @param {MrlMenuProps} props - The props for the MrlMenu component\n * @returns {Element} - rendered MrlMenu component\n */\nexport function MrlMenu({\n\tactionState = { actionType: null, isOpen: false },\n\talignment = 'center',\n\tchildren,\n\tcloseOnScroll = false,\n\tcloseParent,\n\tcustomPosition,\n\tclickOutsideEvent = 'mouseup',\n\tdisableArrowOpen,\n\tdisableFlipping = false,\n\tid,\n\tisInternal = false,\n\tisSubMenu = false,\n\tspacing = 'default',\n\tmenuOffset = 10,\n\tportalProps = { id: PORTAL_LAYERS.MENU.name },\n\tposition = 'bottom',\n\ttriggerStopPropagation = false,\n\tonClose,\n\ttriggerRef,\n\t...remainingProps\n}: MrlMenuProps): JSX.Element {\n\tconst defaultOpenState = position === 'static' || false;\n\n\tconst [state, setState] = React.useState({\n\t\tactionType: null,\n\t\tisOpen: defaultOpenState\n\t} as ActionState);\n\n\tconst menuRef = React.useRef<HTMLDivElement>(null);\n\tconst listRef = React.useRef<HTMLUListElement>(null);\n\tconst [menuItems, setMenuItems] = React.useState<HTMLButtonElement[]>([]);\n\tconst [menuRect, setMenuRect] = React.useState<DOMRect | null>(null);\n\n\t/**\n\t * Checks if the trigger element is disabled\n\t * @returns {boolean} - true if the trigger element is disabled, false otherwise\n\t */\n\tconst isTriggerDisabled = React.useCallback((): boolean => {\n\t\treturn isElementAriaDisabled(triggerRef?.current);\n\t}, [triggerRef]);\n\n\t/**\n\t * Sets up trigger event listeners to open and close the menu\n\t * @param e - mouse event\n\t */\n\tconst toggleMenuTrigger = React.useCallback(\n\t\t(e: MouseEvent) => {\n\t\t\tif (isTriggerDisabled()) return;\n\n\t\t\tif (triggerStopPropagation) {\n\t\t\t\tpreventDefault(e);\n\t\t\t}\n\n\t\t\tsetState((prevState) => ({ actionType: 'click', isOpen: !prevState.isOpen }));\n\t\t},\n\t\t[triggerStopPropagation, isTriggerDisabled]\n\t);\n\n\t/**\n\t * Used to display the menu when hovering over a menu item that has a submenu\n\t */\n\tconst showMenuHover = React.useCallback(() => {\n\t\tsetState({ actionType: 'click', isOpen: true });\n\t}, []);\n\n\tconst showMenuTap = React.useCallback(() => {\n\t\tsetState((prevState) => ({ actionType: 'click', isOpen: !prevState.isOpen }));\n\t}, []);\n\n\tconst hideMenuHover = React.useCallback(\n\t\t(event: MouseEvent) => {\n\t\t\tconst relatedTarget = event.relatedTarget as Node;\n\n\t\t\t// If the related target is not a child of the menu, close the menu\n\t\t\t// This prevents the menu from closing when hovering over a submenu item or trigger\n\t\t\tif (\n\t\t\t\ttriggerRef &&\n\t\t\t\tmenuRef.current &&\n\t\t\t\t!menuRef.current.contains(relatedTarget) &&\n\t\t\t\ttriggerRef.current &&\n\t\t\t\t!triggerRef.current.contains(relatedTarget)\n\t\t\t) {\n\t\t\t\tsetState({ actionType: null, isOpen: false });\n\t\t\t}\n\t\t},\n\t\t[triggerRef]\n\t);\n\n\t/**\n\t * Sets up trigger event listeners to open and close the menu with a keyboard\n\t */\n\tconst toggleMenuKey = React.useCallback(\n\t\t(e: KeyboardEvent) => {\n\t\t\tconst openMenu = () => {\n\t\t\t\tif (isTriggerDisabled()) return;\n\t\t\t\tsetState({ actionType: e.key as ActionType, isOpen: true });\n\t\t\t};\n\n\t\t\tif (!state.isOpen) {\n\t\t\t\tif (isSubMenu) {\n\t\t\t\t\tswitch (e.key) {\n\t\t\t\t\t\tcase 'ArrowRight':\n\t\t\t\t\t\tcase 'Enter':\n\t\t\t\t\t\tcase ' ':\n\t\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\t\topenMenu();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tswitch (e.key) {\n\t\t\t\t\tcase 'ArrowDown':\n\t\t\t\t\tcase 'ArrowUp':\n\t\t\t\t\t\tif (!disableArrowOpen && !isTriggerDisabled()) {\n\t\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\t\topenMenu();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Enter':\n\t\t\t\t\tcase ' ':\n\t\t\t\t\t\tif (isTriggerDisabled()) return;\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\topenMenu();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[state.isOpen, isTriggerDisabled, disableArrowOpen, isSubMenu]\n\t);\n\n\tconst closeMenu = React.useCallback(\n\t\t(shouldCloseParent = true) => {\n\t\t\tif (position === 'static') return;\n\n\t\t\t/**\n\t\t\t * What is closeParent?\n\t\t\t *\n\t\t\t * It is passed from the context provider to the MenuItem (which helps render our submenus)\n\t\t\t * When we render the submenu, we pass the closeMenu function as \"closeParent\" to the submenu.\n\t\t\t * This allows us to trigger closing the parent menu when the submenu is closed. And that's\n\t\t\t * what this call is for.\n\t\t\t */\n\t\t\tif (shouldCloseParent && closeParent) closeParent();\n\n\t\t\tsetState({ actionType: null, isOpen: false });\n\t\t\tonClose?.();\n\t\t},\n\t\t[position, closeParent, onClose]\n\t);\n\n\t/**\n\t * Click outside to dismiss the menu\n\t * @param e\n\t */\n\tconst disableClickOutside = !state.isOpen || position === 'static';\n\tuseClickOutside(menuRef, triggerRef, clickOutsideEvent, closeMenu, disableClickOutside);\n\n\tconst handleMenuKeyUp = (e: React.KeyboardEvent) => {\n\t\tconst actions: ActionType[] = ['ArrowUp', 'ArrowDown', 'ArrowRight', 'Enter', 'Escape', ' '];\n\n\t\tif (actions.includes(e.key as ActionType)) {\n\t\t\tpreventDefault(e);\n\t\t}\n\t};\n\n\t/**\n\t * Focus management when someone is using a keyboard to navigate the menu\n\t * @param e - keyboard event\n\t */\n\tconst handleMenuKey = (e: React.KeyboardEvent) => {\n\t\tconst currentIndex = menuItems.findIndex((item) => document.activeElement === item);\n\t\tlet nextIndex: number;\n\n\t\tif (state.isOpen) {\n\t\t\tswitch (e.key) {\n\t\t\t\tcase 'ArrowDown':\n\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\tnextIndex = currentIndex < menuItems.length - 1 ? currentIndex + 1 : currentIndex;\n\t\t\t\t\tmenuItems[nextIndex]?.focus();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ArrowUp':\n\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\tnextIndex = currentIndex > 0 ? currentIndex - 1 : 0;\n\t\t\t\t\tmenuItems[nextIndex]?.focus();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ArrowRight':\n\t\t\t\tcase 'ArrowLeft':\n\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Escape':\n\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\ttriggerRef?.current?.focus();\n\t\t\t\t\tcloseMenu(false);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Tab':\n\t\t\t\t\tif (!isSubMenu && position !== 'static') {\n\t\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\t\t// Handle shift + tab: move focus to the previous item\n\t\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\t\tif (triggerRef) {\n\t\t\t\t\t\t\t\tconst prevElement = findAdjacentInteractiveElement(triggerRef, 'previous');\n\t\t\t\t\t\t\t\tprevElement?.focus();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Regular tab: close the menu or move to the next item\n\t\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\t\tif (triggerRef) {\n\t\t\t\t\t\t\t\tconst nextElement = findAdjacentInteractiveElement(triggerRef);\n\t\t\t\t\t\t\t\tnextElement?.focus();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcloseMenu();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * useEffect hooks to handle menu state changes\n\t */\n\n\tReact.useEffect(() => {\n\t\tif (triggerRef?.current) {\n\t\t\ttriggerRef.current.setAttribute('aria-haspopup', 'menu');\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n\n\tReact.useEffect(() => {\n\t\tif (position === 'static') {\n\t\t\tsetState({ actionType: 'click', isOpen: true });\n\t\t}\n\t}, [position]);\n\n\tReact.useEffect(() => {\n\t\ttriggerRef?.current?.setAttribute('aria-expanded', state.isOpen.toString());\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [state.isOpen]);\n\n\tReact.useEffect(() => {\n\t\tif (!isSubMenu && position !== 'static')\n\t\t\tsetState({ actionType: actionState.actionType, isOpen: actionState.isOpen });\n\t}, [actionState.isOpen, actionState.actionType, isSubMenu, position]);\n\n\t// setup event handlers for mouse, keyboard, and scroll interactions\n\tReact.useEffect(() => {\n\t\tconst triggerElement = triggerRef?.current;\n\t\tconst menuElement = menuRef?.current;\n\t\tconst menuItems = menuElement?.querySelectorAll(MENU_ITEM_SELECTOR);\n\n\t\tlet scrollableParent: HTMLElement | Window;\n\n\t\tif (triggerElement) {\n\t\t\ttriggerElement.addEventListener('mousedown', preventDefault);\n\t\t\tif (!isSubMenu) triggerElement.addEventListener('click', toggleMenuTrigger);\n\t\t\ttriggerElement.addEventListener('keydown', toggleMenuKey);\n\n\t\t\t// Setup event listeners for when the menu is a submenu\n\t\t\tif (isSubMenu) {\n\t\t\t\ttriggerElement.addEventListener('mouseover', showMenuHover);\n\t\t\t\ttriggerElement.addEventListener('mouseout', hideMenuHover);\n\n\t\t\t\tif (isTouchDevice()) {\n\t\t\t\t\ttriggerElement.addEventListener('touchend', showMenuTap);\n\t\t\t\t}\n\n\t\t\t\tif (menuElement) {\n\t\t\t\t\tmenuElement.addEventListener('mouseover', showMenuHover);\n\t\t\t\t\tmenuElement.addEventListener('mouseout', hideMenuHover);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (closeOnScroll) {\n\t\t\t\tscrollableParent = getScrollableParent(triggerElement);\n\t\t\t\tif (scrollableParent) {\n\t\t\t\t\tscrollableParent.addEventListener('scroll', () => closeMenu(), {\n\t\t\t\t\t\tcapture: true,\n\t\t\t\t\t\tpassive: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\ttriggerElement.removeEventListener('mousedown', preventDefault);\n\t\t\t\tif (!isSubMenu) triggerElement.removeEventListener('click', toggleMenuTrigger);\n\t\t\t\ttriggerElement.removeEventListener('keydown', toggleMenuKey);\n\n\t\t\t\tif (menuItems) {\n\t\t\t\t\tmenuItems.forEach((item: Element) => {\n\t\t\t\t\t\tif (!item.getAttribute('aria-haspopup')) {\n\t\t\t\t\t\t\titem.removeEventListener('mousedown', () => closeMenu());\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (isSubMenu) {\n\t\t\t\t\ttriggerElement.removeEventListener('mouseover', showMenuHover);\n\t\t\t\t\ttriggerElement.removeEventListener('mouseout', hideMenuHover);\n\n\t\t\t\t\tif (isTouchDevice()) {\n\t\t\t\t\t\ttriggerElement.removeEventListener('touchstart', showMenuHover);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (menuElement) {\n\t\t\t\t\t\tmenuElement.removeEventListener('mouseover', showMenuHover);\n\t\t\t\t\t\tmenuElement.removeEventListener('mouseout', hideMenuHover);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (closeOnScroll && scrollableParent) {\n\t\t\t\t\tscrollableParent.removeEventListener('scroll', () => closeMenu());\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}, [\n\t\tcloseOnScroll,\n\t\tisSubMenu,\n\t\ttriggerRef,\n\t\ttoggleMenuTrigger,\n\t\ttoggleMenuKey,\n\t\tshowMenuHover,\n\t\thideMenuHover,\n\t\tcloseMenu,\n\t\tshowMenuTap\n\t]);\n\n\t// This use effect handles a few things when we open the menu:\n\t// - making sure that the menu component is aware of it's menu items\n\t// - adding a class to the trigger element when the submenu is open for styling\n\t// - storing the menu rect in state for positioning calculations\n\tReact.useEffect(() => {\n\t\tif (state.isOpen) {\n\t\t\tconst foundMenuItems = Array.from(\n\t\t\t\tmenuRef.current?.querySelectorAll(MENU_ITEM_SELECTOR) || []\n\t\t\t) as HTMLButtonElement[];\n\n\t\t\tsetMenuItems(foundMenuItems);\n\t\t}\n\n\t\tif (state.isOpen && isSubMenu) {\n\t\t\ttriggerRef?.current?.classList.add(itemStyles['MrlMenuItem--item--submenuOpen']);\n\t\t} else if (!state.isOpen && isSubMenu) {\n\t\t\ttriggerRef?.current?.classList.remove(itemStyles['MrlMenuItem--item--submenuOpen']);\n\t\t}\n\n\t\t// For consistent submenu calculations, we are storing the menu rect in state\n\t\t// Anytime we need to use the menu rect, we want to make sure the values are based\n\t\t// on the original state of the menu for proper transformations\n\t\tif (!menuRect && menuRef.current) {\n\t\t\tconst newRect = menuRef.current?.getBoundingClientRect();\n\t\t\tsetMenuRect(newRect || null);\n\t\t}\n\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [state.isOpen, menuRect, isSubMenu]);\n\n\t/**\n\t * Focus management for when the menu is opening or closing\n\t */\n\tReact.useEffect(() => {\n\t\tif (menuItems.length > 0) {\n\t\t\tlet menuItemToFocus;\n\n\t\t\tswitch (state.actionType) {\n\t\t\t\tcase 'Enter':\n\t\t\t\tcase 'ArrowDown':\n\t\t\t\tcase ' ':\n\t\t\t\t\tmenuItemToFocus = menuItems[0];\n\t\t\t\t\tmenuItemToFocus?.focus();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ArrowUp':\n\t\t\t\t\tmenuItemToFocus = menuItems[menuItems.length - 1];\n\t\t\t\t\tmenuItemToFocus?.focus();\n\n\t\t\t\t\t// Scroll to the bottom of the menu when the last item is focused\n\t\t\t\t\t// setTimeout is required to ensure the element has been rendered\n\t\t\t\t\t// and the scrollHeight is accurate prior to scrolling\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (listRef.current) {\n\t\t\t\t\t\t\tlistRef.current.scrollTo(0, listRef.current.scrollHeight);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 20);\n\t\t\t}\n\n\t\t\tif (isSubMenu && state.actionType === 'ArrowRight') {\n\t\t\t\tmenuItemToFocus = menuItems[0];\n\t\t\t\tmenuItemToFocus?.focus();\n\t\t\t}\n\t\t}\n\t}, [isSubMenu, menuItems, state.actionType]);\n\n\t/**\n\t * Menu scroll behavior\n\t *\n\t * When the menu cannot fit in the preferred or flipped position,\n\t * this hook constrains the menu height and enables internal scrolling.\n\t * Called before useTriggerPosition so that isScrolling can disable flipping,\n\t * preventing the positioning hook from fighting the scroll constraint.\n\t */\n\tconst disableMenuScroll =\n\t\tisSubMenu || !state.isOpen || position === 'static' || position === 'ignore';\n\n\t/**\n\t * Sets overflow (scrolling) on menu when there is no space to display\n\t * the menu in the preferred or flipped position.\n\t */\n\tconst menuScroll = useMenuScroll(\n\t\ttriggerRef,\n\t\tlistRef,\n\t\tposition,\n\t\tmenuOffset,\n\t\tstate.isOpen,\n\t\tdisableMenuScroll\n\t);\n\n\t/**\n\t * Primary menu positioning, alignment, and transition styling\n\t *\n\t * This hook is only enabled if isSubMenu is FALSE\n\t */\n\tconst disableTriggerPosition = isSubMenu || !state.isOpen || position === 'static';\n\tconst menuPositionStyles = useTriggerPosition(\n\t\ttriggerRef,\n\t\tmenuRef,\n\t\t{\n\t\t\talign: alignment,\n\t\t\tcustomPosition: customPosition,\n\t\t\tposition: position\n\t\t},\n\t\tstate.isOpen,\n\t\tmenuOffset,\n\t\tdisableTriggerPosition,\n\t\tdisableFlipping || menuScroll.isScrolling\n\t);\n\n\t/**\n\t * Submenu positioning and alignment\n\t *\n\t * This hook is only enabled if isSubMenu is TRUE\n\t */\n\tconst subMenuPosition = useSubMenuElementPosition(\n\t\ttriggerRef,\n\t\tmenuRef,\n\t\tisSubMenu,\n\t\tstate.isOpen,\n\t\tmenuRect,\n\t\t// disable the subelement positioning if it's not a submenu\n\t\t!isSubMenu\n\t);\n\n\tconst inlineStyles = {\n\t\tmenu: {\n\t\t\tleft: menuPositionStyles.left,\n\t\t\tposition: 'fixed' as const,\n\t\t\ttop: menuPositionStyles.top\n\t\t},\n\t\tsubmenu: {\n\t\t\tleft: subMenuPosition.left,\n\t\t\ttop: subMenuPosition.top\n\t\t}\n\t};\n\n\t/**\n\t * React Spring transitions for the menu\n\t */\n\tconst transitionConfig = {\n\t\tconfig: { duration: state.isOpen ? 300 : 150 },\n\t\tenter: { opacity: 1, transform: 'translateY(0)' },\n\t\tfrom: { opacity: 0, transform: 'translateY(4px)' },\n\t\tleave: { opacity: 0, transform: 'translateY(4px)' }\n\t};\n\n\tconst transitionStatic = {\n\t\tconfig: { duration: 0 },\n\t\tenter: { opacity: 1, transform: 'translateY(0)' }\n\t};\n\n\tconst transitions = useTransition(\n\t\tstate.isOpen,\n\t\tposition === 'static' ? transitionStatic : transitionConfig\n\t);\n\n\tconst menuClasses = classnames(styles['MrlMenu'], 'MrlMenu', {\n\t\t[styles['MrlMenu--submenu']]: isSubMenu,\n\t\t[styles.open]: state.isOpen,\n\t\t[styles['MrlMenu--compact']]: spacing === 'compact',\n\t\t[styles['MrlMenu--static']]: position === 'static',\n\t\t[styles['MrlMenu--internal']]: isInternal,\n\t\t[styles['MrlMenu--scrolling']]: menuScroll.isScrolling,\n\t\t[styles['MrlMenu--ignore']]: position === 'ignore'\n\t});\n\n\tconst positionStyles = isSubMenu\n\t\t? inlineStyles.submenu\n\t\t: position !== 'static'\n\t\t\t? inlineStyles.menu\n\t\t\t: {};\n\n\tconst menuScrollStyles =\n\t\t(menuScroll.maxHeight !== undefined && { maxHeight: menuScroll.maxHeight }) || undefined;\n\n\tconst renderMenu = () => {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{transitions(\n\t\t\t\t\t(style, item) =>\n\t\t\t\t\t\titem && (\n\t\t\t\t\t\t\t<animated.div\n\t\t\t\t\t\t\t\tclassName={menuClasses}\n\t\t\t\t\t\t\t\tid={id}\n\t\t\t\t\t\t\t\tstyle={{ ...positionStyles, ...style }}\n\t\t\t\t\t\t\t\tonKeyUp={handleMenuKeyUp}\n\t\t\t\t\t\t\t\tonKeyDown={handleMenuKey}\n\t\t\t\t\t\t\t\tref={menuRef}\n\t\t\t\t\t\t\t\trole=\"none\"\n\t\t\t\t\t\t\t\t{...remainingProps}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ul ref={listRef} role=\"menu\" style={menuScrollStyles}>\n\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</animated.div>\n\t\t\t\t\t\t)\n\t\t\t\t)}\n\t\t\t</>\n\t\t);\n\t};\n\n\t// For managing and restoring focus to the original menu trigger\n\t// Ensures the triggerRef in context is always the parent triggerRef\n\tconst parentContext = React.useContext(MrlMenuContext);\n\tconst contextTriggerRef = isSubMenu ? parentContext?.triggerRef : triggerRef;\n\n\treturn (\n\t\t<MrlMenuContext.Provider\n\t\t\tvalue={{\n\t\t\t\tcloseMenu,\n\t\t\t\tcloseParent: !isSubMenu ? closeMenu : undefined,\n\t\t\t\ttriggerRef: contextTriggerRef\n\t\t\t}}\n\t\t>\n\t\t\t{isSubMenu || position === 'static' ? (\n\t\t\t\trenderMenu()\n\t\t\t) : (\n\t\t\t\t<MrlPortal layer={portalProps.layer || PORTAL_LAYERS.MENU} {...portalProps}>\n\t\t\t\t\t{renderMenu()}\n\t\t\t\t</MrlPortal>\n\t\t\t)}\n\t\t</MrlMenuContext.Provider>\n\t);\n\t/* eslint-enable */\n}\n\nMrlMenu.componentType = 'Menu';\n"],"names":["MENU_ITEM_SELECTOR","MrlMenu","_ref","_ref$actionState","actionState","actionType","isOpen","_ref$alignment","alignment","children","_ref$closeOnScroll","closeOnScroll","closeParent","customPosition","_ref$clickOutsideEven","clickOutsideEvent","disableArrowOpen","_ref$disableFlipping","disableFlipping","id","_ref$isInternal","isInternal","_ref$isSubMenu","isSubMenu","_ref$spacing","spacing","_ref$menuOffset","menuOffset","_ref$portalProps","portalProps","PORTAL_LAYERS","MENU","name","_ref$position","position","_ref$triggerStopPropa","triggerStopPropagation","onClose","triggerRef","remainingProps","_objectWithoutProperties","_excluded","defaultOpenState","_React$useState","React","useState","_React$useState2","_slicedToArray","state","setState","menuRef","useRef","listRef","_React$useState3","_React$useState4","menuItems","setMenuItems","_React$useState5","_React$useState6","menuRect","setMenuRect","isTriggerDisabled","useCallback","isElementAriaDisabled","current","toggleMenuTrigger","e","preventDefault","prevState","showMenuHover","showMenuTap","hideMenuHover","event","relatedTarget","contains","toggleMenuKey","openMenu","key","closeMenu","shouldCloseParent","arguments","length","undefined","disableClickOutside","useClickOutside","handleMenuKeyUp","actions","includes","handleMenuKey","_menuItems$nextIndex","_menuItems$nextIndex2","_triggerRef$current","currentIndex","findIndex","item","document","activeElement","nextIndex","focus","shiftKey","prevElement","findAdjacentInteractiveElement","nextElement","useEffect","setAttribute","_triggerRef$current2","toString","triggerElement","menuElement","querySelectorAll","scrollableParent","addEventListener","isTouchDevice","getScrollableParent","capture","passive","removeEventListener","forEach","getAttribute","_menuRef$current","foundMenuItems","Array","from","_triggerRef$current3","classList","add","itemStyles","_triggerRef$current4","remove","_menuRef$current2","newRect","getBoundingClientRect","_menuItemToFocus","_menuItemToFocus2","menuItemToFocus","setTimeout","scrollTo","scrollHeight","_menuItemToFocus3","disableMenuScroll","menuScroll","useMenuScroll","disableTriggerPosition","menuPositionStyles","useTriggerPosition","align","isScrolling","subMenuPosition","useSubMenuElementPosition","inlineStyles","menu","left","top","submenu","transitionConfig","config","duration","enter","opacity","transform","leave","transitionStatic","transitions","useTransition","menuClasses","classnames","styles","open","positionStyles","menuScrollStyles","maxHeight","renderMenu","createElement","Fragment","style","animated","div","_extends","className","_objectSpread","onKeyUp","onKeyDown","ref","role","parentContext","useContext","MrlMenuContext","contextTriggerRef","Provider","value","MrlPortal","layer","componentType"],"mappings":"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"}
1
+ {"version":3,"file":"MrlMenu.js","sources":["../../../../../src/components/menu/MrlMenu/MrlMenu.tsx"],"sourcesContent":["import * as React from 'react';\nimport { MrlPortal, PortalProps } from '../../../components';\nimport { useTriggerPosition } from '../../../hooks/useTriggerPosition';\nimport { useClickOutside } from '../../../hooks/useClickOutside';\nimport { useSubMenuElementPosition } from '../hooks/useSubMenuElementPosition';\nimport {\n\tMenuPosition,\n\tMenuAlignment,\n\tActionState,\n\tActionType,\n\tCustomMenuPosition\n} from '../constants';\nimport { PORTAL_LAYERS } from '../../../utils/layers';\nimport {\n\tfindAdjacentInteractiveElement,\n\tpreventDefault,\n\tisElementAriaDisabled\n} from '../../../utils';\nimport classnames from 'classnames';\nimport { MrlMenuContext } from '../context/MrlMenuContext';\nimport styles from './MrlMenu.module.scss';\nimport itemStyles from '../MrlMenuItem/MrlMenuItem.module.scss';\nimport { useTransition, animated } from '@react-spring/web';\nimport { isTouchDevice } from '../../../utils/isTouch';\nimport { getScrollableParent } from '../utilities/get-scrollable-parent';\nimport { useMenuScroll } from '../hooks/useMenuScroll';\nimport { useMrlTrackInteraction } from '../../../hooks/useMrlAnalytics';\n\nexport interface MrlMenuProps {\n\t/** Custom position for the menu */\n\tcustomPosition?: CustomMenuPosition;\n\n\t/** Children to be rendered within the menu component*/\n\tchildren: React.ReactNode;\n\n\t/** Event to close the menu */\n\tclickOutsideEvent?: 'mousedown' | 'mouseup' | 'click';\n\n\t/**\n\t * Enables closing the menu when scrolling. Default is false.\n\t *\n\t */\n\tcloseOnScroll?: boolean;\n\n\t/**\n\t * Private closeParent prop for use with MrlMenuItem\n\t *\n\t * !!! Please do not use this prop directly, it is only used internally by MrlMenuItem !!!\n\t * @private\n\t */\n\tcloseParent?: () => void;\n\n\t/**\n\t * Disable arrows from opening the menu\n\t * - This is useful when you want to disable the default browser behavior of opening a menu on arrow down.\n\t *\n\t * Example usage: the menu is within a vertical toolbar and you want to use the arrow keys to navigate the toolbar.\n\t * By using this prop you can disable the arrow key open/close so that navigating the toolbar does not conflict\n\t * with opening/closing the menu.\n\t */\n\tdisableArrowOpen?: boolean;\n\n\t/**\n\t * Disable flipping of the menu when it goes off the screen\n\t * @default false\n\t */\n\tdisableFlipping?: boolean;\n\n\t/** Unique identifier for the menu */\n\tid?: string;\n\n\t/**\n\t * Use when the menu is embedded within another component\n\t * Removes the following styles:\n\t * - padding on the menu\n\t * - drop shadow and border\n\t * @default false\n\t */\n\tisInternal?: boolean;\n\n\t/**\n\t * Private isSubMenu prop for use with MrlMenuItem\n\t *\n\t * !!! Please do not use this prop directly, it is only used internally by MrlMenuItem !!!\n\t * @private\n\t */\n\tisSubMenu?: boolean;\n\n\t/**\n\t * spacing of menu\n\t * - compact has less padding\n\t * @default 'default'\n\t */\n\tspacing?: 'default' | 'compact';\n\n\t/**\n\t * Offset of the menu from the trigger element in pixels\n\t * @default 10px\n\t */\n\tmenuOffset?: number;\n\n\t/**\n\t * Configuration for the portal component\n\t */\n\tportalProps?: Omit<PortalProps, 'children'>;\n\n\t/**\n\t * Horizontal and vertical alignment of the menu relative to the trigger element\n\t * - position 'left', 'right', 'top', 'bottom' position relative to the trigger\n\t * - position 'static' renders the menu in place, not using the portal\n\t * - position 'ignore' will not position the menu, allowing you to use the customPosition prop to position the element\n\t * @default 'bottom'\n\t */\n\tposition?: MenuPosition;\n\n\t/**\n\t * Set initial state of menu\n\t * @default { actionType: null, isOpen: false }\n\t */\n\tactionState?: ActionState;\n\n\t/**\n\t * Reference to the DOM element that triggers this menu.\n\t */\n\ttriggerRef?: React.RefObject<HTMLButtonElement>;\n\n\t/**\n\t * Trigger stop propagation on click\n\t *\n\t * In some instances we may want the trigger element to stop propogation to the\n\t * rest of the DOM. Use this flag to enable and disable it.\n\t * @default false\n\t */\n\ttriggerStopPropagation?: boolean;\n\n\t/**\n\t * Vertical and horizontal alignment of the menu relative to the position of the menu with the trigger\n\t * - 'left' and 'right' work with position 'top' and 'bottom'\n\t * - 'top' and 'bottom' work with position 'left' and 'right'\n\t * - 'center' works with all positions\n\t *\n\t * This does not impact submenus\n\t */\n\talignment?: MenuAlignment;\n\n\t/**\n\t * Callback to be called when the menu is closed\n\t * @param type - type of close event\n\t */\n\tonClose?: (type?: string) => void;\n\n\t/**\n\t * Enables interaction tracking for this menu. Provide a stable, non-PII id\n\t * (e.g. 'mural-context-menu'). When omitted, the menu emits no analytics.\n\t */\n\teventId?: string;\n}\n\nconst MENU_ITEM_SELECTOR = '[role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"menuitemradio\"]';\n\n/**\n * MrlMenu component\n *\n * Renders a menu component with alignment relative to a trigger element\n * @param {MrlMenuProps} props - The props for the MrlMenu component\n * @returns {Element} - rendered MrlMenu component\n */\nexport function MrlMenu({\n\tactionState = { actionType: null, isOpen: false },\n\talignment = 'center',\n\tchildren,\n\tcloseOnScroll = false,\n\tcloseParent,\n\tcustomPosition,\n\tclickOutsideEvent = 'mouseup',\n\tdisableArrowOpen,\n\tdisableFlipping = false,\n\tid,\n\tisInternal = false,\n\tisSubMenu = false,\n\tspacing = 'default',\n\tmenuOffset = 10,\n\tportalProps = { id: PORTAL_LAYERS.MENU.name },\n\tposition = 'bottom',\n\ttriggerStopPropagation = false,\n\tonClose,\n\teventId,\n\ttriggerRef,\n\t...remainingProps\n}: MrlMenuProps): JSX.Element {\n\tconst defaultOpenState = position === 'static' || false;\n\n\tconst [state, setState] = React.useState({\n\t\tactionType: null,\n\t\tisOpen: defaultOpenState\n\t} as ActionState);\n\n\tconst trackInteraction = useMrlTrackInteraction('MrlMenu', eventId);\n\t// the menu opens and closes from several paths (click, keyboard, hover, click outside),\n\t// so open/close is emitted from the resulting state rather than each individual handler.\n\tconst wasOpenRef = React.useRef(defaultOpenState);\n\n\tReact.useEffect(() => {\n\t\tif (wasOpenRef.current === state.isOpen) return;\n\n\t\twasOpenRef.current = state.isOpen;\n\n\t\ttrackInteraction({\n\t\t\taction: state.isOpen ? 'open' : 'close',\n\t\t\tmetadata: { isSubMenu, trigger: state.actionType ?? 'unknown' },\n\t\t\tvariant: position\n\t\t});\n\t}, [state.isOpen, state.actionType, isSubMenu, position, trackInteraction]);\n\n\tconst menuRef = React.useRef<HTMLDivElement>(null);\n\tconst listRef = React.useRef<HTMLUListElement>(null);\n\tconst [menuItems, setMenuItems] = React.useState<HTMLButtonElement[]>([]);\n\tconst [menuRect, setMenuRect] = React.useState<DOMRect | null>(null);\n\n\t/**\n\t * Checks if the trigger element is disabled\n\t * @returns {boolean} - true if the trigger element is disabled, false otherwise\n\t */\n\tconst isTriggerDisabled = React.useCallback((): boolean => {\n\t\treturn isElementAriaDisabled(triggerRef?.current);\n\t}, [triggerRef]);\n\n\t/**\n\t * Sets up trigger event listeners to open and close the menu\n\t * @param e - mouse event\n\t */\n\tconst toggleMenuTrigger = React.useCallback(\n\t\t(e: MouseEvent) => {\n\t\t\tif (isTriggerDisabled()) return;\n\n\t\t\tif (triggerStopPropagation) {\n\t\t\t\tpreventDefault(e);\n\t\t\t}\n\n\t\t\tsetState((prevState) => ({ actionType: 'click', isOpen: !prevState.isOpen }));\n\t\t},\n\t\t[triggerStopPropagation, isTriggerDisabled]\n\t);\n\n\t/**\n\t * Used to display the menu when hovering over a menu item that has a submenu\n\t */\n\tconst showMenuHover = React.useCallback(() => {\n\t\tsetState({ actionType: 'click', isOpen: true });\n\t}, []);\n\n\tconst showMenuTap = React.useCallback(() => {\n\t\tsetState((prevState) => ({ actionType: 'click', isOpen: !prevState.isOpen }));\n\t}, []);\n\n\tconst hideMenuHover = React.useCallback(\n\t\t(event: MouseEvent) => {\n\t\t\tconst relatedTarget = event.relatedTarget as Node;\n\n\t\t\t// If the related target is not a child of the menu, close the menu\n\t\t\t// This prevents the menu from closing when hovering over a submenu item or trigger\n\t\t\tif (\n\t\t\t\ttriggerRef &&\n\t\t\t\tmenuRef.current &&\n\t\t\t\t!menuRef.current.contains(relatedTarget) &&\n\t\t\t\ttriggerRef.current &&\n\t\t\t\t!triggerRef.current.contains(relatedTarget)\n\t\t\t) {\n\t\t\t\tsetState({ actionType: null, isOpen: false });\n\t\t\t}\n\t\t},\n\t\t[triggerRef]\n\t);\n\n\t/**\n\t * Sets up trigger event listeners to open and close the menu with a keyboard\n\t */\n\tconst toggleMenuKey = React.useCallback(\n\t\t(e: KeyboardEvent) => {\n\t\t\tconst openMenu = () => {\n\t\t\t\tif (isTriggerDisabled()) return;\n\t\t\t\tsetState({ actionType: e.key as ActionType, isOpen: true });\n\t\t\t};\n\n\t\t\tif (!state.isOpen) {\n\t\t\t\tif (isSubMenu) {\n\t\t\t\t\tswitch (e.key) {\n\t\t\t\t\t\tcase 'ArrowRight':\n\t\t\t\t\t\tcase 'Enter':\n\t\t\t\t\t\tcase ' ':\n\t\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\t\topenMenu();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tswitch (e.key) {\n\t\t\t\t\tcase 'ArrowDown':\n\t\t\t\t\tcase 'ArrowUp':\n\t\t\t\t\t\tif (!disableArrowOpen && !isTriggerDisabled()) {\n\t\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\t\topenMenu();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Enter':\n\t\t\t\t\tcase ' ':\n\t\t\t\t\t\tif (isTriggerDisabled()) return;\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\topenMenu();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[state.isOpen, isTriggerDisabled, disableArrowOpen, isSubMenu]\n\t);\n\n\tconst closeMenu = React.useCallback(\n\t\t(shouldCloseParent = true) => {\n\t\t\tif (position === 'static') return;\n\n\t\t\t/**\n\t\t\t * What is closeParent?\n\t\t\t *\n\t\t\t * It is passed from the context provider to the MenuItem (which helps render our submenus)\n\t\t\t * When we render the submenu, we pass the closeMenu function as \"closeParent\" to the submenu.\n\t\t\t * This allows us to trigger closing the parent menu when the submenu is closed. And that's\n\t\t\t * what this call is for.\n\t\t\t */\n\t\t\tif (shouldCloseParent && closeParent) closeParent();\n\n\t\t\tsetState({ actionType: null, isOpen: false });\n\t\t\tonClose?.();\n\t\t},\n\t\t[position, closeParent, onClose]\n\t);\n\n\t/**\n\t * Click outside to dismiss the menu\n\t * @param e\n\t */\n\tconst disableClickOutside = !state.isOpen || position === 'static';\n\tuseClickOutside(menuRef, triggerRef, clickOutsideEvent, closeMenu, disableClickOutside);\n\n\tconst handleMenuKeyUp = (e: React.KeyboardEvent) => {\n\t\tconst actions: ActionType[] = ['ArrowUp', 'ArrowDown', 'ArrowRight', 'Enter', 'Escape', ' '];\n\n\t\tif (actions.includes(e.key as ActionType)) {\n\t\t\tpreventDefault(e);\n\t\t}\n\t};\n\n\t/**\n\t * Focus management when someone is using a keyboard to navigate the menu\n\t * @param e - keyboard event\n\t */\n\tconst handleMenuKey = (e: React.KeyboardEvent) => {\n\t\tconst currentIndex = menuItems.findIndex((item) => document.activeElement === item);\n\t\tlet nextIndex: number;\n\n\t\tif (state.isOpen) {\n\t\t\tswitch (e.key) {\n\t\t\t\tcase 'ArrowDown':\n\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\tnextIndex = currentIndex < menuItems.length - 1 ? currentIndex + 1 : currentIndex;\n\t\t\t\t\tmenuItems[nextIndex]?.focus();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ArrowUp':\n\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\tnextIndex = currentIndex > 0 ? currentIndex - 1 : 0;\n\t\t\t\t\tmenuItems[nextIndex]?.focus();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ArrowRight':\n\t\t\t\tcase 'ArrowLeft':\n\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Escape':\n\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\ttriggerRef?.current?.focus();\n\t\t\t\t\tcloseMenu(false);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Tab':\n\t\t\t\t\tif (!isSubMenu && position !== 'static') {\n\t\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\t\t// Handle shift + tab: move focus to the previous item\n\t\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\t\tif (triggerRef) {\n\t\t\t\t\t\t\t\tconst prevElement = findAdjacentInteractiveElement(triggerRef, 'previous');\n\t\t\t\t\t\t\t\tprevElement?.focus();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Regular tab: close the menu or move to the next item\n\t\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\t\tif (triggerRef) {\n\t\t\t\t\t\t\t\tconst nextElement = findAdjacentInteractiveElement(triggerRef);\n\t\t\t\t\t\t\t\tnextElement?.focus();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcloseMenu();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * useEffect hooks to handle menu state changes\n\t */\n\n\tReact.useEffect(() => {\n\t\tif (triggerRef?.current) {\n\t\t\ttriggerRef.current.setAttribute('aria-haspopup', 'menu');\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n\n\tReact.useEffect(() => {\n\t\tif (position === 'static') {\n\t\t\tsetState({ actionType: 'click', isOpen: true });\n\t\t}\n\t}, [position]);\n\n\tReact.useEffect(() => {\n\t\ttriggerRef?.current?.setAttribute('aria-expanded', state.isOpen.toString());\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [state.isOpen]);\n\n\tReact.useEffect(() => {\n\t\tif (!isSubMenu && position !== 'static')\n\t\t\tsetState({ actionType: actionState.actionType, isOpen: actionState.isOpen });\n\t}, [actionState.isOpen, actionState.actionType, isSubMenu, position]);\n\n\t// setup event handlers for mouse, keyboard, and scroll interactions\n\tReact.useEffect(() => {\n\t\tconst triggerElement = triggerRef?.current;\n\t\tconst menuElement = menuRef?.current;\n\t\tconst menuItems = menuElement?.querySelectorAll(MENU_ITEM_SELECTOR);\n\n\t\tlet scrollableParent: HTMLElement | Window;\n\n\t\tif (triggerElement) {\n\t\t\ttriggerElement.addEventListener('mousedown', preventDefault);\n\t\t\tif (!isSubMenu) triggerElement.addEventListener('click', toggleMenuTrigger);\n\t\t\ttriggerElement.addEventListener('keydown', toggleMenuKey);\n\n\t\t\t// Setup event listeners for when the menu is a submenu\n\t\t\tif (isSubMenu) {\n\t\t\t\ttriggerElement.addEventListener('mouseover', showMenuHover);\n\t\t\t\ttriggerElement.addEventListener('mouseout', hideMenuHover);\n\n\t\t\t\tif (isTouchDevice()) {\n\t\t\t\t\ttriggerElement.addEventListener('touchend', showMenuTap);\n\t\t\t\t}\n\n\t\t\t\tif (menuElement) {\n\t\t\t\t\tmenuElement.addEventListener('mouseover', showMenuHover);\n\t\t\t\t\tmenuElement.addEventListener('mouseout', hideMenuHover);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (closeOnScroll) {\n\t\t\t\tscrollableParent = getScrollableParent(triggerElement);\n\t\t\t\tif (scrollableParent) {\n\t\t\t\t\tscrollableParent.addEventListener('scroll', () => closeMenu(), {\n\t\t\t\t\t\tcapture: true,\n\t\t\t\t\t\tpassive: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\ttriggerElement.removeEventListener('mousedown', preventDefault);\n\t\t\t\tif (!isSubMenu) triggerElement.removeEventListener('click', toggleMenuTrigger);\n\t\t\t\ttriggerElement.removeEventListener('keydown', toggleMenuKey);\n\n\t\t\t\tif (menuItems) {\n\t\t\t\t\tmenuItems.forEach((item: Element) => {\n\t\t\t\t\t\tif (!item.getAttribute('aria-haspopup')) {\n\t\t\t\t\t\t\titem.removeEventListener('mousedown', () => closeMenu());\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (isSubMenu) {\n\t\t\t\t\ttriggerElement.removeEventListener('mouseover', showMenuHover);\n\t\t\t\t\ttriggerElement.removeEventListener('mouseout', hideMenuHover);\n\n\t\t\t\t\tif (isTouchDevice()) {\n\t\t\t\t\t\ttriggerElement.removeEventListener('touchstart', showMenuHover);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (menuElement) {\n\t\t\t\t\t\tmenuElement.removeEventListener('mouseover', showMenuHover);\n\t\t\t\t\t\tmenuElement.removeEventListener('mouseout', hideMenuHover);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (closeOnScroll && scrollableParent) {\n\t\t\t\t\tscrollableParent.removeEventListener('scroll', () => closeMenu());\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}, [\n\t\tcloseOnScroll,\n\t\tisSubMenu,\n\t\ttriggerRef,\n\t\ttoggleMenuTrigger,\n\t\ttoggleMenuKey,\n\t\tshowMenuHover,\n\t\thideMenuHover,\n\t\tcloseMenu,\n\t\tshowMenuTap\n\t]);\n\n\t// This use effect handles a few things when we open the menu:\n\t// - making sure that the menu component is aware of it's menu items\n\t// - adding a class to the trigger element when the submenu is open for styling\n\t// - storing the menu rect in state for positioning calculations\n\tReact.useEffect(() => {\n\t\tif (state.isOpen) {\n\t\t\tconst foundMenuItems = Array.from(\n\t\t\t\tmenuRef.current?.querySelectorAll(MENU_ITEM_SELECTOR) || []\n\t\t\t) as HTMLButtonElement[];\n\n\t\t\tsetMenuItems(foundMenuItems);\n\t\t}\n\n\t\tif (state.isOpen && isSubMenu) {\n\t\t\ttriggerRef?.current?.classList.add(itemStyles['MrlMenuItem--item--submenuOpen']);\n\t\t} else if (!state.isOpen && isSubMenu) {\n\t\t\ttriggerRef?.current?.classList.remove(itemStyles['MrlMenuItem--item--submenuOpen']);\n\t\t}\n\n\t\t// For consistent submenu calculations, we are storing the menu rect in state\n\t\t// Anytime we need to use the menu rect, we want to make sure the values are based\n\t\t// on the original state of the menu for proper transformations\n\t\tif (!menuRect && menuRef.current) {\n\t\t\tconst newRect = menuRef.current?.getBoundingClientRect();\n\t\t\tsetMenuRect(newRect || null);\n\t\t}\n\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [state.isOpen, menuRect, isSubMenu]);\n\n\t/**\n\t * Focus management for when the menu is opening or closing\n\t */\n\tReact.useEffect(() => {\n\t\tif (menuItems.length > 0) {\n\t\t\tlet menuItemToFocus;\n\n\t\t\tswitch (state.actionType) {\n\t\t\t\tcase 'Enter':\n\t\t\t\tcase 'ArrowDown':\n\t\t\t\tcase ' ':\n\t\t\t\t\tmenuItemToFocus = menuItems[0];\n\t\t\t\t\tmenuItemToFocus?.focus();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ArrowUp':\n\t\t\t\t\tmenuItemToFocus = menuItems[menuItems.length - 1];\n\t\t\t\t\tmenuItemToFocus?.focus();\n\n\t\t\t\t\t// Scroll to the bottom of the menu when the last item is focused\n\t\t\t\t\t// setTimeout is required to ensure the element has been rendered\n\t\t\t\t\t// and the scrollHeight is accurate prior to scrolling\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (listRef.current) {\n\t\t\t\t\t\t\tlistRef.current.scrollTo(0, listRef.current.scrollHeight);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 20);\n\t\t\t}\n\n\t\t\tif (isSubMenu && state.actionType === 'ArrowRight') {\n\t\t\t\tmenuItemToFocus = menuItems[0];\n\t\t\t\tmenuItemToFocus?.focus();\n\t\t\t}\n\t\t}\n\t}, [isSubMenu, menuItems, state.actionType]);\n\n\t/**\n\t * Menu scroll behavior\n\t *\n\t * When the menu cannot fit in the preferred or flipped position,\n\t * this hook constrains the menu height and enables internal scrolling.\n\t * Called before useTriggerPosition so that isScrolling can disable flipping,\n\t * preventing the positioning hook from fighting the scroll constraint.\n\t */\n\tconst disableMenuScroll =\n\t\tisSubMenu || !state.isOpen || position === 'static' || position === 'ignore';\n\n\t/**\n\t * Sets overflow (scrolling) on menu when there is no space to display\n\t * the menu in the preferred or flipped position.\n\t */\n\tconst menuScroll = useMenuScroll(\n\t\ttriggerRef,\n\t\tlistRef,\n\t\tposition,\n\t\tmenuOffset,\n\t\tstate.isOpen,\n\t\tdisableMenuScroll\n\t);\n\n\t/**\n\t * Primary menu positioning, alignment, and transition styling\n\t *\n\t * This hook is only enabled if isSubMenu is FALSE\n\t */\n\tconst disableTriggerPosition = isSubMenu || !state.isOpen || position === 'static';\n\tconst menuPositionStyles = useTriggerPosition(\n\t\ttriggerRef,\n\t\tmenuRef,\n\t\t{\n\t\t\talign: alignment,\n\t\t\tcustomPosition: customPosition,\n\t\t\tposition: position\n\t\t},\n\t\tstate.isOpen,\n\t\tmenuOffset,\n\t\tdisableTriggerPosition,\n\t\tdisableFlipping || menuScroll.isScrolling\n\t);\n\n\t/**\n\t * Submenu positioning and alignment\n\t *\n\t * This hook is only enabled if isSubMenu is TRUE\n\t */\n\tconst subMenuPosition = useSubMenuElementPosition(\n\t\ttriggerRef,\n\t\tmenuRef,\n\t\tisSubMenu,\n\t\tstate.isOpen,\n\t\tmenuRect,\n\t\t// disable the subelement positioning if it's not a submenu\n\t\t!isSubMenu\n\t);\n\n\tconst inlineStyles = {\n\t\tmenu: {\n\t\t\tleft: menuPositionStyles.left,\n\t\t\tposition: 'fixed' as const,\n\t\t\ttop: menuPositionStyles.top\n\t\t},\n\t\tsubmenu: {\n\t\t\tleft: subMenuPosition.left,\n\t\t\ttop: subMenuPosition.top\n\t\t}\n\t};\n\n\t/**\n\t * React Spring transitions for the menu\n\t */\n\tconst transitionConfig = {\n\t\tconfig: { duration: state.isOpen ? 300 : 150 },\n\t\tenter: { opacity: 1, transform: 'translateY(0)' },\n\t\tfrom: { opacity: 0, transform: 'translateY(4px)' },\n\t\tleave: { opacity: 0, transform: 'translateY(4px)' }\n\t};\n\n\tconst transitionStatic = {\n\t\tconfig: { duration: 0 },\n\t\tenter: { opacity: 1, transform: 'translateY(0)' }\n\t};\n\n\tconst transitions = useTransition(\n\t\tstate.isOpen,\n\t\tposition === 'static' ? transitionStatic : transitionConfig\n\t);\n\n\tconst menuClasses = classnames(styles['MrlMenu'], 'MrlMenu', {\n\t\t[styles['MrlMenu--submenu']]: isSubMenu,\n\t\t[styles.open]: state.isOpen,\n\t\t[styles['MrlMenu--compact']]: spacing === 'compact',\n\t\t[styles['MrlMenu--static']]: position === 'static',\n\t\t[styles['MrlMenu--internal']]: isInternal,\n\t\t[styles['MrlMenu--scrolling']]: menuScroll.isScrolling,\n\t\t[styles['MrlMenu--ignore']]: position === 'ignore'\n\t});\n\n\tconst positionStyles = isSubMenu\n\t\t? inlineStyles.submenu\n\t\t: position !== 'static'\n\t\t\t? inlineStyles.menu\n\t\t\t: {};\n\n\tconst menuScrollStyles =\n\t\t(menuScroll.maxHeight !== undefined && { maxHeight: menuScroll.maxHeight }) || undefined;\n\n\tconst renderMenu = () => {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{transitions(\n\t\t\t\t\t(style, item) =>\n\t\t\t\t\t\titem && (\n\t\t\t\t\t\t\t<animated.div\n\t\t\t\t\t\t\t\tclassName={menuClasses}\n\t\t\t\t\t\t\t\tid={id}\n\t\t\t\t\t\t\t\tstyle={{ ...positionStyles, ...style }}\n\t\t\t\t\t\t\t\tonKeyUp={handleMenuKeyUp}\n\t\t\t\t\t\t\t\tonKeyDown={handleMenuKey}\n\t\t\t\t\t\t\t\tref={menuRef}\n\t\t\t\t\t\t\t\trole=\"none\"\n\t\t\t\t\t\t\t\t{...remainingProps}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ul ref={listRef} role=\"menu\" style={menuScrollStyles}>\n\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</animated.div>\n\t\t\t\t\t\t)\n\t\t\t\t)}\n\t\t\t</>\n\t\t);\n\t};\n\n\t// For managing and restoring focus to the original menu trigger\n\t// Ensures the triggerRef in context is always the parent triggerRef\n\tconst parentContext = React.useContext(MrlMenuContext);\n\tconst contextTriggerRef = isSubMenu ? parentContext?.triggerRef : triggerRef;\n\n\treturn (\n\t\t<MrlMenuContext.Provider\n\t\t\tvalue={{\n\t\t\t\tcloseMenu,\n\t\t\t\tcloseParent: !isSubMenu ? closeMenu : undefined,\n\t\t\t\ttriggerRef: contextTriggerRef\n\t\t\t}}\n\t\t>\n\t\t\t{isSubMenu || position === 'static' ? (\n\t\t\t\trenderMenu()\n\t\t\t) : (\n\t\t\t\t<MrlPortal layer={portalProps.layer || PORTAL_LAYERS.MENU} {...portalProps}>\n\t\t\t\t\t{renderMenu()}\n\t\t\t\t</MrlPortal>\n\t\t\t)}\n\t\t</MrlMenuContext.Provider>\n\t);\n\t/* eslint-enable */\n}\n\nMrlMenu.componentType = 'Menu';\n"],"names":["MENU_ITEM_SELECTOR","MrlMenu","_ref","_ref$actionState","actionState","actionType","isOpen","_ref$alignment","alignment","children","_ref$closeOnScroll","closeOnScroll","closeParent","customPosition","_ref$clickOutsideEven","clickOutsideEvent","disableArrowOpen","_ref$disableFlipping","disableFlipping","id","_ref$isInternal","isInternal","_ref$isSubMenu","isSubMenu","_ref$spacing","spacing","_ref$menuOffset","menuOffset","_ref$portalProps","portalProps","PORTAL_LAYERS","MENU","name","_ref$position","position","_ref$triggerStopPropa","triggerStopPropagation","onClose","eventId","triggerRef","remainingProps","_objectWithoutProperties","_excluded","defaultOpenState","_React$useState","React","useState","_React$useState2","_slicedToArray","state","setState","trackInteraction","useMrlTrackInteraction","wasOpenRef","useRef","useEffect","_state$actionType","current","action","metadata","trigger","variant","menuRef","listRef","_React$useState3","_React$useState4","menuItems","setMenuItems","_React$useState5","_React$useState6","menuRect","setMenuRect","isTriggerDisabled","useCallback","isElementAriaDisabled","toggleMenuTrigger","e","preventDefault","prevState","showMenuHover","showMenuTap","hideMenuHover","event","relatedTarget","contains","toggleMenuKey","openMenu","key","closeMenu","shouldCloseParent","arguments","length","undefined","disableClickOutside","useClickOutside","handleMenuKeyUp","actions","includes","handleMenuKey","_menuItems$nextIndex","_menuItems$nextIndex2","_triggerRef$current","currentIndex","findIndex","item","document","activeElement","nextIndex","focus","shiftKey","prevElement","findAdjacentInteractiveElement","nextElement","setAttribute","_triggerRef$current2","toString","triggerElement","menuElement","querySelectorAll","scrollableParent","addEventListener","isTouchDevice","getScrollableParent","capture","passive","removeEventListener","forEach","getAttribute","_menuRef$current","foundMenuItems","Array","from","_triggerRef$current3","classList","add","itemStyles","_triggerRef$current4","remove","_menuRef$current2","newRect","getBoundingClientRect","_menuItemToFocus","_menuItemToFocus2","menuItemToFocus","setTimeout","scrollTo","scrollHeight","_menuItemToFocus3","disableMenuScroll","menuScroll","useMenuScroll","disableTriggerPosition","menuPositionStyles","useTriggerPosition","align","isScrolling","subMenuPosition","useSubMenuElementPosition","inlineStyles","menu","left","top","submenu","transitionConfig","config","duration","enter","opacity","transform","leave","transitionStatic","transitions","useTransition","menuClasses","classnames","styles","open","positionStyles","menuScrollStyles","maxHeight","renderMenu","createElement","Fragment","style","animated","div","_extends","className","_objectSpread","onKeyUp","onKeyDown","ref","role","parentContext","useContext","MrlMenuContext","contextTriggerRef","Provider","value","MrlPortal","layer","componentType"],"mappings":"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"}
@@ -4,10 +4,11 @@ import { chevronRight, check } from '@muraldevkit/ds-icons';
4
4
  import classnames from 'classnames';
5
5
  import { MrlMenuContext } from '../context/MrlMenuContext.js';
6
6
  import styles from './MrlMenuItem.module.scss.js';
7
+ import { useMrlTrackInteraction } from '../../../hooks/useMrlAnalytics/useMrlAnalytics.js';
7
8
  import { getUniqueId } from '../../../utils/setAttributes/setAttributes.js';
8
9
  import { MrlSvg } from '../../svg/MrlSvg/MrlSvg.js';
9
10
 
10
- var _excluded = ["ariaDescribedBy", "ariaHasPopup", "children", "className", "dataQa", "disabled", "icon", "id", "onClick", "onMouseOut", "onMouseOver", "role", "selected"];
11
+ var _excluded = ["ariaDescribedBy", "ariaHasPopup", "children", "className", "dataQa", "disabled", "icon", "id", "onClick", "onMouseOut", "onMouseOver", "role", "selected", "eventId"];
11
12
  var getSubMenuType = child => {
12
13
  if (/*#__PURE__*/React.isValidElement(child)) {
13
14
  var type = child.type.componentType;
@@ -40,8 +41,10 @@ function MrlMenuItem(_ref) {
40
41
  _ref$role = _ref.role,
41
42
  role = _ref$role === void 0 ? 'menuitem' : _ref$role,
42
43
  selected = _ref.selected,
44
+ eventId = _ref.eventId,
43
45
  rest = _objectWithoutProperties(_ref, _excluded);
44
46
  var context = React.useContext(MrlMenuContext);
47
+ var trackInteraction = useMrlTrackInteraction('MrlMenuItem', eventId);
45
48
  var menuItemRef = React.useRef(null);
46
49
  var _React$useState = React.useState(false),
47
50
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -61,6 +64,13 @@ function MrlMenuItem(_ref) {
61
64
  var handleClick = e => {
62
65
  e.preventDefault();
63
66
  e.stopPropagation();
67
+ trackInteraction({
68
+ action: 'click',
69
+ metadata: {
70
+ selected: !!selected
71
+ },
72
+ variant: role
73
+ });
64
74
  onClick === null || onClick === void 0 ? void 0 : onClick(e);
65
75
  setFocusItem();
66
76
  if (context && !!context.closeMenu && !isSubElement) {
@@ -73,6 +83,13 @@ function MrlMenuItem(_ref) {
73
83
  if (e.key === ' ' && !disabled) {
74
84
  e.preventDefault();
75
85
  e.stopPropagation();
86
+ trackInteraction({
87
+ action: 'click',
88
+ metadata: {
89
+ selected: !!selected
90
+ },
91
+ variant: role
92
+ });
76
93
  onClick === null || onClick === void 0 ? void 0 : onClick();
77
94
 
78
95
  // close the menu if we are not a selectable item (checkbox or radio button)
@@ -1 +1 @@
1
- {"version":3,"file":"MrlMenuItem.js","sources":["../../../../../src/components/menu/MrlMenuItem/MrlMenuItem.tsx"],"sourcesContent":["import * as React from 'react';\nimport { check, chevronRight } from '@muraldevkit/ds-icons';\nimport classnames from 'classnames';\nimport { DSIconType, getUniqueId, MrlMenuProps, MrlPopoverProps, MrlSvg } from '../../../';\nimport { SubMenuTypes, ComponentWithComponentType, AriaHasPopup, MenuItemRole } from '../constants';\nimport { MrlMenuContext } from '../context/MrlMenuContext';\n\nimport styles from './MrlMenuItem.module.scss';\n\nexport interface MrlMenuItemProps {\n\t/** ID for associated description */\n\tariaDescribedBy?: string;\n\n\t/** Indicates whether the menu item has a popup menu using aria-haspopup attribute */\n\tariaHasPopup?: AriaHasPopup;\n\n\t/**\n\t Children to be rendered within the menu component\n\t */\n\tchildren: React.ReactNode | string;\n\n\t/** Classname for the menu item */\n\tclassName?: string;\n\n\t/** If the menu item is disabled */\n\tdisabled?: boolean;\n\n\t/** Icon for menu item */\n\ticon?: DSIconType;\n\n\t/** Unique ID for the menu item */\n\tid?: string;\n\n\t/** Callback to be called when the menu item is clicked */\n\tonClick?: (e?: React.MouseEvent<HTMLButtonElement>) => void;\n\n\t/** Callback to be called when the menu item is hovered */\n\tonMouseOver?: (e?: React.MouseEvent) => void;\n\n\t/** Callback to be called when the menu item is hovered out */\n\tonMouseOut?: (e?: React.MouseEvent) => void;\n\n\t/** Data-qa attribute for the menu item */\n\tdataQa?: string;\n\n\t/**\n\t * Role for the menu item\n\t *\n\t * When using `menuitemcheckbox` or `menuitemradio`, the menu item will be treated as a selectable item,\n\t * aria-checked will be set to 'true' or 'false' based on the selected state.\n\t *\n\t * @default 'menuitem' - for regular menu items\n\t * @example 'menuitemcheckbox' - for checkbox menu items\n\t * @example 'menuitemradio' - for radio menu items\n\t */\n\trole?: MenuItemRole;\n\n\t/** If the menu item is selected */\n\tselected?: boolean;\n}\n\nconst getSubMenuType = (child: React.ReactNode): SubMenuTypes | null => {\n\tif (React.isValidElement(child)) {\n\t\tconst type = (child.type as ComponentWithComponentType).componentType;\n\n\t\tif (type === 'Menu' || type === 'Popover') {\n\t\t\treturn type;\n\t\t}\n\t}\n\n\treturn null;\n};\n\n/**\n * MrlMenuItem component\n *\n * Renders a menu item to be used within the MrlMenu component\n * @param {MrlMenuItemProps} props - The props for the MrlMenuItem component\n * @returns {Element} - rendered MrlMenuItem component\n */\nexport function MrlMenuItem({\n\tariaDescribedBy,\n\tariaHasPopup,\n\tchildren,\n\tclassName,\n\tdataQa,\n\tdisabled,\n\ticon,\n\tid,\n\tonClick,\n\tonMouseOut,\n\tonMouseOver,\n\trole = 'menuitem',\n\tselected,\n\t...rest\n}: MrlMenuItemProps): JSX.Element {\n\tconst context = React.useContext(MrlMenuContext);\n\tconst menuItemRef = React.useRef<HTMLButtonElement>(null);\n\tconst [isSubElement, setIsSubElement] = React.useState(false);\n\tconst isSelectable = role === 'menuitemcheckbox' || role === 'menuitemradio';\n\n\tconst setFocusItem = (): void => {\n\t\tif (ariaHasPopup && ariaHasPopup !== 'menu' && context?.triggerRef?.current) {\n\t\t\tconst triggerElement = context.triggerRef.current;\n\t\t\tif (!triggerElement.id) {\n\t\t\t\ttriggerElement.id = getUniqueId('menu-trigger');\n\t\t\t}\n\n\t\t\tdocument.body.setAttribute('data-focus-item', triggerElement.id);\n\t\t}\n\t};\n\n\tconst handleClick = (e: React.MouseEvent<HTMLButtonElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tonClick?.(e);\n\n\t\tsetFocusItem();\n\n\t\tif (context && !!context.closeMenu && !isSubElement) {\n\t\t\tcontext.closeMenu();\n\t\t}\n\t};\n\n\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>): void => {\n\t\t// WCAG specifices that space key should toggle the selection of a checkbox or radio button\n\t\t// but not close the menu. When a user presses the enter key on these items the menu should close.\n\t\tif (e.key === ' ' && !disabled) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tonClick?.();\n\n\t\t\t// close the menu if we are not a selectable item (checkbox or radio button)\n\t\t\tif (!isSelectable) {\n\t\t\t\tsetFocusItem();\n\t\t\t\tcontext?.closeMenu?.();\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleDisabled = (e: React.MouseEvent<HTMLButtonElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t};\n\n\tconst handleFocusIn = (): void => {\n\t\tonMouseOver?.();\n\t};\n\n\tconst handleFocusOut = (): void => {\n\t\tonMouseOut?.();\n\t};\n\n\tconst renderMenu = () => {\n\t\treturn React.Children.map(children, (child) => {\n\t\t\tif (React.isValidElement(child)) {\n\t\t\t\tconst type = (child.type as ComponentWithComponentType).componentType;\n\n\t\t\t\tif (type === 'Menu') {\n\t\t\t\t\treturn React.cloneElement(child as React.ReactElement<Partial<MrlMenuProps>>, {\n\t\t\t\t\t\talignment: 'start',\n\t\t\t\t\t\tcloseParent: context?.closeParent,\n\t\t\t\t\t\tisSubMenu: true,\n\t\t\t\t\t\tposition: 'right',\n\t\t\t\t\t\ttriggerRef: menuItemRef\n\t\t\t\t\t});\n\t\t\t\t} else if (type === 'Popover') {\n\t\t\t\t\treturn React.cloneElement(child as React.ReactElement<Partial<MrlPopoverProps>>, {\n\t\t\t\t\t\talignment: 'start',\n\t\t\t\t\t\tisSubMenu: true,\n\t\t\t\t\t\tpoint: false,\n\t\t\t\t\t\tposition: 'right',\n\t\t\t\t\t\ttriggerRef: menuItemRef\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t};\n\n\tconst renderChildren = () => {\n\t\treturn React.Children.map(children, (child) => {\n\t\t\tif (!getSubMenuType(child)) {\n\t\t\t\treturn child;\n\t\t\t}\n\t\t\treturn null;\n\t\t});\n\t};\n\n\tReact.useEffect(() => {\n\t\tconst hasSubMenu = React.Children.toArray(children).some((child) => getSubMenuType(child));\n\n\t\tsetIsSubElement(hasSubMenu);\n\t}, [children]);\n\n\tconst menuItemClasses = classnames(styles['MrlMenuItem'], 'MrlMenuItem');\n\tconst menuTriggerClasses = classnames(\n\t\tstyles['MrlMenuItem--item'],\n\t\t'MrlMenuItem--item',\n\t\t{\n\t\t\t[styles['MrlMenuItem--item--selected']]: selected,\n\t\t\t[styles['MrlMenuItem--item--withIcon']]: !!icon\n\t\t},\n\t\tclassName\n\t);\n\n\tconst rightIcon = isSubElement ? chevronRight : selected ? check : null;\n\tconst hasPopup = isSubElement ? 'menu' : ariaHasPopup ? ariaHasPopup : undefined;\n\n\treturn (\n\t\t<li {...rest} className={menuItemClasses} data-qa={dataQa}>\n\t\t\t<button\n\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\taria-disabled={disabled}\n\t\t\t\taria-haspopup={hasPopup}\n\t\t\t\t{...(isSelectable ? { 'aria-checked': selected ? 'true' : 'false' } : {})}\n\t\t\t\tdata-selected={selected}\n\t\t\t\tdata-qa={dataQa && `${dataQa}-button`}\n\t\t\t\tid={id}\n\t\t\t\tref={menuItemRef}\n\t\t\t\trole={role}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={disabled ? handleDisabled : handleClick}\n\t\t\t\tonKeyDown={!disabled ? handleKeyDown : undefined}\n\t\t\t\tonMouseOver={!disabled && onMouseOver ? onMouseOver : undefined}\n\t\t\t\tonMouseOut={!disabled && onMouseOut ? onMouseOut : undefined}\n\t\t\t\tonFocus={!disabled && onMouseOver ? handleFocusIn : undefined}\n\t\t\t\tonBlur={!disabled && onMouseOut ? handleFocusOut : undefined}\n\t\t\t\tclassName={menuTriggerClasses}\n\t\t\t>\n\t\t\t\t{isSubElement && <div className={styles['MrlMenuItem--item--hoverArea']} />}\n\t\t\t\t{icon && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-left']}>\n\t\t\t\t\t\t<MrlSvg size=\"small\" svg={icon} />\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{renderChildren()}\n\t\t\t\t{rightIcon && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-right']}>\n\t\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-right-container']}>\n\t\t\t\t\t\t\t<MrlSvg svg={rightIcon} size=\"auto\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t\t{renderMenu()}\n\t\t</li>\n\t);\n}\n"],"names":["getSubMenuType","child","React","isValidElement","type","componentType","MrlMenuItem","_ref","ariaDescribedBy","ariaHasPopup","children","className","dataQa","disabled","icon","id","onClick","onMouseOut","onMouseOver","_ref$role","role","selected","rest","_objectWithoutProperties","_excluded","context","useContext","MrlMenuContext","menuItemRef","useRef","_React$useState","useState","_React$useState2","_slicedToArray","isSubElement","setIsSubElement","isSelectable","setFocusItem","_context$triggerRef","triggerRef","current","triggerElement","getUniqueId","document","body","setAttribute","handleClick","e","preventDefault","stopPropagation","closeMenu","handleKeyDown","key","_context$closeMenu","call","handleDisabled","handleFocusIn","handleFocusOut","renderMenu","Children","map","cloneElement","alignment","closeParent","isSubMenu","position","point","renderChildren","useEffect","hasSubMenu","toArray","some","menuItemClasses","classnames","styles","menuTriggerClasses","rightIcon","chevronRight","check","hasPopup","undefined","createElement","_extends","concat","ref","onKeyDown","onFocus","onBlur","MrlSvg","size","svg"],"mappings":"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"}
1
+ {"version":3,"file":"MrlMenuItem.js","sources":["../../../../../src/components/menu/MrlMenuItem/MrlMenuItem.tsx"],"sourcesContent":["import * as React from 'react';\nimport { check, chevronRight } from '@muraldevkit/ds-icons';\nimport classnames from 'classnames';\nimport { DSIconType, getUniqueId, MrlMenuProps, MrlPopoverProps, MrlSvg } from '../../../';\nimport { SubMenuTypes, ComponentWithComponentType, AriaHasPopup, MenuItemRole } from '../constants';\nimport { MrlMenuContext } from '../context/MrlMenuContext';\nimport { useMrlTrackInteraction } from '../../../hooks/useMrlAnalytics';\n\nimport styles from './MrlMenuItem.module.scss';\n\nexport interface MrlMenuItemProps {\n\t/** ID for associated description */\n\tariaDescribedBy?: string;\n\n\t/** Indicates whether the menu item has a popup menu using aria-haspopup attribute */\n\tariaHasPopup?: AriaHasPopup;\n\n\t/**\n\t Children to be rendered within the menu component\n\t */\n\tchildren: React.ReactNode | string;\n\n\t/** Classname for the menu item */\n\tclassName?: string;\n\n\t/** If the menu item is disabled */\n\tdisabled?: boolean;\n\n\t/** Icon for menu item */\n\ticon?: DSIconType;\n\n\t/** Unique ID for the menu item */\n\tid?: string;\n\n\t/** Callback to be called when the menu item is clicked */\n\tonClick?: (e?: React.MouseEvent<HTMLButtonElement>) => void;\n\n\t/** Callback to be called when the menu item is hovered */\n\tonMouseOver?: (e?: React.MouseEvent) => void;\n\n\t/** Callback to be called when the menu item is hovered out */\n\tonMouseOut?: (e?: React.MouseEvent) => void;\n\n\t/** Data-qa attribute for the menu item */\n\tdataQa?: string;\n\n\t/**\n\t * Role for the menu item\n\t *\n\t * When using `menuitemcheckbox` or `menuitemradio`, the menu item will be treated as a selectable item,\n\t * aria-checked will be set to 'true' or 'false' based on the selected state.\n\t *\n\t * @default 'menuitem' - for regular menu items\n\t * @example 'menuitemcheckbox' - for checkbox menu items\n\t * @example 'menuitemradio' - for radio menu items\n\t */\n\trole?: MenuItemRole;\n\n\t/** If the menu item is selected */\n\tselected?: boolean;\n\n\t/**\n\t * Enables interaction tracking for this menu item. Provide a stable, non-PII id\n\t * (e.g. 'mural-menu-duplicate'). When omitted, the menu item emits no analytics.\n\t */\n\teventId?: string;\n}\n\nconst getSubMenuType = (child: React.ReactNode): SubMenuTypes | null => {\n\tif (React.isValidElement(child)) {\n\t\tconst type = (child.type as ComponentWithComponentType).componentType;\n\n\t\tif (type === 'Menu' || type === 'Popover') {\n\t\t\treturn type;\n\t\t}\n\t}\n\n\treturn null;\n};\n\n/**\n * MrlMenuItem component\n *\n * Renders a menu item to be used within the MrlMenu component\n * @param {MrlMenuItemProps} props - The props for the MrlMenuItem component\n * @returns {Element} - rendered MrlMenuItem component\n */\nexport function MrlMenuItem({\n\tariaDescribedBy,\n\tariaHasPopup,\n\tchildren,\n\tclassName,\n\tdataQa,\n\tdisabled,\n\ticon,\n\tid,\n\tonClick,\n\tonMouseOut,\n\tonMouseOver,\n\trole = 'menuitem',\n\tselected,\n\teventId,\n\t...rest\n}: MrlMenuItemProps): JSX.Element {\n\tconst context = React.useContext(MrlMenuContext);\n\tconst trackInteraction = useMrlTrackInteraction('MrlMenuItem', eventId);\n\tconst menuItemRef = React.useRef<HTMLButtonElement>(null);\n\tconst [isSubElement, setIsSubElement] = React.useState(false);\n\tconst isSelectable = role === 'menuitemcheckbox' || role === 'menuitemradio';\n\n\tconst setFocusItem = (): void => {\n\t\tif (ariaHasPopup && ariaHasPopup !== 'menu' && context?.triggerRef?.current) {\n\t\t\tconst triggerElement = context.triggerRef.current;\n\t\t\tif (!triggerElement.id) {\n\t\t\t\ttriggerElement.id = getUniqueId('menu-trigger');\n\t\t\t}\n\n\t\t\tdocument.body.setAttribute('data-focus-item', triggerElement.id);\n\t\t}\n\t};\n\n\tconst handleClick = (e: React.MouseEvent<HTMLButtonElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\ttrackInteraction({ action: 'click', metadata: { selected: !!selected }, variant: role });\n\n\t\tonClick?.(e);\n\n\t\tsetFocusItem();\n\n\t\tif (context && !!context.closeMenu && !isSubElement) {\n\t\t\tcontext.closeMenu();\n\t\t}\n\t};\n\n\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>): void => {\n\t\t// WCAG specifices that space key should toggle the selection of a checkbox or radio button\n\t\t// but not close the menu. When a user presses the enter key on these items the menu should close.\n\t\tif (e.key === ' ' && !disabled) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\ttrackInteraction({ action: 'click', metadata: { selected: !!selected }, variant: role });\n\n\t\t\tonClick?.();\n\n\t\t\t// close the menu if we are not a selectable item (checkbox or radio button)\n\t\t\tif (!isSelectable) {\n\t\t\t\tsetFocusItem();\n\t\t\t\tcontext?.closeMenu?.();\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleDisabled = (e: React.MouseEvent<HTMLButtonElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t};\n\n\tconst handleFocusIn = (): void => {\n\t\tonMouseOver?.();\n\t};\n\n\tconst handleFocusOut = (): void => {\n\t\tonMouseOut?.();\n\t};\n\n\tconst renderMenu = () => {\n\t\treturn React.Children.map(children, (child) => {\n\t\t\tif (React.isValidElement(child)) {\n\t\t\t\tconst type = (child.type as ComponentWithComponentType).componentType;\n\n\t\t\t\tif (type === 'Menu') {\n\t\t\t\t\treturn React.cloneElement(child as React.ReactElement<Partial<MrlMenuProps>>, {\n\t\t\t\t\t\talignment: 'start',\n\t\t\t\t\t\tcloseParent: context?.closeParent,\n\t\t\t\t\t\tisSubMenu: true,\n\t\t\t\t\t\tposition: 'right',\n\t\t\t\t\t\ttriggerRef: menuItemRef\n\t\t\t\t\t});\n\t\t\t\t} else if (type === 'Popover') {\n\t\t\t\t\treturn React.cloneElement(child as React.ReactElement<Partial<MrlPopoverProps>>, {\n\t\t\t\t\t\talignment: 'start',\n\t\t\t\t\t\tisSubMenu: true,\n\t\t\t\t\t\tpoint: false,\n\t\t\t\t\t\tposition: 'right',\n\t\t\t\t\t\ttriggerRef: menuItemRef\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t};\n\n\tconst renderChildren = () => {\n\t\treturn React.Children.map(children, (child) => {\n\t\t\tif (!getSubMenuType(child)) {\n\t\t\t\treturn child;\n\t\t\t}\n\t\t\treturn null;\n\t\t});\n\t};\n\n\tReact.useEffect(() => {\n\t\tconst hasSubMenu = React.Children.toArray(children).some((child) => getSubMenuType(child));\n\n\t\tsetIsSubElement(hasSubMenu);\n\t}, [children]);\n\n\tconst menuItemClasses = classnames(styles['MrlMenuItem'], 'MrlMenuItem');\n\tconst menuTriggerClasses = classnames(\n\t\tstyles['MrlMenuItem--item'],\n\t\t'MrlMenuItem--item',\n\t\t{\n\t\t\t[styles['MrlMenuItem--item--selected']]: selected,\n\t\t\t[styles['MrlMenuItem--item--withIcon']]: !!icon\n\t\t},\n\t\tclassName\n\t);\n\n\tconst rightIcon = isSubElement ? chevronRight : selected ? check : null;\n\tconst hasPopup = isSubElement ? 'menu' : ariaHasPopup ? ariaHasPopup : undefined;\n\n\treturn (\n\t\t<li {...rest} className={menuItemClasses} data-qa={dataQa}>\n\t\t\t<button\n\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\taria-disabled={disabled}\n\t\t\t\taria-haspopup={hasPopup}\n\t\t\t\t{...(isSelectable ? { 'aria-checked': selected ? 'true' : 'false' } : {})}\n\t\t\t\tdata-selected={selected}\n\t\t\t\tdata-qa={dataQa && `${dataQa}-button`}\n\t\t\t\tid={id}\n\t\t\t\tref={menuItemRef}\n\t\t\t\trole={role}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={disabled ? handleDisabled : handleClick}\n\t\t\t\tonKeyDown={!disabled ? handleKeyDown : undefined}\n\t\t\t\tonMouseOver={!disabled && onMouseOver ? onMouseOver : undefined}\n\t\t\t\tonMouseOut={!disabled && onMouseOut ? onMouseOut : undefined}\n\t\t\t\tonFocus={!disabled && onMouseOver ? handleFocusIn : undefined}\n\t\t\t\tonBlur={!disabled && onMouseOut ? handleFocusOut : undefined}\n\t\t\t\tclassName={menuTriggerClasses}\n\t\t\t>\n\t\t\t\t{isSubElement && <div className={styles['MrlMenuItem--item--hoverArea']} />}\n\t\t\t\t{icon && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-left']}>\n\t\t\t\t\t\t<MrlSvg size=\"small\" svg={icon} />\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{renderChildren()}\n\t\t\t\t{rightIcon && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-right']}>\n\t\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-right-container']}>\n\t\t\t\t\t\t\t<MrlSvg svg={rightIcon} size=\"auto\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t\t{renderMenu()}\n\t\t</li>\n\t);\n}\n"],"names":["getSubMenuType","child","React","isValidElement","type","componentType","MrlMenuItem","_ref","ariaDescribedBy","ariaHasPopup","children","className","dataQa","disabled","icon","id","onClick","onMouseOut","onMouseOver","_ref$role","role","selected","eventId","rest","_objectWithoutProperties","_excluded","context","useContext","MrlMenuContext","trackInteraction","useMrlTrackInteraction","menuItemRef","useRef","_React$useState","useState","_React$useState2","_slicedToArray","isSubElement","setIsSubElement","isSelectable","setFocusItem","_context$triggerRef","triggerRef","current","triggerElement","getUniqueId","document","body","setAttribute","handleClick","e","preventDefault","stopPropagation","action","metadata","variant","closeMenu","handleKeyDown","key","_context$closeMenu","call","handleDisabled","handleFocusIn","handleFocusOut","renderMenu","Children","map","cloneElement","alignment","closeParent","isSubMenu","position","point","renderChildren","useEffect","hasSubMenu","toArray","some","menuItemClasses","classnames","styles","menuTriggerClasses","rightIcon","chevronRight","check","hasPopup","undefined","createElement","_extends","concat","ref","onKeyDown","onFocus","onBlur","MrlSvg","size","svg"],"mappings":"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"}
@@ -3,9 +3,10 @@ import * as React from 'react';
3
3
  import { linkOpen } from '@muraldevkit/ds-icons';
4
4
  import classnames from 'classnames';
5
5
  import styles from '../MrlMenuItem/MrlMenuItem.module.scss.js';
6
+ import { useMrlTrackInteraction } from '../../../hooks/useMrlAnalytics/useMrlAnalytics.js';
6
7
  import { MrlSvg } from '../../svg/MrlSvg/MrlSvg.js';
7
8
 
8
- var _excluded = ["ariaDescribedBy", "children", "className", "dataQa", "disabled", "href", "icon", "id", "onClick", "selected", "target"];
9
+ var _excluded = ["ariaDescribedBy", "children", "className", "dataQa", "disabled", "href", "icon", "id", "onClick", "selected", "target", "eventId"];
9
10
  /**
10
11
  * MrlMenuItem component
11
12
  *
@@ -26,8 +27,16 @@ function MrlMenuItemLink(_ref) {
26
27
  selected = _ref.selected,
27
28
  _ref$target = _ref.target,
28
29
  target = _ref$target === void 0 ? '_self' : _ref$target,
30
+ eventId = _ref.eventId,
29
31
  rest = _objectWithoutProperties(_ref, _excluded);
32
+ var trackInteraction = useMrlTrackInteraction('MrlMenuItemLink', eventId);
30
33
  var handleClick = e => {
34
+ trackInteraction({
35
+ action: 'click',
36
+ metadata: {
37
+ target
38
+ }
39
+ });
31
40
  onClick === null || onClick === void 0 ? void 0 : onClick(e);
32
41
  };
33
42
  var handleDisabled = e => {
@@ -1 +1 @@
1
- {"version":3,"file":"MrlMenuItemLink.js","sources":["../../../../../src/components/menu/MrlMenuItemLink/MrlMenuItemLink.tsx"],"sourcesContent":["import * as React from 'react';\nimport { linkOpen } from '@muraldevkit/ds-icons';\nimport classnames from 'classnames';\nimport { DSIconType, MrlSvg } from '../../../';\nimport styles from '../MrlMenuItem/MrlMenuItem.module.scss';\n\nexport interface MrlMenuItemLinkProps {\n\t/** ID for associated description */\n\tariaDescribedBy?: string;\n\n\t/**\n\t Children to be rendered within the menu component\n\t */\n\tchildren: React.ReactNode | string;\n\n\t/** Class names for the menu item */\n\tclassName?: string;\n\n\t/** If the menu item is disabled */\n\tdisabled?: boolean;\n\n\t/** Href for the menu item */\n\thref: string;\n\n\t/** Icon for menu item */\n\ticon?: DSIconType;\n\n\t/** Target for links */\n\ttarget?: string;\n\n\t/** Unique ID for the menu item */\n\tid?: string;\n\n\t/** Callback to be called when the menu item is clicked */\n\tonClick?: (e: React.MouseEvent<HTMLElement>) => void;\n\n\t/** Data-qa attribute for the menu item */\n\tdataQa?: string;\n\n\t/** If the menu item is selected */\n\tselected?: boolean;\n\n\t/** Rel attr for the menu item */\n\trel?: string;\n}\n\n/**\n * MrlMenuItem component\n *\n * Renders a menu item to be used within the MrlMenu component\n * @param {MrlMenuItemLinkProps} props - The props for the MrlMenuItem component\n * @returns {Element} - rendered MrlMenuItem component\n */\nexport function MrlMenuItemLink({\n\tariaDescribedBy,\n\tchildren,\n\tclassName,\n\tdataQa,\n\tdisabled,\n\thref,\n\ticon,\n\tid,\n\tonClick,\n\tselected,\n\ttarget = '_self',\n\t...rest\n}: MrlMenuItemLinkProps): JSX.Element {\n\tconst handleClick = (e: React.MouseEvent<HTMLElement>): void => {\n\t\tonClick?.(e);\n\t};\n\n\tconst handleDisabled = (e: React.MouseEvent<HTMLElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t};\n\n\tconst menuItemClasses = classnames(styles['MrlMenuItem'], 'MrlMenuItem', className);\n\tconst menuTriggerClasses = classnames(styles['MrlMenuItem--item'], 'MrlMenuItem--item');\n\n\tconst isExternalLink = target === '_blank';\n\tconst linkRel = isExternalLink ? 'noopener noreferrer' : rest.rel;\n\n\treturn (\n\t\t<li className={menuItemClasses} data-qa={dataQa}>\n\t\t\t<a\n\t\t\t\t{...rest}\n\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\taria-disabled={disabled}\n\t\t\t\tdata-selected={selected}\n\t\t\t\tdata-qa={dataQa && `${dataQa}-button`}\n\t\t\t\tid={id}\n\t\t\t\trole=\"menuitem\"\n\t\t\t\tonClick={disabled ? handleDisabled : handleClick}\n\t\t\t\tclassName={menuTriggerClasses}\n\t\t\t\trel={linkRel}\n\t\t\t\thref={href}\n\t\t\t\ttarget={target}\n\t\t\t>\n\t\t\t\t{icon && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--submenuIcon-left']}>\n\t\t\t\t\t\t<MrlSvg size=\"small\" svg={icon} />\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{children}\n\t\t\t\t{isExternalLink && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-right']}>\n\t\t\t\t\t\t<span className={styles['MrlMenuItem--item--linkOpenIcon']}>\n\t\t\t\t\t\t\t<MrlSvg svg={linkOpen} size=\"auto\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</a>\n\t\t</li>\n\t);\n}\n"],"names":["MrlMenuItemLink","_ref","ariaDescribedBy","children","className","dataQa","disabled","href","icon","id","onClick","selected","_ref$target","target","rest","_objectWithoutProperties","_excluded","handleClick","e","handleDisabled","preventDefault","stopPropagation","menuItemClasses","classnames","styles","menuTriggerClasses","isExternalLink","linkRel","rel","React","createElement","_extends","concat","role","MrlSvg","size","svg","linkOpen"],"mappings":"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"}
1
+ {"version":3,"file":"MrlMenuItemLink.js","sources":["../../../../../src/components/menu/MrlMenuItemLink/MrlMenuItemLink.tsx"],"sourcesContent":["import * as React from 'react';\nimport { linkOpen } from '@muraldevkit/ds-icons';\nimport classnames from 'classnames';\nimport { DSIconType, MrlSvg } from '../../../';\nimport { useMrlTrackInteraction } from '../../../hooks/useMrlAnalytics';\nimport styles from '../MrlMenuItem/MrlMenuItem.module.scss';\n\nexport interface MrlMenuItemLinkProps {\n\t/** ID for associated description */\n\tariaDescribedBy?: string;\n\n\t/**\n\t Children to be rendered within the menu component\n\t */\n\tchildren: React.ReactNode | string;\n\n\t/** Class names for the menu item */\n\tclassName?: string;\n\n\t/** If the menu item is disabled */\n\tdisabled?: boolean;\n\n\t/** Href for the menu item */\n\thref: string;\n\n\t/** Icon for menu item */\n\ticon?: DSIconType;\n\n\t/** Target for links */\n\ttarget?: string;\n\n\t/** Unique ID for the menu item */\n\tid?: string;\n\n\t/** Callback to be called when the menu item is clicked */\n\tonClick?: (e: React.MouseEvent<HTMLElement>) => void;\n\n\t/** Data-qa attribute for the menu item */\n\tdataQa?: string;\n\n\t/** If the menu item is selected */\n\tselected?: boolean;\n\n\t/** Rel attr for the menu item */\n\trel?: string;\n\n\t/**\n\t * Enables interaction tracking for this menu item. Provide a stable, non-PII id\n\t * (e.g. 'help-menu-docs'). When omitted, the menu item emits no analytics.\n\t */\n\teventId?: string;\n}\n\n/**\n * MrlMenuItem component\n *\n * Renders a menu item to be used within the MrlMenu component\n * @param {MrlMenuItemLinkProps} props - The props for the MrlMenuItem component\n * @returns {Element} - rendered MrlMenuItem component\n */\nexport function MrlMenuItemLink({\n\tariaDescribedBy,\n\tchildren,\n\tclassName,\n\tdataQa,\n\tdisabled,\n\thref,\n\ticon,\n\tid,\n\tonClick,\n\tselected,\n\ttarget = '_self',\n\teventId,\n\t...rest\n}: MrlMenuItemLinkProps): JSX.Element {\n\tconst trackInteraction = useMrlTrackInteraction('MrlMenuItemLink', eventId);\n\n\tconst handleClick = (e: React.MouseEvent<HTMLElement>): void => {\n\t\ttrackInteraction({ action: 'click', metadata: { target } });\n\n\t\tonClick?.(e);\n\t};\n\n\tconst handleDisabled = (e: React.MouseEvent<HTMLElement>): void => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t};\n\n\tconst menuItemClasses = classnames(styles['MrlMenuItem'], 'MrlMenuItem', className);\n\tconst menuTriggerClasses = classnames(styles['MrlMenuItem--item'], 'MrlMenuItem--item');\n\n\tconst isExternalLink = target === '_blank';\n\tconst linkRel = isExternalLink ? 'noopener noreferrer' : rest.rel;\n\n\treturn (\n\t\t<li className={menuItemClasses} data-qa={dataQa}>\n\t\t\t<a\n\t\t\t\t{...rest}\n\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\taria-disabled={disabled}\n\t\t\t\tdata-selected={selected}\n\t\t\t\tdata-qa={dataQa && `${dataQa}-button`}\n\t\t\t\tid={id}\n\t\t\t\trole=\"menuitem\"\n\t\t\t\tonClick={disabled ? handleDisabled : handleClick}\n\t\t\t\tclassName={menuTriggerClasses}\n\t\t\t\trel={linkRel}\n\t\t\t\thref={href}\n\t\t\t\ttarget={target}\n\t\t\t>\n\t\t\t\t{icon && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--submenuIcon-left']}>\n\t\t\t\t\t\t<MrlSvg size=\"small\" svg={icon} />\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{children}\n\t\t\t\t{isExternalLink && (\n\t\t\t\t\t<span className={styles['MrlMenuItem--item--icon-right']}>\n\t\t\t\t\t\t<span className={styles['MrlMenuItem--item--linkOpenIcon']}>\n\t\t\t\t\t\t\t<MrlSvg svg={linkOpen} size=\"auto\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</a>\n\t\t</li>\n\t);\n}\n"],"names":["MrlMenuItemLink","_ref","ariaDescribedBy","children","className","dataQa","disabled","href","icon","id","onClick","selected","_ref$target","target","eventId","rest","_objectWithoutProperties","_excluded","trackInteraction","useMrlTrackInteraction","handleClick","e","action","metadata","handleDisabled","preventDefault","stopPropagation","menuItemClasses","classnames","styles","menuTriggerClasses","isExternalLink","linkRel","rel","React","createElement","_extends","concat","role","MrlSvg","size","svg","linkOpen"],"mappings":"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"}
@@ -5,13 +5,14 @@ import { close } from '@muraldevkit/ds-icons';
5
5
  import classnames from 'classnames';
6
6
  import styles from './MrlModal.module.scss.js';
7
7
  import { PORTAL_LAYERS } from '../../../utils/layers/index.js';
8
+ import { useMrlTrackInteraction } from '../../../hooks/useMrlAnalytics/useMrlAnalytics.js';
8
9
  import { getUniqueId, setAttributes } from '../../../utils/setAttributes/setAttributes.js';
9
10
  import { MrlModalContext } from '../MrlModalContext/MrlModalContext.js';
10
11
  import { MrlFocusTrap } from '../../focus-trap/MrlFocusTrap/MrlFocusTrap.js';
11
12
  import { MrlIconButton } from '../../button/MrlIconButton/MrlIconButton.js';
12
13
  import { MrlSvg } from '../../svg/MrlSvg/MrlSvg.js';
13
14
 
14
- var _excluded = ["ariaLabel", "children", "className", "closable", "loading", "size", "state", "hookClose", "preventBackgroundScroll", "attrs"];
15
+ var _excluded = ["ariaLabel", "children", "className", "closable", "loading", "size", "state", "hookClose", "preventBackgroundScroll", "attrs", "eventId"];
15
16
  /**
16
17
  * Modal Component.
17
18
  * @param props - Modal props
@@ -35,7 +36,9 @@ var MrlModal = /*#__PURE__*/React.forwardRef(function MrlModal(props, ref) {
35
36
  preventBackgroundScroll = _props$preventBackgro === void 0 ? true : _props$preventBackgro,
36
37
  _props$attrs = props.attrs,
37
38
  attrs = _props$attrs === void 0 ? {} : _props$attrs,
39
+ eventId = props.eventId,
38
40
  rest = _objectWithoutProperties(props, _excluded);
41
+ var trackInteraction = useMrlTrackInteraction('MrlModal', eventId);
39
42
  /**
40
43
  * Reference to the modal container.
41
44
  */
@@ -194,6 +197,24 @@ var MrlModal = /*#__PURE__*/React.forwardRef(function MrlModal(props, ref) {
194
197
  setModalState(state);
195
198
  }, [state]);
196
199
 
200
+ /**
201
+ * Emits open/close from the resulting state so every close path — the close
202
+ * button, the overlay, and the escape key — is covered by a single event.
203
+ */
204
+ var prevModalStateRef = React.useRef(undefined);
205
+ React.useEffect(() => {
206
+ var prevModalState = prevModalStateRef.current;
207
+ prevModalStateRef.current = modalState;
208
+
209
+ // a modal that mounts closed was never opened, so it has nothing to report
210
+ if (prevModalState === undefined && modalState !== 'open') return;
211
+ if (prevModalState === modalState) return;
212
+ trackInteraction({
213
+ action: modalState === 'open' ? 'open' : 'close',
214
+ variant: size
215
+ });
216
+ }, [modalState, size, trackInteraction]);
217
+
197
218
  /**
198
219
  * ComponentDidLoad
199
220
  */