@tuki-io/tuki-widgets 0.0.219-dev.6 → 0.0.219-dev.62

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 (261) hide show
  1. package/contact-center/cc-import/cc-import.module.d.ts +13 -0
  2. package/contact-center/cc-import/cc-import.service.d.ts +85 -0
  3. package/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.d.ts +56 -0
  4. package/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.d.ts +77 -0
  5. package/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.d.ts +3 -0
  6. package/contact-center/cc-import/constants/cc-import.constants.d.ts +37 -0
  7. package/contact-center/cc-import/mock/cc-import.mock.d.ts +4 -0
  8. package/contact-center/cc-import/types/cc-import.d.ts +73 -0
  9. package/contact-center/cc-import/types/uccx.d.ts +109 -0
  10. package/contact-center/cc-readiness/cc-readiness.module.d.ts +3 -3
  11. package/contact-center/public-api.d.ts +8 -0
  12. package/contact-center/shared/api.endpoints.d.ts +25 -0
  13. package/contact-center/shared/api.service.d.ts +3 -1
  14. package/contact-center/shared/components/card/card.component.d.ts +13 -0
  15. package/contact-center/shared/dcp-api.service.d.ts +15 -0
  16. package/contact-center/shared/shared.module.d.ts +11 -5
  17. package/di2mt/api/api.endpoints.d.ts +3 -0
  18. package/esm2020/contact-center/cc-import/cc-import.module.mjs +45 -0
  19. package/esm2020/contact-center/cc-import/cc-import.service.mjs +228 -0
  20. package/esm2020/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.mjs +144 -0
  21. package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.mjs +243 -0
  22. package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.mjs +3 -0
  23. package/esm2020/contact-center/cc-import/constants/cc-import.constants.mjs +62 -0
  24. package/esm2020/contact-center/cc-import/mock/cc-import.mock.mjs +78 -0
  25. package/esm2020/contact-center/cc-import/types/cc-import.mjs +2 -0
  26. package/esm2020/contact-center/cc-import/types/uccx.mjs +24 -0
  27. package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +7 -6
  28. package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +5 -5
  29. package/esm2020/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.mjs +2 -2
  30. package/esm2020/contact-center/public-api.mjs +9 -1
  31. package/esm2020/contact-center/shared/api.endpoints.mjs +26 -1
  32. package/esm2020/contact-center/shared/api.service.mjs +8 -3
  33. package/esm2020/contact-center/shared/components/card/card.component.mjs +24 -0
  34. package/esm2020/contact-center/shared/dcp-api.service.mjs +26 -0
  35. package/esm2020/contact-center/shared/shared.module.mjs +15 -5
  36. package/esm2020/di2mt/api/api.endpoints.mjs +4 -1
  37. package/esm2020/locations/public-api.mjs +8 -0
  38. package/esm2020/locations/src/app.constants.mjs +18 -0
  39. package/esm2020/locations/src/location-confirm-dialog/location-confirm-dialog.component.mjs +23 -0
  40. package/esm2020/locations/src/locations.component.mjs +398 -0
  41. package/esm2020/locations/src/locations.module.mjs +42 -0
  42. package/esm2020/locations/src/material.module.mjs +55 -0
  43. package/esm2020/locations/src/services/api.service.mjs +67 -0
  44. package/esm2020/locations/src/services/locations.service.mjs +69 -0
  45. package/esm2020/locations/src/types/location.mjs +2 -0
  46. package/esm2020/locations/src/utils/app-loader/app-loader.mjs +14 -0
  47. package/esm2020/locations/tuki-io-tuki-widgets-locations.mjs +5 -0
  48. package/esm2020/meetings/public-api.mjs +8 -0
  49. package/esm2020/meetings/src/app.constants.mjs +9 -0
  50. package/esm2020/meetings/src/components/live-meetings/live-meeting/live-meeting.component.mjs +107 -0
  51. package/esm2020/meetings/src/components/live-meetings/live-meetings.component.mjs +98 -0
  52. package/esm2020/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.mjs +110 -0
  53. package/esm2020/meetings/src/components/meeting-spaces/meeting-spaces.component.mjs +65 -0
  54. package/esm2020/meetings/src/material.module.mjs +76 -0
  55. package/esm2020/meetings/src/meetings.component.mjs +65 -0
  56. package/esm2020/meetings/src/meetings.module.mjs +51 -0
  57. package/esm2020/meetings/src/services/api.service.mjs +67 -0
  58. package/esm2020/meetings/src/services/live-meetings.service.mjs +178 -0
  59. package/esm2020/meetings/src/services/meeting-spaces.service.mjs +102 -0
  60. package/esm2020/meetings/src/types/live-meeting.mjs +2 -0
  61. package/esm2020/meetings/src/types/meeting-space.mjs +2 -0
  62. package/esm2020/meetings/src/utils/app-loader/app-loader.mjs +14 -0
  63. package/esm2020/meetings/tuki-io-tuki-widgets-meetings.mjs +5 -0
  64. package/esm2020/shared/public-api.mjs +4 -0
  65. package/esm2020/shared/src/ui/material.module.mjs +188 -0
  66. package/esm2020/shared/src/ui/shared.module.mjs +36 -0
  67. package/esm2020/shared/src/ui/tk-page-section/tk-page-section.component.mjs +13 -0
  68. package/esm2020/shared/src/ui/tk-page-section-row/tk-page-section-row.component.mjs +13 -0
  69. package/esm2020/shared/src/ui/ui.module.mjs +37 -0
  70. package/esm2020/shared/tuki-io-tuki-widgets-shared.mjs +5 -0
  71. package/esm2020/user-creation/src/utils/device-default-prefix.mjs +19 -2
  72. package/esm2020/user-creation/src/utils/device-name-dynamic-tokens.mjs +4 -0
  73. package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +6 -3
  74. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.mjs +60 -13
  75. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.mjs +2 -1
  76. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +8 -6
  77. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.mjs +13 -9
  78. package/esm2020/user-device-manage/public-api.mjs +4 -1
  79. package/esm2020/user-device-manage/src/app.constants.mjs +9 -3
  80. package/esm2020/user-device-manage/src/associate-lines/associate-lines.component.mjs +311 -0
  81. package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
  82. package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +1 -1
  83. package/esm2020/user-device-manage/src/classes/simplified-user.mjs +1 -1
  84. package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +2 -2
  85. package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +34 -17
  86. package/esm2020/user-device-manage/src/device-settings/device-settings.component.mjs +207 -0
  87. package/esm2020/user-device-manage/src/line-key-config/line-key-config.component.mjs +401 -0
  88. package/esm2020/user-device-manage/src/services/device.service.mjs +32 -2
  89. package/esm2020/user-device-manage/src/services/user.service.mjs +34 -6
  90. package/esm2020/user-device-manage/src/user-device-manage.module.mjs +19 -7
  91. package/esm2020/user-manage/src/app.constants.mjs +8 -1
  92. package/esm2020/user-manage/src/classes/simplified-user.mjs +19 -4
  93. package/esm2020/user-manage/src/device-list/device-list.component.mjs +7 -4
  94. package/esm2020/user-manage/src/device-list/device-row/device-row.component.mjs +6 -3
  95. package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +9 -5
  96. package/esm2020/user-manage/src/material.module.mjs +21 -7
  97. package/esm2020/user-manage/src/services/dcp-api.service.mjs +79 -0
  98. package/esm2020/user-manage/src/services/site-settings.service.mjs +11 -4
  99. package/esm2020/user-manage/src/services/user.service.mjs +94 -19
  100. package/esm2020/user-manage/src/user-calling/user-calling.component.mjs +12 -7
  101. package/esm2020/user-manage/src/user-manage-widget.component.mjs +90 -39
  102. package/esm2020/user-manage/src/user-manage.module.mjs +14 -4
  103. package/esm2020/user-manage/src/user-summary/user-summary.component.mjs +30 -0
  104. package/esm2020/users-list/src/app.constants.mjs +2 -1
  105. package/esm2020/users-list/src/classes/simlified-user.mjs +1 -1
  106. package/esm2020/users-list/src/classes/user-list.mjs +2 -1
  107. package/esm2020/users-list/src/components/table-toolbar/table-toolbar.component.mjs +3 -3
  108. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.mjs +14 -3
  109. package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +5 -3
  110. package/esm2020/users-list/src/users-list.component.mjs +100 -17
  111. package/esm2020/workspaces/public-api.mjs +8 -0
  112. package/esm2020/workspaces/src/app.constants.mjs +27 -0
  113. package/esm2020/workspaces/src/components/workspace-confirm-dialog/workspace-confirm-dialog.component.mjs +32 -0
  114. package/esm2020/workspaces/src/components/workspace-detail/workspace-detail.component.mjs +96 -0
  115. package/esm2020/workspaces/src/components/workspace-device-detail/workspace-device-detail.component.mjs +66 -0
  116. package/esm2020/workspaces/src/components/workspaces-filters/workspaces-filters.component.mjs +56 -0
  117. package/esm2020/workspaces/src/components/workspaces-table/workspaces-table.component.mjs +130 -0
  118. package/esm2020/workspaces/src/material.module.mjs +83 -0
  119. package/esm2020/workspaces/src/services/api-webex.service.mjs +14 -0
  120. package/esm2020/workspaces/src/services/api.service.mjs +67 -0
  121. package/esm2020/workspaces/src/services/workspace-detail.service.mjs +169 -0
  122. package/esm2020/workspaces/src/services/workspaces-migration.service.mjs +59 -0
  123. package/esm2020/workspaces/src/services/workspaces.service.mjs +152 -0
  124. package/esm2020/workspaces/src/types/workspace.mjs +4 -0
  125. package/esm2020/workspaces/src/utils/app-loader/app-loader.mjs +14 -0
  126. package/esm2020/workspaces/src/utils/device-icon.mjs +13 -0
  127. package/esm2020/workspaces/src/utils/workspace-name.mjs +8 -0
  128. package/esm2020/workspaces/src/workspaces.component.mjs +322 -0
  129. package/esm2020/workspaces/src/workspaces.module.mjs +54 -0
  130. package/esm2020/workspaces/tuki-io-tuki-widgets-workspaces.mjs +5 -0
  131. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +998 -127
  132. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  133. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +3 -0
  134. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  135. package/fesm2015/tuki-io-tuki-widgets-locations.mjs +679 -0
  136. package/fesm2015/tuki-io-tuki-widgets-locations.mjs.map +1 -0
  137. package/fesm2015/tuki-io-tuki-widgets-meetings.mjs +894 -0
  138. package/fesm2015/tuki-io-tuki-widgets-meetings.mjs.map +1 -0
  139. package/fesm2015/tuki-io-tuki-widgets-shared.mjs +280 -0
  140. package/fesm2015/tuki-io-tuki-widgets-shared.mjs.map +1 -0
  141. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +111 -32
  142. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  143. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +1013 -48
  144. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  145. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +380 -89
  146. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  147. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +121 -22
  148. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  149. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs +1292 -0
  150. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs.map +1 -0
  151. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +989 -127
  152. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  153. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +3 -0
  154. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  155. package/fesm2020/tuki-io-tuki-widgets-locations.mjs +672 -0
  156. package/fesm2020/tuki-io-tuki-widgets-locations.mjs.map +1 -0
  157. package/fesm2020/tuki-io-tuki-widgets-meetings.mjs +902 -0
  158. package/fesm2020/tuki-io-tuki-widgets-meetings.mjs.map +1 -0
  159. package/fesm2020/tuki-io-tuki-widgets-shared.mjs +280 -0
  160. package/fesm2020/tuki-io-tuki-widgets-shared.mjs.map +1 -0
  161. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +104 -28
  162. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  163. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +996 -47
  164. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  165. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +366 -82
  166. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  167. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +120 -22
  168. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  169. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs +1294 -0
  170. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs.map +1 -0
  171. package/locations/index.d.ts +5 -0
  172. package/locations/public-api.d.ts +2 -0
  173. package/locations/src/app.constants.d.ts +10 -0
  174. package/locations/src/location-confirm-dialog/location-confirm-dialog.component.d.ts +15 -0
  175. package/locations/src/locations.component.d.ts +92 -0
  176. package/locations/src/locations.module.d.ts +13 -0
  177. package/locations/src/material.module.d.ts +12 -0
  178. package/locations/src/services/api.service.d.ts +18 -0
  179. package/locations/src/services/locations.service.d.ts +25 -0
  180. package/locations/src/types/location.d.ts +30 -0
  181. package/locations/src/utils/app-loader/app-loader.d.ts +6 -0
  182. package/meetings/index.d.ts +5 -0
  183. package/meetings/public-api.d.ts +2 -0
  184. package/meetings/src/app.constants.d.ts +8 -0
  185. package/meetings/src/components/live-meetings/live-meeting/live-meeting.component.d.ts +34 -0
  186. package/meetings/src/components/live-meetings/live-meetings.component.d.ts +43 -0
  187. package/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.d.ts +39 -0
  188. package/meetings/src/components/meeting-spaces/meeting-spaces.component.d.ts +27 -0
  189. package/meetings/src/material.module.d.ts +15 -0
  190. package/meetings/src/meetings.component.d.ts +29 -0
  191. package/meetings/src/meetings.module.d.ts +16 -0
  192. package/meetings/src/services/api.service.d.ts +18 -0
  193. package/meetings/src/services/live-meetings.service.d.ts +9 -0
  194. package/meetings/src/services/meeting-spaces.service.d.ts +16 -0
  195. package/meetings/src/types/live-meeting.d.ts +71 -0
  196. package/meetings/src/types/meeting-space.d.ts +52 -0
  197. package/meetings/src/utils/app-loader/app-loader.d.ts +6 -0
  198. package/package.json +33 -1
  199. package/shared/index.d.ts +5 -0
  200. package/shared/public-api.d.ts +3 -0
  201. package/shared/src/ui/material.module.d.ts +28 -0
  202. package/shared/src/ui/shared.module.d.ts +10 -0
  203. package/{user-device-manage/src/shared/tk-page-section/page-section.component.d.ts → shared/src/ui/tk-page-section/tk-page-section.component.d.ts} +1 -1
  204. package/shared/src/ui/tk-page-section-row/tk-page-section-row.component.d.ts +6 -0
  205. package/shared/src/ui/ui.module.d.ts +11 -0
  206. package/user-creation/src/utils/device-default-prefix.d.ts +7 -2
  207. package/user-creation/src/utils/device-name-dynamic-tokens.d.ts +1 -0
  208. package/user-creation/src/utils/parse-device-name-rule.d.ts +1 -0
  209. package/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.d.ts +2 -0
  210. package/user-device-manage/public-api.d.ts +3 -0
  211. package/user-device-manage/src/app.constants.d.ts +6 -0
  212. package/user-device-manage/src/associate-lines/associate-lines.component.d.ts +95 -0
  213. package/user-device-manage/src/classes/device.d.ts +15 -0
  214. package/user-device-manage/src/classes/deviceProfile.d.ts +5 -0
  215. package/user-device-manage/src/classes/simplified-user.d.ts +1 -1
  216. package/user-device-manage/src/device-associated-line/device-associated-line.component.d.ts +1 -0
  217. package/user-device-manage/src/device-manage-widget.component.d.ts +6 -1
  218. package/user-device-manage/src/device-settings/device-settings.component.d.ts +53 -0
  219. package/user-device-manage/src/line-key-config/line-key-config.component.d.ts +84 -0
  220. package/user-device-manage/src/services/device.service.d.ts +6 -1
  221. package/user-device-manage/src/services/user.service.d.ts +2 -1
  222. package/user-device-manage/src/user-device-manage.module.d.ts +12 -10
  223. package/user-manage/src/app.constants.d.ts +7 -0
  224. package/user-manage/src/classes/simplified-user.d.ts +17 -1
  225. package/user-manage/src/device-list/device-list.component.d.ts +2 -0
  226. package/user-manage/src/material.module.d.ts +3 -1
  227. package/user-manage/src/services/dcp-api.service.d.ts +21 -0
  228. package/user-manage/src/services/user.service.d.ts +19 -1
  229. package/user-manage/src/user-calling/user-calling.component.d.ts +3 -2
  230. package/user-manage/src/user-manage-widget.component.d.ts +14 -2
  231. package/user-manage/src/user-manage.module.d.ts +9 -7
  232. package/user-manage/src/user-summary/user-summary.component.d.ts +10 -0
  233. package/users-list/src/app.constants.d.ts +1 -0
  234. package/users-list/src/classes/simlified-user.d.ts +1 -1
  235. package/users-list/src/classes/user-list.d.ts +4 -0
  236. package/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.d.ts +3 -1
  237. package/users-list/src/move-user-wizard/move-user-wizard.component.d.ts +2 -1
  238. package/users-list/src/users-list.component.d.ts +6 -1
  239. package/workspaces/index.d.ts +5 -0
  240. package/workspaces/public-api.d.ts +2 -0
  241. package/workspaces/src/app.constants.d.ts +25 -0
  242. package/workspaces/src/components/workspace-confirm-dialog/workspace-confirm-dialog.component.d.ts +20 -0
  243. package/workspaces/src/components/workspace-detail/workspace-detail.component.d.ts +34 -0
  244. package/workspaces/src/components/workspace-device-detail/workspace-device-detail.component.d.ts +25 -0
  245. package/workspaces/src/components/workspaces-filters/workspaces-filters.component.d.ts +20 -0
  246. package/workspaces/src/components/workspaces-table/workspaces-table.component.d.ts +43 -0
  247. package/workspaces/src/material.module.d.ts +16 -0
  248. package/workspaces/src/services/api-webex.service.d.ts +6 -0
  249. package/workspaces/src/services/api.service.d.ts +18 -0
  250. package/workspaces/src/services/workspace-detail.service.d.ts +22 -0
  251. package/workspaces/src/services/workspaces-migration.service.d.ts +18 -0
  252. package/workspaces/src/services/workspaces.service.d.ts +11 -0
  253. package/workspaces/src/types/workspace.d.ts +439 -0
  254. package/workspaces/src/utils/app-loader/app-loader.d.ts +6 -0
  255. package/workspaces/src/utils/device-icon.d.ts +1 -0
  256. package/workspaces/src/utils/workspace-name.d.ts +1 -0
  257. package/workspaces/src/workspaces.component.d.ts +75 -0
  258. package/workspaces/src/workspaces.module.d.ts +17 -0
  259. package/contact-center/cc-readiness/components/card/card.component.d.ts +0 -6
  260. package/esm2020/contact-center/cc-readiness/components/card/card.component.mjs +0 -13
  261. package/esm2020/user-device-manage/src/shared/tk-page-section/page-section.component.mjs +0 -13
@@ -0,0 +1,243 @@
1
+ import { Component, EventEmitter, Input, Output, ViewEncapsulation, inject } from '@angular/core';
2
+ import { Subscription, catchError, finalize, of } from 'rxjs';
3
+ import { CcImportService } from '../../cc-import.service';
4
+ import { CUSTOMER_ASSIST_MARKER_TOOLTIP, CUSTOMER_ASSIST_NOTICE, IMPORT_WIZARD_TITLE } from '../../constants/cc-import.constants';
5
+ import { IMPORT_WIZARD_STEPS } from './import-contact-center-wizard.types';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "@angular/material/stepper";
9
+ import * as i3 from "@angular/material/tooltip";
10
+ import * as i4 from "@angular/material/button";
11
+ import * as i5 from "@angular/material/form-field";
12
+ import * as i6 from "@angular/material/select";
13
+ import * as i7 from "@angular/material/core";
14
+ /**
15
+ * Full-page "Import contact center" wizard: pick a UCCX contact center, review the
16
+ * entities Tuki will create for it, then start the import.
17
+ *
18
+ * Rendered as a page by the host app (like `tk-user-creation-wizard`), not as a dialog -
19
+ * the host swaps it in when the panel's Import button is pressed and swaps it back out
20
+ * on `cancel` / `imported`.
21
+ */
22
+ export class ImportContactCenterWizardComponent {
23
+ constructor() {
24
+ this.title = IMPORT_WIZARD_TITLE;
25
+ /** Serve mock data instead of calling the UCCX migration API. */
26
+ this.useMockData = true;
27
+ /**
28
+ * Contact centers the caller has already loaded (the panel has them), so the wizard
29
+ * opens without a second round trip. Left unset, the wizard fetches them itself.
30
+ */
31
+ this.contactCenters = null;
32
+ this.cancel = new EventEmitter();
33
+ this.imported = new EventEmitter();
34
+ this.ccImportService = inject(CcImportService);
35
+ this.subscriptions = new Subscription();
36
+ this.customerAssistNotice = CUSTOMER_ASSIST_NOTICE;
37
+ this.customerAssistMarkerTooltip = CUSTOMER_ASSIST_MARKER_TOOLTIP;
38
+ this.selectedIndex = 0;
39
+ /** Contact centers awaiting review - the ones there is something to import. */
40
+ this.options = [];
41
+ /** `options` narrowed by the picker's search box. */
42
+ this.filteredOptions = [];
43
+ this.searchTerm = '';
44
+ this.selected = null;
45
+ this.noticeDismissed = false;
46
+ this.loading = false;
47
+ this.error = false;
48
+ this.entityGroups = [];
49
+ /** Which entity group the Overview step's tab bar is showing. */
50
+ this.activeGroupIndex = 0;
51
+ this.entitiesLoading = false;
52
+ this.entitiesError = false;
53
+ this.importing = false;
54
+ this.importError = false;
55
+ }
56
+ ngOnInit() {
57
+ this.load();
58
+ }
59
+ ngOnChanges(changes) {
60
+ const reloadTriggers = ['customerId', 'host', 'dcpHost', 'token', 'useMockData', 'contactCenters'];
61
+ if (reloadTriggers.some(input => changes[input] && !changes[input].firstChange)) {
62
+ this.load();
63
+ }
64
+ }
65
+ ngOnDestroy() {
66
+ this.subscriptions.unsubscribe();
67
+ }
68
+ get canGoNext() {
69
+ return !!this.selected;
70
+ }
71
+ /** The Customer Assist advisory, until the user dismisses it or picks something else. */
72
+ get showCustomerAssistNotice() {
73
+ return !!this.selected?.customerAssistCapable && !this.noticeDismissed;
74
+ }
75
+ get canImport() {
76
+ return !!this.selected && !this.importing && !this.entitiesLoading && !this.entitiesError;
77
+ }
78
+ onCancel() {
79
+ this.cancel.emit();
80
+ }
81
+ onSelect(applicationId) {
82
+ const selected = this.options.find(option => option.applicationId === applicationId) ?? null;
83
+ if (selected === this.selected) {
84
+ return;
85
+ }
86
+ this.selected = selected;
87
+ this.noticeDismissed = false;
88
+ // Entities belong to the previously selected contact center - drop them so the
89
+ // overview step refetches for the new one.
90
+ this.entityGroups = [];
91
+ this.activeGroupIndex = 0;
92
+ this.entitiesError = false;
93
+ }
94
+ get activeGroup() {
95
+ return this.entityGroups[this.activeGroupIndex];
96
+ }
97
+ selectGroup(index) {
98
+ this.activeGroupIndex = index;
99
+ }
100
+ dismissNotice() {
101
+ this.noticeDismissed = true;
102
+ }
103
+ onSearch(event) {
104
+ this.searchTerm = event.target.value;
105
+ this.filter();
106
+ }
107
+ /** Resets the search box each time the picker's panel is closed. */
108
+ onPanelToggle(opened) {
109
+ if (!opened && this.searchTerm) {
110
+ this.searchTerm = '';
111
+ this.filter();
112
+ }
113
+ }
114
+ onStepSelectionChange(event) {
115
+ this.selectedIndex = event.selectedIndex;
116
+ if (this.stepIdAt(event.selectedIndex) === 'overview') {
117
+ this.loadEntities();
118
+ }
119
+ }
120
+ onNext(stepper) {
121
+ if (this.canGoNext) {
122
+ stepper.next();
123
+ }
124
+ }
125
+ onPrevious(stepper) {
126
+ stepper.previous();
127
+ }
128
+ runImport() {
129
+ if (!this.selected || this.importing) {
130
+ return;
131
+ }
132
+ this.importing = true;
133
+ this.importError = false;
134
+ this.subscriptions.add(this.ccImportService.importContactCenter(Number(this.customerId), this.selected.applicationId)
135
+ .pipe(catchError(error => {
136
+ console.error('Unable to start the contact-center import', error);
137
+ this.importError = true;
138
+ return of(null);
139
+ }), finalize(() => this.importing = false))
140
+ .subscribe(result => {
141
+ if (result) {
142
+ this.imported.emit(result);
143
+ }
144
+ }));
145
+ }
146
+ stepIdAt(index) {
147
+ return IMPORT_WIZARD_STEPS[index];
148
+ }
149
+ load() {
150
+ this.ccImportService.useMockData = this.useMockData;
151
+ if (this.host) {
152
+ this.ccImportService.setHost(this.host);
153
+ }
154
+ if (this.dcpHost) {
155
+ this.ccImportService.setDcpHost(this.dcpHost);
156
+ }
157
+ if (this.token) {
158
+ this.ccImportService.setToken(this.token);
159
+ }
160
+ if (this.contactCenters) {
161
+ this.setOptions(this.contactCenters);
162
+ return;
163
+ }
164
+ const customerId = Number(this.customerId);
165
+ if (!this.useMockData && (!customerId || !this.token)) {
166
+ return;
167
+ }
168
+ this.loading = true;
169
+ this.error = false;
170
+ this.subscriptions.add(this.ccImportService.fetchContactCenters(customerId)
171
+ .pipe(catchError(error => {
172
+ console.error('Unable to load the contact centers', error);
173
+ this.error = true;
174
+ return of([]);
175
+ }), finalize(() => this.loading = false))
176
+ .subscribe(contactCenters => this.setOptions(contactCenters)));
177
+ }
178
+ setOptions(contactCenters) {
179
+ // Left in source order on purpose - the picker shows them the way the backend
180
+ // (and the mock) hands them over, not alphabetically.
181
+ //
182
+ // Eligible for a Webex Contact Center import: not imported yet, and either
183
+ // unsupported on Customer Assist or reviewable for full feature coverage.
184
+ this.options = contactCenters.filter(contactCenter => contactCenter.migrationState !== 'migrated'
185
+ && (contactCenter.compatibilityStatus === 'unsupported'
186
+ || contactCenter.compatibilityStatus === 'requires-review'));
187
+ // A contact center selected before a reload may no longer be importable.
188
+ if (this.selected && !this.options.some(option => option.applicationId === this.selected?.applicationId)) {
189
+ this.selected = null;
190
+ this.entityGroups = [];
191
+ this.activeGroupIndex = 0;
192
+ }
193
+ this.filter();
194
+ }
195
+ filter() {
196
+ const needle = this.searchTerm.trim().toLowerCase();
197
+ this.filteredOptions = needle
198
+ ? this.options.filter(option => option.applicationName.toLowerCase().includes(needle))
199
+ : this.options;
200
+ }
201
+ loadEntities() {
202
+ if (!this.selected || this.entityGroups.length || this.entitiesLoading) {
203
+ return;
204
+ }
205
+ this.entitiesLoading = true;
206
+ this.entitiesError = false;
207
+ this.subscriptions.add(this.ccImportService.fetchContactCenterEntities(Number(this.customerId), this.selected)
208
+ .pipe(catchError(error => {
209
+ console.error('Unable to load the contact-center entities', error);
210
+ this.entitiesError = true;
211
+ return of(null);
212
+ }), finalize(() => this.entitiesLoading = false))
213
+ .subscribe(entities => {
214
+ this.entityGroups = entities ? entities.groups : [];
215
+ this.activeGroupIndex = 0;
216
+ }));
217
+ }
218
+ }
219
+ ImportContactCenterWizardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ImportContactCenterWizardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
220
+ ImportContactCenterWizardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ImportContactCenterWizardComponent, selector: "cc-import-contact-center-wizard", inputs: { title: "title", customerId: "customerId", host: "host", dcpHost: "dcpHost", token: "token", useMockData: "useMockData", contactCenters: "contactCenters" }, outputs: { cancel: "cancel", imported: "imported" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"move-user-stepper-container\" [attr.aria-busy]=\"importing\">\r\n <header class=\"move-user-header\">\r\n <div class=\"move-user-header__title\">{{ title }}</div>\r\n <div class=\"move-user-header__close\">\r\n <span class=\"app-icon cc-import-close-icon\" (click)=\"onCancel()\" role=\"button\" aria-label=\"Close\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n <path d=\"M5 5L19 19M19 5L5 19\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </header>\r\n\r\n <div id=\"cc-import-stepper\">\r\n <mat-stepper\r\n #stepper\r\n [linear]=\"true\"\r\n labelPosition=\"bottom\"\r\n [selectedIndex]=\"selectedIndex\"\r\n (selectionChange)=\"onStepSelectionChange($event)\"\r\n >\r\n\r\n <!-- Step 1: pick the UCCX contact center -->\r\n <mat-step [completed]=\"canGoNext\">\r\n <ng-template matStepLabel>Select</ng-template>\r\n\r\n <div class=\"cc-import-notice\" *ngIf=\"showCustomerAssistNotice\" role=\"status\">\r\n <span class=\"cc-import-notice__icon\" aria-hidden=\"true\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"7\" fill=\"currentColor\" />\r\n <path d=\"M8 7.1v4.2\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\r\n <circle cx=\"8\" cy=\"4.8\" r=\"0.9\" fill=\"#fff\" />\r\n </svg>\r\n </span>\r\n <span class=\"cc-import-notice__text\">{{ customerAssistNotice }}</span>\r\n <button type=\"button\" class=\"cc-import-notice__close\" aria-label=\"Dismiss\" (click)=\"dismissNotice()\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n <path d=\"M5 5L19 19M19 5L5 19\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"step-title\">Step 1: Select contact center</div>\r\n\r\n <div class=\"move-user-tab-content-box\">\r\n <div class=\"cc-import-state\" *ngIf=\"loading\">Loading contact centers&hellip;</div>\r\n <div class=\"cc-import-state cc-import-state--error\" *ngIf=\"!loading && error\">\r\n Unable to load contact centers.\r\n </div>\r\n\r\n <section class=\"cc-import-step-content\" *ngIf=\"!loading && !error\">\r\n <div class=\"cc-import-field\">\r\n <label class=\"cc-import-label\" for=\"cc-import-contact-center\">Contact center</label>\r\n\r\n <mat-form-field class=\"cc-import-select\" appearance=\"outline\">\r\n <mat-select\r\n id=\"cc-import-contact-center\"\r\n panelClass=\"cc-import-select-panel\"\r\n placeholder=\"Select contact center\"\r\n [disableOptionCentering]=\"true\"\r\n [value]=\"selected?.applicationId ?? null\"\r\n (selectionChange)=\"onSelect($event.value)\"\r\n (openedChange)=\"onPanelToggle($event)\"\r\n >\r\n <mat-select-trigger>{{ selected?.applicationName }}</mat-select-trigger>\r\n\r\n <!-- Search box pinned above the options. Keystrokes are stopped here so\r\n mat-select's own typeahead does not steal them. -->\r\n <div class=\"cc-import-select-search\" (click)=\"$event.stopPropagation()\">\r\n <span class=\"cc-import-select-search__icon\" aria-hidden=\"true\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <circle cx=\"7\" cy=\"7\" r=\"4.6\" stroke=\"currentColor\" stroke-width=\"1.4\" />\r\n <path d=\"M10.6 10.6L14 14\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\r\n </svg>\r\n </span>\r\n <input\r\n class=\"cc-import-select-search__input\"\r\n type=\"text\"\r\n autocomplete=\"off\"\r\n placeholder=\"Search\"\r\n aria-label=\"Search contact centers\"\r\n [value]=\"searchTerm\"\r\n (input)=\"onSearch($event)\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n />\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option.applicationId\">\r\n <div class=\"option-row\">\r\n <span class=\"name\">{{ option.applicationName }}</span>\r\n <span\r\n class=\"cc-import-option-marker\"\r\n *ngIf=\"option.customerAssistCapable\"\r\n [matTooltip]=\"customerAssistMarkerTooltip\"\r\n aria-hidden=\"true\"\r\n >\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8 2.2 14.6 13.4H1.4L8 2.2Z\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linejoin=\"round\" />\r\n <path d=\"M8 6.5v3\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\r\n <circle cx=\"8\" cy=\"11.3\" r=\"0.7\" fill=\"currentColor\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <p class=\"cc-import-empty\" *ngIf=\"!options.length\">\r\n Every detected contact center has already been imported.\r\n </p>\r\n </div>\r\n </section>\r\n </div>\r\n </mat-step>\r\n\r\n <!-- Step 2: the entities Tuki will create for it -->\r\n <mat-step>\r\n <ng-template matStepLabel>Overview</ng-template>\r\n\r\n <div class=\"step-title\">Overview</div>\r\n\r\n <div class=\"move-user-tab-content-box\">\r\n <h3 class=\"cc-import-card-title\">Review Contact Center Settings</h3>\r\n <p class=\"cc-import-card-text\">\r\n Review the settings for your new Contact center to make sure everything is correct.<br />\r\n You can make changes at any time by clicking on the name of the contact center on the dedicated page.\r\n </p>\r\n\r\n <div class=\"cc-import-state\" *ngIf=\"entitiesLoading\">Loading entities&hellip;</div>\r\n <div class=\"cc-import-state cc-import-state--error\" *ngIf=\"entitiesError\">\r\n Unable to load the related entities.\r\n </div>\r\n\r\n <ng-container *ngIf=\"!entitiesLoading && !entitiesError && entityGroups.length\">\r\n <div class=\"cc-import-tabs\" role=\"tablist\">\r\n <button\r\n type=\"button\"\r\n class=\"cc-import-tab\"\r\n *ngFor=\"let group of entityGroups; index as i\"\r\n role=\"tab\"\r\n [attr.aria-selected]=\"i === activeGroupIndex\"\r\n [class.cc-import-tab--active]=\"i === activeGroupIndex\"\r\n (click)=\"selectGroup(i)\"\r\n >\r\n {{ group.label }}\r\n </button>\r\n </div>\r\n\r\n <ul class=\"cc-import-items\" role=\"tabpanel\">\r\n <li class=\"cc-import-item\" *ngFor=\"let item of activeGroup?.items\">{{ item }}</li>\r\n <li class=\"cc-import-item cc-import-item--empty\" *ngIf=\"!activeGroup?.items?.length\">\r\n Nothing to create for {{ activeGroup?.label }}.\r\n </li>\r\n </ul>\r\n </ng-container>\r\n\r\n <div class=\"cc-import-state cc-import-state--error\" *ngIf=\"importError\">\r\n Unable to start the import. Please try again.\r\n </div>\r\n </div>\r\n </mat-step>\r\n </mat-stepper>\r\n\r\n <div class=\"wizard-actions\">\r\n <ng-container [ngSwitch]=\"stepper.selectedIndex\">\r\n <ng-container *ngSwitchCase=\"0\">\r\n <button\r\n mat-button\r\n class=\"uc-btn uc-btn-primary\"\r\n type=\"button\"\r\n [disabled]=\"!canGoNext\"\r\n (click)=\"onNext(stepper)\"\r\n >\r\n Next\r\n </button>\r\n <button mat-button class=\"uc-btn uc-btn-secondary\" type=\"button\" (click)=\"onCancel()\">\r\n Cancel\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"1\">\r\n <button\r\n mat-button\r\n class=\"uc-btn uc-btn-primary\"\r\n type=\"button\"\r\n [disabled]=\"!canImport\"\r\n (click)=\"runImport()\"\r\n >\r\n <span class=\"uc-btn__inline-content\">\r\n <span class=\"uc-btn__spinner\" *ngIf=\"importing\" aria-hidden=\"true\"></span>\r\n <span>{{ importing ? 'Importing...' : 'Import' }}</span>\r\n </span>\r\n </button>\r\n <button\r\n mat-button\r\n class=\"uc-btn uc-btn-secondary\"\r\n type=\"button\"\r\n [disabled]=\"importing\"\r\n (click)=\"onPrevious(stepper)\"\r\n >\r\n Previous\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"wizard-loading-overlay\" [class.wizard-loading-overlay--visible]=\"importing\" aria-hidden=\"true\"></div>\r\n</div>\r\n", styles: ["cc-import-contact-center-wizard{display:block;width:100%;min-height:100vh}.move-user-stepper-container{background-color:#f3f3f3;padding:0 0 16px;position:relative;overflow:hidden;box-sizing:border-box;min-height:100vh;display:flex;flex-direction:column}.move-user-header{background-color:#1170cf;height:45px;padding:1rem 1.5rem;display:flex;align-items:center;justify-content:space-between;color:#fff;font-size:18px;font-weight:500}.move-user-header__close{cursor:pointer;display:flex;align-items:center;justify-content:center;line-height:0}.app-icon{height:20px;width:20px;display:block;cursor:pointer}.cc-import-close-icon{color:#fffffff2}#cc-import-stepper{display:flex;flex-direction:column;width:100%;flex:1 1 auto;min-height:0}#cc-import-stepper .mat-stepper-horizontal{margin:0 auto;width:100%;background-color:transparent;display:flex;flex-direction:column;flex:1 1 auto;min-height:0}#cc-import-stepper .mat-horizontal-stepper-header-container{margin:0 auto;width:800px}#cc-import-stepper .mat-step-icon{width:28px;height:28px;border:3px solid hsl(0,0%,50.2%)}#cc-import-stepper .mat-step-icon-selected{background-color:#c6c6c6!important;border-color:#19487d}#cc-import-stepper .mat-step-icon-state-number{background-color:#fff}#cc-import-stepper .mat-step-icon-state-edit,#cc-import-stepper .mat-step-header .mat-step-icon-state-done{background-color:#1170cf;border-color:#1170cf}#cc-import-stepper .mat-step-icon-content{display:none}#cc-import-stepper .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child):before,#cc-import-stepper [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child):before,#cc-import-stepper .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child):after,#cc-import-stepper [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child):after{border-top-width:3px!important}#cc-import-stepper .mat-horizontal-stepper-header:before,#cc-import-stepper .mat-horizontal-stepper-header:after,#cc-import-stepper .mat-stepper-horizontal-line{border-top-color:#1170cf!important;border-top-width:3px!important;border-top-style:solid!important}#cc-import-stepper .mat-horizontal-stepper-header[aria-selected=true]~.mat-stepper-horizontal-line,#cc-import-stepper .mat-horizontal-stepper-header[aria-selected=true]~.mat-horizontal-stepper-header:before,#cc-import-stepper .mat-horizontal-stepper-header[aria-selected=true]~.mat-horizontal-stepper-header:after{border-top-width:3px!important;background-color:#7b7b7b!important;border-top-color:#7b7b7b!important}#cc-import-stepper .mat-horizontal-content-container{padding:0!important;margin-top:3rem}#cc-import-stepper .mat-horizontal-stepper-content[aria-expanded=true]{padding-bottom:0}.step-title{font-size:26px;font-weight:500;width:70%;margin:0 auto 1rem;min-height:32px;display:flex;align-items:center}.wizard-actions{display:flex;flex-flow:row-reverse;justify-content:flex-start;align-items:center;margin:16px 16px 0 0;align-self:flex-end;gap:1rem;position:relative;z-index:30}.uc-btn{border-radius:50px!important;padding:8px 16px!important;min-width:80px!important;line-height:normal!important;cursor:pointer}.uc-btn__inline-content{display:inline-flex;align-items:center;gap:8px}.uc-btn__spinner{width:14px;height:14px;border:2px solid rgba(255,255,255,.5);border-top-color:#fff;border-radius:50%;animation:uc-btn-spin .7s linear infinite}@keyframes uc-btn-spin{to{transform:rotate(360deg)}}.uc-btn-primary{background-color:#000!important;color:#fff!important;border:1px solid black!important}.uc-btn-secondary{background-color:#fff!important;color:#000!important;border:1px solid black!important}.wizard-actions .uc-btn-primary.mat-button-disabled{background-color:#bbb;color:#fff;border:1px solid grey;cursor:default!important;opacity:.3}.move-user-tab-content-box{width:70%;margin:0 auto;background-color:#fff;min-height:350px;border:1px solid #c3c1c1;border-radius:8px;box-sizing:border-box;padding:25px}.wizard-loading-overlay{position:absolute;inset:0;background:rgba(243,243,243,.72);backdrop-filter:blur(1px);opacity:0;pointer-events:none;transition:opacity .18s ease;z-index:20}.wizard-loading-overlay--visible{opacity:1;pointer-events:auto}.cc-import-notice{width:70%;margin:0 auto 1rem;box-sizing:border-box;display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:4px;background-color:#e8f2fc;color:#2a2f3b;font-size:13px;line-height:1.4}.cc-import-notice__icon{display:flex;color:#1170cf;line-height:0}.cc-import-notice__text{flex:1}.cc-import-notice__close{background:none;border:none;padding:0;cursor:pointer;display:flex;color:#5a6172;line-height:0}.cc-import-step-content{display:flex;flex-direction:column;gap:20px;max-width:420px}.cc-import-field{display:flex;flex-direction:column;gap:10px}.cc-import-label{font-size:14px;font-weight:400;line-height:100%;letter-spacing:.1px;color:#2a2f3b}.cc-import-select{width:100%;max-width:333px}.cc-import-empty{margin:0;font-size:13px;color:#5a6172}.cc-import-state{font-size:14px;color:#5a6172}.cc-import-state--error{color:#c0392b}.cc-import-card-title{margin:0 0 8px;font-size:15px;font-weight:700;color:#2a2f3b}.cc-import-card-text{margin:0 0 22px;font-size:14px;line-height:1.6;color:#2a2f3b}.cc-import-tabs{display:flex;flex-wrap:wrap;gap:20px}.cc-import-tab{background:none;border:none;border-bottom:2px solid transparent;padding:0 0 8px;font:inherit;font-size:14px;color:#5a6172;cursor:pointer}.cc-import-tab--active{color:#000;font-weight:600;border-bottom-color:#000}.cc-import-items{list-style:none;margin:18px 0 0;padding:0;display:flex;flex-direction:column;gap:10px}.cc-import-item{font-size:14px;color:#2a2f3b}.cc-import-item--empty{color:#5a6172;font-style:italic}.cc-import-select .mat-form-field-wrapper{padding-bottom:0}.cc-import-select .mat-form-field-flex{align-items:center;height:32px;border:1px solid #767676;border-radius:6px;padding:0 12px}.cc-import-select .mat-form-field-outline,.cc-import-select .mat-form-field-outline-start,.cc-import-select .mat-form-field-outline-end,.cc-import-select .mat-form-field-outline-gap{display:none}.cc-import-select .mat-form-field-infix{width:100%;border-top:0;padding:0}.cc-import-select .mat-select-trigger{display:flex;align-items:center;justify-content:space-between;height:100%}.cc-import-select-panel .option-row{display:flex;justify-content:space-between;align-items:center;width:100%;gap:12px}.cc-import-select-panel .cc-import-option-marker{display:flex;color:#b26a00;line-height:0}.cc-import-select-search{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:8px;margin:4px 8px 8px;padding:0 10px;height:30px;border:1px solid #c3c1c1;border-radius:50px;background-color:#fff}.cc-import-select-search__icon{display:flex;color:#5a6172;line-height:0}.cc-import-select-search__input{flex:1;border:none;outline:none;font:inherit;font-size:13px;color:#2a2f3b;background:transparent}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i2.MatStep, selector: "mat-step", inputs: ["color"], exportAs: ["matStep"] }, { kind: "directive", type: i2.MatStepLabel, selector: "[matStepLabel]" }, { kind: "component", type: i2.MatStepper, selector: "mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]", inputs: ["selectedIndex", "disableRipple", "color", "labelPosition", "headerPosition", "animationDuration"], outputs: ["animationDone"], exportAs: ["matStepper", "matVerticalStepper", "matHorizontalStepper"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "directive", type: i6.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }], encapsulation: i0.ViewEncapsulation.None });
221
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ImportContactCenterWizardComponent, decorators: [{
222
+ type: Component,
223
+ args: [{ selector: 'cc-import-contact-center-wizard', encapsulation: ViewEncapsulation.None, template: "<div class=\"move-user-stepper-container\" [attr.aria-busy]=\"importing\">\r\n <header class=\"move-user-header\">\r\n <div class=\"move-user-header__title\">{{ title }}</div>\r\n <div class=\"move-user-header__close\">\r\n <span class=\"app-icon cc-import-close-icon\" (click)=\"onCancel()\" role=\"button\" aria-label=\"Close\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n <path d=\"M5 5L19 19M19 5L5 19\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </header>\r\n\r\n <div id=\"cc-import-stepper\">\r\n <mat-stepper\r\n #stepper\r\n [linear]=\"true\"\r\n labelPosition=\"bottom\"\r\n [selectedIndex]=\"selectedIndex\"\r\n (selectionChange)=\"onStepSelectionChange($event)\"\r\n >\r\n\r\n <!-- Step 1: pick the UCCX contact center -->\r\n <mat-step [completed]=\"canGoNext\">\r\n <ng-template matStepLabel>Select</ng-template>\r\n\r\n <div class=\"cc-import-notice\" *ngIf=\"showCustomerAssistNotice\" role=\"status\">\r\n <span class=\"cc-import-notice__icon\" aria-hidden=\"true\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"7\" fill=\"currentColor\" />\r\n <path d=\"M8 7.1v4.2\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\r\n <circle cx=\"8\" cy=\"4.8\" r=\"0.9\" fill=\"#fff\" />\r\n </svg>\r\n </span>\r\n <span class=\"cc-import-notice__text\">{{ customerAssistNotice }}</span>\r\n <button type=\"button\" class=\"cc-import-notice__close\" aria-label=\"Dismiss\" (click)=\"dismissNotice()\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n <path d=\"M5 5L19 19M19 5L5 19\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"step-title\">Step 1: Select contact center</div>\r\n\r\n <div class=\"move-user-tab-content-box\">\r\n <div class=\"cc-import-state\" *ngIf=\"loading\">Loading contact centers&hellip;</div>\r\n <div class=\"cc-import-state cc-import-state--error\" *ngIf=\"!loading && error\">\r\n Unable to load contact centers.\r\n </div>\r\n\r\n <section class=\"cc-import-step-content\" *ngIf=\"!loading && !error\">\r\n <div class=\"cc-import-field\">\r\n <label class=\"cc-import-label\" for=\"cc-import-contact-center\">Contact center</label>\r\n\r\n <mat-form-field class=\"cc-import-select\" appearance=\"outline\">\r\n <mat-select\r\n id=\"cc-import-contact-center\"\r\n panelClass=\"cc-import-select-panel\"\r\n placeholder=\"Select contact center\"\r\n [disableOptionCentering]=\"true\"\r\n [value]=\"selected?.applicationId ?? null\"\r\n (selectionChange)=\"onSelect($event.value)\"\r\n (openedChange)=\"onPanelToggle($event)\"\r\n >\r\n <mat-select-trigger>{{ selected?.applicationName }}</mat-select-trigger>\r\n\r\n <!-- Search box pinned above the options. Keystrokes are stopped here so\r\n mat-select's own typeahead does not steal them. -->\r\n <div class=\"cc-import-select-search\" (click)=\"$event.stopPropagation()\">\r\n <span class=\"cc-import-select-search__icon\" aria-hidden=\"true\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <circle cx=\"7\" cy=\"7\" r=\"4.6\" stroke=\"currentColor\" stroke-width=\"1.4\" />\r\n <path d=\"M10.6 10.6L14 14\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\r\n </svg>\r\n </span>\r\n <input\r\n class=\"cc-import-select-search__input\"\r\n type=\"text\"\r\n autocomplete=\"off\"\r\n placeholder=\"Search\"\r\n aria-label=\"Search contact centers\"\r\n [value]=\"searchTerm\"\r\n (input)=\"onSearch($event)\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n />\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option.applicationId\">\r\n <div class=\"option-row\">\r\n <span class=\"name\">{{ option.applicationName }}</span>\r\n <span\r\n class=\"cc-import-option-marker\"\r\n *ngIf=\"option.customerAssistCapable\"\r\n [matTooltip]=\"customerAssistMarkerTooltip\"\r\n aria-hidden=\"true\"\r\n >\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8 2.2 14.6 13.4H1.4L8 2.2Z\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linejoin=\"round\" />\r\n <path d=\"M8 6.5v3\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\r\n <circle cx=\"8\" cy=\"11.3\" r=\"0.7\" fill=\"currentColor\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <p class=\"cc-import-empty\" *ngIf=\"!options.length\">\r\n Every detected contact center has already been imported.\r\n </p>\r\n </div>\r\n </section>\r\n </div>\r\n </mat-step>\r\n\r\n <!-- Step 2: the entities Tuki will create for it -->\r\n <mat-step>\r\n <ng-template matStepLabel>Overview</ng-template>\r\n\r\n <div class=\"step-title\">Overview</div>\r\n\r\n <div class=\"move-user-tab-content-box\">\r\n <h3 class=\"cc-import-card-title\">Review Contact Center Settings</h3>\r\n <p class=\"cc-import-card-text\">\r\n Review the settings for your new Contact center to make sure everything is correct.<br />\r\n You can make changes at any time by clicking on the name of the contact center on the dedicated page.\r\n </p>\r\n\r\n <div class=\"cc-import-state\" *ngIf=\"entitiesLoading\">Loading entities&hellip;</div>\r\n <div class=\"cc-import-state cc-import-state--error\" *ngIf=\"entitiesError\">\r\n Unable to load the related entities.\r\n </div>\r\n\r\n <ng-container *ngIf=\"!entitiesLoading && !entitiesError && entityGroups.length\">\r\n <div class=\"cc-import-tabs\" role=\"tablist\">\r\n <button\r\n type=\"button\"\r\n class=\"cc-import-tab\"\r\n *ngFor=\"let group of entityGroups; index as i\"\r\n role=\"tab\"\r\n [attr.aria-selected]=\"i === activeGroupIndex\"\r\n [class.cc-import-tab--active]=\"i === activeGroupIndex\"\r\n (click)=\"selectGroup(i)\"\r\n >\r\n {{ group.label }}\r\n </button>\r\n </div>\r\n\r\n <ul class=\"cc-import-items\" role=\"tabpanel\">\r\n <li class=\"cc-import-item\" *ngFor=\"let item of activeGroup?.items\">{{ item }}</li>\r\n <li class=\"cc-import-item cc-import-item--empty\" *ngIf=\"!activeGroup?.items?.length\">\r\n Nothing to create for {{ activeGroup?.label }}.\r\n </li>\r\n </ul>\r\n </ng-container>\r\n\r\n <div class=\"cc-import-state cc-import-state--error\" *ngIf=\"importError\">\r\n Unable to start the import. Please try again.\r\n </div>\r\n </div>\r\n </mat-step>\r\n </mat-stepper>\r\n\r\n <div class=\"wizard-actions\">\r\n <ng-container [ngSwitch]=\"stepper.selectedIndex\">\r\n <ng-container *ngSwitchCase=\"0\">\r\n <button\r\n mat-button\r\n class=\"uc-btn uc-btn-primary\"\r\n type=\"button\"\r\n [disabled]=\"!canGoNext\"\r\n (click)=\"onNext(stepper)\"\r\n >\r\n Next\r\n </button>\r\n <button mat-button class=\"uc-btn uc-btn-secondary\" type=\"button\" (click)=\"onCancel()\">\r\n Cancel\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"1\">\r\n <button\r\n mat-button\r\n class=\"uc-btn uc-btn-primary\"\r\n type=\"button\"\r\n [disabled]=\"!canImport\"\r\n (click)=\"runImport()\"\r\n >\r\n <span class=\"uc-btn__inline-content\">\r\n <span class=\"uc-btn__spinner\" *ngIf=\"importing\" aria-hidden=\"true\"></span>\r\n <span>{{ importing ? 'Importing...' : 'Import' }}</span>\r\n </span>\r\n </button>\r\n <button\r\n mat-button\r\n class=\"uc-btn uc-btn-secondary\"\r\n type=\"button\"\r\n [disabled]=\"importing\"\r\n (click)=\"onPrevious(stepper)\"\r\n >\r\n Previous\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"wizard-loading-overlay\" [class.wizard-loading-overlay--visible]=\"importing\" aria-hidden=\"true\"></div>\r\n</div>\r\n", styles: ["cc-import-contact-center-wizard{display:block;width:100%;min-height:100vh}.move-user-stepper-container{background-color:#f3f3f3;padding:0 0 16px;position:relative;overflow:hidden;box-sizing:border-box;min-height:100vh;display:flex;flex-direction:column}.move-user-header{background-color:#1170cf;height:45px;padding:1rem 1.5rem;display:flex;align-items:center;justify-content:space-between;color:#fff;font-size:18px;font-weight:500}.move-user-header__close{cursor:pointer;display:flex;align-items:center;justify-content:center;line-height:0}.app-icon{height:20px;width:20px;display:block;cursor:pointer}.cc-import-close-icon{color:#fffffff2}#cc-import-stepper{display:flex;flex-direction:column;width:100%;flex:1 1 auto;min-height:0}#cc-import-stepper .mat-stepper-horizontal{margin:0 auto;width:100%;background-color:transparent;display:flex;flex-direction:column;flex:1 1 auto;min-height:0}#cc-import-stepper .mat-horizontal-stepper-header-container{margin:0 auto;width:800px}#cc-import-stepper .mat-step-icon{width:28px;height:28px;border:3px solid hsl(0,0%,50.2%)}#cc-import-stepper .mat-step-icon-selected{background-color:#c6c6c6!important;border-color:#19487d}#cc-import-stepper .mat-step-icon-state-number{background-color:#fff}#cc-import-stepper .mat-step-icon-state-edit,#cc-import-stepper .mat-step-header .mat-step-icon-state-done{background-color:#1170cf;border-color:#1170cf}#cc-import-stepper .mat-step-icon-content{display:none}#cc-import-stepper .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child):before,#cc-import-stepper [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child):before,#cc-import-stepper .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child):after,#cc-import-stepper [dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child):after{border-top-width:3px!important}#cc-import-stepper .mat-horizontal-stepper-header:before,#cc-import-stepper .mat-horizontal-stepper-header:after,#cc-import-stepper .mat-stepper-horizontal-line{border-top-color:#1170cf!important;border-top-width:3px!important;border-top-style:solid!important}#cc-import-stepper .mat-horizontal-stepper-header[aria-selected=true]~.mat-stepper-horizontal-line,#cc-import-stepper .mat-horizontal-stepper-header[aria-selected=true]~.mat-horizontal-stepper-header:before,#cc-import-stepper .mat-horizontal-stepper-header[aria-selected=true]~.mat-horizontal-stepper-header:after{border-top-width:3px!important;background-color:#7b7b7b!important;border-top-color:#7b7b7b!important}#cc-import-stepper .mat-horizontal-content-container{padding:0!important;margin-top:3rem}#cc-import-stepper .mat-horizontal-stepper-content[aria-expanded=true]{padding-bottom:0}.step-title{font-size:26px;font-weight:500;width:70%;margin:0 auto 1rem;min-height:32px;display:flex;align-items:center}.wizard-actions{display:flex;flex-flow:row-reverse;justify-content:flex-start;align-items:center;margin:16px 16px 0 0;align-self:flex-end;gap:1rem;position:relative;z-index:30}.uc-btn{border-radius:50px!important;padding:8px 16px!important;min-width:80px!important;line-height:normal!important;cursor:pointer}.uc-btn__inline-content{display:inline-flex;align-items:center;gap:8px}.uc-btn__spinner{width:14px;height:14px;border:2px solid rgba(255,255,255,.5);border-top-color:#fff;border-radius:50%;animation:uc-btn-spin .7s linear infinite}@keyframes uc-btn-spin{to{transform:rotate(360deg)}}.uc-btn-primary{background-color:#000!important;color:#fff!important;border:1px solid black!important}.uc-btn-secondary{background-color:#fff!important;color:#000!important;border:1px solid black!important}.wizard-actions .uc-btn-primary.mat-button-disabled{background-color:#bbb;color:#fff;border:1px solid grey;cursor:default!important;opacity:.3}.move-user-tab-content-box{width:70%;margin:0 auto;background-color:#fff;min-height:350px;border:1px solid #c3c1c1;border-radius:8px;box-sizing:border-box;padding:25px}.wizard-loading-overlay{position:absolute;inset:0;background:rgba(243,243,243,.72);backdrop-filter:blur(1px);opacity:0;pointer-events:none;transition:opacity .18s ease;z-index:20}.wizard-loading-overlay--visible{opacity:1;pointer-events:auto}.cc-import-notice{width:70%;margin:0 auto 1rem;box-sizing:border-box;display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:4px;background-color:#e8f2fc;color:#2a2f3b;font-size:13px;line-height:1.4}.cc-import-notice__icon{display:flex;color:#1170cf;line-height:0}.cc-import-notice__text{flex:1}.cc-import-notice__close{background:none;border:none;padding:0;cursor:pointer;display:flex;color:#5a6172;line-height:0}.cc-import-step-content{display:flex;flex-direction:column;gap:20px;max-width:420px}.cc-import-field{display:flex;flex-direction:column;gap:10px}.cc-import-label{font-size:14px;font-weight:400;line-height:100%;letter-spacing:.1px;color:#2a2f3b}.cc-import-select{width:100%;max-width:333px}.cc-import-empty{margin:0;font-size:13px;color:#5a6172}.cc-import-state{font-size:14px;color:#5a6172}.cc-import-state--error{color:#c0392b}.cc-import-card-title{margin:0 0 8px;font-size:15px;font-weight:700;color:#2a2f3b}.cc-import-card-text{margin:0 0 22px;font-size:14px;line-height:1.6;color:#2a2f3b}.cc-import-tabs{display:flex;flex-wrap:wrap;gap:20px}.cc-import-tab{background:none;border:none;border-bottom:2px solid transparent;padding:0 0 8px;font:inherit;font-size:14px;color:#5a6172;cursor:pointer}.cc-import-tab--active{color:#000;font-weight:600;border-bottom-color:#000}.cc-import-items{list-style:none;margin:18px 0 0;padding:0;display:flex;flex-direction:column;gap:10px}.cc-import-item{font-size:14px;color:#2a2f3b}.cc-import-item--empty{color:#5a6172;font-style:italic}.cc-import-select .mat-form-field-wrapper{padding-bottom:0}.cc-import-select .mat-form-field-flex{align-items:center;height:32px;border:1px solid #767676;border-radius:6px;padding:0 12px}.cc-import-select .mat-form-field-outline,.cc-import-select .mat-form-field-outline-start,.cc-import-select .mat-form-field-outline-end,.cc-import-select .mat-form-field-outline-gap{display:none}.cc-import-select .mat-form-field-infix{width:100%;border-top:0;padding:0}.cc-import-select .mat-select-trigger{display:flex;align-items:center;justify-content:space-between;height:100%}.cc-import-select-panel .option-row{display:flex;justify-content:space-between;align-items:center;width:100%;gap:12px}.cc-import-select-panel .cc-import-option-marker{display:flex;color:#b26a00;line-height:0}.cc-import-select-search{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:8px;margin:4px 8px 8px;padding:0 10px;height:30px;border:1px solid #c3c1c1;border-radius:50px;background-color:#fff}.cc-import-select-search__icon{display:flex;color:#5a6172;line-height:0}.cc-import-select-search__input{flex:1;border:none;outline:none;font:inherit;font-size:13px;color:#2a2f3b;background:transparent}\n"] }]
224
+ }], propDecorators: { title: [{
225
+ type: Input
226
+ }], customerId: [{
227
+ type: Input
228
+ }], host: [{
229
+ type: Input
230
+ }], dcpHost: [{
231
+ type: Input
232
+ }], token: [{
233
+ type: Input
234
+ }], useMockData: [{
235
+ type: Input
236
+ }], contactCenters: [{
237
+ type: Input
238
+ }], cancel: [{
239
+ type: Output
240
+ }], imported: [{
241
+ type: Output
242
+ }] } });
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWNvbnRhY3QtY2VudGVyLXdpemFyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvY29udGFjdC1jZW50ZXIvY2MtaW1wb3J0L2NvbXBvbmVudHMvaW1wb3J0LWNvbnRhY3QtY2VudGVyLXdpemFyZC9pbXBvcnQtY29udGFjdC1jZW50ZXItd2l6YXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9jb250YWN0LWNlbnRlci9jYy1pbXBvcnQvY29tcG9uZW50cy9pbXBvcnQtY29udGFjdC1jZW50ZXItd2l6YXJkL2ltcG9ydC1jb250YWN0LWNlbnRlci13aXphcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvSSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVsSSxPQUFPLEVBQUUsbUJBQW1CLEVBQXNCLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7OztBQUUvRjs7Ozs7OztHQU9HO0FBT0gsTUFBTSxPQUFPLGtDQUFrQztJQU4vQztRQU9hLFVBQUssR0FBRyxtQkFBbUIsQ0FBQztRQU1yQyxpRUFBaUU7UUFDeEQsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDNUI7OztXQUdHO1FBQ00sbUJBQWMsR0FBMkIs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QU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFLRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdFbmNhcHN1bGF0aW9uLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3RlcHBlclNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3N0ZXBwZXInO1xyXG5pbXBvcnQgeyBNYXRTdGVwcGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc3RlcHBlcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgY2F0Y2hFcnJvciwgZmluYWxpemUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENjSW1wb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL2NjLWltcG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ1VTVE9NRVJfQVNTSVNUX01BUktFUl9UT09MVElQLCBDVVNUT01FUl9BU1NJU1RfTk9USUNFLCBJTVBPUlRfV0laQVJEX1RJVExFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NjLWltcG9ydC5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBDb250YWN0Q2VudGVyLCBDb250YWN0Q2VudGVyRW50aXR5R3JvdXAsIEltcG9ydFJlc3VsdCB9IGZyb20gJy4uLy4uL3R5cGVzL2NjLWltcG9ydCc7XHJcbmltcG9ydCB7IElNUE9SVF9XSVpBUkRfU1RFUFMsIEltcG9ydFdpemFyZFN0ZXBJZCB9IGZyb20gJy4vaW1wb3J0LWNvbnRhY3QtY2VudGVyLXdpemFyZC50eXBlcyc7XHJcblxyXG4vKipcclxuICogRnVsbC1wYWdlIFwiSW1wb3J0IGNvbnRhY3QgY2VudGVyXCIgd2l6YXJkOiBwaWNrIGEgVUNDWCBjb250YWN0IGNlbnRlciwgcmV2aWV3IHRoZVxyXG4gKiBlbnRpdGllcyBUdWtpIHdpbGwgY3JlYXRlIGZvciBpdCwgdGhlbiBzdGFydCB0aGUgaW1wb3J0LlxyXG4gKlxyXG4gKiBSZW5kZXJlZCBhcyBhIHBhZ2UgYnkgdGhlIGhvc3QgYXBwIChsaWtlIGB0ay11c2VyLWNyZWF0aW9uLXdpemFyZGApLCBub3QgYXMgYSBkaWFsb2cgLVxyXG4gKiB0aGUgaG9zdCBzd2FwcyBpdCBpbiB3aGVuIHRoZSBwYW5lbCdzIEltcG9ydCBidXR0b24gaXMgcHJlc3NlZCBhbmQgc3dhcHMgaXQgYmFjayBvdXRcclxuICogb24gYGNhbmNlbGAgLyBgaW1wb3J0ZWRgLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NjLWltcG9ydC1jb250YWN0LWNlbnRlci13aXphcmQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ltcG9ydC1jb250YWN0LWNlbnRlci13aXphcmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vaW1wb3J0LWNvbnRhY3QtY2VudGVyLXdpemFyZC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1wb3J0Q29udGFjdENlbnRlcldpemFyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gICAgQElucHV0KCkgdGl0bGUgPSBJTVBPUlRfV0laQVJEX1RJVExFO1xyXG4gICAgQElucHV0KCkgY3VzdG9tZXJJZCE6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIGhvc3QhOiBzdHJpbmc7XHJcbiAgICAvKiogQmFzZSBVUkwgb2YgdGhlIGRjcCBob3N0LCB3aGljaCBzZXJ2ZXMgdGhlIFVDQ1ggYXBwbGljYXRpb24gbGlzdC4gKi9cclxuICAgIEBJbnB1dCgpIGRjcEhvc3QhOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSB0b2tlbiE6IHN0cmluZztcclxuICAgIC8qKiBTZXJ2ZSBtb2NrIGRhdGEgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBVQ0NYIG1pZ3JhdGlvbiBBUEkuICovXHJcbiAgICBASW5wdXQoKSB1c2VNb2NrRGF0YSA9IHRydWU7XHJcbiAgICAvKipcclxuICAgICAqIENvbnRhY3QgY2VudGVycyB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGxvYWRlZCAodGhlIHBhbmVsIGhhcyB0aGVtKSwgc28gdGhlIHdpemFyZFxyXG4gICAgICogb3BlbnMgd2l0aG91dCBhIHNlY29uZCByb3VuZCB0cmlwLiBMZWZ0IHVuc2V0LCB0aGUgd2l6YXJkIGZldGNoZXMgdGhlbSBpdHNlbGYuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGNvbnRhY3RDZW50ZXJzOiBDb250YWN0Q2VudGVyW10gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgQE91dHB1dCgpIGltcG9ydGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJbXBvcnRSZXN1bHQ+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjY0ltcG9ydFNlcnZpY2UgPSBpbmplY3QoQ2NJbXBvcnRTZXJ2aWNlKTtcclxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgICByZWFkb25seSBjdXN0b21lckFzc2lzdE5vdGljZSA9IENVU1RPTUVSX0FTU0lTVF9OT1RJQ0U7XHJcbiAgICByZWFkb25seSBjdXN0b21lckFzc2lzdE1hcmtlclRvb2x0aXAgPSBDVVNUT01FUl9BU1NJU1RfTUFSS0VSX1RPT0xUSVA7XHJcblxyXG4gICAgc2VsZWN0ZWRJbmRleCA9IDA7XHJcblxyXG4gICAgLyoqIENvbnRhY3QgY2VudGVycyBhd2FpdGluZyByZXZpZXcgLSB0aGUgb25lcyB0aGVyZSBpcyBzb21ldGhpbmcgdG8gaW1wb3J0LiAqL1xyXG4gICAgb3B0aW9uczogQ29udGFjdENlbnRlcltdID0gW107XHJcbiAgICAvKiogYG9wdGlvbnNgIG5hcnJvd2VkIGJ5IHRoZSBwaWNrZXIncyBzZWFyY2ggYm94LiAqL1xyXG4gICAgZmlsdGVyZWRPcHRpb25zOiBDb250YWN0Q2VudGVyW10gPSBbXTtcclxuICAgIHNlYXJjaFRlcm0gPSAnJztcclxuICAgIHNlbGVjdGVkOiBDb250YWN0Q2VudGVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICBub3RpY2VEaXNtaXNzZWQgPSBmYWxzZTtcclxuICAgIGxvYWRpbmcgPSBmYWxzZTtcclxuICAgIGVycm9yID0gZmFsc2U7XHJcblxyXG4gICAgZW50aXR5R3JvdXBzOiBDb250YWN0Q2VudGVyRW50aXR5R3JvdXBbXSA9IFtdO1xyXG4gICAgLyoqIFdoaWNoIGVudGl0eSBncm91cCB0aGUgT3ZlcnZpZXcgc3RlcCdzIHRhYiBiYXIgaXMgc2hvd2luZy4gKi9cclxuICAgIGFjdGl2ZUdyb3VwSW5kZXggPSAwO1xyXG4gICAgZW50aXRpZXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBlbnRpdGllc0Vycm9yID0gZmFsc2U7XHJcblxyXG4gICAgaW1wb3J0aW5nID0gZmFsc2U7XHJcbiAgICBpbXBvcnRFcnJvciA9IGZhbHNlO1xyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCByZWxvYWRUcmlnZ2VycyA9IFsnY3VzdG9tZXJJZCcsICdob3N0JywgJ2RjcEhvc3QnLCAndG9rZW4nLCAndXNlTW9ja0RhdGEnLCAnY29udGFjdENlbnRlcnMnXTtcclxuICAgICAgICBpZiAocmVsb2FkVHJpZ2dlcnMuc29tZShpbnB1dCA9PiBjaGFuZ2VzW2lucHV0XSAmJiAhY2hhbmdlc1tpbnB1dF0uZmlyc3RDaGFuZ2UpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2FuR29OZXh0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRoZSBDdXN0b21lciBBc3Npc3QgYWR2aXNvcnksIHVudGlsIHRoZSB1c2VyIGRpc21pc3NlcyBpdCBvciBwaWNrcyBzb21ldGhpbmcgZWxzZS4gKi9cclxuICAgIGdldCBzaG93Q3VzdG9tZXJBc3Npc3ROb3RpY2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zZWxlY3RlZD8uY3VzdG9tZXJBc3Npc3RDYXBhYmxlICYmICF0aGlzLm5vdGljZURpc21pc3NlZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2FuSW1wb3J0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWQgJiYgIXRoaXMuaW1wb3J0aW5nICYmICF0aGlzLmVudGl0aWVzTG9hZGluZyAmJiAhdGhpcy5lbnRpdGllc0Vycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FuY2VsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdChhcHBsaWNhdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMub3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24uYXBwbGljYXRpb25JZCA9PT0gYXBwbGljYXRpb25JZCkgPz8gbnVsbDtcclxuICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkO1xyXG4gICAgICAgIHRoaXMubm90aWNlRGlzbWlzc2VkID0gZmFsc2U7XHJcbiAgICAgICAgLy8gRW50aXRpZXMgYmVsb25nIHRvIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIGNvbnRhY3QgY2VudGVyIC0gZHJvcCB0aGVtIHNvIHRoZVxyXG4gICAgICAgIC8vIG92ZXJ2aWV3IHN0ZXAgcmVmZXRjaGVzIGZvciB0aGUgbmV3IG9uZS5cclxuICAgICAgICB0aGlzLmVudGl0eUdyb3VwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlR3JvdXBJbmRleCA9IDA7XHJcbiAgICAgICAgdGhpcy5lbnRpdGllc0Vycm9yID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGFjdGl2ZUdyb3VwKCk6IENvbnRhY3RDZW50ZXJFbnRpdHlHcm91cCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50aXR5R3JvdXBzW3RoaXMuYWN0aXZlR3JvdXBJbmRleF07XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0R3JvdXAoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlR3JvdXBJbmRleCA9IGluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIGRpc21pc3NOb3RpY2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ub3RpY2VEaXNtaXNzZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2VhcmNoKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGVybSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogUmVzZXRzIHRoZSBzZWFyY2ggYm94IGVhY2ggdGltZSB0aGUgcGlja2VyJ3MgcGFuZWwgaXMgY2xvc2VkLiAqL1xyXG4gICAgb25QYW5lbFRvZ2dsZShvcGVuZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBpZiAoIW9wZW5lZCAmJiB0aGlzLnNlYXJjaFRlcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU3RlcFNlbGVjdGlvbkNoYW5nZShldmVudDogU3RlcHBlclNlbGVjdGlvbkV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gZXZlbnQuc2VsZWN0ZWRJbmRleDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RlcElkQXQoZXZlbnQuc2VsZWN0ZWRJbmRleCkgPT09ICdvdmVydmlldycpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkRW50aXRpZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25OZXh0KHN0ZXBwZXI6IE1hdFN0ZXBwZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5Hb05leHQpIHtcclxuICAgICAgICAgICAgc3RlcHBlci5uZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUHJldmlvdXMoc3RlcHBlcjogTWF0U3RlcHBlcik6IHZvaWQge1xyXG4gICAgICAgIHN0ZXBwZXIucHJldmlvdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBydW5JbXBvcnQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkIHx8IHRoaXMuaW1wb3J0aW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW1wb3J0aW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmltcG9ydEVycm9yID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXHJcbiAgICAgICAgICAgIHRoaXMuY2NJbXBvcnRTZXJ2aWNlLmltcG9ydENvbnRhY3RDZW50ZXIoTnVtYmVyKHRoaXMuY3VzdG9tZXJJZCksIHRoaXMuc2VsZWN0ZWQuYXBwbGljYXRpb25JZClcclxuICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmFibGUgdG8gc3RhcnQgdGhlIGNvbnRhY3QtY2VudGVyIGltcG9ydCcsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbXBvcnRFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZjxJbXBvcnRSZXN1bHQgfCBudWxsPihudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmltcG9ydGluZyA9IGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbXBvcnRlZC5lbWl0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RlcElkQXQoaW5kZXg6IG51bWJlcik6IEltcG9ydFdpemFyZFN0ZXBJZCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIElNUE9SVF9XSVpBUkRfU1RFUFNbaW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNjSW1wb3J0U2VydmljZS51c2VNb2NrRGF0YSA9IHRoaXMudXNlTW9ja0RhdGE7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmhvc3QpIHtcclxuICAgICAgICAgICAgdGhpcy5jY0ltcG9ydFNlcnZpY2Uuc2V0SG9zdCh0aGlzLmhvc3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5kY3BIb3N0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2NJbXBvcnRTZXJ2aWNlLnNldERjcEhvc3QodGhpcy5kY3BIb3N0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudG9rZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5jY0ltcG9ydFNlcnZpY2Uuc2V0VG9rZW4odGhpcy50b2tlbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb250YWN0Q2VudGVycykge1xyXG4gICAgICAgICAgICB0aGlzLnNldE9wdGlvbnModGhpcy5jb250YWN0Q2VudGVycyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGN1c3RvbWVySWQgPSBOdW1iZXIodGhpcy5jdXN0b21lcklkKTtcclxuICAgICAgICBpZiAoIXRoaXMudXNlTW9ja0RhdGEgJiYgKCFjdXN0b21lcklkIHx8ICF0aGlzLnRva2VuKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcclxuICAgICAgICAgICAgdGhpcy5jY0ltcG9ydFNlcnZpY2UuZmV0Y2hDb250YWN0Q2VudGVycyhjdXN0b21lcklkKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBsb2FkIHRoZSBjb250YWN0IGNlbnRlcnMnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Y8Q29udGFjdENlbnRlcltdPihbXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGNvbnRhY3RDZW50ZXJzID0+IHRoaXMuc2V0T3B0aW9ucyhjb250YWN0Q2VudGVycykpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldE9wdGlvbnMoY29udGFjdENlbnRlcnM6IENvbnRhY3RDZW50ZXJbXSk6IHZvaWQge1xyXG4gICAgICAgIC8vIExlZnQgaW4gc291cmNlIG9yZGVyIG9uIHB1cnBvc2UgLSB0aGUgcGlja2VyIHNob3dzIHRoZW0gdGhlIHdheSB0aGUgYmFja2VuZFxyXG4gICAgICAgIC8vIChhbmQgdGhlIG1vY2spIGhhbmRzIHRoZW0gb3Zlciwgbm90IGFscGhhYmV0aWNhbGx5LlxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gRWxpZ2libGUgZm9yIGEgV2ViZXggQ29udGFjdCBDZW50ZXIgaW1wb3J0OiBub3QgaW1wb3J0ZWQgeWV0LCBhbmQgZWl0aGVyXHJcbiAgICAgICAgLy8gdW5zdXBwb3J0ZWQgb24gQ3VzdG9tZXIgQXNzaXN0IG9yIHJldmlld2FibGUgZm9yIGZ1bGwgZmVhdHVyZSBjb3ZlcmFnZS5cclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBjb250YWN0Q2VudGVycy5maWx0ZXIoY29udGFjdENlbnRlciA9PlxyXG4gICAgICAgICAgICBjb250YWN0Q2VudGVyLm1pZ3JhdGlvblN0YXRlICE9PSAnbWlncmF0ZWQnXHJcbiAgICAgICAgICAgICYmIChjb250YWN0Q2VudGVyLmNvbXBhdGliaWxpdHlTdGF0dXMgPT09ICd1bnN1cHBvcnRlZCdcclxuICAgICAgICAgICAgICAgIHx8IGNvbnRhY3RDZW50ZXIuY29tcGF0aWJpbGl0eVN0YXR1cyA9PT0gJ3JlcXVpcmVzLXJldmlldycpKTtcclxuXHJcbiAgICAgICAgLy8gQSBjb250YWN0IGNlbnRlciBzZWxlY3RlZCBiZWZvcmUgYSByZWxvYWQgbWF5IG5vIGxvbmdlciBiZSBpbXBvcnRhYmxlLlxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkICYmICF0aGlzLm9wdGlvbnMuc29tZShvcHRpb24gPT4gb3B0aW9uLmFwcGxpY2F0aW9uSWQgPT09IHRoaXMuc2VsZWN0ZWQ/LmFwcGxpY2F0aW9uSWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmVudGl0eUdyb3VwcyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUdyb3VwSW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbHRlcigpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBuZWVkbGUgPSB0aGlzLnNlYXJjaFRlcm0udHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBuZWVkbGVcclxuICAgICAgICAgICAgPyB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24uYXBwbGljYXRpb25OYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobmVlZGxlKSlcclxuICAgICAgICAgICAgOiB0aGlzLm9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkRW50aXRpZXMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkIHx8IHRoaXMuZW50aXR5R3JvdXBzLmxlbmd0aCB8fCB0aGlzLmVudGl0aWVzTG9hZGluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVudGl0aWVzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lbnRpdGllc0Vycm9yID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXHJcbiAgICAgICAgICAgIHRoaXMuY2NJbXBvcnRTZXJ2aWNlLmZldGNoQ29udGFjdENlbnRlckVudGl0aWVzKE51bWJlcih0aGlzLmN1c3RvbWVySWQpLCB0aGlzLnNlbGVjdGVkKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBsb2FkIHRoZSBjb250YWN0LWNlbnRlciBlbnRpdGllcycsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuZW50aXRpZXNMb2FkaW5nID0gZmFsc2UpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGVudGl0aWVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0eUdyb3VwcyA9IGVudGl0aWVzID8gZW50aXRpZXMuZ3JvdXBzIDogW107XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVHcm91cEluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibW92ZS11c2VyLXN0ZXBwZXItY29udGFpbmVyXCIgW2F0dHIuYXJpYS1idXN5XT1cImltcG9ydGluZ1wiPlxyXG4gIDxoZWFkZXIgY2xhc3M9XCJtb3ZlLXVzZXItaGVhZGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW92ZS11c2VyLWhlYWRlcl9fdGl0bGVcIj57eyB0aXRsZSB9fTwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vdmUtdXNlci1oZWFkZXJfX2Nsb3NlXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiYXBwLWljb24gY2MtaW1wb3J0LWNsb3NlLWljb25cIiAoY2xpY2spPVwib25DYW5jZWwoKVwiIHJvbGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cclxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk01IDVMMTkgMTlNMTkgNUw1IDE5XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS43XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvaGVhZGVyPlxyXG5cclxuICA8ZGl2IGlkPVwiY2MtaW1wb3J0LXN0ZXBwZXJcIj5cclxuICAgIDxtYXQtc3RlcHBlclxyXG4gICAgICAjc3RlcHBlclxyXG4gICAgICBbbGluZWFyXT1cInRydWVcIlxyXG4gICAgICBsYWJlbFBvc2l0aW9uPVwiYm90dG9tXCJcclxuICAgICAgW3NlbGVjdGVkSW5kZXhdPVwic2VsZWN0ZWRJbmRleFwiXHJcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TdGVwU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgPlxyXG5cclxuICAgICAgPCEtLSBTdGVwIDE6IHBpY2sgdGhlIFVDQ1ggY29udGFjdCBjZW50ZXIgLS0+XHJcbiAgICAgIDxtYXQtc3RlcCBbY29tcGxldGVkXT1cImNhbkdvTmV4dFwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+U2VsZWN0PC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNjLWltcG9ydC1ub3RpY2VcIiAqbmdJZj1cInNob3dDdXN0b21lckFzc2lzdE5vdGljZVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2MtaW1wb3J0LW5vdGljZV9faWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI4XCIgY3k9XCI4XCIgcj1cIjdcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgLz5cclxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTggNy4xdjQuMlwiIHN0cm9rZT1cIiNmZmZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiNC44XCIgcj1cIjAuOVwiIGZpbGw9XCIjZmZmXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNjLWltcG9ydC1ub3RpY2VfX3RleHRcIj57eyBjdXN0b21lckFzc2lzdE5vdGljZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2MtaW1wb3J0LW5vdGljZV9fY2xvc2VcIiBhcmlhLWxhYmVsPVwiRGlzbWlzc1wiIChjbGljayk9XCJkaXNtaXNzTm90aWNlKClcIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTUgNUwxOSAxOU0xOSA1TDUgMTlcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwLXRpdGxlXCI+U3RlcCAxOiBTZWxlY3QgY29udGFjdCBjZW50ZXI8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vdmUtdXNlci10YWItY29udGVudC1ib3hcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYy1pbXBvcnQtc3RhdGVcIiAqbmdJZj1cImxvYWRpbmdcIj5Mb2FkaW5nIGNvbnRhY3QgY2VudGVycyZoZWxsaXA7PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2MtaW1wb3J0LXN0YXRlIGNjLWltcG9ydC1zdGF0ZS0tZXJyb3JcIiAqbmdJZj1cIiFsb2FkaW5nICYmIGVycm9yXCI+XHJcbiAgICAgICAgICAgIFVuYWJsZSB0byBsb2FkIGNvbnRhY3QgY2VudGVycy5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2MtaW1wb3J0LXN0ZXAtY29udGVudFwiICpuZ0lmPVwiIWxvYWRpbmcgJiYgIWVycm9yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYy1pbXBvcnQtZmllbGRcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjYy1pbXBvcnQtbGFiZWxcIiBmb3I9XCJjYy1pbXBvcnQtY29udGFjdC1jZW50ZXJcIj5Db250YWN0IGNlbnRlcjwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNjLWltcG9ydC1zZWxlY3RcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgaWQ9XCJjYy1pbXBvcnQtY29udGFjdC1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwiY2MtaW1wb3J0LXNlbGVjdC1wYW5lbFwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGNvbnRhY3QgY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVPcHRpb25DZW50ZXJpbmddPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZD8uYXBwbGljYXRpb25JZCA/PyBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdCgkZXZlbnQudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgKG9wZW5lZENoYW5nZSk9XCJvblBhbmVsVG9nZ2xlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPnt7IHNlbGVjdGVkPy5hcHBsaWNhdGlvbk5hbWUgfX08L21hdC1zZWxlY3QtdHJpZ2dlcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJveCBwaW5uZWQgYWJvdmUgdGhlIG9wdGlvbnMuIEtleXN0cm9rZXMgYXJlIHN0b3BwZWQgaGVyZSBzb1xyXG4gICAgICAgICAgICAgICAgICAgICAgIG1hdC1zZWxlY3QncyBvd24gdHlwZWFoZWFkIGRvZXMgbm90IHN0ZWFsIHRoZW0uIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2MtaW1wb3J0LXNlbGVjdC1zZWFyY2hcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYy1pbXBvcnQtc2VsZWN0LXNlYXJjaF9faWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjdcIiBjeT1cIjdcIiByPVwiNC42XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS40XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC42IDEwLjZMMTQgMTRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2MtaW1wb3J0LXNlbGVjdC1zZWFyY2hfX2lucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2VhcmNoIGNvbnRhY3QgY2VudGVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VhcmNoVGVybVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25TZWFyY2goJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLmFwcGxpY2F0aW9uSWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYW1lXCI+e3sgb3B0aW9uLmFwcGxpY2F0aW9uTmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2MtaW1wb3J0LW9wdGlvbi1tYXJrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5jdXN0b21lckFzc2lzdENhcGFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJjdXN0b21lckFzc2lzdE1hcmtlclRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOCAyLjIgMTQuNiAxMy40SDEuNEw4IDIuMlpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04IDYuNXYzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4yXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjExLjNcIiByPVwiMC43XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYy1pbXBvcnQtZW1wdHlcIiAqbmdJZj1cIiFvcHRpb25zLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgRXZlcnkgZGV0ZWN0ZWQgY29udGFjdCBjZW50ZXIgaGFzIGFscmVhZHkgYmVlbiBpbXBvcnRlZC5cclxuICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1zdGVwPlxyXG5cclxuICAgICAgPCEtLSBTdGVwIDI6IHRoZSBlbnRpdGllcyBUdWtpIHdpbGwgY3JlYXRlIGZvciBpdCAtLT5cclxuICAgICAgPG1hdC1zdGVwPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+T3ZlcnZpZXc8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RlcC10aXRsZVwiPk92ZXJ2aWV3PC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb3ZlLXVzZXItdGFiLWNvbnRlbnQtYm94XCI+XHJcbiAgICAgICAgICA8aDMgY2xhc3M9XCJjYy1pbXBvcnQtY2FyZC10aXRsZVwiPlJldmlldyBDb250YWN0IENlbnRlciBTZXR0aW5nczwvaDM+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cImNjLWltcG9ydC1jYXJkLXRleHRcIj5cclxuICAgICAgICAgICAgUmV2aWV3IHRoZSBzZXR0aW5ncyBmb3IgeW91ciBuZXcgQ29udGFjdCBjZW50ZXIgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY29ycmVjdC48YnIgLz5cclxuICAgICAgICAgICAgWW91IGNhbiBtYWtlIGNoYW5nZXMgYXQgYW55IHRpbWUgYnkgY2xpY2tpbmcgb24gdGhlIG5hbWUgb2YgdGhlIGNvbnRhY3QgY2VudGVyIG9uIHRoZSBkZWRpY2F0ZWQgcGFnZS5cclxuICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2MtaW1wb3J0LXN0YXRlXCIgKm5nSWY9XCJlbnRpdGllc0xvYWRpbmdcIj5Mb2FkaW5nIGVudGl0aWVzJmhlbGxpcDs8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYy1pbXBvcnQtc3RhdGUgY2MtaW1wb3J0LXN0YXRlLS1lcnJvclwiICpuZ0lmPVwiZW50aXRpZXNFcnJvclwiPlxyXG4gICAgICAgICAgICBVbmFibGUgdG8gbG9hZCB0aGUgcmVsYXRlZCBlbnRpdGllcy5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZW50aXRpZXNMb2FkaW5nICYmICFlbnRpdGllc0Vycm9yICYmIGVudGl0eUdyb3Vwcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNjLWltcG9ydC10YWJzXCIgcm9sZT1cInRhYmxpc3RcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2MtaW1wb3J0LXRhYlwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZW50aXR5R3JvdXBzOyBpbmRleCBhcyBpXCJcclxuICAgICAgICAgICAgICAgIHJvbGU9XCJ0YWJcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpID09PSBhY3RpdmVHcm91cEluZGV4XCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5jYy1pbXBvcnQtdGFiLS1hY3RpdmVdPVwiaSA9PT0gYWN0aXZlR3JvdXBJbmRleFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0R3JvdXAoaSlcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IGdyb3VwLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwiY2MtaW1wb3J0LWl0ZW1zXCIgcm9sZT1cInRhYnBhbmVsXCI+XHJcbiAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiY2MtaW1wb3J0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhY3RpdmVHcm91cD8uaXRlbXNcIj57eyBpdGVtIH19PC9saT5cclxuICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJjYy1pbXBvcnQtaXRlbSBjYy1pbXBvcnQtaXRlbS0tZW1wdHlcIiAqbmdJZj1cIiFhY3RpdmVHcm91cD8uaXRlbXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgTm90aGluZyB0byBjcmVhdGUgZm9yIHt7IGFjdGl2ZUdyb3VwPy5sYWJlbCB9fS5cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNjLWltcG9ydC1zdGF0ZSBjYy1pbXBvcnQtc3RhdGUtLWVycm9yXCIgKm5nSWY9XCJpbXBvcnRFcnJvclwiPlxyXG4gICAgICAgICAgICBVbmFibGUgdG8gc3RhcnQgdGhlIGltcG9ydC4gUGxlYXNlIHRyeSBhZ2Fpbi5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1zdGVwPlxyXG4gICAgPC9tYXQtc3RlcHBlcj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwid2l6YXJkLWFjdGlvbnNcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic3RlcHBlci5zZWxlY3RlZEluZGV4XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiMFwiPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBtYXQtYnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwidWMtYnRuIHVjLWJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuR29OZXh0XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uTmV4dChzdGVwcGVyKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIE5leHRcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwidWMtYnRuIHVjLWJ0bi1zZWNvbmRhcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5cclxuICAgICAgICAgICAgQ2FuY2VsXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiMVwiPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBtYXQtYnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwidWMtYnRuIHVjLWJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuSW1wb3J0XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInJ1bkltcG9ydCgpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1Yy1idG5fX2lubGluZS1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1Yy1idG5fX3NwaW5uZXJcIiAqbmdJZj1cImltcG9ydGluZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3Bhbj57eyBpbXBvcnRpbmcgPyAnSW1wb3J0aW5nLi4uJyA6ICdJbXBvcnQnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzcz1cInVjLWJ0biB1Yy1idG4tc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpbXBvcnRpbmdcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25QcmV2aW91cyhzdGVwcGVyKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIFByZXZpb3VzXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cIndpemFyZC1sb2FkaW5nLW92ZXJsYXlcIiBbY2xhc3Mud2l6YXJkLWxvYWRpbmctb3ZlcmxheS0tdmlzaWJsZV09XCJpbXBvcnRpbmdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ /** The wizard's steps, in order. Index-aligned with the `mat-stepper` steps. */
2
+ export const IMPORT_WIZARD_STEPS = ['select', 'overview'];
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWNvbnRhY3QtY2VudGVyLXdpemFyZC50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9jb250YWN0LWNlbnRlci9jYy1pbXBvcnQvY29tcG9uZW50cy9pbXBvcnQtY29udGFjdC1jZW50ZXItd2l6YXJkL2ltcG9ydC1jb250YWN0LWNlbnRlci13aXphcmQudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0ZBQWdGO0FBQ2hGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFRoZSB3aXphcmQncyBzdGVwcywgaW4gb3JkZXIuIEluZGV4LWFsaWduZWQgd2l0aCB0aGUgYG1hdC1zdGVwcGVyYCBzdGVwcy4gKi9cclxuZXhwb3J0IGNvbnN0IElNUE9SVF9XSVpBUkRfU1RFUFMgPSBbJ3NlbGVjdCcsICdvdmVydmlldyddIGFzIGNvbnN0O1xyXG5cclxuZXhwb3J0IHR5cGUgSW1wb3J0V2l6YXJkU3RlcElkID0gdHlwZW9mIElNUE9SVF9XSVpBUkRfU1RFUFNbbnVtYmVyXTtcclxuIl19
@@ -0,0 +1,62 @@
1
+ import { UCCX_ITEM_TYPE } from '../types/uccx';
2
+ export const CHART_COLORS = {
3
+ customerAssist: '#177A5C',
4
+ webexContactCenter: '#D0D0D0',
5
+ requiresReview: '#1268E3'
6
+ };
7
+ /** Compatibility score thresholds, per the ticket's scoring table. */
8
+ export const COMPATIBILITY_THRESHOLDS = {
9
+ /** 80-100 - migrates to Customer Assist with no functional loss. */
10
+ migratable: 80,
11
+ /** 60-79 - migrates to Customer Assist, minor unsupported steps dropped. */
12
+ requiresReview: 60
13
+ };
14
+ /**
15
+ * Slices of the panel's pie chart, in order: the recommended destination for every
16
+ * contact center detected in the connected UCCX environment.
17
+ *
18
+ * The panel is slice-driven, so re-cutting the chart when the design changes means
19
+ * editing this array - no component change.
20
+ */
21
+ export const IMPORT_PANEL_SLICES = [
22
+ {
23
+ label: 'To Customer Assist',
24
+ color: CHART_COLORS.customerAssist,
25
+ tooltip: 'Fully supported by Customer Assist.',
26
+ match: contactCenter => contactCenter.compatibilityStatus === 'migratable'
27
+ },
28
+ {
29
+ label: 'Requires Review',
30
+ color: CHART_COLORS.requiresReview,
31
+ tooltip: 'Supported by Customer Assist, but a few unsupported steps would change. '
32
+ + 'Can also go to Webex Contact Center for full feature coverage.',
33
+ match: contactCenter => contactCenter.compatibilityStatus === 'requires-review'
34
+ },
35
+ {
36
+ label: 'To Webex Contact Center',
37
+ color: CHART_COLORS.webexContactCenter,
38
+ tooltip: 'Not supported by Customer Assist - migrate to Webex Contact Center.',
39
+ match: contactCenter => contactCenter.compatibilityStatus === 'unsupported'
40
+ }
41
+ ];
42
+ /**
43
+ * How UCCX entity types roll up into the groups the Overview step shows, in display
44
+ * order. Types not listed here get a group of their own under their raw type name,
45
+ * so nothing the backend returns is silently dropped.
46
+ */
47
+ export const OVERVIEW_ENTITY_GROUPS = [
48
+ { label: 'Channel', types: [UCCX_ITEM_TYPE.TRIGGER] },
49
+ { label: 'Queues', types: [UCCX_ITEM_TYPE.CSQ] },
50
+ { label: 'Audio files', types: [UCCX_ITEM_TYPE.PROMPT, UCCX_ITEM_TYPE.DOCUMENT] },
51
+ { label: 'Flows', types: [UCCX_ITEM_TYPE.SCRIPT] },
52
+ { label: 'Skill', types: [UCCX_ITEM_TYPE.SKILL] },
53
+ { label: 'Contact center users', types: [UCCX_ITEM_TYPE.RESOURCE] }
54
+ ];
55
+ export const IMPORT_PANEL_TITLE = 'Import Contact center';
56
+ export const IMPORT_PANEL_TOOLTIP = 'Contact centers detected in the connected UCCX environment, and where each one can migrate to.';
57
+ export const IMPORT_WIZARD_TITLE = 'Contact Center';
58
+ /** Shown once a "requires review" contact center is picked. Dismissible. */
59
+ export const CUSTOMER_ASSIST_NOTICE = 'This contact center may also be supported by Customer Assist. Check compatibility before continuing.';
60
+ /** Tooltip on the marker the picker puts next to those same contact centers. */
61
+ export const CUSTOMER_ASSIST_MARKER_TOOLTIP = 'May also be supported by Customer Assist.';
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2MtaW1wb3J0LmNvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9jb250YWN0LWNlbnRlci9jYy1pbXBvcnQvY29uc3RhbnRzL2NjLWltcG9ydC5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDeEIsY0FBYyxFQUFFLFNBQVM7SUFDekIsa0JBQWtCLEVBQUUsU0FBUztJQUM3QixjQUFjLEVBQUUsU0FBUztDQUNuQixDQUFDO0FBRVgsc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHO0lBQ3BDLG9FQUFvRTtJQUNwRSxVQUFVLEVBQUUsRUFBRTtJQUNkLDRFQUE0RTtJQUM1RSxjQUFjLEVBQUUsRUFBRTtDQUNaLENBQUM7QUFFWDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBdUI7SUFDbkQ7UUFDSSxLQUFLLEVBQUUsb0JBQW9CO1FBQzNCLEtBQUssRUFBRSxZQUFZLENBQUMsY0FBYztRQUNsQyxPQUFPLEVBQUUscUNBQXFDO1FBQzlDLEtBQUssRUFBRSxhQUFhLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsS0FBSyxZQUFZO0tBQzdFO0lBQ0Q7UUFDSSxLQUFLLEVBQUUsaUJBQWlCO1FBQ3hCLEtBQUssRUFBRSxZQUFZLENBQUMsY0FBYztRQUNsQyxPQUFPLEVBQUUsMEVBQTBFO2NBQzdFLGdFQUFnRTtRQUN0RSxLQUFLLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEtBQUssaUJBQWlCO0tBQ2xGO0lBQ0Q7UUFDSSxLQUFLLEVBQUUseUJBQXlCO1FBQ2hDLEtBQUssRUFBRSxZQUFZLENBQUMsa0JBQWtCO1FBQ3RDLE9BQU8sRUFBRSxxRUFBcUU7UUFDOUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLG1CQUFtQixLQUFLLGFBQWE7S0FDOUU7Q0FDSixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUF5QztJQUN4RSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0lBQ3JELEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDaEQsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0lBQ2pGLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDbEQsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUNqRCxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7Q0FDdEUsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLHVCQUF1QixDQUFDO0FBRTFELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUM3QixnR0FBZ0csQ0FBQztBQUVyRyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUVwRCw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQy9CLHNHQUFzRyxDQUFDO0FBRTNHLGdGQUFnRjtBQUNoRixNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRywyQ0FBMkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEltcG9ydFBhbmVsU2xpY2UgfSBmcm9tICcuLi90eXBlcy9jYy1pbXBvcnQnO1xyXG5pbXBvcnQgeyBVQ0NYX0lURU1fVFlQRSB9IGZyb20gJy4uL3R5cGVzL3VjY3gnO1xyXG5cclxuZXhwb3J0IGNvbnN0IENIQVJUX0NPTE9SUyA9IHtcclxuICAgIGN1c3RvbWVyQXNzaXN0OiAnIzE3N0E1QycsXHJcbiAgICB3ZWJleENvbnRhY3RDZW50ZXI6ICcjRDBEMEQwJyxcclxuICAgIHJlcXVpcmVzUmV2aWV3OiAnIzEyNjhFMydcclxufSBhcyBjb25zdDtcclxuXHJcbi8qKiBDb21wYXRpYmlsaXR5IHNjb3JlIHRocmVzaG9sZHMsIHBlciB0aGUgdGlja2V0J3Mgc2NvcmluZyB0YWJsZS4gKi9cclxuZXhwb3J0IGNvbnN0IENPTVBBVElCSUxJVFlfVEhSRVNIT0xEUyA9IHtcclxuICAgIC8qKiA4MC0xMDAgLSBtaWdyYXRlcyB0byBDdXN0b21lciBBc3Npc3Qgd2l0aCBubyBmdW5jdGlvbmFsIGxvc3MuICovXHJcbiAgICBtaWdyYXRhYmxlOiA4MCxcclxuICAgIC8qKiA2MC03OSAtIG1pZ3JhdGVzIHRvIEN1c3RvbWVyIEFzc2lzdCwgbWlub3IgdW5zdXBwb3J0ZWQgc3RlcHMgZHJvcHBlZC4gKi9cclxuICAgIHJlcXVpcmVzUmV2aWV3OiA2MFxyXG59IGFzIGNvbnN0O1xyXG5cclxuLyoqXHJcbiAqIFNsaWNlcyBvZiB0aGUgcGFuZWwncyBwaWUgY2hhcnQsIGluIG9yZGVyOiB0aGUgcmVjb21tZW5kZWQgZGVzdGluYXRpb24gZm9yIGV2ZXJ5XHJcbiAqIGNvbnRhY3QgY2VudGVyIGRldGVjdGVkIGluIHRoZSBjb25uZWN0ZWQgVUNDWCBlbnZpcm9ubWVudC5cclxuICpcclxuICogVGhlIHBhbmVsIGlzIHNsaWNlLWRyaXZlbiwgc28gcmUtY3V0dGluZyB0aGUgY2hhcnQgd2hlbiB0aGUgZGVzaWduIGNoYW5nZXMgbWVhbnNcclxuICogZWRpdGluZyB0aGlzIGFycmF5IC0gbm8gY29tcG9uZW50IGNoYW5nZS5cclxuICovXHJcbmV4cG9ydCBjb25zdCBJTVBPUlRfUEFORUxfU0xJQ0VTOiBJbXBvcnRQYW5lbFNsaWNlW10gPSBbXHJcbiAgICB7XHJcbiAgICAgICAgbGFiZWw6ICdUbyBDdXN0b21lciBBc3Npc3QnLFxyXG4gICAgICAgIGNvbG9yOiBDSEFSVF9DT0xPUlMuY3VzdG9tZXJBc3Npc3QsXHJcbiAgICAgICAgdG9vbHRpcDogJ0Z1bGx5IHN1cHBvcnRlZCBieSBDdXN0b21lciBBc3Npc3QuJyxcclxuICAgICAgICBtYXRjaDogY29udGFjdENlbnRlciA9PiBjb250YWN0Q2VudGVyLmNvbXBhdGliaWxpdHlTdGF0dXMgPT09ICdtaWdyYXRhYmxlJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBsYWJlbDogJ1JlcXVpcmVzIFJldmlldycsXHJcbiAgICAgICAgY29sb3I6IENIQVJUX0NPTE9SUy5yZXF1aXJlc1JldmlldyxcclxuICAgICAgICB0b29sdGlwOiAnU3VwcG9ydGVkIGJ5IEN1c3RvbWVyIEFzc2lzdCwgYnV0IGEgZmV3IHVuc3VwcG9ydGVkIHN0ZXBzIHdvdWxkIGNoYW5nZS4gJ1xyXG4gICAgICAgICAgICArICdDYW4gYWxzbyBnbyB0byBXZWJleCBDb250YWN0IENlbnRlciBmb3IgZnVsbCBmZWF0dXJlIGNvdmVyYWdlLicsXHJcbiAgICAgICAgbWF0Y2g6IGNvbnRhY3RDZW50ZXIgPT4gY29udGFjdENlbnRlci5jb21wYXRpYmlsaXR5U3RhdHVzID09PSAncmVxdWlyZXMtcmV2aWV3J1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBsYWJlbDogJ1RvIFdlYmV4IENvbnRhY3QgQ2VudGVyJyxcclxuICAgICAgICBjb2xvcjogQ0hBUlRfQ09MT1JTLndlYmV4Q29udGFjdENlbnRlcixcclxuICAgICAgICB0b29sdGlwOiAnTm90IHN1cHBvcnRlZCBieSBDdXN0b21lciBBc3Npc3QgLSBtaWdyYXRlIHRvIFdlYmV4IENvbnRhY3QgQ2VudGVyLicsXHJcbiAgICAgICAgbWF0Y2g6IGNvbnRhY3RDZW50ZXIgPT4gY29udGFjdENlbnRlci5jb21wYXRpYmlsaXR5U3RhdHVzID09PSAndW5zdXBwb3J0ZWQnXHJcbiAgICB9XHJcbl07XHJcblxyXG4vKipcclxuICogSG93IFVDQ1ggZW50aXR5IHR5cGVzIHJvbGwgdXAgaW50byB0aGUgZ3JvdXBzIHRoZSBPdmVydmlldyBzdGVwIHNob3dzLCBpbiBkaXNwbGF5XHJcbiAqIG9yZGVyLiBUeXBlcyBub3QgbGlzdGVkIGhlcmUgZ2V0IGEgZ3JvdXAgb2YgdGhlaXIgb3duIHVuZGVyIHRoZWlyIHJhdyB0eXBlIG5hbWUsXHJcbiAqIHNvIG5vdGhpbmcgdGhlIGJhY2tlbmQgcmV0dXJucyBpcyBzaWxlbnRseSBkcm9wcGVkLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE9WRVJWSUVXX0VOVElUWV9HUk9VUFM6IHsgbGFiZWw6IHN0cmluZzsgdHlwZXM6IHN0cmluZ1tdIH1bXSA9IFtcclxuICAgIHsgbGFiZWw6ICdDaGFubmVsJywgdHlwZXM6IFtVQ0NYX0lURU1fVFlQRS5UUklHR0VSXSB9LFxyXG4gICAgeyBsYWJlbDogJ1F1ZXVlcycsIHR5cGVzOiBbVUNDWF9JVEVNX1RZUEUuQ1NRXSB9LFxyXG4gICAgeyBsYWJlbDogJ0F1ZGlvIGZpbGVzJywgdHlwZXM6IFtVQ0NYX0lURU1fVFlQRS5QUk9NUFQsIFVDQ1hfSVRFTV9UWVBFLkRPQ1VNRU5UXSB9LFxyXG4gICAgeyBsYWJlbDogJ0Zsb3dzJywgdHlwZXM6IFtVQ0NYX0lURU1fVFlQRS5TQ1JJUFRdIH0sXHJcbiAgICB7IGxhYmVsOiAnU2tpbGwnLCB0eXBlczogW1VDQ1hfSVRFTV9UWVBFLlNLSUxMXSB9LFxyXG4gICAgeyBsYWJlbDogJ0NvbnRhY3QgY2VudGVyIHVzZXJzJywgdHlwZXM6IFtVQ0NYX0lURU1fVFlQRS5SRVNPVVJDRV0gfVxyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IElNUE9SVF9QQU5FTF9USVRMRSA9ICdJbXBvcnQgQ29udGFjdCBjZW50ZXInO1xyXG5cclxuZXhwb3J0IGNvbnN0IElNUE9SVF9QQU5FTF9UT09MVElQID1cclxuICAgICdDb250YWN0IGNlbnRlcnMgZGV0ZWN0ZWQgaW4gdGhlIGNvbm5lY3RlZCBVQ0NYIGVudmlyb25tZW50LCBhbmQgd2hlcmUgZWFjaCBvbmUgY2FuIG1pZ3JhdGUgdG8uJztcclxuXHJcbmV4cG9ydCBjb25zdCBJTVBPUlRfV0laQVJEX1RJVExFID0gJ0NvbnRhY3QgQ2VudGVyJztcclxuXHJcbi8qKiBTaG93biBvbmNlIGEgXCJyZXF1aXJlcyByZXZpZXdcIiBjb250YWN0IGNlbnRlciBpcyBwaWNrZWQuIERpc21pc3NpYmxlLiAqL1xyXG5leHBvcnQgY29uc3QgQ1VTVE9NRVJfQVNTSVNUX05PVElDRSA9XHJcbiAgICAnVGhpcyBjb250YWN0IGNlbnRlciBtYXkgYWxzbyBiZSBzdXBwb3J0ZWQgYnkgQ3VzdG9tZXIgQXNzaXN0LiBDaGVjayBjb21wYXRpYmlsaXR5IGJlZm9yZSBjb250aW51aW5nLic7XHJcblxyXG4vKiogVG9vbHRpcCBvbiB0aGUgbWFya2VyIHRoZSBwaWNrZXIgcHV0cyBuZXh0IHRvIHRob3NlIHNhbWUgY29udGFjdCBjZW50ZXJzLiAqL1xyXG5leHBvcnQgY29uc3QgQ1VTVE9NRVJfQVNTSVNUX01BUktFUl9UT09MVElQID0gJ01heSBhbHNvIGJlIHN1cHBvcnRlZCBieSBDdXN0b21lciBBc3Npc3QuJztcclxuIl19
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Stand-in data used when `CcImportService.useMockData` is on.
3
+ *
4
+ * Shapes here mirror exactly what `CcImportService` produces from the real backend,
5
+ * so switching over is a matter of flipping `useMockData` to false.
6
+ */
7
+ const APPLICATION_NAMES = [
8
+ 'Operations', 'Sales', 'Support', 'Billing', 'Reception', 'Helpdesk', 'Retention',
9
+ 'Onboarding', 'Escalations', 'Emergency', 'Pharmacy', 'Appointments', 'Claims',
10
+ 'Collections', 'Dispatch', 'Front Desk', 'IT Service Desk', 'Loyalty', 'Orders', 'Returns'
11
+ ];
12
+ /** One tab per group on the wizard's Overview step, in the order they are shown. */
13
+ const ENTITY_GROUP_TEMPLATE = [
14
+ { label: 'Channel', suffixes: ['_CC'] },
15
+ { label: 'Queues', suffixes: ['_Queue'] },
16
+ { label: 'Audio files', suffixes: [' Welcome', ' Music On Hold', ' Closed Message'] },
17
+ { label: 'Flows', suffixes: ['_Flow'] },
18
+ { label: 'Skill', suffixes: ['_Skill'] },
19
+ { label: 'Contact center users', suffixes: [' Supervisor', ' Agent 1', ' Agent 2'] }
20
+ ];
21
+ /**
22
+ * The ten contact centers that still need a decision - the only ones the wizard
23
+ * offers, so these are exactly the rows the picker shows, in this order. The flagged
24
+ * three are "requires review" and carry the marker plus the advisory notice.
25
+ */
26
+ const REVIEW_CONTACT_CENTERS = [
27
+ { name: 'Operations', requiresReview: true },
28
+ { name: 'Sales_inquiry' },
29
+ { name: 'Tech Support' },
30
+ { name: 'Tech_Info' },
31
+ { name: 'Finance', requiresReview: true },
32
+ { name: 'Innovation', requiresReview: true },
33
+ { name: 'Marketing' },
34
+ { name: 'Gen_Support' },
35
+ { name: 'Legal' },
36
+ { name: 'Sales Support' }
37
+ ];
38
+ /** 100 contact centers: 70 migratable, 20 unsupported, 10 still to be imported. */
39
+ export function mockContactCenters() {
40
+ const contactCenters = [];
41
+ // 90 already-imported ones, split across the two destinations.
42
+ for (let i = 0; i < 90; i++) {
43
+ const name = `${APPLICATION_NAMES[i % APPLICATION_NAMES.length]}_${Math.floor(i / APPLICATION_NAMES.length) + 1}`;
44
+ const compatibilityStatus = i < 70 ? 'migratable' : 'unsupported';
45
+ contactCenters.push({
46
+ applicationId: `app-${i + 1}`,
47
+ applicationName: name,
48
+ scriptName: `${name}_AA_Queue.aef`,
49
+ compatibilityStatus,
50
+ compatibilityScore: compatibilityStatus === 'migratable' ? 92 : 41,
51
+ migrationState: 'migrated'
52
+ });
53
+ }
54
+ REVIEW_CONTACT_CENTERS.forEach((contactCenter, i) => {
55
+ const compatibilityStatus = contactCenter.requiresReview ? 'requires-review' : 'unsupported';
56
+ contactCenters.push({
57
+ applicationId: `app-${91 + i}`,
58
+ applicationName: contactCenter.name,
59
+ scriptName: `${contactCenter.name}_AA_Queue.aef`,
60
+ compatibilityStatus,
61
+ compatibilityScore: contactCenter.requiresReview ? 68 : 44,
62
+ migrationState: 'not-migrated',
63
+ customerAssistCapable: compatibilityStatus === 'requires-review'
64
+ });
65
+ });
66
+ return contactCenters;
67
+ }
68
+ export function mockContactCenterEntities(contactCenter) {
69
+ const base = contactCenter.applicationName;
70
+ return {
71
+ applicationId: contactCenter.applicationId,
72
+ groups: ENTITY_GROUP_TEMPLATE.map(group => ({
73
+ label: group.label,
74
+ items: group.suffixes.map(suffix => `${base}${suffix}`)
75
+ }))
76
+ };
77
+ }
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2MtaW1wb3J0Lm1vY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvY29udGFjdC1jZW50ZXIvY2MtaW1wb3J0L21vY2svY2MtaW1wb3J0Lm1vY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7O0dBS0c7QUFFSCxNQUFNLGlCQUFpQixHQUFHO0lBQ3RCLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVc7SUFDakYsWUFBWSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRO0lBQzlFLGFBQWEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUztDQUM3RixDQUFDO0FBRUYsb0ZBQW9GO0FBQ3BGLE1BQU0scUJBQXFCLEdBQTRDO0lBQ25FLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUN2QyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUU7SUFDekMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFO0lBQ3JGLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRTtJQUN2QyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUU7SUFDeEMsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRTtDQUN2RixDQUFDO0FBRUY7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LEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztTQUMxRCxDQUFDLENBQUM7S0FDTixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRhY3RDZW50ZXIsIENvbnRhY3RDZW50ZXJDb21wYXRpYmlsaXR5U3RhdHVzLCBDb250YWN0Q2VudGVyRW50aXRpZXMgfSBmcm9tICcuLi90eXBlcy9jYy1pbXBvcnQnO1xyXG5cclxuLyoqXHJcbiAqIFN0YW5kLWluIGRhdGEgdXNlZCB3aGVuIGBDY0ltcG9ydFNlcnZpY2UudXNlTW9ja0RhdGFgIGlzIG9uLlxyXG4gKlxyXG4gKiBTaGFwZXMgaGVyZSBtaXJyb3IgZXhhY3RseSB3aGF0IGBDY0ltcG9ydFNlcnZpY2VgIHByb2R1Y2VzIGZyb20gdGhlIHJlYWwgYmFja2VuZCxcclxuICogc28gc3dpdGNoaW5nIG92ZXIgaXMgYSBtYXR0ZXIgb2YgZmxpcHBpbmcgYHVzZU1vY2tEYXRhYCB0byBmYWxzZS5cclxuICovXHJcblxyXG5jb25zdCBBUFBMSUNBVElPTl9OQU1FUyA9IFtcclxuICAgICdPcGVyYXRpb25zJywgJ1NhbGVzJywgJ1N1cHBvcnQnLCAnQmlsbGluZycsICdSZWNlcHRpb24nLCAnSGVscGRlc2snLCAnUmV0ZW50aW9uJyxcclxuICAgICdPbmJvYXJkaW5nJywgJ0VzY2FsYXRpb25zJywgJ0VtZXJnZW5jeScsICdQaGFybWFjeScsICdBcHBvaW50bWVudHMnLCAnQ2xhaW1zJyxcclxuICAgICdDb2xsZWN0aW9ucycsICdEaXNwYXRjaCcsICdGcm9udCBEZXNrJywgJ0lUIFNlcnZpY2UgRGVzaycsICdMb3lhbHR5JywgJ09yZGVycycsICdSZXR1cm5zJ1xyXG5dO1xyXG5cclxuLyoqIE9uZSB0YWIgcGVyIGdyb3VwIG9uIHRoZSB3aXphcmQncyBPdmVydmlldyBzdGVwLCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgc2hvd24uICovXHJcbmNvbnN0IEVOVElUWV9HUk9VUF9URU1QTEFURTogeyBsYWJlbDogc3RyaW5nOyBzdWZmaXhlczogc3RyaW5nW10gfVtdID0gW1xyXG4gICAgeyBsYWJlbDogJ0NoYW5uZWwnLCBzdWZmaXhlczogWydfQ0MnXSB9LFxyXG4gICAgeyBsYWJlbDogJ1F1ZXVlcycsIHN1ZmZpeGVzOiBbJ19RdWV1ZSddIH0sXHJcbiAgICB7IGxhYmVsOiAnQXVkaW8gZmlsZXMnLCBzdWZmaXhlczogWycgV2VsY29tZScsICcgTXVzaWMgT24gSG9sZCcsICcgQ2xvc2VkIE1lc3NhZ2UnXSB9LFxyXG4gICAgeyBsYWJlbDogJ0Zsb3dzJywgc3VmZml4ZXM6IFsnX0Zsb3cnXSB9LFxyXG4gICAgeyBsYWJlbDogJ1NraWxsJywgc3VmZml4ZXM6IFsnX1NraWxsJ10gfSxcclxuICAgIHsgbGFiZWw6ICdDb250YWN0IGNlbnRlciB1c2VycycsIHN1ZmZpeGVzOiBbJyBTdXBlcnZpc29yJywgJyBBZ2VudCAxJywgJyBBZ2VudCAyJ10gfVxyXG5dO1xyXG5cclxuLyoqXHJcbiAqIFRoZSB0ZW4gY29udGFjdCBjZW50ZXJzIHRoYXQgc3RpbGwgbmVlZCBhIGRlY2lzaW9uIC0gdGhlIG9ubHkgb25lcyB0aGUgd2l6YXJkXHJcbiAqIG9mZmVycywgc28gdGhlc2UgYXJlIGV4YWN0bHkgdGhlIHJvd3MgdGhlIHBpY2tlciBzaG93cywgaW4gdGhpcyBvcmRlci4gVGhlIGZsYWdnZWRcclxuICogdGhyZWUgYXJlIFwicmVxdWlyZXMgcmV2aWV3XCIgYW5kIGNhcnJ5IHRoZSBtYXJrZXIgcGx1cyB0aGUgYWR2aXNvcnkgbm90aWNlLlxyXG4gKi9cclxuY29uc3QgUkVWSUVXX0NPTlRBQ1RfQ0VOVEVSUzogeyBuYW1lOiBzdHJpbmc7IHJlcXVpcmVzUmV2aWV3PzogYm9vbGVhbiB9W10gPSBbXHJcbiAgICB7IG5hbWU6ICdPcGVyYXRpb25zJywgcmVxdWlyZXNSZXZpZXc6IHRydWUgfSxcclxuICAgIHsgbmFtZTogJ1NhbGVzX2lucXVpcnknIH0sXHJcbiAgICB7IG5hbWU6ICdUZWNoIFN1cHBvcnQnIH0sXHJcbiAgICB7IG5hbWU6ICdUZWNoX0luZm8nIH0sXHJcbiAgICB7IG5hbWU6ICdGaW5hbmNlJywgcmVxdWlyZXNSZXZpZXc6IHRydWUgfSxcclxuICAgIHsgbmFtZTogJ0lubm92YXRpb24nLCByZXF1aXJlc1JldmlldzogdHJ1ZSB9LFxyXG4gICAgeyBuYW1lOiAnTWFya2V0aW5nJyB9LFxyXG4gICAgeyBuYW1lOiAnR2VuX1N1cHBvcnQnIH0sXHJcbiAgICB7IG5hbWU6ICdMZWdhbCcgfSxcclxuICAgIHsgbmFtZTogJ1NhbGVzIFN1cHBvcnQnIH1cclxuXTtcclxuXHJcbi8qKiAxMDAgY29udGFjdCBjZW50ZXJzOiA3MCBtaWdyYXRhYmxlLCAyMCB1bnN1cHBvcnRlZCwgMTAgc3RpbGwgdG8gYmUgaW1wb3J0ZWQuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtb2NrQ29udGFjdENlbnRlcnMoKTogQ29udGFjdENlbnRlcltdIHtcclxuICAgIGNvbnN0IGNvbnRhY3RDZW50ZXJzOiBDb250YWN0Q2VudGVyW10gPSBbXTtcclxuXHJcbiAgICAvLyA5MCBhbHJlYWR5LWltcG9ydGVkIG9uZXMsIHNwbGl0IGFjcm9zcyB0aGUgdHdvIGRlc3RpbmF0aW9ucy5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgOTA7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBgJHtBUFBMSUNBVElPTl9OQU1FU1tpICUgQVBQTElDQVRJT05fTkFNRVMubGVuZ3RoXX1fJHtNYXRoLmZsb29yKGkgLyBBUFBMSUNBVElPTl9OQU1FUy5sZW5ndGgpICsgMX1gO1xyXG4gICAgICAgIGNvbnN0IGNvbXBhdGliaWxpdHlTdGF0dXM6IENvbnRhY3RDZW50ZXJDb21wYXRpYmlsaXR5U3RhdHVzID0gaSA8IDcwID8gJ21pZ3JhdGFibGUnIDogJ3Vuc3VwcG9ydGVkJztcclxuXHJcbiAgICAgICAgY29udGFjdENlbnRlcnMucHVzaCh7XHJcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uSWQ6IGBhcHAtJHtpICsgMX1gLFxyXG4gICAgICAgICAgICBhcHBsaWNhdGlvbk5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgIHNjcmlwdE5hbWU6IGAke25hbWV9X0FBX1F1ZXVlLmFlZmAsXHJcbiAgICAgICAgICAgIGNvbXBhdGliaWxpdHlTdGF0dXMsXHJcbiAgICAgICAgICAgIGNvbXBhdGliaWxpdHlTY29yZTogY29tcGF0aWJpbGl0eVN0YXR1cyA9PT0gJ21pZ3JhdGFibGUnID8gOTIgOiA0MSxcclxuICAgICAgICAgICAgbWlncmF0aW9uU3RhdGU6ICdtaWdyYXRlZCdcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBSRVZJRVdfQ09OVEFDVF9DRU5URVJTLmZvckVhY2goKGNvbnRhY3RDZW50ZXIsIGkpID0+IHtcclxuICAgICAgICBjb25zdCBjb21wYXRpYmlsaXR5U3RhdHVzOiBDb250YWN0Q2VudGVyQ29tcGF0aWJpbGl0eVN0YXR1cyA9XHJcbiAgICAgICAgICAgIGNvbnRhY3RDZW50ZXIucmVxdWlyZXNSZXZpZXcgPyAncmVxdWlyZXMtcmV2aWV3JyA6ICd1bnN1cHBvcnRlZCc7XHJcblxyXG4gICAgICAgIGNvbnRhY3RDZW50ZXJzLnB1c2goe1xyXG4gICAgICAgICAgICBhcHBsaWNhdGlvbklkOiBgYXBwLSR7OTEgKyBpfWAsXHJcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uTmFtZTogY29udGFjdENlbnRlci5uYW1lLFxyXG4gICAgICAgICAgICBzY3JpcHROYW1lOiBgJHtjb250YWN0Q2VudGVyLm5hbWV9X0FBX1F1ZXVlLmFlZmAsXHJcbiAgICAgICAgICAgIGNvbXBhdGliaWxpdHlTdGF0dXMsXHJcbiAgICAgICAgICAgIGNvbXBhdGliaWxpdHlTY29yZTogY29udGFjdENlbnRlci5yZXF1aXJlc1JldmlldyA/IDY4IDogNDQsXHJcbiAgICAgICAgICAgIG1pZ3JhdGlvblN0YXRlOiAnbm90LW1pZ3JhdGVkJyxcclxuICAgICAgICAgICAgY3VzdG9tZXJBc3Npc3RDYXBhYmxlOiBjb21wYXRpYmlsaXR5U3RhdHVzID09PSAncmVxdWlyZXMtcmV2aWV3J1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbnRhY3RDZW50ZXJzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbW9ja0NvbnRhY3RDZW50ZXJFbnRpdGllcyhjb250YWN0Q2VudGVyOiBDb250YWN0Q2VudGVyKTogQ29udGFjdENlbnRlckVudGl0aWVzIHtcclxuICAgIGNvbnN0IGJhc2UgPSBjb250YWN0Q2VudGVyLmFwcGxpY2F0aW9uTmFtZTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGFwcGxpY2F0aW9uSWQ6IGNvbnRhY3RDZW50ZXIuYXBwbGljYXRpb25JZCxcclxuICAgICAgICBncm91cHM6IEVOVElUWV9HUk9VUF9URU1QTEFURS5tYXAoZ3JvdXAgPT4gKHtcclxuICAgICAgICAgICAgbGFiZWw6IGdyb3VwLmxhYmVsLFxyXG4gICAgICAgICAgICBpdGVtczogZ3JvdXAuc3VmZml4ZXMubWFwKHN1ZmZpeCA9PiBgJHtiYXNlfSR7c3VmZml4fWApXHJcbiAgICAgICAgfSkpXHJcbiAgICB9O1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2MtaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL2NvbnRhY3QtY2VudGVyL2NjLWltcG9ydC90eXBlcy9jYy1pbXBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBIb3cgd2VsbCBhIGNvbnRhY3QgY2VudGVyJ3MgQUVGIHNjcmlwdCBtYXBzIG9udG8gQ3VzdG9tZXIgQXNzaXN0LCBmcm9tIHRoZVxyXG4gKiBjb21wYXRpYmlsaXR5IHNjb3JlOiA8NjAgdW5zdXBwb3J0ZWQsIDYwLTc5IHJlcXVpcmVzIHJldmlldywgODAtMTAwIG1pZ3JhdGFibGUuXHJcbiAqXHJcbiAqIGBudWxsYCBtZWFucyB0aGUgYmFja2VuZCBkaWQgbm90IHN1cHBseSBhIHNjb3JlLiBUaGUgQUVGIHNjb3JpbmcgQVBJIGRvZXMgbm90XHJcbiAqIGV4aXN0IHlldCAodGhlIHNjb3JpbmcgbWFwcGluZyBkb2N1bWVudCBpcyBzdGlsbCBhIHBlbmRpbmcgaW5wdXQgb24gdGhlIHRpY2tldCksXHJcbiAqIHNvIHRvZGF5IHRoaXMgaXMgYWx3YXlzIGZpbGxlZCBpbiBsb2NhbGx5IC0gc2VlIGBDY0ltcG9ydFNlcnZpY2VgLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ29udGFjdENlbnRlckNvbXBhdGliaWxpdHlTdGF0dXMgPSAnbWlncmF0YWJsZScgfCAncmVxdWlyZXMtcmV2aWV3JyB8ICd1bnN1cHBvcnRlZCc7XHJcblxyXG4vKiogV2hldGhlciBUdWtpIGhhcyBhbHJlYWR5IGltcG9ydGVkIHRoaXMgY29udGFjdCBjZW50ZXIuIERlcml2ZWQgZnJvbSByZWFsIGRhdGEuICovXHJcbmV4cG9ydCB0eXBlIENvbnRhY3RDZW50ZXJNaWdyYXRpb25TdGF0ZSA9ICdtaWdyYXRlZCcgfCAnbm90LW1pZ3JhdGVkJztcclxuXHJcbi8qKiBPbmUgVUNDWCBhcHBsaWNhdGlvbiAoY29udGFjdCBjZW50ZXIpIHRoYXQgVHVraSBjYW4gaW1wb3J0LiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhY3RDZW50ZXIge1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZGVudGl0eSBvZiB0aGUgY29udGFjdCBjZW50ZXIuIFVDQ1ggaGFzIG5vIGFwcGxpY2F0aW9uIGlkIG9mIGl0cyBvd24gLSB0aGVcclxuICAgICAqIGFwcGxpY2F0aW9uICpuYW1lKiBpcyB0aGUga2V5IGV2ZXJ5IGJhY2tlbmQgZW5kcG9pbnQgZmlsdGVycyBvbiAtIHNvIHRoaXNcclxuICAgICAqIGNhcnJpZXMgdGhlIG5hbWUgZm9yIHJlYWwgZGF0YS5cclxuICAgICAqL1xyXG4gICAgYXBwbGljYXRpb25JZDogc3RyaW5nO1xyXG4gICAgYXBwbGljYXRpb25OYW1lOiBzdHJpbmc7XHJcbiAgICAvKiogQUVGIGZpbGUgYmFja2luZyB0aGUgYXBwbGljYXRpb24sIGUuZy4gXCJPcGVyYXRpb25zX0FBX1F1ZXVlX0ZpeGVkLmFlZlwiLiAqL1xyXG4gICAgc2NyaXB0TmFtZTogc3RyaW5nO1xyXG4gICAgLyoqIFRoZSBVQ0NYIHNlcnZlciBpdCB3YXMgY29sbGVjdGVkIGZyb20sIG5lZWRlZCBieSB0aGUgcGVyLWFwcGxpY2F0aW9uIGVuZHBvaW50cy4gKi9cclxuICAgIHVjY3hJcD86IHN0cmluZztcclxuICAgIGNvbXBhdGliaWxpdHlTdGF0dXM6IENvbnRhY3RDZW50ZXJDb21wYXRpYmlsaXR5U3RhdHVzO1xyXG4gICAgLyoqIFRoZSAwLTEwMCBzY29yZSBiZWhpbmQgYGNvbXBhdGliaWxpdHlTdGF0dXNgLCB3aGVuIHRoZSBiYWNrZW5kIHN1cHBsaWVkIG9uZS4gKi9cclxuICAgIGNvbXBhdGliaWxpdHlTY29yZT86IG51bWJlcjtcclxuICAgIG1pZ3JhdGlvblN0YXRlOiBDb250YWN0Q2VudGVyTWlncmF0aW9uU3RhdGU7XHJcbiAgICAvKipcclxuICAgICAqIEFkdmlzb3J5IGZsYWc6IGEgXCJyZXF1aXJlcyByZXZpZXdcIiBjb250YWN0IGNlbnRlciBjYW4gZ28gdG8gQ3VzdG9tZXIgQXNzaXN0IGFzXHJcbiAgICAgKiB3ZWxsIGFzIHRvIFdlYmV4IENvbnRhY3QgQ2VudGVyLiBTdXJmYWNlZCBhcyBhIG1hcmtlciBpbiB0aGUgcGlja2VyIGFuZCBhIG5vdGljZVxyXG4gICAgICogb25jZSBzZWxlY3RlZCAtIGl0IGRvZXMgbm90IGJsb2NrIHRoZSBpbXBvcnQuXHJcbiAgICAgKi9cclxuICAgIGN1c3RvbWVyQXNzaXN0Q2FwYWJsZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKiBPbmUgcm93IG9mIHRoZSBpbXBvcnQgXCJPdmVydmlld1wiIHN0ZXAsIGUuZy4geyBsYWJlbDogJ1F1ZXVlcycsIGl0ZW1zOiBbJ1NhbGVzX1F1ZXVlJ10gfS4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb250YWN0Q2VudGVyRW50aXR5R3JvdXAge1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIGl0ZW1zOiBzdHJpbmdbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFwcGxpY2F0aW9uLWNlbnRyaWMgZW50aXR5IGJyZWFrZG93bjogZXZlcnl0aGluZyBUdWtpIHdpbGwgY3JlYXRlIGZvciB0aGlzXHJcbiAqIGNvbnRhY3QgY2VudGVyLCBwYWNrYWdlZCBhcyBhIHNpbmdsZSBtaWdyYXRpb24gdW5pdC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdENlbnRlckVudGl0aWVzIHtcclxuICAgIGFwcGxpY2F0aW9uSWQ6IHN0cmluZztcclxuICAgIGdyb3VwczogQ29udGFjdENlbnRlckVudGl0eUdyb3VwW107XHJcbn1cclxuXHJcbi8qKiBEZWNsYXJhdGl2ZSBkZXNjcmlwdGlvbiBvZiBvbmUgcGllIHNsaWNlIC8gbGVnZW5kIHJvdyBvZiB0aGUgcGFuZWwuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0UGFuZWxTbGljZSB7XHJcbiAgICBsYWJlbDogc3RyaW5nO1xyXG4gICAgY29sb3I6IHN0cmluZztcclxuICAgIHRvb2x0aXA6IHN0cmluZztcclxuICAgIC8qKiBXaGljaCBjb250YWN0IGNlbnRlcnMgZmFsbCBpbnRvIHRoaXMgc2xpY2UuICovXHJcbiAgICBtYXRjaDogKGNvbnRhY3RDZW50ZXI6IENvbnRhY3RDZW50ZXIpID0+IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKiBBIHNsaWNlIG9uY2UgaXQgaGFzIGJlZW4gcmVzb2x2ZWQgYWdhaW5zdCByZWFsIGRhdGEuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0UGFuZWxTZWdtZW50IHtcclxuICAgIGxhYmVsOiBzdHJpbmc7XHJcbiAgICBjb2xvcjogc3RyaW5nO1xyXG4gICAgdG9vbHRpcDogc3RyaW5nO1xyXG4gICAgY291bnQ6IG51bWJlcjtcclxuICAgIHBlcmNlbnRhZ2U6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbXBvcnRSZXN1bHQge1xyXG4gICAgYXBwbGljYXRpb25JZDogc3RyaW5nO1xyXG4gICAgYWNjZXB0ZWQ6IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBYTFNYIG1pZ3JhdGlvbiB0cmFja2VyIHRoZSBiYWNrZW5kIGFuc3dlcnMgd2l0aC4gRXhlY3V0aW9uIGFuZCBwcm9ncmVzc1xyXG4gICAgICogdHJhY2tpbmcgYXJlIGRlZmluZWQgaW4gYSBzZXBhcmF0ZSB0aWNrZXQ7IHRoaXMgaXMgc2ltcGx5IHdoYXQgY2FtZSBiYWNrLlxyXG4gICAgICovXHJcbiAgICByZXBvcnQ/OiBCbG9iO1xyXG59XHJcbiJdfQ==