{"version":3,"file":"js/main.6dbb58da.js","mappings":"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,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,IAAM,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO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","sources":["webpack://mindmaze/./src/components/layout/common/Stack.vue","webpack://mindmaze/src/components/layout/common/Stack.vue","webpack://mindmaze/./src/components/layout/common/Stack.vue?2c12","webpack://mindmaze/./src/components/layout/common/Stack.vue?3994","webpack://mindmaze/./src/components/login/LoginForm.vue","webpack://mindmaze/./src/components/ui/InputError.vue","webpack://mindmaze/src/components/ui/InputError.vue","webpack://mindmaze/./src/components/ui/InputError.vue?3a74","webpack://mindmaze/./src/components/ui/InputError.vue?de88","webpack://mindmaze/src/components/login/LoginForm.vue","webpack://mindmaze/./src/components/login/LoginForm.vue?1b0d","webpack://mindmaze/./src/components/login/LoginForm.vue?65be","webpack://mindmaze/./src/components/login/LoginModal.vue","webpack://mindmaze/src/components/login/LoginModal.vue","webpack://mindmaze/./src/components/login/LoginModal.vue?304d","webpack://mindmaze/./src/components/login/LoginModal.vue?bd9b","webpack://mindmaze/./src/components/ui/BaseButton.vue","webpack://mindmaze/src/components/ui/BaseButton.vue","webpack://mindmaze/./src/components/ui/BaseButton.vue?b05e","webpack://mindmaze/./src/components/ui/BaseButton.vue?9a03","webpack://mindmaze/./src/components/ui/BaseCheckbox.vue","webpack://mindmaze/src/components/ui/BaseCheckbox.vue","webpack://mindmaze/./src/components/ui/BaseCheckbox.vue?4428","webpack://mindmaze/./src/components/ui/BaseCheckbox.vue?c447","webpack://mindmaze/./src/components/ui/BaseInput.vue","webpack://mindmaze/src/components/ui/BaseInput.vue","webpack://mindmaze/./src/components/ui/BaseInput.vue?0493","webpack://mindmaze/./src/components/ui/BaseInput.vue?df2b","webpack://mindmaze/./src/components/ui/BaseLabel.vue","webpack://mindmaze/src/components/ui/BaseLabel.vue","webpack://mindmaze/./src/components/ui/BaseLabel.vue?60bc","webpack://mindmaze/./src/components/ui/BaseLabel.vue?8279","webpack://mindmaze/./src/components/ui/BaseModal.vue","webpack://mindmaze/src/components/ui/BaseModal.vue","webpack://mindmaze/./src/components/ui/BaseModal.vue?c85c","webpack://mindmaze/./src/components/ui/BaseModal.vue?a39e","webpack://mindmaze/./src/components/ui/LoadingIcon.vue","webpack://mindmaze/src/components/ui/LoadingIcon.vue","webpack://mindmaze/./src/components/ui/LoadingIcon.vue?b140","webpack://mindmaze/./src/components/ui/LoadingIcon.vue?ee03","webpack://mindmaze/./src/components/ui/NewFeatureBadge.vue","webpack://mindmaze/src/components/ui/NewFeatureBadge.vue","webpack://mindmaze/./src/components/ui/NewFeatureBadge.vue?8abb","webpack://mindmaze/./src/components/ui/NewFeatureBadge.vue?f6cc","webpack://mindmaze/./src/components/ui/PasswordInput.vue","webpack://mindmaze/src/components/ui/PasswordInput.vue","webpack://mindmaze/./src/components/ui/PasswordInput.vue?9eb5","webpack://mindmaze/./src/components/ui/PasswordInput.vue?1ac5","webpack://mindmaze/./src/components/ui/VuelidateErrorTemplate.vue","webpack://mindmaze/src/components/ui/VuelidateErrorTemplate.vue","webpack://mindmaze/./src/components/ui/VuelidateErrorTemplate.vue?d21e","webpack://mindmaze/./src/components/ui/VuelidateErrorTemplate.vue?d272","webpack://mindmaze/./src/components/ui/WarningBox.vue","webpack://mindmaze/src/components/ui/WarningBox.vue","webpack://mindmaze/./src/components/ui/WarningBox.vue?60a0","webpack://mindmaze/./src/components/ui/WarningBox.vue?2171","webpack://mindmaze/./src/components/ui/display-fields/BaseReadOnlyField.vue","webpack://mindmaze/src/components/ui/display-fields/BaseReadOnlyField.vue","webpack://mindmaze/./src/components/ui/display-fields/BaseReadOnlyField.vue?c092","webpack://mindmaze/./src/components/ui/display-fields/BaseReadOnlyField.vue?4d62","webpack://mindmaze/./src/config/entityRules.js","webpack://mindmaze/./src/config/ability.js","webpack://mindmaze/./src/i18n.js","webpack://mindmaze/./src/App.vue","webpack://mindmaze/./src/components/layout/AppLayout.vue","webpack://mindmaze/./src/components/ui/Toast.vue","webpack://mindmaze/src/components/ui/Toast.vue","webpack://mindmaze/./src/components/ui/Toast.vue?1adf","webpack://mindmaze/./src/components/ui/Toast.vue?dfc1","webpack://mindmaze/./src/components/application/CookieBar.vue","webpack://mindmaze/src/components/application/CookieBar.vue","webpack://mindmaze/./src/components/application/CookieBar.vue?8526","webpack://mindmaze/./src/components/application/CookieBar.vue?66a1","webpack://mindmaze/src/components/layout/AppLayout.vue","webpack://mindmaze/./src/components/layout/AppLayout.vue?3499","webpack://mindmaze/./src/components/layout/AppLayout.vue?7367","webpack://mindmaze/src/App.vue","webpack://mindmaze/./src/App.vue?c036","webpack://mindmaze/./src/App.vue?0e40","webpack://mindmaze/./src/components/ui/SvgIcon.vue","webpack://mindmaze/src/components/ui/SvgIcon.vue","webpack://mindmaze/./src/components/ui/SvgIcon.vue?8e16","webpack://mindmaze/./src/components/ui/SvgIcon.vue?2fa6","webpack://mindmaze/./src/components/ui/LoadingLayout.vue","webpack://mindmaze/src/components/ui/LoadingLayout.vue","webpack://mindmaze/./src/components/ui/LoadingLayout.vue?ad28","webpack://mindmaze/./src/components/ui/LoadingLayout.vue?032c","webpack://mindmaze/./src/components/application/Breadcrumbs.vue","webpack://mindmaze/src/components/application/Breadcrumbs.vue","webpack://mindmaze/./src/components/application/Breadcrumbs.vue?1125","webpack://mindmaze/./src/components/application/Breadcrumbs.vue?b532","webpack://mindmaze/./src/components.js","webpack://mindmaze/./src/plugins/tooltip.js","webpack://mindmaze/./src/plugins/vuePortal.js","webpack://mindmaze/./src/plugins/notifications.js","webpack://mindmaze/./src/components/ui/ConfirmDialog.vue","webpack://mindmaze/src/components/ui/ConfirmDialog.vue","webpack://mindmaze/./src/components/ui/ConfirmDialog.vue?1739","webpack://mindmaze/./src/components/ui/ConfirmDialog.vue?1d61","webpack://mindmaze/./src/plugins/confirmationDialog.js","webpack://mindmaze/./src/plugins/casl.js","webpack://mindmaze/./src/plugins/vuelidate.js","webpack://mindmaze/./src/plugins/vuelidate-error-extractor.js","webpack://mindmaze/./src/plugins/vcalendar.js","webpack://mindmaze/./src/plugins/vue-ctk-date-time-picker.js","webpack://mindmaze/./src/plugins/vueTelInput/vueTelInput.js","webpack://mindmaze/./src/plugins/loadScript.js","webpack://mindmaze/./src/plugins/vueClipboard.js","webpack://mindmaze/./src/plugins/vidyo/vidyo-store.js","webpack://mindmaze/./src/plugins/vidyo/injector.js","webpack://mindmaze/./src/plugins/vidyo/conference.js","webpack://mindmaze/./src/plugins/vidyo/index.js","webpack://mindmaze/./src/plugins/vidyo-plugin.js","webpack://mindmaze/./src/plugins/vueMultiSelect.js","webpack://mindmaze/./src/plugins/v-wave.js","webpack://mindmaze/./src/plugins/vueMq.js","webpack://mindmaze/./src/main.js","webpack://mindmaze/./src/models/ActivityDescription.model.js","webpack://mindmaze/./src/models/ActivityPatientUsage.model.js","webpack://mindmaze/./src/models/Asset.model.js","webpack://mindmaze/./src/models/AuditLog.model.js","webpack://mindmaze/./src/models/AuthOptions.model.js","webpack://mindmaze/./src/models/Customer.model.js","webpack://mindmaze/./src/models/CustomerNotification.model.js","webpack://mindmaze/./src/models/DateTimeOffset.model.js","webpack://mindmaze/./src/models/DayTrainingSummary.model.js","webpack://mindmaze/./src/models/FeedbackReport.model.js","webpack://mindmaze/./src/models/FeedbackReportAttachment.model.js","webpack://mindmaze/./src/models/Group.model.js","webpack://mindmaze/./src/models/InstructionsForUse.model.js","webpack://mindmaze/./src/models/LevelRecommendation.model.js","webpack://mindmaze/./src/models/License.model.js","webpack://mindmaze/./src/models/OptionalFeatureActivation.model.js","webpack://mindmaze/./src/models/OptionalFeatureDefinition.model.js","webpack://mindmaze/./src/models/PasswordOptions.model.js","webpack://mindmaze/./src/models/PatientLicense.model.js","webpack://mindmaze/./src/models/PatientSessionSummary.model.js","webpack://mindmaze/./src/models/PerformanceActivityPlanningAndTraining.model.js","webpack://mindmaze/./src/models/PerformanceActivityResult.model.js","webpack://mindmaze/./src/models/PersonalAccessToken.model.js","webpack://mindmaze/./src/models/PersonalSettings.model.js","webpack://mindmaze/./src/models/Profile.model.js","webpack://mindmaze/./src/models/ProgramNote.model.js","webpack://mindmaze/./src/models/Program.model.js","webpack://mindmaze/./src/models/ProgramActivity.model.js","webpack://mindmaze/./src/models/ProgramPreset.model.js","webpack://mindmaze/./src/models/SoapData.model.js","webpack://mindmaze/./src/utils/textBuilder.js","webpack://mindmaze/./src/models/SessionReport.model.js","webpack://mindmaze/./src/models/SiteParameters.model.js","webpack://mindmaze/./src/models/Site.model.js","webpack://mindmaze/./src/models/SiteUnit.model.js","webpack://mindmaze/./src/models/TherapeuticGoal.model.js","webpack://mindmaze/./src/models/Timezone.model.js","webpack://mindmaze/./src/models/UserSession.model.js","webpack://mindmaze/./src/models/VideoMeeting.model.js","webpack://mindmaze/./src/models/VideoMeetingRequest.model.js","webpack://mindmaze/./src/models/WeeklyActiveTrainingTimeGoal.model.js","webpack://mindmaze/./src/models/WeeklyActiveTrainingTimeGoalAndCompletion.model.js","webpack://mindmaze/./src/models/CompensationFeedbackResult.model.js","webpack://mindmaze/./src/models/activity-result/ActivityResult.model.js","webpack://mindmaze/./src/models/activity-result/BaseActivityResult.model.js","webpack://mindmaze/./src/models/training-material/TrainingMaterialAttachment.model.js","webpack://mindmaze/./src/models/training-material/TrainingMaterial.model.js","webpack://mindmaze/./src/models/utils.js","webpack://mindmaze/./src/plugins/vidyo/constants.js","webpack://mindmaze/./src/plugins/vueApplicationInsights.js","webpack://mindmaze/./src/router/supportRoutes.js","webpack://mindmaze/./src/router/users/patientRoutes.js","webpack://mindmaze/./src/router/profileRoutes.js","webpack://mindmaze/./src/router/oAuthRoutes.js","webpack://mindmaze/./src/router/users/therapistRoutes.js","webpack://mindmaze/./src/router/entities/customer.js","webpack://mindmaze/./src/router/entities/site.js","webpack://mindmaze/./src/router/entities/siteManagement.js","webpack://mindmaze/./src/router/entities/license.js","webpack://mindmaze/./src/router/entities/patientLicense.js","webpack://mindmaze/./src/router/entities/asset.js","webpack://mindmaze/./src/router/entities/siteManager.js","webpack://mindmaze/./src/router/entities/therapist.js","webpack://mindmaze/./src/router/entities/administrator.js","webpack://mindmaze/./src/router/dataExportRoutes.js","webpack://mindmaze/./src/router/entities/optionalFeatureActivation.js","webpack://mindmaze/./src/router/entities/feedbackReport.js","webpack://mindmaze/./src/router/entities/archivedUsers.js","webpack://mindmaze/./src/router/users/adminRoutes.js","webpack://mindmaze/./src/router/entities/user-session.js","webpack://mindmaze/./src/router/entities/dpoadmin.js","webpack://mindmaze/./src/router/entities/patient.js","webpack://mindmaze/./src/router/entities/customerNotification.js","webpack://mindmaze/./src/router/entities/optionalFeatureDefinition.js","webpack://mindmaze/./src/router/users/superadminRoutes.js","webpack://mindmaze/./src/router/entities/siteUnit.js","webpack://mindmaze/./src/router/users/siteManagerRoutes.js","webpack://mindmaze/./src/router/onboardingRoutes.js","webpack://mindmaze/./src/router/forgotPasswordRoutes.js","webpack://mindmaze/./src/router/entities/audit.js","webpack://mindmaze/./src/router/users/DPORoutes.js","webpack://mindmaze/./src/router/requestSAMLSiteRoutes.js","webpack://mindmaze/./src/router/referenceRoutes.js","webpack://mindmaze/./src/router/footerRoutes.js","webpack://mindmaze/./src/router/zoomRoutes.js","webpack://mindmaze/./src/router/navigate.js","webpack://mindmaze/./src/router/routes.js","webpack://mindmaze/./src/router/index.js","webpack://mindmaze/./src/services/api.js","webpack://mindmaze/./src/services/auth.js","webpack://mindmaze/./src/services/configJson.js","webpack://mindmaze/./src/services/enums.js","webpack://mindmaze/./src/services/users.js","webpack://mindmaze/./src/store/utils.js","webpack://mindmaze/./src/store/Auth.js","webpack://mindmaze/./src/store/Language.js","webpack://mindmaze/./src/store/Onboarding.js","webpack://mindmaze/./src/store/ZoomAccess.js","webpack://mindmaze/./src/store/Profile.js","webpack://mindmaze/./src/store/index.js","webpack://mindmaze/./src/store/localStorage.js","webpack://mindmaze/./src/store/sessionStorage.js","webpack://mindmaze/./src/utils/activeSide.js","webpack://mindmaze/./src/utils/cookies.js","webpack://mindmaze/./src/utils/date.js","webpack://mindmaze/./src/utils/dropdown.js","webpack://mindmaze/./src/utils/duration.js","webpack://mindmaze/./src/utils/extractLocale.js","webpack://mindmaze/./src/utils/filters.js","webpack://mindmaze/./src/utils/icon.js","webpack://mindmaze/./src/utils/locales.js","webpack://mindmaze/./src/utils/math.js","webpack://mindmaze/./src/utils/notification.js","webpack://mindmaze/./src/utils/performance.js","webpack://mindmaze/./src/utils/profile.js","webpack://mindmaze/./src/utils/signedDocuments.js","webpack://mindmaze/./src/utils/translation.js","webpack://mindmaze/./tailwind.config.js","webpack://mindmaze/./src/assets/icons/activity-details.svg","webpack://mindmaze/./src/assets/icons/activity-flag.svg","webpack://mindmaze/./src/assets/icons/add-patient-success.svg","webpack://mindmaze/./src/assets/icons/add-patient.svg","webpack://mindmaze/./src/assets/icons/admin.svg","webpack://mindmaze/./src/assets/icons/administration.svg","webpack://mindmaze/./src/assets/icons/archived-users-directory.svg","webpack://mindmaze/./src/assets/icons/arrow-simple-left.svg","webpack://mindmaze/./src/assets/icons/arrow-simple-right.svg","webpack://mindmaze/./src/assets/icons/assets.svg","webpack://mindmaze/./src/assets/icons/att-current.svg","webpack://mindmaze/./src/assets/icons/att-history.svg","webpack://mindmaze/./src/assets/icons/audit-trail-logs.svg","webpack://mindmaze/./src/assets/icons/body.svg","webpack://mindmaze/./src/assets/icons/button-icon-save.svg","webpack://mindmaze/./src/assets/icons/calendar.svg","webpack://mindmaze/./src/assets/icons/calibration-off.svg","webpack://mindmaze/./src/assets/icons/calibration-on.svg","webpack://mindmaze/./src/assets/icons/callout-down.svg","webpack://mindmaze/./src/assets/icons/callout.svg","webpack://mindmaze/./src/assets/icons/ce_logo.svg","webpack://mindmaze/./src/assets/icons/chevron-carousel-left.svg","webpack://mindmaze/./src/assets/icons/chevron-carousel-right.svg","webpack://mindmaze/./src/assets/icons/chevron-down.svg","webpack://mindmaze/./src/assets/icons/chevron-left.svg","webpack://mindmaze/./src/assets/icons/chevron-right.svg","webpack://mindmaze/./src/assets/icons/chevron-up.svg","webpack://mindmaze/./src/assets/icons/circle-warning.svg","webpack://mindmaze/./src/assets/icons/close.svg","webpack://mindmaze/./src/assets/icons/cog-hollow.svg","webpack://mindmaze/./src/assets/icons/companion-logo.svg","webpack://mindmaze/./src/assets/icons/compensation/bodyweighttransfer-left.svg","webpack://mindmaze/./src/assets/icons/compensation/bodyweighttransfer-right.svg","webpack://mindmaze/./src/assets/icons/compensation/leftkneeextension-up.svg","webpack://mindmaze/./src/assets/icons/compensation/leftshoulderabductionadduction-left.svg","webpack://mindmaze/./src/assets/icons/compensation/leftshoulderabductionadduction-right.svg","webpack://mindmaze/./src/assets/icons/compensation/leftshoulderflexionextension-backward.svg","webpack://mindmaze/./src/assets/icons/compensation/leftshoulderflexionextension-forward.svg","webpack://mindmaze/./src/assets/icons/compensation/rightkneeextension-up.svg","webpack://mindmaze/./src/assets/icons/compensation/rightshoulderabductionadduction-left.svg","webpack://mindmaze/./src/assets/icons/compensation/rightshoulderabductionadduction-right.svg","webpack://mindmaze/./src/assets/icons/compensation/rightshoulderflexionextension-backward.svg","webpack://mindmaze/./src/assets/icons/compensation/rightshoulderflexionextension-forward.svg","webpack://mindmaze/./src/assets/icons/compensation/trunkflexion-backward.svg","webpack://mindmaze/./src/assets/icons/compensation/trunkflexion-forward.svg","webpack://mindmaze/./src/assets/icons/compensation/trunkflexion-left.svg","webpack://mindmaze/./src/assets/icons/compensation/trunkflexion-right.svg","webpack://mindmaze/./src/assets/icons/compensation_flag_icons/elbow-left.svg","webpack://mindmaze/./src/assets/icons/compensation_flag_icons/elbow-right.svg","webpack://mindmaze/./src/assets/icons/compensation_flag_icons/head-center.svg","webpack://mindmaze/./src/assets/icons/compensation_flag_icons/head-left.svg","webpack://mindmaze/./src/assets/icons/compensation_flag_icons/head-right.svg","webpack://mindmaze/./src/assets/icons/compensation_flag_icons/leg-left.svg","webpack://mindmaze/./src/assets/icons/compensation_flag_icons/leg-right.svg","webpack://mindmaze/./src/assets/icons/compensation_flag_icons/shoulder-left.svg","webpack://mindmaze/./src/assets/icons/compensation_flag_icons/shoulder-right.svg","webpack://mindmaze/./src/assets/icons/compensation_flag_icons/torso.svg","webpack://mindmaze/./src/assets/icons/compensation_flag_icons/wrist-left.svg","webpack://mindmaze/./src/assets/icons/compensation_flag_icons/wrist-right.svg","webpack://mindmaze/./src/assets/icons/compensation_groups/bodyweighttransfer.svg","webpack://mindmaze/./src/assets/icons/compensation_groups/leftkneeextension.svg","webpack://mindmaze/./src/assets/icons/compensation_groups/leftshoulder.svg","webpack://mindmaze/./src/assets/icons/compensation_groups/rightkneeextension.svg","webpack://mindmaze/./src/assets/icons/compensation_groups/rightshoulder.svg","webpack://mindmaze/./src/assets/icons/compensation_groups/trunkflexion.svg","webpack://mindmaze/./src/assets/icons/consent.svg","webpack://mindmaze/./src/assets/icons/contact-us.svg","webpack://mindmaze/./src/assets/icons/copy.svg","webpack://mindmaze/./src/assets/icons/create_program.svg","webpack://mindmaze/./src/assets/icons/create_template.svg","webpack://mindmaze/./src/assets/icons/credentials.svg","webpack://mindmaze/./src/assets/icons/data-export.svg","webpack://mindmaze/./src/assets/icons/day-period-afternoon.svg","webpack://mindmaze/./src/assets/icons/day-period-morning.svg","webpack://mindmaze/./src/assets/icons/demo-patient.svg","webpack://mindmaze/./src/assets/icons/done-half.svg","webpack://mindmaze/./src/assets/icons/done-invert-colors.svg","webpack://mindmaze/./src/assets/icons/done-not-training.svg","webpack://mindmaze/./src/assets/icons/done-not.svg","webpack://mindmaze/./src/assets/icons/done-notassigned.svg","webpack://mindmaze/./src/assets/icons/done-partially.svg","webpack://mindmaze/./src/assets/icons/done-password-criteria.svg","webpack://mindmaze/./src/assets/icons/done-rounded-circle-fill.svg","webpack://mindmaze/./src/assets/icons/done-rounded-circle.svg","webpack://mindmaze/./src/assets/icons/done.svg","webpack://mindmaze/./src/assets/icons/dpo-admin.svg","webpack://mindmaze/./src/assets/icons/drag-handle.svg","webpack://mindmaze/./src/assets/icons/duplicate.svg","webpack://mindmaze/./src/assets/icons/edit.svg","webpack://mindmaze/./src/assets/icons/email.svg","webpack://mindmaze/./src/assets/icons/epro-patients.svg","webpack://mindmaze/./src/assets/icons/european-representative.svg","webpack://mindmaze/./src/assets/icons/export.svg","webpack://mindmaze/./src/assets/icons/external.svg","webpack://mindmaze/./src/assets/icons/faq.svg","webpack://mindmaze/./src/assets/icons/feedback.svg","webpack://mindmaze/./src/assets/icons/filter.svg","webpack://mindmaze/./src/assets/icons/flags/ar-SA.svg","webpack://mindmaze/./src/assets/icons/flags/de.svg","webpack://mindmaze/./src/assets/icons/flags/es.svg","webpack://mindmaze/./src/assets/icons/flags/fr.svg","webpack://mindmaze/./src/assets/icons/flags/gb.svg","webpack://mindmaze/./src/assets/icons/flags/it.svg","webpack://mindmaze/./src/assets/icons/flags/ro.svg","webpack://mindmaze/./src/assets/icons/flags/us.svg","webpack://mindmaze/./src/assets/icons/general-details.svg","webpack://mindmaze/./src/assets/icons/geolocalization.svg","webpack://mindmaze/./src/assets/icons/globe.svg","webpack://mindmaze/./src/assets/icons/hamburger.svg","webpack://mindmaze/./src/assets/icons/hand.svg","webpack://mindmaze/./src/assets/icons/help.svg","webpack://mindmaze/./src/assets/icons/ifu.svg","webpack://mindmaze/./src/assets/icons/import.svg","webpack://mindmaze/./src/assets/icons/import_mm_template.svg","webpack://mindmaze/./src/assets/icons/import_my_template.svg","webpack://mindmaze/./src/assets/icons/info-circle.svg","webpack://mindmaze/./src/assets/icons/level.svg","webpack://mindmaze/./src/assets/icons/levels.svg","webpack://mindmaze/./src/assets/icons/license.svg","webpack://mindmaze/./src/assets/icons/loading.svg","webpack://mindmaze/./src/assets/icons/logout.svg","webpack://mindmaze/./src/assets/icons/manufacturer.svg","webpack://mindmaze/./src/assets/icons/medical-details.svg","webpack://mindmaze/./src/assets/icons/menu.svg","webpack://mindmaze/./src/assets/icons/mindmotion-logo.svg","webpack://mindmaze/./src/assets/icons/mini-cam.svg","webpack://mindmaze/./src/assets/icons/mini-mic.svg","webpack://mindmaze/./src/assets/icons/mini-sound.svg","webpack://mindmaze/./src/assets/icons/more-menu.svg","webpack://mindmaze/./src/assets/icons/movement/ArmReaching.svg","webpack://mindmaze/./src/assets/icons/movement/ArmReachingAndPalmarGrasping.svg","webpack://mindmaze/./src/assets/icons/movement/ArmsPumping.svg","webpack://mindmaze/./src/assets/icons/movement/BilateralStep.svg","webpack://mindmaze/./src/assets/icons/movement/FingersPinch.svg","webpack://mindmaze/./src/assets/icons/movement/ForearmPronationSupination.svg","webpack://mindmaze/./src/assets/icons/movement/ForwardBackwardSteps.svg","webpack://mindmaze/./src/assets/icons/movement/FreeSqueeze.svg","webpack://mindmaze/./src/assets/icons/movement/FreeSqueezeAndFreeWristMovement.svg","webpack://mindmaze/./src/assets/icons/movement/FreeSteps.svg","webpack://mindmaze/./src/assets/icons/movement/FreeWristMovement.svg","webpack://mindmaze/./src/assets/icons/movement/GripFlexionExtension.svg","webpack://mindmaze/./src/assets/icons/movement/GripPronationSupination.svg","webpack://mindmaze/./src/assets/icons/movement/GripRadialUlnarDeviation.svg","webpack://mindmaze/./src/assets/icons/movement/HandGraspRelease.svg","webpack://mindmaze/./src/assets/icons/movement/HorizontalArmReaching.svg","webpack://mindmaze/./src/assets/icons/movement/HorizontalShoulderAbductionAdduction.svg","webpack://mindmaze/./src/assets/icons/movement/LateralBodyWeightTransfer.svg","webpack://mindmaze/./src/assets/icons/movement/LateralStep.svg","webpack://mindmaze/./src/assets/icons/movement/PalmarGrasp.svg","webpack://mindmaze/./src/assets/icons/movement/PincerGrasp.svg","webpack://mindmaze/./src/assets/icons/movement/ShoulderAbduction.svg","webpack://mindmaze/./src/assets/icons/movement/ShoulderAbductionAdduction.svg","webpack://mindmaze/./src/assets/icons/movement/ShoulderFlexion.svg","webpack://mindmaze/./src/assets/icons/movement/ShoulderFlexionExtension.svg","webpack://mindmaze/./src/assets/icons/movement/Squat.svg","webpack://mindmaze/./src/assets/icons/movement/SteeringWheel.svg","webpack://mindmaze/./src/assets/icons/movement/SteeringWheelAndArmsPumping.svg","webpack://mindmaze/./src/assets/icons/movement/TrunkAxialRotation.svg","webpack://mindmaze/./src/assets/icons/movement/TrunkForwardBackwardFlexion.svg","webpack://mindmaze/./src/assets/icons/movement/TrunkForwardBackwardLateralFlexion.svg","webpack://mindmaze/./src/assets/icons/movement/TrunkLateralFlexion.svg","webpack://mindmaze/./src/assets/icons/movement/UnilateralShoulderAbductionAdduction.svg","webpack://mindmaze/./src/assets/icons/movement/UnilateralStep.svg","webpack://mindmaze/./src/assets/icons/movement/UpperLimbFlexionExtension.svg","webpack://mindmaze/./src/assets/icons/movement/UpperLimbFlexionExtensionAndTrunkLateralFlexion.svg","webpack://mindmaze/./src/assets/icons/movement/VerticalHandsReaching.svg","webpack://mindmaze/./src/assets/icons/movement/WorldFootsteps.svg","webpack://mindmaze/./src/assets/icons/movement/WristFlexionExtension.svg","webpack://mindmaze/./src/assets/icons/movement/WristRadialUlnarDeviation.svg","webpack://mindmaze/./src/assets/icons/my-patients.svg","webpack://mindmaze/./src/assets/icons/notifications.svg","webpack://mindmaze/./src/assets/icons/optional-features-def.svg","webpack://mindmaze/./src/assets/icons/optional-features.svg","webpack://mindmaze/./src/assets/icons/patient-details.svg","webpack://mindmaze/./src/assets/icons/patient-recent.svg","webpack://mindmaze/./src/assets/icons/patient.svg","webpack://mindmaze/./src/assets/icons/patient_state/borg/borg-0.svg","webpack://mindmaze/./src/assets/icons/patient_state/borg/borg-1.svg","webpack://mindmaze/./src/assets/icons/patient_state/borg/borg-10.svg","webpack://mindmaze/./src/assets/icons/patient_state/borg/borg-2.svg","webpack://mindmaze/./src/assets/icons/patient_state/borg/borg-3.svg","webpack://mindmaze/./src/assets/icons/patient_state/borg/borg-4.svg","webpack://mindmaze/./src/assets/icons/patient_state/borg/borg-5.svg","webpack://mindmaze/./src/assets/icons/patient_state/borg/borg-6.svg","webpack://mindmaze/./src/assets/icons/patient_state/borg/borg-7.svg","webpack://mindmaze/./src/assets/icons/patient_state/borg/borg-8.svg","webpack://mindmaze/./src/assets/icons/patient_state/borg/borg-9.svg","webpack://mindmaze/./src/assets/icons/patient_state/mood/bad.svg","webpack://mindmaze/./src/assets/icons/patient_state/mood/good.svg","webpack://mindmaze/./src/assets/icons/patient_state/mood/okay.svg","webpack://mindmaze/./src/assets/icons/patient_state/mood/veryBad.svg","webpack://mindmaze/./src/assets/icons/patient_state/mood/veryGood.svg","webpack://mindmaze/./src/assets/icons/patient_state/skipped.svg","webpack://mindmaze/./src/assets/icons/patients.svg","webpack://mindmaze/./src/assets/icons/peripherals/Kinect.svg","webpack://mindmaze/./src/assets/icons/peripherals/LeapMotion.svg","webpack://mindmaze/./src/assets/icons/peripherals/MMB_1x.svg","webpack://mindmaze/./src/assets/icons/peripherals/MMB_2x.svg","webpack://mindmaze/./src/assets/icons/planner-calendar.svg","webpack://mindmaze/./src/assets/icons/planner-calibrate.svg","webpack://mindmaze/./src/assets/icons/planner-download.svg","webpack://mindmaze/./src/assets/icons/planner-dropper.svg","webpack://mindmaze/./src/assets/icons/planner-file.svg","webpack://mindmaze/./src/assets/icons/planner-log.svg","webpack://mindmaze/./src/assets/icons/planner-minus.svg","webpack://mindmaze/./src/assets/icons/planner-options.svg","webpack://mindmaze/./src/assets/icons/planner-plus.svg","webpack://mindmaze/./src/assets/icons/planner-results.svg","webpack://mindmaze/./src/assets/icons/planner-settings.svg","webpack://mindmaze/./src/assets/icons/planner-trash.svg","webpack://mindmaze/./src/assets/icons/play.svg","webpack://mindmaze/./src/assets/icons/posture-seat.svg","webpack://mindmaze/./src/assets/icons/posture-stand.svg","webpack://mindmaze/./src/assets/icons/profile-admin.svg","webpack://mindmaze/./src/assets/icons/profile-patient.svg","webpack://mindmaze/./src/assets/icons/profile-patient_full.svg","webpack://mindmaze/./src/assets/icons/profile-physician.svg","webpack://mindmaze/./src/assets/icons/profile-sitemanager.svg","webpack://mindmaze/./src/assets/icons/profile-sitemanager_full.svg","webpack://mindmaze/./src/assets/icons/profile-support.svg","webpack://mindmaze/./src/assets/icons/profile-therapist.svg","webpack://mindmaze/./src/assets/icons/profile-therapist_full.svg","webpack://mindmaze/./src/assets/icons/reload.svg","webpack://mindmaze/./src/assets/icons/save_as_template.svg","webpack://mindmaze/./src/assets/icons/search.svg","webpack://mindmaze/./src/assets/icons/session-scheduled.svg","webpack://mindmaze/./src/assets/icons/settings-light.svg","webpack://mindmaze/./src/assets/icons/settings.svg","webpack://mindmaze/./src/assets/icons/sidebar-close.svg","webpack://mindmaze/./src/assets/icons/sidebar-open.svg","webpack://mindmaze/./src/assets/icons/site-management.svg","webpack://mindmaze/./src/assets/icons/site-managers.svg","webpack://mindmaze/./src/assets/icons/sort.svg","webpack://mindmaze/./src/assets/icons/sort_asc.svg","webpack://mindmaze/./src/assets/icons/sort_desc.svg","webpack://mindmaze/./src/assets/icons/stop.svg","webpack://mindmaze/./src/assets/icons/teleconsultation.svg","webpack://mindmaze/./src/assets/icons/templates-directory.svg","webpack://mindmaze/./src/assets/icons/templates-editor.svg","webpack://mindmaze/./src/assets/icons/therapeutic-goal.svg","webpack://mindmaze/./src/assets/icons/therapist-details.svg","webpack://mindmaze/./src/assets/icons/therapists.svg","webpack://mindmaze/./src/assets/icons/tick.svg","webpack://mindmaze/./src/assets/icons/time-zone.svg","webpack://mindmaze/./src/assets/icons/timeline-session-extra-training.svg","webpack://mindmaze/./src/assets/icons/timeline-session-missed.svg","webpack://mindmaze/./src/assets/icons/timeline-session-supervised.svg","webpack://mindmaze/./src/assets/icons/timeline-session-unsupervised.svg","webpack://mindmaze/./src/assets/icons/top-menu-live-meeting-down.svg","webpack://mindmaze/./src/assets/icons/top-menu-live-meeting-up.svg","webpack://mindmaze/./src/assets/icons/top-menu-patients-directory-down.svg","webpack://mindmaze/./src/assets/icons/top-menu-patients-directory-up.svg","webpack://mindmaze/./src/assets/icons/top-menu-telerehab-down.svg","webpack://mindmaze/./src/assets/icons/top-menu-telerehab-up.svg","webpack://mindmaze/./src/assets/icons/trained_functions/FunctionAll.svg","webpack://mindmaze/./src/assets/icons/trained_functions/FunctionHandBilateral.svg","webpack://mindmaze/./src/assets/icons/trained_functions/FunctionHandLeft.svg","webpack://mindmaze/./src/assets/icons/trained_functions/FunctionHandRight.svg","webpack://mindmaze/./src/assets/icons/trained_functions/FunctionLowerLimbBilateral.svg","webpack://mindmaze/./src/assets/icons/trained_functions/FunctionLowerLimbLeft.svg","webpack://mindmaze/./src/assets/icons/trained_functions/FunctionLowerLimbRight.svg","webpack://mindmaze/./src/assets/icons/trained_functions/FunctionNone.svg","webpack://mindmaze/./src/assets/icons/trained_functions/FunctionTrunkBilateral.svg","webpack://mindmaze/./src/assets/icons/trained_functions/FunctionTrunkLeft.svg","webpack://mindmaze/./src/assets/icons/trained_functions/FunctionTrunkRight.svg","webpack://mindmaze/./src/assets/icons/trained_functions/FunctionUpperLimbBilateral.svg","webpack://mindmaze/./src/assets/icons/trained_functions/FunctionUpperLimbLeft.svg","webpack://mindmaze/./src/assets/icons/trained_functions/FunctionUpperLimbRight.svg","webpack://mindmaze/./src/assets/icons/training-plan.svg","webpack://mindmaze/./src/assets/icons/training_materials/next.svg","webpack://mindmaze/./src/assets/icons/training_materials/previous.svg","webpack://mindmaze/./src/assets/icons/training_materials/tm-completed-video.svg","webpack://mindmaze/./src/assets/icons/training_materials/tm-new-video.svg","webpack://mindmaze/./src/assets/icons/training_materials/training-material.svg","webpack://mindmaze/./src/assets/icons/undo.svg","webpack://mindmaze/./src/assets/icons/unknown.svg","webpack://mindmaze/./src/assets/icons/unsupervised-training.svg","webpack://mindmaze/./src/assets/icons/user-sessions.svg","webpack://mindmaze/./src/assets/icons/videomeeting-mic-off.svg","webpack://mindmaze/./src/assets/icons/videomeeting-mic-on.svg","webpack://mindmaze/./src/assets/icons/videomeeting-sound-off.svg","webpack://mindmaze/./src/assets/icons/videomeeting-sound-on.svg","webpack://mindmaze/./src/assets/icons/videomeeting-video-off.svg","webpack://mindmaze/./src/assets/icons/videomeeting-video-on.svg","webpack://mindmaze/./src/assets/icons/visibility-hide.svg","webpack://mindmaze/./src/assets/icons/visibility-show.svg","webpack://mindmaze/./src/assets/icons/warning-circle.svg","webpack://mindmaze/./src/assets/icons/warning.svg","webpack://mindmaze/./src/assets/games_icons/ sync ^\\.\\/.*\\.png$","webpack://mindmaze/./src/assets/icons/ sync ^\\.\\/.*\\.svg$","webpack://mindmaze/external promise \"new Promise(resolve => {\\n const remoteUrl = window.location.origin + '/epro/remoteEntry.js'\\n const script = document.createElement('script')\\n script.src = remoteUrl\\n script.onload = () => {\\n // the injected script has loaded and is available on window\\n // we can now resolve this Promise\\n const proxy = {\\n get: (request) => window.epro.get(request),\\n init: (arg) => {\\n try {\\n return window.epro.init(arg)\\n } catch(e) {\\n console.log('remote container already initialized')\\n }\\n }\\n }\\n resolve(proxy)\\n }\\n // inject this script with the src set to the versioned remoteEntry.js\\n document.head.appendChild(script);\\n })\\n \"","webpack://mindmaze/webpack/bootstrap","webpack://mindmaze/webpack/runtime/chunk loaded","webpack://mindmaze/webpack/runtime/compat get default export","webpack://mindmaze/webpack/runtime/create fake namespace object","webpack://mindmaze/webpack/runtime/define property getters","webpack://mindmaze/webpack/runtime/ensure chunk","webpack://mindmaze/webpack/runtime/get javascript chunk filename","webpack://mindmaze/webpack/runtime/get mini-css chunk filename","webpack://mindmaze/webpack/runtime/global","webpack://mindmaze/webpack/runtime/hasOwnProperty shorthand","webpack://mindmaze/webpack/runtime/load script","webpack://mindmaze/webpack/runtime/make namespace object","webpack://mindmaze/webpack/runtime/node module decorator","webpack://mindmaze/webpack/runtime/remotes loading","webpack://mindmaze/webpack/runtime/sharing","webpack://mindmaze/webpack/runtime/publicPath","webpack://mindmaze/webpack/runtime/consumes","webpack://mindmaze/webpack/runtime/css loading","webpack://mindmaze/webpack/runtime/jsonp chunk loading","webpack://mindmaze/webpack/startup"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"flex flex-col h-full overflow-y-auto\"},[_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Stack.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Stack.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Stack.vue?vue&type=template&id=1882ada3\"\nimport script from \"./Stack.vue?vue&type=script&lang=js\"\nexport * from \"./Stack.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('form',{staticClass:\"companion-login-form form-group\",attrs:{\"autocomplete\":\"on\"}},[_c('div',{staticClass:\"mx-12\"},[_c('base-input',{staticClass:\"companion-login-input\",attrs:{\"label\":_vm.$t('LoginPage.loginLabel'),\"placeholder\":_vm.$t('LoginPage.loginPlaceholder'),\"any-error\":_vm.loginErrors.length > 0},on:{\"animationstart\":_vm.loginAnimationStart,\"focusout\":_vm.updateLoginInputErrors,\"input\":_vm.resetLoginInputErrors},model:{value:(_vm.$v.login.$model),callback:function ($$v) {_vm.$set(_vm.$v.login, \"$model\", $$v)},expression:\"$v.login.$model\"}}),_c('input-error',{attrs:{\"errors\":_vm.loginErrors}}),_c('password-input',{staticClass:\"companion-password-input\",attrs:{\"label\":_vm.$t('LoginPage.password'),\"placeholder\":_vm.$t('LoginPage.passwordPlaceholder')},on:{\"animationstart\":_vm.passwordAnimationStart},model:{value:(_vm.$v.password.$model),callback:function ($$v) {_vm.$set(_vm.$v.password, \"$model\", $$v)},expression:\"$v.password.$model\"}}),_c('base-checkbox',{attrs:{\"check-box-classes\":\"border-gray-300\",\"value\":_vm.stayLoggedIn,\"disabled\":!_vm.cookiesAccepted},on:{\"change\":_vm.onChangeStayLoggedIn}},[_c('span',{staticClass:\"form-input-label\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"LoginPage.keepMeLoggedIn\"))+\" \")]),_c('svg-icon',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.keepMeLoggedInTooltip),expression:\"keepMeLoggedInTooltip\"}],staticClass:\"icon-sm text-gray-500 ms-2\",attrs:{\"name\":\"info-circle\"}})],1),_c('base-button',{staticClass:\"mx-16 mt-6 flex items-center justify-center\",attrs:{\"isButtonType\":false}},[_c('input',{staticClass:\"btn btn-primary text-white bg-blue-500 h-full w-full\",attrs:{\"type\":\"submit\",\"disabled\":_vm.isLoginButtonDisabled},domProps:{\"value\":_vm.$t('LoginPage.loginButton')},on:{\"click\":function($event){$event.preventDefault();return _vm.doLogin.apply(null, arguments)}}})])],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',_vm._l((_vm.errors),function(error){return _c('p',{key:error,staticClass:\"py-1 text-red-500\"},[_vm._v(\" \"+_vm._s(error)+\" \")])}),0)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InputError.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InputError.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./InputError.vue?vue&type=template&id=3ac7a5da\"\nimport script from \"./InputError.vue?vue&type=script&lang=js\"\nexport * from \"./InputError.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./LoginForm.vue?vue&type=template&id=24bc0772\"\nimport script from \"./LoginForm.vue?vue&type=script&lang=js\"\nexport * from \"./LoginForm.vue?vue&type=script&lang=js\"\nimport style0 from \"./LoginForm.vue?vue&type=style&index=0&id=24bc0772&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('base-modal',{attrs:{\"show-modal\":_vm.showModal,\"backdrop-class\":\"z-login-modal\",\"trigger-class-modal\":\"modal-sm pb-2\",\"close-button\":true,\"blur-modal-layout\":\"\"},on:{\"close\":_vm.goBackToLogin},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('span',{staticClass:\"text-h3\"},[_vm._v(_vm._s(_vm.$t(\"App.LoginModal.sessionExpired\")))])]},proxy:true}])},[(_vm.hasError)?_c('warning-box',{attrs:{\"type\":\"error\",\"is-content-centered\":\"\"}},[_c('div',{staticClass:\"flex flex-col\"},[_vm._l((_vm.errorMessages),function(message,id){return _c('span',{key:id},[_vm._v(\" \"+_vm._s(message)+\" \")])}),(_vm.lockoutWarningMessage)?_c('div',[_vm._v(\" \"+_vm._s(_vm.lockoutWarningMessage)+\" \")]):_vm._e()],2)]):_vm._e(),_c('login-form',{staticClass:\"mb-2\",on:{\"logged\":_vm.onLoginSuccess,\"loginError\":_vm.displayLoginError}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoginModal.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoginModal.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./LoginModal.vue?vue&type=template&id=076e5be1\"\nimport script from \"./LoginModal.vue?vue&type=script&lang=js\"\nexport * from \"./LoginModal.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (!_vm.isButtonType)?_c('div',{directives:[{name:\"wave\",rawName:\"v-wave\"}],class:{ 'cursor-not-allowed': _vm.disabled },attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.onClick}},[_vm._t(\"default\")],2):_c('button',{directives:[{name:\"wave\",rawName:\"v-wave\"}],attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.onClick}},[_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BaseButton.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BaseButton.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./BaseButton.vue?vue&type=template&id=461c05b4\"\nimport script from \"./BaseButton.vue?vue&type=script&lang=js\"\nexport * from \"./BaseButton.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('label',{staticClass:\"inline-flex items-start\",class:{ 'text-disabled': _vm.disabled }},[_c('input',{ref:\"indeterminate\",staticClass:\"form-checkbox me-3\",class:_vm.checkBoxClasses,attrs:{\"type\":\"checkbox\",\"disabled\":_vm.disabled || _vm.isReadOnly},domProps:{\"checked\":_vm.value},on:{\"change\":_vm.change}}),_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BaseCheckbox.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BaseCheckbox.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./BaseCheckbox.vue?vue&type=template&id=5d0a70d3\"\nimport script from \"./BaseCheckbox.vue?vue&type=script&lang=js\"\nexport * from \"./BaseCheckbox.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"relative block\"},[_vm._t(\"before\"),_c('base-label',{attrs:{\"label\":_vm.label,\"labelClasses\":_vm.labelClasses,\"disabled\":_vm.disabled,\"required\":_vm.required,\"tooltip\":_vm.tooltip}}),(_vm.isReadOnly)?_c('base-read-only-field',{attrs:{\"value\":_vm.localValue,\"tooltip\":_vm.readOnlyTooltip,\"read-only-classes\":_vm.readOnlyClasses}}):_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.localValue),expression:\"localValue\",modifiers:{\"trim\":true}}],ref:\"base-input\",class:[\n 'form-input block min-w-48 w-full',\n _vm.inputClasses,\n _vm.anyError ? 'form-input-error' : '',\n ],style:(_vm.inputStyle),attrs:{\"type\":_vm.type,\"placeholder\":_vm.disabled ? '' : _vm.placeholder,\"disabled\":_vm.disabled,\"maxlength\":_vm.maxLength},domProps:{\"value\":(_vm.localValue)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.localValue=$event.target.value.trim()},_vm.onInput],\"change\":_vm.onChange,\"focus\":_vm.onFocus,\"blur\":[_vm.onBlur,function($event){return _vm.$forceUpdate()}],\"animationstart\":_vm.animationStart,\"animationend\":_vm.animationEnd,\"focusout\":_vm.focusout}}),_vm._t(\"bubble\"),_vm._t(\"after\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BaseInput.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BaseInput.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./BaseInput.vue?vue&type=template&id=799b28e3\"\nimport script from \"./BaseInput.vue?vue&type=script&lang=js\"\nexport * from \"./BaseInput.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.label.length)?_c('label',{staticClass:\"flex\"},[_c('span',{staticClass:\"form-input-label\",class:_vm.disabled ? 'disabled' : _vm.labelClasses},[_vm._v(\" \"+_vm._s(_vm.label)+\" \")]),(_vm.required)?_c('span',{staticClass:\"form-required ps-1 text-base\"},[_vm._v(\"*\")]):_vm._e(),(_vm.tooltip)?_c('svg-icon',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom\",value:(_vm.tooltip),expression:\"tooltip\",modifiers:{\"bottom\":true}}],staticClass:\"form-input-label inline icon-sm ms-2 mt-1\",class:_vm.disabled ? 'disabled' : '',attrs:{\"name\":\"info-circle\"}}):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BaseLabel.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BaseLabel.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./BaseLabel.vue?vue&type=template&id=34ff3bed\"\nimport script from \"./BaseLabel.vue?vue&type=script&lang=js\"\nexport * from \"./BaseLabel.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.showModal)?_c('portal',{attrs:{\"to\":\"modal\"}},[_c('transition',{attrs:{\"name\":\"modal-fade\"}},[(_vm.showModal)?_c('div',_vm._g({staticClass:\"modal flex flex-col fixed inset-0 items-center sm:justify-center\",class:_vm.backdropClasses},_vm.closeOutOfFocus ? { click: _vm.onClose } : {}),[_c('div',{staticClass:\"flex flex-col modal bg-white rounded opacity-100 justify-between border-t-6 border-solid border-blue-500 min-w-160\",class:_vm.triggerClassModal,on:{\"click\":function($event){$event.stopPropagation();}}},[(_vm.showHeader)?_c('div',{staticClass:\"flex justify-between items-start py-4 px-8\",class:_vm.triggerClassHeader},[_vm._t(\"header\",function(){return [_vm._v(\" \")]}),(_vm.closeButton)?_c('div',{staticClass:\"-me-4\"},[_c('base-button',{staticClass:\"btn-icon ms-auto\",on:{\"click\":_vm.onClose}},[_c('svg-icon',{staticClass:\"icon-md text-blue-800\",attrs:{\"name\":\"close\"}})],1)],1):_vm._e()],2):_vm._e(),_c('div',{staticClass:\"scrollbar me-1 modal-content flex-grow\",class:_vm.triggerClassContent},[_vm._t(\"default\")],2),_c('div',{staticClass:\"modal-footer\",class:_vm.triggerClassFooter},[_vm._t(\"footer\")],2)])]):_vm._e()])],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BaseModal.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BaseModal.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./BaseModal.vue?vue&type=template&id=300db374&scoped=true\"\nimport script from \"./BaseModal.vue?vue&type=script&lang=js\"\nexport * from \"./BaseModal.vue?vue&type=script&lang=js\"\nimport style0 from \"./BaseModal.vue?vue&type=style&index=0&id=300db374&prod&lang=postcss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"300db374\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('svg-icon',{staticClass:\"loading-icon\",class:_vm.iconClass,attrs:{\"name\":\"loading\"}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoadingIcon.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoadingIcon.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./LoadingIcon.vue?vue&type=template&id=a0ddfeb0&scoped=true\"\nimport script from \"./LoadingIcon.vue?vue&type=script&lang=js\"\nexport * from \"./LoadingIcon.vue?vue&type=script&lang=js\"\nimport style0 from \"./LoadingIcon.vue?vue&type=style&index=0&id=a0ddfeb0&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a0ddfeb0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.isNewBadgeVisible)?_c('div',[_c('span',{staticClass:\"new-badge\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"Common.System.newLabel\"))+\" \")])]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewFeatureBadge.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewFeatureBadge.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./NewFeatureBadge.vue?vue&type=template&id=5336c93c\"\nimport script from \"./NewFeatureBadge.vue?vue&type=script&lang=js\"\nexport * from \"./NewFeatureBadge.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"relative\"},[_c('div',[_c('base-label',{attrs:{\"label\":_vm.label,\"labelClasses\":_vm.labelClasses,\"disabled\":_vm.disabled,\"required\":_vm.required}}),_c('input',{class:[\n 'form-input pe-12 ' + _vm.inputClasses,\n _vm.anyError ? 'form-input-error' : '',\n ],attrs:{\"type\":_vm.passwordType,\"placeholder\":_vm.disabled ? '' : _vm.placeholder,\"autocomplete\":_vm.newPassword ? 'new-password' : 'password',\"disabled\":_vm.disabled,\"readonly\":_vm.isReadOnly},domProps:{\"value\":_vm.localValue},on:{\"input\":_vm.onInput,\"change\":_vm.onChange,\"focus\":_vm.onFocus,\"blur\":_vm.onBlur,\"animationstart\":_vm.animationStart,\"animationend\":_vm.animationEnd}})],1),_c('base-button',{staticClass:\"absolute bottom-0 border-0 end-0\",attrs:{\"type\":\"button\",\"tabindex\":\"-1\",\"disabled\":_vm.disabled},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleShowPassword.apply(null, arguments)}}},[(_vm.passwordShown)?_c('svg-icon',{attrs:{\"name\":\"visibility-show\"}}):_c('svg-icon',{attrs:{\"name\":\"visibility-hide\"}})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PasswordInput.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PasswordInput.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PasswordInput.vue?vue&type=template&id=2ccfb032\"\nimport script from \"./PasswordInput.vue?vue&type=script&lang=js\"\nexport * from \"./PasswordInput.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:{ error: _vm.hasErrors }},[_vm._t(\"default\"),(_vm.hasErrors)?_c('div',{staticClass:\"errors\"},_vm._l((_vm.activeErrorMessages),function(error){return _c('div',{key:error,staticClass:\"error form-required\"},[_vm._v(\" \"+_vm._s(_vm.$t(`${error}`))+\" \")])}),0):_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VuelidateErrorTemplate.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VuelidateErrorTemplate.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./VuelidateErrorTemplate.vue?vue&type=template&id=28dcc82f\"\nimport script from \"./VuelidateErrorTemplate.vue?vue&type=script&lang=js\"\nexport * from \"./VuelidateErrorTemplate.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"flex items-center py-3 justify-between border rounded\",class:[_vm.warningClasses, _vm.lowPadding ? 'px-3' : 'px-6'],on:{\"click\":function($event){return _vm.$emit('click')}}},[_c('div',{staticClass:\"flex items-center\",class:[\n { 'pe-8': _vm.showRightSlot },\n { 'flex-grow justify-center': _vm.isContentCentered },\n ]},[(_vm.showIcon)?_vm._t(\"icon\",function(){return [(_vm.icon)?_c('svg-icon',{staticClass:\"me-4 flex-shrink-0\",class:_vm.iconClasses,attrs:{\"name\":_vm.icon}}):_vm._e()]}):_vm._e(),_vm._t(\"default\")],2),(_vm.showRightSlot)?_c('div',{staticClass:\"flex flex-wrap justify-end items-center\"},[_vm._t(\"rightPart\")],2):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarningBox.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarningBox.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./WarningBox.vue?vue&type=template&id=5edeb7c8\"\nimport script from \"./WarningBox.vue?vue&type=script&lang=js\"\nexport * from \"./WarningBox.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"flex items-center break-words\"},[(_vm.icon)?_c('svg-icon',{staticClass:\"icon-2xl me-2\",attrs:{\"name\":_vm.icon}}):_vm._e(),_c('div',{class:_vm.valueClasses},[_vm._v(_vm._s(_vm.localValue))]),(_vm.tooltip)?_c('svg-icon',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.bottom\",value:(_vm.tooltip),expression:\"tooltip\",modifiers:{\"bottom\":true}}],staticClass:\"inline icon-sm -mt-1 mx-1 flex-shrink-0\",attrs:{\"name\":\"info-circle\"}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BaseReadOnlyField.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BaseReadOnlyField.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./BaseReadOnlyField.vue?vue&type=template&id=1552ca4b\"\nimport script from \"./BaseReadOnlyField.vue?vue&type=script&lang=js\"\nexport * from \"./BaseReadOnlyField.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// Wrapper used to easily set entity rules using casl management rules.\n\n// The right types existing in Casl\nconst RightTypes = Object.freeze({\n Manage: \"manage\",\n Create: \"create\",\n Read: \"read\",\n Edit: \"edit\",\n Delete: \"delete\",\n});\n// Casl based ruleset usable as a bitmask\nconst Rights = Object.freeze({\n CanDoNothing: 0x00000,\n CanManage: 0x00001,\n CanCreate: 0x00010,\n CanRead: 0x00100,\n CanEdit: 0x01000,\n CanDelete: 0x10000,\n CanDoEverything: 0x11111,\n});\nlet permissions = {};\n\n/**\n * @param abilityBuilder {AbilityBuilder} // Casl AbilityBuilder()\n * @param entity {string} // Database or Vuex-orm entity\n * @param access {Number} // Rights enum bitmask value\n */\nconst addEntityRules = (abilityBuilder, entity, access) => {\n // Initialize with Rights.CanDoNothing if the entity has no access yet\n permissions[entity] = permissions[entity] || Rights.CanDoNothing;\n // Add access for the entity\n permissions[entity] |= access;\n\n const entityRuleSet = {\n // ruleName: true or false,\n [RightTypes.Manage]: !!(permissions[entity] & Rights.CanManage),\n [RightTypes.Create]: !!(permissions[entity] & Rights.CanCreate),\n [RightTypes.Read]: !!(permissions[entity] & Rights.CanRead),\n [RightTypes.Edit]: !!(permissions[entity] & Rights.CanEdit),\n [RightTypes.Delete]: !!(permissions[entity] & Rights.CanDelete),\n };\n\n for (const accessType in entityRuleSet) {\n let isAccessTypeGranted = entityRuleSet[accessType];\n\n if (isAccessTypeGranted) {\n abilityBuilder.can(accessType, entity);\n } else {\n abilityBuilder.cannot(accessType, entity);\n }\n }\n};\nconst resetEntitiesAccess = () => {\n permissions = {};\n};\n\nexport { addEntityRules, resetEntitiesAccess, RightTypes, Rights };\n","import { AbilityBuilder, Ability } from \"@casl/ability\";\nimport {\n addEntityRules,\n resetEntitiesAccess,\n Rights,\n} from \"@/config/entityRules.js\";\nimport Store from \"@/store\";\n\nfunction processRules() {\n const abilityBuilder = new AbilityBuilder();\n resetEntitiesAccess();\n\n if (Store.getters[\"Auth/isSuperAdmin\"]) {\n addEntityRules(\n abilityBuilder,\n \"Customer\",\n Rights.CanManage | Rights.CanRead | Rights.CanCreate | Rights.CanEdit\n );\n addEntityRules(\n abilityBuilder,\n \"Site\",\n Rights.CanManage | Rights.CanRead | Rights.CanCreate | Rights.CanEdit\n );\n\n addEntityRules(abilityBuilder, \"SiteUnit\", Rights.CanDoEverything);\n addEntityRules(\n abilityBuilder,\n \"SiteUnitAssignment\",\n Rights.CanDoEverything\n );\n addEntityRules(abilityBuilder, \"License\", Rights.CanDoEverything);\n addEntityRules(abilityBuilder, \"PatientLicense\", Rights.CanDoEverything);\n addEntityRules(abilityBuilder, \"Asset\", Rights.CanDoEverything);\n addEntityRules(abilityBuilder, \"UserSession\", Rights.CanRead);\n addEntityRules(\n abilityBuilder,\n \"SiteManagerProfile\",\n Rights.CanDoEverything\n );\n addEntityRules(abilityBuilder, \"TherapistProfile\", Rights.CanDoEverything);\n addEntityRules(abilityBuilder, \"AdminProfile\", Rights.CanDoEverything);\n addEntityRules(abilityBuilder, \"DpoProfile\", Rights.CanDoEverything);\n addEntityRules(abilityBuilder, \"PatientProfile\", Rights.CanRead);\n abilityBuilder.can(\"edit\", \"PatientProfile\", [\n \"isArchived\",\n \"isAccountDeactivated\",\n ]);\n addEntityRules(\n abilityBuilder,\n \"CustomerNotification\",\n Rights.CanDoEverything\n );\n addEntityRules(\n abilityBuilder,\n \"OptionalFeatureDefinition\",\n Rights.CanDoEverything\n );\n addEntityRules(\n abilityBuilder,\n \"OptionalFeatureActivation\",\n Rights.CanDoEverything\n );\n addEntityRules(\n abilityBuilder,\n \"FeedbackReport\",\n Rights.CanRead | Rights.CanCreate\n );\n addEntityRules(abilityBuilder, \"FeedbackReportAttachment\", Rights.CanRead);\n } else if (Store.getters[\"Auth/isAdmin\"]) {\n // Default Admin without any specific competency\n addEntityRules(abilityBuilder, \"Customer\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"Site\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"SiteUnit\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"SiteUnitAssignment\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"License\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"PatientLicense\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"Asset\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"SiteManagerProfile\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"TherapistProfile\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"AdminProfile\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"DpoProfile\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"OptionalFeatureDefinition\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"OptionalFeatureActivation\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"FeedbackReport\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"FeedbackReportAttachment\", Rights.CanRead);\n\n // Admin account manager competency\n if (Store.getters[\"Auth/isAdminManagerAdmin\"]) {\n addEntityRules(abilityBuilder, \"SiteManagerProfile\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"TherapistProfile\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"AdminProfile\", Rights.CanDoEverything);\n addEntityRules(abilityBuilder, \"DpoProfile\", Rights.CanDoEverything);\n }\n\n // Account executive admin\n if (Store.getters[\"Auth/isAccountExecutiveAdmin\"]) {\n addEntityRules(abilityBuilder, \"Site\", Rights.CanDoEverything);\n addEntityRules(abilityBuilder, \"SiteUnit\", Rights.CanDoEverything);\n addEntityRules(\n abilityBuilder,\n \"SiteUnitAssignment\",\n Rights.CanDoEverything\n );\n addEntityRules(abilityBuilder, \"Asset\", Rights.CanDoEverything);\n addEntityRules(\n abilityBuilder,\n \"SiteManagerProfile\",\n Rights.CanDoEverything\n );\n addEntityRules(\n abilityBuilder,\n \"TherapistProfile\",\n Rights.CanDoEverything\n );\n addEntityRules(abilityBuilder, \"AdminProfile\", Rights.CanDoEverything);\n addEntityRules(abilityBuilder, \"DpoProfile\", Rights.CanDoEverything);\n }\n\n // Data scientist\n if (Store.getters[\"Auth/isDataScientistAdmin\"]) {\n abilityBuilder.can(\"edit\", \"Site\", [\"kind\"]);\n }\n\n // Publisher\n if (Store.getters[\"Auth/isPublisherAdmin\"]) {\n // right now can't do anything more than default admin\n }\n\n // Data export manager\n if (Store.getters[\"Auth/isDataExportManagerAdmin\"]) {\n // right now can't do anything more than default admin\n }\n if (Store.getters[\"Auth/isOptionalFeatureManagerAdmin\"]) {\n addEntityRules(\n abilityBuilder,\n \"OptionalFeatureActivation\",\n Rights.CanDoEverything\n );\n }\n } else if (Store.getters[\"Auth/isDPO\"]) {\n // DPO admin\n addEntityRules(abilityBuilder, \"AuditLog\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"Site\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"SiteUnit\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"SiteUnitAssignment\", Rights.CanRead);\n addEntityRules(\n abilityBuilder,\n \"SiteManagerProfile\",\n Rights.CanManage | Rights.CanRead | Rights.CanDelete\n );\n addEntityRules(\n abilityBuilder,\n \"TherapistProfile\",\n Rights.CanManage | Rights.CanRead | Rights.CanDelete\n );\n abilityBuilder.can(\"edit\", \"TherapistProfile\", [\"userName\", \"password\"]);\n addEntityRules(abilityBuilder, \"AdminProfile\", Rights.CanDoEverything);\n addEntityRules(abilityBuilder, \"AdminProfile\", Rights.CanEdit);\n abilityBuilder.cannot(\"edit\", \"AdminProfile\", [\"email\"]);\n addEntityRules(\n abilityBuilder,\n \"DpoProfile\",\n Rights.CanManage | Rights.CanRead | Rights.CanCreate | Rights.CanDelete\n );\n addEntityRules(\n abilityBuilder,\n \"PatientProfile\",\n Rights.CanManage | Rights.CanRead | Rights.CanDelete\n );\n abilityBuilder.can(\"edit\", \"PatientProfile\", [\n \"isArchived\",\n \"isAccountDeactivated\",\n \"password\",\n ]);\n addEntityRules(abilityBuilder, \"OptionalFeatureDefinition\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"OptionalFeatureActivation\", Rights.CanRead);\n } else if (Store.getters[\"Auth/isSiteManager\"]) {\n // Site manager\n addEntityRules(abilityBuilder, \"Site\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"SiteUnit\", Rights.CanDoEverything);\n addEntityRules(\n abilityBuilder,\n \"SiteUnitAssignment\",\n Rights.CanDoEverything\n );\n abilityBuilder.can(\"edit\", \"Site\", [\"passwordParameters\"]);\n abilityBuilder.can(\"edit\", \"Site\", [\"timeZoneId\"]);\n abilityBuilder.can(\"edit\", \"Site\", [\"samlParameters\"]);\n\n addEntityRules(\n abilityBuilder,\n \"SiteManagerProfile\",\n Rights.CanRead | Rights.CanEdit\n );\n addEntityRules(\n abilityBuilder,\n \"TherapistProfile\",\n Rights.CanRead | Rights.CanEdit\n );\n } else if (Store.getters[\"Auth/isTherapist\"]) {\n // Therapist\n addEntityRules(\n abilityBuilder,\n \"PatientProfile\",\n Rights.CanCreate | Rights.CanRead | Rights.CanEdit\n );\n addEntityRules(abilityBuilder, \"Site\", Rights.CanRead);\n addEntityRules(\n abilityBuilder,\n \"VideoMeeting\",\n Rights.CanRead | Rights.CanCreate | Rights.CanEdit | Rights.CanDelete\n );\n addEntityRules(abilityBuilder, \"SiteUnit\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"SiteUnitAssignment\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"UserSession\", Rights.CanCreate);\n abilityBuilder.cannot(\"edit\", \"PatientProfile\", [\n \"isArchived\",\n \"isAccountDeactivated\",\n ]);\n\n // Super therapist\n if (Store.getters[\"Auth/isSuperTherapist\"]) {\n addEntityRules(\n abilityBuilder,\n \"SiteManagerProfile\",\n Rights.CanRead | Rights.CanEdit\n );\n addEntityRules(\n abilityBuilder,\n \"TherapistProfile\",\n Rights.CanRead | Rights.CanEdit\n );\n\n addEntityRules(\n abilityBuilder,\n \"SiteUnit\",\n Rights.CanRead | Rights.CanEdit\n );\n addEntityRules(\n abilityBuilder,\n \"SiteUnitAssignment\",\n Rights.CanDoEverything\n );\n abilityBuilder.cannot(\"edit\", \"Site\", [\"passwordParameters\"]);\n abilityBuilder.can(\"edit\", \"Site\", [\"timeZoneId\"]);\n // N.B: SAML Parameters edition depends also on the site.samlParameters.canSupertherapistAdministerSAML setting.\n abilityBuilder.can(\"edit\", \"Site\", [\"samlParameters\"]);\n\n // Can archive patients\n abilityBuilder.can(\"edit\", \"PatientProfile\", [\n \"isArchived\",\n \"isAccountDeactivated\",\n ]);\n }\n } else if (Store.getters[\"Auth/isPatient\"]) {\n // Patient\n addEntityRules(abilityBuilder, \"VideoMeeting\", Rights.CanRead);\n addEntityRules(abilityBuilder, \"UserSession\", Rights.CanCreate);\n }\n\n return abilityBuilder.rules;\n}\n\nlet ability = new Ability();\n\nconst updateUserAccessRights = () => {\n if (ability) {\n ability.update(processRules());\n }\n};\n\nexport { ability, updateUserAccessRights };\n","import Vue from \"vue\";\nimport I18NextVue from \"i18next-vue\";\nimport i18next from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport { defaultLanguage } from \"@/utils/locales\";\n// translation files\nimport de from \"@/locales/de.json\";\nimport en from \"@/locales/en.json\";\nimport es from \"@/locales/es.json\";\nimport fr from \"@/locales/fr.json\";\nimport it from \"@/locales/it.json\";\nimport ro from \"@/locales/ro.json\";\nimport ar from \"@/locales/ar.json\";\n\nexport const translationResources = {\n en: {\n translation: en,\n },\n fr: {\n translation: fr,\n },\n es: {\n translation: es,\n },\n ro: {\n translation: ro,\n },\n it: {\n translation: it,\n },\n de: {\n translation: de,\n },\n ar: {\n translation: ar,\n },\n};\n\nconst isProduction = process.env.NODE_ENV === \"production\";\n\nlet i18nextPromise = i18next\n // detect user language\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\n .use(LanguageDetector)\n // init i18next\n // for all options read: https://www.i18next.com/overview/configuration-options\n .init({\n debug: false,\n fallbackLng: defaultLanguage,\n resources: translationResources,\n });\n\nexport function useI18Next(app) {\n i18nextPromise;\n Vue.use(I18NextVue, { i18next });\n return app;\n}\n\nexport default i18next;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('app-layout',[_c('router-view')],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"h-full min-h-screen overflow-y-auto\",attrs:{\"id\":\"app\"}},[_c('toast'),_c('login-modal'),_c('stack',[_vm._t(\"default\")],2),_c('cookie-bar'),_c('portal-target',{attrs:{\"name\":\"modal\",\"tag\":\"div\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('notifications',{staticClass:\"min-w-128\",attrs:{\"group\":_vm.toastOptions.group,\"position\":_vm.toastOptions.position,\"max\":_vm.toastOptions.max,\"duration\":_vm.toastOptions.duration,\"closeOnClick\":_vm.toastOptions.closeOnClick,\"ignoreDuplicates\":_vm.toastOptions.ignoreDuplicates},scopedSlots:_vm._u([{key:\"body\",fn:function({ item, close }){return [_c('warning-box',{staticClass:\"mt-3\",class:{ 'cursor-pointer': item.data?.showCloseButton || false },attrs:{\"type\":item.type,\"show-right-slot\":\"\"},on:{\"click\":close},scopedSlots:_vm._u([(item.data?.showCloseButton)?{key:\"rightPart\",fn:function(){return [_c('svg-icon',{staticClass:\"icon-xs\",attrs:{\"name\":\"close\"},on:{\"click\":close}})]},proxy:true}:null],null,true)},[_c('div',{staticClass:\"flex flex-col\"},[(item.title)?_c('div',{staticClass:\"font-bold\"},[_vm._v(\" \"+_vm._s(item.title)+\" \")]):_vm._e(),_c('div',{staticClass:\"w-full\"},[(Array.isArray(item.text))?_c('div',{staticClass:\"flex flex-col\"},_vm._l((item.text),function(text,key){return _c('div',{key:key},[_c('li',{staticClass:\"list-inside\"},[_vm._v(_vm._s(text))])])}),0):_c('span',[_vm._v(_vm._s(item.text))])])])])]}}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Toast.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Toast.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Toast.vue?vue&type=template&id=afdbaa58\"\nimport script from \"./Toast.vue?vue&type=script&lang=js\"\nexport * from \"./Toast.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('transition',{attrs:{\"appear\":\"\",\"name\":\"slideFromBottom\"}},[(_vm.isOpen)?_c('div',{staticClass:\"grid grid-cols-2 gap-4 lg:grid-cols-7 items-center cookie-bar-position z-cookie-bar w-9/10 p-8 shadow-lg bg-gray-100 rounded\"},[_c('div',{staticClass:\"col-span-5\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"App.CookieBar.cookieMessage\"))+\" \")]),_c('button',{staticClass:\"text-white bg-blue-500 hover:text-white hover:bg-blue-750\",on:{\"click\":_vm.accept}},[_vm._v(\" \"+_vm._s(_vm.$t(\"App.CookieBar.acceptText\"))+\" \")]),_c('button',{staticClass:\"text-white bg-blue-500 hover:text-white hover:bg-blue-750\",on:{\"click\":_vm.decline}},[_vm._v(\" \"+_vm._s(_vm.$t(\"App.CookieBar.declineText\"))+\" \")])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CookieBar.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CookieBar.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./CookieBar.vue?vue&type=template&id=ec94a9e0&scoped=true\"\nimport script from \"./CookieBar.vue?vue&type=script&lang=js\"\nexport * from \"./CookieBar.vue?vue&type=script&lang=js\"\nimport style0 from \"./CookieBar.vue?vue&type=style&index=0&id=ec94a9e0&prod&scoped=true&lang=postcss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ec94a9e0\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AppLayout.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AppLayout.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./AppLayout.vue?vue&type=template&id=cdee50bc\"\nimport script from \"./AppLayout.vue?vue&type=script&lang=js\"\nexport * from \"./AppLayout.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n","import mod from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=47398fc1\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('svg',{class:_vm.className,attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e(),_c('use',{attrs:{\"xlink:href\":_vm.iconPath,\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\"}})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SvgIcon.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SvgIcon.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./SvgIcon.vue?vue&type=template&id=1080e5a2\"\nimport script from \"./SvgIcon.vue?vue&type=script&lang=js\"\nexport * from \"./SvgIcon.vue?vue&type=script&lang=js\"\nimport style0 from \"./SvgIcon.vue?vue&type=style&index=0&id=1080e5a2&prod&lang=postcss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('stack',{staticClass:\"w-full min-h-32 justify-center items-center align-middle text-center bg-white\"},[_vm._t(\"text\",function(){return [_c('span',{staticClass:\"font-semibold mb-2\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"Common.System.loading\"))+\" \")])]}),_vm._t(\"icon\",function(){return [_c('loading-icon',{attrs:{\"icon-class\":\"icon-6xl\"}})]})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoadingLayout.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoadingLayout.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./LoadingLayout.vue?vue&type=template&id=0c5de2a1\"\nimport script from \"./LoadingLayout.vue?vue&type=script&lang=js\"\nexport * from \"./LoadingLayout.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"flex items-center\"},[_c('span',{staticClass:\"text-h3 title-ellipsis\"},[_vm._v(\" \"+_vm._s(_vm.title)+\" \")]),(_vm.title && _vm.subTitle.length)?_c('svg-icon',{staticClass:\"icon-md mx-3 flip-icon-if-rtl\",attrs:{\"name\":\"chevron-right\"}}):_vm._e(),(_vm.title && _vm.subTitle.length)?_c('span',{staticClass:\"text-h3 truncate\"},[_vm._v(\" \"+_vm._s(_vm.subTitle)+\" \")]):_vm._e(),(_vm.showNewBadge)?_c('new-feature-badge',{staticClass:\"ms-4\"}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Breadcrumbs.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Breadcrumbs.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Breadcrumbs.vue?vue&type=template&id=6edefd82\"\nimport script from \"./Breadcrumbs.vue?vue&type=script&lang=js\"\nexport * from \"./Breadcrumbs.vue?vue&type=script&lang=js\"\nimport style0 from \"./Breadcrumbs.vue?vue&type=style&index=0&id=6edefd82&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from \"vue\";\nimport SvgIcon from \"@/components/ui/SvgIcon.vue\";\nimport BaseButton from \"@/components/ui/BaseButton.vue\";\nimport LoadingLayout from \"@/components/ui/LoadingLayout.vue\";\nimport Breadcrumbs from \"@/components/application/Breadcrumbs.vue\";\n\nVue.component(\"svg-icon\", SvgIcon);\nVue.component(\"base-button\", BaseButton);\nVue.component(\"breadcrumbs\", Breadcrumbs);\nVue.component(\"loading-layout\", LoadingLayout);\n","import Vue from \"vue\";\n\nimport VTooltip from \"v-tooltip\";\n\n/**\n * To make the tooltip visible outside of a container using \"overflow:auto\",\n * we need to set the following option\n * See https://github.com/Akryum/v-tooltip/issues/192#issuecomment-514328339\n */\nVue.use(VTooltip, {\n defaultBoundariesElement: \"window\",\n});\n","import Vue from \"vue\";\nimport PortalVue from \"portal-vue\";\n\nVue.use(PortalVue);\n","import Vue from \"vue\";\nimport Notifications from \"vue-notification\";\n\nVue.use(Notifications);\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"border-t-6 opacity-100 rounded p-8\",class:[_vm.containerAccentClasses]},[(_vm.messageHasTitle)?[(_vm.options.html)?_c('h2',{staticClass:\"dg-title\",domProps:{\"innerHTML\":_vm._s(_vm.messageTitle)}}):_c('h2',{staticClass:\"dg-title\"},[_vm._v(_vm._s(_vm.messageTitle))])]:_vm._e(),_c('div',{staticClass:\"mb-4 mt-4\",class:{ 'mt-8': _vm.messageHasTitle }},[(_vm.options.html)?_c('div',{staticClass:\"dg-content\",domProps:{\"innerHTML\":_vm._s(_vm.messageBody)}}):_c('div',{staticClass:\"dg-content\"},[_vm._v(_vm._s(_vm.messageBody))])]),_c('br'),_c('div',{staticClass:\"flex flex-row justify-between\"},[(_vm.options.showCancelText)?_c('base-button',{staticClass:\"btn-secondary min-w-42\",on:{\"click\":_vm.handleDismiss}},[_vm._v(\" \"+_vm._s(_vm.cancelText)+\" \")]):_c('div'),_c('base-button',{staticClass:\"ms-4 px-8 min-w-42\",class:[_vm.buttonAccentClasses],on:{\"click\":_vm.handleProceed}},[_vm._v(\" \"+_vm._s(_vm.okText)+\" \")])],1)],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ConfirmDialog.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[1]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ConfirmDialog.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ConfirmDialog.vue?vue&type=template&id=15100234\"\nimport script from \"./ConfirmDialog.vue?vue&type=script&lang=js\"\nexport * from \"./ConfirmDialog.vue?vue&type=script&lang=js\"\nimport style0 from \"./ConfirmDialog.vue?vue&type=style&index=0&id=15100234&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from \"vue\";\nimport VuejsDialog from \"vuejs-dialog\";\nimport i18n from \"./../i18n\";\n\n// include the default style\nimport \"vuejs-dialog/dist/vuejs-dialog.min.css\";\n\nimport ConfirmDialog from \"@/components/ui/ConfirmDialog.vue\";\n\n// Tell Vue to install the plugin.\nVue.use(VuejsDialog, {\n view: \"confirm-dialog\",\n okText: \"\", // Empty to trigger default translations at the component display time only\n cancelText: \"\",\n showCancelText: true,\n customClass: \"confirm-modal\",\n html: false,\n});\n\nVue.dialog.registerComponent(\"confirm-dialog\", ConfirmDialog);\n","import Vue from \"vue\";\nimport { ability } from \"@/config/ability\";\nimport { abilitiesPlugin } from \"@casl/vue\";\n\nVue.use(abilitiesPlugin, ability);\n","import Vue from \"vue\";\nimport Vuelidate from \"vuelidate\";\n\nVue.use(Vuelidate);\n","import Vue from \"vue\";\nimport vuelidateErrorExtractor from \"vuelidate-error-extractor\";\n\nimport VuelidateErrorTemplate from \"@/components/ui/VuelidateErrorTemplate.vue\";\n\nVue.use(vuelidateErrorExtractor, {\n messages: {\n required: \"Common.Validators.Fields.{attribute}.required\",\n minLength: \"Common.Validators.Fields.{attribute}.minLength\",\n email: \"Common.Validators.Fields.{attribute}.email\",\n minValue: \"Common.Validators.Fields.{attribute}.minValue\",\n mustBeUnique: \"Common.Validators.Fields.{attribute}.mustBeUnique\",\n sameAs: \"Common.Validators.Fields.{attribute}.sameAs\",\n emailMustExist: \"Common.Validators.Fields.{attribute}.emailMustExist\",\n },\n template: VuelidateErrorTemplate,\n});\n","import Vue from \"vue\";\nimport VCalendar from \"v-calendar\";\n\nVue.use(VCalendar, {\n masks: {\n input: \"DD MMM YYYY\",\n },\n});\n","import Vue from \"vue\";\nimport VueCtkDateTimePicker from \"vue-ctk-date-time-picker\";\nimport \"vue-ctk-date-time-picker/dist/vue-ctk-date-time-picker.css\";\n\nVue.component(\"VueCtkDateTimePicker\", VueCtkDateTimePicker);\n","import Vue from \"vue\";\nimport VueTelInput from \"vue-tel-input\";\nimport \"vue-tel-input/dist/vue-tel-input.css\";\n\nVue.use(VueTelInput);\n","import Vue from \"vue\";\nimport LoadScript from \"vue-plugin-load-script\";\n\nVue.use(LoadScript);\n","import Vue from \"vue\";\nimport VueClipboard from \"vue-clipboard2\";\n\nVue.use(VueClipboard);\n\n// From: https://www.npmjs.com/package/vue-clipboard2\n// Let vue-clipboard2 set container to current element, needed to copy elements to clipboard\nVueClipboard.config.autoSetContainer = true;\n","import { connectionStatus, libraryStates } from \"@/plugins/vidyo/constants\";\n\nconst resetState = (initialState, state) => {\n const newState = initialState();\n Object.keys(newState).forEach((key) => {\n state[key] = newState[key];\n });\n};\n\nconst initialState = () => {\n return {\n libLoading: true,\n libStatus: null,\n connectionMessage: \"\",\n connectionState: connectionStatus.disconnected,\n version: \"\",\n cameraState: true,\n speakerState: true,\n microphoneState: true,\n cameras: [],\n microphones: [],\n speakers: [],\n selectedCamera: null,\n selectedMicrophone: null,\n selectedSpeaker: null,\n remoteParticipants: [],\n isSharingWindow: false,\n isLoadingShareWindow: false,\n };\n};\n\nfunction areEqualRemoteParticipants(p1, p2) {\n return p1.id == p2.id;\n}\n\nexport default {\n namespaced: true,\n\n state: initialState,\n getters: {\n IsCameraOn(state) {\n return state.cameraState;\n },\n IsSpeakerOn(state) {\n return state.speakerState;\n },\n IsMicrophoneOn(state) {\n return state.microphoneState;\n },\n IsConnected(state) {\n return state.connectionState == connectionStatus.connected;\n },\n IsSharingWindow(state) {\n return state.isSharingWindow;\n },\n libraryState(state) {\n if (state.libStatus == null) {\n return libraryStates.notLoaded;\n }\n\n return state.libStatus.state;\n },\n Participants(state) {\n let names = state.remoteParticipants.map((p) => p.name);\n return [...new Set(names)];\n },\n },\n mutations: {\n setLoading(state, loading) {\n state.libLoading = loading;\n },\n setLibStatus(state, libStatus) {\n state.libStatus = libStatus;\n },\n setVersion(state, version) {\n state.version = version;\n },\n setCameraState(state, cameraState) {\n state.cameraState = cameraState;\n },\n setSpeakerState(state, speakerState) {\n state.speakerState = speakerState;\n },\n setMicrophoneState(state, microphoneState) {\n state.microphoneState = microphoneState;\n },\n setConnectionState(state, connectionState, connectionMessage) {\n state.connectionState = connectionState;\n state.connectionMessage = connectionMessage;\n },\n addRemoteParticipant(state, participant) {\n if (\n state.remoteParticipants.find((p) =>\n areEqualRemoteParticipants(p, participant)\n )\n ) {\n // Found the same connection id, so we remove the old participant first.\n let index = state.remoteParticipants.findIndex((p) =>\n areEqualRemoteParticipants(p, participant)\n );\n if (index != -1) {\n state.remoteParticipants.splice(index, 1);\n }\n }\n state.remoteParticipants.push(participant);\n },\n removeRemoteParticipant(state, participant) {\n let index = state.remoteParticipants.findIndex((p) =>\n areEqualRemoteParticipants(p, participant)\n );\n if (index != -1) {\n state.remoteParticipants.splice(index, 1);\n }\n },\n addCamera(state, camera) {\n if (state.cameras.find((c) => c.id == camera.id)) {\n this.removeCamera(state, camera);\n }\n\n state.cameras.push(camera);\n },\n removeCamera(state, camera) {\n let index = state.cameras.findIndex((c) => c.id == camera.id);\n state.cameras.splice(index, 1);\n },\n setSelectedCamera(state, camera) {\n state.selectedCamera = camera;\n },\n addMicrophone(state, microphone) {\n state.microphones.push(microphone);\n },\n removeMicrophone(state, microphone) {\n let index = state.microphones.findIndex((m) => m.id == microphone.id);\n state.microphones.splice(index, 1);\n },\n setSelectedMicrophone(state, microphone) {\n state.selectedMicrophone = microphone;\n },\n addSpeaker(state, speaker) {\n state.speakers.push(speaker);\n },\n removeSpeaker(state, speaker) {\n let index = state.speakers.findIndex((s) => s.id == speaker.id);\n state.speakers.splice(index, 1);\n },\n setSelectedSpeaker(state, speaker) {\n state.selectedSpeaker = speaker;\n },\n clearStore(state) {\n resetState(initialState, state);\n },\n clearParticipants(state) {\n state.remoteParticipants = [];\n state.localParticipantUsername = null;\n },\n shareWindow(state, isSharingWindow) {\n state.isSharingWindow = isSharingWindow;\n },\n loadShareWindow(state, loading) {\n state.isLoadingShareWindow = loading;\n },\n },\n actions: {\n setLoading({ commit }, loading) {\n commit(\"setLoading\", loading);\n },\n setLibStatus({ commit }, libStatus) {\n commit(\"setLibStatus\", libStatus);\n },\n setVersion({ commit }, version) {\n commit(\"setVersion\", version);\n },\n setCameraState({ commit }, cameraState) {\n commit(\"setCameraState\", cameraState);\n },\n setSpeakerState({ commit }, speakerState) {\n commit(\"setSpeakerState\", speakerState);\n },\n setMicrophoneState({ commit }, microphoneState) {\n commit(\"setMicrophoneState\", microphoneState);\n },\n setConnectionState({ commit }, connectionState, connectionMessage) {\n commit(\"setConnectionState\", connectionState, connectionMessage);\n },\n addRemoteParticipant({ commit }, participant) {\n commit(\"addRemoteParticipant\", participant);\n },\n removeRemoteParticipant({ commit }, participant) {\n commit(\"removeRemoteParticipant\", participant);\n },\n addCamera({ commit }, camera) {\n commit(\"addCamera\", camera);\n },\n removeCamera({ commit }, camera) {\n commit(\"removeCamera\", camera);\n },\n setSelectedCamera({ commit }, camera) {\n commit(\"setSelectedCamera\", camera);\n },\n addMicrophone({ commit }, microphone) {\n commit(\"addMicrophone\", microphone);\n },\n removeMicrophone({ commit }, microphone) {\n commit(\"removeMicrophone\", microphone);\n },\n setSelectedMicrophone({ commit }, microphone) {\n commit(\"setSelectedMicrophone\", microphone);\n },\n addSpeaker({ commit }, speaker) {\n commit(\"addSpeaker\", speaker);\n },\n removeSpeaker({ commit }, speaker) {\n commit(\"removeSpeaker\", speaker);\n },\n setSelectedSpeaker({ commit }, speaker) {\n commit(\"setSelectedSpeaker\", speaker);\n },\n clearParticipants({ commit }) {\n commit(\"clearParticipants\");\n },\n clearStore({ commit }) {\n commit(\"clearStore\");\n },\n shareWindow({ commit }, isSharingWindow) {\n commit(\"shareWindow\", isSharingWindow);\n },\n loadShareWindow({ commit }, loading) {\n commit(\"loadShareWindow\", loading);\n },\n },\n};\n","/**\n * This script is in charge of loading and unloading the external library.\n *\n */\n\nimport Vue from \"vue\";\nimport { vidyoScript } from \"@/plugins/vidyo/constants\";\n\n/**\n * Function to inject the external library for vidyo\n * @returns {Promise}\n */\nconst injectVidyoLib = async function () {\n return Vue.loadScript(`${vidyoScript}`);\n};\n\nconst unloadVidyoLib = async () => {\n return Vue.unloadScript(`${vidyoScript}`)\n .then(() => {\n console.log(\"Unloaded vidyo external script\");\n })\n .catch((error) => {\n console.log(\"Failed to unload vidyo conf\");\n })\n .finally(() => {\n return;\n });\n};\n\nexport { injectVidyoLib, unloadVidyoLib };\n","/**\n * Script allowing to start conference and managing its events. This is the core script for conferencing though vidyo\n *\n */\n\nimport { tr } from \"@/utils/translation\";\n\nexport {\n StartVidyoConnector,\n connectorDisconnected,\n join,\n leave,\n setCamera,\n setMicrophone,\n setSpeaker,\n selectSharing,\n};\nexport { vidyoConnector };\nimport { storeName, videoMaxes } from \"@/plugins/vidyo/constants\";\n\nvar Store = null;\nvar vidyoConnector = null;\n\n// Variable for screen sharing\nvar windowShare;\nvar isSharingWindow = false;\n\n// Run StartVidyoConnector when the VidyoClient is successfully loaded\nfunction StartVidyoConnector(VC, store, platformInfo, callbacks) {\n Store = store;\n window.onresize = function () {\n if (vidyoConnector) {\n HideLabel(vidyoConnector);\n }\n };\n\n window.onbeforeunload = function () {\n vidyoConnector.Destruct();\n };\n\n VC.CreateVidyoConnector({\n viewId: \"vidyo-renderer\", // Div ID where the composited video will be rendered\n viewStyle: \"VIDYO_CONNECTORVIEWSTYLE_Default\", // Visual style of the composited renderer\n remoteParticipants: 2, // Maximum number of participants to render\n logFileFilter: \"warning info@VidyoClient info@VidyoConnector\",\n logFileName: \"\",\n userData: \"\",\n })\n .then(function (vc) {\n vidyoConnector = vc;\n HideLabel(vidyoConnector);\n registerDeviceListeners(vidyoConnector);\n handleParticipantChange(vidyoConnector, callbacks.participantsChangeCb);\n handleSharing(vidyoConnector);\n //handleChat(vidyoConnector); //THIS IS DISABLED BUT STILL PRESENT UNTIL FURTHER NOTICE\n\n // Populate the connectionStatus with the client version\n vidyoConnector\n .GetVersion()\n .then(function (version) {\n console.log(\"version\", version);\n Store.dispatch(`${storeName}/setVersion`, version);\n })\n .catch(function () {\n Store.dispatch(`${storeName}/setVersion`, \"--\");\n });\n\n // If running on Internet Explorer, set the default certificate authority list.\n // This is necessary when IE's Protected Mode is enabled.\n if (platformInfo.isIE) {\n vidyoConnector\n .SetCertificateAuthorityList({ certificateAuthorityList: \"default\" })\n .then(function () {\n console.log(\"SetCertificateAuthorityList success\");\n })\n .catch(function () {\n console.error(\"SetCertificateAuthorityList failed\");\n });\n }\n if (callbacks.vidyoReadyCb) {\n callbacks.vidyoReadyCb();\n }\n })\n .catch(function (err) {\n console.error(\"CreateVidyoConnector Failed \" + err);\n });\n}\n\nasync function leave() {\n return vidyoConnector.Disconnect();\n}\n\n/**\n * HANDLERS\n *\n */\n\n/// CALLED BY INIT\nfunction HideLabel(vidyoConnector) {\n var rndr = document.getElementById(\"vidyo-renderer\");\n if (rndr != null) {\n vidyoConnector.ShowViewLabel({\n viewId: \"vidyo-renderer\",\n showLabel: false, // Hide 'Preview' label\n });\n }\n}\n\n// Permits to count devices on addition\nlet cameraNumber = 0;\nlet microphoneNumber = 0;\n\n/// CALLED BY INIT\nfunction registerDeviceListeners(vidyoConnector) {\n // Handle appearance and disappearance of camera devices in the system\n vidyoConnector\n .RegisterLocalCameraEventListener({\n onAdded: function (localCamera) {\n localCamera.SetMaxConstraint({\n width: videoMaxes.width,\n height: videoMaxes.height,\n });\n\n // Creates a getter so that the displayed value makes sense\n // when the camera name is not available, as seen on Firefox\n // or when blocking camera access on Chrome.\n // To be noted that the camera name is not available\n // at the time this method is run, hence the usage of a getter.\n const deviceNumber = ++cameraNumber;\n localCamera.displayName = () => {\n // Checking for falsy here doesn't work because it is a simple string object\n if (localCamera.name !== \"\") {\n return localCamera.name;\n }\n\n return tr(\"ConferencePage.Video.Settings.cameraNumber\", {\n deviceNumber: deviceNumber,\n });\n };\n\n Store.dispatch(`${storeName}/addCamera`, localCamera);\n\n if (localCamera.name.includes(\"Default\")) {\n setCamera(localCamera);\n }\n\n if (localCamera.name.includes(\"Kinect\")) {\n setCamera(localCamera);\n }\n },\n onRemoved: function (localCamera) {\n // Existing camera became unavailable\n Store.dispatch(`${storeName}/removeCamera`, localCamera);\n },\n onSelected: function (localCamera) {\n // Camera was selected/unselected by you or automatically\n if (localCamera) {\n Store.dispatch(`${storeName}/setSelectedCamera`, localCamera);\n }\n },\n onStateUpdated: function (localCamera, state) {\n // Camera state was updated\n },\n })\n .then(function () {\n console.log(\"RegisterLocalCameraEventListener Success\");\n })\n .catch(function () {\n console.error(\"RegisterLocalCameraEventListener Failed\");\n });\n\n // Handle appearance and disappearance of microphone devices in the system\n vidyoConnector\n .RegisterLocalMicrophoneEventListener({\n onAdded: function (localMicrophone) {\n // Creates a getter so that the displayed value makes sense\n // when the microphone name is not available, as seen on Firefox\n // or when blocking microphone access on Chrome.\n // To be noted that this name is not available\n // at the time this method is run, hence the usage of a getter.\n const deviceNumber = ++microphoneNumber;\n localMicrophone.displayName = () => {\n // Checking for falsy here doesn't work because it is a simple string object\n if (localMicrophone.name !== \"\") {\n return localMicrophone.name;\n }\n\n return tr(\"ConferencePage.Video.Settings.microphoneNumber\", {\n deviceNumber: deviceNumber,\n });\n };\n\n Store.dispatch(`${storeName}/addMicrophone`, localMicrophone);\n if (localMicrophone.name.includes(\"Default\")) {\n setMicrophone(localMicrophone);\n }\n },\n onRemoved: function (localMicrophone) {\n Store.dispatch(`${storeName}/removeMicrophone`, localMicrophone);\n },\n onSelected: function (localMicrophone) {\n Store.dispatch(`${storeName}/setSelectedMicrophone`, localMicrophone);\n },\n onStateUpdated: function (localMicrophone, state) {\n // Microphone state was updated\n },\n })\n .then(function () {\n console.log(\"RegisterLocalMicrophoneEventListener Success\");\n })\n .catch(function () {\n console.error(\"RegisterLocalMicrophoneEventListener Failed\");\n });\n\n // Handle appearance and disappearance of speaker devices in the system\n vidyoConnector\n .RegisterLocalSpeakerEventListener({\n onAdded: function (localSpeaker) {\n Store.dispatch(`${storeName}/addSpeaker`, localSpeaker);\n if (localSpeaker.name.includes(\"Default\")) {\n setSpeaker(localSpeaker);\n }\n },\n onRemoved: function (localSpeaker) {\n Store.dispatch(`${storeName}/removeSpeaker`, localSpeaker);\n },\n onSelected: function (localSpeaker) {\n Store.dispatch(`${storeName}/setSelectedSpeaker`, localSpeaker);\n },\n onStateUpdated: function (localSpeaker, state) {\n // Speaker state was updated\n },\n })\n .then(function () {\n console.log(\"RegisterLocalSpeakerEventListener Success\");\n })\n .catch(function () {\n console.error(\"RegisterLocalSpeakerEventListener Failed\");\n });\n}\n\nlet setCamera = async (camera) => {\n return vidyoConnector\n .SelectLocalCamera({\n localCamera: camera,\n })\n .then(function () {});\n};\n\nlet setMicrophone = async (microphone) => {\n return vidyoConnector\n .SelectLocalMicrophone({\n localMicrophone: microphone,\n })\n .then(function () {});\n};\n\nlet setSpeaker = async (speaker) => {\n return vidyoConnector\n .SelectLocalSpeaker({\n localSpeaker: speaker,\n })\n .then(function () {});\n};\n\n/// CALLED BY INIT\nfunction handleSharing(vidyoConnector) {\n // Register for window share status updates, which operates differently in plugin vs webrtc:\n // plugin: onAdded and onRemoved callbacks are received for each available window\n // webrtc: onAdded callback received for a single item, which when clicked will yield a popup to select a share.\n vidyoConnector\n .RegisterLocalWindowShareEventListener({\n onAdded: function (localWindowShare) {\n windowShare = localWindowShare;\n },\n onRemoved: function (localWindowShare) {\n /* Existing window is no longer available for sharing */\n },\n onSelected: function (localWindowShare) {\n if (localWindowShare) {\n isSharingWindow = true;\n console.log(\"Window share selected : \" + localWindowShare.name);\n } else {\n isSharingWindow = false;\n console.log(\"Stop sharing window\");\n }\n Store.dispatch(`${storeName}/shareWindow`, isSharingWindow);\n Store.dispatch(`${storeName}/loadShareWindow`, false);\n },\n onStateUpdated: function (localWindowShare, state) {\n /* Window share state has been updated */\n },\n })\n .then(function () {\n console.log(\"RegisterLocalWindowShareEventListener Success\");\n })\n .catch(function () {\n console.error(\"RegisterLocalWindowShareEventListener Failed\");\n });\n}\n\nlet selectSharing = async () => {\n if (!isSharingWindow) {\n return vidyoConnector.SelectLocalWindowShare({\n localWindowShare: windowShare,\n });\n } else {\n return vidyoConnector.SelectLocalWindowShare({\n localWindowShare: null,\n });\n }\n};\n\n/// CALLED BY INIT\nfunction handleParticipantChange(vidyoConnector, userChangeCb) {\n // Report local participant in RegisterParticipantEventListener.\n vidyoConnector.ReportLocalParticipantOnJoined({\n reportLocalParticipant: true,\n });\n\n vidyoConnector\n .RegisterParticipantEventListener({\n onJoined: function (participant) {\n if (participant.name.length > 64) {\n participant.name = participant.name.substring(1); // remove apostrophe in front of username introduced by vidyo when Companion Username starts with special character\n }\n Store.dispatch(`${storeName}/addRemoteParticipant`, participant).then(\n () => {\n userChangeCb();\n }\n );\n },\n onLeft: function (participant) {\n Store.dispatch(\n `${storeName}/removeRemoteParticipant`,\n participant\n ).then(() => {\n userChangeCb();\n });\n },\n onDynamicChanged: function (participants) {\n // Order of participants changed\n },\n onLoudestChanged: function (participant, audioOnly) {},\n })\n .then(function () {\n console.log(\"RegisterParticipantEventListener Success\");\n })\n .catch(function () {\n console.err(\"RegisterParticipantEventListener Failed\");\n });\n}\n\n// Attempt to connect to the conference\n// We will also handle connection failures\n// and network or server-initiated disconnects.\nasync function join(\n vidyoConnector,\n host,\n roomKey,\n roomPin,\n displayName,\n resourceId,\n onSuccess,\n onFailure,\n onDisconnect\n) {\n return vidyoConnector\n .ConnectToRoomAsGuest({\n host: host,\n displayName: displayName,\n roomKey: roomKey,\n roomPin: `${roomPin}`,\n\n onSuccess: function () {\n onSuccess();\n HideLabel(vidyoConnector);\n },\n onFailure: function (reason) {\n onFailure(reason);\n console.error(\n \"VidyoConnector.ConnectToRoomAsGuest : onFailure callback received\"\n );\n HideLabel(vidyoConnector);\n },\n onDisconnected: function (reason) {\n onDisconnect(reason);\n HideLabel(vidyoConnector);\n },\n })\n .then(function (status) {\n if (!status) {\n throw Error(status);\n }\n })\n .catch(function () {\n console.error(\"ConnectToRoomAsGuest Failed\");\n });\n}\n\n// Connector either fails to connect or a disconnect completed, update UI elements\nfunction connectorDisconnected(vidyoConnector) {\n // Release devices from the vidyo connector and then destruct it.\n vidyoConnector.SelectLocalCamera({ localCamera: null });\n vidyoConnector.SelectLocalMicrophone({ localMicrophone: null });\n vidyoConnector.SelectLocalSpeaker({ localSpeaker: null });\n vidyoConnector.Destruct();\n}\n","/**\n * Root script of the plugin, in charge of being loaded inside vue and handling the interface between the functionalities and the components\n * Later on this might contain references to the components as well\n *\n */\n\nimport VidyoStore from \"./vidyo-store\";\n\nimport { injectVidyoLib, unloadVidyoLib } from \"@/plugins/vidyo/injector\";\nimport {\n StartVidyoConnector,\n join,\n leave,\n connectorDisconnected,\n vidyoConnector,\n setSpeaker,\n setMicrophone,\n setCamera,\n selectSharing,\n} from \"@/plugins/vidyo/conference\";\nimport {\n storeName,\n connectionStatus,\n libraryStates,\n} from \"@/plugins/vidyo/constants\";\n\nconst Vidyo = {\n storeName: storeName,\n install: function (Vue, options) {\n if (!options.store) {\n console.log(\"Vidyo plugin requires a reference to the store\");\n return;\n }\n\n const Store = options.store;\n Store.registerModule(storeName, VidyoStore);\n let Vidyo = {\n connected: false,\n /*\n * Conference call control functions\n * */\n async setMicrophoneState(state) {\n if (!vidyoConnector) {\n return;\n }\n return vidyoConnector\n .SetMicrophonePrivacy({\n privacy: !state,\n })\n .then(() => {\n Store.dispatch(`${storeName}/setMicrophoneState`, state);\n });\n },\n async setSpeakerState(state) {\n if (!vidyoConnector) {\n return;\n }\n return vidyoConnector\n .SetSpeakerPrivacy({\n privacy: !state,\n })\n .then(() => {\n Store.dispatch(`${storeName}/setSpeakerState`, state);\n });\n },\n async setCameraState(state) {\n if (!vidyoConnector) {\n return;\n }\n return vidyoConnector\n .SetCameraPrivacy({\n privacy: !state,\n })\n .then(() => {\n Store.dispatch(`${storeName}/setCameraState`, state);\n });\n },\n async setCamera(camera) {\n if (camera == null) {\n return this.setCameraState(false);\n }\n this.setCameraState(true);\n return setCamera(camera);\n },\n async setMicrophone(microphone) {\n if (microphone == null) {\n return this.setMicrophoneState(false);\n }\n this.setMicrophoneState(true);\n\n return setMicrophone(microphone);\n },\n async setSpeaker(speaker) {\n if (speaker == null) {\n return this.setSpeakerState(false);\n }\n this.setSpeakerState(true);\n return setSpeaker(speaker);\n },\n async selectSharing() {\n return selectSharing();\n },\n async enableDebug() {\n vidyoConnector\n .EnableDebug({\n port: 7776,\n logFilter: \"warning info@VidyoClient info@VidyoConnector\",\n })\n .then(function () {\n console.log(\"EnableDebug success\");\n })\n .catch(function () {\n console.error(\"EnableDebug failed\");\n });\n },\n async join(host, roomKey, roomPin, displayName, resourceId, onFailure) {\n Store.dispatch(\n `${storeName}/setConnectionState`,\n connectionStatus.connecting,\n \"\"\n );\n Store.dispatch(`${storeName}/clearParticipants`);\n return join(\n vidyoConnector,\n host,\n roomKey,\n roomPin,\n displayName,\n resourceId,\n () => {\n Store.dispatch(\n `${storeName}/setConnectionState`,\n connectionStatus.connected,\n \"\"\n );\n },\n (reason) => {\n Store.dispatch(\n `${storeName}/setConnectionState`,\n connectionStatus.failed,\n reason\n );\n onFailure();\n },\n (reason) => {\n Store.dispatch(\n `${storeName}/setConnectionState`,\n connectionStatus.disconnected,\n reason\n );\n }\n );\n },\n async leave() {\n Store.dispatch(\n `${storeName}/setConnectionState`,\n connectionStatus.disconnecting,\n \"\"\n );\n return leave();\n },\n };\n\n let platformInfo = {};\n let webrtcInitializeAttempts = 0;\n let participantsChangeCb = null;\n let vidyoReadyCb = null;\n Vidyo.initVidyo = async function (\n vidyoReadyCallback,\n participantsChangeCallback\n ) {\n Store.dispatch(`${storeName}/setLoading`, true);\n platformInfo = loadPlatformInfo();\n vidyoReadyCb = vidyoReadyCallback;\n participantsChangeCb = participantsChangeCallback;\n return injectVidyoLib().then(() => {\n return window.onVidyoClientLoaded({\n state: \"READY\",\n description: \"Native SCIP + WebRTC\",\n });\n return;\n });\n };\n\n Vidyo.unload = () => {\n connectorDisconnected(vidyoConnector);\n unloadVidyoLib().then(() => {\n Store.dispatch(`${storeName}/clearStore`);\n });\n };\n\n Vue.Vidyo = Vue.prototype.$Vidyo = Vidyo;\n\n // Injects the callback function to handle vidyo loading\n window.onVidyoClientLoaded = (status) => {\n console.log(\n \"Status: \" + status.state + \" / Description: \" + status.description\n );\n Store.dispatch(`${storeName}/setLibStatus`, status);\n switch (status.state) {\n case libraryStates.ready: // The library is operating normally\n Store.dispatch(`${storeName}/setLoading`, false);\n window.VC = new window.VidyoClientLib.VidyoClient(\"\", () => {\n // After the VidyoClient is successfully initialized a global VC object will become available\n // All of the VidyoConnector gui and logic is implemented in VidyoConnector.js\n StartVidyoConnector(VC, Store, platformInfo, {\n vidyoReadyCb: vidyoReadyCb,\n participantsChangeCb: participantsChangeCb,\n });\n });\n break;\n case libraryStates.retrying: // The library operating is temporarily paused\n break;\n case libraryStates.failed: // The library operating has stopped\n // If WebRTC initialization failed, try again up to 3 times.\n if (\n status.description.indexOf(\n \"Could not initialize WebRTC transport\"\n ) > -1 &&\n webrtcInitializeAttempts < 3\n ) {\n ++webrtcInitializeAttempts;\n } else {\n Store.dispatch(`${storeName}/setLoading`, false);\n console.log(\"Failed to load the library\");\n }\n break;\n case libraryStates.failedVersion: // The library operating has stopped\n console.log(\"We should show a link to download a new version\");\n console.log(\"Failed because of version\");\n Store.dispatch(`${storeName}/setLoading`, false);\n break;\n case libraryStates.notAvailable: // The library is not available\n console.log(\"Show that the library is not available\");\n Store.dispatch(`${storeName}/setLoading`, false);\n break;\n case libraryStates.timedout: // Transcoding Inactivity Timeout\n console.log(\"Show that there was a timeout\");\n Store.dispatch(`${storeName}/setLoading`, false);\n break;\n }\n return true; // Return true to reload the plugins if not available\n };\n },\n};\n\nfunction loadPlatformInfo() {\n let platformInfo = {};\n let userAgent = navigator.userAgent || navigator.vendor || window.opera;\n // Opera 8.0+\n platformInfo.isOpera =\n userAgent.indexOf(\"Opera\") != -1 || userAgent.indexOf(\"OPR\") != -1;\n // Firefox\n platformInfo.isFirefox =\n userAgent.indexOf(\"Firefox\") != -1 || userAgent.indexOf(\"FxiOS\") != -1;\n // Chrome 1+\n platformInfo.isChrome =\n userAgent.indexOf(\"Chrome\") != -1 || userAgent.indexOf(\"CriOS\") != -1;\n // Safari\n platformInfo.isSafari =\n !platformInfo.isFirefox &&\n !platformInfo.isChrome &&\n userAgent.indexOf(\"Safari\") != -1;\n // AppleWebKit\n platformInfo.isAppleWebKit =\n !platformInfo.isSafari &&\n !platformInfo.isFirefox &&\n !platformInfo.isChrome &&\n userAgent.indexOf(\"AppleWebKit\") != -1;\n // Internet Explorer 6-11\n platformInfo.isIE =\n userAgent.indexOf(\"MSIE\") != -1 || !!document.documentMode == true;\n // Edge 20+\n platformInfo.isEdge = !platformInfo.isIE && !!window.StyleMedia;\n // Check if Mac\n platformInfo.isMac = navigator.platform.indexOf(\"Mac\") > -1;\n // Check if Windows\n platformInfo.isWin = navigator.platform.indexOf(\"Win\") > -1;\n // Check if Linux\n platformInfo.isLinux = navigator.platform.indexOf(\"Linux\") > -1;\n // Check if iOS\n platformInfo.isiOS =\n userAgent.indexOf(\"iPad\") != -1 || userAgent.indexOf(\"iPhone\") != -1;\n // Check if Android\n platformInfo.isAndroid = userAgent.indexOf(\"android\") > -1;\n // Check if Electron\n platformInfo.isElectron =\n typeof process === \"object\" &&\n process.versions &&\n process.versions.electron !== undefined;\n // Check if WebRTC is available\n platformInfo.isWebRTCAvailable =\n navigator.getUserMedia ||\n navigator.webkitGetUserMedia ||\n navigator.mozGetUserMedia ||\n (navigator.mediaDevices ? navigator.mediaDevices.getUserMedia : undefined)\n ? true\n : false;\n // Check if 64bit\n platformInfo.is64bit =\n navigator.userAgent.indexOf(\"WOW64\") > -1 ||\n navigator.userAgent.indexOf(\"Win64\") > -1 ||\n window.navigator.platform == \"Win64\";\n return platformInfo;\n}\n\nexport default Vidyo;\n","import Vue from \"vue\";\nimport Vidyo from \"@/plugins/vidyo\";\nimport store from \"@/store/index\";\n\nVue.use(Vidyo, { store });\n","import Vue from \"vue\";\nimport Multiselect from \"vue-multiselect\";\nimport \"vue-multiselect/dist/vue-multiselect.min.css\";\n\nVue.component(\"multiselect\", Multiselect);\n","import Vue from \"vue\";\nimport VWave from \"v-wave\";\n\nVue.use(VWave);\n","import Vue from \"vue\";\nimport VueMq from \"vue-mq\";\nimport tailwindConfig from \"@/../tailwind.config.js\";\n\n/**\n * Use the tailwind breakpoints in vueMq\n * Need to remove the \"px\" from the value and cast it as a Number\n */\nVue.use(VueMq, {\n breakpoints: {\n sm: Number(tailwindConfig.theme.screens.sm.replace(\"px\", \"\", 10)),\n md: Number(tailwindConfig.theme.screens.md.replace(\"px\", \"\", 10)),\n lg: Number(tailwindConfig.theme.screens.lg.replace(\"px\", \"\", 10)),\n xl: Number(tailwindConfig.theme.screens.xl.replace(\"px\", \"\", 10)),\n \"2xl\": Number(tailwindConfig.theme.screens[\"2xl\"].replace(\"px\", \"\", 10)),\n \"3xl\": Number(tailwindConfig.theme.screens[\"3xl\"].replace(\"px\", \"\", 10)),\n },\n defaultBreakpoint: \"sm\", // customize this for SSR\n});\n","import Vue from \"vue\";\nimport App from \"./App.vue\";\n\nimport router from \"@/router/\";\nimport store from \"@/store/index\";\n\nimport \"@/assets/css/main.postcss\";\nimport \"@/components\";\nimport \"@/plugins/index\";\n\nimport { useI18Next } from \"./i18n\";\n\nVue.config.productionTip = false;\n\nuseI18Next(\n new Vue({\n router,\n store,\n render: (h) => h(App),\n })\n).$mount(\"#app\");\n","import { Model } from \"@vuex-orm/core\";\nimport { extractLocale } from \"@/utils/extractLocale\";\nimport ActivityPatientUsage from \"@/models/ActivityPatientUsage.model\";\nimport {\n isEntityContainsAllTerms,\n isEntityContainsOneTerm,\n tidySearchTerm,\n} from \"@/utils/filters\";\nimport { tr } from \"@/utils/translation\";\nimport { lowerFirst } from \"lodash\";\n\nexport default class ActivityDescription extends Model {\n static entity = \"activities\";\n\n static fields() {\n return {\n id: this.attr(null), // Primary key\n name: this.attr(null),\n description: this.attr(null),\n icon: this.attr(null),\n globalMovementId: this.attr(\"\"),\n detailedMovements: this.attr([]),\n tutorialVideoUrl: this.attr(null),\n movementName: this.attr(null),\n movementIcon: this.attr(null),\n movementDescription: this.attr(null),\n therapeuticDescription: this.attr(null),\n isBodyTrackerNeeded: this.attr(null),\n isHandsTrackerNeeded: this.attr(null),\n isIzarTrackerNeeded: this.attr(null),\n isActivityMovementSetupNeeded: this.attr(null),\n tags: this.attr([]),\n trainedFunctions: this.attr([]),\n compensationMovements: this.attr([]),\n gestureProviders: this.attr([]),\n activityOptions: this.attr([]),\n compensatoryDetectionDescription: this.attr({}),\n levelProgressionDescription: this.attr({}),\n isLicensedForUser: this.attr(false),\n // Foreign data\n patientUsage: this.hasOne(ActivityPatientUsage, \"id\"),\n };\n }\n\n //\n // Metadata getters\n\n get Name() {\n return extractLocale(this.name);\n }\n\n get MovementName() {\n return extractLocale(this.movementName);\n }\n\n get Description() {\n return extractLocale(this.description);\n }\n\n get MovementDescription() {\n return this.getTranslatedMultilineText(this.movementDescription);\n }\n\n /**\n * Entity fields to search into\n */\n get entityFieldsToSearchInto() {\n let fields = [];\n if (this.Name) {\n fields.push(tidySearchTerm(this.Name));\n }\n if (this.MovementName) {\n fields.push(tidySearchTerm(this.MovementName));\n }\n fields.push(\n this.trainedFunctions\n .map((trainedFunction) =>\n tr(\"Common.Activity.TrainedFunctions.\" + lowerFirst(trainedFunction))\n )\n .join(\"\")\n );\n return fields;\n }\n\n /**\n * Return true iff all terms correspond to the entity\n * @param {string} searchTerms terms are space separated\n */\n isEntityCorrespondingToAll(searchTerms) {\n return isEntityContainsAllTerms(this.entityFieldsToSearchInto, searchTerms);\n }\n\n /**\n * Return true iff one term corresponds to the entity\n * @param {string} searchTerms terms are space separated\n */\n isEntityCorrespondingTo(searchTerms) {\n return isEntityContainsOneTerm(this.entityFieldsToSearchInto, searchTerms);\n }\n\n get CompensatoryDetectionDescription() {\n return this.getTranslatedMultilineText(\n this.compensatoryDetectionDescription\n );\n }\n\n get TherapeuticDescription() {\n return this.getTranslatedMultilineText(this.therapeuticDescription);\n }\n\n get LevelDescription() {\n return this.getTranslatedMultilineText(this.levelProgressionDescription);\n }\n\n get Icon() {\n try {\n const image = require(`@/assets/games_icons/${this.icon}.png`);\n return image;\n } catch {\n const image = require(`@/assets/games_icons/Default_GameIcon.png`);\n return image;\n }\n }\n\n /**\n * Activity ids that should have the \"NEW\" badge\n */\n get IsNew() {\n return false;\n }\n\n /**\n * Returns a specific text, replacing new lines by '
' for later html parsing.\n * @param textArray\n * @return {string}\n */\n getTranslatedMultilineText(textArray) {\n const value = extractLocale(textArray);\n if (!value) {\n return \"\";\n }\n // N.B.: Using regex, as the standard expression only replaces the first occurrence.\n return value.replace(/\\n/g, \"
\");\n }\n\n //\n // Network methods\n\n // Returns the list of all activities WITHOUT information\n // on whether the activity is licensed for the given user.\n static fetchAllActivityInformation() {\n return this.api().get(\"/activity\", { dataKey: \"result\" });\n }\n\n /**\n * Returns the list of all activities but with information\n * on whether the activity is licensed for the given user.\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static fetchLicensedActivityInformation(signal) {\n return this.api().get(\"/activity/licensed\", {\n dataKey: \"result\",\n signal,\n });\n }\n}\n","import { Model } from \"@vuex-orm/core\";\n\nexport default class ActivityPatientUsage extends Model {\n static entity = \"activityPatientUsage\";\n\n static fields() {\n return {\n id: this.attr(null), // Corresponds to the app id\n username: this.attr(null),\n icon: this.attr(null),\n gestureProviders: this.attr([]),\n isSideChoiceEnabled: this.attr(false), // used for calibration custom computation\n calibrationDatePerSide: this.attr(null),\n lastPlayedDate: this.attr(null),\n playedCount: this.attr(null),\n };\n }\n\n //\n // Metadata getters\n\n // @summary Returns the most recent calibration date for the given activity data.\n get CalibrationDate() {\n const datePerSide = this.calibrationDatePerSide || [];\n let mostRecentDate = new Date(1970, 1, 1);\n\n for (let sideDate in datePerSide) {\n // Skip loop if the property is from prototype\n if (!datePerSide.hasOwnProperty(sideDate)) {\n continue;\n }\n let date = new Date(datePerSide[sideDate]);\n if (date > mostRecentDate) {\n mostRecentDate = date;\n }\n }\n // Check whether the date is not the default one.\n if (mostRecentDate.getFullYear() > 1970) {\n return mostRecentDate;\n }\n return null;\n }\n\n get CanCalibrate() {\n return (\n this.calibrationDatePerSide &&\n !(this.calibrationDatePerSide instanceof Array)\n );\n }\n\n /**\n * Returns whether the activity has valid calibration data.\n * @param side\n * @param isSideChoiceEnabled is activity side choice enabled\n * @return {boolean}\n */\n hasValidCalibration = (side = \"\") => {\n // First, let's discard the activities that do not require a calibration\n // - GardenRage_WorldFootsteps_1p\n // - Mind4_HorizReach_1p\n if (!this.CanCalibrate) {\n return true;\n }\n\n // Then, we check the activities that have a Side Choice\n // - Airplane_ForearmProSup_1p\n // - CarRacer_ShoulderAbdAdd_1p\n // - CrossTheRoad_ForwardBackwardSteps_1p\n // - CrossTheRoad_WristFlexionExtension_1p\n // - FlyingCar_ShouldersFlexExt_1p\n // - FlyingCar_WristFlexExt_1p\n // - Hovercraft_UnilateralShoulderAbdAdd_1p\n // - LineRoller_ForearmProSup_1p\n // - LineRoller_UniLateralFootStep_1p\n // - SkiLiner_WristRadialUlnarDeviation_1p\n // - TowerBuilder_FingersPinch_1p\n // - TowerBuilder_HandGraspRelease_1p // Note: movement has changed to HandOpenCloseMcpa\n // - WitcherDefense_ForearmProSup_1p\n // - Cauldron Chronicles\n if (this.isSideChoiceEnabled) {\n return this.calibrationDatePerSide.hasOwnProperty(\n this.convertSideAbbreviation(side)\n );\n }\n\n // Remains only the activities that are not Sided. They can be split in two groups:\n // - the ones that have only non-sided gesture calibrator (1 or 2 of them)\n // * Airplane_TrunkLatFlex_1p (1)\n // * CarRacer_FakeSteeringWheel_1p (2)\n // * CarRacer_TrunkAxialRotation_1p (1)\n // * MineCart_FwdPumpTrunkLatFlex_1p (2)\n // * Octopulse_Squat_1p (1)\n // * SkiLiner_LateralBodyWeightTransfer_1p (1)\n // * a667e5e3-5328-4844-b0b9-028eb8e680c6 -> japanese garden (2)\n if (\n this.id === \"Airplane_TrunkLatFlex_1p\" ||\n this.id === \"CarRacer_FakeSteeringWheel_1p\" ||\n this.id === \"CarRacer_TrunkAxialRotation_1p\" ||\n this.id === \"MineCart_FwdPumpTrunkLatFlex_1p\" ||\n this.id === \"Octopulse_Squat_1p\" ||\n this.id === \"SkiLiner_LateralBodyWeightTransfer_1p\" ||\n this.id === \"a667e5e3-5328-4844-b0b9-028eb8e680c6\"\n ) {\n return (\n this.calibrationDatePerSide.hasOwnProperty(\"Right\") ||\n this.calibrationDatePerSide.hasOwnProperty(\"NotApplicable\")\n );\n } else {\n // The activities that use Sided Gesture Provider and that require 2 of them\n // - Climbing_VerticalHandsReaching_1p\n // - Hovercraft_BilateralShouldersAbdAdd_1p\n // - LineRoller_BiLateralFootStep_1p\n // - CrossTheRoad_FreeSteps_1p\n return (\n this.calibrationDatePerSide.hasOwnProperty(\"Left\") &&\n this.calibrationDatePerSide.hasOwnProperty(\"Right\")\n );\n }\n };\n\n convertSideAbbreviation(sideLetter) {\n switch (sideLetter) {\n case \"L\":\n return \"Left\";\n case \"R\":\n return \"Right\";\n default:\n return \"\";\n }\n }\n\n // Network methods\n\n /**\n * Fetch patient activity usage\n * @param {string} username username of the patient\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static fetchPatientActivityUsageData(username, signal) {\n return this.api().get(`activity/therapist/patient/${username}`, {\n dataKey: \"result\",\n signal,\n });\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport Customer from \"@/models/Customer.model\";\nimport { formatISO9075, parseISO } from \"date-fns\";\nimport { getDropdownEntries } from \"@/utils/dropdown\";\nimport { isEntityContainsAllTerms, tidySearchTerm } from \"@/utils/filters\";\n\nexport default class Asset extends Model {\n static entity = \"assets\";\n\n static fields() {\n return {\n id: this.attr(null),\n addedAtUtc: this.attr(null),\n version: this.attr(null),\n sfdcAssetId: this.attr(null),\n customerId: this.attr(null),\n deviceId: this.attr(null),\n serialNumber: this.attr(null),\n deviceMode: this.attr(assetMode[0]),\n customer: this.belongsTo(Customer, \"customerId\"),\n };\n }\n\n get AddedAtUtc() {\n return this.addedAtUtc ? parseISO(this.addedAtUtc) : null;\n }\n set AddedAtUtc(value) {\n this.addedAtUtc = formatISO9075(value);\n }\n\n set Customer(value) {\n this.customer = value;\n this.customerId = value.id;\n }\n\n get Customer() {\n return this.customer;\n }\n\n static get() {\n return this.api().get(\"/asset\", { dataKey: \"result\" });\n }\n\n static async post(newAsset) {\n return this.api().post(\"/asset\", newAsset, { dataKey: \"result\" });\n }\n\n static async remove(asset) {\n return this.api().delete(\"/asset/\" + asset.id, {\n delete: asset.id,\n dataKey: \"result\",\n });\n }\n\n static async put(updatedAsset) {\n // Let's strip the customer data\n var updatedAssetCopy = JSON.parse(JSON.stringify(updatedAsset));\n updatedAssetCopy.customer = null;\n return this.api().put(\"/asset/\" + updatedAssetCopy.id, updatedAssetCopy, {\n dataKey: \"result\",\n });\n }\n\n static getAssetModeList() {\n return getDropdownEntries(assetMode, \"AdminPages.Asset.Mode\");\n }\n\n /**\n * Entity fields to search into\n */\n get entityFieldsToSearchInto() {\n let fields = [this.id, this.deviceId, this.serialNumber, this.sfdcAssetId];\n if (this.customer?.fullName) {\n fields.push(tidySearchTerm(this.customer.fullName));\n }\n\n return fields;\n }\n\n /**\n * Return true iff all terms correspond to the entity\n * @param {string} searchTerms terms are space separated\n */\n isEntityCorrespondingTo(searchTerms) {\n if (!this.entityFieldsToSearchInto.length) {\n return false;\n }\n return isEntityContainsAllTerms(this.entityFieldsToSearchInto, searchTerms);\n }\n}\n\nexport const assetMode = [\"Public\", \"Private\"];\n","import { Model } from \"@vuex-orm/core\";\nimport { formatISO9075, parseISO } from \"date-fns\";\nimport Profile from \"@/models/Profile.model\";\nimport { getDropdownEntries } from \"@/utils/dropdown\";\nimport { addDays } from \"date-fns\";\n\nexport const auditLogCategory = Object.freeze({\n All: \"all\",\n SignedDocuments: \"signedDocuments\",\n Emails: \"emails\",\n});\n\nexport default class AuditLog extends Model {\n static entity = \"auditLogs\";\n\n static fields() {\n return {\n id: this.attr(null),\n timestamp: this.attr(null),\n subjectUsername: this.attr(null),\n action: this.attr(null),\n objectType: this.attr(null),\n objectUsernames: this.attr([]),\n objectDetail: this.attr(null),\n detail: this.attr(null),\n subjectUser: this.belongsTo(Profile, \"subjectUsername\", \"userName\"),\n targetUsers: this.hasManyBy(Profile, \"objectUsernames\", \"userName\"),\n };\n }\n\n /**\n * Fetches the audit log data for the given date range\n * @param from {Date}\n * @param to {Date}\n * @return {Promise}\n */\n static async get(from, to) {\n if (!(from instanceof Date) || !(to instanceof Date)) {\n // Prevents an error on loading with empty dates\n from = new Date();\n to = new Date();\n }\n const fromDate = formatISO9075(from, { representation: \"date\" });\n const toDate = formatISO9075(addDays(to, 1), { representation: \"date\" }); // add 1 day to be compliant with the backend behavior\n\n return this.api().get(`/audit-log?fromDate=${fromDate}&toDate=${toDate}`, {\n dataKey: \"result\",\n });\n }\n\n get Timestamp() {\n return this.timestamp ? parseISO(this.timestamp) : null;\n }\n\n static getAuditLogCategoryList() {\n return getDropdownEntries(auditLogCategory, \"AdminPages.AuditLog.Category\");\n }\n}\n","import { Model } from \"@vuex-orm/core\";\n\nexport default class AuthOptions extends Model {\n static entity = \"authOptions\";\n\n static fields() {\n return {\n lockout: this.attr({}, (value) => new LockoutOptions(value)),\n };\n }\n\n static get() {\n return this.api().get(\"/account/auth-options\");\n }\n}\n\nexport class LockoutOptions {\n constructor(options) {\n this.enabled = options.enabled || false;\n this.maxFailedAccessAttempts = options.maxFailedAccessAttempts || 5;\n this.defaultLockoutTimeSpan = options.defaultLockoutTimeSpan || 5;\n }\n\n timeStringToMinutes(timeString) {\n return timeString.split(\":\").reduce((acc, time) => 60 * acc + +time) / 60;\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport License from \"@/models/License.model\";\nimport PatientLicense from \"@/models/PatientLicense.model\";\nimport Site from \"@/models/Site.model\";\nimport Asset from \"@/models/Asset.model\";\nimport { defaultLocale, getLanguageCodeFrom } from \"@/utils/locales\";\nimport { getDropdownEntries } from \"@/utils/dropdown\";\nimport { isEntityContainsAllTerms, tidySearchTerm } from \"@/utils/filters\";\n\nexport const customerKinds = Object.freeze({\n siteAdminCustomer: \"SiteAdminCustomer\",\n therapistCustomer: \"TherapistCustomer\",\n patientCustomer: \"PatientCustomer\",\n});\n\nexport default class Customer extends Model {\n static entity = \"customers\";\n\n static fields() {\n return {\n id: this.attr(null),\n salesForceAccountId: this.attr(\"\"),\n salesForceAccountName: this.attr(\"\"),\n salesForceContactID: this.attr(\"\"),\n userName: this.attr(null),\n firstname: this.attr(null),\n name: this.attr(null),\n email: this.attr(null),\n phone: this.attr(null),\n kind: this.attr(customerKinds[0]),\n siteId: this.attr(null),\n language: this.attr(defaultLocale),\n license: this.hasOne(License, \"customerId\"),\n patientLicense: this.hasMany(PatientLicense, \"customerId\"),\n site: this.belongsTo(Site, \"siteId\"),\n assets: this.hasMany(Asset, \"customerId\"),\n };\n }\n\n static mutators() {\n return {\n // handle deprecated language values\n language(value) {\n return getLanguageCodeFrom(value);\n },\n };\n }\n\n get fullName() {\n if (this.firstname && this.name) {\n return this.firstname + \" \" + this.name;\n }\n if (this.firstname) {\n return this.firstname;\n }\n return this.name;\n }\n\n get fullNameHtml() {\n if (this.fullName) {\n return this.firstname + \" \" + this.name + \"\";\n } else if (this.email) {\n return this.email;\n } else {\n return \"--\";\n }\n }\n\n // use in entity-search\n get displayName() {\n if (this.fullName) {\n return this.fullName;\n }\n return this.email;\n }\n\n static get() {\n return this.api().get(\"/customer\", { dataKey: \"result\" });\n }\n\n static async post(newCustomer, entity) {\n const url = entity === \"Customer\" ? \"/customer/mindmotion\" : \"/customer\";\n return this.api()\n .post(url, newCustomer, { dataKey: \"result\" })\n .then((response) => {\n response.entities.customers.forEach(async (entity) => {\n await Site.getById(entity.siteId);\n });\n });\n }\n\n static async remove(customer) {\n return this.api().delete(\"/customer/\" + customer.id, {\n delete: customer.id,\n dataKey: \"result\",\n });\n }\n\n static async put(updatedCustomer) {\n return this.api().put(\"/customer/\" + updatedCustomer.id, updatedCustomer, {\n dataKey: \"result\",\n });\n }\n\n static getCustomerKindList() {\n return getDropdownEntries(customerKinds, \"AdminPages.Customer.Kind\");\n }\n\n /**\n * Entity fields to search into\n */\n get entityFieldsToSearchInto() {\n let fields = [this.email, this.id];\n if (this.fullName) {\n fields.push(tidySearchTerm(this.fullName));\n }\n if (this.userName) {\n fields.push(tidySearchTerm(this.userName));\n }\n if (this.site?.name) {\n fields.push(tidySearchTerm(this.site.name));\n }\n return fields;\n }\n\n /**\n * Return true iff all terms correspond to the entity\n * @param {string} searchTerms terms are space separated\n */\n isEntityCorrespondingTo(searchTerms) {\n return isEntityContainsAllTerms(this.entityFieldsToSearchInto, searchTerms);\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport { formatISO9075, parseISO } from \"date-fns\";\nimport { getDropdownOptionsFromObjectArray } from \"@/utils/dropdown\";\nimport { isEntityContainsAllTerms } from \"@/utils/filters\";\n\nexport default class CustomerNotification extends Model {\n static entity = \"customerNotification\";\n\n static fields() {\n return {\n id: this.attr(\"00000000-0000-0000-0000-000000000000\"),\n subject: this.attr(null),\n semanticVersion: this.attr(null),\n publishDate: this.attr(null),\n content: this.attr({}),\n contentType: this.attr(null),\n useDefaultLanguage: this.attr(true),\n };\n }\n\n isValidForLocale(locale) {\n return this.IsValid && !!this.content[locale];\n }\n\n get IsValid() {\n return (\n this.semanticVersion !== null &&\n this.semanticVersion !== \"\" &&\n this.content !== {} &&\n this.publishDate !== null\n );\n }\n\n get PublishDate() {\n return this.publishDate ? parseISO(this.publishDate) : null;\n }\n\n set PublishDate(value) {\n this.publishDate = formatISO9075(value);\n }\n\n static get() {\n return this.api().get(\"/customer-notification\", { dataKey: \"result\" });\n }\n\n /**\n * Returns the customer notification following the one with the provided semantic version.\n * @param notificationVersion\n */\n static async getNextFromVersion(notificationVersion) {\n return this.api().get(\n `/customer-notification/next/${notificationVersion}`,\n {\n dataTransformer: (response) => {\n return response && response.data\n ? response.data.result\n : new CustomerNotification();\n },\n }\n );\n }\n\n static async post(newCustomerNotification) {\n return this.api().post(\"/customer-notification\", newCustomerNotification, {\n dataKey: \"result\",\n });\n }\n\n static async remove(customerNotification) {\n return this.api().delete(\n \"/customer-notification/\" + customerNotification.id,\n {\n delete: customerNotification.id,\n dataKey: \"result\",\n }\n );\n }\n\n static async put(updatedCustomerNotification) {\n return this.api().put(\n `/customer-notification/${updatedCustomerNotification.id}`,\n updatedCustomerNotification,\n {\n dataKey: \"result\",\n }\n );\n }\n\n static getContentTypeList() {\n const entriesTranslated = Object.values(contentTypes).map((id) => ({\n id: id,\n name: id,\n }));\n return getDropdownOptionsFromObjectArray(entriesTranslated);\n }\n\n /**\n * Entity fields to search into\n */\n get entityFieldsToSearchInto() {\n return [this.id, this.semanticVersion, this.subject];\n }\n\n /**\n * Return true iff all terms correspond to the entity\n * @param {string} searchTerms terms are space separated\n */\n isEntityCorrespondingTo(searchTerms) {\n return isEntityContainsAllTerms(this.entityFieldsToSearchInto, searchTerms);\n }\n}\n\nexport const contentTypes = [\"text/markdown\"];\n","import {\n formatToDDMMMYYYY as formatToDDMMMYYYYFns,\n formatToDDMMMYYYYHmm as formatToDDMMMYYYYHmmFns,\n formatToHmm as formatToHmmFns,\n formatToHHmm as formatToHHmmFns,\n format as formatFns,\n} from \"@/utils/date\";\nimport { parseISO } from \"date-fns\";\nimport i18n from \"@/i18n\";\n\nexport default class DateTimeOffset {\n // Private variables\n isoString;\n fullDate;\n fullTime;\n timeOffset;\n displayedOffset;\n offsetInMinutes;\n rawDateTime;\n localeDateObject;\n\n /**\n * Constructor for the DateTimeOffset\n * @param value {String | Date | Number} ISO format of the date to create\n */\n constructor(value = null) {\n // When null, use date.now in locale timezone\n if (!value) {\n this.parseNumber(Date.now());\n return;\n }\n\n // Generate the date from number in locale timezone\n if (\n typeof value == \"number\" ||\n value instanceof Number ||\n Object.prototype.toString.call(value) === \"[object Number]\"\n ) {\n this.parseNumber(value);\n return;\n }\n\n // Generate the date in locale timezone\n if (\n value instanceof Date ||\n Object.prototype.toString.call(value) === \"[object Date]\"\n ) {\n this.parseDate(value);\n return;\n }\n\n // Generate the date from the string\n if (\n typeof value == \"string\" ||\n value instanceof String ||\n Object.prototype.toString.call(value) === \"[object String]\"\n ) {\n this.parseString(value);\n return;\n }\n\n throw \"Parameter type is not valid\";\n }\n\n /**\n * Method to parse a Number into a DateTimeOffset\n * @param value {Number} offset will correspond to the locale timezone\n * @returns {DateTimeOffset} the object with the date parsed\n */\n parseNumber(value) {\n return this.parseDate(new Date(value));\n }\n\n /**\n * Method to parse a Date into a DateTimeOffset\n * @param value {Date} offset will correspond to the locale timezone\n * @returns {DateTimeOffset} the object with the date parsed\n */\n parseDate(value) {\n this.fullDate = formatFns(value, \"yyyy-MM-dd\", {\n locale: \"en-US\",\n });\n this.fullTime = formatFns(value, \"HH:mm:ss.SSS\", {\n locale: \"en-US\",\n });\n this.offsetInMinutes = value.getTimezoneOffset();\n this._formatOffsets(this.offsetInMinutes);\n this.isoString = this.fullDate + \"T\" + this.fullTime + this.timeOffset;\n this.rawDateTime = parseISO(this.fullDate + \"T\" + this.fullTime);\n this.localeDateObject = parseISO(this.isoString);\n return this;\n }\n\n /**\n * Method to parse a string into a DateTimeOffset\n * @param value {String} format must be yyyy-MM-ddTHH:mm:ss.SSSZZZ\n * @returns {DateTimeOffset} the object with the date parsed\n */\n parseString(value) {\n // Create the date object in the locale timezone\n this.localeDateObject = parseISO(value);\n\n // Extract date, time and offset from initial value\n let [fullDate, time] = value.split(\"T\");\n this.fullDate = fullDate;\n\n // Force time to be midnight if not given\n if (time === undefined) {\n time = \"00:00:00.000\";\n }\n\n // Extract time and offset from the time string part\n [this.fullTime, this.timeOffset] = time.split(/(?=[+-])/);\n\n // Special case when timezone is UTC, offset is not in hh:mm but ends by Z\n let regexEndByZ = new RegExp(\"Z$\", \"gi\");\n if (regexEndByZ.test(this.fullTime)) {\n this.timeOffset = \"+00:00\";\n this.fullTime = this.fullTime.slice(0, -1);\n } else if (this.timeOffset === undefined) {\n this.timeOffset = \"+00:00\";\n }\n\n // Define date time without offset\n this.rawDateTime = parseISO(this.fullDate + \"T\" + this.fullTime);\n\n // Split offset in hour and minutes\n let [hoursOfOffset, minutesOfOffset] = this.timeOffset.split(\":\");\n\n // Compute offset in minutes as Javascript computes it (sign is reversed)\n // Javascript offset for UTC+10:00 is -600 minutes\n if (minutesOfOffset === undefined) {\n minutesOfOffset = \"00\";\n }\n let signOffset = hoursOfOffset.startsWith(\"-\") ? 1 : -1;\n // Remove the sign at the beginning\n hoursOfOffset = hoursOfOffset.slice(1);\n this.offsetInMinutes =\n signOffset * (parseInt(hoursOfOffset) * 60 + parseInt(minutesOfOffset));\n\n this._formatOffsets(this.offsetInMinutes);\n this.isoString = this.fullDate + \"T\" + this.fullTime + this.timeOffset;\n return this;\n }\n\n /**\n * Private method used by the constructor.\n * Format the given offset to displayedOffset and timeOffset\n * e.g. 5.75 => +5:45 and +05:45\n * -14.0 => -14 and -14:00\n * @param offsetInMinutes {Number} offset in minute\n */\n _formatOffsets(offsetInMinutes) {\n if (offsetInMinutes === 0) {\n this.timeOffset = \"+00:00\";\n this.displayedOffset = \"\";\n return;\n }\n\n let offsetSign = offsetInMinutes < 0 ? \"+\" : \"-\"; // Note: Javascript has negative offset for positive timezones (Europe/bern => -60 min)\n let offsetHours = Math.floor(Math.abs(offsetInMinutes / 60));\n let offsetMinutes = Math.abs(offsetInMinutes % 60);\n\n this.displayedOffset =\n offsetSign +\n offsetHours +\n (offsetMinutes !== 0\n ? `:${offsetMinutes < 10 ? \"0\" : \"\"}${offsetMinutes}`\n : \"\");\n\n this.timeOffset =\n offsetSign +\n (offsetHours < 10 ? \"0\" : \"\") +\n offsetHours +\n \":\" +\n (offsetMinutes < 10 ? \"0\" : \"\") +\n offsetMinutes;\n }\n\n /**\n * Append offset to value when it does not correspond to locale offset\n * Winter time offset is compared to winter time offset in locale timezone\n * As well as for summer offset\n * @param value {String} will be append at the beginning of the result\n * @param forceAddingOffset {Boolean} true to append UTC offset\n * @returns {String} the value appended by the offset\n */\n formatToZ(value, forceAddingOffset = false) {\n if (!value) {\n return \"\";\n }\n\n if (!forceAddingOffset) {\n forceAddingOffset = !this.isOffsetSameAsLocale;\n }\n\n return forceAddingOffset\n ? `${value} (${i18n.t(\"Common.Timezone.utc\", {\n offset: this.displayedOffset,\n })})`\n : value;\n }\n\n /**\n * Returns a Date object of the DateTime without info ot the offset\n * @returns {Date} date without the offset\n */\n get dateTime() {\n return this.rawDateTime;\n }\n\n /**\n * Returns a Date object of the DateTime without info ot the offset\n * e.g. For the date 2022-02-01 13:25:12.586 +02:00\n * Where locale timezone is -04:00\n * Returns 2022-02-01 09:25:12.586\n * @returns {Date} date offsetted to locale timezone\n */\n get localeDateTime() {\n return this.localeDateObject;\n }\n\n /**\n * Returns the offset in minutes as Javascript computes it\n * Javascript offset for UTC+10:00 is -600 minutes\n * @returns {Number} offset in minutes\n */\n getTimezoneOffset() {\n return this.offsetInMinutes;\n }\n\n /**\n * Returns the date formatted as 01 Jun 2022\n * @returns {String} formatted day, without time\n */\n get formatToDDMMMYYYY() {\n return formatToDDMMMYYYYFns(this.rawDateTime);\n }\n\n /**\n * Returns the time formatted as 1:05\n * @returns {String} formatted time only - hours may have one number\n */\n get formatToHmm() {\n return formatToHmmFns(this.rawDateTime);\n }\n\n get formatToDDMMMYYYYHmm() {\n return formatToDDMMMYYYYHmmFns(this.rawDateTime);\n }\n\n /**\n * Returns the time formatted as 01:05\n * @returns {String} formatted time only - hours has always 2 numbers\n */\n get formatToHHmm() {\n return formatToHHmmFns(this.rawDateTime);\n }\n\n /**\n * Returns the time formatted as 1:05 (UTC+05:45)\n * Offset is displayed only when it differs from locale timezone\n * @param forceAddingOffset {Boolean} true to always display the offset\n * @returns {String} formatted time only with the offset - hours may have one number\n */\n formatToHmmZ(forceAddingOffset = false) {\n return this.formatToZ(this.formatToHmm, forceAddingOffset);\n }\n\n /**\n * Returns the time formatted as 01:05 (UTC+05:45)\n * Offset is displayed only when it differs from locale timezone\n * @param forceAddingOffset {Boolean} true to always display the offset\n * @returns {String} formatted time only with the offset - hours has always 2 numbers\n */\n formatToHHmmZ(forceAddingOffset = false) {\n return this.formatToZ(this.formatToHHmm, forceAddingOffset);\n }\n\n /**\n * Return the offset formatted as +05:45\n * @returns {String} formatted offset - hours has always 2 numbers\n */\n get formatOffsetToHHmm() {\n return this.timeOffset;\n }\n\n /**\n * Return the offset formatted as +5:45 or an empty string if 0\n * @returns {String} formatted offset - hours may have 2 numbers\n */\n get formatOffsetToHmm() {\n return this.displayedOffset;\n }\n\n /**\n * Return an ISO string representation with the given offset\n * e.g. For the date 2022-02-01 13:25:12.586 +02:00\n * Whatever is the locale timezone\n * Returns 2022-02-01T13:25:12.586+02:00\n * @returns {String} DateTime formatted in ISO standard\n */\n get localeISOString() {\n return this.isoString;\n }\n\n /**\n * Compare the offset of the DateTimeOffset to the locale timezone by taken care of the period of the year\n * In winter, it takes into account the winter offset\n * As in summer, if there is a time change, it takes the summer offset otherwise the timezone base offset\n * @returns {Boolean} True if offset are the same as locale\n */\n get isOffsetSameAsLocale() {\n if (this.rawDateTime === undefined) {\n return false;\n }\n\n return this.rawDateTime.getTimezoneOffset() === this.offsetInMinutes;\n }\n\n /**\n * Used to serialized in JSON the object\n * Result can be parsed in C#\n * @returns {String} time with offset in ISO format\n */\n toJSON() {\n return this.isoString;\n }\n\n /**\n * Returns a string representation of an object.\n * @returns {String} time with offset in ISO format\n */\n toString() {\n return this.isoString;\n }\n\n /**\n * Returns a string representation of an object.\n * @returns {String} time with offset in ISO format\n */\n toLocaleString() {\n return this.isoString;\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport { parseISO, differenceInDays } from \"date-fns\";\nimport { format } from \"@/utils/date\";\n\nexport default class DayTrainingSummary extends Model {\n static entity = \"dayTrainingSummary\";\n static primaryKey = [\"date\", \"patientUsername\"];\n\n static fields() {\n return {\n date: this.attr(null),\n patientUsername: this.attr(null),\n hasPlan: this.attr(null),\n hasMissedPlan: this.attr(null),\n hasUnsupervisedSession: this.attr(null),\n hasSupervisedSession: this.attr(null),\n hasSessionSupervisedByCaller: this.attr(null),\n };\n }\n\n get Date() {\n return this.date ? parseISO(this.date) : null;\n }\n\n static async fetch(patientUsername, dateStart, dateEnd) {\n return this.api().get(\n `patient-performance/${patientUsername}/summary?from=${dateStart}&to=${dateEnd}`,\n { dataKey: \"result\" }\n );\n }\n\n /**\n * Fetches the patient training summary data for the requested date range\n * Used to display the training data in the performance timeline.\n * @param patientUsername\n * @param startDate\n * @param endDate\n * @return [DayTrainingSummary]\n */\n static async fetchForRange(patientUsername, startDate, endDate) {\n const startingDay = format(startDate, \"yyyy-MM-dd\");\n const endingDay = format(endDate, \"yyyy-MM-dd\");\n\n return this.fetch(patientUsername, startingDay, endingDay);\n }\n\n /**\n * Returns the stored training summaries for the given range and patient\n * @param patientUsername\n * @param startDate\n * @param endDate\n * @return [DayTrainingSummary]\n */\n static async getForRange(patientUsername, startDate, endDate) {\n return DayTrainingSummary.query()\n .where(\"patientUsername\", patientUsername)\n .where((record) => startDate <= record.Date && record.Date <= endDate)\n .get();\n }\n\n /**\n * Gets the data for the given range but fetches the data from startDate if not available\n * This is used by both the timeline and the calendar selector for the performance report.\n */\n static getForRangeAndFetchIfNeeded(patientUsername, startDate, endDate) {\n return this.getForRange(patientUsername, startDate, endDate).then(\n (entries) => {\n if (\n !entries?.length ||\n entries?.length < differenceInDays(endDate, startDate)\n ) {\n return this.fetchForRange(patientUsername, startDate, endDate).then(\n () => {\n return this.getForRange(patientUsername, startDate, endDate);\n }\n );\n }\n return entries;\n }\n );\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport DateTimeOffset from \"@/models/DateTimeOffset.model\";\nimport Profile from \"@/models/Profile.model\";\nimport { isEntityContainsAllTerms, tidySearchTerm } from \"@/utils/filters\";\n\nexport default class FeedbackReport extends Model {\n static entity = \"feedbackReport\";\n\n static salesForceGenericUrl;\n\n static fields() {\n return {\n id: this.attr(null),\n createdAtUtc: this.attr(null),\n version: this.attr(null),\n username: this.attr(null),\n reporterName: this.attr(null),\n email: this.attr(null),\n title: this.attr(null),\n description: this.attr(null),\n type: this.attr(null),\n productName: this.attr(null),\n productVersion: this.attr(null),\n details: this.attr(null),\n salesforceSupportCaseId: this.attr(null),\n userProfile: this.belongsTo(Profile, \"username\", \"userName\"),\n };\n }\n\n get ProductInfo() {\n if (this.productName && this.productVersion) {\n return `${this.productName} ${this.productVersion}`;\n }\n\n if (this.productName) {\n return this.productName;\n }\n\n if (this.productVersion) {\n return this.productVersion;\n }\n\n return \"\";\n }\n\n get ReporterInfo() {\n if (this.reporterName && this.email) {\n return `${this.reporterName} ${this.email}`;\n }\n\n if (this.reporterName) {\n return this.reporterName;\n }\n\n if (this.email) {\n return this.email;\n }\n\n return \"\";\n }\n\n get CreatedDateAtUtc() {\n return new DateTimeOffset(this.createdAtUtc);\n }\n\n get DetailsSerialized() {\n return JSON.stringify(this.details, null, 2);\n }\n\n get salesforceSupportCaseUrl() {\n if (FeedbackReport.salesForceGenericUrl && this.salesforceSupportCaseId) {\n return FeedbackReport.salesForceGenericUrl.replace(\n \"{0}\",\n this.salesforceSupportCaseId\n );\n } else {\n return \"\";\n }\n }\n\n /**\n * Get Salesforce generic URL.\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async fetchSalesforceGenericUrl(signal) {\n return await this.api()\n .get(\"/feedbackreport/sfdc-url\", { signal })\n .then((response) => {\n return (FeedbackReport.salesForceGenericUrl = response.response.data);\n })\n .catch((error) => {\n return Promise.reject(error);\n });\n }\n\n /**\n * Fetch all feedback report from companion.\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async fetchAllFeedbackReports(signal) {\n return await this.api()\n .get(\"/feedbackreport\", { dataKey: \"result\", signal })\n .then(() => {\n return FeedbackReport.query().all();\n })\n .catch((error) => {\n return Promise.reject(error);\n });\n }\n\n /**\n * Returns the feedback report from the store or fetch it from companion.\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async getAllFeedbackReports(signal) {\n let reports = FeedbackReport.query().all();\n if (reports && reports.length > 0) {\n return reports;\n } else {\n return await this.fetchAllFeedbackReports(signal);\n }\n }\n\n /**\n * Create feedback report on Salesforce.\n * @param {FeedbackReport} feedbackReport Permits request cancellation support\n */\n static async postFeedbackReportOnSalesforce(feedbackReport) {\n return await this.api()\n .post(\"/feedbackreport/\" + feedbackReport.id + \"/salesforce\", undefined, {\n dataKey: \"result\",\n })\n .then(() => {\n return FeedbackReport.query().find(feedbackReport.id);\n })\n .catch((error) => {\n return Promise.reject(error);\n });\n }\n\n /**\n * Test connection between Companion and Salesforce\n */\n static async testSalesforceConnection() {\n return await this.api()\n .get(\"/feedbackreport/sfdc/healthz\")\n .then((result) => {\n return result.response.data;\n })\n .catch((error) => {\n return Promise.reject(error);\n });\n }\n\n /**\n * Entity fields to search into\n */\n get entityFieldsToSearchInto() {\n let fields = [this.type, this.id];\n if (this.ReporterInfo) {\n fields.push(tidySearchTerm(this.ReporterInfo));\n }\n if (this.ProductInfo) {\n fields.push(tidySearchTerm(this.ProductInfo));\n }\n if (this.title) {\n fields.push(tidySearchTerm(this.title));\n }\n if (this.salesforceSupportCaseId) {\n fields.push(this.salesforceSupportCaseId);\n }\n return fields;\n }\n\n /**\n * Return true iff all terms correspond to the entity\n * @param {string} searchTerms terms are space separated\n */\n isEntityCorrespondingTo(searchTerms) {\n return isEntityContainsAllTerms(this.entityFieldsToSearchInto, searchTerms);\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport FeedbackReport from \"@/models/FeedbackReport.model\";\nimport { isEntityContainsAllTerms, tidySearchTerm } from \"@/utils/filters\";\n\nexport default class FeedbackReportAttachment extends Model {\n static entity = \"feedbackReportAttachment\";\n\n static fields() {\n return {\n id: this.attr(null),\n feedbackReportId: this.attr(null),\n name: this.attr(null),\n type: this.attr(null),\n data: this.attr(null),\n feedbackReport: this.belongsTo(FeedbackReport, \"feedbackReportId\", \"id\"),\n };\n }\n\n /**\n * Fetch all feedback report attachments for a feedback report Id.\n * @param {string} feedbackReportId id of the related feedback report\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async fetchAllFeedbackReportAttachments(feedbackReportId, signal) {\n return await this.api()\n .get(\"/feedbackreport/\" + feedbackReportId + \"/attachment\", {\n signal,\n })\n .then((response) => {\n return response.response.data.result.map(\n (attachment) => new FeedbackReportAttachment(attachment)\n );\n })\n .catch((error) => {\n return Promise.reject(error);\n });\n }\n\n /**\n * Returns the feedback report attachments from the store or fetch it from companion.\n * @param {string} feedbackReportId id of the related feedback report\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async getAllFeedbackReportAttachments(feedbackReportId, signal) {\n let attachments = FeedbackReportAttachment.all().find(\n (attachment) => attachment.feedbackReportId === feedbackReportId\n );\n if (attachments && attachments.length > 0) {\n return attachments;\n } else {\n return await this.fetchAllFeedbackReportAttachments(\n feedbackReportId,\n signal\n );\n }\n }\n\n /**\n * Entity fields to search into\n */\n get entityFieldsToSearchInto() {\n let fields = [this.type];\n if (this.name) {\n fields.push(tidySearchTerm(this.name));\n }\n return fields;\n }\n\n /**\n * Return true iff all terms correspond to the entity\n * @param {string} searchTerms terms are space separated\n */\n isEntityCorrespondingTo(searchTerms) {\n return isEntityContainsAllTerms(this.entityFieldsToSearchInto, searchTerms);\n }\n}\n","import { Model } from \"@vuex-orm/core\";\n\n/**\n * This model represents a patient group\n */\nexport default class Group extends Model {\n static entity = \"groups\";\n\n static fields() {\n return {\n id: this.attr(null),\n siteId: this.attr(null),\n patientGroupName: this.attr(\"\"),\n patientsInGroup: this.attr([]),\n addedAt: this.attr(null),\n isNew: this.attr(false),\n isEditing: this.attr(false),\n };\n }\n\n /**\n * Fetch all groups\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async fetchAllGroups(signal) {\n return await this.api().get(\"group/patientgroups\", {\n dataKey: \"result\",\n signal,\n });\n }\n\n /**\n * Add group\n * @param {object} group The group\n */\n static async post(group) {\n return await this.api().post(\"group/patientgroup\", group, {\n dataKey: \"result\",\n });\n }\n\n /**\n * Update group\n * @param {object} group The group\n */\n static async put(group) {\n return await this.api().put(\"group/patientgroup\", group, {\n dataKey: \"result\",\n });\n }\n\n /**\n * Delete group\n * @param {string} groupId The groupid\n */\n static async remove(groupId) {\n return await this.api().delete(`group/patientgroup/${groupId}`, {\n delete: groupId,\n dataKey: \"result\",\n });\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport { notifyError } from \"@/services/api\";\n\nexport default class InstructionsForUse extends Model {\n static entity = \"allInstructionsForUse\";\n\n static fields() {\n return {\n id: this.attr(null),\n addedAtUtc: this.attr(null),\n name: this.attr(null),\n productName: this.attr(null),\n productVersion: this.attr(null),\n kind: this.attr(null),\n language: this.attr(null),\n documentVersion: this.attr(null),\n checksum: this.attr(null),\n size: this.attr(-1),\n uri: this.attr(null),\n };\n }\n\n static async getLatest() {\n return this.api()\n .get(\"/ifu/search?latestOnly=true\", { dataKey: \"result\" })\n .catch((error) => {\n notifyError(error);\n });\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport { notifyError } from \"@/services/api\";\n\nexport default class LevelRecommendation extends Model {\n static entity = \"levelRecommendation\";\n\n static fields() {\n return {\n activityId: this.attr(null),\n activeSide: this.attr(null),\n recommendedLevel: this.attr(null),\n addedAtUtc: this.attr(null),\n };\n }\n\n static async getLatestLevelRecommendationsForPatient(\n patientUsername,\n signal\n ) {\n return this.api()\n .get(`/level-recommendation/patient/${patientUsername}`, {\n dataKey: \"result\",\n signal,\n })\n .catch((error) => {\n notifyError(error);\n });\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport Customer from \"@/models/Customer.model\";\nimport { parseISO, formatISO9075 } from \"date-fns\";\nimport ActivityDescription from \"@/models/ActivityDescription.model\";\nimport { isEntityContainsAllTerms, tidySearchTerm } from \"@/utils/filters\";\n\nexport default class License extends Model {\n static entity = \"licenses\";\n\n static fields() {\n return {\n id: this.attr(null),\n addedAtUtc: this.attr(null),\n version: this.attr(null),\n sfdcLicenseID: this.attr(null),\n customerId: this.attr(null),\n licenseCount: this.attr(0),\n validUntil: this.attr(null),\n isActive: this.attr(false),\n licensedActivities: this.attr([]),\n customer: this.belongsTo(Customer, \"customerId\"),\n activities: this.hasManyBy(\n ActivityDescription,\n \"licensedActivities\",\n \"id\"\n ),\n };\n }\n\n setActivities(values) {\n this.activities = values;\n let newLicensedActivities = [];\n values.forEach((value) => {\n newLicensedActivities.push(value.id);\n });\n this.licensedActivities = newLicensedActivities;\n }\n\n set Customer(value) {\n this.customer = value;\n this.customerId = value.id;\n }\n\n get Customer() {\n return this.customer;\n }\n\n get CustomerFullHtmlName() {\n return this.customer?.fullName?.length > 0\n ? this.customer.fullNameHtml\n : \"\";\n }\n\n get IsCustomerValid() {\n return !!this.customer;\n }\n\n get ValidUntil() {\n return this.validUntil ? parseISO(this.validUntil) : null;\n }\n set ValidUntil(value) {\n this.validUntil = formatISO9075(value);\n }\n\n get AddedAtUtc() {\n return this.addedAtUtc ? parseISO(this.addedAtUtc) : null;\n }\n set AddedAtUtc(value) {\n this.addedAtUtc = formatISO9075(value);\n }\n\n static get() {\n return this.api().get(\"/license\", { dataKey: \"result\" });\n }\n\n static async post(newLicense) {\n return this.api().post(\"/license\", newLicense, { dataKey: \"result\" });\n }\n\n static async remove(license) {\n return this.api().delete(\"/license/\" + license.id, {\n delete: license.id,\n dataKey: \"result\",\n });\n }\n\n static async put(updatedLicense) {\n // Let's strip the customer data\n let updatedLicenseCopy = JSON.parse(JSON.stringify(updatedLicense));\n updatedLicenseCopy.customer = null;\n return this.api().put(\n \"/license/\" + updatedLicenseCopy.id,\n updatedLicenseCopy,\n {\n dataKey: \"result\",\n }\n );\n }\n\n /**\n * Entity fields to search into\n */\n get entityFieldsToSearchInto() {\n let fields = [this.sfdcLicenseID, this.id];\n if (this.customer?.fullName) {\n fields.push(tidySearchTerm(this.customer.fullName));\n }\n return fields;\n }\n\n /**\n * Return true iff all terms correspond to the entity\n * @param {string} searchTerms terms are space separated\n */\n isEntityCorrespondingTo(searchTerms) {\n return isEntityContainsAllTerms(this.entityFieldsToSearchInto, searchTerms);\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport Site from \"@/models/Site.model\";\nimport OptionalFeatureDefinition from \"@/models/OptionalFeatureDefinition.model\";\nimport { parseISO } from \"date-fns\";\nimport { cloneDeep } from \"lodash\";\nimport { tr } from \"@/utils/translation\";\n\nexport default class OptionalFeatureActivation extends Model {\n static entity = \"optionalFeatureActivations\";\n\n static fields() {\n return {\n id: this.attr(null),\n addedAtUtc: this.attr(null),\n featureKeyName: this.attr(null),\n featureVersion: this.attr(null),\n siteId: this.attr(null),\n site: this.hasOne(Site, \"id\", \"siteId\"),\n // One to many relation to easily catch potential matching definitions\n definitions: this.hasMany(\n OptionalFeatureDefinition,\n \"featureKeyName\",\n \"featureKeyName\"\n ),\n };\n }\n\n get AddedAtUtc() {\n return this.addedAtUtc ? parseISO(this.addedAtUtc) : null;\n }\n\n // Network methods\n\n // Wrapper to easily get the feature version for a given feature key name as a promise\n // for regular users: (therapist, patient, site manager)\n static getOwnSiteFeatureVersionFor(featureKeyName) {\n function returnVersion() {\n let featureActivationForKeyName = OptionalFeatureActivation.query()\n .where((f) => f.featureKeyName === featureKeyName)\n .first();\n return featureActivationForKeyName\n ? featureActivationForKeyName.featureVersion\n : null;\n }\n\n return new Promise((resolve, reject) => {\n let featureActivationList = OptionalFeatureActivation.query().all();\n // Refreshes the list if it wasn't fetched yet\n if (!featureActivationList || !featureActivationList.length) {\n OptionalFeatureActivation.getOwnSiteFeatureActivationList()\n .then(() => {\n resolve(returnVersion());\n })\n .catch((error) => {\n reject(error);\n });\n } else {\n resolve(returnVersion());\n }\n });\n }\n\n // As a regular user (therapist, patient, site manager)\n static getOwnSiteFeatureActivationList() {\n return this.api().get(\"/optional-feature-activation/site/own\", {\n dataKey: \"result\",\n });\n }\n\n // Returns the list of all optional feature definition\n static get() {\n return this.api().get(\"/optional-feature-activation\", {\n dataKey: \"result\",\n });\n }\n\n static async post(newFeatureActivation) {\n return this.api().post(\n \"/optional-feature-activation\",\n newFeatureActivation,\n { dataKey: \"result\" }\n );\n }\n\n static async put(updatedFeature) {\n let featureClone = cloneDeep(updatedFeature);\n return OptionalFeatureActivation.remove(updatedFeature).then(() => {\n return OptionalFeatureActivation.post(featureClone);\n });\n }\n\n static async remove(feature) {\n return this.api().delete(`/optional-feature-activation/${feature.id}`, {\n delete: feature.id,\n dataKey: \"result\",\n });\n }\n\n static getFeatureAvailableVersions(featureDefinitionsForKeyName) {\n // Add default entry\n let availableVersions = {\n unset: {\n id: \"unset\",\n name: tr(\"AdminPages.OptionalFeatureActivation.noVersionActivated\"),\n },\n };\n for (let definition of featureDefinitionsForKeyName) {\n availableVersions[definition.featureVersion] = {\n id: definition.featureVersion,\n name: definition.featureVersion,\n };\n }\n return availableVersions;\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport { extractLocale } from \"@/utils/extractLocale\";\nimport { parseISO } from \"date-fns\";\nimport { isEntityContainsAllTerms, tidySearchTerm } from \"@/utils/filters\";\n\nexport default class OptionalFeatureDefinition extends Model {\n static entity = \"optionalFeatureDefinitions\";\n\n static fields() {\n return {\n id: this.attr(null),\n addedAtUtc: this.attr(null),\n version: this.attr(null),\n featureKeyName: this.attr(null),\n featureVersion: this.attr(null),\n name: this.attr(null),\n description: this.attr(null),\n };\n }\n\n get AddedAtUtc() {\n return this.addedAtUtc ? parseISO(this.addedAtUtc) : null;\n }\n\n get Name() {\n let translatedName = extractLocale(this.name);\n return translatedName || this.featureKeyName;\n }\n\n get Description() {\n return extractLocale(this.description);\n }\n\n /**\n * Returns how many times a given feature definition is used.\n * @param featureActivationList\n */\n static getDefinitionTimesUsed(definition, featureActivationList) {\n return featureActivationList.reduce((previousValue, currentActivation) => {\n if (\n currentActivation.featureKeyName === definition.featureKeyName &&\n currentActivation.featureVersion === definition.featureVersion\n ) {\n return ++previousValue;\n }\n return previousValue;\n }, 0);\n }\n\n // Network methods\n\n // Returns the list of all optional feature definition\n static get() {\n return this.api().get(\"/optional-feature-definition\", {\n dataKey: \"result\",\n });\n }\n\n static async post(newFeatureDefinition) {\n // Post the items as a list of one.\n return this.api().post(\n \"/optional-feature-definition\",\n [newFeatureDefinition],\n { dataKey: \"result\" }\n );\n }\n\n static async put(updatedFeature) {\n return this.api().put(\n `/optional-feature-definition/${updatedFeature.id}`,\n updatedFeature,\n { dataKey: \"result\" }\n );\n }\n\n static async remove(feature) {\n return this.api().delete(`/optional-feature-definition/${feature.id}`, {\n delete: feature.id,\n dataKey: \"result\",\n });\n }\n\n /**\n * Entity fields to search into\n */\n get entityFieldsToSearchInto() {\n return [\n this.id,\n this.featureKeyName,\n this.featureVersion,\n this.Name,\n this.Description,\n ];\n }\n\n /**\n * Return true iff all terms correspond to the entity\n * @param {string} searchTerms terms are space separated\n */\n isEntityCorrespondingTo(searchTerms) {\n return isEntityContainsAllTerms(this.entityFieldsToSearchInto, searchTerms);\n }\n}\n","import { Model } from \"@vuex-orm/core\";\n\nexport default class PasswordOptions extends Model {\n static entity = \"password-options\";\n\n static fields() {\n return {\n requiredLength: this.attr(0),\n requiredUpperCase: this.attr(false),\n requiredLowerCase: this.attr(false),\n requiredDigits: this.attr(0),\n };\n }\n\n hasMinimalLength(password) {\n const lengthRegExp = new RegExp(`^.{${this.requiredLength},}$`);\n return !!password.match(lengthRegExp);\n }\n\n hasNumberOfUpperCase(password) {\n const alphaCapRegExp = new RegExp(\n `[A-Z\\u0621-\\u064A]{${this.requiredUpperCase}}` //Regex for A-Z and arabic characters\n );\n return !!password.match(alphaCapRegExp);\n }\n\n hasNumberOfLowerCase(password) {\n const alphaLowRegExp = new RegExp(\n `[a-z\\u0621-\\u064A]{${this.requiredLowerCase}}` //Regex for a-z and arabic characters\n );\n return !!password.match(alphaLowRegExp);\n }\n\n hasNumberOfDigits(password) {\n const numericRegExp = new RegExp(\n `[0-9\\u0660-\\u0669\\u06F0-\\u06F9]{${this.requiredDigits}}` //Regex for latin and arabic numbers\n );\n return !!password.match(numericRegExp);\n }\n\n isPasswordValid(password) {\n return (\n this.hasMinimalLength(password) &&\n this.hasNumberOfUpperCase(password) &&\n this.hasNumberOfLowerCase(password) &&\n this.hasNumberOfDigits(password)\n );\n }\n\n /**\n * Returns the password options\n * @returns {Promise}\n */\n static async getCurrentPasswordOptions() {\n let passwordOptions = PasswordOptions.query().first();\n\n if (!passwordOptions) {\n await PasswordOptions.fetchPasswordOptions().then(() => {\n passwordOptions = PasswordOptions.query().first();\n });\n }\n\n return passwordOptions;\n }\n\n /**\n * Refreshes the password options data from back-end\n */\n static async fetchPasswordOptions() {\n return await this.api().get(\"/account/password-options\", {\n dataKey: \"result\",\n persistBy: \"create\",\n });\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport Customer from \"@/models/Customer.model\";\nimport { parseISO, formatISO9075 } from \"date-fns\";\nimport { isEntityContainsAllTerms, tidySearchTerm } from \"@/utils/filters\";\n\nexport default class PatientLicense extends Model {\n static entity = \"patientLicenses\";\n\n static fields() {\n return {\n id: this.attr(null),\n addedAtUtc: this.attr(null),\n version: this.attr(null),\n sfdcLicenseID: this.attr(null),\n customerId: this.attr(null),\n validUntil: this.attr(null),\n isActive: this.attr(false),\n canFallbackOnSiteLicense: this.attr(false),\n customer: this.belongsTo(Customer, \"customerId\"),\n };\n }\n\n set Customer(value) {\n this.customer = value;\n this.customerId = value.id;\n }\n\n get Customer() {\n return this.customer;\n }\n\n get CustomerFullHtmlName() {\n return this.customer?.fullName?.length > 0\n ? this.customer.fullNameHtml\n : \"\";\n }\n\n get IsCustomerValid() {\n return !!this.customer;\n }\n\n get ValidUntil() {\n return this.validUntil ? parseISO(this.validUntil) : null;\n }\n set ValidUntil(value) {\n this.validUntil = value ? formatISO9075(value) : null;\n }\n\n get AddedAtUtc() {\n return this.addedAtUtc ? parseISO(this.addedAtUtc) : null;\n }\n set AddedAtUtc(value) {\n this.addedAtUtc = value ? formatISO9075(value) : null;\n }\n\n static get() {\n return this.api().get(\"/patient-license\", { dataKey: \"result\" });\n }\n\n static async post(newLicense) {\n return this.api().post(\"/patient-license\", newLicense, {\n dataKey: \"result\",\n });\n }\n\n static async remove(license) {\n return this.api().delete(\"/patient-license/\" + license.id, {\n delete: license.id,\n dataKey: \"result\",\n });\n }\n\n static async put(updatedLicense) {\n // Let's strip the customer data\n let updatedLicenseCopy = JSON.parse(JSON.stringify(updatedLicense));\n updatedLicenseCopy.customer = null;\n return this.api().put(\n \"/patient-license/\" + updatedLicenseCopy.id,\n updatedLicenseCopy,\n {\n dataKey: \"result\",\n }\n );\n }\n\n /**\n * Entity fields to search into\n */\n get entityFieldsToSearchInto() {\n let fields = [this.sfdcLicenseID, this.id];\n if (this.customer?.fullName) {\n fields.push(tidySearchTerm(this.customer.fullName));\n }\n return fields;\n }\n\n /**\n * Return true iff all terms correspond to the entity\n * @param {string} searchTerms terms are space separated\n */\n isEntityCorrespondingTo(searchTerms) {\n return isEntityContainsAllTerms(this.entityFieldsToSearchInto, searchTerms);\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport Profile from \"@/models/Profile.model\";\nimport { isEntityContainsAllTerms } from \"@/utils/filters\";\nimport { formatToMMIDWithDashes } from \"@/utils/profile\";\nimport { parseISO, isWithinInterval, startOfDay, endOfDay } from \"date-fns\";\n\nclass WeeklyATTimeGoal {\n constructor(other) {\n this.validFromDate = other?.validFromDate || new Date();\n this.validToDate = other?.validToDate || new Date();\n this.patientUsername = other?.patientUsername || \"\";\n this.totalActiveTrainingTime = other?.totalActiveTrainingTime || 0;\n this.supervisedActiveTrainingTime =\n other?.supervisedActiveTrainingTime || 0;\n this.unsupervisedActiveTrainingTime =\n other?.unsupervisedActiveTrainingTime || 0;\n this.weeklyActiveTrainingTimeGoal =\n other?.weeklyActiveTrainingTimeGoal || 0;\n this.isGoalSet = other?.isGoalSet || false;\n this.daysTrained = other?.daysTrained || 0;\n }\n}\n\nexport default class PatientSessionSummary extends Model {\n static entity = \"patientsessionsummaries\";\n static primaryKey = \"userName\";\n\n static fields() {\n return {\n id: this.attr(null),\n userName: this.attr(null),\n firstName: this.attr(null),\n lastName: this.attr(null),\n therapistId: this.attr(null),\n isArchived: this.attr(false),\n isAccountDeactivated: this.attr(false),\n lastSessionDate: this.attr(null),\n email: this.attr(\"email\"),\n MMID: this.attr(null),\n patientSiteId: this.attr(null),\n referenceId: this.attr(null),\n lastWeekActiveTrainingTime: this.attr(null),\n adherence: this.attr(null),\n quality: this.attr(null),\n quantity: this.attr(null),\n weeklyActiveTrainingTimeGoals: this.attr([]),\n therapist: this.belongsTo(Profile, \"therapistId\"),\n patient: this.belongsTo(Profile, \"userName\", \"userName\"),\n };\n }\n\n // Return the weekly ATT goal to display among the weeklyActiveTrainingTimeGoals,\n // according to the current \"browser\" date\n get currentGoal() {\n return (\n this.weeklyActiveTrainingTimeGoals?.find((g) =>\n isWithinInterval(new Date(), {\n start: startOfDay(parseISO(g.validFromDate)),\n end: endOfDay(parseISO(g.validToDate)),\n })\n ) || new WeeklyATTimeGoal()\n );\n }\n\n get fullName() {\n if (!this.firstName && !this.lastName) {\n return null;\n }\n if (!this.firstName) {\n return this.lastName;\n }\n if (!this.lastName) {\n return this.firstName;\n }\n return this.firstName + \" \" + this.lastName;\n }\n\n /**\n * Obtains patient summary data\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static get(signal) {\n return this.api().get(\"/session/concise\", {\n dataKey: \"result\",\n signal,\n });\n }\n\n /**\n * Return true iff all terms correspond to the entity\n * @param {string} searchTerms terms are space separated\n */\n isEntityCorrespondingTo(searchTerms) {\n const entityFieldsToSearchInto = [\n this.firstName,\n this.lastName,\n this.patientSiteId,\n this.MMID,\n formatToMMIDWithDashes(this.MMID),\n this.email,\n ];\n\n return isEntityContainsAllTerms(entityFieldsToSearchInto, searchTerms);\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport { parseISO } from \"date-fns\";\nimport { getFormattedActiveSide } from \"@/utils/activeSide\";\n\nexport default class PerformanceActivityPlanningAndTraining extends Model {\n static entity = \"performanceactivityplanningandtrainings\";\n\n static fields() {\n return {\n appId: this.attr(null),\n date: this.attr(null),\n level: this.attr(null),\n activeSide: this.attr(null),\n trainedFunctions: this.attr([]),\n plannedSeconds: this.attr(null),\n activeTrainingTime: this.attr(null),\n extraTrainingTime: this.attr(null),\n trainingTimeAccordingToPlan: this.attr(null),\n };\n }\n\n get Date() {\n return this.date ? parseISO(this.date) : null;\n }\n\n get ActiveSide() {\n return getFormattedActiveSide(this.activeSide);\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport { parseISO } from \"date-fns\";\nimport { getFormattedActiveSide } from \"@/utils/activeSide\";\nimport { SessionSupervisionTypeKeys } from \"@/utils/performance\";\nimport Store from \"@/store\";\nimport ActivityDescription from \"@/models/ActivityDescription.model\";\nimport gestureProviderIdToMovementId from \"@/models/utils\";\nimport DateTimeOffset from \"@/models/DateTimeOffset.model\";\nimport { SessionSupervisionMode } from \"@/models/SessionReport.model\";\nexport default class PerformanceActivityResult extends Model {\n static entity = \"performanceactivityresults\";\n static primaryKey = \"cloudId\"; // Sets the primary key\n\n static fields() {\n return {\n cloudId: this.attr(null), // Primary key\n id: this.attr(null),\n appId: this.attr(null),\n score: this.attr(null),\n date: this.attr(null),\n started: this.attr(null),\n startOffset: this.attr(null),\n ended: this.attr(null),\n endOffset: this.attr(null),\n activeTrainingTime: this.attr(null),\n compensationDuration: this.attr(null),\n compensationFeedbackResults: this.attr(null),\n gestureProviderResults: this.attr([]),\n level: this.attr(null),\n duration: this.attr(null),\n activeSide: this.attr(null),\n activityName: this.attr(null),\n supervisionMode: this.attr(null),\n therapistUsername: this.attr(null),\n trainedFunctions: this.attr([]),\n // Relation to other data,\n // See ActivityDescription() for what is used as a lazy loader of this data\n activityDescription: this.hasOne(ActivityDescription, \"appId\"),\n };\n }\n\n get Date() {\n return this.date ? parseISO(this.date) : null;\n }\n\n get Started() {\n return this.started ? parseISO(this.started) : null;\n }\n\n get Ended() {\n return this.ended ? parseISO(this.ended) : null;\n }\n\n get StartOffset() {\n return this.startOffset ? new DateTimeOffset(this.startOffset) : null;\n }\n\n get EndOffset() {\n return this.endOffset ? new DateTimeOffset(this.endOffset) : null;\n }\n\n get SessionType() {\n let username = Store.getters[\"Auth/username\"];\n if (username && this.therapistUsername === username) {\n return this.supervisionMode === SessionSupervisionMode.Unsupervised\n ? SessionSupervisionTypeKeys.Unsupervised\n : SessionSupervisionTypeKeys.SupervisedBySelf;\n }\n\n return this.supervisionMode === SessionSupervisionMode.Unsupervised\n ? SessionSupervisionTypeKeys.Unsupervised\n : SessionSupervisionTypeKeys.Supervised;\n }\n\n get ActiveSide() {\n return getFormattedActiveSide(this.activeSide);\n }\n\n /**\n * Used to lazy load the activity description only if needed.\n */\n get ActivityDescription() {\n // Cache the data for performance efficiency purposes\n if (!this.activityDescription) {\n this.activityDescription = ActivityDescription.query().find(this.appId);\n }\n return this.activityDescription;\n }\n\n /**\n * Provides gesture provider results and build the minimum data set if nothing available\n * This permits to get data for activity with some missing results.\n */\n fixupGestureProviderResults() {\n if (\n this.gestureProviderResults !== null &&\n this.gestureProviderResults.length > 0\n ) {\n return this.gestureProviderResults;\n }\n // Constructs minimal dataset for quantity parsing\n let minimalResults = [];\n for (let movementId of this.MovementIds) {\n minimalResults.push({\n gestureProviderId: movementId,\n side: this.ActiveSide,\n normalizedMovement: 0,\n });\n }\n this.gestureProviderResults = minimalResults;\n\n return this.gestureProviderResults;\n }\n\n /**\n * Provides the overall movement sides found in the gesture provider results\n */\n get AllMovementSides() {\n // NOTICE: We, for now, don't follow the gesture provider side\n // but the activity trained side\n // Hence the code has been adapted to consider the available sides\n // to only be the activity trained side.\n return [this.ActiveSide];\n\n if (\n this.gestureProviderResults === null ||\n this.gestureProviderResults.length === 0\n ) {\n return [];\n }\n\n return this.gestureProviderResults.reduce((acc, value) => {\n let movementSide = getFormattedActiveSide(value.side);\n if (!acc.some((e) => e === movementSide)) {\n acc.push(movementSide);\n }\n return acc;\n }, []);\n }\n\n /**\n * Provides the movement sides for the given movementId, found in activity's detailed movements (without duplicates)\n * N.B.: This is side of the movement, not the training side of the activity\n * @return {*[]}\n */\n getMovementSides(movementId) {\n if (!this.ActivityDescription) {\n return [];\n }\n\n return this.ActivityDescription.detailedMovements.reduce((acc, value) => {\n //get trained sides from trained activity detailed movements.\n let movementSide = this.ActiveSide;\n if (\n value &&\n (movementId === \"All\" || movementId === value) &&\n !acc.some((e) => e === movementSide)\n ) {\n acc.push(movementSide);\n }\n return acc;\n }, []);\n }\n\n /**\n * Provides the detailed movement ids array if available,\n * and then on the global movement id as a fallback.\n */\n get MovementIds() {\n if (this.DetailedMovementIds.length > 0) {\n return this.DetailedMovementIds;\n }\n\n if (this.GlobalMovementId) {\n return [this.GlobalMovementId];\n }\n\n return [];\n }\n\n /**\n * Provides the activity global movement Id\n */\n get GlobalMovementId() {\n return this.ActivityDescription?.globalMovementId || \"\";\n }\n\n /**\n * Returns the detailed movement ids from the activity\n */\n get DetailedMovementIds() {\n return this.ActivityDescription?.detailedMovements || [];\n }\n\n /**\n * Returns the normalized movement for the given movement type\n * @param movementId\n * @return {number|*}\n */\n getStandardizedMovementUnits(movementId, movementSide) {\n if (\n !this.gestureProviderResults ||\n this.gestureProviderResults.length === 0 ||\n !movementId\n ) {\n return 0;\n }\n\n return this.gestureProviderResults.reduce((acc, value) => {\n let currentMovementId = gestureProviderIdToMovementId(\n value.gestureProviderId\n );\n\n // NOTICE: We, for now, don't follow the gesture provider side\n // but the activity trained side\n // Hence the code has been adapted to consider the available sides\n // to only be the activity trained side.\n let currentSide = this.ActiveSide;\n movementSide = \"All\"; // The side is forcefully the one from the activity for now\n\n if (\n (currentMovementId !== movementId && movementId !== \"All\") ||\n (currentSide !== movementSide && movementSide !== \"All\") ||\n value.normalizedMovement == null\n ) {\n return acc;\n }\n return acc + parseFloat(value.normalizedMovement.toFixed(2));\n }, 0);\n }\n\n get TotalStandardizedMovementUnits() {\n if (\n this.gestureProviderResults !== null &&\n this.gestureProviderResults.length > 0\n ) {\n return this.gestureProviderResults.reduce((acc, value) => {\n if (value.normalizedMovement == null) {\n return acc;\n }\n return acc + value.normalizedMovement;\n }, 0);\n }\n return 0;\n }\n\n /**\n * Indicates whether the activity results has some valid compensation details.\n * It also returns false when the compensation feedback result is 'Legacy'\n * @return {boolean}\n */\n get HasCompensationDetails() {\n if (this.compensationDuration === null) {\n return false;\n }\n\n if (this.compensationFeedbackResults === null) {\n return false;\n }\n\n // Do not consider legacy feedback results\n if (\n this.compensationFeedbackResults.some((result) => result.id === \"Legacy\")\n ) {\n return false;\n }\n\n // Returns then whether some details are provided\n return this.compensationFeedbackResults.some((result) => {\n if (result.details === null || result.details.length === 0) {\n return false;\n }\n\n return result.details.some((detail) => detail.duration !== null);\n });\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport { isAfter, parseISO } from \"date-fns\";\nimport Profile from \"@/models/Profile.model\";\nimport { notifyError } from \"@/services/api\";\n\nexport const PersonalAccessTokenStatuses = Object.freeze({\n Active: \"active\",\n Revoked: \"revoked\",\n Expired: \"expired\",\n});\n\nexport default class PersonalAccessToken extends Model {\n static entity = \"personalAccessToken\";\n\n static fields() {\n return {\n id: this.attr(null),\n name: this.attr(null),\n secretToken: this.attr(null),\n addedAtUtc: this.attr(null),\n expiryDate: this.attr(null),\n revocationDate: this.attr(null),\n userName: this.hasOne(Profile, \"userName\"),\n };\n }\n\n get Status() {\n return this.revocationDate\n ? PersonalAccessTokenStatuses.Revoked\n : isAfter(parseISO(this.expiryDate), new Date())\n ? PersonalAccessTokenStatuses.Active\n : PersonalAccessTokenStatuses.Expired;\n }\n\n // Network functions\n\n static get(signal) {\n return this.api().get(\"/personal-access-token\", {\n dataKey: \"result\",\n signal,\n });\n }\n\n static async post(newPersonalAccessToken) {\n return await this.api()\n .post(\"/personal-access-token\", newPersonalAccessToken, {\n dataKey: \"result\",\n })\n .then((result) => result.response.data.result);\n }\n\n static async revoke(patId) {\n return await this.api().post(`/personal-access-token/revoke/${patId}`, {\n dataKey: \"result\",\n });\n }\n}\n","import { Model } from \"@vuex-orm/core\";\n\nexport const RECENT_PATIENTS = \"recentPatients\"; // key for personal settings\nexport const MAX_RECENT_PATIENTS = 6; // Max number of recent patients, add 1 to the desired number\n\nexport default class PersonalSettings extends Model {\n static entity = \"personalSettings\";\n static primaryKey = \"key\";\n\n static fields() {\n return {\n key: this.attr(null),\n settings: this.attr({}),\n };\n }\n\n /**\n * Get personal settings by key\n * @param {string} key personal settings key (ex: PatientList)\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async getPersonalSettings(key, signal) {\n return await this.api().get(`personal-settings/${key}`, {\n dataKey: \"result\",\n signal,\n });\n }\n\n /**\n * Update the given personal setting\n * @param {string} key personal settings key (ex: PatientList)\n * @param {object} settings the settings\n */\n static async updatePersonalSettings(key, settings) {\n let personalSettings = {\n key: key,\n settings: settings,\n };\n return await this.api().put(`personal-settings`, personalSettings, {\n dataKey: \"result\",\n });\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport Site from \"@/models/Site.model\";\nimport store from \"@/store\";\nimport { buildNameFromFirstAndLastName } from \"@/utils/profile\";\nimport { deserializeConsent } from \"@/utils/signedDocuments\";\nimport { isEntityContainsAllTerms, tidySearchTerm } from \"@/utils/filters\";\nimport { defaultLocale } from \"@/utils/locales\";\nimport {\n THERAPIST_ROLE,\n SITEMANAGER_ROLE,\n ADMIN_ROLE,\n DPO_ROLE,\n PATIENT_ROLE,\n} from \"@/services/auth.js\";\nimport { tr } from \"@/utils/translation\";\n\nfunction queryableEndpoints() {\n const isAdmin = store.getters[\"Auth/isAdmin\"];\n const isSuperAdmin = store.getters[\"Auth/isSuperAdmin\"];\n const isDPO = store.getters[\"Auth/isDPO\"];\n const isAdminManagerAdmin = store.getters[\"Auth/isAdminManagerAdmin\"];\n const isSiteManager = store.getters[\"Auth/isSiteManager\"];\n const isSuperTherapist = store.getters[\"Auth/isSuperTherapist\"];\n const isTherapist = store.getters[\"Auth/isTherapist\"];\n\n let endpoints = [];\n if (isSuperAdmin || isDPO || isAdminManagerAdmin) {\n endpoints.push(\"/profile/admin\");\n }\n if (isSuperAdmin || isDPO) {\n endpoints.push(\"/profile/dpoadmin\");\n }\n if (isDPO || isAdmin || isSuperAdmin || isSiteManager || isSuperTherapist) {\n endpoints.push(\"/profile/sitemanager\");\n }\n if (isDPO || isAdmin || isSuperAdmin || isTherapist || isSiteManager) {\n endpoints.push(\"/profile/therapist\");\n }\n if (isSuperAdmin || isDPO || isTherapist) {\n endpoints.push(\"/profile/patient\");\n }\n return endpoints;\n}\n\nexport default class Profile extends Model {\n static entity = \"profiles\";\n static primaryKey = \"userName\";\n\n static fields() {\n return {\n id: this.attr(null),\n userName: this.attr(null),\n firstName: this.attr(null),\n lastName: this.attr(null),\n email: this.attr(null),\n roles: this.attr([]),\n competences: this.attr([]),\n isSuperTherapist: this.attr(false),\n phoneNumber: this.attr(null),\n gender: this.attr(null),\n birthDate: this.attr(null),\n therapistId: this.attr(null),\n patientSiteId: this.attr(null),\n archivedAtUtc: this.attr(null),\n isArchived: this.attr(false),\n isAccountDeactivated: this.attr(false),\n passwordChangeRequired: this.attr(null),\n MMID: this.attr(null),\n emailConfirmed: this.attr(false),\n isAMindMotionPatient: this.attr(false),\n siteId: this.attr(null),\n referenceId: this.attr(null),\n condition: this.attr(null),\n leftHandImpairment: this.attr(null),\n rightHandImpairment: this.attr(null),\n additionalConditionInformation: this.attr(null),\n language: this.attr(defaultLocale),\n isEULASignatureRequired: this.attr(false),\n isPrivacyPolicySignatureRequired: this.attr(false),\n isConsentFormSignatureRequired: this.attr(false),\n enforceSAMLLogin: this.attr(false),\n samlLoginId: this.attr(null),\n signedDocuments: this.attr([]),\n site: this.belongsTo(Site, \"sideId\"),\n therapist: this.belongsTo(Profile, \"therapistId\"),\n lastDismissedCustomerNotificationVersion: this.attr(\"0.0.0\"),\n timeZoneId: this.attr(null),\n };\n }\n\n static mutators() {\n return {\n // Handle depreciated DB values by ensuring the key to start with lowercase letter\n condition(value) {\n let key = null;\n if (value) {\n key =\n value.trim().charAt(0).toLowerCase() + value.trim().substring(1);\n if (key.includes(\"parkinson\")) {\n key = \"parkinsonDisease\";\n }\n }\n return key;\n },\n };\n }\n\n /**\n * Displays a proper displayed name depending on the available profile data\n */\n get displayedName() {\n if (this.fullName?.length) {\n return this.fullName;\n } else if (this.isPatient && this.patientSiteId?.trim().length) {\n return this.patientSiteId;\n } else if (this.email) {\n return this.email;\n } else {\n // Gives the role\n return tr(\"Common.Profile.Roles.\" + this.roles[0]);\n }\n }\n\n /**\n * Displays name with initial of firstname and then lastname (with fallback on displayedName)\n * ex: F. Lastname\n */\n get shortName() {\n if (this.firstName?.trim().length && this.lastName?.trim().length) {\n return this.initialOfFirstNameAndLastName;\n }\n return this.displayedName;\n }\n\n /**\n * @returns email if exists, otherwise returns username\n * this is needed for authentication sorting\n */\n get authenticationName() {\n return this.email ? this.email : this.userName;\n }\n\n get fullName() {\n return buildNameFromFirstAndLastName(this.firstName, this.lastName);\n }\n\n get fullNameHtml() {\n return buildNameFromFirstAndLastName(this.firstName, this.lastName, true);\n }\n\n get initialOfFirstNameAndLastName() {\n if (!this.firstName?.trim().length || !this.lastName?.trim().length) {\n return null;\n }\n return `${this.firstName[0]}. ${this.lastName}`;\n }\n\n get use12HourTimeFormat() {\n return this.language === defaultLocale;\n }\n\n get consents() {\n return deserializeConsent(this.signedDocuments);\n }\n\n get role() {\n return this.roles?.[0] || \"\";\n }\n\n // Fetch API\n static get() {\n return Promise.all(\n queryableEndpoints().map(\n async (endpoint) =>\n await this.api().get(endpoint, { dataKey: \"result\" })\n )\n );\n }\n\n static getById(id) {\n return this.api().get(\"/profile/id/\" + id, { dataKey: \"result\" });\n }\n\n /**\n * Fetch my profile from companion.\n */\n static async fetchMyProfile() {\n return await this.api().get(\"/profile\", { dataKey: \"result\" });\n }\n\n /**\n * Returns all patient profiles from the current user site\n * @param {AbortSignal} signal Permits request cancellation support\n * @param {boolean} showOnlyUnarchived Optionally returns only unarchived users (true by default)\n * @param {boolean} showOnlyArchived Optionally returns only archived users (false by default)\n * @param {boolean} saveResponse Whether to store the response in the store\n * See: https://vuex-orm.github.io/plugin-axios/guide/configurations.html#available-options\n */\n static async getPatients(\n signal = null,\n showOnlyUnarchived = true,\n showOnlyArchived = false,\n saveResponse = true\n ) {\n const url = `profile/patient?showOnlyUnarchived=${showOnlyUnarchived}&showOnlyArchived=${showOnlyArchived}`;\n return await this.api().get(url, {\n dataKey: \"result\",\n save: saveResponse,\n signal,\n });\n }\n\n /**\n * Returns all therapist profiles from the current user site\n * @param {AbortSignal} signal Permits request cancellation support\n * @param {boolean} showOnlyUnarchived Optionally returns only unarchived users (true by default)\n * @param {boolean} showOnlyArchived Optionally returns only archived users (false by default)\n */\n static async getTherapists(\n signal = null,\n showOnlyUnarchived = true,\n showOnlyArchived = false\n ) {\n const url = `profile/therapist?showOnlyUnarchived=${showOnlyUnarchived}&showOnlyArchived=${showOnlyArchived}`;\n return await this.api().get(url, {\n dataKey: \"result\",\n signal,\n });\n }\n\n /**\n * Returns all site manager profiles from the current user site\n * @param {AbortSignal} signal Permits request cancellation support\n * @param {boolean} showOnlyUnarchived Optionally returns only unarchived users (true by default)\n * @param {boolean} showOnlyArchived Optionally returns only archived users (false by default)\n */\n static async getSiteManagers(\n signal,\n showOnlyUnarchived = true,\n showOnlyArchived = false\n ) {\n const url = `profile/sitemanager?showOnlyUnarchived=${showOnlyUnarchived}&showOnlyArchived=${showOnlyArchived}`;\n return await this.api().get(url, {\n dataKey: \"result\",\n signal,\n });\n }\n\n static async post(newProfile) {\n return this.api().post(roleCreationMap[newProfile.roles[0]], newProfile, {\n dataKey: \"result\",\n });\n }\n\n static async remove(profile) {\n return this.api().delete(roleDeleteMap[profile.roles[0]] + profile.id, {\n delete: profile.userName,\n dataKey: \"result\",\n });\n }\n\n /**\n * Bulk update a profile property\n * Only supports 'isAccountDeactivated', 'isArchived'\n * @param profileUsernames {Array} Array of profile usernames\n * @param propertyToUpdate {string}\n * @param newValue {boolean}\n */\n static async bulkUpdateProfiles(\n profileUsernames,\n propertyToUpdate,\n newValue\n ) {\n const url = `profile/bulk-edit-property/${propertyToUpdate}/${newValue}`;\n\n try {\n const response = await this.api().post(url, profileUsernames, {\n dataKey: \"result\",\n persistBy: \"insert\", // More performant than 'update' or default 'insertOrUpdate'\n });\n return Promise.resolve(response);\n } catch (error) {\n return Promise.reject(error);\n }\n }\n\n static async put(updatedProfile) {\n return this.api().put(\n roleEditMap[updatedProfile.roles[0]],\n updatedProfile,\n {\n dataKey: \"result\",\n }\n );\n }\n\n // Returns all patients for a given therapist id.\n static async getPatientCountByTherapistId(therapistId, signal) {\n return await this.api()\n .get(`profile/therapist/${therapistId}/patient/count`, {\n signal,\n })\n .then((result) => result.response.data.result);\n }\n\n static async transferAllPatientsFromTherapistToAnother(\n fromTherapistId,\n toTherapistId\n ) {\n return this.api().request({\n method: \"post\",\n url: `profile/transfer/patients-to-therapist/?fromTherapistId=${fromTherapistId}&toTherapistId=${toTherapistId}`,\n });\n }\n\n static async promote(profile) {\n return this.api().request({\n method: \"post\",\n url: `profile/sitemanager/promote/${profile.userName}`,\n dataKey: \"result\",\n });\n }\n\n /*\n * Service methods extracted\n */\n\n static async addTherapist(therapist) {\n return this.parseSingleProfileFromRequest(\n this.api().post(\"account/therapist\", therapist, {\n dataKey: \"result\",\n })\n );\n }\n\n static async addSiteManager(siteManager) {\n return this.parseSingleProfileFromRequest(\n this.api().post(\"account/sitemanager\", siteManager, {\n dataKey: \"result\",\n })\n );\n }\n\n /**\n * Update a therapist\n * @param {object} data The therapist data\n */\n static async updateTherapist(therapist) {\n return this.parseSingleProfileFromRequest(\n this.api().put(\"profile/therapist\", therapist, {\n dataKey: \"result\",\n })\n );\n }\n\n /**\n * Update a sitemanager\n * @param {object} data The sitemanager data\n */\n static async updateSiteManager(siteManager) {\n return this.parseSingleProfileFromRequest(\n this.api().put(\"profile/sitemanager\", siteManager, {\n dataKey: \"result\",\n })\n );\n }\n\n /**\n * Update current user\n * @param {object} data the new data of the current user\n */\n static async updateSelf(profile) {\n return this.parseSingleProfileFromRequest(\n this.api().put(\"profile\", profile, { dataKey: \"result\" })\n );\n }\n\n /**\n * Add a patient\n * @param {object} data The patient data\n */\n static async addPatient(profile, sendPasswordEmail = true) {\n return this.parseSingleProfileFromRequest(\n this.api().post(\n `account/patient?sendPasswordEmail=${sendPasswordEmail}`,\n profile,\n { dataKey: \"result\" }\n )\n );\n }\n\n /**\n * Update a patient\n * @param {object} data The patient data\n */\n static async updatePatient(profile) {\n return this.parseSingleProfileFromRequest(\n this.api().put(\"profile/patient\", profile, { dataKey: \"result\" })\n );\n }\n\n /**\n * Get the userprofile from the username\n * @param {string} username The username\n */\n static async getProfileFromUsername(username, signal) {\n return await this.parseSingleProfileFromRequest(\n this.api().get(`profile/${username}`, {\n dataKey: \"result\",\n signal,\n })\n );\n }\n\n /**\n * Get therapist from patient username\n * @param {string} userName The patient username\n */\n static async getTherapistFromPatient(userName) {\n return this.parseSingleProfileFromRequest(\n this.api().get(`profile/patient/${userName}/therapist`, {\n dataKey: \"result\",\n })\n );\n }\n\n /**\n * Get the userprofile from a therapy by username\n * @param {string} userName The username\n */\n static async getTherapistProfileFromUserName(userName) {\n return this.parseSingleProfileFromRequest(\n this.api().get(`profile/therapist/${userName}`, {\n dataKey: \"result\",\n })\n );\n }\n\n /**\n * Set the access for a patient\n * @param {string} userName The username from the patient\n * @param {string} email The new email\n * @param {string} password The new password\n */\n static async addAccessToPatient(username, email, password) {\n return this.parseSingleProfileFromRequest(\n this.api().post(\n `account/patient/add-access`,\n {\n userName: username,\n email: email,\n password: password,\n },\n {\n dataKey: \"result\",\n }\n )\n );\n }\n\n static async parseSingleProfileFromRequest(apiRequest) {\n return apiRequest.then((result) => {\n const profile = result.entities.profiles[0];\n return profile;\n });\n }\n\n isAdministrator() {\n return this.roles.includes(ADMIN_ROLE);\n }\n isPatient() {\n return this.roles.includes(PATIENT_ROLE);\n }\n isTherapist() {\n return this.roles.includes(THERAPIST_ROLE);\n }\n isDpo() {\n return this.roles.includes(DPO_ROLE);\n }\n isSiteManager() {\n return this.roles.includes(SITEMANAGER_ROLE);\n }\n isTherapistAdmin() {\n return this.isTherapist() && this.isSuperTherapist;\n }\n isMindMotionUser() {\n return this.isTherapist() || this.isSiteManager() || this.isPatient();\n }\n\n /**\n * Entity fields to search into\n */\n get entityFieldsToSearchInto() {\n return [\n tidySearchTerm(this.fullName),\n this.patientSiteId,\n this.MMID,\n this.email,\n this.therapistId,\n this.userName,\n ];\n }\n\n /**\n * Return true iff all terms correspond to the entity\n * @param {string} searchTerms terms are space separated\n */\n isEntityCorrespondingTo(searchTerms) {\n return isEntityContainsAllTerms(this.entityFieldsToSearchInto, searchTerms);\n }\n}\n\nconst roleCreationMap = {\n site: \"account/sitemanager\",\n therapist: \"account/therapist\",\n admin: \"account/admin\",\n dpoadmin: \"account/dpoadmin\",\n patient: \"account/patient\",\n};\n\nconst roleEditMap = {\n site: \"profile/sitemanager/\",\n therapist: \"profile/therapist/\",\n admin: \"profile/admin/\",\n dpoadmin: \"profile/dpoadmin/\",\n patient: \"profile/patient/\",\n};\n\nconst roleDeleteMap = {\n site: \"account/sitemanager/\",\n therapist: \"account/therapist/\",\n admin: \"account/admin/\",\n dpoadmin: \"account/dpoadmin/\",\n patient: \"account/patient/\",\n};\n","import { parseISO } from \"date-fns\";\n\nexport default class ProgramNote {\n constructor(note) {\n if (note) {\n this.text = note.text;\n this.lastEditDate = note.lastEditDate;\n this.firstname = note.firstname;\n this.lastname = note.lastname;\n } else {\n this.text = \"\";\n this.lastEditDate = null;\n this.firstname = null;\n this.lastname = null;\n }\n }\n\n get LastEditDate() {\n return parseISO(this.lastEditDate);\n }\n}\n","import ProgramNote from \"@/models/ProgramNote.model\";\nimport ProgramActivity from \"@/models/ProgramActivity.model\";\nimport { getAdaptiveTranslatedTimeFromSeconds } from \"@/utils/duration\";\nimport { generateUUID } from \"@/utils/profile\";\nimport ActivityDescription from \"@/models/ActivityDescription.model\";\n\nexport default class Program {\n constructor(program) {\n this.id = program.id || generateUUID();\n this.label = program.label || null;\n this.description = program.description || null;\n this.patientUserName = program.patientUserName;\n this.notes = new ProgramNote(program.notes);\n this.suitableForGroupTherapy = program.suitableForGroupTherapy || false;\n this.suitableForRemoteTherapy = program.suitableForRemoteTherapy || false;\n this.suitableForFreeplay = program.suitableForFreeplay || false;\n this.fromPresetId = program.fromPresetId || null;\n this.activities = program.activities\n ? program.activities.map(\n (activity) =>\n new ProgramActivity(\n activity,\n this.getActivityDescription(activity.activityId)\n )\n )\n : [];\n this.displayedColor = program.displayedColor || [\"\", \"\"]; // Default program color classes, updated by the therapy plan\n }\n\n getActivityDescription(activityId) {\n return ActivityDescription.query().find(activityId);\n }\n\n setProgramMetadata(programMetadata) {\n this.label = programMetadata.label;\n this.description = programMetadata.description;\n this.suitableForGroupTherapy = programMetadata.suitableForGroupTherapy;\n this.suitableForRemoteTherapy = programMetadata.suitableForRemoteTherapy;\n this.suitableForFreeplay = programMetadata.suitableForFreeplay;\n this.notes = new ProgramNote(programMetadata.notes);\n }\n\n /**\n * Getters\n */\n\n isCalibrationMissing(allActivities) {\n return this.activities.some((activity) => {\n return activity.isCalibrationMissing(allActivities);\n });\n }\n\n activityCount(allActivities) {\n let activitiesToCount = [];\n // Count only licensed activity if activity info is provided.\n if (allActivities?.length > 0) {\n activitiesToCount = this.activities.filter((act) => {\n const activityInfo = allActivities.find((a) => act.activityId === a.id);\n return activityInfo && activityInfo.isLicensedForUser;\n });\n }\n\n return activitiesToCount.length || 0;\n }\n\n // Returns the unlicensed activities from the activity list, default to returning none\n unlicensedActivities(activityDescription) {\n let unlicensedActivities = [];\n if (!activityDescription || !activityDescription.length) {\n return unlicensedActivities;\n }\n unlicensedActivities = this.activities.filter((act) => {\n let activityInfo = activityDescription.find(\n (a) => act.activityId === a.id\n );\n return activityInfo?.isLicensedForUser === false || false;\n });\n return unlicensedActivities;\n }\n\n programDuration(allActivities) {\n let total = this.activities.reduce((accumulator, activity) => {\n let countActivity = true;\n // Count only licensed activity if the information is available.\n if (allActivities.length) {\n let activityInfo = allActivities.find(\n (a) => activity.activityId === a.id\n );\n countActivity = activityInfo && activityInfo.isLicensedForUser;\n }\n return countActivity\n ? accumulator + activity.activitySettings.duration\n : accumulator;\n }, 0);\n return getAdaptiveTranslatedTimeFromSeconds(total, true);\n }\n\n containsActivitiesWithEstimatedDuration() {\n return this.activities.some((a) => a.hasEstimatedDuration);\n }\n\n get HasDisplayedColorsSet() {\n return (\n Array.isArray(this.displayedColor) &&\n this.displayedColor.length === 2 &&\n this.displayedColor[0] !== \"\"\n );\n }\n\n get ProgramBgColor() {\n return `bg-${this.displayedColor[0]}`;\n }\n\n get ProgramHoverColor() {\n return `bg-${this.displayedColor[1]}`;\n }\n\n get ProgramBorderColor() {\n return `border-${this.displayedColor[0]}`;\n }\n}\n","import { cloneDeep } from \"lodash\";\nimport { generateUUID } from \"@/utils/profile\";\n\n/**\n * Activity supported dosage kinds\n */\nconst DosageKinds = Object.freeze({\n Duration: \"Duration\",\n Logic: \"Logic\",\n});\n\nexport const ActivitySideShort = Object.freeze({\n Left: \"L\",\n Right: \"R\",\n});\n\n/**\n * Default activity values, used as fallback\n */\nconst defaultProgramActivityValues = {\n // Estimated duration for logic based activities.\n defaultEstimatedDuration: 120,\n defaultActivitySettings: {\n level: 1,\n duration: 30,\n side: ActivitySideShort.Left,\n allowSelfCalibration: false,\n useAutoLevel: false,\n },\n};\n\nexport default class ProgramActivity {\n /**\n * Creates a new program activity from provided data.\n * @param programActivity\n * @param activityDescription Used to setup certain parameters\n * with better default if provided\n */\n constructor(programActivity, activityDescription = undefined) {\n if (!programActivity) {\n programActivity = {};\n }\n\n this.uuid = programActivity.uuid || generateUUID();\n this.activityId = programActivity.activityId || \"\";\n this.activitySettings = programActivity.activitySettings\n ? cloneDeep(programActivity.activitySettings)\n : cloneDeep(defaultProgramActivityValues.defaultActivitySettings);\n this.hasEstimatedDuration = programActivity.hasEstimatedDuration || false;\n\n if (activityDescription) {\n // Fixup the logic based program activity duration if description is provided\n let activityDosageKind =\n activityDescription.activityOptions?.dosage?.kind;\n if (activityDosageKind === DosageKinds.Logic) {\n // Set the newly created activity duration to the estimated one when provided\n let estimatedDuration =\n activityDescription.activityOptions.dosage.estimatedDuration ||\n defaultProgramActivityValues.defaultEstimatedDuration;\n this.activitySettings.duration = estimatedDuration;\n this.hasEstimatedDuration = true;\n }\n }\n }\n\n static fromActivityDescription(activityDescription) {\n let activitySettings = cloneDeep(\n defaultProgramActivityValues.defaultActivitySettings\n );\n\n let activityDosageKind = activityDescription?.activityOptions?.dosage?.kind;\n if (activityDosageKind === DosageKinds.Duration) {\n // Set the newly created activity duration to the minimum specified in description.\n let duration = activityDescription?.activityOptions?.dosage?.min;\n if (duration > 0) {\n activitySettings.duration = duration;\n }\n }\n\n const programActivityData = {\n activityId: activityDescription.id,\n activitySettings: activitySettings,\n };\n return new ProgramActivity(programActivityData, activityDescription);\n }\n\n isCalibrationMissing(activityDescriptionList) {\n let activityDescription = activityDescriptionList.find(\n (a) => a.id === this.activityId\n );\n if (\n activityDescription &&\n activityDescription.gestureProviders.length > 0 &&\n activityDescription.patientUsage\n ) {\n return (\n !activityDescription.patientUsage.hasValidCalibration(\n this.activitySettings.side\n ) && !this.activitySettings.allowSelfCalibration\n );\n } else {\n return false;\n }\n }\n\n hasActivityDescription(activityDescriptionList) {\n return (\n activityDescriptionList.findIndex((a) => a.id === this.activityId) !== -1\n );\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport { userRootLocale } from \"@/models/utils\";\nimport Program from \"@/models/Program.model\";\nimport Store from \"@/store\";\nimport { parseISO } from \"date-fns\";\nimport { defaultLanguage } from \"@/utils/locales\";\n\nexport class ProgramPreset extends Model {\n static entity = \"programpresets\";\n\n static fields() {\n return {\n id: this.attr(null),\n program: this.attr(null, (value) => new Program(value)),\n metadata: this.attr(null, (value) => new ProgramPresetMetadata(value)),\n username: this.attr(\"\"),\n createdBy: this.attr(\"\"),\n modifiedBy: this.attr(\"\"),\n createdAtUTC: this.attr(null),\n modifiedAtUTC: this.attr(null),\n positionIndex: this.attr(0),\n };\n }\n\n get ModifiedAtUTC() {\n return this.modifiedAtUTC ? parseISO(this.modifiedAtUTC) : null;\n }\n\n get IsTherapistPreset() {\n let currentUsername = Store.getters[\"Auth/username\"];\n return this.username === currentUsername;\n }\n\n static fromConvertToPresetData(presetData) {\n let currentUsername = Store.getters[\"Auth/username\"];\n let preset = {\n username: currentUsername,\n createdBy: currentUsername,\n modifiedBy: currentUsername,\n program: new Program(presetData.program),\n metadata: new ProgramPresetMetadata({}),\n };\n\n let language = userRootLocale() || defaultLanguage;\n preset.metadata.title[language] = presetData.title;\n preset.metadata.title[defaultLanguage] = presetData.title;\n preset.metadata.importedTitle[language] = presetData.title;\n preset.metadata.importedTitle[defaultLanguage] = presetData.title;\n preset.metadata.description[language] = presetData.description;\n preset.metadata.description[defaultLanguage] = presetData.description;\n\n return preset;\n }\n\n static fromProgramData(programData) {\n let presetData = {};\n presetData.username = Store.getters[\"Auth/username\"];\n presetData.program = programData;\n presetData.metadata = {};\n presetData.title = programData.label;\n presetData.importedTitle = programData.label;\n presetData.description = programData.description;\n return ProgramPreset.fromConvertToPresetData(presetData);\n }\n\n /**\n * Get MindMotion presets\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async getMindMotionPresets(signal) {\n return await this.api().get(\"/programpreset\", {\n dataKey: \"result\",\n signal,\n });\n }\n\n /**\n * Get Therapist presets\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async getTherapistPresets(signal) {\n return await this.api().get(\"/programpreset/therapist\", {\n dataKey: \"result\",\n signal,\n });\n }\n\n static createTherapistPreset(programPreset) {\n return this.api().post(\"/programpreset/custom\", programPreset, {\n dataKey: \"result\",\n });\n }\n\n static updateTherapistPreset(programPreset) {\n return this.api().put(`/programpreset/${programPreset.id}`, programPreset, {\n dataKey: \"result\",\n });\n }\n\n /**\n * Delete a preset from the database\n * @param programPresetId\n * @returns {*}\n */\n static deleteTherapistPreset(programPresetId) {\n return this.api().delete(`/programpreset/id/${programPresetId}`, {\n dataKey: \"result\",\n // Also delete from the store\n // See: https://vuex-orm.github.io/plugin-axios/guide/usage.html#delete-requests\n delete: programPresetId,\n });\n }\n}\n\n// This data is only valid for MindMotion presets\nexport class ProgramPresetMetadata {\n constructor(programPresetMetaData) {\n this.title = programPresetMetaData.title || {};\n this.description = programPresetMetaData.description || {};\n this.severity =\n programPresetMetaData.severity || this.defaultSeverityOptions();\n this.function =\n programPresetMetaData.function || this.defaultFunctionOptions();\n this.importedTitle = programPresetMetaData.importedTitle || {};\n }\n\n defaultSeverityOptions() {\n return {\n key: \"\",\n text: {},\n };\n }\n\n defaultFunctionOptions() {\n return {\n key: \"\",\n text: {},\n };\n }\n\n get Title() {\n if (!this.title[userRootLocale()]) {\n return this.title[defaultLanguage];\n }\n return this.title[userRootLocale()];\n }\n\n set Title(title) {\n this.title = {};\n this.title[userRootLocale()] = title;\n this.title[defaultLanguage] = title;\n }\n\n get Description() {\n if (!this.description[userRootLocale()]) {\n return this.description[defaultLanguage];\n }\n return this.description[userRootLocale()];\n }\n\n set Description(description) {\n this.description = {};\n this.description[userRootLocale()] = description;\n this.description[defaultLanguage] = description;\n }\n\n get Severity() {\n return {\n key: this.severity.key,\n text: this.severity.text[userRootLocale()],\n };\n }\n\n get Function() {\n return {\n key: this.function.key,\n text: this.function.text ? this.function.text[userRootLocale()] : \"\",\n };\n }\n\n get ImportedTitle() {\n if (!this.importedTitle[userRootLocale()]) {\n return this.importedTitle[defaultLanguage];\n }\n return this.importedTitle[userRootLocale()];\n }\n\n set ImportedTitle(importedTitle) {\n this.importedTitle[userRootLocale()] = importedTitle;\n this.importedTitle[defaultLanguage] = importedTitle;\n }\n}\n","import { formatToDDMMMYYYYHmm } from \"@/utils/date\";\nimport { getYear, parseISO } from \"date-fns\";\nimport { tr } from \"@/utils/translation\";\nimport { buildNameFromFirstAndLastName } from \"@/utils/profile\";\n\n// The structure of an empty soap text object\nconst emptySoapText = {\n username: \"\",\n firstname: \"\",\n lastname: \"\",\n text: \"\",\n};\n\n// All soap text names for the session report\nconst soapTextNames = [\"subjective\", \"assessment\", \"plan\"];\n\n/**\n * This class is like an array for soaptexts.\n * It has the same structure as the soapdata in the backend\n * A soapData object has some SoapText objects these text objects represents the real data.\n */\nexport default class SoapData {\n /**\n * Generate the objects if they are not existing otherwise add them to the class\n * @param {object} soapData The soapdata object from the backend\n */\n constructor(soapData) {\n // If soapdata is null generate all necessary soaptext objects\n if (!soapData) {\n this.generateAll();\n return;\n }\n\n // Loop through all soaptext names\n soapTextNames.forEach((soapTextName) => {\n // If the soaptext object is not null add it to this soapdata instance otherwise generate the empty object and add it\n if (soapData[soapTextName]) {\n this[soapTextName] = soapData[soapTextName];\n // Handle empty date from backend (It is 01.01.01 instead of null)\n if (getYear(parseISO(this[soapTextName].lastEditDate)) > 1970) {\n this[soapTextName].lastEditDate = this[soapTextName].lastEditDate;\n } else {\n this[soapTextName].lastEditDate = undefined;\n }\n } else {\n this.generate(soapTextName);\n }\n\n // Add convenience getters\n this[soapTextName].translatedLatestEdit = () => {\n return this.translatedLatestEdit(soapTextName);\n };\n });\n }\n\n /**\n * Generate empty soaptext object for all soaptextnames\n */\n generateAll() {\n soapTextNames.forEach((soapTextName) => this.generate(soapTextName));\n }\n\n /**\n * Generate empty soaptext object for the given soaptextname\n * @param {string} name The soaptextname\n */\n generate(name) {\n this[name] = Object.assign({}, emptySoapText);\n }\n\n /**\n * Returns the formatted latest edit information string when the information is available.\n * @param soapName\n * @return {string}\n */\n translatedLatestEdit(soapName) {\n let author = this.textAuthor(soapName);\n if (this[soapName].lastEditDate && author.trim() !== \"\") {\n return tr(\"TherapistPatientManagementPage.ReviewPage.lastedited\", {\n date: formatToDDMMMYYYYHmm(this[soapName].lastEditDate),\n name: author,\n });\n }\n return \"\";\n }\n\n /**\n * Returns the soap text author name.\n * @param soapName\n * @return {string}\n */\n textAuthor(soapName) {\n return buildNameFromFirstAndLastName(\n this[soapName].firstname,\n this[soapName].lastname\n );\n }\n}\n","/**\n * A simple text builder class helper to create slightly formatted text easily.\n */\nexport default class TextBuilder {\n constructor() {\n this.text = \"\";\n this.eol = this.getEol();\n }\n\n /**\n * Adds a line (with a new line)\n * @param text\n */\n addLine(text) {\n this.text += text + this.eol;\n }\n\n /**\n * Appends text to the current state\n * @param text\n */\n append(text) {\n this.text += text;\n }\n\n /**\n * Adds a result formatted line\n * e.g.: resultNameresultValue\n * @param resultName\n * @param resultValue\n */\n addResult(resultName, resultValue) {\n this.text += \"\\t\" + resultName + \"\\t\\t\\t\" + resultValue + this.eol;\n }\n\n /**\n * Adds a title formatted line\n * @param title\n */\n addTitle(title) {\n this.text += this.eol + title + this.eol;\n }\n\n /**\n * Adds a subtitle formatted line\n * @param subtitle\n */\n addSubTitle(subtitle) {\n this.text += subtitle + this.eol;\n }\n\n /**\n * Returns the right end of line character depending on the platform\n * @return {string}\n */\n getEol() {\n let myPlatform = navigator.platform.toLowerCase();\n if (myPlatform.indexOf(\"win\") != -1) {\n // Windows\n return \"\\r\\n\";\n } else if (myPlatform.indexOf(\"mac\") != -1) {\n // OSX\n return \"\\r\";\n }\n return \"\\n\"; // The rest\n }\n}\n","import SoapData from \"@/models/SoapData.model\";\nimport ActivityResult from \"@/models/activity-result/ActivityResult.model\";\nimport DateTimeOffset from \"@/models/DateTimeOffset.model\";\nimport Profile from \"@/models/Profile.model\";\nimport {\n getMinutesAndSecondsFromSeconds,\n getMinutesFromSeconds,\n getAdaptiveTranslatedTimeFromSeconds,\n} from \"@/utils/duration\";\nimport {\n formatToDDMMMYYYY,\n formatToDDMMMYYYYHmm,\n formatToHmm,\n} from \"@/utils/date\";\nimport { tr } from \"@/utils/translation\";\nimport TextBuilder from \"@/utils/textBuilder\";\nimport Store from \"@/store/\";\nimport { groupBy, lowerFirst } from \"lodash\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport { activityApi } from \"@/services/api\";\nimport { DosageKind } from \"@/services/enums\";\n\nexport const SessionSupervisionMode = Object.freeze({\n Supervised: \"Supervised\",\n RemotelySupervised: \"RemotelySupervised\",\n Unsupervised: \"Unsupervised\",\n});\n\nexport default class SessionReport {\n constructor(sessionReport) {\n this.id = sessionReport.id;\n this.addedAtUtc = sessionReport.addedAtUtc;\n this.addedAt = formatToDDMMMYYYYHmm(sessionReport.addedAtUtc);\n this.startDate = sessionReport.startDate;\n this.startDateOffset = new DateTimeOffset(sessionReport.startDateOffset);\n this.endDate = sessionReport.endDate;\n this.endDateOffset = new DateTimeOffset(sessionReport.endDateOffset);\n this.totalDuration = getMinutesFromSeconds(sessionReport.totalDurationSec);\n this.userName = sessionReport.userName;\n this.completed = sessionReport.completed;\n this.completionCount = sessionReport.completionCount;\n this.deviceMode = sessionReport.deviceMode || \"\";\n this.supervisionMode = sessionReport.supervisionMode;\n\n this.soapData = new SoapData(sessionReport.soapData);\n\n this.results = sessionReport.results.map(\n (result) => new ActivityResult(result)\n );\n\n this.therapistUsername = sessionReport.therapistUsername;\n }\n\n /**\n * Loads the therapist profile if there is a therapist username\n */\n get therapistProfile() {\n if (this.therapistUsername) {\n return Profile.query().find(this.therapistUsername);\n }\n\n // Use the current loaded profile when no profile is provided\n let currentUsername = Store.getters[\"Auth/username\"];\n if (currentUsername) {\n return Profile.query().find(currentUsername);\n }\n\n return null;\n }\n\n /**\n * Loads the patient profile if there is a patient username\n */\n get patientProfile() {\n if (this.userName) {\n return Profile.query().find(this.userName);\n }\n return null;\n }\n\n async save() {\n return await SessionReport.saveSessionReport(this.serialize());\n }\n\n /**\n * Serialize the session report for the backend\n */\n serialize() {\n const copy = cloneDeep(this);\n // Convert minutes to seconds\n copy.totalDurationSec = copy.totalDuration / 60;\n // Deleting properties that are not for the backend\n delete copy.therapistProfile;\n delete copy.totalDuration;\n delete copy.addedAt;\n\n return copy;\n }\n\n /**\n * Returns the session duration.\n */\n duration() {\n let startDate = new Date(this.startDate);\n let endDate = new Date(this.endDate);\n // drop milliseconds to make consistent with backend\n let duration = Math.floor((endDate.getTime() - startDate.getTime()) / 1000);\n const [minutes, seconds] = getMinutesAndSecondsFromSeconds(duration);\n return tr(\"Common.DurationWithValues.minutesSecondsDisplayWithLegends\", {\n minutes: minutes,\n seconds: seconds,\n });\n }\n\n /**\n * Returns the activity results grouped by the activityname\n */\n getGroupedActivityResults() {\n const groupedResults = groupBy(this.results, \"activityId\");\n // Filter and map the object (We want to have an array)\n // Reduce is used to map and filter the object\n return Object.values(groupedResults).reduce(function (\n result,\n activityResults\n ) {\n // Get the first result\n const firstResult = activityResults[Object.keys(activityResults)[0]];\n\n // Remove all skipped activities from the results array\n activityResults = activityResults.filter(\n (activityResult) => !activityResult.skipped\n );\n\n // Only add this object if there is at least one activity (We dont want to show activities with skipped sessions)\n if (activityResults.length > 0) {\n result.push({\n activityId: firstResult.activityId,\n activityName: firstResult.activityName,\n movementName: firstResult.movementName,\n activityResults: activityResults,\n });\n }\n\n return result;\n },\n []);\n }\n\n /**\n * Returns the activities count\n */\n getActivitiesCount() {\n return this.results.length;\n }\n\n /**\n * Returns the not skipped sessions count\n */\n getNotSkippedSessionsCount() {\n return this.results.filter((result) => !result.skipped).length;\n }\n\n /**\n * Returns the total active training time (Sum up of all active training times)\n */\n getTotalActiveTrainingTime() {\n const totalActiveTrainingTimeSeconds = this.results.reduce(\n (prev, current) => prev + current.activeTrainingTimeSeconds,\n 0\n );\n return getAdaptiveTranslatedTimeFromSeconds(totalActiveTrainingTimeSeconds);\n }\n\n /**\n * Returns the total duration (Sum up of all durations)\n */\n getTotalDuration() {\n const totalDurationSeconds = this.results.reduce((prev, current) => {\n let currentValue =\n current.dosageKind === DosageKind.LOGIC // For logic dosage kind activities (Mind4 and Stardust), the duration is set to the active training time\n ? current.activeTrainingTimeSeconds\n : current.durationSeconds;\n return prev + currentValue;\n }, 0);\n return getAdaptiveTranslatedTimeFromSeconds(totalDurationSeconds);\n }\n\n /**\n * Returns the completed activities percentage (adherence)\n */\n getCompletedActivities() {\n const totalCount = this.results.length;\n\n const completedCount = this.completionCount;\n\n if (!completedCount) {\n return 0;\n }\n\n return Math.floor((completedCount / totalCount) * 100);\n }\n\n /**\n * Returns the translated supervised session type\n */\n translatedSupervisedSessionType() {\n let sessionType = lowerFirst(this.supervisionMode);\n return tr(`Common.Session.SessionTypes.${sessionType}`);\n }\n\n isSessionUnsupervised() {\n return this.supervisionMode === SessionSupervisionMode.Unsupervised;\n }\n\n isPrivateDeviceMode() {\n return this.deviceMode.toLowerCase() === \"private\";\n }\n\n showPatientStateInfo(sessionReview) {\n return (\n sessionReview.PreMoodAnswer ||\n sessionReview.PostMoodAnswer ||\n sessionReview.BorgAnswer\n );\n }\n\n /**\n * Provides soap report data as formatted text.\n */\n getSoapReportAsText(sessionReview) {\n let tb = new TextBuilder();\n\n // General\n // Create title\n let reportTitle = `${tr(\n \"TherapistPatientManagementPage.ReviewPage.sessionReport\"\n )}\\t${this.startDateOffset.formatToDDMMMYYYY} - ${\n this.startDateOffset.formatToHmm\n }-${this.endDateOffset.formatToHmmZ(true)}`;\n if (!this.endDateOffset.isOffsetSameAsLocale) {\n reportTitle = `${reportTitle}\\n\\t\\t\\t${formatToDDMMMYYYY(\n this.startDateOffset.localeDateTime\n )} - ${formatToHmm(this.startDateOffset.localeDateTime)}-${formatToHmm(\n this.endDateOffset.localeDateTime\n )} (${tr(\"Common.Timezone.Profile.yourTime\")})`;\n }\n tb.addTitle(reportTitle);\n\n if (this.patientProfile != null) {\n tb.addResult(\n tr(\"Common.Profile.fullName\"),\n this.patientProfile.displayedName\n );\n }\n tb.addResult(\n tr(\"TherapistPatientManagementPage.ReviewPage.duration\"),\n this.duration()\n );\n if (this.therapistProfile != null) {\n tb.addResult(\n tr(\"TherapistPatientManagementPage.ReviewPage.SessionReport.therapist\"),\n this.therapistProfile.displayedName\n );\n }\n tb.addResult(\n tr(\"TherapistPatientManagementPage.ReviewPage.sessionType\"),\n this.translatedSupervisedSessionType()\n );\n\n // Subjective\n if (\n this.soapData.subjective.text ||\n this.showPatientStateInfo(sessionReview)\n ) {\n tb.addTitle(tr(\"TherapistPatientManagementPage.ReviewPage.subjective\"));\n if (this.showPatientStateInfo(sessionReview)) {\n tb.addSubTitle(\n tr(\n \"TherapistPatientManagementPage.ReviewPage.selfReportedPatientState\"\n ) + \"*\"\n );\n tb.addResult(\n tr(\"Common.PatientState.preProgramMood\"),\n sessionReview.PreMoodAnswer == null\n ? \"--\"\n : sessionReview.PreMoodAnswer.skipped\n ? tr(`Common.PatientState.skipped`)\n : sessionReview.PreMoodAnswer.value.answer +\n \" / 5 (\" +\n tr(\n `Common.PatientState.Mood.${sessionReview.PreMoodAnswer.value.MoodValue}`\n ) +\n \")\"\n );\n tb.addResult(\n tr(\"Common.PatientState.postProgramMood\"),\n sessionReview.PostMoodAnswer == null\n ? \"--\"\n : sessionReview.PostMoodAnswer.skipped\n ? tr(`Common.PatientState.skipped`)\n : sessionReview.PostMoodAnswer.value.answer +\n \" / 5 (\" +\n tr(\n `Common.PatientState.Mood.${sessionReview.PostMoodAnswer.value.MoodValue}`\n ) +\n \")\"\n );\n tb.addResult(\n tr(\"Common.PatientState.borgRpe\"),\n sessionReview.BorgAnswer == null\n ? \"--\"\n : sessionReview.BorgAnswer.skipped\n ? tr(`Common.PatientState.skipped`)\n : sessionReview.BorgAnswer.value.answer +\n \" / 10 (\" +\n tr(\n `Common.PatientState.Borg.${sessionReview.BorgAnswer.value.BorgValue}`\n ) +\n \")\"\n );\n }\n\n if (this.soapData.subjective.text) {\n tb.addSubTitle(tr(\"Common.therapistNote\"));\n tb.addLine(this.soapData.subjective.text);\n tb.addLine(this.soapData.subjective.translatedLatestEdit());\n }\n }\n\n // Objective\n tb.addTitle(tr(\"TherapistPatientManagementPage.ReviewPage.objective\"));\n if (this.isSessionUnsupervised()) {\n // Unsupervised session\n const activitiesPerformed =\n this.getActivitiesCount() > 0 ? this.getNotSkippedSessionsCount() : 0;\n tb.addResult(\n tr(\"TherapistPatientManagementPage.ReviewPage.activitiesOverPlanned\"),\n `${activitiesPerformed} / ${this.getActivitiesCount()}`\n );\n tb.addResult(\n tr(\n \"TherapistPatientManagementPage.ReviewPage.totalActiveTrainingTimeOverPlanned\"\n ),\n `${this.getTotalActiveTrainingTime()} / ${this.getTotalDuration()}`\n );\n } else {\n // (Remotely) supervised session\n const activitiesPerformed =\n this.getActivitiesCount() > 0 ? this.getNotSkippedSessionsCount() : 0;\n tb.addResult(\n tr(\"TherapistPatientManagementPage.ReviewPage.activities\"),\n activitiesPerformed\n );\n tb.addResult(\n tr(\"TherapistPatientManagementPage.ReviewPage.totalActiveTrainingTime\"),\n this.getTotalActiveTrainingTime()\n );\n }\n\n tb.addLine(\"\");\n for (let activity of this.getGroupedActivityResults()) {\n tb.addResult(activity.activityName, activity.movementName);\n for (let result of activity.activityResults) {\n tb.addResult(\n result.startOffset.formatToHHmmZ(),\n tr(\"TherapistPatientManagementPage.ReviewPage.ActivityReport.level\", {\n level: result.level,\n })\n );\n tb.addResult(\n tr(\"TherapistPatientManagementPage.ReviewPage.activeTrainingTime\"),\n result.getActiveTrainingTime()\n );\n tb.addResult(\n tr(\"TherapistPatientManagementPage.ReviewPage.scheduledTrainingTime\"),\n result.getDuration()\n );\n tb.addResult(\n tr(\"TherapistPatientManagementPage.ReviewPage.activeSide\"),\n result.translatedActiveSide()\n );\n if (result.showScore) {\n tb.addResult(\n tr(\"TherapistPatientManagementPage.ReviewPage.score\"),\n tr(\"Common.Units.percentageDisplay\", { percentage: result.score })\n );\n }\n\n // Add compensation percentage and duration if provided\n let compensationResult = result.compensationPercentage();\n if (\n result.compensationMovements.length > 0 ||\n result.compensationDuration > 0 ||\n result.hasCompensationDetails()\n ) {\n tb.addResult(tr(\"Common.Activity.compensation\"), compensationResult);\n }\n if (result.hasCompensationDetails()) {\n for (let compResult of result.compensationFeedbackResults) {\n for (let detail of compResult.details) {\n if (detail.duration > 0) {\n tb.addResult(\n tr(\n `TherapistPatientManagementPage.ReviewPage.ActivityReportResult.Compensators.${compResult.id}.${detail.name}`\n ),\n detail.translatedDetailDuration()\n );\n }\n }\n }\n }\n\n if (result.assists && result.assists !== \"none\") {\n tb.addResult(\n tr(\n \"TherapistPatientManagementPage.TherapyPlanPage.TherapyPlan.Activity.assists\"\n ),\n result.translatedAssists()\n );\n }\n if (result.challenges && result.challenges !== \"none\") {\n tb.addResult(\n tr(\n \"TherapistPatientManagementPage.TherapyPlanPage.TherapyPlan.Activity.challenges\"\n ),\n result.translatedChallenges()\n );\n }\n\n tb.addLine(\"\");\n }\n }\n\n // Assessment\n if (this.soapData.assessment.text) {\n tb.addTitle(tr(\"TherapistPatientManagementPage.ReviewPage.assessments\"));\n tb.addLine(this.soapData.assessment.text);\n tb.addLine(this.soapData.assessment.translatedLatestEdit());\n }\n\n // Plan\n if (this.soapData.plan.text) {\n tb.addTitle(tr(\"TherapistPatientManagementPage.ReviewPage.plan\"));\n tb.addLine(this.soapData.plan.text);\n tb.addLine(this.soapData.plan.translatedLatestEdit());\n }\n\n // N.B. for patient state\n if (this.showPatientStateInfo(sessionReview)) {\n tb.addLine(\n \"\\n\\n* \" +\n tr(\n \"TherapistPatientManagementPage.ReviewPage.selfReportedPatientStateExplanation1\"\n )\n );\n tb.addLine(\n tr(\n \"TherapistPatientManagementPage.ReviewPage.selfReportedPatientStateExplanation2\"\n )\n );\n tb.addLine(\n tr(\n \"TherapistPatientManagementPage.ReviewPage.selfReportedPatientStateExplanation3\"\n )\n );\n tb.addLine(\n tr(\n \"TherapistPatientManagementPage.ReviewPage.selfReportedPatientStateExplanation4\"\n )\n );\n tb.addLine(\n tr(\n \"TherapistPatientManagementPage.ReviewPage.selfReportedPatientStateExplanation5\"\n )\n );\n }\n\n return tb.text;\n }\n\n // Network functions\n\n /**\n * Get session report for a specific session id\n * @param {string} sessionId The session id\n */\n static async getSessionReport(sessionId) {\n return await activityApi.get(`session/id/${sessionId}`).then((response) => {\n return new SessionReport(response.data.result);\n });\n }\n\n static async saveSessionReport(sessionReport) {\n return await activityApi\n .put(`session/id/${sessionReport.id}`, sessionReport)\n .then((response) => {\n return new SessionReport(response.data.result);\n });\n }\n}\n","export class SiteSAMLParameters {\n constructor(other) {\n if (other) {\n this.isEnabled = other.isEnabled || false;\n this.customPortalURLSuffix = other.customPortalURLSuffix || \"\";\n this.additionalCustomPortalURLSuffix =\n other.additionalCustomPortalURLSuffix || [];\n this.customServiceProviderName = other.customServiceProviderName || \"\";\n this.idpRedirectionURL = other.idpRedirectionURL || \"\";\n this.logoutURL = other.logoutURL || \"\";\n this.identityProviderCertificate =\n other.identityProviderCertificate || \"\";\n this.canSupertherapistAdministerSAML =\n other.canSupertherapistAdministerSAML || false;\n this.enforceSAMLByDefault = other.enforceSAMLByDefault || false;\n } else {\n this.isEnabled = false;\n this.customServiceProviderName = \"\";\n this.customPortalURLSuffix = \"\";\n this.additionalCustomPortalURLSuffix = [];\n this.idpRedirectionURL = \"\";\n this.logoutURL = \"\";\n this.identityProviderCertificate = \"\";\n this.canSupertherapistAdministerSAML = false;\n this.enforceSAMLByDefault = false;\n }\n }\n}\n\nexport class SitePasswordParameters {\n constructor(params) {\n if (params) {\n this.isExpirationEnabled = params.isExpirationEnabled || false;\n this.expirationInDays = params.expirationInDays || 365;\n this.notificationBeforeExpirationInDays =\n params.notificationBeforeExpirationInDays || 30;\n } else {\n this.isExpirationEnabled = false;\n this.expirationInDays = 365;\n this.notificationBeforeExpirationInDays = 30;\n }\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport Customer, { customerKinds } from \"@/models/Customer.model\";\nimport Profile from \"@/models/Profile.model\";\nimport SiteUnit from \"@/models/SiteUnit.model\";\nimport {\n SiteSAMLParameters,\n SitePasswordParameters,\n} from \"@/models/SiteParameters.model\";\nimport { defaultTimezoneId } from \"@/models/Timezone.model\";\nimport { getDropdownEntries } from \"@/utils/dropdown\";\nimport { isEntityContainsAllTerms, tidySearchTerm } from \"@/utils/filters\";\nimport { userApi, notifyError } from \"@/services/api\";\n\nexport const siteKinds = Object.freeze({\n payingCustomer: \"PayingCustomer\",\n household: \"Household\",\n productEvaluation: \"ProductEvaluation\",\n demo: \"Demo\",\n fake: \"Fake\",\n});\n\nexport default class Site extends Model {\n static entity = \"sites\";\n\n static fields() {\n return {\n id: this.attr(null), // Primary key\n name: this.attr(null),\n kind: this.attr(null),\n samlParameters: this.attr(new SiteSAMLParameters()),\n passwordParameters: this.attr(new SitePasswordParameters()),\n customers: this.hasMany(Customer, \"siteId\"),\n profiles: this.hasMany(Profile, \"siteId\"),\n siteUnits: this.hasMany(SiteUnit, \"siteId\"),\n timeZoneId: this.attr(null),\n };\n }\n\n /**\n * Returns the timezone used for the Site.\n * If no timezone is set, fallback on UTC\n * @returns {string|*}\n */\n get validTimezone() {\n return this.timeZoneId ?? defaultTimezoneId;\n }\n\n get PatientCustomers() {\n return this.customers.filter(\n (c) => c.kind === customerKinds.patientCustomer\n );\n }\n // customer kind other than patientCustomer\n get OtherCustomers() {\n return this.customers.filter(\n (c) => c.kind !== customerKinds.patientCustomer\n );\n }\n\n // Network functions\n\n static get(signal) {\n return this.api().get(\"/site\", { dataKey: \"result\", signal });\n }\n\n static async getById(id) {\n return await this.api().get(\"/site/id/\" + id, { dataKey: \"result\" });\n }\n\n static async post(newSite) {\n return this.api().post(\"/site\", newSite, { dataKey: \"result\" });\n }\n\n static async remove(site) {\n return this.api().delete(\"/site/\" + site.id, {\n delete: site.id,\n dataKey: \"result\",\n });\n }\n\n static async put(updatedSite) {\n // Let's strip the customer and profiles data\n let updatedSiteCopy = JSON.parse(JSON.stringify(updatedSite));\n updatedSiteCopy.customer = null;\n updatedSiteCopy.profiles = [];\n updatedSiteCopy.siteUnits = [];\n return this.api().put(\"/site/\" + updatedSiteCopy.id, updatedSiteCopy, {\n dataKey: \"result\",\n });\n }\n\n /**\n * Get list of users that are not in any site unit\n * @param siteId\n * @returns the list of users that are not in any site unit\n */\n static async getUnassignedUsers(siteId, signal) {\n return await userApi\n .get(`site-unit-assignment/site/${siteId}/unassigned-users`, { signal })\n .then((response) => {\n return response.data.result || [];\n })\n .catch((error) => {\n notifyError(error);\n return [];\n });\n }\n\n /**\n * Update SAML parameters as Site manager or therapist\n * @param updatedSAMLParameters\n * Updates site data as a response and update the local storage accordingly.\n */\n static async updateSAMLParameters(updatedSAMLParameters) {\n return this.api().put(\"/site/saml-parameters\", updatedSAMLParameters, {\n dataKey: \"result\",\n });\n }\n\n static async updatePasswordParameters(updatedParameters) {\n return this.api().put(\"/site/password-parameters\", updatedParameters, {\n dataKey: \"result\",\n });\n }\n\n static getSiteKindList() {\n return getDropdownEntries(siteKinds, \"AdminPages.Site.Kind\");\n }\n\n /**\n * Entity fields to search into\n */\n get entityFieldsToSearchInto() {\n let fields = [this.kind];\n if (this.name) {\n fields.push(tidySearchTerm(this.name));\n }\n if (this.id) {\n fields.push(this.id);\n }\n return fields;\n }\n\n /**\n * Return true iff all terms correspond to the entity\n * @param {string} searchTerms terms are space separated\n */\n isEntityCorrespondingTo(searchTerms) {\n return isEntityContainsAllTerms(this.entityFieldsToSearchInto, searchTerms);\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport Site from \"@/models/Site.model\";\nimport { isEntityContainsAllTerms } from \"@/utils/filters\";\n\nexport default class SiteUnit extends Model {\n static entity = \"siteUnits\";\n\n static fields() {\n return {\n id: this.attr(null),\n site: this.belongsTo(Site, \"siteId\"),\n siteId: this.attr(null),\n name: this.attr(null),\n timeZoneId: this.attr(null),\n hasCurrentUserEditRights: this.attr(false),\n userCount: this.attr(0),\n };\n }\n\n // Network functions\n static async get() {\n return await this.api().get(\"/site-unit\", { dataKey: \"result\" });\n }\n\n static async post(newSiteUnit) {\n return await this.api().post(\"/site-unit\", newSiteUnit, {\n dataKey: \"result\",\n });\n }\n\n static async put(updatedUnit) {\n return await this.api().put(`/site-unit/${updatedUnit.id}`, updatedUnit, {\n dataKey: \"result\",\n });\n }\n\n static async remove(siteUnit) {\n return await this.api().delete(\"/site-unit/\" + siteUnit.id, {\n delete: siteUnit.id,\n dataKey: \"result\",\n });\n }\n\n /**\n * Entity fields to search into\n */\n get entityFieldsToSearchInto() {\n let fields = [this.name];\n return fields;\n }\n\n /**\n * Return true iff all terms correspond to the entity\n * @param {string} searchTerms terms are space separated\n */\n isEntityCorrespondingTo(searchTerms) {\n if (!this.entityFieldsToSearchInto.length) {\n return false;\n }\n return isEntityContainsAllTerms(this.entityFieldsToSearchInto, searchTerms);\n }\n}\n","import { Model } from \"@vuex-orm/core\";\n\nexport const therapeuticGoalMaxLength = 1000;\n\nexport default class TherapeuticGoal extends Model {\n static entity = \"therapeuticGoal\";\n static primaryKey = \"patientUsername\";\n\n static fields() {\n return {\n therapistUsername: this.attr(null),\n patientUsername: this.attr(null),\n goal: this.attr(null),\n addedAtUtc: this.attr(null),\n };\n }\n\n /**\n * Fetch therapeutic goal from companion for a given patient.\n * @param {string} username The username\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async fetchTherapeuticGoalForPatient(username, signal) {\n return await this.api()\n .get(`therapeutic-goal/patient/${username}`, {\n dataTransformer: (response) => {\n return response?.data?.result || {};\n },\n signal,\n })\n .then(() => {\n return TherapeuticGoal.query().find(username) ?? null;\n })\n .catch((error) => {\n return Promise.reject(error);\n });\n }\n\n /**\n * Returns the therapeutic goal for the given patient from the store or fetch it from companion.\n * @param {string} username The username\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async getTherapeuticGoalForPatient(username, signal) {\n const tg = TherapeuticGoal.query().find(username);\n if (tg) {\n return tg;\n } else {\n return await this.fetchTherapeuticGoalForPatient(username, signal);\n }\n }\n\n /**\n * Post a new therapeutic goal for a patient.\n * @param {TherapeuticGoal} newTherapeuticGoal The therapeutic goal object to add\n */\n static async postTherapeuticGoalForPatient(newTherapeuticGoal) {\n return this.api()\n .post(\"therapeutic-goal\", newTherapeuticGoal, {\n dataKey: \"result\",\n })\n .catch((error) => {\n return Promise.reject(error);\n });\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport i18n from \"@/i18n\";\nimport store from \"@/store\";\nimport { isEntityContainsAllTerms, tidySearchTerm } from \"@/utils/filters\";\n\nexport const defaultTimezoneId = \"UTC\";\n\nexport default class Timezone extends Model {\n static entity = \"timezones\";\n // Uses one single fetching instance for timezones\n static fetchingInstance = null;\n\n static fields() {\n return {\n id: this.attr(null),\n displayName: this.attr(null),\n baseUtcOffset: this.attr(null),\n supportsDaylightSavingTime: this.attr(null),\n };\n }\n\n /**\n * @return The displayName or the id if display name is empty.\n */\n get name() {\n return this.displayName || this.id;\n }\n\n /**\n * @return Entity fields to search into\n */\n get entityFieldsToSearchInto() {\n return [tidySearchTerm(this.id), tidySearchTerm(this.displayName)];\n }\n\n /**\n * Return true iff all terms correspond to the entity\n * @param {string} searchTerms terms are space separated\n */\n isEntityCorrespondingTo(searchTerms) {\n return isEntityContainsAllTerms(this.entityFieldsToSearchInto, searchTerms);\n }\n\n /**\n * Fetches timezones from the server.\n * @param {AbortSignal} signal\n * @returns axios response schema with data: { result: [timezones] }\n */\n static async fetchTimezonesAsync(signal) {\n const currentLanguage = store.getters[\"Language/language\"];\n if (this.fetchingInstance !== null) {\n return await this.fetchingInstance;\n }\n this.fetchingInstance = this.api()\n .get(\"/timezone\", { dataKey: \"result\", signal })\n .finally(() => {\n this.fetchingInstance = null;\n });\n return await this.fetchingInstance;\n }\n\n /**\n * Returns timezones from the store and fetches them if they're not there.\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async getAllTimezones(signal) {\n let timezones = Timezone.all();\n\n // Verify if the last time we fetched data, it was in the same language\n // Also sometimes it has 1 or 2 time zones only, then force to fetch them all.\n if (timezones.length < 10) {\n return await this.fetchTimezonesAsync(signal).then(() => {\n return Timezone.all();\n });\n }\n\n return timezones;\n }\n\n /**\n * Returns timezones as objects from the store or fetches them if they're not there.\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async getTimezonesList(signal) {\n return await Timezone.getAllTimezones(signal).then((timezones) => {\n let entries = {};\n // Adds not set value\n entries[\"undefined\"] = new Timezone({\n id: \"\",\n displayName: i18n.t(\"Common.notSet\"),\n });\n\n // Appends all the timezones\n timezones.forEach((tz) => {\n entries[tz.id] = tz;\n });\n\n return entries;\n });\n }\n\n /**\n * Returns a valid timezone info for a profiles.\n * @param {string} username The username\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async getTimeZoneInfoFromUsername(username, signal) {\n return await this.api()\n .get(`profile/${username}/timezone`, {\n dataKey: \"result\",\n signal,\n })\n .then((response) => {\n return response.response.data.result;\n })\n .catch((error) => {\n return Promise.reject(error);\n });\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport { parseISO } from \"date-fns\";\nimport Asset from \"@/models/Asset.model\";\nexport default class UserSession extends Model {\n static entity = \"usersessions\";\n\n static fields() {\n return {\n id: this.attr(null),\n mmid: this.attr(null),\n startDate: this.attr(null),\n endDate: this.attr(null),\n hasBeenPerformedOffline: this.attr(null),\n deviceId: this.attr(null),\n deviceSoftwareVersion: this.attr(null),\n productKind: this.attr(null),\n asset: this.hasOne(Asset, \"deviceId\", \"deviceId\"),\n };\n }\n\n get StartDate() {\n return this.startDate ? parseISO(this.startDate) : null;\n }\n get EndDate() {\n return this.endDate ? parseISO(this.endDate) : null;\n }\n\n static get(fromDate, toDate) {\n return this.api().get(\"/usersession\", {\n dataKey: \"result\",\n params: {\n fromDate: fromDate,\n toDate: toDate,\n },\n });\n }\n\n static post(newUserSession) {\n return this.api().post(\"/usersession\", newUserSession, {\n dataKey: \"result\",\n });\n }\n}\n","import i18n from \"@/i18n\";\nimport { Model } from \"@vuex-orm/core\";\nimport Site from \"@/models/Site.model\";\nimport Profile from \"@/models/Profile.model\";\nimport { formatISO9075, parseISO, isSameDay } from \"date-fns\";\nimport {\n formatToDDMMM,\n formatToDDMMMYYYYHmm,\n formatToHHmm,\n} from \"@/utils/date\";\nimport { getMinutesAndSecondsFromSeconds } from \"@/utils/duration\";\nimport { notifyError, userApi } from \"@/services/api\";\n\nexport const VideoProvider = Object.freeze({\n Zoom: \"Zoom\",\n Vidyo: \"Vidyo\",\n});\n\nexport default class VideoMeeting extends Model {\n static entity = \"videomeetings\";\n\n static fields() {\n return {\n id: this.attr(\"\"), // Primary key\n therapistUsername: this.attr(null),\n therapistDisplayName: this.attr(null),\n patientUsername: this.attr(null),\n siteId: this.attr(null),\n site: this.belongsTo(Site, \"siteId\"),\n videoProvider: this.attr(VideoProvider.Zoom),\n videoConferencingLink: this.attr(null),\n startDateTimeUTC: this.attr(null),\n endDateTimeUTC: this.attr(null),\n hasBeenAcceptedByPatient: this.attr(false),\n hasBeenDeclinedByPatient: this.attr(false),\n lastPatientUpdateUTC: this.attr(null),\n hasBeenCancelledByTherapist: this.attr(false),\n hasBeenClosedByTherapist: this.attr(false),\n cancellationDateUTC: this.attr(null),\n fromMeetingRequestId: this.attr(null),\n mutualParticipationSeconds: this.attr(null),\n therapist: this.belongsTo(Profile, \"therapistUsername\", \"userName\"),\n patient: this.belongsTo(Profile, \"patientUsername\", \"userName\"),\n };\n }\n\n get IsJoinable() {\n return !this.hasBeenDeclinedByPatient && !this.hasBeenCancelledByTherapist;\n }\n\n get StartDateTimeUTC() {\n return this.startDateTimeUTC ? parseISO(this.startDateTimeUTC) : null;\n }\n set StartDateTimeUTC(value) {\n this.startDateTimeUTC = value.toISOString();\n }\n\n get EndDateTimeUTC() {\n return this.endDateTimeUTC ? parseISO(this.endDateTimeUTC) : null;\n }\n set EndDateTimeUTC(value) {\n this.endDateTimeUTC = value.toISOString();\n }\n\n get LastPatientUpdateUTC() {\n return this.lastPatientUpdateUTC\n ? parseISO(this.lastPatientUpdateUTC)\n : null;\n }\n set LastPatientUpdateUTC(value) {\n this.lastPatientUpdateUTC = formatISO9075(value);\n }\n\n get CancellationDateUTC() {\n return this.cancellationDateUTC ? parseISO(this.cancellationDateUTC) : null;\n }\n set CancellationDateUTC(value) {\n this.cancellationDateUTC = formatISO9075(value);\n }\n\n get MeetingAttendanceStatus() {\n if (\n this.mutualParticipationSeconds == null ||\n this.mutualParticipationSeconds < 0.1\n ) {\n return i18n.t(\"TherapistTeleRehabPage.Meeting.didNotOccur\");\n }\n\n const [minutes, seconds] = getMinutesAndSecondsFromSeconds(\n this.mutualParticipationSeconds\n );\n\n return i18n.t(\"TherapistTeleRehabPage.Meeting.didOccur\", {\n minutes: minutes,\n seconds: seconds,\n });\n }\n\n get MeetingStatus() {\n // We first check whether the meeting is canceled.\n if (this.hasBeenCancelledByTherapist) {\n if (this.CancellationDateUTC) {\n return i18n.t(\"ConferencePage.Video.Meeting.therapistCancelledAt\", {\n date: formatToDDMMMYYYYHmm(this.CancellationDateUTC),\n });\n }\n return i18n.t(\"ConferencePage.Video.Meeting.therapistCancelled\");\n }\n\n if (this.hasBeenDeclinedByPatient) {\n if (this.LastPatientUpdateUTC) {\n return i18n.t(\"ConferencePage.Video.Meeting.patientDeclinedAt\", {\n date: formatToDDMMMYYYYHmm(this.LastPatientUpdateUTC),\n });\n }\n return i18n.t(\"ConferencePage.Video.Meeting.patientDeclined\");\n }\n\n return \"\";\n }\n\n get DidOccur() {\n return (\n !this.hasBeenDeclinedByPatient &&\n !this.hasBeenCancelledByTherapist &&\n this.mutualParticipationSeconds >= 0.1\n );\n }\n\n get DidNotOccur() {\n return (\n this.hasBeenDeclinedByPatient ||\n this.hasBeenCancelledByTherapist ||\n this.mutualParticipationSeconds < 0.1\n );\n }\n\n /**\n * Returns the formatted meeting duration in the user locale.\n * E.g.: 12:00 - 13:00\n * Indicates the end date if not on the same day (can happen when the meeting was created in another timezone)\n * E.g. of a meeting on the 13 oct: 23:00 - 2:00 (14 oct.)\n * @return {string}\n */\n get durationString() {\n // Indicates the end day if the date is not the same than the beginning date's\n let endDate = isSameDay(this.StartDateTimeUTC, this.EndDateTimeUTC)\n ? \"\"\n : ` (${formatToDDMMM(this.EndDateTimeUTC)})`;\n return `${formatToHHmm(this.StartDateTimeUTC)} - ${formatToHHmm(\n this.EndDateTimeUTC\n )}${endDate}`;\n }\n\n /*\n * Methods\n */\n AreParticipantsPresent = (participants) => {\n return (\n participants.includes(this.therapistUsername) &&\n participants.includes(this.patientUsername)\n );\n };\n\n /*\n * Basic CRUD ORM methods\n */\n\n /**\n * Get video meetings for current user site\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async getAndRefreshForCurrentUserSite(signal) {\n return await this.api().get(`/videomeeting/site`, {\n dataKey: \"result\",\n persistBy: \"create\",\n signal,\n });\n }\n\n static async getForCurrentUser() {\n return await this.api().get(`/videomeeting/`, {\n dataKey: \"result\",\n });\n }\n\n static async getForTherapist(therapistUsername) {\n return await this.api().get(\n `/videomeeting/therapist/${therapistUsername}`,\n {\n dataKey: \"result\",\n }\n );\n }\n\n static async getForPatient(patientUsername) {\n return await this.api().get(`/videomeeting/patient/${patientUsername}`, {\n dataKey: \"result\",\n });\n }\n\n static async post(newVideoMeeting) {\n return await this.api().post(\"/videomeeting\", newVideoMeeting, {\n dataKey: \"result\",\n });\n }\n\n static async put(updatedVideoMeeting) {\n return await this.api().put(\n `/videomeeting/${updatedVideoMeeting.id}`,\n updatedVideoMeeting,\n {\n dataKey: \"result\",\n }\n );\n }\n\n static async remove(videoMeeting) {\n return await this.api().delete(`/videomeeting/${videoMeeting.id}`, {\n delete: videoMeeting.id,\n dataKey: \"result\",\n });\n }\n\n // Specific operations\n static async cancelVideoMeeting(videoMeeting) {\n return await this.api().post(\n `/videomeeting/${videoMeeting.id}/cancel`,\n null,\n {\n dataKey: \"result\",\n }\n );\n }\n\n static async rescheduleVideoMeeting(videoMeeting) {\n return await this.api().post(\n `/videomeeting/${videoMeeting.id}/reschedule`,\n videoMeeting,\n { dataKey: \"result\" }\n );\n }\n\n static async getMeetingJoiningInfo(meetingId) {\n return userApi\n .get(`videomeeting/${meetingId}/join-info`)\n .then((response) => {\n return response.data.result;\n })\n .catch((error) => {\n notifyError(error);\n return Promise.reject(error);\n });\n }\n\n static async logParticipantsChange(meetingId, usernamesList) {\n return userApi\n .post(`videomeeting/${meetingId}/participants`, usernamesList)\n .then((response) => {\n return response.data.result;\n })\n .catch((error) => {\n notifyError(error);\n return Promise.reject(error);\n });\n }\n\n static async closeMeeting(meetingId) {\n return userApi\n .post(`videomeeting/${meetingId}/close`)\n .then((response) => {\n return response.data.result;\n })\n .catch((error) => {\n notifyError(error);\n return Promise.reject(error);\n });\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport Profile from \"@/models/Profile.model\";\nimport { parseISO } from \"date-fns\";\n\nexport default class VideoMeetingRequest extends Model {\n static entity = \"videomeetingrequests\";\n\n static fields() {\n return {\n id: this.attr(\"\"),\n patientUsername: this.attr(null),\n addedAtUTC: this.attr(null),\n resolutionState: this.attr(null),\n resolvedAtUTC: this.attr(null),\n message: this.attr(\"\"),\n patient: this.belongsTo(Profile, \"patientUsername\", \"userName\"),\n };\n }\n\n get IsUnresolved() {\n return this.resolutionState == \"Unresolved\";\n }\n\n get AddedAtUTC() {\n return this.addedAtUTC ? parseISO(this.addedAtUTC) : null;\n }\n\n get ResolvedAtUTC() {\n return this.resolvedAtUTC ? parseISO(this.resolvedAtUTC) : null;\n }\n\n /**\n * Get video meeting requests\n * @param {object} options\n * @param {AbortSignal} signal Permits request cancellation support\n */\n static async getAndRefreshAll(options, signal) {\n if (!options) {\n options = {};\n }\n if (options.onlyUnresolved === undefined) {\n options.onlyUnresolved = false;\n }\n\n return await this.api().get(\n `videomeeting-request?onlyUnresolved=${options.onlyUnresolved}`,\n {\n dataKey: \"result\",\n persistBy: \"create\",\n signal,\n }\n );\n }\n\n static async ignore(videoMeetingRequest) {\n return await this.api().post(\n `/videomeeting-request/${videoMeetingRequest.id}/ignore`,\n {},\n {\n dataKey: \"result\",\n }\n );\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport Profile from \"@/models/Profile.model\";\nimport { parseISO } from \"date-fns\";\n\nexport default class WeeklyActiveTrainingTimeGoal extends Model {\n static entity = \"weeklyActiveTrainingTimeGoal\";\n\n static fields() {\n return {\n id: this.attr(null),\n addedAtUtc: this.attr(null),\n validFromDate: this.attr(null),\n patientUsername: this.attr(null),\n therapistUsername: this.attr(null),\n goalInSeconds: this.attr(null),\n };\n }\n\n get AddedAtUtc() {\n return this.addedAtUtc ? new Date(this.addedAtUtc) : null;\n }\n\n get ValidFromDate() {\n return this.validFromDate ? parseISO(this.validFromDate) : null;\n }\n\n get TherapistDisplayName() {\n return Profile.query().find(this.therapistUsername)?.displayedName || \"\";\n }\n\n get GoalInMinutes() {\n return parseInt(this.goalInSeconds / 60);\n }\n\n /**\n * Get weekly ATT goal history for the current patient\n * @param {string} username Patient username\n * @param {AbortSignal} signal\n */\n static async getWeeklyActiveTrainingTimeHistoryAsync(\n username,\n signal = null\n ) {\n return await this.api().get(`/weekly-att/${username}/history`, {\n dataKey: \"result\",\n signal,\n });\n }\n\n /**\n * Get a weekly ATT goal for the current patient\n * Does not save the response to the store\n * @param {string} username Patient username\n * @param {AbortSignal} signal\n */\n static async getNonPersistentWeeklyActiveTrainingTimeGoalAsync(\n username,\n signal = null\n ) {\n return await this.api().get(`weekly-att/${username}`, {\n signal,\n save: false,\n });\n }\n\n /**\n * Post a new weekly activity time goal for the given patient\n * @param patientUsername\n * @param goalInSeconds\n * @param validFromDate\n * @param signal\n */\n static async postWeeklyActivityTimeGoalForPatient(\n patientUsername,\n goalInSeconds,\n validFromDate,\n signal = null\n ) {\n const payload = {\n patientUsername,\n goalInSeconds,\n validFromDate,\n };\n return await this.api().post(`/weekly-att`, payload, {\n dataKey: \"result\",\n signal,\n });\n }\n}\n","import { Model } from \"@vuex-orm/core\";\nimport { format } from \"@/utils/date\";\nimport { parseISO } from \"date-fns\";\n\nexport default class WeeklyActiveTrainingTimeGoalAndCompletion extends Model {\n static entity = \"weeklyActiveTrainingTimeGoalAndCompletion\";\n\n static fields() {\n return {\n validFromDate: this.attr(null),\n validToDate: this.attr(null),\n patientUsername: this.attr(null),\n totalActiveTrainingTime: this.attr(0),\n supervisedActiveTrainingTime: this.attr(0),\n unsupervisedActiveTrainingTime: this.attr(0),\n weeklyActiveTrainingTimeGoal: this.attr(0),\n isGoalSet: this.attr(null),\n daysTrained: this.attr(null),\n };\n }\n\n get FromDate() {\n // N.B.: validFromDate is a Date Only, using parseISO() returns a local date\n // with the day unchanged\n return this.validFromDate ? parseISO(this.validFromDate) : null;\n }\n\n get ToDate() {\n // N.B.: validToDate is a Date Only, using parseISO() returns a local date\n // with the day unchanged\n return this.validToDate ? parseISO(this.validToDate) : null;\n }\n\n /**\n * Fetches computed weekly ATT data for the current patient\n * @param {string} username Patient username\n * @param {Date} from From date\n * @param {Date} to To date\n * @param {boolean} saveData Whether to save the data into the store\n * @param {AbortSignal} signal\n */\n static async fetchComputedWeeklyActiveTrainingTimeForDatesAsync(\n username,\n from,\n to,\n signal = null,\n saveData = true\n ) {\n const fromDate = format(from, \"yyyy-MM-dd\");\n const toDate = format(to, \"yyyy-MM-dd\");\n return await this.api().get(\n `/weekly-att/${username}/compute-sessions?fromDate=${fromDate}&toDate=${toDate}`,\n {\n dataKey: \"result\",\n persistBy: \"create\",\n save: saveData,\n signal,\n }\n );\n }\n}\n","import { getMinutesAndSecondsFromSeconds } from \"@/utils/duration\";\nimport { tr } from \"@/utils/translation\";\n\nexport class CompensationFeedbackResult {\n constructor(result) {\n this.id = result.id;\n this.compensatedDuration = result.compensatedDuration;\n this.details =\n result.details != null\n ? result.details.map((detail) => new CompensationDetails(detail))\n : [];\n }\n\n /**\n * Returns the formatted duration.\n * @return {string}\n */\n translatedDuration() {\n const [minutes, seconds] = getMinutesAndSecondsFromSeconds(\n this.compensatedDuration\n );\n return tr(\"Common.DurationWithValues.minutesSecondsDisplayWithLegends\", {\n minutes: minutes,\n seconds: seconds,\n });\n }\n\n /**\n * Returns whether the compensation details are valid:\n * - at least one details name has a duration > 0\n * @return {boolean}\n */\n hasDetails() {\n if (this.details === null || this.details.length === 0) {\n return false;\n }\n\n return this.details.some(\n (detail) => detail.duration !== null && detail.duration > 0\n );\n }\n}\n\nexport class CompensationDetails {\n constructor(details) {\n this.name = details.name || null;\n this.duration = details.duration || null;\n this.average = details.average || null;\n this.min = details.min || null; // double value, can be \"-Infinity\".\n this.max = details.max || null; // double value, can be \"Infinity\".\n }\n\n /**\n * Returns the formatted duration.\n * @return {string}\n */\n translatedDetailDuration() {\n const clampedDuration = Math.max(1.0, this.duration); // E.g.: Consider 0.3 seconds as 1.0 to display even small values;\n const [minutes, seconds] = getMinutesAndSecondsFromSeconds(\n Math.round(clampedDuration)\n );\n return tr(\"Common.DurationWithValues.minutesSecondsDisplayWithLegends\", {\n minutes: minutes,\n seconds: seconds,\n });\n }\n}\n","import {\n getAdaptiveTranslatedTimeFromSeconds,\n getMinutesFromSeconds,\n} from \"@/utils/duration\";\nimport { clamp } from \"@/utils/math\";\nimport { getDropdownEntries, groupDropdownEntries } from \"@/utils/dropdown\";\nimport { tr } from \"@/utils/translation\";\nimport { CompensationFeedbackResult } from \"@/models/CompensationFeedbackResult.model\";\nimport ActivityDescription from \"@/models/ActivityDescription.model\";\nimport DateTimeOffset from \"@/models/DateTimeOffset.model\";\nimport { DosageKind } from \"@/services/enums\";\nimport BaseActivityResult from \"@/models/activity-result/BaseActivityResult.model\";\n\nexport const assistVariants = [\n \"none\",\n \"sitting\",\n \"sitting-stool\",\n \"sitting-plinth\",\n \"sitting-chair\",\n \"standingFrame\",\n \"parallelBars\",\n \"walkingStick\",\n \"assistanceOfTherapy\",\n \"antiGravityArmSupport\",\n \"therapyRing\",\n \"many\",\n \"selfAssisted\",\n];\n\nexport const challengeVariants = [\n \"none\",\n \"standing\",\n \"wobbleCushionStanding\",\n \"wobbleCushionSitting\",\n \"gymBall\",\n \"therapyStep\",\n \"therapyBand\",\n \"therapyBand-yellow\",\n \"therapyBand-red\",\n \"therapyBand-green\",\n \"therapyBand-blue\",\n \"therapyBand-black\",\n \"weights\",\n \"weight-free\",\n \"weight-wristAnkle\",\n \"weight-bar\",\n \"weight-vest\",\n \"weight-other\",\n \"weightSizes-one\",\n \"weightSizes-two\",\n \"weightSizes-three\",\n \"many\",\n];\n\nexport default class ActivityResult extends BaseActivityResult {\n constructor(activityResult) {\n super(activityResult);\n this.cloudId = activityResult.cloudId;\n this.activityId = activityResult.appId;\n this.ended = activityResult.ended;\n this.endOffset = new DateTimeOffset(activityResult.endOffset);\n this.activeTrainingTimeSeconds =\n activityResult.activeTrainingTime != null\n ? activityResult.activeTrainingTime\n : activityResult.duration;\n this.activeTrainingTime = getMinutesFromSeconds(\n this.activeTrainingTimeSeconds\n );\n this.duration = getMinutesFromSeconds(activityResult.duration);\n this.durationSeconds = activityResult.duration;\n this.activeSide = activityResult.activeSide;\n this.completed = activityResult.completed;\n this.skipped = activityResult.skipped;\n\n this.compensationFeedbackResults =\n activityResult.compensationFeedbackResults != null\n ? activityResult.compensationFeedbackResults.map(\n (result) => new CompensationFeedbackResult(result)\n )\n : [];\n\n let activityDescription = ActivityDescription.query().find(this.activityId);\n // Boolean to display or not the score according to the dosage kind\n this.showScore = activityDescription?.activityOptions?.hasScore;\n // Adds the compensation movement data for session report use.\n this.compensationMovements = activityDescription\n ? activityDescription.compensationMovements\n : [];\n this.activityName = activityDescription ? activityDescription.Name : \"\";\n this.movementName = activityDescription\n ? activityDescription.MovementName\n : \"\";\n this.dosageKind =\n activityDescription?.activityOptions?.dosage?.kind || DosageKind.DURATION;\n }\n\n translatedActiveSide() {\n if (!this.activeSide) {\n return \"--\";\n }\n return tr(`Common.Activity.Sides.${this.activeSide.toLowerCase()}`);\n }\n\n static getAssistsVariantList() {\n const dropdownOptions = getDropdownEntries(\n assistVariants,\n \"Common.Activity.Assists\"\n );\n return groupDropdownEntries(dropdownOptions);\n }\n\n static getChallengesVariantList() {\n const dropdownOptions = getDropdownEntries(\n challengeVariants,\n \"Common.Activity.Challenges\"\n );\n return groupDropdownEntries(dropdownOptions);\n }\n\n /**\n * Returns the formatted active training time.\n * @return {string}\n */\n getActiveTrainingTime() {\n return getAdaptiveTranslatedTimeFromSeconds(this.activeTrainingTimeSeconds);\n }\n\n /**\n * Returns the formatted duration.\n * @return {string}\n */\n getDuration() {\n // For logic dosage kind activities (Mind4 and Stardust), the duration is set to the active training time\n if (this.dosageKind === DosageKind.LOGIC) {\n return getAdaptiveTranslatedTimeFromSeconds(\n this.activeTrainingTimeSeconds\n );\n }\n return getAdaptiveTranslatedTimeFromSeconds(this.durationSeconds);\n }\n\n /**\n * Returns the calculated compensation percentage\n * (compensationduration / activeTrainingTimeSeconds * 100)\n */\n compensationPercentage() {\n let compensationPercent =\n this.activeTrainingTimeSeconds > 0.0\n ? (this.compensationDuration / this.activeTrainingTimeSeconds) * 100.0\n : 0.0;\n let percentageDisplayedResult = clamp(\n Math.round(compensationPercent),\n 0.0,\n 100.0\n );\n\n if (compensationPercent > 0.0 && compensationPercent < 1.0) {\n percentageDisplayedResult = \"<1\";\n }\n\n return tr(\"Common.Units.percentageDisplay\", {\n percentage: percentageDisplayedResult,\n // Fixes the \"<1\" display to not be '<1'\n interpolation: { escapeValue: false },\n });\n }\n\n /**\n * Indicates whether the activity results has some valid compensation details.\n * It also returns false when the compensation feedback result is 'Legacy'\n * @return {boolean}\n */\n hasCompensationDetails() {\n if (this.compensationFeedbackResults == null) {\n return false;\n }\n\n // Do not consider legacy feedback results\n if (\n this.compensationFeedbackResults.some((result) => result.id === \"Legacy\")\n ) {\n return false;\n }\n\n return this.compensationFeedbackResults.some((result) =>\n result.hasDetails()\n );\n }\n}\n","import { tr } from \"@/utils/translation\";\nimport DateTimeOffset from \"@/models/DateTimeOffset.model\";\nimport { parseISO } from \"date-fns\";\nimport { clamp, evenRound } from \"@/utils/math\";\n\nexport default class BaseActivityResult {\n constructor(result) {\n this.id = result.id;\n this.sessionId = result.sessionId || null;\n this.started = result.started || null;\n this.startOffset = new DateTimeOffset(result.startOffset);\n // We mimic c# default rounding behavior and round the midpoint to the closest even number\n this.score =\n Math.round(evenRound(clamp(result.score, 0.0, 1.0), 2) * 100) || 0.0;\n this.level = result.level || 0;\n this.compensationDuration = result.compensationDuration || 0.0;\n this.assists = result.assists || \"none\"; // Permits to get/set an empty value\n this.challenges = result.challenges || \"none\";\n }\n\n /**\n * Returns the translated assist\n */\n translatedAssists() {\n if (!this.assists) {\n return tr(\"Common.Activity.Assists.none\");\n }\n return tr(`Common.Activity.Assists.${this.assists}`);\n }\n\n /**\n * Returns the translated challenge\n */\n translatedChallenges() {\n if (!this.challenges) {\n return tr(\"Common.Activity.Challenges.none\");\n }\n return tr(`Common.Activity.Challenges.${this.challenges}`);\n }\n\n get StartedDate() {\n return this.started ? parseISO(this.started) : null;\n }\n}\n","/**\n * Training material attachment metadata\n */\nexport default class TrainingMaterialAttachment {\n constructor(attachment) {\n this.url = attachment?.url || \"\";\n this.type = attachment?.type;\n this.size = attachment?.size || 0.0;\n this.checksum = attachment?.checksum;\n }\n}\n","import TrainingMaterialAttachment from \"@/models/training-material/TrainingMaterialAttachment.model\";\nimport router from \"@/router/\";\nimport { Model } from \"@vuex-orm/core\";\n\n/**\n * The supported training material kinds, used to build playlists.\n */\nexport const TrainingMaterialKind = Object.freeze({\n OfficeHours: \"OfficeHoursEpisode\",\n ClinicalTips: \"ClinicalTip\",\n MindMotionKeyConcepts: \"MindMotionKeyConcepts\",\n Unsupported: \"Unsupported\", // hidden playlist for unsupported kinds\n});\n\n/**\n * The supported states of a training material\n */\nexport const TrainingMaterialState = Object.freeze({\n New: \"New\",\n Displayed: \"Displayed\",\n Started: \"Started\",\n Viewed: \"Viewed\",\n});\n\n/**\n * The attachment types\n */\nexport const TrainingMaterialAttachmentType = Object.freeze({\n Video: \"Video\",\n PDF: \"PDF\",\n});\n\n/**\n * Therapist training material (mainly videos)\n */\nexport default class TrainingMaterial extends Model {\n static entity = \"trainingMaterial\";\n\n static fields() {\n return {\n id: this.attr(null), // index\n // Can be equal for the same video in different languages\n trainingMaterialId: this.attr(\"\"),\n language: this.attr(\"\"),\n productName: this.attr(\"\"),\n productVersion: this.attr(-1),\n kind: this.attr(TrainingMaterialKind.Unsupported),\n // Order in the playlist\n rank: this.attr(-1),\n title: this.attr(\"\"),\n summary: this.attr(\"\"),\n attachment: this.attr(\n null,\n (element) => new TrainingMaterialAttachment(element)\n ),\n state: this.attr(TrainingMaterialState.New),\n vignetteUrl: this.attr(\"\"),\n tags: this.attr([]),\n };\n }\n\n static goToMaterialByRank(playlistId, rank) {\n router\n .push({\n path: `/training/playlists/${playlistId}/${rank}`,\n })\n .catch(() => {});\n }\n\n /**\n * Returns the list of all training material\n */\n static async fetchAllTrainingMaterials() {\n return this.api().get(\"/training-material\", { dataKey: \"result\" });\n }\n}\n","import Store from \"@/store/\";\nimport { getLanguageCodeFrom } from \"@/utils/locales\";\n\nexport const userRootLocale = () => {\n return getLanguageCodeFrom(Store.getters[\"Language/language\"]);\n};\n\n/**\n * Maps gesture provider messy ids into usable movement ids\n * This should ideally one day be streamlined in the activity definition.\n * @param gestureProviderId\n * @return {string|*}\n */\nexport default function gestureProviderIdToMovementId(gestureProviderId) {\n if (!gestureProviderId) {\n return \"\";\n }\n\n let movementId = gestureProviderId.replace(\"GestureProvider\", \"\");\n\n // Map the \"exceptions\"\n const staticMap = {\n HandsObjectsGrasping: \"HorizontalArmReaching\",\n FakeSteeringWheel: \"SteeringWheel\",\n HandsCoronal: \"VerticalHandsReaching\",\n ShouldersLateralAbdAdd: \"ShoulderAbductionAdduction\",\n ShouldersHorizontalAbdAdd: \"HorizontalShoulderAbductionAdduction\",\n ShouldersFlexionExtension: \"ShoulderFlexionExtension\",\n HandOpenCloseMcpa: \"HandGraspRelease\",\n HandPronationSupination: \"ForearmPronationSupination\",\n IndexThumbPinch: \"FingersPinch\",\n BodyWeightTransfer: \"LateralBodyWeightTransfer\",\n FootStepLateral: \"LateralStep\",\n FootStepForwardBackward: \"ForwardBackwardSteps\",\n TrunkLateralFlexionBodyCentric: \"TrunkLateralFlexion\",\n // Old gesture providers that must be ignored\n // Reference: https://intranet.mindmaze.ch/confluence/pages/viewpage.action?spaceKey=DHT&title=Normalized+distance+traveled\n ArmsUpDown: \"\",\n HandsUp: \"\",\n ShouldersToHandsLateral: \"\",\n FingersFlexionExtension: \"\",\n HandGrabbing: \"\",\n TrunkForwardFlexion: \"\", // Not to confuse with TrunkBackwardForwardFlexion\n KneesFlexionExtension: \"\",\n };\n if (staticMap[movementId] !== undefined) {\n movementId = staticMap[movementId];\n }\n\n return movementId;\n}\n","const storeName = \"_vidyoStore\";\nconst vidyoScript = \"../../../static/VidyoClient.js\";\n\nconst videoMaxes = {\n width: 768,\n height: 432,\n};\n\nconst connectionStatus = {\n disconnected: \"DISCONNECTED\",\n connecting: \"CONNECTING\",\n disconnecting: \"DISCONNECTING\",\n connected: \"CONNECTED\",\n failed: \"FAILED\",\n};\n\nconst libraryStates = {\n notLoaded: \"\",\n ready: \"READY\",\n retrying: \"RETRYING\",\n failed: \"FAILED\",\n failedVersion: \"FAILEDVERSION\",\n notAvailable: \"NOTAVAILABLE\",\n timedout: \"TIMEDOUT\",\n};\n\nexport { storeName, vidyoScript, connectionStatus, libraryStates, videoMaxes };\n","import Store from \"@/store\";\nimport { ApplicationInsights } from \"@microsoft/applicationinsights-web\";\nimport {\n getAppInsightCookie,\n removeAppInsightCookie,\n setAppInsightCookie,\n} from \"@/utils/cookies\";\nimport loadConfigData from \"@/services/configJson\";\n\n// See options in: https://github.com/microsoft/ApplicationInsights-JS\nlet appInsights = new ApplicationInsights({\n config: {\n enableAutoRouteTracking: false,\n disableFetchTracking: true,\n disableAjaxTracking: true,\n autoTrackPageVisitTime: true,\n // See: https://github.com/microsoft/ApplicationInsights-JS#ICookieMgrConfig\n cookieCfg: {\n setCookie: (name, value) => {\n setAppInsightCookie(name, value);\n },\n getCookie: (name) => {\n return getAppInsightCookie(name);\n },\n delCookie: (name) => {\n removeAppInsightCookie(name);\n },\n },\n },\n});\n\nloadConfigData().then((configData) => {\n appInsights.config.instrumentationKey =\n configData.AppInsightInstrumentationKey;\n appInsights.loadAppInsights();\n anonymizeInsightsData();\n});\n\nexport function getAppinsightInstance() {\n return appInsights;\n}\n\n/**\n * See: node_modules\\@microsoft\\applicationinsights-core-js\\src\\JavaScriptSDK.Interfaces\\ITelemetryItem.ts\n * for more information on the format.\n * @param name {string} Unique name of the event.\n */\nexport function trackEvent(name) {\n // Send user site id if available\n const siteId = getAuthUserSiteId();\n const customProperties = siteId ? { siteId: siteId } : undefined;\n\n getAppinsightInstance().trackEvent(\n {\n name: name,\n },\n customProperties\n );\n}\n\n/**\n * See: node_modules\\@microsoft\\applicationinsights-common\\src\\Interfaces\\IPageViewTelemetry.ts\n * for more information on the format.\n * @param name {string} Unique name of the page view\n */\nexport function trackPageView(name) {\n let pageViewData = {\n name: name,\n };\n\n // Send user site id if available\n const siteId = getAuthUserSiteId();\n if (siteId) {\n pageViewData.properties = {\n siteId: siteId,\n };\n }\n\n getAppinsightInstance().trackPageView(pageViewData);\n}\n\nfunction getAuthUserSiteId() {\n const siteId = Store.getters[\"Auth/siteId\"];\n\n // Do not return null data or empty guids\n if (!siteId || siteId === \"00000000-0000-0000-0000-000000000000\") {\n return \"\";\n }\n\n return siteId;\n}\n\nfunction anonymizeInsightsData() {\n // Since url contains patient ID, we remove every reference\n appInsights.addTelemetryInitializer((envelope) => {\n if (envelope) {\n if (envelope.baseData) {\n envelope.baseData.refUri = \"\";\n envelope.baseData.uri = \"\";\n envelope.baseData.url = \"\";\n envelope.baseData.PageUrl = \"\";\n }\n if (envelope.data) {\n envelope.data.PageUrl = \"\";\n }\n if (envelope.tags) {\n envelope.tags[\"ai.operation.name\"] = \"\";\n }\n if (envelope.ext && envelope.ext.trace) {\n envelope.ext.trace.name = \"\";\n }\n }\n });\n}\n","/**\n * Return the support routes with the provided route prefix.\n * E.g: /superadmin -> /superadmin/support/contact.\n * This permits to have common components displayed in different layouts\n * without breaking route paths.\n * @param routePrefix {string}\n * @return {[*]}\n */\nexport function getSupportRoutes(routePrefix) {\n return [\n {\n path: `${routePrefix}/support/contact-us`,\n component: () => import(\"@/pages/CommonPages/SupportPage/ContactUs.vue\"),\n meta: {\n requiresAuth: true,\n },\n },\n {\n path: `${routePrefix}/support/faq`,\n component: () =>\n import(\"@/pages/CommonPages/SupportPage/FrequentlyAskedQuestions.vue\"),\n meta: {\n requiresAuth: true,\n },\n },\n {\n path: `${routePrefix}/support/ifu`,\n component: () =>\n import(\"@/pages/CommonPages/SupportPage/InstructionsForUse.vue\"),\n meta: {\n requiresAuth: true,\n },\n },\n\n {\n path: `${routePrefix}/support/privacy-policy`,\n component: () =>\n import(\"@/pages/CommonPages/SupportPage/PrivacyPolicyView.vue\"),\n meta: {\n requiresAuth: true,\n },\n },\n ];\n}\n","import { getSupportRoutes } from \"@/router/supportRoutes\";\n\nconst routePrefix = \"/patient\";\n\nexport default [\n {\n path: routePrefix,\n component: () => import(\"@/pages/PatientPages/PatientHomePage\"),\n meta: {\n requiresPatient: true,\n },\n children: [\n ...getSupportRoutes(routePrefix),\n {\n path: \"\",\n name: \"Patient/Home\",\n redirect: \"/patient/profile\",\n component: () => import(\"@/pages/PatientPages/PatientHomePage/index\"),\n },\n {\n path: \"/patient/profile\",\n name: \"patient-profile\",\n component: () =>\n import(\"@/pages/PatientPages/PatientHomePage/PatientProfile\"),\n },\n ],\n },\n // Teleconsultation part\n {\n path: \"/my-meetings/:meetingId\",\n name: \"Patient/Meeting\",\n component: () => import(\"@/pages/PatientPages/PatientConferencePage\"),\n props: (route) => ({ meetingId: route.params.meetingId }),\n meta: {\n requiresPatient: true,\n },\n },\n];\n","/**\n * Return the profile routes with the provided route prefix.\n * E.g: /superadmin -> /superadmin/profile.\n * This permits to have common components displayed in different layouts\n * without breaking route paths.\n * @param routePrefix {string}\n * @return {[*]}\n */\nexport function getProfileRoutes(routePrefix) {\n return [\n {\n path: `${routePrefix}/profile`,\n component: () => import(\"@/pages/CommonPages/ProfilePage/index.vue\"),\n meta: {\n requiresAuth: true,\n },\n },\n ];\n}\n","export default [\n {\n path: \"/oauth/redirect\",\n name: \"oauth_redirect\",\n component: () => import(\"@/pages/CommonPages/OAuthPages/OAuthRedirect.vue\"),\n props: (route) => ({\n code: route.query.code,\n state: route.query.state,\n }),\n meta: {\n requiresTherapist: true,\n },\n },\n];\n","import { getProfileRoutes } from \"@/router/profileRoutes\";\nimport { getSupportRoutes } from \"@/router/supportRoutes\";\nimport { clearSelectedPatientStoreData } from \"@/store\";\nimport { THERAPIST_ROLE, SITEMANAGER_ROLE } from \"@/services/auth.js\";\nimport oAuthRoutes from \"@/router/oAuthRoutes\";\n\nconst routePrefix = \"/therapist\";\n\nexport default [\n // Default therapist layout\n {\n path: \"/\",\n component: () => import(\"@/pages/TherapistPages/TherapistHomePage\"),\n meta: {\n requiresTherapist: true,\n },\n children: [\n ...getSupportRoutes(routePrefix),\n ...getProfileRoutes(routePrefix),\n {\n path: \"/patient-list\",\n name: \"Therapist/Home\",\n component: () =>\n import(\"@/pages/TherapistPages/TherapistPatientListPage\"),\n beforeEnter: (to, from, next) => {\n // Clears potentially previous patient data present from the stores\n clearSelectedPatientStoreData();\n next();\n },\n props: (route) => ({\n showSuccessModal: route.params.showSuccessModal,\n patientSiteId: route.params.patientSiteId,\n isCreatedUserPasswordSet: route.params.isCreatedUserPasswordSet,\n }),\n },\n {\n path: \"/patient/:username\",\n name: \"Therapist/Patient\",\n redirect: \"/patient/:username/dashboard\",\n component: () =>\n import(\"@/pages/TherapistPages/TherapistPatientManagementPages\"),\n meta: {\n requiresTherapist: true,\n },\n props: (route) => ({\n patientUsername: route.params.username,\n }),\n children: [\n {\n path: \"dashboard\",\n name: \"Therapist/Patient/Dashboard\",\n component: () =>\n import(\n \"@/pages/TherapistPages/TherapistPatientManagementPages/DashboardPage\"\n ),\n props: (route) => ({\n currentUsername: route.params.username,\n openAttGoalModal: route.params.openAttGoalModal,\n }),\n },\n {\n path: \"plan\",\n name: \"Therapist/Patient/Plan\",\n component: () =>\n import(\n \"@/pages/TherapistPages/TherapistPatientManagementPages/TherapyPlanPage\"\n ),\n props: (route) => ({\n currentUsername: route.params.username,\n }),\n },\n {\n path: \"teleconsultation\",\n name: \"Therapist/Patient/Teleconsultation\",\n component: () =>\n import(\n \"@/pages/TherapistPages/TherapistPatientManagementPages/TeleRehabPage/PatientTeleRehab\"\n ),\n props: (route) => ({\n currentUsername: route.params.username,\n }),\n },\n {\n path: \"monitor\",\n name: \"Therapist/Patient/Monitor\",\n component: () =>\n import(\n \"@/pages/TherapistPages/TherapistPatientManagementPages/MonitorPage\"\n ),\n props: (route) => ({\n currentUsername: route.params.username,\n }),\n },\n {\n path: \"review\",\n name: \"Therapist/Patient/Review\",\n component: () =>\n import(\n \"@/pages/TherapistPages/TherapistPatientManagementPages/ReviewPage\"\n ),\n props: (route) => ({\n currentUsername: route.params.username,\n expandSessionList: route.params.expandSessionList,\n }),\n },\n {\n path: \"assessment\",\n name: \"Therapist/Patient/Assessment\",\n component: () =>\n import(\n \"@/pages/TherapistPages/TherapistPatientManagementPages/AssessmentPage\"\n ),\n props: (route) => ({\n currentUsername: route.params.username,\n }),\n },\n {\n path: \"epro\",\n name: \"Therapist/Patient/EPRO\",\n component: () =>\n import(\n \"@/pages/TherapistPages/TherapistPatientManagementPages/EPROPage\"\n ),\n props: (route) => ({\n currentUsername: route.params.username,\n }),\n },\n {\n path: \"profile\",\n name: \"Therapist/Patient/Profile\",\n component: () =>\n import(\n \"@/pages/TherapistPages/TherapistPatientManagementPages/ProfilePage\"\n ),\n props: (route) => ({\n currentUsername: route.params.username,\n }),\n },\n ],\n },\n {\n path: \"/new-patient\",\n name: \"Therapist/AddPatient\",\n component: () =>\n import(\"@/pages/TherapistPages/TherapistAddPatientPage\"),\n props: (route) => ({\n patientSiteId: route.query.patientSiteId,\n nextRoute: route.query.nextRoute,\n }),\n meta: {\n requiresTherapist: true,\n },\n },\n {\n path: \"therapist-admin/site-units/assigned/:siteUnitId/patients/new\",\n component: () =>\n import(\"@/pages/TherapistPages/TherapistAddPatientPage\"),\n props: (route) => ({\n siteUnitId: route.params.siteUnitId,\n }),\n meta: {\n requiresTherapist: true,\n },\n },\n {\n path: \"/epro-patients\",\n name: \"Therapist/EPROPatientList\",\n component: () => import(\"@/pages/TherapistPages/EPROPatientListPage\"),\n meta: {\n requiresTherapist: true,\n },\n },\n {\n path: \"/meetings\",\n name: \"Therapist/Meetings\",\n component: () =>\n import(\"@/pages/TherapistPages/TherapistTeleRehabPage\"),\n meta: {\n requiresTherapist: true,\n },\n beforeEnter: (to, from, next) => {\n // Clears potentially previous patient data present from the stores\n clearSelectedPatientStoreData();\n next();\n },\n },\n {\n path: \"training\",\n name: \"Therapist/TrainingMaterial\",\n component: () =>\n import(\"@/pages/TherapistPages/TherapistTrainingMaterialPages\"),\n meta: {\n requiresTherapist: true,\n },\n redirect: \"/training/playlists\",\n children: [\n {\n path: \"playlists\",\n name: \"Therapist/TrainingMaterial/PlayLists\",\n component: () =>\n import(\n \"@/pages/TherapistPages/TherapistTrainingMaterialPages/TrainingMaterialPlayListPage\"\n ),\n meta: {\n requiresTherapist: true,\n },\n },\n {\n path: \"playlists/:playlistId/:rank\",\n name: \"Therapist/TrainingMaterial/PlayList\",\n component: () =>\n import(\n \"@/pages/TherapistPages/TherapistTrainingMaterialPages/TrainingMaterialViewerPage\"\n ),\n meta: {\n requiresTherapist: true,\n },\n props: (route) => ({\n playlistId: route.params.playlistId,\n rank: route.params.rank,\n }),\n },\n ],\n },\n {\n path: \"templates\",\n name: \"Therapist/Templates\",\n component: () =>\n import(\"@/pages/TherapistPages/TherapistTemplatesPage\"),\n meta: {\n requiresTherapist: true,\n },\n },\n\n // Therapist admin routes\n {\n path: \"therapist-admin/therapists\",\n name: \"TherapistAdmin/Therapists\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/UserListPage\"),\n props: {\n \"user-type\": \"therapist\",\n },\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/therapists/new\",\n name: \"TherapistAdmin/CreateTherapist\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/AddUser\"),\n props: {\n \"user-type\": \"therapist\",\n },\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/therapists/:username\",\n name: \"TherapistAdmin/EditTherapist\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/EditUser\"),\n props: (route) => ({\n username: route.params.username,\n }),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/site-managers\",\n name: \"TherapistAdmin/SiteManagers\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/UserListPage\"),\n props: {\n \"user-type\": \"site\",\n },\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/site-managers/new\",\n name: \"TherapistAdmin/CreateSiteManager\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/AddUser\"),\n props: {\n \"user-type\": \"site\",\n },\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/site-managers/:username\",\n name: \"TherapistAdmin/EditSiteManager\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/EditUser\"),\n props: (route) => ({\n username: route.params.username,\n }),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/archived-users\",\n name: \"TherapistAdmin/ArchivedUsers\",\n component: () =>\n import(\n \"@/pages/SiteManagerPages/SiteManagerHomePage/ArchivedUsersPage.vue\"\n ),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/archived-users/:username\",\n name: \"TherapistAdmin/EditArchivedUser\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/EditUser\"),\n props: (route) => ({\n username: route.params.username,\n }),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/license\",\n name: \"TherapistAdmin/License\",\n component: () =>\n import(\n \"@/pages/SiteManagerPages/SiteManagerHomePage/LicenseOverview\"\n ),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/site-parameters\",\n name: \"TherapistAdmin/SiteManagement/SiteParameters\",\n component: () => import(\"@/pages/SiteManagerPages/SiteParameters\"),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/patient-training-data\",\n name: \"TherapistAdmin/ExportTrainingData\",\n component: () =>\n import(\"@/pages/TherapistPages/AdminPages/PatientTrainingData\"),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/personal-access-token\",\n name: \"TherapistAdmin/SiteManagement/PersonalAccessToken\",\n component: () => import(\"@/pages/SiteManagerPages/PersonalAccessToken\"),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/personal-access-token/new\",\n name: \"TherapistAdmin/SiteManagement/CreatePersonalAccessToken\",\n component: () =>\n import(\n \"@/pages/SiteManagerPages/PersonalAccessToken/AddPersonalAccessToken\"\n ),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n // Site Units\n {\n path: \"therapist-admin/site-units\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/SiteUnitManagementPages/SiteUnitListPage\"\n ),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/site-units/new\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteUnit/AddSiteUnit\"),\n props: (route) => ({ siteId: route.params.siteId }),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/site-units/assigned/:siteUnitId/:tab\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteUnit/EditSiteUnit\"),\n props: (route) => ({\n siteUnitId: route.params.siteUnitId,\n tab: route.params.tab,\n }),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/site-units/assigned/:siteUnitId/:tab/new\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/AddUser\"),\n props: (route) => ({\n \"user-type\":\n route.params.tab === \"therapists\"\n ? THERAPIST_ROLE\n : SITEMANAGER_ROLE,\n siteUnitId: route.params.siteUnitId,\n tab: route.params.tab,\n }),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/site-units/assigned/:siteUnitId/patients/:username\",\n component: () =>\n import(\n \"@/pages/TherapistPages/TherapistPatientManagementPages/ProfilePage\"\n ),\n props: (route) => ({\n siteUnitId: route.params.siteUnitId,\n currentUsername: route.params.username,\n }),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/site-units/assigned/:siteUnitId/:tab/:username\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/EditUser\"),\n props: (route) => ({\n siteUnitId: route.params.siteUnitId,\n tab: route.params.tab,\n username: route.params.username,\n }),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n {\n path: \"therapist-admin/site-units/unassigned/:tab\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteUnit/UnassignedUsersPage\"),\n props: (route) => ({\n tab: route.params.tab,\n unassignedUserIds: route.params.unassignedUserIds,\n }),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n // Site managers, therapists\n {\n path: \"therapist-admin/site-units/unassigned/:tab/:username\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/EditUser\"),\n props: (route) => ({\n tab: route.params.tab,\n username: route.params.username,\n }),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n // Patients\n {\n path: \"therapist-admin/site-units/unassigned/:tab/:username/profile\",\n component: () =>\n import(\n \"@/pages/TherapistPages/TherapistPatientManagementPages/ProfilePage\"\n ),\n props: (route) => ({\n currentUsername: route.params.username,\n }),\n meta: {\n requiresSuperTherapist: true,\n },\n },\n ],\n },\n // Teleconsultation meeting page\n {\n path: \"/meetings/:meetingId\",\n name: \"Therapist/LiveMeeting\",\n component: () => import(\"@/pages/TherapistPages/TherapistConferencePage\"),\n meta: {\n requiresTherapist: true,\n },\n props: (route) => ({\n meetingId: route.params.meetingId,\n }),\n },\n // OAuth Zoom authentication\n ...oAuthRoutes,\n];\n","export default [\n {\n path: \"customers\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/CustomerManagementPages/CustomerListPage\"\n ),\n },\n {\n path: \"customers/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/CustomerManagementPages/CustomerCreatePage\"\n ),\n props: (route) => ({\n entityIdentifier: route.query.entityIdentifier,\n siteId: route.query.siteId,\n }),\n },\n {\n path: \"customers/:customerId\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/CustomerManagementPages/CustomerDetailsPage\"\n ),\n props: (route) => ({ customerId: route.params.customerId }),\n },\n];\n","import customerRoutes from \"@/router/entities/customer\";\n\nexport default [\n {\n path: \"site-management\",\n component: () =>\n import(\"@/pages/EntityManagementPages/SiteManagementPages/SiteListPage\"),\n },\n {\n path: \"site-management/:siteId/:tab\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/SiteManagementPages/SiteDetailsPage\"\n ),\n props: (route) => ({\n siteId: route.params.siteId,\n tab: route.params.tab,\n }),\n children: [...customerRoutes],\n },\n];\n","export default [\n /**\n * Patients management routes (DPO)\n */\n {\n path: \"site-management/:siteId/patients/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/PatientManagementPages/PatientDetailsPage\"\n ),\n props: (route) => ({\n siteId: route.params.siteId,\n username: route.params.username,\n }),\n },\n /**\n * Therapists management routes\n */\n {\n path: \"site-management/:siteId/therapists/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/TherapistManagementPages/TherapistCreationPage\"\n ),\n props: (route) => ({ siteId: route.params.siteId }),\n },\n {\n path: \"site-management/:siteId/therapists/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/TherapistManagementPages/TherapistDetailsPage\"\n ),\n props: (route) => ({\n siteId: route.params.siteId,\n username: route.params.username,\n }),\n },\n /**\n * Site managers management routes\n */\n {\n path: \"site-management/:siteId/site-managers/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/SiteManagerManagementPages/SiteManagerCreationPage\"\n ),\n props: (route) => ({ siteId: route.params.siteId }),\n },\n {\n path: \"site-management/:siteId/site-managers/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/SiteManagerManagementPages/SiteManagerDetailsPage\"\n ),\n props: (route) => ({\n siteId: route.params.siteId,\n username: route.params.username,\n }),\n },\n /**\n * Customers management routes\n */\n {\n path: \"site-management/:siteId/customers/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/CustomerManagementPages/CustomerCreatePage\"\n ),\n props: (route) => ({\n entityIdentifier: route.query.entityIdentifier,\n siteId: route.params.siteId,\n }),\n },\n {\n path: \"site-management/:siteId/customers/:customerId\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/CustomerManagementPages/CustomerDetailsPage\"\n ),\n props: (route) => ({\n siteId: route.params.siteId,\n customerId: route.params.customerId,\n }),\n },\n /**\n * Licenses management routes\n */\n {\n path: \"site-management/:siteId/licences/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/LicenseManagementPages/LicenseCreatePage\"\n ),\n props: (route) => ({ siteId: route.params.siteId }),\n },\n {\n path: \"site-management/:siteId/licences/:licenseId\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/LicenseManagementPages/LicenseDetailsPage\"\n ),\n props: (route) => ({\n siteId: route.params.siteId,\n licenseId: route.params.licenseId,\n }),\n },\n /**\n * Patient licenses management routes\n */\n {\n path: \"site-management/:siteId/licences/patient-license/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/PatientLicenseManagementPages/PatientLicenseCreatePage\"\n ),\n props: (route) => ({ siteId: route.params.siteId }),\n },\n {\n path: \"site-management/:siteId/licences/patient-license/:licenseId\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/PatientLicenseManagementPages/PatientLicenseDetailsPage\"\n ),\n props: (route) => ({\n siteId: route.params.siteId,\n licenseId: route.params.licenseId,\n }),\n },\n /**\n * Assets management routes\n */\n {\n path: \"site-management/:siteId/assets/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/AssetManagementPages/AssetCreatePage\"\n ),\n props: (route) => ({ siteId: route.params.siteId }),\n },\n {\n path: \"site-management/:siteId/assets/:assetId\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/AssetManagementPages/AssetDetailsPage\"\n ),\n props: (route) => ({\n siteId: route.params.siteId,\n assetId: route.params.assetId,\n }),\n },\n /**\n * Site units management routes\n */\n {\n path: \"site-management/:siteId/site-units/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/SiteUnitManagementPages/SiteUnitCreatePage\"\n ),\n props: (route) => ({ siteId: route.params.siteId }),\n },\n {\n path: \"site-management/:siteId/site-units/assigned/:siteUnitId/:tab\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/SiteUnitManagementPages/SiteUnitDetailsPage\"\n ),\n props: (route) => ({\n siteId: route.params.siteId,\n siteUnitId: route.params.siteUnitId,\n tab: route.params.tab,\n }),\n },\n {\n path: \"site-management/:siteId/site-units/assigned/:siteUnitId/site-managers/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/SiteManagerManagementPages/SiteManagerCreationPage\"\n ),\n props: (route) => ({\n siteId: route.params.siteId,\n siteUnitId: route.params.siteUnitId,\n }),\n },\n {\n path: \"site-management/:siteId/site-units/assigned/:siteUnitId/site-managers/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/SiteManagerManagementPages/SiteManagerDetailsPage\"\n ),\n props: (route) => ({\n siteId: route.params.siteId,\n siteUnitId: route.params.siteUnitId,\n username: route.params.username,\n }),\n },\n {\n path: \"site-management/:siteId/site-units/assigned/:siteUnitId/therapists/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/TherapistManagementPages/TherapistCreationPage\"\n ),\n props: (route) => ({\n siteId: route.params.siteId,\n siteUnitId: route.params.siteUnitId,\n }),\n },\n {\n path: \"site-management/:siteId/site-units/assigned/:siteUnitId/therapists/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/TherapistManagementPages/TherapistDetailsPage\"\n ),\n props: (route) => ({\n siteId: route.params.siteId,\n siteUnitId: route.params.siteUnitId,\n username: route.params.username,\n }),\n },\n {\n path: \"site-management/:siteId/site-units/assigned/:siteUnitId/patients/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/PatientManagementPages/PatientDetailsPage\"\n ),\n props: (route) => ({\n siteId: route.params.siteId,\n siteUnitId: route.params.siteUnitId,\n username: route.params.username,\n }),\n },\n {\n path: \"site-management/:siteId/site-units/unassigned/:tab\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteUnit/UnassignedUsersPage\"),\n props: (route) => ({\n tab: route.params.tab,\n unassignedUserIds: route.params.unassignedUserIds,\n siteId: route.params.siteId,\n }),\n },\n {\n path: \"site-management/:siteId/site-units/unassigned/therapists/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/TherapistManagementPages/TherapistDetailsPage\"\n ),\n props: (route) => ({\n username: route.params.username,\n siteId: route.params.siteId,\n }),\n },\n {\n path: \"site-management/:siteId/site-units/unassigned/site-managers/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/SiteManagerManagementPages/SiteManagerDetailsPage\"\n ),\n props: (route) => ({\n username: route.params.username,\n siteId: route.params.siteId,\n }),\n },\n // For DPO\n {\n path: \"site-management/:siteId/site-units/unassigned/patients/:username/profile\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/PatientManagementPages/PatientDetailsPage\"\n ),\n props: (route) => ({\n siteId: route.params.siteId,\n username: route.params.username,\n unassignedUser: true,\n }),\n },\n];\n","export default [\n {\n path: \"license\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/LicenseManagementPages/LicenseListPage\"\n ),\n },\n {\n path: \"license/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/LicenseManagementPages/LicenseCreatePage\"\n ),\n },\n {\n path: \"license/:licenseId\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/LicenseManagementPages/LicenseDetailsPage\"\n ),\n props: (route) => ({ licenseId: route.params.licenseId }),\n },\n];\n","export default [\n {\n path: \"patient-license\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/PatientLicenseManagementPages/PatientLicenseListPage\"\n ),\n },\n {\n path: \"patient-license/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/PatientLicenseManagementPages/PatientLicenseCreatePage\"\n ),\n },\n {\n path: \"patient-license/:licenseId\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/PatientLicenseManagementPages/PatientLicenseDetailsPage\"\n ),\n props: (route) => ({ licenseId: route.params.licenseId }),\n },\n];\n","export default [\n {\n path: \"asset\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/AssetManagementPages/AssetListPage\"\n ),\n },\n {\n path: \"asset/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/AssetManagementPages/AssetCreatePage\"\n ),\n },\n {\n path: \"asset/:assetId\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/AssetManagementPages/AssetDetailsPage\"\n ),\n props: (route) => ({ assetId: route.params.assetId }),\n },\n];\n","export default [\n {\n path: \"site-manager\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/SiteManagerManagementPages/SiteManagerListPage\"\n ),\n },\n {\n path: \"site-manager/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/SiteManagerManagementPages/SiteManagerCreationPage\"\n ),\n props: (route) => ({\n siteId: route.query.siteId,\n }),\n },\n {\n path: \"site-manager/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/SiteManagerManagementPages/SiteManagerDetailsPage\"\n ),\n props: true,\n },\n];\n","export default [\n {\n path: \"therapist\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/TherapistManagementPages/TherapistListPage\"\n ),\n },\n {\n path: \"therapist/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/TherapistManagementPages/TherapistCreationPage\"\n ),\n props: (route) => ({\n siteId: route.query.siteId,\n }),\n },\n {\n path: \"therapist/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/TherapistManagementPages/TherapistDetailsPage\"\n ),\n props: true,\n },\n];\n","export default [\n {\n path: \"administrator\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/AdministratorManagementPages/AdministratorListPage\"\n ),\n },\n {\n path: \"administrator/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/AdministratorManagementPages/AdministratorCreatePage\"\n ),\n },\n {\n path: \"administrator/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/AdministratorManagementPages/AdministratorDetailsPage\"\n ),\n props: (route) => ({ username: route.params.username }),\n },\n {\n path: \"patient-management\",\n component: () => import(\"@/pages/AdminPages/PatientManagementPage\"),\n props: true,\n },\n];\n","export default [\n {\n path: \"data-export\",\n component: () => import(\"@/pages/AdminPages/DataExportPage\"),\n },\n];\n","export default [\n {\n path: \"optional-feature-activation\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/OptionalFeatureManagementPages/FeatureActivationListPage\"\n ),\n },\n {\n path: \"optional-feature-activation/:featureKeyName\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/OptionalFeatureManagementPages/FeatureActivationDetailsPage\"\n ),\n props: (route) => ({ featureKeyName: route.params.featureKeyName }),\n },\n];\n","export default [\n {\n path: \"feedbackReport\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/FeedbackReportManagementPages/FeedbackReportListPage\"\n ),\n },\n {\n path: \"feedbackReport/:feedbackReportId\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/FeedbackReportManagementPages/FeedbackReportDetailsPage\"\n ),\n props: true,\n },\n];\n","export default [\n {\n path: \"archived-users\",\n component: () =>\n import(\"@/pages/EntityManagementPages/ArchivedUsersManagementPages\"),\n },\n {\n path: \"archived-users/patient/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/PatientManagementPages/PatientDetailsPage\"\n ),\n props: true,\n },\n {\n path: \"archived-users/therapist/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/TherapistManagementPages/TherapistDetailsPage\"\n ),\n props: true,\n },\n {\n path: \"archived-users/site-manager/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/SiteManagerManagementPages/SiteManagerDetailsPage\"\n ),\n props: true,\n },\n {\n path: \"archived-users/dpoadmin/:username\",\n component: () =>\n import(\"@/pages/EntityManagementPages/DPOManagementPages/DPODetailsPage\"),\n props: true,\n },\n {\n path: \"archived-users/administrator/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/AdministratorManagementPages/AdministratorDetailsPage\"\n ),\n props: true,\n },\n];\n","import customerRoutes from \"@/router/entities/customer\";\nimport siteRoutes from \"@/router/entities/site\";\nimport siteManagementRoutes from \"@/router/entities/siteManagement\";\nimport licenseRoutes from \"@/router/entities/license\";\nimport patientLicenseRoutes from \"@/router/entities/patientLicense\";\nimport assetRoutes from \"@/router/entities/asset\";\nimport siteManagerRoutes from \"@/router/entities/siteManager\";\nimport therapistRoutes from \"@/router/entities/therapist\";\nimport administratorRoutes from \"@/router/entities/administrator\";\nimport dataExportRoutes from \"@/router/dataExportRoutes\";\nimport optionalFeatureActivationRoutes from \"@/router/entities/optionalFeatureActivation\";\nimport feedbackReportRoutes from \"@/router/entities/feedbackReport\";\nimport archivedUsersRoutes from \"@/router/entities/archivedUsers\";\nimport { getSupportRoutes } from \"@/router/supportRoutes\";\nimport { getProfileRoutes } from \"@/router/profileRoutes\";\n\nconst routePrefix = \"/admin\";\n\nexport default [\n {\n path: routePrefix,\n component: () => import(\"@/pages/AdminPages/AdminHomePage\"),\n meta: {\n requiresAdmin: true,\n },\n children: [\n ...getSupportRoutes(routePrefix),\n ...getProfileRoutes(routePrefix),\n ...customerRoutes,\n ...siteRoutes,\n ...licenseRoutes,\n ...patientLicenseRoutes,\n ...assetRoutes,\n ...siteManagerRoutes,\n ...siteManagementRoutes,\n ...therapistRoutes,\n ...administratorRoutes,\n ...dataExportRoutes,\n ...optionalFeatureActivationRoutes,\n ...feedbackReportRoutes,\n ...archivedUsersRoutes,\n {\n path: \"\",\n name: \"Admin/Home\",\n component: () => import(\"@/pages/AdminPages/AdminHomePage/Dashboard\"),\n },\n ],\n },\n];\n","export default [\n {\n path: \"user-session\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/UserSessionManagementPages/UserSessionListPage\"\n ),\n },\n];\n","export default [\n {\n path: \"dpoadmin\",\n component: () =>\n import(\"@/pages/EntityManagementPages/DPOManagementPages/DPOListPage\"),\n },\n {\n path: \"dpoadmin/new\",\n component: () =>\n import(\"@/pages/EntityManagementPages/DPOManagementPages/DPOCreatePage\"),\n },\n {\n path: \"dpoadmin/:username\",\n component: () =>\n import(\"@/pages/EntityManagementPages/DPOManagementPages/DPODetailsPage\"),\n props: (route) => ({ username: route.params.username }),\n },\n];\n","export default [\n {\n path: \"patient\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/PatientManagementPages/PatientListPage\"\n ),\n },\n {\n path: \"patient/:username\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/PatientManagementPages/PatientDetailsPage\"\n ),\n props: true,\n },\n];\n","export default [\n {\n path: \"customer-notification\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/CustomerNotificationManagementPages/CustomerNotificationListPage\"\n ),\n },\n {\n path: \"customer-notification/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/CustomerNotificationManagementPages/CustomerNotificationCreatePage\"\n ),\n },\n {\n path: \"customer-notification/:customerNotificationId\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/CustomerNotificationManagementPages/CustomerNotificationDetailsPage\"\n ),\n props: (route) => ({\n customerNotificationId: route.params.customerNotificationId,\n }),\n },\n];\n","export default [\n {\n path: \"optional-feature-definition\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/OptionalFeatureManagementPages/FeatureDefinitionListPage\"\n ),\n },\n {\n path: \"optional-feature-definition/new\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/OptionalFeatureManagementPages/FeatureDefinitionCreatePage\"\n ),\n },\n {\n path: \"optional-feature-definition/:featureId\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/OptionalFeatureManagementPages/FeatureDefinitionDetailsPage\"\n ),\n props: (route) => ({ featureId: route.params.featureId }),\n },\n];\n","import customerRoutes from \"@/router/entities/customer\";\nimport siteRoutes from \"@/router/entities/site\";\nimport siteManagementRoutes from \"@/router/entities/siteManagement\";\nimport licenseRoutes from \"@/router/entities/license\";\nimport patientLicenseRoutes from \"@/router/entities/patientLicense\";\nimport userSessionRoutes from \"@/router/entities/user-session\";\nimport assetRoutes from \"@/router/entities/asset\";\nimport administratorRoutes from \"@/router/entities/administrator\";\nimport dpoRoutes from \"@/router/entities/dpoadmin\";\nimport therapistRoutes from \"@/router/entities/therapist\";\nimport patientRoutes from \"@/router/entities/patient\";\nimport siteManagerRoutes from \"@/router/entities/siteManager\";\nimport customerNotificationRoutes from \"@/router/entities/customerNotification\";\nimport dataExportRoutes from \"@/router/dataExportRoutes\";\nimport optionalFeatureDefinitionRoutes from \"@/router/entities/optionalFeatureDefinition\";\nimport optionalFeatureActivationRoutes from \"@/router/entities/optionalFeatureActivation\";\nimport feedbackReportRoutes from \"@/router/entities/feedbackReport\";\nimport archivedUsersRoutes from \"@/router/entities/archivedUsers\";\nimport { getSupportRoutes } from \"@/router/supportRoutes\";\nimport { getProfileRoutes } from \"@/router/profileRoutes\";\n\nconst routePrefix = \"/superadmin\";\n\nexport default [\n {\n path: routePrefix,\n component: () => import(\"@/pages/AdminPages/SuperAdminHomePage\"),\n meta: {\n requiresSuperAdmin: true,\n },\n children: [\n ...getSupportRoutes(routePrefix),\n ...getProfileRoutes(routePrefix),\n ...customerRoutes,\n ...siteRoutes,\n ...siteManagementRoutes,\n ...licenseRoutes,\n ...patientLicenseRoutes,\n ...assetRoutes,\n ...userSessionRoutes,\n ...administratorRoutes,\n ...dpoRoutes,\n ...therapistRoutes,\n ...patientRoutes,\n ...siteManagerRoutes,\n ...customerNotificationRoutes,\n ...dataExportRoutes,\n ...optionalFeatureDefinitionRoutes,\n ...optionalFeatureActivationRoutes,\n ...feedbackReportRoutes,\n ...archivedUsersRoutes,\n {\n path: \"emails\",\n name: \"emailTest\",\n component: () =>\n import(\"@/pages/AdminPages/SuperAdminHomePage/EmailTestPage.vue\"),\n },\n {\n path: \"activity-definition\",\n name: \"activityDefinition\",\n component: () =>\n import(\n \"@/pages/ReferencePages/ActivityDefinitionPage/ActivityDefinitionPage.vue\"\n ),\n },\n {\n path: \"\",\n name: \"SuperAdmin/Home\",\n component: () =>\n import(\"@/pages/AdminPages/SuperAdminHomePage/Dashboard\"),\n },\n ],\n },\n];\n","import { THERAPIST_ROLE, SITEMANAGER_ROLE } from \"@/services/auth.js\";\n\nexport default [\n {\n path: \"site-units\",\n component: () =>\n import(\n \"@/pages/EntityManagementPages/SiteUnitManagementPages/SiteUnitListPage\"\n ),\n },\n {\n path: \"site-units/new\",\n component: () => import(\"@/pages/SiteManagerPages/SiteUnit/AddSiteUnit\"),\n props: (route) => ({ siteId: route.params.siteId }),\n },\n {\n path: \"site-units/assigned/:siteUnitId/:tab\",\n component: () => import(\"@/pages/SiteManagerPages/SiteUnit/EditSiteUnit\"),\n props: (route) => ({\n siteUnitId: route.params.siteUnitId,\n tab: route.params.tab,\n }),\n },\n {\n path: \"site-units/assigned/:siteUnitId/:tab/new\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/AddUser\"),\n props: (route) => ({\n siteUnitId: route.params.siteUnitId,\n tab: route.params.tab,\n \"user-type\":\n route.params.tab === \"therapists\" ? THERAPIST_ROLE : SITEMANAGER_ROLE,\n }),\n },\n {\n path: \"site-units/assigned/:siteUnitId/:tab/:username\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/EditUser\"),\n props: (route) => ({\n siteUnitId: route.params.siteUnitId,\n tab: route.params.tab,\n username: route.params.username,\n }),\n },\n {\n path: \"site-units/unassigned/:tab/:username\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/EditUser\"),\n props: (route) => ({\n tab: route.params.tab,\n username: route.params.username,\n }),\n },\n {\n path: \"site-units/unassigned/:tab\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteUnit/UnassignedUsersPage\"),\n props: (route) => ({\n tab: route.params.tab,\n unassignedUserIds: route.params.unassignedUserIds,\n }),\n },\n];\n","import { getSupportRoutes } from \"@/router/supportRoutes\";\nimport { getProfileRoutes } from \"@/router/profileRoutes\";\nimport siteUnitRoutes from \"@/router/entities/siteUnit\";\n\nconst routePrefix = \"/site-manager\";\n\nexport default [\n {\n path: \"/\",\n redirect: \"therapists\",\n name: \"SiteManager/Home\",\n component: () => import(\"@/pages/SiteManagerPages/SiteManagerHomePage\"),\n meta: {\n requiresSiteManager: true,\n },\n children: [\n ...getSupportRoutes(routePrefix),\n ...getProfileRoutes(routePrefix),\n ...siteUnitRoutes,\n {\n path: \"therapists\",\n name: \"SiteManager/Therapists\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/UserListPage\"),\n props: {\n \"user-type\": \"therapist\",\n },\n },\n {\n path: \"therapists/new\",\n name: \"SiteManager/CreateTherapist\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/AddUser\"),\n props: (route) => ({\n \"user-type\": \"therapist\",\n siteUnitId: route.params.siteUnitId,\n }),\n },\n {\n path: \"therapists/:username\",\n name: \"SiteManager/EditTherapist\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/EditUser\"),\n props: (route) => ({\n username: route.params.username,\n }),\n },\n {\n path: \"site-managers\",\n name: \"SiteManager/SiteManagers\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/UserListPage\"),\n props: {\n \"user-type\": \"site\",\n },\n },\n {\n path: \"site-managers/new\",\n name: \"SiteManager/CreateSiteManager\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/AddUser\"),\n props: {\n \"user-type\": \"site\",\n },\n },\n {\n path: \"site-managers/:username\",\n name: \"SiteManager/EditSiteManager\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/EditUser\"),\n props: (route) => ({\n username: route.params.username,\n }),\n },\n {\n path: \"archived-users\",\n name: \"SiteManager/ArchivedUsers\",\n component: () =>\n import(\n \"@/pages/SiteManagerPages/SiteManagerHomePage/ArchivedUsersPage.vue\"\n ),\n },\n {\n path: \"archived-users/:username\",\n name: \"SiteManager/EditArchivedUser\",\n component: () =>\n import(\"@/pages/SiteManagerPages/SiteManagerHomePage/EditUser\"),\n props: (route) => ({\n username: route.params.username,\n }),\n },\n {\n path: \"license\",\n name: \"SiteManager/License\",\n component: () =>\n import(\n \"@/pages/SiteManagerPages/SiteManagerHomePage/LicenseOverview\"\n ),\n },\n {\n path: \"site-parameters\",\n name: \"SiteManager/SiteManagement/SiteParameters\",\n component: () => import(\"@/pages/SiteManagerPages/SiteParameters\"),\n },\n {\n path: \"personal-access-token\",\n name: \"SiteManager/SiteManagement/PersonalAccessToken\",\n component: () => import(\"@/pages/SiteManagerPages/PersonalAccessToken\"),\n },\n {\n path: \"personal-access-token/new\",\n name: \"SiteManager/SiteManagement/CreatePersonalAccessToken\",\n component: () =>\n import(\n \"@/pages/SiteManagerPages/PersonalAccessToken/AddPersonalAccessToken\"\n ),\n },\n ],\n },\n];\n","export default [\n {\n path: \"/onboarding/privacy-policy\",\n name: \"onboarding/privacy-policy\",\n component: () =>\n import(\"@/pages/CommonPages/OnboardingPages/PrivacyAcceptPage\"),\n meta: {\n requiresAuth: true,\n },\n },\n {\n path: \"/onboarding/set-password\",\n name: \"onboarding/set-password\",\n component: () =>\n import(\"@/pages/CommonPages/OnboardingPages/SetPasswordPage\"),\n props: (route) => ({\n userId: route.query.id,\n token: route.query.token,\n emailLanguage: route.query.culture,\n }),\n },\n {\n path: \"/onboarding/verify-email\",\n name: \"onboarding/verify-email\",\n component: () =>\n import(\"@/pages/CommonPages/OnboardingPages/VerifyEmailPage\"),\n props: (route) => ({\n userId: route.query.id,\n token: route.query.token,\n emailLanguage: route.query.culture,\n }),\n },\n {\n path: \"/onboarding/change-email\",\n name: \"onboarding/change-email\",\n component: () =>\n import(\"@/pages/CommonPages/OnboardingPages/ChangeEmailPage\"),\n props: (route) => ({\n userId: route.query.id,\n newEmail: route.query.newEmail,\n token: route.query.token,\n emailLanguage: route.query.culture,\n }),\n },\n {\n path: \"/onboarding/consent-form\",\n name: \"onboarding/consent-form\",\n component: () => import(\"@/pages/CommonPages/OnboardingPages/ConsentPage\"),\n props: (route) => ({ userId: route.query.id, token: route.query.token }),\n meta: {\n requiresAuth: true,\n },\n },\n {\n path: \"/onboarding/token-expired\",\n name: \"onboarding/token-expired\",\n component: () =>\n import(\"@/pages/CommonPages/OnboardingPages/TokenExpiredPage\"),\n },\n {\n path: \"/onboarding/change-email-token-expired\",\n name: \"onboarding/change-email-token-expired\",\n component: () =>\n import(\"@/pages/CommonPages/OnboardingPages/ChangeEmailTokenExpiredPage\"),\n },\n {\n path: \"/onboarding/requestlink\",\n name: \"requestLink\",\n component: () =>\n import(\"@/pages/CommonPages/OnboardingPages/RequestActivationLinkPage\"),\n },\n];\n","export default [\n {\n path: \"/reset-password/request\",\n name: \"forgotPassword\",\n component: () => import(\"@/pages/CommonPages/ForgotPasswordPage\"),\n },\n {\n path: \"/reset-password/reset\",\n name: \"resetPassword\",\n component: () => import(\"@/pages/CommonPages/ResetPasswordPage\"),\n props: (route) => ({\n userId: route.query.id,\n token: route.query.token,\n title: route.params.title,\n userEmail: route.params.email,\n }),\n },\n {\n path: \"/reset-password/expired\",\n name: \"ResetPasswordExpired\",\n component: () =>\n import(\"@/pages/CommonPages/PasswordResetTokenExpiredPage\"),\n props: (route) => ({ autoCloseWindow: route.params.autoCloseWindow }),\n },\n {\n path: \"/reset-password/confirmation\",\n name: \"confirmation\",\n component: () =>\n import(\"@/pages/CommonPages/ResetPasswordPage/ConfirmationPage\"),\n props: (route) => ({ autoCloseWindow: route.params.autoCloseWindow }),\n },\n];\n","export default [\n {\n path: \"audit\",\n component: () => import(\"@/pages/DPOPages/AuditTrailListPage\"),\n },\n];\n","import auditRoutes from \"@/router/entities/audit\";\nimport siteRoutes from \"@/router/entities/site\";\nimport therapistRoutes from \"@/router/entities/therapist\";\nimport siteManagerRoutes from \"@/router/entities/siteManager\";\nimport siteManagementRoutes from \"@/router/entities/siteManagement\";\nimport patientRoutes from \"@/router/entities/patient\";\nimport administratorRoutes from \"@/router/entities/administrator\";\nimport dataExportRoutes from \"@/router/dataExportRoutes\";\nimport { getSupportRoutes } from \"@/router/supportRoutes\";\nimport { getProfileRoutes } from \"@/router/profileRoutes\";\nimport archivedUsersRoutes from \"@/router/entities/archivedUsers\";\n\nconst routePrefix = \"/dpo\";\n\nexport default [\n {\n path: routePrefix,\n component: () => import(\"@/pages/DPOPages/DPOHomePage\"),\n meta: {\n requiresDPO: true,\n },\n children: [\n ...getSupportRoutes(routePrefix),\n ...getProfileRoutes(routePrefix),\n ...auditRoutes,\n ...siteRoutes,\n ...siteManagementRoutes,\n ...therapistRoutes,\n ...siteManagerRoutes,\n ...patientRoutes,\n ...administratorRoutes,\n ...dataExportRoutes,\n ...archivedUsersRoutes,\n {\n path: \"\",\n name: \"DPO/Home\",\n component: () => import(\"@/pages/DPOPages/DPOHomePage/Dashboard\"),\n },\n ],\n },\n];\n","export default [\n {\n path: \"/request-SAML-site\",\n name: \"requestSAMLSite\",\n component: () => import(\"@/pages/CommonPages/RequestSAMLSitePage\"),\n },\n];\n","export default [\n {\n path: \"/reference\",\n name: \"reference\",\n component: () => import(\"@/pages/ReferencePages/index.vue\"),\n meta: {\n requiresMindMazeAuth: true,\n },\n children: [\n {\n path: \"activity-definition\",\n component: () =>\n import(\n \"@/pages/ReferencePages/ActivityDefinitionPage/ActivityDefinitionPage.vue\"\n ),\n },\n {\n path: \"theme/colors\",\n component: () => import(\"@/pages/ReferencePages/theme/ThemeColors\"),\n },\n {\n path: \"theme/icons\",\n component: () => import(\"@/pages/ReferencePages/theme/ThemeIcons\"),\n },\n {\n path: \"theme/typography\",\n component: () => import(\"@/pages/ReferencePages/theme/ThemeTypography\"),\n },\n {\n path: \"components/elements-summary\",\n component: () =>\n import(\"@/pages/ReferencePages/components/ElementsSummary\"),\n },\n {\n path: \"components/components-summary\",\n component: () =>\n import(\"@/pages/ReferencePages/components/ComponentsSummary\"),\n },\n {\n path: \"development/scrollable/simple\",\n component: () =>\n import(\n \"@/pages/ReferencePages/development/InnerScrollablePageTestSimple\"\n ),\n },\n {\n path: \"development/scrollable/better\",\n component: () =>\n import(\"@/pages/ReferencePages/development/InnerScrollablePageTest\"),\n },\n {\n path: \"development/component-view\",\n component: () =>\n import(\"@/pages/ReferencePages/development/ComponentTestView\"),\n },\n ],\n },\n];\n","export default [\n {\n path: \"/privacy-policy\",\n name: \"privacy-policy\",\n component: () =>\n import(\"@/pages/CommonPages/LegalPages/PrivacyPolicyViewPage.vue\"),\n },\n];\n","export default [\n {\n path: \"/zoom/activate\",\n name: \"ZoomActivate\",\n component: () => import(\"@/pages/CommonPages/ZoomPages/ZoomActivate.vue\"),\n },\n {\n path: \"/zoom/documentation\",\n name: \"ZoomDocumentation\",\n component: () =>\n import(\"@/pages/CommonPages/ZoomPages/ZoomDocumentation.vue\"),\n },\n // Zoom external URL previously handled by another service\n {\n path: \"/zoomverify/documentation\",\n name: \"ZoomVerifyDocumentation\",\n redirect: \"/zoom/documentation\",\n },\n {\n path: \"/zoomverify/privacy-policy-eu\",\n name: \"ZoomVerifyPrivacyPolicy\",\n redirect: \"/privacy-policy\",\n },\n {\n path: \"/zoomverify/support\",\n name: \"ZoomVerifySupport\",\n beforeEnter(to, from, next) {\n window.location.replace(\"https://mindmaze.com/contact/\");\n },\n },\n {\n path: \"/zoomverify/terms-of-use\",\n name: \"ZoomVerifyTermsOfUse\",\n beforeEnter(to, from, next) {\n window.location.replace(\n \"https://mindmaze.com/wp-content/uploads/2023/10/EULA-General-20230517_EN.pdf\"\n );\n },\n },\n];\n","import Profile from \"@/models/Profile.model.js\";\nimport {\n setSessionStorageDisableTeleconsultation,\n setSessionStorageDisableSideBar,\n} from \"@/store/sessionStorage.js\";\nimport Store from \"@/store\";\nimport { userApi, getErrorKeysFrom } from \"@/services/api\";\nimport { hideCookieBar } from \"@/utils/cookies\";\n\n/**\n * Handles navigation using a common redirection route:\n * Example: /navigate?samlSiteName=mindmaze&patientSiteId=augustina&context=dashboard&disableSidebar=true\n * --> /patient//dashboard (without sidebar)\n */\n\n/// Patient convenience route map for therapists\nconst defaultRouteMap = \"Therapist/Patient\";\nconst PatientRouteMap = Object.freeze({\n dashboard: \"Therapist/Patient/Dashboard\",\n plan: \"Therapist/Patient/Plan\",\n teleconsultation: \"Therapist/Patient/Teleconsultation\",\n monitor: \"Therapist/Patient/Monitor\",\n review: \"Therapist/Patient/Review\",\n assessment: \"Therapist/Patient/Assessment\",\n epro: \"Therapist/Patient/EPRO\",\n profile: \"Therapist/Patient/Profile\",\n});\n\n/**\n * Stores the current navigation route for after the authentication process\n * @param {Route} to current route\n */\nfunction rememberNavigationRoute(to) {\n const query = JSON.stringify(to.query || {});\n try {\n window.sessionStorage.setItem(\"mm_navigate_query\", query);\n } catch {\n // Can happen when testing repeatedly in private mode and when refusing cookies\n // At least, the user gets some information about it\n console.error(\n \"Cannot write previous navigation query. The navigation redirection will not work after login\"\n );\n }\n}\n\n/**\n * Retreives the current navigation route after the authentication process if any\n */\nexport function popPreviousNavigationRoute() {\n const queryStr = window.sessionStorage.getItem(\"mm_navigate_query\");\n\n // Forget it once obtained\n window.sessionStorage.removeItem(\"mm_navigate_query\");\n\n const route = { name: \"Navigation\", query: {} };\n try {\n const query = JSON.parse(queryStr);\n if (query) {\n route.query = query;\n return route;\n } else {\n return {}; // invalid route\n }\n } catch {\n return {}; // invalid route\n }\n}\n\n/**\n * Redirect the user to the SAML idP authentication page\n * corresponding to the given saml site name\n * @param {Route} to current route\n * @param {NavigationGuardNext<*>} next route redirection callback\n * @returns callback with actual redirection in case of error.\n * Will overwrite the URL to go to the idP if all goes well\n */\nasync function samlAuth(to, next) {\n const query = to.query || {};\n\n // Don't process an autologin when errors are happening\n const errorKey = query.errorKey;\n const technicalErrorCode = query.technicalErrorCode;\n if (errorKey || technicalErrorCode) {\n // Forward to an error page, keeping the query parameters\n return next({ name: \"loginsaml\" });\n }\n\n // Get the idp url and attempt to go there\n const samlSiteName = query.samlSiteName;\n await userApi\n .get(`auth/saml/${samlSiteName}`)\n .then((response) => {\n if (response.status == \"200\") {\n const idpURL = response.data?.result?.redirectionURL || \"\";\n if (idpURL) {\n // Go to the idP URL in the same window\n window.location = idpURL;\n } else {\n // Should never happen\n to.query.errorKey = \"errors.site.emptyName\";\n return next({ name: \"loginsaml\" });\n }\n } else {\n to.query.errorKey = \"errors.site.noMatchingSite\";\n to.query.technicalErrorCode = response.status;\n return next({ name: \"loginsaml\" });\n }\n })\n .catch((error) => {\n to.query.errorKey = getErrorKeysFrom(error)[0] || \"\";\n return next({ name: \"loginsaml\" });\n });\n}\n\n/**\n * Handle navigate parameters to return the route\n * corresponding to the given patient site id in the route\n * @param {Route} to current route\n * @param {NavigationGuardNext<*>} next route redirection callback\n * @returns callback with actual redirection\n */\nasync function computePatientManagementPageRoute(to, next) {\n // The default route (\"home\"), without any query parameters\n const defaultPage = { name: \"home\", query: {} };\n\n const query = to.query || {};\n // Handle redirection to the patient page\n const routeName = PatientRouteMap[query.context] || defaultRouteMap;\n\n if (routeName === \"home\") {\n return next(defaultPage);\n }\n\n const patientSiteId = query.patientSiteId || \"\";\n const disableSidebar = query.disableSidebar;\n const disableTeleconsultation = query.disableTeleconsultation;\n\n const redirection = {\n name: routeName,\n query: {}, // clean query when redirecting\n };\n\n // Handle parameters\n if (disableSidebar != undefined) {\n setSessionStorageDisableSideBar(disableSidebar);\n }\n if (disableTeleconsultation != undefined) {\n setSessionStorageDisableTeleconsultation(disableTeleconsultation);\n }\n\n if (patientSiteId) {\n // The redirection is valid, we are about to go there\n const patientRequest = await Profile.getPatients(null, true, false, false);\n const patients = patientRequest?.response?.data?.result || [];\n\n // N.B.: Case insensitive comparison based on characters\n const patient = patients.find(\n (p) =>\n p?.patientSiteId.localeCompare(patientSiteId, undefined, {\n sensitivity: \"base\",\n }) === 0 || false\n );\n\n if (patient) {\n const patientUsername = patient.userName;\n redirection.params = { username: patientUsername };\n return next(redirection);\n } else {\n // The patient doesn't exist, redirect to the patient not found page\n return next({\n name: \"Therapist/AddPatient\",\n query: { patientSiteId: patientSiteId, nextRoute: routeName },\n });\n }\n }\n\n // Redirecting to the default route (\"home\")\n return next(defaultPage);\n}\n\nexport default [\n {\n path: \"/navigate\",\n name: \"Navigation\",\n // N.B.: redirect() doesn't support async according to:\n // https://github.com/vuejs/vue-router/issues/2729 and others\n // therefore we use beforeEnter()\n beforeEnter: async (to, from, next) => {\n // Hide the cookie bar in the navigate mode for the current session/page if needed\n hideCookieBar();\n await Store.dispatch(\"Auth/setHideCookieBar\", true);\n\n if (Store.getters[\"Auth/hasAccessToken\"]) {\n // If everything is setup, compute the route to the patient page\n return await computePatientManagementPageRoute(to, next);\n } else {\n rememberNavigationRoute(to);\n\n // Determine if the authentication process can use SAML\n const query = to.query || {};\n if (query.samlSiteName) {\n // SAML auth\n return await samlAuth(to, next);\n } else {\n // Basic AUTH\n return next({ name: \"login\", query: {} });\n }\n }\n },\n },\n];\n","import Store from \"@/store\";\n\nimport patientRoutes from \"@/router/users/patientRoutes\";\nimport therapistRoutes from \"@/router/users/therapistRoutes\";\nimport adminRoutes from \"@/router/users/adminRoutes\";\nimport superadminRoutes from \"@/router/users/superadminRoutes\";\nimport siteManagerRoutes from \"@/router/users/siteManagerRoutes\";\nimport onboardingRoutes from \"@/router/onboardingRoutes\";\nimport forgotPasswordRoutes from \"@/router/forgotPasswordRoutes\";\nimport dpoRoutes from \"@/router/users/DPORoutes\";\nimport requestSAMLSiteRoutes from \"@/router/requestSAMLSiteRoutes\";\nimport referenceRoutes from \"@/router/referenceRoutes.js\";\nimport footerRoutes from \"@/router/footerRoutes.js\";\nimport zoomRoutes from \"@/router/zoomRoutes.js\";\nimport navigateRoute, {\n popPreviousNavigationRoute,\n} from \"@/router/navigate.js\";\n\nexport default [\n {\n path: \"/\",\n name: \"home\",\n redirect: () => {\n // Redirect to the previous naviagte request if valid\n const previousNavigationRoute = popPreviousNavigationRoute();\n if (previousNavigationRoute.name && previousNavigationRoute.query) {\n return previousNavigationRoute;\n }\n\n if (Store.getters[\"Auth/isPatient\"]) {\n return { name: \"Patient/Home\" };\n }\n\n if (Store.getters[\"Auth/isTherapist\"]) {\n return {\n name: \"Therapist/Home\",\n };\n }\n\n if (Store.getters[\"Auth/isAdmin\"]) {\n return { name: \"Admin/Home\" };\n }\n\n if (Store.getters[\"Auth/isSuperAdmin\"]) {\n return { name: \"SuperAdmin/Home\" };\n }\n\n if (Store.getters[\"Auth/isDPO\"]) {\n return { name: \"DPO/Home\" };\n }\n\n if (Store.getters[\"Auth/isSiteManager\"]) {\n return { name: \"SiteManager/Home\" };\n }\n return { name: \"login\" };\n },\n },\n {\n path: \"/login\",\n name: \"login\",\n component: () => import(\"@/pages/CommonPages/LoginPage/index.vue\"),\n beforeEnter: (to, from, next) => {\n if (Store.getters[\"Auth/hasAccessToken\"]) {\n next({ name: \"home\" });\n } else {\n next();\n }\n },\n },\n {\n path: \"/login/saml/:samlSiteName\",\n name: \"loginsaml\",\n component: () => import(\"@/pages/CommonPages/LoginSAMLPage/index.vue\"),\n props: (route) => ({\n samlSiteName: route.params.samlSiteName,\n errorKey: route.query.errorKey,\n technicalErrorCode: route.query.technicalErrorCode,\n }),\n beforeEnter: (to, from, next) => {\n if (Store.getters[\"Auth/hasAccessToken\"]) {\n next({ name: \"home\" });\n } else {\n next();\n }\n },\n },\n {\n path: \"/logout\",\n name: \"logout\",\n component: () => import(\"@/pages/CommonPages/LogoutPage\"),\n meta: {\n requiresAuth: true,\n },\n },\n {\n path: \"/login-two-factor\",\n name: \"login-two-factor\",\n component: () => import(\"@/pages/CommonPages/LoginPage/LoginTwoFactor.vue\"),\n beforeEnter: (to, from, next) => {\n if (\n Store.getters[\"Auth/hasAccessToken\"] ||\n !to.params.password ||\n !to.params.email\n ) {\n next({ name: \"home\" });\n } else {\n next();\n }\n },\n props: (route) => ({\n email: route.params.email,\n password: route.params.password,\n }),\n },\n ...patientRoutes,\n ...therapistRoutes,\n ...adminRoutes,\n ...superadminRoutes,\n ...siteManagerRoutes,\n ...onboardingRoutes,\n ...forgotPasswordRoutes,\n ...dpoRoutes,\n ...requestSAMLSiteRoutes,\n ...zoomRoutes,\n ...referenceRoutes,\n ...footerRoutes,\n ...navigateRoute,\n\n // and finally the default route, when none of the above matches:\n {\n path: \"*\",\n name: \"404\",\n redirect: () => {\n return { name: \"login\" };\n },\n },\n];\n","import Vue from \"vue\";\nimport Router from \"vue-router\";\n\nimport Store from \"@/store/\";\n\nimport routes from \"./routes.js\";\n\nimport { trackPageView } from \"@/plugins/vueApplicationInsights\";\nimport { getAccessTokenCookie } from \"@/utils/cookies\";\nimport { demoPatientUsername } from \"@/services/users.js\";\nimport {\n attemptAutoLogin,\n setUserInformationAndRights,\n} from \"@/services/auth.js\";\nimport { userApi } from \"@/services/api.js\";\n\nVue.use(Router);\n\nconst router = new Router({\n mode: \"history\",\n base: process.env.BASE_URL,\n routes,\n});\n\n/**\n * Check the permissions of a user and route\n * @param {object} to The route to navigate to\n */\nconst checkPermissions = (to) => {\n if (\n to.matched.some((m) => m.meta.requiresAuth) &&\n !Store.getters[\"Auth/hasAccessToken\"]\n ) {\n return false;\n }\n\n if (\n to.matched.some((m) => m.meta.requiresPatient) &&\n !Store.getters[\"Auth/isPatient\"]\n ) {\n return false;\n }\n\n if (\n to.matched.some((m) => m.meta.requiresTherapist) &&\n !Store.getters[\"Auth/isTherapist\"]\n ) {\n return false;\n }\n\n if (\n to.matched.some((m) => m.meta.requiresAdmin) &&\n !Store.getters[\"Auth/isAdmin\"]\n ) {\n return false;\n }\n\n if (\n to.matched.some((m) => m.meta.requiresDPO) &&\n !Store.getters[\"Auth/isDPO\"]\n ) {\n return false;\n }\n\n if (\n to.matched.some((m) => m.meta.requiresSuperAdmin) &&\n !Store.getters[\"Auth/isSuperAdmin\"]\n ) {\n return false;\n }\n\n if (\n to.matched.some((m) => m.meta.requiresSuperTherapist) &&\n !Store.getters[\"Auth/isSuperTherapist\"]\n ) {\n return false;\n }\n\n if (\n to.matched.some((m) => m.meta.requiresSiteManager) &&\n !Store.getters[\"Auth/isSiteManager\"]\n ) {\n return false;\n }\n\n if (\n to.matched.some((m) => m.meta.requiresMindMazeAuth) &&\n !Store.getters[\"Auth/isSuperAdmin\"] &&\n !Store.getters[\"Auth/isAdmin\"]\n ) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Check the access token and reloads it from the cookies if available.\n * @returns {boolean} Whether the user has an access token\n */\nconst checkLogin = async () => {\n // If we have at least a token,\n // and we are considered not logged in,\n // let's check if our token is valid\n const CookieAccessToken = getAccessTokenCookie();\n if (CookieAccessToken && !Store.getters[\"Auth/hasAccessToken\"]) {\n await Store.dispatch(\"Auth/setAccessToken\", CookieAccessToken);\n\n return await userApi\n .get(\"profile\")\n .then((response) => {\n return setUserInformationAndRights(response.data.result).then(() => {\n return true;\n });\n })\n .catch(() => {\n Store.dispatch(\"Auth/clearAll\").finally(() => {\n return false;\n });\n });\n }\n\n // By default, we just return the state of the store\n return Store.getters[\"Auth/hasAccessToken\"];\n};\n\nconst privacyPolicyIsRequired = () => {\n return Store.getters[\"Auth/isPrivacyPolicySignatureRequired\"];\n};\n\nconst consentIsRequired = () => {\n return Store.getters[\"Auth/isConsentFormSignatureRequired\"];\n};\n\n/**\n * Moves the user to the logout page,\n * which then manages a standard logout action sequence\n */\nconst goToLogout = () => {\n return router.push({ name: \"logout\" }).catch();\n};\n\n/**\n * Move directly the user back to the login screen after clearing user data\n * (without going to the logout page first)\n * @param to the current path the user wanted to display\n * @param next the next route handler\n */\nconst goToLogin = (to, next) => {\n Store.commit(\"Auth/clearAll\");\n\n // Add the previous path to the query so that we go back to it once logged back in.\n let query = to.query;\n query.previousPath = to.path;\n\n next({ name: \"login\", query: query });\n};\n\nrouter.beforeEach(async (to, from, next) => {\n // track routes into insights\n if (to.name === \"loginsaml\") {\n trackPageView(`LoginPage.LoginSAML`);\n }\n /**\n * Use route name for patients pages\n * Except for demopatient which is identified by the path\n */\n if (!to.path.includes(demoPatientUsername)) {\n switch (to.name) {\n case \"Navigation\":\n trackPageView(`Navigation`);\n break;\n case \"Therapist/Patient/Plan\":\n trackPageView(`PatientManagement.Plan`);\n break;\n case \"Therapist/Patient/Teleconsultation\":\n trackPageView(`PatientManagement.Teleconsultation`);\n break;\n case \"Therapist/Patient/Monitor\":\n trackPageView(`PatientManagement.Monitor`);\n break;\n case \"Therapist/Patient/Review\":\n trackPageView(`PatientManagement.Review`);\n break;\n case \"Therapist/Patient/Assessment\":\n trackPageView(`PatientManagement.Assessment`);\n break;\n case \"Therapist/Patient/Profile\":\n trackPageView(`PatientManagement.Profile`);\n break;\n case \"Therapist/Patient/Dashboard\":\n trackPageView(`PatientManagement.Dashboard`);\n break;\n case \"Therapist/Patient/EPRO\":\n trackPageView(`PatientManagement.EPRO`);\n break;\n default:\n break;\n }\n }\n switch (to.path) {\n case \"/patient-list\":\n trackPageView(`PatientList`);\n break;\n case \"/meetings\":\n trackPageView(`Meetings`);\n break;\n case \"/new-patient\":\n trackPageView(`NewPatient`);\n break;\n case \"/templates\":\n trackPageView(`Templates`);\n break;\n case \"/training/playlists\":\n trackPageView(`TrainingMaterial`);\n break;\n case \"/logout\":\n trackPageView(`LoginPage.Logout`);\n break;\n case \"/login\":\n trackPageView(`LoginPage.Login`);\n break;\n case \"/reset-password/request\":\n trackPageView(`LoginPage.ForgotPassword`);\n break;\n case \"/request-SAML-site\":\n trackPageView(`LoginPage.ForgotSAMLSite`);\n break;\n case \"/epro-patients\":\n trackPageView(`EPROPatientList`);\n break;\n /* Therapist, administration pages */\n case \"/therapist-admin/therapists\":\n trackPageView(`User.AdministrationPage.TherapistList`);\n break;\n case \"/therapist-admin/site-managers\":\n trackPageView(`User.AdministrationPage.SiteManagerList`);\n break;\n case \"/therapist-admin/license\":\n trackPageView(`User.AdministrationPage.License`);\n break;\n case \"/therapist-admin/site-parameters\":\n trackPageView(`User.AdministrationPage.SiteManagement`);\n break;\n case \"/therapist-admin/site-units\":\n trackPageView(`User.AdministrationPage.SiteUnitList`);\n break;\n case \"/therapist-admin/patient-training-data\":\n trackPageView(`User.AdministrationPage.ExportTrainingData`);\n break;\n case \"/therapist-admin/personal-access-token\":\n trackPageView(`User.AdministrationPage.PersonalAccessToken`);\n break;\n case \"/therapist-admin/personal-access-token/new\":\n trackPageView(`User.AdministrationPage.PersonalAccessToken.create`);\n break;\n /* Demo patient */\n case \"/patient/demopatient/plan\":\n trackPageView(`DemoPatient.Plan`);\n break;\n case \"/patient/demopatient/teleconsultation\":\n trackPageView(`DemoPatient.Teleconsultation`);\n break;\n case \"/patient/demopatient/monitor\":\n trackPageView(`DemoPatient.Monitor`);\n break;\n case \"/patient/demopatient/review\":\n trackPageView(`DemoPatient.Review`);\n break;\n case \"/patient/demopatient/assessment\":\n trackPageView(`DemoPatient.Assessment`);\n break;\n case \"/patient/demopatient/profile\":\n trackPageView(`DemoPatient.Profile`);\n break;\n case \"/patient/demopatient/epro\":\n trackPageView(`DemoPatient.EPRO`);\n break;\n /* Admin */\n case \"/admin/administrator\":\n trackPageView(`Admin.AdministrationPage.AdminManagement`);\n break;\n case \"/admin/site-management\":\n trackPageView(`Admin.AdministrationPage.SiteManagement`);\n break;\n case \"/admin/site-manager\":\n trackPageView(`Admin.AdministrationPage.SiteManager`);\n break;\n case \"/admin/therapist\":\n trackPageView(`Admin.AdministrationPage.Therapist`);\n break;\n case \"/admin/patient-management\":\n trackPageView(`Admin.AdministrationPage.PatientManagement`);\n break;\n case \"/admin/archived-users\":\n trackPageView(`Admin.AdministrationPage.ArchivedUsers`);\n break;\n case \"/admin/customers\":\n trackPageView(`Admin.AdministrationPage.Customers`);\n break;\n case \"/admin/license\":\n trackPageView(`Admin.AdministrationPage.Licenses`);\n break;\n case \"/admin/patient-license\":\n trackPageView(`Admin.AdministrationPage.PatientLicenses`);\n break;\n case \"/admin/optional-feature-activation\":\n trackPageView(`Admin.AdministrationPage.OptionalFeatures`);\n break;\n case \"/admin/data-export\":\n trackPageView(`Admin.AdministrationPage.DataUserExport`);\n break;\n case \"/admin/feedbackReport\":\n trackPageView(`Admin.AdministrationPage.FeedbackReports`);\n break;\n case \"/admin/asset\":\n trackPageView(`Admin.AdministrationPage.Assets`);\n break;\n case \"/admin/asset/new\":\n trackPageView(`Admin.AdministrationPage.Assets.CreateAsset`);\n break;\n /* Site manager */\n case \"/therapists\":\n trackPageView(`SiteManager.TherapistList`);\n break;\n case \"/site-managers\":\n trackPageView(`SiteManager.SiteManagerList`);\n break;\n case \"/license\":\n trackPageView(`SiteManager.License`);\n break;\n case \"/site-parameters\":\n trackPageView(`SiteManager.SiteManagement`);\n break;\n case \"/site-units\":\n trackPageView(`SiteManager.SiteUnitList`);\n break;\n case \"/personal-access-token\":\n trackPageView(`SiteManager.PersonalAccessToken`);\n break;\n default:\n break;\n }\n\n // Training Materials\n if (to.path.includes(\"/training/playlists/office-hours\")) {\n trackPageView(`TrainingMaterial.OfficeHours`);\n } else if (to.path.includes(\"/training/playlists/clinical-tips\")) {\n trackPageView(`TrainingMaterial.ClinicalTips`);\n } else if (to.path.includes(\"/training/playlists/mindmotion-key-concepts\")) {\n trackPageView(`TrainingMaterial.MindMotionKeyConcepts`);\n }\n\n // Profile pages\n if (to.path.includes(\"profile\")) {\n trackPageView(`Profile`);\n }\n\n // Support pages\n if (to.path.includes(\"support/contact-us\")) {\n trackPageView(`SupportPage.ContactUs`);\n }\n if (to.path.includes(\"support/faq\")) {\n trackPageView(`SupportPage.FrequentlyAskedQuestions`);\n }\n if (to.path.includes(\"support/ifu\")) {\n trackPageView(`SupportPage.InstructionsForUse`);\n }\n\n // Check here we are not trying to auto-login first.\n if (\n to.params.pathMatch !== undefined &&\n to.params.pathMatch.includes(\"autologin\") &&\n to.query !== undefined &&\n to.query.token !== undefined\n ) {\n // Provide token only and check for token existence first\n await attemptAutoLogin(to.query.token)\n .then((_) => {\n // Remove the one time token as it is now useless and would only clutter the url.\n delete to.query.token;\n })\n .catch((_) => {\n // Remove the token as it is not a good one.\n delete to.query.token;\n goToLogin(to, next);\n return;\n });\n }\n\n await checkLogin()\n .then((isLogged) => {\n // First check whether we have the right to go to the desired destination\n if (!checkPermissions(to)) {\n // Console error for development builds\n if (process.env.NODE_ENV === \"development\") {\n console.error(`Permission error while trying to navigate to:`, to);\n }\n if (isLogged && !to.name?.includes(\"home\")) {\n // Then check whether we can go to the default destination\n // and invalidate the previous path\n delete to.query.previousPath;\n next({ name: \"home\", query: to.query });\n return;\n } else {\n // If everything fails, go back to login\n goToLogin(to, next);\n return;\n }\n }\n\n if (isLogged) {\n if (privacyPolicyIsRequired()) {\n if (!to.path.includes(\"onboarding/privacy-policy\")) {\n // Re-route to privacy but keep the potential query parameters and former path\n next({ name: \"onboarding/privacy-policy\", query: to.query });\n return;\n } else {\n next();\n return;\n }\n }\n if (consentIsRequired()) {\n if (!to.path.includes(\"onboarding/consent-form\")) {\n // Re-route to consent but keep the potential query parameters\n next({ name: \"onboarding/consent-form\", query: to.query });\n return;\n } else {\n next();\n return;\n }\n }\n }\n\n // Handles the requested redirection once logged in and the legal documents are signed\n // Also don't redirect when attempting to go to login as it is already handled.\n if (\n to.query !== undefined &&\n to.query.redirect !== undefined &&\n !to.query.redirect.includes(\"login\")\n ) {\n next({ path: to.query.redirect });\n return;\n }\n\n // Otherwise simply follow the next route\n next();\n })\n .catch((error) => {\n if (process.env.NODE_ENV === \"development\") {\n console.log(error);\n }\n });\n});\n\nrouter.onError((error) => {\n if (/ChunkLoadError./i.test(error.message)) {\n window.location.reload();\n }\n});\n\nexport { router as default, goToLogout };\n","import axios from \"axios\";\nimport store from \"@/store\";\nimport { openLoginModal } from \"@/components/login/LoginModal\";\nimport { notify } from \"@/utils/notification\";\nimport { tr } from \"@/utils/translation\";\nimport Customer from \"@/models/Customer.model\";\nimport License from \"@/models/License.model\";\nimport PatientLicense from \"@/models/PatientLicense.model\";\nimport Site from \"@/models/Site.model\";\nimport SiteUnit from \"@/models/SiteUnit.model\";\nimport Timezone from \"@/models/Timezone.model\";\nimport ActivityDescription from \"@/models/ActivityDescription.model\";\nimport Asset from \"@/models/Asset.model\";\nimport UserSession from \"@/models/UserSession.model\";\nimport Profile from \"@/models/Profile.model\";\nimport PersonalSettings from \"@/models/PersonalSettings.model\";\nimport Group from \"@/models/Group.model\";\nimport AuditLog from \"@/models/AuditLog.model\";\nimport VideoMeeting from \"@/models/VideoMeeting.model\";\nimport VideoMeetingRequest from \"@/models/VideoMeetingRequest.model\";\nimport PatientSessionSummary from \"@/models/PatientSessionSummary.model\";\nimport { ProgramPreset } from \"@/models/ProgramPreset.model\";\nimport DayTrainingSummary from \"@/models/DayTrainingSummary.model\";\nimport CustomerNotification from \"@/models/CustomerNotification.model\";\nimport InstructionsForUse from \"@/models/InstructionsForUse.model\";\nimport AuthOptions from \"@/models/AuthOptions.model\";\nimport PasswordOptions from \"@/models/PasswordOptions.model\";\nimport ActivityPatientUsage from \"@/models/ActivityPatientUsage.model\";\nimport OptionalFeatureDefinition from \"@/models/OptionalFeatureDefinition.model\";\nimport OptionalFeatureActivation from \"@/models/OptionalFeatureActivation.model\";\nimport TrainingMaterial from \"@/models/training-material/TrainingMaterial.model\";\nimport TherapeuticGoal from \"@/models/TherapeuticGoal.model\";\nimport LevelRecommendation from \"@/models/LevelRecommendation.model\";\nimport FeedbackReport from \"@/models/FeedbackReport.model\";\nimport FeedbackReportAttachment from \"@/models/FeedbackReportAttachment.model\";\nimport WeeklyActiveTrainingTimeGoalAndCompletion from \"@/models/WeeklyActiveTrainingTimeGoalAndCompletion.model\";\nimport WeeklyActiveTrainingTimeGoal from \"@/models/WeeklyActiveTrainingTimeGoal.model\";\nimport PersonalAccessToken from \"@/models/PersonalAccessToken.model\";\nimport { updateUserAccessRights } from \"@/config/ability\";\nimport { requestNewAuthToken } from \"@/services/auth\";\nimport { getAccessTokenCookie, removeAccessTokenCookie } from \"@/utils/cookies\";\nimport {\n getLocalStorageDeviceId,\n getLocalStorageRefreshToken,\n removeLocalStorageRefreshToken,\n} from \"@/store/localStorage.js\";\nimport { goToLogout } from \"@/router\";\n\nconst loginInterceptor = (config) => {\n const token = store.state.Auth.token || getAccessTokenCookie();\n if (token) {\n config.headers.common[\"Authorization\"] = `Bearer ${token}`;\n }\n return config;\n};\n\n// Common promise used to refresh the auth token using the refresh token\nlet refreshTokenPromise = null; // null | Promise\n\n/**\n * Rejected request interceptor, used to trigger a refresh token call when needed.\n * And display the login modal otherwise\n * @param error\n * @param axiosInstance\n * @returns The response or a promise waiting for the refresh before the response\n */\nconst unauthorizedInterceptor = async (error, axiosInstance) => {\n const response = error.response;\n\n // Unauthorized interception\n if (response && response.status === 401) {\n // The request has already been retried,\n // the user is using an invalid access token even after refreshing it\n if (error.config._retry) {\n return goToLogout();\n }\n\n // Mark the request as retried to make it fail on any second attempt\n error.config._retry = true;\n\n // Don't refresh on a refresh attempt failure\n if (response.config?.url === \"/auth/refresh\") {\n return displayLoginModal(error);\n }\n\n // Check the data is there to request a new token\n const token = store.state.Auth.token || getAccessTokenCookie();\n const refreshToken =\n store.state.Auth.refreshToken || getLocalStorageRefreshToken();\n const deviceId = store.state.Auth.deviceId || getLocalStorageDeviceId();\n\n // If any data is missing, the request cannot be fulfilled anyway\n if (!token || !refreshToken || !deviceId) {\n return displayLoginModal(error);\n }\n\n if (!refreshTokenPromise) {\n refreshTokenPromise = requestNewAuthToken(token, refreshToken, deviceId)\n .catch((error) => {\n // Empty the refresh token data as it is invalid\n refreshTokenPromise = null;\n\n // Clear out token related data\n store.dispatch(\"Auth/setAccessToken\", \"\");\n removeAccessTokenCookie();\n store.dispatch(\"Auth/setRefreshToken\", \"\");\n removeLocalStorageRefreshToken();\n\n // Forward the error\n return Promise.reject(error);\n })\n .then((response) => {\n // Update refresh token promise and date\n refreshTokenPromise = null;\n\n const result = response?.data?.result || {};\n const newToken = result.token;\n const newRefreshToken = result.refreshToken;\n\n return Promise.allSettled([\n store.dispatch(\"Auth/setAccessToken\", newToken),\n store.dispatch(\"Auth/setRefreshToken\", newRefreshToken),\n ]).then(() => {\n return newToken;\n });\n });\n }\n\n return refreshTokenPromise.then((token) => {\n response.config.headers[\"Authorization\"] = `Bearer ${token}`;\n return axiosInstance.request(response.config);\n });\n }\n\n // Notify of a back-end system error\n if (!error || !error.response || error.response.status >= 500) {\n notifyError(error);\n }\n\n return Promise.reject(error);\n};\n\n/**\n * Display the login modal (or stay on the login screen) in an attempt to restore the login credentials\n * @param error Request rejected error\n * @returns The promise returning the login modal response\n */\nconst displayLoginModal = (error) => {\n // Update user right due to token expiration\n updateUserAccessRights();\n\n // If already on the login screen, don't do anything else\n // than checking the error\n if (error?.config.url.includes(\"auth/token\")) {\n return Promise.reject(error);\n }\n\n return openLoginModal().then((token) => {\n error.response.config.headers[\"Authorization\"] = `Bearer ${token}`;\n return axios.request(error.config);\n });\n};\n\n// We use this api to avoid having the error interceptor when persisting login\nconst userLoginApi = axios.create({\n baseURL: `${process.env.VUE_APP_API_URL}${process.env.VUE_APP_USER_API}`,\n});\n\n// We use a specific service for token refresh to avoid looping on interceptors\nconst userRefreshTokenApi = axios.create({\n baseURL: `${process.env.VUE_APP_API_URL}${process.env.VUE_APP_USER_API}`,\n});\n\n// Standard rest api services\n\nconst userApi = axios.create({\n baseURL: `${process.env.VUE_APP_API_URL}${process.env.VUE_APP_USER_API}`,\n});\n\nuserApi.interceptors.request.use(loginInterceptor);\nuserApi.interceptors.response.use(\n (response) => response,\n (error) => unauthorizedInterceptor(error, userApi)\n);\n\nconst activityApi = axios.create({\n baseURL: `${process.env.VUE_APP_API_URL}${process.env.VUE_APP_ACTIVITY_API}`,\n});\n\nactivityApi.interceptors.request.use(loginInterceptor);\nactivityApi.interceptors.response.use(\n (response) => response,\n (error) => unauthorizedInterceptor(error, activityApi)\n);\n\nconst licenseApi = axios.create({\n baseURL: `${process.env.VUE_APP_API_URL}${process.env.VUE_APP_LICENSE_API}`,\n});\n\nlicenseApi.interceptors.request.use(loginInterceptor);\nlicenseApi.interceptors.response.use(\n (response) => response,\n (error) => unauthorizedInterceptor(error, licenseApi)\n);\n\nconst notificationApi = axios.create({\n baseURL: `${process.env.VUE_APP_API_URL}${process.env.VUE_APP_NOTIFICATION_API}`,\n});\n\nnotificationApi.interceptors.request.use(loginInterceptor);\nnotificationApi.interceptors.response.use(\n (response) => response,\n (error) => unauthorizedInterceptor(error, notificationApi)\n);\n\nconst auditApi = axios.create({\n baseURL: `${process.env.VUE_APP_API_URL}${process.env.VUE_APP_AUDIT_API}`,\n});\n\nauditApi.interceptors.request.use(loginInterceptor);\nauditApi.interceptors.response.use(\n (response) => response,\n (error) => unauthorizedInterceptor(error, auditApi)\n);\n\nconst eproApi = axios.create({\n baseURL: `${process.env.VUE_APP_API_URL}${process.env.VUE_APP_EPRO_API}`,\n});\n\neproApi.interceptors.request.use(loginInterceptor);\neproApi.interceptors.response.use(\n (response) => response,\n (error) => unauthorizedInterceptor(error, eproApi)\n);\n\nconst eproWebApi = axios.create({\n baseURL: `${process.env.VUE_APP_API_URL}${process.env.VUE_APP_EPROWEB_API}`,\n});\n\neproWebApi.interceptors.request.use(loginInterceptor);\neproWebApi.interceptors.response.use(\n (response) => response,\n (error) => unauthorizedInterceptor(error, eproWebApi)\n);\n\n/**\n * @description Notify the translated response first message from the provided axios response.\n * If the message translation corresponding is not found, it triggers a default success translation.\n * @param {object} response The axios response object, typically used on then()\n */\nconst notifySuccess = (response) => {\n // Set a default message in case none is found.\n let message = \"\";\n\n if (\n response.data &&\n response.data.messages &&\n response.data.messages.length > 0\n ) {\n // The request was made and the server responded with a status code\n // that falls out of the range of 2xx\n\n // Set a specific message when found\n let firstValue = tr(response.data.messages[0]);\n message = firstValue ? firstValue : message;\n } else if (\n response.data &&\n response.data.errors &&\n response.data.errors.length > 0\n ) {\n // Show response.data.errors as warnings for development builds\n if (process.env.NODE_ENV === \"development\") {\n message = response.data.errors;\n }\n }\n // Show it to the user if any message to show\n if (message) {\n notify(\"success\", message);\n }\n};\n\n/**\n * @description Notify about the errors from the axios response.\n * @param {object} response The axios response object, typically used on then()\n */\nconst notifyWarning = (response) => {\n if (\n response.data &&\n response.data.errors &&\n response.data.errors.length > 0\n ) {\n for (let error of response.data.errors) {\n notify(\"warning\", tr(error));\n }\n }\n};\n\n/**\n * Extract a error message from the provided axios error and return it.\n * Depending on the error state, the correct error inner data is used.\n * If the error translation corresponding to inner data is not found, it uses the provided defaultMessage.\n * @param {object} error The axios error object, typically created on catch()\n * @param {String} defaultMessage The default message to fallback in case no error message is found\n * @param {Boolean} returnOnlyFirst If true, only the first error message is returned, otherwise all of them are concatenated\n * @returns {String} The error message to show to the user\n */\nconst getErrorMessageFrom = (\n error,\n defaultMessage = \"\",\n returnOnlyFirst = false\n) => {\n // Set a default message in case none is found and no fallback message provided.\n let message =\n defaultMessage === \"\" ? tr(\"errors.unknownError\") : defaultMessage;\n\n if (error && !error.response) {\n // Network error\n message = tr(\"errors.system.networkError\");\n } else if (error.response) {\n // The request was made and the server responded with a status code\n // that falls out of the range of 2xx\n\n if (error.response.status === 403) {\n // Access denied error\n message = tr(\"errors.system.accessDenied\");\n }\n\n // Set a specific message when found and attempt to translate it\n // Concatenate every error messages\n if (error.response.data && error.response.data.errors) {\n const translatedErrors = [];\n const untranslatedErrors = [];\n error.response.data.errors.forEach((error) => {\n // translate falling back to default language and then to empty string\n const translatedError = tr([error, \"\"]);\n if (translatedError) {\n translatedErrors.push(translatedError);\n } else {\n untranslatedErrors.push(error);\n }\n });\n // if there is at least one translated error, we show only first one or all of them\n // otherwise we show the first untranslated one or all of them\n if (translatedErrors.length > 0) {\n message = returnOnlyFirst\n ? translatedErrors[0]\n : translatedErrors.join(\"\\n\");\n } else if (untranslatedErrors.length > 0) {\n message = returnOnlyFirst\n ? untranslatedErrors[0]\n : untranslatedErrors.join(\"\\n\");\n }\n // Add information for development builds\n if (process.env.NODE_ENV === \"development\") {\n console.log(\"translated errors\", translatedErrors);\n console.log(\"untranslated errors\", untranslatedErrors);\n }\n }\n\n // Add information for development builds\n if (process.env.NODE_ENV === \"development\") {\n console.log(\"Errors: \", error.response);\n }\n } else if (error.request) {\n // The request was made but no response was received\n // `error.request` is an instance of XMLHttpRequest in the browser and an instance of\n // http.ClientRequest in node.js\n\n // Add information for 4xx and 5xx responses for development builds\n if (process.env.NODE_ENV === \"development\") {\n console.log(\n \"The request was made but something went wrong: \",\n error.request\n );\n }\n } else {\n // Something happened in setting up the request that triggered an Error\n // Add information for 4xx and 5xx responses for development builds\n if (process.env.NODE_ENV === \"development\") {\n console.log(\"An error occurred when setting up the request: \", error);\n }\n }\n\n // Handle password specific errors\n // See: Dragonix.User\\Identity\\MindMazePasswordValidator.cs\n // For the password specific keywords\n const PasswordKeyWords = {\n NotEnoughLetters: \"errors.system.invalidInput\", // Password requirements are displayed\n NotEnoughNumbers: \"errors.system.invalidInput\",\n PasswordTooShort: \"errors.system.invalidInput\",\n NotEnoughUpper: \"errors.system.invalidInput\",\n NotEnoughLower: \"errors.system.invalidInput\",\n NotEnoughSpecial: \"errors.system.invalidInput\",\n SamePassword: \"errors.login.samePassword\",\n };\n if (Object.keys(PasswordKeyWords).includes(message)) {\n message = tr(PasswordKeyWords[message]);\n }\n\n // Handle MMGO specific keyword errors\n // See: Dragonix.User\\Helpers\\ResponseKeys.cs\n // For MMGO specific keywords\n const MMGOKeyWords = {\n ReservedUsername: \"errors.user.reservedUsername\",\n MissingEmail: \"errors.user.emailNotFound\",\n DuplicateEmail: \"errors.email.duplicateEmail\",\n notURLSafeUsername: \"errors.username.notURLSafeUsername\",\n UnknownCreator: \"errors.unknownError\", // Shouldn't happen in the webapp\n UnknownSite: \"errors.user.siteNotFound\",\n NotSiteAdmin: \"errors.user.invalidUserRole\",\n CallerUnassignedInSiteUnits: \"errors.siteManager.invalidSiteManager\",\n MissingEmailOrPatientSiteId: \"errors.patient.missingEmailorPatientSiteId\",\n DuplicatePatientSiteId: \"errors.username.duplicateUsername\",\n };\n if (Object.keys(MMGOKeyWords).includes(message)) {\n message = tr(MMGOKeyWords[message]);\n }\n\n // Show it to the user\n return message;\n};\n\nconst getErrorKeysFrom = (error) => {\n const errors = error.response.data?.errors || [];\n if (Array.isArray(errors)) {\n return errors;\n } else {\n // Handle certain errors returned as an object, e.g.: when the json provided doesn't fit the data format.\n const errorsFromObject = Object.keys(errors);\n // Translate them into true error fields.\n const errorKeys = [];\n errorsFromObject.forEach((e) =>\n errorKeys.push(e.includes(\"errors.\") ? e : `errors.${e}`)\n );\n return errorKeys;\n }\n};\n\n/**\n * @description Notify the translated error message from the provided axios error, if not of Cancel type.\n * @param {object} error The axios error object, typically created on catch()\n */\nconst notifyError = (error) => {\n if (!axios.isCancel(error)) {\n notify(\"error\", getErrorMessageFrom(error));\n }\n};\n\n/**\n * Provides the request result when available, and use the error to notify the UI in case of error, rejecting the promise.\n * This is the typical behavior of the Companion backend requests and should only be used for those.\n * @param promise\n * @returns {Promise<*>} when successful\n */\nconst processRequestResult = async (promise, notifyOnSuccess = false) => {\n return await promise.then(\n (response) => {\n if (notifyOnSuccess) {\n notifySuccess(response);\n }\n return response.data.result;\n },\n (error) => {\n notifyError(error);\n return Promise.reject(error);\n }\n );\n};\n\nLicense.setAxios(licenseApi);\nPatientLicense.setAxios(licenseApi);\nSite.setAxios(userApi);\nSiteUnit.setAxios(userApi);\nTimezone.setAxios(userApi);\nActivityDescription.setAxios(activityApi);\nActivityPatientUsage.setAxios(activityApi);\nAsset.setAxios(licenseApi);\nUserSession.setAxios(userApi);\nCustomer.setAxios(licenseApi);\nProfile.setAxios(userApi);\nPersonalSettings.setAxios(userApi);\nAuditLog.setAxios(auditApi);\nVideoMeeting.setAxios(userApi);\nVideoMeetingRequest.setAxios(userApi);\nPatientSessionSummary.setAxios(activityApi);\nProgramPreset.setAxios(activityApi);\nDayTrainingSummary.setAxios(activityApi);\nCustomerNotification.setAxios(userApi);\nInstructionsForUse.setAxios(licenseApi);\nAuthOptions.setAxios(userApi);\nPasswordOptions.setAxios(userApi);\nGroup.setAxios(userApi);\nOptionalFeatureDefinition.setAxios(licenseApi);\nOptionalFeatureActivation.setAxios(licenseApi);\nTrainingMaterial.setAxios(licenseApi);\nTherapeuticGoal.setAxios(activityApi);\nLevelRecommendation.setAxios(activityApi);\nFeedbackReport.setAxios(userApi);\nFeedbackReportAttachment.setAxios(userApi);\nWeeklyActiveTrainingTimeGoalAndCompletion.setAxios(activityApi);\nWeeklyActiveTrainingTimeGoal.setAxios(activityApi);\nPersonalAccessToken.setAxios(userApi);\n\nexport {\n userApi,\n activityApi,\n licenseApi,\n notificationApi,\n auditApi,\n eproApi,\n eproWebApi,\n userLoginApi,\n userRefreshTokenApi,\n getErrorMessageFrom,\n getErrorKeysFrom,\n notifyError,\n notifySuccess,\n notifyWarning,\n processRequestResult,\n};\n","import {\n userLoginApi,\n userRefreshTokenApi,\n notifyWarning,\n} from \"@/services/api\";\nimport Profile from \"@/models/Profile.model\";\nimport UserSession from \"@/models/UserSession.model\";\nimport Store from \"@/store\";\nimport { updateUserAccessRights } from \"@/config/ability\";\nimport { defaultLocale } from \"@/utils/locales\";\nimport router from \"@/router\";\nimport { generateUUID } from \"@/utils/profile\";\nimport { getLocalStorageDeviceId } from \"@/store/localStorage\";\nimport { ability } from \"@/config/ability\";\n\nexport const PATIENT_ROLE = \"patient\";\nexport const THERAPIST_ROLE = \"therapist\";\nexport const SITEMANAGER_ROLE = \"site\";\nexport const ADMIN_ROLE = \"admin\";\nconst SUPERADMIN_ROLE = \"superadmin\";\nexport const DPO_ROLE = \"dpoadmin\";\nconst SALESPERSON_ROLE = \"salesforcedc\";\n\nconst DATA_SCIENTIST = \"data_scientist\";\nconst ACCOUNT_EXECUTIVE = \"account_executive\";\nconst PUBLISHER = \"publisher\";\nconst ADMIN_MANAGER = \"admin_manager\";\nconst DATA_EXPORT_MANAGER = \"data_export_manager\";\nconst OPTIONAL_FEATURE_MANAGER = \"optional_feature_manager\";\n\nconst roles = [\n PATIENT_ROLE,\n THERAPIST_ROLE,\n ADMIN_ROLE,\n SUPERADMIN_ROLE,\n DPO_ROLE,\n SALESPERSON_ROLE,\n SITEMANAGER_ROLE,\n];\n\n/**\n * Competences of administrators\n */\nconst competences = [\n DATA_SCIENTIST,\n ACCOUNT_EXECUTIVE,\n PUBLISHER,\n ADMIN_MANAGER,\n DATA_EXPORT_MANAGER,\n OPTIONAL_FEATURE_MANAGER,\n];\n\n/**\n * Perform a login using username and password\n */\nconst login = async (username, password) =>\n authenticate(username, password, null, \"auth/token\");\n\n/**\n * Perform a login using username, password and second factor verification code\n */\nconst loginTwoFactor = async (username, password, secondFactor) =>\n authenticate(username, password, secondFactor, \"auth/token-2fa\");\n\nconst authenticate = async (\n username,\n password,\n secondFactor,\n loginEndpoint\n) => {\n const deviceId = await getDeviceId();\n\n return await userLoginApi\n .post(loginEndpoint, {\n userName: username,\n password: password,\n device: deviceId,\n secondFactor: secondFactor,\n })\n .then((response) => {\n notifyWarning(response);\n return response;\n })\n .then((response) => {\n const result = response.data.result;\n // Forces auth data to be ready before taking any other requests\n return Promise.allSettled([\n Store.dispatch(\"Auth/setAccessToken\", result.token),\n Store.dispatch(\"Auth/setRefreshToken\", result.refreshToken),\n ]).then(() => {\n return setUserInformationAndRights(result.userProfile).then(() => {\n return startCurrentUserSession();\n });\n });\n })\n .catch((error) => {\n // Clear access rights\n updateUserAccessRights();\n\n return handleLoginRedirection(error);\n });\n};\n\n/**\n * Get the application unique device Id if existing and generate it if not\n * This is later used to match with the refresh token\n */\nconst getDeviceId = async () => {\n let deviceId = Store.state.Auth.deviceId || getLocalStorageDeviceId();\n if (!deviceId) {\n deviceId = `webapp-${generateUUID()}`;\n // Ensure the data is stored for later calls\n await Store.dispatch(\"Auth/setDeviceId\", deviceId);\n }\n return deviceId;\n};\n\nconst startCurrentUserSession = async () => {\n if (ability.can(\"create\", \"UserSession\")) {\n const deviceId = await getDeviceId();\n const newUserSession = new UserSession({\n startDate: new Date().toISOString(),\n endDate: null,\n hasBeenPerformedOffline: false,\n deviceId: deviceId,\n deviceSoftwareVersion: navigator.userAgent,\n productKind: \"WebApp\",\n });\n return await UserSession.post(newUserSession).catch((error) => {\n if (process.env.NODE_ENV === \"development\") {\n console.error(error);\n }\n return Promise.reject(error);\n });\n } else {\n return Promise.resolve();\n }\n};\n\nconst attemptAutoLogin = async (autoLoginToken) => {\n return await userLoginApi\n .post(`auth/autologin?token=${autoLoginToken}`)\n .then((response) => {\n const { token, refreshToken, userProfile } = response.data.result;\n return Promise.allSettled([\n Store.dispatch(\"Auth/setAccessToken\", token),\n Store.dispatch(\"Auth/setRefreshToken\", refreshToken),\n ]).then(() => {\n return setUserInformationAndRights(userProfile).then(() => {\n return startCurrentUserSession();\n });\n });\n })\n .catch(() => {\n // Clears stores and token data\n Store.commit(\"Auth/clearAll\");\n // Clear access rights\n updateUserAccessRights();\n\n return false;\n });\n};\n\nconst handleLoginRedirection = (error) => {\n if (!error?.response?.data?.errors.length > 0) {\n return Promise.reject(error);\n }\n let postBody = JSON.parse(error.config.data);\n let username = postBody[\"userName\"] || null;\n let password = postBody[\"password\"] || null;\n\n // redirect if use saml error\n const samlErrorKey = \"errors.login.mustUseSAML\";\n\n if (error.response.data.errors.includes(samlErrorKey)) {\n return router\n .push({\n name: \"loginsaml\",\n params: { samlSiteName: error.response.data.samlSitePortal[0] },\n query: { errorKey: samlErrorKey },\n })\n .catch(() => {});\n }\n\n // redirect if password expired error\n const passExpiredErrorKey = \"errors.login.passwordExpired\";\n const passChangeRequiredErrorKey = \"errors.login.passwordResetRequired\";\n if (\n error.response.data.errors.includes(passExpiredErrorKey) ||\n error.response.data.errors.includes(passChangeRequiredErrorKey)\n ) {\n return router.push({\n name: `resetPassword`,\n query: {\n id: error.response.data.userId,\n token: error.response.data.passwordResetToken,\n },\n params: { title: passChangeRequiredErrorKey, email: username },\n });\n }\n\n // redirect if two-factor required\n const twoFactorRequiredError = \"errors.login.twoFactorRequired\";\n if (error.response.data.errors.includes(twoFactorRequiredError)) {\n return router\n .push({\n name: \"login-two-factor\",\n params: { email: username, password: password },\n })\n .catch(() => {});\n }\n\n return Promise.reject(error);\n};\n\n/***\n * Set current user system information in store\n * and reload access rights\n * @param userProfile\n * @returns {Promise}\n */\nconst setUserInformationAndRights = async (userProfile) => {\n let promises = [\n Store.dispatch(\"Auth/setRoles\", userProfile.roles),\n Store.dispatch(\"Auth/setCompetences\", userProfile.competences),\n Store.dispatch(\"Auth/setUserObject\", new Profile(userProfile)),\n Store.dispatch(\"Auth/saveConsent\", userProfile),\n ];\n\n // some users don't have one\n if (userProfile.language) {\n promises.push(Store.dispatch(\"Language/setLanguage\", userProfile.language));\n } else {\n promises.push(Store.dispatch(\"Language/setLanguage\", defaultLocale));\n }\n\n await Promise.all(promises);\n\n updateUserAccessRights();\n};\n\nconst requestPasswordReset = async (email) => {\n return await userLoginApi.post(\"/account/reset-password/request\", {\n email: email,\n });\n\n // we don't return anything here, because we don't want to communicate to the\n // user if an email really exists\n};\n\nconst requestNewAuthToken = async (token, refreshToken, deviceId) => {\n return await userRefreshTokenApi.post(\"/auth/refresh\", {\n accessToken: token,\n refreshToken: refreshToken,\n device: deviceId,\n });\n};\n\n/**\n * Whether the user is a patient\n * @param {array} roles User roles\n */\nconst isPatient = (roles) => {\n return roles.indexOf(PATIENT_ROLE) !== -1;\n};\n\n/**\n * Whether the user is a therapist\n * @param {array} roles User roles\n */\nconst isTherapist = (roles) => {\n return roles.indexOf(THERAPIST_ROLE) !== -1;\n};\n\n/**\n * Whether the user is an admin\n */\nconst isAdmin = (roles) => {\n return roles.indexOf(ADMIN_ROLE) !== -1;\n};\n\n/**\n * Whether the user is a super admin\n */\nconst isSuperAdmin = (roles) => {\n return roles.indexOf(SUPERADMIN_ROLE) !== -1;\n};\n\n/**\n * Whether the user is a dpo\n */\nconst isDPO = (roles) => {\n return roles.indexOf(DPO_ROLE) !== -1;\n};\n\n/**\n * Whether the user is a site manager\n */\nconst isSiteManager = (roles) => {\n return roles.indexOf(SITEMANAGER_ROLE) !== -1;\n};\n\n/**\n * Check the competences of admins\n */\nconst isDataScientist = (competences) => {\n return competences.indexOf(DATA_SCIENTIST) !== -1;\n};\nconst isPublisher = (competences) => {\n return competences.indexOf(PUBLISHER) !== -1;\n};\nconst isAccountExecutive = (competences) => {\n return competences.indexOf(ACCOUNT_EXECUTIVE) !== -1;\n};\nconst isAdminManager = (competences) => {\n return competences.indexOf(ADMIN_MANAGER) !== -1;\n};\nconst isDataExportManager = (competences) => {\n return competences.indexOf(DATA_EXPORT_MANAGER) !== -1;\n};\nconst isOptionalFeatureManager = (competences) => {\n return competences.indexOf(OPTIONAL_FEATURE_MANAGER) !== -1;\n};\n\n/**\n * Get the ability profile based on the role\n * @param {string} role The role\n * @return {string} The ability profile\n */\nconst abilityProfile = (role) => {\n switch (role) {\n case THERAPIST_ROLE:\n return \"TherapistProfile\";\n case PATIENT_ROLE:\n return \"PatientProfile\";\n case SITEMANAGER_ROLE:\n return \"SiteManagerProfile\";\n case DPO_ROLE:\n return \"DpoProfile\";\n case ADMIN_ROLE:\n return \"AdminProfile\";\n default:\n return \"\";\n }\n};\n\nexport {\n login,\n loginTwoFactor,\n attemptAutoLogin,\n requestPasswordReset,\n requestNewAuthToken,\n isPatient,\n isTherapist,\n isAdmin,\n isSuperAdmin,\n isDPO,\n isSiteManager,\n setUserInformationAndRights,\n roles,\n isDataScientist,\n isPublisher,\n isAccountExecutive,\n isAdminManager,\n isDataExportManager,\n isOptionalFeatureManager,\n competences,\n abilityProfile,\n};\n","// Service to fetch the dist/config.json file state\n// This file is used to store environment specific data\n// It is also overridden by the Companion.WebApp web server .Net project.\n\nimport axios from \"axios\";\nimport { generateUUID } from \"@/utils/profile\";\n\nconst environmentConfig = {\n fetchedDate: null,\n AppInsightInstrumentationKey: \"\",\n BuildVersion: \"\",\n ProductVersion: \"\",\n Regions: [],\n NewBadgeExpirationDate: \"\",\n};\n\nasync function loadConfigData() {\n if (!environmentConfig.fetchedDate) {\n return await axios\n .get(\"/config.json?v=\" + generateUUID())\n .then((response) => {\n const configData = response?.data || {};\n\n const setValue = (configKey) => {\n if (configData[configKey]) {\n environmentConfig[configKey] = configData[configKey];\n }\n };\n\n // Attempt to set each key if provided\n for (const key of Object.keys(environmentConfig)) {\n setValue(key);\n }\n\n // Memoize it\n environmentConfig.fetchedDate = new Date();\n return environmentConfig;\n })\n .catch(() => {});\n } else {\n return environmentConfig;\n }\n}\n\nexport default loadConfigData;\n","export const DosageKind = Object.freeze({\n DURATION: \"Duration\", // Triggered by Time (mostly Go)\n REPETITION: \"Repetition\", //Triggered by Repetition (mostly Pro)\n LOGIC: \"Logic\", // Triggered by Game Logic (example : Mind4, Stardust)\n});\n","import { processRequestResult, userApi } from \"@/services/api\";\n\nconst demoPatientUsername = \"demopatient\";\n\n/**\n * Check whether a patient username (site id) exists in the site\n * @param {string} patientSiteId The patient site id\n */\nconst checkIfPatientSiteIdExists = async (patientSiteId) => {\n return await userApi\n .get(`/site/own/contains/patientsiteid/${patientSiteId}`)\n .then((response) => {\n return response.data.result;\n })\n .catch(() => {\n return false;\n });\n};\n\n/**\n * Check whether a username exists\n * @param {string} username The username\n */\nconst checkIfUsernameExists = async (username) => {\n return await userApi\n .get(`profile/username/exists/${username}`)\n .then((response) => {\n return response.data.result;\n })\n .catch(() => {\n return false;\n });\n};\n\n/**\n * Check if an email exists\n * @param {string} email The email\n */\nconst checkIfEmailExists = async (email) => {\n return await userApi\n .get(`profile/email/exists/${email}`)\n .then((response) => {\n return response.data.result;\n })\n .catch(() => {\n return false;\n });\n};\n\n/**\n * Check if an SAMLLoginId exists\n * @param {string} SAMLLoginId The SAMLLoginId\n */\nconst checkIfSAMLLoginIdExists = async (SAMLLoginId, siteId) => {\n return await userApi\n .get(`profile/site/${siteId}/contains/saml-login-id/${SAMLLoginId}`)\n .then((response) => {\n return response.data.result;\n })\n .catch(() => {\n return false;\n });\n};\n\n/**\n * Returns the email delivery activity based on SendGrid information.\n * @param {string} username The username to check the email activity from\n */\nconst getEmailDeliveryActivity = async (username) => {\n return await userApi\n .get(`account/email-activity/${username}`)\n .then((response) => {\n return response.data.result;\n });\n};\n\nexport {\n checkIfPatientSiteIdExists,\n checkIfUsernameExists,\n checkIfEmailExists,\n checkIfSAMLLoginIdExists,\n getEmailDeliveryActivity,\n demoPatientUsername,\n};\n","/**\n * Function used to ensure the variable of the state are changed and not the reference\n * This is required because vuex will watch a reference and changing the reference breaks it\n * @param initialState\n * @param state\n */\nexport const resetState = (initialState, state) => {\n const newState = initialState();\n Object.keys(newState).forEach((key) => {\n state[key] = newState[key];\n });\n};\n","import {\n isPatient,\n isTherapist,\n isAdmin,\n isSuperAdmin,\n isDPO,\n isSiteManager,\n roles,\n isDataScientist,\n isPublisher,\n isAccountExecutive,\n isAdminManager,\n isDataExportManager,\n isOptionalFeatureManager,\n competences,\n} from \"@/services/auth.js\";\nimport {\n deserializeConsent,\n isLatestPossiblePrivacyPolicySigned,\n MaxConsents,\n} from \"@/utils/signedDocuments.js\";\nimport { resetState } from \"@/store/utils\";\nimport { clearStores } from \"@/store\";\nimport {\n areCookiesAccepted,\n removeAccessTokenCookie,\n setAccessTokenCookie,\n} from \"@/utils/cookies.js\";\nimport {\n removeLocalStorageRefreshToken,\n removeLocalStorageStayLoggedIn,\n setLocalStorageDeviceId,\n setLocalStorageRefreshToken,\n setLocalStorageStayLoggedIn,\n} from \"@/store/localStorage.js\";\n\nconst initialState = () => {\n return {\n /**\n * JWT token\n */\n token: null,\n\n /**\n * Refresh token\n */\n refreshToken: null,\n\n /**\n * Unique device id matching the refresh token\n */\n deviceId: null,\n\n /**\n * Whether the cookies are accepted. It is used to broadcast the value\n * across components\n */\n cookiesAccepted: false,\n\n /**\n * Whether to hide the cookie bar. It is used to broadcast the value\n * across components\n */\n hideCookieBar: false,\n\n /**\n * Whether to use the refresh token system and stay logged in\n */\n stayLoggedIn: false,\n\n /**\n * The roles the user has\n *\n * The API sends us a list, so let's save it as a list too, regardless of\n * the fact that for now in our code, you can only have one role\n */\n roles: [],\n\n /**\n * The competences the admin user has\n */\n competences: [],\n\n /**\n * The user profile of the logged-in user\n */\n user: null,\n\n /**\n * Which of the consents were accepted by the user\n */\n consents: Object.assign({}, Array(MaxConsents).fill(false)),\n };\n};\n\nexport default {\n namespaced: true,\n\n state: initialState,\n mutations: {\n /**\n * Reset the store state\n * @param {object} state Module state\n */\n clearStore(state) {\n resetState(initialState, state);\n },\n\n /**\n * Reset all states including this one\n * @param {object} state Module state\n */\n clearAll(state) {\n resetState(initialState, state);\n\n clearStores();\n removeAccessTokenCookie();\n removeLocalStorageRefreshToken();\n removeLocalStorageStayLoggedIn();\n },\n\n /**\n * Set the JWT access token\n * @param {object} state Vuex state\n * @param {string} token token\n */\n setAccessToken(state, token) {\n state.token = token;\n if (areCookiesAccepted()) {\n // Store the cookie as a session cookie\n // if we're not supposed to stay logged in\n const isSessionCookie = !state.stayLoggedIn;\n setAccessTokenCookie(token, isSessionCookie);\n }\n },\n\n /**\n * Set the JWT refresh token\n * only when:\n * - the stay logged in option is checked\n * - and cookies usage is accepted\n * @param {object} state Vuex state\n * @param {string} refreshToken refresh token\n */\n setRefreshToken(state, refreshToken) {\n if (areCookiesAccepted() && state.stayLoggedIn) {\n state.refreshToken = refreshToken;\n setLocalStorageRefreshToken(refreshToken);\n }\n },\n\n /**\n * Set the device id\n * @param {object} state Vuex state\n * @param {string} deviceId device Id\n */\n setDeviceId(state, deviceId) {\n state.deviceId = deviceId;\n setLocalStorageDeviceId(deviceId);\n },\n\n /**\n * Set whether the user should stay logged in using the refresh token\n * @param {object} state Vuex state\n * @param {boolean} stayLoggedIn Whether to stay logged in\n */\n setStayLoggedIn(state, stayLoggedIn) {\n state.stayLoggedIn = !!stayLoggedIn;\n setLocalStorageStayLoggedIn(!!stayLoggedIn);\n },\n\n /**\n * Set whether the user accepted cookies\n * This is set by the cookies bar\n * @param {object} state Vuex state\n * @param {boolean} cookiesAccepted Whether the cookies were accepted\n */\n setCookiesAccepted(state, cookiesAccepted) {\n state.cookiesAccepted = !!cookiesAccepted;\n },\n\n /**\n * Hides the cookie bar\n * @param {object} state Vuex state\n * @param {boolean} hideCookieBar Whether the cookie bar should be hidden\n */\n setHideCookieBar(state, hideCookieBar) {\n state.hideCookieBar = !!hideCookieBar;\n },\n\n /**\n * Set the roles of the user\n * Do some validation of the role strings sent by the API\n * @param {object} state Vuex state\n * @param {array} roles List of roles\n */\n setRoles(state, roles) {\n state.roles = roles;\n },\n\n /**\n * Set the competences of the user\n * @param {object} state Vuex state\n * @param {array} competences List of roles\n */\n setCompetences(state, competences) {\n state.competences = competences;\n },\n\n /**\n * Set the user object\n * @param {object} user The user object\n */\n setUserObject(state, user) {\n state.user = user;\n },\n\n /**\n * Expecting a object like in the state above\n */\n setConsents(state, consents) {\n state.consents = consents;\n },\n\n updatePrivacyPolicy(state, newDocument) {\n if (!state.user.signedDocuments) {\n state.user.signedDocuments = [];\n }\n state.user.signedDocuments.push(newDocument);\n },\n\n setConsentFormSignatureRequired(state, newState) {\n state.user.isConsentFormSignatureRequired = newState;\n },\n },\n\n actions: {\n setAccessToken({ commit }, token) {\n // Prevents storing undefined or null as a string\n if (!token) {\n token = \"\";\n }\n\n commit(\"setAccessToken\", token);\n },\n\n setRefreshToken({ commit }, refreshToken) {\n // Prevents storing undefined or null as a string\n if (!refreshToken) {\n refreshToken = \"\";\n }\n\n commit(\"setRefreshToken\", refreshToken);\n },\n\n setDeviceId({ commit }, deviceId) {\n // Prevents storing undefined or null as a string\n if (!deviceId) {\n deviceId = \"\";\n }\n\n commit(\"setDeviceId\", deviceId);\n },\n\n setStayLoggedIn({ commit }, stayLoggedIn) {\n commit(\"setStayLoggedIn\", !!stayLoggedIn);\n },\n\n setCookiesAccepted({ commit }, cookiesAccepted) {\n commit(\"setCookiesAccepted\", !!cookiesAccepted);\n },\n\n setHideCookieBar({ commit }, hideCookieBar) {\n commit(\"setHideCookieBar\", !!hideCookieBar);\n },\n\n setRoles({ commit }, newState) {\n if (!newState) {\n throw `invalid roles given: ${newState}`;\n }\n\n for (const role of newState) {\n if (roles.indexOf(role) === -1) {\n // something has gone wrong: the API sent us a role we don't understand\n throw `invalid Role found: ${role}`;\n }\n }\n commit(\"setRoles\", newState);\n },\n\n setCompetences({ commit }, newState) {\n if (!newState) {\n return;\n }\n\n for (const competence of newState) {\n if (competences.indexOf(competence) === -1) {\n // something has gone wrong: the API sent us a competence we don't\n // understand;\n throw `invalid Competence found: ${competence}`;\n }\n }\n commit(\"setCompetences\", newState);\n },\n\n /**\n * Deletes all user related data, including authentication tokens\n */\n clearAll({ commit }) {\n commit(\"clearAll\");\n },\n\n setUserObject({ commit, dispatch }, newState) {\n commit(\"setUserObject\", newState);\n dispatch(\"Language/setLanguage\", newState.language, { root: true });\n },\n updatePrivacyPolicy({ commit }, newDocument) {\n commit(\"updatePrivacyPolicy\", newDocument);\n },\n setConsentFormSignatureRequired({ commit }, newState) {\n commit(\"setConsentFormSignatureRequired\", newState);\n },\n\n /**\n * I'm not happy with this solution. We already have all the data\n * in state.userProfile, and we repeatedly do something with the\n * returned data from the API here. Should somehow be re-written.\n * Same applies for the roles: we save them outside of the user object,\n * but in the user object too. Feels very WET\n */\n saveConsent({ commit }, userProfile) {\n if (!isPatient(userProfile.roles)) {\n // only for patient\n return;\n }\n\n const consents = deserializeConsent(userProfile.signedDocuments);\n commit(\"setConsents\", consents);\n },\n\n setConsents({ commit }, consents) {\n commit(\"setConsents\", consents);\n },\n clearStore({ commit }) {\n commit(\"clearStore\");\n },\n },\n getters: {\n /**\n * Whether the user has an access token\n * @param {object} state Module state\n */\n hasAccessToken(state) {\n return state.token !== null;\n },\n\n /**\n * Whether the user needs to sign the privacy policy\n * @param state\n */\n isPrivacyPolicySignatureRequired(state) {\n // Don't check the privacy policy when the current user is not defined\n // or when the backend doesn't think this is needed.\n // (e.g. admins, already up to date, ...)\n if (!state.user || !state.user.isPrivacyPolicySignatureRequired) {\n return false;\n }\n\n // Otherwise check the current user document status\n return !isLatestPossiblePrivacyPolicySigned(\n state.user?.signedDocuments || []\n );\n },\n /**\n * Whether the user needs to sign the consent form\n * @param state\n */\n isConsentFormSignatureRequired(state) {\n if (state.user != null) {\n return state.user.isConsentFormSignatureRequired;\n }\n return false;\n },\n\n /**\n * Whether the user is a MindMotion user (Therapist, Patient or SiteManager)\n * @param {object} state Module state\n */\n isMindMotionUser(state) {\n return (\n isPatient(state.roles) ||\n isTherapist(state.roles) ||\n isSiteManager(state.roles)\n );\n },\n\n isPatient(state) {\n return isPatient(state.roles);\n },\n\n isTherapist(state) {\n return isTherapist(state.roles);\n },\n\n isAdmin(state) {\n return isAdmin(state.roles);\n },\n\n isSuperAdmin(state) {\n return isSuperAdmin(state.roles);\n },\n\n isDPO(state) {\n return isDPO(state.roles);\n },\n\n isSiteManager(state) {\n return isSiteManager(state.roles);\n },\n\n isSuperTherapist(state) {\n if (!state.user) {\n return false;\n }\n return state.user.isSuperTherapist && isTherapist(state.roles);\n },\n\n username(state) {\n if (!state.user) {\n return null;\n }\n return state.user.userName;\n },\n\n siteId(state) {\n if (!state.user) {\n return null;\n }\n return state.user.siteId;\n },\n\n /**\n * Check the competences of admins\n */\n isDataScientistAdmin(state) {\n return isAdmin(state.roles) && isDataScientist(state.competences);\n },\n isPublisherAdmin(state) {\n return isAdmin(state.roles) && isPublisher(state.competences);\n },\n isAccountExecutiveAdmin(state) {\n return isAdmin(state.roles) && isAccountExecutive(state.competences);\n },\n isAdminManagerAdmin(state) {\n return isAdmin(state.roles) && isAdminManager(state.competences);\n },\n isDataExportManagerAdmin(state) {\n return isAdmin(state.roles) && isDataExportManager(state.competences);\n },\n isOptionalFeatureManagerAdmin(state) {\n return (\n isAdmin(state.roles) && isOptionalFeatureManager(state.competences)\n );\n },\n },\n};\n","import i18n from \"@/i18n\";\nimport { getLanguageCodeFrom, defaultLocale } from \"@/utils/locales\";\nimport { getLanguage, setLanguage } from \"@/store/localStorage\";\n\nexport default {\n namespaced: true,\n\n state: {\n /**\n * Stores the actual language.\n * Initializes it from the localStorage.\n * If there's none, we fall back to 'en-US'.\n */\n language: getLanguage() || defaultLocale,\n },\n\n mutations: {\n /**\n * Set language\n * @param {object} state Vuex state\n * @param {string} language\n */\n setLanguage(state, language) {\n state.language = language;\n },\n },\n actions: {\n setLanguage({ commit, getters }, language) {\n commit(\"setLanguage\", language);\n setLanguage(language);\n const locale = getLanguageCodeFrom(language);\n i18n.changeLanguage(locale);\n },\n refreshLanguage({ getters }) {\n const locale = getLanguageCodeFrom(getters.language);\n i18n.changeLanguage(locale);\n },\n },\n getters: {\n language(state) {\n return state.language;\n },\n isRTLLanguage(state) {\n return !!state.language?.startsWith(\"ar\");\n },\n languageDirection(state, getters) {\n return getters.isRTLLanguage ? \"rtl\" : \"ltr\";\n },\n },\n};\n","import { resetState } from \"@/store/utils\";\nimport { defaultLocale } from \"@/utils/locales\";\n\nconst initialState = () => {\n return {\n email: null,\n username: null,\n language: defaultLocale,\n };\n};\n\n/**\n * Store used in the add patient process\n */\nexport default {\n namespaced: true,\n\n state: initialState,\n mutations: {\n /**\n * Set email\n * @param {object} state Vuex state\n * @param {string} token Email\n */\n setEmail(state, email) {\n state.email = email;\n },\n /**\n * Set username\n * @param {object} state Vuex state\n * @param {string} username Username\n */\n setUsername(state, username) {\n state.username = username;\n },\n /**\n * Set username\n * @param {object} state Vuex state\n * @param {string} username Username\n */\n setLanguage(state, language) {\n state.language = language;\n },\n /**\n * Clear all state variables\n * @param {object} state Vuex state\n */\n clearStore(state) {\n resetState(initialState, state);\n },\n },\n actions: {\n setEmail({ commit }, newState) {\n commit(\"setEmail\", newState);\n },\n setUsername({ commit }, newState) {\n commit(\"setUsername\", newState);\n },\n setLanguage({ commit }, newState) {\n commit(\"setLanguage\", newState);\n },\n clearStore({ commit }) {\n commit(\"clearStore\");\n },\n },\n};\n","import { resetState } from \"@/store/utils\";\n\nconst initialState = () => {\n return {\n /**\n * The user profile of the logged-in user\n */\n user: null,\n /**\n * Whether the current user Zoom access granted to manage their Zoom meetings\n */\n accessGranted: null,\n /**\n * The current user Zoom account type\n */\n accountType: null,\n /**\n * Whenever the zoom feature is activated for user\n */\n zoomFeatureActivated: null,\n };\n};\n\nexport default {\n namespaced: true,\n\n state: initialState,\n\n mutations: {\n setZoomAccess(state, isAccessGranted) {\n state.accessGranted = isAccessGranted;\n },\n setAccountType(state, accountType) {\n state.accountType = accountType;\n },\n setZoomFeatureActivation(state, status) {\n state.zoomFeatureActivated = status;\n },\n clearStore(state) {\n resetState(initialState, state);\n },\n },\n actions: {\n setZoomAccess({ commit }, accessGranted) {\n commit(\"setZoomAccess\", accessGranted);\n },\n setAccountType({ commit }, accountType) {\n commit(\"setAccountType\", accountType);\n },\n setZoomFeatureActivation({ commit }, status) {\n commit(\"setZoomFeatureActivation\", status);\n },\n clearStore({ commit }) {\n commit(\"clearStore\");\n },\n },\n getters: {\n accessGranted(state) {\n return state.accessGranted;\n },\n accountType(state) {\n return state.accountType;\n },\n zoomFeatureActivated(state) {\n return state.zoomFeatureActivated;\n },\n },\n};\n","import cloneDeep from \"lodash/cloneDeep\";\nimport { resetState } from \"@/store/utils\";\n\nconst initialState = () => {\n return {\n user: null,\n };\n};\n\n/**\n * Store used to set patient profile data at the end of account creation\n * or for profile modification purposes.\n * See Onboarding store for the data used during the patient account creation process.\n */\nexport default {\n namespaced: true,\n\n state: initialState,\n\n mutations: {\n setUser(state, user) {\n state.user = cloneDeep(user);\n // Set user gender if not set by the back-end\n if (state.user != null && !state.user.gender) {\n state.user.gender = \"Undefined\";\n }\n },\n clearStore(state) {\n resetState(initialState, state);\n },\n },\n actions: {\n setUser({ commit }, user) {\n commit(\"setUser\", user);\n },\n clearStore({ commit }) {\n commit(\"clearStore\");\n },\n },\n};\n","import Vue from \"vue\";\nimport Vuex from \"vuex\";\nimport VuexORM from \"@vuex-orm/core\";\nimport VuexORMAxios from \"@vuex-orm/plugin-axios\";\nimport Auth from \"@/store/Auth.js\";\nimport Language from \"@/store/Language.js\";\nimport Onboarding from \"@/store/Onboarding.js\";\nimport ZoomAccess from \"@/store/ZoomAccess.js\";\nimport Group from \"@/models/Group.model\";\nimport Profile from \"@/store/Profile\";\nimport ProfileModel from \"@/models/Profile.model\";\nimport PersonalSettings from \"@/models/PersonalSettings.model\";\nimport Customer from \"@/models/Customer.model\";\nimport License from \"@/models/License.model\";\nimport PatientLicense from \"@/models/PatientLicense.model\";\nimport Site from \"@/models/Site.model\";\nimport SiteUnit from \"@/models/SiteUnit.model\";\nimport Timezone from \"@/models/Timezone.model\";\nimport ActivityDescription from \"@/models/ActivityDescription.model\";\nimport Asset from \"@/models/Asset.model\";\nimport UserSession from \"@/models/UserSession.model\";\nimport AuditLog from \"@/models/AuditLog.model\";\nimport VideoMeeting from \"@/models/VideoMeeting.model\";\nimport VideoMeetingRequest from \"@/models/VideoMeetingRequest.model\";\nimport PatientSessionSummary from \"@/models/PatientSessionSummary.model\";\nimport { ProgramPreset } from \"@/models/ProgramPreset.model\";\nimport DayTrainingSummary from \"@/models/DayTrainingSummary.model\";\nimport PerformanceActivityResult from \"@/models/PerformanceActivityResult.model\";\nimport PerformanceActivityPlanningAndTraining from \"@/models/PerformanceActivityPlanningAndTraining.model\";\nimport CustomerNotification from \"@/models/CustomerNotification.model\";\nimport InstructionsForUse from \"@/models/InstructionsForUse.model\";\nimport AuthOptions from \"@/models/AuthOptions.model\";\nimport PasswordOptions from \"@/models/PasswordOptions.model\";\nimport ActivityPatientUsage from \"@/models/ActivityPatientUsage.model\";\nimport OptionalFeatureDefinition from \"@/models/OptionalFeatureDefinition.model\";\nimport OptionalFeatureActivation from \"@/models/OptionalFeatureActivation.model\";\nimport TrainingMaterial from \"@/models/training-material/TrainingMaterial.model\";\nimport TherapeuticGoal from \"@/models/TherapeuticGoal.model\";\nimport LevelRecommendation from \"@/models/LevelRecommendation.model\";\nimport FeedbackReport from \"@/models/FeedbackReport.model\";\nimport FeedbackReportAttachment from \"@/models/FeedbackReportAttachment.model\";\nimport WeeklyActiveTrainingTimeGoalAndCompletion from \"@/models/WeeklyActiveTrainingTimeGoalAndCompletion.model\";\nimport WeeklyActiveTrainingTimeGoal from \"@/models/WeeklyActiveTrainingTimeGoal.model\";\nimport PersonalAccessToken from \"@/models/PersonalAccessToken.model\";\n\nVue.use(Vuex);\n\nVuexORM.use(VuexORMAxios);\n\nconst database = new VuexORM.Database();\n\ndatabase.register(Customer);\ndatabase.register(License);\ndatabase.register(PatientLicense);\ndatabase.register(Site);\ndatabase.register(SiteUnit);\ndatabase.register(Timezone);\ndatabase.register(ActivityDescription);\ndatabase.register(ActivityPatientUsage);\ndatabase.register(Asset);\ndatabase.register(UserSession);\ndatabase.register(ProfileModel);\ndatabase.register(PersonalSettings);\ndatabase.register(AuditLog);\ndatabase.register(VideoMeeting);\ndatabase.register(VideoMeetingRequest);\ndatabase.register(PatientSessionSummary);\ndatabase.register(ProgramPreset);\ndatabase.register(DayTrainingSummary);\ndatabase.register(PerformanceActivityResult);\ndatabase.register(PerformanceActivityPlanningAndTraining);\ndatabase.register(CustomerNotification);\ndatabase.register(InstructionsForUse);\ndatabase.register(AuthOptions);\ndatabase.register(Group);\ndatabase.register(OptionalFeatureDefinition);\ndatabase.register(OptionalFeatureActivation);\ndatabase.register(TrainingMaterial);\ndatabase.register(PasswordOptions);\ndatabase.register(TherapeuticGoal);\ndatabase.register(LevelRecommendation);\ndatabase.register(FeedbackReport);\ndatabase.register(FeedbackReportAttachment);\ndatabase.register(WeeklyActiveTrainingTimeGoalAndCompletion);\ndatabase.register(WeeklyActiveTrainingTimeGoal);\ndatabase.register(PersonalAccessToken);\n\nconst store = new Vuex.Store({\n modules: {\n Auth,\n Language,\n Onboarding,\n Profile,\n ZoomAccess,\n },\n plugins: [VuexORM.install(database)],\n});\n\n/**\n * Clears all data locally stored on the webapp, including ORM data.\n */\nconst clearStores = () => {\n Promise.all([\n store.dispatch(\"Profile/clearStore\"),\n store.dispatch(\"Onboarding/clearStore\"),\n store.dispatch(\"ZoomAccess/clearStore\"),\n store.dispatch(\"entities/deleteAll\"),\n store.dispatch(\"Auth/clearStore\"),\n ]).catch((e) => {\n // Show debug data only in development environment\n if (process.env.NODE_ENV === \"development\") {\n console.log(e);\n }\n });\n};\n\n/**\n * Clears all possible data from the previously selected patient.\n */\nconst clearSelectedPatientStoreData = () => {\n return Promise.all([\n store.dispatch(\"Profile/clearStore\"),\n store.dispatch(\"Onboarding/clearStore\"),\n UserSession.deleteAll(),\n ProgramPreset.deleteAll(),\n DayTrainingSummary.deleteAll(),\n PerformanceActivityResult.deleteAll(),\n PerformanceActivityPlanningAndTraining.deleteAll(),\n ActivityPatientUsage.deleteAll(),\n TherapeuticGoal.deleteAll(),\n WeeklyActiveTrainingTimeGoal.deleteAll(),\n WeeklyActiveTrainingTimeGoalAndCompletion.deleteAll(),\n LevelRecommendation.deleteAll(),\n ]).catch((e) => {\n // Show debug data only in development environment\n if (process.env.NODE_ENV === \"development\") {\n console.log(e);\n }\n });\n};\n\nexport default store;\nexport { clearStores, clearSelectedPatientStoreData };\n","// Data stored in the local storage\n\nconst refreshTokenStorageName = \"mm_refresh_token\";\nconst deviceIdStorageName = \"mm_device_id\";\nconst languageStorageName = \"mm_language\";\nconst stayLoggedInStorageName = \"mm_stay_logged_in\";\n\n// Language\nexport function setLanguage(language) {\n return window.localStorage.setItem(languageStorageName, language);\n}\n\nexport function getLanguage() {\n let language = window.localStorage.getItem(languageStorageName);\n // Language is set based on the navigator and its validity will be checked when loading the page\n if (!language) {\n language = navigator.language || navigator.languages[0];\n setLanguage(language);\n }\n return language;\n}\n\n// Webapp Device ID\nexport function setLocalStorageDeviceId(deviceId) {\n window.localStorage.setItem(deviceIdStorageName, deviceId);\n}\n\nexport function getLocalStorageDeviceId() {\n return window.localStorage.getItem(deviceIdStorageName);\n}\n\n// Refresh token\nexport function setLocalStorageRefreshToken(refreshToken) {\n window.localStorage.setItem(refreshTokenStorageName, refreshToken);\n}\n\nexport function getLocalStorageRefreshToken() {\n return window.localStorage.getItem(refreshTokenStorageName);\n}\n\nexport function removeLocalStorageRefreshToken() {\n window.localStorage.removeItem(refreshTokenStorageName);\n}\n\n// Stay logged in boolean\nexport function setLocalStorageStayLoggedIn(stayLoggedIn) {\n window.localStorage.setItem(stayLoggedInStorageName, stayLoggedIn);\n}\n\nexport function getLocalStorageStayLoggedIn() {\n return (\n JSON.parse(window.localStorage.getItem(stayLoggedInStorageName)) === true\n );\n}\n\nexport function removeLocalStorageStayLoggedIn() {\n window.localStorage.removeItem(stayLoggedInStorageName);\n}\n","// Data stored in the session storage\nconst disableTeleconsultationInStorageName = \"mm_disable_teleconsultation\";\nconst disableSideBarInStorageName = \"mm_disable_sidebar\";\n\n// Disable teleconsultation\nexport function setSessionStorageDisableTeleconsultation(\n disableTeleconsultation\n) {\n window.sessionStorage.setItem(\n disableTeleconsultationInStorageName,\n disableTeleconsultation\n );\n}\n\nexport function getSessionStorageDisableTeleconsultation() {\n return (\n window.sessionStorage.getItem(disableTeleconsultationInStorageName) ===\n \"true\"\n );\n}\n\n// Disable sidebar\nexport function setSessionStorageDisableSideBar(disableSideBar) {\n window.sessionStorage.setItem(disableSideBarInStorageName, disableSideBar);\n}\n\nexport function getSessionStorageDisableSideBar() {\n return window.sessionStorage.getItem(disableSideBarInStorageName) === \"true\";\n}\n","/**\n * Active side keys.\n * Used in conjunction with trained functions to create categories\n * and for translations\n */\nconst ActiveSidesKeys = {\n NotApplicable: \"Bilateral\",\n undefined: \"Bilateral\",\n Left: \"Left\",\n Right: \"Right\",\n};\n\n/**\n * Returns the formatted active side based on raw active side data.\n * @param activeSide {string}\n * @return {string}\n */\nconst getFormattedActiveSide = (activeSide) => {\n return ActiveSidesKeys[activeSide] == undefined\n ? ActiveSidesKeys.undefined\n : ActiveSidesKeys[activeSide];\n};\n\nexport { getFormattedActiveSide };\n","import Cookies from \"js-cookie\";\n\nconst cookiesAcceptedName = \"companion_cookies_accepted\";\nconst tokenCookieName = \"mm_token\"; // N.B.: Name also used by the MMGO\nconst cookieBarState = \"companion_cookie_bar\";\n\nconst CookieStatus = Object.freeze({\n NotSet: \"NotSet\",\n Accepted: \"Accepted\",\n Declined: \"Declined\",\n});\n\nexport function areCookiesAccepted() {\n return localStorage.getItem(cookiesAcceptedName) === CookieStatus.Accepted;\n}\n\nexport function acceptCookies() {\n localStorage.setItem(cookiesAcceptedName, CookieStatus.Accepted);\n}\n\nexport function declineCookies() {\n localStorage.setItem(cookiesAcceptedName, CookieStatus.Declined);\n}\n\n/**\n * Hide the cookie bar, e.g. when in navigate mode\n */\nexport function hideCookieBar() {\n sessionStorage.setItem(cookieBarState, \"hide\");\n}\n\nexport function isCookieBarHidden() {\n return sessionStorage.getItem(cookieBarState) === \"hide\";\n}\n\n/**\n * Set the access token cookie value\n * The access token cookie itself will expire after 30 days if not set as a session cookie\n * See: https://developer.mozilla.org/fr/docs/Web/HTTP/Headers/Set-Cookie/SameSite\n * We flag our cookies as secure and permit their use in third party apps.\n * @param token {string}\n */\n\nexport function setAccessTokenCookie(token, sessionCookie = true) {\n const expirationInDaysFromNow = 30;\n Cookies.set(tokenCookieName, token, {\n sameSite: \"Strict\",\n secure: true,\n expires: sessionCookie ? undefined : expirationInDaysFromNow,\n });\n}\n\nexport function getAccessTokenCookie() {\n return Cookies.get(tokenCookieName);\n}\n\nexport function removeAccessTokenCookie() {\n Cookies.remove(tokenCookieName, { sameSite: \"Strict\", secure: true });\n}\n\n// Telemetry cookies\nexport function setAppInsightCookie(name, value) {\n Cookies.set(name, value, { sameSite: \"Strict\", secure: true });\n}\n\nexport function getAppInsightCookie(name) {\n return Cookies.get(name);\n}\n\nexport function removeAppInsightCookie(name) {\n Cookies.remove(name, { sameSite: \"Strict\", secure: true });\n}\n","/*\n The date utils mainly uses date-fns for date formatting and transformations\n https://date-fns.org/docs/Getting-Started\n\n */\n\nimport {\n format as formatFns,\n subDays,\n isSameDay,\n isSameYear,\n startOfWeek,\n endOfWeek,\n getWeek,\n subYears,\n} from \"date-fns\";\nimport { fr, it, es, ro, enGB, enUS, de, ar } from \"date-fns/locale\";\nimport store from \"@/store\";\nimport { defaultLocale, getLocaleFrom } from \"@/utils/locales\";\n\nconst DMMMMYYYY = \"d MMMM yyyy\";\nconst DDMMMYYYY = \"dd MMM yyyy\";\nconst DDMMM = \"dd MMM\";\nconst DMMMM = \"d MMMM\";\nconst EEEEDMMMM = \"EEEE, d MMMM\"; // Monday, 1\nconst EEEEDMMMMYYYY = \"EEEE, d MMMM yyyy\"; // Monday, 1 january 1900\nconst MMMMYYYY = \"MMMM yyyy\";\nconst DDMMMYYYYHHmm = \"dd MMM yyyy HH:mm\";\nconst DDMMMYYYYHHmmA = \"dd MMM yyyy hh:mm a\";\nconst DDMMMYYYYHHmmssSSS = \"dd MMM yyyy HH:mm:ss.SSS\";\nconst DDMMMYYYYHHmmssSSSA = \"dd MMM yyyy hh:mm:ss.SSS a\";\nconst DDMMMYYYYHHMMss = \"dd MMM yyyy HH:mm:ss\";\nconst DDMMMYYYYHHMMssA = \"dd MMM yyyy hh:mm:ss a\";\nconst Hmm = \"H:mm\";\nconst HmmA = \"h:mm a\";\nconst HHmm = \"HH:mm\";\nconst HHmmA = \"hh:mm a\";\nconst MMDD = \"MM dd\";\n\n/**\n * date-fns Locale object used for different time/date localization purposes.\n */\nconst locales = {\n \"en-GB\": enGB,\n \"en-US\": enUS,\n fr: fr,\n it: it,\n es: es,\n ro: ro,\n de: de,\n ar: ar,\n};\n\nfunction getDefaultBirthDate() {\n return subYears(new Date(), 70);\n}\n\nfunction format(value, format) {\n // check if value is a date\n if (value instanceof Date) {\n return formatFns(value, format, {\n locale: locales[store.getters[\"Language/language\"]],\n });\n }\n\n // If value is null or undefined return empty string\n if (!value) {\n return \"\";\n }\n\n // if it is not a date format it to date\n if (!(value instanceof Date)) {\n value = new Date(value);\n }\n\n return formatFns(value, format, {\n locale: locales[store.getters[\"Language/language\"]],\n });\n}\n\nfunction use12HourFormat() {\n return getLocaleFrom(store.getters[\"Language/language\"]) === defaultLocale;\n}\n\n/**\n * Format the date to a string with the format DDMMM\n * @param {date} value\n */\nfunction formatToDDMMM(value) {\n return format(value, DDMMM);\n}\n\nfunction formatToDMMMM(value) {\n return format(value, DMMMM);\n}\n\nfunction formatToEEEEDMMMM(value) {\n return format(value, EEEEDMMMM);\n}\n\nfunction formatToEEEEDMMMMYYYY(value) {\n return format(value, EEEEDMMMMYYYY);\n}\n\n/**\n * Format the date to a string with the format DDMMMYYYY\n * @param {date} value\n */\nfunction formatToDDMMMYYYY(value) {\n return format(value, DDMMMYYYY);\n}\n\nfunction formatToDMMMMYYYY(value) {\n return format(value, DMMMMYYYY);\n}\n\nfunction formatToDDMMMYYYYHmm(value, use12hIfAvailable = true) {\n return format(\n value,\n use12HourFormat() && use12hIfAvailable ? DDMMMYYYYHHmmA : DDMMMYYYYHHmm\n );\n}\n\nfunction formatToDDMMMYYYYHHMMss(value, use12hIfAvailable = true) {\n return format(\n value,\n use12HourFormat() && use12hIfAvailable ? DDMMMYYYYHHMMssA : DDMMMYYYYHHMMss\n );\n}\n\nfunction formatToDDMMMYYYYHHmmssSSS(value, use12hIfAvailable = true) {\n return format(\n value,\n use12HourFormat() && use12hIfAvailable\n ? DDMMMYYYYHHmmssSSSA\n : DDMMMYYYYHHmmssSSS\n );\n}\n\nfunction formatToHmm(value, use12hIfAvailable = true) {\n return format(value, use12HourFormat() && use12hIfAvailable ? HmmA : Hmm);\n}\n\nfunction formatToHHmm(value, use12hIfAvailable = true) {\n return format(value, use12HourFormat() && use12hIfAvailable ? HHmmA : HHmm);\n}\n\nfunction formatToMMDD(value) {\n return format(value, MMDD);\n}\n\nfunction formatToMMMMYYYY(value) {\n return format(value, MMMMYYYY);\n}\n\n/**\n * Returns whether the provided object is a valid date\n * @param date\n */\nfunction isValidDate(date) {\n return date instanceof Date && !isNaN(date);\n}\n\n// Returns whether the current date is today\nfunction isToday(date) {\n let today = new Date();\n return isSameDay(today, date);\n}\n\nfunction isYesterday(date) {\n let yesterday = subDays(new Date(), 1);\n return isSameDay(yesterday, date);\n}\n\nfunction isSameYearAsToday(date) {\n let today = new Date();\n return isSameYear(today, date);\n}\n\n// Returns whether the date is in the past\nfunction isInThePast(date) {\n return date < new Date();\n}\n\n// Get the minimum time of the day for the given date\nfunction getDayDate(date) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n}\n\nfunction startOfWeekForCurrentLanguage(date) {\n return startOfWeek(date, {\n locale: locales[store.getters[\"Language/language\"]],\n });\n}\n\nfunction endOfWeekForCurrentLanguage(date) {\n return endOfWeek(date, {\n locale: locales[store.getters[\"Language/language\"]],\n });\n}\n\nfunction getWeekForCurrentLanguage(date) {\n return getWeek(date, {\n locale: locales[store.getters[\"Language/language\"]],\n });\n}\n\nexport {\n getDefaultBirthDate,\n formatToDDMMMYYYYHHMMss,\n formatToDDMMMYYYYHHmmssSSS,\n formatToDDMMMYYYY,\n formatToDMMMMYYYY,\n formatToDDMMM,\n formatToDMMMM,\n formatToMMMMYYYY,\n formatToDDMMMYYYYHmm,\n formatToEEEEDMMMM,\n formatToEEEEDMMMMYYYY,\n formatToHmm,\n formatToHHmm,\n formatToMMDD,\n format,\n isValidDate,\n isToday,\n isYesterday,\n getDayDate,\n isInThePast,\n isSameYearAsToday,\n use12HourFormat,\n startOfWeekForCurrentLanguage,\n endOfWeekForCurrentLanguage,\n getWeekForCurrentLanguage,\n};\n","import { lowerFirst } from \"lodash\";\nimport { tr } from \"@/utils/translation\";\n\n/**\n * Transform an array of string to dropdown entries.\n * @param ids [string] array of string ids to set as options\n * @param translationPrefix path to the translation key\n */\nfunction getDropdownEntries(entries, translationPrefix) {\n const entriesTranslated = Object.values(entries).map((id) => ({\n id: id,\n name: tr(`${translationPrefix}.${lowerFirst(id)}`),\n }));\n return getDropdownOptionsFromObjectArray(entriesTranslated);\n}\n\nfunction groupDropdownEntries(dropdownObject) {\n const entries = Object.values(dropdownObject);\n\n // Add indent key true to the entry within the group defined by prefix word\n let title = \"\";\n\n const entriesGrouped = entries.map((entry, index) => {\n // If we already found title in previous iterations check if we continue\n if (title && entry.id.startsWith(title)) {\n entry[\"indent\"] = true;\n return entry;\n } else {\n title = \"\";\n }\n\n // If previous id is prefix of the current id than it's group with\n const previous = entries[index - 1]?.id.slice(0, -1);\n\n if (previous && entry.id.startsWith(previous)) {\n title = previous;\n entry[\"indent\"] = true;\n return entry;\n }\n return entry;\n });\n\n return getDropdownOptionsFromObjectArray(entriesGrouped);\n}\n\n/**\n * Get dropdown options from object array\n * @param entries {Array} array of objects to set as options.\n * Object has the following properties\n * - id: [mandatory] is the unique key of the option\n * - name: translated name to display the option\n * - icon: icon to display as option prefix\n * - description: description to add below the option\n */\nfunction getDropdownOptionsFromObjectArray(entries) {\n return entries.reduce((obj, entry) => {\n obj[entry.id] = entry;\n obj[entry.id][\"name\"] = entry.name || entry.id;\n obj[entry.id][\"icon\"] = entry.icon || \"\";\n obj[entry.id][\"description\"] = entry.description || \"\";\n obj[entry.id][\"$isDisabled\"] = entry.isDisabled || false;\n return obj;\n }, {});\n}\n\nexport {\n getDropdownEntries,\n getDropdownOptionsFromObjectArray,\n groupDropdownEntries,\n};\n","import { tr } from \"@/utils/translation\";\nimport { clamp } from \"@/utils/math\";\n\n/**\n * Get minutes from seconds\n * @param {number} seconds The seconds\n */\nfunction getMinutesFromSeconds(seconds) {\n return Math.round(seconds / 60);\n}\n\nfunction getMinutesFromSecondsRoundUpper(seconds) {\n return Math.ceil(seconds / 60);\n}\n\nfunction getDaysAndHoursFromHours(hours) {\n let displayHours = hours % 24;\n let displayDays = Math.round(hours - displayHours) / 24;\n return [displayDays, displayHours];\n}\n\n/**\n * Get hours and minutes string from minutes\n * @param {number} minutes The minutes\n */\nfunction getHoursAndMinutesFromMinutes(minutes) {\n let displayMinutes = minutes % 60;\n let displayHours = Math.round(minutes - displayMinutes) / 60;\n return [displayHours, displayMinutes];\n}\n\n/**\n * Get minutes and seconds array of values from seconds\n * @param {number} seconds The seconds\n */\nfunction getMinutesAndSecondsFromSeconds(seconds) {\n let roundedSeconds = Math.round(seconds);\n let displayedSeconds = roundedSeconds % 60;\n let displayedMinutes = (roundedSeconds - displayedSeconds) / 60;\n return [displayedMinutes, displayedSeconds];\n}\n\nfunction getAdaptiveTranslatedTimeFromSeconds(\n seconds,\n withoutZeroUnit = false,\n withoutSeconds = false\n) {\n // Returns '<1s' when between 0 and 1s\n if (seconds > 0 && seconds < 1) {\n return tr(\"Common.DurationWithValues.lessThanOneSecondShort\");\n }\n // Returns two biggest units\n seconds = Math.round(seconds); // Avoid 59.55+ issues.\n if (seconds >= 60) {\n let minutesSeconds = getMinutesAndSecondsFromSeconds(seconds);\n // If the time is bigger than 60 minutes, we swap to hour display\n if (minutesSeconds[0] >= 60) {\n let hoursMinutes = getHoursAndMinutesFromMinutes(minutesSeconds[0]);\n if (hoursMinutes[1] == 0 && withoutZeroUnit) {\n return tr(\"Common.DurationWithValues.hoursDisplayWithLegends\", {\n hours: hoursMinutes[0],\n });\n }\n return tr(\"Common.DurationWithValues.hoursMinutesDisplayWithLegends\", {\n hours: hoursMinutes[0].toString(),\n minutes: convertToTwoDigitValue(hoursMinutes[1]),\n });\n }\n if ((minutesSeconds[1] == 0 && withoutZeroUnit) || withoutSeconds) {\n return tr(\"Common.DurationWithValues.minutesDisplayWithLegends\", {\n minutes: minutesSeconds[0],\n });\n }\n return tr(\"Common.DurationWithValues.minutesSecondsDisplayWithLegends\", {\n minutes: minutesSeconds[0].toString(),\n seconds: convertToTwoDigitValue(minutesSeconds[1]),\n });\n }\n\n // Returns single digit if the duration is less than 10 seconds\n return tr(\"Common.DurationWithValues.secondsDisplayWithLegends\", {\n seconds: seconds < 10 ? seconds : convertToTwoDigitValue(seconds),\n });\n}\n\n/**\n * Indicates if the \"seconds\" unit is obsolete between several durations in the case\n * where all durations are perfectly equal to a multiple of minutes or hours\n * @param values\n * @return true if all values are perfectly equal to a multiple of minutes or\n * hours, false if one or several values contains seconds\n */\nfunction isSmallestUnitObsoleteBetweenSeveralDuration(values) {\n if (values.some((val) => val >= 3600)) {\n let res = true;\n values.forEach((val) => {\n res = res && (val / 3600) % 60 === 0;\n });\n return res;\n }\n let res = true;\n values.forEach((val) => {\n res = res && val % 60 === 0;\n });\n return res;\n}\n\nfunction getBiggestUnitBetweenSeveralDuration(values) {\n let biggestValue = Math.max(...values);\n\n if (Math.round(biggestValue) >= 3600) {\n return 0; // hour\n } else if (Math.round(biggestValue) >= 60) {\n return 1; // minute\n } else {\n return 2; // second\n }\n}\n\nfunction getAlignedDurationDataWithBiggestUnit(value, biggestUnit, nUnits = 2) {\n let durationData = getAlignedDurationData(value);\n\n // Ensure that the number of unit is correct\n nUnits = clamp(nUnits, 1, durationData.length);\n\n // Remove the values above the biggest unit\n for (let i = 0; i < biggestUnit; i++) {\n durationData[i].value = \"\";\n durationData[i].unit = \"\";\n }\n\n // If we display only 1 unit, we should handle the edge case where the duration is zero or smaller than biggest unit\n if (nUnits == 1) {\n if (value == 0) {\n durationData[biggestUnit].value = \"0\";\n return durationData.slice(biggestUnit, biggestUnit + nUnits);\n }\n if (\n (biggestUnit == 0 && Math.round(value) < 3600) ||\n (biggestUnit == 1 && Math.round(value) < 60) ||\n (biggestUnit == 2 && value < 1)\n ) {\n durationData[biggestUnit].value = tr(\n \"Common.DurationWithValues.lessThanOne\"\n );\n return durationData.slice(biggestUnit, biggestUnit + nUnits);\n }\n }\n\n // If we display only 2 units, we should handle the edge cases where the duration is zero or too low compared to the biggest unit\n if (nUnits == 2) {\n // If biggest unit is [hours]\n if (biggestUnit == 0) {\n // If the duration is 0, we should display 0 min (instead of 0 sec)\n if (value == 0) {\n durationData[biggestUnit].value = \"\";\n durationData[biggestUnit].unit = \"\";\n durationData[biggestUnit + 1].value = \"0\";\n return durationData.slice(biggestUnit, biggestUnit + nUnits);\n }\n // If the duration is less than 60, we should display <1 min\n if (Math.round(value) < 60) {\n durationData[biggestUnit].value = \"\";\n durationData[biggestUnit].unit = \"\";\n durationData[biggestUnit + 1].value = tr(\n \"Common.DurationWithValues.lessThanOne\"\n );\n return durationData.slice(biggestUnit, biggestUnit + nUnits);\n }\n }\n }\n\n // If the biggest unit is bigger than [seconds] and contains double zeros, we remove them\n if (\n biggestUnit != durationData.length - 1 &&\n durationData[biggestUnit].value == \"00\"\n ) {\n durationData[biggestUnit].value = \"\";\n durationData[biggestUnit].unit = \"\";\n\n // If the second biggest unit contains a trailing zero, we remove it\n if (durationData[biggestUnit + 1].value.charAt(0) == \"0\") {\n durationData[biggestUnit + 1].value =\n durationData[biggestUnit + 1].value.charAt(1);\n }\n return durationData.slice(biggestUnit, biggestUnit + nUnits);\n }\n // If the biggest unit contains a trailing zero, we remove it\n if (durationData[biggestUnit].value.charAt(0) == \"0\") {\n durationData[biggestUnit].value = durationData[biggestUnit].value.charAt(1);\n }\n return durationData.slice(biggestUnit, biggestUnit + nUnits);\n}\n\n/**\n * Returns a fixed formatted duration used for stylized labels with h/m/s\n * @param value\n * @return array of objects with unit and values properties for h/m/s\n */\nfunction getAlignedDurationData(value) {\n value = Math.round(value); // Avoid 59.55+ issues.\n let durations = [];\n // Create duration data table\n for (let i = 0; i < 3; i++) {\n durations.push({\n value: convertToTwoDigitValue(0),\n unit:\n i == 0\n ? tr(\"Common.Duration.hoursShort\")\n : i == 1\n ? tr(\"Common.Duration.minutesShort\")\n : tr(\"Common.Duration.secondsShort\"),\n });\n }\n // Fill duration data table\n while (value >= 60) {\n if (value >= 3600) {\n let hours = Math.floor(value / 3600);\n durations[0].value = convertToTwoDigitValue(hours);\n value = value % 3600;\n } else if (value >= 60) {\n let minutes = Math.floor(value / 60);\n durations[1].value = convertToTwoDigitValue(minutes);\n value = value % 60;\n }\n }\n if (value > 0) {\n let seconds = Math.round(value);\n durations[2].value = convertToTwoDigitValue(seconds);\n }\n\n return durations;\n}\n\n/**\n * Get minutes and seconds string from seconds\n * @param {number} seconds The seconds\n */\nfunction getMinutesAndSecondsFromSecondsAsFormattedString(seconds) {\n let minutesSeconds = getMinutesAndSecondsFromSeconds(seconds);\n return tr(\"Common.DurationWithValues.minutesSecondsDisplayWithLegends\", {\n minutes: convertToTwoDigitValue(minutesSeconds[0]),\n seconds: convertToTwoDigitValue(minutesSeconds[1]),\n });\n}\n\nfunction convertToTwoDigitValue(value) {\n return value.toLocaleString(\"en-US\", {\n minimumIntegerDigits: 2,\n useGrouping: false,\n });\n}\n\nexport {\n getMinutesAndSecondsFromSeconds,\n getMinutesFromSeconds,\n getHoursAndMinutesFromMinutes,\n getMinutesFromSecondsRoundUpper,\n getMinutesAndSecondsFromSecondsAsFormattedString,\n getAdaptiveTranslatedTimeFromSeconds,\n getAlignedDurationData,\n getAlignedDurationDataWithBiggestUnit,\n getBiggestUnitBetweenSeveralDuration,\n isSmallestUnitObsoleteBetweenSeveralDuration,\n getDaysAndHoursFromHours,\n};\n","// N.B.: This method is neither placed into translation nor in language services to avoid a circular dependency.\n\nimport Store from \"@/store/index\";\nimport { getLanguageCodeFrom, defaultLanguage } from \"@/utils/locales\";\n\n/**\n * Extract the localized text from a language based dictionary of the following type:\n * text[lang] = \"localized text\"\n * @param text\n * @return {string|*}\n */\nexport function extractLocale(text) {\n if (!text) return \"\";\n const langCode = getLanguageCodeFrom(Store.getters[\"Language/language\"]);\n return text[langCode] || text[defaultLanguage];\n}\n","/**\n * Remove accents and diacritics\n * https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript/37511463#37511463\n */\nfunction removeAccentAndDiacritics(str) {\n return str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n}\n\n/**\n * Normalize one term for search or filtering\n * Return a trimmed string in lower case without diacritics\n * @param {string} term to tidy\n */\nfunction tidySearchTerm(term) {\n return removeAccentAndDiacritics(term).toLowerCase().trim();\n}\n\n/**\n * Normalize space separated terms for search or filtering\n * Return an array of trimmed string in lower case without diacritics\n * @param {string} terms to tidy are space separated\n */\nfunction tidySearchTerms(terms) {\n return tidySearchTerm(terms).split(/\\s+/);\n}\n\n/**\n * Return true if fields contain searched term\n * @param {string[]} fields entity fields to look into\n * @param {string} term to find in the entity\n */\nfunction isEntityCorrespondingTo(fields, term) {\n return tidySearchTerm(fields.join(\"\")).includes(term);\n}\n\n/**\n * Return true iff all terms correspond to the entity\n * @param {string} searchTerms terms are space separated\n */\nfunction isEntityContainsAllTerms(entityFieldsToSearchInto, searchTerms) {\n let terms = tidySearchTerms(searchTerms);\n return terms.every((term) =>\n isEntityCorrespondingTo(entityFieldsToSearchInto, term)\n );\n}\n\n/**\n * Return true if at least one term corresponds to the entity\n * @param {string} searchTerms terms are space separated\n */\nfunction isEntityContainsOneTerm(entityFieldsToSearchInto, searchTerms) {\n let terms = tidySearchTerms(searchTerms);\n return terms.some((term) =>\n isEntityCorrespondingTo(entityFieldsToSearchInto, term)\n );\n}\n\n/**\n * Filter by site name\n */\nfunction siteNameFilter(element, searchTerm) {\n searchTerm = tidySearchTerm(searchTerm);\n return (\n element.name &&\n removeAccentAndDiacritics(element.name).toLowerCase().includes(searchTerm)\n );\n}\n\n/**\n * Filter by username (Patient site id)\n */\nfunction patientSiteIdFilter(element, searchTerm) {\n searchTerm = tidySearchTerm(searchTerm);\n return (\n element.patientSiteId &&\n removeAccentAndDiacritics(element.patientSiteId)\n .toLowerCase()\n .includes(searchTerm)\n );\n}\n\n/**\n * Filter by name\n */\nfunction nameFilter(element, searchTerm) {\n searchTerm = tidySearchTerm(searchTerm);\n let terms = searchTerm.split(\" \");\n if (element.firstName && element.lastName) {\n return terms.every(\n (item) =>\n removeAccentAndDiacritics(element.firstName)\n .toLowerCase()\n .includes(item) ||\n removeAccentAndDiacritics(element.lastName).toLowerCase().includes(item)\n );\n }\n\n if (element.firstName) {\n return terms.every((item) =>\n removeAccentAndDiacritics(element.firstName).toLowerCase().includes(item)\n );\n }\n\n if (element.lastName) {\n return terms.every((item) =>\n removeAccentAndDiacritics(element.lastName).toLowerCase().includes(item)\n );\n }\n}\n\n/**\n * Filter by email\n */\nfunction emailFilter(element, searchTerm) {\n searchTerm = tidySearchTerm(searchTerm);\n return element?.email?.toLowerCase().includes(searchTerm);\n}\n\n/**\n * Filter by actual username\n */\nfunction usernameFilter(element, searchTerm) {\n searchTerm = tidySearchTerm(searchTerm);\n return element?.userName?.toLowerCase().includes(searchTerm);\n}\n\n/**\n * Filter for the MMID\n *\n * Remove the dashes and spaces because the MMID in the patient is\n * without them. Also remove the MMID prefix from the search\n */\nfunction MMIDFilter(element, searchTerm) {\n const term = searchTerm\n .replace(/^MMID-/i, \"\")\n .replace(/[- ]/g, \"\")\n .toLowerCase();\n return element.MMID !== null && element.MMID.toLowerCase().includes(term);\n}\n\n/**\n * Indicates whether a list of space separated terms are found within the given text.\n * @param text\n * @param search\n * @return {boolean}\n */\nfunction termsFilter(text, searchTerm) {\n searchTerm = tidySearchTerm(searchTerm);\n let terms = searchTerm.trim().toLowerCase().split(\" \");\n for (let term of terms) {\n if (text.toLowerCase().includes(term)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Filter by translation object (key with translation in all languages), i.e \"name\"\n * \"name\": {\n * \"en\": \"Magic Carpet\",\n * \"fr\": \"Tapis Magique\",\n * \"de\": \"Zauberteppich\",\n * \"it\": \"Tappeto Magico\",\n * \"es\": \"Alfombra mágica\",\n * \"ro\": \"Covorul fermecat\"\n * },\n */\nfunction objectWithTranslationsFilter(obj, search) {\n let terms = search.trim().toLowerCase().split(\" \");\n for (let term of terms) {\n return Object.values(obj).find((translatedValue) =>\n translatedValue.toLowerCase().includes(term.toLowerCase())\n );\n }\n return false;\n}\n\nexport {\n isEntityContainsAllTerms,\n isEntityContainsOneTerm,\n isEntityCorrespondingTo,\n siteNameFilter,\n patientSiteIdFilter,\n nameFilter,\n emailFilter,\n usernameFilter,\n MMIDFilter,\n removeAccentAndDiacritics,\n tidySearchTerm,\n tidySearchTerms,\n termsFilter,\n objectWithTranslationsFilter,\n};\n","/**\n * Get icon path from file name\n * with fallback on unknown icon in case file doesn't exist\n * @param name {string} icon name.\n */\nfunction getIconPath(name) {\n let icon = null;\n try {\n icon = require(`@/assets/icons/${name}.svg`);\n } catch {\n icon = require(`@/assets/icons/unknown.svg`);\n }\n if (Object.prototype.hasOwnProperty.call(icon, \"default\")) {\n icon = icon.default;\n }\n\n return icon.url;\n}\n\nexport { getIconPath };\n","/**\n * This file contains all the supported locales and languages\n * Locales are the specific language and country combination\n * Full migration in Locales from 2 letter language code to 2 letter language code + 2 letter country code\n * is not done due to the lack of support in MMGO\n * Languages are the language codes only\n */\n\n/**\n * Supported Languages\n * Used for translations\n */\nexport const defaultLanguage = \"en\";\nexport const supportedLanguages = [\"en\", \"de\", \"fr\", \"es\", \"it\", \"ro\", \"ar\"];\n\n/**\n * Supported Locales\n * Used in profiles\n */\nexport const supportedLocales = [\n \"en-US\",\n \"en-GB\",\n \"de\",\n \"fr\",\n \"es\",\n \"it\",\n \"ro\",\n \"ar\",\n];\nexport const defaultLocale = \"en-US\";\n\nconst localesInfo = Object.freeze({\n en: {\n default: {\n root: \"en\",\n short: \"en\",\n long: \"English\",\n flagIso3166: \"us\",\n },\n \"en-US\": {\n root: \"en\",\n short: \"en-US\",\n long: \"American English\",\n flagIso3166: \"us\",\n },\n \"en-GB\": {\n root: \"en\",\n short: \"en-GB\",\n long: \"British English\",\n flagIso3166: \"gb\",\n },\n },\n de: {\n default: {\n root: \"de\",\n short: \"de\",\n long: \"Deutsch\",\n flagIso3166: \"de\",\n },\n },\n fr: {\n default: {\n root: \"fr\",\n short: \"fr\",\n long: \"Français\",\n flagIso3166: \"fr\",\n },\n },\n es: {\n default: {\n root: \"es\",\n short: \"es\",\n long: \"Español\",\n flagIso3166: \"es\",\n },\n },\n it: {\n default: {\n root: \"it\",\n short: \"it\",\n long: \"Italiano\",\n flagIso3166: \"it\",\n },\n },\n ro: {\n default: {\n root: \"ro\",\n short: \"ro\",\n long: \"Română\",\n flagIso3166: \"ro\",\n },\n },\n ar: {\n default: {\n root: \"ar\",\n short: \"ar\",\n long: \"العربية\",\n flagIso3166: \"ar-SA\",\n },\n },\n});\n\n/**\n * Returns Array of supported Locales without default entries\n */\nconst getLocalesSkipDefaults = (group) => {\n return Object.entries(group).reduce((locales, [localeKey, localeInfo]) => {\n if (localeKey !== \"default\") {\n const entry = {\n short: localeInfo.short,\n root: localeInfo.root,\n long: localeInfo.long,\n flagIso3166: localeInfo.flagIso3166,\n };\n locales.push(entry);\n }\n return locales;\n }, []);\n};\n\n/**\n * Returns Array of supported Locale entries of the format\n * [{root:\"en\", short: \"en-US\", long: \"American English\", flagIso3166: \"us\"}, ...]\n */\nexport const supportedLocaleEntries = Object.values(localesInfo).reduce(\n (locales, group) => {\n if (!group.default || Object.keys(group).length > 1) {\n const localesWithoutDefaults = getLocalesSkipDefaults(group);\n locales.push(...localesWithoutDefaults);\n } else {\n const defaultGroup = Object.values(group)[0];\n if (defaultGroup) {\n const entry = {\n short: defaultGroup.short,\n root: defaultGroup.root,\n long: defaultGroup.long,\n flagIso3166: defaultGroup.flagIso3166,\n };\n locales.push(entry);\n }\n }\n return locales;\n },\n []\n);\n\n/**\n * Returns Array of supported Language entries of the format\n * [{root:\"en\", short: \"en\", long: \"English\", flagIso3166: \"us\"}, ...]\n */\nexport const supportedLanguageEntries = Object.entries(localesInfo).reduce(\n (supportedLocales, [key, localeInfo]) => {\n if (localeInfo.default) {\n supportedLocales.push({\n ...localeInfo.default,\n key: key,\n });\n }\n return supportedLocales;\n },\n []\n);\n\n/**\n * Return supported locale from given string\n * \"en\" -> \"en-US\"\n */\nexport const getLocaleFrom = (input) => {\n if (!input) {\n return defaultLocale;\n }\n\n for (const info of supportedLocaleEntries) {\n if (info.short.toLowerCase() === input.toLowerCase()) {\n return info.short;\n }\n }\n\n for (const info of supportedLocaleEntries) {\n if (info.root === input.substring(0, 2).toLowerCase()) {\n return info.short;\n }\n }\n\n return defaultLocale;\n};\n\n/**\n * Returns 2 letter language code with format xx corresponding to provided language\n * \"en-US\" -> \"en\"\n */\nexport const getLanguageCodeFrom = (input) => {\n if (!input) {\n return defaultLanguage;\n }\n\n for (const info of supportedLocaleEntries) {\n if (info.root === input.toLowerCase()) {\n return info.root;\n }\n\n for (const info of supportedLocaleEntries) {\n if (info.root === input.substring(0, 2).toLowerCase()) {\n return info.root;\n }\n }\n }\n return defaultLanguage;\n};\n\n/**\n * Returns supported locale entry from given string\n */\nexport const getLocaleEntryFrom = (input) => {\n const locale = getLocaleFrom(input);\n return supportedLocaleEntries.find((entry) => entry.short === locale);\n};\n","/**\n * Clamps a number between two values\n * @param {number} value to clamp\n * @param {number} min value\n * @param {number} max value\n */\nfunction clamp(value, min, max) {\n if (value < min) return min;\n if (value > max) return max;\n return value;\n}\n\n/**\n * Implements the Bankers Rounding : https://en.wikipedia.org/wiki/Rounding#Round_half_to_even\n * Implementation from https://stackoverflow.com/questions/46470724/how-to-apply-c-sharp-equivalent-rounding-method-in-javascript\n *\n * @param {number} num\n * @param {number} decimalPlaces\n * @returns {number} the bankers rounding value of 'num' taking 'decimals' into account\n */\nfunction evenRound(num, decimals) {\n const d = decimals || 0;\n const m = Math.pow(10, d);\n const n = +(d ? num * m : num).toFixed(8); // Avoid rounding errors\n const i = Math.floor(n);\n const f = n - i;\n const e = 1e-8; // Allow for rounding errors in f\n const r =\n f > 0.5 - e && f < 0.5 + e ? (i % 2 === 0 ? i : i + 1) : Math.round(n);\n return d ? r / m : r;\n}\n\nexport { clamp, evenRound };\n","import Vue from \"vue\";\n\nconst vueInterface = new Vue();\n\n/**\n * Schedule a notification on the Vue UI\n * @param {string} type Either a 'success' or 'error'\n * @param {string} message The message to notify\n * @param {string} title (Optional) the notification title\n */\nexport const notify = (type, message, title = null) => {\n vueInterface.$notify({\n type: type,\n title: title,\n text: message,\n position: \"top center\",\n });\n};\n\n/**\n * Display a notification that will stay until closed by the user.\n * @param {string} type Either a 'success' or 'error'\n * @param {string} message The message to notify\n * @param {string} title (Optional) the notification title\n */\nexport const notifyUntilClosed = (type, message, title = null) => {\n vueInterface.$notify({\n type: type,\n title: title,\n text: message,\n position: \"top center\",\n duration: -1,\n data: { showCloseButton: true },\n });\n};\n","import { startOfDay, endOfDay } from \"date-fns\";\nimport { clamp } from \"@/utils/math\";\n\nconst aggregate = (results, aggregateFcn) => {\n const aggregatedValues = [];\n\n for (let date in results) {\n let value = results[date].reduce(aggregateFcn, 0.0) / results[date].length;\n aggregatedValues.push([new Date(date).getTime(), value]);\n }\n\n return aggregatedValues;\n};\n\nconst sumAggregate = (results, aggregateFcn) => {\n const aggregatedValues = [];\n\n for (let date in results) {\n let value = results[date].reduce(aggregateFcn, 0.0);\n aggregatedValues.push([new Date(date).getTime(), value]);\n }\n\n return aggregatedValues;\n};\n\n/**\n * N.B.: This expects series as an array of the following format:\n * [[date1, value1], [date2, value2], ... ]\n * @param values\n * @return {number}\n */\nconst average = (values) => {\n if (values.length === 0) {\n return 0;\n }\n return (\n values.reduce((accumulator, v) => accumulator + v[1], 0.0) / values.length\n );\n};\n\n/**\n * N.B.: This expects series as an array of the following format:\n * [[date1, value1], [date2, value2], ... ]\n * @param values\n * @return {number}\n */\nconst sum = (values) => {\n return values.reduce((accumulator, v) => accumulator + v[1], 0.0);\n};\n\nconst getStandardizedMovementUnitSeries = (\n results,\n movementId,\n movementSide\n) => {\n const aggregateFcn = (accumulator, v) =>\n accumulator + v.getStandardizedMovementUnits(movementId, movementSide);\n return sumAggregate(results, aggregateFcn);\n};\n\nconst getMovementIntensitySeries = (results, movementId, movementSide) => {\n let aggregatedValues = [];\n\n for (const [date, datedItems] of Object.entries(results)) {\n let totalActiveTime = 0;\n let totalSMU = 0;\n\n for (const activity of datedItems) {\n totalActiveTime += activity.activeTrainingTime;\n totalSMU += activity.getStandardizedMovementUnits(\n movementId,\n movementSide\n );\n }\n let intensity =\n Math.round(totalActiveTime) > 0\n ? (60 * totalSMU) / Math.round(totalActiveTime)\n : 0.0;\n aggregatedValues.push([new Date(date).getTime(), intensity]);\n }\n return aggregatedValues;\n};\n\nconst getActiveTrainingTimesSeries = (results) => {\n const aggregateFcn = (accumulator, v) => accumulator + v.activeTrainingTime;\n return sumAggregate(results, aggregateFcn);\n};\n\nconst getCompensationTimesSeries = (results) => {\n const aggregateFcn = (accumulator, v) => accumulator + v.compensationDuration;\n return sumAggregate(results, aggregateFcn);\n};\n\nconst getAdherencesSeries = (results) => {\n let aggregatedValues = [];\n\n for (const [date, datedItems] of Object.entries(results)) {\n let totalAdherencePerDay = 0;\n let totalActiveTime = 0;\n let totalPlanningTime = 0;\n\n for (const activity of datedItems) {\n totalPlanningTime += activity.plannedSeconds;\n totalActiveTime += activity.trainingTimeAccordingToPlan;\n }\n // If nothing was planned, this day should not appear in the adherence serie\n if (totalPlanningTime == 0) {\n continue;\n }\n totalAdherencePerDay = computeAdherence(totalActiveTime, totalPlanningTime);\n aggregatedValues.push([new Date(date).getTime(), totalAdherencePerDay]);\n }\n return aggregatedValues;\n};\n\nconst getQualityOfMovementsSeries = (results) => {\n let aggregatedValues = [];\n\n for (const [date, datedItems] of Object.entries(results)) {\n let totalQualityPerDay = 0;\n let totalActiveTime = 0;\n let totalCompensationTime = 0;\n\n for (const activity of datedItems) {\n totalCompensationTime += activity.compensationDuration;\n totalActiveTime += activity.activeTrainingTime;\n }\n totalQualityPerDay = computeQualityPercentage(\n totalActiveTime,\n totalCompensationTime\n );\n aggregatedValues.push([new Date(date).getTime(), totalQualityPerDay]);\n }\n return aggregatedValues;\n};\n\nconst getTotalNormalizedQuantityOfMovement = (\n results,\n movementId,\n movementSide\n) => {\n return sum(\n getStandardizedMovementUnitSeries(results, movementId, movementSide)\n );\n};\n\nconst getTotalActiveTrainingTime = (results) => {\n return sum(getActiveTrainingTimesSeries(results));\n};\n\nconst getTotalCompensationTime = (results) => {\n return sum(getCompensationTimesSeries(results));\n};\n\nconst getTotalQualityOfMovement = (results) => {\n let totalActiveTime = getTotalActiveTrainingTime(results);\n let totalCompensationTime = getTotalCompensationTime(results);\n return computeQualityPercentage(totalActiveTime, totalCompensationTime);\n};\n\nconst getTotalAdherence = (result) => {\n let totalActiveTime = 0;\n let totalPlanningTime = 0;\n for (const [date, datedItems] of Object.entries(result)) {\n for (const activity of datedItems) {\n totalActiveTime += activity.trainingTimeAccordingToPlan;\n totalPlanningTime += activity.plannedSeconds;\n }\n }\n return computeAdherence(totalActiveTime, totalPlanningTime);\n};\n\nconst computeQualityPercentage = (\n totalActiveTime,\n totalCompensationDuration\n) => {\n let totalTimeWithoutCompensation =\n totalActiveTime - totalCompensationDuration;\n return totalActiveTime > 0\n ? clamp(totalTimeWithoutCompensation / totalActiveTime, 0.0, 1.0) * 100\n : 0;\n};\n\nconst computeCompensationPercentage = (\n totalActiveTime,\n totalCompensationDuration\n) => {\n return totalActiveTime > 0\n ? clamp(totalCompensationDuration / totalActiveTime, 0.0, 1.0) * 100\n : 0;\n};\n\nconst computeAdherence = (totalActiveTime, totalPlanningTime) => {\n return totalPlanningTime > 0\n ? Math.round(clamp(totalActiveTime / totalPlanningTime, 0.0, 1.0) * 100)\n : 0;\n};\n\nconst filterByDate = (result, startDate, endDate) => {\n return (\n result.Date !== null &&\n (startDate === null ||\n startOfDay(startDate).getTime() <= result.Date.getTime()) &&\n (endDate === null || result.Date.getTime() <= endOfDay(endDate).getTime())\n );\n};\n\nconst filterBySessionType = (result, sessionTypes) => {\n return sessionTypes.has(result.SessionType);\n};\n\nconst filterByTrainedFunction = (result, trainedFunction) => {\n return (\n trainedFunction === \"All\" ||\n result.trainedFunctions.includes(trainedFunction)\n );\n};\n\nconst filterByMovement = (result, movementId) => {\n return (\n movementId === \"All\" ||\n result.DetailedMovementIds.includes(movementId) ||\n movementId === result.GlobalMovementId\n );\n};\n\nconst filterByMovementAndSide = (result, movementId, movementSide) => {\n if (movementSide === \"All\") {\n return result.getMovementSides(movementId).length > 0;\n }\n return result.getMovementSides(movementId).includes(movementSide);\n};\n\nconst filterByActiveSide = (result, activeSide) => {\n return activeSide === \"All\" || activeSide === result.ActiveSide;\n};\n\n/**\n * Session supervision supported types.\n * Also used for categories and for translation purposes.\n */\nconst SessionSupervisionTypeKeys = {\n SupervisedBySelf: \"SupervisedBySelf\",\n Supervised: \"Supervised\",\n Unsupervised: \"Unsupervised\",\n};\n\nexport {\n getStandardizedMovementUnitSeries,\n getMovementIntensitySeries,\n getActiveTrainingTimesSeries,\n getQualityOfMovementsSeries,\n getCompensationTimesSeries,\n getTotalNormalizedQuantityOfMovement,\n getAdherencesSeries,\n getTotalCompensationTime,\n getTotalAdherence,\n getTotalActiveTrainingTime,\n getTotalQualityOfMovement,\n computeQualityPercentage,\n computeCompensationPercentage,\n computeAdherence,\n filterByDate,\n filterBySessionType,\n filterByTrainedFunction,\n filterByMovement,\n filterByMovementAndSide,\n filterByActiveSide,\n SessionSupervisionTypeKeys,\n};\n","/**\n * Format the unformatted mmid\n * @param {string} value The unformatted mmid\n */\nfunction formatToMMIDWithDashes(value) {\n if (!value) {\n return \"\";\n }\n return \"MMID-\" + value.replace(/(\\w{2})(\\w{2})(\\w{2})/, \"$1-$2-$3\");\n}\n\n/**\n * Generates a random uuid\n */\nfunction generateUUID() {\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>\n (\n c ^\n (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))\n ).toString(16)\n );\n}\n\n/**\n * Build the full name from first and lastname\n * @param {string | null} firstName The firstname\n * @param {string | null} lastName The lastname\n * @return {string} The full name under the form 'firstName lastName'\n * or one of the 2 if only one is a valid string\n */\nfunction buildNameFromFirstAndLastName(\n firstName,\n lastName,\n isHtmlMode = false\n) {\n firstName = firstName?.toString()?.trim();\n lastName = lastName?.toString()?.trim();\n if (!firstName?.length && !lastName?.length) {\n return isHtmlMode ? \"--\" : \"\";\n }\n if (!firstName?.length && lastName?.length) {\n return isHtmlMode ? \"\" + lastName + \"\" : lastName;\n }\n if (firstName?.length && !lastName?.length) {\n return firstName;\n }\n return isHtmlMode\n ? firstName + \" \" + lastName + \"\"\n : firstName + \" \" + lastName;\n}\n\nexport { formatToMMIDWithDashes, generateUUID, buildNameFromFirstAndLastName };\n","import { parseISO, isAfter, isBefore } from \"date-fns\";\nimport { sum, toPairs } from \"lodash\";\n\n/** Document version date for Privacy Policy */\nexport const PrivacyPolicyDocumentVersion = \"2023-08-31Z\";\n/** Document version date for Consent Forms */\nexport const ConsentDocumentVersion = \"2019-11-15Z\";\n/** Consent number used */\nexport const MaxConsents = 4;\n\nexport const DocumentType = Object.freeze({\n PrivacyPolicy: \"PrivacyPolicy\",\n ConsentForm: \"ConsentForm\",\n});\n\n// Invalid document version default date\nconst minDate = new Date(1970, 1, 1);\n\n/**\n * Returns the latest document or undefined\n * @param {Array} documents\n * @param {string} documentKind Type of document to look for\n */\nconst latestSignedDocumentForKind = (documents, documentKind) => {\n const signedDocuments = documents || [];\n const documentsOfType = signedDocuments.filter(\n (d) => d?.kind === documentKind || false\n );\n return (\n documentsOfType?.reduce(function (prev, current) {\n return prev &&\n isAfter(parseISO(prev.signedDate), parseISO(current.signedDate))\n ? prev\n : current;\n }, null) || null\n );\n};\n\nconst addZ = (documentVersion) => {\n return documentVersion.includes(\"Z\")\n ? documentVersion\n : `${documentVersion}Z`;\n};\n\n/**\n * Returns the most current signed consent form usable by the webapp\n * @param {Array} signedDocuments Signed documents array\n */\nconst getLatestUsableConsent = (signedDocuments) => {\n const latestConsent = latestSignedDocumentForKind(\n signedDocuments,\n DocumentType.ConsentForm\n );\n\n return latestConsent &&\n !isBefore(\n parseISO(addZ(latestConsent?.documentVersion) || minDate),\n parseISO(ConsentDocumentVersion)\n )\n ? latestConsent\n : null;\n};\n\n/**\n * Returns whether the latest possible Privacy policy is signed.\n * By latest possible, it means the latest the webapp can offer.\n * We accept signature of \"future\" versions to avoid making the user stuck\n * in a signature loop.\n * @param signedDocuments\n * @return {boolean} Whether the document is signed.\n */\nexport const isLatestPossiblePrivacyPolicySigned = (signedDocuments) => {\n const pp = latestSignedDocumentForKind(\n signedDocuments,\n DocumentType.PrivacyPolicy\n );\n return (\n pp &&\n !isBefore(\n parseISO(addZ(pp.documentVersion) || minDate),\n parseISO(PrivacyPolicyDocumentVersion)\n )\n );\n};\n\n/**\n * Deserializes consent to use it in the consent form modal.\n * @param signedDocuments\n */\nexport const deserializeConsent = (signedDocuments) => {\n if (signedDocuments) {\n const currentConsent = getLatestUsableConsent(signedDocuments);\n\n const consents = extractConsents(currentConsent);\n return consents;\n } else {\n let obj = {};\n for (let i = 0; i < MaxConsents; i++) {\n obj[i] = false;\n }\n return obj;\n }\n};\n\n/**\n * Serializes consent to send it back to the backend.\n * @param consentObject Consent object in the format [consent id: true/false, ...]\n * @return {number}\n */\nexport const serializeConsent = (consentObject) => {\n const powers = toPowers(consentObject);\n\n return sum(powers) << 1;\n};\n\n/**\n * Return an object containing from 0 to maxConsents whether a particular\n * consent is given or not.\n * For instance:\n * { 0: false, 1: true, ...}\n *\n * @param {Object} consent Consent form signed document\n */\nexport const extractConsents = (consent) => {\n if (!consent) {\n return Object.assign({}, Array(MaxConsents).fill(false));\n }\n const consentOptions = consent.consentOptions >> 1;\n\n let consents = {};\n\n // the consentOptions value is a bitmask\n for (let i = 0; i < MaxConsents; i++) {\n consents[i] = !!(consentOptions & (2 ** i));\n }\n\n return consents;\n};\n\n/**\n * Maps pairs of key and values back into a bitmask\n * Used for consents\n * @param consentObject Consent object in the format [consent id: true/false, ...]\n * @return {unknown[]} sumable powers for each value\n */\nconst toPowers = (consentObject) => {\n const entries = toPairs(consentObject);\n\n const powers = entries.map(([key, value]) => {\n if (value) {\n return 2 ** key;\n }\n\n return 0;\n });\n\n return powers;\n};\n","import i18n from \"@/i18n\";\n\n/**\n * Translates a given message using the i18n current Vue dictionary\n * @param {string} messageKey The message key to use\n * @returns {string} translated string\n */\nexport const tr = (messageKey, params = null) => {\n return i18n.t(messageKey, params);\n};\n","module.exports = {\n future: {\n removeDeprecatedGapUtilities: true,\n purgeLayersByDefault: true,\n },\n purge: false,\n prefix: \"\",\n important: false,\n separator: \":\",\n theme: {\n colors: {\n transparent: \"transparent\",\n focus: \"rgba(4, 21, 39, 0.8);\",\n black: \"#000\",\n white: \"#fff\",\n primary: \"#37A4DC\",\n disabled: \"#BFBFBF\",\n translucent: {\n 60: \"rgba(256, 256, 256, 0.6)\",\n 90: \"rgba(256, 256, 256, 0.9)\",\n },\n green: {\n 200: \"#f4fcea\",\n 500: \"#97E812\",\n 600: \"#4f9112\",\n \"500a25\": \"#97E81219\",\n 700: \"#3e7211\",\n },\n yellow: {\n 200: \"#fff9eb\",\n 300: \"#ffe9bd\",\n \"300a66\": \"#ffe9bdaa\",\n 500: \"#FFC82C\",\n \"500a25\": \"#FFC82C19\",\n 600: \"#F7931E\",\n 700: \"#E1AD28\",\n },\n orange: {\n 200: \"#fdf0ea\",\n 400: \"#f6c66f\",\n 500: \"#F07313\",\n \"500a25\": \"#F0731719\",\n 800: \"#db5d0c\",\n 900: \"#b86814\",\n },\n red: {\n 100: \"#FEF5F5\",\n 150: \"#ffe9e8\",\n 200: \"#F8CECC\",\n 300: \"#ff8585\",\n 400: \"#ff3535\",\n 500: \"#DD4746\",\n 700: \"#A23C24\",\n },\n gray: {\n 50: \"#F9F9F9\",\n 100: \"#F1F1F2\",\n 150: \"#e6e6e6\",\n 200: \"#E0E2E4\",\n \"200a50\": \"rgba(224, 226, 228, 0.5)\",\n 300: \"#BFBFBF\",\n 400: \"#727272CC\",\n 425: \"rgba(4, 21, 39, 0.8)\",\n 450: \"#959595\",\n 500: \"#727272\",\n 600: \"#5a626b\",\n 625: \"rgba(90,98,107,0.8)\",\n 700: \"#464C59\",\n 800: \"#3c3b3b\",\n },\n blue: {\n 50: \"#f2fbff\",\n 100: \"#EBF6FC\",\n 150: \"#E8EEF1\",\n 200: \"#CCE6F5\",\n 300: \"#73BFE7\",\n 400: \"#4BA4F7\",\n 500: \"#37A4DC\",\n \"500a25\": \"rgba(55, 164, 220, 0.2)\",\n \"500a50\": \"rgba(55, 164, 220, 0.5)\",\n 600: \"#6AA2D6\",\n 700: \"#456E9A\",\n \"700a75\": \"#3B648D\",\n \"700a30\": \"#2A5176\",\n 750: \"#5682AA\",\n \"750a25\": \"#5682AA19\",\n \"750a15\": \"#5682AA0F\",\n 800: \"#1F4566\",\n \"800a60\": \"rgba(31, 69, 102, 0.6)\",\n 900: \"#183453\",\n 950: \"#041527\",\n },\n trainingColors: {\n goal: \"#E0E2E4\",\n selfTraining: \"#6ACBCD\",\n supervised: \"#3B648D\",\n },\n programEditorTabColors: {\n // basic colors\n 1: \"#3cacae\",\n 2: \"#8e346a\",\n 3: \"#ff72b7\",\n 4: \"#ce941c\",\n 5: \"#b973d9\",\n 6: \"#ff9082\",\n // corresponding hover colors\n \"1h\": \"#d9f2f2\",\n \"2h\": \"#f1dae8\",\n \"3h\": \"#ffe6f2\",\n \"4h\": \"#f9ecd2\",\n \"5h\": \"#f5ebfa\",\n \"6h\": \"#ffe8e6\",\n },\n programEditorPresetTabColors: {\n 1: \"#798fa3\",\n \"1h\": \"#798fa3\",\n },\n borgScaleColors: {\n // colors defined in DSR-1099 for patient state\n 0: \"#c5d1ff\",\n 1: \"#a0b5fc\",\n 2: \"#7492ff\",\n 3: \"#82bbf1\",\n 4: \"#4ba4f7\",\n 5: \"#9cdd57\",\n 6: \"#68af00\",\n 7: \"#f5e380\",\n 8: \"#ffc246\",\n 9: \"#ff782f\",\n 10: \"#f25757\",\n },\n },\n spacing: {\n px: \"1px\",\n 0: \"0\",\n 1: \"0.25rem\",\n 2: \"0.5rem\",\n 3: \"0.75rem\",\n 4: \"1rem\",\n 5: \"1.25rem\",\n 6: \"1.5rem\",\n 7: \"1.75rem\",\n 8: \"2rem\",\n 9: \"2.25rem\",\n 10: \"2.5rem\",\n 11: \"2.75rem\",\n 12: \"3rem\",\n 14: \"3.5rem\",\n 15: \"3.75rem\",\n 16: \"4rem\",\n 18: \"4.5rem\",\n 20: \"5rem\",\n 22: \"5.5rem\",\n 23: \"5.75rem\",\n 24: \"6rem\",\n 25: \"6.25rem\",\n 26: \"6.5rem\",\n 28: \"7rem\",\n 30: \"7.5rem\",\n 32: \"8rem\",\n 34: \"8.5rem\",\n 40: \"10rem\",\n 42: \"10.5rem\",\n 44: \"11rem\",\n 48: \"12rem\",\n 52: \"13rem\",\n 54: \"13.5rem\",\n 56: \"14rem\",\n 60: \"15rem\",\n 64: \"16rem\",\n 68: \"17rem\",\n 72: \"18rem\",\n 74: \"18.5rem\",\n 76: \"19rem\",\n 78: \"19.5rem\",\n 80: \"20rem\",\n 82: \"20.5rem\",\n 84: \"21rem\",\n 88: \"22rem\",\n 92: \"23rem\",\n 96: \"24rem\",\n 98: \"24.5rem\",\n 100: \"25rem\",\n 104: \"26rem\",\n 112: \"28rem\",\n 124: \"31rem\",\n 128: \"32rem\",\n 140: \"35rem\",\n 152: \"38rem\",\n 160: \"40rem\",\n 162: \"41rem\",\n 192: \"48rem\",\n 208: \"52rem\",\n 224: \"56rem\",\n 256: \"64rem\",\n },\n screens: {\n sm: \"640px\",\n md: \"768px\",\n lg: \"1024px\",\n xl: \"1280px\",\n \"2xl\": \"1536px\",\n \"3xl\": \"1920px\",\n },\n fontFamily: {\n sans: [\n \"Open Sans\",\n \"-apple-system\",\n \"BlinkMacSystemFont\",\n '\"Segoe UI\"',\n '\"Helvetica Neue\"',\n \"Arial\",\n '\"Noto Sans\"',\n \"sans-serif\",\n '\"Apple Color Emoji\"',\n '\"Segoe UI Emoji\"',\n '\"Segoe UI Symbol\"',\n '\"Noto Color Emoji\"',\n ],\n serif: [\"Georgia\", \"Cambria\", '\"Times New Roman\"', \"Times\", \"serif\"],\n mono: [\n \"Menlo\",\n \"Monaco\",\n \"Consolas\",\n '\"Liberation Mono\"',\n '\"Courier New\"',\n \"monospace\",\n ],\n },\n fontSize: {\n xs: \"0.74rem\",\n sm: \"0.86rem\",\n base: \"1rem\", // 14px\n lg: \"1.15rem\",\n xl: \"1.42rem\",\n \"2xl\": \"1.85rem\",\n \"3xl\": \"1.95rem\",\n \"4xl\": \"2.25rem\",\n \"5xl\": \"3rem\",\n \"6xl\": \"4rem\",\n \"7xl\": \"5rem\",\n },\n fontWeight: {\n light: 100,\n regular: 400,\n semibold: 600,\n bold: 700,\n },\n lineHeight: {\n none: \"1\",\n tight: \"1.2\",\n snug: \"1.3\",\n normal: \"1.4\",\n relaxed: \"1.6\",\n },\n letterSpacing: {\n tight: \"-0.025em\",\n normal: \"0\",\n wide: \"0.01em\",\n wider: \"0.02em\",\n widest: \"0.05em\",\n },\n textColor: (theme) => theme(\"colors\"),\n backgroundColor: (theme) => theme(\"colors\"),\n backgroundPosition: {\n bottom: \"bottom\",\n center: \"center\",\n left: \"left\",\n \"left-bottom\": \"left bottom\",\n \"left-top\": \"left top\",\n right: \"right\",\n \"right-bottom\": \"right bottom\",\n \"right-top\": \"right top\",\n top: \"top\",\n },\n backgroundSize: {\n auto: \"auto\",\n cover: \"cover\",\n contain: \"contain\",\n },\n borderWidth: {\n default: \"1px\",\n 0: \"0\",\n 2: \"2px\",\n 3: \"3px\",\n 4: \"4px\",\n 5: \"5px\",\n 6: \"6px\",\n 8: \"8px\",\n },\n borderColor: (theme) => ({\n ...theme(\"colors\"),\n default: theme(\"colors.gray.300\", \"currentColor\"),\n }),\n borderRadius: {\n none: \"0\",\n sm: \".25rem\",\n default: \".375rem\",\n lg: \".5rem\",\n xl: \".75rem\",\n full: \"9999px\",\n },\n cursor: {\n auto: \"auto\",\n default: \"default\",\n pointer: \"pointer\",\n wait: \"wait\",\n move: \"move\",\n \"not-allowed\": \"not-allowed\",\n },\n width: (theme) => ({\n auto: \"auto\",\n ...theme(\"spacing\"),\n \"1/2\": \"50%\",\n \"1/3\": \"33.33333%\",\n \"2/3\": \"66.66667%\",\n \"1/4\": \"25%\",\n \"3/4\": \"75%\",\n \"1/5\": \"20%\",\n \"2/5\": \"40%\",\n \"3/5\": \"60%\",\n \"4/5\": \"80%\",\n \"1/6\": \"16.66667%\",\n \"5/6\": \"83.33333%\",\n \"1/7\": \"14.285714285%\",\n \"2/7\": \"28.571428571%\",\n \"3/7\": \"42.85714285%\",\n \"4/7\": \"57.14285714%\",\n \"1/9\": \"11.1111%\",\n \"9/10\": \"90%\",\n full: \"100%\",\n screen: \"100vw\",\n max: \"max-content\",\n }),\n height: (theme) => ({\n auto: \"auto\",\n ...theme(\"spacing\"),\n full: \"100%\",\n screen: \"100vh\",\n }),\n minWidth: (theme) => ({\n 0: \"0\",\n ...theme(\"spacing\"),\n full: \"100%\",\n }),\n minHeight: (theme) => ({\n 0: \"0\",\n full: \"100%\",\n ...theme(\"spacing\"),\n screen: \"100vh\",\n }),\n maxWidth: (theme) => ({\n none: \"none\",\n xs: \"20rem\",\n sm: \"24rem\",\n md: \"28rem\",\n lg: \"32rem\",\n xl: \"36rem\",\n \"2xl\": \"42rem\",\n \"3xl\": \"48rem\",\n \"4xl\": \"56rem\",\n \"5xl\": \"64rem\",\n \"6xl\": \"76rem\",\n \"7xl\": \"92rem\",\n \"8xl\": \"112rem\",\n \"9xl\": \"130rem\",\n full: \"100%\",\n ...theme(\"spacing\"),\n }),\n maxHeight: (theme) => ({\n 0: \"0\",\n ...theme(\"spacing\"),\n full: \"100%\",\n screen: \"100vh\",\n }),\n padding: (theme) => theme(\"spacing\"),\n margin: (theme, { negative }) => ({\n auto: \"auto\",\n ...theme(\"spacing\"),\n ...negative(theme(\"spacing\")),\n }),\n objectPosition: {\n bottom: \"bottom\",\n center: \"center\",\n left: \"left\",\n \"left-bottom\": \"left bottom\",\n \"left-top\": \"left top\",\n right: \"right\",\n \"right-bottom\": \"right bottom\",\n \"right-top\": \"right top\",\n top: \"top\",\n },\n boxShadow: {\n default:\n \"0 1px 3px 0 rgba(0, 0, 0, 0.05), 0 1px 2px 3px rgba(0, 0, 0, 0.06)\",\n overlaptop: \"rgba(0, 0, 0, 0.1) 0px -7px 3px -2px\",\n overlapbottom: \"rgba(0, 0, 0, 0.1) 0px 7px 3px -2px\",\n xs: \"4px -2px 1px rgba(0, 0, 0, 0.02), -1px 1px 1px 2px rgba(0, 0, 0, 0.01)\",\n sm: \"0 1px 1px 0 rgba(0, 0, 0, 0.05), 0 1px 1px 1px rgba(0, 0, 0, 0.06)\",\n md: \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n lg: \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n xl: \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n \"2xl\": \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\",\n none: \"none\",\n },\n zIndex: {\n auto: \"auto\",\n 0: 0,\n 10: 10,\n 20: 20,\n 30: 30,\n 40: 40,\n 50: 50,\n },\n opacity: {\n 0: \"0\",\n 25: \".25\",\n 50: \".5\",\n 75: \".75\",\n 100: \"1\",\n },\n fill: (theme) => ({\n ...theme(\"colors\"),\n current: \"currentColor\",\n }),\n stroke: {\n current: \"currentColor\",\n },\n flex: {\n 1: \"1 1 0%\",\n auto: \"1 1 auto\",\n initial: \"0 1 auto\",\n none: \"none\",\n },\n flexGrow: {\n 0: 0,\n default: 1,\n },\n flexShrink: {\n 0: 0,\n default: 1,\n },\n listStyleType: {\n none: \"none\",\n disc: \"disc\",\n decimal: \"decimal\",\n },\n inset: {\n 0: 0,\n auto: \"auto\",\n },\n customForms: (theme) => ({\n default: {\n \"input, textarea\": {\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: 0,\n paddingBottom: 0,\n },\n \"input, textarea, multiselect, select\": {\n borderColor: theme(\"colors.gray.300\"),\n borderRadius: theme(\"borderRadius.default\"),\n \"&:focus\": {\n boxShadow: undefined,\n borderColor: undefined,\n },\n \"&::placeholder\": {\n color: undefined,\n },\n },\n },\n }),\n container: {},\n extend: {\n gridTemplateColumns: {\n 14: \"repeat(14, minmax(0, 1fr))\",\n },\n gridColumnStart: {\n 14: \"14\",\n 15: \"15\",\n },\n gridColumnEnd: {\n 14: \"14\",\n 15: \"15\",\n },\n typography: (theme) => ({\n // prose classes\n default: {\n css: {\n \"ol > li::before\": {\n content: \"\",\n },\n },\n },\n }),\n },\n },\n variants: {\n appearance: [\"responsive\"],\n backgroundAttachment: [\"responsive\"],\n backgroundColor: [\"responsive\", \"hover\", \"focus\"],\n backgroundPosition: [\"responsive\"],\n backgroundRepeat: [\"responsive\"],\n backgroundSize: [\"responsive\"],\n border: [\"first\"],\n borderCollapse: [],\n borderColor: [\"responsive\", \"hover\", \"focus\"],\n borderRadius: [\"responsive\"],\n borderStyle: [\"responsive\"],\n borderWidth: [\"responsive\", \"first\"],\n cursor: [\"responsive\"],\n display: [\"responsive\"],\n flexDirection: [\"responsive\"],\n flexWrap: [\"responsive\"],\n alignItems: [\"responsive\"],\n alignSelf: [\"responsive\"],\n justifyContent: [\"responsive\"],\n alignContent: [\"responsive\"],\n flex: [\"responsive\"],\n flexGrow: [\"responsive\"],\n flexShrink: [\"responsive\"],\n float: [\"responsive\"],\n fontFamily: [\"responsive\"],\n fontWeight: [\"responsive\", \"hover\", \"focus\"],\n height: [\"responsive\"],\n lineHeight: [\"responsive\"],\n listStylePosition: [\"responsive\"],\n listStyleType: [\"responsive\"],\n margin: [\"responsive\", \"first\"],\n maxHeight: [\"responsive\"],\n maxWidth: [\"responsive\"],\n minHeight: [\"responsive\"],\n minWidth: [\"responsive\"],\n negativeMargin: [\"responsive\"],\n objectFit: [\"responsive\"],\n objectPosition: [\"responsive\"],\n opacity: [\"responsive\"],\n outline: [\"focus\"],\n overflow: [\"responsive\"],\n padding: [\"responsive\", \"odd\", \"even\"],\n pointerEvents: [\"responsive\"],\n position: [\"responsive\"],\n inset: [\"responsive\"],\n resize: [\"responsive\"],\n boxShadow: [\"responsive\", \"hover\", \"focus\"],\n fill: [\"hover\", \"focus\"],\n stroke: [],\n tableLayout: [\"responsive\"],\n textAlign: [\"responsive\"],\n textColor: [\"responsive\", \"hover\", \"focus\"],\n fontSize: [\"responsive\"],\n fontStyle: [\"responsive\"],\n textTransform: [\"responsive\"],\n textDecoration: [\"responsive\", \"hover\", \"focus\"],\n fontSmoothing: [\"responsive\"],\n letterSpacing: [\"responsive\"],\n userSelect: [\"responsive\"],\n verticalAlign: [\"responsive\"],\n visibility: [\"responsive\"],\n whitespace: [\"responsive\"],\n wordBreak: [\"responsive\"],\n width: [\"responsive\"],\n zIndex: [\"responsive\"],\n },\n corePlugins: {\n container: false,\n },\n plugins: [\n require(\"@tailwindcss/custom-forms\"),\n require(\"@tailwindcss/typography\"),\n require(\"tailwindcss-rtl\"),\n ],\n};\n","export default {\n id: \"activity-details-usage\",\n viewBox: \"0 0 32 24\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#activity-details\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"activity-flag-usage\",\n viewBox: \"0 0 11 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#activity-flag\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"add-patient-success-usage\",\n viewBox: \"0 0 30 30\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#add-patient-success\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"add-patient-usage\",\n viewBox: \"0 0 100 100\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#add-patient\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"admin-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#admin\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"administration-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#administration\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"archived-users-directory-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#archived-users-directory\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"arrow-simple-left-usage\",\n viewBox: \"0 0 9 7\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#arrow-simple-left\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"arrow-simple-right-usage\",\n viewBox: \"0 0 9 7\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#arrow-simple-right\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"assets-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#assets\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"att-current-usage\",\n viewBox: \"0 0 70 70\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#att-current\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"att-history-usage\",\n viewBox: \"0 0 70 70\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#att-history\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"audit-trail-logs-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#audit-trail-logs\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"body-usage\",\n viewBox: \"0 0 27 41\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#body\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"button-icon-save-usage\",\n viewBox: \"0 0 15 15.04\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#button-icon-save\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"calendar-usage\",\n viewBox: \"0 0 32 32\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#calendar\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"calibration-off-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#calibration-off\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"calibration-on-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#calibration-on\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"callout-down-usage\",\n viewBox: \"0 0 20 20\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#callout-down\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"callout-usage\",\n viewBox: \"0 0 20 20\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#callout\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"ce_logo-usage\",\n viewBox: \"0 0 280 200\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#ce_logo\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"chevron-carousel-left-usage\",\n viewBox: \"0 0 8 15\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#chevron-carousel-left\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"chevron-carousel-right-usage\",\n viewBox: \"0 0 8 15\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#chevron-carousel-right\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"chevron-down-usage\",\n viewBox: \"0 0 16 9\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#chevron-down\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"chevron-left-usage\",\n viewBox: \"0 0 20 20\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#chevron-left\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"chevron-right-usage\",\n viewBox: \"0 0 20 20\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#chevron-right\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"chevron-up-usage\",\n viewBox: \"0 0 16 9\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#chevron-up\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"circle-warning-usage\",\n viewBox: \"0 0 18 18\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#circle-warning\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"close-usage\",\n viewBox: \"0 0 14 14\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#close\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"cog-hollow-usage\",\n viewBox: \"0 0 17.3 17.3\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#cog-hollow\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"companion-logo-usage\",\n viewBox: \"0 0 321.53651 77.91217\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#companion-logo\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"bodyweighttransfer-left-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#bodyweighttransfer-left\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"bodyweighttransfer-right-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#bodyweighttransfer-right\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"leftkneeextension-up-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#leftkneeextension-up\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"leftshoulderabductionadduction-left-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#leftshoulderabductionadduction-left\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"leftshoulderabductionadduction-right-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#leftshoulderabductionadduction-right\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"leftshoulderflexionextension-backward-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#leftshoulderflexionextension-backward\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"leftshoulderflexionextension-forward-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#leftshoulderflexionextension-forward\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"rightkneeextension-up-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#rightkneeextension-up\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"rightshoulderabductionadduction-left-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#rightshoulderabductionadduction-left\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"rightshoulderabductionadduction-right-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#rightshoulderabductionadduction-right\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"rightshoulderflexionextension-backward-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#rightshoulderflexionextension-backward\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"rightshoulderflexionextension-forward-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#rightshoulderflexionextension-forward\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"trunkflexion-backward-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#trunkflexion-backward\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"trunkflexion-forward-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#trunkflexion-forward\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"trunkflexion-left-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#trunkflexion-left\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"trunkflexion-right-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#trunkflexion-right\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"elbow-left-usage\",\n viewBox: \"0 0 27 41\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#elbow-left\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"elbow-right-usage\",\n viewBox: \"0 0 27 41\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#elbow-right\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"head-center-usage\",\n viewBox: \"0 0 26 41\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#head-center\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"head-left-usage\",\n viewBox: \"0 0 26 41\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#head-left\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"head-right-usage\",\n viewBox: \"0 0 26 41\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#head-right\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"leg-left-usage\",\n viewBox: \"0 0 26 41\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#leg-left\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"leg-right-usage\",\n viewBox: \"0 0 26 41\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#leg-right\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"shoulder-left-usage\",\n viewBox: \"0 0 26 41\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#shoulder-left\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"shoulder-right-usage\",\n viewBox: \"0 0 26 41\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#shoulder-right\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"torso-usage\",\n viewBox: \"0 0 26 41\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#torso\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"wrist-left-usage\",\n viewBox: \"0 0 27 41\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#wrist-left\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"wrist-right-usage\",\n viewBox: \"0 0 27 41\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#wrist-right\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"bodyweighttransfer-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#bodyweighttransfer\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"leftkneeextension-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#leftkneeextension\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"leftshoulder-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#leftshoulder\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"rightkneeextension-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#rightkneeextension\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"rightshoulder-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#rightshoulder\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"trunkflexion-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#trunkflexion\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"consent-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#consent\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"contact-us-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#contact-us\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"copy-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#copy\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"create_program-usage\",\n viewBox: \"0 0 17.64 17.5\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#create_program\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"create_template-usage\",\n viewBox: \"0 0 18 18\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#create_template\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"credentials-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#credentials\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"data-export-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#data-export\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"day-period-afternoon-usage\",\n viewBox: \"0 0 40 20\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#day-period-afternoon\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"day-period-morning-usage\",\n viewBox: \"0 0 40 20\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#day-period-morning\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"demo-patient-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#demo-patient\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"done-half-usage\",\n viewBox: \"0 0 18 18\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#done-half\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"done-invert-colors-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#done-invert-colors\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"done-not-training-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#done-not-training\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"done-not-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#done-not\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"done-notassigned-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#done-notassigned\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"done-partially-usage\",\n viewBox: \"0 0 18 18\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#done-partially\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"done-password-criteria-usage\",\n viewBox: \"0 0 18 18\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#done-password-criteria\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"done-rounded-circle-fill-usage\",\n viewBox: \"0 0 18 18\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#done-rounded-circle-fill\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"done-rounded-circle-usage\",\n viewBox: \"0 0 18 18\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#done-rounded-circle\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"done-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#done\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"dpo-admin-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#dpo-admin\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"drag-handle-usage\",\n viewBox: \"0 0 14 14\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#drag-handle\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"duplicate-usage\",\n viewBox: \"0 0 20 20\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#duplicate\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"edit-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#edit\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"email-usage\",\n viewBox: \"0 0 30 30\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#email\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"epro-patients-usage\",\n viewBox: \"0 0 24 24\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#epro-patients\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"european-representative-usage\",\n viewBox: \"0 0 71.57 23.8\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#european-representative\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"export-usage\",\n viewBox: \"0 0 15 15\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#export\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"external-usage\",\n viewBox: \"0 0 20 20\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#external\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"faq-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#faq\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"feedback-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#feedback\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"filter-usage\",\n viewBox: \"0 0 15 18\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#filter\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"ar-SA-usage\",\n viewBox: \"0 0 34 34\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#ar-SA\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"de-usage\",\n viewBox: \"0 0 34 34\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#de\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"es-usage\",\n viewBox: \"0 0 34 34\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#es\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"fr-usage\",\n viewBox: \"0 0 34 34\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#fr\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"gb-usage\",\n viewBox: \"0 0 34 34\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#gb\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"it-usage\",\n viewBox: \"0 0 34 34\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#it\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"ro-usage\",\n viewBox: \"0 0 34 34\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#ro\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"us-usage\",\n viewBox: \"0 0 34 34\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#us\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"general-details-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#general-details\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"geolocalization-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#geolocalization\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"globe-usage\",\n viewBox: \"0 0 12 12\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#globe\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"hamburger-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#hamburger\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"hand-usage\",\n viewBox: \"0 0 60 70\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#hand\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"help-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#help\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"ifu-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#ifu\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"import-usage\",\n viewBox: \"0 0 15 14\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#import\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"import_mm_template-usage\",\n viewBox: \"0 0 17.64 17.5\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#import_mm_template\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"import_my_template-usage\",\n viewBox: \"0 0 18 18\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#import_my_template\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"info-circle-usage\",\n viewBox: \"0 0 30 30\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#info-circle\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"level-usage\",\n viewBox: \"0 0 20 20\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#level\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"levels-usage\",\n viewBox: \"0 0 16 15\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#levels\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"license-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#license\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"loading-usage\",\n viewBox: \"0 0 24 24\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#loading\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"logout-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#logout\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"manufacturer-usage\",\n viewBox: \"0 0 201 251\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#manufacturer\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"medical-details-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#medical-details\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"menu-usage\",\n viewBox: \"0 0 23 20\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#menu\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"mindmotion-logo-usage\",\n viewBox: \"0 0 224 34\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#mindmotion-logo\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"mini-cam-usage\",\n viewBox: \"0 0 36 36\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#mini-cam\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"mini-mic-usage\",\n viewBox: \"0 0 36 36\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#mini-mic\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"mini-sound-usage\",\n viewBox: \"0 0 36 36\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#mini-sound\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"more-menu-usage\",\n viewBox: \"0 0 14 14\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#more-menu\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"ArmReaching-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#ArmReaching\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"ArmReachingAndPalmarGrasping-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#ArmReachingAndPalmarGrasping\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"ArmsPumping-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#ArmsPumping\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"BilateralStep-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#BilateralStep\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FingersPinch-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FingersPinch\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"ForearmPronationSupination-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#ForearmPronationSupination\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"ForwardBackwardSteps-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#ForwardBackwardSteps\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FreeSqueeze-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FreeSqueeze\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FreeSqueezeAndFreeWristMovement-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FreeSqueezeAndFreeWristMovement\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FreeSteps-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FreeSteps\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FreeWristMovement-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FreeWristMovement\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"GripFlexionExtension-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#GripFlexionExtension\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"GripPronationSupination-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#GripPronationSupination\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"GripRadialUlnarDeviation-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#GripRadialUlnarDeviation\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"HandGraspRelease-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#HandGraspRelease\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"HorizontalArmReaching-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#HorizontalArmReaching\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"HorizontalShoulderAbductionAdduction-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#HorizontalShoulderAbductionAdduction\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"LateralBodyWeightTransfer-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#LateralBodyWeightTransfer\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"LateralStep-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#LateralStep\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"PalmarGrasp-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#PalmarGrasp\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"PincerGrasp-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#PincerGrasp\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"ShoulderAbduction-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#ShoulderAbduction\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"ShoulderAbductionAdduction-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#ShoulderAbductionAdduction\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"ShoulderFlexion-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#ShoulderFlexion\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"ShoulderFlexionExtension-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#ShoulderFlexionExtension\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"Squat-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#Squat\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"SteeringWheel-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#SteeringWheel\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"SteeringWheelAndArmsPumping-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#SteeringWheelAndArmsPumping\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"TrunkAxialRotation-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#TrunkAxialRotation\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"TrunkForwardBackwardFlexion-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#TrunkForwardBackwardFlexion\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"TrunkForwardBackwardLateralFlexion-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#TrunkForwardBackwardLateralFlexion\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"TrunkLateralFlexion-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#TrunkLateralFlexion\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"UnilateralShoulderAbductionAdduction-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#UnilateralShoulderAbductionAdduction\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"UnilateralStep-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#UnilateralStep\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"UpperLimbFlexionExtension-usage\",\n viewBox: \"0 0 70 70\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#UpperLimbFlexionExtension\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"UpperLimbFlexionExtensionAndTrunkLateralFlexion-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#UpperLimbFlexionExtensionAndTrunkLateralFlexion\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"VerticalHandsReaching-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#VerticalHandsReaching\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"WorldFootsteps-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#WorldFootsteps\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"WristFlexionExtension-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#WristFlexionExtension\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"WristRadialUlnarDeviation-usage\",\n viewBox: \"0 0 128 128\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#WristRadialUlnarDeviation\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"my-patients-usage\",\n viewBox: \"0 0 32 29.912\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#my-patients\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"notifications-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#notifications\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"optional-features-def-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#optional-features-def\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"optional-features-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#optional-features\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"patient-details-usage\",\n viewBox: \"0 0 52 52\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#patient-details\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"patient-recent-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#patient-recent\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"patient-usage\",\n viewBox: \"0 0 20 14\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#patient\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"borg-0-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#borg-0\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"borg-1-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#borg-1\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"borg-10-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#borg-10\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"borg-2-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#borg-2\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"borg-3-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#borg-3\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"borg-4-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#borg-4\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"borg-5-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#borg-5\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"borg-6-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#borg-6\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"borg-7-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#borg-7\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"borg-8-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#borg-8\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"borg-9-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#borg-9\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"bad-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#bad\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"good-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#good\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"okay-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#okay\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"veryBad-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#veryBad\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"veryGood-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#veryGood\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"skipped-usage\",\n viewBox: \"0 0 22 22\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#skipped\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"patients-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#patients\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"Kinect-usage\",\n viewBox: \"0 0 66 36\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#Kinect\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"LeapMotion-usage\",\n viewBox: \"0 0 60 36\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#LeapMotion\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"MMB_1x-usage\",\n viewBox: \"0 0 28 36\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#MMB_1x\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"MMB_2x-usage\",\n viewBox: \"0 0 50 36\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#MMB_2x\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"planner-calendar-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#planner-calendar\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"planner-calibrate-usage\",\n viewBox: \"0 0 10 10\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#planner-calibrate\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"planner-download-usage\",\n viewBox: \"0 0 15 14\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#planner-download\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"planner-dropper-usage\",\n viewBox: \"0 0 29 40\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#planner-dropper\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"planner-file-usage\",\n viewBox: \"0 0 12 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#planner-file\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"planner-log-usage\",\n viewBox: \"0 0 18 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#planner-log\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"planner-minus-usage\",\n viewBox: \"0 0 8 2\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#planner-minus\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"planner-options-usage\",\n viewBox: \"0 0 16 14\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#planner-options\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"planner-plus-usage\",\n viewBox: \"0 0 8 8\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#planner-plus\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"planner-results-usage\",\n viewBox: \"0 0 16 12\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#planner-results\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"planner-settings-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#planner-settings\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"planner-trash-usage\",\n viewBox: \"0 0 14 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#planner-trash\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"play-usage\",\n viewBox: \"0 0 120 120\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#play\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"posture-seat-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#posture-seat\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"posture-stand-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#posture-stand\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"profile-admin-usage\",\n viewBox: \"0 0 20 20\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#profile-admin\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"profile-patient-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#profile-patient\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"profile-patient_full-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#profile-patient_full\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"profile-physician-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#profile-physician\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"profile-sitemanager-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#profile-sitemanager\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"profile-sitemanager_full-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#profile-sitemanager_full\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"profile-support-usage\",\n viewBox: \"0 0 24 30\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#profile-support\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"profile-therapist-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#profile-therapist\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"profile-therapist_full-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#profile-therapist_full\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"reload-usage\",\n viewBox: \"0 0 15 15\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#reload\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"save_as_template-usage\",\n viewBox: \"0 0 18 18\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#save_as_template\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"search-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#search\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"session-scheduled-usage\",\n viewBox: \"0 0 15 15\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#session-scheduled\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"settings-light-usage\",\n viewBox: \"0 0 32 32\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#settings-light\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"settings-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#settings\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"sidebar-close-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#sidebar-close\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"sidebar-open-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#sidebar-open\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"site-management-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#site-management\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"site-managers-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#site-managers\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"sort-usage\",\n viewBox: \"0 0 15 18\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#sort\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"sort_asc-usage\",\n viewBox: \"0 0 15 18\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#sort_asc\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"sort_desc-usage\",\n viewBox: \"0 0 15 18\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#sort_desc\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"stop-usage\",\n viewBox: \"0 0 120 120\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#stop\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"teleconsultation-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#teleconsultation\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"templates-directory-usage\",\n viewBox: \"0 0 32 32\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#templates-directory\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"templates-editor-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#templates-editor\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"therapeutic-goal-usage\",\n viewBox: \"0 0 70 70\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#therapeutic-goal\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"therapist-details-usage\",\n viewBox: \"0 0 52 52\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#therapist-details\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"therapists-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#therapists\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"tick-usage\",\n viewBox: \"0 0 14 14\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#tick\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"time-zone-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#time-zone\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"timeline-session-extra-training-usage\",\n viewBox: \"0 0 24 24\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#timeline-session-extra-training\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"timeline-session-missed-usage\",\n viewBox: \"0 0 24 24\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#timeline-session-missed\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"timeline-session-supervised-usage\",\n viewBox: \"0 0 24 24\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#timeline-session-supervised\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"timeline-session-unsupervised-usage\",\n viewBox: \"0 0 24 24\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#timeline-session-unsupervised\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"top-menu-live-meeting-down-usage\",\n viewBox: \"0 0 28 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#top-menu-live-meeting-down\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"top-menu-live-meeting-up-usage\",\n viewBox: \"0 0 28 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#top-menu-live-meeting-up\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"top-menu-patients-directory-down-usage\",\n viewBox: \"0 0 28 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#top-menu-patients-directory-down\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"top-menu-patients-directory-up-usage\",\n viewBox: \"0 0 28 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#top-menu-patients-directory-up\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"top-menu-telerehab-down-usage\",\n viewBox: \"0 0 28 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#top-menu-telerehab-down\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"top-menu-telerehab-up-usage\",\n viewBox: \"0 0 28 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#top-menu-telerehab-up\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FunctionAll-usage\",\n viewBox: \"0 0 54 54\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FunctionAll\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FunctionHandBilateral-usage\",\n viewBox: \"0 0 54 54\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FunctionHandBilateral\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FunctionHandLeft-usage\",\n viewBox: \"0 0 54 54\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FunctionHandLeft\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FunctionHandRight-usage\",\n viewBox: \"0 0 54 54\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FunctionHandRight\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FunctionLowerLimbBilateral-usage\",\n viewBox: \"0 0 54 54\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FunctionLowerLimbBilateral\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FunctionLowerLimbLeft-usage\",\n viewBox: \"0 0 54 54\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FunctionLowerLimbLeft\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FunctionLowerLimbRight-usage\",\n viewBox: \"0 0 54 54\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FunctionLowerLimbRight\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FunctionNone-usage\",\n viewBox: \"0 0 54 54\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FunctionNone\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FunctionTrunkBilateral-usage\",\n viewBox: \"0 0 54 54\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FunctionTrunkBilateral\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FunctionTrunkLeft-usage\",\n viewBox: \"0 0 54 54.00001\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FunctionTrunkLeft\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FunctionTrunkRight-usage\",\n viewBox: \"0 0 54 54.00001\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FunctionTrunkRight\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FunctionUpperLimbBilateral-usage\",\n viewBox: \"0 0 54 54\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FunctionUpperLimbBilateral\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FunctionUpperLimbLeft-usage\",\n viewBox: \"0 0 54 54\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FunctionUpperLimbLeft\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"FunctionUpperLimbRight-usage\",\n viewBox: \"0 0 54 54\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#FunctionUpperLimbRight\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"training-plan-usage\",\n viewBox: \"0 0 70 70\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#training-plan\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"next-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#next\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"previous-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#previous\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"tm-completed-video-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#tm-completed-video\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"tm-new-video-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#tm-new-video\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"training-material-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#training-material\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"undo-usage\",\n viewBox: \"0 0 34 34\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#undo\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"unknown-usage\",\n viewBox: \"0 0 25 25\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#unknown\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"unsupervised-training-usage\",\n viewBox: \"0 0 16 16\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#unsupervised-training\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"user-sessions-usage\",\n viewBox: \"0 0 28 28\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#user-sessions\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"videomeeting-mic-off-usage\",\n viewBox: \"0 0 50 50\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#videomeeting-mic-off\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"videomeeting-mic-on-usage\",\n viewBox: \"0 0 50 50\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#videomeeting-mic-on\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"videomeeting-sound-off-usage\",\n viewBox: \"0 0 50 50\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#videomeeting-sound-off\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"videomeeting-sound-on-usage\",\n viewBox: \"0 0 50 50\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#videomeeting-sound-on\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"videomeeting-video-off-usage\",\n viewBox: \"0 0 50 50\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#videomeeting-video-off\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"videomeeting-video-on-usage\",\n viewBox: \"0 0 50 50\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#videomeeting-video-on\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"visibility-hide-usage\",\n viewBox: \"0 0 24 12\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#visibility-hide\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"visibility-show-usage\",\n viewBox: \"0 0 24 12\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#visibility-show\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"warning-circle-usage\",\n viewBox: \"0 0 18 18\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#warning-circle\",\n toString: function () {\n return this.url;\n }\n }","export default {\n id: \"warning-usage\",\n viewBox: \"0 0 24 24\",\n url: __webpack_public_path__ + \"img/icons.62d6bdd2.svg#warning\",\n toString: function () {\n return this.url;\n }\n }","var map = {\n\t\"./Airplane_GameIcon.png\": 63300,\n\t\"./Alchemix_GameIcon.png\": 87212,\n\t\"./CarRacer_GameIcon.png\": 83688,\n\t\"./Climbing_GameIcon.png\": 48325,\n\t\"./CrossTheRoad_GameIcon.png\": 62059,\n\t\"./Default_GameIcon.png\": 17570,\n\t\"./FlyingCar_GameIcon.png\": 84887,\n\t\"./FlyingCarpet_GameIcon.png\": 33107,\n\t\"./FrogJourney_GameIcon.png\": 4401,\n\t\"./GardenRage_GameIcon.png\": 38447,\n\t\"./JapaneseGarden_GameIcon.png\": 31173,\n\t\"./LineRoller_GameIcon.png\": 30620,\n\t\"./Mind4_GameIcon.png\": 76133,\n\t\"./MineCart_GameIcon.png\": 68104,\n\t\"./Octopulse_GameIcon.png\": 43963,\n\t\"./SkiLiner_GameIcon.png\": 11743,\n\t\"./SpaceBurger_GameIcon.png\": 81849,\n\t\"./Stardust_GameIcon.png\": 31794,\n\t\"./ToapRun_GameIcon.png\": 20863,\n\t\"./TowerBuilder_GameIcon.png\": 93365,\n\t\"./WitcherDefense_GameIcon.png\": 65437\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 37351;","var map = {\n\t\"./activity-details.svg\": 97798,\n\t\"./activity-flag.svg\": 22683,\n\t\"./add-patient-success.svg\": 27174,\n\t\"./add-patient.svg\": 50557,\n\t\"./admin.svg\": 46918,\n\t\"./administration.svg\": 50951,\n\t\"./archived-users-directory.svg\": 25147,\n\t\"./arrow-simple-left.svg\": 30362,\n\t\"./arrow-simple-right.svg\": 43150,\n\t\"./assets.svg\": 26452,\n\t\"./att-current.svg\": 87194,\n\t\"./att-history.svg\": 48750,\n\t\"./audit-trail-logs.svg\": 49214,\n\t\"./body.svg\": 76112,\n\t\"./button-icon-save.svg\": 96592,\n\t\"./calendar.svg\": 32317,\n\t\"./calibration-off.svg\": 20557,\n\t\"./calibration-on.svg\": 57678,\n\t\"./callout-down.svg\": 3973,\n\t\"./callout.svg\": 41550,\n\t\"./ce_logo.svg\": 54919,\n\t\"./chevron-carousel-left.svg\": 64810,\n\t\"./chevron-carousel-right.svg\": 62636,\n\t\"./chevron-down.svg\": 81092,\n\t\"./chevron-left.svg\": 77319,\n\t\"./chevron-right.svg\": 31916,\n\t\"./chevron-up.svg\": 94196,\n\t\"./circle-warning.svg\": 21448,\n\t\"./close.svg\": 40314,\n\t\"./cog-hollow.svg\": 71211,\n\t\"./companion-logo.svg\": 13408,\n\t\"./compensation/bodyweighttransfer-left.svg\": 32659,\n\t\"./compensation/bodyweighttransfer-right.svg\": 12984,\n\t\"./compensation/leftkneeextension-up.svg\": 1033,\n\t\"./compensation/leftshoulderabductionadduction-left.svg\": 30170,\n\t\"./compensation/leftshoulderabductionadduction-right.svg\": 68050,\n\t\"./compensation/leftshoulderflexionextension-backward.svg\": 16727,\n\t\"./compensation/leftshoulderflexionextension-forward.svg\": 82910,\n\t\"./compensation/rightkneeextension-up.svg\": 62211,\n\t\"./compensation/rightshoulderabductionadduction-left.svg\": 83344,\n\t\"./compensation/rightshoulderabductionadduction-right.svg\": 76246,\n\t\"./compensation/rightshoulderflexionextension-backward.svg\": 78253,\n\t\"./compensation/rightshoulderflexionextension-forward.svg\": 81437,\n\t\"./compensation/trunkflexion-backward.svg\": 55611,\n\t\"./compensation/trunkflexion-forward.svg\": 23481,\n\t\"./compensation/trunkflexion-left.svg\": 22178,\n\t\"./compensation/trunkflexion-right.svg\": 18418,\n\t\"./compensation_flag_icons/elbow-left.svg\": 5065,\n\t\"./compensation_flag_icons/elbow-right.svg\": 39892,\n\t\"./compensation_flag_icons/head-center.svg\": 59665,\n\t\"./compensation_flag_icons/head-left.svg\": 33833,\n\t\"./compensation_flag_icons/head-right.svg\": 55845,\n\t\"./compensation_flag_icons/leg-left.svg\": 35753,\n\t\"./compensation_flag_icons/leg-right.svg\": 48154,\n\t\"./compensation_flag_icons/shoulder-left.svg\": 71333,\n\t\"./compensation_flag_icons/shoulder-right.svg\": 938,\n\t\"./compensation_flag_icons/torso.svg\": 35506,\n\t\"./compensation_flag_icons/wrist-left.svg\": 58779,\n\t\"./compensation_flag_icons/wrist-right.svg\": 52841,\n\t\"./compensation_groups/bodyweighttransfer.svg\": 83009,\n\t\"./compensation_groups/leftkneeextension.svg\": 65463,\n\t\"./compensation_groups/leftshoulder.svg\": 86006,\n\t\"./compensation_groups/rightkneeextension.svg\": 60932,\n\t\"./compensation_groups/rightshoulder.svg\": 36876,\n\t\"./compensation_groups/trunkflexion.svg\": 68585,\n\t\"./consent.svg\": 14954,\n\t\"./contact-us.svg\": 16149,\n\t\"./copy.svg\": 7778,\n\t\"./create_program.svg\": 72863,\n\t\"./create_template.svg\": 1711,\n\t\"./credentials.svg\": 4412,\n\t\"./data-export.svg\": 77946,\n\t\"./day-period-afternoon.svg\": 79880,\n\t\"./day-period-morning.svg\": 3431,\n\t\"./demo-patient.svg\": 99576,\n\t\"./done-half.svg\": 41789,\n\t\"./done-invert-colors.svg\": 85083,\n\t\"./done-not-training.svg\": 4227,\n\t\"./done-not.svg\": 59541,\n\t\"./done-notassigned.svg\": 56573,\n\t\"./done-partially.svg\": 33653,\n\t\"./done-password-criteria.svg\": 5285,\n\t\"./done-rounded-circle-fill.svg\": 59267,\n\t\"./done-rounded-circle.svg\": 13933,\n\t\"./done.svg\": 71860,\n\t\"./dpo-admin.svg\": 93846,\n\t\"./drag-handle.svg\": 90831,\n\t\"./duplicate.svg\": 88755,\n\t\"./edit.svg\": 51987,\n\t\"./email.svg\": 50782,\n\t\"./epro-patients.svg\": 31547,\n\t\"./european-representative.svg\": 30443,\n\t\"./export.svg\": 56965,\n\t\"./external.svg\": 63906,\n\t\"./faq.svg\": 28342,\n\t\"./feedback.svg\": 32311,\n\t\"./filter.svg\": 39393,\n\t\"./flags/ar-SA.svg\": 39672,\n\t\"./flags/de.svg\": 65700,\n\t\"./flags/es.svg\": 96351,\n\t\"./flags/fr.svg\": 99718,\n\t\"./flags/gb.svg\": 72314,\n\t\"./flags/it.svg\": 92593,\n\t\"./flags/ro.svg\": 7477,\n\t\"./flags/us.svg\": 53487,\n\t\"./general-details.svg\": 2815,\n\t\"./geolocalization.svg\": 67305,\n\t\"./globe.svg\": 34813,\n\t\"./hamburger.svg\": 21676,\n\t\"./hand.svg\": 16560,\n\t\"./help.svg\": 17086,\n\t\"./ifu.svg\": 29664,\n\t\"./import.svg\": 34773,\n\t\"./import_mm_template.svg\": 81798,\n\t\"./import_my_template.svg\": 62689,\n\t\"./info-circle.svg\": 7886,\n\t\"./level.svg\": 99565,\n\t\"./levels.svg\": 61577,\n\t\"./license.svg\": 32434,\n\t\"./loading.svg\": 87199,\n\t\"./logout.svg\": 97656,\n\t\"./manufacturer.svg\": 99827,\n\t\"./medical-details.svg\": 34088,\n\t\"./menu.svg\": 50102,\n\t\"./mindmotion-logo.svg\": 12181,\n\t\"./mini-cam.svg\": 47290,\n\t\"./mini-mic.svg\": 36606,\n\t\"./mini-sound.svg\": 13440,\n\t\"./more-menu.svg\": 18199,\n\t\"./movement/ArmReaching.svg\": 85053,\n\t\"./movement/ArmReachingAndPalmarGrasping.svg\": 98917,\n\t\"./movement/ArmsPumping.svg\": 90310,\n\t\"./movement/BilateralStep.svg\": 57258,\n\t\"./movement/FingersPinch.svg\": 4874,\n\t\"./movement/ForearmPronationSupination.svg\": 98985,\n\t\"./movement/ForwardBackwardSteps.svg\": 65953,\n\t\"./movement/FreeSqueeze.svg\": 21107,\n\t\"./movement/FreeSqueezeAndFreeWristMovement.svg\": 50403,\n\t\"./movement/FreeSteps.svg\": 60145,\n\t\"./movement/FreeWristMovement.svg\": 32661,\n\t\"./movement/GripFlexionExtension.svg\": 64206,\n\t\"./movement/GripPronationSupination.svg\": 22452,\n\t\"./movement/GripRadialUlnarDeviation.svg\": 49175,\n\t\"./movement/HandGraspRelease.svg\": 26573,\n\t\"./movement/HorizontalArmReaching.svg\": 78538,\n\t\"./movement/HorizontalShoulderAbductionAdduction.svg\": 82786,\n\t\"./movement/LateralBodyWeightTransfer.svg\": 25922,\n\t\"./movement/LateralStep.svg\": 35811,\n\t\"./movement/PalmarGrasp.svg\": 84668,\n\t\"./movement/PincerGrasp.svg\": 61293,\n\t\"./movement/ShoulderAbduction.svg\": 80113,\n\t\"./movement/ShoulderAbductionAdduction.svg\": 94441,\n\t\"./movement/ShoulderFlexion.svg\": 86413,\n\t\"./movement/ShoulderFlexionExtension.svg\": 81320,\n\t\"./movement/Squat.svg\": 86742,\n\t\"./movement/SteeringWheel.svg\": 52559,\n\t\"./movement/SteeringWheelAndArmsPumping.svg\": 69407,\n\t\"./movement/TrunkAxialRotation.svg\": 94713,\n\t\"./movement/TrunkForwardBackwardFlexion.svg\": 56571,\n\t\"./movement/TrunkForwardBackwardLateralFlexion.svg\": 81913,\n\t\"./movement/TrunkLateralFlexion.svg\": 42381,\n\t\"./movement/UnilateralShoulderAbductionAdduction.svg\": 35111,\n\t\"./movement/UnilateralStep.svg\": 98767,\n\t\"./movement/UpperLimbFlexionExtension.svg\": 56735,\n\t\"./movement/UpperLimbFlexionExtensionAndTrunkLateralFlexion.svg\": 94694,\n\t\"./movement/VerticalHandsReaching.svg\": 99964,\n\t\"./movement/WorldFootsteps.svg\": 45442,\n\t\"./movement/WristFlexionExtension.svg\": 43716,\n\t\"./movement/WristRadialUlnarDeviation.svg\": 4306,\n\t\"./my-patients.svg\": 49740,\n\t\"./notifications.svg\": 17230,\n\t\"./optional-features-def.svg\": 67207,\n\t\"./optional-features.svg\": 95962,\n\t\"./patient-details.svg\": 14622,\n\t\"./patient-recent.svg\": 66138,\n\t\"./patient.svg\": 95441,\n\t\"./patient_state/borg/borg-0.svg\": 63458,\n\t\"./patient_state/borg/borg-1.svg\": 69112,\n\t\"./patient_state/borg/borg-10.svg\": 65805,\n\t\"./patient_state/borg/borg-2.svg\": 19069,\n\t\"./patient_state/borg/borg-3.svg\": 8011,\n\t\"./patient_state/borg/borg-4.svg\": 59398,\n\t\"./patient_state/borg/borg-5.svg\": 58011,\n\t\"./patient_state/borg/borg-6.svg\": 30594,\n\t\"./patient_state/borg/borg-7.svg\": 36707,\n\t\"./patient_state/borg/borg-8.svg\": 86811,\n\t\"./patient_state/borg/borg-9.svg\": 36919,\n\t\"./patient_state/mood/bad.svg\": 8707,\n\t\"./patient_state/mood/good.svg\": 26560,\n\t\"./patient_state/mood/okay.svg\": 85666,\n\t\"./patient_state/mood/veryBad.svg\": 49538,\n\t\"./patient_state/mood/veryGood.svg\": 43571,\n\t\"./patient_state/skipped.svg\": 73519,\n\t\"./patients.svg\": 83562,\n\t\"./peripherals/Kinect.svg\": 135,\n\t\"./peripherals/LeapMotion.svg\": 27692,\n\t\"./peripherals/MMB_1x.svg\": 70927,\n\t\"./peripherals/MMB_2x.svg\": 80899,\n\t\"./planner-calendar.svg\": 77052,\n\t\"./planner-calibrate.svg\": 56321,\n\t\"./planner-download.svg\": 65756,\n\t\"./planner-dropper.svg\": 7804,\n\t\"./planner-file.svg\": 91222,\n\t\"./planner-log.svg\": 23762,\n\t\"./planner-minus.svg\": 30693,\n\t\"./planner-options.svg\": 32685,\n\t\"./planner-plus.svg\": 46045,\n\t\"./planner-results.svg\": 98308,\n\t\"./planner-settings.svg\": 48072,\n\t\"./planner-trash.svg\": 37779,\n\t\"./play.svg\": 62379,\n\t\"./posture-seat.svg\": 81767,\n\t\"./posture-stand.svg\": 89136,\n\t\"./profile-admin.svg\": 83994,\n\t\"./profile-patient.svg\": 15106,\n\t\"./profile-patient_full.svg\": 85225,\n\t\"./profile-physician.svg\": 49893,\n\t\"./profile-sitemanager.svg\": 72387,\n\t\"./profile-sitemanager_full.svg\": 23399,\n\t\"./profile-support.svg\": 86823,\n\t\"./profile-therapist.svg\": 67124,\n\t\"./profile-therapist_full.svg\": 71706,\n\t\"./reload.svg\": 55333,\n\t\"./save_as_template.svg\": 94540,\n\t\"./search.svg\": 32938,\n\t\"./session-scheduled.svg\": 99666,\n\t\"./settings-light.svg\": 9738,\n\t\"./settings.svg\": 98483,\n\t\"./sidebar-close.svg\": 75151,\n\t\"./sidebar-open.svg\": 22286,\n\t\"./site-management.svg\": 44778,\n\t\"./site-managers.svg\": 80800,\n\t\"./sort.svg\": 63624,\n\t\"./sort_asc.svg\": 40906,\n\t\"./sort_desc.svg\": 43521,\n\t\"./stop.svg\": 59480,\n\t\"./teleconsultation.svg\": 4851,\n\t\"./templates-directory.svg\": 86966,\n\t\"./templates-editor.svg\": 6775,\n\t\"./therapeutic-goal.svg\": 41039,\n\t\"./therapist-details.svg\": 89540,\n\t\"./therapists.svg\": 59403,\n\t\"./tick.svg\": 57194,\n\t\"./time-zone.svg\": 68411,\n\t\"./timeline-session-extra-training.svg\": 12159,\n\t\"./timeline-session-missed.svg\": 39280,\n\t\"./timeline-session-supervised.svg\": 43529,\n\t\"./timeline-session-unsupervised.svg\": 96773,\n\t\"./top-menu-live-meeting-down.svg\": 23058,\n\t\"./top-menu-live-meeting-up.svg\": 56304,\n\t\"./top-menu-patients-directory-down.svg\": 44108,\n\t\"./top-menu-patients-directory-up.svg\": 3005,\n\t\"./top-menu-telerehab-down.svg\": 82780,\n\t\"./top-menu-telerehab-up.svg\": 87661,\n\t\"./trained_functions/FunctionAll.svg\": 39287,\n\t\"./trained_functions/FunctionHandBilateral.svg\": 27491,\n\t\"./trained_functions/FunctionHandLeft.svg\": 22719,\n\t\"./trained_functions/FunctionHandRight.svg\": 3139,\n\t\"./trained_functions/FunctionLowerLimbBilateral.svg\": 21217,\n\t\"./trained_functions/FunctionLowerLimbLeft.svg\": 6424,\n\t\"./trained_functions/FunctionLowerLimbRight.svg\": 63085,\n\t\"./trained_functions/FunctionNone.svg\": 11410,\n\t\"./trained_functions/FunctionTrunkBilateral.svg\": 64069,\n\t\"./trained_functions/FunctionTrunkLeft.svg\": 15859,\n\t\"./trained_functions/FunctionTrunkRight.svg\": 15957,\n\t\"./trained_functions/FunctionUpperLimbBilateral.svg\": 33166,\n\t\"./trained_functions/FunctionUpperLimbLeft.svg\": 17920,\n\t\"./trained_functions/FunctionUpperLimbRight.svg\": 15036,\n\t\"./training-plan.svg\": 87806,\n\t\"./training_materials/next.svg\": 67372,\n\t\"./training_materials/previous.svg\": 48617,\n\t\"./training_materials/tm-completed-video.svg\": 31536,\n\t\"./training_materials/tm-new-video.svg\": 68761,\n\t\"./training_materials/training-material.svg\": 84784,\n\t\"./undo.svg\": 49986,\n\t\"./unknown.svg\": 48447,\n\t\"./unsupervised-training.svg\": 57867,\n\t\"./user-sessions.svg\": 15647,\n\t\"./videomeeting-mic-off.svg\": 26543,\n\t\"./videomeeting-mic-on.svg\": 72084,\n\t\"./videomeeting-sound-off.svg\": 98205,\n\t\"./videomeeting-sound-on.svg\": 99153,\n\t\"./videomeeting-video-off.svg\": 18461,\n\t\"./videomeeting-video-on.svg\": 90124,\n\t\"./visibility-hide.svg\": 80347,\n\t\"./visibility-show.svg\": 66746,\n\t\"./warning-circle.svg\": 65247,\n\t\"./warning.svg\": 42991\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 87254;","module.exports = new Promise(resolve => {\n const remoteUrl = window.location.origin + '/epro/remoteEntry.js'\n const script = document.createElement('script')\n script.src = remoteUrl\n script.onload = () => {\n // the injected script has loaded and is available on window\n // we can now resolve this Promise\n const proxy = {\n get: (request) => window.epro.get(request),\n init: (arg) => {\n try {\n return window.epro.init(arg)\n } catch(e) {\n console.log('remote container already initialized')\n }\n }\n }\n resolve(proxy)\n }\n // inject this script with the src set to the versioned remoteEntry.js\n document.head.appendChild(script);\n })\n ;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// expose the module cache\n__webpack_require__.c = __webpack_module_cache__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".\" + {\"115\":\"59302a9b\",\"149\":\"04f71289\",\"178\":\"fa80af61\",\"200\":\"60ba79d7\",\"208\":\"3832ab95\",\"218\":\"03d1a215\",\"221\":\"0b0ac613\",\"248\":\"53f48e2c\",\"268\":\"f3a4eb8c\",\"338\":\"a91d8f08\",\"435\":\"73e9e5dd\",\"438\":\"a9e2fcab\",\"461\":\"34f7b07a\",\"516\":\"07055103\",\"673\":\"12e3ad41\",\"727\":\"d49969c0\",\"775\":\"22bde8e9\",\"784\":\"b40a4d3d\",\"836\":\"bc1db364\",\"847\":\"1938a4a4\",\"851\":\"2087ba91\",\"916\":\"cf943984\",\"990\":\"4f5203b6\",\"1010\":\"f822f119\",\"1030\":\"40aaf7a4\",\"1056\":\"3b76a3fc\",\"1166\":\"38221642\",\"1223\":\"37f0a5e1\",\"1318\":\"b5e9f294\",\"1464\":\"c8e757cc\",\"1495\":\"5ddbb50d\",\"1562\":\"eadae962\",\"1666\":\"41e190cc\",\"1891\":\"62bea0f7\",\"1918\":\"96e560f4\",\"2165\":\"35004cca\",\"2236\":\"b2367083\",\"2270\":\"332b6620\",\"2280\":\"1d3f352e\",\"2416\":\"ffdeb84b\",\"2495\":\"3df13387\",\"2569\":\"7c558ff7\",\"2597\":\"fc3adae9\",\"2763\":\"e46054ea\",\"2815\":\"9cf9b1f8\",\"2875\":\"57cd8721\",\"2890\":\"8b73a572\",\"2997\":\"021b176e\",\"3067\":\"0d33521f\",\"3099\":\"1c0017c2\",\"3350\":\"b3e73ad7\",\"3392\":\"d8f3b080\",\"3406\":\"be8ed045\",\"3411\":\"688f1d9a\",\"3436\":\"bd82a471\",\"3480\":\"5691015a\",\"3539\":\"31ff4da2\",\"3764\":\"52687524\",\"3834\":\"2adec516\",\"3862\":\"b0dcc2e5\",\"3902\":\"4ae370a7\",\"3903\":\"d81cb6d3\",\"3991\":\"16d7396e\",\"4005\":\"8cdb1d85\",\"4080\":\"a40a92aa\",\"4171\":\"7fd59c7c\",\"4202\":\"dd4a035e\",\"4204\":\"b1735e75\",\"4240\":\"067471d5\",\"4326\":\"b629eace\",\"4328\":\"be5d330f\",\"4379\":\"d7cb1996\",\"4381\":\"bfa1220f\",\"4649\":\"ebe493e0\",\"4706\":\"cf849739\",\"4779\":\"e8e23d93\",\"4988\":\"559614fc\",\"4993\":\"725f76ba\",\"4999\":\"7e1d37f5\",\"5018\":\"da57b015\",\"5183\":\"e4bf06cf\",\"5200\":\"c8b9a13a\",\"5217\":\"576555f2\",\"5268\":\"6aaf6032\",\"5273\":\"9a8022d1\",\"5281\":\"bc614247\",\"5306\":\"6e491fb7\",\"5390\":\"74ae6771\",\"5404\":\"5e7db126\",\"5466\":\"4f8fdf82\",\"5515\":\"ad2ff593\",\"5604\":\"61595663\",\"5639\":\"b3f1a2f9\",\"5678\":\"4f63a37d\",\"5721\":\"8bf9f555\",\"5750\":\"2e4434dc\",\"5797\":\"0557b806\",\"5805\":\"6b8dc595\",\"5889\":\"d964c77a\",\"5964\":\"1ea95afa\",\"5982\":\"1190a5c6\",\"6089\":\"7b08d5e9\",\"6227\":\"fa18edfb\",\"6274\":\"900b3dfd\",\"6290\":\"805f2d96\",\"6374\":\"d110718b\",\"6379\":\"45e95c35\",\"6441\":\"9d2029b2\",\"6487\":\"fe2bb174\",\"6489\":\"c9040ec6\",\"6530\":\"1651c181\",\"6576\":\"bd953f84\",\"6613\":\"a0ad7f6b\",\"6638\":\"db9cc2fa\",\"6694\":\"73ad4fe7\",\"6722\":\"17a9af7f\",\"6799\":\"45c9ab46\",\"6869\":\"6009ed8c\",\"7084\":\"ed6cee9f\",\"7166\":\"aaa10ab0\",\"7170\":\"7098a22f\",\"7175\":\"dd25728e\",\"7183\":\"0213fa0b\",\"7246\":\"8ace582e\",\"7302\":\"7624b27a\",\"7312\":\"6c6073c8\",\"7314\":\"c53ad3e1\",\"7321\":\"c083a885\",\"7481\":\"b58a3532\",\"7492\":\"2ba7ed38\",\"7576\":\"87979103\",\"7737\":\"062ad8ac\",\"7787\":\"f4a3b1de\",\"7883\":\"011ac647\",\"7951\":\"ce8b6466\",\"8118\":\"479a7ae3\",\"8156\":\"9b2c1020\",\"8214\":\"d3098ba2\",\"8318\":\"50b7bed0\",\"8349\":\"83b5347c\",\"8352\":\"012826ca\",\"8358\":\"24b1521e\",\"8387\":\"9dc5c6ec\",\"8410\":\"e8090b86\",\"8416\":\"eefc8d29\",\"8459\":\"a210eaee\",\"8616\":\"8f74096e\",\"8635\":\"876aeb45\",\"8667\":\"64889bf1\",\"8740\":\"d7bbe949\",\"8752\":\"3992355c\",\"8820\":\"4215c553\",\"8834\":\"cb941a29\",\"8883\":\"afaa5d98\",\"9019\":\"b3692854\",\"9194\":\"cb2d90f0\",\"9260\":\"97d66536\",\"9459\":\"6be0bae4\",\"9513\":\"05f770c7\",\"9660\":\"0326426b\",\"9710\":\"1a616ce3\",\"9777\":\"ffab216c\",\"9859\":\"7e21ac50\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"115\":\"72e38e8e\",\"149\":\"424257ee\",\"200\":\"409e3763\",\"208\":\"4884159d\",\"218\":\"138483fb\",\"221\":\"73871224\",\"248\":\"3aa3087c\",\"268\":\"b5f7d182\",\"338\":\"36cc144b\",\"435\":\"d10d99da\",\"438\":\"96924131\",\"461\":\"7ea95a6e\",\"516\":\"6f3c0fe5\",\"727\":\"6f3c0fe5\",\"775\":\"7c38965f\",\"847\":\"092252e3\",\"916\":\"a1d0ab27\",\"1010\":\"6c00957d\",\"1030\":\"8bcf7627\",\"1166\":\"7a996bc2\",\"1223\":\"a1b418f6\",\"1318\":\"8c1f6745\",\"1495\":\"ae861f2e\",\"1918\":\"23391732\",\"2165\":\"ae861f2e\",\"2236\":\"d5057d91\",\"2280\":\"96924131\",\"2416\":\"f9f77535\",\"2597\":\"409e3763\",\"2815\":\"4884159d\",\"2890\":\"4cac036f\",\"3350\":\"97d59dc8\",\"3392\":\"7ee0e450\",\"3539\":\"001b794b\",\"3764\":\"4107cc05\",\"3834\":\"56fd9598\",\"3862\":\"424257ee\",\"3902\":\"fe259134\",\"3991\":\"73420662\",\"4005\":\"7415a82b\",\"4080\":\"d93550fd\",\"4202\":\"424257ee\",\"4240\":\"ae861f2e\",\"4706\":\"409e3763\",\"4988\":\"4ddf0448\",\"5018\":\"d10d99da\",\"5200\":\"7d2a3752\",\"5217\":\"4cac036f\",\"5268\":\"424257ee\",\"5281\":\"409e3763\",\"5306\":\"7ee0e450\",\"5404\":\"1c1b9a47\",\"5515\":\"4ddf0448\",\"5639\":\"f8ca2c3c\",\"5797\":\"409e3763\",\"5982\":\"adeb4c9b\",\"6089\":\"bb375d33\",\"6227\":\"e75c59a2\",\"6379\":\"2aa57b39\",\"6441\":\"ae861f2e\",\"6487\":\"424257ee\",\"6489\":\"424257ee\",\"6530\":\"7ee0e450\",\"6613\":\"fe59d785\",\"6694\":\"7a996bc2\",\"6869\":\"bb375d33\",\"7166\":\"cfdac215\",\"7183\":\"1bd122c9\",\"7302\":\"424257ee\",\"7492\":\"2aaf207a\",\"7951\":\"424257ee\",\"8118\":\"7ee0e450\",\"8156\":\"697ec291\",\"8214\":\"cb024714\",\"8349\":\"424257ee\",\"8352\":\"8bf346d7\",\"8416\":\"b0b68efa\",\"8459\":\"4ddf0448\",\"8635\":\"ae861f2e\",\"8667\":\"8bf346d7\",\"8740\":\"8bf346d7\",\"8752\":\"7091c9da\",\"9019\":\"51112a1c\",\"9194\":\"3aa3087c\",\"9260\":\"4ddf0448\",\"9459\":\"e2726cd7\",\"9513\":\"7ee0e450\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"mindmaze:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var chunkMapping = {\n\t\"3903\": [\n\t\t73903\n\t],\n\t\"7321\": [\n\t\t18459\n\t]\n};\nvar idToExternalAndNameMapping = {\n\t\"18459\": [\n\t\t\"default\",\n\t\t\"./PatientTab\",\n\t\t34767\n\t],\n\t\"73903\": [\n\t\t\"default\",\n\t\t\"./ProgramTab\",\n\t\t34767\n\t]\n};\n__webpack_require__.f.remotes = function(chunkId, promises) {\n\tif(__webpack_require__.o(chunkMapping, chunkId)) {\n\t\tchunkMapping[chunkId].forEach(function(id) {\n\t\t\tvar getScope = __webpack_require__.R;\n\t\t\tif(!getScope) getScope = [];\n\t\t\tvar data = idToExternalAndNameMapping[id];\n\t\t\tif(getScope.indexOf(data) >= 0) return;\n\t\t\tgetScope.push(data);\n\t\t\tif(data.p) return promises.push(data.p);\n\t\t\tvar onError = function(error) {\n\t\t\t\tif(!error) error = new Error(\"Container missing\");\n\t\t\t\tif(typeof error.message === \"string\")\n\t\t\t\t\terror.message += '\\nwhile loading \"' + data[1] + '\" from ' + data[2];\n\t\t\t\t__webpack_require__.m[id] = function() {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tdata.p = 0;\n\t\t\t};\n\t\t\tvar handleFunction = function(fn, arg1, arg2, d, next, first) {\n\t\t\t\ttry {\n\t\t\t\t\tvar promise = fn(arg1, arg2);\n\t\t\t\t\tif(promise && promise.then) {\n\t\t\t\t\t\tvar p = promise.then(function(result) { return next(result, d); }, onError);\n\t\t\t\t\t\tif(first) promises.push(data.p = p); else return p;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn next(promise, d, first);\n\t\t\t\t\t}\n\t\t\t\t} catch(error) {\n\t\t\t\t\tonError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar onExternal = function(external, _, first) { return external ? handleFunction(__webpack_require__.I, data[0], 0, external, onInitialized, first) : onError(); };\n\t\t\tvar onInitialized = function(_, external, first) { return handleFunction(external.get, data[1], getScope, 0, onFactory, first); };\n\t\t\tvar onFactory = function(factory) {\n\t\t\t\tdata.p = 1;\n\t\t\t\t__webpack_require__.m[id] = function(module) {\n\t\t\t\t\tmodule.exports = factory();\n\t\t\t\t}\n\t\t\t};\n\t\t\thandleFunction(__webpack_require__, data[2], 0, 0, onExternal, 1);\n\t\t});\n\t}\n}","__webpack_require__.S = {};\nvar initPromises = {};\nvar initTokens = {};\n__webpack_require__.I = function(name, initScope) {\n\tif(!initScope) initScope = [];\n\t// handling circular init calls\n\tvar initToken = initTokens[name];\n\tif(!initToken) initToken = initTokens[name] = {};\n\tif(initScope.indexOf(initToken) >= 0) return;\n\tinitScope.push(initToken);\n\t// only runs once\n\tif(initPromises[name]) return initPromises[name];\n\t// creates a new share scope if needed\n\tif(!__webpack_require__.o(__webpack_require__.S, name)) __webpack_require__.S[name] = {};\n\t// runs all init snippets from all modules reachable\n\tvar scope = __webpack_require__.S[name];\n\tvar warn = function(msg) {\n\t\tif (typeof console !== \"undefined\" && console.warn) console.warn(msg);\n\t};\n\tvar uniqueName = \"mindmaze\";\n\tvar register = function(name, version, factory, eager) {\n\t\tvar versions = scope[name] = scope[name] || {};\n\t\tvar activeVersion = versions[version];\n\t\tif(!activeVersion || (!activeVersion.loaded && (!eager != !activeVersion.eager ? eager : uniqueName > activeVersion.from))) versions[version] = { get: factory, from: uniqueName, eager: !!eager };\n\t};\n\tvar initExternal = function(id) {\n\t\tvar handleError = function(err) { warn(\"Initialization of sharing external failed: \" + err); };\n\t\ttry {\n\t\t\tvar module = __webpack_require__(id);\n\t\t\tif(!module) return;\n\t\t\tvar initFn = function(module) { return module && module.init && module.init(__webpack_require__.S[name], initScope); }\n\t\t\tif(module.then) return promises.push(module.then(initFn, handleError));\n\t\t\tvar initResult = initFn(module);\n\t\t\tif(initResult && initResult.then) return promises.push(initResult['catch'](handleError));\n\t\t} catch(err) { handleError(err); }\n\t}\n\tvar promises = [];\n\tswitch(name) {\n\t\tcase \"default\": {\n\t\t\tregister(\"react-dom\", \"18.2.0\", function() { return function() { return __webpack_require__(73935); }; }, 1);\n\t\t\tregister(\"react\", \"18.2.0\", function() { return function() { return __webpack_require__(67294); }; }, 1);\n\t\t\tinitExternal(34767);\n\t\t}\n\t\tbreak;\n\t}\n\tif(!promises.length) return initPromises[name] = 1;\n\treturn initPromises[name] = Promise.all(promises).then(function() { return initPromises[name] = 1; });\n};","__webpack_require__.p = \"/\";","var parseVersion = function(str) {\n\t// see webpack/lib/util/semver.js for original code\n\tvar p=function(p){return p.split(\".\").map((function(p){return+p==p?+p:p}))},n=/^([^-+]+)?(?:-([^+]+))?(?:\\+(.+))?$/.exec(str),r=n[1]?p(n[1]):[];return n[2]&&(r.length++,r.push.apply(r,p(n[2]))),n[3]&&(r.push([]),r.push.apply(r,p(n[3]))),r;\n}\nvar versionLt = function(a, b) {\n\t// see webpack/lib/util/semver.js for original code\n\ta=parseVersion(a),b=parseVersion(b);for(var r=0;;){if(r>=a.length)return r=b.length)return\"u\"==n;var t=b[r],f=(typeof t)[0];if(n!=f)return\"o\"==n&&\"n\"==f||(\"s\"==f||\"u\"==n);if(\"o\"!=n&&\"u\"!=n&&e!=t)return e=\":-1==r?\"<\":1==r?\"^\":2==r?\"~\":r>0?\"=\":\"!=\";for(var e=1,a=1;a0?\".\":\"\")+(e=2,t)}return n}var g=[];for(a=1;a=version.length||\"o\"==(s=(typeof(f=version[n]))[0]))return!a||(\"u\"==g?i>e&&!r:\"\"==g!=r);if(\"u\"==s){if(!a||\"u\"!=g)return!1}else if(a)if(g==s)if(i<=e){if(f!=range[i])return!1}else{if(r?f>range[i]:f