@ng-nest/ui 11.2.9 → 11.2.13

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 (639) hide show
  1. package/affix/affix.property.d.ts +2 -2
  2. package/alert/alert.property.d.ts +22 -12
  3. package/alert/ng-nest-ui-alert.metadata.json +1 -1
  4. package/auto-complete/auto-complete.property.d.ts +3 -3
  5. package/avatar/avatar.property.d.ts +6 -6
  6. package/back-top/back-top.property.d.ts +4 -4
  7. package/badge/badge.property.d.ts +3 -3
  8. package/base-form/base-form.component.d.ts +1 -1
  9. package/base-form/base-form.property.d.ts +10 -10
  10. package/border/ng-nest-ui-border.metadata.json +1 -1
  11. package/bundles/ng-nest-ui-affix.umd.js +10 -4
  12. package/bundles/ng-nest-ui-affix.umd.js.map +1 -1
  13. package/bundles/ng-nest-ui-affix.umd.min.js.map +1 -1
  14. package/bundles/ng-nest-ui-alert.umd.js +26 -12
  15. package/bundles/ng-nest-ui-alert.umd.js.map +1 -1
  16. package/bundles/ng-nest-ui-alert.umd.min.js +2 -2
  17. package/bundles/ng-nest-ui-alert.umd.min.js.map +1 -1
  18. package/bundles/ng-nest-ui-anchor.umd.js +10 -4
  19. package/bundles/ng-nest-ui-anchor.umd.js.map +1 -1
  20. package/bundles/ng-nest-ui-anchor.umd.min.js.map +1 -1
  21. package/bundles/ng-nest-ui-auto-complete.umd.js +15 -8
  22. package/bundles/ng-nest-ui-auto-complete.umd.js.map +1 -1
  23. package/bundles/ng-nest-ui-auto-complete.umd.min.js +2 -2
  24. package/bundles/ng-nest-ui-auto-complete.umd.min.js.map +1 -1
  25. package/bundles/ng-nest-ui-avatar.umd.js +10 -4
  26. package/bundles/ng-nest-ui-avatar.umd.js.map +1 -1
  27. package/bundles/ng-nest-ui-avatar.umd.min.js.map +1 -1
  28. package/bundles/ng-nest-ui-back-top.umd.js +10 -4
  29. package/bundles/ng-nest-ui-back-top.umd.js.map +1 -1
  30. package/bundles/ng-nest-ui-back-top.umd.min.js.map +1 -1
  31. package/bundles/ng-nest-ui-badge.umd.js +10 -4
  32. package/bundles/ng-nest-ui-badge.umd.js.map +1 -1
  33. package/bundles/ng-nest-ui-badge.umd.min.js.map +1 -1
  34. package/bundles/ng-nest-ui-base-form.umd.js +10 -4
  35. package/bundles/ng-nest-ui-base-form.umd.js.map +1 -1
  36. package/bundles/ng-nest-ui-base-form.umd.min.js.map +1 -1
  37. package/bundles/ng-nest-ui-border.umd.js +1 -1
  38. package/bundles/ng-nest-ui-border.umd.js.map +1 -1
  39. package/bundles/ng-nest-ui-border.umd.min.js.map +1 -1
  40. package/bundles/ng-nest-ui-button.umd.js +11 -5
  41. package/bundles/ng-nest-ui-button.umd.js.map +1 -1
  42. package/bundles/ng-nest-ui-button.umd.min.js +1 -1
  43. package/bundles/ng-nest-ui-button.umd.min.js.map +1 -1
  44. package/bundles/ng-nest-ui-calendar.umd.js +16 -6
  45. package/bundles/ng-nest-ui-calendar.umd.js.map +1 -1
  46. package/bundles/ng-nest-ui-calendar.umd.min.js +1 -1
  47. package/bundles/ng-nest-ui-calendar.umd.min.js.map +1 -1
  48. package/bundles/ng-nest-ui-card.umd.js +10 -4
  49. package/bundles/ng-nest-ui-card.umd.js.map +1 -1
  50. package/bundles/ng-nest-ui-card.umd.min.js.map +1 -1
  51. package/bundles/ng-nest-ui-carousel.umd.js +10 -4
  52. package/bundles/ng-nest-ui-carousel.umd.js.map +1 -1
  53. package/bundles/ng-nest-ui-carousel.umd.min.js.map +1 -1
  54. package/bundles/ng-nest-ui-cascade.umd.js +10 -4
  55. package/bundles/ng-nest-ui-cascade.umd.js.map +1 -1
  56. package/bundles/ng-nest-ui-cascade.umd.min.js.map +1 -1
  57. package/bundles/ng-nest-ui-checkbox.umd.js +16 -9
  58. package/bundles/ng-nest-ui-checkbox.umd.js.map +1 -1
  59. package/bundles/ng-nest-ui-checkbox.umd.min.js +2 -2
  60. package/bundles/ng-nest-ui-checkbox.umd.min.js.map +1 -1
  61. package/bundles/ng-nest-ui-collapse.umd.js +10 -4
  62. package/bundles/ng-nest-ui-collapse.umd.js.map +1 -1
  63. package/bundles/ng-nest-ui-collapse.umd.min.js.map +1 -1
  64. package/bundles/ng-nest-ui-color-picker.umd.js +10 -4
  65. package/bundles/ng-nest-ui-color-picker.umd.js.map +1 -1
  66. package/bundles/ng-nest-ui-color-picker.umd.min.js.map +1 -1
  67. package/bundles/ng-nest-ui-color.umd.js +10 -4
  68. package/bundles/ng-nest-ui-color.umd.js.map +1 -1
  69. package/bundles/ng-nest-ui-color.umd.min.js.map +1 -1
  70. package/bundles/ng-nest-ui-comment.umd.js +16 -6
  71. package/bundles/ng-nest-ui-comment.umd.js.map +1 -1
  72. package/bundles/ng-nest-ui-comment.umd.min.js +2 -2
  73. package/bundles/ng-nest-ui-comment.umd.min.js.map +1 -1
  74. package/bundles/ng-nest-ui-container.umd.js +10 -4
  75. package/bundles/ng-nest-ui-container.umd.js.map +1 -1
  76. package/bundles/ng-nest-ui-container.umd.min.js.map +1 -1
  77. package/bundles/ng-nest-ui-core.umd.js +30 -8
  78. package/bundles/ng-nest-ui-core.umd.js.map +1 -1
  79. package/bundles/ng-nest-ui-core.umd.min.js +2 -2
  80. package/bundles/ng-nest-ui-core.umd.min.js.map +1 -1
  81. package/bundles/ng-nest-ui-crumb.umd.js +10 -4
  82. package/bundles/ng-nest-ui-crumb.umd.js.map +1 -1
  83. package/bundles/ng-nest-ui-crumb.umd.min.js.map +1 -1
  84. package/bundles/ng-nest-ui-date-picker.umd.js +16 -7
  85. package/bundles/ng-nest-ui-date-picker.umd.js.map +1 -1
  86. package/bundles/ng-nest-ui-date-picker.umd.min.js +1 -1
  87. package/bundles/ng-nest-ui-date-picker.umd.min.js.map +1 -1
  88. package/bundles/ng-nest-ui-dialog.umd.js +25 -12
  89. package/bundles/ng-nest-ui-dialog.umd.js.map +1 -1
  90. package/bundles/ng-nest-ui-dialog.umd.min.js +2 -2
  91. package/bundles/ng-nest-ui-dialog.umd.min.js.map +1 -1
  92. package/bundles/ng-nest-ui-drawer.umd.js +10 -4
  93. package/bundles/ng-nest-ui-drawer.umd.js.map +1 -1
  94. package/bundles/ng-nest-ui-drawer.umd.min.js.map +1 -1
  95. package/bundles/ng-nest-ui-dropdown.umd.js +10 -4
  96. package/bundles/ng-nest-ui-dropdown.umd.js.map +1 -1
  97. package/bundles/ng-nest-ui-dropdown.umd.min.js.map +1 -1
  98. package/bundles/ng-nest-ui-empty.umd.js +10 -4
  99. package/bundles/ng-nest-ui-empty.umd.js.map +1 -1
  100. package/bundles/ng-nest-ui-empty.umd.min.js.map +1 -1
  101. package/bundles/ng-nest-ui-find.umd.js +79 -12
  102. package/bundles/ng-nest-ui-find.umd.js.map +1 -1
  103. package/bundles/ng-nest-ui-find.umd.min.js +2 -2
  104. package/bundles/ng-nest-ui-find.umd.min.js.map +1 -1
  105. package/bundles/ng-nest-ui-form.umd.js +16 -9
  106. package/bundles/ng-nest-ui-form.umd.js.map +1 -1
  107. package/bundles/ng-nest-ui-form.umd.min.js +1 -1
  108. package/bundles/ng-nest-ui-form.umd.min.js.map +1 -1
  109. package/bundles/ng-nest-ui-highlight.umd.js +10 -4
  110. package/bundles/ng-nest-ui-highlight.umd.js.map +1 -1
  111. package/bundles/ng-nest-ui-highlight.umd.min.js.map +1 -1
  112. package/bundles/ng-nest-ui-i18n.umd.js +1 -1
  113. package/bundles/ng-nest-ui-i18n.umd.js.map +1 -1
  114. package/bundles/ng-nest-ui-i18n.umd.min.js +1 -1
  115. package/bundles/ng-nest-ui-i18n.umd.min.js.map +1 -1
  116. package/bundles/ng-nest-ui-icon.umd.js +10 -4
  117. package/bundles/ng-nest-ui-icon.umd.js.map +1 -1
  118. package/bundles/ng-nest-ui-icon.umd.min.js.map +1 -1
  119. package/bundles/ng-nest-ui-inner.umd.js +10 -4
  120. package/bundles/ng-nest-ui-inner.umd.js.map +1 -1
  121. package/bundles/ng-nest-ui-inner.umd.min.js.map +1 -1
  122. package/bundles/ng-nest-ui-input-number.umd.js +10 -4
  123. package/bundles/ng-nest-ui-input-number.umd.js.map +1 -1
  124. package/bundles/ng-nest-ui-input-number.umd.min.js.map +1 -1
  125. package/bundles/ng-nest-ui-input.umd.js +10 -4
  126. package/bundles/ng-nest-ui-input.umd.js.map +1 -1
  127. package/bundles/ng-nest-ui-input.umd.min.js.map +1 -1
  128. package/bundles/ng-nest-ui-layout.umd.js +10 -4
  129. package/bundles/ng-nest-ui-layout.umd.js.map +1 -1
  130. package/bundles/ng-nest-ui-layout.umd.min.js.map +1 -1
  131. package/bundles/ng-nest-ui-link.umd.js +10 -4
  132. package/bundles/ng-nest-ui-link.umd.js.map +1 -1
  133. package/bundles/ng-nest-ui-link.umd.min.js.map +1 -1
  134. package/bundles/ng-nest-ui-list.umd.js +10 -4
  135. package/bundles/ng-nest-ui-list.umd.js.map +1 -1
  136. package/bundles/ng-nest-ui-list.umd.min.js.map +1 -1
  137. package/bundles/ng-nest-ui-loading.umd.js +10 -4
  138. package/bundles/ng-nest-ui-loading.umd.js.map +1 -1
  139. package/bundles/ng-nest-ui-loading.umd.min.js.map +1 -1
  140. package/bundles/ng-nest-ui-menu.umd.js +22 -11
  141. package/bundles/ng-nest-ui-menu.umd.js.map +1 -1
  142. package/bundles/ng-nest-ui-menu.umd.min.js +2 -2
  143. package/bundles/ng-nest-ui-menu.umd.min.js.map +1 -1
  144. package/bundles/ng-nest-ui-message-box.umd.js +37 -10
  145. package/bundles/ng-nest-ui-message-box.umd.js.map +1 -1
  146. package/bundles/ng-nest-ui-message-box.umd.min.js +1 -1
  147. package/bundles/ng-nest-ui-message-box.umd.min.js.map +1 -1
  148. package/bundles/ng-nest-ui-message.umd.js +10 -4
  149. package/bundles/ng-nest-ui-message.umd.js.map +1 -1
  150. package/bundles/ng-nest-ui-message.umd.min.js.map +1 -1
  151. package/bundles/ng-nest-ui-notification.umd.js +10 -4
  152. package/bundles/ng-nest-ui-notification.umd.js.map +1 -1
  153. package/bundles/ng-nest-ui-notification.umd.min.js.map +1 -1
  154. package/bundles/ng-nest-ui-outlet.umd.js +10 -4
  155. package/bundles/ng-nest-ui-outlet.umd.js.map +1 -1
  156. package/bundles/ng-nest-ui-outlet.umd.min.js.map +1 -1
  157. package/bundles/ng-nest-ui-page-header.umd.js +10 -4
  158. package/bundles/ng-nest-ui-page-header.umd.js.map +1 -1
  159. package/bundles/ng-nest-ui-page-header.umd.min.js.map +1 -1
  160. package/bundles/ng-nest-ui-pagination.umd.js +10 -4
  161. package/bundles/ng-nest-ui-pagination.umd.js.map +1 -1
  162. package/bundles/ng-nest-ui-pagination.umd.min.js.map +1 -1
  163. package/bundles/ng-nest-ui-popconfirm.umd.js +11 -5
  164. package/bundles/ng-nest-ui-popconfirm.umd.js.map +1 -1
  165. package/bundles/ng-nest-ui-popconfirm.umd.min.js +2 -2
  166. package/bundles/ng-nest-ui-popconfirm.umd.min.js.map +1 -1
  167. package/bundles/ng-nest-ui-popover.umd.js +10 -4
  168. package/bundles/ng-nest-ui-popover.umd.js.map +1 -1
  169. package/bundles/ng-nest-ui-popover.umd.min.js.map +1 -1
  170. package/bundles/ng-nest-ui-portal.umd.js +10 -4
  171. package/bundles/ng-nest-ui-portal.umd.js.map +1 -1
  172. package/bundles/ng-nest-ui-portal.umd.min.js.map +1 -1
  173. package/bundles/ng-nest-ui-progress.umd.js +10 -4
  174. package/bundles/ng-nest-ui-progress.umd.js.map +1 -1
  175. package/bundles/ng-nest-ui-progress.umd.min.js.map +1 -1
  176. package/bundles/ng-nest-ui-radio.umd.js +11 -5
  177. package/bundles/ng-nest-ui-radio.umd.js.map +1 -1
  178. package/bundles/ng-nest-ui-radio.umd.min.js +1 -1
  179. package/bundles/ng-nest-ui-radio.umd.min.js.map +1 -1
  180. package/bundles/ng-nest-ui-rate.umd.js +10 -4
  181. package/bundles/ng-nest-ui-rate.umd.js.map +1 -1
  182. package/bundles/ng-nest-ui-rate.umd.min.js.map +1 -1
  183. package/bundles/ng-nest-ui-result.umd.js +18 -5
  184. package/bundles/ng-nest-ui-result.umd.js.map +1 -1
  185. package/bundles/ng-nest-ui-result.umd.min.js +1 -1
  186. package/bundles/ng-nest-ui-result.umd.min.js.map +1 -1
  187. package/bundles/ng-nest-ui-ripple.umd.js +11 -5
  188. package/bundles/ng-nest-ui-ripple.umd.js.map +1 -1
  189. package/bundles/ng-nest-ui-ripple.umd.min.js +2 -2
  190. package/bundles/ng-nest-ui-ripple.umd.min.js.map +1 -1
  191. package/bundles/ng-nest-ui-select.umd.js +12 -6
  192. package/bundles/ng-nest-ui-select.umd.js.map +1 -1
  193. package/bundles/ng-nest-ui-select.umd.min.js +1 -1
  194. package/bundles/ng-nest-ui-select.umd.min.js.map +1 -1
  195. package/bundles/ng-nest-ui-skeleton.umd.js +11 -5
  196. package/bundles/ng-nest-ui-skeleton.umd.js.map +1 -1
  197. package/bundles/ng-nest-ui-skeleton.umd.min.js +1 -1
  198. package/bundles/ng-nest-ui-skeleton.umd.min.js.map +1 -1
  199. package/bundles/ng-nest-ui-slider-select.umd.js +10 -4
  200. package/bundles/ng-nest-ui-slider-select.umd.js.map +1 -1
  201. package/bundles/ng-nest-ui-slider-select.umd.min.js.map +1 -1
  202. package/bundles/ng-nest-ui-slider.umd.js +10 -4
  203. package/bundles/ng-nest-ui-slider.umd.js.map +1 -1
  204. package/bundles/ng-nest-ui-slider.umd.min.js.map +1 -1
  205. package/bundles/ng-nest-ui-statistic.umd.js +10 -4
  206. package/bundles/ng-nest-ui-statistic.umd.js.map +1 -1
  207. package/bundles/ng-nest-ui-statistic.umd.min.js.map +1 -1
  208. package/bundles/ng-nest-ui-steps.umd.js +10 -4
  209. package/bundles/ng-nest-ui-steps.umd.js.map +1 -1
  210. package/bundles/ng-nest-ui-steps.umd.min.js.map +1 -1
  211. package/bundles/ng-nest-ui-switch.umd.js +10 -4
  212. package/bundles/ng-nest-ui-switch.umd.js.map +1 -1
  213. package/bundles/ng-nest-ui-switch.umd.min.js.map +1 -1
  214. package/bundles/ng-nest-ui-table.umd.js +78 -26
  215. package/bundles/ng-nest-ui-table.umd.js.map +1 -1
  216. package/bundles/ng-nest-ui-table.umd.min.js +2 -2
  217. package/bundles/ng-nest-ui-table.umd.min.js.map +1 -1
  218. package/bundles/ng-nest-ui-tabs.umd.js +12 -6
  219. package/bundles/ng-nest-ui-tabs.umd.js.map +1 -1
  220. package/bundles/ng-nest-ui-tabs.umd.min.js +1 -1
  221. package/bundles/ng-nest-ui-tabs.umd.min.js.map +1 -1
  222. package/bundles/ng-nest-ui-tag.umd.js +10 -4
  223. package/bundles/ng-nest-ui-tag.umd.js.map +1 -1
  224. package/bundles/ng-nest-ui-tag.umd.min.js.map +1 -1
  225. package/bundles/ng-nest-ui-text-retract.umd.js +10 -4
  226. package/bundles/ng-nest-ui-text-retract.umd.js.map +1 -1
  227. package/bundles/ng-nest-ui-text-retract.umd.min.js.map +1 -1
  228. package/bundles/ng-nest-ui-textarea.umd.js +10 -4
  229. package/bundles/ng-nest-ui-textarea.umd.js.map +1 -1
  230. package/bundles/ng-nest-ui-textarea.umd.min.js.map +1 -1
  231. package/bundles/ng-nest-ui-theme.umd.js +10 -4
  232. package/bundles/ng-nest-ui-theme.umd.js.map +1 -1
  233. package/bundles/ng-nest-ui-theme.umd.min.js.map +1 -1
  234. package/bundles/ng-nest-ui-time-ago.umd.js +2 -0
  235. package/bundles/ng-nest-ui-time-ago.umd.js.map +1 -1
  236. package/bundles/ng-nest-ui-time-ago.umd.min.js +1 -1
  237. package/bundles/ng-nest-ui-time-ago.umd.min.js.map +1 -1
  238. package/bundles/ng-nest-ui-time-picker.umd.js +10 -4
  239. package/bundles/ng-nest-ui-time-picker.umd.js.map +1 -1
  240. package/bundles/ng-nest-ui-time-picker.umd.min.js.map +1 -1
  241. package/bundles/ng-nest-ui-time-range.umd.js +10 -4
  242. package/bundles/ng-nest-ui-time-range.umd.js.map +1 -1
  243. package/bundles/ng-nest-ui-time-range.umd.min.js.map +1 -1
  244. package/bundles/ng-nest-ui-timeline.umd.js +10 -4
  245. package/bundles/ng-nest-ui-timeline.umd.js.map +1 -1
  246. package/bundles/ng-nest-ui-timeline.umd.min.js.map +1 -1
  247. package/bundles/ng-nest-ui-tooltip.umd.js +10 -4
  248. package/bundles/ng-nest-ui-tooltip.umd.js.map +1 -1
  249. package/bundles/ng-nest-ui-tooltip.umd.min.js.map +1 -1
  250. package/bundles/ng-nest-ui-transfer.umd.js +14 -7
  251. package/bundles/ng-nest-ui-transfer.umd.js.map +1 -1
  252. package/bundles/ng-nest-ui-transfer.umd.min.js +1 -1
  253. package/bundles/ng-nest-ui-transfer.umd.min.js.map +1 -1
  254. package/bundles/ng-nest-ui-tree-file.umd.js +27 -5
  255. package/bundles/ng-nest-ui-tree-file.umd.js.map +1 -1
  256. package/bundles/ng-nest-ui-tree-file.umd.min.js +1 -1
  257. package/bundles/ng-nest-ui-tree-file.umd.min.js.map +1 -1
  258. package/bundles/ng-nest-ui-tree.umd.js +27 -14
  259. package/bundles/ng-nest-ui-tree.umd.js.map +1 -1
  260. package/bundles/ng-nest-ui-tree.umd.min.js +1 -1
  261. package/bundles/ng-nest-ui-tree.umd.min.js.map +1 -1
  262. package/bundles/ng-nest-ui-typography.umd.js +11 -6
  263. package/bundles/ng-nest-ui-typography.umd.js.map +1 -1
  264. package/bundles/ng-nest-ui-typography.umd.min.js +1 -1
  265. package/bundles/ng-nest-ui-typography.umd.min.js.map +1 -1
  266. package/bundles/ng-nest-ui-upload.umd.js +10 -4
  267. package/bundles/ng-nest-ui-upload.umd.js.map +1 -1
  268. package/bundles/ng-nest-ui-upload.umd.min.js.map +1 -1
  269. package/button/button.property.d.ts +14 -14
  270. package/button/buttons.component.d.ts +2 -2
  271. package/button/ng-nest-ui-button.metadata.json +1 -1
  272. package/calendar/calendar.property.d.ts +1 -1
  273. package/card/card.property.d.ts +1 -1
  274. package/carousel/carousel.property.d.ts +7 -7
  275. package/cascade/cascade.property.d.ts +1 -1
  276. package/checkbox/checkbox.component.d.ts +1 -0
  277. package/checkbox/checkbox.property.d.ts +4 -4
  278. package/checkbox/ng-nest-ui-checkbox.metadata.json +1 -1
  279. package/collapse/collapse.property.d.ts +3 -3
  280. package/color/color.property.d.ts +2 -2
  281. package/color-picker/color-picker.property.d.ts +1 -1
  282. package/comment/comment.component.d.ts +1 -0
  283. package/comment/comment.property.d.ts +1 -1
  284. package/comment/ng-nest-ui-comment.metadata.json +1 -1
  285. package/container/aside.component.d.ts +1 -1
  286. package/container/container.property.d.ts +3 -3
  287. package/container/header.component.d.ts +1 -1
  288. package/core/config/config.d.ts +7 -0
  289. package/core/ng-nest-ui-core.metadata.json +1 -1
  290. package/core/util/html.d.ts +4 -0
  291. package/core/util/public-api.d.ts +1 -0
  292. package/core/util/resize.d.ts +1 -1
  293. package/crumb/crumb.property.d.ts +2 -2
  294. package/date-picker/date-picker.property.d.ts +8 -8
  295. package/date-picker/ng-nest-ui-date-picker.metadata.json +1 -1
  296. package/date-picker/picker-date.component.d.ts +3 -2
  297. package/dialog/dialog.property.d.ts +16 -6
  298. package/dialog/ng-nest-ui-dialog.metadata.json +1 -1
  299. package/drawer/drawer.property.d.ts +3 -3
  300. package/dropdown/dropdown.property.d.ts +4 -4
  301. package/esm2015/affix/affix.property.js +1 -1
  302. package/esm2015/alert/alert.component.js +5 -4
  303. package/esm2015/alert/alert.module.js +3 -2
  304. package/esm2015/alert/alert.property.js +8 -1
  305. package/esm2015/anchor/anchor.component.js +1 -1
  306. package/esm2015/anchor/anchor.property.js +1 -1
  307. package/esm2015/auto-complete/auto-complete-portal.component.js +1 -1
  308. package/esm2015/auto-complete/auto-complete.component.js +6 -5
  309. package/esm2015/auto-complete/auto-complete.property.js +1 -1
  310. package/esm2015/avatar/avatar.property.js +1 -1
  311. package/esm2015/back-top/back-top.component.js +1 -1
  312. package/esm2015/back-top/back-top.property.js +1 -1
  313. package/esm2015/badge/badge.property.js +1 -1
  314. package/esm2015/base-form/base-form.component.js +1 -1
  315. package/esm2015/base-form/base-form.property.js +1 -1
  316. package/esm2015/border/border.component.js +2 -2
  317. package/esm2015/button/button.property.js +1 -1
  318. package/esm2015/button/buttons.component.js +1 -1
  319. package/esm2015/calendar/calendar.component.js +7 -3
  320. package/esm2015/calendar/calendar.property.js +1 -1
  321. package/esm2015/card/card.property.js +1 -1
  322. package/esm2015/carousel/carousel-panel.component.js +1 -1
  323. package/esm2015/carousel/carousel.component.js +1 -1
  324. package/esm2015/carousel/carousel.property.js +1 -1
  325. package/esm2015/cascade/cascade-portal.component.js +1 -1
  326. package/esm2015/cascade/cascade.component.js +1 -1
  327. package/esm2015/cascade/cascade.property.js +1 -1
  328. package/esm2015/checkbox/checkbox.component.js +7 -6
  329. package/esm2015/checkbox/checkbox.property.js +1 -1
  330. package/esm2015/collapse/collapse-panel.component.js +1 -1
  331. package/esm2015/collapse/collapse.property.js +1 -1
  332. package/esm2015/color/color.component.js +1 -1
  333. package/esm2015/color/color.property.js +1 -1
  334. package/esm2015/color-picker/color-picker-portal.component.js +1 -1
  335. package/esm2015/color-picker/color-picker.component.js +1 -1
  336. package/esm2015/color-picker/color-picker.property.js +1 -1
  337. package/esm2015/comment/comment-reply.component.js +1 -1
  338. package/esm2015/comment/comment.component.js +6 -2
  339. package/esm2015/comment/comment.property.js +2 -2
  340. package/esm2015/container/container.property.js +1 -1
  341. package/esm2015/core/config/config.js +1 -1
  342. package/esm2015/core/config/config.service.js +1 -1
  343. package/esm2015/core/theme/theme.service.js +1 -1
  344. package/esm2015/core/util/html.js +11 -0
  345. package/esm2015/core/util/public-api.js +2 -1
  346. package/esm2015/core/util/resize.js +2 -2
  347. package/esm2015/crumb/crumb.property.js +1 -1
  348. package/esm2015/date-picker/date-picker-portal.component.js +1 -1
  349. package/esm2015/date-picker/date-picker.component.js +1 -1
  350. package/esm2015/date-picker/date-picker.property.js +1 -1
  351. package/esm2015/date-picker/picker-date.component.js +6 -3
  352. package/esm2015/date-picker/picker-month.component.js +2 -2
  353. package/esm2015/date-picker/picker-year.component.js +1 -1
  354. package/esm2015/dialog/dialog.component.js +3 -3
  355. package/esm2015/dialog/dialog.module.js +3 -1
  356. package/esm2015/dialog/dialog.property.js +8 -2
  357. package/esm2015/drawer/drawer.component.js +1 -1
  358. package/esm2015/drawer/drawer.property.js +1 -1
  359. package/esm2015/dropdown/dropdown-portal.component.js +1 -1
  360. package/esm2015/dropdown/dropdown.component.js +1 -1
  361. package/esm2015/dropdown/dropdown.property.js +1 -1
  362. package/esm2015/find/find.component.js +43 -4
  363. package/esm2015/find/find.module.js +3 -1
  364. package/esm2015/find/find.property.js +19 -2
  365. package/esm2015/form/control.component.js +7 -7
  366. package/esm2015/form/form.component.js +2 -2
  367. package/esm2015/form/form.property.js +1 -1
  368. package/esm2015/highlight/highlight.component.js +1 -1
  369. package/esm2015/highlight/highlight.property.js +1 -1
  370. package/esm2015/i18n/i18n.directive.js +1 -1
  371. package/esm2015/i18n/i18n.service.js +1 -1
  372. package/esm2015/i18n/ng-nest-ui-i18n.js +1 -2
  373. package/esm2015/i18n/public-api.js +2 -1
  374. package/esm2015/icon/icon.component.js +1 -1
  375. package/esm2015/icon/icon.property.js +1 -1
  376. package/esm2015/inner/inner.property.js +1 -1
  377. package/esm2015/input/input.component.js +1 -1
  378. package/esm2015/input/input.property.js +1 -1
  379. package/esm2015/input-number/input-number.component.js +1 -1
  380. package/esm2015/layout/layout.property.js +1 -1
  381. package/esm2015/link/link.property.js +1 -1
  382. package/esm2015/list/list.component.js +1 -1
  383. package/esm2015/list/list.property.js +1 -1
  384. package/esm2015/loading/loading.component.js +1 -1
  385. package/esm2015/loading/loading.property.js +1 -1
  386. package/esm2015/menu/menu-node.component.js +8 -6
  387. package/esm2015/menu/menu.component.js +2 -2
  388. package/esm2015/menu/menu.property.js +2 -2
  389. package/esm2015/message-box/message-box.component.js +20 -7
  390. package/esm2015/message-box/message-box.property.js +1 -1
  391. package/esm2015/outlet/outlet.directive.js +1 -1
  392. package/esm2015/page-header/page-header.property.js +1 -1
  393. package/esm2015/pagination/pagination.component.js +1 -1
  394. package/esm2015/pagination/pagination.property.js +1 -1
  395. package/esm2015/popconfirm/popconfirm.component.js +2 -2
  396. package/esm2015/popconfirm/popconfirm.property.js +1 -1
  397. package/esm2015/popover/popover-portal.component.js +1 -1
  398. package/esm2015/popover/popover.directive.js +1 -1
  399. package/esm2015/popover/popover.property.js +1 -1
  400. package/esm2015/progress/progress.component.js +1 -1
  401. package/esm2015/progress/progress.property.js +1 -1
  402. package/esm2015/radio/radio.component.js +2 -2
  403. package/esm2015/radio/radio.property.js +1 -1
  404. package/esm2015/rate/rate.component.js +1 -1
  405. package/esm2015/rate/rate.property.js +2 -2
  406. package/esm2015/result/result.component.js +5 -2
  407. package/esm2015/result/result.property.js +1 -1
  408. package/esm2015/ripple/ripple.directive.js +2 -2
  409. package/esm2015/ripple/ripple.property.js +1 -1
  410. package/esm2015/select/select-portal.component.js +1 -1
  411. package/esm2015/select/select.component.js +4 -4
  412. package/esm2015/select/select.property.js +1 -1
  413. package/esm2015/skeleton/skeleton.component.js +2 -2
  414. package/esm2015/skeleton/skeleton.property.js +1 -1
  415. package/esm2015/slider/slider.component.js +1 -1
  416. package/esm2015/slider/slider.property.js +1 -1
  417. package/esm2015/slider-select/slider-select.component.js +1 -1
  418. package/esm2015/slider-select/slider-select.property.js +1 -1
  419. package/esm2015/statistic/countdown.component.js +1 -1
  420. package/esm2015/statistic/statistic.property.js +1 -1
  421. package/esm2015/steps/steps.property.js +1 -1
  422. package/esm2015/switch/switch.component.js +1 -1
  423. package/esm2015/table/table-body.component.js +19 -9
  424. package/esm2015/table/table-foot.component.js +7 -7
  425. package/esm2015/table/table-head.component.js +13 -9
  426. package/esm2015/table/table.component.js +10 -3
  427. package/esm2015/table/table.property.js +8 -3
  428. package/esm2015/tabs/tab-content.component.js +1 -1
  429. package/esm2015/tabs/tab.component.js +1 -1
  430. package/esm2015/tabs/tabs.component.js +3 -3
  431. package/esm2015/tabs/tabs.property.js +1 -1
  432. package/esm2015/tag/tag.property.js +1 -1
  433. package/esm2015/text-retract/text-retract.component.js +1 -1
  434. package/esm2015/text-retract/text-retract.property.js +1 -1
  435. package/esm2015/textarea/textarea.component.js +1 -1
  436. package/esm2015/textarea/textarea.property.js +1 -1
  437. package/esm2015/theme/theme.property.js +1 -1
  438. package/esm2015/time-ago/time-ago.pipe.js +3 -1
  439. package/esm2015/time-picker/time-picker-frame.component.js +1 -1
  440. package/esm2015/time-picker/time-picker-portal.component.js +1 -1
  441. package/esm2015/time-picker/time-picker.component.js +2 -2
  442. package/esm2015/time-picker/time-picker.property.js +1 -1
  443. package/esm2015/timeline/timeline.property.js +1 -1
  444. package/esm2015/tooltip/tooltip-portal.component.js +1 -1
  445. package/esm2015/tooltip/tooltip.directive.js +1 -1
  446. package/esm2015/tooltip/tooltip.property.js +1 -1
  447. package/esm2015/transfer/transfer.component.js +5 -4
  448. package/esm2015/transfer/transfer.property.js +1 -1
  449. package/esm2015/tree/tree-node.component.js +10 -7
  450. package/esm2015/tree/tree.component.js +2 -2
  451. package/esm2015/tree/tree.property.js +3 -2
  452. package/esm2015/tree-file/tree-file.component.js +10 -2
  453. package/esm2015/tree-file/tree-file.property.js +1 -1
  454. package/esm2015/typography/typography.component.js +2 -3
  455. package/esm2015/typography/typography.property.js +1 -1
  456. package/esm2015/upload/upload-portal.component.js +1 -1
  457. package/esm2015/upload/upload.component.js +1 -1
  458. package/esm2015/upload/upload.property.js +1 -1
  459. package/fesm2015/ng-nest-ui-affix.js.map +1 -1
  460. package/fesm2015/ng-nest-ui-alert.js +14 -5
  461. package/fesm2015/ng-nest-ui-alert.js.map +1 -1
  462. package/fesm2015/ng-nest-ui-anchor.js.map +1 -1
  463. package/fesm2015/ng-nest-ui-auto-complete.js +5 -4
  464. package/fesm2015/ng-nest-ui-auto-complete.js.map +1 -1
  465. package/fesm2015/ng-nest-ui-avatar.js.map +1 -1
  466. package/fesm2015/ng-nest-ui-back-top.js.map +1 -1
  467. package/fesm2015/ng-nest-ui-badge.js.map +1 -1
  468. package/fesm2015/ng-nest-ui-base-form.js.map +1 -1
  469. package/fesm2015/ng-nest-ui-border.js +1 -1
  470. package/fesm2015/ng-nest-ui-border.js.map +1 -1
  471. package/fesm2015/ng-nest-ui-button.js +1 -1
  472. package/fesm2015/ng-nest-ui-button.js.map +1 -1
  473. package/fesm2015/ng-nest-ui-calendar.js +6 -2
  474. package/fesm2015/ng-nest-ui-calendar.js.map +1 -1
  475. package/fesm2015/ng-nest-ui-card.js.map +1 -1
  476. package/fesm2015/ng-nest-ui-carousel.js.map +1 -1
  477. package/fesm2015/ng-nest-ui-cascade.js.map +1 -1
  478. package/fesm2015/ng-nest-ui-checkbox.js +6 -5
  479. package/fesm2015/ng-nest-ui-checkbox.js.map +1 -1
  480. package/fesm2015/ng-nest-ui-collapse.js.map +1 -1
  481. package/fesm2015/ng-nest-ui-color-picker.js.map +1 -1
  482. package/fesm2015/ng-nest-ui-color.js.map +1 -1
  483. package/fesm2015/ng-nest-ui-comment.js +6 -2
  484. package/fesm2015/ng-nest-ui-comment.js.map +1 -1
  485. package/fesm2015/ng-nest-ui-container.js.map +1 -1
  486. package/fesm2015/ng-nest-ui-core.js +13 -2
  487. package/fesm2015/ng-nest-ui-core.js.map +1 -1
  488. package/fesm2015/ng-nest-ui-crumb.js.map +1 -1
  489. package/fesm2015/ng-nest-ui-date-picker.js +6 -3
  490. package/fesm2015/ng-nest-ui-date-picker.js.map +1 -1
  491. package/fesm2015/ng-nest-ui-dialog.js +12 -4
  492. package/fesm2015/ng-nest-ui-dialog.js.map +1 -1
  493. package/fesm2015/ng-nest-ui-drawer.js.map +1 -1
  494. package/fesm2015/ng-nest-ui-dropdown.js.map +1 -1
  495. package/fesm2015/ng-nest-ui-find.js +62 -4
  496. package/fesm2015/ng-nest-ui-find.js.map +1 -1
  497. package/fesm2015/ng-nest-ui-form.js +7 -6
  498. package/fesm2015/ng-nest-ui-form.js.map +1 -1
  499. package/fesm2015/ng-nest-ui-highlight.js.map +1 -1
  500. package/fesm2015/ng-nest-ui-i18n.js +1 -1
  501. package/fesm2015/ng-nest-ui-i18n.js.map +1 -1
  502. package/fesm2015/ng-nest-ui-icon.js.map +1 -1
  503. package/fesm2015/ng-nest-ui-inner.js.map +1 -1
  504. package/fesm2015/ng-nest-ui-input-number.js.map +1 -1
  505. package/fesm2015/ng-nest-ui-input.js.map +1 -1
  506. package/fesm2015/ng-nest-ui-layout.js.map +1 -1
  507. package/fesm2015/ng-nest-ui-link.js.map +1 -1
  508. package/fesm2015/ng-nest-ui-list.js.map +1 -1
  509. package/fesm2015/ng-nest-ui-loading.js.map +1 -1
  510. package/fesm2015/ng-nest-ui-menu.js +10 -7
  511. package/fesm2015/ng-nest-ui-menu.js.map +1 -1
  512. package/fesm2015/ng-nest-ui-message-box.js +19 -6
  513. package/fesm2015/ng-nest-ui-message-box.js.map +1 -1
  514. package/fesm2015/ng-nest-ui-outlet.js.map +1 -1
  515. package/fesm2015/ng-nest-ui-page-header.js.map +1 -1
  516. package/fesm2015/ng-nest-ui-pagination.js.map +1 -1
  517. package/fesm2015/ng-nest-ui-popconfirm.js +1 -1
  518. package/fesm2015/ng-nest-ui-popconfirm.js.map +1 -1
  519. package/fesm2015/ng-nest-ui-popover.js.map +1 -1
  520. package/fesm2015/ng-nest-ui-progress.js.map +1 -1
  521. package/fesm2015/ng-nest-ui-radio.js +1 -1
  522. package/fesm2015/ng-nest-ui-radio.js.map +1 -1
  523. package/fesm2015/ng-nest-ui-rate.js.map +1 -1
  524. package/fesm2015/ng-nest-ui-result.js +4 -1
  525. package/fesm2015/ng-nest-ui-result.js.map +1 -1
  526. package/fesm2015/ng-nest-ui-ripple.js +1 -1
  527. package/fesm2015/ng-nest-ui-ripple.js.map +1 -1
  528. package/fesm2015/ng-nest-ui-select.js +3 -3
  529. package/fesm2015/ng-nest-ui-select.js.map +1 -1
  530. package/fesm2015/ng-nest-ui-skeleton.js +1 -1
  531. package/fesm2015/ng-nest-ui-skeleton.js.map +1 -1
  532. package/fesm2015/ng-nest-ui-slider-select.js.map +1 -1
  533. package/fesm2015/ng-nest-ui-slider.js.map +1 -1
  534. package/fesm2015/ng-nest-ui-statistic.js.map +1 -1
  535. package/fesm2015/ng-nest-ui-steps.js.map +1 -1
  536. package/fesm2015/ng-nest-ui-switch.js.map +1 -1
  537. package/fesm2015/ng-nest-ui-table.js +50 -21
  538. package/fesm2015/ng-nest-ui-table.js.map +1 -1
  539. package/fesm2015/ng-nest-ui-tabs.js +2 -2
  540. package/fesm2015/ng-nest-ui-tabs.js.map +1 -1
  541. package/fesm2015/ng-nest-ui-tag.js.map +1 -1
  542. package/fesm2015/ng-nest-ui-text-retract.js.map +1 -1
  543. package/fesm2015/ng-nest-ui-textarea.js.map +1 -1
  544. package/fesm2015/ng-nest-ui-theme.js.map +1 -1
  545. package/fesm2015/ng-nest-ui-time-ago.js +2 -0
  546. package/fesm2015/ng-nest-ui-time-ago.js.map +1 -1
  547. package/fesm2015/ng-nest-ui-time-picker.js.map +1 -1
  548. package/fesm2015/ng-nest-ui-timeline.js.map +1 -1
  549. package/fesm2015/ng-nest-ui-tooltip.js.map +1 -1
  550. package/fesm2015/ng-nest-ui-transfer.js +4 -3
  551. package/fesm2015/ng-nest-ui-transfer.js.map +1 -1
  552. package/fesm2015/ng-nest-ui-tree-file.js +9 -1
  553. package/fesm2015/ng-nest-ui-tree-file.js.map +1 -1
  554. package/fesm2015/ng-nest-ui-tree.js +12 -7
  555. package/fesm2015/ng-nest-ui-tree.js.map +1 -1
  556. package/fesm2015/ng-nest-ui-typography.js +1 -2
  557. package/fesm2015/ng-nest-ui-typography.js.map +1 -1
  558. package/fesm2015/ng-nest-ui-upload.js.map +1 -1
  559. package/find/find.component.d.ts +3 -0
  560. package/find/find.property.d.ts +53 -9
  561. package/find/ng-nest-ui-find.metadata.json +1 -1
  562. package/form/control.component.d.ts +2 -3
  563. package/form/form.property.d.ts +5 -5
  564. package/form/ng-nest-ui-form.metadata.json +1 -1
  565. package/highlight/highlight.property.d.ts +2 -2
  566. package/i18n/ng-nest-ui-i18n.d.ts +0 -1
  567. package/i18n/ng-nest-ui-i18n.metadata.json +1 -1
  568. package/i18n/public-api.d.ts +1 -0
  569. package/icon/icon.component.d.ts +2 -2
  570. package/icon/icon.property.d.ts +6 -6
  571. package/inner/inner.property.d.ts +1 -1
  572. package/input/input.property.d.ts +4 -4
  573. package/layout/layout.property.d.ts +11 -11
  574. package/link/link.property.d.ts +3 -3
  575. package/list/list.property.d.ts +8 -8
  576. package/list/ng-nest-ui-list.metadata.json +1 -1
  577. package/loading/loading.property.d.ts +6 -6
  578. package/menu/menu-node.component.d.ts +2 -3
  579. package/menu/menu.property.d.ts +6 -6
  580. package/menu/ng-nest-ui-menu.metadata.json +1 -1
  581. package/message-box/message-box.component.d.ts +3 -0
  582. package/message-box/message-box.property.d.ts +4 -3
  583. package/message-box/ng-nest-ui-message-box.metadata.json +1 -1
  584. package/outlet/outlet.directive.d.ts +1 -1
  585. package/package.json +1 -1
  586. package/page-header/page-header.property.d.ts +4 -4
  587. package/pagination/pagination.property.d.ts +2 -2
  588. package/popconfirm/ng-nest-ui-popconfirm.metadata.json +1 -1
  589. package/popconfirm/popconfirm.component.d.ts +2 -2
  590. package/popconfirm/popconfirm.property.d.ts +7 -7
  591. package/popover/popover.property.d.ts +4 -4
  592. package/progress/progress.property.d.ts +2 -2
  593. package/radio/ng-nest-ui-radio.metadata.json +1 -1
  594. package/radio/radio.property.d.ts +3 -3
  595. package/rate/rate.property.d.ts +3 -2
  596. package/result/ng-nest-ui-result.metadata.json +1 -1
  597. package/result/result.component.d.ts +1 -0
  598. package/result/result.property.d.ts +3 -3
  599. package/ripple/ripple.property.d.ts +2 -2
  600. package/select/ng-nest-ui-select.metadata.json +1 -1
  601. package/select/select.property.d.ts +5 -5
  602. package/skeleton/ng-nest-ui-skeleton.metadata.json +1 -1
  603. package/skeleton/skeleton.property.d.ts +2 -2
  604. package/slider/slider.property.d.ts +6 -6
  605. package/slider-select/slider-select.property.d.ts +1 -1
  606. package/statistic/statistic.property.d.ts +1 -1
  607. package/steps/steps.property.d.ts +1 -1
  608. package/style/core/index.scss +1 -1
  609. package/style/directives/index.scss +2 -0
  610. package/style/directives/ripple/index.scss +6 -0
  611. package/style/directives/ripple/mixin.scss +37 -0
  612. package/style/directives/ripple/param.scss +3 -0
  613. package/table/ng-nest-ui-table.metadata.json +1 -1
  614. package/table/table-body.component.d.ts +6 -4
  615. package/table/table-foot.component.d.ts +2 -3
  616. package/table/table-head.component.d.ts +3 -3
  617. package/table/table.component.d.ts +1 -0
  618. package/table/table.property.d.ts +22 -12
  619. package/tabs/ng-nest-ui-tabs.metadata.json +1 -1
  620. package/tabs/tabs.property.d.ts +5 -5
  621. package/tag/tag.property.d.ts +3 -3
  622. package/text-retract/text-retract.property.d.ts +2 -2
  623. package/textarea/textarea.property.d.ts +2 -2
  624. package/theme/theme.property.d.ts +2 -2
  625. package/time-ago/time-ago.pipe.d.ts +1 -1
  626. package/time-picker/time-picker.property.d.ts +2 -2
  627. package/timeline/timeline.property.d.ts +5 -5
  628. package/tooltip/tooltip.property.d.ts +4 -4
  629. package/transfer/transfer.component.d.ts +1 -1
  630. package/transfer/transfer.property.d.ts +4 -4
  631. package/tree/ng-nest-ui-tree.metadata.json +1 -1
  632. package/tree/tree-node.component.d.ts +3 -3
  633. package/tree/tree.property.d.ts +12 -13
  634. package/tree-file/ng-nest-ui-tree-file.metadata.json +1 -1
  635. package/tree-file/tree-file.component.d.ts +3 -0
  636. package/tree-file/tree-file.property.d.ts +2 -2
  637. package/typography/typography.property.d.ts +1 -1
  638. package/upload/upload.property.d.ts +5 -5
  639. package/style/core/directive.scss +0 -1
@@ -122,6 +122,14 @@ class XTreeFileComponent extends XTreeFileProperty {
122
122
  get codeHeight() {
123
123
  return Number(this.maxHeight) - (Boolean(this.showCrumb) ? 1.5 : 0);
124
124
  }
125
+ get getCrumbData() {
126
+ var _a;
127
+ return (_a = this.activatedNode) === null || _a === void 0 ? void 0 : _a.crumbData;
128
+ }
129
+ get getHighlightLines() {
130
+ var _a;
131
+ return (_a = this.activatedNode) === null || _a === void 0 ? void 0 : _a.highlightLines;
132
+ }
125
133
  ngOnInit() {
126
134
  if (!this.showTree && this.activatedId) {
127
135
  this.catalogChange(this.data.find((x) => x.id == this.activatedId));
@@ -187,7 +195,7 @@ class XTreeFileComponent extends XTreeFileProperty {
187
195
  XTreeFileComponent.decorators = [
188
196
  { type: Component, args: [{
189
197
  selector: `${XTreeFilePrefix}`,
190
- template: "<div #treeFile class=\"x-tree-file\" [ngClass]=\"classMap\" [class.x-tree-file-toggle]=\"toggle\">\r\n <div class=\"x-tree-file-catalog\" [style.max-height.rem]=\"catalogHeight\" *ngIf=\"showTree\">\r\n <x-tree\r\n [data]=\"data\"\r\n (activatedChange)=\"catalogChange($event)\"\r\n nodeOpen\r\n [expandedAll]=\"expandedAll\"\r\n [expandedLevel]=\"expandedLevel\"\r\n [expanded]=\"expanded\"\r\n [spacing]=\"spacing\"\r\n [activatedId]=\"activatedId\"\r\n ></x-tree>\r\n </div>\r\n <div class=\"x-tree-file-body\" [x-loading]=\"loading\">\r\n <div class=\"x-tree-file-crumb\" *ngIf=\"showCrumb\">\r\n <x-link icon=\"fto-menu\" *ngIf=\"showToggle && showTree\" (click)=\"menuToggle()\"></x-link>\r\n <x-crumb [data]=\"activatedNode?.crumbData\" [separator]=\"separatorTpl\"></x-crumb>\r\n <ng-template #separatorTpl>\r\n <x-icon type=\"fto-chevron-right\"></x-icon>\r\n </ng-template>\r\n </div>\r\n <div class=\"x-tree-file-content\" [style.max-height.rem]=\"codeHeight\" [ngSwitch]=\"activatedNode?.fileType\">\r\n <div *ngSwitchCase=\"'img'\" class=\"x-tree-file-img\"><img [src]=\"activatedNode?.url\" (load)=\"imgOnload()\"/></div>\r\n <x-highlight\r\n *ngSwitchCase=\"'code'\"\r\n [type]=\"activatedNode?.type\"\r\n [data]=\"activatedNode?.content\"\r\n [highlightLines]=\"activatedNode?.highlightLines\"\r\n ></x-highlight>\r\n </div>\r\n </div>\r\n</div>\r\n",
198
+ template: "<div #treeFile class=\"x-tree-file\" [ngClass]=\"classMap\" [class.x-tree-file-toggle]=\"toggle\">\r\n <div class=\"x-tree-file-catalog\" [style.max-height.rem]=\"catalogHeight\" *ngIf=\"showTree\">\r\n <x-tree\r\n [data]=\"data\"\r\n (activatedChange)=\"catalogChange($event)\"\r\n nodeOpen\r\n [expandedAll]=\"expandedAll\"\r\n [expandedLevel]=\"expandedLevel\"\r\n [expanded]=\"expanded\"\r\n [spacing]=\"spacing\"\r\n [activatedId]=\"activatedId\"\r\n ></x-tree>\r\n </div>\r\n <div class=\"x-tree-file-body\" [x-loading]=\"loading\">\r\n <div class=\"x-tree-file-crumb\" *ngIf=\"showCrumb\">\r\n <x-link icon=\"fto-menu\" *ngIf=\"showToggle && showTree\" (click)=\"menuToggle()\"></x-link>\r\n <x-crumb [data]=\"getCrumbData\" [separator]=\"separatorTpl\"></x-crumb>\r\n <ng-template #separatorTpl>\r\n <x-icon type=\"fto-chevron-right\"></x-icon>\r\n </ng-template>\r\n </div>\r\n <div class=\"x-tree-file-content\" [style.max-height.rem]=\"codeHeight\" [ngSwitch]=\"activatedNode?.fileType\">\r\n <div *ngSwitchCase=\"'img'\" class=\"x-tree-file-img\"><img [src]=\"activatedNode?.url\" (load)=\"imgOnload()\"/></div>\r\n <x-highlight\r\n *ngSwitchCase=\"'code'\"\r\n [type]=\"activatedNode?.type\"\r\n [data]=\"activatedNode?.content\"\r\n [highlightLines]=\"getHighlightLines\"\r\n ></x-highlight>\r\n </div>\r\n </div>\r\n</div>\r\n",
191
199
  encapsulation: ViewEncapsulation.None,
192
200
  changeDetection: ChangeDetectionStrategy.OnPush,
193
201
  styles: [".x-tree-file{margin:0;padding:0;display:flex;background-color:var(--x-background);border-radius:var(--x-border-radius);border:var(--x-border-width) var(--x-border-style) var(--x-border);color:var(--x-text)}.x-tree-file-catalog{width:0;overflow:auto;opacity:0;font-size:.8125rem;transition:var(--x-animation-duration-slow)}.x-tree-file-catalog .x-tree{padding:.5rem}.x-tree-file-catalog .x-tree-node-content{height:1.375rem}.x-tree-file-catalog .x-tree-node-content.x-activated,.x-tree-file-catalog .x-tree-node-content:hover{background-color:var(--x-border)}.x-tree-file-body{flex:1;display:flex;flex-direction:column;overflow:hidden;position:relative}.x-tree-file-crumb{background-color:var(--x-background);display:flex}.x-tree-file-crumb>x-link{line-height:1.5rem;height:1.5rem;transition:var(--x-animation-duration-base)}.x-tree-file-crumb>x-link>a{padding:0 .5rem}.x-tree-file-crumb>x-crumb{flex:1}.x-tree-file-crumb>x-crumb>.x-crumb{padding:0 .5rem;color:var(--x-text-300)}.x-tree-file-crumb>x-crumb>.x-crumb .x-crumb-separator{margin:0 .125rem}.x-tree-file-content{flex:1;overflow:auto;transition:var(--x-animation-duration-slow);display:flex;min-height:3rem}.x-tree-file-content>x-highlight{border:none}.x-tree-file-content>x-highlight>pre{overflow:inherit}.x-tree-file-content>.x-tree-file-img{margin:auto;padding:1.5rem;display:flex;align-items:center}.x-tree-file-content>.x-tree-file-img>img{max-width:100%;height:auto;margin:auto;box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color);border-radius:var(--x-border-radius);background-color:var(--x-background-a100)}.x-tree-file-toggle>.x-tree-file-catalog{width:16rem;opacity:1;border-right:var(--x-border-width) var(--x-border-style) var(--x-border)}"]
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-tree-file.js","sources":["../../../../lib/ng-nest/ui/tree-file/tree-file.property.ts","../../../../lib/ng-nest/ui/tree-file/tree-file.component.ts","../../../../lib/ng-nest/ui/tree-file/tree-file.module.ts","../../../../lib/ng-nest/ui/tree-file/ng-nest-ui-tree-file.ts"],"sourcesContent":["import { XDataConvert, XData, XInputBoolean, XBoolean, XInputNumber, XNumber, XWithConfig } from '@ng-nest/ui/core';\r\nimport { Component, Input } from '@angular/core';\r\nimport { XTreeNode, XTreeProperty } from '@ng-nest/ui/tree';\r\nimport { XCrumbNode } from '@ng-nest/ui/crumb';\r\nimport { XHighlightLines } from '@ng-nest/ui/highlight';\r\n\r\n/**\r\n * TreeFile\r\n * @selector x-tree-file\r\n * @decorator component\r\n */\r\nexport const XTreeFilePrefix = 'x-tree-file';\r\nconst X_CONFIG_NAME = 'treeFile';\r\n\r\n/**\r\n * TreeFile Property\r\n */\r\n@Component({ template: '' })\r\nexport class XTreeFileProperty extends XTreeProperty {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n @Input() @XDataConvert() data: XData<XTreeFileNode> = [];\r\n /**\r\n * @zh_CN 文件绝对路径地址前缀,为空表示取当前运行的地址\r\n * @en_US File absolute path address prefix, empty means to take the address of the current operation\r\n */\r\n @Input() domain: string = '';\r\n /**\r\n * @zh_CN 切换状态\r\n * @en_US Switch state\r\n */\r\n @Input() @XInputBoolean() toggle: XBoolean = true;\r\n /**\r\n * @zh_CN 显示切换按钮\r\n * @en_US Show toggle button\r\n */\r\n @Input() @XInputBoolean() showToggle: XBoolean = true;\r\n /**\r\n * @zh_CN 显示树,为 true 的时候隐藏切换按钮\r\n * @en_US Show the tree, hide the toggle button when true\r\n */\r\n @Input() @XInputBoolean() showTree: XBoolean = true;\r\n /**\r\n * @zh_CN 显示面包屑\r\n * @en_US Show breadcrumbs\r\n */\r\n @Input() @XInputBoolean() showCrumb: XBoolean = true;\r\n /**\r\n * @zh_CN 最大高度,单位 rem\r\n * @en_US Maximum height, unit rem\r\n */\r\n @Input() @XWithConfig<XNumber>(X_CONFIG_NAME, 37.5) @XInputNumber() maxHeight: XNumber;\r\n /**\r\n * @zh_CN 单位间距,这个与层级的乘积算出节点的左边距,单位 rem\r\n * @en_US Unit spacing, the product of this and the level calculates the left margin of the node, the unit is rem\r\n */\r\n @Input() @XWithConfig<XNumber>(X_CONFIG_NAME, 0.5) @XInputNumber() spacing: XNumber;\r\n}\r\n\r\n/**\r\n * @zh_CN TreeFile 数据对象\r\n * @en_US TreeFile data object\r\n */\r\nexport interface XTreeFileNode extends XTreeNode {\r\n /**\r\n * @zh_CN 子节点\r\n * @en_US Child node\r\n */\r\n children?: XTreeFileNode[];\r\n /**\r\n * @zh_CN 文件内容\r\n * @en_US Document content\r\n */\r\n content?: string;\r\n /**\r\n * @zh_CN 文件类型\r\n * @en_US File type\r\n */\r\n type?: string;\r\n /**\r\n * @zh_CN 文件分类\r\n * @en_US File classification\r\n */\r\n fileType?: XTreeFileType;\r\n /**\r\n * @zh_CN 文件地址,配置了地址将从 url 中加载文件内容\r\n * @en_US File address, the configured address will load the file content from url\r\n */\r\n url?: string;\r\n /**\r\n * @zh_CN 文件的面包屑数据\r\n * @en_US Breadcrumb data\r\n */\r\n crumbData?: XCrumbNode[];\r\n /**\r\n * @zh_CN 文件内容已经加载过\r\n * @en_US File content has been loaded\r\n */\r\n contentLoaded?: boolean;\r\n /**\r\n * @zh_CN 行高亮着色\r\n * @en_US Line highlight coloring\r\n */\r\n highlightLines?: XHighlightLines;\r\n}\r\n\r\n/**\r\n * @zh_CN 文件分类\r\n * @en_US File classification\r\n */\r\nexport type XTreeFileType = 'code' | 'img';\r\n\r\n/**\r\n * @zh_CN 支持显示的图片格式\r\n * @en_US Supported picture format\r\n */\r\nexport const XTreeFileImgs = ['webp', 'png', 'jpg', 'gif', 'jpeg', 'ico'];\r\n","import { Component, ViewEncapsulation, Renderer2, ElementRef, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\r\nimport { XTreeFilePrefix, XTreeFileProperty, XTreeFileNode, XTreeFileImgs } from './tree-file.property';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { XIsEmpty, XConfigService } from '@ng-nest/ui/core';\r\nimport { XCrumbNode } from '@ng-nest/ui/crumb';\r\nimport { delay } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: `${XTreeFilePrefix}`,\r\n templateUrl: './tree-file.component.html',\r\n styleUrls: ['./tree-file.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XTreeFileComponent extends XTreeFileProperty {\r\n activatedNode: XTreeFileNode;\r\n loading: boolean = false;\r\n time: number;\r\n timeout: number = 200;\r\n\r\n get catalogHeight() {\r\n return Number(this.maxHeight);\r\n }\r\n\r\n get codeHeight() {\r\n return Number(this.maxHeight) - (Boolean(this.showCrumb) ? 1.5 : 0);\r\n }\r\n\r\n constructor(\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public cdr: ChangeDetectorRef,\r\n public http: HttpClient,\r\n public configService: XConfigService\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.showTree && this.activatedId) {\r\n this.catalogChange((this.data as XTreeFileNode[]).find((x) => x.id == this.activatedId) as XTreeFileNode);\r\n }\r\n }\r\n\r\n catalogChange(node: XTreeFileNode) {\r\n if (node?.leaf) return;\r\n if (node.url && !node.contentLoaded) {\r\n this.time = new Date().getTime();\r\n this.loading = true;\r\n this.cdr.detectChanges();\r\n this.activatedNode = node;\r\n node.fileType = XTreeFileImgs.indexOf((node.type as string).toLowerCase()) !== -1 ? 'img' : 'code';\r\n node.crumbData = this.setCurmbData(node);\r\n node.url = node.url?.indexOf(this.domain) === 0 ? node.url : `${this.domain}/${node.url}`;\r\n switch (node.fileType) {\r\n case 'code':\r\n this.http\r\n .get(node.url, { responseType: 'text' })\r\n .pipe(delay(new Date().getTime() - this.time > this.timeout ? 0 : this.timeout - new Date().getTime() + this.time))\r\n .subscribe((x) => {\r\n node.content = x;\r\n node.contentLoaded = true;\r\n this.loading = false;\r\n this.cdr.detectChanges();\r\n });\r\n break;\r\n case 'img':\r\n this.cdr.detectChanges();\r\n break;\r\n }\r\n } else {\r\n this.activatedNode = node;\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n imgOnload() {\r\n this.loading = false;\r\n this.cdr.detectChanges();\r\n }\r\n\r\n setCurmbData(node: XTreeFileNode) {\r\n let crumbData: XCrumbNode[] = [{ id: node.id, label: node.label }];\r\n const getParent = (child: XTreeFileNode) => {\r\n if (XIsEmpty(child.pid)) return;\r\n const parent = (this.data as XTreeFileNode[]).find((x) => x.id === child.pid) as XTreeFileNode;\r\n if (!XIsEmpty(parent)) {\r\n crumbData = [{ id: parent.id, label: parent.label }, ...crumbData];\r\n getParent(parent);\r\n }\r\n };\r\n getParent(node);\r\n\r\n return crumbData;\r\n }\r\n\r\n menuToggle() {\r\n this.toggle = !this.toggle;\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { XTreeFileComponent } from './tree-file.component';\r\nimport { XTreeFileProperty } from './tree-file.property';\r\nimport { XTreeModule } from '@ng-nest/ui/tree';\r\nimport { XHighlightModule } from '@ng-nest/ui/highlight';\r\nimport { XCrumbModule } from '@ng-nest/ui/crumb';\r\nimport { XIconModule } from '@ng-nest/ui/icon';\r\nimport { XLinkModule } from '@ng-nest/ui/link';\r\nimport { XLoadingModule } from '@ng-nest/ui/loading';\r\n\r\n@NgModule({\r\n declarations: [XTreeFileComponent, XTreeFileProperty],\r\n exports: [XTreeFileComponent],\r\n imports: [CommonModule, HttpClientModule, XTreeModule, XLinkModule, XCrumbModule, XIconModule, XLoadingModule, XHighlightModule]\r\n})\r\nexport class XTreeFileModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-nest-ui-tree-file.js","sources":["../../../../lib/ng-nest/ui/tree-file/tree-file.property.ts","../../../../lib/ng-nest/ui/tree-file/tree-file.component.ts","../../../../lib/ng-nest/ui/tree-file/tree-file.module.ts","../../../../lib/ng-nest/ui/tree-file/ng-nest-ui-tree-file.ts"],"sourcesContent":["import { XDataConvert, XData, XInputBoolean, XBoolean, XInputNumber, XNumber, XWithConfig } from '@ng-nest/ui/core';\r\nimport { Component, Input } from '@angular/core';\r\nimport { XTreeNode, XTreeProperty } from '@ng-nest/ui/tree';\r\nimport { XCrumbNode } from '@ng-nest/ui/crumb';\r\nimport { XHighlightLines } from '@ng-nest/ui/highlight';\r\n\r\n/**\r\n * TreeFile\r\n * @selector x-tree-file\r\n * @decorator component\r\n */\r\nexport const XTreeFilePrefix = 'x-tree-file';\r\nconst X_CONFIG_NAME = 'treeFile';\r\n\r\n/**\r\n * TreeFile Property\r\n */\r\n@Component({ template: '' })\r\nexport class XTreeFileProperty extends XTreeProperty {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n @Input() @XDataConvert() data: XData<XTreeFileNode> = [];\r\n /**\r\n * @zh_CN 文件绝对路径地址前缀,为空表示取当前运行的地址\r\n * @en_US File absolute path address prefix, empty means to take the address of the current operation\r\n */\r\n @Input() domain: string = '';\r\n /**\r\n * @zh_CN 切换状态\r\n * @en_US Switch state\r\n */\r\n @Input() @XInputBoolean() toggle: XBoolean = true;\r\n /**\r\n * @zh_CN 显示切换按钮\r\n * @en_US Show toggle button\r\n */\r\n @Input() @XInputBoolean() showToggle: XBoolean = true;\r\n /**\r\n * @zh_CN 显示树,为 true 的时候隐藏切换按钮\r\n * @en_US Show the tree, hide the toggle button when true\r\n */\r\n @Input() @XInputBoolean() showTree: XBoolean = true;\r\n /**\r\n * @zh_CN 显示面包屑\r\n * @en_US Show breadcrumbs\r\n */\r\n @Input() @XInputBoolean() showCrumb: XBoolean = true;\r\n /**\r\n * @zh_CN 最大高度,单位 rem\r\n * @en_US Maximum height, unit rem\r\n */\r\n @Input() @XWithConfig<XNumber>(X_CONFIG_NAME, 37.5) @XInputNumber() maxHeight?: XNumber;\r\n /**\r\n * @zh_CN 单位间距,这个与层级的乘积算出节点的左边距,单位 rem\r\n * @en_US Unit spacing, the product of this and the level calculates the left margin of the node, the unit is rem\r\n */\r\n @Input() @XWithConfig<XNumber>(X_CONFIG_NAME, 0.5) @XInputNumber() spacing?: XNumber;\r\n}\r\n\r\n/**\r\n * @zh_CN TreeFile 数据对象\r\n * @en_US TreeFile data object\r\n */\r\nexport interface XTreeFileNode extends XTreeNode {\r\n /**\r\n * @zh_CN 子节点\r\n * @en_US Child node\r\n */\r\n children?: XTreeFileNode[];\r\n /**\r\n * @zh_CN 文件内容\r\n * @en_US Document content\r\n */\r\n content?: string;\r\n /**\r\n * @zh_CN 文件类型\r\n * @en_US File type\r\n */\r\n type?: string;\r\n /**\r\n * @zh_CN 文件分类\r\n * @en_US File classification\r\n */\r\n fileType?: XTreeFileType;\r\n /**\r\n * @zh_CN 文件地址,配置了地址将从 url 中加载文件内容\r\n * @en_US File address, the configured address will load the file content from url\r\n */\r\n url?: string;\r\n /**\r\n * @zh_CN 文件的面包屑数据\r\n * @en_US Breadcrumb data\r\n */\r\n crumbData?: XCrumbNode[];\r\n /**\r\n * @zh_CN 文件内容已经加载过\r\n * @en_US File content has been loaded\r\n */\r\n contentLoaded?: boolean;\r\n /**\r\n * @zh_CN 行高亮着色\r\n * @en_US Line highlight coloring\r\n */\r\n highlightLines?: XHighlightLines;\r\n}\r\n\r\n/**\r\n * @zh_CN 文件分类\r\n * @en_US File classification\r\n */\r\nexport type XTreeFileType = 'code' | 'img';\r\n\r\n/**\r\n * @zh_CN 支持显示的图片格式\r\n * @en_US Supported picture format\r\n */\r\nexport const XTreeFileImgs = ['webp', 'png', 'jpg', 'gif', 'jpeg', 'ico'];\r\n","import { Component, ViewEncapsulation, Renderer2, ElementRef, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\r\nimport { XTreeFilePrefix, XTreeFileProperty, XTreeFileNode, XTreeFileImgs } from './tree-file.property';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { XIsEmpty, XConfigService } from '@ng-nest/ui/core';\r\nimport { XCrumbNode } from '@ng-nest/ui/crumb';\r\nimport { delay } from 'rxjs/operators';\r\nimport { XHighlightLines } from '@ng-nest/ui/highlight';\r\n\r\n@Component({\r\n selector: `${XTreeFilePrefix}`,\r\n templateUrl: './tree-file.component.html',\r\n styleUrls: ['./tree-file.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XTreeFileComponent extends XTreeFileProperty {\r\n activatedNode!: XTreeFileNode;\r\n loading: boolean = false;\r\n time!: number;\r\n timeout: number = 200;\r\n\r\n get catalogHeight() {\r\n return Number(this.maxHeight);\r\n }\r\n\r\n get codeHeight() {\r\n return Number(this.maxHeight) - (Boolean(this.showCrumb) ? 1.5 : 0);\r\n }\r\n\r\n get getCrumbData() {\r\n return this.activatedNode?.crumbData as XCrumbNode[];\r\n }\r\n\r\n get getHighlightLines() {\r\n return this.activatedNode?.highlightLines as XHighlightLines;\r\n }\r\n\r\n constructor(\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public cdr: ChangeDetectorRef,\r\n public http: HttpClient,\r\n public configService: XConfigService\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.showTree && this.activatedId) {\r\n this.catalogChange((this.data as XTreeFileNode[]).find((x) => x.id == this.activatedId) as XTreeFileNode);\r\n }\r\n }\r\n\r\n catalogChange(node: XTreeFileNode) {\r\n if (node?.leaf) return;\r\n if (node.url && !node.contentLoaded) {\r\n this.time = new Date().getTime();\r\n this.loading = true;\r\n this.cdr.detectChanges();\r\n this.activatedNode = node;\r\n node.fileType = XTreeFileImgs.indexOf((node.type as string).toLowerCase()) !== -1 ? 'img' : 'code';\r\n node.crumbData = this.setCurmbData(node);\r\n node.url = node.url?.indexOf(this.domain) === 0 ? node.url : `${this.domain}/${node.url}`;\r\n switch (node.fileType) {\r\n case 'code':\r\n this.http\r\n .get(node.url, { responseType: 'text' })\r\n .pipe(delay(new Date().getTime() - this.time > this.timeout ? 0 : this.timeout - new Date().getTime() + this.time))\r\n .subscribe((x) => {\r\n node.content = x;\r\n node.contentLoaded = true;\r\n this.loading = false;\r\n this.cdr.detectChanges();\r\n });\r\n break;\r\n case 'img':\r\n this.cdr.detectChanges();\r\n break;\r\n }\r\n } else {\r\n this.activatedNode = node;\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n imgOnload() {\r\n this.loading = false;\r\n this.cdr.detectChanges();\r\n }\r\n\r\n setCurmbData(node: XTreeFileNode) {\r\n let crumbData: XCrumbNode[] = [{ id: node.id, label: node.label }];\r\n const getParent = (child: XTreeFileNode) => {\r\n if (XIsEmpty(child.pid)) return;\r\n const parent = (this.data as XTreeFileNode[]).find((x) => x.id === child.pid) as XTreeFileNode;\r\n if (!XIsEmpty(parent)) {\r\n crumbData = [{ id: parent.id, label: parent.label }, ...crumbData];\r\n getParent(parent);\r\n }\r\n };\r\n getParent(node);\r\n\r\n return crumbData;\r\n }\r\n\r\n menuToggle() {\r\n this.toggle = !this.toggle;\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { XTreeFileComponent } from './tree-file.component';\r\nimport { XTreeFileProperty } from './tree-file.property';\r\nimport { XTreeModule } from '@ng-nest/ui/tree';\r\nimport { XHighlightModule } from '@ng-nest/ui/highlight';\r\nimport { XCrumbModule } from '@ng-nest/ui/crumb';\r\nimport { XIconModule } from '@ng-nest/ui/icon';\r\nimport { XLinkModule } from '@ng-nest/ui/link';\r\nimport { XLoadingModule } from '@ng-nest/ui/loading';\r\n\r\n@NgModule({\r\n declarations: [XTreeFileComponent, XTreeFileProperty],\r\n exports: [XTreeFileComponent],\r\n imports: [CommonModule, HttpClientModule, XTreeModule, XLinkModule, XCrumbModule, XIconModule, XLoadingModule, XHighlightModule]\r\n})\r\nexport class XTreeFileModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { EventEmitter, Component, Input, Output, ViewEncapsulation, ChangeDetectionStrategy, Renderer2, ElementRef, ChangeDetectorRef, ViewChild, Optional, HostBinding, NgModule } from '@angular/core';
1
+ import { EventEmitter, Component, Input, Output, ViewEncapsulation, ChangeDetectionStrategy, Renderer2, ElementRef, ChangeDetectorRef, ViewChild, HostBinding, NgModule } from '@angular/core';
2
2
  import { __decorate, __metadata } from 'tslib';
3
3
  import { XProperty, XDataConvert, XInputBoolean, XInputNumber, XWithConfig, XIsChange, XIsObservable, XSetData, XIsFunction, XIsEmpty, XIsUndefined, XConfigService } from '@ng-nest/ui/core';
4
4
  import { Subject } from 'rxjs';
@@ -169,8 +169,9 @@ const XTreeNodePrefix = 'x-tree-node';
169
169
  /**
170
170
  * TreeNode Property
171
171
  */
172
- class XTreeNodeProperty {
172
+ class XTreeNodeProperty extends XProperty {
173
173
  constructor() {
174
+ super(...arguments);
174
175
  /**
175
176
  * @zh_CN 节点数据
176
177
  * @en_US Node data
@@ -405,7 +406,7 @@ class XTreeComponent extends XTreeProperty {
405
406
  XTreeComponent.decorators = [
406
407
  { type: Component, args: [{
407
408
  selector: `${XTreePrefix}`,
408
- template: "<div #tree class=\"x-tree\">\r\n <ul>\r\n <li\r\n x-tree-node\r\n *ngFor=\"let node of nodes; trackBy: trackByItem\"\r\n [node]=\"node\"\r\n [lazy]=\"lazy\"\r\n [lazyData]=\"data\"\r\n [nodeHeight]=\"nodeHeight\"\r\n [nodeNowrap]=\"nodeNowrap\"\r\n [nodeAlignItems]=\"nodeAlignItems\"\r\n ></li>\r\n </ul>\r\n</div>\r\n\r\n<!-- \u63D0\u524D\u52A0\u8F7Dloading\u7684\u56FE\u6807-->\r\n<x-icon *ngIf=\"lazy\" [style.display]=\"'none'\" type=\"fto-loader\"></x-icon>\r\n",
409
+ template: "<div #tree class=\"x-tree\">\r\n <ul>\r\n <li\r\n x-tree-node\r\n *ngFor=\"let node of nodes; trackBy: trackByItem\"\r\n [node]=\"node\"\r\n [lazy]=\"lazy\"\r\n [lazyData]=\"data\"\r\n [nodeHeight]=\"nodeHeight\"\r\n [nodeNowrap]=\"nodeNowrap\"\r\n [nodeAlignItems]=\"nodeAlignItems\"\r\n [tree]=\"this\"\r\n ></li>\r\n </ul>\r\n</div>\r\n\r\n<!-- \u63D0\u524D\u52A0\u8F7Dloading\u7684\u56FE\u6807-->\r\n<x-icon *ngIf=\"lazy\" [style.display]=\"'none'\" type=\"fto-loader\"></x-icon>\r\n",
409
410
  encapsulation: ViewEncapsulation.None,
410
411
  changeDetection: ChangeDetectionStrategy.OnPush,
411
412
  styles: [".x-tree{margin:0;padding:0}"]
@@ -423,9 +424,10 @@ XTreeComponent.propDecorators = {
423
424
  };
424
425
 
425
426
  class XTreeNodeComponent extends XTreeNodeProperty {
426
- constructor(tree, renderer, elementRef, cdr, configService) {
427
+ constructor(
428
+ // @Optional() public tree: XTreeComponent,
429
+ renderer, elementRef, cdr, configService) {
427
430
  super();
428
- this.tree = tree;
429
431
  this.renderer = renderer;
430
432
  this.elementRef = elementRef;
431
433
  this.cdr = cdr;
@@ -551,6 +553,9 @@ class XTreeNodeComponent extends XTreeNodeProperty {
551
553
  getChildren(node.children);
552
554
  this.cdr.detectChanges();
553
555
  }
556
+ getNodeDisabled(disabled) {
557
+ return disabled;
558
+ }
554
559
  onAction(event, action, node) {
555
560
  action.handler && action.handler(node);
556
561
  event.stopPropagation();
@@ -562,7 +567,7 @@ class XTreeNodeComponent extends XTreeNodeProperty {
562
567
  XTreeNodeComponent.decorators = [
563
568
  { type: Component, args: [{
564
569
  selector: `${XTreeNodePrefix}, [${XTreeNodePrefix}]`,
565
- template: "<div\r\n class=\"x-tree-node-content\"\r\n [class.x-activated]=\"tree.activatedNode?.id === node.id\"\r\n [style.padding-left.rem]=\"paddingLeft\"\r\n [style.height.rem]=\"node.height ? node.height : nodeHeight ? nodeHeight : ''\"\r\n [style.align-items]=\"node.alignItems ? node.alignItems : nodeAlignItems\"\r\n (click)=\"onActivate($event, node)\"\r\n>\r\n <x-icon\r\n *ngIf=\"!loading\"\r\n [class.is-leaf]=\"!node.leaf\"\r\n [class.is-open]=\"node.open\"\r\n type=\"fto-chevron-right\"\r\n (click)=\"!tree.nodeOpen && onToggle($event, node) && $event.stop\"\r\n ></x-icon>\r\n <x-icon *ngIf=\"loading\" type=\"fto-loader\" [spin]=\"loading\"></x-icon>\r\n <x-checkbox\r\n *ngIf=\"tree.checkbox\"\r\n [data]=\"[{ label: '', id: node.id }]\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"onCheckboxChange()\"\r\n [indeterminate]=\"node.indeterminate\"\r\n [disabled]=\"node.disabled\"\r\n (click)=\"$event.stopPropagation()\"\r\n ></x-checkbox>\r\n <span\r\n class=\"x-tree-node-label\"\r\n [class.nowrap]=\"node.nowrap === false || node.nowrap === true ? node.nowrap : nodeNowrap\"\r\n [title]=\"node.label\"\r\n *ngIf=\"!tree.labelTpl; else labelTpl\"\r\n >{{ node.label }}</span\r\n >\r\n <ng-template #labelTpl>\r\n <ng-container *xOutlet=\"tree.labelTpl; context: { $node: node }\"></ng-container>\r\n </ng-template>\r\n <span class=\"x-tree-node-operations\">\r\n <x-link\r\n *ngFor=\"let action of tree.actions; trackBy: trackByItem\"\r\n [icon]=\"action.icon\"\r\n [title]=\"action.label\"\r\n (click)=\"onAction($event, action, node)\"\r\n ></x-link>\r\n </span>\r\n</div>\r\n<ul *ngIf=\"node.childrenLoaded || (node.leaf && node.open)\" [hidden]=\"!node.open\">\r\n <li\r\n x-tree-node\r\n *ngFor=\"let child of node.children; trackBy: trackByItem\"\r\n [node]=\"child\"\r\n [parent]=\"this\"\r\n [lazy]=\"lazy\"\r\n [lazyData]=\"lazyData\"\r\n [nodeHeight]=\"nodeHeight\"\r\n [nodeNowrap]=\"nodeNowrap\"\r\n [nodeAlignItems]=\"nodeAlignItems\"\r\n ></li>\r\n</ul>\r\n",
570
+ template: "<div\r\n class=\"x-tree-node-content\"\r\n [class.x-activated]=\"tree.activatedNode?.id === node.id\"\r\n [style.padding-left.rem]=\"paddingLeft\"\r\n [style.height.rem]=\"node.height ? node.height : nodeHeight ? nodeHeight : ''\"\r\n [style.align-items]=\"node.alignItems ? node.alignItems : nodeAlignItems\"\r\n (click)=\"onActivate($event, node)\"\r\n>\r\n <x-icon\r\n *ngIf=\"!loading\"\r\n [class.is-leaf]=\"!node.leaf\"\r\n [class.is-open]=\"node.open\"\r\n type=\"fto-chevron-right\"\r\n (click)=\"!tree.nodeOpen && onToggle($event, node)\"\r\n ></x-icon>\r\n <x-icon *ngIf=\"loading\" type=\"fto-loader\" [spin]=\"loading\"></x-icon>\r\n <x-checkbox\r\n *ngIf=\"tree.checkbox\"\r\n [data]=\"[{ label: '', id: node.id }]\"\r\n [(ngModel)]=\"node.checked\"\r\n (ngModelChange)=\"onCheckboxChange()\"\r\n [indeterminate]=\"node.indeterminate\"\r\n [disabled]=\"getNodeDisabled(node.disabled)\"\r\n (click)=\"$event.stopPropagation()\"\r\n ></x-checkbox>\r\n <span\r\n class=\"x-tree-node-label\"\r\n [class.nowrap]=\"node.nowrap === false || node.nowrap === true ? node.nowrap : nodeNowrap\"\r\n [title]=\"node.label\"\r\n *ngIf=\"!tree.labelTpl; else labelTpl\"\r\n >{{ node.label }}</span\r\n >\r\n <ng-template #labelTpl>\r\n <ng-container *xOutlet=\"tree.labelTpl; context: { $node: node }\"></ng-container>\r\n </ng-template>\r\n <span class=\"x-tree-node-operations\">\r\n <x-link\r\n *ngFor=\"let action of tree.actions; trackBy: trackByItem\"\r\n [icon]=\"action.icon\"\r\n [title]=\"action.label\"\r\n (click)=\"onAction($event, action, node)\"\r\n ></x-link>\r\n </span>\r\n</div>\r\n<ul *ngIf=\"node.childrenLoaded || (node.leaf && node.open)\" [hidden]=\"!node.open\">\r\n <li\r\n x-tree-node\r\n *ngFor=\"let child of node.children; trackBy: trackByItem\"\r\n [node]=\"child\"\r\n [parent]=\"this\"\r\n [lazy]=\"lazy\"\r\n [lazyData]=\"lazyData\"\r\n [nodeHeight]=\"nodeHeight\"\r\n [nodeNowrap]=\"nodeNowrap\"\r\n [nodeAlignItems]=\"nodeAlignItems\"\r\n [tree]=\"tree\"\r\n ></li>\r\n</ul>\r\n",
566
571
  encapsulation: ViewEncapsulation.None,
567
572
  changeDetection: ChangeDetectionStrategy.OnPush,
568
573
  styles: [".x-tree-node{margin:0;padding:0}.x-tree-node-content{display:flex;padding:.0625rem 0;cursor:pointer}.x-tree-node-content x-icon{padding:.25rem;color:var(--x-text-400);font-size:1rem;margin-right:.125rem;transition:var(--x-animation-duration-base)}.x-tree-node-content x-icon.is-leaf{visibility:hidden}.x-tree-node-content x-icon.is-open{transform:rotate(90deg)}.x-tree-node-content x-icon:hover{color:var(--x-text-300)}.x-tree-node-content x-checkbox{margin-right:.325rem;padding:.25rem 0}.x-tree-node-content.x-activated,.x-tree-node-content:hover{background-color:var(--x-background-a100)}.x-tree-node-content:hover .x-tree-node-operations{display:flex;align-items:center}.x-tree-node-operations{display:none}.x-tree-node-operations .x-link{padding:0 .125rem}.x-tree-node-label{flex:1;-webkit-user-select:none;user-select:none}.x-tree-node-label.nowrap{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}"]
@@ -570,7 +575,6 @@ XTreeNodeComponent.decorators = [
570
575
  ];
571
576
  /** @nocollapse */
572
577
  XTreeNodeComponent.ctorParameters = () => [
573
- { type: XTreeComponent, decorators: [{ type: Optional }] },
574
578
  { type: Renderer2 },
575
579
  { type: ElementRef },
576
580
  { type: ChangeDetectorRef },
@@ -578,6 +582,7 @@ XTreeNodeComponent.ctorParameters = () => [
578
582
  ];
579
583
  XTreeNodeComponent.propDecorators = {
580
584
  parent: [{ type: Input }],
585
+ tree: [{ type: Input }],
581
586
  rootClass: [{ type: HostBinding, args: ['class.x-tree-node',] }]
582
587
  };
583
588
 
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-tree.js","sources":["../../../../lib/ng-nest/ui/tree/tree.property.ts","../../../../lib/ng-nest/ui/tree/tree.component.ts","../../../../lib/ng-nest/ui/tree/tree-node.component.ts","../../../../lib/ng-nest/ui/tree/tree.module.ts","../../../../lib/ng-nest/ui/tree/ng-nest-ui-tree.ts"],"sourcesContent":["import {\r\n XDataConvert,\r\n XProperty,\r\n XData,\r\n XInputBoolean,\r\n XParentIdentityProperty,\r\n XNumber,\r\n XBoolean,\r\n XInputNumber,\r\n XIdentityProperty,\r\n XWithConfig,\r\n XAlign\r\n} from '@ng-nest/ui/core';\r\nimport { Input, TemplateRef, Output, EventEmitter, Component } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * Tree\r\n * @selector x-tree\r\n * @decorator component\r\n */\r\nexport const XTreePrefix = 'x-tree';\r\nconst X_CONFIG_NAME = 'tree';\r\n\r\n/**\r\n * Tree Property\r\n */\r\n@Component({ template: '' })\r\nexport class XTreeProperty extends XProperty {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n @Input() @XDataConvert() data: XData<XTreeNode> = [];\r\n /**\r\n * @zh_CN 显示多选框\r\n * @en_US Show checkbox\r\n */\r\n @Input() @XInputBoolean() checkbox: XBoolean;\r\n /**\r\n * @zh_CN 开启懒加载节点,data 必须设置成函数类型\r\n * @en_US Open lazy loading node, data must be set to function type\r\n */\r\n @Input() @XInputBoolean() lazy: XBoolean;\r\n /**\r\n * @zh_CN 当前激活的节点 Id\r\n * @en_US Currently active node Id\r\n */\r\n @Input() activatedId: any;\r\n /**\r\n * @zh_CN 展开的节点\r\n * @en_US Expanded node\r\n */\r\n @Input() expanded: any[] = [];\r\n /**\r\n * @zh_CN checkbox 选中的节点\r\n * @en_US Checkbox selected node\r\n */\r\n @Input() checked: any[] = [];\r\n /**\r\n * @zh_CN 展开所有节点\r\n * @en_US Expand all nodes\r\n */\r\n @Input() @XInputBoolean() expandedAll: XBoolean;\r\n /**\r\n * @zh_CN 默认展开的层级\r\n * @en_US Default expanded level\r\n */\r\n @Input() @XInputNumber() expandedLevel: XNumber = -1;\r\n /**\r\n * @zh_CN 点击节点就触发展开/收起的操作,请确保节点上没有其它操作(checkbox、自定义的操作按钮)\r\n * @en_US Click the node to trigger the expand/collapse operation, please make sure that there are no other operations on the node (checkbox, custom operation button)\r\n */\r\n @Input() @XInputBoolean() nodeOpen: XBoolean;\r\n /**\r\n * @zh_CN 单位间距,这个与层级的乘积算出节点的左边距,单位 rem\r\n * @en_US Unit spacing, the product of this and the level calculates the left margin of the node, the unit is rem\r\n */\r\n @Input() @XWithConfig<XNumber>(X_CONFIG_NAME, 0.875) @XInputNumber() spacing: XNumber;\r\n /**\r\n * @zh_CN 标签自定义模板\r\n * @en_US Label custom template\r\n */\r\n @Input() labelTpl: TemplateRef<void>;\r\n /**\r\n * @zh_CN 节点的高度,单位 rem, 默认 0 是自适应高度\r\n * @en_US The height of the node in rem\r\n */\r\n @Input() @XWithConfig<XNumber>(X_CONFIG_NAME, 0) @XInputNumber() nodeHeight: XNumber;\r\n /**\r\n * @zh_CN 是否允许多次点击一个节点触发多次事件\r\n * @en_US Whether to allow multiple clicks on a node to trigger multiple events\r\n */\r\n @Input() @XInputBoolean() allowManyActivated: XBoolean;\r\n /**\r\n * @zh_CN 当前点击选中的节点变化的事件\r\n * @en_US The event of the currently clicked node change\r\n */\r\n @Output() activatedChange = new EventEmitter<XTreeNode>();\r\n /**\r\n * @zh_CN 使用 checkedbox 选中变化的事件\r\n * @en_US Use checkedbox to select changed events\r\n */\r\n @Output() checkboxChange = new EventEmitter<XTreeNode>();\r\n /**\r\n * @zh_CN 如果 data 是函数类型,可以通过此参数控制请求,常用于弹框中的表格,弹出后再请求\r\n * @en_US If data is a function type, you can use this parameter to control the request, which is often used in the form in the pop-up box, and then request it after it pops up\r\n */\r\n @Input() @XInputBoolean() manual: boolean = true;\r\n /**\r\n * @zh_CN checkbox 状态改变触发层级检查\r\n * @en_US Checkbox status changes trigger level checks\r\n */\r\n @Input() @XInputBoolean() levelCheck: XBoolean = true;\r\n /**\r\n * @zh_CN 节点内容不换行显示省略号\r\n * @en_US Show ellipsis without wrapping\r\n */\r\n @Input() @XInputBoolean() nodeNowrap: XBoolean = true;\r\n /**\r\n * @zh_CN 节点垂直对齐方式\r\n * @en_US Show ellipsis without wrapping\r\n */\r\n @Input() @XWithConfig<XAlign>(X_CONFIG_NAME, 'center') nodeAlignItems: XAlign;\r\n /**\r\n * @zh_CN 树节点操作按钮\r\n * @en_US Tree node operation buttons\r\n */\r\n @Input() actions: XTreeAction[] = [];\r\n /**\r\n * @zh_CN 参数控制请求改变事件\r\n * @en_US Parameter control request change event\r\n */\r\n @Output() manualChange = new EventEmitter<boolean>();\r\n}\r\n\r\n/**\r\n * @zh_CN Tree 数据对象\r\n * @en_US Tree data object\r\n */\r\nexport interface XTreeNode extends XParentIdentityProperty<XTreeNode> {\r\n /**\r\n * @zh_CN 展开\r\n * @en_US Unfold\r\n */\r\n open?: boolean;\r\n /**\r\n * @zh_CN 激活的\r\n * @en_US active\r\n */\r\n activated?: boolean;\r\n /**\r\n * @zh_CN 检查更新\r\n * @en_US Check for updates\r\n */\r\n change?: Function;\r\n /**\r\n * @zh_CN 子节点已加载过\r\n * @en_US Child node has been loaded\r\n */\r\n childrenLoaded?: boolean;\r\n /**\r\n * @zh_CN checkbox 是否选中\r\n * @en_US whether checkbox is selected\r\n */\r\n checked?: boolean;\r\n /**\r\n * @zh_CN 禁用checkbox\r\n * @en_US Disable checkbox\r\n */\r\n disabled?: boolean;\r\n /**\r\n * @zh_CN checkbox 子节点是否有选中的状态\r\n * @en_US Whether the child node of checkbox is selected\r\n */\r\n indeterminate?: boolean;\r\n /**\r\n * @zh_CN 节点高度,优先级高于 tree 参数,单位 rem\r\n * @en_US Node height in rem, highest priority\r\n */\r\n height?: number;\r\n /**\r\n * @zh_CN 节点内容不换行显示省略号,优先级高于 tree 参数\r\n * @en_US Show ellipsis without wrapping, highest priority\r\n */\r\n nowrap?: boolean;\r\n /**\r\n * @zh_CN 节点垂直对齐方式,优先级高于 tree 参数\r\n * @en_US Show ellipsis without wrapping, highest priority\r\n */\r\n alignItems?: XAlign;\r\n /**\r\n * @zh_CN 自定义属性\r\n * @en_US Custom attributes\r\n */\r\n [property: string]: any;\r\n}\r\n\r\n/**\r\n * @zh_CN Tree 节点操作\r\n * @en_US Tree node operation\r\n */\r\nexport interface XTreeAction extends XIdentityProperty {\r\n /**\r\n * @zh_CN 操作\r\n * @en_US Operating\r\n */\r\n handler?: Function;\r\n /**\r\n * @zh_CN 图标\r\n * @en_US Icon\r\n */\r\n icon?: string;\r\n}\r\n\r\n/**\r\n * TreeNode\r\n * @selector x-tree-node\r\n * @decorator directive\r\n */\r\nexport const XTreeNodePrefix = 'x-tree-node';\r\n\r\n/**\r\n * TreeNode Property\r\n */\r\n@Component({ template: '' })\r\nexport class XTreeNodeProperty {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n @Input() node: XTreeNode = {};\r\n /**\r\n * @zh_CN 层级\r\n * @en_US Level\r\n */\r\n @Input() level: XNumber;\r\n /**\r\n * @zh_CN 懒加载子节点\r\n * @en_US Lazy loading of child nodes\r\n */\r\n @Input() @XInputBoolean() lazy: XBoolean;\r\n /**\r\n * @zh_CN 节点的高度,单位 rem\r\n * @en_US The height of the node in rem\r\n */\r\n @Input() @XInputNumber() nodeHeight: XNumber = 0;\r\n /**\r\n * @zh_CN 节点内容不换行显示省略号\r\n * @en_US Show ellipsis without wrapping\r\n */\r\n @Input() @XInputBoolean() nodeNowrap: XBoolean;\r\n /**\r\n * @zh_CN 节点垂直对齐方式\r\n * @en_US Show ellipsis without wrapping\r\n */\r\n @Input() nodeAlignItems: XAlign = 'center';\r\n /**\r\n * @zh_CN 懒加载函数\r\n * @en_US Lazy loading function\r\n */\r\n @Input() lazyData: (pid?: any) => Observable<XTreeNode[]>;\r\n}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n Renderer2,\r\n ElementRef,\r\n ChangeDetectorRef,\r\n ChangeDetectionStrategy,\r\n ViewChild,\r\n SimpleChanges,\r\n OnChanges\r\n} from '@angular/core';\r\nimport { XTreePrefix, XTreeNode, XTreeProperty } from './tree.property';\r\nimport { XIsObservable, XIsEmpty, XIsFunction, XIsUndefined, XIsChange, XSetData, XConfigService } from '@ng-nest/ui/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Component({\r\n selector: `${XTreePrefix}`,\r\n templateUrl: './tree.component.html',\r\n styleUrls: ['./tree.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XTreeComponent extends XTreeProperty implements OnChanges {\r\n @ViewChild('tree', { static: true }) tree: ElementRef;\r\n nodes: XTreeNode[] = [];\r\n activatedNode: XTreeNode;\r\n dataIsFunc = false;\r\n getting = false;\r\n treeData: XTreeNode[] = [];\r\n private _unSubject = new Subject<void>();\r\n constructor(\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public cdr: ChangeDetectorRef,\r\n public configService: XConfigService\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n XIsChange(changes.expandedAll) && this.setExpandedAll();\r\n XIsChange(changes.data) && this.setData();\r\n XIsChange(changes.activatedId) && this.setActivatedNode(this.treeData);\r\n XIsChange(changes.checked) && this.setCheckedKeys(this.checked);\r\n XIsChange(changes.manual) && this.setManual();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n setData() {\r\n if (typeof this.data === 'undefined') return;\r\n this.dataIsFunc = false;\r\n if (XIsObservable(this.data)) {\r\n XSetData<XTreeNode>(this.data, this._unSubject).subscribe((x) => {\r\n this.setDataChange(x);\r\n });\r\n } else if (XIsFunction(this.data)) {\r\n this.dataIsFunc = true;\r\n this.getDataByFunc();\r\n } else {\r\n this.setDataChange(this.data as XTreeNode[]);\r\n }\r\n }\r\n\r\n private setManual() {\r\n if (this.dataIsFunc) this.getDataByFunc();\r\n }\r\n\r\n private getDataByFunc() {\r\n if (!this.manual) return;\r\n XSetData<XTreeNode>((this.data as Function)(), this._unSubject).subscribe((x) => {\r\n this.setDataChange(x);\r\n });\r\n }\r\n\r\n private setDataChange(value: XTreeNode[]) {\r\n !XIsEmpty(this.activatedId) && this.setActivatedNode(value);\r\n const getChildren = (node: XTreeNode, level: number) => {\r\n node.level = level;\r\n node.open = Boolean(this.expandedAll) || level <= this.expandedLevel || this.expanded.indexOf(node.id) >= 0;\r\n node.checked = this.checked.indexOf(node.id) >= 0;\r\n node.childrenLoaded = node.open;\r\n if (XIsUndefined(node.children)) node.children = value.filter((y) => y.pid === node.id);\r\n if (XIsUndefined(node.leaf)) node.leaf = (node.children?.length as number) > 0;\r\n if (node.leaf) node.children?.map((y) => getChildren(y, level + 1));\r\n return node;\r\n };\r\n this.treeData = value;\r\n this.nodes = value.filter((x) => XIsEmpty(x.pid)).map((x) => getChildren(x, 0));\r\n this.cdr.detectChanges();\r\n }\r\n\r\n getCheckedNodes(): XTreeNode[] {\r\n let result: XTreeNode[] = [];\r\n const getChildren = (nodes: XTreeNode[]) => {\r\n if (XIsEmpty(nodes)) return;\r\n nodes.forEach((x) => {\r\n if (x.checked) result = [...result, x];\r\n getChildren(x.children as XTreeNode[]);\r\n });\r\n };\r\n getChildren(this.nodes);\r\n return result;\r\n }\r\n\r\n getCheckedKeys() {\r\n return this.getCheckedNodes().map((x) => x.id);\r\n }\r\n\r\n setCheckedKeys(keys: any[] = []) {\r\n const setChildren = (nodes: XTreeNode[], clear = false) => {\r\n if (XIsEmpty(nodes)) return;\r\n nodes.forEach((x) => {\r\n x.checked = !clear && keys.indexOf(x.id) >= 0;\r\n x.change && x.change(true);\r\n setChildren(x.children as XTreeNode[], clear);\r\n });\r\n };\r\n setChildren(this.nodes, keys.length === 0);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n setExpandedAll() {\r\n const setChildren = (nodes: XTreeNode[]) => {\r\n if (XIsEmpty(nodes)) return;\r\n nodes.forEach((x) => {\r\n x.open = Boolean(this.expandedAll);\r\n x.change && x.change();\r\n setChildren(x.children as XTreeNode[]);\r\n });\r\n };\r\n setChildren(this.nodes);\r\n }\r\n\r\n setActivatedNode(nodes: XTreeNode[]) {\r\n let before = this.activatedNode;\r\n this.activatedNode = nodes.find((x) => x.id == this.activatedId) as XTreeNode;\r\n if (this.activatedNode) {\r\n this.setParentOpen(nodes, this.activatedNode);\r\n this.activatedChange.emit(this.activatedNode);\r\n }\r\n if (before) {\r\n before.change && before.change();\r\n }\r\n }\r\n\r\n setParentOpen(nodes: XTreeNode[], node: XTreeNode) {\r\n const getParent = (child: XTreeNode) => {\r\n if (XIsEmpty(child.pid)) return;\r\n const parent = nodes.find((x) => x.id === child.pid) as XTreeNode;\r\n if (!XIsEmpty(parent)) {\r\n this.expanded = [...this.expanded, parent.id];\r\n parent.open = true;\r\n parent.change && parent.change();\r\n getParent(parent);\r\n }\r\n };\r\n getParent(node);\r\n }\r\n\r\n addNode(node: XTreeNode) {\r\n let parent = this.treeData.find((x) => x.id === node.pid);\r\n if (parent) {\r\n if (!parent.children) parent.children = [];\r\n this.expanded = [...this.expanded, parent.id];\r\n this.activatedId = node.id;\r\n node.level = Number(parent.level) + 1;\r\n node.pid = parent.id;\r\n this.treeData.push(node);\r\n this.setActivatedNode(this.treeData);\r\n parent.open = true;\r\n parent.leaf = true;\r\n parent.children = [...parent.children, node];\r\n parent.change && parent.change();\r\n } else if (node.pid == null) {\r\n this.activatedId = node.id;\r\n node.level = 0;\r\n this.treeData = [...this.treeData, node];\r\n this.nodes = [...this.nodes, node];\r\n this.setActivatedNode(this.treeData);\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n removeNode(node: XTreeNode) {\r\n let parent = this.treeData.find((x) => x.id === node.pid);\r\n if (parent) {\r\n if (!parent.children) parent.children = [];\r\n parent.children.splice(parent.children.indexOf(node), 1);\r\n parent.leaf = parent.children.length > 0;\r\n if (!parent.leaf) this.activatedId = parent.id;\r\n parent.change && parent.change();\r\n } else if (node.pid == null) {\r\n this.treeData.splice(this.treeData.indexOf(node), 1);\r\n this.nodes.splice(this.nodes.indexOf(node), 1);\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n updateNode(node: XTreeNode, nowNode: XTreeNode) {\r\n Object.assign(node, nowNode);\r\n node.change && node.change();\r\n }\r\n\r\n trackByItem(index: number, item: XTreeNode) {\r\n return item.id;\r\n }\r\n}\r\n","import {\r\n Component,\r\n OnInit,\r\n ViewEncapsulation,\r\n Renderer2,\r\n ElementRef,\r\n ChangeDetectorRef,\r\n ChangeDetectionStrategy,\r\n HostBinding,\r\n Optional,\r\n Input\r\n} from '@angular/core';\r\nimport { XTreeNodePrefix, XTreeNode, XTreeNodeProperty, XTreeAction } from './tree.property';\r\nimport { XTreeComponent } from './tree.component';\r\nimport { XIsEmpty, XConfigService } from '@ng-nest/ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: `${XTreeNodePrefix}, [${XTreeNodePrefix}]`,\r\n templateUrl: './tree-node.component.html',\r\n styleUrls: ['./tree-node.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XTreeNodeComponent extends XTreeNodeProperty implements OnInit {\r\n @Input() parent: XTreeNodeComponent;\r\n @HostBinding('class.x-tree-node') rootClass = true;\r\n private _loading = false;\r\n public get loading() {\r\n return this._loading;\r\n }\r\n public set loading(value) {\r\n this._loading = value;\r\n this.cdr.detectChanges();\r\n }\r\n\r\n get paddingLeft() {\r\n return Number(this.level) * Number(this.tree.spacing);\r\n }\r\n\r\n constructor(\r\n @Optional() public tree: XTreeComponent,\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public cdr: ChangeDetectorRef,\r\n public configService: XConfigService\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.node.change = (check: boolean) => {\r\n if (check) this.setCheckbox();\r\n this.cdr.detectChanges();\r\n };\r\n this.level = this.node?.level ? this.node.level : 0;\r\n if (!this.tree.levelCheck) return;\r\n if (this.node.checked) this.setCheckbox();\r\n this.setIndeterminate(this.node);\r\n }\r\n\r\n onToggle(event: Event, node: XTreeNode) {\r\n node.open = !node.open;\r\n if (node.open && !node.childrenLoaded) {\r\n if (this.lazy) {\r\n this.loading = true;\r\n this.lazyData(node.id)\r\n .pipe(\r\n map((x) =>\r\n x.map((y) => {\r\n y.level = (node.level as number) + 1;\r\n y.checked = node.checked;\r\n return y;\r\n })\r\n )\r\n )\r\n .subscribe((x) => {\r\n node.children = x;\r\n node.childrenLoaded = true;\r\n this.loading = false;\r\n this.cdr.detectChanges();\r\n });\r\n } else {\r\n node.childrenLoaded = true;\r\n }\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n onActivate(event: Event, node: XTreeNode) {\r\n const change: Function = this.tree.activatedNode?.change as Function;\r\n this.tree.nodeOpen && node.leaf && this.onToggle(event, node);\r\n if (this.tree.activatedNode) {\r\n if (this.tree.activatedNode.id === node.id && !this.tree.allowManyActivated) return;\r\n }\r\n this.tree.activatedNode = node;\r\n this.tree.activatedChange.emit(node);\r\n change && change();\r\n event.stopPropagation();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n onCheckboxChange() {\r\n this.setCheckbox();\r\n this.tree.checkboxChange.emit(this.node);\r\n }\r\n\r\n setCheckbox() {\r\n if (!this.tree.levelCheck) return;\r\n this.node.indeterminate = this.node.checked;\r\n this.node.children && this.setChildrenCheckbox(this.node.checked as boolean);\r\n this.parent?.setParentCheckbox();\r\n }\r\n\r\n setChildrenCheckbox(checked: boolean) {\r\n const setChildren = (children: XTreeNode[], isChecked: boolean) => {\r\n if (XIsEmpty(children)) return;\r\n for (let x of children) {\r\n if (x.disabled) continue;\r\n x.checked = isChecked;\r\n x.indeterminate = isChecked;\r\n x.change && x.change();\r\n setChildren(x.children as XTreeNode[], isChecked);\r\n }\r\n };\r\n setChildren(this.node.children as XTreeNode[], checked);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n setParentCheckbox() {\r\n if (XIsEmpty(this.node.children)) return;\r\n let checkedList = this.node.children?.filter((x) => x.checked);\r\n let indeterminateList = this.node.children?.filter((x) => x.indeterminate);\r\n this.node.checked = checkedList?.length === this.node.children?.length;\r\n this.node.indeterminate = (checkedList as XTreeNode[]).length > 0 || (indeterminateList as XTreeNode[]).length > 0;\r\n this.parent?.setParentCheckbox();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n setIndeterminate(node: XTreeNode) {\r\n const getChildren = (children: XTreeNode[]) => {\r\n if (XIsEmpty(children)) return;\r\n children.forEach((x) => {\r\n if (x.indeterminate || x.checked) {\r\n node.indeterminate = true;\r\n return;\r\n }\r\n getChildren(x.children as XTreeNode[]);\r\n });\r\n };\r\n getChildren(node.children as XTreeNode[]);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n onAction(event: Event, action: XTreeAction, node: XTreeNode) {\r\n action.handler && action.handler(node);\r\n event.stopPropagation();\r\n }\r\n\r\n trackByItem(index: number, item: XTreeAction | XTreeNode) {\r\n return item.id;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { XTreeComponent } from './tree.component';\r\nimport { XTreeNodeComponent } from './tree-node.component';\r\nimport { XIconModule } from '@ng-nest/ui/icon';\r\nimport { XCheckboxModule } from '@ng-nest/ui/checkbox';\r\nimport { XOutletModule } from '@ng-nest/ui/outlet';\r\nimport { XLinkModule } from '@ng-nest/ui/link';\r\nimport { XTreeProperty, XTreeNodeProperty } from './tree.property';\r\n\r\n@NgModule({\r\n declarations: [XTreeComponent, XTreeNodeComponent, XTreeProperty, XTreeNodeProperty],\r\n exports: [XTreeComponent, XTreeNodeComponent],\r\n imports: [CommonModule, FormsModule, XIconModule, XCheckboxModule, XOutletModule, XLinkModule]\r\n})\r\nexport class XTreeModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-nest-ui-tree.js","sources":["../../../../lib/ng-nest/ui/tree/tree.property.ts","../../../../lib/ng-nest/ui/tree/tree.component.ts","../../../../lib/ng-nest/ui/tree/tree-node.component.ts","../../../../lib/ng-nest/ui/tree/tree.module.ts","../../../../lib/ng-nest/ui/tree/ng-nest-ui-tree.ts"],"sourcesContent":["import {\r\n XDataConvert,\r\n XProperty,\r\n XData,\r\n XInputBoolean,\r\n XParentIdentityProperty,\r\n XNumber,\r\n XBoolean,\r\n XInputNumber,\r\n XIdentityProperty,\r\n XWithConfig,\r\n XAlign\r\n} from '@ng-nest/ui/core';\r\nimport { Input, TemplateRef, Output, EventEmitter, Component } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * Tree\r\n * @selector x-tree\r\n * @decorator component\r\n */\r\nexport const XTreePrefix = 'x-tree';\r\nconst X_CONFIG_NAME = 'tree';\r\n\r\n/**\r\n * Tree Property\r\n */\r\n@Component({ template: '' })\r\nexport class XTreeProperty extends XProperty {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n @Input() @XDataConvert() data: XData<XTreeNode> = [];\r\n /**\r\n * @zh_CN 显示多选框\r\n * @en_US Show checkbox\r\n */\r\n @Input() @XInputBoolean() checkbox?: XBoolean;\r\n /**\r\n * @zh_CN 开启懒加载节点,data 必须设置成函数类型\r\n * @en_US Open lazy loading node, data must be set to function type\r\n */\r\n @Input() @XInputBoolean() lazy?: XBoolean;\r\n /**\r\n * @zh_CN 当前激活的节点 Id\r\n * @en_US Currently active node Id\r\n */\r\n @Input() activatedId: any;\r\n /**\r\n * @zh_CN 展开的节点\r\n * @en_US Expanded node\r\n */\r\n @Input() expanded: any[] = [];\r\n /**\r\n * @zh_CN checkbox 选中的节点\r\n * @en_US Checkbox selected node\r\n */\r\n @Input() checked: any[] = [];\r\n /**\r\n * @zh_CN 展开所有节点\r\n * @en_US Expand all nodes\r\n */\r\n @Input() @XInputBoolean() expandedAll?: XBoolean;\r\n /**\r\n * @zh_CN 默认展开的层级\r\n * @en_US Default expanded level\r\n */\r\n @Input() @XInputNumber() expandedLevel: XNumber = -1;\r\n /**\r\n * @zh_CN 点击节点就触发展开/收起的操作,请确保节点上没有其它操作(checkbox、自定义的操作按钮)\r\n * @en_US Click the node to trigger the expand/collapse operation, please make sure that there are no other operations on the node (checkbox, custom operation button)\r\n */\r\n @Input() @XInputBoolean() nodeOpen?: XBoolean;\r\n /**\r\n * @zh_CN 单位间距,这个与层级的乘积算出节点的左边距,单位 rem\r\n * @en_US Unit spacing, the product of this and the level calculates the left margin of the node, the unit is rem\r\n */\r\n @Input() @XWithConfig<XNumber>(X_CONFIG_NAME, 0.875) @XInputNumber() spacing?: XNumber;\r\n /**\r\n * @zh_CN 标签自定义模板\r\n * @en_US Label custom template\r\n */\r\n @Input() labelTpl?: TemplateRef<void>;\r\n /**\r\n * @zh_CN 节点的高度,单位 rem, 默认 0 是自适应高度\r\n * @en_US The height of the node in rem\r\n */\r\n @Input() @XWithConfig<XNumber>(X_CONFIG_NAME, 0) @XInputNumber() nodeHeight!: XNumber;\r\n /**\r\n * @zh_CN 是否允许多次点击一个节点触发多次事件\r\n * @en_US Whether to allow multiple clicks on a node to trigger multiple events\r\n */\r\n @Input() @XInputBoolean() allowManyActivated?: XBoolean;\r\n /**\r\n * @zh_CN 当前点击选中的节点变化的事件\r\n * @en_US The event of the currently clicked node change\r\n */\r\n @Output() activatedChange = new EventEmitter<XTreeNode>();\r\n /**\r\n * @zh_CN 使用 checkedbox 选中变化的事件\r\n * @en_US Use checkedbox to select changed events\r\n */\r\n @Output() checkboxChange = new EventEmitter<XTreeNode>();\r\n /**\r\n * @zh_CN 如果 data 是函数类型,可以通过此参数控制请求,常用于弹框中的表格,弹出后再请求\r\n * @en_US If data is a function type, you can use this parameter to control the request, which is often used in the form in the pop-up box, and then request it after it pops up\r\n */\r\n @Input() @XInputBoolean() manual: boolean = true;\r\n /**\r\n * @zh_CN checkbox 状态改变触发层级检查\r\n * @en_US Checkbox status changes trigger level checks\r\n */\r\n @Input() @XInputBoolean() levelCheck: XBoolean = true;\r\n /**\r\n * @zh_CN 节点内容不换行显示省略号\r\n * @en_US Show ellipsis without wrapping\r\n */\r\n @Input() @XInputBoolean() nodeNowrap: XBoolean = true;\r\n /**\r\n * @zh_CN 节点垂直对齐方式\r\n * @en_US Show ellipsis without wrapping\r\n */\r\n @Input() @XWithConfig<XAlign>(X_CONFIG_NAME, 'center') nodeAlignItems!: XAlign;\r\n /**\r\n * @zh_CN 树节点操作按钮\r\n * @en_US Tree node operation buttons\r\n */\r\n @Input() actions: XTreeAction[] = [];\r\n /**\r\n * @zh_CN 参数控制请求改变事件\r\n * @en_US Parameter control request change event\r\n */\r\n @Output() manualChange = new EventEmitter<boolean>();\r\n}\r\n\r\n/**\r\n * @zh_CN Tree 数据对象\r\n * @en_US Tree data object\r\n */\r\nexport interface XTreeNode extends XParentIdentityProperty<XTreeNode> {\r\n /**\r\n * @zh_CN 展开\r\n * @en_US Unfold\r\n */\r\n open?: boolean;\r\n /**\r\n * @zh_CN 激活的\r\n * @en_US active\r\n */\r\n activated?: boolean;\r\n /**\r\n * @zh_CN 检查更新\r\n * @en_US Check for updates\r\n */\r\n change?: Function;\r\n /**\r\n * @zh_CN 子节点已加载过\r\n * @en_US Child node has been loaded\r\n */\r\n childrenLoaded?: boolean;\r\n /**\r\n * @zh_CN checkbox 是否选中\r\n * @en_US whether checkbox is selected\r\n */\r\n checked?: boolean;\r\n /**\r\n * @zh_CN 禁用checkbox\r\n * @en_US Disable checkbox\r\n */\r\n disabled?: boolean;\r\n /**\r\n * @zh_CN checkbox 子节点是否有选中的状态\r\n * @en_US Whether the child node of checkbox is selected\r\n */\r\n indeterminate?: boolean;\r\n /**\r\n * @zh_CN 节点高度,优先级高于 tree 参数,单位 rem\r\n * @en_US Node height in rem, highest priority\r\n */\r\n height?: number;\r\n /**\r\n * @zh_CN 节点内容不换行显示省略号,优先级高于 tree 参数\r\n * @en_US Show ellipsis without wrapping, highest priority\r\n */\r\n nowrap?: boolean;\r\n /**\r\n * @zh_CN 节点垂直对齐方式,优先级高于 tree 参数\r\n * @en_US Show ellipsis without wrapping, highest priority\r\n */\r\n alignItems?: XAlign;\r\n /**\r\n * @zh_CN 自定义属性\r\n * @en_US Custom attributes\r\n */\r\n [property: string]: any;\r\n}\r\n\r\n/**\r\n * @zh_CN Tree 节点操作\r\n * @en_US Tree node operation\r\n */\r\nexport interface XTreeAction extends XIdentityProperty {\r\n /**\r\n * @zh_CN 操作\r\n * @en_US Operating\r\n */\r\n handler?: Function;\r\n /**\r\n * @zh_CN 图标\r\n * @en_US Icon\r\n */\r\n icon?: string;\r\n}\r\n\r\n/**\r\n * TreeNode\r\n * @selector x-tree-node\r\n * @decorator directive\r\n */\r\nexport const XTreeNodePrefix = 'x-tree-node';\r\n\r\n/**\r\n * TreeNode Property\r\n */\r\n@Component({ template: '' })\r\nexport class XTreeNodeProperty extends XProperty {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n @Input() node: XTreeNode = {};\r\n /**\r\n * @zh_CN 层级\r\n * @en_US Level\r\n */\r\n @Input() level?: XNumber;\r\n /**\r\n * @zh_CN 懒加载子节点\r\n * @en_US Lazy loading of child nodes\r\n */\r\n @Input() @XInputBoolean() lazy?: XBoolean;\r\n /**\r\n * @zh_CN 节点的高度,单位 rem\r\n * @en_US The height of the node in rem\r\n */\r\n @Input() @XInputNumber() nodeHeight: XNumber = 0;\r\n /**\r\n * @zh_CN 节点内容不换行显示省略号\r\n * @en_US Show ellipsis without wrapping\r\n */\r\n @Input() @XInputBoolean() nodeNowrap?: XBoolean;\r\n /**\r\n * @zh_CN 节点垂直对齐方式\r\n * @en_US Show ellipsis without wrapping\r\n */\r\n @Input() nodeAlignItems: XAlign = 'center';\r\n /**\r\n * @zh_CN 懒加载函数\r\n * @en_US Lazy loading function\r\n */\r\n @Input() lazyData!: XData<XTreeNode[]>;\r\n}\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n Renderer2,\r\n ElementRef,\r\n ChangeDetectorRef,\r\n ChangeDetectionStrategy,\r\n ViewChild,\r\n SimpleChanges,\r\n OnChanges\r\n} from '@angular/core';\r\nimport { XTreePrefix, XTreeNode, XTreeProperty } from './tree.property';\r\nimport { XIsObservable, XIsEmpty, XIsFunction, XIsUndefined, XIsChange, XSetData, XConfigService } from '@ng-nest/ui/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Component({\r\n selector: `${XTreePrefix}`,\r\n templateUrl: './tree.component.html',\r\n styleUrls: ['./tree.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XTreeComponent extends XTreeProperty implements OnChanges {\r\n @ViewChild('tree', { static: true }) tree!: ElementRef;\r\n nodes: XTreeNode[] = [];\r\n activatedNode!: XTreeNode;\r\n dataIsFunc = false;\r\n getting = false;\r\n treeData: XTreeNode[] = [];\r\n private _unSubject = new Subject<void>();\r\n constructor(\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public cdr: ChangeDetectorRef,\r\n public configService: XConfigService\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n XIsChange(changes.expandedAll) && this.setExpandedAll();\r\n XIsChange(changes.data) && this.setData();\r\n XIsChange(changes.activatedId) && this.setActivatedNode(this.treeData);\r\n XIsChange(changes.checked) && this.setCheckedKeys(this.checked);\r\n XIsChange(changes.manual) && this.setManual();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n setData() {\r\n if (typeof this.data === 'undefined') return;\r\n this.dataIsFunc = false;\r\n if (XIsObservable(this.data)) {\r\n XSetData<XTreeNode>(this.data, this._unSubject).subscribe((x) => {\r\n this.setDataChange(x);\r\n });\r\n } else if (XIsFunction(this.data)) {\r\n this.dataIsFunc = true;\r\n this.getDataByFunc();\r\n } else {\r\n this.setDataChange(this.data as XTreeNode[]);\r\n }\r\n }\r\n\r\n private setManual() {\r\n if (this.dataIsFunc) this.getDataByFunc();\r\n }\r\n\r\n private getDataByFunc() {\r\n if (!this.manual) return;\r\n XSetData<XTreeNode>((this.data as Function)(), this._unSubject).subscribe((x) => {\r\n this.setDataChange(x);\r\n });\r\n }\r\n\r\n private setDataChange(value: XTreeNode[]) {\r\n !XIsEmpty(this.activatedId) && this.setActivatedNode(value);\r\n const getChildren = (node: XTreeNode, level: number) => {\r\n node.level = level;\r\n node.open = Boolean(this.expandedAll) || level <= this.expandedLevel || this.expanded.indexOf(node.id) >= 0;\r\n node.checked = this.checked.indexOf(node.id) >= 0;\r\n node.childrenLoaded = node.open;\r\n if (XIsUndefined(node.children)) node.children = value.filter((y) => y.pid === node.id);\r\n if (XIsUndefined(node.leaf)) node.leaf = (node.children?.length as number) > 0;\r\n if (node.leaf) node.children?.map((y) => getChildren(y, level + 1));\r\n return node;\r\n };\r\n this.treeData = value;\r\n this.nodes = value.filter((x) => XIsEmpty(x.pid)).map((x) => getChildren(x, 0));\r\n this.cdr.detectChanges();\r\n }\r\n\r\n getCheckedNodes(): XTreeNode[] {\r\n let result: XTreeNode[] = [];\r\n const getChildren = (nodes: XTreeNode[]) => {\r\n if (XIsEmpty(nodes)) return;\r\n nodes.forEach((x) => {\r\n if (x.checked) result = [...result, x];\r\n getChildren(x.children as XTreeNode[]);\r\n });\r\n };\r\n getChildren(this.nodes);\r\n return result;\r\n }\r\n\r\n getCheckedKeys() {\r\n return this.getCheckedNodes().map((x) => x.id);\r\n }\r\n\r\n setCheckedKeys(keys: any[] = []) {\r\n const setChildren = (nodes: XTreeNode[], clear = false) => {\r\n if (XIsEmpty(nodes)) return;\r\n nodes.forEach((x) => {\r\n x.checked = !clear && keys.indexOf(x.id) >= 0;\r\n x.change && x.change(true);\r\n setChildren(x.children as XTreeNode[], clear);\r\n });\r\n };\r\n setChildren(this.nodes, keys.length === 0);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n setExpandedAll() {\r\n const setChildren = (nodes: XTreeNode[]) => {\r\n if (XIsEmpty(nodes)) return;\r\n nodes.forEach((x) => {\r\n x.open = Boolean(this.expandedAll);\r\n x.change && x.change();\r\n setChildren(x.children as XTreeNode[]);\r\n });\r\n };\r\n setChildren(this.nodes);\r\n }\r\n\r\n setActivatedNode(nodes: XTreeNode[]) {\r\n let before = this.activatedNode;\r\n this.activatedNode = nodes.find((x) => x.id == this.activatedId) as XTreeNode;\r\n if (this.activatedNode) {\r\n this.setParentOpen(nodes, this.activatedNode);\r\n this.activatedChange.emit(this.activatedNode);\r\n }\r\n if (before) {\r\n before.change && before.change();\r\n }\r\n }\r\n\r\n setParentOpen(nodes: XTreeNode[], node: XTreeNode) {\r\n const getParent = (child: XTreeNode) => {\r\n if (XIsEmpty(child.pid)) return;\r\n const parent = nodes.find((x) => x.id === child.pid) as XTreeNode;\r\n if (!XIsEmpty(parent)) {\r\n this.expanded = [...this.expanded, parent.id];\r\n parent.open = true;\r\n parent.change && parent.change();\r\n getParent(parent);\r\n }\r\n };\r\n getParent(node);\r\n }\r\n\r\n addNode(node: XTreeNode) {\r\n let parent = this.treeData.find((x) => x.id === node.pid);\r\n if (parent) {\r\n if (!parent.children) parent.children = [];\r\n this.expanded = [...this.expanded, parent.id];\r\n this.activatedId = node.id;\r\n node.level = Number(parent.level) + 1;\r\n node.pid = parent.id;\r\n this.treeData.push(node);\r\n this.setActivatedNode(this.treeData);\r\n parent.open = true;\r\n parent.leaf = true;\r\n parent.children = [...parent.children, node];\r\n parent.change && parent.change();\r\n } else if (node.pid == null) {\r\n this.activatedId = node.id;\r\n node.level = 0;\r\n this.treeData = [...this.treeData, node];\r\n this.nodes = [...this.nodes, node];\r\n this.setActivatedNode(this.treeData);\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n removeNode(node: XTreeNode) {\r\n let parent = this.treeData.find((x) => x.id === node.pid);\r\n if (parent) {\r\n if (!parent.children) parent.children = [];\r\n parent.children.splice(parent.children.indexOf(node), 1);\r\n parent.leaf = parent.children.length > 0;\r\n if (!parent.leaf) this.activatedId = parent.id;\r\n parent.change && parent.change();\r\n } else if (node.pid == null) {\r\n this.treeData.splice(this.treeData.indexOf(node), 1);\r\n this.nodes.splice(this.nodes.indexOf(node), 1);\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n updateNode(node: XTreeNode, nowNode: XTreeNode) {\r\n Object.assign(node, nowNode);\r\n node.change && node.change();\r\n }\r\n\r\n trackByItem(index: number, item: XTreeNode) {\r\n return item.id;\r\n }\r\n}\r\n","import {\r\n Component,\r\n OnInit,\r\n ViewEncapsulation,\r\n Renderer2,\r\n ElementRef,\r\n ChangeDetectorRef,\r\n ChangeDetectionStrategy,\r\n HostBinding,\r\n Optional,\r\n Input\r\n} from '@angular/core';\r\nimport { XTreeNodePrefix, XTreeNode, XTreeNodeProperty, XTreeAction } from './tree.property';\r\nimport { XIsEmpty, XConfigService, XBoolean } from '@ng-nest/ui/core';\r\nimport { map } from 'rxjs/operators';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: `${XTreeNodePrefix}, [${XTreeNodePrefix}]`,\r\n templateUrl: './tree-node.component.html',\r\n styleUrls: ['./tree-node.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XTreeNodeComponent extends XTreeNodeProperty implements OnInit {\r\n @Input() parent!: XTreeNodeComponent;\r\n @Input() tree: any;\r\n @HostBinding('class.x-tree-node') rootClass = true;\r\n private _loading = false;\r\n public get loading() {\r\n return this._loading;\r\n }\r\n public set loading(value) {\r\n this._loading = value;\r\n this.cdr.detectChanges();\r\n }\r\n\r\n get paddingLeft() {\r\n return Number(this.level) * Number(this.tree.spacing);\r\n }\r\n\r\n constructor(\r\n // @Optional() public tree: XTreeComponent,\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public cdr: ChangeDetectorRef,\r\n public configService: XConfigService\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.node.change = (check: boolean) => {\r\n if (check) this.setCheckbox();\r\n this.cdr.detectChanges();\r\n };\r\n this.level = this.node?.level ? this.node.level : 0;\r\n if (!this.tree.levelCheck) return;\r\n if (this.node.checked) this.setCheckbox();\r\n this.setIndeterminate(this.node);\r\n }\r\n\r\n onToggle(event: Event, node: XTreeNode) {\r\n node.open = !node.open;\r\n if (node.open && !node.childrenLoaded) {\r\n if (this.lazy) {\r\n this.loading = true;\r\n\r\n (this.lazyData as (pid?: any) => Observable<XTreeNode[]>)(node.id)\r\n .pipe(\r\n map((x) =>\r\n x.map((y) => {\r\n y.level = (node.level as number) + 1;\r\n y.checked = node.checked;\r\n return y;\r\n })\r\n )\r\n )\r\n .subscribe((x) => {\r\n node.children = x;\r\n node.childrenLoaded = true;\r\n this.loading = false;\r\n this.cdr.detectChanges();\r\n });\r\n } else {\r\n node.childrenLoaded = true;\r\n }\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n onActivate(event: Event, node: XTreeNode) {\r\n const change: Function = this.tree.activatedNode?.change as Function;\r\n this.tree.nodeOpen && node.leaf && this.onToggle(event, node);\r\n if (this.tree.activatedNode) {\r\n if (this.tree.activatedNode.id === node.id && !this.tree.allowManyActivated) return;\r\n }\r\n this.tree.activatedNode = node;\r\n this.tree.activatedChange.emit(node);\r\n change && change();\r\n event.stopPropagation();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n onCheckboxChange() {\r\n this.setCheckbox();\r\n this.tree.checkboxChange.emit(this.node);\r\n }\r\n\r\n setCheckbox() {\r\n if (!this.tree.levelCheck) return;\r\n this.node.indeterminate = this.node.checked;\r\n this.node.children && this.setChildrenCheckbox(this.node.checked as boolean);\r\n this.parent?.setParentCheckbox();\r\n }\r\n\r\n setChildrenCheckbox(checked: boolean) {\r\n const setChildren = (children: XTreeNode[], isChecked: boolean) => {\r\n if (XIsEmpty(children)) return;\r\n for (let x of children) {\r\n if (x.disabled) continue;\r\n x.checked = isChecked;\r\n x.indeterminate = isChecked;\r\n x.change && x.change();\r\n setChildren(x.children as XTreeNode[], isChecked);\r\n }\r\n };\r\n setChildren(this.node.children as XTreeNode[], checked);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n setParentCheckbox() {\r\n if (XIsEmpty(this.node.children)) return;\r\n let checkedList = this.node.children?.filter((x) => x.checked);\r\n let indeterminateList = this.node.children?.filter((x) => x.indeterminate);\r\n this.node.checked = checkedList?.length === this.node.children?.length;\r\n this.node.indeterminate = (checkedList as XTreeNode[]).length > 0 || (indeterminateList as XTreeNode[]).length > 0;\r\n this.parent?.setParentCheckbox();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n setIndeterminate(node: XTreeNode) {\r\n const getChildren = (children: XTreeNode[]) => {\r\n if (XIsEmpty(children)) return;\r\n children.forEach((x) => {\r\n if (x.indeterminate || x.checked) {\r\n node.indeterminate = true;\r\n return;\r\n }\r\n getChildren(x.children as XTreeNode[]);\r\n });\r\n };\r\n getChildren(node.children as XTreeNode[]);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n getNodeDisabled(disabled?: boolean) {\r\n return disabled as XBoolean;\r\n }\r\n\r\n onAction(event: Event, action: XTreeAction, node: XTreeNode) {\r\n action.handler && action.handler(node);\r\n event.stopPropagation();\r\n }\r\n\r\n trackByItem(index: number, item: XTreeAction | XTreeNode) {\r\n return item.id;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { XTreeComponent } from './tree.component';\r\nimport { XTreeNodeComponent } from './tree-node.component';\r\nimport { XIconModule } from '@ng-nest/ui/icon';\r\nimport { XCheckboxModule } from '@ng-nest/ui/checkbox';\r\nimport { XOutletModule } from '@ng-nest/ui/outlet';\r\nimport { XLinkModule } from '@ng-nest/ui/link';\r\nimport { XTreeProperty, XTreeNodeProperty } from './tree.property';\r\n\r\n@NgModule({\r\n declarations: [XTreeComponent, XTreeNodeComponent, XTreeProperty, XTreeNodeProperty],\r\n exports: [XTreeComponent, XTreeNodeComponent],\r\n imports: [CommonModule, FormsModule, XIconModule, XCheckboxModule, XOutletModule, XLinkModule]\r\n})\r\nexport class XTreeModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -37,10 +37,9 @@ class XTypographyComponent extends XTypographyProperty {
37
37
  this.renderer.addClass(this.elementRef.nativeElement, XTypographyPrefix);
38
38
  }
39
39
  ngOnInit() {
40
- var _a;
41
40
  if (this.font)
42
41
  this.renderer.setStyle(this.elementRef.nativeElement, 'font-family', this.font);
43
- if (((_a = this.text) === null || _a === void 0 ? void 0 : _a.length) > 0)
42
+ if (this.text && this.text.length > 0)
44
43
  this.firstText = this.text.slice(0, 1);
45
44
  }
46
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-typography.js","sources":["../../../../lib/ng-nest/ui/typography/typography.property.ts","../../../../lib/ng-nest/ui/typography/typography.component.ts","../../../../lib/ng-nest/ui/typography/typography.module.ts","../../../../lib/ng-nest/ui/typography/ng-nest-ui-typography.ts"],"sourcesContent":["import { XProperty } from '@ng-nest/ui/core';\r\nimport { Input, Component } from '@angular/core';\r\n\r\n/**\r\n * Typography\r\n * @selector x-typography\r\n * @decorator component\r\n */\r\nexport const XTypographyPrefix = 'x-typography';\r\n\r\n/**\r\n * Typography Property\r\n */\r\n@Component({ template: '' })\r\nexport class XTypographyProperty extends XProperty {\r\n /**\r\n * @zh_CN 字体\r\n * @en_US Font\r\n */\r\n @Input() font: string = 'Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,SimSun,sans-serif';\r\n /**\r\n * @zh_CN 显示文字\r\n * @en_US Display text\r\n */\r\n @Input() text: string;\r\n}\r\n","import { Component, OnInit, ViewEncapsulation, ChangeDetectionStrategy, Renderer2, ElementRef } from '@angular/core';\r\nimport { XTypographyPrefix, XTypographyProperty } from './typography.property';\r\n\r\n@Component({\r\n selector: 'x-typography',\r\n templateUrl: './typography.component.html',\r\n styleUrls: ['./style/index.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XTypographyComponent extends XTypographyProperty implements OnInit {\r\n firstText: string;\r\n\r\n constructor(private renderer: Renderer2, private elementRef: ElementRef) {\r\n super();\r\n this.renderer.addClass(this.elementRef.nativeElement, XTypographyPrefix);\r\n }\r\n\r\n ngOnInit() {\r\n if (this.font) this.renderer.setStyle(this.elementRef.nativeElement, 'font-family', this.font);\r\n if (this.text?.length > 0) this.firstText = this.text.slice(0, 1);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { XTypographyComponent } from './typography.component';\r\nimport { XTypographyProperty } from './typography.property';\r\n\r\n@NgModule({\r\n declarations: [XTypographyComponent, XTypographyProperty],\r\n exports: [XTypographyComponent],\r\n imports: [CommonModule]\r\n})\r\nexport class XTypographyModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAGA;;;;;MAKa,iBAAiB,GAAG,eAAe;AAEhD;;;MAIa,mBAAoB,SAAQ,SAAS;IADlD;;;;;;QAMW,SAAI,GAAW,yFAAyF,CAAC;KAMnH;;;YAZA,SAAS,SAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;;;mBAMxB,KAAK;mBAKL,KAAK;;;MCdK,oBAAqB,SAAQ,mBAAmB;IAG3D,YAAoB,QAAmB,EAAU,UAAsB;QACrE,KAAK,EAAE,CAAC;QADU,aAAQ,GAAR,QAAQ,CAAW;QAAU,eAAU,GAAV,UAAU,CAAY;QAErE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;KAC1E;IAED,QAAQ;;QACN,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/F,IAAI,OAAA,IAAI,CAAC,IAAI,0CAAE,MAAM,IAAG,CAAC;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACnE;;;YAlBF,SAAS,SAAC;gBACT,QAAQ,EAAE,cAAc;gBACxB,olBAA0C;gBAE1C,aAAa,EAAE,iBAAiB,CAAC,IAAI;gBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;;YATuE,SAAS;YAAE,UAAU;;;MCUhF,iBAAiB;;;YAL7B,QAAQ,SAAC;gBACR,YAAY,EAAE,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;gBACzD,OAAO,EAAE,CAAC,oBAAoB,CAAC;gBAC/B,OAAO,EAAE,CAAC,YAAY,CAAC;aACxB;;;ACTD;;;;;;"}
1
+ {"version":3,"file":"ng-nest-ui-typography.js","sources":["../../../../lib/ng-nest/ui/typography/typography.property.ts","../../../../lib/ng-nest/ui/typography/typography.component.ts","../../../../lib/ng-nest/ui/typography/typography.module.ts","../../../../lib/ng-nest/ui/typography/ng-nest-ui-typography.ts"],"sourcesContent":["import { XProperty } from '@ng-nest/ui/core';\r\nimport { Input, Component } from '@angular/core';\r\n\r\n/**\r\n * Typography\r\n * @selector x-typography\r\n * @decorator component\r\n */\r\nexport const XTypographyPrefix = 'x-typography';\r\n\r\n/**\r\n * Typography Property\r\n */\r\n@Component({ template: '' })\r\nexport class XTypographyProperty extends XProperty {\r\n /**\r\n * @zh_CN 字体\r\n * @en_US Font\r\n */\r\n @Input() font: string = 'Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,SimSun,sans-serif';\r\n /**\r\n * @zh_CN 显示文字\r\n * @en_US Display text\r\n */\r\n @Input() text?: string;\r\n}\r\n","import { Component, OnInit, ViewEncapsulation, ChangeDetectionStrategy, Renderer2, ElementRef } from '@angular/core';\r\nimport { XTypographyPrefix, XTypographyProperty } from './typography.property';\r\n\r\n@Component({\r\n selector: 'x-typography',\r\n templateUrl: './typography.component.html',\r\n styleUrls: ['./style/index.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XTypographyComponent extends XTypographyProperty implements OnInit {\r\n firstText!: string;\r\n\r\n constructor(private renderer: Renderer2, private elementRef: ElementRef) {\r\n super();\r\n this.renderer.addClass(this.elementRef.nativeElement, XTypographyPrefix);\r\n }\r\n\r\n ngOnInit() {\r\n if (this.font) this.renderer.setStyle(this.elementRef.nativeElement, 'font-family', this.font);\r\n if (this.text && this.text.length > 0) this.firstText = this.text.slice(0, 1);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { XTypographyComponent } from './typography.component';\r\nimport { XTypographyProperty } from './typography.property';\r\n\r\n@NgModule({\r\n declarations: [XTypographyComponent, XTypographyProperty],\r\n exports: [XTypographyComponent],\r\n imports: [CommonModule]\r\n})\r\nexport class XTypographyModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAGA;;;;;MAKa,iBAAiB,GAAG,eAAe;AAEhD;;;MAIa,mBAAoB,SAAQ,SAAS;IADlD;;;;;;QAMW,SAAI,GAAW,yFAAyF,CAAC;KAMnH;;;YAZA,SAAS,SAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;;;mBAMxB,KAAK;mBAKL,KAAK;;;MCdK,oBAAqB,SAAQ,mBAAmB;IAG3D,YAAoB,QAAmB,EAAU,UAAsB;QACrE,KAAK,EAAE,CAAC;QADU,aAAQ,GAAR,QAAQ,CAAW;QAAU,eAAU,GAAV,UAAU,CAAY;QAErE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;KAC1E;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/F,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAC/E;;;YAlBF,SAAS,SAAC;gBACT,QAAQ,EAAE,cAAc;gBACxB,olBAA0C;gBAE1C,aAAa,EAAE,iBAAiB,CAAC,IAAI;gBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;;YATuE,SAAS;YAAE,UAAU;;;MCUhF,iBAAiB;;;YAL7B,QAAQ,SAAC;gBACR,YAAY,EAAE,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;gBACzD,OAAO,EAAE,CAAC,oBAAoB,CAAC;gBAC/B,OAAO,EAAE,CAAC,YAAY,CAAC;aACxB;;;ACTD;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-upload.js","sources":["../../../../lib/ng-nest/ui/upload/upload.property.ts","../../../../lib/ng-nest/ui/upload/upload-portal.component.ts","../../../../lib/ng-nest/ui/upload/upload.component.ts","../../../../lib/ng-nest/ui/upload/upload.module.ts","../../../../lib/ng-nest/ui/upload/ng-nest-ui-upload.ts"],"sourcesContent":["import { XInputBoolean, XBoolean, XTemplate, XPosition, XCorner } from '@ng-nest/ui/core';\r\nimport { Input, Output, EventEmitter, Component } from '@angular/core';\r\nimport { XControlValueAccessor } from '@ng-nest/ui/base-form';\r\n\r\n/**\r\n * Upload\r\n * @selector x-upload\r\n * @decorator component\r\n */\r\nexport const XUploadPrefix = 'x-upload';\r\n\r\n/**\r\n * Upload Property\r\n */\r\n@Component({ template: '' })\r\nexport class XUploadProperty extends XControlValueAccessor<XUploadNode[]> {\r\n /**\r\n * @zh_CN 显示文字\r\n * @en_US Display text\r\n */\r\n @Input() text: XTemplate;\r\n /**\r\n * @zh_CN 请求地址\r\n * @en_US Request address\r\n */\r\n @Input() action: string;\r\n /**\r\n * @zh_CN 上传文件类型,与原生的 input file 组件一致\r\n * @en_US Upload file type, consistent with native input file component\r\n */\r\n @Input() accept: string;\r\n /**\r\n * @zh_CN 文件显示类型\r\n * @en_US File display type\r\n */\r\n @Input() type: XUploadType = 'list';\r\n /**\r\n * @zh_CN 图片剪裁\r\n * @en_US Picture cropping\r\n */\r\n @Input() @XInputBoolean() imgCut: XBoolean;\r\n /**\r\n * @zh_CN 多文件上传\r\n * @en_US Multiple file upload\r\n */\r\n @Input() @XInputBoolean() multiple: XBoolean;\r\n /**\r\n * @zh_CN 删除按钮的事件\r\n * @en_US Delete button event\r\n */\r\n @Output() removeClick = new EventEmitter<{ file: XUploadNode; index: number }>();\r\n}\r\n\r\n/**\r\n * @zh_CN Upload 数据对象\r\n * @en_US Upload data object\r\n */\r\nexport interface XUploadNode extends File {\r\n /**\r\n * @zh_CN 地址\r\n * @en_US address\r\n */\r\n url?: string;\r\n /**\r\n * @zh_CN 状态\r\n * @en_US status\r\n */\r\n state?: XStateType;\r\n /**\r\n * @zh_CN 上传进度\r\n * @en_US Upload progress\r\n */\r\n percent?: number;\r\n}\r\n\r\n/**\r\n * @zh_CN 文件状态\r\n * @en_US File status\r\n */\r\nexport type XStateType = 'ready' | 'uploading' | 'success' | 'error';\r\n\r\n/**\r\n * @zh_CN 文件显示类型\r\n * @en_US File display type\r\n */\r\nexport type XUploadType = 'list' | 'img';\r\n\r\n/**\r\n * @zh_CN 剪裁的方位\r\n * @en_US Tailored orientation\r\n */\r\nexport type XUploadCutType = XPosition | XCorner | '';\r\n\r\n/**\r\n * Upload Portal\r\n * @selector x-upload-portal\r\n * @decorator component\r\n */\r\nexport const XUploadPortalPrefix = 'x-upload-portal';\r\n","import { DOCUMENT } from '@angular/common';\r\nimport {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ViewChild,\r\n ElementRef,\r\n Renderer2,\r\n ChangeDetectorRef,\r\n Inject\r\n} from '@angular/core';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { debounceTime, map, takeUntil, tap } from 'rxjs/operators';\r\nimport { XClamp } from '@ng-nest/ui/core';\r\nimport { XUploadCutType, XUploadNode, XUploadPortalPrefix } from './upload.property';\r\n\r\n@Component({\r\n selector: `${XUploadPortalPrefix}`,\r\n templateUrl: './upload-portal.component.html',\r\n styleUrls: ['./upload-portal.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XUploadPortalComponent {\r\n file!: XUploadNode;\r\n @ViewChild('imgRef') imgRef!: ElementRef;\r\n @ViewChild('imgClipRef') imgClipRef!: ElementRef;\r\n @ViewChild('boundaryRef') boundaryRef!: ElementRef;\r\n @ViewChild('cutRef') cutRef!: ElementRef;\r\n ready = false;\r\n cutType: XUploadCutType = '';\r\n proportion = 1;\r\n originalSize = {\r\n width: 0,\r\n height: 0\r\n };\r\n boundaryBox: {\r\n width: 0;\r\n height: 0;\r\n };\r\n cutBox = {\r\n width: 0,\r\n height: 0,\r\n x: 0,\r\n y: 0\r\n };\r\n clipRect: {\r\n top: number;\r\n right: number;\r\n bottom: number;\r\n left: number;\r\n };\r\n\r\n doc: Document;\r\n\r\n closePortal: () => void;\r\n destroyPortal: () => void;\r\n surePortal: (blob: Blob) => void;\r\n private _unSubject = new Subject<void>();\r\n\r\n constructor(private renderer: Renderer2, private cdr: ChangeDetectorRef, @Inject(DOCUMENT) document: any) {\r\n this.doc = document;\r\n }\r\n\r\n ngOnInit() {}\r\n\r\n ngAfterViewInit() {\r\n this.setCut();\r\n }\r\n\r\n ngOnDestroy() {\r\n this._unSubject.next();\r\n this._unSubject.complete();\r\n }\r\n\r\n setCut() {\r\n let width = this.imgRef.nativeElement.clientWidth;\r\n let height = this.imgRef.nativeElement.clientHeight;\r\n this.renderer.setStyle(this.cutRef.nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.cutRef.nativeElement, 'height', `${height}px`);\r\n this.renderer.setStyle(this.boundaryRef.nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.boundaryRef.nativeElement, 'height', `${height}px`);\r\n this.renderer.setStyle(this.imgRef.nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.imgRef.nativeElement, 'height', `${height}px`);\r\n this.renderer.setStyle(this.imgClipRef.nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.imgClipRef.nativeElement, 'height', `${height}px`);\r\n this.cutBox.width = width;\r\n this.cutBox.height = height;\r\n this.boundaryBox = { width, height };\r\n this.clipRect = {\r\n top: 0,\r\n right: width,\r\n bottom: height,\r\n left: 0\r\n };\r\n this.setOriginalSize();\r\n this.ready = true;\r\n this.cdr.detectChanges();\r\n\r\n const mouseDown = fromEvent<MouseEvent>(this.cutRef.nativeElement, 'mousedown').pipe(takeUntil(this._unSubject));\r\n\r\n mouseDown.subscribe((downMe: MouseEvent) => {\r\n let x = downMe.pageX;\r\n let y = downMe.pageY;\r\n let offsetX = 0;\r\n let offsetY = 0;\r\n const _unSub = new Subject<void>();\r\n let className = (downMe.target as HTMLDivElement).className;\r\n const spt = `${XUploadPortalPrefix}-cut-`;\r\n if (className.includes(spt)) {\r\n this.cutType = className.replace(spt, '') as XUploadCutType;\r\n this.cdr.detectChanges();\r\n }\r\n fromEvent<MouseEvent>(this.doc.documentElement, 'mousemove')\r\n .pipe(takeUntil(_unSub))\r\n .subscribe((moveMe: MouseEvent) => {\r\n offsetX = moveMe.pageX - x;\r\n offsetY = moveMe.pageY - y;\r\n x = moveMe.pageX;\r\n y = moveMe.pageY;\r\n this.setCutEle(this.cutType, offsetX, offsetY);\r\n });\r\n fromEvent<MouseEvent>(this.doc.documentElement, 'mouseup')\r\n .pipe(takeUntil(_unSub))\r\n .subscribe((x) => {\r\n this.cutType = '';\r\n this.cdr.detectChanges();\r\n _unSub.next();\r\n _unSub.complete();\r\n });\r\n });\r\n }\r\n\r\n setOriginalSize() {\r\n const img = new Image();\r\n img.src = this.file.url!;\r\n img.onload = () => {\r\n this.originalSize = { width: img.width, height: img.height };\r\n this.proportion = this.boundaryBox.width / this.originalSize.width;\r\n };\r\n }\r\n\r\n setCutEle(position: XUploadCutType, x: number, y: number) {\r\n switch (position) {\r\n case 'top-start':\r\n this.cutBox.width -= x;\r\n this.cutBox.height -= y;\r\n this.cutBox.x += x;\r\n this.cutBox.y += y;\r\n break;\r\n case 'top':\r\n this.cutBox.height -= y;\r\n this.cutBox.y += y;\r\n break;\r\n case 'top-end':\r\n this.cutBox.width += x;\r\n this.cutBox.height -= y;\r\n this.cutBox.y += y;\r\n break;\r\n case 'right':\r\n this.cutBox.width += x;\r\n break;\r\n case 'bottom-end':\r\n this.cutBox.width += x;\r\n this.cutBox.height += y;\r\n break;\r\n case 'bottom':\r\n this.cutBox.height += y;\r\n break;\r\n case 'bottom-start':\r\n this.cutBox.width -= x;\r\n this.cutBox.height += y;\r\n this.cutBox.x += x;\r\n break;\r\n case 'left':\r\n this.cutBox.width -= x;\r\n this.cutBox.x += x;\r\n break;\r\n case '':\r\n this.cutBox.x += x;\r\n this.cutBox.y += y;\r\n break;\r\n }\r\n const boundaryRect = this.boundaryRef.nativeElement.getBoundingClientRect();\r\n\r\n const maxY = boundaryRect.height - this.cutBox.height;\r\n const maxX = boundaryRect.width - this.cutBox.width;\r\n\r\n this.cutBox.x = XClamp(this.cutBox.x, 0, maxX);\r\n this.cutBox.y = XClamp(this.cutBox.y, 0, maxY);\r\n\r\n // const maxWidth = boundaryRect.height - this.cutBox.y;\r\n // const maxHeight = boundaryRect.width - this.cutBox.x;\r\n\r\n // this.cutBox.width = XClamp(this.cutBox.width, 0, maxWidth);\r\n // this.cutBox.height = XClamp(this.cutBox.width, 0, maxHeight);\r\n\r\n this.clipRect = {\r\n top: this.cutBox.y,\r\n right: this.cutBox.width + this.cutBox.x,\r\n bottom: this.cutBox.height + this.cutBox.y,\r\n left: this.cutBox.x\r\n };\r\n this.renderer.setStyle(\r\n this.imgClipRef.nativeElement,\r\n 'clip',\r\n `rect(${this.clipRect.top}px,${this.clipRect.right}px,${this.clipRect.bottom}px,${this.clipRect.left}px)`\r\n );\r\n this.renderer.setStyle(this.cutRef.nativeElement, 'width', `${this.cutBox.width}px`);\r\n this.renderer.setStyle(this.cutRef.nativeElement, 'height', `${this.cutBox.height}px`);\r\n this.renderer.setStyle(this.cutRef.nativeElement, 'transform', `translate3d(${this.cutBox.x}px, ${this.cutBox.y}px, 0)`);\r\n }\r\n\r\n sure() {\r\n const canvas = this.doc.createElement('canvas');\r\n canvas.width = this.cutBox.width / this.proportion;\r\n canvas.height = this.cutBox.height / this.proportion;\r\n const context = canvas.getContext('2d')!;\r\n const img = new Image();\r\n img.src = this.file.url!;\r\n img.crossOrigin = 'anonymous';\r\n img.onload = () => {\r\n context.drawImage(img, -this.cutBox.x / this.proportion, -this.cutBox.y / this.proportion);\r\n canvas.toBlob((blob) => {\r\n this.surePortal(blob as Blob);\r\n this.closePortal();\r\n });\r\n };\r\n }\r\n}\r\n","import { HttpClient, HttpEventType, HttpRequest, HttpEvent } from '@angular/common/http';\r\nimport {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n Renderer2,\r\n ElementRef,\r\n ChangeDetectorRef,\r\n ViewChild,\r\n ViewContainerRef\r\n} from '@angular/core';\r\nimport { XUploadPrefix, XUploadNode, XUploadProperty, XUploadPortalPrefix } from './upload.property';\r\nimport { XIsTemplateRef } from '@ng-nest/ui/core';\r\nimport { map, takeUntil } from 'rxjs/operators';\r\nimport { Subject } from 'rxjs';\r\nimport { XI18nService, XI18nUpload } from '@ng-nest/ui/i18n';\r\nimport { XPortalOverlayRef, XPortalService } from '@ng-nest/ui/portal';\r\nimport { XUploadPortalComponent } from './upload-portal.component';\r\nimport { XValueAccessor } from '@ng-nest/ui/base-form';\r\n\r\n@Component({\r\n selector: `${XUploadPrefix}`,\r\n templateUrl: './upload.component.html',\r\n styleUrls: ['./upload.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [XValueAccessor(XUploadComponent)]\r\n})\r\nexport class XUploadComponent extends XUploadProperty {\r\n @ViewChild('file', { static: true }) file: ElementRef;\r\n files: XUploadNode[] = [];\r\n showUpload = false;\r\n uploadNodes: XUploadNode[] = [];\r\n locale: XI18nUpload = {};\r\n portal: XPortalOverlayRef<XUploadPortalComponent>;\r\n\r\n get getText() {\r\n return this.text || this.locale.uploadText;\r\n }\r\n\r\n get isTemplateText() {\r\n return XIsTemplateRef(this.getText);\r\n }\r\n\r\n private _unSubject = new Subject<void>();\r\n\r\n writeValue(value: XUploadNode[]) {\r\n this.value = value;\r\n this.setFiles();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n constructor(\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public http: HttpClient,\r\n public cdr: ChangeDetectorRef,\r\n public portalService: XPortalService,\r\n public viewContainerRef: ViewContainerRef,\r\n public i18n: XI18nService\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.i18n.localeChange\r\n .pipe(\r\n map((x) => x.upload as XI18nUpload),\r\n takeUntil(this._unSubject)\r\n )\r\n .subscribe((x) => {\r\n this.locale = x;\r\n this.cdr.markForCheck();\r\n });\r\n if (this.type === 'img') this.accept = 'image/*';\r\n }\r\n\r\n ngOnDestory() {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n setFiles() {\r\n if (!Array.isArray(this.value)) return;\r\n if (this.type !== 'img') return;\r\n this.files = this.value.map((x) => {\r\n if (!x.state) x.state = 'success';\r\n return x;\r\n });\r\n }\r\n\r\n change(event: Event) {\r\n let input = event.target as HTMLInputElement;\r\n if (typeof input === 'undefined' || input.files?.length === 0) return;\r\n let files: XUploadNode[] = [];\r\n for (let i = 0; i < (input.files as FileList).length; i++) {\r\n let file: XUploadNode = (input.files as FileList).item(i) as XUploadNode;\r\n file.state = 'ready';\r\n files = [...files, file];\r\n }\r\n if (files.length > 0) this.showUpload = true;\r\n this.files = files;\r\n this.value = [];\r\n this.uploading();\r\n input.value = '';\r\n this.cdr.detectChanges();\r\n }\r\n\r\n remove(file: XUploadNode, index: number) {\r\n this.files.splice(index, 1);\r\n if (this.files.length === 0) this.file.nativeElement.value = '';\r\n this.showUpload = this.files.find((x) => x.state === 'ready') != null;\r\n this.removeClick.emit({ file: file, index: index });\r\n this.cdr.detectChanges();\r\n }\r\n\r\n uploadClick() {\r\n if (this.disabled) return;\r\n this.file.nativeElement.click();\r\n }\r\n\r\n uploading() {\r\n if (!this.action) return;\r\n let readyFiles = this.files.filter((x) => x.state === 'ready');\r\n readyFiles.forEach((x) => {\r\n this.uploadFile(x);\r\n });\r\n }\r\n\r\n uploadFile(file: XUploadNode, index = -1) {\r\n let formData = new FormData();\r\n formData.append('file', file);\r\n const req = new HttpRequest('POST', this.action, formData, {\r\n reportProgress: true,\r\n responseType: 'arraybuffer'\r\n });\r\n this.http\r\n .request(req)\r\n .pipe(\r\n map((event) =>\r\n this.getEventMessage(event, file, (body: BlobPart) => {\r\n let blob = new Blob([body]);\r\n let reader = new FileReader();\r\n reader.readAsText(blob, 'utf-8');\r\n reader.onload = () => {\r\n file.url = JSON.parse(reader.result as string)[0];\r\n if (index === -1) {\r\n this.value.push(file);\r\n } else {\r\n this.value[index] = file;\r\n this.files[index] = file;\r\n }\r\n this.cdr.detectChanges();\r\n };\r\n })\r\n )\r\n )\r\n .subscribe(\r\n () => {\r\n this.showUpload = this.files.find((y) => y.state === 'ready') != null;\r\n this.cdr.detectChanges();\r\n },\r\n () => {\r\n file.state = 'error';\r\n this.cdr.detectChanges();\r\n }\r\n );\r\n }\r\n\r\n getEventMessage(event: HttpEvent<any>, file: XUploadNode, fun: Function) {\r\n switch (event.type) {\r\n case HttpEventType.Sent:\r\n file.state = 'ready';\r\n return `开始上传文件`;\r\n case HttpEventType.UploadProgress:\r\n file.state = 'uploading';\r\n if (event.total) file.percent = Math.round((100 * event.loaded) / event.total);\r\n return `上传中`;\r\n case HttpEventType.Response:\r\n file.state = 'success';\r\n fun(event.body);\r\n return `文件上传完毕`;\r\n }\r\n return;\r\n }\r\n\r\n trackByItem(index: number, item: XUploadNode) {\r\n return `${item.name}-${item.lastModified}`;\r\n }\r\n\r\n onImgCut(file: XUploadNode, index: number) {\r\n this.portal = this.portalService.attach({\r\n content: XUploadPortalComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: {\r\n panelClass: [XUploadPortalPrefix],\r\n hasBackdrop: true,\r\n positionStrategy: this.portalService.setPlace('center')\r\n }\r\n });\r\n this.setInstance(file, index);\r\n }\r\n\r\n setInstance(file: XUploadNode, index: number) {\r\n let componentRef = this.portal?.componentRef;\r\n if (!componentRef) return;\r\n Object.assign(componentRef.instance, {\r\n file: file,\r\n closePortal: () => this.closePortal(),\r\n destroyPortal: () => this.destroyPortal(),\r\n surePortal: (blob: Blob) => {\r\n const fl = new File([blob], file.name, { type: blob.type }) as XUploadNode;\r\n fl.state = 'ready';\r\n this.uploadFile(fl, index);\r\n }\r\n });\r\n componentRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n portalAttached() {\r\n return this.portal?.overlayRef?.hasAttached();\r\n }\r\n\r\n closePortal() {\r\n if (this.portalAttached()) {\r\n this.portal?.overlayRef?.detach();\r\n this.cdr.detectChanges();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n destroyPortal() {\r\n this.portal?.overlayRef?.dispose();\r\n }\r\n\r\n imgError(event: Event, file: XUploadNode) {\r\n file.state = 'error';\r\n this.cdr.detectChanges();\r\n }\r\n\r\n imgLoad(event: Event, file: XUploadNode) {\r\n file.state = 'success';\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { XUploadComponent } from './upload.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { XButtonModule } from '@ng-nest/ui/button';\r\nimport { XIconModule } from '@ng-nest/ui/icon';\r\nimport { XUploadProperty } from './upload.property';\r\nimport { XI18nModule } from '@ng-nest/ui/i18n';\r\nimport { XOutletModule } from '@ng-nest/ui/outlet';\r\nimport { XPortalModule } from '@ng-nest/ui/portal';\r\nimport { XUploadPortalComponent } from './upload-portal.component';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { XBaseFormModule } from '@ng-nest/ui/base-form';\r\n\r\n@NgModule({\r\n declarations: [XUploadComponent, XUploadPortalComponent, XUploadProperty],\r\n exports: [XUploadComponent],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n DragDropModule,\r\n XPortalModule,\r\n XOutletModule,\r\n XButtonModule,\r\n XIconModule,\r\n XI18nModule,\r\n XBaseFormModule\r\n ]\r\n})\r\nexport class XUploadModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-nest-ui-upload.js","sources":["../../../../lib/ng-nest/ui/upload/upload.property.ts","../../../../lib/ng-nest/ui/upload/upload-portal.component.ts","../../../../lib/ng-nest/ui/upload/upload.component.ts","../../../../lib/ng-nest/ui/upload/upload.module.ts","../../../../lib/ng-nest/ui/upload/ng-nest-ui-upload.ts"],"sourcesContent":["import { XInputBoolean, XBoolean, XTemplate, XPosition, XCorner } from '@ng-nest/ui/core';\r\nimport { Input, Output, EventEmitter, Component } from '@angular/core';\r\nimport { XControlValueAccessor } from '@ng-nest/ui/base-form';\r\n\r\n/**\r\n * Upload\r\n * @selector x-upload\r\n * @decorator component\r\n */\r\nexport const XUploadPrefix = 'x-upload';\r\n\r\n/**\r\n * Upload Property\r\n */\r\n@Component({ template: '' })\r\nexport class XUploadProperty extends XControlValueAccessor<XUploadNode[]> {\r\n /**\r\n * @zh_CN 显示文字\r\n * @en_US Display text\r\n */\r\n @Input() text?: XTemplate;\r\n /**\r\n * @zh_CN 请求地址\r\n * @en_US Request address\r\n */\r\n @Input() action?: string;\r\n /**\r\n * @zh_CN 上传文件类型,与原生的 input file 组件一致\r\n * @en_US Upload file type, consistent with native input file component\r\n */\r\n @Input() accept?: string;\r\n /**\r\n * @zh_CN 文件显示类型\r\n * @en_US File display type\r\n */\r\n @Input() type: XUploadType = 'list';\r\n /**\r\n * @zh_CN 图片剪裁\r\n * @en_US Picture cropping\r\n */\r\n @Input() @XInputBoolean() imgCut?: XBoolean;\r\n /**\r\n * @zh_CN 多文件上传\r\n * @en_US Multiple file upload\r\n */\r\n @Input() @XInputBoolean() multiple?: XBoolean;\r\n /**\r\n * @zh_CN 删除按钮的事件\r\n * @en_US Delete button event\r\n */\r\n @Output() removeClick = new EventEmitter<{ file: XUploadNode; index: number }>();\r\n}\r\n\r\n/**\r\n * @zh_CN Upload 数据对象\r\n * @en_US Upload data object\r\n */\r\nexport interface XUploadNode extends File {\r\n /**\r\n * @zh_CN 地址\r\n * @en_US address\r\n */\r\n url?: string;\r\n /**\r\n * @zh_CN 状态\r\n * @en_US status\r\n */\r\n state?: XStateType;\r\n /**\r\n * @zh_CN 上传进度\r\n * @en_US Upload progress\r\n */\r\n percent?: number;\r\n}\r\n\r\n/**\r\n * @zh_CN 文件状态\r\n * @en_US File status\r\n */\r\nexport type XStateType = 'ready' | 'uploading' | 'success' | 'error';\r\n\r\n/**\r\n * @zh_CN 文件显示类型\r\n * @en_US File display type\r\n */\r\nexport type XUploadType = 'list' | 'img';\r\n\r\n/**\r\n * @zh_CN 剪裁的方位\r\n * @en_US Tailored orientation\r\n */\r\nexport type XUploadCutType = XPosition | XCorner | '';\r\n\r\n/**\r\n * Upload Portal\r\n * @selector x-upload-portal\r\n * @decorator component\r\n */\r\nexport const XUploadPortalPrefix = 'x-upload-portal';\r\n","import { DOCUMENT } from '@angular/common';\r\nimport {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ViewChild,\r\n ElementRef,\r\n Renderer2,\r\n ChangeDetectorRef,\r\n Inject\r\n} from '@angular/core';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { debounceTime, map, takeUntil, tap } from 'rxjs/operators';\r\nimport { XClamp } from '@ng-nest/ui/core';\r\nimport { XUploadCutType, XUploadNode, XUploadPortalPrefix } from './upload.property';\r\n\r\n@Component({\r\n selector: `${XUploadPortalPrefix}`,\r\n templateUrl: './upload-portal.component.html',\r\n styleUrls: ['./upload-portal.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XUploadPortalComponent {\r\n file!: XUploadNode;\r\n @ViewChild('imgRef') imgRef!: ElementRef;\r\n @ViewChild('imgClipRef') imgClipRef!: ElementRef;\r\n @ViewChild('boundaryRef') boundaryRef!: ElementRef;\r\n @ViewChild('cutRef') cutRef!: ElementRef;\r\n ready = false;\r\n cutType: XUploadCutType = '';\r\n proportion = 1;\r\n originalSize = {\r\n width: 0,\r\n height: 0\r\n };\r\n boundaryBox!: {\r\n width: 0;\r\n height: 0;\r\n };\r\n cutBox = {\r\n width: 0,\r\n height: 0,\r\n x: 0,\r\n y: 0\r\n };\r\n clipRect!: {\r\n top: number;\r\n right: number;\r\n bottom: number;\r\n left: number;\r\n };\r\n\r\n doc: Document;\r\n\r\n closePortal!: () => void;\r\n destroyPortal!: () => void;\r\n surePortal!: (blob: Blob) => void;\r\n private _unSubject = new Subject<void>();\r\n\r\n constructor(private renderer: Renderer2, private cdr: ChangeDetectorRef, @Inject(DOCUMENT) document: any) {\r\n this.doc = document;\r\n }\r\n\r\n ngOnInit() {}\r\n\r\n ngAfterViewInit() {\r\n this.setCut();\r\n }\r\n\r\n ngOnDestroy() {\r\n this._unSubject.next();\r\n this._unSubject.complete();\r\n }\r\n\r\n setCut() {\r\n let width = this.imgRef.nativeElement.clientWidth;\r\n let height = this.imgRef.nativeElement.clientHeight;\r\n this.renderer.setStyle(this.cutRef.nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.cutRef.nativeElement, 'height', `${height}px`);\r\n this.renderer.setStyle(this.boundaryRef.nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.boundaryRef.nativeElement, 'height', `${height}px`);\r\n this.renderer.setStyle(this.imgRef.nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.imgRef.nativeElement, 'height', `${height}px`);\r\n this.renderer.setStyle(this.imgClipRef.nativeElement, 'width', `${width}px`);\r\n this.renderer.setStyle(this.imgClipRef.nativeElement, 'height', `${height}px`);\r\n this.cutBox.width = width;\r\n this.cutBox.height = height;\r\n this.boundaryBox = { width, height };\r\n this.clipRect = {\r\n top: 0,\r\n right: width,\r\n bottom: height,\r\n left: 0\r\n };\r\n this.setOriginalSize();\r\n this.ready = true;\r\n this.cdr.detectChanges();\r\n\r\n const mouseDown = fromEvent<MouseEvent>(this.cutRef.nativeElement, 'mousedown').pipe(takeUntil(this._unSubject));\r\n\r\n mouseDown.subscribe((downMe: MouseEvent) => {\r\n let x = downMe.pageX;\r\n let y = downMe.pageY;\r\n let offsetX = 0;\r\n let offsetY = 0;\r\n const _unSub = new Subject<void>();\r\n let className = (downMe.target as HTMLDivElement).className;\r\n const spt = `${XUploadPortalPrefix}-cut-`;\r\n if (className.includes(spt)) {\r\n this.cutType = className.replace(spt, '') as XUploadCutType;\r\n this.cdr.detectChanges();\r\n }\r\n fromEvent<MouseEvent>(this.doc.documentElement, 'mousemove')\r\n .pipe(takeUntil(_unSub))\r\n .subscribe((moveMe: MouseEvent) => {\r\n offsetX = moveMe.pageX - x;\r\n offsetY = moveMe.pageY - y;\r\n x = moveMe.pageX;\r\n y = moveMe.pageY;\r\n this.setCutEle(this.cutType, offsetX, offsetY);\r\n });\r\n fromEvent<MouseEvent>(this.doc.documentElement, 'mouseup')\r\n .pipe(takeUntil(_unSub))\r\n .subscribe((x) => {\r\n this.cutType = '';\r\n this.cdr.detectChanges();\r\n _unSub.next();\r\n _unSub.complete();\r\n });\r\n });\r\n }\r\n\r\n setOriginalSize() {\r\n const img = new Image();\r\n img.src = this.file.url!;\r\n img.onload = () => {\r\n this.originalSize = { width: img.width, height: img.height };\r\n this.proportion = this.boundaryBox.width / this.originalSize.width;\r\n };\r\n }\r\n\r\n setCutEle(position: XUploadCutType, x: number, y: number) {\r\n switch (position) {\r\n case 'top-start':\r\n this.cutBox.width -= x;\r\n this.cutBox.height -= y;\r\n this.cutBox.x += x;\r\n this.cutBox.y += y;\r\n break;\r\n case 'top':\r\n this.cutBox.height -= y;\r\n this.cutBox.y += y;\r\n break;\r\n case 'top-end':\r\n this.cutBox.width += x;\r\n this.cutBox.height -= y;\r\n this.cutBox.y += y;\r\n break;\r\n case 'right':\r\n this.cutBox.width += x;\r\n break;\r\n case 'bottom-end':\r\n this.cutBox.width += x;\r\n this.cutBox.height += y;\r\n break;\r\n case 'bottom':\r\n this.cutBox.height += y;\r\n break;\r\n case 'bottom-start':\r\n this.cutBox.width -= x;\r\n this.cutBox.height += y;\r\n this.cutBox.x += x;\r\n break;\r\n case 'left':\r\n this.cutBox.width -= x;\r\n this.cutBox.x += x;\r\n break;\r\n case '':\r\n this.cutBox.x += x;\r\n this.cutBox.y += y;\r\n break;\r\n }\r\n const boundaryRect = this.boundaryRef.nativeElement.getBoundingClientRect();\r\n\r\n const maxY = boundaryRect.height - this.cutBox.height;\r\n const maxX = boundaryRect.width - this.cutBox.width;\r\n\r\n this.cutBox.x = XClamp(this.cutBox.x, 0, maxX);\r\n this.cutBox.y = XClamp(this.cutBox.y, 0, maxY);\r\n\r\n // const maxWidth = boundaryRect.height - this.cutBox.y;\r\n // const maxHeight = boundaryRect.width - this.cutBox.x;\r\n\r\n // this.cutBox.width = XClamp(this.cutBox.width, 0, maxWidth);\r\n // this.cutBox.height = XClamp(this.cutBox.width, 0, maxHeight);\r\n\r\n this.clipRect = {\r\n top: this.cutBox.y,\r\n right: this.cutBox.width + this.cutBox.x,\r\n bottom: this.cutBox.height + this.cutBox.y,\r\n left: this.cutBox.x\r\n };\r\n this.renderer.setStyle(\r\n this.imgClipRef.nativeElement,\r\n 'clip',\r\n `rect(${this.clipRect.top}px,${this.clipRect.right}px,${this.clipRect.bottom}px,${this.clipRect.left}px)`\r\n );\r\n this.renderer.setStyle(this.cutRef.nativeElement, 'width', `${this.cutBox.width}px`);\r\n this.renderer.setStyle(this.cutRef.nativeElement, 'height', `${this.cutBox.height}px`);\r\n this.renderer.setStyle(this.cutRef.nativeElement, 'transform', `translate3d(${this.cutBox.x}px, ${this.cutBox.y}px, 0)`);\r\n }\r\n\r\n sure() {\r\n const canvas = this.doc.createElement('canvas');\r\n canvas.width = this.cutBox.width / this.proportion;\r\n canvas.height = this.cutBox.height / this.proportion;\r\n const context = canvas.getContext('2d')!;\r\n const img = new Image();\r\n img.src = this.file.url!;\r\n img.crossOrigin = 'anonymous';\r\n img.onload = () => {\r\n context.drawImage(img, -this.cutBox.x / this.proportion, -this.cutBox.y / this.proportion);\r\n canvas.toBlob((blob) => {\r\n this.surePortal(blob as Blob);\r\n this.closePortal();\r\n });\r\n };\r\n }\r\n}\r\n","import { HttpClient, HttpEventType, HttpRequest, HttpEvent } from '@angular/common/http';\r\nimport {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n Renderer2,\r\n ElementRef,\r\n ChangeDetectorRef,\r\n ViewChild,\r\n ViewContainerRef\r\n} from '@angular/core';\r\nimport { XUploadPrefix, XUploadNode, XUploadProperty, XUploadPortalPrefix } from './upload.property';\r\nimport { XIsTemplateRef } from '@ng-nest/ui/core';\r\nimport { map, takeUntil } from 'rxjs/operators';\r\nimport { Subject } from 'rxjs';\r\nimport { XI18nService, XI18nUpload } from '@ng-nest/ui/i18n';\r\nimport { XPortalOverlayRef, XPortalService } from '@ng-nest/ui/portal';\r\nimport { XUploadPortalComponent } from './upload-portal.component';\r\nimport { XValueAccessor } from '@ng-nest/ui/base-form';\r\n\r\n@Component({\r\n selector: `${XUploadPrefix}`,\r\n templateUrl: './upload.component.html',\r\n styleUrls: ['./upload.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [XValueAccessor(XUploadComponent)]\r\n})\r\nexport class XUploadComponent extends XUploadProperty {\r\n @ViewChild('file', { static: true }) file!: ElementRef;\r\n files: XUploadNode[] = [];\r\n showUpload = false;\r\n uploadNodes: XUploadNode[] = [];\r\n locale: XI18nUpload = {};\r\n portal!: XPortalOverlayRef<XUploadPortalComponent>;\r\n\r\n get getText() {\r\n return this.text || this.locale.uploadText;\r\n }\r\n\r\n get isTemplateText() {\r\n return XIsTemplateRef(this.getText);\r\n }\r\n\r\n private _unSubject = new Subject<void>();\r\n\r\n writeValue(value: XUploadNode[]) {\r\n this.value = value;\r\n this.setFiles();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n constructor(\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public http: HttpClient,\r\n public cdr: ChangeDetectorRef,\r\n public portalService: XPortalService,\r\n public viewContainerRef: ViewContainerRef,\r\n public i18n: XI18nService\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.i18n.localeChange\r\n .pipe(\r\n map((x) => x.upload as XI18nUpload),\r\n takeUntil(this._unSubject)\r\n )\r\n .subscribe((x) => {\r\n this.locale = x;\r\n this.cdr.markForCheck();\r\n });\r\n if (this.type === 'img') this.accept = 'image/*';\r\n }\r\n\r\n ngOnDestory() {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n setFiles() {\r\n if (!Array.isArray(this.value)) return;\r\n if (this.type !== 'img') return;\r\n this.files = this.value.map((x) => {\r\n if (!x.state) x.state = 'success';\r\n return x;\r\n });\r\n }\r\n\r\n change(event: Event) {\r\n let input = event.target as HTMLInputElement;\r\n if (typeof input === 'undefined' || input.files?.length === 0) return;\r\n let files: XUploadNode[] = [];\r\n for (let i = 0; i < (input.files as FileList).length; i++) {\r\n let file: XUploadNode = (input.files as FileList).item(i) as XUploadNode;\r\n file.state = 'ready';\r\n files = [...files, file];\r\n }\r\n if (files.length > 0) this.showUpload = true;\r\n this.files = files;\r\n this.value = [];\r\n this.uploading();\r\n input.value = '';\r\n this.cdr.detectChanges();\r\n }\r\n\r\n remove(file: XUploadNode, index: number) {\r\n this.files.splice(index, 1);\r\n if (this.files.length === 0) this.file.nativeElement.value = '';\r\n this.showUpload = this.files.find((x) => x.state === 'ready') != null;\r\n this.removeClick.emit({ file: file, index: index });\r\n this.cdr.detectChanges();\r\n }\r\n\r\n uploadClick() {\r\n if (this.disabled) return;\r\n this.file.nativeElement.click();\r\n }\r\n\r\n uploading() {\r\n if (!this.action) return;\r\n let readyFiles = this.files.filter((x) => x.state === 'ready');\r\n readyFiles.forEach((x) => {\r\n this.uploadFile(x);\r\n });\r\n }\r\n\r\n uploadFile(file: XUploadNode, index = -1) {\r\n let formData = new FormData();\r\n formData.append('file', file);\r\n const req = new HttpRequest('POST', this.action as string, formData, {\r\n reportProgress: true,\r\n responseType: 'arraybuffer'\r\n });\r\n this.http\r\n .request(req)\r\n .pipe(\r\n map((event) =>\r\n this.getEventMessage(event, file, (body: BlobPart) => {\r\n let blob = new Blob([body]);\r\n let reader = new FileReader();\r\n reader.readAsText(blob, 'utf-8');\r\n reader.onload = () => {\r\n file.url = JSON.parse(reader.result as string)[0];\r\n if (index === -1) {\r\n this.value.push(file);\r\n } else {\r\n this.value[index] = file;\r\n this.files[index] = file;\r\n }\r\n this.cdr.detectChanges();\r\n };\r\n })\r\n )\r\n )\r\n .subscribe(\r\n () => {\r\n this.showUpload = this.files.find((y) => y.state === 'ready') != null;\r\n this.cdr.detectChanges();\r\n },\r\n () => {\r\n file.state = 'error';\r\n this.cdr.detectChanges();\r\n }\r\n );\r\n }\r\n\r\n getEventMessage(event: HttpEvent<any>, file: XUploadNode, fun: Function) {\r\n switch (event.type) {\r\n case HttpEventType.Sent:\r\n file.state = 'ready';\r\n return `开始上传文件`;\r\n case HttpEventType.UploadProgress:\r\n file.state = 'uploading';\r\n if (event.total) file.percent = Math.round((100 * event.loaded) / event.total);\r\n return `上传中`;\r\n case HttpEventType.Response:\r\n file.state = 'success';\r\n fun(event.body);\r\n return `文件上传完毕`;\r\n }\r\n return;\r\n }\r\n\r\n trackByItem(index: number, item: XUploadNode) {\r\n return `${item.name}-${item.lastModified}`;\r\n }\r\n\r\n onImgCut(file: XUploadNode, index: number) {\r\n this.portal = this.portalService.attach({\r\n content: XUploadPortalComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: {\r\n panelClass: [XUploadPortalPrefix],\r\n hasBackdrop: true,\r\n positionStrategy: this.portalService.setPlace('center')\r\n }\r\n });\r\n this.setInstance(file, index);\r\n }\r\n\r\n setInstance(file: XUploadNode, index: number) {\r\n let componentRef = this.portal?.componentRef;\r\n if (!componentRef) return;\r\n Object.assign(componentRef.instance, {\r\n file: file,\r\n closePortal: () => this.closePortal(),\r\n destroyPortal: () => this.destroyPortal(),\r\n surePortal: (blob: Blob) => {\r\n const fl = new File([blob], file.name, { type: blob.type }) as XUploadNode;\r\n fl.state = 'ready';\r\n this.uploadFile(fl, index);\r\n }\r\n });\r\n componentRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n portalAttached() {\r\n return this.portal?.overlayRef?.hasAttached();\r\n }\r\n\r\n closePortal() {\r\n if (this.portalAttached()) {\r\n this.portal?.overlayRef?.detach();\r\n this.cdr.detectChanges();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n destroyPortal() {\r\n this.portal?.overlayRef?.dispose();\r\n }\r\n\r\n imgError(event: Event, file: XUploadNode) {\r\n file.state = 'error';\r\n this.cdr.detectChanges();\r\n }\r\n\r\n imgLoad(event: Event, file: XUploadNode) {\r\n file.state = 'success';\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { XUploadComponent } from './upload.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { XButtonModule } from '@ng-nest/ui/button';\r\nimport { XIconModule } from '@ng-nest/ui/icon';\r\nimport { XUploadProperty } from './upload.property';\r\nimport { XI18nModule } from '@ng-nest/ui/i18n';\r\nimport { XOutletModule } from '@ng-nest/ui/outlet';\r\nimport { XPortalModule } from '@ng-nest/ui/portal';\r\nimport { XUploadPortalComponent } from './upload-portal.component';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { XBaseFormModule } from '@ng-nest/ui/base-form';\r\n\r\n@NgModule({\r\n declarations: [XUploadComponent, XUploadPortalComponent, XUploadProperty],\r\n exports: [XUploadComponent],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n DragDropModule,\r\n XPortalModule,\r\n XOutletModule,\r\n XButtonModule,\r\n XIconModule,\r\n XI18nModule,\r\n XBaseFormModule\r\n ]\r\n})\r\nexport class XUploadModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAIA;;;;;MAKa,aAAa,GAAG,WAAW;AAExC;;;MAIa,eAAgB,SAAQ,qBAAoC;IADzE;;;;;;QAqBW,SAAI,GAAgB,MAAM,CAAC;;;;;QAe1B,gBAAW,GAAG,IAAI,YAAY,EAAwC,CAAC;KAClF;;;YArCA,SAAS,SAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;;;mBAMxB,KAAK;qBAKL,KAAK;qBAKL,KAAK;mBAKL,KAAK;qBAKL,KAAK;uBAKL,KAAK;0BAKL,MAAM;;AAVmB;IAAhB,aAAa,EAAE;;+CAAmB;AAKlB;IAAhB,aAAa,EAAE;;iDAAqB;AAgDhD;;;;;MAKa,mBAAmB,GAAG;;MC3EtB,sBAAsB;IAqCjC,YAAoB,QAAmB,EAAU,GAAsB,EAAoB,QAAa;QAApF,aAAQ,GAAR,QAAQ,CAAW;QAAU,QAAG,GAAH,GAAG,CAAmB;QA/BvE,UAAK,GAAG,KAAK,CAAC;QACd,YAAO,GAAmB,EAAE,CAAC;QAC7B,eAAU,GAAG,CAAC,CAAC;QACf,iBAAY,GAAG;YACb,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;SACV,CAAC;QAKF,WAAM,GAAG;YACP,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;SACL,CAAC;QAaM,eAAU,GAAG,IAAI,OAAO,EAAQ,CAAC;QAGvC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;KACrB;IAED,QAAQ,MAAK;IAEb,eAAe;QACb,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAED,WAAW;QACT,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;KAC5B;IAED,MAAM;QACJ,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC;QAClD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;QAC9E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC;QAChF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;QAC7E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC;QAC/E,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG;YACd,GAAG,EAAE,CAAC;YACN,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,CAAC;SACR,CAAC;QACF,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAEzB,MAAM,SAAS,GAAG,SAAS,CAAa,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAEjH,SAAS,CAAC,SAAS,CAAC,CAAC,MAAkB;YACrC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YACrB,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YACrB,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,MAAM,MAAM,GAAG,IAAI,OAAO,EAAQ,CAAC;YACnC,IAAI,SAAS,GAAI,MAAM,CAAC,MAAyB,CAAC,SAAS,CAAC;YAC5D,MAAM,GAAG,GAAG,GAAG,mBAAmB,OAAO,CAAC;YAC1C,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAC3B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAmB,CAAC;gBAC5D,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;aAC1B;YACD,SAAS,CAAa,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC;iBACzD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;iBACvB,SAAS,CAAC,CAAC,MAAkB;gBAC5B,OAAO,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC3B,OAAO,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC3B,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;gBACjB,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;gBACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;aAChD,CAAC,CAAC;YACL,SAAS,CAAa,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC;iBACvD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;iBACvB,SAAS,CAAC,CAAC,CAAC;gBACX,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;gBAClB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,CAAC,QAAQ,EAAE,CAAC;aACnB,CAAC,CAAC;SACN,CAAC,CAAC;KACJ;IAED,eAAe;QACb,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAI,CAAC;QACzB,GAAG,CAAC,MAAM,GAAG;YACX,IAAI,CAAC,YAAY,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;YAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;SACpE,CAAC;KACH;IAED,SAAS,CAAC,QAAwB,EAAE,CAAS,EAAE,CAAS;QACtD,QAAQ,QAAQ;YACd,KAAK,WAAW;gBACd,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnB,MAAM;YACR,KAAK,KAAK;gBACR,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnB,MAAM;YACR,KAAK,SAAS;gBACZ,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnB,MAAM;YACR,KAAK,OAAO;gBACV,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;gBACvB,MAAM;YACR,KAAK,YAAY;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;gBACxB,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;gBACxB,MAAM;YACR,KAAK,cAAc;gBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnB,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnB,MAAM;YACR,KAAK,EAAE;gBACL,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnB,MAAM;SACT;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QAE5E,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACtD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAEpD,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;;;;;QAQ/C,IAAI,CAAC,QAAQ,GAAG;YACd,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAClB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;SACpB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,UAAU,CAAC,aAAa,EAC7B,MAAM,EACN,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAC1G,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;QACrF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QACvF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,eAAe,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;KAC1H;IAED,IAAI;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;QACnD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QACrD,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAI,CAAC;QACzB,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;QAC9B,GAAG,CAAC,MAAM,GAAG;YACX,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YAC3F,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI;gBACjB,IAAI,CAAC,UAAU,CAAC,IAAY,CAAC,CAAC;gBAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB,CAAC,CAAC;SACJ,CAAC;KACH;;;YApNF,SAAS,SAAC;gBACT,QAAQ,EAAE,GAAG,mBAAmB,EAAE;gBAClC,k4CAA6C;gBAE7C,aAAa,EAAE,iBAAiB,CAAC,IAAI;gBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;;YAfC,SAAS;YACT,iBAAiB;4CAoDyD,MAAM,SAAC,QAAQ;;;qBAnCxF,SAAS,SAAC,QAAQ;yBAClB,SAAS,SAAC,YAAY;0BACtB,SAAS,SAAC,aAAa;qBACvB,SAAS,SAAC,QAAQ;;;MCAR,gBAAiB,SAAQ,eAAe;IAwBnD,YACS,QAAmB,EACnB,UAAsB,EACtB,IAAgB,EAChB,GAAsB,EACtB,aAA6B,EAC7B,gBAAkC,EAClC,IAAkB;QAEzB,KAAK,EAAE,CAAC;QARD,aAAQ,GAAR,QAAQ,CAAW;QACnB,eAAU,GAAV,UAAU,CAAY;QACtB,SAAI,GAAJ,IAAI,CAAY;QAChB,QAAG,GAAH,GAAG,CAAmB;QACtB,kBAAa,GAAb,aAAa,CAAgB;QAC7B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,SAAI,GAAJ,IAAI,CAAc;QA7B3B,UAAK,GAAkB,EAAE,CAAC;QAC1B,eAAU,GAAG,KAAK,CAAC;QACnB,gBAAW,GAAkB,EAAE,CAAC;QAChC,WAAM,GAAgB,EAAE,CAAC;QAWjB,eAAU,GAAG,IAAI,OAAO,EAAQ,CAAC;KAkBxC;IA1BD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;KAC5C;IAED,IAAI,cAAc;QAChB,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACrC;IAID,UAAU,CAAC,KAAoB;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;IAcD,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,YAAY;aACnB,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAqB,CAAC,EACnC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC3B;aACA,SAAS,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;SACzB,CAAC,CAAC;QACL,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;KAClD;IAED,WAAW;QACT,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;KAC/B;IAED,QAAQ;QACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO;QACvC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC,CAAC,KAAK;gBAAE,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC;YAClC,OAAO,CAAC,CAAC;SACV,CAAC,CAAC;KACJ;IAED,MAAM,CAAC,KAAY;;QACjB,IAAI,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;QAC7C,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,OAAA,KAAK,CAAC,KAAK,0CAAE,MAAM,MAAK,CAAC;YAAE,OAAO;QACtE,IAAI,KAAK,GAAkB,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAI,KAAK,CAAC,KAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzD,IAAI,IAAI,GAAiB,KAAK,CAAC,KAAkB,CAAC,IAAI,CAAC,CAAC,CAAgB,CAAC;YACzE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACrB,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;SAC1B;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAC7C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;IAED,MAAM,CAAC,IAAiB,EAAE,KAAa;QACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;QAChE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC;QACtE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;IAED,WAAW;QACT,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KACjC;IAED,SAAS;QACP,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;QAC/D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SACpB,CAAC,CAAC;KACJ;IAED,UAAU,CAAC,IAAiB,EAAE,KAAK,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC9B,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAgB,EAAE,QAAQ,EAAE;YACnE,cAAc,EAAE,IAAI;YACpB,YAAY,EAAE,aAAa;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,IAAI;aACN,OAAO,CAAC,GAAG,CAAC;aACZ,IAAI,CACH,GAAG,CAAC,CAAC,KAAK,KACR,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,IAAc;YAC/C,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5B,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,GAAG;gBACd,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBAChB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACvB;qBAAM;oBACL,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;oBACzB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;iBAC1B;gBACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;aAC1B,CAAC;SACH,CAAC,CACH,CACF;aACA,SAAS,CACR;YACE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC;YACtE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B,EACD;YACE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B,CACF,CAAC;KACL;IAED,eAAe,CAAC,KAAqB,EAAE,IAAiB,EAAE,GAAa;QACrE,QAAQ,KAAK,CAAC,IAAI;YAChB,KAAK,aAAa,CAAC,IAAI;gBACrB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;gBACrB,OAAO,QAAQ,CAAC;YAClB,KAAK,aAAa,CAAC,cAAc;gBAC/B,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;gBACzB,IAAI,KAAK,CAAC,KAAK;oBAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC/E,OAAO,KAAK,CAAC;YACf,KAAK,aAAa,CAAC,QAAQ;gBACzB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;gBACvB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChB,OAAO,QAAQ,CAAC;SACnB;QACD,OAAO;KACR;IAED,WAAW,CAAC,KAAa,EAAE,IAAiB;QAC1C,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;KAC5C;IAED,QAAQ,CAAC,IAAiB,EAAE,KAAa;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YACtC,OAAO,EAAE,sBAAsB;YAC/B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,aAAa,EAAE;gBACb,UAAU,EAAE,CAAC,mBAAmB,CAAC;gBACjC,WAAW,EAAE,IAAI;gBACjB,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC;aACxD;SACF,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAC/B;IAED,WAAW,CAAC,IAAiB,EAAE,KAAa;;QAC1C,IAAI,YAAY,SAAG,IAAI,CAAC,MAAM,0CAAE,YAAY,CAAC;QAC7C,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE;YACnC,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE;YACrC,aAAa,EAAE,MAAM,IAAI,CAAC,aAAa,EAAE;YACzC,UAAU,EAAE,CAAC,IAAU;gBACrB,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAgB,CAAC;gBAC3E,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC;gBACnB,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;aAC5B;SACF,CAAC,CAAC;QACH,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;KAChD;IAED,cAAc;;QACZ,mBAAO,IAAI,CAAC,MAAM,0CAAE,UAAU,0CAAE,WAAW,GAAG;KAC/C;IAED,WAAW;;QACT,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACzB,YAAA,IAAI,CAAC,MAAM,0CAAE,UAAU,0CAAE,MAAM,GAAG;YAClC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;KACd;IAED,aAAa;;QACX,YAAA,IAAI,CAAC,MAAM,0CAAE,UAAU,0CAAE,OAAO,GAAG;KACpC;IAED,QAAQ,CAAC,KAAY,EAAE,IAAiB;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;IAED,OAAO,CAAC,KAAY,EAAE,IAAiB;QACrC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC1B;;;YAhOF,SAAS,SAAC;gBACT,QAAQ,EAAE,GAAG,aAAa,EAAE;gBAC5B,mgGAAsC;gBAEtC,aAAa,EAAE,iBAAiB,CAAC,IAAI;gBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;gBAC/C,SAAS,EAAE,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;;aAC9C;;;;YAtBC,SAAS;YACT,UAAU;YANH,UAAU;YAOjB,iBAAiB;YASS,cAAc;YAPxC,gBAAgB;YAMT,YAAY;;;mBAclB,SAAS,SAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MCAxB,aAAa;;;YAfzB,QAAQ,SAAC;gBACR,YAAY,EAAE,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,eAAe,CAAC;gBACzE,OAAO,EAAE,CAAC,gBAAgB,CAAC;gBAC3B,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,cAAc;oBACd,aAAa;oBACb,aAAa;oBACb,aAAa;oBACb,WAAW;oBACX,WAAW;oBACX,eAAe;iBAChB;aACF;;;AC5BD;;;;;;"}
@@ -25,6 +25,7 @@ export declare class XFindComponent extends XFindProperty implements OnInit {
25
25
  get hasTree(): boolean;
26
26
  get hasTreeTable(): boolean;
27
27
  get hasTreeMultiple(): string | boolean;
28
+ get hasSearch(): boolean;
28
29
  temp: any;
29
30
  height: number;
30
31
  private _unSubject;
@@ -54,4 +55,6 @@ export declare class XFindComponent extends XFindProperty implements OnInit {
54
55
  treeCheckboxChange(node: XTreeNode): void;
55
56
  trackByItem(index: number, item: any): any;
56
57
  formControlChanges(): void;
58
+ searchKeyDown(event: KeyboardEvent): void;
59
+ searchClick(): void;
57
60
  }