@ng-nest/ui 12.0.8 → 12.0.10

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 (386) hide show
  1. package/auto-complete/auto-complete-portal.component.d.ts +1 -3
  2. package/auto-complete/auto-complete.component.d.ts +1 -1
  3. package/back-top/back-top.component.d.ts +1 -2
  4. package/bundles/ng-nest-ui-alert.umd.js.map +1 -1
  5. package/bundles/ng-nest-ui-anchor.umd.js +1 -1
  6. package/bundles/ng-nest-ui-anchor.umd.js.map +1 -1
  7. package/bundles/ng-nest-ui-auto-complete.umd.js +7 -6
  8. package/bundles/ng-nest-ui-auto-complete.umd.js.map +1 -1
  9. package/bundles/ng-nest-ui-back-top.umd.js +2 -2
  10. package/bundles/ng-nest-ui-back-top.umd.js.map +1 -1
  11. package/bundles/ng-nest-ui-badge.umd.js +2 -1
  12. package/bundles/ng-nest-ui-badge.umd.js.map +1 -1
  13. package/bundles/ng-nest-ui-button.umd.js +4 -3
  14. package/bundles/ng-nest-ui-button.umd.js.map +1 -1
  15. package/bundles/ng-nest-ui-calendar.umd.js +4 -3
  16. package/bundles/ng-nest-ui-calendar.umd.js.map +1 -1
  17. package/bundles/ng-nest-ui-carousel.umd.js +3 -2
  18. package/bundles/ng-nest-ui-carousel.umd.js.map +1 -1
  19. package/bundles/ng-nest-ui-cascade.umd.js +9 -9
  20. package/bundles/ng-nest-ui-cascade.umd.js.map +1 -1
  21. package/bundles/ng-nest-ui-checkbox.umd.js +3 -2
  22. package/bundles/ng-nest-ui-checkbox.umd.js.map +1 -1
  23. package/bundles/ng-nest-ui-color-picker.umd.js +9 -10
  24. package/bundles/ng-nest-ui-color-picker.umd.js.map +1 -1
  25. package/bundles/ng-nest-ui-color.umd.js +1 -1
  26. package/bundles/ng-nest-ui-color.umd.js.map +1 -1
  27. package/bundles/ng-nest-ui-comment.umd.js +3 -2
  28. package/bundles/ng-nest-ui-comment.umd.js.map +1 -1
  29. package/bundles/ng-nest-ui-container.umd.js.map +1 -1
  30. package/bundles/ng-nest-ui-core.umd.js +3 -3
  31. package/bundles/ng-nest-ui-core.umd.js.map +1 -1
  32. package/bundles/ng-nest-ui-crumb.umd.js +3 -2
  33. package/bundles/ng-nest-ui-crumb.umd.js.map +1 -1
  34. package/bundles/ng-nest-ui-date-picker.umd.js +34 -44
  35. package/bundles/ng-nest-ui-date-picker.umd.js.map +1 -1
  36. package/bundles/ng-nest-ui-description.umd.js +5 -6
  37. package/bundles/ng-nest-ui-description.umd.js.map +1 -1
  38. package/bundles/ng-nest-ui-dialog.umd.js +2 -1
  39. package/bundles/ng-nest-ui-dialog.umd.js.map +1 -1
  40. package/bundles/ng-nest-ui-drawer.umd.js +2 -1
  41. package/bundles/ng-nest-ui-drawer.umd.js.map +1 -1
  42. package/bundles/ng-nest-ui-dropdown.umd.js +4 -3
  43. package/bundles/ng-nest-ui-dropdown.umd.js.map +1 -1
  44. package/bundles/ng-nest-ui-find.umd.js +6 -5
  45. package/bundles/ng-nest-ui-find.umd.js.map +1 -1
  46. package/bundles/ng-nest-ui-form.umd.js +6 -10
  47. package/bundles/ng-nest-ui-form.umd.js.map +1 -1
  48. package/bundles/ng-nest-ui-highlight.umd.js +2 -1
  49. package/bundles/ng-nest-ui-highlight.umd.js.map +1 -1
  50. package/bundles/ng-nest-ui-i18n.umd.js +2 -1
  51. package/bundles/ng-nest-ui-i18n.umd.js.map +1 -1
  52. package/bundles/ng-nest-ui-icon.umd.js +3 -2
  53. package/bundles/ng-nest-ui-icon.umd.js.map +1 -1
  54. package/bundles/ng-nest-ui-inner.umd.js +1 -1
  55. package/bundles/ng-nest-ui-inner.umd.js.map +1 -1
  56. package/bundles/ng-nest-ui-input.umd.js +7 -6
  57. package/bundles/ng-nest-ui-input.umd.js.map +1 -1
  58. package/bundles/ng-nest-ui-list.umd.js +4 -3
  59. package/bundles/ng-nest-ui-list.umd.js.map +1 -1
  60. package/bundles/ng-nest-ui-loading.umd.js +2 -1
  61. package/bundles/ng-nest-ui-loading.umd.js.map +1 -1
  62. package/bundles/ng-nest-ui-menu.umd.js +6 -6
  63. package/bundles/ng-nest-ui-menu.umd.js.map +1 -1
  64. package/bundles/ng-nest-ui-message-box.umd.js +28 -26
  65. package/bundles/ng-nest-ui-message-box.umd.js.map +1 -1
  66. package/bundles/ng-nest-ui-message.umd.js +1 -1
  67. package/bundles/ng-nest-ui-message.umd.js.map +1 -1
  68. package/bundles/ng-nest-ui-notification.umd.js +1 -1
  69. package/bundles/ng-nest-ui-notification.umd.js.map +1 -1
  70. package/bundles/ng-nest-ui-pagination.umd.js +3 -2
  71. package/bundles/ng-nest-ui-pagination.umd.js.map +1 -1
  72. package/bundles/ng-nest-ui-popover.umd.js +3 -2
  73. package/bundles/ng-nest-ui-popover.umd.js.map +1 -1
  74. package/bundles/ng-nest-ui-progress.umd.js +3 -2
  75. package/bundles/ng-nest-ui-progress.umd.js.map +1 -1
  76. package/bundles/ng-nest-ui-radio.umd.js +3 -2
  77. package/bundles/ng-nest-ui-radio.umd.js.map +1 -1
  78. package/bundles/ng-nest-ui-rate.umd.js +5 -5
  79. package/bundles/ng-nest-ui-rate.umd.js.map +1 -1
  80. package/bundles/ng-nest-ui-ripple.umd.js.map +1 -1
  81. package/bundles/ng-nest-ui-select.umd.js +6 -5
  82. package/bundles/ng-nest-ui-select.umd.js.map +1 -1
  83. package/bundles/ng-nest-ui-skeleton.umd.js +2 -1
  84. package/bundles/ng-nest-ui-skeleton.umd.js.map +1 -1
  85. package/bundles/ng-nest-ui-slider.umd.js +7 -8
  86. package/bundles/ng-nest-ui-slider.umd.js.map +1 -1
  87. package/bundles/ng-nest-ui-statistic.umd.js +6 -4
  88. package/bundles/ng-nest-ui-statistic.umd.js.map +1 -1
  89. package/bundles/ng-nest-ui-steps.umd.js +4 -3
  90. package/bundles/ng-nest-ui-steps.umd.js.map +1 -1
  91. package/bundles/ng-nest-ui-table.umd.js +13 -10
  92. package/bundles/ng-nest-ui-table.umd.js.map +1 -1
  93. package/bundles/ng-nest-ui-tabs.umd.js +5 -4
  94. package/bundles/ng-nest-ui-tabs.umd.js.map +1 -1
  95. package/bundles/ng-nest-ui-tag.umd.js +2 -1
  96. package/bundles/ng-nest-ui-tag.umd.js.map +1 -1
  97. package/bundles/ng-nest-ui-text-retract.umd.js +2 -1
  98. package/bundles/ng-nest-ui-text-retract.umd.js.map +1 -1
  99. package/bundles/ng-nest-ui-textarea.umd.js +3 -12
  100. package/bundles/ng-nest-ui-textarea.umd.js.map +1 -1
  101. package/bundles/ng-nest-ui-theme.umd.js +2 -2
  102. package/bundles/ng-nest-ui-theme.umd.js.map +1 -1
  103. package/bundles/ng-nest-ui-time-picker.umd.js +32 -15
  104. package/bundles/ng-nest-ui-time-picker.umd.js.map +1 -1
  105. package/bundles/ng-nest-ui-timeline.umd.js +3 -2
  106. package/bundles/ng-nest-ui-timeline.umd.js.map +1 -1
  107. package/bundles/ng-nest-ui-tooltip.umd.js +3 -2
  108. package/bundles/ng-nest-ui-tooltip.umd.js.map +1 -1
  109. package/bundles/ng-nest-ui-transfer.umd.js +3 -2
  110. package/bundles/ng-nest-ui-transfer.umd.js.map +1 -1
  111. package/bundles/ng-nest-ui-tree.umd.js +8 -7
  112. package/bundles/ng-nest-ui-tree.umd.js.map +1 -1
  113. package/bundles/ng-nest-ui-upload.umd.js +5 -4
  114. package/bundles/ng-nest-ui-upload.umd.js.map +1 -1
  115. package/button/buttons.component.d.ts +1 -1
  116. package/calendar/calendar.component.d.ts +2 -2
  117. package/carousel/carousel.component.d.ts +1 -1
  118. package/cascade/cascade-portal.component.d.ts +4 -7
  119. package/cascade/cascade.component.d.ts +1 -1
  120. package/checkbox/checkbox.component.d.ts +1 -1
  121. package/color/color.component.d.ts +2 -2
  122. package/color-picker/color-picker-portal.component.d.ts +1 -3
  123. package/color-picker/color-picker.component.d.ts +2 -3
  124. package/comment/comment.component.d.ts +1 -1
  125. package/core/services/reuse-strategy.service.d.ts +1 -1
  126. package/crumb/crumb.component.d.ts +1 -1
  127. package/date-picker/date-picker-portal.component.d.ts +1 -3
  128. package/date-picker/date-picker.component.d.ts +3 -4
  129. package/date-picker/date-picker.property.d.ts +1 -16
  130. package/date-picker/date-range-portal.component.d.ts +1 -3
  131. package/date-picker/date-range.component.d.ts +2 -3
  132. package/date-picker/picker-date.component.d.ts +1 -1
  133. package/date-picker/picker-month.component.d.ts +1 -1
  134. package/date-picker/picker-year.component.d.ts +1 -1
  135. package/description/description.component.d.ts +2 -4
  136. package/dropdown/dropdown-portal.component.d.ts +1 -3
  137. package/dropdown/dropdown.component.d.ts +2 -2
  138. package/esm2015/alert/alert.component.js +1 -1
  139. package/esm2015/anchor/anchor.component.js +2 -2
  140. package/esm2015/anchor/anchor.property.js +1 -1
  141. package/esm2015/auto-complete/auto-complete-portal.component.js +4 -4
  142. package/esm2015/auto-complete/auto-complete.component.js +5 -4
  143. package/esm2015/auto-complete/auto-complete.property.js +1 -1
  144. package/esm2015/back-top/back-top.component.js +3 -3
  145. package/esm2015/badge/badge.component.js +3 -2
  146. package/esm2015/button/button.component.js +5 -4
  147. package/esm2015/button/buttons.component.js +1 -1
  148. package/esm2015/calendar/calendar.component.js +5 -4
  149. package/esm2015/carousel/carousel.component.js +4 -3
  150. package/esm2015/cascade/cascade-portal.component.js +6 -7
  151. package/esm2015/cascade/cascade.component.js +5 -4
  152. package/esm2015/checkbox/checkbox.component.js +4 -3
  153. package/esm2015/checkbox/checkbox.property.js +1 -1
  154. package/esm2015/color/color.component.js +2 -2
  155. package/esm2015/color-picker/color-picker-portal.component.js +3 -3
  156. package/esm2015/color-picker/color-picker.component.js +8 -9
  157. package/esm2015/comment/comment.component.js +4 -3
  158. package/esm2015/container/container.component.js +2 -2
  159. package/esm2015/core/animation/fade.js +1 -1
  160. package/esm2015/core/services/http.service.js +2 -2
  161. package/esm2015/core/services/preloading-strategy.service.js +2 -2
  162. package/esm2015/core/services/reuse-strategy.service.js +2 -2
  163. package/esm2015/crumb/crumb.component.js +4 -3
  164. package/esm2015/date-picker/date-picker-portal.component.js +4 -4
  165. package/esm2015/date-picker/date-picker.component.js +9 -13
  166. package/esm2015/date-picker/date-picker.property.js +8 -17
  167. package/esm2015/date-picker/date-range-portal.component.js +2 -2
  168. package/esm2015/date-picker/date-range.component.js +7 -7
  169. package/esm2015/date-picker/picker-date.component.js +4 -3
  170. package/esm2015/date-picker/picker-month.component.js +4 -3
  171. package/esm2015/date-picker/picker-year.component.js +4 -3
  172. package/esm2015/description/description.component.js +6 -7
  173. package/esm2015/dialog/dialog.component.js +3 -2
  174. package/esm2015/dialog/dialog.property.js +1 -1
  175. package/esm2015/drawer/drawer.component.js +3 -2
  176. package/esm2015/dropdown/dropdown-portal.component.js +2 -2
  177. package/esm2015/dropdown/dropdown.component.js +4 -3
  178. package/esm2015/find/find.component.js +7 -6
  179. package/esm2015/form/control.component.js +1 -1
  180. package/esm2015/form/form.component.js +6 -5
  181. package/esm2015/form/form.property.js +3 -8
  182. package/esm2015/highlight/highlight.component.js +3 -2
  183. package/esm2015/highlight/highlight.property.js +1 -1
  184. package/esm2015/i18n/i18n.directive.js +3 -2
  185. package/esm2015/icon/icon.component.js +4 -3
  186. package/esm2015/inner/inner.component.js +2 -2
  187. package/esm2015/input/input-group.component.js +2 -4
  188. package/esm2015/input/input.component.js +7 -4
  189. package/esm2015/input/input.property.js +1 -1
  190. package/esm2015/list/list.component.js +5 -4
  191. package/esm2015/list/list.property.js +1 -1
  192. package/esm2015/loading/loading.component.js +3 -2
  193. package/esm2015/menu/menu-node.component.js +1 -1
  194. package/esm2015/menu/menu.component.js +7 -7
  195. package/esm2015/message/message.component.js +2 -2
  196. package/esm2015/message-box/message-box.component.js +17 -21
  197. package/esm2015/message-box/message-box.service.js +7 -5
  198. package/esm2015/notification/notification.component.js +2 -2
  199. package/esm2015/notification/notification.property.js +1 -1
  200. package/esm2015/pagination/pagination.component.js +4 -3
  201. package/esm2015/popover/popover.directive.js +4 -3
  202. package/esm2015/progress/progress.component.js +4 -3
  203. package/esm2015/radio/radio.component.js +4 -3
  204. package/esm2015/radio/radio.property.js +1 -1
  205. package/esm2015/rate/rate.component.js +6 -6
  206. package/esm2015/ripple/ripple.directive.js +1 -1
  207. package/esm2015/ripple/ripple.property.js +1 -1
  208. package/esm2015/select/select-portal.component.js +3 -3
  209. package/esm2015/select/select.component.js +5 -4
  210. package/esm2015/skeleton/skeleton.component.js +3 -2
  211. package/esm2015/slider/slider.component.js +8 -9
  212. package/esm2015/statistic/countdown.component.js +5 -4
  213. package/esm2015/statistic/statistic.component.js +3 -2
  214. package/esm2015/steps/steps.component.js +5 -4
  215. package/esm2015/steps/steps.property.js +1 -1
  216. package/esm2015/table/drag.directive.js +2 -2
  217. package/esm2015/table/table-body.component.js +4 -3
  218. package/esm2015/table/table-foot.component.js +1 -1
  219. package/esm2015/table/table-head.component.js +5 -4
  220. package/esm2015/table/table.component.js +6 -5
  221. package/esm2015/table/table.property.js +1 -1
  222. package/esm2015/tabs/tab.component.js +1 -1
  223. package/esm2015/tabs/tabs.component.js +6 -5
  224. package/esm2015/tag/tag.component.js +3 -2
  225. package/esm2015/text-retract/text-retract.component.js +3 -2
  226. package/esm2015/textarea/textarea.component.js +3 -2
  227. package/esm2015/textarea/textarea.property.js +2 -12
  228. package/esm2015/theme/theme.component.js +3 -3
  229. package/esm2015/theme/theme.property.js +1 -1
  230. package/esm2015/time-picker/time-picker-frame.component.js +9 -5
  231. package/esm2015/time-picker/time-picker-portal.component.js +2 -2
  232. package/esm2015/time-picker/time-picker.component.js +25 -12
  233. package/esm2015/timeline/timeline.component.js +4 -3
  234. package/esm2015/tooltip/tooltip.directive.js +4 -3
  235. package/esm2015/tooltip/tooltip.property.js +1 -1
  236. package/esm2015/transfer/transfer.component.js +4 -3
  237. package/esm2015/tree/tree-node.component.js +2 -2
  238. package/esm2015/tree/tree.component.js +8 -7
  239. package/esm2015/tree/tree.property.js +1 -1
  240. package/esm2015/upload/upload-portal.component.js +2 -2
  241. package/esm2015/upload/upload.component.js +5 -4
  242. package/fesm2015/ng-nest-ui-alert.js.map +1 -1
  243. package/fesm2015/ng-nest-ui-anchor.js +1 -1
  244. package/fesm2015/ng-nest-ui-anchor.js.map +1 -1
  245. package/fesm2015/ng-nest-ui-auto-complete.js +7 -6
  246. package/fesm2015/ng-nest-ui-auto-complete.js.map +1 -1
  247. package/fesm2015/ng-nest-ui-back-top.js +2 -2
  248. package/fesm2015/ng-nest-ui-back-top.js.map +1 -1
  249. package/fesm2015/ng-nest-ui-badge.js +2 -1
  250. package/fesm2015/ng-nest-ui-badge.js.map +1 -1
  251. package/fesm2015/ng-nest-ui-button.js +4 -3
  252. package/fesm2015/ng-nest-ui-button.js.map +1 -1
  253. package/fesm2015/ng-nest-ui-calendar.js +4 -3
  254. package/fesm2015/ng-nest-ui-calendar.js.map +1 -1
  255. package/fesm2015/ng-nest-ui-carousel.js +3 -2
  256. package/fesm2015/ng-nest-ui-carousel.js.map +1 -1
  257. package/fesm2015/ng-nest-ui-cascade.js +9 -9
  258. package/fesm2015/ng-nest-ui-cascade.js.map +1 -1
  259. package/fesm2015/ng-nest-ui-checkbox.js +3 -2
  260. package/fesm2015/ng-nest-ui-checkbox.js.map +1 -1
  261. package/fesm2015/ng-nest-ui-color-picker.js +9 -10
  262. package/fesm2015/ng-nest-ui-color-picker.js.map +1 -1
  263. package/fesm2015/ng-nest-ui-color.js +1 -1
  264. package/fesm2015/ng-nest-ui-color.js.map +1 -1
  265. package/fesm2015/ng-nest-ui-comment.js +3 -2
  266. package/fesm2015/ng-nest-ui-comment.js.map +1 -1
  267. package/fesm2015/ng-nest-ui-container.js +1 -1
  268. package/fesm2015/ng-nest-ui-container.js.map +1 -1
  269. package/fesm2015/ng-nest-ui-core.js +3 -3
  270. package/fesm2015/ng-nest-ui-core.js.map +1 -1
  271. package/fesm2015/ng-nest-ui-crumb.js +3 -2
  272. package/fesm2015/ng-nest-ui-crumb.js.map +1 -1
  273. package/fesm2015/ng-nest-ui-date-picker.js +34 -44
  274. package/fesm2015/ng-nest-ui-date-picker.js.map +1 -1
  275. package/fesm2015/ng-nest-ui-description.js +5 -6
  276. package/fesm2015/ng-nest-ui-description.js.map +1 -1
  277. package/fesm2015/ng-nest-ui-dialog.js +2 -1
  278. package/fesm2015/ng-nest-ui-dialog.js.map +1 -1
  279. package/fesm2015/ng-nest-ui-drawer.js +2 -1
  280. package/fesm2015/ng-nest-ui-drawer.js.map +1 -1
  281. package/fesm2015/ng-nest-ui-dropdown.js +4 -3
  282. package/fesm2015/ng-nest-ui-dropdown.js.map +1 -1
  283. package/fesm2015/ng-nest-ui-find.js +6 -5
  284. package/fesm2015/ng-nest-ui-find.js.map +1 -1
  285. package/fesm2015/ng-nest-ui-form.js +7 -11
  286. package/fesm2015/ng-nest-ui-form.js.map +1 -1
  287. package/fesm2015/ng-nest-ui-highlight.js +2 -1
  288. package/fesm2015/ng-nest-ui-highlight.js.map +1 -1
  289. package/fesm2015/ng-nest-ui-i18n.js +2 -1
  290. package/fesm2015/ng-nest-ui-i18n.js.map +1 -1
  291. package/fesm2015/ng-nest-ui-icon.js +3 -2
  292. package/fesm2015/ng-nest-ui-icon.js.map +1 -1
  293. package/fesm2015/ng-nest-ui-inner.js +1 -1
  294. package/fesm2015/ng-nest-ui-inner.js.map +1 -1
  295. package/fesm2015/ng-nest-ui-input.js +7 -6
  296. package/fesm2015/ng-nest-ui-input.js.map +1 -1
  297. package/fesm2015/ng-nest-ui-list.js +4 -3
  298. package/fesm2015/ng-nest-ui-list.js.map +1 -1
  299. package/fesm2015/ng-nest-ui-loading.js +2 -1
  300. package/fesm2015/ng-nest-ui-loading.js.map +1 -1
  301. package/fesm2015/ng-nest-ui-menu.js +6 -6
  302. package/fesm2015/ng-nest-ui-menu.js.map +1 -1
  303. package/fesm2015/ng-nest-ui-message-box.js +22 -24
  304. package/fesm2015/ng-nest-ui-message-box.js.map +1 -1
  305. package/fesm2015/ng-nest-ui-message.js +1 -1
  306. package/fesm2015/ng-nest-ui-message.js.map +1 -1
  307. package/fesm2015/ng-nest-ui-notification.js +1 -1
  308. package/fesm2015/ng-nest-ui-notification.js.map +1 -1
  309. package/fesm2015/ng-nest-ui-pagination.js +3 -2
  310. package/fesm2015/ng-nest-ui-pagination.js.map +1 -1
  311. package/fesm2015/ng-nest-ui-popover.js +3 -2
  312. package/fesm2015/ng-nest-ui-popover.js.map +1 -1
  313. package/fesm2015/ng-nest-ui-progress.js +3 -2
  314. package/fesm2015/ng-nest-ui-progress.js.map +1 -1
  315. package/fesm2015/ng-nest-ui-radio.js +3 -2
  316. package/fesm2015/ng-nest-ui-radio.js.map +1 -1
  317. package/fesm2015/ng-nest-ui-rate.js +5 -5
  318. package/fesm2015/ng-nest-ui-rate.js.map +1 -1
  319. package/fesm2015/ng-nest-ui-ripple.js.map +1 -1
  320. package/fesm2015/ng-nest-ui-select.js +6 -5
  321. package/fesm2015/ng-nest-ui-select.js.map +1 -1
  322. package/fesm2015/ng-nest-ui-skeleton.js +2 -1
  323. package/fesm2015/ng-nest-ui-skeleton.js.map +1 -1
  324. package/fesm2015/ng-nest-ui-slider.js +7 -8
  325. package/fesm2015/ng-nest-ui-slider.js.map +1 -1
  326. package/fesm2015/ng-nest-ui-statistic.js +6 -4
  327. package/fesm2015/ng-nest-ui-statistic.js.map +1 -1
  328. package/fesm2015/ng-nest-ui-steps.js +4 -3
  329. package/fesm2015/ng-nest-ui-steps.js.map +1 -1
  330. package/fesm2015/ng-nest-ui-table.js +13 -10
  331. package/fesm2015/ng-nest-ui-table.js.map +1 -1
  332. package/fesm2015/ng-nest-ui-tabs.js +5 -4
  333. package/fesm2015/ng-nest-ui-tabs.js.map +1 -1
  334. package/fesm2015/ng-nest-ui-tag.js +2 -1
  335. package/fesm2015/ng-nest-ui-tag.js.map +1 -1
  336. package/fesm2015/ng-nest-ui-text-retract.js +2 -1
  337. package/fesm2015/ng-nest-ui-text-retract.js.map +1 -1
  338. package/fesm2015/ng-nest-ui-textarea.js +3 -12
  339. package/fesm2015/ng-nest-ui-textarea.js.map +1 -1
  340. package/fesm2015/ng-nest-ui-theme.js +2 -2
  341. package/fesm2015/ng-nest-ui-theme.js.map +1 -1
  342. package/fesm2015/ng-nest-ui-time-picker.js +33 -16
  343. package/fesm2015/ng-nest-ui-time-picker.js.map +1 -1
  344. package/fesm2015/ng-nest-ui-timeline.js +3 -2
  345. package/fesm2015/ng-nest-ui-timeline.js.map +1 -1
  346. package/fesm2015/ng-nest-ui-tooltip.js +3 -2
  347. package/fesm2015/ng-nest-ui-tooltip.js.map +1 -1
  348. package/fesm2015/ng-nest-ui-transfer.js +3 -2
  349. package/fesm2015/ng-nest-ui-transfer.js.map +1 -1
  350. package/fesm2015/ng-nest-ui-tree.js +8 -7
  351. package/fesm2015/ng-nest-ui-tree.js.map +1 -1
  352. package/fesm2015/ng-nest-ui-upload.js +5 -4
  353. package/fesm2015/ng-nest-ui-upload.js.map +1 -1
  354. package/find/find.component.d.ts +1 -1
  355. package/form/control.component.d.ts +1 -1
  356. package/form/form.component.d.ts +1 -1
  357. package/form/form.property.d.ts +6 -6
  358. package/inner/inner.component.d.ts +1 -1
  359. package/input/input-group.component.d.ts +2 -4
  360. package/list/list.component.d.ts +2 -2
  361. package/menu/menu.component.d.ts +1 -1
  362. package/message/message.component.d.ts +1 -1
  363. package/message-box/message-box.component.d.ts +2 -1
  364. package/notification/notification.component.d.ts +1 -1
  365. package/package.json +1 -1
  366. package/pagination/pagination.component.d.ts +1 -1
  367. package/radio/radio.component.d.ts +1 -1
  368. package/rate/rate.component.d.ts +5 -5
  369. package/select/select-portal.component.d.ts +1 -3
  370. package/select/select.component.d.ts +1 -1
  371. package/slider/slider.component.d.ts +1 -1
  372. package/steps/steps.component.d.ts +1 -1
  373. package/table/table-body.component.d.ts +1 -1
  374. package/table/table-head.component.d.ts +1 -1
  375. package/table/table.component.d.ts +1 -1
  376. package/table/table.property.d.ts +10 -0
  377. package/textarea/textarea.property.d.ts +1 -6
  378. package/theme/theme.component.d.ts +1 -1
  379. package/time-picker/time-picker-frame.component.d.ts +1 -0
  380. package/time-picker/time-picker-portal.component.d.ts +1 -3
  381. package/time-picker/time-picker.component.d.ts +5 -3
  382. package/timeline/timeline.component.d.ts +1 -1
  383. package/transfer/transfer.component.d.ts +1 -1
  384. package/tree/tree-node.component.d.ts +1 -1
  385. package/tree/tree.component.d.ts +1 -1
  386. package/upload/upload.component.d.ts +3 -3
@@ -156,7 +156,7 @@ export class XUploadComponent extends XUploadProperty {
156
156
  }
157
157
  return;
158
158
  }
159
- trackByItem(index, item) {
159
+ trackByItem(_index, item) {
160
160
  return `${item.name}-${item.lastModified}`;
161
161
  }
162
162
  onImgCut(file, index) {
@@ -207,15 +207,16 @@ export class XUploadComponent extends XUploadProperty {
207
207
  }
208
208
  imgError(event, file) {
209
209
  file.state = 'error';
210
+ console.error(event.error);
210
211
  this.cdr.detectChanges();
211
212
  }
212
- imgLoad(event, file) {
213
+ imgLoad(file) {
213
214
  file.state = 'success';
214
215
  this.cdr.detectChanges();
215
216
  }
216
217
  }
217
218
  /** @nocollapse */ XUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: XUploadComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.HttpClient }, { token: i0.ChangeDetectorRef }, { token: i2.XPortalService }, { token: i0.ViewContainerRef }, { token: i3.XI18nService }], target: i0.ɵɵFactoryTarget.Component });
218
- /** @nocollapse */ XUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: XUploadComponent, selector: "x-upload", providers: [XValueAccessor(XUploadComponent)], viewQueries: [{ propertyName: "file", first: true, predicate: ["file"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div #upload class=\"x-upload x-upload-{{ type }}\" [class.x-disabled]=\"disabled\">\r\n <input type=\"file\" #file (change)=\"change($event)\" [attr.accept]=\"accept\" [multiple]=\"multiple\" style=\"display: none\" />\r\n <div class=\"x-upload-buttons\" [class.x-upload-buttons-template]=\"isTemplateText\" (click)=\"uploadClick()\">\r\n <ng-container *xOutlet=\"getText\">\r\n <x-button icon=\"fto-upload\" [disabled]=\"disabled\" type=\"primary\">{{ getText }}</x-button>\r\n </ng-container>\r\n </div>\r\n <ng-container [ngSwitch]=\"type\">\r\n <ng-container *ngSwitchCase=\"'list'\">\r\n <ul class=\"x-upload-files\">\r\n <li *ngFor=\"let file of files; index as i; trackBy: trackByItem\">\r\n <a [href]=\"file.url\" target=\"_blank\" [title]=\"file.name\">\r\n <x-icon type=\"fto-file-text\"></x-icon>\r\n <span class=\"x-upload-filename\">{{ file.name }}</span>\r\n </a>\r\n <ng-container [ngSwitch]=\"file.state\">\r\n <x-icon class=\"x-upload-state\" *ngSwitchCase=\"'ready'\" type=\"fto-clock\"></x-icon>\r\n <span class=\"x-upload-percent\" *ngSwitchCase=\"'uploading'\">{{ file.percent }}%</span>\r\n <x-icon class=\"x-upload-state success\" *ngSwitchCase=\"'success'\" type=\"fto-check\"></x-icon>\r\n <x-icon class=\"x-upload-state error\" *ngSwitchCase=\"'error'\" type=\"fto-info\"></x-icon>\r\n </ng-container>\r\n <x-button *ngIf=\"file.state !== 'uploading'\" icon=\"fto-x\" (click)=\"remove(file, i)\" onlyIcon closable></x-button>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'img'\">\r\n <div class=\"x-upload-img-item {{ file.state }}\" *ngFor=\"let file of files; index as i; trackBy: trackByItem\" [title]=\"file.name\">\r\n <div class=\"x-upload-img-inner\">\r\n <img [src]=\"file.url\" (load)=\"imgLoad($event, file)\" (error)=\"imgError($event, file)\" />\r\n <x-icon type=\"fto-image\"></x-icon>\r\n <span *ngIf=\"file.state == 'uploading'\">{{ file.percent }}%</span>\r\n </div>\r\n <div class=\"x-upload-img-btns\">\r\n <div class=\"x-upload-img-btns-inner\">\r\n <ng-container [ngSwitch]=\"file.state\">\r\n <x-icon class=\"x-upload-state\" *ngSwitchCase=\"'ready'\" type=\"fto-clock\"></x-icon>\r\n <x-icon class=\"x-upload-state error\" *ngSwitchCase=\"'error'\" type=\"fto-info\"></x-icon>\r\n <a [href]=\"file.url\" target=\"_blank\" *ngSwitchCase=\"'success'\">\r\n <x-icon type=\"fto-eye\"></x-icon>\r\n </a>\r\n </ng-container>\r\n <x-icon *ngIf=\"imgCut && file.state === 'success'\" type=\"fto-crop\" (click)=\"onImgCut(file, i)\"></x-icon>\r\n <x-icon *ngIf=\"file.state !== 'uploading'\" type=\"fto-trash-2\" (click)=\"remove(file, i)\"></x-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n</div>\r\n", styles: [".x-upload{margin:0;padding:0;color:var(--x-text);font-size:var(--x-font-size)}.x-upload-buttons{display:inline-flex}.x-upload-buttons>.x-button:not(:first-child){margin-left:.4rem}.x-upload-buttons-template{cursor:pointer}.x-upload-files{margin-top:.4rem}.x-upload-files>li{padding:0 .2rem;height:calc(var(--x-font-size) + .6rem);line-height:calc(var(--x-font-size) + .6rem);display:flex;align-items:center;overflow:hidden;cursor:pointer;border-radius:var(--x-border-radius)}.x-upload-files>li .x-icon{color:var(--x-text-400);font-size:1rem}.x-upload-files>li .x-icon.x-upload-state.success{color:var(--x-success)}.x-upload-files>li .x-icon.x-upload-state.error{color:var(--x-danger)}.x-upload-files>li a{flex:1;display:flex;align-items:center;height:calc(var(--x-font-size) + .6rem);line-height:calc(var(--x-font-size) + .6rem);color:inherit;text-decoration:none;overflow:hidden}.x-upload-files>li span.x-upload-filename{margin-left:.2rem;flex:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.x-upload-files>li span.x-upload-percent{color:var(--x-text-400)}.x-upload-files>li>.x-button{display:none;padding:0}.x-upload-files>li:not(:first-child){margin-top:.2rem}.x-upload-files>li:hover{color:var(--x-primary);background-color:var(--x-background)}.x-upload-files>li:hover>.x-button{display:inline-block}.x-upload-files>li:hover>.x-upload-state{display:none}.x-upload-img{display:flex;flex-wrap:wrap}.x-upload-img .x-upload-buttons-template{display:inline-flex;align-items:center;justify-content:center;flex-direction:column;width:6.25rem;height:6.25rem;margin-right:.5rem;margin-bottom:.5rem;border:var(--x-border-width) dashed var(--x-border);background:var(--x-background);border-radius:var(--x-border-radius);transition:border-color var(--x-animation-duration-base)}.x-upload-img .x-upload-buttons-template:hover{border-color:var(--x-primary)}.x-upload-img-item{height:6.25rem;width:6.25rem;padding:.325rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);transition:border-color var(--x-animation-duration-base);margin-right:.5rem;margin-bottom:.5rem;position:relative;display:flex;align-items:center;justify-content:center}.x-upload-img-item .x-upload-img-inner{height:100%;width:100%;overflow:hidden;display:flex;align-items:center;justify-content:center;flex-direction:column}.x-upload-img-item .x-upload-img-inner>img{width:100%;border-radius:var(--x-border-radius)}.x-upload-img-item .x-upload-img-inner>x-icon{display:none;font-size:3rem;color:var(--x-danger)}.x-upload-img-item.error{border-color:var(--x-danger)}.x-upload-img-item.error .x-upload-img-inner>img{display:none}.x-upload-img-item.error .x-upload-img-inner>x-icon{display:inherit}.x-upload-img-item:hover .x-upload-img-btns{background-color:#00000073}.x-upload-img-item:hover .x-upload-img-btns-inner{display:initial}.x-upload-img-btns{position:absolute;height:100%;width:100%;display:flex;align-items:center;justify-content:center;border-radius:var(--x-border-radius);background-color:#0000;transition:all var(--x-animation-duration-base)}.x-upload-img-btns x-icon{cursor:pointer;font-size:1rem;padding:.25rem;color:#ffffffb3}.x-upload-img-btns x-icon:hover{color:#fff}.x-upload-img-btns-inner{display:none}\n"], components: [{ type: i4.XButtonComponent, selector: "x-button" }, { type: i5.XIconComponent, selector: "x-icon" }], directives: [{ type: i6.XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { type: i7.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i7.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
219
+ /** @nocollapse */ XUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: XUploadComponent, selector: "x-upload", providers: [XValueAccessor(XUploadComponent)], viewQueries: [{ propertyName: "file", first: true, predicate: ["file"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div #upload class=\"x-upload x-upload-{{ type }}\" [class.x-disabled]=\"disabled\">\r\n <input type=\"file\" #file (change)=\"change($event)\" [attr.accept]=\"accept\" [multiple]=\"multiple\" style=\"display: none\" />\r\n <div class=\"x-upload-buttons\" [class.x-upload-buttons-template]=\"isTemplateText\" (click)=\"uploadClick()\">\r\n <ng-container *xOutlet=\"getText\">\r\n <x-button icon=\"fto-upload\" [disabled]=\"disabled\" type=\"primary\">{{ getText }}</x-button>\r\n </ng-container>\r\n </div>\r\n <ng-container [ngSwitch]=\"type\">\r\n <ng-container *ngSwitchCase=\"'list'\">\r\n <ul class=\"x-upload-files\">\r\n <li *ngFor=\"let file of files; index as i; trackBy: trackByItem\">\r\n <a [href]=\"file.url\" target=\"_blank\" [title]=\"file.name\">\r\n <x-icon type=\"fto-file-text\"></x-icon>\r\n <span class=\"x-upload-filename\">{{ file.name }}</span>\r\n </a>\r\n <ng-container [ngSwitch]=\"file.state\">\r\n <x-icon class=\"x-upload-state\" *ngSwitchCase=\"'ready'\" type=\"fto-clock\"></x-icon>\r\n <span class=\"x-upload-percent\" *ngSwitchCase=\"'uploading'\">{{ file.percent }}%</span>\r\n <x-icon class=\"x-upload-state success\" *ngSwitchCase=\"'success'\" type=\"fto-check\"></x-icon>\r\n <x-icon class=\"x-upload-state error\" *ngSwitchCase=\"'error'\" type=\"fto-info\"></x-icon>\r\n </ng-container>\r\n <x-button *ngIf=\"file.state !== 'uploading'\" icon=\"fto-x\" (click)=\"remove(file, i)\" onlyIcon closable></x-button>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'img'\">\r\n <div class=\"x-upload-img-item {{ file.state }}\" *ngFor=\"let file of files; index as i; trackBy: trackByItem\" [title]=\"file.name\">\r\n <div class=\"x-upload-img-inner\">\r\n <img [src]=\"file.url\" (load)=\"imgLoad(file)\" (error)=\"imgError($event, file)\" />\r\n <x-icon type=\"fto-image\"></x-icon>\r\n <span *ngIf=\"file.state == 'uploading'\">{{ file.percent }}%</span>\r\n </div>\r\n <div class=\"x-upload-img-btns\">\r\n <div class=\"x-upload-img-btns-inner\">\r\n <ng-container [ngSwitch]=\"file.state\">\r\n <x-icon class=\"x-upload-state\" *ngSwitchCase=\"'ready'\" type=\"fto-clock\"></x-icon>\r\n <x-icon class=\"x-upload-state error\" *ngSwitchCase=\"'error'\" type=\"fto-info\"></x-icon>\r\n <a [href]=\"file.url\" target=\"_blank\" *ngSwitchCase=\"'success'\">\r\n <x-icon type=\"fto-eye\"></x-icon>\r\n </a>\r\n </ng-container>\r\n <x-icon *ngIf=\"imgCut && file.state === 'success'\" type=\"fto-crop\" (click)=\"onImgCut(file, i)\"></x-icon>\r\n <x-icon *ngIf=\"file.state !== 'uploading'\" type=\"fto-trash-2\" (click)=\"remove(file, i)\"></x-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n</div>\r\n", styles: [".x-upload{margin:0;padding:0;color:var(--x-text);font-size:var(--x-font-size)}.x-upload-buttons{display:inline-flex}.x-upload-buttons>.x-button:not(:first-child){margin-left:.4rem}.x-upload-buttons-template{cursor:pointer}.x-upload-files{margin-top:.4rem}.x-upload-files>li{padding:0 .2rem;height:calc(var(--x-font-size) + .6rem);line-height:calc(var(--x-font-size) + .6rem);display:flex;align-items:center;overflow:hidden;cursor:pointer;border-radius:var(--x-border-radius)}.x-upload-files>li .x-icon{color:var(--x-text-400);font-size:1rem}.x-upload-files>li .x-icon.x-upload-state.success{color:var(--x-success)}.x-upload-files>li .x-icon.x-upload-state.error{color:var(--x-danger)}.x-upload-files>li a{flex:1;display:flex;align-items:center;height:calc(var(--x-font-size) + .6rem);line-height:calc(var(--x-font-size) + .6rem);color:inherit;text-decoration:none;overflow:hidden}.x-upload-files>li span.x-upload-filename{margin-left:.2rem;flex:1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.x-upload-files>li span.x-upload-percent{color:var(--x-text-400)}.x-upload-files>li>.x-button{display:none;padding:0}.x-upload-files>li:not(:first-child){margin-top:.2rem}.x-upload-files>li:hover{color:var(--x-primary);background-color:var(--x-background)}.x-upload-files>li:hover>.x-button{display:inline-block}.x-upload-files>li:hover>.x-upload-state{display:none}.x-upload-img{display:flex;flex-wrap:wrap}.x-upload-img .x-upload-buttons-template{display:inline-flex;align-items:center;justify-content:center;flex-direction:column;width:6.25rem;height:6.25rem;margin-right:.5rem;margin-bottom:.5rem;border:var(--x-border-width) dashed var(--x-border);background:var(--x-background);border-radius:var(--x-border-radius);transition:border-color var(--x-animation-duration-base)}.x-upload-img .x-upload-buttons-template:hover{border-color:var(--x-primary)}.x-upload-img-item{height:6.25rem;width:6.25rem;padding:.325rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);border-radius:var(--x-border-radius);transition:border-color var(--x-animation-duration-base);margin-right:.5rem;margin-bottom:.5rem;position:relative;display:flex;align-items:center;justify-content:center}.x-upload-img-item .x-upload-img-inner{height:100%;width:100%;overflow:hidden;display:flex;align-items:center;justify-content:center;flex-direction:column}.x-upload-img-item .x-upload-img-inner>img{width:100%;border-radius:var(--x-border-radius)}.x-upload-img-item .x-upload-img-inner>x-icon{display:none;font-size:3rem;color:var(--x-danger)}.x-upload-img-item.error{border-color:var(--x-danger)}.x-upload-img-item.error .x-upload-img-inner>img{display:none}.x-upload-img-item.error .x-upload-img-inner>x-icon{display:inherit}.x-upload-img-item:hover .x-upload-img-btns{background-color:#00000073}.x-upload-img-item:hover .x-upload-img-btns-inner{display:initial}.x-upload-img-btns{position:absolute;height:100%;width:100%;display:flex;align-items:center;justify-content:center;border-radius:var(--x-border-radius);background-color:#0000;transition:all var(--x-animation-duration-base)}.x-upload-img-btns x-icon{cursor:pointer;font-size:1rem;padding:.25rem;color:#ffffffb3}.x-upload-img-btns x-icon:hover{color:#fff}.x-upload-img-btns-inner{display:none}\n"], components: [{ type: i4.XButtonComponent, selector: "x-button" }, { type: i5.XIconComponent, selector: "x-icon" }], directives: [{ type: i6.XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }, { type: i7.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i7.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
219
220
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: XUploadComponent, decorators: [{
220
221
  type: Component,
221
222
  args: [{
@@ -230,4 +231,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImpor
230
231
  type: ViewChild,
231
232
  args: ['file', { static: true }]
232
233
  }] } });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL3VwbG9hZC91cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdXBsb2FkL3VwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsYUFBYSxFQUFFLFdBQVcsRUFBYSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pGLE9BQU8sRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUl2QixTQUFTLEVBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBZSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9CLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7O0FBVXZELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxlQUFlO0lBd0JuRCxZQUNTLFFBQW1CLEVBQ25CLFVBQXNCLEVBQ3RCLElBQWdCLEVBQ2hCLEdBQXNCLEVBQ3RCLGFBQTZCLEVBQzdCLGdCQUFrQyxFQUNsQyxJQUFrQjtRQUV6QixLQUFLLEVBQUUsQ0FBQztRQVJELGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGtCQUFh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QUFPLENBQUMsS0FBWSxFQUFFLElBQWlCO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7Z0lBeE5VLGdCQUFnQjtvSEFBaEIsZ0JBQWdCLG1DQUZoQixDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLDZKQzFCL0MseS9GQWlEQTsyRkRyQmEsZ0JBQWdCO2tCQVI1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxHQUFHLGFBQWEsRUFBRTtvQkFDNUIsV0FBVyxFQUFFLHlCQUF5QjtvQkFDdEMsU0FBUyxFQUFFLENBQUMseUJBQXlCLENBQUM7b0JBQ3RDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsU0FBUyxFQUFFLENBQUMsY0FBYyxrQkFBa0IsQ0FBQztpQkFDOUM7eVFBRXNDLElBQUk7c0JBQXhDLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBSZXF1ZXN0LCBIdHRwRXZlbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFJlbmRlcmVyMixcclxuICBFbGVtZW50UmVmLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFhVcGxvYWRQcmVmaXgsIFhVcGxvYWROb2RlLCBYVXBsb2FkUHJvcGVydHksIFhVcGxvYWRQb3J0YWxQcmVmaXggfSBmcm9tICcuL3VwbG9hZC5wcm9wZXJ0eSc7XHJcbmltcG9ydCB7IFhJc1RlbXBsYXRlUmVmIH0gZnJvbSAnQG5nLW5lc3QvdWkvY29yZSc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFhJMThuU2VydmljZSwgWEkxOG5VcGxvYWQgfSBmcm9tICdAbmctbmVzdC91aS9pMThuJztcclxuaW1wb3J0IHsgWFBvcnRhbE92ZXJsYXlSZWYsIFhQb3J0YWxTZXJ2aWNlIH0gZnJvbSAnQG5nLW5lc3QvdWkvcG9ydGFsJztcclxuaW1wb3J0IHsgWFVwbG9hZFBvcnRhbENvbXBvbmVudCB9IGZyb20gJy4vdXBsb2FkLXBvcnRhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBYVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0BuZy1uZXN0L3VpL2Jhc2UtZm9ybSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogYCR7WFVwbG9hZFByZWZpeH1gLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbWFZhbHVlQWNjZXNzb3IoWFVwbG9hZENvbXBvbmVudCldXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBYVXBsb2FkQ29tcG9uZW50IGV4dGVuZHMgWFVwbG9hZFByb3BlcnR5IHtcclxuICBAVmlld0NoaWxkKCdmaWxlJywgeyBzdGF0aWM6IHRydWUgfSkgZmlsZSE6IEVsZW1lbnRSZWY7XHJcbiAgZmlsZXM6IFhVcGxvYWROb2RlW10gPSBbXTtcclxuICBzaG93VXBsb2FkID0gZmFsc2U7XHJcbiAgdXBsb2FkTm9kZXM6IFhVcGxvYWROb2RlW10gPSBbXTtcclxuICBsb2NhbGU6IFhJMThuVXBsb2FkID0ge307XHJcbiAgcG9ydGFsITogWFBvcnRhbE92ZXJsYXlSZWY8WFVwbG9hZFBvcnRhbENvbXBvbmVudD47XHJcblxyXG4gIGdldCBnZXRUZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGV4dCB8fCB0aGlzLmxvY2FsZS51cGxvYWRUZXh0O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzVGVtcGxhdGVUZXh0KCkge1xyXG4gICAgcmV0dXJuIFhJc1RlbXBsYXRlUmVmKHRoaXMuZ2V0VGV4dCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBYVXBsb2FkTm9kZVtdKSB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLnNldEZpbGVzKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwdWJsaWMgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHVibGljIHBvcnRhbFNlcnZpY2U6IFhQb3J0YWxTZXJ2aWNlLFxyXG4gICAgcHVibGljIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwdWJsaWMgaTE4bjogWEkxOG5TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmkxOG4ubG9jYWxlQ2hhbmdlXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgoeCkgPT4geC51cGxvYWQgYXMgWEkxOG5VcGxvYWQpLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9jYWxlID0geDtcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy50eXBlID09PSAnaW1nJykgdGhpcy5hY2NlcHQgPSAnaW1hZ2UvKic7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdG9yeSgpIHtcclxuICAgIHRoaXMuX3VuU3ViamVjdC5uZXh0KCk7XHJcbiAgICB0aGlzLl91blN1YmplY3QudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHNldEZpbGVzKCkge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy50eXBlICE9PSAnaW1nJykgcmV0dXJuO1xyXG4gICAgdGhpcy5maWxlcyA9IHRoaXMudmFsdWUubWFwKCh4KSA9PiB7XHJcbiAgICAgIGlmICgheC5zdGF0ZSkgeC5zdGF0ZSA9ICdzdWNjZXNzJztcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoYW5nZShldmVudDogRXZlbnQpIHtcclxuICAgIGxldCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3VuZGVmaW5lZCcgfHwgaW5wdXQuZmlsZXM/Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgbGV0IGZpbGVzOiBYVXBsb2FkTm9kZVtdID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IChpbnB1dC5maWxlcyBhcyBGaWxlTGlzdCkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGZpbGU6IFhVcGxvYWROb2RlID0gKGlucHV0LmZpbGVzIGFzIEZpbGVMaXN0KS5pdGVtKGkpIGFzIFhVcGxvYWROb2RlO1xyXG4gICAgICBmaWxlLnN0YXRlID0gJ3JlYWR5JztcclxuICAgICAgZmlsZXMgPSBbLi4uZmlsZXMsIGZpbGVdO1xyXG4gICAgfVxyXG4gICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHRoaXMuc2hvd1VwbG9hZCA9IHRydWU7XHJcbiAgICB0aGlzLmZpbGVzID0gZmlsZXM7XHJcbiAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICB0aGlzLnVwbG9hZGluZygpO1xyXG4gICAgaW5wdXQudmFsdWUgPSAnJztcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZShmaWxlOiBYVXBsb2FkTm9kZSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5maWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoID09PSAwKSB0aGlzLmZpbGUubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5zaG93VXBsb2FkID0gdGhpcy5maWxlcy5maW5kKCh4KSA9PiB4LnN0YXRlID09PSAncmVhZHknKSAhPSBudWxsO1xyXG4gICAgdGhpcy5yZW1vdmVDbGljay5lbWl0KHsgZmlsZTogZmlsZSwgaW5kZXg6IGluZGV4IH0pO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkQ2xpY2soKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5maWxlLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIHVwbG9hZGluZygpIHtcclxuICAgIGlmICghdGhpcy5hY3Rpb24pIHJldHVybjtcclxuICAgIGxldCByZWFkeUZpbGVzID0gdGhpcy5maWxlcy5maWx0ZXIoKHgpID0+IHguc3RhdGUgPT09ICdyZWFkeScpO1xyXG4gICAgcmVhZHlGaWxlcy5mb3JFYWNoKCh4KSA9PiB7XHJcbiAgICAgIHRoaXMudXBsb2FkRmlsZSh4KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkRmlsZShmaWxlOiBYVXBsb2FkTm9kZSwgaW5kZXggPSAtMSkge1xyXG4gICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcclxuICAgIGNvbnN0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdCgnUE9TVCcsIHRoaXMuYWN0aW9uIGFzIHN0cmluZywgZm9ybURhdGEsIHtcclxuICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmh0dHBcclxuICAgICAgLnJlcXVlc3QocmVxKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKGV2ZW50KSA9PlxyXG4gICAgICAgICAgdGhpcy5nZXRFdmVudE1lc3NhZ2UoZXZlbnQsIGZpbGUsIChib2R5OiBCbG9iUGFydCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFtib2R5XSk7XHJcbiAgICAgICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChibG9iLCAndXRmLTgnKTtcclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICBmaWxlLnVybCA9IEpTT04ucGFyc2UocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpWzBdO1xyXG4gICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSBmaWxlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlc1tpbmRleF0gPSBmaWxlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd1VwbG9hZCA9IHRoaXMuZmlsZXMuZmluZCgoeSkgPT4geS5zdGF0ZSA9PT0gJ3JlYWR5JykgIT0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIGZpbGUuc3RhdGUgPSAnZXJyb3InO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGdldEV2ZW50TWVzc2FnZShldmVudDogSHR0cEV2ZW50PGFueT4sIGZpbGU6IFhVcGxvYWROb2RlLCBmdW46IEZ1bmN0aW9uKSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcclxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlNlbnQ6XHJcbiAgICAgICAgZmlsZS5zdGF0ZSA9ICdyZWFkeSc7XHJcbiAgICAgICAgcmV0dXJuIGDlvIDlp4vkuIrkvKDmlofku7ZgO1xyXG4gICAgICBjYXNlIEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3M6XHJcbiAgICAgICAgZmlsZS5zdGF0ZSA9ICd1cGxvYWRpbmcnO1xyXG4gICAgICAgIGlmIChldmVudC50b3RhbCkgZmlsZS5wZXJjZW50ID0gTWF0aC5yb3VuZCgoMTAwICogZXZlbnQubG9hZGVkKSAvIGV2ZW50LnRvdGFsKTtcclxuICAgICAgICByZXR1cm4gYOS4iuS8oOS4rWA7XHJcbiAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcclxuICAgICAgICBmaWxlLnN0YXRlID0gJ3N1Y2Nlc3MnO1xyXG4gICAgICAgIGZ1bihldmVudC5ib2R5KTtcclxuICAgICAgICByZXR1cm4gYOaWh+S7tuS4iuS8oOWujOavlWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB0cmFja0J5SXRlbShpbmRleDogbnVtYmVyLCBpdGVtOiBYVXBsb2FkTm9kZSkge1xyXG4gICAgcmV0dXJuIGAke2l0ZW0ubmFtZX0tJHtpdGVtLmxhc3RNb2RpZmllZH1gO1xyXG4gIH1cclxuXHJcbiAgb25JbWdDdXQoZmlsZTogWFVwbG9hZE5vZGUsIGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMucG9ydGFsID0gdGhpcy5wb3J0YWxTZXJ2aWNlLmF0dGFjaCh7XHJcbiAgICAgIGNvbnRlbnQ6IFhVcGxvYWRQb3J0YWxDb21wb25lbnQsXHJcbiAgICAgIHZpZXdDb250YWluZXJSZWY6IHRoaXMudmlld0NvbnRhaW5lclJlZixcclxuICAgICAgb3ZlcmxheUNvbmZpZzoge1xyXG4gICAgICAgIHBhbmVsQ2xhc3M6IFtYVXBsb2FkUG9ydGFsUHJlZml4XSxcclxuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLnBvcnRhbFNlcnZpY2Uuc2V0UGxhY2UoJ2NlbnRlcicpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZXRJbnN0YW5jZShmaWxlLCBpbmRleCk7XHJcbiAgfVxyXG5cclxuICBzZXRJbnN0YW5jZShmaWxlOiBYVXBsb2FkTm9kZSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgbGV0IGNvbXBvbmVudFJlZiA9IHRoaXMucG9ydGFsPy5jb21wb25lbnRSZWY7XHJcbiAgICBpZiAoIWNvbXBvbmVudFJlZikgcmV0dXJuO1xyXG4gICAgT2JqZWN0LmFzc2lnbihjb21wb25lbnRSZWYuaW5zdGFuY2UsIHtcclxuICAgICAgZmlsZTogZmlsZSxcclxuICAgICAgY2xvc2VQb3J0YWw6ICgpID0+IHRoaXMuY2xvc2VQb3J0YWwoKSxcclxuICAgICAgZGVzdHJveVBvcnRhbDogKCkgPT4gdGhpcy5kZXN0cm95UG9ydGFsKCksXHJcbiAgICAgIHN1cmVQb3J0YWw6IChibG9iOiBCbG9iKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmwgPSBuZXcgRmlsZShbYmxvYl0sIGZpbGUubmFtZSwgeyB0eXBlOiBibG9iLnR5cGUgfSkgYXMgWFVwbG9hZE5vZGU7XHJcbiAgICAgICAgZmwuc3RhdGUgPSAncmVhZHknO1xyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZShmbCwgaW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwb3J0YWxBdHRhY2hlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLnBvcnRhbD8ub3ZlcmxheVJlZj8uaGFzQXR0YWNoZWQoKTtcclxuICB9XHJcblxyXG4gIGNsb3NlUG9ydGFsKCkge1xyXG4gICAgaWYgKHRoaXMucG9ydGFsQXR0YWNoZWQoKSkge1xyXG4gICAgICB0aGlzLnBvcnRhbD8ub3ZlcmxheVJlZj8uZGV0YWNoKCk7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95UG9ydGFsKCkge1xyXG4gICAgdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIGltZ0Vycm9yKGV2ZW50OiBFdmVudCwgZmlsZTogWFVwbG9hZE5vZGUpIHtcclxuICAgIGZpbGUuc3RhdGUgPSAnZXJyb3InO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgaW1nTG9hZChldmVudDogRXZlbnQsIGZpbGU6IFhVcGxvYWROb2RlKSB7XHJcbiAgICBmaWxlLnN0YXRlID0gJ3N1Y2Nlc3MnO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICN1cGxvYWQgY2xhc3M9XCJ4LXVwbG9hZCB4LXVwbG9hZC17eyB0eXBlIH19XCIgW2NsYXNzLngtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICA8aW5wdXQgdHlwZT1cImZpbGVcIiAjZmlsZSAoY2hhbmdlKT1cImNoYW5nZSgkZXZlbnQpXCIgW2F0dHIuYWNjZXB0XT1cImFjY2VwdFwiIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIC8+XHJcbiAgPGRpdiBjbGFzcz1cIngtdXBsb2FkLWJ1dHRvbnNcIiBbY2xhc3MueC11cGxvYWQtYnV0dG9ucy10ZW1wbGF0ZV09XCJpc1RlbXBsYXRlVGV4dFwiIChjbGljayk9XCJ1cGxvYWRDbGljaygpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICp4T3V0bGV0PVwiZ2V0VGV4dFwiPlxyXG4gICAgICA8eC1idXR0b24gaWNvbj1cImZ0by11cGxvYWRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiB0eXBlPVwicHJpbWFyeVwiPnt7IGdldFRleHQgfX08L3gtYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHlwZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xpc3QnXCI+XHJcbiAgICAgIDx1bCBjbGFzcz1cIngtdXBsb2FkLWZpbGVzXCI+XHJcbiAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBmaWxlIG9mIGZpbGVzOyBpbmRleCBhcyBpOyB0cmFja0J5OiB0cmFja0J5SXRlbVwiPlxyXG4gICAgICAgICAgPGEgW2hyZWZdPVwiZmlsZS51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbdGl0bGVdPVwiZmlsZS5uYW1lXCI+XHJcbiAgICAgICAgICAgIDx4LWljb24gdHlwZT1cImZ0by1maWxlLXRleHRcIj48L3gtaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ4LXVwbG9hZC1maWxlbmFtZVwiPnt7IGZpbGUubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZpbGUuc3RhdGVcIj5cclxuICAgICAgICAgICAgPHgtaWNvbiBjbGFzcz1cIngtdXBsb2FkLXN0YXRlXCIgKm5nU3dpdGNoQ2FzZT1cIidyZWFkeSdcIiB0eXBlPVwiZnRvLWNsb2NrXCI+PC94LWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwieC11cGxvYWQtcGVyY2VudFwiICpuZ1N3aXRjaENhc2U9XCIndXBsb2FkaW5nJ1wiPnt7IGZpbGUucGVyY2VudCB9fSU8L3NwYW4+XHJcbiAgICAgICAgICAgIDx4LWljb24gY2xhc3M9XCJ4LXVwbG9hZC1zdGF0ZSBzdWNjZXNzXCIgKm5nU3dpdGNoQ2FzZT1cIidzdWNjZXNzJ1wiIHR5cGU9XCJmdG8tY2hlY2tcIj48L3gtaWNvbj5cclxuICAgICAgICAgICAgPHgtaWNvbiBjbGFzcz1cIngtdXBsb2FkLXN0YXRlIGVycm9yXCIgKm5nU3dpdGNoQ2FzZT1cIidlcnJvcidcIiB0eXBlPVwiZnRvLWluZm9cIj48L3gtaWNvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPHgtYnV0dG9uICpuZ0lmPVwiZmlsZS5zdGF0ZSAhPT0gJ3VwbG9hZGluZydcIiBpY29uPVwiZnRvLXhcIiAoY2xpY2spPVwicmVtb3ZlKGZpbGUsIGkpXCIgb25seUljb24gY2xvc2FibGU+PC94LWJ1dHRvbj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW1nJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwieC11cGxvYWQtaW1nLWl0ZW0ge3sgZmlsZS5zdGF0ZSB9fVwiICpuZ0Zvcj1cImxldCBmaWxlIG9mIGZpbGVzOyBpbmRleCBhcyBpOyB0cmFja0J5OiB0cmFja0J5SXRlbVwiIFt0aXRsZV09XCJmaWxlLm5hbWVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwieC11cGxvYWQtaW1nLWlubmVyXCI+XHJcbiAgICAgICAgICA8aW1nIFtzcmNdPVwiZmlsZS51cmxcIiAobG9hZCk9XCJpbWdMb2FkKCRldmVudCwgZmlsZSlcIiAoZXJyb3IpPVwiaW1nRXJyb3IoJGV2ZW50LCBmaWxlKVwiIC8+XHJcbiAgICAgICAgICA8eC1pY29uIHR5cGU9XCJmdG8taW1hZ2VcIj48L3gtaWNvbj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsZS5zdGF0ZSA9PSAndXBsb2FkaW5nJ1wiPnt7IGZpbGUucGVyY2VudCB9fSU8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIngtdXBsb2FkLWltZy1idG5zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwieC11cGxvYWQtaW1nLWJ0bnMtaW5uZXJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZmlsZS5zdGF0ZVwiPlxyXG4gICAgICAgICAgICAgIDx4LWljb24gY2xhc3M9XCJ4LXVwbG9hZC1zdGF0ZVwiICpuZ1N3aXRjaENhc2U9XCIncmVhZHknXCIgdHlwZT1cImZ0by1jbG9ja1wiPjwveC1pY29uPlxyXG4gICAgICAgICAgICAgIDx4LWljb24gY2xhc3M9XCJ4LXVwbG9hZC1zdGF0ZSBlcnJvclwiICpuZ1N3aXRjaENhc2U9XCInZXJyb3InXCIgdHlwZT1cImZ0by1pbmZvXCI+PC94LWljb24+XHJcbiAgICAgICAgICAgICAgPGEgW2hyZWZdPVwiZmlsZS51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiAqbmdTd2l0Y2hDYXNlPVwiJ3N1Y2Nlc3MnXCI+XHJcbiAgICAgICAgICAgICAgICA8eC1pY29uIHR5cGU9XCJmdG8tZXllXCI+PC94LWljb24+XHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPHgtaWNvbiAqbmdJZj1cImltZ0N1dCAmJiBmaWxlLnN0YXRlID09PSAnc3VjY2VzcydcIiB0eXBlPVwiZnRvLWNyb3BcIiAoY2xpY2spPVwib25JbWdDdXQoZmlsZSwgaSlcIj48L3gtaWNvbj5cclxuICAgICAgICAgICAgPHgtaWNvbiAqbmdJZj1cImZpbGUuc3RhdGUgIT09ICd1cGxvYWRpbmcnXCIgdHlwZT1cImZ0by10cmFzaC0yXCIgKGNsaWNrKT1cInJlbW92ZShmaWxlLCBpKVwiPjwveC1pY29uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG4iXX0=
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL3VwbG9hZC91cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvdXBsb2FkL3VwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsYUFBYSxFQUFFLFdBQVcsRUFBYSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pGLE9BQU8sRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUl2QixTQUFTLEVBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBZSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9CLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7O0FBVXZELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxlQUFlO0lBd0JuRCxZQUNTLFFBQW1CLEVBQ25CLFVBQXNCLEVBQ3RCLElBQWdCLEVBQ2hCLEdBQXNCLEVBQ3RCLGFBQTZCLEVBQzdCLGdCQUFrQyxFQUNsQyxJQUFrQjtRQUV6QixLQUFLLEVBQUUsQ0FBQztRQVJELGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGtCQUFh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SUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsT0FBTyxDQUFDLElBQWlCO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7Z0lBek5VLGdCQUFnQjtvSEFBaEIsZ0JBQWdCLG1DQUZoQixDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLDZKQzFCL0MsaS9GQWlEQTsyRkRyQmEsZ0JBQWdCO2tCQVI1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxHQUFHLGFBQWEsRUFBRTtvQkFDNUIsV0FBVyxFQUFFLHlCQUF5QjtvQkFDdEMsU0FBUyxFQUFFLENBQUMseUJBQXlCLENBQUM7b0JBQ3RDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsU0FBUyxFQUFFLENBQUMsY0FBYyxrQkFBa0IsQ0FBQztpQkFDOUM7eVFBRXNDLElBQUk7c0JBQXhDLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBSZXF1ZXN0LCBIdHRwRXZlbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFJlbmRlcmVyMixcclxuICBFbGVtZW50UmVmLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFhVcGxvYWRQcmVmaXgsIFhVcGxvYWROb2RlLCBYVXBsb2FkUHJvcGVydHksIFhVcGxvYWRQb3J0YWxQcmVmaXggfSBmcm9tICcuL3VwbG9hZC5wcm9wZXJ0eSc7XHJcbmltcG9ydCB7IFhJc1RlbXBsYXRlUmVmIH0gZnJvbSAnQG5nLW5lc3QvdWkvY29yZSc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFhJMThuU2VydmljZSwgWEkxOG5VcGxvYWQgfSBmcm9tICdAbmctbmVzdC91aS9pMThuJztcclxuaW1wb3J0IHsgWFBvcnRhbE92ZXJsYXlSZWYsIFhQb3J0YWxTZXJ2aWNlIH0gZnJvbSAnQG5nLW5lc3QvdWkvcG9ydGFsJztcclxuaW1wb3J0IHsgWFVwbG9hZFBvcnRhbENvbXBvbmVudCB9IGZyb20gJy4vdXBsb2FkLXBvcnRhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBYVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0BuZy1uZXN0L3VpL2Jhc2UtZm9ybSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogYCR7WFVwbG9hZFByZWZpeH1gLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbWFZhbHVlQWNjZXNzb3IoWFVwbG9hZENvbXBvbmVudCldXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBYVXBsb2FkQ29tcG9uZW50IGV4dGVuZHMgWFVwbG9hZFByb3BlcnR5IHtcclxuICBAVmlld0NoaWxkKCdmaWxlJywgeyBzdGF0aWM6IHRydWUgfSkgZmlsZSE6IEVsZW1lbnRSZWY7XHJcbiAgZmlsZXM6IFhVcGxvYWROb2RlW10gPSBbXTtcclxuICBzaG93VXBsb2FkID0gZmFsc2U7XHJcbiAgdXBsb2FkTm9kZXM6IFhVcGxvYWROb2RlW10gPSBbXTtcclxuICBsb2NhbGU6IFhJMThuVXBsb2FkID0ge307XHJcbiAgcG9ydGFsITogWFBvcnRhbE92ZXJsYXlSZWY8WFVwbG9hZFBvcnRhbENvbXBvbmVudD47XHJcblxyXG4gIGdldCBnZXRUZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGV4dCB8fCB0aGlzLmxvY2FsZS51cGxvYWRUZXh0O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzVGVtcGxhdGVUZXh0KCkge1xyXG4gICAgcmV0dXJuIFhJc1RlbXBsYXRlUmVmKHRoaXMuZ2V0VGV4dCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBYVXBsb2FkTm9kZVtdKSB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLnNldEZpbGVzKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwdWJsaWMgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHVibGljIHBvcnRhbFNlcnZpY2U6IFhQb3J0YWxTZXJ2aWNlLFxyXG4gICAgcHVibGljIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwdWJsaWMgaTE4bjogWEkxOG5TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmkxOG4ubG9jYWxlQ2hhbmdlXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgoeCkgPT4geC51cGxvYWQgYXMgWEkxOG5VcGxvYWQpLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl91blN1YmplY3QpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9jYWxlID0geDtcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy50eXBlID09PSAnaW1nJykgdGhpcy5hY2NlcHQgPSAnaW1hZ2UvKic7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdG9yeSgpIHtcclxuICAgIHRoaXMuX3VuU3ViamVjdC5uZXh0KCk7XHJcbiAgICB0aGlzLl91blN1YmplY3QudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHNldEZpbGVzKCkge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy50eXBlICE9PSAnaW1nJykgcmV0dXJuO1xyXG4gICAgdGhpcy5maWxlcyA9IHRoaXMudmFsdWUubWFwKCh4KSA9PiB7XHJcbiAgICAgIGlmICgheC5zdGF0ZSkgeC5zdGF0ZSA9ICdzdWNjZXNzJztcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoYW5nZShldmVudDogRXZlbnQpIHtcclxuICAgIGxldCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3VuZGVmaW5lZCcgfHwgaW5wdXQuZmlsZXM/Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgbGV0IGZpbGVzOiBYVXBsb2FkTm9kZVtdID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IChpbnB1dC5maWxlcyBhcyBGaWxlTGlzdCkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGZpbGU6IFhVcGxvYWROb2RlID0gKGlucHV0LmZpbGVzIGFzIEZpbGVMaXN0KS5pdGVtKGkpIGFzIFhVcGxvYWROb2RlO1xyXG4gICAgICBmaWxlLnN0YXRlID0gJ3JlYWR5JztcclxuICAgICAgZmlsZXMgPSBbLi4uZmlsZXMsIGZpbGVdO1xyXG4gICAgfVxyXG4gICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHRoaXMuc2hvd1VwbG9hZCA9IHRydWU7XHJcbiAgICB0aGlzLmZpbGVzID0gZmlsZXM7XHJcbiAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICB0aGlzLnVwbG9hZGluZygpO1xyXG4gICAgaW5wdXQudmFsdWUgPSAnJztcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZShmaWxlOiBYVXBsb2FkTm9kZSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5maWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoID09PSAwKSB0aGlzLmZpbGUubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5zaG93VXBsb2FkID0gdGhpcy5maWxlcy5maW5kKCh4KSA9PiB4LnN0YXRlID09PSAncmVhZHknKSAhPSBudWxsO1xyXG4gICAgdGhpcy5yZW1vdmVDbGljay5lbWl0KHsgZmlsZTogZmlsZSwgaW5kZXg6IGluZGV4IH0pO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkQ2xpY2soKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5maWxlLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIHVwbG9hZGluZygpIHtcclxuICAgIGlmICghdGhpcy5hY3Rpb24pIHJldHVybjtcclxuICAgIGxldCByZWFkeUZpbGVzID0gdGhpcy5maWxlcy5maWx0ZXIoKHgpID0+IHguc3RhdGUgPT09ICdyZWFkeScpO1xyXG4gICAgcmVhZHlGaWxlcy5mb3JFYWNoKCh4KSA9PiB7XHJcbiAgICAgIHRoaXMudXBsb2FkRmlsZSh4KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkRmlsZShmaWxlOiBYVXBsb2FkTm9kZSwgaW5kZXggPSAtMSkge1xyXG4gICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcclxuICAgIGNvbnN0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdCgnUE9TVCcsIHRoaXMuYWN0aW9uIGFzIHN0cmluZywgZm9ybURhdGEsIHtcclxuICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmh0dHBcclxuICAgICAgLnJlcXVlc3QocmVxKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKGV2ZW50KSA9PlxyXG4gICAgICAgICAgdGhpcy5nZXRFdmVudE1lc3NhZ2UoZXZlbnQsIGZpbGUsIChib2R5OiBCbG9iUGFydCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgYmxvYiA9IG5ldyBCbG9iKFtib2R5XSk7XHJcbiAgICAgICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChibG9iLCAndXRmLTgnKTtcclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICBmaWxlLnVybCA9IEpTT04ucGFyc2UocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpWzBdO1xyXG4gICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSBmaWxlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlc1tpbmRleF0gPSBmaWxlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd1VwbG9hZCA9IHRoaXMuZmlsZXMuZmluZCgoeSkgPT4geS5zdGF0ZSA9PT0gJ3JlYWR5JykgIT0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIGZpbGUuc3RhdGUgPSAnZXJyb3InO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGdldEV2ZW50TWVzc2FnZShldmVudDogSHR0cEV2ZW50PGFueT4sIGZpbGU6IFhVcGxvYWROb2RlLCBmdW46IEZ1bmN0aW9uKSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcclxuICAgICAgY2FzZSBIdHRwRXZlbnRUeXBlLlNlbnQ6XHJcbiAgICAgICAgZmlsZS5zdGF0ZSA9ICdyZWFkeSc7XHJcbiAgICAgICAgcmV0dXJuIGDlvIDlp4vkuIrkvKDmlofku7ZgO1xyXG4gICAgICBjYXNlIEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3M6XHJcbiAgICAgICAgZmlsZS5zdGF0ZSA9ICd1cGxvYWRpbmcnO1xyXG4gICAgICAgIGlmIChldmVudC50b3RhbCkgZmlsZS5wZXJjZW50ID0gTWF0aC5yb3VuZCgoMTAwICogZXZlbnQubG9hZGVkKSAvIGV2ZW50LnRvdGFsKTtcclxuICAgICAgICByZXR1cm4gYOS4iuS8oOS4rWA7XHJcbiAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcclxuICAgICAgICBmaWxlLnN0YXRlID0gJ3N1Y2Nlc3MnO1xyXG4gICAgICAgIGZ1bihldmVudC5ib2R5KTtcclxuICAgICAgICByZXR1cm4gYOaWh+S7tuS4iuS8oOWujOavlWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB0cmFja0J5SXRlbShfaW5kZXg6IG51bWJlciwgaXRlbTogWFVwbG9hZE5vZGUpIHtcclxuICAgIHJldHVybiBgJHtpdGVtLm5hbWV9LSR7aXRlbS5sYXN0TW9kaWZpZWR9YDtcclxuICB9XHJcblxyXG4gIG9uSW1nQ3V0KGZpbGU6IFhVcGxvYWROb2RlLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnBvcnRhbCA9IHRoaXMucG9ydGFsU2VydmljZS5hdHRhY2goe1xyXG4gICAgICBjb250ZW50OiBYVXBsb2FkUG9ydGFsQ29tcG9uZW50LFxyXG4gICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgIG92ZXJsYXlDb25maWc6IHtcclxuICAgICAgICBwYW5lbENsYXNzOiBbWFVwbG9hZFBvcnRhbFByZWZpeF0sXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5wb3J0YWxTZXJ2aWNlLnNldFBsYWNlKCdjZW50ZXInKVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2V0SW5zdGFuY2UoZmlsZSwgaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5zdGFuY2UoZmlsZTogWFVwbG9hZE5vZGUsIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGxldCBjb21wb25lbnRSZWYgPSB0aGlzLnBvcnRhbD8uY29tcG9uZW50UmVmO1xyXG4gICAgaWYgKCFjb21wb25lbnRSZWYpIHJldHVybjtcclxuICAgIE9iamVjdC5hc3NpZ24oY29tcG9uZW50UmVmLmluc3RhbmNlLCB7XHJcbiAgICAgIGZpbGU6IGZpbGUsXHJcbiAgICAgIGNsb3NlUG9ydGFsOiAoKSA9PiB0aGlzLmNsb3NlUG9ydGFsKCksXHJcbiAgICAgIGRlc3Ryb3lQb3J0YWw6ICgpID0+IHRoaXMuZGVzdHJveVBvcnRhbCgpLFxyXG4gICAgICBzdXJlUG9ydGFsOiAoYmxvYjogQmxvYikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZsID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlLm5hbWUsIHsgdHlwZTogYmxvYi50eXBlIH0pIGFzIFhVcGxvYWROb2RlO1xyXG4gICAgICAgIGZsLnN0YXRlID0gJ3JlYWR5JztcclxuICAgICAgICB0aGlzLnVwbG9hZEZpbGUoZmwsIGluZGV4KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcG9ydGFsQXR0YWNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVBvcnRhbCgpIHtcclxuICAgIGlmICh0aGlzLnBvcnRhbEF0dGFjaGVkKCkpIHtcclxuICAgICAgdGhpcy5wb3J0YWw/Lm92ZXJsYXlSZWY/LmRldGFjaCgpO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZGVzdHJveVBvcnRhbCgpIHtcclxuICAgIHRoaXMucG9ydGFsPy5vdmVybGF5UmVmPy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICBpbWdFcnJvcihldmVudDogRXJyb3JFdmVudCwgZmlsZTogWFVwbG9hZE5vZGUpIHtcclxuICAgIGZpbGUuc3RhdGUgPSAnZXJyb3InO1xyXG4gICAgY29uc29sZS5lcnJvcihldmVudC5lcnJvcik7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBpbWdMb2FkKGZpbGU6IFhVcGxvYWROb2RlKSB7XHJcbiAgICBmaWxlLnN0YXRlID0gJ3N1Y2Nlc3MnO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICN1cGxvYWQgY2xhc3M9XCJ4LXVwbG9hZCB4LXVwbG9hZC17eyB0eXBlIH19XCIgW2NsYXNzLngtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICA8aW5wdXQgdHlwZT1cImZpbGVcIiAjZmlsZSAoY2hhbmdlKT1cImNoYW5nZSgkZXZlbnQpXCIgW2F0dHIuYWNjZXB0XT1cImFjY2VwdFwiIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIC8+XHJcbiAgPGRpdiBjbGFzcz1cIngtdXBsb2FkLWJ1dHRvbnNcIiBbY2xhc3MueC11cGxvYWQtYnV0dG9ucy10ZW1wbGF0ZV09XCJpc1RlbXBsYXRlVGV4dFwiIChjbGljayk9XCJ1cGxvYWRDbGljaygpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICp4T3V0bGV0PVwiZ2V0VGV4dFwiPlxyXG4gICAgICA8eC1idXR0b24gaWNvbj1cImZ0by11cGxvYWRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiB0eXBlPVwicHJpbWFyeVwiPnt7IGdldFRleHQgfX08L3gtYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHlwZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xpc3QnXCI+XHJcbiAgICAgIDx1bCBjbGFzcz1cIngtdXBsb2FkLWZpbGVzXCI+XHJcbiAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBmaWxlIG9mIGZpbGVzOyBpbmRleCBhcyBpOyB0cmFja0J5OiB0cmFja0J5SXRlbVwiPlxyXG4gICAgICAgICAgPGEgW2hyZWZdPVwiZmlsZS51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbdGl0bGVdPVwiZmlsZS5uYW1lXCI+XHJcbiAgICAgICAgICAgIDx4LWljb24gdHlwZT1cImZ0by1maWxlLXRleHRcIj48L3gtaWNvbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ4LXVwbG9hZC1maWxlbmFtZVwiPnt7IGZpbGUubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZpbGUuc3RhdGVcIj5cclxuICAgICAgICAgICAgPHgtaWNvbiBjbGFzcz1cIngtdXBsb2FkLXN0YXRlXCIgKm5nU3dpdGNoQ2FzZT1cIidyZWFkeSdcIiB0eXBlPVwiZnRvLWNsb2NrXCI+PC94LWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwieC11cGxvYWQtcGVyY2VudFwiICpuZ1N3aXRjaENhc2U9XCIndXBsb2FkaW5nJ1wiPnt7IGZpbGUucGVyY2VudCB9fSU8L3NwYW4+XHJcbiAgICAgICAgICAgIDx4LWljb24gY2xhc3M9XCJ4LXVwbG9hZC1zdGF0ZSBzdWNjZXNzXCIgKm5nU3dpdGNoQ2FzZT1cIidzdWNjZXNzJ1wiIHR5cGU9XCJmdG8tY2hlY2tcIj48L3gtaWNvbj5cclxuICAgICAgICAgICAgPHgtaWNvbiBjbGFzcz1cIngtdXBsb2FkLXN0YXRlIGVycm9yXCIgKm5nU3dpdGNoQ2FzZT1cIidlcnJvcidcIiB0eXBlPVwiZnRvLWluZm9cIj48L3gtaWNvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPHgtYnV0dG9uICpuZ0lmPVwiZmlsZS5zdGF0ZSAhPT0gJ3VwbG9hZGluZydcIiBpY29uPVwiZnRvLXhcIiAoY2xpY2spPVwicmVtb3ZlKGZpbGUsIGkpXCIgb25seUljb24gY2xvc2FibGU+PC94LWJ1dHRvbj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW1nJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwieC11cGxvYWQtaW1nLWl0ZW0ge3sgZmlsZS5zdGF0ZSB9fVwiICpuZ0Zvcj1cImxldCBmaWxlIG9mIGZpbGVzOyBpbmRleCBhcyBpOyB0cmFja0J5OiB0cmFja0J5SXRlbVwiIFt0aXRsZV09XCJmaWxlLm5hbWVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwieC11cGxvYWQtaW1nLWlubmVyXCI+XHJcbiAgICAgICAgICA8aW1nIFtzcmNdPVwiZmlsZS51cmxcIiAobG9hZCk9XCJpbWdMb2FkKGZpbGUpXCIgKGVycm9yKT1cImltZ0Vycm9yKCRldmVudCwgZmlsZSlcIiAvPlxyXG4gICAgICAgICAgPHgtaWNvbiB0eXBlPVwiZnRvLWltYWdlXCI+PC94LWljb24+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImZpbGUuc3RhdGUgPT0gJ3VwbG9hZGluZydcIj57eyBmaWxlLnBlcmNlbnQgfX0lPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ4LXVwbG9hZC1pbWctYnRuc1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIngtdXBsb2FkLWltZy1idG5zLWlubmVyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZpbGUuc3RhdGVcIj5cclxuICAgICAgICAgICAgICA8eC1pY29uIGNsYXNzPVwieC11cGxvYWQtc3RhdGVcIiAqbmdTd2l0Y2hDYXNlPVwiJ3JlYWR5J1wiIHR5cGU9XCJmdG8tY2xvY2tcIj48L3gtaWNvbj5cclxuICAgICAgICAgICAgICA8eC1pY29uIGNsYXNzPVwieC11cGxvYWQtc3RhdGUgZXJyb3JcIiAqbmdTd2l0Y2hDYXNlPVwiJ2Vycm9yJ1wiIHR5cGU9XCJmdG8taW5mb1wiPjwveC1pY29uPlxyXG4gICAgICAgICAgICAgIDxhIFtocmVmXT1cImZpbGUudXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgKm5nU3dpdGNoQ2FzZT1cIidzdWNjZXNzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHgtaWNvbiB0eXBlPVwiZnRvLWV5ZVwiPjwveC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDx4LWljb24gKm5nSWY9XCJpbWdDdXQgJiYgZmlsZS5zdGF0ZSA9PT0gJ3N1Y2Nlc3MnXCIgdHlwZT1cImZ0by1jcm9wXCIgKGNsaWNrKT1cIm9uSW1nQ3V0KGZpbGUsIGkpXCI+PC94LWljb24+XHJcbiAgICAgICAgICAgIDx4LWljb24gKm5nSWY9XCJmaWxlLnN0YXRlICE9PSAndXBsb2FkaW5nJ1wiIHR5cGU9XCJmdG8tdHJhc2gtMlwiIChjbGljayk9XCJyZW1vdmUoZmlsZSwgaSlcIj48L3gtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-alert.js","sources":["../../../../lib/ng-nest/ui/alert/alert.property.ts","../../../../lib/ng-nest/ui/alert/alert.component.ts","../../../../lib/ng-nest/ui/alert/alert.component.html","../../../../lib/ng-nest/ui/alert/alert.module.ts","../../../../lib/ng-nest/ui/alert/ng-nest-ui-alert.ts"],"sourcesContent":["import { XStatus, XTemplate, XEffect, XProperty, XInputBoolean, XInputNumber, XBoolean, XNumber, XWithConfig } from '@ng-nest/ui/core';\r\nimport { Input, EventEmitter, Output, Component, ElementRef } from '@angular/core';\r\n\r\n/**\r\n * Alert\r\n * @selector x-alert\r\n * @decorator component\r\n */\r\nexport const XAlertPrefix = 'x-alert';\r\nconst X_CONFIG_NAME = 'alert';\r\n\r\n/**\r\n * Alert Property\r\n */\r\n@Component({ template: '' })\r\nexport class XAlertProperty extends XProperty {\r\n /**\r\n * @zh_CN 隐藏\r\n * @en_US Hide\r\n */\r\n @Input() @XInputBoolean() hide?: XBoolean;\r\n /**\r\n * @zh_CN 标题\r\n * @en_US Title\r\n */\r\n @Input() title?: XTemplate;\r\n /**\r\n * @zh_CN 内容\r\n * @en_US Content\r\n */\r\n @Input() content?: XTemplate;\r\n /**\r\n * @zh_CN 类型\r\n * @en_US Alert type\r\n */\r\n @Input() type?: XAlertType = 'info';\r\n /**\r\n * @zh_CN 主题\r\n * @en_US Theme\r\n */\r\n @Input() @XWithConfig<XEffect>(X_CONFIG_NAME, 'light') effect?: XEffect;\r\n /**\r\n * @zh_CN 隐藏关闭按钮\r\n * @en_US Hide close button\r\n */\r\n @Input() @XWithConfig<XBoolean>(X_CONFIG_NAME) @XInputBoolean() hideClose?: XBoolean;\r\n /**\r\n * @zh_CN 使用文本关闭按钮\r\n * @en_US Use the text to close button\r\n */\r\n @Input() closeText?: string;\r\n /**\r\n * @zh_CN 显示图标\r\n * @en_US Show icon\r\n */\r\n @Input() @XWithConfig<XBoolean>(X_CONFIG_NAME) @XInputBoolean() showIcon?: XBoolean;\r\n /**\r\n * @zh_CN 禁用动画\r\n * @en_US Disable animation\r\n */\r\n @Input() @XWithConfig<XBoolean>(X_CONFIG_NAME) @XInputBoolean() disabledAnimation?: XBoolean;\r\n /**\r\n * @zh_CN 延迟关闭,默认 0 表示不关闭\r\n * @en_US Delay close, the default value of 0 means do not close\r\n */\r\n @Input() @XWithConfig<XNumber>(X_CONFIG_NAME, 0) @XInputNumber() duration?: XNumber;\r\n /**\r\n * @zh_CN 手动处理关闭事件\r\n * @en_US Manually handle close events\r\n */\r\n @Input() @XInputBoolean() manual?: XBoolean;\r\n /**\r\n * @zh_CN 拖动提示框\r\n * @en_US Drag dialog\r\n */\r\n @Input() @XWithConfig<XBoolean>(X_CONFIG_NAME, false) @XInputBoolean() draggable?: XBoolean;\r\n /**\r\n * @zh_CN 拖动范围限制,父节点选择器或者对象\r\n * @en_US Drag dialog\r\n */\r\n @Input() dragBoundary!: string | ElementRef<HTMLElement> | HTMLElement;\r\n /**\r\n * @zh_CN 关闭的事件\r\n * @en_US Closed events\r\n */\r\n @Output() close = new EventEmitter();\r\n}\r\n\r\n/**\r\n * Alert Option\r\n * @undocument true\r\n */\r\nexport interface XAlertOption {\r\n /**\r\n * 隐藏\r\n */\r\n hide?: boolean;\r\n /**\r\n * 标题\r\n */\r\n title?: XTemplate;\r\n /**\r\n * 内容\r\n */\r\n content?: XTemplate;\r\n /**\r\n * 类型\r\n */\r\n type?: XAlertType;\r\n /**\r\n * 主题\r\n */\r\n effect?: XEffect;\r\n /**\r\n * 隐藏关闭按钮\r\n */\r\n hideClose?: boolean;\r\n /**\r\n * 关闭按钮文字替换\r\n */\r\n closeText?: string;\r\n /**\r\n * 显示图标\r\n */\r\n showIcon?: boolean;\r\n /**\r\n * 禁用动画\r\n */\r\n disabledAnimation?: boolean;\r\n /**\r\n * 延迟关闭,默认 0 表示不关闭\r\n */\r\n duration?: number;\r\n /**\r\n * 手动处理关闭事件\r\n */\r\n manual?: boolean;\r\n}\r\n\r\n/**\r\n * @zh_CN 类型\r\n * @en_US Type\r\n * @value \"success\"\r\n * @value \"info\"\r\n * @value \"warning\"\r\n * @value \"error\"\r\n */\r\nexport type XAlertType = XStatus;\r\n","import { Component, OnInit, ViewEncapsulation, ChangeDetectorRef, ChangeDetectionStrategy, OnDestroy } from '@angular/core';\r\nimport { XAlertPrefix, XAlertProperty } from './alert.property';\r\nimport { XFadeAnimation, XIsEmpty, XConfigService } from '@ng-nest/ui/core';\r\nimport { of, Subject } from 'rxjs';\r\nimport { delay, takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: `${XAlertPrefix}`,\r\n templateUrl: './alert.component.html',\r\n styleUrls: ['./alert.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [XFadeAnimation]\r\n})\r\nexport class XAlertComponent extends XAlertProperty implements OnInit, OnDestroy {\r\n private _unSubject = new Subject();\r\n\r\n constructor(public cdr: ChangeDetectorRef, public configService: XConfigService) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.setClassMap();\r\n this.setDuration();\r\n }\r\n\r\n ngOnDestroy() {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n setClassMap() {\r\n this.classMap = {\r\n [`${XAlertPrefix}-${this.type}`]: !XIsEmpty(this.type),\r\n [`x-${this.effect}`]: !XIsEmpty(this.effect),\r\n [`${XAlertPrefix}-icon-medium`]: !XIsEmpty(this.title) && !XIsEmpty(this.content) && !XIsEmpty(this.showIcon),\r\n [`${XAlertPrefix}-draggable`]: Boolean(this.draggable)\r\n };\r\n }\r\n\r\n setDuration() {\r\n if (this.duration) {\r\n of(true)\r\n .pipe(delay(Number(this.duration)), takeUntil(this._unSubject))\r\n .subscribe(() => {\r\n this.onClose();\r\n });\r\n }\r\n }\r\n\r\n onClose() {\r\n if (this.manual) {\r\n this.close?.emit();\r\n } else {\r\n this.hide = true;\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n onCloseAnimationDone() {\r\n if (this.hide) {\r\n this.close?.emit();\r\n }\r\n }\r\n}\r\n","<div\r\n #alert\r\n class=\"x-alert\"\r\n cdkDrag\r\n [cdkDragDisabled]=\"!draggable\"\r\n [cdkDragBoundary]=\"dragBoundary\"\r\n [ngClass]=\"classMap\"\r\n *ngIf=\"!hide\"\r\n @x-fade-animation\r\n [@.disabled]=\"disabledAnimation\"\r\n (@x-fade-animation.done)=\"onCloseAnimationDone()\"\r\n>\r\n <ng-container *ngIf=\"showIcon\">\r\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\r\n </ng-container>\r\n <ng-template #iconTpl>\r\n <ng-container [ngSwitch]=\"type\">\r\n <x-icon class=\"x-alert-icon\" *ngSwitchCase=\"'success'\" type=\"adf-check-circle\"></x-icon>\r\n <x-icon class=\"x-alert-icon\" *ngSwitchCase=\"'info'\" type=\"adf-info-circle\"></x-icon>\r\n <x-icon class=\"x-alert-icon\" *ngSwitchCase=\"'warning'\" type=\"adf-exclamation-circle\"></x-icon>\r\n <x-icon class=\"x-alert-icon\" *ngSwitchCase=\"'error'\" type=\"adf-close-circle\"></x-icon>\r\n </ng-container>\r\n </ng-template>\r\n <div class=\"x-alert-inner\">\r\n <span class=\"x-alert-title\" cdkDragHandle [class.x-bold]=\"title && content\">\r\n <ng-container *xOutlet=\"title; context: { $iconTpl: iconTpl }\">{{ title }}</ng-container>\r\n </span>\r\n <div class=\"x-alert-content\" *ngIf=\"content\">\r\n <ng-container *xOutlet=\"content; context: { $iconTpl: iconTpl }\">{{ content }}</ng-container>\r\n </div>\r\n <x-button\r\n *ngIf=\"!hideClose\"\r\n class=\"x-alert-close\"\r\n size=\"small\"\r\n [icon]=\"!closeText ? 'fto-x' : ''\"\r\n [onlyIcon]=\"!closeText\"\r\n [type]=\"closeText ? 'text' : 'initial'\"\r\n (click)=\"onClose()\"\r\n closable\r\n >{{ closeText }}</x-button\r\n >\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { XAlertComponent } from './alert.component';\r\nimport { XIconModule } from '@ng-nest/ui/icon';\r\nimport { XOutletModule } from '@ng-nest/ui/outlet';\r\nimport { XButtonModule } from '@ng-nest/ui/button';\r\nimport { XAlertProperty } from './alert.property';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\n\r\n@NgModule({\r\n declarations: [XAlertComponent, XAlertProperty],\r\n exports: [XAlertComponent],\r\n imports: [CommonModule, DragDropModule, XIconModule, XButtonModule, XOutletModule]\r\n})\r\nexport class XAlertModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAGA;;;;;MAKa,YAAY,GAAG,UAAU;AACtC,MAAM,aAAa,GAAG,OAAO,CAAC;AAE9B;;;MAIa,cAAe,SAAQ,SAAS;IAD7C;;;;;;QAqBW,SAAI,GAAgB,MAAM,CAAC;;;;;QAkD1B,UAAK,GAAG,IAAI,YAAY,EAAE,CAAC;KACtC;;8HAvEY,cAAc;kHAAd,cAAc,kZADJ,EAAE;AAMG;IAAhB,aAAa,EAAE;4CAAiB;AAoBa;IAA7C,WAAW,CAAU,aAAa,EAAE,OAAO,CAAC;8CAAkB;AAKR;IAAtD,WAAW,CAAW,aAAa,CAAC;IAAE,aAAa,EAAE;iDAAsB;AAUrB;IAAtD,WAAW,CAAW,aAAa,CAAC;IAAE,aAAa,EAAE;gDAAqB;AAKpB;IAAtD,WAAW,CAAW,aAAa,CAAC;IAAE,aAAa,EAAE;yDAA8B;AAK5B;IAAvD,WAAW,CAAU,aAAa,EAAE,CAAC,CAAC;IAAE,YAAY,EAAE;gDAAoB;AAK1D;IAAhB,aAAa,EAAE;8CAAmB;AAK2B;IAA7D,WAAW,CAAW,aAAa,EAAE,KAAK,CAAC;IAAE,aAAa,EAAE;iDAAsB;2FA5DjF,cAAc;kBAD1B,SAAS;mBAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;8BAMC,IAAI;sBAA7B,KAAK;gBAKG,KAAK;sBAAb,KAAK;gBAKG,OAAO;sBAAf,KAAK;gBAKG,IAAI;sBAAZ,KAAK;gBAKiD,MAAM;sBAA5D,KAAK;gBAK0D,SAAS;sBAAxE,KAAK;gBAKG,SAAS;sBAAjB,KAAK;gBAK0D,QAAQ;sBAAvE,KAAK;gBAK0D,iBAAiB;sBAAhF,KAAK;gBAK2D,QAAQ;sBAAxE,KAAK;gBAKoB,MAAM;sBAA/B,KAAK;gBAKiE,SAAS;sBAA/E,KAAK;gBAKG,YAAY;sBAApB,KAAK;gBAKI,KAAK;sBAAd,MAAM;;;MCvEI,eAAgB,SAAQ,cAAc;IAGjD,YAAmB,GAAsB,EAAS,aAA6B;QAC7E,KAAK,EAAE,CAAC;QADS,QAAG,GAAH,GAAG,CAAmB;QAAS,kBAAa,GAAb,aAAa,CAAgB;QAFvE,eAAU,GAAG,IAAI,OAAO,EAAE,CAAC;KAIlC;IAED,QAAQ;QACN,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAED,WAAW;QACT,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;KAC/B;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,GAAG;YACd,CAAC,GAAG,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACtD,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAC5C,CAAC,GAAG,YAAY,cAAc,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC7G,CAAC,GAAG,YAAY,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;SACvD,CAAC;KACH;IAED,WAAW;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,EAAE,CAAC,IAAI,CAAC;iBACL,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBAC9D,SAAS,CAAC;gBACT,IAAI,CAAC,OAAO,EAAE,CAAC;aAChB,CAAC,CAAC;SACN;KACF;IAED,OAAO;;QACL,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,MAAA,IAAI,CAAC,KAAK,0CAAE,IAAI,EAAE,CAAC;SACpB;aAAM;YACL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B;KACF;IAED,oBAAoB;;QAClB,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,MAAA,IAAI,CAAC,KAAK,0CAAE,IAAI,EAAE,CAAC;SACpB;KACF;;+HAjDU,eAAe;mHAAf,eAAe,sECd5B,qsDA2CA,4hMD/Bc,CAAC,cAAc,CAAC;2FAEjB,eAAe;kBAR3B,SAAS;mBAAC;oBACT,QAAQ,EAAE,GAAG,YAAY,EAAE;oBAC3B,WAAW,EAAE,wBAAwB;oBACrC,SAAS,EAAE,CAAC,wBAAwB,CAAC;oBACrC,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,UAAU,EAAE,CAAC,cAAc,CAAC;iBAC7B;;;MECY,YAAY;;4HAAZ,YAAY;6HAAZ,YAAY,iBAJR,eAAe,EAAE,cAAc,aAEpC,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,aADvE,eAAe;6HAGd,YAAY,YAFd,CAAC,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC;2FAEvE,YAAY;kBALxB,QAAQ;mBAAC;oBACR,YAAY,EAAE,CAAC,eAAe,EAAE,cAAc,CAAC;oBAC/C,OAAO,EAAE,CAAC,eAAe,CAAC;oBAC1B,OAAO,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC;iBACnF;;;ACbD;;;;;;"}
1
+ {"version":3,"file":"ng-nest-ui-alert.js","sources":["../../../../lib/ng-nest/ui/alert/alert.property.ts","../../../../lib/ng-nest/ui/alert/alert.component.ts","../../../../lib/ng-nest/ui/alert/alert.component.html","../../../../lib/ng-nest/ui/alert/alert.module.ts","../../../../lib/ng-nest/ui/alert/ng-nest-ui-alert.ts"],"sourcesContent":["import { XStatus, XTemplate, XEffect, XProperty, XInputBoolean, XInputNumber, XBoolean, XNumber, XWithConfig } from '@ng-nest/ui/core';\r\nimport { Input, EventEmitter, Output, Component, ElementRef } from '@angular/core';\r\n\r\n/**\r\n * Alert\r\n * @selector x-alert\r\n * @decorator component\r\n */\r\nexport const XAlertPrefix = 'x-alert';\r\nconst X_CONFIG_NAME = 'alert';\r\n\r\n/**\r\n * Alert Property\r\n */\r\n@Component({ template: '' })\r\nexport class XAlertProperty extends XProperty {\r\n /**\r\n * @zh_CN 隐藏\r\n * @en_US Hide\r\n */\r\n @Input() @XInputBoolean() hide?: XBoolean;\r\n /**\r\n * @zh_CN 标题\r\n * @en_US Title\r\n */\r\n @Input() title?: XTemplate;\r\n /**\r\n * @zh_CN 内容\r\n * @en_US Content\r\n */\r\n @Input() content?: XTemplate;\r\n /**\r\n * @zh_CN 类型\r\n * @en_US Alert type\r\n */\r\n @Input() type?: XAlertType = 'info';\r\n /**\r\n * @zh_CN 主题\r\n * @en_US Theme\r\n */\r\n @Input() @XWithConfig<XEffect>(X_CONFIG_NAME, 'light') effect?: XEffect;\r\n /**\r\n * @zh_CN 隐藏关闭按钮\r\n * @en_US Hide close button\r\n */\r\n @Input() @XWithConfig<XBoolean>(X_CONFIG_NAME) @XInputBoolean() hideClose?: XBoolean;\r\n /**\r\n * @zh_CN 使用文本关闭按钮\r\n * @en_US Use the text to close button\r\n */\r\n @Input() closeText?: string;\r\n /**\r\n * @zh_CN 显示图标\r\n * @en_US Show icon\r\n */\r\n @Input() @XWithConfig<XBoolean>(X_CONFIG_NAME) @XInputBoolean() showIcon?: XBoolean;\r\n /**\r\n * @zh_CN 禁用动画\r\n * @en_US Disable animation\r\n */\r\n @Input() @XWithConfig<XBoolean>(X_CONFIG_NAME) @XInputBoolean() disabledAnimation?: XBoolean;\r\n /**\r\n * @zh_CN 延迟关闭,默认 0 表示不关闭\r\n * @en_US Delay close, the default value of 0 means do not close\r\n */\r\n @Input() @XWithConfig<XNumber>(X_CONFIG_NAME, 0) @XInputNumber() duration?: XNumber;\r\n /**\r\n * @zh_CN 手动处理关闭事件\r\n * @en_US Manually handle close events\r\n */\r\n @Input() @XInputBoolean() manual?: XBoolean;\r\n /**\r\n * @zh_CN 拖动提示框\r\n * @en_US Drag dialog\r\n */\r\n @Input() @XWithConfig<XBoolean>(X_CONFIG_NAME, false) @XInputBoolean() draggable?: XBoolean;\r\n /**\r\n * @zh_CN 拖动范围限制,父节点选择器或者对象\r\n * @en_US Drag dialog\r\n */\r\n @Input() dragBoundary!: string | ElementRef<HTMLElement> | HTMLElement;\r\n /**\r\n * @zh_CN 关闭的事件\r\n * @en_US Closed events\r\n */\r\n @Output() close = new EventEmitter();\r\n}\r\n\r\n/**\r\n * Alert Option\r\n * @undocument true\r\n */\r\nexport interface XAlertOption {\r\n /**\r\n * 隐藏\r\n */\r\n hide?: boolean;\r\n /**\r\n * 标题\r\n */\r\n title?: XTemplate;\r\n /**\r\n * 内容\r\n */\r\n content?: XTemplate;\r\n /**\r\n * 类型\r\n */\r\n type?: XAlertType;\r\n /**\r\n * 主题\r\n */\r\n effect?: XEffect;\r\n /**\r\n * 隐藏关闭按钮\r\n */\r\n hideClose?: boolean;\r\n /**\r\n * 关闭按钮文字替换\r\n */\r\n closeText?: string;\r\n /**\r\n * 显示图标\r\n */\r\n showIcon?: boolean;\r\n /**\r\n * 禁用动画\r\n */\r\n disabledAnimation?: boolean;\r\n /**\r\n * 延迟关闭,默认 0 表示不关闭\r\n */\r\n duration?: number;\r\n /**\r\n * 手动处理关闭事件\r\n */\r\n manual?: boolean;\r\n}\r\n\r\n/**\r\n * @zh_CN 类型\r\n * @en_US Type\r\n * @value \"success\"\r\n * @value \"info\"\r\n * @value \"warning\"\r\n * @value \"error\"\r\n */\r\nexport type XAlertType = XStatus;\r\n","import { Component, OnInit, ViewEncapsulation, ChangeDetectorRef, ChangeDetectionStrategy, OnDestroy } from '@angular/core';\r\nimport { XAlertPrefix, XAlertProperty } from './alert.property';\r\nimport { XFadeAnimation, XIsEmpty, XConfigService } from '@ng-nest/ui/core';\r\nimport { of, Subject } from 'rxjs';\r\nimport { delay, takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: `${XAlertPrefix}`,\r\n templateUrl: './alert.component.html',\r\n styleUrls: ['./alert.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [XFadeAnimation]\r\n})\r\nexport class XAlertComponent extends XAlertProperty implements OnInit, OnDestroy {\r\n private _unSubject = new Subject<void>();\r\n\r\n constructor(public cdr: ChangeDetectorRef, public configService: XConfigService) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.setClassMap();\r\n this.setDuration();\r\n }\r\n\r\n ngOnDestroy() {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n setClassMap() {\r\n this.classMap = {\r\n [`${XAlertPrefix}-${this.type}`]: !XIsEmpty(this.type),\r\n [`x-${this.effect}`]: !XIsEmpty(this.effect),\r\n [`${XAlertPrefix}-icon-medium`]: !XIsEmpty(this.title) && !XIsEmpty(this.content) && !XIsEmpty(this.showIcon),\r\n [`${XAlertPrefix}-draggable`]: Boolean(this.draggable)\r\n };\r\n }\r\n\r\n setDuration() {\r\n if (this.duration) {\r\n of(true)\r\n .pipe(delay(Number(this.duration)), takeUntil(this._unSubject))\r\n .subscribe(() => {\r\n this.onClose();\r\n });\r\n }\r\n }\r\n\r\n onClose() {\r\n if (this.manual) {\r\n this.close?.emit();\r\n } else {\r\n this.hide = true;\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n onCloseAnimationDone() {\r\n if (this.hide) {\r\n this.close?.emit();\r\n }\r\n }\r\n}\r\n","<div\r\n #alert\r\n class=\"x-alert\"\r\n cdkDrag\r\n [cdkDragDisabled]=\"!draggable\"\r\n [cdkDragBoundary]=\"dragBoundary\"\r\n [ngClass]=\"classMap\"\r\n *ngIf=\"!hide\"\r\n @x-fade-animation\r\n [@.disabled]=\"disabledAnimation\"\r\n (@x-fade-animation.done)=\"onCloseAnimationDone()\"\r\n>\r\n <ng-container *ngIf=\"showIcon\">\r\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\r\n </ng-container>\r\n <ng-template #iconTpl>\r\n <ng-container [ngSwitch]=\"type\">\r\n <x-icon class=\"x-alert-icon\" *ngSwitchCase=\"'success'\" type=\"adf-check-circle\"></x-icon>\r\n <x-icon class=\"x-alert-icon\" *ngSwitchCase=\"'info'\" type=\"adf-info-circle\"></x-icon>\r\n <x-icon class=\"x-alert-icon\" *ngSwitchCase=\"'warning'\" type=\"adf-exclamation-circle\"></x-icon>\r\n <x-icon class=\"x-alert-icon\" *ngSwitchCase=\"'error'\" type=\"adf-close-circle\"></x-icon>\r\n </ng-container>\r\n </ng-template>\r\n <div class=\"x-alert-inner\">\r\n <span class=\"x-alert-title\" cdkDragHandle [class.x-bold]=\"title && content\">\r\n <ng-container *xOutlet=\"title; context: { $iconTpl: iconTpl }\">{{ title }}</ng-container>\r\n </span>\r\n <div class=\"x-alert-content\" *ngIf=\"content\">\r\n <ng-container *xOutlet=\"content; context: { $iconTpl: iconTpl }\">{{ content }}</ng-container>\r\n </div>\r\n <x-button\r\n *ngIf=\"!hideClose\"\r\n class=\"x-alert-close\"\r\n size=\"small\"\r\n [icon]=\"!closeText ? 'fto-x' : ''\"\r\n [onlyIcon]=\"!closeText\"\r\n [type]=\"closeText ? 'text' : 'initial'\"\r\n (click)=\"onClose()\"\r\n closable\r\n >{{ closeText }}</x-button\r\n >\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { XAlertComponent } from './alert.component';\r\nimport { XIconModule } from '@ng-nest/ui/icon';\r\nimport { XOutletModule } from '@ng-nest/ui/outlet';\r\nimport { XButtonModule } from '@ng-nest/ui/button';\r\nimport { XAlertProperty } from './alert.property';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\n\r\n@NgModule({\r\n declarations: [XAlertComponent, XAlertProperty],\r\n exports: [XAlertComponent],\r\n imports: [CommonModule, DragDropModule, XIconModule, XButtonModule, XOutletModule]\r\n})\r\nexport class XAlertModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -92,7 +92,7 @@ class XAnchorComponent extends XAnchorProperty {
92
92
  setScroll() {
93
93
  fromEvent(this.scroll ? this.scroll : window, 'scroll')
94
94
  .pipe(throttleTime(10), takeUntil(this._unSubject))
95
- .subscribe((x) => {
95
+ .subscribe(() => {
96
96
  if (this._scrolling)
97
97
  return;
98
98
  this.setActivatedByScroll();
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-anchor.js","sources":["../../../../lib/ng-nest/ui/anchor/anchor.property.ts","../../../../lib/ng-nest/ui/anchor/anchor.component.ts","../../../../lib/ng-nest/ui/anchor/anchor.component.html","../../../../lib/ng-nest/ui/anchor/anchor.module.ts","../../../../lib/ng-nest/ui/anchor/ng-nest-ui-anchor.ts"],"sourcesContent":["import { XIdentityProperty, XProperty, XJustify, XWithConfig, XPosition, XPositionLeftRight } from '@ng-nest/ui/core';\r\nimport { Input, Component } from '@angular/core';\r\n\r\n/**\r\n * Anchor\r\n * @selector x-anchor\r\n * @decorator component\r\n */\r\nexport const XAnchorPrefix = 'x-anchor';\r\nconst X_CONFIG_NAME = 'anchor';\r\n\r\n/**\r\n * Anchor Property\r\n */\r\n@Component({ template: '' })\r\nexport class XAnchorProperty extends XProperty {\r\n /**\r\n * @zh_CN 滚动区域对象\r\n * @en_US Scroll area object\r\n */\r\n @Input() scroll!: HTMLElement;\r\n /**\r\n * @zh_CN 顶部距离\r\n * @en_US Top distance\r\n */\r\n @Input() @XWithConfig<string>(X_CONFIG_NAME, '0') affixTop!: string;\r\n /**\r\n * @zh_CN 导航相对内容位置\r\n * @en_US Navigation relative content position\r\n */\r\n @Input() @XWithConfig<XAnchorLayout>(X_CONFIG_NAME, 'right') layout!: XAnchorLayout;\r\n /**\r\n * @zh_CN 对齐方式\r\n * @en_US Alignment\r\n */\r\n @Input() @XWithConfig<XJustify>(X_CONFIG_NAME, 'start') justify!: XJustify;\r\n}\r\n\r\n/**\r\n * Anchor Node\r\n */\r\nexport interface XAnchorNode extends XIdentityProperty {\r\n /**\r\n * @zh_CN 左内边距,用来显示层级\r\n * @en_US Left inner margin, used to display hierarchy\r\n */\r\n left?: number;\r\n /**\r\n * @zh_CN 图标\r\n * @en_US Icon\r\n */\r\n icon?: string;\r\n /**\r\n * @zh_CN 锚点的链接\r\n * @en_US Anchor link\r\n */\r\n link?: string;\r\n}\r\n\r\n/**\r\n * @zh_CN 布局方式,相对内容的位置\r\n * @en_US Layout method, relative content position\r\n */\r\nexport type XAnchorLayout = XPositionLeftRight;\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 ViewChild,\r\n AfterViewInit,\r\n Inject,\r\n OnDestroy\r\n} from '@angular/core';\r\nimport { XAnchorPrefix, XAnchorNode, XAnchorProperty } from './anchor.property';\r\nimport { computedStyle, XIsEmpty, reqAnimFrame, XIsNumber, XIsUndefined, XConfigService } from '@ng-nest/ui/core';\r\nimport { XSliderNode } from '@ng-nest/ui/slider';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { throttleTime, takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: `${XAnchorPrefix}`,\r\n templateUrl: './anchor.component.html',\r\n styleUrls: ['./anchor.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XAnchorComponent extends XAnchorProperty implements OnInit, AfterViewInit, OnDestroy {\r\n @ViewChild('anchor', { static: true }) anchor!: ElementRef;\r\n @ViewChild('content', { static: true }) content!: ElementRef;\r\n hElements: HTMLElement[] = [];\r\n sliderData: XSliderNode[] = [];\r\n activatedIndex: number = 0;\r\n sliderHeight?: number;\r\n document: Document;\r\n private _scrolling = false;\r\n private _fontSize: number;\r\n private _unSubject = new Subject();\r\n\r\n constructor(\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public cdr: ChangeDetectorRef,\r\n @Inject(DOCUMENT) doc: any,\r\n public configService: XConfigService\r\n ) {\r\n super();\r\n this.document = doc;\r\n this._fontSize = parseFloat(computedStyle(this.document.documentElement, 'font-size'));\r\n }\r\n\r\n ngOnInit() {\r\n this.setClassMap();\r\n this.setSliderData();\r\n this.setHeight();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.setScroll();\r\n }\r\n\r\n ngOnDestroy() {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n activatedChange(index: number) {\r\n if (XIsEmpty(this.hElements) || XIsUndefined(this.scroll)) return;\r\n\r\n this._scrolling = true;\r\n const hElement = this.hElements[index];\r\n let scrollTop = hElement.offsetTop - this.anchor.nativeElement.offsetTop - parseFloat(computedStyle(hElement, 'margin-top'));\r\n let maxScrollTop = this.scroll.scrollHeight - this.scroll.clientHeight;\r\n if (scrollTop > maxScrollTop) scrollTop = maxScrollTop;\r\n this.scrollTo(this.scroll, parseInt(`${scrollTop}`), 150);\r\n }\r\n\r\n private setClassMap() {\r\n this.classMap[`${XAnchorPrefix}-${this.layout}`] = !XIsEmpty(this.layout);\r\n }\r\n\r\n private setScroll() {\r\n fromEvent(this.scroll ? this.scroll : window, 'scroll')\r\n .pipe(throttleTime(10), takeUntil(this._unSubject))\r\n .subscribe((x) => {\r\n if (this._scrolling) return;\r\n this.setActivatedByScroll();\r\n });\r\n if (!this.scroll) {\r\n this.scroll = this.document.documentElement;\r\n }\r\n }\r\n\r\n private setActivatedByScroll() {\r\n let now = 0;\r\n this.hElements.forEach((h, index) => {\r\n let distance = this.scroll.scrollTop + this.anchor.nativeElement.offsetTop;\r\n if (distance >= h.offsetTop) {\r\n now = index;\r\n return;\r\n }\r\n });\r\n this.activatedIndex = now;\r\n this.cdr.detectChanges();\r\n }\r\n\r\n private setSliderData() {\r\n this.hElements = this.content.nativeElement.querySelectorAll(':scope> h1,:scope> h2,:scope> h3,:scope> h4,:scope> h5');\r\n if (this.hElements.length > 0) {\r\n let list: XAnchorNode[] = [];\r\n this.hElements.forEach((x: HTMLElement, i: number) => {\r\n const link = `x-anchor-${i}`;\r\n const left = this.setLeft(x);\r\n this.renderer.setAttribute(x, 'id', link);\r\n list = [\r\n ...list,\r\n {\r\n id: i,\r\n label: x.innerText,\r\n left: left,\r\n link: link\r\n }\r\n ];\r\n });\r\n this.sliderData = list;\r\n }\r\n }\r\n\r\n private setLeft(element: HTMLElement): number {\r\n const eles = ['H1', 'H2', 'H3', 'H4', 'H5'];\r\n const index = eles.indexOf(element.tagName);\r\n return index + 1;\r\n }\r\n\r\n private setHeight() {\r\n if (this.scroll) {\r\n let height = this.scroll.offsetHeight;\r\n let top = parseFloat(computedStyle(this.scroll, 'padding-top'));\r\n let borderTop = parseFloat(computedStyle(this.scroll, 'border-top'));\r\n let bottom = parseFloat(computedStyle(this.scroll, 'padding-bottom'));\r\n let borderBottom = parseFloat(computedStyle(this.scroll, 'border-bottom'));\r\n this.sliderHeight = height - top - bottom - borderTop - borderBottom - this.getTop();\r\n }\r\n }\r\n\r\n private getTop() {\r\n if (this.affixTop === '0') return 0;\r\n if (XIsNumber(this.affixTop)) return Number(this.affixTop);\r\n else if (this.affixTop.indexOf('rem') !== -1) return Number(this.affixTop.replace(/rem/g, '')) * this._fontSize;\r\n else if (this.affixTop.indexOf('px') !== -1) return Number(this.affixTop.replace(/px/g, ''));\r\n return 0;\r\n }\r\n\r\n private scrollTo(element: HTMLElement, to: number, duration: number) {\r\n const difference = to - element.scrollTop;\r\n const perTick = (difference / duration) * 10;\r\n reqAnimFrame(() => {\r\n element.scrollTop = element.scrollTop + perTick;\r\n if (element.scrollTop === to || duration <= 0) {\r\n setTimeout(() => (this._scrolling = false), 20);\r\n return;\r\n } else {\r\n this.scrollTo(element, to, duration - 10);\r\n }\r\n });\r\n }\r\n}\r\n","<div #anchor class=\"x-anchor\" [ngClass]=\"classMap\">\r\n <div #content class=\"x-anchor-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n <x-affix class=\"x-anchor-affix\" [top]=\"affixTop\">\r\n <div class=\"x-anchor-slider\" [style.height.px]=\"sliderHeight\">\r\n <x-slider\r\n [data]=\"sliderData\"\r\n layout=\"column\"\r\n [activatedIndex]=\"activatedIndex\"\r\n [nodeJustify]=\"justify\"\r\n [nodeTpl]=\"sliderNodeTpl\"\r\n (indexChange)=\"activatedChange($event)\"\r\n ></x-slider>\r\n </div>\r\n </x-affix>\r\n</div>\r\n\r\n<ng-template #sliderNodeTpl let-node=\"$node\">\r\n <span [style.padding-left.rem]=\"node.left - 1\">{{ node.label }}</span>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { XAnchorComponent } from './anchor.component';\r\nimport { XAffixModule } from '@ng-nest/ui/affix';\r\nimport { XSliderModule } from '@ng-nest/ui/slider';\r\nimport { XAnchorProperty } from './anchor.property';\r\n\r\n@NgModule({\r\n declarations: [XAnchorComponent, XAnchorProperty],\r\n exports: [XAnchorComponent],\r\n imports: [CommonModule, XAffixModule, XSliderModule]\r\n})\r\nexport class XAnchorModule {}\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-anchor.js","sources":["../../../../lib/ng-nest/ui/anchor/anchor.property.ts","../../../../lib/ng-nest/ui/anchor/anchor.component.ts","../../../../lib/ng-nest/ui/anchor/anchor.component.html","../../../../lib/ng-nest/ui/anchor/anchor.module.ts","../../../../lib/ng-nest/ui/anchor/ng-nest-ui-anchor.ts"],"sourcesContent":["import { XIdentityProperty, XProperty, XJustify, XWithConfig, XPositionLeftRight } from '@ng-nest/ui/core';\r\nimport { Input, Component } from '@angular/core';\r\n\r\n/**\r\n * Anchor\r\n * @selector x-anchor\r\n * @decorator component\r\n */\r\nexport const XAnchorPrefix = 'x-anchor';\r\nconst X_CONFIG_NAME = 'anchor';\r\n\r\n/**\r\n * Anchor Property\r\n */\r\n@Component({ template: '' })\r\nexport class XAnchorProperty extends XProperty {\r\n /**\r\n * @zh_CN 滚动区域对象\r\n * @en_US Scroll area object\r\n */\r\n @Input() scroll!: HTMLElement;\r\n /**\r\n * @zh_CN 顶部距离\r\n * @en_US Top distance\r\n */\r\n @Input() @XWithConfig<string>(X_CONFIG_NAME, '0') affixTop!: string;\r\n /**\r\n * @zh_CN 导航相对内容位置\r\n * @en_US Navigation relative content position\r\n */\r\n @Input() @XWithConfig<XAnchorLayout>(X_CONFIG_NAME, 'right') layout!: XAnchorLayout;\r\n /**\r\n * @zh_CN 对齐方式\r\n * @en_US Alignment\r\n */\r\n @Input() @XWithConfig<XJustify>(X_CONFIG_NAME, 'start') justify!: XJustify;\r\n}\r\n\r\n/**\r\n * Anchor Node\r\n */\r\nexport interface XAnchorNode extends XIdentityProperty {\r\n /**\r\n * @zh_CN 左内边距,用来显示层级\r\n * @en_US Left inner margin, used to display hierarchy\r\n */\r\n left?: number;\r\n /**\r\n * @zh_CN 图标\r\n * @en_US Icon\r\n */\r\n icon?: string;\r\n /**\r\n * @zh_CN 锚点的链接\r\n * @en_US Anchor link\r\n */\r\n link?: string;\r\n}\r\n\r\n/**\r\n * @zh_CN 布局方式,相对内容的位置\r\n * @en_US Layout method, relative content position\r\n */\r\nexport type XAnchorLayout = XPositionLeftRight;\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 ViewChild,\r\n AfterViewInit,\r\n Inject,\r\n OnDestroy\r\n} from '@angular/core';\r\nimport { XAnchorPrefix, XAnchorNode, XAnchorProperty } from './anchor.property';\r\nimport { computedStyle, XIsEmpty, reqAnimFrame, XIsNumber, XIsUndefined, XConfigService } from '@ng-nest/ui/core';\r\nimport { XSliderNode } from '@ng-nest/ui/slider';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { throttleTime, takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: `${XAnchorPrefix}`,\r\n templateUrl: './anchor.component.html',\r\n styleUrls: ['./anchor.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XAnchorComponent extends XAnchorProperty implements OnInit, AfterViewInit, OnDestroy {\r\n @ViewChild('anchor', { static: true }) anchor!: ElementRef;\r\n @ViewChild('content', { static: true }) content!: ElementRef;\r\n hElements: HTMLElement[] = [];\r\n sliderData: XSliderNode[] = [];\r\n activatedIndex: number = 0;\r\n sliderHeight?: number;\r\n document: Document;\r\n private _scrolling = false;\r\n private _fontSize: number;\r\n private _unSubject = new Subject<void>();\r\n\r\n constructor(\r\n public renderer: Renderer2,\r\n public elementRef: ElementRef,\r\n public cdr: ChangeDetectorRef,\r\n @Inject(DOCUMENT) doc: any,\r\n public configService: XConfigService\r\n ) {\r\n super();\r\n this.document = doc;\r\n this._fontSize = parseFloat(computedStyle(this.document.documentElement, 'font-size'));\r\n }\r\n\r\n ngOnInit() {\r\n this.setClassMap();\r\n this.setSliderData();\r\n this.setHeight();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.setScroll();\r\n }\r\n\r\n ngOnDestroy() {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n activatedChange(index: number) {\r\n if (XIsEmpty(this.hElements) || XIsUndefined(this.scroll)) return;\r\n\r\n this._scrolling = true;\r\n const hElement = this.hElements[index];\r\n let scrollTop = hElement.offsetTop - this.anchor.nativeElement.offsetTop - parseFloat(computedStyle(hElement, 'margin-top'));\r\n let maxScrollTop = this.scroll.scrollHeight - this.scroll.clientHeight;\r\n if (scrollTop > maxScrollTop) scrollTop = maxScrollTop;\r\n this.scrollTo(this.scroll, parseInt(`${scrollTop}`), 150);\r\n }\r\n\r\n private setClassMap() {\r\n this.classMap[`${XAnchorPrefix}-${this.layout}`] = !XIsEmpty(this.layout);\r\n }\r\n\r\n private setScroll() {\r\n fromEvent(this.scroll ? this.scroll : window, 'scroll')\r\n .pipe(throttleTime(10), takeUntil(this._unSubject))\r\n .subscribe(() => {\r\n if (this._scrolling) return;\r\n this.setActivatedByScroll();\r\n });\r\n if (!this.scroll) {\r\n this.scroll = this.document.documentElement;\r\n }\r\n }\r\n\r\n private setActivatedByScroll() {\r\n let now = 0;\r\n this.hElements.forEach((h, index) => {\r\n let distance = this.scroll.scrollTop + this.anchor.nativeElement.offsetTop;\r\n if (distance >= h.offsetTop) {\r\n now = index;\r\n return;\r\n }\r\n });\r\n this.activatedIndex = now;\r\n this.cdr.detectChanges();\r\n }\r\n\r\n private setSliderData() {\r\n this.hElements = this.content.nativeElement.querySelectorAll(':scope> h1,:scope> h2,:scope> h3,:scope> h4,:scope> h5');\r\n if (this.hElements.length > 0) {\r\n let list: XAnchorNode[] = [];\r\n this.hElements.forEach((x: HTMLElement, i: number) => {\r\n const link = `x-anchor-${i}`;\r\n const left = this.setLeft(x);\r\n this.renderer.setAttribute(x, 'id', link);\r\n list = [\r\n ...list,\r\n {\r\n id: i,\r\n label: x.innerText,\r\n left: left,\r\n link: link\r\n }\r\n ];\r\n });\r\n this.sliderData = list;\r\n }\r\n }\r\n\r\n private setLeft(element: HTMLElement): number {\r\n const eles = ['H1', 'H2', 'H3', 'H4', 'H5'];\r\n const index = eles.indexOf(element.tagName);\r\n return index + 1;\r\n }\r\n\r\n private setHeight() {\r\n if (this.scroll) {\r\n let height = this.scroll.offsetHeight;\r\n let top = parseFloat(computedStyle(this.scroll, 'padding-top'));\r\n let borderTop = parseFloat(computedStyle(this.scroll, 'border-top'));\r\n let bottom = parseFloat(computedStyle(this.scroll, 'padding-bottom'));\r\n let borderBottom = parseFloat(computedStyle(this.scroll, 'border-bottom'));\r\n this.sliderHeight = height - top - bottom - borderTop - borderBottom - this.getTop();\r\n }\r\n }\r\n\r\n private getTop() {\r\n if (this.affixTop === '0') return 0;\r\n if (XIsNumber(this.affixTop)) return Number(this.affixTop);\r\n else if (this.affixTop.indexOf('rem') !== -1) return Number(this.affixTop.replace(/rem/g, '')) * this._fontSize;\r\n else if (this.affixTop.indexOf('px') !== -1) return Number(this.affixTop.replace(/px/g, ''));\r\n return 0;\r\n }\r\n\r\n private scrollTo(element: HTMLElement, to: number, duration: number) {\r\n const difference = to - element.scrollTop;\r\n const perTick = (difference / duration) * 10;\r\n reqAnimFrame(() => {\r\n element.scrollTop = element.scrollTop + perTick;\r\n if (element.scrollTop === to || duration <= 0) {\r\n setTimeout(() => (this._scrolling = false), 20);\r\n return;\r\n } else {\r\n this.scrollTo(element, to, duration - 10);\r\n }\r\n });\r\n }\r\n}\r\n","<div #anchor class=\"x-anchor\" [ngClass]=\"classMap\">\r\n <div #content class=\"x-anchor-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n <x-affix class=\"x-anchor-affix\" [top]=\"affixTop\">\r\n <div class=\"x-anchor-slider\" [style.height.px]=\"sliderHeight\">\r\n <x-slider\r\n [data]=\"sliderData\"\r\n layout=\"column\"\r\n [activatedIndex]=\"activatedIndex\"\r\n [nodeJustify]=\"justify\"\r\n [nodeTpl]=\"sliderNodeTpl\"\r\n (indexChange)=\"activatedChange($event)\"\r\n ></x-slider>\r\n </div>\r\n </x-affix>\r\n</div>\r\n\r\n<ng-template #sliderNodeTpl let-node=\"$node\">\r\n <span [style.padding-left.rem]=\"node.left - 1\">{{ node.label }}</span>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { XAnchorComponent } from './anchor.component';\r\nimport { XAffixModule } from '@ng-nest/ui/affix';\r\nimport { XSliderModule } from '@ng-nest/ui/slider';\r\nimport { XAnchorProperty } from './anchor.property';\r\n\r\n@NgModule({\r\n declarations: [XAnchorComponent, XAnchorProperty],\r\n exports: [XAnchorComponent],\r\n imports: [CommonModule, XAffixModule, XSliderModule]\r\n})\r\nexport class XAnchorModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -105,7 +105,7 @@ class XAutoCompletePortalComponent {
105
105
  this.animating(false);
106
106
  event.toState === 'void' && this.destroyPortal();
107
107
  }
108
- start(event) {
108
+ start() {
109
109
  this.animating(true);
110
110
  }
111
111
  ngOnInit() {
@@ -121,7 +121,7 @@ class XAutoCompletePortalComponent {
121
121
  this.data = x;
122
122
  this.cdr.detectChanges();
123
123
  });
124
- this.closeSubject.pipe(takeUntil(this._unSubject)).subscribe((x) => {
124
+ this.closeSubject.pipe(takeUntil(this._unSubject)).subscribe(() => {
125
125
  this.list.setUnActive(this.active);
126
126
  });
127
127
  this.keydownSubject.pipe(takeUntil(this._unSubject)).subscribe((x) => {
@@ -146,7 +146,7 @@ class XAutoCompletePortalComponent {
146
146
  }
147
147
  }
148
148
  /** @nocollapse */ XAutoCompletePortalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: XAutoCompletePortalComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
149
- /** @nocollapse */ XAutoCompletePortalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: XAutoCompletePortalComponent, selector: "x-auto-complete-portal", host: { listeners: { "@x-connect-base-animation.done": "done($event)", "@x-connect-base-animation.start": "start($event)" }, properties: { "@x-connect-base-animation": "this.placement" } }, viewQueries: [{ propertyName: "list", first: true, predicate: ["list"], descendants: true }], ngImport: i0, template: "<div #autoCompletePortal class=\"x-auto-complete-portal\" tabindex=\"-1\" (click)=\"inputCom.inputFocus(); stopPropagation($event)\">\r\n <x-list\r\n #list\r\n [data]=\"data\"\r\n (nodeClick)=\"nodeClick($event)\"\r\n (keyManagerChange)=\"onActive($event)\"\r\n (keyManagerTabOut)=\"onTabOut()\"\r\n [nodeTpl]=\"nodeTpl\"\r\n [scrollElement]=\"autoCompletePortal\"\r\n ></x-list>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-auto-complete-portal{width:100%}.x-auto-complete-portal{margin:.0625rem 0;font-size:var(--x-font-size);color:var(--x-text);border:var(--x-border-width) var(--x-border-style) var(--x-border);width:100%;border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color);position:relative;display:flex;background-color:var(--x-background);overflow-y:auto;max-height:calc(calc(calc(var(--x-font-size) + .875rem) * 6) + calc(var(--x-border-width) * 7))}\n"], components: [{ type: i1.XListComponent, selector: "x-list" }], animations: [XConnectBaseAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
149
+ /** @nocollapse */ XAutoCompletePortalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: XAutoCompletePortalComponent, selector: "x-auto-complete-portal", host: { listeners: { "@x-connect-base-animation.done": "done($event)", "@x-connect-base-animation.start": "start($event)" }, properties: { "@x-connect-base-animation": "this.placement" } }, viewQueries: [{ propertyName: "list", first: true, predicate: ["list"], descendants: true }], ngImport: i0, template: "<div #autoCompletePortal class=\"x-auto-complete-portal\" tabindex=\"-1\" (click)=\"inputCom.inputFocus(); stopPropagation($event)\">\r\n <x-list\r\n #list\r\n [data]=\"data\"\r\n (nodeClick)=\"nodeClick($event)\"\r\n (keyManagerChange)=\"onActive($event)\"\r\n (keyManagerTabOut)=\"onTabOut()\"\r\n [nodeTpl]=\"nodeTpl\"\r\n [scrollElement]=\"autoCompletePortal\"\r\n ></x-list>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-auto-complete-portal{width:100%}.x-auto-complete-portal{margin:.0625rem 0;font-size:var(--x-font-size);color:var(--x-text);border:var(--x-border-width) var(--x-border-style) var(--x-border);width:100%;border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color);position:relative;display:flex;background-color:var(--x-background);overflow-y:auto;max-height:calc(calc(calc(var(--x-font-size) + .875rem) * 6) + calc(var(--x-border-width) * 7))}.x-auto-complete-portal:focus{outline:none}\n"], components: [{ type: i1.XListComponent, selector: "x-list" }], animations: [XConnectBaseAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
150
150
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: XAutoCompletePortalComponent, decorators: [{
151
151
  type: Component,
152
152
  args: [{
@@ -211,7 +211,8 @@ class XAutoCompleteComponent extends XAutoCompleteProperty {
211
211
  this.setSubject();
212
212
  }
213
213
  ngOnChanges(changes) {
214
- XIsChange(changes.data) && this.setData();
214
+ const { data } = changes;
215
+ XIsChange(data) && this.setData();
215
216
  }
216
217
  ngAfterViewInit() {
217
218
  this.setPortal();
@@ -234,7 +235,7 @@ class XAutoCompleteComponent extends XAutoCompleteProperty {
234
235
  });
235
236
  }
236
237
  setSubject() {
237
- this.closeSubject.pipe(takeUntil(this._unSubject)).subscribe((x) => {
238
+ this.closeSubject.pipe(takeUntil(this._unSubject)).subscribe(() => {
238
239
  this.closePortal();
239
240
  });
240
241
  this.inputChange.pipe(debounceTime(this.debounceTime), distinctUntilChanged(), takeUntil(this._unSubject)).subscribe((x) => {
@@ -434,7 +435,7 @@ class XAutoCompleteComponent extends XAutoCompleteProperty {
434
435
  onBlur($event) { }
435
436
  }
436
437
  /** @nocollapse */ XAutoCompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: XAutoCompleteComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i1$1.XPortalService }, { token: i0.ViewContainerRef }, { token: i2.Overlay }, { token: i3.XConfigService }], target: i0.ɵɵFactoryTarget.Component });
437
- /** @nocollapse */ XAutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: XAutoCompleteComponent, selector: "x-auto-complete", providers: [XValueAccessor(XAutoCompleteComponent)], viewQueries: [{ propertyName: "inputCom", first: true, predicate: ["inputCom"], descendants: true, static: true }, { propertyName: "autoComplete", first: true, predicate: ["autoComplete"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #autoComplete class=\"x-auto-complete\">\r\n <div class=\"x-auto-complete-row\">\r\n <x-input\r\n #inputCom\r\n type=\"text\"\r\n [label]=\"label\"\r\n [labelWidth]=\"labelWidth\"\r\n [labelAlign]=\"labelAlign\"\r\n [justify]=\"justify\"\r\n [align]=\"align\"\r\n [direction]=\"direction\"\r\n [disabled]=\"disabled\"\r\n [required]=\"required\"\r\n [icon]=\"icon\"\r\n [iconSpin]=\"iconSpin\"\r\n [placeholder]=\"placeholder\"\r\n [readonly]=\"readonly\"\r\n [clearable]=\"clearable\"\r\n [(ngModel)]=\"value\"\r\n [valueTpl]=\"valueTpl\"\r\n [valueTplContext]=\"valueTplContext\"\r\n [size]=\"size\"\r\n [bordered]=\"bordered\"\r\n [before]=\"before\"\r\n [after]=\"after\"\r\n [pattern]=\"pattern\"\r\n [message]=\"message\"\r\n [pointer]=\"pointer\"\r\n [(active)]=\"active\"\r\n (clearEmit)=\"clearEmit()\"\r\n (xInput)=\"onInput($event)\"\r\n (xKeydown)=\"onKeydown($event)\"\r\n (xFocus)=\"onFocus($event)\"\r\n (xBlur)=\"onBlur($event)\"\r\n (xClick)=\"showPortal()\"\r\n ></x-input>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-auto-complete{display:inline-block}.x-auto-complete{margin:0;padding:0;width:100%}.x-auto-complete-portal{margin:.0625rem 0;font-size:var(--x-font-size);color:var(--x-text);border:var(--x-border-width) var(--x-border-style) var(--x-border);width:100%;border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color);position:relative;display:flex;background-color:var(--x-background);overflow-y:auto;max-height:calc(calc(calc(var(--x-font-size) + .875rem) * 6) + calc(var(--x-border-width) * 7))}\n"], components: [{ type: i4.XInputComponent, selector: "x-input" }], directives: [{ type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
438
+ /** @nocollapse */ XAutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: XAutoCompleteComponent, selector: "x-auto-complete", providers: [XValueAccessor(XAutoCompleteComponent)], viewQueries: [{ propertyName: "inputCom", first: true, predicate: ["inputCom"], descendants: true, static: true }, { propertyName: "autoComplete", first: true, predicate: ["autoComplete"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #autoComplete class=\"x-auto-complete\">\r\n <div class=\"x-auto-complete-row\">\r\n <x-input\r\n #inputCom\r\n type=\"text\"\r\n [label]=\"label\"\r\n [labelWidth]=\"labelWidth\"\r\n [labelAlign]=\"labelAlign\"\r\n [justify]=\"justify\"\r\n [align]=\"align\"\r\n [direction]=\"direction\"\r\n [disabled]=\"disabled\"\r\n [required]=\"required\"\r\n [icon]=\"icon\"\r\n [iconSpin]=\"iconSpin\"\r\n [placeholder]=\"placeholder\"\r\n [readonly]=\"readonly\"\r\n [clearable]=\"clearable\"\r\n [(ngModel)]=\"value\"\r\n [valueTpl]=\"valueTpl\"\r\n [valueTplContext]=\"valueTplContext\"\r\n [size]=\"size\"\r\n [bordered]=\"bordered\"\r\n [before]=\"before\"\r\n [after]=\"after\"\r\n [pattern]=\"pattern\"\r\n [message]=\"message\"\r\n [pointer]=\"pointer\"\r\n [(active)]=\"active\"\r\n (clearEmit)=\"clearEmit()\"\r\n (xInput)=\"onInput($event)\"\r\n (xKeydown)=\"onKeydown($event)\"\r\n (xFocus)=\"onFocus($event)\"\r\n (xBlur)=\"onBlur($event)\"\r\n (xClick)=\"showPortal()\"\r\n ></x-input>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";x-auto-complete{display:inline-block}.x-auto-complete{margin:0;padding:0;width:100%}.x-auto-complete x-input{width:100%}.x-auto-complete-portal{margin:.0625rem 0;font-size:var(--x-font-size);color:var(--x-text);border:var(--x-border-width) var(--x-border-style) var(--x-border);width:100%;border-radius:var(--x-border-radius);box-shadow:var(--x-box-shadow) var(--x-box-shadow-light-color);position:relative;display:flex;background-color:var(--x-background);overflow-y:auto;max-height:calc(calc(calc(var(--x-font-size) + .875rem) * 6) + calc(var(--x-border-width) * 7))}.x-auto-complete-portal:focus{outline:none}\n"], components: [{ type: i4.XInputComponent, selector: "x-input" }], directives: [{ type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
438
439
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: XAutoCompleteComponent, decorators: [{
439
440
  type: Component,
440
441
  args: [{
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-auto-complete.js","sources":["../../../../lib/ng-nest/ui/auto-complete/auto-complete.property.ts","../../../../lib/ng-nest/ui/auto-complete/auto-complete-portal.component.ts","../../../../lib/ng-nest/ui/auto-complete/auto-complete-portal.component.html","../../../../lib/ng-nest/ui/auto-complete/auto-complete.component.ts","../../../../lib/ng-nest/ui/auto-complete/auto-complete.component.html","../../../../lib/ng-nest/ui/auto-complete/auto-complete.module.ts","../../../../lib/ng-nest/ui/auto-complete/ng-nest-ui-auto-complete.ts"],"sourcesContent":["import {\r\n XParentIdentityProperty,\r\n XDataConvert,\r\n XData,\r\n XWithConfig,\r\n XPositionTopBottom,\r\n XSize,\r\n XInputBoolean,\r\n XBoolean,\r\n XTemplate\r\n} from '@ng-nest/ui/core';\r\nimport { Input, Component, TemplateRef, EventEmitter, Output } from '@angular/core';\r\nimport { XControlValueAccessor, XFormOption } from '@ng-nest/ui/base-form';\r\n\r\n/**\r\n * AutoComplete\r\n * @selector x-auto-complete\r\n * @decorator component\r\n */\r\nexport const XAutoCompletePrefix = 'x-auto-complete';\r\nconst X_CONFIG_NAME = 'autoComplete';\r\n\r\n/**\r\n * AutoComplete Property\r\n */\r\n@Component({ template: '' })\r\nexport class XAutoCompleteProperty extends XControlValueAccessor<any> {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n @Input() @XDataConvert() data: XData<XAutoCompleteNode> = [];\r\n /**\r\n * @zh_CN 输入延迟执行时间,ms\r\n * @en_US Enter a delay execution time, ms\r\n */\r\n @Input() @XWithConfig<number>(X_CONFIG_NAME, 200) debounceTime?: number;\r\n /**\r\n * @zh_CN 展示方位\r\n * @en_US Display position\r\n */\r\n @Input() @XWithConfig<XPositionTopBottom>(X_CONFIG_NAME, 'bottom') placement?: XPositionTopBottom;\r\n /**\r\n * @zh_CN 节点模板\r\n * @en_US Node template\r\n */\r\n @Input() nodeTpl?: TemplateRef<any>;\r\n /**\r\n * @zh_CN 尺寸\r\n * @en_US Size\r\n */\r\n @Input() @XWithConfig<XSize>(X_CONFIG_NAME, 'medium') size!: XSize;\r\n /**\r\n * @zh_CN 显示边框\r\n * @en_US Display Border\r\n */\r\n @Input() @XInputBoolean() @XWithConfig<XBoolean>(X_CONFIG_NAME, true) bordered!: XBoolean;\r\n /**\r\n * @zh_CN 匹配区分大小写\r\n * @en_US Case-sensitive\r\n */\r\n @Input() @XInputBoolean() @XWithConfig<XBoolean>(X_CONFIG_NAME, true) caseSensitive!: XBoolean;\r\n /**\r\n * @zh_CN 选择节点事件\r\n * @en_US Node click event\r\n */\r\n @Output() nodeEmit = new EventEmitter<XAutoCompleteNode>();\r\n}\r\n\r\n/**\r\n * AutoComplete Option\r\n * @undocument true\r\n */\r\nexport interface XAutoCompleteOption extends XFormOption {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n data?: XData<XAutoCompleteNode>;\r\n /**\r\n * @zh_CN 输入延迟执行时间,ms\r\n * @en_US Enter a delay execution time, ms\r\n */\r\n debounceTime?: number;\r\n /**\r\n * @zh_CN 展示方位\r\n * @en_US Display position\r\n */\r\n placement?: XPositionTopBottom;\r\n /**\r\n * @zh_CN 节点模板\r\n * @en_US Node template\r\n */\r\n nodeTpl?: TemplateRef<any>;\r\n /**\r\n * @zh_CN 选择节点事件\r\n * @en_US Node click event\r\n */\r\n nodeClick?: (value: XAutoCompleteNode) => void;\r\n}\r\n\r\n/**\r\n * @zh_CN AutoComplete 数据对象\r\n * @en_US AutoComplete data object\r\n */\r\nexport interface XAutoCompleteNode extends XParentIdentityProperty<XAutoCompleteNode> {}\r\n\r\n/**\r\n * AutoComplete Portal\r\n * @selector x-auto-complete-portal\r\n * @decorator component\r\n */\r\nexport const XAutoCompletePortalPrefix = 'x-auto-complete-portal';\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n OnInit,\r\n OnDestroy,\r\n Renderer2,\r\n HostBinding,\r\n HostListener,\r\n ViewChild,\r\n TemplateRef\r\n} from '@angular/core';\r\nimport { XAutoCompleteNode, XAutoCompletePortalPrefix } from './auto-complete.property';\r\nimport { Subject } from 'rxjs';\r\nimport { XConnectBaseAnimation, XNumber, XPositionTopBottom } from '@ng-nest/ui/core';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { XListComponent } from '@ng-nest/ui/list';\r\nimport { XInputComponent } from '@ng-nest/ui/input';\r\n\r\n@Component({\r\n selector: `${XAutoCompletePortalPrefix}`,\r\n templateUrl: './auto-complete-portal.component.html',\r\n styleUrls: ['./auto-complete-portal.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [XConnectBaseAnimation]\r\n})\r\nexport class XAutoCompletePortalComponent implements OnInit, OnDestroy {\r\n @HostBinding('@x-connect-base-animation') public placement!: XPositionTopBottom;\r\n @HostListener('@x-connect-base-animation.done', ['$event']) done(event: { toState: any }) {\r\n this.animating(false);\r\n event.toState === 'void' && this.destroyPortal();\r\n }\r\n @HostListener('@x-connect-base-animation.start', ['$event']) start(event: { toState: any }) {\r\n this.animating(true);\r\n }\r\n @ViewChild('list') list!: XListComponent;\r\n\r\n data!: XAutoCompleteNode[];\r\n value: any;\r\n valueChange!: Subject<any>;\r\n positionChange!: Subject<any>;\r\n dataChange!: Subject<XAutoCompleteNode[]>;\r\n animating!: Function;\r\n destroyPortal!: Function;\r\n closeSubject!: Subject<void>;\r\n keydownSubject!: Subject<KeyboardEvent>;\r\n nodeEmit!: Function;\r\n multiple: XNumber = 1;\r\n nodeTpl!: TemplateRef<any>;\r\n show: boolean = false;\r\n active: number = -1;\r\n inputCom!: XInputComponent;\r\n private _unSubject = new Subject<void>();\r\n\r\n constructor(public renderer: Renderer2, public cdr: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {\r\n this.valueChange.pipe(takeUntil(this._unSubject)).subscribe((x) => {\r\n this.value = x;\r\n this.cdr.detectChanges();\r\n });\r\n this.positionChange.pipe(takeUntil(this._unSubject)).subscribe((x) => {\r\n this.placement = x;\r\n this.cdr.detectChanges();\r\n });\r\n this.dataChange.pipe(takeUntil(this._unSubject)).subscribe((x) => {\r\n this.data = x;\r\n this.cdr.detectChanges();\r\n });\r\n this.closeSubject.pipe(takeUntil(this._unSubject)).subscribe((x) => {\r\n this.list.setUnActive(this.active);\r\n });\r\n this.keydownSubject.pipe(takeUntil(this._unSubject)).subscribe((x) => {\r\n this.list.keydown(x);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n stopPropagation(event: Event): void {\r\n event.stopPropagation();\r\n }\r\n\r\n nodeClick(node: XAutoCompleteNode) {\r\n this.nodeEmit(node);\r\n }\r\n\r\n onActive(num: number) {\r\n this.active = num;\r\n }\r\n\r\n onTabOut() {\r\n this.closeSubject.next();\r\n }\r\n}\r\n","<div #autoCompletePortal class=\"x-auto-complete-portal\" tabindex=\"-1\" (click)=\"inputCom.inputFocus(); stopPropagation($event)\">\r\n <x-list\r\n #list\r\n [data]=\"data\"\r\n (nodeClick)=\"nodeClick($event)\"\r\n (keyManagerChange)=\"onActive($event)\"\r\n (keyManagerTabOut)=\"onTabOut()\"\r\n [nodeTpl]=\"nodeTpl\"\r\n [scrollElement]=\"autoCompletePortal\"\r\n ></x-list>\r\n</div>\r\n","import { Subject } from 'rxjs';\r\nimport {\r\n Component,\r\n OnInit,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Renderer2,\r\n ElementRef,\r\n SimpleChanges,\r\n OnChanges,\r\n ViewContainerRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { XAutoCompleteNode, XAutoCompleteProperty, XAutoCompletePrefix } from './auto-complete.property';\r\nimport {\r\n XIsEmpty,\r\n XIsObservable,\r\n XIsChange,\r\n XSetData,\r\n XClearClass,\r\n XConfigService,\r\n XPositionTopBottom,\r\n XIsFunction\r\n} from '@ng-nest/ui/core';\r\nimport { XPortalService, XPortalOverlayRef, XPortalConnectedPosition } from '@ng-nest/ui/portal';\r\nimport { XInputComponent } from '@ng-nest/ui/input';\r\nimport { XAutoCompletePortalComponent } from './auto-complete-portal.component';\r\nimport { Overlay, FlexibleConnectedPositionStrategy, ConnectedOverlayPositionChange, OverlayConfig } from '@angular/cdk/overlay';\r\nimport { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';\r\nimport { DOWN_ARROW, UP_ARROW, ENTER, MAC_ENTER, ESCAPE } from '@angular/cdk/keycodes';\r\nimport { XValueAccessor } from '@ng-nest/ui/base-form';\r\n\r\n@Component({\r\n selector: `${XAutoCompletePrefix}`,\r\n templateUrl: './auto-complete.component.html',\r\n styleUrls: ['./auto-complete.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [XValueAccessor(XAutoCompleteComponent)]\r\n})\r\nexport class XAutoCompleteComponent extends XAutoCompleteProperty implements OnInit, OnChanges {\r\n @ViewChild('inputCom', { static: true }) inputCom!: XInputComponent;\r\n @ViewChild('autoComplete', { static: true }) autoComplete!: ElementRef;\r\n\r\n writeValue(value: any) {\r\n this.value = value;\r\n this.valueChange.next(this.value);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n clearable: boolean = false;\r\n enter: boolean = false;\r\n displayValue: any = '';\r\n nodes: XAutoCompleteNode[] = [];\r\n searchNodes: XAutoCompleteNode[] = [];\r\n cloneNodes!: XAutoCompleteNode[];\r\n portal!: XPortalOverlayRef<XAutoCompletePortalComponent>;\r\n icon: string = '';\r\n iconSpin: boolean = false;\r\n box!: DOMRect;\r\n protalHeight!: number;\r\n maxNodes: number = 6;\r\n protalTobottom: boolean = true;\r\n asyncLoading = false;\r\n animating = false;\r\n\r\n valueTplContext: { $node: any; $isValue: boolean } = { $node: null, $isValue: true };\r\n valueChange: Subject<any> = new Subject();\r\n positionChange: Subject<any> = new Subject();\r\n dataChange: Subject<XAutoCompleteNode[]> = new Subject();\r\n inputChange: Subject<any> = new Subject();\r\n closeSubject: Subject<any> = new Subject();\r\n keydownSubject: Subject<KeyboardEvent> = new Subject();\r\n private _unSubject = new Subject<void>();\r\n\r\n constructor(\r\n public renderer: Renderer2,\r\n private cdr: ChangeDetectorRef,\r\n private portalService: XPortalService,\r\n private viewContainerRef: ViewContainerRef,\r\n private overlay: Overlay,\r\n public configService: XConfigService\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.setFlex(this.autoComplete.nativeElement, this.renderer, this.justify, this.align, this.direction);\r\n this.setClassMap();\r\n this.setSubject();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n XIsChange(changes.data) && this.setData();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.setPortal();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n setClassMap() {\r\n XClearClass(this.labelMap);\r\n this.labelMap[`x-text-align-${this.labelAlign}`] = this.labelAlign ? true : false;\r\n }\r\n\r\n setData() {\r\n if (XIsObservable(this.data) || XIsFunction(this.data)) return;\r\n XSetData<XAutoCompleteNode>(this.data, this._unSubject).subscribe((x) => {\r\n this.nodes = x;\r\n this.setPortal();\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n\r\n setSubject() {\r\n this.closeSubject.pipe(takeUntil(this._unSubject)).subscribe((x) => {\r\n this.closePortal();\r\n });\r\n this.inputChange.pipe(debounceTime(this.debounceTime as number), distinctUntilChanged(), takeUntil(this._unSubject)).subscribe((x) => {\r\n this.modelChange(x);\r\n });\r\n this.keydownSubject.pipe(takeUntil(this._unSubject)).subscribe((x) => {\r\n const keyCode = x.keyCode;\r\n if (!this.portalAttached() && [DOWN_ARROW, UP_ARROW, ENTER, MAC_ENTER].includes(keyCode)) {\r\n this.inputChange.next(this.value);\r\n }\r\n if (this.portalAttached() && [ESCAPE].includes(keyCode)) {\r\n this.closeSubject.next();\r\n }\r\n });\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.active = false;\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 showPortal() {\r\n if (XIsEmpty(this.value) || this.disabled || this.iconSpin || this.animating) return;\r\n this.active = true;\r\n if ((XIsObservable(this.data) && this.nodes.length === 0) || XIsFunction(this.data)) {\r\n this.icon = 'fto-loader';\r\n this.iconSpin = true;\r\n this.cdr.detectChanges();\r\n XSetData<XAutoCompleteNode>(this.data, this._unSubject, true, this.value).subscribe((x) => {\r\n this.nodes = x;\r\n this.createPortal();\r\n this.icon = '';\r\n this.iconSpin = false;\r\n this.cdr.detectChanges();\r\n });\r\n } else {\r\n this.createPortal();\r\n }\r\n }\r\n\r\n createPortal() {\r\n this.nodes.filter((x) => x.selected).map((x) => (x.selected = false));\r\n if (!XIsEmpty(this.value)) {\r\n this.searchNodes = this.nodes.filter((x) => x.label.indexOf(this.value) >= 0);\r\n }\r\n this.box = this.inputCom.inputRef.nativeElement.getBoundingClientRect();\r\n const config: OverlayConfig = {\r\n backdropClass: '',\r\n width: this.box.width,\r\n positionStrategy: this.setPlacement(),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition()\r\n };\r\n this.setPosition(config);\r\n this.portal = this.portalService.attach({\r\n content: XAutoCompletePortalComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: config\r\n });\r\n this.portal.overlayRef\r\n ?.outsidePointerEvents()\r\n .pipe(takeUntil(this._unSubject))\r\n .subscribe(() => {\r\n this.closeSubject.next();\r\n });\r\n this.setInstance();\r\n }\r\n\r\n setPosition(config: OverlayConfig) {\r\n let position = config.positionStrategy as FlexibleConnectedPositionStrategy;\r\n position.positionChanges.pipe(takeUntil(this._unSubject)).subscribe((pos: ConnectedOverlayPositionChange) => {\r\n const place = XPortalConnectedPosition.get(pos.connectionPair) as XPositionTopBottom;\r\n place !== this.placement && this.positionChange.next(place);\r\n });\r\n }\r\n\r\n setInstance() {\r\n let componentRef = this.portal.componentRef;\r\n if (!componentRef) return;\r\n Object.assign(componentRef.instance, {\r\n data: this.searchNodes,\r\n value: this.value,\r\n placement: this.placement,\r\n nodeTpl: this.nodeTpl,\r\n valueChange: this.valueChange,\r\n dataChange: this.dataChange,\r\n positionChange: this.positionChange,\r\n closeSubject: this.closeSubject,\r\n keydownSubject: this.keydownSubject,\r\n inputCom: this.inputCom,\r\n destroyPortal: () => this.destroyPortal(),\r\n nodeEmit: (node: XAutoCompleteNode) => this.onNodeClick(node),\r\n animating: (ing: boolean) => (this.animating = ing)\r\n });\r\n componentRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n onNodeClick(node: XAutoCompleteNode | XAutoCompleteNode[]) {\r\n node = node as XAutoCompleteNode;\r\n this.closeSubject.next();\r\n if (this.value === node.label) {\r\n this.nodeEmit.emit(node);\r\n return;\r\n }\r\n this.value = node.label;\r\n this.valueTplContext.$node = node;\r\n this.inputCom.inputFocus();\r\n if (this.onChange) this.onChange(this.value);\r\n this.nodeEmit.emit(node);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n setPlacement() {\r\n return this.portalService.setPlacement({\r\n elementRef: this.inputCom.inputRef,\r\n placement: [this.placement as XPositionTopBottom, 'bottom-start', 'bottom-end', 'top-start', 'top-end'],\r\n transformOriginOn: 'x-auto-complete-portal'\r\n });\r\n }\r\n\r\n setPortal() {\r\n this.portalAttached() && this.portal?.overlayRef?.updatePositionStrategy(this.setPlacement());\r\n }\r\n\r\n modelChange(value: string | number) {\r\n if (this.onChange) this.onChange(value);\r\n if (XIsFunction(this.data)) {\r\n if (!this.portalAttached()) {\r\n this.showPortal();\r\n } else {\r\n if (XIsEmpty(value)) {\r\n this.closeSubject.next();\r\n } else {\r\n this.icon = 'fto-loader';\r\n this.iconSpin = true;\r\n this.cdr.detectChanges();\r\n XSetData<XAutoCompleteNode>(this.data, this._unSubject, true, value as any).subscribe((x) => {\r\n this.nodes = x;\r\n this.icon = '';\r\n this.iconSpin = false;\r\n this.dataChange.next(this.nodes);\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n }\r\n return;\r\n }\r\n if (this.nodes) {\r\n if (!this.portalAttached()) {\r\n this.showPortal();\r\n } else {\r\n if (XIsEmpty(value)) {\r\n this.closeSubject.next();\r\n } else {\r\n if (this.caseSensitive) {\r\n this.searchNodes = this.nodes.filter((x) => x.label.indexOf(value) >= 0);\r\n } else {\r\n this.searchNodes = this.nodes.filter((x) => (x.label as string).toLowerCase().indexOf((value as string).toLowerCase()) >= 0);\r\n }\r\n this.dataChange.next(this.searchNodes);\r\n }\r\n }\r\n }\r\n }\r\n\r\n clearEmit() {\r\n this.value = '';\r\n this.displayValue = '';\r\n this.valueTplContext.$node = null;\r\n this.valueChange.next(this.value);\r\n this.modelChange(this.value);\r\n }\r\n\r\n formControlChanges() {\r\n this.setData();\r\n this.ngOnInit();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n onKeydown($event: KeyboardEvent) {\r\n this.keydownSubject.next($event);\r\n }\r\n\r\n onFocus($event: Event) {}\r\n\r\n onInput($event: Event) {\r\n this.inputChange.next(this.value);\r\n }\r\n\r\n onBlur($event: Event) {}\r\n}\r\n","<div #autoComplete class=\"x-auto-complete\">\r\n <div class=\"x-auto-complete-row\">\r\n <x-input\r\n #inputCom\r\n type=\"text\"\r\n [label]=\"label\"\r\n [labelWidth]=\"labelWidth\"\r\n [labelAlign]=\"labelAlign\"\r\n [justify]=\"justify\"\r\n [align]=\"align\"\r\n [direction]=\"direction\"\r\n [disabled]=\"disabled\"\r\n [required]=\"required\"\r\n [icon]=\"icon\"\r\n [iconSpin]=\"iconSpin\"\r\n [placeholder]=\"placeholder\"\r\n [readonly]=\"readonly\"\r\n [clearable]=\"clearable\"\r\n [(ngModel)]=\"value\"\r\n [valueTpl]=\"valueTpl\"\r\n [valueTplContext]=\"valueTplContext\"\r\n [size]=\"size\"\r\n [bordered]=\"bordered\"\r\n [before]=\"before\"\r\n [after]=\"after\"\r\n [pattern]=\"pattern\"\r\n [message]=\"message\"\r\n [pointer]=\"pointer\"\r\n [(active)]=\"active\"\r\n (clearEmit)=\"clearEmit()\"\r\n (xInput)=\"onInput($event)\"\r\n (xKeydown)=\"onKeydown($event)\"\r\n (xFocus)=\"onFocus($event)\"\r\n (xBlur)=\"onBlur($event)\"\r\n (xClick)=\"showPortal()\"\r\n ></x-input>\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { XAutoCompleteComponent } from './auto-complete.component';\r\nimport { XInputModule } from '@ng-nest/ui/input';\r\nimport { XPortalModule } from '@ng-nest/ui/portal';\r\nimport { XListModule } from '@ng-nest/ui/list';\r\nimport { XBaseFormModule } from '@ng-nest/ui/base-form';\r\nimport { XAutoCompletePortalComponent } from './auto-complete-portal.component';\r\nimport { XAutoCompleteProperty } from './auto-complete.property';\r\n\r\n@NgModule({\r\n declarations: [XAutoCompleteComponent, XAutoCompletePortalComponent, XAutoCompleteProperty],\r\n exports: [XAutoCompleteComponent, XAutoCompletePortalComponent],\r\n imports: [CommonModule, FormsModule, ReactiveFormsModule, XPortalModule, XInputModule, XListModule, XBaseFormModule],\r\n entryComponents: [XAutoCompletePortalComponent]\r\n})\r\nexport class XAutoCompleteModule {}\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-auto-complete.js","sources":["../../../../lib/ng-nest/ui/auto-complete/auto-complete.property.ts","../../../../lib/ng-nest/ui/auto-complete/auto-complete-portal.component.ts","../../../../lib/ng-nest/ui/auto-complete/auto-complete-portal.component.html","../../../../lib/ng-nest/ui/auto-complete/auto-complete.component.ts","../../../../lib/ng-nest/ui/auto-complete/auto-complete.component.html","../../../../lib/ng-nest/ui/auto-complete/auto-complete.module.ts","../../../../lib/ng-nest/ui/auto-complete/ng-nest-ui-auto-complete.ts"],"sourcesContent":["import {\r\n XParentIdentityProperty,\r\n XDataConvert,\r\n XData,\r\n XWithConfig,\r\n XPositionTopBottom,\r\n XSize,\r\n XInputBoolean,\r\n XBoolean\r\n} from '@ng-nest/ui/core';\r\nimport { Input, Component, TemplateRef, EventEmitter, Output } from '@angular/core';\r\nimport { XControlValueAccessor, XFormOption } from '@ng-nest/ui/base-form';\r\n\r\n/**\r\n * AutoComplete\r\n * @selector x-auto-complete\r\n * @decorator component\r\n */\r\nexport const XAutoCompletePrefix = 'x-auto-complete';\r\nconst X_CONFIG_NAME = 'autoComplete';\r\n\r\n/**\r\n * AutoComplete Property\r\n */\r\n@Component({ template: '' })\r\nexport class XAutoCompleteProperty extends XControlValueAccessor<any> {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n @Input() @XDataConvert() data: XData<XAutoCompleteNode> = [];\r\n /**\r\n * @zh_CN 输入延迟执行时间,ms\r\n * @en_US Enter a delay execution time, ms\r\n */\r\n @Input() @XWithConfig<number>(X_CONFIG_NAME, 200) debounceTime?: number;\r\n /**\r\n * @zh_CN 展示方位\r\n * @en_US Display position\r\n */\r\n @Input() @XWithConfig<XPositionTopBottom>(X_CONFIG_NAME, 'bottom') placement?: XPositionTopBottom;\r\n /**\r\n * @zh_CN 节点模板\r\n * @en_US Node template\r\n */\r\n @Input() nodeTpl?: TemplateRef<any>;\r\n /**\r\n * @zh_CN 尺寸\r\n * @en_US Size\r\n */\r\n @Input() @XWithConfig<XSize>(X_CONFIG_NAME, 'medium') size!: XSize;\r\n /**\r\n * @zh_CN 显示边框\r\n * @en_US Display Border\r\n */\r\n @Input() @XInputBoolean() @XWithConfig<XBoolean>(X_CONFIG_NAME, true) bordered!: XBoolean;\r\n /**\r\n * @zh_CN 匹配区分大小写\r\n * @en_US Case-sensitive\r\n */\r\n @Input() @XInputBoolean() @XWithConfig<XBoolean>(X_CONFIG_NAME, true) caseSensitive!: XBoolean;\r\n /**\r\n * @zh_CN 选择节点事件\r\n * @en_US Node click event\r\n */\r\n @Output() nodeEmit = new EventEmitter<XAutoCompleteNode>();\r\n}\r\n\r\n/**\r\n * AutoComplete Option\r\n * @undocument true\r\n */\r\nexport interface XAutoCompleteOption extends XFormOption {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n data?: XData<XAutoCompleteNode>;\r\n /**\r\n * @zh_CN 输入延迟执行时间,ms\r\n * @en_US Enter a delay execution time, ms\r\n */\r\n debounceTime?: number;\r\n /**\r\n * @zh_CN 展示方位\r\n * @en_US Display position\r\n */\r\n placement?: XPositionTopBottom;\r\n /**\r\n * @zh_CN 节点模板\r\n * @en_US Node template\r\n */\r\n nodeTpl?: TemplateRef<any>;\r\n /**\r\n * @zh_CN 选择节点事件\r\n * @en_US Node click event\r\n */\r\n nodeClick?: (value: XAutoCompleteNode) => void;\r\n}\r\n\r\n/**\r\n * @zh_CN AutoComplete 数据对象\r\n * @en_US AutoComplete data object\r\n */\r\nexport interface XAutoCompleteNode extends XParentIdentityProperty<XAutoCompleteNode> {}\r\n\r\n/**\r\n * AutoComplete Portal\r\n * @selector x-auto-complete-portal\r\n * @decorator component\r\n */\r\nexport const XAutoCompletePortalPrefix = 'x-auto-complete-portal';\r\n","import {\r\n Component,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n OnInit,\r\n OnDestroy,\r\n Renderer2,\r\n HostBinding,\r\n HostListener,\r\n ViewChild,\r\n TemplateRef\r\n} from '@angular/core';\r\nimport { XAutoCompleteNode, XAutoCompletePortalPrefix } from './auto-complete.property';\r\nimport { Subject } from 'rxjs';\r\nimport { XConnectBaseAnimation, XNumber, XPositionTopBottom } from '@ng-nest/ui/core';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { XListComponent } from '@ng-nest/ui/list';\r\nimport { XInputComponent } from '@ng-nest/ui/input';\r\n\r\n@Component({\r\n selector: `${XAutoCompletePortalPrefix}`,\r\n templateUrl: './auto-complete-portal.component.html',\r\n styleUrls: ['./auto-complete-portal.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n animations: [XConnectBaseAnimation]\r\n})\r\nexport class XAutoCompletePortalComponent implements OnInit, OnDestroy {\r\n @HostBinding('@x-connect-base-animation') public placement!: XPositionTopBottom;\r\n @HostListener('@x-connect-base-animation.done', ['$event']) done(event: { toState: any }) {\r\n this.animating(false);\r\n event.toState === 'void' && this.destroyPortal();\r\n }\r\n @HostListener('@x-connect-base-animation.start', ['$event']) start() {\r\n this.animating(true);\r\n }\r\n @ViewChild('list') list!: XListComponent;\r\n\r\n data!: XAutoCompleteNode[];\r\n value: any;\r\n valueChange!: Subject<any>;\r\n positionChange!: Subject<any>;\r\n dataChange!: Subject<XAutoCompleteNode[]>;\r\n animating!: Function;\r\n destroyPortal!: Function;\r\n closeSubject!: Subject<void>;\r\n keydownSubject!: Subject<KeyboardEvent>;\r\n nodeEmit!: Function;\r\n multiple: XNumber = 1;\r\n nodeTpl!: TemplateRef<any>;\r\n show: boolean = false;\r\n active: number = -1;\r\n inputCom!: XInputComponent;\r\n private _unSubject = new Subject<void>();\r\n\r\n constructor(public renderer: Renderer2, public cdr: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {\r\n this.valueChange.pipe(takeUntil(this._unSubject)).subscribe((x) => {\r\n this.value = x;\r\n this.cdr.detectChanges();\r\n });\r\n this.positionChange.pipe(takeUntil(this._unSubject)).subscribe((x) => {\r\n this.placement = x;\r\n this.cdr.detectChanges();\r\n });\r\n this.dataChange.pipe(takeUntil(this._unSubject)).subscribe((x) => {\r\n this.data = x;\r\n this.cdr.detectChanges();\r\n });\r\n this.closeSubject.pipe(takeUntil(this._unSubject)).subscribe(() => {\r\n this.list.setUnActive(this.active);\r\n });\r\n this.keydownSubject.pipe(takeUntil(this._unSubject)).subscribe((x) => {\r\n this.list.keydown(x);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n stopPropagation(event: Event): void {\r\n event.stopPropagation();\r\n }\r\n\r\n nodeClick(node: XAutoCompleteNode) {\r\n this.nodeEmit(node);\r\n }\r\n\r\n onActive(num: number) {\r\n this.active = num;\r\n }\r\n\r\n onTabOut() {\r\n this.closeSubject.next();\r\n }\r\n}\r\n","<div #autoCompletePortal class=\"x-auto-complete-portal\" tabindex=\"-1\" (click)=\"inputCom.inputFocus(); stopPropagation($event)\">\r\n <x-list\r\n #list\r\n [data]=\"data\"\r\n (nodeClick)=\"nodeClick($event)\"\r\n (keyManagerChange)=\"onActive($event)\"\r\n (keyManagerTabOut)=\"onTabOut()\"\r\n [nodeTpl]=\"nodeTpl\"\r\n [scrollElement]=\"autoCompletePortal\"\r\n ></x-list>\r\n</div>\r\n","import { Subject } from 'rxjs';\r\nimport {\r\n Component,\r\n OnInit,\r\n ViewEncapsulation,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Renderer2,\r\n ElementRef,\r\n SimpleChanges,\r\n OnChanges,\r\n ViewContainerRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { XAutoCompleteNode, XAutoCompleteProperty, XAutoCompletePrefix } from './auto-complete.property';\r\nimport {\r\n XIsEmpty,\r\n XIsObservable,\r\n XIsChange,\r\n XSetData,\r\n XClearClass,\r\n XConfigService,\r\n XPositionTopBottom,\r\n XIsFunction\r\n} from '@ng-nest/ui/core';\r\nimport { XPortalService, XPortalOverlayRef, XPortalConnectedPosition } from '@ng-nest/ui/portal';\r\nimport { XInputComponent } from '@ng-nest/ui/input';\r\nimport { XAutoCompletePortalComponent } from './auto-complete-portal.component';\r\nimport { Overlay, FlexibleConnectedPositionStrategy, ConnectedOverlayPositionChange, OverlayConfig } from '@angular/cdk/overlay';\r\nimport { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';\r\nimport { DOWN_ARROW, UP_ARROW, ENTER, MAC_ENTER, ESCAPE } from '@angular/cdk/keycodes';\r\nimport { XValueAccessor } from '@ng-nest/ui/base-form';\r\n\r\n@Component({\r\n selector: `${XAutoCompletePrefix}`,\r\n templateUrl: './auto-complete.component.html',\r\n styleUrls: ['./auto-complete.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [XValueAccessor(XAutoCompleteComponent)]\r\n})\r\nexport class XAutoCompleteComponent extends XAutoCompleteProperty implements OnInit, OnChanges {\r\n @ViewChild('inputCom', { static: true }) inputCom!: XInputComponent;\r\n @ViewChild('autoComplete', { static: true }) autoComplete!: ElementRef;\r\n\r\n writeValue(value: any) {\r\n this.value = value;\r\n this.valueChange.next(this.value);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n clearable: boolean = false;\r\n enter: boolean = false;\r\n displayValue: any = '';\r\n nodes: XAutoCompleteNode[] = [];\r\n searchNodes: XAutoCompleteNode[] = [];\r\n cloneNodes!: XAutoCompleteNode[];\r\n portal!: XPortalOverlayRef<XAutoCompletePortalComponent>;\r\n icon: string = '';\r\n iconSpin: boolean = false;\r\n box!: DOMRect;\r\n protalHeight!: number;\r\n maxNodes: number = 6;\r\n protalTobottom: boolean = true;\r\n asyncLoading = false;\r\n animating = false;\r\n\r\n valueTplContext: { $node: any; $isValue: boolean } = { $node: null, $isValue: true };\r\n valueChange: Subject<any> = new Subject();\r\n positionChange: Subject<any> = new Subject();\r\n dataChange: Subject<XAutoCompleteNode[]> = new Subject();\r\n inputChange: Subject<any> = new Subject();\r\n closeSubject: Subject<void> = new Subject();\r\n keydownSubject: Subject<KeyboardEvent> = new Subject();\r\n private _unSubject = new Subject<void>();\r\n\r\n constructor(\r\n public renderer: Renderer2,\r\n private cdr: ChangeDetectorRef,\r\n private portalService: XPortalService,\r\n private viewContainerRef: ViewContainerRef,\r\n private overlay: Overlay,\r\n public configService: XConfigService\r\n ) {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.setFlex(this.autoComplete.nativeElement, this.renderer, this.justify, this.align, this.direction);\r\n this.setClassMap();\r\n this.setSubject();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const { data } = changes;\r\n XIsChange(data) && this.setData();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.setPortal();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._unSubject.next();\r\n this._unSubject.unsubscribe();\r\n }\r\n\r\n setClassMap() {\r\n XClearClass(this.labelMap);\r\n this.labelMap[`x-text-align-${this.labelAlign}`] = this.labelAlign ? true : false;\r\n }\r\n\r\n setData() {\r\n if (XIsObservable(this.data) || XIsFunction(this.data)) return;\r\n XSetData<XAutoCompleteNode>(this.data, this._unSubject).subscribe((x) => {\r\n this.nodes = x;\r\n this.setPortal();\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n\r\n setSubject() {\r\n this.closeSubject.pipe(takeUntil(this._unSubject)).subscribe(() => {\r\n this.closePortal();\r\n });\r\n this.inputChange.pipe(debounceTime(this.debounceTime as number), distinctUntilChanged(), takeUntil(this._unSubject)).subscribe((x) => {\r\n this.modelChange(x);\r\n });\r\n this.keydownSubject.pipe(takeUntil(this._unSubject)).subscribe((x) => {\r\n const keyCode = x.keyCode;\r\n if (!this.portalAttached() && [DOWN_ARROW, UP_ARROW, ENTER, MAC_ENTER].includes(keyCode)) {\r\n this.inputChange.next(this.value);\r\n }\r\n if (this.portalAttached() && [ESCAPE].includes(keyCode)) {\r\n this.closeSubject.next();\r\n }\r\n });\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.active = false;\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 showPortal() {\r\n if (XIsEmpty(this.value) || this.disabled || this.iconSpin || this.animating) return;\r\n this.active = true;\r\n if ((XIsObservable(this.data) && this.nodes.length === 0) || XIsFunction(this.data)) {\r\n this.icon = 'fto-loader';\r\n this.iconSpin = true;\r\n this.cdr.detectChanges();\r\n XSetData<XAutoCompleteNode>(this.data, this._unSubject, true, this.value).subscribe((x) => {\r\n this.nodes = x;\r\n this.createPortal();\r\n this.icon = '';\r\n this.iconSpin = false;\r\n this.cdr.detectChanges();\r\n });\r\n } else {\r\n this.createPortal();\r\n }\r\n }\r\n\r\n createPortal() {\r\n this.nodes.filter((x) => x.selected).map((x) => (x.selected = false));\r\n if (!XIsEmpty(this.value)) {\r\n this.searchNodes = this.nodes.filter((x) => x.label.indexOf(this.value) >= 0);\r\n }\r\n this.box = this.inputCom.inputRef.nativeElement.getBoundingClientRect();\r\n const config: OverlayConfig = {\r\n backdropClass: '',\r\n width: this.box.width,\r\n positionStrategy: this.setPlacement(),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition()\r\n };\r\n this.setPosition(config);\r\n this.portal = this.portalService.attach({\r\n content: XAutoCompletePortalComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n overlayConfig: config\r\n });\r\n this.portal.overlayRef\r\n ?.outsidePointerEvents()\r\n .pipe(takeUntil(this._unSubject))\r\n .subscribe(() => {\r\n this.closeSubject.next();\r\n });\r\n this.setInstance();\r\n }\r\n\r\n setPosition(config: OverlayConfig) {\r\n let position = config.positionStrategy as FlexibleConnectedPositionStrategy;\r\n position.positionChanges.pipe(takeUntil(this._unSubject)).subscribe((pos: ConnectedOverlayPositionChange) => {\r\n const place = XPortalConnectedPosition.get(pos.connectionPair) as XPositionTopBottom;\r\n place !== this.placement && this.positionChange.next(place);\r\n });\r\n }\r\n\r\n setInstance() {\r\n let componentRef = this.portal.componentRef;\r\n if (!componentRef) return;\r\n Object.assign(componentRef.instance, {\r\n data: this.searchNodes,\r\n value: this.value,\r\n placement: this.placement,\r\n nodeTpl: this.nodeTpl,\r\n valueChange: this.valueChange,\r\n dataChange: this.dataChange,\r\n positionChange: this.positionChange,\r\n closeSubject: this.closeSubject,\r\n keydownSubject: this.keydownSubject,\r\n inputCom: this.inputCom,\r\n destroyPortal: () => this.destroyPortal(),\r\n nodeEmit: (node: XAutoCompleteNode) => this.onNodeClick(node),\r\n animating: (ing: boolean) => (this.animating = ing)\r\n });\r\n componentRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n onNodeClick(node: XAutoCompleteNode | XAutoCompleteNode[]) {\r\n node = node as XAutoCompleteNode;\r\n this.closeSubject.next();\r\n if (this.value === node.label) {\r\n this.nodeEmit.emit(node);\r\n return;\r\n }\r\n this.value = node.label;\r\n this.valueTplContext.$node = node;\r\n this.inputCom.inputFocus();\r\n if (this.onChange) this.onChange(this.value);\r\n this.nodeEmit.emit(node);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n setPlacement() {\r\n return this.portalService.setPlacement({\r\n elementRef: this.inputCom.inputRef,\r\n placement: [this.placement as XPositionTopBottom, 'bottom-start', 'bottom-end', 'top-start', 'top-end'],\r\n transformOriginOn: 'x-auto-complete-portal'\r\n });\r\n }\r\n\r\n setPortal() {\r\n this.portalAttached() && this.portal?.overlayRef?.updatePositionStrategy(this.setPlacement());\r\n }\r\n\r\n modelChange(value: string | number) {\r\n if (this.onChange) this.onChange(value);\r\n if (XIsFunction(this.data)) {\r\n if (!this.portalAttached()) {\r\n this.showPortal();\r\n } else {\r\n if (XIsEmpty(value)) {\r\n this.closeSubject.next();\r\n } else {\r\n this.icon = 'fto-loader';\r\n this.iconSpin = true;\r\n this.cdr.detectChanges();\r\n XSetData<XAutoCompleteNode>(this.data, this._unSubject, true, value as any).subscribe((x) => {\r\n this.nodes = x;\r\n this.icon = '';\r\n this.iconSpin = false;\r\n this.dataChange.next(this.nodes);\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n }\r\n return;\r\n }\r\n if (this.nodes) {\r\n if (!this.portalAttached()) {\r\n this.showPortal();\r\n } else {\r\n if (XIsEmpty(value)) {\r\n this.closeSubject.next();\r\n } else {\r\n if (this.caseSensitive) {\r\n this.searchNodes = this.nodes.filter((x) => x.label.indexOf(value) >= 0);\r\n } else {\r\n this.searchNodes = this.nodes.filter((x) => (x.label as string).toLowerCase().indexOf((value as string).toLowerCase()) >= 0);\r\n }\r\n this.dataChange.next(this.searchNodes);\r\n }\r\n }\r\n }\r\n }\r\n\r\n clearEmit() {\r\n this.value = '';\r\n this.displayValue = '';\r\n this.valueTplContext.$node = null;\r\n this.valueChange.next(this.value);\r\n this.modelChange(this.value);\r\n }\r\n\r\n formControlChanges() {\r\n this.setData();\r\n this.ngOnInit();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n onKeydown($event: KeyboardEvent) {\r\n this.keydownSubject.next($event);\r\n }\r\n\r\n onFocus($event: Event) {}\r\n\r\n onInput($event: Event) {\r\n this.inputChange.next(this.value);\r\n }\r\n\r\n onBlur($event: Event) {}\r\n}\r\n","<div #autoComplete class=\"x-auto-complete\">\r\n <div class=\"x-auto-complete-row\">\r\n <x-input\r\n #inputCom\r\n type=\"text\"\r\n [label]=\"label\"\r\n [labelWidth]=\"labelWidth\"\r\n [labelAlign]=\"labelAlign\"\r\n [justify]=\"justify\"\r\n [align]=\"align\"\r\n [direction]=\"direction\"\r\n [disabled]=\"disabled\"\r\n [required]=\"required\"\r\n [icon]=\"icon\"\r\n [iconSpin]=\"iconSpin\"\r\n [placeholder]=\"placeholder\"\r\n [readonly]=\"readonly\"\r\n [clearable]=\"clearable\"\r\n [(ngModel)]=\"value\"\r\n [valueTpl]=\"valueTpl\"\r\n [valueTplContext]=\"valueTplContext\"\r\n [size]=\"size\"\r\n [bordered]=\"bordered\"\r\n [before]=\"before\"\r\n [after]=\"after\"\r\n [pattern]=\"pattern\"\r\n [message]=\"message\"\r\n [pointer]=\"pointer\"\r\n [(active)]=\"active\"\r\n (clearEmit)=\"clearEmit()\"\r\n (xInput)=\"onInput($event)\"\r\n (xKeydown)=\"onKeydown($event)\"\r\n (xFocus)=\"onFocus($event)\"\r\n (xBlur)=\"onBlur($event)\"\r\n (xClick)=\"showPortal()\"\r\n ></x-input>\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { XAutoCompleteComponent } from './auto-complete.component';\r\nimport { XInputModule } from '@ng-nest/ui/input';\r\nimport { XPortalModule } from '@ng-nest/ui/portal';\r\nimport { XListModule } from '@ng-nest/ui/list';\r\nimport { XBaseFormModule } from '@ng-nest/ui/base-form';\r\nimport { XAutoCompletePortalComponent } from './auto-complete-portal.component';\r\nimport { XAutoCompleteProperty } from './auto-complete.property';\r\n\r\n@NgModule({\r\n declarations: [XAutoCompleteComponent, XAutoCompletePortalComponent, XAutoCompleteProperty],\r\n exports: [XAutoCompleteComponent, XAutoCompletePortalComponent],\r\n imports: [CommonModule, FormsModule, ReactiveFormsModule, XPortalModule, XInputModule, XListModule, XBaseFormModule],\r\n entryComponents: [XAutoCompletePortalComponent]\r\n})\r\nexport class XAutoCompleteModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}