mediasfu-angular 1.0.2 → 2.0.1
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.
- package/README.md +686 -578
- package/dist/README.md +677 -578
- package/dist/fesm2022/mediasfu-angular.mjs +5551 -2944
- package/dist/fesm2022/mediasfu-angular.mjs.map +1 -1
- package/dist/lib/@types/types.d.ts +22 -1
- package/dist/lib/components/breakout-components/breakout-rooms-modal.component.d.ts +1 -0
- package/dist/lib/components/mediasfu-components/mediasfu-broadcast.component.d.ts +153 -61
- package/dist/lib/components/mediasfu-components/mediasfu-chat.component.d.ts +154 -66
- package/dist/lib/components/mediasfu-components/mediasfu-conference.component.d.ts +190 -76
- package/dist/lib/components/mediasfu-components/mediasfu-generic.component.d.ts +184 -70
- package/dist/lib/components/mediasfu-components/mediasfu-webinar.component.d.ts +192 -78
- package/dist/lib/components/menu-components/menu-modal/menu-modal.component.d.ts +6 -1
- package/dist/lib/components/menu-components/share-buttons-component/share-buttons-component.component.d.ts +5 -2
- package/dist/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.d.ts +4 -2
- package/dist/lib/components/misc-components/pre-join-page/pre-join-page.component.d.ts +71 -66
- package/dist/lib/components/misc-components/share-event-modal/share-event-modal.component.d.ts +5 -1
- package/dist/lib/consumers/connect-local-ips.service.d.ts +81 -0
- package/dist/lib/consumers/connect-send-transport-audio.service.d.ts +43 -11
- package/dist/lib/consumers/connect-send-transport-screen.service.d.ts +87 -46
- package/dist/lib/consumers/connect-send-transport-video.service.d.ts +89 -43
- package/dist/lib/consumers/connect-send-transport.service.d.ts +5 -1
- package/dist/lib/consumers/create-send-transport.service.d.ts +130 -40
- package/dist/lib/consumers/disconnect-send-transport-audio.service.d.ts +77 -40
- package/dist/lib/consumers/disconnect-send-transport-screen.service.d.ts +48 -14
- package/dist/lib/consumers/disconnect-send-transport-video.service.d.ts +81 -44
- package/dist/lib/consumers/get-piped-producers-alt.service.d.ts +5 -1
- package/dist/lib/consumers/receive-all-piped-transports.service.d.ts +5 -1
- package/dist/lib/consumers/resume-send-transport-audio.service.d.ts +54 -21
- package/dist/lib/consumers/stream-success-audio-switch.service.d.ts +124 -40
- package/dist/lib/consumers/trigger.service.d.ts +3 -0
- package/dist/lib/methods/exit-methods/confirm-exit.service.d.ts +5 -1
- package/dist/lib/methods/recording-methods/start-recording.service.d.ts +3 -0
- package/dist/lib/methods/recording-methods/stop-recording.service.d.ts +4 -1
- package/dist/lib/methods/recording-methods/update-recording.service.d.ts +3 -0
- package/dist/lib/methods/stream-methods/click-audio.service.d.ts +3 -0
- package/dist/lib/methods/utils/check-limits-and-make-request.service.d.ts +23 -0
- package/dist/lib/methods/utils/create-response-join-room.util.d.ts +33 -0
- package/dist/lib/methods/utils/create-room-on-media-sfu.service.d.ts +25 -0
- package/dist/lib/methods/utils/initial-values.util.d.ts +6 -0
- package/dist/lib/methods/utils/join-room-on-media-sfu.service.d.ts +52 -0
- package/dist/lib/methods/whiteboard-methods/capture-canvas-stream.service.d.ts +37 -20
- package/dist/lib/producers/producer-emits/join-local-room.service.d.ts +125 -0
- package/dist/lib/producers/socket-receive-methods/all-members-rest.service.d.ts +7 -2
- package/dist/lib/producers/socket-receive-methods/all-members.service.d.ts +7 -2
- package/dist/lib/producers/socket-receive-methods/disconnect-user-self.service.d.ts +5 -1
- package/dist/lib/sockets/socket-manager.service.d.ts +90 -0
- package/dist/public-api.d.ts +11 -1
- package/package.json +17 -20
- package/dist/esm2022/lib/@types/types.mjs +0 -2
- package/dist/esm2022/lib/components/background-components/background-modal/background-modal.component.mjs +0 -799
- package/dist/esm2022/lib/components/breakout-components/breakout-rooms-modal.component.mjs +0 -366
- package/dist/esm2022/lib/components/breakout-components/edit-room-modal/edit-room-modal.component.mjs +0 -143
- package/dist/esm2022/lib/components/breakout-components/room-list/room-list.component.mjs +0 -40
- package/dist/esm2022/lib/components/co-host-components/co-host-modal/co-host-modal.component.mjs +0 -245
- package/dist/esm2022/lib/components/display-components/alert-component/alert.component.component.mjs +0 -79
- package/dist/esm2022/lib/components/display-components/audio-card/audio-card.component.mjs +0 -356
- package/dist/esm2022/lib/components/display-components/audio-grid/audio-grid.component.mjs +0 -80
- package/dist/esm2022/lib/components/display-components/card-video-display/card-video-display.component.mjs +0 -129
- package/dist/esm2022/lib/components/display-components/control-buttons-alt-component/control-buttons-alt-component.component.mjs +0 -138
- package/dist/esm2022/lib/components/display-components/control-buttons-component/control-buttons-component.component.mjs +0 -231
- package/dist/esm2022/lib/components/display-components/control-buttons-component-touch/control-buttons-component-touch.component.mjs +0 -282
- package/dist/esm2022/lib/components/display-components/control-widgets/menu-participants-widget.component.mjs +0 -82
- package/dist/esm2022/lib/components/display-components/control-widgets/menu-record-widget.component.mjs +0 -65
- package/dist/esm2022/lib/components/display-components/control-widgets/menu-widget.component.mjs +0 -137
- package/dist/esm2022/lib/components/display-components/control-widgets/message-widget.component.mjs +0 -137
- package/dist/esm2022/lib/components/display-components/control-widgets/record-timer-widget.component.mjs +0 -51
- package/dist/esm2022/lib/components/display-components/control-widgets/screenshare-widget.component.mjs +0 -101
- package/dist/esm2022/lib/components/display-components/flexible-grid/flexible-grid.component.mjs +0 -151
- package/dist/esm2022/lib/components/display-components/flexible-video/flexible-video.component.mjs +0 -250
- package/dist/esm2022/lib/components/display-components/loading-modal/loading-modal.component.mjs +0 -102
- package/dist/esm2022/lib/components/display-components/main-aspect-component/main-aspect-component.component.mjs +0 -140
- package/dist/esm2022/lib/components/display-components/main-container-component/main-container-component.component.mjs +0 -131
- package/dist/esm2022/lib/components/display-components/main-grid-component/main-grid-component.component.mjs +0 -120
- package/dist/esm2022/lib/components/display-components/main-screen-component/main-screen-component.component.mjs +0 -201
- package/dist/esm2022/lib/components/display-components/meeting-progress-timer/meeting-progress-timer.component.mjs +0 -115
- package/dist/esm2022/lib/components/display-components/mini-audio/mini-audio.component.mjs +0 -319
- package/dist/esm2022/lib/components/display-components/mini-card/mini-card.component.mjs +0 -161
- package/dist/esm2022/lib/components/display-components/mini-card-audio/mini-card-audio.component.mjs +0 -230
- package/dist/esm2022/lib/components/display-components/other-grid-component/other-grid-component.component.mjs +0 -126
- package/dist/esm2022/lib/components/display-components/pagination/pagination.component.mjs +0 -334
- package/dist/esm2022/lib/components/display-components/sub-aspect-component/sub-aspect-component.component.mjs +0 -112
- package/dist/esm2022/lib/components/display-components/video-card/video-card.component.mjs +0 -392
- package/dist/esm2022/lib/components/display-settings-components/display-settings-modal.component.mjs +0 -106
- package/dist/esm2022/lib/components/event-settings-components/event-settings-modal/event-settings-modal.component.mjs +0 -199
- package/dist/esm2022/lib/components/exit-components/confirm-exit-modal/confirm-exit-modal.component.mjs +0 -132
- package/dist/esm2022/lib/components/media-settings-components/media-settings-modal/media-settings-modal.component.mjs +0 -220
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-broadcast.component.mjs +0 -4238
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-chat.component.mjs +0 -3754
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-conference.component.mjs +0 -5071
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-generic.component.mjs +0 -5380
- package/dist/esm2022/lib/components/mediasfu-components/mediasfu-webinar.component.mjs +0 -5068
- package/dist/esm2022/lib/components/menu-components/custom-buttons/custom-buttons.component.mjs +0 -83
- package/dist/esm2022/lib/components/menu-components/meeting-id-component/meeting-id-component.component.mjs +0 -27
- package/dist/esm2022/lib/components/menu-components/meeting-passcode-component/meeting-passcode-component.component.mjs +0 -27
- package/dist/esm2022/lib/components/menu-components/menu-modal/menu-modal.component.mjs +0 -125
- package/dist/esm2022/lib/components/menu-components/share-buttons-component/share-buttons-component.component.mjs +0 -106
- package/dist/esm2022/lib/components/message-components/message-panel/message-panel.component.mjs +0 -228
- package/dist/esm2022/lib/components/message-components/messages-modal/messages-modal.component.mjs +0 -277
- package/dist/esm2022/lib/components/misc-components/confirm-here-modal/confirm-here-modal.component.mjs +0 -130
- package/dist/esm2022/lib/components/misc-components/pre-join-page/pre-join-page.component.mjs +0 -343
- package/dist/esm2022/lib/components/misc-components/share-event-modal/share-event-modal.component.mjs +0 -127
- package/dist/esm2022/lib/components/misc-components/welcome-page/welcome-page.component.mjs +0 -241
- package/dist/esm2022/lib/components/participants-components/participant-list/participant-list.component.mjs +0 -82
- package/dist/esm2022/lib/components/participants-components/participant-list-item/participant-list-item.component.mjs +0 -139
- package/dist/esm2022/lib/components/participants-components/participant-list-others/participant-list-others.component.mjs +0 -40
- package/dist/esm2022/lib/components/participants-components/participant-list-others-item/participant-list-others-item.component.mjs +0 -60
- package/dist/esm2022/lib/components/participants-components/participants-modal/participants-modal.component.mjs +0 -124
- package/dist/esm2022/lib/components/polls-components/poll-modal/poll-modal.component.mjs +0 -201
- package/dist/esm2022/lib/components/recording-components/advanced-panel-component/advanced-panel-components.component.mjs +0 -92
- package/dist/esm2022/lib/components/recording-components/recording-modal/recording-modal.component.mjs +0 -133
- package/dist/esm2022/lib/components/recording-components/standard-panel-component/standard-panel-component.component.mjs +0 -90
- package/dist/esm2022/lib/components/requests-components/render-request-component/render-request-component.component.mjs +0 -81
- package/dist/esm2022/lib/components/requests-components/requests-modal/requests-modal.component.mjs +0 -147
- package/dist/esm2022/lib/components/screenboard-components/screenboard/screenboard.component.mjs +0 -627
- package/dist/esm2022/lib/components/screenboard-components/screenboard-modal/screenboard-modal.component.mjs +0 -391
- package/dist/esm2022/lib/components/waiting-components/waiting-room-modal.component.mjs +0 -201
- package/dist/esm2022/lib/components/whiteboard-components/configure-whiteboard-modal/configure-whiteboard-modal.component.mjs +0 -286
- package/dist/esm2022/lib/components/whiteboard-components/whiteboard/whiteboard.component.mjs +0 -1833
- package/dist/esm2022/lib/consumers/add-videos-grid.service.mjs +0 -345
- package/dist/esm2022/lib/consumers/auto-adjust.service.mjs +0 -109
- package/dist/esm2022/lib/consumers/calculate-rows-and-columns.service.mjs +0 -60
- package/dist/esm2022/lib/consumers/change-vids.service.mjs +0 -551
- package/dist/esm2022/lib/consumers/check-grid.service.mjs +0 -93
- package/dist/esm2022/lib/consumers/check-permission.service.mjs +0 -105
- package/dist/esm2022/lib/consumers/check-screen-share.service.mjs +0 -106
- package/dist/esm2022/lib/consumers/close-and-resize.service.mjs +0 -331
- package/dist/esm2022/lib/consumers/compare-active-names.service.mjs +0 -106
- package/dist/esm2022/lib/consumers/compare-screen-states.service.mjs +0 -98
- package/dist/esm2022/lib/consumers/connect-ips.service.mjs +0 -154
- package/dist/esm2022/lib/consumers/connect-recv-transport.service.mjs +0 -146
- package/dist/esm2022/lib/consumers/connect-send-transport-audio.service.mjs +0 -84
- package/dist/esm2022/lib/consumers/connect-send-transport-screen.service.mjs +0 -102
- package/dist/esm2022/lib/consumers/connect-send-transport-video.service.mjs +0 -99
- package/dist/esm2022/lib/consumers/connect-send-transport.service.mjs +0 -140
- package/dist/esm2022/lib/consumers/consumer-resume.service.mjs +0 -368
- package/dist/esm2022/lib/consumers/control-media.service.mjs +0 -113
- package/dist/esm2022/lib/consumers/create-send-transport.service.mjs +0 -172
- package/dist/esm2022/lib/consumers/disconnect-send-transport-audio.service.mjs +0 -108
- package/dist/esm2022/lib/consumers/disconnect-send-transport-screen.service.mjs +0 -84
- package/dist/esm2022/lib/consumers/disconnect-send-transport-video.service.mjs +0 -101
- package/dist/esm2022/lib/consumers/disp-streams.service.mjs +0 -513
- package/dist/esm2022/lib/consumers/generate-page-content.service.mjs +0 -106
- package/dist/esm2022/lib/consumers/get-estimate.service.mjs +0 -120
- package/dist/esm2022/lib/consumers/get-piped-producers-alt.service.mjs +0 -82
- package/dist/esm2022/lib/consumers/get-producers-piped.service.mjs +0 -79
- package/dist/esm2022/lib/consumers/get-videos.service.mjs +0 -91
- package/dist/esm2022/lib/consumers/mix-streams.service.mjs +0 -95
- package/dist/esm2022/lib/consumers/on-screen-changes.service.mjs +0 -103
- package/dist/esm2022/lib/consumers/prepopulate-user-media.service.mjs +0 -541
- package/dist/esm2022/lib/consumers/process-consumer-transports-audio.service.mjs +0 -101
- package/dist/esm2022/lib/consumers/process-consumer-transports.service.mjs +0 -128
- package/dist/esm2022/lib/consumers/re-port.service.mjs +0 -114
- package/dist/esm2022/lib/consumers/re-update-inter.service.mjs +0 -239
- package/dist/esm2022/lib/consumers/readjust.service.mjs +0 -173
- package/dist/esm2022/lib/consumers/receive-all-piped-transports.service.mjs +0 -87
- package/dist/esm2022/lib/consumers/receive-room-messages.service.mjs +0 -69
- package/dist/esm2022/lib/consumers/reorder-streams.service.mjs +0 -239
- package/dist/esm2022/lib/consumers/request-screen-share.service.mjs +0 -101
- package/dist/esm2022/lib/consumers/resume-pause-audio-streams.service.mjs +0 -150
- package/dist/esm2022/lib/consumers/resume-pause-streams.service.mjs +0 -103
- package/dist/esm2022/lib/consumers/resume-send-transport-audio.service.mjs +0 -91
- package/dist/esm2022/lib/consumers/signal-new-consumer-transport.service.mjs +0 -136
- package/dist/esm2022/lib/consumers/socket-receive-methods/join-consume-room.service.mjs +0 -96
- package/dist/esm2022/lib/consumers/socket-receive-methods/new-pipe-producer.service.mjs +0 -100
- package/dist/esm2022/lib/consumers/socket-receive-methods/producer-closed.service.mjs +0 -78
- package/dist/esm2022/lib/consumers/start-share-screen.service.mjs +0 -120
- package/dist/esm2022/lib/consumers/stop-share-screen.service.mjs +0 -175
- package/dist/esm2022/lib/consumers/stream-success-audio-switch.service.mjs +0 -185
- package/dist/esm2022/lib/consumers/stream-success-audio.service.mjs +0 -210
- package/dist/esm2022/lib/consumers/stream-success-screen.service.mjs +0 -193
- package/dist/esm2022/lib/consumers/stream-success-video.service.mjs +0 -260
- package/dist/esm2022/lib/consumers/switch-user-audio.service.mjs +0 -120
- package/dist/esm2022/lib/consumers/switch-user-video-alt.service.mjs +0 -260
- package/dist/esm2022/lib/consumers/switch-user-video.service.mjs +0 -172
- package/dist/esm2022/lib/consumers/trigger.service.mjs +0 -210
- package/dist/esm2022/lib/consumers/update-mini-cards-grid.service.mjs +0 -135
- package/dist/esm2022/lib/consumers/update-participant-audio-decibels.service.mjs +0 -84
- package/dist/esm2022/lib/methods/background-methods/launch-background.service.mjs +0 -48
- package/dist/esm2022/lib/methods/breakout-room-methods/breakout-room-updated.service.mjs +0 -183
- package/dist/esm2022/lib/methods/breakout-room-methods/launch-breakout-rooms.service.mjs +0 -46
- package/dist/esm2022/lib/methods/co-host-methods/launch-co-host.service.mjs +0 -46
- package/dist/esm2022/lib/methods/co-host-methods/modify-co-host-settings.service.mjs +0 -104
- package/dist/esm2022/lib/methods/display-settings-methods/launch-display-settings.service.mjs +0 -46
- package/dist/esm2022/lib/methods/display-settings-methods/modify-display-settings.service.mjs +0 -194
- package/dist/esm2022/lib/methods/exit-methods/confirm-exit.service.mjs +0 -52
- package/dist/esm2022/lib/methods/exit-methods/launch-confirm-exit.service.mjs +0 -42
- package/dist/esm2022/lib/methods/media-settings-methods/launch-media-settings.service.mjs +0 -85
- package/dist/esm2022/lib/methods/menu-methods/launch-menu-modal.service.mjs +0 -44
- package/dist/esm2022/lib/methods/message-methods/launch-messages.service.mjs +0 -45
- package/dist/esm2022/lib/methods/message-methods/send-message.service.mjs +0 -143
- package/dist/esm2022/lib/methods/participants-methods/launch-participants.service.mjs +0 -47
- package/dist/esm2022/lib/methods/participants-methods/message-participants.service.mjs +0 -98
- package/dist/esm2022/lib/methods/participants-methods/mute-participants.service.mjs +0 -96
- package/dist/esm2022/lib/methods/participants-methods/remove-participants.service.mjs +0 -107
- package/dist/esm2022/lib/methods/polls-methods/handle-create-poll.service.mjs +0 -75
- package/dist/esm2022/lib/methods/polls-methods/handle-end-poll.service.mjs +0 -72
- package/dist/esm2022/lib/methods/polls-methods/handle-vote-poll.service.mjs +0 -83
- package/dist/esm2022/lib/methods/polls-methods/launch-poll.service.mjs +0 -43
- package/dist/esm2022/lib/methods/polls-methods/poll-updated.service.mjs +0 -95
- package/dist/esm2022/lib/methods/recording-methods/check-pause-state.service.mjs +0 -69
- package/dist/esm2022/lib/methods/recording-methods/check-resume-state.service.mjs +0 -56
- package/dist/esm2022/lib/methods/recording-methods/confirm-recording.service.mjs +0 -278
- package/dist/esm2022/lib/methods/recording-methods/launch-recording.service.mjs +0 -125
- package/dist/esm2022/lib/methods/recording-methods/record-pause-timer.service.mjs +0 -67
- package/dist/esm2022/lib/methods/recording-methods/record-resume-timer.service.mjs +0 -130
- package/dist/esm2022/lib/methods/recording-methods/record-start-timer.service.mjs +0 -134
- package/dist/esm2022/lib/methods/recording-methods/record-update-timer.service.mjs +0 -80
- package/dist/esm2022/lib/methods/recording-methods/start-recording.service.mjs +0 -197
- package/dist/esm2022/lib/methods/recording-methods/stop-recording.service.mjs +0 -112
- package/dist/esm2022/lib/methods/recording-methods/update-recording.service.mjs +0 -272
- package/dist/esm2022/lib/methods/requests-methods/launch-requests.service.mjs +0 -51
- package/dist/esm2022/lib/methods/requests-methods/respond-to-requests.service.mjs +0 -84
- package/dist/esm2022/lib/methods/settings-methods/launch-settings.service.mjs +0 -51
- package/dist/esm2022/lib/methods/settings-methods/modify-settings.service.mjs +0 -109
- package/dist/esm2022/lib/methods/stream-methods/click-audio.service.mjs +0 -275
- package/dist/esm2022/lib/methods/stream-methods/click-chat.service.mjs +0 -75
- package/dist/esm2022/lib/methods/stream-methods/click-screen-share.service.mjs +0 -178
- package/dist/esm2022/lib/methods/stream-methods/click-video.service.mjs +0 -271
- package/dist/esm2022/lib/methods/stream-methods/switch-audio.service.mjs +0 -80
- package/dist/esm2022/lib/methods/stream-methods/switch-video-alt.service.mjs +0 -116
- package/dist/esm2022/lib/methods/stream-methods/switch-video.service.mjs +0 -132
- package/dist/esm2022/lib/methods/utils/format-number.service.mjs +0 -57
- package/dist/esm2022/lib/methods/utils/generate-random-messages.service.mjs +0 -120
- package/dist/esm2022/lib/methods/utils/generate-random-participants.service.mjs +0 -126
- package/dist/esm2022/lib/methods/utils/generate-random-polls.service.mjs +0 -78
- package/dist/esm2022/lib/methods/utils/generate-random-request-list.service.mjs +0 -90
- package/dist/esm2022/lib/methods/utils/generate-random-waiting-room-list.service.mjs +0 -59
- package/dist/esm2022/lib/methods/utils/get-modal-position.util.mjs +0 -32
- package/dist/esm2022/lib/methods/utils/get-overlay-position.util.mjs +0 -31
- package/dist/esm2022/lib/methods/utils/initial-values.util.mjs +0 -379
- package/dist/esm2022/lib/methods/utils/meeting-timer/start-meeting-progress-timer.service.mjs +0 -96
- package/dist/esm2022/lib/methods/utils/mini-audio-player/mini-audio-player.component.mjs +0 -315
- package/dist/esm2022/lib/methods/utils/producer/a-params.service.mjs +0 -58
- package/dist/esm2022/lib/methods/utils/producer/h-params.service.mjs +0 -87
- package/dist/esm2022/lib/methods/utils/producer/screen-params.service.mjs +0 -61
- package/dist/esm2022/lib/methods/utils/producer/v-params.service.mjs +0 -87
- package/dist/esm2022/lib/methods/utils/producer/video-capture-constraints.service.mjs +0 -84
- package/dist/esm2022/lib/methods/utils/sleep.util.mjs +0 -17
- package/dist/esm2022/lib/methods/utils/sound-player.service.mjs +0 -63
- package/dist/esm2022/lib/methods/utils/validate-alphanumeric.service.mjs +0 -49
- package/dist/esm2022/lib/methods/waiting-methods/launch-waiting.service.mjs +0 -41
- package/dist/esm2022/lib/methods/waiting-methods/respond-to-waiting.service.mjs +0 -69
- package/dist/esm2022/lib/methods/whiteboard-methods/capture-canvas-stream.service.mjs +0 -98
- package/dist/esm2022/lib/methods/whiteboard-methods/launch-configure-whiteboard.service.mjs +0 -44
- package/dist/esm2022/lib/producer-client/producer-client-emits/create-device-client.service.mjs +0 -74
- package/dist/esm2022/lib/producer-client/producer-client-emits/join-room-client.service.mjs +0 -96
- package/dist/esm2022/lib/producer-client/producer-client-emits/update-room-parameters-client.service.mjs +0 -276
- package/dist/esm2022/lib/producers/producer-emits/join-con-room.service.mjs +0 -152
- package/dist/esm2022/lib/producers/producer-emits/join-room.service.mjs +0 -152
- package/dist/esm2022/lib/producers/socket-receive-methods/all-members-rest.service.mjs +0 -228
- package/dist/esm2022/lib/producers/socket-receive-methods/all-members.service.mjs +0 -218
- package/dist/esm2022/lib/producers/socket-receive-methods/all-waiting-room-members.service.mjs +0 -57
- package/dist/esm2022/lib/producers/socket-receive-methods/ban-participant.service.mjs +0 -76
- package/dist/esm2022/lib/producers/socket-receive-methods/control-media-host.service.mjs +0 -183
- package/dist/esm2022/lib/producers/socket-receive-methods/disconnect-user-self.service.mjs +0 -50
- package/dist/esm2022/lib/producers/socket-receive-methods/disconnect.service.mjs +0 -64
- package/dist/esm2022/lib/producers/socket-receive-methods/get-domains.service.mjs +0 -78
- package/dist/esm2022/lib/producers/socket-receive-methods/host-request-response.service.mjs +0 -150
- package/dist/esm2022/lib/producers/socket-receive-methods/meeting-ended.service.mjs +0 -73
- package/dist/esm2022/lib/producers/socket-receive-methods/meeting-still-there.service.mjs +0 -47
- package/dist/esm2022/lib/producers/socket-receive-methods/meeting-time-remaining.service.mjs +0 -63
- package/dist/esm2022/lib/producers/socket-receive-methods/participant-requested.service.mjs +0 -63
- package/dist/esm2022/lib/producers/socket-receive-methods/person-joined.service.mjs +0 -54
- package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-closed.service.mjs +0 -129
- package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-paused.service.mjs +0 -152
- package/dist/esm2022/lib/producers/socket-receive-methods/producer-media-resumed.service.mjs +0 -99
- package/dist/esm2022/lib/producers/socket-receive-methods/re-initiate-recording.service.mjs +0 -67
- package/dist/esm2022/lib/producers/socket-receive-methods/receive-message.service.mjs +0 -134
- package/dist/esm2022/lib/producers/socket-receive-methods/recording-notice.service.mjs +0 -233
- package/dist/esm2022/lib/producers/socket-receive-methods/room-record-params.service.mjs +0 -121
- package/dist/esm2022/lib/producers/socket-receive-methods/screen-producer-id.service.mjs +0 -86
- package/dist/esm2022/lib/producers/socket-receive-methods/start-records.service.mjs +0 -60
- package/dist/esm2022/lib/producers/socket-receive-methods/stopped-recording.service.mjs +0 -62
- package/dist/esm2022/lib/producers/socket-receive-methods/time-left-recording.service.mjs +0 -57
- package/dist/esm2022/lib/producers/socket-receive-methods/update-consuming-domains.service.mjs +0 -105
- package/dist/esm2022/lib/producers/socket-receive-methods/update-media-settings.service.mjs +0 -66
- package/dist/esm2022/lib/producers/socket-receive-methods/updated-co-host.service.mjs +0 -96
- package/dist/esm2022/lib/producers/socket-receive-methods/user-waiting.service.mjs +0 -52
- package/dist/esm2022/lib/sockets/socket-manager.service.mjs +0 -113
- package/dist/esm2022/mediasfu-angular.mjs +0 -5
- package/dist/esm2022/public-api.mjs +0 -187
|
@@ -1,345 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { MiniCard } from '../components/display-components/mini-card/mini-card.component';
|
|
3
|
-
import { VideoCard } from '../components/display-components/video-card/video-card.component';
|
|
4
|
-
import { AudioCard } from '../components/display-components/audio-card/audio-card.component';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
/**
|
|
7
|
-
* @service AddVideosGrid
|
|
8
|
-
* @description Service to manage and update video and audio components on a grid in the user interface. This service helps organize and configure participants and streams into different grid layouts.
|
|
9
|
-
*
|
|
10
|
-
* @method addVideosGrid
|
|
11
|
-
* Adds video and audio cards to the main and alternate grids based on the parameters and configuration options provided.
|
|
12
|
-
*
|
|
13
|
-
* @param {AddVideosGridOptions} options - Configuration options for setting up the grid.
|
|
14
|
-
* @param {(Stream | Participant)[]} options.mainGridStreams - Streams or participants to display on the main grid.
|
|
15
|
-
* @param {(Stream | Participant)[]} options.altGridStreams - Streams or participants to display on the alternate grid.
|
|
16
|
-
* @param {number} options.numtoadd - The number of items to add to the grid.
|
|
17
|
-
* @param {number} options.numRows - The number of rows for the main grid.
|
|
18
|
-
* @param {number} options.numCols - The number of columns for the main grid.
|
|
19
|
-
* @param {number} options.actualRows - The actual rows currently displayed.
|
|
20
|
-
* @param {number} options.lastrowcols - The number of columns in the last row of the grid.
|
|
21
|
-
* @param {boolean} options.removeAltGrid - Whether to remove the alternate grid layout.
|
|
22
|
-
* @param {AddVideosGridParameters} options.parameters - Additional parameters for updating the grid, controlling appearance, and handling events.
|
|
23
|
-
*
|
|
24
|
-
* @returns {Promise<void>} A promise that resolves once the grid layout is updated.
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* ```typescript
|
|
28
|
-
* await addVideosGridService.addVideosGrid({
|
|
29
|
-
* mainGridStreams: [...],
|
|
30
|
-
* altGridStreams: [...],
|
|
31
|
-
* numtoadd: 4,
|
|
32
|
-
* numRows: 2,
|
|
33
|
-
* numCols: 2,
|
|
34
|
-
* actualRows: 2,
|
|
35
|
-
* lastrowcols: 2,
|
|
36
|
-
* removeAltGrid: false,
|
|
37
|
-
* parameters: {
|
|
38
|
-
* eventType: 'webinar',
|
|
39
|
-
* updateAddAltGrid: (value) => {},
|
|
40
|
-
* ref_participants: participantsList,
|
|
41
|
-
* islevel: '1',
|
|
42
|
-
* videoAlreadyOn: true,
|
|
43
|
-
* localStreamVideo: localStream,
|
|
44
|
-
* keepBackground: true,
|
|
45
|
-
* virtualStream: virtualStream,
|
|
46
|
-
* forceFullDisplay: false,
|
|
47
|
-
* otherGridStreams: otherStreamsArray,
|
|
48
|
-
* updateOtherGridStreams: (newStreams) => {},
|
|
49
|
-
* updateMiniCardsGrid: (params) => {},
|
|
50
|
-
* getUpdatedAllParams: () => ({ /* updated parameters * / }),
|
|
51
|
-
* },
|
|
52
|
-
* });
|
|
53
|
-
* ```
|
|
54
|
-
*/
|
|
55
|
-
export class AddVideosGrid {
|
|
56
|
-
addVideosGrid = async ({ mainGridStreams, altGridStreams, numtoadd, numRows, numCols, actualRows, lastrowcols, removeAltGrid, parameters, }) => {
|
|
57
|
-
let { getUpdatedAllParams } = parameters;
|
|
58
|
-
parameters = { ...parameters, ...getUpdatedAllParams() };
|
|
59
|
-
let { eventType, updateAddAltGrid, ref_participants, islevel, videoAlreadyOn, localStreamVideo, keepBackground, virtualStream, forceFullDisplay, otherGridStreams, updateOtherGridStreams, updateMiniCardsGrid, } = parameters;
|
|
60
|
-
let newComponents = [[], []];
|
|
61
|
-
let participant;
|
|
62
|
-
let remoteProducerId = '';
|
|
63
|
-
let participant_ = null;
|
|
64
|
-
numtoadd = mainGridStreams.length;
|
|
65
|
-
if (removeAltGrid) {
|
|
66
|
-
updateAddAltGrid(false);
|
|
67
|
-
}
|
|
68
|
-
// Add participants to the main grid
|
|
69
|
-
for (let i = 0; i < numtoadd; i++) {
|
|
70
|
-
participant = mainGridStreams[i];
|
|
71
|
-
remoteProducerId = participant.producerId;
|
|
72
|
-
let pseudoName = !remoteProducerId || remoteProducerId === '';
|
|
73
|
-
if (pseudoName) {
|
|
74
|
-
participant_ = participant;
|
|
75
|
-
remoteProducerId = await participant.name;
|
|
76
|
-
if (Object.prototype.hasOwnProperty.call(participant, 'audioID') &&
|
|
77
|
-
participant.audioID != null &&
|
|
78
|
-
participant.audioID !== '') {
|
|
79
|
-
newComponents[0].push({
|
|
80
|
-
component: AudioCard,
|
|
81
|
-
inputs: {
|
|
82
|
-
name: participant.name,
|
|
83
|
-
barColor: 'red',
|
|
84
|
-
textColor: 'white',
|
|
85
|
-
customStyle: {
|
|
86
|
-
backgroundColor: 'transparent',
|
|
87
|
-
border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',
|
|
88
|
-
},
|
|
89
|
-
controlsPosition: 'topLeft',
|
|
90
|
-
infoPosition: 'topRight',
|
|
91
|
-
showWaveform: true,
|
|
92
|
-
roundedImage: true,
|
|
93
|
-
parameters,
|
|
94
|
-
backgroundColor: 'transparent',
|
|
95
|
-
showControls: eventType !== 'chat',
|
|
96
|
-
participant,
|
|
97
|
-
},
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
newComponents[0].push({
|
|
102
|
-
component: MiniCard,
|
|
103
|
-
inputs: {
|
|
104
|
-
initials: participant.name,
|
|
105
|
-
fontSize: 20,
|
|
106
|
-
customStyle: {
|
|
107
|
-
backgroundColor: 'transparent',
|
|
108
|
-
border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',
|
|
109
|
-
},
|
|
110
|
-
},
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
if (remoteProducerId === 'youyou' || remoteProducerId === 'youyouyou') {
|
|
116
|
-
let name = 'You';
|
|
117
|
-
if (islevel === '2' && eventType !== 'chat') {
|
|
118
|
-
name = 'You (Host)';
|
|
119
|
-
}
|
|
120
|
-
if (!videoAlreadyOn) {
|
|
121
|
-
name = 'You';
|
|
122
|
-
if (islevel == '2' && eventType != 'chat') {
|
|
123
|
-
name = 'You (Host)';
|
|
124
|
-
}
|
|
125
|
-
newComponents[0].push({
|
|
126
|
-
component: MiniCard,
|
|
127
|
-
inputs: {
|
|
128
|
-
initials: name,
|
|
129
|
-
fontSize: 20,
|
|
130
|
-
customStyle: {
|
|
131
|
-
backgroundColor: 'transparent',
|
|
132
|
-
border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',
|
|
133
|
-
},
|
|
134
|
-
},
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
participant = {
|
|
139
|
-
id: 'youyouyou',
|
|
140
|
-
stream: keepBackground && virtualStream ? virtualStream : localStreamVideo,
|
|
141
|
-
name: 'youyouyou',
|
|
142
|
-
muted: true,
|
|
143
|
-
};
|
|
144
|
-
participant_ = {
|
|
145
|
-
id: 'youyou',
|
|
146
|
-
videoID: 'youyou',
|
|
147
|
-
name: 'youyouyou',
|
|
148
|
-
stream: keepBackground && virtualStream ? virtualStream : localStreamVideo,
|
|
149
|
-
};
|
|
150
|
-
remoteProducerId = 'youyouyou';
|
|
151
|
-
newComponents[0].push({
|
|
152
|
-
component: VideoCard,
|
|
153
|
-
inputs: {
|
|
154
|
-
videoStream: participant.stream ? participant.stream : null,
|
|
155
|
-
remoteProducerId: participant.stream ? participant.stream.id : null,
|
|
156
|
-
eventType,
|
|
157
|
-
forceFullDisplay: eventType == 'webinar' ? false : forceFullDisplay,
|
|
158
|
-
customStyle: {
|
|
159
|
-
border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',
|
|
160
|
-
},
|
|
161
|
-
participant: participant,
|
|
162
|
-
backgroundColor: 'transparent',
|
|
163
|
-
showControls: false,
|
|
164
|
-
showInfo: false,
|
|
165
|
-
name: participant.name,
|
|
166
|
-
doMirror: true,
|
|
167
|
-
parameters,
|
|
168
|
-
},
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
participant_ = ref_participants.find((obj) => obj.videoID === remoteProducerId);
|
|
174
|
-
if (participant_) {
|
|
175
|
-
newComponents[0].push({
|
|
176
|
-
component: VideoCard,
|
|
177
|
-
inputs: {
|
|
178
|
-
videoStream: participant.stream ? participant.stream : null,
|
|
179
|
-
remoteProducerId,
|
|
180
|
-
eventType,
|
|
181
|
-
forceFullDisplay,
|
|
182
|
-
customStyle: {
|
|
183
|
-
border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',
|
|
184
|
-
},
|
|
185
|
-
participant: participant_,
|
|
186
|
-
backgroundColor: 'transparent',
|
|
187
|
-
showControls: eventType !== 'chat',
|
|
188
|
-
showInfo: true,
|
|
189
|
-
name: participant_.name,
|
|
190
|
-
doMirror: false,
|
|
191
|
-
parameters,
|
|
192
|
-
},
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
if (i === numtoadd - 1) {
|
|
198
|
-
otherGridStreams[0] = newComponents[0];
|
|
199
|
-
await updateMiniCardsGrid({
|
|
200
|
-
rows: numRows,
|
|
201
|
-
cols: numCols,
|
|
202
|
-
defal: true,
|
|
203
|
-
actualRows: actualRows,
|
|
204
|
-
parameters,
|
|
205
|
-
});
|
|
206
|
-
updateOtherGridStreams(otherGridStreams);
|
|
207
|
-
await updateMiniCardsGrid({
|
|
208
|
-
rows: numRows,
|
|
209
|
-
cols: numCols,
|
|
210
|
-
defal: true,
|
|
211
|
-
actualRows,
|
|
212
|
-
parameters,
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
// Handle the alternate grid streams
|
|
217
|
-
if (!removeAltGrid) {
|
|
218
|
-
for (let i = 0; i < altGridStreams.length; i++) {
|
|
219
|
-
participant = altGridStreams[i];
|
|
220
|
-
remoteProducerId = participant.producerId;
|
|
221
|
-
let participant_;
|
|
222
|
-
let pseudoName = false;
|
|
223
|
-
//check if there is .name in the participant object and if it is null
|
|
224
|
-
if (Object.prototype.hasOwnProperty.call(participant, 'producerId') &&
|
|
225
|
-
participant.producerId != null &&
|
|
226
|
-
participant.producerId !== '') {
|
|
227
|
-
//actual video
|
|
228
|
-
pseudoName = false;
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
pseudoName = true;
|
|
232
|
-
}
|
|
233
|
-
if (pseudoName) {
|
|
234
|
-
participant_ = participant;
|
|
235
|
-
remoteProducerId = await participant.name;
|
|
236
|
-
if (Object.prototype.hasOwnProperty.call(participant, 'audioID') &&
|
|
237
|
-
participant.audioID != null &&
|
|
238
|
-
participant.audioID !== '') {
|
|
239
|
-
newComponents[1].push({
|
|
240
|
-
component: AudioCard,
|
|
241
|
-
inputs: {
|
|
242
|
-
name: participant.name,
|
|
243
|
-
barColor: 'red',
|
|
244
|
-
textColor: 'white',
|
|
245
|
-
customStyle: {
|
|
246
|
-
backgroundColor: 'transparent',
|
|
247
|
-
border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',
|
|
248
|
-
},
|
|
249
|
-
controlsPosition: 'topLeft',
|
|
250
|
-
infoPosition: 'topRight',
|
|
251
|
-
showWaveform: true,
|
|
252
|
-
roundedImage: true,
|
|
253
|
-
parameters,
|
|
254
|
-
backgroundColor: 'transparent',
|
|
255
|
-
showControls: eventType !== 'chat',
|
|
256
|
-
participant,
|
|
257
|
-
},
|
|
258
|
-
});
|
|
259
|
-
}
|
|
260
|
-
else {
|
|
261
|
-
newComponents[1].push({
|
|
262
|
-
component: MiniCard,
|
|
263
|
-
inputs: {
|
|
264
|
-
initials: participant.name,
|
|
265
|
-
fontSize: 20,
|
|
266
|
-
customStyle: {
|
|
267
|
-
backgroundColor: 'transparent',
|
|
268
|
-
border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',
|
|
269
|
-
},
|
|
270
|
-
},
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
participant_ = ref_participants.find((obj) => obj.videoID === remoteProducerId);
|
|
276
|
-
newComponents[1].push({
|
|
277
|
-
component: VideoCard,
|
|
278
|
-
inputs: {
|
|
279
|
-
videoStream: participant_ && participant_['stream'] ? participant_['stream'] : null,
|
|
280
|
-
remoteProducerId,
|
|
281
|
-
eventType,
|
|
282
|
-
forceFullDisplay,
|
|
283
|
-
customStyle: {
|
|
284
|
-
border: eventType !== 'broadcast' ? '2px solid black' : '0px solid black',
|
|
285
|
-
},
|
|
286
|
-
participant: participant_,
|
|
287
|
-
backgroundColor: 'transparent',
|
|
288
|
-
showControls: eventType !== 'chat',
|
|
289
|
-
showInfo: true,
|
|
290
|
-
name: participant.name,
|
|
291
|
-
doMirror: false,
|
|
292
|
-
parameters,
|
|
293
|
-
},
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
if (i === numtoadd - 1) {
|
|
297
|
-
otherGridStreams[1] = newComponents[1];
|
|
298
|
-
await updateMiniCardsGrid({
|
|
299
|
-
rows: 1,
|
|
300
|
-
cols: lastrowcols,
|
|
301
|
-
defal: false,
|
|
302
|
-
actualRows,
|
|
303
|
-
parameters,
|
|
304
|
-
});
|
|
305
|
-
updateOtherGridStreams(otherGridStreams);
|
|
306
|
-
await updateMiniCardsGrid({
|
|
307
|
-
rows: 1,
|
|
308
|
-
cols: lastrowcols,
|
|
309
|
-
defal: false,
|
|
310
|
-
actualRows,
|
|
311
|
-
parameters,
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
else {
|
|
317
|
-
updateAddAltGrid(false);
|
|
318
|
-
otherGridStreams[1] = [];
|
|
319
|
-
await updateMiniCardsGrid({
|
|
320
|
-
rows: 0,
|
|
321
|
-
cols: 0,
|
|
322
|
-
defal: false,
|
|
323
|
-
actualRows: actualRows,
|
|
324
|
-
parameters,
|
|
325
|
-
});
|
|
326
|
-
updateOtherGridStreams(otherGridStreams);
|
|
327
|
-
await updateMiniCardsGrid({
|
|
328
|
-
rows: 0,
|
|
329
|
-
cols: 0,
|
|
330
|
-
defal: false,
|
|
331
|
-
actualRows,
|
|
332
|
-
parameters,
|
|
333
|
-
});
|
|
334
|
-
}
|
|
335
|
-
};
|
|
336
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AddVideosGrid, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
337
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AddVideosGrid, providedIn: 'root' });
|
|
338
|
-
}
|
|
339
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AddVideosGrid, decorators: [{
|
|
340
|
-
type: Injectable,
|
|
341
|
-
args: [{
|
|
342
|
-
providedIn: 'root',
|
|
343
|
-
}]
|
|
344
|
-
}] });
|
|
345
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXZpZGVvcy1ncmlkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYXNmdS1hbmd1bGFyL3NyYy9saWIvY29uc3VtZXJzL2FkZC12aWRlb3MtZ3JpZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUM3RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0VBQWtFLENBQUM7O0FBK0M3Rjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0RHO0FBTUgsTUFBTSxPQUFPLGFBQWE7SUFDeEIsYUFBYSxHQUFHLEtBQUssRUFBRSxFQUNyQixlQUFlLEVBQ2YsY0FBYyxFQUNkLFFBQVEsRUFDUixPQUFPLEVBQ1AsT0FBTyxFQUNQLFVBQVUsRUFDVixXQUFXLEVBQ1gsYUFBYSxFQUNiLFVBQVUsR0FDVyxFQUFpQixFQUFFO1FBQ3hDLElBQUksRUFBRSxtQkFBbUIsRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUN6QyxVQUFVLEdBQUcsRUFBRSxHQUFHLFVBQVUsRUFBRSxHQUFHLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztRQUV6RCxJQUFJLEVBQ0YsU0FBUyxFQUNULGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QixtQkFBbUIsR0FDcEIsR0FBRyxVQUFVLENBQUM7UUFFZixJQUFJLGFBQWEsR0FBd0MsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7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QUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1pbmlDYXJkIH0gZnJvbSAnLi4vY29tcG9uZW50cy9kaXNwbGF5LWNvbXBvbmVudHMvbWluaS1jYXJkL21pbmktY2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVmlkZW9DYXJkIH0gZnJvbSAnLi4vY29tcG9uZW50cy9kaXNwbGF5LWNvbXBvbmVudHMvdmlkZW8tY2FyZC92aWRlby1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdWRpb0NhcmQgfSBmcm9tICcuLi9jb21wb25lbnRzL2Rpc3BsYXktY29tcG9uZW50cy9hdWRpby1jYXJkL2F1ZGlvLWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIFBhcnRpY2lwYW50LFxuICBTdHJlYW0sXG4gIFVwZGF0ZU1pbmlDYXJkc0dyaWRUeXBlLFxuICBVcGRhdGVNaW5pQ2FyZHNHcmlkUGFyYW1ldGVycyxcbiAgQXVkaW9DYXJkUGFyYW1ldGVycyxcbiAgRXZlbnRUeXBlLFxuICBDdXN0b21NZWRpYUNvbXBvbmVudCxcbn0gZnJvbSAnLi4vQHR5cGVzL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBBZGRWaWRlb3NHcmlkUGFyYW1ldGVyc1xuICBleHRlbmRzIFVwZGF0ZU1pbmlDYXJkc0dyaWRQYXJhbWV0ZXJzLFxuICAgIEF1ZGlvQ2FyZFBhcmFtZXRlcnMge1xuICBldmVudFR5cGU6IEV2ZW50VHlwZTtcbiAgdXBkYXRlQWRkQWx0R3JpZDogKGFkZEFsdEdyaWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHJlZl9wYXJ0aWNpcGFudHM6IFBhcnRpY2lwYW50W107XG4gIGlzbGV2ZWw6IHN0cmluZztcbiAgdmlkZW9BbHJlYWR5T246IGJvb2xlYW47XG4gIGxvY2FsU3RyZWFtVmlkZW86IE1lZGlhU3RyZWFtIHwgbnVsbDtcbiAga2VlcEJhY2tncm91bmQ6IGJvb2xlYW47XG4gIHZpcnR1YWxTdHJlYW06IE1lZGlhU3RyZWFtIHwgbnVsbDtcbiAgZm9yY2VGdWxsRGlzcGxheTogYm9vbGVhbjtcbiAgb3RoZXJHcmlkU3RyZWFtczogQ3VzdG9tTWVkaWFDb21wb25lbnRbXVtdO1xuICB1cGRhdGVPdGhlckdyaWRTdHJlYW1zOiAob3RoZXJHcmlkU3RyZWFtczogQ3VzdG9tTWVkaWFDb21wb25lbnRbXVtdKSA9PiB2b2lkO1xuXG4gIC8vIG1lZGlhc2Z1IGZ1bmN0aW9uc1xuICB1cGRhdGVNaW5pQ2FyZHNHcmlkOiBVcGRhdGVNaW5pQ2FyZHNHcmlkVHlwZTtcbiAgZ2V0VXBkYXRlZEFsbFBhcmFtczogKCkgPT4gQWRkVmlkZW9zR3JpZFBhcmFtZXRlcnM7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRWaWRlb3NHcmlkT3B0aW9ucyB7XG4gIG1haW5HcmlkU3RyZWFtczogKFN0cmVhbSB8IFBhcnRpY2lwYW50KVtdO1xuICBhbHRHcmlkU3RyZWFtczogKFN0cmVhbSB8IFBhcnRpY2lwYW50KVtdO1xuICBudW10b2FkZDogbnVtYmVyO1xuICBudW1Sb3dzOiBudW1iZXI7XG4gIG51bUNvbHM6IG51bWJlcjtcbiAgYWN0dWFsUm93czogbnVtYmVyO1xuICBsYXN0cm93Y29sczogbnVtYmVyO1xuICByZW1vdmVBbHRHcmlkOiBib29sZWFuO1xuICBwYXJhbWV0ZXJzOiBBZGRWaWRlb3NHcmlkUGFyYW1ldGVycztcbn1cblxuLy8gRXhwb3J0IHRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBmdW5jdGlvblxuZXhwb3J0IHR5cGUgQWRkVmlkZW9zR3JpZFR5cGUgPSAob3B0aW9uczogQWRkVmlkZW9zR3JpZE9wdGlvbnMpID0+IFByb21pc2U8dm9pZD47XG5cbi8qKlxuICogQHNlcnZpY2UgQWRkVmlkZW9zR3JpZFxuICogQGRlc2NyaXB0aW9uIFNlcnZpY2UgdG8gbWFuYWdlIGFuZCB1cGRhdGUgdmlkZW8gYW5kIGF1ZGlvIGNvbXBvbmVudHMgb24gYSBncmlkIGluIHRoZSB1c2VyIGludGVyZmFjZS4gVGhpcyBzZXJ2aWNlIGhlbHBzIG9yZ2FuaXplIGFuZCBjb25maWd1cmUgcGFydGljaXBhbnRzIGFuZCBzdHJlYW1zIGludG8gZGlmZmVyZW50IGdyaWQgbGF5b3V0cy5cbiAqXG4gKiBAbWV0aG9kIGFkZFZpZGVvc0dyaWRcbiAqIEFkZHMgdmlkZW8gYW5kIGF1ZGlvIGNhcmRzIHRvIHRoZSBtYWluIGFuZCBhbHRlcm5hdGUgZ3JpZHMgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0ge0FkZFZpZGVvc0dyaWRPcHRpb25zfSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBzZXR0aW5nIHVwIHRoZSBncmlkLlxuICogQHBhcmFtIHsoU3RyZWFtIHwgUGFydGljaXBhbnQpW119IG9wdGlvbnMubWFpbkdyaWRTdHJlYW1zIC0gU3RyZWFtcyBvciBwYXJ0aWNpcGFudHMgdG8gZGlzcGxheSBvbiB0aGUgbWFpbiBncmlkLlxuICogQHBhcmFtIHsoU3RyZWFtIHwgUGFydGljaXBhbnQpW119IG9wdGlvbnMuYWx0R3JpZFN0cmVhbXMgLSBTdHJlYW1zIG9yIHBhcnRpY2lwYW50cyB0byBkaXNwbGF5IG9uIHRoZSBhbHRlcm5hdGUgZ3JpZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLm51bXRvYWRkIC0gVGhlIG51bWJlciBvZiBpdGVtcyB0byBhZGQgdG8gdGhlIGdyaWQuXG4gKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy5udW1Sb3dzIC0gVGhlIG51bWJlciBvZiByb3dzIGZvciB0aGUgbWFpbiBncmlkLlxuICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMubnVtQ29scyAtIFRoZSBudW1iZXIgb2YgY29sdW1ucyBmb3IgdGhlIG1haW4gZ3JpZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLmFjdHVhbFJvd3MgLSBUaGUgYWN0dWFsIHJvd3MgY3VycmVudGx5IGRpc3BsYXllZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLmxhc3Ryb3djb2xzIC0gVGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBsYXN0IHJvdyBvZiB0aGUgZ3JpZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yZW1vdmVBbHRHcmlkIC0gV2hldGhlciB0byByZW1vdmUgdGhlIGFsdGVybmF0ZSBncmlkIGxheW91dC5cbiAqIEBwYXJhbSB7QWRkVmlkZW9zR3JpZFBhcmFtZXRlcnN9IG9wdGlvbnMucGFyYW1ldGVycyAtIEFkZGl0aW9uYWwgcGFyYW1ldGVycyBmb3IgdXBkYXRpbmcgdGhlIGdyaWQsIGNvbnRyb2xsaW5nIGFwcGVhcmFuY2UsIGFuZCBoYW5kbGluZyBldmVudHMuXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGdyaWQgbGF5b3V0IGlzIHVwZGF0ZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGF3YWl0IGFkZFZpZGVvc0dyaWRTZXJ2aWNlLmFkZFZpZGVvc0dyaWQoe1xuICogICBtYWluR3JpZFN0cmVhbXM6IFsuLi5dLFxuICogICBhbHRHcmlkU3RyZWFtczogWy4uLl0sXG4gKiAgIG51bXRvYWRkOiA0LFxuICogICBudW1Sb3dzOiAyLFxuICogICBudW1Db2xzOiAyLFxuICogICBhY3R1YWxSb3dzOiAyLFxuICogICBsYXN0cm93Y29sczogMixcbiAqICAgcmVtb3ZlQWx0R3JpZDogZmFsc2UsXG4gKiAgIHBhcmFtZXRlcnM6IHtcbiAqICAgICBldmVudFR5cGU6ICd3ZWJpbmFyJyxcbiAqICAgICB1cGRhdGVBZGRBbHRHcmlkOiAodmFsdWUpID0+IHt9LFxuICogICAgIHJlZl9wYXJ0aWNpcGFudHM6IHBhcnRpY2lwYW50c0xpc3QsXG4gKiAgICAgaXNsZXZlbDogJzEnLFxuICogICAgIHZpZGVvQWxyZWFkeU9uOiB0cnVlLFxuICogICAgIGxvY2FsU3RyZWFtVmlkZW86IGxvY2FsU3RyZWFtLFxuICogICAgIGtlZXBCYWNrZ3JvdW5kOiB0cnVlLFxuICogICAgIHZpcnR1YWxTdHJlYW06IHZpcnR1YWxTdHJlYW0sXG4gKiAgICAgZm9yY2VGdWxsRGlzcGxheTogZmFsc2UsXG4gKiAgICAgb3RoZXJHcmlkU3RyZWFtczogb3RoZXJTdHJlYW1zQXJyYXksXG4gKiAgICAgdXBkYXRlT3RoZXJHcmlkU3RyZWFtczogKG5ld1N0cmVhbXMpID0+IHt9LFxuICogICAgIHVwZGF0ZU1pbmlDYXJkc0dyaWQ6IChwYXJhbXMpID0+IHt9LFxuICogICAgIGdldFVwZGF0ZWRBbGxQYXJhbXM6ICgpID0+ICh7IC8qIHVwZGF0ZWQgcGFyYW1ldGVycyAqIC8gfSksXG4gKiAgIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFkZFZpZGVvc0dyaWQge1xuICBhZGRWaWRlb3NHcmlkID0gYXN5bmMgKHtcbiAgICBtYWluR3JpZFN0cmVhbXMsXG4gICAgYWx0R3JpZFN0cmVhbXMsXG4gICAgbnVtdG9hZGQsXG4gICAgbnVtUm93cyxcbiAgICBudW1Db2xzLFxuICAgIGFjdHVhbFJvd3MsXG4gICAgbGFzdHJvd2NvbHMsXG4gICAgcmVtb3ZlQWx0R3JpZCxcbiAgICBwYXJhbWV0ZXJzLFxuICB9OiBBZGRWaWRlb3NHcmlkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGxldCB7IGdldFVwZGF0ZWRBbGxQYXJhbXMgfSA9IHBhcmFtZXRlcnM7XG4gICAgcGFyYW1ldGVycyA9IHsgLi4ucGFyYW1ldGVycywgLi4uZ2V0VXBkYXRlZEFsbFBhcmFtcygpIH07XG5cbiAgICBsZXQge1xuICAgICAgZXZlbnRUeXBlLFxuICAgICAgdXBkYXRlQWRkQWx0R3JpZCxcbiAgICAgIHJlZl9wYXJ0aWNpcGFudHMsXG4gICAgICBpc2xldmVsLFxuICAgICAgdmlkZW9BbHJlYWR5T24sXG4gICAgICBsb2NhbFN0cmVhbVZpZGVvLFxuICAgICAga2VlcEJhY2tncm91bmQsXG4gICAgICB2aXJ0dWFsU3RyZWFtLFxuICAgICAgZm9yY2VGdWxsRGlzcGxheSxcbiAgICAgIG90aGVyR3JpZFN0cmVhbXMsXG4gICAgICB1cGRhdGVPdGhlckdyaWRTdHJlYW1zLFxuICAgICAgdXBkYXRlTWluaUNhcmRzR3JpZCxcbiAgICB9ID0gcGFyYW1ldGVycztcblxuICAgIGxldCBuZXdDb21wb25lbnRzOiB7IGNvbXBvbmVudDogYW55OyBpbnB1dHM6IGFueSB9W11bXSA9IFtbXSwgW11dO1xuICAgIGxldCBwYXJ0aWNpcGFudDogYW55O1xuICAgIGxldCByZW1vdGVQcm9kdWNlcklkID0gJyc7XG4gICAgbGV0IHBhcnRpY2lwYW50XyA9IG51bGw7XG5cbiAgICBudW10b2FkZCA9IG1haW5HcmlkU3RyZWFtcy5sZW5ndGg7XG5cbiAgICBpZiAocmVtb3ZlQWx0R3JpZCkge1xuICAgICAgdXBkYXRlQWRkQWx0R3JpZChmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHBhcnRpY2lwYW50cyB0byB0aGUgbWFpbiBncmlkXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW10b2FkZDsgaSsrKSB7XG4gICAgICBwYXJ0aWNpcGFudCA9IG1haW5HcmlkU3RyZWFtc1tpXTtcbiAgICAgIHJlbW90ZVByb2R1Y2VySWQgPSBwYXJ0aWNpcGFudC5wcm9kdWNlcklkO1xuXG4gICAgICBsZXQgcHNldWRvTmFtZSA9ICFyZW1vdGVQcm9kdWNlcklkIHx8IHJlbW90ZVByb2R1Y2VySWQgPT09ICcnO1xuXG4gICAgICBpZiAocHNldWRvTmFtZSkge1xuICAgICAgICBwYXJ0aWNpcGFudF8gPSBwYXJ0aWNpcGFudDtcbiAgICAgICAgcmVtb3RlUHJvZHVjZXJJZCA9IGF3YWl0IHBhcnRpY2lwYW50Lm5hbWU7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJ0aWNpcGFudCwgJ2F1ZGlvSUQnKSAmJlxuICAgICAgICAgIHBhcnRpY2lwYW50LmF1ZGlvSUQgIT0gbnVsbCAmJlxuICAgICAgICAgIHBhcnRpY2lwYW50LmF1ZGlvSUQgIT09ICcnXG4gICAgICAgICkge1xuICAgICAgICAgIG5ld0NvbXBvbmVudHNbMF0ucHVzaCh7XG4gICAgICAgICAgICBjb21wb25lbnQ6IEF1ZGlvQ2FyZCxcbiAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICBuYW1lOiBwYXJ0aWNpcGFudC5uYW1lLFxuICAgICAgICAgICAgICBiYXJDb2xvcjogJ3JlZCcsXG4gICAgICAgICAgICAgIHRleHRDb2xvcjogJ3doaXRlJyxcbiAgICAgICAgICAgICAgY3VzdG9tU3R5bGU6IHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBldmVudFR5cGUgIT09ICdicm9hZGNhc3QnID8gJzJweCBzb2xpZCBibGFjaycgOiAnMHB4IHNvbGlkIGJsYWNrJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY29udHJvbHNQb3NpdGlvbjogJ3RvcExlZnQnLFxuICAgICAgICAgICAgICBpbmZvUG9zaXRpb246ICd0b3BSaWdodCcsXG4gICAgICAgICAgICAgIHNob3dXYXZlZm9ybTogdHJ1ZSxcbiAgICAgICAgICAgICAgcm91bmRlZEltYWdlOiB0cnVlLFxuICAgICAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgIHNob3dDb250cm9sczogZXZlbnRUeXBlICE9PSAnY2hhdCcsXG4gICAgICAgICAgICAgIHBhcnRpY2lwYW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdDb21wb25lbnRzWzBdLnB1c2goe1xuICAgICAgICAgICAgY29tcG9uZW50OiBNaW5pQ2FyZCxcbiAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICBpbml0aWFsczogcGFydGljaXBhbnQubmFtZSxcbiAgICAgICAgICAgICAgZm9udFNpemU6IDIwLFxuICAgICAgICAgICAgICBjdXN0b21TdHlsZToge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICBib3JkZXI6IGV2ZW50VHlwZSAhPT0gJ2Jyb2FkY2FzdCcgPyAnMnB4IHNvbGlkIGJsYWNrJyA6ICcwcHggc29saWQgYmxhY2snLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlbW90ZVByb2R1Y2VySWQgPT09ICd5b3V5b3UnIHx8IHJlbW90ZVByb2R1Y2VySWQgPT09ICd5b3V5b3V5b3UnKSB7XG4gICAgICAgICAgbGV0IG5hbWUgPSAnWW91JztcbiAgICAgICAgICBpZiAoaXNsZXZlbCA9PT0gJzInICYmIGV2ZW50VHlwZSAhPT0gJ2NoYXQnKSB7XG4gICAgICAgICAgICBuYW1lID0gJ1lvdSAoSG9zdCknO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdmlkZW9BbHJlYWR5T24pIHtcbiAgICAgICAgICAgIG5hbWUgPSAnWW91JztcbiAgICAgICAgICAgIGlmIChpc2xldmVsID09ICcyJyAmJiBldmVudFR5cGUgIT0gJ2NoYXQnKSB7XG4gICAgICAgICAgICAgIG5hbWUgPSAnWW91IChIb3N0KSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5ld0NvbXBvbmVudHNbMF0ucHVzaCh7XG4gICAgICAgICAgICAgIGNvbXBvbmVudDogTWluaUNhcmQsXG4gICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgIGluaXRpYWxzOiBuYW1lLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAyMCxcbiAgICAgICAgICAgICAgICBjdXN0b21TdHlsZToge1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyOiBldmVudFR5cGUgIT09ICdicm9hZGNhc3QnID8gJzJweCBzb2xpZCBibGFjaycgOiAnMHB4IHNvbGlkIGJsYWNrJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnRpY2lwYW50ID0ge1xuICAgICAgICAgICAgICBpZDogJ3lvdXlvdXlvdScsXG4gICAgICAgICAgICAgIHN0cmVhbToga2VlcEJhY2tncm91bmQgJiYgdmlydHVhbFN0cmVhbSA/IHZpcnR1YWxTdHJlYW0gOiBsb2NhbFN0cmVhbVZpZGVvLFxuICAgICAgICAgICAgICBuYW1lOiAneW91eW91eW91JyxcbiAgICAgICAgICAgICAgbXV0ZWQ6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcGFydGljaXBhbnRfID0ge1xuICAgICAgICAgICAgICBpZDogJ3lvdXlvdScsXG4gICAgICAgICAgICAgIHZpZGVvSUQ6ICd5b3V5b3UnLFxuICAgICAgICAgICAgICBuYW1lOiAneW91eW91eW91JyxcbiAgICAgICAgICAgICAgc3RyZWFtOiBrZWVwQmFja2dyb3VuZCAmJiB2aXJ0dWFsU3RyZWFtID8gdmlydHVhbFN0cmVhbSA6IGxvY2FsU3RyZWFtVmlkZW8sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVtb3RlUHJvZHVjZXJJZCA9ICd5b3V5b3V5b3UnO1xuXG4gICAgICAgICAgICBuZXdDb21wb25lbnRzWzBdLnB1c2goe1xuICAgICAgICAgICAgICBjb21wb25lbnQ6IFZpZGVvQ2FyZCxcbiAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgdmlkZW9TdHJlYW06IHBhcnRpY2lwYW50LnN0cmVhbSA/IHBhcnRpY2lwYW50LnN0cmVhbSA6IG51bGwsXG4gICAgICAgICAgICAgICAgcmVtb3RlUHJvZHVjZXJJZDogcGFydGljaXBhbnQuc3RyZWFtID8gcGFydGljaXBhbnQuc3RyZWFtLmlkIDogbnVsbCxcbiAgICAgICAgICAgICAgICBldmVudFR5cGUsXG4gICAgICAgICAgICAgICAgZm9yY2VGdWxsRGlzcGxheTogZXZlbnRUeXBlID09ICd3ZWJpbmFyJyA/IGZhbHNlIDogZm9yY2VGdWxsRGlzcGxheSxcbiAgICAgICAgICAgICAgICBjdXN0b21TdHlsZToge1xuICAgICAgICAgICAgICAgICAgYm9yZGVyOiBldmVudFR5cGUgIT09ICdicm9hZGNhc3QnID8gJzJweCBzb2xpZCBibGFjaycgOiAnMHB4IHNvbGlkIGJsYWNrJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50OiBwYXJ0aWNpcGFudCxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgc2hvd0NvbnRyb2xzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzaG93SW5mbzogZmFsc2UsXG4gICAgICAgICAgICAgICAgbmFtZTogcGFydGljaXBhbnQubmFtZSxcbiAgICAgICAgICAgICAgICBkb01pcnJvcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnRpY2lwYW50XyA9IHJlZl9wYXJ0aWNpcGFudHMuZmluZCgob2JqOiBhbnkpID0+IG9iai52aWRlb0lEID09PSByZW1vdGVQcm9kdWNlcklkKTtcbiAgICAgICAgICBpZiAocGFydGljaXBhbnRfKSB7XG4gICAgICAgICAgICBuZXdDb21wb25lbnRzWzBdLnB1c2goe1xuICAgICAgICAgICAgICBjb21wb25lbnQ6IFZpZGVvQ2FyZCxcbiAgICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgICAgdmlkZW9TdHJlYW06IHBhcnRpY2lwYW50LnN0cmVhbSA/IHBhcnRpY2lwYW50LnN0cmVhbSA6IG51bGwsXG4gICAgICAgICAgICAgICAgcmVtb3RlUHJvZHVjZXJJZCxcbiAgICAgICAgICAgICAgICBldmVudFR5cGUsXG4gICAgICAgICAgICAgICAgZm9yY2VGdWxsRGlzcGxheSxcbiAgICAgICAgICAgICAgICBjdXN0b21TdHlsZToge1xuICAgICAgICAgICAgICAgICAgYm9yZGVyOiBldmVudFR5cGUgIT09ICdicm9hZGNhc3QnID8gJzJweCBzb2xpZCBibGFjaycgOiAnMHB4IHNvbGlkIGJsYWNrJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50OiBwYXJ0aWNpcGFudF8sXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgIHNob3dDb250cm9sczogZXZlbnRUeXBlICE9PSAnY2hhdCcsXG4gICAgICAgICAgICAgICAgc2hvd0luZm86IHRydWUsXG4gICAgICAgICAgICAgICAgbmFtZTogcGFydGljaXBhbnRfLm5hbWUsXG4gICAgICAgICAgICAgICAgZG9NaXJyb3I6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGkgPT09IG51bXRvYWRkIC0gMSkge1xuICAgICAgICBvdGhlckdyaWRTdHJlYW1zWzBdID0gbmV3Q29tcG9uZW50c1swXTtcblxuICAgICAgICBhd2FpdCB1cGRhdGVNaW5pQ2FyZHNHcmlkKHtcbiAgICAgICAgICByb3dzOiBudW1Sb3dzLFxuICAgICAgICAgIGNvbHM6IG51bUNvbHMsXG4gICAgICAgICAgZGVmYWw6IHRydWUsXG4gICAgICAgICAgYWN0dWFsUm93czogYWN0dWFsUm93cyxcbiAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICB9KTtcblxuICAgICAgICB1cGRhdGVPdGhlckdyaWRTdHJlYW1zKG90aGVyR3JpZFN0cmVhbXMpO1xuICAgICAgICBhd2FpdCB1cGRhdGVNaW5pQ2FyZHNHcmlkKHtcbiAgICAgICAgICByb3dzOiBudW1Sb3dzLFxuICAgICAgICAgIGNvbHM6IG51bUNvbHMsXG4gICAgICAgICAgZGVmYWw6IHRydWUsXG4gICAgICAgICAgYWN0dWFsUm93cyxcbiAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIGFsdGVybmF0ZSBncmlkIHN0cmVhbXNcbiAgICBpZiAoIXJlbW92ZUFsdEdyaWQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWx0R3JpZFN0cmVhbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcGFydGljaXBhbnQgPSBhbHRHcmlkU3RyZWFtc1tpXTtcbiAgICAgICAgcmVtb3RlUHJvZHVjZXJJZCA9IHBhcnRpY2lwYW50LnByb2R1Y2VySWQ7XG5cbiAgICAgICAgbGV0IHBhcnRpY2lwYW50XztcbiAgICAgICAgbGV0IHBzZXVkb05hbWUgPSBmYWxzZTtcblxuICAgICAgICAvL2NoZWNrIGlmIHRoZXJlIGlzIC5uYW1lIGluIHRoZSBwYXJ0aWNpcGFudCBvYmplY3QgYW5kIGlmIGl0IGlzIG51bGxcbiAgICAgICAgaWYgKFxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJ0aWNpcGFudCwgJ3Byb2R1Y2VySWQnKSAmJlxuICAgICAgICAgIHBhcnRpY2lwYW50LnByb2R1Y2VySWQgIT0gbnVsbCAmJlxuICAgICAgICAgIHBhcnRpY2lwYW50LnByb2R1Y2VySWQgIT09ICcnXG4gICAgICAgICkge1xuICAgICAgICAgIC8vYWN0dWFsIHZpZGVvXG4gICAgICAgICAgcHNldWRvTmFtZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBzZXVkb05hbWUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBzZXVkb05hbWUpIHtcbiAgICAgICAgICBwYXJ0aWNpcGFudF8gPSBwYXJ0aWNpcGFudDtcbiAgICAgICAgICByZW1vdGVQcm9kdWNlcklkID0gYXdhaXQgcGFydGljaXBhbnQubmFtZTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJ0aWNpcGFudCwgJ2F1ZGlvSUQnKSAmJlxuICAgICAgICAgICAgcGFydGljaXBhbnQuYXVkaW9JRCAhPSBudWxsICYmXG4gICAgICAgICAgICBwYXJ0aWNpcGFudC5hdWRpb0lEICE9PSAnJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgbmV3Q29tcG9uZW50c1sxXS5wdXNoKHtcbiAgICAgICAgICAgICAgY29tcG9uZW50OiBBdWRpb0NhcmQsXG4gICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgIG5hbWU6IHBhcnRpY2lwYW50Lm5hbWUsXG4gICAgICAgICAgICAgICAgYmFyQ29sb3I6ICdyZWQnLFxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICBjdXN0b21TdHlsZToge1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyOiBldmVudFR5cGUgIT09ICdicm9hZGNhc3QnID8gJzJweCBzb2xpZCBibGFjaycgOiAnMHB4IHNvbGlkIGJsYWNrJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbnRyb2xzUG9zaXRpb246ICd0b3BMZWZ0JyxcbiAgICAgICAgICAgICAgICBpbmZvUG9zaXRpb246ICd0b3BSaWdodCcsXG4gICAgICAgICAgICAgICAgc2hvd1dhdmVmb3JtOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJvdW5kZWRJbWFnZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICBzaG93Q29udHJvbHM6IGV2ZW50VHlwZSAhPT0gJ2NoYXQnLFxuICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0NvbXBvbmVudHNbMV0ucHVzaCh7XG4gICAgICAgICAgICAgIGNvbXBvbmVudDogTWluaUNhcmQsXG4gICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgIGluaXRpYWxzOiBwYXJ0aWNpcGFudC5uYW1lLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAyMCxcbiAgICAgICAgICAgICAgICBjdXN0b21TdHlsZToge1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyOiBldmVudFR5cGUgIT09ICdicm9hZGNhc3QnID8gJzJweCBzb2xpZCBibGFjaycgOiAnMHB4IHNvbGlkIGJsYWNrJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnRpY2lwYW50XyA9IHJlZl9wYXJ0aWNpcGFudHMuZmluZCgob2JqOiBhbnkpID0+IG9iai52aWRlb0lEID09PSByZW1vdGVQcm9kdWNlcklkKTtcbiAgICAgICAgICBuZXdDb21wb25lbnRzWzFdLnB1c2goe1xuICAgICAgICAgICAgY29tcG9uZW50OiBWaWRlb0NhcmQsXG4gICAgICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICAgICAgdmlkZW9TdHJlYW06IHBhcnRpY2lwYW50XyAmJiBwYXJ0aWNpcGFudF9bJ3N0cmVhbSddID8gcGFydGljaXBhbnRfWydzdHJlYW0nXSA6IG51bGwsXG4gICAgICAgICAgICAgIHJlbW90ZVByb2R1Y2VySWQsXG4gICAgICAgICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgZm9yY2VGdWxsRGlzcGxheSxcbiAgICAgICAgICAgICAgY3VzdG9tU3R5bGU6IHtcbiAgICAgICAgICAgICAgICBib3JkZXI6IGV2ZW50VHlwZSAhPT0gJ2Jyb2FkY2FzdCcgPyAnMnB4IHNvbGlkIGJsYWNrJyA6ICcwcHggc29saWQgYmxhY2snLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwYXJ0aWNpcGFudDogcGFydGljaXBhbnRfLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgIHNob3dDb250cm9sczogZXZlbnRUeXBlICE9PSAnY2hhdCcsXG4gICAgICAgICAgICAgIHNob3dJbmZvOiB0cnVlLFxuICAgICAgICAgICAgICBuYW1lOiBwYXJ0aWNpcGFudC5uYW1lLFxuICAgICAgICAgICAgICBkb01pcnJvcjogZmFsc2UsXG4gICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPT09IG51bXRvYWRkIC0gMSkge1xuICAgICAgICAgIG90aGVyR3JpZFN0cmVhbXNbMV0gPSBuZXdDb21wb25lbnRzWzFdO1xuXG4gICAgICAgICAgYXdhaXQgdXBkYXRlTWluaUNhcmRzR3JpZCh7XG4gICAgICAgICAgICByb3dzOiAxLFxuICAgICAgICAgICAgY29sczogbGFzdHJvd2NvbHMsXG4gICAgICAgICAgICBkZWZhbDogZmFsc2UsXG4gICAgICAgICAgICBhY3R1YWxSb3dzLFxuICAgICAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHVwZGF0ZU90aGVyR3JpZFN0cmVhbXMob3RoZXJHcmlkU3RyZWFtcyk7XG4gICAgICAgICAgYXdhaXQgdXBkYXRlTWluaUNhcmRzR3JpZCh7XG4gICAgICAgICAgICByb3dzOiAxLFxuICAgICAgICAgICAgY29sczogbGFzdHJvd2NvbHMsXG4gICAgICAgICAgICBkZWZhbDogZmFsc2UsXG4gICAgICAgICAgICBhY3R1YWxSb3dzLFxuICAgICAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGVBZGRBbHRHcmlkKGZhbHNlKTtcbiAgICAgIG90aGVyR3JpZFN0cmVhbXNbMV0gPSBbXTtcblxuICAgICAgYXdhaXQgdXBkYXRlTWluaUNhcmRzR3JpZCh7XG4gICAgICAgIHJvd3M6IDAsXG4gICAgICAgIGNvbHM6IDAsXG4gICAgICAgIGRlZmFsOiBmYWxzZSxcbiAgICAgICAgYWN0dWFsUm93czogYWN0dWFsUm93cyxcbiAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgIH0pO1xuXG4gICAgICB1cGRhdGVPdGhlckdyaWRTdHJlYW1zKG90aGVyR3JpZFN0cmVhbXMpO1xuICAgICAgYXdhaXQgdXBkYXRlTWluaUNhcmRzR3JpZCh7XG4gICAgICAgIHJvd3M6IDAsXG4gICAgICAgIGNvbHM6IDAsXG4gICAgICAgIGRlZmFsOiBmYWxzZSxcbiAgICAgICAgYWN0dWFsUm93cyxcbiAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
/**
|
|
4
|
-
* @service AutoAdjust
|
|
5
|
-
* @description Service to auto-adjust layout values based on the event type, number of participants, and sharing conditions. Useful for dynamically adjusting UI elements in different event settings.
|
|
6
|
-
*
|
|
7
|
-
* @method autoAdjust
|
|
8
|
-
* Dynamically calculates and adjusts layout values (e.g., grid columns) based on conditions such as event type, participant count, and sharing status.
|
|
9
|
-
*
|
|
10
|
-
* @param {AutoAdjustOptions} options - Configuration options for the auto-adjustment.
|
|
11
|
-
* @param {number} options.n - Number of participants in the event.
|
|
12
|
-
* @param {EventType} options.eventType - Type of event (e.g., 'broadcast', 'chat', 'conference').
|
|
13
|
-
* @param {boolean} options.shareScreenStarted - Indicates whether screen sharing is active.
|
|
14
|
-
* @param {boolean} options.shared - Indicates if another resource is currently shared.
|
|
15
|
-
*
|
|
16
|
-
* @returns {Promise<number[]>} A promise resolving to an array of two adjusted layout values.
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```typescript
|
|
20
|
-
* const [primaryLayout, secondaryLayout] = await autoAdjustService.autoAdjust({
|
|
21
|
-
* n: 5,
|
|
22
|
-
* eventType: 'conference',
|
|
23
|
-
* shareScreenStarted: false,
|
|
24
|
-
* shared: false,
|
|
25
|
-
* });
|
|
26
|
-
* console.log(primaryLayout, secondaryLayout); // Adjusted layout values based on inputs
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export class AutoAdjust {
|
|
30
|
-
/**
|
|
31
|
-
* Adjusts values based on the provided options.
|
|
32
|
-
*
|
|
33
|
-
* @param {AutoAdjustOptions} options - The options for auto adjustment.
|
|
34
|
-
* @param {number} options.n - The number of participants.
|
|
35
|
-
* @param {string} options.eventType - The type of event (e.g., 'broadcast', 'chat', 'conference').
|
|
36
|
-
* @param {boolean} options.shareScreenStarted - Indicates if screen sharing has started.
|
|
37
|
-
* @param {boolean} options.shared - Indicates if something is shared.
|
|
38
|
-
*
|
|
39
|
-
* @returns {Promise<number[]>} A promise that resolves to an array containing the adjusted values.
|
|
40
|
-
*/
|
|
41
|
-
async autoAdjust({ n, eventType, shareScreenStarted, shared, }) {
|
|
42
|
-
// Default values
|
|
43
|
-
let val1 = 6;
|
|
44
|
-
let val2 = 12 - val1;
|
|
45
|
-
// Calculate percentage values
|
|
46
|
-
// Adjust values based on eventType and other conditions
|
|
47
|
-
if (eventType === 'broadcast') {
|
|
48
|
-
val1 = 0;
|
|
49
|
-
val2 = 12 - val1;
|
|
50
|
-
}
|
|
51
|
-
else if (eventType === 'chat' ||
|
|
52
|
-
(eventType === 'conference' && !(shareScreenStarted || shared))) {
|
|
53
|
-
val1 = 12;
|
|
54
|
-
val2 = 12 - val1;
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
if (shareScreenStarted || shared) {
|
|
58
|
-
val2 = 10;
|
|
59
|
-
val1 = 12 - val2;
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
// Adjust values based on the number of participants (n)
|
|
63
|
-
if (n === 0) {
|
|
64
|
-
val1 = 1;
|
|
65
|
-
val2 = 12 - val1;
|
|
66
|
-
}
|
|
67
|
-
else if (n >= 1 && n < 4) {
|
|
68
|
-
val1 = 4;
|
|
69
|
-
val2 = 12 - val1;
|
|
70
|
-
}
|
|
71
|
-
else if (n >= 4 && n < 6) {
|
|
72
|
-
val1 = 6;
|
|
73
|
-
val2 = 12 - val1;
|
|
74
|
-
}
|
|
75
|
-
else if (n >= 6 && n < 9) {
|
|
76
|
-
val1 = 6;
|
|
77
|
-
val2 = 12 - val1;
|
|
78
|
-
}
|
|
79
|
-
else if (n >= 9 && n < 12) {
|
|
80
|
-
val1 = 6;
|
|
81
|
-
val2 = 12 - val1;
|
|
82
|
-
}
|
|
83
|
-
else if (n >= 12 && n < 20) {
|
|
84
|
-
val1 = 8;
|
|
85
|
-
val2 = 12 - val1;
|
|
86
|
-
}
|
|
87
|
-
else if (n >= 20 && n < 50) {
|
|
88
|
-
val1 = 8;
|
|
89
|
-
val2 = 12 - val1;
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
val1 = 10;
|
|
93
|
-
val2 = 12 - val1;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
// Return an array with adjusted values
|
|
98
|
-
return [val1, val2];
|
|
99
|
-
}
|
|
100
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AutoAdjust, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
101
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AutoAdjust, providedIn: 'root' });
|
|
102
|
-
}
|
|
103
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AutoAdjust, decorators: [{
|
|
104
|
-
type: Injectable,
|
|
105
|
-
args: [{
|
|
106
|
-
providedIn: 'root',
|
|
107
|
-
}]
|
|
108
|
-
}] });
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1hZGp1c3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9jb25zdW1lcnMvYXV0by1hZGp1c3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVkzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQU1ILE1BQU0sT0FBTyxVQUFVO0lBQ3JCOzs7Ozs7Ozs7O09BVUc7SUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQ2YsQ0FBQyxFQUNELFNBQVMsRUFDVCxrQkFBa0IsRUFDbEIsTUFBTSxHQUNZO1FBQ2xCLGlCQUFpQjtRQUNqQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDYixJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRXJCLDhCQUE4QjtRQUU5Qix3REFBd0Q7UUFDeEQsSUFBSSxTQUFTLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDOUIsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNULElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ25CLENBQUM7YUFBTSxJQUNMLFNBQVMsS0FBSyxNQUFNO1lBQ3BCLENBQUMsU0FBUyxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsa0JBQWtCLElBQUksTUFBTSxDQUFDLENBQUMsRUFDL0QsQ0FBQztZQUNELElBQUksR0FBRyxFQUFFLENBQUM7WUFDVixJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNuQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksa0JBQWtCLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1YsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDbkIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHdEQUF3RDtnQkFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ1osSUFBSSxHQUFHLENBQUMsQ0FBQztvQkFDVCxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztnQkFDbkIsQ0FBQztxQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMzQixJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUNULElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixDQUFDO3FCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzNCLElBQUksR0FBRyxDQUFDLENBQUM7b0JBQ1QsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQ25CLENBQUM7cUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxHQUFHLENBQUMsQ0FBQztvQkFDVCxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztnQkFDbkIsQ0FBQztxQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO29CQUM1QixJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUNULElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixDQUFDO3FCQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQzdCLElBQUksR0FBRyxDQUFDLENBQUM7b0JBQ1QsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQ25CLENBQUM7cUJBQU0sSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxHQUFHLENBQUMsQ0FBQztvQkFDVCxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztnQkFDbkIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ1YsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQ25CLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELHVDQUF1QztRQUN2QyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUM7dUdBdEVVLFVBQVU7MkdBQVYsVUFBVSxjQUZULE1BQU07OzJGQUVQLFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnRUeXBlIH0gZnJvbSAnLi4vQHR5cGVzL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBBdXRvQWRqdXN0T3B0aW9ucyB7XG4gIG46IG51bWJlcjtcbiAgZXZlbnRUeXBlOiBFdmVudFR5cGU7XG4gIHNoYXJlU2NyZWVuU3RhcnRlZDogYm9vbGVhbjtcbiAgc2hhcmVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBBdXRvQWRqdXN0VHlwZSA9IChvcHRpb25zOiBBdXRvQWRqdXN0T3B0aW9ucykgPT4gUHJvbWlzZTxudW1iZXJbXT47XG5cbi8qKlxuICogQHNlcnZpY2UgQXV0b0FkanVzdFxuICogQGRlc2NyaXB0aW9uIFNlcnZpY2UgdG8gYXV0by1hZGp1c3QgbGF5b3V0IHZhbHVlcyBiYXNlZCBvbiB0aGUgZXZlbnQgdHlwZSwgbnVtYmVyIG9mIHBhcnRpY2lwYW50cywgYW5kIHNoYXJpbmcgY29uZGl0aW9ucy4gVXNlZnVsIGZvciBkeW5hbWljYWxseSBhZGp1c3RpbmcgVUkgZWxlbWVudHMgaW4gZGlmZmVyZW50IGV2ZW50IHNldHRpbmdzLlxuICpcbiAqIEBtZXRob2QgYXV0b0FkanVzdFxuICogRHluYW1pY2FsbHkgY2FsY3VsYXRlcyBhbmQgYWRqdXN0cyBsYXlvdXQgdmFsdWVzIChlLmcuLCBncmlkIGNvbHVtbnMpIGJhc2VkIG9uIGNvbmRpdGlvbnMgc3VjaCBhcyBldmVudCB0eXBlLCBwYXJ0aWNpcGFudCBjb3VudCwgYW5kIHNoYXJpbmcgc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7QXV0b0FkanVzdE9wdGlvbnN9IG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBhdXRvLWFkanVzdG1lbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy5uIC0gTnVtYmVyIG9mIHBhcnRpY2lwYW50cyBpbiB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge0V2ZW50VHlwZX0gb3B0aW9ucy5ldmVudFR5cGUgLSBUeXBlIG9mIGV2ZW50IChlLmcuLCAnYnJvYWRjYXN0JywgJ2NoYXQnLCAnY29uZmVyZW5jZScpLlxuICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLnNoYXJlU2NyZWVuU3RhcnRlZCAtIEluZGljYXRlcyB3aGV0aGVyIHNjcmVlbiBzaGFyaW5nIGlzIGFjdGl2ZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5zaGFyZWQgLSBJbmRpY2F0ZXMgaWYgYW5vdGhlciByZXNvdXJjZSBpcyBjdXJyZW50bHkgc2hhcmVkLlxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlcltdPn0gQSBwcm9taXNlIHJlc29sdmluZyB0byBhbiBhcnJheSBvZiB0d28gYWRqdXN0ZWQgbGF5b3V0IHZhbHVlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgW3ByaW1hcnlMYXlvdXQsIHNlY29uZGFyeUxheW91dF0gPSBhd2FpdCBhdXRvQWRqdXN0U2VydmljZS5hdXRvQWRqdXN0KHtcbiAqICAgbjogNSxcbiAqICAgZXZlbnRUeXBlOiAnY29uZmVyZW5jZScsXG4gKiAgIHNoYXJlU2NyZWVuU3RhcnRlZDogZmFsc2UsXG4gKiAgIHNoYXJlZDogZmFsc2UsXG4gKiB9KTtcbiAqIGNvbnNvbGUubG9nKHByaW1hcnlMYXlvdXQsIHNlY29uZGFyeUxheW91dCk7IC8vIEFkanVzdGVkIGxheW91dCB2YWx1ZXMgYmFzZWQgb24gaW5wdXRzXG4gKiBgYGBcbiAqL1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRvQWRqdXN0IHtcbiAgLyoqXG4gICAqIEFkanVzdHMgdmFsdWVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0F1dG9BZGp1c3RPcHRpb25zfSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGF1dG8gYWRqdXN0bWVudC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMubiAtIFRoZSBudW1iZXIgb2YgcGFydGljaXBhbnRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5ldmVudFR5cGUgLSBUaGUgdHlwZSBvZiBldmVudCAoZS5nLiwgJ2Jyb2FkY2FzdCcsICdjaGF0JywgJ2NvbmZlcmVuY2UnKS5cbiAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLnNoYXJlU2NyZWVuU3RhcnRlZCAtIEluZGljYXRlcyBpZiBzY3JlZW4gc2hhcmluZyBoYXMgc3RhcnRlZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLnNoYXJlZCAtIEluZGljYXRlcyBpZiBzb21ldGhpbmcgaXMgc2hhcmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXJbXT59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGFkanVzdGVkIHZhbHVlcy5cbiAgICovXG4gIGFzeW5jIGF1dG9BZGp1c3Qoe1xuICAgIG4sXG4gICAgZXZlbnRUeXBlLFxuICAgIHNoYXJlU2NyZWVuU3RhcnRlZCxcbiAgICBzaGFyZWQsXG4gIH06IEF1dG9BZGp1c3RPcHRpb25zKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIC8vIERlZmF1bHQgdmFsdWVzXG4gICAgbGV0IHZhbDEgPSA2O1xuICAgIGxldCB2YWwyID0gMTIgLSB2YWwxO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHBlcmNlbnRhZ2UgdmFsdWVzXG5cbiAgICAvLyBBZGp1c3QgdmFsdWVzIGJhc2VkIG9uIGV2ZW50VHlwZSBhbmQgb3RoZXIgY29uZGl0aW9uc1xuICAgIGlmIChldmVudFR5cGUgPT09ICdicm9hZGNhc3QnKSB7XG4gICAgICB2YWwxID0gMDtcbiAgICAgIHZhbDIgPSAxMiAtIHZhbDE7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGV2ZW50VHlwZSA9PT0gJ2NoYXQnIHx8XG4gICAgICAoZXZlbnRUeXBlID09PSAnY29uZmVyZW5jZScgJiYgIShzaGFyZVNjcmVlblN0YXJ0ZWQgfHwgc2hhcmVkKSlcbiAgICApIHtcbiAgICAgIHZhbDEgPSAxMjtcbiAgICAgIHZhbDIgPSAxMiAtIHZhbDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzaGFyZVNjcmVlblN0YXJ0ZWQgfHwgc2hhcmVkKSB7XG4gICAgICAgIHZhbDIgPSAxMDtcbiAgICAgICAgdmFsMSA9IDEyIC0gdmFsMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFkanVzdCB2YWx1ZXMgYmFzZWQgb24gdGhlIG51bWJlciBvZiBwYXJ0aWNpcGFudHMgKG4pXG4gICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgdmFsMSA9IDE7XG4gICAgICAgICAgdmFsMiA9IDEyIC0gdmFsMTtcbiAgICAgICAgfSBlbHNlIGlmIChuID49IDEgJiYgbiA8IDQpIHtcbiAgICAgICAgICB2YWwxID0gNDtcbiAgICAgICAgICB2YWwyID0gMTIgLSB2YWwxO1xuICAgICAgICB9IGVsc2UgaWYgKG4gPj0gNCAmJiBuIDwgNikge1xuICAgICAgICAgIHZhbDEgPSA2O1xuICAgICAgICAgIHZhbDIgPSAxMiAtIHZhbDE7XG4gICAgICAgIH0gZWxzZSBpZiAobiA+PSA2ICYmIG4gPCA5KSB7XG4gICAgICAgICAgdmFsMSA9IDY7XG4gICAgICAgICAgdmFsMiA9IDEyIC0gdmFsMTtcbiAgICAgICAgfSBlbHNlIGlmIChuID49IDkgJiYgbiA8IDEyKSB7XG4gICAgICAgICAgdmFsMSA9IDY7XG4gICAgICAgICAgdmFsMiA9IDEyIC0gdmFsMTtcbiAgICAgICAgfSBlbHNlIGlmIChuID49IDEyICYmIG4gPCAyMCkge1xuICAgICAgICAgIHZhbDEgPSA4O1xuICAgICAgICAgIHZhbDIgPSAxMiAtIHZhbDE7XG4gICAgICAgIH0gZWxzZSBpZiAobiA+PSAyMCAmJiBuIDwgNTApIHtcbiAgICAgICAgICB2YWwxID0gODtcbiAgICAgICAgICB2YWwyID0gMTIgLSB2YWwxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbDEgPSAxMDtcbiAgICAgICAgICB2YWwyID0gMTIgLSB2YWwxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGFycmF5IHdpdGggYWRqdXN0ZWQgdmFsdWVzXG4gICAgcmV0dXJuIFt2YWwxLCB2YWwyXTtcbiAgfVxufVxuIl19
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
/**
|
|
4
|
-
* @service CalculateRowsAndColumns
|
|
5
|
-
* @description Service to calculate the optimal number of rows and columns needed to display a given number of items in a grid. Useful for dynamically determining grid layout in responsive designs.
|
|
6
|
-
*
|
|
7
|
-
* @method calculateRowsAndColumns
|
|
8
|
-
* Calculates the optimal number of rows and columns to display a specified number of items in a compact grid format.
|
|
9
|
-
*
|
|
10
|
-
* @param {CalculateRowsAndColumnsOptions} options - Configuration options for row and column calculation.
|
|
11
|
-
* @param {number} options.n - The number of items to display in the grid.
|
|
12
|
-
*
|
|
13
|
-
* @returns {[number, number]} A tuple where the first value is the number of rows and the second is the number of columns.
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```typescript
|
|
17
|
-
* const [rows, cols] = calculateRowsAndColumnsService.calculateRowsAndColumns({ n: 10 });
|
|
18
|
-
* console.log(rows, cols); // Outputs optimized rows and columns for displaying 10 items
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
|
-
export class CalculateRowsAndColumns {
|
|
22
|
-
/**
|
|
23
|
-
* Calculates the number of rows and columns needed to display a given number of items in a grid.
|
|
24
|
-
*
|
|
25
|
-
* @param {CalculateRowsAndColumnsOptions} options - The options for calculating rows and columns.
|
|
26
|
-
* @param {number} options.n - The number of items to display.
|
|
27
|
-
* @returns {[number, number]} A tuple containing the number of rows and columns.
|
|
28
|
-
*/
|
|
29
|
-
calculateRowsAndColumns({ n }) {
|
|
30
|
-
// Calculate the square root of n
|
|
31
|
-
const sqrt = Math.sqrt(n);
|
|
32
|
-
// Initialize columns based on the floor of the square root
|
|
33
|
-
let cols = Math.floor(sqrt);
|
|
34
|
-
// Calculate the number of rows needed to display n videos
|
|
35
|
-
let rows = Math.ceil(n / cols);
|
|
36
|
-
// Calculate the product of rows and columns
|
|
37
|
-
let prod = rows * cols;
|
|
38
|
-
// Adjust rows and columns until the product is greater than or equal to n
|
|
39
|
-
while (prod < n) {
|
|
40
|
-
if (cols < rows) {
|
|
41
|
-
cols++;
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
rows++;
|
|
45
|
-
}
|
|
46
|
-
prod = rows * cols;
|
|
47
|
-
}
|
|
48
|
-
// Return an array with the calculated number of rows and columns
|
|
49
|
-
return [rows, cols];
|
|
50
|
-
}
|
|
51
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CalculateRowsAndColumns, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
52
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CalculateRowsAndColumns, providedIn: 'root' });
|
|
53
|
-
}
|
|
54
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CalculateRowsAndColumns, decorators: [{
|
|
55
|
-
type: Injectable,
|
|
56
|
-
args: [{
|
|
57
|
-
providedIn: 'root',
|
|
58
|
-
}]
|
|
59
|
-
}] });
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlLXJvd3MtYW5kLWNvbHVtbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9jb25zdW1lcnMvY2FsY3VsYXRlLXJvd3MtYW5kLWNvbHVtbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVczQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFNSCxNQUFNLE9BQU8sdUJBQXVCO0lBQ2xDOzs7Ozs7T0FNRztJQUNILHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxFQUFrQztRQUMzRCxpQ0FBaUM7UUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxQiwyREFBMkQ7UUFDM0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1QiwwREFBMEQ7UUFDMUQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFFL0IsNENBQTRDO1FBQzVDLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7UUFFdkIsMEVBQTBFO1FBQzFFLE9BQU8sSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hCLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO2dCQUNoQixJQUFJLEVBQUUsQ0FBQztZQUNULENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLEVBQUUsQ0FBQztZQUNULENBQUM7WUFDRCxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNyQixDQUFDO1FBRUQsaUVBQWlFO1FBQ2pFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQzt1R0FqQ1UsdUJBQXVCOzJHQUF2Qix1QkFBdUIsY0FGdEIsTUFBTTs7MkZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBDYWxjdWxhdGVSb3dzQW5kQ29sdW1uc09wdGlvbnMge1xuICBuOiBudW1iZXI7XG59XG5cbi8vIEV4cG9ydCB0aGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgZnVuY3Rpb25cbmV4cG9ydCB0eXBlIENhbGN1bGF0ZVJvd3NBbmRDb2x1bW5zVHlwZSA9IChcbiAgb3B0aW9uczogQ2FsY3VsYXRlUm93c0FuZENvbHVtbnNPcHRpb25zLFxuKSA9PiBbbnVtYmVyLCBudW1iZXJdO1xuXG4vKipcbiAqIEBzZXJ2aWNlIENhbGN1bGF0ZVJvd3NBbmRDb2x1bW5zXG4gKiBAZGVzY3JpcHRpb24gU2VydmljZSB0byBjYWxjdWxhdGUgdGhlIG9wdGltYWwgbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMgbmVlZGVkIHRvIGRpc3BsYXkgYSBnaXZlbiBudW1iZXIgb2YgaXRlbXMgaW4gYSBncmlkLiBVc2VmdWwgZm9yIGR5bmFtaWNhbGx5IGRldGVybWluaW5nIGdyaWQgbGF5b3V0IGluIHJlc3BvbnNpdmUgZGVzaWducy5cbiAqXG4gKiBAbWV0aG9kIGNhbGN1bGF0ZVJvd3NBbmRDb2x1bW5zXG4gKiBDYWxjdWxhdGVzIHRoZSBvcHRpbWFsIG51bWJlciBvZiByb3dzIGFuZCBjb2x1bW5zIHRvIGRpc3BsYXkgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGl0ZW1zIGluIGEgY29tcGFjdCBncmlkIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0ge0NhbGN1bGF0ZVJvd3NBbmRDb2x1bW5zT3B0aW9uc30gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3Igcm93IGFuZCBjb2x1bW4gY2FsY3VsYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy5uIC0gVGhlIG51bWJlciBvZiBpdGVtcyB0byBkaXNwbGF5IGluIHRoZSBncmlkLlxuICpcbiAqIEByZXR1cm5zIHtbbnVtYmVyLCBudW1iZXJdfSBBIHR1cGxlIHdoZXJlIHRoZSBmaXJzdCB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHJvd3MgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIG51bWJlciBvZiBjb2x1bW5zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBbcm93cywgY29sc10gPSBjYWxjdWxhdGVSb3dzQW5kQ29sdW1uc1NlcnZpY2UuY2FsY3VsYXRlUm93c0FuZENvbHVtbnMoeyBuOiAxMCB9KTtcbiAqIGNvbnNvbGUubG9nKHJvd3MsIGNvbHMpOyAvLyBPdXRwdXRzIG9wdGltaXplZCByb3dzIGFuZCBjb2x1bW5zIGZvciBkaXNwbGF5aW5nIDEwIGl0ZW1zXG4gKiBgYGBcbiAqL1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDYWxjdWxhdGVSb3dzQW5kQ29sdW1ucyB7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucyBuZWVkZWQgdG8gZGlzcGxheSBhIGdpdmVuIG51bWJlciBvZiBpdGVtcyBpbiBhIGdyaWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FsY3VsYXRlUm93c0FuZENvbHVtbnNPcHRpb25zfSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIGNhbGN1bGF0aW5nIHJvd3MgYW5kIGNvbHVtbnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLm4gLSBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGRpc3BsYXkuXG4gICAqIEByZXR1cm5zIHtbbnVtYmVyLCBudW1iZXJdfSBBIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiByb3dzIGFuZCBjb2x1bW5zLlxuICAgKi9cbiAgY2FsY3VsYXRlUm93c0FuZENvbHVtbnMoeyBuIH06IENhbGN1bGF0ZVJvd3NBbmRDb2x1bW5zT3B0aW9ucyk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgIC8vIENhbGN1bGF0ZSB0aGUgc3F1YXJlIHJvb3Qgb2YgblxuICAgIGNvbnN0IHNxcnQgPSBNYXRoLnNxcnQobik7XG5cbiAgICAvLyBJbml0aWFsaXplIGNvbHVtbnMgYmFzZWQgb24gdGhlIGZsb29yIG9mIHRoZSBzcXVhcmUgcm9vdFxuICAgIGxldCBjb2xzID0gTWF0aC5mbG9vcihzcXJ0KTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHJvd3MgbmVlZGVkIHRvIGRpc3BsYXkgbiB2aWRlb3NcbiAgICBsZXQgcm93cyA9IE1hdGguY2VpbChuIC8gY29scyk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIHByb2R1Y3Qgb2Ygcm93cyBhbmQgY29sdW1uc1xuICAgIGxldCBwcm9kID0gcm93cyAqIGNvbHM7XG5cbiAgICAvLyBBZGp1c3Qgcm93cyBhbmQgY29sdW1ucyB1bnRpbCB0aGUgcHJvZHVjdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gblxuICAgIHdoaWxlIChwcm9kIDwgbikge1xuICAgICAgaWYgKGNvbHMgPCByb3dzKSB7XG4gICAgICAgIGNvbHMrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvd3MrKztcbiAgICAgIH1cbiAgICAgIHByb2QgPSByb3dzICogY29scztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gYXJyYXkgd2l0aCB0aGUgY2FsY3VsYXRlZCBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1uc1xuICAgIHJldHVybiBbcm93cywgY29sc107XG4gIH1cbn1cbiJdfQ==
|