@acorex/components 21.0.0-next.5 → 21.0.0-next.50

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 (279) hide show
  1. package/accordion/index.d.ts +0 -1
  2. package/autocomplete/index.d.ts +23 -9
  3. package/button/index.d.ts +38 -17
  4. package/button-group/index.d.ts +6 -4
  5. package/calendar/index.d.ts +4 -0
  6. package/chips/index.d.ts +3 -8
  7. package/code-editor/README.md +291 -1
  8. package/code-editor/index.d.ts +260 -12
  9. package/command/index.d.ts +1 -0
  10. package/conversation2/README.md +426 -0
  11. package/conversation2/index.d.ts +6139 -0
  12. package/data-table/index.d.ts +97 -261
  13. package/dialog/index.d.ts +1 -1
  14. package/drawer/README.md +2 -2
  15. package/drawer/index.d.ts +33 -57
  16. package/drawer-legacy/README.md +3 -0
  17. package/drawer-legacy/index.d.ts +86 -0
  18. package/editor/README.md +3 -0
  19. package/editor/index.d.ts +79 -0
  20. package/fesm2022/acorex-components-accordion.mjs +19 -24
  21. package/fesm2022/acorex-components-accordion.mjs.map +1 -1
  22. package/fesm2022/acorex-components-action-sheet.mjs +12 -12
  23. package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
  24. package/fesm2022/acorex-components-alert.mjs +14 -14
  25. package/fesm2022/acorex-components-alert.mjs.map +1 -1
  26. package/fesm2022/acorex-components-aspect-ratio.mjs +4 -4
  27. package/fesm2022/acorex-components-aspect-ratio.mjs.map +1 -1
  28. package/fesm2022/acorex-components-audio-wave.mjs +12 -11
  29. package/fesm2022/acorex-components-audio-wave.mjs.map +1 -1
  30. package/fesm2022/acorex-components-autocomplete.mjs +30 -13
  31. package/fesm2022/acorex-components-autocomplete.mjs.map +1 -1
  32. package/fesm2022/acorex-components-avatar.mjs +13 -13
  33. package/fesm2022/acorex-components-avatar.mjs.map +1 -1
  34. package/fesm2022/acorex-components-badge.mjs +10 -10
  35. package/fesm2022/acorex-components-badge.mjs.map +1 -1
  36. package/fesm2022/acorex-components-bottom-navigation.mjs +12 -12
  37. package/fesm2022/acorex-components-bottom-navigation.mjs.map +1 -1
  38. package/fesm2022/acorex-components-breadcrumbs.mjs +12 -12
  39. package/fesm2022/acorex-components-breadcrumbs.mjs.map +1 -1
  40. package/fesm2022/acorex-components-button-group.mjs +25 -21
  41. package/fesm2022/acorex-components-button-group.mjs.map +1 -1
  42. package/fesm2022/acorex-components-button.mjs +68 -28
  43. package/fesm2022/acorex-components-button.mjs.map +1 -1
  44. package/fesm2022/acorex-components-calendar.mjs +39 -18
  45. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  46. package/fesm2022/acorex-components-check-box.mjs +11 -11
  47. package/fesm2022/acorex-components-check-box.mjs.map +1 -1
  48. package/fesm2022/acorex-components-chips.mjs +12 -14
  49. package/fesm2022/acorex-components-chips.mjs.map +1 -1
  50. package/fesm2022/acorex-components-circular-progress.mjs +13 -11
  51. package/fesm2022/acorex-components-circular-progress.mjs.map +1 -1
  52. package/fesm2022/acorex-components-code-editor.mjs +494 -162
  53. package/fesm2022/acorex-components-code-editor.mjs.map +1 -1
  54. package/fesm2022/acorex-components-collapse.mjs +13 -28
  55. package/fesm2022/acorex-components-collapse.mjs.map +1 -1
  56. package/fesm2022/acorex-components-color-box.mjs +11 -11
  57. package/fesm2022/acorex-components-color-box.mjs.map +1 -1
  58. package/fesm2022/acorex-components-color-palette.mjs +32 -32
  59. package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
  60. package/fesm2022/acorex-components-command.mjs +18 -11
  61. package/fesm2022/acorex-components-command.mjs.map +1 -1
  62. package/fesm2022/acorex-components-comment.mjs +34 -34
  63. package/fesm2022/acorex-components-comment.mjs.map +1 -1
  64. package/fesm2022/acorex-components-conversation.mjs +56 -65
  65. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  66. package/fesm2022/acorex-components-conversation2.mjs +17641 -0
  67. package/fesm2022/acorex-components-conversation2.mjs.map +1 -0
  68. package/fesm2022/acorex-components-cron-job.mjs +53 -53
  69. package/fesm2022/acorex-components-cron-job.mjs.map +1 -1
  70. package/fesm2022/acorex-components-data-list.mjs +5 -5
  71. package/fesm2022/acorex-components-data-list.mjs.map +1 -1
  72. package/fesm2022/acorex-components-data-pager.mjs +63 -47
  73. package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
  74. package/fesm2022/acorex-components-data-table.mjs +509 -551
  75. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  76. package/fesm2022/acorex-components-datetime-box.mjs +10 -10
  77. package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
  78. package/fesm2022/acorex-components-datetime-input.mjs +10 -10
  79. package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
  80. package/fesm2022/acorex-components-datetime-picker.mjs +11 -11
  81. package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
  82. package/fesm2022/acorex-components-decorators.mjs +96 -54
  83. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  84. package/fesm2022/acorex-components-dialog.mjs +26 -16
  85. package/fesm2022/acorex-components-dialog.mjs.map +1 -1
  86. package/fesm2022/acorex-components-drawer-legacy.mjs +218 -0
  87. package/fesm2022/acorex-components-drawer-legacy.mjs.map +1 -0
  88. package/fesm2022/acorex-components-drawer.mjs +66 -150
  89. package/fesm2022/acorex-components-drawer.mjs.map +1 -1
  90. package/fesm2022/acorex-components-dropdown-button.mjs +9 -9
  91. package/fesm2022/acorex-components-dropdown-button.mjs.map +1 -1
  92. package/fesm2022/acorex-components-dropdown.mjs +20 -18
  93. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  94. package/fesm2022/acorex-components-editor.mjs +195 -0
  95. package/fesm2022/acorex-components-editor.mjs.map +1 -0
  96. package/fesm2022/acorex-components-file-explorer.mjs +34 -34
  97. package/fesm2022/acorex-components-file-explorer.mjs.map +1 -1
  98. package/fesm2022/acorex-components-flow-chart.mjs +18 -18
  99. package/fesm2022/acorex-components-flow-chart.mjs.map +1 -1
  100. package/fesm2022/acorex-components-form.mjs +62 -37
  101. package/fesm2022/acorex-components-form.mjs.map +1 -1
  102. package/fesm2022/acorex-components-grid-layout-builder.mjs +14 -15
  103. package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
  104. package/fesm2022/acorex-components-image-editor.mjs +206 -156
  105. package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
  106. package/fesm2022/acorex-components-image.mjs +10 -10
  107. package/fesm2022/acorex-components-image.mjs.map +1 -1
  108. package/fesm2022/acorex-components-json-viewer.mjs +9 -9
  109. package/fesm2022/acorex-components-json-viewer.mjs.map +1 -1
  110. package/fesm2022/acorex-components-kanban.mjs +9 -7
  111. package/fesm2022/acorex-components-kanban.mjs.map +1 -1
  112. package/fesm2022/acorex-components-kbd.mjs +29 -11
  113. package/fesm2022/acorex-components-kbd.mjs.map +1 -1
  114. package/fesm2022/acorex-components-label.mjs +9 -9
  115. package/fesm2022/acorex-components-label.mjs.map +1 -1
  116. package/fesm2022/acorex-components-list.mjs +10 -10
  117. package/fesm2022/acorex-components-list.mjs.map +1 -1
  118. package/fesm2022/acorex-components-loading-dialog.mjs +23 -14
  119. package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
  120. package/fesm2022/acorex-components-loading.mjs +23 -23
  121. package/fesm2022/acorex-components-loading.mjs.map +1 -1
  122. package/fesm2022/acorex-components-map.mjs +290 -31
  123. package/fesm2022/acorex-components-map.mjs.map +1 -1
  124. package/fesm2022/acorex-components-media-viewer.mjs +95 -99
  125. package/fesm2022/acorex-components-media-viewer.mjs.map +1 -1
  126. package/fesm2022/acorex-components-menu.mjs +24 -24
  127. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  128. package/fesm2022/{acorex-components-modal-acorex-components-modal-h5Y-qcbh.mjs → acorex-components-modal-acorex-components-modal-WaTo81yi.mjs} +24 -24
  129. package/fesm2022/acorex-components-modal-acorex-components-modal-WaTo81yi.mjs.map +1 -0
  130. package/fesm2022/acorex-components-modal-modal-content.component-D61_wSet.mjs +214 -0
  131. package/fesm2022/acorex-components-modal-modal-content.component-D61_wSet.mjs.map +1 -0
  132. package/fesm2022/acorex-components-modal.mjs +1 -1
  133. package/fesm2022/acorex-components-navbar.mjs +9 -9
  134. package/fesm2022/acorex-components-navbar.mjs.map +1 -1
  135. package/fesm2022/acorex-components-notification.mjs +16 -23
  136. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  137. package/fesm2022/acorex-components-number-box-legacy.mjs +412 -0
  138. package/fesm2022/acorex-components-number-box-legacy.mjs.map +1 -0
  139. package/fesm2022/acorex-components-number-box.mjs +113 -331
  140. package/fesm2022/acorex-components-number-box.mjs.map +1 -1
  141. package/fesm2022/acorex-components-otp.mjs +10 -10
  142. package/fesm2022/acorex-components-otp.mjs.map +1 -1
  143. package/fesm2022/acorex-components-page.mjs +10 -10
  144. package/fesm2022/acorex-components-page.mjs.map +1 -1
  145. package/fesm2022/acorex-components-paint.mjs +35 -40
  146. package/fesm2022/acorex-components-paint.mjs.map +1 -1
  147. package/fesm2022/acorex-components-password-box.mjs +14 -14
  148. package/fesm2022/acorex-components-password-box.mjs.map +1 -1
  149. package/fesm2022/acorex-components-pdf-reader.mjs +9 -9
  150. package/fesm2022/acorex-components-pdf-reader.mjs.map +1 -1
  151. package/fesm2022/acorex-components-phone-box.mjs +47 -10
  152. package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
  153. package/fesm2022/acorex-components-picker.mjs +17 -17
  154. package/fesm2022/acorex-components-picker.mjs.map +1 -1
  155. package/fesm2022/acorex-components-popover.mjs +12 -12
  156. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  157. package/fesm2022/acorex-components-popup.mjs +13 -13
  158. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  159. package/fesm2022/acorex-components-progress-bar.mjs +11 -9
  160. package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
  161. package/fesm2022/acorex-components-qrcode.mjs +8 -8
  162. package/fesm2022/acorex-components-qrcode.mjs.map +1 -1
  163. package/fesm2022/acorex-components-query-builder.mjs +9 -9
  164. package/fesm2022/acorex-components-query-builder.mjs.map +1 -1
  165. package/fesm2022/acorex-components-radio.mjs +7 -7
  166. package/fesm2022/acorex-components-radio.mjs.map +1 -1
  167. package/fesm2022/acorex-components-rail-navigation.mjs +40 -38
  168. package/fesm2022/acorex-components-rail-navigation.mjs.map +1 -1
  169. package/fesm2022/acorex-components-range-slider.mjs +11 -11
  170. package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
  171. package/fesm2022/acorex-components-rate-picker.mjs +20 -35
  172. package/fesm2022/acorex-components-rate-picker.mjs.map +1 -1
  173. package/fesm2022/acorex-components-rest-api-generator.mjs +23 -23
  174. package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
  175. package/fesm2022/acorex-components-result.mjs +8 -8
  176. package/fesm2022/acorex-components-result.mjs.map +1 -1
  177. package/fesm2022/acorex-components-routing-progress.mjs +8 -8
  178. package/fesm2022/acorex-components-routing-progress.mjs.map +1 -1
  179. package/fesm2022/acorex-components-rrule.mjs +111 -16
  180. package/fesm2022/acorex-components-rrule.mjs.map +1 -1
  181. package/fesm2022/acorex-components-scheduler-picker.mjs +2339 -0
  182. package/fesm2022/acorex-components-scheduler-picker.mjs.map +1 -0
  183. package/fesm2022/acorex-components-scheduler.mjs +52 -52
  184. package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
  185. package/fesm2022/acorex-components-scss.mjs +4 -4
  186. package/fesm2022/acorex-components-scss.mjs.map +1 -1
  187. package/fesm2022/acorex-components-search-box.mjs +23 -12
  188. package/fesm2022/acorex-components-search-box.mjs.map +1 -1
  189. package/fesm2022/acorex-components-select-box.mjs +36 -17
  190. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  191. package/fesm2022/acorex-components-selection-list-2.mjs +12 -12
  192. package/fesm2022/acorex-components-selection-list-2.mjs.map +1 -1
  193. package/fesm2022/acorex-components-selection-list.mjs +10 -10
  194. package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
  195. package/fesm2022/acorex-components-side-menu.mjs +31 -38
  196. package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
  197. package/fesm2022/acorex-components-skeleton.mjs +8 -8
  198. package/fesm2022/acorex-components-skeleton.mjs.map +1 -1
  199. package/fesm2022/acorex-components-slider.mjs +11 -11
  200. package/fesm2022/acorex-components-slider.mjs.map +1 -1
  201. package/fesm2022/acorex-components-sliding-item.mjs +17 -17
  202. package/fesm2022/acorex-components-sliding-item.mjs.map +1 -1
  203. package/fesm2022/acorex-components-step-wizard.mjs +16 -16
  204. package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
  205. package/fesm2022/acorex-components-switch.mjs +14 -14
  206. package/fesm2022/acorex-components-switch.mjs.map +1 -1
  207. package/fesm2022/acorex-components-tabs.mjs +28 -20
  208. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  209. package/fesm2022/acorex-components-tag-box.mjs +51 -21
  210. package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
  211. package/fesm2022/acorex-components-tag.mjs +47 -11
  212. package/fesm2022/acorex-components-tag.mjs.map +1 -1
  213. package/fesm2022/acorex-components-text-area.mjs +9 -9
  214. package/fesm2022/acorex-components-text-area.mjs.map +1 -1
  215. package/fesm2022/acorex-components-text-box.mjs +13 -13
  216. package/fesm2022/acorex-components-text-box.mjs.map +1 -1
  217. package/fesm2022/acorex-components-time-duration.mjs +54 -14
  218. package/fesm2022/acorex-components-time-duration.mjs.map +1 -1
  219. package/fesm2022/acorex-components-time-line.mjs +14 -29
  220. package/fesm2022/acorex-components-time-line.mjs.map +1 -1
  221. package/fesm2022/acorex-components-toast.mjs +14 -14
  222. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  223. package/fesm2022/acorex-components-toolbar.mjs +9 -9
  224. package/fesm2022/acorex-components-toolbar.mjs.map +1 -1
  225. package/fesm2022/acorex-components-tooltip.mjs +12 -12
  226. package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
  227. package/fesm2022/acorex-components-tree-view-legacy.mjs +511 -0
  228. package/fesm2022/acorex-components-tree-view-legacy.mjs.map +1 -0
  229. package/fesm2022/acorex-components-tree-view.mjs +2221 -435
  230. package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
  231. package/fesm2022/acorex-components-uploader.mjs +28 -641
  232. package/fesm2022/acorex-components-uploader.mjs.map +1 -1
  233. package/fesm2022/acorex-components-video-player.mjs +8 -8
  234. package/fesm2022/acorex-components-video-player.mjs.map +1 -1
  235. package/fesm2022/acorex-components-wysiwyg.mjs +229 -473
  236. package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
  237. package/fesm2022/acorex-components.mjs.map +1 -1
  238. package/file-explorer/index.d.ts +6 -6
  239. package/form/index.d.ts +3 -3
  240. package/grid-layout-builder/index.d.ts +1 -2
  241. package/image-editor/index.d.ts +11 -13
  242. package/kbd/index.d.ts +13 -7
  243. package/loading/index.d.ts +1 -1
  244. package/map/index.d.ts +28 -1
  245. package/media-viewer/index.d.ts +7 -3
  246. package/notification/index.d.ts +0 -2
  247. package/number-box/README.md +2 -2
  248. package/number-box/index.d.ts +32 -171
  249. package/number-box-legacy/README.md +3 -0
  250. package/number-box-legacy/index.d.ts +191 -0
  251. package/package.json +37 -10
  252. package/paint/index.d.ts +1 -6
  253. package/phone-box/index.d.ts +5 -4
  254. package/rate-picker/index.d.ts +5 -15
  255. package/rrule/index.d.ts +96 -1
  256. package/scheduler-picker/README.md +15 -0
  257. package/scheduler-picker/index.d.ts +1360 -0
  258. package/search-box/index.d.ts +6 -1
  259. package/select-box/index.d.ts +15 -10
  260. package/side-menu/index.d.ts +3 -2
  261. package/tag/index.d.ts +8 -2
  262. package/tag-box/index.d.ts +12 -3
  263. package/time-duration/index.d.ts +19 -3
  264. package/tree-view/index.d.ts +941 -168
  265. package/tree-view-legacy/README.md +3 -0
  266. package/tree-view-legacy/index.d.ts +184 -0
  267. package/uploader/index.d.ts +4 -331
  268. package/wysiwyg/index.d.ts +57 -159
  269. package/drawer-2/README.md +0 -3
  270. package/drawer-2/index.d.ts +0 -62
  271. package/fesm2022/acorex-components-drawer-2.mjs +0 -134
  272. package/fesm2022/acorex-components-drawer-2.mjs.map +0 -1
  273. package/fesm2022/acorex-components-modal-acorex-components-modal-h5Y-qcbh.mjs.map +0 -1
  274. package/fesm2022/acorex-components-modal-modal-content.component-B6tyMLdU.mjs +0 -235
  275. package/fesm2022/acorex-components-modal-modal-content.component-B6tyMLdU.mjs.map +0 -1
  276. package/fesm2022/acorex-components-number-box-2.mjs +0 -183
  277. package/fesm2022/acorex-components-number-box-2.mjs.map +0 -1
  278. package/number-box-2/README.md +0 -3
  279. package/number-box-2/index.d.ts +0 -41
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-components-tree-view.mjs","sources":["../tmp-esm2022/tree-view/lib/tree-view.class.js","../tmp-esm2022/tree-view/lib/tree-view-item.component.js","../tmp-esm2022/tree-view/lib/tree-view.component.js","../tmp-esm2022/tree-view/lib/tree-view.component.module.js","../tmp-esm2022/tree-view/acorex-components-tree-view.js"],"sourcesContent":["import { AXClickEvent } from '@acorex/cdk/common';\nexport class AXTreeItemClickBaseEvent extends AXClickEvent {\n}\nexport class AXTreeViewBase {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy90cmVlLXZpZXcvc3JjL2xpYi90cmVlLXZpZXcuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR2xELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxZQUFZO0NBRXpEO0FBWUQsTUFBTSxPQUFnQixjQUFjO0NBK0JuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ2xpY2tFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNsYXNzIEFYVHJlZUl0ZW1DbGlja0Jhc2VFdmVudCBleHRlbmRzIEFYQ2xpY2tFdmVudCB7XG4gIG5hdGl2ZUVsZW1lbnQ6IGFueTtcbn1cblxuZXhwb3J0IHR5cGUgQVhUcmVlVmlld1NlbGVjdGlvbkJlaGF2aW9yID0gJ2F1dG9FeHBhbmQnIHwgJ2Nhc2NhZGUnIHwgJ2luZGV0ZXJtaW5hdGUnO1xuXG5leHBvcnQgdHlwZSBBWFRyZWVWaWV3RXhwYW5kQmVoYXZpb3IgPSAnY2xpY2snIHwgJ2RiQ2xpY2snIHwgJ2RlZnVsdCc7XG5cbmV4cG9ydCB0eXBlIEFYVHJlZVZpZXdPcGVyYXRpb25NZXRob2QgPSAnZXhwYW5kJyB8ICdhY3RpdmUnIHwgJ3Zpc2libGUnIHwgJ2Rpc2FibGVkJztcblxuZXhwb3J0IHR5cGUgQVhUcmVlVmlld0xvb2sgPSAnd2l0aC1saW5lJyB8ICdkZWZ1bHQnO1xuXG5leHBvcnQgdHlwZSBBWFRyZWVWaWV3U2VsZWN0aW9uU2NvcGUgPSAnYWxsJyB8ICdwYXJlbnQnIHwgJ2NoaWxkcmVuJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYVHJlZVZpZXdCYXNlIHtcbiAgYWJzdHJhY3QgZ2V0Q2hpbGRyZW4oaXRlbTogdW5rbm93bik6IHVua25vd25bXTtcblxuICBhYnN0cmFjdCBoYXNDaGlsZHJlbihpdGVtOiB1bmtub3duKTogYm9vbGVhbjtcblxuICBhYnN0cmFjdCBpdGVtVGVtcGxhdGU6IGFueTtcblxuICAvLyBGaWVsZCBhY2Nlc3NvcnNcbiAgYWJzdHJhY3QgZGlzYWJsZUZpZWxkKCk6IHN0cmluZztcbiAgYWJzdHJhY3QgY2hpbGRyZW5GaWVsZCgpOiBzdHJpbmc7XG4gIGFic3RyYWN0IHZhbHVlRmllbGQoKTogc3RyaW5nO1xuICBhYnN0cmFjdCBhY3RpdmVGaWVsZCgpOiBzdHJpbmc7XG4gIGFic3RyYWN0IGhhc0NoaWxkRmllbGQoKTogc3RyaW5nO1xuICBhYnN0cmFjdCB0b29sdGlwRmllbGQoKTogc3RyaW5nO1xuICBhYnN0cmFjdCBzaG93RW1wdHlOb2RlTWFzc2FnZSgpOiBib29sZWFuO1xuICAvLyBCZWhhdmlvciBtZXRob2RzXG4gIGFic3RyYWN0IGV4cGFuZE9uKCk6IEFYVHJlZVZpZXdFeHBhbmRCZWhhdmlvcjtcbiAgYWJzdHJhY3QgZm9jdXNOb2RlRW5hYmxlZCgpOiBib29sZWFuO1xuICBhYnN0cmFjdCB0b2dnbGVJY29ucygpOiB7IGV4cGFuZGVkOiBzdHJpbmc7IGNvbGxhcHNlZDogc3RyaW5nIH0gfCBudWxsO1xuXG4gIC8vIERhdGEgbWFuYWdlbWVudFxuICBhYnN0cmFjdCBpdGVtc1Byb21pc2U6IGJvb2xlYW47XG4gIGFic3RyYWN0IGl0ZW1zU2lnbmFsKCk6IHVua25vd25bXTtcbiAgYWJzdHJhY3QgZmV0Y2hEYXRhKGl0ZW06IHVua25vd24pOiB2b2lkO1xuICBhYnN0cmFjdCBzZXROb2RlTG9hZGluZyh2YWx1ZTogdW5rbm93biwgbG9hZGluZzogYm9vbGVhbik6IHZvaWQ7XG4gIGFic3RyYWN0IGhhbmRsZVVuQWN0aXZlTm9kZShpdGVtczogdW5rbm93bltdKTogdm9pZDtcblxuICAvLyBFdmVudCBlbWl0dGVyc1xuICBhYnN0cmFjdCBvbkNvbGxhcHNlZENoYW5nZWQ6IEV2ZW50RW1pdHRlcjx7IGNvbXBvbmVudDogYW55OyBkYXRhOiB1bmtub3duOyBuYXRpdmVFbGVtZW50OiBhbnkgfT47XG4gIGFic3RyYWN0IG9uTm9kZUNsaWNrOiBFdmVudEVtaXR0ZXI8eyBjb21wb25lbnQ6IGFueTsgZGF0YTogdW5rbm93bjsgbmF0aXZlRWxlbWVudDogYW55IH0+O1xuICBhYnN0cmFjdCBvbk5vZGVkYkNsaWNrOiBFdmVudEVtaXR0ZXI8eyBjb21wb25lbnQ6IGFueTsgZGF0YTogdW5rbm93bjsgbmF0aXZlRWxlbWVudDogYW55IH0+O1xufVxuIl19","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXLoadingComponent } from '@acorex/components/loading';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport { AsyncPipe, CommonModule, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, model, ViewEncapsulation } from '@angular/core';\nimport { AXTreeViewBase } from './tree-view.class';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nexport class AXTreeViewItemComponent extends NXComponent {\n constructor() {\n super();\n this.treeView = inject(AXTreeViewBase);\n this.item = input(...(ngDevMode ? [undefined, { debugName: \"item\" }] : []));\n this.isExpanded = model(false, ...(ngDevMode ? [{ debugName: \"isExpanded\" }] : []));\n this.isActive = model(false, ...(ngDevMode ? [{ debugName: \"isActive\" }] : []));\n this.isLoading = input(false, ...(ngDevMode ? [{ debugName: \"isLoading\" }] : []));\n this.executorChanges = input(...(ngDevMode ? [undefined, { debugName: \"executorChanges\" }] : []));\n this.platformService = inject(AXPlatform);\n this.arrowIcon = computed(() => {\n const baseClasses = 'ax-tree-view-arrow ax-icon ax-icon-solid';\n const toggleIcons = this.treeView.toggleIcons();\n if (toggleIcons) {\n return this.isExpanded() ? `${baseClasses} ${toggleIcons.expanded}` : `${baseClasses} ${toggleIcons.collapsed}`;\n }\n if (this.isExpanded()) {\n return `${baseClasses} ax-icon-chevron-down`;\n }\n return this.platformService.isRtl()\n ? `${baseClasses} ax-icon-chevron-left`\n : `${baseClasses} ax-icon-chevron-right`;\n }, ...(ngDevMode ? [{ debugName: \"arrowIcon\" }] : []));\n }\n handleArrowNodeClick() {\n if (this.item()[this.treeView.disableField()] || this.isLoading() || this.treeView.expandOn() === 'dbClick') {\n return;\n }\n this.isExpanded.set(!this.isExpanded());\n if (this.treeView.itemsPromise && this.isExpanded() && !this.item()[this.treeView.childrenField()]?.length) {\n this.treeView.fetchData(this.item());\n this.treeView.setNodeLoading(this.item()[this.treeView.valueField()], true);\n }\n this.treeView.onCollapsedChanged.emit({ component: this, data: this.item(), nativeElement: this.nativeElement });\n }\n handleTextClick() {\n if (this.item()[this.treeView.disableField()]) {\n return;\n }\n if (this.treeView.focusNodeEnabled()) {\n this.treeView.handleUnActiveNode(this.treeView.itemsSignal());\n this.item()[this.treeView.activeField()] = true;\n }\n this.treeView.onNodeClick.emit({ component: this, data: this.item(), nativeElement: this.nativeElement });\n }\n handleTextDbClick() {\n if (this.item()[this.treeView.disableField()] || this.treeView.expandOn() === 'click') {\n return;\n }\n if (this.item()?.[this.treeView.childrenField()] || this.item()[this.treeView.hasChildField()]) {\n this.isExpanded.set(!this.isExpanded());\n if (this.treeView.itemsPromise && this.isExpanded()) {\n this.treeView.fetchData(this.item());\n this.treeView.setNodeLoading(this.item()[this.treeView.valueField()], true);\n }\n }\n this.treeView.onNodedbClick.emit({ component: this, data: this.item(), nativeElement: this.nativeElement });\n this.treeView.onCollapsedChanged.emit({ component: this, data: this.item(), nativeElement: this.nativeElement });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTreeViewItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.3\", type: AXTreeViewItemComponent, isStandalone: true, selector: \"ax-tree-view-item\", inputs: { item: { classPropertyName: \"item\", publicName: \"item\", isSignal: true, isRequired: false, transformFunction: null }, isExpanded: { classPropertyName: \"isExpanded\", publicName: \"isExpanded\", isSignal: true, isRequired: false, transformFunction: null }, isActive: { classPropertyName: \"isActive\", publicName: \"isActive\", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: \"isLoading\", publicName: \"isLoading\", isSignal: true, isRequired: false, transformFunction: null }, executorChanges: { classPropertyName: \"executorChanges\", publicName: \"executorChanges\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isExpanded: \"isExpandedChange\", isActive: \"isActiveChange\" }, providers: [{ provide: AXComponent, useExisting: AXTreeViewItemComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-tree-view-container\\\">\\n @if (\\n (treeView.showEmptyNodeMassage() && item().hasOwnProperty(treeView.childrenField())) ||\\n (item()[this.treeView.childrenField()]?.length && !isLoading()) ||\\n (item()[treeView.hasChildField()] && !isLoading())\\n ) {\\n <div class=\\\"ax-tree-view-icon-container\\\" (click)=\\\"handleArrowNodeClick()\\\">\\n <i [class.ax-state-disabled]=\\\"item()[treeView.disableField()]\\\" class=\\\"{{ arrowIcon() }}\\\"></i>\\n </div>\\n } @else if (isLoading()) {\\n <ax-loading></ax-loading>\\n }\\n\\n <div class=\\\"ax-tree-view-items\\\">\\n <ng-content select=\\\"ax-check-box\\\"></ng-content>\\n <div\\n [class.ax-state-disabled]=\\\"item()[treeView.disableField()]\\\"\\n [axTooltip]=\\\"item()[treeView.tooltipField()]\\\"\\n axTooltipPlacement=\\\"end-bottom\\\"\\n (click)=\\\"handleTextClick()\\\"\\n (dblclick)=\\\"handleTextDbClick()\\\"\\n class=\\\"ax-tree-view-items-prefix ax-noselect-tree-view\\\"\\n [class.ax-state-tree-view-active]=\\\"item()[treeView.activeField()]\\\"\\n >\\n @if (treeView.itemTemplate) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"treeView.itemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: item() }\\\"\\n ></ng-container>\\n } @else {\\n <ng-content select=\\\"ax-prefix\\\"></ng-content>\\n <ng-content select=\\\"ax-text\\\"></ng-content>\\n <ng-content select=\\\"ax-suffix\\\"></ng-content>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div\\n class=\\\"ax-tree-view-child\\\"\\n [class.ax-tree-view-empty-child]=\\\"\\n treeView.showEmptyNodeMassage() &&\\n item().hasOwnProperty(treeView.childrenField()) &&\\n !item()[treeView.childrenField()]?.length\\n \\\"\\n [@collapseExpand]=\\\"isExpanded() ? 'expanded' : 'collapsed'\\\"\\n>\\n @if (\\n treeView.showEmptyNodeMassage() &&\\n item().hasOwnProperty(treeView.childrenField()) &&\\n !item()[treeView.childrenField()]?.length\\n ) {\\n <ng-container [ngTemplateOutlet]=\\\"empty\\\"></ng-container>\\n } @else {\\n <ng-content></ng-content>\\n }\\n</div>\\n\\n<ng-template #empty>\\n {{ '@acorex:common.general.no-result-found' | translate | async }}\\n</ng-template>\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: AXLoadingComponent, selector: \"ax-loading\", inputs: [\"visible\", \"type\", \"context\"], outputs: [\"visibleChange\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltipDisabled\", \"axTooltip\", \"axTooltipContext\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"pipe\", type: i1.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }], animations: [\n trigger('collapseExpand', [\n state('collapsed', style({\n height: '0',\n overflow: 'hidden',\n opacity: 0,\n })),\n state('expanded', style({\n height: '*',\n overflow: 'hidden',\n opacity: 1,\n })),\n transition('collapsed <=> expanded', [animate('300ms ease-in-out')]),\n ]),\n ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTreeViewItemComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-tree-view-item', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [\n trigger('collapseExpand', [\n state('collapsed', style({\n height: '0',\n overflow: 'hidden',\n opacity: 0,\n })),\n state('expanded', style({\n height: '*',\n overflow: 'hidden',\n opacity: 1,\n })),\n transition('collapsed <=> expanded', [animate('300ms ease-in-out')]),\n ]),\n ], imports: [CommonModule, AXLoadingComponent, AXTooltipDirective, NgTemplateOutlet, AXTranslatorPipe, AsyncPipe], providers: [{ provide: AXComponent, useExisting: AXTreeViewItemComponent }], template: \"<div class=\\\"ax-tree-view-container\\\">\\n @if (\\n (treeView.showEmptyNodeMassage() && item().hasOwnProperty(treeView.childrenField())) ||\\n (item()[this.treeView.childrenField()]?.length && !isLoading()) ||\\n (item()[treeView.hasChildField()] && !isLoading())\\n ) {\\n <div class=\\\"ax-tree-view-icon-container\\\" (click)=\\\"handleArrowNodeClick()\\\">\\n <i [class.ax-state-disabled]=\\\"item()[treeView.disableField()]\\\" class=\\\"{{ arrowIcon() }}\\\"></i>\\n </div>\\n } @else if (isLoading()) {\\n <ax-loading></ax-loading>\\n }\\n\\n <div class=\\\"ax-tree-view-items\\\">\\n <ng-content select=\\\"ax-check-box\\\"></ng-content>\\n <div\\n [class.ax-state-disabled]=\\\"item()[treeView.disableField()]\\\"\\n [axTooltip]=\\\"item()[treeView.tooltipField()]\\\"\\n axTooltipPlacement=\\\"end-bottom\\\"\\n (click)=\\\"handleTextClick()\\\"\\n (dblclick)=\\\"handleTextDbClick()\\\"\\n class=\\\"ax-tree-view-items-prefix ax-noselect-tree-view\\\"\\n [class.ax-state-tree-view-active]=\\\"item()[treeView.activeField()]\\\"\\n >\\n @if (treeView.itemTemplate) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"treeView.itemTemplate\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: item() }\\\"\\n ></ng-container>\\n } @else {\\n <ng-content select=\\\"ax-prefix\\\"></ng-content>\\n <ng-content select=\\\"ax-text\\\"></ng-content>\\n <ng-content select=\\\"ax-suffix\\\"></ng-content>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div\\n class=\\\"ax-tree-view-child\\\"\\n [class.ax-tree-view-empty-child]=\\\"\\n treeView.showEmptyNodeMassage() &&\\n item().hasOwnProperty(treeView.childrenField()) &&\\n !item()[treeView.childrenField()]?.length\\n \\\"\\n [@collapseExpand]=\\\"isExpanded() ? 'expanded' : 'collapsed'\\\"\\n>\\n @if (\\n treeView.showEmptyNodeMassage() &&\\n item().hasOwnProperty(treeView.childrenField()) &&\\n !item()[treeView.childrenField()]?.length\\n ) {\\n <ng-container [ngTemplateOutlet]=\\\"empty\\\"></ng-container>\\n } @else {\\n <ng-content></ng-content>\\n }\\n</div>\\n\\n<ng-template #empty>\\n {{ '@acorex:common.general.no-result-found' | translate | async }}\\n</ng-template>\\n\" }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy90cmVlLXZpZXcvc3JjL2xpYi90cmVlLXZpZXctaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3RyZWUtdmlldy9zcmMvbGliL3RyZWUtdmlldy1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsY0FBYyxFQUE2QixNQUFNLG1CQUFtQixDQUFDOzs7QUErQjlFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxXQUFXO0lBQ3REO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFHVixhQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxD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LEVBQUU7NEJBQ3hCLEtBQUssQ0FDSCxXQUFXLEVBQ1gsS0FBSyxDQUFDO2dDQUNKLE1BQU0sRUFBRSxHQUFHO2dDQUNYLFFBQVEsRUFBRSxRQUFRO2dDQUNsQixPQUFPLEVBQUUsQ0FBQzs2QkFDWCxDQUFDLENBQ0g7NEJBQ0QsS0FBSyxDQUNILFVBQVUsRUFDVixLQUFLLENBQUM7Z0NBQ0osTUFBTSxFQUFFLEdBQUc7Z0NBQ1gsUUFBUSxFQUFFLFFBQVE7Z0NBQ2xCLE9BQU8sRUFBRSxDQUFDOzZCQUNYLENBQUMsQ0FDSDs0QkFDRCxVQUFVLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO3lCQUNyRSxDQUFDO3FCQUNILFdBQ1EsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLGFBQ25HLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcseUJBQXlCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29tcG9uZW50LCBOWENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWExvYWRpbmdDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbG9hZGluZyc7XG5pbXBvcnQgeyBBWFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBBWFBsYXRmb3JtIH0gZnJvbSAnQGFjb3JleC9jb3JlL3BsYXRmb3JtJztcbmltcG9ydCB7IEFYVHJhbnNsYXRvclBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIENvbW1vbk1vZHVsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFRyZWVWaWV3QmFzZSwgQVhUcmVlVmlld09wZXJhdGlvbk1ldGhvZCB9IGZyb20gJy4vdHJlZS12aWV3LmNsYXNzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtdHJlZS12aWV3LWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJ3RyZWUtdmlldy1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdjb2xsYXBzZUV4cGFuZCcsIFtcbiAgICAgIHN0YXRlKFxuICAgICAgICAnY29sbGFwc2VkJyxcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIGhlaWdodDogJzAnLFxuICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ2V4cGFuZGVkJyxcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIGhlaWdodDogJyonLFxuICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICB0cmFuc2l0aW9uKCdjb2xsYXBzZWQgPD0+IGV4cGFuZGVkJywgW2FuaW1hdGUoJzMwMG1zIGVhc2UtaW4tb3V0JyldKSxcbiAgICBdKSxcbiAgXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQVhMb2FkaW5nQ29tcG9uZW50LCBBWFRvb2x0aXBEaXJlY3RpdmUsIE5nVGVtcGxhdGVPdXRsZXQsIEFYVHJhbnNsYXRvclBpcGUsIEFzeW5jUGlwZV0sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFRyZWVWaWV3SXRlbUNvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhUcmVlVmlld0l0ZW1Db21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICB0cmVlVmlldyA9IGluamVjdChBWFRyZWVWaWV3QmFzZSk7XG5cbiAgaXRlbSA9IGlucHV0PHVua25vd24+KCk7XG5cbiAgaXNFeHBhbmRlZCA9IG1vZGVsPGJvb2xlYW4+KGZhbHNlKTtcblxuICBpc0FjdGl2ZSA9IG1vZGVsPGJvb2xlYW4+KGZhbHNlKTtcblxuICBpc0xvYWRpbmcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgZXhlY3V0b3JDaGFuZ2VzID0gaW5wdXQ8QVhUcmVlVmlld09wZXJhdGlvbk1ldGhvZD4oKTtcblxuICBwcm90ZWN0ZWQgcGxhdGZvcm1TZXJ2aWNlID0gaW5qZWN0KEFYUGxhdGZvcm0pO1xuXG4gIHByb3RlY3RlZCBhcnJvd0ljb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFzZUNsYXNzZXMgPSAnYXgtdHJlZS12aWV3LWFycm93IGF4LWljb24gYXgtaWNvbi1zb2xpZCc7XG4gICAgY29uc3QgdG9nZ2xlSWNvbnMgPSB0aGlzLnRyZWVWaWV3LnRvZ2dsZUljb25zKCk7XG5cbiAgICBpZiAodG9nZ2xlSWNvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzRXhwYW5kZWQoKSA/IGAke2Jhc2VDbGFzc2VzfSAke3RvZ2dsZUljb25zLmV4cGFuZGVkfWAgOiBgJHtiYXNlQ2xhc3Nlc30gJHt0b2dnbGVJY29ucy5jb2xsYXBzZWR9YDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0V4cGFuZGVkKCkpIHtcbiAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3Nlc30gYXgtaWNvbi1jaGV2cm9uLWRvd25gO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXRmb3JtU2VydmljZS5pc1J0bCgpXG4gICAgICA/IGAke2Jhc2VDbGFzc2VzfSBheC1pY29uLWNoZXZyb24tbGVmdGBcbiAgICAgIDogYCR7YmFzZUNsYXNzZXN9IGF4LWljb24tY2hldnJvbi1yaWdodGA7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBoYW5kbGVBcnJvd05vZGVDbGljaygpIHtcbiAgICBpZiAodGhpcy5pdGVtKClbdGhpcy50cmVlVmlldy5kaXNhYmxlRmllbGQoKV0gfHwgdGhpcy5pc0xvYWRpbmcoKSB8fCB0aGlzLnRyZWVWaWV3LmV4cGFuZE9uKCkgPT09ICdkYkNsaWNrJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNFeHBhbmRlZC5zZXQoIXRoaXMuaXNFeHBhbmRlZCgpKTtcblxuICAgIGlmICh0aGlzLnRyZWVWaWV3Lml0ZW1zUHJvbWlzZSAmJiB0aGlzLmlzRXhwYW5kZWQoKSAmJiAhdGhpcy5pdGVtKClbdGhpcy50cmVlVmlldy5jaGlsZHJlbkZpZWxkKCldPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudHJlZVZpZXcuZmV0Y2hEYXRhKHRoaXMuaXRlbSgpKTtcbiAgICAgIHRoaXMudHJlZVZpZXcuc2V0Tm9kZUxvYWRpbmcodGhpcy5pdGVtKClbdGhpcy50cmVlVmlldy52YWx1ZUZpZWxkKCldLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyZWVWaWV3Lm9uQ29sbGFwc2VkQ2hhbmdlZC5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBkYXRhOiB0aGlzLml0ZW0oKSwgbmF0aXZlRWxlbWVudDogdGhpcy5uYXRpdmVFbGVtZW50IH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVRleHRDbGljaygpIHtcbiAgICBpZiAodGhpcy5pdGVtKClbdGhpcy50cmVlVmlldy5kaXNhYmxlRmllbGQoKV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMudHJlZVZpZXcuZm9jdXNOb2RlRW5hYmxlZCgpKSB7XG4gICAgICB0aGlzLnRyZWVWaWV3LmhhbmRsZVVuQWN0aXZlTm9kZSh0aGlzLnRyZWVWaWV3Lml0ZW1zU2lnbmFsKCkpO1xuICAgICAgdGhpcy5pdGVtKClbdGhpcy50cmVlVmlldy5hY3RpdmVGaWVsZCgpXSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMudHJlZVZpZXcub25Ob2RlQ2xpY2suZW1pdCh7IGNvbXBvbmVudDogdGhpcywgZGF0YTogdGhpcy5pdGVtKCksIG5hdGl2ZUVsZW1lbnQ6IHRoaXMubmF0aXZlRWxlbWVudCB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVUZXh0RGJDbGljaygpIHtcbiAgICBpZiAodGhpcy5pdGVtKClbdGhpcy50cmVlVmlldy5kaXNhYmxlRmllbGQoKV0gfHwgdGhpcy50cmVlVmlldy5leHBhbmRPbigpID09PSAnY2xpY2snKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLml0ZW0oKT8uW3RoaXMudHJlZVZpZXcuY2hpbGRyZW5GaWVsZCgpXSB8fCB0aGlzLml0ZW0oKVt0aGlzLnRyZWVWaWV3Lmhhc0NoaWxkRmllbGQoKV0pIHtcbiAgICAgIHRoaXMuaXNFeHBhbmRlZC5zZXQoIXRoaXMuaXNFeHBhbmRlZCgpKTtcblxuICAgICAgaWYgKHRoaXMudHJlZVZpZXcuaXRlbXNQcm9taXNlICYmIHRoaXMuaXNFeHBhbmRlZCgpKSB7XG4gICAgICAgIHRoaXMudHJlZVZpZXcuZmV0Y2hEYXRhKHRoaXMuaXRlbSgpKTtcbiAgICAgICAgdGhpcy50cmVlVmlldy5zZXROb2RlTG9hZGluZyh0aGlzLml0ZW0oKVt0aGlzLnRyZWVWaWV3LnZhbHVlRmllbGQoKV0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudHJlZVZpZXcub25Ob2RlZGJDbGljay5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBkYXRhOiB0aGlzLml0ZW0oKSwgbmF0aXZlRWxlbWVudDogdGhpcy5uYXRpdmVFbGVtZW50IH0pO1xuXG4gICAgdGhpcy50cmVlVmlldy5vbkNvbGxhcHNlZENoYW5nZWQuZW1pdCh7IGNvbXBvbmVudDogdGhpcywgZGF0YTogdGhpcy5pdGVtKCksIG5hdGl2ZUVsZW1lbnQ6IHRoaXMubmF0aXZlRWxlbWVudCB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXRyZWUtdmlldy1jb250YWluZXJcIj5cbiAgQGlmIChcbiAgICAodHJlZVZpZXcuc2hvd0VtcHR5Tm9kZU1hc3NhZ2UoKSAmJiBpdGVtKCkuaGFzT3duUHJvcGVydHkodHJlZVZpZXcuY2hpbGRyZW5GaWVsZCgpKSkgfHxcbiAgICAoaXRlbSgpW3RoaXMudHJlZVZpZXcuY2hpbGRyZW5GaWVsZCgpXT8ubGVuZ3RoICYmICFpc0xvYWRpbmcoKSkgfHxcbiAgICAoaXRlbSgpW3RyZWVWaWV3Lmhhc0NoaWxkRmllbGQoKV0gJiYgIWlzTG9hZGluZygpKVxuICApIHtcbiAgICA8ZGl2IGNsYXNzPVwiYXgtdHJlZS12aWV3LWljb24tY29udGFpbmVyXCIgKGNsaWNrKT1cImhhbmRsZUFycm93Tm9kZUNsaWNrKClcIj5cbiAgICAgIDxpIFtjbGFzcy5heC1zdGF0ZS1kaXNhYmxlZF09XCJpdGVtKClbdHJlZVZpZXcuZGlzYWJsZUZpZWxkKCldXCIgY2xhc3M9XCJ7eyBhcnJvd0ljb24oKSB9fVwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgfSBAZWxzZSBpZiAoaXNMb2FkaW5nKCkpIHtcbiAgICA8YXgtbG9hZGluZz48L2F4LWxvYWRpbmc+XG4gIH1cblxuICA8ZGl2IGNsYXNzPVwiYXgtdHJlZS12aWV3LWl0ZW1zXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtY2hlY2stYm94XCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXZcbiAgICAgIFtjbGFzcy5heC1zdGF0ZS1kaXNhYmxlZF09XCJpdGVtKClbdHJlZVZpZXcuZGlzYWJsZUZpZWxkKCldXCJcbiAgICAgIFtheFRvb2x0aXBdPVwiaXRlbSgpW3RyZWVWaWV3LnRvb2x0aXBGaWVsZCgpXVwiXG4gICAgICBheFRvb2x0aXBQbGFjZW1lbnQ9XCJlbmQtYm90dG9tXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVUZXh0Q2xpY2soKVwiXG4gICAgICAoZGJsY2xpY2spPVwiaGFuZGxlVGV4dERiQ2xpY2soKVwiXG4gICAgICBjbGFzcz1cImF4LXRyZWUtdmlldy1pdGVtcy1wcmVmaXggYXgtbm9zZWxlY3QtdHJlZS12aWV3XCJcbiAgICAgIFtjbGFzcy5heC1zdGF0ZS10cmVlLXZpZXctYWN0aXZlXT1cIml0ZW0oKVt0cmVlVmlldy5hY3RpdmVGaWVsZCgpXVwiXG4gICAgPlxuICAgICAgQGlmICh0cmVlVmlldy5pdGVtVGVtcGxhdGUpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyZWVWaWV3Lml0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtKCkgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJheC1wcmVmaXhcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImF4LXRleHRcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImF4LXN1ZmZpeFwiPjwvbmctY29udGVudD5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdlxuICBjbGFzcz1cImF4LXRyZWUtdmlldy1jaGlsZFwiXG4gIFtjbGFzcy5heC10cmVlLXZpZXctZW1wdHktY2hpbGRdPVwiXG4gICAgdHJlZVZpZXcuc2hvd0VtcHR5Tm9kZU1hc3NhZ2UoKSAmJlxuICAgIGl0ZW0oKS5oYXNPd25Qcm9wZXJ0eSh0cmVlVmlldy5jaGlsZHJlbkZpZWxkKCkpICYmXG4gICAgIWl0ZW0oKVt0cmVlVmlldy5jaGlsZHJlbkZpZWxkKCldPy5sZW5ndGhcbiAgXCJcbiAgW0Bjb2xsYXBzZUV4cGFuZF09XCJpc0V4cGFuZGVkKCkgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIlxuPlxuICBAaWYgKFxuICAgIHRyZWVWaWV3LnNob3dFbXB0eU5vZGVNYXNzYWdlKCkgJiZcbiAgICBpdGVtKCkuaGFzT3duUHJvcGVydHkodHJlZVZpZXcuY2hpbGRyZW5GaWVsZCgpKSAmJlxuICAgICFpdGVtKClbdHJlZVZpZXcuY2hpbGRyZW5GaWVsZCgpXT8ubGVuZ3RoXG4gICkge1xuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZW1wdHlcIj48L25nLWNvbnRhaW5lcj5cbiAgfSBAZWxzZSB7XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICB9XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAge3sgJ0BhY29yZXg6Y29tbW9uLmdlbmVyYWwubm8tcmVzdWx0LWZvdW5kJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG48L25nLXRlbXBsYXRlPlxuIl19","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXCheckBoxComponent } from '@acorex/components/check-box';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, HostBinding, inject, Input, input, output, signal, TemplateRef, ViewEncapsulation, } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXTreeViewItemComponent } from './tree-view-item.component';\nimport { AXTreeViewBase, } from './tree-view.class';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nexport class AXTreeViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.itemsSignal = signal([], ...(ngDevMode ? [{ debugName: \"itemsSignal\" }] : []));\n this.items = input(...(ngDevMode ? [undefined, { debugName: \"items\" }] : []));\n this.showCheckbox = input(true, ...(ngDevMode ? [{ debugName: \"showCheckbox\" }] : []));\n this.hasCheckboxField = input('hasCheckbox', ...(ngDevMode ? [{ debugName: \"hasCheckboxField\" }] : []));\n this.selectionMode = input('single', ...(ngDevMode ? [{ debugName: \"selectionMode\" }] : []));\n this.selectionBehavior = input(...(ngDevMode ? [undefined, { debugName: \"selectionBehavior\" }] : []));\n this.selectionScope = input('all', ...(ngDevMode ? [{ debugName: \"selectionScope\" }] : []));\n this.focusNodeEnabled = input(true, ...(ngDevMode ? [{ debugName: \"focusNodeEnabled\" }] : []));\n this.valueField = input('id', ...(ngDevMode ? [{ debugName: \"valueField\" }] : []));\n this.textField = input('text', ...(ngDevMode ? [{ debugName: \"textField\" }] : []));\n this.visibleField = input('visible', ...(ngDevMode ? [{ debugName: \"visibleField\" }] : []));\n this.disableField = input('disabled', ...(ngDevMode ? [{ debugName: \"disableField\" }] : []));\n this.hasChildField = input('hasChild', ...(ngDevMode ? [{ debugName: \"hasChildField\" }] : []));\n this.selectedField = input('selected', ...(ngDevMode ? [{ debugName: \"selectedField\" }] : []));\n this.expandedField = input('expanded', ...(ngDevMode ? [{ debugName: \"expandedField\" }] : []));\n this.tooltipField = input('tooltip', ...(ngDevMode ? [{ debugName: \"tooltipField\" }] : []));\n this.childrenField = input('children', ...(ngDevMode ? [{ debugName: \"childrenField\" }] : []));\n this.activeField = input('active', ...(ngDevMode ? [{ debugName: \"activeField\" }] : []));\n this.indeterminateField = input('indeterminate', ...(ngDevMode ? [{ debugName: \"indeterminateField\" }] : []));\n this.parentField = input('parentId', ...(ngDevMode ? [{ debugName: \"parentField\" }] : []));\n this.iconField = input('icon', ...(ngDevMode ? [{ debugName: \"iconField\" }] : []));\n this.toggleIcons = input(...(ngDevMode ? [undefined, { debugName: \"toggleIcons\" }] : []));\n this.look = input('defult', ...(ngDevMode ? [{ debugName: \"look\" }] : []));\n this.showEmptyNodeMassage = input(false, ...(ngDevMode ? [{ debugName: \"showEmptyNodeMassage\" }] : []));\n this.onSelectionChanged = output();\n this.onItemSelectedChanged = output();\n this.onNodeClick = output();\n this.onCollapsedChanged = output();\n this.onNodedbClick = output();\n this.executorChanges = signal(null, ...(ngDevMode ? [{ debugName: \"executorChanges\" }] : []));\n this.platformService = inject(AXPlatform);\n this.#effect = effect(() => {\n const itemsInput = this.items();\n if (typeof itemsInput === 'function') {\n const result = itemsInput();\n if (result instanceof Promise) {\n this.itemsPromise = (options) => itemsInput(options);\n this.fetchData();\n }\n else {\n this.itemsSignal.set(result);\n this.itemsPromise = null;\n }\n }\n else {\n this.itemsSignal.set(itemsInput);\n this.itemsPromise = null;\n }\n }, ...(ngDevMode ? [{ debugName: \"#effect\" }] : []));\n this.expandOn = input('defult', ...(ngDevMode ? [{ debugName: \"expandOn\" }] : []));\n this.loadingState = signal({}, ...(ngDevMode ? [{ debugName: \"loadingState\" }] : []));\n }\n /** @ignore */\n get __hostClass() {\n return [`ax-look-${this.look()}`];\n }\n get resolvedItems() {\n return this.itemsSignal();\n }\n #effect;\n handleNodeSelectionClick(event, item) {\n if (item[this.disableField()] || this.isNodeLoading(item[this.valueField()])) {\n return;\n }\n if (this.selectionMode() === 'single' && event.isUserInteraction) {\n this.handleUnSelectNode(this.itemsSignal());\n }\n if (event.isUserInteraction) {\n item[this.selectedField()] = event.value;\n if (event.value !== null) {\n switch (this.selectionBehavior()) {\n case 'autoExpand':\n if (event.value) {\n if (this.itemsPromise && item[this.hasChildField()] && !item?.[this.childrenField()]?.length) {\n this.setNodeLoading(item[this.valueField()], true);\n this.fetchData(item);\n }\n this.toggleExpand(item);\n }\n break;\n case 'cascade':\n this.expandAndToggleSelection(item, event.value);\n break;\n case 'indeterminate':\n if (item?.[this.childrenField()]?.length) {\n this.applySelectionToChildren(item, event.value, item[this.valueField()]);\n }\n this.updateParentSelection(item, event.value);\n break;\n default:\n break;\n }\n }\n this.onItemSelectedChanged.emit({\n component: this,\n data: item,\n nativeElement: this.nativeElement,\n });\n const result = this.findSelectedNodes(this.itemsSignal());\n this.onSelectionChanged.emit({\n component: this,\n data: result,\n nativeElement: this.nativeElement,\n });\n }\n }\n /**\n *\n * auto expand\n *\n */\n toggleExpand(item) {\n if (!item[this.expandedField()]) {\n item[this.expandedField()] = true;\n }\n }\n /**\n *\n * expand and change value parent change\n *\n */\n async expandAndToggleSelection(item, selected) {\n if (this.itemsPromise && item[this.hasChildField()] && !item?.[this.childrenField()]?.length) {\n await this.setNodeLoading(item[this.valueField()], true);\n await this.fetchData(item);\n }\n this.toggleExpand(item);\n if (item[this.childrenField()]?.length) {\n this.applySelectionToChildren(item, selected, item[this.valueField()]);\n }\n }\n applySelectionToChildren(item, isSelected, parentId) {\n item[this.childrenField()].forEach(async (child) => {\n if (this.itemsPromise &&\n child[this.hasChildField()] &&\n !child?.[this.childrenField()]?.length &&\n this.selectionBehavior() === 'cascade') {\n await this.setNodeLoading(child[this.valueField()], true);\n await this.fetchData(child);\n this.toggleExpand(child);\n }\n child[this.parentField()] = parentId;\n child[this.selectedField()] = isSelected;\n if (child[this.childrenField()]?.length) {\n this.applySelectionToChildren(child, isSelected, child[this.valueField()]);\n }\n });\n }\n /**\n *\n * indeterminate logic\n *\n */\n updateParentSelection(item, selected) {\n item[this.selectedField()] = selected;\n let parent = this.findParent(item, this.itemsSignal());\n while ((parent && parent[this.selectedField()] != false) || (parent && item[this.selectedField()])) {\n const allSelected = parent?.[this.childrenField()]?.every((child) => child[this.selectedField()]);\n const someSelected = parent?.[this.childrenField()]?.some((child) => child[this.selectedField()] || child[this.indeterminateField()]);\n if (!allSelected && !someSelected) {\n parent[this.selectedField()] = false;\n parent[this.indeterminateField()] = null;\n }\n else if (!allSelected) {\n parent[this.indeterminateField()] = true;\n parent[this.selectedField()] = null;\n }\n else if (allSelected) {\n parent[this.selectedField()] = true;\n parent[this.indeterminateField()] = false;\n }\n else {\n parent[this.indeterminateField()] = false;\n parent[this.selectedField()] = true;\n }\n parent = this.findParent(parent, this.itemsSignal());\n }\n }\n findParent(item, nodes) {\n for (const node of nodes) {\n if (node[this.childrenField()]?.includes(item)) {\n return node;\n }\n else if (node[this.childrenField()]) {\n const parent = this.findParent(item, node[this.childrenField()]);\n if (parent)\n return parent;\n }\n }\n return null;\n }\n /**\n *\n * find node selected true for emit Selections\n *\n */\n findSelectedNodes(nodes) {\n let selectedNodes = [];\n nodes.forEach((node) => {\n if (node[this.selectedField()]) {\n selectedNodes.push(node);\n }\n if (node[this.childrenField()]) {\n selectedNodes = selectedNodes.concat(this.findSelectedNodes(node[this.childrenField()]));\n }\n });\n return selectedNodes;\n }\n /**\n *\n * find for emit Selections single mode\n *\n */\n handleUnSelectNode(items) {\n items.forEach((child) => {\n child[this.selectedField()] = false;\n if (child?.[this.childrenField()]?.length) {\n this.handleUnSelectNode(child[this.childrenField()]);\n }\n });\n }\n /**\n *\n * lazy load logic\n *\n */\n fetchData(selectedNode) {\n this.itemsPromise(selectedNode?.[this.valueField()])\n .then((data) => {\n if (Array.isArray(data)) {\n if (selectedNode?.[this.valueField()]) {\n this.findNode(selectedNode[this.valueField()], data, this.itemsSignal());\n }\n else {\n const isNodeExpanded = data.filter((child) => child[this.expandedField()]);\n isNodeExpanded.forEach((child) => {\n this.fetchData(child);\n });\n this.itemsSignal.set(data);\n }\n }\n })\n .finally(() => {\n this.setNodeLoading(selectedNode?.[this.valueField()], false);\n });\n }\n findNode(parentId, _children, source) {\n if (source.length) {\n source.forEach((element) => {\n if (element[this.valueField()] == parentId) {\n if (this.selectionBehavior() === 'indeterminate' && element[this.selectedField()]) {\n _children.forEach((child) => (child[this.selectedField()] = true));\n }\n element[this.childrenField()] = _children;\n }\n else {\n if (element?.[this.childrenField()])\n this.findNode(parentId, _children, element[this.childrenField()]);\n }\n });\n }\n }\n /**\n *\n * emit when arrow click\n *\n */\n handleNodeExpandClick(node) {\n const selectedNode = node.data;\n if (this.itemsPromise && node.data[this.expandedField()] && !node?.data[this.childrenField()]?.length) {\n this.setNodeLoading(selectedNode[this.valueField()], true);\n this.fetchData(selectedNode);\n }\n this.onCollapsedChanged.emit({ component: this, data: node.data, nativeElement: this.nativeElement });\n }\n handleUnActiveNode(unActiveSource) {\n unActiveSource.forEach((child) => {\n child[this.activeField()] = false;\n if (child?.[this.childrenField()]?.length) {\n this.handleUnActiveNode(child[this.childrenField()]);\n }\n });\n }\n isNodeLoading(nodeId) {\n return this.loadingState()[nodeId] || false;\n }\n setNodeLoading(nodeId, isLoading) {\n this.loadingState.update((state) => ({\n ...state,\n [nodeId]: isLoading,\n }));\n }\n executeOnTreeNode(node, operation, value) {\n switch (operation) {\n case 'active':\n node[this.activeField()] = value;\n break;\n case 'expand':\n node[this.expandedField()] = true;\n if (this.itemsPromise && node[this.hasChildField()] && !node[this.childrenField()]?.length) {\n this.handleNodeExpandClick({ data: node, nativeElement: this.nativeElement, component: this });\n }\n break;\n case 'visible':\n node[this.visibleField()] = value;\n break;\n case 'disabled':\n node[this.disableField()] = value;\n break;\n default:\n break;\n }\n /**\n *\n * for detect changes treeviewitem\n *\n */\n this.executorChanges.set(operation);\n }\n refresh() {\n if (this.itemsPromise) {\n this.fetchData();\n }\n }\n async setNodeExpandAndChildren(valueFields, value) {\n const nodesToExpand = [];\n for (const valueField of valueFields) {\n const foundNodes = this.findNodesByValueField(this.itemsSignal(), valueField);\n nodesToExpand.push(...foundNodes);\n }\n await Promise.all(nodesToExpand.map((node) => this.expandNodeAndAllChildren(node, value)));\n }\n findNodesByValueField(nodes, valueField) {\n const results = [];\n for (const node of nodes) {\n if (node[this.valueField()] === valueField) {\n results.push(node);\n }\n if (node[this.childrenField()]?.length) {\n results.push(...this.findNodesByValueField(node[this.childrenField()], valueField));\n }\n }\n return results;\n }\n async expandNodeAndAllChildren(node, value) {\n node[this.expandedField()] = value;\n if (value && this.itemsPromise && node[this.hasChildField()] && !node[this.childrenField()]?.length) {\n await this.setNodeLoading(node[this.valueField()], true);\n await this.fetchData(node);\n }\n if (node[this.childrenField()]?.length) {\n await Promise.all(node[this.childrenField()].map((child) => this.expandNodeAndAllChildren(child, value)));\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTreeViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.3\", type: AXTreeViewComponent, isStandalone: true, selector: \"ax-tree-view\", inputs: { items: { classPropertyName: \"items\", publicName: \"items\", isSignal: true, isRequired: false, transformFunction: null }, showCheckbox: { classPropertyName: \"showCheckbox\", publicName: \"showCheckbox\", isSignal: true, isRequired: false, transformFunction: null }, hasCheckboxField: { classPropertyName: \"hasCheckboxField\", publicName: \"hasCheckboxField\", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: \"selectionMode\", publicName: \"selectionMode\", isSignal: true, isRequired: false, transformFunction: null }, selectionBehavior: { classPropertyName: \"selectionBehavior\", publicName: \"selectionBehavior\", isSignal: true, isRequired: false, transformFunction: null }, selectionScope: { classPropertyName: \"selectionScope\", publicName: \"selectionScope\", isSignal: true, isRequired: false, transformFunction: null }, focusNodeEnabled: { classPropertyName: \"focusNodeEnabled\", publicName: \"focusNodeEnabled\", isSignal: true, isRequired: false, transformFunction: null }, valueField: { classPropertyName: \"valueField\", publicName: \"valueField\", isSignal: true, isRequired: false, transformFunction: null }, textField: { classPropertyName: \"textField\", publicName: \"textField\", isSignal: true, isRequired: false, transformFunction: null }, visibleField: { classPropertyName: \"visibleField\", publicName: \"visibleField\", isSignal: true, isRequired: false, transformFunction: null }, disableField: { classPropertyName: \"disableField\", publicName: \"disableField\", isSignal: true, isRequired: false, transformFunction: null }, hasChildField: { classPropertyName: \"hasChildField\", publicName: \"hasChildField\", isSignal: true, isRequired: false, transformFunction: null }, selectedField: { classPropertyName: \"selectedField\", publicName: \"selectedField\", isSignal: true, isRequired: false, transformFunction: null }, expandedField: { classPropertyName: \"expandedField\", publicName: \"expandedField\", isSignal: true, isRequired: false, transformFunction: null }, tooltipField: { classPropertyName: \"tooltipField\", publicName: \"tooltipField\", isSignal: true, isRequired: false, transformFunction: null }, childrenField: { classPropertyName: \"childrenField\", publicName: \"childrenField\", isSignal: true, isRequired: false, transformFunction: null }, activeField: { classPropertyName: \"activeField\", publicName: \"activeField\", isSignal: true, isRequired: false, transformFunction: null }, indeterminateField: { classPropertyName: \"indeterminateField\", publicName: \"indeterminateField\", isSignal: true, isRequired: false, transformFunction: null }, parentField: { classPropertyName: \"parentField\", publicName: \"parentField\", isSignal: true, isRequired: false, transformFunction: null }, iconField: { classPropertyName: \"iconField\", publicName: \"iconField\", isSignal: true, isRequired: false, transformFunction: null }, toggleIcons: { classPropertyName: \"toggleIcons\", publicName: \"toggleIcons\", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: \"look\", publicName: \"look\", isSignal: true, isRequired: false, transformFunction: null }, showEmptyNodeMassage: { classPropertyName: \"showEmptyNodeMassage\", publicName: \"showEmptyNodeMassage\", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: \"itemTemplate\", publicName: \"itemTemplate\", isSignal: false, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: \"emptyTemplate\", publicName: \"emptyTemplate\", isSignal: false, isRequired: false, transformFunction: null }, expandOn: { classPropertyName: \"expandOn\", publicName: \"expandOn\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelectionChanged: \"onSelectionChanged\", onItemSelectedChanged: \"onItemSelectedChanged\", onNodeClick: \"onNodeClick\", onCollapsedChanged: \"onCollapsedChanged\", onNodedbClick: \"onNodedbClick\" }, host: { properties: { \"class\": \"this.__hostClass\" } }, providers: [\n { provide: AXComponent, useExisting: AXTreeViewComponent },\n { provide: AXTreeViewBase, useExisting: AXTreeViewComponent },\n ], usesInheritance: true, ngImport: i0, template: \"@if (resolvedItems?.length) {\\n @for (node of resolvedItems; track $index) {\\n <ng-container [ngTemplateOutlet]=\\\"recursion\\\" [ngTemplateOutletContext]=\\\"{ $implicit: node }\\\"></ng-container>\\n }\\n} @else {\\n <ng-container [ngTemplateOutlet]=\\\"emptyTemplate || empty\\\"></ng-container>\\n}\\n\\n<ng-template #recursion let-item>\\n @if (item[visibleField()] !== false) {\\n <ax-tree-view-item\\n [item]=\\\"item\\\"\\n [isExpanded]=\\\"item[expandedField()]\\\"\\n [(isActive)]=\\\"item[activeField()]\\\"\\n [isLoading]=\\\"isNodeLoading(item[valueField()])\\\"\\n [executorChanges]=\\\"executorChanges()\\\"\\n >\\n @if (\\n (showCheckbox() && selectionScope() === 'all' && item[hasCheckboxField()] !== false) ||\\n (showCheckbox() &&\\n selectionScope() === 'parent' &&\\n item[childrenField()]?.length &&\\n item[hasCheckboxField()]) !== false ||\\n (showCheckbox() &&\\n selectionScope() === 'children' &&\\n !item[childrenField()]?.length &&\\n item[hasCheckboxField()] !== false)\\n ) {\\n <ax-check-box\\n [disabled]=\\\"item[disableField()]\\\"\\n [indeterminate]=\\\"item[indeterminateField()]\\\"\\n [(ngModel)]=\\\"item[selectedField()]\\\"\\n (onValueChanged)=\\\"handleNodeSelectionClick($event, item)\\\"\\n ></ax-check-box>\\n }\\n @if (item[iconField()]) {\\n <ax-prefix>\\n <ax-icon [icon]=\\\"item[iconField()]\\\"></ax-icon>\\n </ax-prefix>\\n }\\n @if (item[textField()]) {\\n <ax-text>{{ item[textField()] }}</ax-text>\\n }\\n\\n @for (child of item?.[childrenField()]; track $index) {\\n <ng-container [ngTemplateOutlet]=\\\"recursion\\\" [ngTemplateOutletContext]=\\\"{ $implicit: child }\\\"></ng-container>\\n }\\n </ax-tree-view-item>\\n }\\n</ng-template>\\n\\n<ng-template #empty>\\n {{ '@acorex:common.general.no-result-found' | translate | async }}\\n</ng-template>\\n\", styles: [\"ax-tree-view{--ax-comp-tree-view-arrow-size: .875rem;--ax-comp-tree-view-text-size: .875rem;--ax-comp-tree-view-active-bg-color: var(--ax-sys-color-primary-surface);--ax-comp-tree-view-active-text-color: var(--ax-sys-color-on-primary-surface);--ax-comp-tree-view-hover-bg-color: var(--ax-sys-color-dark-surface);--ax-comp-tree-view-indicator-size: 2px}ax-tree-view:has(>ax-tree-view-item i) ax-tree-view-item .ax-tree-view-container:not(:has(i)){padding-inline-start:1.5rem}ax-tree-view.ax-look-with-line ax-tree-view-item{position:relative}ax-tree-view.ax-look-with-line ax-tree-view-item:before{content:\\\"\\\";position:absolute;top:0;inset-inline-start:.625rem;width:1px;height:100%;background-color:#ccc}ax-tree-view.ax-look-with-line ax-tree-view-item .ax-tree-view-container{padding-inline-start:1.25rem}ax-tree-view.ax-look-with-line ax-tree-view-item .ax-tree-view-container .ax-tree-view-icon-container{padding:.25rem}ax-tree-view ax-tree-view-item ax-check-box{margin-inline-start:.5rem}ax-tree-view ax-tree-view-item .ax-tree-view-container{display:flex;align-items:center;margin-bottom:.125rem}ax-tree-view ax-tree-view-item .ax-tree-view-container ax-text{font-size:var(--ax-comp-tree-view-text-size)}ax-tree-view ax-tree-view-item .ax-tree-view-container{cursor:pointer}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-checkbox-end-side{display:none!important}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-tree-view-arrow{font-size:var(--ax-comp-tree-view-arrow-size)!important}ax-tree-view ax-tree-view-item .ax-tree-view-container ax-suffix:empty{display:none}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-tree-view-icon-container{width:1.5rem;height:1.5rem;display:flex;align-items:center;justify-content:center}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-tree-view-items{display:flex;align-items:center}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-tree-view-items .ax-tree-view-items-prefix{display:flex;align-items:center;gap:.5rem;padding:.25rem .5rem;border-radius:.25rem;overflow-x:auto;margin-inline-start:.25rem}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-tree-view-items .ax-tree-view-items-prefix.ax-noselect-tree-view{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-tree-view-items .ax-tree-view-items-prefix.ax-state-tree-view-active{background-color:rgba(var(--ax-comp-tree-view-active-bg-color));color:rgba(var(--ax-comp-tree-view-active-text-color))}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-tree-view-items .ax-tree-view-items-prefix:hover:not(.ax-state-tree-view-active){background-color:rgba(var(--ax-comp-tree-view-hover-bg-color))}ax-tree-view ax-tree-view-item .ax-tree-view-child{padding-inline-start:1rem}ax-tree-view ax-tree-view-item .ax-tree-view-child .ax-tree-view-container:not(:has(.ax-tree-view-icon-container i)){padding-inline-start:1.5rem}ax-tree-view ax-tree-view-item .ax-tree-view-child.ax-tree-view-empty-child{padding-inline-start:2rem}ax-tree-view ax-tree-view-item .ax-state-disabled{cursor:not-allowed!important;opacity:.5!important}\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: AXTreeViewItemComponent, selector: \"ax-tree-view-item\", inputs: [\"item\", \"isExpanded\", \"isActive\", \"isLoading\", \"executorChanges\"], outputs: [\"isExpandedChange\", \"isActiveChange\"] }, { kind: \"component\", type: AXCheckBoxComponent, selector: \"ax-check-box\", inputs: [\"disabled\", \"tabIndex\", \"readonly\", \"color\", \"value\", \"name\", \"id\", \"isLoading\", \"indeterminate\"], outputs: [\"onBlur\", \"onFocus\", \"valueChange\", \"onValueChanged\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTreeViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-tree-view', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n NgTemplateOutlet,\n AXTreeViewItemComponent,\n AXCheckBoxComponent,\n FormsModule,\n AXDecoratorGenericComponent,\n AXDecoratorIconComponent,\n AXTranslatorPipe,\n AsyncPipe,\n ], providers: [\n { provide: AXComponent, useExisting: AXTreeViewComponent },\n { provide: AXTreeViewBase, useExisting: AXTreeViewComponent },\n ], template: \"@if (resolvedItems?.length) {\\n @for (node of resolvedItems; track $index) {\\n <ng-container [ngTemplateOutlet]=\\\"recursion\\\" [ngTemplateOutletContext]=\\\"{ $implicit: node }\\\"></ng-container>\\n }\\n} @else {\\n <ng-container [ngTemplateOutlet]=\\\"emptyTemplate || empty\\\"></ng-container>\\n}\\n\\n<ng-template #recursion let-item>\\n @if (item[visibleField()] !== false) {\\n <ax-tree-view-item\\n [item]=\\\"item\\\"\\n [isExpanded]=\\\"item[expandedField()]\\\"\\n [(isActive)]=\\\"item[activeField()]\\\"\\n [isLoading]=\\\"isNodeLoading(item[valueField()])\\\"\\n [executorChanges]=\\\"executorChanges()\\\"\\n >\\n @if (\\n (showCheckbox() && selectionScope() === 'all' && item[hasCheckboxField()] !== false) ||\\n (showCheckbox() &&\\n selectionScope() === 'parent' &&\\n item[childrenField()]?.length &&\\n item[hasCheckboxField()]) !== false ||\\n (showCheckbox() &&\\n selectionScope() === 'children' &&\\n !item[childrenField()]?.length &&\\n item[hasCheckboxField()] !== false)\\n ) {\\n <ax-check-box\\n [disabled]=\\\"item[disableField()]\\\"\\n [indeterminate]=\\\"item[indeterminateField()]\\\"\\n [(ngModel)]=\\\"item[selectedField()]\\\"\\n (onValueChanged)=\\\"handleNodeSelectionClick($event, item)\\\"\\n ></ax-check-box>\\n }\\n @if (item[iconField()]) {\\n <ax-prefix>\\n <ax-icon [icon]=\\\"item[iconField()]\\\"></ax-icon>\\n </ax-prefix>\\n }\\n @if (item[textField()]) {\\n <ax-text>{{ item[textField()] }}</ax-text>\\n }\\n\\n @for (child of item?.[childrenField()]; track $index) {\\n <ng-container [ngTemplateOutlet]=\\\"recursion\\\" [ngTemplateOutletContext]=\\\"{ $implicit: child }\\\"></ng-container>\\n }\\n </ax-tree-view-item>\\n }\\n</ng-template>\\n\\n<ng-template #empty>\\n {{ '@acorex:common.general.no-result-found' | translate | async }}\\n</ng-template>\\n\", styles: [\"ax-tree-view{--ax-comp-tree-view-arrow-size: .875rem;--ax-comp-tree-view-text-size: .875rem;--ax-comp-tree-view-active-bg-color: var(--ax-sys-color-primary-surface);--ax-comp-tree-view-active-text-color: var(--ax-sys-color-on-primary-surface);--ax-comp-tree-view-hover-bg-color: var(--ax-sys-color-dark-surface);--ax-comp-tree-view-indicator-size: 2px}ax-tree-view:has(>ax-tree-view-item i) ax-tree-view-item .ax-tree-view-container:not(:has(i)){padding-inline-start:1.5rem}ax-tree-view.ax-look-with-line ax-tree-view-item{position:relative}ax-tree-view.ax-look-with-line ax-tree-view-item:before{content:\\\"\\\";position:absolute;top:0;inset-inline-start:.625rem;width:1px;height:100%;background-color:#ccc}ax-tree-view.ax-look-with-line ax-tree-view-item .ax-tree-view-container{padding-inline-start:1.25rem}ax-tree-view.ax-look-with-line ax-tree-view-item .ax-tree-view-container .ax-tree-view-icon-container{padding:.25rem}ax-tree-view ax-tree-view-item ax-check-box{margin-inline-start:.5rem}ax-tree-view ax-tree-view-item .ax-tree-view-container{display:flex;align-items:center;margin-bottom:.125rem}ax-tree-view ax-tree-view-item .ax-tree-view-container ax-text{font-size:var(--ax-comp-tree-view-text-size)}ax-tree-view ax-tree-view-item .ax-tree-view-container{cursor:pointer}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-checkbox-end-side{display:none!important}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-tree-view-arrow{font-size:var(--ax-comp-tree-view-arrow-size)!important}ax-tree-view ax-tree-view-item .ax-tree-view-container ax-suffix:empty{display:none}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-tree-view-icon-container{width:1.5rem;height:1.5rem;display:flex;align-items:center;justify-content:center}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-tree-view-items{display:flex;align-items:center}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-tree-view-items .ax-tree-view-items-prefix{display:flex;align-items:center;gap:.5rem;padding:.25rem .5rem;border-radius:.25rem;overflow-x:auto;margin-inline-start:.25rem}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-tree-view-items .ax-tree-view-items-prefix.ax-noselect-tree-view{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-tree-view-items .ax-tree-view-items-prefix.ax-state-tree-view-active{background-color:rgba(var(--ax-comp-tree-view-active-bg-color));color:rgba(var(--ax-comp-tree-view-active-text-color))}ax-tree-view ax-tree-view-item .ax-tree-view-container .ax-tree-view-items .ax-tree-view-items-prefix:hover:not(.ax-state-tree-view-active){background-color:rgba(var(--ax-comp-tree-view-hover-bg-color))}ax-tree-view ax-tree-view-item .ax-tree-view-child{padding-inline-start:1rem}ax-tree-view ax-tree-view-item .ax-tree-view-child .ax-tree-view-container:not(:has(.ax-tree-view-icon-container i)){padding-inline-start:1.5rem}ax-tree-view ax-tree-view-item .ax-tree-view-child.ax-tree-view-empty-child{padding-inline-start:2rem}ax-tree-view ax-tree-view-item .ax-state-disabled{cursor:not-allowed!important;opacity:.5!important}\\n\"] }]\n }], propDecorators: { __hostClass: [{\n type: HostBinding,\n args: ['class']\n }], itemTemplate: [{\n type: Input\n }], emptyTemplate: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvdHJlZS12aWV3L3NyYy9saWIvdHJlZS12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvdHJlZS12aWV3L3NyYy9saWIvdHJlZS12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQTRDLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsTUFBTSxFQUNOLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFdBQVcsRUFDWCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFFTCxjQUFjLEdBTWYsTUFBTSxtQkFBbUIsQ0FBQzs7O0FBdUIzQixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsV0FBVztJQXJCcEQ7O1FBNEJFLGdCQUFXLEdBQUcsTUFB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VG9nZ2xlSWNvbnMsIEFYVmFsdWVDaGFuZ2VkRXZlbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYQ2hlY2tCb3hDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY2hlY2stYm94JztcbmltcG9ydCB7IEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCwgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQbGF0Zm9ybSB9IGZyb20gJ0BhY29yZXgvY29yZS9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0b3JQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBlZmZlY3QsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFYVHJlZVZpZXdJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLXZpZXctaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQVhUcmVlSXRlbUNsaWNrQmFzZUV2ZW50LFxuICBBWFRyZWVWaWV3QmFzZSxcbiAgQVhUcmVlVmlld0V4cGFuZEJlaGF2aW9yLFxuICBBWFRyZWVWaWV3TG9vayxcbiAgQVhUcmVlVmlld09wZXJhdGlvbk1ldGhvZCxcbiAgQVhUcmVlVmlld1NlbGVjdGlvbkJlaGF2aW9yLFxuICBBWFRyZWVWaWV3U2VsZWN0aW9uU2NvcGUsXG59IGZyb20gJy4vdHJlZS12aWV3LmNsYXNzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtdHJlZS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICd0cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsndHJlZS12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBBWFRyZWVWaWV3SXRlbUNvbXBvbmVudCxcbiAgICBBWENoZWNrQm94Q29tcG9uZW50LFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCxcbiAgICBBWERlY29yYXRvckljb25Db21wb25lbnQsXG4gICAgQVhUcmFuc2xhdG9yUGlwZSxcbiAgICBBc3luY1BpcGUsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFRyZWVWaWV3Q29tcG9uZW50IH0sXG4gICAgeyBwcm92aWRlOiBBWFRyZWVWaWV3QmFzZSwgdXNlRXhpc3Rpbmc6IEFYVHJlZVZpZXdDb21wb25lbnQgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhUcmVlVmlld0NvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIHByaXZhdGUgZ2V0IF9faG9zdENsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW2BheC1sb29rLSR7dGhpcy5sb29rKCl9YF07XG4gIH1cblxuICBpdGVtc1NpZ25hbCA9IHNpZ25hbDx1bmtub3duW10+KFtdKTtcblxuICBpdGVtc1Byb21pc2U6IGFueTtcblxuICBpdGVtcyA9IGlucHV0PHVua25vd25bXSB8ICgoc2VsZWN0ZWRJdGVtSWQ/OiBzdHJpbmcgfCBudW1iZXIpID0+IHVua25vd25bXSB8IFByb21pc2U8dW5rbm93bltdPik+KCk7XG5cbiAgcHJvdGVjdGVkIGdldCByZXNvbHZlZEl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW1zU2lnbmFsKCk7XG4gIH1cblxuICBzaG93Q2hlY2tib3ggPSBpbnB1dCh0cnVlKTtcblxuICBoYXNDaGVja2JveEZpZWxkID0gaW5wdXQoJ2hhc0NoZWNrYm94Jyk7XG5cbiAgc2VsZWN0aW9uTW9kZSA9IGlucHV0PCdzaW5nbGUnIHwgJ211bHRpcGxlJz4oJ3NpbmdsZScpO1xuXG4gIHNlbGVjdGlvbkJlaGF2aW9yID0gaW5wdXQ8QVhUcmVlVmlld1NlbGVjdGlvbkJlaGF2aW9yPigpO1xuXG4gIHNlbGVjdGlvblNjb3BlID0gaW5wdXQ8QVhUcmVlVmlld1NlbGVjdGlvblNjb3BlPignYWxsJyk7XG5cbiAgZm9jdXNOb2RlRW5hYmxlZCA9IGlucHV0KHRydWUpO1xuXG4gIHZhbHVlRmllbGQgPSBpbnB1dCgnaWQnKTtcblxuICB0ZXh0RmllbGQgPSBpbnB1dCgndGV4dCcpO1xuXG4gIHZpc2libGVGaWVsZCA9IGlucHV0KCd2aXNpYmxlJyk7XG5cbiAgZGlzYWJsZUZpZWxkID0gaW5wdXQoJ2Rpc2FibGVkJyk7XG5cbiAgaGFzQ2hpbGRGaWVsZCA9IGlucHV0KCdoYXNDaGlsZCcpO1xuXG4gIHNlbGVjdGVkRmllbGQgPSBpbnB1dCgnc2VsZWN0ZWQnKTtcblxuICBleHBhbmRlZEZpZWxkID0gaW5wdXQoJ2V4cGFuZGVkJyk7XG5cbiAgdG9vbHRpcEZpZWxkID0gaW5wdXQoJ3Rvb2x0aXAnKTtcblxuICBjaGlsZHJlbkZpZWxkID0gaW5wdXQoJ2NoaWxkcmVuJyk7XG5cbiAgYWN0aXZlRmllbGQgPSBpbnB1dCgnYWN0aXZlJyk7XG5cbiAgaW5kZXRlcm1pbmF0ZUZpZWxkID0gaW5wdXQoJ2luZGV0ZXJtaW5hdGUnKTtcblxuICBwYXJlbnRGaWVsZCA9IGlucHV0KCdwYXJlbnRJZCcpO1xuXG4gIGljb25GaWVsZCA9IGlucHV0KCdpY29uJyk7XG5cbiAgdG9nZ2xlSWNvbnMgPSBpbnB1dDxBWEV4cGFuZFRvZ2dsZUljb25zPigpO1xuXG4gIGxvb2sgPSBpbnB1dDxBWFRyZWVWaWV3TG9vaz4oJ2RlZnVsdCcpO1xuXG4gIHNob3dFbXB0eU5vZGVNYXNzYWdlID0gaW5wdXQoZmFsc2UpO1xuXG4gIG9uU2VsZWN0aW9uQ2hhbmdlZCA9IG91dHB1dDxBWFRyZWVJdGVtQ2xpY2tCYXNlRXZlbnQ+KCk7XG5cbiAgb25JdGVtU2VsZWN0ZWRDaGFuZ2VkID0gb3V0cHV0PEFYVHJlZUl0ZW1DbGlja0Jhc2VFdmVudD4oKTtcblxuICBvbk5vZGVDbGljayA9IG91dHB1dDxBWFRyZWVJdGVtQ2xpY2tCYXNlRXZlbnQ+KCk7XG5cbiAgb25Db2xsYXBzZWRDaGFuZ2VkID0gb3V0cHV0PEFYVHJlZUl0ZW1DbGlja0Jhc2VFdmVudD4oKTtcblxuICBvbk5vZGVkYkNsaWNrID0gb3V0cHV0PEFYVHJlZUl0ZW1DbGlja0Jhc2VFdmVudD4oKTtcblxuICBleGVjdXRvckNoYW5nZXMgPSBzaWduYWw8QVhUcmVlVmlld09wZXJhdGlvbk1ldGhvZD4obnVsbCk7XG5cbiAgQElucHV0KCkgaXRlbVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KCkgZW1wdHlUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIHByb3RlY3RlZCBwbGF0Zm9ybVNlcnZpY2UgPSBpbmplY3QoQVhQbGF0Zm9ybSk7XG5cbiAgI2VmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaXRlbXNJbnB1dCA9IHRoaXMuaXRlbXMoKTtcblxuICAgIGlmICh0eXBlb2YgaXRlbXNJbnB1dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXRlbXNJbnB1dCgpO1xuICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgdGhpcy5pdGVtc1Byb21pc2UgPSAob3B0aW9ucykgPT4gaXRlbXNJbnB1dChvcHRpb25zKTtcbiAgICAgICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXRlbXNTaWduYWwuc2V0KHJlc3VsdCk7XG4gICAgICAgIHRoaXMuaXRlbXNQcm9taXNlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pdGVtc1NpZ25hbC5zZXQoaXRlbXNJbnB1dCk7XG4gICAgICB0aGlzLml0ZW1zUHJvbWlzZSA9IG51bGw7XG4gICAgfVxuICB9KTtcblxuICBleHBhbmRPbiA9IGlucHV0PEFYVHJlZVZpZXdFeHBhbmRCZWhhdmlvcj4oJ2RlZnVsdCcpO1xuXG4gIHByb3RlY3RlZCBoYW5kbGVOb2RlU2VsZWN0aW9uQ2xpY2soZXZlbnQ6IEFYVmFsdWVDaGFuZ2VkRXZlbnQsIGl0ZW06IHVua25vd24pIHtcbiAgICBpZiAoaXRlbVt0aGlzLmRpc2FibGVGaWVsZCgpXSB8fCB0aGlzLmlzTm9kZUxvYWRpbmcoaXRlbVt0aGlzLnZhbHVlRmllbGQoKV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSgpID09PSAnc2luZ2xlJyAmJiBldmVudC5pc1VzZXJJbnRlcmFjdGlvbikge1xuICAgICAgdGhpcy5oYW5kbGVVblNlbGVjdE5vZGUodGhpcy5pdGVtc1NpZ25hbCgpKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQuaXNVc2VySW50ZXJhY3Rpb24pIHtcbiAgICAgIGl0ZW1bdGhpcy5zZWxlY3RlZEZpZWxkKCldID0gZXZlbnQudmFsdWU7XG5cbiAgICAgIGlmIChldmVudC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0aW9uQmVoYXZpb3IoKSkge1xuICAgICAgICAgIGNhc2UgJ2F1dG9FeHBhbmQnOlxuICAgICAgICAgICAgaWYgKGV2ZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zUHJvbWlzZSAmJiBpdGVtW3RoaXMuaGFzQ2hpbGRGaWVsZCgpXSAmJiAhaXRlbT8uW3RoaXMuY2hpbGRyZW5GaWVsZCgpXT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb2RlTG9hZGluZyhpdGVtW3RoaXMudmFsdWVGaWVsZCgpXSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaERhdGEoaXRlbSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy50b2dnbGVFeHBhbmQoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdjYXNjYWRlJzpcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQW5kVG9nZ2xlU2VsZWN0aW9uKGl0ZW0sIGV2ZW50LnZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2luZGV0ZXJtaW5hdGUnOlxuICAgICAgICAgICAgaWYgKGl0ZW0/Llt0aGlzLmNoaWxkcmVuRmllbGQoKV0/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLmFwcGx5U2VsZWN0aW9uVG9DaGlsZHJlbihpdGVtLCBldmVudC52YWx1ZSwgaXRlbVt0aGlzLnZhbHVlRmllbGQoKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVQYXJlbnRTZWxlY3Rpb24oaXRlbSwgZXZlbnQudmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMub25JdGVtU2VsZWN0ZWRDaGFuZ2VkLmVtaXQoe1xuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgIG5hdGl2ZUVsZW1lbnQ6IHRoaXMubmF0aXZlRWxlbWVudCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQ6IHVua25vd25bXSA9IHRoaXMuZmluZFNlbGVjdGVkTm9kZXModGhpcy5pdGVtc1NpZ25hbCgpKTtcblxuICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7XG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICBuYXRpdmVFbGVtZW50OiB0aGlzLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogYXV0byBleHBhbmRcbiAgICpcbiAgICovXG4gIHByaXZhdGUgdG9nZ2xlRXhwYW5kKGl0ZW06IHVua25vd24pIHtcbiAgICBpZiAoIWl0ZW1bdGhpcy5leHBhbmRlZEZpZWxkKCldKSB7XG4gICAgICBpdGVtW3RoaXMuZXhwYW5kZWRGaWVsZCgpXSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIGV4cGFuZCBhbmQgY2hhbmdlIHZhbHVlIHBhcmVudCBjaGFuZ2VcbiAgICpcbiAgICovXG5cbiAgcHJpdmF0ZSBhc3luYyBleHBhbmRBbmRUb2dnbGVTZWxlY3Rpb24oaXRlbTogdW5rbm93biwgc2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pdGVtc1Byb21pc2UgJiYgaXRlbVt0aGlzLmhhc0NoaWxkRmllbGQoKV0gJiYgIWl0ZW0/Llt0aGlzLmNoaWxkcmVuRmllbGQoKV0/Lmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy5zZXROb2RlTG9hZGluZyhpdGVtW3RoaXMudmFsdWVGaWVsZCgpXSwgdHJ1ZSk7XG4gICAgICBhd2FpdCB0aGlzLmZldGNoRGF0YShpdGVtKTtcbiAgICB9XG4gICAgdGhpcy50b2dnbGVFeHBhbmQoaXRlbSk7XG5cbiAgICBpZiAoaXRlbVt0aGlzLmNoaWxkcmVuRmllbGQoKV0/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5hcHBseVNlbGVjdGlvblRvQ2hpbGRyZW4oaXRlbSwgc2VsZWN0ZWQsIGl0ZW1bdGhpcy52YWx1ZUZpZWxkKCldKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2VsZWN0aW9uVG9DaGlsZHJlbihpdGVtOiB1bmtub3duLCBpc1NlbGVjdGVkOiBib29sZWFuLCBwYXJlbnRJZD86IG51bWJlciB8IHN0cmluZykge1xuICAgIGl0ZW1bdGhpcy5jaGlsZHJlbkZpZWxkKCldLmZvckVhY2goYXN5bmMgKGNoaWxkKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXRlbXNQcm9taXNlICYmXG4gICAgICAgIGNoaWxkW3RoaXMuaGFzQ2hpbGRGaWVsZCgpXSAmJlxuICAgICAgICAhY2hpbGQ/Llt0aGlzLmNoaWxkcmVuRmllbGQoKV0/Lmxlbmd0aCAmJlxuICAgICAgICB0aGlzLnNlbGVjdGlvbkJlaGF2aW9yKCkgPT09ICdjYXNjYWRlJ1xuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0Tm9kZUxvYWRpbmcoY2hpbGRbdGhpcy52YWx1ZUZpZWxkKCldLCB0cnVlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5mZXRjaERhdGEoY2hpbGQpO1xuICAgICAgICB0aGlzLnRvZ2dsZUV4cGFuZChjaGlsZCk7XG4gICAgICB9XG4gICAgICBjaGlsZFt0aGlzLnBhcmVudEZpZWxkKCldID0gcGFyZW50SWQ7XG4gICAgICBjaGlsZFt0aGlzLnNlbGVjdGVkRmllbGQoKV0gPSBpc1NlbGVjdGVkO1xuICAgICAgaWYgKGNoaWxkW3RoaXMuY2hpbGRyZW5GaWVsZCgpXT8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuYXBwbHlTZWxlY3Rpb25Ub0NoaWxkcmVuKGNoaWxkLCBpc1NlbGVjdGVkLCBjaGlsZFt0aGlzLnZhbHVlRmllbGQoKV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIGluZGV0ZXJtaW5hdGUgbG9naWNcbiAgICpcbiAgICovXG5cbiAgcHJpdmF0ZSB1cGRhdGVQYXJlbnRTZWxlY3Rpb24oaXRlbTogdW5rbm93biwgc2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICBpdGVtW3RoaXMuc2VsZWN0ZWRGaWVsZCgpXSA9IHNlbGVjdGVkO1xuXG4gICAgbGV0IHBhcmVudCA9IHRoaXMuZmluZFBhcmVudChpdGVtLCB0aGlzLml0ZW1zU2lnbmFsKCkpO1xuXG4gICAgd2hpbGUgKChwYXJlbnQgJiYgcGFyZW50W3RoaXMuc2VsZWN0ZWRGaWVsZCgpXSAhPSBmYWxzZSkgfHwgKHBhcmVudCAmJiBpdGVtW3RoaXMuc2VsZWN0ZWRGaWVsZCgpXSkpIHtcbiAgICAgIGNvbnN0IGFsbFNlbGVjdGVkID0gcGFyZW50Py5bdGhpcy5jaGlsZHJlbkZpZWxkKCldPy5ldmVyeSgoY2hpbGQpID0+IGNoaWxkW3RoaXMuc2VsZWN0ZWRGaWVsZCgpXSk7XG5cbiAgICAgIGNvbnN0IHNvbWVTZWxlY3RlZCA9IHBhcmVudD8uW3RoaXMuY2hpbGRyZW5GaWVsZCgpXT8uc29tZShcbiAgICAgICAgKGNoaWxkKSA9PiBjaGlsZFt0aGlzLnNlbGVjdGVkRmllbGQoKV0gfHwgY2hpbGRbdGhpcy5pbmRldGVybWluYXRlRmllbGQoKV0sXG4gICAgICApO1xuXG4gICAgICBpZiAoIWFsbFNlbGVjdGVkICYmICFzb21lU2VsZWN0ZWQpIHtcbiAgICAgICAgcGFyZW50W3RoaXMuc2VsZWN0ZWRGaWVsZCgpXSA9IGZhbHNlO1xuICAgICAgICBwYXJlbnRbdGhpcy5pbmRldGVybWluYXRlRmllbGQoKV0gPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICghYWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgcGFyZW50W3RoaXMuaW5kZXRlcm1pbmF0ZUZpZWxkKCldID0gdHJ1ZTtcbiAgICAgICAgcGFyZW50W3RoaXMuc2VsZWN0ZWRGaWVsZCgpXSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKGFsbFNlbGVjdGVkKSB7XG4gICAgICAgIHBhcmVudFt0aGlzLnNlbGVjdGVkRmllbGQoKV0gPSB0cnVlO1xuICAgICAgICBwYXJlbnRbdGhpcy5pbmRldGVybWluYXRlRmllbGQoKV0gPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudFt0aGlzLmluZGV0ZXJtaW5hdGVGaWVsZCgpXSA9IGZhbHNlO1xuICAgICAgICBwYXJlbnRbdGhpcy5zZWxlY3RlZEZpZWxkKCldID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcGFyZW50ID0gdGhpcy5maW5kUGFyZW50KHBhcmVudCwgdGhpcy5pdGVtc1NpZ25hbCgpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmRQYXJlbnQoaXRlbTogdW5rbm93biwgbm9kZXM6IHVua25vd25bXSkge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgaWYgKG5vZGVbdGhpcy5jaGlsZHJlbkZpZWxkKCldPy5pbmNsdWRlcyhpdGVtKSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZVt0aGlzLmNoaWxkcmVuRmllbGQoKV0pIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5maW5kUGFyZW50KGl0ZW0sIG5vZGVbdGhpcy5jaGlsZHJlbkZpZWxkKCldKTtcbiAgICAgICAgaWYgKHBhcmVudCkgcmV0dXJuIHBhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogZmluZCBub2RlIHNlbGVjdGVkIHRydWUgZm9yIGVtaXQgU2VsZWN0aW9uc1xuICAgKlxuICAgKi9cblxuICBwcml2YXRlIGZpbmRTZWxlY3RlZE5vZGVzKG5vZGVzOiB1bmtub3duW10pOiB1bmtub3duW10ge1xuICAgIGxldCBzZWxlY3RlZE5vZGVzOiB1bmtub3duW10gPSBbXTtcblxuICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlW3RoaXMuc2VsZWN0ZWRGaWVsZCgpXSkge1xuICAgICAgICBzZWxlY3RlZE5vZGVzLnB1c2gobm9kZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlW3RoaXMuY2hpbGRyZW5GaWVsZCgpXSkge1xuICAgICAgICBzZWxlY3RlZE5vZGVzID0gc2VsZWN0ZWROb2Rlcy5jb25jYXQodGhpcy5maW5kU2VsZWN0ZWROb2Rlcyhub2RlW3RoaXMuY2hpbGRyZW5GaWVsZCgpXSkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlbGVjdGVkTm9kZXM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogZmluZCBmb3IgZW1pdCBTZWxlY3Rpb25zIHNpbmdsZSBtb2RlXG4gICAqXG4gICAqL1xuXG4gIHByaXZhdGUgaGFuZGxlVW5TZWxlY3ROb2RlKGl0ZW1zOiB1bmtub3duW10pIHtcbiAgICBpdGVtcy5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgY2hpbGRbdGhpcy5zZWxlY3RlZEZpZWxkKCldID0gZmFsc2U7XG4gICAgICBpZiAoY2hpbGQ/Llt0aGlzLmNoaWxkcmVuRmllbGQoKV0/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmhhbmRsZVVuU2VsZWN0Tm9kZShjaGlsZFt0aGlzLmNoaWxkcmVuRmllbGQoKV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIGxhenkgbG9hZCBsb2dpY1xuICAgKlxuICAgKi9cblxuICBmZXRjaERhdGEoc2VsZWN0ZWROb2RlPzogdW5rbm93bikge1xuICAgIHRoaXMuaXRlbXNQcm9taXNlKHNlbGVjdGVkTm9kZT8uW3RoaXMudmFsdWVGaWVsZCgpXSlcbiAgICAgIC50aGVuKChkYXRhOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWROb2RlPy5bdGhpcy52YWx1ZUZpZWxkKCldKSB7XG4gICAgICAgICAgICB0aGlzLmZpbmROb2RlKHNlbGVjdGVkTm9kZVt0aGlzLnZhbHVlRmllbGQoKV0sIGRhdGEsIHRoaXMuaXRlbXNTaWduYWwoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGlzTm9kZUV4cGFuZGVkID0gZGF0YS5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZFt0aGlzLmV4cGFuZGVkRmllbGQoKV0pO1xuXG4gICAgICAgICAgICBpc05vZGVFeHBhbmRlZC5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmZldGNoRGF0YShjaGlsZCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5pdGVtc1NpZ25hbC5zZXQoZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldE5vZGVMb2FkaW5nKHNlbGVjdGVkTm9kZT8uW3RoaXMudmFsdWVGaWVsZCgpXSwgZmFsc2UpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmROb2RlKHBhcmVudElkOiBudW1iZXIgfCBzdHJpbmcsIF9jaGlsZHJlbjogdW5rbm93bltdLCBzb3VyY2U6IHVua25vd25bXSkge1xuICAgIGlmIChzb3VyY2UubGVuZ3RoKSB7XG4gICAgICBzb3VyY2UuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudFt0aGlzLnZhbHVlRmllbGQoKV0gPT0gcGFyZW50SWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25CZWhhdmlvcigpID09PSAnaW5kZXRlcm1pbmF0ZScgJiYgZWxlbWVudFt0aGlzLnNlbGVjdGVkRmllbGQoKV0pIHtcbiAgICAgICAgICAgIF9jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gKGNoaWxkW3RoaXMuc2VsZWN0ZWRGaWVsZCgpXSA9IHRydWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxlbWVudFt0aGlzLmNoaWxkcmVuRmllbGQoKV0gPSBfY2hpbGRyZW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQ/Llt0aGlzLmNoaWxkcmVuRmllbGQoKV0pIHRoaXMuZmluZE5vZGUocGFyZW50SWQsIF9jaGlsZHJlbiwgZWxlbWVudFt0aGlzLmNoaWxkcmVuRmllbGQoKV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogZW1pdCB3aGVuIGFycm93IGNsaWNrXG4gICAqXG4gICAqL1xuXG4gIHByb3RlY3RlZCBoYW5kbGVOb2RlRXhwYW5kQ2xpY2sobm9kZTogQVhUcmVlSXRlbUNsaWNrQmFzZUV2ZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0ZWROb2RlID0gbm9kZS5kYXRhO1xuICAgIGlmICh0aGlzLml0ZW1zUHJvbWlzZSAmJiBub2RlLmRhdGFbdGhpcy5leHBhbmRlZEZpZWxkKCldICYmICFub2RlPy5kYXRhW3RoaXMuY2hpbGRyZW5GaWVsZCgpXT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNldE5vZGVMb2FkaW5nKHNlbGVjdGVkTm9kZVt0aGlzLnZhbHVlRmllbGQoKV0sIHRydWUpO1xuICAgICAgdGhpcy5mZXRjaERhdGEoc2VsZWN0ZWROb2RlKTtcbiAgICB9XG4gICAgdGhpcy5vbkNvbGxhcHNlZENoYW5nZWQuZW1pdCh7IGNvbXBvbmVudDogdGhpcywgZGF0YTogbm9kZS5kYXRhLCBuYXRpdmVFbGVtZW50OiB0aGlzLm5hdGl2ZUVsZW1lbnQgfSk7XG4gIH1cblxuICBoYW5kbGVVbkFjdGl2ZU5vZGUodW5BY3RpdmVTb3VyY2U6IHVua25vd25bXSkge1xuICAgIHVuQWN0aXZlU291cmNlLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBjaGlsZFt0aGlzLmFjdGl2ZUZpZWxkKCldID0gZmFsc2U7XG4gICAgICBpZiAoY2hpbGQ/Llt0aGlzLmNoaWxkcmVuRmllbGQoKV0/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmhhbmRsZVVuQWN0aXZlTm9kZShjaGlsZFt0aGlzLmNoaWxkcmVuRmllbGQoKV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkaW5nU3RhdGUgPSBzaWduYWw8UmVjb3JkPHN0cmluZyB8IG51bWJlciwgYm9vbGVhbj4+KHt9KTtcblxuICBwcm90ZWN0ZWQgaXNOb2RlTG9hZGluZyhub2RlSWQ6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmdTdGF0ZSgpW25vZGVJZF0gfHwgZmFsc2U7XG4gIH1cblxuICBzZXROb2RlTG9hZGluZyhub2RlSWQ6IHN0cmluZyB8IG51bWJlciwgaXNMb2FkaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nU3RhdGUudXBkYXRlKChzdGF0ZSkgPT4gKHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgW25vZGVJZF06IGlzTG9hZGluZyxcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgZXhlY3V0ZU9uVHJlZU5vZGUobm9kZTogdW5rbm93biwgb3BlcmF0aW9uOiBBWFRyZWVWaWV3T3BlcmF0aW9uTWV0aG9kLCB2YWx1ZTogYm9vbGVhbikge1xuICAgIHN3aXRjaCAob3BlcmF0aW9uKSB7XG4gICAgICBjYXNlICdhY3RpdmUnOlxuICAgICAgICBub2RlW3RoaXMuYWN0aXZlRmllbGQoKV0gPSB2YWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdleHBhbmQnOlxuICAgICAgICBub2RlW3RoaXMuZXhwYW5kZWRGaWVsZCgpXSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLml0ZW1zUHJvbWlzZSAmJiBub2RlW3RoaXMuaGFzQ2hpbGRGaWVsZCgpXSAmJiAhbm9kZVt0aGlzLmNoaWxkcmVuRmllbGQoKV0/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlTm9kZUV4cGFuZENsaWNrKHsgZGF0YTogbm9kZSwgbmF0aXZlRWxlbWVudDogdGhpcy5uYXRpdmVFbGVtZW50LCBjb21wb25lbnQ6IHRoaXMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Zpc2libGUnOlxuICAgICAgICBub2RlW3RoaXMudmlzaWJsZUZpZWxkKCldID0gdmFsdWU7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkaXNhYmxlZCc6XG4gICAgICAgIG5vZGVbdGhpcy5kaXNhYmxlRmllbGQoKV0gPSB2YWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBmb3IgZGV0ZWN0IGNoYW5nZXMgdHJlZXZpZXdpdGVtXG4gICAgICpcbiAgICAgKi9cblxuICAgIHRoaXMuZXhlY3V0b3JDaGFuZ2VzLnNldChvcGVyYXRpb24pO1xuICB9XG5cbiAgcHVibGljIHJlZnJlc2goKSB7XG4gICAgaWYgKHRoaXMuaXRlbXNQcm9taXNlKSB7XG4gICAgICB0aGlzLmZldGNoRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXROb2RlRXhwYW5kQW5kQ2hpbGRyZW4odmFsdWVGaWVsZHM6IChudW1iZXIgfCBzdHJpbmcpW10sIHZhbHVlOiBib29sZWFuKSB7XG4gICAgY29uc3Qgbm9kZXNUb0V4cGFuZDogYW55W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgdmFsdWVGaWVsZCBvZiB2YWx1ZUZpZWxkcykge1xuICAgICAgY29uc3QgZm91bmROb2RlcyA9IHRoaXMuZmluZE5vZGVzQnlWYWx1ZUZpZWxkKHRoaXMuaXRlbXNTaWduYWwoKSwgdmFsdWVGaWVsZCk7XG4gICAgICBub2Rlc1RvRXhwYW5kLnB1c2goLi4uZm91bmROb2Rlcyk7XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwobm9kZXNUb0V4cGFuZC5tYXAoKG5vZGUpID0+IHRoaXMuZXhwYW5kTm9kZUFuZEFsbENoaWxkcmVuKG5vZGUsIHZhbHVlKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kTm9kZXNCeVZhbHVlRmllbGQobm9kZXM6IGFueVtdLCB2YWx1ZUZpZWxkOiBudW1iZXIgfCBzdHJpbmcpOiBhbnlbXSB7XG4gICAgY29uc3QgcmVzdWx0czogYW55W10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgaWYgKG5vZGVbdGhpcy52YWx1ZUZpZWxkKCldID09PSB2YWx1ZUZpZWxkKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaChub2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGVbdGhpcy5jaGlsZHJlbkZpZWxkKCldPy5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0cy5wdXNoKC4uLnRoaXMuZmluZE5vZGVzQnlWYWx1ZUZpZWxkKG5vZGVbdGhpcy5jaGlsZHJlbkZpZWxkKCldLCB2YWx1ZUZpZWxkKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4cGFuZE5vZGVBbmRBbGxDaGlsZHJlbihub2RlOiBhbnksIHZhbHVlOiBib29sZWFuKSB7XG4gICAgbm9kZVt0aGlzLmV4cGFuZGVkRmllbGQoKV0gPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiB0aGlzLml0ZW1zUHJvbWlzZSAmJiBub2RlW3RoaXMuaGFzQ2hpbGRGaWVsZCgpXSAmJiAhbm9kZVt0aGlzLmNoaWxkcmVuRmllbGQoKV0/Lmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy5zZXROb2RlTG9hZGluZyhub2RlW3RoaXMudmFsdWVGaWVsZCgpXSwgdHJ1ZSk7XG4gICAgICBhd2FpdCB0aGlzLmZldGNoRGF0YShub2RlKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZVt0aGlzLmNoaWxkcmVuRmllbGQoKV0/Lmxlbmd0aCkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwobm9kZVt0aGlzLmNoaWxkcmVuRmllbGQoKV0ubWFwKChjaGlsZCkgPT4gdGhpcy5leHBhbmROb2RlQW5kQWxsQ2hpbGRyZW4oY2hpbGQsIHZhbHVlKSkpO1xuICAgIH1cbiAgfVxufVxuIiwiQGlmIChyZXNvbHZlZEl0ZW1zPy5sZW5ndGgpIHtcbiAgQGZvciAobm9kZSBvZiByZXNvbHZlZEl0ZW1zOyB0cmFjayAkaW5kZXgpIHtcbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJlY3Vyc2lvblwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+PC9uZy1jb250YWluZXI+XG4gIH1cbn0gQGVsc2Uge1xuICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5VGVtcGxhdGUgfHwgZW1wdHlcIj48L25nLWNvbnRhaW5lcj5cbn1cblxuPG5nLXRlbXBsYXRlICNyZWN1cnNpb24gbGV0LWl0ZW0+XG4gIEBpZiAoaXRlbVt2aXNpYmxlRmllbGQoKV0gIT09IGZhbHNlKSB7XG4gICAgPGF4LXRyZWUtdmlldy1pdGVtXG4gICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgIFtpc0V4cGFuZGVkXT1cIml0ZW1bZXhwYW5kZWRGaWVsZCgpXVwiXG4gICAgICBbKGlzQWN0aXZlKV09XCJpdGVtW2FjdGl2ZUZpZWxkKCldXCJcbiAgICAgIFtpc0xvYWRpbmddPVwiaXNOb2RlTG9hZGluZyhpdGVtW3ZhbHVlRmllbGQoKV0pXCJcbiAgICAgIFtleGVjdXRvckNoYW5nZXNdPVwiZXhlY3V0b3JDaGFuZ2VzKClcIlxuICAgID5cbiAgICAgIEBpZiAoXG4gICAgICAgIChzaG93Q2hlY2tib3goKSAmJiBzZWxlY3Rpb25TY29wZSgpID09PSAnYWxsJyAmJiBpdGVtW2hhc0NoZWNrYm94RmllbGQoKV0gIT09IGZhbHNlKSB8fFxuICAgICAgICAoc2hvd0NoZWNrYm94KCkgJiZcbiAgICAgICAgICBzZWxlY3Rpb25TY29wZSgpID09PSAncGFyZW50JyAmJlxuICAgICAgICAgIGl0ZW1bY2hpbGRyZW5GaWVsZCgpXT8ubGVuZ3RoICYmXG4gICAgICAgICAgaXRlbVtoYXNDaGVja2JveEZpZWxkKCldKSAhPT0gZmFsc2UgfHxcbiAgICAgICAgKHNob3dDaGVja2JveCgpICYmXG4gICAgICAgICAgc2VsZWN0aW9uU2NvcGUoKSA9PT0gJ2NoaWxkcmVuJyAmJlxuICAgICAgICAgICFpdGVtW2NoaWxkcmVuRmllbGQoKV0/Lmxlbmd0aCAmJlxuICAgICAgICAgIGl0ZW1baGFzQ2hlY2tib3hGaWVsZCgpXSAhPT0gZmFsc2UpXG4gICAgICApIHtcbiAgICAgICAgPGF4LWNoZWNrLWJveFxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtW2Rpc2FibGVGaWVsZCgpXVwiXG4gICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXRlbVtpbmRldGVybWluYXRlRmllbGQoKV1cIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbVtzZWxlY3RlZEZpZWxkKCldXCJcbiAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiaGFuZGxlTm9kZVNlbGVjdGlvbkNsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICA+PC9heC1jaGVjay1ib3g+XG4gICAgICB9XG4gICAgICBAaWYgKGl0ZW1baWNvbkZpZWxkKCldKSB7XG4gICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgPGF4LWljb24gW2ljb25dPVwiaXRlbVtpY29uRmllbGQoKV1cIj48L2F4LWljb24+XG4gICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgfVxuICAgICAgQGlmIChpdGVtW3RleHRGaWVsZCgpXSkge1xuICAgICAgICA8YXgtdGV4dD57eyBpdGVtW3RleHRGaWVsZCgpXSB9fTwvYXgtdGV4dD5cbiAgICAgIH1cblxuICAgICAgQGZvciAoY2hpbGQgb2YgaXRlbT8uW2NoaWxkcmVuRmllbGQoKV07IHRyYWNrICRpbmRleCkge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJlY3Vyc2lvblwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY2hpbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgfVxuICAgIDwvYXgtdHJlZS12aWV3LWl0ZW0+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHk+XG4gIHt7ICdAYWNvcmV4OmNvbW1vbi5nZW5lcmFsLm5vLXJlc3VsdC1mb3VuZCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==","import { AXCommonModule } from '@acorex/cdk/common';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXTreeViewItemComponent } from './tree-view-item.component';\nimport { AXTreeViewComponent } from './tree-view.component';\nimport * as i0 from \"@angular/core\";\nconst COMPONENT = [AXTreeViewComponent, AXTreeViewItemComponent];\nconst MODULES = [\n CommonModule,\n AXCommonModule,\n AXDecoratorModule,\n AXCheckBoxModule,\n AXFormModule,\n FormsModule,\n AXTooltipModule,\n AXLoadingModule,\n];\nexport class AXTreeViewModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTreeViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTreeViewModule, imports: [AXTreeViewComponent, AXTreeViewItemComponent, CommonModule,\n AXCommonModule,\n AXDecoratorModule,\n AXCheckBoxModule,\n AXFormModule,\n FormsModule,\n AXTooltipModule,\n AXLoadingModule], exports: [AXTreeViewComponent, AXTreeViewItemComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTreeViewModule, imports: [COMPONENT, MODULES] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTreeViewModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [...COMPONENT, ...MODULES],\n exports: [...COMPONENT],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3RyZWUtdmlldy9zcmMvbGliL3RyZWUtdmlldy5jb21wb25lbnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRTVELE1BQU0sU0FBUyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztBQUNqRSxNQUFNLE9BQU8sR0FBRztJQUNkLFlBQVk7SUFDWixjQUFjO0lBQ2QsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osV0FBVztJQUNYLGVBQWU7SUFDZixlQUFlO0NBQ2hCLENBQUM7QUFLRixNQUFNLE9BQU8sZ0JBQWdCOzhHQUFoQixnQkFBZ0I7K0dBQWhCLGdCQUFnQixZQWZWLG1CQUFtQixFQUFFLHVCQUF1QixFQUU3RCxZQUFZO1lBQ1osY0FBYztZQUNkLGlCQUFpQjtZQUNqQixnQkFBZ0I7WUFDaEIsWUFBWTtZQUNaLFdBQVc7WUFDWCxlQUFlO1lBQ2YsZUFBZSxhQVRFLG1CQUFtQixFQUFFLHVCQUF1QjsrR0FlbEQsZ0JBQWdCLFlBSGQsU0FBUyxFQUFLLE9BQU87OzJGQUd2QixnQkFBZ0I7a0JBSjVCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUM7b0JBQ25DLE9BQU8sRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYQ2hlY2tCb3hNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY2hlY2stYm94JztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhGb3JtTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IHsgQVhMb2FkaW5nTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2xvYWRpbmcnO1xuaW1wb3J0IHsgQVhUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFYVHJlZVZpZXdJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLXZpZXctaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhUcmVlVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdHJlZS12aWV3LmNvbXBvbmVudCc7XG5cbmNvbnN0IENPTVBPTkVOVCA9IFtBWFRyZWVWaWV3Q29tcG9uZW50LCBBWFRyZWVWaWV3SXRlbUNvbXBvbmVudF07XG5jb25zdCBNT0RVTEVTID0gW1xuICBDb21tb25Nb2R1bGUsXG4gIEFYQ29tbW9uTW9kdWxlLFxuICBBWERlY29yYXRvck1vZHVsZSxcbiAgQVhDaGVja0JveE1vZHVsZSxcbiAgQVhGb3JtTW9kdWxlLFxuICBGb3Jtc01vZHVsZSxcbiAgQVhUb29sdGlwTW9kdWxlLFxuICBBWExvYWRpbmdNb2R1bGUsXG5dO1xuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogWy4uLkNPTVBPTkVOVCwgLi4uTU9EVUxFU10sXG4gIGV4cG9ydHM6IFsuLi5DT01QT05FTlRdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFRyZWVWaWV3TW9kdWxlIHt9XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvbXBvbmVudHMtdHJlZS12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy90cmVlLXZpZXcvc3JjL2Fjb3JleC1jb21wb25lbnRzLXRyZWUtdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-components-tree-view.mjs","sources":["../../../../packages/components/tree-view/src/lib/tree-view.service.ts","../../../../packages/components/tree-view/src/lib/tree-view.component.ts","../../../../packages/components/tree-view/src/lib/tree-view.component.html","../../../../packages/components/tree-view/src/lib/tree-view.module.ts","../../../../packages/components/tree-view/src/acorex-components-tree-view.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { AXTreeViewChildrenSelectionState, AXTreeViewFlatNode, AXTreeViewNode } from './tree-view.types';\n\n/**\n * Service for tree node operations\n * Handles all business logic for tree node manipulation\n */\n@Injectable()\nexport class AXTreeViewService {\n // ==================== Constants ====================\n private static readonly ROOT_LIST_ID = 'ax-tree-view-root-list';\n private static readonly NODE_DROP_PREFIX = 'ax-tree-view-node-drop-';\n private static readonly LIST_PREFIX = 'ax-tree-view-list-';\n\n // ==================== Node Finding & Traversal ====================\n /**\n * Find a node by ID in the tree\n */\n findNodeById(nodes: AXTreeViewNode[], id: string, idField = 'id', childrenField = 'children'): AXTreeViewNode | null {\n for (const node of nodes) {\n if ((node[idField] as string) === id) return node;\n const children = node[childrenField] as AXTreeViewNode[] | undefined;\n if (children) {\n const found = this.findNodeById(children, id, idField, childrenField);\n if (found) return found;\n }\n }\n return null;\n }\n\n /**\n * Find parent node of a given node\n */\n findParentNode(\n nodes: AXTreeViewNode[],\n targetNode: AXTreeViewNode,\n idField = 'id',\n childrenField = 'children',\n ): AXTreeViewNode | undefined {\n const targetId = targetNode[idField] as string;\n for (const node of nodes) {\n const children = node[childrenField] as AXTreeViewNode[] | undefined;\n if (children?.some((child) => (child[idField] as string) === targetId)) {\n return node;\n }\n if (children) {\n const found = this.findParentNode(children, targetNode, idField, childrenField);\n if (found) return found;\n }\n }\n return undefined;\n }\n\n /**\n * Check if targetNode is a descendant of ancestorNode (or the same node)\n * Prevents circular references by checking if target exists in ancestor's children tree\n */\n isValidDropTarget(\n movedNode: AXTreeViewNode,\n targetNode: AXTreeViewNode,\n idField = 'id',\n childrenField = 'children',\n ): boolean {\n const movedId = movedNode[idField] as string;\n const targetId = targetNode[idField] as string;\n if (movedId === targetId || this.isNodeDescendantOf(targetNode, movedNode, idField, childrenField)) {\n return false;\n }\n return true;\n }\n\n /**\n * Check if targetNode is a descendant of ancestorNode\n */\n private isNodeDescendantOf(\n targetNode: AXTreeViewNode,\n ancestorNode: AXTreeViewNode,\n idField = 'id',\n childrenField = 'children',\n ): boolean {\n const targetId = targetNode[idField] as string;\n const ancestorId = ancestorNode[idField] as string;\n if (targetId === ancestorId) {\n return true;\n }\n\n const children = ancestorNode[childrenField] as AXTreeViewNode[] | undefined;\n if (!children || children.length === 0) {\n return false;\n }\n\n for (const child of children) {\n const childId = child[idField] as string;\n if (childId === targetId) {\n return true;\n }\n if (this.isNodeDescendantOf(targetNode, child, idField, childrenField)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Build a flat list of all visible focusable nodes\n */\n buildFlatNodeList(\n nodes: AXTreeViewNode[],\n hiddenField = 'hidden',\n disabledField = 'disabled',\n expandedField = 'expanded',\n childrenField = 'children',\n ): AXTreeViewFlatNode[] {\n const flatList: AXTreeViewFlatNode[] = [];\n const traverse = (nodeList: AXTreeViewNode[], level: number, parent?: AXTreeViewNode): void => {\n for (const node of nodeList) {\n const hidden = node[hiddenField] as boolean | undefined;\n const disabled = node[disabledField] as boolean | undefined;\n if (hidden !== true && !disabled) {\n flatList.push({ node, level, parent });\n const expanded = node[expandedField] as boolean | undefined;\n const children = node[childrenField] as AXTreeViewNode[] | undefined;\n if (expanded && children) {\n traverse(children, level + 1, node);\n }\n }\n }\n };\n traverse(nodes, 0);\n return flatList;\n }\n\n // ==================== Node State Checks ====================\n /**\n * Check if node has children\n */\n hasChildren(node: AXTreeViewNode, childrenField = 'children'): boolean {\n const children = node[childrenField] as AXTreeViewNode[] | undefined;\n return Boolean(children?.length);\n }\n\n /**\n * Check if node can be lazy loaded\n */\n canLazyLoad(\n node: AXTreeViewNode,\n isLazyDataSource: boolean,\n childrenCountField = 'childrenCount',\n childrenField = 'children',\n ): boolean {\n const childrenCount = node[childrenCountField] as number | undefined;\n return isLazyDataSource && Boolean(childrenCount && childrenCount > 0 && !this.hasChildren(node, childrenField));\n }\n\n // ==================== Selection Management ====================\n /**\n * Recursively select/deselect all children\n */\n selectAllChildren(\n children: AXTreeViewNode[],\n selected: boolean,\n selectedField = 'selected',\n indeterminateField = 'indeterminate',\n childrenField = 'children',\n ): void {\n for (const child of children) {\n child[selectedField] = selected;\n child[indeterminateField] = false;\n const childChildren = child[childrenField] as AXTreeViewNode[] | undefined;\n if (childChildren) {\n this.selectAllChildren(childChildren, selected, selectedField, indeterminateField, childrenField);\n }\n }\n }\n\n /**\n * Get selection state of children\n */\n getChildrenSelectionState(\n children: AXTreeViewNode[],\n selectedField = 'selected',\n indeterminateField = 'indeterminate',\n ): AXTreeViewChildrenSelectionState {\n let selectedCount = 0;\n let indeterminateCount = 0;\n\n for (const child of children) {\n const selected = child[selectedField] as boolean | undefined;\n const indeterminate = child[indeterminateField] as boolean | undefined;\n if (selected && !indeterminate) {\n selectedCount++;\n }\n if (indeterminate) {\n indeterminateCount++;\n }\n }\n\n return {\n allSelected: selectedCount === children.length,\n someSelected: selectedCount > 0 || indeterminateCount > 0,\n };\n }\n\n /**\n * Update parent node states based on children selection (with intermediate state support)\n */\n updateParentStates(\n nodes: AXTreeViewNode[],\n changedNode: AXTreeViewNode,\n intermediateState: boolean,\n idField = 'id',\n childrenField = 'children',\n selectedField = 'selected',\n indeterminateField = 'indeterminate',\n ): void {\n const parent = this.findParentNode(nodes, changedNode, idField, childrenField);\n const parentChildren = parent?.[childrenField] as AXTreeViewNode[] | undefined;\n if (!parent || !parentChildren) return;\n\n const { allSelected, someSelected } = this.getChildrenSelectionState(\n parentChildren,\n selectedField,\n indeterminateField,\n );\n\n if (allSelected) {\n parent[selectedField] = true;\n parent[indeterminateField] = false;\n } else if (someSelected) {\n if (intermediateState) {\n parent[selectedField] = true;\n parent[indeterminateField] = true;\n } else {\n parent[selectedField] = false;\n parent[indeterminateField] = false;\n }\n } else {\n parent[selectedField] = false;\n parent[indeterminateField] = false;\n }\n\n this.updateParentStates(\n nodes,\n parent,\n intermediateState,\n idField,\n childrenField,\n selectedField,\n indeterminateField,\n );\n }\n\n /**\n * Recursively deselect all nodes\n */\n deselectAllNodes(\n nodes: AXTreeViewNode[],\n selectedField = 'selected',\n indeterminateField = 'indeterminate',\n childrenField = 'children',\n ): void {\n for (const node of nodes) {\n node[selectedField] = false;\n node[indeterminateField] = false;\n const children = node[childrenField] as AXTreeViewNode[] | undefined;\n if (children) {\n this.deselectAllNodes(children, selectedField, indeterminateField, childrenField);\n }\n }\n }\n\n /**\n * Recursively set selection state for all nodes\n */\n setAllSelection(\n nodes: AXTreeViewNode[],\n selected: boolean,\n selectedField = 'selected',\n indeterminateField = 'indeterminate',\n childrenField = 'children',\n ): void {\n for (const node of nodes) {\n node[selectedField] = selected;\n node[indeterminateField] = false;\n const children = node[childrenField] as AXTreeViewNode[] | undefined;\n if (children) {\n this.setAllSelection(children, selected, selectedField, indeterminateField, childrenField);\n }\n }\n }\n\n /**\n * Recursively count selected nodes\n */\n countSelected(nodes: AXTreeViewNode[], selectedField = 'selected', childrenField = 'children'): number {\n let count = 0;\n for (const node of nodes) {\n if (node[selectedField] as boolean) count++;\n const children = node[childrenField] as AXTreeViewNode[] | undefined;\n if (children) {\n count += this.countSelected(children, selectedField, childrenField);\n }\n }\n return count;\n }\n\n /**\n * Recursively collect selected nodes\n */\n collectSelected(\n nodes: AXTreeViewNode[],\n result: AXTreeViewNode[],\n selectedField = 'selected',\n childrenField = 'children',\n ): void {\n for (const node of nodes) {\n if (node[selectedField] as boolean) result.push(node);\n const children = node[childrenField] as AXTreeViewNode[] | undefined;\n if (children) {\n this.collectSelected(children, result, selectedField, childrenField);\n }\n }\n }\n\n /**\n * Recursively remove selected nodes\n */\n removeSelected(\n nodes: AXTreeViewNode[],\n selectedField = 'selected',\n indeterminateField = 'indeterminate',\n childrenField = 'children',\n ): void {\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n const selected = node[selectedField] as boolean | undefined;\n const indeterminate = node[indeterminateField] as boolean | undefined;\n if (selected && !indeterminate) {\n nodes.splice(i, 1);\n } else {\n const children = node[childrenField] as AXTreeViewNode[] | undefined;\n if (children) {\n this.removeSelected(children, selectedField, indeterminateField, childrenField);\n }\n }\n }\n }\n\n /**\n * Recursively update all parent states in the tree (used after deletion)\n */\n updateAllParentStates(\n nodes: AXTreeViewNode[],\n intermediateState: boolean,\n childrenField = 'children',\n selectedField = 'selected',\n indeterminateField = 'indeterminate',\n ): void {\n for (const node of nodes) {\n const children = node[childrenField] as AXTreeViewNode[] | undefined;\n if (children && children.length > 0) {\n this.updateAllParentStates(children, intermediateState, childrenField, selectedField, indeterminateField);\n\n const { allSelected, someSelected } = this.getChildrenSelectionState(\n children,\n selectedField,\n indeterminateField,\n );\n\n if (allSelected) {\n node[selectedField] = true;\n node[indeterminateField] = false;\n } else if (someSelected) {\n if (intermediateState) {\n node[selectedField] = true;\n node[indeterminateField] = true;\n } else {\n node[selectedField] = false;\n node[indeterminateField] = false;\n }\n } else {\n node[selectedField] = false;\n node[indeterminateField] = false;\n }\n }\n }\n }\n\n // ==================== Expansion Management ====================\n /**\n * Recursively set expanded state (with lazy loading)\n */\n async setExpandedState(\n nodes: AXTreeViewNode[],\n expanded: boolean,\n isLazyDataSource: boolean,\n loadNodeChildren: (node: AXTreeViewNode) => Promise<void>,\n expandedField = 'expanded',\n childrenField = 'children',\n childrenCountField = 'childrenCount',\n ): Promise<void> {\n for (const node of nodes) {\n const hasChildren = this.hasChildren(node, childrenField);\n const canLazyLoad = this.canLazyLoad(node, isLazyDataSource, childrenCountField, childrenField);\n\n if (hasChildren || canLazyLoad) {\n if (expanded && canLazyLoad) {\n await loadNodeChildren(node);\n }\n node[expandedField] = expanded;\n const children = node[childrenField] as AXTreeViewNode[] | undefined;\n if (children) {\n await this.setExpandedState(\n children,\n expanded,\n isLazyDataSource,\n loadNodeChildren,\n expandedField,\n childrenField,\n childrenCountField,\n );\n }\n }\n }\n }\n\n // ==================== Drag & Drop Helpers ====================\n /**\n * Get array reference by drop list ID\n */\n getArrayByListId(\n nodes: AXTreeViewNode[],\n listId: string,\n idField = 'id',\n childrenField = 'children',\n ): AXTreeViewNode[] | null {\n if (listId === AXTreeViewService.ROOT_LIST_ID) {\n return nodes;\n }\n\n if (listId.startsWith(AXTreeViewService.NODE_DROP_PREFIX)) {\n const nodeId = listId.replace(AXTreeViewService.NODE_DROP_PREFIX, '');\n const node = this.findNodeById(nodes, nodeId, idField, childrenField);\n return node ? [node] : null;\n }\n\n const nodeId = listId.replace(AXTreeViewService.LIST_PREFIX, '');\n const node = this.findNodeById(nodes, nodeId, idField, childrenField);\n const children = node?.[childrenField] as AXTreeViewNode[] | undefined;\n return children ?? null;\n }\n\n /**\n * Find parent node by list ID\n */\n findParentByListId(\n nodes: AXTreeViewNode[],\n listId: string,\n idField = 'id',\n childrenField = 'children',\n ): AXTreeViewNode | undefined {\n if (listId === AXTreeViewService.ROOT_LIST_ID) {\n return undefined;\n }\n\n const prefix = listId.startsWith(AXTreeViewService.NODE_DROP_PREFIX)\n ? AXTreeViewService.NODE_DROP_PREFIX\n : AXTreeViewService.LIST_PREFIX;\n const nodeId = listId.replace(prefix, '');\n return this.findNodeById(nodes, nodeId, idField, childrenField) ?? undefined;\n }\n\n /**\n * Generate unique list ID for each node\n */\n getListId(node: AXTreeViewNode | undefined, idField = 'id'): string {\n if (!node) return AXTreeViewService.ROOT_LIST_ID;\n const nodeId = node[idField] as string;\n return `${AXTreeViewService.LIST_PREFIX}${nodeId}`;\n }\n\n /**\n * Get root list ID constant\n */\n getRootListId(): string {\n return AXTreeViewService.ROOT_LIST_ID;\n }\n\n /**\n * Get node drop prefix constant\n */\n getNodeDropPrefix(): string {\n return AXTreeViewService.NODE_DROP_PREFIX;\n }\n\n /**\n * Get list prefix constant\n */\n getListPrefix(): string {\n return AXTreeViewService.LIST_PREFIX;\n }\n\n // ==================== Node Utilities ====================\n /**\n * Get all nodes in a flat array\n */\n getAllNodes(nodes: AXTreeViewNode[], childrenField = 'children'): AXTreeViewNode[] {\n const allNodes: AXTreeViewNode[] = [];\n const traverse = (nodeList: AXTreeViewNode[]): void => {\n for (const node of nodeList) {\n allNodes.push(node);\n const children = node[childrenField] as AXTreeViewNode[] | undefined;\n if (children) {\n traverse(children);\n }\n }\n };\n traverse(nodes);\n return allNodes;\n }\n\n /**\n * Get the path to a node (array of parent nodes from root to node)\n */\n getNodePath(nodes: AXTreeViewNode[], nodeId: string, idField = 'id', childrenField = 'children'): AXTreeViewNode[] {\n const path: AXTreeViewNode[] = [];\n const node = this.findNodeById(nodes, nodeId, idField, childrenField);\n if (!node) {\n return path;\n }\n\n let current: AXTreeViewNode | null = node;\n while (current) {\n path.unshift(current);\n const parent = this.findParentNode(nodes, current, idField, childrenField);\n current = parent ?? null;\n }\n\n return path;\n }\n\n /**\n * Get the level/depth of a node (0 = root level)\n */\n getNodeLevel(nodes: AXTreeViewNode[], nodeId: string, idField = 'id', childrenField = 'children'): number {\n const path = this.getNodePath(nodes, nodeId, idField, childrenField);\n return path.length > 0 ? path.length - 1 : -1;\n }\n\n /**\n * Get sibling nodes of a given node\n */\n getSiblings(nodes: AXTreeViewNode[], nodeId: string, idField = 'id', childrenField = 'children'): AXTreeViewNode[] {\n const node = this.findNodeById(nodes, nodeId, idField, childrenField);\n if (!node) {\n return [];\n }\n\n const parent = this.findParentNode(nodes, node, idField, childrenField);\n const siblingsArray = (parent?.[childrenField] as AXTreeViewNode[] | undefined) ?? nodes;\n\n return siblingsArray.filter((n) => (n[idField] as string) !== nodeId);\n }\n\n /**\n * Clone a node (creates a deep copy)\n */\n cloneNode(\n node: AXTreeViewNode,\n idField = 'id',\n titleField = 'title',\n tooltipField = 'tooltip',\n iconField = 'icon',\n expandedField = 'expanded',\n selectedField = 'selected',\n indeterminateField = 'indeterminate',\n disabledField = 'disabled',\n hiddenField = 'hidden',\n childrenCountField = 'childrenCount',\n dataField = 'data',\n childrenField = 'children',\n ): AXTreeViewNode {\n const cloned: AXTreeViewNode = {\n [idField]: `${node[idField] as string}-clone-${Date.now()}`,\n [titleField]: node[titleField],\n [tooltipField]: node[tooltipField],\n [iconField]: node[iconField],\n [expandedField]: node[expandedField],\n [selectedField]: false, // Cloned nodes are not selected by default\n [indeterminateField]: false,\n [disabledField]: node[disabledField],\n [hiddenField]: node[hiddenField],\n [childrenCountField]: node[childrenCountField],\n [dataField]: node[dataField] ? JSON.parse(JSON.stringify(node[dataField])) : undefined,\n };\n\n const children = node[childrenField] as AXTreeViewNode[] | undefined;\n if (children && children.length > 0) {\n cloned[childrenField] = children.map((child) =>\n this.cloneNode(\n child,\n idField,\n titleField,\n tooltipField,\n iconField,\n expandedField,\n selectedField,\n indeterminateField,\n disabledField,\n hiddenField,\n childrenCountField,\n dataField,\n childrenField,\n ),\n );\n cloned[childrenCountField] = (cloned[childrenField] as AXTreeViewNode[]).length;\n }\n\n return cloned;\n }\n\n // ==================== Node Manipulation ====================\n /**\n * Move a node to a new parent in the tree\n * @param nodes - Root nodes array\n * @param nodeId - The ID of the node to move\n * @param newParentId - The ID of the new parent (undefined for root level)\n * @param index - Optional index to insert at (default: append to end)\n * @param idField - Field name for node ID\n * @param childrenField - Field name for children array\n * @param childrenCountField - Field name for children count\n * @param expandedField - Field name for expanded state\n * @returns Object with success status, moved node, previous parent, new parent, and indices\n */\n moveNode(\n nodes: AXTreeViewNode[],\n nodeId: string,\n newParentId: string | undefined,\n index: number | undefined,\n idField = 'id',\n childrenField = 'children',\n childrenCountField = 'childrenCount',\n expandedField = 'expanded',\n ): {\n success: boolean;\n movedNode?: AXTreeViewNode;\n previousParent?: AXTreeViewNode;\n newParent?: AXTreeViewNode;\n previousIndex: number;\n currentIndex: number;\n } {\n const node = this.findNodeById(nodes, nodeId, idField, childrenField);\n if (!node) {\n return { success: false, previousIndex: -1, currentIndex: -1 };\n }\n\n // Find current parent\n const currentParent = this.findParentNode(nodes, node, idField, childrenField);\n const currentParentChildren = currentParent\n ? (currentParent[childrenField] as AXTreeViewNode[] | undefined)\n : undefined;\n const currentArray = currentParentChildren ?? nodes;\n\n // Find and remove from current location\n const currentIndex = currentArray.findIndex((n) => (n[idField] as string) === nodeId);\n if (currentIndex === -1) {\n return { success: false, previousIndex: -1, currentIndex: -1 };\n }\n\n const movedNode = currentArray.splice(currentIndex, 1)[0];\n\n // Find new parent\n let targetArray: AXTreeViewNode[];\n let newParent: AXTreeViewNode | undefined;\n\n if (newParentId) {\n newParent = this.findNodeById(nodes, newParentId, idField, childrenField);\n if (!newParent) {\n // Restore node if new parent not found\n currentArray.splice(currentIndex, 0, movedNode);\n return { success: false, previousIndex: currentIndex, currentIndex: -1 };\n }\n\n // Validate drop target\n if (!this.isValidDropTarget(movedNode, newParent, idField, childrenField)) {\n // Restore node if invalid drop target\n currentArray.splice(currentIndex, 0, movedNode);\n return { success: false, previousIndex: currentIndex, currentIndex: -1 };\n }\n\n let newParentChildren = newParent[childrenField] as AXTreeViewNode[] | undefined;\n if (!newParentChildren) {\n newParentChildren = [];\n newParent[childrenField] = newParentChildren;\n }\n targetArray = newParentChildren;\n } else {\n targetArray = nodes;\n }\n\n // Calculate new index before inserting\n const newIndex = index !== undefined && index >= 0 && index <= targetArray.length ? index : targetArray.length;\n\n // Insert at new location\n if (index !== undefined && index >= 0 && index <= targetArray.length) {\n targetArray.splice(index, 0, movedNode);\n } else {\n targetArray.push(movedNode);\n }\n\n // Update childrenCount\n if (currentParent) {\n const updatedChildren = currentParent[childrenField] as AXTreeViewNode[] | undefined;\n currentParent[childrenCountField] = updatedChildren?.length ?? 0;\n }\n if (newParent) {\n const updatedChildren = newParent[childrenField] as AXTreeViewNode[] | undefined;\n newParent[childrenCountField] = updatedChildren?.length ?? 0;\n newParent[expandedField] = true; // Auto-expand new parent\n }\n\n return {\n success: true,\n movedNode,\n previousParent: currentParent,\n newParent,\n previousIndex: currentIndex,\n currentIndex: newIndex,\n };\n }\n\n /**\n * Edit/update a node's properties\n * @param nodes - Root nodes array\n * @param nodeId - The ID of the node to edit\n * @param updates - Partial node object with properties to update\n * @param idField - Field name for node ID\n * @param childrenField - Field name for children array\n * @param childrenCountField - Field name for children count\n * @returns The updated node if found, null otherwise\n */\n editNode(\n nodes: AXTreeViewNode[],\n nodeId: string,\n updates: Partial<AXTreeViewNode>,\n idField = 'id',\n childrenField = 'children',\n childrenCountField = 'childrenCount',\n ): AXTreeViewNode | null {\n const node = this.findNodeById(nodes, nodeId, idField, childrenField);\n if (!node) {\n return null;\n }\n\n // Update node properties\n Object.assign(node, updates);\n\n // If children array is provided, ensure it exists and update childrenCount\n if (updates[childrenField] !== undefined) {\n const children = updates[childrenField] as AXTreeViewNode[] | undefined;\n node[childrenField] = children;\n node[childrenCountField] = children?.length;\n }\n\n return node;\n }\n\n /**\n * Add a child node to a parent node\n * @param nodes - Root nodes array\n * @param parentId - The ID of the parent node\n * @param childNode - The child node to add\n * @param index - Optional index to insert at (default: append to end)\n * @param idField - Field name for node ID\n * @param childrenField - Field name for children array\n * @param childrenCountField - Field name for children count\n * @param expandedField - Field name for expanded state\n * @returns The parent node if found and child was added, null otherwise\n */\n addChild(\n nodes: AXTreeViewNode[],\n parentId: string,\n childNode: AXTreeViewNode,\n index: number | undefined,\n idField = 'id',\n childrenField = 'children',\n childrenCountField = 'childrenCount',\n expandedField = 'expanded',\n ): AXTreeViewNode | null {\n const parent = this.findNodeById(nodes, parentId, idField, childrenField);\n if (!parent) {\n return null;\n }\n\n // Ensure children array exists\n let children = parent[childrenField] as AXTreeViewNode[] | undefined;\n if (!children) {\n children = [];\n parent[childrenField] = children;\n }\n\n // Insert or append child\n if (index !== undefined && index >= 0 && index <= children.length) {\n children.splice(index, 0, childNode);\n } else {\n children.push(childNode);\n }\n\n // Update childrenCount\n parent[childrenCountField] = children.length;\n\n // Auto-expand parent if it was collapsed\n if (!(parent[expandedField] as boolean | undefined)) {\n parent[expandedField] = true;\n }\n\n return parent;\n }\n\n /**\n * Remove a node from the tree\n * @param nodes - Root nodes array\n * @param nodeId - The ID of the node to remove\n * @param idField - Field name for node ID\n * @param childrenField - Field name for children array\n * @param childrenCountField - Field name for children count\n * @returns The removed node if found, null otherwise\n */\n removeNode(\n nodes: AXTreeViewNode[],\n nodeId: string,\n idField = 'id',\n childrenField = 'children',\n childrenCountField = 'childrenCount',\n ): AXTreeViewNode | null {\n const node = this.findNodeById(nodes, nodeId, idField, childrenField);\n if (!node) {\n return null;\n }\n\n // Find parent to remove from its children array\n const parent = this.findParentNode(nodes, node, idField, childrenField);\n const parentChildren = parent ? (parent[childrenField] as AXTreeViewNode[] | undefined) : undefined;\n const targetArray = parentChildren ?? nodes;\n\n // Find and remove the node\n const index = targetArray.findIndex((n) => (n[idField] as string) === nodeId);\n if (index !== -1) {\n const removed = targetArray.splice(index, 1)[0];\n\n // Update parent's childrenCount if it exists\n if (parent) {\n const updatedChildren = parent[childrenField] as AXTreeViewNode[] | undefined;\n parent[childrenCountField] = updatedChildren?.length ?? 0;\n }\n\n return removed;\n }\n\n return null;\n }\n\n /**\n * Validate node structure (check for required fields and circular references)\n */\n validateNode(\n node: AXTreeViewNode,\n visitedIds: Set<string> = new Set(),\n idField = 'id',\n titleField = 'title',\n childrenField = 'children',\n childrenCountField = 'childrenCount',\n ): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n const nodeId = node[idField] as string | undefined;\n const nodeTitle = node[titleField] as string | undefined;\n\n if (!nodeId) {\n errors.push(`Node must have an ${idField}`);\n }\n\n if (!nodeTitle) {\n errors.push(`Node must have a ${titleField}`);\n }\n\n if (nodeId && visitedIds.has(nodeId)) {\n errors.push(`Circular reference detected: node ${nodeId} appears multiple times in the tree`);\n }\n\n const children = node[childrenField] as AXTreeViewNode[] | undefined;\n if (children) {\n const newVisited = new Set(visitedIds);\n if (nodeId) {\n newVisited.add(nodeId);\n }\n\n for (const child of children) {\n const childValidation = this.validateNode(\n child,\n newVisited,\n idField,\n titleField,\n childrenField,\n childrenCountField,\n );\n if (!childValidation.valid) {\n errors.push(...childValidation.errors.map((e) => `Child of ${nodeId}: ${e}`));\n }\n }\n\n const childrenCount = node[childrenCountField] as number | undefined;\n if (childrenCount !== undefined && childrenCount !== children.length) {\n errors.push(\n `Node ${nodeId}: ${childrenCountField} (${childrenCount}) does not match ${childrenField} array length (${children.length})`,\n );\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n }\n}\n","import { AXValueChangedEvent } from '@acorex/cdk/common';\nimport {\n AXDragDirective,\n AXDragHandleDirective,\n AXDropListDirective,\n AXDropListDroppedEvent,\n moveItemInArray,\n transferArrayItem,\n} from '@acorex/cdk/drag-drop';\nimport { AXFocusTrapDirective } from '@acorex/cdk/focus-trap';\nimport { AXBadgeComponent } from '@acorex/components/badge';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXCheckBoxComponent } from '@acorex/components/check-box';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { CommonModule, NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { map } from 'rxjs/operators';\nimport { AXTreeViewService } from './tree-view.service';\nimport {\n AXTreeViewBeforeDropEvent,\n AXTreeViewCallback,\n AXTreeViewDataSource,\n AXTreeViewDragArea,\n AXTreeViewDragBehavior,\n AXTreeViewDropEvent,\n AXTreeViewFlatNode,\n AXTreeViewNode,\n AXTreeViewNodeClickEvent,\n AXTreeViewNodeDoubleClickEvent,\n AXTreeViewNodeSelectEvent,\n AXTreeViewItemTemplateContext as AXTreeViewNodeTemplateContext,\n AXTreeViewNodeToggleEvent,\n AXTreeViewSelectionBehavior,\n AXTreeViewSelectionChangeEvent,\n AXTreeViewSelectMode,\n AXTreeViewViewLook,\n} from './tree-view.types';\n\n@Component({\n selector: 'ax-tree-view',\n templateUrl: './tree-view.component.html',\n styleUrls: ['./tree-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [AXTreeViewService],\n imports: [\n CommonModule,\n FormsModule,\n AXDragDirective,\n AXDragHandleDirective,\n AXDropListDirective,\n AXFocusTrapDirective,\n NgTemplateOutlet,\n AXButtonComponent,\n AXCheckBoxComponent,\n AXBadgeComponent,\n AXDecoratorIconComponent,\n AXTooltipDirective,\n AXTranslatorPipe,\n ],\n host: {\n class: 'ax-tree-view',\n role: 'tree',\n tabindex: '0',\n '[class.ax-tree-view-default]': \"look() === 'default'\",\n '[class.ax-tree-view-card]': \"look() === 'card'\",\n '[class.ax-tree-view-with-line]': \"look() === 'with-line'\",\n '[class.ax-tree-view-rtl]': 'isRtl',\n '[style.--ax-tree-view-indent-size]': \"indentSize() + 'px'\",\n '[style.--ax-tree-view-line-offset]': \"(indentSize() / 2) + 'px'\",\n '[attr.aria-label]': '\"Tree navigation\"',\n '(keydown)': 'handleKeyDown($event)',\n '(focus)': 'onTreeFocus($event)',\n '(blur)': 'onTreeBlur($event)',\n },\n})\nexport class AXTreeViewComponent {\n // ==================== Dependencies ====================\n private readonly treeService = inject(AXTreeViewService);\n private readonly platformService = inject(AXPlatform);\n private readonly destroyRef = inject(DestroyRef);\n\n // ==================== Inputs ====================\n /** Tree data source - can be static array or lazy loading function */\n readonly datasource = model.required<AXTreeViewDataSource>();\n\n /** Selection mode: 'single' (click to select) or 'multiple' (checkbox selection). Default: `'single'`. In multiple mode, checkboxes are automatically shown. */\n readonly selectMode = input<AXTreeViewSelectMode>('single');\n\n /** Selection behavior: 'all' (select anything, no special behavior), 'intermediate' (parent indeterminate state when children selected), 'leaf' (only leaf nodes selectable), 'nested' (selecting parent selects all children). Default: `'intermediate'` */\n readonly selectionBehavior = input<AXTreeViewSelectionBehavior>('intermediate');\n\n /** Drag area: 'handler' (drag handle), 'item' (entire item). Default: `'handler'` */\n readonly dragArea = input<AXTreeViewDragArea>('handler');\n\n /** Drag behavior: 'none' (disabled), 'order-only' (reorder only), 'move' (move between parents), 'both' (allow both). Default: `'none'` */\n readonly dragBehavior = input<AXTreeViewDragBehavior>('none');\n\n /** Whether to show icons. Default: `true` */\n readonly showIcons = input(true);\n\n /** Whether to show children count badge. Default: `true` */\n readonly showChildrenBadge = input(true);\n\n /** Custom icon for expanded nodes. Default: `'fa-solid fa-chevron-down'` */\n readonly expandedIcon = input('fa-solid fa-chevron-down');\n\n /** Custom icon for collapsed nodes. Default: `'fa-solid fa-chevron-right'` */\n readonly collapsedIcon = input('fa-solid fa-chevron-right');\n\n /** Indent size in pixels for each level. Default: `16` */\n readonly indentSize = input(16);\n\n /** Visual style variant. Default: `'default'` */\n readonly look = input<AXTreeViewViewLook>('default');\n\n /** Custom template for tree items. Default: `undefined` */\n readonly nodeTemplate = input<TemplateRef<AXTreeViewNodeTemplateContext>>();\n\n /** Field name for node ID. Default: `'id'` */\n readonly idField = input('id');\n\n /** Field name for node title. Default: `'title'` */\n readonly titleField = input('title');\n\n /** Field name for node tooltip. Default: `'tooltip'` */\n readonly tooltipField = input('tooltip');\n\n /** Field name for node icon. Default: `'icon'` */\n readonly iconField = input('icon');\n\n /** Field name for expanded state. Default: `'expanded'` */\n readonly expandedField = input('expanded');\n\n /** Field name for selected state. Default: `'selected'` */\n readonly selectedField = input('selected');\n\n /** Field name for indeterminate state. Default: `'indeterminate'` */\n readonly indeterminateField = input('indeterminate');\n\n /** Field name for disabled state. Default: `'disabled'` */\n readonly disabledField = input('disabled');\n\n /** Field name for hidden state. Default: `'hidden'` */\n readonly hiddenField = input('hidden');\n\n /** Field name for children array. Default: `'children'` */\n readonly childrenField = input('children');\n\n /** Field name for children count. Default: `'childrenCount'` */\n readonly childrenCountField = input('childrenCount');\n\n /** Field name for custom data. Default: `'data'` */\n readonly dataField = input('data');\n\n /** Whether disabled state is inherited from parent nodes. Default: `true`. */\n readonly inheritDisabled = input(true);\n\n // ==================== Outputs ====================\n /** Emitted before a drop operation - set canceled to true to prevent drop */\n readonly onBeforeDrop = output<AXTreeViewBeforeDropEvent>();\n\n /** Emitted when a node is toggled (expanded/collapsed) */\n readonly onNodeToggle = output<AXTreeViewNodeToggleEvent>();\n\n /** Emitted when a node is selected/deselected */\n readonly onNodeSelect = output<AXTreeViewNodeSelectEvent>();\n\n /** Emitted when a node is double-clicked */\n readonly onNodeDoubleClick = output<AXTreeViewNodeDoubleClickEvent>();\n\n /** Emitted when a node is double-clicked */\n readonly onNodeClick = output<AXTreeViewNodeClickEvent>();\n\n /** Emitted when selection changes - returns all currently selected nodes */\n readonly onSelectionChange = output<AXTreeViewSelectionChangeEvent>();\n\n /** Emitted when nodes are reordered within the same parent */\n readonly onOrderChange = output<AXTreeViewDropEvent>();\n\n /** Emitted when a node is moved to a different parent */\n readonly onMoveChange = output<AXTreeViewDropEvent>();\n\n /** Emitted for any item change (order or move) */\n readonly onItemsChange = output<AXTreeViewDropEvent>();\n\n // ==================== Internal State ====================\n /** Internal signal for tree nodes */\n protected readonly nodes = signal<AXTreeViewNode[]>([]);\n\n /** Internal signal for tracking loading state of individual nodes */\n protected readonly loadingNodes = signal<Set<string>>(new Set());\n\n /** Signal for tracking root/tree-level loading state (used by reloadData) */\n private readonly _isLoading = signal(false);\n\n /** Public readonly signal for tree loading state - can be used in templates */\n readonly isLoading = this._isLoading.asReadonly();\n\n /** Currently focused node ID for keyboard navigation */\n protected readonly focusedNodeId = signal<string | null>(null);\n\n /** RTL detection signal */\n protected readonly isRtl = signal(this.platformService.isRtl());\n\n /** active node id */\n protected readonly activeNodeId = signal<string | null>(null);\n\n /** Computed chevron icons that flip for RTL */\n protected readonly directionExpandedIcon = computed(() => this.expandedIcon());\n\n protected readonly directionCollapsedIcon = computed(() => {\n const isRtlDirection = this.isRtl();\n const defaultIcon = this.collapsedIcon();\n\n if (isRtlDirection && defaultIcon === 'fa-solid fa-chevron-right') {\n return 'fa-solid fa-chevron-left';\n }\n if (!isRtlDirection && defaultIcon === 'fa-solid fa-chevron-left') {\n return 'fa-solid fa-chevron-right';\n }\n return defaultIcon;\n });\n\n /** Flag to prevent infinite loops when syncing datasource */\n private isUpdatingFromDatasource = false;\n\n /** Computed to check if datasource is a function */\n private readonly isLazyDataSource = computed(() => typeof this.datasource() === 'function');\n\n /** Computed: Returns true when selection is restricted to leaf nodes only */\n protected readonly isLeafOnlyMode = computed(() => this.selectionBehavior() === 'leaf');\n\n /** Computed: Returns true when selecting a parent automatically selects all its children */\n protected readonly cascadesToChildren = computed(() => {\n const behavior = this.selectionBehavior();\n return behavior === 'nested' || behavior === 'intermediate-nested';\n });\n\n /** Computed: Returns true when parent nodes show indeterminate state based on children selection */\n protected readonly hasIntermediateState = computed(() => {\n const behavior = this.selectionBehavior();\n return behavior === 'intermediate' || behavior === 'intermediate-nested';\n });\n\n /** Computed: Returns true when drag handle should be shown */\n protected readonly shouldShowDragHandle = computed(() => {\n return this.dragArea() === 'handler' && this.dragBehavior() !== 'none';\n });\n\n // ==================== Node Property Helpers ====================\n /**\n * Get a property value from a node using the configured field name\n */\n protected getNodeProp<T = unknown>(node: AXTreeViewNode, fieldName: string, defaultValue?: T): T {\n return (node[fieldName] as T) ?? (defaultValue as T);\n }\n\n /**\n * Set a property value on a node using the configured field name\n */\n protected setNodeProp(node: AXTreeViewNode, fieldName: string, value: unknown): void {\n node[fieldName] = value;\n }\n\n /**\n * Get node ID\n */\n protected getNodeId(node: AXTreeViewNode): string {\n return this.getNodeProp<string>(node, this.idField(), '');\n }\n\n /**\n * Get node title\n */\n protected getNodeTitle(node: AXTreeViewNode): string {\n return this.getNodeProp<string>(node, this.titleField(), '');\n }\n\n /**\n * Get node tooltip\n */\n protected getNodeTooltip(node: AXTreeViewNode): string | undefined {\n return this.getNodeProp<string | undefined>(node, this.tooltipField(), undefined);\n }\n\n /**\n * Get node icon\n */\n protected getNodeIcon(node: AXTreeViewNode): string | undefined {\n return this.getNodeProp<string | undefined>(node, this.iconField(), undefined);\n }\n\n /**\n * Get node expanded state\n */\n protected getNodeExpanded(node: AXTreeViewNode): boolean {\n return this.getNodeProp<boolean>(node, this.expandedField(), false);\n }\n\n /**\n * Set node expanded state\n */\n protected setNodeExpanded(node: AXTreeViewNode, value: boolean): void {\n this.setNodeProp(node, this.expandedField(), value);\n }\n\n /**\n * Get node selected state\n */\n protected getNodeSelected(node: AXTreeViewNode): boolean {\n return this.getNodeProp<boolean>(node, this.selectedField(), false);\n }\n\n /**\n * Set node selected state\n */\n protected setNodeSelected(node: AXTreeViewNode, value: boolean): void {\n this.setNodeProp(node, this.selectedField(), value);\n }\n\n /**\n * Get node indeterminate state\n */\n protected getNodeIndeterminate(node: AXTreeViewNode): boolean {\n return this.getNodeProp<boolean>(node, this.indeterminateField(), false);\n }\n\n /**\n * Set node indeterminate state\n */\n protected setNodeIndeterminate(node: AXTreeViewNode, value: boolean): void {\n this.setNodeProp(node, this.indeterminateField(), value);\n }\n\n /**\n * Get node's own disabled state (without inheritance)\n */\n protected getNodeDisabled(node: AXTreeViewNode): boolean {\n return this.getNodeProp<boolean>(node, this.disabledField(), false);\n }\n\n /**\n * Check if node is effectively disabled (considering inheritance from parents)\n * When inheritDisabled is true:\n * - Returns true if node itself is disabled\n * - Returns true if any ancestor is disabled AND node doesn't have explicit `disabled: false`\n * When inheritDisabled is false:\n * - Only returns node's own disabled state\n */\n protected isNodeEffectivelyDisabled(node: AXTreeViewNode): boolean {\n // Check if node itself is disabled\n if (this.getNodeDisabled(node)) {\n return true;\n }\n\n // If not inheriting disabled state, just return false (node is not disabled)\n if (!this.inheritDisabled()) {\n return false;\n }\n\n // Check if node explicitly has disabled: false (override inheritance)\n const nodeDisabledValue = node[this.disabledField()];\n if (nodeDisabledValue === false) {\n return false;\n }\n\n // Check ancestors for disabled state\n return this.isAnyAncestorDisabled(node);\n }\n\n /**\n * Check if any ancestor of the node is disabled\n */\n private isAnyAncestorDisabled(node: AXTreeViewNode): boolean {\n const parent = this.treeService.findParentNode(this.nodes(), node, this.idField(), this.childrenField());\n\n if (!parent) {\n return false;\n }\n\n if (this.getNodeDisabled(parent)) {\n return true;\n }\n\n return this.isAnyAncestorDisabled(parent);\n }\n\n /**\n * Get node hidden state\n */\n protected getNodeHidden(node: AXTreeViewNode): boolean {\n return this.getNodeProp<boolean>(node, this.hiddenField(), false);\n }\n\n /**\n * Get node children array\n */\n protected getNodeChildren(node: AXTreeViewNode): AXTreeViewNode[] | undefined {\n return this.getNodeProp<AXTreeViewNode[] | undefined>(node, this.childrenField(), undefined);\n }\n\n /**\n * Set node children array\n */\n protected setNodeChildren(node: AXTreeViewNode, value: AXTreeViewNode[] | undefined): void {\n this.setNodeProp(node, this.childrenField(), value);\n }\n\n /**\n * Get node children count\n */\n protected getNodeChildrenCount(node: AXTreeViewNode): number | undefined {\n return this.getNodeProp<number | undefined>(node, this.childrenCountField(), undefined);\n }\n\n /**\n * Set node children count\n */\n protected setNodeChildrenCount(node: AXTreeViewNode, value: number | undefined): void {\n this.setNodeProp(node, this.childrenCountField(), value);\n }\n\n // ==================== Effects ====================\n /** Effect to handle datasource changes */\n readonly #datasourceEffect = effect(async () => {\n if (this.isUpdatingFromDatasource) {\n return;\n }\n\n const ds = this.datasource();\n if (Array.isArray(ds)) {\n this.nodes.set([...ds]);\n } else if (typeof ds === 'function') {\n try {\n await this.loadRootItems(ds);\n } catch (error: unknown) {\n this.handleError('Failed to load root items', error);\n }\n }\n });\n\n /** Initialize direction change listener */\n readonly #initDirectionListener = afterNextRender(() => {\n this.platformService.directionChange\n .pipe(\n map((event) => event.data === 'rtl'),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((isRtl) => this.isRtl.set(isRtl));\n });\n\n // ==================== Public API ====================\n /**\n * Expand all nodes in the tree (with lazy loading support)\n */\n async expandAll(): Promise<void> {\n await this.treeService.setExpandedState(\n this.nodes(),\n true,\n this.isLazyDataSource(),\n (node) => this.loadNodeChildren(node),\n this.expandedField(),\n this.childrenField(),\n this.childrenCountField(),\n );\n this.refreshNodes();\n }\n\n /**\n * Collapse all nodes in the tree\n */\n collapseAll(): void {\n this.treeService.setExpandedState(\n this.nodes(),\n false,\n this.isLazyDataSource(),\n (node) => this.loadNodeChildren(node),\n this.expandedField(),\n this.childrenField(),\n this.childrenCountField(),\n );\n this.refreshNodes();\n }\n\n /**\n * Get count of selected nodes\n */\n getSelectedCount(): number {\n return this.treeService.countSelected(this.nodes(), this.selectedField(), this.childrenField());\n }\n\n /**\n * Check if any nodes are selected\n */\n hasSelection(): boolean {\n return this.getSelectedCount() > 0;\n }\n\n /**\n * Get all selected nodes\n */\n getSelectedNodes(): AXTreeViewNode[] {\n const selected: AXTreeViewNode[] = [];\n this.treeService.collectSelected(this.nodes(), selected, this.selectedField(), this.childrenField());\n return selected;\n }\n\n /**\n * Delete selected nodes from the tree\n */\n deleteSelected(): void {\n this.treeService.removeSelected(\n this.nodes(),\n this.selectedField(),\n this.indeterminateField(),\n this.childrenField(),\n );\n if (!this.isLeafOnlyMode()) {\n this.treeService.updateAllParentStates(\n this.nodes(),\n this.hasIntermediateState(),\n this.childrenField(),\n this.selectedField(),\n this.indeterminateField(),\n );\n }\n this.refreshNodes();\n this.emitSelectionChange();\n }\n\n /**\n * Select all nodes in the tree (respects disabled state)\n */\n selectAll(): void {\n if (this.selectMode() === 'none') {\n return;\n }\n if (this.isLeafOnlyMode()) {\n // Only select leaf nodes that are not disabled\n const selectLeafs = (nodes: AXTreeViewNode[]): void => {\n for (const node of nodes) {\n if (this.isLeafNode(node) && !this.isNodeEffectivelyDisabled(node)) {\n this.setNodeSelected(node, true);\n this.setNodeIndeterminate(node, false);\n }\n const children = this.getNodeChildren(node);\n if (children) {\n selectLeafs(children);\n }\n }\n };\n selectLeafs(this.nodes());\n } else {\n // Select all nodes that are not disabled\n const selectAllNonDisabled = (nodes: AXTreeViewNode[]): void => {\n for (const node of nodes) {\n if (!this.isNodeEffectivelyDisabled(node)) {\n this.setNodeSelected(node, true);\n this.setNodeIndeterminate(node, false);\n }\n const children = this.getNodeChildren(node);\n if (children) {\n selectAllNonDisabled(children);\n }\n }\n };\n selectAllNonDisabled(this.nodes());\n }\n this.refreshNodes();\n this.emitSelectionChange();\n }\n\n /**\n * Deselect all nodes in the tree\n */\n deselectAll(): void {\n this.treeService.setAllSelection(\n this.nodes(),\n false,\n this.selectedField(),\n this.indeterminateField(),\n this.childrenField(),\n );\n this.refreshNodes();\n this.emitSelectionChange();\n }\n\n /**\n * Find a node by ID in the tree\n */\n findNode(id: string): AXTreeViewNode | null {\n return this.treeService.findNodeById(this.nodes(), id, this.idField(), this.childrenField());\n }\n\n /**\n * Refresh the tree to trigger change detection\n */\n refresh(): void {\n this.refreshNodes();\n }\n\n /**\n * Reload the entire tree data from the datasource\n * For callback datasource: clears all nodes and reloads from root\n * For array datasource: refreshes the current data\n * @returns Promise that resolves when reload is complete\n */\n async reloadData(): Promise<void> {\n // Prevent concurrent reloads\n if (this._isLoading()) {\n return;\n }\n\n const ds = this.datasource();\n\n if (typeof ds === 'function') {\n this._isLoading.set(true);\n\n // Clear states in batch for better performance\n this.loadingNodes.set(new Set());\n this.nodes.set([]);\n this.focusedNodeId.set(null);\n this.activeNodeId.set(null);\n\n try {\n const result = ds();\n const rootNodes = result instanceof Promise ? await result : result;\n this.nodes.set(rootNodes);\n } catch (error: unknown) {\n this.handleError('Failed to reload data', error);\n this.nodes.set([]);\n } finally {\n this._isLoading.set(false);\n }\n } else if (Array.isArray(ds)) {\n // For array datasource, just refresh from the current data\n this.nodes.set([...ds]);\n }\n }\n\n /**\n * Check if the tree is currently loading data (root level)\n * @returns true if the tree is loading root data\n */\n getIsLoading(): boolean {\n return this._isLoading();\n }\n\n /**\n * Check if a node is currently loading\n */\n isNodeLoading(nodeId: string): boolean {\n return this.loadingNodes().has(nodeId);\n }\n\n /**\n * Get loading state for a node (internal state)\n */\n getNodeLoading(node: AXTreeViewNode): boolean {\n return this.loadingNodes().has(this.getNodeId(node));\n }\n\n /**\n * Edit/update a node's properties\n * @param nodeId - The ID of the node to edit\n * @param updates - Partial node object with properties to update\n * @returns true if node was found and updated, false otherwise\n */\n editNode(nodeId: string, updates: Partial<AXTreeViewNode>): boolean {\n const updated = this.treeService.editNode(\n this.nodes(),\n nodeId,\n updates,\n this.idField(),\n this.childrenField(),\n this.childrenCountField(),\n );\n if (updated) {\n this.refreshNodes();\n return true;\n }\n return false;\n }\n\n /**\n * Add a child node to a parent node\n * @param parentId - The ID of the parent node\n * @param childNode - The child node to add\n * @param index - Optional index to insert at (default: append to end)\n * @returns true if parent was found and child was added, false otherwise\n */\n addChild(parentId: string, childNode: AXTreeViewNode, index?: number): boolean {\n const parent = this.treeService.addChild(\n this.nodes(),\n parentId,\n childNode,\n index,\n this.idField(),\n this.childrenField(),\n this.childrenCountField(),\n this.expandedField(),\n );\n if (parent) {\n this.refreshNodes();\n return true;\n }\n return false;\n }\n\n /**\n * Remove a node from the tree\n * @param nodeId - The ID of the node to remove\n * @returns The removed node if found, null otherwise\n */\n removeNode(nodeId: string): AXTreeViewNode | null {\n const removed = this.treeService.removeNode(\n this.nodes(),\n nodeId,\n this.idField(),\n this.childrenField(),\n this.childrenCountField(),\n );\n if (removed) {\n // Update parent states if needed\n if (this.hasIntermediateState()) {\n this.treeService.updateAllParentStates(\n this.nodes(),\n this.hasIntermediateState(),\n this.childrenField(),\n this.selectedField(),\n this.indeterminateField(),\n );\n }\n this.refreshNodes();\n }\n return removed;\n }\n\n /**\n * Expand a specific node\n * @param nodeId - The ID of the node to expand\n * @returns Promise that resolves when expansion is complete (if lazy loading)\n */\n async expandNode(nodeId: string): Promise<void> {\n const node = this.findNode(nodeId);\n if (!node) {\n return;\n }\n\n const hasChildren = this.treeService.hasChildren(node, this.childrenField());\n const canLazyLoad = this.treeService.canLazyLoad(\n node,\n this.isLazyDataSource(),\n this.childrenCountField(),\n this.childrenField(),\n );\n\n if (hasChildren || canLazyLoad) {\n if (canLazyLoad) {\n await this.loadNodeChildren(node);\n }\n this.setNodeExpanded(node, true);\n this.refreshNodes();\n this.onNodeToggle.emit({ component: this, node, nativeEvent: new Event('expand') });\n }\n }\n\n /**\n * Collapse a specific node\n * @param nodeId - The ID of the node to collapse\n */\n collapseNode(nodeId: string): void {\n const node = this.findNode(nodeId);\n if (!node) {\n return;\n }\n\n if (this.getNodeExpanded(node)) {\n this.setNodeExpanded(node, false);\n this.refreshNodes();\n this.onNodeToggle.emit({ component: this, node, nativeEvent: new Event('collapse') });\n }\n }\n\n /**\n * Toggle expansion state of a specific node\n * @param nodeId - The ID of the node to toggle\n * @returns Promise that resolves when toggle is complete (if lazy loading)\n */\n async toggleNodeExpansion(nodeId: string): Promise<void> {\n const node = this.findNode(nodeId);\n if (!node) {\n return;\n }\n\n if (this.getNodeExpanded(node)) {\n this.collapseNode(nodeId);\n } else {\n await this.expandNode(nodeId);\n }\n }\n\n /**\n * Programmatically select a node\n * @param nodeId - The ID of the node to select\n * @returns true if node was found and selected, false otherwise\n */\n selectNode(nodeId: string): boolean {\n if (this.selectMode() === 'none') {\n return false;\n }\n const node = this.findNode(nodeId);\n if (!node || this.isNodeEffectivelyDisabled(node) || !this.canSelectNode(node)) {\n return false;\n }\n\n const mode = this.selectMode();\n if (mode === 'single') {\n this.treeService.deselectAllNodes(\n this.nodes(),\n this.selectedField(),\n this.indeterminateField(),\n this.childrenField(),\n );\n this.setNodeSelected(node, true);\n this.setNodeIndeterminate(node, false);\n } else {\n this.setNodeSelected(node, true);\n this.setNodeIndeterminate(node, false);\n\n const children = this.getNodeChildren(node);\n if (this.cascadesToChildren() && children && !this.isLeafOnlyMode()) {\n this.treeService.selectAllChildren(\n children,\n true,\n this.selectedField(),\n this.indeterminateField(),\n this.childrenField(),\n );\n }\n\n if (this.hasIntermediateState() && !this.isLeafOnlyMode()) {\n this.treeService.updateParentStates(\n this.nodes(),\n node,\n this.hasIntermediateState(),\n this.idField(),\n this.childrenField(),\n this.selectedField(),\n this.indeterminateField(),\n );\n }\n }\n\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n isUserInteraction: false,\n });\n this.emitSelectionChange();\n return true;\n }\n\n /**\n * Programmatically deselect a node\n * @param nodeId - The ID of the node to deselect\n * @returns true if node was found and deselected, false otherwise\n */\n deselectNode(nodeId: string): boolean {\n const node = this.findNode(nodeId);\n if (!node) {\n return false;\n }\n\n this.setNodeSelected(node, false);\n this.setNodeIndeterminate(node, false);\n\n const children = this.getNodeChildren(node);\n if (this.cascadesToChildren() && children && !this.isLeafOnlyMode()) {\n this.treeService.selectAllChildren(\n children,\n false,\n this.selectedField(),\n this.indeterminateField(),\n this.childrenField(),\n );\n }\n\n if (this.hasIntermediateState() && !this.isLeafOnlyMode()) {\n this.treeService.updateParentStates(\n this.nodes(),\n node,\n this.hasIntermediateState(),\n this.idField(),\n this.childrenField(),\n this.selectedField(),\n this.indeterminateField(),\n );\n }\n\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n isUserInteraction: false,\n });\n this.emitSelectionChange();\n return true;\n }\n\n /**\n * Get parent node of a given node\n * @param nodeId - The ID of the node\n * @returns The parent node if found, null otherwise\n */\n getParent(nodeId: string): AXTreeViewNode | null {\n const node = this.findNode(nodeId);\n if (!node) {\n return null;\n }\n return this.treeService.findParentNode(this.nodes(), node, this.idField(), this.childrenField()) ?? null;\n }\n\n /**\n * Get children of a node\n * @param nodeId - The ID of the parent node\n * @returns Array of child nodes, or null if node not found\n */\n getChildren(nodeId: string): AXTreeViewNode[] | null {\n const node = this.findNode(nodeId);\n if (!node) {\n return null;\n }\n return this.getNodeChildren(node) ?? [];\n }\n\n /**\n * Get all root nodes\n * @returns Array of root nodes\n */\n getRootNodes(): AXTreeViewNode[] {\n return [...this.nodes()];\n }\n\n /**\n * Get all nodes in a flat array\n * @returns Array of all nodes in the tree\n */\n getAllNodes(): AXTreeViewNode[] {\n return this.treeService.getAllNodes(this.nodes(), this.childrenField());\n }\n\n /**\n * Get the path to a node (array of parent IDs from root to node)\n * @param nodeId - The ID of the node\n * @returns Array of node IDs representing the path, or empty array if node not found\n */\n getNodePath(nodeId: string): string[] {\n const nodePath = this.treeService.getNodePath(this.nodes(), nodeId, this.idField(), this.childrenField());\n return nodePath.map((node) => this.getNodeId(node));\n }\n\n /**\n * Get the level/depth of a node (0 = root level)\n * @param nodeId - The ID of the node\n * @returns The level of the node, or -1 if node not found\n */\n getNodeLevel(nodeId: string): number {\n return this.treeService.getNodeLevel(this.nodes(), nodeId, this.idField(), this.childrenField());\n }\n\n /**\n * Programmatically move a node to a new parent\n * @param nodeId - The ID of the node to move\n * @param newParentId - The ID of the new parent (undefined for root level)\n * @param index - Optional index to insert at (default: append to end)\n * @returns true if move was successful, false otherwise\n */\n moveNode(nodeId: string, newParentId?: string, index?: number): boolean {\n const result = this.treeService.moveNode(\n this.nodes(),\n nodeId,\n newParentId,\n index,\n this.idField(),\n this.childrenField(),\n this.childrenCountField(),\n this.expandedField(),\n );\n\n if (result.success && result.movedNode) {\n // Emit drop events\n this.emitDropEvents(\n result.movedNode,\n result.previousParent,\n result.newParent,\n result.previousIndex,\n result.currentIndex,\n false,\n );\n this.refreshNodes();\n return true;\n }\n\n return false;\n }\n\n /**\n * Clone a node (creates a deep copy)\n * @param nodeId - The ID of the node to clone\n * @returns The cloned node, or null if node not found\n */\n cloneNode(nodeId: string): AXTreeViewNode | null {\n const node = this.findNode(nodeId);\n if (!node) {\n return null;\n }\n\n return this.treeService.cloneNode(\n node,\n this.idField(),\n this.titleField(),\n this.tooltipField(),\n this.iconField(),\n this.expandedField(),\n this.selectedField(),\n this.indeterminateField(),\n this.disabledField(),\n this.hiddenField(),\n this.childrenCountField(),\n this.dataField(),\n this.childrenField(),\n );\n }\n\n /**\n * Focus a specific node by ID\n * @param nodeId - The ID of the node to focus\n * @returns true if node was found and focused, false otherwise\n */\n focusNode(nodeId: string): boolean {\n const node = this.findNode(nodeId);\n if (!node || this.getNodeHidden(node) === true || this.isNodeEffectivelyDisabled(node)) {\n return false;\n }\n this.focusNodeById(nodeId);\n return true;\n }\n\n /**\n * Get all expanded nodes\n * @returns Array of expanded nodes\n */\n getExpandedNodes(): AXTreeViewNode[] {\n const expanded: AXTreeViewNode[] = [];\n const traverse = (nodes: AXTreeViewNode[]): void => {\n for (const node of nodes) {\n if (this.getNodeExpanded(node)) {\n expanded.push(node);\n }\n const children = this.getNodeChildren(node);\n if (children) {\n traverse(children);\n }\n }\n };\n traverse(this.nodes());\n return expanded;\n }\n\n /**\n * Get all collapsed nodes that have children\n * @returns Array of collapsed nodes with children\n */\n getCollapsedNodes(): AXTreeViewNode[] {\n const collapsed: AXTreeViewNode[] = [];\n const traverse = (nodes: AXTreeViewNode[]): void => {\n for (const node of nodes) {\n const children = this.getNodeChildren(node);\n const childrenCount = this.getNodeChildrenCount(node);\n if (!this.getNodeExpanded(node) && (children?.length || childrenCount)) {\n collapsed.push(node);\n }\n if (children) {\n traverse(children);\n }\n }\n };\n traverse(this.nodes());\n return collapsed;\n }\n\n /**\n * Check if a node is expanded\n * @param nodeId - The ID of the node\n * @returns true if node is expanded, false otherwise\n */\n isNodeExpanded(nodeId: string): boolean {\n const node = this.findNode(nodeId);\n return node ? this.getNodeExpanded(node) : false;\n }\n\n /**\n * Check if a node is selected\n * @param nodeId - The ID of the node\n * @returns true if node is selected, false otherwise\n */\n isNodeSelected(nodeId: string): boolean {\n const node = this.findNode(nodeId);\n return node ? this.getNodeSelected(node) : false;\n }\n\n /**\n * Check if a node has children\n * @param nodeId - The ID of the node\n * @returns true if node has children, false otherwise\n */\n hasChildren(nodeId: string): boolean {\n const node = this.findNode(nodeId);\n return this.treeService.hasChildren(node ?? {}, this.childrenField());\n }\n\n /**\n * Check if a node is disabled (considering inheritance from parent nodes)\n * @param nodeId - The ID of the node\n * @returns true if node is disabled (directly or inherited), false otherwise\n */\n isDisabled(nodeId: string): boolean {\n const node = this.findNode(nodeId);\n return node ? this.isNodeEffectivelyDisabled(node) : false;\n }\n\n /**\n * Get template context for a node\n */\n getTemplateContext(node: AXTreeViewNode, level = 0): AXTreeViewNodeTemplateContext {\n const children = this.getNodeChildren(node);\n const childrenCount = this.getNodeChildrenCount(node);\n return {\n $implicit: node,\n node,\n level,\n expanded: this.getNodeExpanded(node),\n childrenCount: childrenCount ?? children?.length ?? 0,\n loading: this.getNodeLoading(node),\n disabled: this.isNodeEffectivelyDisabled(node),\n };\n }\n\n /**\n * Calculate padding-inline for a node based on its level\n */\n getNodePaddingInline(level: number): number {\n const indent = this.indentSize();\n const currentLook = this.look();\n const multiplier = currentLook === 'with-line' ? 1 / 3 : 1;\n return level * indent * multiplier;\n }\n\n /**\n * Check if node should show expand toggle\n */\n shouldShowExpandToggle(node: AXTreeViewNode): boolean {\n return (\n this.treeService.hasChildren(node, this.childrenField()) ||\n this.treeService.canLazyLoad(node, this.isLazyDataSource(), this.childrenCountField(), this.childrenField())\n );\n }\n\n /**\n * Check if checkboxes should be shown (only for multiple mode)\n */\n shouldShowCheckbox(): boolean {\n return this.selectMode() === 'multiple';\n }\n\n /**\n * Check if a node is a leaf (has no children)\n * A node is a leaf if it has no loaded children AND no childrenCount (or childrenCount is 0)\n */\n isLeafNode(node: AXTreeViewNode): boolean {\n const hasChildren = this.treeService.hasChildren(node, this.childrenField());\n const childrenCount = this.getNodeChildrenCount(node);\n const hasChildrenCount = childrenCount && childrenCount > 0;\n const canLazyLoad = this.treeService.canLazyLoad(\n node,\n this.isLazyDataSource(),\n this.childrenCountField(),\n this.childrenField(),\n );\n\n // A node is a leaf if:\n // 1. It has no loaded children\n // 2. AND it has no childrenCount (or childrenCount is 0)\n // 3. AND it cannot be lazy loaded\n return !hasChildren && !hasChildrenCount && !canLazyLoad;\n }\n\n /**\n * Check if a node can be selected (considering selectMode and isLeafOnlyMode)\n */\n canSelectNode(node: AXTreeViewNode): boolean {\n if (this.selectMode() === 'none') {\n return false;\n }\n if (this.isLeafOnlyMode()) {\n return this.isLeafNode(node);\n }\n return true;\n }\n\n /**\n * Check if checkbox should be shown for a specific node\n */\n shouldShowCheckboxForNode(node: AXTreeViewNode): boolean {\n if (!this.shouldShowCheckbox()) {\n return false;\n }\n if (this.isLeafOnlyMode()) {\n return this.isLeafNode(node);\n }\n return true;\n }\n\n /**\n * Generate unique list ID for each node\n */\n getListId(node?: AXTreeViewNode): string {\n return this.treeService.getListId(node, this.idField());\n }\n\n /**\n * Check if a node is currently focused\n */\n isNodeFocused(nodeId: string): boolean {\n return this.focusedNodeId() === nodeId;\n }\n\n /**\n * Get ARIA level for a node\n */\n getNodeAriaLevel(level: number): number {\n return level + 1;\n }\n\n /**\n * Get ARIA expanded state for a node\n */\n getNodeAriaExpanded(node: AXTreeViewNode): string | null {\n if (!this.shouldShowExpandToggle(node)) {\n return null;\n }\n return this.getNodeExpanded(node) ? 'true' : 'false';\n }\n\n /**\n * Get ARIA selected state for a node\n */\n getNodeAriaSelected(node: AXTreeViewNode): string | null {\n if (this.selectMode() === 'none') {\n return null;\n }\n const selected = this.getNodeSelected(node);\n if (this.selectMode() === 'single') {\n return selected ? 'true' : 'false';\n }\n if (this.selectMode() === 'multiple') {\n return selected ? 'true' : 'false';\n }\n return null;\n }\n\n /**\n * Emit selection change event with all selected nodes\n */\n private emitSelectionChange(): void {\n const selectedNodes = this.getSelectedNodes();\n this.onSelectionChange.emit({\n component: this,\n selectedNodes,\n });\n }\n\n // ==================== Event Handlers ====================\n\n /**\n * Handle node double click\n */\n onNodeDoubleClickHandle(node: AXTreeViewNode, event: Event): void {\n if (this.isNodeEffectivelyDisabled(node)) return;\n\n this.onNodeDoubleClick.emit({\n component: this,\n node,\n nativeEvent: event,\n });\n }\n /**\n * Handle node click handle\n */\n onNodeClickHandle(node: AXTreeViewNode, event: Event): void {\n if (this.isNodeEffectivelyDisabled(node)) return;\n\n const mode = this.selectMode();\n\n this.activeNodeId.set(this.getNodeId(node));\n if (mode === 'single') {\n this.handleSingleSelection(node, event);\n }\n\n this.onNodeClick.emit({ component: this, node, nativeEvent: event });\n }\n\n /**\n * Toggle node expansion state with lazy loading support\n * Note: Disabled nodes can still be toggled (expanded/collapsed) for better UX\n */\n async toggleNode(node: AXTreeViewNode, event: Event): Promise<void> {\n if (this.isEvent(event) && typeof event.stopPropagation === 'function') {\n event.stopPropagation();\n }\n\n const hasChildren = this.treeService.hasChildren(node, this.childrenField());\n const canLazyLoad = this.treeService.canLazyLoad(\n node,\n this.isLazyDataSource(),\n this.childrenCountField(),\n this.childrenField(),\n );\n\n if (hasChildren || canLazyLoad) {\n const willExpand = !this.getNodeExpanded(node);\n\n if (willExpand && canLazyLoad) {\n await this.loadNodeChildren(node);\n }\n\n this.setNodeExpanded(node, willExpand);\n this.refreshNodes();\n this.onNodeToggle.emit({ component: this, node, nativeEvent: event });\n }\n }\n\n /**\n * Toggle node selection state with indeterminate support (for multiple mode)\n */\n toggleSelection(node: AXTreeViewNode, event: AXValueChangedEvent): void {\n if (!event.isUserInteraction) return;\n if (this.selectMode() === 'none') return;\n if (!this.canSelectNode(node)) return;\n\n const mode = this.selectMode();\n if (mode !== 'multiple') return;\n\n const newValue = event.value === null ? true : event.value;\n this.setNodeSelected(node, newValue);\n this.setNodeIndeterminate(node, false);\n\n const children = this.getNodeChildren(node);\n if (this.cascadesToChildren() && children && !this.isLeafOnlyMode()) {\n this.treeService.selectAllChildren(\n children,\n newValue,\n this.selectedField(),\n this.indeterminateField(),\n this.childrenField(),\n );\n }\n\n if (this.hasIntermediateState() && !this.isLeafOnlyMode()) {\n this.treeService.updateParentStates(\n this.nodes(),\n node,\n this.hasIntermediateState(),\n this.idField(),\n this.childrenField(),\n this.selectedField(),\n this.indeterminateField(),\n );\n }\n\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n isUserInteraction: event.isUserInteraction,\n });\n this.emitSelectionChange();\n }\n\n /**\n * Handle drop events for tree nodes\n */\n onDrop(event: AXDropListDroppedEvent, parentNode?: AXTreeViewNode): void {\n const targetArray = parentNode ? (this.getNodeChildren(parentNode) ?? []) : this.nodes();\n const isReordering = event.previousContainer === event.container;\n\n if (isReordering) {\n this.handleReorder(event, targetArray, parentNode);\n } else {\n this.handleMove(event, targetArray, parentNode);\n }\n\n this.refreshNodes();\n }\n\n /**\n * Handle drop events when dropping directly onto a node (to make it a child)\n */\n onDropOntoNode(event: AXDropListDroppedEvent, targetNode: AXTreeViewNode): void {\n if (!this.canMoveToParent()) return;\n\n const sourceListId = event.previousContainer.element.id;\n const sourceArray = this.getArrayByListId(sourceListId);\n if (!sourceArray) return;\n\n const movedNode = sourceArray[event.previousIndex];\n\n if (!this.treeService.isValidDropTarget(movedNode, targetNode, this.idField(), this.childrenField())) return;\n if (!this.emitBeforeDropEvent(movedNode, sourceListId, targetNode, event.previousIndex, 0)) return;\n\n let targetChildren = this.getNodeChildren(targetNode);\n if (!targetChildren) {\n targetChildren = [];\n this.setNodeChildren(targetNode, targetChildren);\n }\n sourceArray.splice(event.previousIndex, 1);\n targetChildren.unshift(movedNode);\n this.setNodeExpanded(targetNode, true);\n\n this.emitDropEvents(movedNode, this.findParentByListId(sourceListId), targetNode, event.previousIndex, 0, false);\n\n this.refreshNodes();\n }\n\n /**\n * Handle node focus event\n */\n onNodeFocus(nodeId: string): void {\n this.focusedNodeId.set(nodeId);\n }\n\n /**\n * Handle tree container focus - focus first node if none is focused\n */\n onTreeFocus(event: FocusEvent): void {\n if (event.target === event.currentTarget) {\n const flatList = this.treeService.buildFlatNodeList(\n this.nodes(),\n this.hiddenField(),\n this.disabledField(),\n this.expandedField(),\n this.childrenField(),\n );\n if (flatList.length > 0) {\n const focusedId = this.focusedNodeId();\n if (focusedId) {\n // Check if the focused node still exists and is not hidden\n const focusedNode = this.treeService.findNodeById(\n this.nodes(),\n focusedId,\n this.idField(),\n this.childrenField(),\n );\n if (focusedNode && this.getNodeHidden(focusedNode) !== true) {\n this.focusNodeById(focusedId);\n } else {\n // Focused node no longer exists, focus first node\n this.focusNodeById(this.getNodeId(flatList[0].node));\n }\n } else {\n // No node is focused, focus first node\n this.focusNodeById(this.getNodeId(flatList[0].node));\n }\n }\n }\n }\n\n /**\n * Handle tree container blur\n */\n onTreeBlur(event: FocusEvent): void {\n if (event.relatedTarget && !(event.currentTarget as HTMLElement).contains(event.relatedTarget as Node)) {\n this.focusedNodeId.set(null);\n }\n }\n\n /**\n * Handle keyboard navigation\n */\n handleKeyDown(event: KeyboardEvent): void {\n const flatList = this.treeService.buildFlatNodeList(\n this.nodes(),\n this.hiddenField(),\n this.disabledField(),\n this.expandedField(),\n this.childrenField(),\n );\n if (flatList.length === 0) return;\n\n const currentFocused = this.getFocusedNode();\n let currentIndex = currentFocused\n ? flatList.findIndex((item) => this.getNodeId(item.node) === this.getNodeId(currentFocused))\n : -1;\n\n if (currentIndex === -1 && event.target === event.currentTarget) {\n currentIndex = 0;\n }\n\n const navigationResult = this.handleNavigationKey(event, flatList, currentIndex, currentFocused);\n if (navigationResult.handled) {\n if (navigationResult.shouldPreventDefault) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (\n navigationResult.targetIndex !== null &&\n navigationResult.targetIndex >= 0 &&\n navigationResult.targetIndex < flatList.length\n ) {\n this.focusNodeById(this.getNodeId(flatList[navigationResult.targetIndex].node));\n }\n }\n }\n\n // ==================== Private Methods ====================\n /**\n * Load root items when datasource is a function\n */\n private async loadRootItems(loadFn: AXTreeViewCallback): Promise<void> {\n try {\n const result = loadFn();\n const rootNodes = result instanceof Promise ? await result : result;\n this.nodes.set(rootNodes);\n } catch (error: unknown) {\n this.handleError('Failed to load root items', error);\n this.nodes.set([]);\n }\n }\n\n /**\n * Load children for a node using lazy loading\n * Only calls callback if:\n * - children field is undefined or empty\n * - AND childrenCount > 0\n */\n private async loadNodeChildren(node: AXTreeViewNode): Promise<void> {\n const nodeId = this.getNodeId(node);\n if (!this.isLazyDataSource() || this.loadingNodes().has(nodeId)) return;\n\n // If children are already loaded, don't call callback\n const existingChildren = this.getNodeChildren(node);\n if (existingChildren && existingChildren.length > 0) {\n return;\n }\n\n // Only call callback if childrenCount > 0\n const childrenCount = this.getNodeChildrenCount(node);\n if (!childrenCount || childrenCount <= 0) {\n return;\n }\n\n const ds = this.datasource();\n if (typeof ds !== 'function') return;\n\n try {\n this.loadingNodes.update((set) => new Set(set).add(nodeId));\n this.refreshNodes();\n\n const result = ds(nodeId);\n const children = result instanceof Promise ? await result : result;\n this.setNodeChildren(node, children);\n this.setNodeChildrenCount(node, children.length);\n } catch (error: unknown) {\n this.handleError('Failed to load children', error);\n this.setNodeChildrenCount(node, 0);\n } finally {\n this.loadingNodes.update((set) => {\n const newSet = new Set(set);\n newSet.delete(nodeId);\n return newSet;\n });\n this.refreshNodes();\n }\n }\n\n /**\n * Internal method to refresh nodes signal and sync back to datasource if it's an array\n * Creates new array references for all nested children to ensure reactivity\n */\n private refreshNodes(): void {\n const currentNodes = this.nodes();\n // Create new array references for all nested children to ensure reactivity\n // This ensures Angular's change detection picks up changes even with callback datasource\n this.ensureNewArrayReferences(currentNodes);\n this.nodes.set([...currentNodes]);\n\n if (!this.isLazyDataSource() && !this.isUpdatingFromDatasource) {\n this.isUpdatingFromDatasource = true;\n this.datasource.set([...currentNodes]);\n setTimeout(() => {\n this.isUpdatingFromDatasource = false;\n }, 0);\n }\n }\n\n /**\n * Recursively ensure all children arrays have new references to trigger change detection\n * Mutates the tree structure by replacing children arrays with new array references\n */\n private ensureNewArrayReferences(nodes: AXTreeViewNode[]): void {\n for (const node of nodes) {\n const children = this.getNodeChildren(node);\n if (children && children.length > 0) {\n // Create new array reference for children\n this.setNodeChildren(node, [...children]);\n // Recursively process nested children\n this.ensureNewArrayReferences(children);\n }\n }\n }\n\n /**\n * Handle single selection mode\n */\n private handleSingleSelection(node: AXTreeViewNode, event: Event): void {\n this.treeService.deselectAllNodes(\n this.nodes(),\n this.selectedField(),\n this.indeterminateField(),\n this.childrenField(),\n );\n this.setNodeSelected(node, true);\n this.setNodeIndeterminate(node, false);\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n nativeEvent: event,\n isUserInteraction: true,\n });\n this.emitSelectionChange();\n }\n\n /**\n * Handle multiple selection mode (used internally, but in multiple mode selection is primarily handled by checkboxes)\n */\n private handleMultipleSelection(node: AXTreeViewNode, event: Event): void {\n const newValue = !this.getNodeSelected(node);\n this.setNodeSelected(node, newValue);\n this.setNodeIndeterminate(node, false);\n\n const children = this.getNodeChildren(node);\n if (this.cascadesToChildren() && children && !this.isLeafOnlyMode()) {\n this.treeService.selectAllChildren(\n children,\n newValue,\n this.selectedField(),\n this.indeterminateField(),\n this.childrenField(),\n );\n }\n\n if (this.hasIntermediateState() && !this.isLeafOnlyMode()) {\n this.treeService.updateParentStates(\n this.nodes(),\n node,\n this.hasIntermediateState(),\n this.idField(),\n this.childrenField(),\n this.selectedField(),\n this.indeterminateField(),\n );\n }\n\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n nativeEvent: event,\n isUserInteraction: true,\n });\n this.emitSelectionChange();\n }\n\n /**\n * Get array reference by drop list ID\n */\n private getArrayByListId(listId: string): AXTreeViewNode[] | null {\n return this.treeService.getArrayByListId(this.nodes(), listId, this.idField(), this.childrenField());\n }\n\n /**\n * Find parent node by list ID\n */\n private findParentByListId(listId: string): AXTreeViewNode | undefined {\n return this.treeService.findParentByListId(this.nodes(), listId, this.idField(), this.childrenField());\n }\n\n /**\n * Check if move operation is allowed based on dragBehavior\n */\n private canMoveToParent(): boolean {\n const behavior = this.dragBehavior();\n return behavior !== 'none' && behavior !== 'order-only';\n }\n\n /**\n * Check if reorder operation is allowed based on dragBehavior\n */\n private canReorder(): boolean {\n const behavior = this.dragBehavior();\n return behavior !== 'none' && behavior !== 'move';\n }\n\n /**\n * Handle reordering within the same list */\n private handleReorder(\n event: AXDropListDroppedEvent,\n targetArray: AXTreeViewNode[],\n parentNode?: AXTreeViewNode,\n ): void {\n if (!this.canReorder()) return;\n\n const movedNode = targetArray[event.previousIndex];\n moveItemInArray(targetArray, event.previousIndex, event.currentIndex);\n\n this.emitDropEvents(movedNode, parentNode, parentNode, event.previousIndex, event.currentIndex, true);\n }\n\n /**\n * Handle moving between different lists\n */\n private handleMove(event: AXDropListDroppedEvent, targetArray: AXTreeViewNode[], parentNode?: AXTreeViewNode): void {\n if (!this.canMoveToParent()) return;\n\n const sourceListId = event.previousContainer.element.id;\n const sourceArray = this.getArrayByListId(sourceListId);\n if (!sourceArray) return;\n\n const movedNode = sourceArray[event.previousIndex];\n\n if (parentNode && !this.treeService.isValidDropTarget(movedNode, parentNode)) return;\n\n if (!this.emitBeforeDropEvent(movedNode, sourceListId, parentNode, event.previousIndex, event.currentIndex)) {\n return;\n }\n\n transferArrayItem(sourceArray, targetArray, event.previousIndex, event.currentIndex);\n\n this.emitDropEvents(\n movedNode,\n this.findParentByListId(sourceListId),\n parentNode,\n event.previousIndex,\n event.currentIndex,\n false,\n );\n }\n\n /**\n * Emit beforeDrop event and return whether to continue\n */\n private emitBeforeDropEvent(\n movedNode: AXTreeViewNode,\n sourceListId: string,\n currentParent: AXTreeViewNode | undefined,\n previousIndex: number,\n currentIndex: number,\n ): boolean {\n const beforeDropEvent: AXTreeViewBeforeDropEvent = {\n component: this,\n movedNode,\n previousParent: this.findParentByListId(sourceListId),\n currentParent,\n previousIndex,\n currentIndex,\n canceled: false,\n };\n this.onBeforeDrop.emit(beforeDropEvent);\n\n return !beforeDropEvent.canceled;\n }\n\n /**\n * Emit drop events based on operation type\n */\n private emitDropEvents(\n node: AXTreeViewNode,\n previousParent: AXTreeViewNode | undefined,\n currentParent: AXTreeViewNode | undefined,\n previousIndex: number,\n currentIndex: number,\n isReorder: boolean,\n ): void {\n const dropEvent: AXTreeViewDropEvent = {\n component: this,\n node,\n previousParent,\n currentParent,\n previousIndex,\n currentIndex,\n };\n\n if (isReorder) {\n this.onOrderChange.emit(dropEvent);\n } else {\n this.onMoveChange.emit(dropEvent);\n }\n this.onItemsChange.emit(dropEvent);\n }\n\n /**\n * Get the currently focused node\n */\n private getFocusedNode(): AXTreeViewNode | null {\n const focusedId = this.focusedNodeId();\n if (!focusedId) return null;\n return this.treeService.findNodeById(this.nodes(), focusedId, this.idField(), this.childrenField());\n }\n\n /**\n * Set focus to a node by ID\n */\n private focusNodeById(nodeId: string): void {\n this.focusedNodeId.set(nodeId);\n setTimeout(() => {\n const element = document.querySelector<HTMLElement>(`[data-tree-node-id=\"${nodeId}\"]`);\n if (element) {\n element.focus();\n element.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n }, 0);\n }\n\n /**\n * Handle keyboard navigation keys\n */\n private handleNavigationKey(\n event: KeyboardEvent,\n flatList: AXTreeViewFlatNode[],\n currentIndex: number,\n currentFocused: AXTreeViewNode | null,\n ): { handled: boolean; shouldPreventDefault: boolean; targetIndex: number | null } {\n let targetIndex: number | null = currentIndex;\n let shouldPreventDefault = true;\n let handled = true;\n\n switch (event.key) {\n case 'ArrowUp':\n if (currentIndex > 0) {\n targetIndex = currentIndex - 1;\n } else {\n shouldPreventDefault = false;\n }\n break;\n\n case 'ArrowDown':\n if (currentIndex < flatList.length - 1) {\n targetIndex = currentIndex + 1;\n } else if (currentIndex === -1) {\n targetIndex = 0;\n } else {\n shouldPreventDefault = false;\n }\n break;\n\n case 'ArrowLeft':\n if (currentFocused) {\n if (this.getNodeExpanded(currentFocused) && this.shouldShowExpandToggle(currentFocused)) {\n this.toggleNode(currentFocused, event);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n } else {\n const currentItem = flatList[currentIndex];\n if (currentItem?.parent) {\n targetIndex = flatList.findIndex(\n (item) => this.getNodeId(item.node) === this.getNodeId(currentItem.parent),\n );\n } else {\n shouldPreventDefault = false;\n }\n }\n } else {\n shouldPreventDefault = false;\n }\n break;\n\n case 'ArrowRight':\n if (currentFocused) {\n if (!this.getNodeExpanded(currentFocused) && this.shouldShowExpandToggle(currentFocused)) {\n this.toggleNode(currentFocused, event);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n } else if (\n this.getNodeExpanded(currentFocused) &&\n this.treeService.hasChildren(currentFocused, this.childrenField())\n ) {\n const children = this.getNodeChildren(currentFocused);\n if (children && children.length > 0) {\n const firstChild = children[0];\n targetIndex = flatList.findIndex((item) => this.getNodeId(item.node) === this.getNodeId(firstChild));\n if (targetIndex === -1) {\n const updatedFlatList = this.treeService.buildFlatNodeList(\n this.nodes(),\n this.hiddenField(),\n this.disabledField(),\n this.expandedField(),\n this.childrenField(),\n );\n targetIndex = updatedFlatList.findIndex(\n (item) => this.getNodeId(item.node) === this.getNodeId(firstChild),\n );\n if (targetIndex >= 0 && targetIndex < updatedFlatList.length) {\n this.focusNodeById(this.getNodeId(updatedFlatList[targetIndex].node));\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n }\n } else {\n shouldPreventDefault = false;\n }\n } else {\n shouldPreventDefault = false;\n }\n } else {\n shouldPreventDefault = false;\n }\n break;\n\n case 'Home':\n targetIndex = 0;\n break;\n\n case 'End':\n targetIndex = flatList.length - 1;\n break;\n\n case ' ':\n case 'Space':\n if (currentFocused && this.selectMode() !== 'none' && this.canSelectNode(currentFocused)) {\n event.preventDefault();\n this.handleSpaceKeySelection(currentFocused, event);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n shouldPreventDefault = false;\n break;\n\n case 'Enter':\n if (currentFocused && this.canSelectNode(currentFocused)) {\n event.preventDefault();\n this.handleEnterKeySelection(currentFocused, event);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n shouldPreventDefault = false;\n break;\n\n default:\n if ((event.ctrlKey || event.metaKey) && event.key === 'Enter') {\n if (currentFocused && this.selectMode() === 'multiple' && this.canSelectNode(currentFocused)) {\n event.preventDefault();\n this.handleCtrlEnterSelection(currentFocused, event);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n }\n handled = false;\n shouldPreventDefault = false;\n break;\n }\n\n return { handled, shouldPreventDefault, targetIndex };\n }\n\n /**\n * Handle Space key selection\n * In single mode: replaces selection (deselects all, selects this node)\n * In multiple mode: toggles selection\n */\n private handleSpaceKeySelection(node: AXTreeViewNode, event: KeyboardEvent): void {\n if (!this.canSelectNode(node)) return;\n\n const mode = this.selectMode();\n\n if (mode === 'single') {\n // Single mode: replace selection\n this.treeService.deselectAllNodes(\n this.nodes(),\n this.selectedField(),\n this.indeterminateField(),\n this.childrenField(),\n );\n this.setNodeSelected(node, true);\n this.setNodeIndeterminate(node, false);\n } else {\n // Multiple mode: toggle selection\n const newValue = !this.getNodeSelected(node);\n this.setNodeSelected(node, newValue);\n this.setNodeIndeterminate(node, false);\n\n const children = this.getNodeChildren(node);\n if (this.cascadesToChildren() && children && !this.isLeafOnlyMode()) {\n this.treeService.selectAllChildren(\n children,\n newValue,\n this.selectedField(),\n this.indeterminateField(),\n this.childrenField(),\n );\n }\n\n if (this.hasIntermediateState() && !this.isLeafOnlyMode()) {\n this.treeService.updateParentStates(\n this.nodes(),\n node,\n this.hasIntermediateState(),\n this.idField(),\n this.childrenField(),\n this.selectedField(),\n this.indeterminateField(),\n );\n }\n }\n\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n nativeEvent: event,\n isUserInteraction: true,\n });\n this.emitSelectionChange();\n }\n\n /**\n * Handle Enter key selection\n * In single mode: replaces selection (deselects all, selects this node)\n * In multiple mode: replaces selection (deselects all, selects this node and respects selectionBehavior)\n */\n private handleEnterKeySelection(node: AXTreeViewNode, event: KeyboardEvent): void {\n if (!this.canSelectNode(node)) return;\n\n const mode = this.selectMode();\n\n // Enter key always replaces selection (deselects all first)\n this.treeService.deselectAllNodes(\n this.nodes(),\n this.selectedField(),\n this.indeterminateField(),\n this.childrenField(),\n );\n this.setNodeSelected(node, true);\n this.setNodeIndeterminate(node, false);\n\n if (mode === 'multiple') {\n const children = this.getNodeChildren(node);\n // Respect selectionBehavior: cascade to children if enabled\n if (this.cascadesToChildren() && children && !this.isLeafOnlyMode()) {\n this.treeService.selectAllChildren(\n children,\n true,\n this.selectedField(),\n this.indeterminateField(),\n this.childrenField(),\n );\n }\n // Respect selectionBehavior: update parent states if intermediate mode\n if (this.hasIntermediateState() && !this.isLeafOnlyMode()) {\n this.treeService.updateParentStates(\n this.nodes(),\n node,\n this.hasIntermediateState(),\n this.idField(),\n this.childrenField(),\n this.selectedField(),\n this.indeterminateField(),\n );\n }\n }\n\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n nativeEvent: event,\n isUserInteraction: true,\n });\n this.emitSelectionChange();\n }\n\n /**\n * Handle Ctrl/Cmd + Enter key selection\n */\n private handleCtrlEnterSelection(node: AXTreeViewNode, event: KeyboardEvent): void {\n if (!this.canSelectNode(node)) return;\n\n const newValue = !this.getNodeSelected(node);\n this.setNodeSelected(node, newValue);\n this.setNodeIndeterminate(node, false);\n\n const children = this.getNodeChildren(node);\n if (this.cascadesToChildren() && children && !this.isLeafOnlyMode()) {\n this.treeService.selectAllChildren(\n children,\n newValue,\n this.selectedField(),\n this.indeterminateField(),\n this.childrenField(),\n );\n }\n\n if (this.hasIntermediateState() && !this.isLeafOnlyMode()) {\n this.treeService.updateParentStates(\n this.nodes(),\n node,\n this.hasIntermediateState(),\n this.idField(),\n this.childrenField(),\n this.selectedField(),\n this.indeterminateField(),\n );\n }\n\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n nativeEvent: event,\n isUserInteraction: true,\n });\n this.emitSelectionChange();\n }\n\n /**\n * Type guard to check if value is an Event\n */\n private isEvent(value: unknown): value is Event {\n return value instanceof Event;\n }\n\n /**\n * Handle errors consistently\n */\n private handleError(message: string, error: unknown): void {\n if (error instanceof Error) {\n console.error(`${message}:`, error.message);\n } else {\n console.error(`${message}:`, error);\n }\n }\n}\n","<!-- Root loading indicator -->\n@if (isLoading()) {\n <div class=\"ax-tree-view-root-loading\">\n <i class=\"fa-solid fa-spinner fa-spin ax-tree-view-root-loading-spinner\"></i>\n <span class=\"ax-tree-view-root-loading-text\">{{ '@acorex:treeView.loading' | translate | async }}</span>\n </div>\n}\n\n<!-- Root drop list -->\n<div\n axFocusTrap\n [axDropList]=\"dragBehavior() !== 'none'\"\n [sortingDisabled]=\"false\"\n [id]=\"getListId()\"\n [attr.data-node-id]=\"null\"\n dropListGroup=\"ax-tree-view-nodes\"\n (dropListDropped)=\"onDrop($event)\"\n class=\"ax-tree-view-drop-list\"\n [class.ax-tree-view-card]=\"look() === 'card'\"\n [class.ax-tree-view-with-lines]=\"look() === 'with-line'\"\n [class.ax-tree-view-loading]=\"isLoading()\"\n role=\"group\"\n>\n @for (node of nodes(); track getNodeId(node)) {\n @if (getNodeHidden(node) !== true) {\n <div\n [axDrag]=\"dragBehavior() !== 'none'\"\n [dragDisabled]=\"isNodeEffectivelyDisabled(node)\"\n [dragData]=\"node\"\n class=\"ax-tree-view-node\"\n [class.ax-tree-view-node-active]=\"activeNodeId() === getNodeId(node)\"\n [class.ax-tree-view-node-selected]=\"getNodeSelected(node)\"\n [class.ax-tree-view-node-disabled]=\"isNodeEffectivelyDisabled(node)\"\n [class.ax-tree-view-node-loading]=\"getNodeLoading(node)\"\n [class.ax-tree-view-node-focused]=\"isNodeFocused(getNodeId(node))\"\n role=\"treeitem\"\n [attr.aria-level]=\"getNodeAriaLevel(0)\"\n [attr.aria-expanded]=\"getNodeAriaExpanded(node)\"\n [attr.aria-selected]=\"getNodeAriaSelected(node)\"\n [attr.aria-disabled]=\"\n isNodeEffectivelyDisabled(node) || (isLeafOnlyMode() && !isLeafNode(node)) ? 'true' : null\n \"\n >\n <div\n class=\"ax-tree-view-node-content\"\n [axDropList]=\"dragBehavior() !== 'none'\"\n [id]=\"'ax-tree-view-node-drop-' + getNodeId(node)\"\n [attr.data-node-id]=\"getNodeId(node)\"\n [attr.data-tree-node-id]=\"getNodeId(node)\"\n [attr.data-drop-type]=\"'onto-node'\"\n dropListGroup=\"ax-tree-view-nodes\"\n (dropListDropped)=\"onDropOntoNode($event, node)\"\n (click)=\"onNodeClickHandle(node, $event)\"\n (dblclick)=\"onNodeDoubleClickHandle(node, $event)\"\n (focus)=\"onNodeFocus(getNodeId(node))\"\n (blur)=\"focusedNodeId.set(null)\"\n [tabindex]=\"isNodeFocused(getNodeId(node)) ? 0 : -1\"\n >\n @if (shouldShowDragHandle()) {\n <span\n class=\"ax-tree-view-drag-handle\"\n axDragHandle\n title=\"Drag to reorder\"\n (click)=\"$event.stopPropagation()\"\n >\n ⋮⋮\n </span>\n }\n <ax-button\n class=\"ax-tree-view-expand-toggle ax-sm\"\n (onClick)=\"toggleNode(node, $any($event))\"\n (click)=\"$event.stopPropagation()\"\n [class.ax-tree-view-has-children]=\"shouldShowExpandToggle(node)\"\n [class.ax-tree-view-expanded]=\"getNodeExpanded(node)\"\n [disabled]=\"getNodeLoading(node)\"\n [style.visibility]=\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\"\n >\n @if (getNodeLoading(node)) {\n <ax-icon>\n <i class=\"fa-solid fa-spinner fa-spin ax-tree-view-loading-spinner\"></i>\n </ax-icon>\n } @else {\n <ax-icon>\n <i\n [class]=\"getNodeExpanded(node) ? directionExpandedIcon() : directionCollapsedIcon()\"\n class=\"ax-tree-view-toggle-icon\"\n ></i>\n </ax-icon>\n }\n </ax-button>\n @if (nodeTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate()!\"\n [ngTemplateOutletContext]=\"getTemplateContext(node, 0)\"\n ></ng-container>\n } @else {\n @if (shouldShowCheckboxForNode(node)) {\n <ax-check-box\n class=\"ax-tree-view-checkbox\"\n [ngModel]=\"getNodeIndeterminate(node) ? null : getNodeSelected(node) || false\"\n [indeterminate]=\"getNodeIndeterminate(node) || false\"\n (onValueChanged)=\"toggleSelection(node, $event)\"\n ></ax-check-box>\n }\n @if (showIcons() && getNodeIcon(node)) {\n <i [class]=\"getNodeIcon(node)\" class=\"ax-tree-view-node-icon\"></i>\n }\n <span\n class=\"ax-tree-view-node-label\"\n [axTooltip]=\"getNodeTooltip(node) || ''\"\n [axTooltipDisabled]=\"!getNodeTooltip(node)\"\n [axTooltipPlacement]=\"'top-start'\"\n >\n {{ getNodeTitle(node) }}\n </span>\n @if (showChildrenBadge() && (getNodeChildrenCount(node) || getNodeChildren(node)?.length)) {\n <span class=\"ax-tree-view-node-badge\">\n <ax-badge\n class=\"ax-tree-view-children-badge\"\n [text]=\"(getNodeChildrenCount(node) ?? getNodeChildren(node)?.length ?? 0).toString()\"\n ></ax-badge>\n </span>\n }\n }\n </div>\n </div>\n @if (getNodeExpanded(node) && getNodeChildren(node)?.length) {\n <div class=\"ax-tree-view-children\" role=\"group\">\n <ng-container\n [ngTemplateOutlet]=\"childrenList\"\n [ngTemplateOutletContext]=\"{ children: getNodeChildren(node), parent: node, level: 1 }\"\n ></ng-container>\n </div>\n }\n }\n }\n</div>\n\n<!-- Recursive children template -->\n<ng-template #childrenList let-children=\"children\" let-parent=\"parent\" let-level=\"level\">\n <div\n [axDropList]=\"dragBehavior() !== 'none'\"\n [id]=\"getListId(parent)\"\n [attr.data-node-id]=\"getNodeId(parent)\"\n dropListGroup=\"ax-tree-view-nodes\"\n (dropListDropped)=\"onDrop($event, parent)\"\n class=\"ax-tree-view-drop-list\"\n role=\"group\"\n >\n @for (node of children; track getNodeId(node)) {\n @if (getNodeHidden(node) !== true) {\n <div\n [axDrag]=\"dragBehavior() !== 'none'\"\n [dragDisabled]=\"isNodeEffectivelyDisabled(node)\"\n [dragData]=\"node\"\n class=\"ax-tree-view-node\"\n [class.ax-tree-view-node-active]=\"activeNodeId() === getNodeId(node)\"\n [class.ax-tree-view-node-selected]=\"getNodeSelected(node)\"\n [class.ax-tree-view-node-disabled]=\"isNodeEffectivelyDisabled(node)\"\n [class.ax-tree-view-node-loading]=\"getNodeLoading(node)\"\n [class.ax-tree-view-node-focused]=\"isNodeFocused(getNodeId(node))\"\n role=\"treeitem\"\n [attr.aria-level]=\"getNodeAriaLevel(level)\"\n [attr.aria-expanded]=\"getNodeAriaExpanded(node)\"\n [attr.aria-selected]=\"getNodeAriaSelected(node)\"\n [attr.aria-disabled]=\"\n isNodeEffectivelyDisabled(node) || (isLeafOnlyMode() && !isLeafNode(node)) ? 'true' : null\n \"\n >\n <div\n class=\"ax-tree-view-node-content\"\n [axDropList]=\"dragBehavior() !== 'none'\"\n [id]=\"'ax-tree-view-node-drop-' + getNodeId(node)\"\n [attr.data-node-id]=\"getNodeId(node)\"\n [attr.data-tree-node-id]=\"getNodeId(node)\"\n [attr.data-drop-type]=\"'onto-node'\"\n dropListGroup=\"ax-tree-view-nodes\"\n (dropListDropped)=\"onDropOntoNode($event, node)\"\n (click)=\"onNodeClickHandle(node, $event)\"\n (dblclick)=\"onNodeDoubleClickHandle(node, $event)\"\n (focus)=\"onNodeFocus(getNodeId(node))\"\n (blur)=\"focusedNodeId.set(null)\"\n [tabindex]=\"isNodeFocused(getNodeId(node)) ? 0 : -1\"\n >\n @if (shouldShowDragHandle()) {\n <span\n class=\"ax-tree-view-drag-handle\"\n axDragHandle\n title=\"Drag to reorder\"\n (click)=\"$event.stopPropagation()\"\n >\n ⋮⋮\n </span>\n }\n <ax-button\n class=\"ax-tree-view-expand-toggle ax-sm\"\n (onClick)=\"toggleNode(node, $any($event))\"\n (click)=\"$event.stopPropagation()\"\n [class.ax-tree-view-has-children]=\"shouldShowExpandToggle(node)\"\n [class.ax-tree-view-expanded]=\"getNodeExpanded(node)\"\n [disabled]=\"getNodeLoading(node)\"\n [style.visibility]=\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\"\n >\n @if (getNodeLoading(node)) {\n <ax-icon>\n <i class=\"fa-solid fa-spinner fa-spin ax-tree-view-loading-spinner\"></i>\n </ax-icon>\n } @else {\n <ax-icon>\n <i\n [class]=\"getNodeExpanded(node) ? directionExpandedIcon() : directionCollapsedIcon()\"\n class=\"ax-tree-view-toggle-icon\"\n ></i>\n </ax-icon>\n }\n </ax-button>\n\n @if (nodeTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate()!\"\n [ngTemplateOutletContext]=\"getTemplateContext(node, level)\"\n ></ng-container>\n } @else {\n @if (shouldShowCheckboxForNode(node)) {\n <ax-check-box\n class=\"ax-tree-view-checkbox\"\n [ngModel]=\"getNodeIndeterminate(node) ? null : getNodeSelected(node) || false\"\n [indeterminate]=\"getNodeIndeterminate(node) || false\"\n (onValueChanged)=\"toggleSelection(node, $event)\"\n ></ax-check-box>\n }\n @if (showIcons() && getNodeIcon(node)) {\n <i [class]=\"getNodeIcon(node)\" class=\"ax-tree-view-node-icon\"></i>\n }\n <span\n class=\"ax-tree-view-node-label\"\n [axTooltip]=\"getNodeTooltip(node) || ''\"\n [axTooltipDisabled]=\"!getNodeTooltip(node)\"\n [axTooltipPlacement]=\"'top-start'\"\n >\n {{ getNodeTitle(node) }}\n </span>\n @if (showChildrenBadge() && (getNodeChildrenCount(node) || getNodeChildren(node)?.length)) {\n <span class=\"ax-tree-view-node-badge\">\n <ax-badge\n class=\"ax-tree-view-children-badge\"\n [text]=\"(getNodeChildrenCount(node) ?? getNodeChildren(node)?.length ?? 0).toString()\"\n ></ax-badge>\n </span>\n }\n }\n </div>\n </div>\n @if (getNodeExpanded(node) && getNodeChildren(node)?.length) {\n <div class=\"ax-tree-view-children\" role=\"group\">\n <ng-container\n [ngTemplateOutlet]=\"childrenList\"\n [ngTemplateOutletContext]=\"{ children: getNodeChildren(node), parent: node, level: level + 1 }\"\n ></ng-container>\n </div>\n }\n }\n }\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { AXTreeViewComponent } from './tree-view.component';\n\n@NgModule({\n imports: [AXTreeViewComponent],\n})\nexport class AXTreeViewModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}