@valtimo/components 10.8.0 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (536) hide show
  1. package/assets/css/carbon-beagle-compatibility.scss +1 -1
  2. package/assets/css/carbon.scss +42 -6
  3. package/assets/css/design-tokens.css +408 -0
  4. package/{esm2020 → esm2022}/lib/components/alert/alert.component.mjs +4 -4
  5. package/{esm2020 → esm2022}/lib/components/alert/alert.module.mjs +5 -5
  6. package/{esm2020 → esm2022}/lib/components/alert/alert.service.mjs +4 -4
  7. package/{esm2020 → esm2022}/lib/components/bpmn-js-diagram/bpmn-js-diagram.component.mjs +4 -4
  8. package/{esm2020 → esm2022}/lib/components/bpmn-js-diagram/bpmn-js-diagram.module.mjs +5 -5
  9. package/{esm2020 → esm2022}/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.mjs +4 -4
  10. package/{esm2020 → esm2022}/lib/components/breadcrumb-navigation/breadcrumb-navigation.module.mjs +5 -5
  11. package/esm2022/lib/components/breadcrumb-navigation/breadcrumb.service.mjs +118 -0
  12. package/esm2022/lib/components/button/button.component.mjs +99 -0
  13. package/esm2022/lib/components/button/button.module.mjs +37 -0
  14. package/{esm2020 → esm2022}/lib/components/camunda/form/camunda-form.components.mjs +4 -4
  15. package/{esm2020 → esm2022}/lib/components/camunda/form/camunda-form.module.mjs +5 -5
  16. package/{esm2020 → esm2022}/lib/components/camunda/form/custom/camunda-custom-form.component.mjs +4 -4
  17. package/{esm2020 → esm2022}/lib/components/camunda/form/custom/camunda-custom-form.module.mjs +5 -5
  18. package/{esm2020 → esm2022}/lib/components/camunda/form/generated/camunda-generated-form.component.mjs +4 -4
  19. package/{esm2020 → esm2022}/lib/components/camunda/form/generated/camunda-generated-form.module.mjs +14 -14
  20. package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.mjs +4 -4
  21. package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/camunda-formfield-generator.directive.mjs +4 -4
  22. package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/camunda-formfield.service.mjs +4 -4
  23. package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.mjs +4 -4
  24. package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/date/camunda-date-formfield.component.mjs +4 -4
  25. package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.mjs +4 -4
  26. package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/long/camunda-long-formfield.component.mjs +4 -4
  27. package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/string/camunda-string-formfield.component.mjs +4 -4
  28. package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.mjs +4 -4
  29. package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.mjs +4 -4
  30. package/esm2022/lib/components/carbon-list/CarbonListFilterPipe.directive.mjs +34 -0
  31. package/esm2022/lib/components/carbon-list/carbon-list.component.mjs +360 -0
  32. package/esm2022/lib/components/carbon-list/carbon-list.module.mjs +75 -0
  33. package/esm2022/lib/components/carbon-list/no-results/carbon-no-results.component.mjs +39 -0
  34. package/{esm2020 → esm2022}/lib/components/card/card.component.mjs +4 -4
  35. package/{esm2020 → esm2022}/lib/components/card/card.module.mjs +5 -5
  36. package/esm2022/lib/components/confirmation-modal/confirmation-modal.component.mjs +94 -0
  37. package/{esm2020 → esm2022}/lib/components/confirmation-modal/confirmation-modal.module.mjs +14 -14
  38. package/{esm2020 → esm2022}/lib/components/data-list/data-list.component.mjs +4 -4
  39. package/{esm2020 → esm2022}/lib/components/data-list/data-list.module.mjs +5 -5
  40. package/esm2022/lib/components/date-picker/date-picker.component.mjs +160 -0
  41. package/esm2022/lib/components/date-picker/date-picker.module.mjs +40 -0
  42. package/esm2022/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +223 -0
  43. package/esm2022/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.mjs +74 -0
  44. package/esm2022/lib/components/dropzone/dropzone.component.mjs +168 -0
  45. package/{esm2020 → esm2022}/lib/components/dropzone/dropzone.module.mjs +5 -5
  46. package/esm2022/lib/components/editor/editor.component.mjs +141 -0
  47. package/esm2022/lib/components/editor/editor.module.mjs +33 -0
  48. package/esm2022/lib/components/editor/editor.service.mjs +63 -0
  49. package/esm2022/lib/components/expansion-panel/expansion-panel.component.mjs +41 -0
  50. package/{esm2020 → esm2022}/lib/components/expansion-panel/expansion-panel.module.mjs +6 -6
  51. package/{esm2020 → esm2022}/lib/components/field-auto-focus/field-auto-focus.directive.mjs +4 -4
  52. package/{esm2020 → esm2022}/lib/components/field-auto-focus/field-auto-focus.module.mjs +5 -5
  53. package/{esm2020 → esm2022}/lib/components/file-size/file-size.module.mjs +5 -5
  54. package/{esm2020 → esm2022}/lib/components/file-size/file-size.pipe.mjs +4 -4
  55. package/{esm2020 → esm2022}/lib/components/filter-sidebar/filter-sidebar.component.mjs +4 -4
  56. package/{esm2020 → esm2022}/lib/components/filter-sidebar/filter-sidebar.module.mjs +5 -5
  57. package/esm2022/lib/components/form/form.component.mjs +136 -0
  58. package/esm2022/lib/components/form/form.module.mjs +33 -0
  59. package/{esm2020 → esm2022}/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.component.mjs +4 -4
  60. package/{esm2020 → esm2022}/lib/components/form-io/form-io-builder.component.mjs +4 -4
  61. package/{esm2020 → esm2022}/lib/components/form-io/form-io-current-user/form-io-current-user.component.mjs +4 -4
  62. package/{esm2020 → esm2022}/lib/components/form-io/form-io-uploader/form-io-uploader.component.mjs +4 -4
  63. package/esm2022/lib/components/form-io/form-io.component.mjs +169 -0
  64. package/esm2022/lib/components/form-io/form-io.module.mjs +109 -0
  65. package/esm2022/lib/components/form-io/formio-config.mjs +27 -0
  66. package/{esm2020 → esm2022}/lib/components/form-io/services/form-io-dom.service.mjs +4 -4
  67. package/{esm2020 → esm2022}/lib/components/form-io/services/form-io-state.service.mjs +4 -4
  68. package/esm2022/lib/components/input/input.component.mjs +168 -0
  69. package/esm2022/lib/components/input/input.module.mjs +59 -0
  70. package/esm2022/lib/components/input-label/input-label.component.mjs +81 -0
  71. package/esm2022/lib/components/input-label/input-label.module.mjs +55 -0
  72. package/esm2022/lib/components/left-sidebar/left-sidebar.component.mjs +148 -0
  73. package/{esm2020 → esm2022}/lib/components/left-sidebar/left-sidebar.module.mjs +18 -18
  74. package/{esm2020 → esm2022}/lib/components/list/ListFilterPipe.directive.mjs +4 -4
  75. package/esm2022/lib/components/list/list.component.mjs +202 -0
  76. package/{esm2020 → esm2022}/lib/components/list/list.module.mjs +5 -5
  77. package/{esm2020 → esm2022}/lib/components/menu/menu-item-text.component.mjs +5 -5
  78. package/{esm2020 → esm2022}/lib/components/menu/menu-routing.module.mjs +5 -5
  79. package/{esm2020 → esm2022}/lib/components/menu/menu.module.mjs +17 -17
  80. package/esm2022/lib/components/menu/menu.service.mjs +258 -0
  81. package/{esm2020 → esm2022}/lib/components/modal/modal.component.mjs +4 -4
  82. package/{esm2020 → esm2022}/lib/components/modal/modal.module.mjs +5 -5
  83. package/esm2022/lib/components/multi-input/carbon-multi-input.component.mjs +217 -0
  84. package/esm2022/lib/components/multi-input/carbon-multi-input.module.mjs +64 -0
  85. package/esm2022/lib/components/multi-input-form/multi-input-form.component.mjs +190 -0
  86. package/esm2022/lib/components/multi-input-form/multi-input-form.module.mjs +55 -0
  87. package/{esm2020 → esm2022}/lib/components/multiselect-dropdown/multiselect-dropdown.component.mjs +4 -4
  88. package/{esm2020 → esm2022}/lib/components/multiselect-dropdown/multiselect-dropdown.module.mjs +5 -5
  89. package/esm2022/lib/components/page/page-container/page-container.component.mjs +29 -0
  90. package/esm2022/lib/components/page/page-content/page-content.component.mjs +29 -0
  91. package/esm2022/lib/components/page/page-header/page-header.component.mjs +29 -0
  92. package/esm2022/lib/components/page/page-header-actions/page-header-actions.component.mjs +29 -0
  93. package/esm2022/lib/components/page/page-header-introduction/page-header-introduction.component.mjs +29 -0
  94. package/esm2022/lib/components/page/page.module.mjs +60 -0
  95. package/{esm2020 → esm2022}/lib/components/page-header/page-header.component.mjs +5 -5
  96. package/{esm2020 → esm2022}/lib/components/page-header/page-header.module.mjs +5 -5
  97. package/esm2022/lib/components/page-title/page-title.component.mjs +105 -0
  98. package/{esm2020 → esm2022}/lib/components/page-title/page-title.module.mjs +5 -5
  99. package/esm2022/lib/components/page-title/page-title.service.mjs +107 -0
  100. package/esm2022/lib/components/paragraph/paragraph.component.mjs +48 -0
  101. package/esm2022/lib/components/paragraph/paragraph.module.mjs +37 -0
  102. package/esm2022/lib/components/pending-changes/pending-changes.component.mjs +49 -0
  103. package/{esm2020 → esm2022}/lib/components/progress-bar/progress-bar.component.mjs +4 -4
  104. package/{esm2020 → esm2022}/lib/components/progress-bar/progress-bar.module.mjs +5 -5
  105. package/esm2022/lib/components/prompt/prompt.component.mjs +74 -0
  106. package/esm2022/lib/components/prompt/prompt.module.mjs +39 -0
  107. package/esm2022/lib/components/radio/radio.component.mjs +116 -0
  108. package/esm2022/lib/components/radio/radio.module.mjs +55 -0
  109. package/esm2022/lib/components/right-sidebar/right-sidebar.component.mjs +203 -0
  110. package/esm2022/lib/components/right-sidebar/right-sidebar.module.mjs +95 -0
  111. package/esm2022/lib/components/search-fields/search-fields.component.mjs +221 -0
  112. package/esm2022/lib/components/search-fields/search-fields.module.mjs +75 -0
  113. package/{esm2020 → esm2022}/lib/components/searchable-dropdown/searchable-dropdown.component.mjs +4 -4
  114. package/{esm2020 → esm2022}/lib/components/searchable-dropdown/searchable-dropdown.module.mjs +5 -5
  115. package/{esm2020 → esm2022}/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.mjs +4 -4
  116. package/{esm2020 → esm2022}/lib/components/searchable-dropdown-select/searchable-dropdown-select.module.mjs +5 -5
  117. package/esm2022/lib/components/select/select.component.mjs +194 -0
  118. package/esm2022/lib/components/select/select.module.mjs +37 -0
  119. package/{esm2020 → esm2022}/lib/components/spinner/spinner.component.mjs +4 -4
  120. package/{esm2020 → esm2022}/lib/components/spinner/spinner.module.mjs +5 -5
  121. package/esm2022/lib/components/stepper/stepper-container/stepper-container.component.mjs +91 -0
  122. package/esm2022/lib/components/stepper/stepper-content/stepper-content.component.mjs +52 -0
  123. package/esm2022/lib/components/stepper/stepper-footer/stepper-footer.component.mjs +43 -0
  124. package/esm2022/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.mjs +71 -0
  125. package/esm2022/lib/components/stepper/stepper-header/stepper-header.component.mjs +37 -0
  126. package/esm2022/lib/components/stepper/stepper-step/stepper-step.component.mjs +39 -0
  127. package/esm2022/lib/components/stepper/stepper.module.mjs +67 -0
  128. package/esm2022/lib/components/table/table.component.mjs +172 -0
  129. package/esm2022/lib/components/table/table.module.mjs +58 -0
  130. package/esm2022/lib/components/timeline/timeline.component.mjs +42 -0
  131. package/{esm2020 → esm2022}/lib/components/timeline/timeline.module.mjs +5 -5
  132. package/esm2022/lib/components/title/title.component.mjs +57 -0
  133. package/esm2022/lib/components/title/title.module.mjs +36 -0
  134. package/esm2022/lib/components/tooltip-icon/tooltip-icon.component.mjs +39 -0
  135. package/esm2022/lib/components/tooltip-icon/tooltip-icon.module.mjs +39 -0
  136. package/{esm2020 → esm2022}/lib/components/topbar/topbar.component.mjs +5 -5
  137. package/{esm2020 → esm2022}/lib/components/topbar/topbar.module.mjs +6 -6
  138. package/{esm2020 → esm2022}/lib/components/uploader/uploader-drag-drop.directive.mjs +4 -4
  139. package/{esm2020 → esm2022}/lib/components/uploader/uploader.component.mjs +4 -4
  140. package/{esm2020 → esm2022}/lib/components/uploader/uploader.module.mjs +5 -5
  141. package/esm2022/lib/components/v-card/card.component.mjs +80 -0
  142. package/esm2022/lib/components/v-card/card.module.mjs +38 -0
  143. package/esm2022/lib/components/v-modal/modal.component.mjs +71 -0
  144. package/esm2022/lib/components/v-modal/modal.module.mjs +37 -0
  145. package/{esm2020 → esm2022}/lib/components/version/version.service.mjs +4 -4
  146. package/{esm2020 → esm2022}/lib/components/view-content/view-content.service.mjs +4 -4
  147. package/{esm2020 → esm2022}/lib/components/webcam/webcam.component.mjs +4 -4
  148. package/{esm2020 → esm2022}/lib/components/webcam/webcam.module.mjs +5 -5
  149. package/{esm2020 → esm2022}/lib/components/widget/widget.component.mjs +4 -4
  150. package/{esm2020 → esm2022}/lib/components/widget/widget.module.mjs +5 -5
  151. package/esm2022/lib/directives/command-click/command-click-directive.module.mjs +33 -0
  152. package/esm2022/lib/directives/command-click/command-click.directive.mjs +52 -0
  153. package/esm2022/lib/directives/digit-only/digit-only.directive.mjs +283 -0
  154. package/esm2022/lib/directives/render-in-page-header/render-in-page-header-directive.module.mjs +33 -0
  155. package/esm2022/lib/directives/render-in-page-header/render-in-page-header.directive.mjs +43 -0
  156. package/esm2022/lib/directives/tooltip/tooltip.component.mjs +42 -0
  157. package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +74 -0
  158. package/esm2022/lib/directives/tooltip/tooltip.module.mjs +35 -0
  159. package/esm2022/lib/directives/valtimo-cds-modal/valtimo-cds-modal-directive.module.mjs +33 -0
  160. package/esm2022/lib/directives/valtimo-cds-modal/valtimo-cds-modal.directive.mjs +68 -0
  161. package/{esm2020/lib/models/pagination.model.mjs → esm2022/lib/guards/index.mjs} +2 -2
  162. package/esm2022/lib/guards/pending-changes.guard.mjs +2 -0
  163. package/esm2022/lib/models/button.model.mjs +17 -0
  164. package/esm2022/lib/models/carbon-list.model.mjs +21 -0
  165. package/esm2022/lib/models/carbon-pagination.model.mjs +21 -0
  166. package/esm2022/lib/models/editor.model.mjs +17 -0
  167. package/{esm2020/lib/models/list.model.mjs → esm2022/lib/models/form.model.mjs} +1 -1
  168. package/esm2022/lib/models/index.mjs +39 -0
  169. package/esm2022/lib/models/input.model.mjs +17 -0
  170. package/esm2022/lib/models/modal.model.mjs +17 -0
  171. package/{esm2020 → esm2022}/lib/models/multi-input.model.mjs +1 -1
  172. package/esm2022/lib/models/pagination.model.mjs +24 -0
  173. package/esm2022/lib/models/radio.model.mjs +17 -0
  174. package/esm2022/lib/models/select.model.mjs +17 -0
  175. package/esm2022/lib/models/sort.model.mjs +17 -0
  176. package/{esm2020/lib/components/form-io/formio-config.mjs → esm2022/lib/models/stepper.model.mjs} +2 -7
  177. package/esm2022/lib/models/table.model.mjs +17 -0
  178. package/esm2022/lib/models/timeline.model.mjs +52 -0
  179. package/esm2022/lib/models/title.model.mjs +17 -0
  180. package/{esm2020 → esm2022}/lib/pipes/case-count.pipe.mjs +4 -4
  181. package/{esm2020 → esm2022}/lib/pipes/components-pipes.module.mjs +5 -5
  182. package/esm2022/lib/pipes/index.mjs +20 -0
  183. package/esm2022/lib/pipes/is-array.pipe.mjs +29 -0
  184. package/{esm2020 → esm2022}/lib/pipes/menu-item-translation.pipe.mjs +4 -4
  185. package/esm2022/lib/services/index.mjs +7 -0
  186. package/esm2022/lib/services/modal.service.mjs +128 -0
  187. package/esm2022/lib/services/prompt.service.mjs +205 -0
  188. package/esm2022/lib/services/shell.service.mjs +213 -0
  189. package/esm2022/lib/services/stepper.service.mjs +108 -0
  190. package/esm2022/lib/services/user-interface.service.mjs +47 -0
  191. package/{esm2020 → esm2022}/lib/services/valtimo-modal.service.mjs +4 -4
  192. package/esm2022/public_api.mjs +197 -0
  193. package/fesm2022/valtimo-components.mjs +12473 -0
  194. package/fesm2022/valtimo-components.mjs.map +1 -0
  195. package/lib/components/alert/alert.component.d.ts +1 -1
  196. package/lib/components/bpmn-js-diagram/bpmn-js-diagram.component.d.ts +1 -1
  197. package/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.d.ts +1 -1
  198. package/lib/components/breadcrumb-navigation/breadcrumb.service.d.ts.map +1 -1
  199. package/lib/components/button/button.component.d.ts +30 -0
  200. package/lib/components/button/button.component.d.ts.map +1 -0
  201. package/lib/components/button/button.module.d.ts +13 -0
  202. package/lib/components/button/button.module.d.ts.map +1 -0
  203. package/lib/components/camunda/form/camunda-form.components.d.ts +1 -1
  204. package/lib/components/camunda/form/custom/camunda-custom-form.component.d.ts +1 -1
  205. package/lib/components/camunda/form/generated/camunda-generated-form.component.d.ts +1 -1
  206. package/lib/components/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.d.ts +1 -1
  207. package/lib/components/camunda/form/generated/formfield/camunda-formfield-generator.directive.d.ts +1 -1
  208. package/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.d.ts +1 -1
  209. package/lib/components/camunda/form/generated/formfield/date/camunda-date-formfield.component.d.ts +1 -1
  210. package/lib/components/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.d.ts +1 -1
  211. package/lib/components/camunda/form/generated/formfield/long/camunda-long-formfield.component.d.ts +1 -1
  212. package/lib/components/camunda/form/generated/formfield/string/camunda-string-formfield.component.d.ts +1 -1
  213. package/lib/components/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.d.ts +1 -1
  214. package/lib/components/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.d.ts +1 -1
  215. package/lib/components/carbon-list/CarbonListFilterPipe.directive.d.ts +9 -0
  216. package/lib/components/carbon-list/CarbonListFilterPipe.directive.d.ts.map +1 -0
  217. package/lib/components/carbon-list/carbon-list.component.d.ts +86 -0
  218. package/lib/components/carbon-list/carbon-list.component.d.ts.map +1 -0
  219. package/lib/components/carbon-list/carbon-list.module.d.ts +16 -0
  220. package/lib/components/carbon-list/carbon-list.module.d.ts.map +1 -0
  221. package/lib/components/{carbon-table → carbon-list}/no-results/carbon-no-results.component.d.ts +1 -1
  222. package/lib/components/{carbon-table → carbon-list}/no-results/carbon-no-results.component.d.ts.map +1 -1
  223. package/lib/components/card/card.component.d.ts +1 -1
  224. package/lib/components/confirmation-modal/confirmation-modal.component.d.ts +2 -1
  225. package/lib/components/confirmation-modal/confirmation-modal.component.d.ts.map +1 -1
  226. package/lib/components/confirmation-modal/confirmation-modal.module.d.ts +1 -1
  227. package/lib/components/data-list/data-list.component.d.ts +1 -1
  228. package/lib/components/date-picker/date-picker.component.d.ts +44 -0
  229. package/lib/components/date-picker/date-picker.component.d.ts.map +1 -0
  230. package/lib/components/date-picker/date-picker.module.d.ts +16 -0
  231. package/lib/components/date-picker/date-picker.module.d.ts.map +1 -0
  232. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts +5 -3
  233. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts.map +1 -1
  234. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.d.ts +9 -2
  235. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.d.ts.map +1 -1
  236. package/lib/components/dropzone/dropzone.component.d.ts +6 -3
  237. package/lib/components/dropzone/dropzone.component.d.ts.map +1 -1
  238. package/lib/components/editor/editor.component.d.ts +38 -0
  239. package/lib/components/editor/editor.component.d.ts.map +1 -0
  240. package/lib/components/editor/editor.module.d.ts +9 -0
  241. package/lib/components/editor/editor.module.d.ts.map +1 -0
  242. package/lib/components/editor/editor.service.d.ts +12 -0
  243. package/lib/components/editor/editor.service.d.ts.map +1 -0
  244. package/lib/components/expansion-panel/expansion-panel.component.d.ts +1 -1
  245. package/lib/components/field-auto-focus/field-auto-focus.directive.d.ts +1 -1
  246. package/lib/components/filter-sidebar/filter-sidebar.component.d.ts +1 -1
  247. package/lib/components/form/form.component.d.ts +31 -0
  248. package/lib/components/form/form.component.d.ts.map +1 -0
  249. package/lib/components/form/form.module.d.ts +9 -0
  250. package/lib/components/form/form.module.d.ts.map +1 -0
  251. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.component.d.ts +1 -1
  252. package/lib/components/form-io/form-io-builder.component.d.ts +1 -1
  253. package/lib/components/form-io/form-io-current-user/form-io-current-user.component.d.ts +1 -1
  254. package/lib/components/form-io/form-io-uploader/form-io-uploader.component.d.ts +1 -1
  255. package/lib/components/form-io/form-io.component.d.ts +13 -15
  256. package/lib/components/form-io/form-io.component.d.ts.map +1 -1
  257. package/lib/components/form-io/form-io.module.d.ts.map +1 -1
  258. package/lib/components/form-io/formio-config.d.ts +3 -1
  259. package/lib/components/form-io/formio-config.d.ts.map +1 -1
  260. package/lib/components/input/input.component.d.ts +52 -0
  261. package/lib/components/input/input.component.d.ts.map +1 -0
  262. package/lib/components/input/input.module.d.ts +15 -0
  263. package/lib/components/input/input.module.d.ts.map +1 -0
  264. package/lib/components/input-label/input-label.component.d.ts +23 -0
  265. package/lib/components/input-label/input-label.component.d.ts.map +1 -0
  266. package/lib/components/input-label/input-label.module.d.ts +14 -0
  267. package/lib/components/input-label/input-label.module.d.ts.map +1 -0
  268. package/lib/components/left-sidebar/left-sidebar.component.d.ts +1 -1
  269. package/lib/components/left-sidebar/left-sidebar.module.d.ts +1 -1
  270. package/lib/components/list/list.component.d.ts +4 -1
  271. package/lib/components/list/list.component.d.ts.map +1 -1
  272. package/lib/components/menu/menu-item-text.component.d.ts +1 -1
  273. package/lib/components/menu/menu.service.d.ts.map +1 -1
  274. package/lib/components/modal/modal.component.d.ts +1 -1
  275. package/lib/components/multi-input/carbon-multi-input.component.d.ts +1 -1
  276. package/lib/components/multi-input/carbon-multi-input.module.d.ts +6 -4
  277. package/lib/components/multi-input/carbon-multi-input.module.d.ts.map +1 -1
  278. package/lib/components/multi-input-form/multi-input-form.component.d.ts +45 -0
  279. package/lib/components/multi-input-form/multi-input-form.component.d.ts.map +1 -0
  280. package/lib/components/multi-input-form/multi-input-form.module.d.ts +14 -0
  281. package/lib/components/multi-input-form/multi-input-form.module.d.ts.map +1 -0
  282. package/lib/components/multiselect-dropdown/multiselect-dropdown.component.d.ts +1 -1
  283. package/lib/components/page/page-container/page-container.component.d.ts +9 -0
  284. package/lib/components/page/page-container/page-container.component.d.ts.map +1 -0
  285. package/lib/components/page/page-content/page-content.component.d.ts +9 -0
  286. package/lib/components/page/page-content/page-content.component.d.ts.map +1 -0
  287. package/lib/components/page/page-header/page-header.component.d.ts +9 -0
  288. package/lib/components/page/page-header/page-header.component.d.ts.map +1 -0
  289. package/lib/components/page/page-header-actions/page-header-actions.component.d.ts +9 -0
  290. package/lib/components/page/page-header-actions/page-header-actions.component.d.ts.map +1 -0
  291. package/lib/components/page/page-header-introduction/page-header-introduction.component.d.ts +9 -0
  292. package/lib/components/page/page-header-introduction/page-header-introduction.component.d.ts.map +1 -0
  293. package/lib/components/page/page.module.d.ts +16 -0
  294. package/lib/components/page/page.module.d.ts.map +1 -0
  295. package/lib/components/page-header/page-header.component.d.ts +2 -2
  296. package/lib/components/page-header/page-header.component.d.ts.map +1 -1
  297. package/lib/components/page-title/page-title.component.d.ts +4 -4
  298. package/lib/components/page-title/page-title.component.d.ts.map +1 -1
  299. package/lib/components/page-title/page-title.service.d.ts.map +1 -1
  300. package/lib/components/paragraph/paragraph.component.d.ts +14 -0
  301. package/lib/components/paragraph/paragraph.component.d.ts.map +1 -0
  302. package/lib/components/paragraph/paragraph.module.d.ts +13 -0
  303. package/lib/components/paragraph/paragraph.module.d.ts.map +1 -0
  304. package/lib/components/pending-changes/pending-changes.component.d.ts +15 -0
  305. package/lib/components/pending-changes/pending-changes.component.d.ts.map +1 -0
  306. package/lib/components/progress-bar/progress-bar.component.d.ts +1 -1
  307. package/lib/components/prompt/prompt.component.d.ts +35 -0
  308. package/lib/components/prompt/prompt.component.d.ts.map +1 -0
  309. package/lib/components/prompt/prompt.module.d.ts +15 -0
  310. package/lib/components/prompt/prompt.module.d.ts.map +1 -0
  311. package/lib/components/radio/radio.component.d.ts +36 -0
  312. package/lib/components/radio/radio.component.d.ts.map +1 -0
  313. package/lib/components/radio/radio.module.d.ts +14 -0
  314. package/lib/components/radio/radio.module.d.ts.map +1 -0
  315. package/lib/components/right-sidebar/right-sidebar.component.d.ts +2 -7
  316. package/lib/components/right-sidebar/right-sidebar.component.d.ts.map +1 -1
  317. package/lib/components/search-fields/search-fields.component.d.ts +3 -2
  318. package/lib/components/search-fields/search-fields.component.d.ts.map +1 -1
  319. package/lib/components/search-fields/search-fields.module.d.ts +8 -2
  320. package/lib/components/search-fields/search-fields.module.d.ts.map +1 -1
  321. package/lib/components/searchable-dropdown/searchable-dropdown.component.d.ts +1 -1
  322. package/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.d.ts +1 -1
  323. package/lib/components/select/select.component.d.ts +50 -0
  324. package/lib/components/select/select.component.d.ts.map +1 -0
  325. package/lib/components/select/select.module.d.ts +13 -0
  326. package/lib/components/select/select.module.d.ts.map +1 -0
  327. package/lib/components/spinner/spinner.component.d.ts +1 -1
  328. package/lib/components/stepper/stepper-container/stepper-container.component.d.ts +29 -0
  329. package/lib/components/stepper/stepper-container/stepper-container.component.d.ts.map +1 -0
  330. package/lib/components/stepper/stepper-content/stepper-content.component.d.ts +18 -0
  331. package/lib/components/stepper/stepper-content/stepper-content.component.d.ts.map +1 -0
  332. package/lib/components/stepper/stepper-footer/stepper-footer.component.d.ts +14 -0
  333. package/lib/components/stepper/stepper-footer/stepper-footer.component.d.ts.map +1 -0
  334. package/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.d.ts +27 -0
  335. package/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.d.ts.map +1 -0
  336. package/lib/components/stepper/stepper-header/stepper-header.component.d.ts +16 -0
  337. package/lib/components/stepper/stepper-header/stepper-header.component.d.ts.map +1 -0
  338. package/lib/components/stepper/stepper-step/stepper-step.component.d.ts +16 -0
  339. package/lib/components/stepper/stepper-step/stepper-step.component.d.ts.map +1 -0
  340. package/lib/components/stepper/stepper.module.d.ts +19 -0
  341. package/lib/components/stepper/stepper.module.d.ts.map +1 -0
  342. package/lib/components/table/table.component.d.ts +52 -0
  343. package/lib/components/table/table.component.d.ts.map +1 -0
  344. package/lib/components/table/table.module.d.ts +17 -0
  345. package/lib/components/table/table.module.d.ts.map +1 -0
  346. package/lib/components/timeline/timeline.component.d.ts +2 -1
  347. package/lib/components/timeline/timeline.component.d.ts.map +1 -1
  348. package/lib/components/title/title.component.d.ts +19 -0
  349. package/lib/components/title/title.component.d.ts.map +1 -0
  350. package/lib/components/title/title.module.d.ts +12 -0
  351. package/lib/components/title/title.module.d.ts.map +1 -0
  352. package/lib/components/tooltip-icon/tooltip-icon.component.d.ts +11 -0
  353. package/lib/components/tooltip-icon/tooltip-icon.component.d.ts.map +1 -0
  354. package/lib/components/tooltip-icon/tooltip-icon.module.d.ts +15 -0
  355. package/lib/components/tooltip-icon/tooltip-icon.module.d.ts.map +1 -0
  356. package/lib/components/topbar/topbar.component.d.ts +1 -1
  357. package/lib/components/topbar/topbar.module.d.ts +1 -1
  358. package/lib/components/uploader/uploader-drag-drop.directive.d.ts +1 -1
  359. package/lib/components/uploader/uploader.component.d.ts +1 -1
  360. package/lib/components/v-card/card.component.d.ts +23 -0
  361. package/lib/components/v-card/card.component.d.ts.map +1 -0
  362. package/lib/components/v-card/card.module.d.ts +14 -0
  363. package/lib/components/v-card/card.module.d.ts.map +1 -0
  364. package/lib/components/v-modal/modal.component.d.ts +29 -0
  365. package/lib/components/v-modal/modal.component.d.ts.map +1 -0
  366. package/lib/components/v-modal/modal.module.d.ts +13 -0
  367. package/lib/components/v-modal/modal.module.d.ts.map +1 -0
  368. package/lib/components/version/version.service.d.ts.map +1 -1
  369. package/lib/components/webcam/webcam.component.d.ts +1 -1
  370. package/lib/components/widget/widget.component.d.ts +1 -1
  371. package/lib/directives/command-click/command-click-directive.module.d.ts.map +1 -0
  372. package/lib/directives/{command-click.directive.d.ts → command-click/command-click.directive.d.ts} +1 -1
  373. package/lib/directives/command-click/command-click.directive.d.ts.map +1 -0
  374. package/lib/directives/digit-only/digit-only.directive.d.ts +35 -0
  375. package/lib/directives/digit-only/digit-only.directive.d.ts.map +1 -0
  376. package/lib/directives/render-in-page-header/render-in-page-header-directive.module.d.ts.map +1 -0
  377. package/lib/directives/{render-in-page-header.directive.d.ts → render-in-page-header/render-in-page-header.directive.d.ts} +2 -2
  378. package/lib/directives/render-in-page-header/render-in-page-header.directive.d.ts.map +1 -0
  379. package/lib/directives/tooltip/tooltip.component.d.ts +7 -0
  380. package/lib/directives/tooltip/tooltip.component.d.ts.map +1 -0
  381. package/lib/directives/tooltip/tooltip.directive.d.ts +19 -0
  382. package/lib/directives/tooltip/tooltip.directive.d.ts.map +1 -0
  383. package/lib/directives/tooltip/tooltip.module.d.ts +11 -0
  384. package/lib/directives/tooltip/tooltip.module.d.ts.map +1 -0
  385. package/lib/directives/valtimo-cds-modal/valtimo-cds-modal-directive.module.d.ts.map +1 -0
  386. package/lib/directives/{valtimo-cds-modal.directive.d.ts → valtimo-cds-modal/valtimo-cds-modal.directive.d.ts} +1 -1
  387. package/lib/directives/valtimo-cds-modal/valtimo-cds-modal.directive.d.ts.map +1 -0
  388. package/lib/guards/index.d.ts +2 -0
  389. package/lib/guards/index.d.ts.map +1 -0
  390. package/lib/guards/pending-changes.guard.d.ts +4 -0
  391. package/lib/guards/pending-changes.guard.d.ts.map +1 -0
  392. package/lib/models/button.model.d.ts +3 -0
  393. package/lib/models/button.model.d.ts.map +1 -0
  394. package/lib/models/carbon-list.model.d.ts +54 -0
  395. package/lib/models/carbon-list.model.d.ts.map +1 -0
  396. package/lib/models/carbon-pagination.model.d.ts +6 -5
  397. package/lib/models/carbon-pagination.model.d.ts.map +1 -1
  398. package/lib/models/documenten-api-metadata.model.d.ts +4 -4
  399. package/lib/models/documenten-api-metadata.model.d.ts.map +1 -1
  400. package/lib/models/editor.model.d.ts +11 -0
  401. package/lib/models/editor.model.d.ts.map +1 -0
  402. package/lib/models/form.model.d.ts +5 -0
  403. package/lib/models/form.model.d.ts.map +1 -0
  404. package/lib/models/index.d.ts +14 -2
  405. package/lib/models/index.d.ts.map +1 -1
  406. package/lib/models/input.model.d.ts +3 -0
  407. package/lib/models/input.model.d.ts.map +1 -0
  408. package/lib/models/modal.model.d.ts +3 -0
  409. package/lib/models/modal.model.d.ts.map +1 -0
  410. package/lib/models/multi-input.model.d.ts +5 -5
  411. package/lib/models/multi-input.model.d.ts.map +1 -1
  412. package/lib/models/pagination.model.d.ts +5 -3
  413. package/lib/models/pagination.model.d.ts.map +1 -1
  414. package/lib/models/radio.model.d.ts +8 -0
  415. package/lib/models/radio.model.d.ts.map +1 -0
  416. package/lib/models/searchable-dropdown.model.d.ts +1 -1
  417. package/lib/models/searchable-dropdown.model.d.ts.map +1 -1
  418. package/lib/models/select.model.d.ts +9 -0
  419. package/lib/models/select.model.d.ts.map +1 -0
  420. package/lib/models/sort.model.d.ts +11 -0
  421. package/lib/models/sort.model.d.ts.map +1 -0
  422. package/lib/models/stepper.model.d.ts +8 -0
  423. package/lib/models/stepper.model.d.ts.map +1 -0
  424. package/lib/models/table.model.d.ts +14 -0
  425. package/lib/models/table.model.d.ts.map +1 -0
  426. package/lib/models/timeline.model.d.ts +4 -1
  427. package/lib/models/timeline.model.d.ts.map +1 -1
  428. package/lib/models/title.model.d.ts +3 -0
  429. package/lib/models/title.model.d.ts.map +1 -0
  430. package/lib/pipes/index.d.ts +1 -0
  431. package/lib/pipes/index.d.ts.map +1 -1
  432. package/lib/pipes/is-array.pipe.d.ts +8 -0
  433. package/lib/pipes/is-array.pipe.d.ts.map +1 -0
  434. package/lib/services/index.d.ts +7 -0
  435. package/lib/services/index.d.ts.map +1 -0
  436. package/lib/services/modal.service.d.ts +37 -0
  437. package/lib/services/modal.service.d.ts.map +1 -0
  438. package/lib/services/prompt.service.d.ts +68 -0
  439. package/lib/services/prompt.service.d.ts.map +1 -0
  440. package/lib/services/shell.service.d.ts +3 -0
  441. package/lib/services/shell.service.d.ts.map +1 -1
  442. package/lib/services/stepper.service.d.ts +32 -0
  443. package/lib/services/stepper.service.d.ts.map +1 -0
  444. package/lib/services/user-interface.service.d.ts +11 -0
  445. package/lib/services/user-interface.service.d.ts.map +1 -0
  446. package/package.json +30 -31
  447. package/public_api.d.ts +62 -7
  448. package/public_api.d.ts.map +1 -1
  449. package/esm2020/lib/components/breadcrumb-navigation/breadcrumb.service.mjs +0 -103
  450. package/esm2020/lib/components/carbon-table/carbon-table.component.mjs +0 -178
  451. package/esm2020/lib/components/carbon-table/carbon-table.module.mjs +0 -53
  452. package/esm2020/lib/components/carbon-table/no-results/carbon-no-results.component.mjs +0 -24
  453. package/esm2020/lib/components/components.module.mjs +0 -26
  454. package/esm2020/lib/components/confirmation-modal/confirmation-modal.component.mjs +0 -90
  455. package/esm2020/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +0 -215
  456. package/esm2020/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.mjs +0 -67
  457. package/esm2020/lib/components/dropzone/dropzone.component.mjs +0 -155
  458. package/esm2020/lib/components/expansion-panel/expansion-panel.component.mjs +0 -41
  459. package/esm2020/lib/components/form-io/form-io.component.mjs +0 -180
  460. package/esm2020/lib/components/form-io/form-io.module.mjs +0 -94
  461. package/esm2020/lib/components/left-sidebar/left-sidebar.component.mjs +0 -148
  462. package/esm2020/lib/components/list/list.component.mjs +0 -199
  463. package/esm2020/lib/components/menu/menu.service.mjs +0 -245
  464. package/esm2020/lib/components/multi-input/carbon-multi-input.component.mjs +0 -216
  465. package/esm2020/lib/components/multi-input/carbon-multi-input.module.mjs +0 -62
  466. package/esm2020/lib/components/page-title/page-title.component.mjs +0 -106
  467. package/esm2020/lib/components/page-title/page-title.service.mjs +0 -92
  468. package/esm2020/lib/components/right-sidebar/right-sidebar.component.mjs +0 -211
  469. package/esm2020/lib/components/right-sidebar/right-sidebar.module.mjs +0 -95
  470. package/esm2020/lib/components/search-fields/search-fields.component.mjs +0 -213
  471. package/esm2020/lib/components/search-fields/search-fields.module.mjs +0 -69
  472. package/esm2020/lib/components/timeline/timeline.component.mjs +0 -32
  473. package/esm2020/lib/directives/command-click-directive.module.mjs +0 -18
  474. package/esm2020/lib/directives/command-click.directive.mjs +0 -37
  475. package/esm2020/lib/directives/index.mjs +0 -22
  476. package/esm2020/lib/directives/render-in-page-header-directive.module.mjs +0 -18
  477. package/esm2020/lib/directives/render-in-page-header.directive.mjs +0 -27
  478. package/esm2020/lib/directives/valtimo-cds-modal-directive.module.mjs +0 -33
  479. package/esm2020/lib/directives/valtimo-cds-modal.directive.mjs +0 -68
  480. package/esm2020/lib/models/carbon-pagination.model.mjs +0 -9
  481. package/esm2020/lib/models/carbon-table.model.mjs +0 -21
  482. package/esm2020/lib/models/index.mjs +0 -27
  483. package/esm2020/lib/models/timeline.model.mjs +0 -48
  484. package/esm2020/lib/pipes/index.mjs +0 -19
  485. package/esm2020/lib/services/shell.service.mjs +0 -206
  486. package/esm2020/public_api.mjs +0 -113
  487. package/fesm2015/valtimo-components.mjs +0 -7945
  488. package/fesm2015/valtimo-components.mjs.map +0 -1
  489. package/fesm2020/valtimo-components.mjs +0 -8060
  490. package/fesm2020/valtimo-components.mjs.map +0 -1
  491. package/lib/components/carbon-table/carbon-table.component.d.ts +0 -49
  492. package/lib/components/carbon-table/carbon-table.component.d.ts.map +0 -1
  493. package/lib/components/carbon-table/carbon-table.module.d.ts +0 -12
  494. package/lib/components/carbon-table/carbon-table.module.d.ts.map +0 -1
  495. package/lib/components/components.module.d.ts +0 -7
  496. package/lib/components/components.module.d.ts.map +0 -1
  497. package/lib/directives/command-click-directive.module.d.ts.map +0 -1
  498. package/lib/directives/command-click.directive.d.ts.map +0 -1
  499. package/lib/directives/index.d.ts +0 -7
  500. package/lib/directives/index.d.ts.map +0 -1
  501. package/lib/directives/render-in-page-header-directive.module.d.ts.map +0 -1
  502. package/lib/directives/render-in-page-header.directive.d.ts.map +0 -1
  503. package/lib/directives/valtimo-cds-modal-directive.module.d.ts.map +0 -1
  504. package/lib/directives/valtimo-cds-modal.directive.d.ts.map +0 -1
  505. package/lib/models/carbon-table.model.d.ts +0 -33
  506. package/lib/models/carbon-table.model.d.ts.map +0 -1
  507. package/lib/models/list.model.d.ts +0 -9
  508. package/lib/models/list.model.d.ts.map +0 -1
  509. /package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/formfield.model.mjs +0 -0
  510. /package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/validation/date.validators.mjs +0 -0
  511. /package/{esm2020 → esm2022}/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.mjs +0 -0
  512. /package/{esm2020 → esm2022}/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.formio.mjs +0 -0
  513. /package/{esm2020 → esm2022}/lib/components/form-io/form-io-current-user/form-io-current-user-edit-form.mjs +0 -0
  514. /package/{esm2020 → esm2022}/lib/components/form-io/form-io-current-user/form-io-current-user.formio.mjs +0 -0
  515. /package/{esm2020 → esm2022}/lib/components/form-io/form-io-resource-selector/form-io-resource-selector.formio.mjs +0 -0
  516. /package/{esm2020 → esm2022}/lib/components/form-io/form-io-uploader/form-io-uploader-edit-form.mjs +0 -0
  517. /package/{esm2020 → esm2022}/lib/components/form-io/form-io-uploader/form-io-uploader.formio.mjs +0 -0
  518. /package/{esm2020 → esm2022}/lib/components/menu/menu.init.mjs +0 -0
  519. /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/booleanTypeConverter.mjs +0 -0
  520. /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/dateTypeConverter.mjs +0 -0
  521. /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/enumTypeConverter.mjs +0 -0
  522. /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/relatedFilesTypeConverter.mjs +0 -0
  523. /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.mjs +0 -0
  524. /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/stringTypeConverter.mjs +0 -0
  525. /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/type-converters.model.mjs +0 -0
  526. /package/{esm2020 → esm2022}/lib/constants/carbon.constants.mjs +0 -0
  527. /package/{esm2020 → esm2022}/lib/constants/index.mjs +0 -0
  528. /package/{esm2020 → esm2022}/lib/models/alert.model.mjs +0 -0
  529. /package/{esm2020 → esm2022}/lib/models/documenten-api-metadata.model.mjs +0 -0
  530. /package/{esm2020 → esm2022}/lib/models/form-io.model.mjs +0 -0
  531. /package/{esm2020 → esm2022}/lib/models/searchable-dropdown.model.mjs +0 -0
  532. /package/{esm2020 → esm2022}/lib/models/version.model.mjs +0 -0
  533. /package/{esm2020 → esm2022}/valtimo-components.mjs +0 -0
  534. /package/lib/directives/{command-click-directive.module.d.ts → command-click/command-click-directive.module.d.ts} +0 -0
  535. /package/lib/directives/{render-in-page-header-directive.module.d.ts → render-in-page-header/render-in-page-header-directive.module.d.ts} +0 -0
  536. /package/lib/directives/{valtimo-cds-modal-directive.module.d.ts → valtimo-cds-modal/valtimo-cds-modal-directive.module.d.ts} +0 -0
@@ -1,199 +0,0 @@
1
- /*
2
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3
- *
4
- * Licensed under EUPL, Version 1.2 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" basis,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
17
- import { BehaviorSubject, fromEvent } from 'rxjs';
18
- import { debounceTime, take } from 'rxjs/operators';
19
- import { get as _get } from 'lodash';
20
- import * as i0 from "@angular/core";
21
- import * as i1 from "../view-content/view-content.service";
22
- import * as i2 from "ngx-logger";
23
- import * as i3 from "@angular/common";
24
- import * as i4 from "@ng-bootstrap/ng-bootstrap";
25
- import * as i5 from "@angular/forms";
26
- import * as i6 from "@ngx-translate/core";
27
- import * as i7 from "./ListFilterPipe.directive";
28
- export class ListComponent {
29
- constructor(viewContentService, logger) {
30
- this.viewContentService = viewContentService;
31
- this.logger = logger;
32
- this.actions = [];
33
- this.rowClicked = new EventEmitter();
34
- this.paginationClicked = new EventEmitter();
35
- this.paginationSet = new EventEmitter();
36
- this.search = new EventEmitter();
37
- this.sortChanged = new EventEmitter();
38
- this.headerProvided = false;
39
- this.regExpStringRemoveUnderscore = /_/g;
40
- this.sort$ = new BehaviorSubject({
41
- state: { name: '', direction: 'DESC' },
42
- isSorting: false,
43
- });
44
- this.viewListAs = localStorage.getItem('viewListAs') || 'table';
45
- }
46
- loadPaginationSize() {
47
- const entries = localStorage.getItem(`${this.paginationIdentifier}${ListComponent.PAGINATION_SIZE}`);
48
- if (entries !== null) {
49
- this.pagination.size = +entries;
50
- this.paginationSet.emit(+entries);
51
- this.logger.debug('Pagination loaded from local storage for this list. Current: ', entries);
52
- }
53
- else {
54
- this.logger.debug('Pagination does NOT exist in local storage for this list. Will use default. Change it to create an entry.');
55
- this.paginationSet.emit(10);
56
- }
57
- }
58
- setPaginationSize(numberOfEntries) {
59
- localStorage.setItem(`${this.paginationIdentifier}${ListComponent.PAGINATION_SIZE}`, numberOfEntries);
60
- this.pagination.size = numberOfEntries;
61
- this.logger.debug('Pagination set in local storage for this list: ', numberOfEntries);
62
- this.paginationSet.emit(numberOfEntries);
63
- }
64
- ngOnInit() {
65
- if (this.pagination) {
66
- this.loadPaginationSize();
67
- }
68
- if (this.initialSortState) {
69
- this.sort$.next(this.initialSortState);
70
- }
71
- }
72
- ngOnChanges(changes) {
73
- if (changes.items && changes.items.currentValue) {
74
- this.transformListItemsMatchFields();
75
- }
76
- if (changes?.initialSortState?.currentValue) {
77
- this.sort$.next(changes?.initialSortState?.currentValue);
78
- }
79
- }
80
- ngAfterViewInit() {
81
- if (this.isSearchable) {
82
- fromEvent(this.searchBox.nativeElement, 'keyup')
83
- .pipe(debounceTime(500))
84
- .subscribe(() => {
85
- const value = this.searchBox.nativeElement.value;
86
- if (this.search.observers.length > 0) {
87
- // custom search callbak is specified, perhaps to query on the server side
88
- this.search.emit(value);
89
- }
90
- else {
91
- this.searchModel = value;
92
- }
93
- });
94
- }
95
- }
96
- transformListItemsMatchFields() {
97
- if (this.items && this.fields) {
98
- this.items.forEach(item => {
99
- item.listItemFields = this.fields.map(field => ({
100
- key: field.key,
101
- label: field.label,
102
- type: field.type || '',
103
- value: this.resolveObject(field, item),
104
- }));
105
- });
106
- }
107
- }
108
- onClickRow(item) {
109
- this.rowClicked.emit(item);
110
- }
111
- resolveObject(definition, obj) {
112
- const definitionKey = definition.key;
113
- const customPropString = '$.';
114
- const key = definitionKey.includes(customPropString)
115
- ? definitionKey.split(customPropString)[1]
116
- : definitionKey;
117
- const resolvedObjValue = _get(obj, key, null);
118
- return this.viewContentService.get(resolvedObjValue, definition);
119
- }
120
- switchView(type) {
121
- localStorage.setItem('viewListAs', type);
122
- this.viewListAs = type;
123
- }
124
- getTotalPageCount() {
125
- return Math.ceil(this.pagination.collectionSize / this.pagination.size);
126
- }
127
- onClickPagination(page) {
128
- this.paginationClicked.emit(page);
129
- }
130
- handleFieldClick(key, sortable) {
131
- const desc = 'DESC';
132
- const asc = 'ASC';
133
- if (!sortable) {
134
- return;
135
- }
136
- this.sort$.pipe(take(1)).subscribe(sort => {
137
- let newState;
138
- if (sort.state.name === key) {
139
- if (!sort.isSorting) {
140
- newState = { state: { ...sort.state, direction: desc }, isSorting: true };
141
- }
142
- else {
143
- if (sort.state.direction === desc) {
144
- newState = { ...sort, state: { ...sort.state, direction: asc } };
145
- }
146
- else {
147
- newState = { state: { ...sort.state, direction: desc }, isSorting: false };
148
- }
149
- }
150
- }
151
- else {
152
- newState = { state: { name: key, direction: desc }, isSorting: true };
153
- }
154
- this.sort$.next(newState);
155
- this.sortChanged.emit(newState);
156
- });
157
- }
158
- }
159
- ListComponent.PAGINATION_SIZE = 'PaginationSize';
160
- ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ListComponent, deps: [{ token: i1.ViewContentService }, { token: i2.NGXLogger }], target: i0.ɵɵFactoryTarget.Component });
161
- ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ListComponent, selector: "valtimo-list", inputs: { items: "items", fields: "fields", pagination: "pagination", viewMode: "viewMode", isSearchable: "isSearchable", header: "header", actions: "actions", paginationIdentifier: "paginationIdentifier", initialSortState: "initialSortState", lastColumnTemplate: "lastColumnTemplate" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"{{ 'list.search' | translate }}\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter : searchModel; let i = index\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container\n *ngIf=\"\n listItemField.type === '' && {\n valueTranslationKey: 'viewTypeConverter.' + listItemField.value,\n valueTranslation: 'viewTypeConverter.' + listItemField.value | translate\n } as vars\n \"\n >\n {{\n listItemField.value\n ? vars.valueTranslation !== vars.valueTranslationKey\n ? vars.valueTranslation\n : listItemField.value\n : '-'\n }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item, $event)\"\n ></i>\n </td>\n <td *ngIf=\"lastColumnTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n lastColumnTemplate;\n context: {index: i, length: items.length, item: item}\n \"\n ></ng-container>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter : searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter : searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter : searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage'\n | translate\n : {current: pagination.page > 0 ? pagination.page : 1, total: getTotalPageCount()}\n }}</strong>\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate : {number: (items | listFilter : searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter : searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-dots-vertical\"></i>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item, $event)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem;display:flex;flex-direction:column}.page-count strong:first-child{margin-bottom:6px}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.NgbPagination, selector: "ngb-pagination", inputs: ["disabled", "boundaryLinks", "directionLinks", "ellipses", "rotate", "collectionSize", "maxSize", "page", "pageSize", "size"], outputs: ["pageChange"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "pipe", type: i7.ListFilterPipe, name: "listFilter" }] });
162
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ListComponent, decorators: [{
163
- type: Component,
164
- args: [{ selector: 'valtimo-list', template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div>\n <div *ngIf=\"(items?.length > 0 && fields?.length > 0) || header\">\n <div\n class=\"d-flex align-items-center search-holder bg-light\"\n [ngClass]=\"{'pb-4 pt-4': !header}\"\n *ngIf=\"isSearchable || viewMode || header\"\n >\n <div class=\"align-self-start\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"ml-auto row\">\n <input\n *ngIf=\"isSearchable\"\n class=\"form-control col-sm-8\"\n type=\"text\"\n placeholder=\"{{ 'list.search' | translate }}\"\n #searchBox\n />\n\n <div\n class=\"switch-view-holder btn-group col-sm-4 mt-1 mt-sm-0\"\n role=\"group\"\n *ngIf=\"viewMode\"\n >\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'table' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('table')\"\n >\n <i class=\"icon mdi mdi-view-headline view-icon\"></i>\n </button>\n <button\n class=\"btn\"\n [ngClass]=\"viewListAs === 'tile' ? 'btn-primary' : 'btn-default'\"\n (click)=\"switchView('tile')\"\n >\n <i class=\"icon mdi mdi-view-module view-icon\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <div *ngIf=\"items?.length > 0 && fields?.length > 0\">\n <div class=\"table-responsive noSwipe\" *ngIf=\"!viewMode || viewListAs === 'table'\">\n <table class=\"table table-striped table-hover m-0\" *ngIf=\"sort$ | async as sort\">\n <thead>\n <tr>\n <th\n *ngFor=\"let field of fields\"\n (click)=\"handleFieldClick(field.key, field.sortable)\"\n [ngClass]=\"{\n sortable: field.sortable,\n 'is-being-sorted': field.key === sort.state.name && sort.isSorting,\n ascending: sort.state.direction === 'ASC'\n }\"\n >\n {{ field.label }}\n </th>\n <th *ngFor=\"let action of actions\">\n {{ action.columnName }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n [ngClass]=\"{'click-able': this.rowClicked.observers.length > 0}\"\n *ngFor=\"let item of items | listFilter : searchModel; let i = index\"\n (click)=\"onClickRow(item)\"\n >\n <td class=\"align-top\" *ngFor=\"let listItemField of item.listItemFields\">\n <ng-container\n *ngIf=\"\n listItemField.type === '' && {\n valueTranslationKey: 'viewTypeConverter.' + listItemField.value,\n valueTranslation: 'viewTypeConverter.' + listItemField.value | translate\n } as vars\n \"\n >\n {{\n listItemField.value\n ? vars.valueTranslation !== vars.valueTranslationKey\n ? vars.valueTranslation\n : listItemField.value\n : '-'\n }}\n </ng-container>\n\n <ng-container\n *ngIf=\"listItemField.type === 'dropdownActions'\"\n [ngTemplateOutlet]=\"dropdownActions\"\n [ngTemplateOutletContext]=\"{listItemField: listItemField, item: item}\"\n ></ng-container>\n </td>\n <td class=\"align-top\" *ngFor=\"let action of actions\">\n <i\n class=\"action-icon\"\n style=\"cursor: pointer\"\n [ngClass]=\"action.iconClass\"\n (click)=\"action.callback(item, $event)\"\n ></i>\n </td>\n <td *ngIf=\"lastColumnTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n lastColumnTemplate;\n context: {index: i, length: items.length, item: item}\n \"\n ></ng-container>\n </td>\n </tr>\n <tr>\n <td *ngIf=\"(items | listFilter : searchModel).length === 0\" [colSpan]=\"fields.length\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"container-fluid\" *ngIf=\"viewMode && viewListAs === 'tile'\">\n <div class=\"row p-2\">\n <div\n class=\"col-12 col-sm-6 col-xl-4 p-2\"\n *ngFor=\"let item of items | listFilter : searchModel\"\n (click)=\"onClickRow(item)\"\n >\n <div class=\"click-able tile-holder p-4\">\n <dl class=\"row mb-0\" *ngFor=\"let listItemField of item.listItemFields\">\n <dt class=\"col-12 col-md-5 text-xl-right\">{{ listItemField.label }}</dt>\n <dd class=\"col-12 col-md-7\">{{ listItemField.value || '-' }}</dd>\n </dl>\n </div>\n </div>\n <div class=\"col-12\" *ngIf=\"(items | listFilter : searchModel).length === 0\">\n {{ 'list.noMatchingItems' | translate }}<i>\"{{ searchModel }}\"</i>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"pagination-holder bg-light px-4 pt-4 pb-2 overflow-auto row mr-0 ml-0\"\n *ngIf=\"pagination && items?.length > 0 && fields?.length > 0\"\n >\n <div class=\"float-left page-count col-4\">\n <strong>{{\n 'list.currentPage'\n | translate\n : {current: pagination.page > 0 ? pagination.page : 1, total: getTotalPageCount()}\n }}</strong>\n {{\n pagination.collectionSize === 1\n ? ('list.showingResult' | translate : {number: (items | listFilter : searchModel).length})\n : ('list.showingResults'\n | translate\n : {\n number: (items | listFilter : searchModel).length,\n total: pagination.collectionSize\n })\n }}\n </div>\n <div class=\"col-4 text-center\">\n {{ 'list.show' | translate }}\n <select [(ngModel)]=\"pagination.size\" (ngModelChange)=\"setPaginationSize($event)\">\n <option [ngValue]=\"10\">10</option>\n <option [ngValue]=\"25\">25</option>\n <option [ngValue]=\"50\">50</option>\n <option [ngValue]=\"100\">100</option>\n </select>\n {{ 'list.entries' | translate }}\n </div>\n <div class=\"col-4\">\n <ngb-pagination\n *ngIf=\"pagination.collectionSize > pagination.size\"\n class=\"float-right\"\n [collectionSize]=\"pagination.collectionSize\"\n [(page)]=\"pagination.page\"\n [pageSize]=\"pagination.size\"\n [maxSize]=\"pagination.maxPaginationItemSize\"\n [rotate]=\"true\"\n (pageChange)=\"onClickPagination(pagination.page)\"\n ></ngb-pagination>\n </div>\n </div>\n\n <div id=\"no-results\" class=\"p-5\" *ngIf=\"items?.length === 0\">\n {{ 'list.noResults' | translate }}\n </div>\n\n <div id=\"no-field-definitions\" class=\"p-5\" *ngIf=\"items?.length > 0 && fields?.length === 0\">\n {{ 'list.noFieldDefinitions' | translate }}\n </div>\n</div>\n\n<ng-template #dropdownActions let-listItemField=\"listItemField\" let-item=\"item\">\n <div class=\"dropdown\" *ngIf=\"listItemField?.value.length > 0\">\n <a\n style=\"cursor: pointer\"\n class=\"dropdown-toggle d-block\"\n id=\"dropdownMenu\"\n data-toggle=\"dropdown\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <i class=\"action-icon icon mdi mdi-dots-vertical\"></i>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenu\">\n <a\n (click)=\"action.callback(item, $event)\"\n class=\"dropdown-item p-2\"\n *ngFor=\"let action of listItemField.value\"\n >\n <ng-container *ngIf=\"action.iconClass !== null\">\n <i [ngClass]=\"action.iconClass\"></i>\n </ng-container>\n {{ action?.label || '-' }}\n </a>\n </div>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.table{table-layout:fixed}.table-responsive{overflow-x:visible}.click-able{cursor:pointer}.pagination-holder{border-top:1px solid #dee2e6}.search-holder{border-bottom:1px solid #dee2e6;padding-left:18px;padding-right:18px;height:80px}.switch-view-holder i{font-size:1.8rem;line-height:1.2rem;margin-top:9px}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}.page-count{margin-bottom:1rem;display:flex;flex-direction:column}.page-count strong:first-child{margin-bottom:6px}th:first-child,td:first-child{padding-left:25px}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:after{font-family:\"Font Awesome 5 Free\";content:\" \\f0dd\";position:absolute;margin:auto 0 auto 5px;opacity:0;transition:all .15s ease}th.sortable.is-being-sorted.ascending:after{transform:rotate(-180deg)}th.sortable:hover:after{opacity:.5}th.sortable.is-being-sorted:after{opacity:1}.action-icon,.view-icon{font-size:16px!important}\n"] }]
165
- }], ctorParameters: function () { return [{ type: i1.ViewContentService }, { type: i2.NGXLogger }]; }, propDecorators: { items: [{
166
- type: Input
167
- }], fields: [{
168
- type: Input
169
- }], pagination: [{
170
- type: Input
171
- }], viewMode: [{
172
- type: Input
173
- }], isSearchable: [{
174
- type: Input
175
- }], header: [{
176
- type: Input
177
- }], actions: [{
178
- type: Input
179
- }], paginationIdentifier: [{
180
- type: Input
181
- }], initialSortState: [{
182
- type: Input
183
- }], lastColumnTemplate: [{
184
- type: Input
185
- }], rowClicked: [{
186
- type: Output
187
- }], paginationClicked: [{
188
- type: Output
189
- }], paginationSet: [{
190
- type: Output
191
- }], search: [{
192
- type: Output
193
- }], sortChanged: [{
194
- type: Output
195
- }], searchBox: [{
196
- type: ViewChild,
197
- args: ['searchBox']
198
- }] } });
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3QvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBQyxlQUFlLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsT0FBTyxFQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7OztBQU9uQyxNQUFNLE9BQU8sYUFBYTtJQStCeEIsWUFBb0Isa0JBQXNDLEVBQVUsTUFBaUI7UUFBakUsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUF0QjVFLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFLbkIsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25ELHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFELGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEQsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9DLGdCQUFXLEdBQTRCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFN0QsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFH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QUFmLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFNaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGlyZWN0aW9uLCBTb3J0U3RhdGV9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnR9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Vmlld0NvbnRlbnRTZXJ2aWNlfSBmcm9tICcuLi92aWV3LWNvbnRlbnQvdmlldy1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtnZXQgYXMgX2dldH0gZnJvbSAnbG9kYXNoJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saXN0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgc3RhdGljIFBBR0lOQVRJT05fU0laRSA9ICdQYWdpbmF0aW9uU2l6ZSc7XG5cbiAgQElucHV0KCkgaXRlbXM6IEFycmF5PGFueT47XG4gIEBJbnB1dCgpIGZpZWxkczogQXJyYXk8YW55PjtcbiAgQElucHV0KCkgcGFnaW5hdGlvbj86IGFueTtcbiAgQElucHV0KCkgdmlld01vZGU/OiBib29sZWFuO1xuICBASW5wdXQoKSBpc1NlYXJjaGFibGU/OiBib29sZWFuO1xuICBASW5wdXQoKSBoZWFkZXI/OiBib29sZWFuO1xuICBASW5wdXQoKSBhY3Rpb25zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBwYWdpbmF0aW9uSWRlbnRpZmllcj86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbFNvcnRTdGF0ZTogU29ydFN0YXRlO1xuICBASW5wdXQoKSBsYXN0Q29sdW1uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBPdXRwdXQoKSByb3dDbGlja2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHBhZ2luYXRpb25DbGlja2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHBhZ2luYXRpb25TZXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2VhcmNoOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8U29ydFN0YXRlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgaGVhZGVyUHJvdmlkZWQgPSBmYWxzZTtcbiAgcHVibGljIHZpZXdMaXN0QXM6IHN0cmluZztcbiAgcHVibGljIHNlYXJjaE1vZGVsOiBzdHJpbmc7XG4gIHB1YmxpYyByZWdFeHBTdHJpbmdSZW1vdmVVbmRlcnNjb3JlID0gL18vZztcbiAgQFZpZXdDaGlsZCgnc2VhcmNoQm94Jykgc2VhcmNoQm94OiBFbGVtZW50UmVmO1xuXG4gIHJlYWRvbmx5IHNvcnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTb3J0U3RhdGU+KHtcbiAgICBzdGF0ZToge25hbWU6ICcnLCBkaXJlY3Rpb246ICdERVNDJ30sXG4gICAgaXNTb3J0aW5nOiBmYWxzZSxcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2aWV3Q29udGVudFNlcnZpY2U6IFZpZXdDb250ZW50U2VydmljZSwgcHJpdmF0ZSBsb2dnZXI6IE5HWExvZ2dlcikge1xuICAgIHRoaXMudmlld0xpc3RBcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd2aWV3TGlzdEFzJykgfHwgJ3RhYmxlJztcbiAgfVxuXG4gIGxvYWRQYWdpbmF0aW9uU2l6ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyaWVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXG4gICAgICBgJHt0aGlzLnBhZ2luYXRpb25JZGVudGlmaWVyfSR7TGlzdENvbXBvbmVudC5QQUdJTkFUSU9OX1NJWkV9YFxuICAgICk7XG4gICAgaWYgKGVudHJpZXMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbi5zaXplID0gK2VudHJpZXM7XG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXQuZW1pdCgrZW50cmllcyk7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUGFnaW5hdGlvbiBsb2FkZWQgZnJvbSBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIGxpc3QuIEN1cnJlbnQ6ICcsIGVudHJpZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgJ1BhZ2luYXRpb24gZG9lcyBOT1QgZXhpc3QgaW4gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0LiBXaWxsIHVzZSBkZWZhdWx0LiBDaGFuZ2UgaXQgdG8gY3JlYXRlIGFuIGVudHJ5LidcbiAgICAgICk7XG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXQuZW1pdCgxMCk7XG4gICAgfVxuICB9XG5cbiAgc2V0UGFnaW5hdGlvblNpemUobnVtYmVyT2ZFbnRyaWVzOiBzdHJpbmcpIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIGAke3RoaXMucGFnaW5hdGlvbklkZW50aWZpZXJ9JHtMaXN0Q29tcG9uZW50LlBBR0lOQVRJT05fU0laRX1gLFxuICAgICAgbnVtYmVyT2ZFbnRyaWVzXG4gICAgKTtcbiAgICB0aGlzLnBhZ2luYXRpb24uc2l6ZSA9IG51bWJlck9mRW50cmllcztcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnUGFnaW5hdGlvbiBzZXQgaW4gbG9jYWwgc3RvcmFnZSBmb3IgdGhpcyBsaXN0OiAnLCBudW1iZXJPZkVudHJpZXMpO1xuICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KG51bWJlck9mRW50cmllcyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmxvYWRQYWdpbmF0aW9uU2l6ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluaXRpYWxTb3J0U3RhdGUpIHtcbiAgICAgIHRoaXMuc29ydCQubmV4dCh0aGlzLmluaXRpYWxTb3J0U3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5pdGVtcyAmJiBjaGFuZ2VzLml0ZW1zLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy50cmFuc2Zvcm1MaXN0SXRlbXNNYXRjaEZpZWxkcygpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzPy5pbml0aWFsU29ydFN0YXRlPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuc29ydCQubmV4dChjaGFuZ2VzPy5pbml0aWFsU29ydFN0YXRlPy5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5pc1NlYXJjaGFibGUpIHtcbiAgICAgIGZyb21FdmVudCh0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LCAna2V5dXAnKVxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTAwKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaC5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gY3VzdG9tIHNlYXJjaCBjYWxsYmFrIGlzIHNwZWNpZmllZCwgcGVyaGFwcyB0byBxdWVyeSBvbiB0aGUgc2VydmVyIHNpZGVcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLmVtaXQodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1vZGVsID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtTGlzdEl0ZW1zTWF0Y2hGaWVsZHMoKSB7XG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5maWVsZHMpIHtcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5saXN0SXRlbUZpZWxkcyA9IHRoaXMuZmllbGRzLm1hcChmaWVsZCA9PiAoe1xuICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgIGxhYmVsOiBmaWVsZC5sYWJlbCxcbiAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlIHx8ICcnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnJlc29sdmVPYmplY3QoZmllbGQsIGl0ZW0pLFxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DbGlja1JvdyhpdGVtKSB7XG4gICAgdGhpcy5yb3dDbGlja2VkLmVtaXQoaXRlbSk7XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZU9iamVjdChkZWZpbml0aW9uOiBhbnksIG9iajogYW55KSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbktleSA9IGRlZmluaXRpb24ua2V5O1xuICAgIGNvbnN0IGN1c3RvbVByb3BTdHJpbmcgPSAnJC4nO1xuICAgIGNvbnN0IGtleSA9IGRlZmluaXRpb25LZXkuaW5jbHVkZXMoY3VzdG9tUHJvcFN0cmluZylcbiAgICAgID8gZGVmaW5pdGlvbktleS5zcGxpdChjdXN0b21Qcm9wU3RyaW5nKVsxXVxuICAgICAgOiBkZWZpbml0aW9uS2V5O1xuICAgIGNvbnN0IHJlc29sdmVkT2JqVmFsdWUgPSBfZ2V0KG9iaiwga2V5LCBudWxsKTtcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udGVudFNlcnZpY2UuZ2V0KHJlc29sdmVkT2JqVmFsdWUsIGRlZmluaXRpb24pO1xuICB9XG5cbiAgcHVibGljIHN3aXRjaFZpZXcodHlwZSkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd2aWV3TGlzdEFzJywgdHlwZSk7XG4gICAgdGhpcy52aWV3TGlzdEFzID0gdHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUb3RhbFBhZ2VDb3VudCgpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMucGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSAvIHRoaXMucGFnaW5hdGlvbi5zaXplKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsaWNrUGFnaW5hdGlvbihwYWdlKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uQ2xpY2tlZC5lbWl0KHBhZ2UpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUZpZWxkQ2xpY2soa2V5OiBzdHJpbmcsIHNvcnRhYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgZGVzYzogRGlyZWN0aW9uID0gJ0RFU0MnO1xuICAgIGNvbnN0IGFzYzogRGlyZWN0aW9uID0gJ0FTQyc7XG5cbiAgICBpZiAoIXNvcnRhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzb3J0ID0+IHtcbiAgICAgIGxldCBuZXdTdGF0ZTogU29ydFN0YXRlO1xuXG4gICAgICBpZiAoc29ydC5zdGF0ZS5uYW1lID09PSBrZXkpIHtcbiAgICAgICAgaWYgKCFzb3J0LmlzU29ydGluZykge1xuICAgICAgICAgIG5ld1N0YXRlID0ge3N0YXRlOiB7Li4uc29ydC5zdGF0ZSwgZGlyZWN0aW9uOiBkZXNjfSwgaXNTb3J0aW5nOiB0cnVlfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc29ydC5zdGF0ZS5kaXJlY3Rpb24gPT09IGRlc2MpIHtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gey4uLnNvcnQsIHN0YXRlOiB7Li4uc29ydC5zdGF0ZSwgZGlyZWN0aW9uOiBhc2N9fTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246IGRlc2N9LCBpc1NvcnRpbmc6IGZhbHNlfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1N0YXRlID0ge3N0YXRlOiB7bmFtZToga2V5LCBkaXJlY3Rpb246IGRlc2N9LCBpc1NvcnRpbmc6IHRydWV9O1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNvcnQkLm5leHQobmV3U3RhdGUpO1xuICAgICAgdGhpcy5zb3J0Q2hhbmdlZC5lbWl0KG5ld1N0YXRlKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2PlxuICA8ZGl2ICpuZ0lmPVwiKGl0ZW1zPy5sZW5ndGggPiAwICYmIGZpZWxkcz8ubGVuZ3RoID4gMCkgfHwgaGVhZGVyXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHNlYXJjaC1ob2xkZXIgYmctbGlnaHRcIlxuICAgICAgW25nQ2xhc3NdPVwieydwYi00IHB0LTQnOiAhaGVhZGVyfVwiXG4gICAgICAqbmdJZj1cImlzU2VhcmNoYWJsZSB8fCB2aWV3TW9kZSB8fCBoZWFkZXJcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1zZWxmLXN0YXJ0XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltoZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtbC1hdXRvIHJvd1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAqbmdJZj1cImlzU2VhcmNoYWJsZVwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY29sLXNtLThcIlxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdsaXN0LnNlYXJjaCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICNzZWFyY2hCb3hcbiAgICAgICAgLz5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJzd2l0Y2gtdmlldy1ob2xkZXIgYnRuLWdyb3VwIGNvbC1zbS00IG10LTEgbXQtc20tMFwiXG4gICAgICAgICAgcm9sZT1cImdyb3VwXCJcbiAgICAgICAgICAqbmdJZj1cInZpZXdNb2RlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInZpZXdMaXN0QXMgPT09ICd0YWJsZScgPyAnYnRuLXByaW1hcnknIDogJ2J0bi1kZWZhdWx0J1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVmlldygndGFibGUnKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIG1kaSBtZGktdmlldy1oZWFkbGluZSB2aWV3LWljb25cIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwidmlld0xpc3RBcyA9PT0gJ3RpbGUnID8gJ2J0bi1wcmltYXJ5JyA6ICdidG4tZGVmYXVsdCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFZpZXcoJ3RpbGUnKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIG1kaSBtZGktdmlldy1tb2R1bGUgdmlldy1pY29uXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbdGFic11cIj48L25nLWNvbnRlbnQ+XG5cbiAgPGRpdiAqbmdJZj1cIml0ZW1zPy5sZW5ndGggPiAwICYmIGZpZWxkcz8ubGVuZ3RoID4gMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlIG5vU3dpcGVcIiAqbmdJZj1cIiF2aWV3TW9kZSB8fCB2aWV3TGlzdEFzID09PSAndGFibGUnXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIG0tMFwiICpuZ0lmPVwic29ydCQgfCBhc3luYyBhcyBzb3J0XCI+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkc1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVGaWVsZENsaWNrKGZpZWxkLmtleSwgZmllbGQuc29ydGFibGUpXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBmaWVsZC5zb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAnaXMtYmVpbmctc29ydGVkJzogZmllbGQua2V5ID09PSBzb3J0LnN0YXRlLm5hbWUgJiYgc29ydC5pc1NvcnRpbmcsXG4gICAgICAgICAgICAgICAgYXNjZW5kaW5nOiBzb3J0LnN0YXRlLmRpcmVjdGlvbiA9PT0gJ0FTQydcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiPlxuICAgICAgICAgICAgICB7eyBhY3Rpb24uY29sdW1uTmFtZSB9fVxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2NsaWNrLWFibGUnOiB0aGlzLnJvd0NsaWNrZWQub2JzZXJ2ZXJzLmxlbmd0aCA+IDB9XCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zIHwgbGlzdEZpbHRlciA6IHNlYXJjaE1vZGVsOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrUm93KGl0ZW0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi10b3BcIiAqbmdGb3I9XCJsZXQgbGlzdEl0ZW1GaWVsZCBvZiBpdGVtLmxpc3RJdGVtRmllbGRzXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1GaWVsZC50eXBlID09PSAnJyAmJiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVHJhbnNsYXRpb25LZXk6ICd2aWV3VHlwZUNvbnZlcnRlci4nICsgbGlzdEl0ZW1GaWVsZC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVUcmFuc2xhdGlvbjogJ3ZpZXdUeXBlQ29udmVydGVyLicgKyBsaXN0SXRlbUZpZWxkLnZhbHVlIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICB9IGFzIHZhcnNcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgIGxpc3RJdGVtRmllbGQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgPyB2YXJzLnZhbHVlVHJhbnNsYXRpb24gIT09IHZhcnMudmFsdWVUcmFuc2xhdGlvbktleVxuICAgICAgICAgICAgICAgICAgICAgID8gdmFycy52YWx1ZVRyYW5zbGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgOiBsaXN0SXRlbUZpZWxkLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogJy0nXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwibGlzdEl0ZW1GaWVsZC50eXBlID09PSAnZHJvcGRvd25BY3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHJvcGRvd25BY3Rpb25zXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2xpc3RJdGVtRmllbGQ6IGxpc3RJdGVtRmllbGQsIGl0ZW06IGl0ZW19XCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLXRvcFwiICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uLmNhbGxiYWNrKGl0ZW0sICRldmVudClcIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImxhc3RDb2x1bW5UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgIGxhc3RDb2x1bW5UZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtpbmRleDogaSwgbGVuZ3RoOiBpdGVtcy5sZW5ndGgsIGl0ZW06IGl0ZW19XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIihpdGVtcyB8IGxpc3RGaWx0ZXIgOiBzZWFyY2hNb2RlbCkubGVuZ3RoID09PSAwXCIgW2NvbFNwYW5dPVwiZmllbGRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICB7eyAnbGlzdC5ub01hdGNoaW5nSXRlbXMnIHwgdHJhbnNsYXRlIH19PGk+XCJ7eyBzZWFyY2hNb2RlbCB9fVwiPC9pPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIiAqbmdJZj1cInZpZXdNb2RlICYmIHZpZXdMaXN0QXMgPT09ICd0aWxlJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBwLTJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGNvbC1zbS02IGNvbC14bC00IHAtMlwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXMgfCBsaXN0RmlsdGVyIDogc2VhcmNoTW9kZWxcIlxuICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrUm93KGl0ZW0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGljay1hYmxlIHRpbGUtaG9sZGVyIHAtNFwiPlxuICAgICAgICAgICAgPGRsIGNsYXNzPVwicm93IG1iLTBcIiAqbmdGb3I9XCJsZXQgbGlzdEl0ZW1GaWVsZCBvZiBpdGVtLmxpc3RJdGVtRmllbGRzXCI+XG4gICAgICAgICAgICAgIDxkdCBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNSB0ZXh0LXhsLXJpZ2h0XCI+e3sgbGlzdEl0ZW1GaWVsZC5sYWJlbCB9fTwvZHQ+XG4gICAgICAgICAgICAgIDxkZCBjbGFzcz1cImNvbC0xMiBjb2wtbWQtN1wiPnt7IGxpc3RJdGVtRmllbGQudmFsdWUgfHwgJy0nIH19PC9kZD5cbiAgICAgICAgICAgIDwvZGw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCIoaXRlbXMgfCBsaXN0RmlsdGVyIDogc2VhcmNoTW9kZWwpLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgIHt7ICdsaXN0Lm5vTWF0Y2hpbmdJdGVtcycgfCB0cmFuc2xhdGUgfX08aT5cInt7IHNlYXJjaE1vZGVsIH19XCI8L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cInBhZ2luYXRpb24taG9sZGVyIGJnLWxpZ2h0IHB4LTQgcHQtNCBwYi0yIG92ZXJmbG93LWF1dG8gcm93IG1yLTAgbWwtMFwiXG4gICAgKm5nSWY9XCJwYWdpbmF0aW9uICYmIGl0ZW1zPy5sZW5ndGggPiAwICYmIGZpZWxkcz8ubGVuZ3RoID4gMFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZmxvYXQtbGVmdCBwYWdlLWNvdW50IGNvbC00XCI+XG4gICAgICA8c3Ryb25nPnt7XG4gICAgICAgICdsaXN0LmN1cnJlbnRQYWdlJ1xuICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICA6IHtjdXJyZW50OiBwYWdpbmF0aW9uLnBhZ2UgPiAwID8gcGFnaW5hdGlvbi5wYWdlIDogMSwgdG90YWw6IGdldFRvdGFsUGFnZUNvdW50KCl9XG4gICAgICB9fTwvc3Ryb25nPlxuICAgICAge3tcbiAgICAgICAgcGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSA9PT0gMVxuICAgICAgICAgID8gKCdsaXN0LnNob3dpbmdSZXN1bHQnIHwgdHJhbnNsYXRlIDoge251bWJlcjogKGl0ZW1zIHwgbGlzdEZpbHRlciA6IHNlYXJjaE1vZGVsKS5sZW5ndGh9KVxuICAgICAgICAgIDogKCdsaXN0LnNob3dpbmdSZXN1bHRzJ1xuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBudW1iZXI6IChpdGVtcyB8IGxpc3RGaWx0ZXIgOiBzZWFyY2hNb2RlbCkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgdG90YWw6IHBhZ2luYXRpb24uY29sbGVjdGlvblNpemVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgIHt7ICdsaXN0LnNob3cnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwicGFnaW5hdGlvbi5zaXplXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2V0UGFnaW5hdGlvblNpemUoJGV2ZW50KVwiPlxuICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIjEwXCI+MTA8L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCIyNVwiPjI1PC9vcHRpb24+XG4gICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiNTBcIj41MDwvb3B0aW9uPlxuICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIjEwMFwiPjEwMDwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgICB7eyAnbGlzdC5lbnRyaWVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxuICAgICAgPG5nYi1wYWdpbmF0aW9uXG4gICAgICAgICpuZ0lmPVwicGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZSA+IHBhZ2luYXRpb24uc2l6ZVwiXG4gICAgICAgIGNsYXNzPVwiZmxvYXQtcmlnaHRcIlxuICAgICAgICBbY29sbGVjdGlvblNpemVdPVwicGFnaW5hdGlvbi5jb2xsZWN0aW9uU2l6ZVwiXG4gICAgICAgIFsocGFnZSldPVwicGFnaW5hdGlvbi5wYWdlXCJcbiAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2luYXRpb24uc2l6ZVwiXG4gICAgICAgIFttYXhTaXplXT1cInBhZ2luYXRpb24ubWF4UGFnaW5hdGlvbkl0ZW1TaXplXCJcbiAgICAgICAgW3JvdGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25DbGlja1BhZ2luYXRpb24ocGFnaW5hdGlvbi5wYWdlKVwiXG4gICAgICA+PC9uZ2ItcGFnaW5hdGlvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBpZD1cIm5vLXJlc3VsdHNcIiBjbGFzcz1cInAtNVwiICpuZ0lmPVwiaXRlbXM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgIHt7ICdsaXN0Lm5vUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG5cbiAgPGRpdiBpZD1cIm5vLWZpZWxkLWRlZmluaXRpb25zXCIgY2xhc3M9XCJwLTVcIiAqbmdJZj1cIml0ZW1zPy5sZW5ndGggPiAwICYmIGZpZWxkcz8ubGVuZ3RoID09PSAwXCI+XG4gICAge3sgJ2xpc3Qubm9GaWVsZERlZmluaXRpb25zJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2Ryb3Bkb3duQWN0aW9ucyBsZXQtbGlzdEl0ZW1GaWVsZD1cImxpc3RJdGVtRmllbGRcIiBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgKm5nSWY9XCJsaXN0SXRlbUZpZWxkPy52YWx1ZS5sZW5ndGggPiAwXCI+XG4gICAgPGFcbiAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tdG9nZ2xlIGQtYmxvY2tcIlxuICAgICAgaWQ9XCJkcm9wZG93bk1lbnVcIlxuICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiYWN0aW9uLWljb24gaWNvbiBtZGkgbWRpLWRvdHMtdmVydGljYWxcIj48L2k+XG4gICAgPC9hPlxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25NZW51XCI+XG4gICAgICA8YVxuICAgICAgICAoY2xpY2spPVwiYWN0aW9uLmNhbGxiYWNrKGl0ZW0sICRldmVudClcIlxuICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcC0yXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBsaXN0SXRlbUZpZWxkLnZhbHVlXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbi5pY29uQ2xhc3MgIT09IG51bGxcIj5cbiAgICAgICAgICA8aSBbbmdDbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCI+PC9pPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAge3sgYWN0aW9uPy5sYWJlbCB8fCAnLScgfX1cbiAgICAgIDwvYT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,245 +0,0 @@
1
- /*
2
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3
- *
4
- * Licensed under EUPL, Version 1.2 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" basis,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { Injectable } from '@angular/core';
17
- import { NavigationEnd, NavigationStart, ResolveEnd } from '@angular/router';
18
- import { BehaviorSubject, combineLatest, Observable, Subject, timer } from 'rxjs';
19
- import { filter, map, take } from 'rxjs/operators';
20
- import * as i0 from "@angular/core";
21
- import * as i1 from "@valtimo/config";
22
- import * as i2 from "@valtimo/document";
23
- import * as i3 from "@valtimo/security";
24
- import * as i4 from "ngx-logger";
25
- import * as i5 from "@angular/router";
26
- import * as i6 from "keycloak-angular";
27
- import * as i7 from "@angular/common/http";
28
- export class MenuService {
29
- constructor(configService, documentService, userProviderService, logger, menuIncludeService, router, keycloakService, http) {
30
- this.configService = configService;
31
- this.documentService = documentService;
32
- this.userProviderService = userProviderService;
33
- this.logger = logger;
34
- this.menuIncludeService = menuIncludeService;
35
- this.router = router;
36
- this.keycloakService = keycloakService;
37
- this.http = http;
38
- this._activeParentSequenceNumber$ = new BehaviorSubject('');
39
- this.includeFunctionObservables = {};
40
- this._menuItems$ = new BehaviorSubject(undefined);
41
- this.currentRoute$ = this.router.events.pipe(filter(event => event instanceof NavigationEnd ||
42
- event instanceof NavigationStart ||
43
- event instanceof ResolveEnd), map(event => event?.url), filter(url => !!url));
44
- this.dossierItemsAppended$ = new BehaviorSubject(false);
45
- this.objectsItemsAppended$ = new BehaviorSubject(false);
46
- const config = configService?.config;
47
- this.menuConfig = config?.menu;
48
- this.disableCaseCount = config?.featureToggles?.disableCaseCount;
49
- this.enableObjectManagement = config?.featureToggles?.enableObjectManagement;
50
- }
51
- get activeParentSequenceNumber$() {
52
- return this._activeParentSequenceNumber$.asObservable();
53
- }
54
- // Find out which menu item sequence number matches the current url the closest
55
- get closestSequence$() {
56
- return combineLatest([
57
- this.dossierItemsAppended$,
58
- this.objectsItemsAppended$,
59
- this.currentRoute$,
60
- this.menuItems$,
61
- ]).pipe(filter(([dossierItemsAppended, objectsItemsAppended]) => dossierItemsAppended || objectsItemsAppended), map(([dossierItemsAppended, objectsItemsAppended, currentRoute, menuItems]) => {
62
- let closestSequence = '0';
63
- let highestDifference = 0;
64
- // recursive function to check how closely each item matches to the current url
65
- const checkItemMatch = (stringUrl, sequence, parentSequence) => {
66
- // length of the current full url
67
- const currentRouteUrlLength = currentRoute.length;
68
- // length of the current full url with the item's url substracted
69
- const currentRouteSubstractLength = currentRoute.replace(stringUrl, '').length;
70
- // the amount of characters that could be substracted
71
- const difference = currentRouteUrlLength - currentRouteSubstractLength;
72
- // the larger the amount of characters that could be substracted, the more closely the menu item url matches the current url
73
- if (difference > highestDifference) {
74
- highestDifference = difference;
75
- closestSequence = sequence;
76
- if (parentSequence) {
77
- this._activeParentSequenceNumber$.next(parentSequence);
78
- }
79
- else {
80
- this._activeParentSequenceNumber$.next('');
81
- }
82
- }
83
- };
84
- // check how closely each menu item (and child menu item) matches the current url using a recursive function
85
- menuItems.forEach(item => {
86
- checkItemMatch(item.link?.join('') || '', `${item.sequence}`);
87
- if (item.children) {
88
- item.children.forEach(childItem => {
89
- if (Array.isArray(childItem.link)) {
90
- checkItemMatch(Array.isArray(item.link)
91
- ? [...item.link, ...childItem.link].join('')
92
- : childItem.link.join(''), `${item.sequence}${childItem.sequence}`, `${item.sequence}`);
93
- }
94
- });
95
- }
96
- });
97
- // returns the closest sequence number (each menu item has a sequence number)
98
- return closestSequence;
99
- }));
100
- }
101
- get menuItems$() {
102
- return this._menuItems$.asObservable();
103
- }
104
- init() {
105
- this.reload();
106
- this.logger.debug('Menu initialized');
107
- }
108
- reload() {
109
- const roles = this.keycloakService.getUserRoles(true);
110
- return this._menuItems$.next(this.loadMenuItems(roles));
111
- }
112
- loadMenuItems(userRoles) {
113
- let menuItems = [];
114
- this.menuConfig.menuItems.forEach((menuItem) => {
115
- if (menuItem.includeFunction !== undefined) {
116
- this.includeFunctionObservables[menuItem.title] =
117
- this.menuIncludeService.getIncludeFunction(menuItem.includeFunction);
118
- }
119
- menuItem.show = true;
120
- if (userRoles.find(userRole => menuItem.roles.includes(userRole))) {
121
- menuItems.push(menuItem);
122
- }
123
- });
124
- menuItems = this.sortMenuItems(menuItems);
125
- this.appendDossierSubMenuItems(menuItems).subscribe(value => (menuItems = this.applyMenuRoleSecurity(value)));
126
- if (this.enableObjectManagement) {
127
- this.appendObjectsSubMenuItems(menuItems).subscribe(value => (menuItems = this.applyMenuRoleSecurity(value)));
128
- }
129
- return menuItems;
130
- }
131
- sortMenuItems(menuItems) {
132
- return menuItems.sort((a, b) => a.sequence - b.sequence);
133
- }
134
- appendDossierSubMenuItems(menuItems) {
135
- return new Observable(subscriber => {
136
- this.logger.debug('appendDossierSubMenuItems');
137
- this.documentService.getAllDefinitions().subscribe(definitions => {
138
- combineLatest([
139
- ...definitions.content.map(definition => this.documentService.getCaseSettings(definition?.id?.name)),
140
- ])
141
- .pipe(take(1))
142
- .subscribe(allCaseSettings => {
143
- const openDocumentCountMap = !this.disableCaseCount && this.getOpenDocumentCountMap(definitions);
144
- const dossierMenuItems = definitions.content.map((definition, index) => {
145
- const caseSettings = allCaseSettings?.find(setting => setting.name === definition.id.name);
146
- return {
147
- link: ['/dossiers/' + definition.id.name],
148
- title: definition.schema.title,
149
- iconClass: 'icon mdi mdi-dot-circle',
150
- sequence: index,
151
- show: true,
152
- ...(!this.disableCaseCount &&
153
- caseSettings?.canHaveAssignee && {
154
- count$: openDocumentCountMap.get(definition.id.name),
155
- }),
156
- };
157
- });
158
- this.logger.debug('found dossierMenuItems', dossierMenuItems);
159
- const menuItemIndex = menuItems.findIndex(({ title }) => title === 'Dossiers');
160
- if (menuItemIndex > 0) {
161
- const dossierMenu = menuItems[menuItemIndex];
162
- this.logger.debug('updating dossierMenu', dossierMenu);
163
- dossierMenu.children = dossierMenuItems;
164
- menuItems[menuItemIndex] = dossierMenu;
165
- }
166
- subscriber.next(menuItems);
167
- this.dossierItemsAppended$.next(true);
168
- this.logger.debug('appendDossierSubMenuItems finished');
169
- });
170
- });
171
- });
172
- }
173
- appendObjectsSubMenuItems(menuItems) {
174
- return new Observable(subscriber => {
175
- this.logger.debug('appendObjectManagementSubMenuItems');
176
- this.getAllObjects().subscribe(objects => {
177
- const visibleObjects = objects.filter(object => object?.showInDataMenu !== false);
178
- if (visibleObjects?.length > 0) {
179
- const objectsMenuItems = visibleObjects.map((object, index) => ({
180
- link: ['/objects/' + object.id],
181
- title: object.title,
182
- iconClass: 'icon mdi mdi-dot-circle',
183
- sequence: index,
184
- show: true,
185
- }));
186
- this.logger.debug('found objectsMenuItems', objectsMenuItems);
187
- const menuItemIndex = menuItems.findIndex(({ title }) => title === 'Objects');
188
- if (menuItemIndex > 0) {
189
- const objectsMenu = menuItems[menuItemIndex];
190
- this.logger.debug('updating objectsMenu', objectsMenu);
191
- objectsMenu.children = objectsMenuItems;
192
- menuItems[menuItemIndex] = objectsMenu;
193
- }
194
- subscriber.next(menuItems);
195
- this.objectsItemsAppended$.next(true);
196
- this.logger.debug('appendObjectsSubMenuItems finished');
197
- }
198
- });
199
- });
200
- }
201
- getOpenDocumentCountMap(definitions) {
202
- const countMap = new Map();
203
- definitions.content.forEach(definition => countMap.set(definition.id.name, new Subject()));
204
- timer(0, 5000).subscribe(() => {
205
- this.documentService.getOpenDocumentCount().subscribe(openDocumentCountList => {
206
- openDocumentCountList.forEach(openDocumentCount => countMap
207
- .get(openDocumentCount.documentDefinitionName)
208
- .next(openDocumentCount.openDocumentCount));
209
- });
210
- });
211
- return countMap;
212
- }
213
- applyMenuRoleSecurity(menuItems) {
214
- this.userProviderService.getUserSubject().subscribe(user => {
215
- if (user.roles != null) {
216
- this.logger.debug('applyMenuRoleSecurity');
217
- const userRoles = user.roles;
218
- menuItems.forEach((menuItem) => {
219
- const access = this.determineRoleAccess(menuItem, userRoles);
220
- this.logger.debug('Menu: check role access', menuItem.roles, access);
221
- if (menuItem.show !== access) {
222
- this.logger.debug('Menu: Change access', menuItem, access);
223
- menuItem.show = access;
224
- }
225
- });
226
- }
227
- });
228
- return menuItems;
229
- }
230
- determineRoleAccess(menuItem, roles) {
231
- return !menuItem.roles || menuItem.roles.some(role => roles.includes(role));
232
- }
233
- getAllObjects() {
234
- return this.http.get(`${this.configService.config.valtimoApi.endpointUri}v1/object/management/configuration`);
235
- }
236
- }
237
- MenuService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuService, deps: [{ token: i1.ConfigService }, { token: i2.DocumentService }, { token: i3.UserProviderService }, { token: i4.NGXLogger }, { token: i1.MenuIncludeService }, { token: i5.Router }, { token: i6.KeycloakService }, { token: i7.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
238
- MenuService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuService, providedIn: 'root' });
239
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuService, decorators: [{
240
- type: Injectable,
241
- args: [{
242
- providedIn: 'root',
243
- }]
244
- }], ctorParameters: function () { return [{ type: i1.ConfigService }, { type: i2.DocumentService }, { type: i3.UserProviderService }, { type: i4.NGXLogger }, { type: i1.MenuIncludeService }, { type: i5.Router }, { type: i6.KeycloakService }, { type: i7.HttpClient }]; } });
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9tZW51L21lbnUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJekMsT0FBTyxFQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFaEYsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQU9qRCxNQUFNLE9BQU8sV0FBVztJQWN0QixZQUNtQixhQUE0QixFQUM1QixlQUFnQyxFQUNoQyxtQkFBd0MsRUFDeEMsTUFBaUIsRUFDakIsa0JBQXNDLEVBQ3RDLE1BQWMsRUFDZCxlQUFnQyxFQUN6QyxJQUFnQjtRQVBQLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ3pDLFNBQUksR0FBSixJQUFJLENBQVk7UUFyQlQsaUNBQTRCLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDekUsK0JBQTBCLEdBQXlDLEVBQUUsQ0FBQztRQUVyRSxnQkFBVyxHQUFHLElB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Q3hGLENBQUM7SUFDSixDQUFDOzt3R0F4UlUsV0FBVzs0R0FBWCxXQUFXLGNBRlYsTUFBTTsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbmZpZ1NlcnZpY2UsIE1lbnVDb25maWcsIE1lbnVJbmNsdWRlU2VydmljZSwgTWVudUl0ZW19IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge05HWExvZ2dlcn0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQge1VzZXJQcm92aWRlclNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3NlY3VyaXR5JztcbmltcG9ydCB7TmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvblN0YXJ0LCBSZXNvbHZlRW5kLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtEb2N1bWVudERlZmluaXRpb25zLCBEb2N1bWVudFNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7ZmlsdGVyLCBtYXAsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7S2V5Y2xvYWtTZXJ2aWNlfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTWVudVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVQYXJlbnRTZXF1ZW5jZU51bWJlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgaW5jbHVkZUZ1bmN0aW9uT2JzZXJ2YWJsZXM6IHtba2V5OiBzdHJpbmddOiBPYnNlcnZhYmxlPGJvb2xlYW4+fSA9IHt9O1xuXG4gIHByaXZhdGUgX21lbnVJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lbnVJdGVtW10+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgbWVudUNvbmZpZzogTWVudUNvbmZpZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGRpc2FibGVDYXNlQ291bnQhOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuYWJsZU9iamVjdE1hbmFnZW1lbnQhOiBib29sZWFuO1xuXG4gIGdldCBhY3RpdmVQYXJlbnRTZXF1ZW5jZU51bWJlciQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlUGFyZW50U2VxdWVuY2VOdW1iZXIkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyUHJvdmlkZXJTZXJ2aWNlOiBVc2VyUHJvdmlkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZW51SW5jbHVkZVNlcnZpY2U6IE1lbnVJbmNsdWRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkga2V5Y2xvYWtTZXJ2aWNlOiBLZXljbG9ha1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XG4gICkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGNvbmZpZ1NlcnZpY2U/LmNvbmZpZztcbiAgICB0aGlzLm1lbnVDb25maWcgPSBjb25maWc/Lm1lbnU7XG4gICAgdGhpcy5kaXNhYmxlQ2FzZUNvdW50ID0gY29uZmlnPy5mZWF0dXJlVG9nZ2xlcz8uZGlzYWJsZUNhc2VDb3VudDtcbiAgICB0aGlzLmVuYWJsZU9iamVjdE1hbmFnZW1lbnQgPSBjb25maWc/LmZlYXR1cmVUb2dnbGVzPy5lbmFibGVPYmplY3RNYW5hZ2VtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50Um91dGUkID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXG4gICAgZmlsdGVyKFxuICAgICAgZXZlbnQgPT5cbiAgICAgICAgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kIHx8XG4gICAgICAgIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0IHx8XG4gICAgICAgIGV2ZW50IGluc3RhbmNlb2YgUmVzb2x2ZUVuZFxuICAgICksXG4gICAgbWFwKGV2ZW50ID0+IChldmVudCBhcyBOYXZpZ2F0aW9uRW5kKT8udXJsKSxcbiAgICBmaWx0ZXIodXJsID0+ICEhdXJsKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZG9zc2llckl0ZW1zQXBwZW5kZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0c0l0ZW1zQXBwZW5kZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgLy8gRmluZCBvdXQgd2hpY2ggbWVudSBpdGVtIHNlcXVlbmNlIG51bWJlciBtYXRjaGVzIHRoZSBjdXJyZW50IHVybCB0aGUgY2xvc2VzdFxuICBwdWJsaWMgZ2V0IGNsb3Nlc3RTZXF1ZW5jZSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmRvc3NpZXJJdGVtc0FwcGVuZGVkJCxcbiAgICAgIHRoaXMub2JqZWN0c0l0ZW1zQXBwZW5kZWQkLFxuICAgICAgdGhpcy5jdXJyZW50Um91dGUkLFxuICAgICAgdGhpcy5tZW51SXRlbXMkLFxuICAgIF0pLnBpcGUoXG4gICAgICBmaWx0ZXIoXG4gICAgICAgIChbZG9zc2llckl0ZW1zQXBwZW5kZWQsIG9iamVjdHNJdGVtc0FwcGVuZGVkXSkgPT5cbiAgICAgICAgICBkb3NzaWVySXRlbXNBcHBlbmRlZCB8fCBvYmplY3RzSXRlbXNBcHBlbmRlZFxuICAgICAgKSxcbiAgICAgIG1hcCgoW2Rvc3NpZXJJdGVtc0FwcGVuZGVkLCBvYmplY3RzSXRlbXNBcHBlbmRlZCwgY3VycmVudFJvdXRlLCBtZW51SXRlbXNdKSA9PiB7XG4gICAgICAgIGxldCBjbG9zZXN0U2VxdWVuY2UgPSAnMCc7XG4gICAgICAgIGxldCBoaWdoZXN0RGlmZmVyZW5jZSA9IDA7XG5cbiAgICAgICAgLy8gcmVjdXJzaXZlIGZ1bmN0aW9uIHRvIGNoZWNrIGhvdyBjbG9zZWx5IGVhY2ggaXRlbSBtYXRjaGVzIHRvIHRoZSBjdXJyZW50IHVybFxuICAgICAgICBjb25zdCBjaGVja0l0ZW1NYXRjaCA9IChcbiAgICAgICAgICBzdHJpbmdVcmw6IHN0cmluZyxcbiAgICAgICAgICBzZXF1ZW5jZTogc3RyaW5nLFxuICAgICAgICAgIHBhcmVudFNlcXVlbmNlPzogc3RyaW5nXG4gICAgICAgICk6IHZvaWQgPT4ge1xuICAgICAgICAgIC8vIGxlbmd0aCBvZiB0aGUgY3VycmVudCBmdWxsIHVybFxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRSb3V0ZVVybExlbmd0aCA9IGN1cnJlbnRSb3V0ZS5sZW5ndGg7XG4gICAgICAgICAgLy8gbGVuZ3RoIG9mIHRoZSBjdXJyZW50IGZ1bGwgdXJsIHdpdGggdGhlIGl0ZW0ncyB1cmwgc3Vic3RyYWN0ZWRcbiAgICAgICAgICBjb25zdCBjdXJyZW50Um91dGVTdWJzdHJhY3RMZW5ndGggPSBjdXJyZW50Um91dGUucmVwbGFjZShzdHJpbmdVcmwsICcnKS5sZW5ndGg7XG4gICAgICAgICAgLy8gdGhlIGFtb3VudCBvZiBjaGFyYWN0ZXJzIHRoYXQgY291bGQgYmUgc3Vic3RyYWN0ZWRcbiAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gY3VycmVudFJvdXRlVXJsTGVuZ3RoIC0gY3VycmVudFJvdXRlU3Vic3RyYWN0TGVuZ3RoO1xuXG4gICAgICAgICAgLy8gdGhlIGxhcmdlciB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnMgdGhhdCBjb3VsZCBiZSBzdWJzdHJhY3RlZCwgdGhlIG1vcmUgY2xvc2VseSB0aGUgbWVudSBpdGVtIHVybCBtYXRjaGVzIHRoZSBjdXJyZW50IHVybFxuICAgICAgICAgIGlmIChkaWZmZXJlbmNlID4gaGlnaGVzdERpZmZlcmVuY2UpIHtcbiAgICAgICAgICAgIGhpZ2hlc3REaWZmZXJlbmNlID0gZGlmZmVyZW5jZTtcbiAgICAgICAgICAgIGNsb3Nlc3RTZXF1ZW5jZSA9IHNlcXVlbmNlO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50U2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlUGFyZW50U2VxdWVuY2VOdW1iZXIkLm5leHQocGFyZW50U2VxdWVuY2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlUGFyZW50U2VxdWVuY2VOdW1iZXIkLm5leHQoJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBjaGVjayBob3cgY2xvc2VseSBlYWNoIG1lbnUgaXRlbSAoYW5kIGNoaWxkIG1lbnUgaXRlbSkgbWF0Y2hlcyB0aGUgY3VycmVudCB1cmwgdXNpbmcgYSByZWN1cnNpdmUgZnVuY3Rpb25cbiAgICAgICAgbWVudUl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgY2hlY2tJdGVtTWF0Y2goaXRlbS5saW5rPy5qb2luKCcnKSB8fCAnJywgYCR7aXRlbS5zZXF1ZW5jZX1gKTtcblxuICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goY2hpbGRJdGVtID0+IHtcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRJdGVtLmxpbmspKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tJdGVtTWF0Y2goXG4gICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGl0ZW0ubGluaylcbiAgICAgICAgICAgICAgICAgICAgPyBbLi4uaXRlbS5saW5rLCAuLi5jaGlsZEl0ZW0ubGlua10uam9pbignJylcbiAgICAgICAgICAgICAgICAgICAgOiBjaGlsZEl0ZW0ubGluay5qb2luKCcnKSxcbiAgICAgICAgICAgICAgICAgIGAke2l0ZW0uc2VxdWVuY2V9JHtjaGlsZEl0ZW0uc2VxdWVuY2V9YCxcbiAgICAgICAgICAgICAgICAgIGAke2l0ZW0uc2VxdWVuY2V9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gcmV0dXJucyB0aGUgY2xvc2VzdCBzZXF1ZW5jZSBudW1iZXIgKGVhY2ggbWVudSBpdGVtIGhhcyBhIHNlcXVlbmNlIG51bWJlcilcblxuICAgICAgICByZXR1cm4gY2xvc2VzdFNlcXVlbmNlO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBtZW51SXRlbXMkKCk6IE9ic2VydmFibGU8TWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiB0aGlzLl9tZW51SXRlbXMkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgaW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdNZW51IGluaXRpYWxpemVkJyk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkKCk6IHZvaWQge1xuICAgIGNvbnN0IHJvbGVzID0gdGhpcy5rZXljbG9ha1NlcnZpY2UuZ2V0VXNlclJvbGVzKHRydWUpO1xuICAgIHJldHVybiB0aGlzLl9tZW51SXRlbXMkLm5leHQodGhpcy5sb2FkTWVudUl0ZW1zKHJvbGVzKSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRNZW51SXRlbXModXNlclJvbGVzOiBBcnJheTxzdHJpbmc+KTogTWVudUl0ZW1bXSB7XG4gICAgbGV0IG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuICAgIHRoaXMubWVudUNvbmZpZy5tZW51SXRlbXMuZm9yRWFjaCgobWVudUl0ZW06IE1lbnVJdGVtKSA9PiB7XG4gICAgICBpZiAobWVudUl0ZW0uaW5jbHVkZUZ1bmN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5pbmNsdWRlRnVuY3Rpb25PYnNlcnZhYmxlc1ttZW51SXRlbS50aXRsZV0gPVxuICAgICAgICAgIHRoaXMubWVudUluY2x1ZGVTZXJ2aWNlLmdldEluY2x1ZGVGdW5jdGlvbihtZW51SXRlbS5pbmNsdWRlRnVuY3Rpb24pO1xuICAgICAgfVxuXG4gICAgICBtZW51SXRlbS5zaG93ID0gdHJ1ZTtcblxuICAgICAgaWYgKHVzZXJSb2xlcy5maW5kKHVzZXJSb2xlID0+IG1lbnVJdGVtLnJvbGVzLmluY2x1ZGVzKHVzZXJSb2xlKSkpIHtcbiAgICAgICAgbWVudUl0ZW1zLnB1c2gobWVudUl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG1lbnVJdGVtcyA9IHRoaXMuc29ydE1lbnVJdGVtcyhtZW51SXRlbXMpO1xuICAgIHRoaXMuYXBwZW5kRG9zc2llclN1Yk1lbnVJdGVtcyhtZW51SXRlbXMpLnN1YnNjcmliZShcbiAgICAgIHZhbHVlID0+IChtZW51SXRlbXMgPSB0aGlzLmFwcGx5TWVudVJvbGVTZWN1cml0eSh2YWx1ZSkpXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmVuYWJsZU9iamVjdE1hbmFnZW1lbnQpIHtcbiAgICAgIHRoaXMuYXBwZW5kT2JqZWN0c1N1Yk1lbnVJdGVtcyhtZW51SXRlbXMpLnN1YnNjcmliZShcbiAgICAgICAgdmFsdWUgPT4gKG1lbnVJdGVtcyA9IHRoaXMuYXBwbHlNZW51Um9sZVNlY3VyaXR5KHZhbHVlKSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBtZW51SXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHNvcnRNZW51SXRlbXMobWVudUl0ZW1zOiBNZW51SXRlbVtdKTogTWVudUl0ZW1bXSB7XG4gICAgcmV0dXJuIG1lbnVJdGVtcy5zb3J0KChhLCBiKSA9PiBhLnNlcXVlbmNlIC0gYi5zZXF1ZW5jZSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZERvc3NpZXJTdWJNZW51SXRlbXMobWVudUl0ZW1zOiBNZW51SXRlbVtdKTogT2JzZXJ2YWJsZTxNZW51SXRlbVtdPiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4ge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2FwcGVuZERvc3NpZXJTdWJNZW51SXRlbXMnKTtcbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldEFsbERlZmluaXRpb25zKCkuc3Vic2NyaWJlKGRlZmluaXRpb25zID0+IHtcbiAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgLi4uZGVmaW5pdGlvbnMuY29udGVudC5tYXAoZGVmaW5pdGlvbiA9PlxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0Q2FzZVNldHRpbmdzKGRlZmluaXRpb24/LmlkPy5uYW1lKVxuICAgICAgICAgICksXG4gICAgICAgIF0pXG4gICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKGFsbENhc2VTZXR0aW5ncyA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcGVuRG9jdW1lbnRDb3VudE1hcCA9XG4gICAgICAgICAgICAgICF0aGlzLmRpc2FibGVDYXNlQ291bnQgJiYgdGhpcy5nZXRPcGVuRG9jdW1lbnRDb3VudE1hcChkZWZpbml0aW9ucyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJNZW51SXRlbXM6IE1lbnVJdGVtW10gPSBkZWZpbml0aW9ucy5jb250ZW50Lm1hcCgoZGVmaW5pdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY2FzZVNldHRpbmdzID0gYWxsQ2FzZVNldHRpbmdzPy5maW5kKFxuICAgICAgICAgICAgICAgIHNldHRpbmcgPT4gc2V0dGluZy5uYW1lID09PSBkZWZpbml0aW9uLmlkLm5hbWVcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGxpbms6IFsnL2Rvc3NpZXJzLycgKyBkZWZpbml0aW9uLmlkLm5hbWVdLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkZWZpbml0aW9uLnNjaGVtYS50aXRsZSxcbiAgICAgICAgICAgICAgICBpY29uQ2xhc3M6ICdpY29uIG1kaSBtZGktZG90LWNpcmNsZScsXG4gICAgICAgICAgICAgICAgc2VxdWVuY2U6IGluZGV4LFxuICAgICAgICAgICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgICAgICAgICAgLi4uKCF0aGlzLmRpc2FibGVDYXNlQ291bnQgJiZcbiAgICAgICAgICAgICAgICAgIGNhc2VTZXR0aW5ncz8uY2FuSGF2ZUFzc2lnbmVlICYmIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQkOiBvcGVuRG9jdW1lbnRDb3VudE1hcC5nZXQoZGVmaW5pdGlvbi5pZC5uYW1lKSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9IGFzIE1lbnVJdGVtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnZm91bmQgZG9zc2llck1lbnVJdGVtcycsIGRvc3NpZXJNZW51SXRlbXMpO1xuICAgICAgICAgICAgY29uc3QgbWVudUl0ZW1JbmRleCA9IG1lbnVJdGVtcy5maW5kSW5kZXgoKHt0aXRsZX0pID0+IHRpdGxlID09PSAnRG9zc2llcnMnKTtcbiAgICAgICAgICAgIGlmIChtZW51SXRlbUluZGV4ID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyTWVudSA9IG1lbnVJdGVtc1ttZW51SXRlbUluZGV4XTtcbiAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3VwZGF0aW5nIGRvc3NpZXJNZW51JywgZG9zc2llck1lbnUpO1xuICAgICAgICAgICAgICBkb3NzaWVyTWVudS5jaGlsZHJlbiA9IGRvc3NpZXJNZW51SXRlbXM7XG4gICAgICAgICAgICAgIG1lbnVJdGVtc1ttZW51SXRlbUluZGV4XSA9IGRvc3NpZXJNZW51O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG1lbnVJdGVtcyk7XG4gICAgICAgICAgICB0aGlzLmRvc3NpZXJJdGVtc0FwcGVuZGVkJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2FwcGVuZERvc3NpZXJTdWJNZW51SXRlbXMgZmluaXNoZWQnKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmRPYmplY3RzU3ViTWVudUl0ZW1zKG1lbnVJdGVtczogTWVudUl0ZW1bXSk6IE9ic2VydmFibGU8TWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdhcHBlbmRPYmplY3RNYW5hZ2VtZW50U3ViTWVudUl0ZW1zJyk7XG4gICAgICB0aGlzLmdldEFsbE9iamVjdHMoKS5zdWJzY3JpYmUob2JqZWN0cyA9PiB7XG4gICAgICAgIGNvbnN0IHZpc2libGVPYmplY3RzID0gb2JqZWN0cy5maWx0ZXIob2JqZWN0ID0+IG9iamVjdD8uc2hvd0luRGF0YU1lbnUgIT09IGZhbHNlKTtcbiAgICAgICAgaWYgKHZpc2libGVPYmplY3RzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3Qgb2JqZWN0c01lbnVJdGVtczogTWVudUl0ZW1bXSA9IHZpc2libGVPYmplY3RzLm1hcChcbiAgICAgICAgICAgIChvYmplY3QsIGluZGV4KSA9PlxuICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgIGxpbms6IFsnL29iamVjdHMvJyArIG9iamVjdC5pZF0sXG4gICAgICAgICAgICAgICAgdGl0bGU6IG9iamVjdC50aXRsZSxcbiAgICAgICAgICAgICAgICBpY29uQ2xhc3M6ICdpY29uIG1kaSBtZGktZG90LWNpcmNsZScsXG4gICAgICAgICAgICAgICAgc2VxdWVuY2U6IGluZGV4LFxuICAgICAgICAgICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgICAgICAgIH0gYXMgTWVudUl0ZW0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnZm91bmQgb2JqZWN0c01lbnVJdGVtcycsIG9iamVjdHNNZW51SXRlbXMpO1xuICAgICAgICAgIGNvbnN0IG1lbnVJdGVtSW5kZXggPSBtZW51SXRlbXMuZmluZEluZGV4KCh7dGl0bGV9KSA9PiB0aXRsZSA9PT0gJ09iamVjdHMnKTtcbiAgICAgICAgICBpZiAobWVudUl0ZW1JbmRleCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG9iamVjdHNNZW51ID0gbWVudUl0ZW1zW21lbnVJdGVtSW5kZXhdO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3VwZGF0aW5nIG9iamVjdHNNZW51Jywgb2JqZWN0c01lbnUpO1xuICAgICAgICAgICAgb2JqZWN0c01lbnUuY2hpbGRyZW4gPSBvYmplY3RzTWVudUl0ZW1zO1xuICAgICAgICAgICAgbWVudUl0ZW1zW21lbnVJdGVtSW5kZXhdID0gb2JqZWN0c01lbnU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN1YnNjcmliZXIubmV4dChtZW51SXRlbXMpO1xuICAgICAgICAgIHRoaXMub2JqZWN0c0l0ZW1zQXBwZW5kZWQkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2FwcGVuZE9iamVjdHNTdWJNZW51SXRlbXMgZmluaXNoZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE9wZW5Eb2N1bWVudENvdW50TWFwKGRlZmluaXRpb25zOiBEb2N1bWVudERlZmluaXRpb25zKTogTWFwPHN0cmluZywgU3ViamVjdDxudW1iZXI+PiB7XG4gICAgY29uc3QgY291bnRNYXAgPSBuZXcgTWFwPHN0cmluZywgU3ViamVjdDxudW1iZXI+PigpO1xuICAgIGRlZmluaXRpb25zLmNvbnRlbnQuZm9yRWFjaChkZWZpbml0aW9uID0+XG4gICAgICBjb3VudE1hcC5zZXQoZGVmaW5pdGlvbi5pZC5uYW1lLCBuZXcgU3ViamVjdDxudW1iZXI+KCkpXG4gICAgKTtcblxuICAgIHRpbWVyKDAsIDUwMDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXRPcGVuRG9jdW1lbnRDb3VudCgpLnN1YnNjcmliZShvcGVuRG9jdW1lbnRDb3VudExpc3QgPT4ge1xuICAgICAgICBvcGVuRG9jdW1lbnRDb3VudExpc3QuZm9yRWFjaChvcGVuRG9jdW1lbnRDb3VudCA9PlxuICAgICAgICAgIGNvdW50TWFwXG4gICAgICAgICAgICAuZ2V0KG9wZW5Eb2N1bWVudENvdW50LmRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgICAgICAgICAubmV4dChvcGVuRG9jdW1lbnRDb3VudC5vcGVuRG9jdW1lbnRDb3VudClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBjb3VudE1hcDtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlNZW51Um9sZVNlY3VyaXR5KG1lbnVJdGVtczogTWVudUl0ZW1bXSk6IE1lbnVJdGVtW10ge1xuICAgIHRoaXMudXNlclByb3ZpZGVyU2VydmljZS5nZXRVc2VyU3ViamVjdCgpLnN1YnNjcmliZSh1c2VyID0+IHtcbiAgICAgIGlmICh1c2VyLnJvbGVzICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2FwcGx5TWVudVJvbGVTZWN1cml0eScpO1xuICAgICAgICBjb25zdCB1c2VyUm9sZXMgPSB1c2VyLnJvbGVzO1xuICAgICAgICBtZW51SXRlbXMuZm9yRWFjaCgobWVudUl0ZW06IE1lbnVJdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWNjZXNzID0gdGhpcy5kZXRlcm1pbmVSb2xlQWNjZXNzKG1lbnVJdGVtLCB1c2VyUm9sZXMpO1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdNZW51OiBjaGVjayByb2xlIGFjY2VzcycsIG1lbnVJdGVtLnJvbGVzLCBhY2Nlc3MpO1xuICAgICAgICAgIGlmIChtZW51SXRlbS5zaG93ICE9PSBhY2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdNZW51OiBDaGFuZ2UgYWNjZXNzJywgbWVudUl0ZW0sIGFjY2Vzcyk7XG4gICAgICAgICAgICBtZW51SXRlbS5zaG93ID0gYWNjZXNzO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG1lbnVJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lUm9sZUFjY2VzcyhtZW51SXRlbTogTWVudUl0ZW0sIHJvbGVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhbWVudUl0ZW0ucm9sZXMgfHwgbWVudUl0ZW0ucm9sZXMuc29tZShyb2xlID0+IHJvbGVzLmluY2x1ZGVzKHJvbGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWxsT2JqZWN0cygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgYCR7dGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy52YWx0aW1vQXBpLmVuZHBvaW50VXJpfXYxL29iamVjdC9tYW5hZ2VtZW50L2NvbmZpZ3VyYXRpb25gXG4gICAgKTtcbiAgfVxufVxuIl19