@vendure/admin-ui 2.0.0-next.2 → 2.0.0-next.21

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 (341) hide show
  1. package/catalog/catalog.module.d.ts +15 -11
  2. package/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.d.ts +22 -0
  3. package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.d.ts +41 -0
  4. package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.d.ts +4 -0
  5. package/catalog/components/collection-contents/collection-contents.component.d.ts +10 -2
  6. package/catalog/components/collection-detail/collection-detail.component.d.ts +13 -4
  7. package/catalog/components/collection-list/collection-list-bulk-actions.d.ts +6 -0
  8. package/catalog/components/collection-list/collection-list.component.d.ts +9 -5
  9. package/catalog/components/collection-tree/array-to-tree.d.ts +1 -1
  10. package/catalog/components/collection-tree/collection-tree-node.component.d.ts +14 -6
  11. package/catalog/components/collection-tree/collection-tree.component.d.ts +4 -1
  12. package/catalog/components/facet-list/facet-list-bulk-actions.d.ts +5 -0
  13. package/catalog/components/facet-list/facet-list.component.d.ts +2 -1
  14. package/catalog/components/generate-product-variants/generate-product-variants.component.d.ts +3 -3
  15. package/catalog/components/option-value-input/option-value-input.component.d.ts +21 -9
  16. package/catalog/components/product-detail/product-detail.component.d.ts +1 -1
  17. package/catalog/components/product-list/product-list-bulk-actions.d.ts +6 -0
  18. package/catalog/components/product-list/product-list.component.d.ts +4 -2
  19. package/catalog/components/product-variants-editor/product-variants-editor.component.d.ts +22 -12
  20. package/catalog/components/product-variants-list/product-variants-list.component.d.ts +1 -0
  21. package/catalog/public_api.d.ts +6 -1
  22. package/core/common/component-registry-types.d.ts +1 -1
  23. package/core/common/generated-types.d.ts +3184 -195
  24. package/core/common/utilities/bulk-action-utils.d.ts +19 -0
  25. package/core/common/utilities/configurable-operation-utils.d.ts +7 -2
  26. package/core/common/utilities/selection-manager.d.ts +30 -0
  27. package/core/common/version.d.ts +1 -1
  28. package/core/components/app-shell/app-shell.component.d.ts +1 -0
  29. package/core/data/definitions/collection-definitions.d.ts +4 -0
  30. package/core/data/definitions/facet-definitions.d.ts +3 -0
  31. package/core/data/definitions/order-definitions.d.ts +14 -0
  32. package/core/data/definitions/product-definitions.d.ts +2 -0
  33. package/core/data/providers/collection-data.service.d.ts +7 -0
  34. package/core/data/providers/facet-data.service.d.ts +3 -0
  35. package/core/data/providers/order-data.service.d.ts +18 -0
  36. package/core/data/providers/product-data.service.d.ts +2 -0
  37. package/core/providers/bulk-action-registry/bulk-action-registry.service.d.ts +9 -0
  38. package/core/providers/bulk-action-registry/bulk-action-types.d.ts +149 -0
  39. package/core/providers/bulk-action-registry/register-bulk-action.d.ts +53 -0
  40. package/core/providers/local-storage/local-storage.service.d.ts +1 -0
  41. package/core/providers/modal/modal.types.d.ts +2 -0
  42. package/core/providers/nav-builder/nav-builder-types.d.ts +1 -0
  43. package/core/public_api.d.ts +24 -1
  44. package/core/shared/components/asset-gallery/asset-gallery.component.d.ts +27 -3
  45. package/core/shared/components/bulk-action-menu/bulk-action-menu.component.d.ts +32 -0
  46. package/core/shared/components/configurable-input/configurable-input.component.d.ts +8 -3
  47. package/core/shared/components/custom-field-control/custom-field-control.component.d.ts +6 -2
  48. package/core/shared/components/data-table/data-table.component.d.ts +29 -7
  49. package/core/shared/components/dropdown/dropdown-menu.component.d.ts +2 -1
  50. package/core/shared/components/facet-value-selector/facet-value-selector.component.d.ts +3 -2
  51. package/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.d.ts +38 -0
  52. package/{catalog → core/shared}/components/product-search-input/product-search-input.component.d.ts +1 -1
  53. package/core/shared/components/radio-card/radio-card-fieldset.component.d.ts +24 -0
  54. package/core/shared/components/radio-card/radio-card.component.d.ts +22 -0
  55. package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.d.ts +31 -0
  56. package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.d.ts +34 -0
  57. package/core/shared/components/rich-text-editor/prosemirror/custom-nodes.d.ts +4 -0
  58. package/core/shared/components/rich-text-editor/prosemirror/inputrules.d.ts +5 -5
  59. package/core/shared/components/rich-text-editor/prosemirror/menu/links.d.ts +1 -1
  60. package/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.d.ts +12 -0
  61. package/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.d.ts +9 -0
  62. package/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.d.ts +14 -0
  63. package/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.d.ts +7 -0
  64. package/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.d.ts +1 -1
  65. package/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.d.ts +7 -0
  66. package/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.d.ts +13 -0
  67. package/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.d.ts +7 -3
  68. package/core/shared/components/rich-text-editor/prosemirror/types.d.ts +0 -2
  69. package/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.d.ts +21 -0
  70. package/core/shared/components/rich-text-editor/rich-text-editor.component.d.ts +6 -2
  71. package/core/shared/components/select-toggle/select-toggle.component.d.ts +2 -1
  72. package/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.d.ts +30 -0
  73. package/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.d.ts +22 -0
  74. package/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.d.ts +5 -17
  75. package/core/shared/dynamic-form-inputs/combination-mode-form-input/combination-mode-form-input.component.d.ts +28 -0
  76. package/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.d.ts +2 -0
  77. package/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.d.ts +23 -0
  78. package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +5 -1
  79. package/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.d.ts +6 -3
  80. package/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.d.ts +10 -2
  81. package/core/shared/pipes/custom-field-description.pipe.d.ts +11 -0
  82. package/core/shared/pipes/custom-field-label.pipe.d.ts +4 -10
  83. package/core/shared/shared.module.d.ts +68 -57
  84. package/customer/components/customer-group-list/customer-group-list.component.d.ts +6 -4
  85. package/customer/components/customer-group-member-list/customer-group-member-list.component.d.ts +11 -4
  86. package/esm2020/catalog/catalog.module.mjs +31 -10
  87. package/esm2020/catalog/components/apply-facet-dialog/apply-facet-dialog.component.mjs +1 -1
  88. package/esm2020/catalog/components/assets/assets.component.mjs +2 -2
  89. package/esm2020/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.mjs +4 -1
  90. package/esm2020/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.mjs +50 -0
  91. package/esm2020/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.mjs +84 -0
  92. package/esm2020/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.mjs +69 -0
  93. package/esm2020/catalog/components/collection-contents/collection-contents.component.mjs +61 -13
  94. package/esm2020/catalog/components/collection-detail/collection-detail.component.mjs +70 -32
  95. package/esm2020/catalog/components/collection-list/collection-list-bulk-actions.mjs +143 -0
  96. package/esm2020/catalog/components/collection-list/collection-list.component.mjs +46 -12
  97. package/esm2020/catalog/components/collection-tree/array-to-tree.mjs +3 -3
  98. package/esm2020/catalog/components/collection-tree/collection-tree-node.component.mjs +36 -10
  99. package/esm2020/catalog/components/collection-tree/collection-tree.component.mjs +9 -4
  100. package/esm2020/catalog/components/facet-detail/facet-detail.component.mjs +3 -3
  101. package/esm2020/catalog/components/facet-list/facet-list-bulk-actions.mjs +202 -0
  102. package/esm2020/catalog/components/facet-list/facet-list.component.mjs +14 -5
  103. package/esm2020/catalog/components/generate-product-variants/generate-product-variants.component.mjs +12 -4
  104. package/esm2020/catalog/components/option-value-input/option-value-input.component.mjs +70 -11
  105. package/esm2020/catalog/components/product-detail/product-detail.component.mjs +36 -24
  106. package/esm2020/catalog/components/product-list/product-list-bulk-actions.mjs +168 -0
  107. package/esm2020/catalog/components/product-list/product-list.component.mjs +13 -9
  108. package/esm2020/catalog/components/product-variants-editor/product-variants-editor.component.mjs +130 -19
  109. package/esm2020/catalog/components/product-variants-list/product-variants-list.component.mjs +9 -3
  110. package/esm2020/catalog/providers/routing/collection-resolver.mjs +2 -1
  111. package/esm2020/catalog/public_api.mjs +7 -2
  112. package/esm2020/core/app.component.module.mjs +1 -1
  113. package/esm2020/core/common/base-detail.component.mjs +1 -1
  114. package/esm2020/core/common/component-registry-types.mjs +1 -1
  115. package/esm2020/core/common/deactivate-aware.mjs +1 -1
  116. package/esm2020/core/common/generated-types.mjs +31 -1
  117. package/esm2020/core/common/introspection-result.mjs +296 -189
  118. package/esm2020/core/common/utilities/bulk-action-utils.mjs +35 -0
  119. package/esm2020/core/common/utilities/configurable-operation-utils.mjs +37 -10
  120. package/esm2020/core/common/utilities/selection-manager.mjs +96 -0
  121. package/esm2020/core/common/version.mjs +2 -2
  122. package/esm2020/core/components/app-shell/app-shell.component.mjs +6 -5
  123. package/esm2020/core/components/breadcrumb/breadcrumb.component.mjs +2 -2
  124. package/esm2020/core/components/channel-switcher/channel-switcher.component.mjs +1 -1
  125. package/esm2020/core/components/main-nav/main-nav.component.mjs +3 -3
  126. package/esm2020/core/components/user-menu/user-menu.component.mjs +1 -1
  127. package/esm2020/core/core.module.mjs +1 -1
  128. package/esm2020/core/data/definitions/collection-definitions.mjs +47 -1
  129. package/esm2020/core/data/definitions/facet-definitions.mjs +31 -1
  130. package/esm2020/core/data/definitions/order-definitions.mjs +583 -455
  131. package/esm2020/core/data/definitions/product-definitions.mjs +23 -1
  132. package/esm2020/core/data/definitions/shared-definitions.mjs +29 -28
  133. package/esm2020/core/data/providers/collection-data.service.mjs +20 -2
  134. package/esm2020/core/data/providers/customer-data.service.mjs +6 -1
  135. package/esm2020/core/data/providers/facet-data.service.mjs +18 -2
  136. package/esm2020/core/data/providers/order-data.service.mjs +43 -2
  137. package/esm2020/core/data/providers/product-data.service.mjs +10 -2
  138. package/esm2020/core/data/providers/promotion-data.service.mjs +1 -1
  139. package/esm2020/core/data/utils/remove-readonly-custom-fields.mjs +8 -1
  140. package/esm2020/core/providers/bulk-action-registry/bulk-action-registry.service.mjs +28 -0
  141. package/esm2020/core/providers/bulk-action-registry/bulk-action-types.mjs +2 -0
  142. package/esm2020/core/providers/bulk-action-registry/register-bulk-action.mjs +63 -0
  143. package/esm2020/core/providers/dashboard-widget/dashboard-widget.service.mjs +1 -4
  144. package/esm2020/core/providers/local-storage/local-storage.service.mjs +1 -1
  145. package/esm2020/core/providers/modal/modal.service.mjs +2 -1
  146. package/esm2020/core/providers/modal/modal.types.mjs +1 -1
  147. package/esm2020/core/providers/nav-builder/nav-builder-types.mjs +1 -1
  148. package/esm2020/core/public_api.mjs +25 -2
  149. package/esm2020/core/shared/components/action-bar/action-bar.component.mjs +7 -15
  150. package/esm2020/core/shared/components/address-form/address-form.component.mjs +3 -3
  151. package/esm2020/core/shared/components/asset-gallery/asset-gallery.component.mjs +34 -51
  152. package/esm2020/core/shared/components/asset-preview/asset-preview.component.mjs +4 -4
  153. package/esm2020/core/shared/components/asset-preview-links/asset-preview-links.component.mjs +1 -1
  154. package/esm2020/core/shared/components/bulk-action-menu/bulk-action-menu.component.mjs +97 -0
  155. package/esm2020/core/shared/components/configurable-input/configurable-input.component.mjs +22 -10
  156. package/esm2020/core/shared/components/custom-field-control/custom-field-control.component.mjs +18 -10
  157. package/esm2020/core/shared/components/data-table/data-table.component.mjs +64 -14
  158. package/esm2020/core/shared/components/datetime-picker/datetime-picker.component.mjs +1 -1
  159. package/esm2020/core/shared/components/dropdown/dropdown-menu.component.mjs +26 -23
  160. package/esm2020/core/shared/components/dropdown/dropdown-trigger.directive.mjs +1 -1
  161. package/esm2020/core/shared/components/entity-info/entity-info.component.mjs +1 -1
  162. package/esm2020/core/shared/components/facet-value-selector/facet-value-selector.component.mjs +13 -6
  163. package/esm2020/core/shared/components/formatted-address/formatted-address.component.mjs +3 -3
  164. package/esm2020/core/shared/components/help-tooltip/help-tooltip.component.mjs +2 -2
  165. package/esm2020/core/shared/components/history-entry-detail/history-entry-detail.component.mjs +1 -1
  166. package/esm2020/core/shared/components/language-selector/language-selector.component.mjs +3 -3
  167. package/esm2020/core/shared/components/object-tree/object-tree.component.mjs +1 -1
  168. package/esm2020/core/shared/components/order-state-label/order-state-label.component.mjs +2 -1
  169. package/esm2020/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.mjs +135 -0
  170. package/esm2020/core/shared/components/product-search-input/product-search-input.component.mjs +108 -0
  171. package/esm2020/core/shared/components/product-variant-selector/product-variant-selector.component.mjs +2 -2
  172. package/esm2020/core/shared/components/radio-card/radio-card-fieldset.component.mjs +54 -0
  173. package/esm2020/core/shared/components/radio-card/radio-card.component.mjs +53 -0
  174. package/esm2020/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.mjs +3 -3
  175. package/esm2020/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.mjs +136 -0
  176. package/esm2020/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.mjs +46 -0
  177. package/esm2020/core/shared/components/rich-text-editor/prosemirror/custom-nodes.mjs +57 -0
  178. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/links.mjs +4 -4
  179. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.mjs +22 -1
  180. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.mjs +12 -0
  181. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu.mjs +73 -18
  182. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.mjs +16 -0
  183. package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.mjs +100 -0
  184. package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.mjs +96 -0
  185. package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.mjs +166 -0
  186. package/esm2020/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.mjs +47 -18
  187. package/esm2020/core/shared/components/rich-text-editor/prosemirror/types.mjs +1 -1
  188. package/esm2020/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.mjs +59 -0
  189. package/esm2020/core/shared/components/rich-text-editor/rich-text-editor.component.mjs +22 -10
  190. package/esm2020/core/shared/components/select-toggle/select-toggle.component.mjs +6 -3
  191. package/esm2020/core/shared/components/simple-dialog/simple-dialog.component.mjs +3 -3
  192. package/esm2020/core/shared/components/ui-extension-point/ui-extension-point.component.mjs +1 -1
  193. package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.mjs +57 -0
  194. package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.mjs +63 -0
  195. package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.mjs +48 -83
  196. package/esm2020/core/shared/dynamic-form-inputs/combination-mode-form-input/combination-mode-form-input.component.mjs +45 -0
  197. package/esm2020/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.mjs +3 -3
  198. package/esm2020/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.mjs +12 -3
  199. package/esm2020/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.mjs +48 -0
  200. package/esm2020/core/shared/dynamic-form-inputs/register-dynamic-input-components.mjs +7 -1
  201. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.mjs +11 -9
  202. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.mjs +1 -1
  203. package/esm2020/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.mjs +21 -11
  204. package/esm2020/core/shared/pipes/custom-field-description.pipe.mjs +30 -0
  205. package/esm2020/core/shared/pipes/custom-field-label.pipe.mjs +7 -19
  206. package/esm2020/core/shared/pipes/locale-currency.pipe.mjs +10 -2
  207. package/esm2020/core/shared/pipes/state-i18n-token.pipe.mjs +2 -1
  208. package/esm2020/core/shared/shared.module.mjs +49 -5
  209. package/esm2020/customer/components/address-card/address-card.component.mjs +1 -1
  210. package/esm2020/customer/components/customer-detail/customer-detail.component.mjs +1 -1
  211. package/esm2020/customer/components/customer-group-list/customer-group-list.component.mjs +33 -18
  212. package/esm2020/customer/components/customer-group-member-list/customer-group-member-list.component.mjs +3 -3
  213. package/esm2020/customer/components/customer-history/customer-history.component.mjs +1 -1
  214. package/esm2020/customer/components/customer-list/customer-list.component.mjs +3 -3
  215. package/esm2020/dashboard/components/dashboard/dashboard.component.mjs +2 -2
  216. package/esm2020/dashboard/components/dashboard-widget/dashboard-widget.component.mjs +2 -2
  217. package/esm2020/dashboard/dashboard.module.mjs +6 -2
  218. package/esm2020/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.mjs +1 -1
  219. package/esm2020/dashboard/widgets/order-summary-widget/order-summary-widget.component.mjs +2 -2
  220. package/esm2020/login/components/login/login.component.mjs +3 -3
  221. package/esm2020/marketing/components/promotion-detail/promotion-detail.component.mjs +3 -3
  222. package/esm2020/marketing/components/promotion-list/promotion-list.component.mjs +1 -1
  223. package/esm2020/order/components/cancel-order-dialog/cancel-order-dialog.component.mjs +1 -1
  224. package/esm2020/order/components/coupon-code-selector/coupon-code-selector.component.mjs +42 -0
  225. package/esm2020/order/components/draft-order-detail/draft-order-detail.component.mjs +187 -0
  226. package/esm2020/order/components/draft-order-variant-selector/draft-order-variant-selector.component.mjs +59 -0
  227. package/esm2020/order/components/fulfill-order-dialog/fulfill-order-dialog.component.mjs +7 -3
  228. package/esm2020/order/components/fulfillment-card/fulfillment-card.component.mjs +1 -1
  229. package/esm2020/order/components/fulfillment-detail/fulfillment-detail.component.mjs +8 -17
  230. package/esm2020/order/components/line-fulfillment/line-fulfillment.component.mjs +8 -22
  231. package/esm2020/order/components/order-custom-fields-card/order-custom-fields-card.component.mjs +30 -6
  232. package/esm2020/order/components/order-detail/order-detail.component.mjs +80 -40
  233. package/esm2020/order/components/order-editor/order-editor.component.mjs +15 -14
  234. package/esm2020/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.mjs +1 -1
  235. package/esm2020/order/components/order-history/order-history.component.mjs +1 -1
  236. package/esm2020/order/components/order-list/order-list.component.mjs +40 -17
  237. package/esm2020/order/components/order-payment-card/order-payment-card.component.mjs +3 -3
  238. package/esm2020/order/components/order-table/order-table.component.mjs +29 -6
  239. package/esm2020/order/components/refund-order-dialog/refund-order-dialog.component.mjs +2 -2
  240. package/esm2020/order/components/select-address-dialog/select-address-dialog.component.mjs +89 -0
  241. package/esm2020/order/components/select-address-dialog/select-address-dialog.graphql.mjs +14 -0
  242. package/esm2020/order/components/select-customer-dialog/select-customer-dialog.component.mjs +59 -0
  243. package/esm2020/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.mjs +31 -0
  244. package/esm2020/order/order.module.mjs +20 -2
  245. package/esm2020/order/order.routes.mjs +23 -4
  246. package/esm2020/order/providers/routing/order-resolver.mjs +29 -11
  247. package/esm2020/order/providers/routing/order.guard.mjs +37 -0
  248. package/esm2020/order/public_api.mjs +9 -1
  249. package/esm2020/settings/components/administrator-list/administrator-list.component.mjs +1 -1
  250. package/esm2020/settings/components/channel-list/channel-list.component.mjs +1 -1
  251. package/esm2020/settings/components/country-list/country-list.component.mjs +3 -3
  252. package/esm2020/settings/components/payment-method-detail/payment-method-detail.component.mjs +1 -1
  253. package/esm2020/settings/components/payment-method-list/payment-method-list.component.mjs +1 -1
  254. package/esm2020/settings/components/permission-grid/permission-grid.component.mjs +1 -1
  255. package/esm2020/settings/components/profile/profile.component.mjs +3 -3
  256. package/esm2020/settings/components/role-list/role-list.component.mjs +1 -1
  257. package/esm2020/settings/components/shipping-method-detail/shipping-method-detail.component.mjs +4 -2
  258. package/esm2020/settings/components/shipping-method-list/shipping-method-list.component.mjs +1 -1
  259. package/esm2020/settings/components/tax-category-list/tax-category-list.component.mjs +1 -1
  260. package/esm2020/settings/components/tax-rate-list/tax-rate-list.component.mjs +1 -1
  261. package/esm2020/settings/components/zone-detail-dialog/zone-detail-dialog.component.mjs +2 -2
  262. package/esm2020/settings/components/zone-list/zone-list.component.mjs +3 -3
  263. package/esm2020/settings/components/zone-member-list/zone-member-list.component.mjs +3 -3
  264. package/esm2020/system/components/health-check/health-check.component.mjs +2 -2
  265. package/esm2020/system/components/job-list/job-list.component.mjs +1 -1
  266. package/fesm2015/vendure-admin-ui-catalog.mjs +1206 -228
  267. package/fesm2015/vendure-admin-ui-catalog.mjs.map +1 -1
  268. package/fesm2015/vendure-admin-ui-core.mjs +9451 -7332
  269. package/fesm2015/vendure-admin-ui-core.mjs.map +1 -1
  270. package/fesm2015/vendure-admin-ui-customer.mjs +36 -23
  271. package/fesm2015/vendure-admin-ui-customer.mjs.map +1 -1
  272. package/fesm2015/vendure-admin-ui-dashboard.mjs +11 -7
  273. package/fesm2015/vendure-admin-ui-dashboard.mjs.map +1 -1
  274. package/fesm2015/vendure-admin-ui-login.mjs +2 -2
  275. package/fesm2015/vendure-admin-ui-login.mjs.map +1 -1
  276. package/fesm2015/vendure-admin-ui-marketing.mjs +3 -3
  277. package/fesm2015/vendure-admin-ui-marketing.mjs.map +1 -1
  278. package/fesm2015/vendure-admin-ui-order.mjs +1184 -599
  279. package/fesm2015/vendure-admin-ui-order.mjs.map +1 -1
  280. package/fesm2015/vendure-admin-ui-settings.mjs +21 -19
  281. package/fesm2015/vendure-admin-ui-settings.mjs.map +1 -1
  282. package/fesm2015/vendure-admin-ui-system.mjs +3 -3
  283. package/fesm2020/vendure-admin-ui-catalog.mjs +1190 -230
  284. package/fesm2020/vendure-admin-ui-catalog.mjs.map +1 -1
  285. package/fesm2020/vendure-admin-ui-core.mjs +9539 -7437
  286. package/fesm2020/vendure-admin-ui-core.mjs.map +1 -1
  287. package/fesm2020/vendure-admin-ui-customer.mjs +36 -23
  288. package/fesm2020/vendure-admin-ui-customer.mjs.map +1 -1
  289. package/fesm2020/vendure-admin-ui-dashboard.mjs +11 -7
  290. package/fesm2020/vendure-admin-ui-dashboard.mjs.map +1 -1
  291. package/fesm2020/vendure-admin-ui-login.mjs +2 -2
  292. package/fesm2020/vendure-admin-ui-login.mjs.map +1 -1
  293. package/fesm2020/vendure-admin-ui-marketing.mjs +3 -3
  294. package/fesm2020/vendure-admin-ui-marketing.mjs.map +1 -1
  295. package/fesm2020/vendure-admin-ui-order.mjs +1194 -614
  296. package/fesm2020/vendure-admin-ui-order.mjs.map +1 -1
  297. package/fesm2020/vendure-admin-ui-settings.mjs +21 -19
  298. package/fesm2020/vendure-admin-ui-settings.mjs.map +1 -1
  299. package/fesm2020/vendure-admin-ui-system.mjs +3 -3
  300. package/order/components/coupon-code-selector/coupon-code-selector.component.d.ts +21 -0
  301. package/order/components/draft-order-detail/draft-order-detail.component.d.ts +52 -0
  302. package/order/components/draft-order-variant-selector/draft-order-variant-selector.component.d.ts +24 -0
  303. package/order/components/order-custom-fields-card/order-custom-fields-card.component.d.ts +4 -2
  304. package/order/components/order-editor/order-editor.component.d.ts +1 -6
  305. package/order/components/order-list/order-list.component.d.ts +2 -0
  306. package/order/components/order-table/order-table.component.d.ts +12 -2
  307. package/order/components/select-address-dialog/select-address-dialog.component.d.ts +27 -0
  308. package/order/components/select-address-dialog/select-address-dialog.graphql.d.ts +1 -0
  309. package/order/components/select-customer-dialog/select-customer-dialog.component.d.ts +25 -0
  310. package/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.d.ts +19 -0
  311. package/order/order.module.d.ts +9 -3
  312. package/order/providers/routing/order-resolver.d.ts +8 -3
  313. package/order/providers/routing/order.guard.d.ts +12 -0
  314. package/order/public_api.d.ts +8 -0
  315. package/package.json +13 -12
  316. package/settings/components/zone-member-list/zone-member-list.component.d.ts +3 -1
  317. package/static/i18n-messages/cs.json +50 -3
  318. package/static/i18n-messages/de.json +53 -3
  319. package/static/i18n-messages/en.json +55 -8
  320. package/static/i18n-messages/es.json +50 -3
  321. package/static/i18n-messages/fr.json +50 -3
  322. package/static/i18n-messages/it.json +50 -3
  323. package/static/i18n-messages/pl.json +50 -3
  324. package/static/i18n-messages/pt_BR.json +50 -3
  325. package/static/i18n-messages/pt_PT.json +50 -3
  326. package/static/i18n-messages/ru.json +50 -3
  327. package/static/i18n-messages/uk.json +50 -3
  328. package/static/i18n-messages/zh_Hans.json +50 -3
  329. package/static/i18n-messages/zh_Hant.json +50 -3
  330. package/static/styles/_variables.scss +4 -0
  331. package/static/styles/global/_forms.scss +8 -7
  332. package/static/styles/global/_overrides.scss +11 -1
  333. package/static/styles/global/_sass-overrides.scss +3 -0
  334. package/static/styles/global/_utilities.scss +14 -0
  335. package/static/styles/styles.scss +1 -0
  336. package/static/styles/theme/default.scss +13 -1
  337. package/static/styles/ui-extension-theme.scss +1 -0
  338. package/static/theme.min.css +1 -1
  339. package/core/shared/components/rich-text-editor/prosemirror/menu/images.d.ts +0 -4
  340. package/esm2020/catalog/components/product-search-input/product-search-input.component.mjs +0 -107
  341. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/images.mjs +0 -36
@@ -1,24 +1,28 @@
1
1
  import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { FormControl } from '@angular/forms';
2
3
  import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
3
- import { DeletionResult, } from '@vendure/admin-ui/core';
4
+ import { BaseListComponent, DeletionResult, } from '@vendure/admin-ui/core';
4
5
  import { BehaviorSubject, combineLatest, EMPTY, of } from 'rxjs';
5
- import { distinctUntilChanged, map, mapTo, switchMap, tap } from 'rxjs/operators';
6
+ import { debounceTime, distinctUntilChanged, filter, map, mapTo, switchMap, takeUntil, tap, } from 'rxjs/operators';
6
7
  import { AddCustomerToGroupDialogComponent } from '../add-customer-to-group-dialog/add-customer-to-group-dialog.component';
7
8
  import { CustomerGroupDetailDialogComponent } from '../customer-group-detail-dialog/customer-group-detail-dialog.component';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "@vendure/admin-ui/core";
10
11
  import * as i2 from "@angular/router";
11
12
  import * as i3 from "../customer-group-member-list/customer-group-member-list.component";
12
- import * as i4 from "@clr/angular";
13
- import * as i5 from "@angular/common";
14
- import * as i6 from "@ngx-translate/core";
15
- export class CustomerGroupListComponent {
13
+ import * as i4 from "@angular/forms";
14
+ import * as i5 from "@clr/angular";
15
+ import * as i6 from "@angular/common";
16
+ import * as i7 from "@ngx-translate/core";
17
+ export class CustomerGroupListComponent extends BaseListComponent {
16
18
  constructor(dataService, notificationService, modalService, route, router) {
19
+ super(router, route);
17
20
  this.dataService = dataService;
18
21
  this.notificationService = notificationService;
19
22
  this.modalService = modalService;
20
23
  this.route = route;
21
24
  this.router = router;
25
+ this.searchTerm = new FormControl('');
22
26
  this.selectedCustomerIds = [];
23
27
  this.fetchGroupMembers$ = new BehaviorSubject({
24
28
  skip: 0,
@@ -26,18 +30,28 @@ export class CustomerGroupListComponent {
26
30
  filterTerm: '',
27
31
  });
28
32
  this.refreshActiveGroupMembers$ = new BehaviorSubject(undefined);
33
+ super.setQueryFn((...args) => this.dataService.customer.getCustomerGroupList(...args).refetchOnChannelChange(), data => data.customerGroups, (skip, take) => ({
34
+ options: {
35
+ skip,
36
+ take,
37
+ filter: {
38
+ name: { contains: this.searchTerm.value },
39
+ },
40
+ },
41
+ }));
29
42
  }
30
43
  ngOnInit() {
31
- this.groups$ = this.dataService.customer
32
- .getCustomerGroupList()
33
- .mapStream(data => data.customerGroups.items);
44
+ super.ngOnInit();
45
+ this.searchTerm.valueChanges
46
+ .pipe(filter(value => 2 < value.length || value.length === 0), debounceTime(250), takeUntil(this.destroy$))
47
+ .subscribe(() => this.refresh());
34
48
  const activeGroupId$ = this.route.paramMap.pipe(map(pm => pm.get('contents')), distinctUntilChanged(), tap(() => (this.selectedCustomerIds = [])));
35
- this.listIsEmpty$ = this.groups$.pipe(map(groups => groups.length === 0));
36
- this.activeGroup$ = combineLatest(this.groups$, activeGroupId$).pipe(map(([groups, activeGroupId]) => {
49
+ this.listIsEmpty$ = this.items$.pipe(map(groups => groups.length === 0));
50
+ this.activeGroup$ = combineLatest(this.items$, activeGroupId$).pipe(map(([groups, activeGroupId]) => {
37
51
  if (activeGroupId) {
38
52
  return groups.find(g => g.id === activeGroupId);
39
53
  }
40
- }));
54
+ }), tap(val => (this.activeGroupId = val?.id)));
41
55
  const membersResult$ = combineLatest(this.activeGroup$, this.fetchGroupMembers$, this.refreshActiveGroupMembers$).pipe(switchMap(([activeGroup, { skip, take, filterTerm }]) => {
42
56
  if (activeGroup) {
43
57
  return this.dataService.customer
@@ -64,10 +78,9 @@ export class CustomerGroupListComponent {
64
78
  .fromComponent(CustomerGroupDetailDialogComponent, { locals: { group: { name: '' } } })
65
79
  .pipe(switchMap(result => result
66
80
  ? this.dataService.customer.createCustomerGroup({ ...result, customerIds: [] })
67
- : EMPTY),
68
- // refresh list
69
- switchMap(() => this.dataService.customer.getCustomerGroupList().single$))
81
+ : EMPTY))
70
82
  .subscribe(() => {
83
+ this.refresh();
71
84
  this.notificationService.success(_('common.notify-create-success'), {
72
85
  entity: 'CustomerGroup',
73
86
  });
@@ -102,6 +115,7 @@ export class CustomerGroupListComponent {
102
115
  this.notificationService.error(result.errorMessage);
103
116
  }
104
117
  else {
118
+ this.refresh();
105
119
  this.notificationService.success(_('common.notify-delete-success'), {
106
120
  entity: 'CustomerGroup',
107
121
  });
@@ -119,6 +133,7 @@ export class CustomerGroupListComponent {
119
133
  ? this.dataService.customer.updateCustomerGroup({ id: group.id, ...result })
120
134
  : EMPTY))
121
135
  .subscribe(() => {
136
+ this.refresh();
122
137
  this.notificationService.success(_('common.notify-update-success'), {
123
138
  entity: 'CustomerGroup',
124
139
  });
@@ -173,9 +188,9 @@ export class CustomerGroupListComponent {
173
188
  }
174
189
  }
175
190
  CustomerGroupListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CustomerGroupListComponent, deps: [{ token: i1.DataService }, { token: i1.NotificationService }, { token: i1.ModalService }, { token: i2.ActivatedRoute }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
176
- CustomerGroupListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CustomerGroupListComponent, selector: "vdr-customer-group-list", ngImport: i0, template: "<vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"customer-group-list\"></vdr-action-bar-items>\r\n <button class=\"btn btn-primary\" *vdrIfPermissions=\"'CreateCustomerGroup'\" (click)=\"create()\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.create-new-customer-group' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n<div class=\"group-wrapper\">\r\n <div class=\"group-list\">\r\n <table\r\n class=\"table mt0\"\r\n [class.expanded]=\"activeGroup$ | async\"\r\n *ngIf=\"!(listIsEmpty$ | async); else emptyPlaceholder\"\r\n >\r\n <tbody>\r\n <tr\r\n *ngFor=\"let group of groups$ | async\"\r\n [class.active]=\"group.id === (activeGroup$ | async)?.id\"\r\n >\r\n <td class=\"left align-middle\"><vdr-entity-info [entity]=\"group\"></vdr-entity-info></td>\r\n <td class=\"left align-middle\">\r\n <vdr-chip [colorFrom]=\"group.id\">{{ group.name }}</vdr-chip>\r\n </td>\r\n <td class=\"text-right align-middle\">\r\n <a\r\n class=\"btn btn-link btn-sm\"\r\n [routerLink]=\"['./', { contents: group.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <clr-icon shape=\"view-list\"></clr-icon>\r\n {{ 'customer.view-group-members' | translate }}\r\n </a>\r\n </td>\r\n <td class=\"align-middle\">\r\n <button class=\"btn btn-link btn-sm\" (click)=\"update(group)\">\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n </td>\r\n <td class=\"align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"delete(group.id)\"\r\n [disabled]=\"!('DeleteCustomerGroup' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <ng-template #emptyPlaceholder>\r\n <vdr-empty-placeholder></vdr-empty-placeholder>\r\n </ng-template>\r\n <div class=\"group-members\" [class.expanded]=\"activeGroup$ | async\">\r\n <ng-container *ngIf=\"activeGroup$ | async as activeGroup\">\r\n <div class=\"flex\">\r\n <div class=\"header-title-row\">{{ activeGroup.name }} ({{ membersTotal$ | async }})</div>\r\n <div class=\"flex-spacer\"></div>\r\n <button type=\"button\" class=\"close-button\" (click)=\"closeMembers()\">\r\n <clr-icon shape=\"close\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"controls\">\r\n <vdr-dropdown>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-secondary btn-sm\"\r\n vdrDropdownTrigger\r\n [disabled]=\"selectedCustomerIds.length === 0\"\r\n >\r\n {{ 'common.with-selected' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"removeFromGroup(activeGroup, selectedCustomerIds)\"\r\n vdrDropdownItem\r\n [disabled]=\"!('UpdateCustomerGroup' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'customer.remove-from-group' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" (click)=\"addToGroup(activeGroup)\">\r\n {{ 'customer.add-customers-to-group' | translate: { groupName: activeGroup.name } }}\r\n </button>\r\n </div>\r\n <vdr-customer-group-member-list\r\n [members]=\"members$ | async\"\r\n [route]=\"route\"\r\n [totalItems]=\"membersTotal$ | async\"\r\n [selectedMemberIds]=\"selectedCustomerIds\"\r\n (selectionChange)=\"selectedCustomerIds = $event\"\r\n (fetchParamsChange)=\"fetchGroupMembers$.next($event)\"\r\n ></vdr-customer-group-member-list>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", styles: [".group-wrapper{display:flex;height:calc(100% - 50px)}.group-wrapper .group-list{flex:1;overflow:auto;margin-top:0}.group-wrapper .group-list tr.active{background-color:var(--color-component-bg-200)}.group-wrapper .group-list.expanded{width:calc(100% - 40vw)}.group-members{height:100%;width:0;opacity:0;visibility:hidden;overflow:auto;transition:width .3s,opacity .2s .3s,visibility 0s .3s}.group-members.expanded{width:40vw;visibility:visible;opacity:1;padding-left:12px}.group-members .close-button{margin:0;background:none;border:none;cursor:pointer}.group-members ::ng-deep table.table{margin-top:0}.group-members ::ng-deep table.table th{top:0}.group-members .controls{display:flex;justify-content:space-between}vdr-empty-placeholder{flex:1}\n"], components: [{ type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { type: i1.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i1.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i1.EntityInfoComponent, selector: "vdr-entity-info", inputs: ["small", "entity"] }, { type: i1.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }, { type: i1.EmptyPlaceholderComponent, selector: "vdr-empty-placeholder", inputs: ["emptyStateLabel"] }, { type: i3.CustomerGroupMemberListComponent, selector: "vdr-customer-group-member-list", inputs: ["members", "totalItems", "route", "selectedMemberIds"], outputs: ["selectionChange", "fetchParamsChange"] }], directives: [{ type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }], pipes: { "translate": i6.TranslatePipe, "async": i5.AsyncPipe, "hasPermission": i1.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
191
+ CustomerGroupListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CustomerGroupListComponent, selector: "vdr-customer-group-list", usesInheritance: true, ngImport: i0, template: "<vdr-action-bar>\r\n <vdr-ab-left>\r\n <input\r\n type=\"text\"\r\n name=\"emailSearchTerm\"\r\n [formControl]=\"searchTerm\"\r\n [placeholder]=\"'customer.search-by-group-name' | translate\"\r\n class=\"search-input\"\r\n />\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"customer-group-list\"></vdr-action-bar-items>\r\n <button class=\"btn btn-primary\" *vdrIfPermissions=\"'CreateCustomerGroup'\" (click)=\"create()\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.create-new-customer-group' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n<div class=\"group-wrapper\">\r\n <div class=\"group-list\">\r\n <vdr-data-table\r\n [class.expanded]=\"activeGroup$ | async\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n >\r\n <ng-template let-group=\"item\">\r\n <td class=\"left align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <vdr-entity-info [entity]=\"group\"></vdr-entity-info>\r\n </td>\r\n <td class=\"left align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <vdr-chip [colorFrom]=\"group.id\">{{ group.name }}</vdr-chip>\r\n </td>\r\n <td class=\"left align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <a\r\n class=\"btn btn-link btn-sm\"\r\n [routerLink]=\"['./', { contents: group.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <clr-icon shape=\"view-list\"></clr-icon>\r\n {{ 'customer.view-group-members' | translate }}\r\n </a>\r\n </td>\r\n <td class=\"right align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <button class=\"btn btn-link btn-sm\" (click)=\"update(group)\">\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n </td>\r\n <td [class.active]=\"group.id === activeGroupId\" class=\"align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"delete(group.id)\"\r\n [disabled]=\"!('DeleteCustomerGroup' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n </vdr-data-table>\r\n </div>\r\n <ng-template #emptyPlaceholder>\r\n <vdr-empty-placeholder></vdr-empty-placeholder>\r\n </ng-template>\r\n <div class=\"group-members\" [class.expanded]=\"activeGroup$ | async\">\r\n <ng-container *ngIf=\"activeGroup$ | async as activeGroup\">\r\n <div class=\"flex\">\r\n <div class=\"header-title-row\">{{ activeGroup.name }} ({{ membersTotal$ | async }})</div>\r\n <div class=\"flex-spacer\"></div>\r\n <button type=\"button\" class=\"close-button\" (click)=\"closeMembers()\">\r\n <clr-icon shape=\"close\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"controls\">\r\n <vdr-dropdown>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-secondary btn-sm\"\r\n vdrDropdownTrigger\r\n [disabled]=\"selectedCustomerIds.length === 0\"\r\n >\r\n {{ 'common.with-selected' | translate: { count: selectedCustomerIds.length } }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"removeFromGroup(activeGroup, selectedCustomerIds)\"\r\n vdrDropdownItem\r\n [disabled]=\"!('UpdateCustomerGroup' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'customer.remove-from-group' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" (click)=\"addToGroup(activeGroup)\">\r\n {{ 'customer.add-customers-to-group' | translate: { groupName: activeGroup.name } }}\r\n </button>\r\n </div>\r\n <vdr-customer-group-member-list\r\n [members]=\"members$ | async\"\r\n [route]=\"route\"\r\n [totalItems]=\"membersTotal$ | async\"\r\n [selectedMemberIds]=\"selectedCustomerIds\"\r\n (selectionChange)=\"selectedCustomerIds = $event\"\r\n (fetchParamsChange)=\"fetchGroupMembers$.next($event)\"\r\n ></vdr-customer-group-member-list>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", styles: [".group-wrapper{display:flex;height:calc(100% - 50px)}.group-wrapper .group-list{flex:1;overflow:auto;margin-top:0}.group-wrapper .group-list .active{background-color:var(--clr-global-selection-color)}.group-wrapper .group-list.expanded{width:calc(100% - 40vw)}vdr-data-table ::ng-deep table{margin-top:0}.group-members{height:100%;width:0;opacity:0;visibility:hidden;overflow:auto;transition:width .3s,opacity .2s .3s,visibility 0s .3s}.group-members.expanded{width:40vw;visibility:visible;opacity:1;padding-left:12px}.group-members .close-button{margin:0;background:none;border:none;cursor:pointer}.group-members ::ng-deep table.table{margin-top:0}.group-members ::ng-deep table.table th{top:0}.group-members .controls{display:flex;justify-content:space-between}vdr-empty-placeholder{flex:1}\n"], components: [{ type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { type: i1.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i1.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i1.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "selectionManager", "allSelected", "isRowSelectedFn"], outputs: ["pageChange", "itemsPerPageChange", "allSelectChange", "rowSelectChange"] }, { type: i1.EntityInfoComponent, selector: "vdr-entity-info", inputs: ["small", "entity"] }, { type: i1.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }, { type: i1.EmptyPlaceholderComponent, selector: "vdr-empty-placeholder", inputs: ["emptyStateLabel"] }, { type: i3.CustomerGroupMemberListComponent, selector: "vdr-customer-group-member-list", inputs: ["members", "totalItems", "route", "selectedMemberIds"], outputs: ["selectionChange", "fetchParamsChange"] }], directives: [{ type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i5.ClrIconCustomTag, selector: "clr-icon" }, { type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i7.TranslatePipe, "async": i6.AsyncPipe, "hasPermission": i1.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
177
192
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CustomerGroupListComponent, decorators: [{
178
193
  type: Component,
179
- args: [{ selector: 'vdr-customer-group-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-action-bar>\r\n <vdr-ab-left> </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"customer-group-list\"></vdr-action-bar-items>\r\n <button class=\"btn btn-primary\" *vdrIfPermissions=\"'CreateCustomerGroup'\" (click)=\"create()\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.create-new-customer-group' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n<div class=\"group-wrapper\">\r\n <div class=\"group-list\">\r\n <table\r\n class=\"table mt0\"\r\n [class.expanded]=\"activeGroup$ | async\"\r\n *ngIf=\"!(listIsEmpty$ | async); else emptyPlaceholder\"\r\n >\r\n <tbody>\r\n <tr\r\n *ngFor=\"let group of groups$ | async\"\r\n [class.active]=\"group.id === (activeGroup$ | async)?.id\"\r\n >\r\n <td class=\"left align-middle\"><vdr-entity-info [entity]=\"group\"></vdr-entity-info></td>\r\n <td class=\"left align-middle\">\r\n <vdr-chip [colorFrom]=\"group.id\">{{ group.name }}</vdr-chip>\r\n </td>\r\n <td class=\"text-right align-middle\">\r\n <a\r\n class=\"btn btn-link btn-sm\"\r\n [routerLink]=\"['./', { contents: group.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <clr-icon shape=\"view-list\"></clr-icon>\r\n {{ 'customer.view-group-members' | translate }}\r\n </a>\r\n </td>\r\n <td class=\"align-middle\">\r\n <button class=\"btn btn-link btn-sm\" (click)=\"update(group)\">\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n </td>\r\n <td class=\"align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"delete(group.id)\"\r\n [disabled]=\"!('DeleteCustomerGroup' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <ng-template #emptyPlaceholder>\r\n <vdr-empty-placeholder></vdr-empty-placeholder>\r\n </ng-template>\r\n <div class=\"group-members\" [class.expanded]=\"activeGroup$ | async\">\r\n <ng-container *ngIf=\"activeGroup$ | async as activeGroup\">\r\n <div class=\"flex\">\r\n <div class=\"header-title-row\">{{ activeGroup.name }} ({{ membersTotal$ | async }})</div>\r\n <div class=\"flex-spacer\"></div>\r\n <button type=\"button\" class=\"close-button\" (click)=\"closeMembers()\">\r\n <clr-icon shape=\"close\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"controls\">\r\n <vdr-dropdown>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-secondary btn-sm\"\r\n vdrDropdownTrigger\r\n [disabled]=\"selectedCustomerIds.length === 0\"\r\n >\r\n {{ 'common.with-selected' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"removeFromGroup(activeGroup, selectedCustomerIds)\"\r\n vdrDropdownItem\r\n [disabled]=\"!('UpdateCustomerGroup' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'customer.remove-from-group' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" (click)=\"addToGroup(activeGroup)\">\r\n {{ 'customer.add-customers-to-group' | translate: { groupName: activeGroup.name } }}\r\n </button>\r\n </div>\r\n <vdr-customer-group-member-list\r\n [members]=\"members$ | async\"\r\n [route]=\"route\"\r\n [totalItems]=\"membersTotal$ | async\"\r\n [selectedMemberIds]=\"selectedCustomerIds\"\r\n (selectionChange)=\"selectedCustomerIds = $event\"\r\n (fetchParamsChange)=\"fetchGroupMembers$.next($event)\"\r\n ></vdr-customer-group-member-list>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", styles: [".group-wrapper{display:flex;height:calc(100% - 50px)}.group-wrapper .group-list{flex:1;overflow:auto;margin-top:0}.group-wrapper .group-list tr.active{background-color:var(--color-component-bg-200)}.group-wrapper .group-list.expanded{width:calc(100% - 40vw)}.group-members{height:100%;width:0;opacity:0;visibility:hidden;overflow:auto;transition:width .3s,opacity .2s .3s,visibility 0s .3s}.group-members.expanded{width:40vw;visibility:visible;opacity:1;padding-left:12px}.group-members .close-button{margin:0;background:none;border:none;cursor:pointer}.group-members ::ng-deep table.table{margin-top:0}.group-members ::ng-deep table.table th{top:0}.group-members .controls{display:flex;justify-content:space-between}vdr-empty-placeholder{flex:1}\n"] }]
194
+ args: [{ selector: 'vdr-customer-group-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-action-bar>\r\n <vdr-ab-left>\r\n <input\r\n type=\"text\"\r\n name=\"emailSearchTerm\"\r\n [formControl]=\"searchTerm\"\r\n [placeholder]=\"'customer.search-by-group-name' | translate\"\r\n class=\"search-input\"\r\n />\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"customer-group-list\"></vdr-action-bar-items>\r\n <button class=\"btn btn-primary\" *vdrIfPermissions=\"'CreateCustomerGroup'\" (click)=\"create()\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'customer.create-new-customer-group' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n<div class=\"group-wrapper\">\r\n <div class=\"group-list\">\r\n <vdr-data-table\r\n [class.expanded]=\"activeGroup$ | async\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n >\r\n <ng-template let-group=\"item\">\r\n <td class=\"left align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <vdr-entity-info [entity]=\"group\"></vdr-entity-info>\r\n </td>\r\n <td class=\"left align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <vdr-chip [colorFrom]=\"group.id\">{{ group.name }}</vdr-chip>\r\n </td>\r\n <td class=\"left align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <a\r\n class=\"btn btn-link btn-sm\"\r\n [routerLink]=\"['./', { contents: group.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <clr-icon shape=\"view-list\"></clr-icon>\r\n {{ 'customer.view-group-members' | translate }}\r\n </a>\r\n </td>\r\n <td class=\"right align-middle\" [class.active]=\"group.id === activeGroupId\">\r\n <button class=\"btn btn-link btn-sm\" (click)=\"update(group)\">\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n </td>\r\n <td [class.active]=\"group.id === activeGroupId\" class=\"align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"delete(group.id)\"\r\n [disabled]=\"!('DeleteCustomerGroup' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n </vdr-data-table>\r\n </div>\r\n <ng-template #emptyPlaceholder>\r\n <vdr-empty-placeholder></vdr-empty-placeholder>\r\n </ng-template>\r\n <div class=\"group-members\" [class.expanded]=\"activeGroup$ | async\">\r\n <ng-container *ngIf=\"activeGroup$ | async as activeGroup\">\r\n <div class=\"flex\">\r\n <div class=\"header-title-row\">{{ activeGroup.name }} ({{ membersTotal$ | async }})</div>\r\n <div class=\"flex-spacer\"></div>\r\n <button type=\"button\" class=\"close-button\" (click)=\"closeMembers()\">\r\n <clr-icon shape=\"close\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"controls\">\r\n <vdr-dropdown>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-secondary btn-sm\"\r\n vdrDropdownTrigger\r\n [disabled]=\"selectedCustomerIds.length === 0\"\r\n >\r\n {{ 'common.with-selected' | translate: { count: selectedCustomerIds.length } }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"removeFromGroup(activeGroup, selectedCustomerIds)\"\r\n vdrDropdownItem\r\n [disabled]=\"!('UpdateCustomerGroup' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'customer.remove-from-group' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" (click)=\"addToGroup(activeGroup)\">\r\n {{ 'customer.add-customers-to-group' | translate: { groupName: activeGroup.name } }}\r\n </button>\r\n </div>\r\n <vdr-customer-group-member-list\r\n [members]=\"members$ | async\"\r\n [route]=\"route\"\r\n [totalItems]=\"membersTotal$ | async\"\r\n [selectedMemberIds]=\"selectedCustomerIds\"\r\n (selectionChange)=\"selectedCustomerIds = $event\"\r\n (fetchParamsChange)=\"fetchGroupMembers$.next($event)\"\r\n ></vdr-customer-group-member-list>\r\n </ng-container>\r\n </div>\r\n</div>\r\n", styles: [".group-wrapper{display:flex;height:calc(100% - 50px)}.group-wrapper .group-list{flex:1;overflow:auto;margin-top:0}.group-wrapper .group-list .active{background-color:var(--clr-global-selection-color)}.group-wrapper .group-list.expanded{width:calc(100% - 40vw)}vdr-data-table ::ng-deep table{margin-top:0}.group-members{height:100%;width:0;opacity:0;visibility:hidden;overflow:auto;transition:width .3s,opacity .2s .3s,visibility 0s .3s}.group-members.expanded{width:40vw;visibility:visible;opacity:1;padding-left:12px}.group-members .close-button{margin:0;background:none;border:none;cursor:pointer}.group-members ::ng-deep table.table{margin-top:0}.group-members ::ng-deep table.table th{top:0}.group-members .controls{display:flex;justify-content:space-between}vdr-empty-placeholder{flex:1}\n"] }]
180
195
  }], ctorParameters: function () { return [{ type: i1.DataService }, { type: i1.NotificationService }, { type: i1.ModalService }, { type: i2.ActivatedRoute }, { type: i2.Router }]; } });
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXItZ3JvdXAtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2N1c3RvbWVyL3NyYy9jb21wb25lbnRzL2N1c3RvbWVyLWdyb3VwLWxpc3QvY3VzdG9tZXItZ3JvdXAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2N1c3RvbWVyL3NyYy9jb21wb25lbnRzL2N1c3RvbWVyLWdyb3VwLWxpc3QvY3VzdG9tZXItZ3JvdXAtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUVILGNBQWMsR0FNakIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUMzSCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQzs7Ozs7Ozs7QUFTNUgsTUFBTSxPQUFPLDBCQUEwQjtJQWdCbkMsWUFDWSxXQUF3QixFQUN4QixtQkFBd0MsRUFDeEMsWUFBMEIsRUFDM0IsS0FBcUIsRUFDcEIsTUFBYztRQUpkLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDM0IsVUFBSyxH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WCxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw4Q0FBOEMsQ0FBQyxFQUFFO29CQUNoRixhQUFhLEVBQUUsV0FBVyxDQUFDLE1BQU07b0JBQ2pDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSTtpQkFDeEIsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztZQUNsQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7dUhBck5RLDBCQUEwQjsyR0FBMUIsMEJBQTBCLCtEQ3pCdkMsaTdMQW9IQTsyRkQzRmEsMEJBQTBCO2tCQU50QyxTQUFTOytCQUNJLHlCQUF5QixtQkFHbEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBEZWxldGlvblJlc3VsdCxcclxuICAgIEdldEN1c3RvbWVyR3JvdXBzUXVlcnksXHJcbiAgICBHZXRDdXN0b21lckdyb3VwV2l0aEN1c3RvbWVyc1F1ZXJ5LFxyXG4gICAgSXRlbU9mLFxyXG4gICAgTW9kYWxTZXJ2aWNlLFxyXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgbWFwVG8sIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQWRkQ3VzdG9tZXJUb0dyb3VwRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vYWRkLWN1c3RvbWVyLXRvLWdyb3VwLWRpYWxvZy9hZGQtY3VzdG9tZXItdG8tZ3JvdXAtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEN1c3RvbWVyR3JvdXBEZXRhaWxEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9jdXN0b21lci1ncm91cC1kZXRhaWwtZGlhbG9nL2N1c3RvbWVyLWdyb3VwLWRldGFpbC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tZXJHcm91cE1lbWJlckZldGNoUGFyYW1zIH0gZnJvbSAnLi4vY3VzdG9tZXItZ3JvdXAtbWVtYmVyLWxpc3QvY3VzdG9tZXItZ3JvdXAtbWVtYmVyLWxpc3QuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItY3VzdG9tZXItZ3JvdXAtbGlzdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tZXItZ3JvdXAtbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jdXN0b21lci1ncm91cC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEN1c3RvbWVyR3JvdXBMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGFjdGl2ZUdyb3VwJDogT2JzZXJ2YWJsZTxJdGVtT2Y8R2V0Q3VzdG9tZXJHcm91cHNRdWVyeSwgJ2N1c3RvbWVyR3JvdXBzJz4gfCB1bmRlZmluZWQ+O1xyXG4gICAgZ3JvdXBzJDogT2JzZXJ2YWJsZTxBcnJheTxJdGVtT2Y8R2V0Q3VzdG9tZXJHcm91cHNRdWVyeSwgJ2N1c3RvbWVyR3JvdXBzJz4+PjtcclxuICAgIGxpc3RJc0VtcHR5JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIG1lbWJlcnMkOiBPYnNlcnZhYmxlPFxyXG4gICAgICAgIE5vbk51bGxhYmxlPEdldEN1c3RvbWVyR3JvdXBXaXRoQ3VzdG9tZXJzUXVlcnlbJ2N1c3RvbWVyR3JvdXAnXT5bJ2N1c3RvbWVycyddWydpdGVtcyddXHJcbiAgICA+O1xyXG4gICAgbWVtYmVyc1RvdGFsJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gICAgc2VsZWN0ZWRDdXN0b21lcklkczogc3RyaW5nW10gPSBbXTtcclxuICAgIGZldGNoR3JvdXBNZW1iZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q3VzdG9tZXJHcm91cE1lbWJlckZldGNoUGFyYW1zPih7XHJcbiAgICAgICAgc2tpcDogMCxcclxuICAgICAgICB0YWtlOiAwLFxyXG4gICAgICAgIGZpbHRlclRlcm06ICcnLFxyXG4gICAgfSk7XHJcbiAgICBwcml2YXRlIHJlZnJlc2hBY3RpdmVHcm91cE1lbWJlcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPih1bmRlZmluZWQpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdyb3VwcyQgPSB0aGlzLmRhdGFTZXJ2aWNlLmN1c3RvbWVyXHJcbiAgICAgICAgICAgIC5nZXRDdXN0b21lckdyb3VwTGlzdCgpXHJcbiAgICAgICAgICAgIC5tYXBTdHJlYW0oZGF0YSA9PiBkYXRhLmN1c3RvbWVyR3JvdXBzLml0ZW1zKTtcclxuICAgICAgICBjb25zdCBhY3RpdmVHcm91cElkJCA9IHRoaXMucm91dGUucGFyYW1NYXAucGlwZShcclxuICAgICAgICAgICAgbWFwKHBtID0+IHBtLmdldCgnY29udGVudHMnKSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIHRhcCgoKSA9PiAodGhpcy5zZWxlY3RlZEN1c3RvbWVySWRzID0gW10pKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMubGlzdElzRW1wdHkkID0gdGhpcy5ncm91cHMkLnBpcGUobWFwKGdyb3VwcyA9PiBncm91cHMubGVuZ3RoID09PSAwKSk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVHcm91cCQgPSBjb21iaW5lTGF0ZXN0KHRoaXMuZ3JvdXBzJCwgYWN0aXZlR3JvdXBJZCQpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoW2dyb3VwcywgYWN0aXZlR3JvdXBJZF0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVHcm91cElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdyb3Vwcy5maW5kKGcgPT4gZy5pZCA9PT0gYWN0aXZlR3JvdXBJZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgbWVtYmVyc1Jlc3VsdCQgPSBjb21iaW5lTGF0ZXN0KFxyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUdyb3VwJCxcclxuICAgICAgICAgICAgdGhpcy5mZXRjaEdyb3VwTWVtYmVycyQsXHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaEFjdGl2ZUdyb3VwTWVtYmVycyQsXHJcbiAgICAgICAgKS5waXBlKFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKFthY3RpdmVHcm91cCwgeyBza2lwLCB0YWtlLCBmaWx0ZXJUZXJtIH1dKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlR3JvdXApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5jdXN0b21lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0Q3VzdG9tZXJHcm91cFdpdGhDdXN0b21lcnMoYWN0aXZlR3JvdXAuaWQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWxBZGRyZXNzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBmaWx0ZXJUZXJtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwU3RyZWFtKHJlcyA9PiByZXMuY3VzdG9tZXJHcm91cD8uY3VzdG9tZXJzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMubWVtYmVycyQgPSBtZW1iZXJzUmVzdWx0JC5waXBlKG1hcChyZXMgPT4gcmVzPy5pdGVtcyA/PyBbXSkpO1xyXG4gICAgICAgIHRoaXMubWVtYmVyc1RvdGFsJCA9IG1lbWJlcnNSZXN1bHQkLnBpcGUobWFwKHJlcyA9PiByZXM/LnRvdGFsSXRlbXMgPz8gMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZSgpIHtcclxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZVxyXG4gICAgICAgICAgICAuZnJvbUNvbXBvbmVudChDdXN0b21lckdyb3VwRGV0YWlsRGlhbG9nQ29tcG9uZW50LCB7IGxvY2FsczogeyBncm91cDogeyBuYW1lOiAnJyB9IH0gfSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5kYXRhU2VydmljZS5jdXN0b21lci5jcmVhdGVDdXN0b21lckdyb3VwKHsgLi4ucmVzdWx0LCBjdXN0b21lcklkczogW10gfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBFTVBUWSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAvLyByZWZyZXNoIGxpc3RcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmRhdGFTZXJ2aWNlLmN1c3RvbWVyLmdldEN1c3RvbWVyR3JvdXBMaXN0KCkuc2luZ2xlJCksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ3VzdG9tZXJHcm91cCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS1jcmVhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDdXN0b21lckdyb3VwJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlKGdyb3VwSWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5kaWFsb2coe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IF8oJ2N1c3RvbWVyLmNvbmZpcm0tZGVsZXRlLWN1c3RvbWVyLWdyb3VwJyksXHJcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnc2Vjb25kYXJ5JywgbGFiZWw6IF8oJ2NvbW1vbi5jYW5jZWwnKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ2RhbmdlcicsIGxhYmVsOiBfKCdjb21tb24uZGVsZXRlJyksIHJldHVyblZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXNwb25zZSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID8gdGhpcy5kYXRhU2VydmljZS5jdXN0b21lci5kZWxldGVDdXN0b21lckdyb3VwKGdyb3VwSWQpIDogRU1QVFksXHJcbiAgICAgICAgICAgICAgICApLFxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGVsZXRlQ3VzdG9tZXJHcm91cC5yZXN1bHQgPT09IERlbGV0aW9uUmVzdWx0LkRFTEVURUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmcmVzaCBsaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLmN1c3RvbWVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0Q3VzdG9tZXJHcm91cExpc3QoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcFNpbmdsZSgoKSA9PiAoeyBlcnJvck1lc3NhZ2U6IGZhbHNlIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoeyBlcnJvck1lc3NhZ2U6IHJlc3VsdC5kZWxldGVDdXN0b21lckdyb3VwLm1lc3NhZ2UgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQuZXJyb3JNZXNzYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IocmVzdWx0LmVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS1kZWxldGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDdXN0b21lckdyb3VwJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktZGVsZXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ3VzdG9tZXJHcm91cCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZShncm91cDogSXRlbU9mPEdldEN1c3RvbWVyR3JvdXBzUXVlcnksICdjdXN0b21lckdyb3Vwcyc+KSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoQ3VzdG9tZXJHcm91cERldGFpbERpYWxvZ0NvbXBvbmVudCwgeyBsb2NhbHM6IHsgZ3JvdXAgfSB9KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT5cclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRhdGFTZXJ2aWNlLmN1c3RvbWVyLnVwZGF0ZUN1c3RvbWVyR3JvdXAoeyBpZDogZ3JvdXAuaWQsIC4uLnJlc3VsdCB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEVNUFRZLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDdXN0b21lckdyb3VwJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0N1c3RvbWVyR3JvdXAnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZU1lbWJlcnMoKSB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcyB9O1xyXG4gICAgICAgIGRlbGV0ZSBwYXJhbXMuY29udGVudHM7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLycsIHBhcmFtc10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgcXVlcnlQYXJhbXNIYW5kbGluZzogJ3ByZXNlcnZlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUb0dyb3VwKGdyb3VwOiBOb25OdWxsYWJsZTxHZXRDdXN0b21lckdyb3VwV2l0aEN1c3RvbWVyc1F1ZXJ5WydjdXN0b21lckdyb3VwJ10+KSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoQWRkQ3VzdG9tZXJUb0dyb3VwRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICBsb2NhbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBncm91cCxcclxuICAgICAgICAgICAgICAgICAgICByb3V0ZTogdGhpcy5yb3V0ZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzaXplOiAnbWQnLFxyXG4gICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogJ3RvcCcsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGN1c3RvbWVySWRzID0+XHJcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tZXJJZHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRhdGFTZXJ2aWNlLmN1c3RvbWVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDdXN0b21lcnNUb0dyb3VwKGdyb3VwLmlkLCBjdXN0b21lcklkcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwVG8oY3VzdG9tZXJJZHMpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEVNUFRZLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXyhgY3VzdG9tZXIuYWRkLWN1c3RvbWVycy10by1ncm91cC1zdWNjZXNzYCksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tZXJDb3VudDogcmVzdWx0Lmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBOYW1lOiBncm91cC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEFjdGl2ZUdyb3VwTWVtYmVycyQubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDdXN0b21lcklkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRnJvbUdyb3VwKFxyXG4gICAgICAgIGdyb3VwOiBOb25OdWxsYWJsZTxHZXRDdXN0b21lckdyb3VwV2l0aEN1c3RvbWVyc1F1ZXJ5WydjdXN0b21lckdyb3VwJ10+LFxyXG4gICAgICAgIGN1c3RvbWVySWRzOiBzdHJpbmdbXSxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY3VzdG9tZXIucmVtb3ZlQ3VzdG9tZXJzRnJvbUdyb3VwKGdyb3VwLmlkLCBjdXN0b21lcklkcykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oYGN1c3RvbWVyLnJlbW92ZS1jdXN0b21lcnMtZnJvbS1ncm91cC1zdWNjZXNzYCksIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXN0b21lckNvdW50OiBjdXN0b21lcklkcy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBOYW1lOiBncm91cC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hBY3RpdmVHcm91cE1lbWJlcnMkLm5leHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDdXN0b21lcklkcyA9IFtdO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItYWN0aW9uLWJhcj5cclxuICAgIDx2ZHItYWItbGVmdD4gPC92ZHItYWItbGVmdD5cclxuICAgIDx2ZHItYWItcmlnaHQ+XHJcbiAgICAgICAgPHZkci1hY3Rpb24tYmFyLWl0ZW1zIGxvY2F0aW9uSWQ9XCJjdXN0b21lci1ncm91cC1saXN0XCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKnZkcklmUGVybWlzc2lvbnM9XCInQ3JlYXRlQ3VzdG9tZXJHcm91cCdcIiAoY2xpY2spPVwiY3JlYXRlKClcIj5cclxuICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgIHt7ICdjdXN0b21lci5jcmVhdGUtbmV3LWN1c3RvbWVyLWdyb3VwJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC92ZHItYWItcmlnaHQ+XHJcbjwvdmRyLWFjdGlvbi1iYXI+XHJcbjxkaXYgY2xhc3M9XCJncm91cC13cmFwcGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtbGlzdFwiPlxyXG4gICAgICAgIDx0YWJsZVxyXG4gICAgICAgICAgICBjbGFzcz1cInRhYmxlIG10MFwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5leHBhbmRlZF09XCJhY3RpdmVHcm91cCQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiIShsaXN0SXNFbXB0eSQgfCBhc3luYyk7IGVsc2UgZW1wdHlQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImdyb3VwLmlkID09PSAoYWN0aXZlR3JvdXAkIHwgYXN5bmMpPy5pZFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwibGVmdCBhbGlnbi1taWRkbGVcIj48dmRyLWVudGl0eS1pbmZvIFtlbnRpdHldPVwiZ3JvdXBcIj48L3Zkci1lbnRpdHktaW5mbz48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImxlZnQgYWxpZ24tbWlkZGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcCBbY29sb3JGcm9tXT1cImdyb3VwLmlkXCI+e3sgZ3JvdXAubmFtZSB9fTwvdmRyLWNoaXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LXJpZ2h0IGFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnLi8nLCB7IGNvbnRlbnRzOiBncm91cC5pZCB9XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nPVwicHJlc2VydmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJ2aWV3LWxpc3RcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2N1c3RvbWVyLnZpZXctZ3JvdXAtbWVtYmVycycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtXCIgKGNsaWNrKT1cInVwZGF0ZShncm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImVkaXRcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5lZGl0JyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtXCIgdmRyRHJvcGRvd25UcmlnZ2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24uYWN0aW9ucycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJjYXJldCBkb3duXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bi1tZW51IHZkclBvc2l0aW9uPVwiYm90dG9tLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlKGdyb3VwLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhKCdEZWxldGVDdXN0b21lckdyb3VwJyB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInRyYXNoXCIgY2xhc3M9XCJpcy1kYW5nZXJcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmRlbGV0ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlQbGFjZWhvbGRlcj5cclxuICAgICAgICA8dmRyLWVtcHR5LXBsYWNlaG9sZGVyPjwvdmRyLWVtcHR5LXBsYWNlaG9sZGVyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJncm91cC1tZW1iZXJzXCIgW2NsYXNzLmV4cGFuZGVkXT1cImFjdGl2ZUdyb3VwJCB8IGFzeW5jXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZUdyb3VwJCB8IGFzeW5jIGFzIGFjdGl2ZUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlLXJvd1wiPnt7IGFjdGl2ZUdyb3VwLm5hbWUgfX0gKHt7IG1lbWJlcnNUb3RhbCQgfCBhc3luYyB9fSk8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZS1idXR0b25cIiAoY2xpY2spPVwiY2xvc2VNZW1iZXJzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJjbG9zZVwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sc1wiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duVHJpZ2dlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VsZWN0ZWRDdXN0b21lcklkcy5sZW5ndGggPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi53aXRoLXNlbGVjdGVkJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJjYXJldCBkb3duXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duLW1lbnUgdmRyUG9zaXRpb249XCJib3R0b20tcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRlbGV0ZS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZyb21Hcm91cChhY3RpdmVHcm91cCwgc2VsZWN0ZWRDdXN0b21lcklkcylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmRyRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISgnVXBkYXRlQ3VzdG9tZXJHcm91cCcgfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInRyYXNoXCIgY2xhc3M9XCJpcy1kYW5nZXJcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2N1c3RvbWVyLnJlbW92ZS1mcm9tLWdyb3VwJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bi1tZW51PlxyXG4gICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtXCIgKGNsaWNrKT1cImFkZFRvR3JvdXAoYWN0aXZlR3JvdXApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ2N1c3RvbWVyLmFkZC1jdXN0b21lcnMtdG8tZ3JvdXAnIHwgdHJhbnNsYXRlOiB7IGdyb3VwTmFtZTogYWN0aXZlR3JvdXAubmFtZSB9IH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDx2ZHItY3VzdG9tZXItZ3JvdXAtbWVtYmVyLWxpc3RcclxuICAgICAgICAgICAgICAgIFttZW1iZXJzXT1cIm1lbWJlcnMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgW3JvdXRlXT1cInJvdXRlXCJcclxuICAgICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cIm1lbWJlcnNUb3RhbCQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRNZW1iZXJJZHNdPVwic2VsZWN0ZWRDdXN0b21lcklkc1wiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGVkQ3VzdG9tZXJJZHMgPSAkZXZlbnRcIlxyXG4gICAgICAgICAgICAgICAgKGZldGNoUGFyYW1zQ2hhbmdlKT1cImZldGNoR3JvdXBNZW1iZXJzJC5uZXh0KCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC92ZHItY3VzdG9tZXItZ3JvdXAtbWVtYmVyLWxpc3Q+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXItZ3JvdXAtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2N1c3RvbWVyL3NyYy9jb21wb25lbnRzL2N1c3RvbWVyLWdyb3VwLWxpc3QvY3VzdG9tZXItZ3JvdXAtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2N1c3RvbWVyL3NyYy9jb21wb25lbnRzL2N1c3RvbWVyLWdyb3VwLWxpc3QvY3VzdG9tZXItZ3JvdXAtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFDSCxpQkFBaUIsRUFFakIsY0FBYyxHQVFqQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUNILFlBQVksRUFDWixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLEdBQUcsRUFDSCxLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxHQUFHLEdBQ04sTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUMzSCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQzs7Ozs7Ozs7O0FBUzVILE1BQU0sT0FBTywwQkFDVCxTQUFRLGlCQUdQO0lBbUJELFlBQ1ksV0FBd0IsRUFDeEIsbUJBQXdDLEVBQ3hDLFlBQTBCLEVBQzNCLEtBQXFCLEVBQ2xCLE1BQWM7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QyxJQUFJO2lCQUN4QixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1lBQ2xDLENBQUM7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDOzt1SEFuUFEsMEJBQTBCOzJHQUExQiwwQkFBMEIsc0ZDdEN2QywyNE1BNkhBOzJGRHZGYSwwQkFBMEI7a0JBTnRDLFNBQVM7K0JBQ0kseUJBQXlCLG1CQUdsQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQmFzZUxpc3RDb21wb25lbnQsXHJcbiAgICBEYXRhU2VydmljZSxcclxuICAgIERlbGV0aW9uUmVzdWx0LFxyXG4gICAgR2V0Q3VzdG9tZXJHcm91cHNRdWVyeSxcclxuICAgIEdldEN1c3RvbWVyR3JvdXBXaXRoQ3VzdG9tZXJzUXVlcnksXHJcbiAgICBJdGVtT2YsXHJcbiAgICBMb2dpY2FsT3BlcmF0b3IsXHJcbiAgICBNb2RhbFNlcnZpY2UsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgU29ydE9yZGVyLFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIEVNUFRZLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gICAgZGVib3VuY2VUaW1lLFxyXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXHJcbiAgICBmaWx0ZXIsXHJcbiAgICBtYXAsXHJcbiAgICBtYXBUbyxcclxuICAgIHN3aXRjaE1hcCxcclxuICAgIHRha2VVbnRpbCxcclxuICAgIHRhcCxcclxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBBZGRDdXN0b21lclRvR3JvdXBEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9hZGQtY3VzdG9tZXItdG8tZ3JvdXAtZGlhbG9nL2FkZC1jdXN0b21lci10by1ncm91cC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tZXJHcm91cERldGFpbERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2N1c3RvbWVyLWdyb3VwLWRldGFpbC1kaWFsb2cvY3VzdG9tZXItZ3JvdXAtZGV0YWlsLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21lckdyb3VwTWVtYmVyRmV0Y2hQYXJhbXMgfSBmcm9tICcuLi9jdXN0b21lci1ncm91cC1tZW1iZXItbGlzdC9jdXN0b21lci1ncm91cC1tZW1iZXItbGlzdC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1jdXN0b21lci1ncm91cC1saXN0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jdXN0b21lci1ncm91cC1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2N1c3RvbWVyLWdyb3VwLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tZXJHcm91cExpc3RDb21wb25lbnRcclxuICAgIGV4dGVuZHMgQmFzZUxpc3RDb21wb25lbnQ8XHJcbiAgICAgICAgR2V0Q3VzdG9tZXJHcm91cHNRdWVyeSxcclxuICAgICAgICBHZXRDdXN0b21lckdyb3Vwc1F1ZXJ5WydjdXN0b21lckdyb3VwcyddWydpdGVtcyddW251bWJlcl1cclxuICAgID5cclxuICAgIGltcGxlbWVudHMgT25Jbml0XHJcbntcclxuICAgIHNlYXJjaFRlcm0gPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gICAgYWN0aXZlR3JvdXAkOiBPYnNlcnZhYmxlPEl0ZW1PZjxHZXRDdXN0b21lckdyb3Vwc1F1ZXJ5LCAnY3VzdG9tZXJHcm91cHMnPiB8IHVuZGVmaW5lZD47XHJcbiAgICBhY3RpdmVHcm91cElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBsaXN0SXNFbXB0eSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBtZW1iZXJzJDogT2JzZXJ2YWJsZTxcclxuICAgICAgICBOb25OdWxsYWJsZTxHZXRDdXN0b21lckdyb3VwV2l0aEN1c3RvbWVyc1F1ZXJ5WydjdXN0b21lckdyb3VwJ10+WydjdXN0b21lcnMnXVsnaXRlbXMnXVxyXG4gICAgPjtcclxuICAgIG1lbWJlcnNUb3RhbCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcclxuICAgIHNlbGVjdGVkQ3VzdG9tZXJJZHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBmZXRjaEdyb3VwTWVtYmVycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEN1c3RvbWVyR3JvdXBNZW1iZXJGZXRjaFBhcmFtcz4oe1xyXG4gICAgICAgIHNraXA6IDAsXHJcbiAgICAgICAgdGFrZTogMCxcclxuICAgICAgICBmaWx0ZXJUZXJtOiAnJyxcclxuICAgIH0pO1xyXG4gICAgcHJpdmF0ZSByZWZyZXNoQWN0aXZlR3JvdXBNZW1iZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dm9pZD4odW5kZWZpbmVkKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKHJvdXRlciwgcm91dGUpO1xyXG4gICAgICAgIHN1cGVyLnNldFF1ZXJ5Rm4oXHJcbiAgICAgICAgICAgICguLi5hcmdzOiBhbnlbXSkgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY3VzdG9tZXIuZ2V0Q3VzdG9tZXJHcm91cExpc3QoLi4uYXJncykucmVmZXRjaE9uQ2hhbm5lbENoYW5nZSgpLFxyXG4gICAgICAgICAgICBkYXRhID0+IGRhdGEuY3VzdG9tZXJHcm91cHMsXHJcbiAgICAgICAgICAgIChza2lwLCB0YWtlKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHNraXAsXHJcbiAgICAgICAgICAgICAgICAgICAgdGFrZSxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeyBjb250YWluczogdGhpcy5zZWFyY2hUZXJtLnZhbHVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLnNlYXJjaFRlcm0udmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyKHZhbHVlID0+IDIgPCB2YWx1ZS5sZW5ndGggfHwgdmFsdWUubGVuZ3RoID09PSAwKSxcclxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgyNTApLFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZWZyZXNoKCkpO1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZUdyb3VwSWQkID0gdGhpcy5yb3V0ZS5wYXJhbU1hcC5waXBlKFxyXG4gICAgICAgICAgICBtYXAocG0gPT4gcG0uZ2V0KCdjb250ZW50cycpKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgdGFwKCgpID0+ICh0aGlzLnNlbGVjdGVkQ3VzdG9tZXJJZHMgPSBbXSkpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5saXN0SXNFbXB0eSQgPSB0aGlzLml0ZW1zJC5waXBlKG1hcChncm91cHMgPT4gZ3JvdXBzLmxlbmd0aCA9PT0gMCkpO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlR3JvdXAkID0gY29tYmluZUxhdGVzdCh0aGlzLml0ZW1zJCwgYWN0aXZlR3JvdXBJZCQpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoW2dyb3VwcywgYWN0aXZlR3JvdXBJZF0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVHcm91cElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdyb3Vwcy5maW5kKGcgPT4gZy5pZCA9PT0gYWN0aXZlR3JvdXBJZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB0YXAodmFsID0+ICh0aGlzLmFjdGl2ZUdyb3VwSWQgPSB2YWw/LmlkKSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBtZW1iZXJzUmVzdWx0JCA9IGNvbWJpbmVMYXRlc3QoXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlR3JvdXAkLFxyXG4gICAgICAgICAgICB0aGlzLmZldGNoR3JvdXBNZW1iZXJzJCxcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoQWN0aXZlR3JvdXBNZW1iZXJzJCxcclxuICAgICAgICApLnBpcGUoXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoW2FjdGl2ZUdyb3VwLCB7IHNraXAsIHRha2UsIGZpbHRlclRlcm0gfV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLmN1c3RvbWVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDdXN0b21lckdyb3VwV2l0aEN1c3RvbWVycyhhY3RpdmVHcm91cC5pZCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbEFkZHJlc3M6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnM6IGZpbHRlclRlcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXBTdHJlYW0ocmVzID0+IHJlcy5jdXN0b21lckdyb3VwPy5jdXN0b21lcnMpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5tZW1iZXJzJCA9IG1lbWJlcnNSZXN1bHQkLnBpcGUobWFwKHJlcyA9PiByZXM/Lml0ZW1zID8/IFtdKSk7XHJcbiAgICAgICAgdGhpcy5tZW1iZXJzVG90YWwkID0gbWVtYmVyc1Jlc3VsdCQucGlwZShtYXAocmVzID0+IHJlcz8udG90YWxJdGVtcyA/PyAwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlKCkge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5mcm9tQ29tcG9uZW50KEN1c3RvbWVyR3JvdXBEZXRhaWxEaWFsb2dDb21wb25lbnQsIHsgbG9jYWxzOiB7IGdyb3VwOiB7IG5hbWU6ICcnIH0gfSB9KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT5cclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRhdGFTZXJ2aWNlLmN1c3RvbWVyLmNyZWF0ZUN1c3RvbWVyR3JvdXAoeyAuLi5yZXN1bHQsIGN1c3RvbWVySWRzOiBbXSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEVNUFRZLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDdXN0b21lckdyb3VwJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0N1c3RvbWVyR3JvdXAnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGUoZ3JvdXBJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmRpYWxvZyh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXygnY3VzdG9tZXIuY29uZmlybS1kZWxldGUtY3VzdG9tZXItZ3JvdXAnKSxcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdzZWNvbmRhcnknLCBsYWJlbDogXygnY29tbW9uLmNhbmNlbCcpIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnZGFuZ2VyJywgbGFiZWw6IF8oJ2NvbW1vbi5kZWxldGUnKSwgcmV0dXJuVmFsdWU6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPyB0aGlzLmRhdGFTZXJ2aWNlLmN1c3RvbWVyLmRlbGV0ZUN1c3RvbWVyR3JvdXAoZ3JvdXBJZCkgOiBFTVBUWSxcclxuICAgICAgICAgICAgICAgICksXHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kZWxldGVDdXN0b21lckdyb3VwLnJlc3VsdCA9PT0gRGVsZXRpb25SZXN1bHQuREVMRVRFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZyZXNoIGxpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuY3VzdG9tZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDdXN0b21lckdyb3VwTGlzdCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwU2luZ2xlKCgpID0+ICh7IGVycm9yTWVzc2FnZTogZmFsc2UgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih7IGVycm9yTWVzc2FnZTogcmVzdWx0LmRlbGV0ZUN1c3RvbWVyR3JvdXAubWVzc2FnZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdC5lcnJvck1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihyZXN1bHQuZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS1kZWxldGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDdXN0b21lckdyb3VwJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktZGVsZXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ3VzdG9tZXJHcm91cCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZShncm91cDogSXRlbU9mPEdldEN1c3RvbWVyR3JvdXBzUXVlcnksICdjdXN0b21lckdyb3Vwcyc+KSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoQ3VzdG9tZXJHcm91cERldGFpbERpYWxvZ0NvbXBvbmVudCwgeyBsb2NhbHM6IHsgZ3JvdXAgfSB9KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT5cclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRhdGFTZXJ2aWNlLmN1c3RvbWVyLnVwZGF0ZUN1c3RvbWVyR3JvdXAoeyBpZDogZ3JvdXAuaWQsIC4uLnJlc3VsdCB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEVNUFRZLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDdXN0b21lckdyb3VwJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0N1c3RvbWVyR3JvdXAnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZU1lbWJlcnMoKSB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcyB9O1xyXG4gICAgICAgIGRlbGV0ZSBwYXJhbXMuY29udGVudHM7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLycsIHBhcmFtc10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgcXVlcnlQYXJhbXNIYW5kbGluZzogJ3ByZXNlcnZlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUb0dyb3VwKGdyb3VwOiBOb25OdWxsYWJsZTxHZXRDdXN0b21lckdyb3VwV2l0aEN1c3RvbWVyc1F1ZXJ5WydjdXN0b21lckdyb3VwJ10+KSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoQWRkQ3VzdG9tZXJUb0dyb3VwRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICBsb2NhbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBncm91cCxcclxuICAgICAgICAgICAgICAgICAgICByb3V0ZTogdGhpcy5yb3V0ZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzaXplOiAnbWQnLFxyXG4gICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogJ3RvcCcsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGN1c3RvbWVySWRzID0+XHJcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tZXJJZHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRhdGFTZXJ2aWNlLmN1c3RvbWVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDdXN0b21lcnNUb0dyb3VwKGdyb3VwLmlkLCBjdXN0b21lcklkcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwVG8oY3VzdG9tZXJJZHMpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IEVNUFRZLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXyhgY3VzdG9tZXIuYWRkLWN1c3RvbWVycy10by1ncm91cC1zdWNjZXNzYCksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tZXJDb3VudDogcmVzdWx0Lmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBOYW1lOiBncm91cC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEFjdGl2ZUdyb3VwTWVtYmVycyQubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDdXN0b21lcklkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRnJvbUdyb3VwKFxyXG4gICAgICAgIGdyb3VwOiBOb25OdWxsYWJsZTxHZXRDdXN0b21lckdyb3VwV2l0aEN1c3RvbWVyc1F1ZXJ5WydjdXN0b21lckdyb3VwJ10+LFxyXG4gICAgICAgIGN1c3RvbWVySWRzOiBzdHJpbmdbXSxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY3VzdG9tZXIucmVtb3ZlQ3VzdG9tZXJzRnJvbUdyb3VwKGdyb3VwLmlkLCBjdXN0b21lcklkcykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oYGN1c3RvbWVyLnJlbW92ZS1jdXN0b21lcnMtZnJvbS1ncm91cC1zdWNjZXNzYCksIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXN0b21lckNvdW50OiBjdXN0b21lcklkcy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBOYW1lOiBncm91cC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hBY3RpdmVHcm91cE1lbWJlcnMkLm5leHQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDdXN0b21lcklkcyA9IFtdO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItYWN0aW9uLWJhcj5cclxuICAgIDx2ZHItYWItbGVmdD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICBuYW1lPVwiZW1haWxTZWFyY2hUZXJtXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlYXJjaFRlcm1cIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2N1c3RvbWVyLnNlYXJjaC1ieS1ncm91cC1uYW1lJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0XCJcclxuICAgICAgICAvPlxyXG4gICAgPC92ZHItYWItbGVmdD5cclxuICAgIDx2ZHItYWItcmlnaHQ+XHJcbiAgICAgICAgPHZkci1hY3Rpb24tYmFyLWl0ZW1zIGxvY2F0aW9uSWQ9XCJjdXN0b21lci1ncm91cC1saXN0XCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKnZkcklmUGVybWlzc2lvbnM9XCInQ3JlYXRlQ3VzdG9tZXJHcm91cCdcIiAoY2xpY2spPVwiY3JlYXRlKClcIj5cclxuICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgIHt7ICdjdXN0b21lci5jcmVhdGUtbmV3LWN1c3RvbWVyLWdyb3VwJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC92ZHItYWItcmlnaHQ+XHJcbjwvdmRyLWFjdGlvbi1iYXI+XHJcbjxkaXYgY2xhc3M9XCJncm91cC13cmFwcGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtbGlzdFwiPlxyXG4gICAgICAgIDx2ZHItZGF0YS10YWJsZVxyXG4gICAgICAgICAgICBbY2xhc3MuZXhwYW5kZWRdPVwiYWN0aXZlR3JvdXAkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2UkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJzZXRQYWdlTnVtYmVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAoaXRlbXNQZXJQYWdlQ2hhbmdlKT1cInNldEl0ZW1zUGVyUGFnZSgkZXZlbnQpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtZ3JvdXA9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJsZWZ0IGFsaWduLW1pZGRsZVwiIFtjbGFzcy5hY3RpdmVdPVwiZ3JvdXAuaWQgPT09IGFjdGl2ZUdyb3VwSWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWVudGl0eS1pbmZvIFtlbnRpdHldPVwiZ3JvdXBcIj48L3Zkci1lbnRpdHktaW5mbz5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJsZWZ0IGFsaWduLW1pZGRsZVwiIFtjbGFzcy5hY3RpdmVdPVwiZ3JvdXAuaWQgPT09IGFjdGl2ZUdyb3VwSWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWNoaXAgW2NvbG9yRnJvbV09XCJncm91cC5pZFwiPnt7IGdyb3VwLm5hbWUgfX08L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImxlZnQgYWxpZ24tbWlkZGxlXCIgW2NsYXNzLmFjdGl2ZV09XCJncm91cC5pZCA9PT0gYWN0aXZlR3JvdXBJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnLi8nLCB7IGNvbnRlbnRzOiBncm91cC5pZCB9XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc9XCJwcmVzZXJ2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJ2aWV3LWxpc3RcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnY3VzdG9tZXIudmlldy1ncm91cC1tZW1iZXJzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJyaWdodCBhbGlnbi1taWRkbGVcIiBbY2xhc3MuYWN0aXZlXT1cImdyb3VwLmlkID09PSBhY3RpdmVHcm91cElkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc21cIiAoY2xpY2spPVwidXBkYXRlKGdyb3VwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJlZGl0XCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5lZGl0JyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBbY2xhc3MuYWN0aXZlXT1cImdyb3VwLmlkID09PSBhY3RpdmVHcm91cElkXCIgY2xhc3M9XCJhbGlnbi1taWRkbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc21cIiB2ZHJEcm9wZG93blRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmFjdGlvbnMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJjYXJldCBkb3duXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24tbWVudSB2ZHJQb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlKGdyb3VwLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEoJ0RlbGV0ZUN1c3RvbWVyR3JvdXAnIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInRyYXNoXCIgY2xhc3M9XCJpcy1kYW5nZXJcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24uZGVsZXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvdmRyLWRhdGEtdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlQbGFjZWhvbGRlcj5cclxuICAgICAgICA8dmRyLWVtcHR5LXBsYWNlaG9sZGVyPjwvdmRyLWVtcHR5LXBsYWNlaG9sZGVyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJncm91cC1tZW1iZXJzXCIgW2NsYXNzLmV4cGFuZGVkXT1cImFjdGl2ZUdyb3VwJCB8IGFzeW5jXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZUdyb3VwJCB8IGFzeW5jIGFzIGFjdGl2ZUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlLXJvd1wiPnt7IGFjdGl2ZUdyb3VwLm5hbWUgfX0gKHt7IG1lbWJlcnNUb3RhbCQgfCBhc3luYyB9fSk8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZS1idXR0b25cIiAoY2xpY2spPVwiY2xvc2VNZW1iZXJzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJjbG9zZVwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sc1wiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duVHJpZ2dlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VsZWN0ZWRDdXN0b21lcklkcy5sZW5ndGggPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi53aXRoLXNlbGVjdGVkJyB8IHRyYW5zbGF0ZTogeyBjb3VudDogc2VsZWN0ZWRDdXN0b21lcklkcy5sZW5ndGggfSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJjYXJldCBkb3duXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duLW1lbnUgdmRyUG9zaXRpb249XCJib3R0b20tcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRlbGV0ZS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZyb21Hcm91cChhY3RpdmVHcm91cCwgc2VsZWN0ZWRDdXN0b21lcklkcylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmRyRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISgnVXBkYXRlQ3VzdG9tZXJHcm91cCcgfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInRyYXNoXCIgY2xhc3M9XCJpcy1kYW5nZXJcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2N1c3RvbWVyLnJlbW92ZS1mcm9tLWdyb3VwJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bi1tZW51PlxyXG4gICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtXCIgKGNsaWNrKT1cImFkZFRvR3JvdXAoYWN0aXZlR3JvdXApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ2N1c3RvbWVyLmFkZC1jdXN0b21lcnMtdG8tZ3JvdXAnIHwgdHJhbnNsYXRlOiB7IGdyb3VwTmFtZTogYWN0aXZlR3JvdXAubmFtZSB9IH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDx2ZHItY3VzdG9tZXItZ3JvdXAtbWVtYmVyLWxpc3RcclxuICAgICAgICAgICAgICAgIFttZW1iZXJzXT1cIm1lbWJlcnMkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgW3JvdXRlXT1cInJvdXRlXCJcclxuICAgICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cIm1lbWJlcnNUb3RhbCQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRNZW1iZXJJZHNdPVwic2VsZWN0ZWRDdXN0b21lcklkc1wiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGVkQ3VzdG9tZXJJZHMgPSAkZXZlbnRcIlxyXG4gICAgICAgICAgICAgICAgKGZldGNoUGFyYW1zQ2hhbmdlKT1cImZldGNoR3JvdXBNZW1iZXJzJC5uZXh0KCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC92ZHItY3VzdG9tZXItZ3JvdXAtbWVtYmVyLWxpc3Q+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -73,7 +73,7 @@ export class CustomerGroupMemberListComponent {
73
73
  this.selectionChange.emit(this.members.map(v => v.id));
74
74
  }
75
75
  }
76
- toggleSelectMember(member) {
76
+ toggleSelectMember({ item: member }) {
77
77
  if (this.selectedMemberIds.includes(member.id)) {
78
78
  this.selectionChange.emit(this.selectedMemberIds.filter(id => id !== member.id));
79
79
  }
@@ -83,7 +83,7 @@ export class CustomerGroupMemberListComponent {
83
83
  }
84
84
  }
85
85
  CustomerGroupMemberListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CustomerGroupMemberListComponent, deps: [{ token: i1.Router }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Component });
86
- CustomerGroupMemberListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CustomerGroupMemberListComponent, selector: "vdr-customer-group-member-list", inputs: { members: "members", totalItems: "totalItems", route: "route", selectedMemberIds: "selectedMemberIds" }, outputs: { selectionChange: "selectionChange", fetchParamsChange: "fetchParamsChange" }, ngImport: i0, template: "<input\r\n type=\"text\"\r\n name=\"searchTerm\"\r\n [formControl]=\"filterTermControl\"\r\n [placeholder]=\"'customer.search-customers-by-email' | translate\"\r\n class=\"search-input\"\r\n/>\r\n\r\n<vdr-data-table\r\n [items]=\"members\"\r\n [itemsPerPage]=\"membersItemsPerPage$ | async\"\r\n [totalItems]=\"totalItems\"\r\n [currentPage]=\"membersCurrentPage$ | async\"\r\n (pageChange)=\"setContentsPageNumber($event)\"\r\n (itemsPerPageChange)=\"setContentsItemsPerPage($event)\"\r\n [allSelected]=\"areAllSelected()\"\r\n [isRowSelectedFn]=\"('UpdateCustomerGroup' | hasPermission) && isMemberSelected\"\r\n (rowSelectChange)=\"toggleSelectMember($event)\"\r\n (allSelectChange)=\"toggleSelectAll()\"\r\n>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-customer=\"item\">\r\n <td class=\"left align-middle\">\r\n {{ customer.title }} {{ customer.firstName }} {{ customer.lastName }}\r\n </td>\r\n <td class=\"left align-middle\">{{ customer.emailAddress }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['/customer', 'customers', customer.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n", styles: [""], components: [{ type: i2.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "allSelected", "isRowSelectedFn", "emptyStateLabel"], outputs: ["allSelectChange", "rowSelectChange", "pageChange", "itemsPerPageChange"] }, { type: i2.DataTableColumnComponent, selector: "vdr-dt-column", inputs: ["expand"] }, { type: i2.TableRowActionComponent, selector: "vdr-table-row-action", inputs: ["linkTo", "label", "iconShape", "disabled"] }], directives: [{ type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], pipes: { "translate": i4.TranslatePipe, "async": i5.AsyncPipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
86
+ CustomerGroupMemberListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CustomerGroupMemberListComponent, selector: "vdr-customer-group-member-list", inputs: { members: "members", totalItems: "totalItems", route: "route", selectedMemberIds: "selectedMemberIds" }, outputs: { selectionChange: "selectionChange", fetchParamsChange: "fetchParamsChange" }, ngImport: i0, template: "<input\r\n type=\"text\"\r\n name=\"searchTerm\"\r\n [formControl]=\"filterTermControl\"\r\n [placeholder]=\"'customer.search-customers-by-email' | translate\"\r\n class=\"search-input\"\r\n/>\r\n\r\n<vdr-data-table\r\n [items]=\"members\"\r\n [itemsPerPage]=\"membersItemsPerPage$ | async\"\r\n [totalItems]=\"totalItems\"\r\n [currentPage]=\"membersCurrentPage$ | async\"\r\n (pageChange)=\"setContentsPageNumber($event)\"\r\n (itemsPerPageChange)=\"setContentsItemsPerPage($event)\"\r\n [allSelected]=\"areAllSelected()\"\r\n [isRowSelectedFn]=\"('UpdateCustomerGroup' | hasPermission) && isMemberSelected\"\r\n (rowSelectChange)=\"toggleSelectMember($event)\"\r\n (allSelectChange)=\"toggleSelectAll()\"\r\n>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-customer=\"item\">\r\n <td class=\"left align-middle\">\r\n {{ customer.title }} {{ customer.firstName }} {{ customer.lastName }}\r\n </td>\r\n <td class=\"left align-middle\">{{ customer.emailAddress }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['/customer', 'customers', customer.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n", styles: [""], components: [{ type: i2.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "selectionManager", "allSelected", "isRowSelectedFn"], outputs: ["pageChange", "itemsPerPageChange", "allSelectChange", "rowSelectChange"] }, { type: i2.DataTableColumnComponent, selector: "vdr-dt-column", inputs: ["expand"] }, { type: i2.TableRowActionComponent, selector: "vdr-table-row-action", inputs: ["linkTo", "label", "iconShape", "disabled"] }], directives: [{ type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], pipes: { "translate": i4.TranslatePipe, "async": i5.AsyncPipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
87
87
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CustomerGroupMemberListComponent, decorators: [{
88
88
  type: Component,
89
89
  args: [{ selector: 'vdr-customer-group-member-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<input\r\n type=\"text\"\r\n name=\"searchTerm\"\r\n [formControl]=\"filterTermControl\"\r\n [placeholder]=\"'customer.search-customers-by-email' | translate\"\r\n class=\"search-input\"\r\n/>\r\n\r\n<vdr-data-table\r\n [items]=\"members\"\r\n [itemsPerPage]=\"membersItemsPerPage$ | async\"\r\n [totalItems]=\"totalItems\"\r\n [currentPage]=\"membersCurrentPage$ | async\"\r\n (pageChange)=\"setContentsPageNumber($event)\"\r\n (itemsPerPageChange)=\"setContentsItemsPerPage($event)\"\r\n [allSelected]=\"areAllSelected()\"\r\n [isRowSelectedFn]=\"('UpdateCustomerGroup' | hasPermission) && isMemberSelected\"\r\n (rowSelectChange)=\"toggleSelectMember($event)\"\r\n (allSelectChange)=\"toggleSelectAll()\"\r\n>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column [expand]=\"true\">{{ 'customer.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-customer=\"item\">\r\n <td class=\"left align-middle\">\r\n {{ customer.title }} {{ customer.firstName }} {{ customer.lastName }}\r\n </td>\r\n <td class=\"left align-middle\">{{ customer.emailAddress }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['/customer', 'customers', customer.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n", styles: [""] }]
@@ -100,4 +100,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
100
100
  }], fetchParamsChange: [{
101
101
  type: Output
102
102
  }] } });
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXItZ3JvdXAtbWVtYmVyLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jdXN0b21lci9zcmMvY29tcG9uZW50cy9jdXN0b21lci1ncm91cC1tZW1iZXItbGlzdC9jdXN0b21lci1ncm91cC1tZW1iZXItbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2N1c3RvbWVyL3NyYy9jb21wb25lbnRzL2N1c3RvbWVyLWdyb3VwLW1lbWJlci1saXN0L2N1c3RvbWVyLWdyb3VwLW1lbWJlci1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUk3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQWNwRyxNQUFNLE9BQU8sZ0NBQWdDO0lBZ0J6QyxZQUFvQixNQUFjLEVBQVUsV0FBd0I7UUFBaEQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBVjNELHNCQUFpQixHQUFhLEVBQUUsQ0FBQztRQUNoQyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFDL0Msc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQWtDLENBQUM7UUFJakYsc0JBQWlCLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMsYUFB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QyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNyRTtJQUNMLENBQUM7OzZIQWxHUSxnQ0FBZ0M7aUhBQWhDLGdDQUFnQyxpUkM1QjdDLHFrREFxQ0E7MkZEVGEsZ0NBQWdDO2tCQU41QyxTQUFTOytCQUNJLGdDQUFnQyxtQkFHekIsdUJBQXVCLENBQUMsTUFBTTt1SEFHdEMsT0FBTztzQkFBZixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENvbXBvbmVudCxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIElucHV0LFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEN1c3RvbWVyLCBEYXRhU2VydmljZSB9IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBab25lTWVtYmVyIH0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvc2V0dGluZ3MnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzdGFydFdpdGgsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21lckdyb3VwTWVtYmVyRmV0Y2hQYXJhbXMge1xyXG4gICAgc2tpcDogbnVtYmVyO1xyXG4gICAgdGFrZTogbnVtYmVyO1xyXG4gICAgZmlsdGVyVGVybTogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWN1c3RvbWVyLWdyb3VwLW1lbWJlci1saXN0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jdXN0b21lci1ncm91cC1tZW1iZXItbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jdXN0b21lci1ncm91cC1tZW1iZXItbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21lckdyb3VwTWVtYmVyTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgpIG1lbWJlcnM6IEFycmF5PFxyXG4gICAgICAgIFBpY2s8Q3VzdG9tZXIsICdpZCcgfCAnY3JlYXRlZEF0JyB8ICd1cGRhdGVkQXQnIHwgJ3RpdGxlJyB8ICdmaXJzdE5hbWUnIHwgJ2xhc3ROYW1lJyB8ICdlbWFpbEFkZHJlc3MnPlxyXG4gICAgPjtcclxuICAgIEBJbnB1dCgpIHRvdGFsSXRlbXM6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkTWVtYmVySWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XHJcbiAgICBAT3V0cHV0KCkgZmV0Y2hQYXJhbXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEN1c3RvbWVyR3JvdXBNZW1iZXJGZXRjaFBhcmFtcz4oKTtcclxuXHJcbiAgICBtZW1iZXJzSXRlbXNQZXJQYWdlJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gICAgbWVtYmVyc0N1cnJlbnRQYWdlJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gICAgZmlsdGVyVGVybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gICAgcHJpdmF0ZSByZWZyZXNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLm1lbWJlcnNDdXJyZW50UGFnZSQgPSB0aGlzLnJvdXRlLnBhcmFtTWFwLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcChxcG0gPT4gcXBtLmdldCgnbWVtYmVyc1BhZ2UnKSksXHJcbiAgICAgICAgICAgIG1hcChwYWdlID0+ICghcGFnZSA/IDEgOiArcGFnZSkpLFxyXG4gICAgICAgICAgICBzdGFydFdpdGgoMSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5tZW1iZXJzSXRlbXNQZXJQYWdlJCA9IHRoaXMucm91dGUucGFyYW1NYXAucGlwZShcclxuICAgICAgICAgICAgbWFwKHFwbSA9PiBxcG0uZ2V0KCdtZW1iZXJzUGVyUGFnZScpKSxcclxuICAgICAgICAgICAgbWFwKHBlclBhZ2UgPT4gKCFwZXJQYWdlID8gMTAgOiArcGVyUGFnZSkpLFxyXG4gICAgICAgICAgICBzdGFydFdpdGgoMTApLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbHRlclRlcm0kID0gdGhpcy5maWx0ZXJUZXJtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXHJcbiAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnNldENvbnRlbnRzUGFnZU51bWJlcigxKSksXHJcbiAgICAgICAgICAgIHN0YXJ0V2l0aCgnJyksXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLm1lbWJlcnNDdXJyZW50UGFnZSQsIHRoaXMubWVtYmVyc0l0ZW1zUGVyUGFnZSQsIGZpbHRlclRlcm0kLCB0aGlzLnJlZnJlc2gkKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFtjdXJyZW50UGFnZSwgaXRlbXNQZXJQYWdlLCBmaWx0ZXJUZXJtXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGFrZSA9IGl0ZW1zUGVyUGFnZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNraXAgPSAoY3VycmVudFBhZ2UgLSAxKSAqIGl0ZW1zUGVyUGFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hQYXJhbXNDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVGVybSxcclxuICAgICAgICAgICAgICAgICAgICBza2lwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRha2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldENvbnRlbnRzUGFnZU51bWJlcihwYWdlOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLnNldFBhcmFtKCdtZW1iZXJzUGFnZScsIHBhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldENvbnRlbnRzSXRlbXNQZXJQYWdlKHBlclBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuc2V0UGFyYW0oJ21lbWJlcnNQZXJQYWdlJywgcGVyUGFnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaCgpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2gkLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRQYXJhbShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nLCB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLCBba2V5XTogdmFsdWUgfV0sIHtcclxuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhcmVBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5tZW1iZXJzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTWVtYmVySWRzLmxlbmd0aCA9PT0gdGhpcy5tZW1iZXJzLmxlbmd0aDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVNlbGVjdEFsbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5hcmVBbGxTZWxlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoW10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5tZW1iZXJzLm1hcCh2ID0+IHYuaWQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlU2VsZWN0TWVtYmVyKG1lbWJlcjogWm9uZU1lbWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVtYmVySWRzLmluY2x1ZGVzKG1lbWJlci5pZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkTWVtYmVySWRzLmZpbHRlcihpZCA9PiBpZCAhPT0gbWVtYmVyLmlkKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChbLi4udGhpcy5zZWxlY3RlZE1lbWJlcklkcywgbWVtYmVyLmlkXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzTWVtYmVyU2VsZWN0ZWQgPSAobWVtYmVyOiBab25lTWVtYmVyKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIC0xIDwgdGhpcy5zZWxlY3RlZE1lbWJlcklkcy5pbmRleE9mKG1lbWJlci5pZCk7XHJcbiAgICB9O1xyXG59XHJcbiIsIjxpbnB1dFxyXG4gICAgdHlwZT1cInRleHRcIlxyXG4gICAgbmFtZT1cInNlYXJjaFRlcm1cIlxyXG4gICAgW2Zvcm1Db250cm9sXT1cImZpbHRlclRlcm1Db250cm9sXCJcclxuICAgIFtwbGFjZWhvbGRlcl09XCInY3VzdG9tZXIuc2VhcmNoLWN1c3RvbWVycy1ieS1lbWFpbCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxyXG4vPlxyXG5cclxuPHZkci1kYXRhLXRhYmxlXHJcbiAgICBbaXRlbXNdPVwibWVtYmVyc1wiXHJcbiAgICBbaXRlbXNQZXJQYWdlXT1cIm1lbWJlcnNJdGVtc1BlclBhZ2UkIHwgYXN5bmNcIlxyXG4gICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiXHJcbiAgICBbY3VycmVudFBhZ2VdPVwibWVtYmVyc0N1cnJlbnRQYWdlJCB8IGFzeW5jXCJcclxuICAgIChwYWdlQ2hhbmdlKT1cInNldENvbnRlbnRzUGFnZU51bWJlcigkZXZlbnQpXCJcclxuICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwic2V0Q29udGVudHNJdGVtc1BlclBhZ2UoJGV2ZW50KVwiXHJcbiAgICBbYWxsU2VsZWN0ZWRdPVwiYXJlQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICBbaXNSb3dTZWxlY3RlZEZuXT1cIignVXBkYXRlQ3VzdG9tZXJHcm91cCcgfCBoYXNQZXJtaXNzaW9uKSAmJiBpc01lbWJlclNlbGVjdGVkXCJcclxuICAgIChyb3dTZWxlY3RDaGFuZ2UpPVwidG9nZ2xlU2VsZWN0TWVtYmVyKCRldmVudClcIlxyXG4gICAgKGFsbFNlbGVjdENoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoKVwiXHJcbj5cclxuICAgIDx2ZHItZHQtY29sdW1uIFtleHBhbmRdPVwidHJ1ZVwiPnt7ICdjdXN0b21lci5uYW1lJyB8IHRyYW5zbGF0ZSB9fTwvdmRyLWR0LWNvbHVtbj5cclxuICAgIDx2ZHItZHQtY29sdW1uIFtleHBhbmRdPVwidHJ1ZVwiPnt7ICdjdXN0b21lci5lbWFpbC1hZGRyZXNzJyB8IHRyYW5zbGF0ZSB9fTwvdmRyLWR0LWNvbHVtbj5cclxuICAgIDx2ZHItZHQtY29sdW1uPjwvdmRyLWR0LWNvbHVtbj5cclxuICAgIDxuZy10ZW1wbGF0ZSBsZXQtY3VzdG9tZXI9XCJpdGVtXCI+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibGVmdCBhbGlnbi1taWRkbGVcIj5cclxuICAgICAgICAgICAge3sgY3VzdG9tZXIudGl0bGUgfX0ge3sgY3VzdG9tZXIuZmlyc3ROYW1lIH19IHt7IGN1c3RvbWVyLmxhc3ROYW1lIH19XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQgY2xhc3M9XCJsZWZ0IGFsaWduLW1pZGRsZVwiPnt7IGN1c3RvbWVyLmVtYWlsQWRkcmVzcyB9fTwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwicmlnaHQgYWxpZ24tbWlkZGxlXCI+XHJcbiAgICAgICAgICAgIDx2ZHItdGFibGUtcm93LWFjdGlvblxyXG4gICAgICAgICAgICAgICAgaWNvblNoYXBlPVwiZWRpdFwiXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NvbW1vbi5lZGl0JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbbGlua1RvXT1cIlsnL2N1c3RvbWVyJywgJ2N1c3RvbWVycycsIGN1c3RvbWVyLmlkXVwiXHJcbiAgICAgICAgICAgID48L3Zkci10YWJsZS1yb3ctYWN0aW9uPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L3Zkci1kYXRhLXRhYmxlPlxyXG4iXX0=
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXItZ3JvdXAtbWVtYmVyLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jdXN0b21lci9zcmMvY29tcG9uZW50cy9jdXN0b21lci1ncm91cC1tZW1iZXItbGlzdC9jdXN0b21lci1ncm91cC1tZW1iZXItbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2N1c3RvbWVyL3NyYy9jb21wb25lbnRzL2N1c3RvbWVyLWdyb3VwLW1lbWJlci1saXN0L2N1c3RvbWVyLWdyb3VwLW1lbWJlci1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQW1CcEcsTUFBTSxPQUFPLGdDQUFnQztJQWN6QyxZQUFvQixNQUFjLEVBQVUsV0FBd0I7UUFBaEQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBVjNELHNCQUFpQixHQUFhLEVBQUUsQ0FBQztRQUNoQyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFDL0Msc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQWtDLENBQUM7UUFJakYsc0JBQWlCLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMsYUFB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QyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3JFO0lBQ0wsQ0FBQzs7NkhBaEdRLGdDQUFnQztpSEFBaEMsZ0NBQWdDLGlSQ2hDN0MscWtEQXFDQTsyRkRMYSxnQ0FBZ0M7a0JBTjVDLFNBQVM7K0JBQ0ksZ0NBQWdDLG1CQUd6Qix1QkFBdUIsQ0FBQyxNQUFNO3VIQUd0QyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ3VzdG9tZXIsIERhdGFTZXJ2aWNlIH0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbWVyR3JvdXBNZW1iZXJGZXRjaFBhcmFtcyB7XHJcbiAgICBza2lwOiBudW1iZXI7XHJcbiAgICB0YWtlOiBudW1iZXI7XHJcbiAgICBmaWx0ZXJUZXJtOiBzdHJpbmc7XHJcbn1cclxuXHJcbnR5cGUgQ3VzdG9tZXJHcm91cE1lbWJlciA9IFBpY2s8XHJcbiAgICBDdXN0b21lcixcclxuICAgICdpZCcgfCAnY3JlYXRlZEF0JyB8ICd1cGRhdGVkQXQnIHwgJ3RpdGxlJyB8ICdmaXJzdE5hbWUnIHwgJ2xhc3ROYW1lJyB8ICdlbWFpbEFkZHJlc3MnXHJcbj47XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWN1c3RvbWVyLWdyb3VwLW1lbWJlci1saXN0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jdXN0b21lci1ncm91cC1tZW1iZXItbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jdXN0b21lci1ncm91cC1tZW1iZXItbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21lckdyb3VwTWVtYmVyTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgpIG1lbWJlcnM6IEN1c3RvbWVyR3JvdXBNZW1iZXJbXTtcclxuICAgIEBJbnB1dCgpIHRvdGFsSXRlbXM6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkTWVtYmVySWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XHJcbiAgICBAT3V0cHV0KCkgZmV0Y2hQYXJhbXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEN1c3RvbWVyR3JvdXBNZW1iZXJGZXRjaFBhcmFtcz4oKTtcclxuXHJcbiAgICBtZW1iZXJzSXRlbXNQZXJQYWdlJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gICAgbWVtYmVyc0N1cnJlbnRQYWdlJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gICAgZmlsdGVyVGVybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gICAgcHJpdmF0ZSByZWZyZXNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLm1lbWJlcnNDdXJyZW50UGFnZSQgPSB0aGlzLnJvdXRlLnBhcmFtTWFwLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcChxcG0gPT4gcXBtLmdldCgnbWVtYmVyc1BhZ2UnKSksXHJcbiAgICAgICAgICAgIG1hcChwYWdlID0+ICghcGFnZSA/IDEgOiArcGFnZSkpLFxyXG4gICAgICAgICAgICBzdGFydFdpdGgoMSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5tZW1iZXJzSXRlbXNQZXJQYWdlJCA9IHRoaXMucm91dGUucGFyYW1NYXAucGlwZShcclxuICAgICAgICAgICAgbWFwKHFwbSA9PiBxcG0uZ2V0KCdtZW1iZXJzUGVyUGFnZScpKSxcclxuICAgICAgICAgICAgbWFwKHBlclBhZ2UgPT4gKCFwZXJQYWdlID8gMTAgOiArcGVyUGFnZSkpLFxyXG4gICAgICAgICAgICBzdGFydFdpdGgoMTApLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbHRlclRlcm0kID0gdGhpcy5maWx0ZXJUZXJtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXHJcbiAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnNldENvbnRlbnRzUGFnZU51bWJlcigxKSksXHJcbiAgICAgICAgICAgIHN0YXJ0V2l0aCgnJyksXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLm1lbWJlcnNDdXJyZW50UGFnZSQsIHRoaXMubWVtYmVyc0l0ZW1zUGVyUGFnZSQsIGZpbHRlclRlcm0kLCB0aGlzLnJlZnJlc2gkKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFtjdXJyZW50UGFnZSwgaXRlbXNQZXJQYWdlLCBmaWx0ZXJUZXJtXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGFrZSA9IGl0ZW1zUGVyUGFnZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNraXAgPSAoY3VycmVudFBhZ2UgLSAxKSAqIGl0ZW1zUGVyUGFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hQYXJhbXNDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVGVybSxcclxuICAgICAgICAgICAgICAgICAgICBza2lwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRha2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldENvbnRlbnRzUGFnZU51bWJlcihwYWdlOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLnNldFBhcmFtKCdtZW1iZXJzUGFnZScsIHBhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldENvbnRlbnRzSXRlbXNQZXJQYWdlKHBlclBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuc2V0UGFyYW0oJ21lbWJlcnNQZXJQYWdlJywgcGVyUGFnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaCgpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2gkLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRQYXJhbShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nLCB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLCBba2V5XTogdmFsdWUgfV0sIHtcclxuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhcmVBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5tZW1iZXJzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTWVtYmVySWRzLmxlbmd0aCA9PT0gdGhpcy5tZW1iZXJzLmxlbmd0aDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVNlbGVjdEFsbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5hcmVBbGxTZWxlY3RlZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoW10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5tZW1iZXJzLm1hcCh2ID0+IHYuaWQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlU2VsZWN0TWVtYmVyKHsgaXRlbTogbWVtYmVyIH06IHsgaXRlbTogeyBpZDogc3RyaW5nIH0gfSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVtYmVySWRzLmluY2x1ZGVzKG1lbWJlci5pZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkTWVtYmVySWRzLmZpbHRlcihpZCA9PiBpZCAhPT0gbWVtYmVyLmlkKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChbLi4udGhpcy5zZWxlY3RlZE1lbWJlcklkcywgbWVtYmVyLmlkXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzTWVtYmVyU2VsZWN0ZWQgPSAobWVtYmVyOiB7IGlkOiBzdHJpbmcgfSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIHJldHVybiAtMSA8IHRoaXMuc2VsZWN0ZWRNZW1iZXJJZHMuaW5kZXhPZihtZW1iZXIuaWQpO1xyXG4gICAgfTtcclxufVxyXG4iLCI8aW5wdXRcclxuICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgIG5hbWU9XCJzZWFyY2hUZXJtXCJcclxuICAgIFtmb3JtQ29udHJvbF09XCJmaWx0ZXJUZXJtQ29udHJvbFwiXHJcbiAgICBbcGxhY2Vob2xkZXJdPVwiJ2N1c3RvbWVyLnNlYXJjaC1jdXN0b21lcnMtYnktZW1haWwnIHwgdHJhbnNsYXRlXCJcclxuICAgIGNsYXNzPVwic2VhcmNoLWlucHV0XCJcclxuLz5cclxuXHJcbjx2ZHItZGF0YS10YWJsZVxyXG4gICAgW2l0ZW1zXT1cIm1lbWJlcnNcIlxyXG4gICAgW2l0ZW1zUGVyUGFnZV09XCJtZW1iZXJzSXRlbXNQZXJQYWdlJCB8IGFzeW5jXCJcclxuICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXNcIlxyXG4gICAgW2N1cnJlbnRQYWdlXT1cIm1lbWJlcnNDdXJyZW50UGFnZSQgfCBhc3luY1wiXHJcbiAgICAocGFnZUNoYW5nZSk9XCJzZXRDb250ZW50c1BhZ2VOdW1iZXIoJGV2ZW50KVwiXHJcbiAgICAoaXRlbXNQZXJQYWdlQ2hhbmdlKT1cInNldENvbnRlbnRzSXRlbXNQZXJQYWdlKCRldmVudClcIlxyXG4gICAgW2FsbFNlbGVjdGVkXT1cImFyZUFsbFNlbGVjdGVkKClcIlxyXG4gICAgW2lzUm93U2VsZWN0ZWRGbl09XCIoJ1VwZGF0ZUN1c3RvbWVyR3JvdXAnIHwgaGFzUGVybWlzc2lvbikgJiYgaXNNZW1iZXJTZWxlY3RlZFwiXHJcbiAgICAocm93U2VsZWN0Q2hhbmdlKT1cInRvZ2dsZVNlbGVjdE1lbWJlcigkZXZlbnQpXCJcclxuICAgIChhbGxTZWxlY3RDaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKClcIlxyXG4+XHJcbiAgICA8dmRyLWR0LWNvbHVtbiBbZXhwYW5kXT1cInRydWVcIj57eyAnY3VzdG9tZXIubmFtZScgfCB0cmFuc2xhdGUgfX08L3Zkci1kdC1jb2x1bW4+XHJcbiAgICA8dmRyLWR0LWNvbHVtbiBbZXhwYW5kXT1cInRydWVcIj57eyAnY3VzdG9tZXIuZW1haWwtYWRkcmVzcycgfCB0cmFuc2xhdGUgfX08L3Zkci1kdC1jb2x1bW4+XHJcbiAgICA8dmRyLWR0LWNvbHVtbj48L3Zkci1kdC1jb2x1bW4+XHJcbiAgICA8bmctdGVtcGxhdGUgbGV0LWN1c3RvbWVyPVwiaXRlbVwiPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cImxlZnQgYWxpZ24tbWlkZGxlXCI+XHJcbiAgICAgICAgICAgIHt7IGN1c3RvbWVyLnRpdGxlIH19IHt7IGN1c3RvbWVyLmZpcnN0TmFtZSB9fSB7eyBjdXN0b21lci5sYXN0TmFtZSB9fVxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibGVmdCBhbGlnbi1taWRkbGVcIj57eyBjdXN0b21lci5lbWFpbEFkZHJlc3MgfX08L3RkPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cInJpZ2h0IGFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgICA8dmRyLXRhYmxlLXJvdy1hY3Rpb25cclxuICAgICAgICAgICAgICAgIGljb25TaGFwZT1cImVkaXRcIlxyXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjb21tb24uZWRpdCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW2xpbmtUb109XCJbJy9jdXN0b21lcicsICdjdXN0b21lcnMnLCBjdXN0b21lci5pZF1cIlxyXG4gICAgICAgICAgICA+PC92ZHItdGFibGUtcm93LWFjdGlvbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuPC92ZHItZGF0YS10YWJsZT5cclxuIl19
@@ -65,7 +65,7 @@ export class CustomerHistoryComponent {
65
65
  }
66
66
  }
67
67
  CustomerHistoryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CustomerHistoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
68
- CustomerHistoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CustomerHistoryComponent, selector: "vdr-customer-history", inputs: { customer: "customer", history: "history" }, outputs: { addNote: "addNote", updateNote: "updateNote", deleteNote: "deleteNote" }, ngImport: i0, template: "<h4>{{ 'customer.customer-history' | translate }}</h4>\r\n<div class=\"entry-list\">\r\n <vdr-timeline-entry iconShape=\"note\" displayType=\"muted\" *vdrIfPermissions=\"'UpdateCustomer'\">\r\n <div class=\"note-entry\">\r\n <textarea [(ngModel)]=\"note\" name=\"note\" class=\"note\"></textarea>\r\n <button class=\"btn btn-secondary\" [disabled]=\"!note\" (click)=\"addNoteToCustomer()\">\r\n {{ 'order.add-note' | translate }}\r\n </button>\r\n </div>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry\r\n *ngFor=\"let entry of history\"\r\n [displayType]=\"getDisplayType(entry)\"\r\n [iconShape]=\"getTimelineIcon(entry)\"\r\n [createdAt]=\"entry.createdAt\"\r\n [name]=\"getName(entry)\"\r\n [featured]=\"isFeatured(entry)\"\r\n >\r\n <ng-container [ngSwitch]=\"entry.type\">\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_REGISTERED\">\r\n <div class=\"title\">\r\n {{ 'customer.history-customer-registered' | translate }}\r\n </div>\r\n <ng-container *ngIf=\"entry.data.strategy === 'native'; else namedStrategy\">\r\n {{ 'customer.history-using-native-auth-strategy' | translate }}\r\n </ng-container>\r\n <ng-template #namedStrategy>\r\n {{\r\n 'customer.history-using-external-auth-strategy'\r\n | translate: { strategy: entry.data.strategy }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_VERIFIED\">\r\n <div class=\"title\">\r\n {{ 'customer.history-customer-verified' | translate }}\r\n </div>\r\n <ng-container *ngIf=\"entry.data.strategy === 'native'; else namedStrategy\">\r\n {{ 'customer.history-using-native-auth-strategy' | translate }}\r\n </ng-container>\r\n <ng-template #namedStrategy>\r\n {{\r\n 'customer.history-using-external-auth-strategy'\r\n | translate: { strategy: entry.data.strategy }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_DETAIL_UPDATED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-detail-updated' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-object-tree [value]=\"entry.data.input\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDED_TO_GROUP\">\r\n {{\r\n 'customer.history-customer-added-to-group'\r\n | translate: { groupName: entry.data.groupName }\r\n }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_REMOVED_FROM_GROUP\">\r\n {{\r\n 'customer.history-customer-removed-from-group'\r\n | translate: { groupName: entry.data.groupName }\r\n }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_CREATED\">\r\n {{ 'customer.history-customer-address-created' | translate }}\r\n <div class=\"flex\">\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_UPDATED\">\r\n {{ 'customer.history-customer-address-updated' | translate }}\r\n <div class=\"flex\">\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n <vdr-history-entry-detail>\r\n <vdr-object-tree [value]=\"entry.data.input\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_DELETED\">\r\n {{ 'customer.history-customer-address-deleted' | translate }}\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_UPDATED\">\r\n {{ 'customer.history-customer-password-updated' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_RESET_REQUESTED\">\r\n {{ 'customer.history-customer-password-reset-requested' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_RESET_VERIFIED\">\r\n {{ 'customer.history-customer-password-reset-verified' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_EMAIL_UPDATE_REQUESTED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-email-update-requested' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'customer.old-email-address' | translate\">{{\r\n entry.data.oldEmailAddress\r\n }}</vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'customer.new-email-address' | translate\">{{\r\n entry.data.newEmailAddress\r\n }}</vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_EMAIL_UPDATE_VERIFIED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-email-update-verified' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'customer.old-email-address' | translate\">{{\r\n entry.data.oldEmailAddress\r\n }}</vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'customer.new-email-address' | translate\">{{\r\n entry.data.newEmailAddress\r\n }}</vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_NOTE\">\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"updateNote.emit(entry)\"\r\n [disabled]=\"!('UpdateCustomer' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"deleteNote.emit(entry)\"\r\n [disabled]=\"!('UpdateCustomer' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry [isLast]=\"true\"></vdr-timeline-entry>\r\n</div>\r\n", styles: [".entry-list{margin-top:24px;margin-left:24px;margin-right:12px}.note-entry{display:flex;align-items:center}.note-entry .note{flex:1}.note-entry button{margin:0}textarea.note{flex:1;height:36px;border-radius:3px;margin-right:6px}.note-text{color:var(--color-text-100);white-space:pre-wrap}.address-string{font-size:smaller;color:var(--color-text-200)}\n"], components: [{ type: i1.TimelineEntryComponent, selector: "vdr-timeline-entry", inputs: ["displayType", "createdAt", "name", "featured", "iconShape", "isLast", "collapsed"], outputs: ["expandClick"] }, { type: i1.HistoryEntryDetailComponent, selector: "vdr-history-entry-detail" }, { type: i1.ObjectTreeComponent, selector: "vdr-object-tree", inputs: ["value", "isArrayItem"] }, { type: i1.LabeledDataComponent, selector: "vdr-labeled-data", inputs: ["label"] }, { type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }], directives: [{ type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }, { type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }], pipes: { "translate": i5.TranslatePipe, "hasPermission": i1.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
68
+ CustomerHistoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CustomerHistoryComponent, selector: "vdr-customer-history", inputs: { customer: "customer", history: "history" }, outputs: { addNote: "addNote", updateNote: "updateNote", deleteNote: "deleteNote" }, ngImport: i0, template: "<h4>{{ 'customer.customer-history' | translate }}</h4>\r\n<div class=\"entry-list\">\r\n <vdr-timeline-entry iconShape=\"note\" displayType=\"muted\" *vdrIfPermissions=\"'UpdateCustomer'\">\r\n <div class=\"note-entry\">\r\n <textarea [(ngModel)]=\"note\" name=\"note\" class=\"note\"></textarea>\r\n <button class=\"btn btn-secondary\" [disabled]=\"!note\" (click)=\"addNoteToCustomer()\">\r\n {{ 'order.add-note' | translate }}\r\n </button>\r\n </div>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry\r\n *ngFor=\"let entry of history\"\r\n [displayType]=\"getDisplayType(entry)\"\r\n [iconShape]=\"getTimelineIcon(entry)\"\r\n [createdAt]=\"entry.createdAt\"\r\n [name]=\"getName(entry)\"\r\n [featured]=\"isFeatured(entry)\"\r\n >\r\n <ng-container [ngSwitch]=\"entry.type\">\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_REGISTERED\">\r\n <div class=\"title\">\r\n {{ 'customer.history-customer-registered' | translate }}\r\n </div>\r\n <ng-container *ngIf=\"entry.data.strategy === 'native'; else namedStrategy\">\r\n {{ 'customer.history-using-native-auth-strategy' | translate }}\r\n </ng-container>\r\n <ng-template #namedStrategy>\r\n {{\r\n 'customer.history-using-external-auth-strategy'\r\n | translate: { strategy: entry.data.strategy }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_VERIFIED\">\r\n <div class=\"title\">\r\n {{ 'customer.history-customer-verified' | translate }}\r\n </div>\r\n <ng-container *ngIf=\"entry.data.strategy === 'native'; else namedStrategy\">\r\n {{ 'customer.history-using-native-auth-strategy' | translate }}\r\n </ng-container>\r\n <ng-template #namedStrategy>\r\n {{\r\n 'customer.history-using-external-auth-strategy'\r\n | translate: { strategy: entry.data.strategy }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_DETAIL_UPDATED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-detail-updated' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-object-tree [value]=\"entry.data.input\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDED_TO_GROUP\">\r\n {{\r\n 'customer.history-customer-added-to-group'\r\n | translate: { groupName: entry.data.groupName }\r\n }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_REMOVED_FROM_GROUP\">\r\n {{\r\n 'customer.history-customer-removed-from-group'\r\n | translate: { groupName: entry.data.groupName }\r\n }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_CREATED\">\r\n {{ 'customer.history-customer-address-created' | translate }}\r\n <div class=\"flex\">\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_UPDATED\">\r\n {{ 'customer.history-customer-address-updated' | translate }}\r\n <div class=\"flex\">\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n <vdr-history-entry-detail>\r\n <vdr-object-tree [value]=\"entry.data.input\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_DELETED\">\r\n {{ 'customer.history-customer-address-deleted' | translate }}\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_UPDATED\">\r\n {{ 'customer.history-customer-password-updated' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_RESET_REQUESTED\">\r\n {{ 'customer.history-customer-password-reset-requested' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_RESET_VERIFIED\">\r\n {{ 'customer.history-customer-password-reset-verified' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_EMAIL_UPDATE_REQUESTED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-email-update-requested' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'customer.old-email-address' | translate\">{{\r\n entry.data.oldEmailAddress\r\n }}</vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'customer.new-email-address' | translate\">{{\r\n entry.data.newEmailAddress\r\n }}</vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_EMAIL_UPDATE_VERIFIED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-email-update-verified' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'customer.old-email-address' | translate\">{{\r\n entry.data.oldEmailAddress\r\n }}</vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'customer.new-email-address' | translate\">{{\r\n entry.data.newEmailAddress\r\n }}</vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_NOTE\">\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"updateNote.emit(entry)\"\r\n [disabled]=\"!('UpdateCustomer' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"deleteNote.emit(entry)\"\r\n [disabled]=\"!('UpdateCustomer' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry [isLast]=\"true\"></vdr-timeline-entry>\r\n</div>\r\n", styles: [".entry-list{margin-top:24px;margin-left:24px;margin-right:12px}.note-entry{display:flex;align-items:center}.note-entry .note{flex:1}.note-entry button{margin:0}textarea.note{flex:1;height:36px;border-radius:3px;margin-right:6px}.note-text{color:var(--color-text-100);white-space:pre-wrap}.address-string{font-size:smaller;color:var(--color-text-200)}\n"], components: [{ type: i1.TimelineEntryComponent, selector: "vdr-timeline-entry", inputs: ["displayType", "createdAt", "name", "featured", "iconShape", "isLast", "collapsed"], outputs: ["expandClick"] }, { type: i1.HistoryEntryDetailComponent, selector: "vdr-history-entry-detail" }, { type: i1.ObjectTreeComponent, selector: "vdr-object-tree", inputs: ["value", "isArrayItem"] }, { type: i1.LabeledDataComponent, selector: "vdr-labeled-data", inputs: ["label"] }, { type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }], directives: [{ type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }, { type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }], pipes: { "translate": i5.TranslatePipe, "hasPermission": i1.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
69
69
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CustomerHistoryComponent, decorators: [{
70
70
  type: Component,
71
71
  args: [{ selector: 'vdr-customer-history', changeDetection: ChangeDetectionStrategy.OnPush, template: "<h4>{{ 'customer.customer-history' | translate }}</h4>\r\n<div class=\"entry-list\">\r\n <vdr-timeline-entry iconShape=\"note\" displayType=\"muted\" *vdrIfPermissions=\"'UpdateCustomer'\">\r\n <div class=\"note-entry\">\r\n <textarea [(ngModel)]=\"note\" name=\"note\" class=\"note\"></textarea>\r\n <button class=\"btn btn-secondary\" [disabled]=\"!note\" (click)=\"addNoteToCustomer()\">\r\n {{ 'order.add-note' | translate }}\r\n </button>\r\n </div>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry\r\n *ngFor=\"let entry of history\"\r\n [displayType]=\"getDisplayType(entry)\"\r\n [iconShape]=\"getTimelineIcon(entry)\"\r\n [createdAt]=\"entry.createdAt\"\r\n [name]=\"getName(entry)\"\r\n [featured]=\"isFeatured(entry)\"\r\n >\r\n <ng-container [ngSwitch]=\"entry.type\">\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_REGISTERED\">\r\n <div class=\"title\">\r\n {{ 'customer.history-customer-registered' | translate }}\r\n </div>\r\n <ng-container *ngIf=\"entry.data.strategy === 'native'; else namedStrategy\">\r\n {{ 'customer.history-using-native-auth-strategy' | translate }}\r\n </ng-container>\r\n <ng-template #namedStrategy>\r\n {{\r\n 'customer.history-using-external-auth-strategy'\r\n | translate: { strategy: entry.data.strategy }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_VERIFIED\">\r\n <div class=\"title\">\r\n {{ 'customer.history-customer-verified' | translate }}\r\n </div>\r\n <ng-container *ngIf=\"entry.data.strategy === 'native'; else namedStrategy\">\r\n {{ 'customer.history-using-native-auth-strategy' | translate }}\r\n </ng-container>\r\n <ng-template #namedStrategy>\r\n {{\r\n 'customer.history-using-external-auth-strategy'\r\n | translate: { strategy: entry.data.strategy }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_DETAIL_UPDATED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-detail-updated' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-object-tree [value]=\"entry.data.input\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDED_TO_GROUP\">\r\n {{\r\n 'customer.history-customer-added-to-group'\r\n | translate: { groupName: entry.data.groupName }\r\n }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_REMOVED_FROM_GROUP\">\r\n {{\r\n 'customer.history-customer-removed-from-group'\r\n | translate: { groupName: entry.data.groupName }\r\n }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_CREATED\">\r\n {{ 'customer.history-customer-address-created' | translate }}\r\n <div class=\"flex\">\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_UPDATED\">\r\n {{ 'customer.history-customer-address-updated' | translate }}\r\n <div class=\"flex\">\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n <vdr-history-entry-detail>\r\n <vdr-object-tree [value]=\"entry.data.input\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_ADDRESS_DELETED\">\r\n {{ 'customer.history-customer-address-deleted' | translate }}\r\n <div class=\"address-string\">{{ entry.data.address }}</div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_UPDATED\">\r\n {{ 'customer.history-customer-password-updated' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_RESET_REQUESTED\">\r\n {{ 'customer.history-customer-password-reset-requested' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_PASSWORD_RESET_VERIFIED\">\r\n {{ 'customer.history-customer-password-reset-verified' | translate }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_EMAIL_UPDATE_REQUESTED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-email-update-requested' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'customer.old-email-address' | translate\">{{\r\n entry.data.oldEmailAddress\r\n }}</vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'customer.new-email-address' | translate\">{{\r\n entry.data.newEmailAddress\r\n }}</vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_EMAIL_UPDATE_VERIFIED\">\r\n <div class=\"flex\">\r\n {{ 'customer.history-customer-email-update-verified' | translate }}\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'customer.old-email-address' | translate\">{{\r\n entry.data.oldEmailAddress\r\n }}</vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'customer.new-email-address' | translate\">{{\r\n entry.data.newEmailAddress\r\n }}</vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.CUSTOMER_NOTE\">\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"updateNote.emit(entry)\"\r\n [disabled]=\"!('UpdateCustomer' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"deleteNote.emit(entry)\"\r\n [disabled]=\"!('UpdateCustomer' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry [isLast]=\"true\"></vdr-timeline-entry>\r\n</div>\r\n", styles: [".entry-list{margin-top:24px;margin-left:24px;margin-right:12px}.note-entry{display:flex;align-items:center}.note-entry .note{flex:1}.note-entry button{margin:0}textarea.note{flex:1;height:36px;border-radius:3px;margin-right:6px}.note-text{color:var(--color-text-100);white-space:pre-wrap}.address-string{font-size:smaller;color:var(--color-text-200)}\n"] }]