@valtimo/components 10.8.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (516) hide show
  1. package/assets/css/carbon-beagle-compatibility.scss +1 -1
  2. package/assets/css/carbon.scss +38 -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/{esm2020 → esm2022}/lib/components/form-io/form-io.component.mjs +4 -4
  64. package/{esm2020 → esm2022}/lib/components/form-io/form-io.module.mjs +29 -29
  65. package/{esm2020 → esm2022}/lib/components/form-io/services/form-io-dom.service.mjs +4 -4
  66. package/{esm2020 → esm2022}/lib/components/form-io/services/form-io-state.service.mjs +4 -4
  67. package/esm2022/lib/components/input/input.component.mjs +168 -0
  68. package/esm2022/lib/components/input/input.module.mjs +59 -0
  69. package/esm2022/lib/components/input-label/input-label.component.mjs +81 -0
  70. package/esm2022/lib/components/input-label/input-label.module.mjs +55 -0
  71. package/esm2022/lib/components/left-sidebar/left-sidebar.component.mjs +148 -0
  72. package/{esm2020 → esm2022}/lib/components/left-sidebar/left-sidebar.module.mjs +18 -18
  73. package/{esm2020 → esm2022}/lib/components/list/ListFilterPipe.directive.mjs +4 -4
  74. package/esm2022/lib/components/list/list.component.mjs +202 -0
  75. package/{esm2020 → esm2022}/lib/components/list/list.module.mjs +5 -5
  76. package/{esm2020 → esm2022}/lib/components/menu/menu-item-text.component.mjs +5 -5
  77. package/{esm2020 → esm2022}/lib/components/menu/menu-routing.module.mjs +5 -5
  78. package/{esm2020 → esm2022}/lib/components/menu/menu.module.mjs +17 -17
  79. package/esm2022/lib/components/menu/menu.service.mjs +258 -0
  80. package/{esm2020 → esm2022}/lib/components/modal/modal.component.mjs +4 -4
  81. package/{esm2020 → esm2022}/lib/components/modal/modal.module.mjs +5 -5
  82. package/esm2022/lib/components/multi-input/carbon-multi-input.component.mjs +217 -0
  83. package/esm2022/lib/components/multi-input/carbon-multi-input.module.mjs +64 -0
  84. package/esm2022/lib/components/multi-input-form/multi-input-form.component.mjs +190 -0
  85. package/esm2022/lib/components/multi-input-form/multi-input-form.module.mjs +55 -0
  86. package/{esm2020 → esm2022}/lib/components/multiselect-dropdown/multiselect-dropdown.component.mjs +4 -4
  87. package/{esm2020 → esm2022}/lib/components/multiselect-dropdown/multiselect-dropdown.module.mjs +5 -5
  88. package/esm2022/lib/components/page/page-container/page-container.component.mjs +29 -0
  89. package/esm2022/lib/components/page/page-content/page-content.component.mjs +29 -0
  90. package/esm2022/lib/components/page/page-header/page-header.component.mjs +29 -0
  91. package/esm2022/lib/components/page/page-header-actions/page-header-actions.component.mjs +29 -0
  92. package/esm2022/lib/components/page/page-header-introduction/page-header-introduction.component.mjs +29 -0
  93. package/esm2022/lib/components/page/page.module.mjs +60 -0
  94. package/{esm2020 → esm2022}/lib/components/page-header/page-header.component.mjs +5 -5
  95. package/{esm2020 → esm2022}/lib/components/page-header/page-header.module.mjs +5 -5
  96. package/esm2022/lib/components/page-title/page-title.component.mjs +105 -0
  97. package/{esm2020 → esm2022}/lib/components/page-title/page-title.module.mjs +5 -5
  98. package/esm2022/lib/components/page-title/page-title.service.mjs +107 -0
  99. package/esm2022/lib/components/paragraph/paragraph.component.mjs +48 -0
  100. package/esm2022/lib/components/paragraph/paragraph.module.mjs +37 -0
  101. package/{esm2020 → esm2022}/lib/components/progress-bar/progress-bar.component.mjs +4 -4
  102. package/{esm2020 → esm2022}/lib/components/progress-bar/progress-bar.module.mjs +5 -5
  103. package/esm2022/lib/components/prompt/prompt.component.mjs +74 -0
  104. package/esm2022/lib/components/prompt/prompt.module.mjs +39 -0
  105. package/esm2022/lib/components/radio/radio.component.mjs +116 -0
  106. package/esm2022/lib/components/radio/radio.module.mjs +55 -0
  107. package/esm2022/lib/components/right-sidebar/right-sidebar.component.mjs +203 -0
  108. package/esm2022/lib/components/right-sidebar/right-sidebar.module.mjs +95 -0
  109. package/esm2022/lib/components/search-fields/search-fields.component.mjs +221 -0
  110. package/esm2022/lib/components/search-fields/search-fields.module.mjs +75 -0
  111. package/{esm2020 → esm2022}/lib/components/searchable-dropdown/searchable-dropdown.component.mjs +4 -4
  112. package/{esm2020 → esm2022}/lib/components/searchable-dropdown/searchable-dropdown.module.mjs +5 -5
  113. package/{esm2020 → esm2022}/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.mjs +4 -4
  114. package/{esm2020 → esm2022}/lib/components/searchable-dropdown-select/searchable-dropdown-select.module.mjs +5 -5
  115. package/esm2022/lib/components/select/select.component.mjs +194 -0
  116. package/esm2022/lib/components/select/select.module.mjs +37 -0
  117. package/{esm2020 → esm2022}/lib/components/spinner/spinner.component.mjs +4 -4
  118. package/{esm2020 → esm2022}/lib/components/spinner/spinner.module.mjs +5 -5
  119. package/esm2022/lib/components/stepper/stepper-container/stepper-container.component.mjs +91 -0
  120. package/esm2022/lib/components/stepper/stepper-content/stepper-content.component.mjs +52 -0
  121. package/esm2022/lib/components/stepper/stepper-footer/stepper-footer.component.mjs +43 -0
  122. package/esm2022/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.mjs +71 -0
  123. package/esm2022/lib/components/stepper/stepper-header/stepper-header.component.mjs +37 -0
  124. package/esm2022/lib/components/stepper/stepper-step/stepper-step.component.mjs +39 -0
  125. package/esm2022/lib/components/stepper/stepper.module.mjs +67 -0
  126. package/esm2022/lib/components/table/table.component.mjs +172 -0
  127. package/esm2022/lib/components/table/table.module.mjs +58 -0
  128. package/esm2022/lib/components/timeline/timeline.component.mjs +42 -0
  129. package/{esm2020 → esm2022}/lib/components/timeline/timeline.module.mjs +5 -5
  130. package/esm2022/lib/components/title/title.component.mjs +57 -0
  131. package/esm2022/lib/components/title/title.module.mjs +36 -0
  132. package/esm2022/lib/components/tooltip-icon/tooltip-icon.component.mjs +39 -0
  133. package/esm2022/lib/components/tooltip-icon/tooltip-icon.module.mjs +39 -0
  134. package/{esm2020 → esm2022}/lib/components/topbar/topbar.component.mjs +5 -5
  135. package/{esm2020 → esm2022}/lib/components/topbar/topbar.module.mjs +6 -6
  136. package/{esm2020 → esm2022}/lib/components/uploader/uploader-drag-drop.directive.mjs +4 -4
  137. package/{esm2020 → esm2022}/lib/components/uploader/uploader.component.mjs +4 -4
  138. package/{esm2020 → esm2022}/lib/components/uploader/uploader.module.mjs +5 -5
  139. package/esm2022/lib/components/v-card/card.component.mjs +80 -0
  140. package/esm2022/lib/components/v-card/card.module.mjs +38 -0
  141. package/esm2022/lib/components/v-modal/modal.component.mjs +71 -0
  142. package/esm2022/lib/components/v-modal/modal.module.mjs +37 -0
  143. package/{esm2020 → esm2022}/lib/components/version/version.service.mjs +4 -4
  144. package/{esm2020 → esm2022}/lib/components/view-content/view-content.service.mjs +4 -4
  145. package/{esm2020 → esm2022}/lib/components/webcam/webcam.component.mjs +4 -4
  146. package/{esm2020 → esm2022}/lib/components/webcam/webcam.module.mjs +5 -5
  147. package/{esm2020 → esm2022}/lib/components/widget/widget.component.mjs +4 -4
  148. package/{esm2020 → esm2022}/lib/components/widget/widget.module.mjs +5 -5
  149. package/esm2022/lib/directives/command-click/command-click-directive.module.mjs +33 -0
  150. package/esm2022/lib/directives/command-click/command-click.directive.mjs +52 -0
  151. package/esm2022/lib/directives/digit-only/digit-only.directive.mjs +283 -0
  152. package/esm2022/lib/directives/render-in-page-header/render-in-page-header-directive.module.mjs +33 -0
  153. package/esm2022/lib/directives/render-in-page-header/render-in-page-header.directive.mjs +43 -0
  154. package/esm2022/lib/directives/tooltip/tooltip.component.mjs +42 -0
  155. package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +74 -0
  156. package/esm2022/lib/directives/tooltip/tooltip.module.mjs +35 -0
  157. package/esm2022/lib/directives/valtimo-cds-modal/valtimo-cds-modal-directive.module.mjs +33 -0
  158. package/esm2022/lib/directives/valtimo-cds-modal/valtimo-cds-modal.directive.mjs +68 -0
  159. package/esm2022/lib/models/button.model.mjs +17 -0
  160. package/esm2022/lib/models/carbon-list.model.mjs +21 -0
  161. package/esm2022/lib/models/carbon-pagination.model.mjs +21 -0
  162. package/esm2022/lib/models/editor.model.mjs +17 -0
  163. package/{esm2020/lib/models/list.model.mjs → esm2022/lib/models/form.model.mjs} +1 -1
  164. package/esm2022/lib/models/index.mjs +39 -0
  165. package/esm2022/lib/models/input.model.mjs +17 -0
  166. package/esm2022/lib/models/modal.model.mjs +17 -0
  167. package/{esm2020 → esm2022}/lib/models/multi-input.model.mjs +1 -1
  168. package/esm2022/lib/models/pagination.model.mjs +24 -0
  169. package/esm2022/lib/models/radio.model.mjs +17 -0
  170. package/esm2022/lib/models/select.model.mjs +17 -0
  171. package/esm2022/lib/models/sort.model.mjs +17 -0
  172. package/esm2022/lib/models/stepper.model.mjs +17 -0
  173. package/esm2022/lib/models/table.model.mjs +17 -0
  174. package/esm2022/lib/models/timeline.model.mjs +52 -0
  175. package/esm2022/lib/models/title.model.mjs +17 -0
  176. package/{esm2020 → esm2022}/lib/pipes/case-count.pipe.mjs +4 -4
  177. package/{esm2020 → esm2022}/lib/pipes/components-pipes.module.mjs +5 -5
  178. package/{esm2020 → esm2022}/lib/pipes/menu-item-translation.pipe.mjs +4 -4
  179. package/esm2022/lib/services/index.mjs +7 -0
  180. package/esm2022/lib/services/modal.service.mjs +128 -0
  181. package/esm2022/lib/services/prompt.service.mjs +205 -0
  182. package/esm2022/lib/services/shell.service.mjs +213 -0
  183. package/esm2022/lib/services/stepper.service.mjs +108 -0
  184. package/esm2022/lib/services/user-interface.service.mjs +47 -0
  185. package/{esm2020 → esm2022}/lib/services/valtimo-modal.service.mjs +4 -4
  186. package/esm2022/public_api.mjs +194 -0
  187. package/fesm2022/valtimo-components.mjs +12375 -0
  188. package/fesm2022/valtimo-components.mjs.map +1 -0
  189. package/lib/components/alert/alert.component.d.ts +1 -1
  190. package/lib/components/bpmn-js-diagram/bpmn-js-diagram.component.d.ts +1 -1
  191. package/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.d.ts +1 -1
  192. package/lib/components/breadcrumb-navigation/breadcrumb.service.d.ts.map +1 -1
  193. package/lib/components/button/button.component.d.ts +30 -0
  194. package/lib/components/button/button.component.d.ts.map +1 -0
  195. package/lib/components/button/button.module.d.ts +13 -0
  196. package/lib/components/button/button.module.d.ts.map +1 -0
  197. package/lib/components/camunda/form/camunda-form.components.d.ts +1 -1
  198. package/lib/components/camunda/form/custom/camunda-custom-form.component.d.ts +1 -1
  199. package/lib/components/camunda/form/generated/camunda-generated-form.component.d.ts +1 -1
  200. package/lib/components/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.d.ts +1 -1
  201. package/lib/components/camunda/form/generated/formfield/camunda-formfield-generator.directive.d.ts +1 -1
  202. package/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.d.ts +1 -1
  203. package/lib/components/camunda/form/generated/formfield/date/camunda-date-formfield.component.d.ts +1 -1
  204. package/lib/components/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.d.ts +1 -1
  205. package/lib/components/camunda/form/generated/formfield/long/camunda-long-formfield.component.d.ts +1 -1
  206. package/lib/components/camunda/form/generated/formfield/string/camunda-string-formfield.component.d.ts +1 -1
  207. package/lib/components/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.d.ts +1 -1
  208. package/lib/components/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.d.ts +1 -1
  209. package/lib/components/carbon-list/CarbonListFilterPipe.directive.d.ts +9 -0
  210. package/lib/components/carbon-list/CarbonListFilterPipe.directive.d.ts.map +1 -0
  211. package/lib/components/carbon-list/carbon-list.component.d.ts +86 -0
  212. package/lib/components/carbon-list/carbon-list.component.d.ts.map +1 -0
  213. package/lib/components/carbon-list/carbon-list.module.d.ts +16 -0
  214. package/lib/components/carbon-list/carbon-list.module.d.ts.map +1 -0
  215. package/lib/components/{carbon-table → carbon-list}/no-results/carbon-no-results.component.d.ts +1 -1
  216. package/lib/components/{carbon-table → carbon-list}/no-results/carbon-no-results.component.d.ts.map +1 -1
  217. package/lib/components/card/card.component.d.ts +1 -1
  218. package/lib/components/confirmation-modal/confirmation-modal.component.d.ts +2 -1
  219. package/lib/components/confirmation-modal/confirmation-modal.component.d.ts.map +1 -1
  220. package/lib/components/confirmation-modal/confirmation-modal.module.d.ts +1 -1
  221. package/lib/components/data-list/data-list.component.d.ts +1 -1
  222. package/lib/components/date-picker/date-picker.component.d.ts +44 -0
  223. package/lib/components/date-picker/date-picker.component.d.ts.map +1 -0
  224. package/lib/components/date-picker/date-picker.module.d.ts +16 -0
  225. package/lib/components/date-picker/date-picker.module.d.ts.map +1 -0
  226. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts +5 -3
  227. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts.map +1 -1
  228. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.d.ts +9 -2
  229. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.d.ts.map +1 -1
  230. package/lib/components/dropzone/dropzone.component.d.ts +6 -3
  231. package/lib/components/dropzone/dropzone.component.d.ts.map +1 -1
  232. package/lib/components/editor/editor.component.d.ts +38 -0
  233. package/lib/components/editor/editor.component.d.ts.map +1 -0
  234. package/lib/components/editor/editor.module.d.ts +9 -0
  235. package/lib/components/editor/editor.module.d.ts.map +1 -0
  236. package/lib/components/editor/editor.service.d.ts +12 -0
  237. package/lib/components/editor/editor.service.d.ts.map +1 -0
  238. package/lib/components/expansion-panel/expansion-panel.component.d.ts +1 -1
  239. package/lib/components/field-auto-focus/field-auto-focus.directive.d.ts +1 -1
  240. package/lib/components/filter-sidebar/filter-sidebar.component.d.ts +1 -1
  241. package/lib/components/form/form.component.d.ts +31 -0
  242. package/lib/components/form/form.component.d.ts.map +1 -0
  243. package/lib/components/form/form.module.d.ts +9 -0
  244. package/lib/components/form/form.module.d.ts.map +1 -0
  245. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.component.d.ts +1 -1
  246. package/lib/components/form-io/form-io-builder.component.d.ts +1 -1
  247. package/lib/components/form-io/form-io-current-user/form-io-current-user.component.d.ts +1 -1
  248. package/lib/components/form-io/form-io-uploader/form-io-uploader.component.d.ts +1 -1
  249. package/lib/components/form-io/form-io.component.d.ts +1 -1
  250. package/lib/components/input/input.component.d.ts +52 -0
  251. package/lib/components/input/input.component.d.ts.map +1 -0
  252. package/lib/components/input/input.module.d.ts +15 -0
  253. package/lib/components/input/input.module.d.ts.map +1 -0
  254. package/lib/components/input-label/input-label.component.d.ts +23 -0
  255. package/lib/components/input-label/input-label.component.d.ts.map +1 -0
  256. package/lib/components/input-label/input-label.module.d.ts +14 -0
  257. package/lib/components/input-label/input-label.module.d.ts.map +1 -0
  258. package/lib/components/left-sidebar/left-sidebar.component.d.ts +1 -1
  259. package/lib/components/left-sidebar/left-sidebar.module.d.ts +1 -1
  260. package/lib/components/list/list.component.d.ts +4 -1
  261. package/lib/components/list/list.component.d.ts.map +1 -1
  262. package/lib/components/menu/menu-item-text.component.d.ts +1 -1
  263. package/lib/components/menu/menu.service.d.ts.map +1 -1
  264. package/lib/components/modal/modal.component.d.ts +1 -1
  265. package/lib/components/multi-input/carbon-multi-input.component.d.ts +1 -1
  266. package/lib/components/multi-input/carbon-multi-input.module.d.ts +6 -4
  267. package/lib/components/multi-input/carbon-multi-input.module.d.ts.map +1 -1
  268. package/lib/components/multi-input-form/multi-input-form.component.d.ts +45 -0
  269. package/lib/components/multi-input-form/multi-input-form.component.d.ts.map +1 -0
  270. package/lib/components/multi-input-form/multi-input-form.module.d.ts +14 -0
  271. package/lib/components/multi-input-form/multi-input-form.module.d.ts.map +1 -0
  272. package/lib/components/multiselect-dropdown/multiselect-dropdown.component.d.ts +1 -1
  273. package/lib/components/page/page-container/page-container.component.d.ts +9 -0
  274. package/lib/components/page/page-container/page-container.component.d.ts.map +1 -0
  275. package/lib/components/page/page-content/page-content.component.d.ts +9 -0
  276. package/lib/components/page/page-content/page-content.component.d.ts.map +1 -0
  277. package/lib/components/page/page-header/page-header.component.d.ts +9 -0
  278. package/lib/components/page/page-header/page-header.component.d.ts.map +1 -0
  279. package/lib/components/page/page-header-actions/page-header-actions.component.d.ts +9 -0
  280. package/lib/components/page/page-header-actions/page-header-actions.component.d.ts.map +1 -0
  281. package/lib/components/page/page-header-introduction/page-header-introduction.component.d.ts +9 -0
  282. package/lib/components/page/page-header-introduction/page-header-introduction.component.d.ts.map +1 -0
  283. package/lib/components/page/page.module.d.ts +16 -0
  284. package/lib/components/page/page.module.d.ts.map +1 -0
  285. package/lib/components/page-header/page-header.component.d.ts +2 -2
  286. package/lib/components/page-header/page-header.component.d.ts.map +1 -1
  287. package/lib/components/page-title/page-title.component.d.ts +4 -4
  288. package/lib/components/page-title/page-title.component.d.ts.map +1 -1
  289. package/lib/components/page-title/page-title.service.d.ts.map +1 -1
  290. package/lib/components/paragraph/paragraph.component.d.ts +14 -0
  291. package/lib/components/paragraph/paragraph.component.d.ts.map +1 -0
  292. package/lib/components/paragraph/paragraph.module.d.ts +13 -0
  293. package/lib/components/paragraph/paragraph.module.d.ts.map +1 -0
  294. package/lib/components/progress-bar/progress-bar.component.d.ts +1 -1
  295. package/lib/components/prompt/prompt.component.d.ts +35 -0
  296. package/lib/components/prompt/prompt.component.d.ts.map +1 -0
  297. package/lib/components/prompt/prompt.module.d.ts +15 -0
  298. package/lib/components/prompt/prompt.module.d.ts.map +1 -0
  299. package/lib/components/radio/radio.component.d.ts +36 -0
  300. package/lib/components/radio/radio.component.d.ts.map +1 -0
  301. package/lib/components/radio/radio.module.d.ts +14 -0
  302. package/lib/components/radio/radio.module.d.ts.map +1 -0
  303. package/lib/components/right-sidebar/right-sidebar.component.d.ts +2 -7
  304. package/lib/components/right-sidebar/right-sidebar.component.d.ts.map +1 -1
  305. package/lib/components/search-fields/search-fields.component.d.ts +3 -2
  306. package/lib/components/search-fields/search-fields.component.d.ts.map +1 -1
  307. package/lib/components/search-fields/search-fields.module.d.ts +8 -2
  308. package/lib/components/search-fields/search-fields.module.d.ts.map +1 -1
  309. package/lib/components/searchable-dropdown/searchable-dropdown.component.d.ts +1 -1
  310. package/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.d.ts +1 -1
  311. package/lib/components/select/select.component.d.ts +50 -0
  312. package/lib/components/select/select.component.d.ts.map +1 -0
  313. package/lib/components/select/select.module.d.ts +13 -0
  314. package/lib/components/select/select.module.d.ts.map +1 -0
  315. package/lib/components/spinner/spinner.component.d.ts +1 -1
  316. package/lib/components/stepper/stepper-container/stepper-container.component.d.ts +29 -0
  317. package/lib/components/stepper/stepper-container/stepper-container.component.d.ts.map +1 -0
  318. package/lib/components/stepper/stepper-content/stepper-content.component.d.ts +18 -0
  319. package/lib/components/stepper/stepper-content/stepper-content.component.d.ts.map +1 -0
  320. package/lib/components/stepper/stepper-footer/stepper-footer.component.d.ts +14 -0
  321. package/lib/components/stepper/stepper-footer/stepper-footer.component.d.ts.map +1 -0
  322. package/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.d.ts +27 -0
  323. package/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.d.ts.map +1 -0
  324. package/lib/components/stepper/stepper-header/stepper-header.component.d.ts +16 -0
  325. package/lib/components/stepper/stepper-header/stepper-header.component.d.ts.map +1 -0
  326. package/lib/components/stepper/stepper-step/stepper-step.component.d.ts +16 -0
  327. package/lib/components/stepper/stepper-step/stepper-step.component.d.ts.map +1 -0
  328. package/lib/components/stepper/stepper.module.d.ts +19 -0
  329. package/lib/components/stepper/stepper.module.d.ts.map +1 -0
  330. package/lib/components/table/table.component.d.ts +52 -0
  331. package/lib/components/table/table.component.d.ts.map +1 -0
  332. package/lib/components/table/table.module.d.ts +17 -0
  333. package/lib/components/table/table.module.d.ts.map +1 -0
  334. package/lib/components/timeline/timeline.component.d.ts +2 -1
  335. package/lib/components/timeline/timeline.component.d.ts.map +1 -1
  336. package/lib/components/title/title.component.d.ts +19 -0
  337. package/lib/components/title/title.component.d.ts.map +1 -0
  338. package/lib/components/title/title.module.d.ts +12 -0
  339. package/lib/components/title/title.module.d.ts.map +1 -0
  340. package/lib/components/tooltip-icon/tooltip-icon.component.d.ts +11 -0
  341. package/lib/components/tooltip-icon/tooltip-icon.component.d.ts.map +1 -0
  342. package/lib/components/tooltip-icon/tooltip-icon.module.d.ts +15 -0
  343. package/lib/components/tooltip-icon/tooltip-icon.module.d.ts.map +1 -0
  344. package/lib/components/topbar/topbar.component.d.ts +1 -1
  345. package/lib/components/topbar/topbar.module.d.ts +1 -1
  346. package/lib/components/uploader/uploader-drag-drop.directive.d.ts +1 -1
  347. package/lib/components/uploader/uploader.component.d.ts +1 -1
  348. package/lib/components/v-card/card.component.d.ts +23 -0
  349. package/lib/components/v-card/card.component.d.ts.map +1 -0
  350. package/lib/components/v-card/card.module.d.ts +14 -0
  351. package/lib/components/v-card/card.module.d.ts.map +1 -0
  352. package/lib/components/v-modal/modal.component.d.ts +29 -0
  353. package/lib/components/v-modal/modal.component.d.ts.map +1 -0
  354. package/lib/components/v-modal/modal.module.d.ts +13 -0
  355. package/lib/components/v-modal/modal.module.d.ts.map +1 -0
  356. package/lib/components/version/version.service.d.ts.map +1 -1
  357. package/lib/components/webcam/webcam.component.d.ts +1 -1
  358. package/lib/components/widget/widget.component.d.ts +1 -1
  359. package/lib/directives/command-click/command-click-directive.module.d.ts.map +1 -0
  360. package/lib/directives/{command-click.directive.d.ts → command-click/command-click.directive.d.ts} +1 -1
  361. package/lib/directives/command-click/command-click.directive.d.ts.map +1 -0
  362. package/lib/directives/digit-only/digit-only.directive.d.ts +35 -0
  363. package/lib/directives/digit-only/digit-only.directive.d.ts.map +1 -0
  364. package/lib/directives/render-in-page-header/render-in-page-header-directive.module.d.ts.map +1 -0
  365. package/lib/directives/{render-in-page-header.directive.d.ts → render-in-page-header/render-in-page-header.directive.d.ts} +2 -2
  366. package/lib/directives/render-in-page-header/render-in-page-header.directive.d.ts.map +1 -0
  367. package/lib/directives/tooltip/tooltip.component.d.ts +7 -0
  368. package/lib/directives/tooltip/tooltip.component.d.ts.map +1 -0
  369. package/lib/directives/tooltip/tooltip.directive.d.ts +19 -0
  370. package/lib/directives/tooltip/tooltip.directive.d.ts.map +1 -0
  371. package/lib/directives/tooltip/tooltip.module.d.ts +11 -0
  372. package/lib/directives/tooltip/tooltip.module.d.ts.map +1 -0
  373. package/lib/directives/valtimo-cds-modal/valtimo-cds-modal-directive.module.d.ts.map +1 -0
  374. package/lib/directives/{valtimo-cds-modal.directive.d.ts → valtimo-cds-modal/valtimo-cds-modal.directive.d.ts} +1 -1
  375. package/lib/directives/valtimo-cds-modal/valtimo-cds-modal.directive.d.ts.map +1 -0
  376. package/lib/models/button.model.d.ts +3 -0
  377. package/lib/models/button.model.d.ts.map +1 -0
  378. package/lib/models/carbon-list.model.d.ts +54 -0
  379. package/lib/models/carbon-list.model.d.ts.map +1 -0
  380. package/lib/models/carbon-pagination.model.d.ts +6 -5
  381. package/lib/models/carbon-pagination.model.d.ts.map +1 -1
  382. package/lib/models/documenten-api-metadata.model.d.ts +4 -4
  383. package/lib/models/documenten-api-metadata.model.d.ts.map +1 -1
  384. package/lib/models/editor.model.d.ts +11 -0
  385. package/lib/models/editor.model.d.ts.map +1 -0
  386. package/lib/models/form.model.d.ts +5 -0
  387. package/lib/models/form.model.d.ts.map +1 -0
  388. package/lib/models/index.d.ts +14 -2
  389. package/lib/models/index.d.ts.map +1 -1
  390. package/lib/models/input.model.d.ts +3 -0
  391. package/lib/models/input.model.d.ts.map +1 -0
  392. package/lib/models/modal.model.d.ts +3 -0
  393. package/lib/models/modal.model.d.ts.map +1 -0
  394. package/lib/models/multi-input.model.d.ts +5 -5
  395. package/lib/models/multi-input.model.d.ts.map +1 -1
  396. package/lib/models/pagination.model.d.ts +5 -3
  397. package/lib/models/pagination.model.d.ts.map +1 -1
  398. package/lib/models/radio.model.d.ts +8 -0
  399. package/lib/models/radio.model.d.ts.map +1 -0
  400. package/lib/models/searchable-dropdown.model.d.ts +1 -1
  401. package/lib/models/searchable-dropdown.model.d.ts.map +1 -1
  402. package/lib/models/select.model.d.ts +9 -0
  403. package/lib/models/select.model.d.ts.map +1 -0
  404. package/lib/models/sort.model.d.ts +11 -0
  405. package/lib/models/sort.model.d.ts.map +1 -0
  406. package/lib/models/stepper.model.d.ts +8 -0
  407. package/lib/models/stepper.model.d.ts.map +1 -0
  408. package/lib/models/table.model.d.ts +14 -0
  409. package/lib/models/table.model.d.ts.map +1 -0
  410. package/lib/models/timeline.model.d.ts +4 -1
  411. package/lib/models/timeline.model.d.ts.map +1 -1
  412. package/lib/models/title.model.d.ts +3 -0
  413. package/lib/models/title.model.d.ts.map +1 -0
  414. package/lib/services/index.d.ts +7 -0
  415. package/lib/services/index.d.ts.map +1 -0
  416. package/lib/services/modal.service.d.ts +37 -0
  417. package/lib/services/modal.service.d.ts.map +1 -0
  418. package/lib/services/prompt.service.d.ts +68 -0
  419. package/lib/services/prompt.service.d.ts.map +1 -0
  420. package/lib/services/shell.service.d.ts +3 -0
  421. package/lib/services/shell.service.d.ts.map +1 -1
  422. package/lib/services/stepper.service.d.ts +32 -0
  423. package/lib/services/stepper.service.d.ts.map +1 -0
  424. package/lib/services/user-interface.service.d.ts +11 -0
  425. package/lib/services/user-interface.service.d.ts.map +1 -0
  426. package/package.json +30 -31
  427. package/public_api.d.ts +60 -7
  428. package/public_api.d.ts.map +1 -1
  429. package/esm2020/lib/components/breadcrumb-navigation/breadcrumb.service.mjs +0 -103
  430. package/esm2020/lib/components/carbon-table/carbon-table.component.mjs +0 -178
  431. package/esm2020/lib/components/carbon-table/carbon-table.module.mjs +0 -53
  432. package/esm2020/lib/components/carbon-table/no-results/carbon-no-results.component.mjs +0 -24
  433. package/esm2020/lib/components/components.module.mjs +0 -26
  434. package/esm2020/lib/components/confirmation-modal/confirmation-modal.component.mjs +0 -90
  435. package/esm2020/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +0 -215
  436. package/esm2020/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.mjs +0 -67
  437. package/esm2020/lib/components/dropzone/dropzone.component.mjs +0 -155
  438. package/esm2020/lib/components/expansion-panel/expansion-panel.component.mjs +0 -41
  439. package/esm2020/lib/components/left-sidebar/left-sidebar.component.mjs +0 -148
  440. package/esm2020/lib/components/list/list.component.mjs +0 -199
  441. package/esm2020/lib/components/menu/menu.service.mjs +0 -245
  442. package/esm2020/lib/components/multi-input/carbon-multi-input.component.mjs +0 -216
  443. package/esm2020/lib/components/multi-input/carbon-multi-input.module.mjs +0 -62
  444. package/esm2020/lib/components/page-title/page-title.component.mjs +0 -106
  445. package/esm2020/lib/components/page-title/page-title.service.mjs +0 -92
  446. package/esm2020/lib/components/right-sidebar/right-sidebar.component.mjs +0 -211
  447. package/esm2020/lib/components/right-sidebar/right-sidebar.module.mjs +0 -95
  448. package/esm2020/lib/components/search-fields/search-fields.component.mjs +0 -213
  449. package/esm2020/lib/components/search-fields/search-fields.module.mjs +0 -69
  450. package/esm2020/lib/components/timeline/timeline.component.mjs +0 -32
  451. package/esm2020/lib/directives/command-click-directive.module.mjs +0 -18
  452. package/esm2020/lib/directives/command-click.directive.mjs +0 -37
  453. package/esm2020/lib/directives/index.mjs +0 -22
  454. package/esm2020/lib/directives/render-in-page-header-directive.module.mjs +0 -18
  455. package/esm2020/lib/directives/render-in-page-header.directive.mjs +0 -27
  456. package/esm2020/lib/directives/valtimo-cds-modal-directive.module.mjs +0 -33
  457. package/esm2020/lib/directives/valtimo-cds-modal.directive.mjs +0 -68
  458. package/esm2020/lib/models/carbon-pagination.model.mjs +0 -9
  459. package/esm2020/lib/models/carbon-table.model.mjs +0 -21
  460. package/esm2020/lib/models/index.mjs +0 -27
  461. package/esm2020/lib/models/pagination.model.mjs +0 -17
  462. package/esm2020/lib/models/timeline.model.mjs +0 -48
  463. package/esm2020/lib/services/shell.service.mjs +0 -206
  464. package/esm2020/public_api.mjs +0 -113
  465. package/fesm2015/valtimo-components.mjs +0 -7945
  466. package/fesm2015/valtimo-components.mjs.map +0 -1
  467. package/fesm2020/valtimo-components.mjs +0 -8060
  468. package/fesm2020/valtimo-components.mjs.map +0 -1
  469. package/lib/components/carbon-table/carbon-table.component.d.ts +0 -49
  470. package/lib/components/carbon-table/carbon-table.component.d.ts.map +0 -1
  471. package/lib/components/carbon-table/carbon-table.module.d.ts +0 -12
  472. package/lib/components/carbon-table/carbon-table.module.d.ts.map +0 -1
  473. package/lib/components/components.module.d.ts +0 -7
  474. package/lib/components/components.module.d.ts.map +0 -1
  475. package/lib/directives/command-click-directive.module.d.ts.map +0 -1
  476. package/lib/directives/command-click.directive.d.ts.map +0 -1
  477. package/lib/directives/index.d.ts +0 -7
  478. package/lib/directives/index.d.ts.map +0 -1
  479. package/lib/directives/render-in-page-header-directive.module.d.ts.map +0 -1
  480. package/lib/directives/render-in-page-header.directive.d.ts.map +0 -1
  481. package/lib/directives/valtimo-cds-modal-directive.module.d.ts.map +0 -1
  482. package/lib/directives/valtimo-cds-modal.directive.d.ts.map +0 -1
  483. package/lib/models/carbon-table.model.d.ts +0 -33
  484. package/lib/models/carbon-table.model.d.ts.map +0 -1
  485. package/lib/models/list.model.d.ts +0 -9
  486. package/lib/models/list.model.d.ts.map +0 -1
  487. /package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/formfield.model.mjs +0 -0
  488. /package/{esm2020 → esm2022}/lib/components/camunda/form/generated/formfield/validation/date.validators.mjs +0 -0
  489. /package/{esm2020 → esm2022}/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.mjs +0 -0
  490. /package/{esm2020 → esm2022}/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.formio.mjs +0 -0
  491. /package/{esm2020 → esm2022}/lib/components/form-io/form-io-current-user/form-io-current-user-edit-form.mjs +0 -0
  492. /package/{esm2020 → esm2022}/lib/components/form-io/form-io-current-user/form-io-current-user.formio.mjs +0 -0
  493. /package/{esm2020 → esm2022}/lib/components/form-io/form-io-resource-selector/form-io-resource-selector.formio.mjs +0 -0
  494. /package/{esm2020 → esm2022}/lib/components/form-io/form-io-uploader/form-io-uploader-edit-form.mjs +0 -0
  495. /package/{esm2020 → esm2022}/lib/components/form-io/form-io-uploader/form-io-uploader.formio.mjs +0 -0
  496. /package/{esm2020 → esm2022}/lib/components/form-io/formio-config.mjs +0 -0
  497. /package/{esm2020 → esm2022}/lib/components/menu/menu.init.mjs +0 -0
  498. /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/booleanTypeConverter.mjs +0 -0
  499. /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/dateTypeConverter.mjs +0 -0
  500. /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/enumTypeConverter.mjs +0 -0
  501. /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/relatedFilesTypeConverter.mjs +0 -0
  502. /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.mjs +0 -0
  503. /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/stringTypeConverter.mjs +0 -0
  504. /package/{esm2020 → esm2022}/lib/components/view-content/type-converters/type-converters.model.mjs +0 -0
  505. /package/{esm2020 → esm2022}/lib/constants/carbon.constants.mjs +0 -0
  506. /package/{esm2020 → esm2022}/lib/constants/index.mjs +0 -0
  507. /package/{esm2020 → esm2022}/lib/models/alert.model.mjs +0 -0
  508. /package/{esm2020 → esm2022}/lib/models/documenten-api-metadata.model.mjs +0 -0
  509. /package/{esm2020 → esm2022}/lib/models/form-io.model.mjs +0 -0
  510. /package/{esm2020 → esm2022}/lib/models/searchable-dropdown.model.mjs +0 -0
  511. /package/{esm2020 → esm2022}/lib/models/version.model.mjs +0 -0
  512. /package/{esm2020 → esm2022}/lib/pipes/index.mjs +0 -0
  513. /package/{esm2020 → esm2022}/valtimo-components.mjs +0 -0
  514. /package/lib/directives/{command-click-directive.module.d.ts → command-click/command-click-directive.module.d.ts} +0 -0
  515. /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
  516. /package/lib/directives/{valtimo-cds-modal-directive.module.d.ts → valtimo-cds-modal/valtimo-cds-modal-directive.module.d.ts} +0 -0
@@ -1,41 +0,0 @@
1
- /*
2
- * Copyright 2015-2020 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, HostListener, Input } from '@angular/core';
17
- import { BehaviorSubject } from 'rxjs';
18
- import * as i0 from "@angular/core";
19
- import * as i1 from "carbon-components-angular";
20
- import * as i2 from "@angular/common";
21
- export class ExpansionPanelComponent {
22
- constructor() {
23
- this.hideAboveFoldWhenExpanded = false;
24
- this.open$ = new BehaviorSubject(false);
25
- }
26
- clickInside() {
27
- this.open$.next(!this.open$.value);
28
- }
29
- }
30
- ExpansionPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ExpansionPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
31
- ExpansionPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ExpansionPanelComponent, selector: "valtimo-expansion-panel-component", inputs: { hideAboveFoldWhenExpanded: "hideAboveFoldWhenExpanded" }, host: { listeners: { "click": "clickInside()" } }, ngImport: i0, template: "<cds-expandable-tile>\n <div\n [hidden]=\"hideAboveFoldWhenExpanded && (open$ | async) === true\"\n class=\"cds--tile-content__above-the-fold above-fold\"\n >\n <ng-content select=\"[collapsed]\"></ng-content>\n </div>\n <div class=\"cds--tile-content__below-the-fold below-fold\">\n <ng-content select=\"[expanded]\"></ng-content>\n </div>\n</cds-expandable-tile>\n", styles: [""], dependencies: [{ kind: "component", type: i1.ExpandableTile, selector: "cds-expandable-tile, ibm-expandable-tile", inputs: ["theme", "expanded", "interactive", "translations"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ExpansionPanelComponent, decorators: [{
33
- type: Component,
34
- args: [{ selector: 'valtimo-expansion-panel-component', template: "<cds-expandable-tile>\n <div\n [hidden]=\"hideAboveFoldWhenExpanded && (open$ | async) === true\"\n class=\"cds--tile-content__above-the-fold above-fold\"\n >\n <ng-content select=\"[collapsed]\"></ng-content>\n </div>\n <div class=\"cds--tile-content__below-the-fold below-fold\">\n <ng-content select=\"[expanded]\"></ng-content>\n </div>\n</cds-expandable-tile>\n" }]
35
- }], propDecorators: { hideAboveFoldWhenExpanded: [{
36
- type: Input
37
- }], clickInside: [{
38
- type: HostListener,
39
- args: ['click']
40
- }] } });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5zaW9uLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZXhwYW5zaW9uLXBhbmVsL2V4cGFuc2lvbi1wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2V4cGFuc2lvbi1wYW5lbC9leHBhbnNpb24tcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7OztBQU9yQyxNQUFNLE9BQU8sdUJBQXVCO0lBTHBDO1FBTVcsOEJBQXlCLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztLQU10RDtJQUhDLFdBQVc7UUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQzs7b0hBUFUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsZ01DeEJwQyxpWUFXQTsyRkRhYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UsbUNBQW1DOzhCQUtwQyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyMCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZXhwYW5zaW9uLXBhbmVsLWNvbXBvbmVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9leHBhbnNpb24tcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9leHBhbnNpb24tcGFuZWwuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRXhwYW5zaW9uUGFuZWxDb21wb25lbnQge1xuICBASW5wdXQoKSBoaWRlQWJvdmVGb2xkV2hlbkV4cGFuZGVkID0gZmFsc2U7XG4gIHJlYWRvbmx5IG9wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICBjbGlja0luc2lkZSgpIHtcbiAgICB0aGlzLm9wZW4kLm5leHQoIXRoaXMub3BlbiQudmFsdWUpO1xuICB9XG59XG4iLCI8Y2RzLWV4cGFuZGFibGUtdGlsZT5cbiAgPGRpdlxuICAgIFtoaWRkZW5dPVwiaGlkZUFib3ZlRm9sZFdoZW5FeHBhbmRlZCAmJiAob3BlbiQgfCBhc3luYykgPT09IHRydWVcIlxuICAgIGNsYXNzPVwiY2RzLS10aWxlLWNvbnRlbnRfX2Fib3ZlLXRoZS1mb2xkIGFib3ZlLWZvbGRcIlxuICA+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2NvbGxhcHNlZF1cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2RzLS10aWxlLWNvbnRlbnRfX2JlbG93LXRoZS1mb2xkIGJlbG93LWZvbGRcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZXhwYW5kZWRdXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvY2RzLWV4cGFuZGFibGUtdGlsZT5cbiJdfQ==
@@ -1,148 +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, HostListener, ViewChild, } from '@angular/core';
17
- import { BehaviorSubject, combineLatest } from 'rxjs';
18
- import { take } from 'rxjs/operators';
19
- import * as i0 from "@angular/core";
20
- import * as i1 from "@ngx-translate/core";
21
- import * as i2 from "@valtimo/config";
22
- import * as i3 from "../menu/menu.service";
23
- import * as i4 from "../../services/shell.service";
24
- import * as i5 from "@angular/cdk/layout";
25
- import * as i6 from "@angular/router";
26
- import * as i7 from "@angular/common";
27
- import * as i8 from "../menu/menu-item-text.component";
28
- import * as i9 from "carbon-components-angular";
29
- import * as i10 from "../../directives/command-click.directive";
30
- import * as i11 from "../../pipes/menu-item-translation.pipe";
31
- import * as i12 from "../../pipes/case-count.pipe";
32
- export class LeftSidebarComponent {
33
- constructor(translateService, elementRef, configService, menuService, shellService, breakpointObserver, router) {
34
- this.translateService = translateService;
35
- this.elementRef = elementRef;
36
- this.configService = configService;
37
- this.menuService = menuService;
38
- this.shellService = shellService;
39
- this.breakpointObserver = breakpointObserver;
40
- this.router = router;
41
- this.includeFunctionObservables = {};
42
- this.menuItems$ = this.menuService.menuItems$;
43
- this.sideBarExpanded$ = this.shellService.sideBarExpanded$;
44
- this.closestSequence$ = this.menuService.closestSequence$;
45
- this.overflowMenuSequence$ = new BehaviorSubject('');
46
- this._breakpointsInitialized = false;
47
- this.includeFunctionObservables = this.menuService.includeFunctionObservables;
48
- }
49
- onPageClick(targetElement) {
50
- combineLatest([
51
- this.shellService.sideBarExpanded$,
52
- this.shellService.mouseOnTopBar$,
53
- this.shellService.largeScreen$,
54
- this.shellService.collapsibleWidescreenMenu$,
55
- ])
56
- .pipe(take(1))
57
- .subscribe(([sideBarExpanded, mouseOnTopBar, largeScreen, collapsibleWidescreenMenu]) => {
58
- const clickedInside = this.elementRef.nativeElement.contains(targetElement) || mouseOnTopBar;
59
- if (!clickedInside && (!largeScreen || collapsibleWidescreenMenu) && sideBarExpanded) {
60
- this.shellService.setSideBarExpanded(false);
61
- }
62
- });
63
- }
64
- ngAfterViewInit() {
65
- this.openBreakpointSubscription();
66
- this.shellService.setSidenavElement(this.elementRef.nativeElement.querySelector('.cds--side-nav'));
67
- }
68
- ngOnDestroy() {
69
- this._breakpointSubscription?.unsubscribe();
70
- }
71
- navigateToRoute(route, event) {
72
- event.preventDefault();
73
- if (!event.ctrlKey && !event.metaKey) {
74
- this.router.navigate(route);
75
- combineLatest([
76
- this.shellService.sideBarExpanded$,
77
- this.shellService.largeScreen$,
78
- this.shellService.collapsibleWidescreenMenu$,
79
- ])
80
- .pipe(take(1))
81
- .subscribe(([sideBarExpanded, largeScreen, collapsibleWidescreenMenu]) => {
82
- if ((!largeScreen || collapsibleWidescreenMenu) && sideBarExpanded) {
83
- this.shellService.setSideBarExpanded(false);
84
- }
85
- });
86
- }
87
- }
88
- onRightClick(sequence) {
89
- this.overflowMenuSequence$.next(sequence);
90
- return false;
91
- }
92
- onOverflowMenuClosed(sequence) {
93
- this.overflowMenuSequence$.pipe(take(1)).subscribe(overflowMenuSequence => {
94
- if (overflowMenuSequence === sequence) {
95
- this.overflowMenuSequence$.next('');
96
- }
97
- });
98
- }
99
- openInNewTab(link) {
100
- const url = this.router.serializeUrl(this.router.createUrlTree(link || ['/']));
101
- window.open(url, '_blank');
102
- }
103
- openBreakpointSubscription() {
104
- this.breakpointObserver
105
- .observe(['(max-width: 1055px)', '(min-width: 1056px)'])
106
- .subscribe(state => {
107
- combineLatest([
108
- this.shellService.sideBarExpanded$,
109
- this.shellService.collapsibleWidescreenMenu$,
110
- ])
111
- .pipe(take(1))
112
- .subscribe(([sideBarExpanded, collapsibleWidescreenMenu]) => {
113
- const breakpoints = state.breakpoints;
114
- const breakpointKeys = Object.keys(breakpoints);
115
- const smallScreen = breakpoints[breakpointKeys[0]];
116
- const largeScreen = breakpoints[breakpointKeys[1]];
117
- if (!this._breakpointsInitialized) {
118
- if (smallScreen || collapsibleWidescreenMenu) {
119
- this.shellService.collapseSideBar();
120
- }
121
- this._breakpointsInitialized = true;
122
- }
123
- if (!collapsibleWidescreenMenu) {
124
- if ((this._lastSmallScreen && largeScreen && !sideBarExpanded) ||
125
- (this._lastLargeScreen && smallScreen && sideBarExpanded)) {
126
- this.shellService.toggleSideBar();
127
- }
128
- }
129
- this._lastSmallScreen = smallScreen;
130
- this._lastLargeScreen = largeScreen;
131
- this.shellService.setLargeScreen(largeScreen);
132
- });
133
- });
134
- }
135
- }
136
- LeftSidebarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LeftSidebarComponent, deps: [{ token: i1.TranslateService }, { token: i0.ElementRef }, { token: i2.ConfigService }, { token: i3.MenuService }, { token: i4.ShellService }, { token: i5.BreakpointObserver }, { token: i6.Router }], target: i0.ɵɵFactoryTarget.Component });
137
- LeftSidebarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: LeftSidebarComponent, selector: "valtimo-left-sidebar", host: { listeners: { "document:click": "onPageClick($event.target)" } }, viewQueries: [{ propertyName: "toggleButtonRef", first: true, predicate: ["toggleButton"], descendants: 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<cds-sidenav\n *ngIf=\"{\n closestSequence: closestSequence$ | async,\n overflowMenuSequence: overflowMenuSequence$ | async,\n sideBarExpanded: sideBarExpanded$ | async\n } as obs\"\n [allowExpansion]=\"false\"\n [expanded]=\"obs.sideBarExpanded\"\n>\n <ng-container *ngFor=\"let menuItem of menuItems$ | async\">\n <ng-container *ngIf=\"!menuItem.children\">\n <ng-container\n *ngTemplateOutlet=\"\n topMenuItem;\n context: {\n menuItem: menuItem,\n closestSequence: obs.closestSequence,\n overflowMenuSequence: obs.overflowMenuSequence\n }\n \"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"menuItem.children\">\n <ng-container\n *ngTemplateOutlet=\"\n topMenuItem;\n context: {\n closestSequence: obs.closestSequence,\n menuItem: menuItem,\n overflowMenuSequence: obs.overflowMenuSequence\n }\n \"\n ></ng-container>\n\n <ng-container *ngTemplateOutlet=\"subMenuIcon; context: {menuItem: menuItem}\"></ng-container>\n\n <cds-sidenav-menu [title]=\"menuItem | menuItemTranslate | async\">\n <ng-container *ngFor=\"let childMenuItem of menuItem.children\">\n <ng-container\n *ngIf=\"{\n count: childMenuItem?.count$ && (childMenuItem?.count$ | async),\n sequence: '' + menuItem.sequence + childMenuItem.sequence\n } as vars\"\n >\n <cds-sidenav-item\n [ngClass]=\"{\n 'cds--side-nav__item--empty': !childMenuItem.link,\n 'menu-item--hidden': childMenuItem.includeFunction !== undefined,\n 'menu-item--visible':\n childMenuItem.includeFunction !== undefined &&\n (includeFunctionObservables[childMenuItem.title] | async)\n }\"\n [active]=\"vars.sequence === obs.closestSequence\"\n [href]=\"vars?.count ? 'javascript:return false;' : 'javascript:void(0);'\"\n (click)=\"navigateToRoute(childMenuItem.link, $event)\"\n (contextmenu)=\"onRightClick(vars.sequence)\"\n (ctrl-click)=\"openInNewTab(childMenuItem.link)\"\n >\n <valtimo-menu-item-text\n [accent]=\"!childMenuItem.link\"\n [menuItem]=\"childMenuItem\"\n [showOverFlowMenu]=\"obs.overflowMenuSequence === vars.sequence\"\n (openInNewTab)=\"openInNewTab(childMenuItem.link)\"\n (overflowMenuClosed)=\"onOverflowMenuClosed(vars.sequence)\"\n ></valtimo-menu-item-text>\n\n <ng-container\n *ngTemplateOutlet=\"countTemplate; context: {count: vars.count}\"\n ></ng-container>\n </cds-sidenav-item>\n </ng-container>\n </ng-container>\n </cds-sidenav-menu>\n </ng-container>\n </ng-container>\n</cds-sidenav>\n\n<ng-template #subMenuIcon let-menuItem=\"menuItem\">\n <div class=\"menu-item-icon-container\"><i class=\"{{ menuItem.iconClass }}\"></i></div>\n</ng-template>\n\n<ng-template\n #topMenuItem\n let-closestSequence=\"closestSequence\"\n let-menuItem=\"menuItem\"\n let-overflowMenuSequence=\"overflowMenuSequence\"\n>\n <ng-container *ngIf=\"{sequence: '' + menuItem.sequence} as vars\"\n ><cds-sidenav-item\n *ngIf=\"!menuItem.children\"\n [ngClass]=\"{\n 'menu-item--hidden': menuItem.includeFunction !== undefined,\n 'menu-item--visible':\n menuItem.includeFunction !== undefined &&\n (includeFunctionObservables[menuItem.title] | async)\n }\"\n [active]=\"vars.sequence === closestSequence\"\n (click)=\"navigateToRoute(menuItem.link, $event)\"\n (contextmenu)=\"onRightClick(vars.sequence)\"\n (ctrl-click)=\"openInNewTab(menuItem.link.link)\"\n href=\"javascript:void(0)\"\n >\n <valtimo-menu-item-text\n [menuItem]=\"menuItem\"\n [showOverFlowMenu]=\"overflowMenuSequence === vars.sequence\"\n (openInNewTab)=\"openInNewTab(menuItem.link.link)\"\n (overflowMenuClosed)=\"onOverflowMenuClosed(vars.sequence)\"\n ></valtimo-menu-item-text> </cds-sidenav-item\n ></ng-container>\n</ng-template>\n\n<ng-template #countTemplate let-count=\"count\">\n <ng-container *ngIf=\"count\">\n <span class=\"case-count\">\n {{ count | caseCount }}\n </span>\n </ng-container>\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 */@media screen and (max-width: 767px){.be-left-sidebar{width:100%!important}}.be-left-sidebar .left-sidebar-toggle{padding:20px}.be-left-sidebar .left-sidebar-toggle:before{font-size:1.615rem}.be-left-sidebar .sidebar-elements>li>a.be-toggle-left-sidebar{height:32px;display:flex;align-items:center}.be-left-sidebar .left-sidebar-content{padding-top:20px}.be-toggle-left-sidebar svg{margin-right:7px;min-width:21px;height:auto;overflow:visible}.be-toggle-left-sidebar svg path{transition:.27s ease;fill:#696969}::ng-deep .resize-border{position:absolute;width:3px;height:100%;top:0;right:0;cursor:col-resize;background-color:var(--cds-border-strong);opacity:0;transition:opacity .11s cubic-bezier(.2,0,1,.9)}::ng-deep .resize-hover{opacity:1}::ng-deep .resize-border--invisible{display:none}.no-transition{transition:none}.d-1{d:path(\"M3 18v-2h13v2z\")}.d-1-flipped{d:path(\"M3 18v-2h11v2z\")}.d-2{d:path(\"M3 13v-2h10v2H3\")}.d-2-flipped{d:path(\"M3 13v-2h12v2H3\")}.d-3{d:path(\"M3 6h13v2H3V6\")}.d-3-flipped{d:path(\"M3 6h11v2H3V6\")}.d-4{d:path(\"M21 15.61L19.59 17l-5.01-5 5.01-5L21 8.39 17.44 12 21 15.61\")}.d-4-flipped{d:path(\"M15.58 15.61L16.99 17 22 12l-5.01-5-1.41 1.39L19.14 12l-3.56 3.61\")}::ng-deep .cds--side-nav__menu{padding-left:0}::ng-deep .cds--side-nav__navigation{border-right:1px solid #e0e0e0;height:100%}::ng-deep .cds--side-nav--ux{width:0}::ng-deep .cds--side-nav--expanded{width:16rem}::ng-deep .cds--side-nav__header-divider{display:none!important}.menu-item-icon-container{position:relative;top:8px;left:13px;height:0}.menu-item-icon-container i{width:0px;height:16px}.menu-item--hidden{display:none}.menu-item--visible{display:block}::ng-deep .cds--side-nav__item--empty{pointer-events:none}::ng-deep .cds--side-nav__item--empty .menu-item-icon-container{display:none}::ng-deep .cds--side-nav__link[href*=\"javascript:return false;\"]{padding-right:3rem!important}.case-count{position:absolute;right:0;padding-right:1rem;height:100%;top:0;display:flex;align-items:center;justify-content:center;font-size:.875rem;letter-spacing:.1px;line-height:1.25rem;font-weight:500!important}::ng-deep .cds--side-nav__icon{margin-left:-16px}::ng-deep .cds--side-nav__item.cds--side-nav__item--icon a.cds--side-nav__link{padding-left:3.5rem}::ng-deep .cds--side-nav__submenu-title{padding-right:1.5rem}::ng-deep .cds--side-nav__items{display:flex!important;flex-direction:column!important;overflow:visible!important}::ng-deep .cds--side-nav__navigation{top:3rem;height:calc(100% - 3rem)!important;overflow-x:hidden!important;overflow-y:auto!important}::ng-deep .cds--side-nav__navigation:not(.cds--side-nav--expanded){width:0}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i8.MenuItemTextComponent, selector: "valtimo-menu-item-text", inputs: ["menuItem", "accent", "showOverFlowMenu"], outputs: ["overflowMenuClosed", "openInNewTab"] }, { kind: "component", type: i9.SideNav, selector: "cds-sidenav, ibm-sidenav", inputs: ["ariaLabel", "expanded", "hidden", "rail", "allowExpansion", "navigationItems"] }, { kind: "component", type: i9.SideNavItem, selector: "cds-sidenav-item, ibm-sidenav-item", inputs: ["href", "active", "route", "isSubMenu", "routeExtras", "title"], outputs: ["navigation", "selected"] }, { kind: "component", type: i9.SideNavMenu, selector: "cds-sidenav-menu, ibm-sidenav-menu", inputs: ["title", "expanded", "hasActiveChild", "menuItems"] }, { kind: "directive", type: i10.CtrlClickDirective, selector: "[ctrl-click]", outputs: ["ctrl-click"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.MenuItemTranslationPipe, name: "menuItemTranslate" }, { kind: "pipe", type: i12.CaseCountPipe, name: "caseCount" }] });
138
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LeftSidebarComponent, decorators: [{
139
- type: Component,
140
- args: [{ selector: 'valtimo-left-sidebar', 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<cds-sidenav\n *ngIf=\"{\n closestSequence: closestSequence$ | async,\n overflowMenuSequence: overflowMenuSequence$ | async,\n sideBarExpanded: sideBarExpanded$ | async\n } as obs\"\n [allowExpansion]=\"false\"\n [expanded]=\"obs.sideBarExpanded\"\n>\n <ng-container *ngFor=\"let menuItem of menuItems$ | async\">\n <ng-container *ngIf=\"!menuItem.children\">\n <ng-container\n *ngTemplateOutlet=\"\n topMenuItem;\n context: {\n menuItem: menuItem,\n closestSequence: obs.closestSequence,\n overflowMenuSequence: obs.overflowMenuSequence\n }\n \"\n ></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"menuItem.children\">\n <ng-container\n *ngTemplateOutlet=\"\n topMenuItem;\n context: {\n closestSequence: obs.closestSequence,\n menuItem: menuItem,\n overflowMenuSequence: obs.overflowMenuSequence\n }\n \"\n ></ng-container>\n\n <ng-container *ngTemplateOutlet=\"subMenuIcon; context: {menuItem: menuItem}\"></ng-container>\n\n <cds-sidenav-menu [title]=\"menuItem | menuItemTranslate | async\">\n <ng-container *ngFor=\"let childMenuItem of menuItem.children\">\n <ng-container\n *ngIf=\"{\n count: childMenuItem?.count$ && (childMenuItem?.count$ | async),\n sequence: '' + menuItem.sequence + childMenuItem.sequence\n } as vars\"\n >\n <cds-sidenav-item\n [ngClass]=\"{\n 'cds--side-nav__item--empty': !childMenuItem.link,\n 'menu-item--hidden': childMenuItem.includeFunction !== undefined,\n 'menu-item--visible':\n childMenuItem.includeFunction !== undefined &&\n (includeFunctionObservables[childMenuItem.title] | async)\n }\"\n [active]=\"vars.sequence === obs.closestSequence\"\n [href]=\"vars?.count ? 'javascript:return false;' : 'javascript:void(0);'\"\n (click)=\"navigateToRoute(childMenuItem.link, $event)\"\n (contextmenu)=\"onRightClick(vars.sequence)\"\n (ctrl-click)=\"openInNewTab(childMenuItem.link)\"\n >\n <valtimo-menu-item-text\n [accent]=\"!childMenuItem.link\"\n [menuItem]=\"childMenuItem\"\n [showOverFlowMenu]=\"obs.overflowMenuSequence === vars.sequence\"\n (openInNewTab)=\"openInNewTab(childMenuItem.link)\"\n (overflowMenuClosed)=\"onOverflowMenuClosed(vars.sequence)\"\n ></valtimo-menu-item-text>\n\n <ng-container\n *ngTemplateOutlet=\"countTemplate; context: {count: vars.count}\"\n ></ng-container>\n </cds-sidenav-item>\n </ng-container>\n </ng-container>\n </cds-sidenav-menu>\n </ng-container>\n </ng-container>\n</cds-sidenav>\n\n<ng-template #subMenuIcon let-menuItem=\"menuItem\">\n <div class=\"menu-item-icon-container\"><i class=\"{{ menuItem.iconClass }}\"></i></div>\n</ng-template>\n\n<ng-template\n #topMenuItem\n let-closestSequence=\"closestSequence\"\n let-menuItem=\"menuItem\"\n let-overflowMenuSequence=\"overflowMenuSequence\"\n>\n <ng-container *ngIf=\"{sequence: '' + menuItem.sequence} as vars\"\n ><cds-sidenav-item\n *ngIf=\"!menuItem.children\"\n [ngClass]=\"{\n 'menu-item--hidden': menuItem.includeFunction !== undefined,\n 'menu-item--visible':\n menuItem.includeFunction !== undefined &&\n (includeFunctionObservables[menuItem.title] | async)\n }\"\n [active]=\"vars.sequence === closestSequence\"\n (click)=\"navigateToRoute(menuItem.link, $event)\"\n (contextmenu)=\"onRightClick(vars.sequence)\"\n (ctrl-click)=\"openInNewTab(menuItem.link.link)\"\n href=\"javascript:void(0)\"\n >\n <valtimo-menu-item-text\n [menuItem]=\"menuItem\"\n [showOverFlowMenu]=\"overflowMenuSequence === vars.sequence\"\n (openInNewTab)=\"openInNewTab(menuItem.link.link)\"\n (overflowMenuClosed)=\"onOverflowMenuClosed(vars.sequence)\"\n ></valtimo-menu-item-text> </cds-sidenav-item\n ></ng-container>\n</ng-template>\n\n<ng-template #countTemplate let-count=\"count\">\n <ng-container *ngIf=\"count\">\n <span class=\"case-count\">\n {{ count | caseCount }}\n </span>\n </ng-container>\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 */@media screen and (max-width: 767px){.be-left-sidebar{width:100%!important}}.be-left-sidebar .left-sidebar-toggle{padding:20px}.be-left-sidebar .left-sidebar-toggle:before{font-size:1.615rem}.be-left-sidebar .sidebar-elements>li>a.be-toggle-left-sidebar{height:32px;display:flex;align-items:center}.be-left-sidebar .left-sidebar-content{padding-top:20px}.be-toggle-left-sidebar svg{margin-right:7px;min-width:21px;height:auto;overflow:visible}.be-toggle-left-sidebar svg path{transition:.27s ease;fill:#696969}::ng-deep .resize-border{position:absolute;width:3px;height:100%;top:0;right:0;cursor:col-resize;background-color:var(--cds-border-strong);opacity:0;transition:opacity .11s cubic-bezier(.2,0,1,.9)}::ng-deep .resize-hover{opacity:1}::ng-deep .resize-border--invisible{display:none}.no-transition{transition:none}.d-1{d:path(\"M3 18v-2h13v2z\")}.d-1-flipped{d:path(\"M3 18v-2h11v2z\")}.d-2{d:path(\"M3 13v-2h10v2H3\")}.d-2-flipped{d:path(\"M3 13v-2h12v2H3\")}.d-3{d:path(\"M3 6h13v2H3V6\")}.d-3-flipped{d:path(\"M3 6h11v2H3V6\")}.d-4{d:path(\"M21 15.61L19.59 17l-5.01-5 5.01-5L21 8.39 17.44 12 21 15.61\")}.d-4-flipped{d:path(\"M15.58 15.61L16.99 17 22 12l-5.01-5-1.41 1.39L19.14 12l-3.56 3.61\")}::ng-deep .cds--side-nav__menu{padding-left:0}::ng-deep .cds--side-nav__navigation{border-right:1px solid #e0e0e0;height:100%}::ng-deep .cds--side-nav--ux{width:0}::ng-deep .cds--side-nav--expanded{width:16rem}::ng-deep .cds--side-nav__header-divider{display:none!important}.menu-item-icon-container{position:relative;top:8px;left:13px;height:0}.menu-item-icon-container i{width:0px;height:16px}.menu-item--hidden{display:none}.menu-item--visible{display:block}::ng-deep .cds--side-nav__item--empty{pointer-events:none}::ng-deep .cds--side-nav__item--empty .menu-item-icon-container{display:none}::ng-deep .cds--side-nav__link[href*=\"javascript:return false;\"]{padding-right:3rem!important}.case-count{position:absolute;right:0;padding-right:1rem;height:100%;top:0;display:flex;align-items:center;justify-content:center;font-size:.875rem;letter-spacing:.1px;line-height:1.25rem;font-weight:500!important}::ng-deep .cds--side-nav__icon{margin-left:-16px}::ng-deep .cds--side-nav__item.cds--side-nav__item--icon a.cds--side-nav__link{padding-left:3.5rem}::ng-deep .cds--side-nav__submenu-title{padding-right:1.5rem}::ng-deep .cds--side-nav__items{display:flex!important;flex-direction:column!important;overflow:visible!important}::ng-deep .cds--side-nav__navigation{top:3rem;height:calc(100% - 3rem)!important;overflow-x:hidden!important;overflow-y:auto!important}::ng-deep .cds--side-nav__navigation:not(.cds--side-nav--expanded){width:0}\n"] }]
141
- }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i0.ElementRef }, { type: i2.ConfigService }, { type: i3.MenuService }, { type: i4.ShellService }, { type: i5.BreakpointObserver }, { type: i6.Router }]; }, propDecorators: { toggleButtonRef: [{
142
- type: ViewChild,
143
- args: ['toggleButton']
144
- }], onPageClick: [{
145
- type: HostListener,
146
- args: ['document:click', ['$event.target']]
147
- }] } });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVmdC1zaWRlYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbGVmdC1zaWRlYmFyL2xlZnQtc2lkZWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xlZnQtc2lkZWJhci9sZWZ0LXNpZGViYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFFWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQTJCLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFZcEMsTUFBTSxPQUFPLG9CQUFvQjtJQWlDL0IsWUFDbUIsZ0JBQWtDLEVBQ2xDLFVBQXNCLEVBQ3RCLGFBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUN0QyxNQUFjO1FBTmQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQWxCMUIsK0JBQTBCLEdBQXlDLEVBQUUsQ0FBQztRQUM3RCxlQUFVLEdBQWdDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBQ3RFLHFCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUM7UUFDdEQscUJBQWdCLEdBQXVCLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7UUFDekUsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFHaEUsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBYXRDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLDBCQUEwQixDQUFDO0lBQ2hGLENBQUM7SUF2Q00sV0FBVyxDQUFDLGFBQWE7UUFDOUIsYUFBYSxDQUFDO1lBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0I7WUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjO1lBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWTtZQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQjtTQUM3QyxDQUFDO2FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLFNBQVMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUseUJBQXlCLENBQUMsRUFBRSxFQUFFO1lBQ3RGLE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksYUFBYSxDQUFDO1lBRXpFLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSx5QkFBeUIsQ0FBQyxJQUFJLGVBQWUsRUFBRTtnQkFDcEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM3QztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQXlCTSxlQUFlO1FBQ3BCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUM5RCxDQUFDO0lBQ0osQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFTSxlQUFlLENBQUMsS0FBb0IsRUFBRSxLQUFpQjtRQUM1RCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTVCLGFBQWEsQ0FBQztnQkFDWixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQjtnQkFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZO2dCQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQjthQUM3QyxDQUFDO2lCQUNDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2IsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixDQUFDLEVBQUUsRUFBRTtnQkFDdkUsSUFBSSxDQUFDLENBQUMsV0FBVyxJQUFJLHlCQUF5QixDQUFDLElBQUksZUFBZSxFQUFFO29CQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM3QztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRU0sWUFBWSxDQUFDLFFBQWdCO1FBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sb0JBQW9CLENBQUMsUUFBZ0I7UUFDMUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRTtZQUN4RSxJQUFJLG9CQUFvQixLQUFLLFFBQVEsRUFBRTtnQkFDckMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNyQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUErQjtRQUNqRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0UsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVPLDBCQUEwQjtRQUNoQyxJQUFJLENBQUMsa0JBQWtCO2FBQ3BCLE9BQU8sQ0FBQyxDQUFDLHFCQUFxQixFQUFFLHFCQUFxQixDQUFDLENBQUM7YUFDdkQsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLGFBQWEsQ0FBQztnQkFDWixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQjtnQkFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQywwQkFBMEI7YUFDN0MsQ0FBQztpQkFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNiLFNBQVMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLHlCQUF5QixDQUFDLEVBQUUsRUFBRTtnQkFDMUQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztnQkFDdEMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRW5ELElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7b0JBQ2pDLElBQUksV0FBVyxJQUFJLHlCQUF5QixFQUFFO3dCQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxDQUFDO3FCQUNyQztvQkFDRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO2lCQUNyQztnQkFFRCxJQUFJLENBQUMseUJBQXlCLEVBQUU7b0JBQzlCLElBQ0UsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksV0FBVyxJQUFJLENBQUMsZUFBZSxDQUFDO3dCQUMxRCxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxXQUFXLElBQUksZUFBZSxDQUFDLEVBQ3pEO3dCQUNBLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7cUJBQ25DO2lCQUNGO2dCQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2hELENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztpSEFwSVUsb0JBQW9CO3FHQUFwQixvQkFBb0Isc1BDdENqQyxvbEtBdUlBOzJGRGpHYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usc0JBQXNCO3VRQUtMLGVBQWU7c0JBQXpDLFNBQVM7dUJBQUMsY0FBYztnQkFHbEIsV0FBVztzQkFEakIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Rha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Q29uZmlnU2VydmljZSwgTWVudUl0ZW19IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge01lbnVTZXJ2aWNlfSBmcm9tICcuLi9tZW51L21lbnUuc2VydmljZSc7XG5pbXBvcnQge1NoZWxsU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2hlbGwuc2VydmljZSc7XG5pbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlcn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1sZWZ0LXNpZGViYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbGVmdC1zaWRlYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGVmdC1zaWRlYmFyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIExlZnRTaWRlYmFyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgndG9nZ2xlQnV0dG9uJykgdG9nZ2xlQnV0dG9uUmVmOiBFbGVtZW50UmVmO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pXG4gIHB1YmxpYyBvblBhZ2VDbGljayh0YXJnZXRFbGVtZW50KSB7XG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnNoZWxsU2VydmljZS5zaWRlQmFyRXhwYW5kZWQkLFxuICAgICAgdGhpcy5zaGVsbFNlcnZpY2UubW91c2VPblRvcEJhciQsXG4gICAgICB0aGlzLnNoZWxsU2VydmljZS5sYXJnZVNjcmVlbiQsXG4gICAgICB0aGlzLnNoZWxsU2VydmljZS5jb2xsYXBzaWJsZVdpZGVzY3JlZW5NZW51JCxcbiAgICBdKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtzaWRlQmFyRXhwYW5kZWQsIG1vdXNlT25Ub3BCYXIsIGxhcmdlU2NyZWVuLCBjb2xsYXBzaWJsZVdpZGVzY3JlZW5NZW51XSkgPT4ge1xuICAgICAgICBjb25zdCBjbGlja2VkSW5zaWRlID1cbiAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXRFbGVtZW50KSB8fCBtb3VzZU9uVG9wQmFyO1xuXG4gICAgICAgIGlmICghY2xpY2tlZEluc2lkZSAmJiAoIWxhcmdlU2NyZWVuIHx8IGNvbGxhcHNpYmxlV2lkZXNjcmVlbk1lbnUpICYmIHNpZGVCYXJFeHBhbmRlZCkge1xuICAgICAgICAgIHRoaXMuc2hlbGxTZXJ2aWNlLnNldFNpZGVCYXJFeHBhbmRlZChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGluY2x1ZGVGdW5jdGlvbk9ic2VydmFibGVzOiB7W2tleTogc3RyaW5nXTogT2JzZXJ2YWJsZTxib29sZWFuPn0gPSB7fTtcbiAgcHVibGljIHJlYWRvbmx5IG1lbnVJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8TWVudUl0ZW0+PiA9IHRoaXMubWVudVNlcnZpY2UubWVudUl0ZW1zJDtcbiAgcHVibGljIHJlYWRvbmx5IHNpZGVCYXJFeHBhbmRlZCQgPSB0aGlzLnNoZWxsU2VydmljZS5zaWRlQmFyRXhwYW5kZWQkO1xuICBwdWJsaWMgcmVhZG9ubHkgY2xvc2VzdFNlcXVlbmNlJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5tZW51U2VydmljZS5jbG9zZXN0U2VxdWVuY2UkO1xuICBwdWJsaWMgcmVhZG9ubHkgb3ZlcmZsb3dNZW51U2VxdWVuY2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICBwcml2YXRlIF9icmVha3BvaW50U3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9icmVha3BvaW50c0luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2xhc3RTbWFsbFNjcmVlbiE6IGJvb2xlYW47XG4gIHByaXZhdGUgX2xhc3RMYXJnZVNjcmVlbiE6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzaGVsbFNlcnZpY2U6IFNoZWxsU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXJcbiAgKSB7XG4gICAgdGhpcy5pbmNsdWRlRnVuY3Rpb25PYnNlcnZhYmxlcyA9IHRoaXMubWVudVNlcnZpY2UuaW5jbHVkZUZ1bmN0aW9uT2JzZXJ2YWJsZXM7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkJyZWFrcG9pbnRTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLnNoZWxsU2VydmljZS5zZXRTaWRlbmF2RWxlbWVudChcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jZHMtLXNpZGUtbmF2JylcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2JyZWFrcG9pbnRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgbmF2aWdhdGVUb1JvdXRlKHJvdXRlOiBBcnJheTxzdHJpbmc+LCBldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXkpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKHJvdXRlKTtcblxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuc2hlbGxTZXJ2aWNlLnNpZGVCYXJFeHBhbmRlZCQsXG4gICAgICAgIHRoaXMuc2hlbGxTZXJ2aWNlLmxhcmdlU2NyZWVuJCxcbiAgICAgICAgdGhpcy5zaGVsbFNlcnZpY2UuY29sbGFwc2libGVXaWRlc2NyZWVuTWVudSQsXG4gICAgICBdKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKChbc2lkZUJhckV4cGFuZGVkLCBsYXJnZVNjcmVlbiwgY29sbGFwc2libGVXaWRlc2NyZWVuTWVudV0pID0+IHtcbiAgICAgICAgICBpZiAoKCFsYXJnZVNjcmVlbiB8fCBjb2xsYXBzaWJsZVdpZGVzY3JlZW5NZW51KSAmJiBzaWRlQmFyRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2hlbGxTZXJ2aWNlLnNldFNpZGVCYXJFeHBhbmRlZChmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25SaWdodENsaWNrKHNlcXVlbmNlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aGlzLm92ZXJmbG93TWVudVNlcXVlbmNlJC5uZXh0KHNlcXVlbmNlKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBvbk92ZXJmbG93TWVudUNsb3NlZChzZXF1ZW5jZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5vdmVyZmxvd01lbnVTZXF1ZW5jZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUob3ZlcmZsb3dNZW51U2VxdWVuY2UgPT4ge1xuICAgICAgaWYgKG92ZXJmbG93TWVudVNlcXVlbmNlID09PSBzZXF1ZW5jZSkge1xuICAgICAgICB0aGlzLm92ZXJmbG93TWVudVNlcXVlbmNlJC5uZXh0KCcnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuSW5OZXdUYWIobGluazogQXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IHVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKGxpbmsgfHwgWycvJ10pKTtcblxuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuQnJlYWtwb2ludFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlclxuICAgICAgLm9ic2VydmUoWycobWF4LXdpZHRoOiAxMDU1cHgpJywgJyhtaW4td2lkdGg6IDEwNTZweCknXSlcbiAgICAgIC5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICB0aGlzLnNoZWxsU2VydmljZS5zaWRlQmFyRXhwYW5kZWQkLFxuICAgICAgICAgIHRoaXMuc2hlbGxTZXJ2aWNlLmNvbGxhcHNpYmxlV2lkZXNjcmVlbk1lbnUkLFxuICAgICAgICBdKVxuICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoW3NpZGVCYXJFeHBhbmRlZCwgY29sbGFwc2libGVXaWRlc2NyZWVuTWVudV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJyZWFrcG9pbnRzID0gc3RhdGUuYnJlYWtwb2ludHM7XG4gICAgICAgICAgICBjb25zdCBicmVha3BvaW50S2V5cyA9IE9iamVjdC5rZXlzKGJyZWFrcG9pbnRzKTtcbiAgICAgICAgICAgIGNvbnN0IHNtYWxsU2NyZWVuID0gYnJlYWtwb2ludHNbYnJlYWtwb2ludEtleXNbMF1dO1xuICAgICAgICAgICAgY29uc3QgbGFyZ2VTY3JlZW4gPSBicmVha3BvaW50c1ticmVha3BvaW50S2V5c1sxXV07XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fYnJlYWtwb2ludHNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICBpZiAoc21hbGxTY3JlZW4gfHwgY29sbGFwc2libGVXaWRlc2NyZWVuTWVudSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hlbGxTZXJ2aWNlLmNvbGxhcHNlU2lkZUJhcigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWNvbGxhcHNpYmxlV2lkZXNjcmVlbk1lbnUpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICh0aGlzLl9sYXN0U21hbGxTY3JlZW4gJiYgbGFyZ2VTY3JlZW4gJiYgIXNpZGVCYXJFeHBhbmRlZCkgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5fbGFzdExhcmdlU2NyZWVuICYmIHNtYWxsU2NyZWVuICYmIHNpZGVCYXJFeHBhbmRlZClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGVsbFNlcnZpY2UudG9nZ2xlU2lkZUJhcigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2xhc3RTbWFsbFNjcmVlbiA9IHNtYWxsU2NyZWVuO1xuICAgICAgICAgICAgdGhpcy5fbGFzdExhcmdlU2NyZWVuID0gbGFyZ2VTY3JlZW47XG4gICAgICAgICAgICB0aGlzLnNoZWxsU2VydmljZS5zZXRMYXJnZVNjcmVlbihsYXJnZVNjcmVlbik7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48Y2RzLXNpZGVuYXZcbiAgKm5nSWY9XCJ7XG4gICAgY2xvc2VzdFNlcXVlbmNlOiBjbG9zZXN0U2VxdWVuY2UkIHwgYXN5bmMsXG4gICAgb3ZlcmZsb3dNZW51U2VxdWVuY2U6IG92ZXJmbG93TWVudVNlcXVlbmNlJCB8IGFzeW5jLFxuICAgIHNpZGVCYXJFeHBhbmRlZDogc2lkZUJhckV4cGFuZGVkJCB8IGFzeW5jXG4gIH0gYXMgb2JzXCJcbiAgW2FsbG93RXhwYW5zaW9uXT1cImZhbHNlXCJcbiAgW2V4cGFuZGVkXT1cIm9icy5zaWRlQmFyRXhwYW5kZWRcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtZW51SXRlbSBvZiBtZW51SXRlbXMkIHwgYXN5bmNcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW1lbnVJdGVtLmNoaWxkcmVuXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgdG9wTWVudUl0ZW07XG4gICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgbWVudUl0ZW06IG1lbnVJdGVtLFxuICAgICAgICAgICAgY2xvc2VzdFNlcXVlbmNlOiBvYnMuY2xvc2VzdFNlcXVlbmNlLFxuICAgICAgICAgICAgb3ZlcmZsb3dNZW51U2VxdWVuY2U6IG9icy5vdmVyZmxvd01lbnVTZXF1ZW5jZVxuICAgICAgICAgIH1cbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZW51SXRlbS5jaGlsZHJlblwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIHRvcE1lbnVJdGVtO1xuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNsb3Nlc3RTZXF1ZW5jZTogb2JzLmNsb3Nlc3RTZXF1ZW5jZSxcbiAgICAgICAgICAgIG1lbnVJdGVtOiBtZW51SXRlbSxcbiAgICAgICAgICAgIG92ZXJmbG93TWVudVNlcXVlbmNlOiBvYnMub3ZlcmZsb3dNZW51U2VxdWVuY2VcbiAgICAgICAgICB9XG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJNZW51SWNvbjsgY29udGV4dDoge21lbnVJdGVtOiBtZW51SXRlbX1cIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGNkcy1zaWRlbmF2LW1lbnUgW3RpdGxlXT1cIm1lbnVJdGVtIHwgbWVudUl0ZW1UcmFuc2xhdGUgfCBhc3luY1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlsZE1lbnVJdGVtIG9mIG1lbnVJdGVtLmNoaWxkcmVuXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJ7XG4gICAgICAgICAgICAgIGNvdW50OiBjaGlsZE1lbnVJdGVtPy5jb3VudCQgJiYgKGNoaWxkTWVudUl0ZW0/LmNvdW50JCB8IGFzeW5jKSxcbiAgICAgICAgICAgICAgc2VxdWVuY2U6ICcnICsgbWVudUl0ZW0uc2VxdWVuY2UgKyBjaGlsZE1lbnVJdGVtLnNlcXVlbmNlXG4gICAgICAgICAgICB9IGFzIHZhcnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxjZHMtc2lkZW5hdi1pdGVtXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAnY2RzLS1zaWRlLW5hdl9faXRlbS0tZW1wdHknOiAhY2hpbGRNZW51SXRlbS5saW5rLFxuICAgICAgICAgICAgICAgICdtZW51LWl0ZW0tLWhpZGRlbic6IGNoaWxkTWVudUl0ZW0uaW5jbHVkZUZ1bmN0aW9uICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgJ21lbnUtaXRlbS0tdmlzaWJsZSc6XG4gICAgICAgICAgICAgICAgICBjaGlsZE1lbnVJdGVtLmluY2x1ZGVGdW5jdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAoaW5jbHVkZUZ1bmN0aW9uT2JzZXJ2YWJsZXNbY2hpbGRNZW51SXRlbS50aXRsZV0gfCBhc3luYylcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIFthY3RpdmVdPVwidmFycy5zZXF1ZW5jZSA9PT0gb2JzLmNsb3Nlc3RTZXF1ZW5jZVwiXG4gICAgICAgICAgICAgIFtocmVmXT1cInZhcnM/LmNvdW50ID8gJ2phdmFzY3JpcHQ6cmV0dXJuIGZhbHNlOycgOiAnamF2YXNjcmlwdDp2b2lkKDApOydcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVUb1JvdXRlKGNoaWxkTWVudUl0ZW0ubGluaywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJvblJpZ2h0Q2xpY2sodmFycy5zZXF1ZW5jZSlcIlxuICAgICAgICAgICAgICAoY3RybC1jbGljayk9XCJvcGVuSW5OZXdUYWIoY2hpbGRNZW51SXRlbS5saW5rKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx2YWx0aW1vLW1lbnUtaXRlbS10ZXh0XG4gICAgICAgICAgICAgICAgW2FjY2VudF09XCIhY2hpbGRNZW51SXRlbS5saW5rXCJcbiAgICAgICAgICAgICAgICBbbWVudUl0ZW1dPVwiY2hpbGRNZW51SXRlbVwiXG4gICAgICAgICAgICAgICAgW3Nob3dPdmVyRmxvd01lbnVdPVwib2JzLm92ZXJmbG93TWVudVNlcXVlbmNlID09PSB2YXJzLnNlcXVlbmNlXCJcbiAgICAgICAgICAgICAgICAob3BlbkluTmV3VGFiKT1cIm9wZW5Jbk5ld1RhYihjaGlsZE1lbnVJdGVtLmxpbmspXCJcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3dNZW51Q2xvc2VkKT1cIm9uT3ZlcmZsb3dNZW51Q2xvc2VkKHZhcnMuc2VxdWVuY2UpXCJcbiAgICAgICAgICAgICAgPjwvdmFsdGltby1tZW51LWl0ZW0tdGV4dD5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb3VudFRlbXBsYXRlOyBjb250ZXh0OiB7Y291bnQ6IHZhcnMuY291bnR9XCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9jZHMtc2lkZW5hdi1pdGVtPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvY2RzLXNpZGVuYXYtbWVudT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Nkcy1zaWRlbmF2PlxuXG48bmctdGVtcGxhdGUgI3N1Yk1lbnVJY29uIGxldC1tZW51SXRlbT1cIm1lbnVJdGVtXCI+XG4gIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0taWNvbi1jb250YWluZXJcIj48aSBjbGFzcz1cInt7IG1lbnVJdGVtLmljb25DbGFzcyB9fVwiPjwvaT48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjdG9wTWVudUl0ZW1cbiAgbGV0LWNsb3Nlc3RTZXF1ZW5jZT1cImNsb3Nlc3RTZXF1ZW5jZVwiXG4gIGxldC1tZW51SXRlbT1cIm1lbnVJdGVtXCJcbiAgbGV0LW92ZXJmbG93TWVudVNlcXVlbmNlPVwib3ZlcmZsb3dNZW51U2VxdWVuY2VcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwie3NlcXVlbmNlOiAnJyArIG1lbnVJdGVtLnNlcXVlbmNlfSBhcyB2YXJzXCJcbiAgICA+PGNkcy1zaWRlbmF2LWl0ZW1cbiAgICAgICpuZ0lmPVwiIW1lbnVJdGVtLmNoaWxkcmVuXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ21lbnUtaXRlbS0taGlkZGVuJzogbWVudUl0ZW0uaW5jbHVkZUZ1bmN0aW9uICE9PSB1bmRlZmluZWQsXG4gICAgICAgICdtZW51LWl0ZW0tLXZpc2libGUnOlxuICAgICAgICAgIG1lbnVJdGVtLmluY2x1ZGVGdW5jdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgKGluY2x1ZGVGdW5jdGlvbk9ic2VydmFibGVzW21lbnVJdGVtLnRpdGxlXSB8IGFzeW5jKVxuICAgICAgfVwiXG4gICAgICBbYWN0aXZlXT1cInZhcnMuc2VxdWVuY2UgPT09IGNsb3Nlc3RTZXF1ZW5jZVwiXG4gICAgICAoY2xpY2spPVwibmF2aWdhdGVUb1JvdXRlKG1lbnVJdGVtLmxpbmssICRldmVudClcIlxuICAgICAgKGNvbnRleHRtZW51KT1cIm9uUmlnaHRDbGljayh2YXJzLnNlcXVlbmNlKVwiXG4gICAgICAoY3RybC1jbGljayk9XCJvcGVuSW5OZXdUYWIobWVudUl0ZW0ubGluay5saW5rKVwiXG4gICAgICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcbiAgICA+XG4gICAgICA8dmFsdGltby1tZW51LWl0ZW0tdGV4dFxuICAgICAgICBbbWVudUl0ZW1dPVwibWVudUl0ZW1cIlxuICAgICAgICBbc2hvd092ZXJGbG93TWVudV09XCJvdmVyZmxvd01lbnVTZXF1ZW5jZSA9PT0gdmFycy5zZXF1ZW5jZVwiXG4gICAgICAgIChvcGVuSW5OZXdUYWIpPVwib3BlbkluTmV3VGFiKG1lbnVJdGVtLmxpbmsubGluaylcIlxuICAgICAgICAob3ZlcmZsb3dNZW51Q2xvc2VkKT1cIm9uT3ZlcmZsb3dNZW51Q2xvc2VkKHZhcnMuc2VxdWVuY2UpXCJcbiAgICAgID48L3ZhbHRpbW8tbWVudS1pdGVtLXRleHQ+IDwvY2RzLXNpZGVuYXYtaXRlbVxuICA+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvdW50VGVtcGxhdGUgbGV0LWNvdW50PVwiY291bnRcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvdW50XCI+XG4gICAgPHNwYW4gY2xhc3M9XCJjYXNlLWNvdW50XCI+XG4gICAgICB7eyBjb3VudCB8IGNhc2VDb3VudCB9fVxuICAgIDwvc3Bhbj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -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