{"version":3,"sources":["vendor/ember-cli/app-prefix.js","vosaic/about/route.js","vosaic/about/template.js","vosaic/accept-invitation/controller.js","vosaic/accept-invitation/route.js","vosaic/accept-invitation/template.js","vosaic/accept-payment/cc/controller.js","vosaic/accept-payment/cc/route.js","vosaic/accept-payment/cc/template.js","vosaic/accept-payment/index/controller.js","vosaic/accept-payment/index/route.js","vosaic/accept-payment/index/template.js","vosaic/account-suspended/controller.js","vosaic/account-suspended/route.js","vosaic/account-suspended/template.js","vosaic/accounts/add-users/route.js","vosaic/accounts/add-users/template.js","vosaic/accounts/aicoach/controller.js","vosaic/accounts/aicoach/route.js","vosaic/accounts/aicoach/template.js","vosaic/accounts/backups/controller.js","vosaic/accounts/backups/route.js","vosaic/accounts/backups/template.js","vosaic/accounts/basic-information/controller.js","vosaic/accounts/basic-information/route.js","vosaic/accounts/basic-information/template.js","vosaic/accounts/change-password/controller.js","vosaic/accounts/change-password/route.js","vosaic/accounts/change-password/template.js","vosaic/accounts/controller.js","vosaic/accounts/features/controller.js","vosaic/accounts/features/route.js","vosaic/accounts/features/template.js","vosaic/accounts/goals/route.js","vosaic/accounts/goals/template.js","vosaic/accounts/lti/controller.js","vosaic/accounts/lti/edit/controller.js","vosaic/accounts/lti/edit/route.js","vosaic/accounts/lti/edit/template.js","vosaic/accounts/lti/new/controller.js","vosaic/accounts/lti/new/route.js","vosaic/accounts/lti/new/template.js","vosaic/accounts/lti/route.js","vosaic/accounts/lti/template.js","vosaic/accounts/payment-history/route.js","vosaic/accounts/payment-history/template.js","vosaic/accounts/payments-and-plans/controller.js","vosaic/accounts/payments-and-plans/route.js","vosaic/accounts/payments-and-plans/template.js","vosaic/accounts/purchase/controller.js","vosaic/accounts/purchase/payment/controller.js","vosaic/accounts/purchase/payment/route.js","vosaic/accounts/purchase/payment/template.js","vosaic/accounts/purchase/route.js","vosaic/accounts/purchase/template.js","vosaic/accounts/route.js","vosaic/accounts/saml/controller.js","vosaic/accounts/saml/route.js","vosaic/accounts/saml/template.js","vosaic/accounts/template.js","vosaic/accounts/verify-email/controller.js","vosaic/accounts/verify-email/route.js","vosaic/accounts/verify-email/template.js","vosaic/adapters/aicoach-configuration.js","vosaic/adapters/aicoach.js","vosaic/adapters/annotation.js","vosaic/adapters/application.js","vosaic/adapters/button.js","vosaic/adapters/folder.js","vosaic/adapters/form.js","vosaic/adapters/grade.js","vosaic/adapters/line-item.js","vosaic/adapters/org-engagement.js","vosaic/adapters/organization.js","vosaic/adapters/pricing-tier.js","vosaic/adapters/prompt.js","vosaic/adapters/saml-configuration.js","vosaic/adapters/speaker.js","vosaic/adapters/supporting-document.js","vosaic/adapters/transcript-part.js","vosaic/adapters/usermoment.js","vosaic/adapters/userprofile.js","vosaic/adapters/video-comment.js","vosaic/adapters/video-view-track.js","vosaic/app.js","vosaic/application/controller.js","vosaic/application/template.js","vosaic/auth/controller.js","vosaic/auth/route.js","vosaic/auth/template.js","vosaic/authenticators/lti.js","vosaic/authenticators/oauth2expires.js","vosaic/authenticators/oauth2manual-refresh-exp.js","vosaic/authenticators/oauth2manual-refresh.js","vosaic/authenticators/oauth2refresh.js","vosaic/authenticators/oidc-token.js","vosaic/authenticators/org-refresh.js","vosaic/authenticators/saml.js","vosaic/component-managers/glimmer.js","vosaic/components/_register-view.js","vosaic/components/account-type-badge/index.js","vosaic/components/accounts-basic-information-view/index.js","vosaic/components/accounts-change-password-view/index.js","vosaic/components/accounts-reset-password-view/index.js","vosaic/components/ai-goals/index.js","vosaic/components/ai-mate-summary/index.js","vosaic/components/ai-report-grid/index.js","vosaic/components/alert-form-errors/index.js","vosaic/components/basic-dropdown-content.js","vosaic/components/basic-dropdown-trigger.js","vosaic/components/basic-dropdown-wormhole.js","vosaic/components/basic-dropdown.js","vosaic/components/button-color-choice/index.js","vosaic/components/button-with-dropdown-item/index.js","vosaic/components/button-with-dropdown/index.js","vosaic/components/cmodal-confirm-action/index.js","vosaic/components/cmodal-delete-all-moments/index.js","vosaic/components/cmodal-delete-button/index.js","vosaic/components/cmodal-delete-moment-with-annotations/index.js","vosaic/components/cmodal-delete-org-warning/index.js","vosaic/components/cmodal-delete-video-warning/index.js","vosaic/components/cmodal-form-change-warning/index.js","vosaic/components/cmodal-share-private-form-warning/index.js","vosaic/components/cmodal-too-many-buttons/index.js","vosaic/components/content-editable.js","vosaic/components/custom-learner-group-add-users/index.js","vosaic/components/custom-learner-group-list-item-member/index.js","vosaic/components/custom-learner-group-list-item/index.js","vosaic/components/draggable-object-target.js","vosaic/components/draggable-object.js","vosaic/components/drawer-help/index.js","vosaic/components/editable-text/index.js","vosaic/components/ember-power-select.js","vosaic/components/engagement-summary-cards/index.js","vosaic/components/expiration-notification/index.js","vosaic/components/file-dropzone.js","vosaic/components/filter-by-date/index.js","vosaic/components/form-button-lister/index.js","vosaic/components/form-filters/index.js","vosaic/components/goals-report/index.js","vosaic/components/group-filters/index.js","vosaic/components/group-list/index.js","vosaic/components/group-selector/index.js","vosaic/components/input-button-dropdown-item/index.js","vosaic/components/input-button-dropdown/index.js","vosaic/components/input-button/index.js","vosaic/components/input-check-radio/index.js","vosaic/components/input-component/index.js","vosaic/components/lti-autocreate-users/index.js","vosaic/components/lti-deeplink-grade/index.js","vosaic/components/lti-edit/index.js","vosaic/components/make-payment/index.js","vosaic/components/marked-momnets-charts/index.js","vosaic/components/modal-add-annotation/index.js","vosaic/components/modal-add-video-to-folder/index.js","vosaic/components/modal-auto-code/index.js","vosaic/components/modal-batch-upload/index.js","vosaic/components/modal-bulk-confirm-delete/index.js","vosaic/components/modal-bulk-edit/index.js","vosaic/components/modal-categories/index.js","vosaic/components/modal-compilation-video/index.js","vosaic/components/modal-confirm-delete/index.js","vosaic/components/modal-context/index.js","vosaic/components/modal-corrupted-video/index.js","vosaic/components/modal-delete-all-video-moments/index.js","vosaic/components/modal-delete-folder/index.js","vosaic/components/modal-download-csv/index.js","vosaic/components/modal-download-pdf/index.js","vosaic/components/modal-due-date/index.js","vosaic/components/modal-edit-button/index.js","vosaic/components/modal-edit-folder/index.js","vosaic/components/modal-edit-prompt/index.js","vosaic/components/modal-edit-video/index.js","vosaic/components/modal-generic-confirm-delete/index.js","vosaic/components/modal-global-prompt-multiselect/index.js","vosaic/components/modal-goal-review/index.js","vosaic/components/modal-group-change-warning/index.js","vosaic/components/modal-group-confirm-delete/index.js","vosaic/components/modal-import-xml/index.js","vosaic/components/modal-logout-notice/index.js","vosaic/components/modal-manage-domain-blacklist/index.js","vosaic/components/modal-more-info/index.js","vosaic/components/modal-org-expired/index.js","vosaic/components/modal-org-users/index.js","vosaic/components/modal-pick-cameras/index.js","vosaic/components/modal-print-quote/index.js","vosaic/components/modal-project-add-folder/index.js","vosaic/components/modal-project-sharing/index.js","vosaic/components/modal-project-video-sharing/index.js","vosaic/components/modal-purchase-users/index.js","vosaic/components/modal-renew-warning/index.js","vosaic/components/modal-report-warning/index.js","vosaic/components/modal-request-info/index.js","vosaic/components/modal-request-invoice/index.js","vosaic/components/modal-run-goal-analysis/index.js","vosaic/components/modal-save-form-as/index.js","vosaic/components/modal-save-moment-error/index.js","vosaic/components/modal-schedule-meeting/index.js","vosaic/components/modal-send-email/index.js","vosaic/components/modal-share-folder/index.js","vosaic/components/modal-share-goal/index.js","vosaic/components/modal-share-with-group/index.js","vosaic/components/modal-share-with-users/index.js","vosaic/components/modal-stitch-video/index.js","vosaic/components/modal-upload/index.js","vosaic/components/modal-users-batch-upload/index.js","vosaic/components/modal-video-list-download/index.js","vosaic/components/modal-video-play/index.js","vosaic/components/modal-video-processing/index.js","vosaic/components/modal-video-uploading/index.js","vosaic/components/modal-video-views/index.js","vosaic/components/modal-watch-hotkeys/index.js","vosaic/components/model-not-found/index.js","vosaic/components/moment-annotation/index.js","vosaic/components/moment-display-name/index.js","vosaic/components/moment-tag/index.js","vosaic/components/org-email-domains-field/index.js","vosaic/components/org-engagement-table/index.js","vosaic/components/org-list-edit/index.js","vosaic/components/org-list/index.js","vosaic/components/org-switcher/index.js","vosaic/components/org-usages/index.js","vosaic/components/org-user-edit/index.js","vosaic/components/org-user-filters/index.js","vosaic/components/org-user-list/index.js","vosaic/components/paid-seats-summary/index.js","vosaic/components/power-select-multiple.js","vosaic/components/power-select-multiple/input.js","vosaic/components/power-select-multiple/trigger.js","vosaic/components/power-select.js","vosaic/components/power-select/before-options.js","vosaic/components/power-select/input.js","vosaic/components/power-select/label.js","vosaic/components/power-select/no-matches-message.js","vosaic/components/power-select/options.js","vosaic/components/power-select/placeholder.js","vosaic/components/power-select/power-select-group.js","vosaic/components/power-select/search-message.js","vosaic/components/power-select/trigger.js","vosaic/components/project-browser/index.js","vosaic/components/project-list-item/index.js","vosaic/components/project-list/index.js","vosaic/components/prompt-lister/index.js","vosaic/components/query-report-graph/index.js","vosaic/components/register-view/index.js","vosaic/components/renew-thanks/index.js","vosaic/components/report-grid-competency-matrix/index.js","vosaic/components/report-grid-observer-summary/index.js","vosaic/components/report-grid-program-summary/index.js","vosaic/components/report-grid/index.js","vosaic/components/report-subnav-editor/index.js","vosaic/components/saml-signup-view/index.js","vosaic/components/search-filter-status/index.js","vosaic/components/sortable-objects.js","vosaic/components/speaker-row/index.js","vosaic/components/speaker-stats/index.js","vosaic/components/supporting-documents-list/index.js","vosaic/components/tab-navigation/index.js","vosaic/components/textarea-component/index.js","vosaic/components/timeline-visibility-settings/index.js","vosaic/components/top-nav/index.js","vosaic/components/transcript-part/index.js","vosaic/components/trial-promo/index.js","vosaic/components/user-selector/index.js","vosaic/components/video-comments/index.js","vosaic/components/video-dashboard-graph/index.js","vosaic/components/video-dashboard-report-grid/index.js","vosaic/components/video-filter-toolbar/index.js","vosaic/components/video-folder-view/index.js","vosaic/components/video-grade/index.js","vosaic/components/video-index-action-btn/index.js","vosaic/components/video-list-view/index.js","vosaic/components/video-live-player/index.js","vosaic/components/video-not-found/index.js","vosaic/components/video-object-comment/index.js","vosaic/components/video-object/index.js","vosaic/components/video-player-button/index.js","vosaic/components/video-player-comment/index.js","vosaic/components/video-player-form-button/index.js","vosaic/components/video-player-form-nav/index.js","vosaic/components/video-player-moment-item/index.js","vosaic/components/video-player-moments/index.js","vosaic/components/video-player-playhead-thumb/index.js","vosaic/components/video-player-preload-bar/index.js","vosaic/components/video-player-sidebar/index.js","vosaic/components/video-player-timeline-moment-z/index.js","vosaic/components/video-player-timeline-z/index.js","vosaic/components/video-player-volume/index.js","vosaic/components/video-player-zoom-thumb/index.js","vosaic/components/video-player/index.js","vosaic/components/video-recorder-device-select/index.js","vosaic/components/video-seek/index.js","vosaic/components/video-stats/index.js","vosaic/components/video-status/index.js","vosaic/components/video-transcript-preview/index.js","vosaic/components/video-upload-view/index.js","vosaic/components/videos-index-view/index.js","vosaic/components/videos-new-view/index.js","vosaic/components/videos-view/index.js","vosaic/components/vosaic-multiselect-checkboxes/index.js","vosaic/components/x-option/index.js","vosaic/components/x-select/index.js","vosaic/confirm-email/confirm/controller.js","vosaic/confirm-email/confirm/route.js","vosaic/confirm-email/confirm/template.js","vosaic/confirm-email/send/controller.js","vosaic/confirm-email/send/route.js","vosaic/confirm-email/send/template.js","vosaic/constants.js","vosaic/controllers/videos/deleted.js","vosaic/data-adapter.js","vosaic/date-helpers/service.js","vosaic/decorators/model-validator.js","vosaic/decorators/object-validator.js","vosaic/deprecation-workflow.js","vosaic/devtest/route.js","vosaic/devtest/template.js","vosaic/devtest/zoomticks/controller.js","vosaic/devtest/zoomticks/route.js","vosaic/devtest/zoomticks/template.js","vosaic/ember-web-api/adapters/web-api.js","vosaic/ember-web-api/serializers/web-api.js","vosaic/forms/controller.js","vosaic/forms/edit/controller.js","vosaic/forms/edit/route.js","vosaic/forms/edit/template.js","vosaic/forms/not-found/controller.js","vosaic/forms/not-found/route.js","vosaic/forms/not-found/template.js","vosaic/forms/route.js","vosaic/forms/template.js","vosaic/groups/controller.js","vosaic/groups/edit/controller.js","vosaic/groups/edit/route.js","vosaic/groups/edit/template.js","vosaic/groups/new/controller.js","vosaic/groups/new/route.js","vosaic/groups/new/template.js","vosaic/groups/not-found/controller.js","vosaic/groups/not-found/route.js","vosaic/groups/not-found/template.js","vosaic/groups/route.js","vosaic/groups/template.js","vosaic/helper-objects/moment-bundle.js","vosaic/helper-objects/record-model.js","vosaic/helper-objects/upload-model.js","vosaic/helper-objects/view-model.js","vosaic/helpers/-base.js","vosaic/helpers/and.js","vosaic/helpers/animated-svg.js","vosaic/helpers/app-version.js","vosaic/helpers/array-contains.js","vosaic/helpers/assign.js","vosaic/helpers/disable-edit-role.js","vosaic/helpers/display-group-names.js","vosaic/helpers/duration-format.js","vosaic/helpers/element.js","vosaic/helpers/ember-power-select-is-equal.js","vosaic/helpers/ember-power-select-is-group.js","vosaic/helpers/ember-power-select-is-selected-present.js","vosaic/helpers/encode-uri-component.js","vosaic/helpers/ensure-safe-component.js","vosaic/helpers/eq.js","vosaic/helpers/equal.js","vosaic/helpers/feature-flag.js","vosaic/helpers/file-queue.js","vosaic/helpers/format-money.js","vosaic/helpers/format-number.js","vosaic/helpers/get-aria-current.js","vosaic/helpers/get-folder-owner.js","vosaic/helpers/get-form-owner.js","vosaic/helpers/greater.js","vosaic/helpers/gt.js","vosaic/helpers/gte.js","vosaic/helpers/html-safe.js","vosaic/helpers/id-display-name.js","vosaic/helpers/if-not-last.js","vosaic/helpers/is-after.js","vosaic/helpers/is-array.js","vosaic/helpers/is-before.js","vosaic/helpers/is-between.js","vosaic/helpers/is-empty.js","vosaic/helpers/is-equal.js","vosaic/helpers/is-same-or-after.js","vosaic/helpers/is-same-or-before.js","vosaic/helpers/is-same.js","vosaic/helpers/less-than.js","vosaic/helpers/lt.js","vosaic/helpers/lte.js","vosaic/helpers/moment-add.js","vosaic/helpers/moment-calendar.js","vosaic/helpers/moment-counter.js","vosaic/helpers/moment-diff.js","vosaic/helpers/moment-duration.js","vosaic/helpers/moment-format.js","vosaic/helpers/moment-from-now.js","vosaic/helpers/moment-from.js","vosaic/helpers/moment-subtract.js","vosaic/helpers/moment-to-date.js","vosaic/helpers/moment-to-now.js","vosaic/helpers/moment-to.js","vosaic/helpers/moment.js","vosaic/helpers/not-eq.js","vosaic/helpers/not.js","vosaic/helpers/now.js","vosaic/helpers/one-index.js","vosaic/helpers/or.js","vosaic/helpers/page-title.js","vosaic/helpers/pluralize.js","vosaic/helpers/safe-style.js","vosaic/helpers/singularize.js","vosaic/helpers/string-if-true.js","vosaic/helpers/svg-with-base.js","vosaic/helpers/unix.js","vosaic/helpers/utc.js","vosaic/helpers/video-status-display.js","vosaic/helpers/xor.js","vosaic/initializers/app-version.js","vosaic/initializers/coordinator-setup.js","vosaic/initializers/ember-data.js","vosaic/initializers/ember-simple-auth.js","vosaic/initializers/model-locale.js","vosaic/initializers/register-version.js","vosaic/initializers/vosaic-store.js","vosaic/instance-initializers/global-error-handler.js","vosaic/instance-initializers/idle-timeout.js","vosaic/live/controller.js","vosaic/live/route.js","vosaic/live/template.js","vosaic/login/forgot-password-sent/route.js","vosaic/login/forgot-password-sent/template.js","vosaic/login/forgot-password/controller.js","vosaic/login/forgot-password/route.js","vosaic/login/forgot-password/template.js","vosaic/login/index/controller.js","vosaic/login/index/route.js","vosaic/login/index/template.js","vosaic/lti/confirm/controller.js","vosaic/lti/confirm/route.js","vosaic/lti/confirm/template.js","vosaic/lti/controller.js","vosaic/lti/deeplinking/controller.js","vosaic/lti/deeplinking/route.js","vosaic/lti/deeplinking/template.js","vosaic/lti/register/controller.js","vosaic/lti/register/route.js","vosaic/lti/register/template.js","vosaic/lti/route.js","vosaic/mixins/google-pageview.js","vosaic/models/account.js","vosaic/models/aicoach-configuration.js","vosaic/models/aicoach.js","vosaic/models/annotation.js","vosaic/models/appinfo.js","vosaic/models/button.js","vosaic/models/category.js","vosaic/models/code.js","vosaic/models/domain-blacklist.js","vosaic/models/feature.js","vosaic/models/folder.js","vosaic/models/form.js","vosaic/models/goal.js","vosaic/models/grade.js","vosaic/models/group.js","vosaic/models/industry.js","vosaic/models/line-item.js","vosaic/models/lti-configuration.js","vosaic/models/moment.js","vosaic/models/org-engagement.js","vosaic/models/organization.js","vosaic/models/password.js","vosaic/models/payment.js","vosaic/models/paymentspring-renew.js","vosaic/models/permission.js","vosaic/models/pricing-plan-detail.js","vosaic/models/pricing-plan.js","vosaic/models/pricing-tier.js","vosaic/models/project.js","vosaic/models/prompt.js","vosaic/models/report.js","vosaic/models/saml-configuration.js","vosaic/models/speaker.js","vosaic/models/supporting-document.js","vosaic/models/tag.js","vosaic/models/threshold.js","vosaic/models/transcript-part.js","vosaic/models/transcript.js","vosaic/models/user.js","vosaic/models/usermoment.js","vosaic/models/userprofile.js","vosaic/models/video-comment.js","vosaic/models/video-view-track.js","vosaic/models/video.js","vosaic/modifiers/basic-dropdown-trigger.js","vosaic/modifiers/content-editable.js","vosaic/modifiers/did-insert.js","vosaic/modifiers/did-update.js","vosaic/modifiers/on-overflow-y.js","vosaic/modifiers/setup-calendly.js","vosaic/modifiers/style.js","vosaic/modifiers/trap-modal-focus.js","vosaic/modifiers/will-destroy.js","vosaic/not-found/route.js","vosaic/not-found/template.js","vosaic/password/reset/controller.js","vosaic/password/reset/route.js","vosaic/password/reset/template.js","vosaic/projects/controller.js","vosaic/projects/edit/controller.js","vosaic/projects/edit/route.js","vosaic/projects/edit/template.js","vosaic/projects/new/controller.js","vosaic/projects/new/route.js","vosaic/projects/new/template.js","vosaic/projects/not-found/controller.js","vosaic/projects/not-found/template.js","vosaic/projects/route.js","vosaic/projects/template.js","vosaic/register/controller.js","vosaic/register/route.js","vosaic/register/template.js","vosaic/reports/ai-report/controller.js","vosaic/reports/ai-report/route.js","vosaic/reports/ai-report/template.js","vosaic/reports/controller.js","vosaic/reports/dashboard/controller.js","vosaic/reports/dashboard/route.js","vosaic/reports/dashboard/template.js","vosaic/reports/new/controller.js","vosaic/reports/new/route.js","vosaic/reports/new/template.js","vosaic/reports/route.js","vosaic/reports/template.js","vosaic/reports/view/controller.js","vosaic/reports/view/route.js","vosaic/reports/view/template.js","vosaic/router.js","vosaic/routes/application.js","vosaic/routes/index.js","vosaic/routes/login.js","vosaic/routes/logout.js","vosaic/sales/controller.js","vosaic/sales/dashboard/controller.js","vosaic/sales/dashboard/route.js","vosaic/sales/dashboard/template.js","vosaic/sales/edit/controller.js","vosaic/sales/edit/route.js","vosaic/sales/edit/template.js","vosaic/sales/engagement/controller.js","vosaic/sales/engagement/route.js","vosaic/sales/engagement/template.js","vosaic/sales/new/controller.js","vosaic/sales/new/route.js","vosaic/sales/new/template.js","vosaic/sales/route.js","vosaic/sales/template.js","vosaic/serializers/application.js","vosaic/serializers/button.js","vosaic/serializers/org-engagement.js","vosaic/serializers/organization.js","vosaic/serializers/video.js","vosaic/services/-ensure-registered.js","vosaic/services/accessible-tabs.js","vosaic/services/account-suspension.js","vosaic/services/ai-access.js","vosaic/services/annotation-state.js","vosaic/services/authorizer.js","vosaic/services/button-suggester.js","vosaic/services/can-i.js","vosaic/services/can-org.js","vosaic/services/constants.js","vosaic/services/cookies.js","vosaic/services/current-user.js","vosaic/services/drag-coordinator.js","vosaic/services/dropdown.js","vosaic/services/duration-guesser.js","vosaic/services/error-extractor.js","vosaic/services/error-janitor.js","vosaic/services/export-data.js","vosaic/services/export-poller.js","vosaic/services/features.js","vosaic/services/file-importer.js","vosaic/services/file-queue.js","vosaic/services/file-reader.js","vosaic/services/focus-trap.js","vosaic/services/form-helper.js","vosaic/services/hotkey.js","vosaic/services/idle-timeout.js","vosaic/services/indexed-db.js","vosaic/services/live-streaming.js","vosaic/services/login-success.js","vosaic/services/manage-dropdowns.js","vosaic/services/modal-helper.js","vosaic/services/model-reloader.js","vosaic/services/moment-manager.js","vosaic/services/moment.js","vosaic/services/page-title.js","vosaic/services/playlist.js","vosaic/services/playstate-manager.js","vosaic/services/protected-route.js","vosaic/services/record-state-manager.js","vosaic/services/renewal-manager.js","vosaic/services/require-email-confirmation.js","vosaic/services/return-focus.js","vosaic/services/role-checker.js","vosaic/services/route-permission-checker.js","vosaic/services/saml-configuration.js","vosaic/services/scroll-helper.js","vosaic/services/session.js","vosaic/services/sockets.js","vosaic/services/store.js","vosaic/services/string-decoder.js","vosaic/services/string-generator.js","vosaic/services/subscription-expiry.js","vosaic/services/superadmin-impersonate.js","vosaic/services/tick-counter.js","vosaic/services/toggle-show.js","vosaic/services/token-awaiter.js","vosaic/services/token-memory.js","vosaic/services/transcript-poller.js","vosaic/services/update-notifier.js","vosaic/services/upload-credentials.js","vosaic/services/user-badge.js","vosaic/services/video-transcode-status.js","vosaic/services/video-uploader.js","vosaic/services/videos-filter-helper.js","vosaic/services/voice-helpers.js","vosaic/session-stores/application.js","vosaic/templates/components/payment-heading.js","vosaic/templates/index.js","vosaic/templates/logout.js","vosaic/templates/videos-loading.js","vosaic/transforms/boolean.js","vosaic/transforms/date-only.js","vosaic/transforms/date.js","vosaic/transforms/number.js","vosaic/transforms/string.js","vosaic/tutorials/controller.js","vosaic/tutorials/route.js","vosaic/tutorials/template.js","vosaic/tutorials/watch/route.js","vosaic/tutorials/watch/template.js","vosaic/users/controller.js","vosaic/users/edit/controller.js","vosaic/users/edit/route.js","vosaic/users/edit/template.js","vosaic/users/new/controller.js","vosaic/users/new/route.js","vosaic/users/new/template.js","vosaic/users/not-found/controller.js","vosaic/users/not-found/route.js","vosaic/users/not-found/template.js","vosaic/users/route.js","vosaic/users/template.js","vosaic/utils/consume-new-report-filter-visibility.js","vosaic/utils/email-domains.js","vosaic/utils/inject.js","vosaic/utils/is-fastboot.js","vosaic/utils/location.js","vosaic/utils/objects-are-equal.js","vosaic/utils/search-match.js","vosaic/utils/timeline-visibility-copy.js","vosaic/videos/controller.js","vosaic/videos/deleted/route.js","vosaic/videos/deleted/template.js","vosaic/videos/new/controller.js","vosaic/videos/new/route.js","vosaic/videos/new/template.js","vosaic/videos/not-found/route.js","vosaic/videos/not-found/template.js","vosaic/videos/route.js","vosaic/videos/template.js","vosaic/videos/upload/controller.js","vosaic/videos/upload/route.js","vosaic/videos/upload/template.js","vosaic/videos/view/controller.js","vosaic/videos/view/route.js","vosaic/videos/view/template.js","vosaic/watch/controller.js","vosaic/watch/route.js","vosaic/watch/template.js","vosaic/watch/withai/controller.js","vosaic/watch/withai/route.js","vosaic/watch/withai/template.js","vosaic/watch/withform/controller.js","vosaic/watch/withform/route.js","vosaic/watch/withform/template.js","vosaic/watch/withmoments/controller.js","vosaic/watch/withmoments/playlist/controller.js","vosaic/watch/withmoments/playlist/route.js","vosaic/watch/withmoments/route.js","vosaic/watch/withmoments/template.js","vosaic/watch/withtranscript/controller.js","vosaic/watch/withtranscript/route.js","vosaic/watch/withtranscript/template.js","vendor/ember-cli/app-suffix.js","vendor/ember-cli/app-config.js","vendor/ember-cli/app-boot.js"],"sourcesContent":["'use strict';\n\n\n","define(\"vosaic/about/route\", [\"exports\", \"@ember/routing/route\", \"@ember/service\"], function (_exports, _route, _service) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let AboutRoute = _exports.default = (_class = class AboutRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"store\", _descriptor, this);\n }\n model() {\n const info = this.store.findRecord('appinfo', 'about');\n return info;\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/about/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n {{page-title 'About'}}\n \n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Build Date{{moment-format @model.buildDate 'M/DD/YY h:mm a'}}
Version{{@model.fullVersion}}
VCS Version{{@model.vcsRevision}}
\n \n
\n
\n
\n {{outlet}}\n */\n {\n \"id\": \"LKcJukl7\",\n \"block\": \"[[[1,[28,[35,0],[\\\"About\\\"],null]],[1,\\\"\\\\n\\\"],[8,[39,1],null,null,null],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"navbar subnav-bar\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h1\\\"],[12],[1,\\\"About Vosaic \\\"],[1,[30,1,[\\\"versionMajor\\\"]]],[1,\\\".\\\"],[1,[30,1,[\\\"versionMinor\\\"]]],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"row fill-row main-section\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-md-5\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"p-t-md\\\"],[12],[1,\\\"\\\\n\\\\n \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-condensed table-striped\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,\\\"Build Date\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,8],[[30,1,[\\\"buildDate\\\"]],\\\"M/DD/YY h:mm a\\\"],null]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,\\\"Version\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,[30,1,[\\\"fullVersion\\\"]]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,\\\"VCS Version\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,[30,1,[\\\"vcsRevision\\\"]]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"ul\\\"],[14,0,\\\"nav nav-inline small\\\"],[12],[10,\\\"li\\\"],[14,0,\\\"nav-item\\\"],[12],[1,\\\"\\\\n\\\"],[10,3],[14,0,\\\"nav-link\\\"],[14,6,\\\"https://vosaic.com/page/accessibility-statement-for-vosaic-connect-web-application\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noopener noreferrer\\\"],[12],[1,\\\" Accessibility Statement\\\"],[13],[13],[10,\\\"li\\\"],[14,0,\\\"nav-item\\\"],[12],[1,\\\"\\\\n\\\"],[10,3],[14,0,\\\"nav-link\\\"],[14,6,\\\"https://vosaic.com/page/vosaic-privacy-statement\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noopener noreferrer\\\"],[12],[1,\\\" Vosaic Privacy Statement\\\"],[13],[13],[10,\\\"li\\\"],[14,0,\\\"nav-item\\\"],[12],[1,\\\"\\\\n\\\"],[10,3],[14,0,\\\"nav-link\\\"],[14,6,\\\"https://vosaic.com/page/terms-of-use\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noopener noreferrer\\\"],[12],[1,\\\" Terms of Use\\\"],[13],[13],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[46,[28,[37,13],null,null],null,null,null]],[\\\"@model\\\"],[\\\"page-title\\\",\\\"top-nav\\\",\\\"div\\\",\\\"h1\\\",\\\"table\\\",\\\"tbody\\\",\\\"tr\\\",\\\"td\\\",\\\"moment-format\\\",\\\"ul\\\",\\\"li\\\",\\\"a\\\",\\\"component\\\",\\\"-outlet\\\"]]\",\n \"moduleName\": \"vosaic/about/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accept-invitation/controller\", [\"exports\", \"@ember/controller\", \"@ember/object\", \"vosaic/config/environment\", \"@glimmer/tracking\", \"@ember/service\"], function (_exports, _controller, _object, _environment, _tracking, _service) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/object\",0,\"vosaic/config/environment\",0,\"@glimmer/tracking\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let AcceptInvitationController = _exports.default = (_class = class AcceptInvitationController extends _controller.default {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"queryParams\", ['token', 'userName']);\n _initializerDefineProperty(this, \"session\", _descriptor, this);\n _initializerDefineProperty(this, \"errorExtractor\", _descriptor2, this);\n _initializerDefineProperty(this, \"router\", _descriptor3, this);\n _initializerDefineProperty(this, \"loginSuccess\", _descriptor4, this);\n _initializerDefineProperty(this, \"hasClicked\", _descriptor5, this);\n _initializerDefineProperty(this, \"lengthGreaterThan12\", _descriptor6, this);\n _initializerDefineProperty(this, \"includesLowercase\", _descriptor7, this);\n _initializerDefineProperty(this, \"includesUppercase\", _descriptor8, this);\n _initializerDefineProperty(this, \"includesNumber\", _descriptor9, this);\n _initializerDefineProperty(this, \"includesSpecialCharacter\", _descriptor0, this);\n }\n get invalidPassword() {\n return !(this.lengthGreaterThan12 && this.includesLowercase && this.includesUppercase && this.includesNumber && this.includesSpecialCharacter);\n }\n async login(login, password) {\n const authenticator = 'authenticator:oauth2refresh';\n this.session.authenticate(authenticator, login, password, [], {\n 'vos-is-web-app': 'true'\n }).then(this.loginSuccess.onAuthenticateSuccess()).catch(reason => {\n this.model.viewModel.errors.newPassword = reason.error_message || 'The username or password is incorrect';\n });\n // try {\n // await this.session.authenticate(authenticator, login, password);\n // this.router.transitionTo('videos');\n // } catch (reason) {\n // this.model.viewModel.errors.newPassword =\n // reason.error_message || 'The username or password is incorrect';\n // }\n }\n checkPassword(event) {\n const password = event.target.value;\n this.lengthGreaterThan12 = password.length >= 12 ? true : false;\n this.includesLowercase = /[a-z]/.test(password) ? true : false;\n this.includesUppercase = /[A-Z]/.test(password) ? true : false;\n this.includesNumber = /\\d/.test(password) ? true : false;\n this.includesSpecialCharacter = /[!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?]+/.test(password);\n }\n async setPasswordAndLogin(e) {\n e.preventDefault();\n if (!this.hasClicked) {\n this.hasClicked = true;\n if (!this.model.viewModel.hasSubmitted) {\n this.model.viewModel.hasSubmitted = true;\n }\n const baseUrl = (_environment.default.apiHost || '') + (_environment.default.apiNamespace || '');\n try {\n const response = await fetch(`${baseUrl}/accounts/password/reset`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n userName: encodeURIComponent(this.model.viewModel.userName),\n token: this.model.viewModel.token,\n newPassword: this.model.viewModel.newPassword,\n confirmPassword: this.model.viewModel.confirmPassword,\n acceptInviteReset: true\n })\n });\n if (!response.ok) {\n const badResponse = await response.json();\n this.hasClicked = false;\n this.model.viewModel.hasSubmitted = false;\n this.model.viewModel.loggingIn = false;\n const errors = this.errorExtractor.extractErrors(this.model.viewModel, badResponse);\n this.model.viewModel.errors = errors;\n } else {\n this.login(this.model.viewModel.userName, this.model.viewModel.newPassword);\n this.model.viewModel.loggingIn = true;\n }\n } catch (badResponse) {\n this.hasClicked = false;\n this.model.viewModel.hasSubmitted = false;\n this.model.viewModel.loggingIn = false;\n const errors = this.errorExtractor.extractErrors(this.model.viewModel, badResponse.json());\n this.model.viewModel.errors = errors;\n }\n } else {\n return;\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"errorExtractor\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"loginSuccess\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"hasClicked\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"lengthGreaterThan12\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"includesLowercase\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"includesUppercase\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"includesNumber\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"includesSpecialCharacter\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"checkPassword\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"checkPassword\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setPasswordAndLogin\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setPasswordAndLogin\"), _class.prototype), _class);\n});","define(\"vosaic/accept-invitation/route\", [\"exports\", \"@ember/routing/route\", \"@glimmer/tracking\"], function (_exports, _route, _tracking) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\",0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let ViewModel = (_class = class ViewModel {\n constructor() {\n _initializerDefineProperty(this, \"hasClicked\", _descriptor, this);\n _initializerDefineProperty(this, \"hasSubmitted\", _descriptor2, this);\n _initializerDefineProperty(this, \"loggingIn\", _descriptor3, this);\n _initializerDefineProperty(this, \"token\", _descriptor4, this);\n _initializerDefineProperty(this, \"userName\", _descriptor5, this);\n _initializerDefineProperty(this, \"newPassword\", _descriptor6, this);\n _initializerDefineProperty(this, \"confirmPassword\", _descriptor7, this);\n _initializerDefineProperty(this, \"errors\", _descriptor8, this);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"hasClicked\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"hasSubmitted\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"loggingIn\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"token\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return '';\n }\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"userName\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return '';\n }\n }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"newPassword\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return '';\n }\n }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"confirmPassword\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return '';\n }\n }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"errors\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return {};\n }\n }), _class);\n class AcceptInvitationRoute extends _route.default {\n async model(params) {\n const viewModel = new ViewModel();\n viewModel.token = params.token;\n viewModel.userName = params.userName;\n return {\n viewModel: viewModel\n };\n }\n }\n _exports.default = AcceptInvitationRoute;\n});","define(\"vosaic/accept-invitation/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n
\n \n
\n \n
\n \n

NOTE: For best experience use Google Chrome browser.

\n
\n {{#if this.model.viewModel.errors.token }}\n
\n {{this.model.viewModel.errors.token}}\n
\n {{else}}\n
\n

\n IMPORTANT: Password must be:\n

\n
\n
{{#if this.lengthGreaterThan12}}✓{{else}}✗{{/if}} Minimum 12 characters long
\n
{{#if this.includesLowercase}}✓{{else}}✗{{/if}} Have at least 1 uppercase letter
\n
{{#if this.includesUppercase}}✓{{else}}✗{{/if}} Have at least 1 lowercase letter
\n
{{#if this.includesNumber}}✓{{else}}✗{{/if}} Have at least 1 number
\n
{{#if this.includesSpecialCharacter}}✓{{else}}✗{{/if}} Have at least 1 special character
\n
\n
\n \n \n \n \n {{/if}}\n
\n \n {{#unless this.model.viewModel.errors.token}}\n {{#if this.model.viewModel.hasSubmitted}}\n {{#if this.model.viewModel.loggingIn}}\n \n {{else}}\n \n {{/if}}\n {{else}}\n
\n \n
\n {{/if}}\n {{/unless}}\n
\n
\n
\n {{outlet}}\n \n */\n {\n \"id\": \"MubSPuLY\",\n \"block\": \"[[[10,0],[14,0,\\\"static-bg\\\"],[14,5,\\\"background-image: url(../assets/images/login-bg.jpg)\\\"],[12],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"static-bg-item\\\"],[12],[1,\\\"\\\\n \\\"],[10,3],[14,6,\\\"../\\\"],[14,0,\\\"m-t-lg m-b-md center-block svg-logo logo-mark-lg\\\"],[12],[13],[1,\\\"\\\\n \\\"],[11,\\\"form\\\"],[24,0,\\\"card card-block center-block transparent-bg p-t-md p-b-md\\\"],[24,5,\\\"max-width: 32rem;\\\"],[4,[38,3],[\\\"submit\\\",[30,0,[\\\"setPasswordAndLogin\\\"]]],null],[12],[1,\\\"\\\\n\\\\n \\\"],[10,2],[14,0,\\\"show-on-ie text-xs-center p-t-none p-b-sm\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"NOTE:\\\"],[13],[1,\\\" For best experience use \\\"],[10,3],[14,6,\\\"https://www.google.com/chrome/browser/desktop/index.html\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noopener noreferrer\\\"],[12],[1,\\\"Google Chrome\\\"],[13],[1,\\\" browser.\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"model\\\",\\\"viewModel\\\",\\\"errors\\\",\\\"token\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"alert alert-danger m-x-md m-b-none\\\"],[12],[1,\\\"\\\\n \\\"],[1,[30,0,[\\\"model\\\",\\\"viewModel\\\",\\\"errors\\\",\\\"token\\\"]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"col-xs-12\\\"],[12],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small m-b-xxs\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"strong\\\"],[14,0,\\\"label label-danger\\\"],[12],[1,\\\"IMPORTANT:\\\"],[13],[1,\\\" \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Password must be:\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row small m-b-sm\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12 col-sm-6\\\"],[12],[41,[30,0,[\\\"lengthGreaterThan12\\\"]],[[[10,1],[14,0,\\\"text-success\\\"],[12],[1,\\\"✓\\\"],[13]],[]],[[[10,1],[14,0,\\\"text-danger\\\"],[12],[1,\\\"✗\\\"],[13]],[]]],[1,\\\" Minimum \\\"],[10,\\\"strong\\\"],[12],[1,\\\"12 characters\\\"],[13],[1,\\\" long\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12 col-sm-6\\\"],[12],[41,[30,0,[\\\"includesLowercase\\\"]],[[[10,1],[14,0,\\\"text-success\\\"],[12],[1,\\\"✓\\\"],[13]],[]],[[[10,1],[14,0,\\\"text-danger\\\"],[12],[1,\\\"✗\\\"],[13]],[]]],[1,\\\" Have at least \\\"],[10,\\\"strong\\\"],[12],[1,\\\"1 uppercase\\\"],[13],[1,\\\" letter\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12 col-sm-6\\\"],[12],[41,[30,0,[\\\"includesUppercase\\\"]],[[[10,1],[14,0,\\\"text-success\\\"],[12],[1,\\\"✓\\\"],[13]],[]],[[[10,1],[14,0,\\\"text-danger\\\"],[12],[1,\\\"✗\\\"],[13]],[]]],[1,\\\" Have at least \\\"],[10,\\\"strong\\\"],[12],[1,\\\"1 lowercase\\\"],[13],[1,\\\" letter\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12 col-sm-6\\\"],[12],[41,[30,0,[\\\"includesNumber\\\"]],[[[10,1],[14,0,\\\"text-success\\\"],[12],[1,\\\"✓\\\"],[13]],[]],[[[10,1],[14,0,\\\"text-danger\\\"],[12],[1,\\\"✗\\\"],[13]],[]]],[1,\\\" Have at least \\\"],[10,\\\"strong\\\"],[12],[1,\\\"1 number\\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12 col-sm-6\\\"],[12],[41,[30,0,[\\\"includesSpecialCharacter\\\"]],[[[10,1],[14,0,\\\"text-success\\\"],[12],[1,\\\"✓\\\"],[13]],[]],[[[10,1],[14,0,\\\"text-danger\\\"],[12],[1,\\\"✗\\\"],[13]],[]]],[1,\\\" Have at least \\\"],[10,\\\"strong\\\"],[12],[1,\\\"1 special character\\\"],[13],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,8],null,[[\\\"@type\\\",\\\"@class\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@errors\\\",\\\"@onValueChange\\\",\\\"@keyUpAction\\\"],[\\\"password\\\",\\\"col-xs-12 p-l-none p-r-none\\\",\\\"New Password\\\",\\\"New Password\\\",\\\"new-password\\\",[30,0,[\\\"model\\\",\\\"viewModel\\\",\\\"newPassword\\\"]],[30,0,[\\\"model\\\",\\\"viewModel\\\",\\\"errors\\\",\\\"password\\\"]],[28,[37,9],[[28,[37,10],[[30,0,[\\\"model\\\",\\\"viewModel\\\",\\\"newPassword\\\"]]],null]],null],[30,0,[\\\"checkPassword\\\"]]]],null],[1,\\\"\\\\n\\\\n \\\"],[8,[39,8],null,[[\\\"@type\\\",\\\"@class\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@errors\\\",\\\"@onValueChange\\\"],[\\\"password\\\",\\\"col-xs-12 p-l-none p-r-none\\\",\\\"Re-Enter Password\\\",\\\"Re-Enter Password\\\",\\\"reenter-password\\\",[30,0,[\\\"model\\\",\\\"viewModel\\\",\\\"confirmPassword\\\"]],[30,0,[\\\"model\\\",\\\"viewModel\\\",\\\"errors\\\",\\\"password\\\"]],[28,[37,9],[[28,[37,10],[[30,0,[\\\"model\\\",\\\"viewModel\\\",\\\"confirmPassword\\\"]]],null]],null]]],null],[1,\\\"\\\\n\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[51,[30,0,[\\\"model\\\",\\\"viewModel\\\",\\\"errors\\\",\\\"token\\\"]]],[[[41,[30,0,[\\\"model\\\",\\\"viewModel\\\",\\\"hasSubmitted\\\"]],[[[41,[30,0,[\\\"model\\\",\\\"viewModel\\\",\\\"loggingIn\\\"]],[[[1,\\\" \\\"],[10,\\\"button\\\"],[14,\\\"disabled\\\",\\\"\\\"],[14,0,\\\"btn btn-success btn-lg btn-block disabled show-action-icon\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Loader\\\"],[15,\\\"src\\\",[29,[\\\"/assets/icons/\\\",[28,[37,14],[\\\"logo-loader\\\"],null],\\\".svg\\\"]]],[14,0,\\\"btn-icon action-icon\\\"],[12],[13],[1,\\\" Logging In\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,\\\"button\\\"],[14,\\\"disabled\\\",\\\"\\\"],[14,0,\\\"btn btn-success btn-lg btn-block disabled show-action-icon\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Loader\\\"],[15,\\\"src\\\",[29,[\\\"/assets/icons/\\\",[28,[37,14],[\\\"logo-loader\\\"],null],\\\".svg\\\"]]],[14,0,\\\"btn-icon action-icon\\\"],[12],[13],[1,\\\" Please Wait\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"text-xs-right\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"button\\\"],[15,\\\"disabled\\\",[30,0,[\\\"invalidPassword\\\"]]],[14,0,\\\"btn btn-success btn-lg btn-block\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"Get Started with Vosaic\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[46,[28,[37,16],null,null],null,null,null],[1,\\\"\\\\n\\\"]],[],[\\\"div\\\",\\\"a\\\",\\\"form\\\",\\\"on\\\",\\\"p\\\",\\\"strong\\\",\\\"if\\\",\\\"span\\\",\\\"input-component\\\",\\\"fn\\\",\\\"mut\\\",\\\"unless\\\",\\\"button\\\",\\\"img\\\",\\\"animated-svg\\\",\\\"component\\\",\\\"-outlet\\\"]]\",\n \"moduleName\": \"vosaic/accept-invitation/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accept-payment/cc/controller\", [\"exports\", \"@ember/controller\"], function (_exports, _controller) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\"eaimeta@70e063a35619d71f\n class AcceptPaymentController extends _controller.default {}\n _exports.default = AcceptPaymentController;\n});","define(\"vosaic/accept-payment/cc/route\", [\"exports\", \"@ember/routing/route\", \"@ember/service\"], function (_exports, _route, _service) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let AcceptPaymentCcRoute = _exports.default = (_class = class AcceptPaymentCcRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"router\", _descriptor, this);\n }\n beforeModel(transition) {\n const queryParams = transition.to.queryParams;\n const iParam = queryParams.i;\n const iValue = iParam ? parseFloat(iParam) : 0;\n\n // if (iValue === 0) {\n // this.router.transitionTo('index'); // Redirect to the home page if no valid i parameter is provided\n // }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/accept-payment/cc/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n {{page-title \"Make a Payment\"}}\n
\n \n \n

Make a Payment

\n

This is a payment for Vosaic - a product of FACTS

\n
\n \n
\n \n \n {{!-- --}}\n \n
\n \n
\n \n
\n \n */\n {\n \"id\": \"99VkcHJk\",\n \"block\": \"[[[1,[28,[35,0],[\\\"Make a Payment\\\"],null]],[1,\\\"\\\\n\\\"],[10,\\\"main\\\"],[14,0,\\\" m-b-xxl\\\"],[12],[1,\\\"\\\\n \\\"],[10,3],[14,6,\\\"../\\\"],[14,0,\\\"m-t-lg m-b-md center-block svg-logo logo-mark-lg\\\"],[12],[10,1],[14,0,\\\"sr-only bg-white\\\"],[12],[1,\\\"Vosaic\\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,\\\"form\\\"],[14,0,\\\"card card-block center-block transparent-bg p-t-md p-b-lg\\\"],[14,5,\\\"max-width: 32rem;\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h1\\\"],[14,0,\\\"m-b-md text-xs-center display-5\\\"],[12],[1,\\\"Make a Payment\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"text-xs-center\\\"],[12],[1,\\\"This is a payment for \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Vosaic\\\"],[13],[1,\\\" - a product of FACTS\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"link\\\"],[14,\\\"rel\\\",\\\"stylesheet\\\"],[14,6,\\\"https://checkout.paymentspring.com/assets/application.css\\\"],[14,4,\\\"text/css\\\"],[12],[13],[1,\\\"\\\\n \\\"],[10,\\\"style\\\"],[12],[1,\\\"\\\\n .paymentspring-form .paymentspring-inline .paymentspring-container #card_number .input-group-addon .glyphicon {\\\\n top:13px;\\\\n right:5px;\\\\n }\\\\n .form-group {\\\\n margin-top: 0;\\\\n }\\\\n .paymentspring-form .paymentspring-overlay .paymentspring-container .paymentspring-sub-container, .paymentspring-form .paymentspring-inline .paymentspring-container .paymentspring-sub-container {\\\\n padding: 0;\\\\n }\\\\n .paymentspring-form .input-group-addon {\\\\n width: auto;\\\\n }\\\\n .paymentspring-form .form-group .input-group.paymentspring-addon-left .input-group-addon.paymentspring-large {\\\\n padding-top: 14px;\\\\n }\\\\n .paymentspring-form .paymentspring-overlay .paymentspring-container .paymentspring-title .paymentspring-amount.paymentspring-inline-amount, .paymentspring-form .paymentspring-inline .paymentspring-container .paymentspring-title .paymentspring-amount.paymentspring-inline-amount {\\\\n margin-bottom: 0;}\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\" \\\"],[10,\\\"script\\\"],[14,\\\"formId\\\",\\\"7bf8ea7cc99f7e7fd22f\\\"],[14,\\\"src\\\",\\\"https://checkout.paymentspring.com/js/paymentspring.js\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,\\\"script\\\"],[12],[1,\\\"\\\\n function base64ToBytes(base64) {\\\\n const binString = atob(base64);\\\\n return Uint8Array.from(binString, (m) => m.codePointAt(0));\\\\n }\\\\n\\\\n function getDollarAmountFromUrl() {\\\\n const urlParams = new URLSearchParams(window.location.search);\\\\n const dollarAmount = urlParams.get('i');\\\\n\\\\n const decodedAmount = new TextDecoder().decode(base64ToBytes(dollarAmount));\\\\n\\\\n if (decodedAmount === 0) {\\\\n window.location.href = '/'; // Redirect to home page if no amount is provided\\\\n }\\\\n\\\\n return decodedAmount;\\\\n }\\\\n function customizeWidget() {\\\\n const dollarAmount = getDollarAmountFromUrl();\\\\n const amountInCents = Math.round(dollarAmount * 100);\\\\n return {\\\\n config: {\\\\n amount: amountInCents,\\\\n currency: 'USD',\\\\n },\\\\n }\\\\n }\\\\n\\\"],[13]],[],[\\\"page-title\\\",\\\"main\\\",\\\"a\\\",\\\"span\\\",\\\"form\\\",\\\"h1\\\",\\\"p\\\",\\\"strong\\\",\\\"div\\\",\\\"link\\\",\\\"style\\\",\\\"script\\\"]]\",\n \"moduleName\": \"vosaic/accept-payment/cc/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accept-payment/index/controller\", [\"exports\", \"@ember/controller\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/runloop\"], function (_exports, _controller, _object, _tracking, _runloop) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/runloop\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let AcceptPaymentController = _exports.default = (_class = class AcceptPaymentController extends _controller.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"paymentAmount\", _descriptor, this);\n _initializerDefineProperty(this, \"paymentLink\", _descriptor2, this);\n _initializerDefineProperty(this, \"linkCopied\", _descriptor3, this);\n _initializerDefineProperty(this, \"errorMessage\", _descriptor4, this);\n }\n bytesToBase64(bytes) {\n const binString = Array.from(bytes, byte => String.fromCodePoint(byte)).join('');\n return btoa(binString);\n }\n onAmountChange(value) {\n this.paymentAmount = value;\n this.errorMessage = '';\n this.paymentLink = '';\n this.linkCopied = '';\n }\n createLink(event) {\n // Prevent default behavior\n event.preventDefault();\n // Trim whitespace from the paymentAmount\n let trimmedAmount = this.paymentAmount.toString().trim();\n\n // Ensure the value is numeric\n let isNumeric = !isNaN(trimmedAmount) && !isNaN(parseFloat(trimmedAmount));\n\n // Check if the amount is a valid number\n if (!isNumeric || parseFloat(trimmedAmount) <= 0) {\n alert('Please enter a valid payment amount.');\n return;\n }\n\n // Base64 encode the value\n let encodedAmount = this.bytesToBase64(new TextEncoder().encode(trimmedAmount));\n\n // Create the payment link\n const baseUrl = window.location.origin; // (ENV.apiHost || '');\n this.paymentLink = `${baseUrl}/accept-payment/cc/?i=${encodedAmount}`;\n }\n copyToClipboard(area) {\n let valueToCopy = this.paymentLink;\n this.linkCopied = 'Link Copied!';\n navigator.clipboard.writeText(valueToCopy).then(() => {\n const timeout = 3000;\n (0, _runloop.later)(() => {\n this.linkCopied = undefined;\n }, timeout);\n }).catch(err => {\n console.error('Failed to copy text: ', err);\n });\n }\n openLinkInNewTab() {\n window.open(this.paymentLink, '_blank');\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"paymentAmount\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"paymentLink\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return '';\n }\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"linkCopied\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return '';\n }\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"errorMessage\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return '';\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"onAmountChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onAmountChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createLink\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createLink\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"copyToClipboard\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"copyToClipboard\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openLinkInNewTab\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openLinkInNewTab\"), _class.prototype), _class);\n});","define(\"vosaic/accept-payment/index/route\", [\"exports\", \"@ember/routing/route\", \"@ember/service\"], function (_exports, _route, _service) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let AcceptPaymentRoute = _exports.default = (_class = class AcceptPaymentRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"router\", _descriptor, this);\n }\n beforeModel(transition) {\n const queryParams = transition.to.queryParams;\n if (queryParams.ci !== 'factsaccounting') {\n this.router.transitionTo('index'); // Redirect to the home page\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/accept-payment/index/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n {{page-title 'Create a Payment Link'}}\n
\n \n \n

Create a Payment Link

\n
\n \n \n \n \n
\n {{#if this.paymentLink}}\n
\n \n
\n Copy to Clipboard {{this.linkCopied}}\n Open Link\n
\n \n
\n {{/if}}\n \n {{!-- Use text-xs-right to align the button instead of floats. This helps maintain the layout and not using clears --}}\n {{#if this.paymentLink}}\n

Edit the payment amount to create a new link.

\n {{else}}\n
\n \n Create Payment Link\n
\n {{/if}}\n \n \n \n
\n \n */\n {\n \"id\": \"+TFSYxxC\",\n \"block\": \"[[[1,[28,[35,0],[\\\"Create a Payment Link\\\"],null]],[1,\\\"\\\\n\\\"],[10,\\\"main\\\"],[12],[1,\\\"\\\\n \\\"],[10,3],[14,6,\\\"../\\\"],[14,0,\\\"m-t-lg m-b-md center-block svg-logo logo-mark-lg\\\"],[12],[10,1],[14,0,\\\"sr-only bg-white\\\"],[12],[1,\\\"Vosaic\\\"],[13],[13],[1,\\\"\\\\n \\\"],[11,\\\"form\\\"],[24,0,\\\"card card-block center-block transparent-bg p-t-md p-b-md\\\"],[24,5,\\\"max-width: 32rem;\\\"],[4,[38,5],[\\\"submit\\\",[30,0,[\\\"createLink\\\"]]],null],[12],[1,\\\"\\\\n \\\"],[10,\\\"h1\\\"],[14,0,\\\"m-b-md text-xs-center display-5\\\"],[12],[1,\\\"Create a Payment Link\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n\\\\n \\\"],[8,[39,8],null,[[\\\"@class\\\",\\\"@name\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@helpText\\\",\\\"@helpTextClass\\\",\\\"@value\\\",\\\"@errors\\\",\\\"@setFocus\\\",\\\"@onValueChange\\\"],[\\\"col-xs-12 p-l-none p-r-none\\\",\\\"paymentAmount\\\",\\\"number\\\",\\\"Payment Amount\\\",\\\"Payment Amount\\\",\\\"The payment amount must be a number\\\",\\\"text-dark font-weight-bold\\\",[30,0,[\\\"paymentAmount\\\"]],[30,0,[\\\"errorMessage\\\"]],true,[30,0,[\\\"onAmountChange\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"paymentLink\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,8],null,[[\\\"@disabled\\\",\\\"@noFormGroup\\\",\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@name\\\",\\\"@value\\\",\\\"@helpTextClass\\\"],[true,true,\\\"col-xs-12 p-l-none m-l-none\\\",\\\"text\\\",\\\"Payment Link\\\",\\\"Payment Link\\\",\\\"payment-link\\\",[30,0,[\\\"paymentLink\\\"]],\\\"text-success\\\"]],null],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12 m-b-md\\\"],[12],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-primary m-t-xs\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,11],[[30,0,[\\\"copyToClipboard\\\"]],\\\"paymentLink\\\"],null]],null],[12],[1,\\\"Copy to Clipboard\\\"],[13],[1,\\\" \\\"],[10,1],[14,0,\\\"label label-success\\\"],[12],[1,[30,0,[\\\"linkCopied\\\"]]],[13],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-primary-outline m-t-xs pull-xs-right m-r-sm\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,11],[[30,0,[\\\"openLinkInNewTab\\\"]],\\\"paymentLink\\\"],null]],null],[12],[1,\\\"Open Link\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"paymentLink\\\"]],[[[1,\\\" \\\"],[10,2],[12],[1,\\\"Edit the payment amount to create a new link. \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"text-xs-center\\\"],[12],[1,\\\"\\\\n\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success btn-lg btn-wide show-action-icon\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"createLink\\\"]]],null],[12],[1,\\\"Create Payment Link\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"page-title\\\",\\\"main\\\",\\\"a\\\",\\\"span\\\",\\\"form\\\",\\\"on\\\",\\\"h1\\\",\\\"div\\\",\\\"input-component\\\",\\\"if\\\",\\\"button\\\",\\\"fn\\\",\\\"p\\\"]]\",\n \"moduleName\": \"vosaic/accept-payment/index/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/account-suspended/controller\", [\"exports\", \"@ember/controller\", \"@ember/service\"], function (_exports, _controller, _service) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let AccountSuspendedController = _exports.default = (_class = class AccountSuspendedController extends _controller.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"modalHelper\", _descriptor, this);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor2, this);\n _initializerDefineProperty(this, \"store\", _descriptor3, this);\n _initializerDefineProperty(this, \"authorizer\", _descriptor4, this);\n }\n get modalClass() {\n return this.modalHelper.showHideModal(true);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"modalHelper\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"authorizer\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/account-suspended/route\", [\"exports\", \"@ember/service\", \"@ember/routing/route\", \"rsvp\"], function (_exports, _service, _route, _rsvp) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@ember/routing/route\",0,\"rsvp\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let AccountSuspendedRoute = _exports.default = (_class = class AccountSuspendedRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"authorizer\", _descriptor, this);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor2, this);\n _initializerDefineProperty(this, \"router\", _descriptor3, this);\n }\n async model() {\n this.modelReloader.getMyOrganization().then(org => {\n if (!org || !org.isSuspended) {\n this.router.transitionTo('videos');\n }\n });\n return (0, _rsvp.hash)({\n myUserProfile: this.modelReloader.getMyUserProfile()\n });\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"authorizer\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/account-suspended/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n \n \n */\n {\n \"id\": \"XNhDF0Ox\",\n \"block\": \"[[[10,0],[14,\\\"tabindex\\\",\\\"-1\\\"],[14,\\\"role\\\",\\\"dialog\\\"],[15,0,[29,[\\\"modal fade \\\",[30,0,[\\\"modalClass\\\"]]]]],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[14,\\\"role\\\",\\\"document\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[14,\\\"tabindex\\\",\\\"0\\\"],[12],[1,\\\"Account Suspended\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"modal-body p-a-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"font-weight-bold\\\"],[12],[1,\\\"Your account has been suspended due to\\\\n non-payment. If we don't receive a payment in 30 days, the amount will\\\\n be sent to a collection agency. Use the email below to contact our sales team and a Vosaic representative will reach out\\\\n to you. Please check your spam folders, and respond with urgency.\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"strong\\\"],[12],[10,3],[14,6,\\\"mailto:sales@vosaic.com?subject=Account Suspension\\\"],[12],[1,\\\"Sales@Vosaic.com\\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,3],[14,6,\\\"\\\"],[14,6,\\\"./logout\\\"],[14,0,\\\"btn btn-danger pull-xs-right m-b-sm\\\"],[12],[1,\\\"Log Out\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[15,0,[29,[\\\"modal-backdrop fade \\\",[30,0,[\\\"modalClass\\\"]]]]],[12],[13]],[],[\\\"div\\\",\\\"h4\\\",\\\"p\\\",\\\"strong\\\",\\\"a\\\"]]\",\n \"moduleName\": \"vosaic/account-suspended/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/add-users/route\", [\"exports\", \"@ember/routing/route\"], function (_exports, _route) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n class AddUsersRoute extends _route.default {}\n _exports.default = AddUsersRoute;\n});","define(\"vosaic/accounts/add-users/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n {{page-title 'Add Users or Storage'}}\n \n {{outlet}}\n */\n {\n \"id\": \"oqZnHih/\",\n \"block\": \"[[[1,[28,[35,0],[\\\"Add Users or Storage\\\"],null]],[1,\\\"\\\\n\\\\n\\\"],[46,[28,[37,2],null,null],null,null,null]],[],[\\\"page-title\\\",\\\"component\\\",\\\"-outlet\\\"]]\",\n \"moduleName\": \"vosaic/accounts/add-users/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/aicoach/controller\", [\"exports\", \"@ember/controller\", \"@ember/object\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/array\", \"@ember/template\"], function (_exports, _controller, _object, _service, _tracking, _array, _template) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _class2, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/object\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/array\",0,\"@ember/template\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const REGION = 'us-east-1';\n const BYTES_IN_MP_UPLOAD = 5 * 1024 * 1024;\n const QUEUE_SIZE = 1;\n let DocumentUploadProgress = (_class = class DocumentUploadProgress {\n constructor() {\n _initializerDefineProperty(this, \"loaded\", _descriptor, this);\n _initializerDefineProperty(this, \"total\", _descriptor2, this);\n _initializerDefineProperty(this, \"percent\", _descriptor3, this);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"loaded\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"total\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"percent\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _class);\n const SYSTEM_PROMPTS = ['Instructional Coach', 'Sales Coach', 'Professional Development Coach', 'Clinical Education Specialist'];\n let AiCoachController = _exports.default = (_class2 = class AiCoachController extends _controller.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"router\", _descriptor4, this);\n _initializerDefineProperty(this, \"store\", _descriptor5, this);\n _initializerDefineProperty(this, \"authorizer\", _descriptor6, this);\n _initializerDefineProperty(this, \"uploadCredentials\", _descriptor7, this);\n _initializerDefineProperty(this, \"features\", _descriptor8, this);\n _defineProperty(this, \"documentUploadProgress\", new DocumentUploadProgress());\n _initializerDefineProperty(this, \"currentProject\", _descriptor9, this);\n _initializerDefineProperty(this, \"isEditingPrompt\", _descriptor0, this);\n _initializerDefineProperty(this, \"currentlyEditingPrompt\", _descriptor1, this);\n _initializerDefineProperty(this, \"currentPrompts\", _descriptor10, this);\n _initializerDefineProperty(this, \"credentialsDocumentUpload\", _descriptor11, this);\n _initializerDefineProperty(this, \"showUploadSupportingDocumentsModal\", _descriptor12, this);\n _initializerDefineProperty(this, \"documentUploadError\", _descriptor13, this);\n _initializerDefineProperty(this, \"fileUploading\", _descriptor14, this);\n _initializerDefineProperty(this, \"selectedDocument\", _descriptor15, this);\n _initializerDefineProperty(this, \"showDeleteDocumentModal\", _descriptor16, this);\n _initializerDefineProperty(this, \"supportingDocuments\", _descriptor17, this);\n _defineProperty(this, \"allowedFileTypes\", ['application/pdf']);\n }\n get canDeleteDocument() {\n return true;\n }\n get deleteFileModalTitle() {\n return (0, _template.htmlSafe)(`Are you sure you want to delete
${this.selectedDocument.title}?`);\n }\n get deleteFileModalId() {\n return this.selectedDocument.id;\n }\n get systemPromptOptions() {\n return SYSTEM_PROMPTS.map(v => ({\n label: v,\n value: v.toLowerCase()\n }));\n }\n get canDeletePrompts() {\n return this.currentProject === 'global';\n }\n get isDisabled() {\n return false;\n }\n get canEditPrompt() {\n return !this.canPromote;\n }\n get addPromptDisabled() {\n return this.currentProject !== 'global';\n }\n get canPromote() {\n return this.currentlyEditingPrompt.projectId;\n }\n get projectsWithCustomPrompts() {\n const projectIds = [...new Set(this.model.prompts.map(prompt => prompt.projectId))];\n const projects = this.model.projects.filter(project => projectIds.includes(project.id));\n return projects;\n }\n onInsert() {\n this.setCurrentPrompts();\n }\n onDeleteSupportingDocument() {\n this.selectedDocument.destroyRecord({\n adapterOptions: {\n promptId: 'prompt'\n }\n }).then(() => {\n this.showDeleteDocumentModal = false;\n this.model.supportingDocuments.splice(this.model.supportingDocuments.indexOf(this.selectedDocument), 1);\n this.selectedDocument = null;\n });\n }\n onCancelDeleteFile() {\n this.selectedDocument = null;\n this.showDeleteDocumentModal = false;\n }\n setCurrentPrompts() {\n this.currentPrompts = [...this.model.prompts].sort((a, b) => a.order?.localeCompare?.(b.order) ? a.order?.localeCompare?.(b.order) : a.order - b.order).filter(p => {\n if (this.currentProject === 'global') {\n return !p.projectId;\n } else {\n return p.projectId === this.currentProject;\n }\n });\n }\n onProjectSelected(project) {\n this.currentProject = project;\n this.setCurrentPrompts();\n }\n onPromote(prompt) {\n const oldProjectId = prompt.projectId;\n prompt.projectId = null;\n prompt.save();\n this.isEditingPrompt = false;\n this.currentlyEditingPrompt = undefined;\n if (this.model.prompts.every(p => p.projectId !== oldProjectId)) {\n this.currentProject = 'global';\n }\n this.setCurrentPrompts();\n }\n onAddPrompt() {\n const prompt = this.store.createRecord('prompt');\n this.isEditingPrompt = true;\n this.currentlyEditingPrompt = prompt;\n this.setCurrentPrompts();\n }\n savePrompt(prompt) {\n if (prompt.isNew) {\n prompt.order = this.model.prompts.length;\n }\n prompt.save();\n this.isEditingPrompt = false;\n this.currentlyEditingPrompt = undefined;\n this.setCurrentPrompts();\n }\n async deletePrompt(prompt) {\n const oldProjectId = prompt.projectId;\n await prompt.destroyRecord();\n this.isEditingPrompt = false;\n this.currentlyEditingPrompt = undefined;\n if (this.model.prompts.every(p => p.projectId !== oldProjectId)) {\n this.currentProject = 'global';\n }\n this.setCurrentPrompts();\n }\n cancelEditPrompt(prompt) {\n if (prompt.isNew) {\n prompt.unloadRecord();\n } else {\n prompt.rollbackAttributes();\n }\n this.isEditingPrompt = false;\n this.currentlyEditingPrompt = undefined;\n this.setCurrentPrompts();\n }\n cancel() {\n this.model.aicoachConfig.rollbackAttributes();\n this.router.transitionTo('accounts.features');\n }\n onSystemPromptChange(value) {\n this.model.systemPrompt = value;\n this.save();\n }\n async save() {\n this.model.viewModel.isSaving = true;\n fetch(`${this.authorizer.getBaseUrl()}/aicoach/prompts/system?value=${this.model.systemPrompt}`, {\n credentials: 'include',\n headers: this.authorizer.getAuthHeaders(),\n method: 'PUT'\n });\n await this.model.aicoachConfig.save();\n setTimeout(() => {\n this.model.viewModel.isSaving = false;\n }, 1000);\n }\n editPrompt(prompt) {\n this.currentlyEditingPrompt = prompt;\n this.isEditingPrompt = true;\n }\n onSortEnd(prompts) {\n prompts.forEach((prompt, idx) => {\n prompt.order = idx;\n prompt.save();\n });\n }\n onCloseUploadSupportingDocuments() {\n this.uploadError = false;\n this.documentUploadProgress.loaded = null;\n this.documentUploadProgress.total = null;\n this.documentUploadProgress.percent = null;\n this.fileUploading = false;\n this.showUploadSupportingDocumentsModal = false;\n }\n onUploadDocument(uploader) {\n this.fileUploading = true;\n this.uploadFile(uploader, this.credentialsDocumentUpload);\n }\n async uploadFile(uploader, credentials) {\n const orgId = credentials.organizationId;\n const file = uploader.file;\n const fileExtension = file.name.split('.').pop().toLowerCase();\n this.uploadError = undefined;\n const supportingDocument = this.store.createRecord('supportingDocument');\n supportingDocument.title = file.name;\n supportingDocument.fileExtension = fileExtension;\n supportingDocument.save({\n adapterOptions: {\n promptId: 'prompt'\n }\n }).then(savedModel => {\n const fileName = `${orgId}_prompt/${savedModel.id}.${fileExtension}`;\n savedModel.uploadedPath = fileName;\n savedModel.isUploaded = false;\n\n /*eslint no-undef: */\n AWS.config.update({\n region: REGION,\n accessKeyId: credentials.accessKey,\n secretAccessKey: credentials.secretKey,\n sessionToken: credentials.sessionToken,\n useAccelerateEndpoint: true\n });\n const up = new AWS.S3.ManagedUpload({\n partSize: BYTES_IN_MP_UPLOAD,\n queueSize: QUEUE_SIZE,\n params: {\n Bucket: credentials.bucketName,\n Key: fileName,\n Body: uploader.file\n }\n });\n up.on('httpUploadProgress', progress => {\n const completionPercent = progress.loaded / progress.total;\n this.documentUploadProgress.loaded = progress.loaded;\n this.documentUploadProgress.total = progress.total;\n this.documentUploadProgress.percent = completionPercent;\n });\n\n // eslint-disable-next-line no-unused-vars\n up.send((err, data) => {\n if (err) {\n // if there is an error delete the dynamo record\n supportingDocument.destroyRecord({\n adapterOptions: {\n promptId: 'prompt'\n }\n });\n console.error('Error:', err.code, err.message);\n }\n });\n up.promise().then(() => {\n supportingDocument.set('isUploaded', true);\n supportingDocument.save({\n adapterOptions: {\n promptId: 'prompt'\n }\n }).then(() => {\n // reset progress bar for other uploads\n this.model.supportingDocuments.push(supportingDocument);\n this.documentUploadProgress.loaded = null;\n this.documentUploadProgress.total = null;\n this.documentUploadProgress.percent = null;\n this.fileUploading = false;\n this.showUploadSupportingDocumentsModal = false;\n });\n }).catch(() => {\n supportingDocument.destroyRecord({\n adapterOptions: {\n promptId: 'prompt'\n }\n });\n this.documentUploadError = 'Error Uploading Document';\n });\n });\n }\n async onUploadSupportingDocuments() {\n this.uploadCredentials.fetch({\n type: 'supportingdocument',\n promptId: 'prompt'\n }).then(credentials => {\n this.credentialsDocumentUpload = credentials;\n this.showUploadSupportingDocumentsModal = true;\n }).catch(error => {\n console.error('Error:', error);\n });\n }\n onShowDeleteFileModal(document) {\n this.selectedDocument = document;\n this.showDeleteDocumentModal = true;\n }\n onDownloadSupportingDocument(document) {\n this.requestDocumentDownload(document);\n }\n requestDocumentDownload(supportingDocument) {\n const fileName = encodeURIComponent(supportingDocument.title);\n try {\n fetch(`${this.authorizer.getBaseUrl()}/files/filedownload?id=${supportingDocument.organizationVideoOrProjectId}&fileId=${supportingDocument.id}&fileName=${fileName}&extension=${supportingDocument.fileExtension}`, {\n credentials: 'include',\n headers: this.authorizer.getAuthHeaders(),\n method: 'GET'\n }).then(async response => {\n const blob = await response.blob();\n const url = window.URL.createObjectURL(new Blob([blob]));\n const link = document.createElement('a');\n link.href = url;\n link.setAttribute('download', supportingDocument.title);\n document.body.appendChild(link);\n link.click();\n });\n } catch (error) {\n console.log(error);\n }\n }\n }, _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, \"authorizer\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, \"uploadCredentials\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, \"features\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, \"currentProject\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return 'global';\n }\n }), _descriptor0 = _applyDecoratedDescriptor(_class2.prototype, \"isEditingPrompt\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor1 = _applyDecoratedDescriptor(_class2.prototype, \"currentlyEditingPrompt\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, \"currentPrompts\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, \"credentialsDocumentUpload\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, \"showUploadSupportingDocumentsModal\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor13 = _applyDecoratedDescriptor(_class2.prototype, \"documentUploadError\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor14 = _applyDecoratedDescriptor(_class2.prototype, \"fileUploading\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor15 = _applyDecoratedDescriptor(_class2.prototype, \"selectedDocument\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _descriptor16 = _applyDecoratedDescriptor(_class2.prototype, \"showDeleteDocumentModal\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor17 = _applyDecoratedDescriptor(_class2.prototype, \"supportingDocuments\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return (0, _array.A)();\n }\n }), _applyDecoratedDescriptor(_class2.prototype, \"onInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onInsert\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onDeleteSupportingDocument\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onDeleteSupportingDocument\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onCancelDeleteFile\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onCancelDeleteFile\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"setCurrentPrompts\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"setCurrentPrompts\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onProjectSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onProjectSelected\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onPromote\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onPromote\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onAddPrompt\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onAddPrompt\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"savePrompt\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"savePrompt\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"deletePrompt\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"deletePrompt\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"cancelEditPrompt\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"cancelEditPrompt\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"cancel\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"cancel\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onSystemPromptChange\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onSystemPromptChange\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"save\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"save\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"editPrompt\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"editPrompt\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onSortEnd\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onSortEnd\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onCloseUploadSupportingDocuments\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onCloseUploadSupportingDocuments\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onUploadDocument\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onUploadDocument\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"uploadFile\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"uploadFile\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onUploadSupportingDocuments\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onUploadSupportingDocuments\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onShowDeleteFileModal\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onShowDeleteFileModal\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onDownloadSupportingDocument\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onDownloadSupportingDocument\"), _class2.prototype), _class2);\n});","define(\"vosaic/accounts/aicoach/route\", [\"exports\", \"@ember/routing/route\", \"@ember/service\", \"@glimmer/tracking\", \"rsvp\", \"tracked-built-ins\"], function (_exports, _route, _service, _tracking, _rsvp, _trackedBuiltIns) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _class2, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"rsvp\",0,\"tracked-built-ins\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let ViewModel = (_class = class ViewModel {\n constructor() {\n _initializerDefineProperty(this, \"isSaving\", _descriptor, this);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isSaving\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _class);\n let MyRoute = _exports.default = (_class2 = class MyRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"session\", _descriptor2, this);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor3, this);\n _initializerDefineProperty(this, \"currentUser\", _descriptor4, this);\n _initializerDefineProperty(this, \"router\", _descriptor5, this);\n _initializerDefineProperty(this, \"store\", _descriptor6, this);\n _initializerDefineProperty(this, \"authorizer\", _descriptor7, this);\n }\n async getSystemPrompt() {\n const response = await fetch(`${this.authorizer.getBaseUrl()}/aicoach/prompts/system`, {\n credentials: 'include',\n headers: this.authorizer.getAuthHeaders(),\n method: 'GET'\n });\n if (!response.ok) {\n throw response;\n }\n return response.json();\n }\n async model() {\n const orgId = await this.modelReloader.getMyOrganizationId();\n let aicoachConfig;\n try {\n aicoachConfig = await this.store.findRecord('aicoach-configuration', orgId);\n } catch {\n aicoachConfig = this.store.createRecord('aicoach-configuration');\n }\n const systemPrompt = this.getSystemPrompt();\n return (0, _rsvp.hash)({\n myUserProfile: this.modelReloader.getMyUserProfile(),\n aicoachConfig,\n users: this.store.findAll('userprofile', {\n reload: true\n }),\n viewModel: new ViewModel(),\n prompts: this.store.findAll('prompt', {\n reload: true,\n adapterOptions: {\n allOrgPrompts: true\n }\n }),\n projects: this.store.findAll('project'),\n systemPrompt: systemPrompt,\n supportingDocuments: this.store.query('supportingDocument', {\n promptId: 'prompt'\n }).then(docs => new _trackedBuiltIns.TrackedArray([...docs]))\n });\n }\n afterModel(model) {\n const {\n role\n } = model.myUserProfile;\n if (['Viewer', 'Learner', 'Educator'].includes(role)) {\n this.router.transitionTo('videos');\n }\n }\n }, _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, \"currentUser\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, \"authorizer\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class2);\n});","define(\"vosaic/accounts/aicoach/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n {{page-title 'AI Mate'}}\n

Configure AI Mate

\n
\n
\n
\n
\n \n
\n
\n
\n

Users in\n Administrator and Educator\n roles have AI Mate\n enabled by default.

\n

Enabling AI Mate for Learners allows them to benefit from setting goals and personalized AI-powered support and guidance. AI Mate is not available to users in a Viewer role.

\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n

When enabled, Educators can view all AI Mate prompts from all videos in AI Reports.

\n

If not enabled, Educators will only see AI Mate prompts from videos they have access to.

\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n

When enabled, users can choose to hide the AI Mate prompts they use from reports.

\n

This setting is available on the Basic Information page which can be accessed from \"Hi, [First name]\" dropdown menu.

\n
\n
\n
\n
\n {{#if @model.viewModel.isSaving}}\n Updated{{else}}Save Changes{{/if}}\n
\n \n
\n
\n

Set AI Mate's Role

\n
\n
\n \n \n {{#each this.systemPromptOptions as |promptOption|}}\n {{promptOption.label}}\n {{/each}}\n \n \n
\n
\n

Instructional Coach:\n
Best for instructional coaches, in-and-pre-service teachers,\n principals, field supervisors and other users in K-12 or higher\n education teacher coaching settings.

\n

Sales Coach:\n
Best for supporting feedback in corporate or educational settings\n focused on sales coaching.

\n

Professional Development Coach:\n
Best for general professional development settings.

\n

Clinical Education Specialist:\n
Best for counseling programs and behavioral health use cases.

\n
\n \n
\n
\n

Create Preset Prompts

\n \n
\n
\n \n \n Global\n {{#each this.projectsWithCustomPrompts as |project|}}\n {{project.title}}\n {{/each}}\n \n
\n
\n

Global prompts:\n
Refers to prompts that everyone in your account will be able to\n use when they access AI Mate on the video player.

\n

Project specific prompts:\n
When you set prompts on specific Projects, users will be able to\n use those prompts instead of Global prompts when accessing videos\n uploaded to those Projects. You can edit Project prompts here. To create\n Project prompts go to the Projects tab in the main navigation.

\n \n
\n
\n
\n
\n {{#if this.isDisabled}}{{else}}\n Add Prompt\n {{/if}}\n
\n
\n

Drag-and-drop\n prompts to change their order.

\n \n \n
\n
\n

Upload Documents For Preset Prompts

\n
\n
\n Upload Documents\n {{#each @model.supportingDocuments as |doc|}}\n \n {{/each}}\n
\n
\n

Prompt Documents:\n
You'll be able to select documents from this list for each prompt you create.

\n

Supported File Type:\n
PDF files only. Scanned in documents are not currently supported.

\n
\n
\n \n \n \n \n {{#if this.showDeleteDocumentModal}}\n \n {{/if}}\n {{#if this.showUploadSupportingDocumentsModal}}\n \n {{/if}}\n */\n {\n \"id\": \"ngdZrvEA\",\n \"block\": \"[[[1,[28,[35,0],[\\\"AI Mate\\\"],null]],[1,\\\"\\\\n\\\"],[10,\\\"h2\\\"],[14,0,\\\"m-b-sm\\\"],[12],[1,\\\"Configure AI Mate\\\"],[13],[1,\\\"\\\\n\\\"],[11,\\\"form\\\"],[4,[38,3],[[30,0,[\\\"onInsert\\\"]]],null],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-sm-6\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"c-inputs-stacked m-b-md\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,5],null,[[\\\"@class\\\",\\\"@name\\\",\\\"@type\\\",\\\"@labelText\\\",\\\"@value\\\"],[\\\"c-checkbox\\\",\\\"toggle\\\",\\\"checkbox\\\",\\\"Enable AI Mate for learners\\\",[30,1,[\\\"aicoachConfig\\\",\\\"enabledForLearnersAndViewers\\\"]]]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-sm-6\\\"],[12],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[1,\\\"Users in\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Administrator and Educator\\\"],[13],[1,\\\"\\\\n roles have AI Mate\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,\\\"enabled by default\\\"],[13],[1,\\\".\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[1,\\\"Enabling AI Mate for Learners allows them to benefit from setting goals and personalized AI-powered support and guidance. AI Mate is not available to users in a Viewer role.\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"hr\\\"],[12],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-sm-6\\\"],[12],[1,\\\"\\\\n\\\\n \\\"],[10,0],[14,0,\\\"c-inputs-stacked m-b-md\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,5],null,[[\\\"@class\\\",\\\"@name\\\",\\\"@type\\\",\\\"@labelText\\\",\\\"@value\\\"],[\\\"c-checkbox\\\",\\\"toggle\\\",\\\"checkbox\\\",\\\"Allow Educators to see all AI Mate prompts from all videos\\\",[30,1,[\\\"aicoachConfig\\\",\\\"allowEducatorsToSeeAllPrompts\\\"]]]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-sm-6\\\"],[12],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[1,\\\"When enabled, \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Educators can view all AI Mate prompts\\\"],[13],[1,\\\" from all videos in AI Reports.\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[1,\\\"If not enabled, Educators will only see AI Mate prompts from videos they have access to.\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"hr\\\"],[12],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-sm-6\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"c-inputs-stacked m-b-md\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,5],null,[[\\\"@class\\\",\\\"@name\\\",\\\"@type\\\",\\\"@labelText\\\",\\\"@value\\\"],[\\\"c-checkbox\\\",\\\"toggle\\\",\\\"checkbox\\\",\\\"Allow users to hide their submitted AI Mate prompts from reports\\\",[30,1,[\\\"aicoachConfig\\\",\\\"allowUsersToHidePrompts\\\"]]]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-sm-6\\\"],[12],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[1,\\\"When enabled, users can choose to \\\"],[10,\\\"strong\\\"],[12],[1,\\\"hide the AI Mate prompts they use\\\"],[13],[1,\\\" from reports.\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[1,\\\"This setting is available on the Basic Information page which can be accessed from \\\\\\\"Hi, [First name]\\\\\\\" dropdown menu.\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-sm-6\\\"],[12],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success show-action-icon\\\"],[24,4,\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"save\\\"]]],null],[12],[41,[30,1,[\\\"viewModel\\\",\\\"isSaving\\\"]],[[[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Updated Icon\\\"],[15,\\\"src\\\",[29,[\\\"/assets/icons/\\\",[28,[37,13],[\\\"action-saved\\\"],null],\\\".svg\\\"]]],[14,0,\\\"btn-icon action-icon\\\"],[12],[13],[1,\\\"\\\\n Updated\\\"]],[]],[[[1,\\\"Save Changes\\\"]],[]]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"hr\\\"],[12],[13],[1,\\\"\\\\n \\\"],[10,\\\"h3\\\"],[14,0,\\\"m-b-sm p-t-md lead\\\"],[12],[1,\\\"Set AI Mate's Role\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-sm-6 form-group m-t-sm\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"label\\\"],[14,\\\"for\\\",\\\"select-project\\\"],[14,0,\\\"form-control-label animate-up\\\"],[12],[1,\\\"Select\\\\n AI Mate's Role\\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,16],[[24,1,\\\"system-prompt\\\"]],[[\\\"@value\\\",\\\"@class\\\",\\\"@onChange\\\"],[[30,1,[\\\"systemPrompt\\\"]],\\\"c-select form-control-md full-width m-a-none\\\",[30,0,[\\\"onSystemPromptChange\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[37,18],[[28,[37,18],[[30,0,[\\\"systemPromptOptions\\\"]]],null]],null],null,[[[1,\\\" \\\"],[8,[30,2,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,3,[\\\"value\\\"]]]],[[\\\"default\\\"],[[[[1,[30,3,[\\\"label\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\" \\\"]],[2]]]]],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-sm-6\\\"],[12],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Instructional Coach\\\"],[13],[1,\\\":\\\\n \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"Best for instructional coaches, in-and-pre-service teachers,\\\\n principals, field supervisors and other users in K-12 or higher\\\\n education teacher coaching settings.\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Sales Coach\\\"],[13],[1,\\\":\\\\n \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"Best for supporting feedback in corporate or educational settings\\\\n focused on sales coaching.\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Professional Development Coach\\\"],[13],[1,\\\":\\\\n \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"Best for general professional development settings.\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Clinical Education Specialist\\\"],[13],[1,\\\":\\\\n \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"Best for counseling programs and behavioral health use cases.\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"hr\\\"],[12],[13],[1,\\\"\\\\n \\\"],[10,\\\"h3\\\"],[14,0,\\\"m-b-sm p-t-md lead\\\"],[12],[1,\\\"Create Preset Prompts\\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12 col-sm-6 form-group m-t-sm\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"label\\\"],[14,\\\"for\\\",\\\"select-project\\\"],[14,0,\\\"form-control-label animate-up\\\"],[12],[1,\\\"Filter\\\\n Prompts by Project\\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,16],[[24,1,\\\"select-project\\\"]],[[\\\"@value\\\",\\\"@class\\\",\\\"@onChange\\\"],[[30,0,[\\\"currentProject\\\"]],\\\"c-select form-control-md full-width m-a-none\\\",[30,0,[\\\"onProjectSelected\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n \\\"],[8,[30,4,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"global\\\"]],[[\\\"default\\\"],[[[[1,\\\"Global\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[42,[28,[37,18],[[28,[37,18],[[30,0,[\\\"projectsWithCustomPrompts\\\"]]],null]],null],null,[[[1,\\\" \\\"],[8,[30,4,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,5,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,5,[\\\"title\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\" \\\"]],[4]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-sm-6\\\"],[12],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Global prompts\\\"],[13],[1,\\\":\\\\n \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"Refers to prompts that everyone in your account will be able to\\\\n use when they access AI Mate on the video player.\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Project specific prompts\\\"],[13],[1,\\\":\\\\n \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"When you set prompts on specific Projects, users will be able to\\\\n use those prompts instead of Global prompts when accessing videos\\\\n uploaded to those Projects. You can edit Project prompts here. To create\\\\n Project prompts go to the Projects tab in the main navigation.\\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-sm-12\\\"],[12],[1,\\\"\\\\n \\\"],[41,[30,0,[\\\"isDisabled\\\"]],[[],[]],[[[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,1,\\\"add-new-prompt-btn\\\"],[24,0,\\\"btn btn-sm btn-default-outline pull-xs-left text-uppercase\\\"],[16,\\\"disabled\\\",[30,0,[\\\"addPromptDisabled\\\"]]],[24,4,\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"onAddPrompt\\\"]]],null],[12],[1,\\\"Add Prompt\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small m-b-none m-t-sm text-xs-center alert-info\\\"],[12],[1,\\\"Drag-and-drop\\\\n prompts to change their order.\\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,20],null,[[\\\"@prompts\\\",\\\"@editPrompt\\\",\\\"@deletePrompt\\\",\\\"@onSortEnd\\\",\\\"@canDelete\\\",\\\"@isDisabled\\\"],[[30,0,[\\\"currentPrompts\\\"]],[30,0,[\\\"editPrompt\\\"]],[30,0,[\\\"deletePrompt\\\"]],[30,0,[\\\"onSortEnd\\\"]],[30,0,[\\\"canDeletePrompts\\\"]],[30,0,[\\\"isDisabled\\\"]]]],null],[1,\\\"\\\\n\\\\n \\\"],[10,0],[14,0,\\\"m-b-md\\\"],[12],[13],[1,\\\"\\\\n \\\"],[10,\\\"hr\\\"],[12],[13],[1,\\\"\\\\n \\\"],[10,\\\"h3\\\"],[14,0,\\\"m-b-sm p-t-md lead\\\"],[12],[1,\\\"Upload Documents For Preset Prompts\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12 col-sm-6\\\"],[12],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,1,\\\"upload-supporting-docs-btn\\\"],[24,0,\\\"btn btn-success btn-sm btn-wide text-uppercase m-b-md\\\"],[24,5,\\\"margin-top:5px\\\"],[16,\\\"disabled\\\",[30,0,[\\\"saveDisabled\\\"]]],[24,4,\\\"button\\\"],[4,[38,10],[\\\"click\\\",[30,0,[\\\"onUploadSupportingDocuments\\\"]]],null],[12],[1,\\\"Upload Documents\\\"],[13],[1,\\\"\\\\n\\\"],[42,[28,[37,18],[[28,[37,18],[[30,1,[\\\"supportingDocuments\\\"]]],null]],null],null,[[[1,\\\" \\\"],[8,[39,21],null,[[\\\"@lightBackground\\\",\\\"@myUser\\\",\\\"@doc\\\",\\\"@users\\\",\\\"@onShowDeleteFileModal\\\",\\\"@canDeleteDocument\\\",\\\"@onDownloadSupportingDocument\\\"],[true,[30,1,[\\\"myUserProfile\\\"]],[30,6],[30,1,[\\\"users\\\"]],[30,0,[\\\"onShowDeleteFileModal\\\"]],true,[30,0,[\\\"onDownloadSupportingDocument\\\"]]]],null],[1,\\\"\\\\n\\\"]],[6]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12 col-sm-6\\\"],[12],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Prompt Documents\\\"],[13],[1,\\\":\\\\n \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"You'll be able to select documents from this list for each prompt you create.\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Supported File Type\\\"],[13],[1,\\\":\\\\n \\\"],[10,\\\"br\\\"],[12],[13],[10,\\\"strong\\\"],[12],[1,\\\"PDF files only.\\\"],[13],[1,\\\" Scanned in documents are not currently supported.\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[8,[39,22],null,[[\\\"@shouldShow\\\",\\\"@prompt\\\",\\\"@onCancel\\\",\\\"@onSave\\\",\\\"@onDelete\\\",\\\"@canEdit\\\",\\\"@canPromote\\\",\\\"@onPromote\\\",\\\"@promptDocuments\\\",\\\"@currentUser\\\",\\\"@focusInitiator\\\"],[[30,0,[\\\"isEditingPrompt\\\"]],[30,0,[\\\"currentlyEditingPrompt\\\"]],[30,0,[\\\"cancelEditPrompt\\\"]],[30,0,[\\\"savePrompt\\\"]],[30,0,[\\\"deletePrompt\\\"]],[30,0,[\\\"canEditPrompt\\\"]],[30,0,[\\\"canPromote\\\"]],[30,0,[\\\"onPromote\\\"]],[30,1,[\\\"supportingDocuments\\\"]],[30,1,[\\\"myUserProfile\\\"]],\\\"add-new-prompt-btn\\\"]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showDeleteDocumentModal\\\"]],[[[1,\\\" \\\"],[8,[39,23],null,[[\\\"@title\\\",\\\"@content\\\",\\\"@actionOnCancel\\\",\\\"@actionOnDeleteConfirmed\\\",\\\"@shouldShow\\\",\\\"@focusInitiator\\\"],[[30,0,[\\\"deleteFileModalTitle\\\"]],\\\"Deleting a document removes it permanently from Vosaic. You can not undo this.\\\",[30,0,[\\\"onCancelDeleteFile\\\"]],[30,0,[\\\"onDeleteSupportingDocument\\\"]],[30,0,[\\\"showDeleteDocumentModal\\\"]],[28,[37,24],[\\\"delete-supporting-doc-btn-\\\",[30,0,[\\\"deleteFileModalId\\\"]]],null]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"showUploadSupportingDocumentsModal\\\"]],[[[1,\\\" \\\"],[8,[39,25],null,[[\\\"@iconStyle\\\",\\\"@title\\\",\\\"@subtitle\\\",\\\"@extensions\\\",\\\"@shouldShow\\\",\\\"@onCancel\\\",\\\"@uploadProgress\\\",\\\"@uploadError\\\",\\\"@uploadErrorContent\\\",\\\"@onUploadDocument\\\",\\\"@isUploadingFile\\\",\\\"@focusInitiator\\\",\\\"@allowedFileTypes\\\"],[\\\"fill:#000\\\",\\\"Upload Documents For Preset Prompts\\\",\\\"Drag and drop documents you wish to upload onto this area.\\\",\\\"pdf\\\",[30,0,[\\\"showUploadSupportingDocumentsModal\\\"]],[30,0,[\\\"onCloseUploadSupportingDocuments\\\"]],[30,0,[\\\"documentUploadProgress\\\"]],[30,0,[\\\"documentUploadError\\\"]],\\\"We were unable to upload the selected document.\\\",[30,0,[\\\"onUploadDocument\\\"]],[30,0,[\\\"fileUploading\\\"]],\\\"upload-supporting-docs-btn\\\",[30,0,[\\\"allowedFileTypes\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@model\\\",\\\"xs\\\",\\\"promptOption\\\",\\\"xs\\\",\\\"project\\\",\\\"doc\\\"],[\\\"page-title\\\",\\\"h2\\\",\\\"form\\\",\\\"did-insert\\\",\\\"div\\\",\\\"input-check-radio\\\",\\\"p\\\",\\\"strong\\\",\\\"hr\\\",\\\"button\\\",\\\"on\\\",\\\"if\\\",\\\"img\\\",\\\"animated-svg\\\",\\\"h3\\\",\\\"label\\\",\\\"x-select\\\",\\\"each\\\",\\\"-track-array\\\",\\\"br\\\",\\\"prompt-lister\\\",\\\"supporting-documents-list\\\",\\\"modal-edit-prompt\\\",\\\"modal-confirm-delete\\\",\\\"concat\\\",\\\"modal-upload\\\"]]\",\n \"moduleName\": \"vosaic/accounts/aicoach/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/backups/controller\", [\"exports\", \"@ember/controller\", \"@ember/object\", \"@ember/service\", \"@glimmer/tracking\", \"@zip.js/zip.js\"], function (_exports, _controller, _object, _service, _tracking, zip) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/object\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@zip.js/zip.js\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const MAX_BACKUPS = 3;\n let BackupsController = _exports.default = (_class = class BackupsController extends _controller.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"authorizer\", _descriptor, this);\n _defineProperty(this, \"maxBackups\", MAX_BACKUPS);\n _initializerDefineProperty(this, \"backupCreated\", _descriptor2, this);\n _initializerDefineProperty(this, \"backups\", _descriptor3, this);\n _initializerDefineProperty(this, \"deletingBackup\", _descriptor4, this);\n _initializerDefineProperty(this, \"downloadingFile\", _descriptor5, this);\n _initializerDefineProperty(this, \"downloadingAll\", _descriptor6, this);\n }\n get maxBackupsReached() {\n return this.backups && this.backups.length >= this.maxBackups;\n }\n onInsert() {\n this.backups = this.model.backups;\n }\n async deleteBackup(timestamp) {\n this.deletingBackup = timestamp;\n await fetch(`${this.authorizer.getBaseUrl()}/backups/${timestamp}`, {\n credentials: 'include',\n headers: this.authorizer.getAuthHeaders(),\n method: 'DELETE'\n });\n await fetch(`${this.authorizer.getBaseUrl()}/backups`, {\n credentials: 'include',\n headers: this.authorizer.getAuthHeaders(),\n method: 'GET'\n }).then(response => response.json()).then(data => {\n this.backups = data;\n });\n this.deletingBackup = null;\n }\n createNewBackup() {\n this.backupCreated = true;\n fetch(`${this.authorizer.getBaseUrl()}/backups`, {\n credentials: 'include',\n headers: this.authorizer.getAuthHeaders(),\n method: 'POST'\n });\n setTimeout(async () => {\n fetch(`${this.authorizer.getBaseUrl()}/backups`, {\n credentials: 'include',\n headers: this.authorizer.getAuthHeaders(),\n method: 'GET'\n }).then(response => response.json()).then(data => {\n this.backups = data;\n this.backupCreated = false;\n });\n }, 900000);\n }\n downloadFile(file) {\n this.downloadingFile = file;\n const fileName = encodeURIComponent(file.fileName);\n try {\n fetch(file.presignedURL).then(async response => {\n const blob = await response.blob();\n const url = window.URL.createObjectURL(new Blob([blob]));\n const link = document.createElement('a');\n const downloadName = `vosaic_backup_${fileName}`;\n link.href = url;\n link.setAttribute('download', downloadName);\n document.body.appendChild(link);\n link.click();\n this.downloadingFile = null;\n });\n } catch (error) {\n console.log(error);\n }\n }\n async downloadAllFiles(backupGroup) {\n this.downloadingAll = backupGroup;\n const files = backupGroup.backupFiles;\n const blobWriter = new zip.BlobWriter('application/zip');\n const zipWriter = new zip.ZipWriter(blobWriter);\n const blobs = await Promise.all(files.map(file => fetch(file.presignedURL).then(response => response.blob())));\n let entryIndex = 0;\n for (const blob of blobs) {\n const zipReader = new zip.ZipReader(new zip.BlobReader(blob));\n const entries = await zipReader.getEntries();\n // 3. Add each entry to the new ZIP\n for (const entry of entries) {\n const data = await entry.getData(new zip.BlobWriter());\n const filenameArray = entry.filename.split('.');\n const extension = filenameArray.pop();\n const filename = filenameArray.join('.');\n await zipWriter.add(filename + '_' + entryIndex + '.' + extension, new zip.BlobReader(data));\n entryIndex++;\n }\n await zipReader.close();\n }\n await zipWriter.close();\n const blob = await blobWriter.getData();\n const url = window.URL.createObjectURL(new Blob([blob]));\n const link = document.createElement('a');\n const formattedTimestamp = this.formatBackupTimestamp(backupGroup.timestamp);\n const downloadName = `vosaic_backup_${formattedTimestamp}.zip`;\n link.href = url;\n link.setAttribute('download', downloadName);\n document.body.appendChild(link);\n link.click();\n this.downloadingAll = null;\n }\n formatBackupTimestamp(timestamp) {\n const rawTimestamp = Number(timestamp);\n const parsedDate = Number.isFinite(rawTimestamp) ? new Date(rawTimestamp < 1e12 ? rawTimestamp * 1000 : rawTimestamp) : new Date(timestamp);\n if (Number.isNaN(parsedDate.getTime())) {\n return String(timestamp);\n }\n const month = String(parsedDate.getMonth() + 1).padStart(2, '0');\n const day = String(parsedDate.getDate()).padStart(2, '0');\n const year = String(parsedDate.getFullYear());\n return `${month}-${day}-${year}`;\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"authorizer\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"backupCreated\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"backups\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"deletingBackup\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"downloadingFile\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"downloadingAll\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"onInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteBackup\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteBackup\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"createNewBackup\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"createNewBackup\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"downloadFile\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"downloadFile\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"downloadAllFiles\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"downloadAllFiles\"), _class.prototype), _class);\n});","define(\"vosaic/accounts/backups/route\", [\"exports\", \"rsvp\", \"@ember/service\", \"@ember/routing/route\"], function (_exports, _rsvp, _service, _route) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/service\",0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let BackupsRoute = _exports.default = (_class = class BackupsRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor, this);\n _initializerDefineProperty(this, \"session\", _descriptor2, this);\n _initializerDefineProperty(this, \"authorizer\", _descriptor3, this);\n _initializerDefineProperty(this, \"protectedRoute\", _descriptor4, this);\n }\n async model() {\n const myProfile = await this.modelFor('accounts');\n return await (0, _rsvp.hash)({\n profile: myProfile,\n //HACK: myUser and myOrg are not used anywhere but I had to use them after userProfiles to resolve an issue that prevents this page from loading correctly on page refresh.\n myUser: this.modelReloader.getMyUserProfile(),\n myOrg: this.modelReloader.getMyOrganization(),\n backups: fetch(`${this.authorizer.getBaseUrl()}/backups`, {\n credentials: 'include',\n headers: this.authorizer.getAuthHeaders(),\n method: 'GET'\n }).then(response => response.json())\n });\n }\n beforeModel(transition) {\n this.protectedRoute.verifyAuthorization(transition);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"authorizer\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"protectedRoute\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/accounts/backups/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n
\n \n
\n
\n

Existing Backups

\n {{#if this.backups.length}}\n

Below are the existing backups. Each backup ZIP file contains up to 25 videos. You can download them individually or download all backups as a single ZIP file.

\n {{else}}\n

No backups have been created yet.

\n {{/if}}\n
\n
\n {{#if this.maxBackupsReached}}\n \n

Maximum number of backups reached. Please delete existing\n backups to create new ones.

\n {{else}}\n {{#if this.backupCreated}}\n \n

Backup Creation in Process. Backups will start appearing below shortly. It's safe to navigate away from this page.

\n {{else}}\n Create Backup\n {{/if}}\n {{/if}}\n
\n
\n {{#each this.backups as |backupGroup|}}\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n {{#each backupGroup.backupFiles as |file|}}\n \n \n \n \n {{/each}}\n \n \n \n \n \n
Backup files created {{moment-format backupGroup.createdAt 'MM/DD/YYYY h:mm a'}}\n {{#if (eq this.deletingBackup backupGroup.timestamp)}}\n \n {{else}}\n Delete Backup\n {{/if}}\n \n
File NameAction
\n \n {{file.fileName}}\n \n \n {{#if (eq this.downloadingFile file)}}\n \n {{else}}\n \n Download\n \n Download\n {{/if}}\n
 \n {{#if (eq this.downloadingAll backupGroup)}}\n \n {{else}}\n \n Download All\n \n Download All\n {{/if}}\n
\n
\n
\n
\n {{/each}}\n
\n */\n {\n \"id\": \"TJYIhRuq\",\n \"block\": \"[[[11,0],[4,[38,1],[[30,0,[\\\"onInsert\\\"]]],null],[12],[1,\\\"\\\\n\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h2\\\"],[14,0,\\\"h4\\\"],[12],[1,\\\"Existing Backups\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"backups\\\",\\\"length\\\"]],[[[1,\\\" \\\"],[10,2],[12],[1,\\\"Below are the existing backups. Each backup ZIP file contains up to 25 videos. You can download them individually or download all backups as a single ZIP file.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,2],[12],[1,\\\"No backups have been created yet.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"maxBackupsReached\\\"]],[[[1,\\\" \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-success\\\"],[14,\\\"disabled\\\",\\\"\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"Create Backup\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[1,\\\"Maximum number of backups reached. Please delete existing\\\\n backups to create new ones.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"backupCreated\\\"]],[[[1,\\\" \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-success show-action-icon\\\"],[14,\\\"disabled\\\",\\\"\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Loader\\\"],[15,\\\"src\\\",[29,[\\\"/assets/icons/\\\",[28,[37,7],[\\\"logo-loader\\\"],null],\\\".svg\\\"]]],[14,0,\\\"btn-icon action-icon\\\"],[12],[13],[1,\\\"\\\\n Creating Backups\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small\\\"],[12],[1,\\\"Backup Creation in Process. Backups will start appearing below shortly. It's safe to navigate away from this page.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"createNewBackup\\\"]]],null],[12],[1,\\\"Create Backup\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[42,[28,[37,10],[[28,[37,10],[[30,0,[\\\"backups\\\"]]],null]],null],null,[[[1,\\\" \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12 table-responsive\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-sm table-striped m-t-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[14,0,\\\"bg-primary text-white\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[14,\\\"colspan\\\",\\\"2\\\"],[12],[10,1],[14,0,\\\"lead\\\"],[12],[1,\\\"Backup files created \\\"],[10,\\\"strong\\\"],[12],[1,[28,[35,17],[[30,1,[\\\"createdAt\\\"]],\\\"MM/DD/YYYY h:mm a\\\"],null]],[13],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,18],[[30,0,[\\\"deletingBackup\\\"]],[30,1,[\\\"timestamp\\\"]]],null],[[[1,\\\" \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-danger show-action-icon pull-xs-right\\\"],[14,\\\"disabled\\\",\\\"\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Loader\\\"],[15,\\\"src\\\",[29,[\\\"/assets/icons/\\\",[28,[37,7],[\\\"logo-loader\\\"],null],\\\".svg\\\"]]],[14,0,\\\"btn-icon action-icon\\\"],[12],[13],[1,\\\"\\\\n Deleting Backup\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-danger pull-xs-right\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,19],[[30,0,[\\\"deleteBackup\\\"]],[30,1,[\\\"timestamp\\\"]]],null]],null],[12],[1,\\\"Delete Backup\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[14,0,\\\"bg-info text-black small\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[12],[1,\\\"File Name\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"15%\\\"],[12],[1,\\\"Action\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,10],[[28,[37,10],[[30,1,[\\\"backupFiles\\\"]]],null]],null],null,[[[1,\\\" \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n\\\\n \\\"],[1,[30,2,[\\\"fileName\\\"]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[14,\\\"width\\\",\\\"15%\\\"],[14,0,\\\"text-xs-right\\\"],[12],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,18],[[30,0,[\\\"downloadingFile\\\"]],[30,2]],null],[[[1,\\\" \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-primary show-action-icon\\\"],[14,\\\"disabled\\\",\\\"\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Loader\\\"],[15,\\\"src\\\",[29,[\\\"/assets/icons/\\\",[28,[37,7],[\\\"logo-loader\\\"],null],\\\".svg\\\"]]],[14,0,\\\"btn-icon action-icon\\\"],[12],[13],[1,\\\"\\\\n Downloading\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,19],[[30,0,[\\\"downloadFile\\\"]],[30,2]],null]],null],[12],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[14,0,\\\"icon icon-timeline\\\"],[14,5,\\\"width: 16px; height: 16px; fill: #0a9ba5;\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#cloud-download\\\",\\\"http://www.w3.org/1999/xlink\\\"],[15,5,[30,0,[\\\"iconStyle\\\"]]],[12],[1,\\\"Download\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n Download\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\" \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[14,0,\\\"text-xs-right\\\"],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,18],[[30,0,[\\\"downloadingAll\\\"]],[30,1]],null],[[[1,\\\" \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-success show-action-icon\\\"],[14,\\\"disabled\\\",\\\"\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Loader\\\"],[15,\\\"src\\\",[29,[\\\"/assets/icons/\\\",[28,[37,7],[\\\"logo-loader\\\"],null],\\\".svg\\\"]]],[14,0,\\\"btn-icon action-icon\\\"],[12],[13],[1,\\\"\\\\n Downloading\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,19],[[30,0,[\\\"downloadAllFiles\\\"]],[30,1]],null]],null],[12],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[14,0,\\\"icon icon-timeline\\\"],[14,5,\\\"width: 16px; height: 16px; fill: #0a9ba5;\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#cloud-download\\\",\\\"http://www.w3.org/1999/xlink\\\"],[15,5,[30,0,[\\\"iconStyle\\\"]]],[12],[1,\\\"Download All\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n Download All\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"hr\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[1]],null],[13]],[\\\"backupGroup\\\",\\\"file\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h2\\\",\\\"if\\\",\\\"p\\\",\\\"button\\\",\\\"img\\\",\\\"animated-svg\\\",\\\"on\\\",\\\"each\\\",\\\"-track-array\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"span\\\",\\\"strong\\\",\\\"moment-format\\\",\\\"eq\\\",\\\"fn\\\",\\\"tbody\\\",\\\"td\\\",\\\"svg\\\",\\\"use\\\",\\\"hr\\\"]]\",\n \"moduleName\": \"vosaic/accounts/backups/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/basic-information/controller\", [\"exports\", \"@ember/controller\", \"@ember/object\", \"@ember/service\", \"vosaic/config/environment\", \"@ember/runloop\"], function (_exports, _controller, _object, _service, _environment, _runloop) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/object\",0,\"@ember/service\",0,\"vosaic/config/environment\",0,\"@ember/runloop\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let AccountsBasicInformationController = _exports.default = (_class = class AccountsBasicInformationController extends _controller.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor, this);\n _initializerDefineProperty(this, \"currentUser\", _descriptor2, this);\n _initializerDefineProperty(this, \"session\", _descriptor3, this);\n _initializerDefineProperty(this, \"router\", _descriptor4, this);\n _initializerDefineProperty(this, \"authorizer\", _descriptor5, this);\n _initializerDefineProperty(this, \"store\", _descriptor6, this);\n }\n updateDefaultOrg(newOrgId) {\n return new Promise((resolve, reject) => {\n const orginalDefaultProfile = this.model.otherProfiles.find(el => el.isDefault);\n if (orginalDefaultProfile === undefined || !!newOrgId && newOrgId !== orginalDefaultProfile.organizationId) {\n const baseUrl = (_environment.default.apiHost || '') + (_environment.default.apiNamespace || '');\n fetch(`${baseUrl}/userProfiles/default`, {\n credentials: 'include',\n headers: this.authorizer.getAuthHeaders(),\n method: 'POST',\n body: JSON.stringify({\n orgId: newOrgId\n })\n }).then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response;\n }).then(() => {\n resolve();\n }).catch(error => {\n reject(error);\n });\n } else {\n resolve();\n }\n });\n }\n saveBasicInfo(model, defaultOrgId) {\n const userValidated = model.myUserProfile.validate();\n let orgValidated = true;\n let saveOrgNeeded = false;\n const org = this.store.peekRecord('organization', model.myUserProfile.get('organization.id'));\n if (org.hasDirtyAttributes) {\n orgValidated = org.validate();\n saveOrgNeeded = true;\n }\n if (userValidated && orgValidated) {\n model.myUserProfile.save().then(() => {\n if (model.otherProfiles && model.otherProfiles.length > 1) {\n this.updateDefaultOrg(defaultOrgId);\n }\n if (saveOrgNeeded) {\n org.save().then(result => {\n const changedOrgId = result.get('id');\n const currentUserProfiles = this.currentUser.user.profile;\n if (!!currentUserProfiles && currentUserProfiles.get('length') > 0) {\n currentUserProfiles.find(el => el.organizationId === changedOrgId).set('organizationName', result.get('name'));\n }\n // need to update myOtherProfiles as the org name changed\n this.modelReloader.getMyOtherProfiles(true).then(result => {\n //currentUser.profiles\n this.model.otherProfiles = result;\n this.model.viewModel.successMessage = true;\n });\n }, error => {\n console.warn(`Error saving org: ${error}`);\n });\n } else {\n this.model.viewModel.successMessage = true;\n }\n }, error => {\n console.warn(`Error saving userprofile: ${error}`);\n });\n const delay = 3000;\n (0, _runloop.later)(() => {\n this.model.viewModel.successMessage = undefined;\n }, delay);\n } else {\n //this.model.validationErrors = model.myUserProfile.validationErrors;\n this.model.viewModel.successMessage = false;\n }\n }\n updateDefaultOrgToSelected(userModel, newOrgId) {\n userModel.myUserProfile.defaultOrganizationId = newOrgId;\n }\n cancel() {\n this.model.profile.myUserProfile.rollbackAttributes();\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"currentUser\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"authorizer\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _applyDecoratedDescriptor(_class.prototype, \"saveBasicInfo\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveBasicInfo\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateDefaultOrgToSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateDefaultOrgToSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancel\"), _class.prototype), _class);\n});","define(\"vosaic/accounts/basic-information/route\", [\"exports\", \"rsvp\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/routing/route\"], function (_exports, _rsvp, _service, _tracking, _route) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _class2, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let ViewModel = (_class = class ViewModel {\n constructor() {\n _initializerDefineProperty(this, \"successMessage\", _descriptor, this);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"successMessage\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _class);\n let AccountsBasicInformationRoute = _exports.default = (_class2 = class AccountsBasicInformationRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor2, this);\n _initializerDefineProperty(this, \"session\", _descriptor3, this);\n _initializerDefineProperty(this, \"store\", _descriptor4, this);\n _initializerDefineProperty(this, \"protectedRoute\", _descriptor5, this);\n }\n async model() {\n const myProfile = await this.modelFor('accounts');\n const orgId = await this.modelReloader.getMyOrganizationId();\n return await (0, _rsvp.hash)({\n profile: myProfile,\n otherProfiles: myProfile.otherProfiles,\n viewModel: new ViewModel(),\n allGroups: myProfile.allGroups,\n projects: myProfile.projects,\n users: this.store.findAll('userprofile', {\n reload: true\n }),\n //HACK: myUser and myOrg are not used anywhere but I had to use them after userProfiles to resolve an issue that prevents this page from loading correctly on page refresh.\n myUser: this.modelReloader.getMyUserProfile(),\n myOrg: this.modelReloader.getMyOrganization(),\n aicoachConfig: this.store.findRecord('aicoach-configuration', orgId).catch(() => this.store.createRecord('aicoach-configuration'))\n });\n }\n beforeModel(transition) {\n this.protectedRoute.verifyAuthorization(transition);\n }\n }, _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, \"protectedRoute\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class2);\n});","define(\"vosaic/accounts/basic-information/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n {{!-- {{accounts-basic-information-view\n model = model.profile\n successMessage = model.successMessage\n otherProfiles = model.otherProfiles\n saveAction = \"saveBasicInfo\"\n cancelAction = \"cancel\"\n allGroups = model.allGroups\n projects = model.projects\n users = model.users\n }} --}}\n \n \n \n {{outlet}}\n */\n {\n \"id\": \"7E3qopRa\",\n \"block\": \"[[[1,\\\"\\\\n\\\"],[8,[39,0],null,[[\\\"@profile\\\",\\\"@successMessage\\\",\\\"@saveBasicInfo\\\",\\\"@cancelAction\\\",\\\"@updateDefaultOrgToSelected\\\",\\\"@allGroups\\\",\\\"@myGroups\\\",\\\"@projects\\\",\\\"@users\\\",\\\"@canHideAIPrompts\\\"],[[30,1,[\\\"profile\\\"]],[30,1,[\\\"viewModel\\\",\\\"successMessage\\\"]],[30,0,[\\\"saveBasicInfo\\\"]],[30,0,[\\\"cancel\\\"]],[30,0,[\\\"updateDefaultOrgToSelected\\\"]],[30,1,[\\\"allGroups\\\"]],[30,1,[\\\"profile\\\",\\\"myUserProfile\\\",\\\"groups\\\"]],[30,1,[\\\"projects\\\"]],[30,1,[\\\"users\\\"]],[30,1,[\\\"aicoachConfig\\\",\\\"allowUsersToHidePrompts\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[46,[28,[37,2],null,null],null,null,null]],[\\\"@model\\\"],[\\\"accounts-basic-information-view\\\",\\\"component\\\",\\\"-outlet\\\"]]\",\n \"moduleName\": \"vosaic/accounts/basic-information/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/change-password/controller\", [\"exports\", \"@ember/service\", \"@ember/controller\", \"@ember/object\", \"@glimmer/tracking\"], function (_exports, _service, _controller, _object, _tracking) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@ember/controller\",0,\"@ember/object\",0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let ChangePasswordController = _exports.default = (_class = class ChangePasswordController extends _controller.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"authorizer\", _descriptor, this);\n _initializerDefineProperty(this, \"store\", _descriptor2, this);\n _initializerDefineProperty(this, \"successMessage\", _descriptor3, this);\n _initializerDefineProperty(this, \"errorMessage\", _descriptor4, this);\n }\n async saveAction(password) {\n const passwordModel = password;\n return await fetch(`${this.authorizer.getBaseUrl()}/passwords`, {\n credentials: 'include',\n method: 'POST',\n headers: {\n ...this.authorizer.getAuthHeaders(),\n 'Content-Type': 'application/json; charset=utf-8'\n },\n body: JSON.stringify({\n oldPassword: passwordModel.oldPassword,\n newPassword: passwordModel.newPassword,\n confirmPassword: passwordModel.confirmPassword\n })\n }).then(async response => {\n if (!response.ok) {\n throw new Error('Current password incorrect');\n }\n const text = await response.text();\n return text ? JSON.parse(text) : {};\n }).then(() => {\n const newPasswordModel = this.store.createRecord('password');\n this.model.password = newPasswordModel;\n this.successMessage = 'Password Changed Successfully';\n this.errorMessage = undefined;\n // Set successMessage to false after 5 seconds\n const successTimout = 2000;\n setTimeout(() => {\n this.successMessage = undefined;\n }, successTimout);\n }).catch(error => {\n this.errorMessage = error.message;\n });\n }\n cancelAction() {\n this.model.password.oldPassword = '';\n this.model.password.newPassword = '';\n this.model.password.confirmPassword = '';\n this.errorMessage = undefined;\n }\n async resetAction() {\n const myProfile = this.model.myUserProfile; //this.modelFor('accounts');\n this.model.viewModel.resetRequested = true;\n await fetch(`${this.authorizer.getBaseUrl()}/accounts/password/reset?userName=${encodeURIComponent(myProfile.emailAddress)}`, {\n method: 'GET'\n }).then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.text().then(text => text ? JSON.parse(text) : {});\n }).then(() => {\n this.model.viewModel.resetEmailSent = true;\n const successTimout = 2000;\n setTimeout(() => {\n this.model.viewModel.resetRequested = false;\n }, successTimout);\n }).catch(error => {\n console.error('There was a problem with the fetch operation:', error);\n });\n }\n clearMessages() {\n this.successMessage = undefined;\n this.errorMessage = undefined;\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"authorizer\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"successMessage\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"errorMessage\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"saveAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancelAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancelAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"resetAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resetAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"clearMessages\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"clearMessages\"), _class.prototype), _class);\n});","define(\"vosaic/accounts/change-password/route\", [\"exports\", \"rsvp\", \"@ember/service\", \"@ember/routing/route\", \"@glimmer/tracking\"], function (_exports, _rsvp, _service, _route, _tracking) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _class2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/service\",0,\"@ember/routing/route\",0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let ViewModel = (_class = class ViewModel {\n constructor() {\n _initializerDefineProperty(this, \"resetEmailSent\", _descriptor, this);\n _initializerDefineProperty(this, \"resetRequested\", _descriptor2, this);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"resetEmailSent\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"resetRequested\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _class);\n let ChangePasswordRoute = _exports.default = (_class2 = class ChangePasswordRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"session\", _descriptor3, this);\n _initializerDefineProperty(this, \"authorizer\", _descriptor4, this);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor5, this);\n _initializerDefineProperty(this, \"store\", _descriptor6, this);\n _initializerDefineProperty(this, \"protectedRoute\", _descriptor7, this);\n }\n beforeModel(transition) {\n this.protectedRoute.verifyAuthorization(transition);\n }\n async model() {\n const resetRequired = await this.getResetRequired();\n return (0, _rsvp.hash)({\n password: this.store.createRecord('password'),\n resetRequired: resetRequired,\n viewModel: new ViewModel(),\n myUserProfile: this.modelReloader.getMyUserProfile()\n });\n }\n async getResetRequired() {\n await fetch(`${this.authorizer.getBaseUrl()}/passwords/resetrequired`, {\n credentials: 'include',\n method: 'GET',\n headers: this.authorizer.getAuthHeaders()\n }).then(async response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n const text = await response.text();\n return text ? JSON.parse(text) : {};\n }).catch(failure => {\n console.warn('failure ' + failure);\n });\n }\n }, _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, \"authorizer\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, \"protectedRoute\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class2);\n});","define(\"vosaic/accounts/change-password/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n {{page-title 'Change Password'}}\n {{#if @model.resetRequired}}\n

Create a Password

\n {{#if @model.resetEmailSent}}\n

An email with a link to create a new password has been sent.\n Please check your spam/junk folders, and follow\n instructions to create a password.

\n {{else}}\n

\n To use our iOS app, or to log in outside of your LMS,\n you'll need to create a password.

\n
    \n
  1. Press the\n \"Send New Password Email\"\n button below.
  2. \n
  3. Check your email (including spam/junk folders)
  4. \n
  5. Follow the instructions in the email to create a password
  6. \n
\n

Once done, you'll be able to log in to your Vosaic account through your\n LMS, using Vosaic's iOS app, and/or by visiting Vosaic.com directly.\n

\n {{#if @model.viewModel.resetRequested}}\n Email Sent\n {{else}}\n Send New Password Email\n {{/if}}\n {{/if}}\n {{else}}\n \n {{/if}}\n */\n {\n \"id\": \"8xmVHnUk\",\n \"block\": \"[[[1,[28,[35,0],[\\\"Change Password\\\"],null]],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"resetRequired\\\"]],[[[1,\\\" \\\"],[10,\\\"h2\\\"],[14,0,\\\"m-b-md\\\"],[12],[1,\\\"Create a Password\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"resetEmailSent\\\"]],[[[1,\\\" \\\"],[10,2],[12],[1,\\\"An email with a link to create a new password has been sent.\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Please check your spam/junk folders\\\"],[13],[1,\\\", and follow\\\\n instructions to create a password.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,2],[12],[1,\\\"\\\\n To use our iOS app, or to log in outside of your LMS,\\\\n you'll need to create a password.\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"ol\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[14,0,\\\"m-b-xxs\\\"],[12],[1,\\\"Press the\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\\\\"Send New Password Email\\\\\\\"\\\"],[13],[1,\\\"\\\\n button below.\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[14,0,\\\"m-b-xxs\\\"],[12],[1,\\\"Check your email (\\\"],[10,\\\"strong\\\"],[12],[1,\\\"including spam/junk folders\\\"],[13],[1,\\\")\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[1,\\\"Follow the instructions in the email to create a password\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"Once done, you'll be able to log in to your Vosaic account through your\\\\n LMS, using Vosaic's iOS app, and/or by visiting Vosaic.com directly.\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"viewModel\\\",\\\"resetRequested\\\"]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success btn-lg btn-wide show-action-icon text-uppercase disabled\\\"],[24,\\\"disabled\\\",\\\"true\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"resetAction\\\"]]],null],[12],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Updated Icon\\\"],[15,\\\"src\\\",[29,[\\\"/assets/icons/\\\",[28,[37,10],[\\\"action-saved\\\"],null],\\\".svg\\\"]]],[14,0,\\\"btn-icon action-icon\\\"],[12],[13],[1,\\\"Email Sent\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success btn-lg btn-wide\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"resetAction\\\"]]],null],[12],[1,\\\"Send New Password Email\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]]],[]],[[[1,\\\" \\\"],[8,[39,11],null,[[\\\"@password\\\",\\\"@successMessage\\\",\\\"@errorMessage\\\",\\\"@saveAction\\\",\\\"@cancelAction\\\",\\\"@clearMessages\\\"],[[30,1,[\\\"password\\\"]],[30,0,[\\\"successMessage\\\"]],[30,0,[\\\"errorMessage\\\"]],[30,0,[\\\"saveAction\\\"]],[30,0,[\\\"cancelAction\\\"]],[30,0,[\\\"clearMessages\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]]],[\\\"@model\\\"],[\\\"page-title\\\",\\\"if\\\",\\\"h2\\\",\\\"p\\\",\\\"strong\\\",\\\"ol\\\",\\\"li\\\",\\\"button\\\",\\\"on\\\",\\\"img\\\",\\\"animated-svg\\\",\\\"accounts-change-password-view\\\"]]\",\n \"moduleName\": \"vosaic/accounts/change-password/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/controller\", [\"exports\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/controller\"], function (_exports, _service, _tracking, _controller) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/controller\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let AccountsController = _exports.default = (_dec = (0, _service.service)('can-i'), _class = class AccountsController extends _controller.default {\n constructor() {\n super(...arguments);\n _initializerDefineProperty(this, \"can\", _descriptor, this);\n _initializerDefineProperty(this, \"features\", _descriptor2, this);\n _initializerDefineProperty(this, \"router\", _descriptor3, this);\n _initializerDefineProperty(this, \"constants\", _descriptor4, this);\n _defineProperty(this, \"queryParams\", ['paymentSuccessful']);\n _initializerDefineProperty(this, \"loadingGoals\", _descriptor5, this);\n _defineProperty(this, \"onGoalsClick\", () => {\n this.loadingGoals = true;\n });\n if (this.router?.on) {\n this._onRoute = () => {\n if (this.loadingGoals && this.router.currentRouteName?.startsWith?.('accounts.goals')) {\n this.loadingGoals = false;\n }\n };\n this.router.on('routeDidChange', this._onRoute);\n }\n }\n willDestroy() {\n super.willDestroy?.();\n if (this.router?.off && this._onRoute) {\n this.router.off('routeDidChange', this._onRoute);\n }\n }\n get goalsLinkClass() {\n return this.loadingGoals ? ' loading-gradient-bg-light ' : '';\n }\n get hasAccessToGoals() {\n return this.model.org.get('industry') == 'K-12' || this.model.org.get('industry') == 'Higher Education';\n }\n get canSeeBackups() {\n return this.model.myUserProfile.role === this.constants.roles.Administrator || this.model.myUserProfile.role === this.constants.roles.SuperAdmin;\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"can\", [_dec], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"features\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"constants\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"loadingGoals\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _class);\n});","define(\"vosaic/accounts/features/controller\", [\"exports\", \"@ember/controller\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\"], function (_exports, _controller, _object, _tracking, _service) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const DEFAULT_DAILY_BATCH_UPLOAD_LIMIT = 20;\n let FeaturesController = _exports.default = (_class = class FeaturesController extends _controller.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"router\", _descriptor, this);\n _initializerDefineProperty(this, \"store\", _descriptor2, this);\n _initializerDefineProperty(this, \"isUploading\", _descriptor3, this);\n }\n get reachedBatchUploadLimit() {\n const bulkUploadedVideos = this.model.videos.filter(v => v.isBulkUploadVideo);\n if (this.model.myOrg.maximumBatchUploadLimit && bulkUploadedVideos.length < this.model.myOrg.maximumBatchUploadLimit) {\n return false;\n }\n return true;\n }\n get batchUploadDisabled() {\n if (!this.reachedBatchUploadLimit) {\n return false;\n }\n return this.uploadedTodayCount >= DEFAULT_DAILY_BATCH_UPLOAD_LIMIT;\n }\n get uploadedTodayCount() {\n const startOfToday = new Date();\n startOfToday.setHours(0, 0, 0, 0);\n return this.model.videos.filter(video => video.isBulkUploadVideo && video.createdAt && video.createdAt >= startOfToday).length;\n }\n get featuresList() {\n const features = this.model.features;\n const enabledFeatures = this.model.myOrg.features;\n features.forEach(feature => {\n if (!enabledFeatures || !enabledFeatures.includes(feature.id)) {\n feature.showRequestAccess = true;\n }\n });\n return features;\n }\n get showBatchUploadCard() {\n return this.model.myOrg.features.find(feature => feature === 'BatchUpload');\n }\n sendFeatureRequest(feature) {\n window.open(feature.accessLink, '_blank');\n }\n goToSettingsPage(feature) {\n this.router.transitionTo(`accounts.${feature.id.toLowerCase()}`);\n }\n openUploadModal() {\n this.isUploading = true;\n }\n closeUploadModal() {\n this.isUploading = false;\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isUploading\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"sendFeatureRequest\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"sendFeatureRequest\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"goToSettingsPage\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"goToSettingsPage\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openUploadModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openUploadModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeUploadModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeUploadModal\"), _class.prototype), _class);\n});","define(\"vosaic/accounts/features/route\", [\"exports\", \"rsvp\", \"@ember/service\", \"@ember/routing/route\"], function (_exports, _rsvp, _service, _route) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/service\",0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let FeaturesRoute = _exports.default = (_class = class FeaturesRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor, this);\n _initializerDefineProperty(this, \"store\", _descriptor2, this);\n _initializerDefineProperty(this, \"session\", _descriptor3, this);\n _initializerDefineProperty(this, \"router\", _descriptor4, this);\n _initializerDefineProperty(this, \"protectedRoute\", _descriptor5, this);\n }\n beforeModel(transition) {\n this.protectedRoute.verifyAuthorization(transition);\n }\n model() {\n return (0, _rsvp.hash)({\n myUserProfile: this.modelReloader.getMyUserProfile(),\n myOrg: this.modelReloader.getMyOrganization(),\n features: this.store.findAll('feature'),\n users: this.store.findAll('userprofile'),\n videos: this.store.findAll('video')\n });\n }\n afterModel(model) {\n const myUserProfile = model.myUserProfile;\n const role = myUserProfile.get('role');\n if (role === 'Viewer' || role === 'Learner' || role === 'Educator') {\n this.router.transitionTo('videos');\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"protectedRoute\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/accounts/features/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n {{page-title 'Features'}}\n

Manage Features

\n
\n {{#each this.featuresList as |feature|}}\n {{#if feature.showFeature}}\n
\n
\n
\n
\n

{{feature.value}}

\n

{{feature.textBlurb}}

\n {{#if feature.price}}\n

Price {{feature.price}}

\n {{/if}}\n
\n
\n \n
\n {{/if}}\n {{/each}}\n {{! SSO Card }}\n
\n
\n
\n
\n

Single Sign-On (SSO)

\n

Single sign-on (SSO) allows users of your Vosaic account to log in\n using your existing SAML-enabled ID provider, such as Active\n Directory, OneLogin, Google Apps, and many more. This means users do\n not have to keep track of yet another email and password. It also\n makes provisioning new users a breeze.

\n \n
\n
\n \n \n
\n
\n {{! /end SSO card }}\n {{! LTI Card }}\n
\n
\n
\n
\n

Learning Tools Interoperability\n (LTI)

\n

LTI allows users to log into Vosaic using their existing Canvas,\n Brightspace, or other Learning Management System (LMS) accounts.

\n \n
\n
\n \n \n
\n
\n {{! /end LTI card }}\n {{! Batch upload card }}\n {{#if this.showBatchUploadCard}}\n
\n
\n
\n
\n

Batch Upload

\n

Batch uploading allows you to upload multiple video files at a\n time. The file name of the video will become the video name and\n all uploaded videos will belong to the current user.

\n
\n
\n \n
\n
\n {{/if}}\n {{! /end Batch upload card }}\n \n {{! LiveStreaming Card }}\n \n {{#if @model.features.showSettingsPage}}\n
\n
\n
\n
\n

Live Streaming

\n

This feature allows users in Learner, Educator, or Administrator\n roles to live stream videos that are being recorded using built in\n webcam, or plugged in camera. This feature works only when\n recording in a browser.

\n

To learn more about this feature, please visit:

\n
\n \n
\n \n
\n
\n \n {{/if}}\n {{! /end LiveStreaming Card }}\n \n
\n {{#if @model.features.showSettingsPage}}\n
\n

Available Add-Ons

\n
\n \n {{! SSO Card }}\n
\n
\n
\n
\n

Single Sign-On (SSO)

\n

Single sign-on (SSO) allows users of your Vosaic account to log\n in using your existing SAML-enabled ID provider, such as Active\n Directory, OneLogin, PingIdentity, Okta, and many more. This means\n users do not have to keep track of yet another email and password.\n It also makes provisioning new users a breeze.

\n

To enable SSO you'll need to have following information ready:

\n
    \n
  • Certificate
  • \n
  • Authentication end point
  • \n
  • Entity ID
  • \n
  • Claim names for user:\n
      \n
    • First name
    • \n
    • Last name
    • \n
    • Email
    • \n
    \n
  • \n
\n

Need help? Have questions? Please\n contact us\n and we'll help you get started.

\n
\n

Activation Fee: $0.00 one time fee

\n
\n {{! if feature is NOT active display this footer }}\n \n
\n
\n {{! /end SSO card }}\n \n {{! LiveStreaming Card }}\n
\n
\n
\n
\n

Live Streaming

\n

This feature allows users in Learner, Educator, or Adminstrator\n roles to live stream videos that are being recorded using built in\n webcam, or plugged in camera. This feature works only when\n recording in a browser.

\n

To learn more about this feature, please visit:

\n
\n

Purchase: $0.00/year

\n \n
\n {{! if feature is NOT active display this footer }}\n \n
\n
\n {{! /end LiveStreaming Card }}\n \n {{! Reporting Card }}\n
\n
\n
\n
\n

Reporting

\n

Add Reporting feature to be able to generate repots across\n multiple videos.

\n

To learn more about this feature, please visit:

\n
\n

Purchase: $0.00/year

\n \n
\n \n \n
\n
\n {{! /end reporting Card }}\n \n
\n {{/if}}\n \n {{#if this.isUploading}}\n \n {{/if}}\n {{outlet}}\n */\n {\n \"id\": \"WnTXl7X4\",\n \"block\": \"[[[1,[28,[35,0],[\\\"Features\\\"],null]],[1,\\\"\\\\n\\\"],[10,\\\"h2\\\"],[12],[1,\\\"Manage Features\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"row m-t-sm\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,4],[[28,[37,4],[[30,0,[\\\"featuresList\\\"]]],null]],null],null,[[[41,[30,1,[\\\"showFeature\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"col-sm-12 col-md-6 card-deck m-b-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card box-shadow\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card-block\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"small\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h2\\\"],[14,0,\\\"card-title text-primary\\\"],[12],[1,[30,1,[\\\"value\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,[30,1,[\\\"textBlurb\\\"]]],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"price\\\"]],[[[1,\\\" \\\"],[10,2],[12],[1,\\\"Price \\\"],[1,[30,1,[\\\"price\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card-footer\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-6\\\"],[12],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-6 text-xs-right\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"showRequestAccess\\\"]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[30,0,[\\\"sendFeatureRequest\\\"]],[30,1]],null]],null],[12],[1,\\\"Request Access\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,1,[\\\"hasSettings\\\"]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[28,[37,9],[[30,0,[\\\"goToSettingsPage\\\"]],[30,1]],null]],null],[12],[1,\\\"Settings\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-primary disabled\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"Enabled\\\"],[13],[1,\\\"\\\\n \\\"]],[]]]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[1]],null],[1,\\\" \\\"],[10,0],[14,0,\\\"col-sm-12 col-md-6 card-deck m-b-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card box-shadow\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card-block\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"small\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h2\\\"],[14,0,\\\"card-title text-primary\\\"],[12],[1,\\\"Single Sign-On (SSO)\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"Single sign-on (SSO) allows users of your Vosaic account to log in\\\\n using your existing SAML-enabled ID provider, such as Active\\\\n Directory, OneLogin, Google Apps, and many more. This means users do\\\\n not have to keep track of yet another email and password. It also\\\\n makes provisioning new users a breeze.\\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[10,0],[14,0,\\\"card-footer\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-8\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-4 text-xs-right\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,10],[[24,0,\\\"btn btn-sm btn-primary\\\"]],[[\\\"@route\\\"],[\\\"accounts.saml\\\"]],[[\\\"default\\\"],[[[[1,\\\"Settings\\\"]],[]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\" \\\"],[10,0],[14,0,\\\"col-sm-12 col-md-6 card-deck m-b-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card box-shadow\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card-block\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"small\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h2\\\"],[14,0,\\\"card-title text-primary\\\"],[12],[1,\\\"Learning Tools Interoperability\\\\n (LTI)\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"LTI allows users to log into Vosaic using their existing Canvas,\\\\n Brightspace, or other Learning Management System (LMS) accounts.\\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[10,0],[14,0,\\\"card-footer\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-8\\\"],[12],[1,\\\"\\\\n\\\"],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-4 text-xs-right\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,10],[[24,0,\\\"btn btn-sm btn-primary\\\"]],[[\\\"@route\\\"],[\\\"accounts.lti\\\"]],[[\\\"default\\\"],[[[[1,\\\"Settings\\\"]],[]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"showBatchUploadCard\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"col-sm-12 col-md-6 card-deck m-b-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card box-shadow\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card-block\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"small\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h2\\\"],[14,0,\\\"card-title text-primary\\\"],[12],[1,\\\"Batch Upload\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"Batch uploading allows you to upload multiple video files at a\\\\n time. The file name of the video will become the video name and\\\\n all uploaded videos will belong to the current user.\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card-footer\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-8\\\"],[12],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-4 text-xs-right\\\"],[12],[1,\\\"\\\\n \\\"],[10,1],[15,\\\"title\\\",[52,[30,0,[\\\"batchUploadDisabled\\\"]],\\\"Maximum uploads reached today. Contact support to increase your limit\\\"]],[12],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,1,\\\"batch-upload-btn\\\"],[24,0,\\\"btn btn-sm btn-primary\\\"],[16,\\\"disabled\\\",[30,0,[\\\"batchUploadDisabled\\\"]]],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"openUploadModal\\\"]]],null],[12],[1,\\\"Upload\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"features\\\",\\\"showSettingsPage\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"col-sm-12 col-md-6 card-deck m-b-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card box-shadow\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card-block\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"small\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h2\\\"],[14,0,\\\"card-title text-primary\\\"],[12],[1,\\\"Live Streaming\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"This feature allows users in Learner, Educator, or Administrator\\\\n roles to live stream videos that are being recorded using built in\\\\n webcam, or plugged in camera. This feature works only when\\\\n recording in a browser.\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"To learn more about this feature, please visit: \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card-footer\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"c-inputs-stacked\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,12],null,[[\\\"@class\\\",\\\"@name\\\",\\\"@type\\\",\\\"@labelText\\\",\\\"@labelClass\\\"],[\\\"c-checkbox\\\",\\\"EnableLiveStreaming\\\",\\\"checkbox\\\",\\\"Enable Live Streaming\\\",\\\"text-success-ally font-weight-bold small\\\"]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,2,[\\\"features\\\",\\\"showSettingsPage\\\"]],[[[1,\\\" \\\"],[10,\\\"hr\\\"],[14,0,\\\"m-y-lg\\\"],[12],[13],[1,\\\"\\\\n \\\"],[10,\\\"h2\\\"],[12],[1,\\\"Available Add-Ons\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row m-t-sm\\\"],[12],[1,\\\"\\\\n\\\\n\\\"],[1,\\\" \\\"],[10,0],[14,0,\\\"col-sm-12 col-md-6 card-deck m-b-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card box-shadow\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card-block\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"small\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h2\\\"],[14,0,\\\"card-title text-primary\\\"],[12],[1,\\\"Single Sign-On (SSO)\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"Single sign-on (SSO) allows users of your Vosaic account to log\\\\n in using your existing SAML-enabled ID provider, such as Active\\\\n Directory, OneLogin, PingIdentity, Okta, and many more. This means\\\\n users do not have to keep track of yet another email and password.\\\\n It also makes provisioning new users a breeze.\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"To enable SSO you'll need to have following information ready:\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"ul\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[1,\\\"Certificate\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[1,\\\"Authentication end point\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[1,\\\"Entity ID\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[1,\\\"Claim names for user:\\\\n \\\"],[10,\\\"ul\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[1,\\\"First name\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[1,\\\"Last name\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[1,\\\"Email\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"Need help? Have questions? Please\\\\n \\\"],[10,3],[14,6,\\\"https://vosaic.com/contact-us\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noopener noreferrer\\\"],[12],[1,\\\"contact us\\\"],[13],[1,\\\"\\\\n and we'll help you get started.\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"Activation Fee: \\\"],[10,\\\"strong\\\"],[12],[1,\\\"$0.00 one time fee\\\"],[13],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\" \\\"],[10,0],[14,0,\\\"card-footer\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"text-xs-center\\\"],[12],[8,[39,10],[[24,0,\\\"btn btn-success\\\"]],[[\\\"@route\\\"],[\\\"accounts.saml\\\"]],[[\\\"default\\\"],[[[[1,\\\"Activate SSO\\\"]],[]]]]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"\\\\n\\\"],[1,\\\" \\\"],[10,0],[14,0,\\\"col-sm-12 col-md-6 card-deck m-b-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card box-shadow\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card-block\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"small\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h2\\\"],[14,0,\\\"card-title text-primary\\\"],[12],[1,\\\"Live Streaming\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"This feature allows users in Learner, Educator, or Adminstrator\\\\n roles to live stream videos that are being recorded using built in\\\\n webcam, or plugged in camera. This feature works only when\\\\n recording in a browser.\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"To learn more about this feature, please visit: \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"Purchase: \\\"],[10,\\\"strong\\\"],[12],[1,\\\"$0.00/year\\\"],[13],[13],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\" \\\"],[10,0],[14,0,\\\"card-footer\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"text-xs-center\\\"],[12],[8,[39,10],[[24,0,\\\"btn btn-success\\\"]],[[\\\"@route\\\"],[\\\"accounts.saml\\\"]],[[\\\"default\\\"],[[[[1,\\\"Add Live Streaming\\\"]],[]]]]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"\\\\n\\\"],[1,\\\" \\\"],[10,0],[14,0,\\\"col-sm-12 col-md-6 card-deck m-b-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card box-shadow\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card-block\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"small\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h2\\\"],[14,0,\\\"card-title text-primary\\\"],[12],[1,\\\"Reporting\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"Add Reporting feature to be able to generate repots across\\\\n multiple videos.\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"To learn more about this feature, please visit: \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"Purchase: \\\"],[10,\\\"strong\\\"],[12],[1,\\\"$0.00/year\\\"],[13],[13],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card-footer\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"text-xs-center\\\"],[12],[8,[39,10],[[24,0,\\\"btn btn-success\\\"]],[[\\\"@route\\\"],[\\\"accounts.saml\\\"]],[[\\\"default\\\"],[[[[1,\\\"Activate Reporting\\\"]],[]]]]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isUploading\\\"]],[[[1,\\\" \\\"],[8,[39,18],null,[[\\\"@shouldShow\\\",\\\"@onClose\\\",\\\"@users\\\",\\\"@allUsers\\\",\\\"@org\\\",\\\"@uploadedTodayCount\\\",\\\"@reachedBatchUploadLimit\\\",\\\"@focusInitiator\\\"],[[30,0,[\\\"isUploading\\\"]],[30,0,[\\\"closeUploadModal\\\"]],[30,0,[\\\"model\\\",\\\"users\\\"]],[30,0,[\\\"model\\\",\\\"users\\\"]],[30,0,[\\\"model\\\",\\\"myOrg\\\"]],[30,0,[\\\"uploadedTodayCount\\\"]],[30,0,[\\\"reachedBatchUploadLimit\\\"]],\\\"batch-upload-btn\\\"]],null],[1,\\\"\\\\n\\\"]],[]],null],[46,[28,[37,20],null,null],null,null,null]],[\\\"feature\\\",\\\"@model\\\"],[\\\"page-title\\\",\\\"h2\\\",\\\"div\\\",\\\"each\\\",\\\"-track-array\\\",\\\"if\\\",\\\"p\\\",\\\"button\\\",\\\"on\\\",\\\"fn\\\",\\\"link-to\\\",\\\"span\\\",\\\"input-check-radio\\\",\\\"hr\\\",\\\"ul\\\",\\\"li\\\",\\\"a\\\",\\\"strong\\\",\\\"modal-batch-upload\\\",\\\"component\\\",\\\"-outlet\\\"]]\",\n \"moduleName\": \"vosaic/accounts/features/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/goals/route\", [\"exports\", \"rsvp\", \"@ember/service\", \"@ember/routing/route\", \"@ember/object\"], function (_exports, _rsvp, _service, _route, _object) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/service\",0,\"@ember/routing/route\",0,\"@ember/object\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let AccountGoalRoute = _exports.default = (_class = class AccountGoalRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"returnFocus\", _descriptor, this);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor2, this);\n _initializerDefineProperty(this, \"store\", _descriptor3, this);\n _initializerDefineProperty(this, \"router\", _descriptor4, this);\n _initializerDefineProperty(this, \"authorizer\", _descriptor5, this);\n }\n model() {\n // fetch ai coach query dto for users (/aicoachreport/goals?userId={params.user_id})\n const myUser = this.modelReloader.getMyUserProfile();\n const goalQueries = myUser.then(user => new Promise((resolve, reject) => {\n fetch(`${this.authorizer.getBaseUrl()}/aicoachreport/goals?userId=${user.id}`, {\n credentials: 'include',\n headers: this.authorizer.getAuthHeaders(),\n method: 'GET'\n }).then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.json();\n }).then(data => {\n resolve(data);\n }).catch(error => reject(error));\n }));\n const goals = myUser.then(user => this.store.query('goal', {\n userId: user.id\n }));\n return (0, _rsvp.hash)({\n myUser,\n users: this.store.findAll('userprofile'),\n goals,\n goalQueries,\n videos: this.store.findAll('video', {\n reload: true,\n adapterOptions: {\n loadMore: true\n }\n })\n });\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"returnFocus\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"authorizer\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/accounts/goals/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n \n <:noGoals>\n
\n
\n

\n You have not set any goals yet. Go to a video you uploaded and click the\n AI Mate tab to set a goal.
\n Note: You must be in a Learner role or above to upload videos and set goals.\n

\n
\n Goals help video: How to set a goal\n \n \n Tutorial video explaining how goals work and how to set them.\n
\n \n
\n
\n \n \n \n */\n {\n \"id\": \"p/SXM0eA\",\n \"block\": \"[[[8,[39,0],null,[[\\\"@user\\\",\\\"@users\\\",\\\"@goals\\\",\\\"@goalQueries\\\",\\\"@videos\\\",\\\"@goalSharing\\\",\\\"@noGoalsText\\\"],[[30,1,[\\\"myUser\\\"]],[30,1,[\\\"users\\\"]],[30,1,[\\\"goals\\\"]],[30,1,[\\\"goalQueries\\\"]],[30,1,[\\\"videos\\\"]],true,\\\"You have not set any goals yet. Go to a video you uploaded and click the AI Mate tab to set a goal. Note: You have to be in a Learner role or above to upload videos.\\\"]],[[\\\"noGoals\\\"],[[[[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12 col-sm-8\\\"],[12],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"\\\\n You have not set any goals yet. Go to a video you uploaded and click the\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,\\\"AI Mate\\\"],[13],[1,\\\" tab to set a goal.\\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n \\\"],[10,\\\"em\\\"],[12],[1,\\\"Note:\\\"],[13],[1,\\\" \\\"],[10,\\\"strong\\\"],[12],[1,\\\"You must be in a Learner role\\\"],[13],[1,\\\" or above to upload videos and set goals.\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"embed-responsive embed-responsive-16by9 block-center\\\"],[12],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"sr-only\\\"],[14,1,\\\"goals-private-video-label\\\"],[12],[1,\\\"Goals help video: How to set a goal\\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[10,\\\"video\\\"],[14,\\\"crossorigin\\\",\\\"anonymous\\\"],[14,0,\\\"embed-responsive-item\\\"],[14,\\\"width\\\",\\\"70%\\\"],[14,\\\"height\\\",\\\"99%\\\"],[14,\\\"preload\\\",\\\"none\\\"],[14,\\\"controls\\\",\\\"\\\"],[14,\\\"controlslist\\\",\\\"nodownload\\\"],[14,\\\"aria-labelledby\\\",\\\"goals-private-video-label\\\"],[14,\\\"aria-describedby\\\",\\\"goals-private-video-desc\\\"],[14,\\\"poster\\\",\\\"https://cms.vosaic.com/HowToSetAGoal.jpg\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"source\\\"],[14,\\\"src\\\",\\\"https://cms.vosaic.com/HowToSetAGoal.mp4?v=1\\\"],[14,4,\\\"video/mp4\\\"],[12],[13],[1,\\\"\\\\n \\\"],[10,\\\"track\\\"],[14,\\\"label\\\",\\\"English\\\"],[14,\\\"kind\\\",\\\"captions\\\"],[14,\\\"srclang\\\",\\\"en\\\"],[14,\\\"src\\\",\\\"https://cms.vosaic.com/HowToSetAGoal.vtt?v=1\\\"],[14,\\\"default\\\",\\\"\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"sr-only\\\"],[14,1,\\\"goals-private-video-desc\\\"],[12],[1,\\\"Tutorial video explaining how goals work and how to set them.\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n \\\"]],[]]]]]],[\\\"@model\\\"],[\\\"goals-report\\\",\\\":noGoals\\\",\\\"div\\\",\\\"p\\\",\\\"strong\\\",\\\"br\\\",\\\"em\\\",\\\"span\\\",\\\"video\\\",\\\"source\\\",\\\"track\\\"]]\",\n \"moduleName\": \"vosaic/accounts/goals/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/lti/controller\", [\"exports\", \"@ember/controller\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/runloop\", \"@ember/service\"], function (_exports, _controller, _object, _tracking, _runloop, _service) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _dec, _class, _descriptor, _descriptor2, _descriptor3;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let LtiController = _exports.default = (_dec = (0, _service.service)('store'), _class = class LtiController extends _controller.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"store\", _descriptor, this);\n _initializerDefineProperty(this, \"router\", _descriptor2, this);\n _initializerDefineProperty(this, \"linkCopied\", _descriptor3, this);\n }\n // @tracked _model;\n // //gets the model from the route\n // get model() {\n // return this._model;\n // }\n // //value is the model from the route\n // set model(value) {\n // this._model = value;\n // }\n\n onEditClicked(id) {\n this.model.wideView.isWide = false;\n this.router.transitionTo('accounts.lti.edit', id);\n }\n\n // @action\n // inEditMode(isEditing) {\n // this.model.wideView.isWide = !isEditing;\n // //this.wideView = !isEditing;\n // }\n\n // @action\n // cancel() {\n // console.log(this.currentModel)\n // this.currentModel.profile.rollbackAttributes();\n // }\n\n setActivation(config, activation) {\n this.store.findRecord('lti-configuration', config.id, {\n reload: true\n }).then(config => {\n config.active = activation;\n config.save();\n });\n }\n copyToClipboard() {\n const el = document.createElement('textarea');\n el.value = document.getElementById('lti-link').innerText;\n this.linkCopied = 'COPIED';\n document.body.appendChild(el);\n el.select();\n document.execCommand('copy');\n document.body.removeChild(el);\n const timeout = 3000;\n (0, _runloop.later)(() => {\n this.linkCopied = '';\n }, timeout);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"store\", [_dec], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"linkCopied\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return '';\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"onEditClicked\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onEditClicked\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setActivation\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setActivation\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"copyToClipboard\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"copyToClipboard\"), _class.prototype), _class);\n});","define(\"vosaic/accounts/lti/edit/controller\", [\"exports\", \"@ember/controller\", \"@ember/service\", \"@ember/object\"], function (_exports, _controller, _service, _object) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/service\",0,\"@ember/object\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let LtiEditController = _exports.default = (_class = class LtiEditController extends _controller.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"router\", _descriptor, this);\n }\n saveConfig() {\n const config = this.model.config;\n config.save().then(() => {\n this.router.transitionTo('accounts.lti');\n });\n }\n cancel() {\n // I don't think we need to specifically discard the config data but we'll do it anyway for the poetry\n const config = this.model.config;\n config.rollbackAttributes();\n this.router.transitionTo('accounts.lti');\n }\n delete() {\n const config = this.model.config;\n config.destroyRecord().then(() => {\n this.router.transitionTo('accounts.lti');\n });\n }\n onConfigChange(property, value) {\n this.model.config[property] = value;\n } /*\n @action\n enter() {\n this.ltiController.inEditMode(true);\n }\n @action\n exit() {\n this.ltiController.inEditMode(false);\n }*/\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _applyDecoratedDescriptor(_class.prototype, \"saveConfig\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveConfig\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"delete\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"delete\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onConfigChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onConfigChange\"), _class.prototype), _class);\n});","define(\"vosaic/accounts/lti/edit/route\", [\"exports\", \"rsvp\", \"@ember/service\", \"@ember/routing/route\"], function (_exports, _rsvp, _service, _route) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/service\",0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let LtiEditRoute = _exports.default = (_class = class LtiEditRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor, this);\n _initializerDefineProperty(this, \"session\", _descriptor2, this);\n _initializerDefineProperty(this, \"router\", _descriptor3, this);\n _initializerDefineProperty(this, \"store\", _descriptor4, this);\n _initializerDefineProperty(this, \"protectedRoute\", _descriptor5, this);\n }\n beforeModel(transition) {\n this.protectedRoute.verifyAuthorization(transition);\n }\n model(params) {\n const myProfile = this.modelFor('accounts');\n const config = this.store.findRecord('lti-configuration', params.config_id);\n return (0, _rsvp.hash)({\n myProfile: myProfile,\n config: config,\n myUserProfile: this.modelReloader.getMyUserProfile(),\n errorMessage: undefined\n });\n }\n afterModel(model) {\n const myUserProfile = model.myUserProfile;\n const role = myUserProfile.get('role');\n if (role === 'Viewer' || role === 'Learner' || role === 'Educator') {\n this.router.transitionTo('videos');\n }\n }\n activate() {\n const ltiModel = this.modelFor('accounts.lti');\n ltiModel.wideView.isWide = false;\n }\n deactivate() {\n const ltiModel = this.modelFor('accounts.lti');\n ltiModel.wideView.isWide = true;\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"protectedRoute\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/accounts/lti/edit/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n

Edit an LTI configuration

\n \n */\n {\n \"id\": \"YeB1NCgx\",\n \"block\": \"[[[10,\\\"h2\\\"],[12],[1,\\\"Edit an LTI configuration\\\"],[13],[1,\\\"\\\\n\\\"],[8,[39,1],null,[[\\\"@config\\\",\\\"@save\\\",\\\"@cancel\\\",\\\"@canDelete\\\",\\\"@delete\\\",\\\"@onConfigChange\\\"],[[30,0,[\\\"model\\\",\\\"config\\\"]],[30,0,[\\\"saveConfig\\\"]],[30,0,[\\\"cancel\\\"]],true,[30,0,[\\\"delete\\\"]],[30,0,[\\\"onConfigChange\\\"]]]],null]],[],[\\\"h2\\\",\\\"lti-edit\\\"]]\",\n \"moduleName\": \"vosaic/accounts/lti/edit/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/lti/new/controller\", [\"exports\", \"@ember/controller\", \"@ember/service\", \"@ember/object\"], function (_exports, _controller, _service, _object) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/service\",0,\"@ember/object\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let LtiEditController = _exports.default = (_class = class LtiEditController extends _controller.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"router\", _descriptor, this);\n }\n saveConfig() {\n const config = this.model.config;\n config.save().then(() => {\n this.router.transitionTo('accounts.lti');\n });\n }\n cancel() {\n const config = this.model.config;\n config.destroyRecord();\n this.router.transitionTo('accounts.lti');\n }\n onConfigChange(property, value) {\n this.model.config[property] = value;\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _applyDecoratedDescriptor(_class.prototype, \"saveConfig\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveConfig\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onConfigChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onConfigChange\"), _class.prototype), _class);\n});","define(\"vosaic/accounts/lti/new/route\", [\"exports\", \"rsvp\", \"@ember/service\", \"@ember/routing/route\"], function (_exports, _rsvp, _service, _route) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/service\",0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let LtiNewRoute = _exports.default = (_class = class LtiNewRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor, this);\n _initializerDefineProperty(this, \"session\", _descriptor2, this);\n _initializerDefineProperty(this, \"store\", _descriptor3, this);\n _initializerDefineProperty(this, \"router\", _descriptor4, this);\n _initializerDefineProperty(this, \"protectedRoute\", _descriptor5, this);\n }\n beforeModel(transition) {\n this.protectedRoute.verifyAuthorization(transition);\n }\n model() {\n return (0, _rsvp.hash)({\n config: this.store.createRecord('lti-configuration'),\n myUserProfile: this.modelReloader.getMyUserProfile(),\n errorMessage: undefined\n });\n }\n afterModel(model) {\n const myUserProfile = model.myUserProfile;\n const role = myUserProfile.get('role');\n if (role === 'Viewer' || role === 'Learner' || role === 'Educator') {\n this.router.transitionTo('videos');\n }\n }\n activate() {\n const ltiModel = this.modelFor('accounts.lti');\n ltiModel.wideView.isWide = false;\n }\n deactivate() {\n const ltiModel = this.modelFor('accounts.lti');\n ltiModel.wideView.isWide = true;\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"protectedRoute\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/accounts/lti/new/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n

Add LTI Configuration

\n \n */\n {\n \"id\": \"AMv92yRY\",\n \"block\": \"[[[10,\\\"h2\\\"],[12],[1,\\\"Add LTI Configuration\\\"],[13],[1,\\\"\\\\n\\\"],[8,[39,1],null,[[\\\"@config\\\",\\\"@save\\\",\\\"@cancel\\\",\\\"@canDelete\\\",\\\"@onConfigChange\\\"],[[30,0,[\\\"model\\\",\\\"config\\\"]],[30,0,[\\\"saveConfig\\\"]],[30,0,[\\\"cancel\\\"]],false,[30,0,[\\\"onConfigChange\\\"]]]],null]],[],[\\\"h2\\\",\\\"lti-edit\\\"]]\",\n \"moduleName\": \"vosaic/accounts/lti/new/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/lti/route\", [\"exports\", \"rsvp\", \"@ember/service\", \"@ember/routing/route\", \"@glimmer/tracking\"], function (_exports, _rsvp, _service, _route, _tracking) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _class2, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/service\",0,\"@ember/routing/route\",0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let ViewModel = (_class = class ViewModel {\n constructor() {\n _initializerDefineProperty(this, \"isWide\", _descriptor, this);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isWide\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return true;\n }\n }), _class);\n let LtiRoute = _exports.default = (_class2 = class LtiRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor2, this);\n _initializerDefineProperty(this, \"session\", _descriptor3, this);\n _initializerDefineProperty(this, \"constants\", _descriptor4, this);\n _initializerDefineProperty(this, \"routePermissionChecker\", _descriptor5, this);\n _initializerDefineProperty(this, \"router\", _descriptor6, this);\n _initializerDefineProperty(this, \"store\", _descriptor7, this);\n _initializerDefineProperty(this, \"protectedRoute\", _descriptor8, this);\n }\n beforeModel(transition) {\n this.protectedRoute.verifyAuthorization(transition);\n }\n model() {\n const ltiConfig = this.store.findAll('lti-configuration');\n return (0, _rsvp.hash)({\n wideView: new ViewModel(),\n ltiConfig: ltiConfig,\n myUserProfile: this.modelReloader.getMyUserProfile(),\n errorMessage: undefined,\n linkCopied: undefined\n });\n }\n afterModel() {\n this.routePermissionChecker.transitionIfRole([this.constants.roles.Viewer, this.constants.roles.Learner, this.constants.roles.Educator], 'videos');\n }\n }, _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, \"constants\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, \"routePermissionChecker\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, \"protectedRoute\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class2);\n});","define(\"vosaic/accounts/lti/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n \n {{#if this.model.wideView.isWide}}\n

Learning Management Tools (LMS) Integration

\n \n
\n

Automatic Configuration

\n

Use the link below to automatically add Vosaic as a tool in your LMS.\n Important:\n Vosaic only supports\n LTI 1.3\n or\n LTI Advantage.

\n https://vosaic.com/lti\n Copy Link\n {{this.linkCopied}}
\n \n {{#if this.model.ltiConfig.length}}\n
\n \n \n \n \n \n \n \n \n \n \n {{#each this.model.ltiConfig as |config|}}\n \n \n \n \n \n \n {{/each}}\n \n
NameProviderClient ID
{{config.name}}{{config.platform}}{{config.clientId}}\n Edit\n
\n
\n {{/if}}\n
\n

Manual Configuration

\n Add\n Manual LTI Configuration\n

Need Help?\n Here are some instructions:

\n
    \n
  1. Add Vosaic to Canvas
  2. \n
  3. Add Vosaic to Moodle
  4. \n
\n

Your LMS will need following information from\n us\n in order to establish and maintain connections via LTI:

\n
    \n
  1. LTI version:\n Vosaic only supports\n LTI 1.3\n or\n LTI Advantage.
  2. \n
  3. Tool URL: vosaic.com
  4. \n
  5. Target Link URL:\n https://vosaic.com/videos
  6. \n
  7. Link Selection (Deep Linking) URL:\n https://vosaic.com/lti/deeplinking
  8. \n
  9. Public JWK URL:\n https://vosaic.com/api/v1/jwks
  10. \n
  11. Login URL or OpenID Connect Initiation URL:\n https://vosaic.com/ltilogin
  12. \n
  13. Redirection URL:\n Vosaic has a single redirection URL:\n https://vosaic.com/openid
  14. \n
  15. Public JWK URL:\n https://vosaic.com/api/v1/jwks
  16. \n
\n
\n {{else}}{{/if}}\n {{outlet}}\n \n */\n {\n \"id\": \"IZ32ghMg\",\n \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"model\\\",\\\"wideView\\\",\\\"isWide\\\"]],[[[1,\\\" \\\"],[10,\\\"h2\\\"],[12],[1,\\\"Learning Management Tools (LMS) Integration\\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[10,0],[14,0,\\\"card p-a-sm\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h3\\\"],[14,0,\\\"lead\\\"],[12],[1,\\\"Automatic Configuration\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"Use the link below to automatically add Vosaic as a tool in your LMS.\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Important:\\\"],[13],[1,\\\"\\\\n Vosaic only supports\\\\n \\\"],[10,1],[14,5,\\\"text-decoration:underline\\\"],[12],[1,\\\"LTI 1.3\\\"],[13],[1,\\\"\\\\n or\\\\n \\\"],[10,1],[14,5,\\\"text-decoration:underline\\\"],[12],[1,\\\"LTI Advantage\\\"],[13],[1,\\\".\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"code\\\"],[14,1,\\\"lti-link\\\"],[12],[1,\\\"https://vosaic.com/lti\\\"],[13],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-primary\\\"],[24,4,\\\"button\\\"],[4,[38,9],[\\\"click\\\",[30,0,[\\\"copyToClipboard\\\"]]],null],[12],[1,\\\"Copy Link\\\"],[13],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"small\\\"],[12],[1,[30,0,[\\\"linkCopied\\\"]]],[13],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"model\\\",\\\"ltiConfig\\\",\\\"length\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"table-responsive\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"table\\\"],[14,0,\\\"table m-b-lg\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[12],[1,\\\"Name\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[12],[1,\\\"Provider\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[12],[1,\\\"Client ID\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[14,0,\\\"text-xs-right\\\"],[12],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,16],[[28,[37,16],[[30,0,[\\\"model\\\",\\\"ltiConfig\\\"]]],null]],null],null,[[[1,\\\" \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,[30,1,[\\\"name\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,[30,1,[\\\"platform\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,[30,1,[\\\"clientId\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[14,0,\\\"text-xs-right\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,18],[[24,0,\\\"btn btn-md btn-success\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"accounts.lti.edit\\\",[30,1,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"Edit\\\"]],[]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[10,0],[14,0,\\\"card p-a-sm\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h3\\\"],[14,0,\\\"lead\\\"],[12],[1,\\\"Manual Configuration\\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,18],[[24,0,\\\"btn btn-sm btn-success m-b-sm\\\"]],[[\\\"@route\\\"],[\\\"accounts.lti.new\\\"]],[[\\\"default\\\"],[[[[1,\\\"Add\\\\n Manual LTI Configuration\\\"]],[]]]]],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"m-b-xxs\\\"],[12],[10,\\\"strong\\\"],[14,0,\\\"text-danger\\\"],[12],[1,\\\"Need Help?\\\"],[13],[1,\\\"\\\\n Here are some instructions:\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"ol\\\"],[14,0,\\\"m-b-xs\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[10,3],[14,6,\\\"https://vosaic.com/support/add-vosaic-to-canvas\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noopener noreferrer\\\"],[12],[1,\\\"Add Vosaic to \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Canvas\\\"],[13],[13],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[10,3],[14,6,\\\"https://vosaic.com/support/add-vosaic-to-moodle\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noopener noreferrer\\\"],[12],[1,\\\"Add Vosaic to \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Moodle\\\"],[13],[13],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[10,\\\"strong\\\"],[14,0,\\\"text-danger\\\"],[12],[1,\\\"Your LMS will need following information from\\\\n us\\\"],[13],[1,\\\"\\\\n in order to establish and maintain connections via LTI:\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"ol\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[14,0,\\\"m-b-xs\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"LTI version:\\\"],[13],[1,\\\"\\\\n Vosaic only supports\\\\n \\\"],[10,1],[14,5,\\\"text-decoration:underline\\\"],[12],[1,\\\"LTI 1.3\\\"],[13],[1,\\\"\\\\n or\\\\n \\\"],[10,1],[14,5,\\\"text-decoration:underline\\\"],[12],[1,\\\"LTI Advantage\\\"],[13],[1,\\\".\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[14,0,\\\"m-b-xs\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Tool URL:\\\"],[13],[1,\\\" \\\"],[10,\\\"code\\\"],[12],[1,\\\"vosaic.com\\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[14,0,\\\"m-b-xs\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Target Link URL:\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"code\\\"],[12],[1,\\\"https://vosaic.com/videos\\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[14,0,\\\"m-b-xs\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Link Selection (Deep Linking) URL:\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"code\\\"],[12],[1,\\\"https://vosaic.com/lti/deeplinking\\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[14,0,\\\"m-b-xs\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Public JWK URL:\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"code\\\"],[12],[1,\\\"https://vosaic.com/api/v1/jwks\\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[14,0,\\\"m-b-xs\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Login URL or OpenID Connect Initiation URL:\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"code\\\"],[12],[1,\\\"https://vosaic.com/ltilogin\\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[14,0,\\\"m-b-xs\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Redirection URL:\\\"],[13],[1,\\\"\\\\n Vosaic has a single redirection URL:\\\\n \\\"],[10,\\\"code\\\"],[12],[1,\\\"https://vosaic.com/openid\\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Public JWK URL:\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"code\\\"],[12],[1,\\\"https://vosaic.com/api/v1/jwks\\\"],[13],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[],[]]],[1,\\\"\\\\n\\\"],[46,[28,[37,23],null,null],null,null,null],[1,\\\"\\\\n\\\"]],[\\\"config\\\"],[\\\"if\\\",\\\"h2\\\",\\\"div\\\",\\\"h3\\\",\\\"p\\\",\\\"strong\\\",\\\"span\\\",\\\"code\\\",\\\"button\\\",\\\"on\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"td\\\",\\\"link-to\\\",\\\"ol\\\",\\\"li\\\",\\\"a\\\",\\\"component\\\",\\\"-outlet\\\"]]\",\n \"moduleName\": \"vosaic/accounts/lti/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/payment-history/route\", [\"exports\", \"rsvp\", \"@ember/service\", \"@ember/routing/route\"], function (_exports, _rsvp, _service, _route) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/service\",0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let PaymentHistoryRoute = _exports.default = (_class = class PaymentHistoryRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor, this);\n _initializerDefineProperty(this, \"router\", _descriptor2, this);\n }\n model() {\n return (0, _rsvp.hash)({\n myUserProfile: this.modelReloader.getMyUserProfile()\n });\n }\n afterModel(model) {\n const myUserProfile = model.myUserProfile;\n const role = myUserProfile.get('role');\n if (role === 'Viewer' || role === 'Learner' || role === 'Educator') {\n this.router.transitionTo('videos');\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/accounts/payment-history/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n {{page-title 'Payment History'}}\n

Payment History

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Payment DatePackageAmountInvoice
02/02/2015Basic$3,500.00View/Print Invoice
02/02/2014Basic$3,500.00View/Print Invoice
02/02/2015Basic$3,500.00View/Print Invoice
\n \n {{outlet}}\n \n */\n {\n \"id\": \"hEoArsUO\",\n \"block\": \"[[[1,[28,[35,0],[\\\"Payment History\\\"],null]],[1,\\\"\\\\n\\\"],[10,\\\"h2\\\"],[14,0,\\\"m-b-md\\\"],[12],[1,\\\"Payment History\\\"],[13],[1,\\\"\\\\n\\\"],[10,\\\"table\\\"],[14,0,\\\"table\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[12],[1,\\\"Payment Date\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[12],[1,\\\"Package\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[12],[1,\\\"Amount\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[12],[1,\\\"Invoice\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,\\\"02/02/2015\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,\\\"Basic\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,\\\"$3,500.00\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[10,3],[14,6,\\\"#\\\"],[12],[1,\\\"View/Print Invoice\\\"],[13],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,\\\"02/02/2014\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,\\\"Basic\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,\\\"$3,500.00\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[10,3],[14,6,\\\"#\\\"],[12],[1,\\\"View/Print Invoice\\\"],[13],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,\\\"02/02/2015\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,\\\"Basic\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,\\\"$3,500.00\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[10,3],[14,6,\\\"#\\\"],[12],[1,\\\"View/Print Invoice\\\"],[13],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[46,[28,[37,10],null,null],null,null,null],[1,\\\"\\\\n\\\"]],[],[\\\"page-title\\\",\\\"h2\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"tbody\\\",\\\"td\\\",\\\"a\\\",\\\"component\\\",\\\"-outlet\\\"]]\",\n \"moduleName\": \"vosaic/accounts/payment-history/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/payments-and-plans/controller\", [\"exports\", \"@ember/service\", \"@ember/controller\", \"@ember/object\"], function (_exports, _service, _controller, _object) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@ember/controller\",0,\"@ember/object\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let PaymentsAndPlansController = _exports.default = (_class = class PaymentsAndPlansController extends _controller.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"router\", _descriptor, this);\n }\n purchaseStudiocode() {\n this.router.transitionTo('purchase', {\n queryParams: {\n isRenewal: null,\n id: null,\n licenseNumber: null\n }\n });\n }\n purchaseConnect() {\n const hasConnect = this.model.viewModel.hasConnect;\n this.router.transitionTo('payment', {\n queryParams: {\n isRenewal: hasConnect\n }\n });\n }\n renewStudiocode(license) {\n const hasStudiocode = this.model.viewModel.studiocodeLicenses ? true : false;\n this.router.transitionTo('purchase', {\n queryParams: {\n isRenewal: hasStudiocode,\n id: license.id,\n licenseNumber: license.licenseNumber\n }\n });\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _applyDecoratedDescriptor(_class.prototype, \"purchaseStudiocode\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"purchaseStudiocode\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"purchaseConnect\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"purchaseConnect\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"renewStudiocode\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"renewStudiocode\"), _class.prototype), _class);\n});","define(\"vosaic/accounts/payments-and-plans/route\", [\"exports\", \"rsvp\", \"@ember/object\", \"@ember/service\", \"@ember/routing/route\"], function (_exports, _rsvp, _object, _service, _route) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let PaymentsAndPlansRoute = _exports.default = (_class = class PaymentsAndPlansRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"session\", _descriptor, this);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor2, this);\n _initializerDefineProperty(this, \"router\", _descriptor3, this);\n _initializerDefineProperty(this, \"protectedRoute\", _descriptor4, this);\n }\n beforeModel(transition) {\n this.protectedRoute.verifyAuthorization(transition);\n }\n afterModel(model) {\n if (model && model.userProfile && model.userProfile.permissions && model.userProfile.permissions.includes) {\n if (!model.userProfile.permissions.includes('seeOrgBilling')) {\n this.router.transitionTo('videos');\n }\n } else {\n this.router.transitionTo('videos');\n }\n }\n async model() {\n /* eslint max-statements: */\n const orgPromise = await this.modelReloader.getMyOrganization();\n const otherProfiles = await this.modelReloader.getMyOtherProfiles();\n const viewModel = _object.default.create({\n studiocode: null,\n planMinutes: null,\n connectActive: null,\n hasConnect: null,\n userLimit: null,\n planPackage: null,\n expiration: null,\n uploadedMinutes: null,\n isParent: false,\n isChild: false\n });\n const pricingPlan = await orgPromise.pricingPlan;\n const otherPlans = orgPromise.otherPlans;\n let studiocodeLicenses;\n const todaysDate = new Date();\n if (otherPlans) {\n studiocodeLicenses = otherPlans.filter(el => el.productCode === 'studiocode');\n }\n if (orgPromise.pricingPlanExpires > todaysDate) {\n viewModel.connectActive = true;\n }\n if (orgPromise.pricingPlan) {\n viewModel.hasConnect = true;\n viewModel.userLimit = pricingPlan.userLimit;\n viewModel.planPackage = pricingPlan.name;\n }\n if (orgPromise.parentOrganizationId) {\n if (orgPromise.parentOrganizationId === orgPromise.id) {\n viewModel.isParent = true;\n } else {\n viewModel.isChild = true;\n }\n }\n viewModel.expiration = orgPromise.pricingPlanExpires;\n viewModel.studiocodeLicenses = studiocodeLicenses;\n viewModel.planMinutes = orgPromise.pricingPlan.totalTranscodeMinutesLimit;\n viewModel.uploadedMinutes = orgPromise.usages.totalMinutesUploaded;\n return (0, _rsvp.hash)({\n profile: this.modelReloader.getMyUserProfile(),\n orgPromise: orgPromise,\n viewModel: viewModel,\n pricingPlan: pricingPlan,\n userProfile: this.modelReloader.getMyUserProfile(),\n // TODO DUPE of profile\n otherProfiles: otherProfiles\n });\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"protectedRoute\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/accounts/payments-and-plans/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n {{page-title \"Account Details\"}}\n

Your Account Details

\n {{#if @model.viewModel.connectActive}}\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Paid SeatsUploaded MinutesMinutes LimitExpiration DateAction
{{@model.viewModel.userLimit}}{{@model.viewModel.uploadedMinutes}}{{@model.viewModel.planMinutes}}{{moment-format @model.viewModel.expiration 'M/DD/YYYY'}}\n Renew\n Subscription\n
\n
\n \n {{else}}\n

Vosaic provides secure cloud access and allows you to code,\n share, and collaborate on your projects from anywhere, anytime.\n Learn more\n about Vosaic, or\n select a plan to get started.

\n {{/if}}\n \n {{outlet}}\n */\n {\n \"id\": \"Hkc9cwNk\",\n \"block\": \"[[[1,[28,[35,0],[\\\"Account Details\\\"],null]],[1,\\\"\\\\n\\\"],[10,\\\"h2\\\"],[14,0,\\\"m-b-md\\\"],[12],[1,\\\"Your Account Details\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"viewModel\\\",\\\"connectActive\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"table-responsive\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"table\\\"],[14,0,\\\"table m-b-lg\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[12],[1,\\\"Paid Seats\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[12],[1,\\\"Uploaded Minutes\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[12],[1,\\\"Minutes Limit\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[12],[1,\\\"Expiration Date\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[14,0,\\\"text-xs-right\\\"],[12],[1,\\\"Action\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,[30,1,[\\\"viewModel\\\",\\\"userLimit\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,[30,1,[\\\"viewModel\\\",\\\"uploadedMinutes\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,[30,1,[\\\"viewModel\\\",\\\"planMinutes\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,10],[[30,1,[\\\"viewModel\\\",\\\"expiration\\\"]],\\\"M/DD/YYYY\\\"],null]],[13],[1,\\\"\\\\n\\\\n \\\"],[10,\\\"td\\\"],[14,0,\\\"text-xs-right\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,11],[[24,0,\\\"btn btn-md btn-success\\\"]],[[\\\"@route\\\"],[\\\"accounts.purchase\\\"]],[[\\\"default\\\"],[[[[1,\\\"Renew\\\\n Subscription\\\"]],[]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,2],[14,0,\\\"m-b-lg\\\"],[12],[1,\\\"Vosaic provides secure cloud access and allows you to code,\\\\n share, and collaborate on your projects from anywhere, anytime.\\\\n \\\"],[10,3],[14,6,\\\"../products/vosaic-connect\\\"],[12],[1,\\\"Learn more\\\"],[13],[1,\\\"\\\\n about Vosaic, or\\\\n \\\"],[8,[39,11],null,[[\\\"@route\\\"],[\\\"accounts.purchase\\\"]],[[\\\"default\\\"],[[[[10,\\\"strong\\\"],[12],[1,\\\"select a plan to get started.\\\"],[13]],[]]]]],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[46,[28,[37,16],null,null],null,null,null]],[\\\"@model\\\"],[\\\"page-title\\\",\\\"h2\\\",\\\"if\\\",\\\"div\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"tbody\\\",\\\"td\\\",\\\"moment-format\\\",\\\"link-to\\\",\\\"p\\\",\\\"a\\\",\\\"strong\\\",\\\"component\\\",\\\"-outlet\\\"]]\",\n \"moduleName\": \"vosaic/accounts/payments-and-plans/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/purchase/controller\", [\"exports\", \"@ember/controller\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\"], function (_exports, _controller, _tracking, _object, _service) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let AccountsPurchaseController = _exports.default = (_class = class AccountsPurchaseController extends _controller.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"router\", _descriptor, this);\n _initializerDefineProperty(this, \"currentUser\", _descriptor2, this);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor3, this);\n _initializerDefineProperty(this, \"selectedYears\", _descriptor4, this);\n }\n get renewalRequestUrl() {\n //TODO: check if trial and use a different URL.\n const base = 'https://vosaic.com/page/request-a-renewal';\n try {\n const user = this.model.myUserProfile;\n const org = this.model.myOrg;\n const email = encodeURIComponent(user?.emailAddress || '');\n const first = encodeURIComponent(user?.firstName || '');\n const last = encodeURIComponent(user?.lastName || '');\n const orgName = encodeURIComponent(org && (org.get ? org.get('name') : org.name) || '');\n const industry = encodeURIComponent(org && (org.get ? org.get('industry') : org.industry) || '');\n const seats = encodeURIComponent(org?.pricingPlan?.userLimit || org?.pricingPlan?.get?.('userLimit') || '');\n const params = `e=${email}&fn=${first}&ln=${last}&o=${orgName}&i=${industry}&seats=${seats}`;\n return `${base}?${params}`;\n } catch (_e) {\n return base;\n }\n }\n get total() {\n return this.model.annualPrice * this.selectedYears;\n }\n onYearsChange(event) {\n this.selectedYears = parseInt(event.target.value, 10) || 1;\n }\n goToPayment() {\n // Navigate to a payment route (to be implemented) and pass along plan meta via query params\n this.router.transitionTo('accounts.purchase.payment', {\n queryParams: {\n years: this.selectedYears\n }\n });\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"currentUser\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"selectedYears\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return 1;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"onYearsChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onYearsChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"goToPayment\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"goToPayment\"), _class.prototype), _class);\n});","define(\"vosaic/accounts/purchase/payment/controller\", [\"exports\", \"@ember/controller\", \"@glimmer/tracking\", \"@ember/object\"], function (_exports, _controller, _tracking, _object) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@glimmer/tracking\",0,\"@ember/object\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let AccountsPurchasePaymentController = _exports.default = (_class = class AccountsPurchasePaymentController extends _controller.default {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"queryParams\", ['years']);\n _initializerDefineProperty(this, \"years\", _descriptor, this);\n _initializerDefineProperty(this, \"thankYouScreen\", _descriptor2, this);\n _initializerDefineProperty(this, \"thankYouScreenModel\", _descriptor3, this);\n }\n onPaymentSuccess(params) {\n this.thankYouScreen = true;\n this.thankYouScreenModel = params;\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"years\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return 1;\n }\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"thankYouScreen\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"thankYouScreenModel\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return {};\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"onPaymentSuccess\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onPaymentSuccess\"), _class.prototype), _class);\n});","define(\"vosaic/accounts/purchase/payment/route\", [\"exports\", \"@ember/routing/route\", \"rsvp\", \"@ember/service\"], function (_exports, _route, _rsvp, _service) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\",0,\"rsvp\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let AccountsPurchasePaymentRoute = _exports.default = (_class = class AccountsPurchasePaymentRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor, this);\n }\n model(params) {\n const years = parseInt(params.years, 10) || 1;\n return (0, _rsvp.hash)({\n user: this.modelReloader.getMyUserProfile(),\n org: this.modelReloader.getMyOrganization(),\n planName: '5 user plan',\n seatCount: 5,\n annualPrice: 1099,\n years,\n total: 1099 * years\n });\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/accounts/purchase/payment/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n {{page-title 'Purchase Payment'}}\n {{#if this.thankYouScreen}}\n \n {{else}}\n \n {{/if}}\n */\n {\n \"id\": \"PthyqmQU\",\n \"block\": \"[[[1,[28,[35,0],[\\\"Purchase Payment\\\"],null]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"thankYouScreen\\\"]],[[[1,\\\" \\\"],[8,[39,2],null,[[\\\"@model\\\"],[[30,0,[\\\"thankYouScreenModel\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[8,[39,3],null,[[\\\"@model\\\",\\\"@org\\\",\\\"@user\\\",\\\"@onPaymentSuccess\\\"],[[30,1],[30,1,[\\\"org\\\"]],[30,1,[\\\"user\\\"]],[30,0,[\\\"onPaymentSuccess\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]]],[\\\"@model\\\"],[\\\"page-title\\\",\\\"if\\\",\\\"renew-thanks\\\",\\\"make-payment\\\"]]\",\n \"moduleName\": \"vosaic/accounts/purchase/payment/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/purchase/route\", [\"exports\", \"@ember/routing/route\", \"rsvp\", \"@ember/service\"], function (_exports, _route, _rsvp, _service) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/routing/route\",0,\"rsvp\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let AccountsPurchaseRoute = _exports.default = (_class = class AccountsPurchaseRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor, this);\n }\n model() {\n // static plan definition for now\n return (0, _rsvp.hash)({\n planName: 'All Features (5 Paid Seats)',\n seatCount: 5,\n annualPrice: 1099,\n // USD per year\n maxYears: 2,\n selectedYears: 1,\n myUserProfile: this.modelReloader.getMyUserProfile(),\n myOrg: this.modelReloader.getMyOrganization()\n });\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/accounts/purchase/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n {{page-title 'Purchase Subscription'}}\n {{#if (eq this.router.currentRouteName 'accounts.purchase.payment')}}\n {{outlet}}\n {{else}}\n

Purchase Subscription

\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
PlanSubscription YearsTotalSubscribe
{{this.model.planName}}\n \n \n {{format-money this.total}}\n \n
\n Need more than 5 paid seats? Request a Renewal Quote\n
\n
\n {{/if}}\n \n */\n {\n \"id\": \"a2xVZc7Y\",\n \"block\": \"[[[1,[28,[35,0],[\\\"Purchase Subscription\\\"],null]],[1,\\\"\\\\n\\\"],[41,[28,[37,2],[[30,0,[\\\"router\\\",\\\"currentRouteName\\\"]],\\\"accounts.purchase.payment\\\"],null],[[[1,\\\" \\\"],[46,[28,[37,4],null,null],null,null,null],[1,\\\"\\\\n\\\"]],[]],[[[10,\\\"h2\\\"],[14,0,\\\"m-b-md\\\"],[12],[1,\\\"Purchase Subscription\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"table-responsive\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"table\\\"],[14,0,\\\"table m-b-lg\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[12],[1,\\\"Plan\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[12],[1,\\\"Subscription Years\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[14,0,\\\"text-xs-right\\\"],[12],[1,\\\"Total\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[14,0,\\\"text-xs-right\\\"],[12],[1,\\\"Subscribe\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,[30,0,[\\\"model\\\",\\\"planName\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"label\\\"],[14,\\\"for\\\",\\\"years-select\\\"],[14,0,\\\"sr-only\\\"],[12],[1,\\\"Number of years\\\"],[13],[1,\\\"\\\\n \\\"],[11,\\\"select\\\"],[24,1,\\\"years-select\\\"],[24,0,\\\"c-select form-control form-control-sm\\\"],[4,[38,15],[\\\"change\\\",[30,0,[\\\"onYearsChange\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,17],[[28,[37,17],[[28,[37,18],[1,2],null]],null]],null],null,[[[1,\\\" \\\"],[10,\\\"option\\\"],[15,2,[30,1]],[15,\\\"selected\\\",[28,[37,2],[[30,1],[30,0,[\\\"selectedYears\\\"]]],null]],[12],[1,[30,1]],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[14,0,\\\"text-xs-right\\\"],[12],[1,[28,[35,20],[[30,0,[\\\"total\\\"]]],null]],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[14,0,\\\"text-xs-right\\\"],[12],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success btn-sm\\\"],[24,4,\\\"button\\\"],[4,[38,15],[\\\"click\\\",[30,0,[\\\"goToPayment\\\"]]],null],[12],[1,\\\"Renew Online\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[14,\\\"colspan\\\",\\\"4\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Need more than 5 paid seats?\\\"],[13],[1,\\\" \\\"],[10,3],[15,6,[29,[[30,0,[\\\"renewalRequestUrl\\\"]]]]],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noopener noreferrer\\\"],[14,0,\\\"font-weight-bold\\\"],[12],[1,\\\"Request a Renewal Quote\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[\\\"yr\\\"],[\\\"page-title\\\",\\\"if\\\",\\\"eq\\\",\\\"component\\\",\\\"-outlet\\\",\\\"h2\\\",\\\"div\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"tbody\\\",\\\"td\\\",\\\"label\\\",\\\"select\\\",\\\"on\\\",\\\"each\\\",\\\"-track-array\\\",\\\"array\\\",\\\"option\\\",\\\"format-money\\\",\\\"button\\\",\\\"strong\\\",\\\"a\\\"]]\",\n \"moduleName\": \"vosaic/accounts/purchase/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/route\", [\"exports\", \"rsvp\", \"@ember/service\", \"@ember/routing/route\"], function (_exports, _rsvp, _service, _route) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/service\",0,\"@ember/routing/route\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let AccountsRoute = _exports.default = (_class = class AccountsRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"session\", _descriptor, this);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor2, this);\n _initializerDefineProperty(this, \"store\", _descriptor3, this);\n _initializerDefineProperty(this, \"protectedRoute\", _descriptor4, this);\n }\n beforeModel(transition) {\n this.protectedRoute.verifyAuthorization(transition);\n }\n model() {\n return (0, _rsvp.hash)({\n myUserProfile: this.modelReloader.getMyUserProfile(),\n otherProfiles: this.modelReloader.getMyOtherProfiles(),\n org: this.modelReloader.getMyOrganization(),\n allGroups: this.store.findAll('group'),\n projects: this.store.findAll('project')\n });\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"protectedRoute\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/accounts/saml/controller\", [\"exports\", \"@ember/controller\", \"@ember/object\"], function (_exports, _controller, _object) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/object\"eaimeta@70e063a35619d71f\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n let SamlController = _exports.default = (_class = class SamlController extends _controller.default {\n resetSuccessMessage() {\n this.successMessage = undefined;\n }\n saveSamlInfo(model) {\n const isVerified = model.isVerified;\n if (isVerified) {\n //let config = this.store.createRecord('samlConfiguration');\n model.save().then(result => {\n this.model.samlconfig = result;\n }, error => {\n //cry and stuff\n\n console.warn(error);\n });\n }\n }\n valueChanged(field, value) {\n this.model.samlconfig[field] = value;\n }\n verifyDomain(model) {\n this.tryVerifyDomain(model).then(result => {\n this.isVerified = result === true || false;\n });\n }\n cancel() {\n window.location.reload();\n }\n }, _applyDecoratedDescriptor(_class.prototype, \"resetSuccessMessage\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"resetSuccessMessage\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveSamlInfo\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveSamlInfo\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"valueChanged\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"valueChanged\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"verifyDomain\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"verifyDomain\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancel\"), _class.prototype), _class);\n});","define(\"vosaic/accounts/saml/route\", [\"exports\", \"rsvp\", \"@ember/service\", \"@ember/routing/route\", \"@glimmer/tracking\"], function (_exports, _rsvp, _service, _route, _tracking) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _class2, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/service\",0,\"@ember/routing/route\",0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let ViewModel = (_class = class ViewModel {\n constructor() {\n _initializerDefineProperty(this, \"vosaicDnsLinkCopied\", _descriptor, this);\n _initializerDefineProperty(this, \"vosaicMetaLinkCopied\", _descriptor2, this);\n _initializerDefineProperty(this, \"vosaicAcsLinkCopied\", _descriptor3, this);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"vosaicDnsLinkCopied\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"vosaicMetaLinkCopied\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"vosaicAcsLinkCopied\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _class);\n let SamlRoute = _exports.default = (_class2 = class SamlRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor4, this);\n _initializerDefineProperty(this, \"session\", _descriptor5, this);\n _initializerDefineProperty(this, \"authorizer\", _descriptor6, this);\n _initializerDefineProperty(this, \"routePermissionChecker\", _descriptor7, this);\n _initializerDefineProperty(this, \"store\", _descriptor8, this);\n _initializerDefineProperty(this, \"requireEmailConfirmation\", _descriptor9, this);\n _initializerDefineProperty(this, \"samlConfiguration\", _descriptor0, this);\n _initializerDefineProperty(this, \"protectedRoute\", _descriptor1, this);\n _initializerDefineProperty(this, \"router\", _descriptor10, this);\n }\n beforeModel(transition) {\n this.protectedRoute.verifyAuthorization(transition);\n }\n model() {\n const myProfile = this.modelFor('accounts').myUserProfile;\n let samlConfig = this.store.peekRecord('saml-configuration', myProfile.organizationId);\n if (samlConfig === null) {\n samlConfig = this.samlConfiguration.getCurrentSamlConfig(myProfile);\n }\n\n // Only admins can open this page (afterModel redirects everyone else), so only they need the child orgs.\n const isAdmin = ['OrgAdmin', 'SuperAdmin'].includes(myProfile.role);\n return (0, _rsvp.hash)({\n myProfile: myProfile,\n samlconfig: samlConfig,\n childOrgs: isAdmin ? this.samlConfiguration.getChildOrgs() : [],\n myUserProfile: myProfile,\n errorMessage: undefined,\n successMessage: undefined,\n viewModel: new ViewModel()\n });\n }\n afterModel(model) {\n const {\n role\n } = model.myUserProfile;\n // Only admins can read or change SAML settings, so send every other role away.\n if (['Viewer', 'Learner', 'Educator', 'Sales'].includes(role)) {\n this.router.transitionTo('videos');\n }\n }\n }, _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, \"authorizer\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, \"routePermissionChecker\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, \"requireEmailConfirmation\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor0 = _applyDecoratedDescriptor(_class2.prototype, \"samlConfiguration\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor1 = _applyDecoratedDescriptor(_class2.prototype, \"protectedRoute\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class2);\n});","define(\"vosaic/accounts/saml/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n \n \n {{outlet}}\n */\n {\n \"id\": \"pGmG+EDd\",\n \"block\": \"[[[8,[39,0],null,[[\\\"@profile\\\",\\\"@model\\\",\\\"@childOrgs\\\",\\\"@isVerified\\\",\\\"@successMessage\\\",\\\"@resetSuccessMessage\\\",\\\"@saveAction\\\",\\\"@cancelAction\\\",\\\"@valueChanged\\\",\\\"@viewModel\\\"],[[30,0,[\\\"model\\\",\\\"myProfile\\\"]],[30,0,[\\\"model\\\",\\\"samlconfig\\\"]],[30,0,[\\\"model\\\",\\\"childOrgs\\\"]],[30,0,[\\\"model\\\",\\\"isVerified\\\"]],[30,0,[\\\"model\\\",\\\"successMessage\\\"]],[30,0,[\\\"resetSuccessMessage\\\"]],[30,0,[\\\"saveSamlInfo\\\"]],[30,0,[\\\"cancel\\\"]],[30,0,[\\\"valueChanged\\\"]],[30,0,[\\\"model\\\",\\\"viewModel\\\"]]]],null],[1,\\\"\\\\n\\\\n\\\"],[46,[28,[37,2],null,null],null,null,null]],[],[\\\"saml-signup-view\\\",\\\"component\\\",\\\"-outlet\\\"]]\",\n \"moduleName\": \"vosaic/accounts/saml/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n \n \n \n \n
\n \n \n
\n {{outlet}}\n
\n
\n \n */\n {\n \"id\": \"XXt88vsX\",\n \"block\": \"[[[8,[39,0],null,null,null],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"navbar subnav-bar\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h1\\\"],[14,0,\\\"lead font-weight-bold\\\"],[12],[1,\\\"Account Settings\\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,\\\"main\\\"],[14,1,\\\"content-start\\\"],[14,\\\"tabindex\\\",\\\"-1\\\"],[14,0,\\\"row fill-row main-section\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"aside\\\"],[14,0,\\\"col-xs-3 fill-col border-r-dark hidden-sm-down\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"list-group list-group-flush\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"can\\\",\\\"seeOrgBilling\\\"]],[[[1,\\\" \\\"],[8,[39,6],[[24,0,\\\"list-group-item\\\"]],[[\\\"@route\\\"],[\\\"accounts.features\\\"]],[[\\\"default\\\"],[[[[1,\\\"Features (AI, SSO, etc.)\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"features\\\",\\\"showGoals\\\"]],[[[41,[30,0,[\\\"hasAccessToGoals\\\"]],[[[1,\\\" \\\"],[8,[39,6],[[16,0,[29,[\\\"list-group-item \\\",[30,0,[\\\"goalsLinkClass\\\"]]]]],[4,[38,7],[\\\"click\\\",[30,0,[\\\"onGoalsClick\\\"]]],null]],[[\\\"@route\\\"],[\\\"accounts.goals\\\"]],[[\\\"default\\\"],[[[[1,\\\"Goals\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null]],[]],null],[1,\\\" \\\"],[8,[39,6],[[24,0,\\\"list-group-item\\\"]],[[\\\"@route\\\"],[\\\"accounts.basic-information\\\"]],[[\\\"default\\\"],[[[[1,\\\"Basic\\\\n Information\\\"]],[]]]]],[1,\\\"\\\\n \\\"],[41,[30,1,[\\\"organization\\\",\\\"isSaml\\\"]],[[],[]],[[[1,\\\"\\\\n \\\"],[8,[39,6],[[24,0,\\\"list-group-item\\\"]],[[\\\"@route\\\"],[\\\"accounts.change-password\\\"]],[[\\\"default\\\"],[[[[1,\\\"Change\\\\n Password\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]]],[41,[30,0,[\\\"can\\\",\\\"seeOrgBilling\\\"]],[[[1,\\\" \\\"],[8,[39,6],[[24,0,\\\"list-group-item\\\"]],[[\\\"@route\\\"],[\\\"accounts.payments-and-plans\\\"]],[[\\\"default\\\"],[[[[1,\\\"Account Details\\\"]],[]]]]],[1,\\\"\\\\n \\\"],[8,[39,6],[[24,0,\\\"list-group-item\\\"]],[[\\\"@route\\\"],[\\\"accounts.purchase\\\"]],[[\\\"default\\\"],[[[[1,\\\"Purchase Subscription\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"canSeeBackups\\\"]],[[[1,\\\" \\\"],[8,[39,6],[[24,0,\\\"list-group-item\\\"]],[[\\\"@route\\\"],[\\\"accounts.backups\\\"]],[[\\\"default\\\"],[[[[1,\\\"Backups\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,5,\\\"left:-2px\\\"],[14,0,\\\"col-xs-12 col-sm-12 col-md-9 col-lg-9 fill-col has-context-modal border-l-dark bg-faded box-shadow\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"p-a-md\\\"],[12],[1,\\\"\\\\n \\\"],[46,[28,[37,9],null,null],null,null,null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@model\\\"],[\\\"top-nav\\\",\\\"div\\\",\\\"h1\\\",\\\"main\\\",\\\"aside\\\",\\\"if\\\",\\\"link-to\\\",\\\"on\\\",\\\"component\\\",\\\"-outlet\\\"]]\",\n \"moduleName\": \"vosaic/accounts/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/accounts/verify-email/controller\", [\"exports\", \"@ember/controller\"], function (_exports, _controller) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\"eaimeta@70e063a35619d71f\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n class VerifyEmailController extends _controller.default {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"queryParams\", ['userId', 'confirmationToken']);\n }\n }\n\n // export default Controller.extend({\n // queryParams: ['userId', 'confirmationToken'],\n // });\n _exports.default = VerifyEmailController;\n});","define(\"vosaic/accounts/verify-email/route\", [\"exports\", \"@ember/service\", \"@ember/routing/route\", \"vosaic/config/environment\", \"@glimmer/tracking\"], function (_exports, _service, _route, _environment, _tracking) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@ember/routing/route\",0,\"vosaic/config/environment\",0,\"@glimmer/tracking\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let VerifyRoute = _exports.default = (_class = class VerifyRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"session\", _descriptor, this);\n _initializerDefineProperty(this, \"authorizer\", _descriptor2, this);\n _initializerDefineProperty(this, \"userId\", _descriptor3, this);\n _initializerDefineProperty(this, \"confirmationToken\", _descriptor4, this);\n _initializerDefineProperty(this, \"isConfirmed\", _descriptor5, this);\n _initializerDefineProperty(this, \"rejectReason\", _descriptor6, this);\n }\n async model(params) {\n this.userId = params.userId;\n this.confirmationToken = params.confirmationToken;\n const baseUrl = (_environment.default.apiHost || '') + (_environment.default.apiNamespace || '');\n const url = `${baseUrl}/accounts/verify?userId=${this.userId}&confirmationToken=${this.confirmationToken}`;\n const response = await fetch(url, {\n credentials: 'include',\n method: 'PUT',\n headers: this.authorizer.getAuthHeaders()\n });\n if (response.ok) {\n this.isConfirmed = true;\n this.rejectReason = undefined;\n } else {\n // Handle error\n }\n return {\n userId: this.userId,\n confirmationToken: this.confirmationToken,\n isConfirmed: this.isConfirmed,\n rejectReason: this.rejectReason\n };\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"authorizer\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"userId\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"confirmationToken\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"isConfirmed\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"rejectReason\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/accounts/verify-email/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n {{#if this.model.isConfirmed}}\n

Success!

\n Your email is confirmed! Click here to view your videos page.\n {{else}}\n

Error

\n {{this.model.rejectReason}}\n {{/if}}\n \n {{outlet}}\n \n */\n {\n \"id\": \"f4HquAwc\",\n \"block\": \"[[[41,[30,0,[\\\"model\\\",\\\"isConfirmed\\\"]],[[[1,\\\" \\\"],[10,\\\"h3\\\"],[12],[1,\\\"Success!\\\"],[13],[1,\\\"\\\\n Your email is confirmed! Click \\\"],[8,[39,2],null,[[\\\"@route\\\"],[\\\"videos\\\"]],[[\\\"default\\\"],[[[[1,\\\"here\\\"]],[]]]]],[1,\\\" to view your videos page.\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,\\\"h3\\\"],[12],[1,\\\"Error\\\"],[13],[1,\\\"\\\\n \\\"],[1,[30,0,[\\\"model\\\",\\\"rejectReason\\\"]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[46,[28,[37,4],null,null],null,null,null],[1,\\\"\\\\n\\\"]],[],[\\\"if\\\",\\\"h3\\\",\\\"link-to\\\",\\\"component\\\",\\\"-outlet\\\"]]\",\n \"moduleName\": \"vosaic/accounts/verify-email/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/adapters/aicoach-configuration\", [\"exports\", \"vosaic/adapters/application\", \"@ember-data/adapter\"], function (_exports, _application, _adapter) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"vosaic/adapters/application\",0,\"@ember-data/adapter\"eaimeta@70e063a35619d71f\n class AICoachConfigurationAdapter extends _application.default.extend(_adapter.BuildURLMixin) {\n /**\n Overrides the default adapter's URL generation. Because video comments are tied to a video\n */\n buildURL(modelName, id, snapshot, requestType, query) {\n switch (requestType) {\n case 'findRecord':\n return super.buildURL('aicoach-configuration');\n case 'updateRecord':\n return super.buildURL('aicoach-configuration');\n case 'createRecord':\n return super.buildURL('aicoach-configuration');\n default:\n return super.buildURL(modelName, id, snapshot, requestType, query);\n }\n }\n }\n _exports.default = AICoachConfigurationAdapter;\n});","define(\"vosaic/adapters/aicoach\", [\"exports\", \"vosaic/adapters/application\"], function (_exports, _application) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"vosaic/adapters/application\"eaimeta@70e063a35619d71f\n class AICoachAdapter extends _application.default {\n pathForType(type) {\n return type;\n }\n }\n _exports.default = AICoachAdapter;\n});","define(\"vosaic/adapters/annotation\", [\"exports\", \"vosaic/adapters/application\", \"@ember-data/adapter\"], function (_exports, _application, _adapter) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"vosaic/adapters/application\",0,\"@ember-data/adapter\"eaimeta@70e063a35619d71f\n class LineItemAdapter extends _application.default.extend(_adapter.BuildURLMixin) {\n /**\n Overrides the default adapter's URL generation. Because annotations don't have a single id, they\n are tied to a video. When you need to update a annotation we need to send the API both the videoId\n and the momentId. This is how we give a compound id key to the api using Ember.\n */\n buildURL(modelName, id, snapshot, requestType, query) {\n // see requestTypes in ember-data source code, node_modues/ember-data/addon/-private/adapters/build-url-mixin.js\n const snapshotMoment = snapshot.belongsTo('moment');\n const recordMoment = snapshot.record?.moment;\n const videoMomentId = snapshotMoment?.id || recordMoment?.id; // moment Id is VideoId_MomentSimpleId\n const annotationId = snapshot.id;\n switch (requestType) {\n case 'updateRecord':\n return super.buildURL('annotation', annotationId);\n case 'deleteRecord':\n return super.buildURL('annotation', annotationId);\n case 'createRecord':\n if (!videoMomentId) {\n throw new Error('Cannot create annotation without a persisted moment id.');\n }\n return super.buildURL('annotation') + `/${videoMomentId}`;\n default:\n return super.buildURL(modelName, id, snapshot, requestType, query);\n }\n }\n }\n _exports.default = LineItemAdapter;\n});","define(\"vosaic/adapters/application\", [\"exports\", \"@ember/service\", \"vosaic/config/environment\", \"@ember/application\", \"vosaic/ember-web-api/adapters/web-api\"], function (_exports, _service, _environment, _application, _webApi) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"vosaic/config/environment\",0,\"@ember/application\",0,\"vosaic/ember-web-api/adapters/web-api\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const PAYMENT_REQUIRED = 402;\n const UNAUTHORIZED = 401;\n const vosaicGlobals = window.vosaicGlobals || {\n version: 'local'\n };\n let ApplicationAdapter = _exports.default = (_class = class ApplicationAdapter extends _webApi.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"session\", _descriptor, this);\n _initializerDefineProperty(this, \"tokenAwaiter\", _descriptor2, this);\n _initializerDefineProperty(this, \"router\", _descriptor3, this);\n _defineProperty(this, \"namespace\", 'api/v1');\n _defineProperty(this, \"host\", _environment.default.apiHost);\n }\n get headers() {\n return {\n 'vos-session-id': new Date().getTime(),\n 'vos-client-version': 'web-' + vosaicGlobals.version,\n 'vos-time-offset': new Date().getTimezoneOffset(),\n Authorization: `Bearer ${this.session.data.authenticated.access_token}`\n };\n }\n ajaxOptions(url, method, options) {\n return {\n ...super.ajaxOptions(url, method, options),\n credentials: 'include'\n };\n }\n get getApplicationModel() {\n const owner = (0, _application.getOwner)(this);\n const applicationRoute = owner.lookup('route:application');\n const applicationModel = applicationRoute.modelFor('application');\n return applicationModel;\n }\n\n /**\n * override the DataAdapterMixin from ember-simple-auth so we can redirect on 402 payment required\n */\n handleResponse(status) {\n if (status === UNAUTHORIZED) {\n //this.session.unauthorizedResponse();\n return super.handleResponse(...arguments);\n } else if (status === PAYMENT_REQUIRED) {\n // Get the application route from the registry\n const applicationInstance = (0, _application.getOwner)(this);\n const appRoute = applicationInstance.lookup(`route:application`);\n appRoute.transitionToPayment();\n } else {\n return super.handleResponse(...arguments);\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"tokenAwaiter\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/adapters/button\", [\"exports\", \"@ember-data/adapter\", \"vosaic/adapters/application\"], function (_exports, _adapter, _application) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember-data/adapter\",0,\"vosaic/adapters/application\"eaimeta@70e063a35619d71f\n class ButtonAdapter extends _application.default.extend(_adapter.BuildURLMixin) {\n /**\n Overrides the default adapter's URL generation. Because buttons don't have a single id, they\n are tied to a video. When you need to update a button we need to send the API both the videoId\n and the buttonId. This is how we give a compound id key to the api using Ember.\n */\n buildURL(modelName, id, snapshot, requestType, query) {\n // see requestTypes in ember-data source code, node_modues/ember-data/addon/-private/adapters/build-url-mixin.js\n // TODO CSD getting hacky. Form buttons are not tied to a video,\n const videoId = snapshot.belongsTo('video').id;\n const formId = snapshot.record.get('formId');\n switch (requestType) {\n // deleted updateRecord and deleteRecord on 2016-11-22 04:56 PM. See git commit for d7bdafb for more info\n case 'deleteRecord':\n // eslint-disable-next-line no-case-declarations\n let joinedIdToSend;\n // eslint-disable-next-line no-case-declarations\n const originalId = snapshot.record.get('originalId');\n if (snapshot.record.get('isCustomFormButton')) {\n joinedIdToSend = videoId + '_' + originalId;\n return `${this._buildURL('button') + '/video/' + joinedIdToSend}`;\n } else {\n joinedIdToSend = formId + '_' + originalId;\n return `${this._buildURL('button') + '/form/' + joinedIdToSend}`;\n }\n case 'createRecord':\n if (snapshot.record.get('isCustomFormButton')) {\n // stored on a video\n return `${this._buildURL('button') + '/video/' + videoId}`;\n } else {\n return `${this._buildURL('button') + '/form/' + formId}`;\n }\n default:\n // PUT /api/v1/buttons/videoId_buttonId?formId=custom\n // PUT /api/v1/buttons/videoId_buttonId?formid=12345\n // TODO CSD we really dont need video id if we are are updating form buttons. But we are using a single method atm.\n // eslint-disable-next-line no-case-declarations\n let idToSend;\n\n // new custom form buttons never got their unique id...so the id is missing the videoId\n // but the orig id, should just be the button guid\n if (snapshot.record.get('isCustomFormButton') && snapshot.record.get('uniqueId') !== undefined) {\n idToSend = id;\n } else {\n idToSend = videoId + '_' + id;\n }\n\n // eslint-disable-next-line no-case-declarations\n const url = super.buildURL(modelName, idToSend, snapshot, requestType, query) + '?formId=' + formId;\n return url;\n }\n }\n }\n _exports.default = ButtonAdapter;\n});","define(\"vosaic/adapters/folder\", [\"exports\", \"vosaic/adapters/application\", \"@ember-data/adapter\", \"@ember/service\"], function (_exports, _application, _adapter, _service) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"vosaic/adapters/application\",0,\"@ember-data/adapter\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let FolderAdapter = _exports.default = (_class = class FolderAdapter extends _application.default.extend(_adapter.BuildURLMixin) {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"tokenMemory\", _descriptor, this);\n }\n buildURL(modelName, id, snapshot, requestType, query) {\n let parentFolderIdString = '';\n if (snapshot && snapshot.adapterOptions && snapshot.adapterOptions.parentFolderId) {\n parentFolderIdString = `?parentFolderId=${snapshot.adapterOptions.parentFolderId}`;\n }\n let deleteVideoString = '';\n if (snapshot && snapshot.adapterOptions && snapshot.adapterOptions.deleteVideos) {\n deleteVideoString = `?deleteVideos=${snapshot.adapterOptions.deleteVideos}`;\n }\n switch (requestType) {\n case 'createRecord':\n return super.buildURL('folders') + parentFolderIdString;\n case 'deleteRecord':\n return super.buildURL('folders', id) + deleteVideoString;\n default:\n return super.buildURL(modelName, id, snapshot, requestType, query);\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"tokenMemory\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/adapters/form\", [\"exports\", \"@ember-data/adapter\", \"vosaic/adapters/application\"], function (_exports, _adapter, _application) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember-data/adapter\",0,\"vosaic/adapters/application\"eaimeta@70e063a35619d71f\n class FormAdapter extends _application.default.extend(_adapter.BuildURLMixin) {\n /**\n * Builds the URL used by the adapter for updating records on the\n * server.\n *\n * We override this to pass along the queryString parameter `updateAllVideos`\n * when someone calls:\n *\n * ```\n * model.save({adapterOptions: {updateAllVideos: true}});\n * ```\n */\n buildURL(modelName, id, snapshot, requestType, query) {\n switch (requestType) {\n case 'updateRecord':\n // eslint-disable-next-line no-case-declarations\n let url = super.buildURL(modelName, id);\n if (!!snapshot.adapterOptions && snapshot.adapterOptions.updateAllVideos) {\n url += '?updateAllVideos=true';\n }\n return url;\n default:\n return super.buildURL(modelName, id, snapshot, requestType, query);\n }\n }\n }\n _exports.default = FormAdapter;\n});","define(\"vosaic/adapters/grade\", [\"exports\", \"vosaic/adapters/application\", \"@ember-data/adapter\", \"@ember/service\"], function (_exports, _application, _adapter, _service) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"vosaic/adapters/application\",0,\"@ember-data/adapter\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let LineItemAdapter = _exports.default = (_class = class LineItemAdapter extends _application.default.extend(_adapter.BuildURLMixin) {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"tokenMemory\", _descriptor, this);\n }\n buildURL(modelName, id, snapshot, requestType, query) {\n const token = this.tokenMemory.jwtRaw;\n if (!token) {\n return false;\n }\n let lineItemId = '';\n if (snapshot && snapshot.record && snapshot.record.get('lineItemId')) {\n lineItemId = snapshot.record.get('lineItemId');\n } else if (snapshot && snapshot.adapterOptions) {\n lineItemId = snapshot.adapterOptions.lineItemId;\n }\n let queryString = '';\n if (query) {\n queryString = Object.keys(query).reduce((acc, key) => acc += `&${key}=${query[key]}`, '');\n }\n switch (requestType) {\n case 'findAll':\n return super.buildURL('grades') + '?token=' + token + '&lineItemUrl=' + lineItemId;\n case 'queryRecord':\n return super.buildURL('grades') + '?token=' + token + queryString;\n case 'createRecord':\n return super.buildURL('grades') + '?token=' + token + '&lineItemUrl=' + lineItemId;\n case 'updateRecord':\n return super.buildURL('grades') + '?token=' + token + '&lineItemUrl=' + lineItemId;\n default:\n return super.buildURL(modelName, id, snapshot, requestType, query);\n }\n }\n updateRecord(store, type, snapshot) {\n return this.createRecord(store, type, snapshot);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"tokenMemory\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/adapters/line-item\", [\"exports\", \"vosaic/adapters/application\", \"@ember-data/adapter\", \"@ember/service\"], function (_exports, _application, _adapter, _service) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"vosaic/adapters/application\",0,\"@ember-data/adapter\",0,\"@ember/service\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let LineItemAdapter = _exports.default = (_class = class LineItemAdapter extends _application.default.extend(_adapter.BuildURLMixin) {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"tokenMemory\", _descriptor, this);\n }\n buildURL(modelName, id, snapshot, requestType, query) {\n const token = this.tokenMemory.jwtRaw;\n if (!token) {\n return false;\n }\n switch (requestType) {\n case 'findAll':\n return super.buildURL('grades/lineItems') + '?token=' + token;\n case 'findRecord':\n return super.buildURL('grades/lineItems', id) + '?token=' + token;\n case 'updateRecord':\n return super.buildURL('grades/lineItems', id) + '?token=' + token;\n case 'createRecord':\n return super.buildURL('grades/lineItems') + '?token=' + token;\n default:\n return super.buildURL(modelName, id, snapshot, requestType, query);\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"tokenMemory\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/adapters/org-engagement\", [\"exports\", \"vosaic/adapters/application\"], function (_exports, _application) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"vosaic/adapters/application\"eaimeta@70e063a35619d71f\n class OrgEngagementAdapter extends _application.default {\n /**\n All requests for this model live under the SuperAdmin org-engagement endpoint:\n {host}/api/v1/superadmin/org-engagement (with /{id} appended for record-level requests).\n We override pathForType rather than buildURL because the default RESTAdapter\n would camelize + pluralize the path (turning \"superadmin/org-engagement\" into\n \"superadmin/orgEngagements\"). Returning the literal keeps the exact route.\n */\n pathForType() {\n return 'superadmin/org-engagement';\n }\n }\n _exports.default = OrgEngagementAdapter;\n});","define(\"vosaic/adapters/organization\", [\"exports\", \"@ember-data/adapter\", \"@ember/service\", \"vosaic/adapters/application\"], function (_exports, _adapter, _service, _application) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"@ember-data/adapter\",0,\"@ember/service\",0,\"vosaic/adapters/application\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n let OrganizationAdapter = _exports.default = (_class = class OrganizationAdapter extends _application.default.extend(_adapter.BuildURLMixin) {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"stringGenerator\", _descriptor, this);\n }\n /**\n Overrides the default adapter's URL generation.\n Because I need to send the ?orgName string when deleting to help confirm that\n you really want to delete an organization.\n To delete an organization, you need to set 'orgNameForDelete' as a property\n on the model.: `this.set('organization.orgNameForDelete', 'Some Org Name')`\n */\n buildURL(modelName, id, snapshot, requestType, query) {\n // see requestTypes in ember-data source code, node_modues/ember-data/addon/-private/adapters/build-url-mixin.js\n let newUser, firstName, lastName, emailAddress, orgName, payments, isParent, retVal;\n switch (requestType) {\n case 'deleteRecord':\n orgName = snapshot.record.get('orgNameForDelete');\n return super.buildURL('organization', id) + '?orgName=' + orgName;\n case 'createRecord':\n newUser = snapshot.record.get('owner');\n payments = snapshot.record.get('payments');\n firstName = newUser.get('firstName');\n lastName = newUser.get('lastName');\n emailAddress = newUser.get('emailAddress');\n isParent = snapshot.record.get('isParent');\n payments.forEach(pmt => {\n if (pmt.get('id') == null) {\n pmt.set('id', this.stringGenerator.generateCurrentMillis());\n }\n });\n if (isParent) {\n retVal = this.urlForCreateRecord(modelName, snapshot) + `?firstName=${firstName}&lastName=${lastName}&emailAddress=${encodeURIComponent(emailAddress)}&isParent=true`;\n } else {\n retVal = this.urlForCreateRecord(modelName, snapshot) + `?firstName=${firstName}&lastName=${lastName}&emailAddress=${encodeURIComponent(emailAddress)}`;\n }\n return retVal;\n default:\n return super.buildURL(modelName, id, snapshot, requestType, query);\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"stringGenerator\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class);\n});","define(\"vosaic/adapters/pricing-tier\", [\"exports\", \"@ember-data/adapter\", \"vosaic/adapters/application\"], function (_exports, _adapter, _application) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember-data/adapter\",0,\"vosaic/adapters/application\"eaimeta@70e063a35619d71f\n class PricingTierAdapter extends _application.default.extend(_adapter.BuildURLMixin) {\n /**\n Overrides the default adapter's URL generation. Because we want to fetch user moments based on the\n video id.\n */\n // eslint-disable-next-line no-unused-vars\n buildURL(modelName, id, snapshot, requestType, query) {\n // see requestTypes in ember-data source code, node_modues/ember-data/addon/-private/adapters/build-url-mixin.js\n switch (requestType) {\n case 'findAll':\n return super.buildURL('pricingPlans') + '/tiers';\n default:\n return super.buildURL(...arguments);\n }\n }\n }\n _exports.default = PricingTierAdapter;\n});","define(\"vosaic/adapters/prompt\", [\"exports\", \"vosaic/adapters/application\", \"@ember-data/adapter\"], function (_exports, _application, _adapter) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"vosaic/adapters/application\",0,\"@ember-data/adapter\"eaimeta@70e063a35619d71f\n class PromptAdapter extends _application.default.extend(_adapter.BuildURLMixin) {\n /**\n Overrides the default adapter's URL generation. Because video comments are tied to a video\n */\n buildURL(modelName, id, snapshot, requestType, query) {\n let appendString = '';\n if (snapshot?.adapterOptions?.allOrgPrompts) {\n appendString = '?allOrgPrompts=true';\n } else if (snapshot?.adapterOptions?.projectId) {\n appendString = `?projectId=${snapshot.adapterOptions.projectId}`;\n if (snapshot.adapterOptions.forProject) {\n appendString += '&forProject=true';\n }\n }\n switch (requestType) {\n case 'findAll':\n return super.buildURL('aicoach/prompts') + appendString;\n case 'createRecord':\n return super.buildURL('aicoach/prompts');\n case 'updateRecord':\n return super.buildURL('aicoach/prompts');\n case 'query':\n return super.buildURL('aicoach/prompts');\n case 'deleteRecord':\n return super.buildURL('aicoach/prompts', id);\n default:\n return super.buildURL(modelName, id, snapshot, requestType, query);\n }\n }\n }\n _exports.default = PromptAdapter;\n});","define(\"vosaic/adapters/saml-configuration\", [\"exports\", \"vosaic/adapters/application\", \"@ember-data/adapter\"], function (_exports, _application, _adapter) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"vosaic/adapters/application\",0,\"@ember-data/adapter\"eaimeta@70e063a35619d71f\n class SAMLConfigurationAdapter extends _application.default.extend(_adapter.BuildURLMixin) {\n buildURL(modelName, id, snapshot, requestType, query) {\n switch (requestType) {\n case 'updateRecord':\n return super.buildURL('saml-configuration');\n default:\n return super.buildURL(modelName, id, snapshot, requestType, query);\n }\n }\n }\n _exports.default = SAMLConfigurationAdapter;\n});","define(\"vosaic/adapters/speaker\", [\"exports\", \"vosaic/adapters/application\"], function (_exports, _application) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"vosaic/adapters/application\"eaimeta@70e063a35619d71f\n class SpeakerAdapter extends _application.default {\n buildURL(modelName, id, snapshot, requestType, query) {\n // see requestTypes in ember-data source code, node_modues/ember-data/addon/-private/adapters/build-url-mixin.js\n // TODO CSD getting hacky. Form buttons are not tied to a video,\n const speaker = snapshot.record;\n switch (requestType) {\n // deleted updateRecord and deleteRecord on 2016-11-22 04:56 PM. See git commit for d7bdafb for more info\n case 'deleteRecord':\n return `${this._buildURL('speaker') + '/' + speaker.get('speakerId') + '/' + speaker.get('videoId')}`;\n case 'createRecord':\n return this._buildURL('speaker');\n case 'updateRecord':\n return this._buildURL('speaker');\n default:\n // eslint-disable-next-line no-case-declarations\n const idToSend = speaker.speakerId;\n // eslint-disable-next-line no-case-declarations\n const url = super.buildURL(modelName, idToSend, snapshot, requestType, query);\n return url;\n }\n }\n }\n _exports.default = SpeakerAdapter;\n});","define(\"vosaic/adapters/supporting-document\", [\"exports\", \"@ember-data/adapter\", \"vosaic/adapters/application\"], function (_exports, _adapter, _application) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember-data/adapter\",0,\"vosaic/adapters/application\"eaimeta@70e063a35619d71f\n class SupportingDocumentAdapter extends _application.default.extend(_adapter.BuildURLMixin) {\n /**\n Overrides the default adapter's URL generation. Because annotations don't have a single id, they\n are tied to a video. When you need to update a annotation we need to send the API both the videoId\n and the momentId. This is how we give a compound id key to the api using Ember.\n */\n buildURL(modelName, id, snapshot, requestType, query) {\n // see requestTypes in ember-data source code, node_modues/ember-data/addon/-private/adapters/build-url-mixin.js\n //let moment = snapshot.belongsTo('moment');\n let videoId;\n let projectId;\n let promptId;\n\n // check belongs to property first then check query or adapter options\n if (snapshot && snapshot.belongsTo) {\n videoId = snapshot.belongsTo('video')?.id;\n projectId = snapshot.belongsTo('project')?.id;\n }\n if (!videoId && !projectId) {\n if (query) {\n videoId = query.videoId;\n projectId = query.projectId;\n promptId = query.promptId;\n } else {\n videoId = snapshot?.adapterOptions?.videoId;\n projectId = snapshot?.adapterOptions?.projectId;\n promptId = snapshot?.adapterOptions?.promptId;\n }\n }\n const identifier = videoId || projectId || promptId;\n let identifierType = '';\n if (videoId) {\n identifierType = 'videoId';\n }\n if (projectId) {\n identifierType = 'projectId';\n }\n if (promptId) {\n identifierType = 'promptId';\n }\n switch (requestType) {\n case 'findAll':\n return super.buildURL('supportingDocument', identifier);\n case 'updateRecord':\n return super.buildURL('supportingDocument', identifier);\n case 'deleteRecord':\n return super.buildURL('supportingDocument', id) + `?${identifierType}=${identifier}`;\n case 'createRecord':\n return super.buildURL('supportingDocument') + `/${identifier}`;\n case 'query':\n return super.buildURL('supportingDocument', identifier);\n default:\n return super.buildURL(modelName, id, snapshot, requestType, query);\n }\n }\n }\n _exports.default = SupportingDocumentAdapter;\n});","define(\"vosaic/adapters/transcript-part\", [\"exports\", \"vosaic/adapters/application\"], function (_exports, _application) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"vosaic/adapters/application\"eaimeta@70e063a35619d71f\n class TranscriptPartAdapter extends _application.default {\n urlForUpdateRecord(id, modelName, snapshot) {\n const part = snapshot.record;\n const encodedStart = part.get('startTime');\n return this._buildURL('transcript', part.get('videoId')) + `/${encodedStart}/part`;\n }\n }\n _exports.default = TranscriptPartAdapter;\n});","define(\"vosaic/adapters/usermoment\", [\"exports\", \"@ember-data/adapter\", \"vosaic/adapters/application\"], function (_exports, _adapter, _application) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember-data/adapter\",0,\"vosaic/adapters/application\"eaimeta@70e063a35619d71f\n class UserMomentAdapter extends _application.default.extend(_adapter.BuildURLMixin) {\n /**\n Overrides the default adapter's URL generation. Because we want to fetch user moments based on the\n video id.\n */\n // eslint-disable-next-line no-unused-vars\n buildURL(modelName, id, snapshot, requestType, query) {\n // see requestTypes in ember-data source code, node_modues/ember-data/addon/-private/adapters/build-url-mixin.js\n switch (requestType) {\n case 'findAll':\n // api/v1/userMoments\n // api/v1/moments//all\n // eslint-disable-next-line no-case-declarations\n const videoId = snapshot.adapterOptions.videoId;\n return super.buildURL('moment', videoId) + '/all';\n default:\n return super.buildURL(...arguments);\n }\n }\n }\n _exports.default = UserMomentAdapter;\n});","define(\"vosaic/adapters/userprofile\", [\"exports\", \"vosaic/adapters/application\"], function (_exports, _application) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"vosaic/adapters/application\"eaimeta@70e063a35619d71f\n class UserProfileAdapter extends _application.default {\n urlForQueryRecord(query) {\n const originalUrl = super.urlForQueryRecord(...arguments);\n if (query.mine) {\n delete query.mine;\n return `${originalUrl}/mine`;\n }\n return originalUrl;\n }\n }\n _exports.default = UserProfileAdapter;\n});","define(\"vosaic/adapters/video-comment\", [\"exports\", \"vosaic/adapters/application\", \"@ember-data/adapter\"], function (_exports, _application, _adapter) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"vosaic/adapters/application\",0,\"@ember-data/adapter\"eaimeta@70e063a35619d71f\n class VideoCommentAdapter extends _application.default.extend(_adapter.BuildURLMixin) {\n /**\n Overrides the default adapter's URL generation. Because video comments are tied to a video\n */\n buildURL(modelName, id, snapshot, requestType, query) {\n let videoId = '';\n if (snapshot && snapshot.record && snapshot.record.get('videoId')) {\n videoId = snapshot.record.get('videoId');\n } else if (snapshot && snapshot.belongsTo && snapshot.belongsTo('video')) {\n videoId = snapshot.belongsTo('video').id;\n } else {\n videoId = snapshot.adapterOptions.videoId;\n }\n switch (requestType) {\n case 'findAll':\n return super.buildURL('videoComment', videoId);\n case 'updateRecord':\n return super.buildURL('videoComment', videoId);\n case 'deleteRecord':\n return super.buildURL('videoComment') + `/${videoId}/${id}`;\n case 'createRecord':\n return super.buildURL('videoComment') + `/${videoId}`;\n default:\n return super.buildURL(modelName, id, snapshot, requestType, query);\n }\n }\n }\n _exports.default = VideoCommentAdapter;\n});","define(\"vosaic/adapters/video-view-track\", [\"exports\", \"vosaic/adapters/application\", \"@ember-data/adapter\"], function (_exports, _application, _adapter) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"vosaic/adapters/application\",0,\"@ember-data/adapter\"eaimeta@70e063a35619d71f\n class VideoViewTrackAdapter extends _application.default.extend(_adapter.BuildURLMixin) {\n /**\n Overrides the default adapter's URL generation. Because video comments are tied to a video\n */\n buildURL(modelName, id, snapshot, requestType, query) {\n let videoId = '';\n if (snapshot && snapshot.record && snapshot.record.get('videoId')) {\n videoId = snapshot.record.get('videoId');\n } else {\n videoId = snapshot.adapterOptions.videoId;\n }\n switch (requestType) {\n case 'findAll':\n return super.buildURL('videos') + `/${videoId}/viewed`;\n default:\n return super.buildURL(modelName, id, snapshot, requestType, query);\n }\n }\n }\n _exports.default = VideoViewTrackAdapter;\n});","define(\"vosaic/app\", [\"exports\", \"@warp-drive/ember/install\", \"@ember/application\", \"ember-resolver\", \"ember-load-initializers\", \"vosaic/config/environment\", \"@embroider/macros/es-compat2\"], function (_exports, _install, _application, _emberResolver, _emberLoadInitializers, _environment, _esCompat) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@warp-drive/ember/install\",0,\"@ember/application\",0,\"ember-resolver\",0,\"ember-load-initializers\",0,\"vosaic/config/environment\",0,\"@embroider/macros\",0,\"./deprecation-workflow\"eaimeta@70e063a35619d71f\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n {\n (0, _esCompat.default)(require(\"vosaic/deprecation-workflow\"));\n }\n class App extends _application.default {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"modulePrefix\", _environment.default.modulePrefix);\n _defineProperty(this, \"podModulePrefix\", _environment.default.podModulePrefix);\n _defineProperty(this, \"Resolver\", _emberResolver.default);\n _defineProperty(this, \"rootElement\", '.wrapper');\n }\n }\n _exports.default = App;\n (0, _emberLoadInitializers.default)(App, _environment.default.modulePrefix);\n});","define(\"vosaic/application/controller\", [\"exports\", \"@ember/controller\", \"@ember/object\", \"@ember/service\", \"@ember/template\", \"js-cookie\"], function (_exports, _controller, _object, _service, _template, _jsCookie) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/template\",0,\"js-cookie\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n // for ember-simple-auth https://github.com/simplabs/ember-simple-auth#readme\n let ApplicationController = _exports.default = (_class = class ApplicationController extends _controller.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"session\", _descriptor, this);\n _initializerDefineProperty(this, \"recordStateManager\", _descriptor2, this);\n _initializerDefineProperty(this, \"videoUploader\", _descriptor3, this);\n _initializerDefineProperty(this, \"idleTimeout\", _descriptor4, this);\n _initializerDefineProperty(this, \"features\", _descriptor5, this);\n }\n get showLogOutModal() {\n return this.model.viewModel.showLogOutModal;\n }\n get dropDownActive() {\n return this.model.viewModel.dropDownActive;\n }\n get isUploadingQueuedRecording() {\n return this.recordStateManager.queuedUpload;\n }\n get liveUploadProgress() {\n if (this.videoUploader.uploadProgress.percent) {\n return Math.ceil(this.videoUploader.uploadProgress.percent * 100);\n }\n return 0;\n }\n get liveUploadProgressBarStyle() {\n return (0, _template.htmlSafe)(`width: ${this.liveUploadProgress}`);\n }\n invalidateSession() {\n // delete the logged in cookie that tells marketing site to show \"Accounts\"\n this.session.removeCookiesAndInvalidate();\n }\n confirm() {\n this.model.viewModel.forceLogOut = true;\n this.model.viewModel.activelyLoggingOut = true;\n this.model.viewModel.showLogOutModal = false;\n this.model.viewModel.videoWarning = false;\n this.invalidateSession();\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"recordStateManager\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"videoUploader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"idleTimeout\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"features\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _applyDecoratedDescriptor(_class.prototype, \"invalidateSession\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"invalidateSession\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"confirm\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"confirm\"), _class.prototype), _class);\n});","define(\"vosaic/application/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n \n {{#if this.isUploadingQueuedRecording}}\n \n

Uploading {{this.videoUploader.videoTitle}}

\n \n
\n {{this.liveUploadProgress}}%\n
\n \n
\n {{/if}}\n {{#if this.features.showTimeoutTracker}}\n \n

Timeout Reset: {{moment-format this.idleTimeout.resetTime 'h:mm:ss'}}

\n \n {{/if}}\n {{page-title 'Vosaic'}}\n {{outlet}}\n */\n {\n \"id\": \"6lj5Rzf6\",\n \"block\": \"[[[8,[39,0],null,[[\\\"@shouldShow\\\",\\\"@activelyLoggingOut\\\",\\\"@confirm\\\",\\\"@videoWarning\\\"],[[30,0,[\\\"showLogOutModal\\\"]],[30,0,[\\\"activelyLoggingOut\\\"]],[30,0,[\\\"confirm\\\"]],[30,0,[\\\"videoWarning\\\"]]]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isUploadingQueuedRecording\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"popover p-a-sm bg-inverse text-white\\\"],[14,5,\\\"width: 300px; height: auto; right: 20px; bottom: 20px; top: auto; left: auto; text-align: center;\\\"],[12],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"m-b-xxs\\\"],[12],[1,\\\"Uploading \\\"],[1,[30,0,[\\\"videoUploader\\\",\\\"videoTitle\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"progress\\\"],[14,0,\\\"progress progress-success m-b-none\\\"],[15,2,[29,[[30,0,[\\\"liveUploadProgress\\\"]]]]],[14,\\\"max\\\",\\\"100\\\"],[14,5,\\\"height: 1rem;\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"progress progress-success\\\"],[12],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"progress-bar\\\"],[15,5,[30,0,[\\\"liveUploadProgressBarStyle\\\"]]],[12],[1,[30,0,[\\\"liveUploadProgress\\\"]]],[1,\\\"%\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"features\\\",\\\"showTimeoutTracker\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"popover p-a-xxs bg-inverse text-white\\\"],[14,5,\\\"width: 175px; height: auto; left: 0px; bottom: 0px; top: auto; text-align:center;\\\"],[12],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"m-a-none\\\"],[12],[1,\\\"Timeout Reset: \\\"],[1,[28,[35,6],[[30,0,[\\\"idleTimeout\\\",\\\"resetTime\\\"]],\\\"h:mm:ss\\\"],null]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,[28,[35,7],[\\\"Vosaic\\\"],null]],[1,\\\"\\\\n\\\"],[46,[28,[37,9],null,null],null,null,null]],[],[\\\"modal-logout-notice\\\",\\\"if\\\",\\\"div\\\",\\\"p\\\",\\\"progress\\\",\\\"span\\\",\\\"moment-format\\\",\\\"page-title\\\",\\\"component\\\",\\\"-outlet\\\"]]\",\n \"moduleName\": \"vosaic/application/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/auth/controller\", [\"exports\", \"@ember/controller\"], function (_exports, _controller) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/controller\"eaimeta@70e063a35619d71f\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n class AuthController extends _controller.default {\n constructor(...args) {\n super(...args);\n // TODO set saml params here\n _defineProperty(this, \"queryParams\", ['assertion', 'state', 'token']);\n }\n }\n _exports.default = AuthController;\n});","define(\"vosaic/auth/route\", [\"exports\", \"rsvp\", \"@ember/service\", \"@ember/routing/route\", \"vosaic/config/environment\", \"@glimmer/tracking\", \"js-cookie\"], function (_exports, _rsvp, _service, _route, _environment, _tracking, _jsCookie) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _class2, _descriptor3, _descriptor4, _descriptor5;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/service\",0,\"@ember/routing/route\",0,\"vosaic/config/environment\",0,\"@glimmer/tracking\",0,\"js-cookie\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const HOURS_IN_DAY = 24;\n const DAYS_IN_WEEK = 7;\n const WEEKS_FOR_REFRESH_TOKEN = 4;\n const SESSION_TOKEN_LENGTH_HOURS = HOURS_IN_DAY * DAYS_IN_WEEK * WEEKS_FOR_REFRESH_TOKEN;\n const MIN_IN_HOUR = 60;\n const SEC_IN_MIN = 60;\n let ViewModel = (_class = class ViewModel {\n constructor() {\n _initializerDefineProperty(this, \"hasError\", _descriptor, this);\n _initializerDefineProperty(this, \"errorMessage\", _descriptor2, this);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"hasError\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"errorMessage\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _class);\n let AuthRoute = _exports.default = (_class2 = class AuthRoute extends _route.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"session\", _descriptor3, this);\n _initializerDefineProperty(this, \"tokenMemory\", _descriptor4, this);\n _initializerDefineProperty(this, \"router\", _descriptor5, this);\n }\n model(params) {\n return (0, _rsvp.hash)({\n assertion: decodeURIComponent(params.assertion),\n state: decodeURIComponent(params.state),\n token: decodeURIComponent(params.token),\n errors: new ViewModel()\n });\n }\n afterModel(model) {\n const samlAuthenticator = 'authenticator:saml';\n const ltiAuthenticator = 'authenticator:lti';\n // probably shouldn't rely on this being the string \"undefined\" when absent\n if (model.assertion && model.assertion !== 'undefined') {\n this.session.authenticate(samlAuthenticator, model.assertion, model.state, {\n 'vos-is-web-app': 'true'\n })\n // TODO what is onAuthenticateSuccess?\n .then(() => {\n this.onAuthenticateSuccess();\n }).catch(error => {\n model.errors.hasError = true;\n const errorCode = error.error ? ' Code (' + error.error + ')' : '';\n const errorMessage = error.error_message ? error.error_message : 'Could not authenticate with SAML provider.';\n const errorDesc = error.error_description ? error.error_description : 'Could not authenticate with SAML provider.';\n model.errors.errorMessage = errorMessage + errorCode || errorDesc + errorCode;\n });\n } else if (model.token && model.token !== 'undefined') {\n this.tokenMemory.setToken(model.token);\n this.session.authenticate(ltiAuthenticator, model.token, model.state, {\n 'vos-is-web-app': 'true'\n })\n // TODO what is onAutheticateSuccess?\n .then(() => {\n this.onAuthenticateSuccess();\n }).catch(error => {\n const errorCode = error?.error ? ' Code (' + error.error + ') ' : '';\n const errorDesc = 'Could not authenticate with LTI 1.3.';\n if (error?.error_message) {\n errorDesc = error.error_message;\n } else if (error?.error_description) {\n errorDesc = error.error_description;\n }\n model.errors.hasError = true;\n model.errors.errorMessage = errorDesc + errorCode;\n });\n } else {\n // or show error warning or something\n this.router.transitionTo('login');\n }\n }\n onAuthenticateSuccess() {\n const date = new Date();\n const hours = SESSION_TOKEN_LENGTH_HOURS; // our refresh tokens live for 4 weeks\n date.setTime(date.getTime() + hours * MIN_IN_HOUR * SEC_IN_MIN * 1000);\n _jsCookie.default.set('possiblyLoggedIn', 'true', {\n expires: date,\n domain: '.vosaic.com'\n }); // will not set when running locally because domain doesn't match\n const baseUrl = _environment.default.apiHost || '';\n if (this.tokenMemory.hasTargetLink) {\n return this.tokenMemory.tryRedirect();\n } else {\n this.router.transitionTo('videos');\n }\n }\n parseJwtUnverified(token) {\n const section = token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/');\n const data = atob(section);\n return JSON.parse(data);\n }\n }, _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, \"tokenMemory\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _class2);\n});","define(\"vosaic/auth/template\", [\"exports\", \"@ember/template-factory\"], function (_exports, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n var _default = _exports.default = (0, _templateFactory.createTemplateFactory)(\n /*\n \n Vosaic\n
\n {{#if this.model.errors.hasError}}\n

Error

\n {{else}}\n

Please wait

\n {{/if}}\n \n

NOTE: For best experience use Google Chrome browser.

\n \n
\n \n
\n \n \n \n {{!-- Use text-xs-right to align the button instead of floats. This helps maintain the layout and not using clears --}}\n
\n {{#if this.model.errors.hasError}}\n

{{this.model.errors.errorMessage}}

\n Back to Login\n \n \n {{else}}\n {{!-- --}}\n {{/if}}\n \n \n
\n
\n
\n \n \n
\n {{!-- \n --}}\n \n \n */\n {\n \"id\": \"sOCyTq5T\",\n \"block\": \"[[[10,\\\"body\\\"],[14,5,\\\"background: grey !important\\\"],[12],[1,\\\"\\\\n \\\"],[10,3],[14,6,\\\"../\\\"],[14,0,\\\"m-t-lg m-b-md center-block svg-logo logo-mark-lg\\\"],[12],[10,1],[14,0,\\\"sr-only bg-white\\\"],[12],[1,\\\"Vosaic\\\"],[13],[13],[1,\\\"\\\\n\\\"],[10,\\\"form\\\"],[14,0,\\\"card card-block center-block transparent-bg p-t-md p-b-md\\\"],[14,5,\\\"max-width: 32rem;\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"model\\\",\\\"errors\\\",\\\"hasError\\\"]],[[[1,\\\" \\\"],[10,\\\"h1\\\"],[14,0,\\\"m-b-md text-xs-center display-5\\\"],[12],[1,\\\"Error\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,\\\"h1\\\"],[14,0,\\\"m-b-md text-xs-center display-5\\\"],[12],[1,\\\"Please wait\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"show-on-ie text-xs-center p-t-none p-b-sm\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"NOTE:\\\"],[13],[1,\\\" For best experience use \\\"],[10,3],[14,6,\\\"https://www.google.com/chrome/browser/desktop/index.html\\\"],[14,\\\"target\\\",\\\"_blank\\\"],[14,\\\"rel\\\",\\\"noopener noreferrer\\\"],[12],[1,\\\"Google Chrome\\\"],[13],[1,\\\" browser.\\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n\\\\n\\\\n\\\"],[1,\\\" \\\"],[10,0],[14,0,\\\"text-xs-center\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"model\\\",\\\"errors\\\",\\\"hasError\\\"]],[[[1,\\\" \\\"],[10,2],[12],[1,[30,0,[\\\"model\\\",\\\"errors\\\",\\\"errorMessage\\\"]]],[13],[1,\\\"\\\\n \\\"],[8,[39,9],[[24,0,\\\"btn btn-warning btn-lg btn-wide\\\"]],[[\\\"@route\\\"],[\\\"login\\\"]],[[\\\"default\\\"],[[[[1,\\\"Back to Login\\\"]],[]]]]],[1,\\\"\\\\n\\\\n\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"alert alert-info\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Loader\\\"],[14,\\\"src\\\",\\\"/assets/images/logo-loader.svg\\\"],[14,5,\\\"width: 40px\\\"],[12],[13],[1,\\\"\\\\n Logging in...\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"center-block m-t-md\\\"],[14,5,\\\"max-width: 32rem;\\\"],[12],[1,\\\"\\\\n\\\\n\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"body\\\",\\\"a\\\",\\\"span\\\",\\\"form\\\",\\\"if\\\",\\\"h1\\\",\\\"p\\\",\\\"strong\\\",\\\"div\\\",\\\"link-to\\\",\\\"img\\\"]]\",\n \"moduleName\": \"vosaic/auth/template.hbs\",\n \"isStrictMode\": false\n });\n});","define(\"vosaic/authenticators/lti\", [\"exports\", \"@ember/service\", \"rsvp\", \"@ember/utils\", \"@ember/runloop\", \"ember-simple-auth/authenticators/oauth2-password-grant\", \"vosaic/config/environment\"], function (_exports, _service, _rsvp, _utils, _runloop, _oauth2PasswordGrant, _environment) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"rsvp\",0,\"@ember/utils\",0,\"@ember/runloop\",0,\"ember-simple-auth/authenticators/oauth2-password-grant\",0,\"vosaic/config/environment\"eaimeta@70e063a35619d71f\n /**\n * Custom authenticator for saml\n * not done nor working yet. Just a holder for future updates\n */\n //import SessionService from 'ember-simple-auth/services/session';\n var _default = _exports.default = _oauth2PasswordGrant.default.extend({\n session: (0, _service.service)('session'),\n serverTokenEndpoint: _environment.default.authTokenEndpoint,\n refreshAccessTokens: true,\n provider: 'lti',\n // TODO configure for saml stuff\n authenticate(assertion, state, headers = {}) {\n return new _rsvp.default.Promise((resolve, reject) => {\n const data = {\n grant_type: this.provider,\n id_token: assertion\n };\n const serverTokenEndpoint = this.serverTokenEndpoint;\n const useResponse = this.rejectWithResponse;\n this.makeRequest(serverTokenEndpoint, data, headers).then(response => {\n (0, _runloop.run)(() => {\n if (!this._validate(response)) {\n reject('access_token is missing in server response');\n }\n const expiresAt = this._absolutizeExpirationTime(response['expires_in']);\n this._scheduleAccessTokenRefresh(response['expires_in'], expiresAt, response['refresh_token']);\n if (!(0, _utils.isEmpty)(expiresAt)) {\n response.expires_at = expiresAt;\n }\n resolve(response);\n });\n }, response => {\n (0, _runloop.run)(null, reject, useResponse ? response : response.responseJSON);\n });\n });\n }\n });\n});","define(\"vosaic/authenticators/oauth2expires\", [\"exports\", \"ember-simple-auth/authenticators/oauth2-password-grant\", \"vosaic/config/environment\"], function (_exports, _oauth2PasswordGrant, _environment) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"ember-simple-auth/authenticators/oauth2-password-grant\",0,\"vosaic/config/environment\"eaimeta@70e063a35619d71f\n var _default = _exports.default = _oauth2PasswordGrant.default.extend({\n serverTokenEndpoint: _environment.default.authTokenEndpoint,\n refreshAccessTokens: false\n });\n});","define(\"vosaic/authenticators/oauth2manual-refresh-exp\", [\"exports\", \"rsvp\", \"@ember/runloop\", \"ember-simple-auth/authenticators/oauth2-password-grant\", \"vosaic/config/environment\"], function (_exports, _rsvp, _runloop, _oauth2PasswordGrant, _environment) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/runloop\",0,\"ember-simple-auth/authenticators/oauth2-password-grant\",0,\"vosaic/config/environment\"eaimeta@70e063a35619d71f\n var _default = _exports.default = _oauth2PasswordGrant.default.extend({\n serverTokenEndpoint: _environment.default.authTokenEndpoint,\n refreshAccessTokens: true,\n authenticate(data, headers) {\n return new _rsvp.default.Promise((resolve, reject) => {\n const refreshAccessTokens = this.refreshAccessTokens;\n if (refreshAccessTokens) {\n this.manualRefreshAccessToken(data['expires_in'], data['refresh_token'], headers).then(resolve, reject).then(() => {\n resolve();\n });\n } else {\n reject();\n }\n });\n },\n // Need our own custom method to add a header to indicate to the server we are trying to reset the expired claim\n manualRefreshAccessToken(expiresIn, refreshToken, headers) {\n const data = {\n grant_type: 'refresh_token',\n refresh_token: refreshToken\n };\n const serverTokenEndpoint = this.serverTokenEndpoint;\n const header = {\n 'reset-is-expired': 'true',\n ...headers\n };\n return new _rsvp.default.Promise((resolve, reject) => {\n this.makeRequest(serverTokenEndpoint, data, header).then(response => {\n (0, _runloop.run)(() => {\n const newExpiresIn = response['expires_in'] || expiresIn;\n const newRefreshToken = response['refresh_token'] || refreshToken;\n const expiresAt = this._absolutizeExpirationTime(newExpiresIn);\n const data = response;\n data.expires_in = newExpiresIn;\n data.expires_at = expiresAt;\n data.refresh_token = newRefreshToken;\n this._scheduleAccessTokenRefresh(newExpiresIn, null, newRefreshToken);\n this.trigger('sessionDataUpdated', data);\n resolve(data);\n });\n }, response => {\n console.warn(`Access token could not be refreshed - server responded with ${response.responseJSON}.`, false, {\n id: 'ember-simple-auth.failedOAuth2TokenRefresh'\n });\n reject();\n });\n });\n }\n });\n});","define(\"vosaic/authenticators/oauth2manual-refresh\", [\"exports\", \"rsvp\", \"@ember/runloop\", \"ember-simple-auth/authenticators/oauth2-password-grant\", \"vosaic/config/environment\"], function (_exports, _rsvp, _runloop, _oauth2PasswordGrant, _environment) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/runloop\",0,\"ember-simple-auth/authenticators/oauth2-password-grant\",0,\"vosaic/config/environment\"eaimeta@70e063a35619d71f\n var _default = _exports.default = _oauth2PasswordGrant.default.extend({\n serverTokenEndpoint: _environment.default.authTokenEndpoint,\n refreshAccessTokens: true,\n authenticate(data, headers) {\n return new _rsvp.default.Promise((resolve, reject) => {\n const refreshAccessTokens = this.refreshAccessTokens;\n if (refreshAccessTokens) {\n this.manualRefreshAccessToken(data['expires_in'], data['refresh_token'], headers).then(resolve, reject).then(() => {\n resolve();\n });\n } else {\n reject();\n }\n });\n },\n // Need our own custom method to add a header to indicate to the server we are trying to reset the expired claim\n manualRefreshAccessToken(expiresIn, refreshToken, headers) {\n const data = {\n grant_type: 'refresh_token',\n refresh_token: refreshToken\n };\n const serverTokenEndpoint = this.serverTokenEndpoint;\n return new _rsvp.default.Promise((resolve, reject) => {\n this.makeRequest(serverTokenEndpoint, data, headers).then(response => {\n (0, _runloop.run)(() => {\n const newExpiresIn = response['expires_in'] || expiresIn;\n const newRefreshToken = response['refresh_token'] || refreshToken;\n const expiresAt = this._absolutizeExpirationTime(newExpiresIn);\n const data = refresh;\n data.expires_in = newExpiresIn;\n data.expires_at = expiresAt;\n data.refresh_token = newRefreshToken;\n this._scheduleAccessTokenRefresh(newExpiresIn, null, newRefreshToken);\n this.trigger('sessionDataUpdated', data);\n resolve(data);\n });\n }, response => {\n console.warn(`Access token could not be refreshed - server responded with ${response.responseJSON}.`, false, {\n id: 'ember-simple-auth.failedOAuth2TokenRefresh'\n });\n reject();\n });\n });\n }\n });\n});","define(\"vosaic/authenticators/oauth2refresh\", [\"exports\", \"rsvp\", \"@ember/utils\", \"@ember/test-waiters\", \"ember-simple-auth/authenticators/oauth2-password-grant\", \"vosaic/config/environment\"], function (_exports, _rsvp, _utils, _testWaiters, _oauth2PasswordGrant, _environment) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class; // import OAuth2PasswordGrant from 'ember-simple-auth/authenticators/oauth2-password-grant';\n // import ENV from 'vosaic/config/environment';\n // export default OAuth2PasswordGrant.extend({\n // serverTokenEndpoint: ENV.authTokenEndpoint,\n // refreshAccessTokens: true,\n // });\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/utils\",0,\"@ember/test-waiters\",0,\"ember-simple-auth/authenticators/oauth2-password-grant\",0,\"vosaic/config/environment\"eaimeta@70e063a35619d71f\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n let OAuth2Authenticator = _exports.default = (_class = class OAuth2Authenticator extends _oauth2PasswordGrant.default {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"serverTokenEndpoint\", _environment.default.authTokenEndpoint);\n _defineProperty(this, \"refreshAccessTokens\", true);\n }\n makeRequest(url, data, headers = {}) {\n headers['Content-Type'] = 'application/x-www-form-urlencoded';\n if (!(0, _utils.isEmpty)(this.clientId)) {\n data.client_id = this.clientId;\n }\n const body = Object.keys(data).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`).join('&');\n return new _rsvp.default.Promise((resolve, reject) => {\n fetch(url, {\n body,\n credentials: 'include',\n headers,\n method: 'POST'\n }).then(response => {\n response.text().then(text => {\n try {\n const json = JSON.parse(text);\n if (!response.ok) {\n response.responseJSON = json;\n reject(response);\n } else {\n resolve(json);\n }\n } catch {\n response.responseText = text;\n reject(response);\n }\n });\n }).catch(reject);\n });\n }\n }, _applyDecoratedDescriptor(_class.prototype, \"makeRequest\", [_testWaiters.waitFor], Object.getOwnPropertyDescriptor(_class.prototype, \"makeRequest\"), _class.prototype), _class);\n});","define(\"vosaic/authenticators/oidc-token\", [\"exports\", \"rsvp\", \"@ember/utils\", \"@ember/runloop\", \"ember-simple-auth/authenticators/oauth2-password-grant\", \"vosaic/config/environment\"], function (_exports, _rsvp, _utils, _runloop, _oauth2PasswordGrant, _environment) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/utils\",0,\"@ember/runloop\",0,\"ember-simple-auth/authenticators/oauth2-password-grant\",0,\"vosaic/config/environment\"eaimeta@70e063a35619d71f\n /**\n * Custom authenticator for Oauth2 using an OpenID Connect id_token from an external provider.\n * Most of this code is copied from ember-simple-auth/authenticators/oauth2-password-grant, and thus it\n * relies on the private implementation of OAuth2PasswordGrant and has the potential to break with updates.\n */\n var _default = _exports.default = _oauth2PasswordGrant.default.extend({\n serverTokenEndpoint: _environment.default.authTokenEndpoint,\n refreshAccessTokens: true,\n authenticate(provider, idToken, headers = {}) {\n return new _rsvp.default.Promise((resolve, reject) => {\n const data = {\n grant_type: provider,\n id_token: idToken\n };\n const serverTokenEndpoint = this.serverTokenEndpoint;\n const useResponse = this.rejectWithResponse;\n this.makeRequest(serverTokenEndpoint, data, headers).then(response => {\n (0, _runloop.run)(() => {\n if (!this._validate(response)) {\n reject('access_token is missing in server response');\n }\n const expiresAt = this._absolutizeExpirationTime(response['expires_in']);\n this._scheduleAccessTokenRefresh(response['expires_in'], expiresAt, response['refresh_token']);\n if (!(0, _utils.isEmpty)(expiresAt)) {\n response.expires_at = expiresAt;\n }\n resolve(response);\n });\n }, response => {\n (0, _runloop.run)(null, reject, useResponse ? response : response.responseJSON);\n });\n });\n }\n });\n});","define(\"vosaic/authenticators/org-refresh\", [\"exports\", \"rsvp\", \"@ember/runloop\", \"ember-simple-auth/authenticators/oauth2-password-grant\", \"vosaic/config/environment\"], function (_exports, _rsvp, _runloop, _oauth2PasswordGrant, _environment) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/runloop\",0,\"ember-simple-auth/authenticators/oauth2-password-grant\",0,\"vosaic/config/environment\"eaimeta@70e063a35619d71f\n var _default = _exports.default = _oauth2PasswordGrant.default.extend({\n serverTokenEndpoint: _environment.default.authTokenEndpoint,\n refreshAccessTokens: true,\n authenticate(data, organizationId, profileId, headers) {\n return new _rsvp.default.Promise((resolve, reject) => {\n const refreshAccessTokens = this.refreshAccessTokens;\n if (refreshAccessTokens) {\n this.manualRefreshAccessToken(data['expires_in'], data['refresh_token'], organizationId, profileId, headers).then(resolve, reject).then(() => {\n resolve();\n });\n } else {\n reject();\n }\n });\n },\n // Need our own custom method to add a header to indicate to the server we are changing orgs\n manualRefreshAccessToken(expiresIn, refreshToken, organizationId, profileId, headers) {\n const data = {\n grant_type: 'refresh_token',\n refresh_token: refreshToken\n };\n const serverTokenEndpoint = this.serverTokenEndpoint;\n const header = {\n 'change-org-id': organizationId,\n 'change-profile-id': profileId,\n ...headers\n };\n return new _rsvp.default.Promise((resolve, reject) => {\n this.makeRequest(serverTokenEndpoint, data, header).then(response => {\n (0, _runloop.run)(() => {\n expiresIn = response['expires_in'] || this.expiresIn;\n refreshToken = response['refresh_token'] || this.refreshToken;\n const expiresAt = this._absolutizeExpirationTime(expiresIn);\n const data = Object.assign(response, {\n expires_in: expiresIn,\n expires_at: expiresAt,\n refresh_token: refreshToken\n });\n this._scheduleAccessTokenRefresh(expiresIn, null, refreshToken);\n this.trigger('sessionDataUpdated', data);\n resolve(data);\n });\n }, response => {\n console.warn(`Access token could not be refreshed - server responded with ${response.responseJSON}.`, false, {\n id: 'ember-simple-auth.failedOAuth2TokenRefresh'\n });\n reject();\n });\n });\n }\n });\n});","define(\"vosaic/authenticators/saml\", [\"exports\", \"rsvp\", \"@ember/utils\", \"@ember/runloop\", \"ember-simple-auth/authenticators/oauth2-password-grant\", \"vosaic/config/environment\"], function (_exports, _rsvp, _utils, _runloop, _oauth2PasswordGrant, _environment) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"rsvp\",0,\"@ember/utils\",0,\"@ember/runloop\",0,\"ember-simple-auth/authenticators/oauth2-password-grant\",0,\"vosaic/config/environment\"eaimeta@70e063a35619d71f\n /**\n * Custom authenticator for saml\n * not done nor working yet. Just a holder for future updates\n */\n var _default = _exports.default = _oauth2PasswordGrant.default.extend({\n serverTokenEndpoint: _environment.default.authTokenEndpoint,\n refreshAccessTokens: true,\n provider: 'urn:ietf:params:oauth:grant-type:saml2-bearer',\n // TODO configure for saml stuff\n authenticate(assertion, state, headers = {}) {\n return new _rsvp.default.Promise((resolve, reject) => {\n const data = {\n grant_type: this.provider,\n SAMLResponse: assertion,\n RelayState: state\n };\n const serverTokenEndpoint = this.serverTokenEndpoint;\n const useResponse = this.rejectWithResponse;\n this.makeRequest(serverTokenEndpoint, data, headers).then(response => {\n (0, _runloop.run)(() => {\n if (!this._validate(response)) {\n reject('access_token is missing in server response');\n }\n const expiresAt = this._absolutizeExpirationTime(response['expires_in']);\n this._scheduleAccessTokenRefresh(response['expires_in'], expiresAt, response['refresh_token']);\n if (!(0, _utils.isEmpty)(expiresAt)) {\n response.expires_at = expiresAt;\n }\n resolve(response);\n });\n }, response => {\n (0, _runloop.run)(null, reject, useResponse ? response : response.responseJSON);\n });\n });\n }\n });\n});","define(\"vosaic/component-managers/glimmer\", [\"exports\", \"@glimmer/component/-private/ember-component-manager\"], function (_exports, _emberComponentManager) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.defineProperty(_exports, \"default\", {\n enumerable: true,\n get: function () {\n return _emberComponentManager.default;\n }\n });\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component/-private/ember-component-manager\"eaimeta@70e063a35619d71f\n});","// import $ from 'jquery';\n// import { computed } from '@ember/object';\n// import { notEmpty } from '@ember/object/computed';\n// import Component from '@ember/component';\n// export default Component.extend({\n// tagName: 'main',\n// errorMessageNotEmpty: notEmpty('model.errorMessage'),\n// selectedIndustry: null,\n// showIndustryError: false,\n// showRegisterButton: true,\n// currentHowToVideo: undefined,\n// allParameters: undefined,\n// //reCaptchaFailedToLoad: false,\n// selectErrorClass: computed('showIndustryError', function () {\n// if (this.showIndustryError) {\n// return 'has-danger';\n// }\n// return '';\n// }),\n// //google ad tracking\n// getGoogleAdParam(p) {\n// try {\n// const match = RegExp('[?&]' + p + '=([^&]*)').exec(\n// window.location.search\n// );\n// return match && decodeURIComponent(match[1].replace(/\\+/g, ' '));\n// } catch (e) {\n// return null;\n// }\n// },\n// getExpiryRecord(value) {\n// /*eslint no-magic-numbers:*/\n// const expiryPeriod = 90 * 24 * 60 * 60 * 1000; // 90 day expiry in milliseconds\n// const expiryDate = new Date().getTime() + expiryPeriod;\n// return {\n// value: value,\n// expiryDate: expiryDate,\n// };\n// },\n// addGclid() {\n// const gclidParam = this.getGoogleAdParam('gclid');\n// const gclidFormFields = ['GCLID__c', 'form-input-GCLID__c', 'GCLID']; // all possible gclid form field ids here\n// let gclidRecord = null;\n// let currGclidFormField;\n// const gclsrcParam = this.getGoogleAdParam('gclsrc');\n// const isGclsrcValid = !gclsrcParam || gclsrcParam.indexOf('aw') !== -1;\n// gclidFormFields.forEach((field) => {\n// if (document.getElementById(field)) {\n// currGclidFormField = document.getElementById(field);\n// }\n// });\n// if (gclidParam && isGclsrcValid) {\n// gclidRecord = this.getExpiryRecord(gclidParam);\n// localStorage.setItem('gclid', JSON.stringify(gclidRecord));\n// }\n// const gclid = gclidRecord || JSON.parse(localStorage.getItem('gclid'));\n// const isGclidValid = gclid && new Date().getTime() < gclid.expiryDate;\n// if (currGclidFormField && isGclidValid) {\n// currGclidFormField.value = gclid.value;\n// }\n// },\n// /* eslint max-statements: */\n// didReceiveAttrs() {\n// this._super();\n// const queryString = window.location.search;\n// //let urlParams = new URLSearchParams(window.location.search);\n// const srcParam = this.getGoogleAdParam('utm_source');\n// const emailParam = this.getGoogleAdParam('ibmem');\n// const fnameParam = this.getGoogleAdParam('ibmfn');\n// const lnameParam = this.getGoogleAdParam('ibmln');\n// const orgParam = this.getGoogleAdParam('ibmorg');\n// const formTitle = this.getGoogleAdParam('ft');\n// const leadSource = this.getGoogleAdParam('ls');\n// //load lead capture iframe if both are true\n// if (emailParam && srcParam === 'acoustic') {\n// const baseUrl = '/page/lead' + queryString;\n// this.set('allParameters', baseUrl);\n// } else {\n// this.set('allParameters', undefined);\n// }\n// if (emailParam) {\n// this.set('model.account.emailAddress', emailParam.toLowerCase());\n// }\n// if (fnameParam) {\n// this.set('model.account.firstName', fnameParam);\n// }\n// if (lnameParam) {\n// this.set('model.account.lastName', lnameParam);\n// }\n// if (orgParam) {\n// this.set('model.account.organizationName', orgParam);\n// }\n// if (formTitle) {\n// this.set('model.formTitle', Ember.String.htmlSafe(formTitle));\n// }\n// if (leadSource) {\n// this.set('model.account.leadSource', leadSource);\n// }\n// //this.set('reCaptchaFailedToLoad', false);\n// // if (Ember.$('script[src = \"https://www.google.com/recaptcha/api.js?render=explicit\"]').length < 1) {\n// // Ember.$(\"head script\").last().after(\"\");\n// // }\n// /*eslint consistent-this:*/\n// //var _this = this;\n// if (this.get('model.isK12Audience')) {\n// this.set('selectedIndustry', 'K-12');\n// this.set('model.account.industry', 'K-12');\n// } else if (\n// this.get('model.isHEDAudience') ||\n// this.get('model.isResearchAudience')\n// ) {\n// this.set('selectedIndustry', 'Higher Education');\n// this.set('model.account.industry', 'Higher Education');\n// } else if (this.get('model.isMEDAudience')) {\n// this.set('selectedIndustry', 'Medical');\n// this.set('model.account.industry', 'Medical');\n// } else {\n// this.set('selectedIndustry', null);\n// }\n// this.addGclid();\n// //catch all recaptcha load error and display a message\n// // TODO CSD recpatcha stuff\n// /*window.onerror = function () {\n// _this.set('reCaptchaFailedToLoad', true);\n// // if (msg.includes('error')) {\n// // _this.set('reCaptchaFailedToLoad', true);\n// // }\n// }*/\n// },\n// progressLoop(progress, video) {\n// setInterval(() => {\n// const val = Math.round((video.currentTime / video.duration) * 100);\n// if (val) {\n// $(progress).val(val);\n// }\n// });\n// },\n// keyUp: function () {\n// this.set('model.errorMessage', undefined);\n// this.get('model.errors').clear();\n// },\n// actions: {\n// /*onCaptchaResolved(response) {\n// if (!!response) {\n// this.set('showRegisterButton', true);\n// this.set('model.account.googleRecaptchaCode', response);\n// }\n// },*/\n\n// onIndustrySelected(value) {\n// this.set('showIndustryError', false);\n// this.set('selectedIndustry');\n// this.set('model.account.industry', value);\n// },\n// registerClicked() {\n// //Safari throws undefined error if you try to use toLowerCase on a blank field.\n// if (this.selectedIndustry === null) {\n// this.set('showIndustryError', true);\n// }\n// const email = this.get('model.account.emailAddress') || '';\n// this.set('model.account.emailAddress', email.toLowerCase());\n// if (localStorage.getItem('gclid')) {\n// const gObj = JSON.parse(localStorage.getItem('gclid'));\n// this.set('model.account.googleGclidId', gObj.value);\n// }\n\n// this.sendAction('onRegister', this.model);\n// },\n// playMarketingVideo(id) {\n// const video = document.getElementById('video-' + id);\n// video.volume = 0.3;\n// $('.video-col video').each(function () {\n// //this.removeAttribute(\"controls\");\n// if (video !== $(this).get(0)) {\n// this.pause();\n// }\n// });\n// if (video.paused) {\n// video.play();\n// $('.video-col').removeClass('col-md-6 col-md-8').addClass('col-md-4');\n// $('#' + id).addClass('col-md-8');\n// const progress = $('#video-progress-' + id);\n// $('#video-progress-' + id).removeClass('hidden-xs-up');\n// this.progressLoop(progress, video);\n// $('#' + id)\n// .find('.toggle-mute')\n// .removeClass('hidden-xs-up');\n// $('#' + id + ' .toggle-play')\n// .find('use')\n// .attr('xlink:href', '#media-pause');\n// } else {\n// video.pause();\n// $('.video-col').removeClass('col-md-4 col-md-8').addClass('col-md-6');\n// $('.toggle-mute').addClass('hidden-xs-up');\n// $('#' + id + ' .toggle-play')\n// .find('use')\n// .attr('xlink:href', '#media-play');\n// }\n// },\n// toggleMuteMarketingVideo(id) {\n// const video = document.getElementById('video-' + id);\n// if (video.muted || video.volume === 0) {\n// video.muted = false;\n// video.volume = 0.3;\n// $('#' + id)\n// .find('use')\n// .attr('xlink:href', '#volume-high');\n// } else {\n// video.muted = true;\n// video.volume = 0;\n// $('#' + id)\n// .find('use')\n// .attr('xlink:href', '#volume-off');\n// }\n// },\n// },\n// });\ndefine(\"vosaic/components/_register-view\", [], function () {\n \"use strict\";\n\n 0; //eaimeta@70e063a35619d71feaimeta@70e063a35619d71f\n});","define(\"vosaic/components/account-type-badge/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/template-factory\"], function (_exports, _component, _component2, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n {{@accountType}}\n \n */\n {\n \"id\": \"4vJepnpY\",\n \"block\": \"[[[11,1],[16,0,[29,[\\\"label \\\",[30,0,[\\\"badgeClass\\\"]]]]],[16,\\\"data-test-account-type-badge\\\",[30,1]],[17,2],[12],[1,[30,1]],[13],[1,\\\"\\\\n\\\"]],[\\\"@accountType\\\",\\\"&attrs\\\"],[\\\"span\\\"]]\",\n \"moduleName\": \"vosaic/components/account-type-badge/index.hbs\",\n \"isStrictMode\": false\n });\n\n /**\n * Presentational badge for an org's account type. (NV-307)\n *\n * Decoupled from the org-engagement model: pass the derived string via\n * `@accountType` (\"Trial\" | \"Active\" | \"Expired\") and the badge picks its\n * own Bootstrap label-* class. Consumed by NV-320 (table) and NV-327 (modal).\n *\n * \n */\n const BADGE_CLASSES = {\n Trial: 'label-warning',\n Active: 'label-success',\n Expired: 'label-primary'\n };\n class AccountTypeBadgeComponent extends _component2.default {\n get badgeClass() {\n return BADGE_CLASSES[this.args.accountType] ?? '';\n }\n }\n _exports.default = AccountTypeBadgeComponent;\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountTypeBadgeComponent);\n});","define(\"vosaic/components/accounts-basic-information-view/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/array\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _service, _array, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _dec, _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/array\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n

Basic Information

\n {{#if this.saveErrors}}\n \n {{/if}}\n {{#if this.hasSuccessMessage}}\n
\n Profile updated successfully.\n
\n {{/if}}\n
\n
\n
\n
\n {{#if this.otherLoadedProfiles}}\n {{#if this.can.editOrgBilling}}\n \n {{else}}\n \n {{/if}}\n
\n
\n Default Organization\n \n {{#each this.otherLoadedProfiles as |otherProfile|}}\n {{otherProfile.organizationName}}\n {{/each}}\n \n
\n
\n \n {{else}}\n \n {{#if this.can.editOrgBilling}}\n \n {{else}}\n \n {{/if}}\n \n {{/if}}\n
\n {{#if this.can.editOrgEmailDomains}}\n
\n
\n \n
\n
\n {{/if}}\n
\n {{#if @profile.myUserProfile.organization.isSaml}}\n \n \n \n \n \n {{else}}\n \n \n \n \n \n {{/if}}\n {{#if @canHideAIPrompts}}\n
\n \n
\n {{/if}}\n
\n
\n {{#if this.hasSuccessMessage}}\n \n \n Updated\n {{else}}\n {{#if @profile.myUserProfile.errors.messages.length}}\n \n \n Error\n {{else}}\n Save Changes\n {{/if}}\n {{/if}}\n \n Cancel\n
\n
\n
\n {{#if @isOnRenewPage}}{{else}}\n

Member of Groups

\n {{#if this.groupsData}}\n {{#each this.groupsData key='name' as |group|}}\n

{{group.name}}

\n {{/each}}\n {{else}}\n

You've not been added to any User Groups.

\n {{/if}}\n
\n

Member of Projects:

\n {{#if @projects}}\n {{#each @projects key='id' as |project|}}\n {{project.title}}

\n {{/each}}\n {{else}}\n

You've not been added to any Projects/Assignments.

\n {{/if}}\n

\n If you don't see a Project/Assignment you're looking for, ask your\n instructor to add you to appropriate Groups and/or Projects.\n Contact Instructor\n

\n {{/if}}\n \n
\n \n
\n {{!/.row}}\n \n
\n
\n \n {{! whichRole options: 'All', 'OrgAdmin', 'Educator', 'Learner', 'Viewer', 'EducatorOrAdmin' }}\n
\n */\n {\n \"id\": \"vE4qFxmG\",\n \"block\": \"[[[10,\\\"h2\\\"],[14,0,\\\"m-b-md\\\"],[12],[1,\\\"Basic Information\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"saveErrors\\\"]],[[[1,\\\" \\\"],[8,[39,2],null,[[\\\"@errors\\\"],[[30,0,[\\\"saveErrors\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"hasSuccessMessage\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"alert alert-success m-b-sm\\\"],[12],[1,\\\"\\\\n Profile updated successfully.\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[11,\\\"form\\\"],[24,1,\\\"basic-information-form\\\"],[4,[38,5],[\\\"submit\\\",[30,0,[\\\"save\\\"]]],null],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-md-8\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"otherLoadedProfiles\\\"]],[[[41,[30,0,[\\\"can\\\",\\\"editOrgBilling\\\"]],[[[1,\\\" \\\"],[8,[39,6],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@errors\\\"],[\\\"col-xs-6 form-group p-l-none p-r-none\\\",\\\"text\\\",\\\"Organization Name\\\",\\\"Organization Name\\\",\\\"organization-name\\\",[30,1,[\\\"myUserProfile\\\",\\\"organization\\\",\\\"name\\\"]],[28,[37,7],[[28,[37,8],[[30,1,[\\\"myUserProfile\\\",\\\"organization\\\",\\\"name\\\"]]],null]],null],[30,1,[\\\"myUserProfile\\\",\\\"organization\\\",\\\"errors\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[8,[39,6],null,[[\\\"@disabled\\\",\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@errors\\\"],[true,\\\"col-xs-6 p-l-none p-r-none\\\",\\\"text\\\",\\\"Organization Name\\\",\\\"Organization Name\\\",\\\"organization-name\\\",[30,1,[\\\"myUserProfile\\\",\\\"organization\\\",\\\"name\\\"]],[28,[37,7],[[28,[37,8],[[30,1,[\\\"myUserProfile\\\",\\\"organization\\\",\\\"name\\\"]]],null]],null],[30,1,[\\\"myUserProfile\\\",\\\"organization\\\",\\\"errors\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[10,0],[14,0,\\\"col-xs-6 form-group p-l-none p-r-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"p-x-sm\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"label\\\"],[14,\\\"for\\\",\\\"default-select-org\\\"],[14,0,\\\"form-control-label animate-up\\\"],[12],[1,\\\"Default Organization\\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,10],[[24,1,\\\"default-select-org\\\"]],[[\\\"@value\\\",\\\"@class\\\",\\\"@action\\\"],[[30,0,[\\\"getDefaultOrganizationId\\\"]],\\\"c-select form-control-lg full-width m-a-none\\\",[30,0,[\\\"onOrgSelected\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[37,12],[[28,[37,12],[[30,0,[\\\"otherLoadedProfiles\\\"]]],null]],null],null,[[[1,\\\" \\\"],[8,[30,2,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,3,[\\\"organizationId\\\"]]]],[[\\\"default\\\"],[[[[1,[30,3,[\\\"organizationName\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\" \\\"]],[2]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[]],[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"can\\\",\\\"editOrgBilling\\\"]],[[[1,\\\" \\\"],[8,[39,6],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@errors\\\"],[\\\"col-xs-12 form-group p-l-none p-r-none\\\",\\\"text\\\",\\\"Organization Name\\\",\\\"Organization Name\\\",\\\"organization-name\\\",[30,1,[\\\"myUserProfile\\\",\\\"organization\\\",\\\"name\\\"]],[28,[37,7],[[28,[37,8],[[30,1,[\\\"myUserProfile\\\",\\\"organization\\\",\\\"name\\\"]]],null]],null],[30,1,[\\\"myUserProfile\\\",\\\"organization\\\",\\\"errors\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[8,[39,6],null,[[\\\"@disabled\\\",\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@errors\\\"],[true,\\\"col-xs-12 p-l-none p-r-none\\\",\\\"text\\\",\\\"Organization Name\\\",\\\"Organization Name\\\",\\\"organization-name\\\",[30,1,[\\\"myUserProfile\\\",\\\"organization\\\",\\\"name\\\"]],[30,1,[\\\"myUserProfile\\\",\\\"organization\\\",\\\"errors\\\",\\\"name\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"can\\\",\\\"editOrgEmailDomains\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,13],null,[[\\\"@domains\\\",\\\"@onChange\\\",\\\"@errors\\\"],[[30,1,[\\\"myUserProfile\\\",\\\"organization\\\",\\\"allowedEmailDomains\\\"]],[28,[37,7],[[28,[37,8],[[30,1,[\\\"myUserProfile\\\",\\\"organization\\\",\\\"allowedEmailDomains\\\"]]],null]],null],[30,1,[\\\"myUserProfile\\\",\\\"organization\\\",\\\"errors\\\",\\\"allowedEmailDomains\\\"]]]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"myUserProfile\\\",\\\"organization\\\",\\\"isSaml\\\"]],[[[1,\\\" \\\"],[8,[39,6],null,[[\\\"@disabled\\\",\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@errors\\\",\\\"@autocomplete\\\"],[true,\\\"col-xs-6 p-l-none p-r-none\\\",\\\"text\\\",\\\"First Name\\\",\\\"First Name\\\",\\\"first-name\\\",[30,1,[\\\"myUserProfile\\\",\\\"firstName\\\"]],[30,1,[\\\"myUserProfile\\\",\\\"errors\\\",\\\"firstName\\\"]],\\\"given-name\\\"]],null],[1,\\\"\\\\n\\\\n \\\"],[8,[39,6],null,[[\\\"@disabled\\\",\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@errors\\\",\\\"@autocomplete\\\"],[true,\\\"col-xs-6 p-l-none p-r-none\\\",\\\"text\\\",\\\"Last Name\\\",\\\"Last Name\\\",\\\"last-name\\\",[30,1,[\\\"myUserProfile\\\",\\\"lastName\\\"]],[30,1,[\\\"myUserProfile\\\",\\\"errors\\\",\\\"lastName\\\"]],\\\"family-name\\\"]],null],[1,\\\"\\\\n\\\\n \\\"],[8,[39,6],null,[[\\\"@disabled\\\",\\\"@type\\\",\\\"@class\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@errors\\\",\\\"@autocomplete\\\"],[true,\\\"email\\\",\\\"col-xs-12 p-l-none p-r-none\\\",\\\"Your Login Email\\\",\\\"Your Login Email\\\",\\\"email\\\",[30,1,[\\\"myUserProfile\\\",\\\"emailAddress\\\"]],[30,1,[\\\"myUserProfile\\\",\\\"errors\\\",\\\"emailAddress\\\"]],\\\"email\\\"]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[8,[39,6],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@errors\\\",\\\"@autocomplete\\\"],[\\\"col-xs-6 p-l-none p-r-none\\\",\\\"text\\\",\\\"First Name\\\",\\\"First Name\\\",\\\"first-name\\\",[30,1,[\\\"myUserProfile\\\",\\\"firstName\\\"]],[28,[37,7],[[28,[37,8],[[30,1,[\\\"myUserProfile\\\",\\\"firstName\\\"]]],null]],null],[30,1,[\\\"myUserProfile\\\",\\\"errors\\\",\\\"firstName\\\"]],\\\"given-name\\\"]],null],[1,\\\"\\\\n\\\\n \\\"],[8,[39,6],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@errors\\\",\\\"@autocomplete\\\"],[\\\"col-xs-6 p-l-none p-r-none\\\",\\\"text\\\",\\\"Last Name\\\",\\\"Last Name\\\",\\\"last-name\\\",[30,1,[\\\"myUserProfile\\\",\\\"lastName\\\"]],[28,[37,7],[[28,[37,8],[[30,1,[\\\"myUserProfile\\\",\\\"lastName\\\"]]],null]],null],[30,1,[\\\"myUserProfile\\\",\\\"errors\\\",\\\"lastName\\\"]],\\\"family-name\\\"]],null],[1,\\\"\\\\n\\\\n \\\"],[8,[39,6],null,[[\\\"@type\\\",\\\"@class\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@errors\\\",\\\"@autocomplete\\\"],[\\\"email\\\",\\\"col-xs-12 p-l-none p-r-none\\\",\\\"Your Login Email\\\",\\\"Your Login Email\\\",\\\"email\\\",[30,1,[\\\"myUserProfile\\\",\\\"emailAddress\\\"]],[28,[37,7],[[28,[37,8],[[30,1,[\\\"myUserProfile\\\",\\\"emailAddress\\\"]]],null]],null],[30,1,[\\\"myUserProfile\\\",\\\"errors\\\",\\\"emailAddress\\\"]],\\\"email\\\"]],null],[1,\\\"\\\\n\\\"]],[]]],[41,[30,4],[[[1,\\\" \\\"],[10,0],[14,0,\\\"c-inputs-stacked m-b-md m-l-md\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,14],null,[[\\\"@class\\\",\\\"@name\\\",\\\"@type\\\",\\\"@labelText\\\",\\\"@value\\\"],[\\\"c-checkbox\\\",\\\"toggle\\\",\\\"checkbox\\\",\\\"Hide your AI Mate prompts from reports\\\",[30,1,[\\\"myUserProfile\\\",\\\"hideAIPrompts\\\"]]]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"m-b-md\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasSuccessMessage\\\"]],[[[1,\\\" \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-success btn-lg btn-wide show-action-icon text-uppercase\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Updated Icon\\\"],[15,\\\"src\\\",[29,[\\\"/assets/icons/\\\",[28,[37,17],[\\\"action-saved\\\"],null],\\\".svg\\\"]]],[14,0,\\\"btn-icon action-icon\\\"],[12],[13],[1,\\\"\\\\n Updated\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,1,[\\\"myUserProfile\\\",\\\"errors\\\",\\\"messages\\\",\\\"length\\\"]],[[[1,\\\" \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-danger btn-lg btn-wide show-action-icon\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Error\\\"],[15,\\\"src\\\",[29,[\\\"/assets/icons/\\\",[28,[37,17],[\\\"action-error\\\"],null],\\\".svg\\\"]]],[14,0,\\\"btn-icon action-icon\\\"],[12],[13],[1,\\\"\\\\n Error\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-success btn-lg btn-wide text-uppercase\\\"],[14,4,\\\"submit\\\"],[12],[1,\\\"Save Changes\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link text-dark m-l-md font-weight-bold\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"cancel\\\"]]],null],[12],[1,\\\"Cancel\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-md-4\\\"],[12],[1,\\\"\\\\n \\\"],[41,[30,5],[[],[]],[[[1,\\\"\\\\n \\\"],[10,\\\"h3\\\"],[14,0,\\\"lead\\\"],[12],[1,\\\"Member of Groups\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"groupsData\\\"]],[[[42,[28,[37,12],[[28,[37,12],[[30,0,[\\\"groupsData\\\"]]],null]],null],\\\"name\\\",[[[1,\\\" \\\"],[10,2],[14,0,\\\"label label-default p-a-xxs\\\"],[12],[1,[30,6,[\\\"name\\\"]]],[13],[1,\\\"\\\\n\\\"]],[6]],null]],[]],[[[1,\\\" \\\"],[10,2],[12],[1,\\\"You've not been added to any User Groups. \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[10,\\\"hr\\\"],[12],[13],[1,\\\"\\\\n \\\"],[10,\\\"h3\\\"],[14,0,\\\"lead\\\"],[12],[1,\\\"Member of Projects:\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,7],[[[42,[28,[37,12],[[28,[37,12],[[30,7]],null]],null],\\\"id\\\",[[[1,\\\" \\\"],[10,2],[15,0,[29,[\\\"label label-default p-a-xxs \\\",[30,8,[\\\"colorClass\\\"]]]]],[12],[1,[30,8,[\\\"title\\\"]]],[13],[1,\\\"\\\\n\\\"]],[8]],null]],[]],[[[1,\\\" \\\"],[10,2],[12],[1,\\\"You've not been added to any Projects/Assignments. \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[10,2],[14,0,\\\"alert alert-info p-a-sm small\\\"],[12],[1,\\\"\\\\n If you don't see a Project/Assignment you're looking for, ask your\\\\n instructor to add you to appropriate Groups and/or Projects.\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary btn-xs btn-smaller-md-down display-block m-t-sm\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"onShowModalSendEmail\\\"]]],null],[12],[1,\\\"Contact Instructor\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"bg-inverse\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,21],null,[[\\\"@users\\\",\\\"@shouldShow\\\",\\\"@whichRoles\\\",\\\"@subject\\\",\\\"@description\\\",\\\"@onCancel\\\"],[[30,9],[30,0,[\\\"showModalSendEmail\\\"]],\\\"EducatorOrAdmin\\\",\\\"It looks like I'm not added to a Vosaic Group or Project\\\",\\\"Accounts Info\\\",[30,0,[\\\"onShowModalSendEmail\\\"]]]],null],[1,\\\"\\\\n\\\"],[13]],[\\\"@profile\\\",\\\"xs\\\",\\\"otherProfile\\\",\\\"@canHideAIPrompts\\\",\\\"@isOnRenewPage\\\",\\\"group\\\",\\\"@projects\\\",\\\"project\\\",\\\"@users\\\"],[\\\"h2\\\",\\\"if\\\",\\\"alert-form-errors\\\",\\\"div\\\",\\\"form\\\",\\\"on\\\",\\\"input-component\\\",\\\"fn\\\",\\\"mut\\\",\\\"label\\\",\\\"x-select\\\",\\\"each\\\",\\\"-track-array\\\",\\\"org-email-domains-field\\\",\\\"input-check-radio\\\",\\\"button\\\",\\\"img\\\",\\\"animated-svg\\\",\\\"h3\\\",\\\"p\\\",\\\"hr\\\",\\\"modal-send-email\\\"]]\",\n \"moduleName\": \"vosaic/components/accounts-basic-information-view/index.hbs\",\n \"isStrictMode\": false\n });\n let AccountsBasicInformationViewComponent = _exports.default = (_dec = (0, _service.service)('can-i'), _class = class AccountsBasicInformationViewComponent extends _component2.default {\n constructor() {\n super(...arguments);\n _initializerDefineProperty(this, \"can\", _descriptor, this);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor2, this);\n _initializerDefineProperty(this, \"successMessage\", _descriptor3, this);\n _initializerDefineProperty(this, \"showModalSendEmail\", _descriptor4, this);\n _initializerDefineProperty(this, \"selectedDefaultOrg\", _descriptor5, this);\n _initializerDefineProperty(this, \"otherLoadedProfiles\", _descriptor6, this);\n _initializerDefineProperty(this, \"defaultProfile\", _descriptor7, this);\n _initializerDefineProperty(this, \"userErrors\", _descriptor8, this);\n _initializerDefineProperty(this, \"orgErrors\", _descriptor9, this);\n this.getOtherProfiles();\n }\n async getOtherProfiles() {\n const otherProfiles = await this.modelReloader.getMyOtherProfiles();\n this.otherLoadedProfiles = otherProfiles;\n if (otherProfiles.length) {\n this.defaultProfile = await otherProfiles.find(el => el.isDefault);\n this.selectedDefaultOrg = this.defaultProfile?.organizationId;\n return otherProfiles;\n } else {\n return [];\n }\n }\n get getDefaultOrganizationId() {\n if (this.selectedDefaultOrg) {\n return this.selectedDefaultOrg;\n } else if (this.args.profile.myUserProfile.defaultOrganizationId) {\n return this.args.profile.myUserProfile.defaultOrganizationId;\n } else {\n return this.args.profile.organizationId;\n }\n }\n get hasSuccessMessage() {\n return !!this.args.successMessage;\n }\n get saveErrors() {\n const userErrors = this.userErrors;\n const orgErrors = this.orgErrors;\n if (userErrors !== undefined && userErrors.length && orgErrors !== undefined && orgErrors.length) {\n const errors = {\n ...userErrors,\n ...orgErrors\n };\n return errors;\n } else if (userErrors !== undefined && userErrors.length) {\n return userErrors;\n } else if (orgErrors !== undefined && orgErrors.length) {\n return orgErrors;\n } else {\n return [];\n }\n }\n get groupsData() {\n const groups = this.args.allGroups;\n const myGroups = this.args.myGroups;\n if (myGroups) {\n return myGroups.forEach(group => {\n groups.find(el => el.id === group.id);\n });\n } else {\n return (0, _array.A)();\n }\n }\n keyUp() {\n this.successMessage = undefined;\n }\n onOrgSelected(orgValue, event) {\n if (event && event.type === 'change') {\n this.selectedDefaultOrg = orgValue;\n this.args.updateDefaultOrgToSelected(this.args.profile, orgValue);\n }\n }\n save(e) {\n e.preventDefault();\n this.args.saveBasicInfo(this.args.profile, this.selectedDefaultOrg);\n }\n cancel() {\n this.args.cancelAction();\n }\n onShowModalSendEmail() {\n if (this.showModalSendEmail) {\n this.showModalSendEmail = false;\n } else {\n this.showModalSendEmail = true;\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"can\", [_dec], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"successMessage\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return this.args.successMessage;\n }\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"showModalSendEmail\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"selectedDefaultOrg\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"otherLoadedProfiles\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return [];\n }\n }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"defaultProfile\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"userErrors\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return this.args.profile.myUserProfile.get('errors');\n }\n }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"orgErrors\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return this.args.profile.myUserProfile.organization.get('errors');\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"keyUp\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"keyUp\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onOrgSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onOrgSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"save\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"save\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onShowModalSendEmail\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onShowModalSendEmail\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountsBasicInformationViewComponent);\n});","define(\"vosaic/components/accounts-change-password-view/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _service, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n

Change Password

\n {{#if this.password.errors.messages.length}}\n \n {{/if}}\n {{#if @errorMessage}}\n \n An error has occurred:\n {{@errorMessage}}\n \n {{/if}}\n
\n \n
\n \n

\n IMPORTANT:\n
Password must be at least\n 12 characters\n long and include\n lower AND uppercase\n letters, a\n number, and a\n special character.\n

\n \n \n \n \n \n \n \n
\n \n {{#if @successMessage}}\n \n Password Updated\n {{else}}\n {{#if @password.errors.messages.length}}\n \n Error\n {{else}}\n Update Password\n {{/if}}\n {{/if}}\n \n Cancel\n \n \n {{outlet}}\n {{yield}}\n */\n {\n \"id\": \"5t7TcCZk\",\n \"block\": \"[[[10,\\\"h2\\\"],[14,0,\\\"m-b-md\\\"],[12],[1,\\\"Change Password\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"password\\\",\\\"errors\\\",\\\"messages\\\",\\\"length\\\"]],[[[1,\\\" \\\"],[8,[39,2],null,[[\\\"@errors\\\"],[[30,0,[\\\"password\\\",\\\"errors\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,1],[[[1,\\\" \\\"],[11,0],[24,\\\"role\\\",\\\"alert\\\"],[24,0,\\\"alert alert-danger m-b-sm small\\\"],[4,[38,4],[[30,0,[\\\"alertDanger\\\"]]],null],[12],[1,\\\"\\\\n An error has occurred:\\\\n \\\"],[1,[30,1]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[11,\\\"form\\\"],[4,[38,6],[\\\"submit\\\",[30,0,[\\\"save\\\"]]],null],[12],[1,\\\"\\\\n\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n\\\\n \\\"],[10,2],[14,0,\\\"col-xs-12 small m-l-none m-b-sm\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"strong\\\"],[14,0,\\\"label label-danger\\\"],[12],[1,\\\"IMPORTANT:\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"Password must be at least\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,\\\"12 characters\\\"],[13],[1,\\\"\\\\n long and include\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,\\\"lower AND uppercase\\\"],[13],[1,\\\"\\\\n letters, a\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,\\\"number\\\"],[13],[1,\\\", and a\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,\\\"special character.\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[8,[39,10],null,[[\\\"@type\\\",\\\"@class\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@errors\\\",\\\"@limitErrorToOne\\\"],[\\\"password\\\",\\\"col-xs-12 p-l-none p-r-none\\\",\\\"Current Password\\\",\\\"Current Password\\\",\\\"current-password\\\",[30,0,[\\\"password\\\",\\\"oldPassword\\\"]],[28,[37,11],[[28,[37,12],[[30,0,[\\\"password\\\",\\\"oldPassword\\\"]]],null]],null],[30,2],true]],null],[1,\\\"\\\\n\\\\n \\\"],[8,[39,10],null,[[\\\"@type\\\",\\\"@class\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@errors\\\",\\\"@limitErrorToOne\\\"],[\\\"password\\\",\\\"col-xs-12 p-l-none p-r-none\\\",\\\"New Password\\\",\\\"New Password\\\",\\\"new-password\\\",[30,0,[\\\"password\\\",\\\"newPassword\\\"]],[28,[37,11],[[28,[37,12],[[30,0,[\\\"password\\\",\\\"newPassword\\\"]]],null]],null],[30,0,[\\\"password\\\",\\\"errors\\\",\\\"newPassword\\\"]],true]],null],[1,\\\"\\\\n\\\\n \\\"],[8,[39,10],null,[[\\\"@type\\\",\\\"@class\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@errors\\\",\\\"@limitErrorToOne\\\"],[\\\"password\\\",\\\"col-xs-12 p-l-none p-r-none\\\",\\\"Re-Enter Password\\\",\\\"Re-Enter Password\\\",\\\"reenter-password\\\",[30,0,[\\\"password\\\",\\\"confirmPassword\\\"]],[28,[37,11],[[28,[37,12],[[30,0,[\\\"password\\\",\\\"confirmPassword\\\"]]],null]],null],[30,0,[\\\"password\\\",\\\"errors\\\",\\\"confirmPassword\\\"]],true]],null],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,3],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success btn-lg btn-wide show-action-icon text-uppercase\\\"],[24,4,\\\"submit\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"save\\\"]]],null],[12],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Updated Icon\\\"],[15,\\\"src\\\",[29,[\\\"/assets/icons/\\\",[28,[37,15],[\\\"action-saved\\\"],null],\\\".svg\\\"]]],[14,0,\\\"btn-icon action-icon\\\"],[12],[13],[1,\\\"\\\\n Password Updated\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,4,[\\\"errors\\\",\\\"messages\\\",\\\"length\\\"]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-danger btn-lg btn-wide show-action-icon text-uppercase\\\"],[24,4,\\\"submit\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"save\\\"]]],null],[12],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Error\\\"],[15,\\\"src\\\",[29,[\\\"/assets/icons/\\\",[28,[37,15],[\\\"action-error\\\"],null],\\\".svg\\\"]]],[14,0,\\\"btn-icon action-icon\\\"],[12],[13],[1,\\\"\\\\n Error\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success btn-lg btn-wide text-uppercase\\\"],[24,4,\\\"submit\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"save\\\"]]],null],[12],[1,\\\"Update Password\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn text-dark btn-link m-l-md font-weight-bold\\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[30,0,[\\\"cancel\\\"]]],null],[12],[1,\\\"Cancel\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[46,[28,[37,17],null,null],null,null,null],[1,\\\"\\\\n\\\"],[18,5,null]],[\\\"@errorMessage\\\",\\\"@oldPasswordError\\\",\\\"@successMessage\\\",\\\"@password\\\",\\\"&default\\\"],[\\\"h2\\\",\\\"if\\\",\\\"alert-form-errors\\\",\\\"div\\\",\\\"did-insert\\\",\\\"form\\\",\\\"on\\\",\\\"p\\\",\\\"strong\\\",\\\"br\\\",\\\"input-component\\\",\\\"fn\\\",\\\"mut\\\",\\\"button\\\",\\\"img\\\",\\\"animated-svg\\\",\\\"component\\\",\\\"-outlet\\\",\\\"yield\\\"]]\",\n \"moduleName\": \"vosaic/components/accounts-change-password-view/index.hbs\",\n \"isStrictMode\": false\n });\n let AccountsChangePasswordViewComponent = _exports.default = (_class = class AccountsChangePasswordViewComponent extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"store\", _descriptor, this);\n _initializerDefineProperty(this, \"password\", _descriptor2, this);\n }\n get hasSuccessMessage() {\n return !!this.args.successMessage;\n }\n get hasErrorMessages() {\n //'errorMessage',\n //'password.errors.messages.length',\n return !!this.args.errorMessage || this.password.errors.messages.length;\n }\n get oldPasswordError() {\n //'errorMessage',\n //'password.errors.oldPassword',\n const message = this.args.errorMessage;\n if (message) {\n return message;\n } else {\n return this.password.errors.oldPassword;\n }\n }\n keyUp() {\n this.args.clearMessages();\n }\n save(event) {\n event.preventDefault();\n if (this.password.validate()) {\n // this.args.saveAction(this.password).then(() => {\n // this.password.oldPassword = '';\n // this.password.newPassword = '';\n // this.password.confirmPassword = '';\n // this.password = this.store.createRecord('password');\n // });\n this.args.saveAction(this.password).then(() => {\n this.password.oldPassword = '';\n this.password.newPassword = '';\n this.password.confirmPassword = '';\n this.password = this.store.createRecord('password');\n }).catch(error => {\n console.error('Error occurred:', error);\n });\n }\n }\n cancel() {\n this.password.oldPassword = '';\n this.password.newPassword = '';\n this.password.confirmPassword = '';\n this.args.cancelAction();\n }\n alertDanger() {\n const currentFocus = document.activeElement;\n if (currentFocus.getAttribute('type') === 'submit' || currentFocus.getAttribute('id') === 'body') {\n const el = document.getElementById('go-to-error');\n if (el) {\n el.focus();\n }\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"password\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return this.store.createRecord('password');\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"save\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"save\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"alertDanger\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"alertDanger\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountsChangePasswordViewComponent);\n});","define(\"vosaic/components/accounts-reset-password-view/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n {{! .svg-logo to the element you want to add the SVG logo.\n .logo-mark-lg makes the bounding box square.\n .logo-lg makes it rectangular to fit the full logo}}\n
\n \n \n

Forgot Password?

\n
\n \n
\n \n {{#if this.hasClicked}}\n \n {{#if this.error}}{{else}}\n \n {{/if}}\n {{#if this.error}}Reset Password{{else}}Please Wait...{{/if}}\n \n {{else}}\n Reset Password\n \n {{/if}}\n \n \n
\n Back\n to Login\n
\n
\n */\n {\n \"id\": \"15TN7oTe\",\n \"block\": \"[[[10,\\\"main\\\"],[14,0,\\\"static-bg-item\\\"],[12],[1,\\\"\\\\n \\\"],[10,3],[14,6,\\\"/\\\"],[14,0,\\\"m-t-lg m-b-md center-block svg-logo logo-mark-lg\\\"],[12],[10,1],[14,0,\\\"sr-only bg-white\\\"],[12],[1,\\\"Vosaic\\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,\\\"form\\\"],[14,\\\"action\\\",\\\"./videos\\\"],[14,\\\"method\\\",\\\"get\\\"],[14,0,\\\"card card-block center-block transparent-bg p-t-md p-b-md\\\"],[14,5,\\\"max-width: 32rem;\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h1\\\"],[14,0,\\\"m-b-md text-xs-center display-5\\\"],[12],[1,\\\"Forgot Password?\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,6],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@errors\\\",\\\"@onFocus\\\",\\\"@setFocus\\\",\\\"@onValueChange\\\"],[\\\"col-xs-12 p-l-none p-r-none\\\",\\\"email\\\",\\\"Enter Email\\\",\\\"Enter Email\\\",\\\"email\\\",[30,1,[\\\"email\\\"]],[28,[37,7],[[28,[37,7],[[30,1,[\\\"errors\\\",\\\"email\\\"]],0],null],\\\"message\\\"],null],[30,0,[\\\"onFocus\\\"]],true,[28,[37,8],[[28,[37,9],[[30,1,[\\\"email\\\"]]],null]],null]]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"hasClicked\\\"]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[16,0,[29,[\\\"btn btn-success btn-lg btn-block\\\\n \\\",[52,[30,0,[\\\"error\\\"]],\\\"\\\",\\\"show-action-icon disabled\\\"]]]],[24,4,\\\"submit\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"reset\\\"]]],null],[12],[1,\\\"\\\\n \\\"],[41,[30,0,[\\\"error\\\"]],[[],[]],[[[1,\\\"\\\\n \\\"],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Loader\\\"],[15,\\\"src\\\",[29,[\\\"/assets/icons/\\\",[28,[37,14],[\\\"logo-loader\\\"],null],\\\".svg\\\"]]],[14,0,\\\"btn-icon action-icon\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[41,[30,0,[\\\"error\\\"]],[[[1,\\\"Reset Password\\\"]],[]],[[[1,\\\"Please Wait...\\\"]],[]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success btn-lg btn-block\\\"],[24,4,\\\"submit\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"reset\\\"]]],null],[12],[1,\\\"Reset Password\\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"center-block m-t-md\\\"],[14,5,\\\"max-width: 32rem;\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,15],[[24,0,\\\"btn btn-inverse-outline btn-lg btn-block\\\"]],[[\\\"@route\\\"],[\\\"login\\\"]],[[\\\"default\\\"],[[[[1,\\\"Back\\\\n to Login\\\"]],[]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@model\\\"],[\\\"main\\\",\\\"a\\\",\\\"span\\\",\\\"form\\\",\\\"h1\\\",\\\"div\\\",\\\"input-component\\\",\\\"get\\\",\\\"fn\\\",\\\"mut\\\",\\\"if\\\",\\\"button\\\",\\\"on\\\",\\\"img\\\",\\\"animated-svg\\\",\\\"link-to\\\"]]\",\n \"moduleName\": \"vosaic/components/accounts-reset-password-view/index.hbs\",\n \"isStrictMode\": false\n });\n let AccountsResetPasswordViewComponent = _exports.default = (_class = class AccountsResetPasswordViewComponent extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"hasClicked\", _descriptor, this);\n }\n get error() {\n if (this.args.model.errors.email && this.args.model.errors.email.length > 0) {\n return this.args.model.errors.email[0].message;\n } else {\n return '';\n }\n }\n onFocus() {\n this.hasClicked = false;\n this.args.clearErrors();\n }\n reset(e) {\n e.preventDefault();\n if (this.args.model.email) {\n this.hasClicked = true;\n }\n this.args.resetPassword();\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"hasClicked\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"onFocus\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onFocus\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"reset\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"reset\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AccountsResetPasswordViewComponent);\n});","define(\"vosaic/components/ai-goals/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n
\n

Set a Goal

\n

After watching the video, answer the questions below to set a goal.\n Learn more about setting goals.

\n
\n
\n Question 1:
\n {{#if this.q1Answer}}✓{{/if}}\n {{this.q1}}
\n
\n {{#each (array 1 2 3 4 5) as |number|}}\n \n {{/each}}\n
\n
\n {{#each (array 6 7 8 9 10) as |number|}}\n \n {{/each}}\n
\n
\n
\n \n Question 2:
\n {{#if this.q2Answer}}✓{{/if}}\n {{this.q2}}\n Do your best to answer\n succinctly and directly.\n [Example]
\n
\n \n
\n
\n
\n Question 3:
\n {{#if this.q3Answer}}✓{{/if}}\n {{this.q3}}\n Do your best to answer\n succinctly and directly.\n [Example]
\n
\n \n
\n
\n
\n Question 4:
\n {{#if this.q4Answer}}✓{{/if}}\n {{this.q4}}\n Do your best to answer\n succinctly and directly.\n [Example]
\n
\n \n
\n
\n
\n Question 5:
\n {{#if this.q5Answer}}✓{{/if}}\n {{this.q5}}
\n
\n \n \n
\n {{#if (equal this.q5Answer 'no')}}\n

Creating goals that are\n student-focused will result in improved learning outcomes for students.\n Take a moment to rewrite your answer to the question above, or leave it\n as is to get a suggestion.

\n {{/if}}\n
\n
\n Question 6:
\n {{#if this.q6Answer}}✓{{/if}}\n {{this.q6}}
\n
\n \n \n
\n {{#if (equal this.q6Answer 'no')}}\n

Having a goal that you care about will\n help you achieve it. Consider rewriting your answer to the question\n above, or leave it as is to get a suggestion.

\n {{/if}}\n
\n
\n {{#if @submittingGoalForm}}\n \n Generating Goal\n {{else}}\n Create New Goal\n {{#if this.isSubmitDisabled}}Please answer\n all questions to submit.{{/if}}\n {{/if}}\n
\n
\n \n \n \n \n */\n {\n \"id\": \"PjmLI0Cd\",\n \"block\": \"[[[11,0],[24,0,\\\"text-white p-x-xxs\\\"],[4,[38,1],[[30,0,[\\\"onInsert\\\"]]],null],[12],[1,\\\"\\\\n \\\"],[10,\\\"h3\\\"],[14,0,\\\"lead m-b-none font-weight-bold text-success-ally\\\"],[12],[1,\\\"Set a Goal\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"After watching the video, answer the questions below to set a goal.\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link text-success-ally p-a-none\\\"],[24,5,\\\"vertical-align: baseline;\\\"],[24,1,\\\"link-more-info\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"onShowMoreInfo\\\"]],\\\"moreinfo\\\"],null]],null],[12],[1,\\\"Learn more about setting goals.\\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,\\\"hr\\\"],[12],[13],[1,\\\"\\\\n \\\"],[10,\\\"fieldset\\\"],[14,0,\\\"m-b-xxs\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"legend\\\"],[14,0,\\\"p m-b-xs\\\"],[12],[10,1],[14,0,\\\"text-uppercase smaller font-weight-bold text-success-ally\\\"],[12],[1,\\\"Question 1:\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n \\\"],[41,[30,0,[\\\"q1Answer\\\"]],[[[1,\\\"✓\\\"]],[]],null],[1,\\\"\\\\n \\\"],[1,[30,0,[\\\"q1\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"radio-group m-b-xs\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,14],[[28,[37,14],[[28,[37,15],[1,2,3,4,5],null]],null]],null],null,[[[1,\\\" \\\"],[8,[39,16],null,[[\\\"@class\\\",\\\"@name\\\",\\\"@value\\\",\\\"@boundProperty\\\",\\\"@type\\\",\\\"@labelText\\\",\\\"@labelClass\\\",\\\"@onChange\\\"],[\\\"c-radio m-r-xs\\\",\\\"radio-q1\\\",[30,1],[30,0,[\\\"q1Answer\\\"]],\\\"radio\\\",[30,1],\\\"text-white font-weight-bold\\\",[28,[37,6],[[30,0,[\\\"onUpdateQ1Answer\\\"]],[30,1]],null]]],null],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"radio-group m-b-md\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,14],[[28,[37,14],[[28,[37,15],[6,7,8,9,10],null]],null]],null],null,[[[1,\\\" \\\"],[8,[39,16],null,[[\\\"@class\\\",\\\"@name\\\",\\\"@value\\\",\\\"@boundProperty\\\",\\\"@type\\\",\\\"@labelText\\\",\\\"@labelClass\\\",\\\"@onChange\\\"],[\\\"c-radio m-r-xs\\\",\\\"radio-q1\\\",[30,2],[30,0,[\\\"q1Answer\\\"]],\\\"radio\\\",[30,2],\\\"text-white font-weight-bold\\\",[28,[37,6],[[30,0,[\\\"onUpdateQ1Answer\\\"]],[30,2]],null]]],null],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"fieldset\\\"],[14,0,\\\"m-b-none\\\"],[12],[1,\\\"\\\\n\\\\n \\\"],[10,\\\"legend\\\"],[14,0,\\\"p m-b-none\\\"],[12],[10,1],[14,0,\\\"text-uppercase smaller font-weight-bold text-success-ally\\\"],[12],[1,\\\" Question 2:\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n \\\"],[41,[30,0,[\\\"q2Answer\\\"]],[[[1,\\\"✓\\\"]],[]],null],[1,\\\"\\\\n \\\"],[1,[30,0,[\\\"q2\\\"]]],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"display-block small text-info\\\"],[12],[1,\\\"Do your best to answer\\\\n succinctly and directly.\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-link text-success-ally p-a-none\\\"],[24,1,\\\"link-q2-example\\\"],[24,5,\\\"vertical-align: baseline;\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"onShowMoreInfo\\\"]],\\\"q2\\\"],null]],null],[12],[1,\\\"[Example]\\\"],[13],[13],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"form-group m-b-md m-t-none\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,17],null,[[\\\"@name\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@formControlClass\\\",\\\"@value\\\",\\\"@rows\\\",\\\"@onChange\\\",\\\"@maxlength\\\",\\\"@showCounter\\\"],[\\\"q2\\\",\\\"Answer\\\",\\\"\\\",\\\"bg-inverse\\\",[30,0,[\\\"q2Answer\\\"]],4,[28,[37,6],[[28,[37,18],[[30,0,[\\\"q2Answer\\\"]]],null]],null],250,true]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"fieldset\\\"],[14,0,\\\"m-b-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"legend\\\"],[14,0,\\\"p m-b-none\\\"],[12],[10,1],[14,0,\\\"text-uppercase smaller font-weight-bold text-success-ally\\\"],[12],[1,\\\"Question 3:\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n \\\"],[41,[30,0,[\\\"q3Answer\\\"]],[[[1,\\\"✓\\\"]],[]],null],[1,\\\"\\\\n \\\"],[1,[30,0,[\\\"q3\\\"]]],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"display-block small text-info\\\"],[12],[1,\\\"Do your best to answer\\\\n succinctly and directly.\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-link text-success-ally p-a-none\\\"],[24,1,\\\"link-q3-example\\\"],[24,5,\\\"vertical-align: baseline;\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"onShowMoreInfo\\\"]],\\\"q3\\\"],null]],null],[12],[1,\\\"[Example]\\\"],[13],[13],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"form-group m-b-md m-t-none\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,17],null,[[\\\"@name\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@formControlClass\\\",\\\"@value\\\",\\\"@rows\\\",\\\"@onChange\\\",\\\"@maxlength\\\",\\\"@showCounter\\\"],[\\\"q3\\\",\\\"Answer\\\",\\\"\\\",\\\"bg-inverse\\\",[30,0,[\\\"q3Answer\\\"]],4,[28,[37,6],[[28,[37,18],[[30,0,[\\\"q3Answer\\\"]]],null]],null],250,true]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"fieldset\\\"],[14,0,\\\"m-b-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"legend\\\"],[14,0,\\\"p m-b-none\\\"],[12],[10,1],[14,0,\\\"text-uppercase smaller font-weight-bold text-success-ally\\\"],[12],[1,\\\"Question 4:\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n \\\"],[41,[30,0,[\\\"q4Answer\\\"]],[[[1,\\\"✓\\\"]],[]],null],[1,\\\"\\\\n \\\"],[1,[30,0,[\\\"q4\\\"]]],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"display-block small text-info\\\"],[12],[1,\\\"Do your best to answer\\\\n succinctly and directly.\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-link text-success-ally p-a-none\\\"],[24,1,\\\"link-q4-example\\\"],[24,5,\\\"vertical-align: baseline;\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[28,[37,6],[[30,0,[\\\"onShowMoreInfo\\\"]],\\\"q4\\\"],null]],null],[12],[1,\\\"[Example]\\\"],[13],[13],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"form-group m-b-md m-t-none\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,17],null,[[\\\"@name\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@formControlClass\\\",\\\"@value\\\",\\\"@rows\\\",\\\"@onChange\\\",\\\"@maxlength\\\",\\\"@showCounter\\\"],[\\\"q4\\\",\\\"I want my students to...\\\",\\\"\\\",\\\"bg-inverse\\\",[30,0,[\\\"q4Answer\\\"]],4,[28,[37,6],[[28,[37,18],[[30,0,[\\\"q4Answer\\\"]]],null]],null],250,true]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"fieldset\\\"],[14,0,\\\"m-b-xs\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"legend\\\"],[14,0,\\\"p m-b-none\\\"],[12],[10,1],[14,0,\\\"text-uppercase smaller font-weight-bold text-success-ally\\\"],[12],[1,\\\"Question 5:\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n \\\"],[41,[30,0,[\\\"q5Answer\\\"]],[[[1,\\\"✓\\\"]],[]],null],[1,\\\"\\\\n \\\"],[1,[30,0,[\\\"q5\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"radio-group m-b-md\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,16],null,[[\\\"@class\\\",\\\"@name\\\",\\\"@value\\\",\\\"@boundProperty\\\",\\\"@type\\\",\\\"@labelText\\\",\\\"@labelClass\\\",\\\"@onChange\\\"],[\\\"c-radio m-r-xs\\\",\\\"radio-q5\\\",\\\"yes\\\",[30,0,[\\\"q5Answer\\\"]],\\\"radio\\\",\\\"Yes\\\",\\\"text-white\\\\n font-weight-bold\\\",[28,[37,6],[[30,0,[\\\"onUpdateQ5Answer\\\"]],\\\"yes\\\"],null]]],null],[1,\\\"\\\\n \\\"],[8,[39,16],null,[[\\\"@class\\\",\\\"@name\\\",\\\"@value\\\",\\\"@boundProperty\\\",\\\"@type\\\",\\\"@labelText\\\",\\\"@labelClass\\\",\\\"@onChange\\\"],[\\\"c-radio m-r-xs\\\",\\\"radio-q5\\\",\\\"no\\\",[30,0,[\\\"q5Answer\\\"]],\\\"radio\\\",\\\"No\\\",\\\"text-white\\\\n font-weight-bold\\\",[28,[37,6],[[30,0,[\\\"onUpdateQ5Answer\\\"]],\\\"no\\\"],null]]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,19],[[30,0,[\\\"q5Answer\\\"]],\\\"no\\\"],null],[[[1,\\\" \\\"],[10,2],[14,0,\\\"alert alert-info p-a-xxs\\\"],[12],[1,\\\"Creating goals that are\\\\n student-focused will result in improved learning outcomes for students.\\\\n Take a moment to rewrite your answer to the question above, or leave it\\\\n as is to get a suggestion.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"fieldset\\\"],[14,0,\\\"m-b-xxs\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"legend\\\"],[14,0,\\\"p m-b-none\\\"],[12],[10,1],[14,0,\\\"text-uppercase smaller font-weight-bold text-success-ally\\\"],[12],[1,\\\"Question 6:\\\"],[13],[10,\\\"br\\\"],[12],[13],[1,\\\"\\\\n \\\"],[41,[30,0,[\\\"q6Answer\\\"]],[[[1,\\\"✓\\\"]],[]],null],[1,\\\"\\\\n \\\"],[1,[30,0,[\\\"q6\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"radio-group m-b-md\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,16],null,[[\\\"@class\\\",\\\"@name\\\",\\\"@value\\\",\\\"@boundProperty\\\",\\\"@type\\\",\\\"@labelText\\\",\\\"@labelClass\\\",\\\"@onChange\\\"],[\\\"c-radio m-r-xs\\\",\\\"radio-q6\\\",\\\"yes\\\",[30,0,[\\\"q6Answer\\\"]],\\\"radio\\\",\\\"Yes\\\",\\\"text-white font-weight-bold\\\",[28,[37,6],[[30,0,[\\\"onUpdateQ6Answer\\\"]],\\\"yes\\\"],null]]],null],[1,\\\"\\\\n \\\"],[8,[39,16],null,[[\\\"@class\\\",\\\"@name\\\",\\\"@value\\\",\\\"@boundProperty\\\",\\\"@type\\\",\\\"@labelText\\\",\\\"@labelClass\\\",\\\"@onChange\\\"],[\\\"c-radio m-r-xs\\\",\\\"radio-q6\\\",\\\"no\\\",[30,0,[\\\"q6Answer\\\"]],\\\"radio\\\",\\\"No\\\",\\\"text-white\\\\n font-weight-bold\\\",[28,[37,6],[[30,0,[\\\"onUpdateQ6Answer\\\"]],\\\"no\\\"],null]]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[41,[28,[37,19],[[30,0,[\\\"q6Answer\\\"]],\\\"no\\\"],null],[[[1,\\\" \\\"],[10,2],[14,0,\\\"alert alert-info p-a-xxs\\\"],[12],[1,\\\"Having a goal that you care about will\\\\n help you achieve it. Consider rewriting your answer to the question\\\\n above, or leave it as is to get a suggestion.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"m-b-lg\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\" \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-success font-weight-bold\\\"],[14,4,\\\"button\\\"],[12],[10,\\\"img\\\"],[15,\\\"src\\\",[29,[\\\"/assets/images/\\\",[28,[37,21],[\\\"logo-loader-white\\\"],null],\\\".svg\\\"]]],[14,\\\"alt\\\",\\\"Loading\\\"],[14,5,\\\"width:20px; height:20px;\\\"],[12],[13],[1,\\\"\\\\n Generating Goal\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success font-weight-bold\\\"],[16,\\\"disabled\\\",[30,0,[\\\"isSubmitDisabled\\\"]]],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"onSubmitSurvey\\\"]]],null],[12],[1,\\\"Create New Goal\\\"],[13],[1,\\\"\\\\n \\\"],[41,[30,0,[\\\"isSubmitDisabled\\\"]],[[[10,1],[14,0,\\\"text-info m-l-xs\\\"],[12],[1,\\\"Please answer\\\\n all questions to submit.\\\"],[13]],[]],null],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[8,[39,22],null,[[\\\"@shouldShow\\\",\\\"@infoTitle\\\",\\\"@infoText\\\",\\\"@modal\\\",\\\"@onCancel\\\",\\\"@myUser\\\",\\\"@focusInitiator\\\"],[[30,0,[\\\"isShowingMoreInfo\\\"]],\\\"Goals Checklist\\\",\\\"

Focus on creating PEERS Goals. They are designed to be more effective than traditional goals by ensuring goals are meaningful, achievable, and aligned with student needs.

    \\\\n
  • Powerful - they will have a socially significant impact on students
  • \\\\n
  • Emotionally Compelling - they matter deeply to teachers and students
  • \\\\n
  • Easy - they involve as few roadblocks as possible
  • \\\\n
  • Reachable - a strategy and a measurable outcome have been identified
  • \\\\n
  • Student-focused - they have an impact on student engagement or achievement, or both
  • \\\\n

For more information, visit Instructional Coaching Group - PEERS Goals

\\\",\\\"moreinfo\\\",[30,0,[\\\"cancelMoreInfo\\\"]],[30,4],\\\"link-more-info\\\"]],null],[1,\\\"\\\\n\\\"],[8,[39,22],null,[[\\\"@shouldShow\\\",\\\"@modal\\\",\\\"@infoTitle\\\",\\\"@infoText\\\",\\\"@onCancel\\\",\\\"@myUser\\\",\\\"@focusInitiator\\\"],[[30,0,[\\\"isShowingQ2Example\\\"]],\\\"q2\\\",[30,0,[\\\"q2\\\"]],\\\"

Examples of succinct and direct answers:

\\\\\\\"Students were mostly engaged and asked good questions, but some lost focus during transitions.\\\\\\\"

\\\\n

\\\\\\\"Engagement was high, but some focus was lost during transitions.\\\\\\\"

\\\",[30,0,[\\\"cancelMoreInfo\\\"]],[30,4],\\\"link-q2-example\\\"]],null],[1,\\\"\\\\n\\\"],[8,[39,22],null,[[\\\"@shouldShow\\\",\\\"@modal\\\",\\\"@infoTitle\\\",\\\"@infoText\\\",\\\"@onCancel\\\",\\\"@myUser\\\",\\\"@focusInitiator\\\"],[[30,0,[\\\"isShowingQ3Example\\\"]],\\\"q3\\\",[30,0,[\\\"q3\\\"]],\\\"

Examples of succinct and direct answers:

\\\\\\\"Tighten those transitions and keep everyone actively involved with quick, purposeful tasks.\\\\\\\"

\\\\n

\\\\\\\"Tighten transitions with quick tasks to keep all students actively involved.\\\\\\\"

\\\",[30,0,[\\\"cancelMoreInfo\\\"]],[30,4],\\\"link-q3-example\\\"]],null],[1,\\\"\\\\n\\\"],[8,[39,22],null,[[\\\"@shouldShow\\\",\\\"@modal\\\",\\\"@infoTitle\\\",\\\"@infoText\\\",\\\"@onCancel\\\",\\\"@myUser\\\",\\\"@focusInitiator\\\"],[[30,0,[\\\"isShowingQ4Example\\\"]],\\\"q4\\\",[30,0,[\\\"q4\\\"]],\\\"

Examples of succinct and direct answers:

\\\\\\\"By the end of the month, each student will contribute at least 2 follow-up questions during group discussions in 3 out of 4 reading sessions.\\\\\\\"

\\\\n

\\\\\\\"Aim for 100% participation: each student asks at least one follow-up question during discussions.\\\\\\\"

\\\",[30,0,[\\\"cancelMoreInfo\\\"]],[30,4],\\\"link-q4-example\\\"]],null]],[\\\"number\\\",\\\"number\\\",\\\"@submittingGoalForm\\\",\\\"@myUser\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"h3\\\",\\\"p\\\",\\\"button\\\",\\\"on\\\",\\\"fn\\\",\\\"hr\\\",\\\"fieldset\\\",\\\"legend\\\",\\\"span\\\",\\\"br\\\",\\\"if\\\",\\\"each\\\",\\\"-track-array\\\",\\\"array\\\",\\\"input-check-radio\\\",\\\"textarea-component\\\",\\\"mut\\\",\\\"equal\\\",\\\"img\\\",\\\"animated-svg\\\",\\\"modal-more-info\\\"]]\",\n \"moduleName\": \"vosaic/components/ai-goals/index.hbs\",\n \"isStrictMode\": false\n });\n let AiGoals = _exports.default = (_class = class AiGoals extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"q1Answer\", _descriptor, this);\n _initializerDefineProperty(this, \"q2Answer\", _descriptor2, this);\n _initializerDefineProperty(this, \"q3Answer\", _descriptor3, this);\n _initializerDefineProperty(this, \"q4Answer\", _descriptor4, this);\n _initializerDefineProperty(this, \"q5Answer\", _descriptor5, this);\n _initializerDefineProperty(this, \"q6Answer\", _descriptor6, this);\n _initializerDefineProperty(this, \"isShowingMoreInfo\", _descriptor7, this);\n _initializerDefineProperty(this, \"isShowingQ2Example\", _descriptor8, this);\n _initializerDefineProperty(this, \"isShowingQ3Example\", _descriptor9, this);\n _initializerDefineProperty(this, \"isShowingQ4Example\", _descriptor0, this);\n }\n get q1() {\n return 'On a scale of 1 - 10 how close was that class to your ideal class?';\n }\n get q2() {\n return 'Why did you pick that number?';\n }\n get q3() {\n return 'What would have to change to move it closer to a 10?';\n }\n get q4() {\n return 'What would you like your students to do that they are not doing now?';\n }\n get q5() {\n return 'Do you want that to be your goal?';\n }\n get q6() {\n return 'If that was your goal, would you really care about the goal?';\n }\n get isSubmitDisabled() {\n return this.q1Answer === null || this.q2Answer === '' || this.q3Answer === '' || this.q4Answer === '' || this.q5Answer === null || this.q6Answer === null;\n }\n get promptIntro() {\n return `Review the answers provided by the teacher, and suggest moments that agree and disagree with their answers. Start with a summary of the video under a heading \"Video Summary:\". Suggested moments should be in an unordered list under a heading \"Moments to Review:\". `;\n }\n get q5Prompt() {\n if (this.q5Answer === 'yes') {\n return `Reiterate the answer to question 4, and follow it up with a suggestion of that goal but rewriten to define a clear metric to track progress as outlined here https://www.instructionalcoaching.com/peers-goals/ and wrap it in a div with id='suggested-goals'`;\n } else {\n return `Suggest a goal that's based on the answer to question 4 and make sure the goal defines a clear metric to track progress as outlined here https://www.instructionalcoaching.com/peers-goals/ and wrap it in a div with id='suggested-goals'.`;\n }\n }\n get createPrompt() {\n return `${this.promptIntro}. Under the heading \"Goal:\", ${this.q5Prompt}. Under \"Something to Try:\" include a bulleted list of researh-based techniques that can be used to achive the goal. Under \"Research\" cite research papers you used to suggest techniques above. Do not reiterate any part of this prompt in your responses. Question 3: ${this.q3} Answer: ${this.q3Answer}. Question 4: ${this.q4} Answer: ${this.q4Answer}.`;\n }\n onInsert() {\n // populate response based on active goal goalForm\n this.args.activeGoal?.goalForm.forEach(goalFormItem => {\n switch (goalFormItem.question) {\n case this.q1:\n this.q1Answer = parseInt(goalFormItem.answer) || null;\n break;\n case this.q2:\n this.q2Answer = goalFormItem.answer;\n break;\n case this.q3:\n this.q3Answer = goalFormItem.answer;\n break;\n case this.q4:\n this.q4Answer = goalFormItem.answer;\n break;\n case this.q5:\n this.q5Answer = goalFormItem.answer;\n break;\n case this.q6:\n this.q6Answer = goalFormItem.answer;\n break;\n }\n });\n }\n onUpdateQ1Answer(number) {\n this.q1Answer = number;\n }\n onUpdateQ5Answer(number) {\n this.q5Answer = number;\n }\n onUpdateQ6Answer(number) {\n this.q6Answer = number;\n }\n onShowMoreInfo(modal) {\n if (modal === 'moreinfo') {\n this.isShowingMoreInfo = true;\n } else if (modal === 'q2') {\n this.isShowingQ2Example = true;\n } else if (modal === 'q3') {\n this.isShowingQ3Example = true;\n } else if (modal === 'q4') {\n this.isShowingQ4Example = true;\n }\n }\n cancelMoreInfo(modal) {\n if (modal === 'moreinfo') {\n this.isShowingMoreInfo = false;\n } else if (modal === 'q2') {\n this.isShowingQ2Example = false;\n } else if (modal === 'q3') {\n this.isShowingQ3Example = false;\n } else if (modal === 'q4') {\n this.isShowingQ4Example = false;\n }\n }\n onSubmitSurvey() {\n let goalForm = [{\n questionNumber: 1,\n question: this.q1,\n answer: this.q1Answer\n }, {\n questionNumber: 2,\n question: this.q2,\n answer: this.q2Answer\n }, {\n questionNumber: 3,\n question: this.q3,\n answer: this.q3Answer\n }, {\n questionNumber: 4,\n question: this.q4,\n answer: this.q4Answer\n }, {\n questionNumber: 5,\n question: this.q5,\n answer: this.q5Answer\n }, {\n questionNumber: 6,\n question: this.q6,\n answer: this.q6Answer\n }];\n this.args.onSubmitGoalResponses(goalForm);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"q1Answer\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"q2Answer\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return '';\n }\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"q3Answer\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return '';\n }\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"q4Answer\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return '';\n }\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"q5Answer\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"q6Answer\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"isShowingMoreInfo\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"isShowingQ2Example\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"isShowingQ3Example\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"isShowingQ4Example\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"onInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateQ1Answer\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateQ1Answer\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateQ5Answer\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateQ5Answer\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onUpdateQ6Answer\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUpdateQ6Answer\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onShowMoreInfo\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onShowMoreInfo\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancelMoreInfo\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancelMoreInfo\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSubmitSurvey\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSubmitSurvey\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AiGoals);\n});","define(\"vosaic/components/ai-mate-summary/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/template\", \"@ember/object\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _template, _object, _service, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/template\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n {{#if @isEnabled}}\n
\n
\n \n {{#if @isLoadingFeedbackSummary}}\n \n \n Loading Results\n \n {{else}}\n {{#if @feedbackSummary}} {{else}}\n Generate Summary\n {{/if}}\n {{/if}}\n \n \n {{#if @feedbackSummary}}\n \n \n {{/if}}\n \n \n {{else}}\n
AI Summary is not enabled for this video.
\n {{/if}}\n */\n {\n \"id\": \"1Ygy/QHd\",\n \"block\": \"[[[41,[30,1],[[[1,\\\" \\\"],[10,0],[14,0,\\\"card card-overflow-visible border-left-success p-x-sm p-t-md text-white\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h3\\\"],[14,0,\\\"h5 dropdown m-b-md\\\"],[14,1,\\\"ai-mate-summary\\\"],[12],[1,\\\"\\\\n AI Mate Summary\\\\n \\\"],[8,[39,3],null,[[\\\"@class\\\",\\\"@labelText\\\",\\\"@menuOpenAction\\\",\\\"@style\\\",\\\"@menuName\\\",\\\"@aria-label\\\",\\\"@aria-expanded\\\",\\\"@aria-controls\\\",\\\"@focusOnOpen\\\",\\\"@focusTargetId\\\",\\\"@closeOnEscape\\\",\\\"@returnFocusOnClose\\\",\\\"@id\\\"],[\\\"border-none label label-pill label-info smaller\\\",\\\"?\\\",[30,2],\\\"padding: 2px 6px\\\",\\\"summary\\\",[52,[30,3],\\\"Hide AI Mate Summary help\\\",\\\"Show AI Mate Summary help\\\"],[52,[30,3],\\\"true\\\",\\\"false\\\"],\\\"summary-info-popover\\\",true,\\\"summary-info-popover\\\",true,true,\\\"summary-info\\\"]],null],[1,\\\"\\\\n \\\"],[10,0],[14,1,\\\"summary-info-popover\\\"],[14,0,\\\"popover popover-bottom popover-left\\\"],[14,\\\"role\\\",\\\"region\\\"],[14,\\\"tabindex\\\",\\\"-1\\\"],[14,\\\"aria-labelledby\\\",\\\"summary-info-popover-title\\\"],[14,\\\"aria-describedby\\\",\\\"summary-info-popover-content\\\"],[15,\\\"hidden\\\",[52,[30,3],false,true]],[14,5,\\\"width: 260px;top: 30px;right: auto;left: 90px; overflow: hidden;\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"popover-title text-dark\\\"],[14,1,\\\"summary-info-popover-title\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"AI Mate Summary\\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"popover-content text-dark\\\"],[14,1,\\\"summary-info-popover-content\\\"],[12],[1,\\\"A short feedback\\\\n generated by AI Mate using any tagged moments, comments,\\\\n transcript and other relevant video analysis.\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,4],[[[1,\\\" \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-sm btn-success m-b-lg pull-xs-right\\\"],[14,\\\"disabled\\\",\\\"\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Loader\\\"],[15,\\\"src\\\",[29,[\\\"/assets/icons/\\\",[28,[37,7],[\\\"logo-loader\\\"],null],\\\".svg\\\"]]],[14,0,\\\"btn-icon action-icon\\\"],[12],[13],[1,\\\"\\\\n Loading Results\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[41,[30,5],[[[1,\\\" \\\"]],[]],[[[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,1,\\\"feedback-summary-btn\\\"],[24,0,\\\"btn btn-sm btn-success m-b-lg pull-xs-right\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,6]],null],[12],[1,\\\"Generate Summary\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,5],[[[1,\\\" \\\"],[10,0],[14,0,\\\"feedback-summary list-group list-group-flush\\\"],[12],[1,\\\"\\\\n \\\"],[11,0],[24,0,\\\"p-t-xs p-b-xs p-l-none m-b-xs\\\"],[4,[38,9],[[30,0,[\\\"bindFeedbackSummaryClickHandler\\\"]]],null],[12],[1,[30,0,[\\\"feedbackSummaryHtml\\\"]]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"alert alert-info\\\"],[12],[1,\\\"AI Summary is not enabled for this video.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[\\\"@isEnabled\\\",\\\"@onMenuOpenAction\\\",\\\"@isHelpMenuOpen\\\",\\\"@isLoadingFeedbackSummary\\\",\\\"@feedbackSummary\\\",\\\"@onGenerateFeedbackSummary\\\"],[\\\"if\\\",\\\"div\\\",\\\"h3\\\",\\\"input-button-dropdown\\\",\\\"strong\\\",\\\"button\\\",\\\"img\\\",\\\"animated-svg\\\",\\\"on\\\",\\\"did-insert\\\"]]\",\n \"moduleName\": \"vosaic/components/ai-mate-summary/index.hbs\",\n \"isStrictMode\": false\n });\n const TEXT_NODE = 3;\n const ELEMENT_NODE = 1;\n const SUMMARY_TIMESTAMP_PATTERN = /\\b(?:\\d{1,2}:)?\\d{1,2}:\\d{2}\\b/g;\n let AiMateSummaryComponent = _exports.default = (_class = class AiMateSummaryComponent extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"router\", _descriptor, this);\n _initializerDefineProperty(this, \"playstateManager\", _descriptor2, this);\n _defineProperty(this, \"feedbackSummaryElement\", null);\n _defineProperty(this, \"feedbackSummaryClickHandler\", event => this.onFeedbackSummaryClick(event));\n }\n willDestroy() {\n super.willDestroy(...arguments);\n if (this.feedbackSummaryElement) {\n this.feedbackSummaryElement.removeEventListener('click', this.feedbackSummaryClickHandler);\n this.feedbackSummaryElement = null;\n }\n }\n get feedbackSummaryHtml() {\n return this.buildFeedbackSummaryHtml(this.args.feedbackSummary || '');\n }\n buildFeedbackSummaryHtml(summary) {\n if (!summary) {\n return (0, _template.htmlSafe)('');\n }\n if (typeof document === 'undefined') {\n return (0, _template.htmlSafe)(summary);\n }\n const summaryContainer = document.createElement('div');\n summaryContainer.innerHTML = summary;\n this.linkifySummaryTimestamps(summaryContainer);\n return (0, _template.htmlSafe)(summaryContainer.innerHTML);\n }\n linkifySummaryTimestamps(element) {\n [...element.childNodes].forEach(node => {\n if (node.nodeType === TEXT_NODE) {\n this.linkifySummaryTextNode(node);\n return;\n }\n if (node.nodeType !== ELEMENT_NODE) {\n return;\n }\n const tagName = `${node.tagName || ''}`.toLowerCase();\n if (tagName === 'a' || tagName === 'script' || tagName === 'style') {\n return;\n }\n this.linkifySummaryTimestamps(node);\n });\n }\n linkifySummaryTextNode(textNode) {\n const text = textNode.nodeValue || '';\n if (!text.includes(':')) {\n return;\n }\n SUMMARY_TIMESTAMP_PATTERN.lastIndex = 0;\n let match = SUMMARY_TIMESTAMP_PATTERN.exec(text);\n if (!match) {\n return;\n }\n const fragment = document.createDocumentFragment();\n let currentIndex = 0;\n while (match) {\n const timestampText = match[0];\n const matchIndex = match.index;\n const timestampInSeconds = this.parseSummaryTimestamp(timestampText);\n if (matchIndex > currentIndex) {\n fragment.appendChild(document.createTextNode(text.slice(currentIndex, matchIndex)));\n }\n if (timestampInSeconds === null) {\n fragment.appendChild(document.createTextNode(timestampText));\n } else {\n const timestampLink = document.createElement('a');\n timestampLink.href = '#';\n timestampLink.className = 'feedback-summary-timestamp font-weight-bold text-success-ally';\n timestampLink.dataset.startTime = String(timestampInSeconds);\n timestampLink.setAttribute('aria-label', `Open watch view at ${timestampText}`);\n timestampLink.textContent = timestampText;\n fragment.appendChild(timestampLink);\n }\n currentIndex = matchIndex + timestampText.length;\n match = SUMMARY_TIMESTAMP_PATTERN.exec(text);\n }\n if (currentIndex < text.length) {\n fragment.appendChild(document.createTextNode(text.slice(currentIndex)));\n }\n textNode.parentNode.replaceChild(fragment, textNode);\n }\n parseSummaryTimestamp(timestampText) {\n const parts = timestampText.split(':').map(part => Number(part));\n if (parts.some(part => !Number.isInteger(part) || part < 0)) {\n return null;\n }\n if (parts.length === 2) {\n const [minutes, seconds] = parts;\n if (seconds > 59) {\n return null;\n }\n return minutes * 60 + seconds;\n }\n if (parts.length === 3) {\n const [hours, minutes, seconds] = parts;\n if (minutes > 59 || seconds > 59) {\n return null;\n }\n return hours * 3600 + minutes * 60 + seconds;\n }\n return null;\n }\n bindFeedbackSummaryClickHandler(element) {\n if (this.feedbackSummaryElement === element) {\n return;\n }\n if (this.feedbackSummaryElement) {\n this.feedbackSummaryElement.removeEventListener('click', this.feedbackSummaryClickHandler);\n }\n this.feedbackSummaryElement = element;\n this.feedbackSummaryElement.addEventListener('click', this.feedbackSummaryClickHandler);\n }\n onFeedbackSummaryClick(event) {\n const timestampLink = event?.target?.closest?.('a.feedback-summary-timestamp');\n if (!timestampLink) {\n return;\n }\n if (event?.preventDefault) {\n event.preventDefault();\n }\n const videoId = this.args.video?.id;\n if (!videoId) {\n return;\n }\n const startTime = Number(timestampLink.dataset.startTime);\n const overrideCurrentTime = Number.isFinite(startTime) ? Math.max(startTime, 0) : 0;\n this.router.transitionTo('watch.withtranscript', videoId).then(() => {\n this.playstateManager.registerEvent(this.playstateManager.EVENTS.OVERRIDE_SCRUB, {\n overrideCurrentTime\n });\n });\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"playstateManager\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _applyDecoratedDescriptor(_class.prototype, \"bindFeedbackSummaryClickHandler\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"bindFeedbackSummaryClickHandler\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onFeedbackSummaryClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onFeedbackSummaryClick\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AiMateSummaryComponent);\n});","define(\"vosaic/components/ai-report-grid/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/template\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _template, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/template\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n
\n
\n
\n \n \n \n \n \n {{#if @isGoalReport}}{{else}}\n \n \n \n {{/if}}\n \n \n \n \n {{#each this.sortedReportRecords as |record|}}\n \n \n \n {{#if @isGoalReport}}{{else}}\n \n {{record.promptType}}\n \n {{/if}}\n \n \n {{/each}}\n \n
{{#if @isGoalReport}}Follow Up Video{{else}}Video Name{{/if}}\n \n \n \n Sort by Video\n \n {{#if @isGoalReport}}Reviewed On{{else}}Created On{{/if}}\n \n \n \n Sort by Date\n User \n \n \n Sort by User\n Prompt Type \n \n \n Sort by Prompt Type\n Prompt \n \n \n Sort by Prompt\n Response
{{record.videoTitle}}{{moment-format record.createdAt 'MM/DD/YYYY h:mm a'}}{{record.createdByUser}}{{record.prompt}}\n View\n
\n
\n
\n
\n \n \n */\n {\n \"id\": \"vD7wuNSz\",\n \"block\": \"[[[10,0],[14,0,\\\"row m-x-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"table-responsive\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-sm small\\\"],[14,1,\\\"report-table\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[15,\\\"width\\\",[29,[[52,[30,1],\\\"50%\\\",\\\"20%\\\"]]]],[12],[41,[30,1],[[[1,\\\"Follow Up Video\\\"]],[]],[[[1,\\\"Video Name\\\"]],[]]],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-link\\\"],[24,5,\\\"padding: 0 3px; line-height: 1.3; margin-bottom:3px\\\"],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"sortBy\\\"]],\\\"videoTitle\\\"],null]],null],[12],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[14,5,\\\"width:.7em; height:.7em\\\"],[14,0,\\\"icon icon-xs icon icon-sm p-a-none m-a-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#resize-height\\\",\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[14,5,\\\"fill:#000000\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"sr-only\\\"],[12],[1,\\\"Sort by Video\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[15,\\\"width\\\",[29,[[52,[30,1],\\\"30%\\\",\\\"12%\\\"]]]],[12],[41,[30,1],[[[1,\\\"Reviewed On\\\"]],[]],[[[1,\\\"Created On\\\"]],[]]],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-link\\\"],[24,5,\\\"padding: 0 3px; line-height: 1.3; margin-bottom:3px\\\"],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"sortBy\\\"]],\\\"createdAt\\\"],null]],null],[12],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[14,5,\\\"width:.7em; height:.7em\\\"],[14,0,\\\"icon icon-xs icon icon-sm p-a-none m-a-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#resize-height\\\",\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[14,5,\\\"fill:#000000\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"sr-only\\\"],[12],[1,\\\"Sort by Date\\\"],[13],[1,\\\"\\\\n \\\"],[13],[13],[1,\\\"\\\\n \\\"],[41,[30,1],[[],[]],[[[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"12%\\\"],[12],[1,\\\"User \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-link\\\"],[24,5,\\\"padding: 0 3px; line-height: 1.3; margin-bottom:3px\\\"],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"sortBy\\\"]],\\\"createdByUser\\\"],null]],null],[12],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[14,5,\\\"width:.7em; height:.7em\\\"],[14,0,\\\"icon icon-xs icon icon-sm p-a-none m-a-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#resize-height\\\",\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[14,5,\\\"fill:#000000\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"sr-only\\\"],[12],[1,\\\"Sort by User\\\"],[13],[1,\\\"\\\\n \\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[14,\\\"width\\\",\\\"12%\\\"],[12],[1,\\\"Prompt Type \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-link\\\"],[24,5,\\\"padding: 0 3px; line-height: 1.3; margin-bottom:3px\\\"],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"sortBy\\\"]],\\\"promptType\\\"],null]],null],[12],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[14,5,\\\"width:.7em; height:.7em\\\"],[14,0,\\\"icon icon-xs icon icon-sm p-a-none m-a-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#resize-height\\\",\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[14,5,\\\"fill:#000000\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"sr-only\\\"],[12],[1,\\\"Sort by Prompt Type\\\"],[13],[1,\\\"\\\\n \\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[12],[1,\\\"Prompt \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-xs btn-link\\\"],[24,5,\\\"padding: 0 3px; line-height: 1.3; margin-bottom:3px\\\"],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"sortBy\\\"]],\\\"prompt\\\"],null]],null],[12],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[14,5,\\\"width:.7em; height:.7em\\\"],[14,0,\\\"icon icon-xs icon icon-sm p-a-none m-a-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#resize-height\\\",\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[14,5,\\\"fill:#000000\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"sr-only\\\"],[12],[1,\\\"Sort by Prompt\\\"],[13],[1,\\\"\\\\n \\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[10,\\\"th\\\"],[14,0,\\\"text-xs-center\\\"],[12],[1,\\\"Response\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,14],[[28,[37,14],[[30,0,[\\\"sortedReportRecords\\\"]]],null]],null],null,[[[1,\\\" \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[8,[39,16],null,[[\\\"@route\\\",\\\"@model\\\"],[\\\"watch\\\",[30,2,[\\\"video\\\"]]]],[[\\\"default\\\"],[[[[1,[30,2,[\\\"videoTitle\\\"]]]],[]]]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,[28,[35,17],[[30,2,[\\\"createdAt\\\"]],\\\"MM/DD/YYYY h:mm a\\\"],null]],[13],[1,\\\"\\\\n \\\"],[41,[30,1],[[],[]],[[[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,[30,2,[\\\"createdByUser\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[14,5,\\\"text-transform: capitalize;\\\"],[12],[1,[30,2,[\\\"promptType\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[12],[1,[30,2,[\\\"prompt\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[10,\\\"td\\\"],[14,0,\\\"text-xs-center\\\"],[14,5,\\\"padding: 3px 0;\\\"],[12],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,1,\\\"viewQueryResponse\\\"],[24,0,\\\"btn btn-xs btn-primary\\\"],[24,5,\\\"background-color: transparent;margin: 0 auto;\\\"],[24,\\\"aria-controls\\\",\\\"goal-review-modal\\\"],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"openResponseMenu\\\"]],[30,2,[\\\"id\\\"]]],null]],null],[12],[1,\\\"View\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[8,[39,18],null,[[\\\"@shouldShow\\\",\\\"@video\\\",\\\"@transcript\\\",\\\"@responseText\\\",\\\"@onCancel\\\",\\\"@isGoalReport\\\"],[[30,0,[\\\"showGoalReviewModal\\\"]],[30,0,[\\\"selectedVideo\\\"]],[30,0,[\\\"selectedTranscript\\\"]],[30,0,[\\\"responseText\\\"]],[30,0,[\\\"closeGoalReview\\\"]],[30,1]]],null]],[\\\"@isGoalReport\\\",\\\"record\\\"],[\\\"div\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"if\\\",\\\"button\\\",\\\"on\\\",\\\"fn\\\",\\\"svg\\\",\\\"use\\\",\\\"span\\\",\\\"tbody\\\",\\\"each\\\",\\\"-track-array\\\",\\\"td\\\",\\\"link-to\\\",\\\"moment-format\\\",\\\"modal-goal-review\\\"]]\",\n \"moduleName\": \"vosaic/components/ai-report-grid/index.hbs\",\n \"isStrictMode\": false\n });\n let VideoDashboardReportGrid = _exports.default = (_class = class VideoDashboardReportGrid extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"manageDropdowns\", _descriptor, this);\n _initializerDefineProperty(this, \"authorizer\", _descriptor2, this);\n _initializerDefineProperty(this, \"store\", _descriptor3, this);\n _initializerDefineProperty(this, \"sortProperties\", _descriptor4, this);\n _initializerDefineProperty(this, \"sortAscending\", _descriptor5, this);\n _initializerDefineProperty(this, \"responseText\", _descriptor6, this);\n _initializerDefineProperty(this, \"popoverStyle\", _descriptor7, this);\n // htmlSafe style string for the popover position\n _initializerDefineProperty(this, \"showGoalReviewModal\", _descriptor8, this);\n _initializerDefineProperty(this, \"selectedVideo\", _descriptor9, this);\n _initializerDefineProperty(this, \"selectedTranscript\", _descriptor0, this);\n }\n get reportRecords() {\n this.args.reportData.forEach(query => {\n if (!this.args.isGoalReport) {\n query.createdByUser = this.args.userProfiles.find(el => el.id === query.user)?.displayName;\n }\n query.videoTitle = this.args.videos.find(el => el.id === query.video)?.title;\n });\n return this.args.reportData.filter(record => record.prompt);\n }\n get sortedReportRecords() {\n const sortedRows = this.reportRecords.sort((a, b) => {\n const prop = this.sortProperties[0];\n if (a[prop] < b[prop]) {\n return this.sortAscending ? -1 : 1;\n } else if (a[prop] > b[prop]) {\n return this.sortAscending ? 1 : -1;\n }\n return 0;\n });\n return sortedRows;\n }\n sortBy(property) {\n this.sortAscending = !this.sortAscending;\n this.sortProperties = [property];\n }\n async openResponseMenu(menuName, isOpenFromBtn, anchorRect) {\n // Derive open state: respect explicit toggle from button if provided\n const isOpen = isOpenFromBtn !== undefined ? isOpenFromBtn : !this.manageDropdowns[menuName];\n this.responseText = '';\n // Compute popover coordinates if opening and we have an anchor rect\n if (isOpen && anchorRect) {\n // Position below the button; align popover's right edge to the button's right edge so it extends left.\n const top = Math.round(window.innerHeight - anchorRect.bottom);\n const right = Math.round(window.innerWidth - anchorRect.left);\n this.popoverStyle = (0, _template.htmlSafe)(`position:absolute; top: -${top}px; right: ${right}px; left: auto; width: auto; max-width: 600px; height: 460px; overflow-y: scroll; z-index: 1000;`);\n } else if (!isOpen) {\n this.popoverStyle = undefined;\n }\n if (isOpen) {\n await fetch(`${this.authorizer.getBaseUrl()}/aicoachreport/response/${menuName}`, {\n credentials: 'include',\n headers: this.authorizer.getAuthHeaders(),\n method: 'GET'\n }).then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.json();\n }).then(data => {\n // Server returns HTML; mark as safe for template rendering.\n this.responseText = (0, _template.htmlSafe)(data);\n // Find the matching video object for this record id\n const record = this.reportRecords.find(r => r.id === menuName);\n if (record) {\n const video = this.args.videos.find(el => el.id === record.video);\n this.selectedVideo = video;\n this.selectedTranscript = undefined;\n }\n // Open modal instead of popover\n this.showGoalReviewModal = true;\n })\n // After opening, fetch transcript for captions, mirroring watch route behavior\n .finally(async () => {\n try {\n if (this.selectedVideo) {\n const transcript = await this.store.findRecord('transcript', this.selectedVideo.id);\n this.selectedTranscript = transcript;\n }\n } catch (_e) {\n if (this.selectedVideo) {\n this.selectedTranscript = this.store.createRecord('transcript', {\n id: this.selectedVideo.id\n });\n }\n }\n });\n }\n this.manageDropdowns.toggleOpen(menuName, isOpen);\n }\n closeGoalReview() {\n this.showGoalReviewModal = false;\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"manageDropdowns\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"authorizer\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"sortProperties\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return ['createdAt'];\n }\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"sortAscending\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"responseText\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return '';\n }\n }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"popoverStyle\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"showGoalReviewModal\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"selectedVideo\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"selectedTranscript\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"sortBy\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"sortBy\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openResponseMenu\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openResponseMenu\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeGoalReview\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeGoalReview\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, VideoDashboardReportGrid);\n});","define(\"vosaic/components/alert-form-errors/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n \n {{#if @errors.length}}\n {{@errors.length}}\n error(s) have occurred\n {{else}}\n An error has occurred\n {{/if}}\n \n {{#if @errors.length}}\n
    \n {{#each @errors as |error|}}\n {{#if error.message}}\n
  • {{error.message}}
  • \n {{else}}\n
  • {{error}}
  • \n {{/if}}\n {{/each}}\n
\n \n Go To The First Error\n \n {{/if}}\n \n */\n {\n \"id\": \"LwV1D3Kl\",\n \"block\": \"[[[11,0],[24,\\\"role\\\",\\\"alert\\\"],[24,0,\\\"alert alert-danger m-b-sm small\\\"],[4,[38,1],[[30,0,[\\\"alertDanger\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"length\\\"]],[[[1,\\\" \\\"],[1,[30,1,[\\\"length\\\"]]],[1,\\\"\\\\n error(s) have occurred\\\\n\\\"]],[]],[[[1,\\\" An error has occurred\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"length\\\"]],[[[1,\\\" \\\"],[10,\\\"ul\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,5],[[28,[37,5],[[30,1]],null]],null],null,[[[41,[30,2,[\\\"message\\\"]],[[[1,\\\" \\\"],[10,\\\"li\\\"],[12],[1,[30,2,[\\\"message\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,\\\"li\\\"],[12],[1,[30,2]],[13],[1,\\\"\\\\n\\\"]],[]]]],[2]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"text-danger font-weight-bold btn-link p-x-none\\\"],[24,1,\\\"go-to-error\\\"],[24,4,\\\"button\\\"],[4,[38,8],[\\\"click\\\",[30,0,[\\\"goToFirstError\\\"]]],null],[12],[1,\\\"\\\\n Go To The First Error\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13]],[\\\"@errors\\\",\\\"error\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"if\\\",\\\"ul\\\",\\\"each\\\",\\\"-track-array\\\",\\\"li\\\",\\\"button\\\",\\\"on\\\"]]\",\n \"moduleName\": \"vosaic/components/alert-form-errors/index.hbs\",\n \"isStrictMode\": false\n });\n let AlertFormErrors = _exports.default = (_class = class AlertFormErrors extends _component2.default {\n alertDanger() {\n const currentFocus = document.activeElement;\n if (currentFocus.getAttribute('type') === 'submit' || currentFocus.getAttribute('id') === 'body') {\n const el = document.getElementById('go-to-error');\n if (el) {\n el.focus();\n }\n }\n }\n goToFirstError() {\n const el = document.querySelector('.has-danger').querySelector('input, select');\n if (el) {\n el.focus();\n }\n }\n }, _applyDecoratedDescriptor(_class.prototype, \"alertDanger\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"alertDanger\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"goToFirstError\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"goToFirstError\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, AlertFormErrors);\n});","define(\"vosaic/components/basic-dropdown-content\", [\"exports\", \"ember-basic-dropdown/components/basic-dropdown-content\"], function (_exports, _basicDropdownContent) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.defineProperty(_exports, \"default\", {\n enumerable: true,\n get: function () {\n return _basicDropdownContent.default;\n }\n });\n 0; //eaimeta@70e063a35619d71f0,\"ember-basic-dropdown/components/basic-dropdown-content\"eaimeta@70e063a35619d71f\n});","define(\"vosaic/components/basic-dropdown-trigger\", [\"exports\", \"ember-basic-dropdown/components/basic-dropdown-trigger\"], function (_exports, _basicDropdownTrigger) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.defineProperty(_exports, \"default\", {\n enumerable: true,\n get: function () {\n return _basicDropdownTrigger.default;\n }\n });\n 0; //eaimeta@70e063a35619d71f0,\"ember-basic-dropdown/components/basic-dropdown-trigger\"eaimeta@70e063a35619d71f\n});","define(\"vosaic/components/basic-dropdown-wormhole\", [\"exports\", \"ember-basic-dropdown/components/basic-dropdown-wormhole\"], function (_exports, _basicDropdownWormhole) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.defineProperty(_exports, \"default\", {\n enumerable: true,\n get: function () {\n return _basicDropdownWormhole.default;\n }\n });\n 0; //eaimeta@70e063a35619d71f0,\"ember-basic-dropdown/components/basic-dropdown-wormhole\"eaimeta@70e063a35619d71f\n});","define(\"vosaic/components/basic-dropdown\", [\"exports\", \"ember-basic-dropdown/components/basic-dropdown\"], function (_exports, _basicDropdown) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.defineProperty(_exports, \"default\", {\n enumerable: true,\n get: function () {\n return _basicDropdown.default;\n }\n });\n 0; //eaimeta@70e063a35619d71f0,\"ember-basic-dropdown/components/basic-dropdown\"eaimeta@70e063a35619d71f\n});","define(\"vosaic/components/button-color-choice/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _template, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n \n \n \n \n \n */\n {\n \"id\": \"WpFdvGC3\",\n \"block\": \"[[[11,0],[24,\\\"role\\\",\\\"radio\\\"],[24,\\\"tabindex\\\",\\\"0\\\"],[16,\\\"aria-checked\\\",[29,[[52,[30,0,[\\\"active\\\"]],\\\"true\\\",\\\"false\\\"]]]],[16,1,[29,[\\\"bcc-\\\",[30,0,[\\\"colorClass\\\"]]]]],[16,\\\"aria-label\\\",[29,[\\\"Color Code: \\\",[30,0,[\\\"colorClass\\\"]]]]],[16,0,[29,[\\\"btn \\\",[52,[30,0,[\\\"active\\\"]],\\\"active\\\",\\\"\\\"]]]],[17,1],[4,[38,2],[\\\"click\\\",[30,0,[\\\"check\\\"]]],null],[4,[38,2],[\\\"keydown\\\",[30,0,[\\\"check\\\"]]],null],[12],[1,\\\"\\\\n \\\"],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[14,0,\\\"icon\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#check\\\",\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"&attrs\\\"],[\\\"div\\\",\\\"if\\\",\\\"on\\\",\\\"svg\\\",\\\"use\\\"]]\",\n \"moduleName\": \"vosaic/components/button-color-choice/index.hbs\",\n \"isStrictMode\": false\n });\n let ButtonColorChoice = _exports.default = (_class = class ButtonColorChoice extends _component2.default {\n get active() {\n return this.args.colorClass === this.args.activeColor;\n }\n get colorClass() {\n return (0, _template.htmlSafe)(this.args.colorClass);\n }\n check(e) {\n const parent = e.target.parentElement;\n //Accessiblity: ensures keyboard only navigation https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/radio_role#keyboard_interactions\n if (e.code === 'Space') {\n this.args.onSelectChanged(this.args.colorClass);\n }\n if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {\n if (!e.target.nextElementSibling) {\n parent.firstElementChild.focus();\n } else {\n e.target.nextElementSibling.focus();\n }\n }\n if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {\n if (!e.target.previousElementSibling) {\n parent.lastElementChild.focus();\n } else {\n e.target.previousElementSibling.focus();\n }\n }\n if (e.type === 'click') {\n this.args.onSelectChanged(this.args.colorClass);\n }\n }\n }, _applyDecoratedDescriptor(_class.prototype, \"check\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"check\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ButtonColorChoice);\n});","define(\"vosaic/components/button-with-dropdown-item/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _service, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n {{#if @itemLink}}\n \n {{#if @hasIcon}}\n \n \n \n {{/if}}\n {{@itemText}}\n {{#if @hasNew}}\n NEW\n {{/if}}\n \n {{else}}\n \n {{/if}}\n
\n \n */\n {\n \"id\": \"qMP1iVns\",\n \"block\": \"[[[41,[30,1],[[[8,[39,1],[[24,0,\\\"dropdown-item\\\"],[17,2],[4,[38,2],[\\\"focusout\\\",[30,0,[\\\"onFocusOut\\\"]]],null],[4,[38,2],[\\\"click\\\",[30,0,[\\\"onHideDropdown\\\"]]],null]],[[\\\"@route\\\"],[[30,1]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\" \\\"],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[15,0,[29,[\\\"icon \\\",[30,4]]]],[14,\\\"role\\\",\\\"presentation\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[15,\\\"xlink:href\\\",[29,[[30,5]]],\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[1,[30,6]],[1,\\\"\\\\n\\\"],[41,[30,7],[[[1,\\\" \\\"],[10,\\\"sup\\\"],[14,0,\\\"label label-danger\\\"],[14,5,\\\"font-size:60%\\\"],[12],[1,\\\"NEW\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"dropdown-item\\\"],[24,\\\"role\\\",\\\"menuitem\\\"],[17,2],[24,4,\\\"button\\\"],[4,[38,2],[\\\"click\\\",[30,0,[\\\"onClick\\\"]]],null],[4,[38,2],[\\\"focusout\\\",[30,0,[\\\"onFocusOut\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\" \\\"],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[15,0,[29,[\\\"icon \\\",[30,4]]]],[14,\\\"role\\\",\\\"presentation\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[15,\\\"xlink:href\\\",[29,[[30,5]]],\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[1,[30,6]],[1,\\\"\\\\n\\\"],[41,[30,7],[[[1,\\\" \\\"],[10,\\\"sup\\\"],[14,0,\\\"label label-danger\\\"],[14,5,\\\"font-size:60%\\\"],[12],[1,\\\"NEW\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[10,0],[15,0,[29,[\\\"dropdown-divider \\\",[52,[30,8],\\\"hidden-xs-up\\\",\\\"\\\"]]]],[12],[13],[1,\\\"\\\\n\\\"]],[\\\"@itemLink\\\",\\\"&attrs\\\",\\\"@hasIcon\\\",\\\"@iconSize\\\",\\\"@icon\\\",\\\"@itemText\\\",\\\"@hasNew\\\",\\\"@hideDividerBelow\\\"],[\\\"if\\\",\\\"link-to\\\",\\\"on\\\",\\\"svg\\\",\\\"use\\\",\\\"sup\\\",\\\"button\\\",\\\"div\\\"]]\",\n \"moduleName\": \"vosaic/components/button-with-dropdown-item/index.hbs\",\n \"isStrictMode\": false\n });\n\n /*\n Example usage with all available options.\n If @itemLink is specified, \n \n */\n let ButtonWithDropdownItemComponent = _exports.default = (_class = class ButtonWithDropdownItemComponent extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"voiceHelpers\", _descriptor, this);\n _defineProperty(this, \"itemLink\", undefined);\n _defineProperty(this, \"itemText\", undefined);\n _defineProperty(this, \"hasIcon\", false);\n _defineProperty(this, \"iconSize\", undefined);\n _defineProperty(this, \"icon\", undefined);\n _defineProperty(this, \"hasNew\", false);\n _defineProperty(this, \"showDividerBelow\", true);\n }\n onClick() {\n if (this.args.passValueAction) {\n const val = this.args.actionValue;\n this.args.passValueAction(val);\n } else if (this.args.action) {\n this.args.action();\n }\n if (this.args.changeOrgAction) {\n this.args.changeOrgAction(this.args.profile);\n }\n }\n onHideDropdown() {\n this.voiceHelpers.hideDropdownMenus();\n }\n onFocusOut(element) {\n //check if element is the last dropdown-item element in the dropdown-menu\n // if it is, hide the dropdown menu\n const dropdownMenu = element.target.closest('.dropdown-menu');\n const dropdownItems = dropdownMenu.querySelectorAll('.dropdown-item');\n const lastDropdownItem = dropdownItems[dropdownItems.length - 1];\n if (lastDropdownItem === element.target) {\n this.voiceHelpers.hideDropdownMenus();\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"voiceHelpers\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _applyDecoratedDescriptor(_class.prototype, \"onClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onClick\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onHideDropdown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onHideDropdown\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onFocusOut\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onFocusOut\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ButtonWithDropdownItemComponent);\n});","define(\"vosaic/components/button-with-dropdown/index\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/tracking\", \"@glimmer/component\", \"@ember/template\", \"@ember/template-factory\"], function (_exports, _component, _object, _tracking, _component2, _template, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@glimmer/component\",0,\"@ember/template\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n \n */\n {\n \"id\": \"ClwM0gmE\",\n \"block\": \"[[[11,\\\"button\\\"],[16,0,[29,[[52,[30,1],\\\"\\\",\\\"nav-link dropdown-toggle\\\"]]]],[16,\\\"aria-expanded\\\",[29,[[52,[30,0,[\\\"isOpen\\\"]],\\\"true\\\",\\\"false\\\"]]]],[24,\\\"aria-haspopup\\\",\\\"true\\\"],[17,2],[24,4,\\\"button\\\"],[4,[38,2],[\\\"click\\\",[30,0,[\\\"onClick\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\" \\\"],[10,1],[14,0,\\\"sr-only\\\"],[12],[1,[30,4]],[13],[1,\\\"\\\\n \\\"],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[15,0,[29,[\\\"icon \\\",[30,5]]]],[14,\\\"aria-hidden\\\",\\\"true\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[15,\\\"xlink:href\\\",[29,[[30,6]]],\\\"http://www.w3.org/1999/xlink\\\"],[15,5,[30,0,[\\\"iconStyle\\\"]]],[14,0,\\\"btn-icon\\\"],[12],[1,[30,4]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,[30,7]],[1,\\\"\\\\n\\\"],[41,[30,8],[[[10,\\\"sup\\\"],[14,0,\\\"label label-danger\\\"],[14,5,\\\"font-size:60%\\\"],[12],[1,\\\"NEW\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13]],[\\\"@clearDefaultClasses\\\",\\\"&attrs\\\",\\\"@hasIcon\\\",\\\"@srOnlyText\\\",\\\"@iconSize\\\",\\\"@icon\\\",\\\"@labelText\\\",\\\"@hasNew\\\"],[\\\"button\\\",\\\"if\\\",\\\"on\\\",\\\"span\\\",\\\"svg\\\",\\\"use\\\",\\\"sup\\\"]]\",\n \"moduleName\": \"vosaic/components/button-with-dropdown/index.hbs\",\n \"isStrictMode\": false\n });\n\n /*\n Example options:\n @labelText = \"Share\" //what users see\n @menuOpenAction = {{action 'menuIsOpen'}} //action that opens and closes the menu\n @menuName=\"topNavMore\" // menu variable tracked in ember\n @hasIcon = {{true}} //if button should have an icon\n @icon=\"#share-outline\" //icon id\n @iconSize=\"icon-md\" // icon size\n @iconColor=\"#fff\" // icon color\n @hasNew={{true}} //if \"New\" should be added to indicate a \"New\" feature\n @clearDefaultClasses = {{true}} //to remove any defalt classes set on the button\n Optional:\n You can add valid HTML attributes such as id, class, aria- etc.\n */\n let ButtonWithDropdownComponent = _exports.default = (_class = class ButtonWithDropdownComponent extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"isOpen\", _descriptor, this);\n _initializerDefineProperty(this, \"labelText\", _descriptor2, this);\n _defineProperty(this, \"srOnlyText\", undefined);\n _defineProperty(this, \"iconSize\", undefined);\n _defineProperty(this, \"icon\", undefined);\n _defineProperty(this, \"iconColor\", undefined);\n _defineProperty(this, \"hasNew\", false);\n _defineProperty(this, \"outsidePointerTarget\", null);\n _defineProperty(this, \"onOutsidePointerHandler\", null);\n _defineProperty(this, \"menuContainer\", null);\n }\n get iconStyle() {\n if (this.args.iconColor) {\n return (0, _template.htmlSafe)(`fill:${this.args.iconColor}`);\n } else {\n return (0, _template.htmlSafe)(''); //default to no color\n }\n }\n willDestroy() {\n super.willDestroy(...arguments);\n this.unregisterOutsidePointerHandler();\n }\n unregisterOutsidePointerHandler() {\n if (this.outsidePointerTarget && this.onOutsidePointerHandler) {\n this.outsidePointerTarget.removeEventListener('pointerdown', this.onOutsidePointerHandler, true);\n }\n this.outsidePointerTarget = null;\n this.onOutsidePointerHandler = null;\n this.menuContainer = null;\n }\n closeMenu(parent) {\n const menuParent = parent || this.menuContainer;\n const body = document.body;\n if (menuParent) {\n menuParent.classList.remove('open');\n }\n body.classList.remove('dropdown-menu-open');\n this.isOpen = false;\n this.unregisterOutsidePointerHandler();\n if (typeof this.args.menuOpenAction === 'function') {\n this.args.menuOpenAction(this.args.menuName, false);\n }\n }\n registerOutsidePointerHandler(menuContainer) {\n if (!menuContainer) {\n return;\n }\n this.unregisterOutsidePointerHandler();\n this.menuContainer = menuContainer;\n this.outsidePointerTarget = document;\n this.onOutsidePointerHandler = event => {\n const target = event?.target;\n if (target instanceof Node && this.menuContainer?.contains(target)) {\n return;\n }\n this.closeMenu(this.menuContainer);\n };\n this.outsidePointerTarget.addEventListener('pointerdown', this.onOutsidePointerHandler, true);\n }\n hideAnyExistingDropdownMenus(aDropdownIsAlreadyOpen, body, dropdowns) {\n if (aDropdownIsAlreadyOpen) {\n dropdowns.forEach(element => {\n element.classList.remove('open');\n });\n body.classList.remove('dropdown-menu-open');\n }\n }\n addClassToParentIfNeeded(isOpen, parent, body) {\n let shouldOpen = false;\n if (isOpen) {\n shouldOpen = false;\n parent.classList.remove('open');\n body.classList.remove('dropdown-menu-open');\n } else {\n shouldOpen = true;\n try {\n // sometimes the parent classname is a getter only for some elements\n parent.className += ' open';\n body.className += ' dropdown-menu-open';\n } catch (e) {\n console.log(e);\n }\n }\n this.isOpen = shouldOpen;\n return shouldOpen;\n }\n onClick(e) {\n const element = e.currentTarget || e.target;\n const parent = element.parentElement;\n const dropdowns = document.querySelectorAll('.dropdown');\n const body = document.querySelector('body');\n const aDropdownIsAlreadyOpen = body.classList.contains('dropdown-menu-open') === true;\n const isOpen = parent.classList.contains('open');\n let shouldOpen = false;\n this.hideAnyExistingDropdownMenus(aDropdownIsAlreadyOpen, body, dropdowns);\n shouldOpen = this.addClassToParentIfNeeded(isOpen, parent, body);\n if (shouldOpen) {\n this.registerOutsidePointerHandler(parent);\n } else {\n this.unregisterOutsidePointerHandler();\n }\n\n // Provide the caller with the button's screen position so popovers can be positioned.\n let rect;\n try {\n rect = e.currentTarget && e.currentTarget.getBoundingClientRect ? e.currentTarget.getBoundingClientRect() : element.getBoundingClientRect();\n } catch {\n rect = undefined;\n }\n this.args.menuOpenAction(this.args.menuName, shouldOpen, rect);\n\n // Default behavior keeps legacy keyboard flow; callers can opt out for\n // disclosure-style dropdowns that should keep focus on the trigger.\n const shouldMoveFocusOnOpen = this.args.focusOnOpen !== false;\n if (shouldOpen && shouldMoveFocusOnOpen) {\n setTimeout(() => {\n const firstItem = parent.querySelector('.dropdown-menu .dropdown-item');\n if (firstItem) {\n firstItem.focus();\n }\n }, 0);\n }\n return false;\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isOpen\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"labelText\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"onClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onClick\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ButtonWithDropdownComponent);\n});","define(\"vosaic/components/cmodal-confirm-action/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/service\", \"@ember/template\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _service, _template, _tracking, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/template\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n {{#if @shouldShow}}\n \n
\n {{#if (equal @modal 'CmodalDeleteAllMoments')}}\n \n {{/if}}\n \n {{#if (equal @modal 'CmodalDeleteButton')}}\n \n {{/if}}\n \n {{#if (equal @modal 'CmodalDeleteVideoWarning')}}\n \n {{/if}}\n \n {{#if (equal @modal 'CmodalDeleteMomentWithAnnotations')}}\n \n {{/if}}\n \n {{#if (equal @modal 'CmodalFormChangeWarning')}}\n \n {{/if}}\n \n {{#if (equal @modal 'CmodalSharePrivateFormWarning')}}\n \n {{/if}}\n \n {{#if (equal @modal 'CmodalDeleteOrgWarning')}}\n \n {{/if}}\n \n {{#if (equal @modal 'CmodalTooManyButtons')}}\n \n {{/if}}\n \n {{#if this.isCancelOnly}}\n OK\n {{else}}\n \n {{#if @yesActionText}}\n {{#if this.isDeleting}} Deleting. Please Wait.. {{else}}\n {{@yesActionText}}\n {{/if}}\n {{else}} Yes {{/if}}\n {{#if @noActionText}} {{@noActionText}} {{else}} No {{/if}}\n {{/if}}\n
\n \n {{/if}}\n */\n {\n \"id\": \"HVk+wt/8\",\n \"block\": \"[[[41,[30,1],[[[1,\\\" \\\"],[11,0],[24,\\\"role\\\",\\\"dialog\\\"],[24,0,\\\"context-modal\\\"],[24,\\\"tabindex\\\",\\\"-1\\\"],[17,2],[4,[38,2],[[30,0,[\\\"confirmDelete\\\"]]],null],[12],[1,\\\"\\\\n \\\"],[10,0],[15,0,[29,[[30,0,[\\\"innerDivClasses\\\"]]]]],[12],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,3],\\\"CmodalDeleteAllMoments\\\"],null],[[[1,\\\" \\\"],[8,[39,4],null,null,null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,3],\\\"CmodalDeleteButton\\\"],null],[[[1,\\\" \\\"],[8,[39,5],null,[[\\\"@fromFormEdit\\\",\\\"@willLoseMoments\\\",\\\"@isFormButton\\\"],[[30,4],[30,5],[30,6]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,3],\\\"CmodalDeleteVideoWarning\\\"],null],[[[1,\\\" \\\"],[8,[39,6],null,[[\\\"@video\\\"],[[30,7]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,3],\\\"CmodalDeleteMomentWithAnnotations\\\"],null],[[[1,\\\" \\\"],[8,[39,7],null,null,null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,3],\\\"CmodalFormChangeWarning\\\"],null],[[[1,\\\" \\\"],[8,[39,8],null,null,null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,3],\\\"CmodalSharePrivateFormWarning\\\"],null],[[[1,\\\" \\\"],[8,[39,9],null,[[\\\"@showSharePrivateFormUserMessage\\\",\\\"@sharedWithDifferentGroup\\\",\\\"@formTitle\\\",\\\"@videoFormId\\\",\\\"@forms\\\"],[[30,8],[30,9],[30,10],[30,11],[30,12]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,3],\\\"CmodalDeleteOrgWarning\\\"],null],[[[1,\\\" \\\"],[8,[39,10],null,[[\\\"@isImpersonating\\\",\\\"@orgName\\\",\\\"@orgNameForDelete\\\",\\\"@orgNameErrors\\\",\\\"@onDeleteOrganizationClicked\\\",\\\"@buttonId\\\"],[[30,13],[30,14],[30,15],[30,16],[30,17],[30,18]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[28,[37,3],[[30,3],\\\"CmodalTooManyButtons\\\"],null],[[[1,\\\" \\\"],[8,[39,11],null,[[\\\"@maxButtons\\\"],[[30,19]]],null],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isCancelOnly\\\"]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,1,\\\"cancel-delete-all\\\"],[24,0,\\\"btn btn-sm btn-info-outline\\\"],[24,4,\\\"button\\\"],[4,[38,13],[\\\"click\\\",[30,0,[\\\"noClicked\\\"]]],null],[12],[1,\\\"OK\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[16,0,[29,[\\\"btn btn-sm btn-danger \\\",[52,[30,0,[\\\"isDeleting\\\"]],\\\"disabled\\\"]]]],[16,\\\"disabled\\\",[30,0,[\\\"isDeleting\\\"]]],[24,4,\\\"button\\\"],[4,[38,13],[\\\"click\\\",[30,0,[\\\"yesClicked\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,20],[[[1,\\\" \\\"],[41,[30,0,[\\\"isDeleting\\\"]],[[[1,\\\" Deleting. Please Wait.. \\\"]],[]],[[[1,\\\"\\\\n \\\"],[1,[30,20]],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"]],[]],[[[1,\\\" Yes \\\"]],[]]],[13],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,1,\\\"cancel-delete-all\\\"],[16,0,[29,[\\\"btn btn-sm btn-info-outline \\\",[52,[30,0,[\\\"isDeleting\\\"]],\\\"disabled\\\"]]]],[16,\\\"disabled\\\",[30,0,[\\\"isDeleting\\\"]]],[24,4,\\\"button\\\"],[4,[38,13],[\\\"click\\\",[30,0,[\\\"noClicked\\\"]]],null],[12],[41,[30,21],[[[1,\\\" \\\"],[1,[30,21]],[1,\\\" \\\"]],[]],[[[1,\\\" No \\\"]],[]]],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@shouldShow\\\",\\\"&attrs\\\",\\\"@modal\\\",\\\"@fromFormEdit\\\",\\\"@willLoseMoments\\\",\\\"@isFormButton\\\",\\\"@video\\\",\\\"@showSharePrivateFormUserMessage\\\",\\\"@sharedWithDifferentGroup\\\",\\\"@formTitle\\\",\\\"@videoFormId\\\",\\\"@forms\\\",\\\"@isImpersonating\\\",\\\"@orgName\\\",\\\"@orgNameForDelete\\\",\\\"@orgNameErrors\\\",\\\"@onDeleteOrganizationClicked\\\",\\\"@buttonId\\\",\\\"@maxButtons\\\",\\\"@yesActionText\\\",\\\"@noActionText\\\"],[\\\"if\\\",\\\"div\\\",\\\"did-insert\\\",\\\"equal\\\",\\\"cmodal-delete-all-moments\\\",\\\"cmodal-delete-button\\\",\\\"cmodal-delete-video-warning\\\",\\\"cmodal-delete-moment-with-annotations\\\",\\\"cmodal-form-change-warning\\\",\\\"cmodal-share-private-form-warning\\\",\\\"cmodal-delete-org-warning\\\",\\\"cmodal-too-many-buttons\\\",\\\"button\\\",\\\"on\\\"]]\",\n \"moduleName\": \"vosaic/components/cmodal-confirm-action/index.hbs\",\n \"isStrictMode\": false\n });\n let CmodalConfirmActionComponent = _exports.default = (_class = class CmodalConfirmActionComponent extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"focusTrap\", _descriptor, this);\n _initializerDefineProperty(this, \"returnFocus\", _descriptor2, this);\n _initializerDefineProperty(this, \"isDeleting\", _descriptor3, this);\n }\n //check if we should only show cancel button\n //different components send different args, add them here\n get isCancelOnly() {\n if (this.args.video) {\n return this.args.video.isLocked;\n }\n return this.args.isCancelOnly;\n }\n //classes for immediate child of the dialog div\n get innerDivClasses() {\n return (0, _template.htmlSafe)(this.args.innerDivClasses);\n }\n confirmDelete() {\n this.focusTrap.handleFocusTrap(this.args.shouldShow);\n if (this.returnFocus.focusInitiator) {\n this.returnFocus.setFocusInitiator(this.returnFocus.focusInitiator);\n }\n }\n yesClicked(...args) {\n this.isDeleting = true;\n if (args.length > 0) {\n this.args.yesAction(...args);\n } else {\n this.args.yesAction();\n }\n if (this.returnFocus.focusInitiator) {\n this.returnFocus.returnFocus();\n }\n }\n noClicked() {\n this.args.noAction();\n if (this.returnFocus.focusInitiator) {\n this.returnFocus.returnFocus();\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"focusTrap\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"returnFocus\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"isDeleting\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"confirmDelete\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"confirmDelete\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"yesClicked\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"yesClicked\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"noClicked\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"noClicked\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CmodalConfirmActionComponent);\n});","define(\"vosaic/components/cmodal-delete-all-moments/index\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n

Are you sure you want to delete all moments?

\n \n \n */\n {\n \"id\": \"R/C73Cd4\",\n \"block\": \"[[[10,\\\"h4\\\"],[14,0,\\\"m-t-lg\\\"],[14,\\\"tabindex\\\",\\\"0\\\"],[12],[1,\\\"Are you sure you want to delete all moments?\\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[],[\\\"h4\\\"]]\",\n \"moduleName\": \"vosaic/components/cmodal-delete-all-moments/index.hbs\",\n \"isStrictMode\": false\n });\n var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"cmodal-delete-all-moments\"));\n});","define(\"vosaic/components/cmodal-delete-button/index\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n
\n

Are you sure you want to delete the button?

\n \n \n
    \n {{#if @fromFormEdit}}\n
  • All moments marked using this button—in all videos—will be deleted.
  • \n
  • Once you click Yes, the button will be removed and the form will be saved.
  • \n
  • This action cannot be undone.
  • \n {{else}}\n {{#if @willLoseMoments}}\n
  • All moments tied to this button will be deleted.
  • \n {{/if}}\n {{#if @isFormButton}}\n
  • All moments tied to this form button will be deleted.
  • \n
  • You can continue marking up video with the remaining buttons.
  • \n
  • This action cannot be undone.
  • \n {{else}}\n
  • You can continue marking up video with the remaining buttons.
  • \n
  • This action cannot be undone.
  • \n {{/if}}\n {{/if}}\n
\n
\n \n */\n {\n \"id\": \"H4SmWYUj\",\n \"block\": \"[[[1,\\\" \\\"],[10,0],[14,0,\\\"p-x-md text-xs-left\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h4\\\"],[14,0,\\\"m-t-lg\\\"],[14,\\\"tabindex\\\",\\\"0\\\"],[12],[1,\\\"Are you sure you want to delete the button?\\\"],[13],[1,\\\"\\\\n\\\\n\\\\n \\\"],[10,\\\"ul\\\"],[14,0,\\\"text-xs-left\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\" \\\"],[10,\\\"li\\\"],[12],[1,\\\"All moments marked using this button—in all videos—will be deleted.\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[1,\\\"Once you click Yes, the button will be removed and the form will be saved.\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"This action cannot be undone.\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,2],[[[1,\\\" \\\"],[10,\\\"li\\\"],[12],[1,\\\"All moments tied to this button will be deleted.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,3],[[[1,\\\" \\\"],[10,\\\"li\\\"],[12],[1,\\\"All moments tied to this form button will be deleted.\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[1,\\\"You can continue marking up video with the remaining buttons.\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[1,\\\"This action cannot be undone.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,\\\"li\\\"],[12],[1,\\\"You can continue marking up video with the remaining buttons.\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"li\\\"],[12],[1,\\\"This action cannot be undone.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@fromFormEdit\\\",\\\"@willLoseMoments\\\",\\\"@isFormButton\\\"],[\\\"div\\\",\\\"h4\\\",\\\"ul\\\",\\\"if\\\",\\\"li\\\",\\\"strong\\\"]]\",\n \"moduleName\": \"vosaic/components/cmodal-delete-button/index.hbs\",\n \"isStrictMode\": false\n });\n var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"cmodal-delete-button\"));\n});","define(\"vosaic/components/cmodal-delete-moment-with-annotations/index\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n

Deleting this moment will delete all annotations assigned to it.

\n \n */\n {\n \"id\": \"+hjE9+84\",\n \"block\": \"[[[10,\\\"h4\\\"],[14,0,\\\"m-t-lg\\\"],[14,\\\"tabindex\\\",\\\"0\\\"],[12],[1,\\\"Deleting this moment will delete all annotations assigned to it.\\\"],[13],[1,\\\"\\\\n\\\"]],[],[\\\"h4\\\"]]\",\n \"moduleName\": \"vosaic/components/cmodal-delete-moment-with-annotations/index.hbs\",\n \"isStrictMode\": false\n });\n var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"cmodal-delete-moment-with-annotations\"));\n});","define(\"vosaic/components/cmodal-delete-org-warning/index\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n \n {{#if @isImpersonating}}\n
\n

You can't delete when you're impersonating

\n
\n

To prevent you from deleting yourself, you can't delete an\n organization while you're impersonating.

\n
\n
\n {{else}}\n

Are you sure you want to delete\n {{@orgName}}?

\n
\n

This action cannot be undone. All videos, users, forms, groups will\n be deleted permanently.

\n

To confirm you want to do this, please type the name of the\n organization exactly, then click the Delete button.

\n \n
\n
\n {{/if}}\n \n \n */\n {\n \"id\": \"laJVNo/1\",\n \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\" \\\"],[10,0],[14,0,\\\"p-x-sm\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h4\\\"],[14,0,\\\"m-t-lg\\\"],[14,\\\"tabindex\\\",\\\"0\\\"],[12],[1,\\\"You can't delete when you're impersonating\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[12],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"To prevent you from deleting yourself, you can't delete an\\\\n organization while you're impersonating.\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"p-x-sm\\\"],[12],[10,\\\"h4\\\"],[14,0,\\\"m-t-lg\\\"],[12],[1,\\\"Are you sure you want to delete\\\\n \\\"],[1,[30,2]],[1,\\\"?\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[12],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"This action cannot be undone. All videos, users, forms, groups will\\\\n be deleted permanently.\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"To confirm you want to do this, please type the name of the\\\\n organization exactly, then click the Delete button.\\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,4],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@value\\\",\\\"@errors\\\",\\\"@onValueChange\\\"],[\\\"col-xs-12 p-l-none p-r-none\\\",\\\"text\\\",\\\"Organization Name\\\",\\\"Organization Name\\\",[30,3],[30,4],[28,[37,5],[[28,[37,6],[[30,3]],null]],null]]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"]],[\\\"@isImpersonating\\\",\\\"@orgName\\\",\\\"@orgNameForDelete\\\",\\\"@orgNameErrors\\\"],[\\\"if\\\",\\\"div\\\",\\\"h4\\\",\\\"p\\\",\\\"input-component\\\",\\\"fn\\\",\\\"mut\\\"]]\",\n \"moduleName\": \"vosaic/components/cmodal-delete-org-warning/index.hbs\",\n \"isStrictMode\": false\n });\n var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"cmodal-delete-org-warning\"));\n});","define(\"vosaic/components/cmodal-delete-video-warning/index\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n
\n {{#if @video.isLocked}}\n

This Video is Locked

\n

To delete this video please go to Edit Video Details and uncheck the option \"Prevent video from being deleted\". Note: only users in Educator or Administrator roles who have access to this video have access to that option.

\n {{else}}\n

Are You Sure You Want To Delete This Video

\n

Deleting a video removes it permanently from Vosaic, including all of its markup and supporting documents. You can not undo this.

\n {{/if}}\n
\n \n */\n {\n \"id\": \"1uaAYnfT\",\n \"block\": \"[[[10,0],[14,0,\\\"p-x-lg p-t-md text-xs-left\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,1,[\\\"isLocked\\\"]],[[[1,\\\" \\\"],[10,\\\"h4\\\"],[14,\\\"tabindex\\\",\\\"0\\\"],[12],[1,\\\"This Video is Locked\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"To delete this video please go to Edit Video Details and uncheck the option \\\\\\\"Prevent video from being deleted\\\\\\\". Note: only users in Educator or Administrator roles who have access to this video have access to that option.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,\\\"h4\\\"],[14,\\\"tabindex\\\",\\\"0\\\"],[12],[1,\\\"Are You Sure You Want To Delete This Video\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[1,\\\"Deleting a video removes it permanently from Vosaic, including all of its markup and supporting documents. You can not undo this.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[13],[1,\\\"\\\\n\\\"]],[\\\"@video\\\"],[\\\"div\\\",\\\"if\\\",\\\"h4\\\",\\\"p\\\"]]\",\n \"moduleName\": \"vosaic/components/cmodal-delete-video-warning/index.hbs\",\n \"isStrictMode\": false\n });\n var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"cmodal-delete-video-warning\"));\n});","define(\"vosaic/components/cmodal-form-change-warning/index\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n \n

Are you sure you want to use this form?

\n \n

\n The form selected has been shared with specific group(s). By selecting it here you will make this form public. Public forms are visible to anyone in the organization.\n \n Are you sure you want to make this form public? This action can not be undone.\n

\n \n \n \n */\n {\n \"id\": \"+MUrrtxr\",\n \"block\": \"[[[1,\\\"\\\\n \\\"],[10,\\\"h4\\\"],[14,0,\\\"m-t-lg\\\"],[14,\\\"tabindex\\\",\\\"0\\\"],[12],[1,\\\"Are you sure you want to use this form?\\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[10,2],[12],[1,\\\"\\\\n The form selected has been shared with specific group(s). By selecting it here you will make this form public. Public forms are visible to anyone in the organization.\\\\n\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Are you sure you want to make this form public? This action can not be undone\\\"],[13],[1,\\\".\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n\\\\n\\\"]],[],[\\\"h4\\\",\\\"p\\\",\\\"strong\\\"]]\",\n \"moduleName\": \"vosaic/components/cmodal-form-change-warning/index.hbs\",\n \"isStrictMode\": false\n });\n var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"cmodal-form-change-warning\"));\n});","define(\"vosaic/components/cmodal-share-private-form-warning/index\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n \n

Are you sure you want to share this video?

\n \n {{#if @sharedWithDifferentGroup}}\n

\n The group(s) selected do not have access to the form \"{{id-display-name @videoFormId @forms}}\", which is used in this video. By sharing this video\n with selected group(s) you will make the \"{{id-display-name @videoFormId @forms}}\" form public. Public forms are visible to anyone in the organization.\n

\n {{else if @showSharePrivateFormUserMessage}}\n

\n The user(s) selected do not have access to any of the groups the form \"{{id-display-name @videoFormId @forms}}\" has been shared with. By sharing this video\n with selected user(s) you will make the \"{{id-display-name @videoFormId @forms}}\" form public. Public forms are visible to anyone in the organization.\n

\n {{else}}\n

\n This video is using a private form \"{{id-display-name @videoFormId @forms}}\". By sharing this video\n you will make the \"{{id-display-name @videoFormId @forms}}\" form public. Public forms are visible to anyone in the organization.\n

\n {{/if}}\n \n */\n {\n \"id\": \"SlF6ow5j\",\n \"block\": \"[[[1,\\\"\\\\n \\\"],[10,\\\"h4\\\"],[14,0,\\\"m-t-lg\\\"],[14,\\\"tabindex\\\",\\\"0\\\"],[12],[1,\\\"Are you sure you want to share this video?\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,1],[[[1,\\\" \\\"],[10,2],[12],[1,\\\"\\\\n The group(s) selected do not have access to the form \\\\\\\"\\\"],[10,\\\"strong\\\"],[12],[1,[28,[35,4],[[30,2],[30,3]],null]],[13],[1,\\\"\\\\\\\", which is used in this video. By sharing this video\\\\n with selected group(s) you will make the \\\\\\\"\\\"],[10,\\\"strong\\\"],[12],[1,[28,[35,4],[[30,2],[30,3]],null]],[13],[1,\\\"\\\\\\\" form public. Public forms are visible to anyone in the organization.\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,4],[[[1,\\\" \\\"],[10,2],[12],[1,\\\"\\\\n The user(s) selected do not have access to any of the groups the form \\\\\\\"\\\"],[10,\\\"strong\\\"],[12],[1,[28,[35,4],[[30,2],[30,3]],null]],[13],[1,\\\"\\\\\\\" has been shared with. By sharing this video\\\\n with selected user(s) you will make the \\\\\\\"\\\"],[10,\\\"strong\\\"],[12],[1,[28,[35,4],[[30,2],[30,3]],null]],[13],[1,\\\"\\\\\\\" form public. Public forms are visible to anyone in the organization.\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,2],[12],[1,\\\"\\\\n This video is using a private form \\\\\\\"\\\"],[10,\\\"strong\\\"],[12],[1,[28,[35,4],[[30,2],[30,3]],null]],[13],[1,\\\"\\\\\\\". By sharing this video\\\\n you will make the \\\\\\\"\\\"],[10,\\\"strong\\\"],[12],[1,[28,[35,4],[[30,2],[30,3]],null]],[13],[1,\\\"\\\\\\\" form public. Public forms are visible to anyone in the organization.\\\\n \\\"],[13],[1,\\\"\\\\n \\\"]],[]]]],[]]]],[\\\"@sharedWithDifferentGroup\\\",\\\"@videoFormId\\\",\\\"@forms\\\",\\\"@showSharePrivateFormUserMessage\\\"],[\\\"h4\\\",\\\"if\\\",\\\"p\\\",\\\"strong\\\",\\\"id-display-name\\\"]]\",\n \"moduleName\": \"vosaic/components/cmodal-share-private-form-warning/index.hbs\",\n \"isStrictMode\": false\n });\n var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"cmodal-share-private-form-warning\"));\n});","define(\"vosaic/components/cmodal-too-many-buttons/index\", [\"exports\", \"@ember/component\", \"@ember/component/template-only\", \"@ember/template-factory\"], function (_exports, _component, _templateOnly, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/component/template-only\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n \n

You can't add any more buttons

\n \n

\n Allowed maximum of buttons per Form is {{ @maxButtons }}. If you want to add a new button, delete another button.\n

\n \n */\n {\n \"id\": \"2FySR9+1\",\n \"block\": \"[[[1,\\\"\\\\n\\\"],[10,\\\"h4\\\"],[14,0,\\\"m-t-lg\\\"],[14,\\\"tabindex\\\",\\\"0\\\"],[12],[1,\\\"You can't add any more buttons\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,2],[12],[1,\\\"\\\\n Allowed maximum of buttons per Form is \\\"],[1,[30,1]],[1,\\\". If you want to add a new button, delete another button.\\\\n\\\"],[13],[1,\\\"\\\\n\\\"]],[\\\"@maxButtons\\\"],[\\\"h4\\\",\\\"p\\\"]]\",\n \"moduleName\": \"vosaic/components/cmodal-too-many-buttons/index.hbs\",\n \"isStrictMode\": false\n });\n var _default = _exports.default = (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, (0, _templateOnly.default)(undefined, \"cmodal-too-many-buttons\"));\n});","define(\"vosaic/components/content-editable\", [\"exports\", \"ember-content-editable/components/content-editable\"], function (_exports, _contentEditable) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.defineProperty(_exports, \"default\", {\n enumerable: true,\n get: function () {\n return _contentEditable.default;\n }\n });\n 0; //eaimeta@70e063a35619d71f0,\"ember-content-editable/components/content-editable\"eaimeta@70e063a35619d71f\n});","define(\"vosaic/components/custom-learner-group-add-users/index\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/runloop\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _runloop, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/runloop\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n
\n Add Users to {{this.groupName}}\n \n
\n Saving...
\n \n
\n \n \n {{#if (less-than index this.usersToDisplayCount)}}\n \n {{/if}}\n \n {{#if this.searchText}}\n {{! Don't show load more}}\n {{else}}\n {{#if\n (less-than this.usersToDisplayCount this.sortedFilteredUsers.length)\n }}\n
Showing first\n {{this.usersToDisplayCount}}\n users.\n Load More\n
\n {{/if}}\n {{/if}}\n
\n \n \n
\n {{outlet}}\n */\n {\n \"id\": \"b/Zl1Kes\",\n \"block\": \"[[[10,\\\"fieldset\\\"],[14,0,\\\"m-b-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"legend\\\"],[12],[1,\\\"Add Users to \\\"],[1,[30,0,[\\\"groupName\\\"]]],[13],[1,\\\"\\\\n \\\"],[8,[39,2],null,[[\\\"@overridePadding\\\",\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@value\\\",\\\"@onValueChange\\\"],[\\\"p-x-none\\\",\\\"m-b-none m-t-xs\\\",\\\"text\\\",\\\"Search\\\",\\\"Search\\\",[30,0,[\\\"searchText\\\"]],[28,[37,3],[[28,[37,4],[[30,0,[\\\"searchText\\\"]]],null]],null]]],null],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card btn-form-wrap overflow-hidden\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[15,0,[29,[\\\"pos-a full-width fixed-in-space transparent-bg text-xs-center p-t-lg\\\\n \\\",[52,[30,0,[\\\"showLoader\\\"]],\\\"in\\\"]]]],[12],[1,\\\"Saving...\\\"],[13],[1,\\\"\\\\n \\\"],[11,0],[24,1,\\\"group-users\\\"],[24,0,\\\"overflow-scroll overflow-y-scroll mini-scroll p-x-md\\\"],[4,[38,7],[[30,0,[\\\"setupScrollListener\\\"]]],null],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"c-inputs-stacked m-t-sm bordered\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,8],null,[[\\\"@options\\\",\\\"@labelProperty\\\",\\\"@updateSelectionValue\\\",\\\"@onchange\\\",\\\"@selection\\\"],[[30,0,[\\\"sortedFilteredUsers\\\"]],\\\"displayName\\\",false,[30,0,[\\\"updateSelection\\\"]],[30,0,[\\\"selectedUsers\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,9],[[30,3],[30,0,[\\\"usersToDisplayCount\\\"]]],null],[[[1,\\\" \\\"],[10,\\\"label\\\"],[14,0,\\\"c-checkbox c-input border-b\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,11],[[4,[38,12],[\\\"click\\\",[30,0,[\\\"stopPropagation\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,2]]],null],[1,[30,1,[\\\"displayName\\\"]]],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"c-indicator\\\"],[12],[13],[1,\\\"\\\\n \\\"],[10,\\\"small\\\"],[15,0,[29,[\\\"display-inline-block label label-pill pull-xs-right\\\\n \\\",[30,1,[\\\"roleLabel\\\"]]]]],[12],[1,[30,1,[\\\"friendlyRole\\\"]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"small\\\"],[14,0,\\\"display-block\\\"],[12],[1,[30,1,[\\\"emailAddress\\\"]]],[13],[1,\\\"\\\\n\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"]],[1,2,3]]]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"searchText\\\"]],[[],[]],[[[41,[28,[37,9],[[30,0,[\\\"usersToDisplayCount\\\"]],[30,0,[\\\"sortedFilteredUsers\\\",\\\"length\\\"]]],null],[[[1,\\\" \\\"],[10,0],[14,0,\\\"text-xs-center p-x-sm small\\\"],[14,1,\\\"group-users-load-more\\\"],[12],[1,\\\"Showing first\\\\n \\\"],[1,[30,0,[\\\"usersToDisplayCount\\\"]]],[1,\\\"\\\\n users.\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn btn-default-outline btn-xs\\\"],[24,4,\\\"button\\\"],[4,[38,12],[\\\"click\\\",[30,0,[\\\"onShowMoreUsers\\\"]]],null],[12],[1,\\\"Load More\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[46,[28,[37,17],null,null],null,null,null]],[\\\"user\\\",\\\"isSelected\\\",\\\"index\\\"],[\\\"fieldset\\\",\\\"legend\\\",\\\"input-component\\\",\\\"fn\\\",\\\"mut\\\",\\\"div\\\",\\\"if\\\",\\\"did-insert\\\",\\\"vosaic-multiselect-checkboxes\\\",\\\"less-than\\\",\\\"label\\\",\\\"input\\\",\\\"on\\\",\\\"span\\\",\\\"small\\\",\\\"button\\\",\\\"component\\\",\\\"-outlet\\\"]]\",\n \"moduleName\": \"vosaic/components/custom-learner-group-add-users/index.hbs\",\n \"isStrictMode\": false\n });\n const USERS_TO_SHOW = 50;\n const USERS_TO_LOAD = 25;\n const MIN_USER_LIMIT_TO_SHOW_LOADER = 200;\n let CustomLearnerGroupAddUsersComponent = _exports.default = (_class = class CustomLearnerGroupAddUsersComponent extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"eligibleUsersWithInGroup\", _descriptor, this);\n _initializerDefineProperty(this, \"selectedUsers\", _descriptor2, this);\n _initializerDefineProperty(this, \"searchText\", _descriptor3, this);\n _initializerDefineProperty(this, \"usersToDisplayCount\", _descriptor4, this);\n _initializerDefineProperty(this, \"showLoader\", _descriptor5, this);\n _initializerDefineProperty(this, \"hideLoader\", _descriptor6, this);\n }\n // constructor() {\n // super(...arguments);\n // this.updateSelectedUsers();\n // this.recordOriginalGroupMembers();\n // }\n\n get groupName() {\n //doing this here because constructor is not called when group is changed\n this.updateSelectedUsers();\n return this.args.group.name;\n }\n get sortedUsers() {\n return this.eligibleUsersWithInGroup.sort((a, b) => {\n const nameA = a.displayName.toLowerCase();\n const nameB = b.displayName.toLowerCase();\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n const emailA = (a.emailAddress || '').toLowerCase();\n const emailB = (b.emailAddress || '').toLowerCase();\n if (emailA < emailB) {\n return -1;\n }\n if (emailA > emailB) {\n return 1;\n }\n return 0;\n });\n }\n get eligibleUsers() {\n return this.args.users.filter(user => user.firstName && user.lastName && !user.isDeleted);\n }\n get sortedFilteredUsers() {\n const searchText = this.searchText.toLowerCase().trim();\n // eslint-disable-next-line no-control-regex\n const rforeign = /[^\\u0000-\\u007f]/;\n const maxLength = 3;\n const searchTextMin = rforeign.test(searchText) ? 1 : maxLength;\n if (searchText && searchText.length > searchTextMin) {\n return this.sortedUsers.filter(user => {\n const nameMatch = user.displayName.toLowerCase().includes(searchText);\n const emailMatch = (user.emailAddress || '').toLowerCase().includes(searchText);\n const roleMatch = (user.friendlyRole || '').toLowerCase().includes(searchText);\n return nameMatch || emailMatch || roleMatch;\n });\n }\n return this.sortedUsers.slice(0, this.usersToDisplayCount);\n }\n\n /**\n * Observes the selectedUsers (from multi-select checkboxes) and updates the group members\n * accordingly.\n *\n * It would be easier to clear() the groupMembers, then add all the selected users, but that\n * causes the groupMembers property to be updated twice in an ember.run cycle, raising a warning.\n */\n // selectedUsersObserver: observer('selectedUsers.[]', function () {\n // let selectedUsers = this.selectedUsers;\n // if (selectedUsers) {\n // var groupMembers = this.get('group.members');\n\n // selectedUsers.forEach(function (user) {\n // let alreadyHas = !!groupMembers.find(el => el.id === user.get('id'));\n // if (alreadyHas === false) {\n // groupMembers.pushObject(user);\n // }\n // });\n\n // groupMembers.forEach(function (user) {\n // if (user) {\n // let alreadyHas = !!selectedUsers.find(el => el.id === user.get('id'));\n // if (alreadyHas === false) {\n // groupMembers.removeObject(user);\n // }\n // }\n // });\n // }\n // }),\n\n // /**\n // * Observes when group members change. Like when you add/remove group members\n // */\n // groupMembersObserver: observer(\n // 'eligibleUsers',\n // 'group.members',\n // 'group.members.[]',\n // function () {\n // once(this, 'updateSelectedUsers');\n // }\n // ),\n\n async updateSelectedUsers() {\n try {\n for (const user of this.eligibleUsers) {\n const inGroup = await user.isInGroup(this.args.group.id);\n user.inGroup = inGroup;\n }\n this.eligibleUsersWithInGroup = this.eligibleUsers;\n this.selectedUsers = this.eligibleUsers.filter(el => el.inGroup);\n } catch (e) {\n return;\n }\n }\n // newSelection is the array of users. Value is the person selected. operation is the result\n updateSelection(newSelection, value, operation) {\n /* we want to show a loader on large user accounts. Being conservative with 200 */\n if (this.args.users.length > MIN_USER_LIMIT_TO_SHOW_LOADER) {\n this.showLoader = true;\n }\n const group = this.args.group;\n const groupMembers = this.args.group.members;\n const isBeingAdded = operation === 'added';\n if (isBeingAdded) {\n value.groups.push(group);\n groupMembers.push(value);\n } else {\n value.groups.splice(value.groups.indexOf(group), 1);\n groupMembers.splice(groupMembers.indexOf(value), 1);\n }\n this.updateSelectedUsers();\n this.args.onSaveUserAddedOrRemoved().then(() => {\n if (this.hideLoader) {\n this.showLoader = false;\n }\n });\n }\n setupScrollListener(element) {\n element.addEventListener('scroll', () => {\n if (element.scrollTop + element.clientHeight >= element.scrollHeight) {\n this.onShowMoreUsers();\n }\n });\n }\n onShowMoreUsers() {\n this.usersToDisplayCount = this.usersToDisplayCount + USERS_TO_LOAD;\n }\n\n //prevents the parent element from scrolling when the user checks a checkbox that is in the middle of the scrollable area\n stopPropagation(event) {\n event.stopPropagation();\n const parentElement = event.target.closest('.overflow-scroll');\n if (parentElement) {\n // Capture the current scroll position\n const currentScrollTop = parentElement.scrollTop;\n\n // Restore the scroll position after the event\n (0, _runloop.later)(() => {\n parentElement.scrollTop = currentScrollTop;\n }, 0); // Use `later` to ensure this runs after the event is processed\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"eligibleUsersWithInGroup\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return [];\n }\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"selectedUsers\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return [];\n }\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"searchText\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return '';\n }\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"usersToDisplayCount\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return USERS_TO_SHOW;\n }\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"showLoader\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"hideLoader\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return this.args.hideLoader;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"updateSelection\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateSelection\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setupScrollListener\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setupScrollListener\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onShowMoreUsers\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onShowMoreUsers\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"stopPropagation\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"stopPropagation\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CustomLearnerGroupAddUsersComponent);\n});","define(\"vosaic/components/custom-learner-group-list-item-member/index\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/array\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _service, _array, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/array\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n {{@member.displayName}}\n \n {{@member.friendlyRole}}\n {{@member.emailAddress}}\n \n {{#if this.canBeGroupOwner}}\n
\n \n
\n {{/if}}\n \n */\n {\n \"id\": \"wqpQzd8a\",\n \"block\": \"[[[11,0],[24,0,\\\"p-y-xs list-group-expandable-item\\\"],[4,[38,1],[[30,0,[\\\"onInsert\\\"]]],null],[12],[1,[30,1,[\\\"displayName\\\"]]],[1,\\\"\\\\n \\\"],[10,\\\"small\\\"],[12],[1,\\\"\\\\n \\\"],[10,1],[15,0,[29,[\\\"display-inline-block pull-xs-right label label-pill\\\\n \\\",[30,1,[\\\"roleLabel\\\"]]]]],[12],[1,[30,1,[\\\"friendlyRole\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"display-block\\\"],[12],[1,[30,1,[\\\"emailAddress\\\"]]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"canBeGroupOwner\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"c-inputs-stacked m-t-xs\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,5],null,[[\\\"@class\\\",\\\"@name\\\",\\\"@type\\\",\\\"@disabled\\\",\\\"@labelText\\\",\\\"@labelClass\\\",\\\"@value\\\",\\\"@onChange\\\"],[\\\"c-checkbox\\\",\\\"MakeGroupOwner\\\",\\\"checkbox\\\",[30,0,[\\\"isGroupOwner\\\"]],\\\"Group Owner\\\",\\\"text-success-ally-dark font-weight-bold small\\\",[30,0,[\\\"isGroupOwner\\\"]],[30,0,[\\\"onChangeGroupOwner\\\"]]]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[13]],[\\\"@member\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"small\\\",\\\"span\\\",\\\"if\\\",\\\"input-check-radio\\\"]]\",\n \"moduleName\": \"vosaic/components/custom-learner-group-list-item-member/index.hbs\",\n \"isStrictMode\": false\n });\n let CustomLearnerGroupListItemMemberComponent = _exports.default = (_class = class CustomLearnerGroupListItemMemberComponent extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"constants\", _descriptor, this);\n _initializerDefineProperty(this, \"isGroupOwner\", _descriptor2, this);\n }\n get canBeGroupOwner() {\n return this.args.member.role === this.constants.roles.Educator || this.args.member.role === this.constants.roles.Administrator || this.args.member.role === this.constants.roles.SuperAdmin;\n }\n onInsert() {\n this.setGroupOwner();\n this.args.registerListMembers(this);\n }\n onChangeGroupOwner() {\n this.args.setGroupOwner(this.args.member);\n }\n setGroupOwner() {\n this.isGroupOwner = this.args.member.id === this.args.group.createdBy;\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"constants\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"isGroupOwner\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"onInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onChangeGroupOwner\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onChangeGroupOwner\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setGroupOwner\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setGroupOwner\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CustomLearnerGroupListItemMemberComponent);\n});","define(\"vosaic/components/custom-learner-group-list-item/index\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/array\", \"@ember/template-factory\"], function (_exports, _component, _object, _component2, _tracking, _service, _array, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/array\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n \n {{#if this.isActive}}\n \n
\n \n {{#if this.isShowingMembers}}\n \n {{else}}\n \n {{/if}}\n \n {{this.userCount}}\n Users\n {{@group.name}}\n {{#if this.groupOwner}}\n Date Added: {{moment-format\n @group.createdAt\n 'M/DD/YY h:mm a'\n }}\n by\n {{this.groupOwner.firstName}}\n {{this.groupOwner.lastName}}\n {{else}}\n Date Added: {{moment-format\n @group.createdAt\n 'M/DD/YY h:mm a'\n }} by \n {{#if this.isNewMode}}\n {{@user.firstName}} {{@user.lastName}}\n {{else}}\n Group owner was deleted\n {{/if}}\n \n {{/if}}\n \n
\n \n {{#if this.isShowingMembers}}\n
\n {{#each this.validMembers key='id' as |member|}}\n \n \n {{else}}\n There are no users in this\n group.\n \n {{/each}}\n
\n {{/if}}\n \n {{else}}\n \n \n \n \n \n {{this.userCount}}\n Users\n {{@group.name}}\n {{#if this.groupOwner}}\n Date Added: {{moment-format\n @group.createdAt\n 'M/DD/YY h:mm a'\n }}\n by\n {{this.groupOwner.firstName}}\n {{this.groupOwner.lastName}}\n {{else}}\n Date Added: {{moment-format\n @group.createdAt\n 'M/DD/YY h:mm a'\n }} by \n {{#if this.isNewMode}}\n {{@user.firstName}} {{@user.lastName}}\n {{else}}\n Group owner was deleted\n {{/if}}\n \n {{/if}}\n \n {{/if}}\n \n \n */\n {\n \"id\": \"0DuHE/uG\",\n \"block\": \"[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isActive\\\"]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"list-group-item active\\\"],[16,1,[30,1,[\\\"id\\\"]]],[24,\\\"aria-current\\\",\\\"true\\\"],[24,4,\\\"button\\\"],[4,[38,2],[\\\"click\\\",[30,0,[\\\"toggleShowingMembers\\\"]]],null],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[14,0,\\\"icon icon-success icon-sm\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isShowingMembers\\\"]],[[[1,\\\" \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#caret-bottom\\\",\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#caret-right\\\",\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"label label-default label-pill pull-xs-right\\\"],[12],[1,[30,0,[\\\"userCount\\\"]]],[1,\\\"\\\\n Users\\\"],[13],[1,\\\"\\\\n \\\"],[1,[30,1,[\\\"name\\\"]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"groupOwner\\\"]],[[[1,\\\" \\\"],[10,1],[14,0,\\\"smaller display-block m-l-sm m-t-xxs\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Date Added:\\\"],[13],[1,\\\" \\\"],[1,[28,[35,8],[[30,1,[\\\"createdAt\\\"]],\\\"M/DD/YY h:mm a\\\"],null]],[1,\\\"\\\\n by\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,[30,0,[\\\"groupOwner\\\",\\\"firstName\\\"]]],[1,\\\"\\\\n \\\"],[1,[30,0,[\\\"groupOwner\\\",\\\"lastName\\\"]]],[13],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,1],[14,0,\\\"smaller display-block m-l-sm m-t-xxs\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Date Added:\\\"],[13],[1,\\\" \\\"],[1,[28,[35,8],[[30,1,[\\\"createdAt\\\"]],\\\"M/DD/YY h:mm a\\\"],null]],[1,\\\" by \\\"],[10,\\\"strong\\\"],[14,0,\\\"text-danger\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isNewMode\\\"]],[[[1,\\\" \\\"],[1,[30,2,[\\\"firstName\\\"]]],[1,\\\" \\\"],[1,[30,2,[\\\"lastName\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" Group owner was deleted\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isShowingMembers\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"list-group-item active p-y-none\\\"],[14,5,\\\"border-top:0;\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,10],[[28,[37,10],[[30,0,[\\\"validMembers\\\"]]],null]],null],\\\"id\\\",[[[1,\\\"\\\\n \\\"],[8,[39,11],null,[[\\\"@member\\\",\\\"@setGroupOwner\\\",\\\"@registerListMembers\\\",\\\"@group\\\"],[[30,3],[30,0,[\\\"setGroupOwner\\\"]],[30,0,[\\\"registerListMembers\\\"]],[30,1]]],null],[1,\\\"\\\\n\\\"]],[3]],[[[1,\\\" \\\"],[10,\\\"small\\\"],[14,0,\\\"display-block p-y-sm font-weight-normal\\\"],[12],[10,\\\"em\\\"],[12],[1,\\\"There are no users in this\\\\n group.\\\"],[13],[13],[1,\\\"\\\\n\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"list-group-item border-r-dark\\\"],[16,1,[30,1,[\\\"id\\\"]]],[24,4,\\\"button\\\"],[4,[38,2],[\\\"click\\\",[28,[37,14],[[30,0,[\\\"onGoToGroup\\\"]],[30,1,[\\\"id\\\"]]],null]],null],[12],[1,\\\"\\\\n\\\\n \\\"],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[14,0,\\\"icon icon-dark icon-sm\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#caret-right\\\",\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"label label-default label-pill pull-xs-right\\\"],[12],[1,[30,0,[\\\"userCount\\\"]]],[1,\\\"\\\\n Users\\\"],[13],[1,\\\"\\\\n \\\"],[1,[30,1,[\\\"name\\\"]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"groupOwner\\\"]],[[[1,\\\" \\\"],[10,1],[14,0,\\\"smaller display-block m-l-sm m-t-xxs\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Date Added:\\\"],[13],[1,\\\" \\\"],[1,[28,[35,8],[[30,1,[\\\"createdAt\\\"]],\\\"M/DD/YY h:mm a\\\"],null]],[1,\\\"\\\\n by\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,[30,0,[\\\"groupOwner\\\",\\\"firstName\\\"]]],[1,\\\"\\\\n \\\"],[1,[30,0,[\\\"groupOwner\\\",\\\"lastName\\\"]]],[13],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,1],[14,0,\\\"smaller display-block m-l-sm m-t-xxs\\\"],[12],[10,\\\"strong\\\"],[12],[1,\\\"Date Added:\\\"],[13],[1,\\\" \\\"],[1,[28,[35,8],[[30,1,[\\\"createdAt\\\"]],\\\"M/DD/YY h:mm a\\\"],null]],[1,\\\" by \\\"],[10,\\\"strong\\\"],[15,0,[29,[[52,[30,0,[\\\"isNewMode\\\"]],\\\"\\\",\\\"text-danger\\\"]]]],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isNewMode\\\"]],[[[1,\\\" \\\"],[1,[30,2,[\\\"firstName\\\"]]],[1,\\\" \\\"],[1,[30,2,[\\\"lastName\\\"]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" Group owner was deleted\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\"\\\\n\\\"],[8,[39,15],null,[[\\\"@shouldShow\\\",\\\"@onCancel\\\",\\\"@onConfirm\\\"],[[30,0,[\\\"showGroupChangeModal\\\"]],[30,0,[\\\"onCancelGroupOwnerChange\\\"]],[30,0,[\\\"onConfirmGroupOwnerChange\\\"]]]],null]],[\\\"@group\\\",\\\"@user\\\",\\\"member\\\"],[\\\"if\\\",\\\"button\\\",\\\"on\\\",\\\"div\\\",\\\"svg\\\",\\\"use\\\",\\\"span\\\",\\\"strong\\\",\\\"moment-format\\\",\\\"each\\\",\\\"-track-array\\\",\\\"custom-learner-group-list-item-member\\\",\\\"small\\\",\\\"em\\\",\\\"fn\\\",\\\"modal-group-change-warning\\\"]]\",\n \"moduleName\": \"vosaic/components/custom-learner-group-list-item/index.hbs\",\n \"isStrictMode\": false\n });\n let CustomLearnerGroupListItemComponent = _exports.default = (_class = class CustomLearnerGroupListItemComponent extends _component2.default {\n constructor() {\n super(...arguments);\n _initializerDefineProperty(this, \"router\", _descriptor, this);\n _initializerDefineProperty(this, \"constants\", _descriptor2, this);\n _initializerDefineProperty(this, \"store\", _descriptor3, this);\n _initializerDefineProperty(this, \"collapse\", _descriptor4, this);\n _initializerDefineProperty(this, \"groups\", _descriptor5, this);\n _initializerDefineProperty(this, \"members\", _descriptor6, this);\n _initializerDefineProperty(this, \"pendingGroupOwner\", _descriptor7, this);\n _initializerDefineProperty(this, \"showGroupChangeModal\", _descriptor8, this);\n _defineProperty(this, \"registeredListMembers\", (0, _array.A)());\n this.collapse = false;\n }\n get isNewMode() {\n return this.router.currentRoute.name === 'groups.new';\n }\n get sortedMembers() {\n return [...this.args.group.members].sort((a, b) => {\n const nameA = a.displayName.toLowerCase();\n const nameB = b.displayName.toLowerCase();\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n const emailA = (a.emailAddress || '').toLowerCase();\n const emailB = (b.emailAddress || '').toLowerCase();\n if (emailA < emailB) {\n return -1;\n }\n if (emailA > emailB) {\n return 1;\n }\n return 0;\n });\n }\n get validMembers() {\n return this.sortedMembers.filter(member => !member.isDeleted);\n }\n get group() {\n return this.args.group;\n }\n get userCount() {\n return this.validMembers.length; //this.args.group.members.length;\n }\n get groupOwner() {\n return this.args.group.createdBy ? this.args.users.find(el => el.id === this.args.group.createdBy) : false;\n }\n get isShowingMembers() {\n return !this.collapse;\n }\n get isActive() {\n if (this.args.group.id === this.args.activeGroupId) {\n //scroll selected group to top\n const groupId = document.getElementById(this.args.activeGroupId);\n if (groupId) {\n groupId.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n inline: 'start'\n });\n }\n }\n return this.args.group.id === this.args.activeGroupId;\n }\n toggleShowingMembers() {\n this.collapse = !this.collapse;\n }\n onGoToGroup(groupId) {\n this.collapse = false;\n //focus on first name input\n const firstInput = document.querySelector('.group-name-input');\n if (firstInput) {\n firstInput.focus();\n }\n this.args.goToGroupsEdit(groupId);\n }\n setGroupOwner(member) {\n this.pendingGroupOwner = member;\n if (this.groupOwner === this.args.user && this.args.user.role === this.constants.roles.Educator) {\n this.showGroupChangeModal = true;\n } else {\n this.onConfirmGroupOwnerChange();\n }\n }\n async onConfirmGroupOwnerChange() {\n this.group.createdBy = this.pendingGroupOwner.id;\n await this.group.save();\n this.registeredListMembers.forEach(m => m.setGroupOwner());\n this.pendingGroupOwner = null;\n this.showGroupChangeModal = false;\n if (this.args.user.role === this.constants.roles.Educator) {\n this.router.transitionTo('groups');\n }\n }\n onCancelGroupOwnerChange() {\n this.registeredListMembers.forEach(m => m.setGroupOwner());\n this.pendingGroupOwner = null;\n this.showGroupChangeModal = false;\n }\n registerListMembers(member) {\n this.registeredListMembers.push(member);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"constants\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"collapse\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"groups\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return this.args.groups;\n }\n }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"members\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return (0, _array.A)();\n }\n }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"pendingGroupOwner\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"showGroupChangeModal\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"toggleShowingMembers\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleShowingMembers\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onGoToGroup\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onGoToGroup\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"setGroupOwner\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"setGroupOwner\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onConfirmGroupOwnerChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onConfirmGroupOwnerChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onCancelGroupOwnerChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onCancelGroupOwnerChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"registerListMembers\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"registerListMembers\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, CustomLearnerGroupListItemComponent);\n});","define(\"vosaic/components/draggable-object-target\", [\"exports\", \"ember-drag-drop/components/draggable-object-target\"], function (_exports, _draggableObjectTarget) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.defineProperty(_exports, \"default\", {\n enumerable: true,\n get: function () {\n return _draggableObjectTarget.default;\n }\n });\n 0; //eaimeta@70e063a35619d71f0,\"ember-drag-drop/components/draggable-object-target\"eaimeta@70e063a35619d71f\n});","define(\"vosaic/components/draggable-object\", [\"exports\", \"ember-drag-drop/components/draggable-object\"], function (_exports, _draggableObject) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.defineProperty(_exports, \"default\", {\n enumerable: true,\n get: function () {\n return _draggableObject.default;\n }\n });\n 0; //eaimeta@70e063a35619d71f0,\"ember-drag-drop/components/draggable-object\"eaimeta@70e063a35619d71f\n});","define(\"vosaic/components/drawer-help/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"vosaic/config/environment\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _environment, _tracking, _service, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"vosaic/config/environment\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n \n Close Help\n
\n \n
\n \n \n */\n {\n \"id\": \"xZ91JWl5\",\n \"block\": \"[[[11,0],[24,0,\\\"drawer-right card border-square border-none box-shadow\\\"],[24,5,\\\"z-index: 10000;\\\"],[17,1],[12],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm pos-a send-to-top m-a-xxs\\\"],[24,4,\\\"button\\\"],[4,[38,2],[\\\"click\\\",[30,0,[\\\"launchHelp\\\"]]],null],[12],[1,\\\"Close Help\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[12],[1,\\\"\\\\n \\\"],[10,\\\"iframe\\\"],[14,\\\"title\\\",\\\"Help\\\"],[15,\\\"src\\\",[30,0,[\\\"iframeUrl\\\"]]],[14,\\\"width\\\",\\\"100%\\\"],[14,\\\"height\\\",\\\"100%\\\"],[14,5,\\\"\\\\n border: 0;\\\\n padding: 0 0 48px 0;\\\\n margin: 0;\\\\n width: 100%;\\\\n height: 100%;\\\\n position: absolute;\\\\n top: 0;\\\\n right: 0;\\\\n bottom: 0;\\\\n left: 0;\\\\n display: block;\\\\n\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[13]],[\\\"&attrs\\\"],[\\\"div\\\",\\\"button\\\",\\\"on\\\",\\\"iframe\\\"]]\",\n \"moduleName\": \"vosaic/components/drawer-help/index.hbs\",\n \"isStrictMode\": false\n });\n let DrawerHelpComponent = _exports.default = (_class = class DrawerHelpComponent extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"helpUrl\", _descriptor, this);\n }\n get iframeUrl() {\n const str = window.location.pathname;\n const arr = str.split('/');\n let tag = arr[1];\n if (arr[1] === 'accounts') {\n tag = arr[2];\n }\n if (_environment.default.helpHost === 'http://localhost:4200') {\n if (this.args.helpPath) {\n return _environment.default.helpHost + this.args.helpPath + '?mini=yes&ibmem=' + this.args.currentUserEmail + '&ibmorg=' + this.args.organizationName + '&ibmfn=' + this.args.currentUserFullName + '&ibmtm=' + this.args.currentUserIndustry;\n } else {\n return _environment.default.helpHost;\n }\n } else {\n /* eslint no-lonely-if: */\n if (this.args.helpPath) {\n return _environment.default.helpHost + this.args.helpPath + '?mini=yes&ibmem=' + this.args.currentUserEmail + '&ibmorg=' + this.args.organizationName + '&ibmfn=' + this.args.currentUserFullName + '&ibmtm=' + this.args.currentUserIndustry;\n } else {\n return this.helpUrl + '&ibmem=' + this.args.currentUserEmail + '&ibmorg=' + this.args.organizationName + '&ibmfn=' + this.args.currentUserFullName + '&ibmtm=' + this.args.currentUserIndustry + '&tag=*' + tag + '*';\n }\n }\n }\n launchHelp() {\n this.args.launchHelp();\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"helpUrl\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return _environment.default.helpHost + '/support/category/vosaic-connect?mini=yes';\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"launchHelp\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"launchHelp\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, DrawerHelpComponent);\n});","define(\"vosaic/components/editable-text/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n {{#if this.isEditing}}\n \n {{else}}\n {{@value}}\n {{/if}}\n */\n {\n \"id\": \"+66kkKdv\",\n \"block\": \"[[[41,[30,0,[\\\"isEditing\\\"]],[[[1,\\\" \\\"],[8,[39,1],null,[[\\\"@type\\\",\\\"@class\\\",\\\"@value\\\",\\\"@name\\\",\\\"@placeholder\\\",\\\"@onValueChange\\\",\\\"@min\\\",\\\"@max\\\",\\\"@step\\\",\\\"@maxlength\\\",\\\"@autocomplete\\\",\\\"@data-polyfill\\\",\\\"@data-format\\\",\\\"@disabled\\\",\\\"@onBlur\\\",\\\"@overridePadding\\\",\\\"@formControlClass\\\",\\\"@noFormGroup\\\",\\\"@labelClass\\\",\\\"@labelText\\\"],[[30,1],[30,2],[30,3],[30,0,[\\\"nameComputed\\\"]],[30,4],[30,5],[30,6],[30,7],[30,8],[30,9],[30,10],[30,11],[30,12],[30,13],[30,0,[\\\"onBlur\\\"]],\\\"p-x-none\\\",[30,14],[30,15],[30,16],[30,17]]],null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,0],[16,1,[30,18]],[24,\\\"tabindex\\\",\\\"0\\\"],[24,0,\\\"tag-text full-width p-y-xxs border-radius-sm\\\"],[4,[38,3],[\\\"focus\\\",[30,0,[\\\"onFocus\\\"]]],null],[4,[38,3],[\\\"click\\\",[30,0,[\\\"onFocus\\\"]]],null],[12],[1,[30,3]],[13],[1,\\\"\\\\n\\\"]],[]]]],[\\\"@type\\\",\\\"@class\\\",\\\"@value\\\",\\\"@placeholder\\\",\\\"@onValueChange\\\",\\\"@min\\\",\\\"@max\\\",\\\"@step\\\",\\\"@maxlength\\\",\\\"@autocomplete\\\",\\\"@dataPolyfill\\\",\\\"@dataFormat\\\",\\\"@disabled\\\",\\\"@formControlClass\\\",\\\"@noFormGroup\\\",\\\"@inputLabelClass\\\",\\\"@inputLabelText\\\",\\\"@id\\\"],[\\\"if\\\",\\\"input-component\\\",\\\"div\\\",\\\"on\\\"]]\",\n \"moduleName\": \"vosaic/components/editable-text/index.hbs\",\n \"isStrictMode\": false\n });\n let EditableTextComponent = _exports.default = (_class = class EditableTextComponent extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"isEditing\", _descriptor, this);\n }\n onFocus() {\n this.isEditing = true;\n this.args.onFocus?.();\n }\n onBlur() {\n this.isEditing = false;\n this.args.onBlur?.();\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"isEditing\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"onFocus\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onFocus\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onBlur\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onBlur\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, EditableTextComponent);\n});","define(\"vosaic/components/ember-power-select\", [\"exports\", \"@ember/object\", \"@ember/service\", \"ember-power-select/components/power-select\"], function (_exports, _object, _service, _powerSelect) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/service\",0,\"ember-power-select/components/power-select\"eaimeta@70e063a35619d71f\n var _default = _exports.default = _powerSelect.default.extend({\n // Place here your system-wide preferences\n searchEnabled: true,\n allowClear: true,\n // You can even use computed properties to do other stuff, like apply i18n, that wouldn't be\n // possible with static configuration.\n i18n: (0, _service.service)(),\n loadingMessage: (0, _object.computed)('i18n.locale', function () {\n return this.i18n.t('selects.loading');\n })\n });\n});","define(\"vosaic/components/engagement-summary-cards/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/template-factory\"], function (_exports, _component, _component2, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n {{! A description list rather than plain divs so each value is programmatically\n tied to its label — a screen reader announces \"Total Organizations, 6\"\n instead of two unrelated text nodes. HTML5 allows the
grouping a\n dt/dd pair inside a
, which is what gives each card its own box. }}\n \n */\n {\n \"id\": \"rVPIqdMW\",\n \"block\": \"[[[11,\\\"dl\\\"],[24,0,\\\"engagement-summary-cards\\\"],[24,\\\"data-test-summary-cards\\\",\\\"\\\"],[17,1],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,2],[[28,[37,2],[[30,0,[\\\"cards\\\"]]],null]],null],null,[[[1,\\\" \\\"],[10,0],[14,0,\\\"engagement-summary-card\\\"],[15,\\\"data-test-summary-card\\\",[30,2,[\\\"key\\\"]]],[12],[1,\\\"\\\\n \\\"],[10,\\\"dt\\\"],[14,0,\\\"engagement-card-label\\\"],[12],[1,[30,2,[\\\"label\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"dd\\\"],[15,0,[29,[\\\"engagement-card-value \\\",[30,2,[\\\"valueClass\\\"]]]]],[15,\\\"data-test-summary-card-value\\\",[30,2,[\\\"key\\\"]]],[12],[1,[30,2,[\\\"value\\\"]]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[2]],null],[13]],[\\\"&attrs\\\",\\\"card\\\"],[\\\"dl\\\",\\\"each\\\",\\\"-track-array\\\",\\\"div\\\",\\\"dt\\\",\\\"dd\\\"]]\",\n \"moduleName\": \"vosaic/components/engagement-summary-cards/index.hbs\",\n \"isStrictMode\": false\n });\n\n /**\n * Aggregate summary cards for the SuperAdmin engagement page. (NV-303)\n *\n * Counts describe the FULL dataset, so callers must pass the unfiltered source\n * array (`this.orgs`), never the filtered view. Every count is a getter over\n * `@orgs`, so an on-page claim/release (NV-325/326) — which mutates a tracked\n * attr on a record in that array — recomputes the cards with no extra wiring.\n *\n * \n */\n\n // Card order and labels come from the NV-319 mockup (`usage 2.html` lines\n // 366-398). `valueClass` maps to the color rules in app.scss; Total and\n // Unclaimed are deliberately uncolored there.\n const CARDS = [{\n key: 'total',\n label: 'Total Organizations',\n valueClass: ''\n }, {\n key: 'atRisk',\n label: 'At Risk',\n valueClass: 'engagement-card-red'\n }, {\n key: 'engaged',\n label: 'Engaged',\n valueClass: 'engagement-card-amber'\n }, {\n key: 'highlyEngaged',\n label: 'Highly Engaged',\n valueClass: 'engagement-card-green'\n }, {\n key: 'unclaimed',\n label: 'Unclaimed',\n valueClass: ''\n }, {\n key: 'trial',\n label: 'Trial',\n valueClass: 'engagement-card-blue'\n }, {\n key: 'active',\n label: 'Active',\n valueClass: 'engagement-card-green'\n }, {\n key: 'expired',\n label: 'Expired',\n valueClass: 'engagement-card-red'\n }];\n class EngagementSummaryCards extends _component2.default {\n get orgs() {\n return this.args.orgs ?? [];\n }\n\n /**\n * All eight counts from a single pass over the dataset. One pass rather than\n * eight `.filter().length` calls because every card reads the same array and\n * any claim change re-runs the whole set anyway.\n *\n * `tier` and `accountType` are the model's own getters (NV-305 / NV-307), so\n * the vocabulary is theirs — both are total functions, which is why the three\n * tier counts and the three account-type counts each sum to `total`.\n */\n get counts() {\n const counts = {\n total: this.orgs.length,\n atRisk: 0,\n engaged: 0,\n highlyEngaged: 0,\n unclaimed: 0,\n trial: 0,\n active: 0,\n expired: 0\n };\n for (const org of this.orgs) {\n if (org.tier === 'At Risk') {\n counts.atRisk++;\n } else if (org.tier === 'Engaged') {\n counts.engaged++;\n } else if (org.tier === 'Highly Engaged') {\n counts.highlyEngaged++;\n }\n if (!org.isClaimed) {\n counts.unclaimed++;\n }\n if (org.accountType === 'Trial') {\n counts.trial++;\n } else if (org.accountType === 'Active') {\n counts.active++;\n } else if (org.accountType === 'Expired') {\n counts.expired++;\n }\n }\n return counts;\n }\n get cards() {\n const counts = this.counts;\n return CARDS.map(card => ({\n ...card,\n value: counts[card.key]\n }));\n }\n }\n _exports.default = EngagementSummaryCards;\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, EngagementSummaryCards);\n});","define(\"vosaic/components/expiration-notification/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/runloop\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _tracking, _object, _runloop, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/runloop\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n {{#if @showExpirationNotice}}\n {{#if this.shouldShow90Notification}}\n
\n Your Account Expires
in {{this.daysLeft}} day{{if (not-eq this.daysLeft 1) 's'}}.
\n {{#if this.isAdministrator}}\n Renew Today\n {{else}}\n Notify Your Administrator\n {{/if}}\n
\n {{/if}}\n {{else}}\n {{#if this.showNotification}}\n
\n Your Account Expires in {{this.daysLeft}} day{{if (not-eq this.daysLeft 1) 's'}}.\n {{#if this.isAdministrator}}{{else}} Notify Your Administrator{{/if}}\n {{!-- --}}\n {{#if this.isAdministrator}}\n {{#if this.hasLessThanFiveSeats}}\n Renew Today\n {{else}}\n Contact Us To Renew\n {{/if}}\n {{/if}}\n \n
\n {{/if}}\n {{/if}}\n */\n {\n \"id\": \"hPeqlC/s\",\n \"block\": \"[[[41,[30,1],[[[41,[30,0,[\\\"shouldShow90Notification\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"dropdown-item code-btn-b p-x-xs p-y-sm text-xs-center\\\"],[14,5,\\\"width:250px; white-space: wrap;\\\"],[12],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"display-inline-block\\\"],[12],[1,\\\"Your Account Expires \\\"],[10,\\\"br\\\"],[12],[13],[1,\\\"in \\\"],[10,\\\"strong\\\"],[12],[1,[30,0,[\\\"daysLeft\\\"]]],[13],[1,\\\" day\\\"],[1,[52,[28,[37,5],[[30,0,[\\\"daysLeft\\\"]],1],null],\\\"s\\\"]],[1,\\\".\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isAdministrator\\\"]],[[[1,\\\" \\\"],[8,[39,6],[[24,0,\\\"btn btn-inverse-outline btn-sm m-r-xs m-t-xxs font-weight-bold\\\"],[4,[38,7],[\\\"click\\\",[30,0,[\\\"dismiss\\\"]]],null]],[[\\\"@route\\\"],[\\\"accounts.purchase\\\"]],[[\\\"default\\\"],[[[[1,\\\"Renew Today\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,3],[15,6,[29,[\\\"mailto:?subject=\\\",[30,0,[\\\"emailSubject\\\"]],\\\"&body=\\\",[30,0,[\\\"emailBody\\\"]]]]],[14,0,\\\"btn btn-primary btn-sm m-t-xs\\\"],[12],[1,\\\"Notify Your Administrator\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]],[[[41,[30,0,[\\\"showNotification\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"site-alert site-expiration-alert full-width pos-r\\\"],[14,\\\"role\\\",\\\"alert\\\"],[14,5,\\\"z-index: 1; top:116px;\\\"],[12],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"display-inline-block font-weight-bold\\\"],[12],[1,\\\"Your Account Expires in \\\"],[1,[30,0,[\\\"daysLeft\\\"]]],[1,\\\" day\\\"],[1,[52,[28,[37,5],[[30,0,[\\\"daysLeft\\\"]],1],null],\\\"s\\\"]],[1,\\\".\\\"],[13],[1,\\\"\\\\n \\\"],[41,[30,0,[\\\"isAdministrator\\\"]],[[],[]],[[[1,\\\" \\\"],[10,3],[15,6,[29,[\\\"mailto:?subject=\\\",[30,0,[\\\"emailSubject\\\"]],\\\"&body=\\\",[30,0,[\\\"emailBody\\\"]]]]],[14,0,\\\"btn btn-primary btn-sm m-l-sm\\\"],[12],[1,\\\"Notify Your Administrator\\\"],[13]],[]]],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"isAdministrator\\\"]],[[[41,[30,0,[\\\"hasLessThanFiveSeats\\\"]],[[[1,\\\" \\\"],[8,[39,6],[[24,0,\\\"btn btn-primary btn-sm m-r-xs font-weight-bold m-l-sm\\\"],[4,[38,7],[\\\"click\\\",[30,0,[\\\"dismiss\\\"]]],null]],[[\\\"@route\\\"],[\\\"accounts.purchase\\\"]],[[\\\"default\\\"],[[[[1,\\\"Renew Today\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,3],[16,6,[29,[[30,0,[\\\"renewalRequestUrl\\\"]]]]],[24,\\\"target\\\",\\\"_blank\\\"],[24,0,\\\"btn btn-primary btn-sm m-l-sm font-weight-bold\\\"],[24,\\\"rel\\\",\\\"noopener noreferrer\\\"],[4,[38,7],[\\\"click\\\",[30,0,[\\\"dismiss\\\"]]],null],[12],[1,\\\"Contact Us To Renew\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],null],[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary-outline btn-sm font-weight-bold\\\"],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[30,0,[\\\"dismiss\\\"]]],null],[12],[1,\\\"Dismiss\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]]],[\\\"@showExpirationNotice\\\"],[\\\"if\\\",\\\"div\\\",\\\"span\\\",\\\"br\\\",\\\"strong\\\",\\\"not-eq\\\",\\\"link-to\\\",\\\"on\\\",\\\"a\\\",\\\"button\\\"]]\",\n \"moduleName\": \"vosaic/components/expiration-notification/index.hbs\",\n \"isStrictMode\": false\n });\n let ExpirationNotificationComponent = _exports.default = (_class = class ExpirationNotificationComponent extends _component2.default {\n // handle for cancellation\n\n constructor() {\n super(...arguments);\n _initializerDefineProperty(this, \"currentUser\", _descriptor, this);\n _initializerDefineProperty(this, \"subscriptionExpiry\", _descriptor2, this);\n _initializerDefineProperty(this, \"router\", _descriptor3, this);\n _initializerDefineProperty(this, \"modelReloader\", _descriptor4, this);\n // add this\n _initializerDefineProperty(this, \"showNotification\", _descriptor5, this);\n _initializerDefineProperty(this, \"shouldShow90Notification\", _descriptor6, this);\n _initializerDefineProperty(this, \"daysLeft\", _descriptor7, this);\n _initializerDefineProperty(this, \"pricingPlanExpiresValue\", _descriptor8, this);\n _initializerDefineProperty(this, \"myOrg\", _descriptor9, this);\n _defineProperty(this, \"_loadTimer\", null);\n this._onRouteChange = () => this._refreshIfNeeded();\n if (this.router?.on) {\n this.router.on('routeDidChange', this._onRouteChange);\n }\n this.loadData();\n if (!this.myOrg) {\n const delay = typeof this.args?.delayMs === 'number' ? this.args.delayMs : 500;\n if (delay <= 0) {\n // run immediately next tick\n (0, _runloop.later)(this, this.loadData, 0);\n } else {\n this._loadTimer = (0, _runloop.later)(this, this.loadData, delay);\n }\n }\n }\n async loadData() {\n try {\n this.myOrg = await this.args.myOrg;\n this.daysLeft = await this.subscriptionExpiry.getDaysLeft(this.args.expirationDate);\n let shouldShow = await this.subscriptionExpiry.shouldShowNotification(this.args.expirationDate, this.args.lastSeenAt, this.args.friendlyRole);\n let shouldShow90 = await this.subscriptionExpiry.shouldShow90Notification(this.args.expirationDate, this.args.lastSeenAt, this.args.friendlyRole);\n if (shouldShow) {\n this.showNotification = true;\n }\n if (shouldShow90) {\n this.shouldShow90Notification = true;\n }\n } catch (e) {\n // silent\n }\n }\n get isAdministrator() {\n return this.args.friendlyRole === 'Administrator';\n }\n get showNotificationInDropdown() {\n return this.showNotification;\n }\n get pricingPlanExpires() {\n return this.pricingPlanExpiresValue;\n }\n get isTrial() {\n try {\n const planName = this.myOrg?.pricingPlan?.name || this.myOrg?.pricingPlan?.get && this.myOrg.pricingPlan.get('name');\n if (!planName) return false;\n return /trial/i.test(planName);\n } catch (_e) {\n return false;\n }\n }\n get hasLessThanFiveSeats() {\n const seats = this.myOrg?.pricingPlan?.userLimit || this.myOrg?.pricingPlan?.get?.('userLimit') || 0;\n return seats <= 5;\n }\n get renewalRequestUrl() {\n //TODO: check if trial and use a different URL.\n const base = 'https://vosaic.com/page/request-a-renewal';\n try {\n const user = this.args.currentUser.user;\n const org = this.myOrg;\n const email = encodeURIComponent(user?.emailAddress || '');\n const first = encodeURIComponent(user?.firstName || '');\n const last = encodeURIComponent(user?.lastName || '');\n const orgName = encodeURIComponent(org && (org.get ? org.get('name') : org.name) || '');\n const industry = encodeURIComponent(org && (org.get ? org.get('industry') : org.industry) || '');\n const seats = encodeURIComponent(org?.pricingPlan?.userLimit || org?.pricingPlan?.get?.('userLimit') || '');\n const params = `e=${email}&fn=${first}&ln=${last}&o=${orgName}&i=${industry}&seats=${seats}`;\n return `${base}?${params}`;\n } catch (_e) {\n return base;\n }\n }\n get emailSubject() {\n return encodeURIComponent('Our Vosaic account is expiring');\n }\n get emailBody() {\n const days = this.daysLeft ?? 'a few';\n return encodeURIComponent(`Our Vosaic account is expiring in ${days} days. Will you please reach out to sales@vosaic.com about the renewal?\\nThank you!`);\n }\n dismiss() {\n const bucket = this.subscriptionExpiry.getCurrentBucket(this.myOrg.pricingPlanExpires);\n this.subscriptionExpiry.dismissNotification(bucket, this.daysLeft);\n this.showNotification = false;\n }\n goRenew() {\n this.router.transitionTo('accounts.purchase');\n }\n _refreshIfNeeded() {\n // Re-run if we haven't resolved data yet (e.g., SPA navigation without full reload)\n if (!this.pricingPlanExpiresValue && !this._loadTimer) {\n this.loadData();\n }\n }\n willDestroy() {\n super.willDestroy?.();\n if (this.router?.off && this._onRouteChange) {\n this.router.off('routeDidChange', this._onRouteChange);\n }\n if (this._loadTimer) {\n (0, _runloop.cancel)(this._loadTimer);\n this._loadTimer = null;\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"currentUser\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"subscriptionExpiry\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"modelReloader\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"showNotification\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"shouldShow90Notification\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"daysLeft\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"pricingPlanExpiresValue\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"myOrg\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"dismiss\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"dismiss\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"goRenew\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"goRenew\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ExpirationNotificationComponent);\n});","define(\"vosaic/components/file-dropzone\", [\"exports\", \"ember-file-upload/components/file-dropzone\"], function (_exports, _fileDropzone) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.defineProperty(_exports, \"default\", {\n enumerable: true,\n get: function () {\n return _fileDropzone.default;\n }\n });\n 0; //eaimeta@70e063a35619d71f0,\"ember-file-upload/components/file-dropzone\"eaimeta@70e063a35619d71f\n});","define(\"vosaic/components/filter-by-date/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n
\n
{{this.elementId}}\n
\n Month\n \n Show All\n {{#if @showAllVideosOption}}\n Show All\n {{/if}}\n {{#each-in this.monthsToUse as |monthNumber monthName|}}\n {{monthName}}\n {{/each-in}}\n \n
\n
\n Year\n \n Show All\n {{#if @showAllVideosOption}}\n Show All\n {{/if}}\n {{#each this.yearsToUse key='year' as |year|}}\n {{year}}\n {{/each}}\n \n
\n
\n
\n */\n {\n \"id\": \"/iAdgQs/\",\n \"block\": \"[[[10,0],[15,0,[29,[[30,1]]]],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,[30,0,[\\\"elementId\\\"]]],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-6\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"label\\\"],[15,\\\"for\\\",[29,[[28,[37,2],[[30,0,[\\\"elementId\\\"]],\\\"-select-month\\\"],null]]]],[15,0,[29,[\\\"form-control-label animate-up\\\\n \\\",[52,[28,[37,4],[[30,2,[\\\"month\\\"]],\\\"all\\\"],null],\\\"\\\",\\\"bg-primary\\\"]]]],[12],[1,\\\"Month\\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,5],null,[[\\\"@id\\\",\\\"@value\\\",\\\"@action\\\",\\\"@class\\\"],[[29,[[30,0,[\\\"elementId\\\"]],\\\"-select-month\\\"]],[30,2,[\\\"month\\\"]],[30,0,[\\\"onMonthSelected\\\"]],[30,3]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n \\\"],[8,[30,4,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"all\\\"]],[[\\\"default\\\"],[[[[1,\\\"Show All\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[30,5],[[[1,\\\" \\\"],[8,[30,4,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"all\\\"]],[[\\\"default\\\"],[[[[1,\\\"Show All\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[42,[28,[37,7],[[30,0,[\\\"monthsToUse\\\"]]],null],null,[[[1,\\\" \\\"],[8,[30,4,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,7]]],[[\\\"default\\\"],[[[[1,[30,6]]],[]]]]],[1,\\\"\\\\n\\\"]],[6,7]],null],[1,\\\" \\\"]],[4]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-6\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"label\\\"],[15,\\\"for\\\",[29,[[28,[37,2],[[30,0,[\\\"elementId\\\"]],\\\"-select-year\\\"],null]]]],[15,0,[29,[\\\"form-control-label animate-up\\\\n \\\",[52,[28,[37,4],[[30,2,[\\\"year\\\"]],\\\"all\\\"],null],\\\"\\\",\\\"bg-primary\\\"]]]],[12],[1,\\\"Year\\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,5],null,[[\\\"@id\\\",\\\"@value\\\",\\\"@action\\\",\\\"@class\\\"],[[29,[[30,0,[\\\"elementId\\\"]],\\\"-select-year\\\"]],[30,2,[\\\"year\\\"]],[30,0,[\\\"onYearSelected\\\"]],[30,3]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n \\\"],[8,[30,8,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"all\\\"]],[[\\\"default\\\"],[[[[1,\\\"Show All\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[30,5],[[[1,\\\" \\\"],[8,[30,8,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"all\\\"]],[[\\\"default\\\"],[[[[1,\\\"Show All\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[42,[28,[37,8],[[28,[37,8],[[30,0,[\\\"yearsToUse\\\"]]],null]],null],\\\"year\\\",[[[1,\\\" \\\"],[8,[30,8,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,9]]],[[\\\"default\\\"],[[[[1,[30,9]]],[]]]]],[1,\\\"\\\\n\\\"]],[9]],null],[1,\\\" \\\"]],[8]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@class\\\",\\\"@selectedDate\\\",\\\"@formControlClass\\\",\\\"xs\\\",\\\"@showAllVideosOption\\\",\\\"monthName\\\",\\\"monthNumber\\\",\\\"xs\\\",\\\"year\\\"],[\\\"div\\\",\\\"label\\\",\\\"concat\\\",\\\"if\\\",\\\"equal\\\",\\\"x-select\\\",\\\"each\\\",\\\"-each-in\\\",\\\"-track-array\\\"]]\",\n \"moduleName\": \"vosaic/components/filter-by-date/index.hbs\",\n \"isStrictMode\": false\n });\n let FilterByDate = _exports.default = (_class = class FilterByDate extends _component2.default {\n constructor() {\n super(...arguments);\n _initializerDefineProperty(this, \"yearsToUse\", _descriptor, this);\n _initializerDefineProperty(this, \"monthsToUse\", _descriptor2, this);\n _initializerDefineProperty(this, \"hasBeenSet\", _descriptor3, this);\n this.yearsToUse = this.getYears();\n this.monthsToUse = this.getMonths();\n }\n getYears() {\n const currentYear = new Date().getFullYear();\n const years = [];\n let startYear = 2016;\n while (startYear <= currentYear) {\n years.push(startYear++);\n }\n return years.reverse();\n }\n getMonths() {\n return {\n 1: 'January',\n 2: 'February',\n 3: 'March',\n 4: 'April',\n 5: 'May',\n 6: 'June',\n 7: 'July',\n 8: 'August',\n 9: 'September',\n 10: 'October',\n 11: 'November',\n 12: 'December'\n };\n }\n onMonthSelected(value) {\n if (!this.hasBeenSet) {\n this.args.monthSelected(value);\n }\n this.hasBeenSet = false;\n }\n onYearSelected(value) {\n if (!this.hasBeenSet) {\n this.args.yearSelected(value);\n }\n this.hasBeenSet = false;\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"yearsToUse\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"monthsToUse\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"hasBeenSet\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"onMonthSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onMonthSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onYearSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onYearSelected\"), _class.prototype), _class);\n // import { computed } from '@ember/object';\n // import Component from '@ember/component';\n // export default Component.extend({\n // hasBeenSet: false,\n // yearsToUse: computed(function () {\n // var currentYear = new Date().getFullYear(),\n // years = [],\n // startYear = 2016;\n // while (startYear <= currentYear) {\n // years.push(startYear++);\n // }\n // return years.reverse();\n // }),\n // actions: {\n // onMonthSelected(value) {\n // if (!this.hasBeenSet) {\n // this.sendAction('monthSelected', value);\n // }\n // this.set('hasBeenSet', false);\n // },\n // onYearSelected(value) {\n // if (!this.hasBeenSet) {\n // this.sendAction('yearSelected', value);\n // }\n // this.set('hasBeenSet', false);\n // },\n // },\n // });\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FilterByDate);\n});","define(\"vosaic/components/form-button-lister/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _template, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n
\n
\n \n {{#each @buttons as |buttonInfo|}}\n \n {{!-- template-lint-disable style-concatenation --}}\n \n \n [{{buttonInfo.hotKey}}]\n \n \n {{#if @isDisabled}}\n \n \n \n {{else}}\n \n \n \n {{/if}}\n \n \n {{buttonInfo.title}}\n \n \n {{#if @canDelete}}\n \n \n \n \n \n {{/if}}\n \n Move\n \n \n {{else}}\n

No buttons added to this form. Press ADD\n BUTTON TO THIS FORM above to get started.

\n {{/each}}\n \n
\n
\n */\n {\n \"id\": \"7T6AJYey\",\n \"block\": \"[[[10,0],[14,0,\\\"card m-t-none btn-form-wrap overflow-hidden\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,1,\\\"form-button-list\\\"],[14,0,\\\"btn-list-area overflow-scroll overflow-y-scroll mini-scroll p-l-md p-t-md p-b-md p-r-xxs\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,1],null,[[\\\"@sortableObjectList\\\",\\\"@sortEndAction\\\",\\\"@enableSort\\\",\\\"@useSwap\\\",\\\"@inPlace\\\",\\\"@sortingScope\\\"],[[30,1],[30,0,[\\\"sortEndAction\\\"]],true,true,false,\\\"sortingGroup\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[37,3],[[28,[37,3],[[30,1]],null]],null],null,[[[1,\\\" \\\"],[8,[39,4],null,[[\\\"@content\\\",\\\"@isSortable\\\",\\\"@sortingScope\\\",\\\"@class\\\"],[[30,2],[30,0,[\\\"canSort\\\"]],\\\"sortingGroup\\\",\\\"btn-block btn-group\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[1,\\\" \\\"],[11,\\\"button\\\"],[16,1,[29,[[30,2,[\\\"id\\\"]]]]],[16,0,[29,[\\\"btn\\\\n \\\",[30,2,[\\\"colorClass\\\"]],\\\"\\\\n \\\",[30,2,[\\\"toggleClass\\\"]],\\\"\\\\n text-xs-left\\\"]]],[16,5,[30,0,[\\\"style\\\"]]],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[28,[37,7],[[30,0,[\\\"editButtonClicked\\\"]],[30,2]],null]],null],[12],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"text-xs-right pull-xs-right small text-uppercase text-transparent\\\"],[12],[1,\\\"\\\\n [\\\"],[1,[30,2,[\\\"hotKey\\\"]]],[1,\\\"]\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,1],[15,\\\"aria-label\\\",[29,[\\\"Edit \\\",[30,2,[\\\"title\\\"]],\\\" Button\\\"]]],[14,0,\\\"m-r-xxs pull-xs-left\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\" \\\"],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[14,0,\\\"icon icon-xs\\\"],[14,5,\\\"fill: #eee;\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#pencil-no-edit\\\",\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[14,0,\\\"icon icon-xs\\\"],[14,5,\\\"fill: #eee;\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#pencil\\\",\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"text-xs-left text-truncate pull-xs-left\\\"],[14,5,\\\"width:78%;\\\"],[12],[1,\\\"\\\\n \\\"],[1,[30,2,[\\\"title\\\"]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,4],[[[1,\\\" \\\"],[11,\\\"button\\\"],[16,1,[29,[[28,[37,12],[\\\"delete-\\\",[30,2,[\\\"id\\\"]]],null]]]],[16,\\\"aria-label\\\",[29,[\\\"Delete \\\",[30,2,[\\\"title\\\"]],\\\" Button\\\"]]],[16,0,[29,[\\\"btn\\\\n \\\",[30,2,[\\\"colorClass\\\"]],\\\"\\\\n \\\",[30,2,[\\\"toggleEditClass\\\"]]]]],[24,5,\\\"width:12%\\\"],[24,4,\\\"button\\\"],[4,[38,6],[\\\"click\\\",[28,[37,7],[[30,0,[\\\"deleteButtonClicked\\\"]],[30,2]],null]],null],[12],[1,\\\"\\\\n \\\"],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[14,0,\\\"icon icon-xs\\\"],[14,5,\\\"fill: #eee;\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#trash\\\",\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[10,\\\"button\\\"],[14,5,\\\"width:6%; cursor: grab;\\\"],[14,0,\\\"btn btn-text p-r-none p-l-xxs\\\"],[14,4,\\\"button\\\"],[12],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[14,0,\\\"icon icon-xs\\\"],[14,5,\\\"fill: #ccc;\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#move\\\",\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[12],[1,\\\"Move\\\"],[13],[1,\\\"\\\\n \\\"],[13],[13],[1,\\\"\\\\n \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[2]],[[[1,\\\" \\\"],[10,2],[14,0,\\\"text-xs-center\\\"],[12],[1,\\\"No buttons added to this form. Press ADD\\\\n BUTTON TO THIS FORM above to get started.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"]],[]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@buttons\\\",\\\"buttonInfo\\\",\\\"@isDisabled\\\",\\\"@canDelete\\\"],[\\\"div\\\",\\\"sortable-objects\\\",\\\"each\\\",\\\"-track-array\\\",\\\"draggable-object\\\",\\\"button\\\",\\\"on\\\",\\\"fn\\\",\\\"span\\\",\\\"if\\\",\\\"svg\\\",\\\"use\\\",\\\"concat\\\",\\\"p\\\"]]\",\n \"moduleName\": \"vosaic/components/form-button-lister/index.hbs\",\n \"isStrictMode\": false\n });\n let FormButtonListerComponent = _exports.default = (_class = class FormButtonListerComponent extends _component2.default {\n get canSort() {\n return !this.args.isDisabled;\n }\n get style() {\n const width = this.args.canDelete ? '80%' : '92%';\n return (0, _template.htmlSafe)(`width:${width}`);\n }\n sortEndAction() {\n this.args.formChanged('dontRedirect');\n }\n editButtonClicked(button) {\n if (!this.args.isDisabled) {\n this.args.editButton(button);\n }\n }\n deleteButtonClicked(button) {\n this.args.deleteButton(button);\n }\n }, _applyDecoratedDescriptor(_class.prototype, \"sortEndAction\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"sortEndAction\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"editButtonClicked\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"editButtonClicked\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"deleteButtonClicked\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"deleteButtonClicked\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FormButtonListerComponent);\n});","define(\"vosaic/components/form-filters/index\", [\"exports\", \"@ember/component\", \"@ember/array\", \"@ember/object\", \"@glimmer/component\", \"@ember/template-factory\"], function (_exports, _component, _array, _object, _component2, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/array\",0,\"@ember/object\",0,\"@glimmer/component\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n
\n
\n
\n Filter Forms By Author\n \n Show All\n Show Mine\n {{#each this.displayAuthors as |author|}}\n {{author.displayName}}\n {{/each}}\n \n \n
\n
\n
OR
\n
\n
\n Filter Forms By Category\n \n Show All\n {{#each @categories as |category|}}\n {{category.name}}\n {{/each}}\n \n \n
\n MANAGE CATEGORIES\n
\n
\n */\n {\n \"id\": \"fiBsTNDs\",\n \"block\": \"[[[10,0],[14,0,\\\"bg-faded\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"p-b-sm p-x-sm m-a-none p-t-lg\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"form-group m-a-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"label\\\"],[14,\\\"for\\\",\\\"form-select-author\\\"],[15,0,[29,[\\\"form-control-label animate-up \\\",[52,[30,0,[\\\"isFilteredByUser\\\"]],\\\"bg-primary\\\"]]]],[12],[1,\\\"Filter Forms By Author\\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,3],null,[[\\\"@id\\\",\\\"@value\\\",\\\"@action\\\",\\\"@class\\\"],[\\\"form-select-author\\\",[30,1],[30,0,[\\\"onUserSelected\\\"]],\\\"c-select full-width m-a-none\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n \\\"],[8,[30,2,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"all\\\"]],[[\\\"default\\\"],[[[[1,\\\"Show All\\\"]],[]]]]],[1,\\\"\\\\n \\\"],[8,[30,2,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"mine\\\"]],[[\\\"default\\\"],[[[[1,\\\"Show Mine\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[42,[28,[37,5],[[28,[37,5],[[30,0,[\\\"displayAuthors\\\"]]],null]],null],null,[[[1,\\\" \\\"],[8,[30,2,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,3,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,3,[\\\"displayName\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"\\\\n \\\"]],[2]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"text-xs-center\\\"],[12],[1,\\\"OR\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"p-b-sm p-x-sm m-a-none p-t-lg\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"form-group m-a-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"label\\\"],[14,\\\"for\\\",\\\"form-select-category\\\"],[15,0,[29,[\\\"form-control-label animate-up \\\",[52,[30,0,[\\\"isFilteredByCategory\\\"]],\\\"bg-primary\\\"]]]],[12],[1,\\\"Filter Forms By Category\\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,3],null,[[\\\"@id\\\",\\\"@value\\\",\\\"@action\\\",\\\"@class\\\"],[\\\"form-select-category\\\",[30,4],[30,0,[\\\"onCategorySelected\\\"]],\\\"c-select full-width m-a-none\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n \\\"],[8,[30,5,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"all\\\"]],[[\\\"default\\\"],[[[[1,\\\"Show All\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[42,[28,[37,5],[[28,[37,5],[[30,6]],null]],null],null,[[[1,\\\" \\\"],[8,[30,5,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,7,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,7,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[7]],null],[1,\\\"\\\\n \\\"]],[5]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,1,\\\"manage-categories-btn\\\"],[24,0,\\\"btn btn-sm btn-default-outline m-t-xs\\\"],[24,4,\\\"button\\\"],[4,[38,7],[\\\"click\\\",[28,[37,8],[[30,0,[\\\"onOpenCategoryModal\\\"]],\\\"manage-categories-btn\\\"],null]],null],[12],[1,\\\"MANAGE CATEGORIES\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@selectedUserFilter\\\",\\\"xs\\\",\\\"author\\\",\\\"@selectedCategoryFilter\\\",\\\"xs\\\",\\\"@categories\\\",\\\"category\\\"],[\\\"div\\\",\\\"label\\\",\\\"if\\\",\\\"x-select\\\",\\\"each\\\",\\\"-track-array\\\",\\\"button\\\",\\\"on\\\",\\\"fn\\\"]]\",\n \"moduleName\": \"vosaic/components/form-filters/index.hbs\",\n \"isStrictMode\": false\n });\n let FormFilterComponent = _exports.default = (_class = class FormFilterComponent extends _component2.default {\n get authors() {\n const result = (0, _array.A)();\n if (this.args.forms) {\n this.args.forms.forEach(form => {\n result.pushObject(form.createdBy);\n });\n }\n return result;\n }\n get isFilteredByUser() {\n if (this.args.selectedUserFilter === 'all') {\n return false;\n } else {\n return true;\n }\n }\n get isFilteredByCategory() {\n if (this.args.selectedCategoryFilter === 'all') {\n return false;\n } else {\n return true;\n }\n }\n get validUsersAll() {\n return this.args.users.filter(user => {\n return user.id && !user.isDeleted;\n });\n }\n get displayAuthors() {\n if (this.authors && this.args.users) {\n return this.validUsersAll.filter(user => this.authors.includes(user.id)).sort((a, b) => a.lastName?.localeCompare(b.lastName) ? a.lastName?.localeCompare(b.lastName) : a.lastName - b.lastName);\n }\n return null;\n }\n onUserSelected(value) {\n this.args.filterByUser(value);\n }\n onOpenCategoryModal(element) {\n this.args.onOpenCategoryModal(element);\n }\n onCategorySelected(value) {\n this.args.filterByCategory(value);\n }\n }, _applyDecoratedDescriptor(_class.prototype, \"onUserSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onUserSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onOpenCategoryModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onOpenCategoryModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onCategorySelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onCategorySelected\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, FormFilterComponent);\n});","define(\"vosaic/components/goals-report/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _tracking, _object, _service, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n
\n {{#if @goalSharing}}\n

Your Goals

\n {{/if}}\n {{#if this.noGoals}}\n {{#if (has-block \"noGoals\")}}\n {{yield to=\"noGoals\"}}\n {{else}}\n

{{@noGoalsText}}

\n \n {{/if}}\n {{else}}\n {{#if @goalSharing}}\n

Select a goal to see its details and review\n history. NOTE: Your latest goal is automatically selected.

\n {{/if}}\n
\n Select a Goal \n \n Pick a Goal\n {{#each @goals as |goal|}}\n {{goal.title}}\n {{/each}}\n \n
\n {{#if this.selectedGoal.id}}\n

Goal Details

\n
\n \n Created on:\n {{moment-format\n this.selectedGoal.createdAt\n 'MM/DD/YYYY h:mm a'\n }}

\n \n Set on video:\n {{#if this.videoTitle}}\n {{this.videoTitle}}\n {{else}}\n {{#if this.videoExists}}\n Untitled\n {{else}}\n Video Deleted\n {{/if}}\n {{/if}}\n

\n {{this.selectedGoal.goalText}}

\n
\n
\n \n \n \n {{#if @goalSharing}}\n \n Share/UnShare This Goal\n {{#if this.selectedSharedUsers}}\n

Shared with:

\n
    \n {{#each this.selectedSharedUsers key='name' as |user|}}\n
  • {{user.displayName}}
  • \n {{/each}}\n
\n {{else}}\n

Not shared with any\n Users.

\n {{/if}}\n \n Delete This Goal\n \n {{/if}}\n \n
\n
\n \n

Goals' Review History

\n
\n

The table below shows follow-up\n videos that have been reviewed against this goal. Click the\n \"View\"\n button to see whether or not it has been met.

\n
\n Run Goal Review\n
\n
\n {{#if this.hasQueries}}\n \n
\n {{else}}\n

No follow-up videos were reviewed for\n this goal.

\n {{/if}}\n {{/if}}\n {{/if}}\n \n \n \n \n \n */\n {\n \"id\": \"z/tmatDX\",\n \"block\": \"[[[11,0],[4,[38,1],[[30,0,[\\\"onInsert\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,1],[[[1,\\\" \\\"],[10,\\\"h2\\\"],[12],[1,\\\"Your Goals\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[41,[30,0,[\\\"noGoals\\\"]],[[[41,[48,[30,11]],[[[1,\\\" \\\"],[18,11,null],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,2],[12],[1,[30,2]],[13],[1,\\\"\\\\n\\\\n\\\"]],[]]]],[]],[[[41,[30,1],[[[1,\\\" \\\"],[10,2],[14,0,\\\"m-b-lg small\\\"],[12],[1,\\\"Select a goal to see its details and review\\\\n history. \\\"],[10,\\\"strong\\\"],[12],[1,\\\"NOTE:\\\"],[13],[1,\\\" Your latest goal is automatically selected.\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[10,0],[14,0,\\\"form-group m-y-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"label\\\"],[14,\\\"for\\\",\\\"select-project\\\"],[14,0,\\\"form-control-label animate-up text-success\\\"],[12],[1,\\\"Select a Goal \\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,9],[[24,1,\\\"goals\\\"]],[[\\\"@value\\\",\\\"@class\\\",\\\"@onChange\\\"],[[30,0,[\\\"selectedGoal\\\",\\\"id\\\"]],\\\"c-select form-control-md full-width\\\",[30,0,[\\\"onGoalChange\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n \\\"],[8,[30,3,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"\\\"]],[[\\\"default\\\"],[[[[1,\\\"Pick a Goal\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[42,[28,[37,11],[[28,[37,11],[[30,4]],null]],null],null,[[[1,\\\" \\\"],[8,[30,3,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,5,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,5,[\\\"title\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\" \\\"]],[3]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedGoal\\\",\\\"id\\\"]],[[[1,\\\" \\\"],[10,\\\"h3\\\"],[14,0,\\\"lead\\\"],[12],[1,\\\"Goal Details\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[15,0,[29,[\\\"col-xs-12\\\\n \\\",[52,[30,1],\\\"col-sm-8 border-r-dark\\\",\\\"col-sm-12\\\"]]]],[12],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"card p-a-xs transparent-bg-50 font-size-sm border-radius-md\\\"],[12],[1,\\\"Created on:\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,[28,[35,13],[[30,0,[\\\"selectedGoal\\\",\\\"createdAt\\\"]],\\\"MM/DD/YYYY h:mm a\\\"],null]],[13],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"card p-a-xs transparent-bg-50 font-size-sm border-radius-md\\\"],[12],[1,\\\"\\\\n Set on video:\\\\n\\\"],[41,[30,0,[\\\"videoTitle\\\"]],[[[1,\\\" \\\"],[10,\\\"strong\\\"],[12],[1,[30,0,[\\\"videoTitle\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,0,[\\\"videoExists\\\"]],[[[1,\\\" \\\"],[10,\\\"strong\\\"],[12],[1,\\\"Untitled\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,1],[14,0,\\\"label label-danger font-weight-bold\\\"],[12],[1,\\\"Video Deleted\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"card p-a-xs transparent-bg-50 font-size-sm border-radius-md\\\"],[12],[1,[30,0,[\\\"selectedGoal\\\",\\\"goalText\\\"]]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[15,0,[29,[\\\"col-xs-12 \\\",[52,[30,6],\\\"\\\",\\\"col-sm-4\\\"]]]],[12],[1,\\\"\\\\n\\\\n\\\\n\\\\n\\\"],[41,[30,1],[[[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,1,\\\"who-can-view-btn\\\"],[24,0,\\\"btn btn-success btn-sm btn-wide text-uppercase\\\"],[24,5,\\\"margin-top:5px\\\"],[24,4,\\\"button\\\"],[4,[38,16],[\\\"click\\\",[30,0,[\\\"onShowSharingUsers\\\"]]],null],[12],[1,\\\"Share/UnShare This Goal\\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedSharedUsers\\\"]],[[[1,\\\" \\\"],[10,2],[14,0,\\\"small m-t-sm m-b-none\\\"],[12],[1,\\\"Shared with:\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"ul\\\"],[14,0,\\\"font-weight-bold p-a-none\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,11],[[28,[37,11],[[30,0,[\\\"selectedSharedUsers\\\"]]],null]],null],\\\"name\\\",[[[1,\\\" \\\"],[10,\\\"li\\\"],[14,0,\\\"label label-default\\\"],[12],[1,[30,7,[\\\"displayName\\\"]]],[13],[1,\\\"\\\\n\\\"]],[7]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,2],[14,0,\\\"small m-b-none text-danger m-t-xxs\\\"],[12],[1,\\\"Not shared with any\\\\n Users.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[11,\\\"button\\\"],[24,1,\\\"delete-goal-btn\\\"],[24,0,\\\"btn btn-danger btn-sm m-t-sm\\\"],[24,4,\\\"button\\\"],[4,[38,16],[\\\"click\\\",[30,0,[\\\"showDeleteModal\\\"]]],null],[12],[1,\\\"\\\\n Delete This Goal\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[10,\\\"h3\\\"],[14,0,\\\"lead m-t-sm\\\"],[12],[1,\\\"Goals' Review History\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small col-xs-12 col-xl-7\\\"],[12],[1,\\\"The table below shows follow-up\\\\n videos that have been reviewed against this goal. Click the\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\\\\"View\\\\\\\"\\\"],[13],[1,\\\"\\\\n button to see whether or not it has been met.\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12 col-xl-5\\\"],[12],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,1,\\\"run-goal-analysis-btn\\\"],[24,0,\\\"btn btn-success btn-sm btn-wide pull-xl-right m-b-sm\\\"],[24,4,\\\"button\\\"],[4,[38,16],[\\\"click\\\",[30,0,[\\\"onRunMoreAnalysis\\\"]]],null],[12],[1,\\\"Run Goal Review\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"hasQueries\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"card p-a-xs transparent-bg-50 font-size-sm border-radius-md\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,19],null,[[\\\"@isGoalReport\\\",\\\"@reportData\\\",\\\"@videos\\\"],[true,[30,0,[\\\"currentGoalQueries\\\"]],[30,8]]],null],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,2],[14,0,\\\"alert alert-info small\\\"],[12],[1,\\\"No follow-up videos were reviewed for\\\\n this goal.\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],null]],[]]],[13],[1,\\\"\\\\n\\\"],[8,[39,20],null,[[\\\"@goal\\\",\\\"@shouldShow\\\",\\\"@onCancelAddUsers\\\",\\\"@onAddedUsers\\\",\\\"@allUsers\\\",\\\"@focusInitiator\\\"],[[30,0,[\\\"selectedGoal\\\"]],[30,0,[\\\"showAddUsers\\\"]],[30,0,[\\\"onCancelAddUsers\\\"]],[30,0,[\\\"onAddedUsers\\\"]],[30,9],\\\"who-can-view-btn\\\"]],null],[1,\\\"\\\\n\\\"],[8,[39,21],null,[[\\\"@goal\\\",\\\"@goalQueries\\\",\\\"@shouldShow\\\",\\\"@onCloseRunAnalysis\\\",\\\"@videos\\\",\\\"@user\\\",\\\"@focusInitiator\\\"],[[30,0,[\\\"selectedGoal\\\"]],[30,0,[\\\"currentGoalQueries\\\"]],[30,0,[\\\"showRunAnalysis\\\"]],[30,0,[\\\"onCloseRunAnalysis\\\"]],[30,8],[30,10],\\\"run-goal-analysis-btn\\\"]],null],[1,\\\"\\\\n\\\"],[8,[39,22],null,[[\\\"@title\\\",\\\"@content\\\",\\\"@actionOnCancel\\\",\\\"@actionOnDeleteConfirmed\\\",\\\"@shouldShow\\\",\\\"@focusInitiator\\\"],[\\\"Delete Goal\\\",\\\"Deleting this goal permanently removes it and all related analysis from Vosaic.. You can not undo this.\\\",[30,0,[\\\"closeDeleteModal\\\"]],[30,0,[\\\"onDeleteGoal\\\"]],[30,0,[\\\"deletingGoal\\\"]],\\\"delete-goal-btn\\\"]],null],[1,\\\"\\\\n\\\"],[8,[39,23],null,[[\\\"@shouldShow\\\",\\\"@contentClass\\\",\\\"@infoTitle\\\",\\\"@infoText\\\",\\\"@onCancel\\\",\\\"@focusInitiator\\\"],[[30,0,[\\\"showDeleteBlockedModal\\\"]],\\\"text-xs-center\\\",\\\"Delete This Goal\\\",\\\"Cannot delete shared goal. Unshare this goal to delete it.\\\",[30,0,[\\\"closeDeleteBlockedModal\\\"]],\\\"delete-goal-btn\\\"]],null]],[\\\"@goalSharing\\\",\\\"@noGoalsText\\\",\\\"xs\\\",\\\"@goals\\\",\\\"goal\\\",\\\"@isOnEditUser\\\",\\\"user\\\",\\\"@videos\\\",\\\"@users\\\",\\\"@user\\\",\\\"&noGoals\\\"],[\\\"div\\\",\\\"did-insert\\\",\\\"if\\\",\\\"h2\\\",\\\"has-block\\\",\\\"yield\\\",\\\"p\\\",\\\"strong\\\",\\\"label\\\",\\\"x-select\\\",\\\"each\\\",\\\"-track-array\\\",\\\"h3\\\",\\\"moment-format\\\",\\\"span\\\",\\\"button\\\",\\\"on\\\",\\\"ul\\\",\\\"li\\\",\\\"ai-report-grid\\\",\\\"modal-share-goal\\\",\\\"modal-run-goal-analysis\\\",\\\"modal-confirm-delete\\\",\\\"modal-more-info\\\"]]\",\n \"moduleName\": \"vosaic/components/goals-report/index.hbs\",\n \"isStrictMode\": false\n });\n let GoalsReport = _exports.default = (_class = class GoalsReport extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"authorizer\", _descriptor, this);\n _initializerDefineProperty(this, \"selectedGoal\", _descriptor2, this);\n _initializerDefineProperty(this, \"showAddUsers\", _descriptor3, this);\n _initializerDefineProperty(this, \"showRunAnalysis\", _descriptor4, this);\n _initializerDefineProperty(this, \"deletingGoal\", _descriptor5, this);\n _initializerDefineProperty(this, \"showDeleteBlockedModal\", _descriptor6, this);\n _initializerDefineProperty(this, \"regeneratedQueries\", _descriptor7, this);\n }\n get goalQueries() {\n return this.regeneratedQueries ?? this.args.goalQueries;\n }\n get currentGoalQueries() {\n if (this.selectedGoal) {\n return this.goalQueries.filter(query => query.goal === this.selectedGoal.id);\n }\n return [];\n }\n get noGoals() {\n return this.args.goals.length === 0;\n }\n get hasQueries() {\n return this.currentGoalQueries.length > 0;\n }\n get videoTitle() {\n return this.args.videos.find(el => el.id === this.selectedGoal?.createdOnVideo)?.title || '';\n }\n get videoExists() {\n return this.args.videos.find(el => el.id === this.selectedGoal?.createdOnVideo) !== undefined;\n }\n get selectedSharedUsers() {\n return this.selectedGoal?.sharedWithUsers || [];\n }\n onShowSharingUsers() {\n this.showAddUsers = true;\n }\n onCancelAddUsers() {\n this.showAddUsers = false;\n }\n onAddedUsers() {\n this.showAddUsers = false;\n this.selectedGoal.save();\n }\n onInsert() {\n if (this.args.initialGoalId) {\n this.selectedGoal = this.args.goals.find(el => el.id === this.args.initialGoalId);\n } else {\n this.selectedGoal = this.args.goals.find(el => el.activeGoal);\n }\n }\n onGoalChange(value) {\n this.selectedGoal = this.args.goals.find(el => el.id === value);\n }\n onRunMoreAnalysis() {\n this.showRunAnalysis = true;\n }\n onCloseRunAnalysis() {\n // do something here to show the new analysis in the grid.\n // maybe just rerun store query?\n this.showRunAnalysis = false;\n fetch(`${this.authorizer.getBaseUrl()}/aicoachreport/goals?userId=${this.args.user.id}`, {\n credentials: 'include',\n headers: this.authorizer.getAuthHeaders(),\n method: 'GET'\n }).then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.json();\n }).then(data => {\n this.regeneratedQueries = data;\n });\n }\n onDeleteGoal() {\n const goal = this.selectedGoal;\n if (!goal) {\n this.deletingGoal = false;\n return;\n }\n try {\n goal.destroyRecord?.();\n } finally {\n this.selectedGoal = null;\n this.deletingGoal = false;\n }\n }\n showDeleteModal() {\n // need to check sharing here? or use get\n if (this.selectedGoal.sharedWithUsers?.length > 0) {\n this.showDeleteBlockedModal = true;\n } else {\n this.deletingGoal = true;\n }\n }\n closeDeleteModal() {\n this.deletingGoal = false;\n }\n closeDeleteBlockedModal() {\n this.showDeleteBlockedModal = false;\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"authorizer\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"selectedGoal\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"showAddUsers\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"showRunAnalysis\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"deletingGoal\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"showDeleteBlockedModal\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"regeneratedQueries\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"onShowSharingUsers\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onShowSharingUsers\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onCancelAddUsers\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onCancelAddUsers\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onAddedUsers\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onAddedUsers\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onGoalChange\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onGoalChange\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onRunMoreAnalysis\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onRunMoreAnalysis\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onCloseRunAnalysis\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onCloseRunAnalysis\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onDeleteGoal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDeleteGoal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"showDeleteModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"showDeleteModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeDeleteModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeDeleteModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeDeleteBlockedModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeDeleteBlockedModal\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, GoalsReport);\n});","define(\"vosaic/components/group-filters/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/template-factory\"], function (_exports, _component, _component2, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n
\n
\n
\n Filter Group By Owner\n \n Show All\n Show Mine\n {{#each this.displayAuthors as |author|}}\n {{author.displayName}}\n {{/each}}\n \n
\n
\n
\n */\n {\n \"id\": \"EDrt4eRA\",\n \"block\": \"[[[10,0],[14,0,\\\"bg-faded\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"p-b-sm p-x-sm m-a-none p-t-lg\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"form-group m-a-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"label\\\"],[15,\\\"for\\\",[29,[[28,[37,2],[[30,0,[\\\"elementId\\\"]],\\\"-select-group\\\"],null]]]],[15,0,[29,[\\\"form-control-label animate-up \\\",[52,[30,0,[\\\"isFiltered\\\"]],\\\"bg-primary\\\"]]]],[12],[1,\\\"Filter Group By Owner\\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,4],null,[[\\\"@id\\\",\\\"@value\\\",\\\"@action\\\",\\\"@class\\\"],[[29,[[30,0,[\\\"elementId\\\"]],\\\"-select-group\\\"]],[30,1],[30,2],\\\"c-select full-width m-a-none\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n \\\"],[8,[30,3,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"all\\\"]],[[\\\"default\\\"],[[[[1,\\\"Show All\\\"]],[]]]]],[1,\\\"\\\\n \\\"],[8,[30,3,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"mine\\\"]],[[\\\"default\\\"],[[[[1,\\\"Show Mine\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[42,[28,[37,6],[[28,[37,6],[[30,0,[\\\"displayAuthors\\\"]]],null]],null],null,[[[1,\\\" \\\"],[8,[30,3,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,4,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,4,[\\\"displayName\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[4]],null],[1,\\\" \\\"]],[3]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@selectedUserFilterId\\\",\\\"@onUserSelected\\\",\\\"xs\\\",\\\"author\\\"],[\\\"div\\\",\\\"label\\\",\\\"concat\\\",\\\"if\\\",\\\"x-select\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n \"moduleName\": \"vosaic/components/group-filters/index.hbs\",\n \"isStrictMode\": false\n });\n class GroupFiltersComponent extends _component2.default {\n get authors() {\n return (this.args.groups || []).map(group => group.createdBy);\n }\n get isFiltered() {\n if (this.args.selectedUserFilterId === 'all') {\n return false;\n } else {\n return true;\n }\n }\n get displayAuthors() {\n return (this.args.users || []).filter(user => this.authors.includes(user.id)).sort((a, b) => a.lastName?.localeCompare(b.lastName) ? a.lastName?.localeCompare(b.lastName) : a.lastName - b.lastName);\n }\n }\n _exports.default = GroupFiltersComponent;\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, GroupFiltersComponent);\n});","define(\"vosaic/components/group-list/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/template-factory\"], function (_exports, _component, _component2, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n {{#if @groups}}\n
\n \n {{#each this.groupsSearched key='id' as |group|}}\n \n {{/each}}\n
\n {{else}}\n
\n

Create a New\n Group

\n

Use Groups to manage your users more effectively.

\n
\n {{/if}}\n {{yield}}\n */\n {\n \"id\": \"S28ZD2v4\",\n \"block\": \"[[[41,[30,1],[[[10,0],[14,1,\\\"scroll-to-list\\\"],[14,0,\\\"list-group list-group-flush\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,2],null,[[\\\"@page\\\",\\\"@searchText\\\",\\\"@selectedUserFilterId\\\",\\\"@numberOfResults\\\",\\\"@clearSearch\\\",\\\"@isDeleted\\\",\\\"@clearStatus\\\",\\\"@clearFilter\\\"],[\\\"groups\\\",[30,2],[30,3],[30,0,[\\\"groupsSearched\\\",\\\"length\\\"]],[30,4],[30,5],[30,6],[30,7]]],null],[1,\\\"\\\\n\\\"],[42,[28,[37,4],[[28,[37,4],[[30,0,[\\\"groupsSearched\\\"]]],null]],null],\\\"id\\\",[[[1,\\\" \\\"],[8,[39,5],null,[[\\\"@group\\\",\\\"@user\\\",\\\"@users\\\",\\\"@activeGroupId\\\",\\\"@deleteLearnerGroup\\\",\\\"@goToGroupsEdit\\\"],[[30,8],[30,9],[30,10],[30,11],[30,12],[30,13]]],null],[1,\\\"\\\\n\\\"]],[8]],null],[13],[1,\\\"\\\\n\\\"]],[]],[[[10,0],[14,0,\\\"p-a-md text-xs-center p-t-xl\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h2\\\"],[14,0,\\\"text-success\\\"],[12],[8,[39,7],null,[[\\\"@route\\\"],[\\\"groups.new\\\"]],[[\\\"default\\\"],[[[[1,\\\"Create a New\\\\n Group\\\"]],[]]]]],[13],[1,\\\"\\\\n \\\"],[10,2],[12],[10,\\\"strong\\\"],[12],[1,\\\"Use Groups to manage your users more effectively.\\\"],[13],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[18,14,null]],[\\\"@groups\\\",\\\"@searchText\\\",\\\"@selectedUserFilterId\\\",\\\"@clearSearch\\\",\\\"@userDeleted\\\",\\\"@clearStatus\\\",\\\"@clearFilter\\\",\\\"group\\\",\\\"@user\\\",\\\"@users\\\",\\\"@activeGroupId\\\",\\\"@deleteLearnerGroup\\\",\\\"@goToGroupsEdit\\\",\\\"&default\\\"],[\\\"if\\\",\\\"div\\\",\\\"search-filter-status\\\",\\\"each\\\",\\\"-track-array\\\",\\\"custom-learner-group-list-item\\\",\\\"h2\\\",\\\"link-to\\\",\\\"p\\\",\\\"strong\\\",\\\"yield\\\"]]\",\n \"moduleName\": \"vosaic/components/group-list/index.hbs\",\n \"isStrictMode\": false\n });\n class GroupListComponent extends _component2.default {\n get groupsSorted() {\n const groups = [...this.args.groups];\n if (this.args.groupsSortingDesc) {\n return groups.sort((a, b) => a[this.args.groupsSorting]?.localeCompare?.(b[this.args.groupsSorting]) ? a[this.args.groupsSorting]?.localeCompare?.(b[this.args.groupsSorting]) : a[this.args.groupsSorting] - b[this.args.groupsSorting]).reverse();\n } else {\n return groups.sort((a, b) => a[this.args.groupsSorting]?.localeCompare?.(b[this.args.groupsSorting]) ? a[this.args.groupsSorting]?.localeCompare?.(b[this.args.groupsSorting]) : a[this.args.groupsSorting] - b[this.args.groupsSorting]);\n }\n }\n get groupsFiltered() {\n if (this.args.selectedUserFilterId === 'mine') {\n return this.groupsSorted.filter(group => group.createdBy === this.args.user.id || group.isNew);\n }\n if (this.args.selectedUserFilterId === 'all') {\n return this.groupsSorted;\n }\n return this.groupsSorted.filter(group => group.createdBy === this.args.selectedUserFilterId || group.isNew);\n }\n get groupsSearched() {\n if (this.args.searchText) {\n const trimmedSearchText = this.args.searchText.toLowerCase().trim();\n if (trimmedSearchText && trimmedSearchText.length > 0) {\n return this.groupsFiltered.filter(group => {\n if (group.name) {\n const groupName = group.name.toLowerCase();\n return groupName.includes(trimmedSearchText);\n } else {\n return false;\n }\n });\n }\n }\n return this.groupsFiltered;\n }\n }\n _exports.default = GroupListComponent;\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, GroupListComponent);\n});","define(\"vosaic/components/group-selector/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n
\n {{#if @groups}}\n Group\n \n Show All\n {{#if @showMyVideosOption}}\n Show My Videos\n {{/if}}\n {{#each this.sortedGroups key='id' as |group|}}\n {{group.name}}\n {{/each}}\n \n {{/if}}\n
\n */\n {\n \"id\": \"CF+BL0QI\",\n \"block\": \"[[[10,0],[15,0,[30,1]],[12],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\" \\\"],[10,\\\"label\\\"],[15,\\\"for\\\",[29,[[28,[37,3],[[30,0,[\\\"elementId\\\"]],\\\"-select-group\\\"],null]]]],[15,0,[29,[\\\"form-control-label animate-up\\\\n \\\",[52,[28,[37,4],[[30,3],\\\"all\\\"],null],\\\"\\\",\\\"bg-primary\\\"]]]],[12],[1,\\\"Group\\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,5],null,[[\\\"@disabled\\\",\\\"@id\\\",\\\"@value\\\",\\\"@action\\\",\\\"@class\\\"],[[30,4],[29,[[30,0,[\\\"elementId\\\"]],\\\"-select-group\\\"]],[30,3],[30,0,[\\\"onGroupSelected\\\"]],[30,5]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n \\\"],[8,[30,6,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"all\\\"]],[[\\\"default\\\"],[[[[1,\\\"Show All\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[41,[30,7],[[[1,\\\" \\\"],[8,[30,6,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"mine\\\"]],[[\\\"default\\\"],[[[[1,\\\"Show My Videos\\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],null],[42,[28,[37,7],[[28,[37,7],[[30,0,[\\\"sortedGroups\\\"]]],null]],null],\\\"id\\\",[[[1,\\\" \\\"],[8,[30,6,[\\\"option\\\"]],null,[[\\\"@value\\\"],[[30,8,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,[30,8,[\\\"name\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[8]],null],[1,\\\" \\\"]],[6]]]]],[1,\\\"\\\\n\\\"]],[]],null],[13]],[\\\"@class\\\",\\\"@groups\\\",\\\"@selectedGroupId\\\",\\\"@disabled\\\",\\\"@formControlClass\\\",\\\"xs\\\",\\\"@showMyVideosOption\\\",\\\"group\\\"],[\\\"div\\\",\\\"if\\\",\\\"label\\\",\\\"concat\\\",\\\"equal\\\",\\\"x-select\\\",\\\"each\\\",\\\"-track-array\\\"]]\",\n \"moduleName\": \"vosaic/components/group-selector/index.hbs\",\n \"isStrictMode\": false\n });\n let GroupSelectorComponent = _exports.default = (_class = class GroupSelectorComponent extends _component2.default {\n get sortedGroups() {\n return [...this.groups].sort((a, b) => {\n return a.name?.localeCompare(b.name) ? a.name?.localeCompare(b.name) : a.name - b.name;\n });\n }\n get groups() {\n return this.args.groups;\n }\n onGroupSelected(value) {\n if (value) {\n this.args.groupSelected(value);\n }\n }\n }, _applyDecoratedDescriptor(_class.prototype, \"onGroupSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onGroupSelected\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, GroupSelectorComponent);\n});","define(\"vosaic/components/input-button-dropdown-item/index\", [\"exports\", \"@ember/component\", \"@ember/service\", \"@glimmer/component\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _service, _component2, _object, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/service\",0,\"@glimmer/component\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n
\n {{#if @itemLink}}\n \n {{#if @hasIcon}}\n \n \n \n {{/if}}\n {{@itemText}}\n {{#if @hasNew}}\n NEW\n {{/if}}\n \n {{else}}\n \n {{#if @hasIcon}}\n \n \n \n {{/if}}\n {{@itemText}}\n {{#if @hasNew}}\n NEW\n {{/if}}\n \n {{/if}}\n
\n */\n {\n \"id\": \"7LhxNi0R\",\n \"block\": \"[[[10,0],[15,\\\"role\\\",[30,1]],[12],[1,\\\"\\\\n\\\"],[41,[30,2],[[[1,\\\" \\\"],[8,[39,2],[[24,0,\\\"dropdown-item\\\"],[4,[38,3],[\\\"focusout\\\",[30,0,[\\\"onFocusOut\\\"]]],null]],[[\\\"@route\\\"],[[30,2]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\" \\\"],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[15,0,[29,[\\\"icon \\\",[30,4]]]],[14,\\\"role\\\",\\\"presentation\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[15,\\\"xlink:href\\\",[29,[[30,5]]],\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[1,[30,6]],[1,\\\"\\\\n\\\"],[41,[30,7],[[[1,\\\" \\\"],[10,\\\"sup\\\"],[14,0,\\\"label label-danger\\\"],[14,5,\\\"font-size:60%\\\"],[12],[1,\\\"NEW\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"]],[]]]]],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"dropdown-item\\\"],[24,4,\\\"button\\\"],[4,[38,3],[\\\"click\\\",[30,0,[\\\"click\\\"]]],null],[4,[38,3],[\\\"focusout\\\",[30,0,[\\\"onFocusOut\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\" \\\"],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[15,0,[29,[\\\"icon \\\",[30,4]]]],[14,\\\"role\\\",\\\"presentation\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[15,\\\"xlink:href\\\",[29,[[30,5]]],\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[1,[30,6]],[1,\\\"\\\\n\\\"],[41,[30,7],[[[1,\\\" \\\"],[10,\\\"sup\\\"],[14,0,\\\"label label-danger\\\"],[14,5,\\\"font-size:60%\\\"],[12],[1,\\\"NEW\\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[13]],[\\\"@role\\\",\\\"@itemLink\\\",\\\"@hasIcon\\\",\\\"@iconSize\\\",\\\"@icon\\\",\\\"@itemText\\\",\\\"@hasNew\\\"],[\\\"div\\\",\\\"if\\\",\\\"link-to\\\",\\\"on\\\",\\\"svg\\\",\\\"use\\\",\\\"sup\\\",\\\"button\\\"]]\",\n \"moduleName\": \"vosaic/components/input-button-dropdown-item/index.hbs\",\n \"isStrictMode\": false\n });\n let InputButtonDropdownItemComponent = _exports.default = (_class = class InputButtonDropdownItemComponent extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"voiceHelpers\", _descriptor, this);\n }\n // tagName: ['div'],\n // attributeBindings: ['role'],\n\n click() {\n this.voiceHelpers.hideDropdownMenus();\n if (this.args.passValueAction) {\n this.args.passValueAction(this.args.actionValue);\n } else if (this.args.action) {\n this.args.action();\n }\n if (this.changeOrgAction) {\n this.args.changeOrgAction(this.args.profile);\n }\n }\n onFocusOut(element) {\n //check if element is the last dropdown-item element in the dropdown-menu\n // if it is, hide the dropdown menu\n const dropdownMenu = element.target.closest('.dropdown-menu');\n const dropdownItems = dropdownMenu.querySelectorAll('.dropdown-item');\n const lastDropdownItem = dropdownItems[dropdownItems.length - 1];\n if (lastDropdownItem === element.target) {\n this.voiceHelpers.hideDropdownMenus();\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"voiceHelpers\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _applyDecoratedDescriptor(_class.prototype, \"click\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"click\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onFocusOut\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onFocusOut\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, InputButtonDropdownItemComponent);\n});","define(\"vosaic/components/input-button-dropdown/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/service\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _component2, _service, _object, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/service\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n \n {{#if @hasIcon}}\n {{@srOnlyText}}\n {{#if @showLoaderIcon}}\n
\n
\n
Subscription Length:
\n {{@model.years}} year{{if (gt @model.years 1) 's' ''}}
\n \n
\n
Total Due:
\n {{format-money @model.total}}
\n \n
\n

Contact Information

\n

Please provide all required (*) information below

\n
\n \n \n
\n \n
\n \n \n
\n
\n \n \n
\n
\n \n \n \n \n
\n
\n

Payment Information

\n

Please provide all required (*) Contact Information to continue

\n

Request an Invoice to Pay With a Check\n OR\n enter the bank account info below to pay via ACH:

\n
\n \n \n
\n
\n
\n Account Type\n \n Checking\n Saving\n \n
\n
\n \n \n
\n
\n {{#if this.formIsReady}}\n {{#if this.formIsSubmitted}}\n \n \n Please Wait\n \n {{else}}\n Submit Payment\n {{/if}}\n {{else}}\n \n {{/if}}\n
\n
\n */\n {\n \"id\": \"PzUQ9Sw6\",\n \"block\": \"[[[11,\\\"h2\\\"],[24,0,\\\"m-b-none\\\"],[4,[38,1],[[30,0,[\\\"onDidInsert\\\"]]],null],[12],[1,\\\"Payment -\\\\n \\\"],[1,[30,1,[\\\"planName\\\"]]],[13],[1,\\\"\\\\n\\\"],[8,[39,2],[[24,0,\\\"btn btn-primary-outline btn-xs m-y-sm\\\"]],[[\\\"@route\\\"],[\\\"accounts.purchase\\\"]],[[\\\"default\\\"],[[[[1,\\\"Back\\\"]],[]]]]],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"row m-b-xs\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-6 col-sm-4 p-t-xs\\\"],[12],[1,\\\"Subscription Length:\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-6 col-sm-4 p-t-xs text-xs-right font-weight-bold\\\"],[12],[1,[30,1,[\\\"years\\\"]]],[1,\\\" year\\\"],[1,[52,[28,[37,5],[[30,1,[\\\"years\\\"]],1],null],\\\"s\\\",\\\"\\\"]],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"row m-b-xs\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-6 col-sm-4 p-t-xs font-weight-bold\\\"],[12],[1,\\\"Total Due:\\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-6 col-sm-4 p-t-xs text-xs-right font-weight-bold\\\"],[12],[1,[28,[35,6],[[30,1,[\\\"total\\\"]]],null]],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,\\\"hr\\\"],[12],[13],[1,\\\"\\\\n\\\"],[10,\\\"h3\\\"],[14,0,\\\"h4 font-weight-thin\\\"],[12],[1,\\\"Contact Information\\\"],[13],[1,\\\"\\\\n\\\"],[10,2],[14,0,\\\"m-b-md small\\\"],[12],[1,\\\"Please provide all required (*) information below\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"row m-b-xs\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,10],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@formControlClass\\\",\\\"@required\\\"],[\\\"col-xs-12 col-sm-6 p-l-none p-r-none m-l-none\\\",\\\"text\\\",\\\"First Name\\\",\\\"First Name\\\",\\\"first-name\\\",[30,0,[\\\"firstName\\\"]],[28,[37,11],[[30,0,[\\\"updateField\\\"]],\\\"firstName\\\"],null],\\\"form-control-md\\\",\\\"true\\\"]],null],[1,\\\"\\\\n \\\"],[8,[39,10],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@formControlClass\\\",\\\"@required\\\"],[\\\"col-xs-12 col-sm-6 p-l-none p-r-none m-l-none\\\",\\\"text\\\",\\\"Last Name\\\",\\\"Last Name\\\",\\\"last-name\\\",[30,0,[\\\"lastName\\\"]],[28,[37,11],[[30,0,[\\\"updateField\\\"]],\\\"lastName\\\"],null],\\\"form-control-md\\\",\\\"true\\\"]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[10,0],[14,0,\\\"row m-b-xs\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,10],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@formControlClass\\\",\\\"@labelClass\\\",\\\"@required\\\"],[\\\"col-xs-12 col-sm-6 p-l-none p-r-none m-l-none\\\",\\\"email\\\",\\\"Email Address\\\",\\\"Email Address\\\",\\\"email-address\\\",[30,0,[\\\"emailAddress\\\"]],[28,[37,11],[[30,0,[\\\"updateField\\\"]],\\\"emailAddress\\\"],null],\\\"form-control-md\\\",\\\"animate-up\\\",\\\"true\\\"]],null],[1,\\\"\\\\n \\\"],[8,[39,10],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@formControlClass\\\",\\\"@labelClass\\\",\\\"@required\\\"],[\\\"col-xs-12 col-sm-6 p-l-none p-r-none m-l-none\\\",\\\"text\\\",\\\"Phone\\\",\\\"Phone\\\",\\\"phone\\\",[30,0,[\\\"phone\\\"]],[28,[37,11],[[30,0,[\\\"updateField\\\"]],\\\"phone\\\"],null],\\\"form-control-md\\\",\\\"animate-up\\\",\\\"true\\\"]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"row m-b-xs\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,10],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@formControlClass\\\",\\\"@labelClass\\\",\\\"@required\\\"],[\\\"col-xs-12 col-sm-6 p-l-none p-r-none m-l-none\\\",\\\"text\\\",\\\"Organization Name\\\",\\\"Organization Name\\\",\\\"organization-name\\\",[30,0,[\\\"organizationName\\\"]],[28,[37,11],[[30,0,[\\\"updateField\\\"]],\\\"organizationName\\\"],null],\\\"form-control-md\\\",\\\"animate-up\\\",\\\"true\\\"]],null],[1,\\\"\\\\n \\\"],[8,[39,10],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@formControlClass\\\",\\\"@labelClass\\\",\\\"@required\\\"],[\\\"col-xs-12 col-sm-6 p-l-none p-r-none m-l-none\\\",\\\"text\\\",\\\"Address\\\",\\\"Address\\\",\\\"address\\\",[30,0,[\\\"address\\\"]],[28,[37,11],[[30,0,[\\\"updateField\\\"]],\\\"address\\\"],null],\\\"form-control-md\\\",\\\"animate-up\\\",\\\"true\\\"]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"row m-b-xs\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,10],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@formControlClass\\\",\\\"@labelClass\\\",\\\"@required\\\"],[\\\"col-xs-12 col-sm-3 p-l-none p-r-none m-l-none\\\",\\\"text\\\",\\\"City\\\",\\\"City\\\",\\\"city\\\",[30,0,[\\\"city\\\"]],[28,[37,11],[[30,0,[\\\"updateField\\\"]],\\\"city\\\"],null],\\\"form-control-md\\\",\\\"animate-up\\\",\\\"true\\\"]],null],[1,\\\"\\\\n \\\"],[8,[39,10],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@formControlClass\\\",\\\"@labelClass\\\"],[\\\"col-xs-6 col-sm-3 p-l-none p-r-none m-l-none\\\",\\\"text\\\",\\\"State\\\",\\\"State\\\",\\\"state\\\",[30,0,[\\\"state\\\"]],[28,[37,11],[[30,0,[\\\"updateField\\\"]],\\\"state\\\"],null],\\\"form-control-md\\\",\\\"animate-up\\\"]],null],[1,\\\"\\\\n \\\"],[8,[39,10],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@formControlClass\\\",\\\"@labelClass\\\"],[\\\"col-xs-6 col-sm-3 p-l-none p-r-none m-l-none\\\",\\\"text\\\",\\\"Zip\\\",\\\"Zip\\\",\\\"zip\\\",[30,0,[\\\"zip\\\"]],[28,[37,11],[[30,0,[\\\"updateField\\\"]],\\\"zip\\\"],null],\\\"form-control-md\\\",\\\"animate-up\\\"]],null],[1,\\\"\\\\n \\\"],[8,[39,10],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@formControlClass\\\",\\\"@labelClass\\\"],[\\\"col-xs-12 col-sm-3 p-l-none p-r-none m-l-none\\\",\\\"text\\\",\\\"Country\\\",\\\"Country\\\",\\\"country\\\",[30,0,[\\\"country\\\"]],[28,[37,11],[[30,0,[\\\"updateField\\\"]],\\\"country\\\"],null],\\\"form-control-md\\\",\\\"animate-up\\\"]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,\\\"hr\\\"],[12],[13],[1,\\\"\\\\n\\\"],[10,\\\"h3\\\"],[14,0,\\\"h4 font-weight-thin\\\"],[12],[1,\\\"Payment Information\\\"],[13],[1,\\\"\\\\n\\\"],[10,2],[14,0,\\\"small\\\"],[12],[1,\\\"Please provide all required (*) Contact Information to continue\\\"],[13],[1,\\\"\\\\n\\\"],[10,2],[14,0,\\\"m-b-lg\\\"],[12],[11,\\\"button\\\"],[24,0,\\\"btn btn-sm btn-primary\\\"],[16,\\\"disabled\\\",[30,0,[\\\"isContactRequired\\\"]]],[24,4,\\\"button\\\"],[4,[38,13],[\\\"click\\\",[30,0,[\\\"openRequestInvoiceModal\\\"]]],null],[12],[1,\\\"Request an Invoice to Pay With a Check\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,\\\"OR\\\"],[13],[1,\\\"\\\\n enter the bank account info below to pay via ACH:\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"row m-b-xs\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,10],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@formControlClass\\\",\\\"@required\\\",\\\"@labelClass\\\"],[\\\"col-xs-12 col-sm-6 p-l-none p-r-none m-l-none m-b-xs\\\",\\\"text\\\",\\\"Bank Account Number\\\",\\\"Bank Account Number\\\",\\\"bank-account-number\\\",[30,0,[\\\"bankAccountNumber\\\"]],[28,[37,11],[[30,0,[\\\"updateField\\\"]],\\\"bankAccountNumber\\\"],null],\\\"form-control-md\\\",\\\"true\\\",\\\"animate-up\\\"]],null],[1,\\\"\\\\n \\\"],[8,[39,10],null,[[\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@inputId\\\",\\\"@value\\\",\\\"@onValueChange\\\",\\\"@formControlClass\\\",\\\"@required\\\",\\\"@labelClass\\\"],[\\\"col-xs-12 col-sm-6 p-l-none p-r-none m-l-none m-b-xs\\\",\\\"text\\\",\\\"Bank Routing Number\\\",\\\"Bank Routing Number\\\",\\\"bank-routing-number\\\",[30,0,[\\\"bankRoutingNumber\\\"]],[28,[37,11],[[30,0,[\\\"updateField\\\"]],\\\"bankRoutingNumber\\\"],null],\\\"form-control-md\\\",\\\"true\\\",\\\"animate-up\\\"]],null],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"row m-b-xs\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12 col-sm-6 col-md-4 m-b-xs m-t-sm form-group\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"label\\\"],[14,\\\"for\\\",\\\"mp-account-type\\\"],[14,0,\\\"form-control-label animate-up\\\"],[14,5,\\\"opacity:1;\\\"],[12],[1,\\\"Account Type\\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,16],null,[[\\\"@id\\\",\\\"@value\\\",\\\"@action\\\",\\\"@classNames\\\"],[\\\"mp-account-type\\\",[30,0,[\\\"bankAccountType\\\"]],[28,[37,11],[[30,0,[\\\"updateField\\\"]],\\\"bankAccountType\\\"],null],\\\"c-select form-control form-control-md full-width\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n \\\"],[8,[30,2,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"checking\\\"]],[[\\\"default\\\"],[[[[1,\\\"Checking\\\"]],[]]]]],[1,\\\"\\\\n \\\"],[8,[30,2,[\\\"option\\\"]],null,[[\\\"@value\\\"],[\\\"saving\\\"]],[[\\\"default\\\"],[[[[1,\\\"Saving\\\"]],[]]]]],[1,\\\"\\\\n \\\"]],[2]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[8,[39,17],null,[[\\\"@firstName\\\",\\\"@shouldShow\\\",\\\"@onClose\\\"],[[30,0,[\\\"firstName\\\"]],[30,0,[\\\"showRequestInvoiceModal\\\"]],[30,0,[\\\"closeRequestInvoiceModal\\\"]]]],null],[1,\\\"\\\\n\\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-sm-6 p-t-xs lead\\\"],[12],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"formIsReady\\\"]],[[[41,[30,0,[\\\"formIsSubmitted\\\"]],[[[1,\\\" \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-success show-action-icon disabled\\\"],[14,\\\"disabled\\\",\\\"\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"img\\\"],[14,\\\"alt\\\",\\\"Loader\\\"],[15,\\\"src\\\",[29,[\\\"/assets/icons/\\\",[28,[37,19],[\\\"logo-loader\\\"],null],\\\".svg\\\"]]],[14,0,\\\"btn-icon action-icon\\\"],[12],[13],[1,\\\"\\\\n Please Wait\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success\\\"],[24,4,\\\"button\\\"],[4,[38,13],[\\\"click\\\",[30,0,[\\\"onCreatePSToken\\\"]]],null],[12],[1,\\\"Submit Payment\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],[[[1,\\\" \\\"],[10,\\\"button\\\"],[14,0,\\\"btn btn-success disabled\\\"],[14,\\\"disabled\\\",\\\"\\\"],[14,4,\\\"button\\\"],[12],[1,\\\"Submit\\\\n Payment\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\"],[13]],[\\\"@model\\\",\\\"xs\\\"],[\\\"h2\\\",\\\"did-insert\\\",\\\"link-to\\\",\\\"div\\\",\\\"if\\\",\\\"gt\\\",\\\"format-money\\\",\\\"hr\\\",\\\"h3\\\",\\\"p\\\",\\\"input-component\\\",\\\"fn\\\",\\\"button\\\",\\\"on\\\",\\\"strong\\\",\\\"label\\\",\\\"x-select\\\",\\\"modal-request-invoice\\\",\\\"img\\\",\\\"animated-svg\\\"]]\",\n \"moduleName\": \"vosaic/components/make-payment/index.hbs\",\n \"isStrictMode\": false\n });\n let MakePaymentComponent = _exports.default = (_class = class MakePaymentComponent extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"authorizer\", _descriptor, this);\n _initializerDefineProperty(this, \"session\", _descriptor2, this);\n _initializerDefineProperty(this, \"canOrg\", _descriptor3, this);\n _initializerDefineProperty(this, \"currentUser\", _descriptor4, this);\n _initializerDefineProperty(this, \"store\", _descriptor5, this);\n _defineProperty(this, \"psPublicKey\", _environment.default.paymentSpringKey);\n _initializerDefineProperty(this, \"firstName\", _descriptor6, this);\n _initializerDefineProperty(this, \"lastName\", _descriptor7, this);\n _initializerDefineProperty(this, \"emailAddress\", _descriptor8, this);\n _initializerDefineProperty(this, \"phone\", _descriptor9, this);\n _initializerDefineProperty(this, \"organizationName\", _descriptor0, this);\n _initializerDefineProperty(this, \"address\", _descriptor1, this);\n _initializerDefineProperty(this, \"city\", _descriptor10, this);\n _initializerDefineProperty(this, \"state\", _descriptor11, this);\n _initializerDefineProperty(this, \"zip\", _descriptor12, this);\n _initializerDefineProperty(this, \"country\", _descriptor13, this);\n _initializerDefineProperty(this, \"bankAccountNumber\", _descriptor14, this);\n _initializerDefineProperty(this, \"bankRoutingNumber\", _descriptor15, this);\n _initializerDefineProperty(this, \"bankAccountType\", _descriptor16, this);\n _initializerDefineProperty(this, \"psErrors\", _descriptor17, this);\n _initializerDefineProperty(this, \"formIsSubmitted\", _descriptor18, this);\n _initializerDefineProperty(this, \"showRequestInvoiceModal\", _descriptor19, this);\n }\n get isContactFilled() {\n return this.firstName && this.lastName && this.emailAddress && this.organizationName && this.city && this.phone && this.address;\n }\n get isContactRequired() {\n return !this.isContactFilled;\n }\n get formIsReady() {\n return this.isContactFilled && this.bankAccountNumber && this.bankRoutingNumber;\n }\n ensureTokenizerScript() {\n let script = document.getElementById('paymentSpring');\n if (!script) {\n script = document.createElement('script');\n script.type = 'application/javascript';\n script.src = 'https://checkout.paymentspring.com/js/paymentspring-tokenizer.js';\n script.setAttribute('id', 'paymentSpring');\n document.head.appendChild(script);\n }\n }\n populateFromUser() {\n this.firstName = this.args.user.firstName;\n this.lastName = this.args.user.lastName;\n this.emailAddress = this.args.user.emailAddress;\n this.organizationName = this.args.org.name;\n }\n makePurchase(purchaseInfo) {\n return fetch(`${this.authorizer.getBaseUrl()}/payments/renew`, {\n credentials: 'include',\n method: 'POST',\n headers: {\n ...this.authorizer.getAuthHeaders(),\n 'Content-Type': 'application/json; charset=utf-8'\n },\n body: JSON.stringify(purchaseInfo.serialize())\n }).then(response => {\n if (!response.ok) {\n throw new Error(response);\n }\n return response.text().then(text => text ? JSON.parse(text) : {});\n });\n }\n onCreatePSToken() {\n const self = this;\n const callbackFunc = function (response) {\n const isNotAlreadyExpired = self.args.org.isActive;\n if (response.errors) {\n self.psErrors = response.errors;\n self.formIsSubmitted = false;\n const durationInMiliseconds = 200;\n setTimeout(() => {\n //$('.alert').trigger('focus');\n document.querySelector('.alert').focus();\n }, durationInMiliseconds);\n } else {\n const token = response.id;\n const purchaseModel = self.store.createRecord('paymentspring-renew');\n purchaseModel.totalAmountPaidInCents = (self.args.model.total * 100).toFixed(0);\n purchaseModel.users = self.args.model.seatCount;\n purchaseModel.totalHours = 500;\n const currentExpiration = new Date(self.args.org.pricingPlanExpires);\n currentExpiration.setFullYear(currentExpiration.getFullYear() + self.args.model.years);\n purchaseModel.expirationDate = currentExpiration;\n purchaseModel.paymentSpringToken = token;\n self.makePurchase(purchaseModel).then(() => {\n // reset the org can mixin object so permissions are updated\n self.canOrg.refresh();\n // If org is expired need to try and refresh the token to reset that flag\n const authData = self.session.data.authenticated;\n const authenticator = 'authenticator:oauth2manual-refresh-exp';\n self.session.authenticate(authenticator, authData, {\n 'vos-is-web-app': 'true'\n }).then(() => {\n self.args.onPaymentSuccess({\n viewModel: {\n orgName: self.organizationName,\n firstName: self.firstName,\n lastName: self.lastName,\n expiration: purchaseModel.expirationDate,\n numYears: self.args.model.years,\n pricePerYear: self.args.model.annualPrice,\n totalPrice: self.args.model.total\n }\n });\n });\n }).catch(failure => {\n console.error('failure ' + failure);\n self.psErrors = response.errors;\n });\n }\n return response;\n };\n this.formIsSubmitted = true;\n const paymentData = {\n // This is from our test card numbers\n\n token_type: 'bank_account',\n bank_account_number: this.bankAccountNumber,\n bank_routing_number: this.bankRoutingNumber,\n bank_account_holder_first_name: this.firstName,\n bank_account_holder_last_name: this.lastName,\n bank_account_type: this.bankAccountType\n };\n\n // eslint-disable-next-line no-undef\n paymentspring.generateToken(this.psPublicKey, paymentData, callbackFunc);\n }\n openRequestInvoiceModal() {\n this.showRequestInvoiceModal = true;\n fetch(`${this.authorizer.getBaseUrl()}/payments/invoice`, {\n credentials: 'include',\n method: 'POST',\n headers: {\n ...this.authorizer.getAuthHeaders(),\n 'Content-Type': 'application/json; charset=utf-8'\n },\n body: JSON.stringify({\n firstName: this.firstName,\n lastName: this.lastName,\n organizationName: this.organizationName,\n emailAddress: this.emailAddress,\n phone: this.phone,\n city: this.city,\n address: this.address,\n subscriptionLength: this.args.model.years,\n zip: this.zip ?? 'Not Provided',\n state: this.state ?? 'Not Provided',\n country: this.country ?? 'Not Provided'\n })\n });\n }\n closeRequestInvoiceModal() {\n this.showRequestInvoiceModal = false;\n }\n updateField(field, value) {\n this[field] = value;\n }\n onDidInsert() {\n this.ensureTokenizerScript();\n this.populateFromUser();\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"authorizer\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"session\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"canOrg\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"currentUser\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"firstName\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"lastName\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor8 = _applyDecoratedDescriptor(_class.prototype, \"emailAddress\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor9 = _applyDecoratedDescriptor(_class.prototype, \"phone\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor0 = _applyDecoratedDescriptor(_class.prototype, \"organizationName\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor1 = _applyDecoratedDescriptor(_class.prototype, \"address\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor10 = _applyDecoratedDescriptor(_class.prototype, \"city\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor11 = _applyDecoratedDescriptor(_class.prototype, \"state\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor12 = _applyDecoratedDescriptor(_class.prototype, \"zip\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor13 = _applyDecoratedDescriptor(_class.prototype, \"country\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor14 = _applyDecoratedDescriptor(_class.prototype, \"bankAccountNumber\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor15 = _applyDecoratedDescriptor(_class.prototype, \"bankRoutingNumber\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor16 = _applyDecoratedDescriptor(_class.prototype, \"bankAccountType\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return 'checking';\n }\n }), _descriptor17 = _applyDecoratedDescriptor(_class.prototype, \"psErrors\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor18 = _applyDecoratedDescriptor(_class.prototype, \"formIsSubmitted\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor19 = _applyDecoratedDescriptor(_class.prototype, \"showRequestInvoiceModal\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"onCreatePSToken\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onCreatePSToken\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"openRequestInvoiceModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"openRequestInvoiceModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"closeRequestInvoiceModal\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"closeRequestInvoiceModal\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateField\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateField\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onDidInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDidInsert\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, MakePaymentComponent);\n});","define(\"vosaic/components/marked-momnets-charts/index\", [\"exports\", \"@ember/component\", \"@glimmer/component\", \"@ember/object\", \"@glimmer/tracking\", \"@ember/service\", \"@ember/template-factory\"], function (_exports, _component, _component2, _object, _tracking, _service, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4;\n 0; //eaimeta@70e063a35619d71f0,\"@glimmer/component\",0,\"@ember/object\",0,\"@glimmer/tracking\",0,\"@ember/service\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n {{#if this.markedMomentsFormReports.length}}\n
\n {{#each this.markedMomentsFormReports as |formReport|}}\n
\n
\n

\n Heatmap for:\n {{formReport.title}}

\n
\n
\n
\n
{{formReport.totalMoments}}
\n Marked Moments\n
\n
\n
\n
\n
{{formReport.bucketCount}}
\n Time Segments\n \n \n
\n \n \n
\n
\n
\n
\n
{{formReport.segmentLengthLabel}}
\n Segment Length\n
\n
\n
\n \n \n \n {{#each formReport.heatmap.verticalSegmentLines as |segmentX|}}\n \n {{/each}}\n \n {{#each formReport.heatmap.rows as |row|}}\n {{row.clippedTitle}}...\n \n {{#each row.cells as |cell|}}\n {{#if cell.canNavigate}}\n \n {{#if cell.count}}\n \n {{/if}}\n \n {{row.fullTitle}} | Segment {{cell.bucket}}: {{cell.count}} | First: {{cell.firstMomentStartLabel}}\n \n \n {{#if cell.count}}\n {{cell.count}}\n {{/if}}\n \n {{else}}\n {{#if cell.count}}\n \n {{/if}}\n \n {{row.fullTitle}} | Segment {{cell.bucket}}: {{cell.count}}\n \n \n {{#if cell.count}}\n {{cell.count}}\n {{/if}}\n {{/if}}\n {{/each}}\n {{/each}}\n \n {{#each formReport.heatmap.segmentAxisLabels as |axisLabel|}}\n {{axisLabel.label}}\n {{/each}}\n \n {{formReport.heatmap.xAxisStartLabel}}\n {{formReport.heatmap.xAxisEndLabel}}\n \n \n
\n
\n \n \n \n \n \n \n \n \n \n {{#each formReport.series as |series|}}\n \n \n \n \n \n {{/each}}\n \n
Look ForTotal MomentsFirst Moment
\n {{series.title}}\n {{series.total}}{{series.firstMomentStartLabel}}
\n
\n
\n
\n
\n {{/each}}\n \n \n {{else}}\n

No marked up moments found.\n {{#if @video.canTag}}\n Mark up this video now.\n {{/if}}\n

\n {{/if}}\n */\n {\n \"id\": \"PTHXMGvM\",\n \"block\": \"[[[41,[30,0,[\\\"markedMomentsFormReports\\\",\\\"length\\\"]],[[[1,\\\" \\\"],[11,0],[24,0,\\\"row m-a-none\\\"],[4,[38,2],[[30,0,[\\\"captureButtonColors\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,4],[[28,[37,4],[[30,0,[\\\"markedMomentsFormReports\\\"]]],null]],null],null,[[[1,\\\" \\\"],[10,0],[15,0,[30,0,[\\\"markedMomentsFormColumnClass\\\"]]],[12],[1,\\\"\\\\n \\\"],[10,0],[15,0,[29,[\\\"card card-overflow-visible \\\",[30,2],\\\" p-a-sm text-white\\\"]]],[12],[1,\\\"\\\\n \\\"],[10,\\\"h3\\\"],[14,0,\\\"h5 display-inline-block\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"small\\\"],[14,0,\\\"smaller font-weight-normal display-block\\\"],[12],[1,\\\"Heatmap for:\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,[30,1,[\\\"title\\\"]]],[13],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row m-b-sm\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-4\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"bg-inverse img-rounded p-a-xs text-xs-center\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"h4 m-b-none\\\"],[12],[1,[30,1,[\\\"totalMoments\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"small\\\"],[14,0,\\\"text-uppercase display-block smaller\\\"],[12],[1,\\\"Marked Moments\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-4\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"bg-inverse img-rounded p-a-xs text-xs-center\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"h4 m-b-none\\\"],[12],[1,[30,1,[\\\"bucketCount\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"small\\\"],[14,0,\\\"text-uppercase display-block smaller\\\"],[12],[1,\\\"Time Segments\\\\n \\\"],[10,1],[14,0,\\\"dropdown display-inline-block\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,9],null,[[\\\"@class\\\",\\\"@labelText\\\",\\\"@menuOpenAction\\\",\\\"@style\\\",\\\"@menuName\\\",\\\"@aria-label\\\",\\\"@aria-expanded\\\",\\\"@aria-controls\\\",\\\"@focusOnOpen\\\",\\\"@focusTargetId\\\",\\\"@closeOnEscape\\\",\\\"@returnFocusOnClose\\\",\\\"@id\\\"],[\\\"border-none label label-pill label-info smaller\\\",\\\"?\\\",[30,0,[\\\"menuIsOpen\\\"]],\\\"padding: 2px 6px\\\",[28,[37,10],[\\\"segments-help-\\\",[30,1,[\\\"id\\\"]]],null],[52,[28,[37,11],[[30,0],[28,[37,10],[\\\"menuOpen-segments-help-\\\",[30,1,[\\\"id\\\"]]],null]],null],\\\"Hide Time Segments help\\\",\\\"Show Time Segments help\\\"],[52,[28,[37,11],[[30,0],[28,[37,10],[\\\"menuOpen-segments-help-\\\",[30,1,[\\\"id\\\"]]],null]],null],\\\"true\\\",\\\"false\\\"],[28,[37,10],[\\\"segments-help-popover-\\\",[30,1,[\\\"id\\\"]]],null],true,[28,[37,10],[\\\"segments-help-popover-\\\",[30,1,[\\\"id\\\"]]],null],true,true,[28,[37,10],[\\\"segments-help-\\\",[30,1,[\\\"id\\\"]]],null]]],null],[1,\\\"\\\\n \\\"],[10,0],[15,1,[28,[37,10],[\\\"segments-help-popover-\\\",[30,1,[\\\"id\\\"]]],null]],[14,0,\\\"popover popover-bottom popover-left\\\"],[14,\\\"role\\\",\\\"region\\\"],[14,\\\"tabindex\\\",\\\"-1\\\"],[15,\\\"aria-labelledby\\\",[28,[37,10],[\\\"segments-help-popover-title-\\\",[30,1,[\\\"id\\\"]]],null]],[15,\\\"aria-describedby\\\",[28,[37,10],[\\\"segments-help-popover-content-\\\",[30,1,[\\\"id\\\"]]],null]],[15,\\\"hidden\\\",[52,[28,[37,11],[[30,0],[28,[37,10],[\\\"menuOpen-segments-help-\\\",[30,1,[\\\"id\\\"]]],null]],null],false,true]],[14,5,\\\"width: 260px;top: 10px;right: auto;left: -120px; overflow: hidden;\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"popover-title text-dark\\\"],[15,1,[28,[37,10],[\\\"segments-help-popover-title-\\\",[30,1,[\\\"id\\\"]]],null]],[12],[10,\\\"strong\\\"],[12],[1,\\\"Time Segments\\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"popover-content text-dark\\\"],[15,1,[28,[37,10],[\\\"segments-help-popover-content-\\\",[30,1,[\\\"id\\\"]]],null]],[12],[1,\\\"The timeline is split into equal segments. Each cell shows how many moments were marked there.\\\\nScan across a row to see when a tag spiked - down a column to find moments worth reviewing together.\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-4\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"bg-inverse img-rounded p-a-xs text-xs-center\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"h4 m-b-none\\\"],[12],[1,[30,1,[\\\"segmentLengthLabel\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"small\\\"],[14,0,\\\"text-uppercase display-block smaller\\\"],[12],[1,\\\"Segment Length\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"svg\\\"],[15,\\\"viewBox\\\",[28,[37,10],[\\\"0 0 \\\",[30,1,[\\\"heatmap\\\",\\\"width\\\"]],\\\" \\\",[30,1,[\\\"heatmap\\\",\\\"height\\\"]]],null]],[14,\\\"role\\\",\\\"img\\\"],[15,\\\"aria-label\\\",[28,[37,10],[\\\"Marked moments heatmap for \\\",[30,1,[\\\"title\\\"]]],null]],[14,0,\\\"bg-inverse border-radius-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"line\\\"],[15,\\\"x1\\\",[30,1,[\\\"heatmap\\\",\\\"paddingLeft\\\"]]],[15,\\\"y1\\\",[30,1,[\\\"heatmap\\\",\\\"xAxisY\\\"]]],[15,\\\"x2\\\",[30,1,[\\\"heatmap\\\",\\\"xAxisEndX\\\"]]],[15,\\\"y2\\\",[30,1,[\\\"heatmap\\\",\\\"xAxisY\\\"]]],[14,\\\"stroke\\\",\\\"rgba(255, 255, 255, 0.5)\\\"],[14,\\\"stroke-width\\\",\\\"1\\\"],[12],[13],[1,\\\"\\\\n\\\\n\\\"],[42,[28,[37,4],[[28,[37,4],[[30,1,[\\\"heatmap\\\",\\\"verticalSegmentLines\\\"]]],null]],null],null,[[[1,\\\" \\\"],[10,\\\"line\\\"],[15,\\\"x1\\\",[30,3]],[15,\\\"y1\\\",[30,1,[\\\"heatmap\\\",\\\"paddingTop\\\"]]],[15,\\\"x2\\\",[30,3]],[15,\\\"y2\\\",[30,1,[\\\"heatmap\\\",\\\"xAxisY\\\"]]],[14,\\\"stroke\\\",\\\"rgba(255, 255, 255, 0.15)\\\"],[14,\\\"stroke-width\\\",\\\"0.5\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[3]],null],[1,\\\"\\\\n\\\"],[42,[28,[37,4],[[28,[37,4],[[30,1,[\\\"heatmap\\\",\\\"rows\\\"]]],null]],null],null,[[[1,\\\" \\\"],[10,\\\"text\\\"],[14,\\\"x\\\",\\\"4\\\"],[15,\\\"y\\\",[30,4,[\\\"labelY\\\"]]],[14,\\\"fill\\\",\\\"rgba(255, 255, 255, 0.8)\\\"],[14,\\\"font-size\\\",\\\"6\\\"],[12],[1,[30,4,[\\\"clippedTitle\\\"]]],[1,\\\"...\\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[42,[28,[37,4],[[28,[37,4],[[30,4,[\\\"cells\\\"]]],null]],null],null,[[[41,[30,5,[\\\"canNavigate\\\"]],[[[1,\\\" \\\"],[11,3],[24,6,\\\"#\\\"],[16,\\\"aria-label\\\",[28,[37,10],[\\\"Open first moment at \\\",[30,5,[\\\"firstMomentStartLabel\\\"]],\\\" for \\\",[30,4,[\\\"fullTitle\\\"]],\\\", segment \\\",[30,5,[\\\"bucket\\\"]]],null]],[4,[38,16],[\\\"click\\\",[28,[37,17],[[30,0,[\\\"onHeatmapCellClick\\\"]],[30,5]],null]],null],[4,[38,16],[\\\"keydown\\\",[28,[37,17],[[30,0,[\\\"onHeatmapCellKeyDown\\\"]],[30,5]],null]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,5,[\\\"count\\\"]],[[[1,\\\" \\\"],[10,\\\"rect\\\"],[15,\\\"x\\\",[30,5,[\\\"x\\\"]]],[15,\\\"y\\\",[30,5,[\\\"y\\\"]]],[15,\\\"width\\\",[30,5,[\\\"width\\\"]]],[15,\\\"height\\\",[30,5,[\\\"height\\\"]]],[14,\\\"rx\\\",\\\"2\\\"],[14,\\\"ry\\\",\\\"2\\\"],[14,\\\"fill\\\",\\\"white\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[10,\\\"rect\\\"],[15,\\\"x\\\",[30,5,[\\\"x\\\"]]],[15,\\\"y\\\",[30,5,[\\\"y\\\"]]],[15,\\\"width\\\",[30,5,[\\\"width\\\"]]],[15,\\\"height\\\",[30,5,[\\\"height\\\"]]],[14,\\\"rx\\\",\\\"2\\\"],[14,\\\"ry\\\",\\\"2\\\"],[15,\\\"fill\\\",[30,5,[\\\"fillColor\\\"]]],[14,\\\"stroke\\\",\\\"rgba(255, 255, 255, 0.08)\\\"],[14,\\\"stroke-width\\\",\\\"0.5\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"title\\\"],[12],[1,[30,4,[\\\"fullTitle\\\"]]],[1,\\\" | Segment \\\"],[1,[30,5,[\\\"bucket\\\"]]],[1,\\\": \\\"],[1,[30,5,[\\\"count\\\"]]],[1,\\\" | First: \\\"],[1,[30,5,[\\\"firstMomentStartLabel\\\"]]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,5,[\\\"count\\\"]],[[[1,\\\" \\\"],[10,\\\"text\\\"],[15,\\\"x\\\",[30,5,[\\\"labelX\\\"]]],[15,\\\"y\\\",[30,5,[\\\"labelY\\\"]]],[14,\\\"text-anchor\\\",\\\"middle\\\"],[15,\\\"fill\\\",[30,5,[\\\"labelColor\\\"]]],[14,\\\"font-size\\\",\\\"6\\\"],[14,\\\"font-weight\\\",\\\"600\\\"],[12],[1,[30,5,[\\\"count\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[41,[30,5,[\\\"count\\\"]],[[[1,\\\" \\\"],[10,\\\"rect\\\"],[15,\\\"x\\\",[30,5,[\\\"x\\\"]]],[15,\\\"y\\\",[30,5,[\\\"y\\\"]]],[15,\\\"width\\\",[30,5,[\\\"width\\\"]]],[15,\\\"height\\\",[30,5,[\\\"height\\\"]]],[14,\\\"rx\\\",\\\"2\\\"],[14,\\\"ry\\\",\\\"2\\\"],[14,\\\"fill\\\",\\\"white\\\"],[12],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[10,\\\"rect\\\"],[15,\\\"x\\\",[30,5,[\\\"x\\\"]]],[15,\\\"y\\\",[30,5,[\\\"y\\\"]]],[15,\\\"width\\\",[30,5,[\\\"width\\\"]]],[15,\\\"height\\\",[30,5,[\\\"height\\\"]]],[14,\\\"rx\\\",\\\"2\\\"],[14,\\\"ry\\\",\\\"2\\\"],[15,\\\"fill\\\",[30,5,[\\\"fillColor\\\"]]],[14,\\\"stroke\\\",\\\"rgba(255, 255, 255, 0.08)\\\"],[14,\\\"stroke-width\\\",\\\"0.5\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"title\\\"],[12],[1,[30,4,[\\\"fullTitle\\\"]]],[1,\\\" | Segment \\\"],[1,[30,5,[\\\"bucket\\\"]]],[1,\\\": \\\"],[1,[30,5,[\\\"count\\\"]]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,5,[\\\"count\\\"]],[[[1,\\\" \\\"],[10,\\\"text\\\"],[15,\\\"x\\\",[30,5,[\\\"labelX\\\"]]],[15,\\\"y\\\",[30,5,[\\\"labelY\\\"]]],[14,\\\"text-anchor\\\",\\\"middle\\\"],[15,\\\"fill\\\",[30,5,[\\\"labelColor\\\"]]],[14,\\\"font-size\\\",\\\"6\\\"],[14,\\\"font-weight\\\",\\\"600\\\"],[12],[1,[30,5,[\\\"count\\\"]]],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]]],[5]],null]],[4]],null],[1,\\\"\\\\n\\\"],[42,[28,[37,4],[[28,[37,4],[[30,1,[\\\"heatmap\\\",\\\"segmentAxisLabels\\\"]]],null]],null],null,[[[1,\\\" \\\"],[10,\\\"text\\\"],[15,\\\"x\\\",[30,6,[\\\"x\\\"]]],[15,\\\"y\\\",[30,1,[\\\"heatmap\\\",\\\"axisLabelY\\\"]]],[14,\\\"text-anchor\\\",\\\"middle\\\"],[14,\\\"fill\\\",\\\"rgba(255, 255, 255, 0.7)\\\"],[14,\\\"font-size\\\",\\\"6\\\"],[12],[1,[30,6,[\\\"label\\\"]]],[13],[1,\\\"\\\\n\\\"]],[6]],null],[1,\\\"\\\\n \\\"],[10,\\\"text\\\"],[15,\\\"x\\\",[30,1,[\\\"heatmap\\\",\\\"paddingLeft\\\"]]],[15,\\\"y\\\",[30,1,[\\\"heatmap\\\",\\\"axisLabelY\\\"]]],[14,\\\"text-anchor\\\",\\\"middle\\\"],[14,\\\"fill\\\",\\\"rgba(255, 255, 255, 0.8)\\\"],[14,\\\"font-size\\\",\\\"6\\\"],[12],[1,[30,1,[\\\"heatmap\\\",\\\"xAxisStartLabel\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"text\\\"],[15,\\\"x\\\",[30,1,[\\\"heatmap\\\",\\\"xAxisEndLabelX\\\"]]],[15,\\\"y\\\",[30,1,[\\\"heatmap\\\",\\\"axisLabelY\\\"]]],[14,\\\"text-anchor\\\",\\\"middle\\\"],[14,\\\"fill\\\",\\\"rgba(255, 255, 255, 0.8)\\\"],[14,\\\"font-size\\\",\\\"6\\\"],[12],[1,[30,1,[\\\"heatmap\\\",\\\"xAxisEndLabel\\\"]]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[10,0],[14,0,\\\"m-t-xs hidden-xs-up\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"table-responsive\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"table\\\"],[14,0,\\\"table table-sm small m-b-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"thead\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[14,\\\"scope\\\",\\\"col\\\"],[12],[1,\\\"Look For\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[14,\\\"scope\\\",\\\"col\\\"],[14,0,\\\"text-xs-center\\\"],[12],[1,\\\"Total Moments\\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"th\\\"],[14,\\\"scope\\\",\\\"col\\\"],[14,0,\\\"text-xs-right\\\"],[12],[1,\\\"First Moment\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"tbody\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,4],[[28,[37,4],[[30,1,[\\\"series\\\"]]],null]],null],null,[[[1,\\\" \\\"],[10,\\\"tr\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[15,0,[29,[[30,7,[\\\"colorClass\\\"]]]]],[12],[1,\\\"\\\\n \\\"],[8,[39,26],[[24,0,\\\"text-white border-b-none\\\"]],[[\\\"@route\\\",\\\"@models\\\"],[\\\"watch.withmoments.playlist\\\",[28,[37,27],[[30,8,[\\\"id\\\"]],[30,7,[\\\"id\\\"]]],null]]],[[\\\"default\\\"],[[[[1,[30,7,[\\\"title\\\"]]]],[]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[14,0,\\\"text-xs-center\\\"],[12],[1,[30,7,[\\\"total\\\"]]],[13],[1,\\\"\\\\n \\\"],[10,\\\"td\\\"],[14,0,\\\"text-xs-right\\\"],[12],[1,[30,7,[\\\"firstMomentStartLabel\\\"]]],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[7]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[1]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,2],[14,0,\\\"text-muted m-b-xl\\\"],[12],[1,\\\"No marked up moments found.\\\\n\\\"],[41,[30,8,[\\\"canTag\\\"]],[[[1,\\\" \\\"],[10,\\\"strong\\\"],[12],[8,[39,26],[[24,0,\\\"text-bold text-success-ally\\\"]],[[\\\"@route\\\",\\\"@model\\\"],[\\\"watch.withform\\\",[30,8,[\\\"id\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"Mark up this video now.\\\"]],[]]]]],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[\\\"formReport\\\",\\\"@borderClass\\\",\\\"segmentX\\\",\\\"row\\\",\\\"cell\\\",\\\"axisLabel\\\",\\\"series\\\",\\\"@video\\\"],[\\\"if\\\",\\\"div\\\",\\\"did-insert\\\",\\\"each\\\",\\\"-track-array\\\",\\\"h3\\\",\\\"small\\\",\\\"strong\\\",\\\"span\\\",\\\"input-button-dropdown\\\",\\\"concat\\\",\\\"get\\\",\\\"svg\\\",\\\"line\\\",\\\"text\\\",\\\"a\\\",\\\"on\\\",\\\"fn\\\",\\\"rect\\\",\\\"title\\\",\\\"table\\\",\\\"thead\\\",\\\"tr\\\",\\\"th\\\",\\\"tbody\\\",\\\"td\\\",\\\"link-to\\\",\\\"array\\\",\\\"p\\\"]]\",\n \"moduleName\": \"vosaic/components/marked-momnets-charts/index.hbs\",\n \"isStrictMode\": false\n });\n const MARKED_MOMENTS_CHART = {\n width: 320,\n height: 160,\n paddingLeft: 26,\n paddingRight: 8,\n paddingTop: 16,\n paddingBottom: 24\n };\n const MARKED_MOMENTS_HEATMAP = {\n width: 320,\n paddingLeft: 94,\n paddingRight: 16,\n paddingTop: 10,\n paddingBottom: 14,\n rowHeight: 12,\n rowGap: 2,\n cellGap: 5,\n maxLabelChars: 24\n };\n const BUTTON_COLOR_CLASSES = ['code-btn-a', 'code-btn-b', 'code-btn-c', 'code-btn-d', 'code-btn-e', 'code-btn-f', 'code-btn-g', 'code-btn-h', 'code-btn-i', 'code-btn-j'];\n const FALLBACK_BUTTON_COLORS = {\n 'code-btn-a': '#0249b2',\n 'code-btn-b': '#0271a8',\n 'code-btn-c': '#088088',\n 'code-btn-d': '#0a9ba5',\n 'code-btn-e': '#3cb878',\n 'code-btn-f': '#5cb85c',\n 'code-btn-g': '#c39d0a',\n 'code-btn-h': '#c66e2b',\n 'code-btn-i': '#bc3f02',\n 'code-btn-j': '#ac3a87'\n };\n let MarkedMomnetsChartsComponent = _exports.default = (_class = class MarkedMomnetsChartsComponent extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"router\", _descriptor, this);\n _initializerDefineProperty(this, \"playstateManager\", _descriptor2, this);\n _initializerDefineProperty(this, \"buttonColorMap\", _descriptor3, this);\n _initializerDefineProperty(this, \"hasCapturedButtonColors\", _descriptor4, this);\n }\n get allMoments() {\n return this.args.momentBundle?.reportableMoments;\n }\n get videoDurationInSeconds() {\n const duration = Number(this.args.video?.durationInSeconds || 0);\n return Number.isFinite(duration) && duration > 0 ? duration : 0;\n }\n get markedMomentsBucketCount() {\n const durationInSeconds = this.videoDurationInSeconds;\n if (!durationInSeconds) {\n return 1;\n }\n\n // Use odd bucket counts so the center segment is explicit in both charts.\n if (durationInSeconds <= 15 * 60) {\n return 3;\n }\n if (durationInSeconds <= 45 * 60) {\n return 5;\n }\n return 7;\n }\n get markedMomentsFormColumnClass() {\n return this.markedMomentsFormReports.length > 1 ? 'col-xs-12 p-x-none' : 'col-xs-12 p-x-none';\n }\n get markedMomentsFormReports() {\n const allMoments = this.toPlainArray(this.allMoments);\n const forms = this.toPlainArray(this.args.momentBundle?.forms);\n const bucketCount = this.markedMomentsBucketCount;\n return forms.map(form => this.createMarkedMomentsFormReport(form, allMoments, bucketCount)).filter(report => report.totalMoments > 0);\n }\n toPlainArray(collection) {\n if (!collection) {\n return [];\n }\n if (Array.isArray(collection)) {\n return collection;\n }\n if (typeof collection.toArray === 'function') {\n return collection.toArray();\n }\n if (typeof collection[Symbol.iterator] === 'function') {\n return [...collection];\n }\n return [];\n }\n createMarkedMomentsFormReport(form, allMoments, bucketCount) {\n const formButtons = this.toPlainArray(form?.buttons);\n const formId = form?.id;\n const formMoments = allMoments.filter(moment => moment?.formId === formId);\n const duration = this.videoDurationInSeconds;\n const bucketSize = duration > 0 ? duration / bucketCount : 1;\n const series = formButtons.map((button, seriesIndex) => {\n const buttonId = button?.originalId || button?.id;\n const bucketCounts = Array.from({\n length: bucketCount\n }, () => 0);\n const bucketFirstMoments = Array.from({\n length: bucketCount\n }, () => null);\n let firstMomentStart = null;\n formMoments.forEach(moment => {\n if (moment?.buttonId !== buttonId) {\n return;\n }\n const safeTimeStart = Number.isFinite(Number(moment?.timeStart)) ? Math.max(Number(moment.timeStart), 0) : 0;\n if (firstMomentStart === null || safeTimeStart < firstMomentStart) {\n firstMomentStart = safeTimeStart;\n }\n const bucketIndex = this.getTimelineBucketIndex(safeTimeStart, bucketCount, bucketSize);\n bucketCounts[bucketIndex] += 1;\n const existingBucketMoment = bucketFirstMoments[bucketIndex];\n if (!existingBucketMoment || safeTimeStart < existingBucketMoment.timeStart) {\n bucketFirstMoments[bucketIndex] = {\n moment,\n timeStart: safeTimeStart\n };\n }\n });\n const total = bucketCounts.reduce((sum, count) => sum + count, 0);\n return {\n id: buttonId || `${formId}-${seriesIndex}`,\n title: button?.title || 'Untitled Button',\n colorClass: button?.colorClass || 'code-btn-a',\n total,\n firstMomentStartLabel: firstMomentStart === null ? '-' : this.formatSeconds(firstMomentStart),\n bucketCounts,\n bucketFirstMoments\n };\n });\n const maxSeriesValue = Math.max(1, ...series.flatMap(buttonSeries => buttonSeries.bucketCounts));\n const chart = this.buildMarkedMomentsChartLayout(maxSeriesValue, bucketCount);\n const chartSeries = series.map((buttonSeries, seriesIndex) => {\n const points = this.buildMarkedMomentsChartPoints(buttonSeries.bucketCounts, chart);\n return {\n ...buttonSeries,\n strokeColor: this.resolveButtonLineColor(buttonSeries.colorClass, seriesIndex),\n points,\n pointString: points.map(point => `${point.x},${point.y}`).join(' ')\n };\n });\n const pointLabels = this.buildCombinedPointLabels(chartSeries);\n const segmentAxisLabels = this.buildSegmentAxisLabels(chart.verticalSegmentLines, duration, bucketCount);\n const heatmap = this.buildHeatmapModel(chartSeries, bucketCount, duration);\n return {\n id: formId,\n title: form?.title || 'Untitled Form',\n totalMoments: formMoments.length,\n bucketCount,\n segmentLengthLabel: this.formatSegmentLength(bucketSize),\n xAxisStartLabel: this.formatTimelineSeconds(0),\n xAxisEndLabel: this.formatTimelineSeconds(duration),\n chart,\n series: chartSeries,\n pointLabels,\n segmentAxisLabels,\n heatmap\n };\n }\n buildSegmentAxisLabels(verticalSegmentLines, durationInSeconds, bucketCount) {\n if (!verticalSegmentLines?.length || bucketCount <= 1) {\n return [];\n }\n return verticalSegmentLines.map((x, index) => {\n const boundaryIndex = index + 1;\n const boundaryTime = boundaryIndex / bucketCount * durationInSeconds;\n return {\n x,\n label: this.formatTimelineSeconds(boundaryTime)\n };\n });\n }\n buildCombinedPointLabels(chartSeries) {\n const labelMap = new Map();\n chartSeries.forEach(series => {\n series.points.forEach(point => {\n const key = `${point.x}:${point.y}`;\n const existingLabel = labelMap.get(key);\n if (existingLabel) {\n existingLabel.value += point.value;\n return;\n }\n labelMap.set(key, {\n x: point.x,\n y: point.y,\n value: point.value\n });\n });\n });\n return [...labelMap.values()];\n }\n buildHeatmapModel(chartSeries, bucketCount, durationInSeconds) {\n const maxCellValue = Math.max(0, ...chartSeries.flatMap(buttonSeries => buttonSeries.bucketCounts));\n const layout = this.buildHeatmapLayout(chartSeries.length, bucketCount);\n const verticalSegmentLines = this.buildHeatmapVerticalSegmentLines(layout, bucketCount);\n const xAxisEndLabel = this.formatTimelineSeconds(durationInSeconds);\n const segmentAxisLabels = this.buildSegmentAxisLabels(verticalSegmentLines, durationInSeconds, bucketCount);\n const rows = this.buildHeatmapRows(chartSeries, maxCellValue, layout);\n return {\n ...layout,\n rows,\n maxCellValue,\n verticalSegmentLines,\n segmentAxisLabels,\n xAxisStartLabel: this.formatTimelineSeconds(0),\n xAxisEndLabel\n };\n }\n buildHeatmapLayout(rowCount, bucketCount) {\n const {\n width,\n paddingLeft,\n paddingRight,\n paddingTop,\n paddingBottom,\n rowHeight,\n rowGap,\n cellGap\n } = MARKED_MOMENTS_HEATMAP;\n const safeRowCount = Math.max(rowCount, 1);\n const safeBucketCount = Math.max(bucketCount, 1);\n const plotWidth = width - paddingLeft - paddingRight;\n const totalGapWidth = Math.max(safeBucketCount - 1, 0) * cellGap;\n const cellWidth = (plotWidth - totalGapWidth) / safeBucketCount;\n const plotHeight = safeRowCount * rowHeight + Math.max(safeRowCount - 1, 0) * rowGap;\n const height = Number((paddingTop + plotHeight + paddingBottom).toFixed(2));\n return {\n width,\n height,\n paddingLeft,\n paddingRight,\n paddingTop,\n paddingBottom,\n rowHeight,\n rowGap,\n cellGap,\n plotWidth,\n plotHeight,\n cellWidth,\n xAxisY: Number((paddingTop + plotHeight + 2).toFixed(2)),\n xAxisEndX: width - paddingRight,\n xAxisEndLabelX: width - paddingRight,\n axisLabelY: Number((height - 4).toFixed(2)),\n labelMaxChars: MARKED_MOMENTS_HEATMAP.maxLabelChars\n };\n }\n formatTimelineSeconds(totalSeconds) {\n const safeSeconds = Math.max(0, Math.floor(Number(totalSeconds || 0)));\n if (safeSeconds < 60 * 60) {\n const minutes = Math.floor(safeSeconds / 60);\n const seconds = safeSeconds % 60;\n return `${`${minutes}`.padStart(2, '0')}:${`${seconds}`.padStart(2, '0')}`;\n }\n const hours = Math.floor(safeSeconds / 3600);\n const minutes = Math.floor(safeSeconds % 3600 / 60);\n const seconds = safeSeconds % 60;\n return `${`${hours}`.padStart(2, '0')}:${`${minutes}`.padStart(2, '0')}:${`${seconds}`.padStart(2, '0')}`;\n }\n buildHeatmapVerticalSegmentLines(layout, bucketCount) {\n if (bucketCount <= 1) {\n return [];\n }\n const safeBucketCount = Math.max(bucketCount, 1);\n return Array.from({\n length: safeBucketCount - 1\n }, (_, index) => {\n const boundaryIndex = index + 1;\n const x = layout.paddingLeft + boundaryIndex * layout.cellWidth + Math.max(boundaryIndex - 0.5, 0) * layout.cellGap;\n return Number(x.toFixed(2));\n });\n }\n buildHeatmapRows(chartSeries, maxCellValue, layout) {\n return chartSeries.map((buttonSeries, rowIndex) => {\n const rowY = layout.paddingTop + rowIndex * (layout.rowHeight + layout.rowGap);\n const fullTitle = buttonSeries.title || 'Untitled Button';\n const clippedTitle = this.clipLabel(fullTitle, layout.labelMaxChars);\n const cells = buttonSeries.bucketCounts.map((count, bucketIndex) => {\n const x = layout.paddingLeft + bucketIndex * (layout.cellWidth + layout.cellGap);\n const normalized = maxCellValue > 0 ? count / maxCellValue : 0;\n const opacity = count > 0 ? 0.2 + normalized * 0.75 : 0.06;\n const fillColor = this.applyAlphaToColor(buttonSeries.strokeColor, opacity);\n const firstBucketMoment = buttonSeries.bucketFirstMoments?.[bucketIndex] || null;\n const firstMoment = firstBucketMoment?.moment;\n const firstMomentStart = firstBucketMoment?.timeStart;\n const canNavigate = Boolean(count > 0 && firstMoment && buttonSeries.id);\n return {\n x: Number(x.toFixed(2)),\n y: Number(rowY.toFixed(2)),\n width: Number(layout.cellWidth.toFixed(2)),\n height: layout.rowHeight,\n bucket: bucketIndex + 1,\n count,\n fillColor,\n labelColor: this.resolveHeatmapCellLabelColor(buttonSeries.strokeColor, opacity),\n labelX: Number((x + layout.cellWidth / 2).toFixed(2)),\n labelY: Number((rowY + layout.rowHeight / 2 + 2).toFixed(2)),\n canNavigate,\n buttonId: buttonSeries.id,\n firstMoment,\n firstMomentStart,\n firstMomentStartLabel: firstMomentStart == null ? null : this.formatTimelineSeconds(firstMomentStart)\n };\n });\n return {\n ...buttonSeries,\n fullTitle,\n clippedTitle,\n labelY: Number((rowY + layout.rowHeight / 2 + 3).toFixed(2)),\n cells\n };\n });\n }\n getTimelineBucketIndex(timeStart, bucketCount, bucketSize) {\n if (bucketCount <= 1) {\n return 0;\n }\n const safeTime = Number.isFinite(Number(timeStart)) ? Math.max(Number(timeStart), 0) : 0;\n const index = Math.floor(safeTime / Math.max(bucketSize, 1));\n return Math.min(bucketCount - 1, Math.max(index, 0));\n }\n buildMarkedMomentsChartLayout(maxY, bucketCount) {\n const {\n width,\n height,\n paddingLeft,\n paddingRight,\n paddingTop,\n paddingBottom\n } = MARKED_MOMENTS_CHART;\n const plotWidth = width - paddingLeft - paddingRight;\n const safeBucketCount = Math.max(bucketCount, 1);\n const verticalSegmentLines = Array.from({\n length: Math.max(safeBucketCount - 1, 0)\n }, (_, index) => {\n const boundaryIndex = index + 1;\n const x = paddingLeft + boundaryIndex / safeBucketCount * plotWidth;\n return Number(x.toFixed(2));\n });\n return {\n width,\n height,\n paddingLeft,\n paddingRight,\n paddingTop,\n paddingBottom,\n plotWidth,\n plotHeight: height - paddingTop - paddingBottom,\n denominator: Math.max(bucketCount - 1, 1),\n maxY,\n xAxisY: height - paddingBottom,\n xAxisEndX: width - paddingRight,\n xAxisEndLabelX: width - paddingRight - 26,\n yAxisX: paddingLeft,\n yAxisTopY: paddingTop,\n verticalSegmentLines\n };\n }\n buildMarkedMomentsChartPoints(bucketCounts, chart) {\n return bucketCounts.map((count, index) => {\n const x = chart.paddingLeft + index / chart.denominator * chart.plotWidth;\n const y = chart.paddingTop + chart.plotHeight * (1 - count / chart.maxY);\n return {\n x: Number(x.toFixed(2)),\n y: Number(y.toFixed(2)),\n bucket: index + 1,\n value: count\n };\n });\n }\n resolveButtonLineColor(colorClass, index) {\n if (this.buttonColorMap[colorClass]) {\n return this.buttonColorMap[colorClass];\n }\n if (FALLBACK_BUTTON_COLORS[colorClass]) {\n return FALLBACK_BUTTON_COLORS[colorClass];\n }\n const fallbackColorList = Object.values(FALLBACK_BUTTON_COLORS);\n return fallbackColorList[index % fallbackColorList.length];\n }\n applyAlphaToColor(color, alpha) {\n const safeAlpha = Number(Math.min(Math.max(alpha, 0), 1).toFixed(2));\n if (!color) {\n return `rgba(2, 73, 178, ${safeAlpha})`;\n }\n const rgbMatch = color.match(/^rgba?\\(([^)]+)\\)$/i);\n if (rgbMatch) {\n const [red, green, blue] = rgbMatch[1].split(',').slice(0, 3).map(value => Number.parseFloat(value.trim()));\n if ([red, green, blue].every(value => Number.isFinite(value))) {\n return `rgba(${red}, ${green}, ${blue}, ${safeAlpha})`;\n }\n }\n if (color[0] === '#') {\n const expandedHex = color.length === 4 ? `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}` : color;\n const isValidHex = /^#[0-9A-Fa-f]{6}$/.test(expandedHex);\n if (isValidHex) {\n const red = Number.parseInt(expandedHex.slice(1, 3), 16);\n const green = Number.parseInt(expandedHex.slice(3, 5), 16);\n const blue = Number.parseInt(expandedHex.slice(5, 7), 16);\n return `rgba(${red}, ${green}, ${blue}, ${safeAlpha})`;\n }\n }\n return color;\n }\n resolveHeatmapCellLabelColor(baseColor, overlayAlpha) {\n const baseRgb = this.parseColorToRgb(baseColor);\n\n // Non-parsable colors are uncommon, default to dark text for the white base.\n if (!baseRgb) {\n return '#111111';\n }\n\n // Non-zero heatmap cells are rendered over a white base rect in the template.\n const blendedRgb = this.blendRgbOverWhite(baseRgb, overlayAlpha);\n const contrastWithWhite = this.getContrastRatio(blendedRgb, {\n red: 255,\n green: 255,\n blue: 255\n });\n const contrastWithBlack = this.getContrastRatio(blendedRgb, {\n red: 0,\n green: 0,\n blue: 0\n });\n return contrastWithBlack >= contrastWithWhite ? '#111111' : '#ffffff';\n }\n parseColorToRgb(color) {\n if (!color || typeof color !== 'string') {\n return null;\n }\n const rgbMatch = color.match(/^rgba?\\(([^)]+)\\)$/i);\n if (rgbMatch) {\n const [red, green, blue] = rgbMatch[1].split(',').slice(0, 3).map(value => Number.parseFloat(value.trim()));\n if ([red, green, blue].every(value => Number.isFinite(value))) {\n return {\n red,\n green,\n blue\n };\n }\n }\n if (color[0] === '#') {\n const expandedHex = color.length === 4 ? `#${color[1]}${color[1]}${color[2]}${color[2]}${color[3]}${color[3]}` : color;\n const isValidHex = /^#[0-9A-Fa-f]{6}$/.test(expandedHex);\n if (isValidHex) {\n return {\n red: Number.parseInt(expandedHex.slice(1, 3), 16),\n green: Number.parseInt(expandedHex.slice(3, 5), 16),\n blue: Number.parseInt(expandedHex.slice(5, 7), 16)\n };\n }\n }\n return null;\n }\n blendRgbOverWhite(rgb, alpha) {\n const safeAlpha = Math.min(Math.max(Number(alpha || 0), 0), 1);\n return {\n red: rgb.red * safeAlpha + 255 * (1 - safeAlpha),\n green: rgb.green * safeAlpha + 255 * (1 - safeAlpha),\n blue: rgb.blue * safeAlpha + 255 * (1 - safeAlpha)\n };\n }\n getContrastRatio(rgbA, rgbB) {\n const luminanceA = this.getRelativeLuminance(rgbA);\n const luminanceB = this.getRelativeLuminance(rgbB);\n const lighter = Math.max(luminanceA, luminanceB);\n const darker = Math.min(luminanceA, luminanceB);\n return (lighter + 0.05) / (darker + 0.05);\n }\n getRelativeLuminance({\n red,\n green,\n blue\n }) {\n const normalizeChannel = channel => {\n const srgb = channel / 255;\n return srgb <= 0.03928 ? srgb / 12.92 : ((srgb + 0.055) / 1.055) ** 2.4;\n };\n const r = normalizeChannel(red);\n const g = normalizeChannel(green);\n const b = normalizeChannel(blue);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n }\n clipLabel(label, maxChars = MARKED_MOMENTS_HEATMAP.maxLabelChars) {\n const safeLabel = `${label || ''}`.trim();\n if (safeLabel.length <= maxChars) {\n return safeLabel;\n }\n return safeLabel.slice(0, maxChars);\n }\n isTransparentColor(color) {\n return !color || color === 'transparent' || color === 'rgba(0, 0, 0, 0)';\n }\n formatSeconds(totalSeconds) {\n const safeSeconds = Math.max(0, Math.floor(Number(totalSeconds || 0)));\n const minutes = Math.floor(safeSeconds / 60);\n const seconds = safeSeconds % 60;\n if (!minutes) {\n return `${seconds}s`;\n }\n return `${minutes}:${`${seconds}`.padStart(2, '0')}`;\n }\n formatSegmentLength(totalSeconds) {\n const safeSeconds = Math.max(1, Math.round(Number(totalSeconds || 0)));\n if (safeSeconds > 60) {\n const minutes = Math.floor(safeSeconds / 60);\n const seconds = safeSeconds % 60;\n return `${minutes}:${`${seconds}`.padStart(2, '0')} min`;\n }\n return `${safeSeconds} ${safeSeconds === 1 ? 'sec' : 'secs'}`;\n }\n menuIsOpen(menuName, isOpen) {\n (0, _object.set)(this, `menuOpen-${menuName}`, isOpen);\n }\n captureButtonColors(containerElement) {\n if (this.hasCapturedButtonColors || !containerElement) {\n return;\n }\n const measuredColors = {\n ...this.buttonColorMap\n };\n BUTTON_COLOR_CLASSES.forEach(colorClass => {\n const probeButton = document.createElement('button');\n probeButton.type = 'button';\n probeButton.className = `btn btn-xs ${colorClass}`;\n probeButton.style.position = 'absolute';\n probeButton.style.visibility = 'hidden';\n probeButton.style.pointerEvents = 'none';\n containerElement.appendChild(probeButton);\n const styles = window.getComputedStyle(probeButton);\n const backgroundColor = styles.backgroundColor;\n const borderColor = styles.borderColor;\n measuredColors[colorClass] = this.isTransparentColor(backgroundColor) ? borderColor : backgroundColor;\n probeButton.remove();\n });\n this.buttonColorMap = measuredColors;\n this.hasCapturedButtonColors = true;\n }\n onHeatmapCellClick(cell, event) {\n if (!cell?.canNavigate || !cell.firstMoment || !cell.buttonId) {\n return;\n }\n if (event?.preventDefault) {\n event.preventDefault();\n }\n const videoId = this.args.video?.id;\n if (!videoId) {\n return;\n }\n const overrideCurrentTime = Number.isFinite(Number(cell.firstMomentStart)) ? Number(cell.firstMomentStart) : 0;\n this.router.transitionTo('watch.withmoments.playlist', videoId, cell.buttonId).then(() => {\n this.playstateManager.registerEvent(this.playstateManager.EVENTS.OVERRIDE_SCRUB, {\n overrideCurrentTime\n });\n });\n }\n onHeatmapCellKeyDown(cell, event) {\n if (!cell?.canNavigate) {\n return;\n }\n const key = event?.key;\n if (key === 'Enter' || key === ' ') {\n this.onHeatmapCellClick(cell, event);\n }\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"router\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"playstateManager\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"buttonColorMap\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return FALLBACK_BUTTON_COLORS;\n }\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"hasCapturedButtonColors\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"menuIsOpen\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"menuIsOpen\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"captureButtonColors\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"captureButtonColors\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onHeatmapCellClick\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onHeatmapCellClick\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onHeatmapCellKeyDown\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onHeatmapCellKeyDown\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, MarkedMomnetsChartsComponent);\n});","define(\"vosaic/components/modal-add-annotation/index\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/service\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/template\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _component2, _tracking, _template, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/service\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/template\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n {{#if @shouldShow}}\n \n
\n \n Cancel\n

Add a Note & Select a Look-For

\n
\n \n
\n \n {{#if (and @buttons (lt @buttons.length 26))}}\n {{!-- Radio grid for quick selection (only when fewer than 26 buttons) --}}\n
\n \n
\n {{#each @buttons as |button|}}\n
\n \n
\n {{/each}}\n
\n
\n {{else}}\n
\n Select a Button:\n \n {{#each @buttons as |button|}}\n {{button.title}}\n {{/each}}\n \n
\n {{/if}}\n
\n {{#if this.selectedButtonTags.length}}\n
\n {{#each this.selectedButtonTagsDisplay as |item|}}\n {{item.displayTitle}}\n {{/each}}\n
\n {{/if}}\n \n
\n

\n {{#if @recordModelCaptureInit}}{{else}}\n {{#if this.selectedButtonValue}}\n \n \n Play on Repeat\n \n \n {{/if}}\n {{/if}}\n {{duration-format @safeTimeStart 'seconds'}}\n -\n {{duration-format @timeEnd 'seconds'}}

\n {{#if @annotatingButtonToggleClass}}\n {{#if @existingMoment}}\n Save Note\n {{else}}\n Save Note\n then\n Mark End Of The Moment\n {{/if}}\n {{else}}\n Save Note\n {{/if}}\n
\n \n {{/if}}\n */\n {\n \"id\": \"I09cMJa9\",\n \"block\": \"[[[41,[30,1],[[[1,\\\" \\\"],[11,0],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[16,0,[29,[\\\"transparent-bg-dark bg-inverse p-x-sm p-b-sm p-t-xs video-annotations edit-dialog\\\\n \\\",[30,2]]]],[4,[38,2],[[30,0,[\\\"onDidRender\\\"]]],null],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"m-b-none\\\"],[12],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,\\\"tabindex\\\",\\\"0\\\"],[24,0,\\\"close pull-xs-right text-transparent text-white pos-r send-to-top\\\"],[24,4,\\\"button\\\"],[4,[38,4],[\\\"click\\\",[30,0,[\\\"cancelAnnotation\\\"]]],null],[12],[10,1],[14,\\\"aria-hidden\\\",\\\"true\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"sr-only\\\"],[12],[1,\\\"Cancel\\\"],[13],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"m-b-xxs p-b-none font-weight-bold\\\"],[12],[1,\\\"Add a Note & Select a Look-For \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"textarea-wrapper\\\"],[14,5,\\\"background: transparent;\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,7],[[24,0,\\\"form-control m-b-xs add-note-textbox\\\"],[24,\\\"rows\\\",\\\"2\\\"],[24,\\\"placeholder\\\",\\\"Add Note\\\"],[24,\\\"aria-label\\\",\\\"Add a note and select a look-for\\\"]],[[\\\"@value\\\"],[[30,3]]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[28,[37,8],[[30,4],[28,[37,9],[[30,4,[\\\"length\\\"]],26],null]],null],[[[1,\\\" \\\"],[10,0],[14,0,\\\"m-b-none\\\"],[12],[1,\\\"\\\\n\\\\n \\\"],[10,0],[14,0,\\\"row scrollbar-always-visible p-y-xxs button-selector-bg\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,11],[[28,[37,11],[[30,4]],null]],null],null,[[[1,\\\" \\\"],[10,0],[14,0,\\\"col-xs-6 m-b-xxs p-r-none\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,12],[[24,\\\";\\\",\\\"\\\"]],[[\\\"@class\\\",\\\"@name\\\",\\\"@type\\\",\\\"@value\\\",\\\"@boundProperty\\\",\\\"@labelText\\\",\\\"@cInputStyles\\\",\\\"@disabled\\\",\\\"@onChange\\\"],[\\\"c-radio font-weight-normal small\\\",\\\"annotation-button-choice\\\",\\\"radio\\\",[30,5],[30,0,[\\\"selectedButtonValue\\\"]],[30,5,[\\\"title\\\"]],\\\"display: inline-table;padding-top:3px;\\\",[30,6],[28,[37,13],[[30,0,[\\\"onAnnotationSelected\\\"]],[30,5]],null]]],null],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[5]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"form-group select-custom-arrow p-l-none m-b-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"label\\\"],[14,0,\\\"form-control-label\\\"],[15,\\\"for\\\",[29,[[28,[37,15],[[30,0,[\\\"elementId\\\"]],\\\"-button-selector\\\"],null]]]],[14,5,\\\"opacity:1;\\\"],[12],[1,\\\"Select a Button:\\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,16],null,[[\\\"@value\\\",\\\"@id\\\",\\\"@action\\\",\\\"@disabled\\\",\\\"@class\\\"],[[30,0,[\\\"selectedButtonValue\\\"]],[29,[[30,0,[\\\"elementId\\\"]],\\\"-button-selector\\\"]],[30,0,[\\\"onAnnotationSelected\\\"]],[30,6],\\\"c-select full-width form-control-sm font-weight-bold\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\"],[42,[28,[37,11],[[28,[37,11],[[30,4]],null]],null],null,[[[1,\\\" \\\"],[8,[30,7,[\\\"option\\\"]],null,[[\\\"@value\\\",\\\"@class\\\"],[[30,8],\\\"font-weight-bold\\\"]],[[\\\"default\\\"],[[[[1,[30,8,[\\\"title\\\"]]]],[]]]]],[1,\\\"\\\\n\\\"]],[8]],null],[1,\\\" \\\"]],[7]]]]],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedButtonTags\\\",\\\"length\\\"]],[[[1,\\\" \\\"],[10,0],[14,0,\\\"m-b-xxs row p-x-xxs p-y-xxs\\\"],[14,5,\\\" background: rgba(0, 0, 0, 0.5);\\\\n padding-left: 17px !important;\\\\n margin-top: 1px;\\\"],[12],[1,\\\"\\\\n\\\"],[42,[28,[37,11],[[28,[37,11],[[30,0,[\\\"selectedButtonTagsDisplay\\\"]]],null]],null],null,[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary btn-xs m-r-xxs\\\"],[16,5,[28,[37,17],[[30,0,[\\\"tagButtonStyleMap\\\"]],[30,9,[\\\"tag\\\",\\\"id\\\"]]],null]],[24,4,\\\"button\\\"],[4,[38,4],[\\\"click\\\",[28,[37,13],[[30,0,[\\\"onAnnotationTagSelected\\\"]],[30,9,[\\\"tag\\\"]]],null]],null],[12],[1,[30,9,[\\\"displayTitle\\\"]]],[13],[1,\\\"\\\\n\\\"]],[9]],null],[1,\\\" \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"text-xs-right\\\"],[12],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"text-white m-y-none p-y-none display-inline-block pull-xs-left\\\"],[12],[1,\\\"\\\\n \\\"],[41,[30,10],[[],[]],[[[1,\\\"\\\\n\\\"],[41,[30,0,[\\\"selectedButtonValue\\\"]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[16,0,[29,[\\\"btn btn-sm btn-success-outline m-r-xs\\\\n \\\",[30,11]]]],[24,4,\\\"button\\\"],[4,[38,4],[\\\"click\\\",[30,0,[\\\"toggleLoopClip\\\"]]],null],[12],[1,\\\"\\\\n \\\"],[10,\\\"svg\\\"],[14,\\\"viewBox\\\",\\\"0 0 8 8\\\"],[14,0,\\\"icon icon-sm m-a-none\\\"],[15,5,[30,12]],[12],[1,\\\"\\\\n \\\"],[10,\\\"use\\\"],[14,\\\"xlink:href\\\",\\\"#loop\\\",\\\"http://www.w3.org/1999/xlink\\\"],[14,0,\\\"btn-icon m-a-none\\\"],[12],[1,\\\"Play on Repeat\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]],[1,\\\" \\\"],[1,[28,[35,20],[[30,13],\\\"seconds\\\"],null]],[1,\\\"\\\\n -\\\\n \\\"],[1,[28,[35,20],[[30,14],\\\"seconds\\\"],null]],[13],[1,\\\"\\\\n\\\"],[41,[30,15],[[[41,[30,16],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success btn-sm\\\"],[24,4,\\\"button\\\"],[4,[38,4],[\\\"click\\\",[28,[37,13],[[30,0,[\\\"saveAnnotation\\\"]],false],null]],null],[12],[1,\\\"Save Note\\\"],[13],[1,\\\"\\\\n\\\"]],[]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[16,0,[29,[\\\"btn btn-success btn-sm\\\\n \\\",[52,[30,6],\\\"disabled\\\",\\\"\\\"]]]],[16,\\\"disabled\\\",[29,[[52,[30,6],\\\"disabled\\\",\\\"\\\"]]]],[24,4,\\\"button\\\"],[4,[38,4],[\\\"click\\\",[28,[37,13],[[30,0,[\\\"saveAnnotation\\\"]],true],null]],null],[12],[1,\\\"Save Note\\\"],[13],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"small\\\"],[12],[1,\\\"then\\\"],[13],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[16,0,[29,[\\\"btn btn-success btn-sm pos-r overflow-hidden\\\\n \\\",[52,[30,6],\\\"markup-toggle-btn-active\\\",\\\"disabled\\\"]]]],[16,\\\"disabled\\\",[29,[[52,[30,6],\\\"\\\",\\\"disabled\\\"]]]],[24,4,\\\"button\\\"],[4,[38,4],[\\\"click\\\",[30,0,[\\\"updateMomentDuration\\\"]]],null],[12],[1,\\\"Mark End Of The Moment\\\"],[13],[1,\\\"\\\\n\\\"]],[]]]],[]],[[[1,\\\" \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success btn-sm\\\"],[24,4,\\\"button\\\"],[4,[38,4],[\\\"click\\\",[28,[37,13],[[30,0,[\\\"saveAnnotation\\\"]],false],null]],null],[12],[1,\\\"Save Note\\\"],[13],[1,\\\"\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@shouldShow\\\",\\\"@addAnnotationsClass\\\",\\\"@annotationText\\\",\\\"@buttons\\\",\\\"button\\\",\\\"@hasSavedToggleAnnotation\\\",\\\"xs\\\",\\\"button\\\",\\\"item\\\",\\\"@recordModelCaptureInit\\\",\\\"@isLoopingButtonClass\\\",\\\"@safeButtonStyle\\\",\\\"@safeTimeStart\\\",\\\"@timeEnd\\\",\\\"@annotatingButtonToggleClass\\\",\\\"@existingMoment\\\"],[\\\"if\\\",\\\"div\\\",\\\"did-insert\\\",\\\"button\\\",\\\"on\\\",\\\"span\\\",\\\"p\\\",\\\"textarea\\\",\\\"and\\\",\\\"lt\\\",\\\"each\\\",\\\"-track-array\\\",\\\"input-check-radio\\\",\\\"fn\\\",\\\"label\\\",\\\"concat\\\",\\\"x-select\\\",\\\"get\\\",\\\"svg\\\",\\\"use\\\",\\\"duration-format\\\"]]\",\n \"moduleName\": \"vosaic/components/modal-add-annotation/index.hbs\",\n \"isStrictMode\": false\n });\n let ModalAddAnnotation = _exports.default = (_class = class ModalAddAnnotation extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"focusTrap\", _descriptor, this);\n _initializerDefineProperty(this, \"returnFocus\", _descriptor2, this);\n _initializerDefineProperty(this, \"modalHelper\", _descriptor3, this);\n _initializerDefineProperty(this, \"recordStateManager\", _descriptor4, this);\n _defineProperty(this, \"elementId\", 'modal-add-annotation');\n _initializerDefineProperty(this, \"selectedAnnotationTag\", _descriptor5, this);\n }\n get selectedButtonValue() {\n return this.args.selectedButtonForAnnotation;\n }\n get selectedButtonTags() {\n const tags = this.selectedButtonValue?.tags;\n if (!tags) {\n return [];\n }\n const tagArray = Array.isArray(tags) ? tags : typeof tags.toArray === 'function' ? [...tags] : [];\n return tagArray.filter(tag => tag && tag.id !== 'nontagged' && tag.title);\n }\n get selectedButtonTagsDisplay() {\n return this.selectedButtonTags.map(tag => ({\n tag,\n displayTitle: tag.title.length > 17 ? `${tag.title.slice(0, 17)}…` : tag.title\n }));\n }\n onDidRender() {\n this.focusTrap.handleFocusTrap(this.args.shouldShow);\n this.returnFocus.setFocusInitiator(this.args.focusInitiator);\n if (document.querySelector('.video-annotations textarea')) {\n document.querySelector('.video-annotations textarea').focus();\n }\n if (this.recordStateManager.recordModel.captureInit) {\n this.args.hotkeysActiveAction(false);\n }\n }\n cancelAnnotation() {\n this.modalHelper.close();\n this.returnFocus.returnFocus();\n this.args.cancelAnnotation();\n }\n onAnnotationSelected(button) {\n // Preserve scroll position to prevent jumping when radio button is selected\n const sidebar = document.querySelector('.js-sidebar');\n const scrollTop = sidebar?.scrollTop ?? 0;\n this.selectedAnnotationTag = null;\n this.args.onAnnotationSelected(button);\n\n // Restore scroll position after render cycle\n requestAnimationFrame(() => {\n if (sidebar) {\n sidebar.scrollTop = scrollTop;\n }\n });\n }\n get tagButtonStyleMap() {\n const selected = this.selectedAnnotationTag;\n const styleMap = {};\n this.selectedButtonTags.forEach(tag => {\n styleMap[tag.id] = (0, _template.htmlSafe)(tag === selected ? 'border: 1.5px solid #fff;' : 'border: 1.5px solid #000;');\n });\n return styleMap;\n }\n onAnnotationTagSelected(tag) {\n this.selectedAnnotationTag = this.selectedAnnotationTag === tag ? null : tag;\n if (typeof this.args.onAnnotationTagSelectionChanged === 'function') {\n this.args.onAnnotationTagSelectionChanged(this.selectedAnnotationTag?.id ?? null);\n }\n }\n toggleLoopClip() {\n this.args.toggleLoopClip();\n }\n saveAnnotation(update) {\n const liveText = document.querySelector('.video-annotations .add-note-textbox')?.value || '';\n const tagId = this.selectedAnnotationTag?.id ?? null;\n if (!update) {\n this.selectedAnnotationTag = null;\n }\n this.returnFocus.returnFocus();\n this.args.saveAnnotation(update, tagId, liveText);\n }\n updateMomentDuration() {\n const liveText = document.querySelector('.video-annotations .add-note-textbox')?.value || '';\n const tagId = this.selectedAnnotationTag?.id ?? null;\n this.returnFocus.returnFocus();\n this.args.updateMomentDuration(liveText, tagId);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"focusTrap\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"returnFocus\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"modalHelper\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"recordStateManager\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"selectedAnnotationTag\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"onDidRender\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onDidRender\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"cancelAnnotation\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"cancelAnnotation\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onAnnotationSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onAnnotationSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onAnnotationTagSelected\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onAnnotationTagSelected\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"toggleLoopClip\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"toggleLoopClip\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"saveAnnotation\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"saveAnnotation\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"updateMomentDuration\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"updateMomentDuration\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ModalAddAnnotation);\n});","define(\"vosaic/components/modal-add-video-to-folder/index\", [\"exports\", \"@ember/component\", \"@ember/runloop\", \"@ember/array\", \"@ember/service\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/object\", \"@ember/template-factory\"], function (_exports, _component, _runloop, _array, _service, _component2, _tracking, _object, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/runloop\",0,\"@ember/array\",0,\"@ember/service\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/object\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n {{#if @shouldShow}}\n \n \n \n \n \n {{/if}}\n */\n {\n \"id\": \"RSYATSxA\",\n \"block\": \"[[[41,[30,1],[[[1,\\\" \\\"],[11,0],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[16,0,[29,[\\\"modal fade \\\",[30,0,[\\\"modalClass\\\"]]]]],[4,[38,2],[[30,0,[\\\"onInsert\\\"]]],null],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[14,\\\"role\\\",\\\"document\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"modal-content\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h4\\\"],[14,\\\"tabindex\\\",\\\"0\\\"],[14,0,\\\"modal-title\\\"],[12],[1,\\\"Add Videos To Folder\\\"],[13],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"close text-transparent text-muted\\\"],[24,\\\"data-dismiss\\\",\\\"modal\\\"],[24,\\\"aria-label\\\",\\\"Close\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"onCancel\\\"]]],null],[12],[1,\\\"\\\\n \\\"],[10,1],[14,\\\"aria-hidden\\\",\\\"true\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"modal-body p-t-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"row\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"col-xs-12 p-x-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"fieldset\\\"],[14,0,\\\"m-x-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"text-dark m-b\\\"],[12],[1,\\\"Select the videos you'd like to add to\\\\n the\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,[30,2,[\\\"name\\\"]]],[13],[1,\\\"\\\\n folder.\\\\n \\\"],[10,0],[14,0,\\\"small\\\"],[12],[10,1],[14,0,\\\"label label-success\\\"],[12],[1,\\\"PRO TIP:\\\"],[13],[1,\\\"\\\\n search for\\\\n \\\"],[10,\\\"strong\\\"],[12],[1,\\\"\\\\\\\"selected\\\\\\\"\\\"],[13],[1,\\\"\\\\n to only show selected videos.\\\"],[13],[13],[1,\\\"\\\\n\\\\n \\\"],[8,[39,10],null,[[\\\"@overridePadding\\\",\\\"@class\\\",\\\"@type\\\",\\\"@placeholder\\\",\\\"@labelText\\\",\\\"@value\\\",\\\"@onValueChange\\\"],[\\\"p-x-none\\\",\\\"m-b-none m-t-xs\\\",\\\"text\\\",\\\"Search\\\",\\\"Search\\\",[30,0,[\\\"searchText\\\"]],[28,[37,11],[[28,[37,12],[[30,0,[\\\"searchText\\\"]]],null]],null]]],null],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"card bg-white btn-form-wrap overflow-hidden\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,1,\\\"add-videos\\\"],[14,0,\\\"overflow-scroll overflow-y-scroll mini-scroll p-x-md\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"c-inputs-stacked m-t-sm bordered\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,13],null,[[\\\"@options\\\",\\\"@labelProperty\\\",\\\"@selection\\\"],[[30,0,[\\\"filteredVideos\\\"]],\\\"title\\\",[30,2,[\\\"myVideosAdded\\\"]]]],[[\\\"default\\\"],[[[[1,\\\"\\\\n\\\\n \\\"],[10,\\\"label\\\"],[14,0,\\\"c-checkbox c-input border-b p-b-xs m-b-xs m-t-xxs\\\"],[12],[1,\\\"\\\\n \\\"],[8,[39,15],[[4,[38,5],[\\\"click\\\",[30,0,[\\\"stopPropagation\\\"]]],null]],[[\\\"@type\\\",\\\"@checked\\\"],[\\\"checkbox\\\",[30,4]]],null],[1,[30,3,[\\\"title\\\"]]],[1,\\\"\\\\n \\\"],[10,1],[14,0,\\\"c-indicator\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"]],[3,4]]]]],[1,\\\"\\\\n \\\"],[41,[30,0,[\\\"searchText\\\"]],[[],[]],[[[1,\\\"\\\\n\\\"],[41,[28,[37,16],[[30,0,[\\\"videosToDisplayCount\\\"]],[30,0,[\\\"filteredVideos\\\",\\\"length\\\"]]],null],[[[1,\\\" \\\"],[10,0],[14,0,\\\"text-xs-center p-x-sm small\\\"],[12],[1,\\\"Showing first\\\\n \\\"],[1,[30,0,[\\\"videosToDisplayCount\\\"]]],[1,\\\"\\\\n videos.\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn btn-default-outline btn-xs\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"onShowMoreVideos\\\"]]],null],[12],[1,\\\"Load More\\\"],[13],[13],[1,\\\"\\\\n\\\"]],[]],null]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"modal-footer\\\"],[12],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link text-dark btn-sm pull-xs-left\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"onCancel\\\"]]],null],[12],[1,\\\"\\\\n Close\\\"],[13],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-success\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"onSave\\\"]]],null],[12],[1,\\\"Save\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[15,0,[29,[\\\"modal-backdrop fade \\\",[30,0,[\\\"modalClass\\\"]]]]],[12],[13],[1,\\\"\\\\n\\\"]],[]],null]],[\\\"@shouldShow\\\",\\\"@folder\\\",\\\"video\\\",\\\"isSelected\\\"],[\\\"if\\\",\\\"div\\\",\\\"did-insert\\\",\\\"h4\\\",\\\"button\\\",\\\"on\\\",\\\"span\\\",\\\"fieldset\\\",\\\"p\\\",\\\"strong\\\",\\\"input-component\\\",\\\"fn\\\",\\\"mut\\\",\\\"vosaic-multiselect-checkboxes\\\",\\\"label\\\",\\\"input\\\",\\\"less-than\\\"]]\",\n \"moduleName\": \"vosaic/components/modal-add-video-to-folder/index.hbs\",\n \"isStrictMode\": false\n });\n const VIDEOS_TO_SHOW = 50;\n const VIDEOS_TO_LOAD = 25;\n let ModalAddVideoToFolder = _exports.default = (_class = class ModalAddVideoToFolder extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"focusTrap\", _descriptor, this);\n _initializerDefineProperty(this, \"returnFocus\", _descriptor2, this);\n _initializerDefineProperty(this, \"modalHelper\", _descriptor3, this);\n _initializerDefineProperty(this, \"constants\", _descriptor4, this);\n _initializerDefineProperty(this, \"searchText\", _descriptor5, this);\n _initializerDefineProperty(this, \"videosToDisplayCount\", _descriptor6, this);\n _initializerDefineProperty(this, \"usersSorting\", _descriptor7, this);\n }\n get modalClass() {\n return this.modalHelper.showHideModal(this.args.shouldShow);\n }\n get sortedVideos() {\n let videos = [...this.args.videos].filter(el => !el.archived);\n return videos;\n }\n get filteredVideos() {\n const searchText = (this.searchText || '').toLowerCase().trim();\n const searchTextMin = this.constants.rforeign.test(searchText) ? 1 : 3;\n const addedVideos = this.args.folder.videos.map(video => video.id);\n let filteredVideos;\n if (searchText && searchText.length > searchTextMin) {\n filteredVideos = this.sortedVideos.filter(video => {\n const titleMatch = typeof video.title === 'string' && video.title.trim() !== '' && video.title.toLowerCase().includes(searchText);\n const selectedMatch = 'selected'.includes(searchText.toLowerCase()) && addedVideos.includes(video.id);\n return titleMatch || selectedMatch;\n });\n } else {\n filteredVideos = this.sortedVideos.slice(0, this.videosToDisplayCount);\n }\n return filteredVideos;\n }\n onShowMoreVideos() {\n this.videosToDisplayCount = this.videosToDisplayCount + VIDEOS_TO_LOAD;\n }\n stopPropagation(event) {\n event.stopPropagation();\n const parentElement = document.getElementById('add-videos');\n if (parentElement) {\n // Capture the current scroll position\n const currentScrollTop = parentElement.scrollTop;\n\n // Restore the scroll position after the event\n (0, _runloop.later)(() => {\n parentElement.scrollTop = currentScrollTop;\n }, 0); // Use `later` to ensure this runs after the event is processed\n }\n }\n onInsert() {\n this.focusTrap.handleFocusTrap(this.args.shouldShow);\n this.returnFocus.setFocusInitiator(this.args.focusInitiator);\n document.getElementById('add-videos').addEventListener('scroll', () => {\n const element = document.getElementById('add-videos');\n const scrollTop = element.scrollTop;\n const scrollHeight = element.scrollHeight;\n const clientHeight = element.clientHeight;\n const scrollMin = scrollTop + clientHeight;\n let scrolled = false;\n // Check if the scroll position is at the bottom\n if (scrollMin >= scrollHeight) {\n if (!scrolled) {\n scrolled = true;\n // Trigger the action when scrolled to the bottom\n this.onShowMoreVideos();\n scrolled = false;\n }\n }\n });\n }\n onCancel() {\n this.args.folder.rollbackAttributes();\n this.modalHelper.close();\n this.args.onCancel();\n this.returnFocus.returnFocus();\n this.videosToDisplayCount = VIDEOS_TO_SHOW;\n }\n onSave() {\n this.modalHelper.close();\n this.args.onSave();\n this.returnFocus.returnFocus();\n this.videosToDisplayCount = VIDEOS_TO_SHOW;\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"focusTrap\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"returnFocus\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"modalHelper\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor4 = _applyDecoratedDescriptor(_class.prototype, \"constants\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class.prototype, \"searchText\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return '';\n }\n }), _descriptor6 = _applyDecoratedDescriptor(_class.prototype, \"videosToDisplayCount\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return VIDEOS_TO_SHOW;\n }\n }), _descriptor7 = _applyDecoratedDescriptor(_class.prototype, \"usersSorting\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return ['displayName', 'emailAddress'];\n }\n }), _applyDecoratedDescriptor(_class.prototype, \"onShowMoreVideos\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onShowMoreVideos\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"stopPropagation\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"stopPropagation\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onInsert\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onCancel\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onCancel\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"onSave\", [_object.action], Object.getOwnPropertyDescriptor(_class.prototype, \"onSave\"), _class.prototype), _class);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ModalAddVideoToFolder);\n});","define(\"vosaic/components/modal-auto-code/index\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/service\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _component2, _tracking, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _class2, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/service\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n {{#if @shouldShow}}\n \n \n \n \n \n \n {{#if this.showUploadSupportingDocumentsModal}}\n \n {{/if}}\n {{/if}}\n \n */\n {\n \"id\": \"lyY8dueW\",\n \"block\": \"[[[41,[30,1],[[[1,\\\" \\\"],[11,0],[24,\\\"tabindex\\\",\\\"-1\\\"],[24,\\\"role\\\",\\\"dialog\\\"],[16,0,[29,[\\\"modal fade \\\",[30,0,[\\\"modalClass\\\"]]]]],[4,[38,2],[[30,0,[\\\"onDidInsert\\\"]],[30,0,[\\\"onWillDestroy\\\"]]],null],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"modal-dialog\\\"],[14,\\\"role\\\",\\\"document\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"modal-content\\\"],[14,5,\\\"overflow: visible;\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"modal-header\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"h4\\\"],[14,0,\\\"modal-title\\\"],[14,\\\"tabindex\\\",\\\"0\\\"],[12],[1,\\\"Auto-Code Video\\\"],[13],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"close text-transparent text-muted\\\"],[24,\\\"data-dismiss\\\",\\\"modal\\\"],[24,\\\"aria-label\\\",\\\"Close Auto-Code Modal\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"onCancel\\\"]]],null],[12],[1,\\\"\\\\n \\\"],[10,1],[14,\\\"aria-hidden\\\",\\\"true\\\"],[12],[1,\\\"×\\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[10,0],[14,0,\\\"modal-body p-x-md p-b-md p-t-lg bg-inverse\\\"],[12],[1,\\\"\\\\n \\\"],[10,0],[14,0,\\\"form-group m-a-none\\\"],[12],[1,\\\"\\\\n \\\"],[10,\\\"label\\\"],[14,\\\"for\\\",\\\"auto-code-rubric-document\\\"],[14,0,\\\"form-control-label animate-up bg-inverse\\\"],[12],[1,\\\"Rubric Document\\\"],[13],[1,\\\"\\\\n \\\"],[8,[39,8],null,[[\\\"@tagName\\\",\\\"@class\\\",\\\"@triggerId\\\",\\\"@options\\\",\\\"@placeholder\\\",\\\"@selected\\\",\\\"@searchEnabled\\\",\\\"@searchField\\\",\\\"@searchPlaceholder\\\",\\\"@onChange\\\",\\\"@destination\\\"],[\\\"div\\\",\\\"power-select-md\\\",\\\"auto-code-rubric-document\\\",[30,0,[\\\"documentOptions\\\"]],\\\"Select rubric documents...\\\",[30,0,[\\\"selectedOptions\\\"]],true,\\\"title\\\",\\\"Search by title...\\\",[30,0,[\\\"onPowerSelectChange\\\"]],\\\"auto-code-rubric-documents\\\"]],[[\\\"default\\\"],[[[[1,\\\"\\\\n \\\"],[1,[30,2,[\\\"title\\\"]]],[1,\\\"\\\\n \\\"]],[2]]]]],[1,\\\"\\\\n\\\\n \\\"],[11,\\\"button\\\"],[24,1,\\\"upload-auto-code-rubric-doc-btn\\\"],[24,0,\\\"btn btn-success btn-sm m-t-sm\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"onUploadSupportingDocuments\\\"]]],null],[12],[1,\\\"Upload PDF\\\"],[13],[1,\\\"\\\\n \\\"],[10,2],[14,0,\\\"small text-muted m-t-xs m-b-none\\\"],[12],[1,\\\"\\\\n Uploaded PDFs are saved as prompt supporting documents and auto-selected.\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[10,0],[14,1,\\\"auto-code-rubric-documents\\\"],[14,0,\\\"send-to-top\\\"],[12],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[10,0],[14,0,\\\"modal-footer bg-inverse border-none text-xs-right\\\"],[12],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-link btn-sm\\\"],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"onCancel\\\"]]],null],[12],[1,\\\"\\\\n Cancel\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[11,\\\"button\\\"],[24,0,\\\"btn btn-primary btn-sm\\\"],[16,\\\"disabled\\\",[30,3]],[24,4,\\\"button\\\"],[4,[38,5],[\\\"click\\\",[30,0,[\\\"onStart\\\"]]],null],[12],[1,\\\"\\\\n\\\"],[41,[30,3],[[[1,\\\" Starting...\\\\n\\\"]],[]],[[[1,\\\" Start Auto-Code\\\\n\\\"]],[]]],[1,\\\" \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n \\\"],[13],[1,\\\"\\\\n\\\\n \\\"],[10,0],[15,0,[29,[\\\"modal-backdrop fade \\\",[30,0,[\\\"modalClass\\\"]]]]],[12],[13],[1,\\\"\\\\n\\\\n\\\"],[41,[30,0,[\\\"showUploadSupportingDocumentsModal\\\"]],[[[1,\\\" \\\"],[8,[39,10],null,[[\\\"@iconStyle\\\",\\\"@title\\\",\\\"@subtitle\\\",\\\"@extensions\\\",\\\"@shouldShow\\\",\\\"@onCancel\\\",\\\"@uploadProgress\\\",\\\"@uploadError\\\",\\\"@uploadErrorContent\\\",\\\"@onUploadDocument\\\",\\\"@isUploadingFile\\\",\\\"@focusInitiator\\\",\\\"@allowedFileTypes\\\"],[\\\"fill:#000\\\",\\\"Upload Rubric PDF\\\",\\\"Drag and drop a rubric PDF to upload\\\",\\\"pdf\\\",[30,0,[\\\"showUploadSupportingDocumentsModal\\\"]],[30,0,[\\\"onCloseUploadSupportingDocuments\\\"]],[30,0,[\\\"documentUploadProgress\\\"]],[30,0,[\\\"documentUploadError\\\"]],\\\"We were unable to upload the selected PDF.\\\",[30,0,[\\\"onUploadDocument\\\"]],[30,0,[\\\"fileUploading\\\"]],\\\"upload-auto-code-rubric-doc-btn\\\",[30,0,[\\\"allowedFileTypes\\\"]]]],null],[1,\\\"\\\\n\\\"]],[]],null]],[]],null]],[\\\"@shouldShow\\\",\\\"document\\\",\\\"@isLoading\\\"],[\\\"if\\\",\\\"div\\\",\\\"trap-modal-focus\\\",\\\"h4\\\",\\\"button\\\",\\\"on\\\",\\\"span\\\",\\\"label\\\",\\\"power-select-multiple\\\",\\\"p\\\",\\\"modal-upload\\\"]]\",\n \"moduleName\": \"vosaic/components/modal-auto-code/index.hbs\",\n \"isStrictMode\": false\n });\n const REGION = 'us-east-1';\n const BYTES_IN_MP_UPLOAD = 5 * 1024 * 1024;\n const QUEUE_SIZE = 1;\n const NO_RUBRIC_DOCUMENT_OPTION = Object.freeze({\n id: '__none__',\n title: 'No rubric document'\n });\n let DocumentUploadProgress = (_class = class DocumentUploadProgress {\n constructor() {\n _initializerDefineProperty(this, \"loaded\", _descriptor, this);\n _initializerDefineProperty(this, \"total\", _descriptor2, this);\n _initializerDefineProperty(this, \"percent\", _descriptor3, this);\n }\n }, _descriptor = _applyDecoratedDescriptor(_class.prototype, \"loaded\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, \"total\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _descriptor3 = _applyDecoratedDescriptor(_class.prototype, \"percent\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return null;\n }\n }), _class);\n let ModalAutoCodeComponent = _exports.default = (_class2 = class ModalAutoCodeComponent extends _component2.default {\n constructor(...args) {\n super(...args);\n _initializerDefineProperty(this, \"focusTrap\", _descriptor4, this);\n _initializerDefineProperty(this, \"modalHelper\", _descriptor5, this);\n _initializerDefineProperty(this, \"returnFocus\", _descriptor6, this);\n _initializerDefineProperty(this, \"store\", _descriptor7, this);\n _initializerDefineProperty(this, \"uploadCredentials\", _descriptor8, this);\n _defineProperty(this, \"documentUploadProgress\", new DocumentUploadProgress());\n _initializerDefineProperty(this, \"credentialsDocumentUpload\", _descriptor9, this);\n _initializerDefineProperty(this, \"showUploadSupportingDocumentsModal\", _descriptor0, this);\n _initializerDefineProperty(this, \"documentUploadError\", _descriptor1, this);\n _initializerDefineProperty(this, \"fileUploading\", _descriptor10, this);\n _initializerDefineProperty(this, \"uploadedDocuments\", _descriptor11, this);\n _defineProperty(this, \"allowedFileTypes\", ['application/pdf']);\n }\n onDidInsert() {\n this.focusTrap.handleFocusTrap(this.args.shouldShow);\n this.returnFocus.setFocusInitiator(this.args.focusInitiator);\n }\n onWillDestroy() {\n this.focusTrap.handleFocusTrap(false);\n }\n get modalClass() {\n return this.modalHelper.showHideModal(this.args.shouldShow);\n }\n get allDocumentOptions() {\n const optionsById = new Map();\n const sourceDocuments = [...(this.args.supportingDocuments || []), ...this.uploadedDocuments];\n sourceDocuments.forEach(doc => {\n if (doc?.id && !optionsById.has(doc.id)) {\n optionsById.set(doc.id, doc);\n }\n });\n return Array.from(optionsById.values()).sort((a, b) => (a.title || '').localeCompare(b.title || ''));\n }\n get documentOptions() {\n return [NO_RUBRIC_DOCUMENT_OPTION, ...this.allDocumentOptions];\n }\n get selectedOptions() {\n const selectedDocumentIds = this.args.selectedDocumentIds || [];\n if (!selectedDocumentIds.length) {\n return [NO_RUBRIC_DOCUMENT_OPTION];\n }\n const selectedOptions = this.documentOptions.filter(doc => doc?.id && selectedDocumentIds.includes(doc.id));\n return selectedOptions.length ? selectedOptions : [NO_RUBRIC_DOCUMENT_OPTION];\n }\n onCancel() {\n this.focusTrap.handleFocusTrap(false);\n this.modalHelper.close();\n this.args.onCancel();\n this.returnFocus.returnFocus();\n }\n onStart() {\n this.focusTrap.handleFocusTrap(false);\n this.modalHelper.close();\n this.args.onStart();\n this.returnFocus.returnFocus();\n window.dispatchEvent(new CustomEvent('vosaic-feature-used', {\n detail: {\n eventName: 'autoCode',\n email: this.args.user?.emailAddress\n }\n }));\n }\n onPowerSelectChange(option) {\n const selectedOptions = option || [];\n const selectedNoRubric = selectedOptions.find(item => item?.id === NO_RUBRIC_DOCUMENT_OPTION.id);\n if (selectedNoRubric) {\n const selectedRealDocumentIds = selectedOptions.filter(item => item?.id && item.id !== NO_RUBRIC_DOCUMENT_OPTION.id).map(item => item.id);\n this.args.onSelectDocuments(selectedRealDocumentIds);\n return;\n }\n const selectedDocumentIds = selectedOptions.filter(item => item?.id).map(item => item.id);\n this.args.onSelectDocuments(selectedDocumentIds);\n }\n onCloseUploadSupportingDocuments() {\n this.documentUploadError = false;\n this.documentUploadProgress.loaded = null;\n this.documentUploadProgress.total = null;\n this.documentUploadProgress.percent = null;\n this.fileUploading = false;\n this.showUploadSupportingDocumentsModal = false;\n }\n onUploadDocument(uploader) {\n this.fileUploading = true;\n this.uploadFile(uploader, this.credentialsDocumentUpload);\n }\n async uploadFile(uploader, credentials) {\n const orgId = credentials.organizationId;\n const file = uploader.file;\n const fileExtension = file.name.split('.').pop().toLowerCase();\n this.documentUploadError = undefined;\n const supportingDocument = this.store.createRecord('supportingDocument');\n supportingDocument.title = file.name;\n supportingDocument.fileExtension = fileExtension;\n supportingDocument.save({\n adapterOptions: {\n promptId: 'prompt'\n }\n }).then(savedModel => {\n const fileName = `${orgId}_prompt/${savedModel.id}.${fileExtension}`;\n savedModel.uploadedPath = fileName;\n savedModel.isUploaded = false;\n\n /*eslint no-undef: */\n AWS.config.update({\n region: REGION,\n accessKeyId: credentials.accessKey,\n secretAccessKey: credentials.secretKey,\n sessionToken: credentials.sessionToken,\n useAccelerateEndpoint: true\n });\n const up = new AWS.S3.ManagedUpload({\n partSize: BYTES_IN_MP_UPLOAD,\n queueSize: QUEUE_SIZE,\n params: {\n Bucket: credentials.bucketName,\n Key: fileName,\n Body: uploader.file\n }\n });\n up.on('httpUploadProgress', progress => {\n const completionPercent = progress.loaded / progress.total;\n this.documentUploadProgress.loaded = progress.loaded;\n this.documentUploadProgress.total = progress.total;\n this.documentUploadProgress.percent = completionPercent;\n });\n\n // eslint-disable-next-line no-unused-vars\n up.send((err, data) => {\n if (err) {\n supportingDocument.destroyRecord({\n adapterOptions: {\n promptId: 'prompt'\n }\n });\n console.error('Error:', err.code, err.message);\n }\n });\n up.promise().then(() => {\n supportingDocument.set('isUploaded', true);\n supportingDocument.save({\n adapterOptions: {\n promptId: 'prompt'\n }\n }).then(uploadedDocument => {\n this.uploadedDocuments = [...this.uploadedDocuments, uploadedDocument];\n const currentlySelectedIds = new Set(this.args.selectedDocumentIds || []);\n currentlySelectedIds.add(uploadedDocument.id);\n this.args.onSelectDocuments(Array.from(currentlySelectedIds));\n this.documentUploadProgress.loaded = null;\n this.documentUploadProgress.total = null;\n this.documentUploadProgress.percent = null;\n this.fileUploading = false;\n this.showUploadSupportingDocumentsModal = false;\n });\n }).catch(() => {\n supportingDocument.destroyRecord({\n adapterOptions: {\n promptId: 'prompt'\n }\n });\n this.documentUploadError = 'Error Uploading Document';\n this.fileUploading = false;\n });\n });\n }\n async onUploadSupportingDocuments() {\n this.uploadCredentials.fetch({\n type: 'supportingdocument',\n promptId: 'prompt'\n }).then(credentials => {\n this.credentialsDocumentUpload = credentials;\n this.showUploadSupportingDocumentsModal = true;\n }).catch(error => {\n console.error('Error:', error);\n });\n }\n }, _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, \"focusTrap\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, \"modalHelper\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, \"returnFocus\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, \"store\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, \"uploadCredentials\", [_service.service], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n }), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, \"credentialsDocumentUpload\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return undefined;\n }\n }), _descriptor0 = _applyDecoratedDescriptor(_class2.prototype, \"showUploadSupportingDocumentsModal\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor1 = _applyDecoratedDescriptor(_class2.prototype, \"documentUploadError\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, \"fileUploading\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return false;\n }\n }), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, \"uploadedDocuments\", [_tracking.tracked], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: function () {\n return [];\n }\n }), _applyDecoratedDescriptor(_class2.prototype, \"onDidInsert\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onDidInsert\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onWillDestroy\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onWillDestroy\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onCancel\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onCancel\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onStart\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onStart\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onPowerSelectChange\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onPowerSelectChange\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onCloseUploadSupportingDocuments\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onCloseUploadSupportingDocuments\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onUploadDocument\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onUploadDocument\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"uploadFile\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"uploadFile\"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, \"onUploadSupportingDocuments\", [_object.action], Object.getOwnPropertyDescriptor(_class2.prototype, \"onUploadSupportingDocuments\"), _class2.prototype), _class2);\n (0, _component.setComponentTemplate)(__COLOCATED_TEMPLATE__, ModalAutoCodeComponent);\n});","define(\"vosaic/components/modal-batch-upload/index\", [\"exports\", \"@ember/component\", \"@ember/object\", \"@ember/service\", \"@glimmer/component\", \"@glimmer/tracking\", \"@ember/template-factory\"], function (_exports, _component, _object, _service, _component2, _tracking, _templateFactory) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _class, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor0, _descriptor1, _descriptor10, _descriptor11, _descriptor12, _descriptor13;\n 0; //eaimeta@70e063a35619d71f0,\"@ember/object\",0,\"@ember/service\",0,\"@glimmer/component\",0,\"@glimmer/tracking\",0,\"@ember/template-factory\",0,\"@ember/component\"eaimeta@70e063a35619d71f\n function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\n function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\n function _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\n function _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\n function _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\n const __COLOCATED_TEMPLATE__ = (0, _templateFactory.createTemplateFactory)(\n /*\n {{#if @shouldShow}}\n \n \n \n \n \n