@tuki-io/tuki-widgets 0.0.219-dev.37 → 0.0.219-dev.39

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 (226) hide show
  1. package/README.md +24 -24
  2. package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +1 -1
  3. package/esm2020/contact-center/cc-readiness/cc-readiness.service.mjs +1 -1
  4. package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +3 -3
  5. package/esm2020/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.mjs +3 -3
  6. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +2 -2
  7. package/esm2020/di2mt/widgets/upgrade-overview/cards/pending-activation-users/pending-activation-users.component.mjs +17 -17
  8. package/esm2020/lib/widgets.component.mjs +9 -9
  9. package/esm2020/lib/widgets.module.mjs +1 -1
  10. package/esm2020/lib/widgets.service.mjs +1 -1
  11. package/esm2020/locations/public-api.mjs +1 -1
  12. package/esm2020/locations/src/app.constants.mjs +1 -1
  13. package/esm2020/locations/src/locations.component.mjs +3 -3
  14. package/esm2020/locations/src/locations.module.mjs +1 -1
  15. package/esm2020/locations/src/material.module.mjs +1 -1
  16. package/esm2020/locations/src/services/api.service.mjs +1 -1
  17. package/esm2020/locations/src/services/locations.service.mjs +1 -1
  18. package/esm2020/locations/src/types/location.mjs +1 -1
  19. package/esm2020/locations/src/utils/app-loader/app-loader.mjs +3 -3
  20. package/esm2020/meetings/src/app.constants.mjs +1 -1
  21. package/esm2020/meetings/src/components/live-meetings/live-meetings.component.mjs +3 -3
  22. package/esm2020/meetings/src/components/meeting-spaces/meeting-spaces.component.mjs +3 -3
  23. package/esm2020/meetings/src/meetings.component.mjs +3 -3
  24. package/esm2020/meetings/src/meetings.module.mjs +1 -1
  25. package/esm2020/meetings/src/services/live-meetings.service.mjs +1 -1
  26. package/esm2020/meetings/src/services/meeting-spaces.service.mjs +1 -1
  27. package/esm2020/meetings/src/types/live-meeting.mjs +1 -1
  28. package/esm2020/meetings/src/types/meeting-space.mjs +1 -1
  29. package/esm2020/meetings/src/utils/app-loader/app-loader.mjs +3 -3
  30. package/esm2020/public-api.mjs +1 -1
  31. package/esm2020/user-creation/src/app.constants.mjs +1 -1
  32. package/esm2020/user-creation/src/classes/notification.mjs +1 -1
  33. package/esm2020/user-creation/src/classes/site.mjs +1 -1
  34. package/esm2020/user-creation/src/environments/environment.mjs +1 -1
  35. package/esm2020/user-creation/src/interfaces/user-creation-wizard.interfaces.mjs +1 -1
  36. package/esm2020/user-creation/src/shared/components/notification/notification.component.mjs +3 -3
  37. package/esm2020/user-creation/src/shared/pipes/truncate.pipe.mjs +1 -1
  38. package/esm2020/user-creation/src/shared/services/notification.service.mjs +1 -1
  39. package/esm2020/user-creation/src/shared/services/user-creation-api.service.mjs +1 -1
  40. package/esm2020/user-creation/src/shared/services/utils.mjs +1 -1
  41. package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +3 -3
  42. package/esm2020/user-creation/src/utils/build-savable-end-user.mjs +1 -1
  43. package/esm2020/user-creation/src/utils/device-default-prefix.mjs +1 -1
  44. package/esm2020/user-creation/src/utils/device-name-dynamic-tokens.mjs +1 -1
  45. package/esm2020/user-creation/src/utils/device-name-validation.mjs +1 -1
  46. package/esm2020/user-creation/src/utils/model.mjs +1 -1
  47. package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +1 -1
  48. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +3 -3
  49. package/esm2020/user-device-manage/public-api.mjs +1 -1
  50. package/esm2020/user-device-manage/src/app.constants.mjs +1 -1
  51. package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
  52. package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +1 -1
  53. package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +1 -1
  54. package/esm2020/user-device-manage/src/classes/line-association.mjs +1 -1
  55. package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +1 -1
  56. package/esm2020/user-device-manage/src/classes/line-directory.mjs +1 -1
  57. package/esm2020/user-device-manage/src/classes/line.mjs +1 -1
  58. package/esm2020/user-device-manage/src/classes/notification.mjs +1 -1
  59. package/esm2020/user-device-manage/src/classes/recording-options.mjs +1 -1
  60. package/esm2020/user-device-manage/src/classes/simplified-user.mjs +1 -1
  61. package/esm2020/user-device-manage/src/classes/site-defaults.mjs +1 -1
  62. package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +1 -1
  63. package/esm2020/user-device-manage/src/classes/types.mjs +1 -1
  64. package/esm2020/user-device-manage/src/common-functions.mjs +1 -1
  65. package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +3 -3
  66. package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +3 -3
  67. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +3 -3
  68. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.mjs +3 -3
  69. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +1 -1
  70. package/esm2020/user-device-manage/src/device-info/device-info.component.mjs +3 -3
  71. package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +2 -2
  72. package/esm2020/user-device-manage/src/environments/environment.mjs +1 -1
  73. package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +1 -1
  74. package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
  75. package/esm2020/user-device-manage/src/material.module.mjs +1 -1
  76. package/esm2020/user-device-manage/src/notifications/notification.component.mjs +3 -3
  77. package/esm2020/user-device-manage/src/pipes/mac-address.pipe.mjs +1 -1
  78. package/esm2020/user-device-manage/src/services/api.service.mjs +1 -1
  79. package/esm2020/user-device-manage/src/services/device.service.mjs +1 -1
  80. package/esm2020/user-device-manage/src/services/dns.service.mjs +1 -1
  81. package/esm2020/user-device-manage/src/services/line.service.mjs +1 -1
  82. package/esm2020/user-device-manage/src/services/notification.service.mjs +1 -1
  83. package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  84. package/esm2020/user-device-manage/src/services/site-settings.service.mjs +1 -1
  85. package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +1 -1
  86. package/esm2020/user-device-manage/src/services/user.service.mjs +1 -1
  87. package/esm2020/user-device-manage/src/services/utils.service.mjs +1 -1
  88. package/esm2020/user-device-manage/src/services/validation.service.mjs +1 -1
  89. package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +3 -3
  90. package/esm2020/user-manage/public-api.mjs +1 -1
  91. package/esm2020/user-manage/src/app.constants.mjs +1 -1
  92. package/esm2020/user-manage/src/classes/device.mjs +1 -1
  93. package/esm2020/user-manage/src/classes/line-association-interface.mjs +1 -1
  94. package/esm2020/user-manage/src/classes/line-association.mjs +1 -1
  95. package/esm2020/user-manage/src/classes/line-call-info-display.mjs +1 -1
  96. package/esm2020/user-manage/src/classes/line-directory.mjs +1 -1
  97. package/esm2020/user-manage/src/classes/line.mjs +1 -1
  98. package/esm2020/user-manage/src/classes/notification.mjs +1 -1
  99. package/esm2020/user-manage/src/classes/pagination.mjs +1 -1
  100. package/esm2020/user-manage/src/classes/recording-options.mjs +1 -1
  101. package/esm2020/user-manage/src/classes/simplified-user.mjs +1 -1
  102. package/esm2020/user-manage/src/classes/table-data.mjs +1 -1
  103. package/esm2020/user-manage/src/classes/translation-pattern.mjs +1 -1
  104. package/esm2020/user-manage/src/classes/user-list.mjs +1 -1
  105. package/esm2020/user-manage/src/common-functions.mjs +1 -1
  106. package/esm2020/user-manage/src/device-list/device-list.component.mjs +3 -3
  107. package/esm2020/user-manage/src/device-list/device-row/device-row.component.mjs +3 -3
  108. package/esm2020/user-manage/src/environments/environment.mjs +1 -1
  109. package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +1 -1
  110. package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
  111. package/esm2020/user-manage/src/material.module.mjs +1 -1
  112. package/esm2020/user-manage/src/notifications/notification.component.mjs +3 -3
  113. package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +1 -1
  114. package/esm2020/user-manage/src/services/api.service.mjs +1 -1
  115. package/esm2020/user-manage/src/services/dcp-api.service.mjs +1 -1
  116. package/esm2020/user-manage/src/services/dns.service.mjs +1 -1
  117. package/esm2020/user-manage/src/services/line.service.mjs +1 -1
  118. package/esm2020/user-manage/src/services/notification.service.mjs +1 -1
  119. package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  120. package/esm2020/user-manage/src/services/site-settings.service.mjs +1 -1
  121. package/esm2020/user-manage/src/services/sorting-utils.service.mjs +1 -1
  122. package/esm2020/user-manage/src/services/user.service.mjs +1 -1
  123. package/esm2020/user-manage/src/services/utils.service.mjs +1 -1
  124. package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +3 -3
  125. package/esm2020/user-manage/src/user-info/user-info.component.mjs +3 -3
  126. package/esm2020/user-manage/src/user-manage-widget.component.mjs +2 -2
  127. package/esm2020/user-manage/src/user-manage.module.mjs +1 -1
  128. package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +3 -3
  129. package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +3 -3
  130. package/esm2020/users-list/public-api.mjs +1 -1
  131. package/esm2020/users-list/src/app.constants.mjs +1 -1
  132. package/esm2020/users-list/src/classes/app-location.mjs +1 -1
  133. package/esm2020/users-list/src/classes/device.mjs +1 -1
  134. package/esm2020/users-list/src/classes/line.mjs +1 -1
  135. package/esm2020/users-list/src/classes/move-user.mjs +1 -1
  136. package/esm2020/users-list/src/classes/notification.mjs +1 -1
  137. package/esm2020/users-list/src/classes/simlified-user.mjs +1 -1
  138. package/esm2020/users-list/src/classes/table-data.mjs +1 -1
  139. package/esm2020/users-list/src/classes/user-list.mjs +1 -1
  140. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +3 -3
  141. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.mjs +3 -3
  142. package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +3 -3
  143. package/esm2020/users-list/src/services/api-webex.service.mjs +1 -1
  144. package/esm2020/users-list/src/services/api.service.mjs +1 -1
  145. package/esm2020/users-list/src/services/dns.service.mjs +1 -1
  146. package/esm2020/users-list/src/services/events-communication.service.mjs +1 -1
  147. package/esm2020/users-list/src/services/notification.service.mjs +1 -1
  148. package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +1 -1
  149. package/esm2020/users-list/src/services/site-settings.service.mjs +1 -1
  150. package/esm2020/users-list/src/services/user.service.mjs +1 -1
  151. package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +3 -3
  152. package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +3 -3
  153. package/esm2020/users-list/src/utils/common-functions.mjs +1 -1
  154. package/esm2020/users-list/src/utils/notifications/notification.component.mjs +3 -3
  155. package/esm2020/users-list/src/utils/utils.service.mjs +1 -1
  156. package/esm2020/workspaces/public-api.mjs +8 -0
  157. package/esm2020/workspaces/src/app.constants.mjs +7 -0
  158. package/esm2020/workspaces/src/components/workspace-detail/workspace-detail.component.mjs +50 -0
  159. package/esm2020/workspaces/src/components/workspaces-filters/workspaces-filters.component.mjs +56 -0
  160. package/esm2020/workspaces/src/components/workspaces-table/workspaces-table.component.mjs +86 -0
  161. package/esm2020/workspaces/src/material.module.mjs +76 -0
  162. package/esm2020/workspaces/src/services/api.service.mjs +67 -0
  163. package/esm2020/workspaces/src/services/workspace-detail.service.mjs +54 -0
  164. package/esm2020/workspaces/src/services/workspaces.service.mjs +90 -0
  165. package/esm2020/workspaces/src/types/workspace.mjs +4 -0
  166. package/esm2020/workspaces/src/utils/app-loader/app-loader.mjs +14 -0
  167. package/esm2020/workspaces/src/utils/device-icon.mjs +13 -0
  168. package/esm2020/workspaces/src/workspaces.component.mjs +124 -0
  169. package/esm2020/workspaces/src/workspaces.module.mjs +48 -0
  170. package/esm2020/workspaces/tuki-io-tuki-widgets-workspaces.mjs +5 -0
  171. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +2 -2
  172. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  173. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +20 -20
  174. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  175. package/fesm2015/tuki-io-tuki-widgets-locations.mjs +4 -4
  176. package/fesm2015/tuki-io-tuki-widgets-locations.mjs.map +1 -1
  177. package/fesm2015/tuki-io-tuki-widgets-meetings.mjs +8 -8
  178. package/fesm2015/tuki-io-tuki-widgets-meetings.mjs.map +1 -1
  179. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +6 -6
  180. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  181. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +18 -18
  182. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  183. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +18 -18
  184. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  185. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +12 -12
  186. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  187. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs +651 -0
  188. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs.map +1 -0
  189. package/fesm2015/tuki-io-tuki-widgets.mjs +8 -8
  190. package/fesm2015/tuki-io-tuki-widgets.mjs.map +1 -1
  191. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +2 -2
  192. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  193. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +20 -20
  194. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  195. package/fesm2020/tuki-io-tuki-widgets-locations.mjs +4 -4
  196. package/fesm2020/tuki-io-tuki-widgets-locations.mjs.map +1 -1
  197. package/fesm2020/tuki-io-tuki-widgets-meetings.mjs +8 -8
  198. package/fesm2020/tuki-io-tuki-widgets-meetings.mjs.map +1 -1
  199. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +6 -6
  200. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  201. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +18 -18
  202. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  203. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +18 -18
  204. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  205. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +12 -12
  206. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  207. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs +654 -0
  208. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs.map +1 -0
  209. package/fesm2020/tuki-io-tuki-widgets.mjs +8 -8
  210. package/fesm2020/tuki-io-tuki-widgets.mjs.map +1 -1
  211. package/package.json +9 -1
  212. package/workspaces/index.d.ts +5 -0
  213. package/workspaces/public-api.d.ts +2 -0
  214. package/workspaces/src/app.constants.d.ts +6 -0
  215. package/workspaces/src/components/workspace-detail/workspace-detail.component.d.ts +23 -0
  216. package/workspaces/src/components/workspaces-filters/workspaces-filters.component.d.ts +20 -0
  217. package/workspaces/src/components/workspaces-table/workspaces-table.component.d.ts +32 -0
  218. package/workspaces/src/material.module.d.ts +15 -0
  219. package/workspaces/src/services/api.service.d.ts +18 -0
  220. package/workspaces/src/services/workspace-detail.service.d.ts +8 -0
  221. package/workspaces/src/services/workspaces.service.d.ts +11 -0
  222. package/workspaces/src/types/workspace.d.ts +161 -0
  223. package/workspaces/src/utils/app-loader/app-loader.d.ts +6 -0
  224. package/workspaces/src/utils/device-icon.d.ts +1 -0
  225. package/workspaces/src/workspaces.component.d.ts +57 -0
  226. package/workspaces/src/workspaces.module.d.ts +15 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tuki-io-tuki-widgets-workspaces.mjs","sources":["../../../../projects/tuki/widgets/workspaces/src/material.module.ts","../../../../projects/tuki/widgets/workspaces/src/services/api.service.ts","../../../../projects/tuki/widgets/workspaces/src/app.constants.ts","../../../../projects/tuki/widgets/workspaces/src/services/workspaces.service.ts","../../../../projects/tuki/widgets/workspaces/src/components/workspaces-filters/workspaces-filters.component.ts","../../../../projects/tuki/widgets/workspaces/src/components/workspaces-filters/workspaces-filters.component.html","../../../../projects/tuki/widgets/workspaces/src/utils/device-icon.ts","../../../../projects/tuki/widgets/workspaces/src/components/workspaces-table/workspaces-table.component.ts","../../../../projects/tuki/widgets/workspaces/src/components/workspaces-table/workspaces-table.component.html","../../../../projects/tuki/widgets/workspaces/src/services/workspace-detail.service.ts","../../../../projects/tuki/widgets/workspaces/src/components/workspace-detail/workspace-detail.component.ts","../../../../projects/tuki/widgets/workspaces/src/components/workspace-detail/workspace-detail.component.html","../../../../projects/tuki/widgets/workspaces/src/utils/app-loader/app-loader.ts","../../../../projects/tuki/widgets/workspaces/src/utils/app-loader/app-loader.component.html","../../../../projects/tuki/widgets/workspaces/src/workspaces.component.ts","../../../../projects/tuki/widgets/workspaces/src/workspaces.component.html","../../../../projects/tuki/widgets/workspaces/src/workspaces.module.ts","../../../../projects/tuki/widgets/workspaces/public-api.ts","../../../../projects/tuki/widgets/workspaces/tuki-io-tuki-widgets-workspaces.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@NgModule({\r\n imports: [\r\n MatButtonModule,\r\n MatIconModule,\r\n MatTableModule,\r\n MatProgressSpinnerModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatMenuModule,\r\n MatPaginatorModule,\r\n MatTooltipModule,\r\n ],\r\n exports: [\r\n MatButtonModule,\r\n MatIconModule,\r\n MatTableModule,\r\n MatProgressSpinnerModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatMenuModule,\r\n MatPaginatorModule,\r\n MatTooltipModule,\r\n ]\r\n})\r\nexport class MaterialModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class APIService {\r\n token!: string;\r\n apiUrl!: string;\r\n\r\n constructor(\r\n private httpClient: HttpClient\r\n ) { }\r\n\r\n fetch(url: string, params?: any, cache?: boolean): Observable<any> {\r\n const headers = this.getHeaders(cache);\r\n params = params || {};\r\n return this.httpClient.get(this.apiUrl + url, { params: this.prepareEncodedParams(params), headers });\r\n }\r\n\r\n post(url: string, body: any, params = {}): Observable<any> {\r\n body = body || null;\r\n const headers = this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, { params: this.prepareEncodedParams(params), headers });\r\n }\r\n\r\n put(url: string, body: any = null, params = {}): Observable<any> {\r\n const headers = this.getHeaders();\r\n return this.httpClient.put(this.apiUrl + url, body, { headers, params: this.prepareEncodedParams(params) });\r\n }\r\n\r\n delete(url: string, params = {}) {\r\n const headers = this.getHeaders();\r\n return this.httpClient.delete(this.apiUrl + url, { headers, params: this.prepareEncodedParams(params) });\r\n }\r\n\r\n private prepareEncodedParams(params: any) {\r\n const result: any = {};\r\n\r\n if (!params) {\r\n return {};\r\n }\r\n for (const key of Object.keys(params)) {\r\n if (params[key] !== undefined && params[key] !== null && params[key] !== '') {\r\n const stringParam = params[key].toString();\r\n result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n private getHeaders(cache?: boolean): HttpHeaders {\r\n let headers = new HttpHeaders();\r\n if (cache) {\r\n headers = headers.append('_Cache', 'true ');\r\n }\r\n const token = this.token || this.getParameterByName('token');\r\n headers = headers.append('Authorization', 'Bearer ' + token);\r\n return headers;\r\n }\r\n\r\n private getParameterByName(name: any, url = window.location.href) {\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n }\r\n}\r\n","export const API = {\r\n WORKSPACES: {\r\n GET_ALL: '/api/search/quicknonuserdevices',\r\n }\r\n};\r\n\r\nexport const ON_PREM_ID = 2542;","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { API } from '../app.constants';\r\nimport { APIService } from './api.service';\r\nimport { Workspace, WorkspaceListItem, WorkspacesPage, WorkspacesResponse, WorkspaceStatus } from '../types/workspace';\r\n\r\nfunction parseResponse(response: any): any {\r\n return typeof response === 'string' ? JSON.parse(response) : response;\r\n}\r\n\r\nfunction toStatus(provisioningStatus: string | null): WorkspaceStatus {\r\n if (!provisioningStatus) {\r\n return 'unavailable';\r\n }\r\n return provisioningStatus.toLowerCase() === 'active' ? 'active' : 'inactive';\r\n}\r\n\r\nfunction toWorkspace(item: WorkspaceListItem, index: number): Workspace {\r\n const device = item.device;\r\n const firstDirectoryNumber = device.associatedDNs?.[0]?.directoryNumber ?? '';\r\n\r\n return {\r\n id: device.pkid || item.workspaceDevices?.[0]?.deviceId || device.name || `workspace-${index}`,\r\n displayName: device.newName || device.name || 'Unnamed device',\r\n typeLabel: device.userDeviceType || 'No type',\r\n capacity: null,\r\n location: item.site?.name || device.siteName || device.location || '',\r\n devices: (item.workspaceDevices || []).map(workspaceDevice => ({\r\n id: workspaceDevice.deviceId,\r\n kind: 'device' as const,\r\n label: workspaceDevice.model || workspaceDevice.mac,\r\n model: workspaceDevice.model,\r\n })),\r\n scheduling: 'Not set',\r\n callingLicense: firstDirectoryNumber,\r\n provisioningType: 'On-premises',\r\n status: toStatus(device.provisioningStatus),\r\n statusLabel: device.provisioningStatus || 'Status unavailable',\r\n device,\r\n isHybrid: false,\r\n };\r\n}\r\n\r\nfunction mergeDevices(a: Workspace['device'], b: Workspace['device']): Workspace['device'] {\r\n return {\r\n ...a,\r\n ...b,\r\n cucmId: b.cucmId ?? a.cucmId,\r\n webexUUID: b.webexUUID ?? a.webexUUID,\r\n };\r\n}\r\n\r\nfunction mergeWorkspacesByDeviceName(workspaces: Workspace[]): Workspace[] {\r\n const merged = new Map<string, Workspace>();\r\n\r\n for (const workspace of workspaces) {\r\n const key = workspace.device.name;\r\n const existing = merged.get(key);\r\n merged.set(key, existing ? {\r\n ...existing,\r\n ...workspace,\r\n device: mergeDevices(existing.device, workspace.device),\r\n isHybrid: true,\r\n } : workspace);\r\n }\r\n\r\n return Array.from(merged.values());\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WorkspacesService {\r\n constructor(private apiService: APIService) { }\r\n\r\n fetchWorkspaces(\r\n customerId: string | number,\r\n size = 10,\r\n page = 0,\r\n ): Observable<WorkspacesPage> {\r\n const queryParams: Record<string, string> = {\r\n type: 'ORPHAN_DEVICE',\r\n 'device-name': 'SEP',\r\n customerid: customerId.toString(),\r\n size: size.toString(),\r\n page: page.toString(),\r\n };\r\n return this.apiService.fetch(API.WORKSPACES.GET_ALL, queryParams).pipe(\r\n map((response: any) => {\r\n const parsed = parseResponse(response) as WorkspacesResponse;\r\n return {\r\n workspaces: mergeWorkspacesByDeviceName((parsed?.pageData || []).map(toWorkspace)),\r\n total: parsed?.total ?? 0,\r\n };\r\n }),\r\n );\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'tk-workspaces-filters',\r\n templateUrl: './workspaces-filters.component.html',\r\n styleUrls: ['./workspaces-filters.component.scss'],\r\n})\r\nexport class WorkspacesFiltersComponent {\r\n @Input() resultCount = 0;\r\n @Input() typeOptions: string[] = [];\r\n @Input() locationOptions: string[] = [];\r\n\r\n @Output() searchChange = new EventEmitter<string>();\r\n @Output() typeChange = new EventEmitter<string>();\r\n @Output() locationChange = new EventEmitter<string>();\r\n @Output() addWorkspace = new EventEmitter<void>();\r\n\r\n searchTerm = '';\r\n selectedType = '';\r\n selectedLocation = '';\r\n\r\n onSearchInputChange(event: Event): void {\r\n this.searchTerm = (event.target as HTMLInputElement).value;\r\n this.searchChange.emit(this.searchTerm);\r\n }\r\n\r\n onTypeChange(value: string): void {\r\n this.selectedType = value;\r\n this.typeChange.emit(value);\r\n }\r\n\r\n onLocationChange(value: string): void {\r\n this.selectedLocation = value;\r\n this.locationChange.emit(value);\r\n }\r\n\r\n onAddWorkspace(): void {\r\n this.addWorkspace.emit();\r\n }\r\n}\r\n","<div class=\"tk-workspaces-filters\">\r\n <div class=\"tk-workspaces-filters__search\">\r\n <input\r\n class=\"tk-workspaces-filters__search-input blue-input\"\r\n type=\"text\"\r\n placeholder=\"Search\"\r\n [value]=\"searchTerm\"\r\n (input)=\"onSearchInputChange($event)\"\r\n />\r\n <mat-icon class=\"tk-workspaces-filters__search-icon\">search</mat-icon>\r\n </div>\r\n\r\n <div class=\"tk-workspaces-filters__filters\">\r\n <span class=\"tk-workspaces-filters__filters-label\">Filters:</span>\r\n\r\n <div class=\"tk-workspaces-filters__select-wrap\">\r\n <select\r\n class=\"tk-workspaces-filters__select\"\r\n [ngModel]=\"selectedType\"\r\n (ngModelChange)=\"onTypeChange($event)\">\r\n <option value=\"\">General</option>\r\n <option *ngFor=\"let type of typeOptions\" [value]=\"type\">{{ type }}</option>\r\n </select>\r\n <mat-icon class=\"tk-workspaces-filters__select-icon\">expand_more</mat-icon>\r\n </div>\r\n\r\n <div class=\"tk-workspaces-filters__select-wrap\">\r\n <select\r\n class=\"tk-workspaces-filters__select\"\r\n [ngModel]=\"selectedLocation\"\r\n (ngModelChange)=\"onLocationChange($event)\">\r\n <option value=\"\">Location</option>\r\n <option *ngFor=\"let location of locationOptions\" [value]=\"location\">{{ location }}</option>\r\n </select>\r\n <mat-icon class=\"tk-workspaces-filters__select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <span class=\"tk-workspaces-filters__count\">{{ resultCount }} workspace{{ resultCount === 1 ? '' : 's' }} in total</span>\r\n\r\n <button type=\"button\" class=\"tk-workspaces-filters__add-button\" [matMenuTriggerFor]=\"addMenu\">\r\n Add workspace\r\n <mat-icon class=\"tk-workspaces-filters__add-icon\">expand_more</mat-icon>\r\n </button>\r\n\r\n <mat-menu #addMenu=\"matMenu\">\r\n <button type=\"button\" mat-menu-item (click)=\"onAddWorkspace()\">Add workspace</button>\r\n <button type=\"button\" mat-menu-item disabled>Import workspaces</button>\r\n </mat-menu>\r\n</div>\r\n","const DEFAULT_DEVICE_ICON = 'assets/icons/cisco_8851.png';\r\n\r\nconst DEVICE_MODEL_ICONS: Record<string, string> = {\r\n 'cisco 8851': 'assets/icons/cisco_8851.png',\r\n 'cisco 8845': 'assets/icons/cisco_8845.png',\r\n 'cisco 9841': 'assets/icons/cisco_9841.png',\r\n};\r\n\r\nexport function getDeviceIcon(model?: string): string {\r\n if (!model) {\r\n return DEFAULT_DEVICE_ICON;\r\n }\r\n return DEVICE_MODEL_ICONS[model.trim().toLowerCase()] ?? DEFAULT_DEVICE_ICON;\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { PageEvent } from '@angular/material/paginator';\r\nimport { Workspace } from '../../types/workspace';\r\nimport { getDeviceIcon as resolveDeviceIcon } from '../../utils/device-icon';\r\n\r\nexport interface WorkspacesPageChange {\r\n pageIndex: number;\r\n pageSize: number;\r\n}\r\n\r\n@Component({\r\n selector: 'tk-workspaces-table',\r\n templateUrl: './workspaces-table.component.html',\r\n styleUrls: ['./workspaces-table.component.scss'],\r\n})\r\nexport class WorkspacesTableComponent {\r\n @Input() workspaces: Workspace[] = [];\r\n @Input() total = 0;\r\n @Input() pageIndex = 0;\r\n @Input() pageSize = 10;\r\n @Input() pageSizeOptions: number[] = [10, 25, 50, 100];\r\n\r\n @Output() openWorkspace = new EventEmitter<string>();\r\n @Output() editWorkspace = new EventEmitter<string>();\r\n @Output() deleteWorkspace = new EventEmitter<string>();\r\n @Output() addDevice = new EventEmitter<string>();\r\n @Output() pageChange = new EventEmitter<WorkspacesPageChange>();\r\n\r\n selectedIds = new Set<string>();\r\n\r\n get allSelected(): boolean {\r\n return this.workspaces.length > 0 && this.selectedIds.size === this.workspaces.length;\r\n }\r\n\r\n get someSelected(): boolean {\r\n return this.selectedIds.size > 0 && !this.allSelected;\r\n }\r\n\r\n toggleAll(): void {\r\n this.selectedIds = this.allSelected ? new Set() : new Set(this.workspaces.map(workspace => workspace.id));\r\n }\r\n\r\n toggleRow(workspaceId: string): void {\r\n const nextSelection = new Set(this.selectedIds);\r\n if (nextSelection.has(workspaceId)) {\r\n nextSelection.delete(workspaceId);\r\n } else {\r\n nextSelection.add(workspaceId);\r\n }\r\n this.selectedIds = nextSelection;\r\n }\r\n\r\n isSelected(workspaceId: string): boolean {\r\n return this.selectedIds.has(workspaceId);\r\n }\r\n\r\n onOpenWorkspace(workspace: Workspace): void {\r\n this.openWorkspace.emit(workspace.id);\r\n }\r\n\r\n onAddDevice(workspace: Workspace, event: Event): void {\r\n event.stopPropagation();\r\n this.addDevice.emit(workspace.id);\r\n }\r\n\r\n onPage(event: PageEvent): void {\r\n this.selectedIds = new Set();\r\n this.pageChange.emit({ pageIndex: event.pageIndex, pageSize: event.pageSize });\r\n }\r\n\r\n getDeviceIcon(model?: string): string {\r\n return resolveDeviceIcon(model);\r\n }\r\n}\r\n","<div class=\"tk-workspaces-table__bulk-bar\">Select one or more workspaces for bulk actions</div>\r\n\r\n<div class=\"tk-workspaces-table__wrapper\">\r\n <table class=\"tk-workspaces-table__table\">\r\n <thead>\r\n <tr>\r\n <th class=\"tk-workspaces-table__checkbox-cell\">\r\n <input type=\"checkbox\" [checked]=\"allSelected\" [indeterminate]=\"someSelected\" (change)=\"toggleAll()\" />\r\n </th>\r\n <th>Name</th>\r\n <th>Devices</th>\r\n <th>Scheduling</th>\r\n <th>Calling</th>\r\n <th>Provisioning Type</th>\r\n <th>Status</th>\r\n <th class=\"tk-workspaces-table__settings-cell\">\r\n <mat-icon class=\"tk-workspaces-table__settings-icon\">settings</mat-icon>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"let workspace of workspaces\"\r\n [class.tk-workspaces-table__row--selected]=\"isSelected(workspace.id)\">\r\n <td class=\"tk-workspaces-table__checkbox-cell\">\r\n <input type=\"checkbox\" [checked]=\"isSelected(workspace.id)\" (change)=\"toggleRow(workspace.id)\" />\r\n </td>\r\n <td class=\"tk-workspaces-table__name-cell\" (click)=\"onOpenWorkspace(workspace)\">\r\n <div class=\"tk-workspaces-table__name-wrapper\">\r\n <span class=\"tk-workspaces-table__name-icon\">\r\n <img src=\"assets/icons/device-in-room-regular.svg\" alt=\"\" />\r\n </span>\r\n <div class=\"tk-workspaces-table__name-info\">\r\n <a href=\"javascript:void(0)\" class=\"tk-workspaces-table__name-link\">{{ workspace.displayName }}</a>\r\n <div class=\"tk-workspaces-table__name-meta\">\r\n <span class=\"tk-workspaces-table__name-type\">{{ workspace.typeLabel }}</span>\r\n <span class=\"tk-workspaces-table__meta-sep\">&middot;</span>\r\n <img class=\"tk-workspaces-table__meta-icon\" src=\"assets/icons/people-regular.svg\" alt=\"\" />\r\n <span class=\"tk-workspaces-table__name-capacity\">{{ workspace.capacity ?? 'No capacity' }}</span>\r\n <span class=\"tk-workspaces-table__meta-sep\">&middot;</span>\r\n <!-- <mat-icon class=\"tk-workspaces-table__meta-icon\">location_on</mat-icon> -->\r\n <img class=\"tk-workspaces-table__meta-icon\" src=\"assets/icons/location-regular.svg\" alt=\"\" />\r\n <a\r\n *ngIf=\"workspace.location; else noLocation\"\r\n href=\"javascript:void(0)\"\r\n class=\"tk-workspaces-table__location-link\">{{ workspace.location }}</a>\r\n <ng-template #noLocation>\r\n <span class=\"tk-workspaces-table__location-empty\">No location</span>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"tk-workspaces-table__devices\">\r\n <ng-container *ngIf=\"workspace.devices.length; else noDevices\">\r\n <span *ngFor=\"let device of workspace.devices\" class=\"tk-workspaces-table__device-card\" [title]=\"device.label\">\r\n <img\r\n class=\"tk-workspaces-table__device-icon\"\r\n [src]=\"getDeviceIcon(device.model)\"\r\n [alt]=\"device.label\" />\r\n </span>\r\n </ng-container>\r\n <!-- <ng-container *ngFor=\"let device of workspace.devices\">\r\n <span *ngIf=\"device && device.model else noDevice\" class=\"tk-workspaces-table__device-card\" [title]=\"device.label\">\r\n <img\r\n class=\"tk-workspaces-table__device-icon\"\r\n [src]=\"getDeviceIcon(device.model)\"\r\n [alt]=\"device.label\" />\r\n </span>\r\n </ng-container> -->\r\n <ng-template #noDevices>\r\n <button\r\n type=\"button\"\r\n class=\"tk-workspaces-table__device-add\"\r\n (click)=\"onAddDevice(workspace, $event)\">\r\n <span class=\"tk-workspaces-table__device-add-label\">\r\n <img\r\n class=\"tk-workspaces-table__device-add-icon\"\r\n src=\"assets/icons/multipled-devices-regular.svg\"\r\n alt=\"\" />\r\n Add device\r\n </span>\r\n </button>\r\n </ng-template>\r\n </div>\r\n </td>\r\n <td>{{ workspace.scheduling }}</td>\r\n <td class=\"tk-workspaces-table__calling-cell\">\r\n <span class=\"tk-workspaces-table__calling-content\">\r\n <img class=\"tk-workspaces-table__calling-icon\" src=\"assets/icons/location-regular.svg\" alt=\"\" />\r\n <span class=\"tk-workspaces-table__calling-text\" title=\"Cisco Webex Calling Professional Workspace\">Cisco Webex Calling Professional Workspace</span>\r\n </span>\r\n </td>\r\n <td>\r\n <div *ngIf=\"workspace.isHybrid\" class=\"tk-workspaces-table__provisioning-icons\">\r\n <span class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/webex.svg\"\r\n [matTooltip]=\"'Webex Calling'\"\r\n matTooltipPosition=\"right\"\r\n width=\"20\"\r\n alt=\"\"\r\n /></span>\r\n <span class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/di_cloud_24.svg\"\r\n [matTooltip]=\"'Webex Calling DI'\"\r\n matTooltipPosition=\"right\"\r\n width=\"20\"\r\n alt=\"\"\r\n /></span>\r\n </div>\r\n <ng-container *ngIf=\"!workspace.isHybrid\">\r\n <span *ngIf=\"workspace.device.cucmId != null\" class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/di_cloud_24.svg\"\r\n [matTooltip]=\"'Webex Calling DI'\"\r\n matTooltipPosition=\"right\"\r\n width=\"20\"\r\n alt=\"\"\r\n /></span>\r\n <span *ngIf=\"workspace.device.webexUUID != null\" class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/webex.svg\"\r\n [matTooltip]=\"'Webex Calling'\"\r\n matTooltipPosition=\"right\"\r\n width=\"20\"\r\n alt=\"\"\r\n /></span>\r\n </ng-container>\r\n </td>\r\n <td>\r\n <span class=\"tk-workspaces-table__status\">\r\n <span\r\n class=\"tk-workspaces-table__status-dot\"\r\n [class.tk-workspaces-table__status-dot--hybrid]=\"workspace.isHybrid\"\r\n [class.tk-workspaces-table__status-dot--active]=\"!workspace.isHybrid\"></span>\r\n {{ workspace.isHybrid ? 'Hybrid' : 'Active' }}\r\n </span>\r\n </td>\r\n <td class=\"tk-workspaces-table__actions-cell\">\r\n <button type=\"button\" class=\"tk-workspaces-table__actions-button\" [matMenuTriggerFor]=\"rowMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #rowMenu=\"matMenu\">\r\n <button type=\"button\" mat-menu-item (click)=\"editWorkspace.emit(workspace.id)\">Edit</button>\r\n <button type=\"button\" mat-menu-item (click)=\"deleteWorkspace.emit(workspace.id)\">Delete</button>\r\n </mat-menu>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"!workspaces.length\">\r\n <td [attr.colspan]=\"8\" class=\"tk-workspaces-table__empty\">No workspaces to display.</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n<mat-paginator\r\n class=\"tk-workspaces-table__paginator\"\r\n [length]=\"total\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onPage($event)\">\r\n</mat-paginator>\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { Workspace, WorkspaceDetails } from '../types/workspace';\r\n\r\n// No dedicated detail API exists yet, so the Overview/Calling tabs are\r\n// populated with mock data derived from the already-loaded workspace record.\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WorkspaceDetailService {\r\n getByWorkspace(workspace: Workspace): Observable<WorkspaceDetails> {\r\n const device = workspace.device;\r\n const directoryNumber = device.associatedDNs?.[0]?.directoryNumber ?? '';\r\n const sipAddress = `${(device.name || workspace.displayName || 'workspace').toLowerCase()}@tukidev.rooms.webex.com`;\r\n\r\n const issues = [\r\n !workspace.typeLabel || workspace.typeLabel === 'No type' ? {\r\n id: 'type',\r\n message: 'Workspace type not set',\r\n timestamp: 'Just now',\r\n actionLabel: 'Assign type',\r\n } : null,\r\n workspace.capacity == null ? {\r\n id: 'capacity',\r\n message: 'Workspace capacity not set',\r\n timestamp: 'Just now',\r\n actionLabel: 'Set capacity',\r\n } : null,\r\n ].filter((issue): issue is NonNullable<typeof issue> => issue !== null);\r\n\r\n const details: WorkspaceDetails = {\r\n issues,\r\n location: {\r\n country: workspace.location || 'Not set',\r\n address: device.location || 'Address not available',\r\n },\r\n calling: {\r\n license: workspace.callingLicense || 'Cisco Webex Calling Professional Workspace',\r\n sipAddress,\r\n directoryNumber: directoryNumber || 'Not assigned',\r\n routePartition: device.associatedDNs?.[0]?.routePartitionName || 'Not set',\r\n callingSearchSpace: device.callingSearchSpaceName || 'Not set',\r\n securityProfile: device.securityProfile || 'Not set',\r\n },\r\n schedulingConfigured: false,\r\n plannedMaintenanceEnabled: false,\r\n notes: null,\r\n };\r\n\r\n return of(details);\r\n }\r\n}\r\n","import { Location } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { Workspace, WorkspaceDetails } from '../../types/workspace';\r\nimport { WorkspaceDetailService } from '../../services/workspace-detail.service';\r\nimport { getDeviceIcon } from '../../utils/device-icon';\r\n\r\nexport type WorkspaceDetailTab = 'overview' | 'calling';\r\n\r\n@Component({\r\n selector: 'tk-workspace-detail',\r\n templateUrl: './workspace-detail.component.html',\r\n styleUrls: ['./workspace-detail.component.scss'],\r\n})\r\nexport class WorkspaceDetailComponent implements OnInit {\r\n @Input() workspace!: Workspace;\r\n\r\n @Output() back = new EventEmitter<void>();\r\n\r\n activeTab: WorkspaceDetailTab = 'overview';\r\n details: WorkspaceDetails | null = null;\r\n\r\n constructor(\r\n private workspaceDetailService: WorkspaceDetailService,\r\n private location: Location,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.workspaceDetailService.getByWorkspace(this.workspace).subscribe(details => {\r\n this.details = details;\r\n });\r\n this.updateUrl();\r\n }\r\n\r\n get deviceName(): string {\r\n return this.workspace.device?.name || this.workspace.id;\r\n }\r\n\r\n resolveIcon(model?: string): string {\r\n return getDeviceIcon(model);\r\n }\r\n\r\n selectTab(tab: WorkspaceDetailTab): void {\r\n this.activeTab = tab;\r\n this.updateUrl();\r\n }\r\n\r\n onBack(): void {\r\n this.location.replaceState('/workspaces');\r\n this.back.emit();\r\n }\r\n\r\n private updateUrl(): void {\r\n this.location.replaceState(`/workspaces/${this.deviceName}/${this.activeTab}`);\r\n }\r\n}\r\n","<button type=\"button\" class=\"tk-workspace-detail__breadcrumb\" (click)=\"onBack()\">\r\n <mat-icon>chevron_left</mat-icon>\r\n Workspaces\r\n</button>\r\n\r\n<div class=\"tk-workspace-detail__header\">\r\n <span class=\"tk-workspace-detail__icon\">\r\n <img src=\"assets/icons/device-in-room-regular.svg\" alt=\"\" />\r\n </span>\r\n <div class=\"tk-workspace-detail__title-block\">\r\n <h1 class=\"tk-workspace-detail__name\">{{ workspace.displayName }}</h1>\r\n <div class=\"tk-workspace-detail__meta\">\r\n <span class=\"tk-workspace-detail__status\">\r\n <span class=\"tk-workspace-detail__status-dot\"></span>\r\n Live status unavailable\r\n </span>\r\n <span class=\"tk-workspace-detail__meta-sep\">&middot;</span>\r\n <span>Type: {{ workspace.typeLabel === 'No type' ? 'Not set' : workspace.typeLabel }}</span>\r\n <span class=\"tk-workspace-detail__meta-sep\">&middot;</span>\r\n <img class=\"tk-workspace-detail__meta-icon\" src=\"assets/icons/people-regular.svg\" alt=\"\" />\r\n <span>Capacity: {{ workspace.capacity ?? 'Not set' }}</span>\r\n <span class=\"tk-workspace-detail__meta-sep\">&middot;</span>\r\n <span class=\"tk-workspace-detail__meta-muted\">Size not set</span>\r\n </div>\r\n </div>\r\n <button type=\"button\" class=\"tk-workspace-detail__actions-button\" [matMenuTriggerFor]=\"actionsMenu\">\r\n Actions\r\n <mat-icon>expand_more</mat-icon>\r\n </button>\r\n <mat-menu #actionsMenu=\"matMenu\">\r\n <button type=\"button\" mat-menu-item disabled>More actions coming soon</button>\r\n </mat-menu>\r\n</div>\r\n\r\n<nav class=\"tk-workspace-detail__tabs\">\r\n <button\r\n type=\"button\"\r\n class=\"tk-workspace-detail__tab\"\r\n [class.tk-workspace-detail__tab--active]=\"activeTab === 'overview'\"\r\n (click)=\"selectTab('overview')\">\r\n Overview\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"tk-workspace-detail__tab\"\r\n [class.tk-workspace-detail__tab--active]=\"activeTab === 'calling'\"\r\n (click)=\"selectTab('calling')\">\r\n Calling\r\n </button>\r\n</nav>\r\n\r\n<ng-container *ngIf=\"details\">\r\n <div class=\"tk-workspace-detail__grid\" *ngIf=\"activeTab === 'overview'\">\r\n <div class=\"tk-workspace-detail__col\">\r\n <section class=\"tk-workspace-detail__card\" *ngIf=\"details.issues.length\">\r\n <h2 class=\"tk-workspace-detail__card-title\">Issues &amp; Information</h2>\r\n <div class=\"tk-workspace-detail__issue\" *ngFor=\"let issue of details.issues\">\r\n <div class=\"tk-workspace-detail__issue-info\">\r\n <mat-icon class=\"tk-workspace-detail__issue-icon\">info</mat-icon>\r\n <div>\r\n <div class=\"tk-workspace-detail__issue-message\">{{ issue.message }}</div>\r\n <div class=\"tk-workspace-detail__issue-timestamp\">{{ issue.timestamp }}</div>\r\n </div>\r\n </div>\r\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">\r\n {{ issue.actionLabel }}\r\n <mat-icon>expand_more</mat-icon>\r\n </button>\r\n </div>\r\n </section>\r\n\r\n <section class=\"tk-workspace-detail__card\">\r\n <div class=\"tk-workspace-detail__card-header\">\r\n <h2 class=\"tk-workspace-detail__card-title\">Devices</h2>\r\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Add device</button>\r\n </div>\r\n <div class=\"tk-workspace-detail__devices\" *ngIf=\"workspace.devices.length; else noDevices\">\r\n <div class=\"tk-workspace-detail__device\" *ngFor=\"let device of workspace.devices\">\r\n <img class=\"tk-workspace-detail__device-icon\" [src]=\"resolveIcon(device.model)\" [alt]=\"device.label\" />\r\n <div class=\"tk-workspace-detail__device-info\">\r\n <a href=\"javascript:void(0)\" class=\"tk-workspace-detail__device-link\">{{ device.label }}</a>\r\n <div class=\"tk-workspace-detail__device-status\">\r\n <span class=\"tk-workspace-detail__status-dot\"></span>\r\n Status unavailable\r\n <mat-icon class=\"tk-workspace-detail__info-icon\">info_outline</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-template #noDevices>\r\n <div class=\"tk-workspace-detail__empty\">No devices assigned.</div>\r\n </ng-template>\r\n </section>\r\n\r\n <section class=\"tk-workspace-detail__card\">\r\n <div class=\"tk-workspace-detail__card-header\">\r\n <h2 class=\"tk-workspace-detail__card-title\">Calling</h2>\r\n <mat-icon class=\"tk-workspace-detail__settings-icon\">settings</mat-icon>\r\n </div>\r\n <div class=\"tk-workspace-detail__calling-license\">\r\n <mat-icon>call</mat-icon>\r\n {{ details.calling.license }}\r\n </div>\r\n <hr class=\"tk-workspace-detail__divider\" />\r\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\r\n <span class=\"tk-workspace-detail__row-label\">Cisco Webex SIP Address</span>\r\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.sipAddress }}</span>\r\n </div>\r\n </section>\r\n\r\n <section class=\"tk-workspace-detail__card tk-workspace-detail__card--centered\" *ngIf=\"!details.schedulingConfigured\">\r\n <mat-icon class=\"tk-workspace-detail__card-icon\">event</mat-icon>\r\n <h3 class=\"tk-workspace-detail__card-heading\">Choose scheduling</h3>\r\n <p class=\"tk-workspace-detail__card-text\">Choose a calendar service or setup hot-desking for this workspace.</p>\r\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Choose scheduling</button>\r\n </section>\r\n\r\n <section class=\"tk-workspace-detail__card tk-workspace-detail__card--centered\">\r\n <mat-icon class=\"tk-workspace-detail__card-icon\">info</mat-icon>\r\n <h3 class=\"tk-workspace-detail__card-heading\">Device hosted meetings unavailable</h3>\r\n <p class=\"tk-workspace-detail__card-text\">Service not supported by Cisco IP phones</p>\r\n </section>\r\n\r\n <section class=\"tk-workspace-detail__card\">\r\n <h2 class=\"tk-workspace-detail__card-title\">\r\n Planned Maintenance\r\n <mat-icon class=\"tk-workspace-detail__info-icon\">info_outline</mat-icon>\r\n </h2>\r\n <div class=\"tk-workspace-detail__row\">\r\n <mat-icon>build</mat-icon>\r\n <span>{{ details.plannedMaintenanceEnabled ? 'On' : 'Off' }}</span>\r\n </div>\r\n <hr class=\"tk-workspace-detail__divider\" />\r\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--with-action\">\r\n <div class=\"tk-workspace-detail__row\">\r\n <mat-icon>event</mat-icon>\r\n <div>\r\n <div>Schedule</div>\r\n <div class=\"tk-workspace-detail__row-hint\">No schedule set</div>\r\n </div>\r\n </div>\r\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Edit schedule</button>\r\n </div>\r\n </section>\r\n\r\n <section class=\"tk-workspace-detail__card tk-workspace-detail__card--centered\" *ngIf=\"!details.notes\">\r\n <mat-icon class=\"tk-workspace-detail__card-icon\">description</mat-icon>\r\n <h3 class=\"tk-workspace-detail__card-heading\">Add notes</h3>\r\n <p class=\"tk-workspace-detail__card-text\">Write a note about this workspace.</p>\r\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Add notes</button>\r\n </section>\r\n </div>\r\n\r\n <div class=\"tk-workspace-detail__col\">\r\n <section class=\"tk-workspace-detail__card\">\r\n <div class=\"tk-workspace-detail__card-header\">\r\n <h2 class=\"tk-workspace-detail__card-title\">Location</h2>\r\n <mat-icon class=\"tk-workspace-detail__settings-icon\">settings</mat-icon>\r\n </div>\r\n <div class=\"tk-workspace-detail__location\">\r\n <mat-icon>location_on</mat-icon>\r\n <div>\r\n <a href=\"javascript:void(0)\" class=\"tk-workspace-detail__location-link\">{{ details.location.country }}</a>\r\n <div class=\"tk-workspace-detail__location-address\">{{ details.location.address }}</div>\r\n </div>\r\n </div>\r\n <hr class=\"tk-workspace-detail__divider\" />\r\n <div class=\"tk-workspace-detail__row\">\r\n <mat-icon>explore</mat-icon>\r\n <span>Indoor navigation</span>\r\n <mat-icon class=\"tk-workspace-detail__info-icon\">info_outline</mat-icon>\r\n </div>\r\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Add URL</button>\r\n <div class=\"tk-workspace-detail__map\">\r\n <mat-icon class=\"tk-workspace-detail__map-pin\">location_on</mat-icon>\r\n </div>\r\n </section>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-workspace-detail__grid\" *ngIf=\"activeTab === 'calling'\">\r\n <div class=\"tk-workspace-detail__col\">\r\n <section class=\"tk-workspace-detail__card\">\r\n <h2 class=\"tk-workspace-detail__card-title\">Calling</h2>\r\n <div class=\"tk-workspace-detail__calling-license\">\r\n <mat-icon>call</mat-icon>\r\n {{ details.calling.license }}\r\n </div>\r\n <hr class=\"tk-workspace-detail__divider\" />\r\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\r\n <span class=\"tk-workspace-detail__row-label\">Cisco Webex SIP Address</span>\r\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.sipAddress }}</span>\r\n </div>\r\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\r\n <span class=\"tk-workspace-detail__row-label\">Directory Number</span>\r\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.directoryNumber }}</span>\r\n </div>\r\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\r\n <span class=\"tk-workspace-detail__row-label\">Route Partition</span>\r\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.routePartition }}</span>\r\n </div>\r\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\r\n <span class=\"tk-workspace-detail__row-label\">Calling Search Space</span>\r\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.callingSearchSpace }}</span>\r\n </div>\r\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\r\n <span class=\"tk-workspace-detail__row-label\">Device Security Profile</span>\r\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.securityProfile }}</span>\r\n </div>\r\n </section>\r\n </div>\r\n </div>\r\n</ng-container>\r\n","import { Component, ViewEncapsulation } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-loader',\r\n templateUrl: './app-loader.component.html',\r\n styleUrls: ['./app-loader.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AppLoaderComponent {\r\n constructor() {\r\n }\r\n\r\n}\r\n","<div class=\"overlay\">\r\n <mat-progress-spinner\r\n class=\"page-spinner\"\r\n mode=\"indeterminate\"\r\n [diameter]=\"70\"\r\n strokeWidth=\"3\"></mat-progress-spinner>\r\n</div>\r\n","import { Location } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { APIService } from './services/api.service';\r\nimport { WorkspacesService } from './services/workspaces.service';\r\nimport { Workspace } from './types/workspace';\r\n\r\ntype WorkspacesView = 'list' | 'detail';\r\n\r\ntype WorkspacesTab = 'workspaces' | 'insights' | 'integrations' | 'settings';\r\n\r\ninterface WorkspacesTabDefinition {\r\n id: WorkspacesTab;\r\n label: string;\r\n icon: string;\r\n}\r\n\r\n@Component({\r\n selector: 'tk-workspaces',\r\n templateUrl: './workspaces.component.html',\r\n styleUrls: ['./workspaces.component.scss'],\r\n})\r\nexport class WorkspacesComponent implements OnInit {\r\n @Input() host!: string;\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n @Output() addWorkspace = new EventEmitter<void>();\r\n @Output() openWorkspace = new EventEmitter<string>();\r\n @Output() editWorkspace = new EventEmitter<string>();\r\n @Output() deleteWorkspace = new EventEmitter<string>();\r\n @Output() addDevice = new EventEmitter<string>();\r\n\r\n readonly tabs: WorkspacesTabDefinition[] = [\r\n { id: 'workspaces', label: 'Workspaces', icon: 'assets/icons/device-in-room-regular.svg' },\r\n { id: 'insights', label: 'Insights', icon: 'assets/icons/analysis-regular.svg' },\r\n { id: 'integrations', label: 'Integrations', icon: 'assets/icons/integrations-regular.svg' },\r\n { id: 'settings', label: 'Settings', icon: 'assets/icons/tools-regular.svg' },\r\n ];\r\n\r\n activeTab: WorkspacesTab = 'workspaces';\r\n\r\n view: WorkspacesView = 'list';\r\n selectedWorkspace: Workspace | null = null;\r\n\r\n workspaces: Workspace[] = [];\r\n isLoading = false;\r\n\r\n pageIndex = 0;\r\n pageSize = 10;\r\n total = 0;\r\n\r\n searchTerm = '';\r\n typeFilter = '';\r\n locationFilter = '';\r\n\r\n constructor(\r\n private apiService: APIService,\r\n private workspacesService: WorkspacesService,\r\n private location: Location,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.apiService.apiUrl = this.host + '/dcp';\r\n this.fetchWorkspaces();\r\n }\r\n\r\n get typeOptions(): string[] {\r\n return [...new Set(this.workspaces.map(workspace => workspace.typeLabel).filter(Boolean))];\r\n }\r\n\r\n get locationOptions(): string[] {\r\n return [...new Set(this.workspaces.map(workspace => workspace.location).filter(Boolean))];\r\n }\r\n\r\n get filteredWorkspaces(): Workspace[] {\r\n const term = this.searchTerm.trim().toLowerCase();\r\n return this.workspaces.filter(workspace =>\r\n (!term || workspace.displayName.toLowerCase().includes(term) || workspace.location.toLowerCase().includes(term)) &&\r\n (!this.typeFilter || workspace.typeLabel === this.typeFilter) &&\r\n (!this.locationFilter || workspace.location === this.locationFilter)\r\n );\r\n }\r\n\r\n selectTab(tab: WorkspacesTab): void {\r\n this.activeTab = tab;\r\n }\r\n\r\n onOpenWorkspace(id: string): void {\r\n const workspace = this.workspaces.find(item => item.id === id) ?? null;\r\n this.openWorkspace.emit(id);\r\n\r\n if (!workspace) {\r\n return;\r\n }\r\n\r\n this.selectedWorkspace = workspace;\r\n this.view = 'detail';\r\n }\r\n\r\n onBackToList(): void {\r\n this.view = 'list';\r\n this.selectedWorkspace = null;\r\n this.location.replaceState('/workspaces');\r\n }\r\n\r\n onSearchChange(term: string): void {\r\n this.searchTerm = term;\r\n }\r\n\r\n onTypeFilterChange(type: string): void {\r\n this.typeFilter = type;\r\n }\r\n\r\n onLocationFilterChange(location: string): void {\r\n this.locationFilter = location;\r\n }\r\n\r\n onPageChange({ pageIndex, pageSize }: { pageIndex: number; pageSize: number }): void {\r\n this.pageIndex = pageIndex;\r\n this.pageSize = pageSize;\r\n this.fetchWorkspaces();\r\n }\r\n\r\n private fetchWorkspaces(): void {\r\n this.isLoading = true;\r\n this.workspacesService.fetchWorkspaces(this.customerId, this.pageSize, this.pageIndex).subscribe({\r\n next: ({ workspaces, total }) => {\r\n this.workspaces = workspaces;\r\n this.total = total;\r\n this.isLoading = false;\r\n },\r\n error: () => {\r\n this.workspaces = [];\r\n this.total = 0;\r\n this.isLoading = false;\r\n },\r\n });\r\n }\r\n}\r\n","<div class=\"tk-workspaces\">\r\n <ng-container *ngIf=\"view === 'list'; else detailView\">\r\n <header class=\"tk-workspaces__header\">\r\n <h1 class=\"tk-workspaces__title\">Workspaces</h1>\r\n </header>\r\n\r\n <nav class=\"tk-workspaces__tabs\">\r\n <button\r\n type=\"button\"\r\n *ngFor=\"let tab of tabs\"\r\n class=\"tk-workspaces__tab\"\r\n [class.tk-workspaces__tab--active]=\"activeTab === tab.id\"\r\n (click)=\"selectTab(tab.id)\">\r\n <img class=\"tk-workspaces__tab-icon\" [src]=\"tab.icon\" alt=\"\" />\r\n {{ tab.label }}\r\n </button>\r\n </nav>\r\n\r\n <ng-container *ngIf=\"activeTab === 'workspaces'; else placeholder\">\r\n <app-loader *ngIf=\"isLoading\"></app-loader>\r\n\r\n <tk-workspaces-filters\r\n [resultCount]=\"total\"\r\n [typeOptions]=\"typeOptions\"\r\n [locationOptions]=\"locationOptions\"\r\n (searchChange)=\"onSearchChange($event)\"\r\n (typeChange)=\"onTypeFilterChange($event)\"\r\n (locationChange)=\"onLocationFilterChange($event)\"\r\n (addWorkspace)=\"addWorkspace.emit()\">\r\n </tk-workspaces-filters>\r\n\r\n <tk-workspaces-table\r\n [workspaces]=\"filteredWorkspaces\"\r\n [total]=\"total\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n (openWorkspace)=\"onOpenWorkspace($event)\"\r\n (editWorkspace)=\"editWorkspace.emit($event)\"\r\n (deleteWorkspace)=\"deleteWorkspace.emit($event)\"\r\n (addDevice)=\"addDevice.emit($event)\"\r\n (pageChange)=\"onPageChange($event)\">\r\n </tk-workspaces-table>\r\n </ng-container>\r\n\r\n <ng-template #placeholder>\r\n <div class=\"tk-workspaces__placeholder\">This section isn't available in this widget yet.</div>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-template #detailView>\r\n <tk-workspace-detail\r\n *ngIf=\"selectedWorkspace\"\r\n [workspace]=\"selectedWorkspace\"\r\n (back)=\"onBackToList()\">\r\n </tk-workspace-detail>\r\n </ng-template>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MaterialModule } from './material.module';\r\nimport { WorkspacesComponent } from './workspaces.component';\r\nimport { WorkspacesFiltersComponent } from './components/workspaces-filters/workspaces-filters.component';\r\nimport { WorkspacesTableComponent } from './components/workspaces-table/workspaces-table.component';\r\nimport { WorkspaceDetailComponent } from './components/workspace-detail/workspace-detail.component';\r\nimport { AppLoaderComponent } from './utils/app-loader/app-loader';\r\n\r\n@NgModule({\r\n declarations: [\r\n WorkspacesComponent,\r\n WorkspacesFiltersComponent,\r\n WorkspacesTableComponent,\r\n WorkspaceDetailComponent,\r\n AppLoaderComponent,\r\n ],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n FormsModule,\r\n MaterialModule,\r\n ],\r\n exports: [\r\n WorkspacesComponent,\r\n ],\r\n})\r\nexport class WorkspacesModule { }\r\n","/*\r\n * Public API Surface of @tuki-io/tuki-widgets\r\n */\r\n\r\n// Widget Modules\r\nexport * from './src/workspaces.module';\r\n\r\n// Components\r\nexport * from './src/workspaces.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.APIService","i1","i2","resolveDeviceIcon","i3","i4","i1.WorkspaceDetailService","i2.WorkspacesService","i4.WorkspacesFiltersComponent","i5.WorkspacesTableComponent","i6.WorkspaceDetailComponent","i7.AppLoaderComponent"],"mappings":"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"}
@@ -19,17 +19,17 @@ class WidgetsComponent {
19
19
  }
20
20
  }
21
21
  WidgetsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WidgetsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
22
- WidgetsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WidgetsComponent, selector: "lib-widgets", ngImport: i0, template: `
23
- <p>
24
- widgets works!
25
- </p>
22
+ WidgetsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: WidgetsComponent, selector: "lib-widgets", ngImport: i0, template: `
23
+ <p>
24
+ widgets works!
25
+ </p>
26
26
  `, isInline: true });
27
27
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: WidgetsComponent, decorators: [{
28
28
  type: Component,
29
- args: [{ selector: 'lib-widgets', template: `
30
- <p>
31
- widgets works!
32
- </p>
29
+ args: [{ selector: 'lib-widgets', template: `
30
+ <p>
31
+ widgets works!
32
+ </p>
33
33
  ` }]
34
34
  }], ctorParameters: function () { return []; } });
35
35
 
@@ -1 +1 @@
1
- {"version":3,"file":"tuki-io-tuki-widgets.mjs","sources":["../../../../projects/tuki/widgets/src/lib/widgets.service.ts","../../../../projects/tuki/widgets/src/lib/widgets.component.ts","../../../../projects/tuki/widgets/src/lib/widgets.module.ts","../../../../projects/tuki/widgets/src/public-api.ts","../../../../projects/tuki/widgets/src/tuki-io-tuki-widgets.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WidgetsService {\n\n constructor() { }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-widgets',\n template: `\n <p>\n widgets works!\n </p>\n `,\n styles: [\n ]\n})\nexport class WidgetsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { WidgetsComponent } from './widgets.component';\n\n\n\n@NgModule({\n declarations: [\n WidgetsComponent\n ],\n imports: [\n ],\n exports: [\n WidgetsComponent\n ]\n})\nexport class WidgetsModule { }\n","/*\n * Public API Surface of widgets\n */\n\nexport * from './lib/widgets.service';\nexport * from './lib/widgets.component';\nexport * from './lib/widgets.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAKa,cAAc,CAAA;AAEzB,IAAA,WAAA,GAAA,GAAiB;;4GAFN,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;MCQY,gBAAgB,CAAA;AAE3B,IAAA,WAAA,GAAA,GAAiB;IAEjB,QAAQ,GAAA;KACP;;8GALU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EARjB,QAAA,EAAA,aAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;4FAIU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EACb,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,CAAA;;;MCOU,aAAa,CAAA;;2GAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;4GAAb,aAAa,EAAA,YAAA,EAAA,CARtB,gBAAgB,CAAA,EAAA,OAAA,EAAA,CAKhB,gBAAgB,CAAA,EAAA,CAAA,CAAA;4GAGP,aAAa,EAAA,CAAA,CAAA;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAVzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,gBAAgB;AACjB,qBAAA;AACD,oBAAA,OAAO,EAAE,EACR;AACD,oBAAA,OAAO,EAAE;wBACP,gBAAgB;AACjB,qBAAA;iBACF,CAAA;;;ACdD;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"tuki-io-tuki-widgets.mjs","sources":["../../../../projects/tuki/widgets/src/lib/widgets.service.ts","../../../../projects/tuki/widgets/src/lib/widgets.component.ts","../../../../projects/tuki/widgets/src/lib/widgets.module.ts","../../../../projects/tuki/widgets/src/public-api.ts","../../../../projects/tuki/widgets/src/tuki-io-tuki-widgets.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WidgetsService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-widgets',\r\n template: `\r\n <p>\r\n widgets works!\r\n </p>\r\n `,\r\n styles: [\r\n ]\r\n})\r\nexport class WidgetsComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { WidgetsComponent } from './widgets.component';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n WidgetsComponent\r\n ],\r\n imports: [\r\n ],\r\n exports: [\r\n WidgetsComponent\r\n ]\r\n})\r\nexport class WidgetsModule { }\r\n","/*\r\n * Public API Surface of widgets\r\n */\r\n\r\nexport * from './lib/widgets.service';\r\nexport * from './lib/widgets.component';\r\nexport * from './lib/widgets.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAKa,cAAc,CAAA;AAEzB,IAAA,WAAA,GAAA,GAAiB;;4GAFN,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;MCQY,gBAAgB,CAAA;AAE3B,IAAA,WAAA,GAAA,GAAiB;IAEjB,QAAQ,GAAA;KACP;;8GALU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EARjB,QAAA,EAAA,aAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;4FAIU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,SAAS;YACE,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EACb,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,CAAA;;;MCOU,aAAa,CAAA;;2GAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;4GAAb,aAAa,EAAA,YAAA,EAAA,CARtB,gBAAgB,CAAA,EAAA,OAAA,EAAA,CAKhB,gBAAgB,CAAA,EAAA,CAAA,CAAA;4GAGP,aAAa,EAAA,CAAA,CAAA;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAVzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,gBAAgB;AACjB,qBAAA;AACD,oBAAA,OAAO,EAAE,EACR;AACD,oBAAA,OAAO,EAAE;wBACP,gBAAgB;AACjB,qBAAA;iBACF,CAAA;;;ACdD;;AAEG;;ACFH;;AAEG;;;;"}
@@ -337,10 +337,10 @@ class LicencesRequirementComponent {
337
337
  }
338
338
  }
339
339
  LicencesRequirementComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LicencesRequirementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
340
- LicencesRequirementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: LicencesRequirementComponent, selector: "cc-licenses-requirement", inputs: { customerId: "customerId", host: "host", token: "token" }, usesOnChanges: true, ngImport: i0, template: "<tk-card title=\"Licenses requirement\">\n <ng-container ngProjectAs=\"card-content\">\n <div\n class=\"widget-body\"\n *ngIf=\"!loading && !error && viewModel; else widgetState\"\n >\n <div class=\"left-section\">\n <mat-select\n [(value)]=\"selectedSummaryIndex\"\n (selectionChange)=\"onFilterChange($event.value)\"\n class=\"filter-select\"\n >\n <mat-option *ngFor=\"let option of filters; index as i\" [value]=\"i\">\n {{ option }}\n </mat-option>\n </mat-select>\n\n <div class=\"chart-section\">\n <div class=\"chart-wrapper\">\n <apx-chart\n [series]=\"viewModel.chartOptions.series\"\n [chart]=\"viewModel.chartOptions.chart\"\n [labels]=\"viewModel.chartOptions.labels\"\n [colors]=\"viewModel.chartOptions.colors\"\n [legend]=\"viewModel.chartOptions.legend\"\n [plotOptions]=\"viewModel.chartOptions.plotOptions\"\n [dataLabels]=\"viewModel.chartOptions.dataLabels\"\n [tooltip]=\"viewModel.chartOptions.tooltip\"\n >\n </apx-chart>\n </div>\n <div class=\"legend\">\n <div class=\"legend-item\" *ngFor=\"let item of viewModel.legendItems\">\n <span\n class=\"legend-marker\"\n [style.backgroundColor]=\"item.color\"\n ></span>\n <span class=\"legend-label\">{{ item.label }}</span>\n <span class=\"legend-value\">{{ item.count | number }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"divider\" aria-hidden=\"true\"></div>\n\n <div class=\"table-section\">\n <div class=\"lic-table-header\">\n <span>License</span>\n <span>Required</span>\n </div>\n <div class=\"table-row\" *ngFor=\"let row of viewModel.rows\">\n <span>{{ row.label }}</span>\n <span>{{ row.value | number }}</span>\n </div>\n <div class=\"table-row total-row\">\n <span>Total</span>\n <span>{{ viewModel.totalRequired | number }}</span>\n </div>\n </div>\n </div>\n\n <ng-template #widgetState>\n <div class=\"state-message\" *ngIf=\"loading\">\n Loading license requirements\u2026\n </div>\n <div class=\"state-message error\" *ngIf=\"!loading && error\">\n Unable to load license requirements.\n </div>\n <div class=\"state-message\" *ngIf=\"!loading && !error && !viewModel\">\n No license data available.\n </div>\n </ng-template>\n </ng-container>\n</tk-card>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;width:100%;box-sizing:border-box}.filter-select{font-family:Inter,Inter,sans-serif;font-size:14px;min-width:140px;border:1px solid #e5e7eb;border-radius:.5rem;padding:.5rem .75rem;background-color:#fff}.filter-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select{border:1px solid #e5e7eb;border-radius:.5rem;background-color:#fff}:host ::ng-deep .filter-select.mat-mdc-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select.mat-focused{border-color:#16a693}:host ::ng-deep .filter-select .mat-mdc-select-trigger{font-size:14px;padding:.5rem .75rem}:host ::ng-deep .filter-select .mat-mdc-select-value{color:#111827}:host ::ng-deep .filter-select .mat-mdc-select-arrow-wrapper{padding-left:.5rem}.widget-body{display:flex;gap:2.5rem;align-items:flex-start}.left-section{flex:2;display:flex;flex-direction:column;gap:1rem}.chart-section{display:flex;gap:1.5rem;align-items:center}.chart-wrapper{width:220px;min-height:220px;flex-shrink:0}.chart-wrapper apx-chart{width:220px!important;height:220px!important}.legend{display:flex;flex-direction:column;gap:.75rem}.legend-item{display:flex;align-items:center;gap:.5rem;font-family:Inter,Inter,sans-serif;font-size:14px}.legend-marker{width:14px;height:14px;border-radius:50%;display:inline-flex}.legend-label{color:#4b5563}.legend-value{margin-left:auto;font-weight:600;color:#111827}.divider{width:1px;min-height:200px;align-self:stretch;background:#e5e7eb}.table-section{flex:3;display:flex;flex-direction:column;gap:.75rem;font-family:Inter,Inter,sans-serif}.lic-table-header,.table-row{display:flex;justify-content:space-between;font-size:14px}.lic-table-header{font-weight:600;color:#6b7280;padding-bottom:.5rem;border-bottom:1px solid #e5e7eb}.table-row{color:#111827}.total-row{font-weight:700;margin-top:.5rem;padding-top:.5rem;border-top:1px solid #e5e7eb}.state-message{font-family:Inter,Inter,sans-serif;font-size:14px;color:#6b7280}.state-message.error{color:#b91c1c}@media (max-width: 960px){.widget-body{flex-direction:column}.divider{display:none}.chart-section{justify-content:space-between}}:host ::ng-deep .apexcharts-legend{display:none!important}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ChartComponent, selector: "apx-chart", inputs: ["chart", "annotations", "colors", "dataLabels", "series", "stroke", "labels", "legend", "markers", "noData", "fill", "tooltip", "plotOptions", "responsive", "xaxis", "yaxis", "forecastDataPoints", "grid", "states", "title", "subtitle", "theme", "autoUpdateSeries"] }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: CardComponent, selector: "tk-card", inputs: ["title"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }] });
340
+ LicencesRequirementComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: LicencesRequirementComponent, selector: "cc-licenses-requirement", inputs: { customerId: "customerId", host: "host", token: "token" }, usesOnChanges: true, ngImport: i0, template: "<tk-card title=\"Licenses requirement\">\r\n <ng-container ngProjectAs=\"card-content\">\r\n <div\r\n class=\"widget-body\"\r\n *ngIf=\"!loading && !error && viewModel; else widgetState\"\r\n >\r\n <div class=\"left-section\">\r\n <mat-select\r\n [(value)]=\"selectedSummaryIndex\"\r\n (selectionChange)=\"onFilterChange($event.value)\"\r\n class=\"filter-select\"\r\n >\r\n <mat-option *ngFor=\"let option of filters; index as i\" [value]=\"i\">\r\n {{ option }}\r\n </mat-option>\r\n </mat-select>\r\n\r\n <div class=\"chart-section\">\r\n <div class=\"chart-wrapper\">\r\n <apx-chart\r\n [series]=\"viewModel.chartOptions.series\"\r\n [chart]=\"viewModel.chartOptions.chart\"\r\n [labels]=\"viewModel.chartOptions.labels\"\r\n [colors]=\"viewModel.chartOptions.colors\"\r\n [legend]=\"viewModel.chartOptions.legend\"\r\n [plotOptions]=\"viewModel.chartOptions.plotOptions\"\r\n [dataLabels]=\"viewModel.chartOptions.dataLabels\"\r\n [tooltip]=\"viewModel.chartOptions.tooltip\"\r\n >\r\n </apx-chart>\r\n </div>\r\n <div class=\"legend\">\r\n <div class=\"legend-item\" *ngFor=\"let item of viewModel.legendItems\">\r\n <span\r\n class=\"legend-marker\"\r\n [style.backgroundColor]=\"item.color\"\r\n ></span>\r\n <span class=\"legend-label\">{{ item.label }}</span>\r\n <span class=\"legend-value\">{{ item.count | number }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"divider\" aria-hidden=\"true\"></div>\r\n\r\n <div class=\"table-section\">\r\n <div class=\"lic-table-header\">\r\n <span>License</span>\r\n <span>Required</span>\r\n </div>\r\n <div class=\"table-row\" *ngFor=\"let row of viewModel.rows\">\r\n <span>{{ row.label }}</span>\r\n <span>{{ row.value | number }}</span>\r\n </div>\r\n <div class=\"table-row total-row\">\r\n <span>Total</span>\r\n <span>{{ viewModel.totalRequired | number }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #widgetState>\r\n <div class=\"state-message\" *ngIf=\"loading\">\r\n Loading license requirements\u2026\r\n </div>\r\n <div class=\"state-message error\" *ngIf=\"!loading && error\">\r\n Unable to load license requirements.\r\n </div>\r\n <div class=\"state-message\" *ngIf=\"!loading && !error && !viewModel\">\r\n No license data available.\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n</tk-card>\r\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;width:100%;box-sizing:border-box}.filter-select{font-family:Inter,Inter,sans-serif;font-size:14px;min-width:140px;border:1px solid #e5e7eb;border-radius:.5rem;padding:.5rem .75rem;background-color:#fff}.filter-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select{border:1px solid #e5e7eb;border-radius:.5rem;background-color:#fff}:host ::ng-deep .filter-select.mat-mdc-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select.mat-focused{border-color:#16a693}:host ::ng-deep .filter-select .mat-mdc-select-trigger{font-size:14px;padding:.5rem .75rem}:host ::ng-deep .filter-select .mat-mdc-select-value{color:#111827}:host ::ng-deep .filter-select .mat-mdc-select-arrow-wrapper{padding-left:.5rem}.widget-body{display:flex;gap:2.5rem;align-items:flex-start}.left-section{flex:2;display:flex;flex-direction:column;gap:1rem}.chart-section{display:flex;gap:1.5rem;align-items:center}.chart-wrapper{width:220px;min-height:220px;flex-shrink:0}.chart-wrapper apx-chart{width:220px!important;height:220px!important}.legend{display:flex;flex-direction:column;gap:.75rem}.legend-item{display:flex;align-items:center;gap:.5rem;font-family:Inter,Inter,sans-serif;font-size:14px}.legend-marker{width:14px;height:14px;border-radius:50%;display:inline-flex}.legend-label{color:#4b5563}.legend-value{margin-left:auto;font-weight:600;color:#111827}.divider{width:1px;min-height:200px;align-self:stretch;background:#e5e7eb}.table-section{flex:3;display:flex;flex-direction:column;gap:.75rem;font-family:Inter,Inter,sans-serif}.lic-table-header,.table-row{display:flex;justify-content:space-between;font-size:14px}.lic-table-header{font-weight:600;color:#6b7280;padding-bottom:.5rem;border-bottom:1px solid #e5e7eb}.table-row{color:#111827}.total-row{font-weight:700;margin-top:.5rem;padding-top:.5rem;border-top:1px solid #e5e7eb}.state-message{font-family:Inter,Inter,sans-serif;font-size:14px;color:#6b7280}.state-message.error{color:#b91c1c}@media (max-width: 960px){.widget-body{flex-direction:column}.divider{display:none}.chart-section{justify-content:space-between}}:host ::ng-deep .apexcharts-legend{display:none!important}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ChartComponent, selector: "apx-chart", inputs: ["chart", "annotations", "colors", "dataLabels", "series", "stroke", "labels", "legend", "markers", "noData", "fill", "tooltip", "plotOptions", "responsive", "xaxis", "yaxis", "forecastDataPoints", "grid", "states", "title", "subtitle", "theme", "autoUpdateSeries"] }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: CardComponent, selector: "tk-card", inputs: ["title"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }] });
341
341
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LicencesRequirementComponent, decorators: [{
342
342
  type: Component,
343
- args: [{ selector: 'cc-licenses-requirement', template: "<tk-card title=\"Licenses requirement\">\n <ng-container ngProjectAs=\"card-content\">\n <div\n class=\"widget-body\"\n *ngIf=\"!loading && !error && viewModel; else widgetState\"\n >\n <div class=\"left-section\">\n <mat-select\n [(value)]=\"selectedSummaryIndex\"\n (selectionChange)=\"onFilterChange($event.value)\"\n class=\"filter-select\"\n >\n <mat-option *ngFor=\"let option of filters; index as i\" [value]=\"i\">\n {{ option }}\n </mat-option>\n </mat-select>\n\n <div class=\"chart-section\">\n <div class=\"chart-wrapper\">\n <apx-chart\n [series]=\"viewModel.chartOptions.series\"\n [chart]=\"viewModel.chartOptions.chart\"\n [labels]=\"viewModel.chartOptions.labels\"\n [colors]=\"viewModel.chartOptions.colors\"\n [legend]=\"viewModel.chartOptions.legend\"\n [plotOptions]=\"viewModel.chartOptions.plotOptions\"\n [dataLabels]=\"viewModel.chartOptions.dataLabels\"\n [tooltip]=\"viewModel.chartOptions.tooltip\"\n >\n </apx-chart>\n </div>\n <div class=\"legend\">\n <div class=\"legend-item\" *ngFor=\"let item of viewModel.legendItems\">\n <span\n class=\"legend-marker\"\n [style.backgroundColor]=\"item.color\"\n ></span>\n <span class=\"legend-label\">{{ item.label }}</span>\n <span class=\"legend-value\">{{ item.count | number }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"divider\" aria-hidden=\"true\"></div>\n\n <div class=\"table-section\">\n <div class=\"lic-table-header\">\n <span>License</span>\n <span>Required</span>\n </div>\n <div class=\"table-row\" *ngFor=\"let row of viewModel.rows\">\n <span>{{ row.label }}</span>\n <span>{{ row.value | number }}</span>\n </div>\n <div class=\"table-row total-row\">\n <span>Total</span>\n <span>{{ viewModel.totalRequired | number }}</span>\n </div>\n </div>\n </div>\n\n <ng-template #widgetState>\n <div class=\"state-message\" *ngIf=\"loading\">\n Loading license requirements\u2026\n </div>\n <div class=\"state-message error\" *ngIf=\"!loading && error\">\n Unable to load license requirements.\n </div>\n <div class=\"state-message\" *ngIf=\"!loading && !error && !viewModel\">\n No license data available.\n </div>\n </ng-template>\n </ng-container>\n</tk-card>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;width:100%;box-sizing:border-box}.filter-select{font-family:Inter,Inter,sans-serif;font-size:14px;min-width:140px;border:1px solid #e5e7eb;border-radius:.5rem;padding:.5rem .75rem;background-color:#fff}.filter-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select{border:1px solid #e5e7eb;border-radius:.5rem;background-color:#fff}:host ::ng-deep .filter-select.mat-mdc-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select.mat-focused{border-color:#16a693}:host ::ng-deep .filter-select .mat-mdc-select-trigger{font-size:14px;padding:.5rem .75rem}:host ::ng-deep .filter-select .mat-mdc-select-value{color:#111827}:host ::ng-deep .filter-select .mat-mdc-select-arrow-wrapper{padding-left:.5rem}.widget-body{display:flex;gap:2.5rem;align-items:flex-start}.left-section{flex:2;display:flex;flex-direction:column;gap:1rem}.chart-section{display:flex;gap:1.5rem;align-items:center}.chart-wrapper{width:220px;min-height:220px;flex-shrink:0}.chart-wrapper apx-chart{width:220px!important;height:220px!important}.legend{display:flex;flex-direction:column;gap:.75rem}.legend-item{display:flex;align-items:center;gap:.5rem;font-family:Inter,Inter,sans-serif;font-size:14px}.legend-marker{width:14px;height:14px;border-radius:50%;display:inline-flex}.legend-label{color:#4b5563}.legend-value{margin-left:auto;font-weight:600;color:#111827}.divider{width:1px;min-height:200px;align-self:stretch;background:#e5e7eb}.table-section{flex:3;display:flex;flex-direction:column;gap:.75rem;font-family:Inter,Inter,sans-serif}.lic-table-header,.table-row{display:flex;justify-content:space-between;font-size:14px}.lic-table-header{font-weight:600;color:#6b7280;padding-bottom:.5rem;border-bottom:1px solid #e5e7eb}.table-row{color:#111827}.total-row{font-weight:700;margin-top:.5rem;padding-top:.5rem;border-top:1px solid #e5e7eb}.state-message{font-family:Inter,Inter,sans-serif;font-size:14px;color:#6b7280}.state-message.error{color:#b91c1c}@media (max-width: 960px){.widget-body{flex-direction:column}.divider{display:none}.chart-section{justify-content:space-between}}:host ::ng-deep .apexcharts-legend{display:none!important}\n"] }]
343
+ args: [{ selector: 'cc-licenses-requirement', template: "<tk-card title=\"Licenses requirement\">\r\n <ng-container ngProjectAs=\"card-content\">\r\n <div\r\n class=\"widget-body\"\r\n *ngIf=\"!loading && !error && viewModel; else widgetState\"\r\n >\r\n <div class=\"left-section\">\r\n <mat-select\r\n [(value)]=\"selectedSummaryIndex\"\r\n (selectionChange)=\"onFilterChange($event.value)\"\r\n class=\"filter-select\"\r\n >\r\n <mat-option *ngFor=\"let option of filters; index as i\" [value]=\"i\">\r\n {{ option }}\r\n </mat-option>\r\n </mat-select>\r\n\r\n <div class=\"chart-section\">\r\n <div class=\"chart-wrapper\">\r\n <apx-chart\r\n [series]=\"viewModel.chartOptions.series\"\r\n [chart]=\"viewModel.chartOptions.chart\"\r\n [labels]=\"viewModel.chartOptions.labels\"\r\n [colors]=\"viewModel.chartOptions.colors\"\r\n [legend]=\"viewModel.chartOptions.legend\"\r\n [plotOptions]=\"viewModel.chartOptions.plotOptions\"\r\n [dataLabels]=\"viewModel.chartOptions.dataLabels\"\r\n [tooltip]=\"viewModel.chartOptions.tooltip\"\r\n >\r\n </apx-chart>\r\n </div>\r\n <div class=\"legend\">\r\n <div class=\"legend-item\" *ngFor=\"let item of viewModel.legendItems\">\r\n <span\r\n class=\"legend-marker\"\r\n [style.backgroundColor]=\"item.color\"\r\n ></span>\r\n <span class=\"legend-label\">{{ item.label }}</span>\r\n <span class=\"legend-value\">{{ item.count | number }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"divider\" aria-hidden=\"true\"></div>\r\n\r\n <div class=\"table-section\">\r\n <div class=\"lic-table-header\">\r\n <span>License</span>\r\n <span>Required</span>\r\n </div>\r\n <div class=\"table-row\" *ngFor=\"let row of viewModel.rows\">\r\n <span>{{ row.label }}</span>\r\n <span>{{ row.value | number }}</span>\r\n </div>\r\n <div class=\"table-row total-row\">\r\n <span>Total</span>\r\n <span>{{ viewModel.totalRequired | number }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #widgetState>\r\n <div class=\"state-message\" *ngIf=\"loading\">\r\n Loading license requirements\u2026\r\n </div>\r\n <div class=\"state-message error\" *ngIf=\"!loading && error\">\r\n Unable to load license requirements.\r\n </div>\r\n <div class=\"state-message\" *ngIf=\"!loading && !error && !viewModel\">\r\n No license data available.\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n</tk-card>\r\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;width:100%;box-sizing:border-box}.filter-select{font-family:Inter,Inter,sans-serif;font-size:14px;min-width:140px;border:1px solid #e5e7eb;border-radius:.5rem;padding:.5rem .75rem;background-color:#fff}.filter-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select{border:1px solid #e5e7eb;border-radius:.5rem;background-color:#fff}:host ::ng-deep .filter-select.mat-mdc-select:hover{border-color:#d1d5db}:host ::ng-deep .filter-select.mat-mdc-select.mat-focused{border-color:#16a693}:host ::ng-deep .filter-select .mat-mdc-select-trigger{font-size:14px;padding:.5rem .75rem}:host ::ng-deep .filter-select .mat-mdc-select-value{color:#111827}:host ::ng-deep .filter-select .mat-mdc-select-arrow-wrapper{padding-left:.5rem}.widget-body{display:flex;gap:2.5rem;align-items:flex-start}.left-section{flex:2;display:flex;flex-direction:column;gap:1rem}.chart-section{display:flex;gap:1.5rem;align-items:center}.chart-wrapper{width:220px;min-height:220px;flex-shrink:0}.chart-wrapper apx-chart{width:220px!important;height:220px!important}.legend{display:flex;flex-direction:column;gap:.75rem}.legend-item{display:flex;align-items:center;gap:.5rem;font-family:Inter,Inter,sans-serif;font-size:14px}.legend-marker{width:14px;height:14px;border-radius:50%;display:inline-flex}.legend-label{color:#4b5563}.legend-value{margin-left:auto;font-weight:600;color:#111827}.divider{width:1px;min-height:200px;align-self:stretch;background:#e5e7eb}.table-section{flex:3;display:flex;flex-direction:column;gap:.75rem;font-family:Inter,Inter,sans-serif}.lic-table-header,.table-row{display:flex;justify-content:space-between;font-size:14px}.lic-table-header{font-weight:600;color:#6b7280;padding-bottom:.5rem;border-bottom:1px solid #e5e7eb}.table-row{color:#111827}.total-row{font-weight:700;margin-top:.5rem;padding-top:.5rem;border-top:1px solid #e5e7eb}.state-message{font-family:Inter,Inter,sans-serif;font-size:14px;color:#6b7280}.state-message.error{color:#b91c1c}@media (max-width: 960px){.widget-body{flex-direction:column}.divider{display:none}.chart-section{justify-content:space-between}}:host ::ng-deep .apexcharts-legend{display:none!important}\n"] }]
344
344
  }], propDecorators: { customerId: [{
345
345
  type: Input
346
346
  }], host: [{