@updevs/components 1.0.0-alpha.6 → 1.0.0-alpha.60

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 (693) hide show
  1. package/README.md +1 -11
  2. package/assets/styles/_bootstrap-components.scss +18 -1
  3. package/assets/styles/_core.scss +9 -0
  4. package/assets/styles/_debug.scss +49 -0
  5. package/assets/styles/_props.scss +91 -0
  6. package/assets/styles/_seven-columns.scss +73 -0
  7. package/assets/styles/_updevs.scss +16 -0
  8. package/assets/styles/_utilities-marketing.scss +209 -0
  9. package/assets/styles/_utilities.scss +127 -92
  10. package/assets/styles/_variables-dark.scss +8 -6
  11. package/assets/styles/_variables.scss +325 -256
  12. package/assets/styles/helpers/_index.scss +143 -0
  13. package/assets/styles/layout/_core.scss +3 -2
  14. package/assets/styles/layout/_dark.scss +40 -35
  15. package/assets/styles/layout/_footer.scss +1 -1
  16. package/assets/styles/layout/_navbar.scss +31 -19
  17. package/assets/styles/layout/_page.scss +6 -5
  18. package/assets/styles/layout/_root.scss +26 -34
  19. package/assets/styles/marketing/_browser.scss +67 -0
  20. package/assets/styles/marketing/_core.scss +8 -0
  21. package/assets/styles/marketing/_filters.scss +0 -0
  22. package/assets/styles/marketing/_hero.scss +70 -0
  23. package/assets/styles/marketing/_pricing.scss +111 -0
  24. package/assets/styles/marketing/_sections.scss +124 -0
  25. package/assets/styles/marketing/_shape.scss +31 -0
  26. package/assets/styles/mixins/_functions.scss +53 -0
  27. package/assets/styles/mixins/_mixins.scss +9 -9
  28. package/assets/styles/ui/_accordion.scss +165 -11
  29. package/assets/styles/ui/_alerts.scss +80 -38
  30. package/assets/styles/ui/_avatars.scss +36 -9
  31. package/assets/styles/ui/_badges.scss +47 -13
  32. package/assets/styles/ui/_button-group.scss +1 -1
  33. package/assets/styles/ui/_buttons.scss +33 -37
  34. package/assets/styles/ui/_calendars.scss +2 -2
  35. package/assets/styles/ui/_cards.scss +9 -0
  36. package/assets/styles/ui/_carousel.scss +1 -1
  37. package/assets/styles/ui/_charts.scss +1 -1
  38. package/assets/styles/ui/_chat.scss +38 -0
  39. package/assets/styles/ui/_close.scss +54 -1
  40. package/assets/styles/ui/_datagrid.scss +1 -1
  41. package/assets/styles/ui/_dropdowns.scss +3 -0
  42. package/assets/styles/ui/_empty.scss +0 -5
  43. package/assets/styles/ui/_flags.scss +2 -2
  44. package/assets/styles/ui/_forms.scss +33 -7
  45. package/assets/styles/ui/_grid.scss +1 -1
  46. package/assets/styles/ui/_icons.scss +1 -1
  47. package/assets/styles/ui/_images.scss +4 -0
  48. package/assets/styles/ui/_lists.scss +12 -16
  49. package/assets/styles/ui/_loaders.scss +1 -1
  50. package/assets/styles/ui/_markdown.scss +15 -4
  51. package/assets/styles/ui/_modals.scss +2 -2
  52. package/assets/styles/ui/_nav.scss +17 -3
  53. package/assets/styles/ui/_offcanvas.scss +2 -2
  54. package/assets/styles/ui/_pagination.scss +2 -0
  55. package/assets/styles/ui/_payments.scss +1 -1
  56. package/assets/styles/ui/_placeholder.scss +1 -1
  57. package/assets/styles/ui/_progress.scss +1 -1
  58. package/assets/styles/ui/_ribbons.scss +1 -0
  59. package/assets/styles/ui/_segmented.scss +101 -0
  60. package/assets/styles/ui/_signature.scss +15 -0
  61. package/assets/styles/ui/_social.scss +52 -0
  62. package/assets/styles/ui/_status.scss +1 -1
  63. package/assets/styles/ui/_steps.scss +5 -1
  64. package/assets/styles/ui/_switch-icon.scss +1 -1
  65. package/assets/styles/ui/_tables.scss +27 -1
  66. package/assets/styles/ui/_tags.scss +1 -1
  67. package/assets/styles/ui/_timeline.scss +1 -1
  68. package/assets/styles/ui/_toasts.scss +0 -1
  69. package/assets/styles/ui/_tracking.scss +1 -1
  70. package/assets/styles/ui/_type.scss +169 -8
  71. package/assets/styles/ui/forms/_form-check.scss +1 -1
  72. package/assets/styles/ui/forms/_form-colorinput.scss +1 -1
  73. package/assets/styles/ui/forms/_form-custom.scss +1 -1
  74. package/assets/styles/ui/forms/_form-imagecheck.scss +6 -5
  75. package/assets/styles/ui/forms/_form-selectgroup.scss +2 -2
  76. package/assets/styles/ui/typo/_hr.scss +4 -2
  77. package/assets/styles/utils/_colors.scss +72 -11
  78. package/assets/styles/utils/_opacity.scss +1 -1
  79. package/assets/styles/utils/_scroll.scss +0 -2
  80. package/assets/styles/utils/_sizing.scss +1 -1
  81. package/assets/styles/utils/_text.scss +1 -2
  82. package/assets/styles/vendor/_apexcharts.scss +52 -0
  83. package/assets/styles/vendor/_coloris.scss +72 -0
  84. package/assets/styles/vendor/_dropzone.scss +27 -0
  85. package/assets/styles/vendor/_fslightbox.scss +13 -0
  86. package/assets/styles/vendor/_jsvectormap.scss +47 -0
  87. package/assets/styles/vendor/_litepicker.scss +69 -0
  88. package/assets/styles/vendor/_nouislider.scss +49 -0
  89. package/assets/styles/vendor/_plyr.scss +3 -0
  90. package/assets/styles/vendor/_stars-rating.scss +22 -0
  91. package/assets/styles/vendor/_tom-select.scss +81 -0
  92. package/assets/styles/vendor/_turbo.scss +3 -0
  93. package/assets/styles/vendor/_typed.scss +4 -0
  94. package/assets/styles/vendor/_wysiwyg.scss +46 -0
  95. package/badge/badge-config.model.d.ts +14 -0
  96. package/badge/badge.component.d.ts +23 -0
  97. package/badge/badge.config.d.ts +12 -0
  98. package/badge/index.d.ts +1 -0
  99. package/badge/public-api.d.ts +3 -0
  100. package/badge/upd-badge.module.d.ts +8 -0
  101. package/button/button.component.d.ts +51 -33
  102. package/button/upd-button.module.d.ts +3 -1
  103. package/calendar/calendar.component.d.ts +63 -0
  104. package/calendar/index.d.ts +1 -0
  105. package/calendar/models/calendar-date.model.d.ts +10 -0
  106. package/calendar/models/calendar-month.model.d.ts +7 -0
  107. package/calendar/models/calendar-selected.model.d.ts +5 -0
  108. package/calendar/models/calendar-user-event.model.d.ts +4 -0
  109. package/calendar/models/calendar-year.model.d.ts +6 -0
  110. package/calendar/models/date-range.model.d.ts +22 -0
  111. package/calendar/models/enums/calendar-view.enum.d.ts +5 -0
  112. package/calendar/models/public-api.d.ts +7 -0
  113. package/calendar/public-api.d.ts +5 -0
  114. package/calendar/services/calendar-range-strategy.service.d.ts +35 -0
  115. package/calendar/services/calendar-signals.service.d.ts +24 -0
  116. package/calendar/services/public-api.d.ts +1 -0
  117. package/calendar/types/calendar-view.type.d.ts +1 -0
  118. package/calendar/types/public-api.d.ts +1 -0
  119. package/calendar/upd-calendar.module.d.ts +13 -0
  120. package/card/card.component.d.ts +2 -2
  121. package/card/directives/card-actions.directive.d.ts +1 -2
  122. package/card/directives/card-footer.directive.d.ts +1 -2
  123. package/card/directives/card-header.directive.d.ts +1 -2
  124. package/card/directives/card-image.directive.d.ts +1 -2
  125. package/card/public-api.d.ts +1 -0
  126. package/card/types/public-api.d.ts +5 -0
  127. package/drag-and-drop/drag-and-drop.component.d.ts +26 -0
  128. package/drag-and-drop/index.d.ts +1 -0
  129. package/drag-and-drop/models/drag-and-drop-column.config.d.ts +8 -0
  130. package/drag-and-drop/models/drag-and-drop-column.model.d.ts +10 -0
  131. package/drag-and-drop/models/drag-and-drop-item.d.ts +7 -0
  132. package/drag-and-drop/models/drag-and-drop-item.model.d.ts +13 -0
  133. package/drag-and-drop/models/drag-and-drop.config.d.ts +6 -0
  134. package/drag-and-drop/models/public-api.d.ts +4 -0
  135. package/drag-and-drop/public-api.d.ts +3 -0
  136. package/drag-and-drop/upd-drag-and-drop.module.d.ts +9 -0
  137. package/dropdown/dropdown.component.d.ts +23 -6
  138. package/dropdown/models/dropdown-action-clicked.model.d.ts +6 -0
  139. package/dropdown/models/dropdown-item.d.ts +7 -2
  140. package/dropdown/models/dropdown-item.type.d.ts +1 -1
  141. package/dropdown/models/public-api.d.ts +2 -0
  142. package/dropdown/models/toolbar.type.d.ts +1 -0
  143. package/esm2022/badge/badge-config.model.mjs +14 -0
  144. package/esm2022/badge/badge.component.mjs +48 -0
  145. package/esm2022/badge/badge.config.mjs +2 -0
  146. package/esm2022/badge/index.mjs +2 -0
  147. package/esm2022/badge/public-api.mjs +4 -0
  148. package/esm2022/badge/upd-badge.module.mjs +24 -0
  149. package/esm2022/badge/updevs-components-badge.mjs +5 -0
  150. package/esm2022/button/button.component.mjs +126 -132
  151. package/esm2022/button/index.mjs +1 -1
  152. package/esm2022/button/public-api.mjs +1 -1
  153. package/esm2022/button/upd-button.module.mjs +14 -6
  154. package/esm2022/button/updevs-components-button.mjs +1 -1
  155. package/esm2022/calendar/assets/i18n/en.json +16 -0
  156. package/esm2022/calendar/assets/i18n/pt.json +16 -0
  157. package/esm2022/calendar/calendar.component.mjs +318 -0
  158. package/esm2022/calendar/index.mjs +2 -0
  159. package/esm2022/calendar/models/calendar-date.model.mjs +2 -0
  160. package/esm2022/calendar/models/calendar-month.model.mjs +2 -0
  161. package/esm2022/calendar/models/calendar-selected.model.mjs +2 -0
  162. package/esm2022/calendar/models/calendar-user-event.model.mjs +2 -0
  163. package/esm2022/calendar/models/calendar-year.model.mjs +2 -0
  164. package/esm2022/calendar/models/date-range.model.mjs +18 -0
  165. package/esm2022/calendar/models/enums/calendar-view.enum.mjs +7 -0
  166. package/esm2022/calendar/models/public-api.mjs +8 -0
  167. package/esm2022/calendar/public-api.mjs +6 -0
  168. package/esm2022/calendar/services/calendar-range-strategy.service.mjs +99 -0
  169. package/esm2022/calendar/services/calendar-signals.service.mjs +47 -0
  170. package/esm2022/calendar/services/public-api.mjs +2 -0
  171. package/esm2022/calendar/types/calendar-view.type.mjs +2 -0
  172. package/esm2022/calendar/types/public-api.mjs +2 -0
  173. package/esm2022/calendar/upd-calendar.module.mjs +52 -0
  174. package/esm2022/calendar/updevs-components-calendar.mjs +5 -0
  175. package/esm2022/card/card.component.mjs +4 -4
  176. package/esm2022/card/directives/card-actions.directive.mjs +8 -8
  177. package/esm2022/card/directives/card-footer.directive.mjs +8 -8
  178. package/esm2022/card/directives/card-header.directive.mjs +8 -8
  179. package/esm2022/card/directives/card-image.directive.mjs +8 -8
  180. package/esm2022/card/directives/public-api.mjs +1 -1
  181. package/esm2022/card/index.mjs +1 -1
  182. package/esm2022/card/public-api.mjs +2 -1
  183. package/esm2022/card/types/card-state.type.mjs +1 -1
  184. package/esm2022/card/types/card-style.type.mjs +1 -1
  185. package/esm2022/card/types/hover-effect.type.mjs +1 -1
  186. package/esm2022/card/types/public-api.mjs +6 -0
  187. package/esm2022/card/types/ribbon-style.type.mjs +1 -1
  188. package/esm2022/card/types/status-position.type.mjs +1 -1
  189. package/esm2022/card/upd-card.module.mjs +5 -5
  190. package/esm2022/card/updevs-components-card.mjs +1 -1
  191. package/esm2022/drag-and-drop/drag-and-drop.component.mjs +134 -0
  192. package/esm2022/drag-and-drop/index.mjs +2 -0
  193. package/esm2022/drag-and-drop/models/drag-and-drop-column.config.mjs +2 -0
  194. package/esm2022/drag-and-drop/models/drag-and-drop-column.model.mjs +9 -0
  195. package/esm2022/drag-and-drop/models/drag-and-drop-item.mjs +2 -0
  196. package/esm2022/drag-and-drop/models/drag-and-drop-item.model.mjs +14 -0
  197. package/esm2022/drag-and-drop/models/drag-and-drop.config.mjs +2 -0
  198. package/esm2022/drag-and-drop/models/public-api.mjs +5 -0
  199. package/esm2022/drag-and-drop/public-api.mjs +4 -0
  200. package/esm2022/drag-and-drop/upd-drag-and-drop.module.mjs +28 -0
  201. package/esm2022/drag-and-drop/updevs-components-drag-and-drop.mjs +5 -0
  202. package/esm2022/dropdown/dropdown.component.mjs +75 -18
  203. package/esm2022/dropdown/index.mjs +1 -1
  204. package/esm2022/dropdown/models/dropdown-action-clicked.model.mjs +2 -0
  205. package/esm2022/dropdown/models/dropdown-item.mjs +1 -1
  206. package/esm2022/dropdown/models/dropdown-item.type.mjs +1 -1
  207. package/esm2022/dropdown/models/public-api.mjs +3 -1
  208. package/esm2022/dropdown/models/toolbar.type.mjs +2 -0
  209. package/esm2022/dropdown/public-api.mjs +1 -1
  210. package/esm2022/dropdown/upd-dropdown.module.mjs +5 -5
  211. package/esm2022/dropdown/updevs-components-dropdown.mjs +1 -1
  212. package/esm2022/form/assets/i18n/en.json +17 -0
  213. package/esm2022/form/assets/i18n/pt.json +17 -0
  214. package/esm2022/form/components/dynamic-field/dynamic-field.component.mjs +174 -0
  215. package/esm2022/form/form.component.mjs +180 -0
  216. package/esm2022/form/index.mjs +1 -1
  217. package/esm2022/form/models/attachment-rule.model.mjs +2 -0
  218. package/esm2022/form/models/button-field.model.mjs +2 -0
  219. package/esm2022/form/models/button-group-field.model.mjs +2 -0
  220. package/esm2022/form/models/checkbox-field.model.mjs +2 -0
  221. package/esm2022/form/models/checkbox-group-field.model.mjs +2 -0
  222. package/esm2022/form/models/dynamic-field.model.mjs +2 -0
  223. package/esm2022/form/models/enums/attachment-type.enum.mjs +15 -0
  224. package/esm2022/form/models/enums/dynamic-field.type.mjs +17 -0
  225. package/esm2022/form/models/enums/public-api.mjs +3 -0
  226. package/esm2022/form/models/file-upload-field.model.mjs +2 -0
  227. package/esm2022/form/models/form-config.mjs +2 -0
  228. package/esm2022/form/models/form-row.model.mjs +2 -0
  229. package/esm2022/form/models/form-update-on.type.mjs +2 -0
  230. package/esm2022/form/models/input-field.model.mjs +2 -0
  231. package/esm2022/form/models/masked-input-field.model.mjs +2 -0
  232. package/esm2022/form/models/public-api.mjs +19 -0
  233. package/esm2022/form/models/radio-field.model.mjs +2 -0
  234. package/esm2022/form/models/radio-group-field.model.mjs +2 -0
  235. package/esm2022/form/models/select-field.model.mjs +2 -0
  236. package/esm2022/form/models/single-select-field.model.mjs +2 -0
  237. package/esm2022/form/models/textarea-field.model.mjs +2 -0
  238. package/esm2022/form/models/validator-config.mjs +2 -0
  239. package/esm2022/form/public-api.mjs +4 -2
  240. package/esm2022/form/tools/errors-helper.mjs +54 -0
  241. package/esm2022/form/upd-form.module.mjs +84 -0
  242. package/esm2022/form/updevs-components-form.mjs +1 -1
  243. package/esm2022/form-controls/abstractions/base-control.mjs +46 -0
  244. package/esm2022/form-controls/abstractions/index.mjs +2 -0
  245. package/esm2022/form-controls/abstractions/public-api.mjs +2 -0
  246. package/esm2022/form-controls/abstractions/updevs-components-form-controls-abstractions.mjs +5 -0
  247. package/esm2022/form-controls/checkbox/checkbox.component.mjs +37 -51
  248. package/esm2022/form-controls/checkbox/index.mjs +1 -1
  249. package/esm2022/form-controls/checkbox/public-api.mjs +1 -1
  250. package/esm2022/form-controls/checkbox/upd-checkbox.module.mjs +12 -8
  251. package/esm2022/form-controls/checkbox/updevs-components-form-controls-checkbox.mjs +1 -1
  252. package/esm2022/form-controls/date-picker/date-picker.component.mjs +132 -0
  253. package/esm2022/form-controls/date-picker/index.mjs +2 -0
  254. package/esm2022/form-controls/date-picker/public-api.mjs +3 -0
  255. package/esm2022/form-controls/date-picker/upd-date-picker.module.mjs +40 -0
  256. package/esm2022/form-controls/date-picker/updevs-components-form-controls-date-picker.mjs +5 -0
  257. package/esm2022/form-controls/file-upload/assets/i18n/en.json +15 -0
  258. package/esm2022/form-controls/file-upload/assets/i18n/pt.json +15 -0
  259. package/esm2022/form-controls/file-upload/file-upload-changed.event.mjs +2 -0
  260. package/esm2022/form-controls/file-upload/file-upload.component.mjs +169 -0
  261. package/esm2022/form-controls/file-upload/index.mjs +2 -0
  262. package/esm2022/form-controls/file-upload/public-api.mjs +4 -0
  263. package/esm2022/form-controls/file-upload/upd-file-upload.module.mjs +48 -0
  264. package/esm2022/form-controls/file-upload/updevs-components-form-controls-file-upload.mjs +5 -0
  265. package/esm2022/form-controls/input/directives/input-append.directive.mjs +8 -8
  266. package/esm2022/form-controls/input/directives/input-prepend.directive.mjs +8 -8
  267. package/esm2022/form-controls/input/directives/public-api.mjs +1 -1
  268. package/esm2022/form-controls/input/index.mjs +1 -1
  269. package/esm2022/form-controls/input/input.component.mjs +64 -34
  270. package/esm2022/form-controls/input/public-api.mjs +1 -1
  271. package/esm2022/form-controls/input/types/input.type.mjs +1 -1
  272. package/esm2022/form-controls/input/types/loader-position.type.mjs +1 -1
  273. package/esm2022/form-controls/input/types/public-api.mjs +1 -1
  274. package/esm2022/form-controls/input/upd-input.module.mjs +5 -5
  275. package/esm2022/form-controls/input/updevs-components-form-controls-input.mjs +1 -1
  276. package/esm2022/form-controls/radio/index.mjs +1 -1
  277. package/esm2022/form-controls/radio/public-api.mjs +1 -1
  278. package/esm2022/form-controls/radio/radio.component.mjs +12 -25
  279. package/esm2022/form-controls/radio/upd-radio.module.mjs +14 -6
  280. package/esm2022/form-controls/radio/updevs-components-form-controls-radio.mjs +1 -1
  281. package/esm2022/form-controls/select/components/multiple/select-multiple.component.mjs +33 -10
  282. package/esm2022/form-controls/select/components/single/select.component.mjs +31 -8
  283. package/esm2022/form-controls/select/index.mjs +1 -1
  284. package/esm2022/form-controls/select/models/abstractions/base-select.component.mjs +109 -88
  285. package/esm2022/form-controls/select/models/defaults.mjs +8 -0
  286. package/esm2022/form-controls/select/models/public-api.mjs +2 -1
  287. package/esm2022/form-controls/select/models/select-item.mjs +1 -1
  288. package/esm2022/form-controls/select/public-api.mjs +1 -1
  289. package/esm2022/form-controls/select/upd-select.module.mjs +10 -6
  290. package/esm2022/form-controls/select/updevs-components-form-controls-select.mjs +1 -1
  291. package/esm2022/form-controls/textarea/index.mjs +1 -1
  292. package/esm2022/form-controls/textarea/public-api.mjs +1 -1
  293. package/esm2022/form-controls/textarea/textarea.component.mjs +18 -36
  294. package/esm2022/form-controls/textarea/upd-textarea.module.mjs +5 -5
  295. package/esm2022/form-controls/textarea/updevs-components-form-controls-textarea.mjs +1 -1
  296. package/esm2022/form-controls/time-picker/index.mjs +1 -1
  297. package/esm2022/form-controls/time-picker/public-api.mjs +1 -1
  298. package/esm2022/form-controls/time-picker/time-picker.component.mjs +4 -4
  299. package/esm2022/form-controls/time-picker/time-selector/time-selector.component.mjs +7 -8
  300. package/esm2022/form-controls/time-picker/upd-time-picker.module.mjs +9 -8
  301. package/esm2022/form-controls/time-picker/updevs-components-form-controls-time-picker.mjs +1 -1
  302. package/esm2022/index.mjs +2 -0
  303. package/esm2022/layout/abstractions/base-page.component.mjs +8 -9
  304. package/esm2022/layout/abstractions/base.layout.mjs +31 -0
  305. package/esm2022/layout/abstractions/public-api.mjs +1 -1
  306. package/esm2022/layout/assets/i18n/en.json +24 -2
  307. package/esm2022/layout/assets/i18n/pt.json +24 -2
  308. package/esm2022/layout/index.mjs +1 -1
  309. package/esm2022/layout/layouts/blank-layout/blank-layout.component.mjs +18 -7
  310. package/esm2022/layout/layouts/blank-layout/blank-layout.module.mjs +32 -6
  311. package/esm2022/layout/layouts/public-api.mjs +1 -1
  312. package/esm2022/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.mjs +13 -29
  313. package/esm2022/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.module.mjs +25 -28
  314. package/esm2022/layout/models/login-page-config.model.mjs +20 -0
  315. package/esm2022/layout/models/login-page.config.mjs +2 -0
  316. package/esm2022/layout/models/public-api.mjs +2 -1
  317. package/esm2022/layout/models/security-layout-config.model.mjs +10 -0
  318. package/esm2022/layout/models/security-layout.config.mjs +2 -0
  319. package/esm2022/layout/models/upd-layout-config.model.mjs +11 -17
  320. package/esm2022/layout/models/upd-layout.config.mjs +1 -1
  321. package/esm2022/layout/pages/auth-flow/auth-flow-routing.module.mjs +5 -5
  322. package/esm2022/layout/pages/auth-flow/auth-flow.module.mjs +36 -9
  323. package/esm2022/layout/pages/auth-flow/logged-out/logged-out.component.mjs +4 -4
  324. package/esm2022/layout/pages/auth-flow/login/login.component.mjs +95 -12
  325. package/esm2022/layout/pages/auth-flow/oauth-callback/oauth-callback.component.mjs +4 -4
  326. package/esm2022/layout/pages/auth-flow/public-api.mjs +1 -1
  327. package/esm2022/layout/pages/public-api.mjs +1 -1
  328. package/esm2022/layout/partials/footer/footer.component.mjs +13 -27
  329. package/esm2022/layout/partials/footer/footer.module.mjs +28 -0
  330. package/esm2022/layout/partials/footer/public-api.mjs +2 -2
  331. package/esm2022/layout/partials/header/header-style.type.mjs +1 -1
  332. package/esm2022/layout/partials/header/header.component.mjs +121 -60
  333. package/esm2022/layout/partials/header/header.module.mjs +40 -0
  334. package/esm2022/layout/partials/header/public-api.mjs +2 -1
  335. package/esm2022/layout/partials/page-header/page-header.component.mjs +11 -11
  336. package/esm2022/layout/partials/page-header/public-api.mjs +1 -1
  337. package/esm2022/layout/partials/public-api.mjs +1 -1
  338. package/esm2022/layout/partials/sidebar/public-api.mjs +1 -1
  339. package/esm2022/layout/partials/sidebar/sidebar.component.mjs +185 -95
  340. package/esm2022/layout/public-api.mjs +1 -1
  341. package/esm2022/layout/services/public-api.mjs +1 -1
  342. package/esm2022/layout/services/upd-layout-config.service.mjs +6 -6
  343. package/esm2022/layout/tools/layout.constants.mjs +1 -1
  344. package/esm2022/layout/upd-layout.module.mjs +12 -8
  345. package/esm2022/layout/updevs-components-layout.mjs +1 -1
  346. package/esm2022/lib/index.mjs +1 -1
  347. package/esm2022/lib/models/public-api.mjs +2 -0
  348. package/esm2022/lib/models/row-column-size.mjs +2 -0
  349. package/esm2022/lib/public-api.mjs +3 -1
  350. package/esm2022/lib/tools/column-size.helper.mjs +12 -0
  351. package/esm2022/lib/tools/public-api.mjs +2 -0
  352. package/esm2022/lib/types/component-size.type.mjs +1 -1
  353. package/esm2022/lib/types/horizontal-vertical.type.mjs +2 -0
  354. package/esm2022/lib/types/public-api.mjs +2 -1
  355. package/esm2022/lib/types/validation-status.type.mjs +1 -1
  356. package/esm2022/lib/upd-components.module.mjs +5 -5
  357. package/esm2022/link/index.mjs +1 -1
  358. package/esm2022/link/link.component.mjs +4 -4
  359. package/esm2022/link/public-api.mjs +1 -1
  360. package/esm2022/link/target.type.mjs +1 -1
  361. package/esm2022/link/upd-link.module.mjs +5 -5
  362. package/esm2022/link/updevs-components-link.mjs +1 -1
  363. package/esm2022/list/assets/i18n/en.json +7 -3
  364. package/esm2022/list/assets/i18n/pt.json +7 -3
  365. package/esm2022/list/index.mjs +1 -1
  366. package/esm2022/list/list.component.mjs +14 -34
  367. package/esm2022/list/models/badge-position.type.mjs +1 -1
  368. package/esm2022/list/models/list-item.mjs +1 -1
  369. package/esm2022/list/models/list-item.model.mjs +7 -2
  370. package/esm2022/list/models/public-api.mjs +1 -1
  371. package/esm2022/list/public-api.mjs +1 -1
  372. package/esm2022/list/upd-list.module.mjs +9 -8
  373. package/esm2022/list/updevs-components-list.mjs +1 -1
  374. package/esm2022/modal/assets/i18n/en.json +17 -0
  375. package/esm2022/modal/assets/i18n/pt.json +17 -0
  376. package/esm2022/modal/components/modal-container/modal-container.component.mjs +216 -0
  377. package/esm2022/modal/index.mjs +2 -0
  378. package/esm2022/modal/models/base.modal.mjs +14 -0
  379. package/esm2022/modal/models/modal-config.model.mjs +20 -0
  380. package/esm2022/modal/models/modal-ref.mjs +2 -0
  381. package/esm2022/modal/models/modal.config.mjs +2 -0
  382. package/esm2022/modal/models/public-api.mjs +4 -0
  383. package/esm2022/modal/public-api.mjs +4 -0
  384. package/esm2022/modal/services/modal-alert.service.mjs +99 -0
  385. package/esm2022/modal/services/modal.service.mjs +30 -0
  386. package/esm2022/modal/services/public-api.mjs +3 -0
  387. package/esm2022/modal/types/modal-footer-style.type.mjs +2 -0
  388. package/esm2022/modal/types/modal-size.type.mjs +2 -0
  389. package/esm2022/modal/upd-modal.module.mjs +90 -0
  390. package/esm2022/modal/updevs-components-modal.mjs +5 -0
  391. package/esm2022/paginator/assets/i18n/en.json +15 -0
  392. package/esm2022/paginator/assets/i18n/pt.json +15 -0
  393. package/esm2022/paginator/index.mjs +2 -0
  394. package/esm2022/paginator/paginator.component.mjs +66 -0
  395. package/esm2022/paginator/public-api.mjs +3 -0
  396. package/esm2022/paginator/upd-paginator.module.mjs +47 -0
  397. package/esm2022/paginator/updevs-components-paginator.mjs +5 -0
  398. package/esm2022/popover/index.mjs +1 -1
  399. package/esm2022/popover/popover.component.mjs +7 -7
  400. package/esm2022/popover/popover.directive.mjs +33 -42
  401. package/esm2022/popover/public-api.mjs +1 -1
  402. package/esm2022/popover/upd-popover.module.mjs +5 -5
  403. package/esm2022/popover/updevs-components-popover.mjs +1 -1
  404. package/esm2022/pricing-cards/index.mjs +2 -0
  405. package/esm2022/pricing-cards/models/price-item-feature.model.mjs +2 -0
  406. package/esm2022/pricing-cards/models/price-item-features-group.model.mjs +2 -0
  407. package/esm2022/pricing-cards/models/price-item-tag.model.mjs +2 -0
  408. package/esm2022/pricing-cards/models/price-item.model.mjs +2 -0
  409. package/esm2022/pricing-cards/models/public-api.mjs +5 -0
  410. package/esm2022/pricing-cards/pricing-cards.component.mjs +25 -0
  411. package/esm2022/pricing-cards/public-api.mjs +4 -0
  412. package/esm2022/pricing-cards/upd-pricing-cards.module.mjs +40 -0
  413. package/esm2022/pricing-cards/updevs-components-pricing-cards.mjs +5 -0
  414. package/esm2022/public-api.mjs +1 -1
  415. package/esm2022/table/abstractions/base-column.model.mjs +52 -0
  416. package/esm2022/table/abstractions/base.column.mjs +84 -0
  417. package/esm2022/table/abstractions/filters-operands.service.mjs +3 -0
  418. package/esm2022/table/abstractions/public-api.mjs +3 -0
  419. package/esm2022/table/assets/i18n/en.json +74 -0
  420. package/esm2022/table/assets/i18n/pt.json +74 -0
  421. package/esm2022/table/components/columns/boolean-column/boolean-column.component.mjs +26 -0
  422. package/esm2022/table/components/columns/date-time-column/date-time-column.component.mjs +13 -0
  423. package/esm2022/table/components/columns/number-column/number-column.component.mjs +13 -0
  424. package/esm2022/table/components/columns/text-column/text-column.component.mjs +31 -0
  425. package/esm2022/table/components/columns-manager/columns-manager.component.mjs +36 -0
  426. package/esm2022/table/components/filter-row/filter-row.component.mjs +114 -0
  427. package/esm2022/table/components/save-search/save-search.component.mjs +72 -0
  428. package/esm2022/table/components/search-section/search-section.component.mjs +93 -0
  429. package/esm2022/table/directives/public-api.mjs +2 -0
  430. package/esm2022/table/directives/table-column.directive.mjs +52 -0
  431. package/esm2022/table/index.mjs +2 -0
  432. package/esm2022/table/models/columns/boolean-column.model.mjs +22 -0
  433. package/esm2022/table/models/columns/date-time-column.model.mjs +16 -0
  434. package/esm2022/table/models/columns/guid-column.model.mjs +13 -0
  435. package/esm2022/table/models/columns/image-column.model.mjs +11 -0
  436. package/esm2022/table/models/columns/number-column.model.mjs +17 -0
  437. package/esm2022/table/models/columns/public-api.mjs +7 -0
  438. package/esm2022/table/models/columns/text-column.model.mjs +11 -0
  439. package/esm2022/table/models/enums/column-type.enum.mjs +15 -0
  440. package/esm2022/table/models/enums/public-api.mjs +2 -0
  441. package/esm2022/table/models/filter-item.model.mjs +2 -0
  442. package/esm2022/table/models/filter-operand.config.mjs +2 -0
  443. package/esm2022/table/models/operands-lists/boolean-filter-operands-list.model.mjs +25 -0
  444. package/esm2022/table/models/operands-lists/date-filter-operands-list.model.mjs +25 -0
  445. package/esm2022/table/models/operands-lists/date-or-number-operands-list.config.mjs +31 -0
  446. package/esm2022/table/models/operands-lists/filter-operands-list.config.mjs +31 -0
  447. package/esm2022/table/models/operands-lists/guid-filter-operands-list.model.mjs +16 -0
  448. package/esm2022/table/models/operands-lists/number-filter-operands-list.model.mjs +25 -0
  449. package/esm2022/table/models/operands-lists/string-filter-operands-list.model.mjs +45 -0
  450. package/esm2022/table/models/public-api.mjs +5 -0
  451. package/esm2022/table/models/saved-view.model.mjs +2 -0
  452. package/esm2022/table/models/table-config.model.mjs +29 -0
  453. package/esm2022/table/models/table.config.mjs +2 -0
  454. package/esm2022/table/models/upd-table-config.model.mjs +9 -0
  455. package/esm2022/table/models/upd-table.config.mjs +2 -0
  456. package/esm2022/table/public-api.mjs +6 -0
  457. package/esm2022/table/services/default-filters-operands.service.mjs +60 -0
  458. package/esm2022/table/services/storages/saved-views.storage.mjs +56 -0
  459. package/esm2022/table/services/stores/filters-operands.store.mjs +19 -0
  460. package/esm2022/table/services/upd-table-config.service.mjs +18 -0
  461. package/esm2022/table/table.component.mjs +439 -0
  462. package/esm2022/table/tools/filters.tools.mjs +48 -0
  463. package/esm2022/table/tools/table.constants.mjs +15 -0
  464. package/esm2022/table/upd-table.module.mjs +150 -0
  465. package/esm2022/table/updevs-components-table.mjs +5 -0
  466. package/esm2022/updevs-components.mjs +2 -2
  467. package/fesm2022/updevs-components-badge.mjs +89 -0
  468. package/fesm2022/updevs-components-badge.mjs.map +1 -0
  469. package/fesm2022/updevs-components-button.mjs +138 -136
  470. package/fesm2022/updevs-components-button.mjs.map +1 -1
  471. package/fesm2022/updevs-components-calendar.mjs +582 -0
  472. package/fesm2022/updevs-components-calendar.mjs.map +1 -0
  473. package/fesm2022/updevs-components-card.mjs +32 -32
  474. package/fesm2022/updevs-components-card.mjs.map +1 -1
  475. package/fesm2022/updevs-components-drag-and-drop.mjs +185 -0
  476. package/fesm2022/updevs-components-drag-and-drop.mjs.map +1 -0
  477. package/fesm2022/updevs-components-dropdown.mjs +78 -21
  478. package/fesm2022/updevs-components-dropdown.mjs.map +1 -1
  479. package/fesm2022/updevs-components-form-controls-abstractions.mjs +53 -0
  480. package/fesm2022/updevs-components-form-controls-abstractions.mjs.map +1 -0
  481. package/fesm2022/updevs-components-form-controls-checkbox.mjs +47 -57
  482. package/fesm2022/updevs-components-form-controls-checkbox.mjs.map +1 -1
  483. package/fesm2022/updevs-components-form-controls-date-picker.mjs +175 -0
  484. package/fesm2022/updevs-components-form-controls-date-picker.mjs.map +1 -0
  485. package/fesm2022/updevs-components-form-controls-file-upload.mjs +264 -0
  486. package/fesm2022/updevs-components-form-controls-file-upload.mjs.map +1 -0
  487. package/fesm2022/updevs-components-form-controls-input.mjs +80 -50
  488. package/fesm2022/updevs-components-form-controls-input.mjs.map +1 -1
  489. package/fesm2022/updevs-components-form-controls-radio.mjs +25 -30
  490. package/fesm2022/updevs-components-form-controls-radio.mjs.map +1 -1
  491. package/fesm2022/updevs-components-form-controls-select.mjs +185 -108
  492. package/fesm2022/updevs-components-form-controls-select.mjs.map +1 -1
  493. package/fesm2022/updevs-components-form-controls-textarea.mjs +21 -39
  494. package/fesm2022/updevs-components-form-controls-textarea.mjs.map +1 -1
  495. package/fesm2022/updevs-components-form-controls-time-picker.mjs +18 -18
  496. package/fesm2022/updevs-components-form-controls-time-picker.mjs.map +1 -1
  497. package/fesm2022/updevs-components-form.mjs +541 -10
  498. package/fesm2022/updevs-components-form.mjs.map +1 -1
  499. package/fesm2022/updevs-components-layout.mjs +774 -395
  500. package/fesm2022/updevs-components-layout.mjs.map +1 -1
  501. package/fesm2022/updevs-components-link.mjs +8 -8
  502. package/fesm2022/updevs-components-link.mjs.map +1 -1
  503. package/fesm2022/updevs-components-list.mjs +44 -58
  504. package/fesm2022/updevs-components-list.mjs.map +1 -1
  505. package/fesm2022/updevs-components-modal.mjs +504 -0
  506. package/fesm2022/updevs-components-modal.mjs.map +1 -0
  507. package/fesm2022/updevs-components-paginator.mjs +160 -0
  508. package/fesm2022/updevs-components-paginator.mjs.map +1 -0
  509. package/fesm2022/updevs-components-popover.mjs +41 -50
  510. package/fesm2022/updevs-components-popover.mjs.map +1 -1
  511. package/fesm2022/updevs-components-pricing-cards.mjs +69 -0
  512. package/fesm2022/updevs-components-pricing-cards.mjs.map +1 -0
  513. package/fesm2022/updevs-components-table.mjs +1754 -0
  514. package/fesm2022/updevs-components-table.mjs.map +1 -0
  515. package/fesm2022/updevs-components.mjs +17 -5
  516. package/fesm2022/updevs-components.mjs.map +1 -1
  517. package/form/components/dynamic-field/dynamic-field.component.d.ts +63 -0
  518. package/form/form.component.d.ts +64 -0
  519. package/form/models/attachment-rule.model.d.ts +35 -0
  520. package/form/models/button-field.model.d.ts +5 -0
  521. package/form/models/button-group-field.model.d.ts +5 -0
  522. package/form/models/checkbox-field.model.d.ts +4 -0
  523. package/form/models/checkbox-group-field.model.d.ts +6 -0
  524. package/form/models/dynamic-field.model.d.ts +50 -0
  525. package/form/models/enums/attachment-type.enum.d.ts +13 -0
  526. package/form/models/enums/dynamic-field.type.d.ts +15 -0
  527. package/form/models/enums/public-api.d.ts +2 -0
  528. package/form/models/file-upload-field.model.d.ts +16 -0
  529. package/form/models/form-config.d.ts +2 -0
  530. package/form/models/form-row.model.d.ts +10 -0
  531. package/form/models/form-update-on.type.d.ts +1 -0
  532. package/form/models/input-field.model.d.ts +9 -0
  533. package/form/models/masked-input-field.model.d.ts +6 -0
  534. package/form/models/public-api.d.ts +18 -0
  535. package/form/models/radio-field.model.d.ts +4 -0
  536. package/form/models/radio-group-field.model.d.ts +6 -0
  537. package/form/models/select-field.model.d.ts +29 -0
  538. package/form/models/single-select-field.model.d.ts +4 -0
  539. package/form/models/textarea-field.model.d.ts +10 -0
  540. package/form/models/validator-config.d.ts +5 -0
  541. package/form/public-api.d.ts +3 -1
  542. package/form/tools/errors-helper.d.ts +11 -0
  543. package/form/upd-form.module.d.ts +22 -0
  544. package/form-controls/abstractions/base-control.d.ts +29 -0
  545. package/form-controls/abstractions/index.d.ts +2 -0
  546. package/form-controls/abstractions/public-api.d.ts +2 -0
  547. package/form-controls/checkbox/checkbox.component.d.ts +14 -20
  548. package/form-controls/checkbox/upd-checkbox.module.d.ts +2 -1
  549. package/form-controls/date-picker/date-picker.component.d.ts +66 -0
  550. package/form-controls/date-picker/index.d.ts +1 -0
  551. package/form-controls/date-picker/public-api.d.ts +2 -0
  552. package/form-controls/date-picker/upd-date-picker.module.d.ts +12 -0
  553. package/form-controls/file-upload/file-upload-changed.event.d.ts +4 -0
  554. package/form-controls/file-upload/file-upload.component.d.ts +46 -0
  555. package/form-controls/file-upload/index.d.ts +1 -0
  556. package/form-controls/file-upload/public-api.d.ts +3 -0
  557. package/form-controls/file-upload/upd-file-upload.module.d.ts +14 -0
  558. package/form-controls/input/directives/input-append.directive.d.ts +1 -2
  559. package/form-controls/input/directives/input-prepend.directive.d.ts +1 -2
  560. package/form-controls/input/input.component.d.ts +24 -14
  561. package/form-controls/radio/radio.component.d.ts +5 -12
  562. package/form-controls/radio/upd-radio.module.d.ts +3 -1
  563. package/form-controls/select/components/multiple/select-multiple.component.d.ts +13 -2
  564. package/form-controls/select/components/single/select.component.d.ts +10 -2
  565. package/form-controls/select/models/abstractions/base-select.component.d.ts +35 -31
  566. package/form-controls/select/models/defaults.d.ts +8 -0
  567. package/form-controls/select/models/public-api.d.ts +1 -0
  568. package/form-controls/select/upd-select.module.d.ts +3 -2
  569. package/form-controls/textarea/textarea.component.d.ts +11 -15
  570. package/form-controls/time-picker/upd-time-picker.module.d.ts +2 -2
  571. package/index.d.ts +1 -4
  572. package/layout/abstractions/base-page.component.d.ts +1 -2
  573. package/layout/abstractions/base.layout.d.ts +15 -0
  574. package/layout/layouts/blank-layout/blank-layout.component.d.ts +5 -1
  575. package/layout/layouts/blank-layout/blank-layout.module.d.ts +8 -1
  576. package/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.d.ts +2 -9
  577. package/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.module.d.ts +14 -13
  578. package/layout/models/login-page-config.model.d.ts +46 -0
  579. package/layout/models/login-page.config.d.ts +44 -0
  580. package/layout/models/public-api.d.ts +1 -0
  581. package/layout/models/security-layout-config.model.d.ts +12 -0
  582. package/layout/models/security-layout.config.d.ts +10 -0
  583. package/layout/models/upd-layout-config.model.d.ts +9 -0
  584. package/layout/models/upd-layout.config.d.ts +9 -0
  585. package/layout/pages/auth-flow/auth-flow.module.d.ts +9 -2
  586. package/layout/pages/auth-flow/login/login.component.d.ts +20 -6
  587. package/layout/partials/footer/footer.component.d.ts +4 -15
  588. package/layout/partials/footer/footer.module.d.ts +9 -0
  589. package/layout/partials/footer/public-api.d.ts +1 -1
  590. package/layout/partials/header/header.component.d.ts +44 -26
  591. package/layout/partials/header/header.module.d.ts +12 -0
  592. package/layout/partials/header/public-api.d.ts +1 -0
  593. package/layout/partials/page-header/page-header.component.d.ts +2 -2
  594. package/layout/partials/sidebar/sidebar.component.d.ts +29 -4
  595. package/layout/upd-layout.module.d.ts +2 -1
  596. package/lib/index.d.ts +1 -0
  597. package/lib/models/public-api.d.ts +2 -0
  598. package/lib/models/row-column-size.d.ts +23 -0
  599. package/lib/public-api.d.ts +3 -0
  600. package/lib/tools/column-size.helper.d.ts +6 -0
  601. package/lib/tools/public-api.d.ts +2 -0
  602. package/lib/types/component-size.type.d.ts +1 -0
  603. package/lib/types/horizontal-vertical.type.d.ts +2 -0
  604. package/lib/types/public-api.d.ts +2 -0
  605. package/lib/types/validation-status.type.d.ts +1 -0
  606. package/lib/upd-components.module.d.ts +1 -0
  607. package/list/list.component.d.ts +4 -20
  608. package/list/models/list-item.d.ts +4 -2
  609. package/list/models/list-item.model.d.ts +4 -2
  610. package/list/upd-list.module.d.ts +2 -2
  611. package/modal/components/modal-container/modal-container.component.d.ts +74 -0
  612. package/modal/index.d.ts +1 -0
  613. package/modal/models/base.modal.d.ts +8 -0
  614. package/modal/models/modal-config.model.d.ts +32 -0
  615. package/modal/models/modal-ref.d.ts +6 -0
  616. package/modal/models/modal.config.d.ts +30 -0
  617. package/modal/models/public-api.d.ts +3 -0
  618. package/modal/public-api.d.ts +3 -0
  619. package/modal/services/modal-alert.service.d.ts +22 -0
  620. package/modal/services/modal.service.d.ts +12 -0
  621. package/modal/services/public-api.d.ts +2 -0
  622. package/modal/types/modal-footer-style.type.d.ts +1 -0
  623. package/modal/types/modal-size.type.d.ts +1 -0
  624. package/modal/upd-modal.module.d.ts +18 -0
  625. package/package.json +78 -17
  626. package/paginator/index.d.ts +1 -0
  627. package/paginator/paginator.component.d.ts +42 -0
  628. package/paginator/public-api.d.ts +2 -0
  629. package/paginator/upd-paginator.module.d.ts +14 -0
  630. package/popover/popover.component.d.ts +2 -2
  631. package/popover/popover.directive.d.ts +8 -10
  632. package/pricing-cards/index.d.ts +1 -0
  633. package/pricing-cards/models/price-item-feature.model.d.ts +5 -0
  634. package/pricing-cards/models/price-item-features-group.model.d.ts +5 -0
  635. package/pricing-cards/models/price-item-tag.model.d.ts +6 -0
  636. package/pricing-cards/models/price-item.model.d.ts +20 -0
  637. package/pricing-cards/models/public-api.d.ts +4 -0
  638. package/pricing-cards/pricing-cards.component.d.ts +11 -0
  639. package/pricing-cards/public-api.d.ts +3 -0
  640. package/pricing-cards/upd-pricing-cards.module.d.ts +12 -0
  641. package/public-api.d.ts +1 -0
  642. package/table/abstractions/base-column.model.d.ts +31 -0
  643. package/table/abstractions/base.column.d.ts +26 -0
  644. package/table/abstractions/filters-operands.service.d.ts +8 -0
  645. package/table/abstractions/public-api.d.ts +2 -0
  646. package/table/components/columns/boolean-column/boolean-column.component.d.ts +9 -0
  647. package/table/components/columns/date-time-column/date-time-column.component.d.ts +7 -0
  648. package/table/components/columns/number-column/number-column.component.d.ts +7 -0
  649. package/table/components/columns/text-column/text-column.component.d.ts +9 -0
  650. package/table/components/columns-manager/columns-manager.component.d.ts +15 -0
  651. package/table/components/filter-row/filter-row.component.d.ts +40 -0
  652. package/table/components/save-search/save-search.component.d.ts +17 -0
  653. package/table/components/search-section/search-section.component.d.ts +36 -0
  654. package/table/directives/public-api.d.ts +1 -0
  655. package/table/directives/table-column.directive.d.ts +14 -0
  656. package/table/index.d.ts +1 -0
  657. package/table/models/columns/boolean-column.model.d.ts +15 -0
  658. package/table/models/columns/date-time-column.model.d.ts +8 -0
  659. package/table/models/columns/guid-column.model.d.ts +4 -0
  660. package/table/models/columns/image-column.model.d.ts +6 -0
  661. package/table/models/columns/number-column.model.d.ts +8 -0
  662. package/table/models/columns/public-api.d.ts +6 -0
  663. package/table/models/columns/text-column.model.d.ts +6 -0
  664. package/table/models/enums/column-type.enum.d.ts +13 -0
  665. package/table/models/enums/public-api.d.ts +1 -0
  666. package/table/models/filter-item.model.d.ts +6 -0
  667. package/table/models/filter-operand.config.d.ts +9 -0
  668. package/table/models/operands-lists/boolean-filter-operands-list.model.d.ts +6 -0
  669. package/table/models/operands-lists/date-filter-operands-list.model.d.ts +6 -0
  670. package/table/models/operands-lists/date-or-number-operands-list.config.d.ts +5 -0
  671. package/table/models/operands-lists/filter-operands-list.config.d.ts +5 -0
  672. package/table/models/operands-lists/guid-filter-operands-list.model.d.ts +6 -0
  673. package/table/models/operands-lists/number-filter-operands-list.model.d.ts +6 -0
  674. package/table/models/operands-lists/string-filter-operands-list.model.d.ts +6 -0
  675. package/table/models/public-api.d.ts +4 -0
  676. package/table/models/saved-view.model.d.ts +11 -0
  677. package/table/models/table-config.model.d.ts +33 -0
  678. package/table/models/table.config.d.ts +31 -0
  679. package/table/models/upd-table-config.model.d.ts +6 -0
  680. package/table/models/upd-table.config.d.ts +6 -0
  681. package/table/public-api.d.ts +5 -0
  682. package/table/services/default-filters-operands.service.d.ts +17 -0
  683. package/table/services/storages/saved-views.storage.d.ts +19 -0
  684. package/table/services/stores/filters-operands.store.d.ts +11 -0
  685. package/table/services/upd-table-config.service.d.ts +12 -0
  686. package/table/table.component.d.ts +81 -0
  687. package/table/tools/filters.tools.d.ts +9 -0
  688. package/table/tools/table.constants.d.ts +15 -0
  689. package/table/upd-table.module.d.ts +40 -0
  690. package/esm2022/form/form.module.mjs +0 -18
  691. package/esm2022/layout/partials/footer/footer-copyright.directive.mjs +0 -15
  692. package/form/form.module.d.ts +0 -7
  693. package/layout/partials/footer/footer-copyright.directive.d.ts +0 -6
@@ -1,79 +1,140 @@
1
- import { Component, ViewEncapsulation, Input, HostBinding } from '@angular/core';
2
- import { BaseComponent } from '@updevs/sdk/layout';
1
+ import { Component, ViewEncapsulation, HostBinding, inject, computed, signal, viewChild, ElementRef, input } from '@angular/core';
2
+ import { TextService } from '@updevs/sdk';
3
+ import { BaseComponent, LayoutService, PreferencesStorage, UpdCoreLayoutConfigService } from '@updevs/sdk/layout';
4
+ import { TranslocoService } from '@jsverse/transloco';
5
+ import { NotificationsService } from '@updevs/sdk/notifications';
6
+ import { SecurityStorage } from '@updevs/sdk/security';
3
7
  import * as i0 from "@angular/core";
4
- import * as i1 from "@updevs/sdk/layout";
5
- import * as i2 from "@ngneat/transloco";
6
- import * as i3 from "@angular/common";
7
- import * as i4 from "@updevs/icons";
8
- import * as i5 from "@updevs/components/link";
8
+ import * as i1 from "@updevs/icons";
9
+ import * as i2 from "@updevs/components/dropdown";
10
+ import * as i3 from "@updevs/components/link";
11
+ import * as i4 from "@jsverse/transloco";
9
12
  export class HeaderComponent extends BaseComponent {
10
- constructor(coreLayoutConfigService, layoutService, translocoService) {
11
- super();
12
- this.coreLayoutConfigService = coreLayoutConfigService;
13
- this.layoutService = layoutService;
14
- this.translocoService = translocoService;
15
- this.wrapperClasses = '';
16
- this.style = 'light';
17
- this.showSearchBar = true;
18
- this.nextThemeIcon = 'moon';
19
- this.nextThemeColor = 'black';
20
- this.currentNotificationsIcon = 'bell';
21
- this.hasNewNotifications = false;
22
- this.showNotifications = false;
23
- this.showLanguageSwitcher = true; // TODO: add on config.
24
- this.showUserMenu = false;
25
- this.baseWrapperClasses = 'navbar navbar-expand-md d-none d-lg-flex d-print-none';
13
+ constructor() {
14
+ super(...arguments);
15
+ this.languageSwitcherRef = viewChild('languageSwitcherBtn', { read: ElementRef });
16
+ this.notificationsRef = viewChild('notificationsBtn', { read: ElementRef });
17
+ this.loggedUserRef = viewChild('loggedUserBtn', { read: ElementRef });
18
+ this.isLanguageSwitcherDropdownOpen = false;
19
+ this.isNotificationsDropdownOpen = false;
20
+ this.isLoggedUserDropdownOpen = false;
21
+ this.style = input('light');
22
+ this.nextThemeIcon = computed(() => this.currentPreferences()?.isDarkTheme ? 'sun' : 'moon-stars');
23
+ this.currentNotificationsIcon = computed(() => this.hasNewNotifications() ? 'bell-ringing' : 'bell');
24
+ this.hasNewNotifications = computed(() => this.currentNotifications().some(n => !n.dateRead));
25
+ this.userInfo = computed(() => this.securityStorage.getUserInfo());
26
+ this.textService = inject(TextService);
27
+ this.isSidebarMobileOpen = signal(false);
28
+ this.shouldBlinkIfNewNotifications = computed(() => !!this.coreLayoutConfigService.config.shouldBlinkIfNewNotifications);
29
+ this.languagesOptions = computed(() => {
30
+ const allLanguagesOptions = [];
31
+ const availableLanguages = (this.coreLayoutConfigService.config.availableLanguages || {});
32
+ Object.keys(availableLanguages).forEach(key => {
33
+ allLanguagesOptions.push({
34
+ id: key,
35
+ type: 'default',
36
+ text: availableLanguages[key],
37
+ isActive: this.currentLanguageKey() === key
38
+ });
39
+ });
40
+ return allLanguagesOptions;
41
+ });
42
+ this.loggedUserOptions = computed(() => {
43
+ const userActions = [];
44
+ this.coreLayoutConfigService.config.loggedUserMenuActions.forEach(act => userActions.push({
45
+ id: act.id(),
46
+ text: act.text(),
47
+ type: 'default',
48
+ icon: act.iconModel?.()
49
+ }));
50
+ return userActions;
51
+ });
52
+ this.userIdentification = computed(() => !!this.userInfo() ? this.coreLayoutConfigService.config.getUserName(this.userInfo()) : '');
53
+ this.userDescription = computed(() => !!this.coreLayoutConfigService.config.getUserDescription
54
+ ? this.coreLayoutConfigService.config.getUserDescription(this.userInfo())
55
+ : '');
56
+ this.latestNotifications = computed(() => {
57
+ const unreadNotifications = this.currentNotifications()
58
+ .filter(n => !n.dateRead)
59
+ .sort((a, b) => new Date(b.dateReceived).getTime() - new Date(a.dateReceived).getTime())
60
+ .slice(0, this.coreLayoutConfigService.config.numberOfLastNotificationsDisplayed);
61
+ const readNotifications = this.currentNotifications()
62
+ .filter(n => !!n.dateRead)
63
+ .sort((a, b) => new Date(b.dateReceived).getTime() - new Date(a.dateReceived).getTime())
64
+ .slice(0, this.coreLayoutConfigService.config.numberOfLastNotificationsDisplayed);
65
+ return [
66
+ ...unreadNotifications,
67
+ ...readNotifications
68
+ ].slice(0, this.coreLayoutConfigService.config.numberOfLastNotificationsDisplayed);
69
+ });
70
+ this.userInitials = computed(() => {
71
+ const firstChar = this.userIdentification().charAt(0);
72
+ const lastSpaceIndex = this.userIdentification().lastIndexOf(' ');
73
+ const firstAfterLastSpace = lastSpaceIndex !== -1 ? this.userIdentification().charAt(lastSpaceIndex + 1) : '';
74
+ return `${firstChar}${firstAfterLastSpace}`;
75
+ });
76
+ this.securityStorage = inject(SecurityStorage);
77
+ this.coreLayoutConfigService = inject(UpdCoreLayoutConfigService);
78
+ this.layoutService = inject(LayoutService);
79
+ this.translocoService = inject(TranslocoService);
80
+ this.preferencesStorage = inject(PreferencesStorage);
81
+ this.notificationsService = inject(NotificationsService);
82
+ this.currentPreferences = this.preferencesStorage.getPreferences();
83
+ this.currentNotifications = this.notificationsService.notifications;
84
+ this.currentLanguageKey = signal('');
85
+ this.wrapperClasses = computed(() => `navbar navbar-expand-md d-none d-lg-flex d-print-none navbar-${this.style()}`);
86
+ // eslint-disable-next-line @typescript-eslint/member-ordering
87
+ this.config = computed(() => this.layoutService.mainHeaderConfig());
88
+ }
89
+ get classes() {
90
+ return this.wrapperClasses();
26
91
  }
27
92
  ngOnInit() {
28
- this.updateWrapperClasses();
29
- if (this.coreLayoutConfigService.config.showNotificationsButton) {
30
- this.setupNotifications();
31
- }
32
- if (this.coreLayoutConfigService.config.showUserMenu) {
33
- this.showUserMenu = true;
93
+ if (!!this.currentPreferences()?.isDarkTheme) {
94
+ this.layoutService.setDarkMode();
34
95
  }
35
- }
36
- ngOnChanges(changes) {
37
- if (!!changes['style'].currentValue) {
38
- this.updateWrapperClasses();
96
+ if (!!this.currentPreferences()?.currentLanguageCode) {
97
+ const code = this.currentPreferences().currentLanguageCode;
98
+ this.currentLanguageKey.set(code);
99
+ this.translocoService.setActiveLang(code);
39
100
  }
40
101
  }
41
102
  switchTheme() {
42
- const isDarkMode = this.nextThemeIcon === 'moon';
43
- this.nextThemeIcon = isDarkMode ? 'sun' : 'moon';
44
- this.nextThemeColor = isDarkMode ? 'white' : 'black';
45
- this.layoutService.toggleDarkMode(isDarkMode);
103
+ this.layoutService.toggleDarkMode();
46
104
  }
47
- // TODO: implement.
48
- switchLanguage() {
49
- const currentLang = this.translocoService.getActiveLang();
50
- this.translocoService.setActiveLang(currentLang === 'en' ? 'pt' : 'en');
105
+ switchLanguage(item) {
106
+ this.currentLanguageKey.set(item.id);
107
+ this.translocoService.setActiveLang(item.id);
108
+ this.preferencesStorage.savePreferences({ ...this.currentPreferences(), currentLanguageCode: item.id });
109
+ this.layoutService.notifyUserChangedLanguage(item.id);
110
+ this.isLanguageSwitcherDropdownOpen = false;
51
111
  }
52
- openNotifications() {
53
- this.updateNotificationsIcon();
112
+ selectLoggedUserMenuItem(item) {
113
+ const btn = this.coreLayoutConfigService.config.loggedUserMenuActions.find(b => b.id() === item.id);
114
+ if (!!btn?.clickFunction) {
115
+ btn.clickFunction({ data: this.userInfo() });
116
+ }
54
117
  }
55
- setupNotifications() {
56
- this.showNotifications = true;
118
+ readNotification(notification) {
119
+ if (!notification.dateRead) {
120
+ this.notificationsService.markAsRead(notification.id);
121
+ }
122
+ this.notificationsService.clickOnNotification(notification);
57
123
  }
58
- updateNotificationsIcon() {
59
- this.currentNotificationsIcon = this.currentNotificationsIcon === 'bell' ? 'bell-ringing' : 'bell';
60
- this.hasNewNotifications = !this.hasNewNotifications;
124
+ removeNotification(notification) {
125
+ this.notificationsService.removeNotifications(notification.id);
61
126
  }
62
- updateWrapperClasses() {
63
- this.wrapperClasses = `${this.baseWrapperClasses} navbar-${this.style}`;
127
+ toggleSidebarOnMobile() {
128
+ this.isSidebarMobileOpen.set(!this.isSidebarMobileOpen());
64
129
  }
65
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: HeaderComponent, deps: [{ token: i1.UpdCoreLayoutConfigService }, { token: i1.LayoutService }, { token: i2.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
66
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.11", type: HeaderComponent, selector: "upd-header", inputs: { style: "style", showSearchBar: "showSearchBar" }, host: { properties: { "class": "this.wrapperClasses" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"container-xl\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-nav flex-row order-md-last\">\n <div class=\"d-none d-md-flex me-3\">\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"switchTheme()\">\n <upd-icon [tablerIcon]=\"nextThemeIcon\"></upd-icon>\n </upd-link>\n </div>\n <div *ngIf=\"showLanguageSwitcher\" class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"switchLanguage()\">\n <upd-icon tablerIcon=\"flag\"></upd-icon>\n </upd-link>\n </div>\n <div *ngIf=\"showNotifications\" class=\"nav-item dropdown d-none d-md-flex\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"openNotifications()\">\n <upd-icon [tablerIcon]=\"currentNotificationsIcon\"></upd-icon>\n <span *ngIf=\"hasNewNotifications\" class=\"badge bg-red\"></span>\n </upd-link>\n <div class=\"dropdown-menu dropdown-menu-arrow dropdown-menu-end dropdown-menu-card\">\n <div class=\"card\">\n <div class=\"card-header\">\n <h3 class=\"card-title\">Last updates</h3>\n </div>\n <div class=\"list-group list-group-flush list-group-hoverable\">\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span\n class=\"status-dot status-dot-animated bg-red d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 1</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n Change deprecated html tags to text decoration classes (#29604)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-muted\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span class=\"status-dot d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 2</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n justify-content:between \u21D2 justify-content:space-between (#29734)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions show\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-yellow\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span class=\"status-dot d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 3</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n Update change-version.js (#29736)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-muted\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span\n class=\"status-dot status-dot-animated bg-green d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 4</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n Regenerate package-lock.json (#29730)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-muted\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"showUserMenu\" class=\"nav-item dropdown\">\n <a href=\"#\" class=\"nav-link d-flex lh-1 text-reset p-0\" data-bs-toggle=\"dropdown\"\n aria-label=\"Open user menu\">\n <!--<span class=\"avatar avatar-sm\" style=\"background-image: url(./static/avatars/000m.jpg)\"></span>-->\n <span class=\"avatar avatar-sm\"></span>\n <div class=\"d-none d-xl-block ps-2\">\n <div>Eros Stein</div>\n <div class=\"mt-1 small text-muted\">Administrator</div>\n </div>\n </a>\n <div class=\"dropdown-menu dropdown-menu-end dropdown-menu-arrow\">\n <a href=\"#\" class=\"dropdown-item\">Status</a>\n <a href=\"./profile.html\" class=\"dropdown-item\">Profile</a>\n <a href=\"#\" class=\"dropdown-item\">Feedback</a>\n <div class=\"dropdown-divider\"></div>\n <a href=\"./settings.html\" class=\"dropdown-item\">Settings</a>\n <a href=\"./sign-in.html\" class=\"dropdown-item\">Logout</a>\n </div>\n </div>\n </div>\n <div *ngIf=\"showSearchBar\" class=\"collapse navbar-collapse\">\n <div>\n <form autocomplete=\"off\" novalidate>\n <div class=\"input-icon\">\n <span class=\"input-icon-addon\">\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </span>\n <input type=\"text\" value=\"\" class=\"form-control\" placeholder=\"Search\u2026\">\n </div>\n </form>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "removeDefaultClasses", "customClasses", "tablerIcon", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i5.LinkComponent, selector: "upd-link", inputs: ["href", "target", "customClasses", "isNavigation"], outputs: ["clicked"] }], encapsulation: i0.ViewEncapsulation.None }); }
130
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HeaderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
131
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: HeaderComponent, selector: "upd-header", inputs: { style: { classPropertyName: "style", publicName: "style", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.classes" } }, viewQueries: [{ propertyName: "languageSwitcherRef", first: true, predicate: ["languageSwitcherBtn"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "notificationsRef", first: true, predicate: ["notificationsBtn"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "loggedUserRef", first: true, predicate: ["loggedUserBtn"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"container-xl\">\n <button class=\"navbar-toggler\" type=\"button\" (click)=\"toggleSidebarOnMobile()\" [attr.aria-expanded]=\"isSidebarMobileOpen()\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-nav flex-row order-md-last\">\n <div class=\"d-none d-md-flex me-3\">\n @if (!!config().showThemeSwitcher) {\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"switchTheme()\">\n <upd-icon [tablerIcon]=\"nextThemeIcon()\"></upd-icon>\n </upd-link>\n </div>\n }\n @if (!!config().showLanguageSwitcher && languagesOptions().length > 0) {\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLanguageSwitcherDropdownOpen=true\"\n #languageSwitcherBtn>\n <upd-icon tablerIcon=\"language\"></upd-icon>\n </upd-link>\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLanguageSwitcherDropdownOpen\"\n [dropdownReference]=\"languageSwitcherRef()\" [items]=\"languagesOptions()\" [shouldCloseOnOutsideClick]=\"true\"\n (isOpenChange)=\"isLanguageSwitcherDropdownOpen = $event\" (selectedItem)=\"switchLanguage($event)\">\n </upd-dropdown>\n </div>\n }\n @if (!!config().showNotifications && !!userInfo()) {\n <div class=\"nav-item dropdown d-none d-md-flex\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isNotificationsDropdownOpen = true\"\n #notificationsBtn>\n <upd-icon [tablerIcon]=\"currentNotificationsIcon()\"></upd-icon>\n @if (hasNewNotifications()) {\n <span class=\"badge bg-red\" [class.badge-blink]=\"shouldBlinkIfNewNotifications()\"></span>\n }\n </upd-link>\n <upd-dropdown wrapperClasses=\"mt-1 dropdown-menu-card\" [isOpen]=\"isNotificationsDropdownOpen\"\n [dropdownReference]=\"notificationsRef()\" [shouldCloseOnOutsideClick]=\"true\"\n (isOpenChange)=\"isNotificationsDropdownOpen = $event\" [minWidth]=\"400\" arrowType=\"right\">\n <div class=\"card\">\n <div class=\"card-header\">\n <h3 class=\"card-title\">{{ 'UpDevs.NotificationCenter.Title' | transloco }}</h3>\n </div>\n @for (notification of latestNotifications(); track notification) {\n <div class=\"list-group list-group-flush list-group-hoverable\" (click)=\"readNotification(notification)\">\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\">\n @if (!!notification.dateRead) {\n <span class=\"status-dot d-block\"></span>\n } @else {\n <span class=\"status-dot status-dot-animated bg-primary d-block\"></span>\n }\n </div>\n <div class=\"col text-truncate\">\n <a href=\"javascript:void(0)\" class=\"text-body d-block\"\n [class.fw-bold]=\"!notification.dateRead\">\n {{ textService.getText(notification.title) }}\n </a>\n @if (!!notification.description) {\n <div class=\"d-block text-secondary text-truncate mt-n1\">\n {{ textService.getText(notification.description) }}\n </div>\n }\n </div>\n <div class=\"col-auto\">\n <upd-link [customClasses]=\"['list-group-item-actions']\"\n (clicked)=\"removeNotification(notification)\">\n <upd-icon tablerIcon=\"x\"></upd-icon>\n </upd-link>\n </div>\n </div>\n </div>\n </div>\n } @empty {\n <div class=\"empty\">\n <h1 class=\"text-body-tertiary\">{{ 'UpDevs.NotificationCenter.NoNotifications' | transloco }}</h1>\n </div>\n }\n </div>\n </upd-dropdown>\n </div>\n }\n </div>\n @if (!!config().showUserMenu && !!userInfo()) {\n <div class=\"nav-item dropdown\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLoggedUserDropdownOpen = true\" #loggedUserBtn>\n @if (!!userInfo()!.avatar) {\n <span class=\"avatar avatar-sm\" style=\"background-image: url({{userInfo()?.avatar}})\"></span>\n } @else {\n <span class=\"avatar avatar-sm\">{{ userInitials() }}</span>\n }\n\n <div class=\"d-none d-xl-block px-2\">\n <div>{{ userIdentification() }}</div>\n @if (!!userDescription()) {\n <div class=\"mt-1 small text-muted\">{{ userDescription() }}</div>\n }\n </div>\n </upd-link>\n @if (loggedUserOptions().length > 0) {\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLoggedUserDropdownOpen\" [dropdownReference]=\"loggedUserRef()\"\n [items]=\"loggedUserOptions()\" [shouldCloseOnOutsideClick]=\"true\" (selectedItem)=\"selectLoggedUserMenuItem($event)\"\n (isOpenChange)=\"isLoggedUserDropdownOpen = $event\" arrowType=\"right\">\n </upd-dropdown>\n }\n </div>\n }\n </div>\n @if (!!config().showSearchBar && !!userInfo()) {\n <div class=\"collapse navbar-collapse\" [class.show]=\"isSidebarMobileOpen()\">\n <div class=\"me-2\" [class.w-100]=\"config().shouldUseFullSearchBar\">\n <form autocomplete=\"off\" novalidate>\n <div class=\"input-icon\">\n <span class=\"input-icon-addon\">\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </span>\n <input type=\"text\" value=\"\" class=\"form-control\" placeholder=\"{{'UpDevs.Header.Search' | transloco}}...\">\n </div>\n </form>\n </div>\n </div>\n } @else {\n <div></div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i2.DropdownComponent, selector: "upd-dropdown", inputs: ["items", "header", "isOpen", "shouldCloseOnOutsideClick", "arrowType", "wrapperClasses", "elementsExcludedFromOutsideClick", "minHeight", "maxHeight", "minWidth", "maxWidth", "dropdownReference", "dropdownReferencePosition", "textOverflowStrategy"], outputs: ["isOpenChange", "selectedItem", "checkboxChanged"] }, { kind: "component", type: i3.LinkComponent, selector: "upd-link", inputs: ["href", "target", "customClasses", "isNavigation"], outputs: ["clicked"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None }); }
67
132
  }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: HeaderComponent, decorators: [{
133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HeaderComponent, decorators: [{
69
134
  type: Component,
70
- args: [{ selector: 'upd-header', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-xl\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-nav flex-row order-md-last\">\n <div class=\"d-none d-md-flex me-3\">\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"switchTheme()\">\n <upd-icon [tablerIcon]=\"nextThemeIcon\"></upd-icon>\n </upd-link>\n </div>\n <div *ngIf=\"showLanguageSwitcher\" class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"switchLanguage()\">\n <upd-icon tablerIcon=\"flag\"></upd-icon>\n </upd-link>\n </div>\n <div *ngIf=\"showNotifications\" class=\"nav-item dropdown d-none d-md-flex\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"openNotifications()\">\n <upd-icon [tablerIcon]=\"currentNotificationsIcon\"></upd-icon>\n <span *ngIf=\"hasNewNotifications\" class=\"badge bg-red\"></span>\n </upd-link>\n <div class=\"dropdown-menu dropdown-menu-arrow dropdown-menu-end dropdown-menu-card\">\n <div class=\"card\">\n <div class=\"card-header\">\n <h3 class=\"card-title\">Last updates</h3>\n </div>\n <div class=\"list-group list-group-flush list-group-hoverable\">\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span\n class=\"status-dot status-dot-animated bg-red d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 1</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n Change deprecated html tags to text decoration classes (#29604)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-muted\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span class=\"status-dot d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 2</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n justify-content:between \u21D2 justify-content:space-between (#29734)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions show\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-yellow\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span class=\"status-dot d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 3</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n Update change-version.js (#29736)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-muted\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span\n class=\"status-dot status-dot-animated bg-green d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 4</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n Regenerate package-lock.json (#29730)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-muted\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"showUserMenu\" class=\"nav-item dropdown\">\n <a href=\"#\" class=\"nav-link d-flex lh-1 text-reset p-0\" data-bs-toggle=\"dropdown\"\n aria-label=\"Open user menu\">\n <!--<span class=\"avatar avatar-sm\" style=\"background-image: url(./static/avatars/000m.jpg)\"></span>-->\n <span class=\"avatar avatar-sm\"></span>\n <div class=\"d-none d-xl-block ps-2\">\n <div>Eros Stein</div>\n <div class=\"mt-1 small text-muted\">Administrator</div>\n </div>\n </a>\n <div class=\"dropdown-menu dropdown-menu-end dropdown-menu-arrow\">\n <a href=\"#\" class=\"dropdown-item\">Status</a>\n <a href=\"./profile.html\" class=\"dropdown-item\">Profile</a>\n <a href=\"#\" class=\"dropdown-item\">Feedback</a>\n <div class=\"dropdown-divider\"></div>\n <a href=\"./settings.html\" class=\"dropdown-item\">Settings</a>\n <a href=\"./sign-in.html\" class=\"dropdown-item\">Logout</a>\n </div>\n </div>\n </div>\n <div *ngIf=\"showSearchBar\" class=\"collapse navbar-collapse\">\n <div>\n <form autocomplete=\"off\" novalidate>\n <div class=\"input-icon\">\n <span class=\"input-icon-addon\">\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </span>\n <input type=\"text\" value=\"\" class=\"form-control\" placeholder=\"Search\u2026\">\n </div>\n </form>\n </div>\n </div>\n</div>\n" }]
71
- }], ctorParameters: function () { return [{ type: i1.UpdCoreLayoutConfigService }, { type: i1.LayoutService }, { type: i2.TranslocoService }]; }, propDecorators: { wrapperClasses: [{
135
+ args: [{ selector: 'upd-header', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-xl\">\n <button class=\"navbar-toggler\" type=\"button\" (click)=\"toggleSidebarOnMobile()\" [attr.aria-expanded]=\"isSidebarMobileOpen()\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-nav flex-row order-md-last\">\n <div class=\"d-none d-md-flex me-3\">\n @if (!!config().showThemeSwitcher) {\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"switchTheme()\">\n <upd-icon [tablerIcon]=\"nextThemeIcon()\"></upd-icon>\n </upd-link>\n </div>\n }\n @if (!!config().showLanguageSwitcher && languagesOptions().length > 0) {\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLanguageSwitcherDropdownOpen=true\"\n #languageSwitcherBtn>\n <upd-icon tablerIcon=\"language\"></upd-icon>\n </upd-link>\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLanguageSwitcherDropdownOpen\"\n [dropdownReference]=\"languageSwitcherRef()\" [items]=\"languagesOptions()\" [shouldCloseOnOutsideClick]=\"true\"\n (isOpenChange)=\"isLanguageSwitcherDropdownOpen = $event\" (selectedItem)=\"switchLanguage($event)\">\n </upd-dropdown>\n </div>\n }\n @if (!!config().showNotifications && !!userInfo()) {\n <div class=\"nav-item dropdown d-none d-md-flex\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isNotificationsDropdownOpen = true\"\n #notificationsBtn>\n <upd-icon [tablerIcon]=\"currentNotificationsIcon()\"></upd-icon>\n @if (hasNewNotifications()) {\n <span class=\"badge bg-red\" [class.badge-blink]=\"shouldBlinkIfNewNotifications()\"></span>\n }\n </upd-link>\n <upd-dropdown wrapperClasses=\"mt-1 dropdown-menu-card\" [isOpen]=\"isNotificationsDropdownOpen\"\n [dropdownReference]=\"notificationsRef()\" [shouldCloseOnOutsideClick]=\"true\"\n (isOpenChange)=\"isNotificationsDropdownOpen = $event\" [minWidth]=\"400\" arrowType=\"right\">\n <div class=\"card\">\n <div class=\"card-header\">\n <h3 class=\"card-title\">{{ 'UpDevs.NotificationCenter.Title' | transloco }}</h3>\n </div>\n @for (notification of latestNotifications(); track notification) {\n <div class=\"list-group list-group-flush list-group-hoverable\" (click)=\"readNotification(notification)\">\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\">\n @if (!!notification.dateRead) {\n <span class=\"status-dot d-block\"></span>\n } @else {\n <span class=\"status-dot status-dot-animated bg-primary d-block\"></span>\n }\n </div>\n <div class=\"col text-truncate\">\n <a href=\"javascript:void(0)\" class=\"text-body d-block\"\n [class.fw-bold]=\"!notification.dateRead\">\n {{ textService.getText(notification.title) }}\n </a>\n @if (!!notification.description) {\n <div class=\"d-block text-secondary text-truncate mt-n1\">\n {{ textService.getText(notification.description) }}\n </div>\n }\n </div>\n <div class=\"col-auto\">\n <upd-link [customClasses]=\"['list-group-item-actions']\"\n (clicked)=\"removeNotification(notification)\">\n <upd-icon tablerIcon=\"x\"></upd-icon>\n </upd-link>\n </div>\n </div>\n </div>\n </div>\n } @empty {\n <div class=\"empty\">\n <h1 class=\"text-body-tertiary\">{{ 'UpDevs.NotificationCenter.NoNotifications' | transloco }}</h1>\n </div>\n }\n </div>\n </upd-dropdown>\n </div>\n }\n </div>\n @if (!!config().showUserMenu && !!userInfo()) {\n <div class=\"nav-item dropdown\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLoggedUserDropdownOpen = true\" #loggedUserBtn>\n @if (!!userInfo()!.avatar) {\n <span class=\"avatar avatar-sm\" style=\"background-image: url({{userInfo()?.avatar}})\"></span>\n } @else {\n <span class=\"avatar avatar-sm\">{{ userInitials() }}</span>\n }\n\n <div class=\"d-none d-xl-block px-2\">\n <div>{{ userIdentification() }}</div>\n @if (!!userDescription()) {\n <div class=\"mt-1 small text-muted\">{{ userDescription() }}</div>\n }\n </div>\n </upd-link>\n @if (loggedUserOptions().length > 0) {\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLoggedUserDropdownOpen\" [dropdownReference]=\"loggedUserRef()\"\n [items]=\"loggedUserOptions()\" [shouldCloseOnOutsideClick]=\"true\" (selectedItem)=\"selectLoggedUserMenuItem($event)\"\n (isOpenChange)=\"isLoggedUserDropdownOpen = $event\" arrowType=\"right\">\n </upd-dropdown>\n }\n </div>\n }\n </div>\n @if (!!config().showSearchBar && !!userInfo()) {\n <div class=\"collapse navbar-collapse\" [class.show]=\"isSidebarMobileOpen()\">\n <div class=\"me-2\" [class.w-100]=\"config().shouldUseFullSearchBar\">\n <form autocomplete=\"off\" novalidate>\n <div class=\"input-icon\">\n <span class=\"input-icon-addon\">\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </span>\n <input type=\"text\" value=\"\" class=\"form-control\" placeholder=\"{{'UpDevs.Header.Search' | transloco}}...\">\n </div>\n </form>\n </div>\n </div>\n } @else {\n <div></div>\n }\n</div>\n" }]
136
+ }], propDecorators: { classes: [{
72
137
  type: HostBinding,
73
138
  args: ['class']
74
- }], style: [{
75
- type: Input
76
- }], showSearchBar: [{
77
- type: Input
78
139
  }] } });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VwZGV2cy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvaGVhZGVyL2hlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91cGRldnMvY29tcG9uZW50cy9sYXlvdXQvc3JjL3BhcnRpYWxzL2hlYWRlci9oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQThCLGFBQWEsRUFBaUIsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7OztBQVk5RixNQUFNLE9BQU8sZUFBZ0IsU0FBUSxhQUFhO0lBZ0I5QyxZQUNZLHVCQUFtRCxFQUNuRCxhQUE0QixFQUM1QixnQkFBa0M7UUFFMUMsS0FBSyxFQUFFLENBQUM7UUFKQSw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQTRCO1FBQ25ELGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFsQnhCLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBRWpDLFVBQUssR0FBb0IsT0FBTyxDQUFDO1FBQ2pDLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTlCLGtCQUFhLEdBQW9CLE1BQU0sQ0FBQztRQUN4QyxtQkFBYyxHQUFHLE9BQU8sQ0FBQztRQUN6Qiw2QkFBd0IsR0FBb0IsTUFBTSxDQUFDO1FBQ25ELHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIseUJBQW9CLEdBQUcsSUFBSSxDQUFDLENBQUMsdUJBQXVCO1FBQ3BELGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRWIsdUJBQWtCLEdBQUcsdURBQXVELENBQUM7SUFRckYsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUU1QixJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUU7WUFDN0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDN0I7UUFFRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQ2xELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzVCO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQztRQUNqRCxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDakQsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBRXJELElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsY0FBYztRQUNWLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELGlCQUFpQjtRQUNiLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBRU8sdUJBQXVCO1FBQzNCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNuRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDekQsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixXQUFXLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1RSxDQUFDOytHQXZFUSxlQUFlO21HQUFmLGVBQWUsb05DYjVCLHlnV0FtS0E7OzRGRHRKYSxlQUFlO2tCQU4zQixTQUFTOytCQUNJLFlBQVksaUJBR1AsaUJBQWlCLENBQUMsSUFBSTs0S0FHZixjQUFjO3NCQUFuQyxXQUFXO3VCQUFDLE9BQU87Z0JBRVgsS0FBSztzQkFBYixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBJbnB1dCwgSG9zdEJpbmRpbmcsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVcGRDb3JlTGF5b3V0Q29uZmlnU2VydmljZSwgQmFzZUNvbXBvbmVudCwgTGF5b3V0U2VydmljZSB9IGZyb20gJ0B1cGRldnMvc2RrL2xheW91dCc7XG5pbXBvcnQgeyBUYWJsZXJJY29uc1R5cGUgfSBmcm9tICdAdXBkZXZzL2ljb25zJztcbmltcG9ydCB7IFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICdAbmduZWF0L3RyYW5zbG9jbyc7XG5cbmltcG9ydCB7IEhlYWRlclN0eWxlVHlwZSB9IGZyb20gJy4vaGVhZGVyLXN0eWxlLnR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VwZC1oZWFkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2hlYWRlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgSGVhZGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgd3JhcHBlckNsYXNzZXMgPSAnJztcblxuICAgIEBJbnB1dCgpIHN0eWxlOiBIZWFkZXJTdHlsZVR5cGUgPSAnbGlnaHQnO1xuICAgIEBJbnB1dCgpIHNob3dTZWFyY2hCYXIgPSB0cnVlO1xuXG4gICAgbmV4dFRoZW1lSWNvbjogVGFibGVySWNvbnNUeXBlID0gJ21vb24nO1xuICAgIG5leHRUaGVtZUNvbG9yID0gJ2JsYWNrJztcbiAgICBjdXJyZW50Tm90aWZpY2F0aW9uc0ljb246IFRhYmxlckljb25zVHlwZSA9ICdiZWxsJztcbiAgICBoYXNOZXdOb3RpZmljYXRpb25zID0gZmFsc2U7XG4gICAgc2hvd05vdGlmaWNhdGlvbnMgPSBmYWxzZTtcbiAgICBzaG93TGFuZ3VhZ2VTd2l0Y2hlciA9IHRydWU7IC8vIFRPRE86IGFkZCBvbiBjb25maWcuXG4gICAgc2hvd1VzZXJNZW51ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGJhc2VXcmFwcGVyQ2xhc3NlcyA9ICduYXZiYXIgbmF2YmFyLWV4cGFuZC1tZCBkLW5vbmUgZC1sZy1mbGV4IGQtcHJpbnQtbm9uZSc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjb3JlTGF5b3V0Q29uZmlnU2VydmljZTogVXBkQ29yZUxheW91dENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xvY29TZXJ2aWNlOiBUcmFuc2xvY29TZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlV3JhcHBlckNsYXNzZXMoKTtcblxuICAgICAgICBpZiAodGhpcy5jb3JlTGF5b3V0Q29uZmlnU2VydmljZS5jb25maWcuc2hvd05vdGlmaWNhdGlvbnNCdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBOb3RpZmljYXRpb25zKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb3JlTGF5b3V0Q29uZmlnU2VydmljZS5jb25maWcuc2hvd1VzZXJNZW51KSB7XG4gICAgICAgICAgICB0aGlzLnNob3dVc2VyTWVudSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICghIWNoYW5nZXNbJ3N0eWxlJ10uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVdyYXBwZXJDbGFzc2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2hUaGVtZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNEYXJrTW9kZSA9IHRoaXMubmV4dFRoZW1lSWNvbiA9PT0gJ21vb24nO1xuICAgICAgICB0aGlzLm5leHRUaGVtZUljb24gPSBpc0RhcmtNb2RlID8gJ3N1bicgOiAnbW9vbic7XG4gICAgICAgIHRoaXMubmV4dFRoZW1lQ29sb3IgPSBpc0RhcmtNb2RlID8gJ3doaXRlJyA6ICdibGFjayc7XG5cbiAgICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLnRvZ2dsZURhcmtNb2RlKGlzRGFya01vZGUpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGltcGxlbWVudC5cbiAgICBzd2l0Y2hMYW5ndWFnZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudExhbmcgPSB0aGlzLnRyYW5zbG9jb1NlcnZpY2UuZ2V0QWN0aXZlTGFuZygpO1xuICAgICAgICB0aGlzLnRyYW5zbG9jb1NlcnZpY2Uuc2V0QWN0aXZlTGFuZyhjdXJyZW50TGFuZyA9PT0gJ2VuJyA/ICdwdCcgOiAnZW4nKTtcbiAgICB9XG5cbiAgICBvcGVuTm90aWZpY2F0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVOb3RpZmljYXRpb25zSWNvbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBOb3RpZmljYXRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dOb3RpZmljYXRpb25zID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZU5vdGlmaWNhdGlvbnNJY29uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnJlbnROb3RpZmljYXRpb25zSWNvbiA9IHRoaXMuY3VycmVudE5vdGlmaWNhdGlvbnNJY29uID09PSAnYmVsbCcgPyAnYmVsbC1yaW5naW5nJyA6ICdiZWxsJztcbiAgICAgICAgdGhpcy5oYXNOZXdOb3RpZmljYXRpb25zID0gIXRoaXMuaGFzTmV3Tm90aWZpY2F0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVdyYXBwZXJDbGFzc2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLndyYXBwZXJDbGFzc2VzID0gYCR7dGhpcy5iYXNlV3JhcHBlckNsYXNzZXN9IG5hdmJhci0ke3RoaXMuc3R5bGV9YDtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLXhsXCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cIm5hdmJhci10b2dnbGVyXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdmJhci10b2dnbGVyLWljb25cIj48L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz1cIm5hdmJhci1uYXYgZmxleC1yb3cgb3JkZXItbWQtbGFzdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ub25lIGQtbWQtZmxleCBtZS0zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8dXBkLWxpbmsgW2lzTmF2aWdhdGlvbl09XCJ0cnVlXCIgW2N1c3RvbUNsYXNzZXNdPVwiWydweC0wJ11cIiAoY2xpY2tlZCk9XCJzd2l0Y2hUaGVtZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDx1cGQtaWNvbiBbdGFibGVySWNvbl09XCJuZXh0VGhlbWVJY29uXCI+PC91cGQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L3VwZC1saW5rPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0xhbmd1YWdlU3dpdGNoZXJcIiBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPHVwZC1saW5rIFtpc05hdmlnYXRpb25dPVwidHJ1ZVwiIFtjdXN0b21DbGFzc2VzXT1cIlsncHgtMCddXCIgKGNsaWNrZWQpPVwic3dpdGNoTGFuZ3VhZ2UoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8dXBkLWljb24gdGFibGVySWNvbj1cImZsYWdcIj48L3VwZC1pY29uPlxuICAgICAgICAgICAgICAgIDwvdXBkLWxpbms+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93Tm90aWZpY2F0aW9uc1wiIGNsYXNzPVwibmF2LWl0ZW0gZHJvcGRvd24gZC1ub25lIGQtbWQtZmxleFwiPlxuICAgICAgICAgICAgICAgIDx1cGQtbGluayBbaXNOYXZpZ2F0aW9uXT1cInRydWVcIiBbY3VzdG9tQ2xhc3Nlc109XCJbJ3B4LTAnXVwiIChjbGlja2VkKT1cIm9wZW5Ob3RpZmljYXRpb25zKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPHVwZC1pY29uIFt0YWJsZXJJY29uXT1cImN1cnJlbnROb3RpZmljYXRpb25zSWNvblwiPjwvdXBkLWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaGFzTmV3Tm90aWZpY2F0aW9uc1wiIGNsYXNzPVwiYmFkZ2UgYmctcmVkXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvdXBkLWxpbms+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1hcnJvdyBkcm9wZG93bi1tZW51LWVuZCBkcm9wZG93bi1tZW51LWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGVcIj5MYXN0IHVwZGF0ZXM8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoIGxpc3QtZ3JvdXAtaG92ZXJhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+PHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0YXR1cy1kb3Qgc3RhdHVzLWRvdC1hbmltYXRlZCBiZy1yZWQgZC1ibG9ja1wiPjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgdGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJ0ZXh0LWJvZHkgZC1ibG9ja1wiPkV4YW1wbGUgMTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ibG9jayB0ZXh0LW11dGVkIHRleHQtdHJ1bmNhdGUgbXQtbjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlIGRlcHJlY2F0ZWQgaHRtbCB0YWdzIHRvIHRleHQgZGVjb3JhdGlvbiBjbGFzc2VzICgjMjk2MDQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERvd25sb2FkIFNWRyBpY29uIGZyb20gaHR0cDovL3RhYmxlci1pY29ucy5pby9pL3N0YXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiaWNvbiB0ZXh0LW11dGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIgMTcuNzVsLTYuMTcyIDMuMjQ1bDEuMTc5IC02Ljg3M2wtNSAtNC44NjdsNi45IC0xbDMuMDg2IC02LjI1M2wzLjA4NiA2LjI1M2w2LjkgMWwtNSA0Ljg2N2wxLjE3OSA2Ljg3M3pcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj48c3BhbiBjbGFzcz1cInN0YXR1cy1kb3QgZC1ibG9ja1wiPjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgdGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJ0ZXh0LWJvZHkgZC1ibG9ja1wiPkV4YW1wbGUgMjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ibG9jayB0ZXh0LW11dGVkIHRleHQtdHJ1bmNhdGUgbXQtbjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OmJldHdlZW4g4oeSIGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuICgjMjk3MzQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0tYWN0aW9ucyBzaG93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRG93bmxvYWQgU1ZHIGljb24gZnJvbSBodHRwOi8vdGFibGVyLWljb25zLmlvL2kvc3RhciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJpY29uIHRleHQteWVsbG93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIgMTcuNzVsLTYuMTcyIDMuMjQ1bDEuMTc5IC02Ljg3M2wtNSAtNC44NjdsNi45IC0xbDMuMDg2IC02LjI1M2wzLjA4NiA2LjI1M2w2LjkgMWwtNSA0Ljg2N2wxLjE3OSA2Ljg3M3pcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj48c3BhbiBjbGFzcz1cInN0YXR1cy1kb3QgZC1ibG9ja1wiPjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgdGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJ0ZXh0LWJvZHkgZC1ibG9ja1wiPkV4YW1wbGUgMzwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ibG9jayB0ZXh0LW11dGVkIHRleHQtdHJ1bmNhdGUgbXQtbjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlIGNoYW5nZS12ZXJzaW9uLmpzICgjMjk3MzYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERvd25sb2FkIFNWRyBpY29uIGZyb20gaHR0cDovL3RhYmxlci1pY29ucy5pby9pL3N0YXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiaWNvbiB0ZXh0LW11dGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIgMTcuNzVsLTYuMTcyIDMuMjQ1bDEuMTc5IC02Ljg3M2wtNSAtNC44NjdsNi45IC0xbDMuMDg2IC02LjI1M2wzLjA4NiA2LjI1M2w2LjkgMWwtNSA0Ljg2N2wxLjE3OSA2Ljg3M3pcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj48c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RhdHVzLWRvdCBzdGF0dXMtZG90LWFuaW1hdGVkIGJnLWdyZWVuIGQtYmxvY2tcIj48L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwidGV4dC1ib2R5IGQtYmxvY2tcIj5FeGFtcGxlIDQ8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtYmxvY2sgdGV4dC1tdXRlZCB0ZXh0LXRydW5jYXRlIG10LW4xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2VuZXJhdGUgcGFja2FnZS1sb2NrLmpzb24gKCMyOTczMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbS1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRG93bmxvYWQgU1ZHIGljb24gZnJvbSBodHRwOi8vdGFibGVyLWljb25zLmlvL2kvc3RhciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJpY29uIHRleHQtbXV0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgZmlsbD1cIm5vbmVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMiAxNy43NWwtNi4xNzIgMy4yNDVsMS4xNzkgLTYuODczbC01IC00Ljg2N2w2LjkgLTFsMy4wODYgLTYuMjUzbDMuMDg2IDYuMjUzbDYuOSAxbC01IDQuODY3bDEuMTc5IDYuODczelwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1VzZXJNZW51XCIgY2xhc3M9XCJuYXYtaXRlbSBkcm9wZG93blwiPlxuICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cIm5hdi1saW5rIGQtZmxleCBsaC0xIHRleHQtcmVzZXQgcC0wXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk9wZW4gdXNlciBtZW51XCI+XG4gICAgICAgICAgICAgICAgPCEtLTxzcGFuIGNsYXNzPVwiYXZhdGFyIGF2YXRhci1zbVwiIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKC4vc3RhdGljL2F2YXRhcnMvMDAwbS5qcGcpXCI+PC9zcGFuPi0tPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXZhdGFyIGF2YXRhci1zbVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ub25lIGQteGwtYmxvY2sgcHMtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PkVyb3MgU3RlaW48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTEgc21hbGwgdGV4dC1tdXRlZFwiPkFkbWluaXN0cmF0b3I8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtZW5kIGRyb3Bkb3duLW1lbnUtYXJyb3dcIj5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiPlN0YXR1czwvYT5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiLi9wcm9maWxlLmh0bWxcIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIj5Qcm9maWxlPC9hPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCI+RmVlZGJhY2s8L2E+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiLi9zZXR0aW5ncy5odG1sXCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCI+U2V0dGluZ3M8L2E+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIi4vc2lnbi1pbi5odG1sXCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCI+TG9nb3V0PC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzaG93U2VhcmNoQmFyXCIgY2xhc3M9XCJjb2xsYXBzZSBuYXZiYXItY29sbGFwc2VcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIG5vdmFsaWRhdGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtaWNvbi1hZGRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cGQtaWNvbiB0YWJsZXJJY29uPVwic2VhcmNoXCI+PC91cGQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNo4oCmXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sYXlvdXQvc3JjL3BhcnRpYWxzL2hlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvaGVhZGVyL2hlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixXQUFXLEVBRVgsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFVBQVUsRUFBRSxLQUFLLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQXFCLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFVdkQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsYUFBYTtJQU5sRDs7UUFXSSx3QkFBbUIsR0FBRyxTQUFTLENBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM3RSxxQkFBZ0IsR0FBRyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN2RSxrQkFBYSxHQUFHLFNBQVMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENB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LEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQzs4R0E3SVEsZUFBZTtrR0FBZixlQUFlLGdWQUt1QyxVQUFVLCtIQUNoQixVQUFVLHlIQUNoQixVQUFVLG9FQ2xDakUsOHNQQTRIQTs7MkZEakdhLGVBQWU7a0JBTjNCLFNBQVM7K0JBQ0ksWUFBWSxpQkFHUCxpQkFBaUIsQ0FBQyxJQUFJOzhCQUdYLE9BQU87c0JBQWhDLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIE9uSW5pdCxcbiAgICBpbmplY3QsXG4gICAgY29tcHV0ZWQsXG4gICAgc2lnbmFsLFxuICAgIHZpZXdDaGlsZCxcbiAgICBFbGVtZW50UmVmLCBpbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhYmxlckljb25zVHlwZSB9IGZyb20gJ0B1cGRldnMvaWNvbnMnO1xuaW1wb3J0IHsgVGV4dFNlcnZpY2UgfSBmcm9tICdAdXBkZXZzL3Nkayc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBMYXlvdXRTZXJ2aWNlLCBQcmVmZXJlbmNlc1N0b3JhZ2UsIFVwZENvcmVMYXlvdXRDb25maWdTZXJ2aWNlIH0gZnJvbSAnQHVwZGV2cy9zZGsvbGF5b3V0JztcbmltcG9ydCB7IERyb3Bkb3duSXRlbSB9IGZyb20gJ0B1cGRldnMvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbk1vZGVsLCBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gJ0B1cGRldnMvc2RrL25vdGlmaWNhdGlvbnMnO1xuaW1wb3J0IHsgU2VjdXJpdHlTdG9yYWdlIH0gZnJvbSAnQHVwZGV2cy9zZGsvc2VjdXJpdHknO1xuXG5pbXBvcnQgeyBIZWFkZXJTdHlsZVR5cGUgfSBmcm9tICcuL2hlYWRlci1zdHlsZS50eXBlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1cGQtaGVhZGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEhlYWRlckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKSBnZXQgY2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVyQ2xhc3NlcygpO1xuICAgIH1cblxuICAgIGxhbmd1YWdlU3dpdGNoZXJSZWYgPSB2aWV3Q2hpbGQoJ2xhbmd1YWdlU3dpdGNoZXJCdG4nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSk7XG4gICAgbm90aWZpY2F0aW9uc1JlZiA9IHZpZXdDaGlsZCgnbm90aWZpY2F0aW9uc0J0bicsIHsgcmVhZDogRWxlbWVudFJlZiB9KTtcbiAgICBsb2dnZWRVc2VyUmVmID0gdmlld0NoaWxkKCdsb2dnZWRVc2VyQnRuJywgeyByZWFkOiBFbGVtZW50UmVmIH0pO1xuXG4gICAgaXNMYW5ndWFnZVN3aXRjaGVyRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgaXNOb3RpZmljYXRpb25zRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgaXNMb2dnZWRVc2VyRHJvcGRvd25PcGVuID0gZmFsc2U7XG5cbiAgICByZWFkb25seSBzdHlsZSA9IGlucHV0PEhlYWRlclN0eWxlVHlwZT4oJ2xpZ2h0Jyk7XG4gICAgcmVhZG9ubHkgbmV4dFRoZW1lSWNvbiA9IGNvbXB1dGVkPFRhYmxlckljb25zVHlwZT4oKCkgPT4gdGhpcy5jdXJyZW50UHJlZmVyZW5jZXMoKT8uaXNEYXJrVGhlbWUgPyAnc3VuJyA6ICdtb29uLXN0YXJzJyk7XG4gICAgcmVhZG9ubHkgY3VycmVudE5vdGlmaWNhdGlvbnNJY29uID0gY29tcHV0ZWQ8VGFibGVySWNvbnNUeXBlPigoKSA9PiB0aGlzLmhhc05ld05vdGlmaWNhdGlvbnMoKSA/ICdiZWxsLXJpbmdpbmcnIDogJ2JlbGwnKTtcbiAgICByZWFkb25seSBoYXNOZXdOb3RpZmljYXRpb25zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJyZW50Tm90aWZpY2F0aW9ucygpLnNvbWUobiA9PiAhbi5kYXRlUmVhZCkpO1xuICAgIHJlYWRvbmx5IHVzZXJJbmZvID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWN1cml0eVN0b3JhZ2UuZ2V0VXNlckluZm8oKSk7XG4gICAgcmVhZG9ubHkgdGV4dFNlcnZpY2UgPSBpbmplY3QoVGV4dFNlcnZpY2UpO1xuICAgIHJlYWRvbmx5IGlzU2lkZWJhck1vYmlsZU9wZW4gPSBzaWduYWwoZmFsc2UpO1xuICAgIHJlYWRvbmx5IHNob3VsZEJsaW5rSWZOZXdOb3RpZmljYXRpb25zID0gY29tcHV0ZWQoKCkgPT4gISF0aGlzLmNvcmVMYXlvdXRDb25maWdTZXJ2aWNlLmNvbmZpZy5zaG91bGRCbGlua0lmTmV3Tm90aWZpY2F0aW9ucyk7XG4gICAgcmVhZG9ubHkgbGFuZ3VhZ2VzT3B0aW9ucyA9IGNvbXB1dGVkPERyb3Bkb3duSXRlbVtdPigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsbExhbmd1YWdlc09wdGlvbnM6IERyb3Bkb3duSXRlbVtdID0gW107XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZUxhbmd1YWdlcyA9ICh0aGlzLmNvcmVMYXlvdXRDb25maWdTZXJ2aWNlLmNvbmZpZy5hdmFpbGFibGVMYW5ndWFnZXMgfHwge30pO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGF2YWlsYWJsZUxhbmd1YWdlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgYWxsTGFuZ3VhZ2VzT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDoga2V5LFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgICB0ZXh0OiBhdmFpbGFibGVMYW5ndWFnZXNba2V5XSxcbiAgICAgICAgICAgICAgICBpc0FjdGl2ZTogdGhpcy5jdXJyZW50TGFuZ3VhZ2VLZXkoKSA9PT0ga2V5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGFsbExhbmd1YWdlc09wdGlvbnM7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgbG9nZ2VkVXNlck9wdGlvbnMgPSBjb21wdXRlZDxEcm9wZG93bkl0ZW1bXT4oKCkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyQWN0aW9uczogRHJvcGRvd25JdGVtW10gPSBbXTtcblxuICAgICAgICB0aGlzLmNvcmVMYXlvdXRDb25maWdTZXJ2aWNlLmNvbmZpZy5sb2dnZWRVc2VyTWVudUFjdGlvbnMuZm9yRWFjaChhY3QgPT4gdXNlckFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICBpZDogYWN0LmlkISgpLFxuICAgICAgICAgICAgdGV4dDogYWN0LnRleHQhKCksXG4gICAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICBpY29uOiBhY3QuaWNvbk1vZGVsPy4oKVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgcmV0dXJuIHVzZXJBY3Rpb25zO1xuICAgIH0pO1xuICAgIHJlYWRvbmx5IHVzZXJJZGVudGlmaWNhdGlvbiA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgICEhdGhpcy51c2VySW5mbygpID8gdGhpcy5jb3JlTGF5b3V0Q29uZmlnU2VydmljZS5jb25maWcuZ2V0VXNlck5hbWUodGhpcy51c2VySW5mbygpISkgOiAnJ1xuICAgICk7XG4gICAgcmVhZG9ubHkgdXNlckRlc2NyaXB0aW9uID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgISF0aGlzLmNvcmVMYXlvdXRDb25maWdTZXJ2aWNlLmNvbmZpZy5nZXRVc2VyRGVzY3JpcHRpb25cbiAgICAgICAgICAgID8gdGhpcy5jb3JlTGF5b3V0Q29uZmlnU2VydmljZS5jb25maWcuZ2V0VXNlckRlc2NyaXB0aW9uKHRoaXMudXNlckluZm8oKSEpXG4gICAgICAgICAgICA6ICcnXG4gICAgKTtcbiAgICByZWFkb25seSBsYXRlc3ROb3RpZmljYXRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB1bnJlYWROb3RpZmljYXRpb25zID0gdGhpcy5jdXJyZW50Tm90aWZpY2F0aW9ucygpXG4gICAgICAgICAgICAuZmlsdGVyKG4gPT4gIW4uZGF0ZVJlYWQpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gbmV3IERhdGUoYi5kYXRlUmVjZWl2ZWQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEuZGF0ZVJlY2VpdmVkKS5nZXRUaW1lKCkpXG4gICAgICAgICAgICAuc2xpY2UoMCwgdGhpcy5jb3JlTGF5b3V0Q29uZmlnU2VydmljZS5jb25maWcubnVtYmVyT2ZMYXN0Tm90aWZpY2F0aW9uc0Rpc3BsYXllZCk7XG4gICAgICAgIGNvbnN0IHJlYWROb3RpZmljYXRpb25zID0gdGhpcy5jdXJyZW50Tm90aWZpY2F0aW9ucygpXG4gICAgICAgICAgICAuZmlsdGVyKG4gPT4gISFuLmRhdGVSZWFkKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IG5ldyBEYXRlKGIuZGF0ZVJlY2VpdmVkKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLmRhdGVSZWNlaXZlZCkuZ2V0VGltZSgpKVxuICAgICAgICAgICAgLnNsaWNlKDAsIHRoaXMuY29yZUxheW91dENvbmZpZ1NlcnZpY2UuY29uZmlnLm51bWJlck9mTGFzdE5vdGlmaWNhdGlvbnNEaXNwbGF5ZWQpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi51bnJlYWROb3RpZmljYXRpb25zLFxuICAgICAgICAgICAgLi4ucmVhZE5vdGlmaWNhdGlvbnNcbiAgICAgICAgXS5zbGljZSgwLCB0aGlzLmNvcmVMYXlvdXRDb25maWdTZXJ2aWNlLmNvbmZpZy5udW1iZXJPZkxhc3ROb3RpZmljYXRpb25zRGlzcGxheWVkKTtcbiAgICB9KTtcbiAgICByZWFkb25seSB1c2VySW5pdGlhbHMgPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IHtcbiAgICAgICAgY29uc3QgZmlyc3RDaGFyID0gdGhpcy51c2VySWRlbnRpZmljYXRpb24oKS5jaGFyQXQoMCk7XG4gICAgICAgIGNvbnN0IGxhc3RTcGFjZUluZGV4ID0gdGhpcy51c2VySWRlbnRpZmljYXRpb24oKS5sYXN0SW5kZXhPZignICcpO1xuICAgICAgICBjb25zdCBmaXJzdEFmdGVyTGFzdFNwYWNlID0gbGFzdFNwYWNlSW5kZXggIT09IC0xID8gdGhpcy51c2VySWRlbnRpZmljYXRpb24oKS5jaGFyQXQobGFzdFNwYWNlSW5kZXggKyAxKSA6ICcnO1xuXG4gICAgICAgIHJldHVybiBgJHtmaXJzdENoYXJ9JHtmaXJzdEFmdGVyTGFzdFNwYWNlfWA7XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlY3VyaXR5U3RvcmFnZSA9IGluamVjdChTZWN1cml0eVN0b3JhZ2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29yZUxheW91dENvbmZpZ1NlcnZpY2UgPSBpbmplY3QoVXBkQ29yZUxheW91dENvbmZpZ1NlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbGF5b3V0U2VydmljZSA9IGluamVjdChMYXlvdXRTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbG9jb1NlcnZpY2UgPSBpbmplY3QoVHJhbnNsb2NvU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmVmZXJlbmNlc1N0b3JhZ2UgPSBpbmplY3QoUHJlZmVyZW5jZXNTdG9yYWdlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmaWNhdGlvbnNTZXJ2aWNlID0gaW5qZWN0KE5vdGlmaWNhdGlvbnNTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRQcmVmZXJlbmNlcyA9IHRoaXMucHJlZmVyZW5jZXNTdG9yYWdlLmdldFByZWZlcmVuY2VzKCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50Tm90aWZpY2F0aW9ucyA9IHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2Uubm90aWZpY2F0aW9ucztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRMYW5ndWFnZUtleSA9IHNpZ25hbCgnJyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB3cmFwcGVyQ2xhc3NlcyA9IGNvbXB1dGVkKCgpID0+IGBuYXZiYXIgbmF2YmFyLWV4cGFuZC1tZCBkLW5vbmUgZC1sZy1mbGV4IGQtcHJpbnQtbm9uZSBuYXZiYXItJHt0aGlzLnN0eWxlKCl9YCk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xuICAgIHJlYWRvbmx5IGNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMubGF5b3V0U2VydmljZS5tYWluSGVhZGVyQ29uZmlnKCkpO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICghIXRoaXMuY3VycmVudFByZWZlcmVuY2VzKCk/LmlzRGFya1RoZW1lKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFNlcnZpY2Uuc2V0RGFya01vZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghIXRoaXMuY3VycmVudFByZWZlcmVuY2VzKCk/LmN1cnJlbnRMYW5ndWFnZUNvZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSB0aGlzLmN1cnJlbnRQcmVmZXJlbmNlcygpIS5jdXJyZW50TGFuZ3VhZ2VDb2RlITtcblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VLZXkuc2V0KGNvZGUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2xvY29TZXJ2aWNlLnNldEFjdGl2ZUxhbmcoY29kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2hUaGVtZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLnRvZ2dsZURhcmtNb2RlKCk7XG4gICAgfVxuXG4gICAgc3dpdGNoTGFuZ3VhZ2UoaXRlbTogRHJvcGRvd25JdGVtKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlS2V5LnNldChpdGVtLmlkKTtcbiAgICAgICAgdGhpcy50cmFuc2xvY29TZXJ2aWNlLnNldEFjdGl2ZUxhbmcoaXRlbS5pZCk7XG4gICAgICAgIHRoaXMucHJlZmVyZW5jZXNTdG9yYWdlLnNhdmVQcmVmZXJlbmNlcyh7IC4uLnRoaXMuY3VycmVudFByZWZlcmVuY2VzKCksIGN1cnJlbnRMYW5ndWFnZUNvZGU6IGl0ZW0uaWQgfSk7XG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5ub3RpZnlVc2VyQ2hhbmdlZExhbmd1YWdlKGl0ZW0uaWQpO1xuXG4gICAgICAgIHRoaXMuaXNMYW5ndWFnZVN3aXRjaGVyRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc2VsZWN0TG9nZ2VkVXNlck1lbnVJdGVtKGl0ZW06IERyb3Bkb3duSXRlbSk6IHZvaWQge1xuICAgICAgICBjb25zdCBidG4gPSB0aGlzLmNvcmVMYXlvdXRDb25maWdTZXJ2aWNlLmNvbmZpZy5sb2dnZWRVc2VyTWVudUFjdGlvbnMuZmluZChiID0+IGIuaWQhKCkgPT09IGl0ZW0uaWQpO1xuXG4gICAgICAgIGlmICghIWJ0bj8uY2xpY2tGdW5jdGlvbikge1xuICAgICAgICAgICAgYnRuLmNsaWNrRnVuY3Rpb24hKHsgZGF0YTogdGhpcy51c2VySW5mbygpIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVhZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbk1vZGVsKTogdm9pZCB7XG4gICAgICAgIGlmICghbm90aWZpY2F0aW9uLmRhdGVSZWFkKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLm1hcmtBc1JlYWQobm90aWZpY2F0aW9uLmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuY2xpY2tPbk5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pO1xuICAgIH1cblxuICAgIHJlbW92ZU5vdGlmaWNhdGlvbihub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbk1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UucmVtb3ZlTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb24uaWQpO1xuICAgIH1cblxuICAgIHRvZ2dsZVNpZGViYXJPbk1vYmlsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1NpZGViYXJNb2JpbGVPcGVuLnNldCghdGhpcy5pc1NpZGViYXJNb2JpbGVPcGVuKCkpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXIteGxcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZVNpZGViYXJPbk1vYmlsZSgpXCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc1NpZGViYXJNb2JpbGVPcGVuKClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItdG9nZ2xlci1pY29uXCI+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJuYXZiYXItbmF2IGZsZXgtcm93IG9yZGVyLW1kLWxhc3RcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtbm9uZSBkLW1kLWZsZXggbWUtM1wiPlxuICAgICAgICAgICAgQGlmICghIWNvbmZpZygpLnNob3dUaGVtZVN3aXRjaGVyKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDx1cGQtbGluayBbaXNOYXZpZ2F0aW9uXT1cInRydWVcIiBbY3VzdG9tQ2xhc3Nlc109XCJbJ3B4LTAnXVwiIChjbGlja2VkKT1cInN3aXRjaFRoZW1lKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1cGQtaWNvbiBbdGFibGVySWNvbl09XCJuZXh0VGhlbWVJY29uKClcIj48L3VwZC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L3VwZC1saW5rPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmICghIWNvbmZpZygpLnNob3dMYW5ndWFnZVN3aXRjaGVyICYmIGxhbmd1YWdlc09wdGlvbnMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDx1cGQtbGluayBbaXNOYXZpZ2F0aW9uXT1cInRydWVcIiBbY3VzdG9tQ2xhc3Nlc109XCJbJ3B4LTAnXVwiIChjbGlja2VkKT1cImlzTGFuZ3VhZ2VTd2l0Y2hlckRyb3Bkb3duT3Blbj10cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAjbGFuZ3VhZ2VTd2l0Y2hlckJ0bj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1cGQtaWNvbiB0YWJsZXJJY29uPVwibGFuZ3VhZ2VcIj48L3VwZC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L3VwZC1saW5rPlxuICAgICAgICAgICAgICAgICAgICA8dXBkLWRyb3Bkb3duIHdyYXBwZXJDbGFzc2VzPVwibXQtMVwiIFtpc09wZW5dPVwiaXNMYW5ndWFnZVN3aXRjaGVyRHJvcGRvd25PcGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkcm9wZG93blJlZmVyZW5jZV09XCJsYW5ndWFnZVN3aXRjaGVyUmVmKClcIiBbaXRlbXNdPVwibGFuZ3VhZ2VzT3B0aW9ucygpXCIgW3Nob3VsZENsb3NlT25PdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoaXNPcGVuQ2hhbmdlKT1cImlzTGFuZ3VhZ2VTd2l0Y2hlckRyb3Bkb3duT3BlbiA9ICRldmVudFwiIChzZWxlY3RlZEl0ZW0pPVwic3dpdGNoTGFuZ3VhZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3VwZC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoISFjb25maWcoKS5zaG93Tm90aWZpY2F0aW9ucyAmJiAhIXVzZXJJbmZvKCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0gZHJvcGRvd24gZC1ub25lIGQtbWQtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICA8dXBkLWxpbmsgW2lzTmF2aWdhdGlvbl09XCJ0cnVlXCIgW2N1c3RvbUNsYXNzZXNdPVwiWydweC0wJ11cIiAoY2xpY2tlZCk9XCJpc05vdGlmaWNhdGlvbnNEcm9wZG93bk9wZW4gPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAjbm90aWZpY2F0aW9uc0J0bj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1cGQtaWNvbiBbdGFibGVySWNvbl09XCJjdXJyZW50Tm90aWZpY2F0aW9uc0ljb24oKVwiPjwvdXBkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGhhc05ld05vdGlmaWNhdGlvbnMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctcmVkXCIgW2NsYXNzLmJhZGdlLWJsaW5rXT1cInNob3VsZEJsaW5rSWZOZXdOb3RpZmljYXRpb25zKClcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdXBkLWxpbms+XG4gICAgICAgICAgICAgICAgICAgIDx1cGQtZHJvcGRvd24gd3JhcHBlckNsYXNzZXM9XCJtdC0xIGRyb3Bkb3duLW1lbnUtY2FyZFwiIFtpc09wZW5dPVwiaXNOb3RpZmljYXRpb25zRHJvcGRvd25PcGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkcm9wZG93blJlZmVyZW5jZV09XCJub3RpZmljYXRpb25zUmVmKClcIiBbc2hvdWxkQ2xvc2VPbk91dHNpZGVDbGlja109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc09wZW5DaGFuZ2UpPVwiaXNOb3RpZmljYXRpb25zRHJvcGRvd25PcGVuID0gJGV2ZW50XCIgW21pbldpZHRoXT1cIjQwMFwiIGFycm93VHlwZT1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlXCI+e3sgJ1VwRGV2cy5Ob3RpZmljYXRpb25DZW50ZXIuVGl0bGUnIHwgdHJhbnNsb2NvIH19PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChub3RpZmljYXRpb24gb2YgbGF0ZXN0Tm90aWZpY2F0aW9ucygpOyB0cmFjayBub3RpZmljYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaCBsaXN0LWdyb3VwLWhvdmVyYWJsZVwiIChjbGljayk9XCJyZWFkTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISFub3RpZmljYXRpb24uZGF0ZVJlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1kb3QgZC1ibG9ja1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RhdHVzLWRvdCBzdGF0dXMtZG90LWFuaW1hdGVkIGJnLXByaW1hcnkgZC1ibG9ja1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgdGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwidGV4dC1ib2R5IGQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mdy1ib2xkXT1cIiFub3RpZmljYXRpb24uZGF0ZVJlYWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0U2VydmljZS5nZXRUZXh0KG5vdGlmaWNhdGlvbi50aXRsZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISFub3RpZmljYXRpb24uZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ibG9jayB0ZXh0LXNlY29uZGFyeSB0ZXh0LXRydW5jYXRlIG10LW4xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRleHRTZXJ2aWNlLmdldFRleHQobm90aWZpY2F0aW9uLmRlc2NyaXB0aW9uKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXBkLWxpbmsgW2N1c3RvbUNsYXNzZXNdPVwiWydsaXN0LWdyb3VwLWl0ZW0tYWN0aW9ucyddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cGQtaWNvbiB0YWJsZXJJY29uPVwieFwiPjwvdXBkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VwZC1saW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbXB0eSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwidGV4dC1ib2R5LXRlcnRpYXJ5XCI+e3sgJ1VwRGV2cy5Ob3RpZmljYXRpb25DZW50ZXIuTm9Ob3RpZmljYXRpb25zJyB8IHRyYW5zbG9jbyB9fTwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3VwZC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoISFjb25maWcoKS5zaG93VXNlck1lbnUgJiYgISF1c2VySW5mbygpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0gZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICA8dXBkLWxpbmsgW2lzTmF2aWdhdGlvbl09XCJ0cnVlXCIgW2N1c3RvbUNsYXNzZXNdPVwiWydweC0wJ11cIiAoY2xpY2tlZCk9XCJpc0xvZ2dlZFVzZXJEcm9wZG93bk9wZW4gPSB0cnVlXCIgI2xvZ2dlZFVzZXJCdG4+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoISF1c2VySW5mbygpIS5hdmF0YXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXZhdGFyIGF2YXRhci1zbVwiIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKHt7dXNlckluZm8oKT8uYXZhdGFyfX0pXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXZhdGFyIGF2YXRhci1zbVwiPnt7IHVzZXJJbml0aWFscygpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtbm9uZSBkLXhsLWJsb2NrIHB4LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgdXNlcklkZW50aWZpY2F0aW9uKCkgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISF1c2VyRGVzY3JpcHRpb24oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xIHNtYWxsIHRleHQtbXV0ZWRcIj57eyB1c2VyRGVzY3JpcHRpb24oKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3VwZC1saW5rPlxuICAgICAgICAgICAgICAgIEBpZiAobG9nZ2VkVXNlck9wdGlvbnMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIDx1cGQtZHJvcGRvd24gd3JhcHBlckNsYXNzZXM9XCJtdC0xXCIgW2lzT3Blbl09XCJpc0xvZ2dlZFVzZXJEcm9wZG93bk9wZW5cIiBbZHJvcGRvd25SZWZlcmVuY2VdPVwibG9nZ2VkVXNlclJlZigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJsb2dnZWRVc2VyT3B0aW9ucygpXCIgW3Nob3VsZENsb3NlT25PdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiIChzZWxlY3RlZEl0ZW0pPVwic2VsZWN0TG9nZ2VkVXNlck1lbnVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGlzT3BlbkNoYW5nZSk9XCJpc0xvZ2dlZFVzZXJEcm9wZG93bk9wZW4gPSAkZXZlbnRcIiBhcnJvd1R5cGU9XCJyaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICA8L3VwZC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAoISFjb25maWcoKS5zaG93U2VhcmNoQmFyICYmICEhdXNlckluZm8oKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlXCIgW2NsYXNzLnNob3ddPVwiaXNTaWRlYmFyTW9iaWxlT3BlbigpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMlwiIFtjbGFzcy53LTEwMF09XCJjb25maWcoKS5zaG91bGRVc2VGdWxsU2VhcmNoQmFyXCI+XG4gICAgICAgICAgICAgICAgPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgbm92YWxpZGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtaWNvbi1hZGRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cGQtaWNvbiB0YWJsZXJJY29uPVwic2VhcmNoXCI+PC91cGQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwiXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cInt7J1VwRGV2cy5IZWFkZXIuU2VhcmNoJyB8IHRyYW5zbG9jb319Li4uXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdj48L2Rpdj5cbiAgICB9XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,40 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { UpdIconsModule } from '@updevs/icons';
4
+ import { UpdDropdownModule } from '@updevs/components/dropdown';
5
+ import { UpdLinkModule } from '@updevs/components/link';
6
+ import { TranslocoModule } from '@jsverse/transloco';
7
+ import { HeaderComponent } from './header.component';
8
+ import * as i0 from "@angular/core";
9
+ export class HeaderModule {
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HeaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: HeaderModule, declarations: [HeaderComponent], imports: [CommonModule,
12
+ TranslocoModule,
13
+ UpdIconsModule,
14
+ UpdDropdownModule,
15
+ UpdLinkModule], exports: [HeaderComponent] }); }
16
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HeaderModule, imports: [CommonModule,
17
+ TranslocoModule,
18
+ UpdIconsModule,
19
+ UpdDropdownModule,
20
+ UpdLinkModule] }); }
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HeaderModule, decorators: [{
23
+ type: NgModule,
24
+ args: [{
25
+ imports: [
26
+ CommonModule,
27
+ TranslocoModule,
28
+ UpdIconsModule,
29
+ UpdDropdownModule,
30
+ UpdLinkModule
31
+ ],
32
+ declarations: [
33
+ HeaderComponent
34
+ ],
35
+ exports: [
36
+ HeaderComponent
37
+ ]
38
+ }]
39
+ }] });
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sYXlvdXQvc3JjL3BhcnRpYWxzL2hlYWRlci9oZWFkZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBaUJyRCxNQUFNLE9BQU8sWUFBWTs4R0FBWixZQUFZOytHQUFaLFlBQVksaUJBTmpCLGVBQWUsYUFQZixZQUFZO1lBQ1osZUFBZTtZQUNmLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsYUFBYSxhQU1iLGVBQWU7K0dBR1YsWUFBWSxZQWJqQixZQUFZO1lBQ1osZUFBZTtZQUNmLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsYUFBYTs7MkZBU1IsWUFBWTtrQkFmeEIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixhQUFhO3FCQUNoQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1YsZUFBZTtxQkFDbEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLGVBQWU7cUJBQ2xCO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBVcGRJY29uc01vZHVsZSB9IGZyb20gJ0B1cGRldnMvaWNvbnMnO1xuaW1wb3J0IHsgVXBkRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAdXBkZXZzL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgVXBkTGlua01vZHVsZSB9IGZyb20gJ0B1cGRldnMvY29tcG9uZW50cy9saW5rJztcbmltcG9ydCB7IFRyYW5zbG9jb01vZHVsZSB9IGZyb20gJ0Bqc3ZlcnNlL3RyYW5zbG9jbyc7XG5cbmltcG9ydCB7IEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vaGVhZGVyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFRyYW5zbG9jb01vZHVsZSxcbiAgICAgICAgVXBkSWNvbnNNb2R1bGUsXG4gICAgICAgIFVwZERyb3Bkb3duTW9kdWxlLFxuICAgICAgICBVcGRMaW5rTW9kdWxlXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgSGVhZGVyQ29tcG9uZW50XG4gICAgXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIEhlYWRlckNvbXBvbmVudFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSGVhZGVyTW9kdWxlIHt9XG4iXX0=
@@ -1,3 +1,4 @@
1
1
  export * from './header.component';
2
+ export * from './header.module';
2
3
  export * from './header-style.type';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VwZGV2cy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvaGVhZGVyL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9oZWFkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVyLXN0eWxlLnR5cGUnO1xuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sYXlvdXQvc3JjL3BhcnRpYWxzL2hlYWRlci9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9oZWFkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVyLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2hlYWRlci1zdHlsZS50eXBlJztcbiJdfQ==
@@ -1,15 +1,15 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, input } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "@updevs/components/button";
3
+ import * as i1 from "@updevs/components/button";
5
4
  export class PageHeaderComponent {
6
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: PageHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.11", type: PageHeaderComponent, selector: "upd-page-header", inputs: { model: "model" }, ngImport: i0, template: "<div class=\"page-header d-print-none\">\n <div class=\"container-xl\">\n <div class=\"row g-2 align-items-center\">\n <div class=\"col\">\n <div class=\"page-pretitle\">\n {{model.titleHeader}}\n </div>\n <h2 class=\"page-title\">\n {{model.title}}\n </h2>\n </div>\n <div *ngIf=\"(model.actionButtons?.length || 0) > 0\" class=\"col-auto ms-auto d-print-none\">\n <div class=\"btn-list\">\n <upd-button *ngFor=\"let btn of model.actionButtons\" [model]=\"btn!\"></upd-button>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "upd-button", inputs: ["text", "model", "colorStyle", "brandColorStyle", "customClasses", "isActive", "isDisabled", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "shouldIgnoreBtnClass"], outputs: ["clicked"] }] }); }
5
+ constructor() {
6
+ this.model = input.required();
7
+ }
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: PageHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: PageHeaderComponent, selector: "upd-page-header", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"page-header d-print-none\">\n <div class=\"container-xl\">\n <div class=\"row g-2 align-items-center\">\n <div class=\"col\">\n <div class=\"page-pretitle\">\n {{ model().titleHeader }}\n </div>\n <h2 class=\"page-title\">\n {{ model().title }}\n </h2>\n </div>\n @if (model().actionButtons.length > 0) {\n <div class=\"col-auto ms-auto d-print-none\">\n <div class=\"btn-list\">\n @for (btn of model().actionButtons; track btn) {\n <upd-button [model]=\"btn\"></upd-button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }] }); }
8
10
  }
9
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: PageHeaderComponent, decorators: [{
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: PageHeaderComponent, decorators: [{
10
12
  type: Component,
11
- args: [{ selector: 'upd-page-header', template: "<div class=\"page-header d-print-none\">\n <div class=\"container-xl\">\n <div class=\"row g-2 align-items-center\">\n <div class=\"col\">\n <div class=\"page-pretitle\">\n {{model.titleHeader}}\n </div>\n <h2 class=\"page-title\">\n {{model.title}}\n </h2>\n </div>\n <div *ngIf=\"(model.actionButtons?.length || 0) > 0\" class=\"col-auto ms-auto d-print-none\">\n <div class=\"btn-list\">\n <upd-button *ngFor=\"let btn of model.actionButtons\" [model]=\"btn!\"></upd-button>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
12
- }], propDecorators: { model: [{
13
- type: Input
14
- }] } });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdXBkZXZzL2NvbXBvbmVudHMvbGF5b3V0L3NyYy9wYXJ0aWFscy9wYWdlLWhlYWRlci9wYWdlLWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91cGRldnMvY29tcG9uZW50cy9sYXlvdXQvc3JjL3BhcnRpYWxzL3BhZ2UtaGVhZGVyL3BhZ2UtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBUWpELE1BQU0sT0FBTyxtQkFBbUI7K0dBQW5CLG1CQUFtQjttR0FBbkIsbUJBQW1CLG1GQ1JoQyxndUJBbUJBOzs0RkRYYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0ksaUJBQWlCOzhCQUtsQixLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQYWdlSGVhZGVyTW9kZWwgfSBmcm9tICdAdXBkZXZzL3Nkay9sYXlvdXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VwZC1wYWdlLWhlYWRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9wYWdlLWhlYWRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VIZWFkZXJDb21wb25lbnQge1xuICAgIEBJbnB1dCgpIG1vZGVsITogUGFnZUhlYWRlck1vZGVsO1xufVxuIiwiPGRpdiBjbGFzcz1cInBhZ2UtaGVhZGVyIGQtcHJpbnQtbm9uZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXIteGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtcHJldGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3ttb2RlbC50aXRsZUhlYWRlcn19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwicGFnZS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7e21vZGVsLnRpdGxlfX1cbiAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKG1vZGVsLmFjdGlvbkJ1dHRvbnM/Lmxlbmd0aCB8fCAwKSA+IDBcIiBjbGFzcz1cImNvbC1hdXRvIG1zLWF1dG8gZC1wcmludC1ub25lXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDx1cGQtYnV0dG9uICpuZ0Zvcj1cImxldCBidG4gb2YgbW9kZWwuYWN0aW9uQnV0dG9uc1wiIFttb2RlbF09XCJidG4hXCI+PC91cGQtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
13
+ args: [{ selector: 'upd-page-header', template: "<div class=\"page-header d-print-none\">\n <div class=\"container-xl\">\n <div class=\"row g-2 align-items-center\">\n <div class=\"col\">\n <div class=\"page-pretitle\">\n {{ model().titleHeader }}\n </div>\n <h2 class=\"page-title\">\n {{ model().title }}\n </h2>\n </div>\n @if (model().actionButtons.length > 0) {\n <div class=\"col-auto ms-auto d-print-none\">\n <div class=\"btn-list\">\n @for (btn of model().actionButtons; track btn) {\n <upd-button [model]=\"btn\"></upd-button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n" }]
14
+ }] });
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvcGFnZS1oZWFkZXIvcGFnZS1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvcGFnZS1oZWFkZXIvcGFnZS1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVFqRCxNQUFNLE9BQU8sbUJBQW1CO0lBTGhDO1FBTUksVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQW1CLENBQUM7S0FDN0M7OEdBRlksbUJBQW1CO2tHQUFuQixtQkFBbUIsMExDUmhDLDgwQkF1QkE7OzJGRGZhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDSSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQYWdlSGVhZGVyTW9kZWwgfSBmcm9tICdAdXBkZXZzL3Nkay9sYXlvdXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VwZC1wYWdlLWhlYWRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9wYWdlLWhlYWRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VIZWFkZXJDb21wb25lbnQge1xuICAgIG1vZGVsID0gaW5wdXQucmVxdWlyZWQ8UGFnZUhlYWRlck1vZGVsPigpO1xufVxuIiwiPGRpdiBjbGFzcz1cInBhZ2UtaGVhZGVyIGQtcHJpbnQtbm9uZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXIteGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtcHJldGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbW9kZWwoKS50aXRsZUhlYWRlciB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInBhZ2UtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbW9kZWwoKS50aXRsZSB9fVxuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAobW9kZWwoKS5hY3Rpb25CdXR0b25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gbXMtYXV0byBkLXByaW50LW5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChidG4gb2YgbW9kZWwoKS5hY3Rpb25CdXR0b25zOyB0cmFjayBidG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXBkLWJ1dHRvbiBbbW9kZWxdPVwiYnRuXCI+PC91cGQtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export * from './page-header.component';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VwZGV2cy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvcGFnZS1oZWFkZXIvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wYWdlLWhlYWRlci5jb21wb25lbnQnO1xuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sYXlvdXQvc3JjL3BhcnRpYWxzL3BhZ2UtaGVhZGVyL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcGFnZS1oZWFkZXIuY29tcG9uZW50JztcbiJdfQ==
@@ -2,4 +2,4 @@ export * from './footer/public-api';
2
2
  export * from './header/public-api';
3
3
  export * from './page-header/public-api';
4
4
  export * from './sidebar/public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VwZGV2cy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9mb290ZXIvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL2hlYWRlci9wdWJsaWMtYXBpJztcbmV4cG9ydCAqIGZyb20gJy4vcGFnZS1oZWFkZXIvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL3NpZGViYXIvcHVibGljLWFwaSc7XG4iXX0=
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sYXlvdXQvc3JjL3BhcnRpYWxzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZm9vdGVyL3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9oZWFkZXIvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL3BhZ2UtaGVhZGVyL3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9zaWRlYmFyL3B1YmxpYy1hcGknO1xuIl19
@@ -1,2 +1,2 @@
1
1
  export * from './sidebar.component';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VwZGV2cy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvc2lkZWJhci9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NpZGViYXIuY29tcG9uZW50JztcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sYXlvdXQvc3JjL3BhcnRpYWxzL3NpZGViYXIvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zaWRlYmFyLmNvbXBvbmVudCc7XG4iXX0=