@yuuvis/client-framework 2.0.0-beta.0 → 2.0.0-beta.3

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 (389) hide show
  1. package/actions/lib/actions/delete-action/delete/delete.component.d.ts +3 -3
  2. package/actions/lib/actions/delete-action/delete-action.d.ts +1 -1
  3. package/actions/lib/actions.service.d.ts +7 -3
  4. package/actions/lib/components/contextmenu/contextmenu.component.d.ts +3 -1
  5. package/autocomplete/README.md +3 -0
  6. package/autocomplete/index.d.ts +3 -0
  7. package/autocomplete/lib/autocomplete.component.d.ts +72 -0
  8. package/autocomplete/lib/autocomplete.interface.d.ts +4 -0
  9. package/autocomplete/lib/autocomplete.module.d.ts +7 -0
  10. package/common/index.d.ts +4 -4
  11. package/common/lib/common.module.d.ts +19 -0
  12. package/common/lib/common.utils.d.ts +2 -0
  13. package/common/lib/components/confirm/confirm.component.d.ts +7 -0
  14. package/common/lib/components/confirm/confirm.interface.d.ts +7 -0
  15. package/common/lib/components/confirm/confirm.service.d.ts +9 -0
  16. package/common/lib/components/dialog/dialog.component.d.ts +6 -0
  17. package/common/lib/components/dialog/dialog.options.d.ts +7 -0
  18. package/common/lib/components/index.d.ts +5 -0
  19. package/common/lib/directives/autofocus-child.directive.d.ts +13 -0
  20. package/common/lib/directives/autofocus-delayed.directive.d.ts +18 -0
  21. package/common/lib/directives/drag-scroll.directive.d.ts +20 -0
  22. package/common/lib/directives/index.d.ts +8 -4
  23. package/common/lib/directives/noop-value-accessor.directive.d.ts +2 -2
  24. package/common/lib/mat-form-field.abstract.d.ts +41 -0
  25. package/common/lib/services/index.d.ts +1 -1
  26. package/common/lib/services/layout-settings/layout-settings.service.d.ts +18 -0
  27. package/datepicker/README.md +3 -0
  28. package/datepicker/index.d.ts +5 -0
  29. package/datepicker/lib/calendar/calendar.component.d.ts +72 -0
  30. package/datepicker/lib/date-input/date-input-element/date-input-element.component.d.ts +43 -0
  31. package/datepicker/lib/date-input/date-input-hour-element/date-input-hour-element.component.d.ts +11 -0
  32. package/datepicker/lib/date-input/date-input.component.d.ts +61 -0
  33. package/datepicker/lib/datepicker-calendar/datepicker-calendar-trigger.component.d.ts +7 -0
  34. package/datepicker/lib/datepicker-calendar/datepicker-calendar.component.d.ts +12 -0
  35. package/datepicker/lib/datepicker.component.d.ts +80 -0
  36. package/datepicker/lib/datepicker.interface.d.ts +34 -0
  37. package/datepicker/lib/datepicker.module.d.ts +9 -0
  38. package/datepicker/lib/datepicker.service.d.ts +46 -0
  39. package/datepicker/lib/datepicker.utils.d.ts +23 -0
  40. package/datepicker/lib/time-input/time-input.component.d.ts +36 -0
  41. package/datepicker/lib/time-input/time-input.interface.d.ts +6 -0
  42. package/fesm2022/yuuvis-client-framework-actions.mjs +147 -105
  43. package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
  44. package/fesm2022/yuuvis-client-framework-app-bar.mjs +7 -8
  45. package/fesm2022/yuuvis-client-framework-app-bar.mjs.map +1 -1
  46. package/fesm2022/yuuvis-client-framework-autocomplete.mjs +210 -0
  47. package/fesm2022/yuuvis-client-framework-autocomplete.mjs.map +1 -0
  48. package/fesm2022/yuuvis-client-framework-clipboard.mjs +9 -9
  49. package/fesm2022/yuuvis-client-framework-clipboard.mjs.map +1 -1
  50. package/fesm2022/yuuvis-client-framework-common.mjs +853 -780
  51. package/fesm2022/yuuvis-client-framework-common.mjs.map +1 -1
  52. package/fesm2022/yuuvis-client-framework-datepicker.mjs +1688 -0
  53. package/fesm2022/yuuvis-client-framework-datepicker.mjs.map +1 -0
  54. package/fesm2022/yuuvis-client-framework-forms.mjs +945 -1157
  55. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
  56. package/fesm2022/yuuvis-client-framework-icons.mjs +85 -12
  57. package/fesm2022/yuuvis-client-framework-icons.mjs.map +1 -1
  58. package/fesm2022/yuuvis-client-framework-list.mjs +81 -45
  59. package/fesm2022/yuuvis-client-framework-list.mjs.map +1 -1
  60. package/fesm2022/yuuvis-client-framework-master-details.mjs +112 -0
  61. package/fesm2022/yuuvis-client-framework-master-details.mjs.map +1 -0
  62. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +60 -0
  63. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -0
  64. package/fesm2022/yuuvis-client-framework-metadata-form.mjs +125 -100
  65. package/fesm2022/yuuvis-client-framework-metadata-form.mjs.map +1 -1
  66. package/fesm2022/yuuvis-client-framework-object-details.mjs +49 -59
  67. package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
  68. package/fesm2022/yuuvis-client-framework-object-flavor.mjs +188 -77
  69. package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
  70. package/fesm2022/yuuvis-client-framework-object-form.mjs +99 -184
  71. package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -1
  72. package/fesm2022/yuuvis-client-framework-object-preview.mjs +11 -11
  73. package/fesm2022/yuuvis-client-framework-object-preview.mjs.map +1 -1
  74. package/fesm2022/yuuvis-client-framework-object-summary.mjs +46 -42
  75. package/fesm2022/yuuvis-client-framework-object-summary.mjs.map +1 -1
  76. package/fesm2022/yuuvis-client-framework-overflow-menu.mjs +126 -0
  77. package/fesm2022/yuuvis-client-framework-overflow-menu.mjs.map +1 -0
  78. package/fesm2022/yuuvis-client-framework-pagination.mjs +7 -9
  79. package/fesm2022/yuuvis-client-framework-pagination.mjs.map +1 -1
  80. package/fesm2022/yuuvis-client-framework-panel.mjs +8 -7
  81. package/fesm2022/yuuvis-client-framework-panel.mjs.map +1 -1
  82. package/fesm2022/yuuvis-client-framework-popout.mjs +212 -0
  83. package/fesm2022/yuuvis-client-framework-popout.mjs.map +1 -0
  84. package/fesm2022/yuuvis-client-framework-renderer.mjs +99 -72
  85. package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
  86. package/fesm2022/yuuvis-client-framework-sequence-list.mjs +29 -112
  87. package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
  88. package/fesm2022/yuuvis-client-framework-simple-search.mjs +40 -21
  89. package/fesm2022/yuuvis-client-framework-simple-search.mjs.map +1 -1
  90. package/fesm2022/yuuvis-client-framework-split-view.mjs +188 -0
  91. package/fesm2022/yuuvis-client-framework-split-view.mjs.map +1 -0
  92. package/fesm2022/yuuvis-client-framework-tile-list.mjs +100 -93
  93. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
  94. package/fesm2022/yuuvis-client-framework-tree.mjs +15 -15
  95. package/fesm2022/yuuvis-client-framework-tree.mjs.map +1 -1
  96. package/fesm2022/yuuvis-client-framework-upload-progress.mjs +16 -21
  97. package/fesm2022/yuuvis-client-framework-upload-progress.mjs.map +1 -1
  98. package/fesm2022/yuuvis-client-framework.mjs +4 -4
  99. package/fesm2022/yuuvis-client-framework.mjs.map +1 -1
  100. package/forms/index.d.ts +7 -1
  101. package/forms/lib/elements/catalog/catalog.component.d.ts +17 -56
  102. package/forms/lib/elements/data-grid/edit-table-data/edit-data.component.d.ts +5 -4
  103. package/forms/lib/elements/datetime/datetime.component.d.ts +19 -10
  104. package/forms/lib/elements/datetime-range/datetime-range.component.d.ts +12 -27
  105. package/forms/lib/elements/index.d.ts +0 -1
  106. package/forms/lib/elements/number/number.component.d.ts +21 -30
  107. package/forms/lib/elements/number-range/number-range.component.d.ts +12 -7
  108. package/forms/lib/elements/organization/organization.component.d.ts +23 -51
  109. package/forms/lib/elements/range-select-date/range-select-date.component.d.ts +12 -7
  110. package/forms/lib/elements/range-select-filesize/range-select-filesize.component.d.ts +12 -7
  111. package/forms/lib/elements/string/string.component.d.ts +15 -20
  112. package/forms/lib/forms.module.d.ts +8 -11
  113. package/icons/index.d.ts +1 -0
  114. package/icons/lib/icon.component.d.ts +20 -0
  115. package/lib/assets/i18n/de.json +7 -23
  116. package/lib/assets/i18n/en.json +10 -26
  117. package/list/index.d.ts +1 -0
  118. package/list/lib/list-item.directive.d.ts +5 -4
  119. package/list/lib/list.component.d.ts +6 -3
  120. package/list/lib/list.module.d.ts +8 -0
  121. package/master-details/README.md +3 -0
  122. package/master-details/index.d.ts +2 -0
  123. package/master-details/lib/master-details.component.d.ts +58 -0
  124. package/master-details/lib/master-details.interface.d.ts +7 -0
  125. package/master-details/lib/master-details.module.d.ts +7 -0
  126. package/metadata-form/index.d.ts +4 -1
  127. package/metadata-form/lib/metadata-form-field/metadata-form-field.component.d.ts +4 -17
  128. package/metadata-form/lib/metadata-form-field/metadata-form-field.interface.d.ts +11 -0
  129. package/metadata-form/lib/object-metadata-element-error.directive.d.ts +13 -0
  130. package/metadata-form/lib/object-metadata-element-label.directive.d.ts +10 -0
  131. package/metadata-form/lib/object-metadata-element-template.directive.d.ts +3 -3
  132. package/metadata-form-defaults/README.md +3 -0
  133. package/metadata-form-defaults/index.d.ts +2 -0
  134. package/metadata-form-defaults/lib/metadata-form-defaults.module.d.ts +7 -0
  135. package/object-details/lib/object-audit/object-audit.component.d.ts +3 -9
  136. package/object-details/lib/object-details.component.d.ts +0 -2
  137. package/object-details/lib/object-metadata/object-metadata.component.d.ts +4 -3
  138. package/object-details/lib/retention-badge/retention-badge.component.d.ts +0 -3
  139. package/object-flavor/index.d.ts +1 -0
  140. package/object-flavor/lib/abstract-apply-create-flavor/abstract-apply-create-flavor.component.d.ts +1 -2
  141. package/object-flavor/lib/abstract-apply-object-flavor/abstract-apply-object-flavor.component.d.ts +3 -2
  142. package/object-flavor/lib/default-apply-flavor/default-apply-flavor.component.d.ts +19 -0
  143. package/object-flavor/lib/flavor-chip/flavor-chip.component.d.ts +1 -1
  144. package/object-flavor/lib/object-flavor/object-flavor.component.d.ts +3 -6
  145. package/object-flavor/lib/object-flavor-picker/object-flavor-picker.component.d.ts +0 -1
  146. package/object-form/index.d.ts +1 -1
  147. package/object-form/lib/object-form-element/object-form-element.component.d.ts +2 -2
  148. package/object-form/lib/object-form-group/object-form-group.component.d.ts +1 -3
  149. package/object-form/lib/object-form.component.d.ts +2 -2
  150. package/object-form/lib/object-form.interface.d.ts +0 -44
  151. package/object-form/lib/object-form.module.d.ts +7 -0
  152. package/object-form/lib/object-form.service.d.ts +1 -2
  153. package/object-form/lib/object-form.utils.d.ts +1 -1
  154. package/object-summary/lib/object-summary/object-summary.component.d.ts +13 -15
  155. package/overflow-menu/README.md +3 -0
  156. package/overflow-menu/index.d.ts +3 -0
  157. package/overflow-menu/lib/overflow-menu.component.d.ts +31 -0
  158. package/overflow-menu/lib/overflow-menu.interface.d.ts +9 -0
  159. package/overflow-menu/lib/overflow-menu.module.d.ts +7 -0
  160. package/package.json +43 -69
  161. package/popout/README.md +3 -0
  162. package/popout/index.d.ts +3 -0
  163. package/popout/lib/popout.component.d.ts +58 -0
  164. package/popout/lib/popout.interface.d.ts +17 -0
  165. package/popout/lib/popout.module.d.ts +7 -0
  166. package/renderer/lib/property-renderer/abstract.renderer.d.ts +4 -4
  167. package/renderer/lib/property-renderer/icon.renderer.component.d.ts +2 -0
  168. package/renderer/lib/renderer.directive.d.ts +4 -3
  169. package/sequence-list/index.d.ts +0 -1
  170. package/sequence-list/lib/sequence-list.component.d.ts +0 -4
  171. package/simple-search/index.d.ts +0 -1
  172. package/simple-search/lib/simple-search/simple-search.component.d.ts +6 -10
  173. package/split-view/README.md +3 -0
  174. package/split-view/index.d.ts +4 -0
  175. package/split-view/lib/split-area.directive.d.ts +16 -0
  176. package/split-view/lib/split-view.component.d.ts +76 -0
  177. package/split-view/lib/split-view.interface.d.ts +10 -0
  178. package/split-view/lib/split-view.module.d.ts +8 -0
  179. package/styles/client-framework.scss +21 -67
  180. package/tile-list/lib/tile/tile.component.d.ts +1 -2
  181. package/tile-list/lib/tile-config/property-select/property-select.component.d.ts +0 -1
  182. package/tile-list/lib/tile-config/tile-config-trigger/tile-config-trigger.component.d.ts +1 -2
  183. package/tile-list/lib/tile-config/tile-config.component.d.ts +0 -3
  184. package/tile-list/lib/tile-list/tile-list.component.d.ts +5 -5
  185. package/upload-progress/lib/upload-progress/upload-progress-overlay/upload-progress-overlay.component.d.ts +0 -5
  186. package/upload-progress/lib/upload-progress/upload-progress.component.d.ts +0 -4
  187. package/common/lib/components/focus-indicator/focus-indicator.component.d.ts +0 -7
  188. package/common/lib/components/token-input/token-input.component.d.ts +0 -55
  189. package/common/lib/components/token-input/token-input.interface.d.ts +0 -8
  190. package/common/lib/services/error-messages/error-messages.service.d.ts +0 -7
  191. package/esm2022/actions/index.mjs +0 -7
  192. package/esm2022/actions/lib/actions/copy-action/copy-action.mjs +0 -31
  193. package/esm2022/actions/lib/actions/cut-action/cut-action.mjs +0 -30
  194. package/esm2022/actions/lib/actions/delete-action/delete/delete.component.mjs +0 -67
  195. package/esm2022/actions/lib/actions/delete-action/delete-action.mjs +0 -38
  196. package/esm2022/actions/lib/actions/download-action/download-action.mjs +0 -33
  197. package/esm2022/actions/lib/actions.icon.mjs +0 -8
  198. package/esm2022/actions/lib/actions.interface.mjs +0 -19
  199. package/esm2022/actions/lib/actions.module.mjs +0 -16
  200. package/esm2022/actions/lib/actions.service.mjs +0 -89
  201. package/esm2022/actions/lib/components/contextmenu/contextmenu.component.mjs +0 -27
  202. package/esm2022/actions/yuuvis-client-framework-actions.mjs +0 -5
  203. package/esm2022/app-bar/index.mjs +0 -2
  204. package/esm2022/app-bar/lib/app-bar.component.mjs +0 -89
  205. package/esm2022/app-bar/yuuvis-client-framework-app-bar.mjs +0 -5
  206. package/esm2022/clipboard/index.mjs +0 -2
  207. package/esm2022/clipboard/lib/clipboard.component.mjs +0 -48
  208. package/esm2022/clipboard/yuuvis-client-framework-clipboard.mjs +0 -5
  209. package/esm2022/common/index.mjs +0 -7
  210. package/esm2022/common/lib/components/focus-indicator/focus-indicator.component.mjs +0 -41
  211. package/esm2022/common/lib/components/token-input/token-input.component.mjs +0 -324
  212. package/esm2022/common/lib/components/token-input/token-input.interface.mjs +0 -2
  213. package/esm2022/common/lib/directives/busy-overlay.directive.mjs +0 -88
  214. package/esm2022/common/lib/directives/click-double.directive.mjs +0 -61
  215. package/esm2022/common/lib/directives/container-size.directive.mjs +0 -56
  216. package/esm2022/common/lib/directives/drag-select.directive.mjs +0 -114
  217. package/esm2022/common/lib/directives/file-drop-zone/file-drop-zone.directive.mjs +0 -153
  218. package/esm2022/common/lib/directives/file-drop-zone/file-drop-zone.interface.mjs +0 -2
  219. package/esm2022/common/lib/directives/focus-within.directive.mjs +0 -81
  220. package/esm2022/common/lib/directives/index.mjs +0 -9
  221. package/esm2022/common/lib/directives/light-dismiss.directive.mjs +0 -44
  222. package/esm2022/common/lib/directives/longpress.directive.mjs +0 -36
  223. package/esm2022/common/lib/directives/noop-value-accessor.directive.mjs +0 -42
  224. package/esm2022/common/lib/services/error-messages/error-messages.service.mjs +0 -68
  225. package/esm2022/common/lib/services/index.mjs +0 -2
  226. package/esm2022/common/yuuvis-client-framework-common.mjs +0 -5
  227. package/esm2022/forms/index.mjs +0 -24
  228. package/esm2022/forms/lib/elements/catalog/catalog.component.mjs +0 -118
  229. package/esm2022/forms/lib/elements/data-grid/data-grid/data-grid.component.mjs +0 -172
  230. package/esm2022/forms/lib/elements/data-grid/edit-table-data/edit-data.component.mjs +0 -95
  231. package/esm2022/forms/lib/elements/data-grid/model/data-grid.interface.mjs +0 -9
  232. package/esm2022/forms/lib/elements/datetime/datetime.component.mjs +0 -82
  233. package/esm2022/forms/lib/elements/datetime-range/datetime-range.component.mjs +0 -166
  234. package/esm2022/forms/lib/elements/index.mjs +0 -11
  235. package/esm2022/forms/lib/elements/number/number.component.mjs +0 -195
  236. package/esm2022/forms/lib/elements/number-range/number-range.component.mjs +0 -176
  237. package/esm2022/forms/lib/elements/organization/organization.component.mjs +0 -286
  238. package/esm2022/forms/lib/elements/range-select-date/date-range-picker/date-range-picker.component.mjs +0 -38
  239. package/esm2022/forms/lib/elements/range-select-date/range-select-date.component.mjs +0 -181
  240. package/esm2022/forms/lib/elements/range-select-date/range-select-date.interface.mjs +0 -2
  241. package/esm2022/forms/lib/elements/range-select-filesize/range-select-filesize.component.mjs +0 -98
  242. package/esm2022/forms/lib/elements/range-select-filesize/range-select-filesize.interface.mjs +0 -2
  243. package/esm2022/forms/lib/elements/string/string.component.mjs +0 -261
  244. package/esm2022/forms/lib/form-input/form-input.component.mjs +0 -88
  245. package/esm2022/forms/lib/forms.module.mjs +0 -58
  246. package/esm2022/forms/yuuvis-client-framework-forms.mjs +0 -5
  247. package/esm2022/icons/index.mjs +0 -4
  248. package/esm2022/icons/lib/icon.service.mjs +0 -59
  249. package/esm2022/icons/lib/icons.mjs +0 -32
  250. package/esm2022/icons/lib/object-type-icon/object-type-icon.component.mjs +0 -29
  251. package/esm2022/icons/yuuvis-client-framework-icons.mjs +0 -5
  252. package/esm2022/index.mjs +0 -2
  253. package/esm2022/lib/yuuvis-client-framework.module.mjs +0 -15
  254. package/esm2022/list/index.mjs +0 -3
  255. package/esm2022/list/lib/list-item.directive.mjs +0 -72
  256. package/esm2022/list/lib/list.component.mjs +0 -135
  257. package/esm2022/list/yuuvis-client-framework-list.mjs +0 -5
  258. package/esm2022/metadata-form/index.mjs +0 -4
  259. package/esm2022/metadata-form/lib/metadata-default-templates/metadata-default-templates.component.mjs +0 -32
  260. package/esm2022/metadata-form/lib/metadata-form-element-registry.service.mjs +0 -99
  261. package/esm2022/metadata-form/lib/metadata-form-field/metadata-form-field.component.mjs +0 -83
  262. package/esm2022/metadata-form/lib/object-metadata-element-template.directive.mjs +0 -52
  263. package/esm2022/metadata-form/yuuvis-client-framework-metadata-form.mjs +0 -5
  264. package/esm2022/object-details/index.mjs +0 -8
  265. package/esm2022/object-details/lib/object-audit/object-audit.component.mjs +0 -195
  266. package/esm2022/object-details/lib/object-details-shell/object-details-shell.component.mjs +0 -127
  267. package/esm2022/object-details/lib/object-details.component.mjs +0 -61
  268. package/esm2022/object-details/lib/object-metadata/form-section-group.pipe.mjs +0 -17
  269. package/esm2022/object-details/lib/object-metadata/object-metadata.component.mjs +0 -202
  270. package/esm2022/object-details/lib/object-metadata/object-metadata.interface.mjs +0 -2
  271. package/esm2022/object-details/lib/retention-badge/retention-badge.component.mjs +0 -27
  272. package/esm2022/object-details/yuuvis-client-framework-object-details.mjs +0 -5
  273. package/esm2022/object-flavor/index.mjs +0 -6
  274. package/esm2022/object-flavor/lib/abstract-apply-create-flavor/abstract-apply-create-flavor.component.mjs +0 -25
  275. package/esm2022/object-flavor/lib/abstract-apply-object-flavor/abstract-apply-object-flavor.component.mjs +0 -21
  276. package/esm2022/object-flavor/lib/flavor-chip/flavor-chip.component.mjs +0 -35
  277. package/esm2022/object-flavor/lib/object-flavor/object-flavor.component.mjs +0 -93
  278. package/esm2022/object-flavor/lib/object-flavor-picker/object-flavor-picker.component.mjs +0 -43
  279. package/esm2022/object-flavor/yuuvis-client-framework-object-flavor.mjs +0 -5
  280. package/esm2022/object-form/index.mjs +0 -5
  281. package/esm2022/object-form/lib/form-scripting.api.interface.mjs +0 -2
  282. package/esm2022/object-form/lib/form-scripting.service.mjs +0 -160
  283. package/esm2022/object-form/lib/object-form-element/object-form-element.component.mjs +0 -87
  284. package/esm2022/object-form/lib/object-form-extension.interface.mjs +0 -36
  285. package/esm2022/object-form/lib/object-form-group/object-form-group.component.mjs +0 -85
  286. package/esm2022/object-form/lib/object-form-script/form-scripting-element-extension/form-scripting-element-extension.component.mjs +0 -23
  287. package/esm2022/object-form/lib/object-form-script/object-form-script.service.mjs +0 -115
  288. package/esm2022/object-form/lib/object-form-script/object-form-scripting-scope.mjs +0 -251
  289. package/esm2022/object-form/lib/object-form-translate.service.mjs +0 -73
  290. package/esm2022/object-form/lib/object-form.component.mjs +0 -628
  291. package/esm2022/object-form/lib/object-form.interface.mjs +0 -9
  292. package/esm2022/object-form/lib/object-form.model.mjs +0 -20
  293. package/esm2022/object-form/lib/object-form.service.mjs +0 -130
  294. package/esm2022/object-form/lib/object-form.utils.mjs +0 -55
  295. package/esm2022/object-form/lib/object-form.validation.mjs +0 -48
  296. package/esm2022/object-form/yuuvis-client-framework-object-form.mjs +0 -5
  297. package/esm2022/object-preview/index.mjs +0 -3
  298. package/esm2022/object-preview/lib/components/index.mjs +0 -3
  299. package/esm2022/object-preview/lib/components/object-email-preview/object-email-preview.component.mjs +0 -45
  300. package/esm2022/object-preview/lib/components/object-preview/object-preview.component.mjs +0 -78
  301. package/esm2022/object-preview/lib/services/object-preview.service.mjs +0 -119
  302. package/esm2022/object-preview/yuuvis-client-framework-object-preview.mjs +0 -5
  303. package/esm2022/object-summary/index.mjs +0 -5
  304. package/esm2022/object-summary/lib/multi-object-summary/multi-object-summary.component.mjs +0 -33
  305. package/esm2022/object-summary/lib/object-summary/object-summary.component.mjs +0 -275
  306. package/esm2022/object-summary/lib/object-summary-data/object-summary-data.component.mjs +0 -80
  307. package/esm2022/object-summary/lib/object-summary.module.mjs +0 -15
  308. package/esm2022/object-summary/yuuvis-client-framework-object-summary.mjs +0 -5
  309. package/esm2022/pagination/index.mjs +0 -3
  310. package/esm2022/pagination/lib/pagination.component.mjs +0 -46
  311. package/esm2022/pagination/lib/pagination.interface.mjs +0 -2
  312. package/esm2022/pagination/yuuvis-client-framework-pagination.mjs +0 -5
  313. package/esm2022/panel/index.mjs +0 -2
  314. package/esm2022/panel/lib/panel.component.mjs +0 -20
  315. package/esm2022/panel/yuuvis-client-framework-panel.mjs +0 -5
  316. package/esm2022/renderer/index.mjs +0 -11
  317. package/esm2022/renderer/lib/property-renderer/abstract.renderer.mjs +0 -29
  318. package/esm2022/renderer/lib/property-renderer/datetime.renderer.mjs +0 -13
  319. package/esm2022/renderer/lib/property-renderer/decimal.renderer.component.mjs +0 -12
  320. package/esm2022/renderer/lib/property-renderer/filesize.renderer.component.mjs +0 -28
  321. package/esm2022/renderer/lib/property-renderer/icon.renderer.component.mjs +0 -23
  322. package/esm2022/renderer/lib/property-renderer/integer.renderer.component.mjs +0 -12
  323. package/esm2022/renderer/lib/property-renderer/organization.renderer.mjs +0 -19
  324. package/esm2022/renderer/lib/property-renderer/string.renderer.component.mjs +0 -12
  325. package/esm2022/renderer/lib/property-renderer/unknown.renderer.mjs +0 -12
  326. package/esm2022/renderer/lib/renderer.directive.mjs +0 -51
  327. package/esm2022/renderer/lib/services/renderer/renderer.interface.mjs +0 -2
  328. package/esm2022/renderer/lib/services/renderer/renderer.service.mjs +0 -84
  329. package/esm2022/renderer/yuuvis-client-framework-renderer.mjs +0 -5
  330. package/esm2022/sequence-list/index.mjs +0 -4
  331. package/esm2022/sequence-list/lib/due-date-picker/due-date-picker.component.mjs +0 -99
  332. package/esm2022/sequence-list/lib/sequence-list.component.mjs +0 -141
  333. package/esm2022/sequence-list/lib/sequence-list.interface.mjs +0 -2
  334. package/esm2022/sequence-list/yuuvis-client-framework-sequence-list.mjs +0 -5
  335. package/esm2022/simple-search/index.mjs +0 -3
  336. package/esm2022/simple-search/lib/simple-search/simple-search.component.mjs +0 -111
  337. package/esm2022/simple-search/lib/simple-search/simple-search.interface.mjs +0 -2
  338. package/esm2022/simple-search/yuuvis-client-framework-simple-search.mjs +0 -5
  339. package/esm2022/tile-list/index.mjs +0 -11
  340. package/esm2022/tile-list/lib/tile/tile.component.mjs +0 -53
  341. package/esm2022/tile-list/lib/tile-config/action-select/action-select.component.mjs +0 -25
  342. package/esm2022/tile-list/lib/tile-config/icon-select/icon-select.component.mjs +0 -33
  343. package/esm2022/tile-list/lib/tile-config/property-select/property-select.component.mjs +0 -91
  344. package/esm2022/tile-list/lib/tile-config/tile-config-tile/tile-config-tile.component.mjs +0 -66
  345. package/esm2022/tile-list/lib/tile-config/tile-config-trigger/tile-config-trigger.component.mjs +0 -46
  346. package/esm2022/tile-list/lib/tile-config/tile-config.component.mjs +0 -156
  347. package/esm2022/tile-list/lib/tile-extension/directive/tile-extension.directive.mjs +0 -37
  348. package/esm2022/tile-list/lib/tile-extension/extensions/email.extension.mjs +0 -42
  349. package/esm2022/tile-list/lib/tile-extension/tile-extension.service.mjs +0 -35
  350. package/esm2022/tile-list/lib/tile-list/tile-list.component.mjs +0 -510
  351. package/esm2022/tile-list/lib/tile-list/tile-list.interface.mjs +0 -2
  352. package/esm2022/tile-list/yuuvis-client-framework-tile-list.mjs +0 -5
  353. package/esm2022/token-search/index.mjs +0 -3
  354. package/esm2022/token-search/token-search.component.mjs +0 -78
  355. package/esm2022/token-search/token-search.interface.mjs +0 -2
  356. package/esm2022/token-search/yuuvis-client-framework-token-search.mjs +0 -5
  357. package/esm2022/tree/index.mjs +0 -3
  358. package/esm2022/tree/lib/tree-node/tree-node.component.mjs +0 -65
  359. package/esm2022/tree/lib/tree.component.mjs +0 -148
  360. package/esm2022/tree/lib/tree.interface.mjs +0 -2
  361. package/esm2022/tree/lib/tree.service.mjs +0 -95
  362. package/esm2022/tree/yuuvis-client-framework-tree.mjs +0 -5
  363. package/esm2022/upload-progress/index.mjs +0 -2
  364. package/esm2022/upload-progress/lib/upload-progress/upload-progress-overlay/upload-progress-overlay.component.mjs +0 -49
  365. package/esm2022/upload-progress/lib/upload-progress/upload-progress.component.mjs +0 -37
  366. package/esm2022/upload-progress/yuuvis-client-framework-upload-progress.mjs +0 -5
  367. package/esm2022/user-avatar/index.mjs +0 -3
  368. package/esm2022/user-avatar/lib/user-avatar.component.mjs +0 -69
  369. package/esm2022/user-avatar/lib/user-avatar.module.mjs +0 -24
  370. package/esm2022/user-avatar/yuuvis-client-framework-user-avatar.mjs +0 -5
  371. package/esm2022/yuuvis-client-framework.mjs +0 -5
  372. package/fesm2022/yuuvis-client-framework-token-search.mjs +0 -85
  373. package/fesm2022/yuuvis-client-framework-token-search.mjs.map +0 -1
  374. package/fesm2022/yuuvis-client-framework-user-avatar.mjs +0 -96
  375. package/fesm2022/yuuvis-client-framework-user-avatar.mjs.map +0 -1
  376. package/forms/lib/form-input/form-input.component.d.ts +0 -48
  377. package/object-form/lib/object-form-translate.service.d.ts +0 -15
  378. package/object-form/lib/object-form.model.d.ts +0 -18
  379. package/sequence-list/lib/due-date-picker/due-date-picker.component.d.ts +0 -28
  380. package/simple-search/lib/simple-search/simple-search.interface.d.ts +0 -4
  381. package/token-search/README.md +0 -3
  382. package/token-search/index.d.ts +0 -2
  383. package/token-search/token-search.component.d.ts +0 -22
  384. package/token-search/token-search.interface.d.ts +0 -4
  385. package/user-avatar/README.md +0 -3
  386. package/user-avatar/index.d.ts +0 -2
  387. package/user-avatar/lib/user-avatar.component.d.ts +0 -44
  388. package/user-avatar/lib/user-avatar.module.d.ts +0 -8
  389. /package/{metadata-form → metadata-form-defaults}/lib/metadata-default-templates/metadata-default-templates.component.d.ts +0 -0
@@ -1,510 +0,0 @@
1
- import { NgClass, NgStyle } from '@angular/common';
2
- import { Component, DestroyRef, ElementRef, HostBinding, HostListener, computed, contentChild, effect, inject, input, output, signal, untracked, viewChildren } from '@angular/core';
3
- import { BaseObjectTypeField, DeviceService, DmsObject, EventService, ObjectConfigService, SearchService, SystemService, TranslateModule, YuvEventType } from '@yuuvis/client-core';
4
- import { ClickDoubleDirective, DragSelectDirective, DragSelectItemDirective } from '@yuuvis/client-framework/common';
5
- import { TileComponent } from '../tile/tile.component';
6
- import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
7
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
8
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
- import { ReactiveFormsModule } from '@angular/forms';
10
- import { YUV_ICONS } from '@yuuvis/client-framework/icons';
11
- import { PaginationComponent } from '@yuuvis/client-framework/pagination';
12
- import { YvcIconModule } from '@yuuvis/components/icon';
13
- import { YvcOverlayModule } from '@yuuvis/components/overlay';
14
- import { finalize, Subscription } from 'rxjs';
15
- import { ListItemDirective } from '@yuuvis/client-framework/list';
16
- import * as i0 from "@angular/core";
17
- /**
18
- * List that renders the result of a search query as object config based tiles. It also contains a component to
19
- * set up that configuration.
20
- *
21
- * ## Paging
22
- * If the search result contains more items than the page size, the list will show a
23
- * pagination control to navigate inbetween the pages.
24
- *
25
- * ## Staggered animation
26
- * Adding a class of `staggered` to the `yuv-tile-list` component will animate
27
- * the tiles in a staggered way (only if the user has not set up the OS to not
28
- * play animation).
29
- */
30
- export class TileListComponent {
31
- #objectConfigService;
32
- #system;
33
- #searchService;
34
- #destroyRef;
35
- #device;
36
- #elRef;
37
- #events;
38
- #listItemsEffect;
39
- #openContextMenu;
40
- #contextFlag;
41
- onContextMenu(event) {
42
- event.preventDefault();
43
- if (this.#contextFlag()) {
44
- this.#contextFlag.set(false);
45
- return;
46
- }
47
- setTimeout(() => {
48
- this.ctxMenu.emit({ event, selection: this.selection() });
49
- }, 200);
50
- }
51
- onMouseDown(event) {
52
- // TODO: Clicking on the scrollbar also resets selection ... need to find a different way
53
- // (event.target as HTMLElement).parentElement?.tagName === 'YUV-TILE-LIST' && this.#select(-1);
54
- if (event.button === 2) {
55
- this.#contextFlag.set(true);
56
- this.onContextMenu(event);
57
- }
58
- }
59
- onCopy(event) {
60
- event.preventDefault();
61
- if (this._selection.length)
62
- this.copy.emit(this._selectionToTileData());
63
- }
64
- onCut(event) {
65
- event.preventDefault();
66
- if (this._selection.length)
67
- this.cut.emit(this._selectionToTileData());
68
- }
69
- onKeydown(event) {
70
- switch (event.code) {
71
- case 'Escape': {
72
- this.clearSelection();
73
- break;
74
- }
75
- case 'Enter': {
76
- // same as double click
77
- const aii = this._keyManager.activeItemIndex !== null ? this._keyManager.activeItemIndex : -1;
78
- if (aii >= 0) {
79
- this.itemDblClick.emit(this.items[aii]);
80
- }
81
- break;
82
- }
83
- case 'Space': {
84
- // same as single click
85
- const aii = this._keyManager.activeItemIndex !== null ? this._keyManager.activeItemIndex : -1;
86
- if (aii >= 0) {
87
- this.select(this.items[aii], event);
88
- }
89
- break;
90
- }
91
- default: {
92
- this._keyManager?.onKeydown(event);
93
- }
94
- }
95
- }
96
- #_busyEffect;
97
- #query;
98
- #executeQueryEffect;
99
- constructor() {
100
- this.#objectConfigService = inject(ObjectConfigService);
101
- this.#system = inject(SystemService);
102
- this.#searchService = inject(SearchService);
103
- this.#destroyRef = inject(DestroyRef);
104
- this.#device = inject(DeviceService);
105
- this.#elRef = inject(ElementRef);
106
- this.#events = inject(EventService);
107
- this.emptyContent = contentChild('empty');
108
- this.isTouchDevice = this.#device.isTouchEnabled;
109
- this.tiles = viewChildren(TileComponent);
110
- this.listItems = viewChildren(ListItemDirective);
111
- this.#listItemsEffect = effect(() => {
112
- if (this._keyManager)
113
- this._keyManager.destroy();
114
- this._keyManager = new ActiveDescendantKeyManager(this.listItems() || []).withWrap();
115
- });
116
- this.searchResultSubscription = new Subscription();
117
- this.#openContextMenu = signal(null);
118
- this.#contextFlag = signal(false);
119
- this._busy = signal(false);
120
- this.#_busyEffect = effect(() => {
121
- this.busy.emit(this._busy());
122
- });
123
- this._selection = [];
124
- this.selectedTile = signal([]);
125
- this.empytIcon = signal(YUV_ICONS.trash);
126
- /**
127
- * The ID of the selected list item
128
- */
129
- this.selection = signal([]);
130
- /**
131
- * Tile configurations are stored globally for all apps. If you want a
132
- * separate config for your app/component you can specify a bucket. A bucket
133
- * is basically an ID where your custom tile config will be stored and
134
- * retrieved. Buckets should be unique so be sure to use a unique namespace.
135
- */
136
- this.bucket = input();
137
- /**
138
- * Sets up the ability to select multile tiles
139
- */
140
- this.multiselect = input(false);
141
- this.options = input(undefined);
142
- this.flavor = input();
143
- this.flavorEffect = effect(() => {
144
- const f = this.flavor();
145
- if (f)
146
- this.applyFlavor(f);
147
- });
148
- /**
149
- * The search query to be executed
150
- */
151
- this.query = input();
152
- // Items to be preselected (TODO: remove after refactoring ???)
153
- this.preselect = input();
154
- this.highlights = input([]);
155
- this.highlightStyles = computed(() => {
156
- const x = {};
157
- (this.highlights() || []).forEach((highlight) => {
158
- highlight.ids.forEach((id) => {
159
- if (!x[id])
160
- x[id] = {};
161
- x[id] = { ...x[id], ...highlight.cssStyles };
162
- });
163
- });
164
- return x;
165
- });
166
- /**
167
- * Emitted when a list item has been selected
168
- */
169
- this.itemSelect = output();
170
- this.copy = output();
171
- this.cut = output();
172
- this.busy = output();
173
- this.queryResult = output();
174
- /**
175
- * Emitted when selected items changed. If 'multiselect' input is set to true, this will
176
- * emit the whole selection, while 'itemSelect' will only emit the item that currently
177
- * has bee added to the selection.
178
- */
179
- this.selectionChange = output();
180
- /**
181
- * Emitted when a list item has been doubleclicked
182
- */
183
- this.itemDblClick = output();
184
- this.ctxMenu = output();
185
- // the items rendered in the list
186
- this.items = [];
187
- this.searchExecuted = false;
188
- this.#executeQueryEffect = effect(() => {
189
- // execute the query each time it changes
190
- this.#query = this.query();
191
- if (this.#query && this.oc)
192
- untracked(() => {
193
- this._executeQuery(this.#query || undefined);
194
- this.empytIcon.set(YUV_ICONS.refresh);
195
- });
196
- });
197
- this.#events
198
- .on(YuvEventType.DMS_OBJECT_UPDATED)
199
- .pipe(takeUntilDestroyed())
200
- .subscribe((e) => {
201
- const dmsObject = e.data;
202
- // check if the updated object is part of the list
203
- this.items.findIndex((item) => item.id === dmsObject.id) >= 0 && this.updateTileList([dmsObject]);
204
- });
205
- }
206
- contextMenuHandler(event, index) {
207
- if (!coerceBooleanProperty(this.tiles()[index].elRef.nativeElement.ariaSelected)) {
208
- this._selectByIndex(index, event);
209
- }
210
- }
211
- select(i, evt) {
212
- const idx = this.items.findIndex((item) => item.id === i.id);
213
- this._selectByIndex(idx, evt);
214
- }
215
- onDragSelectChange(sel) {
216
- if (this._keyManager.activeItemIndex !== -1)
217
- this._keyManager.setActiveItem(-1);
218
- this._selection = sel;
219
- this._selection.sort();
220
- this.listItems().forEach((item, i) => (item.selected = this._selection.includes(i)));
221
- }
222
- onDragSelect(sel) {
223
- this.#elRef.nativeElement.focus();
224
- this._selection = sel;
225
- this._keyManager.setActiveItem(sel[0] || 0);
226
- const tiles = this._selectionToTileData();
227
- this.selectionChange.emit(tiles);
228
- }
229
- _selectByIndex(idx, evt) {
230
- this._keyManager.setActiveItem(idx);
231
- this.#select(idx, evt?.shiftKey, evt?.ctrlKey);
232
- }
233
- refresh() {
234
- if (this.#query) {
235
- if (this.pagination) {
236
- this.goToPage(this.pagination.page);
237
- }
238
- else
239
- this._executeQuery(this.query() || undefined);
240
- }
241
- }
242
- applyFlavor(flavor) {
243
- this.appliedFlavor = this.appliedFlavor?.id === flavor.id ? undefined : flavor;
244
- if (this._rawResult)
245
- this.items = this._mapSearchResult(this._rawResult);
246
- }
247
- clearSelection(silent = false) {
248
- if (this._selection.length) {
249
- this._selection = [];
250
- this._keyManager.setActiveItem(-1);
251
- this.listItems().forEach((item, i) => (item.selected = false));
252
- if (!silent)
253
- this.selectionChange.emit([]);
254
- }
255
- }
256
- selectNext() {
257
- if (this._lastSelection) {
258
- let i = this._lastSelection + 1;
259
- if (i > this.items.length)
260
- i = 0;
261
- this.#select(i);
262
- }
263
- }
264
- selectPrev() {
265
- if (this._lastSelection) {
266
- let i = this._lastSelection - 1;
267
- if (i < 0)
268
- i = this.items.length - 1;
269
- this.#select(this._lastSelection - 1);
270
- }
271
- }
272
- goToPage(page) {
273
- if (!this.#query)
274
- return;
275
- this._busy.set(true);
276
- this.#searchService
277
- .getPage(this.#query, page)
278
- .pipe(finalize(() => this._busy.set(false)))
279
- .subscribe({
280
- next: (res) => {
281
- this.#setupPagination(res);
282
- this.items = this._mapSearchResult(res);
283
- },
284
- error: (err) => {
285
- // TODO: how should errors be handles in case hat loading pages fail
286
- }
287
- });
288
- }
289
- #select(index, shiftKey = false, ctrlKey = false) {
290
- this.#elRef.nativeElement.focus();
291
- if (index === -1)
292
- this._selection = [];
293
- else {
294
- if (this.multiselect()) {
295
- this._selection = this._selection.filter((i) => i !== index);
296
- if (ctrlKey) {
297
- // if ctrl key add to selection
298
- this._selection.push(index);
299
- }
300
- else if (shiftKey) {
301
- // add range
302
- if (this._lastSelection !== undefined) {
303
- const startIndex = this._lastSelection < index ? this._lastSelection : index;
304
- const endIndex = this._lastSelection > index ? this._lastSelection : index;
305
- for (let i = startIndex; i <= endIndex; i++) {
306
- this._selection.push(i);
307
- }
308
- }
309
- else {
310
- this._selection = [index];
311
- }
312
- }
313
- else {
314
- this._selection = [index];
315
- }
316
- }
317
- else
318
- this._selection = [index];
319
- this._selection = [...new Set(this._selection)];
320
- }
321
- this._lastSelection = this._selection.length === 0 ? undefined : index;
322
- this._selection.sort();
323
- this.listItems().forEach((item, i) => (item.selected = this._selection.includes(i)));
324
- const tiles = this._selectionToTileData();
325
- this.selectionChange.emit(tiles);
326
- tiles.length === 1 && this.itemSelect.emit(tiles[0]);
327
- this.selectedTile.set(this._selection.map((idx) => this.items[idx]));
328
- }
329
- _selectionToTileData() {
330
- return this._selection.map((idx) => this.items[idx]);
331
- }
332
- _executeQuery(q) {
333
- if (q && this.#system.system) {
334
- this.searchExecuted = false;
335
- // reset items to avoid old data being shown while new stuff is loaded
336
- this.items = [];
337
- // q.fields = Object.keys(this.#system.system.allFields);
338
- q.fields = undefined;
339
- this._busy.set(true);
340
- this.searchResultSubscription = this.#searchService
341
- .search(q)
342
- .pipe(finalize(() => this._busy.set(false)))
343
- .subscribe({
344
- next: (res) => {
345
- this.#setupPagination(res);
346
- this.items = this._mapSearchResult(res);
347
- this.queryResult.emit({ totalCount: res.items.length });
348
- const preselect = this.preselect();
349
- if (preselect) {
350
- preselect.forEach((id) => {
351
- const idx = this.items.findIndex((item) => item.id === id);
352
- if (idx >= 0)
353
- this._selectByIndex(idx);
354
- });
355
- }
356
- },
357
- error: (err) => console.error(err)
358
- });
359
- }
360
- }
361
- #setupPagination(searchResult) {
362
- this.pagination = undefined;
363
- if (this.#query && searchResult.totalNumItems > (this.#query.size || SearchService.DEFAULT_QUERY_SIZE)) {
364
- this.pagination = {
365
- total: searchResult.totalNumItems,
366
- pages: Math.ceil(searchResult.totalNumItems / (this.#query?.size || SearchService.DEFAULT_QUERY_SIZE)),
367
- page: (!this.#query?.from ? 0 : this.#query.from / (this.#query?.size || SearchService.DEFAULT_QUERY_SIZE)) + 1
368
- };
369
- }
370
- }
371
- #mapToTileData(objects) {
372
- return objects.map((dmsObject) => {
373
- const sots = dmsObject.sots || [];
374
- let oc = this.oc[dmsObject.objectTypeId];
375
- // check if result oitem matches virtual config type
376
- const cfgTypes = this.options()?.configTypes || [];
377
- cfgTypes.forEach((cft) => {
378
- const matchesType = !cft.objectType || cft.objectType === dmsObject.objectTypeId;
379
- const matchesSOTs = !cft.sots || !cft.sots.length || cft.sots.every((sot) => sots.includes(sot));
380
- if (matchesType && matchesSOTs)
381
- oc = this.oc[cft.id];
382
- });
383
- // only apply a flavor if the object has that SOT
384
- const ownAppliedFlavor = this.appliedFlavor && sots.includes(this.appliedFlavor.sot) && this.oc[this.appliedFlavor.sot];
385
- if (ownAppliedFlavor) {
386
- oc = this.oc[this.appliedFlavor.id];
387
- }
388
- if (!oc)
389
- oc = this.#objectConfigService.getDefaultConfig(dmsObject.objectTypeId);
390
- const tli = {
391
- objectTypeId: dmsObject.objectTypeId,
392
- id: dmsObject.id,
393
- actions: oc.actions,
394
- badges: oc.badges,
395
- instanceData: dmsObject.data,
396
- dmsObject,
397
- title: oc.title ? this.#getResolvedObjectConfigItem(oc.title.propertyName, dmsObject.data) : { propertyName: '', value: '' }
398
- };
399
- tli.icon = oc.icon
400
- ? {
401
- rendererType: 'icon',
402
- propertyName: 'custom',
403
- value: oc.icon.svg
404
- }
405
- : {
406
- rendererType: 'icon',
407
- propertyName: BaseObjectTypeField.OBJECT_TYPE_ID,
408
- value: ownAppliedFlavor && this.appliedFlavor ? this.appliedFlavor.sot : dmsObject.objectTypeId
409
- };
410
- if (oc.description)
411
- tli.description = this.#getResolvedObjectConfigItem(oc.description.propertyName, dmsObject.data);
412
- if (oc.meta)
413
- tli.meta = this.#getResolvedObjectConfigItem(oc.meta.propertyName, dmsObject.data);
414
- if (oc.aside)
415
- tli.aside = this.#getResolvedObjectConfigItem(oc.aside.propertyName, dmsObject.data);
416
- return tli;
417
- });
418
- }
419
- _mapSearchResult(res) {
420
- this.searchExecuted = true;
421
- this._rawResult = res;
422
- return this.oc ? this.#mapToTileData(res.items.map((i) => new DmsObject(i))) : [];
423
- }
424
- #getResolvedObjectConfigItem(propertyName, instanceData) {
425
- const item = {
426
- propertyName: propertyName,
427
- value: instanceData[propertyName]
428
- };
429
- // Meta data are considered properties that start with the property name followed by an underscore.
430
- // Organization fields for example have an additional property 'xyz_title' that contains the resolved
431
- // name of a user while the value itself is the users ID.
432
- const metaData = Object.keys(instanceData)
433
- .filter((key) => key.startsWith(propertyName + '_'))
434
- .map((key) => ({ [key.substring(key.indexOf('_') + 1)]: instanceData[key] }));
435
- // If there are meta data properties, they'll be merged into a Record where the
436
- // key is the property name without the underscore and the actual properties name.
437
- // So { 'xyz_title': 'John Doe' } will be merged into { title: 'John Doe' }
438
- if (metaData.length) {
439
- const meta = metaData.reduce((acc, cur) => ({ ...acc, ...cur }), {});
440
- item.meta = meta;
441
- }
442
- return item;
443
- }
444
- updateTileList(listItems) {
445
- listItems.forEach((item) => {
446
- const idx = this.items.findIndex((listItem) => listItem.id === item.id);
447
- if (idx >= 0 && this.oc) {
448
- const mappedTileData = this.#mapToTileData([item]);
449
- this.items[idx] = mappedTileData[0];
450
- }
451
- });
452
- }
453
- ngOnInit() {
454
- this.#objectConfigService
455
- .getObjectConfigs$(this.bucket() || '', true)
456
- .pipe(takeUntilDestroyed(this.#destroyRef))
457
- .subscribe({
458
- next: (res) => {
459
- this.oc = res;
460
- const q = this.query();
461
- q && this._executeQuery(q);
462
- }
463
- });
464
- }
465
- ngOnDestroy() {
466
- this._keyManager?.destroy();
467
- this.searchResultSubscription.unsubscribe();
468
- }
469
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TileListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
470
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TileListComponent, isStandalone: true, selector: "yuv-tile-list", inputs: { bucket: { classPropertyName: "bucket", publicName: "bucket", isSignal: true, isRequired: false, transformFunction: null }, multiselect: { classPropertyName: "multiselect", publicName: "multiselect", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, flavor: { classPropertyName: "flavor", publicName: "flavor", isSignal: true, isRequired: false, transformFunction: null }, query: { classPropertyName: "query", publicName: "query", isSignal: true, isRequired: false, transformFunction: null }, preselect: { classPropertyName: "preselect", publicName: "preselect", isSignal: true, isRequired: false, transformFunction: null }, highlights: { classPropertyName: "highlights", publicName: "highlights", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemSelect: "itemSelect", copy: "copy", cut: "cut", busy: "busy", queryResult: "queryResult", selectionChange: "selectionChange", itemDblClick: "itemDblClick", ctxMenu: "ctxMenu" }, host: { attributes: { "tabindex": "0", "role": "listbox" }, listeners: { "contextmenu": "onContextMenu($event)", "mousedown": "onMouseDown($event)", "keydown.control.c": "onCopy($event)", "keydown.control.x": "onCut($event)", "keydown": "onKeydown($event)" }, properties: { "class.pagination": "this.pagination" } }, providers: [], queries: [{ propertyName: "emptyContent", first: true, predicate: ["empty"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "tiles", predicate: TileComponent, descendants: true, isSignal: true }, { propertyName: "listItems", predicate: ListItemDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"tiles\"\n [yuvDragSelect]=\"{ disabled: !this.multiselect() || isTouchDevice }\"\n (dragSelectChange)=\"onDragSelectChange($event)\"\n (dragSelect)=\"onDragSelect($event)\"\n>\n @for (i of items; track i.id) {\n <yuv-tile\n yuvDragSelectItem\n yuvListItem\n [style.--i]=\"$index\"\n [attr.aria-selected]=\"selection().includes(i.id)\"\n (click.single)=\"select(i, $event)\"\n (click.double)=\"itemDblClick.emit(i)\"\n [ngClass]=\"{ selected: selection().includes(i.id), last: $last }\"\n [actionContext]=\"options()?.actionContext\"\n [tile]=\"i\"\n [ngStyle]=\"highlightStyles()[i.id]\"\n (contextmenu)=\"contextMenuHandler($event, $index)\"\n ></yuv-tile>\n } @empty {\n <div class=\"empyt-list\">\n @if (searchExecuted && emptyContent()) {\n <ng-content></ng-content>\n }\n </div>\n }\n <div class=\"offset\" (click)=\"clearSelection()\"></div>\n</div>\n@if (pagination) {\n <yuv-pagination [pagination]=\"pagination\" (pageChange)=\"goToPage($event)\"></yuv-pagination>\n}\n", styles: [":host{--_tile-hover-background: var(--tile-hover-background, var(--item-focus-background-color));--_tile-selected-background: var(--tile-selected-background, var(--item-selected-background-color));--_tile-selected-icon-fill: var(--tile-selected-icon-fill, var(--color-accent));--tile-gap: 0px;--tile-border: none;--tile-border-width: 1px;--tile-icon-size: initial;--tile-slot-padding: 2px;--staggered-animation-duration: .2s;--paging-button-size: 18px;--paging-margin: calc(var(--app-pane-padding) / 2);--paging-padding: calc(var(--app-pane-padding) / 4);display:grid;grid-template-rows:1fr auto var(--paging-margin);grid-template-columns:var(--paging-margin) 1fr var(--paging-margin)}:host.pagination yuv-tile.last{margin-block-end:calc(var(--paging-margin) * 2 + var(--paging-padding) * 2 + var(--paging-button-size))}:host .tiles{grid-column:1/-1;grid-row:1/-1;overflow-y:auto;display:flex;flex-flow:column}:host .tiles yuv-tile{flex:0 0 auto}:host .tiles .offset{flex:1 1 auto}:host yuv-pagination{z-index:2;grid-column:2/-2;grid-row:2/-2;border:1px solid var(--panel-divider-color);animation:fade-in-up .2s ease-in-out forwards}:host yuv-tile{cursor:pointer}:host yuv-tile:not(.last){border:var(--tile-border);border-width:var(--tile-border-width);margin-block-end:var(--tile-gap)}:host yuv-tile:hover,:host yuv-tile[aria-current=true]{--tile-background: var(--_tile-hover-background)}:host yuv-tile[aria-selected=true]{--tile-background: var(--_tile-selected-background);--tile-icon-fill: var(--_tile-selected-icon-fill)}:host .empyt-list{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}@keyframes fade-in-up{0%{opacity:0;transform:translateY(var(--paging-margin))}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: TileComponent, selector: "yuv-tile", inputs: ["tile", "actionContext"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: YvcOverlayModule }, { kind: "component", type: PaginationComponent, selector: "yuv-pagination", inputs: ["pagination"], outputs: ["pageChange"] }, { kind: "ngmodule", type: YvcIconModule }, { kind: "directive", type: ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "directive", type: ClickDoubleDirective, selector: "[click.single],[click.double]", inputs: ["debounceTime"], outputs: ["click.double", "click.single"] }, { kind: "directive", type: DragSelectDirective, selector: "[yuvDragSelect]", inputs: ["yuvDragSelect"], outputs: ["dragSelectChange", "dragSelect"] }, { kind: "directive", type: DragSelectItemDirective, selector: "[yuvDragSelectItem]" }] }); }
471
- }
472
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TileListComponent, decorators: [{
473
- type: Component,
474
- args: [{ selector: 'yuv-tile-list', standalone: true, providers: [], imports: [
475
- NgClass,
476
- NgStyle,
477
- TileComponent,
478
- TranslateModule,
479
- ReactiveFormsModule,
480
- YvcOverlayModule,
481
- PaginationComponent,
482
- YvcIconModule,
483
- ListItemDirective,
484
- ClickDoubleDirective,
485
- DragSelectDirective,
486
- DragSelectItemDirective
487
- ], host: {
488
- tabindex: '0',
489
- role: 'listbox'
490
- }, template: "<div\n class=\"tiles\"\n [yuvDragSelect]=\"{ disabled: !this.multiselect() || isTouchDevice }\"\n (dragSelectChange)=\"onDragSelectChange($event)\"\n (dragSelect)=\"onDragSelect($event)\"\n>\n @for (i of items; track i.id) {\n <yuv-tile\n yuvDragSelectItem\n yuvListItem\n [style.--i]=\"$index\"\n [attr.aria-selected]=\"selection().includes(i.id)\"\n (click.single)=\"select(i, $event)\"\n (click.double)=\"itemDblClick.emit(i)\"\n [ngClass]=\"{ selected: selection().includes(i.id), last: $last }\"\n [actionContext]=\"options()?.actionContext\"\n [tile]=\"i\"\n [ngStyle]=\"highlightStyles()[i.id]\"\n (contextmenu)=\"contextMenuHandler($event, $index)\"\n ></yuv-tile>\n } @empty {\n <div class=\"empyt-list\">\n @if (searchExecuted && emptyContent()) {\n <ng-content></ng-content>\n }\n </div>\n }\n <div class=\"offset\" (click)=\"clearSelection()\"></div>\n</div>\n@if (pagination) {\n <yuv-pagination [pagination]=\"pagination\" (pageChange)=\"goToPage($event)\"></yuv-pagination>\n}\n", styles: [":host{--_tile-hover-background: var(--tile-hover-background, var(--item-focus-background-color));--_tile-selected-background: var(--tile-selected-background, var(--item-selected-background-color));--_tile-selected-icon-fill: var(--tile-selected-icon-fill, var(--color-accent));--tile-gap: 0px;--tile-border: none;--tile-border-width: 1px;--tile-icon-size: initial;--tile-slot-padding: 2px;--staggered-animation-duration: .2s;--paging-button-size: 18px;--paging-margin: calc(var(--app-pane-padding) / 2);--paging-padding: calc(var(--app-pane-padding) / 4);display:grid;grid-template-rows:1fr auto var(--paging-margin);grid-template-columns:var(--paging-margin) 1fr var(--paging-margin)}:host.pagination yuv-tile.last{margin-block-end:calc(var(--paging-margin) * 2 + var(--paging-padding) * 2 + var(--paging-button-size))}:host .tiles{grid-column:1/-1;grid-row:1/-1;overflow-y:auto;display:flex;flex-flow:column}:host .tiles yuv-tile{flex:0 0 auto}:host .tiles .offset{flex:1 1 auto}:host yuv-pagination{z-index:2;grid-column:2/-2;grid-row:2/-2;border:1px solid var(--panel-divider-color);animation:fade-in-up .2s ease-in-out forwards}:host yuv-tile{cursor:pointer}:host yuv-tile:not(.last){border:var(--tile-border);border-width:var(--tile-border-width);margin-block-end:var(--tile-gap)}:host yuv-tile:hover,:host yuv-tile[aria-current=true]{--tile-background: var(--_tile-hover-background)}:host yuv-tile[aria-selected=true]{--tile-background: var(--_tile-selected-background);--tile-icon-fill: var(--_tile-selected-icon-fill)}:host .empyt-list{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}@keyframes fade-in-up{0%{opacity:0;transform:translateY(var(--paging-margin))}to{opacity:1;transform:translateY(0)}}\n"] }]
491
- }], ctorParameters: () => [], propDecorators: { onContextMenu: [{
492
- type: HostListener,
493
- args: ['contextmenu', ['$event']]
494
- }], onMouseDown: [{
495
- type: HostListener,
496
- args: ['mousedown', ['$event']]
497
- }], onCopy: [{
498
- type: HostListener,
499
- args: ['keydown.control.c', ['$event']]
500
- }], onCut: [{
501
- type: HostListener,
502
- args: ['keydown.control.x', ['$event']]
503
- }], onKeydown: [{
504
- type: HostListener,
505
- args: ['keydown', ['$event']]
506
- }], pagination: [{
507
- type: HostBinding,
508
- args: ['class.pagination']
509
- }] } });
510
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvdGlsZS1saXN0L3NyYy9saWIvdGlsZS1saXN0L3RpbGUtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtZnJhbWV3b3JrL3RpbGUtbGlzdC9zcmMvbGliL3RpbGUtbGlzdC90aWxlLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFHWixRQUFRLEVBQ1IsWUFBWSxFQUNaLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixTQUFTLEVBQ1QsWUFBWSxFQUVaLG1CQUFtQixFQUluQixhQUFhLEVBQ2IsYUFBYSxFQUNiLGVBQWUsRUFFZixZQUFZLEVBQ2IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNySCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJB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dUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTTdDLEtBQUs7c0JBREosWUFBWTt1QkFBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNN0MsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFxQ0YsVUFBVTtzQkFBMUMsV0FBVzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIGNvbXB1dGVkLFxuICBjb250ZW50Q2hpbGQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbiAgdmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmFzZU9iamVjdFR5cGVGaWVsZCxcbiAgRGV2aWNlU2VydmljZSxcbiAgRG1zT2JqZWN0LFxuICBFdmVudFNlcnZpY2UsXG4gIE9iamVjdENvbmZpZ1JlY29yZCxcbiAgT2JqZWN0Q29uZmlnU2VydmljZSxcbiAgUmVzb2x2ZWRPYmplY3RDb25maWdJdGVtLFxuICBTZWFyY2hRdWVyeSxcbiAgU2VhcmNoUmVzdWx0LFxuICBTZWFyY2hTZXJ2aWNlLFxuICBTeXN0ZW1TZXJ2aWNlLFxuICBUcmFuc2xhdGVNb2R1bGUsXG4gIFl1dkV2ZW50LFxuICBZdXZFdmVudFR5cGVcbn0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBDbGlja0RvdWJsZURpcmVjdGl2ZSwgRHJhZ1NlbGVjdERpcmVjdGl2ZSwgRHJhZ1NlbGVjdEl0ZW1EaXJlY3RpdmUgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvY29tbW9uJztcbmltcG9ydCB7IFRpbGVDb21wb25lbnQgfSBmcm9tICcuLi90aWxlL3RpbGUuY29tcG9uZW50JztcblxuaW1wb3J0IHsgQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFlVVl9JQ09OUyB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9pY29ucyc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uLCBQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgT2JqZWN0Rmxhdm9yIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtc2hlbGwtY29yZSc7XG5pbXBvcnQgeyBZdmNJY29uTW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgWXZjT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9vdmVybGF5JztcbmltcG9ydCB7IFRpbGVEYXRhLCBUaWxlTGlzdENvbmZpZ09wdGlvbnMsIFRpbGVMaXN0SGlnaGxpZ2h0IH0gZnJvbSAnLi90aWxlLWxpc3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IGZpbmFsaXplLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExpc3RJdGVtRGlyZWN0aXZlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL2xpc3QnO1xuXG4vKipcbiAqIExpc3QgdGhhdCByZW5kZXJzIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggcXVlcnkgYXMgb2JqZWN0IGNvbmZpZyBiYXNlZCB0aWxlcy4gSXQgYWxzbyBjb250YWlucyBhIGNvbXBvbmVudCB0b1xuICogc2V0IHVwIHRoYXQgY29uZmlndXJhdGlvbi5cbiAqXG4gKiAjIyBQYWdpbmdcbiAqIElmIHRoZSBzZWFyY2ggcmVzdWx0IGNvbnRhaW5zIG1vcmUgaXRlbXMgdGhhbiB0aGUgcGFnZSBzaXplLCB0aGUgbGlzdCB3aWxsIHNob3cgYVxuICogcGFnaW5hdGlvbiBjb250cm9sIHRvIG5hdmlnYXRlIGluYmV0d2VlbiB0aGUgcGFnZXMuXG4gKlxuICogIyMgU3RhZ2dlcmVkIGFuaW1hdGlvblxuICogQWRkaW5nIGEgY2xhc3Mgb2YgYHN0YWdnZXJlZGAgdG8gdGhlIGB5dXYtdGlsZS1saXN0YCBjb21wb25lbnQgd2lsbCBhbmltYXRlXG4gKiB0aGUgdGlsZXMgaW4gYSBzdGFnZ2VyZWQgd2F5IChvbmx5IGlmIHRoZSB1c2VyIGhhcyBub3Qgc2V0IHVwIHRoZSBPUyB0byBub3RcbiAqIHBsYXkgYW5pbWF0aW9uKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneXV2LXRpbGUtbGlzdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW10sXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nU3R5bGUsXG4gICAgVGlsZUNvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBZdmNPdmVybGF5TW9kdWxlLFxuICAgIFBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgWXZjSWNvbk1vZHVsZSxcbiAgICBMaXN0SXRlbURpcmVjdGl2ZSxcbiAgICBDbGlja0RvdWJsZURpcmVjdGl2ZSxcbiAgICBEcmFnU2VsZWN0RGlyZWN0aXZlLFxuICAgIERyYWdTZWxlY3RJdGVtRGlyZWN0aXZlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi90aWxlLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdGlsZS1saXN0LmNvbXBvbmVudC5zY3NzJyxcbiAgaG9zdDoge1xuICAgIHRhYmluZGV4OiAnMCcsXG4gICAgcm9sZTogJ2xpc3Rib3gnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgVGlsZUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICNvYmplY3RDb25maWdTZXJ2aWNlID0gaW5qZWN0KE9iamVjdENvbmZpZ1NlcnZpY2UpO1xuICAjc3lzdGVtID0gaW5qZWN0KFN5c3RlbVNlcnZpY2UpO1xuICAjc2VhcmNoU2VydmljZSA9IGluamVjdChTZWFyY2hTZXJ2aWNlKTtcbiAgI2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICNkZXZpY2UgPSBpbmplY3QoRGV2aWNlU2VydmljZSk7XG4gICNlbFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgI2V2ZW50cyA9IGluamVjdChFdmVudFNlcnZpY2UpO1xuXG4gIGVtcHR5Q29udGVudCA9IGNvbnRlbnRDaGlsZDxFbGVtZW50UmVmPignZW1wdHknKTtcbiAgaXNUb3VjaERldmljZSA9IHRoaXMuI2RldmljZS5pc1RvdWNoRW5hYmxlZDtcblxuICB0aWxlcyA9IHZpZXdDaGlsZHJlbihUaWxlQ29tcG9uZW50KTtcblxuICBsaXN0SXRlbXMgPSB2aWV3Q2hpbGRyZW4oTGlzdEl0ZW1EaXJlY3RpdmUpO1xuICAjbGlzdEl0ZW1zRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGhpcy5fa2V5TWFuYWdlcikgdGhpcy5fa2V5TWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5fa2V5TWFuYWdlciA9IG5ldyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcih0aGlzLmxpc3RJdGVtcygpIHx8IFtdKS53aXRoV3JhcCgpO1xuICB9KTtcblxuICBzZWFyY2hSZXN1bHRTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgI29wZW5Db250ZXh0TWVudSA9IHNpZ25hbDx7IGV2ZW50OiBNb3VzZUV2ZW50IH0gfCBudWxsPihudWxsKTtcbiAgI2NvbnRleHRGbGFnID0gc2lnbmFsKGZhbHNlKTtcblxuICBASG9zdExpc3RlbmVyKCdjb250ZXh0bWVudScsIFsnJGV2ZW50J10pXG4gIG9uQ29udGV4dE1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQgfCBQb2ludGVyRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0aGlzLiNjb250ZXh0RmxhZygpKSB7XG4gICAgICB0aGlzLiNjb250ZXh0RmxhZy5zZXQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jdHhNZW51LmVtaXQoeyBldmVudCwgc2VsZWN0aW9uOiB0aGlzLnNlbGVjdGlvbigpIH0pO1xuICAgIH0sIDIwMCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgIC8vIFRPRE86IENsaWNraW5nIG9uIHRoZSBzY3JvbGxiYXIgYWxzbyByZXNldHMgc2VsZWN0aW9uIC4uLiBuZWVkIHRvIGZpbmQgYSBkaWZmZXJlbnQgd2F5XG4gICAgLy8gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkucGFyZW50RWxlbWVudD8udGFnTmFtZSA9PT0gJ1lVVi1USUxFLUxJU1QnICYmIHRoaXMuI3NlbGVjdCgtMSk7XG4gICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgdGhpcy4jY29udGV4dEZsYWcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5vbkNvbnRleHRNZW51KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmNvbnRyb2wuYycsIFsnJGV2ZW50J10pXG4gIG9uQ29weShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbi5sZW5ndGgpIHRoaXMuY29weS5lbWl0KHRoaXMuX3NlbGVjdGlvblRvVGlsZURhdGEoKSk7XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5jb250cm9sLngnLCBbJyRldmVudCddKVxuICBvbkN1dChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbi5sZW5ndGgpIHRoaXMuY3V0LmVtaXQodGhpcy5fc2VsZWN0aW9uVG9UaWxlRGF0YSgpKTtcbiAgfVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgc3dpdGNoIChldmVudC5jb2RlKSB7XG4gICAgICBjYXNlICdFc2NhcGUnOiB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdFbnRlcic6IHtcbiAgICAgICAgLy8gc2FtZSBhcyBkb3VibGUgY2xpY2tcbiAgICAgICAgY29uc3QgYWlpOiBudW1iZXIgPSB0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCAhPT0gbnVsbCA/IHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4IDogLTE7XG4gICAgICAgIGlmIChhaWkgPj0gMCkge1xuICAgICAgICAgIHRoaXMuaXRlbURibENsaWNrLmVtaXQodGhpcy5pdGVtc1thaWldKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1NwYWNlJzoge1xuICAgICAgICAvLyBzYW1lIGFzIHNpbmdsZSBjbGlja1xuICAgICAgICBjb25zdCBhaWk6IG51bWJlciA9IHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4ICE9PSBudWxsID8gdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXggOiAtMTtcbiAgICAgICAgaWYgKGFpaSA+PSAwKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3QodGhpcy5pdGVtc1thaWldLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXI/Lm9uS2V5ZG93bihldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfa2V5TWFuYWdlciE6IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPExpc3RJdGVtRGlyZWN0aXZlPjtcblxuICBfYnVzeSA9IHNpZ25hbChmYWxzZSk7XG4gICNfYnVzeUVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgdGhpcy5idXN5LmVtaXQodGhpcy5fYnVzeSgpKTtcbiAgfSk7XG4gIHByaXZhdGUgb2M/OiBPYmplY3RDb25maWdSZWNvcmQ7XG4gIC8vIHN0YXRlIG9mIHBhZ2luYXRpb25cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYWdpbmF0aW9uJykgcGFnaW5hdGlvbj86IFBhZ2luYXRpb247XG4gIHByaXZhdGUgX3NlbGVjdGlvbjogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSBfbGFzdFNlbGVjdGlvbj86IG51bWJlcjtcblxuICBzZWxlY3RlZFRpbGUgPSBzaWduYWw8VGlsZURhdGFbXT4oW10pO1xuICBlbXB5dEljb24gPSBzaWduYWw8c3RyaW5nPihZVVZfSUNPTlMudHJhc2gpO1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBzZWxlY3RlZCBsaXN0IGl0ZW1cbiAgICovXG4gIHNlbGVjdGlvbiA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuICAvKipcbiAgICogVGlsZSBjb25maWd1cmF0aW9ucyBhcmUgc3RvcmVkIGdsb2JhbGx5IGZvciBhbGwgYXBwcy4gSWYgeW91IHdhbnQgYVxuICAgKiBzZXBhcmF0ZSBjb25maWcgZm9yIHlvdXIgYXBwL2NvbXBvbmVudCB5b3UgY2FuIHNwZWNpZnkgYSBidWNrZXQuIEEgYnVja2V0XG4gICAqIGlzIGJhc2ljYWxseSBhbiBJRCB3aGVyZSB5b3VyIGN1c3RvbSB0aWxlIGNvbmZpZyB3aWxsIGJlIHN0b3JlZCBhbmRcbiAgICogcmV0cmlldmVkLiBCdWNrZXRzIHNob3VsZCBiZSB1bmlxdWUgc28gYmUgc3VyZSB0byB1c2UgYSB1bmlxdWUgbmFtZXNwYWNlLlxuICAgKi9cbiAgYnVja2V0ID0gaW5wdXQ8c3RyaW5nPigpO1xuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYWJpbGl0eSB0byBzZWxlY3QgbXVsdGlsZSB0aWxlc1xuICAgKi9cbiAgbXVsdGlzZWxlY3QgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgb3B0aW9ucyA9IGlucHV0PFRpbGVMaXN0Q29uZmlnT3B0aW9ucyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBmbGF2b3IgPSBpbnB1dDxPYmplY3RGbGF2b3I+KCk7XG5cbiAgZmxhdm9yRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBmID0gdGhpcy5mbGF2b3IoKTtcbiAgICBpZiAoZikgdGhpcy5hcHBseUZsYXZvcihmKTtcbiAgfSk7XG4gIGFwcGxpZWRGbGF2b3I/OiBPYmplY3RGbGF2b3I7XG4gIC8qKlxuICAgKiBUaGUgc2VhcmNoIHF1ZXJ5IHRvIGJlIGV4ZWN1dGVkXG4gICAqL1xuICBxdWVyeSA9IGlucHV0PFNlYXJjaFF1ZXJ5IHwgbnVsbD4oKTtcblxuICAvLyBJdGVtcyB0byBiZSBwcmVzZWxlY3RlZCAoVE9ETzogcmVtb3ZlIGFmdGVyIHJlZmFjdG9yaW5nID8/PylcbiAgcHJlc2VsZWN0ID0gaW5wdXQ8c3RyaW5nW10+KCk7XG5cbiAgaGlnaGxpZ2h0cyA9IGlucHV0PFRpbGVMaXN0SGlnaGxpZ2h0W10gfCBudWxsPihbXSk7XG4gIGhpZ2hsaWdodFN0eWxlcyA9IGNvbXB1dGVkPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4oKCkgPT4ge1xuICAgIGNvbnN0IHg6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHt9O1xuICAgICh0aGlzLmhpZ2hsaWdodHMoKSB8fCBbXSkuZm9yRWFjaCgoaGlnaGxpZ2h0KSA9PiB7XG4gICAgICBoaWdobGlnaHQuaWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgIGlmICgheFtpZF0pIHhbaWRdID0ge307XG4gICAgICAgIHhbaWRdID0geyAuLi54W2lkXSwgLi4uaGlnaGxpZ2h0LmNzc1N0eWxlcyB9O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHg7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYSBsaXN0IGl0ZW0gaGFzIGJlZW4gc2VsZWN0ZWRcbiAgICovXG4gIGl0ZW1TZWxlY3QgPSBvdXRwdXQ8VGlsZURhdGE+KCk7XG4gIGNvcHkgPSBvdXRwdXQ8VGlsZURhdGFbXT4oKTtcbiAgY3V0ID0gb3V0cHV0PFRpbGVEYXRhW10+KCk7XG4gIGJ1c3kgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcXVlcnlSZXN1bHQgPSBvdXRwdXQ8eyB0b3RhbENvdW50OiBudW1iZXIgfT4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIHNlbGVjdGVkIGl0ZW1zIGNoYW5nZWQuIElmICdtdWx0aXNlbGVjdCcgaW5wdXQgaXMgc2V0IHRvIHRydWUsIHRoaXMgd2lsbFxuICAgKiBlbWl0IHRoZSB3aG9sZSBzZWxlY3Rpb24sIHdoaWxlICdpdGVtU2VsZWN0JyB3aWxsIG9ubHkgZW1pdCB0aGUgaXRlbSB0aGF0IGN1cnJlbnRseVxuICAgKiBoYXMgYmVlIGFkZGVkIHRvIHRoZSBzZWxlY3Rpb24uXG4gICAqL1xuICBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8VGlsZURhdGFbXT4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgbGlzdCBpdGVtIGhhcyBiZWVuIGRvdWJsZWNsaWNrZWRcbiAgICovXG4gIGl0ZW1EYmxDbGljayA9IG91dHB1dDxUaWxlRGF0YT4oKTtcblxuICBjdHhNZW51ID0gb3V0cHV0PHsgZXZlbnQ6IE1vdXNlRXZlbnQgfCBQb2ludGVyRXZlbnQ7IHNlbGVjdGlvbjogYW55IH0+KCk7XG5cbiAgLy8gdGhlIGl0ZW1zIHJlbmRlcmVkIGluIHRoZSBsaXN0XG4gIGl0ZW1zOiBUaWxlRGF0YVtdID0gW107XG4gIHByaXZhdGUgX3Jhd1Jlc3VsdD86IFNlYXJjaFJlc3VsdDtcbiAgc2VhcmNoRXhlY3V0ZWQgPSBmYWxzZTtcblxuICAjcXVlcnk/OiBTZWFyY2hRdWVyeSB8IG51bGw7XG4gICNleGVjdXRlUXVlcnlFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIC8vIGV4ZWN1dGUgdGhlIHF1ZXJ5IGVhY2ggdGltZSBpdCBjaGFuZ2VzXG4gICAgdGhpcy4jcXVlcnkgPSB0aGlzLnF1ZXJ5KCk7XG4gICAgaWYgKHRoaXMuI3F1ZXJ5ICYmIHRoaXMub2MpXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9leGVjdXRlUXVlcnkodGhpcy4jcXVlcnkgfHwgdW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5lbXB5dEljb24uc2V0KFlVVl9JQ09OUy5yZWZyZXNoKTtcbiAgICAgIH0pO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiNldmVudHNcbiAgICAgIC5vbihZdXZFdmVudFR5cGUuRE1TX09CSkVDVF9VUERBVEVEKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKChlOiBZdXZFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBkbXNPYmplY3QgPSBlLmRhdGEgYXMgRG1zT2JqZWN0O1xuICAgICAgICAvLyBjaGVjayBpZiB0aGUgdXBkYXRlZCBvYmplY3QgaXMgcGFydCBvZiB0aGUgbGlzdFxuICAgICAgICB0aGlzLml0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gZG1zT2JqZWN0LmlkKSA+PSAwICYmIHRoaXMudXBkYXRlVGlsZUxpc3QoW2Rtc09iamVjdF0pO1xuICAgICAgfSk7XG4gIH1cblxuICBjb250ZXh0TWVudUhhbmRsZXIoZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoIWNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh0aGlzLnRpbGVzKClbaW5kZXhdLmVsUmVmLm5hdGl2ZUVsZW1lbnQuYXJpYVNlbGVjdGVkKSkge1xuICAgICAgdGhpcy5fc2VsZWN0QnlJbmRleChpbmRleCwgZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdChpOiBUaWxlRGF0YSwgZXZ0OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMuaXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmlkID09PSBpLmlkKTtcbiAgICB0aGlzLl9zZWxlY3RCeUluZGV4KGlkeCwgZXZ0KTtcbiAgfVxuXG4gIG9uRHJhZ1NlbGVjdENoYW5nZShzZWw6IG51bWJlcltdKSB7XG4gICAgaWYgKHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4ICE9PSAtMSkgdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcblxuICAgIHRoaXMuX3NlbGVjdGlvbiA9IHNlbDtcbiAgICB0aGlzLl9zZWxlY3Rpb24uc29ydCgpO1xuICAgIHRoaXMubGlzdEl0ZW1zKCkuZm9yRWFjaCgoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUsIGk6IG51bWJlcikgPT4gKGl0ZW0uc2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3Rpb24uaW5jbHVkZXMoaSkpKTtcbiAgfVxuXG4gIG9uRHJhZ1NlbGVjdChzZWw6IG51bWJlcltdKSB7XG4gICAgdGhpcy4jZWxSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuX3NlbGVjdGlvbiA9IHNlbDtcbiAgICB0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oc2VsWzBdIHx8IDApO1xuICAgIGNvbnN0IHRpbGVzID0gdGhpcy5fc2VsZWN0aW9uVG9UaWxlRGF0YSgpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGlsZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0QnlJbmRleChpZHg6IG51bWJlciwgZXZ0PzogTW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQpIHtcbiAgICB0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oaWR4KTtcbiAgICB0aGlzLiNzZWxlY3QoaWR4LCBldnQ/LnNoaWZ0S2V5LCBldnQ/LmN0cmxLZXkpO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICBpZiAodGhpcy4jcXVlcnkpIHtcbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5nb1RvUGFnZSh0aGlzLnBhZ2luYXRpb24ucGFnZSk7XG4gICAgICB9IGVsc2UgdGhpcy5fZXhlY3V0ZVF1ZXJ5KHRoaXMucXVlcnkoKSB8fCB1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5Rmxhdm9yKGZsYXZvcjogT2JqZWN0Rmxhdm9yKSB7XG4gICAgdGhpcy5hcHBsaWVkRmxhdm9yID0gdGhpcy5hcHBsaWVkRmxhdm9yPy5pZCA9PT0gZmxhdm9yLmlkID8gdW5kZWZpbmVkIDogZmxhdm9yO1xuICAgIGlmICh0aGlzLl9yYXdSZXN1bHQpIHRoaXMuaXRlbXMgPSB0aGlzLl9tYXBTZWFyY2hSZXN1bHQodGhpcy5fcmF3UmVzdWx0KTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0aW9uKHNpbGVudCA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IFtdO1xuICAgICAgdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcbiAgICAgIHRoaXMubGlzdEl0ZW1zKCkuZm9yRWFjaCgoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUsIGk6IG51bWJlcikgPT4gKGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICAgICAgaWYgKCFzaWxlbnQpIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoW10pO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdE5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2xhc3RTZWxlY3Rpb24pIHtcbiAgICAgIGxldCBpID0gdGhpcy5fbGFzdFNlbGVjdGlvbiArIDE7XG4gICAgICBpZiAoaSA+IHRoaXMuaXRlbXMubGVuZ3RoKSBpID0gMDtcbiAgICAgIHRoaXMuI3NlbGVjdChpKTtcbiAgICB9XG4gIH1cbiAgc2VsZWN0UHJldigpIHtcbiAgICBpZiAodGhpcy5fbGFzdFNlbGVjdGlvbikge1xuICAgICAgbGV0IGkgPSB0aGlzLl9sYXN0U2VsZWN0aW9uIC0gMTtcbiAgICAgIGlmIChpIDwgMCkgaSA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTtcbiAgICAgIHRoaXMuI3NlbGVjdCh0aGlzLl9sYXN0U2VsZWN0aW9uIC0gMSk7XG4gICAgfVxuICB9XG5cbiAgZ29Ub1BhZ2UocGFnZTogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLiNxdWVyeSkgcmV0dXJuO1xuICAgIHRoaXMuX2J1c3kuc2V0KHRydWUpO1xuICAgIHRoaXMuI3NlYXJjaFNlcnZpY2VcbiAgICAgIC5nZXRQYWdlKHRoaXMuI3F1ZXJ5LCBwYWdlKVxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5fYnVzeS5zZXQoZmFsc2UpKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBTZWFyY2hSZXN1bHQpID0+IHtcbiAgICAgICAgICB0aGlzLiNzZXR1cFBhZ2luYXRpb24ocmVzKTtcbiAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5fbWFwU2VhcmNoUmVzdWx0KHJlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgLy8gVE9ETzogaG93IHNob3VsZCBlcnJvcnMgYmUgaGFuZGxlcyBpbiBjYXNlIGhhdCBsb2FkaW5nIHBhZ2VzIGZhaWxcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAjc2VsZWN0KGluZGV4OiBudW1iZXIsIHNoaWZ0S2V5ID0gZmFsc2UsIGN0cmxLZXkgPSBmYWxzZSkge1xuICAgIHRoaXMuI2VsUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB0aGlzLl9zZWxlY3Rpb24gPSBbXTtcbiAgICBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KCkpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gdGhpcy5fc2VsZWN0aW9uLmZpbHRlcigoaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgICAgICBpZiAoY3RybEtleSkge1xuICAgICAgICAgIC8vIGlmIGN0cmwga2V5IGFkZCB0byBzZWxlY3Rpb25cbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24ucHVzaChpbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2hpZnRLZXkpIHtcbiAgICAgICAgICAvLyBhZGQgcmFuZ2VcbiAgICAgICAgICBpZiAodGhpcy5fbGFzdFNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5fbGFzdFNlbGVjdGlvbiA8IGluZGV4ID8gdGhpcy5fbGFzdFNlbGVjdGlvbiA6IGluZGV4O1xuICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLl9sYXN0U2VsZWN0aW9uID4gaW5kZXggPyB0aGlzLl9sYXN0U2VsZWN0aW9uIDogaW5kZXg7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbi5wdXNoKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBbaW5kZXhdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgdGhpcy5fc2VsZWN0aW9uID0gW2luZGV4XTtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IFsuLi5uZXcgU2V0KHRoaXMuX3NlbGVjdGlvbildO1xuICAgIH1cbiAgICB0aGlzLl9sYXN0U2VsZWN0aW9uID0gdGhpcy5fc2VsZWN0aW9uLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGluZGV4O1xuICAgIHRoaXMuX3NlbGVjdGlvbi5zb3J0KCk7XG5cbiAgICB0aGlzLmxpc3RJdGVtcygpLmZvckVhY2goKGl0ZW06IExpc3RJdGVtRGlyZWN0aXZlLCBpOiBudW1iZXIpID0+IChpdGVtLnNlbGVjdGVkID0gdGhpcy5fc2VsZWN0aW9uLmluY2x1ZGVzKGkpKSk7XG4gICAgY29uc3QgdGlsZXMgPSB0aGlzLl9zZWxlY3Rpb25Ub1RpbGVEYXRhKCk7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aWxlcyk7XG4gICAgdGlsZXMubGVuZ3RoID09PSAxICYmIHRoaXMuaXRlbVNlbGVjdC5lbWl0KHRpbGVzWzBdKTtcbiAgICB0aGlzLnNlbGVjdGVkVGlsZS5zZXQodGhpcy5fc2VsZWN0aW9uLm1hcCgoaWR4KSA9PiB0aGlzLml0ZW1zW2lkeF0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdGlvblRvVGlsZURhdGEoKTogVGlsZURhdGFbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbi5tYXAoKGlkeCkgPT4gdGhpcy5pdGVtc1tpZHhdKTtcbiAgfVxuXG4gIHByaXZhdGUgX2V4ZWN1dGVRdWVyeShxOiBTZWFyY2hRdWVyeSB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChxICYmIHRoaXMuI3N5c3RlbS5zeXN0ZW0pIHtcbiAgICAgIHRoaXMuc2VhcmNoRXhlY3V0ZWQgPSBmYWxzZTtcbiAgICAgIC8vIHJlc2V0IGl0ZW1zIHRvIGF2b2lkIG9sZCBkYXRhIGJlaW5nIHNob3duIHdoaWxlIG5ldyBzdHVmZiBpcyBsb2FkZWRcbiAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgIC8vIHEuZmllbGRzID0gT2JqZWN0LmtleXModGhpcy4jc3lzdGVtLnN5c3RlbS5hbGxGaWVsZHMpO1xuICAgICAgcS5maWVsZHMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9idXN5LnNldCh0cnVlKTtcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0U3Vic2NyaXB0aW9uID0gdGhpcy4jc2VhcmNoU2VydmljZVxuICAgICAgICAuc2VhcmNoKHEpXG4gICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHRoaXMuX2J1c3kuc2V0KGZhbHNlKSkpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXM6IFNlYXJjaFJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4jc2V0dXBQYWdpbmF0aW9uKHJlcyk7XG4gICAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5fbWFwU2VhcmNoUmVzdWx0KHJlcyk7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UmVzdWx0LmVtaXQoeyB0b3RhbENvdW50OiByZXMuaXRlbXMubGVuZ3RoIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBwcmVzZWxlY3QgPSB0aGlzLnByZXNlbGVjdCgpO1xuICAgICAgICAgICAgaWYgKHByZXNlbGVjdCkge1xuICAgICAgICAgICAgICBwcmVzZWxlY3QuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLml0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaWQpO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gMCkgdGhpcy5fc2VsZWN0QnlJbmRleChpZHgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgI3NldHVwUGFnaW5hdGlvbihzZWFyY2hSZXN1bHQ6IFNlYXJjaFJlc3VsdCkge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy4jcXVlcnkgJiYgc2VhcmNoUmVzdWx0LnRvdGFsTnVtSXRlbXMgPiAodGhpcy4jcXVlcnkuc2l6ZSB8fCBTZWFyY2hTZXJ2aWNlLkRFRkFVTFRfUVVFUllfU0laRSkpIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHtcbiAgICAgICAgdG90YWw6IHNlYXJjaFJlc3VsdC50b3RhbE51bUl0ZW1zLFxuICAgICAgICBwYWdlczogTWF0aC5jZWlsKHNlYXJjaFJlc3VsdC50b3RhbE51bUl0ZW1zIC8gKHRoaXMuI3F1ZXJ5Py5zaXplIHx8IFNlYXJjaFNlcnZpY2UuREVGQVVMVF9RVUVSWV9TSVpFKSksXG4gICAgICAgIHBhZ2U6ICghdGhpcy4jcXVlcnk/LmZyb20gPyAwIDogdGhpcy4jcXVlcnkuZnJvbSAvICh0aGlzLiNxdWVyeT8uc2l6ZSB8fCBTZWFyY2hTZXJ2aWNlLkRFRkFVTFRfUVVFUllfU0laRSkpICsgMVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAjbWFwVG9UaWxlRGF0YShvYmplY3RzOiBEbXNPYmplY3RbXSk6IFRpbGVEYXRhW10ge1xuICAgIHJldHVybiBvYmplY3RzLm1hcCgoZG1zT2JqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzb3RzID0gZG1zT2JqZWN0LnNvdHMgfHwgW107XG5cbiAgICAgIGxldCBvYyA9IHRoaXMub2MhW2Rtc09iamVjdC5vYmplY3RUeXBlSWRdO1xuXG4gICAgICAvLyBjaGVjayBpZiByZXN1bHQgb2l0ZW0gbWF0Y2hlcyB2aXJ0dWFsIGNvbmZpZyB0eXBlXG4gICAgICBjb25zdCBjZmdUeXBlcyA9IHRoaXMub3B0aW9ucygpPy5jb25maWdUeXBlcyB8fCBbXTtcblxuICAgICAgY2ZnVHlwZXMuZm9yRWFjaCgoY2Z0KSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXNUeXBlID0gIWNmdC5vYmplY3RUeXBlIHx8IGNmdC5vYmplY3RUeXBlID09PSBkbXNPYmplY3Qub2JqZWN0VHlwZUlkO1xuICAgICAgICBjb25zdCBtYXRjaGVzU09UcyA9ICFjZnQuc290cyB8fCAhY2Z0LnNvdHMubGVuZ3RoIHx8IGNmdC5zb3RzLmV2ZXJ5KChzb3QpID0+IHNvdHMuaW5jbHVkZXMoc290KSk7XG5cbiAgICAgICAgaWYgKG1hdGNoZXNUeXBlICYmIG1hdGNoZXNTT1RzKSBvYyA9IHRoaXMub2MhW2NmdC5pZF07XG4gICAgICB9KTtcblxuICAgICAgLy8gb25seSBhcHBseSBhIGZsYXZvciBpZiB0aGUgb2JqZWN0IGhhcyB0aGF0IFNPVFxuICAgICAgY29uc3Qgb3duQXBwbGllZEZsYXZvciA9IHRoaXMuYXBwbGllZEZsYXZvciAmJiBzb3RzLmluY2x1ZGVzKHRoaXMuYXBwbGllZEZsYXZvci5zb3QpICYmIHRoaXMub2MhW3RoaXMuYXBwbGllZEZsYXZvci5zb3RdO1xuICAgICAgaWYgKG93bkFwcGxpZWRGbGF2b3IpIHtcbiAgICAgICAgb2MgPSB0aGlzLm9jIVt0aGlzLmFwcGxpZWRGbGF2b3IhLmlkXTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvYykgb2MgPSB0aGlzLiNvYmplY3RDb25maWdTZXJ2aWNlLmdldERlZmF1bHRDb25maWcoZG1zT2JqZWN0Lm9iamVjdFR5cGVJZCk7XG5cbiAgICAgIGNvbnN0IHRsaTogVGlsZURhdGEgPSB7XG4gICAgICAgIG9iamVjdFR5cGVJZDogZG1zT2JqZWN0Lm9iamVjdFR5cGVJZCxcbiAgICAgICAgaWQ6IGRtc09iamVjdC5pZCxcbiAgICAgICAgYWN0aW9uczogb2MuYWN0aW9ucyxcbiAgICAgICAgYmFkZ2VzOiBvYy5iYWRnZXMsXG4gICAgICAgIGluc3RhbmNlRGF0YTogZG1zT2JqZWN0LmRhdGEsXG4gICAgICAgIGRtc09iamVjdCxcbiAgICAgICAgdGl0bGU6IG9jLnRpdGxlID8gdGhpcy4jZ2V0UmVzb2x2ZWRPYmplY3RDb25maWdJdGVtKG9jLnRpdGxlLnByb3BlcnR5TmFtZSwgZG1zT2JqZWN0LmRhdGEpIDogeyBwcm9wZXJ0eU5hbWU6ICcnLCB2YWx1ZTogJycgfVxuICAgICAgfTtcblxuICAgICAgdGxpLmljb24gPSBvYy5pY29uXG4gICAgICAgID8ge1xuICAgICAgICAgICAgcmVuZGVyZXJUeXBlOiAnaWNvbicsXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdjdXN0b20nLFxuICAgICAgICAgICAgdmFsdWU6IG9jLmljb24uc3ZnXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIHJlbmRlcmVyVHlwZTogJ2ljb24nLFxuICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBCYXNlT2JqZWN0VHlwZUZpZWxkLk9CSkVDVF9UWVBFX0lELFxuICAgICAgICAgICAgdmFsdWU6IG93bkFwcGxpZWRGbGF2b3IgJiYgdGhpcy5hcHBsaWVkRmxhdm9yID8gdGhpcy5hcHBsaWVkRmxhdm9yLnNvdCA6IGRtc09iamVjdC5vYmplY3RUeXBlSWRcbiAgICAgICAgICB9O1xuICAgICAgaWYgKG9jLmRlc2NyaXB0aW9uKSB0bGkuZGVzY3JpcHRpb24gPSB0aGlzLiNnZXRSZXNvbHZlZE9iamVjdENvbmZpZ0l0ZW0ob2MuZGVzY3JpcHRpb24ucHJvcGVydHlOYW1lLCBkbXNPYmplY3QuZGF0YSk7XG4gICAgICBpZiAob2MubWV0YSkgdGxpLm1ldGEgPSB0aGlzLiNnZXRSZXNvbHZlZE9iamVjdENvbmZpZ0l0ZW0ob2MubWV0YS5wcm9wZXJ0eU5hbWUsIGRtc09iamVjdC5kYXRhKTtcbiAgICAgIGlmIChvYy5hc2lkZSkgdGxpLmFzaWRlID0gdGhpcy4jZ2V0UmVzb2x2ZWRPYmplY3RDb25maWdJdGVtKG9jLmFzaWRlLnByb3BlcnR5TmFtZSwgZG1zT2JqZWN0LmRhdGEpO1xuXG4gICAgICByZXR1cm4gdGxpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWFwU2VhcmNoUmVzdWx0KHJlczogU2VhcmNoUmVzdWx0KTogVGlsZURhdGFbXSB7XG4gICAgdGhpcy5zZWFyY2hFeGVjdXRlZCA9IHRydWU7XG4gICAgdGhpcy5fcmF3UmVzdWx0ID0gcmVzO1xuICAgIHJldHVybiB0aGlzLm9jID8gdGhpcy4jbWFwVG9UaWxlRGF0YShyZXMuaXRlbXMubWFwKChpKSA9PiBuZXcgRG1zT2JqZWN0KGkpKSkgOiBbXTtcbiAgfVxuXG4gICNnZXRSZXNvbHZlZE9iamVjdENvbmZpZ0l0ZW0ocHJvcGVydHlOYW1lOiBzdHJpbmcsIGluc3RhbmNlRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZXNvbHZlZE9iamVjdENvbmZpZ0l0ZW0ge1xuICAgIGNvbnN0IGl0ZW06IFJlc29sdmVkT2JqZWN0Q29uZmlnSXRlbSA9IHtcbiAgICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lLFxuICAgICAgdmFsdWU6IGluc3RhbmNlRGF0YVtwcm9wZXJ0eU5hbWVdXG4gICAgfTtcbiAgICAvLyBNZXRhIGRhdGEgYXJlIGNvbnNpZGVyZWQgcHJvcGVydGllcyB0aGF0IHN0YXJ0IHdpdGggdGhlIHByb3BlcnR5IG5hbWUgZm9sbG93ZWQgYnkgYW4gdW5kZXJzY29yZS5cbiAgICAvLyBPcmdhbml6YXRpb24gZmllbGRzIGZvciBleGFtcGxlIGhhdmUgYW4gYWRkaXRpb25hbCBwcm9wZXJ0eSAneHl6X3RpdGxlJyB0aGF0IGNvbnRhaW5zIHRoZSByZXNvbHZlZFxuICAgIC8vIG5hbWUgb2YgYSB1c2VyIHdoaWxlIHRoZSB2YWx1ZSBpdHNlbGYgaXMgdGhlIHVzZXJzIElELlxuICAgIGNvbnN0IG1ldGFEYXRhID0gT2JqZWN0LmtleXMoaW5zdGFuY2VEYXRhKVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkuc3RhcnRzV2l0aChwcm9wZXJ0eU5hbWUgKyAnXycpKVxuICAgICAgLm1hcCgoa2V5KSA9PiAoeyBba2V5LnN1YnN0cmluZyhrZXkuaW5kZXhPZignXycpICsgMSldOiBpbnN0YW5jZURhdGFba2V5XSB9KSk7XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgbWV0YSBkYXRhIHByb3BlcnRpZXMsIHRoZXknbGwgYmUgbWVyZ2VkIGludG8gYSBSZWNvcmQgd2hlcmUgdGhlXG4gICAgLy8ga2V5IGlzIHRoZSBwcm9wZXJ0eSBuYW1lIHdpdGhvdXQgdGhlIHVuZGVyc2NvcmUgYW5kIHRoZSBhY3R1YWwgcHJvcGVydGllcyBuYW1lLlxuICAgIC8vIFNvIHsgJ3h5el90aXRsZSc6ICdKb2huIERvZScgfSB3aWxsIGJlIG1lcmdlZCBpbnRvIHsgdGl0bGU6ICdKb2huIERvZScgfVxuICAgIGlmIChtZXRhRGF0YS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSBtZXRhRGF0YS5yZWR1Y2UoKGFjYywgY3VyKSA9PiAoeyAuLi5hY2MsIC4uLmN1ciB9KSwge30pO1xuICAgICAgaXRlbS5tZXRhID0gbWV0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIHVwZGF0ZVRpbGVMaXN0KGxpc3RJdGVtczogRG1zT2JqZWN0W10pIHtcbiAgICBsaXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gdGhpcy5pdGVtcy5maW5kSW5kZXgoKGxpc3RJdGVtKSA9PiBsaXN0SXRlbS5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICBpZiAoaWR4ID49IDAgJiYgdGhpcy5vYykge1xuICAgICAgICBjb25zdCBtYXBwZWRUaWxlRGF0YSA9IHRoaXMuI21hcFRvVGlsZURhdGEoW2l0ZW1dKTtcbiAgICAgICAgdGhpcy5pdGVtc1tpZHhdID0gbWFwcGVkVGlsZURhdGFbMF07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNvYmplY3RDb25maWdTZXJ2aWNlXG4gICAgICAuZ2V0T2JqZWN0Q29uZmlncyQodGhpcy5idWNrZXQoKSB8fCAnJywgdHJ1ZSlcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBPYmplY3RDb25maWdSZWNvcmQpID0+IHtcbiAgICAgICAgICB0aGlzLm9jID0gcmVzO1xuICAgICAgICAgIGNvbnN0IHEgPSB0aGlzLnF1ZXJ5KCk7XG4gICAgICAgICAgcSAmJiB0aGlzLl9leGVjdXRlUXVlcnkocSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fa2V5TWFuYWdlcj8uZGVzdHJveSgpO1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJ0aWxlc1wiXG4gIFt5dXZEcmFnU2VsZWN0XT1cInsgZGlzYWJsZWQ6ICF0aGlzLm11bHRpc2VsZWN0KCkgfHwgaXNUb3VjaERldmljZSB9XCJcbiAgKGRyYWdTZWxlY3RDaGFuZ2UpPVwib25EcmFnU2VsZWN0Q2hhbmdlKCRldmVudClcIlxuICAoZHJhZ1NlbGVjdCk9XCJvbkRyYWdTZWxlY3QoJGV2ZW50KVwiXG4+XG4gIEBmb3IgKGkgb2YgaXRlbXM7IHRyYWNrIGkuaWQpIHtcbiAgICA8eXV2LXRpbGVcbiAgICAgIHl1dkRyYWdTZWxlY3RJdGVtXG4gICAgICB5dXZMaXN0SXRlbVxuICAgICAgW3N0eWxlLi0taV09XCIkaW5kZXhcIlxuICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJzZWxlY3Rpb24oKS5pbmNsdWRlcyhpLmlkKVwiXG4gICAgICAoY2xpY2suc2luZ2xlKT1cInNlbGVjdChpLCAkZXZlbnQpXCJcbiAgICAgIChjbGljay5kb3VibGUpPVwiaXRlbURibENsaWNrLmVtaXQoaSlcIlxuICAgICAgW25nQ2xhc3NdPVwieyBzZWxlY3RlZDogc2VsZWN0aW9uKCkuaW5jbHVkZXMoaS5pZCksIGxhc3Q6ICRsYXN0IH1cIlxuICAgICAgW2FjdGlvbkNvbnRleHRdPVwib3B0aW9ucygpPy5hY3Rpb25Db250ZXh0XCJcbiAgICAgIFt0aWxlXT1cImlcIlxuICAgICAgW25nU3R5bGVdPVwiaGlnaGxpZ2h0U3R5bGVzKClbaS5pZF1cIlxuICAgICAgKGNvbnRleHRtZW51KT1cImNvbnRleHRNZW51SGFuZGxlcigkZXZlbnQsICRpbmRleClcIlxuICAgID48L3l1di10aWxlPlxuICB9IEBlbXB0eSB7XG4gICAgPGRpdiBjbGFzcz1cImVtcHl0LWxpc3RcIj5cbiAgICAgIEBpZiAoc2VhcmNoRXhlY3V0ZWQgJiYgZW1wdHlDb250ZW50KCkpIHtcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG4gIDxkaXYgY2xhc3M9XCJvZmZzZXRcIiAoY2xpY2spPVwiY2xlYXJTZWxlY3Rpb24oKVwiPjwvZGl2PlxuPC9kaXY+XG5AaWYgKHBhZ2luYXRpb24pIHtcbiAgPHl1di1wYWdpbmF0aW9uIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIiAocGFnZUNoYW5nZSk9XCJnb1RvUGFnZSgkZXZlbnQpXCI+PC95dXYtcGFnaW5hdGlvbj5cbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1saXN0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvdGlsZS1saXN0L3NyYy9saWIvdGlsZS1saXN0L3RpbGUtbGlzdC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERtc09iamVjdCwgUmVzb2x2ZWRPYmplY3RDb25maWcsIFZpcnR1YWxPYmplY3RUeXBlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25Db250ZXh0IH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL2FjdGlvbnMnO1xuaW1wb3J0IHsgT2JqZWN0Rmxhdm9yIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtc2hlbGwtY29yZSc7XG5cbi8vIElucHV0IGRhdGEgZm9yIGEgdGlsZS4gTWFwcyBvYmplY3QgY29uZmlnIHRvIHRoZSB0aWxlcyBzbG90c1xuZXhwb3J0IHR5cGUgVGlsZURhdGEgPSBSZXNvbHZlZE9iamVjdENvbmZpZyAmIHtkbXNPYmplY3Q6IERtc09iamVjdH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGlsZUxpc3RDb25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgdHlwZXMgdG8gYmUgYXZhaWxhYmxlIGluIHRpbGUtY29uZmlnXG4gICovXG4gIGNvbmZpZ1R5cGVzOiBWaXJ0dWFsT2JqZWN0VHlwZVtdO1xuICAvLyBPYmplY3QgZmxhdm9ycyBtYWRlIGF2YWlsYmxlIGZvciBjb25maWd1cmF0aW9uXG4gIGNvbmZpZ0ZsYXZvcnM/OiBPYmplY3RGbGF2b3JbXTtcbiAgYWN0aW9uQ29udGV4dD86IEFjdGlvbkNvbnRleHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGlsZUxpc3RIaWdobGlnaHQge1xuICAvLyBjc3MgY2xhc3MgdG8gYmUgYXBwbGllZCB0byB0aGUgdGlsZVxuICBjc3NTdHlsZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvLyBpZHMgb2YgdGhlIHRpbGVzIHRvIGJlIGhpZ2hsaWdodGVkXG4gIGlkczogc3RyaW5nW107XG59Il19
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXV1dmlzLWNsaWVudC1mcmFtZXdvcmstdGlsZS1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWZyYW1ld29yay90aWxlLWxpc3Qvc3JjL3l1dXZpcy1jbGllbnQtZnJhbWV3b3JrLXRpbGUtbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -1,3 +0,0 @@
1
- export * from './token-search.component';
2
- export * from './token-search.interface';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtZnJhbWV3b3JrL3Rva2VuLXNlYXJjaC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQkFBMEIsQ0FBQTtBQUN4QyxjQUFjLDBCQUEwQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90b2tlbi1zZWFyY2guY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi90b2tlbi1zZWFyY2guaW50ZXJmYWNlJ1xuIl19