mediasfu-angular 1.0.1 → 2.0.0

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 (474) hide show
  1. package/README.md +871 -769
  2. package/dist/README.md +870 -769
  3. package/dist/fesm2022/mediasfu-angular.mjs +13241 -3372
  4. package/dist/fesm2022/mediasfu-angular.mjs.map +1 -1
  5. package/dist/lib/@types/types.d.ts +22 -1
  6. package/dist/lib/components/background-components/background-modal/background-modal.component.d.ts +36 -0
  7. package/dist/lib/components/breakout-components/breakout-rooms-modal.component.d.ts +51 -0
  8. package/dist/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.d.ts +48 -0
  9. package/dist/lib/components/co-host-components/co-host-modal/co-host-modal.component.d.ts +62 -0
  10. package/dist/lib/components/display-components/alert-component/alert.component.component.d.ts +24 -18
  11. package/dist/lib/components/display-components/audio-card/audio-card.component.d.ts +59 -0
  12. package/dist/lib/components/display-components/audio-grid/audio-grid.component.d.ts +20 -0
  13. package/dist/lib/components/display-components/card-video-display/card-video-display.component.d.ts +35 -0
  14. package/dist/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.d.ts +38 -0
  15. package/dist/lib/components/display-components/control-buttons-component-touch/control-buttons-component-touch.component.d.ts +24 -40
  16. package/dist/lib/components/display-components/control-widgets/menu-participants-widget.component.d.ts +21 -0
  17. package/dist/lib/components/display-components/control-widgets/menu-record-widget.component.d.ts +22 -0
  18. package/dist/lib/components/display-components/control-widgets/menu-widget.component.d.ts +23 -0
  19. package/dist/lib/components/display-components/control-widgets/message-widget.component.d.ts +23 -0
  20. package/dist/lib/components/display-components/control-widgets/record-timer-widget.component.d.ts +15 -0
  21. package/dist/lib/components/display-components/control-widgets/screenshare-widget.component.d.ts +27 -0
  22. package/dist/lib/components/display-components/flexible-grid/flexible-grid.component.d.ts +27 -18
  23. package/dist/lib/components/display-components/flexible-video/flexible-video.component.d.ts +30 -45
  24. package/dist/lib/components/display-components/loading-modal/loading-modal.component.d.ts +19 -17
  25. package/dist/lib/components/display-components/main-aspect-component/main-aspect-component.component.d.ts +32 -24
  26. package/dist/lib/components/display-components/main-container-component/main-container-component.component.d.ts +28 -16
  27. package/dist/lib/components/display-components/main-grid-component/main-grid-component.component.d.ts +28 -14
  28. package/dist/lib/components/display-components/main-screen-component/main-screen-component.component.d.ts +43 -22
  29. package/dist/lib/components/display-components/meeting-progress-timer/meeting-progress-timer.component.d.ts +25 -30
  30. package/dist/lib/components/display-components/mini-audio/mini-audio.component.d.ts +55 -62
  31. package/dist/lib/components/display-components/mini-card/mini-card.component.d.ts +19 -23
  32. package/dist/lib/components/display-components/mini-card-audio/mini-card-audio.component.d.ts +39 -39
  33. package/dist/lib/components/display-components/other-grid-component/other-grid-component.component.d.ts +28 -13
  34. package/dist/lib/components/display-components/pagination/pagination.component.d.ts +29 -23
  35. package/dist/lib/components/display-components/sub-aspect-component/sub-aspect-component.component.d.ts +18 -24
  36. package/dist/lib/components/display-components/video-card/video-card.component.d.ts +62 -0
  37. package/dist/lib/components/display-settings-components/display-settings-modal.component.d.ts +28 -17
  38. package/dist/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.d.ts +47 -38
  39. package/dist/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.d.ts +35 -22
  40. package/dist/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.d.ts +35 -24
  41. package/dist/lib/components/mediasfu-components/mediasfu-broadcast.component.d.ts +258 -117
  42. package/dist/lib/components/mediasfu-components/mediasfu-chat.component.d.ts +254 -117
  43. package/dist/lib/components/mediasfu-components/mediasfu-conference.component.d.ts +312 -162
  44. package/dist/lib/components/mediasfu-components/mediasfu-generic.component.d.ts +312 -162
  45. package/dist/lib/components/mediasfu-components/mediasfu-webinar.component.d.ts +310 -162
  46. package/dist/lib/components/menu-components/custom-buttons/custom-buttons.component.d.ts +49 -51
  47. package/dist/lib/components/menu-components/meeting-id-component/meeting-id-component.component.d.ts +6 -1
  48. package/dist/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.d.ts +5 -0
  49. package/dist/lib/components/menu-components/menu-modal/menu-modal.component.d.ts +27 -29
  50. package/dist/lib/components/menu-components/share-buttons-component/share-buttons-component.component.d.ts +20 -15
  51. package/dist/lib/components/message-components/message-panel/message-panel.component.d.ts +24 -0
  52. package/dist/lib/components/message-components/messages-modal/messages-modal.component.d.ts +34 -0
  53. package/dist/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.d.ts +20 -35
  54. package/dist/lib/components/misc-components/pre-join-page/pre-join-page.component.d.ts +79 -66
  55. package/dist/lib/components/misc-components/share-event-modal/share-event-modal.component.d.ts +19 -1
  56. package/dist/lib/components/misc-components/welcome-page/welcome-page.component.d.ts +15 -0
  57. package/dist/lib/components/participants-components/participant-list/participant-list.component.d.ts +19 -0
  58. package/dist/lib/components/participants-components/participant-list-item/participant-list-item.component.d.ts +19 -0
  59. package/dist/lib/components/participants-components/participant-list-others/participant-list-others.component.d.ts +17 -0
  60. package/dist/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.d.ts +17 -0
  61. package/dist/lib/components/participants-components/participants-modal/participants-modal.component.d.ts +24 -0
  62. package/dist/lib/components/polls-components/poll-modal/poll-modal.component.d.ts +27 -0
  63. package/dist/lib/components/recording-components/advanced-panel-component/advanced-panel-components.component.d.ts +15 -0
  64. package/dist/lib/components/recording-components/recording-modal/recording-modal.component.d.ts +12 -0
  65. package/dist/lib/components/recording-components/standard-panel-component/standard-panel-component.component.d.ts +5 -0
  66. package/dist/lib/components/requests-components/render-request-component/render-request-component.component.d.ts +22 -0
  67. package/dist/lib/components/requests-components/requests-modal/requests-modal.component.d.ts +17 -0
  68. package/dist/lib/components/screenboard-components/screenboard/screenboard.component.d.ts +10 -0
  69. package/dist/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.d.ts +11 -0
  70. package/dist/lib/components/waiting-components/waiting-room-modal.component.d.ts +59 -0
  71. package/dist/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.d.ts +21 -0
  72. package/dist/lib/components/whiteboard-components/whiteboard/whiteboard.component.d.ts +49 -0
  73. package/dist/lib/consumers/add-videos-grid.service.d.ts +49 -0
  74. package/dist/lib/consumers/auto-adjust.service.d.ts +26 -0
  75. package/dist/lib/consumers/calculate-rows-and-columns.service.d.ts +18 -0
  76. package/dist/lib/consumers/change-vids.service.d.ts +131 -66
  77. package/dist/lib/consumers/check-grid.service.d.ts +32 -18
  78. package/dist/lib/consumers/check-permission.service.d.ts +25 -0
  79. package/dist/lib/consumers/check-screen-share.service.d.ts +35 -0
  80. package/dist/lib/consumers/close-and-resize.service.d.ts +102 -0
  81. package/dist/lib/consumers/compare-active-names.service.d.ts +31 -0
  82. package/dist/lib/consumers/compare-screen-states.service.d.ts +35 -0
  83. package/dist/lib/consumers/connect-ips.service.d.ts +42 -0
  84. package/dist/lib/consumers/connect-local-ips.service.d.ts +81 -0
  85. package/dist/lib/consumers/connect-recv-transport.service.d.ts +33 -0
  86. package/dist/lib/consumers/connect-send-transport-audio.service.d.ts +81 -11
  87. package/dist/lib/consumers/connect-send-transport-screen.service.d.ts +96 -15
  88. package/dist/lib/consumers/connect-send-transport-video.service.d.ts +101 -11
  89. package/dist/lib/consumers/connect-send-transport.service.d.ts +59 -1
  90. package/dist/lib/consumers/consumer-resume.service.d.ts +36 -0
  91. package/dist/lib/consumers/control-media.service.d.ts +45 -0
  92. package/dist/lib/consumers/create-send-transport.service.d.ts +149 -13
  93. package/dist/lib/consumers/disconnect-send-transport-audio.service.d.ts +100 -13
  94. package/dist/lib/consumers/disconnect-send-transport-screen.service.d.ts +75 -2
  95. package/dist/lib/consumers/disconnect-send-transport-video.service.d.ts +99 -17
  96. package/dist/lib/consumers/disp-streams.service.d.ts +92 -0
  97. package/dist/lib/consumers/generate-page-content.service.d.ts +47 -0
  98. package/dist/lib/consumers/get-estimate.service.d.ts +50 -0
  99. package/dist/lib/consumers/get-piped-producers-alt.service.d.ts +38 -1
  100. package/dist/lib/consumers/get-producers-piped.service.d.ts +33 -0
  101. package/dist/lib/consumers/get-videos.service.d.ts +33 -0
  102. package/dist/lib/consumers/mix-streams.service.d.ts +22 -0
  103. package/dist/lib/consumers/on-screen-changes.service.d.ts +40 -0
  104. package/dist/lib/consumers/prepopulate-user-media.service.d.ts +99 -0
  105. package/dist/lib/consumers/process-consumer-transports-audio.service.d.ts +29 -0
  106. package/dist/lib/consumers/process-consumer-transports.service.d.ts +37 -0
  107. package/dist/lib/consumers/re-port.service.d.ts +48 -0
  108. package/dist/lib/consumers/re-update-inter.service.d.ts +82 -0
  109. package/dist/lib/consumers/readjust.service.d.ts +50 -0
  110. package/dist/lib/consumers/receive-all-piped-transports.service.d.ts +36 -1
  111. package/dist/lib/consumers/receive-room-messages.service.d.ts +27 -0
  112. package/dist/lib/consumers/reorder-streams.service.d.ts +58 -0
  113. package/dist/lib/consumers/request-screen-share.service.d.ts +34 -0
  114. package/dist/lib/consumers/resume-pause-audio-streams.service.d.ts +51 -0
  115. package/dist/lib/consumers/resume-pause-streams.service.d.ts +33 -0
  116. package/dist/lib/consumers/resume-send-transport-audio.service.d.ts +76 -7
  117. package/dist/lib/consumers/signal-new-consumer-transport.service.d.ts +37 -37
  118. package/dist/lib/consumers/socket-receive-methods/join-consume-room.service.d.ts +33 -0
  119. package/dist/lib/consumers/socket-receive-methods/new-pipe-producer.service.d.ts +39 -0
  120. package/dist/lib/consumers/socket-receive-methods/producer-closed.service.d.ts +27 -0
  121. package/dist/lib/consumers/start-share-screen.service.d.ts +40 -0
  122. package/dist/lib/consumers/stop-share-screen.service.d.ts +55 -0
  123. package/dist/lib/consumers/stream-success-audio-switch.service.d.ts +148 -11
  124. package/dist/lib/consumers/stream-success-audio.service.d.ts +61 -0
  125. package/dist/lib/consumers/stream-success-screen.service.d.ts +50 -0
  126. package/dist/lib/consumers/stream-success-video.service.d.ts +58 -0
  127. package/dist/lib/consumers/switch-user-audio.service.d.ts +33 -0
  128. package/dist/lib/consumers/switch-user-video-alt.service.d.ts +32 -0
  129. package/dist/lib/consumers/switch-user-video.service.d.ts +47 -0
  130. package/dist/lib/consumers/trigger.service.d.ts +41 -0
  131. package/dist/lib/consumers/update-mini-cards-grid.service.d.ts +54 -0
  132. package/dist/lib/consumers/update-participant-audio-decibels.service.d.ts +45 -0
  133. package/dist/lib/methods/background-methods/launch-background.service.d.ts +25 -0
  134. package/dist/lib/methods/breakout-room-methods/breakout-room-updated.service.d.ts +71 -0
  135. package/dist/lib/methods/breakout-room-methods/launch-breakout-rooms.service.d.ts +24 -0
  136. package/dist/lib/methods/co-host-methods/launch-co-host.service.d.ts +24 -0
  137. package/dist/lib/methods/co-host-methods/modify-co-host-settings.service.d.ts +44 -0
  138. package/dist/lib/methods/display-settings-methods/launch-display-settings.service.d.ts +22 -0
  139. package/dist/lib/methods/display-settings-methods/modify-display-settings.service.d.ts +75 -0
  140. package/dist/lib/methods/exit-methods/confirm-exit.service.d.ts +29 -1
  141. package/dist/lib/methods/exit-methods/launch-confirm-exit.service.d.ts +20 -0
  142. package/dist/lib/methods/media-settings-methods/launch-media-settings.service.d.ts +35 -0
  143. package/dist/lib/methods/menu-methods/launch-menu-modal.service.d.ts +22 -0
  144. package/dist/lib/methods/message-methods/launch-messages.service.d.ts +22 -0
  145. package/dist/lib/methods/message-methods/send-message.service.d.ts +49 -0
  146. package/dist/lib/methods/participants-methods/launch-participants.service.d.ts +24 -0
  147. package/dist/lib/methods/participants-methods/message-participants.service.d.ts +46 -0
  148. package/dist/lib/methods/participants-methods/mute-participants.service.d.ts +39 -0
  149. package/dist/lib/methods/participants-methods/remove-participants.service.d.ts +45 -0
  150. package/dist/lib/methods/polls-methods/handle-create-poll.service.d.ts +38 -0
  151. package/dist/lib/methods/polls-methods/handle-end-poll.service.d.ts +32 -0
  152. package/dist/lib/methods/polls-methods/handle-vote-poll.service.d.ts +34 -0
  153. package/dist/lib/methods/polls-methods/launch-poll.service.d.ts +20 -0
  154. package/dist/lib/methods/polls-methods/poll-updated.service.d.ts +31 -0
  155. package/dist/lib/methods/recording-methods/check-pause-state.service.d.ts +24 -0
  156. package/dist/lib/methods/recording-methods/check-resume-state.service.d.ts +22 -0
  157. package/dist/lib/methods/recording-methods/confirm-recording.service.d.ts +63 -0
  158. package/dist/lib/methods/recording-methods/launch-recording.service.d.ts +43 -0
  159. package/dist/lib/methods/recording-methods/record-pause-timer.service.d.ts +27 -0
  160. package/dist/lib/methods/recording-methods/record-resume-timer.service.d.ts +44 -0
  161. package/dist/lib/methods/recording-methods/record-start-timer.service.d.ts +45 -0
  162. package/dist/lib/methods/recording-methods/record-update-timer.service.d.ts +32 -0
  163. package/dist/lib/methods/recording-methods/start-recording.service.d.ts +53 -0
  164. package/dist/lib/methods/recording-methods/stop-recording.service.d.ts +42 -1
  165. package/dist/lib/methods/recording-methods/update-recording.service.d.ts +51 -0
  166. package/dist/lib/methods/requests-methods/launch-requests.service.d.ts +25 -0
  167. package/dist/lib/methods/requests-methods/respond-to-requests.service.d.ts +39 -0
  168. package/dist/lib/methods/settings-methods/launch-settings.service.d.ts +25 -0
  169. package/dist/lib/methods/settings-methods/modify-settings.service.d.ts +42 -0
  170. package/dist/lib/methods/stream-methods/click-audio.service.d.ts +100 -0
  171. package/dist/lib/methods/stream-methods/click-chat.service.d.ts +31 -0
  172. package/dist/lib/methods/stream-methods/click-screen-share.service.d.ts +68 -0
  173. package/dist/lib/methods/stream-methods/click-video.service.d.ts +88 -0
  174. package/dist/lib/methods/stream-methods/switch-audio.service.d.ts +47 -0
  175. package/dist/lib/methods/stream-methods/switch-video-alt.service.d.ts +50 -0
  176. package/dist/lib/methods/stream-methods/switch-video.service.d.ts +56 -0
  177. package/dist/lib/methods/utils/check-limits-and-make-request.service.d.ts +23 -0
  178. package/dist/lib/methods/utils/create-response-join-room.util.d.ts +33 -0
  179. package/dist/lib/methods/utils/create-room-on-media-sfu.service.d.ts +25 -0
  180. package/dist/lib/methods/utils/format-number.service.d.ts +26 -14
  181. package/dist/lib/methods/utils/generate-random-messages.service.d.ts +33 -0
  182. package/dist/lib/methods/utils/generate-random-participants.service.d.ts +27 -0
  183. package/dist/lib/methods/utils/generate-random-polls.service.d.ts +26 -0
  184. package/dist/lib/methods/utils/generate-random-request-list.service.d.ts +36 -0
  185. package/dist/lib/methods/utils/generate-random-waiting-room-list.service.d.ts +21 -0
  186. package/dist/lib/methods/utils/get-modal-position.util.d.ts +13 -3
  187. package/dist/lib/methods/utils/get-overlay-position.util.d.ts +13 -3
  188. package/dist/lib/methods/utils/initial-values.util.d.ts +6 -0
  189. package/dist/lib/methods/utils/join-room-on-media-sfu.service.d.ts +52 -0
  190. package/dist/lib/methods/utils/meeting-timer/start-meeting-progress-timer.service.d.ts +37 -0
  191. package/dist/lib/methods/utils/mini-audio-player/mini-audio-player.component.d.ts +55 -0
  192. package/dist/lib/methods/utils/producer/a-params.service.d.ts +37 -0
  193. package/dist/lib/methods/utils/producer/h-params.service.d.ts +50 -0
  194. package/dist/lib/methods/utils/producer/screen-params.service.d.ts +37 -0
  195. package/dist/lib/methods/utils/producer/v-params.service.d.ts +50 -0
  196. package/dist/lib/methods/utils/producer/video-capture-constraints.service.d.ts +46 -0
  197. package/dist/lib/methods/utils/sleep.util.d.ts +9 -3
  198. package/dist/lib/methods/utils/sound-player.service.d.ts +21 -0
  199. package/dist/lib/methods/utils/validate-alphanumeric.service.d.ts +16 -0
  200. package/dist/lib/methods/waiting-methods/launch-waiting.service.d.ts +18 -0
  201. package/dist/lib/methods/waiting-methods/respond-to-waiting.service.d.ts +29 -0
  202. package/dist/lib/methods/whiteboard-methods/capture-canvas-stream.service.d.ts +46 -0
  203. package/dist/lib/methods/whiteboard-methods/launch-configure-whiteboard.service.d.ts +20 -0
  204. package/dist/lib/producer-client/producer-client-emits/create-device-client.service.d.ts +23 -0
  205. package/dist/lib/producer-client/producer-client-emits/join-room-client.service.d.ts +31 -0
  206. package/dist/lib/producer-client/producer-client-emits/update-room-parameters-client.service.d.ts +44 -0
  207. package/dist/lib/producers/producer-emits/join-con-room.service.d.ts +38 -0
  208. package/dist/lib/producers/producer-emits/join-local-room.service.d.ts +125 -0
  209. package/dist/lib/producers/producer-emits/join-room.service.d.ts +38 -0
  210. package/dist/lib/producers/socket-receive-methods/all-members-rest.service.d.ts +80 -2
  211. package/dist/lib/producers/socket-receive-methods/all-members.service.d.ts +78 -2
  212. package/dist/lib/producers/socket-receive-methods/all-waiting-room-members.service.d.ts +27 -0
  213. package/dist/lib/producers/socket-receive-methods/ban-participant.service.d.ts +36 -0
  214. package/dist/lib/producers/socket-receive-methods/control-media-host.service.d.ts +37 -0
  215. package/dist/lib/producers/socket-receive-methods/disconnect-user-self.service.d.ts +29 -1
  216. package/dist/lib/producers/socket-receive-methods/disconnect.service.d.ts +26 -0
  217. package/dist/lib/producers/socket-receive-methods/get-domains.service.d.ts +24 -9
  218. package/dist/lib/producers/socket-receive-methods/host-request-response.service.d.ts +31 -48
  219. package/dist/lib/producers/socket-receive-methods/meeting-ended.service.d.ts +29 -0
  220. package/dist/lib/producers/socket-receive-methods/meeting-still-there.service.d.ts +23 -0
  221. package/dist/lib/producers/socket-receive-methods/meeting-time-remaining.service.d.ts +27 -0
  222. package/dist/lib/producers/socket-receive-methods/participant-requested.service.d.ts +31 -0
  223. package/dist/lib/producers/socket-receive-methods/person-joined.service.d.ts +25 -0
  224. package/dist/lib/producers/socket-receive-methods/producer-media-closed.service.d.ts +61 -0
  225. package/dist/lib/producers/socket-receive-methods/producer-media-paused.service.d.ts +62 -0
  226. package/dist/lib/producers/socket-receive-methods/producer-media-resumed.service.d.ts +45 -0
  227. package/dist/lib/producers/socket-receive-methods/re-initiate-recording.service.d.ts +29 -0
  228. package/dist/lib/producers/socket-receive-methods/receive-message.service.d.ts +38 -0
  229. package/dist/lib/producers/socket-receive-methods/recording-notice.service.d.ts +38 -0
  230. package/dist/lib/producers/socket-receive-methods/room-record-params.service.d.ts +62 -0
  231. package/dist/lib/producers/socket-receive-methods/screen-producer-id.service.d.ts +41 -0
  232. package/dist/lib/producers/socket-receive-methods/start-records.service.d.ts +25 -0
  233. package/dist/lib/producers/socket-receive-methods/stopped-recording.service.d.ts +25 -0
  234. package/dist/lib/producers/socket-receive-methods/time-left-recording.service.d.ts +21 -0
  235. package/dist/lib/producers/socket-receive-methods/update-consuming-domains.service.d.ts +42 -0
  236. package/dist/lib/producers/socket-receive-methods/update-media-settings.service.d.ts +30 -0
  237. package/dist/lib/producers/socket-receive-methods/updated-co-host.service.d.ts +40 -0
  238. package/dist/lib/producers/socket-receive-methods/user-waiting.service.d.ts +14 -40
  239. package/dist/lib/sockets/socket-manager.service.d.ts +130 -0
  240. package/dist/public-api.d.ts +11 -1
  241. package/package.json +17 -20
  242. package/dist/esm2022/lib/@types/types.mjs +0 -2
  243. package/dist/esm2022/lib/components/background-components/background-modal/background-modal.component.mjs +0 -763
  244. package/dist/esm2022/lib/components/breakout-components/breakout-rooms-modal.component.mjs +0 -316
  245. package/dist/esm2022/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.mjs +0 -95
  246. package/dist/esm2022/lib/components/breakout-components/room-list/room-list.component.mjs +0 -40
  247. package/dist/esm2022/lib/components/co-host-components/co-host-modal/co-host-modal.component.mjs +0 -246
  248. package/dist/esm2022/lib/components/display-components/alert-component/alert.component.component.mjs +0 -73
  249. package/dist/esm2022/lib/components/display-components/audio-card/audio-card.component.mjs +0 -297
  250. package/dist/esm2022/lib/components/display-components/audio-grid/audio-grid.component.mjs +0 -60
  251. package/dist/esm2022/lib/components/display-components/card-video-display/card-video-display.component.mjs +0 -94
  252. package/dist/esm2022/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.mjs +0 -100
  253. package/dist/esm2022/lib/components/display-components/control-buttons-component/control-buttons-component.component.mjs +0 -231
  254. package/dist/esm2022/lib/components/display-components/control-buttons-component-touch/control-buttons-component-touch.component.mjs +0 -298
  255. package/dist/esm2022/lib/components/display-components/control-widgets/menu-participants-widget.component.mjs +0 -61
  256. package/dist/esm2022/lib/components/display-components/control-widgets/menu-record-widget.component.mjs +0 -43
  257. package/dist/esm2022/lib/components/display-components/control-widgets/menu-widget.component.mjs +0 -114
  258. package/dist/esm2022/lib/components/display-components/control-widgets/message-widget.component.mjs +0 -114
  259. package/dist/esm2022/lib/components/display-components/control-widgets/record-timer-widget.component.mjs +0 -36
  260. package/dist/esm2022/lib/components/display-components/control-widgets/screenshare-widget.component.mjs +0 -74
  261. package/dist/esm2022/lib/components/display-components/flexible-grid/flexible-grid.component.mjs +0 -142
  262. package/dist/esm2022/lib/components/display-components/flexible-video/flexible-video.component.mjs +0 -265
  263. package/dist/esm2022/lib/components/display-components/loading-modal/loading-modal.component.mjs +0 -100
  264. package/dist/esm2022/lib/components/display-components/main-aspect-component/main-aspect-component.component.mjs +0 -132
  265. package/dist/esm2022/lib/components/display-components/main-container-component/main-container-component.component.mjs +0 -119
  266. package/dist/esm2022/lib/components/display-components/main-grid-component/main-grid-component.component.mjs +0 -106
  267. package/dist/esm2022/lib/components/display-components/main-screen-component/main-screen-component.component.mjs +0 -180
  268. package/dist/esm2022/lib/components/display-components/meeting-progress-timer/meeting-progress-timer.component.mjs +0 -120
  269. package/dist/esm2022/lib/components/display-components/mini-audio/mini-audio.component.mjs +0 -326
  270. package/dist/esm2022/lib/components/display-components/mini-card/mini-card.component.mjs +0 -165
  271. package/dist/esm2022/lib/components/display-components/mini-card-audio/mini-card-audio.component.mjs +0 -230
  272. package/dist/esm2022/lib/components/display-components/other-grid-component/other-grid-component.component.mjs +0 -111
  273. package/dist/esm2022/lib/components/display-components/pagination/pagination.component.mjs +0 -328
  274. package/dist/esm2022/lib/components/display-components/sub-aspect-component/sub-aspect-component.component.mjs +0 -118
  275. package/dist/esm2022/lib/components/display-components/video-card/video-card.component.mjs +0 -330
  276. package/dist/esm2022/lib/components/display-settings-components/display-settings-modal.component.mjs +0 -95
  277. package/dist/esm2022/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.mjs +0 -190
  278. package/dist/esm2022/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.mjs +0 -119
  279. package/dist/esm2022/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.mjs +0 -209
  280. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-broadcast.component.mjs +0 -4189
  281. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-chat.component.mjs +0 -3705
  282. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-conference.component.mjs +0 -5024
  283. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-generic.component.mjs +0 -5333
  284. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-webinar.component.mjs +0 -5023
  285. package/dist/esm2022/lib/components/menu-components/custom-buttons/custom-buttons.component.mjs +0 -85
  286. package/dist/esm2022/lib/components/menu-components/meeting-id-component/meeting-id-component.component.mjs +0 -22
  287. package/dist/esm2022/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.mjs +0 -22
  288. package/dist/esm2022/lib/components/menu-components/menu-modal/menu-modal.component.mjs +0 -132
  289. package/dist/esm2022/lib/components/menu-components/share-buttons-component/share-buttons-component.component.mjs +0 -104
  290. package/dist/esm2022/lib/components/message-components/message-panel/message-panel.component.mjs +0 -204
  291. package/dist/esm2022/lib/components/message-components/messages-modal/messages-modal.component.mjs +0 -243
  292. package/dist/esm2022/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.mjs +0 -147
  293. package/dist/esm2022/lib/components/misc-components/pre-join-page/pre-join-page.component.mjs +0 -335
  294. package/dist/esm2022/lib/components/misc-components/share-event-modal/share-event-modal.component.mjs +0 -113
  295. package/dist/esm2022/lib/components/misc-components/welcome-page/welcome-page.component.mjs +0 -226
  296. package/dist/esm2022/lib/components/participants-components/participant-list/participant-list.component.mjs +0 -63
  297. package/dist/esm2022/lib/components/participants-components/participant-list-item/participant-list-item.component.mjs +0 -120
  298. package/dist/esm2022/lib/components/participants-components/participant-list-others/participant-list-others.component.mjs +0 -23
  299. package/dist/esm2022/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.mjs +0 -43
  300. package/dist/esm2022/lib/components/participants-components/participants-modal/participants-modal.component.mjs +0 -100
  301. package/dist/esm2022/lib/components/polls-components/poll-modal/poll-modal.component.mjs +0 -174
  302. package/dist/esm2022/lib/components/recording-components/advanced-panel-component/advanced-panel-components.component.mjs +0 -77
  303. package/dist/esm2022/lib/components/recording-components/recording-modal/recording-modal.component.mjs +0 -121
  304. package/dist/esm2022/lib/components/recording-components/standard-panel-component/standard-panel-component.component.mjs +0 -85
  305. package/dist/esm2022/lib/components/requests-components/render-request-component/render-request-component.component.mjs +0 -59
  306. package/dist/esm2022/lib/components/requests-components/requests-modal/requests-modal.component.mjs +0 -130
  307. package/dist/esm2022/lib/components/screenboard-components/screenboard/screenboard.component.mjs +0 -617
  308. package/dist/esm2022/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.mjs +0 -380
  309. package/dist/esm2022/lib/components/waiting-components/waiting-room-modal.component.mjs +0 -142
  310. package/dist/esm2022/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.mjs +0 -265
  311. package/dist/esm2022/lib/components/whiteboard-components/whiteboard/whiteboard.component.mjs +0 -1784
  312. package/dist/esm2022/lib/consumers/add-videos-grid.service.mjs +0 -296
  313. package/dist/esm2022/lib/consumers/auto-adjust.service.mjs +0 -83
  314. package/dist/esm2022/lib/consumers/calculate-rows-and-columns.service.mjs +0 -42
  315. package/dist/esm2022/lib/consumers/change-vids.service.mjs +0 -486
  316. package/dist/esm2022/lib/consumers/check-grid.service.mjs +0 -79
  317. package/dist/esm2022/lib/consumers/check-permission.service.mjs +0 -80
  318. package/dist/esm2022/lib/consumers/check-screen-share.service.mjs +0 -71
  319. package/dist/esm2022/lib/consumers/close-and-resize.service.mjs +0 -229
  320. package/dist/esm2022/lib/consumers/compare-active-names.service.mjs +0 -75
  321. package/dist/esm2022/lib/consumers/compare-screen-states.service.mjs +0 -63
  322. package/dist/esm2022/lib/consumers/connect-ips.service.mjs +0 -112
  323. package/dist/esm2022/lib/consumers/connect-recv-transport.service.mjs +0 -113
  324. package/dist/esm2022/lib/consumers/connect-send-transport-audio.service.mjs +0 -46
  325. package/dist/esm2022/lib/consumers/connect-send-transport-screen.service.mjs +0 -62
  326. package/dist/esm2022/lib/consumers/connect-send-transport-video.service.mjs +0 -55
  327. package/dist/esm2022/lib/consumers/connect-send-transport.service.mjs +0 -86
  328. package/dist/esm2022/lib/consumers/consumer-resume.service.mjs +0 -332
  329. package/dist/esm2022/lib/consumers/control-media.service.mjs +0 -68
  330. package/dist/esm2022/lib/consumers/create-send-transport.service.mjs +0 -126
  331. package/dist/esm2022/lib/consumers/disconnect-send-transport-audio.service.mjs +0 -58
  332. package/dist/esm2022/lib/consumers/disconnect-send-transport-screen.service.mjs +0 -45
  333. package/dist/esm2022/lib/consumers/disconnect-send-transport-video.service.mjs +0 -56
  334. package/dist/esm2022/lib/consumers/disp-streams.service.mjs +0 -421
  335. package/dist/esm2022/lib/consumers/generate-page-content.service.mjs +0 -59
  336. package/dist/esm2022/lib/consumers/get-estimate.service.mjs +0 -70
  337. package/dist/esm2022/lib/consumers/get-piped-producers-alt.service.mjs +0 -49
  338. package/dist/esm2022/lib/consumers/get-producers-piped.service.mjs +0 -46
  339. package/dist/esm2022/lib/consumers/get-videos.service.mjs +0 -58
  340. package/dist/esm2022/lib/consumers/mix-streams.service.mjs +0 -73
  341. package/dist/esm2022/lib/consumers/on-screen-changes.service.mjs +0 -63
  342. package/dist/esm2022/lib/consumers/prepopulate-user-media.service.mjs +0 -442
  343. package/dist/esm2022/lib/consumers/process-consumer-transports-audio.service.mjs +0 -72
  344. package/dist/esm2022/lib/consumers/process-consumer-transports.service.mjs +0 -91
  345. package/dist/esm2022/lib/consumers/re-port.service.mjs +0 -66
  346. package/dist/esm2022/lib/consumers/re-update-inter.service.mjs +0 -157
  347. package/dist/esm2022/lib/consumers/readjust.service.mjs +0 -123
  348. package/dist/esm2022/lib/consumers/receive-all-piped-transports.service.mjs +0 -56
  349. package/dist/esm2022/lib/consumers/receive-room-messages.service.mjs +0 -42
  350. package/dist/esm2022/lib/consumers/reorder-streams.service.mjs +0 -181
  351. package/dist/esm2022/lib/consumers/request-screen-share.service.mjs +0 -67
  352. package/dist/esm2022/lib/consumers/resume-pause-audio-streams.service.mjs +0 -99
  353. package/dist/esm2022/lib/consumers/resume-pause-streams.service.mjs +0 -70
  354. package/dist/esm2022/lib/consumers/resume-send-transport-audio.service.mjs +0 -55
  355. package/dist/esm2022/lib/consumers/signal-new-consumer-transport.service.mjs +0 -136
  356. package/dist/esm2022/lib/consumers/socket-receive-methods/join-consume-room.service.mjs +0 -63
  357. package/dist/esm2022/lib/consumers/socket-receive-methods/new-pipe-producer.service.mjs +0 -61
  358. package/dist/esm2022/lib/consumers/socket-receive-methods/producer-closed.service.mjs +0 -51
  359. package/dist/esm2022/lib/consumers/start-share-screen.service.mjs +0 -80
  360. package/dist/esm2022/lib/consumers/stop-share-screen.service.mjs +0 -120
  361. package/dist/esm2022/lib/consumers/stream-success-audio-switch.service.mjs +0 -132
  362. package/dist/esm2022/lib/consumers/stream-success-audio.service.mjs +0 -149
  363. package/dist/esm2022/lib/consumers/stream-success-screen.service.mjs +0 -143
  364. package/dist/esm2022/lib/consumers/stream-success-video.service.mjs +0 -202
  365. package/dist/esm2022/lib/consumers/switch-user-audio.service.mjs +0 -87
  366. package/dist/esm2022/lib/consumers/switch-user-video-alt.service.mjs +0 -228
  367. package/dist/esm2022/lib/consumers/switch-user-video.service.mjs +0 -125
  368. package/dist/esm2022/lib/consumers/trigger.service.mjs +0 -172
  369. package/dist/esm2022/lib/consumers/update-mini-cards-grid.service.mjs +0 -81
  370. package/dist/esm2022/lib/consumers/update-participant-audio-decibels.service.mjs +0 -39
  371. package/dist/esm2022/lib/methods/background-methods/launch-background.service.mjs +0 -23
  372. package/dist/esm2022/lib/methods/breakout-room-methods/breakout-room-updated.service.mjs +0 -112
  373. package/dist/esm2022/lib/methods/breakout-room-methods/launch-breakout-rooms.service.mjs +0 -22
  374. package/dist/esm2022/lib/methods/co-host-methods/launch-co-host.service.mjs +0 -22
  375. package/dist/esm2022/lib/methods/co-host-methods/modify-co-host-settings.service.mjs +0 -60
  376. package/dist/esm2022/lib/methods/display-settings-methods/launch-display-settings.service.mjs +0 -24
  377. package/dist/esm2022/lib/methods/display-settings-methods/modify-display-settings.service.mjs +0 -119
  378. package/dist/esm2022/lib/methods/exit-methods/confirm-exit.service.mjs +0 -28
  379. package/dist/esm2022/lib/methods/exit-methods/launch-confirm-exit.service.mjs +0 -22
  380. package/dist/esm2022/lib/methods/media-settings-methods/launch-media-settings.service.mjs +0 -50
  381. package/dist/esm2022/lib/methods/menu-methods/launch-menu-modal.service.mjs +0 -22
  382. package/dist/esm2022/lib/methods/message-methods/launch-messages.service.mjs +0 -23
  383. package/dist/esm2022/lib/methods/message-methods/send-message.service.mjs +0 -94
  384. package/dist/esm2022/lib/methods/participants-methods/launch-participants.service.mjs +0 -23
  385. package/dist/esm2022/lib/methods/participants-methods/message-participants.service.mjs +0 -52
  386. package/dist/esm2022/lib/methods/participants-methods/mute-participants.service.mjs +0 -57
  387. package/dist/esm2022/lib/methods/participants-methods/remove-participants.service.mjs +0 -62
  388. package/dist/esm2022/lib/methods/polls-methods/handle-create-poll.service.mjs +0 -37
  389. package/dist/esm2022/lib/methods/polls-methods/handle-end-poll.service.mjs +0 -40
  390. package/dist/esm2022/lib/methods/polls-methods/handle-vote-poll.service.mjs +0 -49
  391. package/dist/esm2022/lib/methods/polls-methods/launch-poll.service.mjs +0 -23
  392. package/dist/esm2022/lib/methods/polls-methods/poll-updated.service.mjs +0 -64
  393. package/dist/esm2022/lib/methods/recording-methods/check-pause-state.service.mjs +0 -45
  394. package/dist/esm2022/lib/methods/recording-methods/check-resume-state.service.mjs +0 -34
  395. package/dist/esm2022/lib/methods/recording-methods/confirm-recording.service.mjs +0 -215
  396. package/dist/esm2022/lib/methods/recording-methods/launch-recording.service.mjs +0 -82
  397. package/dist/esm2022/lib/methods/recording-methods/record-pause-timer.service.mjs +0 -40
  398. package/dist/esm2022/lib/methods/recording-methods/record-resume-timer.service.mjs +0 -86
  399. package/dist/esm2022/lib/methods/recording-methods/record-start-timer.service.mjs +0 -89
  400. package/dist/esm2022/lib/methods/recording-methods/record-update-timer.service.mjs +0 -48
  401. package/dist/esm2022/lib/methods/recording-methods/start-recording.service.mjs +0 -147
  402. package/dist/esm2022/lib/methods/recording-methods/stop-recording.service.mjs +0 -74
  403. package/dist/esm2022/lib/methods/recording-methods/update-recording.service.mjs +0 -224
  404. package/dist/esm2022/lib/methods/requests-methods/launch-requests.service.mjs +0 -26
  405. package/dist/esm2022/lib/methods/requests-methods/respond-to-requests.service.mjs +0 -45
  406. package/dist/esm2022/lib/methods/settings-methods/launch-settings.service.mjs +0 -26
  407. package/dist/esm2022/lib/methods/settings-methods/modify-settings.service.mjs +0 -67
  408. package/dist/esm2022/lib/methods/stream-methods/click-audio.service.mjs +0 -178
  409. package/dist/esm2022/lib/methods/stream-methods/click-chat.service.mjs +0 -44
  410. package/dist/esm2022/lib/methods/stream-methods/click-screen-share.service.mjs +0 -110
  411. package/dist/esm2022/lib/methods/stream-methods/click-video.service.mjs +0 -183
  412. package/dist/esm2022/lib/methods/stream-methods/switch-audio.service.mjs +0 -33
  413. package/dist/esm2022/lib/methods/stream-methods/switch-video-alt.service.mjs +0 -66
  414. package/dist/esm2022/lib/methods/stream-methods/switch-video.service.mjs +0 -76
  415. package/dist/esm2022/lib/methods/utils/format-number.service.mjs +0 -45
  416. package/dist/esm2022/lib/methods/utils/generate-random-messages.service.mjs +0 -87
  417. package/dist/esm2022/lib/methods/utils/generate-random-participants.service.mjs +0 -99
  418. package/dist/esm2022/lib/methods/utils/generate-random-polls.service.mjs +0 -52
  419. package/dist/esm2022/lib/methods/utils/generate-random-request-list.service.mjs +0 -54
  420. package/dist/esm2022/lib/methods/utils/generate-random-waiting-room-list.service.mjs +0 -38
  421. package/dist/esm2022/lib/methods/utils/get-modal-position.util.mjs +0 -22
  422. package/dist/esm2022/lib/methods/utils/get-overlay-position.util.mjs +0 -21
  423. package/dist/esm2022/lib/methods/utils/initial-values.util.mjs +0 -379
  424. package/dist/esm2022/lib/methods/utils/meeting-timer/start-meeting-progress-timer.service.mjs +0 -59
  425. package/dist/esm2022/lib/methods/utils/mini-audio-player/mini-audio-player.component.mjs +0 -260
  426. package/dist/esm2022/lib/methods/utils/producer/a-params.service.mjs +0 -21
  427. package/dist/esm2022/lib/methods/utils/producer/h-params.service.mjs +0 -37
  428. package/dist/esm2022/lib/methods/utils/producer/screen-params.service.mjs +0 -24
  429. package/dist/esm2022/lib/methods/utils/producer/v-params.service.mjs +0 -37
  430. package/dist/esm2022/lib/methods/utils/producer/video-capture-constraints.service.mjs +0 -38
  431. package/dist/esm2022/lib/methods/utils/sleep.util.mjs +0 -11
  432. package/dist/esm2022/lib/methods/utils/sound-player.service.mjs +0 -42
  433. package/dist/esm2022/lib/methods/utils/validate-alphanumeric.service.mjs +0 -33
  434. package/dist/esm2022/lib/methods/waiting-methods/launch-waiting.service.mjs +0 -23
  435. package/dist/esm2022/lib/methods/waiting-methods/respond-to-waiting.service.mjs +0 -40
  436. package/dist/esm2022/lib/methods/whiteboard-methods/capture-canvas-stream.service.mjs +0 -69
  437. package/dist/esm2022/lib/methods/whiteboard-methods/launch-configure-whiteboard.service.mjs +0 -24
  438. package/dist/esm2022/lib/producer-client/producer-client-emits/create-device-client.service.mjs +0 -51
  439. package/dist/esm2022/lib/producer-client/producer-client-emits/join-room-client.service.mjs +0 -65
  440. package/dist/esm2022/lib/producer-client/producer-client-emits/update-room-parameters-client.service.mjs +0 -232
  441. package/dist/esm2022/lib/producers/producer-emits/join-con-room.service.mjs +0 -114
  442. package/dist/esm2022/lib/producers/producer-emits/join-room.service.mjs +0 -114
  443. package/dist/esm2022/lib/producers/socket-receive-methods/all-members-rest.service.mjs +0 -155
  444. package/dist/esm2022/lib/producers/socket-receive-methods/all-members.service.mjs +0 -147
  445. package/dist/esm2022/lib/producers/socket-receive-methods/all-waiting-room-members.service.mjs +0 -30
  446. package/dist/esm2022/lib/producers/socket-receive-methods/ban-participant.service.mjs +0 -40
  447. package/dist/esm2022/lib/producers/socket-receive-methods/control-media-host.service.mjs +0 -146
  448. package/dist/esm2022/lib/producers/socket-receive-methods/disconnect-user-self.service.mjs +0 -26
  449. package/dist/esm2022/lib/producers/socket-receive-methods/disconnect.service.mjs +0 -38
  450. package/dist/esm2022/lib/producers/socket-receive-methods/get-domains.service.mjs +0 -63
  451. package/dist/esm2022/lib/producers/socket-receive-methods/host-request-response.service.mjs +0 -167
  452. package/dist/esm2022/lib/producers/socket-receive-methods/meeting-ended.service.mjs +0 -44
  453. package/dist/esm2022/lib/producers/socket-receive-methods/meeting-still-there.service.mjs +0 -24
  454. package/dist/esm2022/lib/producers/socket-receive-methods/meeting-time-remaining.service.mjs +0 -36
  455. package/dist/esm2022/lib/producers/socket-receive-methods/participant-requested.service.mjs +0 -32
  456. package/dist/esm2022/lib/producers/socket-receive-methods/person-joined.service.mjs +0 -29
  457. package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-closed.service.mjs +0 -68
  458. package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-paused.service.mjs +0 -90
  459. package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-resumed.service.mjs +0 -54
  460. package/dist/esm2022/lib/producers/socket-receive-methods/re-initiate-recording.service.mjs +0 -38
  461. package/dist/esm2022/lib/producers/socket-receive-methods/receive-message.service.mjs +0 -96
  462. package/dist/esm2022/lib/producers/socket-receive-methods/recording-notice.service.mjs +0 -195
  463. package/dist/esm2022/lib/producers/socket-receive-methods/room-record-params.service.mjs +0 -59
  464. package/dist/esm2022/lib/producers/socket-receive-methods/screen-producer-id.service.mjs +0 -45
  465. package/dist/esm2022/lib/producers/socket-receive-methods/start-records.service.mjs +0 -35
  466. package/dist/esm2022/lib/producers/socket-receive-methods/stopped-recording.service.mjs +0 -37
  467. package/dist/esm2022/lib/producers/socket-receive-methods/time-left-recording.service.mjs +0 -36
  468. package/dist/esm2022/lib/producers/socket-receive-methods/update-consuming-domains.service.mjs +0 -63
  469. package/dist/esm2022/lib/producers/socket-receive-methods/update-media-settings.service.mjs +0 -36
  470. package/dist/esm2022/lib/producers/socket-receive-methods/updated-co-host.service.mjs +0 -56
  471. package/dist/esm2022/lib/producers/socket-receive-methods/user-waiting.service.mjs +0 -78
  472. package/dist/esm2022/lib/sockets/socket-manager.service.mjs +0 -73
  473. package/dist/esm2022/mediasfu-angular.mjs +0 -5
  474. package/dist/esm2022/public-api.mjs +0 -187
@@ -1,142 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-empty-function */
2
- import { Component, Input } from '@angular/core';
3
- import { faTimes, faCheck } from '@fortawesome/free-solid-svg-icons';
4
- import { CommonModule } from '@angular/common';
5
- import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
6
- import { FormsModule } from '@angular/forms';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../../methods/waiting-methods/respond-to-waiting.service";
9
- import * as i2 from "@angular/common";
10
- import * as i3 from "@fortawesome/angular-fontawesome";
11
- export class WaitingRoomModal {
12
- respondToWaitingService;
13
- constructor(respondToWaitingService) {
14
- this.respondToWaitingService = respondToWaitingService;
15
- }
16
- isWaitingModalVisible = false;
17
- waitingRoomCounter = 0;
18
- waitingRoomList = [];
19
- roomName = '';
20
- socket = {};
21
- position = 'topRight';
22
- backgroundColor = '#83c0e9';
23
- parameters = {};
24
- onWaitingRoomClose = () => { };
25
- onWaitingRoomFilterChange = () => { };
26
- updateWaitingList = () => { };
27
- onWaitingRoomItemPress;
28
- faTimes = faTimes;
29
- faCheck = faCheck;
30
- waitingRoomList_s = [];
31
- waitingRoomCounter_s = 0;
32
- reRender = false;
33
- ngOnInit() {
34
- if (!this.onWaitingRoomItemPress) {
35
- this.onWaitingRoomItemPress = (data) => this.respondToWaitingService.respondToWaiting(data);
36
- }
37
- }
38
- ngOnChanges(changes) {
39
- if (changes['waitingRoomList'] || changes['reRender']) {
40
- this.updateParameters();
41
- }
42
- }
43
- updateParameters() {
44
- let { getUpdatedAllParams } = this.parameters;
45
- this.parameters = getUpdatedAllParams();
46
- this.waitingRoomList_s = this.parameters.filteredWaitingRoomList;
47
- this.waitingRoomCounter_s = this.parameters.filteredWaitingRoomList.length;
48
- }
49
- handleModalClose() {
50
- this.onWaitingRoomClose();
51
- }
52
- handleFilterChange(event) {
53
- const inputElement = event.target;
54
- const value = inputElement?.value || '';
55
- this.onWaitingRoomFilterChange(value);
56
- this.reRender = !this.reRender;
57
- }
58
- handleItemPress(participant, type) {
59
- this.onWaitingRoomItemPress({
60
- participantId: participant.id,
61
- participantName: participant.name,
62
- updateWaitingList: this.updateWaitingList,
63
- waitingList: this.waitingRoomList,
64
- roomName: this.roomName,
65
- type: type, // true for accepted, false for rejected
66
- socket: this.socket,
67
- });
68
- }
69
- get modalContainerStyle() {
70
- return {
71
- position: 'fixed',
72
- top: '0',
73
- left: '0',
74
- width: '100%',
75
- height: '100%',
76
- backgroundColor: 'rgba(0, 0, 0, 0.5)',
77
- display: this.isWaitingModalVisible ? 'block' : 'none',
78
- zIndex: '999',
79
- };
80
- }
81
- get modalContentStyle() {
82
- const screenWidth = window.innerWidth;
83
- let modalWidth = 0.8 * screenWidth;
84
- if (modalWidth > 350) {
85
- modalWidth = 350;
86
- }
87
- return {
88
- position: 'fixed',
89
- backgroundColor: this.backgroundColor,
90
- borderRadius: '10px',
91
- padding: '10px',
92
- width: `${modalWidth}px`,
93
- maxHeight: '65%',
94
- overflowY: 'auto',
95
- top: this.position.includes('top') ? '10px' : 'auto',
96
- bottom: this.position.includes('bottom') ? '10px' : 'auto',
97
- left: this.position.includes('Left') ? '10px' : 'auto',
98
- right: this.position.includes('Right') ? '10px' : 'auto',
99
- };
100
- }
101
- get inputStyle() {
102
- return {
103
- width: '90%',
104
- padding: '10px',
105
- borderRadius: '5px',
106
- border: '1px solid #000',
107
- fontSize: '16px',
108
- marginBottom: '10px',
109
- };
110
- }
111
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: WaitingRoomModal, deps: [{ token: i1.RespondToWaiting }], target: i0.ɵɵFactoryTarget.Component });
112
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: WaitingRoomModal, isStandalone: true, selector: "app-waiting-room-modal", inputs: { isWaitingModalVisible: "isWaitingModalVisible", waitingRoomCounter: "waitingRoomCounter", waitingRoomList: "waitingRoomList", roomName: "roomName", socket: "socket", position: "position", backgroundColor: "backgroundColor", parameters: "parameters", onWaitingRoomClose: "onWaitingRoomClose", onWaitingRoomFilterChange: "onWaitingRoomFilterChange", updateWaitingList: "updateWaitingList", onWaitingRoomItemPress: "onWaitingRoomItemPress" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"isWaitingModalVisible\" [ngStyle]=\"modalContainerStyle\">\r\n <div [ngStyle]=\"modalContentStyle\">\r\n <div class=\"modal-header\">\r\n <div class=\"modal-title\">\r\n Waiting <span class=\"badge\">{{ waitingRoomCounter_s }}</span>\r\n </div>\r\n <div (click)=\"handleModalClose()\" class=\"btn-close-waitings\">\r\n <fa-icon [icon]=\"faTimes\" class=\"icon\"></fa-icon>\r\n </div>\r\n </div>\r\n <hr class=\"hr\" />\r\n <div class=\"modal-body\">\r\n <div class=\"form-group\">\r\n <input\r\n class=\"form-control\"\r\n [ngStyle]=\"inputStyle\"\r\n placeholder=\"Search ...\"\r\n (input)=\"handleFilterChange($event)\"\r\n />\r\n </div>\r\n <div class=\"waiting-list\">\r\n <div\r\n *ngFor=\"let participant of waitingRoomList_s\"\r\n class=\"waiting-item\"\r\n >\r\n <div class=\"col7\">{{ participant.name }}</div>\r\n <div class=\"col2\">\r\n <button (click)=\"handleItemPress(participant, true)\">\r\n <fa-icon [icon]=\"faCheck\" size=\"lg\" color=\"green\"></fa-icon>\r\n </button>\r\n </div>\r\n <div class=\"col2\">\r\n <button (click)=\"handleItemPress(participant, false)\">\r\n <fa-icon [icon]=\"faTimes\" size=\"lg\" color=\"red\"></fa-icon>\r\n </button>\r\n </div>\r\n <div class=\"col1\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".modal-container{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#00000080;display:block;z-index:999}.modal-content{position:fixed;border-radius:10px;padding:10px;max-height:65%;overflow-y:auto;top:10px;right:10px;width:80vw;max-width:350px}.form-control{width:90%;padding:10px;border-radius:5px;border:1px solid #000;font-size:16px;margin-bottom:10px}.modal-header{display:flex;justify-content:space-between;align-items:center}.modal-title{font-size:1.2em}.badge{background-color:#fff;color:#000;border-radius:10px;padding:5px}.btn-close-waitings{cursor:pointer}.waiting-list{display:flex;flex-direction:column}.waiting-item{display:flex;flex-direction:row;margin-top:5px}.col7{flex:5;display:flex;align-items:center}.col2{flex:2;display:flex;align-items:center;justify-content:center}.col1{flex:1}.hr{margin:.5em 0;border:0;border-top:1px solid #ccc}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "ngmodule", type: FormsModule }] });
113
- }
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: WaitingRoomModal, decorators: [{
115
- type: Component,
116
- args: [{ selector: 'app-waiting-room-modal', standalone: true, imports: [CommonModule, FontAwesomeModule, FormsModule], template: "<div *ngIf=\"isWaitingModalVisible\" [ngStyle]=\"modalContainerStyle\">\r\n <div [ngStyle]=\"modalContentStyle\">\r\n <div class=\"modal-header\">\r\n <div class=\"modal-title\">\r\n Waiting <span class=\"badge\">{{ waitingRoomCounter_s }}</span>\r\n </div>\r\n <div (click)=\"handleModalClose()\" class=\"btn-close-waitings\">\r\n <fa-icon [icon]=\"faTimes\" class=\"icon\"></fa-icon>\r\n </div>\r\n </div>\r\n <hr class=\"hr\" />\r\n <div class=\"modal-body\">\r\n <div class=\"form-group\">\r\n <input\r\n class=\"form-control\"\r\n [ngStyle]=\"inputStyle\"\r\n placeholder=\"Search ...\"\r\n (input)=\"handleFilterChange($event)\"\r\n />\r\n </div>\r\n <div class=\"waiting-list\">\r\n <div\r\n *ngFor=\"let participant of waitingRoomList_s\"\r\n class=\"waiting-item\"\r\n >\r\n <div class=\"col7\">{{ participant.name }}</div>\r\n <div class=\"col2\">\r\n <button (click)=\"handleItemPress(participant, true)\">\r\n <fa-icon [icon]=\"faCheck\" size=\"lg\" color=\"green\"></fa-icon>\r\n </button>\r\n </div>\r\n <div class=\"col2\">\r\n <button (click)=\"handleItemPress(participant, false)\">\r\n <fa-icon [icon]=\"faTimes\" size=\"lg\" color=\"red\"></fa-icon>\r\n </button>\r\n </div>\r\n <div class=\"col1\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".modal-container{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#00000080;display:block;z-index:999}.modal-content{position:fixed;border-radius:10px;padding:10px;max-height:65%;overflow-y:auto;top:10px;right:10px;width:80vw;max-width:350px}.form-control{width:90%;padding:10px;border-radius:5px;border:1px solid #000;font-size:16px;margin-bottom:10px}.modal-header{display:flex;justify-content:space-between;align-items:center}.modal-title{font-size:1.2em}.badge{background-color:#fff;color:#000;border-radius:10px;padding:5px}.btn-close-waitings{cursor:pointer}.waiting-list{display:flex;flex-direction:column}.waiting-item{display:flex;flex-direction:row;margin-top:5px}.col7{flex:5;display:flex;align-items:center}.col2{flex:2;display:flex;align-items:center;justify-content:center}.col1{flex:1}.hr{margin:.5em 0;border:0;border-top:1px solid #ccc}\n"] }]
117
- }], ctorParameters: () => [{ type: i1.RespondToWaiting }], propDecorators: { isWaitingModalVisible: [{
118
- type: Input
119
- }], waitingRoomCounter: [{
120
- type: Input
121
- }], waitingRoomList: [{
122
- type: Input
123
- }], roomName: [{
124
- type: Input
125
- }], socket: [{
126
- type: Input
127
- }], position: [{
128
- type: Input
129
- }], backgroundColor: [{
130
- type: Input
131
- }], parameters: [{
132
- type: Input
133
- }], onWaitingRoomClose: [{
134
- type: Input
135
- }], onWaitingRoomFilterChange: [{
136
- type: Input
137
- }], updateWaitingList: [{
138
- type: Input
139
- }], onWaitingRoomItemPress: [{
140
- type: Input
141
- }] } });
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdGluZy1yb29tLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3dhaXRpbmctY29tcG9uZW50cy93YWl0aW5nLXJvb20tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWFzZnUtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvd2FpdGluZy1jb21wb25lbnRzL3dhaXRpbmctcm9vbS1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQW9DLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUEyQzdDLE1BQU0sT0FBTyxnQkFBZ0I7SUFDUDtJQUFwQixZQUFvQix1QkFBeUM7UUFBekMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUFrQjtJQUFHLENBQUM7SUFFeEQscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQzlCLGtCQUFrQixHQUFHLENBQUMsQ0FBQztJQUN2QixlQUFlLEdBQTZCLEVBQUUsQ0FBQztJQUMvQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2QsTUFBTSxHQUFXLEVBQVksQ0FBQztJQUM5QixRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQ3RCLGVBQWUsR0FBRyxTQUFTLENBQUM7SUFDNUIsVUFBVSxHQUErQixFQUFnQyxDQUFDO0lBQzFF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OzJGQUkzQyxnQkFBZ0I7a0JBUDVCLFNBQVM7K0JBQ0Usd0JBQXdCLGNBQ3RCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxXQUFXLENBQUM7cUZBTzlDLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24gKi9cbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmYVRpbWVzLCBmYUNoZWNrIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb250QXdlc29tZU1vZHVsZSB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgV2FpdGluZ1Jvb21QYXJ0aWNpcGFudCB9IGZyb20gJy4uLy4uL0B0eXBlcy90eXBlcyc7XG5pbXBvcnQge1xuICBSZXNwb25kVG9XYWl0aW5nLFxuICBSZXNwb25kVG9XYWl0aW5nT3B0aW9ucyxcbiAgUmVzcG9uZFRvV2FpdGluZ1R5cGUsXG59IGZyb20gJy4uLy4uL21ldGhvZHMvd2FpdGluZy1tZXRob2RzL3Jlc3BvbmQtdG8td2FpdGluZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNvY2tldCB9IGZyb20gJ3NvY2tldC5pby1jbGllbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRpbmdSb29tTW9kYWxQYXJhbWV0ZXJzIHtcbiAgZmlsdGVyZWRXYWl0aW5nUm9vbUxpc3Q6IFdhaXRpbmdSb29tUGFydGljaXBhbnRbXTtcblxuICAvLyBtZWRpYXNmdSBmdW5jdGlvbnNcbiAgZ2V0VXBkYXRlZEFsbFBhcmFtczogKCkgPT4gV2FpdGluZ1Jvb21Nb2RhbFBhcmFtZXRlcnM7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXYWl0aW5nUm9vbU1vZGFsT3B0aW9ucyB7XG4gIGlzV2FpdGluZ01vZGFsVmlzaWJsZTogYm9vbGVhbjtcbiAgb25XYWl0aW5nUm9vbUNsb3NlOiAoKSA9PiB2b2lkO1xuICB3YWl0aW5nUm9vbUNvdW50ZXI6IG51bWJlcjtcbiAgb25XYWl0aW5nUm9vbUZpbHRlckNoYW5nZTogKGZpbHRlcjogc3RyaW5nKSA9PiB2b2lkO1xuICB3YWl0aW5nUm9vbUxpc3Q6IFdhaXRpbmdSb29tUGFydGljaXBhbnRbXTtcbiAgdXBkYXRlV2FpdGluZ0xpc3Q6ICh1cGRhdGVkTGlzdDogV2FpdGluZ1Jvb21QYXJ0aWNpcGFudFtdKSA9PiB2b2lkO1xuICByb29tTmFtZTogc3RyaW5nO1xuICBzb2NrZXQ6IFNvY2tldDtcbiAgcG9zaXRpb24/OiBzdHJpbmc7XG4gIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgcGFyYW1ldGVyczogV2FpdGluZ1Jvb21Nb2RhbFBhcmFtZXRlcnM7XG5cbiAgLy8gbWVkaWFzZnUgZnVuY3Rpb25zXG4gIG9uV2FpdGluZ1Jvb21JdGVtUHJlc3M/OiBSZXNwb25kVG9XYWl0aW5nVHlwZTtcbn1cblxuZXhwb3J0IHR5cGUgV2FpdGluZ1Jvb21Nb2RhbFR5cGUgPSAob3B0aW9uczogV2FpdGluZ1Jvb21Nb2RhbE9wdGlvbnMpID0+IEhUTUxFbGVtZW50O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtd2FpdGluZy1yb29tLW1vZGFsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9udEF3ZXNvbWVNb2R1bGUsIEZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3dhaXRpbmctcm9vbS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dhaXRpbmctcm9vbS1tb2RhbC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFdhaXRpbmdSb29tTW9kYWwgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzcG9uZFRvV2FpdGluZ1NlcnZpY2U6IFJlc3BvbmRUb1dhaXRpbmcpIHt9XG5cbiAgQElucHV0KCkgaXNXYWl0aW5nTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHdhaXRpbmdSb29tQ291bnRlciA9IDA7XG4gIEBJbnB1dCgpIHdhaXRpbmdSb29tTGlzdDogV2FpdGluZ1Jvb21QYXJ0aWNpcGFudFtdID0gW107XG4gIEBJbnB1dCgpIHJvb21OYW1lID0gJyc7XG4gIEBJbnB1dCgpIHNvY2tldDogU29ja2V0ID0ge30gYXMgU29ja2V0O1xuICBASW5wdXQoKSBwb3NpdGlvbiA9ICd0b3BSaWdodCc7XG4gIEBJbnB1dCgpIGJhY2tncm91bmRDb2xvciA9ICcjODNjMGU5JztcbiAgQElucHV0KCkgcGFyYW1ldGVyczogV2FpdGluZ1Jvb21Nb2RhbFBhcmFtZXRlcnMgPSB7fSBhcyBXYWl0aW5nUm9vbU1vZGFsUGFyYW1ldGVycztcbiAgQElucHV0KCkgb25XYWl0aW5nUm9vbUNsb3NlOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIEBJbnB1dCgpIG9uV2FpdGluZ1Jvb21GaWx0ZXJDaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIEBJbnB1dCgpIHVwZGF0ZVdhaXRpbmdMaXN0OiAoZGF0YTogV2FpdGluZ1Jvb21QYXJ0aWNpcGFudFtdKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIEBJbnB1dCgpIG9uV2FpdGluZ1Jvb21JdGVtUHJlc3MhOiAoZGF0YTogUmVzcG9uZFRvV2FpdGluZ09wdGlvbnMpID0+IHZvaWQ7XG5cbiAgZmFUaW1lcyA9IGZhVGltZXM7XG4gIGZhQ2hlY2sgPSBmYUNoZWNrO1xuICB3YWl0aW5nUm9vbUxpc3RfczogV2FpdGluZ1Jvb21QYXJ0aWNpcGFudFtdID0gW107XG4gIHdhaXRpbmdSb29tQ291bnRlcl9zID0gMDtcbiAgcmVSZW5kZXIgPSBmYWxzZTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMub25XYWl0aW5nUm9vbUl0ZW1QcmVzcykge1xuICAgICAgdGhpcy5vbldhaXRpbmdSb29tSXRlbVByZXNzID0gKGRhdGE6IGFueSkgPT5cbiAgICAgICAgdGhpcy5yZXNwb25kVG9XYWl0aW5nU2VydmljZS5yZXNwb25kVG9XYWl0aW5nKGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snd2FpdGluZ1Jvb21MaXN0J10gfHwgY2hhbmdlc1sncmVSZW5kZXInXSkge1xuICAgICAgdGhpcy51cGRhdGVQYXJhbWV0ZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlUGFyYW1ldGVycygpIHtcbiAgICBsZXQgeyBnZXRVcGRhdGVkQWxsUGFyYW1zIH0gPSB0aGlzLnBhcmFtZXRlcnM7XG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gZ2V0VXBkYXRlZEFsbFBhcmFtcygpO1xuXG4gICAgdGhpcy53YWl0aW5nUm9vbUxpc3RfcyA9IHRoaXMucGFyYW1ldGVycy5maWx0ZXJlZFdhaXRpbmdSb29tTGlzdDtcbiAgICB0aGlzLndhaXRpbmdSb29tQ291bnRlcl9zID0gdGhpcy5wYXJhbWV0ZXJzLmZpbHRlcmVkV2FpdGluZ1Jvb21MaXN0Lmxlbmd0aDtcbiAgfVxuXG4gIGhhbmRsZU1vZGFsQ2xvc2UoKSB7XG4gICAgdGhpcy5vbldhaXRpbmdSb29tQ2xvc2UoKTtcbiAgfVxuXG4gIGhhbmRsZUZpbHRlckNoYW5nZShldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCB2YWx1ZSA9IGlucHV0RWxlbWVudD8udmFsdWUgfHwgJyc7XG4gICAgdGhpcy5vbldhaXRpbmdSb29tRmlsdGVyQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLnJlUmVuZGVyID0gIXRoaXMucmVSZW5kZXI7XG4gIH1cblxuICBoYW5kbGVJdGVtUHJlc3MocGFydGljaXBhbnQ6IFdhaXRpbmdSb29tUGFydGljaXBhbnQsIHR5cGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm9uV2FpdGluZ1Jvb21JdGVtUHJlc3Moe1xuICAgICAgcGFydGljaXBhbnRJZDogcGFydGljaXBhbnQuaWQsXG4gICAgICBwYXJ0aWNpcGFudE5hbWU6IHBhcnRpY2lwYW50Lm5hbWUsXG4gICAgICB1cGRhdGVXYWl0aW5nTGlzdDogdGhpcy51cGRhdGVXYWl0aW5nTGlzdCxcbiAgICAgIHdhaXRpbmdMaXN0OiB0aGlzLndhaXRpbmdSb29tTGlzdCxcbiAgICAgIHJvb21OYW1lOiB0aGlzLnJvb21OYW1lLFxuICAgICAgdHlwZTogdHlwZSwgLy8gdHJ1ZSBmb3IgYWNjZXB0ZWQsIGZhbHNlIGZvciByZWplY3RlZFxuICAgICAgc29ja2V0OiB0aGlzLnNvY2tldCxcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBtb2RhbENvbnRhaW5lclN0eWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjUpJyxcbiAgICAgIGRpc3BsYXk6IHRoaXMuaXNXYWl0aW5nTW9kYWxWaXNpYmxlID8gJ2Jsb2NrJyA6ICdub25lJyxcbiAgICAgIHpJbmRleDogJzk5OScsXG4gICAgfTtcbiAgfVxuXG4gIGdldCBtb2RhbENvbnRlbnRTdHlsZSgpIHtcbiAgICBjb25zdCBzY3JlZW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGxldCBtb2RhbFdpZHRoID0gMC44ICogc2NyZWVuV2lkdGg7XG4gICAgaWYgKG1vZGFsV2lkdGggPiAzNTApIHtcbiAgICAgIG1vZGFsV2lkdGggPSAzNTA7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBib3JkZXJSYWRpdXM6ICcxMHB4JyxcbiAgICAgIHBhZGRpbmc6ICcxMHB4JyxcbiAgICAgIHdpZHRoOiBgJHttb2RhbFdpZHRofXB4YCxcbiAgICAgIG1heEhlaWdodDogJzY1JScsXG4gICAgICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgICAgIHRvcDogdGhpcy5wb3NpdGlvbi5pbmNsdWRlcygndG9wJykgPyAnMTBweCcgOiAnYXV0bycsXG4gICAgICBib3R0b206IHRoaXMucG9zaXRpb24uaW5jbHVkZXMoJ2JvdHRvbScpID8gJzEwcHgnIDogJ2F1dG8nLFxuICAgICAgbGVmdDogdGhpcy5wb3NpdGlvbi5pbmNsdWRlcygnTGVmdCcpID8gJzEwcHgnIDogJ2F1dG8nLFxuICAgICAgcmlnaHQ6IHRoaXMucG9zaXRpb24uaW5jbHVkZXMoJ1JpZ2h0JykgPyAnMTBweCcgOiAnYXV0bycsXG4gICAgfTtcbiAgfVxuXG4gIGdldCBpbnB1dFN0eWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogJzkwJScsXG4gICAgICBwYWRkaW5nOiAnMTBweCcsXG4gICAgICBib3JkZXJSYWRpdXM6ICc1cHgnLFxuICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICMwMDAnLFxuICAgICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICAgIG1hcmdpbkJvdHRvbTogJzEwcHgnLFxuICAgIH07XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJpc1dhaXRpbmdNb2RhbFZpc2libGVcIiBbbmdTdHlsZV09XCJtb2RhbENvbnRhaW5lclN0eWxlXCI+XHJcbiAgPGRpdiBbbmdTdHlsZV09XCJtb2RhbENvbnRlbnRTdHlsZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5cclxuICAgICAgICBXYWl0aW5nIDxzcGFuIGNsYXNzPVwiYmFkZ2VcIj57eyB3YWl0aW5nUm9vbUNvdW50ZXJfcyB9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKGNsaWNrKT1cImhhbmRsZU1vZGFsQ2xvc2UoKVwiIGNsYXNzPVwiYnRuLWNsb3NlLXdhaXRpbmdzXCI+XHJcbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFUaW1lc1wiIGNsYXNzPVwiaWNvblwiPjwvZmEtaWNvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxociBjbGFzcz1cImhyXCIgLz5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJpbnB1dFN0eWxlXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIC4uLlwiXHJcbiAgICAgICAgICAoaW5wdXQpPVwiaGFuZGxlRmlsdGVyQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid2FpdGluZy1saXN0XCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHBhcnRpY2lwYW50IG9mIHdhaXRpbmdSb29tTGlzdF9zXCJcclxuICAgICAgICAgIGNsYXNzPVwid2FpdGluZy1pdGVtXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sN1wiPnt7IHBhcnRpY2lwYW50Lm5hbWUgfX08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImhhbmRsZUl0ZW1QcmVzcyhwYXJ0aWNpcGFudCwgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUNoZWNrXCIgc2l6ZT1cImxnXCIgY29sb3I9XCJncmVlblwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImhhbmRsZUl0ZW1QcmVzcyhwYXJ0aWNpcGFudCwgZmFsc2UpXCI+XHJcbiAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFUaW1lc1wiIHNpemU9XCJsZ1wiIGNvbG9yPVwicmVkXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbDFcIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -1,265 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
4
- import { faTimes, faCheck, faSyncAlt, faPlay, faSave } from '@fortawesome/free-solid-svg-icons';
5
- import { Socket } from 'socket.io-client';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common";
8
- import * as i2 from "@fortawesome/angular-fontawesome";
9
- export class ConfigureWhiteboardModal {
10
- isVisible = false;
11
- parameters = {};
12
- backgroundColor = '#83c0e9';
13
- position = 'topRight';
14
- onConfigureWhiteboardClose;
15
- faTimes = faTimes;
16
- faCheck = faCheck;
17
- faSyncAlt = faSyncAlt;
18
- faPlay = faPlay;
19
- faSave = faSave;
20
- participantsCopy = [];
21
- whiteboardLimit;
22
- isEditing = false;
23
- canStartWhiteboard = false;
24
- assignedParticipants = [];
25
- unassignedParticipants = [];
26
- whiteboardStarted = false;
27
- whiteboardEnded = false;
28
- socket = {};
29
- ngOnInit() {
30
- if (this.parameters && this.isVisible) {
31
- try {
32
- this.parameters = this.parameters.getUpdatedAllParams();
33
- }
34
- catch {
35
- /* handle error */
36
- }
37
- this.whiteboardLimit = this.parameters.itemPageLimit;
38
- this.whiteboardStarted = this.parameters.whiteboardStarted;
39
- this.whiteboardEnded = this.parameters.whiteboardEnded;
40
- this.checkCanStartWhiteboard();
41
- }
42
- if (this.parameters) {
43
- this.socket = this.parameters.socket;
44
- if (this.socket) {
45
- this.setupSocketListeners();
46
- }
47
- }
48
- }
49
- ngOnChanges(changes) {
50
- if (changes['parameters'] && this.parameters) {
51
- if (this.parameters && this.isVisible) {
52
- this.whiteboardLimit = this.parameters.itemPageLimit;
53
- this.whiteboardStarted = this.parameters.whiteboardStarted;
54
- this.whiteboardEnded = this.parameters.whiteboardEnded;
55
- this.checkCanStartWhiteboard();
56
- }
57
- this.socket = this.parameters.socket;
58
- if (this.socket) {
59
- this.setupSocketListeners();
60
- }
61
- }
62
- if (changes['isVisible'] && this.isVisible) {
63
- this.parameters = this.parameters.getUpdatedAllParams();
64
- if (!this.participantsCopy.length) {
65
- const filteredParticipants = this.parameters.participants.filter((participant) => participant.islevel != '2');
66
- this.participantsCopy = filteredParticipants;
67
- this.updateParticipantsLists();
68
- }
69
- this.checkCanStartWhiteboard();
70
- }
71
- }
72
- setupSocketListeners = () => {
73
- if (this.socket && this.socket instanceof Socket) {
74
- this.socket.on('whiteboardUpdated', async (data) => {
75
- if (this.parameters.islevel == '2' && data.members) {
76
- const filteredParticipants = data.members.filter((participant) => !participant.isBanned);
77
- this.participantsCopy = filteredParticipants;
78
- this.updateParticipantsLists();
79
- }
80
- this.parameters.updateWhiteboardUsers(data.whiteboardUsers);
81
- if (data.status == 'started') {
82
- this.whiteboardStarted = true;
83
- this.whiteboardEnded = false;
84
- this.parameters.updateWhiteboardStarted(true);
85
- this.parameters.updateWhiteboardEnded(false);
86
- if (this.parameters.islevel != '2') {
87
- this.parameters.shareScreenStarted = true;
88
- await this.parameters.onScreenChanges({ changed: true, parameters: this.parameters });
89
- }
90
- }
91
- else if (data.status == 'ended') {
92
- this.whiteboardEnded = true;
93
- this.whiteboardStarted = false;
94
- this.parameters.updateWhiteboardStarted(false);
95
- this.parameters.updateWhiteboardEnded(true);
96
- this.parameters.shareScreenStarted = false;
97
- await this.parameters.onScreenChanges({ changed: true, parameters: this.parameters });
98
- await this.parameters.prepopulateUserMedia({
99
- name: this.parameters.hostLabel,
100
- parameters: this.parameters,
101
- });
102
- await this.parameters.rePort({ restart: true, parameters: this.parameters });
103
- }
104
- });
105
- }
106
- };
107
- toggleParticipant = (participant, add) => {
108
- this.isEditing = true;
109
- const selectedParticipants = this.participantsCopy.filter((p) => p.useBoard);
110
- if (add && selectedParticipants.length >= this.whiteboardLimit - 1) {
111
- this.parameters.showAlert?.({
112
- message: `Participant limit exceeded - you can only add ${this.whiteboardLimit - 1} other participants`,
113
- type: 'danger',
114
- });
115
- return;
116
- }
117
- this.participantsCopy = this.participantsCopy.map((p) => p.name === participant.name ? { ...p, useBoard: add } : p);
118
- this.updateParticipantsLists();
119
- };
120
- validateWhiteboard() {
121
- const selectedParticipants = this.participantsCopy.filter((participant) => participant.useBoard);
122
- if (selectedParticipants.length > this.whiteboardLimit) {
123
- this.parameters.showAlert?.({ message: 'Participant limit exceeded', type: 'danger' });
124
- return false;
125
- }
126
- return true;
127
- }
128
- checkCanStartWhiteboard() {
129
- const isValid = this.validateWhiteboard();
130
- this.canStartWhiteboard = isValid;
131
- this.parameters.updateCanStartWhiteboard(isValid);
132
- }
133
- handleSaveWhiteboard() {
134
- if (this.validateWhiteboard()) {
135
- this.isEditing = false;
136
- this.canStartWhiteboard = true;
137
- this.parameters.updateCanStartWhiteboard(true);
138
- this.checkCanStartWhiteboard();
139
- this.parameters.showAlert?.({ message: 'Whiteboard saved successfully', type: 'success' });
140
- }
141
- else {
142
- this.parameters.showAlert?.({ message: 'Whiteboard validation failed', type: 'danger' });
143
- }
144
- }
145
- async handleStartWhiteboard() {
146
- const { shareScreenStarted, shared, breakOutRoomStarted, breakOutRoomEnded, roomName, socket, recordStarted, recordResumed, recordPaused, recordStopped, recordingMediaOptions, onScreenChanges, captureCanvasStream, showAlert, } = this.parameters;
147
- if ((shareScreenStarted || shared) && !this.whiteboardStarted) {
148
- showAlert?.({
149
- message: 'You cannot start whiteboard while screen sharing is active',
150
- type: 'danger',
151
- });
152
- return;
153
- }
154
- if (breakOutRoomStarted && !breakOutRoomEnded) {
155
- showAlert?.({
156
- message: 'You cannot start whiteboard while breakout rooms are active',
157
- type: 'danger',
158
- });
159
- return;
160
- }
161
- if (this.canStartWhiteboard) {
162
- const emitName = this.whiteboardStarted && !this.whiteboardEnded ? 'updateWhiteboard' : 'startWhiteboard';
163
- const filteredWhiteboardUsers = this.participantsCopy
164
- .filter((participant) => participant.useBoard)
165
- .map(({ name, useBoard }) => ({ name, useBoard }));
166
- socket.emit(emitName, { whiteboardUsers: filteredWhiteboardUsers, roomName }, async (response) => {
167
- if (response.success) {
168
- showAlert?.({ message: 'Whiteboard active', type: 'success' });
169
- this.parameters.whiteboardStarted = true;
170
- this.parameters.whiteboardEnded = false;
171
- this.parameters.updateWhiteboardStarted(true);
172
- this.parameters.updateWhiteboardEnded(false);
173
- this.parameters.updateIsConfigureWhiteboardModalVisible(false);
174
- if (this.parameters.islevel != '2') {
175
- this.parameters.shareScreenStarted = true;
176
- await onScreenChanges({ changed: true, parameters: this.parameters });
177
- }
178
- if (this.parameters.islevel == '2' && (recordStarted || recordResumed)) {
179
- if (!(recordPaused || recordStopped) && recordingMediaOptions == 'video') {
180
- await captureCanvasStream({ parameters: this.parameters });
181
- }
182
- }
183
- }
184
- else {
185
- showAlert?.({ message: response.reason, type: 'danger' });
186
- }
187
- });
188
- }
189
- }
190
- async handleStopWhiteboard() {
191
- const { roomName, socket, showAlert, updateWhiteboardStarted, updateWhiteboardEnded, updateIsConfigureWhiteboardModalVisible, onScreenChanges, prepopulateUserMedia, rePort, hostLabel, } = this.parameters;
192
- socket.emit('stopWhiteboard', { roomName }, async (response) => {
193
- if (response.success) {
194
- showAlert?.({ message: 'Whiteboard stopped', type: 'success' });
195
- this.parameters.whiteboardEnded = true;
196
- this.parameters.whiteboardStarted = false;
197
- updateWhiteboardStarted(false);
198
- updateWhiteboardEnded(true);
199
- updateIsConfigureWhiteboardModalVisible(false);
200
- this.parameters.shareScreenStarted = false;
201
- await onScreenChanges({ changed: true, parameters: this.parameters });
202
- await prepopulateUserMedia({ name: hostLabel, parameters: this.parameters });
203
- await rePort({ restart: true, parameters: this.parameters });
204
- }
205
- else {
206
- showAlert?.({ message: response.reason, type: 'danger' });
207
- }
208
- });
209
- }
210
- modalContainerStyle() {
211
- return {
212
- position: 'fixed',
213
- top: 0,
214
- left: 0,
215
- width: '100%',
216
- height: '100%',
217
- backgroundColor: 'rgba(0, 0, 0, 0.5)',
218
- display: this.isVisible ? 'block' : 'none',
219
- zIndex: 999,
220
- };
221
- }
222
- modalContentStyle() {
223
- const screenWidth = window.innerWidth;
224
- let modalWidth = 0.7 * screenWidth;
225
- if (modalWidth > 400) {
226
- modalWidth = 400;
227
- }
228
- return {
229
- position: 'fixed',
230
- backgroundColor: this.backgroundColor,
231
- borderRadius: '10px',
232
- padding: '10px',
233
- width: modalWidth + 'px',
234
- maxWidth: modalWidth + 'px',
235
- maxHeight: '75%',
236
- overflowY: 'auto',
237
- overflowX: 'hidden',
238
- top: this.position.includes('top') ? '10px' : 'auto',
239
- bottom: this.position.includes('bottom') ? '10px' : 'auto',
240
- left: this.position.includes('Left') ? '10px' : 'auto',
241
- right: this.position.includes('Right') ? '10px' : 'auto',
242
- };
243
- }
244
- updateParticipantsLists = () => {
245
- this.assignedParticipants = this.participantsCopy.filter((p) => p.useBoard);
246
- this.unassignedParticipants = this.participantsCopy.filter((p) => !p.useBoard);
247
- };
248
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConfigureWhiteboardModal, deps: [], target: i0.ɵɵFactoryTarget.Component });
249
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: ConfigureWhiteboardModal, isStandalone: true, selector: "app-configure-whiteboard-modal", inputs: { isVisible: "isVisible", parameters: "parameters", backgroundColor: "backgroundColor", position: "position", onConfigureWhiteboardClose: "onConfigureWhiteboardClose" }, usesOnChanges: true, ngImport: i0, template: "<div [ngStyle]=\"modalContainerStyle()\">\r\n <div [ngStyle]=\"modalContentStyle()\">\r\n <div style=\"display: flex; flex-direction: column;\">\r\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;\">\r\n <h2 style=\"font-size: x-large; font-weight: bold; color: black;\">\r\n Configure Whiteboard\r\n </h2>\r\n <button (click)=\"onConfigureWhiteboardClose()\" style=\"border: none; background: none; cursor: pointer;\">\r\n <fa-icon [icon]=\"faTimes\" size=\"xl\" style=\"font-size: 20px; color: black;\"></fa-icon>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <h6>Assigned</h6>\r\n <ul class=\"list-group\" style=\"max-height: 200px; overflow-y: auto; border: 1px solid #ccc;\">\r\n <ng-container *ngIf=\"assignedParticipants.length > 0; else noAssignedParticipants\">\r\n <li *ngFor=\"let participant of assignedParticipants\" class=\"list-group-item d-flex justify-content-between align-items-center text-dark mb-2 mr-2\">\r\n {{ participant.name }}\r\n <button class=\"btn btn-danger btn-sm mr-2 ml-2\" (click)=\"toggleParticipant(participant, false)\">\r\n <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n </button>\r\n </li>\r\n </ng-container>\r\n <ng-template #noAssignedParticipants>\r\n <li class=\"list-group-item d-flex justify-content-between align-items-center text-dark\">\r\n None\r\n </li>\r\n </ng-template>\r\n </ul>\r\n </div>\r\n <div class=\"col-md-6 mt-xs-3 mb-3\">\r\n <h6>Pending</h6>\r\n <ul class=\"list-group\" style=\"max-height: 200px; overflow-y: auto; border: 1px solid #ccc;\">\r\n <ng-container *ngIf=\"unassignedParticipants.length > 0; else noPendingParticipants\">\r\n <li *ngFor=\"let participant of unassignedParticipants\" class=\"list-group-item d-flex justify-content-between align-items-center text-dark mb-2 mr-2\">\r\n {{ participant.name }}\r\n <button class=\"btn btn-primary btn-sm mr-2 ml-2\" (click)=\"toggleParticipant(participant, true)\">\r\n <fa-icon [icon]=\"faCheck\"></fa-icon>\r\n </button>\r\n </li>\r\n </ng-container>\r\n <ng-template #noPendingParticipants>\r\n <li class=\"list-group-item d-flex justify-content-between align-items-center text-dark\">\r\n None\r\n </li>\r\n </ng-template>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-info\" (click)=\"handleSaveWhiteboard()\">\r\n Save <fa-icon [icon]=\"faSave\"></fa-icon>\r\n </button>\r\n </div>\r\n <hr />\r\n <div *ngIf=\"!isEditing\">\r\n <button *ngIf=\"canStartWhiteboard && whiteboardStarted && !whiteboardEnded\" class=\"btn btn-warning mb-2 mr-2\" (click)=\"handleStartWhiteboard()\">\r\n Update <fa-icon [icon]=\"faSyncAlt\"></fa-icon>\r\n </button>\r\n <button *ngIf=\"canStartWhiteboard && !whiteboardStarted\" class=\"btn btn-success mb-2 mr-2\" (click)=\"handleStartWhiteboard()\">\r\n Start <fa-icon [icon]=\"faPlay\"></fa-icon>\r\n </button>\r\n <button *ngIf=\"whiteboardStarted && !whiteboardEnded\" class=\"btn btn-danger mb-2 ml-2\" (click)=\"handleStopWhiteboard()\">\r\n Stop <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".modal-body{max-height:400px;overflow-y:auto}.list-group-item{cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i2.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] });
250
- }
251
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ConfigureWhiteboardModal, decorators: [{
252
- type: Component,
253
- args: [{ selector: 'app-configure-whiteboard-modal', standalone: true, imports: [CommonModule, FontAwesomeModule], template: "<div [ngStyle]=\"modalContainerStyle()\">\r\n <div [ngStyle]=\"modalContentStyle()\">\r\n <div style=\"display: flex; flex-direction: column;\">\r\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;\">\r\n <h2 style=\"font-size: x-large; font-weight: bold; color: black;\">\r\n Configure Whiteboard\r\n </h2>\r\n <button (click)=\"onConfigureWhiteboardClose()\" style=\"border: none; background: none; cursor: pointer;\">\r\n <fa-icon [icon]=\"faTimes\" size=\"xl\" style=\"font-size: 20px; color: black;\"></fa-icon>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <h6>Assigned</h6>\r\n <ul class=\"list-group\" style=\"max-height: 200px; overflow-y: auto; border: 1px solid #ccc;\">\r\n <ng-container *ngIf=\"assignedParticipants.length > 0; else noAssignedParticipants\">\r\n <li *ngFor=\"let participant of assignedParticipants\" class=\"list-group-item d-flex justify-content-between align-items-center text-dark mb-2 mr-2\">\r\n {{ participant.name }}\r\n <button class=\"btn btn-danger btn-sm mr-2 ml-2\" (click)=\"toggleParticipant(participant, false)\">\r\n <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n </button>\r\n </li>\r\n </ng-container>\r\n <ng-template #noAssignedParticipants>\r\n <li class=\"list-group-item d-flex justify-content-between align-items-center text-dark\">\r\n None\r\n </li>\r\n </ng-template>\r\n </ul>\r\n </div>\r\n <div class=\"col-md-6 mt-xs-3 mb-3\">\r\n <h6>Pending</h6>\r\n <ul class=\"list-group\" style=\"max-height: 200px; overflow-y: auto; border: 1px solid #ccc;\">\r\n <ng-container *ngIf=\"unassignedParticipants.length > 0; else noPendingParticipants\">\r\n <li *ngFor=\"let participant of unassignedParticipants\" class=\"list-group-item d-flex justify-content-between align-items-center text-dark mb-2 mr-2\">\r\n {{ participant.name }}\r\n <button class=\"btn btn-primary btn-sm mr-2 ml-2\" (click)=\"toggleParticipant(participant, true)\">\r\n <fa-icon [icon]=\"faCheck\"></fa-icon>\r\n </button>\r\n </li>\r\n </ng-container>\r\n <ng-template #noPendingParticipants>\r\n <li class=\"list-group-item d-flex justify-content-between align-items-center text-dark\">\r\n None\r\n </li>\r\n </ng-template>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-info\" (click)=\"handleSaveWhiteboard()\">\r\n Save <fa-icon [icon]=\"faSave\"></fa-icon>\r\n </button>\r\n </div>\r\n <hr />\r\n <div *ngIf=\"!isEditing\">\r\n <button *ngIf=\"canStartWhiteboard && whiteboardStarted && !whiteboardEnded\" class=\"btn btn-warning mb-2 mr-2\" (click)=\"handleStartWhiteboard()\">\r\n Update <fa-icon [icon]=\"faSyncAlt\"></fa-icon>\r\n </button>\r\n <button *ngIf=\"canStartWhiteboard && !whiteboardStarted\" class=\"btn btn-success mb-2 mr-2\" (click)=\"handleStartWhiteboard()\">\r\n Start <fa-icon [icon]=\"faPlay\"></fa-icon>\r\n </button>\r\n <button *ngIf=\"whiteboardStarted && !whiteboardEnded\" class=\"btn btn-danger mb-2 ml-2\" (click)=\"handleStopWhiteboard()\">\r\n Stop <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".modal-body{max-height:400px;overflow-y:auto}.list-group-item{cursor:pointer}\n"] }]
254
- }], propDecorators: { isVisible: [{
255
- type: Input
256
- }], parameters: [{
257
- type: Input
258
- }], backgroundColor: [{
259
- type: Input
260
- }], position: [{
261
- type: Input
262
- }], onConfigureWhiteboardClose: [{
263
- type: Input
264
- }] } });
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlLXdoaXRlYm9hcmQtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWFzZnUtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvd2hpdGVib2FyZC1jb21wb25lbnRzL2NvbmZpZ3VyZS13aGl0ZWJvYXJkLW1vZGFsL2NvbmZpZ3VyZS13aGl0ZWJvYXJkLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3doaXRlYm9hcmQtY29tcG9uZW50cy9jb25maWd1cmUtd2hpdGVib2FyZC1tb2RhbC9jb25maWd1cmUtd2hpdGVib2FyZC1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFnQmhHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQThEMUMsTUFBTSxPQUFPLHdCQUF3QjtJQUMxQixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLFVBQVUsR0FDakIsRUFBd0MsQ0FBQztJQUNsQyxlQUFlLEdBQUcsU0FBUyxDQUFDO0lBQzVCLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDdEIsMEJBQTBCLENBQWM7SUFFakQsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUNsQixPQUFPLEdBQUcsT0FBTyxDQUFDO0lB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TUFBTTtZQUMxRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUN0RCxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUN6RCxDQUFDO0lBQ0osQ0FBQztJQUVELHVCQUF1QixHQUFHLEdBQUcsRUFBRTtRQUM3QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRixDQUFDLENBQUM7dUdBaFRTLHdCQUF3QjsyRkFBeEIsd0JBQXdCLGlTQ2pGckMsNDBIQXVFQSx3SURRWSxZQUFZLG9WQUFFLGlCQUFpQjs7MkZBRTlCLHdCQUF3QjtrQkFQcEMsU0FBUzsrQkFDRSxnQ0FBZ0MsY0FDOUIsSUFBSSxXQUdQLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDOzhCQUdqQyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9udEF3ZXNvbWVNb2R1bGUgfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XG5pbXBvcnQgeyBmYVRpbWVzLCBmYUNoZWNrLCBmYVN5bmNBbHQsIGZhUGxheSwgZmFTYXZlIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcbmltcG9ydCB7XG4gIENhcHR1cmVDYW52YXNTdHJlYW1QYXJhbWV0ZXJzLFxuICBDYXB0dXJlQ2FudmFzU3RyZWFtVHlwZSxcbiAgRXZlbnRUeXBlLFxuICBPblNjcmVlbkNoYW5nZXNQYXJhbWV0ZXJzLFxuICBPblNjcmVlbkNoYW5nZXNUeXBlLFxuICBQYXJ0aWNpcGFudCxcbiAgUHJlcG9wdWxhdGVVc2VyTWVkaWFQYXJhbWV0ZXJzLFxuICBQcmVwb3B1bGF0ZVVzZXJNZWRpYVR5cGUsXG4gIFJlUG9ydFBhcmFtZXRlcnMsXG4gIFJlUG9ydFR5cGUsXG4gIFNob3dBbGVydCxcbiAgV2hpdGVib2FyZFVwZGF0ZWREYXRhLFxuICBXaGl0ZWJvYXJkVXNlcixcbn0gZnJvbSAnLi4vLi4vLi4vQHR5cGVzL3R5cGVzJztcbmltcG9ydCB7IFNvY2tldCB9IGZyb20gJ3NvY2tldC5pby1jbGllbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ3VyZVdoaXRlYm9hcmRNb2RhbFBhcmFtZXRlcnNcbiAgZXh0ZW5kcyBPblNjcmVlbkNoYW5nZXNQYXJhbWV0ZXJzLFxuICAgIENhcHR1cmVDYW52YXNTdHJlYW1QYXJhbWV0ZXJzLFxuICAgIFByZXBvcHVsYXRlVXNlck1lZGlhUGFyYW1ldGVycyxcbiAgICBSZVBvcnRQYXJhbWV0ZXJzIHtcbiAgcGFydGljaXBhbnRzOiBQYXJ0aWNpcGFudFtdO1xuICBzaG93QWxlcnQ/OiBTaG93QWxlcnQ7XG4gIHNvY2tldDogU29ja2V0O1xuICBpdGVtUGFnZUxpbWl0OiBudW1iZXI7XG4gIGlzbGV2ZWw6IHN0cmluZztcbiAgcm9vbU5hbWU6IHN0cmluZztcbiAgZXZlbnRUeXBlOiBFdmVudFR5cGU7XG4gIHNoYXJlU2NyZWVuU3RhcnRlZDogYm9vbGVhbjtcbiAgc2hhcmVkOiBib29sZWFuO1xuICBicmVha091dFJvb21TdGFydGVkOiBib29sZWFuO1xuICBicmVha091dFJvb21FbmRlZDogYm9vbGVhbjtcbiAgcmVjb3JkU3RhcnRlZDogYm9vbGVhbjtcbiAgcmVjb3JkUmVzdW1lZDogYm9vbGVhbjtcbiAgcmVjb3JkUGF1c2VkOiBib29sZWFuO1xuICByZWNvcmRTdG9wcGVkOiBib29sZWFuO1xuICByZWNvcmRpbmdNZWRpYU9wdGlvbnM6IHN0cmluZztcbiAgY2FuU3RhcnRXaGl0ZWJvYXJkOiBib29sZWFuO1xuICB3aGl0ZWJvYXJkU3RhcnRlZDogYm9vbGVhbjtcbiAgd2hpdGVib2FyZEVuZGVkOiBib29sZWFuO1xuICBob3N0TGFiZWw6IHN0cmluZztcbiAgdXBkYXRlV2hpdGVib2FyZFN0YXJ0ZWQ6IChzdGFydGVkOiBib29sZWFuKSA9PiB2b2lkO1xuICB1cGRhdGVXaGl0ZWJvYXJkRW5kZWQ6IChlbmRlZDogYm9vbGVhbikgPT4gdm9pZDtcbiAgdXBkYXRlV2hpdGVib2FyZFVzZXJzOiAodXNlcnM6IFdoaXRlYm9hcmRVc2VyW10pID0+IHZvaWQ7XG4gIHVwZGF0ZUNhblN0YXJ0V2hpdGVib2FyZDogKGNhblN0YXJ0OiBib29sZWFuKSA9PiB2b2lkO1xuICB1cGRhdGVJc0NvbmZpZ3VyZVdoaXRlYm9hcmRNb2RhbFZpc2libGU6IChpc1Zpc2libGU6IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgLy8gbWVkaWFzZnUgZnVuY3Rpb25zXG4gIG9uU2NyZWVuQ2hhbmdlczogT25TY3JlZW5DaGFuZ2VzVHlwZTtcbiAgY2FwdHVyZUNhbnZhc1N0cmVhbTogQ2FwdHVyZUNhbnZhc1N0cmVhbVR5cGU7XG4gIHByZXBvcHVsYXRlVXNlck1lZGlhOiBQcmVwb3B1bGF0ZVVzZXJNZWRpYVR5cGU7XG4gIHJlUG9ydDogUmVQb3J0VHlwZTtcblxuICBnZXRVcGRhdGVkQWxsUGFyYW1zOiAoKSA9PiBDb25maWd1cmVXaGl0ZWJvYXJkTW9kYWxQYXJhbWV0ZXJzO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsT3B0aW9ucyB7XG4gIGlzQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsVmlzaWJsZTogYm9vbGVhbjtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbiAgcG9zaXRpb24/OiBzdHJpbmc7XG4gIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgcGFyYW1ldGVyczogQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsUGFyYW1ldGVycztcbn1cblxuZXhwb3J0IHR5cGUgQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsVHlwZSA9IChcbiAgb3B0aW9uczogQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsT3B0aW9ucyxcbikgPT4gSFRNTEVsZW1lbnQ7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jb25maWd1cmUtd2hpdGVib2FyZC1tb2RhbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25maWd1cmUtd2hpdGVib2FyZC1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbmZpZ3VyZS13aGl0ZWJvYXJkLW1vZGFsLmNvbXBvbmVudC5jc3MnXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9udEF3ZXNvbWVNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDb25maWd1cmVXaGl0ZWJvYXJkTW9kYWwgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGlzVmlzaWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBwYXJhbWV0ZXJzOiBDb25maWd1cmVXaGl0ZWJvYXJkTW9kYWxQYXJhbWV0ZXJzID1cbiAgICB7fSBhcyBDb25maWd1cmVXaGl0ZWJvYXJkTW9kYWxQYXJhbWV0ZXJzO1xuICBASW5wdXQoKSBiYWNrZ3JvdW5kQ29sb3IgPSAnIzgzYzBlOSc7XG4gIEBJbnB1dCgpIHBvc2l0aW9uID0gJ3RvcFJpZ2h0JztcbiAgQElucHV0KCkgb25Db25maWd1cmVXaGl0ZWJvYXJkQ2xvc2UhOiAoKSA9PiB2b2lkO1xuXG4gIGZhVGltZXMgPSBmYVRpbWVzO1xuICBmYUNoZWNrID0gZmFDaGVjaztcbiAgZmFTeW5jQWx0ID0gZmFTeW5jQWx0O1xuICBmYVBsYXkgPSBmYVBsYXk7XG4gIGZhU2F2ZSA9IGZhU2F2ZTtcblxuICBwYXJ0aWNpcGFudHNDb3B5OiBQYXJ0aWNpcGFudFtdID0gW107XG4gIHdoaXRlYm9hcmRMaW1pdCE6IG51bWJlcjtcbiAgaXNFZGl0aW5nID0gZmFsc2U7XG4gIGNhblN0YXJ0V2hpdGVib2FyZCA9IGZhbHNlO1xuICBhc3NpZ25lZFBhcnRpY2lwYW50czogYW55W10gPSBbXTtcbiAgdW5hc3NpZ25lZFBhcnRpY2lwYW50czogYW55W10gPSBbXTtcbiAgd2hpdGVib2FyZFN0YXJ0ZWQgPSBmYWxzZTtcbiAgd2hpdGVib2FyZEVuZGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBzb2NrZXQ6IFNvY2tldCA9IHt9IGFzIFNvY2tldDtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5wYXJhbWV0ZXJzICYmIHRoaXMuaXNWaXNpYmxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSB0aGlzLnBhcmFtZXRlcnMuZ2V0VXBkYXRlZEFsbFBhcmFtcygpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8qIGhhbmRsZSBlcnJvciAqL1xuICAgICAgfVxuICAgICAgdGhpcy53aGl0ZWJvYXJkTGltaXQgPSB0aGlzLnBhcmFtZXRlcnMuaXRlbVBhZ2VMaW1pdDtcbiAgICAgIHRoaXMud2hpdGVib2FyZFN0YXJ0ZWQgPSB0aGlzLnBhcmFtZXRlcnMud2hpdGVib2FyZFN0YXJ0ZWQ7XG4gICAgICB0aGlzLndoaXRlYm9hcmRFbmRlZCA9IHRoaXMucGFyYW1ldGVycy53aGl0ZWJvYXJkRW5kZWQ7XG4gICAgICB0aGlzLmNoZWNrQ2FuU3RhcnRXaGl0ZWJvYXJkKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFyYW1ldGVycykge1xuICAgICAgdGhpcy5zb2NrZXQgPSB0aGlzLnBhcmFtZXRlcnMuc29ja2V0O1xuICAgICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICAgIHRoaXMuc2V0dXBTb2NrZXRMaXN0ZW5lcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ3BhcmFtZXRlcnMnXSAmJiB0aGlzLnBhcmFtZXRlcnMpIHtcbiAgICAgIGlmICh0aGlzLnBhcmFtZXRlcnMgJiYgdGhpcy5pc1Zpc2libGUpIHtcbiAgICAgICAgdGhpcy53aGl0ZWJvYXJkTGltaXQgPSB0aGlzLnBhcmFtZXRlcnMuaXRlbVBhZ2VMaW1pdDtcbiAgICAgICAgdGhpcy53aGl0ZWJvYXJkU3RhcnRlZCA9IHRoaXMucGFyYW1ldGVycy53aGl0ZWJvYXJkU3RhcnRlZDtcbiAgICAgICAgdGhpcy53aGl0ZWJvYXJkRW5kZWQgPSB0aGlzLnBhcmFtZXRlcnMud2hpdGVib2FyZEVuZGVkO1xuICAgICAgICB0aGlzLmNoZWNrQ2FuU3RhcnRXaGl0ZWJvYXJkKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc29ja2V0ID0gdGhpcy5wYXJhbWV0ZXJzLnNvY2tldDtcbiAgICAgIGlmICh0aGlzLnNvY2tldCkge1xuICAgICAgICB0aGlzLnNldHVwU29ja2V0TGlzdGVuZXJzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2lzVmlzaWJsZSddICYmIHRoaXMuaXNWaXNpYmxlKSB7XG4gICAgICB0aGlzLnBhcmFtZXRlcnMgPSB0aGlzLnBhcmFtZXRlcnMuZ2V0VXBkYXRlZEFsbFBhcmFtcygpO1xuICAgICAgaWYgKCF0aGlzLnBhcnRpY2lwYW50c0NvcHkubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkUGFydGljaXBhbnRzID0gdGhpcy5wYXJhbWV0ZXJzLnBhcnRpY2lwYW50cy5maWx0ZXIoXG4gICAgICAgICAgKHBhcnRpY2lwYW50OiBQYXJ0aWNpcGFudCkgPT4gcGFydGljaXBhbnQuaXNsZXZlbCAhPSAnMicsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGFydGljaXBhbnRzQ29weSA9IGZpbHRlcmVkUGFydGljaXBhbnRzO1xuICAgICAgICB0aGlzLnVwZGF0ZVBhcnRpY2lwYW50c0xpc3RzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmNoZWNrQ2FuU3RhcnRXaGl0ZWJvYXJkKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0dXBTb2NrZXRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuc29ja2V0ICYmIHRoaXMuc29ja2V0IGluc3RhbmNlb2YgU29ja2V0KSB7XG4gICAgICB0aGlzLnNvY2tldC5vbignd2hpdGVib2FyZFVwZGF0ZWQnLCBhc3luYyAoZGF0YTogV2hpdGVib2FyZFVwZGF0ZWREYXRhKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnBhcmFtZXRlcnMuaXNsZXZlbCA9PSAnMicgJiYgZGF0YS5tZW1iZXJzKSB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRQYXJ0aWNpcGFudHMgPSBkYXRhLm1lbWJlcnMuZmlsdGVyKFxuICAgICAgICAgICAgKHBhcnRpY2lwYW50OiBhbnkpID0+ICFwYXJ0aWNpcGFudC5pc0Jhbm5lZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMucGFydGljaXBhbnRzQ29weSA9IGZpbHRlcmVkUGFydGljaXBhbnRzO1xuICAgICAgICAgIHRoaXMudXBkYXRlUGFydGljaXBhbnRzTGlzdHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGFyYW1ldGVycy51cGRhdGVXaGl0ZWJvYXJkVXNlcnMoZGF0YS53aGl0ZWJvYXJkVXNlcnMpO1xuXG4gICAgICAgIGlmIChkYXRhLnN0YXR1cyA9PSAnc3RhcnRlZCcpIHtcbiAgICAgICAgICB0aGlzLndoaXRlYm9hcmRTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLndoaXRlYm9hcmRFbmRlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMucGFyYW1ldGVycy51cGRhdGVXaGl0ZWJvYXJkU3RhcnRlZCh0cnVlKTtcbiAgICAgICAgICB0aGlzLnBhcmFtZXRlcnMudXBkYXRlV2hpdGVib2FyZEVuZGVkKGZhbHNlKTtcblxuICAgICAgICAgIGlmICh0aGlzLnBhcmFtZXRlcnMuaXNsZXZlbCAhPSAnMicpIHtcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldGVycy5zaGFyZVNjcmVlblN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wYXJhbWV0ZXJzLm9uU2NyZWVuQ2hhbmdlcyh7IGNoYW5nZWQ6IHRydWUsIHBhcmFtZXRlcnM6IHRoaXMucGFyYW1ldGVycyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5zdGF0dXMgPT0gJ2VuZGVkJykge1xuICAgICAgICAgIHRoaXMud2hpdGVib2FyZEVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLndoaXRlYm9hcmRTdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnVwZGF0ZVdoaXRlYm9hcmRTdGFydGVkKGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnBhcmFtZXRlcnMudXBkYXRlV2hpdGVib2FyZEVuZGVkKHRydWUpO1xuXG4gICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNoYXJlU2NyZWVuU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgIGF3YWl0IHRoaXMucGFyYW1ldGVycy5vblNjcmVlbkNoYW5nZXMoeyBjaGFuZ2VkOiB0cnVlLCBwYXJhbWV0ZXJzOiB0aGlzLnBhcmFtZXRlcnMgfSk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wYXJhbWV0ZXJzLnByZXBvcHVsYXRlVXNlck1lZGlhKHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMucGFyYW1ldGVycy5ob3N0TGFiZWwsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGlzLnBhcmFtZXRlcnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wYXJhbWV0ZXJzLnJlUG9ydCh7IHJlc3RhcnQ6IHRydWUsIHBhcmFtZXRlcnM6IHRoaXMucGFyYW1ldGVycyB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHRvZ2dsZVBhcnRpY2lwYW50ID0gKHBhcnRpY2lwYW50OiBhbnksIGFkZDogYm9vbGVhbikgPT4ge1xuICAgIHRoaXMuaXNFZGl0aW5nID0gdHJ1ZTtcbiAgICBjb25zdCBzZWxlY3RlZFBhcnRpY2lwYW50cyA9IHRoaXMucGFydGljaXBhbnRzQ29weS5maWx0ZXIoKHApID0+IHAudXNlQm9hcmQpO1xuICAgIGlmIChhZGQgJiYgc2VsZWN0ZWRQYXJ0aWNpcGFudHMubGVuZ3RoID49IHRoaXMud2hpdGVib2FyZExpbWl0IC0gMSkge1xuICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNob3dBbGVydD8uKHtcbiAgICAgICAgbWVzc2FnZTogYFBhcnRpY2lwYW50IGxpbWl0IGV4Y2VlZGVkIC0geW91IGNhbiBvbmx5IGFkZCAke1xuICAgICAgICAgIHRoaXMud2hpdGVib2FyZExpbWl0IC0gMVxuICAgICAgICB9IG90aGVyIHBhcnRpY2lwYW50c2AsXG4gICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYXJ0aWNpcGFudHNDb3B5ID0gdGhpcy5wYXJ0aWNpcGFudHNDb3B5Lm1hcCgocCkgPT5cbiAgICAgIHAubmFtZSA9PT0gcGFydGljaXBhbnQubmFtZSA/IHsgLi4ucCwgdXNlQm9hcmQ6IGFkZCB9IDogcCxcbiAgICApO1xuICAgIHRoaXMudXBkYXRlUGFydGljaXBhbnRzTGlzdHMoKTtcbiAgfTtcblxuICB2YWxpZGF0ZVdoaXRlYm9hcmQoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRQYXJ0aWNpcGFudHMgPSB0aGlzLnBhcnRpY2lwYW50c0NvcHkuZmlsdGVyKFxuICAgICAgKHBhcnRpY2lwYW50KSA9PiBwYXJ0aWNpcGFudC51c2VCb2FyZCxcbiAgICApO1xuICAgIGlmIChzZWxlY3RlZFBhcnRpY2lwYW50cy5sZW5ndGggPiB0aGlzLndoaXRlYm9hcmRMaW1pdCkge1xuICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNob3dBbGVydD8uKHsgbWVzc2FnZTogJ1BhcnRpY2lwYW50IGxpbWl0IGV4Y2VlZGVkJywgdHlwZTogJ2RhbmdlcicgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2hlY2tDYW5TdGFydFdoaXRlYm9hcmQoKSB7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGVXaGl0ZWJvYXJkKCk7XG4gICAgdGhpcy5jYW5TdGFydFdoaXRlYm9hcmQgPSBpc1ZhbGlkO1xuICAgIHRoaXMucGFyYW1ldGVycy51cGRhdGVDYW5TdGFydFdoaXRlYm9hcmQoaXNWYWxpZCk7XG4gIH1cblxuICBoYW5kbGVTYXZlV2hpdGVib2FyZCgpIHtcbiAgICBpZiAodGhpcy52YWxpZGF0ZVdoaXRlYm9hcmQoKSkge1xuICAgICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2FuU3RhcnRXaGl0ZWJvYXJkID0gdHJ1ZTtcbiAgICAgIHRoaXMucGFyYW1ldGVycy51cGRhdGVDYW5TdGFydFdoaXRlYm9hcmQodHJ1ZSk7XG4gICAgICB0aGlzLmNoZWNrQ2FuU3RhcnRXaGl0ZWJvYXJkKCk7XG4gICAgICB0aGlzLnBhcmFtZXRlcnMuc2hvd0FsZXJ0Py4oeyBtZXNzYWdlOiAnV2hpdGVib2FyZCBzYXZlZCBzdWNjZXNzZnVsbHknLCB0eXBlOiAnc3VjY2VzcycgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyYW1ldGVycy5zaG93QWxlcnQ/Lih7IG1lc3NhZ2U6ICdXaGl0ZWJvYXJkIHZhbGlkYXRpb24gZmFpbGVkJywgdHlwZTogJ2RhbmdlcicgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlU3RhcnRXaGl0ZWJvYXJkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNoYXJlU2NyZWVuU3RhcnRlZCxcbiAgICAgIHNoYXJlZCxcbiAgICAgIGJyZWFrT3V0Um9vbVN0YXJ0ZWQsXG4gICAgICBicmVha091dFJvb21FbmRlZCxcbiAgICAgIHJvb21OYW1lLFxuICAgICAgc29ja2V0LFxuICAgICAgcmVjb3JkU3RhcnRlZCxcbiAgICAgIHJlY29yZFJlc3VtZWQsXG4gICAgICByZWNvcmRQYXVzZWQsXG4gICAgICByZWNvcmRTdG9wcGVkLFxuICAgICAgcmVjb3JkaW5nTWVkaWFPcHRpb25zLFxuICAgICAgb25TY3JlZW5DaGFuZ2VzLFxuICAgICAgY2FwdHVyZUNhbnZhc1N0cmVhbSxcbiAgICAgIHNob3dBbGVydCxcbiAgICB9ID0gdGhpcy5wYXJhbWV0ZXJzO1xuXG4gICAgaWYgKChzaGFyZVNjcmVlblN0YXJ0ZWQgfHwgc2hhcmVkKSAmJiAhdGhpcy53aGl0ZWJvYXJkU3RhcnRlZCkge1xuICAgICAgc2hvd0FsZXJ0Py4oe1xuICAgICAgICBtZXNzYWdlOiAnWW91IGNhbm5vdCBzdGFydCB3aGl0ZWJvYXJkIHdoaWxlIHNjcmVlbiBzaGFyaW5nIGlzIGFjdGl2ZScsXG4gICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGJyZWFrT3V0Um9vbVN0YXJ0ZWQgJiYgIWJyZWFrT3V0Um9vbUVuZGVkKSB7XG4gICAgICBzaG93QWxlcnQ/Lih7XG4gICAgICAgIG1lc3NhZ2U6ICdZb3UgY2Fubm90IHN0YXJ0IHdoaXRlYm9hcmQgd2hpbGUgYnJlYWtvdXQgcm9vbXMgYXJlIGFjdGl2ZScsXG4gICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2FuU3RhcnRXaGl0ZWJvYXJkKSB7XG4gICAgICBjb25zdCBlbWl0TmFtZSA9XG4gICAgICAgIHRoaXMud2hpdGVib2FyZFN0YXJ0ZWQgJiYgIXRoaXMud2hpdGVib2FyZEVuZGVkID8gJ3VwZGF0ZVdoaXRlYm9hcmQnIDogJ3N0YXJ0V2hpdGVib2FyZCc7XG4gICAgICBjb25zdCBmaWx0ZXJlZFdoaXRlYm9hcmRVc2VycyA9IHRoaXMucGFydGljaXBhbnRzQ29weVxuICAgICAgICAuZmlsdGVyKChwYXJ0aWNpcGFudCkgPT4gcGFydGljaXBhbnQudXNlQm9hcmQpXG4gICAgICAgIC5tYXAoKHsgbmFtZSwgdXNlQm9hcmQgfSkgPT4gKHsgbmFtZSwgdXNlQm9hcmQgfSkpO1xuICAgICAgc29ja2V0LmVtaXQoXG4gICAgICAgIGVtaXROYW1lLFxuICAgICAgICB7IHdoaXRlYm9hcmRVc2VyczogZmlsdGVyZWRXaGl0ZWJvYXJkVXNlcnMsIHJvb21OYW1lIH0sXG4gICAgICAgIGFzeW5jIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHNob3dBbGVydD8uKHsgbWVzc2FnZTogJ1doaXRlYm9hcmQgYWN0aXZlJywgdHlwZTogJ3N1Y2Nlc3MnIH0pO1xuICAgICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLndoaXRlYm9hcmRTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldGVycy53aGl0ZWJvYXJkRW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldGVycy51cGRhdGVXaGl0ZWJvYXJkU3RhcnRlZCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldGVycy51cGRhdGVXaGl0ZWJvYXJkRW5kZWQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnVwZGF0ZUlzQ29uZmlndXJlV2hpdGVib2FyZE1vZGFsVmlzaWJsZShmYWxzZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmFtZXRlcnMuaXNsZXZlbCAhPSAnMicpIHtcbiAgICAgICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLnNoYXJlU2NyZWVuU3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGF3YWl0IG9uU2NyZWVuQ2hhbmdlcyh7IGNoYW5nZWQ6IHRydWUsIHBhcmFtZXRlcnM6IHRoaXMucGFyYW1ldGVycyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucGFyYW1ldGVycy5pc2xldmVsID09ICcyJyAmJiAocmVjb3JkU3RhcnRlZCB8fCByZWNvcmRSZXN1bWVkKSkge1xuICAgICAgICAgICAgICBpZiAoIShyZWNvcmRQYXVzZWQgfHwgcmVjb3JkU3RvcHBlZCkgJiYgcmVjb3JkaW5nTWVkaWFPcHRpb25zID09ICd2aWRlbycpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjYXB0dXJlQ2FudmFzU3RyZWFtKHsgcGFyYW1ldGVyczogdGhpcy5wYXJhbWV0ZXJzIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNob3dBbGVydD8uKHsgbWVzc2FnZTogcmVzcG9uc2UucmVhc29uLCB0eXBlOiAnZGFuZ2VyJyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVN0b3BXaGl0ZWJvYXJkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvb21OYW1lLFxuICAgICAgc29ja2V0LFxuICAgICAgc2hvd0FsZXJ0LFxuICAgICAgdXBkYXRlV2hpdGVib2FyZFN0YXJ0ZWQsXG4gICAgICB1cGRhdGVXaGl0ZWJvYXJkRW5kZWQsXG4gICAgICB1cGRhdGVJc0NvbmZpZ3VyZVdoaXRlYm9hcmRNb2RhbFZpc2libGUsXG4gICAgICBvblNjcmVlbkNoYW5nZXMsXG4gICAgICBwcmVwb3B1bGF0ZVVzZXJNZWRpYSxcbiAgICAgIHJlUG9ydCxcbiAgICAgIGhvc3RMYWJlbCxcbiAgICB9ID0gdGhpcy5wYXJhbWV0ZXJzO1xuICAgIHNvY2tldC5lbWl0KCdzdG9wV2hpdGVib2FyZCcsIHsgcm9vbU5hbWUgfSwgYXN5bmMgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgIHNob3dBbGVydD8uKHsgbWVzc2FnZTogJ1doaXRlYm9hcmQgc3RvcHBlZCcsIHR5cGU6ICdzdWNjZXNzJyB9KTtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLndoaXRlYm9hcmRFbmRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucGFyYW1ldGVycy53aGl0ZWJvYXJkU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB1cGRhdGVXaGl0ZWJvYXJkU3RhcnRlZChmYWxzZSk7XG4gICAgICAgIHVwZGF0ZVdoaXRlYm9hcmRFbmRlZCh0cnVlKTtcbiAgICAgICAgdXBkYXRlSXNDb25maWd1cmVXaGl0ZWJvYXJkTW9kYWxWaXNpYmxlKGZhbHNlKTtcblxuICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2hhcmVTY3JlZW5TdGFydGVkID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IG9uU2NyZWVuQ2hhbmdlcyh7IGNoYW5nZWQ6IHRydWUsIHBhcmFtZXRlcnM6IHRoaXMucGFyYW1ldGVycyB9KTtcbiAgICAgICAgYXdhaXQgcHJlcG9wdWxhdGVVc2VyTWVkaWEoeyBuYW1lOiBob3N0TGFiZWwsIHBhcmFtZXRlcnM6IHRoaXMucGFyYW1ldGVycyB9KTtcbiAgICAgICAgYXdhaXQgcmVQb3J0KHsgcmVzdGFydDogdHJ1ZSwgcGFyYW1ldGVyczogdGhpcy5wYXJhbWV0ZXJzIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hvd0FsZXJ0Py4oeyBtZXNzYWdlOiByZXNwb25zZS5yZWFzb24sIHR5cGU6ICdkYW5nZXInIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbW9kYWxDb250YWluZXJTdHlsZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICB0b3A6IDAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjUpJyxcbiAgICAgIGRpc3BsYXk6IHRoaXMuaXNWaXNpYmxlID8gJ2Jsb2NrJyA6ICdub25lJyxcbiAgICAgIHpJbmRleDogOTk5LFxuICAgIH07XG4gIH1cblxuICBtb2RhbENvbnRlbnRTdHlsZSgpIHtcbiAgICBjb25zdCBzY3JlZW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGxldCBtb2RhbFdpZHRoID0gMC43ICogc2NyZWVuV2lkdGg7XG4gICAgaWYgKG1vZGFsV2lkdGggPiA0MDApIHtcbiAgICAgIG1vZGFsV2lkdGggPSA0MDA7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBib3JkZXJSYWRpdXM6ICcxMHB4JyxcbiAgICAgIHBhZGRpbmc6ICcxMHB4JyxcbiAgICAgIHdpZHRoOiBtb2RhbFdpZHRoICsgJ3B4JyxcbiAgICAgIG1heFdpZHRoOiBtb2RhbFdpZHRoICsgJ3B4JyxcbiAgICAgIG1heEhlaWdodDogJzc1JScsXG4gICAgICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgICAgIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gICAgICB0b3A6IHRoaXMucG9zaXRpb24uaW5jbHVkZXMoJ3RvcCcpID8gJzEwcHgnIDogJ2F1dG8nLFxuICAgICAgYm90dG9tOiB0aGlzLnBvc2l0aW9uLmluY2x1ZGVzKCdib3R0b20nKSA/ICcxMHB4JyA6ICdhdXRvJyxcbiAgICAgIGxlZnQ6IHRoaXMucG9zaXRpb24uaW5jbHVkZXMoJ0xlZnQnKSA/ICcxMHB4JyA6ICdhdXRvJyxcbiAgICAgIHJpZ2h0OiB0aGlzLnBvc2l0aW9uLmluY2x1ZGVzKCdSaWdodCcpID8gJzEwcHgnIDogJ2F1dG8nLFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVQYXJ0aWNpcGFudHNMaXN0cyA9ICgpID0+IHtcbiAgICB0aGlzLmFzc2lnbmVkUGFydGljaXBhbnRzID0gdGhpcy5wYXJ0aWNpcGFudHNDb3B5LmZpbHRlcigocCkgPT4gcC51c2VCb2FyZCk7XG4gICAgdGhpcy51bmFzc2lnbmVkUGFydGljaXBhbnRzID0gdGhpcy5wYXJ0aWNpcGFudHNDb3B5LmZpbHRlcigocCkgPT4gIXAudXNlQm9hcmQpO1xuICB9O1xufVxuIiwiPGRpdiBbbmdTdHlsZV09XCJtb2RhbENvbnRhaW5lclN0eWxlKClcIj5cclxuICA8ZGl2IFtuZ1N0eWxlXT1cIm1vZGFsQ29udGVudFN0eWxlKClcIj5cclxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1wiPlxyXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOyBtYXJnaW4tYm90dG9tOiAxNXB4O1wiPlxyXG4gICAgICAgIDxoMiBzdHlsZT1cImZvbnQtc2l6ZTogeC1sYXJnZTsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiBibGFjaztcIj5cclxuICAgICAgICAgIENvbmZpZ3VyZSBXaGl0ZWJvYXJkXHJcbiAgICAgICAgPC9oMj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvbkNvbmZpZ3VyZVdoaXRlYm9hcmRDbG9zZSgpXCIgc3R5bGU9XCJib3JkZXI6IG5vbmU7IGJhY2tncm91bmQ6IG5vbmU7IGN1cnNvcjogcG9pbnRlcjtcIj5cclxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhVGltZXNcIiBzaXplPVwieGxcIiBzdHlsZT1cImZvbnQtc2l6ZTogMjBweDsgY29sb3I6IGJsYWNrO1wiPjwvZmEtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgPGg2PkFzc2lnbmVkPC9oNj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cFwiIHN0eWxlPVwibWF4LWhlaWdodDogMjAwcHg7IG92ZXJmbG93LXk6IGF1dG87IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFzc2lnbmVkUGFydGljaXBhbnRzLmxlbmd0aCA+IDA7IGVsc2Ugbm9Bc3NpZ25lZFBhcnRpY2lwYW50c1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBwYXJ0aWNpcGFudCBvZiBhc3NpZ25lZFBhcnRpY2lwYW50c1wiIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1kYXJrIG1iLTIgbXItMlwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBwYXJ0aWNpcGFudC5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tc20gbXItMiBtbC0yXCIgKGNsaWNrKT1cInRvZ2dsZVBhcnRpY2lwYW50KHBhcnRpY2lwYW50LCBmYWxzZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYVRpbWVzXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0Fzc2lnbmVkUGFydGljaXBhbnRzPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1kYXJrXCI+XHJcbiAgICAgICAgICAgICAgICAgIE5vbmVcclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG10LXhzLTMgbWItM1wiPlxyXG4gICAgICAgICAgICA8aDY+UGVuZGluZzwvaDY+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXBcIiBzdHlsZT1cIm1heC1oZWlnaHQ6IDIwMHB4OyBvdmVyZmxvdy15OiBhdXRvOyBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1wiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1bmFzc2lnbmVkUGFydGljaXBhbnRzLmxlbmd0aCA+IDA7IGVsc2Ugbm9QZW5kaW5nUGFydGljaXBhbnRzXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHBhcnRpY2lwYW50IG9mIHVuYXNzaWduZWRQYXJ0aWNpcGFudHNcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHRleHQtZGFyayBtYi0yIG1yLTJcIj5cclxuICAgICAgICAgICAgICAgICAge3sgcGFydGljaXBhbnQubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBtci0yIG1sLTJcIiAoY2xpY2spPVwidG9nZ2xlUGFydGljaXBhbnQocGFydGljaXBhbnQsIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFDaGVja1wiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9QZW5kaW5nUGFydGljaXBhbnRzPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1kYXJrXCI+XHJcbiAgICAgICAgICAgICAgICAgIE5vbmVcclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1pbmZvXCIgKGNsaWNrKT1cImhhbmRsZVNhdmVXaGl0ZWJvYXJkKClcIj5cclxuICAgICAgICAgIFNhdmUgPGZhLWljb24gW2ljb25dPVwiZmFTYXZlXCI+PC9mYS1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGhyIC8+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhaXNFZGl0aW5nXCI+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNhblN0YXJ0V2hpdGVib2FyZCAmJiB3aGl0ZWJvYXJkU3RhcnRlZCAmJiAhd2hpdGVib2FyZEVuZGVkXCIgY2xhc3M9XCJidG4gYnRuLXdhcm5pbmcgbWItMiBtci0yXCIgKGNsaWNrKT1cImhhbmRsZVN0YXJ0V2hpdGVib2FyZCgpXCI+XHJcbiAgICAgICAgICBVcGRhdGUgPGZhLWljb24gW2ljb25dPVwiZmFTeW5jQWx0XCI+PC9mYS1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJjYW5TdGFydFdoaXRlYm9hcmQgJiYgIXdoaXRlYm9hcmRTdGFydGVkXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgbWItMiBtci0yXCIgKGNsaWNrKT1cImhhbmRsZVN0YXJ0V2hpdGVib2FyZCgpXCI+XHJcbiAgICAgICAgICBTdGFydCA8ZmEtaWNvbiBbaWNvbl09XCJmYVBsYXlcIj48L2ZhLWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndoaXRlYm9hcmRTdGFydGVkICYmICF3aGl0ZWJvYXJkRW5kZWRcIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIG1iLTIgbWwtMlwiIChjbGljayk9XCJoYW5kbGVTdG9wV2hpdGVib2FyZCgpXCI+XHJcbiAgICAgICAgICBTdG9wIDxmYS1pY29uIFtpY29uXT1cImZhVGltZXNcIj48L2ZhLWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=