mediasfu-angular 1.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 (471) hide show
  1. package/README.md +2068 -0
  2. package/dist/README.md +2068 -0
  3. package/dist/esm2022/lib/@types/types.mjs +2 -0
  4. package/dist/esm2022/lib/components/background-components/background-modal/background-modal.component.mjs +763 -0
  5. package/dist/esm2022/lib/components/breakout-components/breakout-rooms-modal.component.mjs +316 -0
  6. package/dist/esm2022/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.mjs +95 -0
  7. package/dist/esm2022/lib/components/breakout-components/room-list/room-list.component.mjs +40 -0
  8. package/dist/esm2022/lib/components/co-host-components/co-host-modal/co-host-modal.component.mjs +246 -0
  9. package/dist/esm2022/lib/components/display-components/alert-component/alert.component.component.mjs +73 -0
  10. package/dist/esm2022/lib/components/display-components/audio-card/audio-card.component.mjs +297 -0
  11. package/dist/esm2022/lib/components/display-components/audio-grid/audio-grid.component.mjs +60 -0
  12. package/dist/esm2022/lib/components/display-components/card-video-display/card-video-display.component.mjs +94 -0
  13. package/dist/esm2022/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.mjs +100 -0
  14. package/dist/esm2022/lib/components/display-components/control-buttons-component/control-buttons-component.component.mjs +231 -0
  15. package/dist/esm2022/lib/components/display-components/control-buttons-component-touch/control-buttons-component-touch.component.mjs +298 -0
  16. package/dist/esm2022/lib/components/display-components/control-widgets/menu-participants-widget.component.mjs +61 -0
  17. package/dist/esm2022/lib/components/display-components/control-widgets/menu-record-widget.component.mjs +43 -0
  18. package/dist/esm2022/lib/components/display-components/control-widgets/menu-widget.component.mjs +114 -0
  19. package/dist/esm2022/lib/components/display-components/control-widgets/message-widget.component.mjs +114 -0
  20. package/dist/esm2022/lib/components/display-components/control-widgets/record-timer-widget.component.mjs +36 -0
  21. package/dist/esm2022/lib/components/display-components/control-widgets/screenshare-widget.component.mjs +74 -0
  22. package/dist/esm2022/lib/components/display-components/flexible-grid/flexible-grid.component.mjs +142 -0
  23. package/dist/esm2022/lib/components/display-components/flexible-video/flexible-video.component.mjs +265 -0
  24. package/dist/esm2022/lib/components/display-components/loading-modal/loading-modal.component.mjs +100 -0
  25. package/dist/esm2022/lib/components/display-components/main-aspect-component/main-aspect-component.component.mjs +132 -0
  26. package/dist/esm2022/lib/components/display-components/main-container-component/main-container-component.component.mjs +119 -0
  27. package/dist/esm2022/lib/components/display-components/main-grid-component/main-grid-component.component.mjs +106 -0
  28. package/dist/esm2022/lib/components/display-components/main-screen-component/main-screen-component.component.mjs +180 -0
  29. package/dist/esm2022/lib/components/display-components/meeting-progress-timer/meeting-progress-timer.component.mjs +120 -0
  30. package/dist/esm2022/lib/components/display-components/mini-audio/mini-audio.component.mjs +326 -0
  31. package/dist/esm2022/lib/components/display-components/mini-card/mini-card.component.mjs +165 -0
  32. package/dist/esm2022/lib/components/display-components/mini-card-audio/mini-card-audio.component.mjs +230 -0
  33. package/dist/esm2022/lib/components/display-components/other-grid-component/other-grid-component.component.mjs +111 -0
  34. package/dist/esm2022/lib/components/display-components/pagination/pagination.component.mjs +328 -0
  35. package/dist/esm2022/lib/components/display-components/sub-aspect-component/sub-aspect-component.component.mjs +118 -0
  36. package/dist/esm2022/lib/components/display-components/video-card/video-card.component.mjs +330 -0
  37. package/dist/esm2022/lib/components/display-settings-components/display-settings-modal.component.mjs +95 -0
  38. package/dist/esm2022/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.mjs +190 -0
  39. package/dist/esm2022/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.mjs +119 -0
  40. package/dist/esm2022/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.mjs +209 -0
  41. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-broadcast.component.mjs +4187 -0
  42. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-chat.component.mjs +3703 -0
  43. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-conference.component.mjs +5022 -0
  44. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-generic.component.mjs +5331 -0
  45. package/dist/esm2022/lib/components/mediasfu-components/mediasfu-webinar.component.mjs +5021 -0
  46. package/dist/esm2022/lib/components/menu-components/custom-buttons/custom-buttons.component.mjs +85 -0
  47. package/dist/esm2022/lib/components/menu-components/meeting-id-component/meeting-id-component.component.mjs +22 -0
  48. package/dist/esm2022/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.mjs +22 -0
  49. package/dist/esm2022/lib/components/menu-components/menu-modal/menu-modal.component.mjs +132 -0
  50. package/dist/esm2022/lib/components/menu-components/share-buttons-component/share-buttons-component.component.mjs +104 -0
  51. package/dist/esm2022/lib/components/message-components/message-panel/message-panel.component.mjs +204 -0
  52. package/dist/esm2022/lib/components/message-components/messages-modal/messages-modal.component.mjs +243 -0
  53. package/dist/esm2022/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.mjs +147 -0
  54. package/dist/esm2022/lib/components/misc-components/pre-join-page/pre-join-page.component.mjs +335 -0
  55. package/dist/esm2022/lib/components/misc-components/share-event-modal/share-event-modal.component.mjs +113 -0
  56. package/dist/esm2022/lib/components/misc-components/welcome-page/welcome-page.component.mjs +226 -0
  57. package/dist/esm2022/lib/components/participants-components/participant-list/participant-list.component.mjs +63 -0
  58. package/dist/esm2022/lib/components/participants-components/participant-list-item/participant-list-item.component.mjs +120 -0
  59. package/dist/esm2022/lib/components/participants-components/participant-list-others/participant-list-others.component.mjs +23 -0
  60. package/dist/esm2022/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.mjs +43 -0
  61. package/dist/esm2022/lib/components/participants-components/participants-modal/participants-modal.component.mjs +100 -0
  62. package/dist/esm2022/lib/components/polls-components/poll-modal/poll-modal.component.mjs +174 -0
  63. package/dist/esm2022/lib/components/recording-components/advanced-panel-component/advanced-panel-components.component.mjs +77 -0
  64. package/dist/esm2022/lib/components/recording-components/recording-modal/recording-modal.component.mjs +121 -0
  65. package/dist/esm2022/lib/components/recording-components/standard-panel-component/standard-panel-component.component.mjs +85 -0
  66. package/dist/esm2022/lib/components/requests-components/render-request-component/render-request-component.component.mjs +59 -0
  67. package/dist/esm2022/lib/components/requests-components/requests-modal/requests-modal.component.mjs +130 -0
  68. package/dist/esm2022/lib/components/screenboard-components/screenboard/screenboard.component.mjs +617 -0
  69. package/dist/esm2022/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.mjs +380 -0
  70. package/dist/esm2022/lib/components/waiting-components/waiting-room-modal.component.mjs +142 -0
  71. package/dist/esm2022/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.mjs +265 -0
  72. package/dist/esm2022/lib/components/whiteboard-components/whiteboard/whiteboard.component.mjs +1784 -0
  73. package/dist/esm2022/lib/consumers/add-videos-grid.service.mjs +296 -0
  74. package/dist/esm2022/lib/consumers/auto-adjust.service.mjs +83 -0
  75. package/dist/esm2022/lib/consumers/calculate-rows-and-columns.service.mjs +42 -0
  76. package/dist/esm2022/lib/consumers/change-vids.service.mjs +486 -0
  77. package/dist/esm2022/lib/consumers/check-grid.service.mjs +79 -0
  78. package/dist/esm2022/lib/consumers/check-permission.service.mjs +80 -0
  79. package/dist/esm2022/lib/consumers/check-screen-share.service.mjs +71 -0
  80. package/dist/esm2022/lib/consumers/close-and-resize.service.mjs +229 -0
  81. package/dist/esm2022/lib/consumers/compare-active-names.service.mjs +75 -0
  82. package/dist/esm2022/lib/consumers/compare-screen-states.service.mjs +63 -0
  83. package/dist/esm2022/lib/consumers/connect-ips.service.mjs +112 -0
  84. package/dist/esm2022/lib/consumers/connect-recv-transport.service.mjs +113 -0
  85. package/dist/esm2022/lib/consumers/connect-send-transport-audio.service.mjs +46 -0
  86. package/dist/esm2022/lib/consumers/connect-send-transport-screen.service.mjs +62 -0
  87. package/dist/esm2022/lib/consumers/connect-send-transport-video.service.mjs +55 -0
  88. package/dist/esm2022/lib/consumers/connect-send-transport.service.mjs +86 -0
  89. package/dist/esm2022/lib/consumers/consumer-resume.service.mjs +332 -0
  90. package/dist/esm2022/lib/consumers/control-media.service.mjs +68 -0
  91. package/dist/esm2022/lib/consumers/create-send-transport.service.mjs +126 -0
  92. package/dist/esm2022/lib/consumers/disconnect-send-transport-audio.service.mjs +58 -0
  93. package/dist/esm2022/lib/consumers/disconnect-send-transport-screen.service.mjs +45 -0
  94. package/dist/esm2022/lib/consumers/disconnect-send-transport-video.service.mjs +56 -0
  95. package/dist/esm2022/lib/consumers/disp-streams.service.mjs +421 -0
  96. package/dist/esm2022/lib/consumers/generate-page-content.service.mjs +59 -0
  97. package/dist/esm2022/lib/consumers/get-estimate.service.mjs +70 -0
  98. package/dist/esm2022/lib/consumers/get-piped-producers-alt.service.mjs +49 -0
  99. package/dist/esm2022/lib/consumers/get-producers-piped.service.mjs +46 -0
  100. package/dist/esm2022/lib/consumers/get-videos.service.mjs +58 -0
  101. package/dist/esm2022/lib/consumers/mix-streams.service.mjs +73 -0
  102. package/dist/esm2022/lib/consumers/on-screen-changes.service.mjs +63 -0
  103. package/dist/esm2022/lib/consumers/prepopulate-user-media.service.mjs +442 -0
  104. package/dist/esm2022/lib/consumers/process-consumer-transports-audio.service.mjs +72 -0
  105. package/dist/esm2022/lib/consumers/process-consumer-transports.service.mjs +91 -0
  106. package/dist/esm2022/lib/consumers/re-port.service.mjs +66 -0
  107. package/dist/esm2022/lib/consumers/re-update-inter.service.mjs +157 -0
  108. package/dist/esm2022/lib/consumers/readjust.service.mjs +123 -0
  109. package/dist/esm2022/lib/consumers/receive-all-piped-transports.service.mjs +56 -0
  110. package/dist/esm2022/lib/consumers/receive-room-messages.service.mjs +42 -0
  111. package/dist/esm2022/lib/consumers/reorder-streams.service.mjs +181 -0
  112. package/dist/esm2022/lib/consumers/request-screen-share.service.mjs +67 -0
  113. package/dist/esm2022/lib/consumers/resume-pause-audio-streams.service.mjs +99 -0
  114. package/dist/esm2022/lib/consumers/resume-pause-streams.service.mjs +70 -0
  115. package/dist/esm2022/lib/consumers/resume-send-transport-audio.service.mjs +55 -0
  116. package/dist/esm2022/lib/consumers/signal-new-consumer-transport.service.mjs +136 -0
  117. package/dist/esm2022/lib/consumers/socket-receive-methods/join-consume-room.service.mjs +63 -0
  118. package/dist/esm2022/lib/consumers/socket-receive-methods/new-pipe-producer.service.mjs +61 -0
  119. package/dist/esm2022/lib/consumers/socket-receive-methods/producer-closed.service.mjs +51 -0
  120. package/dist/esm2022/lib/consumers/start-share-screen.service.mjs +80 -0
  121. package/dist/esm2022/lib/consumers/stop-share-screen.service.mjs +120 -0
  122. package/dist/esm2022/lib/consumers/stream-success-audio-switch.service.mjs +132 -0
  123. package/dist/esm2022/lib/consumers/stream-success-audio.service.mjs +149 -0
  124. package/dist/esm2022/lib/consumers/stream-success-screen.service.mjs +143 -0
  125. package/dist/esm2022/lib/consumers/stream-success-video.service.mjs +202 -0
  126. package/dist/esm2022/lib/consumers/switch-user-audio.service.mjs +87 -0
  127. package/dist/esm2022/lib/consumers/switch-user-video-alt.service.mjs +228 -0
  128. package/dist/esm2022/lib/consumers/switch-user-video.service.mjs +125 -0
  129. package/dist/esm2022/lib/consumers/trigger.service.mjs +172 -0
  130. package/dist/esm2022/lib/consumers/update-mini-cards-grid.service.mjs +81 -0
  131. package/dist/esm2022/lib/consumers/update-participant-audio-decibels.service.mjs +39 -0
  132. package/dist/esm2022/lib/methods/background-methods/launch-background.service.mjs +23 -0
  133. package/dist/esm2022/lib/methods/breakout-room-methods/breakout-room-updated.service.mjs +112 -0
  134. package/dist/esm2022/lib/methods/breakout-room-methods/launch-breakout-rooms.service.mjs +22 -0
  135. package/dist/esm2022/lib/methods/co-host-methods/launch-co-host.service.mjs +22 -0
  136. package/dist/esm2022/lib/methods/co-host-methods/modify-co-host-settings.service.mjs +60 -0
  137. package/dist/esm2022/lib/methods/display-settings-methods/launch-display-settings.service.mjs +24 -0
  138. package/dist/esm2022/lib/methods/display-settings-methods/modify-display-settings.service.mjs +119 -0
  139. package/dist/esm2022/lib/methods/exit-methods/confirm-exit.service.mjs +28 -0
  140. package/dist/esm2022/lib/methods/exit-methods/launch-confirm-exit.service.mjs +22 -0
  141. package/dist/esm2022/lib/methods/media-settings-methods/launch-media-settings.service.mjs +50 -0
  142. package/dist/esm2022/lib/methods/menu-methods/launch-menu-modal.service.mjs +22 -0
  143. package/dist/esm2022/lib/methods/message-methods/launch-messages.service.mjs +23 -0
  144. package/dist/esm2022/lib/methods/message-methods/send-message.service.mjs +94 -0
  145. package/dist/esm2022/lib/methods/participants-methods/launch-participants.service.mjs +23 -0
  146. package/dist/esm2022/lib/methods/participants-methods/message-participants.service.mjs +52 -0
  147. package/dist/esm2022/lib/methods/participants-methods/mute-participants.service.mjs +57 -0
  148. package/dist/esm2022/lib/methods/participants-methods/remove-participants.service.mjs +62 -0
  149. package/dist/esm2022/lib/methods/polls-methods/handle-create-poll.service.mjs +37 -0
  150. package/dist/esm2022/lib/methods/polls-methods/handle-end-poll.service.mjs +40 -0
  151. package/dist/esm2022/lib/methods/polls-methods/handle-vote-poll.service.mjs +49 -0
  152. package/dist/esm2022/lib/methods/polls-methods/launch-poll.service.mjs +23 -0
  153. package/dist/esm2022/lib/methods/polls-methods/poll-updated.service.mjs +64 -0
  154. package/dist/esm2022/lib/methods/recording-methods/check-pause-state.service.mjs +45 -0
  155. package/dist/esm2022/lib/methods/recording-methods/check-resume-state.service.mjs +34 -0
  156. package/dist/esm2022/lib/methods/recording-methods/confirm-recording.service.mjs +215 -0
  157. package/dist/esm2022/lib/methods/recording-methods/launch-recording.service.mjs +82 -0
  158. package/dist/esm2022/lib/methods/recording-methods/record-pause-timer.service.mjs +40 -0
  159. package/dist/esm2022/lib/methods/recording-methods/record-resume-timer.service.mjs +86 -0
  160. package/dist/esm2022/lib/methods/recording-methods/record-start-timer.service.mjs +89 -0
  161. package/dist/esm2022/lib/methods/recording-methods/record-update-timer.service.mjs +48 -0
  162. package/dist/esm2022/lib/methods/recording-methods/start-recording.service.mjs +147 -0
  163. package/dist/esm2022/lib/methods/recording-methods/stop-recording.service.mjs +74 -0
  164. package/dist/esm2022/lib/methods/recording-methods/update-recording.service.mjs +224 -0
  165. package/dist/esm2022/lib/methods/requests-methods/launch-requests.service.mjs +26 -0
  166. package/dist/esm2022/lib/methods/requests-methods/respond-to-requests.service.mjs +45 -0
  167. package/dist/esm2022/lib/methods/settings-methods/launch-settings.service.mjs +26 -0
  168. package/dist/esm2022/lib/methods/settings-methods/modify-settings.service.mjs +67 -0
  169. package/dist/esm2022/lib/methods/stream-methods/click-audio.service.mjs +178 -0
  170. package/dist/esm2022/lib/methods/stream-methods/click-chat.service.mjs +44 -0
  171. package/dist/esm2022/lib/methods/stream-methods/click-screen-share.service.mjs +110 -0
  172. package/dist/esm2022/lib/methods/stream-methods/click-video.service.mjs +183 -0
  173. package/dist/esm2022/lib/methods/stream-methods/switch-audio.service.mjs +33 -0
  174. package/dist/esm2022/lib/methods/stream-methods/switch-video-alt.service.mjs +66 -0
  175. package/dist/esm2022/lib/methods/stream-methods/switch-video.service.mjs +76 -0
  176. package/dist/esm2022/lib/methods/utils/format-number.service.mjs +45 -0
  177. package/dist/esm2022/lib/methods/utils/generate-random-messages.service.mjs +87 -0
  178. package/dist/esm2022/lib/methods/utils/generate-random-participants.service.mjs +99 -0
  179. package/dist/esm2022/lib/methods/utils/generate-random-polls.service.mjs +52 -0
  180. package/dist/esm2022/lib/methods/utils/generate-random-request-list.service.mjs +54 -0
  181. package/dist/esm2022/lib/methods/utils/generate-random-waiting-room-list.service.mjs +38 -0
  182. package/dist/esm2022/lib/methods/utils/get-modal-position.util.mjs +22 -0
  183. package/dist/esm2022/lib/methods/utils/get-overlay-position.util.mjs +21 -0
  184. package/dist/esm2022/lib/methods/utils/initial-values.util.mjs +369 -0
  185. package/dist/esm2022/lib/methods/utils/meeting-timer/start-meeting-progress-timer.service.mjs +59 -0
  186. package/dist/esm2022/lib/methods/utils/mini-audio-player/mini-audio-player.component.mjs +260 -0
  187. package/dist/esm2022/lib/methods/utils/producer/a-params.service.mjs +21 -0
  188. package/dist/esm2022/lib/methods/utils/producer/h-params.service.mjs +37 -0
  189. package/dist/esm2022/lib/methods/utils/producer/screen-params.service.mjs +24 -0
  190. package/dist/esm2022/lib/methods/utils/producer/v-params.service.mjs +37 -0
  191. package/dist/esm2022/lib/methods/utils/producer/video-capture-constraints.service.mjs +38 -0
  192. package/dist/esm2022/lib/methods/utils/sleep.util.mjs +11 -0
  193. package/dist/esm2022/lib/methods/utils/sound-player.service.mjs +42 -0
  194. package/dist/esm2022/lib/methods/utils/validate-alphanumeric.service.mjs +33 -0
  195. package/dist/esm2022/lib/methods/waiting-methods/launch-waiting.service.mjs +23 -0
  196. package/dist/esm2022/lib/methods/waiting-methods/respond-to-waiting.service.mjs +40 -0
  197. package/dist/esm2022/lib/methods/whiteboard-methods/capture-canvas-stream.service.mjs +69 -0
  198. package/dist/esm2022/lib/methods/whiteboard-methods/launch-configure-whiteboard.service.mjs +24 -0
  199. package/dist/esm2022/lib/producer-client/producer-client-emits/create-device-client.service.mjs +51 -0
  200. package/dist/esm2022/lib/producer-client/producer-client-emits/join-room-client.service.mjs +65 -0
  201. package/dist/esm2022/lib/producer-client/producer-client-emits/update-room-parameters-client.service.mjs +232 -0
  202. package/dist/esm2022/lib/producers/producer-emits/join-con-room.service.mjs +114 -0
  203. package/dist/esm2022/lib/producers/producer-emits/join-room.service.mjs +114 -0
  204. package/dist/esm2022/lib/producers/socket-receive-methods/all-members-rest.service.mjs +155 -0
  205. package/dist/esm2022/lib/producers/socket-receive-methods/all-members.service.mjs +147 -0
  206. package/dist/esm2022/lib/producers/socket-receive-methods/all-waiting-room-members.service.mjs +30 -0
  207. package/dist/esm2022/lib/producers/socket-receive-methods/ban-participant.service.mjs +40 -0
  208. package/dist/esm2022/lib/producers/socket-receive-methods/control-media-host.service.mjs +146 -0
  209. package/dist/esm2022/lib/producers/socket-receive-methods/disconnect-user-self.service.mjs +26 -0
  210. package/dist/esm2022/lib/producers/socket-receive-methods/disconnect.service.mjs +38 -0
  211. package/dist/esm2022/lib/producers/socket-receive-methods/get-domains.service.mjs +63 -0
  212. package/dist/esm2022/lib/producers/socket-receive-methods/host-request-response.service.mjs +167 -0
  213. package/dist/esm2022/lib/producers/socket-receive-methods/meeting-ended.service.mjs +44 -0
  214. package/dist/esm2022/lib/producers/socket-receive-methods/meeting-still-there.service.mjs +24 -0
  215. package/dist/esm2022/lib/producers/socket-receive-methods/meeting-time-remaining.service.mjs +36 -0
  216. package/dist/esm2022/lib/producers/socket-receive-methods/participant-requested.service.mjs +32 -0
  217. package/dist/esm2022/lib/producers/socket-receive-methods/person-joined.service.mjs +29 -0
  218. package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-closed.service.mjs +68 -0
  219. package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-paused.service.mjs +90 -0
  220. package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-resumed.service.mjs +54 -0
  221. package/dist/esm2022/lib/producers/socket-receive-methods/re-initiate-recording.service.mjs +38 -0
  222. package/dist/esm2022/lib/producers/socket-receive-methods/receive-message.service.mjs +96 -0
  223. package/dist/esm2022/lib/producers/socket-receive-methods/recording-notice.service.mjs +195 -0
  224. package/dist/esm2022/lib/producers/socket-receive-methods/room-record-params.service.mjs +59 -0
  225. package/dist/esm2022/lib/producers/socket-receive-methods/screen-producer-id.service.mjs +45 -0
  226. package/dist/esm2022/lib/producers/socket-receive-methods/start-records.service.mjs +35 -0
  227. package/dist/esm2022/lib/producers/socket-receive-methods/stopped-recording.service.mjs +37 -0
  228. package/dist/esm2022/lib/producers/socket-receive-methods/time-left-recording.service.mjs +36 -0
  229. package/dist/esm2022/lib/producers/socket-receive-methods/update-consuming-domains.service.mjs +63 -0
  230. package/dist/esm2022/lib/producers/socket-receive-methods/update-media-settings.service.mjs +36 -0
  231. package/dist/esm2022/lib/producers/socket-receive-methods/updated-co-host.service.mjs +56 -0
  232. package/dist/esm2022/lib/producers/socket-receive-methods/user-waiting.service.mjs +78 -0
  233. package/dist/esm2022/lib/sockets/socket-manager.service.mjs +73 -0
  234. package/dist/esm2022/mediasfu-angular.mjs +5 -0
  235. package/dist/esm2022/public-api.mjs +187 -0
  236. package/dist/fesm2022/mediasfu-angular.mjs +47885 -0
  237. package/dist/fesm2022/mediasfu-angular.mjs.map +1 -0
  238. package/dist/index.d.ts +5 -0
  239. package/dist/lib/@types/types.d.ts +634 -0
  240. package/dist/lib/components/background-components/background-modal/background-modal.component.d.ts +146 -0
  241. package/dist/lib/components/breakout-components/breakout-rooms-modal.component.d.ts +112 -0
  242. package/dist/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.d.ts +54 -0
  243. package/dist/lib/components/breakout-components/room-list/room-list.component.d.ts +20 -0
  244. package/dist/lib/components/co-host-components/co-host-modal/co-host-modal.component.d.ts +86 -0
  245. package/dist/lib/components/display-components/alert-component/alert.component.component.d.ts +50 -0
  246. package/dist/lib/components/display-components/audio-card/audio-card.component.d.ts +84 -0
  247. package/dist/lib/components/display-components/audio-grid/audio-grid.component.d.ts +23 -0
  248. package/dist/lib/components/display-components/card-video-display/card-video-display.component.d.ts +37 -0
  249. package/dist/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.d.ts +88 -0
  250. package/dist/lib/components/display-components/control-buttons-component/control-buttons-component.component.d.ts +52 -0
  251. package/dist/lib/components/display-components/control-buttons-component-touch/control-buttons-component-touch.component.d.ts +100 -0
  252. package/dist/lib/components/display-components/control-widgets/menu-participants-widget.component.d.ts +10 -0
  253. package/dist/lib/components/display-components/control-widgets/menu-record-widget.component.d.ts +18 -0
  254. package/dist/lib/components/display-components/control-widgets/menu-widget.component.d.ts +11 -0
  255. package/dist/lib/components/display-components/control-widgets/message-widget.component.d.ts +11 -0
  256. package/dist/lib/components/display-components/control-widgets/record-timer-widget.component.d.ts +7 -0
  257. package/dist/lib/components/display-components/control-widgets/screenshare-widget.component.d.ts +12 -0
  258. package/dist/lib/components/display-components/flexible-grid/flexible-grid.component.d.ts +70 -0
  259. package/dist/lib/components/display-components/flexible-video/flexible-video.component.d.ts +97 -0
  260. package/dist/lib/components/display-components/loading-modal/loading-modal.component.d.ts +70 -0
  261. package/dist/lib/components/display-components/main-aspect-component/main-aspect-component.component.d.ts +72 -0
  262. package/dist/lib/components/display-components/main-container-component/main-container-component.component.d.ts +63 -0
  263. package/dist/lib/components/display-components/main-grid-component/main-grid-component.component.d.ts +67 -0
  264. package/dist/lib/components/display-components/main-screen-component/main-screen-component.component.d.ts +82 -0
  265. package/dist/lib/components/display-components/meeting-progress-timer/meeting-progress-timer.component.d.ts +82 -0
  266. package/dist/lib/components/display-components/mini-audio/mini-audio.component.d.ts +128 -0
  267. package/dist/lib/components/display-components/mini-card/mini-card.component.d.ts +1085 -0
  268. package/dist/lib/components/display-components/mini-card-audio/mini-card-audio.component.d.ts +95 -0
  269. package/dist/lib/components/display-components/other-grid-component/other-grid-component.component.d.ts +45 -0
  270. package/dist/lib/components/display-components/pagination/pagination.component.d.ts +112 -0
  271. package/dist/lib/components/display-components/sub-aspect-component/sub-aspect-component.component.d.ts +61 -0
  272. package/dist/lib/components/display-components/video-card/video-card.component.d.ts +89 -0
  273. package/dist/lib/components/display-settings-components/display-settings-modal.component.d.ts +65 -0
  274. package/dist/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.d.ts +124 -0
  275. package/dist/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.d.ts +71 -0
  276. package/dist/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.d.ts +123 -0
  277. package/dist/lib/components/mediasfu-components/mediasfu-broadcast.component.d.ts +5264 -0
  278. package/dist/lib/components/mediasfu-components/mediasfu-chat.component.d.ts +5194 -0
  279. package/dist/lib/components/mediasfu-components/mediasfu-conference.component.d.ts +6825 -0
  280. package/dist/lib/components/mediasfu-components/mediasfu-generic.component.d.ts +6851 -0
  281. package/dist/lib/components/mediasfu-components/mediasfu-webinar.component.d.ts +6825 -0
  282. package/dist/lib/components/menu-components/custom-buttons/custom-buttons.component.d.ts +83 -0
  283. package/dist/lib/components/menu-components/meeting-id-component/meeting-id-component.component.d.ts +18 -0
  284. package/dist/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.d.ts +18 -0
  285. package/dist/lib/components/menu-components/menu-modal/menu-modal.component.d.ts +91 -0
  286. package/dist/lib/components/menu-components/share-buttons-component/share-buttons-component.component.d.ts +46 -0
  287. package/dist/lib/components/message-components/message-panel/message-panel.component.d.ts +112 -0
  288. package/dist/lib/components/message-components/messages-modal/messages-modal.component.d.ts +124 -0
  289. package/dist/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.d.ts +92 -0
  290. package/dist/lib/components/misc-components/pre-join-page/pre-join-page.component.d.ts +159 -0
  291. package/dist/lib/components/misc-components/share-event-modal/share-event-modal.component.d.ts +77 -0
  292. package/dist/lib/components/misc-components/welcome-page/welcome-page.component.d.ts +47 -0
  293. package/dist/lib/components/participants-components/participant-list/participant-list.component.d.ts +41 -0
  294. package/dist/lib/components/participants-components/participant-list-item/participant-list-item.component.d.ts +53 -0
  295. package/dist/lib/components/participants-components/participant-list-others/participant-list-others.component.d.ts +15 -0
  296. package/dist/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.d.ts +17 -0
  297. package/dist/lib/components/participants-components/participants-modal/participants-modal.component.d.ts +70 -0
  298. package/dist/lib/components/polls-components/poll-modal/poll-modal.component.d.ts +76 -0
  299. package/dist/lib/components/recording-components/advanced-panel-component/advanced-panel-components.component.d.ts +48 -0
  300. package/dist/lib/components/recording-components/recording-modal/recording-modal.component.d.ts +117 -0
  301. package/dist/lib/components/recording-components/standard-panel-component/standard-panel-component.component.d.ts +58 -0
  302. package/dist/lib/components/requests-components/render-request-component/render-request-component.component.d.ts +34 -0
  303. package/dist/lib/components/requests-components/requests-modal/requests-modal.component.d.ts +94 -0
  304. package/dist/lib/components/screenboard-components/screenboard/screenboard.component.d.ts +210 -0
  305. package/dist/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.d.ts +103 -0
  306. package/dist/lib/components/waiting-components/waiting-room-modal.component.d.ts +85 -0
  307. package/dist/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.d.ts +103 -0
  308. package/dist/lib/components/whiteboard-components/whiteboard/whiteboard.component.d.ts +414 -0
  309. package/dist/lib/consumers/add-videos-grid.service.d.ts +35 -0
  310. package/dist/lib/consumers/auto-adjust.service.d.ts +25 -0
  311. package/dist/lib/consumers/calculate-rows-and-columns.service.d.ts +17 -0
  312. package/dist/lib/consumers/change-vids.service.d.ts +137 -0
  313. package/dist/lib/consumers/check-grid.service.d.ts +30 -0
  314. package/dist/lib/consumers/check-permission.service.d.ts +26 -0
  315. package/dist/lib/consumers/check-screen-share.service.d.ts +41 -0
  316. package/dist/lib/consumers/close-and-resize.service.d.ts +107 -0
  317. package/dist/lib/consumers/compare-active-names.service.d.ts +37 -0
  318. package/dist/lib/consumers/compare-screen-states.service.d.ts +40 -0
  319. package/dist/lib/consumers/connect-ips.service.d.ts +59 -0
  320. package/dist/lib/consumers/connect-recv-transport.service.d.ts +58 -0
  321. package/dist/lib/consumers/connect-send-transport-audio.service.d.ts +33 -0
  322. package/dist/lib/consumers/connect-send-transport-screen.service.d.ts +42 -0
  323. package/dist/lib/consumers/connect-send-transport-video.service.d.ts +41 -0
  324. package/dist/lib/consumers/connect-send-transport.service.d.ts +49 -0
  325. package/dist/lib/consumers/consumer-resume.service.d.ts +85 -0
  326. package/dist/lib/consumers/control-media.service.d.ts +40 -0
  327. package/dist/lib/consumers/create-send-transport.service.d.ts +46 -0
  328. package/dist/lib/consumers/disconnect-send-transport-audio.service.d.ts +49 -0
  329. package/dist/lib/consumers/disconnect-send-transport-screen.service.d.ts +36 -0
  330. package/dist/lib/consumers/disconnect-send-transport-video.service.d.ts +43 -0
  331. package/dist/lib/consumers/disp-streams.service.d.ts +92 -0
  332. package/dist/lib/consumers/generate-page-content.service.d.ts +41 -0
  333. package/dist/lib/consumers/get-estimate.service.d.ts +46 -0
  334. package/dist/lib/consumers/get-piped-producers-alt.service.d.ts +33 -0
  335. package/dist/lib/consumers/get-producers-piped.service.d.ts +33 -0
  336. package/dist/lib/consumers/get-videos.service.d.ts +28 -0
  337. package/dist/lib/consumers/mix-streams.service.d.ts +32 -0
  338. package/dist/lib/consumers/on-screen-changes.service.d.ts +44 -0
  339. package/dist/lib/consumers/prepopulate-user-media.service.d.ts +107 -0
  340. package/dist/lib/consumers/process-consumer-transports-audio.service.d.ts +30 -0
  341. package/dist/lib/consumers/process-consumer-transports.service.d.ts +42 -0
  342. package/dist/lib/consumers/re-port.service.d.ts +55 -0
  343. package/dist/lib/consumers/re-update-inter.service.d.ts +83 -0
  344. package/dist/lib/consumers/readjust.service.d.ts +48 -0
  345. package/dist/lib/consumers/receive-all-piped-transports.service.d.ts +33 -0
  346. package/dist/lib/consumers/receive-room-messages.service.d.ts +22 -0
  347. package/dist/lib/consumers/reorder-streams.service.d.ts +72 -0
  348. package/dist/lib/consumers/request-screen-share.service.d.ts +38 -0
  349. package/dist/lib/consumers/resume-pause-audio-streams.service.d.ts +41 -0
  350. package/dist/lib/consumers/resume-pause-streams.service.d.ts +36 -0
  351. package/dist/lib/consumers/resume-send-transport-audio.service.d.ts +43 -0
  352. package/dist/lib/consumers/signal-new-consumer-transport.service.d.ts +63 -0
  353. package/dist/lib/consumers/socket-receive-methods/join-consume-room.service.d.ts +43 -0
  354. package/dist/lib/consumers/socket-receive-methods/new-pipe-producer.service.d.ts +46 -0
  355. package/dist/lib/consumers/socket-receive-methods/producer-closed.service.d.ts +27 -0
  356. package/dist/lib/consumers/start-share-screen.service.d.ts +38 -0
  357. package/dist/lib/consumers/stop-share-screen.service.d.ts +86 -0
  358. package/dist/lib/consumers/stream-success-audio-switch.service.d.ts +90 -0
  359. package/dist/lib/consumers/stream-success-audio.service.d.ts +100 -0
  360. package/dist/lib/consumers/stream-success-screen.service.d.ts +78 -0
  361. package/dist/lib/consumers/stream-success-video.service.d.ts +76 -0
  362. package/dist/lib/consumers/switch-user-audio.service.d.ts +41 -0
  363. package/dist/lib/consumers/switch-user-video-alt.service.d.ts +43 -0
  364. package/dist/lib/consumers/switch-user-video.service.d.ts +61 -0
  365. package/dist/lib/consumers/trigger.service.d.ts +72 -0
  366. package/dist/lib/consumers/update-mini-cards-grid.service.d.ts +54 -0
  367. package/dist/lib/consumers/update-participant-audio-decibels.service.d.ts +25 -0
  368. package/dist/lib/methods/background-methods/launch-background.service.d.ts +18 -0
  369. package/dist/lib/methods/breakout-room-methods/breakout-room-updated.service.d.ts +63 -0
  370. package/dist/lib/methods/breakout-room-methods/launch-breakout-rooms.service.d.ts +17 -0
  371. package/dist/lib/methods/co-host-methods/launch-co-host.service.d.ts +17 -0
  372. package/dist/lib/methods/co-host-methods/modify-co-host-settings.service.d.ts +42 -0
  373. package/dist/lib/methods/display-settings-methods/launch-display-settings.service.d.ts +17 -0
  374. package/dist/lib/methods/display-settings-methods/modify-display-settings.service.d.ts +74 -0
  375. package/dist/lib/methods/exit-methods/confirm-exit.service.d.ts +24 -0
  376. package/dist/lib/methods/exit-methods/launch-confirm-exit.service.d.ts +17 -0
  377. package/dist/lib/methods/media-settings-methods/launch-media-settings.service.d.ts +27 -0
  378. package/dist/lib/methods/menu-methods/launch-menu-modal.service.d.ts +17 -0
  379. package/dist/lib/methods/message-methods/launch-messages.service.d.ts +18 -0
  380. package/dist/lib/methods/message-methods/send-message.service.d.ts +48 -0
  381. package/dist/lib/methods/participants-methods/launch-participants.service.d.ts +18 -0
  382. package/dist/lib/methods/participants-methods/message-participants.service.d.ts +34 -0
  383. package/dist/lib/methods/participants-methods/mute-participants.service.d.ts +36 -0
  384. package/dist/lib/methods/participants-methods/remove-participants.service.d.ts +38 -0
  385. package/dist/lib/methods/polls-methods/handle-create-poll.service.d.ts +24 -0
  386. package/dist/lib/methods/polls-methods/handle-end-poll.service.d.ts +27 -0
  387. package/dist/lib/methods/polls-methods/handle-vote-poll.service.d.ts +33 -0
  388. package/dist/lib/methods/polls-methods/launch-poll.service.d.ts +18 -0
  389. package/dist/lib/methods/polls-methods/poll-updated.service.d.ts +34 -0
  390. package/dist/lib/methods/recording-methods/check-pause-state.service.d.ts +26 -0
  391. package/dist/lib/methods/recording-methods/check-resume-state.service.d.ts +23 -0
  392. package/dist/lib/methods/recording-methods/confirm-recording.service.d.ts +78 -0
  393. package/dist/lib/methods/recording-methods/launch-recording.service.d.ts +42 -0
  394. package/dist/lib/methods/recording-methods/record-pause-timer.service.d.ts +25 -0
  395. package/dist/lib/methods/recording-methods/record-resume-timer.service.d.ts +47 -0
  396. package/dist/lib/methods/recording-methods/record-start-timer.service.d.ts +58 -0
  397. package/dist/lib/methods/recording-methods/record-update-timer.service.d.ts +29 -0
  398. package/dist/lib/methods/recording-methods/start-recording.service.d.ts +83 -0
  399. package/dist/lib/methods/recording-methods/stop-recording.service.d.ts +37 -0
  400. package/dist/lib/methods/recording-methods/update-recording.service.d.ts +88 -0
  401. package/dist/lib/methods/requests-methods/launch-requests.service.d.ts +19 -0
  402. package/dist/lib/methods/requests-methods/respond-to-requests.service.d.ts +30 -0
  403. package/dist/lib/methods/settings-methods/launch-settings.service.d.ts +19 -0
  404. package/dist/lib/methods/settings-methods/modify-settings.service.d.ts +44 -0
  405. package/dist/lib/methods/stream-methods/click-audio.service.d.ts +73 -0
  406. package/dist/lib/methods/stream-methods/click-chat.service.d.ts +27 -0
  407. package/dist/lib/methods/stream-methods/click-screen-share.service.d.ts +44 -0
  408. package/dist/lib/methods/stream-methods/click-video.service.d.ts +58 -0
  409. package/dist/lib/methods/stream-methods/switch-audio.service.d.ts +28 -0
  410. package/dist/lib/methods/stream-methods/switch-video-alt.service.d.ts +29 -0
  411. package/dist/lib/methods/stream-methods/switch-video.service.d.ts +35 -0
  412. package/dist/lib/methods/utils/format-number.service.d.ts +24 -0
  413. package/dist/lib/methods/utils/generate-random-messages.service.d.ts +26 -0
  414. package/dist/lib/methods/utils/generate-random-participants.service.d.ts +24 -0
  415. package/dist/lib/methods/utils/generate-random-polls.service.d.ts +18 -0
  416. package/dist/lib/methods/utils/generate-random-request-list.service.d.ts +24 -0
  417. package/dist/lib/methods/utils/generate-random-waiting-room-list.service.d.ts +19 -0
  418. package/dist/lib/methods/utils/get-modal-position.util.d.ts +15 -0
  419. package/dist/lib/methods/utils/get-overlay-position.util.d.ts +12 -0
  420. package/dist/lib/methods/utils/initial-values.util.d.ts +343 -0
  421. package/dist/lib/methods/utils/meeting-timer/start-meeting-progress-timer.service.d.ts +31 -0
  422. package/dist/lib/methods/utils/mini-audio-player/mini-audio-player.component.d.ts +46 -0
  423. package/dist/lib/methods/utils/producer/a-params.service.d.ts +11 -0
  424. package/dist/lib/methods/utils/producer/h-params.service.d.ts +11 -0
  425. package/dist/lib/methods/utils/producer/screen-params.service.d.ts +11 -0
  426. package/dist/lib/methods/utils/producer/v-params.service.d.ts +11 -0
  427. package/dist/lib/methods/utils/producer/video-capture-constraints.service.d.ts +131 -0
  428. package/dist/lib/methods/utils/sleep.util.d.ts +12 -0
  429. package/dist/lib/methods/utils/sound-player.service.d.ts +13 -0
  430. package/dist/lib/methods/utils/validate-alphanumeric.service.d.ts +17 -0
  431. package/dist/lib/methods/waiting-methods/launch-waiting.service.d.ts +17 -0
  432. package/dist/lib/methods/waiting-methods/respond-to-waiting.service.d.ts +31 -0
  433. package/dist/lib/methods/whiteboard-methods/capture-canvas-stream.service.d.ts +33 -0
  434. package/dist/lib/methods/whiteboard-methods/launch-configure-whiteboard.service.d.ts +17 -0
  435. package/dist/lib/producer-client/producer-client-emits/create-device-client.service.d.ts +20 -0
  436. package/dist/lib/producer-client/producer-client-emits/join-room-client.service.d.ts +36 -0
  437. package/dist/lib/producer-client/producer-client-emits/update-room-parameters-client.service.d.ts +104 -0
  438. package/dist/lib/producers/producer-emits/join-con-room.service.d.ts +44 -0
  439. package/dist/lib/producers/producer-emits/join-room.service.d.ts +34 -0
  440. package/dist/lib/producers/socket-receive-methods/all-members-rest.service.d.ts +75 -0
  441. package/dist/lib/producers/socket-receive-methods/all-members.service.d.ts +72 -0
  442. package/dist/lib/producers/socket-receive-methods/all-waiting-room-members.service.d.ts +22 -0
  443. package/dist/lib/producers/socket-receive-methods/ban-participant.service.d.ts +35 -0
  444. package/dist/lib/producers/socket-receive-methods/control-media-host.service.d.ts +60 -0
  445. package/dist/lib/producers/socket-receive-methods/disconnect-user-self.service.d.ts +22 -0
  446. package/dist/lib/producers/socket-receive-methods/disconnect.service.d.ts +23 -0
  447. package/dist/lib/producers/socket-receive-methods/get-domains.service.d.ts +48 -0
  448. package/dist/lib/producers/socket-receive-methods/host-request-response.service.d.ts +81 -0
  449. package/dist/lib/producers/socket-receive-methods/meeting-ended.service.d.ts +26 -0
  450. package/dist/lib/producers/socket-receive-methods/meeting-still-there.service.d.ts +17 -0
  451. package/dist/lib/producers/socket-receive-methods/meeting-time-remaining.service.d.ts +22 -0
  452. package/dist/lib/producers/socket-receive-methods/participant-requested.service.d.ts +26 -0
  453. package/dist/lib/producers/socket-receive-methods/person-joined.service.d.ts +20 -0
  454. package/dist/lib/producers/socket-receive-methods/producer-media-closed.service.d.ts +47 -0
  455. package/dist/lib/producers/socket-receive-methods/producer-media-paused.service.d.ts +51 -0
  456. package/dist/lib/producers/socket-receive-methods/producer-media-resumed.service.d.ts +44 -0
  457. package/dist/lib/producers/socket-receive-methods/re-initiate-recording.service.d.ts +25 -0
  458. package/dist/lib/producers/socket-receive-methods/receive-message.service.d.ts +37 -0
  459. package/dist/lib/producers/socket-receive-methods/recording-notice.service.d.ts +120 -0
  460. package/dist/lib/producers/socket-receive-methods/room-record-params.service.d.ts +75 -0
  461. package/dist/lib/producers/socket-receive-methods/screen-producer-id.service.d.ts +32 -0
  462. package/dist/lib/producers/socket-receive-methods/start-records.service.d.ts +23 -0
  463. package/dist/lib/producers/socket-receive-methods/stopped-recording.service.d.ts +22 -0
  464. package/dist/lib/producers/socket-receive-methods/time-left-recording.service.d.ts +21 -0
  465. package/dist/lib/producers/socket-receive-methods/update-consuming-domains.service.d.ts +44 -0
  466. package/dist/lib/producers/socket-receive-methods/update-media-settings.service.d.ts +27 -0
  467. package/dist/lib/producers/socket-receive-methods/updated-co-host.service.d.ts +37 -0
  468. package/dist/lib/producers/socket-receive-methods/user-waiting.service.d.ts +68 -0
  469. package/dist/lib/sockets/socket-manager.service.d.ts +26 -0
  470. package/dist/public-api.d.ts +177 -0
  471. package/package.json +89 -0
@@ -0,0 +1,174 @@
1
+ /* eslint-disable @typescript-eslint/no-empty-function */
2
+ import { Component, Input } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
5
+ import { faTimes } from '@fortawesome/free-solid-svg-icons';
6
+ import { FormsModule } from '@angular/forms';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ import * as i2 from "@fortawesome/angular-fontawesome";
10
+ import * as i3 from "@angular/forms";
11
+ export class PollModal {
12
+ isPollModalVisible = false;
13
+ onClose;
14
+ position = 'topRight';
15
+ backgroundColor = '#f5f5f5';
16
+ member = '';
17
+ islevel = '';
18
+ polls = [];
19
+ poll = null;
20
+ socket = {};
21
+ roomName = '';
22
+ showAlert = () => { };
23
+ updateIsPollModalVisible = () => { };
24
+ handleCreatePoll;
25
+ handleEndPoll;
26
+ handleVotePoll;
27
+ faTimes = faTimes;
28
+ newPoll = { question: '', type: '', options: [] };
29
+ screenWidth = window.innerWidth;
30
+ modalWidth = this.screenWidth > 500 ? 350 : 0.7 * this.screenWidth;
31
+ ngOnInit() {
32
+ this.renderPolls();
33
+ }
34
+ ngOnChanges(changes) {
35
+ if (changes['isPollModalVisible']) {
36
+ this.renderPolls();
37
+ }
38
+ }
39
+ renderPolls = () => {
40
+ let activePollCount = 0;
41
+ this.polls &&
42
+ this.polls.forEach((polled) => {
43
+ if (polled.status === 'active' && this.poll && polled.id === this.poll.id) {
44
+ activePollCount++;
45
+ }
46
+ });
47
+ if (this.islevel == '2' && activePollCount === 0) {
48
+ if (this.poll && this.poll.status === 'active') {
49
+ this.poll.status = 'inactive';
50
+ }
51
+ }
52
+ };
53
+ calculatePercentage(votes, optionIndex) {
54
+ const totalVotes = votes.reduce((a, b) => a + b, 0);
55
+ return totalVotes > 0 ? parseFloat(((votes[optionIndex] / totalVotes) * 100).toFixed(2)) : 0;
56
+ }
57
+ handlePollTypeChange(event) {
58
+ const type = event.target.value;
59
+ let options = [];
60
+ switch (type) {
61
+ case 'trueFalse':
62
+ options = ['True', 'False'];
63
+ break;
64
+ case 'yesNo':
65
+ options = ['Yes', 'No'];
66
+ break;
67
+ case 'custom':
68
+ options = ['', '', '', '', '']; // Preload 5 empty options
69
+ break;
70
+ default:
71
+ options = [];
72
+ break;
73
+ }
74
+ this.newPoll = { ...this.newPoll, type, options };
75
+ }
76
+ async validateAndCreatePoll() {
77
+ // Remove empty options before creating the poll
78
+ this.newPoll.options = this.newPoll.options.filter((option) => option.trim() !== '');
79
+ // Ensure there's at least one valid option
80
+ if (this.newPoll.options.length > 0) {
81
+ await this.handleCreatePoll({
82
+ poll: this.newPoll,
83
+ socket: this.socket,
84
+ roomName: this.roomName,
85
+ showAlert: this.showAlert,
86
+ updateIsPollModalVisible: this.updateIsPollModalVisible,
87
+ });
88
+ }
89
+ }
90
+ handledVotePoll(pollId, optionIndex) {
91
+ this.handleVotePoll({
92
+ pollId,
93
+ optionIndex,
94
+ socket: this.socket,
95
+ member: this.member,
96
+ roomName: this.roomName,
97
+ showAlert: this.showAlert,
98
+ updateIsPollModalVisible: this.updateIsPollModalVisible,
99
+ });
100
+ }
101
+ handledEndPoll(pollId) {
102
+ this.handleEndPoll({
103
+ pollId,
104
+ socket: this.socket,
105
+ roomName: this.roomName,
106
+ showAlert: this.showAlert,
107
+ updateIsPollModalVisible: this.updateIsPollModalVisible,
108
+ });
109
+ }
110
+ get modalContainerStyle() {
111
+ return {
112
+ position: 'fixed',
113
+ top: 0,
114
+ left: 0,
115
+ width: '100%',
116
+ height: '100%',
117
+ backgroundColor: 'rgba(0, 0, 0, 0.5)',
118
+ display: this.isPollModalVisible ? 'block' : 'none',
119
+ zIndex: 999,
120
+ };
121
+ }
122
+ get modalContentStyle() {
123
+ return {
124
+ position: 'fixed',
125
+ backgroundColor: this.backgroundColor,
126
+ borderRadius: '10px',
127
+ padding: '10px',
128
+ width: `${this.modalWidth}px`,
129
+ maxHeight: '75%',
130
+ overflowY: 'auto',
131
+ top: this.position.includes('top') ? '10px' : 'auto',
132
+ bottom: this.position.includes('bottom') ? '10px' : 'auto',
133
+ left: this.position.includes('Left') ? '10px' : 'auto',
134
+ right: this.position.includes('Right') ? '10px' : 'auto',
135
+ };
136
+ }
137
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: PollModal, deps: [], target: i0.ɵɵFactoryTarget.Component });
138
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: PollModal, isStandalone: true, selector: "app-poll-modal", inputs: { isPollModalVisible: "isPollModalVisible", onClose: "onClose", position: "position", backgroundColor: "backgroundColor", member: "member", islevel: "islevel", polls: "polls", poll: "poll", socket: "socket", roomName: "roomName", showAlert: "showAlert", updateIsPollModalVisible: "updateIsPollModalVisible", handleCreatePoll: "handleCreatePoll", handleEndPoll: "handleEndPoll", handleVotePoll: "handleVotePoll" }, usesOnChanges: true, ngImport: i0, template: "<div [ngStyle]=\"modalContainerStyle\">\r\n <div [ngStyle]=\"modalContentStyle\">\r\n <div class=\"modal-header\">\r\n <h2>Polls</h2>\r\n <button (click)=\"onClose()\" class=\"close-button\">\r\n <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n </button>\r\n </div>\r\n <hr />\r\n <div class=\"modal-body\">\r\n <!-- Previous Polls Section -->\r\n <div *ngIf=\"islevel === '2'\">\r\n <div class=\"previous-polls\">\r\n <h5>Previous Polls</h5>\r\n <div *ngIf=\"polls.length === 0\">No polls available</div>\r\n\r\n <!-- Using ng-container to avoid multiple structural directives on the same element -->\r\n <ng-container *ngFor=\"let polled of polls\">\r\n <div\r\n *ngIf=\"!poll || polled.id !== poll.id || poll.status !== 'active'\"\r\n class=\"poll\"\r\n >\r\n <h6>Question:</h6>\r\n <textarea\r\n class=\"form-control\"\r\n rows=\"3\"\r\n [disabled]=\"true\"\r\n [value]=\"polled.question\"\r\n ></textarea>\r\n <br />\r\n <h6>Options:</h6>\r\n <div *ngFor=\"let option of polled.options; let i = index\">\r\n {{ option }}: {{ polled.votes[i] }} votes ({{\r\n calculatePercentage(polled.votes, i)\r\n }}%)\r\n </div>\r\n <!-- End Poll Button (if poll is active) -->\r\n <button\r\n *ngIf=\"polled.status === 'active'\"\r\n class=\"btn btn-danger\"\r\n (click)=\"handledEndPoll(polled.id)\"\r\n >\r\n End Poll\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <hr />\r\n\r\n <!-- Create Poll Section -->\r\n <div class=\"create-poll\">\r\n <h5>Create a New Poll</h5>\r\n <form (ngSubmit)=\"validateAndCreatePoll()\">\r\n <div class=\"form-group\">\r\n <label for=\"pollQuestion\">Poll Question</label>\r\n <textarea\r\n class=\"form-control\"\r\n id=\"pollQuestion\"\r\n rows=\"3\"\r\n maxLength=\"300\"\r\n required\r\n [(ngModel)]=\"newPoll.question\"\r\n name=\"question\"\r\n ></textarea>\r\n </div>\r\n <div class=\"form-group\">\r\n <label for=\"pollType\">Select Poll Answer Type</label>\r\n <select\r\n class=\"form-control\"\r\n id=\"pollType\"\r\n required\r\n (change)=\"handlePollTypeChange($event)\"\r\n [(ngModel)]=\"newPoll.type\"\r\n name=\"type\"\r\n >\r\n <option value=\"\">Choose...</option>\r\n <option value=\"trueFalse\">True/False</option>\r\n <option value=\"yesNo\">Yes/No</option>\r\n <option value=\"custom\">Custom</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Render Poll Options -->\r\n <div\r\n *ngIf=\"newPoll.type === 'trueFalse' || newPoll.type === 'yesNo'\"\r\n >\r\n <div\r\n *ngFor=\"let option of newPoll.options; let i = index\"\r\n class=\"form-check\"\r\n >\r\n <input\r\n class=\"form-check-input\"\r\n type=\"radio\"\r\n name=\"pollOption\"\r\n [value]=\"option.toLowerCase()\"\r\n [id]=\"'option' + option\"\r\n />\r\n <label class=\"form-check-label\" [for]=\"'option' + option\">{{\r\n option\r\n }}</label>\r\n </div>\r\n </div>\r\n <div *ngIf=\"newPoll.type === 'custom'\">\r\n <div\r\n *ngFor=\"let option of newPoll.options; let i = index\"\r\n class=\"form-group\"\r\n >\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Option {{ i + 1 }}\"\r\n maxLength=\"50\"\r\n [(ngModel)]=\"newPoll.options[i]\"\r\n name=\"option{{ i }}\"\r\n />\r\n </div>\r\n </div>\r\n <button type=\"submit\" class=\"btn btn-primary\">Create Poll</button>\r\n </form>\r\n </div>\r\n <hr />\r\n </div>\r\n\r\n <!-- Current Poll Section -->\r\n <div class=\"current-poll\">\r\n <h5>Current Poll</h5>\r\n <div *ngIf=\"poll && poll.status === 'active'\">\r\n <h6>Question:</h6>\r\n <textarea\r\n class=\"form-control\"\r\n rows=\"3\"\r\n [disabled]=\"true\"\r\n [value]=\"poll.question\"\r\n ></textarea>\r\n <h6>Options:</h6>\r\n <div\r\n *ngFor=\"let option of poll.options; let i = index\"\r\n class=\"form-check\"\r\n >\r\n <input\r\n class=\"form-check-input\"\r\n type=\"radio\"\r\n name=\"pollOption\"\r\n [value]=\"i\"\r\n id=\"pollOption{{ i }}\"\r\n [checked]=\"poll.voters?.[member] === i\"\r\n (change)=\"handledVotePoll(poll.id, i)\"\r\n />\r\n <label class=\"form-check-label\" [for]=\"'pollOption' + i\">{{\r\n option\r\n }}</label>\r\n </div>\r\n <button\r\n *ngIf=\"poll.status === 'active' && islevel === '2'\"\r\n class=\"btn btn-danger\"\r\n (click)=\"handledEndPoll(poll.id)\"\r\n >\r\n End Poll\r\n </button>\r\n </div>\r\n <div *ngIf=\"!poll || poll.status !== 'active'\">\r\n <hr />\r\n No active poll\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.modal-body{display:flex;flex-direction:column;gap:10px}.previous-polls,.create-poll,.current-poll{overflow-y:auto;max-height:20%}.poll{margin-bottom:15px}.close-button{border:none;background:none;cursor:pointer}.form-group{max-width:80%;overflow-x:auto}textarea.form-control{resize:none}\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"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
139
+ }
140
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: PollModal, decorators: [{
141
+ type: Component,
142
+ args: [{ selector: 'app-poll-modal', standalone: true, imports: [CommonModule, FontAwesomeModule, FormsModule], template: "<div [ngStyle]=\"modalContainerStyle\">\r\n <div [ngStyle]=\"modalContentStyle\">\r\n <div class=\"modal-header\">\r\n <h2>Polls</h2>\r\n <button (click)=\"onClose()\" class=\"close-button\">\r\n <fa-icon [icon]=\"faTimes\"></fa-icon>\r\n </button>\r\n </div>\r\n <hr />\r\n <div class=\"modal-body\">\r\n <!-- Previous Polls Section -->\r\n <div *ngIf=\"islevel === '2'\">\r\n <div class=\"previous-polls\">\r\n <h5>Previous Polls</h5>\r\n <div *ngIf=\"polls.length === 0\">No polls available</div>\r\n\r\n <!-- Using ng-container to avoid multiple structural directives on the same element -->\r\n <ng-container *ngFor=\"let polled of polls\">\r\n <div\r\n *ngIf=\"!poll || polled.id !== poll.id || poll.status !== 'active'\"\r\n class=\"poll\"\r\n >\r\n <h6>Question:</h6>\r\n <textarea\r\n class=\"form-control\"\r\n rows=\"3\"\r\n [disabled]=\"true\"\r\n [value]=\"polled.question\"\r\n ></textarea>\r\n <br />\r\n <h6>Options:</h6>\r\n <div *ngFor=\"let option of polled.options; let i = index\">\r\n {{ option }}: {{ polled.votes[i] }} votes ({{\r\n calculatePercentage(polled.votes, i)\r\n }}%)\r\n </div>\r\n <!-- End Poll Button (if poll is active) -->\r\n <button\r\n *ngIf=\"polled.status === 'active'\"\r\n class=\"btn btn-danger\"\r\n (click)=\"handledEndPoll(polled.id)\"\r\n >\r\n End Poll\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <hr />\r\n\r\n <!-- Create Poll Section -->\r\n <div class=\"create-poll\">\r\n <h5>Create a New Poll</h5>\r\n <form (ngSubmit)=\"validateAndCreatePoll()\">\r\n <div class=\"form-group\">\r\n <label for=\"pollQuestion\">Poll Question</label>\r\n <textarea\r\n class=\"form-control\"\r\n id=\"pollQuestion\"\r\n rows=\"3\"\r\n maxLength=\"300\"\r\n required\r\n [(ngModel)]=\"newPoll.question\"\r\n name=\"question\"\r\n ></textarea>\r\n </div>\r\n <div class=\"form-group\">\r\n <label for=\"pollType\">Select Poll Answer Type</label>\r\n <select\r\n class=\"form-control\"\r\n id=\"pollType\"\r\n required\r\n (change)=\"handlePollTypeChange($event)\"\r\n [(ngModel)]=\"newPoll.type\"\r\n name=\"type\"\r\n >\r\n <option value=\"\">Choose...</option>\r\n <option value=\"trueFalse\">True/False</option>\r\n <option value=\"yesNo\">Yes/No</option>\r\n <option value=\"custom\">Custom</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Render Poll Options -->\r\n <div\r\n *ngIf=\"newPoll.type === 'trueFalse' || newPoll.type === 'yesNo'\"\r\n >\r\n <div\r\n *ngFor=\"let option of newPoll.options; let i = index\"\r\n class=\"form-check\"\r\n >\r\n <input\r\n class=\"form-check-input\"\r\n type=\"radio\"\r\n name=\"pollOption\"\r\n [value]=\"option.toLowerCase()\"\r\n [id]=\"'option' + option\"\r\n />\r\n <label class=\"form-check-label\" [for]=\"'option' + option\">{{\r\n option\r\n }}</label>\r\n </div>\r\n </div>\r\n <div *ngIf=\"newPoll.type === 'custom'\">\r\n <div\r\n *ngFor=\"let option of newPoll.options; let i = index\"\r\n class=\"form-group\"\r\n >\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Option {{ i + 1 }}\"\r\n maxLength=\"50\"\r\n [(ngModel)]=\"newPoll.options[i]\"\r\n name=\"option{{ i }}\"\r\n />\r\n </div>\r\n </div>\r\n <button type=\"submit\" class=\"btn btn-primary\">Create Poll</button>\r\n </form>\r\n </div>\r\n <hr />\r\n </div>\r\n\r\n <!-- Current Poll Section -->\r\n <div class=\"current-poll\">\r\n <h5>Current Poll</h5>\r\n <div *ngIf=\"poll && poll.status === 'active'\">\r\n <h6>Question:</h6>\r\n <textarea\r\n class=\"form-control\"\r\n rows=\"3\"\r\n [disabled]=\"true\"\r\n [value]=\"poll.question\"\r\n ></textarea>\r\n <h6>Options:</h6>\r\n <div\r\n *ngFor=\"let option of poll.options; let i = index\"\r\n class=\"form-check\"\r\n >\r\n <input\r\n class=\"form-check-input\"\r\n type=\"radio\"\r\n name=\"pollOption\"\r\n [value]=\"i\"\r\n id=\"pollOption{{ i }}\"\r\n [checked]=\"poll.voters?.[member] === i\"\r\n (change)=\"handledVotePoll(poll.id, i)\"\r\n />\r\n <label class=\"form-check-label\" [for]=\"'pollOption' + i\">{{\r\n option\r\n }}</label>\r\n </div>\r\n <button\r\n *ngIf=\"poll.status === 'active' && islevel === '2'\"\r\n class=\"btn btn-danger\"\r\n (click)=\"handledEndPoll(poll.id)\"\r\n >\r\n End Poll\r\n </button>\r\n </div>\r\n <div *ngIf=\"!poll || poll.status !== 'active'\">\r\n <hr />\r\n No active poll\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.modal-body{display:flex;flex-direction:column;gap:10px}.previous-polls,.create-poll,.current-poll{overflow-y:auto;max-height:20%}.poll{margin-bottom:15px}.close-button{border:none;background:none;cursor:pointer}.form-group{max-width:80%;overflow-x:auto}textarea.form-control{resize:none}\n"] }]
143
+ }], propDecorators: { isPollModalVisible: [{
144
+ type: Input
145
+ }], onClose: [{
146
+ type: Input
147
+ }], position: [{
148
+ type: Input
149
+ }], backgroundColor: [{
150
+ type: Input
151
+ }], member: [{
152
+ type: Input
153
+ }], islevel: [{
154
+ type: Input
155
+ }], polls: [{
156
+ type: Input
157
+ }], poll: [{
158
+ type: Input
159
+ }], socket: [{
160
+ type: Input
161
+ }], roomName: [{
162
+ type: Input
163
+ }], showAlert: [{
164
+ type: Input
165
+ }], updateIsPollModalVisible: [{
166
+ type: Input
167
+ }], handleCreatePoll: [{
168
+ type: Input
169
+ }], handleEndPoll: [{
170
+ type: Input
171
+ }], handleVotePoll: [{
172
+ type: Input
173
+ }] } });
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbC1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYXNmdS1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9wb2xscy1jb21wb25lbnRzL3BvbGwtbW9kYWwvcG9sbC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYXNmdS1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9wb2xscy1jb21wb25lbnRzL3BvbGwtbW9kYWwvcG9sbC1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQW9DLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQXNDN0MsTUFBTSxPQUFPLFNBQVM7SUFDWCxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDM0IsT0FBTyxDQUFjO0lBQ3JCLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDdEIsZUFBZSxHQUFHLFNBQVMsQ0FBQztJQUM1QixNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ1osT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNiLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsSUFBSSxHQUFnQixJQUFJLENBQUM7SUFDekIsTUFBTSxHQUFXLEVBQVksQ0FBQztJQUM5QixRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2QsU0FBUyxHQUFjLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUNoQyx3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Q0FBQyxNQUFNO1lBQ3RELEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNO1NBQ3pELENBQUM7SUFDSixDQUFDO3VHQTlJVSxTQUFTOzJGQUFULFNBQVMscWdCQzNDdEIscWtNQXdLQSwwYkRqSVksWUFBWSxvVkFBRSxpQkFBaUIsNFBBQUUsV0FBVzs7MkZBSTNDLFNBQVM7a0JBUHJCLFNBQVM7K0JBQ0UsZ0JBQWdCLGNBQ2QsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLFdBQVcsQ0FBQzs4QkFLOUMsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24gKi9cbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9udEF3ZXNvbWVNb2R1bGUgfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XG5pbXBvcnQgeyBmYVRpbWVzIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU29ja2V0IH0gZnJvbSAnc29ja2V0LmlvLWNsaWVudCc7XG5pbXBvcnQge1xuICBQb2xsLFxuICBTaG93QWxlcnQsXG4gIEhhbmRsZUNyZWF0ZVBvbGxUeXBlLFxuICBIYW5kbGVFbmRQb2xsVHlwZSxcbiAgSGFuZGxlVm90ZVBvbGxUeXBlLFxufSBmcm9tICcuLi8uLi8uLi9AdHlwZXMvdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvbGxNb2RhbE9wdGlvbnMge1xuICBpc1BvbGxNb2RhbFZpc2libGU6IGJvb2xlYW47XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG4gIHBvc2l0aW9uPzogc3RyaW5nO1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIG1lbWJlcjogc3RyaW5nO1xuICBpc2xldmVsOiBzdHJpbmc7XG4gIHBvbGxzOiBQb2xsW107XG4gIHBvbGw6IFBvbGwgfCBudWxsO1xuICBzb2NrZXQ6IFNvY2tldDtcbiAgcm9vbU5hbWU6IHN0cmluZztcbiAgc2hvd0FsZXJ0PzogU2hvd0FsZXJ0O1xuICB1cGRhdGVJc1BvbGxNb2RhbFZpc2libGU6IChpc1Zpc2libGU6IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgaGFuZGxlQ3JlYXRlUG9sbDogSGFuZGxlQ3JlYXRlUG9sbFR5cGU7XG4gIGhhbmRsZUVuZFBvbGw6IEhhbmRsZUVuZFBvbGxUeXBlO1xuICBoYW5kbGVWb3RlUG9sbDogSGFuZGxlVm90ZVBvbGxUeXBlO1xufVxuXG5leHBvcnQgdHlwZSBQb2xsTW9kYWxUeXBlID0gKG9wdGlvbnM6IFBvbGxNb2RhbE9wdGlvbnMpID0+IEhUTUxFbGVtZW50O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcG9sbC1tb2RhbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvbnRBd2Vzb21lTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9wb2xsLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcG9sbC1tb2RhbC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFBvbGxNb2RhbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgaXNQb2xsTW9kYWxWaXNpYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIG9uQ2xvc2UhOiAoKSA9PiB2b2lkO1xuICBASW5wdXQoKSBwb3NpdGlvbiA9ICd0b3BSaWdodCc7XG4gIEBJbnB1dCgpIGJhY2tncm91bmRDb2xvciA9ICcjZjVmNWY1JztcbiAgQElucHV0KCkgbWVtYmVyID0gJyc7XG4gIEBJbnB1dCgpIGlzbGV2ZWwgPSAnJztcbiAgQElucHV0KCkgcG9sbHM6IFBvbGxbXSA9IFtdO1xuICBASW5wdXQoKSBwb2xsOiBQb2xsIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIHNvY2tldDogU29ja2V0ID0ge30gYXMgU29ja2V0O1xuICBASW5wdXQoKSByb29tTmFtZSA9ICcnO1xuICBASW5wdXQoKSBzaG93QWxlcnQ6IFNob3dBbGVydCA9ICgpID0+IHt9O1xuICBASW5wdXQoKSB1cGRhdGVJc1BvbGxNb2RhbFZpc2libGU6IChpc1Zpc2libGU6IGJvb2xlYW4pID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgQElucHV0KCkgaGFuZGxlQ3JlYXRlUG9sbCE6IEhhbmRsZUNyZWF0ZVBvbGxUeXBlO1xuICBASW5wdXQoKSBoYW5kbGVFbmRQb2xsITogSGFuZGxlRW5kUG9sbFR5cGU7XG4gIEBJbnB1dCgpIGhhbmRsZVZvdGVQb2xsITogSGFuZGxlVm90ZVBvbGxUeXBlO1xuXG4gIGZhVGltZXMgPSBmYVRpbWVzO1xuICBuZXdQb2xsOiBhbnkgPSB7IHF1ZXN0aW9uOiAnJywgdHlwZTogJycsIG9wdGlvbnM6IFtdIH07XG5cbiAgc2NyZWVuV2lkdGg6IG51bWJlciA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICBtb2RhbFdpZHRoOiBudW1iZXIgPSB0aGlzLnNjcmVlbldpZHRoID4gNTAwID8gMzUwIDogMC43ICogdGhpcy5zY3JlZW5XaWR0aDtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlbmRlclBvbGxzKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2lzUG9sbE1vZGFsVmlzaWJsZSddKSB7XG4gICAgICB0aGlzLnJlbmRlclBvbGxzKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyUG9sbHMgPSAoKSA9PiB7XG4gICAgbGV0IGFjdGl2ZVBvbGxDb3VudCA9IDA7XG5cbiAgICB0aGlzLnBvbGxzICYmXG4gICAgICB0aGlzLnBvbGxzLmZvckVhY2goKHBvbGxlZDogYW55KSA9PiB7XG4gICAgICAgIGlmIChwb2xsZWQuc3RhdHVzID09PSAnYWN0aXZlJyAmJiB0aGlzLnBvbGwgJiYgcG9sbGVkLmlkID09PSB0aGlzLnBvbGwuaWQpIHtcbiAgICAgICAgICBhY3RpdmVQb2xsQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc2xldmVsID09ICcyJyAmJiBhY3RpdmVQb2xsQ291bnQgPT09IDApIHtcbiAgICAgIGlmICh0aGlzLnBvbGwgJiYgdGhpcy5wb2xsLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgICAgdGhpcy5wb2xsLnN0YXR1cyA9ICdpbmFjdGl2ZSc7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNhbGN1bGF0ZVBlcmNlbnRhZ2Uodm90ZXM6IG51bWJlcltdLCBvcHRpb25JbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB0b3RhbFZvdGVzID0gdm90ZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gICAgcmV0dXJuIHRvdGFsVm90ZXMgPiAwID8gcGFyc2VGbG9hdCgoKHZvdGVzW29wdGlvbkluZGV4XSAvIHRvdGFsVm90ZXMpICogMTAwKS50b0ZpeGVkKDIpKSA6IDA7XG4gIH1cblxuICBoYW5kbGVQb2xsVHlwZUNoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3QgdHlwZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBsZXQgb3B0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAndHJ1ZUZhbHNlJzpcbiAgICAgICAgb3B0aW9ucyA9IFsnVHJ1ZScsICdGYWxzZSddO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3llc05vJzpcbiAgICAgICAgb3B0aW9ucyA9IFsnWWVzJywgJ05vJ107XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY3VzdG9tJzpcbiAgICAgICAgb3B0aW9ucyA9IFsnJywgJycsICcnLCAnJywgJyddOyAvLyBQcmVsb2FkIDUgZW1wdHkgb3B0aW9uc1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIG9wdGlvbnMgPSBbXTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5uZXdQb2xsID0geyAuLi50aGlzLm5ld1BvbGwsIHR5cGUsIG9wdGlvbnMgfTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlQW5kQ3JlYXRlUG9sbCgpIHtcbiAgICAvLyBSZW1vdmUgZW1wdHkgb3B0aW9ucyBiZWZvcmUgY3JlYXRpbmcgdGhlIHBvbGxcbiAgICB0aGlzLm5ld1BvbGwub3B0aW9ucyA9IHRoaXMubmV3UG9sbC5vcHRpb25zLmZpbHRlcigob3B0aW9uOiBzdHJpbmcpID0+IG9wdGlvbi50cmltKCkgIT09ICcnKTtcblxuICAgIC8vIEVuc3VyZSB0aGVyZSdzIGF0IGxlYXN0IG9uZSB2YWxpZCBvcHRpb25cbiAgICBpZiAodGhpcy5uZXdQb2xsLm9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDcmVhdGVQb2xsKHtcbiAgICAgICAgcG9sbDogdGhpcy5uZXdQb2xsLFxuICAgICAgICBzb2NrZXQ6IHRoaXMuc29ja2V0LFxuICAgICAgICByb29tTmFtZTogdGhpcy5yb29tTmFtZSxcbiAgICAgICAgc2hvd0FsZXJ0OiB0aGlzLnNob3dBbGVydCxcbiAgICAgICAgdXBkYXRlSXNQb2xsTW9kYWxWaXNpYmxlOiB0aGlzLnVwZGF0ZUlzUG9sbE1vZGFsVmlzaWJsZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZWRWb3RlUG9sbChwb2xsSWQ6IHN0cmluZywgb3B0aW9uSW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuaGFuZGxlVm90ZVBvbGwoe1xuICAgICAgcG9sbElkLFxuICAgICAgb3B0aW9uSW5kZXgsXG4gICAgICBzb2NrZXQ6IHRoaXMuc29ja2V0LFxuICAgICAgbWVtYmVyOiB0aGlzLm1lbWJlcixcbiAgICAgIHJvb21OYW1lOiB0aGlzLnJvb21OYW1lLFxuICAgICAgc2hvd0FsZXJ0OiB0aGlzLnNob3dBbGVydCxcbiAgICAgIHVwZGF0ZUlzUG9sbE1vZGFsVmlzaWJsZTogdGhpcy51cGRhdGVJc1BvbGxNb2RhbFZpc2libGUsXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVkRW5kUG9sbChwb2xsSWQ6IHN0cmluZykge1xuICAgIHRoaXMuaGFuZGxlRW5kUG9sbCh7XG4gICAgICBwb2xsSWQsXG4gICAgICBzb2NrZXQ6IHRoaXMuc29ja2V0LFxuICAgICAgcm9vbU5hbWU6IHRoaXMucm9vbU5hbWUsXG4gICAgICBzaG93QWxlcnQ6IHRoaXMuc2hvd0FsZXJ0LFxuICAgICAgdXBkYXRlSXNQb2xsTW9kYWxWaXNpYmxlOiB0aGlzLnVwZGF0ZUlzUG9sbE1vZGFsVmlzaWJsZSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBtb2RhbENvbnRhaW5lclN0eWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIHRvcDogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuNSknLFxuICAgICAgZGlzcGxheTogdGhpcy5pc1BvbGxNb2RhbFZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnLFxuICAgICAgekluZGV4OiA5OTksXG4gICAgfTtcbiAgfVxuXG4gIGdldCBtb2RhbENvbnRlbnRTdHlsZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFja2dyb3VuZENvbG9yLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMTBweCcsXG4gICAgICBwYWRkaW5nOiAnMTBweCcsXG4gICAgICB3aWR0aDogYCR7dGhpcy5tb2RhbFdpZHRofXB4YCxcbiAgICAgIG1heEhlaWdodDogJzc1JScsXG4gICAgICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgICAgIHRvcDogdGhpcy5wb3NpdGlvbi5pbmNsdWRlcygndG9wJykgPyAnMTBweCcgOiAnYXV0bycsXG4gICAgICBib3R0b206IHRoaXMucG9zaXRpb24uaW5jbHVkZXMoJ2JvdHRvbScpID8gJzEwcHgnIDogJ2F1dG8nLFxuICAgICAgbGVmdDogdGhpcy5wb3NpdGlvbi5pbmNsdWRlcygnTGVmdCcpID8gJzEwcHgnIDogJ2F1dG8nLFxuICAgICAgcmlnaHQ6IHRoaXMucG9zaXRpb24uaW5jbHVkZXMoJ1JpZ2h0JykgPyAnMTBweCcgOiAnYXV0bycsXG4gICAgfTtcbiAgfVxufVxuIiwiPGRpdiBbbmdTdHlsZV09XCJtb2RhbENvbnRhaW5lclN0eWxlXCI+XHJcbiAgPGRpdiBbbmdTdHlsZV09XCJtb2RhbENvbnRlbnRTdHlsZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICA8aDI+UG9sbHM8L2gyPlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJvbkNsb3NlKClcIiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiPlxyXG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhVGltZXNcIj48L2ZhLWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8aHIgLz5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgIDwhLS0gUHJldmlvdXMgUG9sbHMgU2VjdGlvbiAtLT5cclxuICAgICAgPGRpdiAqbmdJZj1cImlzbGV2ZWwgPT09ICcyJ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aW91cy1wb2xsc1wiPlxyXG4gICAgICAgICAgPGg1PlByZXZpb3VzIFBvbGxzPC9oNT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwb2xscy5sZW5ndGggPT09IDBcIj5ObyBwb2xscyBhdmFpbGFibGU8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIFVzaW5nIG5nLWNvbnRhaW5lciB0byBhdm9pZCBtdWx0aXBsZSBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZXMgb24gdGhlIHNhbWUgZWxlbWVudCAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBvbGxlZCBvZiBwb2xsc1wiPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhcG9sbCB8fCBwb2xsZWQuaWQgIT09IHBvbGwuaWQgfHwgcG9sbC5zdGF0dXMgIT09ICdhY3RpdmUnXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInBvbGxcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGg2PlF1ZXN0aW9uOjwvaDY+XHJcbiAgICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICByb3dzPVwiM1wiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwicG9sbGVkLnF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICA+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICA8aDY+T3B0aW9uczo8L2g2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwb2xsZWQub3B0aW9uczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAge3sgb3B0aW9uIH19OiB7eyBwb2xsZWQudm90ZXNbaV0gfX0gdm90ZXMgKHt7XHJcbiAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBlcmNlbnRhZ2UocG9sbGVkLnZvdGVzLCBpKVxyXG4gICAgICAgICAgICAgICAgfX0lKVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS0gRW5kIFBvbGwgQnV0dG9uIChpZiBwb2xsIGlzIGFjdGl2ZSkgLS0+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xsZWQuc3RhdHVzID09PSAnYWN0aXZlJ1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVkRW5kUG9sbChwb2xsZWQuaWQpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBFbmQgUG9sbFxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxociAvPlxyXG5cclxuICAgICAgICA8IS0tIENyZWF0ZSBQb2xsIFNlY3Rpb24gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNyZWF0ZS1wb2xsXCI+XHJcbiAgICAgICAgICA8aDU+Q3JlYXRlIGEgTmV3IFBvbGw8L2g1PlxyXG4gICAgICAgICAgPGZvcm0gKG5nU3VibWl0KT1cInZhbGlkYXRlQW5kQ3JlYXRlUG9sbCgpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBvbGxRdWVzdGlvblwiPlBvbGwgUXVlc3Rpb248L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDx0ZXh0YXJlYVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJwb2xsUXVlc3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgcm93cz1cIjNcIlxyXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoPVwiMzAwXCJcclxuICAgICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld1BvbGwucXVlc3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgbmFtZT1cInF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICA+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBvbGxUeXBlXCI+U2VsZWN0IFBvbGwgQW5zd2VyIFR5cGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxzZWxlY3RcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgIGlkPVwicG9sbFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlUG9sbFR5cGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld1BvbGwudHlwZVwiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwidHlwZVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkNob29zZS4uLjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInRydWVGYWxzZVwiPlRydWUvRmFsc2U8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ5ZXNOb1wiPlllcy9Obzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImN1c3RvbVwiPkN1c3RvbTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gUmVuZGVyIFBvbGwgT3B0aW9ucyAtLT5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwibmV3UG9sbC50eXBlID09PSAndHJ1ZUZhbHNlJyB8fCBuZXdQb2xsLnR5cGUgPT09ICd5ZXNObydcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBuZXdQb2xsLm9wdGlvbnM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcclxuICAgICAgICAgICAgICAgICAgbmFtZT1cInBvbGxPcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnRvTG93ZXJDYXNlKClcIlxyXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiJ29wdGlvbicgKyBvcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbZm9yXT1cIidvcHRpb24nICsgb3B0aW9uXCI+e3tcclxuICAgICAgICAgICAgICAgICAgb3B0aW9uXHJcbiAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibmV3UG9sbC50eXBlID09PSAnY3VzdG9tJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgbmV3UG9sbC5vcHRpb25zOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1ncm91cFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk9wdGlvbiB7eyBpICsgMSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIG1heExlbmd0aD1cIjUwXCJcclxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJuZXdQb2xsLm9wdGlvbnNbaV1cIlxyXG4gICAgICAgICAgICAgICAgICBuYW1lPVwib3B0aW9ue3sgaSB9fVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5DcmVhdGUgUG9sbDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxociAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gQ3VycmVudCBQb2xsIFNlY3Rpb24gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjdXJyZW50LXBvbGxcIj5cclxuICAgICAgICA8aDU+Q3VycmVudCBQb2xsPC9oNT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwicG9sbCAmJiBwb2xsLnN0YXR1cyA9PT0gJ2FjdGl2ZSdcIj5cclxuICAgICAgICAgIDxoNj5RdWVzdGlvbjo8L2g2PlxyXG4gICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgcm93cz1cIjNcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJwb2xsLnF1ZXN0aW9uXCJcclxuICAgICAgICAgID48L3RleHRhcmVhPlxyXG4gICAgICAgICAgPGg2Pk9wdGlvbnM6PC9oNj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwb2xsLm9wdGlvbnM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2tcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgICAgbmFtZT1cInBvbGxPcHRpb25cIlxyXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJpXCJcclxuICAgICAgICAgICAgICBpZD1cInBvbGxPcHRpb257eyBpIH19XCJcclxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJwb2xsLnZvdGVycz8uW21lbWJlcl0gPT09IGlcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlZFZvdGVQb2xsKHBvbGwuaWQsIGkpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFtmb3JdPVwiJ3BvbGxPcHRpb24nICsgaVwiPnt7XHJcbiAgICAgICAgICAgICAgb3B0aW9uXHJcbiAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAqbmdJZj1cInBvbGwuc3RhdHVzID09PSAnYWN0aXZlJyAmJiBpc2xldmVsID09PSAnMidcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZWRFbmRQb2xsKHBvbGwuaWQpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgRW5kIFBvbGxcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhcG9sbCB8fCBwb2xsLnN0YXR1cyAhPT0gJ2FjdGl2ZSdcIj5cclxuICAgICAgICAgIDxociAvPlxyXG4gICAgICAgICAgTm8gYWN0aXZlIHBvbGxcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -0,0 +1,77 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@angular/forms";
7
+ export class AdvancedPanelComponent {
8
+ parameters = {};
9
+ selectedOrientationVideo;
10
+ selectedRecordingNameTags;
11
+ selectedRecordingVideoType;
12
+ selectedRecordingDisplayType;
13
+ showBackgroundColorModal = false;
14
+ showNameTagsColorModal = false;
15
+ selectedColorType = '';
16
+ recordingText;
17
+ customText;
18
+ recordingPosition;
19
+ ngOnInit() {
20
+ this.selectedOrientationVideo = this.parameters?.recordingOrientationVideo ?? '';
21
+ this.selectedRecordingNameTags = this.parameters?.recordingNameTags ?? false;
22
+ this.selectedRecordingVideoType = this.parameters?.recordingVideoType ?? '';
23
+ this.selectedRecordingDisplayType = this.parameters?.recordingDisplayType ?? 'media';
24
+ this.recordingText = this.parameters?.recordingAddText ?? false;
25
+ this.customText = this.parameters?.recordingCustomText ?? '';
26
+ this.recordingPosition = this.parameters?.recordingCustomTextPosition ?? '';
27
+ }
28
+ ngOnChanges(changes) {
29
+ if (changes['parameters']) {
30
+ this.parameters = changes['parameters'].currentValue;
31
+ this.selectedOrientationVideo = this.parameters.recordingOrientationVideo;
32
+ this.selectedRecordingNameTags = this.parameters.recordingNameTags;
33
+ this.selectedRecordingVideoType = this.parameters.recordingVideoType;
34
+ this.selectedRecordingDisplayType = this.parameters.recordingDisplayType;
35
+ this.recordingText = this.parameters.recordingAddText;
36
+ this.customText = this.parameters.recordingCustomText;
37
+ this.recordingPosition = this.parameters.recordingCustomTextPosition;
38
+ }
39
+ }
40
+ validateTextInput(input) {
41
+ const regex = /^[a-zA-Z0-9\s]{1,40}$/;
42
+ return regex.test(input);
43
+ }
44
+ handleTextChange(value) {
45
+ this.recordingText = value;
46
+ this.parameters.updateRecordingAddText(value);
47
+ }
48
+ onChangeTextHandler(text) {
49
+ if (text && text.length > 0 && !this.validateTextInput(text)) {
50
+ return;
51
+ }
52
+ this.parameters.updateRecordingCustomText(text);
53
+ this.customText = text;
54
+ }
55
+ handleColorChange(selectedColor, event) {
56
+ const input = event.target;
57
+ const color = input.value;
58
+ if (selectedColor === 'backgroundColor') {
59
+ this.parameters.updateRecordingBackgroundColor(color);
60
+ }
61
+ else if (selectedColor === 'customTextColor') {
62
+ this.parameters.updateRecordingCustomTextColor(color);
63
+ }
64
+ else if (selectedColor === 'nameTagsColor') {
65
+ this.parameters.updateRecordingNameTagsColor(color);
66
+ }
67
+ }
68
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AdvancedPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
69
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: AdvancedPanelComponent, isStandalone: true, selector: "app-advanced-panel-component", inputs: { parameters: "parameters" }, usesOnChanges: true, ngImport: i0, template: "<div>\r\n <!-- Video Type -->\r\n <div>\r\n <label class=\"label\">Video Type:</label>\r\n <select [(ngModel)]=\"selectedRecordingVideoType\" (change)=\"parameters.updateRecordingVideoType(selectedRecordingVideoType)\">\r\n <option value=\"fullDisplay\">Full Display (no background)</option>\r\n <option value=\"bestDisplay\">Full Video</option>\r\n <option value=\"all\">All</option>\r\n </select>\r\n </div>\r\n <hr />\r\n\r\n <!-- Display Type -->\r\n <div *ngIf=\"parameters.eventType !== 'broadcast'\">\r\n <label class=\"label\">Display Type:</label>\r\n <select [(ngModel)]=\"selectedRecordingDisplayType\" (change)=\"parameters.updateRecordingDisplayType(selectedRecordingDisplayType)\">\r\n <option value=\"video\">Only Video Participants</option>\r\n <option value=\"videoOpt\">Only Video Participants (optimized)</option>\r\n <option value=\"media\">Participants with media</option>\r\n <option value=\"all\">All Participants</option>\r\n </select>\r\n </div>\r\n <hr />\r\n\r\n <!-- Background Color -->\r\n <div>\r\n <label class=\"label\">Background Color:</label>\r\n <div class=\"color-preview\" [ngStyle]=\"{'background-color': parameters.recordingBackgroundColor}\">\r\n {{ parameters.recordingBackgroundColor }}\r\n </div>\r\n <input type=\"color\" [(ngModel)]=\"parameters.recordingBackgroundColor\" (change)=\"handleColorChange('backgroundColor', $event)\" />\r\n <span class=\"label\">Click to select color</span>\r\n </div>\r\n <hr />\r\n\r\n <!-- Add Text -->\r\n <div>\r\n <label class=\"label\">Add Text:</label>\r\n <select [(ngModel)]=\"recordingText\" (change)=\"handleTextChange(recordingText)\">\r\n <option [ngValue]=\"true\">True</option>\r\n <option [ngValue]=\"false\">False</option>\r\n </select>\r\n </div>\r\n <hr />\r\n\r\n <!-- Custom Text -->\r\n <div *ngIf=\"recordingText\">\r\n <label class=\"label\">Custom Text:</label>\r\n <input type=\"text\" [(ngModel)]=\"customText\" (input)=\"onChangeTextHandler(customText)\" />\r\n <hr />\r\n </div>\r\n\r\n <!-- Custom Text Position -->\r\n <div *ngIf=\"recordingText\">\r\n <label class=\"label\">Custom Text Position:</label>\r\n <select [(ngModel)]=\"recordingPosition\" (change)=\"parameters.updateRecordingCustomTextPosition(recordingPosition)\">\r\n <option value=\"top\">Top</option>\r\n <option value=\"middle\">Middle</option>\r\n <option value=\"bottom\">Bottom</option>\r\n </select>\r\n <hr />\r\n </div>\r\n\r\n <!-- Custom Text Color -->\r\n <div *ngIf=\"recordingText\">\r\n <label class=\"label\">Custom Text Color:</label>\r\n <div class=\"color-preview\" [ngStyle]=\"{'background-color': parameters.recordingCustomTextColor}\">\r\n {{ parameters.recordingCustomTextColor }}\r\n </div>\r\n <input type=\"color\" [(ngModel)]=\"parameters.recordingCustomTextColor\" (change)=\"handleColorChange('customTextColor', $event)\" />\r\n <span class=\"label\">Click to select color</span>\r\n <hr />\r\n </div>\r\n\r\n <!-- Add Name Tags -->\r\n <div>\r\n <label class=\"label\">Add Name Tags:</label>\r\n <select [(ngModel)]=\"selectedRecordingNameTags\" (change)=\"parameters.updateRecordingNameTags(selectedRecordingNameTags)\">\r\n <option [ngValue]=\"true\">True</option>\r\n <option [ngValue]=\"false\">False</option>\r\n </select>\r\n </div>\r\n <hr />\r\n\r\n <!-- Name Tags Color -->\r\n <div>\r\n <label class=\"label\">Name Tags Color:</label>\r\n <div class=\"color-preview\" [ngStyle]=\"{'background-color': parameters.recordingNameTagsColor}\">\r\n {{ parameters.recordingNameTagsColor }}\r\n </div>\r\n <input type=\"color\" [(ngModel)]=\"parameters.recordingNameTagsColor\" (change)=\"handleColorChange('nameTagsColor', $event)\" />\r\n <span class=\"label\">Click to select color</span>\r\n </div>\r\n <hr />\r\n\r\n <!-- Orientation (Video) -->\r\n <div>\r\n <label class=\"label\">Orientation (Video):</label>\r\n <select [(ngModel)]=\"selectedOrientationVideo\" (change)=\"parameters.updateRecordingOrientationVideo(selectedOrientationVideo)\">\r\n <option value=\"landscape\">Landscape</option>\r\n <option value=\"portrait\">Portrait</option>\r\n <option value=\"all\">All</option>\r\n </select>\r\n </div>\r\n <hr />\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AdvancedPanelComponent, decorators: [{
72
+ type: Component,
73
+ args: [{ selector: 'app-advanced-panel-component', standalone: true, imports: [CommonModule, FormsModule], template: "<div>\r\n <!-- Video Type -->\r\n <div>\r\n <label class=\"label\">Video Type:</label>\r\n <select [(ngModel)]=\"selectedRecordingVideoType\" (change)=\"parameters.updateRecordingVideoType(selectedRecordingVideoType)\">\r\n <option value=\"fullDisplay\">Full Display (no background)</option>\r\n <option value=\"bestDisplay\">Full Video</option>\r\n <option value=\"all\">All</option>\r\n </select>\r\n </div>\r\n <hr />\r\n\r\n <!-- Display Type -->\r\n <div *ngIf=\"parameters.eventType !== 'broadcast'\">\r\n <label class=\"label\">Display Type:</label>\r\n <select [(ngModel)]=\"selectedRecordingDisplayType\" (change)=\"parameters.updateRecordingDisplayType(selectedRecordingDisplayType)\">\r\n <option value=\"video\">Only Video Participants</option>\r\n <option value=\"videoOpt\">Only Video Participants (optimized)</option>\r\n <option value=\"media\">Participants with media</option>\r\n <option value=\"all\">All Participants</option>\r\n </select>\r\n </div>\r\n <hr />\r\n\r\n <!-- Background Color -->\r\n <div>\r\n <label class=\"label\">Background Color:</label>\r\n <div class=\"color-preview\" [ngStyle]=\"{'background-color': parameters.recordingBackgroundColor}\">\r\n {{ parameters.recordingBackgroundColor }}\r\n </div>\r\n <input type=\"color\" [(ngModel)]=\"parameters.recordingBackgroundColor\" (change)=\"handleColorChange('backgroundColor', $event)\" />\r\n <span class=\"label\">Click to select color</span>\r\n </div>\r\n <hr />\r\n\r\n <!-- Add Text -->\r\n <div>\r\n <label class=\"label\">Add Text:</label>\r\n <select [(ngModel)]=\"recordingText\" (change)=\"handleTextChange(recordingText)\">\r\n <option [ngValue]=\"true\">True</option>\r\n <option [ngValue]=\"false\">False</option>\r\n </select>\r\n </div>\r\n <hr />\r\n\r\n <!-- Custom Text -->\r\n <div *ngIf=\"recordingText\">\r\n <label class=\"label\">Custom Text:</label>\r\n <input type=\"text\" [(ngModel)]=\"customText\" (input)=\"onChangeTextHandler(customText)\" />\r\n <hr />\r\n </div>\r\n\r\n <!-- Custom Text Position -->\r\n <div *ngIf=\"recordingText\">\r\n <label class=\"label\">Custom Text Position:</label>\r\n <select [(ngModel)]=\"recordingPosition\" (change)=\"parameters.updateRecordingCustomTextPosition(recordingPosition)\">\r\n <option value=\"top\">Top</option>\r\n <option value=\"middle\">Middle</option>\r\n <option value=\"bottom\">Bottom</option>\r\n </select>\r\n <hr />\r\n </div>\r\n\r\n <!-- Custom Text Color -->\r\n <div *ngIf=\"recordingText\">\r\n <label class=\"label\">Custom Text Color:</label>\r\n <div class=\"color-preview\" [ngStyle]=\"{'background-color': parameters.recordingCustomTextColor}\">\r\n {{ parameters.recordingCustomTextColor }}\r\n </div>\r\n <input type=\"color\" [(ngModel)]=\"parameters.recordingCustomTextColor\" (change)=\"handleColorChange('customTextColor', $event)\" />\r\n <span class=\"label\">Click to select color</span>\r\n <hr />\r\n </div>\r\n\r\n <!-- Add Name Tags -->\r\n <div>\r\n <label class=\"label\">Add Name Tags:</label>\r\n <select [(ngModel)]=\"selectedRecordingNameTags\" (change)=\"parameters.updateRecordingNameTags(selectedRecordingNameTags)\">\r\n <option [ngValue]=\"true\">True</option>\r\n <option [ngValue]=\"false\">False</option>\r\n </select>\r\n </div>\r\n <hr />\r\n\r\n <!-- Name Tags Color -->\r\n <div>\r\n <label class=\"label\">Name Tags Color:</label>\r\n <div class=\"color-preview\" [ngStyle]=\"{'background-color': parameters.recordingNameTagsColor}\">\r\n {{ parameters.recordingNameTagsColor }}\r\n </div>\r\n <input type=\"color\" [(ngModel)]=\"parameters.recordingNameTagsColor\" (change)=\"handleColorChange('nameTagsColor', $event)\" />\r\n <span class=\"label\">Click to select color</span>\r\n </div>\r\n <hr />\r\n\r\n <!-- Orientation (Video) -->\r\n <div>\r\n <label class=\"label\">Orientation (Video):</label>\r\n <select [(ngModel)]=\"selectedOrientationVideo\" (change)=\"parameters.updateRecordingOrientationVideo(selectedOrientationVideo)\">\r\n <option value=\"landscape\">Landscape</option>\r\n <option value=\"portrait\">Portrait</option>\r\n <option value=\"all\">All</option>\r\n </select>\r\n </div>\r\n <hr />\r\n</div>\r\n" }]
74
+ }], propDecorators: { parameters: [{
75
+ type: Input
76
+ }] } });
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtcGFuZWwtY29tcG9uZW50cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYXNmdS1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9yZWNvcmRpbmctY29tcG9uZW50cy9hZHZhbmNlZC1wYW5lbC1jb21wb25lbnQvYWR2YW5jZWQtcGFuZWwtY29tcG9uZW50cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYXNmdS1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9yZWNvcmRpbmctY29tcG9uZW50cy9hZHZhbmNlZC1wYW5lbC1jb21wb25lbnQvYWR2YW5jZWQtcGFuZWwtY29tcG9uZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBb0M3QyxNQUFNLE9BQU8sc0JBQXNCO0lBQ3hCLFVBQVUsR0FBNEIsRUFBNkIsQ0FBQztJQUU3RSx3QkFBd0IsQ0FBVTtJQUNsQyx5QkFBeUIsQ0FBVztJQUNwQywwQkFBMEIsQ0FBVTtJQUNwQyw0QkFBNEIsQ0FBNkI7SUFDekQsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztJQUMvQixpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDdkIsYUFBYSxDQUFXO0lBQ3hCLFVBQVUsQ0FBVTtJQUNwQixpQkFBaUIsQ0FBVTtJQUUzQixRQUFRO1FBQ04sSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUseUJBQXlCLElBQUksRUFBRSxDQUFDO1FB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QWUsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7dUdBakVVLHNCQUFzQjsyRkFBdEIsc0JBQXNCLG1KQ3RDbkMsa3pJQTBHQSx5RER0RVksWUFBWSx1TkFBRSxXQUFXOzsyRkFFeEIsc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNFLDhCQUE4QixjQUM1QixJQUFJLFdBR1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDOzhCQUczQixVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEV2ZW50VHlwZSB9IGZyb20gJy4uLy4uLy4uL0B0eXBlcy90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZWRQYW5lbFBhcmFtZXRlcnMge1xuICByZWNvcmRpbmdPcmllbnRhdGlvblZpZGVvOiBzdHJpbmc7XG4gIHJlY29yZGluZ05hbWVUYWdzOiBib29sZWFuO1xuICByZWNvcmRpbmdWaWRlb1R5cGU6IHN0cmluZztcbiAgcmVjb3JkaW5nRGlzcGxheVR5cGU6ICd2aWRlbycgfCAnbWVkaWEnIHwgJ2FsbCc7XG4gIHJlY29yZGluZ0FkZFRleHQ6IGJvb2xlYW47XG4gIHJlY29yZGluZ0N1c3RvbVRleHQ6IHN0cmluZztcbiAgcmVjb3JkaW5nQ3VzdG9tVGV4dFBvc2l0aW9uOiBzdHJpbmc7XG4gIHJlY29yZGluZ0JhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICByZWNvcmRpbmdDdXN0b21UZXh0Q29sb3I6IHN0cmluZztcbiAgcmVjb3JkaW5nTmFtZVRhZ3NDb2xvcjogc3RyaW5nO1xuICB1cGRhdGVSZWNvcmRpbmdPcmllbnRhdGlvblZpZGVvOiAob3JpZW50YXRpb246IHN0cmluZykgPT4gdm9pZDtcbiAgdXBkYXRlUmVjb3JkaW5nTmFtZVRhZ3M6IChuYW1lVGFnczogYm9vbGVhbikgPT4gdm9pZDtcbiAgdXBkYXRlUmVjb3JkaW5nVmlkZW9UeXBlOiAodmlkZW9UeXBlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHVwZGF0ZVJlY29yZGluZ0Rpc3BsYXlUeXBlOiAoZGlzcGxheVR5cGU6ICd2aWRlbycgfCAnbWVkaWEnIHwgJ2FsbCcpID0+IHZvaWQ7XG4gIHVwZGF0ZVJlY29yZGluZ0FkZFRleHQ6IChhZGRUZXh0OiBib29sZWFuKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdDdXN0b21UZXh0OiAoY3VzdG9tVGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdDdXN0b21UZXh0UG9zaXRpb246IChwb3NpdGlvbjogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdCYWNrZ3JvdW5kQ29sb3I6IChjb2xvcjogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdDdXN0b21UZXh0Q29sb3I6IChjb2xvcjogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdOYW1lVGFnc0NvbG9yOiAoY29sb3I6IHN0cmluZykgPT4gdm9pZDtcbiAgZXZlbnRUeXBlOiBFdmVudFR5cGU7XG59XG5cbmV4cG9ydCB0eXBlIEFkdmFuY2VkUGFuZWxUeXBlID0gKG9wdGlvbnM6IEFkdmFuY2VkUGFuZWxQYXJhbWV0ZXJzKSA9PiBIVE1MRWxlbWVudDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXBhbmVsLWNvbXBvbmVudCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1wYW5lbC1jb21wb25lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hZHZhbmNlZC1wYW5lbC1jb21wb25lbnQuY29tcG9uZW50LmNzcyddLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkUGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHBhcmFtZXRlcnM6IEFkdmFuY2VkUGFuZWxQYXJhbWV0ZXJzID0ge30gYXMgQWR2YW5jZWRQYW5lbFBhcmFtZXRlcnM7XG5cbiAgc2VsZWN0ZWRPcmllbnRhdGlvblZpZGVvITogc3RyaW5nO1xuICBzZWxlY3RlZFJlY29yZGluZ05hbWVUYWdzITogYm9vbGVhbjtcbiAgc2VsZWN0ZWRSZWNvcmRpbmdWaWRlb1R5cGUhOiBzdHJpbmc7XG4gIHNlbGVjdGVkUmVjb3JkaW5nRGlzcGxheVR5cGUhOiAndmlkZW8nIHwgJ21lZGlhJyB8ICdhbGwnO1xuICBzaG93QmFja2dyb3VuZENvbG9yTW9kYWwgPSBmYWxzZTtcbiAgc2hvd05hbWVUYWdzQ29sb3JNb2RhbCA9IGZhbHNlO1xuICBzZWxlY3RlZENvbG9yVHlwZSA9ICcnO1xuICByZWNvcmRpbmdUZXh0ITogYm9vbGVhbjtcbiAgY3VzdG9tVGV4dCE6IHN0cmluZztcbiAgcmVjb3JkaW5nUG9zaXRpb24hOiBzdHJpbmc7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWxlY3RlZE9yaWVudGF0aW9uVmlkZW8gPSB0aGlzLnBhcmFtZXRlcnM/LnJlY29yZGluZ09yaWVudGF0aW9uVmlkZW8gPz8gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFJlY29yZGluZ05hbWVUYWdzID0gdGhpcy5wYXJhbWV0ZXJzPy5yZWNvcmRpbmdOYW1lVGFncyA/PyBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkUmVjb3JkaW5nVmlkZW9UeXBlID0gdGhpcy5wYXJhbWV0ZXJzPy5yZWNvcmRpbmdWaWRlb1R5cGUgPz8gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFJlY29yZGluZ0Rpc3BsYXlUeXBlID0gdGhpcy5wYXJhbWV0ZXJzPy5yZWNvcmRpbmdEaXNwbGF5VHlwZSA/PyAnbWVkaWEnO1xuICAgIHRoaXMucmVjb3JkaW5nVGV4dCA9IHRoaXMucGFyYW1ldGVycz8ucmVjb3JkaW5nQWRkVGV4dCA/PyBmYWxzZTtcbiAgICB0aGlzLmN1c3RvbVRleHQgPSB0aGlzLnBhcmFtZXRlcnM/LnJlY29yZGluZ0N1c3RvbVRleHQgPz8gJyc7XG4gICAgdGhpcy5yZWNvcmRpbmdQb3NpdGlvbiA9IHRoaXMucGFyYW1ldGVycz8ucmVjb3JkaW5nQ3VzdG9tVGV4dFBvc2l0aW9uID8/ICcnO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydwYXJhbWV0ZXJzJ10pIHtcbiAgICAgIHRoaXMucGFyYW1ldGVycyA9IGNoYW5nZXNbJ3BhcmFtZXRlcnMnXS5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLnNlbGVjdGVkT3JpZW50YXRpb25WaWRlbyA9IHRoaXMucGFyYW1ldGVycy5yZWNvcmRpbmdPcmllbnRhdGlvblZpZGVvO1xuICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZGluZ05hbWVUYWdzID0gdGhpcy5wYXJhbWV0ZXJzLnJlY29yZGluZ05hbWVUYWdzO1xuICAgICAgdGhpcy5zZWxlY3RlZFJlY29yZGluZ1ZpZGVvVHlwZSA9IHRoaXMucGFyYW1ldGVycy5yZWNvcmRpbmdWaWRlb1R5cGU7XG4gICAgICB0aGlzLnNlbGVjdGVkUmVjb3JkaW5nRGlzcGxheVR5cGUgPSB0aGlzLnBhcmFtZXRlcnMucmVjb3JkaW5nRGlzcGxheVR5cGU7XG4gICAgICB0aGlzLnJlY29yZGluZ1RleHQgPSB0aGlzLnBhcmFtZXRlcnMucmVjb3JkaW5nQWRkVGV4dDtcbiAgICAgIHRoaXMuY3VzdG9tVGV4dCA9IHRoaXMucGFyYW1ldGVycy5yZWNvcmRpbmdDdXN0b21UZXh0O1xuICAgICAgdGhpcy5yZWNvcmRpbmdQb3NpdGlvbiA9IHRoaXMucGFyYW1ldGVycy5yZWNvcmRpbmdDdXN0b21UZXh0UG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVUZXh0SW5wdXQoaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gL15bYS16QS1aMC05XFxzXXsxLDQwfSQvO1xuICAgIHJldHVybiByZWdleC50ZXN0KGlucHV0KTtcbiAgfVxuXG4gIGhhbmRsZVRleHRDaGFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlY29yZGluZ1RleHQgPSB2YWx1ZTtcbiAgICB0aGlzLnBhcmFtZXRlcnMudXBkYXRlUmVjb3JkaW5nQWRkVGV4dCh2YWx1ZSk7XG4gIH1cblxuICBvbkNoYW5nZVRleHRIYW5kbGVyKHRleHQ6IHN0cmluZykge1xuICAgIGlmICh0ZXh0ICYmIHRleHQubGVuZ3RoID4gMCAmJiAhdGhpcy52YWxpZGF0ZVRleHRJbnB1dCh0ZXh0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBhcmFtZXRlcnMudXBkYXRlUmVjb3JkaW5nQ3VzdG9tVGV4dCh0ZXh0KTtcbiAgICB0aGlzLmN1c3RvbVRleHQgPSB0ZXh0O1xuICB9XG5cbiAgaGFuZGxlQ29sb3JDaGFuZ2Uoc2VsZWN0ZWRDb2xvcjogc3RyaW5nLCBldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGNvbG9yID0gaW5wdXQudmFsdWU7XG4gICAgaWYgKHNlbGVjdGVkQ29sb3IgPT09ICdiYWNrZ3JvdW5kQ29sb3InKSB7XG4gICAgICB0aGlzLnBhcmFtZXRlcnMudXBkYXRlUmVjb3JkaW5nQmFja2dyb3VuZENvbG9yKGNvbG9yKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkQ29sb3IgPT09ICdjdXN0b21UZXh0Q29sb3InKSB7XG4gICAgICB0aGlzLnBhcmFtZXRlcnMudXBkYXRlUmVjb3JkaW5nQ3VzdG9tVGV4dENvbG9yKGNvbG9yKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkQ29sb3IgPT09ICduYW1lVGFnc0NvbG9yJykge1xuICAgICAgdGhpcy5wYXJhbWV0ZXJzLnVwZGF0ZVJlY29yZGluZ05hbWVUYWdzQ29sb3IoY29sb3IpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdj5cclxuICA8IS0tIFZpZGVvIFR5cGUgLS0+XHJcbiAgPGRpdj5cclxuICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCI+VmlkZW8gVHlwZTo8L2xhYmVsPlxyXG4gICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkUmVjb3JkaW5nVmlkZW9UeXBlXCIgKGNoYW5nZSk9XCJwYXJhbWV0ZXJzLnVwZGF0ZVJlY29yZGluZ1ZpZGVvVHlwZShzZWxlY3RlZFJlY29yZGluZ1ZpZGVvVHlwZSlcIj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cImZ1bGxEaXNwbGF5XCI+RnVsbCBEaXNwbGF5IChubyBiYWNrZ3JvdW5kKTwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiYmVzdERpc3BsYXlcIj5GdWxsIFZpZGVvPC9vcHRpb24+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCJhbGxcIj5BbGw8L29wdGlvbj5cclxuICAgIDwvc2VsZWN0PlxyXG4gIDwvZGl2PlxyXG4gIDxociAvPlxyXG5cclxuICA8IS0tIERpc3BsYXkgVHlwZSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwicGFyYW1ldGVycy5ldmVudFR5cGUgIT09ICdicm9hZGNhc3QnXCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbFwiPkRpc3BsYXkgVHlwZTo8L2xhYmVsPlxyXG4gICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkUmVjb3JkaW5nRGlzcGxheVR5cGVcIiAoY2hhbmdlKT1cInBhcmFtZXRlcnMudXBkYXRlUmVjb3JkaW5nRGlzcGxheVR5cGUoc2VsZWN0ZWRSZWNvcmRpbmdEaXNwbGF5VHlwZSlcIj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cInZpZGVvXCI+T25seSBWaWRlbyBQYXJ0aWNpcGFudHM8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cInZpZGVvT3B0XCI+T25seSBWaWRlbyBQYXJ0aWNpcGFudHMgKG9wdGltaXplZCk8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cIm1lZGlhXCI+UGFydGljaXBhbnRzIHdpdGggbWVkaWE8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsbFwiPkFsbCBQYXJ0aWNpcGFudHM8L29wdGlvbj5cclxuICAgIDwvc2VsZWN0PlxyXG4gIDwvZGl2PlxyXG4gIDxociAvPlxyXG5cclxuICA8IS0tIEJhY2tncm91bmQgQ29sb3IgLS0+XHJcbiAgPGRpdj5cclxuICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCI+QmFja2dyb3VuZCBDb2xvcjo8L2xhYmVsPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbG9yLXByZXZpZXdcIiBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQtY29sb3InOiBwYXJhbWV0ZXJzLnJlY29yZGluZ0JhY2tncm91bmRDb2xvcn1cIj5cclxuICAgICAge3sgcGFyYW1ldGVycy5yZWNvcmRpbmdCYWNrZ3JvdW5kQ29sb3IgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIFsobmdNb2RlbCldPVwicGFyYW1ldGVycy5yZWNvcmRpbmdCYWNrZ3JvdW5kQ29sb3JcIiAoY2hhbmdlKT1cImhhbmRsZUNvbG9yQ2hhbmdlKCdiYWNrZ3JvdW5kQ29sb3InLCAkZXZlbnQpXCIgLz5cclxuICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5DbGljayB0byBzZWxlY3QgY29sb3I8L3NwYW4+XHJcbiAgPC9kaXY+XHJcbiAgPGhyIC8+XHJcblxyXG4gIDwhLS0gQWRkIFRleHQgLS0+XHJcbiAgPGRpdj5cclxuICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCI+QWRkIFRleHQ6PC9sYWJlbD5cclxuICAgIDxzZWxlY3QgWyhuZ01vZGVsKV09XCJyZWNvcmRpbmdUZXh0XCIgKGNoYW5nZSk9XCJoYW5kbGVUZXh0Q2hhbmdlKHJlY29yZGluZ1RleHQpXCI+XHJcbiAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwidHJ1ZVwiPlRydWU8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJmYWxzZVwiPkZhbHNlPC9vcHRpb24+XHJcbiAgICA8L3NlbGVjdD5cclxuICA8L2Rpdj5cclxuICA8aHIgLz5cclxuXHJcbiAgPCEtLSBDdXN0b20gVGV4dCAtLT5cclxuICA8ZGl2ICpuZ0lmPVwicmVjb3JkaW5nVGV4dFwiPlxyXG4gICAgPGxhYmVsIGNsYXNzPVwibGFiZWxcIj5DdXN0b20gVGV4dDo8L2xhYmVsPlxyXG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjdXN0b21UZXh0XCIgKGlucHV0KT1cIm9uQ2hhbmdlVGV4dEhhbmRsZXIoY3VzdG9tVGV4dClcIiAvPlxyXG4gICAgPGhyIC8+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gQ3VzdG9tIFRleHQgUG9zaXRpb24gLS0+XHJcbiAgPGRpdiAqbmdJZj1cInJlY29yZGluZ1RleHRcIj5cclxuICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCI+Q3VzdG9tIFRleHQgUG9zaXRpb246PC9sYWJlbD5cclxuICAgIDxzZWxlY3QgWyhuZ01vZGVsKV09XCJyZWNvcmRpbmdQb3NpdGlvblwiIChjaGFuZ2UpPVwicGFyYW1ldGVycy51cGRhdGVSZWNvcmRpbmdDdXN0b21UZXh0UG9zaXRpb24ocmVjb3JkaW5nUG9zaXRpb24pXCI+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCJ0b3BcIj5Ub3A8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cIm1pZGRsZVwiPk1pZGRsZTwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiYm90dG9tXCI+Qm90dG9tPC9vcHRpb24+XHJcbiAgICA8L3NlbGVjdD5cclxuICAgIDxociAvPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEN1c3RvbSBUZXh0IENvbG9yIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJyZWNvcmRpbmdUZXh0XCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbFwiPkN1c3RvbSBUZXh0IENvbG9yOjwvbGFiZWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcHJldmlld1wiIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6IHBhcmFtZXRlcnMucmVjb3JkaW5nQ3VzdG9tVGV4dENvbG9yfVwiPlxyXG4gICAgICB7eyBwYXJhbWV0ZXJzLnJlY29yZGluZ0N1c3RvbVRleHRDb2xvciB9fVxyXG4gICAgPC9kaXY+XHJcbiAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgWyhuZ01vZGVsKV09XCJwYXJhbWV0ZXJzLnJlY29yZGluZ0N1c3RvbVRleHRDb2xvclwiIChjaGFuZ2UpPVwiaGFuZGxlQ29sb3JDaGFuZ2UoJ2N1c3RvbVRleHRDb2xvcicsICRldmVudClcIiAvPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPkNsaWNrIHRvIHNlbGVjdCBjb2xvcjwvc3Bhbj5cclxuICAgIDxociAvPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEFkZCBOYW1lIFRhZ3MgLS0+XHJcbiAgPGRpdj5cclxuICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCI+QWRkIE5hbWUgVGFnczo8L2xhYmVsPlxyXG4gICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkUmVjb3JkaW5nTmFtZVRhZ3NcIiAoY2hhbmdlKT1cInBhcmFtZXRlcnMudXBkYXRlUmVjb3JkaW5nTmFtZVRhZ3Moc2VsZWN0ZWRSZWNvcmRpbmdOYW1lVGFncylcIj5cclxuICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJ0cnVlXCI+VHJ1ZTwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cImZhbHNlXCI+RmFsc2U8L29wdGlvbj5cclxuICAgIDwvc2VsZWN0PlxyXG4gIDwvZGl2PlxyXG4gIDxociAvPlxyXG5cclxuICA8IS0tIE5hbWUgVGFncyBDb2xvciAtLT5cclxuICA8ZGl2PlxyXG4gICAgPGxhYmVsIGNsYXNzPVwibGFiZWxcIj5OYW1lIFRhZ3MgQ29sb3I6PC9sYWJlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xvci1wcmV2aWV3XCIgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kLWNvbG9yJzogcGFyYW1ldGVycy5yZWNvcmRpbmdOYW1lVGFnc0NvbG9yfVwiPlxyXG4gICAgICB7eyBwYXJhbWV0ZXJzLnJlY29yZGluZ05hbWVUYWdzQ29sb3IgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIFsobmdNb2RlbCldPVwicGFyYW1ldGVycy5yZWNvcmRpbmdOYW1lVGFnc0NvbG9yXCIgKGNoYW5nZSk9XCJoYW5kbGVDb2xvckNoYW5nZSgnbmFtZVRhZ3NDb2xvcicsICRldmVudClcIiAvPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPkNsaWNrIHRvIHNlbGVjdCBjb2xvcjwvc3Bhbj5cclxuICA8L2Rpdj5cclxuICA8aHIgLz5cclxuXHJcbiAgPCEtLSBPcmllbnRhdGlvbiAoVmlkZW8pIC0tPlxyXG4gIDxkaXY+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbFwiPk9yaWVudGF0aW9uIChWaWRlbyk6PC9sYWJlbD5cclxuICAgIDxzZWxlY3QgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE9yaWVudGF0aW9uVmlkZW9cIiAoY2hhbmdlKT1cInBhcmFtZXRlcnMudXBkYXRlUmVjb3JkaW5nT3JpZW50YXRpb25WaWRlbyhzZWxlY3RlZE9yaWVudGF0aW9uVmlkZW8pXCI+XHJcbiAgICAgIDxvcHRpb24gdmFsdWU9XCJsYW5kc2NhcGVcIj5MYW5kc2NhcGU8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cInBvcnRyYWl0XCI+UG9ydHJhaXQ8L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsbFwiPkFsbDwvb3B0aW9uPlxyXG4gICAgPC9zZWxlY3Q+XHJcbiAgPC9kaXY+XHJcbiAgPGhyIC8+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,121 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
4
+ import { faTimes, faCheck, faPlay } from '@fortawesome/free-solid-svg-icons';
5
+ import { StandardPanelComponent } from '../standard-panel-component/standard-panel-component.component';
6
+ import { AdvancedPanelComponent } from '../advanced-panel-component/advanced-panel-components.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ import * as i2 from "@fortawesome/angular-fontawesome";
10
+ /**
11
+ * Component representing a recording modal.
12
+ *
13
+ * @selector app-recording-modal
14
+ * @standalone true
15
+ * @imports CommonModule, FontAwesomeModule, StandardPanelComponent, AdvancedPanelComponent
16
+ * @templateUrl ./recording-modal.component.html
17
+ * @styleUrls ./recording-modal.component.css
18
+ *
19
+ * @class RecordingModal
20
+ * @implements OnChanges
21
+ *
22
+ * @property {boolean} isRecordingModalVisible - Determines if the recording modal is visible.
23
+ * @property {() => void} onClose - Callback function to close the modal.
24
+ * @property {string} backgroundColor - Background color of the modal.
25
+ * @property {string} position - Position of the modal on the screen.
26
+ * @property {(options: ConfirmRecordingOptions) => void} confirmRecording - Callback function to confirm recording.
27
+ * @property {(options: StartRecordingOptions) => void} startRecording - Callback function to start recording.
28
+ * @property {RecordingModalParameters} parameters - Parameters for the recording modal.
29
+ *
30
+ * @property {IconDefinition} faTimes - FontAwesome icon for times (close).
31
+ * @property {IconDefinition} faCheck - FontAwesome icon for check (confirm).
32
+ * @property {IconDefinition} faPlay - FontAwesome icon for play (start).
33
+ *
34
+ * @method modalContainerStyle - Returns the style object for the modal container.
35
+ * @method modalContentStyle - Returns the style object for the modal content.
36
+ * @method ngOnChanges - Lifecycle hook that is called when any data-bound property of a directive changes.
37
+ * @method confirm - Calls the confirmRecording callback with the current parameters.
38
+ * @method start - Calls the startRecording callback with the current parameters.
39
+ */
40
+ export class RecordingModal {
41
+ isRecordingModalVisible = false;
42
+ onClose;
43
+ backgroundColor = '#83c0e9';
44
+ position = 'bottomRight';
45
+ confirmRecording;
46
+ startRecording;
47
+ parameters = {};
48
+ faTimes = faTimes;
49
+ faCheck = faCheck;
50
+ faPlay = faPlay;
51
+ get modalContainerStyle() {
52
+ return {
53
+ position: 'fixed',
54
+ top: 0,
55
+ left: 0,
56
+ width: '100%',
57
+ height: '100%',
58
+ backgroundColor: 'rgba(0, 0, 0, 0.5)',
59
+ display: this.isRecordingModalVisible ? 'block' : 'none',
60
+ zIndex: 999,
61
+ };
62
+ }
63
+ get modalContentStyle() {
64
+ const screenWidth = window.innerWidth;
65
+ let modalWidth = 0.8 * screenWidth;
66
+ if (modalWidth > 350) {
67
+ modalWidth = 350;
68
+ }
69
+ return {
70
+ position: 'fixed',
71
+ backgroundColor: this.backgroundColor,
72
+ borderRadius: '10px',
73
+ padding: '10px',
74
+ width: `${modalWidth}px`,
75
+ maxHeight: '85%',
76
+ overflowY: 'auto',
77
+ top: this.position.includes('top') ? '10px' : 'auto',
78
+ bottom: this.position.includes('bottom') ? '10px' : 'auto',
79
+ left: this.position.includes('Left') ? '10px' : 'auto',
80
+ right: this.position.includes('Right') ? '10px' : 'auto',
81
+ };
82
+ }
83
+ ngOnChanges(changes) {
84
+ if (changes['isRecordingModalVisible']) {
85
+ if (this.parameters) {
86
+ this.parameters = this.parameters.getUpdatedAllParams();
87
+ }
88
+ }
89
+ }
90
+ confirm() {
91
+ this.confirmRecording({
92
+ parameters: { ...this.parameters },
93
+ });
94
+ }
95
+ start() {
96
+ this.startRecording({
97
+ parameters: { ...this.parameters },
98
+ });
99
+ }
100
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: RecordingModal, deps: [], target: i0.ɵɵFactoryTarget.Component });
101
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: RecordingModal, isStandalone: true, selector: "app-recording-modal", inputs: { isRecordingModalVisible: "isRecordingModalVisible", onClose: "onClose", backgroundColor: "backgroundColor", position: "position", confirmRecording: "confirmRecording", startRecording: "startRecording", parameters: "parameters" }, 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 Recording Settings\r\n </h2>\r\n <button (click)=\"onClose()\" 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 <hr style=\"height: 1px; background-color: black; margin: 5px 0;\" />\r\n <div style=\"flex: 1;\">\r\n <div style=\"overflow-y: auto; max-height: calc(100% - 120px); padding: 0;\">\r\n <div style=\"margin: 0; padding: 0;\">\r\n <app-standard-panel-component [parameters]=\"parameters\"></app-standard-panel-component>\r\n <app-advanced-panel-component [parameters]=\"parameters\"></app-advanced-panel-component>\r\n </div>\r\n </div>\r\n <div style=\"height: 1px; background-color: white; \"></div>\r\n <div style=\"display: flex; justify-content: space-between; margin-top: 20px;\">\r\n <button\r\n (click)=\"confirm()\"\r\n style=\"flex: 1; padding: 5px; border-radius: 5px; justify-content: center; align-items: center; margin: 0 10px; background: #4CAF50; cursor: pointer;\">\r\n <span style=\"color: black; font-size: 14px;\">Confirm</span>\r\n </button>\r\n <button *ngIf=\"!parameters.recordPaused\"\r\n (click)=\"start()\"\r\n style=\"flex: 1; padding: 5px; border-radius: 5px; justify-content: center; align-items: center; margin: 0 10px; background: #f44336; cursor: pointer;\">\r\n <span style=\"color: black; font-size: 14px;\">Start <fa-icon [icon]=\"faPlay\"></fa-icon></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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"] }, { kind: "component", type: StandardPanelComponent, selector: "app-standard-panel-component", inputs: ["parameters"] }, { kind: "component", type: AdvancedPanelComponent, selector: "app-advanced-panel-component", inputs: ["parameters"] }] });
102
+ }
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: RecordingModal, decorators: [{
104
+ type: Component,
105
+ args: [{ selector: 'app-recording-modal', standalone: true, imports: [CommonModule, FontAwesomeModule, StandardPanelComponent, AdvancedPanelComponent], 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 Recording Settings\r\n </h2>\r\n <button (click)=\"onClose()\" 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 <hr style=\"height: 1px; background-color: black; margin: 5px 0;\" />\r\n <div style=\"flex: 1;\">\r\n <div style=\"overflow-y: auto; max-height: calc(100% - 120px); padding: 0;\">\r\n <div style=\"margin: 0; padding: 0;\">\r\n <app-standard-panel-component [parameters]=\"parameters\"></app-standard-panel-component>\r\n <app-advanced-panel-component [parameters]=\"parameters\"></app-advanced-panel-component>\r\n </div>\r\n </div>\r\n <div style=\"height: 1px; background-color: white; \"></div>\r\n <div style=\"display: flex; justify-content: space-between; margin-top: 20px;\">\r\n <button\r\n (click)=\"confirm()\"\r\n style=\"flex: 1; padding: 5px; border-radius: 5px; justify-content: center; align-items: center; margin: 0 10px; background: #4CAF50; cursor: pointer;\">\r\n <span style=\"color: black; font-size: 14px;\">Confirm</span>\r\n </button>\r\n <button *ngIf=\"!parameters.recordPaused\"\r\n (click)=\"start()\"\r\n style=\"flex: 1; padding: 5px; border-radius: 5px; justify-content: center; align-items: center; margin: 0 10px; background: #f44336; cursor: pointer;\">\r\n <span style=\"color: black; font-size: 14px;\">Start <fa-icon [icon]=\"faPlay\"></fa-icon></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
106
+ }], propDecorators: { isRecordingModalVisible: [{
107
+ type: Input
108
+ }], onClose: [{
109
+ type: Input
110
+ }], backgroundColor: [{
111
+ type: Input
112
+ }], position: [{
113
+ type: Input
114
+ }], confirmRecording: [{
115
+ type: Input
116
+ }], startRecording: [{
117
+ type: Input
118
+ }], parameters: [{
119
+ type: Input
120
+ }] } });
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5nLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3JlY29yZGluZy1jb21wb25lbnRzL3JlY29yZGluZy1tb2RhbC9yZWNvcmRpbmctbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWFzZnUtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvcmVjb3JkaW5nLWNvbXBvbmVudHMvcmVjb3JkaW5nLW1vZGFsL3JlY29yZGluZy1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlFQUFpRSxDQUFDOzs7O0FBNkR6Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFRSCxNQUFNLE9BQU8sY0FBYztJQUNoQix1QkFBdUIsR0FBRyxLQUFLLENBQUM7SUFDaEMsT0FBTyxDQUFjO0lBQ3JCLGVBQWUsR0FBRyxTQUFTLENBQUM7SUFDNUIsUUFBUSxHQUFHLGFBQWEsQ0FBQztJQUN6QixnQkFBZ0IsQ0FBOEM7SUFDOUQsY0FBYyxDQUE0QztJQUMxRCxVQUFVLEdBQTZCLEVBQThCLENBQUM7SUFFL0UsT0FBTyxH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QXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9udEF3ZXNvbWVNb2R1bGUgfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XG5pbXBvcnQgeyBmYVRpbWVzLCBmYUNoZWNrLCBmYVBsYXkgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuaW1wb3J0IHsgU3RhbmRhcmRQYW5lbENvbXBvbmVudCB9IGZyb20gJy4uL3N0YW5kYXJkLXBhbmVsLWNvbXBvbmVudC9zdGFuZGFyZC1wYW5lbC1jb21wb25lbnQuY29tcG9uZW50JztcbmltcG9ydCB7IEFkdmFuY2VkUGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi9hZHZhbmNlZC1wYW5lbC1jb21wb25lbnQvYWR2YW5jZWQtcGFuZWwtY29tcG9uZW50cy5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRXZlbnRUeXBlLFxuICBDb25maXJtUmVjb3JkaW5nUGFyYW1ldGVycyxcbiAgU3RhcnRSZWNvcmRpbmdQYXJhbWV0ZXJzLFxuICBDb25maXJtUmVjb3JkaW5nT3B0aW9ucyxcbiAgU3RhcnRSZWNvcmRpbmdPcHRpb25zLFxufSBmcm9tICcuLi8uLi8uLi9AdHlwZXMvdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGluZ01vZGFsUGFyYW1ldGVyc1xuICBleHRlbmRzIENvbmZpcm1SZWNvcmRpbmdQYXJhbWV0ZXJzLFxuICAgIFN0YXJ0UmVjb3JkaW5nUGFyYW1ldGVycyB7XG4gIHJlY29yZFBhdXNlZDogYm9vbGVhbjtcbiAgcmVjb3JkaW5nVmlkZW9UeXBlOiBzdHJpbmc7XG4gIHJlY29yZGluZ0Rpc3BsYXlUeXBlOiAndmlkZW8nIHwgJ21lZGlhJyB8ICdhbGwnO1xuICByZWNvcmRpbmdCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgcmVjb3JkaW5nTmFtZVRhZ3NDb2xvcjogc3RyaW5nO1xuICByZWNvcmRpbmdPcmllbnRhdGlvblZpZGVvOiBzdHJpbmc7XG4gIHJlY29yZGluZ05hbWVUYWdzOiBib29sZWFuO1xuICByZWNvcmRpbmdBZGRUZXh0OiBib29sZWFuO1xuICByZWNvcmRpbmdDdXN0b21UZXh0OiBzdHJpbmc7XG4gIHJlY29yZGluZ0N1c3RvbVRleHRQb3NpdGlvbjogc3RyaW5nO1xuICByZWNvcmRpbmdDdXN0b21UZXh0Q29sb3I6IHN0cmluZztcbiAgcmVjb3JkaW5nTWVkaWFPcHRpb25zOiBzdHJpbmc7XG4gIHJlY29yZGluZ0F1ZGlvT3B0aW9uczogc3RyaW5nO1xuICByZWNvcmRpbmdWaWRlb09wdGlvbnM6IHN0cmluZztcbiAgcmVjb3JkaW5nQWRkSExTOiBib29sZWFuO1xuICBldmVudFR5cGU6IEV2ZW50VHlwZTtcbiAgdXBkYXRlUmVjb3JkaW5nVmlkZW9UeXBlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgdXBkYXRlUmVjb3JkaW5nRGlzcGxheVR5cGU6ICh2YWx1ZTogJ3ZpZGVvJyB8ICdtZWRpYScgfCAnYWxsJykgPT4gdm9pZDtcbiAgdXBkYXRlUmVjb3JkaW5nQmFja2dyb3VuZENvbG9yOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgdXBkYXRlUmVjb3JkaW5nTmFtZVRhZ3NDb2xvcjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHVwZGF0ZVJlY29yZGluZ09yaWVudGF0aW9uVmlkZW86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdOYW1lVGFnczogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdBZGRUZXh0OiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHVwZGF0ZVJlY29yZGluZ0N1c3RvbVRleHQ6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdDdXN0b21UZXh0UG9zaXRpb246ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdDdXN0b21UZXh0Q29sb3I6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdNZWRpYU9wdGlvbnM6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdBdWRpb09wdGlvbnM6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdWaWRlb09wdGlvbnM6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVSZWNvcmRpbmdBZGRITFM6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcblxuICAvLyBtZWRpYXNmdSBmdW5jdGlvbnNcbiAgZ2V0VXBkYXRlZEFsbFBhcmFtczogKCkgPT4gUmVjb3JkaW5nTW9kYWxQYXJhbWV0ZXJzO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkaW5nTW9kYWxPcHRpb25zIHtcbiAgaXNSZWNvcmRpbmdNb2RhbFZpc2libGU6IGJvb2xlYW47XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG4gIGJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICBwb3NpdGlvbjogc3RyaW5nO1xuXG4gIGNvbmZpcm1SZWNvcmRpbmc6IChvcHRpb25zOiBDb25maXJtUmVjb3JkaW5nT3B0aW9ucykgPT4gdm9pZDtcbiAgc3RhcnRSZWNvcmRpbmc6IChvcHRpb25zOiBTdGFydFJlY29yZGluZ09wdGlvbnMpID0+IHZvaWQ7XG4gIHBhcmFtZXRlcnM6IFJlY29yZGluZ01vZGFsUGFyYW1ldGVycztcbn1cblxuZXhwb3J0IHR5cGUgUmVjb3JkaW5nTW9kYWxUeXBlID0gKG9wdGlvbnM6IFJlY29yZGluZ01vZGFsT3B0aW9ucykgPT4gSFRNTEVsZW1lbnQ7XG5cbi8qKlxuICogQ29tcG9uZW50IHJlcHJlc2VudGluZyBhIHJlY29yZGluZyBtb2RhbC5cbiAqXG4gKiBAc2VsZWN0b3IgYXBwLXJlY29yZGluZy1tb2RhbFxuICogQHN0YW5kYWxvbmUgdHJ1ZVxuICogQGltcG9ydHMgQ29tbW9uTW9kdWxlLCBGb250QXdlc29tZU1vZHVsZSwgU3RhbmRhcmRQYW5lbENvbXBvbmVudCwgQWR2YW5jZWRQYW5lbENvbXBvbmVudFxuICogQHRlbXBsYXRlVXJsIC4vcmVjb3JkaW5nLW1vZGFsLmNvbXBvbmVudC5odG1sXG4gKiBAc3R5bGVVcmxzIC4vcmVjb3JkaW5nLW1vZGFsLmNvbXBvbmVudC5jc3NcbiAqXG4gKiBAY2xhc3MgUmVjb3JkaW5nTW9kYWxcbiAqIEBpbXBsZW1lbnRzIE9uQ2hhbmdlc1xuICpcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNSZWNvcmRpbmdNb2RhbFZpc2libGUgLSBEZXRlcm1pbmVzIGlmIHRoZSByZWNvcmRpbmcgbW9kYWwgaXMgdmlzaWJsZS5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gdm9pZH0gb25DbG9zZSAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGNsb3NlIHRoZSBtb2RhbC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBiYWNrZ3JvdW5kQ29sb3IgLSBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBtb2RhbC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3NpdGlvbiAtIFBvc2l0aW9uIG9mIHRoZSBtb2RhbCBvbiB0aGUgc2NyZWVuLlxuICogQHByb3BlcnR5IHsob3B0aW9uczogQ29uZmlybVJlY29yZGluZ09wdGlvbnMpID0+IHZvaWR9IGNvbmZpcm1SZWNvcmRpbmcgLSBDYWxsYmFjayBmdW5jdGlvbiB0byBjb25maXJtIHJlY29yZGluZy5cbiAqIEBwcm9wZXJ0eSB7KG9wdGlvbnM6IFN0YXJ0UmVjb3JkaW5nT3B0aW9ucykgPT4gdm9pZH0gc3RhcnRSZWNvcmRpbmcgLSBDYWxsYmFjayBmdW5jdGlvbiB0byBzdGFydCByZWNvcmRpbmcuXG4gKiBAcHJvcGVydHkge1JlY29yZGluZ01vZGFsUGFyYW1ldGVyc30gcGFyYW1ldGVycyAtIFBhcmFtZXRlcnMgZm9yIHRoZSByZWNvcmRpbmcgbW9kYWwuXG4gKlxuICogQHByb3BlcnR5IHtJY29uRGVmaW5pdGlvbn0gZmFUaW1lcyAtIEZvbnRBd2Vzb21lIGljb24gZm9yIHRpbWVzIChjbG9zZSkuXG4gKiBAcHJvcGVydHkge0ljb25EZWZpbml0aW9ufSBmYUNoZWNrIC0gRm9udEF3ZXNvbWUgaWNvbiBmb3IgY2hlY2sgKGNvbmZpcm0pLlxuICogQHByb3BlcnR5IHtJY29uRGVmaW5pdGlvbn0gZmFQbGF5IC0gRm9udEF3ZXNvbWUgaWNvbiBmb3IgcGxheSAoc3RhcnQpLlxuICpcbiAqIEBtZXRob2QgbW9kYWxDb250YWluZXJTdHlsZSAtIFJldHVybnMgdGhlIHN0eWxlIG9iamVjdCBmb3IgdGhlIG1vZGFsIGNvbnRhaW5lci5cbiAqIEBtZXRob2QgbW9kYWxDb250ZW50U3R5bGUgLSBSZXR1cm5zIHRoZSBzdHlsZSBvYmplY3QgZm9yIHRoZSBtb2RhbCBjb250ZW50LlxuICogQG1ldGhvZCBuZ09uQ2hhbmdlcyAtIExpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIHdoZW4gYW55IGRhdGEtYm91bmQgcHJvcGVydHkgb2YgYSBkaXJlY3RpdmUgY2hhbmdlcy5cbiAqIEBtZXRob2QgY29uZmlybSAtIENhbGxzIHRoZSBjb25maXJtUmVjb3JkaW5nIGNhbGxiYWNrIHdpdGggdGhlIGN1cnJlbnQgcGFyYW1ldGVycy5cbiAqIEBtZXRob2Qgc3RhcnQgLSBDYWxscyB0aGUgc3RhcnRSZWNvcmRpbmcgY2FsbGJhY2sgd2l0aCB0aGUgY3VycmVudCBwYXJhbWV0ZXJzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcmVjb3JkaW5nLW1vZGFsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9udEF3ZXNvbWVNb2R1bGUsIFN0YW5kYXJkUGFuZWxDb21wb25lbnQsIEFkdmFuY2VkUGFuZWxDb21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVjb3JkaW5nLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVjb3JkaW5nLW1vZGFsLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUmVjb3JkaW5nTW9kYWwgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBpc1JlY29yZGluZ01vZGFsVmlzaWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBvbkNsb3NlITogKCkgPT4gdm9pZDtcbiAgQElucHV0KCkgYmFja2dyb3VuZENvbG9yID0gJyM4M2MwZTknO1xuICBASW5wdXQoKSBwb3NpdGlvbiA9ICdib3R0b21SaWdodCc7XG4gIEBJbnB1dCgpIGNvbmZpcm1SZWNvcmRpbmchOiAob3B0aW9uczogQ29uZmlybVJlY29yZGluZ09wdGlvbnMpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIHN0YXJ0UmVjb3JkaW5nITogKG9wdGlvbnM6IFN0YXJ0UmVjb3JkaW5nT3B0aW9ucykgPT4gdm9pZDtcbiAgQElucHV0KCkgcGFyYW1ldGVyczogUmVjb3JkaW5nTW9kYWxQYXJhbWV0ZXJzID0ge30gYXMgUmVjb3JkaW5nTW9kYWxQYXJhbWV0ZXJzO1xuXG4gIGZhVGltZXMgPSBmYVRpbWVzO1xuICBmYUNoZWNrID0gZmFDaGVjaztcbiAgZmFQbGF5ID0gZmFQbGF5O1xuXG4gIGdldCBtb2RhbENvbnRhaW5lclN0eWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIHRvcDogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuNSknLFxuICAgICAgZGlzcGxheTogdGhpcy5pc1JlY29yZGluZ01vZGFsVmlzaWJsZSA/ICdibG9jaycgOiAnbm9uZScsXG4gICAgICB6SW5kZXg6IDk5OSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0IG1vZGFsQ29udGVudFN0eWxlKCkge1xuICAgIGNvbnN0IHNjcmVlbldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgbGV0IG1vZGFsV2lkdGggPSAwLjggKiBzY3JlZW5XaWR0aDtcbiAgICBpZiAobW9kYWxXaWR0aCA+IDM1MCkge1xuICAgICAgbW9kYWxXaWR0aCA9IDM1MDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2tncm91bmRDb2xvcixcbiAgICAgIGJvcmRlclJhZGl1czogJzEwcHgnLFxuICAgICAgcGFkZGluZzogJzEwcHgnLFxuICAgICAgd2lkdGg6IGAke21vZGFsV2lkdGh9cHhgLFxuICAgICAgbWF4SGVpZ2h0OiAnODUlJyxcbiAgICAgIG92ZXJmbG93WTogJ2F1dG8nLFxuICAgICAgdG9wOiB0aGlzLnBvc2l0aW9uLmluY2x1ZGVzKCd0b3AnKSA/ICcxMHB4JyA6ICdhdXRvJyxcbiAgICAgIGJvdHRvbTogdGhpcy5wb3NpdGlvbi5pbmNsdWRlcygnYm90dG9tJykgPyAnMTBweCcgOiAnYXV0bycsXG4gICAgICBsZWZ0OiB0aGlzLnBvc2l0aW9uLmluY2x1ZGVzKCdMZWZ0JykgPyAnMTBweCcgOiAnYXV0bycsXG4gICAgICByaWdodDogdGhpcy5wb3NpdGlvbi5pbmNsdWRlcygnUmlnaHQnKSA/ICcxMHB4JyA6ICdhdXRvJyxcbiAgICB9O1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydpc1JlY29yZGluZ01vZGFsVmlzaWJsZSddKSB7XG4gICAgICBpZiAodGhpcy5wYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHRoaXMucGFyYW1ldGVycy5nZXRVcGRhdGVkQWxsUGFyYW1zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uZmlybSgpIHtcbiAgICB0aGlzLmNvbmZpcm1SZWNvcmRpbmcoe1xuICAgICAgcGFyYW1ldGVyczogeyAuLi50aGlzLnBhcmFtZXRlcnMgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXJ0KCkge1xuICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoe1xuICAgICAgcGFyYW1ldGVyczogeyAuLi50aGlzLnBhcmFtZXRlcnMgfSxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBbbmdTdHlsZV09XCJtb2RhbENvbnRhaW5lclN0eWxlXCI+XHJcbiAgPGRpdiBbbmdTdHlsZV09XCJtb2RhbENvbnRlbnRTdHlsZVwiPlxyXG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XCI+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IG1hcmdpbi1ib3R0b206IDE1cHg7XCI+XHJcbiAgICAgICAgPGgyIHN0eWxlPVwiZm9udC1zaXplOiB4LWxhcmdlOyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6IGJsYWNrO1wiPlxyXG4gICAgICAgICAgUmVjb3JkaW5nIFNldHRpbmdzXHJcbiAgICAgICAgPC9oMj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvbkNsb3NlKClcIiBzdHlsZT1cImJvcmRlcjogbm9uZTsgYmFja2dyb3VuZDogbm9uZTsgY3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFUaW1lc1wiIHNpemU9XCJ4bFwiIHN0eWxlPVwiZm9udC1zaXplOiAyMHB4OyBjb2xvcjogYmxhY2s7XCI+PC9mYS1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGhyIHN0eWxlPVwiaGVpZ2h0OiAxcHg7IGJhY2tncm91bmQtY29sb3I6IGJsYWNrOyBtYXJnaW46IDVweCAwO1wiIC8+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAxO1wiPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJvdmVyZmxvdy15OiBhdXRvOyBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSAxMjBweCk7IHBhZGRpbmc6IDA7XCI+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiAwOyBwYWRkaW5nOiAwO1wiPlxyXG4gICAgICAgICAgICA8YXBwLXN0YW5kYXJkLXBhbmVsLWNvbXBvbmVudCBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzXCI+PC9hcHAtc3RhbmRhcmQtcGFuZWwtY29tcG9uZW50PlxyXG4gICAgICAgICAgICA8YXBwLWFkdmFuY2VkLXBhbmVsLWNvbXBvbmVudCBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzXCI+PC9hcHAtYWR2YW5jZWQtcGFuZWwtY29tcG9uZW50PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImhlaWdodDogMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgbWFyZ2luLXRvcDogMjBweDtcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKGNsaWNrKT1cImNvbmZpcm0oKVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwiZmxleDogMTsgcGFkZGluZzogNXB4OyBib3JkZXItcmFkaXVzOiA1cHg7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyBtYXJnaW46IDAgMTBweDsgYmFja2dyb3VuZDogIzRDQUY1MDsgY3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiBibGFjazsgZm9udC1zaXplOiAxNHB4O1wiPkNvbmZpcm08L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhcGFyYW1ldGVycy5yZWNvcmRQYXVzZWRcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic3RhcnQoKVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwiZmxleDogMTsgcGFkZGluZzogNXB4OyBib3JkZXItcmFkaXVzOiA1cHg7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyBtYXJnaW46IDAgMTBweDsgYmFja2dyb3VuZDogI2Y0NDMzNjsgY3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiBibGFjazsgZm9udC1zaXplOiAxNHB4O1wiPlN0YXJ0IDxmYS1pY29uIFtpY29uXT1cImZhUGxheVwiPjwvZmEtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==