@delon/abc 15.2.1 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/auto-focus/auto-focus.directive.d.ts +1 -1
  2. package/avatar-list/avatar-list-item.component.d.ts +1 -1
  3. package/avatar-list/avatar-list.component.d.ts +1 -1
  4. package/count-down/count-down.component.d.ts +1 -1
  5. package/date-picker/range.directive.d.ts +1 -1
  6. package/down-file/down-file.directive.d.ts +1 -1
  7. package/ellipsis/ellipsis.component.d.ts +1 -1
  8. package/error-collect/error-collect.component.d.ts +1 -1
  9. package/esm2022/auto-focus/auto-focus.directive.mjs +51 -0
  10. package/esm2022/auto-focus/auto-focus.module.mjs +18 -0
  11. package/esm2022/avatar-list/avatar-list-item.component.mjs +27 -0
  12. package/esm2022/avatar-list/avatar-list.component.mjs +89 -0
  13. package/esm2022/avatar-list/avatar-list.module.mjs +23 -0
  14. package/esm2022/count-down/count-down.component.mjs +46 -0
  15. package/esm2022/count-down/count-down.module.mjs +21 -0
  16. package/esm2022/date-picker/date-picker.module.mjs +23 -0
  17. package/esm2022/date-picker/range-shortcut.component.mjs +41 -0
  18. package/esm2022/date-picker/range.directive.mjs +174 -0
  19. package/esm2022/down-file/down-file.directive.mjs +115 -0
  20. package/esm2022/down-file/down-file.module.mjs +21 -0
  21. package/esm2022/ellipsis/ellipsis.component.mjs +233 -0
  22. package/esm2022/ellipsis/ellipsis.module.mjs +22 -0
  23. package/esm2022/error-collect/error-collect.component.mjs +122 -0
  24. package/esm2022/error-collect/error-collect.module.mjs +21 -0
  25. package/esm2022/exception/exception.component.mjs +109 -0
  26. package/esm2022/exception/exception.module.mjs +24 -0
  27. package/esm2022/footer-toolbar/footer-toolbar.component.mjs +45 -0
  28. package/esm2022/footer-toolbar/footer-toolbar.module.mjs +22 -0
  29. package/esm2022/full-content/full-content-toggle.directive.mjs +25 -0
  30. package/esm2022/full-content/full-content.component.mjs +140 -0
  31. package/esm2022/full-content/full-content.module.mjs +21 -0
  32. package/esm2022/full-content/full-content.service.mjs +23 -0
  33. package/esm2022/global-footer/global-footer-item.component.mjs +31 -0
  34. package/esm2022/global-footer/global-footer.component.mjs +73 -0
  35. package/esm2022/global-footer/global-footer.module.mjs +22 -0
  36. package/esm2022/hotkey/hotkey.directive.mjs +37 -0
  37. package/esm2022/hotkey/hotkey.module.mjs +18 -0
  38. package/esm2022/let/let.directive.mjs +38 -0
  39. package/esm2022/let/let.module.mjs +18 -0
  40. package/esm2022/loading/loading.component.mjs +27 -0
  41. package/esm2022/loading/loading.module.mjs +24 -0
  42. package/esm2022/loading/loading.service.mjs +91 -0
  43. package/esm2022/lodop/lodop.module.mjs +13 -0
  44. package/esm2022/lodop/lodop.service.mjs +223 -0
  45. package/esm2022/media/media.component.mjs +118 -0
  46. package/esm2022/media/media.module.mjs +20 -0
  47. package/esm2022/media/media.service.mjs +47 -0
  48. package/esm2022/notice-icon/notice-icon-tab.component.mjs +35 -0
  49. package/esm2022/notice-icon/notice-icon.component.mjs +90 -0
  50. package/esm2022/notice-icon/notice-icon.module.mjs +59 -0
  51. package/esm2022/observers/observer-size.mjs +119 -0
  52. package/esm2022/onboarding/onboarding.component.mjs +135 -0
  53. package/esm2022/onboarding/onboarding.module.mjs +27 -0
  54. package/esm2022/onboarding/onboarding.service.mjs +186 -0
  55. package/esm2022/page-header/page-header.component.mjs +247 -0
  56. package/esm2022/page-header/page-header.module.mjs +25 -0
  57. package/esm2022/pdf/pdf.component.mjs +474 -0
  58. package/{esm2020 → esm2022}/pdf/pdf.config.mjs +2 -2
  59. package/esm2022/pdf/pdf.module.mjs +21 -0
  60. package/esm2022/qr/qr.component.mjs +137 -0
  61. package/esm2022/qr/qr.module.mjs +20 -0
  62. package/esm2022/quick-menu/quick-menu.component.mjs +90 -0
  63. package/esm2022/quick-menu/quick-menu.module.mjs +22 -0
  64. package/esm2022/result/result.component.mjs +61 -0
  65. package/esm2022/result/result.module.mjs +22 -0
  66. package/esm2022/reuse-tab/reuse-tab-context-menu.component.mjs +77 -0
  67. package/esm2022/reuse-tab/reuse-tab-context.component.mjs +34 -0
  68. package/esm2022/reuse-tab/reuse-tab-context.directive.mjs +36 -0
  69. package/esm2022/reuse-tab/reuse-tab-context.service.mjs +56 -0
  70. package/esm2022/reuse-tab/reuse-tab.component.mjs +368 -0
  71. package/esm2022/reuse-tab/reuse-tab.module.mjs +50 -0
  72. package/esm2022/reuse-tab/reuse-tab.service.mjs +559 -0
  73. package/esm2022/se/se-container.component.mjs +174 -0
  74. package/esm2022/se/se.component.mjs +235 -0
  75. package/esm2022/se/se.module.mjs +24 -0
  76. package/esm2022/sg/sg-container.component.mjs +53 -0
  77. package/esm2022/sg/sg.component.mjs +68 -0
  78. package/esm2022/sg/sg.module.mjs +21 -0
  79. package/esm2022/st/st-column-source.mjs +493 -0
  80. package/esm2022/st/st-data-source.mjs +480 -0
  81. package/esm2022/st/st-export.mjs +90 -0
  82. package/{esm2020 → esm2022}/st/st-filter.component.mjs +8 -7
  83. package/esm2022/st/st-row.directive.mjs +47 -0
  84. package/esm2022/st/st-widget-host.directive.mjs +32 -0
  85. package/esm2022/st/st-widget.mjs +27 -0
  86. package/esm2022/st/st.component.mjs +1004 -0
  87. package/esm2022/st/st.module.mjs +97 -0
  88. package/esm2022/sv/sv-container.component.mjs +127 -0
  89. package/esm2022/sv/sv-value.component.mjs +45 -0
  90. package/esm2022/sv/sv.component.mjs +120 -0
  91. package/esm2022/sv/sv.module.mjs +26 -0
  92. package/esm2022/tag-select/tag-select.component.mjs +64 -0
  93. package/esm2022/tag-select/tag-select.module.mjs +22 -0
  94. package/esm2022/xlsx/xlsx.directive.mjs +28 -0
  95. package/esm2022/xlsx/xlsx.module.mjs +20 -0
  96. package/esm2022/xlsx/xlsx.service.mjs +129 -0
  97. package/esm2022/zip/zip.module.mjs +16 -0
  98. package/esm2022/zip/zip.service.mjs +117 -0
  99. package/exception/exception.component.d.ts +1 -1
  100. package/{fesm2015 → fesm2022}/auto-focus.mjs +7 -7
  101. package/{fesm2015 → fesm2022}/auto-focus.mjs.map +1 -1
  102. package/{fesm2020 → fesm2022}/avatar-list.mjs +10 -10
  103. package/fesm2022/avatar-list.mjs.map +1 -0
  104. package/{fesm2020 → fesm2022}/chart-observer-size.mjs +10 -10
  105. package/fesm2022/chart-observer-size.mjs.map +1 -0
  106. package/{fesm2020 → fesm2022}/count-down.mjs +7 -7
  107. package/fesm2022/count-down.mjs.map +1 -0
  108. package/{fesm2020 → fesm2022}/date-picker.mjs +14 -13
  109. package/fesm2022/date-picker.mjs.map +1 -0
  110. package/{fesm2020 → fesm2022}/down-file.mjs +8 -8
  111. package/fesm2022/down-file.mjs.map +1 -0
  112. package/{fesm2020 → fesm2022}/ellipsis.mjs +7 -7
  113. package/fesm2022/ellipsis.mjs.map +1 -0
  114. package/{fesm2020 → fesm2022}/error-collect.mjs +9 -9
  115. package/fesm2022/error-collect.mjs.map +1 -0
  116. package/{fesm2020 → fesm2022}/exception.mjs +7 -7
  117. package/fesm2022/exception.mjs.map +1 -0
  118. package/{fesm2020 → fesm2022}/footer-toolbar.mjs +7 -7
  119. package/fesm2022/footer-toolbar.mjs.map +1 -0
  120. package/{fesm2020 → fesm2022}/full-content.mjs +13 -13
  121. package/fesm2022/full-content.mjs.map +1 -0
  122. package/{fesm2020 → fesm2022}/global-footer.mjs +10 -10
  123. package/fesm2022/global-footer.mjs.map +1 -0
  124. package/{fesm2020 → fesm2022}/hotkey.mjs +7 -7
  125. package/{fesm2015 → fesm2022}/hotkey.mjs.map +1 -1
  126. package/{fesm2020 → fesm2022}/let.mjs +9 -8
  127. package/fesm2022/let.mjs.map +1 -0
  128. package/{fesm2020 → fesm2022}/loading.mjs +10 -11
  129. package/fesm2022/loading.mjs.map +1 -0
  130. package/{fesm2020 → fesm2022}/lodop.mjs +7 -7
  131. package/{fesm2020 → fesm2022}/lodop.mjs.map +1 -1
  132. package/{fesm2020 → fesm2022}/media.mjs +10 -10
  133. package/fesm2022/media.mjs.map +1 -0
  134. package/fesm2022/notice-icon.mjs +180 -0
  135. package/fesm2022/notice-icon.mjs.map +1 -0
  136. package/{fesm2020 → fesm2022}/onboarding.mjs +10 -11
  137. package/{fesm2020 → fesm2022}/onboarding.mjs.map +1 -1
  138. package/{fesm2020 → fesm2022}/page-header.mjs +7 -7
  139. package/{fesm2015 → fesm2022}/page-header.mjs.map +1 -1
  140. package/{fesm2020 → fesm2022}/pdf.mjs +10 -10
  141. package/fesm2022/pdf.mjs.map +1 -0
  142. package/{fesm2015 → fesm2022}/qr.mjs +7 -7
  143. package/{fesm2020 → fesm2022}/qr.mjs.map +1 -1
  144. package/{fesm2020 → fesm2022}/quick-menu.mjs +7 -7
  145. package/fesm2022/quick-menu.mjs.map +1 -0
  146. package/{fesm2020 → fesm2022}/result.mjs +7 -7
  147. package/{fesm2020 → fesm2022}/result.mjs.map +1 -1
  148. package/{fesm2020 → fesm2022}/reuse-tab.mjs +31 -31
  149. package/{fesm2015 → fesm2022}/reuse-tab.mjs.map +1 -1
  150. package/{fesm2020 → fesm2022}/se.mjs +15 -15
  151. package/fesm2022/se.mjs.map +1 -0
  152. package/{fesm2020 → fesm2022}/sg.mjs +10 -10
  153. package/fesm2022/sg.mjs.map +1 -0
  154. package/{fesm2020 → fesm2022}/st.mjs +72 -72
  155. package/fesm2022/st.mjs.map +1 -0
  156. package/{fesm2020 → fesm2022}/sv.mjs +20 -20
  157. package/fesm2022/sv.mjs.map +1 -0
  158. package/{fesm2020 → fesm2022}/tag-select.mjs +7 -7
  159. package/fesm2022/tag-select.mjs.map +1 -0
  160. package/{fesm2020 → fesm2022}/xlsx.mjs +10 -10
  161. package/fesm2022/xlsx.mjs.map +1 -0
  162. package/{fesm2020 → fesm2022}/zip.mjs +7 -7
  163. package/{fesm2015 → fesm2022}/zip.mjs.map +1 -1
  164. package/footer-toolbar/footer-toolbar.component.d.ts +1 -1
  165. package/full-content/full-content.component.d.ts +1 -1
  166. package/global-footer/global-footer-item.component.d.ts +1 -1
  167. package/global-footer/global-footer.component.d.ts +1 -1
  168. package/hotkey/hotkey.directive.d.ts +1 -1
  169. package/let/let.directive.d.ts +1 -1
  170. package/loading/style/index.less +1 -4
  171. package/media/media.component.d.ts +1 -1
  172. package/notice-icon/notice-icon-tab.component.d.ts +1 -1
  173. package/notice-icon/notice-icon.component.d.ts +1 -1
  174. package/onboarding/style/index.less +1 -4
  175. package/package.json +106 -176
  176. package/page-header/page-header.component.d.ts +1 -1
  177. package/pdf/pdf.component.d.ts +1 -1
  178. package/qr/qr.component.d.ts +1 -1
  179. package/quick-menu/quick-menu.component.d.ts +1 -1
  180. package/result/result.component.d.ts +1 -1
  181. package/reuse-tab/reuse-tab-context-menu.component.d.ts +1 -1
  182. package/reuse-tab/reuse-tab-context.component.d.ts +1 -1
  183. package/reuse-tab/reuse-tab-context.directive.d.ts +1 -1
  184. package/reuse-tab/reuse-tab.component.d.ts +1 -1
  185. package/se/se-container.component.d.ts +1 -1
  186. package/se/se.component.d.ts +1 -1
  187. package/sg/sg-container.component.d.ts +1 -1
  188. package/sg/sg.component.d.ts +1 -1
  189. package/st/st-filter.component.d.ts +1 -1
  190. package/st/st-row.directive.d.ts +1 -1
  191. package/st/st-widget-host.directive.d.ts +1 -1
  192. package/st/st.component.d.ts +9 -5
  193. package/st/style/index.less +6 -2
  194. package/sv/sv-container.component.d.ts +1 -1
  195. package/sv/sv-value.component.d.ts +1 -1
  196. package/sv/sv.component.d.ts +1 -1
  197. package/tag-select/tag-select.component.d.ts +1 -1
  198. package/xlsx/xlsx.directive.d.ts +1 -1
  199. package/esm2020/auto-focus/auto-focus.directive.mjs +0 -50
  200. package/esm2020/auto-focus/auto-focus.module.mjs +0 -17
  201. package/esm2020/avatar-list/avatar-list-item.component.mjs +0 -26
  202. package/esm2020/avatar-list/avatar-list.component.mjs +0 -88
  203. package/esm2020/avatar-list/avatar-list.module.mjs +0 -22
  204. package/esm2020/count-down/count-down.component.mjs +0 -45
  205. package/esm2020/count-down/count-down.module.mjs +0 -20
  206. package/esm2020/date-picker/date-picker.module.mjs +0 -22
  207. package/esm2020/date-picker/range-shortcut.component.mjs +0 -40
  208. package/esm2020/date-picker/range.directive.mjs +0 -172
  209. package/esm2020/down-file/down-file.directive.mjs +0 -114
  210. package/esm2020/down-file/down-file.module.mjs +0 -20
  211. package/esm2020/ellipsis/ellipsis.component.mjs +0 -232
  212. package/esm2020/ellipsis/ellipsis.module.mjs +0 -21
  213. package/esm2020/error-collect/error-collect.component.mjs +0 -121
  214. package/esm2020/error-collect/error-collect.module.mjs +0 -20
  215. package/esm2020/exception/exception.component.mjs +0 -108
  216. package/esm2020/exception/exception.module.mjs +0 -23
  217. package/esm2020/footer-toolbar/footer-toolbar.component.mjs +0 -44
  218. package/esm2020/footer-toolbar/footer-toolbar.module.mjs +0 -21
  219. package/esm2020/full-content/full-content-toggle.directive.mjs +0 -24
  220. package/esm2020/full-content/full-content.component.mjs +0 -139
  221. package/esm2020/full-content/full-content.module.mjs +0 -20
  222. package/esm2020/full-content/full-content.service.mjs +0 -22
  223. package/esm2020/global-footer/global-footer-item.component.mjs +0 -30
  224. package/esm2020/global-footer/global-footer.component.mjs +0 -72
  225. package/esm2020/global-footer/global-footer.module.mjs +0 -21
  226. package/esm2020/hotkey/hotkey.directive.mjs +0 -36
  227. package/esm2020/hotkey/hotkey.module.mjs +0 -17
  228. package/esm2020/let/let.directive.mjs +0 -36
  229. package/esm2020/let/let.module.mjs +0 -17
  230. package/esm2020/loading/loading.component.mjs +0 -26
  231. package/esm2020/loading/loading.module.mjs +0 -24
  232. package/esm2020/loading/loading.service.mjs +0 -90
  233. package/esm2020/lodop/lodop.module.mjs +0 -12
  234. package/esm2020/lodop/lodop.service.mjs +0 -222
  235. package/esm2020/media/media.component.mjs +0 -117
  236. package/esm2020/media/media.module.mjs +0 -19
  237. package/esm2020/media/media.service.mjs +0 -46
  238. package/esm2020/notice-icon/notice-icon-tab.component.mjs +0 -34
  239. package/esm2020/notice-icon/notice-icon.component.mjs +0 -89
  240. package/esm2020/notice-icon/notice-icon.module.mjs +0 -58
  241. package/esm2020/observers/observer-size.mjs +0 -116
  242. package/esm2020/onboarding/onboarding.component.mjs +0 -134
  243. package/esm2020/onboarding/onboarding.module.mjs +0 -27
  244. package/esm2020/onboarding/onboarding.service.mjs +0 -185
  245. package/esm2020/page-header/page-header.component.mjs +0 -246
  246. package/esm2020/page-header/page-header.module.mjs +0 -24
  247. package/esm2020/pdf/pdf.component.mjs +0 -473
  248. package/esm2020/pdf/pdf.module.mjs +0 -20
  249. package/esm2020/qr/qr.component.mjs +0 -136
  250. package/esm2020/qr/qr.module.mjs +0 -19
  251. package/esm2020/quick-menu/quick-menu.component.mjs +0 -89
  252. package/esm2020/quick-menu/quick-menu.module.mjs +0 -21
  253. package/esm2020/result/result.component.mjs +0 -60
  254. package/esm2020/result/result.module.mjs +0 -21
  255. package/esm2020/reuse-tab/reuse-tab-context-menu.component.mjs +0 -76
  256. package/esm2020/reuse-tab/reuse-tab-context.component.mjs +0 -33
  257. package/esm2020/reuse-tab/reuse-tab-context.directive.mjs +0 -35
  258. package/esm2020/reuse-tab/reuse-tab-context.service.mjs +0 -55
  259. package/esm2020/reuse-tab/reuse-tab.component.mjs +0 -367
  260. package/esm2020/reuse-tab/reuse-tab.module.mjs +0 -49
  261. package/esm2020/reuse-tab/reuse-tab.service.mjs +0 -558
  262. package/esm2020/se/se-container.component.mjs +0 -172
  263. package/esm2020/se/se.component.mjs +0 -234
  264. package/esm2020/se/se.module.mjs +0 -23
  265. package/esm2020/sg/sg-container.component.mjs +0 -52
  266. package/esm2020/sg/sg.component.mjs +0 -67
  267. package/esm2020/sg/sg.module.mjs +0 -20
  268. package/esm2020/st/st-column-source.mjs +0 -492
  269. package/esm2020/st/st-data-source.mjs +0 -479
  270. package/esm2020/st/st-export.mjs +0 -89
  271. package/esm2020/st/st-row.directive.mjs +0 -45
  272. package/esm2020/st/st-widget-host.directive.mjs +0 -31
  273. package/esm2020/st/st-widget.mjs +0 -26
  274. package/esm2020/st/st.component.mjs +0 -1002
  275. package/esm2020/st/st.module.mjs +0 -96
  276. package/esm2020/sv/sv-container.component.mjs +0 -125
  277. package/esm2020/sv/sv-value.component.mjs +0 -44
  278. package/esm2020/sv/sv.component.mjs +0 -119
  279. package/esm2020/sv/sv.module.mjs +0 -25
  280. package/esm2020/tag-select/tag-select.component.mjs +0 -63
  281. package/esm2020/tag-select/tag-select.module.mjs +0 -21
  282. package/esm2020/xlsx/xlsx.directive.mjs +0 -27
  283. package/esm2020/xlsx/xlsx.module.mjs +0 -19
  284. package/esm2020/xlsx/xlsx.service.mjs +0 -128
  285. package/esm2020/zip/zip.module.mjs +0 -15
  286. package/esm2020/zip/zip.service.mjs +0 -116
  287. package/fesm2015/avatar-list.mjs +0 -139
  288. package/fesm2015/avatar-list.mjs.map +0 -1
  289. package/fesm2015/chart-observer-size.mjs +0 -124
  290. package/fesm2015/chart-observer-size.mjs.map +0 -1
  291. package/fesm2015/count-down.mjs +0 -69
  292. package/fesm2015/count-down.mjs.map +0 -1
  293. package/fesm2015/date-picker.mjs +0 -236
  294. package/fesm2015/date-picker.mjs.map +0 -1
  295. package/fesm2015/down-file.mjs +0 -141
  296. package/fesm2015/down-file.mjs.map +0 -1
  297. package/fesm2015/ellipsis.mjs +0 -258
  298. package/fesm2015/ellipsis.mjs.map +0 -1
  299. package/fesm2015/error-collect.mjs +0 -147
  300. package/fesm2015/error-collect.mjs.map +0 -1
  301. package/fesm2015/exception.mjs +0 -138
  302. package/fesm2015/exception.mjs.map +0 -1
  303. package/fesm2015/footer-toolbar.mjs +0 -70
  304. package/fesm2015/footer-toolbar.mjs.map +0 -1
  305. package/fesm2015/full-content.mjs +0 -202
  306. package/fesm2015/full-content.mjs.map +0 -1
  307. package/fesm2015/global-footer.mjs +0 -126
  308. package/fesm2015/global-footer.mjs.map +0 -1
  309. package/fesm2015/hotkey.mjs +0 -57
  310. package/fesm2015/let.mjs +0 -59
  311. package/fesm2015/let.mjs.map +0 -1
  312. package/fesm2015/loading.mjs +0 -142
  313. package/fesm2015/loading.mjs.map +0 -1
  314. package/fesm2015/lodop.mjs +0 -232
  315. package/fesm2015/lodop.mjs.map +0 -1
  316. package/fesm2015/media.mjs +0 -180
  317. package/fesm2015/media.mjs.map +0 -1
  318. package/fesm2015/notice-icon.mjs +0 -180
  319. package/fesm2015/notice-icon.mjs.map +0 -1
  320. package/fesm2015/onboarding.mjs +0 -336
  321. package/fesm2015/onboarding.mjs.map +0 -1
  322. package/fesm2015/page-header.mjs +0 -276
  323. package/fesm2015/pdf.mjs +0 -516
  324. package/fesm2015/pdf.mjs.map +0 -1
  325. package/fesm2015/qr.mjs.map +0 -1
  326. package/fesm2015/quick-menu.mjs +0 -114
  327. package/fesm2015/quick-menu.mjs.map +0 -1
  328. package/fesm2015/result.mjs +0 -88
  329. package/fesm2015/result.mjs.map +0 -1
  330. package/fesm2015/reuse-tab.mjs +0 -1217
  331. package/fesm2015/se.mjs +0 -444
  332. package/fesm2015/se.mjs.map +0 -1
  333. package/fesm2015/sg.mjs +0 -139
  334. package/fesm2015/sg.mjs.map +0 -1
  335. package/fesm2015/st.mjs +0 -2526
  336. package/fesm2015/st.mjs.map +0 -1
  337. package/fesm2015/sv.mjs +0 -308
  338. package/fesm2015/sv.mjs.map +0 -1
  339. package/fesm2015/tag-select.mjs +0 -91
  340. package/fesm2015/tag-select.mjs.map +0 -1
  341. package/fesm2015/xlsx.mjs +0 -172
  342. package/fesm2015/xlsx.mjs.map +0 -1
  343. package/fesm2015/zip.mjs +0 -136
  344. package/fesm2020/abc.mjs +0 -7
  345. package/fesm2020/abc.mjs.map +0 -1
  346. package/fesm2020/auto-focus.mjs +0 -71
  347. package/fesm2020/auto-focus.mjs.map +0 -1
  348. package/fesm2020/avatar-list.mjs.map +0 -1
  349. package/fesm2020/chart-observer-size.mjs.map +0 -1
  350. package/fesm2020/count-down.mjs.map +0 -1
  351. package/fesm2020/date-picker.mjs.map +0 -1
  352. package/fesm2020/down-file.mjs.map +0 -1
  353. package/fesm2020/ellipsis.mjs.map +0 -1
  354. package/fesm2020/error-collect.mjs.map +0 -1
  355. package/fesm2020/exception.mjs.map +0 -1
  356. package/fesm2020/footer-toolbar.mjs.map +0 -1
  357. package/fesm2020/full-content.mjs.map +0 -1
  358. package/fesm2020/global-footer.mjs.map +0 -1
  359. package/fesm2020/hotkey.mjs.map +0 -1
  360. package/fesm2020/let.mjs.map +0 -1
  361. package/fesm2020/loading.mjs.map +0 -1
  362. package/fesm2020/media.mjs.map +0 -1
  363. package/fesm2020/notice-icon.mjs +0 -180
  364. package/fesm2020/notice-icon.mjs.map +0 -1
  365. package/fesm2020/page-header.mjs.map +0 -1
  366. package/fesm2020/pdf.mjs.map +0 -1
  367. package/fesm2020/qr.mjs +0 -171
  368. package/fesm2020/quick-menu.mjs.map +0 -1
  369. package/fesm2020/reuse-tab.mjs.map +0 -1
  370. package/fesm2020/se.mjs.map +0 -1
  371. package/fesm2020/sg.mjs.map +0 -1
  372. package/fesm2020/st.mjs.map +0 -1
  373. package/fesm2020/sv.mjs.map +0 -1
  374. package/fesm2020/tag-select.mjs.map +0 -1
  375. package/fesm2020/xlsx.mjs.map +0 -1
  376. package/fesm2020/zip.mjs.map +0 -1
  377. /package/{esm2020 → esm2022}/abc.mjs +0 -0
  378. /package/{esm2020 → esm2022}/auto-focus/auto-focus.mjs +0 -0
  379. /package/{esm2020 → esm2022}/auto-focus/index.mjs +0 -0
  380. /package/{esm2020 → esm2022}/avatar-list/avatar-list.mjs +0 -0
  381. /package/{esm2020 → esm2022}/avatar-list/public_api.mjs +0 -0
  382. /package/{esm2020 → esm2022}/count-down/count-down.mjs +0 -0
  383. /package/{esm2020 → esm2022}/count-down/public_api.mjs +0 -0
  384. /package/{esm2020 → esm2022}/date-picker/date-picker.mjs +0 -0
  385. /package/{esm2020 → esm2022}/date-picker/public_api.mjs +0 -0
  386. /package/{esm2020 → esm2022}/down-file/down-file.mjs +0 -0
  387. /package/{esm2020 → esm2022}/down-file/public_api.mjs +0 -0
  388. /package/{esm2020 → esm2022}/ellipsis/ellipsis.mjs +0 -0
  389. /package/{esm2020 → esm2022}/ellipsis/public_api.mjs +0 -0
  390. /package/{esm2020 → esm2022}/error-collect/error-collect.mjs +0 -0
  391. /package/{esm2020 → esm2022}/error-collect/public_api.mjs +0 -0
  392. /package/{esm2020 → esm2022}/exception/exception.mjs +0 -0
  393. /package/{esm2020 → esm2022}/exception/public_api.mjs +0 -0
  394. /package/{esm2020 → esm2022}/footer-toolbar/footer-toolbar.mjs +0 -0
  395. /package/{esm2020 → esm2022}/footer-toolbar/public_api.mjs +0 -0
  396. /package/{esm2020 → esm2022}/full-content/full-content.mjs +0 -0
  397. /package/{esm2020 → esm2022}/full-content/public_api.mjs +0 -0
  398. /package/{esm2020 → esm2022}/global-footer/global-footer.mjs +0 -0
  399. /package/{esm2020 → esm2022}/global-footer/global-footer.types.mjs +0 -0
  400. /package/{esm2020 → esm2022}/global-footer/public_api.mjs +0 -0
  401. /package/{esm2020 → esm2022}/hotkey/hotkey.mjs +0 -0
  402. /package/{esm2020 → esm2022}/hotkey/public_api.mjs +0 -0
  403. /package/{esm2020 → esm2022}/let/index.mjs +0 -0
  404. /package/{esm2020 → esm2022}/let/let.mjs +0 -0
  405. /package/{esm2020 → esm2022}/loading/loading.mjs +0 -0
  406. /package/{esm2020 → esm2022}/loading/loading.types.mjs +0 -0
  407. /package/{esm2020 → esm2022}/loading/public_api.mjs +0 -0
  408. /package/{esm2020 → esm2022}/lodop/lodop.mjs +0 -0
  409. /package/{esm2020 → esm2022}/lodop/lodop.types.mjs +0 -0
  410. /package/{esm2020 → esm2022}/lodop/public_api.mjs +0 -0
  411. /package/{esm2020 → esm2022}/media/media.mjs +0 -0
  412. /package/{esm2020 → esm2022}/media/public_api.mjs +0 -0
  413. /package/{esm2020 → esm2022}/notice-icon/notice-icon.mjs +0 -0
  414. /package/{esm2020 → esm2022}/notice-icon/notice-icon.types.mjs +0 -0
  415. /package/{esm2020 → esm2022}/notice-icon/public_api.mjs +0 -0
  416. /package/{esm2020 → esm2022}/observers/chart-observer-size.mjs +0 -0
  417. /package/{esm2020 → esm2022}/observers/public-api.mjs +0 -0
  418. /package/{esm2020 → esm2022}/onboarding/onboarding.mjs +0 -0
  419. /package/{esm2020 → esm2022}/onboarding/onboarding.types.mjs +0 -0
  420. /package/{esm2020 → esm2022}/onboarding/public_api.mjs +0 -0
  421. /package/{esm2020 → esm2022}/page-header/page-header.mjs +0 -0
  422. /package/{esm2020 → esm2022}/page-header/public_api.mjs +0 -0
  423. /package/{esm2020 → esm2022}/pdf/pdf.mjs +0 -0
  424. /package/{esm2020 → esm2022}/pdf/pdf.types.mjs +0 -0
  425. /package/{esm2020 → esm2022}/pdf/public_api.mjs +0 -0
  426. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
  427. /package/{esm2020 → esm2022}/qr/public_api.mjs +0 -0
  428. /package/{esm2020 → esm2022}/qr/qr.config.mjs +0 -0
  429. /package/{esm2020 → esm2022}/qr/qr.mjs +0 -0
  430. /package/{esm2020 → esm2022}/qr/qr.types.mjs +0 -0
  431. /package/{esm2020 → esm2022}/quick-menu/public_api.mjs +0 -0
  432. /package/{esm2020 → esm2022}/quick-menu/quick-menu.mjs +0 -0
  433. /package/{esm2020 → esm2022}/result/public_api.mjs +0 -0
  434. /package/{esm2020 → esm2022}/result/result.mjs +0 -0
  435. /package/{esm2020 → esm2022}/reuse-tab/lifecycle_hooks.mjs +0 -0
  436. /package/{esm2020 → esm2022}/reuse-tab/public_api.mjs +0 -0
  437. /package/{esm2020 → esm2022}/reuse-tab/reuse-tab.interfaces.mjs +0 -0
  438. /package/{esm2020 → esm2022}/reuse-tab/reuse-tab.mjs +0 -0
  439. /package/{esm2020 → esm2022}/reuse-tab/reuse-tab.state.mjs +0 -0
  440. /package/{esm2020 → esm2022}/reuse-tab/reuse-tab.strategy.mjs +0 -0
  441. /package/{esm2020 → esm2022}/se/public_api.mjs +0 -0
  442. /package/{esm2020 → esm2022}/se/se.mjs +0 -0
  443. /package/{esm2020 → esm2022}/se/se.types.mjs +0 -0
  444. /package/{esm2020 → esm2022}/sg/public_api.mjs +0 -0
  445. /package/{esm2020 → esm2022}/sg/sg.mjs +0 -0
  446. /package/{esm2020 → esm2022}/st/public_api.mjs +0 -0
  447. /package/{esm2020 → esm2022}/st/st.config.mjs +0 -0
  448. /package/{esm2020 → esm2022}/st/st.interfaces.mjs +0 -0
  449. /package/{esm2020 → esm2022}/st/st.mjs +0 -0
  450. /package/{esm2020 → esm2022}/st/st.types.mjs +0 -0
  451. /package/{esm2020 → esm2022}/sv/public_api.mjs +0 -0
  452. /package/{esm2020 → esm2022}/sv/sv.mjs +0 -0
  453. /package/{esm2020 → esm2022}/tag-select/public_api.mjs +0 -0
  454. /package/{esm2020 → esm2022}/tag-select/tag-select.mjs +0 -0
  455. /package/{esm2020 → esm2022}/xlsx/public_api.mjs +0 -0
  456. /package/{esm2020 → esm2022}/xlsx/xlsx.mjs +0 -0
  457. /package/{esm2020 → esm2022}/xlsx/xlsx.types.mjs +0 -0
  458. /package/{esm2020 → esm2022}/zip/public_api.mjs +0 -0
  459. /package/{esm2020 → esm2022}/zip/zip.mjs +0 -0
  460. /package/{esm2020 → esm2022}/zip/zip.types.mjs +0 -0
  461. /package/{fesm2015 → fesm2022}/abc.mjs +0 -0
  462. /package/{fesm2015 → fesm2022}/abc.mjs.map +0 -0
@@ -1,172 +0,0 @@
1
- import { Directive, EventEmitter, Host, Input, Optional, Output } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { fixEndTimeOfRange, getTimeDistance } from '@delon/util/date-time';
4
- import { assert, deepMergeKey } from '@delon/util/other';
5
- import { RangePickerShortcutTplComponent } from './range-shortcut.component';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/platform-browser";
8
- import * as i2 from "@delon/util/config";
9
- import * as i3 from "ng-zorro-antd/date-picker";
10
- export class RangePickerDirective {
11
- set shortcut(val) {
12
- const item = deepMergeKey({ list: [] }, true, this.defaultShortcuts, val == null ? {} : val);
13
- if (typeof val !== 'object') {
14
- item.enabled = val !== false;
15
- }
16
- (item.list || []).forEach(i => {
17
- i._text = this.dom.bypassSecurityTrustHtml(i.text);
18
- });
19
- this._shortcut = item;
20
- this.refreshShortcut();
21
- }
22
- get shortcut() {
23
- return this._shortcut;
24
- }
25
- get dp() {
26
- return this.nativeComp.datePicker;
27
- }
28
- get srv() {
29
- return this.dp.datePickerService;
30
- }
31
- constructor(dom, configSrv, nativeComp, vcr) {
32
- this.dom = dom;
33
- this.nativeComp = nativeComp;
34
- this.vcr = vcr;
35
- this._shortcut = null;
36
- this.destroy$ = new Subject();
37
- this.shortcutFactory = null;
38
- this.start = null;
39
- this.end = null;
40
- this.ngModelEndChange = new EventEmitter();
41
- assert(!!nativeComp, `It should be attached to nz-range-picker component, for example: '<nz-range-picker [(ngModel)]="i.start" extend [(ngModelEnd)]="i.end" shortcut></nz-range-picker>'`);
42
- const cog = configSrv.merge('dataRange', {
43
- nzFormat: 'yyyy-MM-dd',
44
- nzAllowClear: true,
45
- nzAutoFocus: false,
46
- nzPopupStyle: { position: 'relative' },
47
- nzShowToday: true,
48
- shortcuts: {
49
- enabled: false,
50
- closed: true,
51
- list: [
52
- {
53
- text: '今天',
54
- fn: () => getTimeDistance('today')
55
- },
56
- {
57
- text: '昨天',
58
- fn: () => getTimeDistance('yesterday')
59
- },
60
- {
61
- text: '近3天',
62
- fn: () => getTimeDistance(-2)
63
- },
64
- {
65
- text: '近7天',
66
- fn: () => getTimeDistance(-6)
67
- },
68
- {
69
- text: '本周',
70
- fn: () => getTimeDistance('week')
71
- },
72
- {
73
- text: '本月',
74
- fn: () => getTimeDistance('month')
75
- },
76
- {
77
- text: '全年',
78
- fn: () => getTimeDistance('year')
79
- }
80
- ]
81
- }
82
- });
83
- this.defaultShortcuts = { ...cog.shortcuts };
84
- Object.assign(this, cog);
85
- }
86
- cd() {
87
- this.dp.cdr.markForCheck();
88
- }
89
- overrideNative() {
90
- const dp = this.dp;
91
- dp.writeValue = (value) => {
92
- const dates = (value && this.ngModelEnd ? [value, this.ngModelEnd] : []).filter(w => !!w);
93
- this.srv.setValue(this.srv.makeValue(dates));
94
- this.start = dates.length > 0 ? dates[0] : null;
95
- this.end = dates.length > 0 ? dates[1] : null;
96
- this.cd();
97
- };
98
- const oldOnChangeFn = dp.onChangeFn;
99
- dp.onChangeFn = (list) => {
100
- let start = null;
101
- let end = null;
102
- if (list.length > 0 && list.filter(w => w != null).length === 2) {
103
- [start, end] = fixEndTimeOfRange([list[0], list[1]]);
104
- }
105
- this.start = start;
106
- this.end = end;
107
- oldOnChangeFn(start);
108
- this.ngModelEnd = end;
109
- this.ngModelEndChange.emit(end);
110
- };
111
- }
112
- refreshShortcut() {
113
- if (!this._shortcut) {
114
- return;
115
- }
116
- const { enabled, list } = this._shortcut;
117
- let extraFooter;
118
- if (!this.nativeComp || !enabled) {
119
- extraFooter = undefined;
120
- }
121
- else {
122
- if (!this.shortcutFactory) {
123
- this.shortcutFactory = this.vcr.createComponent(RangePickerShortcutTplComponent);
124
- }
125
- const { instance } = this.shortcutFactory;
126
- instance.list = list;
127
- instance.click = (item) => {
128
- const res = item.fn([this.start, this.end]);
129
- this.srv.setValue(this.srv.makeValue(res));
130
- this.dp.onChangeFn(res);
131
- this.dp.close();
132
- };
133
- extraFooter = instance.tpl;
134
- }
135
- this.nativeComp.datePicker.extraFooter = extraFooter;
136
- Promise.resolve().then(() => this.cd());
137
- }
138
- ngAfterViewInit() {
139
- this.overrideNative();
140
- this.refreshShortcut();
141
- }
142
- destoryShortcut() {
143
- if (this.shortcutFactory != null) {
144
- this.shortcutFactory.destroy();
145
- }
146
- }
147
- ngOnDestroy() {
148
- this.destoryShortcut();
149
- this.destroy$.next();
150
- this.destroy$.complete();
151
- }
152
- }
153
- RangePickerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RangePickerDirective, deps: [{ token: i1.DomSanitizer }, { token: i2.AlainConfigService }, { token: i3.NzRangePickerComponent, host: true, optional: true }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
154
- RangePickerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: RangePickerDirective, selector: "nz-range-picker[extend]", inputs: { shortcut: "shortcut", ngModelEnd: "ngModelEnd" }, outputs: { ngModelEndChange: "ngModelEndChange" }, exportAs: ["extendRangePicker"], ngImport: i0 });
155
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RangePickerDirective, decorators: [{
156
- type: Directive,
157
- args: [{
158
- selector: 'nz-range-picker[extend]',
159
- exportAs: 'extendRangePicker'
160
- }]
161
- }], ctorParameters: function () { return [{ type: i1.DomSanitizer }, { type: i2.AlainConfigService }, { type: i3.NzRangePickerComponent, decorators: [{
162
- type: Host
163
- }, {
164
- type: Optional
165
- }] }, { type: i0.ViewContainerRef }]; }, propDecorators: { shortcut: [{
166
- type: Input
167
- }], ngModelEnd: [{
168
- type: Input
169
- }], ngModelEndChange: [{
170
- type: Output
171
- }] } });
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYWJjL2RhdGUtcGlja2VyL3JhbmdlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUNULFlBQVksRUFDWixJQUFJLEVBQ0osS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBR1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUt6RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7QUFNN0UsTUFBTSxPQUFPLG9CQUFvQjtJQVUvQixJQUNJLFFBQVEsQ0FBQyxHQUF3QztRQUNuRCxNQUFNLElBQUksR0FBRyxZQUFZLENBQ3ZCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUNaLElBQUksRUFDSixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUNTLENBQUM7UUFDbEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEtBQUssS0FBSyxDQUFDO1NBQzlCO1FBQ0QsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM1QixDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELENB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cG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudFJlZixcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFsYWluQ29uZmlnU2VydmljZSwgQWxhaW5EYXRlUmFuZ2VQaWNrZXJTaG9ydGN1dCwgQWxhaW5EYXRlUmFuZ2VQaWNrZXJTaG9ydGN1dEl0ZW0gfSBmcm9tICdAZGVsb24vdXRpbC9jb25maWcnO1xuaW1wb3J0IHsgZml4RW5kVGltZU9mUmFuZ2UsIGdldFRpbWVEaXN0YW5jZSB9IGZyb20gJ0BkZWxvbi91dGlsL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBhc3NlcnQsIGRlZXBNZXJnZUtleSB9IGZyb20gJ0BkZWxvbi91dGlsL290aGVyJztcbmltcG9ydCB0eXBlIHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IE56RGF0ZVBpY2tlckNvbXBvbmVudCwgTnpSYW5nZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJ25nLXpvcnJvLWFudGQvZGF0ZS1waWNrZXInO1xuaW1wb3J0IHsgRGF0ZVBpY2tlclNlcnZpY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBSYW5nZVBpY2tlclNob3J0Y3V0VHBsQ29tcG9uZW50IH0gZnJvbSAnLi9yYW5nZS1zaG9ydGN1dC5jb21wb25lbnQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICduei1yYW5nZS1waWNrZXJbZXh0ZW5kXScsXG4gIGV4cG9ydEFzOiAnZXh0ZW5kUmFuZ2VQaWNrZXInXG59KVxuZXhwb3J0IGNsYXNzIFJhbmdlUGlja2VyRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Nob3J0Y3V0OiBBbGFpbkRhdGVSYW5nZVBpY2tlclNob3J0Y3V0IHwgc3RyaW5nIHwgbnVsbDtcblxuICBwcml2YXRlIGRlZmF1bHRTaG9ydGN1dHM6IEFsYWluRGF0ZVJhbmdlUGlja2VyU2hvcnRjdXQ7XG4gIHByaXZhdGUgX3Nob3J0Y3V0OiBBbGFpbkRhdGVSYW5nZVBpY2tlclNob3J0Y3V0IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHNob3J0Y3V0RmFjdG9yeTogQ29tcG9uZW50UmVmPFJhbmdlUGlja2VyU2hvcnRjdXRUcGxDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XG4gIHN0YXJ0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIGVuZDogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBzaG9ydGN1dCh2YWw6IEFsYWluRGF0ZVJhbmdlUGlja2VyU2hvcnRjdXQgfCBudWxsKSB7XG4gICAgY29uc3QgaXRlbSA9IGRlZXBNZXJnZUtleShcbiAgICAgIHsgbGlzdDogW10gfSxcbiAgICAgIHRydWUsXG4gICAgICB0aGlzLmRlZmF1bHRTaG9ydGN1dHMsXG4gICAgICB2YWwgPT0gbnVsbCA/IHt9IDogdmFsXG4gICAgKSBhcyBBbGFpbkRhdGVSYW5nZVBpY2tlclNob3J0Y3V0O1xuICAgIGlmICh0eXBlb2YgdmFsICE9PSAnb2JqZWN0Jykge1xuICAgICAgaXRlbS5lbmFibGVkID0gdmFsICE9PSBmYWxzZTtcbiAgICB9XG4gICAgKGl0ZW0ubGlzdCB8fCBbXSkuZm9yRWFjaChpID0+IHtcbiAgICAgIGkuX3RleHQgPSB0aGlzLmRvbS5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChpLnRleHQpO1xuICAgIH0pO1xuICAgIHRoaXMuX3Nob3J0Y3V0ID0gaXRlbTtcbiAgICB0aGlzLnJlZnJlc2hTaG9ydGN1dCgpO1xuICB9XG4gIGdldCBzaG9ydGN1dCgpOiBBbGFpbkRhdGVSYW5nZVBpY2tlclNob3J0Y3V0IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3J0Y3V0O1xuICB9XG4gIEBJbnB1dCgpIG5nTW9kZWxFbmQ6IE56U2FmZUFueTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IG5nTW9kZWxFbmRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE56U2FmZUFueT4oKTtcblxuICBwcml2YXRlIGdldCBkcCgpOiBOekRhdGVQaWNrZXJDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLm5hdGl2ZUNvbXAuZGF0ZVBpY2tlcjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHNydigpOiBEYXRlUGlja2VyU2VydmljZSB7XG4gICAgcmV0dXJuIHRoaXMuZHAuZGF0ZVBpY2tlclNlcnZpY2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRvbTogRG9tU2FuaXRpemVyLFxuICAgIGNvbmZpZ1NydjogQWxhaW5Db25maWdTZXJ2aWNlLFxuICAgIEBIb3N0KCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBuYXRpdmVDb21wOiBOelJhbmdlUGlja2VyQ29tcG9uZW50LFxuICAgIHByaXZhdGUgdmNyOiBWaWV3Q29udGFpbmVyUmVmXG4gICkge1xuICAgIGFzc2VydChcbiAgICAgICEhbmF0aXZlQ29tcCxcbiAgICAgIGBJdCBzaG91bGQgYmUgYXR0YWNoZWQgdG8gbnotcmFuZ2UtcGlja2VyIGNvbXBvbmVudCwgZm9yIGV4YW1wbGU6ICc8bnotcmFuZ2UtcGlja2VyIFsobmdNb2RlbCldPVwiaS5zdGFydFwiIGV4dGVuZCBbKG5nTW9kZWxFbmQpXT1cImkuZW5kXCIgc2hvcnRjdXQ+PC9uei1yYW5nZS1waWNrZXI+J2BcbiAgICApO1xuICAgIGNvbnN0IGNvZyA9IGNvbmZpZ1Nydi5tZXJnZSgnZGF0YVJhbmdlJywge1xuICAgICAgbnpGb3JtYXQ6ICd5eXl5LU1NLWRkJyxcbiAgICAgIG56QWxsb3dDbGVhcjogdHJ1ZSxcbiAgICAgIG56QXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgIG56UG9wdXBTdHlsZTogeyBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9LFxuICAgICAgbnpTaG93VG9kYXk6IHRydWUsXG4gICAgICBzaG9ydGN1dHM6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGNsb3NlZDogdHJ1ZSxcbiAgICAgICAgbGlzdDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICfku4rlpKknLFxuICAgICAgICAgICAgZm46ICgpID0+IGdldFRpbWVEaXN0YW5jZSgndG9kYXknKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ+aYqOWkqScsXG4gICAgICAgICAgICBmbjogKCkgPT4gZ2V0VGltZURpc3RhbmNlKCd5ZXN0ZXJkYXknKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ+i/kTPlpKknLFxuICAgICAgICAgICAgZm46ICgpID0+IGdldFRpbWVEaXN0YW5jZSgtMilcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6ICfov5E35aSpJyxcbiAgICAgICAgICAgIGZuOiAoKSA9PiBnZXRUaW1lRGlzdGFuY2UoLTYpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiAn5pys5ZGoJyxcbiAgICAgICAgICAgIGZuOiAoKSA9PiBnZXRUaW1lRGlzdGFuY2UoJ3dlZWsnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ+acrOaciCcsXG4gICAgICAgICAgICBmbjogKCkgPT4gZ2V0VGltZURpc3RhbmNlKCdtb250aCcpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiAn5YWo5bm0JyxcbiAgICAgICAgICAgIGZuOiAoKSA9PiBnZXRUaW1lRGlzdGFuY2UoJ3llYXInKVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0pITtcbiAgICB0aGlzLmRlZmF1bHRTaG9ydGN1dHMgPSB7IC4uLmNvZy5zaG9ydGN1dHMgfSBhcyBBbGFpbkRhdGVSYW5nZVBpY2tlclNob3J0Y3V0O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgY29nKTtcbiAgfVxuXG4gIHByaXZhdGUgY2QoKTogdm9pZCB7XG4gICAgKHRoaXMuZHAgYXMgTnpTYWZlQW55KS5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG92ZXJyaWRlTmF0aXZlKCk6IHZvaWQge1xuICAgIGNvbnN0IGRwID0gdGhpcy5kcDtcbiAgICBkcC53cml0ZVZhbHVlID0gKHZhbHVlOiBEYXRlKSA9PiB7XG4gICAgICBjb25zdCBkYXRlcyA9ICh2YWx1ZSAmJiB0aGlzLm5nTW9kZWxFbmQgPyBbdmFsdWUsIHRoaXMubmdNb2RlbEVuZF0gOiBbXSkuZmlsdGVyKHcgPT4gISF3KTtcbiAgICAgIHRoaXMuc3J2LnNldFZhbHVlKHRoaXMuc3J2Lm1ha2VWYWx1ZShkYXRlcykpO1xuICAgICAgdGhpcy5zdGFydCA9IGRhdGVzLmxlbmd0aCA+IDAgPyBkYXRlc1swXSA6IG51bGw7XG4gICAgICB0aGlzLmVuZCA9IGRhdGVzLmxlbmd0aCA+IDAgPyBkYXRlc1sxXSA6IG51bGw7XG4gICAgICB0aGlzLmNkKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9sZE9uQ2hhbmdlRm4gPSBkcC5vbkNoYW5nZUZuO1xuICAgIGRwLm9uQ2hhbmdlRm4gPSAobGlzdDogQXJyYXk8RGF0ZSB8IG51bGw+KSA9PiB7XG4gICAgICBsZXQgc3RhcnQ6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgICAgIGxldCBlbmQ6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmIChsaXN0Lmxlbmd0aCA+IDAgJiYgbGlzdC5maWx0ZXIodyA9PiB3ICE9IG51bGwpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBbc3RhcnQsIGVuZF0gPSBmaXhFbmRUaW1lT2ZSYW5nZShbbGlzdFswXSEsIGxpc3RbMV0hXSk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICB0aGlzLmVuZCA9IGVuZDtcbiAgICAgIG9sZE9uQ2hhbmdlRm4oc3RhcnQpO1xuICAgICAgdGhpcy5uZ01vZGVsRW5kID0gZW5kO1xuICAgICAgdGhpcy5uZ01vZGVsRW5kQ2hhbmdlLmVtaXQoZW5kKTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoU2hvcnRjdXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zaG9ydGN1dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IGVuYWJsZWQsIGxpc3QgfSA9IHRoaXMuX3Nob3J0Y3V0O1xuICAgIGxldCBleHRyYUZvb3RlcjogVGVtcGxhdGVSZWY8TnpTYWZlQW55PiB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIXRoaXMubmF0aXZlQ29tcCB8fCAhZW5hYmxlZCkge1xuICAgICAgZXh0cmFGb290ZXIgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5zaG9ydGN1dEZhY3RvcnkpIHtcbiAgICAgICAgdGhpcy5zaG9ydGN1dEZhY3RvcnkgPSB0aGlzLnZjci5jcmVhdGVDb21wb25lbnQoUmFuZ2VQaWNrZXJTaG9ydGN1dFRwbENvbXBvbmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCB7IGluc3RhbmNlIH0gPSB0aGlzLnNob3J0Y3V0RmFjdG9yeTtcbiAgICAgIGluc3RhbmNlLmxpc3QgPSBsaXN0ITtcbiAgICAgIGluc3RhbmNlLmNsaWNrID0gKGl0ZW06IEFsYWluRGF0ZVJhbmdlUGlja2VyU2hvcnRjdXRJdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGl0ZW0uZm4oW3RoaXMuc3RhcnQsIHRoaXMuZW5kXSk7XG4gICAgICAgIHRoaXMuc3J2LnNldFZhbHVlKHRoaXMuc3J2Lm1ha2VWYWx1ZShyZXMgYXMgRGF0ZVtdKSk7XG4gICAgICAgIHRoaXMuZHAub25DaGFuZ2VGbihyZXMpO1xuICAgICAgICB0aGlzLmRwLmNsb3NlKCk7XG4gICAgICB9O1xuICAgICAgZXh0cmFGb290ZXIgPSBpbnN0YW5jZS50cGw7XG4gICAgfVxuICAgIHRoaXMubmF0aXZlQ29tcC5kYXRlUGlja2VyLmV4dHJhRm9vdGVyID0gZXh0cmFGb290ZXI7XG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLmNkKCkpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3ZlcnJpZGVOYXRpdmUoKTtcbiAgICB0aGlzLnJlZnJlc2hTaG9ydGN1dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0b3J5U2hvcnRjdXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2hvcnRjdXRGYWN0b3J5ICE9IG51bGwpIHtcbiAgICAgIHRoaXMuc2hvcnRjdXRGYWN0b3J5LmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3RvcnlTaG9ydGN1dCgpO1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19
@@ -1,114 +0,0 @@
1
- import { Directive, EventEmitter, Input, Output } from '@angular/core';
2
- import { finalize } from 'rxjs';
3
- import { saveAs } from 'file-saver';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@delon/theme";
6
- export class DownFileDirective {
7
- getDisposition(data) {
8
- const arr = (data || '')
9
- .split(';')
10
- .filter(i => i.includes('='))
11
- .map(v => {
12
- const strArr = v.split('=');
13
- const utfId = `UTF-8''`;
14
- let value = strArr[1];
15
- if (value.startsWith(utfId))
16
- value = value.substring(utfId.length);
17
- return { [strArr[0].trim()]: value };
18
- });
19
- return arr.reduce((_o, item) => item, {});
20
- }
21
- constructor(el, _http) {
22
- this.el = el;
23
- this._http = _http;
24
- this.isFileSaverSupported = true;
25
- this.httpMethod = 'get';
26
- this.success = new EventEmitter();
27
- this.error = new EventEmitter();
28
- let isFileSaverSupported = false;
29
- try {
30
- isFileSaverSupported = !!new Blob();
31
- }
32
- catch { }
33
- this.isFileSaverSupported = isFileSaverSupported;
34
- if (!isFileSaverSupported) {
35
- el.nativeElement.classList.add(`down-file__not-support`);
36
- }
37
- }
38
- setDisabled(status) {
39
- const el = this.el.nativeElement;
40
- el.disabled = status;
41
- el.classList[status ? 'add' : 'remove'](`down-file__disabled`);
42
- }
43
- async _click(ev) {
44
- if (!this.isFileSaverSupported || (typeof this.pre === 'function' && !(await this.pre(ev)))) {
45
- ev.stopPropagation();
46
- ev.preventDefault();
47
- return;
48
- }
49
- this.setDisabled(true);
50
- this._http
51
- .request(this.httpMethod, this.httpUrl, {
52
- params: this.httpData || {},
53
- responseType: 'blob',
54
- observe: 'response',
55
- body: this.httpBody
56
- })
57
- .pipe(finalize(() => this.setDisabled(false)))
58
- .subscribe({
59
- next: (res) => {
60
- if (res.status !== 200 || res.body.size <= 0) {
61
- this.error.emit(res);
62
- return;
63
- }
64
- const disposition = this.getDisposition(res.headers.get('content-disposition'));
65
- let fileName = this.fileName;
66
- if (typeof fileName === 'function')
67
- fileName = fileName(res);
68
- fileName =
69
- fileName ||
70
- disposition[`filename*`] ||
71
- disposition[`filename`] ||
72
- res.headers.get('filename') ||
73
- res.headers.get('x-filename');
74
- saveAs(res.body, decodeURI(fileName));
75
- this.success.emit(res);
76
- },
77
- error: err => this.error.emit(err)
78
- });
79
- }
80
- }
81
- DownFileDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DownFileDirective, deps: [{ token: i0.ElementRef }, { token: i1._HttpClient }], target: i0.ɵɵFactoryTarget.Directive });
82
- DownFileDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: DownFileDirective, selector: "[down-file]", inputs: { httpData: ["http-data", "httpData"], httpBody: ["http-body", "httpBody"], httpMethod: ["http-method", "httpMethod"], httpUrl: ["http-url", "httpUrl"], fileName: ["file-name", "fileName"], pre: "pre" }, outputs: { success: "success", error: "error" }, host: { listeners: { "click": "_click($event)" } }, exportAs: ["downFile"], ngImport: i0 });
83
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DownFileDirective, decorators: [{
84
- type: Directive,
85
- args: [{
86
- selector: '[down-file]',
87
- exportAs: 'downFile',
88
- host: {
89
- '(click)': '_click($event)'
90
- }
91
- }]
92
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1._HttpClient }]; }, propDecorators: { httpData: [{
93
- type: Input,
94
- args: ['http-data']
95
- }], httpBody: [{
96
- type: Input,
97
- args: ['http-body']
98
- }], httpMethod: [{
99
- type: Input,
100
- args: ['http-method']
101
- }], httpUrl: [{
102
- type: Input,
103
- args: ['http-url']
104
- }], fileName: [{
105
- type: Input,
106
- args: ['file-name']
107
- }], pre: [{
108
- type: Input
109
- }], success: [{
110
- type: Output
111
- }], error: [{
112
- type: Output
113
- }] } });
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bi1maWxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FiYy9kb3duLWZpbGUvZG93bi1maWxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQzs7O0FBWXBDLE1BQU0sT0FBTyxpQkFBaUI7SUFXcEIsY0FBYyxDQUFDLElBQW1CO1FBQ3hDLE1BQU0sR0FBRyxHQUFrQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7YUFDcEQsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ1AsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUM7WUFDeEIsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25FLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENB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LENBQUM7d0JBQ3ZCLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQzt3QkFDM0IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSyxFQUFFLFNBQVMsQ0FBQyxRQUFrQixDQUFDLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekIsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUNuQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs4R0E3RVUsaUJBQWlCO2tHQUFqQixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFQN0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLElBQUksRUFBRTt3QkFDSixTQUFTLEVBQUUsZ0JBQWdCO3FCQUM1QjtpQkFDRjsySEFHcUIsUUFBUTtzQkFBM0IsS0FBSzt1QkFBQyxXQUFXO2dCQUNFLFFBQVE7c0JBQTNCLEtBQUs7dUJBQUMsV0FBVztnQkFDSSxVQUFVO3NCQUEvQixLQUFLO3VCQUFDLGFBQWE7Z0JBQ0QsT0FBTztzQkFBekIsS0FBSzt1QkFBQyxVQUFVO2dCQUNHLFFBQVE7c0JBQTNCLEtBQUs7dUJBQUMsV0FBVztnQkFDVCxHQUFHO3NCQUFYLEtBQUs7Z0JBQ2EsT0FBTztzQkFBekIsTUFBTTtnQkFDWSxLQUFLO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuXG5pbXBvcnQgeyBfSHR0cENsaWVudCB9IGZyb20gJ0BkZWxvbi90aGVtZSc7XG5pbXBvcnQgdHlwZSB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tkb3duLWZpbGVdJyxcbiAgZXhwb3J0QXM6ICdkb3duRmlsZScsXG4gIGhvc3Q6IHtcbiAgICAnKGNsaWNrKSc6ICdfY2xpY2soJGV2ZW50KSdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBEb3duRmlsZURpcmVjdGl2ZSB7XG4gIHByaXZhdGUgaXNGaWxlU2F2ZXJTdXBwb3J0ZWQgPSB0cnVlO1xuICBASW5wdXQoJ2h0dHAtZGF0YScpIGh0dHBEYXRhOiBOelNhZmVBbnk7XG4gIEBJbnB1dCgnaHR0cC1ib2R5JykgaHR0cEJvZHk6IE56U2FmZUFueTtcbiAgQElucHV0KCdodHRwLW1ldGhvZCcpIGh0dHBNZXRob2Q6IHN0cmluZyA9ICdnZXQnO1xuICBASW5wdXQoJ2h0dHAtdXJsJykgaHR0cFVybCE6IHN0cmluZztcbiAgQElucHV0KCdmaWxlLW5hbWUnKSBmaWxlTmFtZT86IHN0cmluZyB8ICgocmVwOiBIdHRwUmVzcG9uc2U8QmxvYj4pID0+IHN0cmluZyk7XG4gIEBJbnB1dCgpIHByZT86IChldjogTW91c2VFdmVudCkgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPEh0dHBSZXNwb25zZTxCbG9iPj4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxOelNhZmVBbnk+KCk7XG5cbiAgcHJpdmF0ZSBnZXREaXNwb3NpdGlvbihkYXRhOiBzdHJpbmcgfCBudWxsKTogTnpTYWZlQW55IHtcbiAgICBjb25zdCBhcnI6IEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0gKGRhdGEgfHwgJycpXG4gICAgICAuc3BsaXQoJzsnKVxuICAgICAgLmZpbHRlcihpID0+IGkuaW5jbHVkZXMoJz0nKSlcbiAgICAgIC5tYXAodiA9PiB7XG4gICAgICAgIGNvbnN0IHN0ckFyciA9IHYuc3BsaXQoJz0nKTtcbiAgICAgICAgY29uc3QgdXRmSWQgPSBgVVRGLTgnJ2A7XG4gICAgICAgIGxldCB2YWx1ZSA9IHN0ckFyclsxXTtcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgodXRmSWQpKSB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZyh1dGZJZC5sZW5ndGgpO1xuICAgICAgICByZXR1cm4geyBbc3RyQXJyWzBdLnRyaW0oKV06IHZhbHVlIH07XG4gICAgICB9KTtcbiAgICByZXR1cm4gYXJyLnJlZHVjZSgoX28sIGl0ZW0pID0+IGl0ZW0sIHt9KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+LCBwcml2YXRlIF9odHRwOiBfSHR0cENsaWVudCkge1xuICAgIGxldCBpc0ZpbGVTYXZlclN1cHBvcnRlZCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBpc0ZpbGVTYXZlclN1cHBvcnRlZCA9ICEhbmV3IEJsb2IoKTtcbiAgICB9IGNhdGNoIHt9XG4gICAgdGhpcy5pc0ZpbGVTYXZlclN1cHBvcnRlZCA9IGlzRmlsZVNhdmVyU3VwcG9ydGVkO1xuICAgIGlmICghaXNGaWxlU2F2ZXJTdXBwb3J0ZWQpIHtcbiAgICAgIGVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgZG93bi1maWxlX19ub3Qtc3VwcG9ydGApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0RGlzYWJsZWQoc3RhdHVzOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgZWwuZGlzYWJsZWQgPSBzdGF0dXM7XG4gICAgZWwuY2xhc3NMaXN0W3N0YXR1cyA/ICdhZGQnIDogJ3JlbW92ZSddKGBkb3duLWZpbGVfX2Rpc2FibGVkYCk7XG4gIH1cblxuICBhc3luYyBfY2xpY2soZXY6IE1vdXNlRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNGaWxlU2F2ZXJTdXBwb3J0ZWQgfHwgKHR5cGVvZiB0aGlzLnByZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhKGF3YWl0IHRoaXMucHJlKGV2KSkpKSB7XG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0RGlzYWJsZWQodHJ1ZSk7XG4gICAgdGhpcy5faHR0cFxuICAgICAgLnJlcXVlc3QodGhpcy5odHRwTWV0aG9kLCB0aGlzLmh0dHBVcmwsIHtcbiAgICAgICAgcGFyYW1zOiB0aGlzLmh0dHBEYXRhIHx8IHt9LFxuICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJyxcbiAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgYm9keTogdGhpcy5odHRwQm9keVxuICAgICAgfSlcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHRoaXMuc2V0RGlzYWJsZWQoZmFsc2UpKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBIdHRwUmVzcG9uc2U8QmxvYj4pID0+IHtcbiAgICAgICAgICBpZiAocmVzLnN0YXR1cyAhPT0gMjAwIHx8IHJlcy5ib2R5IS5zaXplIDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdChyZXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBkaXNwb3NpdGlvbiA9IHRoaXMuZ2V0RGlzcG9zaXRpb24ocmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LWRpc3Bvc2l0aW9uJykpO1xuICAgICAgICAgIGxldCBmaWxlTmFtZSA9IHRoaXMuZmlsZU5hbWU7XG4gICAgICAgICAgaWYgKHR5cGVvZiBmaWxlTmFtZSA9PT0gJ2Z1bmN0aW9uJykgZmlsZU5hbWUgPSBmaWxlTmFtZShyZXMpO1xuICAgICAgICAgIGZpbGVOYW1lID1cbiAgICAgICAgICAgIGZpbGVOYW1lIHx8XG4gICAgICAgICAgICBkaXNwb3NpdGlvbltgZmlsZW5hbWUqYF0gfHxcbiAgICAgICAgICAgIGRpc3Bvc2l0aW9uW2BmaWxlbmFtZWBdIHx8XG4gICAgICAgICAgICByZXMuaGVhZGVycy5nZXQoJ2ZpbGVuYW1lJykgfHxcbiAgICAgICAgICAgIHJlcy5oZWFkZXJzLmdldCgneC1maWxlbmFtZScpO1xuICAgICAgICAgIHNhdmVBcyhyZXMuYm9keSEsIGRlY29kZVVSSShmaWxlTmFtZSBhcyBzdHJpbmcpKTtcbiAgICAgICAgICB0aGlzLnN1Y2Nlc3MuZW1pdChyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZXJyID0+IHRoaXMuZXJyb3IuZW1pdChlcnIpXG4gICAgICB9KTtcbiAgfVxufVxuIl19
@@ -1,20 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { NgModule } from '@angular/core';
3
- import { AlainThemeModule } from '@delon/theme';
4
- import { DownFileDirective } from './down-file.directive';
5
- import * as i0 from "@angular/core";
6
- const DIRECTIVES = [DownFileDirective];
7
- export class DownFileModule {
8
- }
9
- DownFileModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DownFileModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
- DownFileModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: DownFileModule, declarations: [DownFileDirective], imports: [CommonModule, AlainThemeModule], exports: [DownFileDirective] });
11
- DownFileModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DownFileModule, imports: [CommonModule, AlainThemeModule] });
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DownFileModule, decorators: [{
13
- type: NgModule,
14
- args: [{
15
- imports: [CommonModule, AlainThemeModule],
16
- declarations: [...DIRECTIVES],
17
- exports: [...DIRECTIVES]
18
- }]
19
- }] });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bi1maWxlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FiYy9kb3duLWZpbGUvZG93bi1maWxlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRTFELE1BQU0sVUFBVSxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQU92QyxNQUFNLE9BQU8sY0FBYzs7MkdBQWQsY0FBYzs0R0FBZCxjQUFjLGlCQVBQLGlCQUFpQixhQUd6QixZQUFZLEVBQUUsZ0JBQWdCLGFBSHRCLGlCQUFpQjs0R0FPeEIsY0FBYyxZQUpmLFlBQVksRUFBRSxnQkFBZ0I7MkZBSTdCLGNBQWM7a0JBTDFCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDO29CQUN6QyxZQUFZLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztvQkFDN0IsT0FBTyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7aUJBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFsYWluVGhlbWVNb2R1bGUgfSBmcm9tICdAZGVsb24vdGhlbWUnO1xuXG5pbXBvcnQgeyBEb3duRmlsZURpcmVjdGl2ZSB9IGZyb20gJy4vZG93bi1maWxlLmRpcmVjdGl2ZSc7XG5cbmNvbnN0IERJUkVDVElWRVMgPSBbRG93bkZpbGVEaXJlY3RpdmVdO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBbGFpblRoZW1lTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbLi4uRElSRUNUSVZFU10sXG4gIGV4cG9ydHM6IFsuLi5ESVJFQ1RJVkVTXVxufSlcbmV4cG9ydCBjbGFzcyBEb3duRmlsZU1vZHVsZSB7fVxuIl19
@@ -1,232 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { DOCUMENT } from '@angular/common';
3
- import { ChangeDetectionStrategy, Component, Inject, Input, ViewChild, ViewEncapsulation } from '@angular/core';
4
- import { take } from 'rxjs';
5
- import { InputBoolean, InputNumber } from '@delon/util/decorator';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/platform-browser";
8
- import * as i2 from "@angular/common";
9
- import * as i3 from "@angular/cdk/observers";
10
- import * as i4 from "ng-zorro-antd/tooltip";
11
- export class EllipsisComponent {
12
- get linsWord() {
13
- const { targetCount, text, tail } = this;
14
- return ((targetCount > 0 ? text.substring(0, targetCount) : '') +
15
- (targetCount > 0 && targetCount < text.length ? tail : ''));
16
- }
17
- get win() {
18
- return this.doc.defaultView || window;
19
- }
20
- constructor(el, ngZone, dom, doc, cdr) {
21
- this.el = el;
22
- this.ngZone = ngZone;
23
- this.dom = dom;
24
- this.doc = doc;
25
- this.cdr = cdr;
26
- this.isSupportLineClamp = this.doc.body.style['webkitLineClamp'] !== undefined;
27
- this.inited = false;
28
- this.type = 'default';
29
- this.cls = {};
30
- this.text = '';
31
- this.targetCount = 0;
32
- this.tooltip = false;
33
- this.fullWidthRecognition = false;
34
- this.tail = '...';
35
- }
36
- getStrFullLength(str) {
37
- return str.split('').reduce((pre, cur) => {
38
- const charCode = cur.charCodeAt(0);
39
- if (charCode >= 0 && charCode <= 128) {
40
- return pre + 1;
41
- }
42
- return pre + 2;
43
- }, 0);
44
- }
45
- cutStrByFullLength(str, maxLength) {
46
- let showLength = 0;
47
- return str.split('').reduce((pre, cur) => {
48
- const charCode = cur.charCodeAt(0);
49
- if (charCode >= 0 && charCode <= 128) {
50
- showLength += 1;
51
- }
52
- else {
53
- showLength += 2;
54
- }
55
- if (showLength <= maxLength) {
56
- return pre + cur;
57
- }
58
- return pre;
59
- }, '');
60
- }
61
- bisection(targetHeight, mid, begin, end, text, node) {
62
- const suffix = this.tail;
63
- node.innerHTML = text.substring(0, mid) + suffix;
64
- let sh = node.offsetHeight;
65
- if (sh <= targetHeight) {
66
- node.innerHTML = text.substring(0, mid + 1) + suffix;
67
- sh = node.offsetHeight;
68
- if (sh > targetHeight || mid === begin) {
69
- return mid;
70
- }
71
- begin = mid;
72
- mid = end - begin === 1 ? begin + 1 : Math.floor((end - begin) / 2) + begin;
73
- return this.bisection(targetHeight, mid, begin, end, text, node);
74
- }
75
- if (mid - 1 < 0) {
76
- return mid;
77
- }
78
- node.innerHTML = text.substring(0, mid - 1) + suffix;
79
- sh = node.offsetHeight;
80
- if (sh <= targetHeight) {
81
- return mid - 1;
82
- }
83
- end = mid;
84
- mid = Math.floor((end - begin) / 2) + begin;
85
- return this.bisection(targetHeight, mid, begin, end, text, node);
86
- }
87
- genType() {
88
- const { lines, length, isSupportLineClamp } = this;
89
- this.cls = {
90
- ellipsis: true,
91
- ellipsis__lines: lines && !isSupportLineClamp,
92
- 'ellipsis__line-clamp': lines && isSupportLineClamp
93
- };
94
- if (!lines && !length) {
95
- this.type = 'default';
96
- }
97
- else if (!lines) {
98
- this.type = 'length';
99
- }
100
- else if (isSupportLineClamp) {
101
- this.type = 'line-clamp';
102
- }
103
- else {
104
- this.type = 'line';
105
- }
106
- }
107
- gen() {
108
- const { type, lines, length, fullWidthRecognition, tail, orgEl, cdr, ngZone } = this;
109
- if (type === 'length') {
110
- const el = orgEl.nativeElement;
111
- if (el.children.length > 0) {
112
- throw new Error('Ellipsis content must be string.');
113
- }
114
- const lengthText = el.textContent;
115
- const textLength = fullWidthRecognition ? this.getStrFullLength(lengthText) : lengthText.length;
116
- if (textLength <= length || length < 0) {
117
- this.text = lengthText;
118
- }
119
- else {
120
- let displayText;
121
- if (length - tail.length <= 0) {
122
- displayText = '';
123
- }
124
- else {
125
- displayText = fullWidthRecognition
126
- ? this.cutStrByFullLength(lengthText, length)
127
- : lengthText.slice(0, length);
128
- }
129
- this.text = displayText + tail;
130
- }
131
- ngZone.run(() => cdr.detectChanges());
132
- }
133
- else if (type === 'line') {
134
- const { shadowOrgEl, shadowTextEl } = this;
135
- const orgNode = shadowOrgEl.nativeElement;
136
- const lineText = orgNode.innerText || orgNode.textContent;
137
- const lineHeight = parseInt(this.win.getComputedStyle(this.getEl('.ellipsis')).lineHeight, 10);
138
- const targetHeight = lines * lineHeight;
139
- this.getEl('.ellipsis__handle').style.height = `${targetHeight}px`;
140
- if (orgNode.offsetHeight <= targetHeight) {
141
- this.text = lineText;
142
- this.targetCount = lineText.length;
143
- }
144
- else {
145
- // bisection
146
- const len = lineText.length;
147
- const mid = Math.ceil(len / 2);
148
- const count = this.bisection(targetHeight, mid, 0, len, lineText, shadowTextEl.nativeElement.firstChild);
149
- this.text = lineText;
150
- this.targetCount = count;
151
- }
152
- ngZone.run(() => cdr.detectChanges());
153
- }
154
- }
155
- getEl(cls) {
156
- return this.el.nativeElement.querySelector(cls);
157
- }
158
- executeOnStable(fn) {
159
- if (this.ngZone.isStable) {
160
- fn();
161
- }
162
- else {
163
- this.ngZone.onStable.asObservable().pipe(take(1)).subscribe(fn);
164
- }
165
- }
166
- refresh() {
167
- this.genType();
168
- const { type, dom, orgEl, cdr } = this;
169
- const html = orgEl.nativeElement.innerHTML;
170
- this.orgHtml = dom.bypassSecurityTrustHtml(html);
171
- cdr.detectChanges();
172
- this.executeOnStable(() => {
173
- this.gen();
174
- if (type !== 'line') {
175
- const el = this.getEl('.ellipsis');
176
- if (el) {
177
- el.innerHTML = html;
178
- }
179
- }
180
- });
181
- }
182
- ngAfterViewInit() {
183
- this.inited = true;
184
- this.refresh();
185
- }
186
- ngOnChanges() {
187
- if (this.inited) {
188
- this.refresh();
189
- }
190
- }
191
- }
192
- EllipsisComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EllipsisComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.DomSanitizer }, { token: DOCUMENT }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
193
- EllipsisComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: EllipsisComponent, selector: "ellipsis", inputs: { tooltip: "tooltip", length: "length", lines: "lines", fullWidthRecognition: "fullWidthRecognition", tail: "tail" }, viewQueries: [{ propertyName: "orgEl", first: true, predicate: ["orgEl"], descendants: true }, { propertyName: "shadowOrgEl", first: true, predicate: ["shadowOrgEl"], descendants: true }, { propertyName: "shadowTextEl", first: true, predicate: ["shadowTextEl"], descendants: true }], exportAs: ["ellipsis"], usesOnChanges: true, ngImport: i0, template: "<div (cdkObserveContent)=\"refresh()\" #orgEl style=\"display: none\"><ng-content></ng-content></div>\n<ng-template #tooltipTpl let-con>\n <span\n *ngIf=\"tooltip; else con\"\n nz-tooltip\n [nzTooltipTitle]=\"titleTpl\"\n [nzTooltipOverlayStyle]=\"{ 'overflow-wrap': 'break-word', 'word-wrap': 'break-word' }\"\n >\n <ng-container *ngTemplateOutlet=\"con\"></ng-container>\n <ng-template #titleTpl><div [innerHTML]=\"orgHtml\"></div></ng-template>\n </span>\n</ng-template>\n<ng-container [ngSwitch]=\"type\">\n <span *ngSwitchCase=\"'default'\" [ngClass]=\"cls\"></span>\n <ng-container *ngSwitchCase=\"'length'\">\n <ng-template [ngTemplateOutlet]=\"tooltipTpl\" [ngTemplateOutletContext]=\"{ $implicit: lengthTpl }\"></ng-template>\n <ng-template #lengthTpl>{{ text }}</ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"'line-clamp'\">\n <ng-template [ngTemplateOutlet]=\"tooltipTpl\" [ngTemplateOutletContext]=\"{ $implicit: lineClampTpl }\"></ng-template>\n <ng-template #lineClampTpl>\n <div [ngClass]=\"cls\" [ngStyle]=\"{ '-webkit-line-clamp': lines, '-webkit-box-orient': 'vertical' }\"></div>\n </ng-template>\n </ng-container>\n <div *ngSwitchCase=\"'line'\" [ngClass]=\"cls\">\n <div class=\"ellipsis__handle\">\n <ng-template [ngTemplateOutlet]=\"tooltipTpl\" [ngTemplateOutletContext]=\"{ $implicit: lineTpl }\"></ng-template>\n <ng-template #lineTpl>{{ linsWord }}</ng-template>\n <div class=\"ellipsis__shadow\" #shadowOrgEl [innerHTML]=\"orgHtml\"></div>\n <div class=\"ellipsis__shadow\" #shadowTextEl>\n <span>{{ text }}</span>\n </div>\n </div>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }, { kind: "directive", type: i4.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
194
- __decorate([
195
- InputBoolean()
196
- ], EllipsisComponent.prototype, "tooltip", void 0);
197
- __decorate([
198
- InputNumber(null)
199
- ], EllipsisComponent.prototype, "length", void 0);
200
- __decorate([
201
- InputNumber(null)
202
- ], EllipsisComponent.prototype, "lines", void 0);
203
- __decorate([
204
- InputBoolean()
205
- ], EllipsisComponent.prototype, "fullWidthRecognition", void 0);
206
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EllipsisComponent, decorators: [{
207
- type: Component,
208
- args: [{ selector: 'ellipsis', exportAs: 'ellipsis', preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div (cdkObserveContent)=\"refresh()\" #orgEl style=\"display: none\"><ng-content></ng-content></div>\n<ng-template #tooltipTpl let-con>\n <span\n *ngIf=\"tooltip; else con\"\n nz-tooltip\n [nzTooltipTitle]=\"titleTpl\"\n [nzTooltipOverlayStyle]=\"{ 'overflow-wrap': 'break-word', 'word-wrap': 'break-word' }\"\n >\n <ng-container *ngTemplateOutlet=\"con\"></ng-container>\n <ng-template #titleTpl><div [innerHTML]=\"orgHtml\"></div></ng-template>\n </span>\n</ng-template>\n<ng-container [ngSwitch]=\"type\">\n <span *ngSwitchCase=\"'default'\" [ngClass]=\"cls\"></span>\n <ng-container *ngSwitchCase=\"'length'\">\n <ng-template [ngTemplateOutlet]=\"tooltipTpl\" [ngTemplateOutletContext]=\"{ $implicit: lengthTpl }\"></ng-template>\n <ng-template #lengthTpl>{{ text }}</ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"'line-clamp'\">\n <ng-template [ngTemplateOutlet]=\"tooltipTpl\" [ngTemplateOutletContext]=\"{ $implicit: lineClampTpl }\"></ng-template>\n <ng-template #lineClampTpl>\n <div [ngClass]=\"cls\" [ngStyle]=\"{ '-webkit-line-clamp': lines, '-webkit-box-orient': 'vertical' }\"></div>\n </ng-template>\n </ng-container>\n <div *ngSwitchCase=\"'line'\" [ngClass]=\"cls\">\n <div class=\"ellipsis__handle\">\n <ng-template [ngTemplateOutlet]=\"tooltipTpl\" [ngTemplateOutletContext]=\"{ $implicit: lineTpl }\"></ng-template>\n <ng-template #lineTpl>{{ linsWord }}</ng-template>\n <div class=\"ellipsis__shadow\" #shadowOrgEl [innerHTML]=\"orgHtml\"></div>\n <div class=\"ellipsis__shadow\" #shadowTextEl>\n <span>{{ text }}</span>\n </div>\n </div>\n </div>\n</ng-container>\n" }]
209
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.DomSanitizer }, { type: undefined, decorators: [{
210
- type: Inject,
211
- args: [DOCUMENT]
212
- }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { orgEl: [{
213
- type: ViewChild,
214
- args: ['orgEl', { static: false }]
215
- }], shadowOrgEl: [{
216
- type: ViewChild,
217
- args: ['shadowOrgEl', { static: false }]
218
- }], shadowTextEl: [{
219
- type: ViewChild,
220
- args: ['shadowTextEl', { static: false }]
221
- }], tooltip: [{
222
- type: Input
223
- }], length: [{
224
- type: Input
225
- }], lines: [{
226
- type: Input
227
- }], fullWidthRecognition: [{
228
- type: Input
229
- }], tail: [{
230
- type: Input
231
- }] } });
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxsaXBzaXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYWJjL2VsbGlwc2lzL2VsbGlwc2lzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FiYy9lbGxpcHNpcy9lbGxpcHNpcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULE1BQU0sRUFDTixLQUFLLEVBR0wsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVCLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLFdBQVcsRUFBZSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7QUFXN0YsTUFBTSxPQUFPLGlCQUFpQjtJQXVCNUIsSUFBSSxRQUFRO1FBQ1YsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3pDLE9BQU8sQ0FDTCxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkQsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUMzRCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQVksR0FBRztRQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxZQUNVLEVBQWMsRUFDZCxNQUFjLEVBQ2QsR0FBaUIsRUFDQyxHQUFjLEVBQ2hDLEdBQXNCO1FBSnRCLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsUUFBRyxHQUFILEdBQUcsQ0FBYztRQUNDLFFBQUcsR0FBSCxHQUFHLENBQVc7UUFDaEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFsQ3hCLHVCQUFrQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLFNBQVMsQ0FBQztRQUkxRSxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBRXZCLFNBQUksR0FBRyxTQUFTLENBQUM7UUFDakIsUUFBRyxHQUFHLEVBQUUsQ0FBQztRQUNULFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUVTLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFHaEIseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQzdDLFNBQUksR0FBRyxLQUFLLENBQUM7SUFvQm5CLENBQUM7SUFFSSxnQkFBZ0IsQ0FBQyxHQUFXO1FBQ2xDLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxJQUFJLFFBQVEsSUFBSSxDQUFDLElBQUksUUFBUSxJQUFJLEdBQUcsRUFBRTtnQkFDcEMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2FBQ2hCO1lBQ0QsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxHQUFXLEVBQUUsU0FBaUI7UUFDdkQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxJQUFJLFFBQVEsSUFBSSxDQUFDLElBQUksUUFBUSxJQUFJLEdBQUcsRUFBRTtnQkFDcEMsVUFBVSxJQUFJLENBQUMsQ0FBQzthQUNqQjtpQkFBTTtnQkFDTCxVQUFVLElBQUksQ0FBQyxDQUFDO2FBQ2pCO1lBQ0QsSUFBSSxVQUFVLElBQUksU0FBUyxFQUFFO2dCQUMzQixPQUFPLEdBQUcsR0FBRyxHQUFHLENBQUM7YUFDbEI7WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFTyxTQUFTLENBQ2YsWUFBb0IsRUFDcEIsR0FBVyxFQUNYLEtBQWEsRUFDYixHQUFXLEVBQ1gsSUFBWSxFQUNaLElBQWlCO1FBRWpCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDakQsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUUzQixJQUFJLEVBQUUsSUFBSSxZQUFZLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQ3JELEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ3ZCLElBQUksRUFBRSxHQUFHLFlBQVksSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFO2dCQUN0QyxPQUFPLEdBQUcsQ0FBQzthQUNaO1lBQ0QsS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUNaLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDNUUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbEU7UUFDRCxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNyRCxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN2QixJQUFJLEVBQUUsSUFBSSxZQUFZLEVBQUU7WUFDdEIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ2hCO1FBQ0QsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNWLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU8sT0FBTztRQUNiLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ25ELElBQUksQ0FBQyxHQUFHLEdBQUc7WUFDVCxRQUFRLEVBQUUsSUFBSTtZQUNkLGVBQWUsRUFBRSxLQUFLLElBQUksQ0FBQyxrQkFBa0I7WUFDN0Msc0JBQXNCLEVBQUUsS0FBSyxJQUFJLGtCQUFrQjtTQUNwRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztTQUN2QjthQUFNLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7U0FDdEI7YUFBTSxJQUFJLGtCQUFrQixFQUFFO1lBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO1NBQzFCO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFTyxHQUFHO1FBQ1QsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztRQUNyRixJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDckIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLGFBQTRCLENBQUM7WUFDOUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQzthQUNyRDtZQUNELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxXQUFZLENBQUM7WUFDbkMsTUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUNoRyxJQUFJLFVBQVUsSUFBSSxNQUFPLElBQUksTUFBTyxHQUFHLENBQUMsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7YUFDeEI7aUJBQU07Z0JBQ0wsSUFBSSxXQUFtQixDQUFDO2dCQUN4QixJQUFJLE1BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtvQkFDOUIsV0FBVyxHQUFHLEVBQUUsQ0FBQztpQkFDbEI7cUJBQU07b0JBQ0wsV0FBVyxHQUFHLG9CQUFvQjt3QkFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsTUFBTyxDQUFDO3dCQUM5QyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQ2pDO2dCQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQzthQUNoQztZQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7U0FDdkM7YUFBTSxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDMUIsTUFBTSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDM0MsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLGFBQTRCLENBQUM7WUFDekQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsV0FBWSxDQUFDO1lBQzNELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEcsTUFBTSxZQUFZLEdBQUcsS0FBTSxHQUFHLFVBQVUsQ0FBQztZQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLFlBQVksSUFBSSxDQUFDO1lBRW5FLElBQUksT0FBTyxDQUFDLFlBQVksSUFBSSxZQUFZLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO2dCQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7YUFDcEM7aUJBQU07Z0JBQ0wsWUFBWTtnQkFDWixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUM1QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3pHLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO2dCQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQzthQUMxQjtZQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLEdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVPLGVBQWUsQ0FBQyxFQUFjO1FBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDeEIsRUFBRSxFQUFFLENBQUM7U0FDTjthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUN2QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztRQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1gsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO2dCQUNuQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLEVBQUUsRUFBRTtvQkFDTixFQUFFLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztpQkFDckI7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDOzs4R0EvTVUsaUJBQWlCLDhGQXVDbEIsUUFBUTtrR0F2Q1AsaUJBQWlCLHVmQzVCOUIsNnBEQW1DQTtBRFUyQjtJQUFmLFlBQVksRUFBRTtrREFBaUI7QUFDYjtJQUFsQixXQUFXLENBQUMsSUFBSSxDQUFDO2lEQUFpQjtBQUNoQjtJQUFsQixXQUFXLENBQUMsSUFBSSxDQUFDO2dEQUFnQjtBQUNsQjtJQUFmLFlBQVksRUFBRTsrREFBOEI7MkZBcEIzQyxpQkFBaUI7a0JBUjdCLFNBQVM7K0JBQ0UsVUFBVSxZQUNWLFVBQVUsdUJBRUMsS0FBSyxtQkFDVCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJOzswQkF5Q2xDLE1BQU07MkJBQUMsUUFBUTs0RUFoQzZCLEtBQUs7c0JBQW5ELFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDZ0IsV0FBVztzQkFBL0QsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNXLFlBQVk7c0JBQWpFLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFRbkIsT0FBTztzQkFBL0IsS0FBSztnQkFDc0IsTUFBTTtzQkFBakMsS0FBSztnQkFDc0IsS0FBSztzQkFBaEMsS0FBSztnQkFDbUIsb0JBQW9CO3NCQUE1QyxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBJbnB1dEJvb2xlYW4sIElucHV0TnVtYmVyLCBOdW1iZXJJbnB1dCB9IGZyb20gJ0BkZWxvbi91dGlsL2RlY29yYXRvcic7XG5pbXBvcnQgdHlwZSB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VsbGlwc2lzJyxcbiAgZXhwb3J0QXM6ICdlbGxpcHNpcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGxpcHNpcy5jb21wb25lbnQuaHRtbCcsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBFbGxpcHNpc0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV90b29sdGlwOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9sZW5ndGg6IE51bWJlcklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbGluZXM6IE51bWJlcklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZnVsbFdpZHRoUmVjb2duaXRpb246IEJvb2xlYW5JbnB1dDtcblxuICBwcml2YXRlIGlzU3VwcG9ydExpbmVDbGFtcCA9IHRoaXMuZG9jLmJvZHkuc3R5bGVbJ3dlYmtpdExpbmVDbGFtcCddICE9PSB1bmRlZmluZWQ7XG4gIEBWaWV3Q2hpbGQoJ29yZ0VsJywgeyBzdGF0aWM6IGZhbHNlIH0pIHByaXZhdGUgb3JnRWwhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzaGFkb3dPcmdFbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIHNoYWRvd09yZ0VsITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2hhZG93VGV4dEVsJywgeyBzdGF0aWM6IGZhbHNlIH0pIHByaXZhdGUgc2hhZG93VGV4dEVsITogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBpbml0ZWQgPSBmYWxzZTtcbiAgb3JnSHRtbCE6IFNhZmVIdG1sO1xuICB0eXBlID0gJ2RlZmF1bHQnO1xuICBjbHMgPSB7fTtcbiAgdGV4dCA9ICcnO1xuICB0YXJnZXRDb3VudCA9IDA7XG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRvb2x0aXAgPSBmYWxzZTtcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKG51bGwpIGxlbmd0aD86IG51bWJlcjtcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKG51bGwpIGxpbmVzPzogbnVtYmVyO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZnVsbFdpZHRoUmVjb2duaXRpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgdGFpbCA9ICcuLi4nO1xuXG4gIGdldCBsaW5zV29yZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgdGFyZ2V0Q291bnQsIHRleHQsIHRhaWwgfSA9IHRoaXM7XG4gICAgcmV0dXJuIChcbiAgICAgICh0YXJnZXRDb3VudCA+IDAgPyB0ZXh0LnN1YnN0cmluZygwLCB0YXJnZXRDb3VudCkgOiAnJykgK1xuICAgICAgKHRhcmdldENvdW50ID4gMCAmJiB0YXJnZXRDb3VudCA8IHRleHQubGVuZ3RoID8gdGFpbCA6ICcnKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldCB3aW4oKTogTnpTYWZlQW55IHtcbiAgICByZXR1cm4gdGhpcy5kb2MuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgZG9tOiBEb21TYW5pdGl6ZXIsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2M6IE56U2FmZUFueSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIHByaXZhdGUgZ2V0U3RyRnVsbExlbmd0aChzdHI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN0ci5zcGxpdCgnJykucmVkdWNlKChwcmUsIGN1cikgPT4ge1xuICAgICAgY29uc3QgY2hhckNvZGUgPSBjdXIuY2hhckNvZGVBdCgwKTtcbiAgICAgIGlmIChjaGFyQ29kZSA+PSAwICYmIGNoYXJDb2RlIDw9IDEyOCkge1xuICAgICAgICByZXR1cm4gcHJlICsgMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmUgKyAyO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBjdXRTdHJCeUZ1bGxMZW5ndGgoc3RyOiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBsZXQgc2hvd0xlbmd0aCA9IDA7XG4gICAgcmV0dXJuIHN0ci5zcGxpdCgnJykucmVkdWNlKChwcmUsIGN1cikgPT4ge1xuICAgICAgY29uc3QgY2hhckNvZGUgPSBjdXIuY2hhckNvZGVBdCgwKTtcbiAgICAgIGlmIChjaGFyQ29kZSA+PSAwICYmIGNoYXJDb2RlIDw9IDEyOCkge1xuICAgICAgICBzaG93TGVuZ3RoICs9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaG93TGVuZ3RoICs9IDI7XG4gICAgICB9XG4gICAgICBpZiAoc2hvd0xlbmd0aCA8PSBtYXhMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHByZSArIGN1cjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcmU7XG4gICAgfSwgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBiaXNlY3Rpb24oXG4gICAgdGFyZ2V0SGVpZ2h0OiBudW1iZXIsXG4gICAgbWlkOiBudW1iZXIsXG4gICAgYmVnaW46IG51bWJlcixcbiAgICBlbmQ6IG51bWJlcixcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgbm9kZTogSFRNTEVsZW1lbnRcbiAgKTogbnVtYmVyIHtcbiAgICBjb25zdCBzdWZmaXggPSB0aGlzLnRhaWw7XG4gICAgbm9kZS5pbm5lckhUTUwgPSB0ZXh0LnN1YnN0cmluZygwLCBtaWQpICsgc3VmZml4O1xuICAgIGxldCBzaCA9IG5vZGUub2Zmc2V0SGVpZ2h0O1xuXG4gICAgaWYgKHNoIDw9IHRhcmdldEhlaWdodCkge1xuICAgICAgbm9kZS5pbm5lckhUTUwgPSB0ZXh0LnN1YnN0cmluZygwLCBtaWQgKyAxKSArIHN1ZmZpeDtcbiAgICAgIHNoID0gbm9kZS5vZmZzZXRIZWlnaHQ7XG4gICAgICBpZiAoc2ggPiB0YXJnZXRIZWlnaHQgfHwgbWlkID09PSBiZWdpbikge1xuICAgICAgICByZXR1cm4gbWlkO1xuICAgICAgfVxuICAgICAgYmVnaW4gPSBtaWQ7XG4gICAgICBtaWQgPSBlbmQgLSBiZWdpbiA9PT0gMSA/IGJlZ2luICsgMSA6IE1hdGguZmxvb3IoKGVuZCAtIGJlZ2luKSAvIDIpICsgYmVnaW47XG4gICAgICByZXR1cm4gdGhpcy5iaXNlY3Rpb24odGFyZ2V0SGVpZ2h0LCBtaWQsIGJlZ2luLCBlbmQsIHRleHQsIG5vZGUpO1xuICAgIH1cbiAgICBpZiAobWlkIC0gMSA8IDApIHtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfVxuICAgIG5vZGUuaW5uZXJIVE1MID0gdGV4dC5zdWJzdHJpbmcoMCwgbWlkIC0gMSkgKyBzdWZmaXg7XG4gICAgc2ggPSBub2RlLm9mZnNldEhlaWdodDtcbiAgICBpZiAoc2ggPD0gdGFyZ2V0SGVpZ2h0KSB7XG4gICAgICByZXR1cm4gbWlkIC0gMTtcbiAgICB9XG4gICAgZW5kID0gbWlkO1xuICAgIG1pZCA9IE1hdGguZmxvb3IoKGVuZCAtIGJlZ2luKSAvIDIpICsgYmVnaW47XG4gICAgcmV0dXJuIHRoaXMuYmlzZWN0aW9uKHRhcmdldEhlaWdodCwgbWlkLCBiZWdpbiwgZW5kLCB0ZXh0LCBub2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuVHlwZSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGxpbmVzLCBsZW5ndGgsIGlzU3VwcG9ydExpbmVDbGFtcCB9ID0gdGhpcztcbiAgICB0aGlzLmNscyA9IHtcbiAgICAgIGVsbGlwc2lzOiB0cnVlLFxuICAgICAgZWxsaXBzaXNfX2xpbmVzOiBsaW5lcyAmJiAhaXNTdXBwb3J0TGluZUNsYW1wLFxuICAgICAgJ2VsbGlwc2lzX19saW5lLWNsYW1wJzogbGluZXMgJiYgaXNTdXBwb3J0TGluZUNsYW1wXG4gICAgfTtcbiAgICBpZiAoIWxpbmVzICYmICFsZW5ndGgpIHtcbiAgICAgIHRoaXMudHlwZSA9ICdkZWZhdWx0JztcbiAgICB9IGVsc2UgaWYgKCFsaW5lcykge1xuICAgICAgdGhpcy50eXBlID0gJ2xlbmd0aCc7XG4gICAgfSBlbHNlIGlmIChpc1N1cHBvcnRMaW5lQ2xhbXApIHtcbiAgICAgIHRoaXMudHlwZSA9ICdsaW5lLWNsYW1wJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50eXBlID0gJ2xpbmUnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2VuKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgdHlwZSwgbGluZXMsIGxlbmd0aCwgZnVsbFdpZHRoUmVjb2duaXRpb24sIHRhaWwsIG9yZ0VsLCBjZHIsIG5nWm9uZSB9ID0gdGhpcztcbiAgICBpZiAodHlwZSA9PT0gJ2xlbmd0aCcpIHtcbiAgICAgIGNvbnN0IGVsID0gb3JnRWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmIChlbC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRWxsaXBzaXMgY29udGVudCBtdXN0IGJlIHN0cmluZy4nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxlbmd0aFRleHQgPSBlbC50ZXh0Q29udGVudCE7XG4gICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gZnVsbFdpZHRoUmVjb2duaXRpb24gPyB0aGlzLmdldFN0ckZ1bGxMZW5ndGgobGVuZ3RoVGV4dCkgOiBsZW5ndGhUZXh0Lmxlbmd0aDtcbiAgICAgIGlmICh0ZXh0TGVuZ3RoIDw9IGxlbmd0aCEgfHwgbGVuZ3RoISA8IDApIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gbGVuZ3RoVGV4dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBkaXNwbGF5VGV4dDogc3RyaW5nO1xuICAgICAgICBpZiAobGVuZ3RoISAtIHRhaWwubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICBkaXNwbGF5VGV4dCA9ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpc3BsYXlUZXh0ID0gZnVsbFdpZHRoUmVjb2duaXRpb25cbiAgICAgICAgICAgID8gdGhpcy5jdXRTdHJCeUZ1bGxMZW5ndGgobGVuZ3RoVGV4dCwgbGVuZ3RoISlcbiAgICAgICAgICAgIDogbGVuZ3RoVGV4dC5zbGljZSgwLCBsZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGV4dCA9IGRpc3BsYXlUZXh0ICsgdGFpbDtcbiAgICAgIH1cbiAgICAgIG5nWm9uZS5ydW4oKCkgPT4gY2RyLmRldGVjdENoYW5nZXMoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnbGluZScpIHtcbiAgICAgIGNvbnN0IHsgc2hhZG93T3JnRWwsIHNoYWRvd1RleHRFbCB9ID0gdGhpcztcbiAgICAgIGNvbnN0IG9yZ05vZGUgPSBzaGFkb3dPcmdFbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgY29uc3QgbGluZVRleHQgPSBvcmdOb2RlLmlubmVyVGV4dCB8fCBvcmdOb2RlLnRleHRDb250ZW50ITtcbiAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBwYXJzZUludCh0aGlzLndpbi5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZ2V0RWwoJy5lbGxpcHNpcycpKS5saW5lSGVpZ2h0ISwgMTApO1xuICAgICAgY29uc3QgdGFyZ2V0SGVpZ2h0ID0gbGluZXMhICogbGluZUhlaWdodDtcbiAgICAgIHRoaXMuZ2V0RWwoJy5lbGxpcHNpc19faGFuZGxlJykuc3R5bGUuaGVpZ2h0ID0gYCR7dGFyZ2V0SGVpZ2h0fXB4YDtcblxuICAgICAgaWYgKG9yZ05vZGUub2Zmc2V0SGVpZ2h0IDw9IHRhcmdldEhlaWdodCkge1xuICAgICAgICB0aGlzLnRleHQgPSBsaW5lVGV4dDtcbiAgICAgICAgdGhpcy50YXJnZXRDb3VudCA9IGxpbmVUZXh0Lmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGJpc2VjdGlvblxuICAgICAgICBjb25zdCBsZW4gPSBsaW5lVGV4dC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG1pZCA9IE1hdGguY2VpbChsZW4gLyAyKTtcblxuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMuYmlzZWN0aW9uKHRhcmdldEhlaWdodCwgbWlkLCAwLCBsZW4sIGxpbmVUZXh0LCBzaGFkb3dUZXh0RWwubmF0aXZlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICAgICAgdGhpcy50ZXh0ID0gbGluZVRleHQ7XG4gICAgICAgIHRoaXMudGFyZ2V0Q291bnQgPSBjb3VudDtcbiAgICAgIH1cbiAgICAgIG5nWm9uZS5ydW4oKCkgPT4gY2RyLmRldGVjdENoYW5nZXMoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbChjbHM6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoY2xzKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZU9uU3RhYmxlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubmdab25lLmlzU3RhYmxlKSB7XG4gICAgICBmbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShmbik7XG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICB0aGlzLmdlblR5cGUoKTtcbiAgICBjb25zdCB7IHR5cGUsIGRvbSwgb3JnRWwsIGNkciB9ID0gdGhpcztcbiAgICBjb25zdCBodG1sID0gb3JnRWwubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgdGhpcy5vcmdIdG1sID0gZG9tLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGh0bWwpO1xuICAgIGNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5leGVjdXRlT25TdGFibGUoKCkgPT4ge1xuICAgICAgdGhpcy5nZW4oKTtcbiAgICAgIGlmICh0eXBlICE9PSAnbGluZScpIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmdldEVsKCcuZWxsaXBzaXMnKTtcbiAgICAgICAgaWYgKGVsKSB7XG4gICAgICAgICAgZWwuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluaXRlZCkge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IChjZGtPYnNlcnZlQ29udGVudCk9XCJyZWZyZXNoKClcIiAjb3JnRWwgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PlxuPG5nLXRlbXBsYXRlICN0b29sdGlwVHBsIGxldC1jb24+XG4gIDxzcGFuXG4gICAgKm5nSWY9XCJ0b29sdGlwOyBlbHNlIGNvblwiXG4gICAgbnotdG9vbHRpcFxuICAgIFtuelRvb2x0aXBUaXRsZV09XCJ0aXRsZVRwbFwiXG4gICAgW256VG9vbHRpcE92ZXJsYXlTdHlsZV09XCJ7ICdvdmVyZmxvdy13cmFwJzogJ2JyZWFrLXdvcmQnLCAnd29yZC13cmFwJzogJ2JyZWFrLXdvcmQnIH1cIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvblwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjdGl0bGVUcGw+PGRpdiBbaW5uZXJIVE1MXT1cIm9yZ0h0bWxcIj48L2Rpdj48L25nLXRlbXBsYXRlPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHlwZVwiPlxuICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RlZmF1bHQnXCIgW25nQ2xhc3NdPVwiY2xzXCI+PC9zcGFuPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbGVuZ3RoJ1wiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0b29sdGlwVHBsXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBsZW5ndGhUcGwgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNsZW5ndGhUcGw+e3sgdGV4dCB9fTwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbGluZS1jbGFtcCdcIj5cbiAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidG9vbHRpcFRwbFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbGluZUNsYW1wVHBsIH1cIj48L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjbGluZUNsYW1wVHBsPlxuICAgICAgPGRpdiBbbmdDbGFzc109XCJjbHNcIiBbbmdTdHlsZV09XCJ7ICctd2Via2l0LWxpbmUtY2xhbXAnOiBsaW5lcywgJy13ZWJraXQtYm94LW9yaWVudCc6ICd2ZXJ0aWNhbCcgfVwiPjwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbGluZSdcIiBbbmdDbGFzc109XCJjbHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZWxsaXBzaXNfX2hhbmRsZVwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRvb2x0aXBUcGxcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGxpbmVUcGwgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI2xpbmVUcGw+e3sgbGluc1dvcmQgfX08L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz1cImVsbGlwc2lzX19zaGFkb3dcIiAjc2hhZG93T3JnRWwgW2lubmVySFRNTF09XCJvcmdIdG1sXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZWxsaXBzaXNfX3NoYWRvd1wiICNzaGFkb3dUZXh0RWw+XG4gICAgICAgIDxzcGFuPnt7IHRleHQgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==