@ardium-ui/ui 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. package/README.md +25 -0
  2. package/esm2022/ardium-ui-ui.mjs +5 -0
  3. package/esm2022/lib/_internal/boolean-component.mjs +108 -0
  4. package/esm2022/lib/_internal/clear-button/clear-button.component.mjs +12 -0
  5. package/esm2022/lib/_internal/clear-button/clear-button.module.mjs +18 -0
  6. package/esm2022/lib/_internal/disablable-component.mjs +44 -0
  7. package/esm2022/lib/_internal/focusable-component.mjs +91 -0
  8. package/esm2022/lib/_internal/item-storages/dropdown-item-storage.mjs +436 -0
  9. package/esm2022/lib/_internal/item-storages/simple-item-storage.mjs +349 -0
  10. package/esm2022/lib/_internal/item-storages/simplest-item-storage.mjs +155 -0
  11. package/esm2022/lib/_internal/models/pagination.model.mjs +124 -0
  12. package/esm2022/lib/_internal/ngmodel-component.mjs +42 -0
  13. package/esm2022/lib/_internal/queue.mjs +59 -0
  14. package/esm2022/lib/_internal/selectable-list-component.mjs +304 -0
  15. package/esm2022/lib/badge/badge.directive.mjs +123 -0
  16. package/esm2022/lib/badge/badge.module.mjs +18 -0
  17. package/esm2022/lib/badge/badge.types.mjs +16 -0
  18. package/esm2022/lib/buttons/_button-base.mjs +45 -0
  19. package/esm2022/lib/buttons/button/button.component.mjs +49 -0
  20. package/esm2022/lib/buttons/button/button.module.mjs +18 -0
  21. package/esm2022/lib/buttons/fab/fab.component.mjs +40 -0
  22. package/esm2022/lib/buttons/fab/fab.module.mjs +18 -0
  23. package/esm2022/lib/buttons/general-button.types.mjs +55 -0
  24. package/esm2022/lib/buttons/icon-button/icon-button.component.mjs +37 -0
  25. package/esm2022/lib/buttons/icon-button/icon-button.module.mjs +18 -0
  26. package/esm2022/lib/calendar/calendar.component.mjs +982 -0
  27. package/esm2022/lib/calendar/calendar.directives.mjs +107 -0
  28. package/esm2022/lib/calendar/calendar.helpers.mjs +47 -0
  29. package/esm2022/lib/calendar/calendar.module.mjs +21 -0
  30. package/esm2022/lib/calendar/calendar.types.mjs +11 -0
  31. package/esm2022/lib/card/card.children.mjs +97 -0
  32. package/esm2022/lib/card/card.component.mjs +40 -0
  33. package/esm2022/lib/card/card.module.mjs +59 -0
  34. package/esm2022/lib/card/card.types.mjs +9 -0
  35. package/esm2022/lib/checkbox/checkbox.component.mjs +73 -0
  36. package/esm2022/lib/checkbox/checkbox.module.mjs +18 -0
  37. package/esm2022/lib/checkbox/checkbox.types.mjs +6 -0
  38. package/esm2022/lib/checkbox-list/checkbox-list.component.mjs +139 -0
  39. package/esm2022/lib/checkbox-list/checkbox-list.module.mjs +19 -0
  40. package/esm2022/lib/checkbox-list/checkbox-list.types.mjs +7 -0
  41. package/esm2022/lib/chip/chip.component.mjs +55 -0
  42. package/esm2022/lib/chip/chip.module.mjs +21 -0
  43. package/esm2022/lib/chip/deletable-chip/deletable-chip.component.mjs +80 -0
  44. package/esm2022/lib/chip/selectable-chip/selectable-chip.component.mjs +77 -0
  45. package/esm2022/lib/color/color-display/color-display.component.mjs +48 -0
  46. package/esm2022/lib/color/color-display/color-display.module.mjs +18 -0
  47. package/esm2022/lib/color/color-display/color-display.types.mjs +9 -0
  48. package/esm2022/lib/color/color-picker/color-picker.component.mjs +484 -0
  49. package/esm2022/lib/color/color-picker/color-picker.directives.mjs +55 -0
  50. package/esm2022/lib/color/color-picker/color-picker.module.mjs +43 -0
  51. package/esm2022/lib/color/color-picker/color-picker.types.mjs +11 -0
  52. package/esm2022/lib/dialog/dialog.component.mjs +167 -0
  53. package/esm2022/lib/dialog/dialog.directives.mjs +14 -0
  54. package/esm2022/lib/dialog/dialog.module.mjs +21 -0
  55. package/esm2022/lib/dialog/dialog.types.mjs +6 -0
  56. package/esm2022/lib/divider/divider.component.mjs +26 -0
  57. package/esm2022/lib/divider/divider.module.mjs +18 -0
  58. package/esm2022/lib/dropdown-panel/dropdown-panel.component.mjs +130 -0
  59. package/esm2022/lib/dropdown-panel/dropdown-panel.module.mjs +18 -0
  60. package/esm2022/lib/dropdown-panel/dropdown-panel.types.mjs +10 -0
  61. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.component.mjs +82 -0
  62. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.directives.mjs +42 -0
  63. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.module.mjs +58 -0
  64. package/esm2022/lib/file-inputs/file-input/file-input.component.mjs +153 -0
  65. package/esm2022/lib/file-inputs/file-input/file-input.directives.mjs +73 -0
  66. package/esm2022/lib/file-inputs/file-input/file-input.module.mjs +21 -0
  67. package/esm2022/lib/file-inputs/file-input-base.mjs +187 -0
  68. package/esm2022/lib/file-inputs/file-input-types.mjs +2 -0
  69. package/esm2022/lib/form-field-frame/form-field-frame.component.mjs +74 -0
  70. package/esm2022/lib/form-field-frame/form-field-frame.directives.mjs +25 -0
  71. package/esm2022/lib/form-field-frame/form-field-frame.module.mjs +19 -0
  72. package/esm2022/lib/icon/icon.component.mjs +85 -0
  73. package/esm2022/lib/icon/icon.module.mjs +19 -0
  74. package/esm2022/lib/icon/icon.pipe.mjs +18 -0
  75. package/esm2022/lib/inputs/color-input/color-input.component.mjs +421 -0
  76. package/esm2022/lib/inputs/color-input/color-input.directives.mjs +101 -0
  77. package/esm2022/lib/inputs/color-input/color-input.module.mjs +85 -0
  78. package/esm2022/lib/inputs/color-input/color-input.types.mjs +2 -0
  79. package/esm2022/lib/inputs/digit-input/digit-input.component.mjs +218 -0
  80. package/esm2022/lib/inputs/digit-input/digit-input.model.mjs +217 -0
  81. package/esm2022/lib/inputs/digit-input/digit-input.module.mjs +18 -0
  82. package/esm2022/lib/inputs/digit-input/digit-input.types.mjs +15 -0
  83. package/esm2022/lib/inputs/digit-input/digit-input.utils.mjs +8 -0
  84. package/esm2022/lib/inputs/hex-input/hex-input.component.mjs +234 -0
  85. package/esm2022/lib/inputs/hex-input/hex-input.directives.mjs +36 -0
  86. package/esm2022/lib/inputs/hex-input/hex-input.module.mjs +21 -0
  87. package/esm2022/lib/inputs/hex-input.model.mjs +106 -0
  88. package/esm2022/lib/inputs/input/input.component.mjs +344 -0
  89. package/esm2022/lib/inputs/input/input.directives.mjs +58 -0
  90. package/esm2022/lib/inputs/input/input.module.mjs +47 -0
  91. package/esm2022/lib/inputs/input-transformers.mjs +66 -0
  92. package/esm2022/lib/inputs/input-types.mjs +6 -0
  93. package/esm2022/lib/inputs/input-utils.mjs +205 -0
  94. package/esm2022/lib/inputs/number-input/number-input.component.mjs +289 -0
  95. package/esm2022/lib/inputs/number-input/number-input.directives.mjs +14 -0
  96. package/esm2022/lib/inputs/number-input/number-input.module.mjs +21 -0
  97. package/esm2022/lib/inputs/password-input/password-input.component.mjs +222 -0
  98. package/esm2022/lib/inputs/password-input/password-input.directives.mjs +49 -0
  99. package/esm2022/lib/inputs/password-input/password-input.module.mjs +41 -0
  100. package/esm2022/lib/inputs/password-input/password-input.types.mjs +2 -0
  101. package/esm2022/lib/inputs/simple-input/simple-input.component.mjs +219 -0
  102. package/esm2022/lib/inputs/simple-input/simple-input.directives.mjs +36 -0
  103. package/esm2022/lib/inputs/simple-input/simple-input.module.mjs +37 -0
  104. package/esm2022/lib/kbd/kbd.component.mjs +42 -0
  105. package/esm2022/lib/kbd/kbd.module.mjs +19 -0
  106. package/esm2022/lib/kbd/kbd.pipe.mjs +17 -0
  107. package/esm2022/lib/kbd-shortcut/kbd-shortcut.component.mjs +55 -0
  108. package/esm2022/lib/kbd-shortcut/kbd-shortcut.module.mjs +19 -0
  109. package/esm2022/lib/modal/modal.component.mjs +120 -0
  110. package/esm2022/lib/modal/modal.module.mjs +21 -0
  111. package/esm2022/lib/option/option.component.mjs +77 -0
  112. package/esm2022/lib/option/option.module.mjs +18 -0
  113. package/esm2022/lib/progress-bar/progress-bar.component.mjs +95 -0
  114. package/esm2022/lib/progress-bar/progress-bar.directive.mjs +14 -0
  115. package/esm2022/lib/progress-bar/progress-bar.module.mjs +19 -0
  116. package/esm2022/lib/progress-bar/progress-bar.types.mjs +19 -0
  117. package/esm2022/lib/progress-circle/progress-circle.component.mjs +94 -0
  118. package/esm2022/lib/progress-circle/progress-circle.directive.mjs +14 -0
  119. package/esm2022/lib/progress-circle/progress-circle.module.mjs +19 -0
  120. package/esm2022/lib/progress-circle/progress-circle.types.mjs +10 -0
  121. package/esm2022/lib/radio/radio/radio.component.mjs +53 -0
  122. package/esm2022/lib/radio/radio-group.component.mjs +207 -0
  123. package/esm2022/lib/radio/radio.module.mjs +19 -0
  124. package/esm2022/lib/search-functions.mjs +64 -0
  125. package/esm2022/lib/segment/segment.component.mjs +168 -0
  126. package/esm2022/lib/segment/segment.directives.mjs +14 -0
  127. package/esm2022/lib/segment/segment.module.mjs +19 -0
  128. package/esm2022/lib/segment/segment.types.mjs +12 -0
  129. package/esm2022/lib/select/select.component.mjs +1160 -0
  130. package/esm2022/lib/select/select.directive.mjs +171 -0
  131. package/esm2022/lib/select/select.module.mjs +112 -0
  132. package/esm2022/lib/select/select.types.mjs +2 -0
  133. package/esm2022/lib/slide-toggle/slide-toggle.component.mjs +46 -0
  134. package/esm2022/lib/slide-toggle/slide-toggle.module.mjs +18 -0
  135. package/esm2022/lib/slider/abstract-slider.mjs +330 -0
  136. package/esm2022/lib/slider/range-slider/range-slider.component.mjs +143 -0
  137. package/esm2022/lib/slider/range-slider/range-slider.module.mjs +18 -0
  138. package/esm2022/lib/slider/slider.component.mjs +93 -0
  139. package/esm2022/lib/slider/slider.directive.mjs +16 -0
  140. package/esm2022/lib/slider/slider.module.mjs +20 -0
  141. package/esm2022/lib/slider/slider.types.mjs +10 -0
  142. package/esm2022/lib/snackbar/index.mjs +5 -0
  143. package/esm2022/lib/snackbar/snackbar-ref.mjs +51 -0
  144. package/esm2022/lib/snackbar/snackbar.component.mjs +48 -0
  145. package/esm2022/lib/snackbar/snackbar.service.mjs +227 -0
  146. package/esm2022/lib/snackbar/snackbar.token.mjs +20 -0
  147. package/esm2022/lib/snackbar/snackbar.types.mjs +25 -0
  148. package/esm2022/lib/spinner/spinner.component.mjs +22 -0
  149. package/esm2022/lib/spinner/spinner.module.mjs +18 -0
  150. package/esm2022/lib/star/star-button/star-button.component.mjs +53 -0
  151. package/esm2022/lib/star/star-button/star-button.module.mjs +19 -0
  152. package/esm2022/lib/star/star-display/star-display.component.mjs +66 -0
  153. package/esm2022/lib/star/star-display/star-display.module.mjs +19 -0
  154. package/esm2022/lib/star/star-input/star-input.component.mjs +221 -0
  155. package/esm2022/lib/star/star-input/star-input.module.mjs +19 -0
  156. package/esm2022/lib/star/star.component.mjs +28 -0
  157. package/esm2022/lib/star/star.module.mjs +18 -0
  158. package/esm2022/lib/star/star.types.mjs +23 -0
  159. package/esm2022/lib/statebox/statebox.component.mjs +158 -0
  160. package/esm2022/lib/statebox/statebox.module.mjs +18 -0
  161. package/esm2022/lib/statebox/statebox.types.mjs +2 -0
  162. package/esm2022/lib/table/table-item-storage.mjs +560 -0
  163. package/esm2022/lib/table/table.component.mjs +468 -0
  164. package/esm2022/lib/table/table.directives.mjs +64 -0
  165. package/esm2022/lib/table/table.module.mjs +46 -0
  166. package/esm2022/lib/table/table.types.mjs +30 -0
  167. package/esm2022/lib/table/utils.mjs +18 -0
  168. package/esm2022/lib/table-from-csv/table-from-csv.component.mjs +64 -0
  169. package/esm2022/lib/table-from-csv/table-from-csv.module.mjs +19 -0
  170. package/esm2022/lib/table-pagination/table-pagination.component.mjs +172 -0
  171. package/esm2022/lib/table-pagination/table-pagination.module.mjs +21 -0
  172. package/esm2022/lib/table-pagination/table-pagination.types.mjs +7 -0
  173. package/esm2022/lib/types/alignment.types.mjs +10 -0
  174. package/esm2022/lib/types/colors.types.mjs +43 -0
  175. package/esm2022/lib/types/item-storage.types.mjs +6 -0
  176. package/esm2022/lib/types/theming.types.mjs +48 -0
  177. package/esm2022/lib/types/utility.types.mjs +5 -0
  178. package/esm2022/public-api.mjs +194 -0
  179. package/fesm2022/ardium-ui-ui.mjs +14316 -0
  180. package/fesm2022/ardium-ui-ui.mjs.map +1 -0
  181. package/index.d.ts +5 -0
  182. package/lib/_internal/boolean-component.d.ts +50 -0
  183. package/lib/_internal/clear-button/clear-button.component.d.ts +6 -0
  184. package/lib/_internal/clear-button/clear-button.module.d.ts +8 -0
  185. package/lib/_internal/disablable-component.d.ts +11 -0
  186. package/lib/_internal/focusable-component.d.ts +52 -0
  187. package/lib/_internal/item-storages/dropdown-item-storage.d.ts +87 -0
  188. package/lib/_internal/item-storages/simple-item-storage.d.ts +159 -0
  189. package/lib/_internal/item-storages/simplest-item-storage.d.ts +70 -0
  190. package/lib/_internal/models/pagination.model.d.ts +53 -0
  191. package/lib/_internal/ngmodel-component.d.ts +42 -0
  192. package/lib/_internal/queue.d.ts +21 -0
  193. package/lib/_internal/selectable-list-component.d.ts +71 -0
  194. package/lib/badge/badge.directive.d.ts +31 -0
  195. package/lib/badge/badge.module.d.ts +8 -0
  196. package/lib/badge/badge.types.d.ts +17 -0
  197. package/lib/buttons/_button-base.d.ts +18 -0
  198. package/lib/buttons/button/button.component.d.ts +15 -0
  199. package/lib/buttons/button/button.module.d.ts +8 -0
  200. package/lib/buttons/fab/fab.component.d.ts +12 -0
  201. package/lib/buttons/fab/fab.module.d.ts +8 -0
  202. package/lib/buttons/general-button.types.d.ts +57 -0
  203. package/lib/buttons/icon-button/icon-button.component.d.ts +13 -0
  204. package/lib/buttons/icon-button/icon-button.module.d.ts +8 -0
  205. package/lib/calendar/calendar.component.d.ts +155 -0
  206. package/lib/calendar/calendar.directives.d.ts +51 -0
  207. package/lib/calendar/calendar.helpers.d.ts +15 -0
  208. package/lib/calendar/calendar.module.d.ts +11 -0
  209. package/lib/calendar/calendar.types.d.ts +80 -0
  210. package/lib/card/card.children.d.ts +43 -0
  211. package/lib/card/card.component.d.ts +13 -0
  212. package/lib/card/card.module.d.ts +9 -0
  213. package/lib/card/card.types.d.ts +10 -0
  214. package/lib/checkbox/checkbox.component.d.ts +21 -0
  215. package/lib/checkbox/checkbox.module.d.ts +8 -0
  216. package/lib/checkbox/checkbox.types.d.ts +6 -0
  217. package/lib/checkbox-list/checkbox-list.component.d.ts +50 -0
  218. package/lib/checkbox-list/checkbox-list.module.d.ts +9 -0
  219. package/lib/checkbox-list/checkbox-list.types.d.ts +7 -0
  220. package/lib/chip/chip.component.d.ts +18 -0
  221. package/lib/chip/chip.module.d.ts +11 -0
  222. package/lib/chip/deletable-chip/deletable-chip.component.d.ts +24 -0
  223. package/lib/chip/selectable-chip/selectable-chip.component.d.ts +24 -0
  224. package/lib/color/color-display/color-display.component.d.ts +17 -0
  225. package/lib/color/color-display/color-display.module.d.ts +8 -0
  226. package/lib/color/color-display/color-display.types.d.ts +9 -0
  227. package/lib/color/color-picker/color-picker.component.d.ts +125 -0
  228. package/lib/color/color-picker/color-picker.directives.d.ts +27 -0
  229. package/lib/color/color-picker/color-picker.module.d.ts +13 -0
  230. package/lib/color/color-picker/color-picker.types.d.ts +21 -0
  231. package/lib/dialog/dialog.component.d.ts +44 -0
  232. package/lib/dialog/dialog.directives.d.ts +9 -0
  233. package/lib/dialog/dialog.module.d.ts +11 -0
  234. package/lib/dialog/dialog.types.d.ts +28 -0
  235. package/lib/divider/divider.component.d.ts +8 -0
  236. package/lib/divider/divider.module.d.ts +8 -0
  237. package/lib/dropdown-panel/dropdown-panel.component.d.ts +37 -0
  238. package/lib/dropdown-panel/dropdown-panel.module.d.ts +8 -0
  239. package/lib/dropdown-panel/dropdown-panel.types.d.ts +12 -0
  240. package/lib/file-inputs/file-drop-area/file-drop-area.component.d.ts +22 -0
  241. package/lib/file-inputs/file-drop-area/file-drop-area.directives.d.ts +21 -0
  242. package/lib/file-inputs/file-drop-area/file-drop-area.module.d.ts +12 -0
  243. package/lib/file-inputs/file-input/file-input.component.d.ts +41 -0
  244. package/lib/file-inputs/file-input/file-input.directives.d.ts +39 -0
  245. package/lib/file-inputs/file-input/file-input.module.d.ts +11 -0
  246. package/lib/file-inputs/file-input-base.d.ts +43 -0
  247. package/lib/file-inputs/file-input-types.d.ts +10 -0
  248. package/lib/form-field-frame/form-field-frame.component.d.ts +32 -0
  249. package/lib/form-field-frame/form-field-frame.directives.d.ts +14 -0
  250. package/lib/form-field-frame/form-field-frame.module.d.ts +9 -0
  251. package/lib/icon/icon.component.d.ts +32 -0
  252. package/lib/icon/icon.module.d.ts +9 -0
  253. package/lib/icon/icon.pipe.d.ts +7 -0
  254. package/lib/inputs/color-input/color-input.component.d.ts +147 -0
  255. package/lib/inputs/color-input/color-input.directives.d.ts +52 -0
  256. package/lib/inputs/color-input/color-input.module.d.ts +16 -0
  257. package/lib/inputs/color-input/color-input.types.d.ts +5 -0
  258. package/lib/inputs/digit-input/digit-input.component.d.ts +50 -0
  259. package/lib/inputs/digit-input/digit-input.model.d.ts +26 -0
  260. package/lib/inputs/digit-input/digit-input.module.d.ts +8 -0
  261. package/lib/inputs/digit-input/digit-input.types.d.ts +27 -0
  262. package/lib/inputs/digit-input/digit-input.utils.d.ts +17 -0
  263. package/lib/inputs/hex-input/hex-input.component.d.ts +60 -0
  264. package/lib/inputs/hex-input/hex-input.directives.d.ts +20 -0
  265. package/lib/inputs/hex-input/hex-input.module.d.ts +11 -0
  266. package/lib/inputs/hex-input.model.d.ts +27 -0
  267. package/lib/inputs/input/input.component.d.ts +79 -0
  268. package/lib/inputs/input/input.directives.d.ts +33 -0
  269. package/lib/inputs/input/input.module.d.ts +13 -0
  270. package/lib/inputs/input-transformers.d.ts +24 -0
  271. package/lib/inputs/input-types.d.ts +6 -0
  272. package/lib/inputs/input-utils.d.ts +58 -0
  273. package/lib/inputs/number-input/number-input.component.d.ts +70 -0
  274. package/lib/inputs/number-input/number-input.directives.d.ts +8 -0
  275. package/lib/inputs/number-input/number-input.module.d.ts +11 -0
  276. package/lib/inputs/password-input/password-input.component.d.ts +54 -0
  277. package/lib/inputs/password-input/password-input.directives.d.ts +27 -0
  278. package/lib/inputs/password-input/password-input.module.d.ts +11 -0
  279. package/lib/inputs/password-input/password-input.types.d.ts +3 -0
  280. package/lib/inputs/simple-input/simple-input.component.d.ts +58 -0
  281. package/lib/inputs/simple-input/simple-input.directives.d.ts +20 -0
  282. package/lib/inputs/simple-input/simple-input.module.d.ts +11 -0
  283. package/lib/kbd/kbd.component.d.ts +15 -0
  284. package/lib/kbd/kbd.module.d.ts +9 -0
  285. package/lib/kbd/kbd.pipe.d.ts +7 -0
  286. package/lib/kbd-shortcut/kbd-shortcut.component.d.ts +18 -0
  287. package/lib/kbd-shortcut/kbd-shortcut.module.d.ts +9 -0
  288. package/lib/modal/modal.component.d.ts +36 -0
  289. package/lib/modal/modal.module.d.ts +11 -0
  290. package/lib/option/option.component.d.ts +29 -0
  291. package/lib/option/option.module.d.ts +8 -0
  292. package/lib/progress-bar/progress-bar.component.d.ts +26 -0
  293. package/lib/progress-bar/progress-bar.directive.d.ts +9 -0
  294. package/lib/progress-bar/progress-bar.module.d.ts +9 -0
  295. package/lib/progress-bar/progress-bar.types.d.ts +26 -0
  296. package/lib/progress-circle/progress-circle.component.d.ts +28 -0
  297. package/lib/progress-circle/progress-circle.directive.d.ts +9 -0
  298. package/lib/progress-circle/progress-circle.module.d.ts +9 -0
  299. package/lib/progress-circle/progress-circle.types.d.ts +17 -0
  300. package/lib/radio/radio/radio.component.d.ts +23 -0
  301. package/lib/radio/radio-group.component.d.ts +43 -0
  302. package/lib/radio/radio.module.d.ts +9 -0
  303. package/lib/search-functions.d.ts +10 -0
  304. package/lib/segment/segment.component.d.ts +48 -0
  305. package/lib/segment/segment.directives.d.ts +9 -0
  306. package/lib/segment/segment.module.d.ts +9 -0
  307. package/lib/segment/segment.types.d.ts +16 -0
  308. package/lib/select/select.component.d.ts +255 -0
  309. package/lib/select/select.directive.d.ts +94 -0
  310. package/lib/select/select.module.d.ts +14 -0
  311. package/lib/select/select.types.d.ts +109 -0
  312. package/lib/slide-toggle/slide-toggle.component.d.ts +14 -0
  313. package/lib/slide-toggle/slide-toggle.module.d.ts +8 -0
  314. package/lib/slider/abstract-slider.d.ts +88 -0
  315. package/lib/slider/range-slider/range-slider.component.d.ts +29 -0
  316. package/lib/slider/range-slider/range-slider.module.d.ts +8 -0
  317. package/lib/slider/slider.component.d.ts +18 -0
  318. package/lib/slider/slider.directive.d.ts +9 -0
  319. package/lib/slider/slider.module.d.ts +10 -0
  320. package/lib/slider/slider.types.d.ts +28 -0
  321. package/lib/snackbar/index.d.ts +4 -0
  322. package/lib/snackbar/snackbar-ref.d.ts +37 -0
  323. package/lib/snackbar/snackbar.component.d.ts +16 -0
  324. package/lib/snackbar/snackbar.service.d.ts +31 -0
  325. package/lib/snackbar/snackbar.token.d.ts +5 -0
  326. package/lib/snackbar/snackbar.types.d.ts +48 -0
  327. package/lib/spinner/spinner.component.d.ts +8 -0
  328. package/lib/spinner/spinner.module.d.ts +8 -0
  329. package/lib/star/star-button/star-button.component.d.ts +16 -0
  330. package/lib/star/star-button/star-button.module.d.ts +9 -0
  331. package/lib/star/star-display/star-display.component.d.ts +16 -0
  332. package/lib/star/star-display/star-display.module.d.ts +9 -0
  333. package/lib/star/star-input/star-input.component.d.ts +51 -0
  334. package/lib/star/star-input/star-input.module.d.ts +9 -0
  335. package/lib/star/star.component.d.ts +10 -0
  336. package/lib/star/star.module.d.ts +8 -0
  337. package/lib/star/star.types.d.ts +30 -0
  338. package/lib/statebox/statebox.component.d.ts +31 -0
  339. package/lib/statebox/statebox.module.d.ts +8 -0
  340. package/lib/statebox/statebox.types.d.ts +22 -0
  341. package/lib/table/table-item-storage.d.ts +266 -0
  342. package/lib/table/table.component.d.ts +127 -0
  343. package/lib/table/table.directives.d.ts +35 -0
  344. package/lib/table/table.module.d.ts +12 -0
  345. package/lib/table/table.types.d.ts +83 -0
  346. package/lib/table/utils.d.ts +4 -0
  347. package/lib/table-from-csv/table-from-csv.component.d.ts +16 -0
  348. package/lib/table-from-csv/table-from-csv.module.d.ts +9 -0
  349. package/lib/table-pagination/table-pagination.component.d.ts +48 -0
  350. package/lib/table-pagination/table-pagination.module.d.ts +11 -0
  351. package/lib/table-pagination/table-pagination.types.d.ts +9 -0
  352. package/lib/types/alignment.types.d.ts +11 -0
  353. package/lib/types/colors.types.d.ts +71 -0
  354. package/lib/types/item-storage.types.d.ts +98 -0
  355. package/lib/types/theming.types.d.ts +61 -0
  356. package/lib/types/utility.types.d.ts +11 -0
  357. package/package.json +36 -0
  358. package/prebuilt-themes/default/badge.css +208 -0
  359. package/prebuilt-themes/default/badge.css.map +1 -0
  360. package/prebuilt-themes/default/buttons/button.css +290 -0
  361. package/prebuilt-themes/default/buttons/button.css.map +1 -0
  362. package/prebuilt-themes/default/buttons/fab.css +307 -0
  363. package/prebuilt-themes/default/buttons/fab.css.map +1 -0
  364. package/prebuilt-themes/default/buttons/icon-button.css +288 -0
  365. package/prebuilt-themes/default/buttons/icon-button.css.map +1 -0
  366. package/prebuilt-themes/default/calendar.css +293 -0
  367. package/prebuilt-themes/default/calendar.css.map +1 -0
  368. package/prebuilt-themes/default/card.css +122 -0
  369. package/prebuilt-themes/default/card.css.map +1 -0
  370. package/prebuilt-themes/default/checkbox-list.css +65 -0
  371. package/prebuilt-themes/default/checkbox-list.css.map +1 -0
  372. package/prebuilt-themes/default/checkbox.css +365 -0
  373. package/prebuilt-themes/default/checkbox.css.map +1 -0
  374. package/prebuilt-themes/default/chips.css +367 -0
  375. package/prebuilt-themes/default/chips.css.map +1 -0
  376. package/prebuilt-themes/default/color-display.css +29 -0
  377. package/prebuilt-themes/default/color-display.css.map +1 -0
  378. package/prebuilt-themes/default/color-picker.css +106 -0
  379. package/prebuilt-themes/default/color-picker.css.map +1 -0
  380. package/prebuilt-themes/default/core.css +84 -0
  381. package/prebuilt-themes/default/core.css.map +1 -0
  382. package/prebuilt-themes/default/dialog.css +18 -0
  383. package/prebuilt-themes/default/dialog.css.map +1 -0
  384. package/prebuilt-themes/default/divider.css +11 -0
  385. package/prebuilt-themes/default/divider.css.map +1 -0
  386. package/prebuilt-themes/default/dropdown-panel.css +37 -0
  387. package/prebuilt-themes/default/dropdown-panel.css.map +1 -0
  388. package/prebuilt-themes/default/file-drop-area.css +279 -0
  389. package/prebuilt-themes/default/file-drop-area.css.map +1 -0
  390. package/prebuilt-themes/default/form-field-frame.css +84 -0
  391. package/prebuilt-themes/default/form-field-frame.css.map +1 -0
  392. package/prebuilt-themes/default/inputs/color-input.css +139 -0
  393. package/prebuilt-themes/default/inputs/color-input.css.map +1 -0
  394. package/prebuilt-themes/default/inputs/digit-input.css +45 -0
  395. package/prebuilt-themes/default/inputs/digit-input.css.map +1 -0
  396. package/prebuilt-themes/default/inputs/file-input.css +169 -0
  397. package/prebuilt-themes/default/inputs/file-input.css.map +1 -0
  398. package/prebuilt-themes/default/inputs/hex-input.css +119 -0
  399. package/prebuilt-themes/default/inputs/hex-input.css.map +1 -0
  400. package/prebuilt-themes/default/inputs/input.css +139 -0
  401. package/prebuilt-themes/default/inputs/input.css.map +1 -0
  402. package/prebuilt-themes/default/inputs/number-input.css +150 -0
  403. package/prebuilt-themes/default/inputs/number-input.css.map +1 -0
  404. package/prebuilt-themes/default/inputs/password-input.css +73 -0
  405. package/prebuilt-themes/default/inputs/password-input.css.map +1 -0
  406. package/prebuilt-themes/default/inputs/search-bar.css +114 -0
  407. package/prebuilt-themes/default/inputs/search-bar.css.map +1 -0
  408. package/prebuilt-themes/default/inputs/simple-input.css +114 -0
  409. package/prebuilt-themes/default/inputs/simple-input.css.map +1 -0
  410. package/prebuilt-themes/default/kbd-shortcut.css +12 -0
  411. package/prebuilt-themes/default/kbd-shortcut.css.map +1 -0
  412. package/prebuilt-themes/default/kbd.css +17 -0
  413. package/prebuilt-themes/default/kbd.css.map +1 -0
  414. package/prebuilt-themes/default/modal.css +73 -0
  415. package/prebuilt-themes/default/modal.css.map +1 -0
  416. package/prebuilt-themes/default/progress-bar.css +267 -0
  417. package/prebuilt-themes/default/progress-bar.css.map +1 -0
  418. package/prebuilt-themes/default/progress-circle.css +167 -0
  419. package/prebuilt-themes/default/progress-circle.css.map +1 -0
  420. package/prebuilt-themes/default/radio.css +226 -0
  421. package/prebuilt-themes/default/radio.css.map +1 -0
  422. package/prebuilt-themes/default/segment.css +391 -0
  423. package/prebuilt-themes/default/segment.css.map +1 -0
  424. package/prebuilt-themes/default/select.css +275 -0
  425. package/prebuilt-themes/default/select.css.map +1 -0
  426. package/prebuilt-themes/default/slide-toggle.css +264 -0
  427. package/prebuilt-themes/default/slide-toggle.css.map +1 -0
  428. package/prebuilt-themes/default/slider.css +354 -0
  429. package/prebuilt-themes/default/slider.css.map +1 -0
  430. package/prebuilt-themes/default/snackbar.css +183 -0
  431. package/prebuilt-themes/default/snackbar.css.map +1 -0
  432. package/prebuilt-themes/default/spinner.css +151 -0
  433. package/prebuilt-themes/default/spinner.css.map +1 -0
  434. package/prebuilt-themes/default/stars.css +291 -0
  435. package/prebuilt-themes/default/stars.css.map +1 -0
  436. package/prebuilt-themes/default/statebox.css +235 -0
  437. package/prebuilt-themes/default/statebox.css.map +1 -0
  438. package/prebuilt-themes/default/table-pagination.css +48 -0
  439. package/prebuilt-themes/default/table-pagination.css.map +1 -0
  440. package/prebuilt-themes/default/table.css +418 -0
  441. package/prebuilt-themes/default/table.css.map +1 -0
  442. package/public-api.d.ts +145 -0
  443. package/themes/_variables.scss +121 -0
  444. package/themes/default/_clear-button.scss +73 -0
  445. package/themes/default/_coloring.scss +137 -0
  446. package/themes/default/_dropdown-arrow.scss +12 -0
  447. package/themes/default/_mixins.scss +70 -0
  448. package/themes/default/badge.scss +94 -0
  449. package/themes/default/buttons/_button-mixins.scss +144 -0
  450. package/themes/default/buttons/button.scss +62 -0
  451. package/themes/default/buttons/fab.scss +72 -0
  452. package/themes/default/buttons/icon-button.scss +59 -0
  453. package/themes/default/calendar.scss +182 -0
  454. package/themes/default/card.scss +126 -0
  455. package/themes/default/checkbox-list.scss +83 -0
  456. package/themes/default/checkbox.scss +109 -0
  457. package/themes/default/chips.scss +206 -0
  458. package/themes/default/color-display.scss +41 -0
  459. package/themes/default/color-picker.scss +111 -0
  460. package/themes/default/core.scss +96 -0
  461. package/themes/default/dialog.scss +16 -0
  462. package/themes/default/divider.scss +13 -0
  463. package/themes/default/dropdown-panel.scss +45 -0
  464. package/themes/default/file-drop-area.scss +162 -0
  465. package/themes/default/form-field-frame.scss +78 -0
  466. package/themes/default/inputs/_shared.scss +46 -0
  467. package/themes/default/inputs/color-input.scss +46 -0
  468. package/themes/default/inputs/digit-input.scss +56 -0
  469. package/themes/default/inputs/file-input.scss +78 -0
  470. package/themes/default/inputs/hex-input.scss +27 -0
  471. package/themes/default/inputs/input.scss +52 -0
  472. package/themes/default/inputs/number-input.scss +121 -0
  473. package/themes/default/inputs/password-input.scss +43 -0
  474. package/themes/default/inputs/search-bar.scss +19 -0
  475. package/themes/default/inputs/simple-input.scss +19 -0
  476. package/themes/default/kbd-shortcut.scss +13 -0
  477. package/themes/default/kbd.scss +20 -0
  478. package/themes/default/modal.scss +93 -0
  479. package/themes/default/progress-bar.scss +166 -0
  480. package/themes/default/progress-circle.scss +56 -0
  481. package/themes/default/radio.scss +112 -0
  482. package/themes/default/segment.scss +339 -0
  483. package/themes/default/select.scss +253 -0
  484. package/themes/default/slide-toggle.scss +151 -0
  485. package/themes/default/slider.scss +224 -0
  486. package/themes/default/snackbar.scss +60 -0
  487. package/themes/default/spinner.scss +21 -0
  488. package/themes/default/stars.scss +122 -0
  489. package/themes/default/statebox.scss +109 -0
  490. package/themes/default/table-pagination.scss +56 -0
  491. package/themes/default/table.scss +403 -0
@@ -0,0 +1,468 @@
1
+ import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, EventEmitter, Input, Output, TemplateRef, ViewEncapsulation, } from '@angular/core';
2
+ import { coerceBooleanProperty, coerceNumberProperty } from '@ardium-ui/devkit';
3
+ import { isDefined } from 'simple-bool';
4
+ import { _FocusableComponentBase } from '../_internal/focusable-component';
5
+ import { CheckboxState } from '../checkbox/checkbox.types';
6
+ import { PaginationAlign } from '../table-pagination/table-pagination.types';
7
+ import { ComponentColor, SimpleComponentColor } from '../types/colors.types';
8
+ import { TableItemStorage } from './table-item-storage';
9
+ import { ArdiumTableCaptionTemplateDirective, ArdiumTableCheckboxTemplateDirective, ArdiumTableHeaderCheckboxTemplateDirective, ArdiumTableTemplateDirective, } from './table.directives';
10
+ import { TableAlignType, TableAppearance, TablePaginationStrategy, TableVariant, } from './table.types';
11
+ import { isTableSubheader } from './utils';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@angular/common";
14
+ import * as i2 from "../checkbox/checkbox.component";
15
+ import * as i3 from "../table-pagination/table-pagination.component";
16
+ import * as i4 from "../icon/icon.component";
17
+ export class ArdiumTableComponent extends _FocusableComponentBase {
18
+ constructor() {
19
+ super(...arguments);
20
+ this._itemStorage = new TableItemStorage(this);
21
+ this.DEFAULTS = {
22
+ rowDisabledFrom: 'disabled',
23
+ rowBoldFrom: 'bold',
24
+ };
25
+ this._invertRowDisabled = false;
26
+ this._invertRowBold = false;
27
+ this._selectableRows = false;
28
+ //! appearance
29
+ this.appearance = TableAppearance.Strong;
30
+ this.variant = TableVariant.Rounded;
31
+ this.color = ComponentColor.Primary;
32
+ this.align = TableAlignType.CenterLeft;
33
+ this.headerAlign = TableAlignType.CenterLeft;
34
+ this._compact = false;
35
+ this._zebra = false;
36
+ this._stickyHeader = false;
37
+ //! pagination
38
+ this._paginated = false;
39
+ this.paginationStrategy = TablePaginationStrategy.Noop;
40
+ this.paginationOptions = [10, 25, 50];
41
+ this.paginationColor = ComponentColor.None;
42
+ this.paginationAlign = PaginationAlign.Split;
43
+ this.itemsPerPageText = 'Items per page:';
44
+ this.currentItemsFormatFn = ({ currentItemsFirst, currentItemsLast, totalItems }) => {
45
+ return `${currentItemsFirst} – ${currentItemsLast} of ${totalItems}`;
46
+ };
47
+ this._pageFillRemaining = false;
48
+ this._paginationDisabled = false;
49
+ this._useFirstLastButtons = false;
50
+ this._itemsPerPage = 50;
51
+ this.itemsPerPageChange = new EventEmitter();
52
+ this._page = 1;
53
+ this.pageChange = new EventEmitter();
54
+ this._data = [];
55
+ this._treatDataSourceAsString = false;
56
+ this._itemTemplates = {};
57
+ this.selectedRowsChangeEvent = new EventEmitter();
58
+ this.failedSelectRowEvent = new EventEmitter();
59
+ this.selectRowEvent = new EventEmitter();
60
+ this.unselectRowEvent = new EventEmitter();
61
+ }
62
+ get invertRowDisabled() {
63
+ return this._invertRowDisabled;
64
+ }
65
+ set invertRowDisabled(v) {
66
+ this._invertRowDisabled = coerceBooleanProperty(v);
67
+ }
68
+ get invertRowBold() {
69
+ return this._invertRowBold;
70
+ }
71
+ set invertRowBold(v) {
72
+ this._invertRowBold = coerceBooleanProperty(v);
73
+ }
74
+ get selectableRows() {
75
+ return this._selectableRows;
76
+ }
77
+ set selectableRows(v) {
78
+ this._selectableRows = coerceBooleanProperty(v);
79
+ }
80
+ get compact() {
81
+ return this._compact;
82
+ }
83
+ set compact(v) {
84
+ this._compact = coerceBooleanProperty(v);
85
+ }
86
+ get zebra() {
87
+ return this._zebra;
88
+ }
89
+ set zebra(v) {
90
+ this._zebra = coerceBooleanProperty(v);
91
+ }
92
+ get stickyHeader() {
93
+ return this._stickyHeader;
94
+ }
95
+ set stickyHeader(v) {
96
+ this._stickyHeader = coerceBooleanProperty(v);
97
+ }
98
+ get ngClasses() {
99
+ return [
100
+ `ard-appearance-${this.appearance}`,
101
+ `ard-variant-${this.variant}`,
102
+ `ard-color-${this.color}`,
103
+ `ard-align-${this.align}`,
104
+ `ard-header-align-${this.headerAlign}`,
105
+ this.compact ? 'ard-compact' : '',
106
+ this.zebra ? 'ard-zebra-table' : '',
107
+ this.selectableRows ? 'ard-selectable-rows' : '',
108
+ this.stickyHeader ? 'ard-sticky-header' : '',
109
+ this.isLoading ? 'ard-table-loading' : '',
110
+ ].join(' ');
111
+ }
112
+ get paginated() {
113
+ return this._paginated;
114
+ }
115
+ set paginated(v) {
116
+ this._paginated = coerceBooleanProperty(v);
117
+ }
118
+ get pageFillRemaining() {
119
+ return this._pageFillRemaining;
120
+ }
121
+ set pageFillRemaining(v) {
122
+ this._pageFillRemaining = coerceBooleanProperty(v);
123
+ }
124
+ get paginationDisabled() {
125
+ return this._paginationDisabled;
126
+ }
127
+ set paginationDisabled(v) {
128
+ this._paginationDisabled = coerceBooleanProperty(v);
129
+ }
130
+ get useFirstLastButtons() {
131
+ return this._useFirstLastButtons;
132
+ }
133
+ set useFirstLastButtons(v) {
134
+ this._useFirstLastButtons = coerceBooleanProperty(v);
135
+ }
136
+ get itemsPerPage() {
137
+ return this._itemsPerPage;
138
+ }
139
+ set itemsPerPage(v) {
140
+ this._itemsPerPage = coerceNumberProperty(v);
141
+ }
142
+ get page() {
143
+ return this._page;
144
+ }
145
+ set page(v) {
146
+ this._page = coerceNumberProperty(v);
147
+ }
148
+ get isDefinedTotalItems() {
149
+ return ((this.paginationStrategy == TablePaginationStrategy.Noop && isDefined(this.totalItems)) || this.paginationStrategy != TablePaginationStrategy.Noop);
150
+ }
151
+ get canDisplayPagination() {
152
+ //prettier-ignore
153
+ return this.paginated && this.isDefinedTotalItems;
154
+ }
155
+ //! item storage getters
156
+ get headerCells() {
157
+ return this._itemStorage.headerCells;
158
+ }
159
+ get dataRows() {
160
+ const items = this._itemStorage.paginatedItems;
161
+ if (!this.pageFillRemaining)
162
+ return items;
163
+ if (!this.isDefinedTotalItems) {
164
+ throw new Error('<ard-table> requires [totalItems] to be defined.');
165
+ }
166
+ if (this.page == 1)
167
+ return items;
168
+ for (let i = items.length; i < this.itemsPerPage; i++) {
169
+ items.push({
170
+ itemData: null,
171
+ index: i,
172
+ data: [],
173
+ dataColumns: [],
174
+ isEmpty: true,
175
+ });
176
+ }
177
+ return items;
178
+ }
179
+ //! columns/data setters
180
+ set columns(v) {
181
+ this._itemStorage.setColumns(v);
182
+ }
183
+ set data(v) {
184
+ this._data = v;
185
+ this._itemStorage.setItems(v);
186
+ }
187
+ get data() {
188
+ return this._data;
189
+ }
190
+ get treatDataSourceAsString() {
191
+ return this._treatDataSourceAsString;
192
+ }
193
+ set treatDataSourceAsString(v) {
194
+ this._treatDataSourceAsString = coerceBooleanProperty(v);
195
+ }
196
+ ngAfterContentInit() {
197
+ const templates = Array.from(this.templateChildren);
198
+ for (const instance of templates) {
199
+ if (!instance.name) {
200
+ console.error(new Error('[ard-table-tmp] requires a value to be specified.'));
201
+ continue;
202
+ }
203
+ this._itemTemplates[instance.name] = instance.template;
204
+ }
205
+ }
206
+ getHeaderTemplate(tmp) {
207
+ if (typeof tmp == 'string')
208
+ return undefined;
209
+ return this.getCellTemplate(tmp.template);
210
+ }
211
+ getHeaderCheckboxColor() {
212
+ if (this.appearance == TableAppearance.Strong)
213
+ return SimpleComponentColor.CurrentColor;
214
+ return this.color;
215
+ }
216
+ getCellTemplate(tmp) {
217
+ //return undefined
218
+ if (!tmp)
219
+ return undefined;
220
+ //return template, if it is one
221
+ if (tmp instanceof TemplateRef)
222
+ return tmp;
223
+ //check if the name can be found
224
+ if (!(tmp in this._itemTemplates)) {
225
+ console.error(new Error(`<ard-table> error: cannot find template named "${tmp}"`));
226
+ return undefined;
227
+ }
228
+ //return the template
229
+ return this._itemTemplates[tmp];
230
+ }
231
+ getCellStyle(cell) {
232
+ if (isTableSubheader(cell))
233
+ return 'width:unset;min-width:unset';
234
+ const width = typeof cell.width == 'number' ? `${cell.width}px` : cell.width;
235
+ const minWidth = typeof cell.minWidth == 'number' ? `${cell.minWidth}px` : cell.minWidth;
236
+ return [`width:${width ?? 'unset'}`, `min-width:${minWidth ?? 'unset'}`].join(';');
237
+ }
238
+ //! click & hover handlers
239
+ onCheckboxClick(index) {
240
+ this.toggleRowSelected(index);
241
+ }
242
+ onRowClick(index, event) {
243
+ if (!this.selectableRows)
244
+ return;
245
+ event.stopPropagation();
246
+ this.toggleRowSelected(index);
247
+ }
248
+ onRowMouseOver(event) {
249
+ event.stopPropagation();
250
+ }
251
+ onRowMouseEnter(index, event) {
252
+ if (!this.selectableRows)
253
+ return;
254
+ event.stopPropagation();
255
+ this._itemStorage.highlightSingleItem(index);
256
+ }
257
+ onRowMouseLeave(index, event) {
258
+ if (!this.selectableRows)
259
+ return;
260
+ event.stopPropagation();
261
+ this._itemStorage.unhighlightItem(index);
262
+ }
263
+ //! select handlers
264
+ /**
265
+ * Toggles the selection state of a row in the table.
266
+ * @param selected a boolean value indicating if the row is currently selected.
267
+ * @param index the index of the row in the table.
268
+ */
269
+ toggleRowSelected(index) {
270
+ if (this._itemStorage.isItemSelected(index)) {
271
+ const unselected = this._itemStorage.unselectItem(index);
272
+ this.unselectRowEvent.emit(unselected);
273
+ }
274
+ else {
275
+ const [selected, failed] = this._itemStorage.selectItem(index);
276
+ this.selectRowEvent.emit(selected);
277
+ this.failedSelectRowEvent.emit(failed);
278
+ }
279
+ this._emitSelect();
280
+ }
281
+ /**
282
+ * Toggles the selection state of all rows in the table.
283
+ */
284
+ toggleAllRowsSelected() {
285
+ if (this._itemStorage.areAllSelected) {
286
+ const unselected = this._itemStorage.unselectAll();
287
+ this.unselectRowEvent.emit(unselected);
288
+ }
289
+ else {
290
+ const [selected, failed] = this._itemStorage.selectAll();
291
+ this.selectRowEvent.emit(selected);
292
+ this.failedSelectRowEvent.emit(failed);
293
+ }
294
+ this._emitSelect();
295
+ }
296
+ _emitSelect() {
297
+ const v = this._itemStorage.value;
298
+ this.selectedRowsChangeEvent.emit(v);
299
+ }
300
+ isCellCheckbox(cell) {
301
+ return typeof cell == 'object' && '_ardCheckbox' in cell && 'index' in cell;
302
+ }
303
+ isHeaderCellCheckbox(cell) {
304
+ const dataCell = cell.cell;
305
+ if (isTableSubheader(dataCell))
306
+ return false;
307
+ if (typeof dataCell.dataSource == 'string')
308
+ return false;
309
+ return dataCell.dataSource.type == 'checkbox';
310
+ }
311
+ isHeaderCellSortable(cell) {
312
+ const dataCell = cell.cell;
313
+ if (isTableSubheader(dataCell))
314
+ return false;
315
+ return dataCell.sortable ?? false;
316
+ }
317
+ getHeaderContext(cell, index) {
318
+ if (typeof cell.header != 'string')
319
+ return null;
320
+ if (isTableSubheader(cell))
321
+ return {
322
+ $implicit: cell.header,
323
+ header: cell.header,
324
+ };
325
+ return {
326
+ $implicit: cell.header,
327
+ header: cell.header,
328
+ sortable: cell.sortable ?? false,
329
+ sortType: this._itemStorage.getColumnSortType(index),
330
+ onTriggerSort: (event) => this._itemStorage.toggleCurrentSortColumn(index),
331
+ onTriggerResetSort: (event) => {
332
+ this._itemStorage.resetSort();
333
+ event?.preventDefault();
334
+ event?.stopPropagation();
335
+ },
336
+ };
337
+ }
338
+ getHeaderCheckboxContext() {
339
+ let state = CheckboxState.Unselected;
340
+ if (this._itemStorage.isAnyItemSelected) {
341
+ state = CheckboxState.Indeterminate;
342
+ if (this._itemStorage.areAllSelected) {
343
+ state = CheckboxState.Selected;
344
+ }
345
+ }
346
+ return {
347
+ $implicit: state,
348
+ state,
349
+ onChange: () => {
350
+ this.toggleAllRowsSelected();
351
+ },
352
+ };
353
+ }
354
+ getCheckboxContext(index) {
355
+ const item = this._itemStorage.items.find(v => v.index == index);
356
+ const selected = item.selected ?? false;
357
+ const disabled = item.disabled ?? false;
358
+ return {
359
+ $implicit: selected,
360
+ selected,
361
+ disabled,
362
+ onChange: () => {
363
+ this.onCheckboxClick(index);
364
+ },
365
+ };
366
+ }
367
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: ArdiumTableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
368
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: ArdiumTableComponent, selector: "ard-table", inputs: { rowDisabledFrom: "rowDisabledFrom", rowBoldFrom: "rowBoldFrom", invertRowDisabled: "invertRowDisabled", invertRowBold: "invertRowBold", selectableRows: "selectableRows", caption: "caption", isLoading: "isLoading", loadingProgress: "loadingProgress", appearance: "appearance", variant: "variant", color: "color", align: "align", headerAlign: "headerAlign", compact: "compact", zebra: "zebra", stickyHeader: "stickyHeader", paginated: "paginated", paginationStrategy: "paginationStrategy", paginationOptions: "paginationOptions", totalItems: "totalItems", paginationColor: "paginationColor", paginationAlign: "paginationAlign", itemsPerPageText: "itemsPerPageText", currentItemsFormatFn: "currentItemsFormatFn", pageFillRemaining: "pageFillRemaining", paginationDisabled: "paginationDisabled", useFirstLastButtons: "useFirstLastButtons", itemsPerPage: "itemsPerPage", page: "page", columns: "columns", data: "data", treatDataSourceAsString: "treatDataSourceAsString" }, outputs: { itemsPerPageChange: "itemsPerPageChange", pageChange: "pageChange", selectedRowsChangeEvent: "selectedRowsChange", failedSelectRowEvent: "failedSelectRow", selectRowEvent: "selectRow", unselectRowEvent: "unselectRow" }, queries: [{ propertyName: "checkboxTemplate", first: true, predicate: ArdiumTableCheckboxTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "headerCheckboxTemplate", first: true, predicate: ArdiumTableHeaderCheckboxTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "captionTemplate", first: true, predicate: ArdiumTableCaptionTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "templateChildren", predicate: ArdiumTableTemplateDirective }], usesInheritance: true, ngImport: i0, template: "<table class=\"ard-table\" [ngClass]=\"ngClasses\">\r\n <caption\r\n *ngIf=\"caption\"\r\n class=\"ard-table__caption\"\r\n >\r\n <div class=\"ard-table__caption-container\">\r\n <ng-template #defaultCaptionTemplate let-captionText>\r\n {{ captionText }}\r\n </ng-template>\r\n \r\n <ng-template\r\n [ngTemplateOutlet]=\"captionTemplate ?? defaultCaptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: caption }\"\r\n />\r\n </div>\r\n </caption>\r\n <thead class=\"ard-table__header\">\r\n <tr class=\"ard-table__header-row\" *ngFor=\"let row of headerCells\">\r\n <th\r\n *ngFor=\"let cell of row; let index = index\"\r\n class=\"ard-table__header-cell\"\r\n [ngClass]=\"cell.cell.cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isHeaderCellCheckbox(cell)\"\r\n [attr.colspan]=\"cell.colspan\"\r\n [attr.rowspan]=\"cell.rowspan\"\r\n [scope]=\"cell.colspan > 1 ? 'colgroup' : 'col'\"\r\n >\r\n <div\r\n class=\"ard-table__cell-container\"\r\n [class.ard-table__sortable]=\"isHeaderCellSortable(cell)\"\r\n [style.width]=\"cell.width\"\r\n [style.minWidth]=\"cell.minWidth\"\r\n >\r\n <ng-container *ngIf=\"isHeaderCellCheckbox(cell)\">\r\n <ng-template #defaultHeaderCheckboxTemplate let-state let-onChange=\"onChange\">\r\n <ard-checkbox [tabIndex]=\"isLoading ? -1 : tabIndex\" [state]=\"state\" [color]=\"getHeaderCheckboxColor()\" unselectedColor=\"currentColor\" (change)=\"onChange()\" />\r\n </ng-template>\r\n \r\n <ng-template\r\n [ngTemplateOutlet]=\"headerCheckboxTemplate ?? defaultHeaderCheckboxTemplate\"\r\n [ngTemplateOutletContext]=\"getHeaderCheckboxContext()\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isHeaderCellCheckbox(cell)\">\r\n <ng-template\r\n #defaultHeaderCellTemplate\r\n let-content\r\n let-sortable=\"sortable\"\r\n let-sortType=\"sortType\"\r\n let-onTriggerSort=\"onTriggerSort\"\r\n let-onTriggerResetSort=\"onTriggerResetSort\"\r\n >\r\n <div\r\n class=\"ard-table__header-template-container\"\r\n [class.ard-sortable]=\"sortable\"\r\n [class.ard-nonsortable]=\"!sortable\"\r\n >\r\n <button\r\n class=\"ard-table__header-content-container\"\r\n *ngIf=\"sortable\"\r\n (click)=\"onTriggerSort($event)\"\r\n [tabindex]=\"tabIndex\"\r\n (keydown.Esc)=\"onTriggerResetSort($event)\"\r\n >\r\n <div class=\"ard-table__header-content\">{{ content }}</div>\r\n <div class=\"ard-table__header-sort-icon\" *ngIf=\"sortType != null\">\r\n <ard-icon *ngIf=\"sortType == 'ascending'\">south</ard-icon>\r\n <ard-icon *ngIf=\"sortType == 'descending'\">north</ard-icon>\r\n </div>\r\n </button>\r\n <div\r\n class=\"ard-table__header-content-container\"\r\n *ngIf=\"!sortable\"\r\n >\r\n <div class=\"ard-table__header-content\">{{ content }}</div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n <ng-template \r\n [ngTemplateOutlet]=\"getHeaderTemplate(cell.cell.header) ?? defaultHeaderCellTemplate\"\r\n [ngTemplateOutletContext]=\"getHeaderContext(cell.cell, index)\"\r\n />\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"ard-table__body\">\r\n <ng-container *ngFor=\"let row of dataRows; let rowIndex = index;\">\r\n <tr *ngIf=\"row.isEmpty\" class=\"ard-table__empty-row\">\r\n <td class=\"ard-table__empty-cell\" colspan=\"9999\"></td>\r\n </tr>\r\n <tr\r\n *ngIf=\"!row.isEmpty\"\r\n class=\"ard-table__body-row\"\r\n [class.ard-table__selected-row]=\"row.selected\"\r\n [class.ard-table__highlighted-row]=\"row.highlighted\"\r\n [class.ard-table__disabled-row]=\"row.disabled\"\r\n [class.ard-table__bold-row]=\"row.bold\"\r\n (click)=\"onRowClick(rowIndex, $event)\"\r\n (mouseover)=\"onRowMouseOver($event)\"\r\n (mouseenter)=\"onRowMouseEnter(rowIndex, $event)\"\r\n (mouseleave)=\"onRowMouseLeave(rowIndex, $event)\"\r\n >\r\n <ng-container *ngFor=\"let cell of row.data; let cellIndex = index\">\r\n <ng-template #cellTmp>\r\n <div\r\n class=\"ard-table__cell-container\"\r\n [style]=\"getCellStyle(row.dataColumns[cellIndex])\"\r\n >\r\n <ng-container *ngIf=\"isCellCheckbox(cell)\">\r\n <ng-template #defaultCheckboxTemplate let-isChecked let-onChange=\"onChange\" let-disabled=\"disabled\">\r\n <ard-checkbox [tabIndex]=\"isLoading ? -1 : tabIndex\" [selected]=\"isChecked\" [color]=\"color\" [disabled]=\"disabled\" (change)=\"onChange()\" (click)=\"$event.stopPropagation()\" />\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"checkboxTemplate ?? defaultCheckboxTemplate\"\r\n [ngTemplateOutletContext]=\"getCheckboxContext(rowIndex)\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isCellCheckbox(cell)\">\r\n <ng-template #defaultCellTemplate let-content>\r\n {{ content }}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"getCellTemplate(row.dataColumns[cellIndex].template) ?? defaultCellTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: cell }\"\r\n />\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n <td\r\n *ngIf=\"!row.dataColumns[cellIndex].isRowHeader\"\r\n class=\"ard-table__body-cell\"\r\n [ngClass]=\"row.dataColumns[cellIndex].cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\r\n </td>\r\n <th\r\n *ngIf=\"row.dataColumns[cellIndex].isRowHeader\"\r\n class=\"ard-table__body-cell ard-table__row-header\"\r\n scope=\"row\"\r\n [ngClass]=\"row.dataColumns[cellIndex].cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n <tfoot class=\"ard-table__foot\" *ngIf=\"canDisplayPagination\">\r\n <tr class=\"ard-table__foot-row\">\r\n <td class=\"ard-table__pagination-cell\" colspan=\"9999\">\r\n <ard-table-pagination\r\n [options]=\"paginationOptions\"\r\n [(page)]=\"page\"\r\n [totalItems]=\"totalItems\"\r\n [disabled]=\"paginationDisabled\"\r\n [(itemsPerPage)]=\"itemsPerPage\"\r\n [align]=\"paginationAlign\"\r\n [isLoading]=\"isLoading\"\r\n [itemsPerPageText]=\"itemsPerPageText\"\r\n [currentItemsFormatFn]=\"currentItemsFormatFn\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></ard-table-pagination>\r\n </td>\r\n </tr>\r\n </tfoot>\r\n</table>", styles: [".ard-table__cell-container,.ard-table__header-template-container{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ArdiumCheckboxComponent, selector: "ard-checkbox", inputs: ["wrapperClasses", "htmlId", "color", "unselectedColor", "state"], outputs: ["stateChange"] }, { kind: "component", type: i3.ArdiumTablePaginationComponent, selector: "ard-table-pagination", inputs: ["options", "itemsPerPage", "page", "totalItems", "color", "align", "compact", "useFirstLastButtons", "isLoading", "itemsPerPageText", "currentItemsFormatFn"], outputs: ["itemsPerPageChange", "pageChange"] }, { kind: "component", type: i4.ArdiumIconComponent, selector: "ard-icon", inputs: ["ariaLabel", "icon", "filled", "weight", "grade", "opticalSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
369
+ }
370
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: ArdiumTableComponent, decorators: [{
371
+ type: Component,
372
+ args: [{ selector: 'ard-table', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<table class=\"ard-table\" [ngClass]=\"ngClasses\">\r\n <caption\r\n *ngIf=\"caption\"\r\n class=\"ard-table__caption\"\r\n >\r\n <div class=\"ard-table__caption-container\">\r\n <ng-template #defaultCaptionTemplate let-captionText>\r\n {{ captionText }}\r\n </ng-template>\r\n \r\n <ng-template\r\n [ngTemplateOutlet]=\"captionTemplate ?? defaultCaptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: caption }\"\r\n />\r\n </div>\r\n </caption>\r\n <thead class=\"ard-table__header\">\r\n <tr class=\"ard-table__header-row\" *ngFor=\"let row of headerCells\">\r\n <th\r\n *ngFor=\"let cell of row; let index = index\"\r\n class=\"ard-table__header-cell\"\r\n [ngClass]=\"cell.cell.cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isHeaderCellCheckbox(cell)\"\r\n [attr.colspan]=\"cell.colspan\"\r\n [attr.rowspan]=\"cell.rowspan\"\r\n [scope]=\"cell.colspan > 1 ? 'colgroup' : 'col'\"\r\n >\r\n <div\r\n class=\"ard-table__cell-container\"\r\n [class.ard-table__sortable]=\"isHeaderCellSortable(cell)\"\r\n [style.width]=\"cell.width\"\r\n [style.minWidth]=\"cell.minWidth\"\r\n >\r\n <ng-container *ngIf=\"isHeaderCellCheckbox(cell)\">\r\n <ng-template #defaultHeaderCheckboxTemplate let-state let-onChange=\"onChange\">\r\n <ard-checkbox [tabIndex]=\"isLoading ? -1 : tabIndex\" [state]=\"state\" [color]=\"getHeaderCheckboxColor()\" unselectedColor=\"currentColor\" (change)=\"onChange()\" />\r\n </ng-template>\r\n \r\n <ng-template\r\n [ngTemplateOutlet]=\"headerCheckboxTemplate ?? defaultHeaderCheckboxTemplate\"\r\n [ngTemplateOutletContext]=\"getHeaderCheckboxContext()\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isHeaderCellCheckbox(cell)\">\r\n <ng-template\r\n #defaultHeaderCellTemplate\r\n let-content\r\n let-sortable=\"sortable\"\r\n let-sortType=\"sortType\"\r\n let-onTriggerSort=\"onTriggerSort\"\r\n let-onTriggerResetSort=\"onTriggerResetSort\"\r\n >\r\n <div\r\n class=\"ard-table__header-template-container\"\r\n [class.ard-sortable]=\"sortable\"\r\n [class.ard-nonsortable]=\"!sortable\"\r\n >\r\n <button\r\n class=\"ard-table__header-content-container\"\r\n *ngIf=\"sortable\"\r\n (click)=\"onTriggerSort($event)\"\r\n [tabindex]=\"tabIndex\"\r\n (keydown.Esc)=\"onTriggerResetSort($event)\"\r\n >\r\n <div class=\"ard-table__header-content\">{{ content }}</div>\r\n <div class=\"ard-table__header-sort-icon\" *ngIf=\"sortType != null\">\r\n <ard-icon *ngIf=\"sortType == 'ascending'\">south</ard-icon>\r\n <ard-icon *ngIf=\"sortType == 'descending'\">north</ard-icon>\r\n </div>\r\n </button>\r\n <div\r\n class=\"ard-table__header-content-container\"\r\n *ngIf=\"!sortable\"\r\n >\r\n <div class=\"ard-table__header-content\">{{ content }}</div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n <ng-template \r\n [ngTemplateOutlet]=\"getHeaderTemplate(cell.cell.header) ?? defaultHeaderCellTemplate\"\r\n [ngTemplateOutletContext]=\"getHeaderContext(cell.cell, index)\"\r\n />\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"ard-table__body\">\r\n <ng-container *ngFor=\"let row of dataRows; let rowIndex = index;\">\r\n <tr *ngIf=\"row.isEmpty\" class=\"ard-table__empty-row\">\r\n <td class=\"ard-table__empty-cell\" colspan=\"9999\"></td>\r\n </tr>\r\n <tr\r\n *ngIf=\"!row.isEmpty\"\r\n class=\"ard-table__body-row\"\r\n [class.ard-table__selected-row]=\"row.selected\"\r\n [class.ard-table__highlighted-row]=\"row.highlighted\"\r\n [class.ard-table__disabled-row]=\"row.disabled\"\r\n [class.ard-table__bold-row]=\"row.bold\"\r\n (click)=\"onRowClick(rowIndex, $event)\"\r\n (mouseover)=\"onRowMouseOver($event)\"\r\n (mouseenter)=\"onRowMouseEnter(rowIndex, $event)\"\r\n (mouseleave)=\"onRowMouseLeave(rowIndex, $event)\"\r\n >\r\n <ng-container *ngFor=\"let cell of row.data; let cellIndex = index\">\r\n <ng-template #cellTmp>\r\n <div\r\n class=\"ard-table__cell-container\"\r\n [style]=\"getCellStyle(row.dataColumns[cellIndex])\"\r\n >\r\n <ng-container *ngIf=\"isCellCheckbox(cell)\">\r\n <ng-template #defaultCheckboxTemplate let-isChecked let-onChange=\"onChange\" let-disabled=\"disabled\">\r\n <ard-checkbox [tabIndex]=\"isLoading ? -1 : tabIndex\" [selected]=\"isChecked\" [color]=\"color\" [disabled]=\"disabled\" (change)=\"onChange()\" (click)=\"$event.stopPropagation()\" />\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"checkboxTemplate ?? defaultCheckboxTemplate\"\r\n [ngTemplateOutletContext]=\"getCheckboxContext(rowIndex)\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isCellCheckbox(cell)\">\r\n <ng-template #defaultCellTemplate let-content>\r\n {{ content }}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"getCellTemplate(row.dataColumns[cellIndex].template) ?? defaultCellTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: cell }\"\r\n />\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n <td\r\n *ngIf=\"!row.dataColumns[cellIndex].isRowHeader\"\r\n class=\"ard-table__body-cell\"\r\n [ngClass]=\"row.dataColumns[cellIndex].cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\r\n </td>\r\n <th\r\n *ngIf=\"row.dataColumns[cellIndex].isRowHeader\"\r\n class=\"ard-table__body-cell ard-table__row-header\"\r\n scope=\"row\"\r\n [ngClass]=\"row.dataColumns[cellIndex].cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n <tfoot class=\"ard-table__foot\" *ngIf=\"canDisplayPagination\">\r\n <tr class=\"ard-table__foot-row\">\r\n <td class=\"ard-table__pagination-cell\" colspan=\"9999\">\r\n <ard-table-pagination\r\n [options]=\"paginationOptions\"\r\n [(page)]=\"page\"\r\n [totalItems]=\"totalItems\"\r\n [disabled]=\"paginationDisabled\"\r\n [(itemsPerPage)]=\"itemsPerPage\"\r\n [align]=\"paginationAlign\"\r\n [isLoading]=\"isLoading\"\r\n [itemsPerPageText]=\"itemsPerPageText\"\r\n [currentItemsFormatFn]=\"currentItemsFormatFn\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></ard-table-pagination>\r\n </td>\r\n </tr>\r\n </tfoot>\r\n</table>", styles: [".ard-table__cell-container,.ard-table__header-template-container{width:100%;height:100%}\n"] }]
373
+ }], propDecorators: { rowDisabledFrom: [{
374
+ type: Input
375
+ }], rowBoldFrom: [{
376
+ type: Input
377
+ }], invertRowDisabled: [{
378
+ type: Input
379
+ }], invertRowBold: [{
380
+ type: Input
381
+ }], selectableRows: [{
382
+ type: Input
383
+ }], caption: [{
384
+ type: Input
385
+ }], isLoading: [{
386
+ type: Input
387
+ }], loadingProgress: [{
388
+ type: Input
389
+ }], appearance: [{
390
+ type: Input
391
+ }], variant: [{
392
+ type: Input
393
+ }], color: [{
394
+ type: Input
395
+ }], align: [{
396
+ type: Input
397
+ }], headerAlign: [{
398
+ type: Input
399
+ }], compact: [{
400
+ type: Input
401
+ }], zebra: [{
402
+ type: Input
403
+ }], stickyHeader: [{
404
+ type: Input
405
+ }], paginated: [{
406
+ type: Input
407
+ }], paginationStrategy: [{
408
+ type: Input
409
+ }], paginationOptions: [{
410
+ type: Input
411
+ }], totalItems: [{
412
+ type: Input
413
+ }], paginationColor: [{
414
+ type: Input
415
+ }], paginationAlign: [{
416
+ type: Input
417
+ }], itemsPerPageText: [{
418
+ type: Input
419
+ }], currentItemsFormatFn: [{
420
+ type: Input
421
+ }], pageFillRemaining: [{
422
+ type: Input
423
+ }], paginationDisabled: [{
424
+ type: Input
425
+ }], useFirstLastButtons: [{
426
+ type: Input
427
+ }], itemsPerPage: [{
428
+ type: Input
429
+ }], itemsPerPageChange: [{
430
+ type: Output
431
+ }], page: [{
432
+ type: Input
433
+ }], pageChange: [{
434
+ type: Output
435
+ }], columns: [{
436
+ type: Input
437
+ }], data: [{
438
+ type: Input
439
+ }], treatDataSourceAsString: [{
440
+ type: Input
441
+ }], checkboxTemplate: [{
442
+ type: ContentChild,
443
+ args: [ArdiumTableCheckboxTemplateDirective, { read: TemplateRef }]
444
+ }], headerCheckboxTemplate: [{
445
+ type: ContentChild,
446
+ args: [ArdiumTableHeaderCheckboxTemplateDirective, {
447
+ read: TemplateRef,
448
+ }]
449
+ }], captionTemplate: [{
450
+ type: ContentChild,
451
+ args: [ArdiumTableCaptionTemplateDirective, { read: TemplateRef }]
452
+ }], templateChildren: [{
453
+ type: ContentChildren,
454
+ args: [ArdiumTableTemplateDirective]
455
+ }], selectedRowsChangeEvent: [{
456
+ type: Output,
457
+ args: ['selectedRowsChange']
458
+ }], failedSelectRowEvent: [{
459
+ type: Output,
460
+ args: ['failedSelectRow']
461
+ }], selectRowEvent: [{
462
+ type: Output,
463
+ args: ['selectRow']
464
+ }], unselectRowEvent: [{
465
+ type: Output,
466
+ args: ['unselectRow']
467
+ }] } });
468
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sV0FBVyxFQUNYLGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQXdCLGVBQWUsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25HLE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RSxPQUFPLEVBQTJCLGdCQUFnQixFQUF3QixNQUFNLHNCQUFzQixDQUFDO0FBQ3ZHLE9BQU8sRUFDSCxtQ0FBbUMsRUFDbkMsb0NBQW9DLEVBQ3BDLDBDQUEwQyxFQUMxQyw0QkFBNEIsR0FDL0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBRUgsY0FBYyxFQUNkLGVBQWUsRUFNZix1QkFBdUIsRUFFdkIsWUFBWSxHQUVmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7Ozs7O0FBUzNDLE1BQU0sT0FBTyxv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QkFPSSxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBSUgsSUFBSTtzQkFEUCxLQUFLO2dCQU9JLFVBQVU7c0JBQW5CLE1BQU07Z0JBc0NILE9BQU87c0JBRFYsS0FBSztnQkFNRixJQUFJO3NCQURQLEtBQUs7Z0JBV0YsdUJBQXVCO3NCQUQxQixLQUFLO2dCQVVOLGdCQUFnQjtzQkFEZixZQUFZO3VCQUFDLG9DQUFvQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFLekUsc0JBQXNCO3NCQUhyQixZQUFZO3VCQUFDLDBDQUEwQyxFQUFFO3dCQUN0RCxJQUFJLEVBQUUsV0FBVztxQkFDcEI7Z0JBR0QsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLG1DQUFtQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFLeEUsZ0JBQWdCO3NCQURmLGVBQWU7dUJBQUMsNEJBQTRCO2dCQW1IZix1QkFBdUI7c0JBQXBELE1BQU07dUJBQUMsb0JBQW9CO2dCQUNELG9CQUFvQjtzQkFBOUMsTUFBTTt1QkFBQyxpQkFBaUI7Z0JBQ0osY0FBYztzQkFBbEMsTUFBTTt1QkFBQyxXQUFXO2dCQUNJLGdCQUFnQjtzQkFBdEMsTUFBTTt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYXJkaXVtLXVpL2RldmtpdCc7XG5pbXBvcnQgeyBpc0RlZmluZWQgfSBmcm9tICdzaW1wbGUtYm9vbCc7XG5pbXBvcnQgeyBfRm9jdXNhYmxlQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uL19pbnRlcm5hbC9mb2N1c2FibGUtY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrYm94U3RhdGUgfSBmcm9tICcuLi9jaGVja2JveC9jaGVja2JveC50eXBlcyc7XG5pbXBvcnQgeyBDdXJyZW50SXRlbXNGb3JtYXRGbiwgUGFnaW5hdGlvbkFsaWduIH0gZnJvbSAnLi4vdGFibGUtcGFnaW5hdGlvbi90YWJsZS1wYWdpbmF0aW9uLnR5cGVzJztcbmltcG9ydCB7IENvbXBvbmVudENvbG9yLCBTaW1wbGVDb21wb25lbnRDb2xvciB9IGZyb20gJy4uL3R5cGVzL2NvbG9ycy50eXBlcyc7XG5pbXBvcnQgeyBBcmRUYWJsZVJvdywgSGVhZGVyQ2VsbCwgVGFibGVJdGVtU3RvcmFnZSwgVGFibGVJdGVtU3RvcmFnZUhvc3QgfSBmcm9tICcuL3RhYmxlLWl0ZW0tc3RvcmFnZSc7XG5pbXBvcnQge1xuICAgIEFyZGl1bVRhYmxlQ2FwdGlvblRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIEFyZGl1bVRhYmxlQ2hlY2tib3hUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBBcmRpdW1UYWJsZUhlYWRlckNoZWNrYm94VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgQXJkaXVtVGFibGVUZW1wbGF0ZURpcmVjdGl2ZSxcbn0gZnJvbSAnLi90YWJsZS5kaXJlY3RpdmVzJztcbmltcG9ydCB7XG4gICAgU29ydFR5cGUsXG4gICAgVGFibGVBbGlnblR5cGUsXG4gICAgVGFibGVBcHBlYXJhbmNlLFxuICAgIFRhYmxlQ2FwdGlvbkNvbnRleHQsXG4gICAgVGFibGVDaGVja2JveENvbnRleHQsXG4gICAgVGFibGVEYXRhQ29sdW1uLFxuICAgIFRhYmxlSGVhZGVyQ2hlY2tib3hDb250ZXh0LFxuICAgIFRhYmxlSGVhZGVyQ29udGV4dCxcbiAgICBUYWJsZVBhZ2luYXRpb25TdHJhdGVneSxcbiAgICBUYWJsZVN1YmhlYWRlcixcbiAgICBUYWJsZVZhcmlhbnQsXG4gICAgVGFibGVTdWJoZWFkZXJDb250ZXh0LFxufSBmcm9tICcuL3RhYmxlLnR5cGVzJztcbmltcG9ydCB7IGlzVGFibGVTdWJoZWFkZXIgfSBmcm9tICcuL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcmQtdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcmRpdW1UYWJsZUNvbXBvbmVudCBleHRlbmRzIF9Gb2N1c2FibGVDb21wb25lbnRCYXNlIGltcGxlbWVudHMgVGFibGVJdGVtU3RvcmFnZUhvc3QsIEFmdGVyQ29udGVudEluaXQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2l0ZW1TdG9yYWdlID0gbmV3IFRhYmxlSXRlbVN0b3JhZ2UodGhpcyk7XG5cbiAgICByZWFkb25seSBERUZBVUxUUyA9IHtcbiAgICAgICAgcm93RGlzYWJsZWRGcm9tOiAnZGlzYWJsZWQnLFxuICAgICAgICByb3dCb2xkRnJvbTogJ2JvbGQnLFxuICAgIH07XG5cbiAgICBASW5wdXQoKSByb3dEaXNhYmxlZEZyb20/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcm93Qm9sZEZyb20/OiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9pbnZlcnRSb3dEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGludmVydFJvd0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52ZXJ0Um93RGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCBpbnZlcnRSb3dEaXNhYmxlZCh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5faW52ZXJ0Um93RGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW52ZXJ0Um93Qm9sZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGludmVydFJvd0JvbGQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZlcnRSb3dCb2xkO1xuICAgIH1cbiAgICBzZXQgaW52ZXJ0Um93Qm9sZCh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5faW52ZXJ0Um93Qm9sZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZWxlY3RhYmxlUm93czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNlbGVjdGFibGVSb3dzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0YWJsZVJvd3M7XG4gICAgfVxuICAgIHNldCBzZWxlY3RhYmxlUm93cyh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0YWJsZVJvd3MgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgQElucHV0KCkgY2FwdGlvbj86IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGlzTG9hZGluZz86IGJvb2xlYW47XG4gICAgQElucHV0KCkgbG9hZGluZ1Byb2dyZXNzPzogbnVtYmVyOyAvL1RPRE8gYWRkIHByb2dyZXNzIGJhclxuXG4gICAgLy8hIGFwcGVhcmFuY2VcbiAgICBASW5wdXQoKSBhcHBlYXJhbmNlOiBUYWJsZUFwcGVhcmFuY2UgPSBUYWJsZUFwcGVhcmFuY2UuU3Ryb25nO1xuICAgIEBJbnB1dCgpIHZhcmlhbnQ6IFRhYmxlVmFyaWFudCA9IFRhYmxlVmFyaWFudC5Sb3VuZGVkO1xuICAgIEBJbnB1dCgpIGNvbG9yOiBDb21wb25lbnRDb2xvciA9IENvbXBvbmVudENvbG9yLlByaW1hcnk7XG4gICAgQElucHV0KCkgYWxpZ246IFRhYmxlQWxpZ25UeXBlID0gVGFibGVBbGlnblR5cGUuQ2VudGVyTGVmdDtcbiAgICBASW5wdXQoKSBoZWFkZXJBbGlnbjogVGFibGVBbGlnblR5cGUgPSBUYWJsZUFsaWduVHlwZS5DZW50ZXJMZWZ0O1xuXG4gICAgcHJpdmF0ZSBfY29tcGFjdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGNvbXBhY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21wYWN0O1xuICAgIH1cbiAgICBzZXQgY29tcGFjdCh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fY29tcGFjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF96ZWJyYTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHplYnJhKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5femVicmE7XG4gICAgfVxuICAgIHNldCB6ZWJyYSh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5femVicmEgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RpY2t5SGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgc3RpY2t5SGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RpY2t5SGVhZGVyO1xuICAgIH1cbiAgICBzZXQgc3RpY2t5SGVhZGVyKHY6IGFueSkge1xuICAgICAgICB0aGlzLl9zdGlja3lIZWFkZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgZ2V0IG5nQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgYGFyZC1hcHBlYXJhbmNlLSR7dGhpcy5hcHBlYXJhbmNlfWAsXG4gICAgICAgICAgICBgYXJkLXZhcmlhbnQtJHt0aGlzLnZhcmlhbnR9YCxcbiAgICAgICAgICAgIGBhcmQtY29sb3ItJHt0aGlzLmNvbG9yfWAsXG4gICAgICAgICAgICBgYXJkLWFsaWduLSR7dGhpcy5hbGlnbn1gLFxuICAgICAgICAgICAgYGFyZC1oZWFkZXItYWxpZ24tJHt0aGlzLmhlYWRlckFsaWdufWAsXG4gICAgICAgICAgICB0aGlzLmNvbXBhY3QgPyAnYXJkLWNvbXBhY3QnIDogJycsXG4gICAgICAgICAgICB0aGlzLnplYnJhID8gJ2FyZC16ZWJyYS10YWJsZScgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZVJvd3MgPyAnYXJkLXNlbGVjdGFibGUtcm93cycgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuc3RpY2t5SGVhZGVyID8gJ2FyZC1zdGlja3ktaGVhZGVyJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPyAnYXJkLXRhYmxlLWxvYWRpbmcnIDogJycsXG4gICAgICAgIF0uam9pbignICcpO1xuICAgIH1cblxuICAgIC8vISBwYWdpbmF0aW9uXG4gICAgcHJpdmF0ZSBfcGFnaW5hdGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgcGFnaW5hdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGVkO1xuICAgIH1cbiAgICBzZXQgcGFnaW5hdGVkKHY6IGFueSkge1xuICAgICAgICB0aGlzLl9wYWdpbmF0ZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgQElucHV0KCkgcGFnaW5hdGlvblN0cmF0ZWd5OiBUYWJsZVBhZ2luYXRpb25TdHJhdGVneSA9IFRhYmxlUGFnaW5hdGlvblN0cmF0ZWd5Lk5vb3A7XG5cbiAgICBASW5wdXQoKSBwYWdpbmF0aW9uT3B0aW9uczogbnVtYmVyW10gfCB7IHZhbHVlOiBudW1iZXI7IGxhYmVsOiBzdHJpbmcgfVtdID0gWzEwLCAyNSwgNTBdO1xuICAgIEBJbnB1dCgpIHRvdGFsSXRlbXM/OiBudW1iZXI7XG4gICAgQElucHV0KCkgcGFnaW5hdGlvbkNvbG9yOiBDb21wb25lbnRDb2xvciA9IENvbXBvbmVudENvbG9yLk5vbmU7XG4gICAgQElucHV0KCkgcGFnaW5hdGlvbkFsaWduOiBQYWdpbmF0aW9uQWxpZ24gPSBQYWdpbmF0aW9uQWxpZ24uU3BsaXQ7XG4gICAgQElucHV0KCkgaXRlbXNQZXJQYWdlVGV4dDogc3RyaW5nID0gJ0l0ZW1zIHBlciBwYWdlOic7XG4gICAgQElucHV0KCkgY3VycmVudEl0ZW1zRm9ybWF0Rm46IEN1cnJlbnRJdGVtc0Zvcm1hdEZuID0gKHsgY3VycmVudEl0ZW1zRmlyc3QsIGN1cnJlbnRJdGVtc0xhc3QsIHRvdGFsSXRlbXMgfSkgPT4ge1xuICAgICAgICByZXR1cm4gYCR7Y3VycmVudEl0ZW1zRmlyc3R9IOKAkyAke2N1cnJlbnRJdGVtc0xhc3R9IG9mICR7dG90YWxJdGVtc31gO1xuICAgIH07XG5cbiAgICBwcml2YXRlIF9wYWdlRmlsbFJlbWFpbmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHBhZ2VGaWxsUmVtYWluaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnZUZpbGxSZW1haW5pbmc7XG4gICAgfVxuICAgIHNldCBwYWdlRmlsbFJlbWFpbmluZyh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fcGFnZUZpbGxSZW1haW5pbmcgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFnaW5hdGlvbkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgcGFnaW5hdGlvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbkRpc2FibGVkO1xuICAgIH1cbiAgICBzZXQgcGFnaW5hdGlvbkRpc2FibGVkKHY6IGFueSkge1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uRGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXNlRmlyc3RMYXN0QnV0dG9uczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHVzZUZpcnN0TGFzdEJ1dHRvbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VGaXJzdExhc3RCdXR0b25zO1xuICAgIH1cbiAgICBzZXQgdXNlRmlyc3RMYXN0QnV0dG9ucyh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fdXNlRmlyc3RMYXN0QnV0dG9ucyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pdGVtc1BlclBhZ2U6IG51bWJlciA9IDUwO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGl0ZW1zUGVyUGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNQZXJQYWdlO1xuICAgIH1cbiAgICBzZXQgaXRlbXNQZXJQYWdlKHY6IGFueSkge1xuICAgICAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2KTtcbiAgICB9XG4gICAgQE91dHB1dCgpIGl0ZW1zUGVyUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgcHJpdmF0ZSBfcGFnZTogbnVtYmVyID0gMTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBwYWdlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdlO1xuICAgIH1cbiAgICBzZXQgcGFnZSh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fcGFnZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHYpO1xuICAgIH1cbiAgICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgZ2V0IGlzRGVmaW5lZFRvdGFsSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodGhpcy5wYWdpbmF0aW9uU3RyYXRlZ3kgPT0gVGFibGVQYWdpbmF0aW9uU3RyYXRlZ3kuTm9vcCAmJiBpc0RlZmluZWQodGhpcy50b3RhbEl0ZW1zKSkgfHwgdGhpcy5wYWdpbmF0aW9uU3RyYXRlZ3kgIT0gVGFibGVQYWdpbmF0aW9uU3RyYXRlZ3kuTm9vcFxuICAgICAgICApO1xuICAgIH1cbiAgICBnZXQgY2FuRGlzcGxheVBhZ2luYXRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIC8vcHJldHRpZXItaWdub3JlXG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlZCAmJiB0aGlzLmlzRGVmaW5lZFRvdGFsSXRlbXM7XG4gICAgfVxuXG4gICAgLy8hIGl0ZW0gc3RvcmFnZSBnZXR0ZXJzXG4gICAgZ2V0IGhlYWRlckNlbGxzKCk6IEhlYWRlckNlbGxbXVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1TdG9yYWdlLmhlYWRlckNlbGxzO1xuICAgIH1cbiAgICBnZXQgZGF0YVJvd3MoKTogQXJkVGFibGVSb3dbXSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcmRUYWJsZVJvd1tdID0gdGhpcy5faXRlbVN0b3JhZ2UucGFnaW5hdGVkSXRlbXM7XG5cbiAgICAgICAgaWYgKCF0aGlzLnBhZ2VGaWxsUmVtYWluaW5nKSByZXR1cm4gaXRlbXM7XG4gICAgICAgIGlmICghdGhpcy5pc0RlZmluZWRUb3RhbEl0ZW1zKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJzxhcmQtdGFibGU+IHJlcXVpcmVzIFt0b3RhbEl0ZW1zXSB0byBiZSBkZWZpbmVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhZ2UgPT0gMSkgcmV0dXJuIGl0ZW1zO1xuICAgICAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoOyBpIDwgdGhpcy5pdGVtc1BlclBhZ2U7IGkrKykge1xuICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaXRlbURhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgICAgICAgZGF0YUNvbHVtbnM6IFtdLFxuICAgICAgICAgICAgICAgIGlzRW1wdHk6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgLy8hIGNvbHVtbnMvZGF0YSBzZXR0ZXJzXG4gICAgQElucHV0KClcbiAgICBzZXQgY29sdW1ucyh2OiAoVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIpW10pIHtcbiAgICAgICAgdGhpcy5faXRlbVN0b3JhZ2Uuc2V0Q29sdW1ucyh2KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZGF0YTogYW55W10gPSBbXTtcbiAgICBASW5wdXQoKVxuICAgIHNldCBkYXRhKHY6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSB2O1xuICAgICAgICB0aGlzLl9pdGVtU3RvcmFnZS5zZXRJdGVtcyh2KTtcbiAgICB9XG4gICAgZ2V0IGRhdGEoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90cmVhdERhdGFTb3VyY2VBc1N0cmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHRyZWF0RGF0YVNvdXJjZUFzU3RyaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJlYXREYXRhU291cmNlQXNTdHJpbmc7XG4gICAgfVxuICAgIHNldCB0cmVhdERhdGFTb3VyY2VBc1N0cmluZyh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5fdHJlYXREYXRhU291cmNlQXNTdHJpbmcgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gICAgfVxuXG4gICAgLy8hIHRlbXBsYXRlc1xuICAgIEBDb250ZW50Q2hpbGQoQXJkaXVtVGFibGVDaGVja2JveFRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgY2hlY2tib3hUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFRhYmxlQ2hlY2tib3hDb250ZXh0PjtcbiAgICBAQ29udGVudENoaWxkKEFyZGl1bVRhYmxlSGVhZGVyQ2hlY2tib3hUZW1wbGF0ZURpcmVjdGl2ZSwge1xuICAgICAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICB9KVxuICAgIGhlYWRlckNoZWNrYm94VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxUYWJsZUhlYWRlckNoZWNrYm94Q29udGV4dD47XG4gICAgQENvbnRlbnRDaGlsZChBcmRpdW1UYWJsZUNhcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIGNhcHRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFRhYmxlQ2FwdGlvbkNvbnRleHQ+O1xuXG4gICAgcHJpdmF0ZSBfaXRlbVRlbXBsYXRlczogeyBba2V5OiBzdHJpbmddOiBUZW1wbGF0ZVJlZjxhbnk+IH0gPSB7fTtcbiAgICBAQ29udGVudENoaWxkcmVuKEFyZGl1bVRhYmxlVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgdGVtcGxhdGVDaGlsZHJlbiE6IFF1ZXJ5TGlzdDxBcmRpdW1UYWJsZVRlbXBsYXRlRGlyZWN0aXZlPjtcblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gQXJyYXkuZnJvbSh0aGlzLnRlbXBsYXRlQ2hpbGRyZW4pO1xuICAgICAgICBmb3IgKGNvbnN0IGluc3RhbmNlIG9mIHRlbXBsYXRlcykge1xuICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoJ1thcmQtdGFibGUtdG1wXSByZXF1aXJlcyBhIHZhbHVlIHRvIGJlIHNwZWNpZmllZC4nKSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9pdGVtVGVtcGxhdGVzW2luc3RhbmNlLm5hbWVdID0gaW5zdGFuY2UudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRIZWFkZXJUZW1wbGF0ZSh0bXA6IHN0cmluZyB8IHsgdGVtcGxhdGU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gfSk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodHlwZW9mIHRtcCA9PSAnc3RyaW5nJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2VsbFRlbXBsYXRlKHRtcC50ZW1wbGF0ZSk7XG4gICAgfVxuICAgIGdldEhlYWRlckNoZWNrYm94Q29sb3IoKTogU2ltcGxlQ29tcG9uZW50Q29sb3Ige1xuICAgICAgICBpZiAodGhpcy5hcHBlYXJhbmNlID09IFRhYmxlQXBwZWFyYW5jZS5TdHJvbmcpIHJldHVybiBTaW1wbGVDb21wb25lbnRDb2xvci5DdXJyZW50Q29sb3I7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yO1xuICAgIH1cbiAgICBnZXRDZWxsVGVtcGxhdGUodG1wPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pik6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgICAgICAvL3JldHVybiB1bmRlZmluZWRcbiAgICAgICAgaWYgKCF0bXApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIC8vcmV0dXJuIHRlbXBsYXRlLCBpZiBpdCBpcyBvbmVcbiAgICAgICAgaWYgKHRtcCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSByZXR1cm4gdG1wO1xuICAgICAgICAvL2NoZWNrIGlmIHRoZSBuYW1lIGNhbiBiZSBmb3VuZFxuICAgICAgICBpZiAoISh0bXAgaW4gdGhpcy5faXRlbVRlbXBsYXRlcykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKGA8YXJkLXRhYmxlPiBlcnJvcjogY2Fubm90IGZpbmQgdGVtcGxhdGUgbmFtZWQgXCIke3RtcH1cImApKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy9yZXR1cm4gdGhlIHRlbXBsYXRlXG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtVGVtcGxhdGVzW3RtcF07XG4gICAgfVxuICAgIGdldENlbGxTdHlsZShjZWxsOiBUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcik6IHN0cmluZyB7XG4gICAgICAgIGlmIChpc1RhYmxlU3ViaGVhZGVyKGNlbGwpKSByZXR1cm4gJ3dpZHRoOnVuc2V0O21pbi13aWR0aDp1bnNldCc7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdHlwZW9mIGNlbGwud2lkdGggPT0gJ251bWJlcicgPyBgJHtjZWxsLndpZHRofXB4YCA6IGNlbGwud2lkdGg7XG4gICAgICAgIGNvbnN0IG1pbldpZHRoID0gdHlwZW9mIGNlbGwubWluV2lkdGggPT0gJ251bWJlcicgPyBgJHtjZWxsLm1pbldpZHRofXB4YCA6IGNlbGwubWluV2lkdGg7XG4gICAgICAgIHJldHVybiBbYHdpZHRoOiR7d2lkdGggPz8gJ3Vuc2V0J31gLCBgbWluLXdpZHRoOiR7bWluV2lkdGggPz8gJ3Vuc2V0J31gXS5qb2luKCc7Jyk7XG4gICAgfVxuXG4gICAgLy8hIGNsaWNrICYgaG92ZXIgaGFuZGxlcnNcbiAgICBvbkNoZWNrYm94Q2xpY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnRvZ2dsZVJvd1NlbGVjdGVkKGluZGV4KTtcbiAgICB9XG4gICAgb25Sb3dDbGljayhpbmRleDogbnVtYmVyLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0YWJsZVJvd3MpIHJldHVybjtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMudG9nZ2xlUm93U2VsZWN0ZWQoaW5kZXgpO1xuICAgIH1cbiAgICBvblJvd01vdXNlT3ZlcihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgb25Sb3dNb3VzZUVudGVyKGluZGV4OiBudW1iZXIsIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RhYmxlUm93cykgcmV0dXJuO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5faXRlbVN0b3JhZ2UuaGlnaGxpZ2h0U2luZ2xlSXRlbShpbmRleCk7XG4gICAgfVxuICAgIG9uUm93TW91c2VMZWF2ZShpbmRleDogbnVtYmVyLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0YWJsZVJvd3MpIHJldHVybjtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuX2l0ZW1TdG9yYWdlLnVuaGlnaGxpZ2h0SXRlbShpbmRleCk7XG4gICAgfVxuXG4gICAgLy8hIHNlbGVjdCBoYW5kbGVyc1xuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiBhIHJvdyBpbiB0aGUgdGFibGUuXG4gICAgICogQHBhcmFtIHNlbGVjdGVkIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSByb3cgaXMgY3VycmVudGx5IHNlbGVjdGVkLlxuICAgICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIHJvdyBpbiB0aGUgdGFibGUuXG4gICAgICovXG4gICAgdG9nZ2xlUm93U2VsZWN0ZWQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5faXRlbVN0b3JhZ2UuaXNJdGVtU2VsZWN0ZWQoaW5kZXgpKSB7XG4gICAgICAgICAgICBjb25zdCB1bnNlbGVjdGVkID0gdGhpcy5faXRlbVN0b3JhZ2UudW5zZWxlY3RJdGVtKGluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudW5zZWxlY3RSb3dFdmVudC5lbWl0KHVuc2VsZWN0ZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgW3NlbGVjdGVkLCBmYWlsZWRdID0gdGhpcy5faXRlbVN0b3JhZ2Uuc2VsZWN0SXRlbShpbmRleCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJvd0V2ZW50LmVtaXQoc2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5mYWlsZWRTZWxlY3RSb3dFdmVudC5lbWl0KGZhaWxlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZW1pdFNlbGVjdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgYWxsIHJvd3MgaW4gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIHRvZ2dsZUFsbFJvd3NTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1TdG9yYWdlLmFyZUFsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBjb25zdCB1bnNlbGVjdGVkID0gdGhpcy5faXRlbVN0b3JhZ2UudW5zZWxlY3RBbGwoKTtcbiAgICAgICAgICAgIHRoaXMudW5zZWxlY3RSb3dFdmVudC5lbWl0KHVuc2VsZWN0ZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgW3NlbGVjdGVkLCBmYWlsZWRdID0gdGhpcy5faXRlbVN0b3JhZ2Uuc2VsZWN0QWxsKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJvd0V2ZW50LmVtaXQoc2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5mYWlsZWRTZWxlY3RSb3dFdmVudC5lbWl0KGZhaWxlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZW1pdFNlbGVjdCgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9lbWl0U2VsZWN0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2ID0gdGhpcy5faXRlbVN0b3JhZ2UudmFsdWU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlRXZlbnQuZW1pdCh2KTtcbiAgICB9XG4gICAgaXNDZWxsQ2hlY2tib3goY2VsbDogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgY2VsbCA9PSAnb2JqZWN0JyAmJiAnX2FyZENoZWNrYm94JyBpbiBjZWxsICYmICdpbmRleCcgaW4gY2VsbDtcbiAgICB9XG4gICAgaXNIZWFkZXJDZWxsQ2hlY2tib3goY2VsbDogSGVhZGVyQ2VsbCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRhQ2VsbCA9IGNlbGwuY2VsbDtcbiAgICAgICAgaWYgKGlzVGFibGVTdWJoZWFkZXIoZGF0YUNlbGwpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YUNlbGwuZGF0YVNvdXJjZSA9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gZGF0YUNlbGwuZGF0YVNvdXJjZS50eXBlID09ICdjaGVja2JveCc7XG4gICAgfVxuICAgIGlzSGVhZGVyQ2VsbFNvcnRhYmxlKGNlbGw6IEhlYWRlckNlbGwpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZGF0YUNlbGwgPSBjZWxsLmNlbGw7XG4gICAgICAgIGlmIChpc1RhYmxlU3ViaGVhZGVyKGRhdGFDZWxsKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gZGF0YUNlbGwuc29ydGFibGUgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgQE91dHB1dCgnc2VsZWN0ZWRSb3dzQ2hhbmdlJykgc2VsZWN0ZWRSb3dzQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuICAgIEBPdXRwdXQoJ2ZhaWxlZFNlbGVjdFJvdycpIGZhaWxlZFNlbGVjdFJvd0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcbiAgICBAT3V0cHV0KCdzZWxlY3RSb3cnKSBzZWxlY3RSb3dFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gICAgQE91dHB1dCgndW5zZWxlY3RSb3cnKSB1bnNlbGVjdFJvd0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIC8vISBjb250ZXh0c1xuICAgIGdldEhlYWRlckNvbnRleHQoY2VsbDogVGFibGVEYXRhQ29sdW1uLCBpbmRleDogbnVtYmVyKTogVGFibGVIZWFkZXJDb250ZXh0IHwgbnVsbDtcbiAgICBnZXRIZWFkZXJDb250ZXh0KGNlbGw6IFRhYmxlU3ViaGVhZGVyLCBpbmRleDogbnVtYmVyKTogVGFibGVTdWJoZWFkZXJDb250ZXh0IHwgbnVsbDtcbiAgICBnZXRIZWFkZXJDb250ZXh0KGNlbGw6IFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyLCBpbmRleDogbnVtYmVyKTogVGFibGVIZWFkZXJDb250ZXh0IHwgVGFibGVTdWJoZWFkZXJDb250ZXh0IHwgbnVsbDtcbiAgICBnZXRIZWFkZXJDb250ZXh0KGNlbGw6IFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyLCBpbmRleDogbnVtYmVyKTogVGFibGVIZWFkZXJDb250ZXh0IHwgVGFibGVTdWJoZWFkZXJDb250ZXh0IHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgY2VsbC5oZWFkZXIgIT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoaXNUYWJsZVN1YmhlYWRlcihjZWxsKSlcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjZWxsLmhlYWRlcixcbiAgICAgICAgICAgICAgICBoZWFkZXI6IGNlbGwuaGVhZGVyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogY2VsbC5oZWFkZXIsXG4gICAgICAgICAgICBoZWFkZXI6IGNlbGwuaGVhZGVyLFxuICAgICAgICAgICAgc29ydGFibGU6IGNlbGwuc29ydGFibGUgPz8gZmFsc2UsXG4gICAgICAgICAgICBzb3J0VHlwZTogdGhpcy5faXRlbVN0b3JhZ2UuZ2V0Q29sdW1uU29ydFR5cGUoaW5kZXgpLFxuICAgICAgICAgICAgb25UcmlnZ2VyU29ydDogKGV2ZW50PzogRXZlbnQpID0+IHRoaXMuX2l0ZW1TdG9yYWdlLnRvZ2dsZUN1cnJlbnRTb3J0Q29sdW1uKGluZGV4KSxcbiAgICAgICAgICAgIG9uVHJpZ2dlclJlc2V0U29ydDogKGV2ZW50PzogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pdGVtU3RvcmFnZS5yZXNldFNvcnQoKTtcbiAgICAgICAgICAgICAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBnZXRIZWFkZXJDaGVja2JveENvbnRleHQoKTogVGFibGVIZWFkZXJDaGVja2JveENvbnRleHQge1xuICAgICAgICBsZXQgc3RhdGU6IENoZWNrYm94U3RhdGUgPSBDaGVja2JveFN0YXRlLlVuc2VsZWN0ZWQ7XG4gICAgICAgIGlmICh0aGlzLl9pdGVtU3RvcmFnZS5pc0FueUl0ZW1TZWxlY3RlZCkge1xuICAgICAgICAgICAgc3RhdGUgPSBDaGVja2JveFN0YXRlLkluZGV0ZXJtaW5hdGU7XG4gICAgICAgICAgICBpZiAodGhpcy5faXRlbVN0b3JhZ2UuYXJlQWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IENoZWNrYm94U3RhdGUuU2VsZWN0ZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogc3RhdGUsXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVBbGxSb3dzU2VsZWN0ZWQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldENoZWNrYm94Q29udGV4dChpbmRleDogbnVtYmVyKTogVGFibGVDaGVja2JveENvbnRleHQge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5faXRlbVN0b3JhZ2UuaXRlbXMuZmluZCh2ID0+IHYuaW5kZXggPT0gaW5kZXgpITtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBpdGVtLnNlbGVjdGVkID8/IGZhbHNlO1xuICAgICAgICBjb25zdCBkaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPz8gZmFsc2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHNlbGVjdGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoZWNrYm94Q2xpY2soaW5kZXgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCI8dGFibGUgY2xhc3M9XCJhcmQtdGFibGVcIiBbbmdDbGFzc109XCJuZ0NsYXNzZXNcIj5cclxuICAgIDxjYXB0aW9uXHJcbiAgICAgICAgKm5nSWY9XCJjYXB0aW9uXCJcclxuICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9fY2FwdGlvblwiXHJcbiAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFyZC10YWJsZV9fY2FwdGlvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2FwdGlvblRlbXBsYXRlIGxldC1jYXB0aW9uVGV4dD5cclxuICAgICAgICAgICAgICAgIHt7IGNhcHRpb25UZXh0IH19XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FwdGlvblRlbXBsYXRlID8/IGRlZmF1bHRDYXB0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjYXB0aW9uIH1cIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9jYXB0aW9uPlxyXG4gICAgPHRoZWFkIGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXJcIj5cclxuICAgICAgICA8dHIgY2xhc3M9XCJhcmQtdGFibGVfX2hlYWRlci1yb3dcIiAqbmdGb3I9XCJsZXQgcm93IG9mIGhlYWRlckNlbGxzXCI+XHJcbiAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNlbGwgb2Ygcm93OyBsZXQgaW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9faGVhZGVyLWNlbGxcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY2VsbC5jZWxsLmNlbGxDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXRhYmxlX19jaGVja2JveC1jZWxsXT1cImlzSGVhZGVyQ2VsbENoZWNrYm94KGNlbGwpXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY2VsbC5jb2xzcGFuXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwiY2VsbC5yb3dzcGFuXCJcclxuICAgICAgICAgICAgICAgIFtzY29wZV09XCJjZWxsLmNvbHNwYW4gPiAxID8gJ2NvbGdyb3VwJyA6ICdjb2wnXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19jZWxsLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFyZC10YWJsZV9fc29ydGFibGVdPVwiaXNIZWFkZXJDZWxsU29ydGFibGUoY2VsbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjZWxsLndpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWluV2lkdGhdPVwiY2VsbC5taW5XaWR0aFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzSGVhZGVyQ2VsbENoZWNrYm94KGNlbGwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEhlYWRlckNoZWNrYm94VGVtcGxhdGUgbGV0LXN0YXRlIGxldC1vbkNoYW5nZT1cIm9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJkLWNoZWNrYm94IFt0YWJJbmRleF09XCJpc0xvYWRpbmcgPyAtMSA6IHRhYkluZGV4XCIgW3N0YXRlXT1cInN0YXRlXCIgW2NvbG9yXT1cImdldEhlYWRlckNoZWNrYm94Q29sb3IoKVwiIHVuc2VsZWN0ZWRDb2xvcj1cImN1cnJlbnRDb2xvclwiIChjaGFuZ2UpPVwib25DaGFuZ2UoKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyQ2hlY2tib3hUZW1wbGF0ZSA/PyBkZWZhdWx0SGVhZGVyQ2hlY2tib3hUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0SGVhZGVyQ2hlY2tib3hDb250ZXh0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNIZWFkZXJDZWxsQ2hlY2tib3goY2VsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZGVmYXVsdEhlYWRlckNlbGxUZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0LWNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldC1zb3J0YWJsZT1cInNvcnRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldC1zb3J0VHlwZT1cInNvcnRUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldC1vblRyaWdnZXJTb3J0PVwib25UcmlnZ2VyU29ydFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQtb25UcmlnZ2VyUmVzZXRTb3J0PVwib25UcmlnZ2VyUmVzZXRTb3J0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXItdGVtcGxhdGUtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXNvcnRhYmxlXT1cInNvcnRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLW5vbnNvcnRhYmxlXT1cIiFzb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9faGVhZGVyLWNvbnRlbnQtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRyaWdnZXJTb3J0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5Fc2MpPVwib25UcmlnZ2VyUmVzZXRTb3J0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFyZC10YWJsZV9faGVhZGVyLWNvbnRlbnRcIj57eyBjb250ZW50IH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtdGFibGVfX2hlYWRlci1zb3J0LWljb25cIiAqbmdJZj1cInNvcnRUeXBlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmQtaWNvbiAqbmdJZj1cInNvcnRUeXBlID09ICdhc2NlbmRpbmcnXCI+c291dGg8L2FyZC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZC1pY29uICpuZ0lmPVwic29ydFR5cGUgPT0gJ2Rlc2NlbmRpbmcnXCI+bm9ydGg8L2FyZC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXItY29udGVudC1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFzb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXItY29udGVudFwiPnt7IGNvbnRlbnQgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRIZWFkZXJUZW1wbGF0ZShjZWxsLmNlbGwuaGVhZGVyKSA/PyBkZWZhdWx0SGVhZGVyQ2VsbFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRIZWFkZXJDb250ZXh0KGNlbGwuY2VsbCwgaW5kZXgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RoZWFkPlxyXG4gICAgPHRib2R5IGNsYXNzPVwiYXJkLXRhYmxlX19ib2R5XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGFSb3dzOyBsZXQgcm93SW5kZXggPSBpbmRleDtcIj5cclxuICAgICAgICAgICAgPHRyICpuZ0lmPVwicm93LmlzRW1wdHlcIiBjbGFzcz1cImFyZC10YWJsZV9fZW1wdHktcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhcmQtdGFibGVfX2VtcHR5LWNlbGxcIiBjb2xzcGFuPVwiOTk5OVwiPjwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhcm93LmlzRW1wdHlcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhcmQtdGFibGVfX2JvZHktcm93XCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5hcmQtdGFibGVfX3NlbGVjdGVkLXJvd109XCJyb3cuc2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFyZC10YWJsZV9faGlnaGxpZ2h0ZWQtcm93XT1cInJvdy5oaWdobGlnaHRlZFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXRhYmxlX19kaXNhYmxlZC1yb3ddPVwicm93LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5hcmQtdGFibGVfX2JvbGQtcm93XT1cInJvdy5ib2xkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvd0luZGV4LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwib25Sb3dNb3VzZU92ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvblJvd01vdXNlRW50ZXIocm93SW5kZXgsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25Sb3dNb3VzZUxlYXZlKHJvd0luZGV4LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2VsbCBvZiByb3cuZGF0YTsgbGV0IGNlbGxJbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsVG1wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9fY2VsbC1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImdldENlbGxTdHlsZShyb3cuZGF0YUNvbHVtbnNbY2VsbEluZGV4XSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDZWxsQ2hlY2tib3goY2VsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDaGVja2JveFRlbXBsYXRlIGxldC1pc0NoZWNrZWQgbGV0LW9uQ2hhbmdlPVwib25DaGFuZ2VcIiBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJkLWNoZWNrYm94IFt0YWJJbmRleF09XCJpc0xvYWRpbmcgPyAtMSA6IHRhYkluZGV4XCIgW3NlbGVjdGVkXT1cImlzQ2hlY2tlZFwiIFtjb2xvcl09XCJjb2xvclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIChjaGFuZ2UpPVwib25DaGFuZ2UoKVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGVja2JveFRlbXBsYXRlID8/IGRlZmF1bHRDaGVja2JveFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldENoZWNrYm94Q29udGV4dChyb3dJbmRleClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNDZWxsQ2hlY2tib3goY2VsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsVGVtcGxhdGUgbGV0LWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbnRlbnQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q2VsbFRlbXBsYXRlKHJvdy5kYXRhQ29sdW1uc1tjZWxsSW5kZXhdLnRlbXBsYXRlKSA/PyBkZWZhdWx0Q2VsbFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjZWxsIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcm93LmRhdGFDb2x1bW5zW2NlbGxJbmRleF0uaXNSb3dIZWFkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9fYm9keS1jZWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicm93LmRhdGFDb2x1bW5zW2NlbGxJbmRleF0uY2VsbENsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFyZC10YWJsZV9fY2hlY2tib3gtY2VsbF09XCJpc0NlbGxDaGVja2JveChjZWxsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRtcFwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyb3cuZGF0YUNvbHVtbnNbY2VsbEluZGV4XS5pc1Jvd0hlYWRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19ib2R5LWNlbGwgYXJkLXRhYmxlX19yb3ctaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGU9XCJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJyb3cuZGF0YUNvbHVtbnNbY2VsbEluZGV4XS5jZWxsQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXRhYmxlX19jaGVja2JveC1jZWxsXT1cImlzQ2VsbENoZWNrYm94KGNlbGwpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjZWxsVG1wXCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3Rib2R5PlxyXG4gICAgPHRmb290IGNsYXNzPVwiYXJkLXRhYmxlX19mb290XCIgKm5nSWY9XCJjYW5EaXNwbGF5UGFnaW5hdGlvblwiPlxyXG4gICAgICAgIDx0ciBjbGFzcz1cImFyZC10YWJsZV9fZm9vdC1yb3dcIj5cclxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYXJkLXRhYmxlX19wYWdpbmF0aW9uLWNlbGxcIiBjb2xzcGFuPVwiOTk5OVwiPlxyXG4gICAgICAgICAgICAgICAgPGFyZC10YWJsZS1wYWdpbmF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicGFnaW5hdGlvbk9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFsocGFnZSldPVwicGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2luYXRpb25EaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhpdGVtc1BlclBhZ2UpXT1cIml0ZW1zUGVyUGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsaWduXT1cInBhZ2luYXRpb25BbGlnblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtc1BlclBhZ2VUZXh0XT1cIml0ZW1zUGVyUGFnZVRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXJyZW50SXRlbXNGb3JtYXRGbl09XCJjdXJyZW50SXRlbXNGb3JtYXRGblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW1zUGVyUGFnZUNoYW5nZSk9XCJpdGVtc1BlclBhZ2VDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJwYWdlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC9hcmQtdGFibGUtcGFnaW5hdGlvbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC90Zm9vdD5cclxuPC90YWJsZT4iXX0=