@simpleangularcontrols/sac-bootstrap4 13.0.0-rc.13 → 13.0.0-rc.14

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 (508) hide show
  1. package/README.md +17 -17
  2. package/components/browser/browser.d.ts +48 -48
  3. package/components/browser/browser.module.d.ts +14 -14
  4. package/components/browser/browser.module.ngfactory.d.ts +3 -3
  5. package/components/browser/browser.module.ngsummary.d.ts +1 -1
  6. package/components/browser/browser.ngfactory.d.ts +3 -3
  7. package/components/browser/browser.ngsummary.d.ts +1 -1
  8. package/controls/buttons/button.d.ts +11 -11
  9. package/controls/buttons/button.module.d.ts +8 -8
  10. package/controls/buttons/button.module.ngfactory.d.ts +3 -3
  11. package/controls/buttons/button.module.ngsummary.d.ts +1 -1
  12. package/controls/buttons/button.ngfactory.d.ts +3 -3
  13. package/controls/buttons/button.ngsummary.d.ts +1 -1
  14. package/controls/checkbox/checkbox.d.ts +17 -17
  15. package/controls/checkbox/checkbox.module.d.ts +12 -12
  16. package/controls/checkbox/checkbox.module.ngfactory.d.ts +3 -3
  17. package/controls/checkbox/checkbox.module.ngsummary.d.ts +1 -1
  18. package/controls/checkbox/checkbox.ngfactory.d.ts +3 -3
  19. package/controls/checkbox/checkbox.ngsummary.d.ts +1 -1
  20. package/controls/checkbox/radiobutton.d.ts +19 -19
  21. package/controls/checkbox/radiobutton.ngfactory.d.ts +3 -3
  22. package/controls/checkbox/radiobutton.ngsummary.d.ts +1 -1
  23. package/controls/checkbox/radiobuttons.d.ts +17 -17
  24. package/controls/checkbox/radiobuttons.ngfactory.d.ts +3 -3
  25. package/controls/checkbox/radiobuttons.ngsummary.d.ts +1 -1
  26. package/controls/confirm/confirm.d.ts +9 -9
  27. package/controls/confirm/confirm.module.d.ts +19 -19
  28. package/controls/confirm/confirm.module.ngfactory.d.ts +3 -3
  29. package/controls/confirm/confirm.module.ngsummary.d.ts +1 -1
  30. package/controls/confirm/confirm.ngfactory.d.ts +3 -3
  31. package/controls/confirm/confirm.ngsummary.d.ts +1 -1
  32. package/controls/confirm/confirm.service.d.ts +57 -57
  33. package/controls/confirm/confirm.service.ngfactory.d.ts +3 -3
  34. package/controls/confirm/confirm.service.ngsummary.d.ts +1 -1
  35. package/controls/contextmenu/contextmenu.d.ts +19 -19
  36. package/controls/contextmenu/contextmenu.module.d.ts +12 -12
  37. package/controls/contextmenu/contextmenu.module.ngfactory.d.ts +3 -3
  38. package/controls/contextmenu/contextmenu.module.ngsummary.d.ts +1 -1
  39. package/controls/contextmenu/contextmenu.ngfactory.d.ts +3 -3
  40. package/controls/contextmenu/contextmenu.ngsummary.d.ts +1 -1
  41. package/controls/contextmenu/contextmenuanchor.d.ts +15 -15
  42. package/controls/contextmenu/contextmenuanchor.ngfactory.d.ts +3 -3
  43. package/controls/contextmenu/contextmenuanchor.ngsummary.d.ts +1 -1
  44. package/controls/contextmenu/contextmenucontainer.d.ts +15 -15
  45. package/controls/contextmenu/contextmenucontainer.ngfactory.d.ts +3 -3
  46. package/controls/contextmenu/contextmenucontainer.ngsummary.d.ts +1 -1
  47. package/controls/contextmenu/contextmenuitembutton.d.ts +13 -13
  48. package/controls/contextmenu/contextmenuitembutton.ngfactory.d.ts +3 -3
  49. package/controls/contextmenu/contextmenuitembutton.ngsummary.d.ts +1 -1
  50. package/controls/contextmenu/contextmenuitemsplitter.d.ts +9 -9
  51. package/controls/contextmenu/contextmenuitemsplitter.ngfactory.d.ts +3 -3
  52. package/controls/contextmenu/contextmenuitemsplitter.ngsummary.d.ts +1 -1
  53. package/controls/datetime/date.d.ts +19 -19
  54. package/controls/datetime/date.ngfactory.d.ts +3 -3
  55. package/controls/datetime/date.ngsummary.d.ts +1 -1
  56. package/controls/datetime/dateselector.d.ts +9 -9
  57. package/controls/datetime/dateselector.ngfactory.d.ts +3 -3
  58. package/controls/datetime/dateselector.ngsummary.d.ts +1 -1
  59. package/controls/datetime/datetime.d.ts +19 -19
  60. package/controls/datetime/datetime.module.d.ts +14 -14
  61. package/controls/datetime/datetime.module.ngfactory.d.ts +3 -3
  62. package/controls/datetime/datetime.module.ngsummary.d.ts +1 -1
  63. package/controls/datetime/datetime.ngfactory.d.ts +3 -3
  64. package/controls/datetime/datetime.ngsummary.d.ts +1 -1
  65. package/controls/datetime/time.d.ts +19 -19
  66. package/controls/datetime/time.ngfactory.d.ts +3 -3
  67. package/controls/datetime/time.ngsummary.d.ts +1 -1
  68. package/controls/dialog/dialog.d.ts +28 -28
  69. package/controls/dialog/dialog.module.d.ts +8 -8
  70. package/controls/dialog/dialog.module.ngfactory.d.ts +3 -3
  71. package/controls/dialog/dialog.module.ngsummary.d.ts +1 -1
  72. package/controls/dialog/dialog.ngfactory.d.ts +3 -3
  73. package/controls/dialog/dialog.ngsummary.d.ts +1 -1
  74. package/controls/form/form.d.ts +28 -28
  75. package/controls/form/form.module.d.ts +10 -10
  76. package/controls/form/form.module.ngfactory.d.ts +3 -3
  77. package/controls/form/form.module.ngsummary.d.ts +1 -1
  78. package/controls/form/form.ngfactory.d.ts +3 -3
  79. package/controls/form/form.ngsummary.d.ts +1 -1
  80. package/controls/form/inheritform.directive.d.ts +27 -27
  81. package/controls/form/inheritform.directive.ngfactory.d.ts +3 -3
  82. package/controls/form/inheritform.directive.ngsummary.d.ts +1 -1
  83. package/controls/grid/grid.d.ts +23 -23
  84. package/controls/grid/grid.module.d.ts +14 -14
  85. package/controls/grid/grid.module.ngfactory.d.ts +3 -3
  86. package/controls/grid/grid.module.ngsummary.d.ts +1 -1
  87. package/controls/grid/grid.ngfactory.d.ts +3 -3
  88. package/controls/grid/grid.ngsummary.d.ts +1 -1
  89. package/controls/grid/gridbutton.d.ts +13 -13
  90. package/controls/grid/gridbutton.ngfactory.d.ts +3 -3
  91. package/controls/grid/gridbutton.ngsummary.d.ts +1 -1
  92. package/controls/grid/gridcolumn.d.ts +17 -17
  93. package/controls/grid/gridcolumn.ngfactory.d.ts +3 -3
  94. package/controls/grid/gridcolumn.ngsummary.d.ts +1 -1
  95. package/controls/grid/gridcolumnaction.d.ts +17 -17
  96. package/controls/grid/gridcolumnaction.ngfactory.d.ts +3 -3
  97. package/controls/grid/gridcolumnaction.ngsummary.d.ts +1 -1
  98. package/controls/grid/gridimage.d.ts +14 -14
  99. package/controls/grid/gridimage.ngfactory.d.ts +3 -3
  100. package/controls/grid/gridimage.ngsummary.d.ts +1 -1
  101. package/controls/grid/paging.d.ts +15 -15
  102. package/controls/grid/paging.ngfactory.d.ts +3 -3
  103. package/controls/grid/paging.ngsummary.d.ts +1 -1
  104. package/controls/input/input.d.ts +17 -17
  105. package/controls/input/input.module.d.ts +17 -17
  106. package/controls/input/input.module.ngfactory.d.ts +3 -3
  107. package/controls/input/input.module.ngsummary.d.ts +1 -1
  108. package/controls/input/input.ngfactory.d.ts +3 -3
  109. package/controls/input/input.ngsummary.d.ts +1 -1
  110. package/controls/input/inputarea.d.ts +17 -17
  111. package/controls/input/inputarea.ngfactory.d.ts +3 -3
  112. package/controls/input/inputarea.ngsummary.d.ts +1 -1
  113. package/controls/input/inputcurrency.d.ts +17 -17
  114. package/controls/input/inputcurrency.ngfactory.d.ts +3 -3
  115. package/controls/input/inputcurrency.ngsummary.d.ts +1 -1
  116. package/controls/input/inputdecimal.d.ts +17 -17
  117. package/controls/input/inputdecimal.ngfactory.d.ts +3 -3
  118. package/controls/input/inputdecimal.ngsummary.d.ts +1 -1
  119. package/controls/input/inputemail.d.ts +17 -17
  120. package/controls/input/inputemail.ngfactory.d.ts +3 -3
  121. package/controls/input/inputemail.ngsummary.d.ts +1 -1
  122. package/controls/input/inputinteger.d.ts +17 -17
  123. package/controls/input/inputinteger.ngfactory.d.ts +3 -3
  124. package/controls/input/inputinteger.ngsummary.d.ts +1 -1
  125. package/controls/input/inputpassword.d.ts +17 -17
  126. package/controls/input/inputpassword.ngfactory.d.ts +3 -3
  127. package/controls/input/inputpassword.ngsummary.d.ts +1 -1
  128. package/controls/input/inputsearch.d.ts +17 -17
  129. package/controls/input/inputsearch.ngfactory.d.ts +3 -3
  130. package/controls/input/inputsearch.ngsummary.d.ts +1 -1
  131. package/controls/layout/formlayout.directive.d.ts +6 -6
  132. package/controls/layout/formlayout.directive.ngfactory.d.ts +3 -3
  133. package/controls/layout/formlayout.directive.ngsummary.d.ts +1 -1
  134. package/controls/layout/layout.module.d.ts +12 -12
  135. package/controls/layout/layout.module.ngfactory.d.ts +3 -3
  136. package/controls/layout/layout.module.ngsummary.d.ts +1 -1
  137. package/controls/layout/tocontrolheight.pipe.d.ts +12 -12
  138. package/controls/layout/tocontrolheight.pipe.ngfactory.d.ts +3 -3
  139. package/controls/layout/tocontrolheight.pipe.ngsummary.d.ts +1 -1
  140. package/controls/layout/tocontrolwidthcss.pipe.d.ts +19 -19
  141. package/controls/layout/tocontrolwidthcss.pipe.ngfactory.d.ts +3 -3
  142. package/controls/layout/tocontrolwidthcss.pipe.ngsummary.d.ts +1 -1
  143. package/controls/layout/tolabelheight.pipe.d.ts +12 -12
  144. package/controls/layout/tolabelheight.pipe.ngfactory.d.ts +3 -3
  145. package/controls/layout/tolabelheight.pipe.ngsummary.d.ts +1 -1
  146. package/controls/layout/tolabelwidthcss.pipe.d.ts +13 -13
  147. package/controls/layout/tolabelwidthcss.pipe.ngfactory.d.ts +3 -3
  148. package/controls/layout/tolabelwidthcss.pipe.ngsummary.d.ts +1 -1
  149. package/controls/list/dropdown.d.ts +33 -33
  150. package/controls/list/dropdown.module.d.ts +10 -10
  151. package/controls/list/dropdown.module.ngfactory.d.ts +3 -3
  152. package/controls/list/dropdown.module.ngsummary.d.ts +1 -1
  153. package/controls/list/dropdown.ngfactory.d.ts +4 -4
  154. package/controls/list/dropdown.ngsummary.d.ts +2 -2
  155. package/controls/list/list.module.d.ts +10 -10
  156. package/controls/list/list.module.ngfactory.d.ts +3 -3
  157. package/controls/list/list.module.ngsummary.d.ts +1 -1
  158. package/controls/list/listbox.d.ts +31 -31
  159. package/controls/list/listbox.ngfactory.d.ts +4 -4
  160. package/controls/list/listbox.ngsummary.d.ts +2 -2
  161. package/controls/multilanguage/multilanguage.module.d.ts +15 -15
  162. package/controls/multilanguage/multilanguage.module.ngfactory.d.ts +3 -3
  163. package/controls/multilanguage/multilanguage.module.ngsummary.d.ts +1 -1
  164. package/controls/multilanguage/multilanguageinput.d.ts +21 -21
  165. package/controls/multilanguage/multilanguageinput.ngfactory.d.ts +3 -3
  166. package/controls/multilanguage/multilanguageinput.ngsummary.d.ts +1 -1
  167. package/controls/multilanguage/multilanguageinputarea.d.ts +21 -21
  168. package/controls/multilanguage/multilanguageinputarea.ngfactory.d.ts +3 -3
  169. package/controls/multilanguage/multilanguageinputarea.ngsummary.d.ts +1 -1
  170. package/controls/multilanguage/multilanguagemenu.d.ts +19 -19
  171. package/controls/multilanguage/multilanguagemenu.ngfactory.d.ts +3 -3
  172. package/controls/multilanguage/multilanguagemenu.ngsummary.d.ts +1 -1
  173. package/controls/multilanguage/multilanguagemenuanchor.d.ts +15 -15
  174. package/controls/multilanguage/multilanguagemenuanchor.ngfactory.d.ts +3 -3
  175. package/controls/multilanguage/multilanguagemenuanchor.ngsummary.d.ts +1 -1
  176. package/controls/multilanguage/multilanguagemenucontainer.d.ts +15 -15
  177. package/controls/multilanguage/multilanguagemenucontainer.ngfactory.d.ts +3 -3
  178. package/controls/multilanguage/multilanguagemenucontainer.ngsummary.d.ts +1 -1
  179. package/controls/multilanguage/multilanguagemenuitembutton.d.ts +14 -14
  180. package/controls/multilanguage/multilanguagemenuitembutton.ngfactory.d.ts +3 -3
  181. package/controls/multilanguage/multilanguagemenuitembutton.ngsummary.d.ts +1 -1
  182. package/controls/static/formcontainer.d.ts +28 -28
  183. package/controls/static/formcontainer.ngfactory.d.ts +3 -3
  184. package/controls/static/formcontainer.ngsummary.d.ts +1 -1
  185. package/controls/static/staticlabel.d.ts +17 -17
  186. package/controls/static/staticlabel.module.d.ts +11 -11
  187. package/controls/static/staticlabel.module.ngfactory.d.ts +3 -3
  188. package/controls/static/staticlabel.module.ngsummary.d.ts +1 -1
  189. package/controls/static/staticlabel.ngfactory.d.ts +3 -3
  190. package/controls/static/staticlabel.ngsummary.d.ts +1 -1
  191. package/controls/tabs/tab.d.ts +20 -20
  192. package/controls/tabs/tab.ngfactory.d.ts +3 -3
  193. package/controls/tabs/tab.ngsummary.d.ts +1 -1
  194. package/controls/tabs/tabitem.d.ts +9 -9
  195. package/controls/tabs/tabitem.ngfactory.d.ts +3 -3
  196. package/controls/tabs/tabitem.ngsummary.d.ts +1 -1
  197. package/controls/tabs/tabs.module.d.ts +9 -9
  198. package/controls/tabs/tabs.module.ngfactory.d.ts +3 -3
  199. package/controls/tabs/tabs.module.ngsummary.d.ts +1 -1
  200. package/controls/tinymce/tinymce.d.ts +23 -23
  201. package/controls/tinymce/tinymce.module.d.ts +15 -15
  202. package/controls/tinymce/tinymce.module.ngfactory.d.ts +3 -3
  203. package/controls/tinymce/tinymce.module.ngsummary.d.ts +1 -1
  204. package/controls/tinymce/tinymce.ngfactory.d.ts +3 -3
  205. package/controls/tinymce/tinymce.ngsummary.d.ts +1 -1
  206. package/controls/tooltip/tooltip.d.ts +37 -37
  207. package/controls/tooltip/tooltip.module.d.ts +8 -8
  208. package/controls/tooltip/tooltip.module.ngfactory.d.ts +3 -3
  209. package/controls/tooltip/tooltip.module.ngsummary.d.ts +1 -1
  210. package/controls/tooltip/tooltip.ngfactory.d.ts +3 -3
  211. package/controls/tooltip/tooltip.ngsummary.d.ts +1 -1
  212. package/controls/treeview/treeview.d.ts +17 -17
  213. package/controls/treeview/treeview.module.d.ts +11 -11
  214. package/controls/treeview/treeview.module.ngfactory.d.ts +3 -3
  215. package/controls/treeview/treeview.module.ngsummary.d.ts +1 -1
  216. package/controls/treeview/treeview.ngfactory.d.ts +3 -3
  217. package/controls/treeview/treeview.ngsummary.d.ts +1 -1
  218. package/controls/upload/dropzonemultiple.d.ts +24 -24
  219. package/controls/upload/dropzonemultiple.ngfactory.d.ts +3 -3
  220. package/controls/upload/dropzonemultiple.ngsummary.d.ts +1 -1
  221. package/controls/upload/dropzonesingle.d.ts +24 -24
  222. package/controls/upload/dropzonesingle.ngfactory.d.ts +3 -3
  223. package/controls/upload/dropzonesingle.ngsummary.d.ts +1 -1
  224. package/controls/upload/upload.d.ts +20 -20
  225. package/controls/upload/upload.module.d.ts +14 -14
  226. package/controls/upload/upload.module.ngfactory.d.ts +3 -3
  227. package/controls/upload/upload.module.ngsummary.d.ts +1 -1
  228. package/controls/upload/upload.ngfactory.d.ts +3 -3
  229. package/controls/upload/upload.ngsummary.d.ts +1 -1
  230. package/controls/upload/uploadmultiple.d.ts +20 -20
  231. package/controls/upload/uploadmultiple.ngfactory.d.ts +3 -3
  232. package/controls/upload/uploadmultiple.ngsummary.d.ts +1 -1
  233. package/controls/validation/validationsummary.d.ts +17 -17
  234. package/controls/validation/validationsummary.module.d.ts +8 -8
  235. package/controls/validation/validationsummary.module.ngfactory.d.ts +3 -3
  236. package/controls/validation/validationsummary.module.ngsummary.d.ts +1 -1
  237. package/controls/validation/validationsummary.ngfactory.d.ts +3 -3
  238. package/controls/validation/validationsummary.ngsummary.d.ts +1 -1
  239. package/controls/wizard/wizard.d.ts +20 -20
  240. package/controls/wizard/wizard.module.d.ts +9 -9
  241. package/controls/wizard/wizard.module.ngfactory.d.ts +3 -3
  242. package/controls/wizard/wizard.module.ngsummary.d.ts +1 -1
  243. package/controls/wizard/wizard.ngfactory.d.ts +3 -3
  244. package/controls/wizard/wizard.ngsummary.d.ts +1 -1
  245. package/controls/wizard/wizarditem.d.ts +9 -9
  246. package/controls/wizard/wizarditem.ngfactory.d.ts +3 -3
  247. package/controls/wizard/wizarditem.ngsummary.d.ts +1 -1
  248. package/esm2020/components/browser/browser.mjs +112 -112
  249. package/esm2020/components/browser/browser.module.mjs +47 -47
  250. package/esm2020/components/browser/browser.module.ngfactory.mjs +3 -3
  251. package/esm2020/components/browser/browser.module.ngsummary.mjs +1 -1
  252. package/esm2020/components/browser/browser.ngfactory.mjs +3 -3
  253. package/esm2020/components/browser/browser.ngsummary.mjs +1 -1
  254. package/esm2020/controls/buttons/button.mjs +18 -18
  255. package/esm2020/controls/buttons/button.module.mjs +22 -22
  256. package/esm2020/controls/buttons/button.module.ngfactory.mjs +3 -3
  257. package/esm2020/controls/buttons/button.module.ngsummary.mjs +1 -1
  258. package/esm2020/controls/buttons/button.ngfactory.mjs +3 -3
  259. package/esm2020/controls/buttons/button.ngsummary.mjs +1 -1
  260. package/esm2020/controls/checkbox/checkbox.mjs +57 -57
  261. package/esm2020/controls/checkbox/checkbox.module.mjs +44 -44
  262. package/esm2020/controls/checkbox/checkbox.module.ngfactory.mjs +3 -3
  263. package/esm2020/controls/checkbox/checkbox.module.ngsummary.mjs +1 -1
  264. package/esm2020/controls/checkbox/checkbox.ngfactory.mjs +3 -3
  265. package/esm2020/controls/checkbox/checkbox.ngsummary.mjs +1 -1
  266. package/esm2020/controls/checkbox/radiobutton.mjs +35 -35
  267. package/esm2020/controls/checkbox/radiobutton.ngfactory.mjs +3 -3
  268. package/esm2020/controls/checkbox/radiobutton.ngsummary.mjs +1 -1
  269. package/esm2020/controls/checkbox/radiobuttons.mjs +57 -57
  270. package/esm2020/controls/checkbox/radiobuttons.ngfactory.mjs +3 -3
  271. package/esm2020/controls/checkbox/radiobuttons.ngsummary.mjs +1 -1
  272. package/esm2020/controls/confirm/confirm.mjs +18 -18
  273. package/esm2020/controls/confirm/confirm.module.mjs +34 -34
  274. package/esm2020/controls/confirm/confirm.module.ngfactory.mjs +3 -3
  275. package/esm2020/controls/confirm/confirm.module.ngsummary.mjs +1 -1
  276. package/esm2020/controls/confirm/confirm.ngfactory.mjs +3 -3
  277. package/esm2020/controls/confirm/confirm.ngsummary.mjs +1 -1
  278. package/esm2020/controls/confirm/confirm.service.mjs +103 -103
  279. package/esm2020/controls/confirm/confirm.service.ngfactory.mjs +3 -3
  280. package/esm2020/controls/confirm/confirm.service.ngsummary.mjs +1 -1
  281. package/esm2020/controls/contextmenu/contextmenu.mjs +34 -34
  282. package/esm2020/controls/contextmenu/contextmenu.module.mjs +40 -40
  283. package/esm2020/controls/contextmenu/contextmenu.module.ngfactory.mjs +3 -3
  284. package/esm2020/controls/contextmenu/contextmenu.module.ngsummary.mjs +1 -1
  285. package/esm2020/controls/contextmenu/contextmenu.ngfactory.mjs +3 -3
  286. package/esm2020/controls/contextmenu/contextmenu.ngsummary.mjs +1 -1
  287. package/esm2020/controls/contextmenu/contextmenuanchor.mjs +36 -36
  288. package/esm2020/controls/contextmenu/contextmenuanchor.ngfactory.mjs +3 -3
  289. package/esm2020/controls/contextmenu/contextmenuanchor.ngsummary.mjs +1 -1
  290. package/esm2020/controls/contextmenu/contextmenucontainer.mjs +36 -36
  291. package/esm2020/controls/contextmenu/contextmenucontainer.ngfactory.mjs +3 -3
  292. package/esm2020/controls/contextmenu/contextmenucontainer.ngsummary.mjs +1 -1
  293. package/esm2020/controls/contextmenu/contextmenuitembutton.mjs +33 -33
  294. package/esm2020/controls/contextmenu/contextmenuitembutton.ngfactory.mjs +3 -3
  295. package/esm2020/controls/contextmenu/contextmenuitembutton.ngsummary.mjs +1 -1
  296. package/esm2020/controls/contextmenu/contextmenuitemsplitter.mjs +25 -25
  297. package/esm2020/controls/contextmenu/contextmenuitemsplitter.ngfactory.mjs +3 -3
  298. package/esm2020/controls/contextmenu/contextmenuitemsplitter.ngsummary.mjs +1 -1
  299. package/esm2020/controls/datetime/date.mjs +70 -70
  300. package/esm2020/controls/datetime/date.ngfactory.mjs +3 -3
  301. package/esm2020/controls/datetime/date.ngsummary.mjs +1 -1
  302. package/esm2020/controls/datetime/dateselector.mjs +16 -16
  303. package/esm2020/controls/datetime/dateselector.ngfactory.mjs +3 -3
  304. package/esm2020/controls/datetime/dateselector.ngsummary.mjs +1 -1
  305. package/esm2020/controls/datetime/datetime.mjs +62 -62
  306. package/esm2020/controls/datetime/datetime.module.mjs +53 -53
  307. package/esm2020/controls/datetime/datetime.module.ngfactory.mjs +3 -3
  308. package/esm2020/controls/datetime/datetime.module.ngsummary.mjs +1 -1
  309. package/esm2020/controls/datetime/datetime.ngfactory.mjs +3 -3
  310. package/esm2020/controls/datetime/datetime.ngsummary.mjs +1 -1
  311. package/esm2020/controls/datetime/time.mjs +62 -62
  312. package/esm2020/controls/datetime/time.ngfactory.mjs +3 -3
  313. package/esm2020/controls/datetime/time.ngsummary.mjs +1 -1
  314. package/esm2020/controls/dialog/dialog.mjs +42 -42
  315. package/esm2020/controls/dialog/dialog.module.mjs +22 -22
  316. package/esm2020/controls/dialog/dialog.module.ngfactory.mjs +3 -3
  317. package/esm2020/controls/dialog/dialog.module.ngsummary.mjs +1 -1
  318. package/esm2020/controls/dialog/dialog.ngfactory.mjs +3 -3
  319. package/esm2020/controls/dialog/dialog.ngsummary.mjs +1 -1
  320. package/esm2020/controls/form/form.mjs +42 -42
  321. package/esm2020/controls/form/form.module.mjs +20 -20
  322. package/esm2020/controls/form/form.module.ngfactory.mjs +3 -3
  323. package/esm2020/controls/form/form.module.ngsummary.mjs +1 -1
  324. package/esm2020/controls/form/form.ngfactory.mjs +3 -3
  325. package/esm2020/controls/form/form.ngsummary.mjs +1 -1
  326. package/esm2020/controls/form/inheritform.directive.mjs +68 -68
  327. package/esm2020/controls/form/inheritform.directive.ngfactory.mjs +3 -3
  328. package/esm2020/controls/form/inheritform.directive.ngsummary.mjs +1 -1
  329. package/esm2020/controls/grid/grid.mjs +48 -48
  330. package/esm2020/controls/grid/grid.module.mjs +48 -48
  331. package/esm2020/controls/grid/grid.module.ngfactory.mjs +3 -3
  332. package/esm2020/controls/grid/grid.module.ngsummary.mjs +1 -1
  333. package/esm2020/controls/grid/grid.ngfactory.mjs +3 -3
  334. package/esm2020/controls/grid/grid.ngsummary.mjs +1 -1
  335. package/esm2020/controls/grid/gridbutton.mjs +40 -40
  336. package/esm2020/controls/grid/gridbutton.ngfactory.mjs +3 -3
  337. package/esm2020/controls/grid/gridbutton.ngsummary.mjs +1 -1
  338. package/esm2020/controls/grid/gridcolumn.mjs +35 -35
  339. package/esm2020/controls/grid/gridcolumn.ngfactory.mjs +3 -3
  340. package/esm2020/controls/grid/gridcolumn.ngsummary.mjs +1 -1
  341. package/esm2020/controls/grid/gridcolumnaction.mjs +36 -36
  342. package/esm2020/controls/grid/gridcolumnaction.ngfactory.mjs +3 -3
  343. package/esm2020/controls/grid/gridcolumnaction.ngsummary.mjs +1 -1
  344. package/esm2020/controls/grid/gridimage.mjs +29 -29
  345. package/esm2020/controls/grid/gridimage.ngfactory.mjs +3 -3
  346. package/esm2020/controls/grid/gridimage.ngsummary.mjs +1 -1
  347. package/esm2020/controls/grid/paging.mjs +39 -39
  348. package/esm2020/controls/grid/paging.ngfactory.mjs +3 -3
  349. package/esm2020/controls/grid/paging.ngsummary.mjs +1 -1
  350. package/esm2020/controls/input/input.mjs +50 -50
  351. package/esm2020/controls/input/input.module.mjs +69 -69
  352. package/esm2020/controls/input/input.module.ngfactory.mjs +3 -3
  353. package/esm2020/controls/input/input.module.ngsummary.mjs +1 -1
  354. package/esm2020/controls/input/input.ngfactory.mjs +3 -3
  355. package/esm2020/controls/input/input.ngsummary.mjs +1 -1
  356. package/esm2020/controls/input/inputarea.mjs +58 -58
  357. package/esm2020/controls/input/inputarea.ngfactory.mjs +3 -3
  358. package/esm2020/controls/input/inputarea.ngsummary.mjs +1 -1
  359. package/esm2020/controls/input/inputcurrency.mjs +58 -58
  360. package/esm2020/controls/input/inputcurrency.ngfactory.mjs +3 -3
  361. package/esm2020/controls/input/inputcurrency.ngsummary.mjs +1 -1
  362. package/esm2020/controls/input/inputdecimal.mjs +58 -58
  363. package/esm2020/controls/input/inputdecimal.ngfactory.mjs +3 -3
  364. package/esm2020/controls/input/inputdecimal.ngsummary.mjs +1 -1
  365. package/esm2020/controls/input/inputemail.mjs +58 -58
  366. package/esm2020/controls/input/inputemail.ngfactory.mjs +3 -3
  367. package/esm2020/controls/input/inputemail.ngsummary.mjs +1 -1
  368. package/esm2020/controls/input/inputinteger.mjs +58 -58
  369. package/esm2020/controls/input/inputinteger.ngfactory.mjs +3 -3
  370. package/esm2020/controls/input/inputinteger.ngsummary.mjs +1 -1
  371. package/esm2020/controls/input/inputpassword.mjs +58 -58
  372. package/esm2020/controls/input/inputpassword.ngfactory.mjs +3 -3
  373. package/esm2020/controls/input/inputpassword.ngsummary.mjs +1 -1
  374. package/esm2020/controls/input/inputsearch.mjs +58 -58
  375. package/esm2020/controls/input/inputsearch.ngfactory.mjs +3 -3
  376. package/esm2020/controls/input/inputsearch.ngsummary.mjs +1 -1
  377. package/esm2020/controls/layout/formlayout.directive.mjs +14 -14
  378. package/esm2020/controls/layout/formlayout.directive.ngfactory.mjs +3 -3
  379. package/esm2020/controls/layout/formlayout.directive.ngsummary.mjs +1 -1
  380. package/esm2020/controls/layout/layout.module.mjs +42 -42
  381. package/esm2020/controls/layout/layout.module.ngfactory.mjs +3 -3
  382. package/esm2020/controls/layout/layout.module.ngsummary.mjs +1 -1
  383. package/esm2020/controls/layout/tocontrolheight.pipe.mjs +33 -33
  384. package/esm2020/controls/layout/tocontrolheight.pipe.ngfactory.mjs +3 -3
  385. package/esm2020/controls/layout/tocontrolheight.pipe.ngsummary.mjs +1 -1
  386. package/esm2020/controls/layout/tocontrolwidthcss.pipe.mjs +54 -54
  387. package/esm2020/controls/layout/tocontrolwidthcss.pipe.ngfactory.mjs +3 -3
  388. package/esm2020/controls/layout/tocontrolwidthcss.pipe.ngsummary.mjs +1 -1
  389. package/esm2020/controls/layout/tolabelheight.pipe.mjs +33 -33
  390. package/esm2020/controls/layout/tolabelheight.pipe.ngfactory.mjs +3 -3
  391. package/esm2020/controls/layout/tolabelheight.pipe.ngsummary.mjs +1 -1
  392. package/esm2020/controls/layout/tolabelwidthcss.pipe.mjs +38 -38
  393. package/esm2020/controls/layout/tolabelwidthcss.pipe.ngfactory.mjs +3 -3
  394. package/esm2020/controls/layout/tolabelwidthcss.pipe.ngsummary.mjs +1 -1
  395. package/esm2020/controls/list/dropdown.mjs +86 -86
  396. package/esm2020/controls/list/dropdown.module.mjs +30 -30
  397. package/esm2020/controls/list/dropdown.module.ngfactory.mjs +3 -3
  398. package/esm2020/controls/list/dropdown.module.ngsummary.mjs +1 -1
  399. package/esm2020/controls/list/dropdown.ngfactory.mjs +3 -3
  400. package/esm2020/controls/list/dropdown.ngsummary.mjs +2 -2
  401. package/esm2020/controls/list/list.module.mjs +30 -30
  402. package/esm2020/controls/list/list.module.ngfactory.mjs +3 -3
  403. package/esm2020/controls/list/list.module.ngsummary.mjs +1 -1
  404. package/esm2020/controls/list/listbox.mjs +84 -84
  405. package/esm2020/controls/list/listbox.ngfactory.mjs +3 -3
  406. package/esm2020/controls/list/listbox.ngsummary.mjs +2 -2
  407. package/esm2020/controls/multilanguage/multilanguage.module.mjs +47 -47
  408. package/esm2020/controls/multilanguage/multilanguage.module.ngfactory.mjs +3 -3
  409. package/esm2020/controls/multilanguage/multilanguage.module.ngsummary.mjs +1 -1
  410. package/esm2020/controls/multilanguage/multilanguageinput.mjs +67 -67
  411. package/esm2020/controls/multilanguage/multilanguageinput.ngfactory.mjs +3 -3
  412. package/esm2020/controls/multilanguage/multilanguageinput.ngsummary.mjs +1 -1
  413. package/esm2020/controls/multilanguage/multilanguageinputarea.mjs +67 -67
  414. package/esm2020/controls/multilanguage/multilanguageinputarea.ngfactory.mjs +3 -3
  415. package/esm2020/controls/multilanguage/multilanguageinputarea.ngsummary.mjs +1 -1
  416. package/esm2020/controls/multilanguage/multilanguagemenu.mjs +44 -44
  417. package/esm2020/controls/multilanguage/multilanguagemenu.ngfactory.mjs +3 -3
  418. package/esm2020/controls/multilanguage/multilanguagemenu.ngsummary.mjs +1 -1
  419. package/esm2020/controls/multilanguage/multilanguagemenuanchor.mjs +36 -36
  420. package/esm2020/controls/multilanguage/multilanguagemenuanchor.ngfactory.mjs +3 -3
  421. package/esm2020/controls/multilanguage/multilanguagemenuanchor.ngsummary.mjs +1 -1
  422. package/esm2020/controls/multilanguage/multilanguagemenucontainer.mjs +36 -36
  423. package/esm2020/controls/multilanguage/multilanguagemenucontainer.ngfactory.mjs +3 -3
  424. package/esm2020/controls/multilanguage/multilanguagemenucontainer.ngsummary.mjs +1 -1
  425. package/esm2020/controls/multilanguage/multilanguagemenuitembutton.mjs +34 -34
  426. package/esm2020/controls/multilanguage/multilanguagemenuitembutton.ngfactory.mjs +3 -3
  427. package/esm2020/controls/multilanguage/multilanguagemenuitembutton.ngsummary.mjs +1 -1
  428. package/esm2020/controls/static/formcontainer.mjs +69 -69
  429. package/esm2020/controls/static/formcontainer.ngfactory.mjs +3 -3
  430. package/esm2020/controls/static/formcontainer.ngsummary.mjs +1 -1
  431. package/esm2020/controls/static/staticlabel.mjs +58 -58
  432. package/esm2020/controls/static/staticlabel.module.mjs +31 -31
  433. package/esm2020/controls/static/staticlabel.module.ngfactory.mjs +3 -3
  434. package/esm2020/controls/static/staticlabel.module.ngsummary.mjs +1 -1
  435. package/esm2020/controls/static/staticlabel.ngfactory.mjs +3 -3
  436. package/esm2020/controls/static/staticlabel.ngsummary.mjs +1 -1
  437. package/esm2020/controls/tabs/tab.mjs +27 -27
  438. package/esm2020/controls/tabs/tab.ngfactory.mjs +3 -3
  439. package/esm2020/controls/tabs/tab.ngsummary.mjs +1 -1
  440. package/esm2020/controls/tabs/tabitem.mjs +16 -16
  441. package/esm2020/controls/tabs/tabitem.ngfactory.mjs +3 -3
  442. package/esm2020/controls/tabs/tabitem.ngsummary.mjs +1 -1
  443. package/esm2020/controls/tabs/tabs.module.mjs +23 -23
  444. package/esm2020/controls/tabs/tabs.module.ngfactory.mjs +3 -3
  445. package/esm2020/controls/tabs/tabs.module.ngsummary.mjs +1 -1
  446. package/esm2020/controls/tinymce/tinymce.mjs +73 -73
  447. package/esm2020/controls/tinymce/tinymce.module.mjs +50 -50
  448. package/esm2020/controls/tinymce/tinymce.module.ngfactory.mjs +3 -3
  449. package/esm2020/controls/tinymce/tinymce.module.ngsummary.mjs +1 -1
  450. package/esm2020/controls/tinymce/tinymce.ngfactory.mjs +3 -3
  451. package/esm2020/controls/tinymce/tinymce.ngsummary.mjs +1 -1
  452. package/esm2020/controls/tooltip/tooltip.mjs +50 -50
  453. package/esm2020/controls/tooltip/tooltip.module.mjs +18 -18
  454. package/esm2020/controls/tooltip/tooltip.module.ngfactory.mjs +3 -3
  455. package/esm2020/controls/tooltip/tooltip.module.ngsummary.mjs +1 -1
  456. package/esm2020/controls/tooltip/tooltip.ngfactory.mjs +3 -3
  457. package/esm2020/controls/tooltip/tooltip.ngsummary.mjs +1 -1
  458. package/esm2020/controls/treeview/treeview.mjs +58 -58
  459. package/esm2020/controls/treeview/treeview.module.mjs +21 -21
  460. package/esm2020/controls/treeview/treeview.module.ngfactory.mjs +3 -3
  461. package/esm2020/controls/treeview/treeview.module.ngsummary.mjs +1 -1
  462. package/esm2020/controls/treeview/treeview.ngfactory.mjs +3 -3
  463. package/esm2020/controls/treeview/treeview.ngsummary.mjs +1 -1
  464. package/esm2020/controls/upload/dropzonemultiple.mjs +69 -69
  465. package/esm2020/controls/upload/dropzonemultiple.ngfactory.mjs +3 -3
  466. package/esm2020/controls/upload/dropzonemultiple.ngsummary.mjs +1 -1
  467. package/esm2020/controls/upload/dropzonesingle.mjs +69 -69
  468. package/esm2020/controls/upload/dropzonesingle.ngfactory.mjs +3 -3
  469. package/esm2020/controls/upload/dropzonesingle.ngsummary.mjs +1 -1
  470. package/esm2020/controls/upload/upload.mjs +61 -61
  471. package/esm2020/controls/upload/upload.module.mjs +53 -53
  472. package/esm2020/controls/upload/upload.module.ngfactory.mjs +3 -3
  473. package/esm2020/controls/upload/upload.module.ngsummary.mjs +1 -1
  474. package/esm2020/controls/upload/upload.ngfactory.mjs +3 -3
  475. package/esm2020/controls/upload/upload.ngsummary.mjs +1 -1
  476. package/esm2020/controls/upload/uploadmultiple.mjs +61 -61
  477. package/esm2020/controls/upload/uploadmultiple.ngfactory.mjs +3 -3
  478. package/esm2020/controls/upload/uploadmultiple.ngsummary.mjs +1 -1
  479. package/esm2020/controls/validation/validationsummary.mjs +43 -43
  480. package/esm2020/controls/validation/validationsummary.module.mjs +22 -22
  481. package/esm2020/controls/validation/validationsummary.module.ngfactory.mjs +3 -3
  482. package/esm2020/controls/validation/validationsummary.module.ngsummary.mjs +1 -1
  483. package/esm2020/controls/validation/validationsummary.ngfactory.mjs +3 -3
  484. package/esm2020/controls/validation/validationsummary.ngsummary.mjs +1 -1
  485. package/esm2020/controls/wizard/wizard.mjs +32 -32
  486. package/esm2020/controls/wizard/wizard.module.mjs +23 -23
  487. package/esm2020/controls/wizard/wizard.module.ngfactory.mjs +3 -3
  488. package/esm2020/controls/wizard/wizard.module.ngsummary.mjs +1 -1
  489. package/esm2020/controls/wizard/wizard.ngfactory.mjs +3 -3
  490. package/esm2020/controls/wizard/wizard.ngsummary.mjs +1 -1
  491. package/esm2020/controls/wizard/wizarditem.mjs +15 -15
  492. package/esm2020/controls/wizard/wizarditem.ngfactory.mjs +3 -3
  493. package/esm2020/controls/wizard/wizarditem.ngsummary.mjs +1 -1
  494. package/esm2020/public_api.mjs +82 -82
  495. package/esm2020/public_api.ngfactory.mjs +1 -1
  496. package/esm2020/public_api.ngsummary.mjs +1 -1
  497. package/esm2020/simpleangularcontrols-sac-bootstrap4.mjs +4 -4
  498. package/fesm2015/simpleangularcontrols-sac-bootstrap4.mjs +3014 -3014
  499. package/fesm2015/simpleangularcontrols-sac-bootstrap4.mjs.map +1 -1
  500. package/fesm2020/simpleangularcontrols-sac-bootstrap4.mjs +2950 -2950
  501. package/fesm2020/simpleangularcontrols-sac-bootstrap4.mjs.map +1 -1
  502. package/package.json +43 -43
  503. package/public_api.d.ts +76 -76
  504. package/public_api.ngfactory.d.ts +1 -1
  505. package/public_api.ngsummary.d.ts +1 -1
  506. package/simpleangularcontrols-sac-bootstrap4-13.0.0-rc.14.tgz +0 -0
  507. package/simpleangularcontrols-sac-bootstrap4.d.ts +5 -5
  508. package/simpleangularcontrols-sac-bootstrap4-13.0.0-rc.13.tgz +0 -0
@@ -1,21 +1,21 @@
1
- import { QueryList } from '@angular/core';
2
- import { SacWizardCommon, SacWizardItemCommon } from '@simpleangularcontrols/sac-common';
3
- import { SacWizardItemComponent } from './wizarditem';
4
- import * as i0 from "@angular/core";
5
- /**
6
- * Wizard Komponente
7
- */
8
- export declare class SacWizardComponent extends SacWizardCommon {
9
- /**
10
- * Wizard Items
11
- */
12
- _wizardItems: QueryList<SacWizardItemComponent>;
13
- /**
14
- * Gibt die Wizard Items zurück
15
- * @returns Collection von WizardItems
16
- */
17
- wizardItems(): QueryList<SacWizardItemCommon>;
18
- static ɵfac: i0.ɵɵFactoryDeclaration<SacWizardComponent, never>;
19
- static ɵcmp: i0.ɵɵComponentDeclaration<SacWizardComponent, "sac-wizard", never, {}, {}, ["_wizardItems"], never>;
20
- }
1
+ import { QueryList } from '@angular/core';
2
+ import { SacWizardCommon, SacWizardItemCommon } from '@simpleangularcontrols/sac-common';
3
+ import { SacWizardItemComponent } from './wizarditem';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Wizard Komponente
7
+ */
8
+ export declare class SacWizardComponent extends SacWizardCommon {
9
+ /**
10
+ * Wizard Items
11
+ */
12
+ _wizardItems: QueryList<SacWizardItemComponent>;
13
+ /**
14
+ * Gibt die Wizard Items zurück
15
+ * @returns Collection von WizardItems
16
+ */
17
+ wizardItems(): QueryList<SacWizardItemCommon>;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<SacWizardComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<SacWizardComponent, "sac-wizard", never, {}, {}, ["_wizardItems"], never>;
20
+ }
21
21
  //# sourceMappingURL=wizard.d.ts.map
@@ -1,10 +1,10 @@
1
- import * as i0 from "@angular/core";
2
- import * as i1 from "./wizard";
3
- import * as i2 from "./wizarditem";
4
- import * as i3 from "@angular/common";
5
- export declare class SACBootstrap4WizardModule {
6
- static ɵfac: i0.ɵɵFactoryDeclaration<SACBootstrap4WizardModule, never>;
7
- static ɵmod: i0.ɵɵNgModuleDeclaration<SACBootstrap4WizardModule, [typeof i1.SacWizardComponent, typeof i2.SacWizardItemComponent], [typeof i3.CommonModule], [typeof i1.SacWizardComponent, typeof i2.SacWizardItemComponent]>;
8
- static ɵinj: i0.ɵɵInjectorDeclaration<SACBootstrap4WizardModule>;
9
- }
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./wizard";
3
+ import * as i2 from "./wizarditem";
4
+ import * as i3 from "@angular/common";
5
+ export declare class SACBootstrap4WizardModule {
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<SACBootstrap4WizardModule, never>;
7
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SACBootstrap4WizardModule, [typeof i1.SacWizardComponent, typeof i2.SacWizardItemComponent], [typeof i3.CommonModule], [typeof i1.SacWizardComponent, typeof i2.SacWizardItemComponent]>;
8
+ static ɵinj: i0.ɵɵInjectorDeclaration<SACBootstrap4WizardModule>;
9
+ }
10
10
  //# sourceMappingURL=wizard.module.d.ts.map
@@ -1,4 +1,4 @@
1
- import * as i0 from '@angular/core';
2
- export declare const SACBootstrap4WizardModuleNgFactory: i0.ɵNgModuleFactory<any>;
3
- export declare const ɵNonEmptyModule = true;
1
+ import * as i0 from '@angular/core';
2
+ export declare const SACBootstrap4WizardModuleNgFactory: i0.ɵNgModuleFactory<any>;
3
+ export declare const ɵNonEmptyModule = true;
4
4
  //# sourceMappingURL=wizard.module.ngfactory.d.ts.map
@@ -1,2 +1,2 @@
1
- export declare const SACBootstrap4WizardModuleNgSummary: any;
1
+ export declare const SACBootstrap4WizardModuleNgSummary: any;
2
2
  //# sourceMappingURL=wizard.module.ngsummary.d.ts.map
@@ -1,4 +1,4 @@
1
- import * as i0 from '@angular/core';
2
- export declare const SacWizardComponentNgFactory: i0.ɵNgModuleFactory<any>;
3
- export declare const ɵNonEmptyModule = true;
1
+ import * as i0 from '@angular/core';
2
+ export declare const SacWizardComponentNgFactory: i0.ɵNgModuleFactory<any>;
3
+ export declare const ɵNonEmptyModule = true;
4
4
  //# sourceMappingURL=wizard.ngfactory.d.ts.map
@@ -1,2 +1,2 @@
1
- export declare const SacWizardComponentNgSummary: any;
1
+ export declare const SacWizardComponentNgSummary: any;
2
2
  //# sourceMappingURL=wizard.ngsummary.d.ts.map
@@ -1,10 +1,10 @@
1
- import { SacWizardItemCommon } from '@simpleangularcontrols/sac-common';
2
- import * as i0 from "@angular/core";
3
- /**
4
- * Wizard Komponente Item
5
- */
6
- export declare class SacWizardItemComponent extends SacWizardItemCommon {
7
- static ɵfac: i0.ɵɵFactoryDeclaration<SacWizardItemComponent, never>;
8
- static ɵcmp: i0.ɵɵComponentDeclaration<SacWizardItemComponent, "sac-wizarditem", never, {}, {}, never, never>;
9
- }
1
+ import { SacWizardItemCommon } from '@simpleangularcontrols/sac-common';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Wizard Komponente Item
5
+ */
6
+ export declare class SacWizardItemComponent extends SacWizardItemCommon {
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<SacWizardItemComponent, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<SacWizardItemComponent, "sac-wizarditem", never, {}, {}, never, never>;
9
+ }
10
10
  //# sourceMappingURL=wizarditem.d.ts.map
@@ -1,4 +1,4 @@
1
- import * as i0 from '@angular/core';
2
- export declare const SacWizardItemComponentNgFactory: i0.ɵNgModuleFactory<any>;
3
- export declare const ɵNonEmptyModule = true;
1
+ import * as i0 from '@angular/core';
2
+ export declare const SacWizardItemComponentNgFactory: i0.ɵNgModuleFactory<any>;
3
+ export declare const ɵNonEmptyModule = true;
4
4
  //# sourceMappingURL=wizarditem.ngfactory.d.ts.map
@@ -1,2 +1,2 @@
1
- export declare const SacWizardItemComponentNgSummary: any;
1
+ export declare const SacWizardItemComponentNgSummary: any;
2
2
  //# sourceMappingURL=wizarditem.ngsummary.d.ts.map
@@ -1,112 +1,112 @@
1
- import { Component, ViewChild } from '@angular/core';
2
- import { SacFileBrowserCommon, } from '@simpleangularcontrols/sac-common';
3
- import { Observable, forkJoin } from 'rxjs';
4
- import { ServiceConfirm } from '../../controls/confirm/confirm.service';
5
- import { SacDropzoneMultipleComponent } from '../../controls/upload/dropzonemultiple';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common/http";
8
- import * as i2 from "../../controls/confirm/confirm.service";
9
- import * as i3 from "../../controls/contextmenu/contextmenu";
10
- import * as i4 from "../../controls/contextmenu/contextmenuitembutton";
11
- import * as i5 from "../../controls/contextmenu/contextmenuitemsplitter";
12
- import * as i6 from "../../controls/upload/dropzonemultiple";
13
- import * as i7 from "@angular/common";
14
- import * as i8 from "../../controls/form/form";
15
- import * as i9 from "@angular/forms";
16
- /**
17
- * Server File Browser Komponente
18
- */
19
- export class SacBrowserComponent extends SacFileBrowserCommon {
20
- // #endregion Properties
21
- // #region Constructors
22
- /**
23
- * Konstruktor
24
- * @param httpClient HTTP Client
25
- * @param injector Angular Dependency Injection Service
26
- * @param confirmService Confirm Service
27
- */
28
- constructor(httpClient, injector, confirmService) {
29
- super(httpClient, injector);
30
- this.confirmService = confirmService;
31
- }
32
- // #endregion Constructors
33
- // #region Public Methods
34
- /**
35
- * Confirm Action wenn ein File gelöscht werden soll
36
- * @param file File das gelöscht werden soll.
37
- * @returns Observable ob File gelöscht werden kann.
38
- */
39
- confirmDeleteFile(file) {
40
- return new Observable((observer) => {
41
- forkJoin({
42
- title: this.lngResourceService.GetString(this.validationKeyService.FilebrowserButtonDelete),
43
- message: this.lngResourceService.GetString(this.validationKeyService.FilebrowserConfirmTextDeleteFile),
44
- }).subscribe((text) => {
45
- this.confirmService
46
- .ConfirmMessage(text.title, text.message)
47
- .subscribe((result) => {
48
- if (result === 'yes') {
49
- observer.next(true);
50
- }
51
- else {
52
- observer.next(false);
53
- }
54
- observer.complete();
55
- });
56
- });
57
- });
58
- }
59
- /**
60
- * Confirm Action wenn ein Ordner gelöscht werden soll
61
- * @param node Ordner der gelöscht werden soll
62
- * @returns Observable ob Ordner gelöscht kann.
63
- */
64
- confirmDeleteNode(node) {
65
- return new Observable((observer) => {
66
- forkJoin({
67
- title: this.lngResourceService.GetString(this.validationKeyService.FilebrowserButtonDelete),
68
- message: this.lngResourceService.GetString(this.validationKeyService.FilebrowserConfirmTextDeleteFolder),
69
- }).subscribe((text) => {
70
- this.confirmService
71
- .ConfirmMessage(text.title, text.message)
72
- .subscribe((result) => {
73
- if (result === 'yes') {
74
- observer.next(true);
75
- }
76
- else {
77
- observer.next(false);
78
- }
79
- observer.complete();
80
- });
81
- });
82
- });
83
- }
84
- /**
85
- * Erzeugt ein Array von einer bestimmten grösse
86
- * @param anzahl Grösse des Array
87
- * @returns Array
88
- */
89
- count(anzahl) {
90
- return new Array(anzahl);
91
- }
92
- /**
93
- * Methode wird aufgerufen, wenn eine Datei verschoben wird
94
- * @param uploadid Upload ID
95
- */
96
- uploadedFileMoved(uploadid) {
97
- const item = this.uploadComponent.uploads.find((itm) => itm.documentid === uploadid);
98
- if (item) {
99
- this.uploadComponent.cancel(item.uploadId);
100
- }
101
- }
102
- }
103
- SacBrowserComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SacBrowserComponent, deps: [{ token: i1.HttpClient }, { token: i0.Injector }, { token: i2.ServiceConfirm }], target: i0.ɵɵFactoryTarget.Component });
104
- SacBrowserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SacBrowserComponent, selector: "sac-filebrowser", providers: [ServiceConfirm], viewQueries: [{ propertyName: "uploadComponent", first: true, predicate: SacDropzoneMultipleComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col-12 col-md-5 col-lg-4\">\r\n <ul class=\"list-group list-group-flush\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"treeItem\"\r\n [ngTemplateOutletContext]=\"{node: rootNode, deep: 0}\"\r\n ></ng-template>\r\n </ul>\r\n\r\n <ng-template #treeItem let-node=\"node\" let-deep=\"deep\">\r\n <li\r\n class=\"list-group-item py-1 px-2 d-flex align-items-center\"\r\n [class.list-group-item-secondary]=\"node === selectedNode\"\r\n (click)=\"selectNode(node)\"\r\n style=\"cursor: pointer\"\r\n >\r\n <div class=\"mx-3\" *ngFor=\"let i of count(deep)\"></div>\r\n <div\r\n (click)=\"switchExpandNode(node);$event.stopPropagation();\"\r\n class=\"mr-2\"\r\n [ngClass]=\"node.ChildNodes.length === 0 ? iconFolderEmpty: (!node.IsExpanded && node.ChildNodes.length > 0 ? iconFolderCollabsed : (node.IsExpanded && node.ChildNodes.length > 0 ? iconFolderOpen : ''))\"\r\n ></div>\r\n <ng-container *ngIf=\"!node.IsEditMode\">\r\n <div class=\"flex-grow-1\">{{ node.Name }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"node.IsEditMode\">\r\n <div class=\"flex-grow-1\" ngForm>\r\n <input\r\n name=\"editFolder\"\r\n class=\"form-control form-control-sm\"\r\n [ngModel]=\"node.Name\"\r\n [ngModelOptions]=\"{updateOn: 'blur'}\"\r\n (ngModelChange)=\"renameNode(node, $event)\"\r\n (keydown.enter)=\"$event.target.blur();false;\"\r\n (blur)=\"renameNode(node, null)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n </div>\r\n </ng-container>\r\n <div class=\"flex-shrink-0\">\r\n <a\r\n *ngIf=\"node.Path !== '/' && allowfolderrename\"\r\n class=\"btn btn-sm btn-link text-secondary\"\r\n (click)=\"editNode(node);$event.stopPropagation();\"\r\n >\r\n <i [class]=\"iconEdit\"></i>\r\n </a>\r\n <sac-contextmenu cssclass=\"d-inline-block\">\r\n <sac-contextmenubutton\r\n *ngIf=\"allowfoldercreate\"\r\n text=\"{{ lngResourceService.GetString(validationKeyService.FilebrowserButtonNewFolder) | async }}\"\r\n [icon]=\"iconFolderNew\"\r\n (clicked)=\"newNode(node)\"\r\n ></sac-contextmenubutton>\r\n <sac-contextmenubutton\r\n *ngIf=\"node.Path !== '/' && allowfolderdelete\"\r\n text=\"{{ lngResourceService.GetString(validationKeyService.FilebrowserButtonDelete) | async }}\"\r\n [icon]=\"iconDelete\"\r\n (clicked)=\"deleteNode(node)\"\r\n ></sac-contextmenubutton>\r\n <sac-contextmenusplitter\r\n *ngIf=\"allowfoldercreate || (node.Path !== '/' && allowfolderdelete)\"\r\n ></sac-contextmenusplitter>\r\n <sac-contextmenubutton\r\n text=\"{{ lngResourceService.GetString(validationKeyService.FilebrowserButtonRefresh) | async }}\"\r\n [icon]=\"iconRefresh\"\r\n (clicked)=\"refreshNode(node)\"\r\n ></sac-contextmenubutton>\r\n </sac-contextmenu>\r\n </div>\r\n </li>\r\n\r\n <ng-container *ngIf=\"node.IsExpanded\">\r\n <ng-template\r\n *ngFor=\"let child of node.ChildNodes\"\r\n [ngTemplateOutlet]=\"treeItem\"\r\n [ngTemplateOutletContext]=\"{node: child, deep: deep + 1}\"\r\n ></ng-template>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n <div class=\"col-12 col-md-7 col-lg-8\">\r\n <ng-container *ngIf=\"selectedNode && selectedNode.Files\">\r\n <div *ngIf=\"allowfileupload\" ngForm>\r\n <sac-dropzonemultiple\r\n [disablelabel]=\"true\"\r\n [endpoint]=\"apiurl + '/uploadregister'\"\r\n name=\"upload\"\r\n uploadheight=\"5rem\"\r\n [ngModel]=\"uploads\"\r\n (ngModelChange)=\"uploadComplete(selectedNode,$event)\"\r\n [allowedtypes]=\"allowedtypes\"\r\n >{{\r\n lngResourceService.GetString(validationKeyService.FilebrowserButtonUpload)\r\n | async }}</sac-dropzonemultiple\r\n >\r\n </div>\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-striped table-hover align-middle\">\r\n <thead>\r\n <th>\r\n {{\r\n lngResourceService.GetString(validationKeyService.FilebrowserGridFilename)\r\n | async }}\r\n </th>\r\n <th>\r\n {{\r\n lngResourceService.GetString(validationKeyService.FilebrowserGridSize)\r\n | async }}\r\n </th>\r\n <th style=\"width: 80px\"></th>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngIf=\"selectedNode.Files.length === 0\">\r\n <tr>\r\n <td colspan=\"3\">\r\n {{\r\n lngResourceService.GetString(validationKeyService.FilebrowserGridNoFiles)\r\n | async }}\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedNode.Files.length > 0\">\r\n <tr\r\n *ngFor=\"let item of selectedNode.Files\"\r\n (click)=\"selectFile(item)\"\r\n [class.table-primary]=\"selectedFileItem === item\"\r\n >\r\n <td [class.p-2]=\"item.IsEditMode\">\r\n <ng-container *ngIf=\"!item.IsEditMode\">\r\n {{ item.Filename }}\r\n </ng-container>\r\n <ng-container *ngIf=\"item.IsEditMode\">\r\n <div>\r\n <input\r\n name=\"editFolder\"\r\n class=\"form-control form-control-sm\"\r\n [ngModel]=\"item.Filename\"\r\n [ngModelOptions]=\"{updateOn: 'blur'}\"\r\n (ngModelChange)=\"renameFile(item, $event)\"\r\n (keydown.enter)=\"$event.target.blur();false\"\r\n (blur)=\"renameFile(item, null)\"\r\n (click)=\"$event.stopPropagation();\"\r\n />\r\n </div>\r\n </ng-container>\r\n </td>\r\n <td>{{ item.Size}}</td>\r\n <td class=\"p-2\">\r\n <div class=\"btn-toolbar\" role=\"toolbar\">\r\n <div class=\"btn-group ml-auto\" role=\"group\">\r\n <a\r\n *ngIf=\"allowfilerename\"\r\n class=\"btn btn-sm btn-link text-secondary\"\r\n (click)=\"editFile(item);$event.stopPropagation();\"\r\n ><i [class]=\"iconEdit\"></i\r\n ></a>\r\n </div>\r\n <div class=\"btn-group\" role=\"group\">\r\n <a\r\n *ngIf=\"allowfiledelete\"\r\n class=\"btn btn-sm btn-link text-secondary\"\r\n (click)=\"deleteFile(item);$event.stopPropagation();\"\r\n ><i [class]=\"iconDelete\"></i\r\n ></a>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", components: [{ type: i3.SacContextmenuComponent, selector: "sac-contextmenu" }, { type: i4.SacContextmenuItemButtonComponent, selector: "sac-contextmenubutton" }, { type: i5.SacContextmenuItemSplitterComponent, selector: "sac-contextmenusplitter" }, { type: i6.SacDropzoneMultipleComponent, selector: "sac-dropzonemultiple" }], directives: [{ type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.SacFormDirective, selector: "form:not([ngNoForm]):not([formGroup]),[ngForm]", exportAs: ["sacform"] }, { type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i9.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "async": i7.AsyncPipe } });
105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SacBrowserComponent, decorators: [{
106
- type: Component,
107
- args: [{ selector: 'sac-filebrowser', providers: [ServiceConfirm], template: "<div class=\"row\">\r\n <div class=\"col-12 col-md-5 col-lg-4\">\r\n <ul class=\"list-group list-group-flush\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"treeItem\"\r\n [ngTemplateOutletContext]=\"{node: rootNode, deep: 0}\"\r\n ></ng-template>\r\n </ul>\r\n\r\n <ng-template #treeItem let-node=\"node\" let-deep=\"deep\">\r\n <li\r\n class=\"list-group-item py-1 px-2 d-flex align-items-center\"\r\n [class.list-group-item-secondary]=\"node === selectedNode\"\r\n (click)=\"selectNode(node)\"\r\n style=\"cursor: pointer\"\r\n >\r\n <div class=\"mx-3\" *ngFor=\"let i of count(deep)\"></div>\r\n <div\r\n (click)=\"switchExpandNode(node);$event.stopPropagation();\"\r\n class=\"mr-2\"\r\n [ngClass]=\"node.ChildNodes.length === 0 ? iconFolderEmpty: (!node.IsExpanded && node.ChildNodes.length > 0 ? iconFolderCollabsed : (node.IsExpanded && node.ChildNodes.length > 0 ? iconFolderOpen : ''))\"\r\n ></div>\r\n <ng-container *ngIf=\"!node.IsEditMode\">\r\n <div class=\"flex-grow-1\">{{ node.Name }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"node.IsEditMode\">\r\n <div class=\"flex-grow-1\" ngForm>\r\n <input\r\n name=\"editFolder\"\r\n class=\"form-control form-control-sm\"\r\n [ngModel]=\"node.Name\"\r\n [ngModelOptions]=\"{updateOn: 'blur'}\"\r\n (ngModelChange)=\"renameNode(node, $event)\"\r\n (keydown.enter)=\"$event.target.blur();false;\"\r\n (blur)=\"renameNode(node, null)\"\r\n (click)=\"$event.stopPropagation()\"\r\n />\r\n </div>\r\n </ng-container>\r\n <div class=\"flex-shrink-0\">\r\n <a\r\n *ngIf=\"node.Path !== '/' && allowfolderrename\"\r\n class=\"btn btn-sm btn-link text-secondary\"\r\n (click)=\"editNode(node);$event.stopPropagation();\"\r\n >\r\n <i [class]=\"iconEdit\"></i>\r\n </a>\r\n <sac-contextmenu cssclass=\"d-inline-block\">\r\n <sac-contextmenubutton\r\n *ngIf=\"allowfoldercreate\"\r\n text=\"{{ lngResourceService.GetString(validationKeyService.FilebrowserButtonNewFolder) | async }}\"\r\n [icon]=\"iconFolderNew\"\r\n (clicked)=\"newNode(node)\"\r\n ></sac-contextmenubutton>\r\n <sac-contextmenubutton\r\n *ngIf=\"node.Path !== '/' && allowfolderdelete\"\r\n text=\"{{ lngResourceService.GetString(validationKeyService.FilebrowserButtonDelete) | async }}\"\r\n [icon]=\"iconDelete\"\r\n (clicked)=\"deleteNode(node)\"\r\n ></sac-contextmenubutton>\r\n <sac-contextmenusplitter\r\n *ngIf=\"allowfoldercreate || (node.Path !== '/' && allowfolderdelete)\"\r\n ></sac-contextmenusplitter>\r\n <sac-contextmenubutton\r\n text=\"{{ lngResourceService.GetString(validationKeyService.FilebrowserButtonRefresh) | async }}\"\r\n [icon]=\"iconRefresh\"\r\n (clicked)=\"refreshNode(node)\"\r\n ></sac-contextmenubutton>\r\n </sac-contextmenu>\r\n </div>\r\n </li>\r\n\r\n <ng-container *ngIf=\"node.IsExpanded\">\r\n <ng-template\r\n *ngFor=\"let child of node.ChildNodes\"\r\n [ngTemplateOutlet]=\"treeItem\"\r\n [ngTemplateOutletContext]=\"{node: child, deep: deep + 1}\"\r\n ></ng-template>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n <div class=\"col-12 col-md-7 col-lg-8\">\r\n <ng-container *ngIf=\"selectedNode && selectedNode.Files\">\r\n <div *ngIf=\"allowfileupload\" ngForm>\r\n <sac-dropzonemultiple\r\n [disablelabel]=\"true\"\r\n [endpoint]=\"apiurl + '/uploadregister'\"\r\n name=\"upload\"\r\n uploadheight=\"5rem\"\r\n [ngModel]=\"uploads\"\r\n (ngModelChange)=\"uploadComplete(selectedNode,$event)\"\r\n [allowedtypes]=\"allowedtypes\"\r\n >{{\r\n lngResourceService.GetString(validationKeyService.FilebrowserButtonUpload)\r\n | async }}</sac-dropzonemultiple\r\n >\r\n </div>\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-striped table-hover align-middle\">\r\n <thead>\r\n <th>\r\n {{\r\n lngResourceService.GetString(validationKeyService.FilebrowserGridFilename)\r\n | async }}\r\n </th>\r\n <th>\r\n {{\r\n lngResourceService.GetString(validationKeyService.FilebrowserGridSize)\r\n | async }}\r\n </th>\r\n <th style=\"width: 80px\"></th>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngIf=\"selectedNode.Files.length === 0\">\r\n <tr>\r\n <td colspan=\"3\">\r\n {{\r\n lngResourceService.GetString(validationKeyService.FilebrowserGridNoFiles)\r\n | async }}\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedNode.Files.length > 0\">\r\n <tr\r\n *ngFor=\"let item of selectedNode.Files\"\r\n (click)=\"selectFile(item)\"\r\n [class.table-primary]=\"selectedFileItem === item\"\r\n >\r\n <td [class.p-2]=\"item.IsEditMode\">\r\n <ng-container *ngIf=\"!item.IsEditMode\">\r\n {{ item.Filename }}\r\n </ng-container>\r\n <ng-container *ngIf=\"item.IsEditMode\">\r\n <div>\r\n <input\r\n name=\"editFolder\"\r\n class=\"form-control form-control-sm\"\r\n [ngModel]=\"item.Filename\"\r\n [ngModelOptions]=\"{updateOn: 'blur'}\"\r\n (ngModelChange)=\"renameFile(item, $event)\"\r\n (keydown.enter)=\"$event.target.blur();false\"\r\n (blur)=\"renameFile(item, null)\"\r\n (click)=\"$event.stopPropagation();\"\r\n />\r\n </div>\r\n </ng-container>\r\n </td>\r\n <td>{{ item.Size}}</td>\r\n <td class=\"p-2\">\r\n <div class=\"btn-toolbar\" role=\"toolbar\">\r\n <div class=\"btn-group ml-auto\" role=\"group\">\r\n <a\r\n *ngIf=\"allowfilerename\"\r\n class=\"btn btn-sm btn-link text-secondary\"\r\n (click)=\"editFile(item);$event.stopPropagation();\"\r\n ><i [class]=\"iconEdit\"></i\r\n ></a>\r\n </div>\r\n <div class=\"btn-group\" role=\"group\">\r\n <a\r\n *ngIf=\"allowfiledelete\"\r\n class=\"btn btn-sm btn-link text-secondary\"\r\n (click)=\"deleteFile(item);$event.stopPropagation();\"\r\n ><i [class]=\"iconDelete\"></i\r\n ></a>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n" }]
108
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i0.Injector }, { type: i2.ServiceConfirm }]; }, propDecorators: { uploadComponent: [{
109
- type: ViewChild,
110
- args: [SacDropzoneMultipleComponent, { static: false }]
111
- }] } });
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1ib290c3RyYXA0L3NyYy9jb21wb25lbnRzL2Jyb3dzZXIvYnJvd3Nlci50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1ib290c3RyYXA0L3NyYy9jb21wb25lbnRzL2Jyb3dzZXIvYnJvd3Nlci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQVksU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFHTCxvQkFBb0IsR0FDckIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDeEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7Ozs7O0FBRXRGOztHQUVHO0FBTUgsTUFBTSxPQUFPLG1CQUFvQixTQUFRLG9CQUFvQjtJQVMzRCx3QkFBd0I7SUFFeEIsdUJBQXVCO0lBRXZCOzs7OztPQUtHO0lBQ0gsWUFDRSxVQUFzQixFQUN0QixRQUFrQixFQUNWLGNBQThCO1FBRXRDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFGcEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO0lBR3hDLENBQUM7SUFFRCwwQkFBMEI7SUFFMUIseUJBQXlCO0lBRXpCOzs7O09BSUc7SUFDSSxpQkFBaUIsQ0FBQyxJQUFrQjtRQUN6QyxPQUFPLElBQUksVUFBVSxDQUFVLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDMUMsUUFBUSxDQUFDO2dCQUNQLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUN0QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsdUJBQXVCLENBQ2xEO2dCQUNELE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUN4QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0NBQWdDLENBQzNEO2FBQ0YsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNwQixJQUFJLENBQUMsY0FBYztxQkFDaEIsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztxQkFDeEMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ3BCLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRTt3QkFDcEIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDckI7eUJBQU07d0JBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDdEI7b0JBQ0QsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN0QixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGlCQUFpQixDQUFDLElBQWtCO1FBQ3pDLE9BQU8sSUFBSSxVQUFVLENBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUMxQyxRQUFRLENBQUM7Z0JBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQ3RDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FDbEQ7Z0JBQ0QsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQ3hDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQ0FBa0MsQ0FDN0Q7YUFDRixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxjQUFjO3FCQUNoQixjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO3FCQUN4QyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDcEIsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFO3dCQUNwQixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNyQjt5QkFBTTt3QkFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUN0QjtvQkFDRCxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3RCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLE1BQWM7UUFDekIsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksaUJBQWlCLENBQUMsUUFBZ0I7UUFDdkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUM1QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQ3JDLENBQUM7UUFFRixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7O2dIQTlHVSxtQkFBbUI7b0dBQW5CLG1CQUFtQiwwQ0FGbkIsQ0FBQyxjQUFjLENBQUMsMkVBUWhCLDRCQUE0Qix1RUN6QnpDLG1sUEFnTEE7MkZEN0phLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUIsYUFFaEIsQ0FBQyxjQUFjLENBQUM7cUpBU25CLGVBQWU7c0JBRHRCLFNBQVM7dUJBQUMsNEJBQTRCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgSUJyb3dzZXJGaWxlLFxyXG4gIElCcm93c2VyTm9kZSxcclxuICBTYWNGaWxlQnJvd3NlckNvbW1vbixcclxufSBmcm9tICdAc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NhYy1jb21tb24nO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTZXJ2aWNlQ29uZmlybSB9IGZyb20gJy4uLy4uL2NvbnRyb2xzL2NvbmZpcm0vY29uZmlybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2FjRHJvcHpvbmVNdWx0aXBsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbnRyb2xzL3VwbG9hZC9kcm9wem9uZW11bHRpcGxlJztcclxuXHJcbi8qKlxyXG4gKiBTZXJ2ZXIgRmlsZSBCcm93c2VyIEtvbXBvbmVudGVcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2FjLWZpbGVicm93c2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYnJvd3Nlci5odG1sJyxcclxuICBwcm92aWRlcnM6IFtTZXJ2aWNlQ29uZmlybV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTYWNCcm93c2VyQ29tcG9uZW50IGV4dGVuZHMgU2FjRmlsZUJyb3dzZXJDb21tb24ge1xyXG4gIC8vICNyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAvKipcclxuICAgKiBSZWZlcmVueiBhdWYgVXBsb2FkIENvbXBvbmVudFxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoU2FjRHJvcHpvbmVNdWx0aXBsZUNvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgcHJpdmF0ZSB1cGxvYWRDb21wb25lbnQ6IFNhY0Ryb3B6b25lTXVsdGlwbGVDb21wb25lbnQ7XHJcblxyXG4gIC8vICNlbmRyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAvLyAjcmVnaW9uIENvbnN0cnVjdG9yc1xyXG5cclxuICAvKipcclxuICAgKiBLb25zdHJ1a3RvclxyXG4gICAqIEBwYXJhbSBodHRwQ2xpZW50IEhUVFAgQ2xpZW50XHJcbiAgICogQHBhcmFtIGluamVjdG9yIEFuZ3VsYXIgRGVwZW5kZW5jeSBJbmplY3Rpb24gU2VydmljZVxyXG4gICAqIEBwYXJhbSBjb25maXJtU2VydmljZSBDb25maXJtIFNlcnZpY2VcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIGNvbmZpcm1TZXJ2aWNlOiBTZXJ2aWNlQ29uZmlybVxyXG4gICkge1xyXG4gICAgc3VwZXIoaHR0cENsaWVudCwgaW5qZWN0b3IpO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvcnNcclxuXHJcbiAgLy8gI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xyXG5cclxuICAvKipcclxuICAgKiBDb25maXJtIEFjdGlvbiB3ZW5uIGVpbiBGaWxlIGdlbMO2c2NodCB3ZXJkZW4gc29sbFxyXG4gICAqIEBwYXJhbSBmaWxlIEZpbGUgZGFzIGdlbMO2c2NodCB3ZXJkZW4gc29sbC5cclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9iIEZpbGUgZ2Vsw7ZzY2h0IHdlcmRlbiBrYW5uLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBjb25maXJtRGVsZXRlRmlsZShmaWxlOiBJQnJvd3NlckZpbGUpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxib29sZWFuPigob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgZm9ya0pvaW4oe1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmxuZ1Jlc291cmNlU2VydmljZS5HZXRTdHJpbmcoXHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlLkZpbGVicm93c2VyQnV0dG9uRGVsZXRlXHJcbiAgICAgICAgKSxcclxuICAgICAgICBtZXNzYWdlOiB0aGlzLmxuZ1Jlc291cmNlU2VydmljZS5HZXRTdHJpbmcoXHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlLkZpbGVicm93c2VyQ29uZmlybVRleHREZWxldGVGaWxlXHJcbiAgICAgICAgKSxcclxuICAgICAgfSkuc3Vic2NyaWJlKCh0ZXh0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb25maXJtU2VydmljZVxyXG4gICAgICAgICAgLkNvbmZpcm1NZXNzYWdlKHRleHQudGl0bGUsIHRleHQubWVzc2FnZSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSAneWVzJykge1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uZmlybSBBY3Rpb24gd2VubiBlaW4gT3JkbmVyIGdlbMO2c2NodCB3ZXJkZW4gc29sbFxyXG4gICAqIEBwYXJhbSBub2RlIE9yZG5lciBkZXIgZ2Vsw7ZzY2h0IHdlcmRlbiBzb2xsXHJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvYiBPcmRuZXIgZ2Vsw7ZzY2h0IGthbm4uXHJcbiAgICovXHJcbiAgcHVibGljIGNvbmZpcm1EZWxldGVOb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGJvb2xlYW4+KChvYnNlcnZlcikgPT4ge1xyXG4gICAgICBmb3JrSm9pbih7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMubG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZyhcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuRmlsZWJyb3dzZXJCdXR0b25EZWxldGVcclxuICAgICAgICApLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMubG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZyhcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuRmlsZWJyb3dzZXJDb25maXJtVGV4dERlbGV0ZUZvbGRlclxyXG4gICAgICAgICksXHJcbiAgICAgIH0pLnN1YnNjcmliZSgodGV4dCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29uZmlybVNlcnZpY2VcclxuICAgICAgICAgIC5Db25maXJtTWVzc2FnZSh0ZXh0LnRpdGxlLCB0ZXh0Lm1lc3NhZ2UpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ3llcycpIHtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVyemV1Z3QgZWluIEFycmF5IHZvbiBlaW5lciBiZXN0aW1tdGVuIGdyw7Zzc2VcclxuICAgKiBAcGFyYW0gYW56YWhsIEdyw7Zzc2UgZGVzIEFycmF5XHJcbiAgICogQHJldHVybnMgQXJyYXlcclxuICAgKi9cclxuICBwdWJsaWMgY291bnQoYW56YWhsOiBudW1iZXIpOiBBcnJheTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IEFycmF5KGFuemFobCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIHdpcmQgYXVmZ2VydWZlbiwgd2VubiBlaW5lIERhdGVpIHZlcnNjaG9iZW4gd2lyZFxyXG4gICAqIEBwYXJhbSB1cGxvYWRpZCBVcGxvYWQgSURcclxuICAgKi9cclxuICBwdWJsaWMgdXBsb2FkZWRGaWxlTW92ZWQodXBsb2FkaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMudXBsb2FkQ29tcG9uZW50LnVwbG9hZHMuZmluZChcclxuICAgICAgKGl0bSkgPT4gaXRtLmRvY3VtZW50aWQgPT09IHVwbG9hZGlkXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChpdGVtKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkQ29tcG9uZW50LmNhbmNlbChpdGVtLnVwbG9hZElkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNSBjb2wtbGctNFwiPlxyXG4gICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyZWVJdGVtXCJcclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie25vZGU6IHJvb3ROb2RlLCBkZWVwOiAwfVwiXHJcbiAgICAgID48L25nLXRlbXBsYXRlPlxyXG4gICAgPC91bD5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI3RyZWVJdGVtIGxldC1ub2RlPVwibm9kZVwiIGxldC1kZWVwPVwiZGVlcFwiPlxyXG4gICAgICA8bGlcclxuICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBweS0xIHB4LTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgW2NsYXNzLmxpc3QtZ3JvdXAtaXRlbS1zZWNvbmRhcnldPVwibm9kZSA9PT0gc2VsZWN0ZWROb2RlXCJcclxuICAgICAgICAoY2xpY2spPVwic2VsZWN0Tm9kZShub2RlKVwiXHJcbiAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm14LTNcIiAqbmdGb3I9XCJsZXQgaSBvZiBjb3VudChkZWVwKVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hFeHBhbmROb2RlKG5vZGUpOyRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIlxyXG4gICAgICAgICAgY2xhc3M9XCJtci0yXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIm5vZGUuQ2hpbGROb2Rlcy5sZW5ndGggPT09IDAgPyBpY29uRm9sZGVyRW1wdHk6ICghbm9kZS5Jc0V4cGFuZGVkICYmIG5vZGUuQ2hpbGROb2Rlcy5sZW5ndGggPiAwID8gaWNvbkZvbGRlckNvbGxhYnNlZCA6IChub2RlLklzRXhwYW5kZWQgJiYgbm9kZS5DaGlsZE5vZGVzLmxlbmd0aCA+IDAgPyBpY29uRm9sZGVyT3BlbiA6ICcnKSlcIlxyXG4gICAgICAgID48L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5vZGUuSXNFZGl0TW9kZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+e3sgbm9kZS5OYW1lIH19PC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGUuSXNFZGl0TW9kZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgbmdGb3JtPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBuYW1lPVwiZWRpdEZvbGRlclwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcclxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJub2RlLk5hbWVcIlxyXG4gICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7dXBkYXRlT246ICdibHVyJ31cIlxyXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJlbmFtZU5vZGUobm9kZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnRhcmdldC5ibHVyKCk7ZmFsc2U7XCJcclxuICAgICAgICAgICAgICAoYmx1cik9XCJyZW5hbWVOb2RlKG5vZGUsIG51bGwpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNocmluay0wXCI+XHJcbiAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAqbmdJZj1cIm5vZGUuUGF0aCAhPT0gJy8nICYmIGFsbG93Zm9sZGVycmVuYW1lXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saW5rIHRleHQtc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImVkaXROb2RlKG5vZGUpOyRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8aSBbY2xhc3NdPVwiaWNvbkVkaXRcIj48L2k+XHJcbiAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8c2FjLWNvbnRleHRtZW51IGNzc2NsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIj5cclxuICAgICAgICAgICAgPHNhYy1jb250ZXh0bWVudWJ1dHRvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWxsb3dmb2xkZXJjcmVhdGVcIlxyXG4gICAgICAgICAgICAgIHRleHQ9XCJ7eyBsbmdSZXNvdXJjZVNlcnZpY2UuR2V0U3RyaW5nKHZhbGlkYXRpb25LZXlTZXJ2aWNlLkZpbGVicm93c2VyQnV0dG9uTmV3Rm9sZGVyKSB8IGFzeW5jIH19XCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCJpY29uRm9sZGVyTmV3XCJcclxuICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJuZXdOb2RlKG5vZGUpXCJcclxuICAgICAgICAgICAgPjwvc2FjLWNvbnRleHRtZW51YnV0dG9uPlxyXG4gICAgICAgICAgICA8c2FjLWNvbnRleHRtZW51YnV0dG9uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLlBhdGggIT09ICcvJyAmJiBhbGxvd2ZvbGRlcmRlbGV0ZVwiXHJcbiAgICAgICAgICAgICAgdGV4dD1cInt7IGxuZ1Jlc291cmNlU2VydmljZS5HZXRTdHJpbmcodmFsaWRhdGlvbktleVNlcnZpY2UuRmlsZWJyb3dzZXJCdXR0b25EZWxldGUpIHwgYXN5bmMgfX1cIlxyXG4gICAgICAgICAgICAgIFtpY29uXT1cImljb25EZWxldGVcIlxyXG4gICAgICAgICAgICAgIChjbGlja2VkKT1cImRlbGV0ZU5vZGUobm9kZSlcIlxyXG4gICAgICAgICAgICA+PC9zYWMtY29udGV4dG1lbnVidXR0b24+XHJcbiAgICAgICAgICAgIDxzYWMtY29udGV4dG1lbnVzcGxpdHRlclxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWxsb3dmb2xkZXJjcmVhdGUgfHwgKG5vZGUuUGF0aCAhPT0gJy8nICYmIGFsbG93Zm9sZGVyZGVsZXRlKVwiXHJcbiAgICAgICAgICAgID48L3NhYy1jb250ZXh0bWVudXNwbGl0dGVyPlxyXG4gICAgICAgICAgICA8c2FjLWNvbnRleHRtZW51YnV0dG9uXHJcbiAgICAgICAgICAgICAgdGV4dD1cInt7IGxuZ1Jlc291cmNlU2VydmljZS5HZXRTdHJpbmcodmFsaWRhdGlvbktleVNlcnZpY2UuRmlsZWJyb3dzZXJCdXR0b25SZWZyZXNoKSB8IGFzeW5jIH19XCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCJpY29uUmVmcmVzaFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVmcmVzaE5vZGUobm9kZSlcIlxyXG4gICAgICAgICAgICA+PC9zYWMtY29udGV4dG1lbnVidXR0b24+XHJcbiAgICAgICAgICA8L3NhYy1jb250ZXh0bWVudT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9saT5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLklzRXhwYW5kZWRcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBub2RlLkNoaWxkTm9kZXNcIlxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJlZUl0ZW1cIlxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntub2RlOiBjaGlsZCwgZGVlcDogZGVlcCArIDF9XCJcclxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTcgY29sLWxnLThcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZE5vZGUgJiYgc2VsZWN0ZWROb2RlLkZpbGVzXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJhbGxvd2ZpbGV1cGxvYWRcIiBuZ0Zvcm0+XHJcbiAgICAgICAgPHNhYy1kcm9wem9uZW11bHRpcGxlXHJcbiAgICAgICAgICBbZGlzYWJsZWxhYmVsXT1cInRydWVcIlxyXG4gICAgICAgICAgW2VuZHBvaW50XT1cImFwaXVybCArICcvdXBsb2FkcmVnaXN0ZXInXCJcclxuICAgICAgICAgIG5hbWU9XCJ1cGxvYWRcIlxyXG4gICAgICAgICAgdXBsb2FkaGVpZ2h0PVwiNXJlbVwiXHJcbiAgICAgICAgICBbbmdNb2RlbF09XCJ1cGxvYWRzXCJcclxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwbG9hZENvbXBsZXRlKHNlbGVjdGVkTm9kZSwkZXZlbnQpXCJcclxuICAgICAgICAgIFthbGxvd2VkdHlwZXNdPVwiYWxsb3dlZHR5cGVzXCJcclxuICAgICAgICAgID57e1xyXG4gICAgICAgICAgbG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZyh2YWxpZGF0aW9uS2V5U2VydmljZS5GaWxlYnJvd3NlckJ1dHRvblVwbG9hZClcclxuICAgICAgICAgIHwgYXN5bmMgfX08L3NhYy1kcm9wem9uZW11bHRpcGxlXHJcbiAgICAgICAgPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIGFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICBsbmdSZXNvdXJjZVNlcnZpY2UuR2V0U3RyaW5nKHZhbGlkYXRpb25LZXlTZXJ2aWNlLkZpbGVicm93c2VyR3JpZEZpbGVuYW1lKVxyXG4gICAgICAgICAgICAgIHwgYXN5bmMgfX1cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgbG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZyh2YWxpZGF0aW9uS2V5U2VydmljZS5GaWxlYnJvd3NlckdyaWRTaXplKVxyXG4gICAgICAgICAgICAgIHwgYXN5bmMgfX1cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDgwcHhcIj48L3RoPlxyXG4gICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkTm9kZS5GaWxlcy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjNcIj5cclxuICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgbG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZyh2YWxpZGF0aW9uS2V5U2VydmljZS5GaWxlYnJvd3NlckdyaWROb0ZpbGVzKVxyXG4gICAgICAgICAgICAgICAgICB8IGFzeW5jIH19XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWROb2RlLkZpbGVzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkTm9kZS5GaWxlc1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RmlsZShpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MudGFibGUtcHJpbWFyeV09XCJzZWxlY3RlZEZpbGVJdGVtID09PSBpdGVtXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8dGQgW2NsYXNzLnAtMl09XCJpdGVtLklzRWRpdE1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLklzRWRpdE1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLkZpbGVuYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5Jc0VkaXRNb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZWRpdEZvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIml0ZW0uRmlsZW5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3VwZGF0ZU9uOiAnYmx1cid9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicmVuYW1lRmlsZShpdGVtLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnRhcmdldC5ibHVyKCk7ZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJyZW5hbWVGaWxlKGl0ZW0sIG51bGwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPnt7IGl0ZW0uU2l6ZX19PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgbWwtYXV0b1wiIHJvbGU9XCJncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbGxvd2ZpbGVyZW5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpbmsgdGV4dC1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdEZpbGUoaXRlbSk7JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48aSBbY2xhc3NdPVwiaWNvbkVkaXRcIj48L2lcclxuICAgICAgICAgICAgICAgICAgICAgID48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIHJvbGU9XCJncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbGxvd2ZpbGVkZWxldGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpbmsgdGV4dC1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRmlsZShpdGVtKTskZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjxpIFtjbGFzc109XCJpY29uRGVsZXRlXCI+PC9pXHJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
1
+ import { Component, ViewChild } from '@angular/core';
2
+ import { SacFileBrowserCommon, } from '@simpleangularcontrols/sac-common';
3
+ import { Observable, forkJoin } from 'rxjs';
4
+ import { ServiceConfirm } from '../../controls/confirm/confirm.service';
5
+ import { SacDropzoneMultipleComponent } from '../../controls/upload/dropzonemultiple';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common/http";
8
+ import * as i2 from "../../controls/confirm/confirm.service";
9
+ import * as i3 from "../../controls/contextmenu/contextmenu";
10
+ import * as i4 from "../../controls/contextmenu/contextmenuitembutton";
11
+ import * as i5 from "../../controls/contextmenu/contextmenuitemsplitter";
12
+ import * as i6 from "../../controls/upload/dropzonemultiple";
13
+ import * as i7 from "@angular/common";
14
+ import * as i8 from "../../controls/form/form";
15
+ import * as i9 from "@angular/forms";
16
+ /**
17
+ * Server File Browser Komponente
18
+ */
19
+ export class SacBrowserComponent extends SacFileBrowserCommon {
20
+ // #endregion Properties
21
+ // #region Constructors
22
+ /**
23
+ * Konstruktor
24
+ * @param httpClient HTTP Client
25
+ * @param injector Angular Dependency Injection Service
26
+ * @param confirmService Confirm Service
27
+ */
28
+ constructor(httpClient, injector, confirmService) {
29
+ super(httpClient, injector);
30
+ this.confirmService = confirmService;
31
+ }
32
+ // #endregion Constructors
33
+ // #region Public Methods
34
+ /**
35
+ * Confirm Action wenn ein File gelöscht werden soll
36
+ * @param file File das gelöscht werden soll.
37
+ * @returns Observable ob File gelöscht werden kann.
38
+ */
39
+ confirmDeleteFile(file) {
40
+ return new Observable((observer) => {
41
+ forkJoin({
42
+ title: this.lngResourceService.GetString(this.validationKeyService.FilebrowserButtonDelete),
43
+ message: this.lngResourceService.GetString(this.validationKeyService.FilebrowserConfirmTextDeleteFile),
44
+ }).subscribe((text) => {
45
+ this.confirmService
46
+ .ConfirmMessage(text.title, text.message)
47
+ .subscribe((result) => {
48
+ if (result === 'yes') {
49
+ observer.next(true);
50
+ }
51
+ else {
52
+ observer.next(false);
53
+ }
54
+ observer.complete();
55
+ });
56
+ });
57
+ });
58
+ }
59
+ /**
60
+ * Confirm Action wenn ein Ordner gelöscht werden soll
61
+ * @param node Ordner der gelöscht werden soll
62
+ * @returns Observable ob Ordner gelöscht kann.
63
+ */
64
+ confirmDeleteNode(node) {
65
+ return new Observable((observer) => {
66
+ forkJoin({
67
+ title: this.lngResourceService.GetString(this.validationKeyService.FilebrowserButtonDelete),
68
+ message: this.lngResourceService.GetString(this.validationKeyService.FilebrowserConfirmTextDeleteFolder),
69
+ }).subscribe((text) => {
70
+ this.confirmService
71
+ .ConfirmMessage(text.title, text.message)
72
+ .subscribe((result) => {
73
+ if (result === 'yes') {
74
+ observer.next(true);
75
+ }
76
+ else {
77
+ observer.next(false);
78
+ }
79
+ observer.complete();
80
+ });
81
+ });
82
+ });
83
+ }
84
+ /**
85
+ * Erzeugt ein Array von einer bestimmten grösse
86
+ * @param anzahl Grösse des Array
87
+ * @returns Array
88
+ */
89
+ count(anzahl) {
90
+ return new Array(anzahl);
91
+ }
92
+ /**
93
+ * Methode wird aufgerufen, wenn eine Datei verschoben wird
94
+ * @param uploadid Upload ID
95
+ */
96
+ uploadedFileMoved(uploadid) {
97
+ const item = this.uploadComponent.uploads.find((itm) => itm.documentid === uploadid);
98
+ if (item) {
99
+ this.uploadComponent.cancel(item.uploadId);
100
+ }
101
+ }
102
+ }
103
+ SacBrowserComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SacBrowserComponent, deps: [{ token: i1.HttpClient }, { token: i0.Injector }, { token: i2.ServiceConfirm }], target: i0.ɵɵFactoryTarget.Component });
104
+ SacBrowserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SacBrowserComponent, selector: "sac-filebrowser", providers: [ServiceConfirm], viewQueries: [{ propertyName: "uploadComponent", first: true, predicate: SacDropzoneMultipleComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"row\">\n <div class=\"col-12 col-md-5 col-lg-4\">\n <ul class=\"list-group list-group-flush\">\n <ng-template\n [ngTemplateOutlet]=\"treeItem\"\n [ngTemplateOutletContext]=\"{node: rootNode, deep: 0}\"\n ></ng-template>\n </ul>\n\n <ng-template #treeItem let-node=\"node\" let-deep=\"deep\">\n <li\n class=\"list-group-item py-1 px-2 d-flex align-items-center\"\n [class.list-group-item-secondary]=\"node === selectedNode\"\n (click)=\"selectNode(node)\"\n style=\"cursor: pointer\"\n >\n <div class=\"mx-3\" *ngFor=\"let i of count(deep)\"></div>\n <div\n (click)=\"switchExpandNode(node);$event.stopPropagation();\"\n class=\"mr-2\"\n [ngClass]=\"node.ChildNodes.length === 0 ? iconFolderEmpty: (!node.IsExpanded && node.ChildNodes.length > 0 ? iconFolderCollabsed : (node.IsExpanded && node.ChildNodes.length > 0 ? iconFolderOpen : ''))\"\n ></div>\n <ng-container *ngIf=\"!node.IsEditMode\">\n <div class=\"flex-grow-1\">{{ node.Name }}</div>\n </ng-container>\n <ng-container *ngIf=\"node.IsEditMode\">\n <div class=\"flex-grow-1\" ngForm>\n <input\n name=\"editFolder\"\n class=\"form-control form-control-sm\"\n [ngModel]=\"node.Name\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n (ngModelChange)=\"renameNode(node, $event)\"\n (keydown.enter)=\"$event.target.blur();false;\"\n (blur)=\"renameNode(node, null)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n </ng-container>\n <div class=\"flex-shrink-0\">\n <a\n *ngIf=\"node.Path !== '/' && allowfolderrename\"\n class=\"btn btn-sm btn-link text-secondary\"\n (click)=\"editNode(node);$event.stopPropagation();\"\n >\n <i [class]=\"iconEdit\"></i>\n </a>\n <sac-contextmenu cssclass=\"d-inline-block\">\n <sac-contextmenubutton\n *ngIf=\"allowfoldercreate\"\n text=\"{{ lngResourceService.GetString(validationKeyService.FilebrowserButtonNewFolder) | async }}\"\n [icon]=\"iconFolderNew\"\n (clicked)=\"newNode(node)\"\n ></sac-contextmenubutton>\n <sac-contextmenubutton\n *ngIf=\"node.Path !== '/' && allowfolderdelete\"\n text=\"{{ lngResourceService.GetString(validationKeyService.FilebrowserButtonDelete) | async }}\"\n [icon]=\"iconDelete\"\n (clicked)=\"deleteNode(node)\"\n ></sac-contextmenubutton>\n <sac-contextmenusplitter\n *ngIf=\"allowfoldercreate || (node.Path !== '/' && allowfolderdelete)\"\n ></sac-contextmenusplitter>\n <sac-contextmenubutton\n text=\"{{ lngResourceService.GetString(validationKeyService.FilebrowserButtonRefresh) | async }}\"\n [icon]=\"iconRefresh\"\n (clicked)=\"refreshNode(node)\"\n ></sac-contextmenubutton>\n </sac-contextmenu>\n </div>\n </li>\n\n <ng-container *ngIf=\"node.IsExpanded\">\n <ng-template\n *ngFor=\"let child of node.ChildNodes\"\n [ngTemplateOutlet]=\"treeItem\"\n [ngTemplateOutletContext]=\"{node: child, deep: deep + 1}\"\n ></ng-template>\n </ng-container>\n </ng-template>\n </div>\n <div class=\"col-12 col-md-7 col-lg-8\">\n <ng-container *ngIf=\"selectedNode && selectedNode.Files\">\n <div *ngIf=\"allowfileupload\" ngForm>\n <sac-dropzonemultiple\n [disablelabel]=\"true\"\n [endpoint]=\"apiurl + '/uploadregister'\"\n name=\"upload\"\n uploadheight=\"5rem\"\n [ngModel]=\"uploads\"\n (ngModelChange)=\"uploadComplete(selectedNode,$event)\"\n [allowedtypes]=\"allowedtypes\"\n >{{\n lngResourceService.GetString(validationKeyService.FilebrowserButtonUpload)\n | async }}</sac-dropzonemultiple\n >\n </div>\n <div class=\"table-responsive\">\n <table class=\"table table-striped table-hover align-middle\">\n <thead>\n <th>\n {{\n lngResourceService.GetString(validationKeyService.FilebrowserGridFilename)\n | async }}\n </th>\n <th>\n {{\n lngResourceService.GetString(validationKeyService.FilebrowserGridSize)\n | async }}\n </th>\n <th style=\"width: 80px\"></th>\n </thead>\n <tbody>\n <ng-container *ngIf=\"selectedNode.Files.length === 0\">\n <tr>\n <td colspan=\"3\">\n {{\n lngResourceService.GetString(validationKeyService.FilebrowserGridNoFiles)\n | async }}\n </td>\n </tr>\n </ng-container>\n <ng-container *ngIf=\"selectedNode.Files.length > 0\">\n <tr\n *ngFor=\"let item of selectedNode.Files\"\n (click)=\"selectFile(item)\"\n [class.table-primary]=\"selectedFileItem === item\"\n >\n <td [class.p-2]=\"item.IsEditMode\">\n <ng-container *ngIf=\"!item.IsEditMode\">\n {{ item.Filename }}\n </ng-container>\n <ng-container *ngIf=\"item.IsEditMode\">\n <div>\n <input\n name=\"editFolder\"\n class=\"form-control form-control-sm\"\n [ngModel]=\"item.Filename\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n (ngModelChange)=\"renameFile(item, $event)\"\n (keydown.enter)=\"$event.target.blur();false\"\n (blur)=\"renameFile(item, null)\"\n (click)=\"$event.stopPropagation();\"\n />\n </div>\n </ng-container>\n </td>\n <td>{{ item.Size}}</td>\n <td class=\"p-2\">\n <div class=\"btn-toolbar\" role=\"toolbar\">\n <div class=\"btn-group ml-auto\" role=\"group\">\n <a\n *ngIf=\"allowfilerename\"\n class=\"btn btn-sm btn-link text-secondary\"\n (click)=\"editFile(item);$event.stopPropagation();\"\n ><i [class]=\"iconEdit\"></i\n ></a>\n </div>\n <div class=\"btn-group\" role=\"group\">\n <a\n *ngIf=\"allowfiledelete\"\n class=\"btn btn-sm btn-link text-secondary\"\n (click)=\"deleteFile(item);$event.stopPropagation();\"\n ><i [class]=\"iconDelete\"></i\n ></a>\n </div>\n </div>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n </ng-container>\n </div>\n</div>\n", components: [{ type: i3.SacContextmenuComponent, selector: "sac-contextmenu" }, { type: i4.SacContextmenuItemButtonComponent, selector: "sac-contextmenubutton" }, { type: i5.SacContextmenuItemSplitterComponent, selector: "sac-contextmenusplitter" }, { type: i6.SacDropzoneMultipleComponent, selector: "sac-dropzonemultiple" }], directives: [{ type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.SacFormDirective, selector: "form:not([ngNoForm]):not([formGroup]),[ngForm]", exportAs: ["sacform"] }, { type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i9.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "async": i7.AsyncPipe } });
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SacBrowserComponent, decorators: [{
106
+ type: Component,
107
+ args: [{ selector: 'sac-filebrowser', providers: [ServiceConfirm], template: "<div class=\"row\">\n <div class=\"col-12 col-md-5 col-lg-4\">\n <ul class=\"list-group list-group-flush\">\n <ng-template\n [ngTemplateOutlet]=\"treeItem\"\n [ngTemplateOutletContext]=\"{node: rootNode, deep: 0}\"\n ></ng-template>\n </ul>\n\n <ng-template #treeItem let-node=\"node\" let-deep=\"deep\">\n <li\n class=\"list-group-item py-1 px-2 d-flex align-items-center\"\n [class.list-group-item-secondary]=\"node === selectedNode\"\n (click)=\"selectNode(node)\"\n style=\"cursor: pointer\"\n >\n <div class=\"mx-3\" *ngFor=\"let i of count(deep)\"></div>\n <div\n (click)=\"switchExpandNode(node);$event.stopPropagation();\"\n class=\"mr-2\"\n [ngClass]=\"node.ChildNodes.length === 0 ? iconFolderEmpty: (!node.IsExpanded && node.ChildNodes.length > 0 ? iconFolderCollabsed : (node.IsExpanded && node.ChildNodes.length > 0 ? iconFolderOpen : ''))\"\n ></div>\n <ng-container *ngIf=\"!node.IsEditMode\">\n <div class=\"flex-grow-1\">{{ node.Name }}</div>\n </ng-container>\n <ng-container *ngIf=\"node.IsEditMode\">\n <div class=\"flex-grow-1\" ngForm>\n <input\n name=\"editFolder\"\n class=\"form-control form-control-sm\"\n [ngModel]=\"node.Name\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n (ngModelChange)=\"renameNode(node, $event)\"\n (keydown.enter)=\"$event.target.blur();false;\"\n (blur)=\"renameNode(node, null)\"\n (click)=\"$event.stopPropagation()\"\n />\n </div>\n </ng-container>\n <div class=\"flex-shrink-0\">\n <a\n *ngIf=\"node.Path !== '/' && allowfolderrename\"\n class=\"btn btn-sm btn-link text-secondary\"\n (click)=\"editNode(node);$event.stopPropagation();\"\n >\n <i [class]=\"iconEdit\"></i>\n </a>\n <sac-contextmenu cssclass=\"d-inline-block\">\n <sac-contextmenubutton\n *ngIf=\"allowfoldercreate\"\n text=\"{{ lngResourceService.GetString(validationKeyService.FilebrowserButtonNewFolder) | async }}\"\n [icon]=\"iconFolderNew\"\n (clicked)=\"newNode(node)\"\n ></sac-contextmenubutton>\n <sac-contextmenubutton\n *ngIf=\"node.Path !== '/' && allowfolderdelete\"\n text=\"{{ lngResourceService.GetString(validationKeyService.FilebrowserButtonDelete) | async }}\"\n [icon]=\"iconDelete\"\n (clicked)=\"deleteNode(node)\"\n ></sac-contextmenubutton>\n <sac-contextmenusplitter\n *ngIf=\"allowfoldercreate || (node.Path !== '/' && allowfolderdelete)\"\n ></sac-contextmenusplitter>\n <sac-contextmenubutton\n text=\"{{ lngResourceService.GetString(validationKeyService.FilebrowserButtonRefresh) | async }}\"\n [icon]=\"iconRefresh\"\n (clicked)=\"refreshNode(node)\"\n ></sac-contextmenubutton>\n </sac-contextmenu>\n </div>\n </li>\n\n <ng-container *ngIf=\"node.IsExpanded\">\n <ng-template\n *ngFor=\"let child of node.ChildNodes\"\n [ngTemplateOutlet]=\"treeItem\"\n [ngTemplateOutletContext]=\"{node: child, deep: deep + 1}\"\n ></ng-template>\n </ng-container>\n </ng-template>\n </div>\n <div class=\"col-12 col-md-7 col-lg-8\">\n <ng-container *ngIf=\"selectedNode && selectedNode.Files\">\n <div *ngIf=\"allowfileupload\" ngForm>\n <sac-dropzonemultiple\n [disablelabel]=\"true\"\n [endpoint]=\"apiurl + '/uploadregister'\"\n name=\"upload\"\n uploadheight=\"5rem\"\n [ngModel]=\"uploads\"\n (ngModelChange)=\"uploadComplete(selectedNode,$event)\"\n [allowedtypes]=\"allowedtypes\"\n >{{\n lngResourceService.GetString(validationKeyService.FilebrowserButtonUpload)\n | async }}</sac-dropzonemultiple\n >\n </div>\n <div class=\"table-responsive\">\n <table class=\"table table-striped table-hover align-middle\">\n <thead>\n <th>\n {{\n lngResourceService.GetString(validationKeyService.FilebrowserGridFilename)\n | async }}\n </th>\n <th>\n {{\n lngResourceService.GetString(validationKeyService.FilebrowserGridSize)\n | async }}\n </th>\n <th style=\"width: 80px\"></th>\n </thead>\n <tbody>\n <ng-container *ngIf=\"selectedNode.Files.length === 0\">\n <tr>\n <td colspan=\"3\">\n {{\n lngResourceService.GetString(validationKeyService.FilebrowserGridNoFiles)\n | async }}\n </td>\n </tr>\n </ng-container>\n <ng-container *ngIf=\"selectedNode.Files.length > 0\">\n <tr\n *ngFor=\"let item of selectedNode.Files\"\n (click)=\"selectFile(item)\"\n [class.table-primary]=\"selectedFileItem === item\"\n >\n <td [class.p-2]=\"item.IsEditMode\">\n <ng-container *ngIf=\"!item.IsEditMode\">\n {{ item.Filename }}\n </ng-container>\n <ng-container *ngIf=\"item.IsEditMode\">\n <div>\n <input\n name=\"editFolder\"\n class=\"form-control form-control-sm\"\n [ngModel]=\"item.Filename\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n (ngModelChange)=\"renameFile(item, $event)\"\n (keydown.enter)=\"$event.target.blur();false\"\n (blur)=\"renameFile(item, null)\"\n (click)=\"$event.stopPropagation();\"\n />\n </div>\n </ng-container>\n </td>\n <td>{{ item.Size}}</td>\n <td class=\"p-2\">\n <div class=\"btn-toolbar\" role=\"toolbar\">\n <div class=\"btn-group ml-auto\" role=\"group\">\n <a\n *ngIf=\"allowfilerename\"\n class=\"btn btn-sm btn-link text-secondary\"\n (click)=\"editFile(item);$event.stopPropagation();\"\n ><i [class]=\"iconEdit\"></i\n ></a>\n </div>\n <div class=\"btn-group\" role=\"group\">\n <a\n *ngIf=\"allowfiledelete\"\n class=\"btn btn-sm btn-link text-secondary\"\n (click)=\"deleteFile(item);$event.stopPropagation();\"\n ><i [class]=\"iconDelete\"></i\n ></a>\n </div>\n </div>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n </ng-container>\n </div>\n</div>\n" }]
108
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i0.Injector }, { type: i2.ServiceConfirm }]; }, propDecorators: { uploadComponent: [{
109
+ type: ViewChild,
110
+ args: [SacDropzoneMultipleComponent, { static: false }]
111
+ }] } });
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1ib290c3RyYXA0L3NyYy9jb21wb25lbnRzL2Jyb3dzZXIvYnJvd3Nlci50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1ib290c3RyYXA0L3NyYy9jb21wb25lbnRzL2Jyb3dzZXIvYnJvd3Nlci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQVksU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFHTCxvQkFBb0IsR0FDckIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDeEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7Ozs7O0FBRXRGOztHQUVHO0FBTUgsTUFBTSxPQUFPLG1CQUFvQixTQUFRLG9CQUFvQjtJQVMzRCx3QkFBd0I7SUFFeEIsdUJBQXVCO0lBRXZCOzs7OztPQUtHO0lBQ0gsWUFDRSxVQUFzQixFQUN0QixRQUFrQixFQUNWLGNBQThCO1FBRXRDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFGcEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO0lBR3hDLENBQUM7SUFFRCwwQkFBMEI7SUFFMUIseUJBQXlCO0lBRXpCOzs7O09BSUc7SUFDSSxpQkFBaUIsQ0FBQyxJQUFrQjtRQUN6QyxPQUFPLElBQUksVUFBVSxDQUFVLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDMUMsUUFBUSxDQUFDO2dCQUNQLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUN0QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsdUJBQXVCLENBQ2xEO2dCQUNELE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUN4QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0NBQWdDLENBQzNEO2FBQ0YsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNwQixJQUFJLENBQUMsY0FBYztxQkFDaEIsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztxQkFDeEMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ3BCLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRTt3QkFDcEIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDckI7eUJBQU07d0JBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDdEI7b0JBQ0QsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN0QixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGlCQUFpQixDQUFDLElBQWtCO1FBQ3pDLE9BQU8sSUFBSSxVQUFVLENBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUMxQyxRQUFRLENBQUM7Z0JBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQ3RDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FDbEQ7Z0JBQ0QsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQ3hDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQ0FBa0MsQ0FDN0Q7YUFDRixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxjQUFjO3FCQUNoQixjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO3FCQUN4QyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDcEIsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFO3dCQUNwQixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNyQjt5QkFBTTt3QkFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUN0QjtvQkFDRCxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3RCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLE1BQWM7UUFDekIsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksaUJBQWlCLENBQUMsUUFBZ0I7UUFDdkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUM1QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQ3JDLENBQUM7UUFFRixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7O2dIQTlHVSxtQkFBbUI7b0dBQW5CLG1CQUFtQiwwQ0FGbkIsQ0FBQyxjQUFjLENBQUMsMkVBUWhCLDRCQUE0Qix1RUN6QnpDLG12T0FnTEE7MkZEN0phLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUIsYUFFaEIsQ0FBQyxjQUFjLENBQUM7cUpBU25CLGVBQWU7c0JBRHRCLFNBQVM7dUJBQUMsNEJBQTRCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSUJyb3dzZXJGaWxlLFxuICBJQnJvd3Nlck5vZGUsXG4gIFNhY0ZpbGVCcm93c2VyQ29tbW9uLFxufSBmcm9tICdAc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NhYy1jb21tb24nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNlcnZpY2VDb25maXJtIH0gZnJvbSAnLi4vLi4vY29udHJvbHMvY29uZmlybS9jb25maXJtLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2FjRHJvcHpvbmVNdWx0aXBsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbnRyb2xzL3VwbG9hZC9kcm9wem9uZW11bHRpcGxlJztcblxuLyoqXG4gKiBTZXJ2ZXIgRmlsZSBCcm93c2VyIEtvbXBvbmVudGVcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2FjLWZpbGVicm93c2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jyb3dzZXIuaHRtbCcsXG4gIHByb3ZpZGVyczogW1NlcnZpY2VDb25maXJtXSxcbn0pXG5leHBvcnQgY2xhc3MgU2FjQnJvd3NlckNvbXBvbmVudCBleHRlbmRzIFNhY0ZpbGVCcm93c2VyQ29tbW9uIHtcbiAgLy8gI3JlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgLyoqXG4gICAqIFJlZmVyZW56IGF1ZiBVcGxvYWQgQ29tcG9uZW50XG4gICAqL1xuICBAVmlld0NoaWxkKFNhY0Ryb3B6b25lTXVsdGlwbGVDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwcml2YXRlIHVwbG9hZENvbXBvbmVudDogU2FjRHJvcHpvbmVNdWx0aXBsZUNvbXBvbmVudDtcblxuICAvLyAjZW5kcmVnaW9uIFByb3BlcnRpZXNcblxuICAvLyAjcmVnaW9uIENvbnN0cnVjdG9yc1xuXG4gIC8qKlxuICAgKiBLb25zdHJ1a3RvclxuICAgKiBAcGFyYW0gaHR0cENsaWVudCBIVFRQIENsaWVudFxuICAgKiBAcGFyYW0gaW5qZWN0b3IgQW5ndWxhciBEZXBlbmRlbmN5IEluamVjdGlvbiBTZXJ2aWNlXG4gICAqIEBwYXJhbSBjb25maXJtU2VydmljZSBDb25maXJtIFNlcnZpY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgY29uZmlybVNlcnZpY2U6IFNlcnZpY2VDb25maXJtXG4gICkge1xuICAgIHN1cGVyKGh0dHBDbGllbnQsIGluamVjdG9yKTtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb24gQ29uc3RydWN0b3JzXG5cbiAgLy8gI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gIC8qKlxuICAgKiBDb25maXJtIEFjdGlvbiB3ZW5uIGVpbiBGaWxlIGdlbMO2c2NodCB3ZXJkZW4gc29sbFxuICAgKiBAcGFyYW0gZmlsZSBGaWxlIGRhcyBnZWzDtnNjaHQgd2VyZGVuIHNvbGwuXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2IgRmlsZSBnZWzDtnNjaHQgd2VyZGVuIGthbm4uXG4gICAqL1xuICBwdWJsaWMgY29uZmlybURlbGV0ZUZpbGUoZmlsZTogSUJyb3dzZXJGaWxlKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGJvb2xlYW4+KChvYnNlcnZlcikgPT4ge1xuICAgICAgZm9ya0pvaW4oe1xuICAgICAgICB0aXRsZTogdGhpcy5sbmdSZXNvdXJjZVNlcnZpY2UuR2V0U3RyaW5nKFxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuRmlsZWJyb3dzZXJCdXR0b25EZWxldGVcbiAgICAgICAgKSxcbiAgICAgICAgbWVzc2FnZTogdGhpcy5sbmdSZXNvdXJjZVNlcnZpY2UuR2V0U3RyaW5nKFxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UuRmlsZWJyb3dzZXJDb25maXJtVGV4dERlbGV0ZUZpbGVcbiAgICAgICAgKSxcbiAgICAgIH0pLnN1YnNjcmliZSgodGV4dCkgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpcm1TZXJ2aWNlXG4gICAgICAgICAgLkNvbmZpcm1NZXNzYWdlKHRleHQudGl0bGUsIHRleHQubWVzc2FnZSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09ICd5ZXMnKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtIEFjdGlvbiB3ZW5uIGVpbiBPcmRuZXIgZ2Vsw7ZzY2h0IHdlcmRlbiBzb2xsXG4gICAqIEBwYXJhbSBub2RlIE9yZG5lciBkZXIgZ2Vsw7ZzY2h0IHdlcmRlbiBzb2xsXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2IgT3JkbmVyIGdlbMO2c2NodCBrYW5uLlxuICAgKi9cbiAgcHVibGljIGNvbmZpcm1EZWxldGVOb2RlKG5vZGU6IElCcm93c2VyTm9kZSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxib29sZWFuPigob2JzZXJ2ZXIpID0+IHtcbiAgICAgIGZvcmtKb2luKHtcbiAgICAgICAgdGl0bGU6IHRoaXMubG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZyhcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlLkZpbGVicm93c2VyQnV0dG9uRGVsZXRlXG4gICAgICAgICksXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMubG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZyhcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlLkZpbGVicm93c2VyQ29uZmlybVRleHREZWxldGVGb2xkZXJcbiAgICAgICAgKSxcbiAgICAgIH0pLnN1YnNjcmliZSgodGV4dCkgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpcm1TZXJ2aWNlXG4gICAgICAgICAgLkNvbmZpcm1NZXNzYWdlKHRleHQudGl0bGUsIHRleHQubWVzc2FnZSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09ICd5ZXMnKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFcnpldWd0IGVpbiBBcnJheSB2b24gZWluZXIgYmVzdGltbXRlbiBncsO2c3NlXG4gICAqIEBwYXJhbSBhbnphaGwgR3LDtnNzZSBkZXMgQXJyYXlcbiAgICogQHJldHVybnMgQXJyYXlcbiAgICovXG4gIHB1YmxpYyBjb3VudChhbnphaGw6IG51bWJlcik6IEFycmF5PHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IEFycmF5KGFuemFobCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kZSB3aXJkIGF1ZmdlcnVmZW4sIHdlbm4gZWluZSBEYXRlaSB2ZXJzY2hvYmVuIHdpcmRcbiAgICogQHBhcmFtIHVwbG9hZGlkIFVwbG9hZCBJRFxuICAgKi9cbiAgcHVibGljIHVwbG9hZGVkRmlsZU1vdmVkKHVwbG9hZGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy51cGxvYWRDb21wb25lbnQudXBsb2Fkcy5maW5kKFxuICAgICAgKGl0bSkgPT4gaXRtLmRvY3VtZW50aWQgPT09IHVwbG9hZGlkXG4gICAgKTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICB0aGlzLnVwbG9hZENvbXBvbmVudC5jYW5jZWwoaXRlbS51cGxvYWRJZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgTWV0aG9kc1xufVxuIiwiPGRpdiBjbGFzcz1cInJvd1wiPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC01IGNvbC1sZy00XCI+XG4gICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJlZUl0ZW1cIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie25vZGU6IHJvb3ROb2RlLCBkZWVwOiAwfVwiXG4gICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L3VsPlxuXG4gICAgPG5nLXRlbXBsYXRlICN0cmVlSXRlbSBsZXQtbm9kZT1cIm5vZGVcIiBsZXQtZGVlcD1cImRlZXBcIj5cbiAgICAgIDxsaVxuICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBweS0xIHB4LTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgIFtjbGFzcy5saXN0LWdyb3VwLWl0ZW0tc2Vjb25kYXJ5XT1cIm5vZGUgPT09IHNlbGVjdGVkTm9kZVwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3ROb2RlKG5vZGUpXCJcbiAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXgtM1wiICpuZ0Zvcj1cImxldCBpIG9mIGNvdW50KGRlZXApXCI+PC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAoY2xpY2spPVwic3dpdGNoRXhwYW5kTm9kZShub2RlKTskZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCJcbiAgICAgICAgICBjbGFzcz1cIm1yLTJcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIm5vZGUuQ2hpbGROb2Rlcy5sZW5ndGggPT09IDAgPyBpY29uRm9sZGVyRW1wdHk6ICghbm9kZS5Jc0V4cGFuZGVkICYmIG5vZGUuQ2hpbGROb2Rlcy5sZW5ndGggPiAwID8gaWNvbkZvbGRlckNvbGxhYnNlZCA6IChub2RlLklzRXhwYW5kZWQgJiYgbm9kZS5DaGlsZE5vZGVzLmxlbmd0aCA+IDAgPyBpY29uRm9sZGVyT3BlbiA6ICcnKSlcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbm9kZS5Jc0VkaXRNb2RlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+e3sgbm9kZS5OYW1lIH19PC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZS5Jc0VkaXRNb2RlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgbmdGb3JtPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG5hbWU9XCJlZGl0Rm9sZGVyXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwibm9kZS5OYW1lXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInt1cGRhdGVPbjogJ2JsdXInfVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJlbmFtZU5vZGUobm9kZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiRldmVudC50YXJnZXQuYmx1cigpO2ZhbHNlO1wiXG4gICAgICAgICAgICAgIChibHVyKT1cInJlbmFtZU5vZGUobm9kZSwgbnVsbClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICAqbmdJZj1cIm5vZGUuUGF0aCAhPT0gJy8nICYmIGFsbG93Zm9sZGVycmVuYW1lXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGluayB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZWRpdE5vZGUobm9kZSk7JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgW2NsYXNzXT1cImljb25FZGl0XCI+PC9pPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8c2FjLWNvbnRleHRtZW51IGNzc2NsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIj5cbiAgICAgICAgICAgIDxzYWMtY29udGV4dG1lbnVidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJhbGxvd2ZvbGRlcmNyZWF0ZVwiXG4gICAgICAgICAgICAgIHRleHQ9XCJ7eyBsbmdSZXNvdXJjZVNlcnZpY2UuR2V0U3RyaW5nKHZhbGlkYXRpb25LZXlTZXJ2aWNlLkZpbGVicm93c2VyQnV0dG9uTmV3Rm9sZGVyKSB8IGFzeW5jIH19XCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiaWNvbkZvbGRlck5ld1wiXG4gICAgICAgICAgICAgIChjbGlja2VkKT1cIm5ld05vZGUobm9kZSlcIlxuICAgICAgICAgICAgPjwvc2FjLWNvbnRleHRtZW51YnV0dG9uPlxuICAgICAgICAgICAgPHNhYy1jb250ZXh0bWVudWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUuUGF0aCAhPT0gJy8nICYmIGFsbG93Zm9sZGVyZGVsZXRlXCJcbiAgICAgICAgICAgICAgdGV4dD1cInt7IGxuZ1Jlc291cmNlU2VydmljZS5HZXRTdHJpbmcodmFsaWRhdGlvbktleVNlcnZpY2UuRmlsZWJyb3dzZXJCdXR0b25EZWxldGUpIHwgYXN5bmMgfX1cIlxuICAgICAgICAgICAgICBbaWNvbl09XCJpY29uRGVsZXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiZGVsZXRlTm9kZShub2RlKVwiXG4gICAgICAgICAgICA+PC9zYWMtY29udGV4dG1lbnVidXR0b24+XG4gICAgICAgICAgICA8c2FjLWNvbnRleHRtZW51c3BsaXR0ZXJcbiAgICAgICAgICAgICAgKm5nSWY9XCJhbGxvd2ZvbGRlcmNyZWF0ZSB8fCAobm9kZS5QYXRoICE9PSAnLycgJiYgYWxsb3dmb2xkZXJkZWxldGUpXCJcbiAgICAgICAgICAgID48L3NhYy1jb250ZXh0bWVudXNwbGl0dGVyPlxuICAgICAgICAgICAgPHNhYy1jb250ZXh0bWVudWJ1dHRvblxuICAgICAgICAgICAgICB0ZXh0PVwie3sgbG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZyh2YWxpZGF0aW9uS2V5U2VydmljZS5GaWxlYnJvd3NlckJ1dHRvblJlZnJlc2gpIHwgYXN5bmMgfX1cIlxuICAgICAgICAgICAgICBbaWNvbl09XCJpY29uUmVmcmVzaFwiXG4gICAgICAgICAgICAgIChjbGlja2VkKT1cInJlZnJlc2hOb2RlKG5vZGUpXCJcbiAgICAgICAgICAgID48L3NhYy1jb250ZXh0bWVudWJ1dHRvbj5cbiAgICAgICAgICA8L3NhYy1jb250ZXh0bWVudT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZS5Jc0V4cGFuZGVkXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBub2RlLkNoaWxkTm9kZXNcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyZWVJdGVtXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie25vZGU6IGNoaWxkLCBkZWVwOiBkZWVwICsgMX1cIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC03IGNvbC1sZy04XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkTm9kZSAmJiBzZWxlY3RlZE5vZGUuRmlsZXNcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJhbGxvd2ZpbGV1cGxvYWRcIiBuZ0Zvcm0+XG4gICAgICAgIDxzYWMtZHJvcHpvbmVtdWx0aXBsZVxuICAgICAgICAgIFtkaXNhYmxlbGFiZWxdPVwidHJ1ZVwiXG4gICAgICAgICAgW2VuZHBvaW50XT1cImFwaXVybCArICcvdXBsb2FkcmVnaXN0ZXInXCJcbiAgICAgICAgICBuYW1lPVwidXBsb2FkXCJcbiAgICAgICAgICB1cGxvYWRoZWlnaHQ9XCI1cmVtXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJ1cGxvYWRzXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGxvYWRDb21wbGV0ZShzZWxlY3RlZE5vZGUsJGV2ZW50KVwiXG4gICAgICAgICAgW2FsbG93ZWR0eXBlc109XCJhbGxvd2VkdHlwZXNcIlxuICAgICAgICAgID57e1xuICAgICAgICAgIGxuZ1Jlc291cmNlU2VydmljZS5HZXRTdHJpbmcodmFsaWRhdGlvbktleVNlcnZpY2UuRmlsZWJyb3dzZXJCdXR0b25VcGxvYWQpXG4gICAgICAgICAgfCBhc3luYyB9fTwvc2FjLWRyb3B6b25lbXVsdGlwbGVcbiAgICAgICAgPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIGFsaWduLW1pZGRsZVwiPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgbG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZyh2YWxpZGF0aW9uS2V5U2VydmljZS5GaWxlYnJvd3NlckdyaWRGaWxlbmFtZSlcbiAgICAgICAgICAgICAgfCBhc3luYyB9fVxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgbG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZyh2YWxpZGF0aW9uS2V5U2VydmljZS5GaWxlYnJvd3NlckdyaWRTaXplKVxuICAgICAgICAgICAgICB8IGFzeW5jIH19XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDgwcHhcIj48L3RoPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkTm9kZS5GaWxlcy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgIGxuZ1Jlc291cmNlU2VydmljZS5HZXRTdHJpbmcodmFsaWRhdGlvbktleVNlcnZpY2UuRmlsZWJyb3dzZXJHcmlkTm9GaWxlcylcbiAgICAgICAgICAgICAgICAgIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWROb2RlLkZpbGVzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWROb2RlLkZpbGVzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RmlsZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnRhYmxlLXByaW1hcnldPVwic2VsZWN0ZWRGaWxlSXRlbSA9PT0gaXRlbVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dGQgW2NsYXNzLnAtMl09XCJpdGVtLklzRWRpdE1vZGVcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5Jc0VkaXRNb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uRmlsZW5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uSXNFZGl0TW9kZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImVkaXRGb2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIml0ZW0uRmlsZW5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInt1cGRhdGVPbjogJ2JsdXInfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJyZW5hbWVGaWxlKGl0ZW0sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnRhcmdldC5ibHVyKCk7ZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwicmVuYW1lRmlsZShpdGVtLCBudWxsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZD57eyBpdGVtLlNpemV9fTwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicC0yXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIG1sLWF1dG9cIiByb2xlPVwiZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbGxvd2ZpbGVyZW5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saW5rIHRleHQtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0RmlsZShpdGVtKTskZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48aSBbY2xhc3NdPVwiaWNvbkVkaXRcIj48L2lcbiAgICAgICAgICAgICAgICAgICAgICA+PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFsbG93ZmlsZWRlbGV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpbmsgdGV4dC1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUZpbGUoaXRlbSk7JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PGkgW2NsYXNzXT1cImljb25EZWxldGVcIj48L2lcbiAgICAgICAgICAgICAgICAgICAgICA+PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=