@tuki-io/tuki-widgets 0.0.219-dev.9 → 0.0.219

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 (309) hide show
  1. package/README.md +24 -24
  2. package/di2mt/api/api.endpoints.d.ts +3 -0
  3. package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +1 -1
  4. package/esm2020/contact-center/cc-readiness/cc-readiness.service.mjs +1 -1
  5. package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +3 -3
  6. package/esm2020/di2mt/api/api.endpoints.mjs +4 -1
  7. package/esm2020/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.mjs +3 -3
  8. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +2 -2
  9. package/esm2020/di2mt/widgets/upgrade-overview/cards/pending-activation-users/pending-activation-users.component.mjs +17 -17
  10. package/esm2020/lib/widgets.component.mjs +9 -9
  11. package/esm2020/lib/widgets.module.mjs +1 -1
  12. package/esm2020/lib/widgets.service.mjs +1 -1
  13. package/esm2020/locations/public-api.mjs +8 -0
  14. package/esm2020/locations/src/app.constants.mjs +6 -0
  15. package/esm2020/locations/src/locations.component.mjs +215 -0
  16. package/esm2020/locations/src/locations.module.mjs +39 -0
  17. package/esm2020/locations/src/material.module.mjs +48 -0
  18. package/esm2020/locations/src/services/api.service.mjs +67 -0
  19. package/esm2020/locations/src/services/locations.service.mjs +51 -0
  20. package/esm2020/locations/src/types/location.mjs +2 -0
  21. package/esm2020/locations/src/utils/app-loader/app-loader.mjs +14 -0
  22. package/esm2020/locations/tuki-io-tuki-widgets-locations.mjs +5 -0
  23. package/esm2020/meetings/public-api.mjs +8 -0
  24. package/esm2020/meetings/src/app.constants.mjs +9 -0
  25. package/esm2020/meetings/src/components/live-meetings/live-meeting/live-meeting.component.mjs +107 -0
  26. package/esm2020/meetings/src/components/live-meetings/live-meetings.component.mjs +98 -0
  27. package/esm2020/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.mjs +110 -0
  28. package/esm2020/meetings/src/components/meeting-spaces/meeting-spaces.component.mjs +65 -0
  29. package/esm2020/meetings/src/material.module.mjs +76 -0
  30. package/esm2020/meetings/src/meetings.component.mjs +65 -0
  31. package/esm2020/meetings/src/meetings.module.mjs +51 -0
  32. package/esm2020/meetings/src/services/api.service.mjs +67 -0
  33. package/esm2020/meetings/src/services/live-meetings.service.mjs +178 -0
  34. package/esm2020/meetings/src/services/meeting-spaces.service.mjs +102 -0
  35. package/esm2020/meetings/src/types/live-meeting.mjs +2 -0
  36. package/esm2020/meetings/src/types/meeting-space.mjs +2 -0
  37. package/esm2020/meetings/src/utils/app-loader/app-loader.mjs +14 -0
  38. package/esm2020/meetings/tuki-io-tuki-widgets-meetings.mjs +5 -0
  39. package/esm2020/public-api.mjs +1 -1
  40. package/esm2020/shared/public-api.mjs +4 -0
  41. package/esm2020/shared/src/ui/material.module.mjs +188 -0
  42. package/esm2020/shared/src/ui/shared.module.mjs +36 -0
  43. package/esm2020/shared/src/ui/tk-page-section/tk-page-section.component.mjs +13 -0
  44. package/esm2020/shared/src/ui/tk-page-section-row/tk-page-section-row.component.mjs +13 -0
  45. package/esm2020/shared/src/ui/ui.module.mjs +37 -0
  46. package/esm2020/shared/tuki-io-tuki-widgets-shared.mjs +5 -0
  47. package/esm2020/user-creation/src/app.constants.mjs +1 -1
  48. package/esm2020/user-creation/src/classes/notification.mjs +1 -1
  49. package/esm2020/user-creation/src/classes/site.mjs +1 -1
  50. package/esm2020/user-creation/src/environments/environment.mjs +1 -1
  51. package/esm2020/user-creation/src/interfaces/user-creation-wizard.interfaces.mjs +1 -1
  52. package/esm2020/user-creation/src/shared/components/notification/notification.component.mjs +3 -3
  53. package/esm2020/user-creation/src/shared/pipes/truncate.pipe.mjs +1 -1
  54. package/esm2020/user-creation/src/shared/services/notification.service.mjs +1 -1
  55. package/esm2020/user-creation/src/shared/services/user-creation-api.service.mjs +1 -1
  56. package/esm2020/user-creation/src/shared/services/utils.mjs +1 -1
  57. package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +3 -3
  58. package/esm2020/user-creation/src/utils/build-savable-end-user.mjs +1 -1
  59. package/esm2020/user-creation/src/utils/device-default-prefix.mjs +1 -1
  60. package/esm2020/user-creation/src/utils/device-name-dynamic-tokens.mjs +1 -1
  61. package/esm2020/user-creation/src/utils/device-name-validation.mjs +1 -1
  62. package/esm2020/user-creation/src/utils/model.mjs +1 -1
  63. package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +1 -1
  64. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.mjs +2 -1
  65. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +8 -6
  66. package/esm2020/user-device-manage/public-api.mjs +1 -1
  67. package/esm2020/user-device-manage/src/app.constants.mjs +1 -1
  68. package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
  69. package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +1 -1
  70. package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +1 -1
  71. package/esm2020/user-device-manage/src/classes/line-association.mjs +1 -1
  72. package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +1 -1
  73. package/esm2020/user-device-manage/src/classes/line-directory.mjs +1 -1
  74. package/esm2020/user-device-manage/src/classes/line.mjs +1 -1
  75. package/esm2020/user-device-manage/src/classes/notification.mjs +1 -1
  76. package/esm2020/user-device-manage/src/classes/recording-options.mjs +1 -1
  77. package/esm2020/user-device-manage/src/classes/simplified-user.mjs +1 -1
  78. package/esm2020/user-device-manage/src/classes/site-defaults.mjs +1 -1
  79. package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +1 -1
  80. package/esm2020/user-device-manage/src/classes/types.mjs +1 -1
  81. package/esm2020/user-device-manage/src/common-functions.mjs +1 -1
  82. package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +3 -3
  83. package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +3 -3
  84. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +3 -3
  85. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.mjs +3 -3
  86. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +1 -1
  87. package/esm2020/user-device-manage/src/device-info/device-info.component.mjs +3 -3
  88. package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +2 -2
  89. package/esm2020/user-device-manage/src/environments/environment.mjs +1 -1
  90. package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +1 -1
  91. package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
  92. package/esm2020/user-device-manage/src/material.module.mjs +1 -1
  93. package/esm2020/user-device-manage/src/notifications/notification.component.mjs +3 -3
  94. package/esm2020/user-device-manage/src/pipes/mac-address.pipe.mjs +1 -1
  95. package/esm2020/user-device-manage/src/services/api.service.mjs +1 -1
  96. package/esm2020/user-device-manage/src/services/device.service.mjs +1 -1
  97. package/esm2020/user-device-manage/src/services/dns.service.mjs +1 -1
  98. package/esm2020/user-device-manage/src/services/line.service.mjs +1 -1
  99. package/esm2020/user-device-manage/src/services/notification.service.mjs +1 -1
  100. package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  101. package/esm2020/user-device-manage/src/services/site-settings.service.mjs +1 -1
  102. package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +1 -1
  103. package/esm2020/user-device-manage/src/services/user.service.mjs +1 -1
  104. package/esm2020/user-device-manage/src/services/utils.service.mjs +1 -1
  105. package/esm2020/user-device-manage/src/services/validation.service.mjs +1 -1
  106. package/esm2020/user-device-manage/src/user-device-manage.module.mjs +1 -4
  107. package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +3 -3
  108. package/esm2020/user-manage/public-api.mjs +1 -1
  109. package/esm2020/user-manage/src/app.constants.mjs +7 -1
  110. package/esm2020/user-manage/src/classes/device.mjs +1 -1
  111. package/esm2020/user-manage/src/classes/line-association-interface.mjs +1 -1
  112. package/esm2020/user-manage/src/classes/line-association.mjs +1 -1
  113. package/esm2020/user-manage/src/classes/line-call-info-display.mjs +1 -1
  114. package/esm2020/user-manage/src/classes/line-directory.mjs +1 -1
  115. package/esm2020/user-manage/src/classes/line.mjs +1 -1
  116. package/esm2020/user-manage/src/classes/notification.mjs +1 -1
  117. package/esm2020/user-manage/src/classes/pagination.mjs +1 -1
  118. package/esm2020/user-manage/src/classes/recording-options.mjs +1 -1
  119. package/esm2020/user-manage/src/classes/simplified-user.mjs +5 -3
  120. package/esm2020/user-manage/src/classes/table-data.mjs +1 -1
  121. package/esm2020/user-manage/src/classes/translation-pattern.mjs +1 -1
  122. package/esm2020/user-manage/src/classes/user-list.mjs +1 -1
  123. package/esm2020/user-manage/src/common-functions.mjs +1 -1
  124. package/esm2020/user-manage/src/device-list/device-list.component.mjs +7 -4
  125. package/esm2020/user-manage/src/device-list/device-row/device-row.component.mjs +6 -3
  126. package/esm2020/user-manage/src/environments/environment.mjs +1 -1
  127. package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +1 -1
  128. package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
  129. package/esm2020/user-manage/src/material.module.mjs +14 -7
  130. package/esm2020/user-manage/src/notifications/notification.component.mjs +3 -3
  131. package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +1 -1
  132. package/esm2020/user-manage/src/services/api.service.mjs +1 -1
  133. package/esm2020/user-manage/src/services/dcp-api.service.mjs +79 -0
  134. package/esm2020/user-manage/src/services/dns.service.mjs +1 -1
  135. package/esm2020/user-manage/src/services/line.service.mjs +1 -1
  136. package/esm2020/user-manage/src/services/notification.service.mjs +1 -1
  137. package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  138. package/esm2020/user-manage/src/services/site-settings.service.mjs +1 -1
  139. package/esm2020/user-manage/src/services/sorting-utils.service.mjs +1 -1
  140. package/esm2020/user-manage/src/services/user.service.mjs +65 -19
  141. package/esm2020/user-manage/src/services/utils.service.mjs +1 -1
  142. package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +3 -3
  143. package/esm2020/user-manage/src/user-calling/user-calling.component.mjs +12 -7
  144. package/esm2020/user-manage/src/user-info/user-info.component.mjs +3 -3
  145. package/esm2020/user-manage/src/user-manage-widget.component.mjs +55 -20
  146. package/esm2020/user-manage/src/user-manage.module.mjs +10 -3
  147. package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +3 -3
  148. package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +3 -3
  149. package/esm2020/users-list/public-api.mjs +1 -1
  150. package/esm2020/users-list/src/app.constants.mjs +2 -1
  151. package/esm2020/users-list/src/classes/app-location.mjs +1 -1
  152. package/esm2020/users-list/src/classes/device.mjs +1 -1
  153. package/esm2020/users-list/src/classes/line.mjs +1 -1
  154. package/esm2020/users-list/src/classes/move-user.mjs +1 -1
  155. package/esm2020/users-list/src/classes/notification.mjs +1 -1
  156. package/esm2020/users-list/src/classes/simlified-user.mjs +1 -1
  157. package/esm2020/users-list/src/classes/table-data.mjs +1 -1
  158. package/esm2020/users-list/src/classes/user-list.mjs +2 -1
  159. package/esm2020/users-list/src/components/table-toolbar/table-toolbar.component.mjs +3 -3
  160. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +3 -3
  161. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.mjs +3 -3
  162. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.mjs +14 -3
  163. package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +5 -3
  164. package/esm2020/users-list/src/services/api-webex.service.mjs +1 -1
  165. package/esm2020/users-list/src/services/api.service.mjs +1 -1
  166. package/esm2020/users-list/src/services/dns.service.mjs +1 -1
  167. package/esm2020/users-list/src/services/events-communication.service.mjs +1 -1
  168. package/esm2020/users-list/src/services/notification.service.mjs +1 -1
  169. package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +1 -1
  170. package/esm2020/users-list/src/services/site-settings.service.mjs +1 -1
  171. package/esm2020/users-list/src/services/user.service.mjs +1 -1
  172. package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +3 -3
  173. package/esm2020/users-list/src/users-list.component.mjs +98 -15
  174. package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +3 -3
  175. package/esm2020/users-list/src/utils/common-functions.mjs +1 -1
  176. package/esm2020/users-list/src/utils/notifications/notification.component.mjs +3 -3
  177. package/esm2020/users-list/src/utils/utils.service.mjs +1 -1
  178. package/esm2020/workspaces/public-api.mjs +8 -0
  179. package/esm2020/workspaces/src/app.constants.mjs +15 -0
  180. package/esm2020/workspaces/src/components/workspace-confirm-dialog/workspace-confirm-dialog.component.mjs +32 -0
  181. package/esm2020/workspaces/src/components/workspace-detail/workspace-detail.component.mjs +50 -0
  182. package/esm2020/workspaces/src/components/workspaces-filters/workspaces-filters.component.mjs +56 -0
  183. package/esm2020/workspaces/src/components/workspaces-table/workspaces-table.component.mjs +114 -0
  184. package/esm2020/workspaces/src/material.module.mjs +83 -0
  185. package/esm2020/workspaces/src/services/api-webex.service.mjs +14 -0
  186. package/esm2020/workspaces/src/services/api.service.mjs +67 -0
  187. package/esm2020/workspaces/src/services/workspace-detail.service.mjs +54 -0
  188. package/esm2020/workspaces/src/services/workspaces-migration.service.mjs +59 -0
  189. package/esm2020/workspaces/src/services/workspaces.service.mjs +90 -0
  190. package/esm2020/workspaces/src/types/workspace.mjs +4 -0
  191. package/esm2020/workspaces/src/utils/app-loader/app-loader.mjs +14 -0
  192. package/esm2020/workspaces/src/utils/device-icon.mjs +13 -0
  193. package/esm2020/workspaces/src/workspaces.component.mjs +295 -0
  194. package/esm2020/workspaces/src/workspaces.module.mjs +51 -0
  195. package/esm2020/workspaces/tuki-io-tuki-widgets-workspaces.mjs +5 -0
  196. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +2 -2
  197. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  198. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +23 -20
  199. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  200. package/fesm2015/tuki-io-tuki-widgets-locations.mjs +439 -0
  201. package/fesm2015/tuki-io-tuki-widgets-locations.mjs.map +1 -0
  202. package/fesm2015/tuki-io-tuki-widgets-meetings.mjs +894 -0
  203. package/fesm2015/tuki-io-tuki-widgets-meetings.mjs.map +1 -0
  204. package/fesm2015/tuki-io-tuki-widgets-shared.mjs +280 -0
  205. package/fesm2015/tuki-io-tuki-widgets-shared.mjs.map +1 -0
  206. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +12 -9
  207. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  208. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +18 -31
  209. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  210. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +252 -65
  211. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  212. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +129 -30
  213. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  214. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs +958 -0
  215. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs.map +1 -0
  216. package/fesm2015/tuki-io-tuki-widgets.mjs +8 -8
  217. package/fesm2015/tuki-io-tuki-widgets.mjs.map +1 -1
  218. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +2 -2
  219. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  220. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +23 -20
  221. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  222. package/fesm2020/tuki-io-tuki-widgets-locations.mjs +433 -0
  223. package/fesm2020/tuki-io-tuki-widgets-locations.mjs.map +1 -0
  224. package/fesm2020/tuki-io-tuki-widgets-meetings.mjs +902 -0
  225. package/fesm2020/tuki-io-tuki-widgets-meetings.mjs.map +1 -0
  226. package/fesm2020/tuki-io-tuki-widgets-shared.mjs +280 -0
  227. package/fesm2020/tuki-io-tuki-widgets-shared.mjs.map +1 -0
  228. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +12 -9
  229. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  230. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +18 -31
  231. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  232. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +248 -64
  233. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  234. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +128 -30
  235. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  236. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs +958 -0
  237. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs.map +1 -0
  238. package/fesm2020/tuki-io-tuki-widgets.mjs +8 -8
  239. package/fesm2020/tuki-io-tuki-widgets.mjs.map +1 -1
  240. package/locations/index.d.ts +5 -0
  241. package/locations/public-api.d.ts +2 -0
  242. package/locations/src/app.constants.d.ts +5 -0
  243. package/locations/src/locations.component.d.ts +68 -0
  244. package/locations/src/locations.module.d.ts +12 -0
  245. package/locations/src/material.module.d.ts +11 -0
  246. package/locations/src/services/api.service.d.ts +18 -0
  247. package/locations/src/services/locations.service.d.ts +15 -0
  248. package/locations/src/types/location.d.ts +17 -0
  249. package/locations/src/utils/app-loader/app-loader.d.ts +6 -0
  250. package/meetings/index.d.ts +5 -0
  251. package/meetings/public-api.d.ts +2 -0
  252. package/meetings/src/app.constants.d.ts +8 -0
  253. package/meetings/src/components/live-meetings/live-meeting/live-meeting.component.d.ts +34 -0
  254. package/meetings/src/components/live-meetings/live-meetings.component.d.ts +43 -0
  255. package/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.d.ts +39 -0
  256. package/meetings/src/components/meeting-spaces/meeting-spaces.component.d.ts +27 -0
  257. package/meetings/src/material.module.d.ts +15 -0
  258. package/meetings/src/meetings.component.d.ts +29 -0
  259. package/meetings/src/meetings.module.d.ts +16 -0
  260. package/meetings/src/services/api.service.d.ts +18 -0
  261. package/meetings/src/services/live-meetings.service.d.ts +9 -0
  262. package/meetings/src/services/meeting-spaces.service.d.ts +16 -0
  263. package/meetings/src/types/live-meeting.d.ts +71 -0
  264. package/meetings/src/types/meeting-space.d.ts +52 -0
  265. package/meetings/src/utils/app-loader/app-loader.d.ts +6 -0
  266. package/package.json +33 -1
  267. package/shared/index.d.ts +5 -0
  268. package/shared/public-api.d.ts +3 -0
  269. package/shared/src/ui/material.module.d.ts +28 -0
  270. package/shared/src/ui/shared.module.d.ts +10 -0
  271. 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
  272. package/shared/src/ui/tk-page-section-row/tk-page-section-row.component.d.ts +6 -0
  273. package/shared/src/ui/ui.module.d.ts +11 -0
  274. package/user-device-manage/src/classes/simplified-user.d.ts +1 -1
  275. package/user-device-manage/src/user-device-manage.module.d.ts +9 -10
  276. package/user-manage/src/app.constants.d.ts +6 -0
  277. package/user-manage/src/classes/simplified-user.d.ts +11 -1
  278. package/user-manage/src/device-list/device-list.component.d.ts +2 -0
  279. package/user-manage/src/material.module.d.ts +2 -1
  280. package/user-manage/src/services/dcp-api.service.d.ts +21 -0
  281. package/user-manage/src/services/user.service.d.ts +8 -1
  282. package/user-manage/src/user-calling/user-calling.component.d.ts +3 -2
  283. package/user-manage/src/user-manage-widget.component.d.ts +10 -2
  284. package/user-manage/src/user-manage.module.d.ts +2 -1
  285. package/users-list/src/app.constants.d.ts +1 -0
  286. package/users-list/src/classes/simlified-user.d.ts +1 -1
  287. package/users-list/src/classes/user-list.d.ts +4 -0
  288. package/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.d.ts +3 -1
  289. package/users-list/src/move-user-wizard/move-user-wizard.component.d.ts +2 -1
  290. package/users-list/src/users-list.component.d.ts +6 -1
  291. package/workspaces/index.d.ts +5 -0
  292. package/workspaces/public-api.d.ts +2 -0
  293. package/workspaces/src/app.constants.d.ts +14 -0
  294. package/workspaces/src/components/workspace-confirm-dialog/workspace-confirm-dialog.component.d.ts +20 -0
  295. package/workspaces/src/components/workspace-detail/workspace-detail.component.d.ts +23 -0
  296. package/workspaces/src/components/workspaces-filters/workspaces-filters.component.d.ts +20 -0
  297. package/workspaces/src/components/workspaces-table/workspaces-table.component.d.ts +39 -0
  298. package/workspaces/src/material.module.d.ts +16 -0
  299. package/workspaces/src/services/api-webex.service.d.ts +6 -0
  300. package/workspaces/src/services/api.service.d.ts +18 -0
  301. package/workspaces/src/services/workspace-detail.service.d.ts +8 -0
  302. package/workspaces/src/services/workspaces-migration.service.d.ts +18 -0
  303. package/workspaces/src/services/workspaces.service.d.ts +11 -0
  304. package/workspaces/src/types/workspace.d.ts +161 -0
  305. package/workspaces/src/utils/app-loader/app-loader.d.ts +6 -0
  306. package/workspaces/src/utils/device-icon.d.ts +1 -0
  307. package/workspaces/src/workspaces.component.d.ts +71 -0
  308. package/workspaces/src/workspaces.module.d.ts +16 -0
  309. package/esm2020/user-device-manage/src/shared/tk-page-section/page-section.component.mjs +0 -13
@@ -0,0 +1,958 @@
1
+ import * as i2 from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { NgModule, Component, ViewEncapsulation, Inject, Injectable, EventEmitter, Input, Output } from '@angular/core';
5
+ import * as i1$1 from '@angular/common/http';
6
+ import { HttpHeaders, HttpClientModule } from '@angular/common/http';
7
+ import * as i2$1 from '@angular/forms';
8
+ import { FormsModule } from '@angular/forms';
9
+ import { MatButtonModule } from '@angular/material/button';
10
+ import * as i3 from '@angular/material/icon';
11
+ import { MatIconModule } from '@angular/material/icon';
12
+ import { MatTableModule } from '@angular/material/table';
13
+ import * as i3$1 from '@angular/material/progress-spinner';
14
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
15
+ import { MatFormFieldModule } from '@angular/material/form-field';
16
+ import { MatInputModule } from '@angular/material/input';
17
+ import * as i4 from '@angular/material/menu';
18
+ import { MatMenuModule } from '@angular/material/menu';
19
+ import * as i5 from '@angular/material/paginator';
20
+ import { MatPaginatorModule } from '@angular/material/paginator';
21
+ import * as i6 from '@angular/material/tooltip';
22
+ import { MatTooltipModule } from '@angular/material/tooltip';
23
+ import * as i1 from '@angular/material/dialog';
24
+ import { MatDialogModule, MAT_DIALOG_DATA } from '@angular/material/dialog';
25
+ import { of, map as map$1, switchMap, timer, takeWhile } from 'rxjs';
26
+ import { map } from 'rxjs/operators';
27
+
28
+ class MaterialModule {
29
+ }
30
+ MaterialModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
31
+ MaterialModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, imports: [MatButtonModule,
32
+ MatIconModule,
33
+ MatTableModule,
34
+ MatProgressSpinnerModule,
35
+ MatFormFieldModule,
36
+ MatInputModule,
37
+ MatMenuModule,
38
+ MatPaginatorModule,
39
+ MatTooltipModule,
40
+ MatDialogModule], exports: [MatButtonModule,
41
+ MatIconModule,
42
+ MatTableModule,
43
+ MatProgressSpinnerModule,
44
+ MatFormFieldModule,
45
+ MatInputModule,
46
+ MatMenuModule,
47
+ MatPaginatorModule,
48
+ MatTooltipModule,
49
+ MatDialogModule] });
50
+ MaterialModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, imports: [MatButtonModule,
51
+ MatIconModule,
52
+ MatTableModule,
53
+ MatProgressSpinnerModule,
54
+ MatFormFieldModule,
55
+ MatInputModule,
56
+ MatMenuModule,
57
+ MatPaginatorModule,
58
+ MatTooltipModule,
59
+ MatDialogModule, MatButtonModule,
60
+ MatIconModule,
61
+ MatTableModule,
62
+ MatProgressSpinnerModule,
63
+ MatFormFieldModule,
64
+ MatInputModule,
65
+ MatMenuModule,
66
+ MatPaginatorModule,
67
+ MatTooltipModule,
68
+ MatDialogModule] });
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, decorators: [{
70
+ type: NgModule,
71
+ args: [{
72
+ imports: [
73
+ MatButtonModule,
74
+ MatIconModule,
75
+ MatTableModule,
76
+ MatProgressSpinnerModule,
77
+ MatFormFieldModule,
78
+ MatInputModule,
79
+ MatMenuModule,
80
+ MatPaginatorModule,
81
+ MatTooltipModule,
82
+ MatDialogModule,
83
+ ],
84
+ exports: [
85
+ MatButtonModule,
86
+ MatIconModule,
87
+ MatTableModule,
88
+ MatProgressSpinnerModule,
89
+ MatFormFieldModule,
90
+ MatInputModule,
91
+ MatMenuModule,
92
+ MatPaginatorModule,
93
+ MatTooltipModule,
94
+ MatDialogModule,
95
+ ]
96
+ }]
97
+ }] });
98
+
99
+ class WorkspaceConfirmDialogComponent {
100
+ constructor(dialogRef, data) {
101
+ this.dialogRef = dialogRef;
102
+ this.data = data;
103
+ this.confirmButtonText = 'OK';
104
+ this.message = '';
105
+ this.title = '';
106
+ }
107
+ ngOnInit() {
108
+ this.confirmButtonText = this.data.confirmButtonText || '';
109
+ this.message = this.data.message || '';
110
+ this.title = this.data.title || '';
111
+ }
112
+ onClose(result) {
113
+ this.dialogRef.close(result);
114
+ }
115
+ }
116
+ WorkspaceConfirmDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspaceConfirmDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
117
+ WorkspaceConfirmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WorkspaceConfirmDialogComponent, selector: "tk-workspace-confirm-dialog", ngImport: i0, template: "<div id=\"tk-workspace-confirm-dialog\" class=\"tk-workspace-confirm-dialog\" aria-labelledby=\"tk-workspace-confirm-dialog-label\" role=\"dialog\">\n <h3 *ngIf=\"title\" class=\"tk-workspace-confirm-dialog__title\">{{ title }}</h3>\n <div mat-dialog-content *ngIf=\"message\" class=\"tk-workspace-confirm-dialog__content\">\n <div class=\"tk-workspace-confirm-dialog__message\" [innerHTML]=\"message\"></div>\n </div>\n <div mat-dialog-actions class=\"tk-workspace-confirm-dialog__actions\">\n <button type=\"button\" class=\"tk-workspace-confirm-dialog__button tk-workspace-confirm-dialog__button--cancel\" (click)=\"onClose(false)\">\n Cancel\n </button>\n <button type=\"button\" class=\"tk-workspace-confirm-dialog__button tk-workspace-confirm-dialog__button--confirm\" (click)=\"onClose(true)\">\n {{ confirmButtonText }}\n </button>\n </div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";.tk-workspace-confirm-dialog{min-height:150px;width:400px;box-sizing:border-box;position:relative;padding:0 0 30px;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif}.tk-workspace-confirm-dialog__title{text-align:center;font-weight:600;font-size:16px;margin:0 0 24px}.tk-workspace-confirm-dialog__content{color:#000000b3;font-size:14px;margin:0 auto 15px;padding:0}.tk-workspace-confirm-dialog__message{font-weight:500}.tk-workspace-confirm-dialog__message p{padding:15px 0 0;margin:0}.tk-workspace-confirm-dialog__actions{gap:16px;display:flex;justify-content:flex-end;margin:0}.tk-workspace-confirm-dialog__button{height:32px;padding:10px 12px;text-align:center;border-radius:50px;box-shadow:none;line-height:11px;border:none;font-size:14px;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:pointer}.tk-workspace-confirm-dialog__button--cancel{border:1px solid rgba(0,0,0,.5);color:#000;background:white}.tk-workspace-confirm-dialog__button--confirm{background:black;color:#fff}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }], encapsulation: i0.ViewEncapsulation.None });
118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspaceConfirmDialogComponent, decorators: [{
119
+ type: Component,
120
+ args: [{ selector: 'tk-workspace-confirm-dialog', encapsulation: ViewEncapsulation.None, template: "<div id=\"tk-workspace-confirm-dialog\" class=\"tk-workspace-confirm-dialog\" aria-labelledby=\"tk-workspace-confirm-dialog-label\" role=\"dialog\">\n <h3 *ngIf=\"title\" class=\"tk-workspace-confirm-dialog__title\">{{ title }}</h3>\n <div mat-dialog-content *ngIf=\"message\" class=\"tk-workspace-confirm-dialog__content\">\n <div class=\"tk-workspace-confirm-dialog__message\" [innerHTML]=\"message\"></div>\n </div>\n <div mat-dialog-actions class=\"tk-workspace-confirm-dialog__actions\">\n <button type=\"button\" class=\"tk-workspace-confirm-dialog__button tk-workspace-confirm-dialog__button--cancel\" (click)=\"onClose(false)\">\n Cancel\n </button>\n <button type=\"button\" class=\"tk-workspace-confirm-dialog__button tk-workspace-confirm-dialog__button--confirm\" (click)=\"onClose(true)\">\n {{ confirmButtonText }}\n </button>\n </div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";.tk-workspace-confirm-dialog{min-height:150px;width:400px;box-sizing:border-box;position:relative;padding:0 0 30px;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif}.tk-workspace-confirm-dialog__title{text-align:center;font-weight:600;font-size:16px;margin:0 0 24px}.tk-workspace-confirm-dialog__content{color:#000000b3;font-size:14px;margin:0 auto 15px;padding:0}.tk-workspace-confirm-dialog__message{font-weight:500}.tk-workspace-confirm-dialog__message p{padding:15px 0 0;margin:0}.tk-workspace-confirm-dialog__actions{gap:16px;display:flex;justify-content:flex-end;margin:0}.tk-workspace-confirm-dialog__button{height:32px;padding:10px 12px;text-align:center;border-radius:50px;box-shadow:none;line-height:11px;border:none;font-size:14px;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:pointer}.tk-workspace-confirm-dialog__button--cancel{border:1px solid rgba(0,0,0,.5);color:#000;background:white}.tk-workspace-confirm-dialog__button--confirm{background:black;color:#fff}\n"] }]
121
+ }], ctorParameters: function () {
122
+ return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
123
+ type: Inject,
124
+ args: [MAT_DIALOG_DATA]
125
+ }] }];
126
+ } });
127
+
128
+ class APIService {
129
+ constructor(httpClient) {
130
+ this.httpClient = httpClient;
131
+ }
132
+ fetch(url, params, cache) {
133
+ const headers = this.getHeaders(cache);
134
+ params = params || {};
135
+ return this.httpClient.get(this.apiUrl + url, { params: this.prepareEncodedParams(params), headers });
136
+ }
137
+ post(url, body, params = {}) {
138
+ body = body || null;
139
+ const headers = this.getHeaders();
140
+ return this.httpClient.post(this.apiUrl + url, body, { params: this.prepareEncodedParams(params), headers });
141
+ }
142
+ put(url, body = null, params = {}) {
143
+ const headers = this.getHeaders();
144
+ return this.httpClient.put(this.apiUrl + url, body, { headers, params: this.prepareEncodedParams(params) });
145
+ }
146
+ delete(url, params = {}) {
147
+ const headers = this.getHeaders();
148
+ return this.httpClient.delete(this.apiUrl + url, { headers, params: this.prepareEncodedParams(params) });
149
+ }
150
+ prepareEncodedParams(params) {
151
+ const result = {};
152
+ if (!params) {
153
+ return {};
154
+ }
155
+ for (const key of Object.keys(params)) {
156
+ if (params[key] !== undefined && params[key] !== null && params[key] !== '') {
157
+ const stringParam = params[key].toString();
158
+ result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;
159
+ }
160
+ }
161
+ return result;
162
+ }
163
+ getHeaders(cache) {
164
+ let headers = new HttpHeaders();
165
+ if (cache) {
166
+ headers = headers.append('_Cache', 'true ');
167
+ }
168
+ const token = this.token || this.getParameterByName('token');
169
+ headers = headers.append('Authorization', 'Bearer ' + token);
170
+ return headers;
171
+ }
172
+ getParameterByName(name, url = window.location.href) {
173
+ name = name.replace(/[\[\]]/g, '\\$&');
174
+ var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), results = regex.exec(url);
175
+ if (!results)
176
+ return null;
177
+ if (!results[2])
178
+ return '';
179
+ return decodeURIComponent(results[2].replace(/\+/g, ' '));
180
+ }
181
+ }
182
+ APIService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: APIService, deps: [{ token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
183
+ APIService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: APIService, providedIn: 'root' });
184
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: APIService, decorators: [{
185
+ type: Injectable,
186
+ args: [{
187
+ providedIn: 'root'
188
+ }]
189
+ }], ctorParameters: function () { return [{ type: i1$1.HttpClient }]; } });
190
+
191
+ class ApiWebexService extends APIService {
192
+ }
193
+ ApiWebexService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiWebexService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
194
+ ApiWebexService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiWebexService, providedIn: 'root' });
195
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ApiWebexService, decorators: [{
196
+ type: Injectable,
197
+ args: [{
198
+ providedIn: 'root',
199
+ }]
200
+ }] });
201
+
202
+ const API = {
203
+ WORKSPACES: {
204
+ GET_ALL: '/api/search/quicknonuserdevices',
205
+ },
206
+ MIGRATION: {
207
+ MOVE: '/api/migration/webex/singlemigration/features/PERSON',
208
+ MIGRATION_FORM: '/api/search/webex/customers/:customerId/migrationforms/:formId',
209
+ MIGRATION_FORM_ENTITIES_MIGRATED: '/api/search/webex/customers/:customerId/migrationformentities/migrated',
210
+ TRIGGER_FIRMWARE_MIGRATION: '/api/migration/:migrationType/firmwaremigration/customer/:customerId/migration/:migrationFormId',
211
+ REMOVE_UCM_LICENSE: '/api/migration/:controlHubType/removeucmlicense/customer/:customerId/migrationform/:migrationFormId',
212
+ WEBEX_REVERT: '/api/webex/provisioning/customers/:customerId/persons/:personId/revertmigration',
213
+ },
214
+ };
215
+ const ON_PREM_ID = 2542;
216
+
217
+ function parseResponse(response) {
218
+ return typeof response === 'string' ? JSON.parse(response) : response;
219
+ }
220
+ function toStatus(provisioningStatus) {
221
+ if (!provisioningStatus) {
222
+ return 'unavailable';
223
+ }
224
+ return provisioningStatus.toLowerCase() === 'active' ? 'active' : 'inactive';
225
+ }
226
+ function toWorkspace(item, index) {
227
+ var _a, _b, _c, _d, _e, _f;
228
+ const device = item.device;
229
+ const firstDirectoryNumber = (_c = (_b = (_a = device.associatedDNs) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.directoryNumber) !== null && _c !== void 0 ? _c : '';
230
+ return {
231
+ id: device.pkid || ((_e = (_d = item.workspaceDevices) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.deviceId) || device.name || `workspace-${index}`,
232
+ displayName: device.newName || device.name || 'Unnamed device',
233
+ typeLabel: device.userDeviceType || 'No type',
234
+ capacity: null,
235
+ location: ((_f = item.site) === null || _f === void 0 ? void 0 : _f.name) || device.siteName || device.location || '',
236
+ devices: (item.workspaceDevices || []).map(workspaceDevice => ({
237
+ id: workspaceDevice.deviceId,
238
+ kind: 'device',
239
+ label: workspaceDevice.model || workspaceDevice.mac,
240
+ model: workspaceDevice.model,
241
+ })),
242
+ scheduling: 'Not set',
243
+ callingLicense: firstDirectoryNumber,
244
+ provisioningType: 'On-premises',
245
+ status: toStatus(device.provisioningStatus),
246
+ statusLabel: device.provisioningStatus || 'Status unavailable',
247
+ device,
248
+ isHybrid: false,
249
+ };
250
+ }
251
+ function mergeDevices(a, b) {
252
+ var _a, _b;
253
+ return Object.assign(Object.assign(Object.assign({}, a), b), { cucmId: (_a = b.cucmId) !== null && _a !== void 0 ? _a : a.cucmId, webexUUID: (_b = b.webexUUID) !== null && _b !== void 0 ? _b : a.webexUUID });
254
+ }
255
+ function mergeWorkspacesByDeviceName(workspaces) {
256
+ const merged = new Map();
257
+ for (const workspace of workspaces) {
258
+ const key = workspace.device.name;
259
+ const existing = merged.get(key);
260
+ merged.set(key, existing ? Object.assign(Object.assign(Object.assign({}, existing), workspace), { device: mergeDevices(existing.device, workspace.device), isHybrid: true }) : workspace);
261
+ }
262
+ return Array.from(merged.values());
263
+ }
264
+ class WorkspacesService {
265
+ constructor(apiService) {
266
+ this.apiService = apiService;
267
+ }
268
+ fetchWorkspaces(customerId, size = 10, page = 0) {
269
+ const queryParams = {
270
+ type: 'ORPHAN_DEVICE',
271
+ 'device-name': 'SEP',
272
+ customerid: customerId.toString(),
273
+ size: size.toString(),
274
+ page: page.toString(),
275
+ };
276
+ return this.apiService.fetch(API.WORKSPACES.GET_ALL, queryParams).pipe(map((response) => {
277
+ var _a;
278
+ const parsed = parseResponse(response);
279
+ return {
280
+ workspaces: mergeWorkspacesByDeviceName(((parsed === null || parsed === void 0 ? void 0 : parsed.pageData) || []).map(toWorkspace)),
281
+ total: (_a = parsed === null || parsed === void 0 ? void 0 : parsed.total) !== null && _a !== void 0 ? _a : 0,
282
+ };
283
+ }));
284
+ }
285
+ }
286
+ WorkspacesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesService, deps: [{ token: APIService }], target: i0.ɵɵFactoryTarget.Injectable });
287
+ WorkspacesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesService, providedIn: 'root' });
288
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesService, decorators: [{
289
+ type: Injectable,
290
+ args: [{
291
+ providedIn: 'root'
292
+ }]
293
+ }], ctorParameters: function () { return [{ type: APIService }]; } });
294
+
295
+ class WorkspacesMigrationService {
296
+ constructor(apiWebexService) {
297
+ this.apiWebexService = apiWebexService;
298
+ }
299
+ moveToMT(customerId, device) {
300
+ return this.apiWebexService.post(API.MIGRATION.MOVE, this.getMoveBody(customerId, device));
301
+ }
302
+ getMigrationFormStatus(customerId, formId) {
303
+ const url = API.MIGRATION.MIGRATION_FORM
304
+ .replace(':customerId', String(customerId))
305
+ .replace(':formId', String(formId));
306
+ return this.apiWebexService.fetch(url);
307
+ }
308
+ getMigratedMigrationFormEntities(customerId, webexUUID, feature = 'PERSON') {
309
+ const url = API.MIGRATION.MIGRATION_FORM_ENTITIES_MIGRATED.replace(':customerId', String(customerId));
310
+ return this.apiWebexService.fetch(url, { webexUUID, feature });
311
+ }
312
+ triggerFirmwareUpgrade(customerId, migrationFormId, deviceMap) {
313
+ const url = API.MIGRATION.TRIGGER_FIRMWARE_MIGRATION
314
+ .replace(':migrationType', 'WEBEX')
315
+ .replace(':customerId', String(customerId))
316
+ .replace(':migrationFormId', String(migrationFormId));
317
+ return this.apiWebexService.post(url, deviceMap);
318
+ }
319
+ removeUcmLicense(customerId, migrationFormId, controlHubType = 'WEBEX') {
320
+ const url = API.MIGRATION.REMOVE_UCM_LICENSE
321
+ .replace(':controlHubType', controlHubType)
322
+ .replace(':customerId', String(customerId))
323
+ .replace(':migrationFormId', String(migrationFormId));
324
+ return this.apiWebexService.post(url, {});
325
+ }
326
+ revertMigration(customerId, personId) {
327
+ const url = API.MIGRATION.WEBEX_REVERT
328
+ .replace(':customerId', String(customerId))
329
+ .replace(':personId', personId);
330
+ return this.apiWebexService.post(url, {});
331
+ }
332
+ getMoveBody(customerId, device) {
333
+ return {
334
+ customerId,
335
+ entities: {
336
+ PERSON: [{ cucmId: device.cucmId, entityId: device.name }],
337
+ },
338
+ };
339
+ }
340
+ }
341
+ WorkspacesMigrationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesMigrationService, deps: [{ token: ApiWebexService }], target: i0.ɵɵFactoryTarget.Injectable });
342
+ WorkspacesMigrationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesMigrationService, providedIn: 'root' });
343
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesMigrationService, decorators: [{
344
+ type: Injectable,
345
+ args: [{
346
+ providedIn: 'root',
347
+ }]
348
+ }], ctorParameters: function () { return [{ type: ApiWebexService }]; } });
349
+
350
+ class WorkspacesFiltersComponent {
351
+ constructor() {
352
+ this.resultCount = 0;
353
+ this.typeOptions = [];
354
+ this.locationOptions = [];
355
+ this.searchChange = new EventEmitter();
356
+ this.typeChange = new EventEmitter();
357
+ this.locationChange = new EventEmitter();
358
+ this.addWorkspace = new EventEmitter();
359
+ this.searchTerm = '';
360
+ this.selectedType = '';
361
+ this.selectedLocation = '';
362
+ }
363
+ onSearchInputChange(event) {
364
+ this.searchTerm = event.target.value;
365
+ this.searchChange.emit(this.searchTerm);
366
+ }
367
+ onTypeChange(value) {
368
+ this.selectedType = value;
369
+ this.typeChange.emit(value);
370
+ }
371
+ onLocationChange(value) {
372
+ this.selectedLocation = value;
373
+ this.locationChange.emit(value);
374
+ }
375
+ onAddWorkspace() {
376
+ this.addWorkspace.emit();
377
+ }
378
+ }
379
+ WorkspacesFiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesFiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
380
+ WorkspacesFiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WorkspacesFiltersComponent, selector: "tk-workspaces-filters", inputs: { resultCount: "resultCount", typeOptions: "typeOptions", locationOptions: "locationOptions" }, outputs: { searchChange: "searchChange", typeChange: "typeChange", locationChange: "locationChange", addWorkspace: "addWorkspace" }, ngImport: i0, template: "<div class=\"tk-workspaces-filters\">\n <div class=\"tk-workspaces-filters__search\">\n <input\n class=\"tk-workspaces-filters__search-input blue-input\"\n type=\"text\"\n placeholder=\"Search\"\n [value]=\"searchTerm\"\n (input)=\"onSearchInputChange($event)\"\n />\n <mat-icon class=\"tk-workspaces-filters__search-icon\">search</mat-icon>\n </div>\n\n <div class=\"tk-workspaces-filters__filters\">\n <span class=\"tk-workspaces-filters__filters-label\">Filters:</span>\n\n <div class=\"tk-workspaces-filters__select-wrap\">\n <select\n class=\"tk-workspaces-filters__select\"\n [ngModel]=\"selectedType\"\n (ngModelChange)=\"onTypeChange($event)\">\n <option value=\"\">General</option>\n <option *ngFor=\"let type of typeOptions\" [value]=\"type\">{{ type }}</option>\n </select>\n <mat-icon class=\"tk-workspaces-filters__select-icon\">expand_more</mat-icon>\n </div>\n\n <div class=\"tk-workspaces-filters__select-wrap\">\n <select\n class=\"tk-workspaces-filters__select\"\n [ngModel]=\"selectedLocation\"\n (ngModelChange)=\"onLocationChange($event)\">\n <option value=\"\">Location</option>\n <option *ngFor=\"let location of locationOptions\" [value]=\"location\">{{ location }}</option>\n </select>\n <mat-icon class=\"tk-workspaces-filters__select-icon\">expand_more</mat-icon>\n </div>\n </div>\n\n <span class=\"tk-workspaces-filters__count\">{{ resultCount }} workspace{{ resultCount === 1 ? '' : 's' }} in total</span>\n\n <button type=\"button\" class=\"tk-workspaces-filters__add-button\" [matMenuTriggerFor]=\"addMenu\">\n Add workspace\n <mat-icon class=\"tk-workspaces-filters__add-icon\">expand_more</mat-icon>\n </button>\n\n <mat-menu #addMenu=\"matMenu\">\n <button type=\"button\" mat-menu-item (click)=\"onAddWorkspace()\">Add workspace</button>\n <button type=\"button\" mat-menu-item disabled>Import workspaces</button>\n </mat-menu>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;color:#000000f2}.tk-workspaces-filters{display:flex;align-items:center;gap:.75rem;margin-bottom:1rem;flex-wrap:wrap;font-size:.875rem;font-weight:400;color:#000000f2}.tk-workspaces-filters__search{position:relative;min-width:14rem}.tk-workspaces-filters__search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006;pointer-events:none}.tk-workspaces-filters__search-input{width:100%;height:34px;padding:6px 12px 6px 44px;border-radius:.5rem;outline:none;box-sizing:border-box;font-family:inherit;font-size:1rem;color:#000000f2;background:#fff}.tk-workspaces-filters__search-input::placeholder{color:#0006}.tk-workspaces-filters__filters{display:flex;align-items:center;gap:.5rem}.tk-workspaces-filters__filters-label{font-size:.875rem;color:#000000f2;white-space:nowrap}.tk-workspaces-filters__select-wrap{position:relative;display:flex;align-items:center}.tk-workspaces-filters__select{appearance:none;height:34px;padding:6px 32px 6px 12px;background:#fff;border:1px solid rgba(0,0,0,.5019607843);border-radius:.5rem;font-family:inherit;font-size:1rem;color:#222;cursor:pointer;box-sizing:border-box}.tk-workspaces-filters__select:focus{outline:none;border-color:#0006}.tk-workspaces-filters__select-icon{position:absolute;right:.375rem;font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006;pointer-events:none}.tk-workspaces-filters__count{margin-left:auto;font-size:.875rem;color:#0009;white-space:nowrap;font-weight:400;flex:1}.tk-workspaces-filters__add-button{display:inline-flex;align-items:center;gap:.25rem;padding:.5rem 1rem;background:#000;color:#fff;border:none;border-radius:6.25rem;font-family:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;white-space:nowrap}.tk-workspaces-filters__add-button:hover{background:#222}.tk-workspaces-filters__add-icon{font-size:1.125rem;height:1.125rem;width:1.125rem}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] });
381
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesFiltersComponent, decorators: [{
382
+ type: Component,
383
+ args: [{ selector: 'tk-workspaces-filters', template: "<div class=\"tk-workspaces-filters\">\n <div class=\"tk-workspaces-filters__search\">\n <input\n class=\"tk-workspaces-filters__search-input blue-input\"\n type=\"text\"\n placeholder=\"Search\"\n [value]=\"searchTerm\"\n (input)=\"onSearchInputChange($event)\"\n />\n <mat-icon class=\"tk-workspaces-filters__search-icon\">search</mat-icon>\n </div>\n\n <div class=\"tk-workspaces-filters__filters\">\n <span class=\"tk-workspaces-filters__filters-label\">Filters:</span>\n\n <div class=\"tk-workspaces-filters__select-wrap\">\n <select\n class=\"tk-workspaces-filters__select\"\n [ngModel]=\"selectedType\"\n (ngModelChange)=\"onTypeChange($event)\">\n <option value=\"\">General</option>\n <option *ngFor=\"let type of typeOptions\" [value]=\"type\">{{ type }}</option>\n </select>\n <mat-icon class=\"tk-workspaces-filters__select-icon\">expand_more</mat-icon>\n </div>\n\n <div class=\"tk-workspaces-filters__select-wrap\">\n <select\n class=\"tk-workspaces-filters__select\"\n [ngModel]=\"selectedLocation\"\n (ngModelChange)=\"onLocationChange($event)\">\n <option value=\"\">Location</option>\n <option *ngFor=\"let location of locationOptions\" [value]=\"location\">{{ location }}</option>\n </select>\n <mat-icon class=\"tk-workspaces-filters__select-icon\">expand_more</mat-icon>\n </div>\n </div>\n\n <span class=\"tk-workspaces-filters__count\">{{ resultCount }} workspace{{ resultCount === 1 ? '' : 's' }} in total</span>\n\n <button type=\"button\" class=\"tk-workspaces-filters__add-button\" [matMenuTriggerFor]=\"addMenu\">\n Add workspace\n <mat-icon class=\"tk-workspaces-filters__add-icon\">expand_more</mat-icon>\n </button>\n\n <mat-menu #addMenu=\"matMenu\">\n <button type=\"button\" mat-menu-item (click)=\"onAddWorkspace()\">Add workspace</button>\n <button type=\"button\" mat-menu-item disabled>Import workspaces</button>\n </mat-menu>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;color:#000000f2}.tk-workspaces-filters{display:flex;align-items:center;gap:.75rem;margin-bottom:1rem;flex-wrap:wrap;font-size:.875rem;font-weight:400;color:#000000f2}.tk-workspaces-filters__search{position:relative;min-width:14rem}.tk-workspaces-filters__search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006;pointer-events:none}.tk-workspaces-filters__search-input{width:100%;height:34px;padding:6px 12px 6px 44px;border-radius:.5rem;outline:none;box-sizing:border-box;font-family:inherit;font-size:1rem;color:#000000f2;background:#fff}.tk-workspaces-filters__search-input::placeholder{color:#0006}.tk-workspaces-filters__filters{display:flex;align-items:center;gap:.5rem}.tk-workspaces-filters__filters-label{font-size:.875rem;color:#000000f2;white-space:nowrap}.tk-workspaces-filters__select-wrap{position:relative;display:flex;align-items:center}.tk-workspaces-filters__select{appearance:none;height:34px;padding:6px 32px 6px 12px;background:#fff;border:1px solid rgba(0,0,0,.5019607843);border-radius:.5rem;font-family:inherit;font-size:1rem;color:#222;cursor:pointer;box-sizing:border-box}.tk-workspaces-filters__select:focus{outline:none;border-color:#0006}.tk-workspaces-filters__select-icon{position:absolute;right:.375rem;font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006;pointer-events:none}.tk-workspaces-filters__count{margin-left:auto;font-size:.875rem;color:#0009;white-space:nowrap;font-weight:400;flex:1}.tk-workspaces-filters__add-button{display:inline-flex;align-items:center;gap:.25rem;padding:.5rem 1rem;background:#000;color:#fff;border:none;border-radius:6.25rem;font-family:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;white-space:nowrap}.tk-workspaces-filters__add-button:hover{background:#222}.tk-workspaces-filters__add-icon{font-size:1.125rem;height:1.125rem;width:1.125rem}\n"] }]
384
+ }], propDecorators: { resultCount: [{
385
+ type: Input
386
+ }], typeOptions: [{
387
+ type: Input
388
+ }], locationOptions: [{
389
+ type: Input
390
+ }], searchChange: [{
391
+ type: Output
392
+ }], typeChange: [{
393
+ type: Output
394
+ }], locationChange: [{
395
+ type: Output
396
+ }], addWorkspace: [{
397
+ type: Output
398
+ }] } });
399
+
400
+ const DEFAULT_DEVICE_ICON = 'assets/icons/cisco_8851.png';
401
+ const DEVICE_MODEL_ICONS = {
402
+ 'cisco 8851': 'assets/icons/cisco_8851.png',
403
+ 'cisco 8845': 'assets/icons/cisco_8845.png',
404
+ 'cisco 9841': 'assets/icons/cisco_9841.png',
405
+ };
406
+ function getDeviceIcon(model) {
407
+ var _a;
408
+ if (!model) {
409
+ return DEFAULT_DEVICE_ICON;
410
+ }
411
+ return (_a = DEVICE_MODEL_ICONS[model.trim().toLowerCase()]) !== null && _a !== void 0 ? _a : DEFAULT_DEVICE_ICON;
412
+ }
413
+
414
+ class WorkspacesTableComponent {
415
+ constructor() {
416
+ this.workspaces = [];
417
+ this.total = 0;
418
+ this.pageIndex = 0;
419
+ this.pageSize = 10;
420
+ this.pageSizeOptions = [10, 25, 50, 100];
421
+ this.pendingWorkspaceIds = new Set();
422
+ this.openWorkspace = new EventEmitter();
423
+ this.licenseWithHybrid = new EventEmitter();
424
+ this.migrateToMT = new EventEmitter();
425
+ this.enableWebexCalling = new EventEmitter();
426
+ this.migrateToUCM = new EventEmitter();
427
+ this.addDevice = new EventEmitter();
428
+ this.pageChange = new EventEmitter();
429
+ this.selectedIds = new Set();
430
+ }
431
+ get allSelected() {
432
+ return this.workspaces.length > 0 && this.selectedIds.size === this.workspaces.length;
433
+ }
434
+ get someSelected() {
435
+ return this.selectedIds.size > 0 && !this.allSelected;
436
+ }
437
+ toggleAll() {
438
+ this.selectedIds = this.allSelected ? new Set() : new Set(this.workspaces.map(workspace => workspace.id));
439
+ }
440
+ toggleRow(workspaceId) {
441
+ const nextSelection = new Set(this.selectedIds);
442
+ if (nextSelection.has(workspaceId)) {
443
+ nextSelection.delete(workspaceId);
444
+ }
445
+ else {
446
+ nextSelection.add(workspaceId);
447
+ }
448
+ this.selectedIds = nextSelection;
449
+ }
450
+ isSelected(workspaceId) {
451
+ return this.selectedIds.has(workspaceId);
452
+ }
453
+ onOpenWorkspace(workspace) {
454
+ this.openWorkspace.emit(workspace.id);
455
+ }
456
+ onAddDevice(workspace, event) {
457
+ event.stopPropagation();
458
+ this.addDevice.emit(workspace.id);
459
+ }
460
+ onPage(event) {
461
+ this.selectedIds = new Set();
462
+ this.pageChange.emit({ pageIndex: event.pageIndex, pageSize: event.pageSize });
463
+ }
464
+ getDeviceIcon(model) {
465
+ return getDeviceIcon(model);
466
+ }
467
+ isPending(workspaceId) {
468
+ return this.pendingWorkspaceIds.has(workspaceId);
469
+ }
470
+ isMoveToMTDisabled(workspace) {
471
+ if (workspace.status !== 'active') {
472
+ return true;
473
+ }
474
+ return !workspace.isHybrid && !!workspace.device.webexUUID;
475
+ }
476
+ isEnableWebexCallingDisabled(workspace) {
477
+ if (workspace.status !== 'inactive') {
478
+ return true;
479
+ }
480
+ return !workspace.isHybrid && !workspace.device.webexUUID;
481
+ }
482
+ isMigrateToUCMDisabled(workspace) {
483
+ return !workspace.device.webexUUID || workspace.status !== 'active';
484
+ }
485
+ }
486
+ WorkspacesTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
487
+ WorkspacesTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WorkspacesTableComponent, selector: "tk-workspaces-table", inputs: { workspaces: "workspaces", total: "total", pageIndex: "pageIndex", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", pendingWorkspaceIds: "pendingWorkspaceIds" }, outputs: { openWorkspace: "openWorkspace", licenseWithHybrid: "licenseWithHybrid", migrateToMT: "migrateToMT", enableWebexCalling: "enableWebexCalling", migrateToUCM: "migrateToUCM", addDevice: "addDevice", pageChange: "pageChange" }, ngImport: i0, template: "<div class=\"tk-workspaces-table__bulk-bar\">Select one or more workspaces for bulk actions</div>\n\n<div class=\"tk-workspaces-table__wrapper\">\n <table class=\"tk-workspaces-table__table\">\n <thead>\n <tr>\n <th class=\"tk-workspaces-table__checkbox-cell\">\n <input type=\"checkbox\" [checked]=\"allSelected\" [indeterminate]=\"someSelected\" (change)=\"toggleAll()\" />\n </th>\n <th>Name</th>\n <th>Devices</th>\n <th>Scheduling</th>\n <th>Calling</th>\n <th>Provisioning Type</th>\n <th>Status</th>\n <th class=\"tk-workspaces-table__settings-cell\">\n <mat-icon class=\"tk-workspaces-table__settings-icon\">settings</mat-icon>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let workspace of workspaces\"\n [class.tk-workspaces-table__row--selected]=\"isSelected(workspace.id)\">\n <td class=\"tk-workspaces-table__checkbox-cell\">\n <input type=\"checkbox\" [checked]=\"isSelected(workspace.id)\" (change)=\"toggleRow(workspace.id)\" />\n </td>\n <td class=\"tk-workspaces-table__name-cell\" (click)=\"onOpenWorkspace(workspace)\">\n <div class=\"tk-workspaces-table__name-wrapper\">\n <span class=\"tk-workspaces-table__name-icon\">\n <img src=\"assets/icons/device-in-room-regular.svg\" alt=\"\" />\n </span>\n <div class=\"tk-workspaces-table__name-info\">\n <a href=\"javascript:void(0)\" class=\"tk-workspaces-table__name-link\">{{ workspace.displayName }}</a>\n <div class=\"tk-workspaces-table__name-meta\">\n <span class=\"tk-workspaces-table__name-type\">{{ workspace.typeLabel }}</span>\n <span class=\"tk-workspaces-table__meta-sep\">&middot;</span>\n <img class=\"tk-workspaces-table__meta-icon\" src=\"assets/icons/people-regular.svg\" alt=\"\" />\n <span class=\"tk-workspaces-table__name-capacity\">{{ workspace.capacity ?? 'No capacity' }}</span>\n <span class=\"tk-workspaces-table__meta-sep\">&middot;</span>\n <!-- <mat-icon class=\"tk-workspaces-table__meta-icon\">location_on</mat-icon> -->\n <img class=\"tk-workspaces-table__meta-icon\" src=\"assets/icons/location-regular.svg\" alt=\"\" />\n <a\n *ngIf=\"workspace.location; else noLocation\"\n href=\"javascript:void(0)\"\n class=\"tk-workspaces-table__location-link\">{{ workspace.location }}</a>\n <ng-template #noLocation>\n <span class=\"tk-workspaces-table__location-empty\">No location</span>\n </ng-template>\n </div>\n </div>\n </div>\n </td>\n <td>\n <div class=\"tk-workspaces-table__devices\">\n <ng-container *ngIf=\"workspace.devices.length; else noDevices\">\n <span *ngFor=\"let device of workspace.devices\" class=\"tk-workspaces-table__device-card\" [title]=\"device.label\">\n <img\n class=\"tk-workspaces-table__device-icon\"\n [src]=\"getDeviceIcon(device.model)\"\n [alt]=\"device.label\" />\n </span>\n </ng-container>\n <!-- <ng-container *ngFor=\"let device of workspace.devices\">\n <span *ngIf=\"device && device.model else noDevice\" class=\"tk-workspaces-table__device-card\" [title]=\"device.label\">\n <img\n class=\"tk-workspaces-table__device-icon\"\n [src]=\"getDeviceIcon(device.model)\"\n [alt]=\"device.label\" />\n </span>\n </ng-container> -->\n <ng-template #noDevices>\n <button\n type=\"button\"\n class=\"tk-workspaces-table__device-add\"\n (click)=\"onAddDevice(workspace, $event)\">\n <span class=\"tk-workspaces-table__device-add-label\">\n <img\n class=\"tk-workspaces-table__device-add-icon\"\n src=\"assets/icons/multipled-devices-regular.svg\"\n alt=\"\" />\n Add device\n </span>\n </button>\n </ng-template>\n </div>\n </td>\n <td>{{ workspace.scheduling }}</td>\n <td class=\"tk-workspaces-table__calling-cell\">\n <span class=\"tk-workspaces-table__calling-content\">\n <img class=\"tk-workspaces-table__calling-icon\" src=\"assets/icons/location-regular.svg\" alt=\"\" />\n <span class=\"tk-workspaces-table__calling-text\" title=\"Cisco Webex Calling Professional Workspace\">Cisco Webex Calling Professional Workspace</span>\n </span>\n </td>\n <td>\n <div *ngIf=\"workspace.isHybrid\" class=\"tk-workspaces-table__provisioning-icons\">\n <span class=\"icon-wrapper\"\n ><img\n src=\"assets/icons/webex.svg\"\n [matTooltip]=\"'Webex Calling'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n <span class=\"icon-wrapper\"\n ><img\n src=\"assets/icons/di_cloud_24.svg\"\n [matTooltip]=\"'Webex Calling DI'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n </div>\n <ng-container *ngIf=\"!workspace.isHybrid\">\n <span *ngIf=\"workspace.device.cucmId != null\" class=\"icon-wrapper\"\n ><img\n src=\"assets/icons/di_cloud_24.svg\"\n [matTooltip]=\"'Webex Calling DI'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n <span *ngIf=\"workspace.device.webexUUID != null\" class=\"icon-wrapper\"\n ><img\n src=\"assets/icons/webex.svg\"\n [matTooltip]=\"'Webex Calling'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n </ng-container>\n </td>\n <td>\n <span class=\"tk-workspaces-table__status\">\n <span\n class=\"tk-workspaces-table__status-dot\"\n [class.tk-workspaces-table__status-dot--hybrid]=\"workspace.isHybrid\"\n [class.tk-workspaces-table__status-dot--active]=\"!workspace.isHybrid\"></span>\n {{ workspace.isHybrid ? 'Hybrid' : 'Active' }}\n </span>\n </td>\n <td class=\"tk-workspaces-table__actions-cell\">\n <mat-progress-spinner\n *ngIf=\"isPending(workspace.id)\"\n class=\"tk-workspaces-table__actions-spinner\"\n [diameter]=\"20\"\n strokeWidth=\"2\"\n mode=\"indeterminate\">\n </mat-progress-spinner>\n <button\n *ngIf=\"!isPending(workspace.id)\"\n type=\"button\"\n class=\"tk-workspaces-table__actions-button\"\n [matMenuTriggerFor]=\"rowMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #rowMenu=\"matMenu\">\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isMoveToMTDisabled(workspace)\"\n (click)=\"licenseWithHybrid.emit(workspace)\">\n License with Hybrid\n </button>\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isMoveToMTDisabled(workspace)\"\n (click)=\"migrateToMT.emit(workspace)\">\n Migrate User to MT\n </button>\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isEnableWebexCallingDisabled(workspace)\"\n (click)=\"enableWebexCalling.emit(workspace)\">\n Enable Webex Calling\n </button>\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isMigrateToUCMDisabled(workspace)\"\n (click)=\"migrateToUCM.emit(workspace)\">\n Migrate User to UCM\n </button>\n </mat-menu>\n </td>\n </tr>\n <tr *ngIf=\"!workspaces.length\">\n <td [attr.colspan]=\"8\" class=\"tk-workspaces-table__empty\">No workspaces to display.</td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<mat-paginator\n class=\"tk-workspaces-table__paginator\"\n [length]=\"total\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\">\n</mat-paginator>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;color:#000000f2}.tk-workspaces-table__bulk-bar{margin-bottom:1rem;font-size:.875rem;color:#000000f2}.tk-workspaces-table__wrapper{overflow-x:auto}.tk-workspaces-table__paginator{border:1px solid rgba(0,0,0,.12);border-top:none;background:#fff;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif}.tk-workspaces-table__table{width:100%;border-collapse:collapse;font-family:Inter,sans-serif}.tk-workspaces-table__table th{height:39px;padding:.5rem 1.5rem .5rem .75rem;background-color:#ededed;text-align:start;font-size:.75rem;font-weight:500;color:#000000b3;word-break:break-all;max-inline-size:100%;cursor:pointer}.tk-workspaces-table__table th:hover{background-color:#dedede}.tk-workspaces-table__table td{height:49px;padding:.5rem 1.5rem .5rem .75rem;box-shadow:inset 0 -1px #0003;background-color:#fff;text-align:start;font-size:.875rem;color:#000000f2;word-break:break-all;cursor:pointer;transition:background-color .2s,box-shadow .2s}.tk-workspaces-table__table tbody tr:hover td{background:#ededed}.tk-workspaces-table__table tbody tr.tk-workspaces-table__row--selected td{background:#f0f6ff}.tk-workspaces-table__checkbox-cell{width:2.5rem;cursor:default}.tk-workspaces-table__settings-cell{width:2.5rem;text-align:center}.tk-workspaces-table__settings-icon{font-size:1.125rem;height:1.125rem;width:1.125rem;color:#00000080}.tk-workspaces-table__name-cell{min-width:14rem}.tk-workspaces-table__name-wrapper{display:flex;align-items:center;gap:.625rem}.tk-workspaces-table__name-icon{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;flex-shrink:0;border-radius:50%;background:#2b2b2b;color:#fff}.tk-workspaces-table__name-icon img{height:1.125rem;width:1.125rem;filter:brightness(0) invert(1)}.tk-workspaces-table__name-info{display:flex;flex-direction:column;gap:.5rem;min-width:0}.tk-workspaces-table__name-link{color:#000000de;font-weight:500;text-decoration:none}.tk-workspaces-table__name-meta{display:flex;align-items:center;gap:.25rem;font-size:.875rem;color:#0009;white-space:nowrap}.tk-workspaces-table__name-meta .tk-workspaces-table__name-type,.tk-workspaces-table__name-meta .tk-workspaces-table__name-capacity{color:#0006}.tk-workspaces-table__meta-icon{font-size:.875rem;height:.875rem;width:.875rem;color:#0006}.tk-workspaces-table__meta-sep{color:#0000004d}.tk-workspaces-table__location-link{color:#0353a8;text-decoration:none}.tk-workspaces-table__location-empty{color:#0009}.tk-workspaces-table__devices{display:flex;align-items:flex-start;gap:.625rem;padding:.5rem 0}.tk-workspaces-table__device-card{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;padding:.5rem;border:1px solid rgba(0,0,0,.12);border-radius:.5rem;background:#fff;box-sizing:border-box;padding:12px;block-size:60px}.tk-workspaces-table__device-icon{inline-size:40px;display:inline-block;vertical-align:middle;max-inline-size:100%;block-size:auto}.tk-workspaces-table__device-avatar{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:50%;background:#757575;color:#fff;font-size:.6875rem;font-weight:600}.tk-workspaces-table__device-add{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:3.5rem;padding:.5rem 1.25rem;border:none;border-radius:.5rem;background-color:#fff;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%22186%22 height%3D%2274%22 viewBox%3D%220 0 186 74%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath d%3D%22M1 8.51269C1 4.09442 4.58172 0.512695 9 0.512695H65C69.4183 0.512695 73 4.09442 73 8.5127V64.5127C73 68.931 69.4183 72.5127 65 72.5127H9C4.58172 72.5127 1 68.931 1 64.5127V8.51269Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M1 8.51269C1 4.09442 4.58172 0.512695 9 0.512695H65C69.4183 0.512695 73 4.09442 73 8.5127V64.5127C73 68.931 69.4183 72.5127 65 72.5127H9C4.58172 72.5127 1 68.931 1 64.5127V8.51269Z%22 stroke%3D%22url(%23paint0_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 8.51269C77 4.09442 80.5817 0.512695 85 0.512695H111C115.418 0.512695 119 4.09442 119 8.5127V26.5127C119 30.931 115.418 34.5127 111 34.5127H85C80.5817 34.5127 77 30.931 77 26.5127V8.51269Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 8.51269C77 4.09442 80.5817 0.512695 85 0.512695H111C115.418 0.512695 119 4.09442 119 8.5127V26.5127C119 30.931 115.418 34.5127 111 34.5127H85C80.5817 34.5127 77 30.931 77 26.5127V8.51269Z%22 stroke%3D%22url(%23paint1_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M123 8.51269C123 4.09442 126.582 0.512695 131 0.512695H177C181.418 0.512695 185 4.09442 185 8.5127V26.5127C185 30.931 181.418 34.5127 177 34.5127H131C126.582 34.5127 123 30.931 123 26.5127V8.51269Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M123 8.51269C123 4.09442 126.582 0.512695 131 0.512695H177C181.418 0.512695 185 4.09442 185 8.5127V26.5127C185 30.931 181.418 34.5127 177 34.5127H131C126.582 34.5127 123 30.931 123 26.5127V8.51269Z%22 stroke%3D%22url(%23paint2_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 46.5127C77 42.0944 80.5817 38.5127 85 38.5127H131C135.418 38.5127 139 42.0944 139 46.5127V64.5127C139 68.931 135.418 72.5127 131 72.5127H85C80.5817 72.5127 77 68.931 77 64.5127V46.5127Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 46.5127C77 42.0944 80.5817 38.5127 85 38.5127H131C135.418 38.5127 139 42.0944 139 46.5127V64.5127C139 68.931 135.418 72.5127 131 72.5127H85C80.5817 72.5127 77 68.931 77 64.5127V46.5127Z%22 stroke%3D%22url(%23paint3_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M143 46.5127C143 42.0944 146.582 38.5127 151 38.5127H177C181.418 38.5127 185 42.0944 185 46.5127V64.5127C185 68.931 181.418 72.5127 177 72.5127H151C146.582 72.5127 143 68.931 143 64.5127V46.5127Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M143 46.5127C143 42.0944 146.582 38.5127 151 38.5127H177C181.418 38.5127 185 42.0944 185 46.5127V64.5127C185 68.931 181.418 72.5127 177 72.5127H151C146.582 72.5127 143 68.931 143 64.5127V46.5127Z%22 stroke%3D%22url(%23paint4_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cdefs%3E%3CradialGradient id%3D%22paint0_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint1_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint2_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint3_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint4_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\");background-repeat:no-repeat;background-position:center;background-size:contain;font-family:inherit;white-space:nowrap;cursor:pointer;box-sizing:border-box}.tk-workspaces-table__device-add-label{display:inline-flex;align-items:center;gap:.5rem;padding:.375rem .75rem;border-radius:999px;color:#000000f2;font-size:.875rem;transition:background-color .15s}.tk-workspaces-table__device-add:hover .tk-workspaces-table__device-add-label{background-color:#ededed}.tk-workspaces-table__device-add-icon{height:1.125rem;width:1.125rem}.tk-workspaces-table__devices-empty{color:#0000004d}.tk-workspaces-table__calling-cell{max-width:14rem}.tk-workspaces-table__calling-content{display:flex;align-items:center;gap:.375rem}.tk-workspaces-table__calling-icon{flex:none;width:1rem;height:1rem;opacity:.4}.tk-workspaces-table__calling-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tk-workspaces-table__provisioning-icon{font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0009}.tk-workspaces-table__provisioning-icons{display:flex;align-items:center;gap:.5rem}.tk-workspaces-table__status{display:inline-flex;align-items:center;gap:.375rem;white-space:nowrap}.tk-workspaces-table__status-dot{width:.5rem;height:.5rem;border-radius:50%;background:rgba(0,0,0,.3);flex-shrink:0}.tk-workspaces-table__status-dot--active{background:#1d805f}.tk-workspaces-table__status-dot--inactive{background:#c73636}.tk-workspaces-table__status-dot--hybrid{background:#639fff}.tk-workspaces-table__actions-cell{width:2.5rem;text-align:center}.tk-workspaces-table__actions-button{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;padding:.25rem;color:#00000080;cursor:pointer;border-radius:4px}.tk-workspaces-table__actions-button:hover{background:rgba(0,0,0,.06)}.tk-workspaces-table__actions-spinner{display:inline-flex;margin:0 auto}.tk-workspaces-table__empty{padding:1.5rem;text-align:center;color:#0009;cursor:default}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
488
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesTableComponent, decorators: [{
489
+ type: Component,
490
+ args: [{ selector: 'tk-workspaces-table', template: "<div class=\"tk-workspaces-table__bulk-bar\">Select one or more workspaces for bulk actions</div>\n\n<div class=\"tk-workspaces-table__wrapper\">\n <table class=\"tk-workspaces-table__table\">\n <thead>\n <tr>\n <th class=\"tk-workspaces-table__checkbox-cell\">\n <input type=\"checkbox\" [checked]=\"allSelected\" [indeterminate]=\"someSelected\" (change)=\"toggleAll()\" />\n </th>\n <th>Name</th>\n <th>Devices</th>\n <th>Scheduling</th>\n <th>Calling</th>\n <th>Provisioning Type</th>\n <th>Status</th>\n <th class=\"tk-workspaces-table__settings-cell\">\n <mat-icon class=\"tk-workspaces-table__settings-icon\">settings</mat-icon>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let workspace of workspaces\"\n [class.tk-workspaces-table__row--selected]=\"isSelected(workspace.id)\">\n <td class=\"tk-workspaces-table__checkbox-cell\">\n <input type=\"checkbox\" [checked]=\"isSelected(workspace.id)\" (change)=\"toggleRow(workspace.id)\" />\n </td>\n <td class=\"tk-workspaces-table__name-cell\" (click)=\"onOpenWorkspace(workspace)\">\n <div class=\"tk-workspaces-table__name-wrapper\">\n <span class=\"tk-workspaces-table__name-icon\">\n <img src=\"assets/icons/device-in-room-regular.svg\" alt=\"\" />\n </span>\n <div class=\"tk-workspaces-table__name-info\">\n <a href=\"javascript:void(0)\" class=\"tk-workspaces-table__name-link\">{{ workspace.displayName }}</a>\n <div class=\"tk-workspaces-table__name-meta\">\n <span class=\"tk-workspaces-table__name-type\">{{ workspace.typeLabel }}</span>\n <span class=\"tk-workspaces-table__meta-sep\">&middot;</span>\n <img class=\"tk-workspaces-table__meta-icon\" src=\"assets/icons/people-regular.svg\" alt=\"\" />\n <span class=\"tk-workspaces-table__name-capacity\">{{ workspace.capacity ?? 'No capacity' }}</span>\n <span class=\"tk-workspaces-table__meta-sep\">&middot;</span>\n <!-- <mat-icon class=\"tk-workspaces-table__meta-icon\">location_on</mat-icon> -->\n <img class=\"tk-workspaces-table__meta-icon\" src=\"assets/icons/location-regular.svg\" alt=\"\" />\n <a\n *ngIf=\"workspace.location; else noLocation\"\n href=\"javascript:void(0)\"\n class=\"tk-workspaces-table__location-link\">{{ workspace.location }}</a>\n <ng-template #noLocation>\n <span class=\"tk-workspaces-table__location-empty\">No location</span>\n </ng-template>\n </div>\n </div>\n </div>\n </td>\n <td>\n <div class=\"tk-workspaces-table__devices\">\n <ng-container *ngIf=\"workspace.devices.length; else noDevices\">\n <span *ngFor=\"let device of workspace.devices\" class=\"tk-workspaces-table__device-card\" [title]=\"device.label\">\n <img\n class=\"tk-workspaces-table__device-icon\"\n [src]=\"getDeviceIcon(device.model)\"\n [alt]=\"device.label\" />\n </span>\n </ng-container>\n <!-- <ng-container *ngFor=\"let device of workspace.devices\">\n <span *ngIf=\"device && device.model else noDevice\" class=\"tk-workspaces-table__device-card\" [title]=\"device.label\">\n <img\n class=\"tk-workspaces-table__device-icon\"\n [src]=\"getDeviceIcon(device.model)\"\n [alt]=\"device.label\" />\n </span>\n </ng-container> -->\n <ng-template #noDevices>\n <button\n type=\"button\"\n class=\"tk-workspaces-table__device-add\"\n (click)=\"onAddDevice(workspace, $event)\">\n <span class=\"tk-workspaces-table__device-add-label\">\n <img\n class=\"tk-workspaces-table__device-add-icon\"\n src=\"assets/icons/multipled-devices-regular.svg\"\n alt=\"\" />\n Add device\n </span>\n </button>\n </ng-template>\n </div>\n </td>\n <td>{{ workspace.scheduling }}</td>\n <td class=\"tk-workspaces-table__calling-cell\">\n <span class=\"tk-workspaces-table__calling-content\">\n <img class=\"tk-workspaces-table__calling-icon\" src=\"assets/icons/location-regular.svg\" alt=\"\" />\n <span class=\"tk-workspaces-table__calling-text\" title=\"Cisco Webex Calling Professional Workspace\">Cisco Webex Calling Professional Workspace</span>\n </span>\n </td>\n <td>\n <div *ngIf=\"workspace.isHybrid\" class=\"tk-workspaces-table__provisioning-icons\">\n <span class=\"icon-wrapper\"\n ><img\n src=\"assets/icons/webex.svg\"\n [matTooltip]=\"'Webex Calling'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n <span class=\"icon-wrapper\"\n ><img\n src=\"assets/icons/di_cloud_24.svg\"\n [matTooltip]=\"'Webex Calling DI'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n </div>\n <ng-container *ngIf=\"!workspace.isHybrid\">\n <span *ngIf=\"workspace.device.cucmId != null\" class=\"icon-wrapper\"\n ><img\n src=\"assets/icons/di_cloud_24.svg\"\n [matTooltip]=\"'Webex Calling DI'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n <span *ngIf=\"workspace.device.webexUUID != null\" class=\"icon-wrapper\"\n ><img\n src=\"assets/icons/webex.svg\"\n [matTooltip]=\"'Webex Calling'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n </ng-container>\n </td>\n <td>\n <span class=\"tk-workspaces-table__status\">\n <span\n class=\"tk-workspaces-table__status-dot\"\n [class.tk-workspaces-table__status-dot--hybrid]=\"workspace.isHybrid\"\n [class.tk-workspaces-table__status-dot--active]=\"!workspace.isHybrid\"></span>\n {{ workspace.isHybrid ? 'Hybrid' : 'Active' }}\n </span>\n </td>\n <td class=\"tk-workspaces-table__actions-cell\">\n <mat-progress-spinner\n *ngIf=\"isPending(workspace.id)\"\n class=\"tk-workspaces-table__actions-spinner\"\n [diameter]=\"20\"\n strokeWidth=\"2\"\n mode=\"indeterminate\">\n </mat-progress-spinner>\n <button\n *ngIf=\"!isPending(workspace.id)\"\n type=\"button\"\n class=\"tk-workspaces-table__actions-button\"\n [matMenuTriggerFor]=\"rowMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #rowMenu=\"matMenu\">\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isMoveToMTDisabled(workspace)\"\n (click)=\"licenseWithHybrid.emit(workspace)\">\n License with Hybrid\n </button>\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isMoveToMTDisabled(workspace)\"\n (click)=\"migrateToMT.emit(workspace)\">\n Migrate User to MT\n </button>\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isEnableWebexCallingDisabled(workspace)\"\n (click)=\"enableWebexCalling.emit(workspace)\">\n Enable Webex Calling\n </button>\n <button\n type=\"button\"\n mat-menu-item\n [disabled]=\"isMigrateToUCMDisabled(workspace)\"\n (click)=\"migrateToUCM.emit(workspace)\">\n Migrate User to UCM\n </button>\n </mat-menu>\n </td>\n </tr>\n <tr *ngIf=\"!workspaces.length\">\n <td [attr.colspan]=\"8\" class=\"tk-workspaces-table__empty\">No workspaces to display.</td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<mat-paginator\n class=\"tk-workspaces-table__paginator\"\n [length]=\"total\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\">\n</mat-paginator>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;color:#000000f2}.tk-workspaces-table__bulk-bar{margin-bottom:1rem;font-size:.875rem;color:#000000f2}.tk-workspaces-table__wrapper{overflow-x:auto}.tk-workspaces-table__paginator{border:1px solid rgba(0,0,0,.12);border-top:none;background:#fff;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif}.tk-workspaces-table__table{width:100%;border-collapse:collapse;font-family:Inter,sans-serif}.tk-workspaces-table__table th{height:39px;padding:.5rem 1.5rem .5rem .75rem;background-color:#ededed;text-align:start;font-size:.75rem;font-weight:500;color:#000000b3;word-break:break-all;max-inline-size:100%;cursor:pointer}.tk-workspaces-table__table th:hover{background-color:#dedede}.tk-workspaces-table__table td{height:49px;padding:.5rem 1.5rem .5rem .75rem;box-shadow:inset 0 -1px #0003;background-color:#fff;text-align:start;font-size:.875rem;color:#000000f2;word-break:break-all;cursor:pointer;transition:background-color .2s,box-shadow .2s}.tk-workspaces-table__table tbody tr:hover td{background:#ededed}.tk-workspaces-table__table tbody tr.tk-workspaces-table__row--selected td{background:#f0f6ff}.tk-workspaces-table__checkbox-cell{width:2.5rem;cursor:default}.tk-workspaces-table__settings-cell{width:2.5rem;text-align:center}.tk-workspaces-table__settings-icon{font-size:1.125rem;height:1.125rem;width:1.125rem;color:#00000080}.tk-workspaces-table__name-cell{min-width:14rem}.tk-workspaces-table__name-wrapper{display:flex;align-items:center;gap:.625rem}.tk-workspaces-table__name-icon{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;flex-shrink:0;border-radius:50%;background:#2b2b2b;color:#fff}.tk-workspaces-table__name-icon img{height:1.125rem;width:1.125rem;filter:brightness(0) invert(1)}.tk-workspaces-table__name-info{display:flex;flex-direction:column;gap:.5rem;min-width:0}.tk-workspaces-table__name-link{color:#000000de;font-weight:500;text-decoration:none}.tk-workspaces-table__name-meta{display:flex;align-items:center;gap:.25rem;font-size:.875rem;color:#0009;white-space:nowrap}.tk-workspaces-table__name-meta .tk-workspaces-table__name-type,.tk-workspaces-table__name-meta .tk-workspaces-table__name-capacity{color:#0006}.tk-workspaces-table__meta-icon{font-size:.875rem;height:.875rem;width:.875rem;color:#0006}.tk-workspaces-table__meta-sep{color:#0000004d}.tk-workspaces-table__location-link{color:#0353a8;text-decoration:none}.tk-workspaces-table__location-empty{color:#0009}.tk-workspaces-table__devices{display:flex;align-items:flex-start;gap:.625rem;padding:.5rem 0}.tk-workspaces-table__device-card{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;padding:.5rem;border:1px solid rgba(0,0,0,.12);border-radius:.5rem;background:#fff;box-sizing:border-box;padding:12px;block-size:60px}.tk-workspaces-table__device-icon{inline-size:40px;display:inline-block;vertical-align:middle;max-inline-size:100%;block-size:auto}.tk-workspaces-table__device-avatar{display:inline-flex;align-items:center;justify-content:center;width:1.5rem;height:1.5rem;border-radius:50%;background:#757575;color:#fff;font-size:.6875rem;font-weight:600}.tk-workspaces-table__device-add{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:3.5rem;padding:.5rem 1.25rem;border:none;border-radius:.5rem;background-color:#fff;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%22186%22 height%3D%2274%22 viewBox%3D%220 0 186 74%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath d%3D%22M1 8.51269C1 4.09442 4.58172 0.512695 9 0.512695H65C69.4183 0.512695 73 4.09442 73 8.5127V64.5127C73 68.931 69.4183 72.5127 65 72.5127H9C4.58172 72.5127 1 68.931 1 64.5127V8.51269Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M1 8.51269C1 4.09442 4.58172 0.512695 9 0.512695H65C69.4183 0.512695 73 4.09442 73 8.5127V64.5127C73 68.931 69.4183 72.5127 65 72.5127H9C4.58172 72.5127 1 68.931 1 64.5127V8.51269Z%22 stroke%3D%22url(%23paint0_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 8.51269C77 4.09442 80.5817 0.512695 85 0.512695H111C115.418 0.512695 119 4.09442 119 8.5127V26.5127C119 30.931 115.418 34.5127 111 34.5127H85C80.5817 34.5127 77 30.931 77 26.5127V8.51269Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 8.51269C77 4.09442 80.5817 0.512695 85 0.512695H111C115.418 0.512695 119 4.09442 119 8.5127V26.5127C119 30.931 115.418 34.5127 111 34.5127H85C80.5817 34.5127 77 30.931 77 26.5127V8.51269Z%22 stroke%3D%22url(%23paint1_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M123 8.51269C123 4.09442 126.582 0.512695 131 0.512695H177C181.418 0.512695 185 4.09442 185 8.5127V26.5127C185 30.931 181.418 34.5127 177 34.5127H131C126.582 34.5127 123 30.931 123 26.5127V8.51269Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M123 8.51269C123 4.09442 126.582 0.512695 131 0.512695H177C181.418 0.512695 185 4.09442 185 8.5127V26.5127C185 30.931 181.418 34.5127 177 34.5127H131C126.582 34.5127 123 30.931 123 26.5127V8.51269Z%22 stroke%3D%22url(%23paint2_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 46.5127C77 42.0944 80.5817 38.5127 85 38.5127H131C135.418 38.5127 139 42.0944 139 46.5127V64.5127C139 68.931 135.418 72.5127 131 72.5127H85C80.5817 72.5127 77 68.931 77 64.5127V46.5127Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M77 46.5127C77 42.0944 80.5817 38.5127 85 38.5127H131C135.418 38.5127 139 42.0944 139 46.5127V64.5127C139 68.931 135.418 72.5127 131 72.5127H85C80.5817 72.5127 77 68.931 77 64.5127V46.5127Z%22 stroke%3D%22url(%23paint3_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M143 46.5127C143 42.0944 146.582 38.5127 151 38.5127H177C181.418 38.5127 185 42.0944 185 46.5127V64.5127C185 68.931 181.418 72.5127 177 72.5127H151C146.582 72.5127 143 68.931 143 64.5127V46.5127Z%22 stroke%3D%22%23DEDEDE%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cpath d%3D%22M143 46.5127C143 42.0944 146.582 38.5127 151 38.5127H177C181.418 38.5127 185 42.0944 185 46.5127V64.5127C185 68.931 181.418 72.5127 177 72.5127H151C146.582 72.5127 143 68.931 143 64.5127V46.5127Z%22 stroke%3D%22url(%23paint4_radial_6222_238881)%22 stroke-dasharray%3D%224 4%22%2F%3E%3Cdefs%3E%3CradialGradient id%3D%22paint0_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint1_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint2_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint3_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3CradialGradient id%3D%22paint4_radial_6222_238881%22 cx%3D%220%22 cy%3D%220%22 r%3D%221%22 gradientUnits%3D%22userSpaceOnUse%22 gradientTransform%3D%22translate(93 36.5127) rotate(90) scale(36 92)%22%3E%3Cstop stop-color%3D%22white%22%2F%3E%3Cstop offset%3D%221%22 stop-color%3D%22white%22 stop-opacity%3D%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E\");background-repeat:no-repeat;background-position:center;background-size:contain;font-family:inherit;white-space:nowrap;cursor:pointer;box-sizing:border-box}.tk-workspaces-table__device-add-label{display:inline-flex;align-items:center;gap:.5rem;padding:.375rem .75rem;border-radius:999px;color:#000000f2;font-size:.875rem;transition:background-color .15s}.tk-workspaces-table__device-add:hover .tk-workspaces-table__device-add-label{background-color:#ededed}.tk-workspaces-table__device-add-icon{height:1.125rem;width:1.125rem}.tk-workspaces-table__devices-empty{color:#0000004d}.tk-workspaces-table__calling-cell{max-width:14rem}.tk-workspaces-table__calling-content{display:flex;align-items:center;gap:.375rem}.tk-workspaces-table__calling-icon{flex:none;width:1rem;height:1rem;opacity:.4}.tk-workspaces-table__calling-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tk-workspaces-table__provisioning-icon{font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0009}.tk-workspaces-table__provisioning-icons{display:flex;align-items:center;gap:.5rem}.tk-workspaces-table__status{display:inline-flex;align-items:center;gap:.375rem;white-space:nowrap}.tk-workspaces-table__status-dot{width:.5rem;height:.5rem;border-radius:50%;background:rgba(0,0,0,.3);flex-shrink:0}.tk-workspaces-table__status-dot--active{background:#1d805f}.tk-workspaces-table__status-dot--inactive{background:#c73636}.tk-workspaces-table__status-dot--hybrid{background:#639fff}.tk-workspaces-table__actions-cell{width:2.5rem;text-align:center}.tk-workspaces-table__actions-button{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;padding:.25rem;color:#00000080;cursor:pointer;border-radius:4px}.tk-workspaces-table__actions-button:hover{background:rgba(0,0,0,.06)}.tk-workspaces-table__actions-spinner{display:inline-flex;margin:0 auto}.tk-workspaces-table__empty{padding:1.5rem;text-align:center;color:#0009;cursor:default}\n"] }]
491
+ }], propDecorators: { workspaces: [{
492
+ type: Input
493
+ }], total: [{
494
+ type: Input
495
+ }], pageIndex: [{
496
+ type: Input
497
+ }], pageSize: [{
498
+ type: Input
499
+ }], pageSizeOptions: [{
500
+ type: Input
501
+ }], pendingWorkspaceIds: [{
502
+ type: Input
503
+ }], openWorkspace: [{
504
+ type: Output
505
+ }], licenseWithHybrid: [{
506
+ type: Output
507
+ }], migrateToMT: [{
508
+ type: Output
509
+ }], enableWebexCalling: [{
510
+ type: Output
511
+ }], migrateToUCM: [{
512
+ type: Output
513
+ }], addDevice: [{
514
+ type: Output
515
+ }], pageChange: [{
516
+ type: Output
517
+ }] } });
518
+
519
+ // No dedicated detail API exists yet, so the Overview/Calling tabs are
520
+ // populated with mock data derived from the already-loaded workspace record.
521
+ class WorkspaceDetailService {
522
+ getByWorkspace(workspace) {
523
+ var _a, _b, _c, _d, _e;
524
+ const device = workspace.device;
525
+ const directoryNumber = (_c = (_b = (_a = device.associatedDNs) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.directoryNumber) !== null && _c !== void 0 ? _c : '';
526
+ const sipAddress = `${(device.name || workspace.displayName || 'workspace').toLowerCase()}@tukidev.rooms.webex.com`;
527
+ const issues = [
528
+ !workspace.typeLabel || workspace.typeLabel === 'No type' ? {
529
+ id: 'type',
530
+ message: 'Workspace type not set',
531
+ timestamp: 'Just now',
532
+ actionLabel: 'Assign type',
533
+ } : null,
534
+ workspace.capacity == null ? {
535
+ id: 'capacity',
536
+ message: 'Workspace capacity not set',
537
+ timestamp: 'Just now',
538
+ actionLabel: 'Set capacity',
539
+ } : null,
540
+ ].filter((issue) => issue !== null);
541
+ const details = {
542
+ issues,
543
+ location: {
544
+ country: workspace.location || 'Not set',
545
+ address: device.location || 'Address not available',
546
+ },
547
+ calling: {
548
+ license: workspace.callingLicense || 'Cisco Webex Calling Professional Workspace',
549
+ sipAddress,
550
+ directoryNumber: directoryNumber || 'Not assigned',
551
+ routePartition: ((_e = (_d = device.associatedDNs) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.routePartitionName) || 'Not set',
552
+ callingSearchSpace: device.callingSearchSpaceName || 'Not set',
553
+ securityProfile: device.securityProfile || 'Not set',
554
+ },
555
+ schedulingConfigured: false,
556
+ plannedMaintenanceEnabled: false,
557
+ notes: null,
558
+ };
559
+ return of(details);
560
+ }
561
+ }
562
+ WorkspaceDetailService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspaceDetailService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
563
+ WorkspaceDetailService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspaceDetailService, providedIn: 'root' });
564
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspaceDetailService, decorators: [{
565
+ type: Injectable,
566
+ args: [{
567
+ providedIn: 'root'
568
+ }]
569
+ }] });
570
+
571
+ class WorkspaceDetailComponent {
572
+ constructor(workspaceDetailService, location) {
573
+ this.workspaceDetailService = workspaceDetailService;
574
+ this.location = location;
575
+ this.back = new EventEmitter();
576
+ this.activeTab = 'overview';
577
+ this.details = null;
578
+ }
579
+ ngOnInit() {
580
+ this.workspaceDetailService.getByWorkspace(this.workspace).subscribe(details => {
581
+ this.details = details;
582
+ });
583
+ this.updateUrl();
584
+ }
585
+ get deviceName() {
586
+ var _a;
587
+ return ((_a = this.workspace.device) === null || _a === void 0 ? void 0 : _a.name) || this.workspace.id;
588
+ }
589
+ resolveIcon(model) {
590
+ return getDeviceIcon(model);
591
+ }
592
+ selectTab(tab) {
593
+ this.activeTab = tab;
594
+ this.updateUrl();
595
+ }
596
+ onBack() {
597
+ this.location.replaceState('/workspaces');
598
+ this.back.emit();
599
+ }
600
+ updateUrl() {
601
+ this.location.replaceState(`/workspaces/${this.deviceName}/${this.activeTab}`);
602
+ }
603
+ }
604
+ WorkspaceDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspaceDetailComponent, deps: [{ token: WorkspaceDetailService }, { token: i2.Location }], target: i0.ɵɵFactoryTarget.Component });
605
+ WorkspaceDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WorkspaceDetailComponent, selector: "tk-workspace-detail", inputs: { workspace: "workspace" }, outputs: { back: "back" }, ngImport: i0, template: "<button type=\"button\" class=\"tk-workspace-detail__breadcrumb\" (click)=\"onBack()\">\n <mat-icon>chevron_left</mat-icon>\n Workspaces\n</button>\n\n<div class=\"tk-workspace-detail__header\">\n <span class=\"tk-workspace-detail__icon\">\n <img src=\"assets/icons/device-in-room-regular.svg\" alt=\"\" />\n </span>\n <div class=\"tk-workspace-detail__title-block\">\n <h1 class=\"tk-workspace-detail__name\">{{ workspace.displayName }}</h1>\n <div class=\"tk-workspace-detail__meta\">\n <span class=\"tk-workspace-detail__status\">\n <span class=\"tk-workspace-detail__status-dot\"></span>\n Live status unavailable\n </span>\n <span class=\"tk-workspace-detail__meta-sep\">&middot;</span>\n <span>Type: {{ workspace.typeLabel === 'No type' ? 'Not set' : workspace.typeLabel }}</span>\n <span class=\"tk-workspace-detail__meta-sep\">&middot;</span>\n <img class=\"tk-workspace-detail__meta-icon\" src=\"assets/icons/people-regular.svg\" alt=\"\" />\n <span>Capacity: {{ workspace.capacity ?? 'Not set' }}</span>\n <span class=\"tk-workspace-detail__meta-sep\">&middot;</span>\n <span class=\"tk-workspace-detail__meta-muted\">Size not set</span>\n </div>\n </div>\n <button type=\"button\" class=\"tk-workspace-detail__actions-button\" [matMenuTriggerFor]=\"actionsMenu\">\n Actions\n <mat-icon>expand_more</mat-icon>\n </button>\n <mat-menu #actionsMenu=\"matMenu\">\n <button type=\"button\" mat-menu-item disabled>More actions coming soon</button>\n </mat-menu>\n</div>\n\n<nav class=\"tk-workspace-detail__tabs\">\n <button\n type=\"button\"\n class=\"tk-workspace-detail__tab\"\n [class.tk-workspace-detail__tab--active]=\"activeTab === 'overview'\"\n (click)=\"selectTab('overview')\">\n Overview\n </button>\n <button\n type=\"button\"\n class=\"tk-workspace-detail__tab\"\n [class.tk-workspace-detail__tab--active]=\"activeTab === 'calling'\"\n (click)=\"selectTab('calling')\">\n Calling\n </button>\n</nav>\n\n<ng-container *ngIf=\"details\">\n <div class=\"tk-workspace-detail__grid\" *ngIf=\"activeTab === 'overview'\">\n <div class=\"tk-workspace-detail__col\">\n <section class=\"tk-workspace-detail__card\" *ngIf=\"details.issues.length\">\n <h2 class=\"tk-workspace-detail__card-title\">Issues &amp; Information</h2>\n <div class=\"tk-workspace-detail__issue\" *ngFor=\"let issue of details.issues\">\n <div class=\"tk-workspace-detail__issue-info\">\n <mat-icon class=\"tk-workspace-detail__issue-icon\">info</mat-icon>\n <div>\n <div class=\"tk-workspace-detail__issue-message\">{{ issue.message }}</div>\n <div class=\"tk-workspace-detail__issue-timestamp\">{{ issue.timestamp }}</div>\n </div>\n </div>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">\n {{ issue.actionLabel }}\n <mat-icon>expand_more</mat-icon>\n </button>\n </div>\n </section>\n\n <section class=\"tk-workspace-detail__card\">\n <div class=\"tk-workspace-detail__card-header\">\n <h2 class=\"tk-workspace-detail__card-title\">Devices</h2>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Add device</button>\n </div>\n <div class=\"tk-workspace-detail__devices\" *ngIf=\"workspace.devices.length; else noDevices\">\n <div class=\"tk-workspace-detail__device\" *ngFor=\"let device of workspace.devices\">\n <img class=\"tk-workspace-detail__device-icon\" [src]=\"resolveIcon(device.model)\" [alt]=\"device.label\" />\n <div class=\"tk-workspace-detail__device-info\">\n <a href=\"javascript:void(0)\" class=\"tk-workspace-detail__device-link\">{{ device.label }}</a>\n <div class=\"tk-workspace-detail__device-status\">\n <span class=\"tk-workspace-detail__status-dot\"></span>\n Status unavailable\n <mat-icon class=\"tk-workspace-detail__info-icon\">info_outline</mat-icon>\n </div>\n </div>\n </div>\n </div>\n <ng-template #noDevices>\n <div class=\"tk-workspace-detail__empty\">No devices assigned.</div>\n </ng-template>\n </section>\n\n <section class=\"tk-workspace-detail__card\">\n <div class=\"tk-workspace-detail__card-header\">\n <h2 class=\"tk-workspace-detail__card-title\">Calling</h2>\n <mat-icon class=\"tk-workspace-detail__settings-icon\">settings</mat-icon>\n </div>\n <div class=\"tk-workspace-detail__calling-license\">\n <mat-icon>call</mat-icon>\n {{ details.calling.license }}\n </div>\n <hr class=\"tk-workspace-detail__divider\" />\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Cisco Webex SIP Address</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.sipAddress }}</span>\n </div>\n </section>\n\n <section class=\"tk-workspace-detail__card tk-workspace-detail__card--centered\" *ngIf=\"!details.schedulingConfigured\">\n <mat-icon class=\"tk-workspace-detail__card-icon\">event</mat-icon>\n <h3 class=\"tk-workspace-detail__card-heading\">Choose scheduling</h3>\n <p class=\"tk-workspace-detail__card-text\">Choose a calendar service or setup hot-desking for this workspace.</p>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Choose scheduling</button>\n </section>\n\n <section class=\"tk-workspace-detail__card tk-workspace-detail__card--centered\">\n <mat-icon class=\"tk-workspace-detail__card-icon\">info</mat-icon>\n <h3 class=\"tk-workspace-detail__card-heading\">Device hosted meetings unavailable</h3>\n <p class=\"tk-workspace-detail__card-text\">Service not supported by Cisco IP phones</p>\n </section>\n\n <section class=\"tk-workspace-detail__card\">\n <h2 class=\"tk-workspace-detail__card-title\">\n Planned Maintenance\n <mat-icon class=\"tk-workspace-detail__info-icon\">info_outline</mat-icon>\n </h2>\n <div class=\"tk-workspace-detail__row\">\n <mat-icon>build</mat-icon>\n <span>{{ details.plannedMaintenanceEnabled ? 'On' : 'Off' }}</span>\n </div>\n <hr class=\"tk-workspace-detail__divider\" />\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--with-action\">\n <div class=\"tk-workspace-detail__row\">\n <mat-icon>event</mat-icon>\n <div>\n <div>Schedule</div>\n <div class=\"tk-workspace-detail__row-hint\">No schedule set</div>\n </div>\n </div>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Edit schedule</button>\n </div>\n </section>\n\n <section class=\"tk-workspace-detail__card tk-workspace-detail__card--centered\" *ngIf=\"!details.notes\">\n <mat-icon class=\"tk-workspace-detail__card-icon\">description</mat-icon>\n <h3 class=\"tk-workspace-detail__card-heading\">Add notes</h3>\n <p class=\"tk-workspace-detail__card-text\">Write a note about this workspace.</p>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Add notes</button>\n </section>\n </div>\n\n <div class=\"tk-workspace-detail__col\">\n <section class=\"tk-workspace-detail__card\">\n <div class=\"tk-workspace-detail__card-header\">\n <h2 class=\"tk-workspace-detail__card-title\">Location</h2>\n <mat-icon class=\"tk-workspace-detail__settings-icon\">settings</mat-icon>\n </div>\n <div class=\"tk-workspace-detail__location\">\n <mat-icon>location_on</mat-icon>\n <div>\n <a href=\"javascript:void(0)\" class=\"tk-workspace-detail__location-link\">{{ details.location.country }}</a>\n <div class=\"tk-workspace-detail__location-address\">{{ details.location.address }}</div>\n </div>\n </div>\n <hr class=\"tk-workspace-detail__divider\" />\n <div class=\"tk-workspace-detail__row\">\n <mat-icon>explore</mat-icon>\n <span>Indoor navigation</span>\n <mat-icon class=\"tk-workspace-detail__info-icon\">info_outline</mat-icon>\n </div>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Add URL</button>\n <div class=\"tk-workspace-detail__map\">\n <mat-icon class=\"tk-workspace-detail__map-pin\">location_on</mat-icon>\n </div>\n </section>\n </div>\n </div>\n\n <div class=\"tk-workspace-detail__grid\" *ngIf=\"activeTab === 'calling'\">\n <div class=\"tk-workspace-detail__col\">\n <section class=\"tk-workspace-detail__card\">\n <h2 class=\"tk-workspace-detail__card-title\">Calling</h2>\n <div class=\"tk-workspace-detail__calling-license\">\n <mat-icon>call</mat-icon>\n {{ details.calling.license }}\n </div>\n <hr class=\"tk-workspace-detail__divider\" />\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Cisco Webex SIP Address</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.sipAddress }}</span>\n </div>\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Directory Number</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.directoryNumber }}</span>\n </div>\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Route Partition</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.routePartition }}</span>\n </div>\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Calling Search Space</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.callingSearchSpace }}</span>\n </div>\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Device Security Profile</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.securityProfile }}</span>\n </div>\n </section>\n </div>\n </div>\n</ng-container>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;color:#000000f2;padding:1.5rem}.tk-workspace-detail__breadcrumb{display:inline-flex;align-items:center;gap:.125rem;padding:0;margin-bottom:1rem;background:none;border:none;font-family:inherit;font-size:.875rem;font-weight:500;color:#0009;cursor:pointer}.tk-workspace-detail__breadcrumb:hover{color:#000000f2}.tk-workspace-detail__breadcrumb mat-icon{font-size:1.25rem;height:1.25rem;width:1.25rem}.tk-workspace-detail__header{display:flex;align-items:flex-start;gap:.75rem;margin-bottom:1rem}.tk-workspace-detail__icon{display:inline-flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;flex-shrink:0;border-radius:50%;background:#2b2b2b}.tk-workspace-detail__icon img{height:1.375rem;width:1.375rem;filter:brightness(0) invert(1)}.tk-workspace-detail__title-block{flex:1;min-width:0}.tk-workspace-detail__name{margin:0 0 .375rem;font-size:1.25rem;font-weight:600}.tk-workspace-detail__meta{display:flex;flex-wrap:wrap;align-items:center;gap:.375rem;font-size:.875rem;color:#0009}.tk-workspace-detail__meta-sep{color:#0000004d}.tk-workspace-detail__meta-icon{height:.875rem;width:.875rem;opacity:.4}.tk-workspace-detail__meta-muted{color:#0006}.tk-workspace-detail__actions-button{display:inline-flex;align-items:center;gap:.25rem;padding:.5rem 1rem;background:#000;color:#fff;border:none;border-radius:6.25rem;font-family:inherit;font-size:.875rem;font-weight:500;cursor:pointer;flex-shrink:0}.tk-workspace-detail__actions-button:hover{background:#2b2b2b}.tk-workspace-detail__actions-button mat-icon{font-size:1.125rem;height:1.125rem;width:1.125rem}.tk-workspace-detail__tabs{display:flex;align-items:center;gap:1.5rem;border-bottom:1px solid rgba(0,0,0,.12);margin-bottom:1.25rem}.tk-workspace-detail__tab{padding:.75rem 0;background:none;border:none;border-bottom:2px solid transparent;font-family:inherit;font-size:.9375rem;font-weight:500;color:#000000b3;cursor:pointer}.tk-workspace-detail__tab:hover{color:#000000f2}.tk-workspace-detail__tab--active{color:#000000f2;border-bottom-color:#000}.tk-workspace-detail__grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:1.5rem;align-items:start}@media (max-width: 900px){.tk-workspace-detail__grid{grid-template-columns:1fr}}.tk-workspace-detail__col{display:flex;flex-direction:column;gap:1.25rem;min-width:0}.tk-workspace-detail__card{background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:.5rem;padding:1.25rem}.tk-workspace-detail__card--centered{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.375rem;padding:2rem 1.25rem}.tk-workspace-detail__card-icon{color:#0009;margin-bottom:.5rem}.tk-workspace-detail__card-heading{margin:0;font-size:.9375rem;font-weight:600}.tk-workspace-detail__card-text{margin:0 0 .5rem;font-size:.8125rem;color:#0009;max-width:20rem}.tk-workspace-detail__card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}.tk-workspace-detail__card-title{display:flex;align-items:center;gap:.375rem;margin:0 0 .75rem;font-size:.9375rem;font-weight:600}.tk-workspace-detail__card-header .tk-workspace-detail__card-title{margin-bottom:0}.tk-workspace-detail__settings-icon,.tk-workspace-detail__info-icon{font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006}.tk-workspace-detail__divider{border:none;border-top:1px solid rgba(0,0,0,.12);margin:.75rem 0}.tk-workspace-detail__issue{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.75rem 0;border-top:1px solid rgba(0,0,0,.12)}.tk-workspace-detail__issue:first-of-type{border-top:none;padding-top:0}.tk-workspace-detail__issue-info{display:flex;align-items:flex-start;gap:.5rem}.tk-workspace-detail__issue-icon{color:#0353a8;font-size:1.125rem;height:1.125rem;width:1.125rem;margin-top:.125rem}.tk-workspace-detail__issue-message{font-size:.875rem;font-weight:500}.tk-workspace-detail__issue-timestamp{font-size:.75rem;color:#0006}.tk-workspace-detail__pill-button{display:inline-flex;align-items:center;gap:.25rem;padding:.5rem 1rem;background:#fff;border:1px solid rgba(0,0,0,.3);border-radius:6.25rem;font-family:inherit;font-size:.8125rem;font-weight:500;color:#000000f2;cursor:pointer;white-space:nowrap}.tk-workspace-detail__pill-button:hover{background:#ededed}.tk-workspace-detail__pill-button mat-icon{font-size:1.125rem;height:1.125rem;width:1.125rem}.tk-workspace-detail__devices{display:flex;flex-wrap:wrap;gap:.75rem}.tk-workspace-detail__device{display:flex;align-items:center;gap:.625rem;padding:.75rem;border:1px solid rgba(0,0,0,.12);border-radius:.5rem;min-width:12rem}.tk-workspace-detail__device-icon{width:2.25rem;height:auto;flex-shrink:0}.tk-workspace-detail__device-link{color:#0353a8;text-decoration:none;font-size:.875rem;font-weight:500}.tk-workspace-detail__device-status{display:flex;align-items:center;gap:.25rem;font-size:.75rem;color:#0009}.tk-workspace-detail__empty{font-size:.875rem;color:#0009}.tk-workspace-detail__calling-license{display:flex;align-items:center;gap:.5rem;font-size:.875rem}.tk-workspace-detail__calling-license mat-icon{color:#0006;font-size:1.125rem;height:1.125rem;width:1.125rem}.tk-workspace-detail__row{display:flex;align-items:center;gap:.5rem;font-size:.875rem}.tk-workspace-detail__row mat-icon{color:#0006;font-size:1.125rem;height:1.125rem;width:1.125rem;flex-shrink:0}.tk-workspace-detail__row--with-action{justify-content:space-between}.tk-workspace-detail__row--kv{justify-content:space-between;padding:.5rem 0;border-top:1px solid rgba(0,0,0,.12)}.tk-workspace-detail__row--kv:first-of-type{border-top:none}.tk-workspace-detail__row-label{color:#0009}.tk-workspace-detail__row-value{font-weight:500;text-align:right}.tk-workspace-detail__row-hint{font-size:.75rem;color:#0006}.tk-workspace-detail__location{display:flex;align-items:flex-start;gap:.5rem}.tk-workspace-detail__location mat-icon{color:#0006;font-size:1.125rem;height:1.125rem;width:1.125rem;margin-top:.125rem}.tk-workspace-detail__location-link{color:#0353a8;text-decoration:none;font-size:.875rem;font-weight:500}.tk-workspace-detail__location-address{font-size:.8125rem;color:#0009}.tk-workspace-detail__map{display:flex;align-items:center;justify-content:center;height:12rem;margin-top:1rem;border-radius:.5rem;background:linear-gradient(135deg,#eef1e8 0%,#e4e9dc 100%)}.tk-workspace-detail__map-pin{color:#c73636;font-size:2rem;height:2rem;width:2rem}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] });
606
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspaceDetailComponent, decorators: [{
607
+ type: Component,
608
+ args: [{ selector: 'tk-workspace-detail', template: "<button type=\"button\" class=\"tk-workspace-detail__breadcrumb\" (click)=\"onBack()\">\n <mat-icon>chevron_left</mat-icon>\n Workspaces\n</button>\n\n<div class=\"tk-workspace-detail__header\">\n <span class=\"tk-workspace-detail__icon\">\n <img src=\"assets/icons/device-in-room-regular.svg\" alt=\"\" />\n </span>\n <div class=\"tk-workspace-detail__title-block\">\n <h1 class=\"tk-workspace-detail__name\">{{ workspace.displayName }}</h1>\n <div class=\"tk-workspace-detail__meta\">\n <span class=\"tk-workspace-detail__status\">\n <span class=\"tk-workspace-detail__status-dot\"></span>\n Live status unavailable\n </span>\n <span class=\"tk-workspace-detail__meta-sep\">&middot;</span>\n <span>Type: {{ workspace.typeLabel === 'No type' ? 'Not set' : workspace.typeLabel }}</span>\n <span class=\"tk-workspace-detail__meta-sep\">&middot;</span>\n <img class=\"tk-workspace-detail__meta-icon\" src=\"assets/icons/people-regular.svg\" alt=\"\" />\n <span>Capacity: {{ workspace.capacity ?? 'Not set' }}</span>\n <span class=\"tk-workspace-detail__meta-sep\">&middot;</span>\n <span class=\"tk-workspace-detail__meta-muted\">Size not set</span>\n </div>\n </div>\n <button type=\"button\" class=\"tk-workspace-detail__actions-button\" [matMenuTriggerFor]=\"actionsMenu\">\n Actions\n <mat-icon>expand_more</mat-icon>\n </button>\n <mat-menu #actionsMenu=\"matMenu\">\n <button type=\"button\" mat-menu-item disabled>More actions coming soon</button>\n </mat-menu>\n</div>\n\n<nav class=\"tk-workspace-detail__tabs\">\n <button\n type=\"button\"\n class=\"tk-workspace-detail__tab\"\n [class.tk-workspace-detail__tab--active]=\"activeTab === 'overview'\"\n (click)=\"selectTab('overview')\">\n Overview\n </button>\n <button\n type=\"button\"\n class=\"tk-workspace-detail__tab\"\n [class.tk-workspace-detail__tab--active]=\"activeTab === 'calling'\"\n (click)=\"selectTab('calling')\">\n Calling\n </button>\n</nav>\n\n<ng-container *ngIf=\"details\">\n <div class=\"tk-workspace-detail__grid\" *ngIf=\"activeTab === 'overview'\">\n <div class=\"tk-workspace-detail__col\">\n <section class=\"tk-workspace-detail__card\" *ngIf=\"details.issues.length\">\n <h2 class=\"tk-workspace-detail__card-title\">Issues &amp; Information</h2>\n <div class=\"tk-workspace-detail__issue\" *ngFor=\"let issue of details.issues\">\n <div class=\"tk-workspace-detail__issue-info\">\n <mat-icon class=\"tk-workspace-detail__issue-icon\">info</mat-icon>\n <div>\n <div class=\"tk-workspace-detail__issue-message\">{{ issue.message }}</div>\n <div class=\"tk-workspace-detail__issue-timestamp\">{{ issue.timestamp }}</div>\n </div>\n </div>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">\n {{ issue.actionLabel }}\n <mat-icon>expand_more</mat-icon>\n </button>\n </div>\n </section>\n\n <section class=\"tk-workspace-detail__card\">\n <div class=\"tk-workspace-detail__card-header\">\n <h2 class=\"tk-workspace-detail__card-title\">Devices</h2>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Add device</button>\n </div>\n <div class=\"tk-workspace-detail__devices\" *ngIf=\"workspace.devices.length; else noDevices\">\n <div class=\"tk-workspace-detail__device\" *ngFor=\"let device of workspace.devices\">\n <img class=\"tk-workspace-detail__device-icon\" [src]=\"resolveIcon(device.model)\" [alt]=\"device.label\" />\n <div class=\"tk-workspace-detail__device-info\">\n <a href=\"javascript:void(0)\" class=\"tk-workspace-detail__device-link\">{{ device.label }}</a>\n <div class=\"tk-workspace-detail__device-status\">\n <span class=\"tk-workspace-detail__status-dot\"></span>\n Status unavailable\n <mat-icon class=\"tk-workspace-detail__info-icon\">info_outline</mat-icon>\n </div>\n </div>\n </div>\n </div>\n <ng-template #noDevices>\n <div class=\"tk-workspace-detail__empty\">No devices assigned.</div>\n </ng-template>\n </section>\n\n <section class=\"tk-workspace-detail__card\">\n <div class=\"tk-workspace-detail__card-header\">\n <h2 class=\"tk-workspace-detail__card-title\">Calling</h2>\n <mat-icon class=\"tk-workspace-detail__settings-icon\">settings</mat-icon>\n </div>\n <div class=\"tk-workspace-detail__calling-license\">\n <mat-icon>call</mat-icon>\n {{ details.calling.license }}\n </div>\n <hr class=\"tk-workspace-detail__divider\" />\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Cisco Webex SIP Address</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.sipAddress }}</span>\n </div>\n </section>\n\n <section class=\"tk-workspace-detail__card tk-workspace-detail__card--centered\" *ngIf=\"!details.schedulingConfigured\">\n <mat-icon class=\"tk-workspace-detail__card-icon\">event</mat-icon>\n <h3 class=\"tk-workspace-detail__card-heading\">Choose scheduling</h3>\n <p class=\"tk-workspace-detail__card-text\">Choose a calendar service or setup hot-desking for this workspace.</p>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Choose scheduling</button>\n </section>\n\n <section class=\"tk-workspace-detail__card tk-workspace-detail__card--centered\">\n <mat-icon class=\"tk-workspace-detail__card-icon\">info</mat-icon>\n <h3 class=\"tk-workspace-detail__card-heading\">Device hosted meetings unavailable</h3>\n <p class=\"tk-workspace-detail__card-text\">Service not supported by Cisco IP phones</p>\n </section>\n\n <section class=\"tk-workspace-detail__card\">\n <h2 class=\"tk-workspace-detail__card-title\">\n Planned Maintenance\n <mat-icon class=\"tk-workspace-detail__info-icon\">info_outline</mat-icon>\n </h2>\n <div class=\"tk-workspace-detail__row\">\n <mat-icon>build</mat-icon>\n <span>{{ details.plannedMaintenanceEnabled ? 'On' : 'Off' }}</span>\n </div>\n <hr class=\"tk-workspace-detail__divider\" />\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--with-action\">\n <div class=\"tk-workspace-detail__row\">\n <mat-icon>event</mat-icon>\n <div>\n <div>Schedule</div>\n <div class=\"tk-workspace-detail__row-hint\">No schedule set</div>\n </div>\n </div>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Edit schedule</button>\n </div>\n </section>\n\n <section class=\"tk-workspace-detail__card tk-workspace-detail__card--centered\" *ngIf=\"!details.notes\">\n <mat-icon class=\"tk-workspace-detail__card-icon\">description</mat-icon>\n <h3 class=\"tk-workspace-detail__card-heading\">Add notes</h3>\n <p class=\"tk-workspace-detail__card-text\">Write a note about this workspace.</p>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Add notes</button>\n </section>\n </div>\n\n <div class=\"tk-workspace-detail__col\">\n <section class=\"tk-workspace-detail__card\">\n <div class=\"tk-workspace-detail__card-header\">\n <h2 class=\"tk-workspace-detail__card-title\">Location</h2>\n <mat-icon class=\"tk-workspace-detail__settings-icon\">settings</mat-icon>\n </div>\n <div class=\"tk-workspace-detail__location\">\n <mat-icon>location_on</mat-icon>\n <div>\n <a href=\"javascript:void(0)\" class=\"tk-workspace-detail__location-link\">{{ details.location.country }}</a>\n <div class=\"tk-workspace-detail__location-address\">{{ details.location.address }}</div>\n </div>\n </div>\n <hr class=\"tk-workspace-detail__divider\" />\n <div class=\"tk-workspace-detail__row\">\n <mat-icon>explore</mat-icon>\n <span>Indoor navigation</span>\n <mat-icon class=\"tk-workspace-detail__info-icon\">info_outline</mat-icon>\n </div>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Add URL</button>\n <div class=\"tk-workspace-detail__map\">\n <mat-icon class=\"tk-workspace-detail__map-pin\">location_on</mat-icon>\n </div>\n </section>\n </div>\n </div>\n\n <div class=\"tk-workspace-detail__grid\" *ngIf=\"activeTab === 'calling'\">\n <div class=\"tk-workspace-detail__col\">\n <section class=\"tk-workspace-detail__card\">\n <h2 class=\"tk-workspace-detail__card-title\">Calling</h2>\n <div class=\"tk-workspace-detail__calling-license\">\n <mat-icon>call</mat-icon>\n {{ details.calling.license }}\n </div>\n <hr class=\"tk-workspace-detail__divider\" />\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Cisco Webex SIP Address</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.sipAddress }}</span>\n </div>\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Directory Number</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.directoryNumber }}</span>\n </div>\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Route Partition</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.routePartition }}</span>\n </div>\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Calling Search Space</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.callingSearchSpace }}</span>\n </div>\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Device Security Profile</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.securityProfile }}</span>\n </div>\n </section>\n </div>\n </div>\n</ng-container>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;color:#000000f2;padding:1.5rem}.tk-workspace-detail__breadcrumb{display:inline-flex;align-items:center;gap:.125rem;padding:0;margin-bottom:1rem;background:none;border:none;font-family:inherit;font-size:.875rem;font-weight:500;color:#0009;cursor:pointer}.tk-workspace-detail__breadcrumb:hover{color:#000000f2}.tk-workspace-detail__breadcrumb mat-icon{font-size:1.25rem;height:1.25rem;width:1.25rem}.tk-workspace-detail__header{display:flex;align-items:flex-start;gap:.75rem;margin-bottom:1rem}.tk-workspace-detail__icon{display:inline-flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;flex-shrink:0;border-radius:50%;background:#2b2b2b}.tk-workspace-detail__icon img{height:1.375rem;width:1.375rem;filter:brightness(0) invert(1)}.tk-workspace-detail__title-block{flex:1;min-width:0}.tk-workspace-detail__name{margin:0 0 .375rem;font-size:1.25rem;font-weight:600}.tk-workspace-detail__meta{display:flex;flex-wrap:wrap;align-items:center;gap:.375rem;font-size:.875rem;color:#0009}.tk-workspace-detail__meta-sep{color:#0000004d}.tk-workspace-detail__meta-icon{height:.875rem;width:.875rem;opacity:.4}.tk-workspace-detail__meta-muted{color:#0006}.tk-workspace-detail__actions-button{display:inline-flex;align-items:center;gap:.25rem;padding:.5rem 1rem;background:#000;color:#fff;border:none;border-radius:6.25rem;font-family:inherit;font-size:.875rem;font-weight:500;cursor:pointer;flex-shrink:0}.tk-workspace-detail__actions-button:hover{background:#2b2b2b}.tk-workspace-detail__actions-button mat-icon{font-size:1.125rem;height:1.125rem;width:1.125rem}.tk-workspace-detail__tabs{display:flex;align-items:center;gap:1.5rem;border-bottom:1px solid rgba(0,0,0,.12);margin-bottom:1.25rem}.tk-workspace-detail__tab{padding:.75rem 0;background:none;border:none;border-bottom:2px solid transparent;font-family:inherit;font-size:.9375rem;font-weight:500;color:#000000b3;cursor:pointer}.tk-workspace-detail__tab:hover{color:#000000f2}.tk-workspace-detail__tab--active{color:#000000f2;border-bottom-color:#000}.tk-workspace-detail__grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:1.5rem;align-items:start}@media (max-width: 900px){.tk-workspace-detail__grid{grid-template-columns:1fr}}.tk-workspace-detail__col{display:flex;flex-direction:column;gap:1.25rem;min-width:0}.tk-workspace-detail__card{background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:.5rem;padding:1.25rem}.tk-workspace-detail__card--centered{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.375rem;padding:2rem 1.25rem}.tk-workspace-detail__card-icon{color:#0009;margin-bottom:.5rem}.tk-workspace-detail__card-heading{margin:0;font-size:.9375rem;font-weight:600}.tk-workspace-detail__card-text{margin:0 0 .5rem;font-size:.8125rem;color:#0009;max-width:20rem}.tk-workspace-detail__card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem}.tk-workspace-detail__card-title{display:flex;align-items:center;gap:.375rem;margin:0 0 .75rem;font-size:.9375rem;font-weight:600}.tk-workspace-detail__card-header .tk-workspace-detail__card-title{margin-bottom:0}.tk-workspace-detail__settings-icon,.tk-workspace-detail__info-icon{font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006}.tk-workspace-detail__divider{border:none;border-top:1px solid rgba(0,0,0,.12);margin:.75rem 0}.tk-workspace-detail__issue{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.75rem 0;border-top:1px solid rgba(0,0,0,.12)}.tk-workspace-detail__issue:first-of-type{border-top:none;padding-top:0}.tk-workspace-detail__issue-info{display:flex;align-items:flex-start;gap:.5rem}.tk-workspace-detail__issue-icon{color:#0353a8;font-size:1.125rem;height:1.125rem;width:1.125rem;margin-top:.125rem}.tk-workspace-detail__issue-message{font-size:.875rem;font-weight:500}.tk-workspace-detail__issue-timestamp{font-size:.75rem;color:#0006}.tk-workspace-detail__pill-button{display:inline-flex;align-items:center;gap:.25rem;padding:.5rem 1rem;background:#fff;border:1px solid rgba(0,0,0,.3);border-radius:6.25rem;font-family:inherit;font-size:.8125rem;font-weight:500;color:#000000f2;cursor:pointer;white-space:nowrap}.tk-workspace-detail__pill-button:hover{background:#ededed}.tk-workspace-detail__pill-button mat-icon{font-size:1.125rem;height:1.125rem;width:1.125rem}.tk-workspace-detail__devices{display:flex;flex-wrap:wrap;gap:.75rem}.tk-workspace-detail__device{display:flex;align-items:center;gap:.625rem;padding:.75rem;border:1px solid rgba(0,0,0,.12);border-radius:.5rem;min-width:12rem}.tk-workspace-detail__device-icon{width:2.25rem;height:auto;flex-shrink:0}.tk-workspace-detail__device-link{color:#0353a8;text-decoration:none;font-size:.875rem;font-weight:500}.tk-workspace-detail__device-status{display:flex;align-items:center;gap:.25rem;font-size:.75rem;color:#0009}.tk-workspace-detail__empty{font-size:.875rem;color:#0009}.tk-workspace-detail__calling-license{display:flex;align-items:center;gap:.5rem;font-size:.875rem}.tk-workspace-detail__calling-license mat-icon{color:#0006;font-size:1.125rem;height:1.125rem;width:1.125rem}.tk-workspace-detail__row{display:flex;align-items:center;gap:.5rem;font-size:.875rem}.tk-workspace-detail__row mat-icon{color:#0006;font-size:1.125rem;height:1.125rem;width:1.125rem;flex-shrink:0}.tk-workspace-detail__row--with-action{justify-content:space-between}.tk-workspace-detail__row--kv{justify-content:space-between;padding:.5rem 0;border-top:1px solid rgba(0,0,0,.12)}.tk-workspace-detail__row--kv:first-of-type{border-top:none}.tk-workspace-detail__row-label{color:#0009}.tk-workspace-detail__row-value{font-weight:500;text-align:right}.tk-workspace-detail__row-hint{font-size:.75rem;color:#0006}.tk-workspace-detail__location{display:flex;align-items:flex-start;gap:.5rem}.tk-workspace-detail__location mat-icon{color:#0006;font-size:1.125rem;height:1.125rem;width:1.125rem;margin-top:.125rem}.tk-workspace-detail__location-link{color:#0353a8;text-decoration:none;font-size:.875rem;font-weight:500}.tk-workspace-detail__location-address{font-size:.8125rem;color:#0009}.tk-workspace-detail__map{display:flex;align-items:center;justify-content:center;height:12rem;margin-top:1rem;border-radius:.5rem;background:linear-gradient(135deg,#eef1e8 0%,#e4e9dc 100%)}.tk-workspace-detail__map-pin{color:#c73636;font-size:2rem;height:2rem;width:2rem}\n"] }]
609
+ }], ctorParameters: function () { return [{ type: WorkspaceDetailService }, { type: i2.Location }]; }, propDecorators: { workspace: [{
610
+ type: Input
611
+ }], back: [{
612
+ type: Output
613
+ }] } });
614
+
615
+ class AppLoaderComponent {
616
+ constructor() {
617
+ }
618
+ }
619
+ AppLoaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
620
+ AppLoaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AppLoaderComponent, selector: "app-loader", ngImport: i0, template: "<div class=\"overlay\">\n <mat-progress-spinner\n class=\"page-spinner\"\n mode=\"indeterminate\"\n [diameter]=\"70\"\n strokeWidth=\"3\"></mat-progress-spinner>\n</div>\n", styles: [".overlay{position:fixed;width:100%;height:100%;inset:0;background-color:#fff3;z-index:200}.mat-progress-spinner circle,.mat-spinner circle{stroke:#000!important}\n"], dependencies: [{ kind: "component", type: i3$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }], encapsulation: i0.ViewEncapsulation.None });
621
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppLoaderComponent, decorators: [{
622
+ type: Component,
623
+ args: [{ selector: 'app-loader', encapsulation: ViewEncapsulation.None, template: "<div class=\"overlay\">\n <mat-progress-spinner\n class=\"page-spinner\"\n mode=\"indeterminate\"\n [diameter]=\"70\"\n strokeWidth=\"3\"></mat-progress-spinner>\n</div>\n", styles: [".overlay{position:fixed;width:100%;height:100%;inset:0;background-color:#fff3;z-index:200}.mat-progress-spinner circle,.mat-spinner circle{stroke:#000!important}\n"] }]
624
+ }], ctorParameters: function () { return []; } });
625
+
626
+ class WorkspacesComponent {
627
+ constructor(apiService, apiWebexService, workspacesService, migrationService, dialog, location) {
628
+ this.apiService = apiService;
629
+ this.apiWebexService = apiWebexService;
630
+ this.workspacesService = workspacesService;
631
+ this.migrationService = migrationService;
632
+ this.dialog = dialog;
633
+ this.location = location;
634
+ this.addWorkspace = new EventEmitter();
635
+ this.openWorkspace = new EventEmitter();
636
+ this.addDevice = new EventEmitter();
637
+ this.tabs = [
638
+ { id: 'workspaces', label: 'Workspaces', icon: 'assets/icons/device-in-room-regular.svg' },
639
+ { id: 'insights', label: 'Insights', icon: 'assets/icons/analysis-regular.svg' },
640
+ { id: 'integrations', label: 'Integrations', icon: 'assets/icons/integrations-regular.svg' },
641
+ { id: 'settings', label: 'Settings', icon: 'assets/icons/tools-regular.svg' },
642
+ ];
643
+ this.activeTab = 'workspaces';
644
+ this.view = 'list';
645
+ this.selectedWorkspace = null;
646
+ this.workspaces = [];
647
+ this.isLoading = false;
648
+ this.pageIndex = 0;
649
+ this.pageSize = 10;
650
+ this.total = 0;
651
+ this.searchTerm = '';
652
+ this.typeFilter = '';
653
+ this.locationFilter = '';
654
+ this.pendingWorkspaceIds = new Set();
655
+ this.subscriptions = [];
656
+ }
657
+ ngOnInit() {
658
+ this.apiService.token = this.token;
659
+ this.apiService.apiUrl = this.host + '/dcp';
660
+ this.apiWebexService.token = this.token;
661
+ this.apiWebexService.apiUrl = this.host + '/webex';
662
+ this.fetchWorkspaces();
663
+ }
664
+ ngOnDestroy() {
665
+ this.subscriptions.forEach(subscription => subscription.unsubscribe());
666
+ }
667
+ get typeOptions() {
668
+ return [...new Set(this.workspaces.map(workspace => workspace.typeLabel).filter(Boolean))];
669
+ }
670
+ get locationOptions() {
671
+ return [...new Set(this.workspaces.map(workspace => workspace.location).filter(Boolean))];
672
+ }
673
+ get filteredWorkspaces() {
674
+ const term = this.searchTerm.trim().toLowerCase();
675
+ return this.workspaces.filter(workspace => (!term || workspace.displayName.toLowerCase().includes(term) || workspace.location.toLowerCase().includes(term)) &&
676
+ (!this.typeFilter || workspace.typeLabel === this.typeFilter) &&
677
+ (!this.locationFilter || workspace.location === this.locationFilter));
678
+ }
679
+ selectTab(tab) {
680
+ this.activeTab = tab;
681
+ }
682
+ onOpenWorkspace(id) {
683
+ var _a;
684
+ const workspace = (_a = this.workspaces.find(item => item.id === id)) !== null && _a !== void 0 ? _a : null;
685
+ this.openWorkspace.emit(id);
686
+ if (!workspace) {
687
+ return;
688
+ }
689
+ this.selectedWorkspace = workspace;
690
+ this.view = 'detail';
691
+ }
692
+ onBackToList() {
693
+ this.view = 'list';
694
+ this.selectedWorkspace = null;
695
+ this.location.replaceState('/workspaces');
696
+ }
697
+ onSearchChange(term) {
698
+ this.searchTerm = term;
699
+ }
700
+ onTypeFilterChange(type) {
701
+ this.typeFilter = type;
702
+ }
703
+ onLocationFilterChange(location) {
704
+ this.locationFilter = location;
705
+ }
706
+ onPageChange({ pageIndex, pageSize }) {
707
+ this.pageIndex = pageIndex;
708
+ this.pageSize = pageSize;
709
+ this.fetchWorkspaces();
710
+ }
711
+ onMoveToMT(workspace) {
712
+ const dialogRef = this.dialog.open(WorkspaceConfirmDialogComponent, {
713
+ data: {
714
+ title: `Upgrade workspace ${workspace.displayName} to Multi Tenant?`,
715
+ message: `<p>Upgrading this workspace will prepare it for migration to Multi Tenant.</p>
716
+ <p>During this process, the workspace configuration will be copied to the Multi Tenant environment.
717
+ The workspace will remain active on the current system until the Activate step is completed.</p>
718
+ <p>Do you want to continue?</p>`,
719
+ confirmButtonText: 'Yes, upgrade',
720
+ },
721
+ });
722
+ dialogRef.beforeClosed().subscribe((result) => {
723
+ if (!result) {
724
+ return;
725
+ }
726
+ this.pendingWorkspaceIds.add(workspace.id);
727
+ const subscription = this.migrationService.moveToMT(this.customerId, workspace.device).subscribe({
728
+ next: (formId) => {
729
+ if (formId) {
730
+ this.pollMigrationFormStatus(Number(formId), workspace.id);
731
+ }
732
+ else {
733
+ this.pendingWorkspaceIds.delete(workspace.id);
734
+ this.fetchWorkspaces();
735
+ }
736
+ },
737
+ error: () => {
738
+ this.pendingWorkspaceIds.delete(workspace.id);
739
+ this.fetchWorkspaces();
740
+ },
741
+ });
742
+ this.subscriptions.push(subscription);
743
+ });
744
+ }
745
+ onEnableWebexCalling(workspace) {
746
+ const device = workspace.device;
747
+ if (!device.webexUUID || workspace.status !== 'inactive') {
748
+ return;
749
+ }
750
+ const dialogRef = this.dialog.open(WorkspaceConfirmDialogComponent, {
751
+ data: {
752
+ title: `Activate workspace ${workspace.displayName} on Multi Tenant?`,
753
+ message: `<p>Activating this workspace will perform the cutover to Multi Tenant and complete the migration process.</p>
754
+ <p>After activation, the workspace will become active on Multi Tenant and the original workspace will become inactive.</p>
755
+ <p>Do you want to continue?</p>`,
756
+ confirmButtonText: 'Activate',
757
+ },
758
+ });
759
+ dialogRef.beforeClosed().subscribe((result) => {
760
+ if (!result) {
761
+ return;
762
+ }
763
+ this.pendingWorkspaceIds.add(workspace.id);
764
+ const subscription = this.migrationService
765
+ .getMigratedMigrationFormEntities(this.customerId, device.webexUUID, 'PERSON')
766
+ .pipe(map$1((entities) => (Array.isArray(entities) ? entities[0] : entities || null)))
767
+ .subscribe({
768
+ next: (entity) => {
769
+ var _a, _b;
770
+ const formId = (_b = (_a = entity === null || entity === void 0 ? void 0 : entity.migrationFormId) !== null && _a !== void 0 ? _a : entity === null || entity === void 0 ? void 0 : entity.id) !== null && _b !== void 0 ? _b : null;
771
+ if (!formId) {
772
+ this.pendingWorkspaceIds.delete(workspace.id);
773
+ return;
774
+ }
775
+ const deviceMap = this.buildFirmwareDeviceMap(entity, device);
776
+ const upgradeSubscription = this.migrationService
777
+ .triggerFirmwareUpgrade(this.customerId, Number(formId), deviceMap)
778
+ .subscribe({
779
+ next: () => {
780
+ window.setTimeout(() => {
781
+ this.pollMigrationFormStatus(Number(formId), workspace.id, () => {
782
+ this.migrationService.removeUcmLicense(this.customerId, Number(formId)).subscribe();
783
+ });
784
+ }, 10000);
785
+ },
786
+ error: () => {
787
+ this.pendingWorkspaceIds.delete(workspace.id);
788
+ this.fetchWorkspaces();
789
+ },
790
+ });
791
+ this.subscriptions.push(upgradeSubscription);
792
+ },
793
+ error: () => {
794
+ this.pendingWorkspaceIds.delete(workspace.id);
795
+ },
796
+ });
797
+ this.subscriptions.push(subscription);
798
+ });
799
+ }
800
+ onMigrateToUCM(workspace) {
801
+ const device = workspace.device;
802
+ if (!device.webexUUID || workspace.status !== 'active') {
803
+ return;
804
+ }
805
+ this.pendingWorkspaceIds.add(workspace.id);
806
+ const subscription = this.migrationService
807
+ .revertMigration(this.customerId, device.webexUUID)
808
+ .pipe(switchMap(() => timer(2000)))
809
+ .subscribe({
810
+ next: () => {
811
+ this.pendingWorkspaceIds.delete(workspace.id);
812
+ this.fetchWorkspaces();
813
+ },
814
+ error: () => {
815
+ this.pendingWorkspaceIds.delete(workspace.id);
816
+ this.fetchWorkspaces();
817
+ },
818
+ });
819
+ this.subscriptions.push(subscription);
820
+ }
821
+ pollMigrationFormStatus(formId, workspaceId, onCompleted) {
822
+ const subscription = timer(0, 10000)
823
+ .pipe(switchMap(() => this.migrationService.getMigrationFormStatus(this.customerId, formId)), takeWhile((response) => !this.isTerminalMigrationStatus(response === null || response === void 0 ? void 0 : response.status), true))
824
+ .subscribe({
825
+ next: (response) => {
826
+ const status = this.normalizeMigrationStatus(response === null || response === void 0 ? void 0 : response.status);
827
+ if (!this.isTerminalMigrationStatus(status)) {
828
+ return;
829
+ }
830
+ this.pendingWorkspaceIds.delete(workspaceId);
831
+ this.fetchWorkspaces();
832
+ if (status === 'COMPLETED') {
833
+ onCompleted === null || onCompleted === void 0 ? void 0 : onCompleted();
834
+ }
835
+ },
836
+ error: () => {
837
+ this.pendingWorkspaceIds.delete(workspaceId);
838
+ this.fetchWorkspaces();
839
+ },
840
+ });
841
+ this.subscriptions.push(subscription);
842
+ }
843
+ buildFirmwareDeviceMap(entity, device) {
844
+ const deviceMap = {};
845
+ const entityDevices = [
846
+ ...(Array.isArray(entity === null || entity === void 0 ? void 0 : entity.devices) ? entity.devices : []),
847
+ ...(Array.isArray(entity === null || entity === void 0 ? void 0 : entity.webexMigrationDevices) ? entity.webexMigrationDevices : []),
848
+ ];
849
+ const sourceDevices = entityDevices.length ? entityDevices : [device];
850
+ const cucmId = Number(device.cucmId) || 0;
851
+ sourceDevices.forEach((rawDevice) => {
852
+ const name = (rawDevice === null || rawDevice === void 0 ? void 0 : rawDevice.name) || device.name || '';
853
+ if (!name) {
854
+ return;
855
+ }
856
+ const deviceName = name.includes('SEP') ? name : `SEP${name}`;
857
+ if (!deviceMap[cucmId]) {
858
+ deviceMap[cucmId] = {};
859
+ }
860
+ if (!deviceMap[cucmId]['PERSON']) {
861
+ deviceMap[cucmId]['PERSON'] = [];
862
+ }
863
+ deviceMap[cucmId]['PERSON'].push(deviceName);
864
+ });
865
+ return deviceMap;
866
+ }
867
+ normalizeMigrationStatus(status) {
868
+ return (status || '').toUpperCase();
869
+ }
870
+ isTerminalMigrationStatus(status) {
871
+ const normalized = this.normalizeMigrationStatus(status);
872
+ return normalized === 'COMPLETED' || normalized === 'FAILED' || normalized === 'ERROR' || normalized === 'COMPLETED_WITH_ERRORS';
873
+ }
874
+ fetchWorkspaces() {
875
+ this.isLoading = true;
876
+ this.workspacesService.fetchWorkspaces(this.customerId, this.pageSize, this.pageIndex).subscribe({
877
+ next: ({ workspaces, total }) => {
878
+ this.workspaces = workspaces;
879
+ this.total = total;
880
+ this.isLoading = false;
881
+ },
882
+ error: () => {
883
+ this.workspaces = [];
884
+ this.total = 0;
885
+ this.isLoading = false;
886
+ },
887
+ });
888
+ }
889
+ }
890
+ WorkspacesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesComponent, deps: [{ token: APIService }, { token: ApiWebexService }, { token: WorkspacesService }, { token: WorkspacesMigrationService }, { token: i1.MatDialog }, { token: i2.Location }], target: i0.ɵɵFactoryTarget.Component });
891
+ WorkspacesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WorkspacesComponent, selector: "tk-workspaces", inputs: { host: "host", token: "token", customerId: "customerId" }, outputs: { addWorkspace: "addWorkspace", openWorkspace: "openWorkspace", addDevice: "addDevice" }, ngImport: i0, template: "<div class=\"tk-workspaces\">\n <ng-container *ngIf=\"view === 'list'; else detailView\">\n <header class=\"tk-workspaces__header\">\n <h1 class=\"tk-workspaces__title\">Workspaces</h1>\n </header>\n\n <nav class=\"tk-workspaces__tabs\">\n <button\n type=\"button\"\n *ngFor=\"let tab of tabs\"\n class=\"tk-workspaces__tab\"\n [class.tk-workspaces__tab--active]=\"activeTab === tab.id\"\n (click)=\"selectTab(tab.id)\">\n <img class=\"tk-workspaces__tab-icon\" [src]=\"tab.icon\" alt=\"\" />\n {{ tab.label }}\n </button>\n </nav>\n\n <ng-container *ngIf=\"activeTab === 'workspaces'; else placeholder\">\n <app-loader *ngIf=\"isLoading\"></app-loader>\n\n <tk-workspaces-filters\n [resultCount]=\"total\"\n [typeOptions]=\"typeOptions\"\n [locationOptions]=\"locationOptions\"\n (searchChange)=\"onSearchChange($event)\"\n (typeChange)=\"onTypeFilterChange($event)\"\n (locationChange)=\"onLocationFilterChange($event)\"\n (addWorkspace)=\"addWorkspace.emit()\">\n </tk-workspaces-filters>\n\n <tk-workspaces-table\n [workspaces]=\"filteredWorkspaces\"\n [total]=\"total\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pendingWorkspaceIds]=\"pendingWorkspaceIds\"\n (openWorkspace)=\"onOpenWorkspace($event)\"\n (licenseWithHybrid)=\"onMoveToMT($event)\"\n (migrateToMT)=\"onMoveToMT($event)\"\n (enableWebexCalling)=\"onEnableWebexCalling($event)\"\n (migrateToUCM)=\"onMigrateToUCM($event)\"\n (addDevice)=\"addDevice.emit($event)\"\n (pageChange)=\"onPageChange($event)\">\n </tk-workspaces-table>\n </ng-container>\n\n <ng-template #placeholder>\n <div class=\"tk-workspaces__placeholder\">This section isn't available in this widget yet.</div>\n </ng-template>\n </ng-container>\n\n <ng-template #detailView>\n <tk-workspace-detail\n *ngIf=\"selectedWorkspace\"\n [workspace]=\"selectedWorkspace\"\n (back)=\"onBackToList()\">\n </tk-workspace-detail>\n </ng-template>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";.tk-workspaces{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;color:#000000f2;padding:1.5rem}.tk-workspaces__header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding-bottom:1rem}.tk-workspaces__title{margin:0;font-size:1.5rem;font-weight:600}.tk-workspaces__tabs{display:flex;align-items:center;gap:.25rem;margin-bottom:1rem}.tk-workspaces__tab{display:inline-flex;align-items:center;gap:.375rem;padding:.5rem .875rem;background:none;border:none;border-radius:6.25rem;font-family:inherit;font-size:1rem;font-weight:500;color:#000000b3;cursor:pointer}.tk-workspaces__tab:hover{background:rgba(0,0,0,.0705882353)}.tk-workspaces__tab--active{background:#C1C1C1;color:#000000f2}.tk-workspaces__tab--active:hover{background:rgba(0,0,0,.3019607843)}.tk-workspaces__tab-icon{height:1.125rem;width:1.125rem;opacity:.6}.tk-workspaces__tab--active .tk-workspaces__tab-icon{opacity:1}.tk-workspaces__placeholder{padding:3rem 1rem;text-align:center;color:#0009}::ng-deep input.blue-input{border:solid .0625rem rgba(0,0,0,.5019607843)!important}::ng-deep input.blue-input:focus{display:flex;align-items:center;color:#000000b3;background-color:#ededed;border:solid .0625rem rgba(0,0,0,.5019607843);font-weight:500;cursor:pointer;flex-wrap:wrap;gap:.5rem;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;background-color:#fff!important}::ng-deep input.blue-input:focus:focus-visible{outline:none}::ng-deep input.blue-input:hover{background-color:#00000012!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: WorkspacesFiltersComponent, selector: "tk-workspaces-filters", inputs: ["resultCount", "typeOptions", "locationOptions"], outputs: ["searchChange", "typeChange", "locationChange", "addWorkspace"] }, { kind: "component", type: WorkspacesTableComponent, selector: "tk-workspaces-table", inputs: ["workspaces", "total", "pageIndex", "pageSize", "pageSizeOptions", "pendingWorkspaceIds"], outputs: ["openWorkspace", "licenseWithHybrid", "migrateToMT", "enableWebexCalling", "migrateToUCM", "addDevice", "pageChange"] }, { kind: "component", type: WorkspaceDetailComponent, selector: "tk-workspace-detail", inputs: ["workspace"], outputs: ["back"] }, { kind: "component", type: AppLoaderComponent, selector: "app-loader" }] });
892
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesComponent, decorators: [{
893
+ type: Component,
894
+ args: [{ selector: 'tk-workspaces', template: "<div class=\"tk-workspaces\">\n <ng-container *ngIf=\"view === 'list'; else detailView\">\n <header class=\"tk-workspaces__header\">\n <h1 class=\"tk-workspaces__title\">Workspaces</h1>\n </header>\n\n <nav class=\"tk-workspaces__tabs\">\n <button\n type=\"button\"\n *ngFor=\"let tab of tabs\"\n class=\"tk-workspaces__tab\"\n [class.tk-workspaces__tab--active]=\"activeTab === tab.id\"\n (click)=\"selectTab(tab.id)\">\n <img class=\"tk-workspaces__tab-icon\" [src]=\"tab.icon\" alt=\"\" />\n {{ tab.label }}\n </button>\n </nav>\n\n <ng-container *ngIf=\"activeTab === 'workspaces'; else placeholder\">\n <app-loader *ngIf=\"isLoading\"></app-loader>\n\n <tk-workspaces-filters\n [resultCount]=\"total\"\n [typeOptions]=\"typeOptions\"\n [locationOptions]=\"locationOptions\"\n (searchChange)=\"onSearchChange($event)\"\n (typeChange)=\"onTypeFilterChange($event)\"\n (locationChange)=\"onLocationFilterChange($event)\"\n (addWorkspace)=\"addWorkspace.emit()\">\n </tk-workspaces-filters>\n\n <tk-workspaces-table\n [workspaces]=\"filteredWorkspaces\"\n [total]=\"total\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pendingWorkspaceIds]=\"pendingWorkspaceIds\"\n (openWorkspace)=\"onOpenWorkspace($event)\"\n (licenseWithHybrid)=\"onMoveToMT($event)\"\n (migrateToMT)=\"onMoveToMT($event)\"\n (enableWebexCalling)=\"onEnableWebexCalling($event)\"\n (migrateToUCM)=\"onMigrateToUCM($event)\"\n (addDevice)=\"addDevice.emit($event)\"\n (pageChange)=\"onPageChange($event)\">\n </tk-workspaces-table>\n </ng-container>\n\n <ng-template #placeholder>\n <div class=\"tk-workspaces__placeholder\">This section isn't available in this widget yet.</div>\n </ng-template>\n </ng-container>\n\n <ng-template #detailView>\n <tk-workspace-detail\n *ngIf=\"selectedWorkspace\"\n [workspace]=\"selectedWorkspace\"\n (back)=\"onBackToList()\">\n </tk-workspace-detail>\n </ng-template>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";.tk-workspaces{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;color:#000000f2;padding:1.5rem}.tk-workspaces__header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding-bottom:1rem}.tk-workspaces__title{margin:0;font-size:1.5rem;font-weight:600}.tk-workspaces__tabs{display:flex;align-items:center;gap:.25rem;margin-bottom:1rem}.tk-workspaces__tab{display:inline-flex;align-items:center;gap:.375rem;padding:.5rem .875rem;background:none;border:none;border-radius:6.25rem;font-family:inherit;font-size:1rem;font-weight:500;color:#000000b3;cursor:pointer}.tk-workspaces__tab:hover{background:rgba(0,0,0,.0705882353)}.tk-workspaces__tab--active{background:#C1C1C1;color:#000000f2}.tk-workspaces__tab--active:hover{background:rgba(0,0,0,.3019607843)}.tk-workspaces__tab-icon{height:1.125rem;width:1.125rem;opacity:.6}.tk-workspaces__tab--active .tk-workspaces__tab-icon{opacity:1}.tk-workspaces__placeholder{padding:3rem 1rem;text-align:center;color:#0009}::ng-deep input.blue-input{border:solid .0625rem rgba(0,0,0,.5019607843)!important}::ng-deep input.blue-input:focus{display:flex;align-items:center;color:#000000b3;background-color:#ededed;border:solid .0625rem rgba(0,0,0,.5019607843);font-weight:500;cursor:pointer;flex-wrap:wrap;gap:.5rem;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;background-color:#fff!important}::ng-deep input.blue-input:focus:focus-visible{outline:none}::ng-deep input.blue-input:hover{background-color:#00000012!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}\n"] }]
895
+ }], ctorParameters: function () { return [{ type: APIService }, { type: ApiWebexService }, { type: WorkspacesService }, { type: WorkspacesMigrationService }, { type: i1.MatDialog }, { type: i2.Location }]; }, propDecorators: { host: [{
896
+ type: Input
897
+ }], token: [{
898
+ type: Input
899
+ }], customerId: [{
900
+ type: Input
901
+ }], addWorkspace: [{
902
+ type: Output
903
+ }], openWorkspace: [{
904
+ type: Output
905
+ }], addDevice: [{
906
+ type: Output
907
+ }] } });
908
+
909
+ class WorkspacesModule {
910
+ }
911
+ WorkspacesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
912
+ WorkspacesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesModule, declarations: [WorkspacesComponent,
913
+ WorkspacesFiltersComponent,
914
+ WorkspacesTableComponent,
915
+ WorkspaceDetailComponent,
916
+ WorkspaceConfirmDialogComponent,
917
+ AppLoaderComponent], imports: [CommonModule,
918
+ HttpClientModule,
919
+ FormsModule,
920
+ MaterialModule], exports: [WorkspacesComponent] });
921
+ WorkspacesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesModule, imports: [CommonModule,
922
+ HttpClientModule,
923
+ FormsModule,
924
+ MaterialModule] });
925
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WorkspacesModule, decorators: [{
926
+ type: NgModule,
927
+ args: [{
928
+ declarations: [
929
+ WorkspacesComponent,
930
+ WorkspacesFiltersComponent,
931
+ WorkspacesTableComponent,
932
+ WorkspaceDetailComponent,
933
+ WorkspaceConfirmDialogComponent,
934
+ AppLoaderComponent,
935
+ ],
936
+ imports: [
937
+ CommonModule,
938
+ HttpClientModule,
939
+ FormsModule,
940
+ MaterialModule,
941
+ ],
942
+ exports: [
943
+ WorkspacesComponent,
944
+ ],
945
+ }]
946
+ }] });
947
+
948
+ /*
949
+ * Public API Surface of @tuki-io/tuki-widgets
950
+ */
951
+ // Widget Modules
952
+
953
+ /**
954
+ * Generated bundle index. Do not edit.
955
+ */
956
+
957
+ export { WorkspacesComponent, WorkspacesModule };
958
+ //# sourceMappingURL=tuki-io-tuki-widgets-workspaces.mjs.map