primeng 0.0.0-watch

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 (507) hide show
  1. package/LICENSE.md +77 -0
  2. package/README.md +11 -0
  3. package/accordion/index.d.ts +255 -0
  4. package/animateonscroll/index.d.ts +71 -0
  5. package/api/index.d.ts +1820 -0
  6. package/autocomplete/index.d.ts +925 -0
  7. package/autofocus/index.d.ts +31 -0
  8. package/avatar/index.d.ts +115 -0
  9. package/avatargroup/index.d.ts +60 -0
  10. package/badge/index.d.ts +156 -0
  11. package/base/index.d.ts +63 -0
  12. package/basecomponent/index.d.ts +54 -0
  13. package/baseeditableholder/index.d.ts +45 -0
  14. package/baseinput/index.d.ts +73 -0
  15. package/basemodelholder/index.d.ts +12 -0
  16. package/blockui/index.d.ts +114 -0
  17. package/breadcrumb/index.d.ts +179 -0
  18. package/button/index.d.ts +478 -0
  19. package/buttongroup/index.d.ts +43 -0
  20. package/card/index.d.ts +154 -0
  21. package/carousel/index.d.ts +443 -0
  22. package/cascadeselect/index.d.ts +729 -0
  23. package/chart/index.d.ts +128 -0
  24. package/checkbox/index.d.ts +248 -0
  25. package/chip/index.d.ts +165 -0
  26. package/colorpicker/index.d.ts +329 -0
  27. package/config/index.d.ts +89 -0
  28. package/confirmdialog/index.d.ts +358 -0
  29. package/confirmpopup/index.d.ts +218 -0
  30. package/contextmenu/index.d.ts +356 -0
  31. package/dataview/index.d.ts +539 -0
  32. package/datepicker/index.d.ts +1191 -0
  33. package/dialog/index.d.ts +531 -0
  34. package/divider/index.d.ts +114 -0
  35. package/dock/index.d.ts +201 -0
  36. package/dom/index.d.ts +109 -0
  37. package/dragdrop/index.d.ts +121 -0
  38. package/drawer/index.d.ts +309 -0
  39. package/dynamicdialog/index.d.ts +544 -0
  40. package/editor/index.d.ts +306 -0
  41. package/fesm2022/primeng-accordion.mjs +593 -0
  42. package/fesm2022/primeng-accordion.mjs.map +1 -0
  43. package/fesm2022/primeng-animateonscroll.mjs +178 -0
  44. package/fesm2022/primeng-animateonscroll.mjs.map +1 -0
  45. package/fesm2022/primeng-api.mjs +836 -0
  46. package/fesm2022/primeng-api.mjs.map +1 -0
  47. package/fesm2022/primeng-autocomplete.mjs +2073 -0
  48. package/fesm2022/primeng-autocomplete.mjs.map +1 -0
  49. package/fesm2022/primeng-autofocus.mjs +83 -0
  50. package/fesm2022/primeng-autofocus.mjs.map +1 -0
  51. package/fesm2022/primeng-avatar.mjs +181 -0
  52. package/fesm2022/primeng-avatar.mjs.map +1 -0
  53. package/fesm2022/primeng-avatargroup.mjs +103 -0
  54. package/fesm2022/primeng-avatargroup.mjs.map +1 -0
  55. package/fesm2022/primeng-badge.mjs +366 -0
  56. package/fesm2022/primeng-badge.mjs.map +1 -0
  57. package/fesm2022/primeng-base.mjs +127 -0
  58. package/fesm2022/primeng-base.mjs.map +1 -0
  59. package/fesm2022/primeng-basecomponent.mjs +173 -0
  60. package/fesm2022/primeng-basecomponent.mjs.map +1 -0
  61. package/fesm2022/primeng-baseeditableholder.mjs +67 -0
  62. package/fesm2022/primeng-baseeditableholder.mjs.map +1 -0
  63. package/fesm2022/primeng-baseinput.mjs +85 -0
  64. package/fesm2022/primeng-baseinput.mjs.map +1 -0
  65. package/fesm2022/primeng-basemodelholder.mjs +25 -0
  66. package/fesm2022/primeng-basemodelholder.mjs.map +1 -0
  67. package/fesm2022/primeng-blockui.mjs +237 -0
  68. package/fesm2022/primeng-blockui.mjs.map +1 -0
  69. package/fesm2022/primeng-breadcrumb.mjs +457 -0
  70. package/fesm2022/primeng-breadcrumb.mjs.map +1 -0
  71. package/fesm2022/primeng-button.mjs +864 -0
  72. package/fesm2022/primeng-button.mjs.map +1 -0
  73. package/fesm2022/primeng-buttongroup.mjs +109 -0
  74. package/fesm2022/primeng-buttongroup.mjs.map +1 -0
  75. package/fesm2022/primeng-card.mjs +271 -0
  76. package/fesm2022/primeng-card.mjs.map +1 -0
  77. package/fesm2022/primeng-carousel.mjs +1101 -0
  78. package/fesm2022/primeng-carousel.mjs.map +1 -0
  79. package/fesm2022/primeng-cascadeselect.mjs +1778 -0
  80. package/fesm2022/primeng-cascadeselect.mjs.map +1 -0
  81. package/fesm2022/primeng-chart.mjs +246 -0
  82. package/fesm2022/primeng-chart.mjs.map +1 -0
  83. package/fesm2022/primeng-checkbox.mjs +441 -0
  84. package/fesm2022/primeng-checkbox.mjs.map +1 -0
  85. package/fesm2022/primeng-chip.mjs +323 -0
  86. package/fesm2022/primeng-chip.mjs.map +1 -0
  87. package/fesm2022/primeng-colorpicker.mjs +865 -0
  88. package/fesm2022/primeng-colorpicker.mjs.map +1 -0
  89. package/fesm2022/primeng-config.mjs +289 -0
  90. package/fesm2022/primeng-config.mjs.map +1 -0
  91. package/fesm2022/primeng-confirmdialog.mjs +823 -0
  92. package/fesm2022/primeng-confirmdialog.mjs.map +1 -0
  93. package/fesm2022/primeng-confirmpopup.mjs +630 -0
  94. package/fesm2022/primeng-confirmpopup.mjs.map +1 -0
  95. package/fesm2022/primeng-contextmenu.mjs +1410 -0
  96. package/fesm2022/primeng-contextmenu.mjs.map +1 -0
  97. package/fesm2022/primeng-dataview.mjs +812 -0
  98. package/fesm2022/primeng-dataview.mjs.map +1 -0
  99. package/fesm2022/primeng-datepicker.mjs +4373 -0
  100. package/fesm2022/primeng-datepicker.mjs.map +1 -0
  101. package/fesm2022/primeng-dialog.mjs +1278 -0
  102. package/fesm2022/primeng-dialog.mjs.map +1 -0
  103. package/fesm2022/primeng-divider.mjs +145 -0
  104. package/fesm2022/primeng-divider.mjs.map +1 -0
  105. package/fesm2022/primeng-dock.mjs +540 -0
  106. package/fesm2022/primeng-dock.mjs.map +1 -0
  107. package/fesm2022/primeng-dom.mjs +775 -0
  108. package/fesm2022/primeng-dom.mjs.map +1 -0
  109. package/fesm2022/primeng-dragdrop.mjs +336 -0
  110. package/fesm2022/primeng-dragdrop.mjs.map +1 -0
  111. package/fesm2022/primeng-drawer.mjs +738 -0
  112. package/fesm2022/primeng-drawer.mjs.map +1 -0
  113. package/fesm2022/primeng-dynamicdialog.mjs +1242 -0
  114. package/fesm2022/primeng-dynamicdialog.mjs.map +1 -0
  115. package/fesm2022/primeng-editor.mjs +511 -0
  116. package/fesm2022/primeng-editor.mjs.map +1 -0
  117. package/fesm2022/primeng-fieldset.mjs +417 -0
  118. package/fesm2022/primeng-fieldset.mjs.map +1 -0
  119. package/fesm2022/primeng-fileupload.mjs +1561 -0
  120. package/fesm2022/primeng-fileupload.mjs.map +1 -0
  121. package/fesm2022/primeng-floatlabel.mjs +103 -0
  122. package/fesm2022/primeng-floatlabel.mjs.map +1 -0
  123. package/fesm2022/primeng-fluid.mjs +80 -0
  124. package/fesm2022/primeng-fluid.mjs.map +1 -0
  125. package/fesm2022/primeng-focustrap.mjs +110 -0
  126. package/fesm2022/primeng-focustrap.mjs.map +1 -0
  127. package/fesm2022/primeng-galleria.mjs +1874 -0
  128. package/fesm2022/primeng-galleria.mjs.map +1 -0
  129. package/fesm2022/primeng-iconfield.mjs +101 -0
  130. package/fesm2022/primeng-iconfield.mjs.map +1 -0
  131. package/fesm2022/primeng-icons-angledoubledown.mjs +37 -0
  132. package/fesm2022/primeng-icons-angledoubledown.mjs.map +1 -0
  133. package/fesm2022/primeng-icons-angledoubleleft.mjs +37 -0
  134. package/fesm2022/primeng-icons-angledoubleleft.mjs.map +1 -0
  135. package/fesm2022/primeng-icons-angledoubleright.mjs +37 -0
  136. package/fesm2022/primeng-icons-angledoubleright.mjs.map +1 -0
  137. package/fesm2022/primeng-icons-angledoubleup.mjs +37 -0
  138. package/fesm2022/primeng-icons-angledoubleup.mjs.map +1 -0
  139. package/fesm2022/primeng-icons-angledown.mjs +33 -0
  140. package/fesm2022/primeng-icons-angledown.mjs.map +1 -0
  141. package/fesm2022/primeng-icons-angleleft.mjs +33 -0
  142. package/fesm2022/primeng-icons-angleleft.mjs.map +1 -0
  143. package/fesm2022/primeng-icons-angleright.mjs +33 -0
  144. package/fesm2022/primeng-icons-angleright.mjs.map +1 -0
  145. package/fesm2022/primeng-icons-angleup.mjs +33 -0
  146. package/fesm2022/primeng-icons-angleup.mjs.map +1 -0
  147. package/fesm2022/primeng-icons-arrowdown.mjs +57 -0
  148. package/fesm2022/primeng-icons-arrowdown.mjs.map +1 -0
  149. package/fesm2022/primeng-icons-arrowdownleft.mjs +33 -0
  150. package/fesm2022/primeng-icons-arrowdownleft.mjs.map +1 -0
  151. package/fesm2022/primeng-icons-arrowdownright.mjs +33 -0
  152. package/fesm2022/primeng-icons-arrowdownright.mjs.map +1 -0
  153. package/fesm2022/primeng-icons-arrowleft.mjs +57 -0
  154. package/fesm2022/primeng-icons-arrowleft.mjs.map +1 -0
  155. package/fesm2022/primeng-icons-arrowright.mjs +37 -0
  156. package/fesm2022/primeng-icons-arrowright.mjs.map +1 -0
  157. package/fesm2022/primeng-icons-arrowup.mjs +57 -0
  158. package/fesm2022/primeng-icons-arrowup.mjs.map +1 -0
  159. package/fesm2022/primeng-icons-ban.mjs +53 -0
  160. package/fesm2022/primeng-icons-ban.mjs.map +1 -0
  161. package/fesm2022/primeng-icons-bars.mjs +37 -0
  162. package/fesm2022/primeng-icons-bars.mjs.map +1 -0
  163. package/fesm2022/primeng-icons-baseicon.mjs +102 -0
  164. package/fesm2022/primeng-icons-baseicon.mjs.map +1 -0
  165. package/fesm2022/primeng-icons-blank.mjs +23 -0
  166. package/fesm2022/primeng-icons-blank.mjs.map +1 -0
  167. package/fesm2022/primeng-icons-calendar.mjs +33 -0
  168. package/fesm2022/primeng-icons-calendar.mjs.map +1 -0
  169. package/fesm2022/primeng-icons-caretleft.mjs +33 -0
  170. package/fesm2022/primeng-icons-caretleft.mjs.map +1 -0
  171. package/fesm2022/primeng-icons-caretright.mjs +33 -0
  172. package/fesm2022/primeng-icons-caretright.mjs.map +1 -0
  173. package/fesm2022/primeng-icons-check.mjs +33 -0
  174. package/fesm2022/primeng-icons-check.mjs.map +1 -0
  175. package/fesm2022/primeng-icons-chevrondown.mjs +33 -0
  176. package/fesm2022/primeng-icons-chevrondown.mjs.map +1 -0
  177. package/fesm2022/primeng-icons-chevronleft.mjs +33 -0
  178. package/fesm2022/primeng-icons-chevronleft.mjs.map +1 -0
  179. package/fesm2022/primeng-icons-chevronright.mjs +33 -0
  180. package/fesm2022/primeng-icons-chevronright.mjs.map +1 -0
  181. package/fesm2022/primeng-icons-chevronup.mjs +33 -0
  182. package/fesm2022/primeng-icons-chevronup.mjs.map +1 -0
  183. package/fesm2022/primeng-icons-exclamationtriangle.mjs +69 -0
  184. package/fesm2022/primeng-icons-exclamationtriangle.mjs.map +1 -0
  185. package/fesm2022/primeng-icons-eye.mjs +37 -0
  186. package/fesm2022/primeng-icons-eye.mjs.map +1 -0
  187. package/fesm2022/primeng-icons-eyeslash.mjs +57 -0
  188. package/fesm2022/primeng-icons-eyeslash.mjs.map +1 -0
  189. package/fesm2022/primeng-icons-filter.mjs +53 -0
  190. package/fesm2022/primeng-icons-filter.mjs.map +1 -0
  191. package/fesm2022/primeng-icons-filterfill.mjs +33 -0
  192. package/fesm2022/primeng-icons-filterfill.mjs.map +1 -0
  193. package/fesm2022/primeng-icons-filterslash.mjs +57 -0
  194. package/fesm2022/primeng-icons-filterslash.mjs.map +1 -0
  195. package/fesm2022/primeng-icons-home.mjs +57 -0
  196. package/fesm2022/primeng-icons-home.mjs.map +1 -0
  197. package/fesm2022/primeng-icons-infocircle.mjs +57 -0
  198. package/fesm2022/primeng-icons-infocircle.mjs.map +1 -0
  199. package/fesm2022/primeng-icons-minus.mjs +33 -0
  200. package/fesm2022/primeng-icons-minus.mjs.map +1 -0
  201. package/fesm2022/primeng-icons-pencil.mjs +53 -0
  202. package/fesm2022/primeng-icons-pencil.mjs.map +1 -0
  203. package/fesm2022/primeng-icons-plus.mjs +53 -0
  204. package/fesm2022/primeng-icons-plus.mjs.map +1 -0
  205. package/fesm2022/primeng-icons-refresh.mjs +57 -0
  206. package/fesm2022/primeng-icons-refresh.mjs.map +1 -0
  207. package/fesm2022/primeng-icons-search.mjs +57 -0
  208. package/fesm2022/primeng-icons-search.mjs.map +1 -0
  209. package/fesm2022/primeng-icons-searchminus.mjs +57 -0
  210. package/fesm2022/primeng-icons-searchminus.mjs.map +1 -0
  211. package/fesm2022/primeng-icons-searchplus.mjs +57 -0
  212. package/fesm2022/primeng-icons-searchplus.mjs.map +1 -0
  213. package/fesm2022/primeng-icons-sortalt.mjs +65 -0
  214. package/fesm2022/primeng-icons-sortalt.mjs.map +1 -0
  215. package/fesm2022/primeng-icons-sortamountdown.mjs +53 -0
  216. package/fesm2022/primeng-icons-sortamountdown.mjs.map +1 -0
  217. package/fesm2022/primeng-icons-sortamountupalt.mjs +53 -0
  218. package/fesm2022/primeng-icons-sortamountupalt.mjs.map +1 -0
  219. package/fesm2022/primeng-icons-spinner.mjs +53 -0
  220. package/fesm2022/primeng-icons-spinner.mjs.map +1 -0
  221. package/fesm2022/primeng-icons-star.mjs +53 -0
  222. package/fesm2022/primeng-icons-star.mjs.map +1 -0
  223. package/fesm2022/primeng-icons-starfill.mjs +53 -0
  224. package/fesm2022/primeng-icons-starfill.mjs.map +1 -0
  225. package/fesm2022/primeng-icons-thlarge.mjs +57 -0
  226. package/fesm2022/primeng-icons-thlarge.mjs.map +1 -0
  227. package/fesm2022/primeng-icons-times.mjs +33 -0
  228. package/fesm2022/primeng-icons-times.mjs.map +1 -0
  229. package/fesm2022/primeng-icons-timescircle.mjs +57 -0
  230. package/fesm2022/primeng-icons-timescircle.mjs.map +1 -0
  231. package/fesm2022/primeng-icons-trash.mjs +57 -0
  232. package/fesm2022/primeng-icons-trash.mjs.map +1 -0
  233. package/fesm2022/primeng-icons-undo.mjs +57 -0
  234. package/fesm2022/primeng-icons-undo.mjs.map +1 -0
  235. package/fesm2022/primeng-icons-upload.mjs +57 -0
  236. package/fesm2022/primeng-icons-upload.mjs.map +1 -0
  237. package/fesm2022/primeng-icons-windowmaximize.mjs +57 -0
  238. package/fesm2022/primeng-icons-windowmaximize.mjs.map +1 -0
  239. package/fesm2022/primeng-icons-windowminimize.mjs +57 -0
  240. package/fesm2022/primeng-icons-windowminimize.mjs.map +1 -0
  241. package/fesm2022/primeng-icons.mjs +63 -0
  242. package/fesm2022/primeng-icons.mjs.map +1 -0
  243. package/fesm2022/primeng-iftalabel.mjs +89 -0
  244. package/fesm2022/primeng-iftalabel.mjs.map +1 -0
  245. package/fesm2022/primeng-image.mjs +705 -0
  246. package/fesm2022/primeng-image.mjs.map +1 -0
  247. package/fesm2022/primeng-imagecompare.mjs +192 -0
  248. package/fesm2022/primeng-imagecompare.mjs.map +1 -0
  249. package/fesm2022/primeng-inplace.mjs +319 -0
  250. package/fesm2022/primeng-inplace.mjs.map +1 -0
  251. package/fesm2022/primeng-inputgroup.mjs +128 -0
  252. package/fesm2022/primeng-inputgroup.mjs.map +1 -0
  253. package/fesm2022/primeng-inputgroupaddon.mjs +83 -0
  254. package/fesm2022/primeng-inputgroupaddon.mjs.map +1 -0
  255. package/fesm2022/primeng-inputicon.mjs +71 -0
  256. package/fesm2022/primeng-inputicon.mjs.map +1 -0
  257. package/fesm2022/primeng-inputmask.mjs +926 -0
  258. package/fesm2022/primeng-inputmask.mjs.map +1 -0
  259. package/fesm2022/primeng-inputnumber.mjs +1621 -0
  260. package/fesm2022/primeng-inputnumber.mjs.map +1 -0
  261. package/fesm2022/primeng-inputotp.mjs +443 -0
  262. package/fesm2022/primeng-inputotp.mjs.map +1 -0
  263. package/fesm2022/primeng-inputtext.mjs +145 -0
  264. package/fesm2022/primeng-inputtext.mjs.map +1 -0
  265. package/fesm2022/primeng-keyfilter.mjs +267 -0
  266. package/fesm2022/primeng-keyfilter.mjs.map +1 -0
  267. package/fesm2022/primeng-knob.mjs +491 -0
  268. package/fesm2022/primeng-knob.mjs.map +1 -0
  269. package/fesm2022/primeng-listbox.mjs +1925 -0
  270. package/fesm2022/primeng-listbox.mjs.map +1 -0
  271. package/fesm2022/primeng-megamenu.mjs +1493 -0
  272. package/fesm2022/primeng-megamenu.mjs.map +1 -0
  273. package/fesm2022/primeng-menu.mjs +1069 -0
  274. package/fesm2022/primeng-menu.mjs.map +1 -0
  275. package/fesm2022/primeng-menubar.mjs +1391 -0
  276. package/fesm2022/primeng-menubar.mjs.map +1 -0
  277. package/fesm2022/primeng-message.mjs +420 -0
  278. package/fesm2022/primeng-message.mjs.map +1 -0
  279. package/fesm2022/primeng-metergroup.mjs +393 -0
  280. package/fesm2022/primeng-metergroup.mjs.map +1 -0
  281. package/fesm2022/primeng-multiselect.mjs +2519 -0
  282. package/fesm2022/primeng-multiselect.mjs.map +1 -0
  283. package/fesm2022/primeng-orderlist.mjs +890 -0
  284. package/fesm2022/primeng-orderlist.mjs.map +1 -0
  285. package/fesm2022/primeng-organizationchart.mjs +520 -0
  286. package/fesm2022/primeng-organizationchart.mjs.map +1 -0
  287. package/fesm2022/primeng-overlay.mjs +776 -0
  288. package/fesm2022/primeng-overlay.mjs.map +1 -0
  289. package/fesm2022/primeng-overlaybadge.mjs +151 -0
  290. package/fesm2022/primeng-overlaybadge.mjs.map +1 -0
  291. package/fesm2022/primeng-paginator.mjs +802 -0
  292. package/fesm2022/primeng-paginator.mjs.map +1 -0
  293. package/fesm2022/primeng-panel.mjs +595 -0
  294. package/fesm2022/primeng-panel.mjs.map +1 -0
  295. package/fesm2022/primeng-panelmenu.mjs +1442 -0
  296. package/fesm2022/primeng-panelmenu.mjs.map +1 -0
  297. package/fesm2022/primeng-password.mjs +1156 -0
  298. package/fesm2022/primeng-password.mjs.map +1 -0
  299. package/fesm2022/primeng-picklist.mjs +2057 -0
  300. package/fesm2022/primeng-picklist.mjs.map +1 -0
  301. package/fesm2022/primeng-popover.mjs +611 -0
  302. package/fesm2022/primeng-popover.mjs.map +1 -0
  303. package/fesm2022/primeng-progressbar.mjs +196 -0
  304. package/fesm2022/primeng-progressbar.mjs.map +1 -0
  305. package/fesm2022/primeng-progressspinner.mjs +140 -0
  306. package/fesm2022/primeng-progressspinner.mjs.map +1 -0
  307. package/fesm2022/primeng-radiobutton.mjs +358 -0
  308. package/fesm2022/primeng-radiobutton.mjs.map +1 -0
  309. package/fesm2022/primeng-rating.mjs +388 -0
  310. package/fesm2022/primeng-rating.mjs.map +1 -0
  311. package/fesm2022/primeng-ripple.mjs +190 -0
  312. package/fesm2022/primeng-ripple.mjs.map +1 -0
  313. package/fesm2022/primeng-scroller.mjs +1306 -0
  314. package/fesm2022/primeng-scroller.mjs.map +1 -0
  315. package/fesm2022/primeng-scrollpanel.mjs +560 -0
  316. package/fesm2022/primeng-scrollpanel.mjs.map +1 -0
  317. package/fesm2022/primeng-scrolltop.mjs +339 -0
  318. package/fesm2022/primeng-scrolltop.mjs.map +1 -0
  319. package/fesm2022/primeng-select.mjs +2250 -0
  320. package/fesm2022/primeng-select.mjs.map +1 -0
  321. package/fesm2022/primeng-selectbutton.mjs +413 -0
  322. package/fesm2022/primeng-selectbutton.mjs.map +1 -0
  323. package/fesm2022/primeng-skeleton.mjs +154 -0
  324. package/fesm2022/primeng-skeleton.mjs.map +1 -0
  325. package/fesm2022/primeng-slider.mjs +843 -0
  326. package/fesm2022/primeng-slider.mjs.map +1 -0
  327. package/fesm2022/primeng-speeddial.mjs +901 -0
  328. package/fesm2022/primeng-speeddial.mjs.map +1 -0
  329. package/fesm2022/primeng-splitbutton.mjs +598 -0
  330. package/fesm2022/primeng-splitbutton.mjs.map +1 -0
  331. package/fesm2022/primeng-splitter.mjs +587 -0
  332. package/fesm2022/primeng-splitter.mjs.map +1 -0
  333. package/fesm2022/primeng-stepper.mjs +683 -0
  334. package/fesm2022/primeng-stepper.mjs.map +1 -0
  335. package/fesm2022/primeng-steps.mjs +424 -0
  336. package/fesm2022/primeng-steps.mjs.map +1 -0
  337. package/fesm2022/primeng-styleclass.mjs +354 -0
  338. package/fesm2022/primeng-styleclass.mjs.map +1 -0
  339. package/fesm2022/primeng-table.mjs +7540 -0
  340. package/fesm2022/primeng-table.mjs.map +1 -0
  341. package/fesm2022/primeng-tabs.mjs +794 -0
  342. package/fesm2022/primeng-tabs.mjs.map +1 -0
  343. package/fesm2022/primeng-tag.mjs +176 -0
  344. package/fesm2022/primeng-tag.mjs.map +1 -0
  345. package/fesm2022/primeng-terminal.mjs +254 -0
  346. package/fesm2022/primeng-terminal.mjs.map +1 -0
  347. package/fesm2022/primeng-textarea.mjs +197 -0
  348. package/fesm2022/primeng-textarea.mjs.map +1 -0
  349. package/fesm2022/primeng-tieredmenu.mjs +1457 -0
  350. package/fesm2022/primeng-tieredmenu.mjs.map +1 -0
  351. package/fesm2022/primeng-timeline.mjs +228 -0
  352. package/fesm2022/primeng-timeline.mjs.map +1 -0
  353. package/fesm2022/primeng-toast.mjs +751 -0
  354. package/fesm2022/primeng-toast.mjs.map +1 -0
  355. package/fesm2022/primeng-togglebutton.mjs +361 -0
  356. package/fesm2022/primeng-togglebutton.mjs.map +1 -0
  357. package/fesm2022/primeng-toggleswitch.mjs +330 -0
  358. package/fesm2022/primeng-toggleswitch.mjs.map +1 -0
  359. package/fesm2022/primeng-toolbar.mjs +189 -0
  360. package/fesm2022/primeng-toolbar.mjs.map +1 -0
  361. package/fesm2022/primeng-tooltip.mjs +757 -0
  362. package/fesm2022/primeng-tooltip.mjs.map +1 -0
  363. package/fesm2022/primeng-tree.mjs +2188 -0
  364. package/fesm2022/primeng-tree.mjs.map +1 -0
  365. package/fesm2022/primeng-treeselect.mjs +1328 -0
  366. package/fesm2022/primeng-treeselect.mjs.map +1 -0
  367. package/fesm2022/primeng-treetable.mjs +5080 -0
  368. package/fesm2022/primeng-treetable.mjs.map +1 -0
  369. package/fesm2022/primeng-ts-helpers.mjs +4 -0
  370. package/fesm2022/primeng-ts-helpers.mjs.map +1 -0
  371. package/fesm2022/primeng-usestyle.mjs +52 -0
  372. package/fesm2022/primeng-usestyle.mjs.map +1 -0
  373. package/fesm2022/primeng-utils.mjs +332 -0
  374. package/fesm2022/primeng-utils.mjs.map +1 -0
  375. package/fesm2022/primeng.mjs +6 -0
  376. package/fesm2022/primeng.mjs.map +1 -0
  377. package/fieldset/index.d.ts +217 -0
  378. package/fileupload/index.d.ts +786 -0
  379. package/floatlabel/index.d.ts +59 -0
  380. package/fluid/index.d.ts +48 -0
  381. package/focustrap/index.d.ts +36 -0
  382. package/galleria/index.d.ts +710 -0
  383. package/iconfield/index.d.ts +64 -0
  384. package/icons/angledoubledown/index.d.ts +9 -0
  385. package/icons/angledoubleleft/index.d.ts +9 -0
  386. package/icons/angledoubleright/index.d.ts +9 -0
  387. package/icons/angledoubleup/index.d.ts +9 -0
  388. package/icons/angledown/index.d.ts +9 -0
  389. package/icons/angleleft/index.d.ts +9 -0
  390. package/icons/angleright/index.d.ts +9 -0
  391. package/icons/angleup/index.d.ts +9 -0
  392. package/icons/arrowdown/index.d.ts +12 -0
  393. package/icons/arrowdownleft/index.d.ts +9 -0
  394. package/icons/arrowdownright/index.d.ts +9 -0
  395. package/icons/arrowleft/index.d.ts +11 -0
  396. package/icons/arrowright/index.d.ts +9 -0
  397. package/icons/arrowup/index.d.ts +11 -0
  398. package/icons/ban/index.d.ts +11 -0
  399. package/icons/bars/index.d.ts +9 -0
  400. package/icons/baseicon/index.d.ts +33 -0
  401. package/icons/blank/index.d.ts +9 -0
  402. package/icons/calendar/index.d.ts +9 -0
  403. package/icons/caretleft/index.d.ts +9 -0
  404. package/icons/caretright/index.d.ts +9 -0
  405. package/icons/check/index.d.ts +9 -0
  406. package/icons/chevrondown/index.d.ts +9 -0
  407. package/icons/chevronleft/index.d.ts +9 -0
  408. package/icons/chevronright/index.d.ts +9 -0
  409. package/icons/chevronup/index.d.ts +9 -0
  410. package/icons/exclamationtriangle/index.d.ts +12 -0
  411. package/icons/eye/index.d.ts +9 -0
  412. package/icons/eyeslash/index.d.ts +11 -0
  413. package/icons/filter/index.d.ts +11 -0
  414. package/icons/filterfill/index.d.ts +9 -0
  415. package/icons/filterslash/index.d.ts +11 -0
  416. package/icons/home/index.d.ts +11 -0
  417. package/icons/index.d.ts +53 -0
  418. package/icons/infocircle/index.d.ts +11 -0
  419. package/icons/minus/index.d.ts +9 -0
  420. package/icons/pencil/index.d.ts +11 -0
  421. package/icons/plus/index.d.ts +11 -0
  422. package/icons/refresh/index.d.ts +11 -0
  423. package/icons/search/index.d.ts +11 -0
  424. package/icons/searchminus/index.d.ts +11 -0
  425. package/icons/searchplus/index.d.ts +11 -0
  426. package/icons/sortalt/index.d.ts +11 -0
  427. package/icons/sortamountdown/index.d.ts +11 -0
  428. package/icons/sortamountupalt/index.d.ts +11 -0
  429. package/icons/spinner/index.d.ts +11 -0
  430. package/icons/star/index.d.ts +11 -0
  431. package/icons/starfill/index.d.ts +11 -0
  432. package/icons/thlarge/index.d.ts +11 -0
  433. package/icons/times/index.d.ts +9 -0
  434. package/icons/timescircle/index.d.ts +11 -0
  435. package/icons/trash/index.d.ts +11 -0
  436. package/icons/undo/index.d.ts +11 -0
  437. package/icons/upload/index.d.ts +11 -0
  438. package/icons/windowmaximize/index.d.ts +11 -0
  439. package/icons/windowminimize/index.d.ts +11 -0
  440. package/iftalabel/index.d.ts +50 -0
  441. package/image/index.d.ts +376 -0
  442. package/imagecompare/index.d.ts +93 -0
  443. package/index.d.ts +2 -0
  444. package/inplace/index.d.ts +183 -0
  445. package/inputgroup/index.d.ts +58 -0
  446. package/inputgroupaddon/index.d.ts +45 -0
  447. package/inputicon/index.d.ts +36 -0
  448. package/inputmask/index.d.ts +282 -0
  449. package/inputnumber/index.d.ts +466 -0
  450. package/inputotp/index.d.ts +209 -0
  451. package/inputtext/index.d.ts +89 -0
  452. package/keyfilter/index.d.ts +66 -0
  453. package/knob/index.d.ts +206 -0
  454. package/listbox/index.d.ts +802 -0
  455. package/megamenu/index.d.ts +408 -0
  456. package/menu/index.d.ts +341 -0
  457. package/menubar/index.d.ts +418 -0
  458. package/message/index.d.ts +195 -0
  459. package/metergroup/index.d.ts +291 -0
  460. package/multiselect/index.d.ts +1060 -0
  461. package/orderlist/index.d.ts +464 -0
  462. package/organizationchart/index.d.ts +285 -0
  463. package/overlay/index.d.ts +255 -0
  464. package/overlaybadge/index.d.ts +73 -0
  465. package/package.json +725 -0
  466. package/paginator/index.d.ts +393 -0
  467. package/panel/index.d.ts +266 -0
  468. package/panelmenu/index.d.ts +380 -0
  469. package/password/index.d.ts +436 -0
  470. package/picklist/index.d.ts +906 -0
  471. package/popover/index.d.ts +176 -0
  472. package/progressbar/index.d.ts +112 -0
  473. package/progressspinner/index.d.ts +85 -0
  474. package/radiobutton/index.d.ts +201 -0
  475. package/rating/index.d.ts +218 -0
  476. package/ripple/index.d.ts +62 -0
  477. package/scroller/index.d.ts +614 -0
  478. package/scrollpanel/index.d.ts +161 -0
  479. package/scrolltop/index.d.ts +158 -0
  480. package/select/index.d.ts +923 -0
  481. package/selectbutton/index.d.ts +221 -0
  482. package/skeleton/index.d.ts +96 -0
  483. package/slider/index.d.ts +255 -0
  484. package/speeddial/index.d.ts +454 -0
  485. package/splitbutton/index.d.ts +306 -0
  486. package/splitter/index.d.ts +239 -0
  487. package/stepper/index.d.ts +297 -0
  488. package/steps/index.d.ts +152 -0
  489. package/styleclass/index.d.ts +115 -0
  490. package/table/index.d.ts +2700 -0
  491. package/tabs/index.d.ts +321 -0
  492. package/tag/index.d.ts +114 -0
  493. package/terminal/index.d.ts +134 -0
  494. package/textarea/index.d.ts +108 -0
  495. package/tieredmenu/index.d.ts +430 -0
  496. package/timeline/index.d.ts +170 -0
  497. package/toast/index.d.ts +320 -0
  498. package/togglebutton/index.d.ts +243 -0
  499. package/toggleswitch/index.d.ts +188 -0
  500. package/toolbar/index.d.ts +118 -0
  501. package/tooltip/index.d.ts +247 -0
  502. package/tree/index.d.ts +847 -0
  503. package/treeselect/index.d.ts +655 -0
  504. package/treetable/index.d.ts +1727 -0
  505. package/ts-helpers/index.d.ts +6 -0
  506. package/usestyle/index.d.ts +15 -0
  507. package/utils/index.d.ts +43 -0
@@ -0,0 +1,2188 @@
1
+ import * as i1 from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { Injectable, inject, forwardRef, numberAttribute, booleanAttribute, Input, ViewEncapsulation, Component, EventEmitter, HostListener, ContentChildren, ViewChild, ContentChild, Output, Optional, ChangeDetectionStrategy, NgModule } from '@angular/core';
5
+ import * as i2 from '@angular/forms';
6
+ import { FormsModule } from '@angular/forms';
7
+ import { find, hasClass, findSingle, focus, removeAccents, resolveFieldData } from '@primeuix/utils';
8
+ import * as i3 from 'primeng/api';
9
+ import { SharedModule, TranslationKeys, PrimeTemplate } from 'primeng/api';
10
+ import * as i4 from 'primeng/autofocus';
11
+ import { AutoFocusModule } from 'primeng/autofocus';
12
+ import { BaseComponent } from 'primeng/basecomponent';
13
+ import { Checkbox } from 'primeng/checkbox';
14
+ import { IconField } from 'primeng/iconfield';
15
+ import { ChevronRightIcon, ChevronDownIcon, SpinnerIcon, SearchIcon } from 'primeng/icons';
16
+ import { InputIcon } from 'primeng/inputicon';
17
+ import { InputText } from 'primeng/inputtext';
18
+ import { Ripple } from 'primeng/ripple';
19
+ import { Scroller } from 'primeng/scroller';
20
+ import { style } from '@primeuix/styles/tree';
21
+ import { BaseStyle } from 'primeng/base';
22
+
23
+ const classes = {
24
+ root: ({ instance }) => [
25
+ 'p-tree p-component',
26
+ {
27
+ 'p-tree-selectable': instance.selectionMode != null,
28
+ 'p-tree-loading': instance.loading,
29
+ 'p-tree-flex-scrollable': instance.scrollHeight === 'flex',
30
+ 'p-tree-node-dragover': instance.dragHover
31
+ }
32
+ ],
33
+ mask: 'p-tree-mask p-overlay-mask',
34
+ loadingIcon: 'p-tree-loading-icon',
35
+ pcFilterInput: 'p-tree-filter-input',
36
+ wrapper: 'p-tree-root',
37
+ rootChildren: 'p-tree-root-children',
38
+ node: ({ instance }) => ({ 'p-tree-node': true, 'p-tree-node-leaf': instance.isLeaf() }),
39
+ nodeContent: ({ instance }) => ({
40
+ 'p-tree-node-content': true,
41
+ 'p-tree-node-selectable': instance.selectable,
42
+ 'p-tree-node-dragover': instance.draghoverNode,
43
+ 'p-tree-node-selected': instance.selectionMode === 'checkbox' && instance.tree.highlightOnSelect ? instance.checked : instance.selected
44
+ }),
45
+ nodeToggleButton: 'p-tree-node-toggle-button',
46
+ nodeToggleIcon: 'p-tree-node-toggle-icon',
47
+ nodeCheckbox: 'p-tree-node-checkbox',
48
+ nodeIcon: 'p-tree-node-icon',
49
+ nodeLabel: 'p-tree-node-label',
50
+ nodeChildren: 'p-tree-node-children',
51
+ emptyMessage: 'p-tree-empty-message',
52
+ dropPoint: ({ param }) => ['p-tree-node-droppoint', { 'p-tree-node-droppoint-active': param }]
53
+ };
54
+ class TreeStyle extends BaseStyle {
55
+ name = 'tree';
56
+ theme = style;
57
+ classes = classes;
58
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: TreeStyle, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
59
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: TreeStyle });
60
+ }
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: TreeStyle, decorators: [{
62
+ type: Injectable
63
+ }] });
64
+ /**
65
+ *
66
+ * Tree is used to display hierarchical data.
67
+ *
68
+ * [Live Demo](https://www.primeng.org/tree/)
69
+ *
70
+ * @module treestyle
71
+ *
72
+ */
73
+ var TreeClasses;
74
+ (function (TreeClasses) {
75
+ /**
76
+ * Class name of the root element
77
+ */
78
+ TreeClasses["root"] = "p-tree";
79
+ /**
80
+ * Class name of the mask element
81
+ */
82
+ TreeClasses["mask"] = "p-tree-mask";
83
+ /**
84
+ * Class name of the loading icon element
85
+ */
86
+ TreeClasses["loadingIcon"] = "p-tree-loading-icon";
87
+ /**
88
+ * Class name of the filter input element
89
+ */
90
+ TreeClasses["pcFilterInput"] = "p-tree-filter-input";
91
+ /**
92
+ * Class name of the wrapper element
93
+ */
94
+ TreeClasses["wrapper"] = "p-tree-root";
95
+ /**
96
+ * Class name of the root children element
97
+ */
98
+ TreeClasses["rootChildren"] = "p-tree-root-children";
99
+ /**
100
+ * Class name of the node element
101
+ */
102
+ TreeClasses["node"] = "p-tree-node";
103
+ /**
104
+ * Class name of the node content element
105
+ */
106
+ TreeClasses["nodeContent"] = "p-tree-node-content";
107
+ /**
108
+ * Class name of the node toggle button element
109
+ */
110
+ TreeClasses["nodeToggleButton"] = "p-tree-node-toggle-button";
111
+ /**
112
+ * Class name of the node toggle icon element
113
+ */
114
+ TreeClasses["nodeToggleIcon"] = "p-tree-node-toggle-icon";
115
+ /**
116
+ * Class name of the node checkbox element
117
+ */
118
+ TreeClasses["nodeCheckbox"] = "p-tree-node-checkbox";
119
+ /**
120
+ * Class name of the node icon element
121
+ */
122
+ TreeClasses["nodeIcon"] = "p-tree-node-icon";
123
+ /**
124
+ * Class name of the node label element
125
+ */
126
+ TreeClasses["nodeLabel"] = "p-tree-node-label";
127
+ /**
128
+ * Class name of the node children element
129
+ */
130
+ TreeClasses["nodeChildren"] = "p-tree-node-children";
131
+ /**
132
+ * Class name of the empty message element
133
+ */
134
+ TreeClasses["emptyMessage"] = "p-tree-empty-message";
135
+ /**
136
+ * Class name of the drop point element
137
+ */
138
+ TreeClasses["dropPoint"] = "p-tree-node-droppoint";
139
+ })(TreeClasses || (TreeClasses = {}));
140
+
141
+ class UITreeNode extends BaseComponent {
142
+ static ICON_CLASS = 'p-tree-node-icon ';
143
+ rowNode;
144
+ node;
145
+ parentNode;
146
+ root;
147
+ index;
148
+ firstChild;
149
+ lastChild;
150
+ level;
151
+ indentation;
152
+ itemSize;
153
+ loadingMode;
154
+ tree = inject(forwardRef(() => Tree));
155
+ timeout;
156
+ draghoverPrev;
157
+ draghoverNext;
158
+ draghoverNode;
159
+ _componentStyle = inject(TreeStyle);
160
+ get selected() {
161
+ return this.tree.selectionMode === 'single' || this.tree.selectionMode === 'multiple' ? this.isSelected() : undefined;
162
+ }
163
+ get checked() {
164
+ return this.tree.selectionMode === 'checkbox' ? this.isSelected() : undefined;
165
+ }
166
+ get nodeClass() {
167
+ return this.tree._componentStyle.classes.node({ instance: this });
168
+ }
169
+ get selectable() {
170
+ return this.node.selectable === false ? false : this.tree.selectionMode != null;
171
+ }
172
+ ngOnInit() {
173
+ super.ngOnInit();
174
+ this.node.parent = this.parentNode;
175
+ const nativeElement = this.tree.el.nativeElement;
176
+ const pDialogWrapper = nativeElement.closest('p-dialog');
177
+ if (this.parentNode && !pDialogWrapper) {
178
+ this.setAllNodesTabIndexes();
179
+ this.tree.syncNodeOption(this.node, this.tree.value, 'parent', this.tree.getNodeWithKey(this.parentNode.key, this.tree.value));
180
+ }
181
+ }
182
+ getIcon() {
183
+ let icon;
184
+ if (this.node.icon)
185
+ icon = this.node.icon;
186
+ else
187
+ icon = this.node.expanded && this.node.children && this.node.children?.length ? this.node.expandedIcon : this.node.collapsedIcon;
188
+ return UITreeNode.ICON_CLASS + ' ' + icon + ' p-tree-node-icon';
189
+ }
190
+ isLeaf() {
191
+ return this.tree.isNodeLeaf(this.node);
192
+ }
193
+ toggle(event) {
194
+ if (this.node.expanded)
195
+ this.collapse(event);
196
+ else
197
+ this.expand(event);
198
+ event.stopPropagation();
199
+ }
200
+ expand(event) {
201
+ this.node.expanded = true;
202
+ if (this.tree.virtualScroll) {
203
+ this.tree.updateSerializedValue();
204
+ this.focusVirtualNode();
205
+ }
206
+ this.tree.onNodeExpand.emit({ originalEvent: event, node: this.node });
207
+ }
208
+ collapse(event) {
209
+ this.node.expanded = false;
210
+ if (this.tree.virtualScroll) {
211
+ this.tree.updateSerializedValue();
212
+ this.focusVirtualNode();
213
+ }
214
+ this.tree.onNodeCollapse.emit({ originalEvent: event, node: this.node });
215
+ }
216
+ onNodeClick(event) {
217
+ this.tree.onNodeClick(event, this.node);
218
+ }
219
+ onNodeKeydown(event) {
220
+ if (event.key === 'Enter') {
221
+ this.tree.onNodeClick(event, this.node);
222
+ }
223
+ }
224
+ onNodeTouchEnd() {
225
+ this.tree.onNodeTouchEnd();
226
+ }
227
+ onNodeRightClick(event) {
228
+ this.tree.onNodeRightClick(event, this.node);
229
+ }
230
+ onNodeDblClick(event) {
231
+ this.tree.onNodeDblClick(event, this.node);
232
+ }
233
+ isSelected() {
234
+ return this.tree.isSelected(this.node);
235
+ }
236
+ isSameNode(event) {
237
+ return event.currentTarget && (event.currentTarget.isSameNode(event.target) || event.currentTarget.isSameNode(event.target.closest('[role="treeitem"]')));
238
+ }
239
+ onDropPoint(event, position) {
240
+ event.preventDefault();
241
+ let dragNode = this.tree.dragNode;
242
+ let dragNodeIndex = this.tree.dragNodeIndex;
243
+ let dragNodeScope = this.tree.dragNodeScope;
244
+ let isValidDropPointIndex = this.tree.dragNodeTree === this.tree ? position === 1 || dragNodeIndex !== this.index - 1 : true;
245
+ if (this.tree.allowDrop(dragNode, this.node, dragNodeScope) && isValidDropPointIndex) {
246
+ let dropParams = { ...this.createDropPointEventMetadata(position) };
247
+ if (this.tree.validateDrop) {
248
+ this.tree.onNodeDrop.emit({
249
+ originalEvent: event,
250
+ dragNode: dragNode,
251
+ dropNode: this.node,
252
+ index: this.index,
253
+ accept: () => {
254
+ this.processPointDrop(dropParams);
255
+ }
256
+ });
257
+ }
258
+ else {
259
+ this.processPointDrop(dropParams);
260
+ this.tree.onNodeDrop.emit({
261
+ originalEvent: event,
262
+ dragNode: dragNode,
263
+ dropNode: this.node,
264
+ index: this.index
265
+ });
266
+ }
267
+ }
268
+ this.draghoverPrev = false;
269
+ this.draghoverNext = false;
270
+ }
271
+ processPointDrop(event) {
272
+ let newNodeList = event.dropNode.parent ? event.dropNode.parent.children : this.tree.value;
273
+ event.dragNodeSubNodes.splice(event.dragNodeIndex, 1);
274
+ let dropIndex = this.index;
275
+ if (event.position < 0) {
276
+ dropIndex = event.dragNodeSubNodes === newNodeList ? (event.dragNodeIndex > event.index ? event.index : event.index - 1) : event.index;
277
+ newNodeList.splice(dropIndex, 0, event.dragNode);
278
+ }
279
+ else {
280
+ dropIndex = newNodeList.length;
281
+ newNodeList.push(event.dragNode);
282
+ }
283
+ this.tree.dragDropService.stopDrag({
284
+ node: event.dragNode,
285
+ subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,
286
+ index: event.dragNodeIndex
287
+ });
288
+ }
289
+ createDropPointEventMetadata(position) {
290
+ return {
291
+ dragNode: this.tree.dragNode,
292
+ dragNodeIndex: this.tree.dragNodeIndex,
293
+ dragNodeSubNodes: this.tree.dragNodeSubNodes,
294
+ dropNode: this.node,
295
+ index: this.index,
296
+ position: position
297
+ };
298
+ }
299
+ onDropPointDragOver(event) {
300
+ event.dataTransfer.dropEffect = 'move';
301
+ event.preventDefault();
302
+ }
303
+ onDropPointDragEnter(event, position) {
304
+ if (this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {
305
+ if (position < 0)
306
+ this.draghoverPrev = true;
307
+ else
308
+ this.draghoverNext = true;
309
+ }
310
+ }
311
+ onDropPointDragLeave(event) {
312
+ this.draghoverPrev = false;
313
+ this.draghoverNext = false;
314
+ }
315
+ onDragStart(event) {
316
+ if (this.tree.draggableNodes && this.node.draggable !== false) {
317
+ event.dataTransfer.setData('text', 'data');
318
+ this.tree.dragDropService.startDrag({
319
+ tree: this,
320
+ node: this.node,
321
+ subNodes: this.node?.parent ? this.node.parent.children : this.tree.value,
322
+ index: this.index,
323
+ scope: this.tree.draggableScope
324
+ });
325
+ }
326
+ else {
327
+ event.preventDefault();
328
+ }
329
+ }
330
+ onDragStop(event) {
331
+ this.tree.dragDropService.stopDrag({
332
+ node: this.node,
333
+ subNodes: this.node?.parent ? this.node.parent.children : this.tree.value,
334
+ index: this.index
335
+ });
336
+ }
337
+ onDropNodeDragOver(event) {
338
+ event.dataTransfer.dropEffect = 'move';
339
+ if (this.tree.droppableNodes) {
340
+ event.preventDefault();
341
+ event.stopPropagation();
342
+ }
343
+ }
344
+ onDropNode(event) {
345
+ if (this.tree.droppableNodes && this.node?.droppable !== false) {
346
+ let dragNode = this.tree.dragNode;
347
+ if (this.tree.allowDrop(dragNode, this.node, this.tree.dragNodeScope)) {
348
+ let dropParams = { ...this.createDropNodeEventMetadata() };
349
+ if (this.tree.validateDrop) {
350
+ this.tree.onNodeDrop.emit({
351
+ originalEvent: event,
352
+ dragNode: dragNode,
353
+ dropNode: this.node,
354
+ index: this.index,
355
+ accept: () => {
356
+ this.processNodeDrop(dropParams);
357
+ }
358
+ });
359
+ }
360
+ else {
361
+ this.processNodeDrop(dropParams);
362
+ this.tree.onNodeDrop.emit({
363
+ originalEvent: event,
364
+ dragNode: dragNode,
365
+ dropNode: this.node,
366
+ index: this.index
367
+ });
368
+ }
369
+ }
370
+ }
371
+ event.preventDefault();
372
+ event.stopPropagation();
373
+ this.draghoverNode = false;
374
+ }
375
+ createDropNodeEventMetadata() {
376
+ return {
377
+ dragNode: this.tree.dragNode,
378
+ dragNodeIndex: this.tree.dragNodeIndex,
379
+ dragNodeSubNodes: this.tree.dragNodeSubNodes,
380
+ dropNode: this.node
381
+ };
382
+ }
383
+ processNodeDrop(event) {
384
+ let dragNodeIndex = event.dragNodeIndex;
385
+ event.dragNodeSubNodes.splice(dragNodeIndex, 1);
386
+ if (event.dropNode.children)
387
+ event.dropNode.children.push(event.dragNode);
388
+ else
389
+ event.dropNode.children = [event.dragNode];
390
+ this.tree.dragDropService.stopDrag({
391
+ node: event.dragNode,
392
+ subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,
393
+ index: dragNodeIndex
394
+ });
395
+ }
396
+ onDropNodeDragEnter(event) {
397
+ if (this.tree.droppableNodes && this.node?.droppable !== false && this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {
398
+ this.draghoverNode = true;
399
+ }
400
+ }
401
+ onDropNodeDragLeave(event) {
402
+ if (this.tree.droppableNodes) {
403
+ let rect = event.currentTarget.getBoundingClientRect();
404
+ if (event.x > rect.left + rect.width || event.x < rect.left || event.y >= Math.floor(rect.top + rect.height) || event.y < rect.top) {
405
+ this.draghoverNode = false;
406
+ }
407
+ }
408
+ }
409
+ onKeyDown(event) {
410
+ if (!this.isSameNode(event) || (this.tree.contextMenu && this.tree.contextMenu.containerViewChild?.nativeElement.style.display === 'block')) {
411
+ return;
412
+ }
413
+ switch (event.code) {
414
+ //down arrow
415
+ case 'ArrowDown':
416
+ this.onArrowDown(event);
417
+ break;
418
+ //up arrow
419
+ case 'ArrowUp':
420
+ this.onArrowUp(event);
421
+ break;
422
+ //right arrow
423
+ case 'ArrowRight':
424
+ this.onArrowRight(event);
425
+ break;
426
+ //left arrow
427
+ case 'ArrowLeft':
428
+ this.onArrowLeft(event);
429
+ break;
430
+ //enter
431
+ case 'Enter':
432
+ case 'Space':
433
+ case 'NumpadEnter':
434
+ this.onEnter(event);
435
+ break;
436
+ //tab
437
+ case 'Tab':
438
+ this.setAllNodesTabIndexes();
439
+ break;
440
+ default:
441
+ //no op
442
+ break;
443
+ }
444
+ }
445
+ onArrowUp(event) {
446
+ const nodeElement = event.target.getAttribute('data-pc-section') === 'toggler' ? event.target.closest('[role="treeitem"]') : event.target.parentElement;
447
+ if (nodeElement.previousElementSibling) {
448
+ this.focusRowChange(nodeElement, nodeElement.previousElementSibling, this.findLastVisibleDescendant(nodeElement.previousElementSibling));
449
+ }
450
+ else {
451
+ let parentNodeElement = this.getParentNodeElement(nodeElement);
452
+ if (parentNodeElement) {
453
+ this.focusRowChange(nodeElement, parentNodeElement);
454
+ }
455
+ }
456
+ event.preventDefault();
457
+ }
458
+ onArrowDown(event) {
459
+ const nodeElement = event.target.getAttribute('data-pc-section') === 'toggler' ? event.target.closest('[role="treeitem"]') : event.target;
460
+ const listElement = nodeElement.children[1];
461
+ if (listElement && listElement.children.length > 0) {
462
+ this.focusRowChange(nodeElement, listElement.children[0]);
463
+ }
464
+ else {
465
+ if (nodeElement.parentElement.nextElementSibling) {
466
+ this.focusRowChange(nodeElement, nodeElement.parentElement.nextElementSibling);
467
+ }
468
+ else {
469
+ let nextSiblingAncestor = this.findNextSiblingOfAncestor(nodeElement.parentElement);
470
+ if (nextSiblingAncestor) {
471
+ this.focusRowChange(nodeElement, nextSiblingAncestor);
472
+ }
473
+ }
474
+ }
475
+ event.preventDefault();
476
+ }
477
+ onArrowRight(event) {
478
+ if (!this.node?.expanded && !this.tree.isNodeLeaf(this.node)) {
479
+ this.expand(event);
480
+ event.currentTarget.tabIndex = -1;
481
+ setTimeout(() => {
482
+ this.onArrowDown(event);
483
+ }, 1);
484
+ }
485
+ event.preventDefault();
486
+ }
487
+ onArrowLeft(event) {
488
+ const nodeElement = event.target.getAttribute('data-pc-section') === 'toggler' ? event.target.closest('[role="treeitem"]') : event.target;
489
+ if (this.level === 0 && !this.node?.expanded) {
490
+ return false;
491
+ }
492
+ if (this.node?.expanded) {
493
+ this.collapse(event);
494
+ return;
495
+ }
496
+ let parentNodeElement = this.getParentNodeElement(nodeElement.parentElement);
497
+ if (parentNodeElement) {
498
+ this.focusRowChange(event.currentTarget, parentNodeElement);
499
+ }
500
+ event.preventDefault();
501
+ }
502
+ onEnter(event) {
503
+ this.tree.onNodeClick(event, this.node);
504
+ this.setTabIndexForSelectionMode(event, this.tree.nodeTouched);
505
+ event.preventDefault();
506
+ }
507
+ setAllNodesTabIndexes() {
508
+ const nodes = find(this.tree.el.nativeElement, '.p-tree-node');
509
+ const hasSelectedNode = [...nodes].some((node) => node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true');
510
+ [...nodes].forEach((node) => {
511
+ node.tabIndex = -1;
512
+ });
513
+ if (hasSelectedNode) {
514
+ const selectedNodes = [...nodes].filter((node) => node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true');
515
+ selectedNodes[0].tabIndex = 0;
516
+ return;
517
+ }
518
+ if (nodes.length) {
519
+ [...nodes][0].tabIndex = 0;
520
+ }
521
+ }
522
+ setTabIndexForSelectionMode(event, nodeTouched) {
523
+ if (this.tree.selectionMode !== null) {
524
+ const elements = [...find(this.tree.el.nativeElement, '[role="treeitem"]')];
525
+ event.currentTarget.tabIndex = nodeTouched === false ? -1 : 0;
526
+ if (elements.every((element) => element.tabIndex === -1)) {
527
+ elements[0].tabIndex = 0;
528
+ }
529
+ }
530
+ }
531
+ findNextSiblingOfAncestor(nodeElement) {
532
+ let parentNodeElement = this.getParentNodeElement(nodeElement);
533
+ if (parentNodeElement) {
534
+ if (parentNodeElement.nextElementSibling)
535
+ return parentNodeElement.nextElementSibling;
536
+ else
537
+ return this.findNextSiblingOfAncestor(parentNodeElement);
538
+ }
539
+ else {
540
+ return null;
541
+ }
542
+ }
543
+ findLastVisibleDescendant(nodeElement) {
544
+ const listElement = Array.from(nodeElement.children).find((el) => hasClass(el, 'p-tree-node'));
545
+ const childrenListElement = listElement?.children[1];
546
+ if (childrenListElement && childrenListElement.children.length > 0) {
547
+ const lastChildElement = childrenListElement.children[childrenListElement.children.length - 1];
548
+ return this.findLastVisibleDescendant(lastChildElement);
549
+ }
550
+ else {
551
+ return nodeElement;
552
+ }
553
+ }
554
+ getParentNodeElement(nodeElement) {
555
+ const parentNodeElement = nodeElement.parentElement?.parentElement?.parentElement;
556
+ return parentNodeElement?.tagName === 'P-TREENODE' ? parentNodeElement : null;
557
+ }
558
+ focusNode(element) {
559
+ if (this.tree.droppableNodes)
560
+ element.children[1].focus();
561
+ else
562
+ element.children[0].focus();
563
+ }
564
+ focusRowChange(firstFocusableRow, currentFocusedRow, lastVisibleDescendant) {
565
+ firstFocusableRow.tabIndex = '-1';
566
+ currentFocusedRow.children[0].tabIndex = '0';
567
+ this.focusNode(lastVisibleDescendant || currentFocusedRow);
568
+ }
569
+ focusVirtualNode() {
570
+ this.timeout = setTimeout(() => {
571
+ let node = findSingle(this.tree?.contentViewChild.nativeElement, `[data-id="${this.node?.key ?? this.node?.data}"]`);
572
+ focus(node);
573
+ }, 1);
574
+ }
575
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: UITreeNode, deps: null, target: i0.ɵɵFactoryTarget.Component });
576
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.4", type: UITreeNode, isStandalone: true, selector: "p-treeNode", inputs: { rowNode: "rowNode", node: "node", parentNode: "parentNode", root: ["root", "root", booleanAttribute], index: ["index", "index", numberAttribute], firstChild: ["firstChild", "firstChild", booleanAttribute], lastChild: ["lastChild", "lastChild", booleanAttribute], level: ["level", "level", numberAttribute], indentation: ["indentation", "indentation", numberAttribute], itemSize: ["itemSize", "itemSize", numberAttribute], loadingMode: "loadingMode" }, providers: [TreeStyle], usesInheritance: true, ngImport: i0, template: `
577
+ @if (node) {
578
+ <li
579
+ *ngIf="tree.droppableNodes"
580
+ [class]="cx('dropPoint', { param: draghoverPrev })"
581
+ [attr.aria-hidden]="true"
582
+ (drop)="onDropPoint($event, -1)"
583
+ (dragover)="onDropPointDragOver($event)"
584
+ (dragenter)="onDropPointDragEnter($event, -1)"
585
+ (dragleave)="onDropPointDragLeave($event)"
586
+ ></li>
587
+ <li
588
+ [class]="cn(cx('node'), node.styleClass)"
589
+ [ngStyle]="{ height: itemSize + 'px' }"
590
+ [style]="node.style"
591
+ [attr.aria-label]="node.label"
592
+ [attr.aria-checked]="checked"
593
+ [attr.aria-setsize]="node.children ? node.children.length : 0"
594
+ [attr.aria-selected]="selected"
595
+ [attr.aria-expanded]="node.expanded"
596
+ [attr.aria-posinset]="index + 1"
597
+ [attr.aria-level]="level + 1"
598
+ [attr.tabindex]="index === 0 ? 0 : -1"
599
+ [attr.data-id]="node.key"
600
+ role="treeitem"
601
+ (keydown)="onKeyDown($event)"
602
+ >
603
+ <div
604
+ [class]="cx('nodeContent')"
605
+ [style.paddingLeft]="level * indentation + 'rem'"
606
+ (click)="onNodeClick($event)"
607
+ (contextmenu)="onNodeRightClick($event)"
608
+ (dblclick)="onNodeDblClick($event)"
609
+ (touchend)="onNodeTouchEnd()"
610
+ (drop)="onDropNode($event)"
611
+ (dragover)="onDropNodeDragOver($event)"
612
+ (dragenter)="onDropNodeDragEnter($event)"
613
+ (dragleave)="onDropNodeDragLeave($event)"
614
+ [draggable]="tree.draggableNodes"
615
+ (dragstart)="onDragStart($event)"
616
+ (dragend)="onDragStop($event)"
617
+ >
618
+ <button type="button" [attr.data-pc-section]="'toggler'" [class]="cx('nodeToggleButton')" (click)="toggle($event)" pRipple tabindex="-1">
619
+ <ng-container *ngIf="!tree.togglerIconTemplate && !tree._togglerIconTemplate">
620
+ <ng-container *ngIf="!node.loading">
621
+ <svg data-p-icon="chevron-right" *ngIf="!node.expanded" [class]="cx('nodeToggleIcon')" />
622
+ <svg data-p-icon="chevron-down" *ngIf="node.expanded" [class]="cx('nodeToggleIcon')" />
623
+ </ng-container>
624
+ <ng-container *ngIf="loadingMode === 'icon' && node.loading">
625
+ <svg data-p-icon="spinner" [class]="cx('nodeToggleIcon')" spin />
626
+ </ng-container>
627
+ </ng-container>
628
+ <span *ngIf="tree.togglerIconTemplate || tree._togglerIconTemplate" [class]="cx('nodeToggleIcon')">
629
+ <ng-template *ngTemplateOutlet="tree.togglerIconTemplate || tree._togglerIconTemplate; context: { $implicit: node.expanded, loading: node.loading }"></ng-template>
630
+ </span>
631
+ </button>
632
+
633
+ <p-checkbox
634
+ [ngModel]="isSelected()"
635
+ [styleClass]="cx('nodeCheckbox')"
636
+ [binary]="true"
637
+ [indeterminate]="node.partialSelected"
638
+ *ngIf="tree.selectionMode == 'checkbox'"
639
+ [disabled]="node.selectable === false"
640
+ [variant]="tree?.config.inputStyle() === 'filled' || tree?.config.inputVariant() === 'filled' ? 'filled' : 'outlined'"
641
+ [attr.data-p-partialchecked]="node.partialSelected"
642
+ [tabindex]="-1"
643
+ (click)="$event.preventDefault()"
644
+ >
645
+ <ng-container *ngIf="tree.checkboxIconTemplate || tree._checkboxIconTemplate">
646
+ <ng-template #icon>
647
+ <ng-template
648
+ *ngTemplateOutlet="
649
+ tree.checkboxIconTemplate || tree._checkboxIconTemplate;
650
+ context: {
651
+ $implicit: isSelected(),
652
+ partialSelected: node.partialSelected,
653
+ class: cx('nodeCheckbox')
654
+ }
655
+ "
656
+ ></ng-template>
657
+ </ng-template>
658
+ </ng-container>
659
+ </p-checkbox>
660
+
661
+ <span [class]="getIcon()" *ngIf="node.icon || node.expandedIcon || node.collapsedIcon"></span>
662
+ <span [class]="cx('nodeLabel')">
663
+ <span *ngIf="!tree.getTemplateForNode(node)">{{ node.label }}</span>
664
+ <span *ngIf="tree.getTemplateForNode(node)">
665
+ <ng-container *ngTemplateOutlet="tree.getTemplateForNode(node); context: { $implicit: node }"></ng-container>
666
+ </span>
667
+ </span>
668
+ </div>
669
+ <ul [class]="cx('nodeChildren')" *ngIf="!tree.virtualScroll && node.children && node.expanded" role="group">
670
+ <p-treeNode
671
+ *ngFor="let childNode of node.children; let firstChild = first; let lastChild = last; let index = index; trackBy: tree.trackBy.bind(this)"
672
+ [node]="childNode"
673
+ [parentNode]="node"
674
+ [firstChild]="firstChild"
675
+ [lastChild]="lastChild"
676
+ [index]="index"
677
+ [itemSize]="itemSize"
678
+ [level]="level + 1"
679
+ [loadingMode]="loadingMode"
680
+ ></p-treeNode>
681
+ </ul>
682
+ </li>
683
+
684
+ <li
685
+ *ngIf="tree.droppableNodes && lastChild"
686
+ [class]="cx('dropPoint', { param: draghoverNext })"
687
+ (drop)="onDropPoint($event, 1)"
688
+ [attr.aria-hidden]="true"
689
+ (dragover)="onDropPointDragOver($event)"
690
+ (dragenter)="onDropPointDragEnter($event, 1)"
691
+ (dragleave)="onDropPointDragLeave($event)"
692
+ ></li>
693
+ }
694
+ `, isInline: true, dependencies: [{ kind: "component", type: UITreeNode, selector: "p-treeNode", inputs: ["rowNode", "node", "parentNode", "root", "index", "firstChild", "lastChild", "level", "indentation", "itemSize", "loadingMode"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: Ripple, selector: "[pRipple]" }, { kind: "component", type: Checkbox, selector: "p-checkbox, p-checkBox, p-check-box", inputs: ["value", "binary", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "inputStyle", "styleClass", "inputClass", "indeterminate", "formControl", "checkboxIcon", "readonly", "autofocus", "trueValue", "falseValue", "variant", "size"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ChevronRightIcon, selector: "[data-p-icon=\"chevron-right\"]" }, { kind: "component", type: ChevronDownIcon, selector: "[data-p-icon=\"chevron-down\"]" }, { kind: "component", type: SpinnerIcon, selector: "[data-p-icon=\"spinner\"]" }, { kind: "ngmodule", type: SharedModule }], encapsulation: i0.ViewEncapsulation.None });
695
+ }
696
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: UITreeNode, decorators: [{
697
+ type: Component,
698
+ args: [{
699
+ selector: 'p-treeNode',
700
+ standalone: true,
701
+ imports: [CommonModule, Ripple, Checkbox, FormsModule, ChevronRightIcon, ChevronDownIcon, SpinnerIcon, SharedModule],
702
+ template: `
703
+ @if (node) {
704
+ <li
705
+ *ngIf="tree.droppableNodes"
706
+ [class]="cx('dropPoint', { param: draghoverPrev })"
707
+ [attr.aria-hidden]="true"
708
+ (drop)="onDropPoint($event, -1)"
709
+ (dragover)="onDropPointDragOver($event)"
710
+ (dragenter)="onDropPointDragEnter($event, -1)"
711
+ (dragleave)="onDropPointDragLeave($event)"
712
+ ></li>
713
+ <li
714
+ [class]="cn(cx('node'), node.styleClass)"
715
+ [ngStyle]="{ height: itemSize + 'px' }"
716
+ [style]="node.style"
717
+ [attr.aria-label]="node.label"
718
+ [attr.aria-checked]="checked"
719
+ [attr.aria-setsize]="node.children ? node.children.length : 0"
720
+ [attr.aria-selected]="selected"
721
+ [attr.aria-expanded]="node.expanded"
722
+ [attr.aria-posinset]="index + 1"
723
+ [attr.aria-level]="level + 1"
724
+ [attr.tabindex]="index === 0 ? 0 : -1"
725
+ [attr.data-id]="node.key"
726
+ role="treeitem"
727
+ (keydown)="onKeyDown($event)"
728
+ >
729
+ <div
730
+ [class]="cx('nodeContent')"
731
+ [style.paddingLeft]="level * indentation + 'rem'"
732
+ (click)="onNodeClick($event)"
733
+ (contextmenu)="onNodeRightClick($event)"
734
+ (dblclick)="onNodeDblClick($event)"
735
+ (touchend)="onNodeTouchEnd()"
736
+ (drop)="onDropNode($event)"
737
+ (dragover)="onDropNodeDragOver($event)"
738
+ (dragenter)="onDropNodeDragEnter($event)"
739
+ (dragleave)="onDropNodeDragLeave($event)"
740
+ [draggable]="tree.draggableNodes"
741
+ (dragstart)="onDragStart($event)"
742
+ (dragend)="onDragStop($event)"
743
+ >
744
+ <button type="button" [attr.data-pc-section]="'toggler'" [class]="cx('nodeToggleButton')" (click)="toggle($event)" pRipple tabindex="-1">
745
+ <ng-container *ngIf="!tree.togglerIconTemplate && !tree._togglerIconTemplate">
746
+ <ng-container *ngIf="!node.loading">
747
+ <svg data-p-icon="chevron-right" *ngIf="!node.expanded" [class]="cx('nodeToggleIcon')" />
748
+ <svg data-p-icon="chevron-down" *ngIf="node.expanded" [class]="cx('nodeToggleIcon')" />
749
+ </ng-container>
750
+ <ng-container *ngIf="loadingMode === 'icon' && node.loading">
751
+ <svg data-p-icon="spinner" [class]="cx('nodeToggleIcon')" spin />
752
+ </ng-container>
753
+ </ng-container>
754
+ <span *ngIf="tree.togglerIconTemplate || tree._togglerIconTemplate" [class]="cx('nodeToggleIcon')">
755
+ <ng-template *ngTemplateOutlet="tree.togglerIconTemplate || tree._togglerIconTemplate; context: { $implicit: node.expanded, loading: node.loading }"></ng-template>
756
+ </span>
757
+ </button>
758
+
759
+ <p-checkbox
760
+ [ngModel]="isSelected()"
761
+ [styleClass]="cx('nodeCheckbox')"
762
+ [binary]="true"
763
+ [indeterminate]="node.partialSelected"
764
+ *ngIf="tree.selectionMode == 'checkbox'"
765
+ [disabled]="node.selectable === false"
766
+ [variant]="tree?.config.inputStyle() === 'filled' || tree?.config.inputVariant() === 'filled' ? 'filled' : 'outlined'"
767
+ [attr.data-p-partialchecked]="node.partialSelected"
768
+ [tabindex]="-1"
769
+ (click)="$event.preventDefault()"
770
+ >
771
+ <ng-container *ngIf="tree.checkboxIconTemplate || tree._checkboxIconTemplate">
772
+ <ng-template #icon>
773
+ <ng-template
774
+ *ngTemplateOutlet="
775
+ tree.checkboxIconTemplate || tree._checkboxIconTemplate;
776
+ context: {
777
+ $implicit: isSelected(),
778
+ partialSelected: node.partialSelected,
779
+ class: cx('nodeCheckbox')
780
+ }
781
+ "
782
+ ></ng-template>
783
+ </ng-template>
784
+ </ng-container>
785
+ </p-checkbox>
786
+
787
+ <span [class]="getIcon()" *ngIf="node.icon || node.expandedIcon || node.collapsedIcon"></span>
788
+ <span [class]="cx('nodeLabel')">
789
+ <span *ngIf="!tree.getTemplateForNode(node)">{{ node.label }}</span>
790
+ <span *ngIf="tree.getTemplateForNode(node)">
791
+ <ng-container *ngTemplateOutlet="tree.getTemplateForNode(node); context: { $implicit: node }"></ng-container>
792
+ </span>
793
+ </span>
794
+ </div>
795
+ <ul [class]="cx('nodeChildren')" *ngIf="!tree.virtualScroll && node.children && node.expanded" role="group">
796
+ <p-treeNode
797
+ *ngFor="let childNode of node.children; let firstChild = first; let lastChild = last; let index = index; trackBy: tree.trackBy.bind(this)"
798
+ [node]="childNode"
799
+ [parentNode]="node"
800
+ [firstChild]="firstChild"
801
+ [lastChild]="lastChild"
802
+ [index]="index"
803
+ [itemSize]="itemSize"
804
+ [level]="level + 1"
805
+ [loadingMode]="loadingMode"
806
+ ></p-treeNode>
807
+ </ul>
808
+ </li>
809
+
810
+ <li
811
+ *ngIf="tree.droppableNodes && lastChild"
812
+ [class]="cx('dropPoint', { param: draghoverNext })"
813
+ (drop)="onDropPoint($event, 1)"
814
+ [attr.aria-hidden]="true"
815
+ (dragover)="onDropPointDragOver($event)"
816
+ (dragenter)="onDropPointDragEnter($event, 1)"
817
+ (dragleave)="onDropPointDragLeave($event)"
818
+ ></li>
819
+ }
820
+ `,
821
+ encapsulation: ViewEncapsulation.None,
822
+ providers: [TreeStyle]
823
+ }]
824
+ }], propDecorators: { rowNode: [{
825
+ type: Input
826
+ }], node: [{
827
+ type: Input
828
+ }], parentNode: [{
829
+ type: Input
830
+ }], root: [{
831
+ type: Input,
832
+ args: [{ transform: booleanAttribute }]
833
+ }], index: [{
834
+ type: Input,
835
+ args: [{ transform: numberAttribute }]
836
+ }], firstChild: [{
837
+ type: Input,
838
+ args: [{ transform: booleanAttribute }]
839
+ }], lastChild: [{
840
+ type: Input,
841
+ args: [{ transform: booleanAttribute }]
842
+ }], level: [{
843
+ type: Input,
844
+ args: [{ transform: numberAttribute }]
845
+ }], indentation: [{
846
+ type: Input,
847
+ args: [{ transform: numberAttribute }]
848
+ }], itemSize: [{
849
+ type: Input,
850
+ args: [{ transform: numberAttribute }]
851
+ }], loadingMode: [{
852
+ type: Input
853
+ }] } });
854
+ /**
855
+ * Tree is used to display hierarchical data.
856
+ * @group Components
857
+ */
858
+ class Tree extends BaseComponent {
859
+ dragDropService;
860
+ /**
861
+ * An array of treenodes.
862
+ * @group Props
863
+ */
864
+ value;
865
+ /**
866
+ * Defines the selection mode.
867
+ * @group Props
868
+ */
869
+ selectionMode;
870
+ /**
871
+ * Loading mode display.
872
+ * @group Props
873
+ */
874
+ loadingMode = 'mask';
875
+ /**
876
+ * A single treenode instance or an array to refer to the selections.
877
+ * @group Props
878
+ */
879
+ selection;
880
+ /**
881
+ * Style class of the component.
882
+ * @deprecated since v20.0.0, use `class` instead.
883
+ * @group Props
884
+ */
885
+ styleClass;
886
+ /**
887
+ * Context menu instance.
888
+ * @group Props
889
+ */
890
+ contextMenu;
891
+ /**
892
+ * Scope of the draggable nodes to match a droppableScope.
893
+ * @group Props
894
+ */
895
+ draggableScope;
896
+ /**
897
+ * Scope of the droppable nodes to match a draggableScope.
898
+ * @group Props
899
+ */
900
+ droppableScope;
901
+ /**
902
+ * Whether the nodes are draggable.
903
+ * @group Props
904
+ */
905
+ draggableNodes;
906
+ /**
907
+ * Whether the nodes are droppable.
908
+ * @group Props
909
+ */
910
+ droppableNodes;
911
+ /**
912
+ * Defines how multiple items can be selected, when true metaKey needs to be pressed to select or unselect an item and when set to false selection of each item can be toggled individually. On touch enabled devices, metaKeySelection is turned off automatically.
913
+ * @group Props
914
+ */
915
+ metaKeySelection = false;
916
+ /**
917
+ * Whether checkbox selections propagate to ancestor nodes.
918
+ * @group Props
919
+ */
920
+ propagateSelectionUp = true;
921
+ /**
922
+ * Whether checkbox selections propagate to descendant nodes.
923
+ * @group Props
924
+ */
925
+ propagateSelectionDown = true;
926
+ /**
927
+ * Displays a loader to indicate data load is in progress.
928
+ * @group Props
929
+ */
930
+ loading;
931
+ /**
932
+ * The icon to show while indicating data load is in progress.
933
+ * @group Props
934
+ */
935
+ loadingIcon;
936
+ /**
937
+ * Text to display when there is no data.
938
+ * @group Props
939
+ */
940
+ emptyMessage = '';
941
+ /**
942
+ * Used to define a string that labels the tree.
943
+ * @group Props
944
+ */
945
+ ariaLabel;
946
+ /**
947
+ * Defines a string that labels the toggler icon for accessibility.
948
+ * @group Props
949
+ */
950
+ togglerAriaLabel;
951
+ /**
952
+ * Establishes relationships between the component and label(s) where its value should be one or more element IDs.
953
+ * @group Props
954
+ */
955
+ ariaLabelledBy;
956
+ /**
957
+ * When enabled, drop can be accepted or rejected based on condition defined at onNodeDrop.
958
+ * @group Props
959
+ */
960
+ validateDrop;
961
+ /**
962
+ * When specified, displays an input field to filter the items.
963
+ * @group Props
964
+ */
965
+ filter;
966
+ /**
967
+ * Determines whether the filter input should be automatically focused when the component is rendered.
968
+ * @group Props
969
+ */
970
+ filterInputAutoFocus = false;
971
+ /**
972
+ * When filtering is enabled, filterBy decides which field or fields (comma separated) to search against.
973
+ * @group Props
974
+ */
975
+ filterBy = 'label';
976
+ /**
977
+ * Mode for filtering valid values are "lenient" and "strict". Default is lenient.
978
+ * @group Props
979
+ */
980
+ filterMode = 'lenient';
981
+ /**
982
+ * Mode for filtering valid values are "lenient" and "strict". Default is lenient.
983
+ * @group Props
984
+ */
985
+ filterOptions;
986
+ /**
987
+ * Placeholder text to show when filter input is empty.
988
+ * @group Props
989
+ */
990
+ filterPlaceholder;
991
+ /**
992
+ * Values after the tree nodes are filtered.
993
+ * @group Props
994
+ */
995
+ filteredNodes;
996
+ /**
997
+ * Locale to use in filtering. The default locale is the host environment's current locale.
998
+ * @group Props
999
+ */
1000
+ filterLocale;
1001
+ /**
1002
+ * Height of the scrollable viewport.
1003
+ * @group Props
1004
+ */
1005
+ scrollHeight;
1006
+ /**
1007
+ * Defines if data is loaded and interacted with in lazy manner.
1008
+ * @group Props
1009
+ */
1010
+ lazy = false;
1011
+ /**
1012
+ * Whether the data should be loaded on demand during scroll.
1013
+ * @group Props
1014
+ */
1015
+ virtualScroll;
1016
+ /**
1017
+ * Height of an item in the list for VirtualScrolling.
1018
+ * @group Props
1019
+ */
1020
+ virtualScrollItemSize;
1021
+ /**
1022
+ * Whether to use the scroller feature. The properties of scroller component can be used like an object in it.
1023
+ * @group Props
1024
+ */
1025
+ virtualScrollOptions;
1026
+ /**
1027
+ * Indentation factor for spacing of the nested node when virtual scrolling is enabled.
1028
+ * @group Props
1029
+ */
1030
+ indentation = 1.5;
1031
+ /**
1032
+ * Custom templates of the component.
1033
+ * @group Props
1034
+ */
1035
+ _templateMap;
1036
+ /**
1037
+ * Function to optimize the node list rendering, default algorithm checks for object identity.
1038
+ * @group Props
1039
+ */
1040
+ trackBy = (index, item) => item;
1041
+ /**
1042
+ * Highlights the node on select.
1043
+ * @group Props
1044
+ */
1045
+ highlightOnSelect = false;
1046
+ /**
1047
+ * Callback to invoke on selection change.
1048
+ * @param {(TreeNode<any> | TreeNode<any>[] | null)} event - Custom selection change event.
1049
+ * @group Emits
1050
+ */
1051
+ selectionChange = new EventEmitter();
1052
+ /**
1053
+ * Callback to invoke when a node is selected.
1054
+ * @param {TreeNodeSelectEvent} event - Node select event.
1055
+ * @group Emits
1056
+ */
1057
+ onNodeSelect = new EventEmitter();
1058
+ /**
1059
+ * Callback to invoke when a node is unselected.
1060
+ * @param {TreeNodeUnSelectEvent} event - Node unselect event.
1061
+ * @group Emits
1062
+ */
1063
+ onNodeUnselect = new EventEmitter();
1064
+ /**
1065
+ * Callback to invoke when a node is expanded.
1066
+ * @param {TreeNodeExpandEvent} event - Node expand event.
1067
+ * @group Emits
1068
+ */
1069
+ onNodeExpand = new EventEmitter();
1070
+ /**
1071
+ * Callback to invoke when a node is collapsed.
1072
+ * @param {TreeNodeCollapseEvent} event - Node collapse event.
1073
+ * @group Emits
1074
+ */
1075
+ onNodeCollapse = new EventEmitter();
1076
+ /**
1077
+ * Callback to invoke when a node is selected with right click.
1078
+ * @param {onNodeContextMenuSelect} event - Node context menu select event.
1079
+ * @group Emits
1080
+ */
1081
+ onNodeContextMenuSelect = new EventEmitter();
1082
+ /**
1083
+ * Callback to invoke when a node is double clicked.
1084
+ * @param {TreeNodeDoubleClickEvent} event - Node double click event.
1085
+ * @group Emits
1086
+ */
1087
+ onNodeDoubleClick = new EventEmitter();
1088
+ /**
1089
+ * Callback to invoke when a node is dropped.
1090
+ * @param {TreeNodeDropEvent} event - Node drop event.
1091
+ * @group Emits
1092
+ */
1093
+ onNodeDrop = new EventEmitter();
1094
+ /**
1095
+ * Callback to invoke in lazy mode to load new data.
1096
+ * @param {TreeLazyLoadEvent} event - Custom lazy load event.
1097
+ * @group Emits
1098
+ */
1099
+ onLazyLoad = new EventEmitter();
1100
+ /**
1101
+ * Callback to invoke in virtual scroll mode when scroll position changes.
1102
+ * @param {TreeScrollEvent} event - Custom scroll event.
1103
+ * @group Emits
1104
+ */
1105
+ onScroll = new EventEmitter();
1106
+ /**
1107
+ * Callback to invoke in virtual scroll mode when scroll position and item's range in view changes.
1108
+ * @param {TreeScrollIndexChangeEvent} event - Scroll index change event.
1109
+ * @group Emits
1110
+ */
1111
+ onScrollIndexChange = new EventEmitter();
1112
+ /**
1113
+ * Callback to invoke when data is filtered.
1114
+ * @param {TreeFilterEvent} event - Custom filter event.
1115
+ * @group Emits
1116
+ */
1117
+ onFilter = new EventEmitter();
1118
+ /**
1119
+ * Filter template.
1120
+ * @group Templates
1121
+ */
1122
+ filterTemplate;
1123
+ /**
1124
+ * Node template.
1125
+ * @group Templates
1126
+ */
1127
+ nodeTemplate;
1128
+ /**
1129
+ * Header template.
1130
+ * @group Templates
1131
+ */
1132
+ headerTemplate;
1133
+ /**
1134
+ * Footer template.
1135
+ * @group Templates
1136
+ */
1137
+ footerTemplate;
1138
+ /**
1139
+ * Loader template.
1140
+ * @group Templates
1141
+ */
1142
+ loaderTemplate;
1143
+ /**
1144
+ * Empty message template.
1145
+ * @group Templates
1146
+ */
1147
+ emptyMessageTemplate;
1148
+ /**
1149
+ * Toggler icon template.
1150
+ * @group Templates
1151
+ */
1152
+ togglerIconTemplate;
1153
+ /**
1154
+ * Checkbox icon template.
1155
+ * @group Templates
1156
+ */
1157
+ checkboxIconTemplate;
1158
+ /**
1159
+ * Loading icon template.
1160
+ * @group Templates
1161
+ */
1162
+ loadingIconTemplate;
1163
+ /**
1164
+ * Filter icon template.
1165
+ * @group Templates
1166
+ */
1167
+ filterIconTemplate;
1168
+ filterViewChild;
1169
+ scroller;
1170
+ wrapperViewChild;
1171
+ contentViewChild;
1172
+ templates;
1173
+ _headerTemplate;
1174
+ _emptyMessageTemplate;
1175
+ _footerTemplate;
1176
+ _loaderTemplate;
1177
+ _togglerIconTemplate;
1178
+ _checkboxIconTemplate;
1179
+ _loadingIconTemplate;
1180
+ _filterIconTemplate;
1181
+ _filterTemplate;
1182
+ ngAfterContentInit() {
1183
+ if (this.templates.length) {
1184
+ this._templateMap = {};
1185
+ }
1186
+ this.templates.forEach((item) => {
1187
+ switch (item.getType()) {
1188
+ case 'header':
1189
+ this._headerTemplate = item.template;
1190
+ break;
1191
+ case 'empty':
1192
+ this._emptyMessageTemplate = item.template;
1193
+ break;
1194
+ case 'footer':
1195
+ this._footerTemplate = item.template;
1196
+ break;
1197
+ case 'loader':
1198
+ this._loaderTemplate = item.template;
1199
+ break;
1200
+ case 'togglericon':
1201
+ this._togglerIconTemplate = item.template;
1202
+ break;
1203
+ case 'checkboxicon':
1204
+ this._checkboxIconTemplate = item.template;
1205
+ break;
1206
+ case 'loadingicon':
1207
+ this._loadingIconTemplate = item.template;
1208
+ break;
1209
+ case 'filtericon':
1210
+ this._filterIconTemplate = item.template;
1211
+ break;
1212
+ case 'filter':
1213
+ this._filterTemplate = item.template;
1214
+ break;
1215
+ default:
1216
+ this._templateMap[item.name] = item.template;
1217
+ break;
1218
+ }
1219
+ });
1220
+ }
1221
+ serializedValue;
1222
+ nodeTouched;
1223
+ dragNodeTree;
1224
+ dragNode;
1225
+ dragNodeSubNodes;
1226
+ dragNodeIndex;
1227
+ dragNodeScope;
1228
+ dragHover;
1229
+ dragStartSubscription;
1230
+ dragStopSubscription;
1231
+ _componentStyle = inject(TreeStyle);
1232
+ handleDropEvent(event) {
1233
+ this.onDrop(event);
1234
+ }
1235
+ handleDragOverEvent(event) {
1236
+ this.onDragOver(event);
1237
+ }
1238
+ handleDragEnterEvent() {
1239
+ this.onDragEnter();
1240
+ }
1241
+ handleDragLeaveEvent(event) {
1242
+ this.onDragLeave(event);
1243
+ }
1244
+ constructor(dragDropService) {
1245
+ super();
1246
+ this.dragDropService = dragDropService;
1247
+ }
1248
+ ngOnInit() {
1249
+ super.ngOnInit();
1250
+ if (this.filterBy) {
1251
+ this.filterOptions = {
1252
+ filter: (value) => this._filter(value),
1253
+ reset: () => this.resetFilter()
1254
+ };
1255
+ }
1256
+ if (this.droppableNodes) {
1257
+ this.dragStartSubscription = this.dragDropService.dragStart$.subscribe((event) => {
1258
+ this.dragNodeTree = event.tree;
1259
+ this.dragNode = event.node;
1260
+ this.dragNodeSubNodes = event.subNodes;
1261
+ this.dragNodeIndex = event.index;
1262
+ this.dragNodeScope = event.scope;
1263
+ });
1264
+ this.dragStopSubscription = this.dragDropService.dragStop$.subscribe((event) => {
1265
+ this.dragNodeTree = null;
1266
+ this.dragNode = null;
1267
+ this.dragNodeSubNodes = null;
1268
+ this.dragNodeIndex = null;
1269
+ this.dragNodeScope = null;
1270
+ this.dragHover = false;
1271
+ });
1272
+ }
1273
+ }
1274
+ ngOnChanges(simpleChange) {
1275
+ super.ngOnChanges(simpleChange);
1276
+ if (simpleChange.value) {
1277
+ this.updateSerializedValue();
1278
+ if (this.hasFilterActive()) {
1279
+ this._filter(this.filterViewChild.nativeElement.value);
1280
+ }
1281
+ }
1282
+ }
1283
+ get emptyMessageLabel() {
1284
+ return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);
1285
+ }
1286
+ updateSerializedValue() {
1287
+ this.serializedValue = [];
1288
+ this.serializeNodes(null, this.getRootNode(), 0, true);
1289
+ }
1290
+ serializeNodes(parent, nodes, level, visible) {
1291
+ if (nodes && nodes.length) {
1292
+ for (let node of nodes) {
1293
+ node.parent = parent;
1294
+ const rowNode = {
1295
+ node: node,
1296
+ parent: parent,
1297
+ level: level,
1298
+ visible: visible && (parent ? parent.expanded : true)
1299
+ };
1300
+ this.serializedValue.push(rowNode);
1301
+ if (rowNode.visible && node.expanded) {
1302
+ this.serializeNodes(node, node.children, level + 1, rowNode.visible);
1303
+ }
1304
+ }
1305
+ }
1306
+ }
1307
+ onNodeClick(event, node) {
1308
+ let eventTarget = event.target;
1309
+ if (hasClass(eventTarget, 'p-tree-toggler') || hasClass(eventTarget, 'p-tree-toggler-icon')) {
1310
+ return;
1311
+ }
1312
+ else if (this.selectionMode) {
1313
+ if (node.selectable === false) {
1314
+ node.style = '--p-focus-ring-color: none;';
1315
+ return;
1316
+ }
1317
+ else {
1318
+ if (!node.style?.includes('--p-focus-ring-color')) {
1319
+ node.style = node.style ? `${node.style}--p-focus-ring-color: var(--primary-color)` : '--p-focus-ring-color: var(--primary-color)';
1320
+ }
1321
+ }
1322
+ if (this.hasFilteredNodes()) {
1323
+ node = this.getNodeWithKey(node.key, this.filteredNodes);
1324
+ if (!node) {
1325
+ return;
1326
+ }
1327
+ }
1328
+ let index = this.findIndexInSelection(node);
1329
+ let selected = index >= 0;
1330
+ if (this.isCheckboxSelectionMode()) {
1331
+ if (selected) {
1332
+ if (this.propagateSelectionDown)
1333
+ this.propagateDown(node, false);
1334
+ else
1335
+ this.selection = this.selection.filter((val, i) => i != index);
1336
+ if (this.propagateSelectionUp && node.parent) {
1337
+ this.propagateUp(node.parent, false);
1338
+ }
1339
+ this.selectionChange.emit(this.selection);
1340
+ this.onNodeUnselect.emit({ originalEvent: event, node: node });
1341
+ }
1342
+ else {
1343
+ if (this.propagateSelectionDown)
1344
+ this.propagateDown(node, true);
1345
+ else
1346
+ this.selection = [...(this.selection || []), node];
1347
+ if (this.propagateSelectionUp && node.parent) {
1348
+ this.propagateUp(node.parent, true);
1349
+ }
1350
+ this.selectionChange.emit(this.selection);
1351
+ this.onNodeSelect.emit({ originalEvent: event, node: node });
1352
+ }
1353
+ }
1354
+ else {
1355
+ let metaSelection = this.nodeTouched ? false : this.metaKeySelection;
1356
+ if (metaSelection) {
1357
+ let metaKey = event.metaKey || event.ctrlKey;
1358
+ if (selected && metaKey) {
1359
+ if (this.isSingleSelectionMode()) {
1360
+ this.selectionChange.emit(null);
1361
+ }
1362
+ else {
1363
+ this.selection = this.selection.filter((val, i) => i != index);
1364
+ this.selectionChange.emit(this.selection);
1365
+ }
1366
+ this.onNodeUnselect.emit({ originalEvent: event, node: node });
1367
+ }
1368
+ else {
1369
+ if (this.isSingleSelectionMode()) {
1370
+ this.selectionChange.emit(node);
1371
+ }
1372
+ else if (this.isMultipleSelectionMode()) {
1373
+ this.selection = !metaKey ? [] : this.selection || [];
1374
+ this.selection = [...this.selection, node];
1375
+ this.selectionChange.emit(this.selection);
1376
+ }
1377
+ this.onNodeSelect.emit({ originalEvent: event, node: node });
1378
+ }
1379
+ }
1380
+ else {
1381
+ if (this.isSingleSelectionMode()) {
1382
+ if (selected) {
1383
+ this.selection = null;
1384
+ this.onNodeUnselect.emit({ originalEvent: event, node: node });
1385
+ }
1386
+ else {
1387
+ this.selection = node;
1388
+ setTimeout(() => {
1389
+ this.onNodeSelect.emit({ originalEvent: event, node: node });
1390
+ });
1391
+ }
1392
+ }
1393
+ else {
1394
+ if (selected) {
1395
+ this.selection = this.selection.filter((val, i) => i != index);
1396
+ this.onNodeUnselect.emit({ originalEvent: event, node: node });
1397
+ }
1398
+ else {
1399
+ this.selection = [...(this.selection || []), node];
1400
+ setTimeout(() => {
1401
+ this.onNodeSelect.emit({ originalEvent: event, node: node });
1402
+ });
1403
+ }
1404
+ }
1405
+ this.selectionChange.emit(this.selection);
1406
+ }
1407
+ }
1408
+ }
1409
+ this.nodeTouched = false;
1410
+ }
1411
+ onNodeTouchEnd() {
1412
+ this.nodeTouched = true;
1413
+ }
1414
+ onNodeRightClick(event, node) {
1415
+ if (this.contextMenu) {
1416
+ let eventTarget = event.target;
1417
+ if (eventTarget.className && eventTarget.className.indexOf('p-tree-toggler') === 0) {
1418
+ return;
1419
+ }
1420
+ else {
1421
+ let index = this.findIndexInSelection(node);
1422
+ let selected = index >= 0;
1423
+ if (!selected) {
1424
+ if (this.isSingleSelectionMode())
1425
+ this.selectionChange.emit(node);
1426
+ else
1427
+ this.selectionChange.emit([node]);
1428
+ }
1429
+ this.contextMenu.show(event);
1430
+ this.onNodeContextMenuSelect.emit({ originalEvent: event, node: node });
1431
+ }
1432
+ }
1433
+ }
1434
+ onNodeDblClick(event, node) {
1435
+ this.onNodeDoubleClick.emit({ originalEvent: event, node: node });
1436
+ }
1437
+ findIndexInSelection(node) {
1438
+ let index = -1;
1439
+ if (this.selectionMode && this.selection) {
1440
+ if (this.isSingleSelectionMode()) {
1441
+ let areNodesEqual = (this.selection.key && this.selection.key === node.key) || this.selection == node;
1442
+ index = areNodesEqual ? 0 : -1;
1443
+ }
1444
+ else {
1445
+ for (let i = 0; i < this.selection.length; i++) {
1446
+ let selectedNode = this.selection[i];
1447
+ let areNodesEqual = (selectedNode.key && selectedNode.key === node.key) || selectedNode == node;
1448
+ if (areNodesEqual) {
1449
+ index = i;
1450
+ break;
1451
+ }
1452
+ }
1453
+ }
1454
+ }
1455
+ return index;
1456
+ }
1457
+ syncNodeOption(node, parentNodes, option, value) {
1458
+ // to synchronize the node option between the filtered nodes and the original nodes(this.value)
1459
+ const _node = this.hasFilteredNodes() ? this.getNodeWithKey(node.key, parentNodes) : null;
1460
+ if (_node) {
1461
+ _node[option] = value || node[option];
1462
+ }
1463
+ }
1464
+ hasFilteredNodes() {
1465
+ return this.filter && this.filteredNodes && this.filteredNodes.length;
1466
+ }
1467
+ hasFilterActive() {
1468
+ return this.filter && this.filterViewChild?.nativeElement?.value.length > 0;
1469
+ }
1470
+ getNodeWithKey(key, nodes) {
1471
+ for (let node of nodes) {
1472
+ if (node.key === key) {
1473
+ return node;
1474
+ }
1475
+ if (node.children) {
1476
+ let matchedNode = this.getNodeWithKey(key, node.children);
1477
+ if (matchedNode) {
1478
+ return matchedNode;
1479
+ }
1480
+ }
1481
+ }
1482
+ }
1483
+ propagateUp(node, select) {
1484
+ if (node.children && node.children.length) {
1485
+ let selectedCount = 0;
1486
+ let childPartialSelected = false;
1487
+ for (let child of node.children) {
1488
+ if (this.isSelected(child)) {
1489
+ selectedCount++;
1490
+ }
1491
+ else if (child.partialSelected) {
1492
+ childPartialSelected = true;
1493
+ }
1494
+ }
1495
+ if (select && selectedCount == node.children.length) {
1496
+ this.selection = [...(this.selection || []), node];
1497
+ node.partialSelected = false;
1498
+ }
1499
+ else {
1500
+ if (!select) {
1501
+ let index = this.findIndexInSelection(node);
1502
+ if (index >= 0) {
1503
+ this.selection = this.selection.filter((val, i) => i != index);
1504
+ }
1505
+ }
1506
+ if (childPartialSelected || (selectedCount > 0 && selectedCount != node.children.length))
1507
+ node.partialSelected = true;
1508
+ else
1509
+ node.partialSelected = false;
1510
+ }
1511
+ this.syncNodeOption(node, this.filteredNodes, 'partialSelected');
1512
+ }
1513
+ let parent = node.parent;
1514
+ if (parent) {
1515
+ this.propagateUp(parent, select);
1516
+ }
1517
+ }
1518
+ propagateDown(node, select) {
1519
+ let index = this.findIndexInSelection(node);
1520
+ if (select && index == -1) {
1521
+ this.selection = [...(this.selection || []), node];
1522
+ }
1523
+ else if (!select && index > -1) {
1524
+ this.selection = this.selection.filter((val, i) => i != index);
1525
+ }
1526
+ node.partialSelected = false;
1527
+ this.syncNodeOption(node, this.filteredNodes, 'partialSelected');
1528
+ if (node.children && node.children.length) {
1529
+ for (let child of node.children) {
1530
+ this.propagateDown(child, select);
1531
+ }
1532
+ }
1533
+ }
1534
+ isSelected(node) {
1535
+ return this.findIndexInSelection(node) != -1;
1536
+ }
1537
+ isSingleSelectionMode() {
1538
+ return this.selectionMode && this.selectionMode == 'single';
1539
+ }
1540
+ isMultipleSelectionMode() {
1541
+ return this.selectionMode && this.selectionMode == 'multiple';
1542
+ }
1543
+ isCheckboxSelectionMode() {
1544
+ return this.selectionMode && this.selectionMode == 'checkbox';
1545
+ }
1546
+ isNodeLeaf(node) {
1547
+ return node.leaf == false ? false : !(node.children && node.children.length);
1548
+ }
1549
+ getRootNode() {
1550
+ return this.filteredNodes ? this.filteredNodes : this.value;
1551
+ }
1552
+ getTemplateForNode(node) {
1553
+ if (this._templateMap)
1554
+ return node.type ? this._templateMap[node.type] : this._templateMap['default'];
1555
+ else
1556
+ return null;
1557
+ }
1558
+ onDragOver(event) {
1559
+ if (this.droppableNodes && (!this.value || this.value.length === 0)) {
1560
+ event.dataTransfer.dropEffect = 'move';
1561
+ event.preventDefault();
1562
+ }
1563
+ }
1564
+ onDrop(event) {
1565
+ if (this.droppableNodes && (!this.value || this.value.length === 0)) {
1566
+ event.preventDefault();
1567
+ let dragNode = this.dragNode;
1568
+ if (this.allowDrop(dragNode, null, this.dragNodeScope)) {
1569
+ let dragNodeIndex = this.dragNodeIndex;
1570
+ this.value = this.value || [];
1571
+ if (this.validateDrop) {
1572
+ this.onNodeDrop.emit({
1573
+ originalEvent: event,
1574
+ dragNode: dragNode,
1575
+ dropNode: null,
1576
+ index: dragNodeIndex,
1577
+ accept: () => {
1578
+ this.processTreeDrop(dragNode, dragNodeIndex);
1579
+ }
1580
+ });
1581
+ }
1582
+ else {
1583
+ this.onNodeDrop.emit({
1584
+ originalEvent: event,
1585
+ dragNode: dragNode,
1586
+ dropNode: null,
1587
+ index: dragNodeIndex
1588
+ });
1589
+ this.processTreeDrop(dragNode, dragNodeIndex);
1590
+ }
1591
+ }
1592
+ }
1593
+ }
1594
+ processTreeDrop(dragNode, dragNodeIndex) {
1595
+ this.dragNodeSubNodes.splice(dragNodeIndex, 1);
1596
+ this.value.push(dragNode);
1597
+ this.dragDropService.stopDrag({
1598
+ node: dragNode
1599
+ });
1600
+ }
1601
+ onDragEnter() {
1602
+ if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {
1603
+ this.dragHover = true;
1604
+ }
1605
+ }
1606
+ onDragLeave(event) {
1607
+ if (this.droppableNodes) {
1608
+ let rect = event.currentTarget.getBoundingClientRect();
1609
+ if (event.x > rect.left + rect.width || event.x < rect.left || event.y > rect.top + rect.height || event.y < rect.top) {
1610
+ this.dragHover = false;
1611
+ }
1612
+ }
1613
+ }
1614
+ allowDrop(dragNode, dropNode, dragNodeScope) {
1615
+ if (!dragNode) {
1616
+ //prevent random html elements to be dragged
1617
+ return false;
1618
+ }
1619
+ else if (this.isValidDragScope(dragNodeScope)) {
1620
+ let allow = true;
1621
+ if (dropNode) {
1622
+ if (dragNode === dropNode) {
1623
+ allow = false;
1624
+ }
1625
+ else {
1626
+ let parent = dropNode.parent;
1627
+ while (parent != null) {
1628
+ if (parent === dragNode) {
1629
+ allow = false;
1630
+ break;
1631
+ }
1632
+ parent = parent.parent;
1633
+ }
1634
+ }
1635
+ }
1636
+ return allow;
1637
+ }
1638
+ else {
1639
+ return false;
1640
+ }
1641
+ }
1642
+ isValidDragScope(dragScope) {
1643
+ let dropScope = this.droppableScope;
1644
+ if (dropScope) {
1645
+ if (typeof dropScope === 'string') {
1646
+ if (typeof dragScope === 'string')
1647
+ return dropScope === dragScope;
1648
+ else if (Array.isArray(dragScope))
1649
+ return dragScope.indexOf(dropScope) != -1;
1650
+ }
1651
+ else if (Array.isArray(dropScope)) {
1652
+ if (typeof dragScope === 'string') {
1653
+ return dropScope.indexOf(dragScope) != -1;
1654
+ }
1655
+ else if (Array.isArray(dragScope)) {
1656
+ for (let s of dropScope) {
1657
+ for (let ds of dragScope) {
1658
+ if (s === ds) {
1659
+ return true;
1660
+ }
1661
+ }
1662
+ }
1663
+ }
1664
+ }
1665
+ return false;
1666
+ }
1667
+ else {
1668
+ return true;
1669
+ }
1670
+ }
1671
+ _filter(value) {
1672
+ let filterValue = value;
1673
+ if (filterValue === '') {
1674
+ this.filteredNodes = null;
1675
+ }
1676
+ else {
1677
+ this.filteredNodes = [];
1678
+ const searchFields = this.filterBy.split(',');
1679
+ const filterText = removeAccents(filterValue).toLocaleLowerCase(this.filterLocale);
1680
+ const isStrictMode = this.filterMode === 'strict';
1681
+ for (let node of this.value) {
1682
+ let copyNode = { ...node };
1683
+ let paramsWithoutNode = { searchFields, filterText, isStrictMode };
1684
+ if ((isStrictMode && (this.findFilteredNodes(copyNode, paramsWithoutNode) || this.isFilterMatched(copyNode, paramsWithoutNode))) ||
1685
+ (!isStrictMode && (this.isFilterMatched(copyNode, paramsWithoutNode) || this.findFilteredNodes(copyNode, paramsWithoutNode)))) {
1686
+ this.filteredNodes.push(copyNode);
1687
+ }
1688
+ }
1689
+ }
1690
+ this.updateSerializedValue();
1691
+ this.onFilter.emit({
1692
+ filter: filterValue,
1693
+ filteredValue: this.filteredNodes
1694
+ });
1695
+ }
1696
+ /**
1697
+ * Resets filter.
1698
+ * @group Method
1699
+ */
1700
+ resetFilter() {
1701
+ this.filteredNodes = null;
1702
+ if (this.filterViewChild && this.filterViewChild.nativeElement) {
1703
+ this.filterViewChild.nativeElement.value = '';
1704
+ }
1705
+ }
1706
+ /**
1707
+ * Scrolls to virtual index.
1708
+ * @param {number} number - Index to be scrolled.
1709
+ * @group Method
1710
+ */
1711
+ scrollToVirtualIndex(index) {
1712
+ this.virtualScroll && this.scroller?.scrollToIndex(index);
1713
+ }
1714
+ /**
1715
+ * Scrolls to virtual index.
1716
+ * @param {ScrollToOptions} options - Scroll options.
1717
+ * @group Method
1718
+ */
1719
+ scrollTo(options) {
1720
+ if (this.virtualScroll) {
1721
+ this.scroller?.scrollTo(options);
1722
+ }
1723
+ else if (this.wrapperViewChild && this.wrapperViewChild.nativeElement) {
1724
+ if (this.wrapperViewChild.nativeElement.scrollTo) {
1725
+ this.wrapperViewChild.nativeElement.scrollTo(options);
1726
+ }
1727
+ else {
1728
+ this.wrapperViewChild.nativeElement.scrollLeft = options.left;
1729
+ this.wrapperViewChild.nativeElement.scrollTop = options.top;
1730
+ }
1731
+ }
1732
+ }
1733
+ findFilteredNodes(node, paramsWithoutNode) {
1734
+ if (node) {
1735
+ let matched = false;
1736
+ if (node.children) {
1737
+ let childNodes = [...node.children];
1738
+ node.children = [];
1739
+ for (let childNode of childNodes) {
1740
+ let copyChildNode = { ...childNode };
1741
+ if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {
1742
+ matched = true;
1743
+ node.children.push(copyChildNode);
1744
+ }
1745
+ }
1746
+ }
1747
+ if (matched) {
1748
+ node.expanded = true;
1749
+ return true;
1750
+ }
1751
+ }
1752
+ }
1753
+ isFilterMatched(node, params) {
1754
+ let { searchFields, filterText, isStrictMode } = params;
1755
+ let matched = false;
1756
+ for (let field of searchFields) {
1757
+ let fieldValue = removeAccents(String(resolveFieldData(node, field))).toLocaleLowerCase(this.filterLocale);
1758
+ if (fieldValue.indexOf(filterText) > -1) {
1759
+ matched = true;
1760
+ }
1761
+ }
1762
+ if (!matched || (isStrictMode && !this.isNodeLeaf(node))) {
1763
+ matched = this.findFilteredNodes(node, { searchFields, filterText, isStrictMode }) || matched;
1764
+ }
1765
+ return matched;
1766
+ }
1767
+ getIndex(options, index) {
1768
+ const getItemOptions = options['getItemOptions'];
1769
+ return getItemOptions ? getItemOptions(index).index : index;
1770
+ }
1771
+ getBlockableElement() {
1772
+ return this.el.nativeElement.children[0];
1773
+ }
1774
+ ngOnDestroy() {
1775
+ if (this.dragStartSubscription) {
1776
+ this.dragStartSubscription.unsubscribe();
1777
+ }
1778
+ if (this.dragStopSubscription) {
1779
+ this.dragStopSubscription.unsubscribe();
1780
+ }
1781
+ super.ngOnDestroy();
1782
+ }
1783
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: Tree, deps: [{ token: i3.TreeDragDropService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1784
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.4", type: Tree, isStandalone: true, selector: "p-tree", inputs: { value: "value", selectionMode: "selectionMode", loadingMode: "loadingMode", selection: "selection", styleClass: "styleClass", contextMenu: "contextMenu", draggableScope: "draggableScope", droppableScope: "droppableScope", draggableNodes: ["draggableNodes", "draggableNodes", booleanAttribute], droppableNodes: ["droppableNodes", "droppableNodes", booleanAttribute], metaKeySelection: ["metaKeySelection", "metaKeySelection", booleanAttribute], propagateSelectionUp: ["propagateSelectionUp", "propagateSelectionUp", booleanAttribute], propagateSelectionDown: ["propagateSelectionDown", "propagateSelectionDown", booleanAttribute], loading: ["loading", "loading", booleanAttribute], loadingIcon: "loadingIcon", emptyMessage: "emptyMessage", ariaLabel: "ariaLabel", togglerAriaLabel: "togglerAriaLabel", ariaLabelledBy: "ariaLabelledBy", validateDrop: ["validateDrop", "validateDrop", booleanAttribute], filter: ["filter", "filter", booleanAttribute], filterInputAutoFocus: ["filterInputAutoFocus", "filterInputAutoFocus", booleanAttribute], filterBy: "filterBy", filterMode: "filterMode", filterOptions: "filterOptions", filterPlaceholder: "filterPlaceholder", filteredNodes: "filteredNodes", filterLocale: "filterLocale", scrollHeight: "scrollHeight", lazy: ["lazy", "lazy", booleanAttribute], virtualScroll: ["virtualScroll", "virtualScroll", booleanAttribute], virtualScrollItemSize: ["virtualScrollItemSize", "virtualScrollItemSize", numberAttribute], virtualScrollOptions: "virtualScrollOptions", indentation: ["indentation", "indentation", numberAttribute], _templateMap: "_templateMap", trackBy: "trackBy", highlightOnSelect: ["highlightOnSelect", "highlightOnSelect", booleanAttribute] }, outputs: { selectionChange: "selectionChange", onNodeSelect: "onNodeSelect", onNodeUnselect: "onNodeUnselect", onNodeExpand: "onNodeExpand", onNodeCollapse: "onNodeCollapse", onNodeContextMenuSelect: "onNodeContextMenuSelect", onNodeDoubleClick: "onNodeDoubleClick", onNodeDrop: "onNodeDrop", onLazyLoad: "onLazyLoad", onScroll: "onScroll", onScrollIndexChange: "onScrollIndexChange", onFilter: "onFilter" }, host: { listeners: { "drop": "handleDropEvent($event)", "dragover": "handleDragOverEvent($event)", "dragenter": "handleDragEnterEvent()", "dragleave": "handleDragLeaveEvent($event)" }, properties: { "class": "cn(cx('root'), styleClass)" } }, providers: [TreeStyle], queries: [{ propertyName: "filterTemplate", first: true, predicate: ["filter"] }, { propertyName: "nodeTemplate", first: true, predicate: ["node"] }, { propertyName: "headerTemplate", first: true, predicate: ["header"] }, { propertyName: "footerTemplate", first: true, predicate: ["footer"] }, { propertyName: "loaderTemplate", first: true, predicate: ["loader"] }, { propertyName: "emptyMessageTemplate", first: true, predicate: ["empty"] }, { propertyName: "togglerIconTemplate", first: true, predicate: ["togglericon"] }, { propertyName: "checkboxIconTemplate", first: true, predicate: ["checkboxicon"] }, { propertyName: "loadingIconTemplate", first: true, predicate: ["loadingicon"] }, { propertyName: "filterIconTemplate", first: true, predicate: ["filtericon"] }, { propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "filterViewChild", first: true, predicate: ["filter"], descendants: true }, { propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true }, { propertyName: "wrapperViewChild", first: true, predicate: ["wrapper"], descendants: true }, { propertyName: "contentViewChild", first: true, predicate: ["content"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
1785
+ <div [class]="cx('mask')" *ngIf="loading && loadingMode === 'mask'">
1786
+ <i *ngIf="loadingIcon" [class]="cn(cx('loadingIcon'), 'pi-spin' + loadingIcon)"></i>
1787
+ <ng-container *ngIf="!loadingIcon">
1788
+ <svg data-p-icon="spinner" *ngIf="!loadingIconTemplate && !_loadingIconTemplate" spin [class]="cx('loadingIcon')" />
1789
+ <span *ngIf="loadingIconTemplate || _loadingIconTemplate" [class]="cx('loadingIcon')">
1790
+ <ng-template *ngTemplateOutlet="loadingIconTemplate || _loadingIconTemplate"></ng-template>
1791
+ </span>
1792
+ </ng-container>
1793
+ </div>
1794
+ <ng-container *ngTemplateOutlet="headerTemplate || _headerTemplate"></ng-container>
1795
+ @if (filterTemplate || _filterTemplate) {
1796
+ <ng-container *ngTemplateOutlet="filterTemplate || _filterTemplate; context: { $implicit: filterOptions }"></ng-container>
1797
+ } @else {
1798
+ <p-iconfield *ngIf="filter" [class]="cx('pcFilterContainer')">
1799
+ <input
1800
+ #filter
1801
+ [pAutoFocus]="filterInputAutoFocus"
1802
+ pInputText
1803
+ type="search"
1804
+ autocomplete="off"
1805
+ [class]="cx('pcFilterInput')"
1806
+ [attr.placeholder]="filterPlaceholder"
1807
+ (keydown.enter)="$event.preventDefault()"
1808
+ (input)="_filter($event.target?.value)"
1809
+ />
1810
+ <p-inputicon>
1811
+ <svg data-p-icon="search" *ngIf="!filterIconTemplate && !_filterIconTemplate" [class]="cx('filterIcon')" />
1812
+ <span *ngIf="filterIconTemplate || _filterIconTemplate" [class]="cx('filterIcon')">
1813
+ <ng-template *ngTemplateOutlet="filterIconTemplate || _filterIconTemplate"></ng-template>
1814
+ </span>
1815
+ </p-inputicon>
1816
+ </p-iconfield>
1817
+ }
1818
+
1819
+ <ng-container *ngIf="getRootNode()?.length">
1820
+ <p-scroller
1821
+ #scroller
1822
+ *ngIf="virtualScroll"
1823
+ [items]="serializedValue"
1824
+ [tabindex]="-1"
1825
+ [styleClass]="cx('wrapper')"
1826
+ [style]="{ height: scrollHeight !== 'flex' ? scrollHeight : undefined }"
1827
+ [scrollHeight]="scrollHeight !== 'flex' ? undefined : '100%'"
1828
+ [itemSize]="virtualScrollItemSize"
1829
+ [lazy]="lazy"
1830
+ (onScroll)="onScroll.emit($event)"
1831
+ (onScrollIndexChange)="onScrollIndexChange.emit($event)"
1832
+ (onLazyLoad)="onLazyLoad.emit($event)"
1833
+ [options]="virtualScrollOptions"
1834
+ >
1835
+ <ng-template #content let-items let-scrollerOptions="options">
1836
+ <ul *ngIf="items" #content [class]="cx('rootChildren')" [ngClass]="scrollerOptions.contentStyleClass" [style]="scrollerOptions.contentStyle" role="tree" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy">
1837
+ <p-treeNode
1838
+ #treeNode
1839
+ *ngFor="let rowNode of items; let firstChild = first; let lastChild = last; let index = index; trackBy: trackBy"
1840
+ [level]="rowNode.level"
1841
+ [rowNode]="rowNode"
1842
+ [node]="rowNode.node"
1843
+ [parentNode]="rowNode.parent"
1844
+ [firstChild]="firstChild"
1845
+ [lastChild]="lastChild"
1846
+ [index]="getIndex(scrollerOptions, index)"
1847
+ [itemSize]="scrollerOptions.itemSize"
1848
+ [indentation]="indentation"
1849
+ [loadingMode]="loadingMode"
1850
+ ></p-treeNode>
1851
+ </ul>
1852
+ </ng-template>
1853
+ <ng-container *ngIf="loaderTemplate || _loaderTemplate">
1854
+ <ng-template #loader let-scrollerOptions="options">
1855
+ <ng-container *ngTemplateOutlet="loaderTemplate || _loaderTemplate; context: { options: scrollerOptions }"></ng-container>
1856
+ </ng-template>
1857
+ </ng-container>
1858
+ </p-scroller>
1859
+ <ng-container *ngIf="!virtualScroll">
1860
+ <div #wrapper [class]="cx('wrapper')" [style.max-height]="scrollHeight">
1861
+ <ul #content [class]="cx('rootChildren')" *ngIf="getRootNode()" role="tree" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy">
1862
+ <p-treeNode
1863
+ *ngFor="let node of getRootNode(); let firstChild = first; let lastChild = last; let index = index; trackBy: trackBy.bind(this)"
1864
+ [node]="node"
1865
+ [firstChild]="firstChild"
1866
+ [lastChild]="lastChild"
1867
+ [index]="index"
1868
+ [level]="0"
1869
+ [loadingMode]="loadingMode"
1870
+ ></p-treeNode>
1871
+ </ul>
1872
+ </div>
1873
+ </ng-container>
1874
+ </ng-container>
1875
+
1876
+ <div [class]="cx('emptyMessage')" *ngIf="!loading && (getRootNode() == null || getRootNode().length === 0)">
1877
+ <ng-container *ngIf="!emptyMessageTemplate && !_emptyMessageTemplate; else emptyFilter">
1878
+ {{ emptyMessageLabel }}
1879
+ </ng-container>
1880
+ <ng-template #emptyFilter *ngTemplateOutlet="emptyMessageTemplate || _emptyMessageTemplate"></ng-template>
1881
+ </div>
1882
+ <ng-container *ngTemplateOutlet="footerTemplate || _footerTemplate"></ng-container>
1883
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: Scroller, selector: "p-scroller, p-virtualscroller, p-virtual-scroller, p-virtualScroller", inputs: ["id", "style", "styleClass", "tabindex", "items", "itemSize", "scrollHeight", "scrollWidth", "orientation", "step", "delay", "resizeDelay", "appendOnly", "inline", "lazy", "disabled", "loaderDisabled", "columns", "showSpacer", "showLoader", "numToleratedItems", "loading", "autoSize", "trackBy", "options"], outputs: ["onLazyLoad", "onScroll", "onScrollIndexChange"] }, { kind: "ngmodule", type: SharedModule }, { kind: "component", type: SearchIcon, selector: "[data-p-icon=\"search\"]" }, { kind: "component", type: SpinnerIcon, selector: "[data-p-icon=\"spinner\"]" }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: IconField, selector: "p-iconfield, p-iconField, p-icon-field", inputs: ["iconPosition", "styleClass"] }, { kind: "component", type: InputIcon, selector: "p-inputicon, p-inputIcon", inputs: ["styleClass"] }, { kind: "component", type: UITreeNode, selector: "p-treeNode", inputs: ["rowNode", "node", "parentNode", "root", "index", "firstChild", "lastChild", "level", "indentation", "itemSize", "loadingMode"] }, { kind: "ngmodule", type: AutoFocusModule }, { kind: "directive", type: i4.AutoFocus, selector: "[pAutoFocus]", inputs: ["pAutoFocus"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
1884
+ }
1885
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: Tree, decorators: [{
1886
+ type: Component,
1887
+ args: [{
1888
+ selector: 'p-tree',
1889
+ standalone: true,
1890
+ imports: [CommonModule, Scroller, SharedModule, SearchIcon, SpinnerIcon, InputText, FormsModule, IconField, InputIcon, UITreeNode, AutoFocusModule],
1891
+ template: `
1892
+ <div [class]="cx('mask')" *ngIf="loading && loadingMode === 'mask'">
1893
+ <i *ngIf="loadingIcon" [class]="cn(cx('loadingIcon'), 'pi-spin' + loadingIcon)"></i>
1894
+ <ng-container *ngIf="!loadingIcon">
1895
+ <svg data-p-icon="spinner" *ngIf="!loadingIconTemplate && !_loadingIconTemplate" spin [class]="cx('loadingIcon')" />
1896
+ <span *ngIf="loadingIconTemplate || _loadingIconTemplate" [class]="cx('loadingIcon')">
1897
+ <ng-template *ngTemplateOutlet="loadingIconTemplate || _loadingIconTemplate"></ng-template>
1898
+ </span>
1899
+ </ng-container>
1900
+ </div>
1901
+ <ng-container *ngTemplateOutlet="headerTemplate || _headerTemplate"></ng-container>
1902
+ @if (filterTemplate || _filterTemplate) {
1903
+ <ng-container *ngTemplateOutlet="filterTemplate || _filterTemplate; context: { $implicit: filterOptions }"></ng-container>
1904
+ } @else {
1905
+ <p-iconfield *ngIf="filter" [class]="cx('pcFilterContainer')">
1906
+ <input
1907
+ #filter
1908
+ [pAutoFocus]="filterInputAutoFocus"
1909
+ pInputText
1910
+ type="search"
1911
+ autocomplete="off"
1912
+ [class]="cx('pcFilterInput')"
1913
+ [attr.placeholder]="filterPlaceholder"
1914
+ (keydown.enter)="$event.preventDefault()"
1915
+ (input)="_filter($event.target?.value)"
1916
+ />
1917
+ <p-inputicon>
1918
+ <svg data-p-icon="search" *ngIf="!filterIconTemplate && !_filterIconTemplate" [class]="cx('filterIcon')" />
1919
+ <span *ngIf="filterIconTemplate || _filterIconTemplate" [class]="cx('filterIcon')">
1920
+ <ng-template *ngTemplateOutlet="filterIconTemplate || _filterIconTemplate"></ng-template>
1921
+ </span>
1922
+ </p-inputicon>
1923
+ </p-iconfield>
1924
+ }
1925
+
1926
+ <ng-container *ngIf="getRootNode()?.length">
1927
+ <p-scroller
1928
+ #scroller
1929
+ *ngIf="virtualScroll"
1930
+ [items]="serializedValue"
1931
+ [tabindex]="-1"
1932
+ [styleClass]="cx('wrapper')"
1933
+ [style]="{ height: scrollHeight !== 'flex' ? scrollHeight : undefined }"
1934
+ [scrollHeight]="scrollHeight !== 'flex' ? undefined : '100%'"
1935
+ [itemSize]="virtualScrollItemSize"
1936
+ [lazy]="lazy"
1937
+ (onScroll)="onScroll.emit($event)"
1938
+ (onScrollIndexChange)="onScrollIndexChange.emit($event)"
1939
+ (onLazyLoad)="onLazyLoad.emit($event)"
1940
+ [options]="virtualScrollOptions"
1941
+ >
1942
+ <ng-template #content let-items let-scrollerOptions="options">
1943
+ <ul *ngIf="items" #content [class]="cx('rootChildren')" [ngClass]="scrollerOptions.contentStyleClass" [style]="scrollerOptions.contentStyle" role="tree" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy">
1944
+ <p-treeNode
1945
+ #treeNode
1946
+ *ngFor="let rowNode of items; let firstChild = first; let lastChild = last; let index = index; trackBy: trackBy"
1947
+ [level]="rowNode.level"
1948
+ [rowNode]="rowNode"
1949
+ [node]="rowNode.node"
1950
+ [parentNode]="rowNode.parent"
1951
+ [firstChild]="firstChild"
1952
+ [lastChild]="lastChild"
1953
+ [index]="getIndex(scrollerOptions, index)"
1954
+ [itemSize]="scrollerOptions.itemSize"
1955
+ [indentation]="indentation"
1956
+ [loadingMode]="loadingMode"
1957
+ ></p-treeNode>
1958
+ </ul>
1959
+ </ng-template>
1960
+ <ng-container *ngIf="loaderTemplate || _loaderTemplate">
1961
+ <ng-template #loader let-scrollerOptions="options">
1962
+ <ng-container *ngTemplateOutlet="loaderTemplate || _loaderTemplate; context: { options: scrollerOptions }"></ng-container>
1963
+ </ng-template>
1964
+ </ng-container>
1965
+ </p-scroller>
1966
+ <ng-container *ngIf="!virtualScroll">
1967
+ <div #wrapper [class]="cx('wrapper')" [style.max-height]="scrollHeight">
1968
+ <ul #content [class]="cx('rootChildren')" *ngIf="getRootNode()" role="tree" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy">
1969
+ <p-treeNode
1970
+ *ngFor="let node of getRootNode(); let firstChild = first; let lastChild = last; let index = index; trackBy: trackBy.bind(this)"
1971
+ [node]="node"
1972
+ [firstChild]="firstChild"
1973
+ [lastChild]="lastChild"
1974
+ [index]="index"
1975
+ [level]="0"
1976
+ [loadingMode]="loadingMode"
1977
+ ></p-treeNode>
1978
+ </ul>
1979
+ </div>
1980
+ </ng-container>
1981
+ </ng-container>
1982
+
1983
+ <div [class]="cx('emptyMessage')" *ngIf="!loading && (getRootNode() == null || getRootNode().length === 0)">
1984
+ <ng-container *ngIf="!emptyMessageTemplate && !_emptyMessageTemplate; else emptyFilter">
1985
+ {{ emptyMessageLabel }}
1986
+ </ng-container>
1987
+ <ng-template #emptyFilter *ngTemplateOutlet="emptyMessageTemplate || _emptyMessageTemplate"></ng-template>
1988
+ </div>
1989
+ <ng-container *ngTemplateOutlet="footerTemplate || _footerTemplate"></ng-container>
1990
+ `,
1991
+ changeDetection: ChangeDetectionStrategy.Default,
1992
+ encapsulation: ViewEncapsulation.None,
1993
+ providers: [TreeStyle],
1994
+ host: {
1995
+ '[class]': "cn(cx('root'), styleClass)"
1996
+ }
1997
+ }]
1998
+ }], ctorParameters: () => [{ type: i3.TreeDragDropService, decorators: [{
1999
+ type: Optional
2000
+ }] }], propDecorators: { value: [{
2001
+ type: Input
2002
+ }], selectionMode: [{
2003
+ type: Input
2004
+ }], loadingMode: [{
2005
+ type: Input
2006
+ }], selection: [{
2007
+ type: Input
2008
+ }], styleClass: [{
2009
+ type: Input
2010
+ }], contextMenu: [{
2011
+ type: Input
2012
+ }], draggableScope: [{
2013
+ type: Input
2014
+ }], droppableScope: [{
2015
+ type: Input
2016
+ }], draggableNodes: [{
2017
+ type: Input,
2018
+ args: [{ transform: booleanAttribute }]
2019
+ }], droppableNodes: [{
2020
+ type: Input,
2021
+ args: [{ transform: booleanAttribute }]
2022
+ }], metaKeySelection: [{
2023
+ type: Input,
2024
+ args: [{ transform: booleanAttribute }]
2025
+ }], propagateSelectionUp: [{
2026
+ type: Input,
2027
+ args: [{ transform: booleanAttribute }]
2028
+ }], propagateSelectionDown: [{
2029
+ type: Input,
2030
+ args: [{ transform: booleanAttribute }]
2031
+ }], loading: [{
2032
+ type: Input,
2033
+ args: [{ transform: booleanAttribute }]
2034
+ }], loadingIcon: [{
2035
+ type: Input
2036
+ }], emptyMessage: [{
2037
+ type: Input
2038
+ }], ariaLabel: [{
2039
+ type: Input
2040
+ }], togglerAriaLabel: [{
2041
+ type: Input
2042
+ }], ariaLabelledBy: [{
2043
+ type: Input
2044
+ }], validateDrop: [{
2045
+ type: Input,
2046
+ args: [{ transform: booleanAttribute }]
2047
+ }], filter: [{
2048
+ type: Input,
2049
+ args: [{ transform: booleanAttribute }]
2050
+ }], filterInputAutoFocus: [{
2051
+ type: Input,
2052
+ args: [{ transform: booleanAttribute }]
2053
+ }], filterBy: [{
2054
+ type: Input
2055
+ }], filterMode: [{
2056
+ type: Input
2057
+ }], filterOptions: [{
2058
+ type: Input
2059
+ }], filterPlaceholder: [{
2060
+ type: Input
2061
+ }], filteredNodes: [{
2062
+ type: Input
2063
+ }], filterLocale: [{
2064
+ type: Input
2065
+ }], scrollHeight: [{
2066
+ type: Input
2067
+ }], lazy: [{
2068
+ type: Input,
2069
+ args: [{ transform: booleanAttribute }]
2070
+ }], virtualScroll: [{
2071
+ type: Input,
2072
+ args: [{ transform: booleanAttribute }]
2073
+ }], virtualScrollItemSize: [{
2074
+ type: Input,
2075
+ args: [{ transform: numberAttribute }]
2076
+ }], virtualScrollOptions: [{
2077
+ type: Input
2078
+ }], indentation: [{
2079
+ type: Input,
2080
+ args: [{ transform: numberAttribute }]
2081
+ }], _templateMap: [{
2082
+ type: Input
2083
+ }], trackBy: [{
2084
+ type: Input
2085
+ }], highlightOnSelect: [{
2086
+ type: Input,
2087
+ args: [{ transform: booleanAttribute }]
2088
+ }], selectionChange: [{
2089
+ type: Output
2090
+ }], onNodeSelect: [{
2091
+ type: Output
2092
+ }], onNodeUnselect: [{
2093
+ type: Output
2094
+ }], onNodeExpand: [{
2095
+ type: Output
2096
+ }], onNodeCollapse: [{
2097
+ type: Output
2098
+ }], onNodeContextMenuSelect: [{
2099
+ type: Output
2100
+ }], onNodeDoubleClick: [{
2101
+ type: Output
2102
+ }], onNodeDrop: [{
2103
+ type: Output
2104
+ }], onLazyLoad: [{
2105
+ type: Output
2106
+ }], onScroll: [{
2107
+ type: Output
2108
+ }], onScrollIndexChange: [{
2109
+ type: Output
2110
+ }], onFilter: [{
2111
+ type: Output
2112
+ }], filterTemplate: [{
2113
+ type: ContentChild,
2114
+ args: ['filter', { descendants: false }]
2115
+ }], nodeTemplate: [{
2116
+ type: ContentChild,
2117
+ args: ['node', { descendants: false }]
2118
+ }], headerTemplate: [{
2119
+ type: ContentChild,
2120
+ args: ['header', { descendants: false }]
2121
+ }], footerTemplate: [{
2122
+ type: ContentChild,
2123
+ args: ['footer', { descendants: false }]
2124
+ }], loaderTemplate: [{
2125
+ type: ContentChild,
2126
+ args: ['loader', { descendants: false }]
2127
+ }], emptyMessageTemplate: [{
2128
+ type: ContentChild,
2129
+ args: ['empty', { descendants: false }]
2130
+ }], togglerIconTemplate: [{
2131
+ type: ContentChild,
2132
+ args: ['togglericon', { descendants: false }]
2133
+ }], checkboxIconTemplate: [{
2134
+ type: ContentChild,
2135
+ args: ['checkboxicon', { descendants: false }]
2136
+ }], loadingIconTemplate: [{
2137
+ type: ContentChild,
2138
+ args: ['loadingicon', { descendants: false }]
2139
+ }], filterIconTemplate: [{
2140
+ type: ContentChild,
2141
+ args: ['filtericon', { descendants: false }]
2142
+ }], filterViewChild: [{
2143
+ type: ViewChild,
2144
+ args: ['filter']
2145
+ }], scroller: [{
2146
+ type: ViewChild,
2147
+ args: ['scroller']
2148
+ }], wrapperViewChild: [{
2149
+ type: ViewChild,
2150
+ args: ['wrapper']
2151
+ }], contentViewChild: [{
2152
+ type: ViewChild,
2153
+ args: ['content']
2154
+ }], templates: [{
2155
+ type: ContentChildren,
2156
+ args: [PrimeTemplate]
2157
+ }], handleDropEvent: [{
2158
+ type: HostListener,
2159
+ args: ['drop', ['$event']]
2160
+ }], handleDragOverEvent: [{
2161
+ type: HostListener,
2162
+ args: ['dragover', ['$event']]
2163
+ }], handleDragEnterEvent: [{
2164
+ type: HostListener,
2165
+ args: ['dragenter']
2166
+ }], handleDragLeaveEvent: [{
2167
+ type: HostListener,
2168
+ args: ['dragleave', ['$event']]
2169
+ }] } });
2170
+ class TreeModule {
2171
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: TreeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2172
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.2.4", ngImport: i0, type: TreeModule, imports: [Tree, SharedModule], exports: [Tree, SharedModule] });
2173
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: TreeModule, imports: [Tree, SharedModule, SharedModule] });
2174
+ }
2175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: TreeModule, decorators: [{
2176
+ type: NgModule,
2177
+ args: [{
2178
+ imports: [Tree, SharedModule],
2179
+ exports: [Tree, SharedModule]
2180
+ }]
2181
+ }] });
2182
+
2183
+ /**
2184
+ * Generated bundle index. Do not edit.
2185
+ */
2186
+
2187
+ export { Tree, TreeClasses, TreeModule, TreeStyle, UITreeNode };
2188
+ //# sourceMappingURL=primeng-tree.mjs.map