primeng 16.0.2 → 16.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. package/accordion/accordion.d.ts +47 -11
  2. package/api/primengconfig.d.ts +1 -1
  3. package/api/translation.d.ts +78 -0
  4. package/api/treenode.d.ts +1 -1
  5. package/avatar/avatar.d.ts +11 -1
  6. package/breadcrumb/breadcrumb.d.ts +5 -1
  7. package/button/button.d.ts +4 -1
  8. package/carousel/carousel.d.ts +17 -1
  9. package/chip/chip.d.ts +1 -0
  10. package/confirmdialog/confirmdialog.d.ts +7 -1
  11. package/contextmenu/contextmenu.d.ts +160 -68
  12. package/dialog/dialog.d.ts +1 -0
  13. package/dock/dock.d.ts +47 -2
  14. package/dom/domhandler.d.ts +1 -0
  15. package/dynamicdialog/dynamicdialog-config.d.ts +4 -0
  16. package/dynamicdialog/dynamicdialog.d.ts +2 -0
  17. package/esm2022/accordion/accordion.mjs +216 -54
  18. package/esm2022/animate/animate.mjs +7 -7
  19. package/esm2022/api/confirmationservice.mjs +3 -3
  20. package/esm2022/api/contextmenuservice.mjs +3 -3
  21. package/esm2022/api/filterservice.mjs +3 -3
  22. package/esm2022/api/messageservice.mjs +3 -3
  23. package/esm2022/api/overlayservice.mjs +3 -3
  24. package/esm2022/api/primengconfig.mjs +78 -5
  25. package/esm2022/api/shared.mjs +13 -13
  26. package/esm2022/api/translation.mjs +1 -1
  27. package/esm2022/api/treedragdropservice.mjs +3 -3
  28. package/esm2022/api/treenode.mjs +1 -1
  29. package/esm2022/autocomplete/autocomplete.mjs +10 -10
  30. package/esm2022/autofocus/autofocus.mjs +7 -7
  31. package/esm2022/avatar/avatar.mjs +24 -10
  32. package/esm2022/avatargroup/avatargroup.mjs +7 -7
  33. package/esm2022/badge/badge.mjs +10 -10
  34. package/esm2022/baseicon/baseicon.mjs +3 -3
  35. package/esm2022/blockui/blockui.mjs +26 -10
  36. package/esm2022/breadcrumb/breadcrumb.mjs +56 -39
  37. package/esm2022/button/button.mjs +47 -31
  38. package/esm2022/calendar/calendar.mjs +7 -7
  39. package/esm2022/card/card.mjs +10 -10
  40. package/esm2022/carousel/carousel.mjs +153 -27
  41. package/esm2022/cascadeselect/cascadeselect.mjs +10 -10
  42. package/esm2022/chart/chart.mjs +7 -7
  43. package/esm2022/checkbox/checkbox.mjs +7 -7
  44. package/esm2022/chip/chip.mjs +25 -20
  45. package/esm2022/chips/chips.mjs +7 -7
  46. package/esm2022/colorpicker/colorpicker.mjs +7 -7
  47. package/esm2022/confirmdialog/confirmdialog.mjs +28 -12
  48. package/esm2022/confirmpopup/confirmpopup.mjs +10 -8
  49. package/esm2022/contextmenu/contextmenu.mjs +1002 -552
  50. package/esm2022/dataview/dataview.mjs +10 -10
  51. package/esm2022/defer/defer.mjs +7 -7
  52. package/esm2022/dialog/dialog.mjs +21 -16
  53. package/esm2022/divider/divider.mjs +10 -10
  54. package/esm2022/dock/dock.mjs +290 -92
  55. package/esm2022/dom/domhandler.mjs +19 -7
  56. package/esm2022/dragdrop/dragdrop.mjs +10 -10
  57. package/esm2022/dropdown/dropdown.mjs +10 -10
  58. package/esm2022/dynamicdialog/dialogservice.mjs +3 -3
  59. package/esm2022/dynamicdialog/dynamicdialog-config.mjs +5 -1
  60. package/esm2022/dynamicdialog/dynamicdialog-ref.mjs +4 -1
  61. package/esm2022/dynamicdialog/dynamicdialog.mjs +23 -13
  62. package/esm2022/dynamicdialog/dynamicdialogcontent.mjs +3 -3
  63. package/esm2022/editor/editor.mjs +7 -7
  64. package/esm2022/fieldset/fieldset.mjs +66 -39
  65. package/esm2022/fileupload/fileupload.mjs +56 -48
  66. package/esm2022/focustrap/focustrap.mjs +7 -7
  67. package/esm2022/galleria/galleria.mjs +257 -48
  68. package/esm2022/icons/angledoubledown/angledoubledown.mjs +3 -3
  69. package/esm2022/icons/angledoubleleft/angledoubleleft.mjs +3 -3
  70. package/esm2022/icons/angledoubleright/angledoubleright.mjs +3 -3
  71. package/esm2022/icons/angledoubleup/angledoubleup.mjs +3 -3
  72. package/esm2022/icons/angledown/angledown.mjs +3 -3
  73. package/esm2022/icons/angleleft/angleleft.mjs +3 -3
  74. package/esm2022/icons/angleright/angleright.mjs +3 -3
  75. package/esm2022/icons/angleup/angleup.mjs +3 -3
  76. package/esm2022/icons/arrowdown/arrowdown.mjs +3 -3
  77. package/esm2022/icons/arrowdownleft/arrowdownleft.mjs +3 -3
  78. package/esm2022/icons/arrowdownright/arrowdownright.mjs +3 -3
  79. package/esm2022/icons/arrowleft/arrowleft.mjs +3 -3
  80. package/esm2022/icons/arrowright/arrowright.mjs +3 -3
  81. package/esm2022/icons/arrowup/arrowup.mjs +3 -3
  82. package/esm2022/icons/ban/ban.mjs +3 -3
  83. package/esm2022/icons/bars/bars.mjs +3 -3
  84. package/esm2022/icons/calendar/calendar.mjs +3 -3
  85. package/esm2022/icons/caretleft/caretleft.mjs +3 -3
  86. package/esm2022/icons/caretright/caretright.mjs +3 -3
  87. package/esm2022/icons/check/check.mjs +3 -3
  88. package/esm2022/icons/chevrondown/chevrondown.mjs +3 -3
  89. package/esm2022/icons/chevronleft/chevronleft.mjs +3 -3
  90. package/esm2022/icons/chevronright/chevronright.mjs +3 -3
  91. package/esm2022/icons/chevronup/chevronup.mjs +3 -3
  92. package/esm2022/icons/exclamationtriangle/exclamationtriangle.mjs +3 -3
  93. package/esm2022/icons/eye/eye.mjs +3 -3
  94. package/esm2022/icons/eyeslash/eyeslash.mjs +3 -3
  95. package/esm2022/icons/filter/filter.mjs +3 -3
  96. package/esm2022/icons/filterslash/filterslash.mjs +3 -3
  97. package/esm2022/icons/home/home.mjs +3 -3
  98. package/esm2022/icons/infocircle/infocircle.mjs +3 -3
  99. package/esm2022/icons/minus/minus.mjs +3 -3
  100. package/esm2022/icons/pencil/pencil.mjs +3 -3
  101. package/esm2022/icons/plus/plus.mjs +3 -3
  102. package/esm2022/icons/refresh/refresh.mjs +3 -3
  103. package/esm2022/icons/search/search.mjs +3 -3
  104. package/esm2022/icons/searchminus/searchminus.mjs +3 -3
  105. package/esm2022/icons/searchplus/searchplus.mjs +3 -3
  106. package/esm2022/icons/sortalt/sortalt.mjs +3 -3
  107. package/esm2022/icons/sortamountdown/sortamountdown.mjs +3 -3
  108. package/esm2022/icons/sortamountupalt/sortamountupalt.mjs +3 -3
  109. package/esm2022/icons/spinner/spinner.mjs +3 -3
  110. package/esm2022/icons/star/star.mjs +3 -3
  111. package/esm2022/icons/starfill/starfill.mjs +3 -3
  112. package/esm2022/icons/thlarge/thlarge.mjs +3 -3
  113. package/esm2022/icons/times/times.mjs +3 -3
  114. package/esm2022/icons/timescircle/timescircle.mjs +3 -3
  115. package/esm2022/icons/trash/trash.mjs +3 -3
  116. package/esm2022/icons/undo/undo.mjs +3 -3
  117. package/esm2022/icons/upload/upload.mjs +3 -3
  118. package/esm2022/icons/windowmaximize/windowmaximize.mjs +3 -3
  119. package/esm2022/icons/windowminimize/windowminimize.mjs +3 -3
  120. package/esm2022/image/image.mjs +76 -27
  121. package/esm2022/inplace/inplace.mjs +30 -23
  122. package/esm2022/inputmask/inputmask.mjs +7 -7
  123. package/esm2022/inputnumber/inputnumber.mjs +18 -8
  124. package/esm2022/inputswitch/inputswitch.mjs +7 -7
  125. package/esm2022/inputtext/inputtext.mjs +7 -7
  126. package/esm2022/inputtextarea/inputtextarea.mjs +7 -7
  127. package/esm2022/keyfilter/keyfilter.mjs +7 -7
  128. package/esm2022/knob/knob.mjs +7 -7
  129. package/esm2022/listbox/listbox.mjs +7 -7
  130. package/esm2022/megamenu/megamenu.mjs +1011 -353
  131. package/esm2022/menu/menu.mjs +414 -183
  132. package/esm2022/menubar/menubar.mjs +916 -294
  133. package/esm2022/message/message.mjs +7 -7
  134. package/esm2022/messages/messages.mjs +34 -34
  135. package/esm2022/multiselect/multiselect.mjs +12 -11
  136. package/esm2022/orderlist/orderlist.mjs +16 -22
  137. package/esm2022/organizationchart/organizationchart.mjs +15 -15
  138. package/esm2022/overlay/overlay.mjs +7 -7
  139. package/esm2022/overlaypanel/overlaypanel.mjs +12 -8
  140. package/esm2022/paginator/paginator.mjs +7 -7
  141. package/esm2022/panel/panel.mjs +51 -40
  142. package/esm2022/panelmenu/panelmenu.mjs +1007 -350
  143. package/esm2022/password/password.mjs +13 -13
  144. package/esm2022/picklist/picklist.mjs +7 -7
  145. package/esm2022/progressbar/progressbar.mjs +26 -22
  146. package/esm2022/progressspinner/progressspinner.mjs +12 -12
  147. package/esm2022/radiobutton/radiobutton.mjs +10 -10
  148. package/esm2022/rating/rating.mjs +7 -7
  149. package/esm2022/ripple/ripple.mjs +10 -8
  150. package/esm2022/scroller/scroller.mjs +7 -7
  151. package/esm2022/scrollpanel/scrollpanel.mjs +201 -29
  152. package/esm2022/scrolltop/scrolltop.mjs +17 -8
  153. package/esm2022/selectbutton/selectbutton.mjs +9 -9
  154. package/esm2022/sidebar/sidebar.mjs +51 -20
  155. package/esm2022/skeleton/skeleton.mjs +9 -9
  156. package/esm2022/slidemenu/slidemenu.mjs +1066 -372
  157. package/esm2022/slider/slider.mjs +7 -7
  158. package/esm2022/speeddial/speeddial.mjs +297 -21
  159. package/esm2022/spinner/spinner.mjs +7 -7
  160. package/esm2022/splitbutton/splitbutton.mjs +71 -16
  161. package/esm2022/splitter/splitter.mjs +166 -35
  162. package/esm2022/steps/steps.mjs +118 -28
  163. package/esm2022/styleclass/styleclass.mjs +7 -7
  164. package/esm2022/table/table.mjs +95 -89
  165. package/esm2022/tabmenu/tabmenu.mjs +208 -70
  166. package/esm2022/tabview/tabview.mjs +236 -53
  167. package/esm2022/tag/tag.mjs +7 -7
  168. package/esm2022/terminal/terminal.mjs +10 -10
  169. package/esm2022/terminal/terminalservice.mjs +3 -3
  170. package/esm2022/tieredmenu/tieredmenu.mjs +887 -400
  171. package/esm2022/timeline/timeline.mjs +9 -9
  172. package/esm2022/toast/toast.mjs +63 -35
  173. package/esm2022/togglebutton/togglebutton.mjs +9 -9
  174. package/esm2022/toolbar/toolbar.mjs +23 -16
  175. package/esm2022/tooltip/tooltip.mjs +14 -9
  176. package/esm2022/tree/tree.mjs +13 -13
  177. package/esm2022/treeselect/treeselect.mjs +7 -7
  178. package/esm2022/treetable/treetable.mjs +72 -72
  179. package/esm2022/tristatecheckbox/tristatecheckbox.mjs +7 -7
  180. package/esm2022/utils/objectutils.mjs +31 -1
  181. package/esm2022/utils/uniquecomponentid.mjs +2 -3
  182. package/esm2022/virtualscroller/virtualscroller.mjs +7 -7
  183. package/fesm2022/primeng-accordion.mjs +215 -53
  184. package/fesm2022/primeng-accordion.mjs.map +1 -1
  185. package/fesm2022/primeng-animate.mjs +7 -7
  186. package/fesm2022/primeng-api.mjs +108 -35
  187. package/fesm2022/primeng-api.mjs.map +1 -1
  188. package/fesm2022/primeng-autocomplete.mjs +9 -9
  189. package/fesm2022/primeng-autocomplete.mjs.map +1 -1
  190. package/fesm2022/primeng-autofocus.mjs +7 -7
  191. package/fesm2022/primeng-avatar.mjs +23 -9
  192. package/fesm2022/primeng-avatar.mjs.map +1 -1
  193. package/fesm2022/primeng-avatargroup.mjs +7 -7
  194. package/fesm2022/primeng-badge.mjs +10 -10
  195. package/fesm2022/primeng-baseicon.mjs +3 -3
  196. package/fesm2022/primeng-blockui.mjs +25 -9
  197. package/fesm2022/primeng-blockui.mjs.map +1 -1
  198. package/fesm2022/primeng-breadcrumb.mjs +55 -38
  199. package/fesm2022/primeng-breadcrumb.mjs.map +1 -1
  200. package/fesm2022/primeng-button.mjs +46 -30
  201. package/fesm2022/primeng-button.mjs.map +1 -1
  202. package/fesm2022/primeng-calendar.mjs +7 -7
  203. package/fesm2022/primeng-card.mjs +9 -9
  204. package/fesm2022/primeng-card.mjs.map +1 -1
  205. package/fesm2022/primeng-carousel.mjs +152 -26
  206. package/fesm2022/primeng-carousel.mjs.map +1 -1
  207. package/fesm2022/primeng-cascadeselect.mjs +10 -10
  208. package/fesm2022/primeng-chart.mjs +7 -7
  209. package/fesm2022/primeng-checkbox.mjs +7 -7
  210. package/fesm2022/primeng-chip.mjs +24 -19
  211. package/fesm2022/primeng-chip.mjs.map +1 -1
  212. package/fesm2022/primeng-chips.mjs +7 -7
  213. package/fesm2022/primeng-colorpicker.mjs +7 -7
  214. package/fesm2022/primeng-confirmdialog.mjs +27 -11
  215. package/fesm2022/primeng-confirmdialog.mjs.map +1 -1
  216. package/fesm2022/primeng-confirmpopup.mjs +9 -7
  217. package/fesm2022/primeng-confirmpopup.mjs.map +1 -1
  218. package/fesm2022/primeng-contextmenu.mjs +1001 -551
  219. package/fesm2022/primeng-contextmenu.mjs.map +1 -1
  220. package/fesm2022/primeng-dataview.mjs +10 -10
  221. package/fesm2022/primeng-defer.mjs +7 -7
  222. package/fesm2022/primeng-dialog.mjs +20 -15
  223. package/fesm2022/primeng-dialog.mjs.map +1 -1
  224. package/fesm2022/primeng-divider.mjs +9 -9
  225. package/fesm2022/primeng-divider.mjs.map +1 -1
  226. package/fesm2022/primeng-dock.mjs +289 -91
  227. package/fesm2022/primeng-dock.mjs.map +1 -1
  228. package/fesm2022/primeng-dom.mjs +18 -6
  229. package/fesm2022/primeng-dom.mjs.map +1 -1
  230. package/fesm2022/primeng-dragdrop.mjs +10 -10
  231. package/fesm2022/primeng-dropdown.mjs +10 -10
  232. package/fesm2022/primeng-dynamicdialog.mjs +35 -18
  233. package/fesm2022/primeng-dynamicdialog.mjs.map +1 -1
  234. package/fesm2022/primeng-editor.mjs +7 -7
  235. package/fesm2022/primeng-fieldset.mjs +64 -37
  236. package/fesm2022/primeng-fieldset.mjs.map +1 -1
  237. package/fesm2022/primeng-fileupload.mjs +55 -47
  238. package/fesm2022/primeng-fileupload.mjs.map +1 -1
  239. package/fesm2022/primeng-focustrap.mjs +7 -7
  240. package/fesm2022/primeng-galleria.mjs +256 -47
  241. package/fesm2022/primeng-galleria.mjs.map +1 -1
  242. package/fesm2022/primeng-icons-angledoubledown.mjs +3 -3
  243. package/fesm2022/primeng-icons-angledoubleleft.mjs +3 -3
  244. package/fesm2022/primeng-icons-angledoubleright.mjs +3 -3
  245. package/fesm2022/primeng-icons-angledoubleup.mjs +3 -3
  246. package/fesm2022/primeng-icons-angledown.mjs +3 -3
  247. package/fesm2022/primeng-icons-angleleft.mjs +3 -3
  248. package/fesm2022/primeng-icons-angleright.mjs +3 -3
  249. package/fesm2022/primeng-icons-angleup.mjs +3 -3
  250. package/fesm2022/primeng-icons-arrowdown.mjs +3 -3
  251. package/fesm2022/primeng-icons-arrowdownleft.mjs +3 -3
  252. package/fesm2022/primeng-icons-arrowdownright.mjs +3 -3
  253. package/fesm2022/primeng-icons-arrowleft.mjs +3 -3
  254. package/fesm2022/primeng-icons-arrowright.mjs +3 -3
  255. package/fesm2022/primeng-icons-arrowup.mjs +3 -3
  256. package/fesm2022/primeng-icons-ban.mjs +3 -3
  257. package/fesm2022/primeng-icons-bars.mjs +3 -3
  258. package/fesm2022/primeng-icons-calendar.mjs +3 -3
  259. package/fesm2022/primeng-icons-caretleft.mjs +3 -3
  260. package/fesm2022/primeng-icons-caretright.mjs +3 -3
  261. package/fesm2022/primeng-icons-check.mjs +3 -3
  262. package/fesm2022/primeng-icons-chevrondown.mjs +3 -3
  263. package/fesm2022/primeng-icons-chevronleft.mjs +3 -3
  264. package/fesm2022/primeng-icons-chevronright.mjs +3 -3
  265. package/fesm2022/primeng-icons-chevronup.mjs +3 -3
  266. package/fesm2022/primeng-icons-exclamationtriangle.mjs +3 -3
  267. package/fesm2022/primeng-icons-eye.mjs +3 -3
  268. package/fesm2022/primeng-icons-eyeslash.mjs +3 -3
  269. package/fesm2022/primeng-icons-filter.mjs +3 -3
  270. package/fesm2022/primeng-icons-filterslash.mjs +3 -3
  271. package/fesm2022/primeng-icons-home.mjs +3 -3
  272. package/fesm2022/primeng-icons-infocircle.mjs +3 -3
  273. package/fesm2022/primeng-icons-minus.mjs +3 -3
  274. package/fesm2022/primeng-icons-pencil.mjs +3 -3
  275. package/fesm2022/primeng-icons-plus.mjs +3 -3
  276. package/fesm2022/primeng-icons-refresh.mjs +3 -3
  277. package/fesm2022/primeng-icons-search.mjs +3 -3
  278. package/fesm2022/primeng-icons-searchminus.mjs +3 -3
  279. package/fesm2022/primeng-icons-searchplus.mjs +3 -3
  280. package/fesm2022/primeng-icons-sortalt.mjs +3 -3
  281. package/fesm2022/primeng-icons-sortamountdown.mjs +3 -3
  282. package/fesm2022/primeng-icons-sortamountupalt.mjs +3 -3
  283. package/fesm2022/primeng-icons-spinner.mjs +3 -3
  284. package/fesm2022/primeng-icons-star.mjs +3 -3
  285. package/fesm2022/primeng-icons-starfill.mjs +3 -3
  286. package/fesm2022/primeng-icons-thlarge.mjs +3 -3
  287. package/fesm2022/primeng-icons-times.mjs +3 -3
  288. package/fesm2022/primeng-icons-timescircle.mjs +3 -3
  289. package/fesm2022/primeng-icons-trash.mjs +3 -3
  290. package/fesm2022/primeng-icons-undo.mjs +3 -3
  291. package/fesm2022/primeng-icons-upload.mjs +3 -3
  292. package/fesm2022/primeng-icons-windowmaximize.mjs +3 -3
  293. package/fesm2022/primeng-icons-windowminimize.mjs +3 -3
  294. package/fesm2022/primeng-image.mjs +75 -26
  295. package/fesm2022/primeng-image.mjs.map +1 -1
  296. package/fesm2022/primeng-inplace.mjs +29 -22
  297. package/fesm2022/primeng-inplace.mjs.map +1 -1
  298. package/fesm2022/primeng-inputmask.mjs +7 -7
  299. package/fesm2022/primeng-inputnumber.mjs +17 -7
  300. package/fesm2022/primeng-inputnumber.mjs.map +1 -1
  301. package/fesm2022/primeng-inputswitch.mjs +7 -7
  302. package/fesm2022/primeng-inputtext.mjs +7 -7
  303. package/fesm2022/primeng-inputtextarea.mjs +7 -7
  304. package/fesm2022/primeng-keyfilter.mjs +7 -7
  305. package/fesm2022/primeng-knob.mjs +7 -7
  306. package/fesm2022/primeng-listbox.mjs +7 -7
  307. package/fesm2022/primeng-megamenu.mjs +1010 -353
  308. package/fesm2022/primeng-megamenu.mjs.map +1 -1
  309. package/fesm2022/primeng-menu.mjs +413 -182
  310. package/fesm2022/primeng-menu.mjs.map +1 -1
  311. package/fesm2022/primeng-menubar.mjs +915 -293
  312. package/fesm2022/primeng-menubar.mjs.map +1 -1
  313. package/fesm2022/primeng-message.mjs +7 -7
  314. package/fesm2022/primeng-messages.mjs +33 -33
  315. package/fesm2022/primeng-messages.mjs.map +1 -1
  316. package/fesm2022/primeng-multiselect.mjs +11 -10
  317. package/fesm2022/primeng-multiselect.mjs.map +1 -1
  318. package/fesm2022/primeng-orderlist.mjs +15 -21
  319. package/fesm2022/primeng-orderlist.mjs.map +1 -1
  320. package/fesm2022/primeng-organizationchart.mjs +14 -14
  321. package/fesm2022/primeng-organizationchart.mjs.map +1 -1
  322. package/fesm2022/primeng-overlay.mjs +7 -7
  323. package/fesm2022/primeng-overlaypanel.mjs +11 -7
  324. package/fesm2022/primeng-overlaypanel.mjs.map +1 -1
  325. package/fesm2022/primeng-paginator.mjs +7 -7
  326. package/fesm2022/primeng-panel.mjs +51 -40
  327. package/fesm2022/primeng-panel.mjs.map +1 -1
  328. package/fesm2022/primeng-panelmenu.mjs +1006 -350
  329. package/fesm2022/primeng-panelmenu.mjs.map +1 -1
  330. package/fesm2022/primeng-password.mjs +13 -13
  331. package/fesm2022/primeng-picklist.mjs +7 -7
  332. package/fesm2022/primeng-progressbar.mjs +25 -21
  333. package/fesm2022/primeng-progressbar.mjs.map +1 -1
  334. package/fesm2022/primeng-progressspinner.mjs +11 -11
  335. package/fesm2022/primeng-progressspinner.mjs.map +1 -1
  336. package/fesm2022/primeng-radiobutton.mjs +10 -10
  337. package/fesm2022/primeng-rating.mjs +7 -7
  338. package/fesm2022/primeng-ripple.mjs +9 -7
  339. package/fesm2022/primeng-ripple.mjs.map +1 -1
  340. package/fesm2022/primeng-scroller.mjs +7 -7
  341. package/fesm2022/primeng-scrollpanel.mjs +200 -28
  342. package/fesm2022/primeng-scrollpanel.mjs.map +1 -1
  343. package/fesm2022/primeng-scrolltop.mjs +16 -7
  344. package/fesm2022/primeng-scrolltop.mjs.map +1 -1
  345. package/fesm2022/primeng-selectbutton.mjs +9 -9
  346. package/fesm2022/primeng-selectbutton.mjs.map +1 -1
  347. package/fesm2022/primeng-sidebar.mjs +50 -19
  348. package/fesm2022/primeng-sidebar.mjs.map +1 -1
  349. package/fesm2022/primeng-skeleton.mjs +8 -8
  350. package/fesm2022/primeng-skeleton.mjs.map +1 -1
  351. package/fesm2022/primeng-slidemenu.mjs +1065 -371
  352. package/fesm2022/primeng-slidemenu.mjs.map +1 -1
  353. package/fesm2022/primeng-slider.mjs +7 -7
  354. package/fesm2022/primeng-speeddial.mjs +296 -20
  355. package/fesm2022/primeng-speeddial.mjs.map +1 -1
  356. package/fesm2022/primeng-spinner.mjs +7 -7
  357. package/fesm2022/primeng-splitbutton.mjs +70 -15
  358. package/fesm2022/primeng-splitbutton.mjs.map +1 -1
  359. package/fesm2022/primeng-splitter.mjs +166 -35
  360. package/fesm2022/primeng-splitter.mjs.map +1 -1
  361. package/fesm2022/primeng-steps.mjs +117 -27
  362. package/fesm2022/primeng-steps.mjs.map +1 -1
  363. package/fesm2022/primeng-styleclass.mjs +7 -7
  364. package/fesm2022/primeng-table.mjs +94 -88
  365. package/fesm2022/primeng-table.mjs.map +1 -1
  366. package/fesm2022/primeng-tabmenu.mjs +207 -69
  367. package/fesm2022/primeng-tabmenu.mjs.map +1 -1
  368. package/fesm2022/primeng-tabview.mjs +235 -52
  369. package/fesm2022/primeng-tabview.mjs.map +1 -1
  370. package/fesm2022/primeng-tag.mjs +7 -7
  371. package/fesm2022/primeng-terminal.mjs +12 -12
  372. package/fesm2022/primeng-terminal.mjs.map +1 -1
  373. package/fesm2022/primeng-tieredmenu.mjs +886 -399
  374. package/fesm2022/primeng-tieredmenu.mjs.map +1 -1
  375. package/fesm2022/primeng-timeline.mjs +9 -9
  376. package/fesm2022/primeng-timeline.mjs.map +1 -1
  377. package/fesm2022/primeng-toast.mjs +62 -34
  378. package/fesm2022/primeng-toast.mjs.map +1 -1
  379. package/fesm2022/primeng-togglebutton.mjs +9 -9
  380. package/fesm2022/primeng-togglebutton.mjs.map +1 -1
  381. package/fesm2022/primeng-toolbar.mjs +22 -15
  382. package/fesm2022/primeng-toolbar.mjs.map +1 -1
  383. package/fesm2022/primeng-tooltip.mjs +13 -8
  384. package/fesm2022/primeng-tooltip.mjs.map +1 -1
  385. package/fesm2022/primeng-tree.mjs +12 -12
  386. package/fesm2022/primeng-tree.mjs.map +1 -1
  387. package/fesm2022/primeng-treeselect.mjs +7 -7
  388. package/fesm2022/primeng-treetable.mjs +71 -71
  389. package/fesm2022/primeng-treetable.mjs.map +1 -1
  390. package/fesm2022/primeng-tristatecheckbox.mjs +7 -7
  391. package/fesm2022/primeng-utils.mjs +31 -2
  392. package/fesm2022/primeng-utils.mjs.map +1 -1
  393. package/fesm2022/primeng-virtualscroller.mjs +7 -7
  394. package/fieldset/fieldset.d.ts +6 -5
  395. package/galleria/galleria.d.ts +24 -4
  396. package/image/image.d.ts +11 -1
  397. package/inplace/inplace.d.ts +6 -1
  398. package/megamenu/megamenu.d.ts +140 -16
  399. package/menu/menu.d.ts +64 -7
  400. package/menubar/menubar.d.ts +119 -23
  401. package/orderlist/orderlist.d.ts +2 -1
  402. package/package.json +98 -98
  403. package/panel/panel.d.ts +6 -5
  404. package/panelmenu/panelmenu.d.ts +136 -22
  405. package/resources/components/autocomplete/autocomplete.css +9 -8
  406. package/resources/components/breadcrumb/breadcrumb.css +9 -3
  407. package/resources/components/button/button.css +4 -0
  408. package/resources/components/common/common.css +1 -1
  409. package/resources/components/contextmenu/contextmenu.css +1 -7
  410. package/resources/components/dock/dock.css +1 -1
  411. package/resources/components/megamenu/megamenu.css +9 -10
  412. package/resources/components/menubar/menubar.css +4 -0
  413. package/resources/components/panelmenu/panelmenu.css +4 -2
  414. package/resources/components/slidemenu/slidemenu.css +40 -41
  415. package/resources/components/tabview/tabview.css +3 -2
  416. package/resources/primeng.css +4 -1
  417. package/resources/primeng.min.css +1 -1
  418. package/resources/themes/arya-blue/theme.css +358 -396
  419. package/resources/themes/arya-green/theme.css +358 -396
  420. package/resources/themes/arya-orange/theme.css +358 -396
  421. package/resources/themes/arya-purple/theme.css +358 -396
  422. package/resources/themes/bootstrap4-dark-blue/theme.css +373 -422
  423. package/resources/themes/bootstrap4-dark-purple/theme.css +373 -422
  424. package/resources/themes/bootstrap4-light-blue/theme.css +385 -434
  425. package/resources/themes/bootstrap4-light-purple/theme.css +385 -434
  426. package/resources/themes/fluent-light/theme.css +368 -406
  427. package/resources/themes/lara-dark-blue/theme.css +360 -398
  428. package/resources/themes/lara-dark-indigo/theme.css +360 -398
  429. package/resources/themes/lara-dark-purple/theme.css +360 -398
  430. package/resources/themes/lara-dark-teal/theme.css +360 -398
  431. package/resources/themes/lara-light-blue/theme.css +386 -424
  432. package/resources/themes/lara-light-indigo/theme.css +386 -424
  433. package/resources/themes/lara-light-purple/theme.css +386 -424
  434. package/resources/themes/lara-light-teal/theme.css +386 -424
  435. package/resources/themes/luna-amber/theme.css +376 -414
  436. package/resources/themes/luna-blue/theme.css +376 -414
  437. package/resources/themes/luna-green/theme.css +376 -414
  438. package/resources/themes/luna-pink/theme.css +376 -414
  439. package/resources/themes/md-dark-deeppurple/theme.css +389 -409
  440. package/resources/themes/md-dark-indigo/theme.css +389 -409
  441. package/resources/themes/md-light-deeppurple/theme.css +389 -409
  442. package/resources/themes/md-light-indigo/theme.css +389 -409
  443. package/resources/themes/mdc-dark-deeppurple/theme.css +389 -409
  444. package/resources/themes/mdc-dark-indigo/theme.css +389 -409
  445. package/resources/themes/mdc-light-deeppurple/theme.css +389 -409
  446. package/resources/themes/mdc-light-indigo/theme.css +389 -409
  447. package/resources/themes/mira/theme.css +363 -401
  448. package/resources/themes/nano/theme.css +364 -402
  449. package/resources/themes/nova/theme.css +352 -390
  450. package/resources/themes/nova-accent/theme.css +352 -390
  451. package/resources/themes/nova-alt/theme.css +352 -390
  452. package/resources/themes/rhea/theme.css +352 -390
  453. package/resources/themes/saga-blue/theme.css +364 -402
  454. package/resources/themes/saga-green/theme.css +364 -402
  455. package/resources/themes/saga-orange/theme.css +364 -402
  456. package/resources/themes/saga-purple/theme.css +364 -402
  457. package/resources/themes/soho-dark/theme.css +378 -416
  458. package/resources/themes/soho-light/theme.css +386 -424
  459. package/resources/themes/tailwind-light/theme.css +377 -415
  460. package/resources/themes/vela-blue/theme.css +364 -402
  461. package/resources/themes/vela-green/theme.css +364 -402
  462. package/resources/themes/vela-orange/theme.css +364 -402
  463. package/resources/themes/vela-purple/theme.css +364 -402
  464. package/resources/themes/viva-dark/theme.css +358 -396
  465. package/resources/themes/viva-light/theme.css +364 -402
  466. package/scrollpanel/scrollpanel.d.ts +22 -4
  467. package/scrolltop/scrolltop.d.ts +6 -1
  468. package/sidebar/sidebar.d.ts +1 -0
  469. package/slidemenu/slidemenu.d.ts +192 -86
  470. package/speeddial/speeddial.d.ts +34 -1
  471. package/splitbutton/splitbutton.d.ts +5 -1
  472. package/splitter/splitter.d.ts +18 -5
  473. package/steps/steps.d.ts +20 -3
  474. package/table/table.d.ts +3 -1
  475. package/tabmenu/tabmenu.d.ts +27 -2
  476. package/tabview/tabview.d.ts +36 -5
  477. package/tieredmenu/tieredmenu.d.ts +137 -51
  478. package/toolbar/toolbar.d.ts +6 -1
  479. package/tooltip/tooltip.d.ts +1 -1
  480. package/utils/objectutils.d.ts +4 -0
  481. package/utils/uniquecomponentid.d.ts +1 -1
@@ -1,10 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { PLATFORM_ID, Pipe, Inject, forwardRef, Component, ViewEncapsulation, Input, EventEmitter, ChangeDetectionStrategy, Output, NgModule } from '@angular/core';
2
+ import { PLATFORM_ID, Pipe, Inject, EventEmitter, forwardRef, Component, ViewEncapsulation, Input, Output, computed, signal, ChangeDetectionStrategy, ViewChild, NgModule } from '@angular/core';
3
3
  import { trigger, transition, style, animate } from '@angular/animations';
4
4
  import * as i2 from '@angular/common';
5
5
  import { isPlatformBrowser, DOCUMENT, CommonModule } from '@angular/common';
6
6
  import { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';
7
- import { ZIndexUtils } from 'primeng/utils';
7
+ import { UniqueComponentId, ZIndexUtils } from 'primeng/utils';
8
8
  import * as i3 from '@angular/router';
9
9
  import { RouterModule } from '@angular/router';
10
10
  import * as i4 from 'primeng/ripple';
@@ -27,10 +27,10 @@ class SafeHtmlPipe {
27
27
  }
28
28
  return this.sanitizer.bypassSecurityTrustHtml(value);
29
29
  }
30
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: PLATFORM_ID }, { token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
31
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.0.2", ngImport: i0, type: SafeHtmlPipe, name: "safeHtml" });
30
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: PLATFORM_ID }, { token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
31
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: SafeHtmlPipe, name: "safeHtml" });
32
32
  }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: SafeHtmlPipe, decorators: [{
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: SafeHtmlPipe, decorators: [{
34
34
  type: Pipe,
35
35
  args: [{
36
36
  name: 'safeHtml'
@@ -41,159 +41,124 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
41
41
  }] }, { type: i1.DomSanitizer }]; } });
42
42
  class MenuItemContent {
43
43
  item;
44
+ id;
45
+ onMenuItemClick = new EventEmitter();
44
46
  menu;
45
47
  constructor(menu) {
46
48
  this.menu = menu;
47
49
  }
48
- onItemKeyDown(event) {
49
- let listItem = event.currentTarget.parentElement;
50
- switch (event.code) {
51
- case 'ArrowDown':
52
- var nextItem = this.findNextItem(listItem);
53
- if (nextItem) {
54
- nextItem.children[0].focus();
55
- }
56
- event.preventDefault();
57
- break;
58
- case 'ArrowUp':
59
- var prevItem = this.findPrevItem(listItem);
60
- if (prevItem) {
61
- prevItem.children[0].focus();
62
- }
63
- event.preventDefault();
64
- break;
65
- case 'Space':
66
- case 'Enter':
67
- if (listItem && !DomHandler.hasClass(listItem, 'p-disabled')) {
68
- listItem.children[0].click();
69
- }
70
- event.preventDefault();
71
- break;
72
- default:
73
- break;
74
- }
75
- }
76
- findNextItem(item) {
77
- let nextItem = item.nextElementSibling;
78
- if (nextItem)
79
- return DomHandler.hasClass(nextItem, 'p-disabled') || !DomHandler.hasClass(nextItem, 'p-menuitem') ? this.findNextItem(nextItem) : nextItem;
80
- else
81
- return null;
50
+ onItemClick(event, item) {
51
+ this.onMenuItemClick.emit({ originalEvent: event, item: { ...item, id: this.id } });
82
52
  }
83
- findPrevItem(item) {
84
- let prevItem = item.previousElementSibling;
85
- if (prevItem)
86
- return DomHandler.hasClass(prevItem, 'p-disabled') || !DomHandler.hasClass(prevItem, 'p-menuitem') ? this.findPrevItem(prevItem) : prevItem;
87
- else
88
- return null;
89
- }
90
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: MenuItemContent, deps: [{ token: forwardRef(() => Menu) }], target: i0.ɵɵFactoryTarget.Component });
91
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: MenuItemContent, selector: "[pMenuItemContent]", inputs: { item: ["pMenuItemContent", "item"] }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
92
- <a
93
- *ngIf="!item?.routerLink"
94
- (keydown)="onItemKeyDown($event)"
95
- [attr.href]="item.url || null"
96
- class="p-menuitem-link"
97
- [attr.tabindex]="item.disabled ? null : '0'"
98
- [attr.data-automationid]="item.automationId"
99
- [target]="item.target"
100
- [attr.title]="item.title"
101
- [attr.id]="item.id"
102
- [ngClass]="{ 'p-disabled': item.disabled }"
103
- (click)="menu.itemClick($event, item)"
104
- role="menuitem"
105
- >
106
- <ng-container *ngTemplateOutlet="itemContent"></ng-container>
107
- </a>
108
- <a
109
- *ngIf="item?.routerLink"
110
- (keydown)="onItemKeyDown($event)"
111
- [routerLink]="item.routerLink"
112
- [attr.data-automationid]="item.automationId"
113
- [queryParams]="item.queryParams"
114
- routerLinkActive="p-menuitem-link-active"
115
- [routerLinkActiveOptions]="item.routerLinkActiveOptions || { exact: false }"
116
- class="p-menuitem-link"
117
- [target]="item.target"
118
- [attr.id]="item.id"
119
- [attr.tabindex]="item.disabled ? null : '0'"
120
- [attr.title]="item.title"
121
- [ngClass]="{ 'p-disabled': item.disabled }"
122
- (click)="menu.itemClick($event, item)"
123
- role="menuitem"
124
- pRipple
125
- [fragment]="item.fragment"
126
- [queryParamsHandling]="item.queryParamsHandling"
127
- [preserveFragment]="item.preserveFragment"
128
- [skipLocationChange]="item.skipLocationChange"
129
- [replaceUrl]="item.replaceUrl"
130
- [state]="item.state"
131
- >
132
- <ng-container *ngTemplateOutlet="itemContent"></ng-container>
133
- </a>
53
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: MenuItemContent, deps: [{ token: forwardRef(() => Menu) }], target: i0.ɵɵFactoryTarget.Component });
54
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.0", type: MenuItemContent, selector: "[pMenuItemContent]", inputs: { item: ["pMenuItemContent", "item"], id: "id" }, outputs: { onMenuItemClick: "onMenuItemClick" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
55
+ <div [attr.data-pc-section]="'content'" class="p-menuitem-content">
56
+ <a
57
+ *ngIf="!item?.routerLink"
58
+ [attr.title]="item.title"
59
+ [attr.href]="item.url || null"
60
+ [attr.data-automationid]="item.automationId"
61
+ [attr.tabindex]="-1"
62
+ [attr.data-pc-section]="'action'"
63
+ [attr.aria-hidden]="true"
64
+ class="p-menuitem-link"
65
+ [target]="item.target"
66
+ [ngClass]="{ 'p-disabled': item.disabled }"
67
+ (click)="onItemClick($event, item)"
68
+ pRipple
69
+ >
70
+ <ng-container *ngTemplateOutlet="itemContent"></ng-container>
71
+ </a>
72
+ <a
73
+ *ngIf="item?.routerLink"
74
+ [routerLink]="item.routerLink"
75
+ [attr.data-automationid]="item.automationId"
76
+ [attr.tabindex]="-1"
77
+ [attr.data-pc-section]="'action'"
78
+ [attr.aria-hidden]="true"
79
+ [attr.title]="item.title"
80
+ [queryParams]="item.queryParams"
81
+ routerLinkActive="p-menuitem-link-active"
82
+ [routerLinkActiveOptions]="item.routerLinkActiveOptions || { exact: false }"
83
+ class="p-menuitem-link"
84
+ [target]="item.target"
85
+ [ngClass]="{ 'p-disabled': item.disabled }"
86
+ (click)="onItemClick($event, item)"
87
+ [fragment]="item.fragment"
88
+ [queryParamsHandling]="item.queryParamsHandling"
89
+ [preserveFragment]="item.preserveFragment"
90
+ [skipLocationChange]="item.skipLocationChange"
91
+ [replaceUrl]="item.replaceUrl"
92
+ [state]="item.state"
93
+ pRipple
94
+ >
95
+ <ng-container *ngTemplateOutlet="itemContent"></ng-container>
96
+ </a>
134
97
 
135
- <ng-template #itemContent>
136
- <span class="p-menuitem-icon" *ngIf="item.icon" [ngClass]="item.icon" [class]="item.iconClass" [ngStyle]="item.iconStyle"></span>
137
- <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlLabel">{{ item.label }}</span>
138
- <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="item.label | safeHtml"></span></ng-template>
139
- <span class="p-menuitem-badge" *ngIf="item.badge" [ngClass]="item.badgeStyleClass">{{ item.badge }}</span>
140
- </ng-template>
98
+ <ng-template #itemContent>
99
+ <span class="p-menuitem-icon" *ngIf="item.icon" [ngClass]="item.icon" [class]="item.iconClass" [ngStyle]="item.iconStyle"></span>
100
+ <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlLabel">{{ item.label }}</span>
101
+ <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="item.label | safeHtml"></span></ng-template>
102
+ <span class="p-menuitem-badge" *ngIf="item.badge" [ngClass]="item.badgeStyleClass">{{ item.badge }}</span>
103
+ </ng-template>
104
+ </div>
141
105
  `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i4.Ripple, selector: "[pRipple]" }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], encapsulation: i0.ViewEncapsulation.None });
142
106
  }
143
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: MenuItemContent, decorators: [{
107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: MenuItemContent, decorators: [{
144
108
  type: Component,
145
109
  args: [{
146
110
  selector: '[pMenuItemContent]',
147
111
  template: `
148
- <a
149
- *ngIf="!item?.routerLink"
150
- (keydown)="onItemKeyDown($event)"
151
- [attr.href]="item.url || null"
152
- class="p-menuitem-link"
153
- [attr.tabindex]="item.disabled ? null : '0'"
154
- [attr.data-automationid]="item.automationId"
155
- [target]="item.target"
156
- [attr.title]="item.title"
157
- [attr.id]="item.id"
158
- [ngClass]="{ 'p-disabled': item.disabled }"
159
- (click)="menu.itemClick($event, item)"
160
- role="menuitem"
161
- >
162
- <ng-container *ngTemplateOutlet="itemContent"></ng-container>
163
- </a>
164
- <a
165
- *ngIf="item?.routerLink"
166
- (keydown)="onItemKeyDown($event)"
167
- [routerLink]="item.routerLink"
168
- [attr.data-automationid]="item.automationId"
169
- [queryParams]="item.queryParams"
170
- routerLinkActive="p-menuitem-link-active"
171
- [routerLinkActiveOptions]="item.routerLinkActiveOptions || { exact: false }"
172
- class="p-menuitem-link"
173
- [target]="item.target"
174
- [attr.id]="item.id"
175
- [attr.tabindex]="item.disabled ? null : '0'"
176
- [attr.title]="item.title"
177
- [ngClass]="{ 'p-disabled': item.disabled }"
178
- (click)="menu.itemClick($event, item)"
179
- role="menuitem"
180
- pRipple
181
- [fragment]="item.fragment"
182
- [queryParamsHandling]="item.queryParamsHandling"
183
- [preserveFragment]="item.preserveFragment"
184
- [skipLocationChange]="item.skipLocationChange"
185
- [replaceUrl]="item.replaceUrl"
186
- [state]="item.state"
187
- >
188
- <ng-container *ngTemplateOutlet="itemContent"></ng-container>
189
- </a>
112
+ <div [attr.data-pc-section]="'content'" class="p-menuitem-content">
113
+ <a
114
+ *ngIf="!item?.routerLink"
115
+ [attr.title]="item.title"
116
+ [attr.href]="item.url || null"
117
+ [attr.data-automationid]="item.automationId"
118
+ [attr.tabindex]="-1"
119
+ [attr.data-pc-section]="'action'"
120
+ [attr.aria-hidden]="true"
121
+ class="p-menuitem-link"
122
+ [target]="item.target"
123
+ [ngClass]="{ 'p-disabled': item.disabled }"
124
+ (click)="onItemClick($event, item)"
125
+ pRipple
126
+ >
127
+ <ng-container *ngTemplateOutlet="itemContent"></ng-container>
128
+ </a>
129
+ <a
130
+ *ngIf="item?.routerLink"
131
+ [routerLink]="item.routerLink"
132
+ [attr.data-automationid]="item.automationId"
133
+ [attr.tabindex]="-1"
134
+ [attr.data-pc-section]="'action'"
135
+ [attr.aria-hidden]="true"
136
+ [attr.title]="item.title"
137
+ [queryParams]="item.queryParams"
138
+ routerLinkActive="p-menuitem-link-active"
139
+ [routerLinkActiveOptions]="item.routerLinkActiveOptions || { exact: false }"
140
+ class="p-menuitem-link"
141
+ [target]="item.target"
142
+ [ngClass]="{ 'p-disabled': item.disabled }"
143
+ (click)="onItemClick($event, item)"
144
+ [fragment]="item.fragment"
145
+ [queryParamsHandling]="item.queryParamsHandling"
146
+ [preserveFragment]="item.preserveFragment"
147
+ [skipLocationChange]="item.skipLocationChange"
148
+ [replaceUrl]="item.replaceUrl"
149
+ [state]="item.state"
150
+ pRipple
151
+ >
152
+ <ng-container *ngTemplateOutlet="itemContent"></ng-container>
153
+ </a>
190
154
 
191
- <ng-template #itemContent>
192
- <span class="p-menuitem-icon" *ngIf="item.icon" [ngClass]="item.icon" [class]="item.iconClass" [ngStyle]="item.iconStyle"></span>
193
- <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlLabel">{{ item.label }}</span>
194
- <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="item.label | safeHtml"></span></ng-template>
195
- <span class="p-menuitem-badge" *ngIf="item.badge" [ngClass]="item.badgeStyleClass">{{ item.badge }}</span>
196
- </ng-template>
155
+ <ng-template #itemContent>
156
+ <span class="p-menuitem-icon" *ngIf="item.icon" [ngClass]="item.icon" [class]="item.iconClass" [ngStyle]="item.iconStyle"></span>
157
+ <span class="p-menuitem-text" *ngIf="item.escape !== false; else htmlLabel">{{ item.label }}</span>
158
+ <ng-template #htmlLabel><span class="p-menuitem-text" [innerHTML]="item.label | safeHtml"></span></ng-template>
159
+ <span class="p-menuitem-badge" *ngIf="item.badge" [ngClass]="item.badgeStyleClass">{{ item.badge }}</span>
160
+ </ng-template>
161
+ </div>
197
162
  `,
198
163
  encapsulation: ViewEncapsulation.None,
199
164
  host: {
@@ -206,6 +171,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
206
171
  }] }]; }, propDecorators: { item: [{
207
172
  type: Input,
208
173
  args: ['pMenuItemContent']
174
+ }], id: [{
175
+ type: Input,
176
+ args: ['id']
177
+ }], onMenuItemClick: [{
178
+ type: Output
209
179
  }] } });
210
180
  /**
211
181
  * Menu is a navigation / command component that supports dynamic and static positioning.
@@ -264,6 +234,26 @@ class Menu {
264
234
  * @group Props
265
235
  */
266
236
  hideTransitionOptions = '.1s linear';
237
+ /**
238
+ * Defines a string value that labels an interactive element.
239
+ * @group Props
240
+ */
241
+ ariaLabel;
242
+ /**
243
+ * Identifier of the underlying input element.
244
+ * @group Props
245
+ */
246
+ ariaLabelledBy;
247
+ /**
248
+ * Current id state as a string.
249
+ * @group Props
250
+ */
251
+ id;
252
+ /**
253
+ * Index of the element in tabbing order.
254
+ * @group Props
255
+ */
256
+ tabindex = 0;
267
257
  /**
268
258
  * Callback to invoke when overlay menu is shown.
269
259
  * @group Emits
@@ -274,6 +264,20 @@ class Menu {
274
264
  * @group Emits
275
265
  */
276
266
  onHide = new EventEmitter();
267
+ /**
268
+ * Callback to invoke when the list loses focus.
269
+ * @param {Event} event - blur event.
270
+ * @group Emits
271
+ */
272
+ onBlur = new EventEmitter();
273
+ /**
274
+ * Callback to invoke when the list receives focus.
275
+ * @param {Event} event - focus event.
276
+ * @group Emits
277
+ */
278
+ onFocus = new EventEmitter();
279
+ listViewChild;
280
+ containerViewChild;
277
281
  container;
278
282
  scrollHandler;
279
283
  documentClickListener;
@@ -281,6 +285,13 @@ class Menu {
281
285
  preventDocumentDefault;
282
286
  target;
283
287
  visible;
288
+ focusedOptionId = computed(() => {
289
+ return this.focusedOptionIndex() !== -1 ? this.focusedOptionIndex() : null;
290
+ });
291
+ focusedOptionIndex = signal(-1);
292
+ selectedOptionIndex = signal(-1);
293
+ focused = false;
294
+ overlayVisible = false;
284
295
  relativeAlign;
285
296
  constructor(document, platformId, el, renderer, cd, config, overlayService) {
286
297
  this.document = document;
@@ -290,6 +301,7 @@ class Menu {
290
301
  this.cd = cd;
291
302
  this.config = config;
292
303
  this.overlayService = overlayService;
304
+ this.id = this.id || UniqueComponentId();
293
305
  }
294
306
  /**
295
307
  * Toggles the visibility of the popup menu.
@@ -313,8 +325,14 @@ class Menu {
313
325
  this.relativeAlign = event.relativeAlign;
314
326
  this.visible = true;
315
327
  this.preventDocumentDefault = true;
328
+ this.overlayVisible = true;
316
329
  this.cd.markForCheck();
317
330
  }
331
+ ngOnInit() {
332
+ if (!this.popup) {
333
+ this.bindDocumentClickListener();
334
+ }
335
+ }
318
336
  onOverlayAnimationStart(event) {
319
337
  switch (event.toState) {
320
338
  case 'visible':
@@ -327,6 +345,8 @@ class Menu {
327
345
  this.bindDocumentClickListener();
328
346
  this.bindDocumentResizeListener();
329
347
  this.bindScrollListener();
348
+ DomHandler.focus(this.listViewChild.nativeElement);
349
+ this.changeFocusedOptionIndex(0);
330
350
  }
331
351
  break;
332
352
  case 'void':
@@ -382,23 +402,144 @@ class Menu {
382
402
  this.hide();
383
403
  }
384
404
  }
385
- itemClick(event, item) {
386
- if (item.disabled) {
405
+ menuitemId(id, index, childIndex) {
406
+ return `${id}_${index}${typeof childIndex !== 'undefined' ? '_' + childIndex : ''}`;
407
+ }
408
+ isItemFocused(id) {
409
+ return this.focusedOptionId() === id;
410
+ }
411
+ label(label) {
412
+ return typeof label === 'function' ? label() : label;
413
+ }
414
+ disabled(disabled) {
415
+ return typeof disabled === 'function' ? disabled() : typeof disabled === 'undefined' ? false : disabled;
416
+ }
417
+ activedescendant() {
418
+ return this.focused ? this.focusedOptionId() : undefined;
419
+ }
420
+ onListFocus(event) {
421
+ this.focused = true;
422
+ if (!this.popup) {
423
+ if (this.selectedOptionIndex() !== -1) {
424
+ this.changeFocusedOptionIndex(this.selectedOptionIndex());
425
+ this.selectedOptionIndex.set(-1);
426
+ }
427
+ else {
428
+ this.changeFocusedOptionIndex(0);
429
+ }
430
+ }
431
+ this.onFocus.emit(event);
432
+ }
433
+ onListBlur(event) {
434
+ this.focused = false;
435
+ this.changeFocusedOptionIndex(-1);
436
+ this.selectedOptionIndex.set(null);
437
+ this.focusedOptionIndex.set(null);
438
+ this.onBlur.emit(event);
439
+ }
440
+ onListKeyDown(event) {
441
+ switch (event.code) {
442
+ case 'ArrowDown':
443
+ this.onArrowDownKey(event);
444
+ break;
445
+ case 'ArrowUp':
446
+ this.onArrowUpKey(event);
447
+ break;
448
+ case 'Home':
449
+ this.onHomeKey(event);
450
+ break;
451
+ case 'End':
452
+ this.onEndKey(event);
453
+ break;
454
+ case 'Enter':
455
+ this.onEnterKey(event);
456
+ break;
457
+ case 'Space':
458
+ this.onSpaceKey(event);
459
+ break;
460
+ case 'Escape':
461
+ if (this.popup) {
462
+ DomHandler.focus(this.target);
463
+ this.hide();
464
+ }
465
+ case 'Tab':
466
+ this.overlayVisible && this.hide();
467
+ break;
468
+ default:
469
+ break;
470
+ }
471
+ }
472
+ onArrowDownKey(event) {
473
+ const optionIndex = this.findNextOptionIndex(this.focusedOptionIndex());
474
+ this.changeFocusedOptionIndex(optionIndex);
475
+ event.preventDefault();
476
+ }
477
+ onArrowUpKey(event) {
478
+ if (event.altKey && this.popup) {
479
+ DomHandler.focus(this.target);
480
+ this.hide();
387
481
  event.preventDefault();
482
+ }
483
+ else {
484
+ const optionIndex = this.findPrevOptionIndex(this.focusedOptionIndex());
485
+ this.changeFocusedOptionIndex(optionIndex);
486
+ event.preventDefault();
487
+ }
488
+ }
489
+ onHomeKey(event) {
490
+ this.changeFocusedOptionIndex(0);
491
+ event.preventDefault();
492
+ }
493
+ onEndKey(event) {
494
+ this.changeFocusedOptionIndex(DomHandler.find(this.containerViewChild.nativeElement, 'li[data-pc-section="menuitem"][data-p-disabled="false"]').length - 1);
495
+ event.preventDefault();
496
+ }
497
+ onEnterKey(event) {
498
+ const element = DomHandler.findSingle(this.containerViewChild.nativeElement, `li[id="${`${this.focusedOptionIndex()}`}"]`);
499
+ const anchorElement = element && DomHandler.findSingle(element, 'a[data-pc-section="action"]');
500
+ this.popup && DomHandler.focus(this.target);
501
+ anchorElement ? anchorElement.click() : element && element.click();
502
+ event.preventDefault();
503
+ }
504
+ onSpaceKey(event) {
505
+ this.onEnterKey(event);
506
+ }
507
+ findNextOptionIndex(index) {
508
+ const links = DomHandler.find(this.containerViewChild.nativeElement, 'li[data-pc-section="menuitem"][data-p-disabled="false"]');
509
+ const matchedOptionIndex = [...links].findIndex((link) => link.id === index);
510
+ return matchedOptionIndex > -1 ? matchedOptionIndex + 1 : 0;
511
+ }
512
+ findPrevOptionIndex(index) {
513
+ const links = DomHandler.find(this.containerViewChild.nativeElement, 'li[data-pc-section="menuitem"][data-p-disabled="false"]');
514
+ const matchedOptionIndex = [...links].findIndex((link) => link.id === index);
515
+ return matchedOptionIndex > -1 ? matchedOptionIndex - 1 : 0;
516
+ }
517
+ changeFocusedOptionIndex(index) {
518
+ const links = DomHandler.find(this.containerViewChild.nativeElement, 'li[data-pc-section="menuitem"][data-p-disabled="false"]');
519
+ let order = index >= links.length ? links.length - 1 : index < 0 ? 0 : index;
520
+ order > -1 && this.focusedOptionIndex.set(links[order].getAttribute('id'));
521
+ }
522
+ itemClick(event) {
523
+ const { originalEvent, item } = event;
524
+ if (item.disabled) {
525
+ originalEvent.preventDefault();
388
526
  return;
389
527
  }
390
528
  if (!item.url && !item.routerLink) {
391
- event.preventDefault();
529
+ originalEvent.preventDefault();
392
530
  }
393
531
  if (item.command) {
394
532
  item.command({
395
- originalEvent: event,
533
+ originalEvent: originalEvent,
396
534
  item: item
397
535
  });
398
536
  }
399
537
  if (this.popup) {
400
538
  this.hide();
401
539
  }
540
+ if (!this.popup && this.focusedOptionIndex() !== item.id) {
541
+ this.focusedOptionIndex.set(item.id);
542
+ }
402
543
  }
403
544
  onOverlayClick(event) {
404
545
  if (this.popup) {
@@ -412,11 +553,16 @@ class Menu {
412
553
  bindDocumentClickListener() {
413
554
  if (!this.documentClickListener && isPlatformBrowser(this.platformId)) {
414
555
  const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';
415
- this.documentClickListener = this.renderer.listen(documentTarget, 'click', () => {
416
- if (!this.preventDocumentDefault) {
556
+ this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {
557
+ const isOutsideContainer = this.containerViewChild.nativeElement && !this.containerViewChild.nativeElement.contains(event.target);
558
+ const isOutsideTarget = !(this.target && (this.target === event.target || this.target.contains(event.target)));
559
+ if (!this.popup && isOutsideContainer && isOutsideTarget) {
560
+ this.onListBlur(event);
561
+ }
562
+ if (this.preventDocumentDefault && this.overlayVisible && isOutsideContainer && isOutsideTarget) {
417
563
  this.hide();
564
+ this.preventDocumentDefault = false;
418
565
  }
419
- this.preventDocumentDefault = false;
420
566
  });
421
567
  }
422
568
  }
@@ -474,6 +620,9 @@ class Menu {
474
620
  this.restoreOverlayAppend();
475
621
  this.onOverlayHide();
476
622
  }
623
+ if (!this.popup) {
624
+ this.unbindDocumentClickListener();
625
+ }
477
626
  }
478
627
  hasSubMenu() {
479
628
  if (this.model) {
@@ -485,8 +634,8 @@ class Menu {
485
634
  }
486
635
  return false;
487
636
  }
488
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: Menu, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i5.PrimeNGConfig }, { token: i5.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
489
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: Menu, selector: "p-menu", inputs: { model: "model", popup: "popup", style: "style", styleClass: "styleClass", appendTo: "appendTo", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions" }, outputs: { onShow: "onShow", onHide: "onHide" }, host: { classAttribute: "p-element" }, ngImport: i0, template: `
637
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: Menu, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i5.PrimeNGConfig }, { token: i5.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
638
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.0", type: Menu, selector: "p-menu", inputs: { model: "model", popup: "popup", style: "style", styleClass: "styleClass", appendTo: "appendTo", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", id: "id", tabindex: "tabindex" }, outputs: { onShow: "onShow", onHide: "onHide", onBlur: "onBlur", onFocus: "onFocus" }, host: { classAttribute: "p-element" }, viewQueries: [{ propertyName: "listViewChild", first: true, predicate: ["list"], descendants: true }, { propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: `
490
639
  <div
491
640
  #container
492
641
  [ngClass]="{ 'p-menu p-component': true, 'p-menu-overlay': popup }"
@@ -498,10 +647,25 @@ class Menu {
498
647
  [@.disabled]="popup !== true"
499
648
  (@overlayAnimation.start)="onOverlayAnimationStart($event)"
500
649
  (@overlayAnimation.done)="onOverlayAnimationEnd($event)"
650
+ [attr.data-pc-name]="'menu'"
651
+ [id]="id"
501
652
  >
502
- <ul class="p-menu-list p-reset" role="menu">
503
- <ng-template ngFor let-submenu [ngForOf]="model" *ngIf="hasSubMenu()">
504
- <li class="p-menu-separator" *ngIf="submenu.separator" [ngClass]="{ 'p-hidden': submenu.visible === false }" role="separator"></li>
653
+ <ul
654
+ #list
655
+ class="p-menu-list p-reset"
656
+ role="menu"
657
+ [id]="id + '_list'"
658
+ [tabindex]="tabindex"
659
+ [attr.data-pc-section]="'menu'"
660
+ [attr.aria-activedescendant]="activedescendant()"
661
+ [attr.aria-label]="ariaLabel"
662
+ [attr.aria-labelledBy]="ariaLabelledBy"
663
+ (focus)="onListFocus($event)"
664
+ (blur)="onListBlur($event)"
665
+ (keydown)="onListKeyDown($event)"
666
+ >
667
+ <ng-template ngFor let-submenu let-i="index" [ngForOf]="model" *ngIf="hasSubMenu()">
668
+ <li class="p-menuitem-separator" *ngIf="submenu.separator" [ngClass]="{ 'p-hidden': submenu.visible === false }" role="separator"></li>
505
669
  <li
506
670
  class="p-submenu-header"
507
671
  [attr.data-automationid]="submenu.automationId"
@@ -510,44 +674,61 @@ class Menu {
510
674
  pTooltip
511
675
  [tooltipOptions]="submenu.tooltipOptions"
512
676
  role="none"
677
+ [attr.id]="menuitemId(id, i)"
513
678
  >
514
679
  <span *ngIf="submenu.escape !== false; else htmlSubmenuLabel">{{ submenu.label }}</span>
515
680
  <ng-template #htmlSubmenuLabel><span [innerHTML]="submenu.label | safeHtml"></span></ng-template>
516
681
  </li>
517
- <ng-template ngFor let-item [ngForOf]="submenu.items">
518
- <li class="p-menu-separator" *ngIf="item.separator" [ngClass]="{ 'p-hidden': item.visible === false || submenu.visible === false }" role="separator"></li>
682
+ <ng-template ngFor let-item let-j="index" [ngForOf]="submenu.items">
683
+ <li class="p-menuitem-separator" *ngIf="item.separator" [ngClass]="{ 'p-hidden': item.visible === false || submenu.visible === false }" role="separator"></li>
519
684
  <li
520
685
  class="p-menuitem"
521
686
  *ngIf="!item.separator"
522
687
  [pMenuItemContent]="item"
523
- [ngClass]="{ 'p-hidden': item.visible === false || submenu.visible === false }"
688
+ [ngClass]="{ 'p-hidden': item.visible === false || submenu.visible === false, 'p-focus': focusedOptionId() && menuitemId(id, i, j) === focusedOptionId(), 'p-disabled': disabled(item.disabled) }"
524
689
  [ngStyle]="item.style"
525
690
  [class]="item.styleClass"
691
+ (onMenuItemClick)="itemClick($event)"
526
692
  pTooltip
527
693
  [tooltipOptions]="item.tooltipOptions"
528
- role="none"
694
+ role="menuitem"
695
+ [attr.data-pc-section]="'menuitem'"
696
+ [attr.aria-label]="label(item.label)"
697
+ [attr.data-p-focused]="isItemFocused(menuitemId(id, i, j))"
698
+ [attr.data-p-disabled]="disabled(item.disabled)"
699
+ [attr.aria-disabled]="disabled(item.disabled)"
700
+ [attr.id]="menuitemId(id, i, j)"
701
+ [id]="menuitemId(id, i, j)"
529
702
  ></li>
530
703
  </ng-template>
531
704
  </ng-template>
532
- <ng-template ngFor let-item [ngForOf]="model" *ngIf="!hasSubMenu()">
533
- <li class="p-menu-separator" *ngIf="item.separator" [ngClass]="{ 'p-hidden': item.visible === false }" role="separator"></li>
705
+ <ng-template ngFor let-item let-i="index" [ngForOf]="model" *ngIf="!hasSubMenu()">
706
+ <li class="p-menuitem-separator" *ngIf="item.separator" [ngClass]="{ 'p-hidden': item.visible === false }" role="separator"></li>
534
707
  <li
535
708
  class="p-menuitem"
536
709
  *ngIf="!item.separator"
537
710
  [pMenuItemContent]="item"
538
- [ngClass]="{ 'p-hidden': item.visible === false }"
711
+ [ngClass]="{ 'p-hidden': item.visible === false, 'p-focus': focusedOptionId() && menuitemId(id, i) === focusedOptionId(), 'p-disabled': disabled(item.disabled) }"
539
712
  [ngStyle]="item.style"
540
713
  [class]="item.styleClass"
714
+ (onMenuItemClick)="itemClick($event)"
541
715
  pTooltip
542
716
  [tooltipOptions]="item.tooltipOptions"
543
- role="none"
717
+ role="menuitem"
718
+ [attr.data-pc-section]="'menuitem'"
719
+ [attr.aria-label]="label(item.label)"
720
+ [attr.data-p-focused]="isItemFocused(menuitemId(id, i))"
721
+ [attr.data-p-disabled]="disabled(item.disabled)"
722
+ [attr.aria-disabled]="disabled(item.disabled)"
723
+ [attr.id]="menuitemId(id, i)"
724
+ [id]="menuitemId(id, i)"
544
725
  ></li>
545
726
  </ng-template>
546
727
  </ul>
547
728
  </div>
548
- `, isInline: true, styles: [".p-menu-overlay{position:absolute;top:0;left:0}.p-menu ul{margin:0;padding:0;list-style:none}.p-menu .p-submenu-header{align-items:center}.p-menu .p-menuitem-link{cursor:pointer;display:flex;align-items:center;text-decoration:none;overflow:hidden;position:relative}.p-menu .p-menuitem-text{line-height:1}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: MenuItemContent, selector: "[pMenuItemContent]", inputs: ["pMenuItemContent"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], animations: [trigger('overlayAnimation', [transition(':enter', [style({ opacity: 0, transform: 'scaleY(0.8)' }), animate('{{showTransitionParams}}')]), transition(':leave', [animate('{{hideTransitionParams}}', style({ opacity: 0 }))])])], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
729
+ `, isInline: true, styles: [".p-menu-overlay{position:absolute;top:0;left:0}.p-menu ul{margin:0;padding:0;list-style:none}.p-menu .p-submenu-header{align-items:center}.p-menu .p-menuitem-link{cursor:pointer;display:flex;align-items:center;text-decoration:none;overflow:hidden;position:relative}.p-menu .p-menuitem-text{line-height:1}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: MenuItemContent, selector: "[pMenuItemContent]", inputs: ["pMenuItemContent", "id"], outputs: ["onMenuItemClick"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], animations: [trigger('overlayAnimation', [transition(':enter', [style({ opacity: 0, transform: 'scaleY(0.8)' }), animate('{{showTransitionParams}}')]), transition(':leave', [animate('{{hideTransitionParams}}', style({ opacity: 0 }))])])], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
549
730
  }
550
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: Menu, decorators: [{
731
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: Menu, decorators: [{
551
732
  type: Component,
552
733
  args: [{ selector: 'p-menu', template: `
553
734
  <div
@@ -561,10 +742,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
561
742
  [@.disabled]="popup !== true"
562
743
  (@overlayAnimation.start)="onOverlayAnimationStart($event)"
563
744
  (@overlayAnimation.done)="onOverlayAnimationEnd($event)"
745
+ [attr.data-pc-name]="'menu'"
746
+ [id]="id"
564
747
  >
565
- <ul class="p-menu-list p-reset" role="menu">
566
- <ng-template ngFor let-submenu [ngForOf]="model" *ngIf="hasSubMenu()">
567
- <li class="p-menu-separator" *ngIf="submenu.separator" [ngClass]="{ 'p-hidden': submenu.visible === false }" role="separator"></li>
748
+ <ul
749
+ #list
750
+ class="p-menu-list p-reset"
751
+ role="menu"
752
+ [id]="id + '_list'"
753
+ [tabindex]="tabindex"
754
+ [attr.data-pc-section]="'menu'"
755
+ [attr.aria-activedescendant]="activedescendant()"
756
+ [attr.aria-label]="ariaLabel"
757
+ [attr.aria-labelledBy]="ariaLabelledBy"
758
+ (focus)="onListFocus($event)"
759
+ (blur)="onListBlur($event)"
760
+ (keydown)="onListKeyDown($event)"
761
+ >
762
+ <ng-template ngFor let-submenu let-i="index" [ngForOf]="model" *ngIf="hasSubMenu()">
763
+ <li class="p-menuitem-separator" *ngIf="submenu.separator" [ngClass]="{ 'p-hidden': submenu.visible === false }" role="separator"></li>
568
764
  <li
569
765
  class="p-submenu-header"
570
766
  [attr.data-automationid]="submenu.automationId"
@@ -573,37 +769,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
573
769
  pTooltip
574
770
  [tooltipOptions]="submenu.tooltipOptions"
575
771
  role="none"
772
+ [attr.id]="menuitemId(id, i)"
576
773
  >
577
774
  <span *ngIf="submenu.escape !== false; else htmlSubmenuLabel">{{ submenu.label }}</span>
578
775
  <ng-template #htmlSubmenuLabel><span [innerHTML]="submenu.label | safeHtml"></span></ng-template>
579
776
  </li>
580
- <ng-template ngFor let-item [ngForOf]="submenu.items">
581
- <li class="p-menu-separator" *ngIf="item.separator" [ngClass]="{ 'p-hidden': item.visible === false || submenu.visible === false }" role="separator"></li>
777
+ <ng-template ngFor let-item let-j="index" [ngForOf]="submenu.items">
778
+ <li class="p-menuitem-separator" *ngIf="item.separator" [ngClass]="{ 'p-hidden': item.visible === false || submenu.visible === false }" role="separator"></li>
582
779
  <li
583
780
  class="p-menuitem"
584
781
  *ngIf="!item.separator"
585
782
  [pMenuItemContent]="item"
586
- [ngClass]="{ 'p-hidden': item.visible === false || submenu.visible === false }"
783
+ [ngClass]="{ 'p-hidden': item.visible === false || submenu.visible === false, 'p-focus': focusedOptionId() && menuitemId(id, i, j) === focusedOptionId(), 'p-disabled': disabled(item.disabled) }"
587
784
  [ngStyle]="item.style"
588
785
  [class]="item.styleClass"
786
+ (onMenuItemClick)="itemClick($event)"
589
787
  pTooltip
590
788
  [tooltipOptions]="item.tooltipOptions"
591
- role="none"
789
+ role="menuitem"
790
+ [attr.data-pc-section]="'menuitem'"
791
+ [attr.aria-label]="label(item.label)"
792
+ [attr.data-p-focused]="isItemFocused(menuitemId(id, i, j))"
793
+ [attr.data-p-disabled]="disabled(item.disabled)"
794
+ [attr.aria-disabled]="disabled(item.disabled)"
795
+ [attr.id]="menuitemId(id, i, j)"
796
+ [id]="menuitemId(id, i, j)"
592
797
  ></li>
593
798
  </ng-template>
594
799
  </ng-template>
595
- <ng-template ngFor let-item [ngForOf]="model" *ngIf="!hasSubMenu()">
596
- <li class="p-menu-separator" *ngIf="item.separator" [ngClass]="{ 'p-hidden': item.visible === false }" role="separator"></li>
800
+ <ng-template ngFor let-item let-i="index" [ngForOf]="model" *ngIf="!hasSubMenu()">
801
+ <li class="p-menuitem-separator" *ngIf="item.separator" [ngClass]="{ 'p-hidden': item.visible === false }" role="separator"></li>
597
802
  <li
598
803
  class="p-menuitem"
599
804
  *ngIf="!item.separator"
600
805
  [pMenuItemContent]="item"
601
- [ngClass]="{ 'p-hidden': item.visible === false }"
806
+ [ngClass]="{ 'p-hidden': item.visible === false, 'p-focus': focusedOptionId() && menuitemId(id, i) === focusedOptionId(), 'p-disabled': disabled(item.disabled) }"
602
807
  [ngStyle]="item.style"
603
808
  [class]="item.styleClass"
809
+ (onMenuItemClick)="itemClick($event)"
604
810
  pTooltip
605
811
  [tooltipOptions]="item.tooltipOptions"
606
- role="none"
812
+ role="menuitem"
813
+ [attr.data-pc-section]="'menuitem'"
814
+ [attr.aria-label]="label(item.label)"
815
+ [attr.data-p-focused]="isItemFocused(menuitemId(id, i))"
816
+ [attr.data-p-disabled]="disabled(item.disabled)"
817
+ [attr.aria-disabled]="disabled(item.disabled)"
818
+ [attr.id]="menuitemId(id, i)"
819
+ [id]="menuitemId(id, i)"
607
820
  ></li>
608
821
  </ng-template>
609
822
  </ul>
@@ -635,17 +848,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
635
848
  type: Input
636
849
  }], hideTransitionOptions: [{
637
850
  type: Input
851
+ }], ariaLabel: [{
852
+ type: Input
853
+ }], ariaLabelledBy: [{
854
+ type: Input
855
+ }], id: [{
856
+ type: Input
857
+ }], tabindex: [{
858
+ type: Input
638
859
  }], onShow: [{
639
860
  type: Output
640
861
  }], onHide: [{
641
862
  type: Output
863
+ }], onBlur: [{
864
+ type: Output
865
+ }], onFocus: [{
866
+ type: Output
867
+ }], listViewChild: [{
868
+ type: ViewChild,
869
+ args: ['list']
870
+ }], containerViewChild: [{
871
+ type: ViewChild,
872
+ args: ['container']
642
873
  }] } });
643
874
  class MenuModule {
644
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: MenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
645
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.2", ngImport: i0, type: MenuModule, declarations: [Menu, MenuItemContent, SafeHtmlPipe], imports: [CommonModule, RouterModule, RippleModule, TooltipModule], exports: [Menu, RouterModule, TooltipModule] });
646
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: MenuModule, imports: [CommonModule, RouterModule, RippleModule, TooltipModule, RouterModule, TooltipModule] });
875
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: MenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
876
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: MenuModule, declarations: [Menu, MenuItemContent, SafeHtmlPipe], imports: [CommonModule, RouterModule, RippleModule, TooltipModule], exports: [Menu, RouterModule, TooltipModule] });
877
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: MenuModule, imports: [CommonModule, RouterModule, RippleModule, TooltipModule, RouterModule, TooltipModule] });
647
878
  }
648
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: MenuModule, decorators: [{
879
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: MenuModule, decorators: [{
649
880
  type: NgModule,
650
881
  args: [{
651
882
  imports: [CommonModule, RouterModule, RippleModule, TooltipModule],