@valtimo/components 12.14.0 → 13.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 (538) hide show
  1. package/assets/css/carbon.scss +6 -1
  2. package/assets/css/color.scss +1 -1
  3. package/assets/css/compatibility.scss +51 -3
  4. package/assets/css/design-tokens.css +1 -1
  5. package/assets/css/formio-carbon.scss +16 -0
  6. package/assets/css/ng-multiselect-dropdown.theme.scss +1 -1
  7. package/fesm2022/valtimo-components.mjs +1854 -2411
  8. package/fesm2022/valtimo-components.mjs.map +1 -1
  9. package/lib/components/alert/alert.component.d.ts.map +1 -1
  10. package/lib/components/bpmn-js-diagram/bpmn-js-diagram.component.d.ts +2 -2
  11. package/lib/components/bpmn-js-diagram/bpmn-js-diagram.component.d.ts.map +1 -1
  12. package/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.d.ts.map +1 -1
  13. package/lib/components/breadcrumb-navigation/breadcrumb.service.d.ts +7 -4
  14. package/lib/components/breadcrumb-navigation/breadcrumb.service.d.ts.map +1 -1
  15. package/lib/components/camunda/form/camunda-form.components.d.ts.map +1 -1
  16. package/lib/components/camunda/form/custom/camunda-custom-form.component.d.ts.map +1 -1
  17. package/lib/components/camunda/form/generated/camunda-generated-form.component.d.ts.map +1 -1
  18. package/lib/components/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.d.ts.map +1 -1
  19. package/lib/components/camunda/form/generated/formfield/camunda-formfield-generator.directive.d.ts.map +1 -1
  20. package/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.d.ts.map +1 -1
  21. package/lib/components/camunda/form/generated/formfield/date/camunda-date-formfield.component.d.ts.map +1 -1
  22. package/lib/components/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.d.ts.map +1 -1
  23. package/lib/components/camunda/form/generated/formfield/long/camunda-long-formfield.component.d.ts.map +1 -1
  24. package/lib/components/camunda/form/generated/formfield/string/camunda-string-formfield.component.d.ts.map +1 -1
  25. package/lib/components/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.d.ts.map +1 -1
  26. package/lib/components/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.d.ts.map +1 -1
  27. package/lib/components/carbon-list/CarbonListFilterPipe.directive.d.ts.map +1 -1
  28. package/lib/components/carbon-list/carbon-list.component.d.ts +3 -2
  29. package/lib/components/carbon-list/carbon-list.component.d.ts.map +1 -1
  30. package/lib/components/carbon-list/carbon-list.module.d.ts +8 -9
  31. package/lib/components/carbon-list/carbon-list.module.d.ts.map +1 -1
  32. package/lib/components/carbon-list/no-results/carbon-no-results.component.d.ts.map +1 -1
  33. package/lib/components/carbon-list/tags-modal/tags-modal.component.d.ts.map +1 -1
  34. package/lib/components/confirmation-modal/confirmation-modal.component.d.ts +1 -1
  35. package/lib/components/confirmation-modal/confirmation-modal.component.d.ts.map +1 -1
  36. package/lib/components/confirmation-modal/confirmation-modal.module.d.ts +2 -2
  37. package/lib/components/confirmation-modal/confirmation-modal.module.d.ts.map +1 -1
  38. package/lib/components/data-list/data-list.component.d.ts.map +1 -1
  39. package/lib/components/date-picker/date-picker.component.d.ts.map +1 -1
  40. package/lib/components/dropzone/dropzone.component.d.ts.map +1 -1
  41. package/lib/components/editor/editor.component.d.ts.map +1 -1
  42. package/lib/components/editor/editor.module.d.ts +2 -2
  43. package/lib/components/editor/editor.service.d.ts.map +1 -1
  44. package/lib/components/expansion-panel/expansion-panel.component.d.ts.map +1 -1
  45. package/lib/components/field-auto-focus/field-auto-focus.directive.d.ts.map +1 -1
  46. package/lib/components/file-size/file-size.pipe.d.ts.map +1 -1
  47. package/lib/components/filter-sidebar/filter-sidebar.component.d.ts.map +1 -1
  48. package/lib/components/form/form.component.d.ts.map +1 -1
  49. package/lib/components/form-io/form-io-builder.component.d.ts +14 -4
  50. package/lib/components/form-io/form-io-builder.component.d.ts.map +1 -1
  51. package/lib/components/form-io/form-io-builder.utils.d.ts.map +1 -1
  52. package/lib/components/form-io/form-io-currency/currency.component.d.ts.map +1 -1
  53. package/lib/components/form-io/form-io-currency/currency.formio.d.ts.map +1 -1
  54. package/lib/components/form-io/form-io-current-user/form-io-current-user.component.d.ts.map +1 -1
  55. package/lib/components/form-io/form-io-dummy/dummy.component.d.ts.map +1 -1
  56. package/lib/components/form-io/form-io-dummy/dummy.formio.d.ts.map +1 -1
  57. package/lib/components/form-io/form-io-iban/iban.component.d.ts.map +1 -1
  58. package/lib/components/form-io/form-io-iban/iban.formio.d.ts.map +1 -1
  59. package/lib/components/form-io/form-io-iban/iban.validators.d.ts.map +1 -1
  60. package/lib/components/form-io/form-io-uploader/form-io-uploader.component.d.ts.map +1 -1
  61. package/lib/components/form-io/form-io.component.d.ts +7 -4
  62. package/lib/components/form-io/form-io.component.d.ts.map +1 -1
  63. package/lib/components/form-io/formio-config.d.ts +1 -1
  64. package/lib/components/form-io/formio-config.d.ts.map +1 -1
  65. package/lib/components/form-io/services/form-io.tags.service.d.ts +11 -0
  66. package/lib/components/form-io/services/form-io.tags.service.d.ts.map +1 -0
  67. package/lib/components/input/input.component.d.ts +3 -0
  68. package/lib/components/input/input.component.d.ts.map +1 -1
  69. package/lib/components/input/input.module.d.ts +2 -3
  70. package/lib/components/input/input.module.d.ts.map +1 -1
  71. package/lib/components/input-label/input-label.component.d.ts.map +1 -1
  72. package/lib/components/left-sidebar/left-sidebar.component.d.ts +1 -1
  73. package/lib/components/left-sidebar/left-sidebar.component.d.ts.map +1 -1
  74. package/lib/components/left-sidebar/left-sidebar.module.d.ts +2 -2
  75. package/lib/components/menu/menu-item-text.component.d.ts +1 -1
  76. package/lib/components/menu/menu-item-text.component.d.ts.map +1 -1
  77. package/lib/components/menu/menu.service.d.ts +8 -4
  78. package/lib/components/menu/menu.service.d.ts.map +1 -1
  79. package/lib/components/modal/modal.component.d.ts.map +1 -1
  80. package/lib/components/multi-input/carbon-multi-input.component.d.ts +3 -3
  81. package/lib/components/multi-input/carbon-multi-input.component.d.ts.map +1 -1
  82. package/lib/components/multi-input/carbon-multi-input.module.d.ts +10 -11
  83. package/lib/components/multi-input/carbon-multi-input.module.d.ts.map +1 -1
  84. package/lib/components/multi-input/components/key-value/key-value.component.d.ts.map +1 -1
  85. package/lib/components/multi-input/components/key-value-path-selector/key-value-path-selector.component.d.ts +3 -3
  86. package/lib/components/multi-input/components/key-value-path-selector/key-value-path-selector.component.d.ts.map +1 -1
  87. package/lib/components/multi-input/components/value-path-selector-dropdown-value/value-path-selector-dropdown-value.component.d.ts +3 -3
  88. package/lib/components/multi-input/components/value-path-selector-dropdown-value/value-path-selector-dropdown-value.component.d.ts.map +1 -1
  89. package/lib/components/multi-input/components/value-path-selector-value/value-path-selector-value.component.d.ts +3 -3
  90. package/lib/components/multi-input/components/value-path-selector-value/value-path-selector-value.component.d.ts.map +1 -1
  91. package/lib/components/multi-input-form/multi-input-form.component.d.ts +3 -0
  92. package/lib/components/multi-input-form/multi-input-form.component.d.ts.map +1 -1
  93. package/lib/components/multi-input-form/multi-input-form.module.d.ts +2 -2
  94. package/lib/components/multi-input-form/multi-input-form.module.d.ts.map +1 -1
  95. package/lib/components/multiselect-dropdown/multiselect-dropdown.component.d.ts.map +1 -1
  96. package/lib/components/page-header/page-header.component.d.ts.map +1 -1
  97. package/lib/components/page-header/page-header.module.d.ts +2 -2
  98. package/lib/components/page-subtitle/page-subtitle.component.d.ts.map +1 -1
  99. package/lib/components/page-title/page-title.component.d.ts +1 -1
  100. package/lib/components/page-title/page-title.component.d.ts.map +1 -1
  101. package/lib/components/paragraph/paragraph.component.d.ts.map +1 -1
  102. package/lib/components/progress-bar/progress-bar.component.d.ts.map +1 -1
  103. package/lib/components/prompt/prompt.component.d.ts +0 -4
  104. package/lib/components/prompt/prompt.component.d.ts.map +1 -1
  105. package/lib/components/prompt/prompt.module.d.ts +3 -4
  106. package/lib/components/prompt/prompt.module.d.ts.map +1 -1
  107. package/lib/components/radio/radio.component.d.ts.map +1 -1
  108. package/lib/components/radio/radio.module.d.ts +2 -3
  109. package/lib/components/radio/radio.module.d.ts.map +1 -1
  110. package/lib/components/render-in-body/render-in-body.component.d.ts +14 -0
  111. package/lib/components/render-in-body/render-in-body.component.d.ts.map +1 -0
  112. package/lib/components/right-sidebar/right-sidebar.component.d.ts +1 -1
  113. package/lib/components/right-sidebar/right-sidebar.component.d.ts.map +1 -1
  114. package/lib/components/search-fields/search-fields.component.d.ts +5 -5
  115. package/lib/components/search-fields/search-fields.component.d.ts.map +1 -1
  116. package/lib/components/searchable-dropdown/searchable-dropdown.component.d.ts.map +1 -1
  117. package/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.d.ts.map +1 -1
  118. package/lib/components/select/select.component.d.ts.map +1 -1
  119. package/lib/components/spinner/spinner.component.d.ts.map +1 -1
  120. package/lib/components/stepper/stepper-container/stepper-container.component.d.ts.map +1 -1
  121. package/lib/components/stepper/stepper-content/stepper-content.component.d.ts.map +1 -1
  122. package/lib/components/stepper/stepper-footer/stepper-footer.component.d.ts.map +1 -1
  123. package/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.d.ts.map +1 -1
  124. package/lib/components/stepper/stepper-header/stepper-header.component.d.ts.map +1 -1
  125. package/lib/components/stepper/stepper-step/stepper-step.component.d.ts.map +1 -1
  126. package/lib/components/stepper/stepper.module.d.ts +2 -3
  127. package/lib/components/stepper/stepper.module.d.ts.map +1 -1
  128. package/lib/components/table/table.component.d.ts.map +1 -1
  129. package/lib/components/table/table.module.d.ts +1 -1
  130. package/lib/components/timeline/timeline.component.d.ts +7 -3
  131. package/lib/components/timeline/timeline.component.d.ts.map +1 -1
  132. package/lib/components/timeline/timeline.module.d.ts +2 -1
  133. package/lib/components/timeline/timeline.module.d.ts.map +1 -1
  134. package/lib/components/tooltip-icon/tooltip-icon.component.d.ts.map +1 -1
  135. package/lib/components/topbar/topbar.component.d.ts +1 -1
  136. package/lib/components/topbar/topbar.component.d.ts.map +1 -1
  137. package/lib/components/uploader/uploader-drag-drop.directive.d.ts.map +1 -1
  138. package/lib/components/uploader/uploader.component.d.ts.map +1 -1
  139. package/lib/components/v-modal/modal.component.d.ts.map +1 -1
  140. package/lib/components/v-modal/modal.module.d.ts +2 -6
  141. package/lib/components/v-modal/modal.module.d.ts.map +1 -1
  142. package/lib/components/value-path-selector/value-path-selector.component.d.ts +11 -12
  143. package/lib/components/value-path-selector/value-path-selector.component.d.ts.map +1 -1
  144. package/lib/components/version/version.service.d.ts +1 -1
  145. package/lib/components/webcam/webcam.component.d.ts.map +1 -1
  146. package/lib/components/widget/widget.component.d.ts.map +1 -1
  147. package/lib/constants/carbon.constants.d.ts +0 -1
  148. package/lib/constants/carbon.constants.d.ts.map +1 -1
  149. package/lib/directives/{command-click/command-click.directive.d.ts → ctrl-click/ctrl-click.directive.d.ts} +2 -2
  150. package/lib/directives/ctrl-click/ctrl-click.directive.d.ts.map +1 -0
  151. package/lib/directives/digit-only/digit-only.directive.d.ts.map +1 -1
  152. package/lib/directives/fit-page/fit-page.directive.d.ts +6 -2
  153. package/lib/directives/fit-page/fit-page.directive.d.ts.map +1 -1
  154. package/lib/directives/muuri/muuri-directive.module.d.ts +10 -0
  155. package/lib/directives/muuri/muuri-directive.module.d.ts.map +1 -0
  156. package/lib/directives/muuri/muuri-item.component.d.ts +8 -0
  157. package/lib/directives/muuri/muuri-item.component.d.ts.map +1 -0
  158. package/lib/directives/muuri/muuri.directive.d.ts +27 -0
  159. package/lib/directives/muuri/muuri.directive.d.ts.map +1 -0
  160. package/lib/directives/read-only.directive.d.ts +15 -0
  161. package/lib/directives/read-only.directive.d.ts.map +1 -0
  162. package/lib/directives/remove-classnames/remove-classnames.directive.d.ts.map +1 -1
  163. package/lib/directives/render-in-page-header/render-in-page-header.directive.d.ts +1 -1
  164. package/lib/directives/render-page-header/render-page-header.directive.d.ts +1 -1
  165. package/lib/directives/render-page-subtitle/render-page-subtitle.directive.d.ts +1 -1
  166. package/lib/directives/tooltip/tooltip.component.d.ts.map +1 -1
  167. package/lib/directives/valtimo-cds-modal/valtimo-cds-modal.directive.d.ts +1 -1
  168. package/lib/directives/valtimo-cds-modal/valtimo-cds-modal.directive.d.ts.map +1 -1
  169. package/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button.directive.d.ts +3 -2
  170. package/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button.directive.d.ts.map +1 -1
  171. package/lib/models/carbon-list.model.d.ts +1 -1
  172. package/lib/models/carbon-list.model.d.ts.map +1 -1
  173. package/lib/models/form-io.model.d.ts +86 -5
  174. package/lib/models/form-io.model.d.ts.map +1 -1
  175. package/lib/models/value-path-selector.model.d.ts +1 -2
  176. package/lib/models/value-path-selector.model.d.ts.map +1 -1
  177. package/lib/modules/custom-formio-component/create-custom-component.d.ts +39 -33
  178. package/lib/modules/custom-formio-component/create-custom-component.d.ts.map +1 -1
  179. package/lib/modules/custom-formio-component/elements.common.d.ts +1 -1
  180. package/lib/modules/custom-formio-component/elements.common.d.ts.map +1 -1
  181. package/lib/modules/custom-formio-component/index.d.ts +0 -1
  182. package/lib/modules/custom-formio-component/index.d.ts.map +1 -1
  183. package/lib/modules/custom-formio-component/register-custom-component.d.ts +0 -1
  184. package/lib/modules/custom-formio-component/register-custom-component.d.ts.map +1 -1
  185. package/lib/pipes/ellipsis.pipe.d.ts.map +1 -1
  186. package/lib/pipes/menu-item-translation.pipe.d.ts +1 -1
  187. package/lib/services/choice-field.service.d.ts +1 -1
  188. package/lib/services/key-state.service.d.ts.map +1 -1
  189. package/lib/services/page-header.service.d.ts +1 -1
  190. package/lib/services/page-title.service.d.ts +1 -0
  191. package/lib/services/page-title.service.d.ts.map +1 -1
  192. package/lib/services/prompt.service.d.ts +0 -13
  193. package/lib/services/prompt.service.d.ts.map +1 -1
  194. package/lib/services/shell.service.d.ts +1 -1
  195. package/lib/services/valtimo-modal.service.d.ts +3 -3
  196. package/lib/services/valtimo-modal.service.d.ts.map +1 -1
  197. package/lib/services/value-path-selector.service.d.ts +9 -9
  198. package/lib/services/value-path-selector.service.d.ts.map +1 -1
  199. package/package.json +22 -23
  200. package/public_api.d.ts +9 -25
  201. package/public_api.d.ts.map +1 -1
  202. package/esm2022/lib/components/alert/alert.component.mjs +0 -137
  203. package/esm2022/lib/components/alert/alert.module.mjs +0 -33
  204. package/esm2022/lib/components/alert/alert.service.mjs +0 -80
  205. package/esm2022/lib/components/bpmn-js-diagram/bpmn-js-diagram.component.mjs +0 -168
  206. package/esm2022/lib/components/bpmn-js-diagram/bpmn-js-diagram.module.mjs +0 -33
  207. package/esm2022/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.mjs +0 -57
  208. package/esm2022/lib/components/breadcrumb-navigation/breadcrumb-navigation.module.mjs +0 -36
  209. package/esm2022/lib/components/breadcrumb-navigation/breadcrumb.service.mjs +0 -127
  210. package/esm2022/lib/components/button/button.component.mjs +0 -99
  211. package/esm2022/lib/components/button/button.module.mjs +0 -37
  212. package/esm2022/lib/components/camunda/form/camunda-form.components.mjs +0 -41
  213. package/esm2022/lib/components/camunda/form/camunda-form.module.mjs +0 -35
  214. package/esm2022/lib/components/camunda/form/custom/camunda-custom-form.component.mjs +0 -40
  215. package/esm2022/lib/components/camunda/form/custom/camunda-custom-form.module.mjs +0 -33
  216. package/esm2022/lib/components/camunda/form/generated/camunda-generated-form.component.mjs +0 -67
  217. package/esm2022/lib/components/camunda/form/generated/camunda-generated-form.module.mjs +0 -63
  218. package/esm2022/lib/components/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.mjs +0 -30
  219. package/esm2022/lib/components/camunda/form/generated/formfield/camunda-formfield-generator.directive.mjs +0 -63
  220. package/esm2022/lib/components/camunda/form/generated/formfield/camunda-formfield.service.mjs +0 -67
  221. package/esm2022/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.mjs +0 -41
  222. package/esm2022/lib/components/camunda/form/generated/formfield/date/camunda-date-formfield.component.mjs +0 -66
  223. package/esm2022/lib/components/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.mjs +0 -33
  224. package/esm2022/lib/components/camunda/form/generated/formfield/formfield.model.mjs +0 -17
  225. package/esm2022/lib/components/camunda/form/generated/formfield/long/camunda-long-formfield.component.mjs +0 -30
  226. package/esm2022/lib/components/camunda/form/generated/formfield/string/camunda-string-formfield.component.mjs +0 -30
  227. package/esm2022/lib/components/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.mjs +0 -30
  228. package/esm2022/lib/components/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.mjs +0 -35
  229. package/esm2022/lib/components/camunda/form/generated/formfield/validation/date.validators.mjs +0 -55
  230. package/esm2022/lib/components/carbon-list/CarbonListFilterPipe.directive.mjs +0 -34
  231. package/esm2022/lib/components/carbon-list/carbon-list.component.mjs +0 -603
  232. package/esm2022/lib/components/carbon-list/carbon-list.module.mjs +0 -103
  233. package/esm2022/lib/components/carbon-list/no-results/carbon-no-results.component.mjs +0 -71
  234. package/esm2022/lib/components/carbon-list/services/carbon-list-drag-and-drop.service.mjs +0 -165
  235. package/esm2022/lib/components/carbon-list/services/index.mjs +0 -17
  236. package/esm2022/lib/components/carbon-list/tags-modal/tags-modal.component.mjs +0 -35
  237. package/esm2022/lib/components/card/card.component.mjs +0 -34
  238. package/esm2022/lib/components/card/card.module.mjs +0 -33
  239. package/esm2022/lib/components/case-tags-selector/case-tags-selector.component.mjs +0 -80
  240. package/esm2022/lib/components/confirmation-modal/confirmation-modal.component.mjs +0 -119
  241. package/esm2022/lib/components/confirmation-modal/confirmation-modal.module.mjs +0 -50
  242. package/esm2022/lib/components/data-list/data-list.component.mjs +0 -31
  243. package/esm2022/lib/components/data-list/data-list.module.mjs +0 -33
  244. package/esm2022/lib/components/date-picker/date-picker.component.mjs +0 -166
  245. package/esm2022/lib/components/date-picker/date-picker.module.mjs +0 -40
  246. package/esm2022/lib/components/dropzone/dropzone.component.mjs +0 -168
  247. package/esm2022/lib/components/dropzone/dropzone.module.mjs +0 -37
  248. package/esm2022/lib/components/editor/editor.component.mjs +0 -189
  249. package/esm2022/lib/components/editor/editor.module.mjs +0 -34
  250. package/esm2022/lib/components/editor/editor.service.mjs +0 -87
  251. package/esm2022/lib/components/expansion-panel/expansion-panel.component.mjs +0 -41
  252. package/esm2022/lib/components/expansion-panel/expansion-panel.module.mjs +0 -35
  253. package/esm2022/lib/components/field-auto-focus/field-auto-focus.directive.mjs +0 -36
  254. package/esm2022/lib/components/field-auto-focus/field-auto-focus.module.mjs +0 -33
  255. package/esm2022/lib/components/file-size/file-size.module.mjs +0 -33
  256. package/esm2022/lib/components/file-size/file-size.pipe.mjs +0 -42
  257. package/esm2022/lib/components/filter-sidebar/filter-sidebar.component.mjs +0 -46
  258. package/esm2022/lib/components/filter-sidebar/filter-sidebar.module.mjs +0 -33
  259. package/esm2022/lib/components/form/form.component.mjs +0 -146
  260. package/esm2022/lib/components/form/form.module.mjs +0 -33
  261. package/esm2022/lib/components/form-io/form-io-builder.component.mjs +0 -82
  262. package/esm2022/lib/components/form-io/form-io-builder.utils.mjs +0 -53
  263. package/esm2022/lib/components/form-io/form-io-currency/currency-edit-form.mjs +0 -96
  264. package/esm2022/lib/components/form-io/form-io-currency/currency.component.mjs +0 -108
  265. package/esm2022/lib/components/form-io/form-io-currency/currency.formio.mjs +0 -24
  266. package/esm2022/lib/components/form-io/form-io-current-user/form-io-current-user-edit-form.mjs +0 -64
  267. package/esm2022/lib/components/form-io/form-io-current-user/form-io-current-user.component.mjs +0 -41
  268. package/esm2022/lib/components/form-io/form-io-current-user/form-io-current-user.formio.mjs +0 -34
  269. package/esm2022/lib/components/form-io/form-io-dummy/dummy.component.mjs +0 -27
  270. package/esm2022/lib/components/form-io/form-io-dummy/dummy.formio.mjs +0 -20
  271. package/esm2022/lib/components/form-io/form-io-iban/iban.component.mjs +0 -61
  272. package/esm2022/lib/components/form-io/form-io-iban/iban.formio.mjs +0 -22
  273. package/esm2022/lib/components/form-io/form-io-iban/iban.validators.mjs +0 -26
  274. package/esm2022/lib/components/form-io/form-io-resource-selector/form-io-resource-selector.formio.mjs +0 -84
  275. package/esm2022/lib/components/form-io/form-io-uploader/form-io-uploader-edit-form.mjs +0 -115
  276. package/esm2022/lib/components/form-io/form-io-uploader/form-io-uploader.component.mjs +0 -93
  277. package/esm2022/lib/components/form-io/form-io-uploader/form-io-uploader.formio.mjs +0 -49
  278. package/esm2022/lib/components/form-io/form-io.component.mjs +0 -237
  279. package/esm2022/lib/components/form-io/form-io.module.mjs +0 -127
  280. package/esm2022/lib/components/form-io/formio-config.mjs +0 -27
  281. package/esm2022/lib/components/form-io/formio-value-resolver-selector/formio-value-resolver-selector-edit-form.mjs +0 -19
  282. package/esm2022/lib/components/form-io/formio-value-resolver-selector/formio-value-resolver-selector.component.mjs +0 -57
  283. package/esm2022/lib/components/form-io/formio-value-resolver-selector/formio-value-resolver-selector.formio.mjs +0 -42
  284. package/esm2022/lib/components/form-io/services/form-io-dom.service.mjs +0 -38
  285. package/esm2022/lib/components/form-io/services/form-io-local-storage.service.mjs +0 -68
  286. package/esm2022/lib/components/form-io/services/form-io-state.service.mjs +0 -69
  287. package/esm2022/lib/components/input/input.component.mjs +0 -176
  288. package/esm2022/lib/components/input/input.module.mjs +0 -59
  289. package/esm2022/lib/components/input-label/input-label.component.mjs +0 -84
  290. package/esm2022/lib/components/input-label/input-label.module.mjs +0 -55
  291. package/esm2022/lib/components/left-sidebar/left-sidebar.component.mjs +0 -129
  292. package/esm2022/lib/components/left-sidebar/left-sidebar.module.mjs +0 -58
  293. package/esm2022/lib/components/list/ListFilterPipe.directive.mjs +0 -35
  294. package/esm2022/lib/components/list/list.component.mjs +0 -202
  295. package/esm2022/lib/components/list/list.module.mjs +0 -56
  296. package/esm2022/lib/components/menu/menu-item-text.component.mjs +0 -54
  297. package/esm2022/lib/components/menu/menu-routing.module.mjs +0 -33
  298. package/esm2022/lib/components/menu/menu.init.mjs +0 -32
  299. package/esm2022/lib/components/menu/menu.module.mjs +0 -58
  300. package/esm2022/lib/components/menu/menu.service.mjs +0 -247
  301. package/esm2022/lib/components/modal/modal.component.mjs +0 -85
  302. package/esm2022/lib/components/modal/modal.module.mjs +0 -33
  303. package/esm2022/lib/components/multi-input/carbon-multi-input.component.mjs +0 -300
  304. package/esm2022/lib/components/multi-input/carbon-multi-input.module.mjs +0 -86
  305. package/esm2022/lib/components/multi-input/components/arbitrary-amount-value/arbitrary-amount-value.component.mjs +0 -63
  306. package/esm2022/lib/components/multi-input/components/arbitrary-amount-value/index.mjs +0 -17
  307. package/esm2022/lib/components/multi-input/components/index.mjs +0 -23
  308. package/esm2022/lib/components/multi-input/components/key-dropdown-value/index.mjs +0 -17
  309. package/esm2022/lib/components/multi-input/components/key-dropdown-value/key-dropdown-value.component.mjs +0 -71
  310. package/esm2022/lib/components/multi-input/components/key-value/index.mjs +0 -17
  311. package/esm2022/lib/components/multi-input/components/key-value/key-value.component.mjs +0 -62
  312. package/esm2022/lib/components/multi-input/components/key-value-path-selector/index.mjs +0 -17
  313. package/esm2022/lib/components/multi-input/components/key-value-path-selector/key-value-path-selector.component.mjs +0 -82
  314. package/esm2022/lib/components/multi-input/components/single-value/index.mjs +0 -17
  315. package/esm2022/lib/components/multi-input/components/single-value/single-value.component.mjs +0 -49
  316. package/esm2022/lib/components/multi-input/components/value-path-selector-dropdown-value/index.mjs +0 -17
  317. package/esm2022/lib/components/multi-input/components/value-path-selector-dropdown-value/value-path-selector-dropdown-value.component.mjs +0 -92
  318. package/esm2022/lib/components/multi-input/components/value-path-selector-value/index.mjs +0 -17
  319. package/esm2022/lib/components/multi-input/components/value-path-selector-value/value-path-selector-value.component.mjs +0 -82
  320. package/esm2022/lib/components/multi-input-form/default-value.pipe.mjs +0 -33
  321. package/esm2022/lib/components/multi-input-form/multi-input-form.component.mjs +0 -201
  322. package/esm2022/lib/components/multi-input-form/multi-input-form.module.mjs +0 -58
  323. package/esm2022/lib/components/multiselect-dropdown/multiselect-dropdown.component.mjs +0 -52
  324. package/esm2022/lib/components/multiselect-dropdown/multiselect-dropdown.module.mjs +0 -35
  325. package/esm2022/lib/components/page/page-container/page-container.component.mjs +0 -29
  326. package/esm2022/lib/components/page/page-content/page-content.component.mjs +0 -29
  327. package/esm2022/lib/components/page/page-header/page-header.component.mjs +0 -29
  328. package/esm2022/lib/components/page/page-header-actions/page-header-actions.component.mjs +0 -29
  329. package/esm2022/lib/components/page/page-header-introduction/page-header-introduction.component.mjs +0 -29
  330. package/esm2022/lib/components/page/page.module.mjs +0 -60
  331. package/esm2022/lib/components/page-actions/page-actions.component.mjs +0 -82
  332. package/esm2022/lib/components/page-header/page-header.component.mjs +0 -66
  333. package/esm2022/lib/components/page-header/page-header.module.mjs +0 -55
  334. package/esm2022/lib/components/page-subtitle/page-subtitle.component.mjs +0 -53
  335. package/esm2022/lib/components/page-title/page-title.component.mjs +0 -116
  336. package/esm2022/lib/components/page-title/page-title.module.mjs +0 -35
  337. package/esm2022/lib/components/paragraph/paragraph.component.mjs +0 -50
  338. package/esm2022/lib/components/paragraph/paragraph.module.mjs +0 -37
  339. package/esm2022/lib/components/pending-changes/pending-changes.component.mjs +0 -91
  340. package/esm2022/lib/components/pending-changes/pending-changes.service.mjs +0 -37
  341. package/esm2022/lib/components/progress-bar/progress-bar.component.mjs +0 -26
  342. package/esm2022/lib/components/progress-bar/progress-bar.module.mjs +0 -33
  343. package/esm2022/lib/components/prompt/prompt.component.mjs +0 -74
  344. package/esm2022/lib/components/prompt/prompt.module.mjs +0 -39
  345. package/esm2022/lib/components/radio/radio.component.mjs +0 -116
  346. package/esm2022/lib/components/radio/radio.module.mjs +0 -55
  347. package/esm2022/lib/components/right-sidebar/right-sidebar.component.mjs +0 -309
  348. package/esm2022/lib/components/right-sidebar/right-sidebar.module.mjs +0 -98
  349. package/esm2022/lib/components/search-fields/search-fields.component.mjs +0 -241
  350. package/esm2022/lib/components/search-fields/search-fields.module.mjs +0 -90
  351. package/esm2022/lib/components/searchable-dropdown/searchable-dropdown.component.mjs +0 -201
  352. package/esm2022/lib/components/searchable-dropdown/searchable-dropdown.module.mjs +0 -34
  353. package/esm2022/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.mjs +0 -71
  354. package/esm2022/lib/components/searchable-dropdown-select/searchable-dropdown-select.module.mjs +0 -35
  355. package/esm2022/lib/components/select/select.component.mjs +0 -200
  356. package/esm2022/lib/components/select/select.module.mjs +0 -37
  357. package/esm2022/lib/components/spinner/spinner.component.mjs +0 -54
  358. package/esm2022/lib/components/spinner/spinner.module.mjs +0 -35
  359. package/esm2022/lib/components/status-selector/status-selector.component.mjs +0 -86
  360. package/esm2022/lib/components/stepper/stepper-container/stepper-container.component.mjs +0 -91
  361. package/esm2022/lib/components/stepper/stepper-content/stepper-content.component.mjs +0 -52
  362. package/esm2022/lib/components/stepper/stepper-footer/stepper-footer.component.mjs +0 -43
  363. package/esm2022/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.mjs +0 -71
  364. package/esm2022/lib/components/stepper/stepper-header/stepper-header.component.mjs +0 -37
  365. package/esm2022/lib/components/stepper/stepper-step/stepper-step.component.mjs +0 -39
  366. package/esm2022/lib/components/stepper/stepper.module.mjs +0 -68
  367. package/esm2022/lib/components/table/table.component.mjs +0 -172
  368. package/esm2022/lib/components/table/table.module.mjs +0 -58
  369. package/esm2022/lib/components/timeline/timeline.component.mjs +0 -42
  370. package/esm2022/lib/components/timeline/timeline.module.mjs +0 -35
  371. package/esm2022/lib/components/title/title.component.mjs +0 -57
  372. package/esm2022/lib/components/title/title.module.mjs +0 -36
  373. package/esm2022/lib/components/tooltip-icon/tooltip-icon.component.mjs +0 -39
  374. package/esm2022/lib/components/tooltip-icon/tooltip-icon.module.mjs +0 -39
  375. package/esm2022/lib/components/topbar/topbar.component.mjs +0 -127
  376. package/esm2022/lib/components/topbar/topbar.module.mjs +0 -36
  377. package/esm2022/lib/components/uploader/uploader-drag-drop.directive.mjs +0 -58
  378. package/esm2022/lib/components/uploader/uploader.component.mjs +0 -69
  379. package/esm2022/lib/components/uploader/uploader.module.mjs +0 -35
  380. package/esm2022/lib/components/v-card/card.component.mjs +0 -80
  381. package/esm2022/lib/components/v-card/card.module.mjs +0 -38
  382. package/esm2022/lib/components/v-modal/modal.component.mjs +0 -73
  383. package/esm2022/lib/components/v-modal/modal.module.mjs +0 -38
  384. package/esm2022/lib/components/value-path-selector/index.mjs +0 -17
  385. package/esm2022/lib/components/value-path-selector/value-path-selector.component.mjs +0 -317
  386. package/esm2022/lib/components/version/version.service.mjs +0 -38
  387. package/esm2022/lib/components/view-content/type-converters/booleanTypeConverter.mjs +0 -31
  388. package/esm2022/lib/components/view-content/type-converters/currencyTypeConverter.mjs +0 -43
  389. package/esm2022/lib/components/view-content/type-converters/dateTimeTypeConverter.mjs +0 -30
  390. package/esm2022/lib/components/view-content/type-converters/dateTypeConverter.mjs +0 -30
  391. package/esm2022/lib/components/view-content/type-converters/enumTypeConverter.mjs +0 -26
  392. package/esm2022/lib/components/view-content/type-converters/numberTypeConverter.mjs +0 -43
  393. package/esm2022/lib/components/view-content/type-converters/percentTypeConverter.mjs +0 -43
  394. package/esm2022/lib/components/view-content/type-converters/relatedFilesTypeConverter.mjs +0 -24
  395. package/esm2022/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.mjs +0 -27
  396. package/esm2022/lib/components/view-content/type-converters/stringTypeConverter.mjs +0 -28
  397. package/esm2022/lib/components/view-content/type-converters/type-converters.model.mjs +0 -80
  398. package/esm2022/lib/components/view-content/view-content.module.mjs +0 -33
  399. package/esm2022/lib/components/view-content/view-content.service.mjs +0 -49
  400. package/esm2022/lib/components/webcam/webcam.component.mjs +0 -102
  401. package/esm2022/lib/components/webcam/webcam.module.mjs +0 -34
  402. package/esm2022/lib/components/widget/widget.component.mjs +0 -89
  403. package/esm2022/lib/components/widget/widget.module.mjs +0 -33
  404. package/esm2022/lib/constants/carbon.constants.mjs +0 -21
  405. package/esm2022/lib/constants/index.mjs +0 -19
  406. package/esm2022/lib/constants/status.constants.mjs +0 -18
  407. package/esm2022/lib/constants/view-type-converter.constants.mjs +0 -18
  408. package/esm2022/lib/directives/command-click/command-click-directive.module.mjs +0 -33
  409. package/esm2022/lib/directives/command-click/command-click.directive.mjs +0 -52
  410. package/esm2022/lib/directives/digit-only/digit-only.directive.mjs +0 -283
  411. package/esm2022/lib/directives/fit-page/fit-page-directive.module.mjs +0 -33
  412. package/esm2022/lib/directives/fit-page/fit-page.directive.mjs +0 -54
  413. package/esm2022/lib/directives/remove-classnames/remove-classnames.directive.mjs +0 -53
  414. package/esm2022/lib/directives/render-in-page-header/render-in-page-header-directive.module.mjs +0 -33
  415. package/esm2022/lib/directives/render-in-page-header/render-in-page-header.directive.mjs +0 -60
  416. package/esm2022/lib/directives/render-page-header/render-page-header-directive.module.mjs +0 -33
  417. package/esm2022/lib/directives/render-page-header/render-page-header.directive.mjs +0 -56
  418. package/esm2022/lib/directives/render-page-subtitle/render-page-subtitle-directive.module.mjs +0 -33
  419. package/esm2022/lib/directives/render-page-subtitle/render-page-subtitle.directive.mjs +0 -57
  420. package/esm2022/lib/directives/tooltip/tooltip.component.mjs +0 -42
  421. package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +0 -76
  422. package/esm2022/lib/directives/tooltip/tooltip.module.mjs +0 -35
  423. package/esm2022/lib/directives/valtimo-cds-modal/valtimo-cds-modal-directive.module.mjs +0 -33
  424. package/esm2022/lib/directives/valtimo-cds-modal/valtimo-cds-modal.directive.mjs +0 -109
  425. package/esm2022/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button-directive.module.mjs +0 -33
  426. package/esm2022/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button.directive.mjs +0 -82
  427. package/esm2022/lib/guards/index.mjs +0 -17
  428. package/esm2022/lib/guards/pending-changes.guard.mjs +0 -2
  429. package/esm2022/lib/models/alert.model.mjs +0 -30
  430. package/esm2022/lib/models/button.model.mjs +0 -17
  431. package/esm2022/lib/models/carbon-list.model.mjs +0 -31
  432. package/esm2022/lib/models/carbon-pagination.model.mjs +0 -21
  433. package/esm2022/lib/models/carbon-tag.model.mjs +0 -17
  434. package/esm2022/lib/models/carbon-theme.model.mjs +0 -24
  435. package/esm2022/lib/models/choice-field.model.mjs +0 -17
  436. package/esm2022/lib/models/choicefield-value.model.mjs +0 -17
  437. package/esm2022/lib/models/documenten-api-metadata.model.mjs +0 -17
  438. package/esm2022/lib/models/editor.model.mjs +0 -22
  439. package/esm2022/lib/models/form-io.model.mjs +0 -30
  440. package/esm2022/lib/models/form.model.mjs +0 -17
  441. package/esm2022/lib/models/index.mjs +0 -47
  442. package/esm2022/lib/models/input.model.mjs +0 -17
  443. package/esm2022/lib/models/modal.model.mjs +0 -17
  444. package/esm2022/lib/models/multi-input.model.mjs +0 -17
  445. package/esm2022/lib/models/pagination.model.mjs +0 -24
  446. package/esm2022/lib/models/radio.model.mjs +0 -17
  447. package/esm2022/lib/models/right-sidebar.model.mjs +0 -17
  448. package/esm2022/lib/models/searchable-dropdown.model.mjs +0 -17
  449. package/esm2022/lib/models/select.model.mjs +0 -17
  450. package/esm2022/lib/models/sort.model.mjs +0 -17
  451. package/esm2022/lib/models/stepper.model.mjs +0 -17
  452. package/esm2022/lib/models/table.model.mjs +0 -17
  453. package/esm2022/lib/models/theme.model.mjs +0 -30
  454. package/esm2022/lib/models/timeline.model.mjs +0 -52
  455. package/esm2022/lib/models/title.model.mjs +0 -17
  456. package/esm2022/lib/models/topbar.model.mjs +0 -17
  457. package/esm2022/lib/models/value-path-selector.model.mjs +0 -36
  458. package/esm2022/lib/models/version.model.mjs +0 -17
  459. package/esm2022/lib/modules/custom-formio-component/create-custom-component.mjs +0 -162
  460. package/esm2022/lib/modules/custom-formio-component/custom-tags.service.mjs +0 -32
  461. package/esm2022/lib/modules/custom-formio-component/elements.common.mjs +0 -17
  462. package/esm2022/lib/modules/custom-formio-component/index.mjs +0 -20
  463. package/esm2022/lib/modules/custom-formio-component/register-custom-component.mjs +0 -42
  464. package/esm2022/lib/modules/index.mjs +0 -17
  465. package/esm2022/lib/pipes/case-count.pipe.mjs +0 -35
  466. package/esm2022/lib/pipes/components-pipes.module.mjs +0 -31
  467. package/esm2022/lib/pipes/ellipsis.pipe.mjs +0 -16
  468. package/esm2022/lib/pipes/index.mjs +0 -21
  469. package/esm2022/lib/pipes/is-array.pipe.mjs +0 -29
  470. package/esm2022/lib/pipes/menu-item-translation.pipe.mjs +0 -47
  471. package/esm2022/lib/services/cds-theme.service.mjs +0 -100
  472. package/esm2022/lib/services/choice-field.service.mjs +0 -70
  473. package/esm2022/lib/services/index.mjs +0 -29
  474. package/esm2022/lib/services/key-generator.service.mjs +0 -50
  475. package/esm2022/lib/services/key-state.service.mjs +0 -33
  476. package/esm2022/lib/services/modal.service.mjs +0 -148
  477. package/esm2022/lib/services/page-header.service.mjs +0 -93
  478. package/esm2022/lib/services/page-subtitle.service.mjs +0 -46
  479. package/esm2022/lib/services/page-title.service.mjs +0 -121
  480. package/esm2022/lib/services/prompt.service.mjs +0 -205
  481. package/esm2022/lib/services/shell.service.mjs +0 -213
  482. package/esm2022/lib/services/stepper.service.mjs +0 -108
  483. package/esm2022/lib/services/user-interface.service.mjs +0 -47
  484. package/esm2022/lib/services/valtimo-modal.service.mjs +0 -46
  485. package/esm2022/lib/services/value-path-selector.service.mjs +0 -110
  486. package/esm2022/public_api.mjs +0 -227
  487. package/esm2022/valtimo-components.mjs +0 -5
  488. package/lib/components/button/button.component.d.ts +0 -30
  489. package/lib/components/button/button.component.d.ts.map +0 -1
  490. package/lib/components/button/button.module.d.ts +0 -13
  491. package/lib/components/button/button.module.d.ts.map +0 -1
  492. package/lib/components/card/card.component.d.ts +0 -17
  493. package/lib/components/card/card.component.d.ts.map +0 -1
  494. package/lib/components/card/card.module.d.ts +0 -9
  495. package/lib/components/card/card.module.d.ts.map +0 -1
  496. package/lib/components/list/ListFilterPipe.directive.d.ts +0 -8
  497. package/lib/components/list/ListFilterPipe.directive.d.ts.map +0 -1
  498. package/lib/components/list/list.component.d.ts +0 -51
  499. package/lib/components/list/list.component.d.ts.map +0 -1
  500. package/lib/components/list/list.module.d.ts +0 -15
  501. package/lib/components/list/list.module.d.ts.map +0 -1
  502. package/lib/components/page/page-container/page-container.component.d.ts +0 -9
  503. package/lib/components/page/page-container/page-container.component.d.ts.map +0 -1
  504. package/lib/components/page/page-content/page-content.component.d.ts +0 -9
  505. package/lib/components/page/page-content/page-content.component.d.ts.map +0 -1
  506. package/lib/components/page/page-header/page-header.component.d.ts +0 -9
  507. package/lib/components/page/page-header/page-header.component.d.ts.map +0 -1
  508. package/lib/components/page/page-header-actions/page-header-actions.component.d.ts +0 -9
  509. package/lib/components/page/page-header-actions/page-header-actions.component.d.ts.map +0 -1
  510. package/lib/components/page/page-header-introduction/page-header-introduction.component.d.ts +0 -9
  511. package/lib/components/page/page-header-introduction/page-header-introduction.component.d.ts.map +0 -1
  512. package/lib/components/page/page.module.d.ts +0 -16
  513. package/lib/components/page/page.module.d.ts.map +0 -1
  514. package/lib/components/title/title.component.d.ts +0 -19
  515. package/lib/components/title/title.component.d.ts.map +0 -1
  516. package/lib/components/title/title.module.d.ts +0 -12
  517. package/lib/components/title/title.module.d.ts.map +0 -1
  518. package/lib/components/v-card/card.component.d.ts +0 -23
  519. package/lib/components/v-card/card.component.d.ts.map +0 -1
  520. package/lib/components/v-card/card.module.d.ts +0 -14
  521. package/lib/components/v-card/card.module.d.ts.map +0 -1
  522. package/lib/directives/command-click/command-click-directive.module.d.ts +0 -9
  523. package/lib/directives/command-click/command-click-directive.module.d.ts.map +0 -1
  524. package/lib/directives/command-click/command-click.directive.d.ts.map +0 -1
  525. package/lib/directives/fit-page/fit-page-directive.module.d.ts +0 -9
  526. package/lib/directives/fit-page/fit-page-directive.module.d.ts.map +0 -1
  527. package/lib/directives/render-in-page-header/render-in-page-header-directive.module.d.ts +0 -9
  528. package/lib/directives/render-in-page-header/render-in-page-header-directive.module.d.ts.map +0 -1
  529. package/lib/directives/render-page-header/render-page-header-directive.module.d.ts +0 -9
  530. package/lib/directives/render-page-header/render-page-header-directive.module.d.ts.map +0 -1
  531. package/lib/directives/render-page-subtitle/render-page-subtitle-directive.module.d.ts +0 -9
  532. package/lib/directives/render-page-subtitle/render-page-subtitle-directive.module.d.ts.map +0 -1
  533. package/lib/directives/valtimo-cds-modal/valtimo-cds-modal-directive.module.d.ts +0 -9
  534. package/lib/directives/valtimo-cds-modal/valtimo-cds-modal-directive.module.d.ts.map +0 -1
  535. package/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button-directive.module.d.ts +0 -9
  536. package/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button-directive.module.d.ts.map +0 -1
  537. package/lib/modules/custom-formio-component/custom-tags.service.d.ts +0 -8
  538. package/lib/modules/custom-formio-component/custom-tags.service.d.ts.map +0 -1
@@ -1,603 +0,0 @@
1
- /*
2
- * Copyright 2015-2024 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 { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
17
- import { FormControl } from '@angular/forms';
18
- import { ArrowDown16, ArrowUp16, Draggable16, SettingsView16 } from '@carbon/icons';
19
- import { Table, TableHeaderItem, TableItem, TableModel, } from 'carbon-components-angular';
20
- import { get as _get, isArray } from 'lodash';
21
- import { BehaviorSubject, combineLatest, debounceTime, map, startWith, Subscription, switchMap, take, } from 'rxjs';
22
- import { filter, tap } from 'rxjs/operators';
23
- import { BOOLEAN_CONVERTER_VALUES, CASES_WITHOUT_STATUS_KEY } from '../../constants';
24
- import { DEFAULT_LIST_TRANSLATIONS, DEFAULT_PAGINATION, DEFAULT_PAGINATOR_CONFIG, MoveRowDirection, ViewType, } from '../../models';
25
- import { CarbonListFilterPipe } from './CarbonListFilterPipe.directive';
26
- import { CarbonListDragAndDropService } from './services';
27
- import * as i0 from "@angular/core";
28
- import * as i1 from "../../pipes";
29
- import * as i2 from "./CarbonListFilterPipe.directive";
30
- import * as i3 from "carbon-components-angular";
31
- import * as i4 from "ngx-logger";
32
- import * as i5 from "@ngx-translate/core";
33
- import * as i6 from "../view-content/view-content.service";
34
- import * as i7 from "../../services/key-state.service";
35
- import * as i8 from "./services";
36
- import * as i9 from "@angular/common";
37
- import * as i10 from "@angular/forms";
38
- import * as i11 from "@ng-bootstrap/ng-bootstrap";
39
- import * as i12 from "./tags-modal/tags-modal.component";
40
- export class CarbonListComponent {
41
- get _items() {
42
- return this._items$.getValue();
43
- }
44
- get items() {
45
- return this._items;
46
- }
47
- set items(value) {
48
- this._items$.next(value);
49
- }
50
- set fields(value) {
51
- this._fields$.next(value);
52
- }
53
- set tableTranslations(value) {
54
- this._tableTranslations$.next({ ...DEFAULT_LIST_TRANSLATIONS, ...value });
55
- }
56
- set pagination(value) {
57
- if (!value) {
58
- return;
59
- }
60
- if (!this._pagination) {
61
- this._pagination = { ...DEFAULT_PAGINATION, ...value };
62
- }
63
- this._pagination = { ...this._pagination, ...value };
64
- this.buildPaginationModel();
65
- if (this._isPaginationInit || !value.size)
66
- return;
67
- this.setPaginationSize(value.size.toString());
68
- this._isPaginationInit = true;
69
- }
70
- get pagination() {
71
- return this._pagination;
72
- }
73
- set initialSortState(value) {
74
- if (!value || this._isSortInit)
75
- return;
76
- this._isSortInit = true;
77
- this.sort$.next(value);
78
- }
79
- set sortState(value) {
80
- if (!value)
81
- return;
82
- this.sort$.next(value);
83
- }
84
- static { this.PAGINATION_SIZE = 'PaginationSize'; }
85
- get selectedItems() {
86
- const model = this._table.model;
87
- return model.data.reduce((items, _, index) => model.isRowSelected(index) ? [...items, this.items[index]] : [...items], []);
88
- }
89
- get viewInitialized$() {
90
- return this._viewInitialized$.pipe(filter(initialized => initialized));
91
- }
92
- get model() {
93
- return this._table.model;
94
- }
95
- constructor(ellipsisPipe, filterPipe, iconService, logger, translateService, viewContentService, keyStateService, dragAndDropService, elementRef) {
96
- this.ellipsisPipe = ellipsisPipe;
97
- this.filterPipe = filterPipe;
98
- this.iconService = iconService;
99
- this.logger = logger;
100
- this.translateService = translateService;
101
- this.viewContentService = viewContentService;
102
- this.keyStateService = keyStateService;
103
- this.dragAndDropService = dragAndDropService;
104
- this.elementRef = elementRef;
105
- this._items$ = new BehaviorSubject([]);
106
- this.currentOpenActionId = null;
107
- this._fields$ = new BehaviorSubject([]);
108
- this._tableTranslations$ = new BehaviorSubject(DEFAULT_LIST_TRANSLATIONS);
109
- this.paginatorConfig = DEFAULT_PAGINATOR_CONFIG;
110
- this._isPaginationInit = false;
111
- /**
112
- * @deprecated The actions field is deprecated. Actions can be added through the **@Input field**.
113
- */
114
- this.actions = [];
115
- this._isSortInit = false;
116
- this.isSearchable = false;
117
- this.enableSingleSelection = false;
118
- this.showSelectionColumn = false;
119
- this.striped = false;
120
- this.hideToolbar = false;
121
- this.lockedTooltipTranslationKey = '';
122
- this.dragAndDrop = false;
123
- this.dragAndDropDisabled = false;
124
- this.rowClicked = new EventEmitter();
125
- this.paginationClicked = new EventEmitter();
126
- this.paginationSet = new EventEmitter();
127
- this.search = new EventEmitter();
128
- this.sortChanged = new EventEmitter();
129
- this.moveRow = new EventEmitter();
130
- this.itemsReordered = new EventEmitter();
131
- this.batchText$ = this._tableTranslations$.pipe(switchMap((translations) => combineLatest([
132
- this.translateService.stream(translations.select.single),
133
- this.translateService.stream(translations.select.multiple),
134
- ]).pipe(startWith(this.translateService.instant(translations.select.single), this.translateService.instant(translations.select.multiple)))), map(([SINGLE, MULTIPLE]) => ({ SINGLE, MULTIPLE })));
135
- this.paginationTranslations$ = this._tableTranslations$.pipe(switchMap((translations) => combineLatest([
136
- this.translateService.stream(translations.pagination.itemsPerPage),
137
- this.translateService.stream(translations.pagination.totalItem),
138
- this.translateService.stream(translations.pagination.totalItems),
139
- this.translateService.stream('interface.list.ofLastPage'),
140
- this.translateService.stream('interface.list.ofLastPages'),
141
- ])), map(([ITEMS_PER_PAGE, TOTAL_ITEM, TOTAL_ITEMS, OF_LAST_PAGE, OF_LAST_PAGES]) => ({
142
- ITEMS_PER_PAGE,
143
- TOTAL_ITEM,
144
- TOTAL_ITEMS,
145
- OF_LAST_PAGE,
146
- OF_LAST_PAGES,
147
- })));
148
- this.sort$ = new BehaviorSubject({
149
- state: { name: '', direction: 'DESC' },
150
- isSorting: false,
151
- });
152
- this.tagModalOpen$ = new BehaviorSubject(false);
153
- this.tagModalData$ = new BehaviorSubject([]);
154
- this.CASES_WITHOUT_STATUS_KEY = CASES_WITHOUT_STATUS_KEY;
155
- this.ViewType = ViewType;
156
- this.skeletonModel = Table.skeletonModel(5, 5);
157
- this.searchFormControl = new FormControl('');
158
- this._subscriptions = new Subscription();
159
- this._viewInitialized$ = new BehaviorSubject(false);
160
- this._translatedFields$ = this.translateService.stream('key').pipe(switchMap(() => this._fields$), filter((fields) => !!fields), map((fields) => fields.map((field) => ({
161
- ...field,
162
- label: !field.label ? '' : this.translateService.instant(field.label),
163
- }))));
164
- this._headerItems$ = combineLatest([
165
- this._translatedFields$,
166
- this.sort$,
167
- ]).pipe(map(([translatedFields, sortState]) => translatedFields.map((field) => new TableHeaderItem({
168
- data: field.label,
169
- sortable: field.sortable,
170
- className: field.className,
171
- key: field.key,
172
- sorted: sortState.isSorting && field.key === sortState.state.name,
173
- ascending: field.key === sortState.state.name && sortState.state.direction === 'ASC',
174
- }))), map((header) => [
175
- ...this.dragAndDropHeaderColumns,
176
- ...header,
177
- ...this.extraColumns,
178
- ]));
179
- this._tableItems$ = combineLatest([
180
- this._fields$,
181
- this._items$,
182
- this._viewInitialized$,
183
- ]).pipe(filter(([fields, items, viewInitialized]) => !!fields && !!items && viewInitialized), map(([fields, items]) => items.map((item, index) => [
184
- ...this.getDragAndDropItemsItems(item, index, items.length),
185
- ...fields.map((field) => {
186
- switch (field.viewType) {
187
- case ViewType.TEMPLATE:
188
- return new TableItem({
189
- data: { item, index, length: items.length, ...field.templateData },
190
- template: field.template,
191
- });
192
- case ViewType.BOOLEAN:
193
- let data = this.resolveObject(field, item);
194
- data = !BOOLEAN_CONVERTER_VALUES.includes(data)
195
- ? data
196
- : `${'viewTypeConverter.' + data}`;
197
- return new TableItem({
198
- data,
199
- template: this.booleanTemplate,
200
- });
201
- case ViewType.TAGS: {
202
- return new TableItem({
203
- data: {
204
- tags: this.resolveTagObject(item, field.key),
205
- tagAmount: field?.tagAmount || 1,
206
- },
207
- template: this.tagTemplate,
208
- });
209
- }
210
- default:
211
- const resolvedObject = this.resolveObject(field, item);
212
- return new TableItem({
213
- title: resolvedObject ?? '-',
214
- data: (field.tooltipCharLimit
215
- ? this.ellipsisPipe.transform(resolvedObject, field.tooltipCharLimit)
216
- : resolvedObject) ?? '-',
217
- template: this.defaultTemplate,
218
- item,
219
- });
220
- }
221
- }),
222
- ...this.getExtraItems(item, index, items.length),
223
- ])), tap((data) => {
224
- this._completeDataSource = data;
225
- }));
226
- this._filteredItems$ = new BehaviorSubject(null);
227
- this.model$ = combineLatest([
228
- this._headerItems$,
229
- this._tableItems$,
230
- this._filteredItems$,
231
- ]).pipe(map(([header, data, filteredData]) => {
232
- const model = new TableModel();
233
- model.header = header;
234
- model.data = filteredData ?? data;
235
- return model;
236
- }), startWith(new TableModel()));
237
- this.iconService.registerAll([ArrowDown16, ArrowUp16, SettingsView16, Draggable16]);
238
- }
239
- ngOnInit() {
240
- if (this.pagination) {
241
- this.loadPaginationSize();
242
- }
243
- this._subscriptions.add(this.searchFormControl.valueChanges
244
- .pipe(debounceTime(500))
245
- .subscribe((searchString) => {
246
- if (this.search.observed) {
247
- this.search.emit(searchString);
248
- return;
249
- }
250
- if (!searchString) {
251
- this._filteredItems$.next(null);
252
- return;
253
- }
254
- this._filteredItems$.next(this.filterPipe.transform(this._completeDataSource, searchString ?? ''));
255
- }));
256
- }
257
- ngAfterViewInit() {
258
- this._viewInitialized$.next(true);
259
- this.openDragAndDropSubscription();
260
- }
261
- ngOnDestroy() {
262
- this._subscriptions.unsubscribe();
263
- }
264
- openDragAndDropSubscription() {
265
- this._subscriptions.add(this.dragAndDropService.dragAndDropEvents$.subscribe(dragAndDropEvent => {
266
- const reorderedItems = this.swapItems(this._items, dragAndDropEvent.startIndex, dragAndDropEvent.newIndex);
267
- this.itemsReordered.emit(reorderedItems);
268
- }));
269
- }
270
- onRowClick(index) {
271
- const rowData = this._table.model.data[index];
272
- const firstItemWithData = rowData.find(item => !!item['item']);
273
- const firstItem = firstItemWithData?.['item'];
274
- if (firstItem)
275
- firstItem.ctrlClick = this.keyStateService.getCtrlOrCmdState();
276
- if (!firstItem || firstItem?.locked) {
277
- return;
278
- }
279
- this.rowClicked.emit(firstItem);
280
- }
281
- onSelectPage(page) {
282
- if (!this.paginationModel.pageLength) {
283
- return;
284
- }
285
- if (this.pagination.size !== this.paginationModel.pageLength) {
286
- this.setPaginationSize(this.paginationModel.pageLength.toString());
287
- return;
288
- }
289
- this.paginationClicked.emit(page);
290
- }
291
- onSort(headerItem) {
292
- const { key, sortable } = headerItem;
293
- if (!sortable) {
294
- return;
295
- }
296
- this.sort$.pipe(take(1)).subscribe(sort => {
297
- let newState;
298
- if (sort.state.name === key) {
299
- if (!sort.isSorting) {
300
- newState = { state: { ...sort.state, direction: 'DESC' }, isSorting: true };
301
- }
302
- else {
303
- if (sort.state.direction === 'DESC') {
304
- newState = { ...sort, state: { ...sort.state, direction: 'ASC' } };
305
- }
306
- else {
307
- newState = { state: { ...sort.state, direction: 'DESC' }, isSorting: false };
308
- }
309
- }
310
- }
311
- else {
312
- newState = { state: { name: key, direction: 'DESC' }, isSorting: true };
313
- }
314
- this.sort$.next(newState);
315
- this.sortChanged.emit(newState);
316
- });
317
- }
318
- onDragStart(mouseEvent, carbonEvent) {
319
- if (this.dragAndDropDisabled)
320
- return;
321
- this.dragAndDropService.setCarbonListElementRef(this.elementRef);
322
- this.dragAndDropService.startDrag(mouseEvent.y, carbonEvent.index);
323
- }
324
- buildPaginationModel() {
325
- this.paginationModel = {
326
- currentPage: this.pagination.page,
327
- totalDataLength: +this.pagination.collectionSize,
328
- pageLength: this.pagination.size,
329
- };
330
- }
331
- get dragAndDropHeaderColumns() {
332
- const emptyHeader = new TableHeaderItem();
333
- emptyHeader.sortable = false;
334
- return [
335
- ...(this.dragAndDrop
336
- ? [
337
- new TableHeaderItem({
338
- className: 'valtimo-carbon-list__actions',
339
- sortable: false,
340
- }),
341
- ]
342
- : []),
343
- ];
344
- }
345
- get extraColumns() {
346
- const emptyHeader = new TableHeaderItem();
347
- emptyHeader.sortable = false;
348
- return [
349
- ...(this.movingRowsEnabled
350
- ? [
351
- new TableHeaderItem({
352
- className: 'valtimo-carbon-list__actions',
353
- sortable: false,
354
- }),
355
- ]
356
- : []),
357
- ...(!!this.actions
358
- ? this.actions.map(action => new TableHeaderItem({
359
- data: action.columnName,
360
- key: action.columnName,
361
- sortable: false,
362
- }))
363
- : []),
364
- ...(!!this.lastColumnTemplate ? [emptyHeader] : []),
365
- ...(this._items?.some(item => item.locked) ? [emptyHeader] : []),
366
- ...(!!this.actionItems
367
- ? [
368
- new TableHeaderItem({
369
- className: 'valtimo-carbon-list__actions',
370
- sortable: false,
371
- }),
372
- ]
373
- : []),
374
- ];
375
- }
376
- onMoveDownClick(event, data) {
377
- event.stopImmediatePropagation();
378
- const moveRowEvent = {
379
- direction: MoveRowDirection.DOWN,
380
- index: data.index,
381
- };
382
- const orderedItems = this.swapItems(this._items, moveRowEvent.index, moveRowEvent.index + 1);
383
- this.moveRow.emit(moveRowEvent);
384
- this.itemsReordered.emit(orderedItems);
385
- }
386
- onMoveUpClick(event, data) {
387
- event.stopImmediatePropagation();
388
- const moveRowEvent = {
389
- direction: MoveRowDirection.UP,
390
- index: data.index,
391
- };
392
- const orderedItems = this.swapItems(this._items, moveRowEvent.index - 1, moveRowEvent.index);
393
- this.moveRow.emit(moveRowEvent);
394
- this.itemsReordered.emit(orderedItems);
395
- }
396
- onTagClick(event, tags) {
397
- event.stopImmediatePropagation();
398
- this.tagModalOpen$.next(true);
399
- this.tagModalData$.next(tags);
400
- }
401
- onCloseEvent() {
402
- this.tagModalOpen$.next(false);
403
- }
404
- handleActionOpenChange(actionId, isOpen) {
405
- if (isOpen) {
406
- this.currentOpenActionId = actionId;
407
- }
408
- else if (this.currentOpenActionId === actionId) {
409
- this.currentOpenActionId = null;
410
- }
411
- }
412
- getDragAndDropItemsItems(item, index, length) {
413
- return [
414
- ...(!!this.dragAndDrop
415
- ? [new TableItem({ data: { item, index, length }, template: this.dragAndDropTemplate })]
416
- : []),
417
- ];
418
- }
419
- getExtraItems(item, index, length) {
420
- return [
421
- ...(!!this.actions
422
- ? this.actions.map(action => new TableItem({
423
- data: { item, callback: action.callback, iconClass: action.iconClass },
424
- template: this.actionTemplate,
425
- }))
426
- : []),
427
- ...(this._items?.some(tableItem => tableItem.locked)
428
- ? [
429
- new TableItem({
430
- data: { locked: item.locked },
431
- template: this.rowDisabled,
432
- }),
433
- ]
434
- : []),
435
- ...(!!this.lastColumnTemplate
436
- ? [new TableItem({ data: { item, index, length }, template: this.lastColumnTemplate })]
437
- : []),
438
- ...(this.movingRowsEnabled
439
- ? [
440
- new TableItem({
441
- data: { item, index, length },
442
- template: this.moveRowsTemplate,
443
- }),
444
- ]
445
- : []),
446
- ...(!!this.actionItems
447
- ? [
448
- new TableItem({
449
- className: 'valtimo-carbon-list__actions',
450
- data: { actions: this.actionItems, item },
451
- template: this.actionsMenuTemplate,
452
- }),
453
- ]
454
- : []),
455
- ];
456
- }
457
- loadPaginationSize() {
458
- const entries = localStorage.getItem(`${this.paginationIdentifier}${CarbonListComponent.PAGINATION_SIZE}`);
459
- if (entries !== null) {
460
- this.pagination = { size: +entries };
461
- this.paginationSet.emit(+entries);
462
- this.logger.debug('Pagination loaded from local storage for this list. Current: ', entries);
463
- }
464
- else {
465
- this.logger.debug('Pagination does NOT exist in local storage for this list. Will use default. Change it to create an entry.');
466
- this.paginationSet.emit(10);
467
- }
468
- }
469
- setPaginationSize(numberOfEntries) {
470
- localStorage.setItem(`${this.paginationIdentifier}${CarbonListComponent.PAGINATION_SIZE}`, numberOfEntries);
471
- this.logger.debug('Pagination set in local storage for this list: ', numberOfEntries);
472
- this.paginationSet.emit(numberOfEntries);
473
- }
474
- resolveObject(definition, obj) {
475
- const definitionKey = definition.key;
476
- const customPropString = '$.';
477
- const key = definitionKey.includes(customPropString)
478
- ? definitionKey.split(customPropString)[1]
479
- : definitionKey;
480
- const resolvedObjValue = _get(obj, key, null);
481
- return this.viewContentService.get(resolvedObjValue, definition);
482
- }
483
- swapItems(items, index1, index2) {
484
- const itemToInsert = items[index1];
485
- const filteredItems = items.filter((_, index) => index !== index1);
486
- filteredItems.splice(index2, 0, itemToInsert);
487
- return filteredItems;
488
- }
489
- resolveTagObject(item, key) {
490
- const object = item[key];
491
- if (!object)
492
- return null;
493
- if (isArray(object) && typeof object[0] !== 'string')
494
- return object;
495
- if (!isArray(object) && typeof object !== 'string')
496
- return [object];
497
- if (typeof object === 'string')
498
- return [
499
- {
500
- content: object,
501
- type: 'blue',
502
- },
503
- ];
504
- return object.map((content) => ({
505
- content,
506
- type: 'blue',
507
- }));
508
- }
509
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CarbonListComponent, deps: [{ token: i1.EllipsisPipe }, { token: i2.CarbonListFilterPipe }, { token: i3.IconService }, { token: i4.NGXLogger }, { token: i5.TranslateService }, { token: i6.ViewContentService }, { token: i7.KeyStateService }, { token: i8.CarbonListDragAndDropService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
510
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CarbonListComponent, selector: "valtimo-carbon-list", inputs: { items: "items", fields: "fields", tableTranslations: "tableTranslations", paginatorConfig: "paginatorConfig", pagination: "pagination", loading: "loading", actions: "actions", actionItems: "actionItems", header: "header", hideColumnHeader: "hideColumnHeader", initialSortState: "initialSortState", sortState: "sortState", isSearchable: "isSearchable", enableSingleSelection: "enableSingleSelection", lastColumnTemplate: "lastColumnTemplate", paginationIdentifier: "paginationIdentifier", showSelectionColumn: "showSelectionColumn", striped: "striped", hideToolbar: "hideToolbar", lockedTooltipTranslationKey: "lockedTooltipTranslationKey", movingRowsEnabled: "movingRowsEnabled", dragAndDrop: "dragAndDrop", dragAndDropDisabled: "dragAndDropDisabled" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged", moveRow: "moveRow", itemsReordered: "itemsReordered" }, providers: [CarbonListFilterPipe, CarbonListDragAndDropService], viewQueries: [{ propertyName: "actionsMenuTemplate", first: true, predicate: ["actionsMenuTemplate"], descendants: true }, { propertyName: "actionTemplate", first: true, predicate: ["actionTemplate"], descendants: true }, { propertyName: "booleanTemplate", first: true, predicate: ["booleanTemplate"], descendants: true }, { propertyName: "moveRowsTemplate", first: true, predicate: ["moveRowsTemplate"], descendants: true }, { propertyName: "dragAndDropTemplate", first: true, predicate: ["dragAndDropTemplate"], descendants: true }, { propertyName: "rowDisabled", first: true, predicate: ["rowDisabled"], descendants: true }, { propertyName: "tagTemplate", first: true, predicate: ["tagTemplate"], descendants: true }, { propertyName: "defaultTemplate", first: true, predicate: ["defaultTemplate"], descendants: true }, { propertyName: "_table", first: true, predicate: Table, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 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<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async,\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed,\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items?.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option\n [disabled]=\"action.disabledCallback ? action.disabledCallback(data.item) : false\"\n [type]=\"action.type\"\n (selected)=\"action.callback(data.item)\"\n >\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #dragAndDropTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__draggable\">\n <button\n cdsButton=\"ghost\"\n [disabled]=\"dragAndDropDisabled\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (mousedown)=\"onDragStart($event, data)\"\n >\n <svg cdsIcon=\"draggable\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n @if (!data.tags) {\n -\n } @else {\n <div class=\"tag-template\">\n @if (data.tags.length === 0) {\n -\n } @else {\n @for (tag of data.tags.slice(0, data.tagAmount); track tag) {\n <cds-tag class=\"cds-tag--no-margin\" [type]=\"tag.type\">\n {{ tag.ellipsisContent ?? tag.content }}\n </cds-tag>\n }\n\n <cds-tag\n *ngIf=\"data.tags.length > data.tagAmount\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data.tags)\"\n >\n {{ data.tags.length - data.tagAmount }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #defaultTemplate let-data=\"data\">\n <span>{{ data }}</span>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows,.valtimo-carbon-list__draggable{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child),.valtimo-carbon-list__draggable button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}.valtimo-carbon-list ::ng-deep .cds--tag{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;line-height:24px}.valtimo-carbon-list ::ng-deep .valtimo-carbon-list__draggable .cds--btn--ghost{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row .valtimo-carbon-list__draggable .cds--btn--ghost{outline:0;border-color:var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60)));box-shadow:inset 0 0 0 1px var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60))),inset 0 0 0 2px var(--cds-background, #f4f4f4)}\n/*!\n * Copyright 2015-2024 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"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3.Pagination, selector: "cds-pagination, ibm-pagination", inputs: ["skeleton", "model", "disabled", "pageInputDisabled", "showPageInput", "pagesUnknown", "pageSelectThreshold", "translations", "itemsPerPageOptions"], outputs: ["selectPage"] }, { kind: "component", type: i3.TableToolbar, selector: "cds-table-toolbar, ibm-table-toolbar", inputs: ["model", "batchText", "ariaLabel", "cancelText", "size"], outputs: ["cancel"] }, { kind: "component", type: i3.TableContainer, selector: "cds-table-container, ibm-table-container" }, { kind: "component", type: i3.TableHeader, selector: "cds-table-header, ibm-table-header" }, { kind: "component", type: i3.TableToolbarActions, selector: "cds-table-toolbar-actions, ibm-table-toolbar-actions" }, { kind: "component", type: i3.TableToolbarSearch, selector: "cds-table-toolbar-search, ibm-table-toolbar-search" }, { kind: "component", type: i3.TableToolbarContent, selector: "cds-table-toolbar-content, ibm-table-toolbar-content" }, { kind: "component", type: i3.Table, selector: "cds-table, ibm-table", inputs: ["ariaLabelledby", "ariaDescribedby", "model", "size", "skeleton", "isDataGrid", "sortable", "noBorder", "showSelectionColumn", "enableSingleSelect", "scrollLoadDistance", "expandButtonAriaLabel", "sortDescendingLabel", "sortAscendingLabel", "translations", "striped", "stickyHeader", "footerTemplate", "selectionLabelColumn"], outputs: ["sort", "selectAll", "deselectAll", "selectRow", "deselectRow", "rowClick", "scrollLoad"] }, { kind: "component", type: i3.TableBody, selector: "[cdsTableBody], [ibmTableBody]", inputs: ["model", "enableSingleSelect", "expandButtonAriaLabel", "checkboxRowLabel", "showSelectionColumn", "size", "selectionLabelColumn", "skeleton"], outputs: ["selectRow", "deselectRow", "rowClick"] }, { kind: "directive", type: i10.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i3.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i3.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }, { kind: "directive", type: i11.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i3.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "component", type: i12.CarbonTagsModalComponent, selector: "valtimo-tags-modal", inputs: ["open", "tags"], outputs: ["closeEvent"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
511
- }
512
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CarbonListComponent, decorators: [{
513
- type: Component,
514
- args: [{ selector: 'valtimo-carbon-list', changeDetection: ChangeDetectionStrategy.OnPush, providers: [CarbonListFilterPipe, CarbonListDragAndDropService], template: "<!--\n ~ Copyright 2015-2024 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<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async,\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed,\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items?.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option\n [disabled]=\"action.disabledCallback ? action.disabledCallback(data.item) : false\"\n [type]=\"action.type\"\n (selected)=\"action.callback(data.item)\"\n >\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #dragAndDropTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__draggable\">\n <button\n cdsButton=\"ghost\"\n [disabled]=\"dragAndDropDisabled\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (mousedown)=\"onDragStart($event, data)\"\n >\n <svg cdsIcon=\"draggable\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n @if (!data.tags) {\n -\n } @else {\n <div class=\"tag-template\">\n @if (data.tags.length === 0) {\n -\n } @else {\n @for (tag of data.tags.slice(0, data.tagAmount); track tag) {\n <cds-tag class=\"cds-tag--no-margin\" [type]=\"tag.type\">\n {{ tag.ellipsisContent ?? tag.content }}\n </cds-tag>\n }\n\n <cds-tag\n *ngIf=\"data.tags.length > data.tagAmount\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data.tags)\"\n >\n {{ data.tags.length - data.tagAmount }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #defaultTemplate let-data=\"data\">\n <span>{{ data }}</span>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows,.valtimo-carbon-list__draggable{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child),.valtimo-carbon-list__draggable button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}.valtimo-carbon-list ::ng-deep .cds--tag{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;line-height:24px}.valtimo-carbon-list ::ng-deep .valtimo-carbon-list__draggable .cds--btn--ghost{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row .valtimo-carbon-list__draggable .cds--btn--ghost{outline:0;border-color:var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60)));box-shadow:inset 0 0 0 1px var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60))),inset 0 0 0 2px var(--cds-background, #f4f4f4)}\n/*!\n * Copyright 2015-2024 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"] }]
515
- }], ctorParameters: () => [{ type: i1.EllipsisPipe }, { type: i2.CarbonListFilterPipe }, { type: i3.IconService }, { type: i4.NGXLogger }, { type: i5.TranslateService }, { type: i6.ViewContentService }, { type: i7.KeyStateService }, { type: i8.CarbonListDragAndDropService }, { type: i0.ElementRef }], propDecorators: { actionsMenuTemplate: [{
516
- type: ViewChild,
517
- args: ['actionsMenuTemplate']
518
- }], actionTemplate: [{
519
- type: ViewChild,
520
- args: ['actionTemplate']
521
- }], booleanTemplate: [{
522
- type: ViewChild,
523
- args: ['booleanTemplate']
524
- }], moveRowsTemplate: [{
525
- type: ViewChild,
526
- args: ['moveRowsTemplate']
527
- }], dragAndDropTemplate: [{
528
- type: ViewChild,
529
- args: ['dragAndDropTemplate']
530
- }], rowDisabled: [{
531
- type: ViewChild,
532
- args: ['rowDisabled']
533
- }], tagTemplate: [{
534
- type: ViewChild,
535
- args: ['tagTemplate']
536
- }], defaultTemplate: [{
537
- type: ViewChild,
538
- args: ['defaultTemplate']
539
- }], _table: [{
540
- type: ViewChild,
541
- args: [Table]
542
- }], items: [{
543
- type: Input
544
- }], fields: [{
545
- type: Input
546
- }], tableTranslations: [{
547
- type: Input
548
- }], paginatorConfig: [{
549
- type: Input
550
- }], pagination: [{
551
- type: Input
552
- }], loading: [{
553
- type: Input
554
- }], actions: [{
555
- type: Input
556
- }], actionItems: [{
557
- type: Input
558
- }], header: [{
559
- type: Input
560
- }], hideColumnHeader: [{
561
- type: Input
562
- }], initialSortState: [{
563
- type: Input
564
- }], sortState: [{
565
- type: Input
566
- }], isSearchable: [{
567
- type: Input
568
- }], enableSingleSelection: [{
569
- type: Input
570
- }], lastColumnTemplate: [{
571
- type: Input
572
- }], paginationIdentifier: [{
573
- type: Input
574
- }], showSelectionColumn: [{
575
- type: Input
576
- }], striped: [{
577
- type: Input
578
- }], hideToolbar: [{
579
- type: Input
580
- }], lockedTooltipTranslationKey: [{
581
- type: Input
582
- }], movingRowsEnabled: [{
583
- type: Input
584
- }], dragAndDrop: [{
585
- type: Input
586
- }], dragAndDropDisabled: [{
587
- type: Input
588
- }], rowClicked: [{
589
- type: Output
590
- }], paginationClicked: [{
591
- type: Output
592
- }], paginationSet: [{
593
- type: Output
594
- }], search: [{
595
- type: Output
596
- }], sortChanged: [{
597
- type: Output
598
- }], moveRow: [{
599
- type: Output
600
- }], itemsReordered: [{
601
- type: Output
602
- }] } });
603
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJib24tbGlzdC9jYXJib24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhcmJvbi1saXN0L2NhcmJvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR2xGLE9BQU8sRUFLTCxLQUFLLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUMsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsWUFBWSxFQUNaLEdBQUcsRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyx3QkFBd0IsRUFBRSx3QkFBd0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FB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QUMsaUJBQWlCO2dCQUNGLE1BQU07c0JBQS9CLFNBQVM7dUJBQUMsS0FBSztnQkFjSCxLQUFLO3NCQUFqQixLQUFLO2dCQVFPLE1BQU07c0JBQWxCLEtBQUs7Z0JBUU8saUJBQWlCO3NCQUE3QixLQUFLO2dCQUlHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBS0ssVUFBVTtzQkFEcEIsS0FBSztnQkF1QkcsT0FBTztzQkFBZixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRU8sZ0JBQWdCO3NCQUE1QixLQUFLO2dCQU9PLFNBQVM7c0JBQXJCLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBSUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QXJyb3dEb3duMTYsIEFycm93VXAxNiwgRHJhZ2dhYmxlMTYsIFNldHRpbmdzVmlldzE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1NvcnRTdGF0ZX0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtcbiAgSWNvblNlcnZpY2UsXG4gIE92ZXJmbG93TWVudSxcbiAgUGFnaW5hdGlvbk1vZGVsLFxuICBQYWdpbmF0aW9uVHJhbnNsYXRpb25zLFxuICBUYWJsZSxcbiAgVGFibGVIZWFkZXJJdGVtLFxuICBUYWJsZUl0ZW0sXG4gIFRhYmxlTW9kZWwsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtnZXQgYXMgX2dldCwgaXNBcnJheX0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIHN0YXJ0V2l0aCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCT09MRUFOX0NPTlZFUlRFUl9WQUxVRVMsIENBU0VTX1dJVEhPVVRfU1RBVFVTX0tFWX0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEFjdGlvbkl0ZW0sXG4gIENhcmJvbkxpc3RCYXRjaFRleHQsXG4gIENhcmJvbkxpc3RJdGVtLFxuICBDYXJib25MaXN0VHJhbnNsYXRpb25zLFxuICBDYXJib25QYWdpbmF0b3JDb25maWcsXG4gIENhcmJvblRhZyxcbiAgQ29sdW1uQ29uZmlnLFxuICBERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TLFxuICBERUZBVUxUX1BBR0lOQVRJT04sXG4gIERFRkFVTFRfUEFHSU5BVE9SX0NPTkZJRyxcbiAgTW92ZVJvd0RpcmVjdGlvbixcbiAgTW92ZVJvd0V2ZW50LFxuICBQYWdpbmF0aW9uLFxuICBUQUdfRUxMSVBTSVNfTElNSVQsXG4gIFZpZXdUeXBlLFxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtFbGxpcHNpc1BpcGV9IGZyb20gJy4uLy4uL3BpcGVzJztcbmltcG9ydCB7S2V5U3RhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9rZXktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQge1ZpZXdDb250ZW50U2VydmljZX0gZnJvbSAnLi4vdmlldy1jb250ZW50L3ZpZXctY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7Q2FyYm9uTGlzdEZpbHRlclBpcGV9IGZyb20gJy4vQ2FyYm9uTGlzdEZpbHRlclBpcGUuZGlyZWN0aXZlJztcbmltcG9ydCB7Q2FyYm9uTGlzdERyYWdBbmREcm9wU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tY2FyYm9uLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyYm9uLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXJib24tbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbQ2FyYm9uTGlzdEZpbHRlclBpcGUsIENhcmJvbkxpc3REcmFnQW5kRHJvcFNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBDYXJib25MaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdhY3Rpb25zTWVudVRlbXBsYXRlJykgYWN0aW9uc01lbnVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8T3ZlcmZsb3dNZW51PjtcbiAgQFZpZXdDaGlsZCgnYWN0aW9uVGVtcGxhdGUnKSBhY3Rpb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnYm9vbGVhblRlbXBsYXRlJykgYm9vbGVhblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdtb3ZlUm93c1RlbXBsYXRlJykgbW92ZVJvd3NUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnZHJhZ0FuZERyb3BUZW1wbGF0ZScpIGRyYWdBbmREcm9wVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3Jvd0Rpc2FibGVkJykgcm93RGlzYWJsZWQ6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3RhZ1RlbXBsYXRlJykgdGFnVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ2RlZmF1bHRUZW1wbGF0ZScpIGRlZmF1bHRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZChUYWJsZSkgcHJpdmF0ZSBfdGFibGU6IFRhYmxlO1xuXG4gIHByaXZhdGUgX2NvbXBsZXRlRGF0YVNvdXJjZTogVGFibGVJdGVtW11bXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcmJvbkxpc3RJdGVtW10+KFtdKTtcblxuICBwcml2YXRlIGdldCBfaXRlbXMoKTogQ2FyYm9uTGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtcygpOiBDYXJib25MaXN0SXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgaXRlbXModmFsdWU6IENhcmJvbkxpc3RJdGVtW10pIHtcbiAgICB0aGlzLl9pdGVtcyQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgY3VycmVudE9wZW5BY3Rpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZmllbGRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29sdW1uQ29uZmlnW10+KFtdKTtcblxuICBASW5wdXQoKSBzZXQgZmllbGRzKHZhbHVlOiBDb2x1bW5Db25maWdbXSkge1xuICAgIHRoaXMuX2ZpZWxkcyQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF90YWJsZVRyYW5zbGF0aW9ucyQ6IEJlaGF2aW9yU3ViamVjdDxDYXJib25MaXN0VHJhbnNsYXRpb25zPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXG4gICAgREVGQVVMVF9MSVNUX1RSQU5TTEFUSU9OU1xuICApO1xuXG4gIEBJbnB1dCgpIHNldCB0YWJsZVRyYW5zbGF0aW9ucyh2YWx1ZTogUGFydGlhbDxDYXJib25MaXN0VHJhbnNsYXRpb25zPikge1xuICAgIHRoaXMuX3RhYmxlVHJhbnNsYXRpb25zJC5uZXh0KHsuLi5ERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TLCAuLi52YWx1ZX0pO1xuICB9XG5cbiAgQElucHV0KCkgcGFnaW5hdG9yQ29uZmlnOiBDYXJib25QYWdpbmF0b3JDb25maWcgPSBERUZBVUxUX1BBR0lOQVRPUl9DT05GSUc7XG4gIHByaXZhdGUgX3BhZ2luYXRpb246IFBhZ2luYXRpb247XG4gIHByaXZhdGUgX2lzUGFnaW5hdGlvbkluaXQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHBhZ2luYXRpb24odmFsdWU6IFBhcnRpYWw8UGFnaW5hdGlvbj4gfCBmYWxzZSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuX3BhZ2luYXRpb24gPSB7Li4uREVGQVVMVF9QQUdJTkFUSU9OLCAuLi52YWx1ZX07XG4gICAgfVxuXG4gICAgdGhpcy5fcGFnaW5hdGlvbiA9IHsuLi50aGlzLl9wYWdpbmF0aW9uLCAuLi52YWx1ZX07XG4gICAgdGhpcy5idWlsZFBhZ2luYXRpb25Nb2RlbCgpO1xuXG4gICAgaWYgKHRoaXMuX2lzUGFnaW5hdGlvbkluaXQgfHwgIXZhbHVlLnNpemUpIHJldHVybjtcblxuICAgIHRoaXMuc2V0UGFnaW5hdGlvblNpemUodmFsdWUuc2l6ZS50b1N0cmluZygpKTtcbiAgICB0aGlzLl9pc1BhZ2luYXRpb25Jbml0ID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFnaW5hdGlvbigpOiBQYWdpbmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbjtcbiAgfVxuXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBhY3Rpb25zIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIEFjdGlvbnMgY2FuIGJlIGFkZGVkIHRocm91Z2ggdGhlICoqQElucHV0IGZpZWxkKiouXG4gICAqL1xuICBASW5wdXQoKSBhY3Rpb25zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBhY3Rpb25JdGVtczogQWN0aW9uSXRlbVtdO1xuICBASW5wdXQoKSBoZWFkZXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhpZGVDb2x1bW5IZWFkZXI6IGJvb2xlYW47XG4gIHByaXZhdGUgX2lzU29ydEluaXQgPSBmYWxzZTtcbiAgQElucHV0KCkgc2V0IGluaXRpYWxTb3J0U3RhdGUodmFsdWU6IFNvcnRTdGF0ZSkge1xuICAgIGlmICghdmFsdWUgfHwgdGhpcy5faXNTb3J0SW5pdCkgcmV0dXJuO1xuXG4gICAgdGhpcy5faXNTb3J0SW5pdCA9IHRydWU7XG4gICAgdGhpcy5zb3J0JC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzb3J0U3RhdGUodmFsdWU6IFNvcnRTdGF0ZSkge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLnNvcnQkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCkgaXNTZWFyY2hhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZVNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGxhc3RDb2x1bW5UZW1wbGF0ZSBmaWVsZCBpcyBkZXByZWNhdGVkLiBBbnkgdGVtcGxhdGUgY29sdW1uIGNhbiBiZSBhZGRlZCB0aHJvdWdoIHRoZSAqKkBJbnB1dCBmaWVsZCoqLlxuICAgKi9cbiAgQElucHV0KCkgbGFzdENvbHVtblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBwYWdpbmF0aW9uSWRlbnRpZmllcjogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93U2VsZWN0aW9uQ29sdW1uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN0cmlwZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgaGlkZVRvb2xiYXIgPSBmYWxzZTtcbiAgQElucHV0KCkgbG9ja2VkVG9vbHRpcFRyYW5zbGF0aW9uS2V5ID0gJyc7XG4gIEBJbnB1dCgpIG1vdmluZ1Jvd3NFbmFibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSBkcmFnQW5kRHJvcCA9IGZhbHNlO1xuICBASW5wdXQoKSBkcmFnQW5kRHJvcERpc2FibGVkID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHJvd0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHBhZ2luYXRpb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBwYWdpbmF0aW9uU2V0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNvcnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0U3RhdGU+KCk7XG4gIEBPdXRwdXQoKSBtb3ZlUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxNb3ZlUm93RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBpdGVtc1Jlb3JkZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FyYm9uTGlzdEl0ZW1bXT4oKTtcblxuICBwdWJsaWMgYmF0Y2hUZXh0JDogT2JzZXJ2YWJsZTxDYXJib25MaXN0QmF0Y2hUZXh0PiA9IHRoaXMuX3RhYmxlVHJhbnNsYXRpb25zJC5waXBlKFxuICAgIHN3aXRjaE1hcCgodHJhbnNsYXRpb25zOiBDYXJib25MaXN0VHJhbnNsYXRpb25zKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnNlbGVjdC5zaW5nbGUpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5zZWxlY3QubXVsdGlwbGUpLFxuICAgICAgXSkucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRyYW5zbGF0aW9ucy5zZWxlY3Quc2luZ2xlKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0cmFuc2xhdGlvbnMuc2VsZWN0Lm11bHRpcGxlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKFtTSU5HTEUsIE1VTFRJUExFXSkgPT4gKHtTSU5HTEUsIE1VTFRJUExFfSkpXG4gICk7XG5cbiAgcHVibGljIHBhZ2luYXRpb25UcmFuc2xhdGlvbnMkOiBPYnNlcnZhYmxlPFBhcnRpYWw8UGFnaW5hdGlvblRyYW5zbGF0aW9ucz4+ID1cbiAgICB0aGlzLl90YWJsZVRyYW5zbGF0aW9ucyQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgodHJhbnNsYXRpb25zOiBDYXJib25MaXN0VHJhbnNsYXRpb25zKSA9PlxuICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5wYWdpbmF0aW9uLml0ZW1zUGVyUGFnZSksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbnMucGFnaW5hdGlvbi50b3RhbEl0ZW0pLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnBhZ2luYXRpb24udG90YWxJdGVtcyksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgnaW50ZXJmYWNlLmxpc3Qub2ZMYXN0UGFnZScpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2ludGVyZmFjZS5saXN0Lm9mTGFzdFBhZ2VzJyksXG4gICAgICAgIF0pXG4gICAgICApLFxuICAgICAgbWFwKChbSVRFTVNfUEVSX1BBR0UsIFRPVEFMX0lURU0sIFRPVEFMX0lURU1TLCBPRl9MQVNUX1BBR0UsIE9GX0xBU1RfUEFHRVNdKSA9PiAoe1xuICAgICAgICBJVEVNU19QRVJfUEFHRSxcbiAgICAgICAgVE9UQUxfSVRFTSxcbiAgICAgICAgVE9UQUxfSVRFTVMsXG4gICAgICAgIE9GX0xBU1RfUEFHRSxcbiAgICAgICAgT0ZfTEFTVF9QQUdFUyxcbiAgICAgIH0pKVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNvcnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTb3J0U3RhdGU+KHtcbiAgICBzdGF0ZToge25hbWU6ICcnLCBkaXJlY3Rpb246ICdERVNDJ30sXG4gICAgaXNTb3J0aW5nOiBmYWxzZSxcbiAgfSk7XG4gIHB1YmxpYyByZWFkb25seSB0YWdNb2RhbE9wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSB0YWdNb2RhbERhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXJib25UYWdbXT4oW10pO1xuXG4gIHB1YmxpYyByZWFkb25seSBDQVNFU19XSVRIT1VUX1NUQVRVU19LRVkgPSBDQVNFU19XSVRIT1VUX1NUQVRVU19LRVk7XG4gIHB1YmxpYyByZWFkb25seSBWaWV3VHlwZSA9IFZpZXdUeXBlO1xuICBwdWJsaWMgc2tlbGV0b25Nb2RlbCA9IFRhYmxlLnNrZWxldG9uTW9kZWwoNSwgNSk7XG4gIHB1YmxpYyBwYWdpbmF0aW9uTW9kZWw6IFBhZ2luYXRpb25Nb2RlbDtcbiAgcHVibGljIHNlYXJjaEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQQUdJTkFUSU9OX1NJWkUgPSAnUGFnaW5hdGlvblNpemUnO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtcygpOiBDYXJib25MaXN0SXRlbVtdIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuX3RhYmxlLm1vZGVsO1xuXG4gICAgcmV0dXJuIG1vZGVsLmRhdGEucmVkdWNlKFxuICAgICAgKGl0ZW1zOiBDYXJib25MaXN0SXRlbVtdLCBfLCBpbmRleDogbnVtYmVyKSA9PlxuICAgICAgICBtb2RlbC5pc1Jvd1NlbGVjdGVkKGluZGV4KSA/IFsuLi5pdGVtcywgdGhpcy5pdGVtc1tpbmRleF1dIDogWy4uLml0ZW1zXSxcbiAgICAgIFtdXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdJbml0aWFsaXplZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgZ2V0IHZpZXdJbml0aWFsaXplZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQucGlwZShmaWx0ZXIoaW5pdGlhbGl6ZWQgPT4gaW5pdGlhbGl6ZWQpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbW9kZWwoKTogVGFibGVNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlLm1vZGVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGxpcHNpc1BpcGU6IEVsbGlwc2lzUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbHRlclBpcGU6IENhcmJvbkxpc3RGaWx0ZXJQaXBlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRlbnRTZXJ2aWNlOiBWaWV3Q29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBrZXlTdGF0ZVNlcnZpY2U6IEtleVN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWdBbmREcm9wU2VydmljZTogQ2FyYm9uTGlzdERyYWdBbmREcm9wU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbQXJyb3dEb3duMTYsIEFycm93VXAxNiwgU2V0dGluZ3NWaWV3MTYsIERyYWdnYWJsZTE2XSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5sb2FkUGFnaW5hdGlvblNpemUoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApKVxuICAgICAgICAuc3Vic2NyaWJlKChzZWFyY2hTdHJpbmc6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2gub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLmVtaXQoc2VhcmNoU3RyaW5nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXNlYXJjaFN0cmluZykge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyQubmV4dChudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zJC5uZXh0KFxuICAgICAgICAgICAgdGhpcy5maWx0ZXJQaXBlLnRyYW5zZm9ybSh0aGlzLl9jb21wbGV0ZURhdGFTb3VyY2UsIHNlYXJjaFN0cmluZyA/PyAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLm9wZW5EcmFnQW5kRHJvcFN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuRHJhZ0FuZERyb3BTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmRyYWdBbmREcm9wU2VydmljZS5kcmFnQW5kRHJvcEV2ZW50cyQuc3Vic2NyaWJlKGRyYWdBbmREcm9wRXZlbnQgPT4ge1xuICAgICAgICBjb25zdCByZW9yZGVyZWRJdGVtcyA9IHRoaXMuc3dhcEl0ZW1zKFxuICAgICAgICAgIHRoaXMuX2l0ZW1zLFxuICAgICAgICAgIGRyYWdBbmREcm9wRXZlbnQuc3RhcnRJbmRleCxcbiAgICAgICAgICBkcmFnQW5kRHJvcEV2ZW50Lm5ld0luZGV4XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXRlbXNSZW9yZGVyZWQuZW1pdChyZW9yZGVyZWRJdGVtcyk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dDbGljayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuX3RhYmxlLm1vZGVsLmRhdGFbaW5kZXhdO1xuICAgIGNvbnN0IGZpcnN0SXRlbVdpdGhEYXRhID0gcm93RGF0YS5maW5kKGl0ZW0gPT4gISFpdGVtWydpdGVtJ10pO1xuICAgIGNvbnN0IGZpcnN0SXRlbSA9IGZpcnN0SXRlbVdpdGhEYXRhPy5bJ2l0ZW0nXTtcblxuICAgIGlmIChmaXJzdEl0ZW0pIGZpcnN0SXRlbS5jdHJsQ2xpY2sgPSB0aGlzLmtleVN0YXRlU2VydmljZS5nZXRDdHJsT3JDbWRTdGF0ZSgpO1xuXG4gICAgaWYgKCFmaXJzdEl0ZW0gfHwgZmlyc3RJdGVtPy5sb2NrZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yb3dDbGlja2VkLmVtaXQoZmlyc3RJdGVtKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdFBhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbi5zaXplICE9PSB0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNldFBhZ2luYXRpb25TaXplKHRoaXMucGFnaW5hdGlvbk1vZGVsLnBhZ2VMZW5ndGgudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYWdpbmF0aW9uQ2xpY2tlZC5lbWl0KHBhZ2UpO1xuICB9XG5cbiAgcHVibGljIG9uU29ydChoZWFkZXJJdGVtOiBUYWJsZUhlYWRlckl0ZW0gJiB7a2V5OiBzdHJpbmd9KTogdm9pZCB7XG4gICAgY29uc3Qge2tleSwgc29ydGFibGV9ID0gaGVhZGVySXRlbTtcbiAgICBpZiAoIXNvcnRhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzb3J0ID0+IHtcbiAgICAgIGxldCBuZXdTdGF0ZTogU29ydFN0YXRlO1xuXG4gICAgICBpZiAoc29ydC5zdGF0ZS5uYW1lID09PSBrZXkpIHtcbiAgICAgICAgaWYgKCFzb3J0LmlzU29ydGluZykge1xuICAgICAgICAgIG5ld1N0YXRlID0ge3N0YXRlOiB7Li4uc29ydC5zdGF0ZSwgZGlyZWN0aW9uOiAnREVTQyd9LCBpc1NvcnRpbmc6IHRydWV9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzb3J0LnN0YXRlLmRpcmVjdGlvbiA9PT0gJ0RFU0MnKSB7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHsuLi5zb3J0LCBzdGF0ZTogey4uLnNvcnQuc3RhdGUsIGRpcmVjdGlvbjogJ0FTQyd9fTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246ICdERVNDJ30sIGlzU29ydGluZzogZmFsc2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHtuYW1lOiBrZXksIGRpcmVjdGlvbjogJ0RFU0MnfSwgaXNTb3J0aW5nOiB0cnVlfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb3J0JC5uZXh0KG5ld1N0YXRlKTtcbiAgICAgIHRoaXMuc29ydENoYW5nZWQuZW1pdChuZXdTdGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25EcmFnU3RhcnQoXG4gICAgbW91c2VFdmVudDogTW91c2VFdmVudCxcbiAgICBjYXJib25FdmVudDoge2luZGV4OiBudW1iZXI7IGl0ZW06IENhcmJvbkxpc3RJdGVtOyBsZW5ndGg6IG51bWJlcn1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZHJhZ0FuZERyb3BEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5kcmFnQW5kRHJvcFNlcnZpY2Uuc2V0Q2FyYm9uTGlzdEVsZW1lbnRSZWYodGhpcy5lbGVtZW50UmVmKTtcbiAgICB0aGlzLmRyYWdBbmREcm9wU2VydmljZS5zdGFydERyYWcobW91c2VFdmVudC55LCBjYXJib25FdmVudC5pbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFnaW5hdGlvbk1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbk1vZGVsID0ge1xuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnaW5hdGlvbi5wYWdlLFxuICAgICAgdG90YWxEYXRhTGVuZ3RoOiArdGhpcy5wYWdpbmF0aW9uLmNvbGxlY3Rpb25TaXplLFxuICAgICAgcGFnZUxlbmd0aDogdGhpcy5wYWdpbmF0aW9uLnNpemUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyYW5zbGF0ZWRGaWVsZHMkOiBPYnNlcnZhYmxlPENvbHVtbkNvbmZpZ1tdPiA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2ZpZWxkcyQpLFxuICAgIGZpbHRlcigoZmllbGRzOiBDb2x1bW5Db25maWdbXSkgPT4gISFmaWVsZHMpLFxuICAgIG1hcCgoZmllbGRzOiBDb2x1bW5Db25maWdbXSkgPT5cbiAgICAgIGZpZWxkcy5tYXAoKGZpZWxkOiBDb2x1bW5Db25maWcpID0+ICh7XG4gICAgICAgIC4uLmZpZWxkLFxuICAgICAgICBsYWJlbDogIWZpZWxkLmxhYmVsID8gJycgOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChmaWVsZC5sYWJlbCksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSBfaGVhZGVySXRlbXMkOiBPYnNlcnZhYmxlPFRhYmxlSGVhZGVySXRlbVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX3RyYW5zbGF0ZWRGaWVsZHMkLFxuICAgIHRoaXMuc29ydCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbdHJhbnNsYXRlZEZpZWxkcywgc29ydFN0YXRlXSkgPT5cbiAgICAgIHRyYW5zbGF0ZWRGaWVsZHMubWFwKFxuICAgICAgICAoZmllbGQ6IENvbHVtbkNvbmZpZykgPT5cbiAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgIGRhdGE6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgc29ydGFibGU6IGZpZWxkLnNvcnRhYmxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBmaWVsZC5jbGFzc05hbWUsXG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHNvcnRlZDogc29ydFN0YXRlLmlzU29ydGluZyAmJiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lLFxuICAgICAgICAgICAgYXNjZW5kaW5nOiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lICYmIHNvcnRTdGF0ZS5zdGF0ZS5kaXJlY3Rpb24gPT09ICdBU0MnLFxuICAgICAgICAgIH0pXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKGhlYWRlcjogVGFibGVIZWFkZXJJdGVtW10pID0+IFtcbiAgICAgIC4uLnRoaXMuZHJhZ0FuZERyb3BIZWFkZXJDb2x1bW5zLFxuICAgICAgLi4uaGVhZGVyLFxuICAgICAgLi4udGhpcy5leHRyYUNvbHVtbnMsXG4gICAgXSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUl0ZW1zJDogT2JzZXJ2YWJsZTxUYWJsZUl0ZW1bXVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX2ZpZWxkcyQsXG4gICAgdGhpcy5faXRlbXMkLFxuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQsXG4gIF0pLnBpcGUoXG4gICAgZmlsdGVyKChbZmllbGRzLCBpdGVtcywgdmlld0luaXRpYWxpemVkXSkgPT4gISFmaWVsZHMgJiYgISFpdGVtcyAmJiB2aWV3SW5pdGlhbGl6ZWQpLFxuICAgIG1hcCgoW2ZpZWxkcywgaXRlbXNdKSA9PlxuICAgICAgaXRlbXMubWFwKChpdGVtOiBDYXJib25MaXN0SXRlbSwgaW5kZXg6IG51bWJlcikgPT4gW1xuICAgICAgICAuLi50aGlzLmdldERyYWdBbmREcm9wSXRlbXNJdGVtcyhpdGVtLCBpbmRleCwgaXRlbXMubGVuZ3RoKSxcbiAgICAgICAgLi4uZmllbGRzLm1hcCgoZmllbGQ6IENvbHVtbkNvbmZpZykgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoZmllbGQudmlld1R5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVmlld1R5cGUuVEVNUExBVEU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgaW5kZXgsIGxlbmd0aDogaXRlbXMubGVuZ3RoLCAuLi5maWVsZC50ZW1wbGF0ZURhdGF9LFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBmaWVsZC50ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYXNlIFZpZXdUeXBlLkJPT0xFQU46XG4gICAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5yZXNvbHZlT2JqZWN0KGZpZWxkLCBpdGVtKTtcbiAgICAgICAgICAgICAgZGF0YSA9ICFCT09MRUFOX0NPTlZFUlRFUl9WQUxVRVMuaW5jbHVkZXMoZGF0YSlcbiAgICAgICAgICAgICAgICA/IGRhdGFcbiAgICAgICAgICAgICAgICA6IGAkeyd2aWV3VHlwZUNvbnZlcnRlci4nICsgZGF0YX1gO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5ib29sZWFuVGVtcGxhdGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2FzZSBWaWV3VHlwZS5UQUdTOiB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICB0YWdzOiB0aGlzLnJlc29sdmVUYWdPYmplY3QoaXRlbSwgZmllbGQua2V5KSxcbiAgICAgICAgICAgICAgICAgIHRhZ0Ftb3VudDogZmllbGQ/LnRhZ0Ftb3VudCB8fCAxLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMudGFnVGVtcGxhdGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRPYmplY3Q6IHN0cmluZyA9IHRoaXMucmVzb2x2ZU9iamVjdChmaWVsZCwgaXRlbSk7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogcmVzb2x2ZWRPYmplY3QgPz8gJy0nLFxuICAgICAgICAgICAgICAgIGRhdGE6XG4gICAgICAgICAgICAgICAgICAoZmllbGQudG9vbHRpcENoYXJMaW1pdFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZWxsaXBzaXNQaXBlLnRyYW5zZm9ybShyZXNvbHZlZE9iamVjdCwgZmllbGQudG9vbHRpcENoYXJMaW1pdClcbiAgICAgICAgICAgICAgICAgICAgOiByZXNvbHZlZE9iamVjdCkgPz8gJy0nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLmRlZmF1bHRUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICAuLi50aGlzLmdldEV4dHJhSXRlbXMoaXRlbSwgaW5kZXgsIGl0ZW1zLmxlbmd0aCksXG4gICAgICBdKVxuICAgICksXG4gICAgdGFwKChkYXRhOiBUYWJsZUl0ZW1bXVtdKSA9PiB7XG4gICAgICB0aGlzLl9jb21wbGV0ZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyZWRJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlSXRlbVtdW10gfCBudWxsPihudWxsKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbW9kZWwkOiBPYnNlcnZhYmxlPFRhYmxlTW9kZWw+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5faGVhZGVySXRlbXMkLFxuICAgIHRoaXMuX3RhYmxlSXRlbXMkLFxuICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2hlYWRlciwgZGF0YSwgZmlsdGVyZWREYXRhXSkgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBuZXcgVGFibGVNb2RlbCgpO1xuICAgICAgbW9kZWwuaGVhZGVyID0gaGVhZGVyO1xuICAgICAgbW9kZWwuZGF0YSA9IGZpbHRlcmVkRGF0YSA/PyBkYXRhO1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH0pLFxuICAgIHN0YXJ0V2l0aChuZXcgVGFibGVNb2RlbCgpKVxuICApO1xuXG4gIHByaXZhdGUgZ2V0IGRyYWdBbmREcm9wSGVhZGVyQ29sdW1ucygpOiBUYWJsZUhlYWRlckl0ZW1bXSB7XG4gICAgY29uc3QgZW1wdHlIZWFkZXIgPSBuZXcgVGFibGVIZWFkZXJJdGVtKCk7XG5cbiAgICBlbXB0eUhlYWRlci5zb3J0YWJsZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLih0aGlzLmRyYWdBbmREcm9wXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2FjdGlvbnMnLFxuICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldCBleHRyYUNvbHVtbnMoKTogVGFibGVIZWFkZXJJdGVtW10ge1xuICAgIGNvbnN0IGVtcHR5SGVhZGVyID0gbmV3IFRhYmxlSGVhZGVySXRlbSgpO1xuXG4gICAgZW1wdHlIZWFkZXIuc29ydGFibGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBbXG4gICAgICAuLi4odGhpcy5tb3ZpbmdSb3dzRW5hYmxlZFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUhlYWRlckl0ZW0oe1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd2YWx0aW1vLWNhcmJvbi1saXN0X19hY3Rpb25zJyxcbiAgICAgICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMuYWN0aW9uc1xuICAgICAgICA/IHRoaXMuYWN0aW9ucy5tYXAoXG4gICAgICAgICAgICBhY3Rpb24gPT5cbiAgICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgICAgZGF0YTogYWN0aW9uLmNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgICAga2V5OiBhY3Rpb24uY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMubGFzdENvbHVtblRlbXBsYXRlID8gW2VtcHR5SGVhZGVyXSA6IFtdKSxcbiAgICAgIC4uLih0aGlzLl9pdGVtcz8uc29tZShpdGVtID0+IGl0ZW0ubG9ja2VkKSA/IFtlbXB0eUhlYWRlcl0gOiBbXSksXG4gICAgICAuLi4oISF0aGlzLmFjdGlvbkl0ZW1zXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2FjdGlvbnMnLFxuICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgIF07XG4gIH1cblxuICBwdWJsaWMgb25Nb3ZlRG93bkNsaWNrKFxuICAgIGV2ZW50OiBFdmVudCxcbiAgICBkYXRhOiB7aW5kZXg6IG51bWJlcjsgaXRlbTogQ2FyYm9uTGlzdEl0ZW07IGxlbmd0aDogbnVtYmVyfVxuICApOiB2b2lkIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IG1vdmVSb3dFdmVudCA9IHtcbiAgICAgIGRpcmVjdGlvbjogTW92ZVJvd0RpcmVjdGlvbi5ET1dOLFxuICAgICAgaW5kZXg6IGRhdGEuaW5kZXgsXG4gICAgfTtcbiAgICBjb25zdCBvcmRlcmVkSXRlbXMgPSB0aGlzLnN3YXBJdGVtcyh0aGlzLl9pdGVtcywgbW92ZVJvd0V2ZW50LmluZGV4LCBtb3ZlUm93RXZlbnQuaW5kZXggKyAxKTtcblxuICAgIHRoaXMubW92ZVJvdy5lbWl0KG1vdmVSb3dFdmVudCk7XG4gICAgdGhpcy5pdGVtc1Jlb3JkZXJlZC5lbWl0KG9yZGVyZWRJdGVtcyk7XG4gIH1cblxuICBwdWJsaWMgb25Nb3ZlVXBDbGljayhcbiAgICBldmVudDogRXZlbnQsXG4gICAgZGF0YToge2luZGV4OiBudW1iZXI7IGl0ZW06IENhcmJvbkxpc3RJdGVtOyBsZW5ndGg6IG51bWJlcn1cbiAgKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBtb3ZlUm93RXZlbnQgPSB7XG4gICAgICBkaXJlY3Rpb246IE1vdmVSb3dEaXJlY3Rpb24uVVAsXG4gICAgICBpbmRleDogZGF0YS5pbmRleCxcbiAgICB9O1xuICAgIGNvbnN0IG9yZGVyZWRJdGVtcyA9IHRoaXMuc3dhcEl0ZW1zKHRoaXMuX2l0ZW1zLCBtb3ZlUm93RXZlbnQuaW5kZXggLSAxLCBtb3ZlUm93RXZlbnQuaW5kZXgpO1xuXG4gICAgdGhpcy5tb3ZlUm93LmVtaXQobW92ZVJvd0V2ZW50KTtcbiAgICB0aGlzLml0ZW1zUmVvcmRlcmVkLmVtaXQob3JkZXJlZEl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBvblRhZ0NsaWNrKGV2ZW50OiBFdmVudCwgdGFnczogQ2FyYm9uVGFnW10pOiB2b2lkIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnRhZ01vZGFsT3BlbiQubmV4dCh0cnVlKTtcbiAgICB0aGlzLnRhZ01vZGFsRGF0YSQubmV4dCh0YWdzKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsb3NlRXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy50YWdNb2RhbE9wZW4kLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUFjdGlvbk9wZW5DaGFuZ2UoYWN0aW9uSWQ6IHN0cmluZywgaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgdGhpcy5jdXJyZW50T3BlbkFjdGlvbklkID0gYWN0aW9uSWQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRPcGVuQWN0aW9uSWQgPT09IGFjdGlvbklkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPcGVuQWN0aW9uSWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHJhZ0FuZERyb3BJdGVtc0l0ZW1zKFxuICAgIGl0ZW06IENhcmJvbkxpc3RJdGVtLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgbGVuZ3RoOiBudW1iZXJcbiAgKTogVGFibGVJdGVtW10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oISF0aGlzLmRyYWdBbmREcm9wXG4gICAgICAgID8gW25ldyBUYWJsZUl0ZW0oe2RhdGE6IHtpdGVtLCBpbmRleCwgbGVuZ3RofSwgdGVtcGxhdGU6IHRoaXMuZHJhZ0FuZERyb3BUZW1wbGF0ZX0pXVxuICAgICAgICA6IFtdKSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHRyYUl0ZW1zKGl0ZW06IENhcmJvbkxpc3RJdGVtLCBpbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IFRhYmxlSXRlbVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKCEhdGhpcy5hY3Rpb25zXG4gICAgICAgID8gdGhpcy5hY3Rpb25zLm1hcChcbiAgICAgICAgICAgIGFjdGlvbiA9PlxuICAgICAgICAgICAgICBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgY2FsbGJhY2s6IGFjdGlvbi5jYWxsYmFjaywgaWNvbkNsYXNzOiBhY3Rpb24uaWNvbkNsYXNzfSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5hY3Rpb25UZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHRoaXMuX2l0ZW1zPy5zb21lKHRhYmxlSXRlbSA9PiB0YWJsZUl0ZW0ubG9ja2VkKVxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICBkYXRhOiB7bG9ja2VkOiBpdGVtLmxvY2tlZH0sXG4gICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLnJvd0Rpc2FibGVkLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMubGFzdENvbHVtblRlbXBsYXRlXG4gICAgICAgID8gW25ldyBUYWJsZUl0ZW0oe2RhdGE6IHtpdGVtLCBpbmRleCwgbGVuZ3RofSwgdGVtcGxhdGU6IHRoaXMubGFzdENvbHVtblRlbXBsYXRlfSldXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHRoaXMubW92aW5nUm93c0VuYWJsZWRcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgZGF0YToge2l0ZW0sIGluZGV4LCBsZW5ndGh9LFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5tb3ZlUm93c1RlbXBsYXRlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMuYWN0aW9uSXRlbXNcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFsdGltby1jYXJib24tbGlzdF9fYWN0aW9ucycsXG4gICAgICAgICAgICAgIGRhdGE6IHthY3Rpb25zOiB0aGlzLmFjdGlvbkl0ZW1zLCBpdGVtfSxcbiAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMuYWN0aW9uc01lbnVUZW1wbGF0ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBhZ2luYXRpb25TaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJpZXMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcbiAgICAgIGAke3RoaXMucGFnaW5hdGlvbklkZW50aWZpZXJ9JHtDYXJib25MaXN0Q29tcG9uZW50LlBBR0lOQVRJT05fU0laRX1gXG4gICAgKTtcbiAgICBpZiAoZW50cmllcyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uID0ge3NpemU6ICtlbnRyaWVzfTtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KCtlbnRyaWVzKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdQYWdpbmF0aW9uIGxvYWRlZCBmcm9tIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdC4gQ3VycmVudDogJywgZW50cmllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAnUGFnaW5hdGlvbiBkb2VzIE5PVCBleGlzdCBpbiBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIGxpc3QuIFdpbGwgdXNlIGRlZmF1bHQuIENoYW5nZSBpdCB0byBjcmVhdGUgYW4gZW50cnkuJ1xuICAgICAgKTtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KDEwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFBhZ2luYXRpb25TaXplKG51bWJlck9mRW50cmllczogc3RyaW5nKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICBgJHt0aGlzLnBhZ2luYXRpb25JZGVudGlmaWVyfSR7Q2FyYm9uTGlzdENvbXBvbmVudC5QQUdJTkFUSU9OX1NJWkV9YCxcbiAgICAgIG51bWJlck9mRW50cmllc1xuICAgICk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ1BhZ2luYXRpb24gc2V0IGluIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdDogJywgbnVtYmVyT2ZFbnRyaWVzKTtcbiAgICB0aGlzLnBhZ2luYXRpb25TZXQuZW1pdChudW1iZXJPZkVudHJpZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlT2JqZWN0KGRlZmluaXRpb246IGFueSwgb2JqOiBhbnkpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uS2V5ID0gZGVmaW5pdGlvbi5rZXk7XG4gICAgY29uc3QgY3VzdG9tUHJvcFN0cmluZyA9ICckLic7XG4gICAgY29uc3Qga2V5ID0gZGVmaW5pdGlvbktleS5pbmNsdWRlcyhjdXN0b21Qcm9wU3RyaW5nKVxuICAgICAgPyBkZWZpbml0aW9uS2V5LnNwbGl0KGN1c3RvbVByb3BTdHJpbmcpWzFdXG4gICAgICA6IGRlZmluaXRpb25LZXk7XG4gICAgY29uc3QgcmVzb2x2ZWRPYmpWYWx1ZSA9IF9nZXQob2JqLCBrZXksIG51bGwpO1xuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZW50U2VydmljZS5nZXQocmVzb2x2ZWRPYmpWYWx1ZSwgZGVmaW5pdGlvbik7XG4gIH1cblxuICBwcml2YXRlIHN3YXBJdGVtcyhpdGVtczogQ2FyYm9uTGlzdEl0ZW1bXSwgaW5kZXgxOiBudW1iZXIsIGluZGV4MjogbnVtYmVyKTogQ2FyYm9uTGlzdEl0ZW1bXSB7XG4gICAgY29uc3QgaXRlbVRvSW5zZXJ0ID0gaXRlbXNbaW5kZXgxXTtcbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gaXRlbXMuZmlsdGVyKChfLCBpbmRleCkgPT4gaW5kZXggIT09IGluZGV4MSk7XG4gICAgZmlsdGVyZWRJdGVtcy5zcGxpY2UoaW5kZXgyLCAwLCBpdGVtVG9JbnNlcnQpO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkSXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUYWdPYmplY3QoaXRlbTogQ2FyYm9uTGlzdEl0ZW0sIGtleTogc3RyaW5nKTogQ2FyYm9uVGFnW10gfCBudWxsIHtcbiAgICBjb25zdCBvYmplY3Q6IHN0cmluZyB8IHN0cmluZ1tdIHwgQ2FyYm9uVGFnIHwgQ2FyYm9uVGFnW10gPSBpdGVtW2tleV07XG5cbiAgICBpZiAoIW9iamVjdCkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoaXNBcnJheShvYmplY3QpICYmIHR5cGVvZiBvYmplY3RbMF0gIT09ICdzdHJpbmcnKSByZXR1cm4gb2JqZWN0IGFzIENhcmJvblRhZ1tdO1xuXG4gICAgaWYgKCFpc0FycmF5KG9iamVjdCkgJiYgdHlwZW9mIG9iamVjdCAhPT0gJ3N0cmluZycpIHJldHVybiBbb2JqZWN0IGFzIENhcmJvblRhZ107XG5cbiAgICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycpXG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgY29udGVudDogb2JqZWN0LFxuICAgICAgICAgIHR5cGU6ICdibHVlJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICByZXR1cm4gKG9iamVjdCBhcyBzdHJpbmdbXSkubWFwKChjb250ZW50OiBzdHJpbmcpID0+ICh7XG4gICAgICBjb250ZW50LFxuICAgICAgdHlwZTogJ2JsdWUnLFxuICAgIH0pKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuPGNkcy10YWJsZS1jb250YWluZXJcbiAgKm5nSWY9XCJ7XG4gICAgc29ydDogc29ydCQgfCBhc3luYyxcbiAgICBtb2RlbDogbW9kZWwkIHwgYXN5bmMsXG4gICAgdmlld0luaXRpYWxpemVkOiB2aWV3SW5pdGlhbGl6ZWQkIHwgYXN5bmMsXG4gIH0gYXMgb2JzXCJcbiAgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0XCJcbj5cbiAgPGNkcy10YWJsZS1oZWFkZXIgKm5nSWY9XCJoZWFkZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgPC9jZHMtdGFibGUtaGVhZGVyPlxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlt0YWJzXVwiPjwvbmctY29udGVudD5cblxuICA8Y2RzLXRhYmxlLXRvb2xiYXJcbiAgICAqbmdJZj1cIiFoaWRlVG9vbGJhclwiXG4gICAgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0X190b29sYmFyXCJcbiAgICBbbW9kZWxdPVwib2JzLm1vZGVsXCJcbiAgICBbYmF0Y2hUZXh0XT1cImJhdGNoVGV4dCQgfCBhc3luY1wiXG4gID5cbiAgICA8Y2RzLXRhYmxlLXRvb2xiYXItYWN0aW9ucz5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjYXJib25Ub29sYmFyQWN0aW9uc11cIj4gPC9uZy1jb250ZW50PlxuICAgIDwvY2RzLXRhYmxlLXRvb2xiYXItYWN0aW9ucz5cblxuICAgIDxjZHMtdGFibGUtdG9vbGJhci1jb250ZW50PlxuICAgICAgPGNkcy10YWJsZS10b29sYmFyLXNlYXJjaFxuICAgICAgICAqbmdJZj1cImlzU2VhcmNoYWJsZVwiXG4gICAgICAgIFtleHBhbmRhYmxlXT1cInRydWVcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoRm9ybUNvbnRyb2xcIlxuICAgICAgPjwvY2RzLXRhYmxlLXRvb2xiYXItc2VhcmNoPlxuXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY2FyYm9uVG9vbGJhckNvbnRlbnRdXCI+IDwvbmctY29udGVudD5cbiAgICA8L2Nkcy10YWJsZS10b29sYmFyLWNvbnRlbnQ+XG4gIDwvY2RzLXRhYmxlLXRvb2xiYXI+XG5cbiAgPGNkcy10YWJsZVxuICAgICpuZ0lmPVwiISFvYnMuc29ydFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2hlYWRlci0taGlkZGVuJzogaGlkZUNvbHVtbkhlYWRlcixcbiAgICAgICd2YWx0aW1vLWNhcmJvbi1saXN0LS11bmNsaWNrYWJsZSc6ICF0aGlzLnJvd0NsaWNrZWQub2JzZXJ2ZWQsXG4gICAgfVwiXG4gICAgW2VuYWJsZVNpbmdsZVNlbGVjdF09XCJlbmFibGVTaW5nbGVTZWxlY3RcIlxuICAgIFttb2RlbF09XCJsb2FkaW5nIHx8ICFvYnMudmlld0luaXRpYWxpemVkID8gc2tlbGV0b25Nb2RlbCA6IG9icy5tb2RlbFwiXG4gICAgW3Nob3dTZWxlY3Rpb25Db2x1bW5dPVwic2hvd1NlbGVjdGlvbkNvbHVtblwiXG4gICAgW3NrZWxldG9uXT1cImxvYWRpbmdcIlxuICAgIFtzdHJpcGVkXT1cInN0cmlwZWRcIlxuICAgIChzb3J0KT1cIm9uU29ydChvYnMubW9kZWwuaGVhZGVyWyRldmVudF0pXCJcbiAgICAocm93Q2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQpXCJcbiAgPlxuICAgIDx0Ym9keSBjZHNUYWJsZUJvZHk+XG4gICAgICA8dHIgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0X19uby1yZXN1bHRzXCI+XG4gICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cIm9icy5tb2RlbC5oZWFkZXIubGVuZ3RoICsgKHNob3dTZWxlY3Rpb25Db2x1bW4gPyAxIDogMClcIj5cbiAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvdGQ+XG5cbiAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwib2JzLm1vZGVsLmhlYWRlci5sZW5ndGggKyAoc2hvd1NlbGVjdGlvbkNvbHVtbiA/IDEgOiAwKVwiPlxuICAgICAgICAgIHt7ICdsaXN0Lm5vUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC90Ym9keT5cbiAgPC9jZHMtdGFibGU+XG5cbiAgPGNkcy1wYWdpbmF0aW9uXG4gICAgKm5nSWY9XCJwYWdpbmF0aW9uTW9kZWwgJiYgaXRlbXM/Lmxlbmd0aFwiXG4gICAgW2l0ZW1zUGVyUGFnZU9wdGlvbnNdPVwicGFnaW5hdG9yQ29uZmlnLml0ZW1zUGVyUGFnZU9wdGlvbnNcIlxuICAgIFttb2RlbF09XCJwYWdpbmF0aW9uTW9kZWxcIlxuICAgIFtzaG93UGFnZUlucHV0XT1cInBhZ2luYXRvckNvbmZpZy5zaG93UGFnZUlucHV0XCJcbiAgICBbc2tlbGV0b25dPVwibG9hZGluZ1wiXG4gICAgW3RyYW5zbGF0aW9uc109XCJwYWdpbmF0aW9uVHJhbnNsYXRpb25zJCB8IGFzeW5jXCJcbiAgICAoc2VsZWN0UGFnZSk9XCJvblNlbGVjdFBhZ2UoJGV2ZW50KVwiXG4gID48L2Nkcy1wYWdpbmF0aW9uPlxuPC9jZHMtdGFibGUtY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2FjdGlvblRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8aVxuICAgIGNsYXNzPVwiY2xpY2thYmxlXCJcbiAgICBbbmdDbGFzc109XCJkYXRhLmljb25DbGFzc1wiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgZGF0YS5jYWxsYmFjayhkYXRhLml0ZW0pXCJcbiAgPjwvaT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYm9vbGVhblRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICB7eyBkYXRhIHwgdHJhbnNsYXRlIH19XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FjdGlvbnNNZW51VGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxjZHMtb3ZlcmZsb3ctbWVudVxuICAgIFtvcGVuXT1cImN1cnJlbnRPcGVuQWN0aW9uSWQgPT09IGRhdGEuaXRlbVwiXG4gICAgKG9wZW5DaGFuZ2UpPVwiaGFuZGxlQWN0aW9uT3BlbkNoYW5nZShkYXRhLml0ZW0sICRldmVudClcIlxuICAgIFtmbGlwXT1cInRydWVcIlxuICAgIFtvZmZzZXRdPVwie3g6IDAsIHk6IDUwfVwiXG4gICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgPlxuICAgIEBmb3IgKGFjdGlvbiBvZiBkYXRhLmFjdGlvbnM7IHRyYWNrIGFjdGlvbi5sYWJlbCkge1xuICAgICAgPGNkcy1vdmVyZmxvdy1tZW51LW9wdGlvblxuICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkQ2FsbGJhY2sgPyBhY3Rpb24uZGlzYWJsZWRDYWxsYmFjayhkYXRhLml0ZW0pIDogZmFsc2VcIlxuICAgICAgICBbdHlwZV09XCJhY3Rpb24udHlwZVwiXG4gICAgICAgIChzZWxlY3RlZCk9XCJhY3Rpb24uY2FsbGJhY2soZGF0YS5pdGVtKVwiXG4gICAgICA+XG4gICAgICAgIDxpICpuZ0lmPVwiISFhY3Rpb24uaWNvbkNsYXNzXCIgW25nQ2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiPjwvaT5cblxuICAgICAgICB7eyBhY3Rpb24ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvY2RzLW92ZXJmbG93LW1lbnUtb3B0aW9uPlxuICAgIH1cbiAgPC9jZHMtb3ZlcmZsb3ctbWVudT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcm93RGlzYWJsZWQgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxkaXYgKm5nSWY9XCJkYXRhLmxvY2tlZFwiIGNsYXNzPVwibG9ja2VkXCI+XG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPVwiZmxvYXQtcmlnaHQgYmFkZ2UgYmFkZ2UtcGlsbCBiYWRnZS1zZWNvbmRhcnkgYmctZ3JleVwiXG4gICAgICBuZ2JUb29sdGlwPVwie3sgbG9ja2VkVG9vbHRpcFRyYW5zbGF0aW9uS2V5IHwgdHJhbnNsYXRlIH19XCJcbiAgICA+XG4gICAgICA8aSBjbGFzcz1cImljb24gbWRpIG1kaS1sb2NrXCI+PC9pPlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vdmVSb3dzVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxkaXYgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0X19tb3ZlLXJvd3NcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJ0ZXJ0aWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGF0YS5pbmRleCA9PT0gMFwiXG4gICAgICBbaWNvbk9ubHldPVwidHJ1ZVwiXG4gICAgICBzaXplPVwic21cIlxuICAgICAgKGNsaWNrKT1cIm9uTW92ZVVwQ2xpY2soJGV2ZW50LCBkYXRhKVwiXG4gICAgPlxuICAgICAgPHN2ZyBjZHNJY29uPVwiYXJyb3ctLXVwXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvblxuICAgICAgY2RzQnV0dG9uPVwidGVydGlhcnlcIlxuICAgICAgW2Rpc2FibGVkXT1cImRhdGEuaW5kZXggPT09IGRhdGEubGVuZ3RoIC0gMVwiXG4gICAgICBbaWNvbk9ubHldPVwidHJ1ZVwiXG4gICAgICBzaXplPVwic21cIlxuICAgICAgKGNsaWNrKT1cIm9uTW92ZURvd25DbGljaygkZXZlbnQsIGRhdGEpXCJcbiAgICA+XG4gICAgICA8c3ZnIGNkc0ljb249XCJhcnJvdy0tZG93blwiIHNpemU9XCIxNlwiIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIj48L3N2Zz5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RyYWdBbmREcm9wVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxkaXYgY2xhc3M9XCJ2YWx0aW1vLWNhcmJvbi1saXN0X19kcmFnZ2FibGVcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJnaG9zdFwiXG4gICAgICBbZGlzYWJsZWRdPVwiZHJhZ0FuZERyb3BEaXNhYmxlZFwiXG4gICAgICBbaWNvbk9ubHldPVwidHJ1ZVwiXG4gICAgICBzaXplPVwic21cIlxuICAgICAgKG1vdXNlZG93bik9XCJvbkRyYWdTdGFydCgkZXZlbnQsIGRhdGEpXCJcbiAgICA+XG4gICAgICA8c3ZnIGNkc0ljb249XCJkcmFnZ2FibGVcIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0YWdUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgQGlmICghZGF0YS50YWdzKSB7XG4gICAgLVxuICB9IEBlbHNlIHtcbiAgICA8ZGl2IGNsYXNzPVwidGFnLXRlbXBsYXRlXCI+XG4gICAgICBAaWYgKGRhdGEudGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBmb3IgKHRhZyBvZiBkYXRhLnRhZ3Muc2xpY2UoMCwgZGF0YS50YWdBbW91bnQpOyB0cmFjayB0YWcpIHtcbiAgICAgICAgICA8Y2RzLXRhZyBjbGFzcz1cImNkcy10YWctLW5vLW1hcmdpblwiIFt0eXBlXT1cInRhZy50eXBlXCI+XG4gICAgICAgICAgICB7eyB0YWcuZWxsaXBzaXNDb250ZW50ID8/IHRhZy5jb250ZW50IH19XG4gICAgICAgICAgPC9jZHMtdGFnPlxuICAgICAgICB9XG5cbiAgICAgICAgPGNkcy10YWdcbiAgICAgICAgICAqbmdJZj1cImRhdGEudGFncy5sZW5ndGggPiBkYXRhLnRhZ0Ftb3VudFwiXG4gICAgICAgICAgY2xhc3M9XCJjZHMtdGFnLS1uby1tYXJnaW4gdmFsdGltby1jYXJib24tbGlzdF9fZXhwYW5kLXRhZ1wiXG4gICAgICAgICAgdHlwZT1cImhpZ2gtY29udHJhc3RcIlxuICAgICAgICAgIChjbGljayk9XCJvblRhZ0NsaWNrKCRldmVudCwgZGF0YS50YWdzKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBkYXRhLnRhZ3MubGVuZ3RoIC0gZGF0YS50YWdBbW91bnQgfX0gPHN2ZyBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICAgIDwvY2RzLXRhZz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxzcGFuPnt7IGRhdGEgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48dmFsdGltby10YWdzLW1vZGFsXG4gIFtvcGVuXT1cInRhZ01vZGFsT3BlbiQgfCBhc3luY1wiXG4gIFt0YWdzXT1cInRhZ01vZGFsRGF0YSQgfCBhc3luY1wiXG4gIChjbG9zZUV2ZW50KT1cIm9uQ2xvc2VFdmVudCgpXCJcbj48L3ZhbHRpbW8tdGFncy1tb2RhbD5cbiJdfQ==