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
package/dist/esm2022/lib/components/display-components/flexible-video/flexible-video.component.mjs
DELETED
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Injector } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/common";
|
|
5
|
-
/**
|
|
6
|
-
* FlexibleVideo component displays a customizable video grid, supporting dynamic layout and optional screenboard overlay.
|
|
7
|
-
*
|
|
8
|
-
* @selector app-flexible-video
|
|
9
|
-
* @standalone true
|
|
10
|
-
* @imports CommonModule
|
|
11
|
-
*
|
|
12
|
-
* @inputs
|
|
13
|
-
* - `customWidth` (number): The custom width for each video grid item in pixels. Default is 0.
|
|
14
|
-
* - `customHeight` (number): The custom height for each video grid item in pixels. Default is 0.
|
|
15
|
-
* - `rows` (number): Number of rows in the video grid. Default is 0.
|
|
16
|
-
* - `columns` (number): Number of columns in the video grid. Default is 0.
|
|
17
|
-
* - `componentsToRender` (CustomMediaComponent[]): Array of components to render in the grid.
|
|
18
|
-
* - `showAspect` (boolean): Flag to control aspect ratio display. Default is false.
|
|
19
|
-
* - `backgroundColor` (string): Background color for the video grid. Default is 'transparent'.
|
|
20
|
-
* - `Screenboard` (CustomMediaComponent): Optional screenboard component to overlay on the grid.
|
|
21
|
-
* - `annotateScreenStream` (boolean): Flag to annotate the screen stream. Default is false.
|
|
22
|
-
* - `localStreamScreen` (MediaStream): Local screen stream for video.
|
|
23
|
-
*
|
|
24
|
-
* @methods
|
|
25
|
-
* - `ngOnInit()`: Initializes and generates the grid on component load if `showAspect` is true.
|
|
26
|
-
* - `ngOnChanges(changes: SimpleChanges)`: Updates grid layout and dimensions if properties change.
|
|
27
|
-
* - `generateGrid()`: Generates grid structure based on rows, columns, and `componentsToRender`.
|
|
28
|
-
* - `createInjector(inputs: any)`: Creates and caches an injector for component inputs.
|
|
29
|
-
*
|
|
30
|
-
* @example
|
|
31
|
-
* ```html
|
|
32
|
-
* <app-flexible-video
|
|
33
|
-
* [customWidth]="300"
|
|
34
|
-
* [customHeight]="200"
|
|
35
|
-
* [rows]="2"
|
|
36
|
-
* [columns]="3"
|
|
37
|
-
* [componentsToRender]="[{ component: VideoComponent, inputs: { stream: videoStream } }]"
|
|
38
|
-
* showAspect="true"
|
|
39
|
-
* [Screenboard]="{ component: ScreenOverlayComponent, inputs: { overlayData: data } }"
|
|
40
|
-
* ></app-flexible-video>
|
|
41
|
-
* ```
|
|
42
|
-
**/
|
|
43
|
-
export class FlexibleVideo {
|
|
44
|
-
injector;
|
|
45
|
-
customWidth = 0;
|
|
46
|
-
customHeight = 0;
|
|
47
|
-
rows = 0;
|
|
48
|
-
columns = 0;
|
|
49
|
-
componentsToRender = [];
|
|
50
|
-
showAspect = false;
|
|
51
|
-
backgroundColor = 'transparent';
|
|
52
|
-
Screenboard;
|
|
53
|
-
annotateScreenStream = false;
|
|
54
|
-
localStreamScreen;
|
|
55
|
-
key = 0;
|
|
56
|
-
cardWidth = 0;
|
|
57
|
-
cardHeight = 0;
|
|
58
|
-
cardTop = 0;
|
|
59
|
-
cardLeft = 0;
|
|
60
|
-
canvasLeft = 0;
|
|
61
|
-
grid = [];
|
|
62
|
-
injectorCache = new WeakMap();
|
|
63
|
-
constructor(injector) {
|
|
64
|
-
this.injector = injector;
|
|
65
|
-
}
|
|
66
|
-
ngOnInit() {
|
|
67
|
-
if (this.showAspect) {
|
|
68
|
-
this.generateGrid();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
ngOnChanges(changes) {
|
|
72
|
-
if (changes['columns'] ||
|
|
73
|
-
changes['rows'] ||
|
|
74
|
-
changes['componentsToRender'] ||
|
|
75
|
-
changes['customWidth'] ||
|
|
76
|
-
changes['customHeight']) {
|
|
77
|
-
if (this.showAspect) {
|
|
78
|
-
this.key++;
|
|
79
|
-
this.generateGrid();
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
if (this.annotateScreenStream && this.localStreamScreen) {
|
|
83
|
-
const videoHeight = this.localStreamScreen.getVideoTracks()[0].getSettings().height || 0;
|
|
84
|
-
const videoWidth = this.localStreamScreen.getVideoTracks()[0].getSettings().width || 0;
|
|
85
|
-
this.cardWidth = videoWidth;
|
|
86
|
-
this.cardHeight = videoHeight;
|
|
87
|
-
this.cardTop = Math.floor((this.customHeight - videoHeight) / 2);
|
|
88
|
-
this.cardLeft = Math.floor((this.customWidth - videoWidth) / 2);
|
|
89
|
-
this.canvasLeft = this.cardLeft < 0 ? this.cardLeft : 0;
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
this.cardWidth = this.customWidth;
|
|
93
|
-
this.cardHeight = this.customHeight;
|
|
94
|
-
this.cardTop = 0;
|
|
95
|
-
this.cardLeft = 0;
|
|
96
|
-
this.canvasLeft = 0;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
generateGrid() {
|
|
100
|
-
this.grid = [];
|
|
101
|
-
for (let row = 0; row < this.rows; row++) {
|
|
102
|
-
const rowComponents = [];
|
|
103
|
-
for (let col = 0; col < this.columns; col++) {
|
|
104
|
-
const index = row * this.columns + col;
|
|
105
|
-
const component = this.componentsToRender[index];
|
|
106
|
-
rowComponents.push(component);
|
|
107
|
-
}
|
|
108
|
-
this.grid.push(rowComponents);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
createInjector(inputs) {
|
|
112
|
-
if (!this.injectorCache.has(inputs)) {
|
|
113
|
-
const injector = Injector.create({
|
|
114
|
-
providers: Object.keys(inputs).map((key) => ({ provide: key, useValue: inputs[key] })),
|
|
115
|
-
parent: this.injector,
|
|
116
|
-
});
|
|
117
|
-
this.injectorCache.set(inputs, injector);
|
|
118
|
-
}
|
|
119
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
120
|
-
return this.injectorCache.get(inputs);
|
|
121
|
-
}
|
|
122
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FlexibleVideo, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
123
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: FlexibleVideo, isStandalone: true, selector: "app-flexible-video", inputs: { customWidth: "customWidth", customHeight: "customHeight", rows: "rows", columns: "columns", componentsToRender: "componentsToRender", showAspect: "showAspect", backgroundColor: "backgroundColor", Screenboard: "Screenboard", annotateScreenStream: "annotateScreenStream", localStreamScreen: "localStreamScreen" }, usesOnChanges: true, ngImport: i0, template: `
|
|
124
|
-
<div
|
|
125
|
-
style="padding: 0; flex: 1; margin: 0; position: relative; display: {{
|
|
126
|
-
showAspect ? 'flex' : 'none'
|
|
127
|
-
}};
|
|
128
|
-
max-width: {{ customWidth }}px; overflow-x: hidden; overflow-y: auto; left: {{
|
|
129
|
-
cardLeft > 0 ? cardLeft : 0
|
|
130
|
-
}}px;"
|
|
131
|
-
>
|
|
132
|
-
<div
|
|
133
|
-
*ngFor="let rowComponents of grid; let rowIndex = index"
|
|
134
|
-
style="display: flex; flex-direction: row;"
|
|
135
|
-
>
|
|
136
|
-
<div
|
|
137
|
-
*ngFor="let component of rowComponents; let colIndex = index"
|
|
138
|
-
[ngStyle]="{
|
|
139
|
-
flex: 1,
|
|
140
|
-
width: cardWidth + 'px',
|
|
141
|
-
height: cardHeight + 'px',
|
|
142
|
-
backgroundColor: backgroundColor,
|
|
143
|
-
margin: '1px',
|
|
144
|
-
padding: 0,
|
|
145
|
-
borderRadius: '0px',
|
|
146
|
-
left: cardLeft + 'px'
|
|
147
|
-
}"
|
|
148
|
-
>
|
|
149
|
-
<ng-container
|
|
150
|
-
*ngComponentOutlet="component.component; injector: createInjector(component.inputs)"
|
|
151
|
-
></ng-container>
|
|
152
|
-
</div>
|
|
153
|
-
</div>
|
|
154
|
-
<div
|
|
155
|
-
*ngIf="Screenboard && Screenboard.component"
|
|
156
|
-
[ngStyle]="{
|
|
157
|
-
position: 'absolute',
|
|
158
|
-
top: '0',
|
|
159
|
-
left: canvasLeft + 'px',
|
|
160
|
-
width: cardWidth + 'px',
|
|
161
|
-
height: cardHeight + 'px',
|
|
162
|
-
backgroundColor: 'rgba(0, 0, 0, 0.005)',
|
|
163
|
-
zIndex: '2'
|
|
164
|
-
}"
|
|
165
|
-
>
|
|
166
|
-
<ng-container
|
|
167
|
-
*ngComponentOutlet="Screenboard.component; injector: createInjector(Screenboard.inputs)"
|
|
168
|
-
></ng-container>
|
|
169
|
-
</div>
|
|
170
|
-
</div>
|
|
171
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { 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"] }] });
|
|
172
|
-
}
|
|
173
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FlexibleVideo, decorators: [{
|
|
174
|
-
type: Component,
|
|
175
|
-
args: [{
|
|
176
|
-
selector: 'app-flexible-video',
|
|
177
|
-
standalone: true,
|
|
178
|
-
imports: [CommonModule],
|
|
179
|
-
template: `
|
|
180
|
-
<div
|
|
181
|
-
style="padding: 0; flex: 1; margin: 0; position: relative; display: {{
|
|
182
|
-
showAspect ? 'flex' : 'none'
|
|
183
|
-
}};
|
|
184
|
-
max-width: {{ customWidth }}px; overflow-x: hidden; overflow-y: auto; left: {{
|
|
185
|
-
cardLeft > 0 ? cardLeft : 0
|
|
186
|
-
}}px;"
|
|
187
|
-
>
|
|
188
|
-
<div
|
|
189
|
-
*ngFor="let rowComponents of grid; let rowIndex = index"
|
|
190
|
-
style="display: flex; flex-direction: row;"
|
|
191
|
-
>
|
|
192
|
-
<div
|
|
193
|
-
*ngFor="let component of rowComponents; let colIndex = index"
|
|
194
|
-
[ngStyle]="{
|
|
195
|
-
flex: 1,
|
|
196
|
-
width: cardWidth + 'px',
|
|
197
|
-
height: cardHeight + 'px',
|
|
198
|
-
backgroundColor: backgroundColor,
|
|
199
|
-
margin: '1px',
|
|
200
|
-
padding: 0,
|
|
201
|
-
borderRadius: '0px',
|
|
202
|
-
left: cardLeft + 'px'
|
|
203
|
-
}"
|
|
204
|
-
>
|
|
205
|
-
<ng-container
|
|
206
|
-
*ngComponentOutlet="component.component; injector: createInjector(component.inputs)"
|
|
207
|
-
></ng-container>
|
|
208
|
-
</div>
|
|
209
|
-
</div>
|
|
210
|
-
<div
|
|
211
|
-
*ngIf="Screenboard && Screenboard.component"
|
|
212
|
-
[ngStyle]="{
|
|
213
|
-
position: 'absolute',
|
|
214
|
-
top: '0',
|
|
215
|
-
left: canvasLeft + 'px',
|
|
216
|
-
width: cardWidth + 'px',
|
|
217
|
-
height: cardHeight + 'px',
|
|
218
|
-
backgroundColor: 'rgba(0, 0, 0, 0.005)',
|
|
219
|
-
zIndex: '2'
|
|
220
|
-
}"
|
|
221
|
-
>
|
|
222
|
-
<ng-container
|
|
223
|
-
*ngComponentOutlet="Screenboard.component; injector: createInjector(Screenboard.inputs)"
|
|
224
|
-
></ng-container>
|
|
225
|
-
</div>
|
|
226
|
-
</div>
|
|
227
|
-
`,
|
|
228
|
-
}]
|
|
229
|
-
}], ctorParameters: () => [{ type: i0.Injector }], propDecorators: { customWidth: [{
|
|
230
|
-
type: Input
|
|
231
|
-
}], customHeight: [{
|
|
232
|
-
type: Input
|
|
233
|
-
}], rows: [{
|
|
234
|
-
type: Input
|
|
235
|
-
}], columns: [{
|
|
236
|
-
type: Input
|
|
237
|
-
}], componentsToRender: [{
|
|
238
|
-
type: Input
|
|
239
|
-
}], showAspect: [{
|
|
240
|
-
type: Input
|
|
241
|
-
}], backgroundColor: [{
|
|
242
|
-
type: Input
|
|
243
|
-
}], Screenboard: [{
|
|
244
|
-
type: Input
|
|
245
|
-
}], annotateScreenStream: [{
|
|
246
|
-
type: Input
|
|
247
|
-
}], localStreamScreen: [{
|
|
248
|
-
type: Input
|
|
249
|
-
}] } });
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxleGlibGUtdmlkZW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWFzZnUtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvZGlzcGxheS1jb21wb25lbnRzL2ZsZXhpYmxlLXZpZGVvL2ZsZXhpYmxlLXZpZGVvLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBb0MsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBaUIvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQXFDSTtBQXlESixNQUFNLE9BQU8sYUFBYTtJQXNCSjtJQXJCWCxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDakIsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNULE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDWixrQkFBa0IsR0FBMkIsRUFBRSxDQUFDO0lBQ2hELFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsZUFBZSxHQUFZLGFBQWEsQ0FBQztJQUN6QyxXQUFXLENBQXdCO0lBQ25DLG9CQUFvQixHQUFhLEtBQUssQ0FBQztJQUN2QyxpQkFBaUIsQ0FBZTtJQUV6QyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1IsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDZixPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ1osUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNiLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLEdBQVksRUFBRSxDQUFDO0lBRVgsYUFBYSxHQUFHLElBQUksT0FBTyxFQUFpQixDQUFDO0lBRXJELFlBQW9CLFFBQWtCO1FBQWxCLGFBQVEs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QUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDdXN0b21NZWRpYUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL0B0eXBlcy90eXBlcyc7XG5leHBvcnQgaW50ZXJmYWNlIEZsZXhpYmxlVmlkZW9PcHRpb25zIHtcbiAgY3VzdG9tV2lkdGg6IG51bWJlcjtcbiAgY3VzdG9tSGVpZ2h0OiBudW1iZXI7XG4gIHJvd3M6IG51bWJlcjtcbiAgY29sdW1uczogbnVtYmVyO1xuICBjb21wb25lbnRzVG9SZW5kZXI6IEN1c3RvbU1lZGlhQ29tcG9uZW50W107XG4gIHNob3dBc3BlY3Q/OiBib29sZWFuO1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIFNjcmVlbmJvYXJkPzogQ3VzdG9tTWVkaWFDb21wb25lbnQ7XG4gIGFubm90YXRlU2NyZWVuU3RyZWFtPzogYm9vbGVhbjtcbiAgbG9jYWxTdHJlYW1TY3JlZW46IE1lZGlhU3RyZWFtIHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgRmxleGlibGVWaWRlb1R5cGUgPSAob3B0aW9uczogRmxleGlibGVWaWRlb09wdGlvbnMpID0+IEhUTUxFbGVtZW50O1xuXG4vKipcbiAqIEZsZXhpYmxlVmlkZW8gY29tcG9uZW50IGRpc3BsYXlzIGEgY3VzdG9taXphYmxlIHZpZGVvIGdyaWQsIHN1cHBvcnRpbmcgZHluYW1pYyBsYXlvdXQgYW5kIG9wdGlvbmFsIHNjcmVlbmJvYXJkIG92ZXJsYXkuXG4gKlxuICogQHNlbGVjdG9yIGFwcC1mbGV4aWJsZS12aWRlb1xuICogQHN0YW5kYWxvbmUgdHJ1ZVxuICogQGltcG9ydHMgQ29tbW9uTW9kdWxlXG4gKlxuICogQGlucHV0c1xuICogLSBgY3VzdG9tV2lkdGhgIChudW1iZXIpOiBUaGUgY3VzdG9tIHdpZHRoIGZvciBlYWNoIHZpZGVvIGdyaWQgaXRlbSBpbiBwaXhlbHMuIERlZmF1bHQgaXMgMC5cbiAqIC0gYGN1c3RvbUhlaWdodGAgKG51bWJlcik6IFRoZSBjdXN0b20gaGVpZ2h0IGZvciBlYWNoIHZpZGVvIGdyaWQgaXRlbSBpbiBwaXhlbHMuIERlZmF1bHQgaXMgMC5cbiAqIC0gYHJvd3NgIChudW1iZXIpOiBOdW1iZXIgb2Ygcm93cyBpbiB0aGUgdmlkZW8gZ3JpZC4gRGVmYXVsdCBpcyAwLlxuICogLSBgY29sdW1uc2AgKG51bWJlcik6IE51bWJlciBvZiBjb2x1bW5zIGluIHRoZSB2aWRlbyBncmlkLiBEZWZhdWx0IGlzIDAuXG4gKiAtIGBjb21wb25lbnRzVG9SZW5kZXJgIChDdXN0b21NZWRpYUNvbXBvbmVudFtdKTogQXJyYXkgb2YgY29tcG9uZW50cyB0byByZW5kZXIgaW4gdGhlIGdyaWQuXG4gKiAtIGBzaG93QXNwZWN0YCAoYm9vbGVhbik6IEZsYWcgdG8gY29udHJvbCBhc3BlY3QgcmF0aW8gZGlzcGxheS4gRGVmYXVsdCBpcyBmYWxzZS5cbiAqIC0gYGJhY2tncm91bmRDb2xvcmAgKHN0cmluZyk6IEJhY2tncm91bmQgY29sb3IgZm9yIHRoZSB2aWRlbyBncmlkLiBEZWZhdWx0IGlzICd0cmFuc3BhcmVudCcuXG4gKiAtIGBTY3JlZW5ib2FyZGAgKEN1c3RvbU1lZGlhQ29tcG9uZW50KTogT3B0aW9uYWwgc2NyZWVuYm9hcmQgY29tcG9uZW50IHRvIG92ZXJsYXkgb24gdGhlIGdyaWQuXG4gKiAtIGBhbm5vdGF0ZVNjcmVlblN0cmVhbWAgKGJvb2xlYW4pOiBGbGFnIHRvIGFubm90YXRlIHRoZSBzY3JlZW4gc3RyZWFtLiBEZWZhdWx0IGlzIGZhbHNlLlxuICogLSBgbG9jYWxTdHJlYW1TY3JlZW5gIChNZWRpYVN0cmVhbSk6IExvY2FsIHNjcmVlbiBzdHJlYW0gZm9yIHZpZGVvLlxuICpcbiAqIEBtZXRob2RzXG4gKiAtIGBuZ09uSW5pdCgpYDogSW5pdGlhbGl6ZXMgYW5kIGdlbmVyYXRlcyB0aGUgZ3JpZCBvbiBjb21wb25lbnQgbG9hZCBpZiBgc2hvd0FzcGVjdGAgaXMgdHJ1ZS5cbiAqIC0gYG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpYDogVXBkYXRlcyBncmlkIGxheW91dCBhbmQgZGltZW5zaW9ucyBpZiBwcm9wZXJ0aWVzIGNoYW5nZS5cbiAqIC0gYGdlbmVyYXRlR3JpZCgpYDogR2VuZXJhdGVzIGdyaWQgc3RydWN0dXJlIGJhc2VkIG9uIHJvd3MsIGNvbHVtbnMsIGFuZCBgY29tcG9uZW50c1RvUmVuZGVyYC5cbiAqIC0gYGNyZWF0ZUluamVjdG9yKGlucHV0czogYW55KWA6IENyZWF0ZXMgYW5kIGNhY2hlcyBhbiBpbmplY3RvciBmb3IgY29tcG9uZW50IGlucHV0cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGFwcC1mbGV4aWJsZS12aWRlb1xuICogICBbY3VzdG9tV2lkdGhdPVwiMzAwXCJcbiAqICAgW2N1c3RvbUhlaWdodF09XCIyMDBcIlxuICogICBbcm93c109XCIyXCJcbiAqICAgW2NvbHVtbnNdPVwiM1wiXG4gKiAgIFtjb21wb25lbnRzVG9SZW5kZXJdPVwiW3sgY29tcG9uZW50OiBWaWRlb0NvbXBvbmVudCwgaW5wdXRzOiB7IHN0cmVhbTogdmlkZW9TdHJlYW0gfSB9XVwiXG4gKiAgIHNob3dBc3BlY3Q9XCJ0cnVlXCJcbiAqICAgW1NjcmVlbmJvYXJkXT1cInsgY29tcG9uZW50OiBTY3JlZW5PdmVybGF5Q29tcG9uZW50LCBpbnB1dHM6IHsgb3ZlcmxheURhdGE6IGRhdGEgfSB9XCJcbiAqID48L2FwcC1mbGV4aWJsZS12aWRlbz5cbiAqIGBgYFxuICoqL1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1mbGV4aWJsZS12aWRlbycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIHN0eWxlPVwicGFkZGluZzogMDsgZmxleDogMTsgbWFyZ2luOiAwOyBwb3NpdGlvbjogcmVsYXRpdmU7IGRpc3BsYXk6IHt7XG4gICAgICAgIHNob3dBc3BlY3QgPyAnZmxleCcgOiAnbm9uZSdcbiAgICAgIH19O1xuICAgICAgICAgICAgIG1heC13aWR0aDoge3sgY3VzdG9tV2lkdGggfX1weDsgb3ZlcmZsb3cteDogaGlkZGVuOyBvdmVyZmxvdy15OiBhdXRvOyBsZWZ0OiB7e1xuICAgICAgICBjYXJkTGVmdCA+IDAgPyBjYXJkTGVmdCA6IDBcbiAgICAgIH19cHg7XCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCByb3dDb21wb25lbnRzIG9mIGdyaWQ7IGxldCByb3dJbmRleCA9IGluZGV4XCJcbiAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93O1wiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29tcG9uZW50IG9mIHJvd0NvbXBvbmVudHM7IGxldCBjb2xJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICBmbGV4OiAxLFxuICAgICAgICAgICAgd2lkdGg6IGNhcmRXaWR0aCArICdweCcsXG4gICAgICAgICAgICBoZWlnaHQ6IGNhcmRIZWlnaHQgKyAncHgnLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICBtYXJnaW46ICcxcHgnLFxuICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzBweCcsXG4gICAgICAgICAgICBsZWZ0OiBjYXJkTGVmdCArICdweCdcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0NvbXBvbmVudE91dGxldD1cImNvbXBvbmVudC5jb21wb25lbnQ7IGluamVjdG9yOiBjcmVhdGVJbmplY3Rvcihjb21wb25lbnQuaW5wdXRzKVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlNjcmVlbmJvYXJkICYmIFNjcmVlbmJvYXJkLmNvbXBvbmVudFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICB0b3A6ICcwJyxcbiAgICAgICAgICBsZWZ0OiBjYW52YXNMZWZ0ICsgJ3B4JyxcbiAgICAgICAgICB3aWR0aDogY2FyZFdpZHRoICsgJ3B4JyxcbiAgICAgICAgICBoZWlnaHQ6IGNhcmRIZWlnaHQgKyAncHgnLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC4wMDUpJyxcbiAgICAgICAgICB6SW5kZXg6ICcyJ1xuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0NvbXBvbmVudE91dGxldD1cIlNjcmVlbmJvYXJkLmNvbXBvbmVudDsgaW5qZWN0b3I6IGNyZWF0ZUluamVjdG9yKFNjcmVlbmJvYXJkLmlucHV0cylcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgRmxleGlibGVWaWRlbyBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY3VzdG9tV2lkdGggPSAwO1xuICBASW5wdXQoKSBjdXN0b21IZWlnaHQgPSAwO1xuICBASW5wdXQoKSByb3dzID0gMDtcbiAgQElucHV0KCkgY29sdW1ucyA9IDA7XG4gIEBJbnB1dCgpIGNvbXBvbmVudHNUb1JlbmRlcjogQ3VzdG9tTWVkaWFDb21wb25lbnRbXSA9IFtdO1xuICBASW5wdXQoKSBzaG93QXNwZWN0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGJhY2tncm91bmRDb2xvcj86IHN0cmluZyA9ICd0cmFuc3BhcmVudCc7XG4gIEBJbnB1dCgpIFNjcmVlbmJvYXJkPzogQ3VzdG9tTWVkaWFDb21wb25lbnQ7XG4gIEBJbnB1dCgpIGFubm90YXRlU2NyZWVuU3RyZWFtPzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBsb2NhbFN0cmVhbVNjcmVlbj86IE1lZGlhU3RyZWFtO1xuXG4gIGtleSA9IDA7XG4gIGNhcmRXaWR0aCA9IDA7XG4gIGNhcmRIZWlnaHQgPSAwO1xuICBjYXJkVG9wID0gMDtcbiAgY2FyZExlZnQgPSAwO1xuICBjYW52YXNMZWZ0ID0gMDtcbiAgZ3JpZDogYW55W11bXSA9IFtdO1xuXG4gIHByaXZhdGUgaW5qZWN0b3JDYWNoZSA9IG5ldyBXZWFrTWFwPGFueSwgSW5qZWN0b3I+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuc2hvd0FzcGVjdCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUdyaWQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1snY29sdW1ucyddIHx8XG4gICAgICBjaGFuZ2VzWydyb3dzJ10gfHxcbiAgICAgIGNoYW5nZXNbJ2NvbXBvbmVudHNUb1JlbmRlciddIHx8XG4gICAgICBjaGFuZ2VzWydjdXN0b21XaWR0aCddIHx8XG4gICAgICBjaGFuZ2VzWydjdXN0b21IZWlnaHQnXVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuc2hvd0FzcGVjdCkge1xuICAgICAgICB0aGlzLmtleSsrO1xuICAgICAgICB0aGlzLmdlbmVyYXRlR3JpZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFubm90YXRlU2NyZWVuU3RyZWFtICYmIHRoaXMubG9jYWxTdHJlYW1TY3JlZW4pIHtcbiAgICAgIGNvbnN0IHZpZGVvSGVpZ2h0ID0gdGhpcy5sb2NhbFN0cmVhbVNjcmVlbi5nZXRWaWRlb1RyYWNrcygpWzBdLmdldFNldHRpbmdzKCkuaGVpZ2h0IHx8IDA7XG4gICAgICBjb25zdCB2aWRlb1dpZHRoID0gdGhpcy5sb2NhbFN0cmVhbVNjcmVlbi5nZXRWaWRlb1RyYWNrcygpWzBdLmdldFNldHRpbmdzKCkud2lkdGggfHwgMDtcbiAgICAgIHRoaXMuY2FyZFdpZHRoID0gdmlkZW9XaWR0aDtcbiAgICAgIHRoaXMuY2FyZEhlaWdodCA9IHZpZGVvSGVpZ2h0O1xuICAgICAgdGhpcy5jYXJkVG9wID0gTWF0aC5mbG9vcigodGhpcy5jdXN0b21IZWlnaHQgLSB2aWRlb0hlaWdodCkgLyAyKTtcbiAgICAgIHRoaXMuY2FyZExlZnQgPSBNYXRoLmZsb29yKCh0aGlzLmN1c3RvbVdpZHRoIC0gdmlkZW9XaWR0aCkgLyAyKTtcbiAgICAgIHRoaXMuY2FudmFzTGVmdCA9IHRoaXMuY2FyZExlZnQgPCAwID8gdGhpcy5jYXJkTGVmdCA6IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FyZFdpZHRoID0gdGhpcy5jdXN0b21XaWR0aDtcbiAgICAgIHRoaXMuY2FyZEhlaWdodCA9IHRoaXMuY3VzdG9tSGVpZ2h0O1xuICAgICAgdGhpcy5jYXJkVG9wID0gMDtcbiAgICAgIHRoaXMuY2FyZExlZnQgPSAwO1xuICAgICAgdGhpcy5jYW52YXNMZWZ0ID0gMDtcbiAgICB9XG4gIH1cblxuICBnZW5lcmF0ZUdyaWQoKSB7XG4gICAgdGhpcy5ncmlkID0gW107XG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdGhpcy5yb3dzOyByb3crKykge1xuICAgICAgY29uc3Qgcm93Q29tcG9uZW50cyA9IFtdO1xuICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgdGhpcy5jb2x1bW5zOyBjb2wrKykge1xuICAgICAgICBjb25zdCBpbmRleCA9IHJvdyAqIHRoaXMuY29sdW1ucyArIGNvbDtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRzVG9SZW5kZXJbaW5kZXhdO1xuICAgICAgICByb3dDb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ3JpZC5wdXNoKHJvd0NvbXBvbmVudHMpO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZUluamVjdG9yKGlucHV0czogYW55KSB7XG4gICAgaWYgKCF0aGlzLmluamVjdG9yQ2FjaGUuaGFzKGlucHV0cykpIHtcbiAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgcHJvdmlkZXJzOiBPYmplY3Qua2V5cyhpbnB1dHMpLm1hcCgoa2V5KSA9PiAoeyBwcm92aWRlOiBrZXksIHVzZVZhbHVlOiBpbnB1dHNba2V5XSB9KSksXG4gICAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5pbmplY3RvckNhY2hlLnNldChpbnB1dHMsIGluamVjdG9yKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICByZXR1cm4gdGhpcy5pbmplY3RvckNhY2hlLmdldChpbnB1dHMpITtcbiAgfVxufVxuIl19
|
package/dist/esm2022/lib/components/display-components/loading-modal/loading-modal.component.mjs
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/common";
|
|
5
|
-
/**
|
|
6
|
-
* LoadingModal displays a loading spinner and a customizable "Loading..." text as an overlay.
|
|
7
|
-
*
|
|
8
|
-
* @selector app-loading-modal
|
|
9
|
-
* @standalone true
|
|
10
|
-
* @imports CommonModule
|
|
11
|
-
*
|
|
12
|
-
* @inputs
|
|
13
|
-
* - `isVisible` (boolean): Controls the visibility of the modal overlay. Default is `false`.
|
|
14
|
-
* - `backgroundColor` (string): Background color of the modal overlay. Default is `'rgba(0, 0, 0, 0.5)'`.
|
|
15
|
-
* - `displayColor` (string): Color of the loading text. Default is `'white'`.
|
|
16
|
-
*
|
|
17
|
-
* @properties
|
|
18
|
-
* - `modalContainerStyle` (object): Computed styles for the modal container.
|
|
19
|
-
* - `modalContentStyle` (object): Computed styles for the modal content.
|
|
20
|
-
* - `spinnerContainerStyle` (object): Computed styles for the spinner container.
|
|
21
|
-
* - `loadingTextStyle` (object): Computed styles for the loading text.
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```html
|
|
25
|
-
* <app-loading-modal
|
|
26
|
-
* [isVisible]="true"
|
|
27
|
-
* [backgroundColor]="'rgba(0, 0, 0, 0.5)'"
|
|
28
|
-
* [displayColor]="'white'">
|
|
29
|
-
* </app-loading-modal>
|
|
30
|
-
* ```
|
|
31
|
-
*
|
|
32
|
-
* @styles
|
|
33
|
-
* - `.spinner`: Styles for the loading spinner.
|
|
34
|
-
* - `@keyframes spin`: Keyframes for the spinner rotation animation.
|
|
35
|
-
* - `.modal-content`: Styles for the modal content container.
|
|
36
|
-
* - `.loading-text`: Styles for the loading text.
|
|
37
|
-
**/
|
|
38
|
-
export class LoadingModal {
|
|
39
|
-
isVisible = false;
|
|
40
|
-
backgroundColor = 'rgba(0, 0, 0, 0.5)';
|
|
41
|
-
displayColor = 'white';
|
|
42
|
-
get modalContainerStyle() {
|
|
43
|
-
return {
|
|
44
|
-
position: 'fixed',
|
|
45
|
-
top: '0',
|
|
46
|
-
left: '0',
|
|
47
|
-
width: '100%',
|
|
48
|
-
height: '100%',
|
|
49
|
-
backgroundColor: this.backgroundColor,
|
|
50
|
-
display: 'flex',
|
|
51
|
-
alignItems: 'center',
|
|
52
|
-
justifyContent: 'center',
|
|
53
|
-
zIndex: '999',
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
get modalContentStyle() {
|
|
57
|
-
return {
|
|
58
|
-
backgroundColor: this.backgroundColor,
|
|
59
|
-
borderRadius: '10px',
|
|
60
|
-
padding: '10px',
|
|
61
|
-
maxWidth: '200px',
|
|
62
|
-
textAlign: 'center',
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
get spinnerContainerStyle() {
|
|
66
|
-
return {
|
|
67
|
-
marginBottom: '20px',
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
get loadingTextStyle() {
|
|
71
|
-
return {
|
|
72
|
-
color: this.displayColor,
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LoadingModal, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
76
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: LoadingModal, isStandalone: true, selector: "app-loading-modal", inputs: { isVisible: "isVisible", backgroundColor: "backgroundColor", displayColor: "displayColor" }, ngImport: i0, template: `
|
|
77
|
-
<div *ngIf="isVisible" [ngStyle]="modalContainerStyle">
|
|
78
|
-
<div [ngStyle]="modalContentStyle" class="modal-content">
|
|
79
|
-
<div class="spinner" [ngStyle]="spinnerContainerStyle"></div>
|
|
80
|
-
<div [ngStyle]="loadingTextStyle" class="loading-text">Loading...</div>
|
|
81
|
-
</div>
|
|
82
|
-
</div>
|
|
83
|
-
`, isInline: true, styles: [".spinner{border:12px solid #f3f3f3;border-top:12px solid black;border-radius:50%;width:50px;height:50px;animation:spin 2s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.modal-content{display:flex;flex-direction:column;align-items:center}.loading-text{margin-top:10px}\n"], 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"] }] });
|
|
84
|
-
}
|
|
85
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LoadingModal, decorators: [{
|
|
86
|
-
type: Component,
|
|
87
|
-
args: [{ selector: 'app-loading-modal', standalone: true, imports: [CommonModule], template: `
|
|
88
|
-
<div *ngIf="isVisible" [ngStyle]="modalContainerStyle">
|
|
89
|
-
<div [ngStyle]="modalContentStyle" class="modal-content">
|
|
90
|
-
<div class="spinner" [ngStyle]="spinnerContainerStyle"></div>
|
|
91
|
-
<div [ngStyle]="loadingTextStyle" class="loading-text">Loading...</div>
|
|
92
|
-
</div>
|
|
93
|
-
</div>
|
|
94
|
-
`, styles: [".spinner{border:12px solid #f3f3f3;border-top:12px solid black;border-radius:50%;width:50px;height:50px;animation:spin 2s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.modal-content{display:flex;flex-direction:column;align-items:center}.loading-text{margin-top:10px}\n"] }]
|
|
95
|
-
}], propDecorators: { isVisible: [{
|
|
96
|
-
type: Input
|
|
97
|
-
}], backgroundColor: [{
|
|
98
|
-
type: Input
|
|
99
|
-
}], displayColor: [{
|
|
100
|
-
type: Input
|
|
101
|
-
}] } });
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYXNmdS1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9kaXNwbGF5LWNvbXBvbmVudHMvbG9hZGluZy1tb2RhbC9sb2FkaW5nLW1vZGFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQVMvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFnQ0k7QUEyQ0osTUFBTSxPQUFPLFlBQVk7SUFDZCxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLGVBQWUsR0FBWSxvQkFBb0IsQ0FBQztJQUNoRCxZQUFZLEdBQVksT0FBTyxDQUFDO0lBRXpDLElBQUksbUJBQW1CO1FBQ3JCLE9BQU87WUFDTCxRQUFRLEVBQUUsT0FBTztZQUNqQixHQUFHLEVBQUUsR0FBRztZQUNSLElBQUksRUFBRSxHQUFHO1lBQ1QsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxPQUFPLEVBQUUsTUFBTTtZQUNmLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLGNBQWMsRUFBRSxRQUFRO1lBQ3hCLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPO1lBQ0wsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQ3JDLFlBQVksRUFBRSxNQUFNO1lBQ3BCLE9BQU8sRUFBRSxNQUFNO1lBQ2YsUUFBUSxFQUFFLE9BQU87WUFDakIsU0FBUyxFQUFFLFFBQVE7U0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPO1lBQ0wsWUFBWSxFQUFFLE1BQU07U0FDckIsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ3pCLENBQUM7SUFDSixDQUFDO3VHQXhDVSxZQUFZOzJGQUFaLFlBQVksbUxBckNiOzs7Ozs7O0dBT1QsNFhBUlMsWUFBWTs7MkZBc0NYLFlBQVk7a0JBekN4QixTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFDYjs7Ozs7OztHQU9UOzhCQStCUSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmdNb2RhbE9wdGlvbnMge1xuICBpc1Zpc2libGU6IGJvb2xlYW47XG4gIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgZGlzcGxheUNvbG9yPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBMb2FkaW5nTW9kYWxUeXBlID0gKG9wdGlvbnM6IExvYWRpbmdNb2RhbE9wdGlvbnMpID0+IEhUTUxFbGVtZW50O1xuXG4vKipcbiAqIExvYWRpbmdNb2RhbCBkaXNwbGF5cyBhIGxvYWRpbmcgc3Bpbm5lciBhbmQgYSBjdXN0b21pemFibGUgXCJMb2FkaW5nLi4uXCIgdGV4dCBhcyBhbiBvdmVybGF5LlxuICpcbiAqIEBzZWxlY3RvciBhcHAtbG9hZGluZy1tb2RhbFxuICogQHN0YW5kYWxvbmUgdHJ1ZVxuICogQGltcG9ydHMgQ29tbW9uTW9kdWxlXG4gKlxuICogQGlucHV0c1xuICogLSBgaXNWaXNpYmxlYCAoYm9vbGVhbik6IENvbnRyb2xzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBtb2RhbCBvdmVybGF5LiBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gKiAtIGBiYWNrZ3JvdW5kQ29sb3JgIChzdHJpbmcpOiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBtb2RhbCBvdmVybGF5LiBEZWZhdWx0IGlzIGAncmdiYSgwLCAwLCAwLCAwLjUpJ2AuXG4gKiAtIGBkaXNwbGF5Q29sb3JgIChzdHJpbmcpOiBDb2xvciBvZiB0aGUgbG9hZGluZyB0ZXh0LiBEZWZhdWx0IGlzIGAnd2hpdGUnYC5cbiAqXG4gKiBAcHJvcGVydGllc1xuICogLSBgbW9kYWxDb250YWluZXJTdHlsZWAgKG9iamVjdCk6IENvbXB1dGVkIHN0eWxlcyBmb3IgdGhlIG1vZGFsIGNvbnRhaW5lci5cbiAqIC0gYG1vZGFsQ29udGVudFN0eWxlYCAob2JqZWN0KTogQ29tcHV0ZWQgc3R5bGVzIGZvciB0aGUgbW9kYWwgY29udGVudC5cbiAqIC0gYHNwaW5uZXJDb250YWluZXJTdHlsZWAgKG9iamVjdCk6IENvbXB1dGVkIHN0eWxlcyBmb3IgdGhlIHNwaW5uZXIgY29udGFpbmVyLlxuICogLSBgbG9hZGluZ1RleHRTdHlsZWAgKG9iamVjdCk6IENvbXB1dGVkIHN0eWxlcyBmb3IgdGhlIGxvYWRpbmcgdGV4dC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGFwcC1sb2FkaW5nLW1vZGFsXG4gKiAgIFtpc1Zpc2libGVdPVwidHJ1ZVwiXG4gKiAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJ3JnYmEoMCwgMCwgMCwgMC41KSdcIlxuICogICBbZGlzcGxheUNvbG9yXT1cIid3aGl0ZSdcIj5cbiAqIDwvYXBwLWxvYWRpbmctbW9kYWw+XG4gKiBgYGBcbiAqXG4gKiBAc3R5bGVzXG4gKiAtIGAuc3Bpbm5lcmA6IFN0eWxlcyBmb3IgdGhlIGxvYWRpbmcgc3Bpbm5lci5cbiAqIC0gYEBrZXlmcmFtZXMgc3BpbmA6IEtleWZyYW1lcyBmb3IgdGhlIHNwaW5uZXIgcm90YXRpb24gYW5pbWF0aW9uLlxuICogLSBgLm1vZGFsLWNvbnRlbnRgOiBTdHlsZXMgZm9yIHRoZSBtb2RhbCBjb250ZW50IGNvbnRhaW5lci5cbiAqIC0gYC5sb2FkaW5nLXRleHRgOiBTdHlsZXMgZm9yIHRoZSBsb2FkaW5nIHRleHQuXG4gKiovXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1sb2FkaW5nLW1vZGFsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiAqbmdJZj1cImlzVmlzaWJsZVwiIFtuZ1N0eWxlXT1cIm1vZGFsQ29udGFpbmVyU3R5bGVcIj5cbiAgICAgIDxkaXYgW25nU3R5bGVdPVwibW9kYWxDb250ZW50U3R5bGVcIiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIiBbbmdTdHlsZV09XCJzcGlubmVyQ29udGFpbmVyU3R5bGVcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJsb2FkaW5nVGV4dFN0eWxlXCIgY2xhc3M9XCJsb2FkaW5nLXRleHRcIj5Mb2FkaW5nLi4uPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLnNwaW5uZXIge1xuICAgICAgICBib3JkZXI6IDEycHggc29saWQgI2YzZjNmMzsgLyogTGlnaHQgZ3JleSAqL1xuICAgICAgICBib3JkZXItdG9wOiAxMnB4IHNvbGlkIGJsYWNrOyAvKiBCbGFjayAqL1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIHdpZHRoOiA1MHB4O1xuICAgICAgICBoZWlnaHQ6IDUwcHg7XG4gICAgICAgIGFuaW1hdGlvbjogc3BpbiAycyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICB9XG4gICAgICBAa2V5ZnJhbWVzIHNwaW4ge1xuICAgICAgICAwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICAgIH1cbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLm1vZGFsLWNvbnRlbnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuICAgICAgLmxvYWRpbmctdGV4dCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTG9hZGluZ01vZGFsIHtcbiAgQElucHV0KCkgaXNWaXNpYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGJhY2tncm91bmRDb2xvcj86IHN0cmluZyA9ICdyZ2JhKDAsIDAsIDAsIDAuNSknO1xuICBASW5wdXQoKSBkaXNwbGF5Q29sb3I/OiBzdHJpbmcgPSAnd2hpdGUnO1xuXG4gIGdldCBtb2RhbENvbnRhaW5lclN0eWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2tncm91bmRDb2xvcixcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgekluZGV4OiAnOTk5JyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0IG1vZGFsQ29udGVudFN0eWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFja2dyb3VuZENvbG9yLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMTBweCcsXG4gICAgICBwYWRkaW5nOiAnMTBweCcsXG4gICAgICBtYXhXaWR0aDogJzIwMHB4JyxcbiAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgfTtcbiAgfVxuXG4gIGdldCBzcGlubmVyQ29udGFpbmVyU3R5bGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hcmdpbkJvdHRvbTogJzIwcHgnLFxuICAgIH07XG4gIH1cblxuICBnZXQgbG9hZGluZ1RleHRTdHlsZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHRoaXMuZGlzcGxheUNvbG9yLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/common";
|
|
5
|
-
/**
|
|
6
|
-
* MainAspectComponent dynamically adjusts its aspect ratio based on window size, providing an adaptable container for content.
|
|
7
|
-
* It listens for window resize and orientation changes to update its layout, making it suitable for responsive applications.
|
|
8
|
-
*
|
|
9
|
-
* @selector app-main-aspect-component
|
|
10
|
-
* @standalone true
|
|
11
|
-
* @imports CommonModule
|
|
12
|
-
*
|
|
13
|
-
* @template
|
|
14
|
-
* ```html
|
|
15
|
-
* <div [ngStyle]="aspectStyles" [style.backgroundColor]="backgroundColor" class="aspect-container">
|
|
16
|
-
* <ng-content></ng-content>
|
|
17
|
-
* </div>
|
|
18
|
-
* ```
|
|
19
|
-
*
|
|
20
|
-
* @styles
|
|
21
|
-
* - `.aspect-container`: Styles for overflow handling.
|
|
22
|
-
*
|
|
23
|
-
* @inputs
|
|
24
|
-
* - `backgroundColor` (string): The background color of the aspect container.
|
|
25
|
-
* - `showControls` (boolean): Toggles control display, adjusting the container height. Default is true.
|
|
26
|
-
* - `containerWidthFraction` (number): Fraction of window width for container width. Default is 1.
|
|
27
|
-
* - `containerHeightFraction` (number): Fraction of window height for container height. Default is 1.
|
|
28
|
-
* - `defaultFraction` (number): Height adjustment factor when controls are shown. Default is 0.94.
|
|
29
|
-
* - `updateIsWideScreen` (function): Callback to set wide screen status.
|
|
30
|
-
* - `updateIsMediumScreen` (function): Callback to set medium screen status.
|
|
31
|
-
* - `updateIsSmallScreen` (function): Callback to set small screen status.
|
|
32
|
-
*
|
|
33
|
-
* @methods
|
|
34
|
-
* - `ngOnInit()`: Initializes component and sets up resize and orientation listeners.
|
|
35
|
-
* - `ngOnChanges(changes: SimpleChanges)`: Updates layout when relevant inputs change.
|
|
36
|
-
* - `ngOnDestroy()`: Removes event listeners to prevent memory leaks.
|
|
37
|
-
* - `updateAspectStyles()`: Calculates and applies styles based on current window dimensions and component inputs.
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
40
|
-
* ```html
|
|
41
|
-
* <app-main-aspect-component
|
|
42
|
-
* [backgroundColor]="'lightblue'"
|
|
43
|
-
* [showControls]="true"
|
|
44
|
-
* [containerWidthFraction]="0.9"
|
|
45
|
-
* [containerHeightFraction]="0.8"
|
|
46
|
-
* [defaultFraction]="0.95"
|
|
47
|
-
* [updateIsWideScreen]="onWideScreenUpdate"
|
|
48
|
-
* [updateIsMediumScreen]="onMediumScreenUpdate"
|
|
49
|
-
* [updateIsSmallScreen]="onSmallScreenUpdate"
|
|
50
|
-
* ></app-main-aspect-component>
|
|
51
|
-
* ```
|
|
52
|
-
**/
|
|
53
|
-
export class MainAspectComponent {
|
|
54
|
-
backgroundColor = '';
|
|
55
|
-
showControls = true;
|
|
56
|
-
containerWidthFraction = 1;
|
|
57
|
-
containerHeightFraction = 1;
|
|
58
|
-
defaultFraction = 0.94;
|
|
59
|
-
updateIsWideScreen;
|
|
60
|
-
updateIsMediumScreen;
|
|
61
|
-
updateIsSmallScreen;
|
|
62
|
-
aspectStyles = {};
|
|
63
|
-
ngOnInit() {
|
|
64
|
-
this.updateAspectStyles();
|
|
65
|
-
window.addEventListener('resize', this.updateAspectStyles);
|
|
66
|
-
window.addEventListener('orientationchange', this.updateAspectStyles);
|
|
67
|
-
}
|
|
68
|
-
ngOnChanges(changes) {
|
|
69
|
-
if (changes['showControls'] ||
|
|
70
|
-
changes['containerWidthFraction'] ||
|
|
71
|
-
changes['containerHeightFraction'] ||
|
|
72
|
-
changes['defaultFraction']) {
|
|
73
|
-
this.updateAspectStyles();
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
ngOnDestroy() {
|
|
77
|
-
window.removeEventListener('resize', this.updateAspectStyles);
|
|
78
|
-
window.removeEventListener('orientationchange', this.updateAspectStyles);
|
|
79
|
-
}
|
|
80
|
-
updateAspectStyles = () => {
|
|
81
|
-
const windowHeight = window.innerHeight;
|
|
82
|
-
const windowWidth = window.innerWidth;
|
|
83
|
-
const parentWidth = Math.floor(this.containerWidthFraction * windowWidth);
|
|
84
|
-
const parentHeight = this.showControls
|
|
85
|
-
? Math.floor(this.containerHeightFraction * windowHeight * this.defaultFraction)
|
|
86
|
-
: Math.floor(this.containerHeightFraction * windowHeight);
|
|
87
|
-
let isWideScreen = parentWidth >= 768;
|
|
88
|
-
const isMediumScreen = parentWidth >= 576 && parentWidth < 768;
|
|
89
|
-
const isSmallScreen = parentWidth < 576;
|
|
90
|
-
if (!isWideScreen && parentWidth > 1.5 * parentHeight) {
|
|
91
|
-
isWideScreen = true;
|
|
92
|
-
}
|
|
93
|
-
this.updateIsWideScreen(isWideScreen);
|
|
94
|
-
this.updateIsMediumScreen(isMediumScreen);
|
|
95
|
-
this.updateIsSmallScreen(isSmallScreen);
|
|
96
|
-
this.aspectStyles = {
|
|
97
|
-
height: parentHeight + 'px',
|
|
98
|
-
width: parentWidth + 'px',
|
|
99
|
-
};
|
|
100
|
-
};
|
|
101
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: MainAspectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
102
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: MainAspectComponent, isStandalone: true, selector: "app-main-aspect-component", inputs: { backgroundColor: "backgroundColor", showControls: "showControls", containerWidthFraction: "containerWidthFraction", containerHeightFraction: "containerHeightFraction", defaultFraction: "defaultFraction", updateIsWideScreen: "updateIsWideScreen", updateIsMediumScreen: "updateIsMediumScreen", updateIsSmallScreen: "updateIsSmallScreen" }, usesOnChanges: true, ngImport: i0, template: `
|
|
103
|
-
<div
|
|
104
|
-
[ngStyle]="aspectStyles"
|
|
105
|
-
[style.backgroundColor]="backgroundColor"
|
|
106
|
-
class="aspect-container"
|
|
107
|
-
>
|
|
108
|
-
<ng-content></ng-content>
|
|
109
|
-
</div>
|
|
110
|
-
`, isInline: true, styles: [".aspect-container{overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
111
|
-
}
|
|
112
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: MainAspectComponent, decorators: [{
|
|
113
|
-
type: Component,
|
|
114
|
-
args: [{ selector: 'app-main-aspect-component', standalone: true, imports: [CommonModule], template: `
|
|
115
|
-
<div
|
|
116
|
-
[ngStyle]="aspectStyles"
|
|
117
|
-
[style.backgroundColor]="backgroundColor"
|
|
118
|
-
class="aspect-container"
|
|
119
|
-
>
|
|
120
|
-
<ng-content></ng-content>
|
|
121
|
-
</div>
|
|
122
|
-
`, styles: [".aspect-container{overflow:hidden}\n"] }]
|
|
123
|
-
}], propDecorators: { backgroundColor: [{
|
|
124
|
-
type: Input
|
|
125
|
-
}], showControls: [{
|
|
126
|
-
type: Input
|
|
127
|
-
}], containerWidthFraction: [{
|
|
128
|
-
type: Input
|
|
129
|
-
}], containerHeightFraction: [{
|
|
130
|
-
type: Input
|
|
131
|
-
}], defaultFraction: [{
|
|
132
|
-
type: Input
|
|
133
|
-
}], updateIsWideScreen: [{
|
|
134
|
-
type: Input
|
|
135
|
-
}], updateIsMediumScreen: [{
|
|
136
|
-
type: Input
|
|
137
|
-
}], updateIsSmallScreen: [{
|
|
138
|
-
type: Input
|
|
139
|
-
}] } });
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1hc3BlY3QtY29tcG9uZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc2Z1LWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL2Rpc3BsYXktY29tcG9uZW50cy9tYWluLWFzcGVjdC1jb21wb25lbnQvbWFpbi1hc3BlY3QtY29tcG9uZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBK0MsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFlL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBK0NJO0FBdUJKLE1BQU0sT0FBTyxtQkFBbUI7SUFDckIsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUNyQixZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLHNCQUFzQixHQUFHLENBQUMsQ0FBQztJQUMzQix1QkFBdUIsR0FBRyxDQUFDLENBQUM7SUFDNUIsZUFBZSxHQUFHLElBQUksQ0FBQztJQUN2QixrQkFBa0IsQ0FBbUM7SUFDckQsb0JBQW9CLENBQXFDO0lBQ3pELG1CQUFtQixDQUFvQztJQUVoRSxZQUFZLEdBQTJCLEVBQUUsQ0FBQztJQUUxQyxRQUFRO1FBQ04sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUNFLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDdkIsT0FBTyxDQUFDLHdCQUF3QixDQUFDO1lBQ2pDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQztZQUNsQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDMUIsQ0FBQztZQUNELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDOUQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTyxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7UUFDaEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN4QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBRXRDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZO1lBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNoRixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFFNUQsSUFBSSxZQUFZLEdBQUcsV0FBVyxJQUFJLEdBQUcsQ0FBQztRQUN0QyxNQUFNLGNBQWMsR0FBRyxXQUFXLElBQUksR0FBRyxJQUFJLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDL0QsTUFBTSxhQUFhLEdBQUcsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUV4QyxJQUFJLENBQUMsWUFBWSxJQUFJLFdBQVcsR0FBRyxHQUFHLEdBQUcsWUFBWSxFQUFFLENBQUM7WUFDdEQsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFeEMsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNsQixNQUFNLEVBQUUsWUFBWSxHQUFHLElBQUk7WUFDM0IsS0FBSyxFQUFFLFdBQVcsR0FBRyxJQUFJO1NBQzFCLENBQUM7SUFDSixDQUFDLENBQUM7dUdBNURTLG1CQUFtQjsyRkFBbkIsbUJBQW1CLHNjQWpCcEI7Ozs7Ozs7O0dBUVQsNkdBVFMsWUFBWTs7MkZBa0JYLG1CQUFtQjtrQkFyQi9CLFNBQVM7K0JBQ0UsMkJBQTJCLGNBQ3pCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxZQUNiOzs7Ozs7OztHQVFUOzhCQVVRLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1haW5Bc3BlY3RDb21wb25lbnRPcHRpb25zIHtcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBzaG93Q29udHJvbHM/OiBib29sZWFuO1xuICBjb250YWluZXJXaWR0aEZyYWN0aW9uPzogbnVtYmVyO1xuICBjb250YWluZXJIZWlnaHRGcmFjdGlvbj86IG51bWJlcjtcbiAgZGVmYXVsdEZyYWN0aW9uPzogbnVtYmVyO1xuICB1cGRhdGVJc1dpZGVTY3JlZW46IChpc1dpZGVTY3JlZW46IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHVwZGF0ZUlzTWVkaXVtU2NyZWVuOiAoaXNNZWRpdW1TY3JlZW46IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHVwZGF0ZUlzU21hbGxTY3JlZW46IChpc1NtYWxsU2NyZWVuOiBib29sZWFuKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBNYWluQXNwZWN0Q29tcG9uZW50VHlwZSA9IChvcHRpb25zOiBNYWluQXNwZWN0Q29tcG9uZW50T3B0aW9ucykgPT4gSFRNTEVsZW1lbnQ7XG5cbi8qKlxuICogTWFpbkFzcGVjdENvbXBvbmVudCBkeW5hbWljYWxseSBhZGp1c3RzIGl0cyBhc3BlY3QgcmF0aW8gYmFzZWQgb24gd2luZG93IHNpemUsIHByb3ZpZGluZyBhbiBhZGFwdGFibGUgY29udGFpbmVyIGZvciBjb250ZW50LlxuICogSXQgbGlzdGVucyBmb3Igd2luZG93IHJlc2l6ZSBhbmQgb3JpZW50YXRpb24gY2hhbmdlcyB0byB1cGRhdGUgaXRzIGxheW91dCwgbWFraW5nIGl0IHN1aXRhYmxlIGZvciByZXNwb25zaXZlIGFwcGxpY2F0aW9ucy5cbiAqXG4gKiBAc2VsZWN0b3IgYXBwLW1haW4tYXNwZWN0LWNvbXBvbmVudFxuICogQHN0YW5kYWxvbmUgdHJ1ZVxuICogQGltcG9ydHMgQ29tbW9uTW9kdWxlXG4gKlxuICogQHRlbXBsYXRlXG4gKiBgYGBodG1sXG4gKiA8ZGl2IFtuZ1N0eWxlXT1cImFzcGVjdFN0eWxlc1wiIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYmFja2dyb3VuZENvbG9yXCIgY2xhc3M9XCJhc3BlY3QtY29udGFpbmVyXCI+XG4gKiAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAqIDwvZGl2PlxuICogYGBgXG4gKlxuICogQHN0eWxlc1xuICogLSBgLmFzcGVjdC1jb250YWluZXJgOiBTdHlsZXMgZm9yIG92ZXJmbG93IGhhbmRsaW5nLlxuICpcbiAqIEBpbnB1dHNcbiAqIC0gYGJhY2tncm91bmRDb2xvcmAgKHN0cmluZyk6IFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBhc3BlY3QgY29udGFpbmVyLlxuICogLSBgc2hvd0NvbnRyb2xzYCAoYm9vbGVhbik6IFRvZ2dsZXMgY29udHJvbCBkaXNwbGF5LCBhZGp1c3RpbmcgdGhlIGNvbnRhaW5lciBoZWlnaHQuIERlZmF1bHQgaXMgdHJ1ZS5cbiAqIC0gYGNvbnRhaW5lcldpZHRoRnJhY3Rpb25gIChudW1iZXIpOiBGcmFjdGlvbiBvZiB3aW5kb3cgd2lkdGggZm9yIGNvbnRhaW5lciB3aWR0aC4gRGVmYXVsdCBpcyAxLlxuICogLSBgY29udGFpbmVySGVpZ2h0RnJhY3Rpb25gIChudW1iZXIpOiBGcmFjdGlvbiBvZiB3aW5kb3cgaGVpZ2h0IGZvciBjb250YWluZXIgaGVpZ2h0LiBEZWZhdWx0IGlzIDEuXG4gKiAtIGBkZWZhdWx0RnJhY3Rpb25gIChudW1iZXIpOiBIZWlnaHQgYWRqdXN0bWVudCBmYWN0b3Igd2hlbiBjb250cm9scyBhcmUgc2hvd24uIERlZmF1bHQgaXMgMC45NC5cbiAqIC0gYHVwZGF0ZUlzV2lkZVNjcmVlbmAgKGZ1bmN0aW9uKTogQ2FsbGJhY2sgdG8gc2V0IHdpZGUgc2NyZWVuIHN0YXR1cy5cbiAqIC0gYHVwZGF0ZUlzTWVkaXVtU2NyZWVuYCAoZnVuY3Rpb24pOiBDYWxsYmFjayB0byBzZXQgbWVkaXVtIHNjcmVlbiBzdGF0dXMuXG4gKiAtIGB1cGRhdGVJc1NtYWxsU2NyZWVuYCAoZnVuY3Rpb24pOiBDYWxsYmFjayB0byBzZXQgc21hbGwgc2NyZWVuIHN0YXR1cy5cbiAqXG4gKiBAbWV0aG9kc1xuICogLSBgbmdPbkluaXQoKWA6IEluaXRpYWxpemVzIGNvbXBvbmVudCBhbmQgc2V0cyB1cCByZXNpemUgYW5kIG9yaWVudGF0aW9uIGxpc3RlbmVycy5cbiAqIC0gYG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpYDogVXBkYXRlcyBsYXlvdXQgd2hlbiByZWxldmFudCBpbnB1dHMgY2hhbmdlLlxuICogLSBgbmdPbkRlc3Ryb3koKWA6IFJlbW92ZXMgZXZlbnQgbGlzdGVuZXJzIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzLlxuICogLSBgdXBkYXRlQXNwZWN0U3R5bGVzKClgOiBDYWxjdWxhdGVzIGFuZCBhcHBsaWVzIHN0eWxlcyBiYXNlZCBvbiBjdXJyZW50IHdpbmRvdyBkaW1lbnNpb25zIGFuZCBjb21wb25lbnQgaW5wdXRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8YXBwLW1haW4tYXNwZWN0LWNvbXBvbmVudFxuICogICBbYmFja2dyb3VuZENvbG9yXT1cIidsaWdodGJsdWUnXCJcbiAqICAgW3Nob3dDb250cm9sc109XCJ0cnVlXCJcbiAqICAgW2NvbnRhaW5lcldpZHRoRnJhY3Rpb25dPVwiMC45XCJcbiAqICAgW2NvbnRhaW5lckhlaWdodEZyYWN0aW9uXT1cIjAuOFwiXG4gKiAgIFtkZWZhdWx0RnJhY3Rpb25dPVwiMC45NVwiXG4gKiAgIFt1cGRhdGVJc1dpZGVTY3JlZW5dPVwib25XaWRlU2NyZWVuVXBkYXRlXCJcbiAqICAgW3VwZGF0ZUlzTWVkaXVtU2NyZWVuXT1cIm9uTWVkaXVtU2NyZWVuVXBkYXRlXCJcbiAqICAgW3VwZGF0ZUlzU21hbGxTY3JlZW5dPVwib25TbWFsbFNjcmVlblVwZGF0ZVwiXG4gKiA+PC9hcHAtbWFpbi1hc3BlY3QtY29tcG9uZW50PlxuICogYGBgXG4gKiovXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tYWluLWFzcGVjdC1jb21wb25lbnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICBbbmdTdHlsZV09XCJhc3BlY3RTdHlsZXNcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJiYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgY2xhc3M9XCJhc3BlY3QtY29udGFpbmVyXCJcbiAgICA+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5hc3BlY3QtY29udGFpbmVyIHtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBNYWluQXNwZWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGJhY2tncm91bmRDb2xvciA9ICcnO1xuICBASW5wdXQoKSBzaG93Q29udHJvbHMgPSB0cnVlO1xuICBASW5wdXQoKSBjb250YWluZXJXaWR0aEZyYWN0aW9uID0gMTtcbiAgQElucHV0KCkgY29udGFpbmVySGVpZ2h0RnJhY3Rpb24gPSAxO1xuICBASW5wdXQoKSBkZWZhdWx0RnJhY3Rpb24gPSAwLjk0O1xuICBASW5wdXQoKSB1cGRhdGVJc1dpZGVTY3JlZW4hOiAoaXNXaWRlU2NyZWVuOiBib29sZWFuKSA9PiB2b2lkO1xuICBASW5wdXQoKSB1cGRhdGVJc01lZGl1bVNjcmVlbiE6IChpc01lZGl1bVNjcmVlbjogYm9vbGVhbikgPT4gdm9pZDtcbiAgQElucHV0KCkgdXBkYXRlSXNTbWFsbFNjcmVlbiE6IChpc1NtYWxsU2NyZWVuOiBib29sZWFuKSA9PiB2b2lkO1xuXG4gIGFzcGVjdFN0eWxlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudXBkYXRlQXNwZWN0U3R5bGVzKCk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy51cGRhdGVBc3BlY3RTdHlsZXMpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHRoaXMudXBkYXRlQXNwZWN0U3R5bGVzKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzWydzaG93Q29udHJvbHMnXSB8fFxuICAgICAgY2hhbmdlc1snY29udGFpbmVyV2lkdGhGcmFjdGlvbiddIHx8XG4gICAgICBjaGFuZ2VzWydjb250YWluZXJIZWlnaHRGcmFjdGlvbiddIHx8XG4gICAgICBjaGFuZ2VzWydkZWZhdWx0RnJhY3Rpb24nXVxuICAgICkge1xuICAgICAgdGhpcy51cGRhdGVBc3BlY3RTdHlsZXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy51cGRhdGVBc3BlY3RTdHlsZXMpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIHRoaXMudXBkYXRlQXNwZWN0U3R5bGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQXNwZWN0U3R5bGVzID0gKCkgPT4ge1xuICAgIGNvbnN0IHdpbmRvd0hlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICBjb25zdCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXG4gICAgY29uc3QgcGFyZW50V2lkdGggPSBNYXRoLmZsb29yKHRoaXMuY29udGFpbmVyV2lkdGhGcmFjdGlvbiAqIHdpbmRvd1dpZHRoKTtcbiAgICBjb25zdCBwYXJlbnRIZWlnaHQgPSB0aGlzLnNob3dDb250cm9sc1xuICAgICAgPyBNYXRoLmZsb29yKHRoaXMuY29udGFpbmVySGVpZ2h0RnJhY3Rpb24gKiB3aW5kb3dIZWlnaHQgKiB0aGlzLmRlZmF1bHRGcmFjdGlvbilcbiAgICAgIDogTWF0aC5mbG9vcih0aGlzLmNvbnRhaW5lckhlaWdodEZyYWN0aW9uICogd2luZG93SGVpZ2h0KTtcblxuICAgIGxldCBpc1dpZGVTY3JlZW4gPSBwYXJlbnRXaWR0aCA+PSA3Njg7XG4gICAgY29uc3QgaXNNZWRpdW1TY3JlZW4gPSBwYXJlbnRXaWR0aCA+PSA1NzYgJiYgcGFyZW50V2lkdGggPCA3Njg7XG4gICAgY29uc3QgaXNTbWFsbFNjcmVlbiA9IHBhcmVudFdpZHRoIDwgNTc2O1xuXG4gICAgaWYgKCFpc1dpZGVTY3JlZW4gJiYgcGFyZW50V2lkdGggPiAxLjUgKiBwYXJlbnRIZWlnaHQpIHtcbiAgICAgIGlzV2lkZVNjcmVlbiA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVJc1dpZGVTY3JlZW4oaXNXaWRlU2NyZWVuKTtcbiAgICB0aGlzLnVwZGF0ZUlzTWVkaXVtU2NyZWVuKGlzTWVkaXVtU2NyZWVuKTtcbiAgICB0aGlzLnVwZGF0ZUlzU21hbGxTY3JlZW4oaXNTbWFsbFNjcmVlbik7XG5cbiAgICB0aGlzLmFzcGVjdFN0eWxlcyA9IHtcbiAgICAgIGhlaWdodDogcGFyZW50SGVpZ2h0ICsgJ3B4JyxcbiAgICAgIHdpZHRoOiBwYXJlbnRXaWR0aCArICdweCcsXG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==
|