{"version":3,"file":"ln-liga-os-cada8c0f4ea41fb8dc898f1b49819821.js","names":["appConfig","config","APP","_exports","default","_class","BaseApplicationAdapter","constructor","args","super","_initializerDefineProperty","this","_descriptor","_descriptor2","loadToken","ligaOsApi","getSession","then","token","loadLanguage","state","getLanguage","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","onSubmitSuccess","data","eventID","window","dispatchEvent","CustomEvent","SUBMIT_SUCCESS_EVENT","detail","initSentry","release","name","version","includes","environment","transport","send","Promise","resolve","statusCode","flush","integrations","feedbackIntegration","addScreenshotButtonLabel","autoInject","cancelButtonLabel","colorScheme","confirmButtonLabel","formTitle","removeScreenshotButtonLabel","showBranding","showEmail","showName","useSentryUser","email","messagePlaceholder","submitButtonLabel","successMessageText","throttle","triggerLabel","App","Application","_defineProperty","modulePrefix","podModulePrefix","Resolver","loadInitializers","__COLOCATED_TEMPLATE__","_templateFactory","createTemplateFactory","id","block","moduleName","isStrictMode","AppContentComponent","Component","_descriptor3","updateFrameUrl","navigation","on","className","result","loaded","push","communicatorIsOpen","showBackground","join","cssProps","currentApp","background","appLoaded","appError","initIframe","element","iframeElement","currentUrl","scheduleOnce","_updateFrameUrl","url","isDestroying","origin","location","fullUrl","match","iframeUrl","URL","app","getAppFor","ligaOsPrefix","slug","searchParams","append","PREFIX_QUERY_PARAM_NAME","appFrame","setAttribute","toString","willDestroy","arguments","off","tracked","action","Object","getOwnPropertyDescriptor","_component","setComponentTemplate","templateOnly","fadeOut","mediaMatcher","isMobile","clone","document","createElement","addEventListener","remove","once","parentElement","appendChild","handleClick","hideClickCatcher","registerElement","touchEventXY","event","touch","touches","changedTouches","x","pageX","y","pageY","CommunicatorBaseContainerComponent","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","_descriptor9","_descriptor0","_descriptor1","_descriptor10","_descriptor11","_descriptor12","_descriptor13","close","settings","updateSettingValues","communicator","isVisible","navigationIsOpen","showTabs","sliding","clientTheme","badge","badgeNumber","currentTab","isLigaAgent","ligaAgentTab","slideCssProps","startPoint","touchStartPoint","movePoint","touchMovePoint","windowWidth","innerWidth","diff","translateX","Math","abs","transform","tabsAreOpen","isDesktop","settingValues","AlwaysShowCommunicator","tabs","detailsOpen","_close","forceOpenCommunicator","value","setValue","handleTouchEnd","endPoint","windowPortion","later","handleTouchMove","handleTouchStart","logout","session","triggerLogout","setFilter","setTabFilterValue","toggleCommunicator","openTabs","closeTabs","onLigaAgentError","errorEvent","errorMessage","message","lnFlashMessages","addMessage","toggleTab","tab","open","showClickCatcher","getValues","values","setCurrentTab","setCommunicatorIsOpen","activeTabId","isDestroyed","ErrorMessageComponent","CommunicatorFilterComponent","hrCssProps","index","options","findIndex","filter","width","length","CommunicatorNotificationItemComponent","notification","context_type","read_state","flagged","archived","sender_id","isArchiveFilter","clickOption","option","onOptionClick","openNotification","CommunicatorTabAbsencesComponent","isLoading","isContentVisible","formattedAbsences","type","text","intl","t","todayAbsences","absences","forEach","absence","start","moment","date_from","format","end","date_till","reason","formatedAbsence","contact","isIll","isHoliday","isBefore","add","upcomingIndex","splice","pop","shift","loadMore","requestedForOffset","offset","query","paging_limit","perPage","paging_offset","split","searchText","search_text","api","read","response","meta","count","finally","resetState","setSearchText","CommunicatorTabApplicationComponent","openItem","openUrl","belongsToExternalApp","removeErrorMessage","applicationsError","CommunicatorTabBirthdaysComponent","filterQuery","fromDate","tillDate","active","birth_date_from","birth_date_till","sort","birthdaysLoaded","birthdays","parseBirthdays","parsedBirthdays","today","birthday","subhead","hasBirthday","birthdayFormated","birth_date","lastSubhead","CommunicatorTabContactsComponent","_descriptor14","_descriptor15","initRights","allExpanded","clientsLoaded","contacts","unformattedContacts","editMode","listsLoaded","linkTo","to","openProjectMail","project","show_in_communicator_contact_list","addresses","map","addMailingList","activeList","description","deleteMailingList","list","delete","listToRemove","find","listObject","item","loadAll","loadProjects","loadLists","saveMailingList","promise","RSVP","reject","listId","update","create","addChild","position","indexOf","slice","isOpen","searchInputChanged","toggleClient","client","set","contact_group_id","insertChilds","toggleMailingList","activeListCopy","prevList","listCopy","prop","toggleProject","rights","can","permission","canEditList","addSubhead","formattedContacts","formattedContact","company_name","companyIndex","nextSubheadIndex","spliceIndex","formatContacts","projects_search_text","active_project","counter","clients","group","projects","groupsToExpand","groupIds","loadProjectsForGroups","projectsForGroup","catch","error","console","stack","groups","contact_group","addList","lists","childsFor","what","loader","child","CommunicatorTabNotifications","handleScroll","target","scrollBottom","scrollTop","offsetHeight","scrollHeight","loadData","get","resource","resourceId","canOpenResource","openResource","optionKey","toggleRead","toggleFlag","toggleArchive","save","searchValueDidChange","searchTerm","reload","isLoggedIn","notifications","hasMore","createQuery","pagingLimit","lastRequestHash","JSON","stringify","request","store","lastRequest","a","b","compare","result_count","assign","current","term","getProperSearchTerm","replace","updateUnreadCountBadge","updateBadges","CommunicatorTabSettingsComponent","password","new","new_rep","old","alwaysShowCommunicatorOptions","label","notificationSoundOptions","hasPasswordValues","currentUser","user","isChangePasswordAllowed","isKeycloak","languageOptions","languages","language","Number","showErrorMessage","details","errorDetails","hasDetails","keys","key","Boolean","hideErrorMessage","setAlwaysShowCommunicator","saveSettings","setLanguage","languageId","saveUser","setNotificationSound","NotificationSound","setPassword","updateSettingsValues","showError","normalizeErrorResponse","isSaving","lang","String","saveAllSettings","load","savePassword","password_new_rep","userId","password_new","password_old","CommunicatorTabTasks","hasAnyOpenPopup","comingTasks","tasks","task","t1","t2","todayTasks","urgentTasks","hasNoEntries","setHasAnyOpenPopup","status","embed","ContactListCollectionComponent","isScrolling","rowHeight","debounce","setIsScrolling","handleLastReached","loadNextPage","onPopupChange","ContactListItemAbsenceComponent","ContactListItemAddListComponent","ContactListItemClientComponent","onClientClick","ContactListItemContactComponent","hasPhoneInformation","phone","fax","mobile_phone","nameInitials","firstNameInitial","first_name","charAt","lastNameInitial","ContactListItemMailingListComponent","editMailingList","onMailinglistEdit","ContactListItemProjectComponent","onProjectClick","stopPropagation","BaseContactMenuComponent","openProfile","removeSlug","KeycloakLoginButtonComponent","buttonConfig","icon","GoogleIcon","MicrosoftIcon","Error","login","auth","idpHint","LigaAgentQuickstartsComponent","handleMessageClick","ligaAgent","isAvailable","startNewConversation","body","isClosed","LigaAgentTabComponent","onWidgetError","template","DefaultMessageLayoutComponent","LoginFormComponent","nespressoKeycloakLoginUrl","keycloakPerOrigin","nespressoKeycloakConfig","clientId","origins","isNespressoEmail","username","test","passwordInputType","showPasswordInput","didShowNespressoLoginNotice","nespressoLoginRedirectCountdown","_nespressoRedirectCountdownInterval","setInterval","clearInterval","href","willHideNespressoLoginNotice","didNavigateBack","persisted","setupBackNavigationListener","teardownBackNavigationListener","removeEventListener","togglePasswordIcon","resetMessage","legacy","router","transitionTo","err","setError","msg","invalid","NavigationItemComponent","isActive","icon_url","iconCssProps","currentItem","PasswordResetComponent","conditions","isMet","n","isAllConditionsMet","every","isPasswordsMatch","confirmPassword","canResetPassword","resetPassword","partialUpdate","showResetDone","addErrorMessages","ScrollButton","setVisibility","handleWindowOrientationChange","schedule","setupScrollingElementEvent","theme","scrollingElement","scrollingElementSelector","querySelector","scrollToBottom","scrollTo","behavior","top","innerHeight","SearchInputComponent","guidFor","hasValue","clear","getElementById","inputId","InputEvent","focus","handleInput","onChange","SentryFeedbackButton","_didCreateTicket","WeakMap","modifier","submitCount","feedback","getFeedback","warn","unsubscribe","attachTo","_classPrivateFieldGet","_classPrivateFieldInitSpec","_submitCount","StartupMaskComponent","TaskListComponent","taskWithPopup","isEmpty","closeInfos","afterPopupVisibilityChange","openTask","taskId","resourceName","afterOpenTask","toggleInfos","isPopupOpen","Controller","resizeTimer","bind","clearTimeout","classList","setTimeout","onOrientationChange","style","height","supportedBrowsers","browserIsSupported","isSupportedBrowser","browserSupportedMsg","formatSupportedBrowsers","isAppLoaded","keycloakLoginOptionGroups","adapter","loginOptions","g","supportsExtraLegacyLogin","loggedIn","goToLogin","showPasswordReset","showPasswordResetRequested","togglePasswordReset","passwordReset","email_or_username","model","setupDeprecationWorkflow","throwOnUnhandled","workflow","time","hhmmss","hour","minute","second","date","number","compact","notation","EUR","currency","USD","appVersion","_","hash","versionOnly","hideSha","shaOnly","hideVersion","showExtended","versionExtendedRegExp","versionRegExp","shaRegExp","helper","string","_dasherize","Helper","compute","relative","timeoutId","momentDate","locale","isValid","timeoutSec","recompute","fromNow","getFormat","formats","date_time","pageTitle","sanitize","allowedTags","tag","htmlSafe","sanitizeHtml","sum","first","initialize","initializerFactory","register","ContainerDebugAdapter","setupContainer","application","isEnabled","tagManagerId","src","script","undefined","onload","head","safeLoadScript","gtag","dataLayer","Date","BUILD_INFO","ENV","log","parts","colored","navigator","userAgent","reduce","part","Array","isArray","logInfos","infos","max","repeat","source","logSeparator","logBuildInfo","isNone","promises","apiVdc","getJSON","apiMyliga","responses","versions","logResponseInfo","fetch","ok","statusText","json","getFlashMessagesService","getIntlService","getSessionService","appInstance","lookup","Ember","onerror","handleError","rethrow","AbortError","status_code","ForbiddenError","AdapterError","errors","isUnknownError","addErrorMessage","flashMessages","applicationInstance","handleFeedbackSubmit","formData","FormData","metadata","attachments","attachment","blob","Blob","contentType","filename","method","buildUrl","processData","addSuccessMessage","CustomHashLocation","HashLocation","replaceURL","path","positionalArgs","namedArgs","props","setProperty","removeProperty","Router","EmberRouter","locationType","rootURL","route","Route","apiEvents","triggerConfigChange","exposeLigaOSApi","LIGAOS_API","exposeApi","API","beforeModel","setLocale","formatLocales","restore","checkAuth","activate","appLocation","resetTitle","forceLegacyLogin","setupController","controller","isLegacyLoginFormActive","sentryScope","currentScope","getCurrentScope","getClient","_params","transition","attemptedUrl","params","currentURL","getURL","KEYCLOAK_REDIRECT_HASH","setPreviousUrl","onDidLogout","content","user_id","sessionResponse","setUser","isPendingUser","isAnonymousUser","ssoSignupApp","apps","pubSub","subscribe","onLanguageDidChange","microMenu","enable","deactivate","setPreviousUserId","reset","modelFor","previousUrl","popPreviousUrl","getLastVisitedUrl","replaceLocationHash","loadUser","loadNavigations","appUrl","decodeRoute","currentRouteUrl","encodeRoute","setUrl","onUrlDidChange","openFirstItem","loadedAppCheck","setAppTitle","formatErrorMessage","triggerAppError","title","encodeHashPart","addSlug","decodeHashPart","encodedUrl","replaceWith","saveLastVisitedUrl","sessionStorage","getItem","removeItem","setItem","redirect","BaseApiService","assetURL","protocol","host","Service","defaultData","background_image","preview_url","logo_image","defaultTitle","defaultType","toLowerCase","themeData","favicon","isDefault","bgURL","logoURL","styles","support","search","hostname","domain","responseText","setup","faviconElement","tabsDefinitions","allowForAllUsers","filterOptions","defaultFilterValue","requiredPermission","class","hasTitle","badges","rightsRecordsAsync","TrackedAsyncData","rightsRecords","isResolved","some","right","tabDefinition","filterValue","tabsFilterValues","handleNotificationOpened","startPolling","stopPolling","interval","pollingIntervalTime","pollingInterval","playSound","currentBadges","updateTitle","_maybeTriggerNotificationSound","triggerNotificationSound","cached","localStorageKey","allQuickstarts","_dec","shouldEnableQuickstarts","getApps","disabled","getItemFor","apiUrl","quickstarts","shownItems","parse","localStorage","selectedQuickstarts","updatedShownItems","next","newConversation","LOG_COLOR","LOG_GROUP_FUNC","triggerEvent","setUrlPath","_logDeprecatedCall","_logCall","getConfig","e","validateSession","languageCode","setTitle","setTitlePrefix","prefix","setTitleCount","hideCommunicator","showCommunicator","notifyAppLoaded","setAppLoaded","notifyInvalidSession","valid","notifyAccessDenied","setBlur","isBlurred","checkBrowserSupport","confirm","getTheme","getSetting","defaultValue","getValue","setSetting","setting","saveSetting","iframe","contentWindow","postMessage","_validateMessageOrigin","allowedApps","handleWindowMessage","func","ligaOSApi","call","arg","groupEnd","_logResponse","funcArg","until","deprecated","funcReplace","idx","allowedOrigin","BaseMicroMenuService","replaceUrlPlaceholders","stripFeatureBranchName","extend","Evented","parentSlug","parent","parentItem","urlReplaces","navigations","force","_cleanUpNavigations","isAllowedAppUrl","disable","cancel","lastLoadedAppCheck","loadedAppCheckError","loadedAppCheckTime","belongsToCurrentApp","_cleanUrl","allow_feature_branches","nav","navUrl","RegExp","escapeExpStr","urlString","startsWith","pathname","urlMatcher","navItem","url_path","EmberObject","newWindow","closed","trigger","resetAppError","triggerAppErrorReset","isCurrentUrl","isCurrentItem","findFirstItem","items","_buildResourceUrl","isNaN","typeOf","_getResourceUrlTemplate","_loadSegments","segments","urlTemplate","_fillPlaceholders","replaceAll","ticketId","matches","basePath","ticketHandle","appPath","_extractPlaceholders","placeholder","segment","_placeholders","resourceUrlTemplates","classify","resourceVal","_loadArticleReviewSegments","articleReviewId","articleReview","project_id","country","country_id","_loadStoreSegments","storeId","client_id","_loadOrderSegments","orderId","order","_loadAssemblySegments","assemblyId","assembly","_loadProjectSegments","projectId","_loadProjectTaskSegments","context_id","_loadEventTaskSegments","_loadMessageSegments","messageId","contextType","pluralize","_url","cleanUrl","cleanAppUrl","n1","n2","_cleanUpNavigation","allowed","socket","emit","transports","serviceUrl","splitUrl","io","forceNew","_setToken","events","disconnect","LEGACY_LOGIN_KEY","_class2","keycloakConfigs","keycloakConfig","_legacyAdapter","LegacyAdapter","_keycloakAdapter","KeycloakAdapter","keycloakUrl","legacyAdapter","didUpdateToken","setSession","oldUserId","destroy","AnonymousUserError","_clientId","_keycloak","Keycloak","realm","typeData","_didUpdateToken","_intervalId","authenticated","redirectUri","didInitialize","_error","init","onLoad","checkLoginIframe","flow","responseMode","useNonce","authorized","UnauthorizedError","_lastTokenRefreshTimestamp","now","keycloakRefreshInterval","_lastTokenRefreshPromise","timestamp","duration","updateToken","isTokenExpired","pipeIndex","substring","_loadUser","forename","user_name","app_key","defaultValues","names","all","createSetting","_isDirty","hasChangedSettings","changedSettings","savedSetting","s","refresh","loadPromise","_descriptor16","_descriptor17","_descriptor18","showLoaderMask","titleCount","appCount","loadLanguages","languagesPromise","native_spelling","appTitle","storage","triggerLanguageChange","findRecord","language_id","setIfChanged","code","detectLanguage","showClickCatcherMask","setNavigationIsOpen","propertyHasChanged","enabled","playAudio","locales","innerHTML","useCookies","StorageService","pre","cookie","c","getCookie","ex","expires","setTime","getTime","toGMTString","setCookie","Store","FragmentStore","cache","FragmentCache","_instanceCache","ArrayTransform","FragmentArrayTransform","FragmentTransform","hasClass","use","formatBrowserName","word","toUpperCase","localeCompare","browser","global","defaultErrorMessage","localeString","countryCode","testing","keycloak","isOffline","_nextToken","_isTokenExpired","__reset","__setTokenExpired","expired","__setAuthorized","__setToken","_token","reference","messages","concat","onAudioReady","currentTime","play","onPlaybackEnded","removeChild","audioElement","display","str","replaces","obj","port","hostExp","urlParsed","pathRegExp","hostRegExp","appRegExp","urlObj","history","replaceState","define","metaName","rawConfig","getAttribute","exports","decodeURIComponent","defineProperty","runningTests","require","vdc","amg","liganova","homepage","resourceLocations","ArticleReview","Project","ProjectMessage","EventMessage","ProjectTask","EventTask","Order","Pin","User","AbsenceRequest","CompensationRequest","Clap","Talk","en","chart_date","de","chrome","firefox","iphone","ipad","safari","googleAnalytics","iframely","resizer","exporter","scrapper","dummy","logging","level","googleTagManagerId","telephoneLinks","ligaagentQuickstarts"],"sources":["vendor/ember-cli/app-prefix.js","ln-liga-os/adapters/application.js","ln-liga-os/app.js","ln-liga-os/components/app-content.js","ln-liga-os/components/check-icon.js","ln-liga-os/components/click-catcher.js","ln-liga-os/components/communicator/base-container.js","ln-liga-os/components/communicator/chat-icon.js","ln-liga-os/components/communicator/error-message.js","ln-liga-os/components/communicator/filter.js","ln-liga-os/components/communicator/ligaagent-logo.js","ln-liga-os/components/communicator/notification-item.js","ln-liga-os/components/communicator/tab-absences.js","ln-liga-os/components/communicator/tab-applications.js","ln-liga-os/components/communicator/tab-birthdays.js","ln-liga-os/components/communicator/tab-contacts.js","ln-liga-os/components/communicator/tab-notifications.js","ln-liga-os/components/communicator/tab-settings.js","ln-liga-os/components/communicator/tab-tasks.js","ln-liga-os/components/contact-list/collection.js","ln-liga-os/components/contact-list/item-absence.js","ln-liga-os/components/contact-list/item-add-list.js","ln-liga-os/components/contact-list/item-client.js","ln-liga-os/components/contact-list/item-contact.js","ln-liga-os/components/contact-list/item-loader.js","ln-liga-os/components/contact-list/item-mailing-list.js","ln-liga-os/components/contact-list/item-no-results.js","ln-liga-os/components/contact-list/item-project.js","ln-liga-os/components/contact-list/item-subhead.js","ln-liga-os/components/contact-menu.js","ln-liga-os/components/error-overlay.js","ln-liga-os/components/form-condition.js","ln-liga-os/components/icons/close.js","ln-liga-os/components/keycloak-login-button.js","ln-liga-os/components/keycloak-login-button/google-icon.js","ln-liga-os/components/keycloak-login-button/microsoft-icon.js","ln-liga-os/components/liga-agent/quickstarts.js","ln-liga-os/components/liga-agent/tab.js","ln-liga-os/components/ln-flash-messages/default-message-layout.js","ln-liga-os/components/loader-mask.js","ln-liga-os/components/loading-spinner.js","ln-liga-os/components/login-form.js","ln-liga-os/components/navigation-item.js","ln-liga-os/components/password-reset.js","ln-liga-os/components/scroll-button.js","ln-liga-os/components/search-input.js","ln-liga-os/components/sentry-feedback-button.js","ln-liga-os/components/startup-mask.js","ln-liga-os/components/task-list.js","ln-liga-os/controllers/application.js","ln-liga-os/controllers/error.js","ln-liga-os/controllers/login.js","ln-liga-os/controllers/main/apps.js","ln-liga-os/controllers/password-reset.js","ln-liga-os/deprecation-workflow.js","ln-liga-os/formats.js","ln-liga-os/helpers/app-version.js","ln-liga-os/helpers/dasherize.js","ln-liga-os/helpers/date-time.js","ln-liga-os/helpers/page-title.js","ln-liga-os/helpers/sanitize.js","ln-liga-os/helpers/sum.js","ln-liga-os/initializers/app-version.js","ln-liga-os/initializers/container-debug-adapter.js","ln-liga-os/initializers/ember-cli-mirage.js","ln-liga-os/initializers/ember-data.js","ln-liga-os/initializers/google-analytics.js","ln-liga-os/initializers/version-info.js","ln-liga-os/instance-initializers/ember-data.js","ln-liga-os/instance-initializers/error-handler.js","ln-liga-os/instance-initializers/sentry-feedback.js","ln-liga-os/locations/custom-hash.js","ln-liga-os/modifiers/css-props.js","ln-liga-os/router.js","ln-liga-os/routes/application.js","ln-liga-os/routes/login.js","ln-liga-os/routes/main.js","ln-liga-os/routes/main/apps.js","ln-liga-os/routes/main/index.js","ln-liga-os/routes/password-reset.js","ln-liga-os/services/api.js","ln-liga-os/services/client-theme.js","ln-liga-os/services/communicator.js","ln-liga-os/services/liga-agent.js","ln-liga-os/services/liga-os-api.js","ln-liga-os/services/micro-menu.js","ln-liga-os/services/navigation.js","ln-liga-os/services/pub-sub.js","ln-liga-os/services/session.js","ln-liga-os/services/settings.js","ln-liga-os/services/state.js","ln-liga-os/services/storage.js","ln-liga-os/services/store.js","ln-liga-os/transforms/array.js","ln-liga-os/transforms/fragment-array.js","ln-liga-os/transforms/fragment.js","ln-liga-os/transitions.js","ln-liga-os/utils/browser.js","ln-liga-os/utils/format-error-message.js","ln-liga-os/utils/format-locales.js","ln-liga-os/utils/is-offline.js","ln-liga-os/utils/keycloak.js","ln-liga-os/utils/main-route.js","ln-liga-os/utils/normalize-error-response.js","ln-liga-os/utils/play-audio.js","ln-liga-os/utils/regexp.js","ln-liga-os/utils/sentry-feedback.js","ln-liga-os/utils/set-if-changed.js","ln-liga-os/utils/url.js","vendor/ember-cli/app-config.js","vendor/ember-cli/app-boot.js"],"sourcesContent":["'use strict';\n\n\n","import BaseApplicationAdapter from 'ln-ember-data-models/adapters/application';\nimport { inject as service } from '@ember/service';\nimport config from 'ln-liga-os/config/environment';\n\nconst appConfig = config.APP.config;\n\nexport default class ApplicationAdapter extends BaseApplicationAdapter {\n  @service ligaOsApi;\n  @service state;\n\n  get config() {\n    return appConfig;\n  }\n\n  loadToken() {\n    return this.ligaOsApi.getSession().then(({ token }) => token);\n  }\n\n  loadLanguage() {\n    return this.state.getLanguage();\n  }\n}\n","import './deprecation-workflow';\nimport Application from '@ember/application';\nimport Resolver from 'ember-resolver';\nimport { init as initSentry, feedbackIntegration } from '@sentry/ember';\nimport loadInitializers from 'ember-load-initializers';\nimport config from 'ln-liga-os/config/environment';\nimport { throttle } from '@ember/runloop';\nimport { SUBMIT_SUCCESS_EVENT } from 'ln-liga-os/utils/sentry-feedback';\n\nconst onSubmitSuccess = (data, eventID) => {\n  // we don't have access to ember services here,\n  // so let's dispatch custom event for sentry-feedback instance initializer to handle\n  window.dispatchEvent(\n    new CustomEvent(SUBMIT_SUCCESS_EVENT, {\n      detail: {\n        data,\n        eventID,\n      },\n    })\n  );\n};\n\ninitSentry({\n  release: `${config.APP.name}@${config.APP.version}`,\n\n  ...(['development', 'test'].includes(config.environment)\n    ? {\n        // Keep Sentry fully enabled in dev/test environments, but\n        // don't actually send any events to Sentry.\n        //\n        // We could also use `enabled: false`, but then we won't see\n        // Feedback widget in development mode.\n        transport: () => ({\n          send: () =>\n            Promise.resolve({\n              statusCode: 200,\n            }),\n          flush: () => Promise.resolve(true),\n        }),\n      }\n    : {}),\n\n  integrations: [\n    feedbackIntegration({\n      addScreenshotButtonLabel: 'ADD A SCREENSHOT',\n      autoInject: false,\n      cancelButtonLabel: 'CANCEL',\n      colorScheme: 'system',\n      confirmButtonLabel: 'CONFIRM',\n      formTitle: 'Create a support ticket',\n      removeScreenshotButtonLabel: 'REMOVE SCREENSHOT',\n      showBranding: false,\n      showEmail: false,\n      showName: false,\n      useSentryUser: {\n        email: 'email',\n        name: 'name',\n      },\n      messagePlaceholder:\n        'Describe the issue that you have. What were your last steps? What is the expected result?',\n      submitButtonLabel: 'SEND',\n      successMessageText: null,\n      onSubmitSuccess: (data, eventID) => {\n        // for some reason Sentry calls this twice,\n        // so let's avoid duplicated flash messages with throttling\n        throttle(null, onSubmitSuccess, data, eventID, 100);\n      },\n\n      triggerLabel: 'Contact Support',\n    }),\n  ],\n});\n\nexport default class App extends Application {\n  modulePrefix = config.modulePrefix;\n  podModulePrefix = config.podModulePrefix;\n  Resolver = Resolver;\n}\n\nloadInitializers(App, config.modulePrefix);\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class={{this.className}} {{css-props this.cssProps}}>\\n  {{#if @error}}\\n    <ErrorOverlay @title={{@error.title}} @description={{@error.description}} />\\n  {{else}}\\n    <iframe\\n      class=\\\"app-frame\\\"\\n      scrolling=\\\"yes\\\"\\n      frameborder=\\\"0\\\"\\n      allowtransparency=\\\"true\\\"\\n      allow=\\\"geolocation\\\"\\n      title=\\\"content\\\"\\n      {{did-insert this.initIframe}}\\n    />\\n  {{/if}}\\n</div>\", {\"contents\":\"<div ...attributes class={{this.className}} {{css-props this.cssProps}}>\\n  {{#if @error}}\\n    <ErrorOverlay @title={{@error.title}} @description={{@error.description}} />\\n  {{else}}\\n    <iframe\\n      class=\\\"app-frame\\\"\\n      scrolling=\\\"yes\\\"\\n      frameborder=\\\"0\\\"\\n      allowtransparency=\\\"true\\\"\\n      allow=\\\"geolocation\\\"\\n      title=\\\"content\\\"\\n      {{did-insert this.initIframe}}\\n    />\\n  {{/if}}\\n</div>\",\"moduleName\":\"ln-liga-os/components/app-content.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/app-content.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\nimport { scheduleOnce } from '@ember/runloop';\nimport { action } from '@ember/object';\nimport { PREFIX_QUERY_PARAM_NAME } from 'ln-ember-toolkit/utils/liga-os';\n\nexport default class AppContentComponent extends Component {\n  @service navigation;\n  @service state;\n\n  @tracked iframeElement;\n\n  constructor(...args) {\n    super(...args);\n    this.updateFrameUrl();\n    this.navigation.on('open-url', this, this.updateFrameUrl);\n  }\n\n  get className() {\n    const result = ['app-content-component'];\n    if (this.args.loaded) {\n      result.push('loaded');\n    }\n    if (this.state.communicatorIsOpen) {\n      result.push('communicator-is-open');\n    }\n    if (this.showBackground) {\n      result.push('show-background');\n    }\n    return result.join(' ');\n  }\n\n  get cssProps() {\n    const backgroundColor = this.showBackground\n      ? this.navigation.currentApp.background\n      : 'transparent';\n    return { 'background-color': backgroundColor };\n  }\n\n  get showBackground() {\n    return !!(\n      this.state.appLoaded &&\n      !this.state.appError &&\n      this.navigation.currentApp?.background\n    );\n  }\n\n  @action\n  initIframe(element) {\n    this.iframeElement = element;\n  }\n\n  @action\n  updateFrameUrl() {\n    if (!this.navigation.currentUrl) {\n      return;\n    }\n\n    scheduleOnce(\n      'afterRender',\n      this,\n      this._updateFrameUrl,\n      this.navigation.currentUrl\n    );\n  }\n\n  _updateFrameUrl(url) {\n    if (!this.iframeElement || this.isDestroying) {\n      return;\n    }\n\n    const { origin } = location;\n    const fullUrl = url.match(/^\\/[^/]/) ? `${origin}${url}` : url;\n    const iframeUrl = new URL(fullUrl);\n\n    const app = this.navigation.getAppFor(url);\n    if (app) {\n      const ligaOsPrefix = `${origin}/#/!/${app.slug}`;\n      iframeUrl.searchParams.append(PREFIX_QUERY_PARAM_NAME, ligaOsPrefix);\n    }\n\n    const appFrame = this.iframeElement;\n    appFrame && appFrame.setAttribute('src', iframeUrl.toString());\n  }\n\n  willDestroy() {\n    super.willDestroy(...arguments);\n    this.navigation.off('open-url', this, this.updateFrameUrl);\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class=\\\"check-icon-component {{if @isCorrect 'is-correct'}}\\\">\\n  <svg class=\\\"check-icon\\\" width=\\\"50\\\" height=\\\"40\\\" viewBox=\\\"0 0 50 40\\\">\\n    <path d=\\\"M5 25 L15 35 L45 5\\\"  stroke-width=\\\"6\\\" stroke=\\\"white\\\" fill=\\\"none\\\" />\\n  </svg>\\n</div>\", {\"contents\":\"<div ...attributes class=\\\"check-icon-component {{if @isCorrect 'is-correct'}}\\\">\\n  <svg class=\\\"check-icon\\\" width=\\\"50\\\" height=\\\"40\\\" viewBox=\\\"0 0 50 40\\\">\\n    <path d=\\\"M5 25 L15 35 L45 5\\\"  stroke-width=\\\"6\\\" stroke=\\\"white\\\" fill=\\\"none\\\" />\\n  </svg>\\n</div>\",\"moduleName\":\"ln-liga-os/components/check-icon.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/check-icon.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\n\nexport default class ClickCatcherComponent extends Component {\n  @service mediaMatcher;\n  @service state;\n\n  parentElement;\n\n  @action\n  fadeOut() {\n    if (!this.mediaMatcher.isMobile) {\n      return;\n    }\n    const clone = document.createElement('div');\n    clone.className = 'click-catcher-component destroying';\n    clone.addEventListener(\n      'animationend',\n      () => {\n        clone.remove();\n      },\n      { once: true }\n    );\n    this.parentElement.appendChild(clone);\n    this.parentElement = null;\n  }\n\n  @action\n  handleClick() {\n    this.state.hideClickCatcher();\n  }\n\n  @action\n  registerElement(element) {\n    this.parentElement = element.parentElement;\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div\\n  ...attributes\\n  class={{this.className}}\\n  {{on \\\"touchend\\\" this.handleTouchEnd passive=true}}\\n  {{on \\\"touchmove\\\" this.handleTouchMove passive=true}}\\n  {{on \\\"touchstart\\\" this.handleTouchStart passive=true}}\\n  {{did-insert this.updateSettingValues}}\\n>\\n  <div\\n    class=\\\"tabs\\\"\\n    role=\\\"tablist\\\"\\n    {{on \\\"mouseenter\\\" (fn this.toggleCommunicator true) passive=true}}\\n    {{on \\\"mouseleave\\\" (fn this.toggleCommunicator false) passive=true}}\\n    {{css-props this.slideCssProps}}\\n  >\\n\\n    <div\\n      {{on\\n        \\\"click\\\"\\n        (if\\n          this.mediaMatcher.isMobile\\n          (fn this.toggleCommunicator true)\\n          this.forceOpenCommunicator\\n        )\\n        passive=true\\n      }}\\n      class=\\\"tab-item tab-handle tab-item-user\\\"\\n      id=\\\"communicator-user-image\\\"\\n      role=\\\"tab\\\"\\n    >\\n      <ResizedImage\\n        @placeholder=\\\"assets/images/user.svg\\\"\\n        @size=\\\"40x40\\\"\\n        @src={{this.state.user.picture}}\\n        class=\\\"user-image round\\\"\\n        role=\\\"presentation\\\"\\n      />\\n      <span class=\\\"badge {{unless this.badge 'empty'}}\\\">{{this.badge}}</span>\\n    </div>\\n\\n    {{#each this.tabs as |tab|}}\\n      <div\\n        {{on \\\"click\\\" (fn this.toggleTab tab) passive=true}}\\n        title={{tab.name}}\\n        class=\\\"tab-item tab-icon tab-item-{{tab.id}}\\n          {{if (eq tab.id this.currentTab.id) 'is-active'}}\\\"\\n        data-test-element=\\\"tab\\\"\\n        data-test-tab-id={{tab.id}}\\n        id=\\\"tab-item-{{tab.id}}\\\"\\n        role=\\\"tab\\\"\\n      >\\n        <span class=\\\"badge {{unless tab.badge 'empty'}}\\\">{{tab.badge}}</span>\\n      </div>\\n    {{/each}}\\n\\n    <div\\n      {{on \\\"click\\\" this.logout passive=true}}\\n      class=\\\"tab-item tab-icon tab-item-logout\\\"\\n      title=\\\"Logout\\\"\\n      role=\\\"button\\\"\\n    ></div>\\n\\n    <div class=\\\"tab-item\\\">\\n      <SentryFeedbackButton\\n        class=\\\"tab-button-feedback\\\"\\n        title=\\\"Contact Support\\\"\\n      />\\n    </div>\\n\\n    {{#if this.ligaAgent.isAvailable}}\\n      <div class=\\\"tab-item\\\">\\n        <button\\n          {{on \\\"click\\\" (fn this.toggleTab this.ligaAgentTab) passive=true}}\\n          class=\\\"tab-button-ligaagent\\\"\\n          title=\\\"LIGAagent\\\"\\n          type=\\\"button\\\"\\n          id={{this.ligaAgent.anchorElementId}}\\n        >\\n          <Communicator::ChatIcon />\\n        </button>\\n      </div>\\n    {{/if}}\\n  </div>\\n\\n  <div\\n    class=\\\"content\\n      {{if (or this.currentTab.hasTitle this.isLigaAgent) 'has-title'}}\\n      {{if this.currentTab.filterOptions 'has-filters'}}\\\"\\n    {{css-props this.slideCssProps}}\\n  >\\n\\n    <div class=\\\"content-head\\\">\\n      {{#if this.currentTab.filterOptions}}\\n        <Communicator::Filter\\n          @options={{this.currentTab.filterOptions}}\\n          @setFilter={{this.setFilter}}\\n          @value={{this.currentTab.filterValue}}\\n          class=\\\"communicator-filter-{{this.currentTab.id}}-component\\\"\\n          data-test-element=\\\"filter\\\"\\n        />\\n      {{/if}}\\n\\n      <div\\n        class=\\\"back-icon\\\"\\n        role=\\\"button\\\"\\n        {{on \\\"click\\\" this.close passive=true}}\\n      />\\n\\n      <div class=\\\"tab-title\\\">\\n        <div class=\\\"tab-title-content\\\">\\n          {{#let\\n            (or this.currentTab.title (if this.isLigaAgent \\\"LIGAagent\\\"))\\n            (if\\n              this.isLigaAgent\\n              (component\\n                \\\"communicator/ligaagent-logo\\\"\\n                class=\\\"communicator-ligaagent-logo\\\"\\n              )\\n            )\\n            as |title TitleComponent|\\n          }}\\n            {{#if TitleComponent}}\\n              <TitleComponent title={{title}} />\\n            {{else}}\\n              <span title={{title}}>\\n                {{title}}\\n              </span>\\n            {{/if}}\\n          {{/let}}\\n        </div>\\n      </div>\\n    </div>\\n\\n    <div\\n      class=\\\"tab-content\\n        {{this.currentTab.id}}\\n        {{if this.detailsOpen 'details-open'}}\\n        {{if this.currentTab 'is-open'}}\\\"\\n    >\\n      {{! keep it rendered all the time. Hide when it's not active.\\n      This allows us to load the component eagerly(open it as soon as it's possible),\\n      and preserve its state when switching tabs. }}\\n      <LigaAgent::Tab class={{unless this.isLigaAgent \\\"tab-content-hidden\\\"}} />\\n\\n      {{#if (and (not this.isLigaAgent) this.currentTab)}}\\n        {{component\\n          (concat \\\"communicator/tab-\\\" (dasherize this.currentTab.id))\\n          tab=this.currentTab\\n          filter=this.currentTab.filterValue\\n          close=this.close\\n        }}\\n      {{/if}}\\n    </div>\\n  </div>\\n</div>\", {\"contents\":\"<div\\n  ...attributes\\n  class={{this.className}}\\n  {{on \\\"touchend\\\" this.handleTouchEnd passive=true}}\\n  {{on \\\"touchmove\\\" this.handleTouchMove passive=true}}\\n  {{on \\\"touchstart\\\" this.handleTouchStart passive=true}}\\n  {{did-insert this.updateSettingValues}}\\n>\\n  <div\\n    class=\\\"tabs\\\"\\n    role=\\\"tablist\\\"\\n    {{on \\\"mouseenter\\\" (fn this.toggleCommunicator true) passive=true}}\\n    {{on \\\"mouseleave\\\" (fn this.toggleCommunicator false) passive=true}}\\n    {{css-props this.slideCssProps}}\\n  >\\n\\n    <div\\n      {{on\\n        \\\"click\\\"\\n        (if\\n          this.mediaMatcher.isMobile\\n          (fn this.toggleCommunicator true)\\n          this.forceOpenCommunicator\\n        )\\n        passive=true\\n      }}\\n      class=\\\"tab-item tab-handle tab-item-user\\\"\\n      id=\\\"communicator-user-image\\\"\\n      role=\\\"tab\\\"\\n    >\\n      <ResizedImage\\n        @placeholder=\\\"assets/images/user.svg\\\"\\n        @size=\\\"40x40\\\"\\n        @src={{this.state.user.picture}}\\n        class=\\\"user-image round\\\"\\n        role=\\\"presentation\\\"\\n      />\\n      <span class=\\\"badge {{unless this.badge 'empty'}}\\\">{{this.badge}}</span>\\n    </div>\\n\\n    {{#each this.tabs as |tab|}}\\n      <div\\n        {{on \\\"click\\\" (fn this.toggleTab tab) passive=true}}\\n        title={{tab.name}}\\n        class=\\\"tab-item tab-icon tab-item-{{tab.id}}\\n          {{if (eq tab.id this.currentTab.id) 'is-active'}}\\\"\\n        data-test-element=\\\"tab\\\"\\n        data-test-tab-id={{tab.id}}\\n        id=\\\"tab-item-{{tab.id}}\\\"\\n        role=\\\"tab\\\"\\n      >\\n        <span class=\\\"badge {{unless tab.badge 'empty'}}\\\">{{tab.badge}}</span>\\n      </div>\\n    {{/each}}\\n\\n    <div\\n      {{on \\\"click\\\" this.logout passive=true}}\\n      class=\\\"tab-item tab-icon tab-item-logout\\\"\\n      title=\\\"Logout\\\"\\n      role=\\\"button\\\"\\n    ></div>\\n\\n    <div class=\\\"tab-item\\\">\\n      <SentryFeedbackButton\\n        class=\\\"tab-button-feedback\\\"\\n        title=\\\"Contact Support\\\"\\n      />\\n    </div>\\n\\n    {{#if this.ligaAgent.isAvailable}}\\n      <div class=\\\"tab-item\\\">\\n        <button\\n          {{on \\\"click\\\" (fn this.toggleTab this.ligaAgentTab) passive=true}}\\n          class=\\\"tab-button-ligaagent\\\"\\n          title=\\\"LIGAagent\\\"\\n          type=\\\"button\\\"\\n          id={{this.ligaAgent.anchorElementId}}\\n        >\\n          <Communicator::ChatIcon />\\n        </button>\\n      </div>\\n    {{/if}}\\n  </div>\\n\\n  <div\\n    class=\\\"content\\n      {{if (or this.currentTab.hasTitle this.isLigaAgent) 'has-title'}}\\n      {{if this.currentTab.filterOptions 'has-filters'}}\\\"\\n    {{css-props this.slideCssProps}}\\n  >\\n\\n    <div class=\\\"content-head\\\">\\n      {{#if this.currentTab.filterOptions}}\\n        <Communicator::Filter\\n          @options={{this.currentTab.filterOptions}}\\n          @setFilter={{this.setFilter}}\\n          @value={{this.currentTab.filterValue}}\\n          class=\\\"communicator-filter-{{this.currentTab.id}}-component\\\"\\n          data-test-element=\\\"filter\\\"\\n        />\\n      {{/if}}\\n\\n      <div\\n        class=\\\"back-icon\\\"\\n        role=\\\"button\\\"\\n        {{on \\\"click\\\" this.close passive=true}}\\n      />\\n\\n      <div class=\\\"tab-title\\\">\\n        <div class=\\\"tab-title-content\\\">\\n          {{#let\\n            (or this.currentTab.title (if this.isLigaAgent \\\"LIGAagent\\\"))\\n            (if\\n              this.isLigaAgent\\n              (component\\n                \\\"communicator/ligaagent-logo\\\"\\n                class=\\\"communicator-ligaagent-logo\\\"\\n              )\\n            )\\n            as |title TitleComponent|\\n          }}\\n            {{#if TitleComponent}}\\n              <TitleComponent title={{title}} />\\n            {{else}}\\n              <span title={{title}}>\\n                {{title}}\\n              </span>\\n            {{/if}}\\n          {{/let}}\\n        </div>\\n      </div>\\n    </div>\\n\\n    <div\\n      class=\\\"tab-content\\n        {{this.currentTab.id}}\\n        {{if this.detailsOpen 'details-open'}}\\n        {{if this.currentTab 'is-open'}}\\\"\\n    >\\n      {{! keep it rendered all the time. Hide when it's not active.\\n      This allows us to load the component eagerly(open it as soon as it's possible),\\n      and preserve its state when switching tabs. }}\\n      <LigaAgent::Tab class={{unless this.isLigaAgent \\\"tab-content-hidden\\\"}} />\\n\\n      {{#if (and (not this.isLigaAgent) this.currentTab)}}\\n        {{component\\n          (concat \\\"communicator/tab-\\\" (dasherize this.currentTab.id))\\n          tab=this.currentTab\\n          filter=this.currentTab.filterValue\\n          close=this.close\\n        }}\\n      {{/if}}\\n    </div>\\n  </div>\\n</div>\",\"moduleName\":\"ln-liga-os/components/communicator/base-container.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/communicator/base-container.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { later } from '@ember/runloop';\n\nconst ANIMATION_DELAY = 400;\n\nfunction touchEventXY(event) {\n  const touch = event.touches[0] || event.changedTouches[0];\n\n  return {\n    x: touch.pageX || 0,\n    y: touch.pageY || 0,\n  };\n}\n\nexport default class CommunicatorBaseContainerComponent extends Component {\n  @service clientTheme;\n  @service communicator;\n  @service ligaAgent;\n  @service lnFlashMessages;\n  @service mediaMatcher;\n  @service navigation;\n  @service session;\n  @service settings;\n  @service state;\n\n  @tracked detailsOpen = false;\n\n  @tracked sliding = undefined;\n\n  @tracked settingValues = {};\n\n  @tracked tabsAreOpen = false;\n\n  @tracked touchMovePoint = null;\n\n  @tracked touchStartPoint = null;\n\n  ligaAgentTab = {\n    id: 'liga-agent',\n  };\n\n  constructor(...args) {\n    super(...args);\n    this.state.on('hide-click-catcher', this, this.close);\n    this.settings.on('settings-did-change', this, this.updateSettingValues);\n  }\n\n  get className() {\n    const result = ['communicator-base-container-component'];\n    if (this.communicator.isVisible) {\n      result.push('is-visible');\n    }\n    result.push(this.state.communicatorIsOpen ? 'is-open' : 'is-closed');\n    if (this.state.navigationIsOpen) {\n      result.push('navigation-is-open');\n    }\n    if (this.showTabs) {\n      result.push('show-tabs');\n    }\n    if (this.sliding) {\n      result.push('sliding');\n    }\n    if (this.clientTheme.className) {\n      result.push(this.clientTheme.className);\n    }\n    return result.join(' ');\n  }\n\n  get badge() {\n    return this.communicator.badgeNumber;\n  }\n\n  get currentTab() {\n    return this.communicator.currentTab;\n  }\n\n  get isLigaAgent() {\n    return this.currentTab?.id === this.ligaAgentTab.id;\n  }\n\n  get slideCssProps() {\n    const startPoint = this.touchStartPoint;\n    const movePoint = this.touchMovePoint;\n\n    if (!startPoint || !movePoint) {\n      return undefined;\n    }\n\n    const windowWidth = window.innerWidth;\n    const diff = startPoint.x - movePoint.x;\n\n    if (diff >= 0) {\n      return undefined;\n    }\n\n    let translateX = Math.abs(diff) / 2;\n\n    if (this.mediaMatcher.isMobile) {\n      translateX = Math.abs(diff) - windowWidth;\n    }\n\n    return {\n      transform: `translate3d(${translateX}px, 0, 0)`,\n    };\n  }\n\n  get showTabs() {\n    return (\n      this.tabsAreOpen ||\n      this.state.communicatorIsOpen ||\n      (this.mediaMatcher.isDesktop && this.settingValues.AlwaysShowCommunicator)\n    );\n  }\n\n  get tabs() {\n    return this.communicator.tabs;\n  }\n\n  @action\n  close() {\n    if (this.detailsOpen) {\n      this.detailsOpen = false;\n    } else {\n      this._close();\n    }\n  }\n\n  @action\n  forceOpenCommunicator() {\n    const value = !this.settingValues.AlwaysShowCommunicator;\n    this.settingValues = {\n      ...this.settingValues,\n      AlwaysShowCommunicator: value,\n    };\n    this.settings.setValue('AlwaysShowCommunicator', value);\n  }\n\n  @action\n  handleTouchEnd(event) {\n    const startPoint = this.touchStartPoint;\n    const endPoint = touchEventXY(event);\n\n    const diff = startPoint.x - endPoint.x;\n\n    if (diff >= 0) {\n      return;\n    }\n\n    const windowWidth = window.innerWidth;\n    const windowPortion = this.mediaMatcher.isMobile ? 4 : 7;\n\n    this.touchStartPoint = null;\n    this.touchMovePoint = null;\n\n    if (Math.abs(diff) >= windowWidth / windowPortion) {\n      this.close();\n    }\n    later(this, () => (this.sliding = false), ANIMATION_DELAY);\n  }\n\n  @action\n  handleTouchMove(event) {\n    this.touchMovePoint = touchEventXY(event);\n    this.sliding = true;\n  }\n\n  @action\n  handleTouchStart(event) {\n    this.touchStartPoint = touchEventXY(event);\n  }\n\n  @action\n  logout() {\n    return this.session.triggerLogout();\n  }\n\n  @action\n  setFilter(value) {\n    this.communicator.setTabFilterValue(value);\n  }\n\n  @action\n  toggleCommunicator(state = !this.tabsAreOpen) {\n    if (\n      this.currentTab ||\n      (this.settingValues.AlwaysShowCommunicator &&\n        this.showTabs &&\n        !this.state.communicatorIsOpen)\n    ) {\n      return;\n    }\n\n    if (state) {\n      this.openTabs();\n    } else {\n      this.closeTabs();\n    }\n  }\n\n  @action\n  onLigaAgentError(errorEvent) {\n    const errorMessage = errorEvent?.detail?.message;\n    if (errorMessage) {\n      this.lnFlashMessages.addMessage('error', errorMessage);\n    }\n  }\n\n  @action\n  toggleTab(tab) {\n    if (this.currentTab?.id === tab?.id && this.state.communicatorIsOpen) {\n      this.close();\n    } else {\n      this.open(tab);\n      this.state.showClickCatcher();\n    }\n  }\n\n  @action\n  updateSettingValues() {\n    this.settings.getValues(['AlwaysShowCommunicator']).then((values) => {\n      this.settingValues = values;\n    });\n  }\n\n  open(tab = null) {\n    if (!tab && !this.currentTab) {\n      tab = this.tabs[0];\n    }\n\n    if (tab) {\n      this.communicator.setCurrentTab(tab);\n    }\n\n    this.state.setCommunicatorIsOpen(true);\n  }\n\n  _close() {\n    this.state.setCommunicatorIsOpen(false);\n    if (this.currentTab) {\n      later(() => {\n        this.communicator.activeTabId = null;\n      }, ANIMATION_DELAY);\n    }\n\n    this.closeTabs();\n  }\n\n  openTabs() {\n    if (!this.tabsAreOpen && !this.isDestroyed) {\n      this.tabsAreOpen = true;\n      this.state.showClickCatcher();\n    }\n  }\n\n  closeTabs() {\n    if (this.tabsAreOpen && !this.isDestroyed) {\n      this.tabsAreOpen = false;\n      this.state.hideClickCatcher();\n    }\n  }\n\n  willDestroy() {\n    super.willDestroy(...arguments);\n    this.state.off('hide-click-catcher', this, this.close);\n    this.settings.off('settings-did-change', this, this.updateSettingValues);\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<svg\\n  viewBox=\\\"0 0 23 21\\\"\\n  fill=\\\"none\\\"\\n  xmlns=\\\"http://www.w3.org/2000/svg\\\"\\n  xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\\n>\\n  <rect width=\\\"23\\\" height=\\\"21\\\" fill=\\\"url(#pattern0_1297_2258)\\\" />\\n  <defs>\\n    <pattern\\n      id=\\\"pattern0_1297_2258\\\"\\n      patternContentUnits=\\\"objectBoundingBox\\\"\\n      width=\\\"1\\\"\\n      height=\\\"1\\\"\\n    >\\n      <use\\n        xlink:href=\\\"#image0_1297_2258\\\"\\n        transform=\\\"matrix(0.00195312 0 0 0.00213914 0 -0.047619)\\\"\\n      />\\n    </pattern>\\n    <image\\n      id=\\\"image0_1297_2258\\\"\\n      width=\\\"512\\\"\\n      height=\\\"512\\\"\\n      preserveAspectRatio=\\\"none\\\"\\n      xlink:href=\\\"data:image/png;base64,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\\\"\\n    />\\n  </defs>\\n</svg>\\n\", {\"contents\":\"<svg\\n  viewBox=\\\"0 0 23 21\\\"\\n  fill=\\\"none\\\"\\n  xmlns=\\\"http://www.w3.org/2000/svg\\\"\\n  xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\\n>\\n  <rect width=\\\"23\\\" height=\\\"21\\\" fill=\\\"url(#pattern0_1297_2258)\\\" />\\n  <defs>\\n    <pattern\\n      id=\\\"pattern0_1297_2258\\\"\\n      patternContentUnits=\\\"objectBoundingBox\\\"\\n      width=\\\"1\\\"\\n      height=\\\"1\\\"\\n    >\\n      <use\\n        xlink:href=\\\"#image0_1297_2258\\\"\\n        transform=\\\"matrix(0.00195312 0 0 0.00213914 0 -0.047619)\\\"\\n      />\\n    </pattern>\\n    <image\\n      id=\\\"image0_1297_2258\\\"\\n      width=\\\"512\\\"\\n      height=\\\"512\\\"\\n      preserveAspectRatio=\\\"none\\\"\\n      xlink:href=\\\"data:image/png;base64,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\\\"\\n    />\\n  </defs>\\n</svg>\\n\",\"moduleName\":\"ln-liga-os/components/communicator/chat-icon.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/communicator/chat-icon.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class=\\\"communicator-error-message-component\\\">\\n  <span class=\\\"close-icon\\\" {{on \\\"click\\\" this.remove passive=true}} role=\\\"button\\\"></span>\\n  {{@message}}\\n</div>\\n\", {\"contents\":\"<div ...attributes class=\\\"communicator-error-message-component\\\">\\n  <span class=\\\"close-icon\\\" {{on \\\"click\\\" this.remove passive=true}} role=\\\"button\\\"></span>\\n  {{@message}}\\n</div>\\n\",\"moduleName\":\"ln-liga-os/components/communicator/error-message.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/communicator/error-message.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\n\nexport default class ErrorMessageComponent extends Component {\n  @action\n  remove() {\n    return this.args.remove?.();\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class=\\\"communicator-filter-base-component\\\">\\n  <div class=\\\"filter-action\\\" data-value={{@value}}>\\n    {{#each @options as |option|}}\\n      <span {{on \\\"click\\\" (fn @setFilter option.value) passive=true}}\\n        class=\\\"filter-tab {{if (eq @value option.value) \\\"active\\\"}} {{option.class}}\\\"\\n        data-test-value={{option.value}}\\n        role=\\\"button\\\"\\n      >\\n        {{option.label}}\\n      </span>\\n    {{/each}}\\n  </div>\\n\\n  <hr {{css-props this.hrCssProps}}>\\n</div>\", {\"contents\":\"<div ...attributes class=\\\"communicator-filter-base-component\\\">\\n  <div class=\\\"filter-action\\\" data-value={{@value}}>\\n    {{#each @options as |option|}}\\n      <span {{on \\\"click\\\" (fn @setFilter option.value) passive=true}}\\n        class=\\\"filter-tab {{if (eq @value option.value) \\\"active\\\"}} {{option.class}}\\\"\\n        data-test-value={{option.value}}\\n        role=\\\"button\\\"\\n      >\\n        {{option.label}}\\n      </span>\\n    {{/each}}\\n  </div>\\n\\n  <hr {{css-props this.hrCssProps}}>\\n</div>\",\"moduleName\":\"ln-liga-os/components/communicator/filter.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/communicator/filter.hbs\"}});\nimport Component from '@glimmer/component';\n\nexport default class CommunicatorFilterComponent extends Component {\n  get hrCssProps() {\n    const index = (this.args.options ?? []).findIndex((filter) => {\n      return filter.value === this.args.value;\n    });\n    if (index === -1) {\n      return { width: 0 };\n    }\n    const xPercent = index * 100;\n    const widthPercent = 100 / this.args.options.length;\n    return { transform: `translateX(${xPercent}%)`, width: `${widthPercent}%` };\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<svg\\n  class=\\\"ligaagent-logo {{or @class ''}}\\\"\\n  ...attributes\\n  viewBox=\\\"0 0 171 36\\\"\\n  fill=\\\"none\\\"\\n  xmlns=\\\"http://www.w3.org/2000/svg\\\"\\n>\\n  <g clip-path=\\\"url(#clip0_440_364)\\\">\\n    <path\\n      d=\\\"M95.1199 10.0898C95.2699 9.82984 95.4899 9.33984 95.9399 9.33984H96.7199C96.9399 9.33984 97.0599 9.40984 97.0599 9.52984C97.0599 9.60984 97.0199 9.67984 96.9899 9.82984L93.2899 23.0898C93.1799 23.4298 93.1399 23.6498 93.1399 24.0198C93.1399 24.2798 93.2499 24.5398 93.5899 24.5398C94.6699 24.5398 95.6399 22.9698 96.3499 22.3398L96.9499 22.8298C95.4899 24.3598 93.3299 27.6898 90.9699 27.6898C90.4099 27.6898 89.6999 27.3898 89.6999 26.6398C89.6999 25.9998 89.9999 24.9598 90.3399 23.9098L91.3899 20.6198L91.3499 20.5098C89.4499 23.3898 85.9699 27.6798 82.9799 27.6798C80.6999 27.6798 80.1399 25.9198 80.1399 24.5798C80.1399 18.6398 87.4199 10.0498 92.2399 10.0498C93.1699 10.0498 94.0299 10.5698 94.5899 11.2798L95.1099 10.0798L95.1199 10.0898ZM84.8099 24.9198C88.4299 24.9198 93.0699 17.0398 93.0699 13.7098C93.0699 12.7798 92.1699 11.8098 91.1999 11.8098C87.1699 11.8098 82.9099 18.6498 82.9099 22.3398C82.9099 23.6098 83.3599 24.9198 84.8099 24.9198Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M111.52 26.5998C113.24 27.5298 114.43 28.1698 114.43 30.3398C114.43 34.1098 109.13 35.6398 106.1 35.6398C103.45 35.6398 98.4099 34.9698 98.4099 31.3398C98.4099 28.6098 102.18 27.0798 104.27 26.2598C103.56 25.8098 102.18 25.2498 102.18 24.2098C102.18 22.7898 104.2 21.6698 105.21 20.9998C103.19 19.8798 102.04 18.7198 102.04 16.3298C102.04 12.8198 105.81 10.0498 109.32 10.0498C111.52 10.0498 112.35 10.7198 114.25 11.2098C114.51 11.2798 114.81 11.3998 115.03 11.3998C115.48 11.3998 115.89 11.1798 116.26 10.9498C116.63 10.7298 117.01 10.4998 117.42 10.4998C117.91 10.4998 118.02 11.0598 118.02 11.5798C118.02 12.2498 117.72 12.9598 117.12 12.9598C116.34 12.9598 115.59 12.1398 114.17 11.9898C114.99 12.8898 115.37 13.9698 115.37 15.1298C115.37 19.0498 111.49 21.5498 107.82 21.5498C107.26 21.5498 106.66 21.5098 106.1 21.4398C105.76 21.5498 104.94 22.3698 104.94 22.7498C104.94 23.2398 105.28 23.3798 105.65 23.5698L111.51 26.5998H111.52ZM105.39 26.7498C104.64 27.0098 100.87 28.6498 100.87 30.7498C100.87 33.5498 104.27 34.4498 106.55 34.4498C108.34 34.4498 111.97 33.8498 111.97 31.4198C111.97 30.4098 111.11 29.6598 110.14 29.1798L105.4 26.7498H105.39ZM109.72 11.0198C106.69 10.8698 105.01 14.7898 105.01 17.2598C105.01 19.0498 105.68 20.5798 107.74 20.5798C110.73 20.5798 112.37 16.7298 112.37 14.1898C112.37 12.6198 111.66 11.0098 109.72 11.0098V11.0198Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M132.92 22.8198C130.45 25.5498 127.73 27.6798 124.44 27.6798C121.15 27.6798 119.85 25.1398 119.85 22.6398C119.85 16.6598 125.19 10.0498 130.61 10.0498C132.29 10.0498 134.27 10.6498 134.27 12.6998C134.27 17.7798 127.14 19.5398 123.14 19.9098C122.92 20.8798 122.84 21.8098 122.84 22.7898C122.84 24.6598 124.15 25.6698 125.9 25.6698C128.07 25.6698 130.27 24.2498 132.4 22.1998L132.92 22.8298V22.8198ZM131.28 12.8498C131.28 11.8798 130.72 11.2398 129.75 11.2398C126.87 11.2398 123.92 16.4698 123.33 18.9298C126.77 18.7098 131.29 16.9098 131.29 12.8398L131.28 12.8498Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M136.96 14.7502C138.38 12.9902 140.99 10.0402 143.46 10.0402C144.36 10.0402 144.73 10.6002 144.73 11.3102C144.73 11.9502 144.47 12.6502 144.32 13.1002L142.38 18.7402H142.45C144.24 16.1602 149.77 10.0002 153.43 10.0402C154.59 10.0402 154.92 10.7502 154.92 11.5702C154.92 12.1702 154.73 12.8802 154.55 13.4002L151.56 21.6202C151.22 22.5202 151 23.1102 151 23.5602C151 24.0102 151.15 24.3402 151.67 24.3402C152.68 24.3402 154.32 22.5802 154.88 21.7302L155.52 22.2202L154.18 23.8602C152.87 25.4702 151.04 27.1102 148.99 27.1102C148.02 27.1102 147.57 26.5502 147.57 25.8802C147.57 25.2802 147.68 24.6502 148.09 23.5602L151 15.6002C151.11 15.2602 151.49 14.2602 151.49 13.7302C151.49 13.2402 151.04 13.0202 150.63 13.0202C148.54 13.0202 146.41 15.5202 145.18 16.9002C143.13 19.1002 141.52 21.6802 140.51 24.5202L139.76 26.6502C139.65 26.9502 138.83 27.0602 138.38 27.0602C138.01 27.0602 137.37 26.8402 137.18 26.5702L140.84 15.5502C141.06 14.8402 141.29 14.1302 141.29 13.6802C141.29 13.3102 141.14 13.0102 140.69 13.0102C139.91 13.0102 139.2 13.6102 138.52 14.2802L137.51 15.4002L136.95 14.7302L136.96 14.7502Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M164.82 5.8999H167.81L166.28 10.6099H170.28L169.83 12.1399H165.87L162.62 22.9299C162.51 23.2699 162.4 23.7099 162.4 24.0899C162.4 24.5399 162.59 24.9099 163.15 24.9099C164.61 24.9099 166.81 22.6299 167.78 21.6599L168.3 22.2999C166.62 24.1699 163.56 27.6799 160.83 27.6799C159.75 27.6799 159.19 26.7099 159.19 25.7399C159.19 24.9899 159.49 23.9799 159.68 23.3499L163 12.1399H159.34L159.79 10.6099H163.41L164.83 5.8999H164.82Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M12.96 25.9198C7.66001 25.9198 7.06001 24.7598 7.06001 21.9998V4.7098C7.06001 2.0998 8.48001 2.0598 10.46 2.0198V1.0498C8.59001 1.0898 6.87001 1.1198 5.16001 1.1198C3.45001 1.1198 1.76001 1.0798 0.0100098 1.0498V2.0198C1.99001 2.0598 3.41001 2.0898 3.41001 4.7098V23.6498C3.41001 25.7798 1.88001 26.2598 0.0100098 26.1498V27.1198C3.30001 27.0498 6.58001 27.0498 9.91001 27.0498C13.24 27.0498 16.22 27.0498 19.4 27.1198L20.78 21.4098L19.96 21.2598C18.8 24.8798 17.31 25.9298 12.98 25.9298L12.96 25.9198Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M22.45 1.0498V2.0198C24.43 2.0598 25.85 2.0898 25.85 4.7098V23.4598C25.85 26.0698 24.43 26.1098 22.45 26.1498V27.1198C24.32 27.0798 26.07 27.0498 27.87 27.0498C29.51 27.0498 31.12 27.1198 32.91 27.1198V26.1498C30.93 26.1098 29.51 26.0798 29.51 23.4598V4.7098C29.51 2.0998 30.93 2.0598 32.91 2.0198V1.0498C31.04 1.0898 29.32 1.1198 27.61 1.1198C25.9 1.1198 24.2099 1.0798 22.4599 1.0498H22.45Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M52.48 15.7602V16.7302C54.46 16.7302 55.8801 16.7302 55.8801 19.4602V25.0302C55.3201 25.4402 53.7901 26.4902 50.84 26.4902C44.1201 26.4902 40.16 20.0302 40.16 13.5702C40.16 7.48023 43.9701 1.69023 50.5801 1.69023C54.7601 1.69023 58.3901 3.41023 59.3601 7.74023H60.18L59.55 2.51023C56.45 1.35023 53.2701 0.490234 49.9501 0.490234C42.1401 0.490234 36.05 6.28023 36.05 14.1202C36.05 19.4602 39.9 27.6802 50.39 27.6802C53.64 27.6802 57.08 26.6302 60.1 25.5502V24.9102L59.5401 24.3502V19.4602C59.5401 16.7302 60.96 16.7302 62.19 16.7302V15.7602C61.07 15.8002 59.35 15.8302 57.6301 15.8302C55.9101 15.8302 54.23 15.7902 52.48 15.7602Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M77.0601 0.000234375H76.4201C75.9001 0.860234 75.0401 1.27023 74.2501 1.64023C74.3201 1.94023 74.3201 2.24023 74.3201 2.61023C74.3201 3.73023 73.8301 5.11023 73.5401 5.97023L68.7601 19.3102C68.2701 20.6902 67.8301 22.1502 67.2301 23.4902C66.3001 25.5802 65.8901 25.8802 63.6101 26.1402V27.1102C65.1001 27.0702 66.6401 27.0402 68.1301 27.0402C69.6201 27.0402 71.0801 27.1102 72.5401 27.1102V26.1402H71.6801C70.3701 26.0702 69.1401 26.1402 69.1401 24.3802C69.1401 23.2202 69.6601 21.5002 70.1501 19.9302L70.9701 17.3202H78.6301C79.5301 15.8202 80.6201 14.3902 81.8201 13.1402L77.0501 -0.00976562L77.0601 0.000234375ZM75.1201 4.82023H75.1901L79.1901 15.8002H71.4901L75.1101 4.82023H75.1201Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n  </g>\\n  <defs>\\n    <clipPath id=\\\"clip0_440_364\\\">\\n      <rect width=\\\"170.27\\\" height=\\\"35.64\\\" fill=\\\"currentcolor\\\" />\\n    </clipPath>\\n  </defs>\\n</svg>\", {\"contents\":\"<svg\\n  class=\\\"ligaagent-logo {{or @class ''}}\\\"\\n  ...attributes\\n  viewBox=\\\"0 0 171 36\\\"\\n  fill=\\\"none\\\"\\n  xmlns=\\\"http://www.w3.org/2000/svg\\\"\\n>\\n  <g clip-path=\\\"url(#clip0_440_364)\\\">\\n    <path\\n      d=\\\"M95.1199 10.0898C95.2699 9.82984 95.4899 9.33984 95.9399 9.33984H96.7199C96.9399 9.33984 97.0599 9.40984 97.0599 9.52984C97.0599 9.60984 97.0199 9.67984 96.9899 9.82984L93.2899 23.0898C93.1799 23.4298 93.1399 23.6498 93.1399 24.0198C93.1399 24.2798 93.2499 24.5398 93.5899 24.5398C94.6699 24.5398 95.6399 22.9698 96.3499 22.3398L96.9499 22.8298C95.4899 24.3598 93.3299 27.6898 90.9699 27.6898C90.4099 27.6898 89.6999 27.3898 89.6999 26.6398C89.6999 25.9998 89.9999 24.9598 90.3399 23.9098L91.3899 20.6198L91.3499 20.5098C89.4499 23.3898 85.9699 27.6798 82.9799 27.6798C80.6999 27.6798 80.1399 25.9198 80.1399 24.5798C80.1399 18.6398 87.4199 10.0498 92.2399 10.0498C93.1699 10.0498 94.0299 10.5698 94.5899 11.2798L95.1099 10.0798L95.1199 10.0898ZM84.8099 24.9198C88.4299 24.9198 93.0699 17.0398 93.0699 13.7098C93.0699 12.7798 92.1699 11.8098 91.1999 11.8098C87.1699 11.8098 82.9099 18.6498 82.9099 22.3398C82.9099 23.6098 83.3599 24.9198 84.8099 24.9198Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M111.52 26.5998C113.24 27.5298 114.43 28.1698 114.43 30.3398C114.43 34.1098 109.13 35.6398 106.1 35.6398C103.45 35.6398 98.4099 34.9698 98.4099 31.3398C98.4099 28.6098 102.18 27.0798 104.27 26.2598C103.56 25.8098 102.18 25.2498 102.18 24.2098C102.18 22.7898 104.2 21.6698 105.21 20.9998C103.19 19.8798 102.04 18.7198 102.04 16.3298C102.04 12.8198 105.81 10.0498 109.32 10.0498C111.52 10.0498 112.35 10.7198 114.25 11.2098C114.51 11.2798 114.81 11.3998 115.03 11.3998C115.48 11.3998 115.89 11.1798 116.26 10.9498C116.63 10.7298 117.01 10.4998 117.42 10.4998C117.91 10.4998 118.02 11.0598 118.02 11.5798C118.02 12.2498 117.72 12.9598 117.12 12.9598C116.34 12.9598 115.59 12.1398 114.17 11.9898C114.99 12.8898 115.37 13.9698 115.37 15.1298C115.37 19.0498 111.49 21.5498 107.82 21.5498C107.26 21.5498 106.66 21.5098 106.1 21.4398C105.76 21.5498 104.94 22.3698 104.94 22.7498C104.94 23.2398 105.28 23.3798 105.65 23.5698L111.51 26.5998H111.52ZM105.39 26.7498C104.64 27.0098 100.87 28.6498 100.87 30.7498C100.87 33.5498 104.27 34.4498 106.55 34.4498C108.34 34.4498 111.97 33.8498 111.97 31.4198C111.97 30.4098 111.11 29.6598 110.14 29.1798L105.4 26.7498H105.39ZM109.72 11.0198C106.69 10.8698 105.01 14.7898 105.01 17.2598C105.01 19.0498 105.68 20.5798 107.74 20.5798C110.73 20.5798 112.37 16.7298 112.37 14.1898C112.37 12.6198 111.66 11.0098 109.72 11.0098V11.0198Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M132.92 22.8198C130.45 25.5498 127.73 27.6798 124.44 27.6798C121.15 27.6798 119.85 25.1398 119.85 22.6398C119.85 16.6598 125.19 10.0498 130.61 10.0498C132.29 10.0498 134.27 10.6498 134.27 12.6998C134.27 17.7798 127.14 19.5398 123.14 19.9098C122.92 20.8798 122.84 21.8098 122.84 22.7898C122.84 24.6598 124.15 25.6698 125.9 25.6698C128.07 25.6698 130.27 24.2498 132.4 22.1998L132.92 22.8298V22.8198ZM131.28 12.8498C131.28 11.8798 130.72 11.2398 129.75 11.2398C126.87 11.2398 123.92 16.4698 123.33 18.9298C126.77 18.7098 131.29 16.9098 131.29 12.8398L131.28 12.8498Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M136.96 14.7502C138.38 12.9902 140.99 10.0402 143.46 10.0402C144.36 10.0402 144.73 10.6002 144.73 11.3102C144.73 11.9502 144.47 12.6502 144.32 13.1002L142.38 18.7402H142.45C144.24 16.1602 149.77 10.0002 153.43 10.0402C154.59 10.0402 154.92 10.7502 154.92 11.5702C154.92 12.1702 154.73 12.8802 154.55 13.4002L151.56 21.6202C151.22 22.5202 151 23.1102 151 23.5602C151 24.0102 151.15 24.3402 151.67 24.3402C152.68 24.3402 154.32 22.5802 154.88 21.7302L155.52 22.2202L154.18 23.8602C152.87 25.4702 151.04 27.1102 148.99 27.1102C148.02 27.1102 147.57 26.5502 147.57 25.8802C147.57 25.2802 147.68 24.6502 148.09 23.5602L151 15.6002C151.11 15.2602 151.49 14.2602 151.49 13.7302C151.49 13.2402 151.04 13.0202 150.63 13.0202C148.54 13.0202 146.41 15.5202 145.18 16.9002C143.13 19.1002 141.52 21.6802 140.51 24.5202L139.76 26.6502C139.65 26.9502 138.83 27.0602 138.38 27.0602C138.01 27.0602 137.37 26.8402 137.18 26.5702L140.84 15.5502C141.06 14.8402 141.29 14.1302 141.29 13.6802C141.29 13.3102 141.14 13.0102 140.69 13.0102C139.91 13.0102 139.2 13.6102 138.52 14.2802L137.51 15.4002L136.95 14.7302L136.96 14.7502Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M164.82 5.8999H167.81L166.28 10.6099H170.28L169.83 12.1399H165.87L162.62 22.9299C162.51 23.2699 162.4 23.7099 162.4 24.0899C162.4 24.5399 162.59 24.9099 163.15 24.9099C164.61 24.9099 166.81 22.6299 167.78 21.6599L168.3 22.2999C166.62 24.1699 163.56 27.6799 160.83 27.6799C159.75 27.6799 159.19 26.7099 159.19 25.7399C159.19 24.9899 159.49 23.9799 159.68 23.3499L163 12.1399H159.34L159.79 10.6099H163.41L164.83 5.8999H164.82Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M12.96 25.9198C7.66001 25.9198 7.06001 24.7598 7.06001 21.9998V4.7098C7.06001 2.0998 8.48001 2.0598 10.46 2.0198V1.0498C8.59001 1.0898 6.87001 1.1198 5.16001 1.1198C3.45001 1.1198 1.76001 1.0798 0.0100098 1.0498V2.0198C1.99001 2.0598 3.41001 2.0898 3.41001 4.7098V23.6498C3.41001 25.7798 1.88001 26.2598 0.0100098 26.1498V27.1198C3.30001 27.0498 6.58001 27.0498 9.91001 27.0498C13.24 27.0498 16.22 27.0498 19.4 27.1198L20.78 21.4098L19.96 21.2598C18.8 24.8798 17.31 25.9298 12.98 25.9298L12.96 25.9198Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M22.45 1.0498V2.0198C24.43 2.0598 25.85 2.0898 25.85 4.7098V23.4598C25.85 26.0698 24.43 26.1098 22.45 26.1498V27.1198C24.32 27.0798 26.07 27.0498 27.87 27.0498C29.51 27.0498 31.12 27.1198 32.91 27.1198V26.1498C30.93 26.1098 29.51 26.0798 29.51 23.4598V4.7098C29.51 2.0998 30.93 2.0598 32.91 2.0198V1.0498C31.04 1.0898 29.32 1.1198 27.61 1.1198C25.9 1.1198 24.2099 1.0798 22.4599 1.0498H22.45Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M52.48 15.7602V16.7302C54.46 16.7302 55.8801 16.7302 55.8801 19.4602V25.0302C55.3201 25.4402 53.7901 26.4902 50.84 26.4902C44.1201 26.4902 40.16 20.0302 40.16 13.5702C40.16 7.48023 43.9701 1.69023 50.5801 1.69023C54.7601 1.69023 58.3901 3.41023 59.3601 7.74023H60.18L59.55 2.51023C56.45 1.35023 53.2701 0.490234 49.9501 0.490234C42.1401 0.490234 36.05 6.28023 36.05 14.1202C36.05 19.4602 39.9 27.6802 50.39 27.6802C53.64 27.6802 57.08 26.6302 60.1 25.5502V24.9102L59.5401 24.3502V19.4602C59.5401 16.7302 60.96 16.7302 62.19 16.7302V15.7602C61.07 15.8002 59.35 15.8302 57.6301 15.8302C55.9101 15.8302 54.23 15.7902 52.48 15.7602Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n    <path\\n      d=\\\"M77.0601 0.000234375H76.4201C75.9001 0.860234 75.0401 1.27023 74.2501 1.64023C74.3201 1.94023 74.3201 2.24023 74.3201 2.61023C74.3201 3.73023 73.8301 5.11023 73.5401 5.97023L68.7601 19.3102C68.2701 20.6902 67.8301 22.1502 67.2301 23.4902C66.3001 25.5802 65.8901 25.8802 63.6101 26.1402V27.1102C65.1001 27.0702 66.6401 27.0402 68.1301 27.0402C69.6201 27.0402 71.0801 27.1102 72.5401 27.1102V26.1402H71.6801C70.3701 26.0702 69.1401 26.1402 69.1401 24.3802C69.1401 23.2202 69.6601 21.5002 70.1501 19.9302L70.9701 17.3202H78.6301C79.5301 15.8202 80.6201 14.3902 81.8201 13.1402L77.0501 -0.00976562L77.0601 0.000234375ZM75.1201 4.82023H75.1901L79.1901 15.8002H71.4901L75.1101 4.82023H75.1201Z\\\"\\n      fill=\\\"currentcolor\\\"\\n    />\\n  </g>\\n  <defs>\\n    <clipPath id=\\\"clip0_440_364\\\">\\n      <rect width=\\\"170.27\\\" height=\\\"35.64\\\" fill=\\\"currentcolor\\\" />\\n    </clipPath>\\n  </defs>\\n</svg>\",\"moduleName\":\"ln-liga-os/components/communicator/ligaagent-logo.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/communicator/ligaagent-logo.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class={{this.className}}>\\n  <ContactMenuHandle @userId={{@notification.sender_id}}>\\n    <ResizedImage\\n      @placeholder=\\\"assets/images/user.svg\\\"\\n      @size=\\\"40x40\\\"\\n      @src={{@notification.sender.picture}}\\n      class=\\\"user-image round\\\"\\n    />\\n  </ContactMenuHandle>\\n\\n  <div\\n    class=\\\"notification-content\\\"\\n    {{on \\\"click\\\" this.openNotification passive=true}}\\n    role=\\\"button\\\"\\n  >\\n    <div class=\\\"message\\\">{{sanitize\\n        @notification.message\\n        allowedTags=\\\"strong\\\"\\n      }}</div>\\n    <span class=\\\"date\\\">{{date-time @notification.datetime relative=true}}</span>\\n  </div>\\n\\n  <div class=\\\"options\\\">\\n    <span\\n      {{on\\n        \\\"click\\\"\\n        (fn this.clickOption \\\"toggleRead\\\" @notification)\\n        passive=true\\n      }}\\n      class=\\\"option read {{if @notification.read_state '' 'active'}}\\\"\\n      role=\\\"button\\\"\\n      title={{t \\\"mark-as-read\\\"}}\\n    />\\n    <span\\n      {{on\\n        \\\"click\\\"\\n        (fn this.clickOption \\\"toggleFlag\\\" @notification)\\n        passive=true\\n      }}\\n      class=\\\"option flag {{if @notification.flagged 'active'}}\\\"\\n      role=\\\"button\\\"\\n      title={{t \\\"flag\\\"}}\\n    />\\n    <span\\n      {{on\\n        \\\"click\\\"\\n        (fn this.clickOption \\\"toggleArchive\\\" @notification)\\n        passive=true\\n      }}\\n      class=\\\"option archive {{if @notification.archived 'active'}}\\\"\\n      role=\\\"button\\\"\\n      title={{t (if this.isArchiveFilter \\\"move-to-inbox\\\" \\\"archive\\\")}}\\n    />\\n  </div>\\n</div>\", {\"contents\":\"<div ...attributes class={{this.className}}>\\n  <ContactMenuHandle @userId={{@notification.sender_id}}>\\n    <ResizedImage\\n      @placeholder=\\\"assets/images/user.svg\\\"\\n      @size=\\\"40x40\\\"\\n      @src={{@notification.sender.picture}}\\n      class=\\\"user-image round\\\"\\n    />\\n  </ContactMenuHandle>\\n\\n  <div\\n    class=\\\"notification-content\\\"\\n    {{on \\\"click\\\" this.openNotification passive=true}}\\n    role=\\\"button\\\"\\n  >\\n    <div class=\\\"message\\\">{{sanitize\\n        @notification.message\\n        allowedTags=\\\"strong\\\"\\n      }}</div>\\n    <span class=\\\"date\\\">{{date-time @notification.datetime relative=true}}</span>\\n  </div>\\n\\n  <div class=\\\"options\\\">\\n    <span\\n      {{on\\n        \\\"click\\\"\\n        (fn this.clickOption \\\"toggleRead\\\" @notification)\\n        passive=true\\n      }}\\n      class=\\\"option read {{if @notification.read_state '' 'active'}}\\\"\\n      role=\\\"button\\\"\\n      title={{t \\\"mark-as-read\\\"}}\\n    />\\n    <span\\n      {{on\\n        \\\"click\\\"\\n        (fn this.clickOption \\\"toggleFlag\\\" @notification)\\n        passive=true\\n      }}\\n      class=\\\"option flag {{if @notification.flagged 'active'}}\\\"\\n      role=\\\"button\\\"\\n      title={{t \\\"flag\\\"}}\\n    />\\n    <span\\n      {{on\\n        \\\"click\\\"\\n        (fn this.clickOption \\\"toggleArchive\\\" @notification)\\n        passive=true\\n      }}\\n      class=\\\"option archive {{if @notification.archived 'active'}}\\\"\\n      role=\\\"button\\\"\\n      title={{t (if this.isArchiveFilter \\\"move-to-inbox\\\" \\\"archive\\\")}}\\n    />\\n  </div>\\n</div>\",\"moduleName\":\"ln-liga-os/components/communicator/notification-item.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/communicator/notification-item.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\n\nexport default class CommunicatorNotificationItemComponent extends Component {\n  get className() {\n    const result = ['communicator-notification-item-component', 'list-item'];\n    if (this.args.notification.context_type) {\n      result.push('has-action');\n    }\n    if (this.args.notification.read_state) {\n      result.push('is-read');\n    }\n    if (this.args.notification.flagged) {\n      result.push('is-flagged');\n    }\n    if (this.args.notification.archived) {\n      result.push('is-archived');\n    }\n    if (this.args.notification.sender_id) {\n      result.push('is-user');\n    }\n    return result.join(' ');\n  }\n\n  get isArchiveFilter() {\n    return this.args.filter === 'archive';\n  }\n\n  @action\n  clickOption(option, notification, event) {\n    this.args.onOptionClick?.(option, notification, event);\n  }\n\n  @action\n  openNotification() {\n    return this.args.openNotification?.(this.args.notification);\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div\\n  ...attributes\\n  class={{this.className}}\\n  {{did-insert this.loadMore}}\\n  {{did-update this.resetState @filter}}\\n>\\n  <div class=\\\"search\\\">\\n    <SearchInput @value={{this.searchText}} @onChange={{this.setSearchText}} />\\n  </div>\\n\\n  <div class=\\\"status-message\\\">\\n    {{#if this.isLoading}}\\n      <LoadingSpinner data-test-element=\\\"loading-spinner\\\" />\\n    {{else}}\\n      {{#if (eq this.formattedAbsences.length 0)}}\\n        <div class=\\\"list-message\\\">[ {{t \\\"no-entries\\\"}} ]</div>\\n      {{/if}}\\n    {{/if}}\\n  </div>\\n\\n  <div class=\\\"list\\\">\\n    <ContactList::Collection\\n      @items={{this.formattedAbsences}}\\n      @loadNextPage={{this.loadMore}}\\n      class=\\\"front\\\"\\n    />\\n  </div>\\n</div>\", {\"contents\":\"<div\\n  ...attributes\\n  class={{this.className}}\\n  {{did-insert this.loadMore}}\\n  {{did-update this.resetState @filter}}\\n>\\n  <div class=\\\"search\\\">\\n    <SearchInput @value={{this.searchText}} @onChange={{this.setSearchText}} />\\n  </div>\\n\\n  <div class=\\\"status-message\\\">\\n    {{#if this.isLoading}}\\n      <LoadingSpinner data-test-element=\\\"loading-spinner\\\" />\\n    {{else}}\\n      {{#if (eq this.formattedAbsences.length 0)}}\\n        <div class=\\\"list-message\\\">[ {{t \\\"no-entries\\\"}} ]</div>\\n      {{/if}}\\n    {{/if}}\\n  </div>\\n\\n  <div class=\\\"list\\\">\\n    <ContactList::Collection\\n      @items={{this.formattedAbsences}}\\n      @loadNextPage={{this.loadMore}}\\n      class=\\\"front\\\"\\n    />\\n  </div>\\n</div>\",\"moduleName\":\"ln-liga-os/components/communicator/tab-absences.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/communicator/tab-absences.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport moment from 'moment';\n\nexport default class CommunicatorTabAbsencesComponent extends Component {\n  @service api;\n  @service intl;\n\n  @tracked absences = [];\n\n  @tracked filter = 'all';\n\n  @tracked isContentVisible = false;\n\n  @tracked isLoading = null;\n\n  @tracked offset = 0;\n\n  @tracked perPage = 50;\n\n  @tracked requestedForOffset = null;\n\n  @tracked searchText = '';\n\n  get className() {\n    const result = [\n      'communicator-tab-base-component',\n      'communicator-tab-absences-component',\n    ];\n    if (this.isLoading) {\n      result.push('is-loading');\n    }\n    if (this.isContentVisible) {\n      result.push('is-content-visible');\n    }\n    return result.join(' ');\n  }\n\n  get formattedAbsences() {\n    let formattedAbsences = [\n      {\n        type: 'subhead',\n        text: this.intl.t('today'),\n      },\n      {\n        type: 'subhead',\n        text: this.intl.t('upcoming'),\n      },\n    ];\n\n    let todayAbsences = false;\n\n    (this.absences || []).forEach((absence) => {\n      const start = moment(absence.date_from).format('DD-MM');\n      const end = moment(absence.date_till).format('DD-MM');\n      let text = start;\n\n      if (start !== end) {\n        text += ` ${this.intl.t('to')} ${end}`;\n      }\n\n      if (absence.reason) {\n        text += ` | ${absence.reason}`;\n      }\n\n      const formatedAbsence = {\n        detailsOpen: false,\n        type: 'absence',\n        contact: absence,\n        reason: text,\n        isIll: absence.type === 'Sickness',\n        isHoliday: absence.type === 'Holiday',\n      };\n\n      // Sorting absences into Today/Upcoming\n      if (moment(absence.date_from).isBefore(moment().add(1, 'days'), 'day')) {\n        const upcomingIndex = formattedAbsences.findIndex(\n          ({ text }) => text === this.intl.t('upcoming')\n        );\n        formattedAbsences.splice(upcomingIndex, 0, formatedAbsence);\n        todayAbsences = true;\n      } else {\n        formattedAbsences.push(formatedAbsence);\n      }\n    });\n\n    // Removing trailing 'Upcoming' in case there are 0 upcoming absences.\n    if (formattedAbsences[formattedAbsences.length - 1].type === 'subhead') {\n      formattedAbsences.pop();\n    }\n\n    // Remove 'Today' in case there are 0 absences today.\n    if (!todayAbsences) {\n      formattedAbsences.shift();\n    }\n\n    // Removing default Today/Upcoming objects from array in case there are no absences at all.\n    if (formattedAbsences.length === 1) {\n      formattedAbsences = [];\n    }\n\n    return formattedAbsences;\n  }\n\n  @action\n  loadMore() {\n    if (this.isLoading || this.requestedForOffset === this.offset) {\n      return;\n    }\n\n    this.isLoading = true;\n\n    const query = {\n      paging_limit: this.perPage,\n      paging_offset: this.offset,\n    };\n    if (this.args.filter && this.args.filter !== 'all') {\n      // Turn filter into an array because `/absences` can receive multiple type params.\n      query.type = this.args.filter.split(',');\n    }\n\n    if (this.searchText) {\n      query.search_text = this.searchText;\n    }\n\n    this.api\n      .read('myliga', ['communicator/absences', query])\n      .then((response) => {\n        if (this.isDestroying) {\n          return;\n        }\n\n        this.absences = [...this.absences, ...response.result];\n        this.requestedForOffset = this.offset;\n        this.offset += response.meta.count;\n        this.isContentVisible = true;\n      })\n      .finally(() => {\n        this.isLoading = false;\n      });\n  }\n\n  @action\n  resetState() {\n    this.absences = [];\n    this.offset = 0;\n    this.requestedForOffset = null;\n    this.loadMore();\n  }\n\n  @action\n  setSearchText(value) {\n    this.searchText = value;\n    this.resetState();\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class=\\\"communicator-tab-base-component communicator-tab-applications-component is-content-visible\\\">\\n  {{#if this.state.applicationsError}}\\n    <Communicator::ErrorMessage\\n      @message={{this.state.applicationsError}}\\n      @remove={{this.removeErrorMessage}}\\n    />\\n  {{/if}}\\n\\n  {{#each this.navigation.navigations as |item|}}\\n    <NavigationItem\\n      @item={{item}}\\n      data-test-element=\\\"navigation-item\\\"\\n      {{on \\\"click\\\" (fn this.openItem item) passive=true}}\\n    />\\n  {{/each}}\\n</div>\", {\"contents\":\"<div ...attributes class=\\\"communicator-tab-base-component communicator-tab-applications-component is-content-visible\\\">\\n  {{#if this.state.applicationsError}}\\n    <Communicator::ErrorMessage\\n      @message={{this.state.applicationsError}}\\n      @remove={{this.removeErrorMessage}}\\n    />\\n  {{/if}}\\n\\n  {{#each this.navigation.navigations as |item|}}\\n    <NavigationItem\\n      @item={{item}}\\n      data-test-element=\\\"navigation-item\\\"\\n      {{on \\\"click\\\" (fn this.openItem item) passive=true}}\\n    />\\n  {{/each}}\\n</div>\",\"moduleName\":\"ln-liga-os/components/communicator/tab-applications.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/communicator/tab-applications.hbs\"}});\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\n\nexport default class CommunicatorTabApplicationComponent extends Component {\n  @service navigation;\n  @service state;\n\n  @action\n  openItem({ url }) {\n    this.navigation.openUrl(url);\n    if (!this.navigation.belongsToExternalApp(url)) {\n      this.args.close?.();\n    }\n  }\n\n  @action\n  removeErrorMessage() {\n    this.state.applicationsError = null;\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div\\n  ...attributes\\n  class={{this.className}}\\n  {{did-insert this.loadMore}}\\n  {{did-update this.resetState @filter}}\\n>\\n  <div class=\\\"search\\\">\\n    <SearchInput @value={{this.searchText}} @onChange={{this.setSearchText}} />\\n  </div>\\n\\n  <div class=\\\"status-message\\\">\\n    {{#if this.isLoading}}\\n      <LoadingSpinner data-test-element=\\\"loading-spinner\\\" />\\n    {{/if}}\\n  </div>\\n\\n  <div class=\\\"list\\\">\\n    <ContactList::Collection\\n      class=\\\"front\\\"\\n      @items={{this.birthdays}}\\n      @loadNextPage={{this.loadMore}}\\n    />\\n  </div>\\n</div>\", {\"contents\":\"<div\\n  ...attributes\\n  class={{this.className}}\\n  {{did-insert this.loadMore}}\\n  {{did-update this.resetState @filter}}\\n>\\n  <div class=\\\"search\\\">\\n    <SearchInput @value={{this.searchText}} @onChange={{this.setSearchText}} />\\n  </div>\\n\\n  <div class=\\\"status-message\\\">\\n    {{#if this.isLoading}}\\n      <LoadingSpinner data-test-element=\\\"loading-spinner\\\" />\\n    {{/if}}\\n  </div>\\n\\n  <div class=\\\"list\\\">\\n    <ContactList::Collection\\n      class=\\\"front\\\"\\n      @items={{this.birthdays}}\\n      @loadNextPage={{this.loadMore}}\\n    />\\n  </div>\\n</div>\",\"moduleName\":\"ln-liga-os/components/communicator/tab-birthdays.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/communicator/tab-birthdays.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\nimport moment from 'moment';\n\nexport default class CommunicatorTabBirthdaysComponent extends Component {\n  @service api;\n  @service intl;\n\n  @tracked birthdays = [];\n\n  @tracked birthdaysLoaded = false;\n\n  @tracked filter = null;\n\n  @tracked isContentVisible = false;\n\n  @tracked isLoading = false;\n\n  @tracked lastSubhead = null;\n\n  @tracked offset = 0;\n\n  @tracked perPage = 50;\n\n  @tracked searchText = '';\n\n  @tracked showBirthday = true;\n\n  get className() {\n    const result = [\n      'communicator-tab-base-component',\n      'communicator-tab-birthdays-component',\n    ];\n    if (this.isLoading) {\n      result.push('is-loading');\n    }\n    if (this.isContentVisible) {\n      result.push('is-content-visible');\n    }\n    return result.join(' ');\n  }\n\n  get filterQuery() {\n    const fromDate = moment();\n    let tillDate = moment().add(14, 'days');\n\n    if (this.args.filter === 'today') {\n      tillDate = fromDate;\n    } else if (this.args.filter === 'coming') {\n      fromDate.add(1, 'days');\n    }\n\n    return {\n      active: true,\n      birth_date_from: fromDate.format('MM-DD'),\n      birth_date_till: tillDate.format('MM-DD'),\n      search_text: this.searchText,\n      sort: 'birth_date',\n    };\n  }\n\n  @action\n  loadMore() {\n    if (this.isLoading || this.birthdaysLoaded) {\n      return;\n    }\n\n    this.isLoading = true;\n\n    this.api\n      .read('myliga', ['liga3000_contacts', this.filterQuery])\n      .then((response) => {\n        if (this.isDestroyed) {\n          return;\n        }\n\n        const birthdays = this.parseBirthdays(response.result);\n        if (birthdays.length === 0) {\n          birthdays.push({\n            type: 'no_results',\n          });\n        }\n        this.birthdays = [...this.birthdays, ...birthdays];\n        this.isContentVisible = true;\n        this.birthdaysLoaded = true;\n      })\n      .finally(() => {\n        this.isLoading = false;\n      });\n  }\n\n  parseBirthdays(birthdays) {\n    const parsedBirthdays = [];\n    const today = moment().format('DD-MM');\n\n    birthdays.forEach((birthday) => {\n      let subhead = this.intl.t('upcoming');\n      let hasBirthday = false;\n      const birthdayFormated = moment(birthday.birth_date).format('DD-MM');\n\n      if (birthdayFormated === today) {\n        hasBirthday = true;\n        subhead = this.intl.t('today');\n      }\n\n      if (subhead !== this.lastSubhead) {\n        parsedBirthdays.push({\n          type: 'subhead',\n          text: subhead,\n        });\n\n        this.lastSubhead = subhead;\n      }\n\n      parsedBirthdays.push({\n        birthday: birthdayFormated,\n        contact: birthday,\n        detailsOpen: false,\n        hasBirthday,\n        type: 'contact',\n      });\n    });\n\n    return parsedBirthdays;\n  }\n\n  @action\n  setSearchText(value) {\n    this.searchText = value;\n    this.resetState();\n  }\n\n  @action\n  resetState() {\n    this.birthdays = [];\n    this.birthdaysLoaded = false;\n    this.lastSubhead = null;\n    this.loadMore();\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div\\n  ...attributes\\n  class={{this.className}}\\n  {{did-insert this.resetState}}\\n  {{did-update this.resetState @filter}}\\n>\\n  <div class=\\\"search\\\">\\n    <SearchInput @value={{this.searchText}} @onChange={{this.searchInputChanged}} />\\n  </div>\\n\\n  <div class=\\\"status-message\\\">\\n    {{#if this.isLoading}}\\n      <LoadingSpinner data-test-element=\\\"loading-spinner\\\" />\\n    {{/if}}\\n  </div>\\n\\n  <div class=\\\"list {{if this.editMode \\\"edit-mode\\\"}}\\\">\\n    <ContactList::Collection\\n      @addMailingList={{this.addMailingList}}\\n      @canEditList={{this.canEditList}}\\n      @items={{this.contacts}}\\n      @loadNextPage={{this.loadMore}}\\n      @onClientClick={{this.toggleClient}}\\n      @onMailinglistEdit={{this.toggleMailingList}}\\n      @onProjectClick={{this.toggleProject}}\\n      class=\\\"front\\\"\\n    />\\n\\n    {{#if (and (not this.isLoading) (eq this.contacts.length 0))}}\\n      <ContactList::ItemNoResults data-test-element=\\\"no-results\\\" />\\n    {{/if}}\\n\\n    <div class=\\\"back edit-mailing-list\\\">\\n      {{#if this.canEditList}}\\n        {{!-- template-lint-disable require-input-label --}}\\n        <Input @value={{this.activeList.name}} placeholder=\\\"Name\\\" />\\n        <Input @value={{this.activeList.description}} placeholder=\\\"Description\\\" />\\n        <Input @value={{this.activeList.email}} placeholder=\\\"E-Mail\\\" />\\n        {{!-- template-lint-enable require-input-label --}}\\n\\n        <Form::Button class=\\\"button\\\" @onClick={{this.toggleMailingList}}>\\n          {{t \\\"cancel\\\"}}\\n        </Form::Button>\\n\\n        <Form::Button class=\\\"button\\\" @onClick={{this.saveMailingList}}>\\n          {{t \\\"save\\\"}}\\n        </Form::Button>\\n\\n        {{#if this.activeList.id}}\\n          <Form::Button\\n            @icon=\\\"delete\\\"\\n            @onClick={{this.deleteMailingList}}\\n            class=\\\"button delete-list\\\"\\n          />\\n        {{/if}}\\n      {{/if}}\\n    </div>\\n  </div>\\n</div>\", {\"contents\":\"<div\\n  ...attributes\\n  class={{this.className}}\\n  {{did-insert this.resetState}}\\n  {{did-update this.resetState @filter}}\\n>\\n  <div class=\\\"search\\\">\\n    <SearchInput @value={{this.searchText}} @onChange={{this.searchInputChanged}} />\\n  </div>\\n\\n  <div class=\\\"status-message\\\">\\n    {{#if this.isLoading}}\\n      <LoadingSpinner data-test-element=\\\"loading-spinner\\\" />\\n    {{/if}}\\n  </div>\\n\\n  <div class=\\\"list {{if this.editMode \\\"edit-mode\\\"}}\\\">\\n    <ContactList::Collection\\n      @addMailingList={{this.addMailingList}}\\n      @canEditList={{this.canEditList}}\\n      @items={{this.contacts}}\\n      @loadNextPage={{this.loadMore}}\\n      @onClientClick={{this.toggleClient}}\\n      @onMailinglistEdit={{this.toggleMailingList}}\\n      @onProjectClick={{this.toggleProject}}\\n      class=\\\"front\\\"\\n    />\\n\\n    {{#if (and (not this.isLoading) (eq this.contacts.length 0))}}\\n      <ContactList::ItemNoResults data-test-element=\\\"no-results\\\" />\\n    {{/if}}\\n\\n    <div class=\\\"back edit-mailing-list\\\">\\n      {{#if this.canEditList}}\\n        {{!-- template-lint-disable require-input-label --}}\\n        <Input @value={{this.activeList.name}} placeholder=\\\"Name\\\" />\\n        <Input @value={{this.activeList.description}} placeholder=\\\"Description\\\" />\\n        <Input @value={{this.activeList.email}} placeholder=\\\"E-Mail\\\" />\\n        {{!-- template-lint-enable require-input-label --}}\\n\\n        <Form::Button class=\\\"button\\\" @onClick={{this.toggleMailingList}}>\\n          {{t \\\"cancel\\\"}}\\n        </Form::Button>\\n\\n        <Form::Button class=\\\"button\\\" @onClick={{this.saveMailingList}}>\\n          {{t \\\"save\\\"}}\\n        </Form::Button>\\n\\n        {{#if this.activeList.id}}\\n          <Form::Button\\n            @icon=\\\"delete\\\"\\n            @onClick={{this.deleteMailingList}}\\n            class=\\\"button delete-list\\\"\\n          />\\n        {{/if}}\\n      {{/if}}\\n    </div>\\n  </div>\\n</div>\",\"moduleName\":\"ln-liga-os/components/communicator/tab-contacts.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/communicator/tab-contacts.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action, set } from '@ember/object';\nimport RSVP from 'rsvp';\nimport { inject as service } from '@ember/service';\n\n/**\n * Tab displaying a list of contacts, projects or mailing lists\n *\n * @todo Rework this. Probably split it into different components.\n *\n * Currently it can display one of three completely different lists\n * based on filter argument. We don't need all this functionality in\n * one component. Split it into different components each of which is\n * responsible for its own list.\n */\nexport default class CommunicatorTabContactsComponent extends Component {\n  @service api;\n  @service lnFlashMessages;\n  @service rights;\n\n  @tracked activeList = null;\n\n  @tracked activeListCopy = null;\n\n  @tracked canEditList = false;\n\n  @tracked clientsLoaded = false;\n\n  @tracked contacts = [];\n\n  @tracked editMode = false;\n\n  @tracked isContentVisible = false;\n\n  @tracked isLoading = false;\n\n  @tracked listsLoaded = false;\n\n  @tracked offset = 0;\n\n  @tracked perPage = 50;\n\n  @tracked requestedForOffset;\n\n  @tracked searchText = '';\n\n  @tracked showBirthday = false;\n\n  unformattedContacts = [];\n\n  constructor(...args) {\n    super(...args);\n    this.initRights();\n  }\n\n  get className() {\n    const result = [\n      'communicator-tab-base-component',\n      'communicator-tab-contacts-component',\n    ];\n    if (this.isLoading) {\n      result.push('is-loading');\n    }\n    if (this.isContentVisible) {\n      result.push('is-content-visible');\n    }\n    return result.join(' ');\n  }\n\n  get allExpanded() {\n    return !!this.searchText;\n  }\n\n  @action\n  resetState() {\n    this.clientsLoaded = false;\n    this.contacts = [];\n    this.unformattedContacts = [];\n    this.editMode = false;\n    this.listsLoaded = false;\n    this.offset = 0;\n    this.requestedForOffset = null;\n    this.loadMore();\n  }\n\n  @action\n  linkTo(to) {\n    window.location = to;\n  }\n\n  @action\n  openProjectMail(project) {\n    const query = {\n      project: project.id,\n      show_in_communicator_contact_list: true,\n    };\n\n    this.api.read('myliga', ['liga3000_contacts', query]).then((response) => {\n      const addresses = (response.result || []).map((contact) => {\n        return contact.email;\n      });\n\n      window.open(`mailto:${addresses.join(',')}`);\n    });\n  }\n\n  @action\n  addMailingList() {\n    const newList = {\n      id: null,\n      version: null,\n      name: null,\n      description: null,\n      email: null,\n    };\n    this.activeList = newList;\n    this.editMode = true;\n  }\n\n  @action\n  deleteMailingList() {\n    const list = this.activeList;\n\n    this.api.delete('myliga', ['email_distributors', list.id]).then(() => {\n      const listToRemove = this.contacts.find((listObject) => {\n        return listObject.list === list;\n      });\n\n      this.contacts = this.contacts.filter((item) => item !== listToRemove);\n      this.editMode = false;\n    });\n  }\n\n  @action\n  loadMore() {\n    if (this.isLoading || this.requestedForOffset === this.offset) {\n      return;\n    }\n\n    if (this.args.filter === 'all') {\n      return this.loadAll();\n    } else if (this.args.filter === 'projects') {\n      return this.loadProjects();\n    } else if (this.args.filter === 'lists') {\n      return this.loadLists();\n    }\n  }\n\n  @action\n  saveMailingList() {\n    let promise = RSVP.reject();\n    if (!this.activeList?.id) {\n      promise = this.api\n        .create('myliga', 'email_distributors', this.activeList)\n        .then((list) => {\n          const addChild = this.contacts.find(\n            ({ type }) => type === 'add_list'\n          );\n          const position = this.contacts.indexOf(addChild);\n\n          this.contacts = [\n            ...this.contacts.slice(0, position),\n            { isOpen: false, list, type: 'mailing_list' },\n            ...this.contacts.slice(position),\n          ];\n        });\n    } else {\n      const listId = this.activeList.id;\n      promise = this.api.update(\n        'myliga',\n        ['email_distributors', listId],\n        this.activeList\n      );\n    }\n\n    promise.then((/* resp */) => {\n      this.editMode = false;\n    });\n  }\n\n  @action\n  searchInputChanged(value) {\n    this.searchText = value;\n    this.resetState();\n  }\n\n  @action\n  toggleClient(client) {\n    set(client, 'isOpen', !client.isOpen);\n    const { isOpen } = client;\n    const contacts = this.contacts.filter((contact) => {\n      if (\n        !isOpen &&\n        contact.type === 'project' &&\n        contact.project.contact_group_id === client.client.id\n      ) {\n        set(contact, 'isOpen', false);\n        return false;\n      }\n\n      if (isOpen === false && contact.type === 'contact') {\n        return false;\n      }\n\n      return true;\n    });\n\n    this.contacts = contacts;\n\n    if (isOpen) {\n      this.insertChilds(client, 'projects');\n    }\n  }\n\n  @action\n  toggleMailingList(list) {\n    this.editMode = !this.editMode;\n\n    if (list) {\n      this.activeList = list.list;\n      this.activeListCopy = { ...list.list };\n    } else if (this.activeList) {\n      const prevList = this.activeList;\n      const listCopy = this.activeListCopy;\n\n      for (const prop in prevList) {\n        set(prevList, prop, listCopy[prop]);\n      }\n    }\n  }\n\n  @action\n  toggleProject(project) {\n    set(project, 'isOpen', !project.isOpen);\n    const { isOpen } = project;\n    const contacts = this.contacts\n      .map((contact) => {\n        if (contact.type === 'client') {\n          return contact;\n        }\n\n        if (contact !== project) {\n          set(contact, 'isOpen', false);\n        }\n\n        return contact;\n      })\n      .filter((contact) => {\n        return contact.type === 'client' || contact.type === 'project';\n      });\n\n    this.contacts = contacts;\n\n    if (isOpen) {\n      this.insertChilds(project, 'contacts');\n    }\n  }\n\n  initRights() {\n    this.rights.can('UPDATE', 'EmailDistributor').then((permission) => {\n      this.canEditList = permission;\n    });\n  }\n\n  addSubhead(to, name) {\n    to.push({\n      type: 'subhead',\n      text: name,\n    });\n  }\n\n  loadAll() {\n    const query = {\n      paging_offset: this.offset,\n      paging_limit: this.perPage,\n      search_text: this.searchText,\n      show_in_communicator_contact_list: true,\n      active: true,\n    };\n\n    this.isLoading = true;\n    this.api\n      .read('myliga', ['liga3000_contacts', query])\n      .then((response) => {\n        if (this.isDestroying) {\n          return;\n        }\n\n        this.requestedForOffset = this.offset;\n        this.offset += response.meta.count;\n        this.unformattedContacts = [\n          ...this.unformattedContacts,\n          ...response.result,\n        ];\n        this.contacts = formatContacts(this.unformattedContacts);\n      })\n      .finally(() => {\n        if (this.isDestroying) {\n          return;\n        }\n        this.isContentVisible = true;\n        this.isLoading = false;\n      });\n  }\n\n  loadProjects() {\n    if (this.clientsLoaded) {\n      return;\n    }\n\n    this.isLoading = true;\n\n    const query = {\n      projects_search_text: this.searchText,\n      active_project: true,\n    };\n    const maxExpanded = 20;\n\n    this.api\n      .read('myliga', ['contact_groups', query])\n      .then((response) => {\n        if (this.isDestroying) {\n          return;\n        }\n\n        let counter = 0;\n        const clients = (response.result || []).map((group) => {\n          counter++;\n          return {\n            client: group,\n            isOpen: this.allExpanded && counter <= maxExpanded,\n            projects: null,\n            type: 'client',\n          };\n        });\n\n        if (this.allExpanded) {\n          const groupsToExpand = (clients || []).slice(0, maxExpanded);\n          const groupIds = groupsToExpand.map(({ client }) => client.id);\n\n          this.loadProjectsForGroups(groupIds).then((projects) => {\n            groupsToExpand.forEach((group) => {\n              const projectsForGroup = projects.result.filter(\n                (project) => project.contact_group_id === group.client.id\n              );\n\n              group.projects = projectsForGroup.map((project) => {\n                return {\n                  contacts: null,\n                  isOpen: false,\n                  project,\n                  type: 'project',\n                };\n              });\n\n              this.insertChilds(group, 'projects');\n            });\n          });\n        }\n\n        this.requestedForOffset = this.offset;\n        this.offset += response.meta.count;\n\n        this.contacts = clients;\n        this.clientsLoaded = true;\n      })\n      .catch((error) => console.error(error.stack || error))\n      .finally(() => {\n        if (this.isDestroying) {\n          return;\n        }\n        this.isContentVisible = true;\n        this.isLoading = false;\n      });\n\n    return;\n  }\n\n  loadProjectsForGroups(groups) {\n    const query = {\n      contact_group: groups,\n      search_text: this.searchText,\n      active: true,\n    };\n\n    return this.api.read('myliga', ['liga3000_projects', query]);\n  }\n\n  loadLists() {\n    if (this.listsLoaded) {\n      return;\n    }\n\n    this.isLoading = true;\n\n    this.api\n      .read('myliga', 'email_distributors')\n      .then((response) => {\n        const addList = this.contacts.find(({ type }) => type === 'add_list');\n        this.contacts = this.contacts.filter((item) => item !== addList);\n\n        const lists = (response.result || []).map((list) => {\n          return {\n            isOpen: false,\n            type: 'mailing_list',\n            list,\n          };\n        });\n\n        this.contacts = [...this.contacts, ...lists];\n\n        if (this.canEditList) {\n          this.contacts = [...this.contacts, { type: 'add_list' }];\n        }\n        this.listsLoaded = true;\n      })\n      .catch((error) => {\n        this.lnFlashMessages.addMessage(\n          'error',\n          'Unable to load email distributors'\n        );\n        console.error(error);\n      })\n      .finally(() => {\n        this.isLoading = false;\n        this.isContentVisible = true;\n      });\n  }\n\n  insertChilds(childsFor, what) {\n    const loader = { type: 'loader' };\n    let offset = this.contacts.indexOf(childsFor) + 1;\n\n    if (childsFor[what] === null) {\n      this.contacts = [\n        ...this.contacts.slice(0, offset),\n        loader,\n        ...this.contacts.slice(offset),\n      ];\n\n      if (what === 'projects') {\n        this.loadProjectsForGroups([childsFor.client.id]).then((response) => {\n          childsFor[what] = (response.result || []).map((project) => {\n            return {\n              isOpen: false,\n              type: 'project',\n              project,\n              contacts: null,\n            };\n          });\n\n          this.contacts = this.contacts.filter((item) => item !== loader);\n          this.insertChilds(childsFor, what);\n        });\n        return;\n      }\n\n      if (what === 'contacts') {\n        const query = {\n          project: childsFor.project.id,\n          show_in_communicator_contact_list: true,\n          active: true,\n        };\n        const detailsOpen = false;\n\n        this.api\n          .read('myliga', ['liga3000_contacts', query])\n          .then((response) => {\n            childsFor[what] = (response.result || []).map((contact) => {\n              return {\n                detailsOpen,\n                contact,\n                type: 'contact',\n              };\n            });\n\n            this.contacts = this.contacts.filter((item) => item !== loader);\n            this.insertChilds(childsFor, what);\n          });\n        return;\n      }\n    }\n\n    (childsFor[what] || []).forEach((child) => {\n      this.contacts = [\n        ...this.contacts.slice(0, offset),\n        child,\n        ...this.contacts.slice(offset),\n      ];\n      offset++;\n    });\n  }\n}\n\nfunction formatContacts(contacts) {\n  const formattedContacts = [];\n\n  /**\n   * Sorting is done on the API side. We are just making sure each\n   * contact falls into right \"company group\", since contacts from 1\n   * company may cover 2 different pages.\n   */\n  (contacts || []).forEach((contact) => {\n    const formattedContact = {\n      detailsOpen: false,\n      type: 'contact',\n      contact,\n    };\n\n    // If contact has no company, push it to the array\n    if (!contact.company_name) {\n      formattedContacts.push(formattedContact);\n    } else {\n      const companyIndex = formattedContacts.findIndex(\n        ({ text }) => text === contact.company_name\n      );\n      const nextSubheadIndex = formattedContacts.findIndex(\n        (item, index) => item.type === 'subhead' && index > companyIndex\n      );\n      /*\n       * If there is another \"group/subhead\" after this company, add this contact right before that group\n       * i.e. \"push\" it at the end of this \"group\".\n       */\n      const spliceIndex =\n        nextSubheadIndex > -1 ? nextSubheadIndex - 1 : formattedContacts.length;\n\n      // If the company exists in the array, add contact to that group\n      if (companyIndex > -1) {\n        formattedContacts.splice(spliceIndex, 0, formattedContact);\n      } else {\n        /**\n         * Otherwise, add the company to the array, AND add the contact right after\n         */\n        formattedContacts.push(\n          {\n            type: 'subhead',\n            text: contact.company_name,\n          },\n          formattedContact\n        );\n      }\n    }\n  });\n\n  return formattedContacts;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div\\n  ...attributes\\n  class={{this.className}}\\n  {{did-insert this.loadData}}\\n  {{did-update this.loadData @filter}}\\n  {{on \\\"scroll\\\" this.handleScroll passive=true}}\\n>\\n  <SearchInput @value={{this.searchTerm}} @onChange={{this.searchValueDidChange}} />\\n\\n  <div class=\\\"fade-in-content\\\">\\n    {{#each this.notifications as |notification|}}\\n      <Communicator::NotificationItem\\n        @filter={{this.filter}}\\n        @notification={{notification}}\\n        @onOptionClick={{this.option}}\\n        @openNotification={{this.openNotification}}\\n        data-test-element=\\\"notification-item\\\"\\n      />\\n    {{/each}}\\n  </div>\\n\\n  {{#if this.isLoading}}\\n    <LoadingSpinner data-test-element=\\\"loading-spinner\\\" />\\n  {{else}}\\n    {{#if (eq this.notifications.length 0)}}\\n      <div class=\\\"list-message\\\">[ {{t \\\"no-entries\\\"}} ]</div>\\n    {{/if}}\\n  {{/if}}\\n</div>\", {\"contents\":\"<div\\n  ...attributes\\n  class={{this.className}}\\n  {{did-insert this.loadData}}\\n  {{did-update this.loadData @filter}}\\n  {{on \\\"scroll\\\" this.handleScroll passive=true}}\\n>\\n  <SearchInput @value={{this.searchTerm}} @onChange={{this.searchValueDidChange}} />\\n\\n  <div class=\\\"fade-in-content\\\">\\n    {{#each this.notifications as |notification|}}\\n      <Communicator::NotificationItem\\n        @filter={{this.filter}}\\n        @notification={{notification}}\\n        @onOptionClick={{this.option}}\\n        @openNotification={{this.openNotification}}\\n        data-test-element=\\\"notification-item\\\"\\n      />\\n    {{/each}}\\n  </div>\\n\\n  {{#if this.isLoading}}\\n    <LoadingSpinner data-test-element=\\\"loading-spinner\\\" />\\n  {{else}}\\n    {{#if (eq this.notifications.length 0)}}\\n      <div class=\\\"list-message\\\">[ {{t \\\"no-entries\\\"}} ]</div>\\n    {{/if}}\\n  {{/if}}\\n</div>\",\"moduleName\":\"ln-liga-os/components/communicator/tab-notifications.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/communicator/tab-notifications.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { compare } from '@ember/utils';\nimport { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\n\nexport default class CommunicatorTabNotifications extends Component {\n  @service communicator;\n  @service navigation;\n  @service session;\n  @service store;\n\n  @tracked hasMore = true;\n\n  @tracked isContentVisible = false;\n\n  @tracked isLoading = true;\n\n  @tracked lastRequest = null;\n\n  @tracked notifications = [];\n\n  @tracked pagingLimit = 20;\n\n  @tracked searchTerm = '';\n\n  lastRequestHash = null;\n\n  get className() {\n    const result = [\n      'communicator-tab-base-component',\n      'communicator-tab-notifications-component',\n      'list',\n      'notifications-list',\n      `filter-${this.args.filter}`,\n    ];\n    if (this.isLoading) {\n      result.push('is-loading');\n    }\n    if (this.isContentVisible) {\n      result.push('is-content-visible');\n    }\n    return result.join(' ');\n  }\n\n  @action\n  handleScroll(event) {\n    const target = event.target;\n    const scrollBottom = target.scrollTop + target.offsetHeight;\n    const scrollHeight = target.scrollHeight;\n\n    if (scrollBottom + scrollHeight * 0.25 >= scrollHeight) {\n      // reached end of list\n      this.loadData();\n    }\n  }\n\n  @action\n  openNotification(notification) {\n    if (notification.get('link')) {\n      this.navigation.openUrl(notification.get('link'));\n      this.args.close();\n      return;\n    }\n\n    const resource = notification.get('context_type');\n    const resourceId = notification.get('context_id');\n\n    if (this.navigation.canOpenResource(resource, resourceId)) {\n      this.navigation.openResource(resource, resourceId);\n      this.args.close();\n    }\n  }\n\n  @action\n  option(optionKey, notification) {\n    const keyPropMap = {\n      toggleRead: 'read_state',\n      toggleFlag: 'flagged',\n      toggleArchive: 'archived',\n    };\n    const prop = keyPropMap[optionKey];\n    if (!prop) {\n      return;\n    }\n\n    notification.set(prop, !notification.get(prop));\n    notification.save();\n  }\n\n  @action\n  searchValueDidChange(value) {\n    this.searchTerm = value;\n    this.loadData(true);\n  }\n\n  @action\n  loadData(reload = false) {\n    if (!this.session.isLoggedIn) {\n      return;\n    }\n\n    if (reload) {\n      this.notifications = [];\n      this.hasMore = true;\n    }\n\n    if (!this.hasMore) {\n      return;\n    }\n\n    const query = this.createQuery({\n      paging_limit: this.pagingLimit,\n      paging_offset: this.notifications.length,\n    });\n    const lastRequestHash = JSON.stringify(query);\n\n    if (this.isLoading && this.lastRequestHash === lastRequestHash) {\n      return;\n    }\n\n    this.lastRequestHash = lastRequestHash;\n    this.isLoading = true;\n\n    const request = this.store\n      .query('vdc/notification', query)\n      .then((notifications) => {\n        if (this.isDestroying || request !== this.lastRequest) {\n          return;\n        }\n\n        this.notifications = [\n          ...this.notifications,\n          ...notifications\n            .slice()\n            .sort((a, b) => compare(b.get('datetime'), a.get('datetime'))),\n        ];\n\n        this.hasMore = this.pagingLimit === notifications.meta.result_count;\n      })\n      .finally(() => {\n        if (this.isDestroying || request !== this.lastRequest) {\n          return;\n        }\n\n        this.isLoading = false;\n        this.isContentVisible = true;\n      });\n\n    this.lastRequest = request;\n  }\n\n  createQuery(add = {}) {\n    const query = {};\n\n    switch (this.args.filter) {\n      case 'current':\n        Object.assign(query, { archived: false, current: true });\n        break;\n      case 'flagged':\n        Object.assign(query, { archived: false, flagged: true });\n        break;\n      case 'unread':\n        Object.assign(query, { archived: false, read_state: false });\n        break;\n      case 'archive':\n        Object.assign(query, { archived: true, current: false });\n        break;\n    }\n\n    const term = this.getProperSearchTerm();\n    if (term !== '') {\n      Object.assign(query, { search_text: term });\n    }\n\n    return Object.assign(query, add);\n  }\n\n  getProperSearchTerm() {\n    let term = this.searchTerm || '';\n    const numChars = term.replace(/\\s+/g, '').length; // without whitespace\n    if (numChars <= 2) {\n      term = '';\n    }\n    return term;\n  }\n\n  updateUnreadCountBadge() {\n    this.communicator.updateBadges(false);\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div\\n  ...attributes\\n  class={{this.className}}\\n  {{did-insert this.updateSettingsValues}}\\n>\\n  {{#if this.showErrorMessage}}\\n    {{#if this.errorMessage}}\\n      <Communicator::ErrorMessage\\n        @message={{this.errorMessage}}\\n        @remove={{this.hideErrorMessage}}\\n      />\\n    {{/if}}\\n  {{/if}}\\n\\n  {{#if this.isChangePasswordAllowed}}\\n    <div class=\\\"settings-group\\\">\\n      <Form::Input\\n        @error={{this.errorDetails.password_new}}\\n        @label={{t \\\"change-password\\\"}}\\n        @onInput={{fn this.setPassword \\\"new\\\"}}\\n        @placeholder={{t \\\"new-password\\\"}}\\n        @type=\\\"password\\\"\\n        @value={{this.password.new}}\\n        class=\\\"password-new\\\"\\n      />\\n      <Form::Input\\n        @error={{this.errorDetails.password_new_rep}}\\n        @onInput={{fn this.setPassword \\\"new_rep\\\"}}\\n        @placeholder={{t \\\"confirm-password\\\"}}\\n        @type=\\\"password\\\"\\n        @value={{this.password.new_rep}}\\n        class=\\\"password-confirm\\\"\\n      />\\n      <Form::Input\\n        @error={{this.errorDetails.password_old}}\\n        @onInput={{fn this.setPassword \\\"old\\\"}}\\n        @placeholder={{t \\\"old-password\\\"}}\\n        @type=\\\"password\\\"\\n        @value={{this.password.old}}\\n        class=\\\"password-current\\\"\\n      />\\n      <Form::Button\\n        @loading={{this.isSaving}}\\n        @onClick={{this.savePassword}}\\n        class=\\\"save-button\\\"\\n        data-has-error={{this.showErrorMessage}}\\n      >\\n        {{t \\\"save\\\"}}\\n      </Form::Button>\\n    </div>\\n  {{/if}}\\n\\n  <div class=\\\"settings-group\\\">\\n    <Form::RadioGroup\\n      @label={{t \\\"language\\\"}}\\n      @onChange={{this.setLanguage}}\\n      @optionLabelPath=\\\"label\\\"\\n      @optionValuePath=\\\"value\\\"\\n      @options={{this.languageOptions}}\\n      @value={{this.currentUser.language_id}}\\n      data-test-element=\\\"language\\\"\\n    />\\n  </div>\\n\\n  <div class=\\\"settings-group\\\">\\n    <Form::RadioGroup\\n      @label={{t \\\"permanent-communicator\\\"}}\\n      @onChange={{this.setAlwaysShowCommunicator}}\\n      @optionLabelPath=\\\"label\\\"\\n      @optionValuePath=\\\"value\\\"\\n      @options={{this.alwaysShowCommunicatorOptions}}\\n      @value={{this.settingValues.AlwaysShowCommunicator}}\\n      data-test-element=\\\"permanent-communicator\\\"\\n    />\\n  </div>\\n\\n  <div class=\\\"settings-group\\\">\\n    <Form::RadioGroup\\n      @label={{t \\\"sound-by-notification\\\"}}\\n      @onChange={{this.setNotificationSound}}\\n      @optionLabelPath=\\\"label\\\"\\n      @optionValuePath=\\\"value\\\"\\n      @options={{this.notificationSoundOptions}}\\n      @value={{this.settingValues.NotificationSound}}\\n      data-test-element=\\\"notification-sound\\\"\\n    />\\n  </div>\\n</div>\", {\"contents\":\"<div\\n  ...attributes\\n  class={{this.className}}\\n  {{did-insert this.updateSettingsValues}}\\n>\\n  {{#if this.showErrorMessage}}\\n    {{#if this.errorMessage}}\\n      <Communicator::ErrorMessage\\n        @message={{this.errorMessage}}\\n        @remove={{this.hideErrorMessage}}\\n      />\\n    {{/if}}\\n  {{/if}}\\n\\n  {{#if this.isChangePasswordAllowed}}\\n    <div class=\\\"settings-group\\\">\\n      <Form::Input\\n        @error={{this.errorDetails.password_new}}\\n        @label={{t \\\"change-password\\\"}}\\n        @onInput={{fn this.setPassword \\\"new\\\"}}\\n        @placeholder={{t \\\"new-password\\\"}}\\n        @type=\\\"password\\\"\\n        @value={{this.password.new}}\\n        class=\\\"password-new\\\"\\n      />\\n      <Form::Input\\n        @error={{this.errorDetails.password_new_rep}}\\n        @onInput={{fn this.setPassword \\\"new_rep\\\"}}\\n        @placeholder={{t \\\"confirm-password\\\"}}\\n        @type=\\\"password\\\"\\n        @value={{this.password.new_rep}}\\n        class=\\\"password-confirm\\\"\\n      />\\n      <Form::Input\\n        @error={{this.errorDetails.password_old}}\\n        @onInput={{fn this.setPassword \\\"old\\\"}}\\n        @placeholder={{t \\\"old-password\\\"}}\\n        @type=\\\"password\\\"\\n        @value={{this.password.old}}\\n        class=\\\"password-current\\\"\\n      />\\n      <Form::Button\\n        @loading={{this.isSaving}}\\n        @onClick={{this.savePassword}}\\n        class=\\\"save-button\\\"\\n        data-has-error={{this.showErrorMessage}}\\n      >\\n        {{t \\\"save\\\"}}\\n      </Form::Button>\\n    </div>\\n  {{/if}}\\n\\n  <div class=\\\"settings-group\\\">\\n    <Form::RadioGroup\\n      @label={{t \\\"language\\\"}}\\n      @onChange={{this.setLanguage}}\\n      @optionLabelPath=\\\"label\\\"\\n      @optionValuePath=\\\"value\\\"\\n      @options={{this.languageOptions}}\\n      @value={{this.currentUser.language_id}}\\n      data-test-element=\\\"language\\\"\\n    />\\n  </div>\\n\\n  <div class=\\\"settings-group\\\">\\n    <Form::RadioGroup\\n      @label={{t \\\"permanent-communicator\\\"}}\\n      @onChange={{this.setAlwaysShowCommunicator}}\\n      @optionLabelPath=\\\"label\\\"\\n      @optionValuePath=\\\"value\\\"\\n      @options={{this.alwaysShowCommunicatorOptions}}\\n      @value={{this.settingValues.AlwaysShowCommunicator}}\\n      data-test-element=\\\"permanent-communicator\\\"\\n    />\\n  </div>\\n\\n  <div class=\\\"settings-group\\\">\\n    <Form::RadioGroup\\n      @label={{t \\\"sound-by-notification\\\"}}\\n      @onChange={{this.setNotificationSound}}\\n      @optionLabelPath=\\\"label\\\"\\n      @optionValuePath=\\\"value\\\"\\n      @options={{this.notificationSoundOptions}}\\n      @value={{this.settingValues.NotificationSound}}\\n      data-test-element=\\\"notification-sound\\\"\\n    />\\n  </div>\\n</div>\",\"moduleName\":\"ln-liga-os/components/communicator/tab-settings.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/communicator/tab-settings.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport normalizeErrorResponse from 'ln-liga-os/utils/normalize-error-response';\n\nexport default class CommunicatorTabSettingsComponent extends Component {\n  @service api;\n  @service intl;\n  @service session;\n  @service settings;\n  @service state;\n  @service store;\n\n  @tracked alwaysShowCommunicatorOptions = null;\n\n  @tracked errorDetails = null;\n\n  @tracked errorMessage = null;\n\n  @tracked isSaving = false;\n\n  @tracked notificationSoundOptions = null;\n\n  @tracked password = null;\n\n  @tracked settingValues = null;\n\n  constructor(...args) {\n    super(...args);\n    this.password = {\n      new: null,\n      new_rep: null,\n      old: null,\n    };\n    this.alwaysShowCommunicatorOptions = [\n      { label: this.intl.t('on'), value: true },\n      { label: this.intl.t('off'), value: false },\n    ];\n    this.notificationSoundOptions = [\n      { label: this.intl.t('on'), value: true },\n      { label: this.intl.t('off'), value: false },\n    ];\n  }\n\n  get className() {\n    const result = [\n      'communicator-tab-base-component',\n      'communicator-tab-settings-component',\n      'is-content-visible',\n    ];\n    if (this.hasPasswordValues) {\n      result.push('has-password-values');\n    }\n    return result.join(' ');\n  }\n\n  get currentUser() {\n    return this.state.user;\n  }\n\n  get isChangePasswordAllowed() {\n    return !this.session.isKeycloak;\n  }\n\n  get languageOptions() {\n    return (this.state.languages || []).map((language) => ({\n      label: language.get('name'),\n      value: Number(language.get('id')),\n    }));\n  }\n\n  get showErrorMessage() {\n    const details = this.errorDetails || {};\n    const hasDetails = Object.keys(details).find((key) => details[key]);\n    return Boolean(this.errorMessage || hasDetails);\n  }\n\n  get hasPasswordValues() {\n    return Boolean(\n      this.password.old || this.password.new || this.password.new_rep\n    );\n  }\n\n  @action\n  hideErrorMessage() {\n    this.errorMessage = null;\n  }\n\n  @action\n  setAlwaysShowCommunicator(value) {\n    this.settingValues = {\n      ...this.settingValues,\n      AlwaysShowCommunicator: value,\n    };\n    this.settings.setValue('AlwaysShowCommunicator', value).then(() => {\n      this.saveSettings();\n    });\n  }\n\n  @action\n  setLanguage(languageId) {\n    this.currentUser.set('language_id', languageId);\n    this.saveUser();\n  }\n\n  @action\n  setNotificationSound(value) {\n    this.settingValues = {\n      ...this.settingValues,\n      NotificationSound: value,\n    };\n    this.settings.setValue('NotificationSound', value).then(() => {\n      this.saveSettings();\n    });\n  }\n\n  @action\n  setPassword(key, value) {\n    this.password = { ...this.password, [key]: value };\n    this.errorDetails = { ...this.errorDetails, [`password_${key}`]: null };\n  }\n\n  @action\n  updateSettingsValues() {\n    this.settings\n      .getValues(['NotificationSound', 'AlwaysShowCommunicator'])\n      .then((values) => (this.settingValues = values));\n  }\n\n  showError(error) {\n    if (typeof error === 'string') {\n      this.errorMessage = error;\n    } else {\n      const { message, details } = normalizeErrorResponse(error);\n      this.errorMessage = message;\n      this.errorDetails = details;\n    }\n  }\n\n  saveUser() {\n    const user = this.currentUser;\n    if (!user) {\n      return;\n    }\n\n    this.isSaving = true;\n\n    return user\n      .save()\n      .then(() => {\n        if (this.isDestroying) {\n          return;\n        }\n\n        const lang = this.state.languages.find(\n          ({ id }) => `${id}` === String(user.get('language_id'))\n        );\n        if (lang) {\n          this.state.setLanguage(lang.get('code'));\n        }\n      })\n      .catch((error) => {\n        if (this.isDestroying) {\n          return;\n        }\n        this.showError(error);\n      })\n      .finally(() => {\n        if (this.isDestroying) {\n          return;\n        }\n        this.isSaving = false;\n      });\n  }\n\n  saveSettings() {\n    return this.settings.saveAllSettings().catch((error) => {\n      if (this.isDestroying) {\n        return;\n      }\n\n      this.showError(error);\n      this.settings.load(true).then(() => this.updateSettingsValues());\n    });\n  }\n\n  @action\n  savePassword() {\n    this.errorDetails = {};\n    this.errorMessage = null;\n\n    if (this.password.new !== this.password.new_rep) {\n      return (this.errorDetails = {\n        password_new_rep: 'The new password and the password repeat must match',\n      });\n    }\n\n    const userId = this.currentUser.get('id');\n    if (!userId) {\n      return;\n    }\n\n    this.isSaving = true;\n\n    return this.api\n      .update('myliga', ['users', userId, 'password'], {\n        password_new: this.password.new,\n        password_old: this.password.old,\n      })\n      .then(() => {\n        if (this.isDestroying) {\n          return;\n        }\n      })\n      .catch((error) => {\n        if (this.isDestroying) {\n          return;\n        }\n\n        this.showError(error);\n      })\n      .finally(() => {\n        if (this.isDestroying) {\n          return;\n        }\n        this.isSaving = false;\n      });\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class={{this.className}}>\\n  <TaskList\\n    @afterOpenTask={{@close}}\\n    @afterPopupVisibilityChange={{this.setHasAnyOpenPopup}}\\n    @tasks={{this.urgentTasks}}\\n    @title={{t \\\"urgent\\\"}}\\n    class=\\\"fade-in-content\\\"\\n    data-test-element=\\\"urgent-tasks\\\"\\n  />\\n  <TaskList\\n    @afterOpenTask={{@close}}\\n    @afterPopupVisibilityChange={{this.setHasAnyOpenPopup}}\\n    @tasks={{this.todayTasks}}\\n    @title={{t \\\"today\\\"}}\\n    class=\\\"fade-in-content\\\"\\n    data-test-element=\\\"today-tasks\\\"\\n  />\\n  <TaskList\\n    @afterOpenTask={{@close}}\\n    @afterPopupVisibilityChange={{this.setHasAnyOpenPopup}}\\n    @tasks={{this.comingTasks}}\\n    @title={{t \\\"upcoming\\\"}}\\n    class=\\\"fade-in-content\\\"\\n    data-test-element=\\\"upcoming-tasks\\\"\\n  />\\n\\n  <div class=\\\"status-message\\\">\\n    {{#if this.isLoading}}\\n      <LoadingSpinner />\\n    {{else}}\\n      {{#if this.hasNoEntries}}\\n        <div data-test-element=\\\"no-results\\\">\\n          [ {{t \\\"no-entries\\\"}} ]\\n        </div>\\n      {{/if}}\\n    {{/if}}\\n  </div>\\n</div>\", {\"contents\":\"<div ...attributes class={{this.className}}>\\n  <TaskList\\n    @afterOpenTask={{@close}}\\n    @afterPopupVisibilityChange={{this.setHasAnyOpenPopup}}\\n    @tasks={{this.urgentTasks}}\\n    @title={{t \\\"urgent\\\"}}\\n    class=\\\"fade-in-content\\\"\\n    data-test-element=\\\"urgent-tasks\\\"\\n  />\\n  <TaskList\\n    @afterOpenTask={{@close}}\\n    @afterPopupVisibilityChange={{this.setHasAnyOpenPopup}}\\n    @tasks={{this.todayTasks}}\\n    @title={{t \\\"today\\\"}}\\n    class=\\\"fade-in-content\\\"\\n    data-test-element=\\\"today-tasks\\\"\\n  />\\n  <TaskList\\n    @afterOpenTask={{@close}}\\n    @afterPopupVisibilityChange={{this.setHasAnyOpenPopup}}\\n    @tasks={{this.comingTasks}}\\n    @title={{t \\\"upcoming\\\"}}\\n    class=\\\"fade-in-content\\\"\\n    data-test-element=\\\"upcoming-tasks\\\"\\n  />\\n\\n  <div class=\\\"status-message\\\">\\n    {{#if this.isLoading}}\\n      <LoadingSpinner />\\n    {{else}}\\n      {{#if this.hasNoEntries}}\\n        <div data-test-element=\\\"no-results\\\">\\n          [ {{t \\\"no-entries\\\"}} ]\\n        </div>\\n      {{/if}}\\n    {{/if}}\\n  </div>\\n</div>\",\"moduleName\":\"ln-liga-os/components/communicator/tab-tasks.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/communicator/tab-tasks.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { compare } from '@ember/utils';\n\nexport default class CommunicatorTabTasks extends Component {\n  @service session;\n  @service store;\n\n  @tracked hasAnyOpenPopup = false;\n\n  @tracked isContentVisible = false;\n\n  @tracked isLoading = false;\n\n  @tracked tasks = [];\n\n  constructor(...args) {\n    super(...args);\n    this.loadData();\n  }\n\n  get className() {\n    const result = [\n      'communicator-tab-base-component',\n      'communicator-tab-tasks-component',\n    ];\n    if (this.isLoading) {\n      result.push('is-loading');\n    }\n    if (this.isContentVisible) {\n      result.push('is-content-visible');\n    }\n    if (this.hasAnyOpenPopup) {\n      result.push('has-any-open-popup');\n    }\n    return result.join(' ');\n  }\n\n  get comingTasks() {\n    if (!['all', 'coming'].includes(this.args.filter)) {\n      return [];\n    }\n    return this.tasks\n      .filter((task) => task.get('daysLeft') > 0)\n      .sort((t1, t2) => compare(t1.get('end_date'), t2.get('end_date')));\n  }\n\n  get todayTasks() {\n    if (!['all', 'today'].includes(this.args.filter)) {\n      return [];\n    }\n    return this.tasks\n      .filter((task) => task.get('toDoToday'))\n      .sort((t1, t2) => compare(t1.get('end_date'), t2.get('end_date')));\n  }\n\n  get urgentTasks() {\n    if (!['all', 'urgent'].includes(this.args.filter)) {\n      return [];\n    }\n    return this.tasks\n      .filter((task) => task.get('isCritical'))\n      .sort((t1, t2) => compare(t1.get('end_date'), t2.get('end_date')));\n  }\n\n  get hasNoEntries() {\n    return (\n      this.urgentTasks.length +\n        this.todayTasks.length +\n        this.comingTasks.length ===\n      0\n    );\n  }\n\n  // Rework this to use CSS instead of component state\n  @action\n  setHasAnyOpenPopup(value) {\n    this.hasAnyOpenPopup = value;\n  }\n\n  loadData() {\n    const { userId } = this.session;\n    if (userId) {\n      this.isLoading = true;\n      this.store\n        .query('vdc/task', { status: 'Open', user: userId, embed: ['author'] })\n        .then((tasks) => {\n          if (this.isDestroying) {\n            return;\n          }\n          this.tasks = tasks.filter((task) => task.get('isOpen'));\n        })\n        .finally(() => {\n          if (this.isDestroying) {\n            return;\n          }\n          this.isLoading = false;\n          this.isContentVisible = true;\n        });\n    }\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div\\n  ...attributes\\n  class={{this.className}}\\n  {{css-props this.cssProps}}\\n  {{on \\\"scroll\\\" this.handleScroll passive=true}}\\n>\\n  <VerticalCollection\\n    @estimateHeight={{this.rowHeight}}\\n    @items={{@items}}\\n    @lastReached={{this.handleLastReached}}\\n    as |item|\\n  >\\n    {{#let (component (concat \\\"contact-list/item-\\\" (dasherize item.type))) as |ItemComponent|}}\\n      <ItemComponent\\n        @addMailingList={{@addMailingList}}\\n        @canEditList={{@canEditList}}\\n        @isScrolling={{this.isScrolling}}\\n        @item={{item}}\\n        @onClientClick={{@onClientClick}}\\n        @onItemClick={{this.onItemClick}}\\n        @onMailinglistEdit={{@onMailinglistEdit}}\\n        @onPopupChange={{this.onPopupChange}}\\n        @onProjectClick={{@onProjectClick}}\\n        class=\\\"contact-list-item-base-component\\\"\\n      />\\n    {{/let}}\\n  </VerticalCollection>\\n</div>\", {\"contents\":\"<div\\n  ...attributes\\n  class={{this.className}}\\n  {{css-props this.cssProps}}\\n  {{on \\\"scroll\\\" this.handleScroll passive=true}}\\n>\\n  <VerticalCollection\\n    @estimateHeight={{this.rowHeight}}\\n    @items={{@items}}\\n    @lastReached={{this.handleLastReached}}\\n    as |item|\\n  >\\n    {{#let (component (concat \\\"contact-list/item-\\\" (dasherize item.type))) as |ItemComponent|}}\\n      <ItemComponent\\n        @addMailingList={{@addMailingList}}\\n        @canEditList={{@canEditList}}\\n        @isScrolling={{this.isScrolling}}\\n        @item={{item}}\\n        @onClientClick={{@onClientClick}}\\n        @onItemClick={{this.onItemClick}}\\n        @onMailinglistEdit={{@onMailinglistEdit}}\\n        @onPopupChange={{this.onPopupChange}}\\n        @onProjectClick={{@onProjectClick}}\\n        class=\\\"contact-list-item-base-component\\\"\\n      />\\n    {{/let}}\\n  </VerticalCollection>\\n</div>\",\"moduleName\":\"ln-liga-os/components/contact-list/collection.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/contact-list/collection.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { throttle, debounce } from '@ember/runloop';\n\n/**\n * Component that renders collections of different items\n *\n * @todo Rework this. Probably split it into different components.\n *\n * I suspect it was originally designed to be a collection of contacts.\n * Currently it's just a collection of all kinds of items that have nothing\n * in common. And this component proxies all the different arguments required\n * for each of the items that can be rendered inside of it.\n */\nexport default class ContactListCollectionComponent extends Component {\n  @tracked hasAnyOpenPopup = false;\n\n  @tracked isScrolling = false;\n\n  @tracked rowHeight = 60;\n\n  get className() {\n    const result = ['contact-list-collection-component', 'fade-in-content'];\n    if (this.isScrolling) {\n      result.push('is-scrolling');\n    }\n    if (this.hasAnyOpenPopup) {\n      result.push('has-any-open-popup');\n    }\n    return result.join(' ');\n  }\n\n  get cssProps() {\n    return { '--collectionItemHeight': `${this.rowHeight}px` };\n  }\n\n  @action\n  handleScroll() {\n    this.isScrolling = true;\n    debounce(this, this.setIsScrolling, false, 150);\n  }\n\n  @action\n  handleLastReached() {\n    throttle(this, this.loadNextPage, 200);\n  }\n\n  loadNextPage() {\n    return this.args.loadNextPage?.();\n  }\n\n  @action\n  onPopupChange(open) {\n    this.hasAnyOpenPopup = open;\n  }\n\n  @action\n  setIsScrolling(value) {\n    this.isScrolling = value;\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class=\\\"contact-list-item-absence-component\\\">\\n\\n  <ContactMenuHandle @userId={{this.contact.user_id}} class=\\\"user-pic\\\">\\n    <ResizedImage\\n      @placeholder=\\\"assets/images/user.svg\\\"\\n      @size=\\\"40x40\\\"\\n      @src={{this.contact.picture.preview_url}}\\n      class=\\\"user-image round\\\"\\n    />\\n  </ContactMenuHandle>\\n\\n  <p>\\n    <span class=\\\"name\\\">{{this.contact.first_name}}\\n      {{this.contact.name}}</span><br />\\n    <span class=\\\"reason\\\">{{@item.reason}}</span>\\n  </p>\\n\\n  <div\\n    class=\\\"absence-type\\n      {{if @item.isIll 'is-ill'}}\\n      {{if @item.isHoliday 'is-holiday'}}\\\"\\n  />\\n</div>\", {\"contents\":\"<div ...attributes class=\\\"contact-list-item-absence-component\\\">\\n\\n  <ContactMenuHandle @userId={{this.contact.user_id}} class=\\\"user-pic\\\">\\n    <ResizedImage\\n      @placeholder=\\\"assets/images/user.svg\\\"\\n      @size=\\\"40x40\\\"\\n      @src={{this.contact.picture.preview_url}}\\n      class=\\\"user-image round\\\"\\n    />\\n  </ContactMenuHandle>\\n\\n  <p>\\n    <span class=\\\"name\\\">{{this.contact.first_name}}\\n      {{this.contact.name}}</span><br />\\n    <span class=\\\"reason\\\">{{@item.reason}}</span>\\n  </p>\\n\\n  <div\\n    class=\\\"absence-type\\n      {{if @item.isIll 'is-ill'}}\\n      {{if @item.isHoliday 'is-holiday'}}\\\"\\n  />\\n</div>\",\"moduleName\":\"ln-liga-os/components/contact-list/item-absence.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/contact-list/item-absence.hbs\"}});\nimport Component from '@glimmer/component';\n\nexport default class ContactListItemAbsenceComponent extends Component {\n  get contact() {\n    return this.args.item.contact;\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div\\n  ...attributes\\n  class=\\\"contact-list-item-add-list-component\\\"\\n  role=\\\"button\\\"\\n  {{on \\\"click\\\" this.addMailingList passive=true}}\\n>\\n  {{t \\\"create-new-list-entry\\\"}}\\n</div>\", {\"contents\":\"<div\\n  ...attributes\\n  class=\\\"contact-list-item-add-list-component\\\"\\n  role=\\\"button\\\"\\n  {{on \\\"click\\\" this.addMailingList passive=true}}\\n>\\n  {{t \\\"create-new-list-entry\\\"}}\\n</div>\",\"moduleName\":\"ln-liga-os/components/contact-list/item-add-list.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/contact-list/item-add-list.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\n\nexport default class ContactListItemAddListComponent extends Component {\n  @action\n  addMailingList() {\n    this.args.addMailingList?.();\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div\\n  ...attributes\\n  class=\\\"contact-list-item-client-component\\\"\\n  role=\\\"button\\\"\\n  {{on \\\"click\\\" this.onClientClick passive=true}}\\n>\\n  <span class=\\\"client-name\\\">{{this.client.company_name}}</span>\\n  <span class=\\\"toggle {{if @item.isOpen \\\"is-open\\\"}}\\\"></span>\\n</div>\", {\"contents\":\"<div\\n  ...attributes\\n  class=\\\"contact-list-item-client-component\\\"\\n  role=\\\"button\\\"\\n  {{on \\\"click\\\" this.onClientClick passive=true}}\\n>\\n  <span class=\\\"client-name\\\">{{this.client.company_name}}</span>\\n  <span class=\\\"toggle {{if @item.isOpen \\\"is-open\\\"}}\\\"></span>\\n</div>\",\"moduleName\":\"ln-liga-os/components/contact-list/item-client.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/contact-list/item-client.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\n\nexport default class ContactListItemClientComponent extends Component {\n  get client() {\n    return this.args.item.client;\n  }\n\n  @action\n  onClientClick() {\n    this.args.onClientClick?.(this.args.item);\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class=\\\"contact-list-item-contact-component {{this.className}}\\\">\\n  <ContactMenuHandle\\n    @contactId={{this.contact.id}}\\n    @userId={{this.contact.user_id}}\\n    class=\\\"user-pic\\\"\\n  >\\n    {{#if this.contact.picture}}\\n      <ResizedImage\\n        @size=\\\"40x40\\\"\\n        @src={{this.contact.picture.preview_url}}\\n        class=\\\"user-image\\\"\\n      />\\n    {{else}}\\n      <span class=\\\"user-image initials-image\\\">{{this.nameInitials}}</span>\\n    {{/if}}\\n  </ContactMenuHandle>\\n\\n  <p>\\n    <span class=\\\"name-company-container\\\">\\n      <span\\n        class=\\\"name\\\"\\n        title=\\\"{{this.contact.first_name}} {{this.contact.name}}\\\"\\n      >{{this.contact.first_name}} {{this.contact.name}}</span>\\n      {{#if this.contact.company_name}}\\n        <span class=\\\"company\\\">{{this.contact.company_name}}</span>\\n      {{/if}}\\n    </span>\\n\\n    {{#if @item.birthday}}\\n      <span\\n        class=\\\"birthday {{if @item.hasBirthday 'has-birthday'}}\\\"\\n      >{{@item.birthday}}</span>\\n    {{/if}}\\n  </p>\\n</div>\", {\"contents\":\"<div ...attributes class=\\\"contact-list-item-contact-component {{this.className}}\\\">\\n  <ContactMenuHandle\\n    @contactId={{this.contact.id}}\\n    @userId={{this.contact.user_id}}\\n    class=\\\"user-pic\\\"\\n  >\\n    {{#if this.contact.picture}}\\n      <ResizedImage\\n        @size=\\\"40x40\\\"\\n        @src={{this.contact.picture.preview_url}}\\n        class=\\\"user-image\\\"\\n      />\\n    {{else}}\\n      <span class=\\\"user-image initials-image\\\">{{this.nameInitials}}</span>\\n    {{/if}}\\n  </ContactMenuHandle>\\n\\n  <p>\\n    <span class=\\\"name-company-container\\\">\\n      <span\\n        class=\\\"name\\\"\\n        title=\\\"{{this.contact.first_name}} {{this.contact.name}}\\\"\\n      >{{this.contact.first_name}} {{this.contact.name}}</span>\\n      {{#if this.contact.company_name}}\\n        <span class=\\\"company\\\">{{this.contact.company_name}}</span>\\n      {{/if}}\\n    </span>\\n\\n    {{#if @item.birthday}}\\n      <span\\n        class=\\\"birthday {{if @item.hasBirthday 'has-birthday'}}\\\"\\n      >{{@item.birthday}}</span>\\n    {{/if}}\\n  </p>\\n</div>\",\"moduleName\":\"ln-liga-os/components/contact-list/item-contact.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/contact-list/item-contact.hbs\"}});\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\n\nexport default class ContactListItemContactComponent extends Component {\n  @service mediaMatcher;\n  @service microMenu;\n\n  get className() {\n    const result = [];\n    if (this.mediaMatcher.isMobile) {\n      result.push('is-mobile');\n    }\n    if (this.isScrolling) {\n      result.push('is-scrolling');\n    }\n    return result.join(' ');\n  }\n\n  get contact() {\n    return this.args.item.contact;\n  }\n\n  get hasPhoneInformation() {\n    return !!(\n      this.contact.phone ||\n      this.contact.fax ||\n      this.contact.mobile_phone\n    );\n  }\n\n  get nameInitials() {\n    const firstNameInitial = this.contact.first_name?.charAt(0);\n    const lastNameInitial = this.contact.name?.charAt(0);\n    return `${firstNameInitial}${lastNameInitial}`;\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class=\\\"contact-list-item-loader-component\\\">\\n  <LoadingSpinner />\\n</div>\", {\"contents\":\"<div ...attributes class=\\\"contact-list-item-loader-component\\\">\\n  <LoadingSpinner />\\n</div>\",\"moduleName\":\"ln-liga-os/components/contact-list/item-loader.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/contact-list/item-loader.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class=\\\"contact-list-item-mailing-list-component {{if @canEditList 'can-edit-list'}}\\\">\\n  <a href=\\\"mailto:{{this.list.email}}\\\" class=\\\"mail-wrapper\\\">\\n    <span class=\\\"title\\\">{{this.list.name}}</span><br />\\n    <span class=\\\"description\\\">{{this.list.description}}</span>\\n    <span class=\\\"mail\\\" />\\n  </a>\\n\\n  {{#if @canEditList}}\\n    <div class=\\\"edit\\\" {{on \\\"click\\\" this.editMailingList passive=true}} role=\\\"button\\\" />\\n  {{/if}}\\n</div>\", {\"contents\":\"<div ...attributes class=\\\"contact-list-item-mailing-list-component {{if @canEditList 'can-edit-list'}}\\\">\\n  <a href=\\\"mailto:{{this.list.email}}\\\" class=\\\"mail-wrapper\\\">\\n    <span class=\\\"title\\\">{{this.list.name}}</span><br />\\n    <span class=\\\"description\\\">{{this.list.description}}</span>\\n    <span class=\\\"mail\\\" />\\n  </a>\\n\\n  {{#if @canEditList}}\\n    <div class=\\\"edit\\\" {{on \\\"click\\\" this.editMailingList passive=true}} role=\\\"button\\\" />\\n  {{/if}}\\n</div>\",\"moduleName\":\"ln-liga-os/components/contact-list/item-mailing-list.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/contact-list/item-mailing-list.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\n\nexport default class ContactListItemMailingListComponent extends Component {\n  get list() {\n    return this.args.item.list;\n  }\n\n  @action\n  editMailingList() {\n    this.args.onMailinglistEdit?.(this.args.item);\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class=\\\"contact-list-item-no-results-component\\\">\\n  [ {{t \\\"no-entries\\\"}} ]\\n</div>\", {\"contents\":\"<div ...attributes class=\\\"contact-list-item-no-results-component\\\">\\n  [ {{t \\\"no-entries\\\"}} ]\\n</div>\",\"moduleName\":\"ln-liga-os/components/contact-list/item-no-results.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/contact-list/item-no-results.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class=\\\"contact-list-item-project-component\\\">\\n  <div class=\\\"project-item-content\\\" role=\\\"button\\\" {{on \\\"click\\\" this.handleClick passive=true}}>\\n    <span class=\\\"project-name\\\">{{this.project.project_number}} {{this.project.description}}</span>\\n    <span class=\\\"toggle {{if @item.isOpen \\\"is-open\\\"}}\\\" />\\n  </div>\\n  <span class=\\\"mail\\\" role=\\\"button\\\" {{on \\\"click\\\" this.openProjectMail}} />\\n</div>\", {\"contents\":\"<div ...attributes class=\\\"contact-list-item-project-component\\\">\\n  <div class=\\\"project-item-content\\\" role=\\\"button\\\" {{on \\\"click\\\" this.handleClick passive=true}}>\\n    <span class=\\\"project-name\\\">{{this.project.project_number}} {{this.project.description}}</span>\\n    <span class=\\\"toggle {{if @item.isOpen \\\"is-open\\\"}}\\\" />\\n  </div>\\n  <span class=\\\"mail\\\" role=\\\"button\\\" {{on \\\"click\\\" this.openProjectMail}} />\\n</div>\",\"moduleName\":\"ln-liga-os/components/contact-list/item-project.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/contact-list/item-project.hbs\"}});\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\n\nexport default class ContactListItemProjectComponent extends Component {\n  @service api;\n\n  get project() {\n    return this.args.item.project;\n  }\n\n  @action\n  handleClick() {\n    this.args.onProjectClick?.(this.args.item);\n  }\n\n  @action\n  openProjectMail(event) {\n    event.stopPropagation();\n    const query = {\n      project: this.project.id,\n      show_in_communicator_contact_list: true,\n    };\n\n    this.api.read('myliga', ['liga3000_contacts', query]).then((response) => {\n      const addresses = (response.result || []).map((contact) => {\n        return contact.email;\n      });\n\n      window.open(`mailto:${addresses.join(',')}`);\n    });\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<span\\n  ...attributes\\n  class=\\\"contact-list-item-subhead-component subhead\\\"\\n>\\n  {{@item.text}}\\n</span>\", {\"contents\":\"<span\\n  ...attributes\\n  class=\\\"contact-list-item-subhead-component subhead\\\"\\n>\\n  {{@item.text}}\\n</span>\",\"moduleName\":\"ln-liga-os/components/contact-list/item-subhead.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/contact-list/item-subhead.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import BaseContactMenuComponent from 'ln-ember-contact-menu/components/contact-menu';\nimport { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\n\nexport default class ContactMenuComponent extends BaseContactMenuComponent {\n  @service navigation;\n  @service state;\n\n  @action\n  openProfile() {\n    const url = this.navigation.removeSlug(\n      `/myliga/#/?user=${this.args.userId}`\n    );\n    this.navigation.openUrl(url);\n    this.state.hideClickCatcher();\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class=\\\"error-overlay-component\\\">\\n  <div class=\\\"error-modal\\\">\\n    <h1>\\n      {{#if (has-block \\\"title\\\")}}\\n        {{yield to=\\\"title\\\"}}\\n      {{else}}\\n        {{@title}}\\n      {{/if}}\\n    </h1>\\n\\n    {{#if (has-block \\\"description\\\")}}\\n      {{yield to=\\\"description\\\"}}\\n    {{else}}\\n      <p>{{@description}}</p>\\n    {{/if}}\\n\\n    <div class=\\\"actions\\\">\\n      {{#if (has-block \\\"actions\\\")}}\\n        {{yield to=\\\"actions\\\"}}\\n      {{/if}}\\n    </div>\\n  </div>\\n</div>\", {\"contents\":\"<div ...attributes class=\\\"error-overlay-component\\\">\\n  <div class=\\\"error-modal\\\">\\n    <h1>\\n      {{#if (has-block \\\"title\\\")}}\\n        {{yield to=\\\"title\\\"}}\\n      {{else}}\\n        {{@title}}\\n      {{/if}}\\n    </h1>\\n\\n    {{#if (has-block \\\"description\\\")}}\\n      {{yield to=\\\"description\\\"}}\\n    {{else}}\\n      <p>{{@description}}</p>\\n    {{/if}}\\n\\n    <div class=\\\"actions\\\">\\n      {{#if (has-block \\\"actions\\\")}}\\n        {{yield to=\\\"actions\\\"}}\\n      {{/if}}\\n    </div>\\n  </div>\\n</div>\",\"moduleName\":\"ln-liga-os/components/error-overlay.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/error-overlay.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class=\\\"form-condition-component {{if @isMet 'is-met'}}\\\">\\n  <div class=\\\"condition-container\\\">\\n    <CheckIcon @isCorrect={{@isMet}} />\\n    <span>{{@label}}</span>\\n  </div>\\n</div>\", {\"contents\":\"<div ...attributes class=\\\"form-condition-component {{if @isMet 'is-met'}}\\\">\\n  <div class=\\\"condition-container\\\">\\n    <CheckIcon @isCorrect={{@isMet}} />\\n    <span>{{@label}}</span>\\n  </div>\\n</div>\",\"moduleName\":\"ln-liga-os/components/form-condition.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/form-condition.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<svg\\n  class=\\\"CloseIcon\\\"\\n  viewBox=\\\"0 0 40 40\\\"\\n  version=\\\"1.1\\\"\\n  xmlns=\\\"http://www.w3.org/2000/svg\\\"\\n  xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\\n>\\n  <title>exit</title>\\n  <g id=\\\"exit\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n    <path\\n      d=\\\"M31.4796281,18.7332135 C31.7670216,18.7332135 32,18.9570711 32,19.2332135 L32,20.7667865 C32,21.0429289 31.7670216,21.2667865 31.4796281,21.2667865 L21.2862188,21.2667865 L21.2862188,31.5 C21.2862188,31.7761424 21.0532404,32 20.7658469,32 L19.2350504,32 C18.9476569,32 18.7146785,31.7761424 18.7146785,31.5 L18.7146785,21.2667865 L8.52037185,21.2667865 C8.23297842,21.2667865 8,21.0429289 8,20.7667865 L8,19.2332135 C8,18.9570711 8.23297842,18.7332135 8.52037185,18.7332135 L18.7146785,18.7332135 L18.7146785,8.5 C18.7146785,8.22385763 18.9476569,8 19.2350504,8 L20.7658469,8 C21.0532404,8 21.2862188,8.22385763 21.2862188,8.5 L21.2862188,18.7332135 L31.4796281,18.7332135 Z\\\"\\n      id=\\\"shape\\\"\\n      fill=\\\"currentcolor\\\"\\n      fill-rule=\\\"nonzero\\\"\\n      transform=\\\"translate(20.000000, 20.000000) rotate(-315.000000) translate(-20.000000, -20.000000) \\\"\\n    ></path>\\n  </g>\\n</svg>\", {\"contents\":\"<svg\\n  class=\\\"CloseIcon\\\"\\n  viewBox=\\\"0 0 40 40\\\"\\n  version=\\\"1.1\\\"\\n  xmlns=\\\"http://www.w3.org/2000/svg\\\"\\n  xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\\n>\\n  <title>exit</title>\\n  <g id=\\\"exit\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n    <path\\n      d=\\\"M31.4796281,18.7332135 C31.7670216,18.7332135 32,18.9570711 32,19.2332135 L32,20.7667865 C32,21.0429289 31.7670216,21.2667865 31.4796281,21.2667865 L21.2862188,21.2667865 L21.2862188,31.5 C21.2862188,31.7761424 21.0532404,32 20.7658469,32 L19.2350504,32 C18.9476569,32 18.7146785,31.7761424 18.7146785,31.5 L18.7146785,21.2667865 L8.52037185,21.2667865 C8.23297842,21.2667865 8,21.0429289 8,20.7667865 L8,19.2332135 C8,18.9570711 8.23297842,18.7332135 8.52037185,18.7332135 L18.7146785,18.7332135 L18.7146785,8.5 C18.7146785,8.22385763 18.9476569,8 19.2350504,8 L20.7658469,8 C21.0532404,8 21.2862188,8.22385763 21.2862188,8.5 L21.2862188,18.7332135 L31.4796281,18.7332135 Z\\\"\\n      id=\\\"shape\\\"\\n      fill=\\\"currentcolor\\\"\\n      fill-rule=\\\"nonzero\\\"\\n      transform=\\\"translate(20.000000, 20.000000) rotate(-315.000000) translate(-20.000000, -20.000000) \\\"\\n    ></path>\\n  </g>\\n</svg>\",\"moduleName\":\"ln-liga-os/components/icons/close.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/icons/close.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#let \\\"KeycloakLoginButtonComponent\\\" as |scope|}}\\n  <Form::Button\\n    ...attributes\\n    class={{scope}}\\n    type=\\\"button\\\"\\n    data-test-keycloak-provider={{@options.name}}\\n    {{on \\\"click\\\" this.login passive=true}}\\n  >\\n    {{#if this.buttonConfig.icon}}\\n      <div class=\\\"{{scope}}-icon\\\">\\n        {{this.buttonConfig.icon}}\\n      </div>\\n    {{/if}}\\n\\n    <span class=\\\"{{scope}}-text\\\">{{this.buttonConfig.text}}</span>\\n  </Form::Button>\\n{{/let}}\", {\"contents\":\"{{#let \\\"KeycloakLoginButtonComponent\\\" as |scope|}}\\n  <Form::Button\\n    ...attributes\\n    class={{scope}}\\n    type=\\\"button\\\"\\n    data-test-keycloak-provider={{@options.name}}\\n    {{on \\\"click\\\" this.login passive=true}}\\n  >\\n    {{#if this.buttonConfig.icon}}\\n      <div class=\\\"{{scope}}-icon\\\">\\n        {{this.buttonConfig.icon}}\\n      </div>\\n    {{/if}}\\n\\n    <span class=\\\"{{scope}}-text\\\">{{this.buttonConfig.text}}</span>\\n  </Form::Button>\\n{{/let}}\",\"moduleName\":\"ln-liga-os/components/keycloak-login-button.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/keycloak-login-button.hbs\"}});\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\nimport MicrosoftIcon from 'ln-liga-os/components/keycloak-login-button/microsoft-icon';\nimport GoogleIcon from 'ln-liga-os/components/keycloak-login-button/google-icon';\n\nexport default class KeycloakLoginButtonComponent extends Component {\n  @service session;\n\n  @service intl;\n\n  get buttonConfig() {\n    switch (this.args.options.name) {\n      case 'google':\n        return {\n          text: this.intl.t('sign-in-with-google'),\n          icon: GoogleIcon,\n        };\n      case 'microsoft':\n        return {\n          text: this.intl.t('sign-in-with-microsoft'),\n          icon: MicrosoftIcon,\n        };\n      default:\n        throw new Error(\n          `Unsupported Keycloak login option: \"${this.args.options.name}\"`\n        );\n    }\n  }\n\n  @action\n  login() {\n    return this.session.auth({ idpHint: this.args.options.idpHint });\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<svg\\n  version=\\\"1.1\\\"\\n  xmlns=\\\"http://www.w3.org/2000/svg\\\"\\n  viewBox=\\\"0 0 48 48\\\"\\n  xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\\n>\\n  <path\\n    fill=\\\"#EA4335\\\"\\n    d=\\\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\\\"\\n  ></path>\\n  <path\\n    fill=\\\"#4285F4\\\"\\n    d=\\\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\\\"\\n  ></path>\\n  <path\\n    fill=\\\"#FBBC05\\\"\\n    d=\\\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z\\\"\\n  ></path>\\n  <path\\n    fill=\\\"#34A853\\\"\\n    d=\\\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\\\"\\n  ></path>\\n  <path fill=\\\"none\\\" d=\\\"M0 0h48v48H0z\\\"></path>\\n</svg>\", {\"contents\":\"<svg\\n  version=\\\"1.1\\\"\\n  xmlns=\\\"http://www.w3.org/2000/svg\\\"\\n  viewBox=\\\"0 0 48 48\\\"\\n  xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\\n>\\n  <path\\n    fill=\\\"#EA4335\\\"\\n    d=\\\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\\\"\\n  ></path>\\n  <path\\n    fill=\\\"#4285F4\\\"\\n    d=\\\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\\\"\\n  ></path>\\n  <path\\n    fill=\\\"#FBBC05\\\"\\n    d=\\\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z\\\"\\n  ></path>\\n  <path\\n    fill=\\\"#34A853\\\"\\n    d=\\\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\\\"\\n  ></path>\\n  <path fill=\\\"none\\\" d=\\\"M0 0h48v48H0z\\\"></path>\\n</svg>\",\"moduleName\":\"ln-liga-os/components/keycloak-login-button/google-icon.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/keycloak-login-button/google-icon.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 21 21\\\">\\n  <rect x=\\\"1\\\" y=\\\"1\\\" width=\\\"9\\\" height=\\\"9\\\" fill=\\\"#f25022\\\" />\\n  <rect x=\\\"1\\\" y=\\\"11\\\" width=\\\"9\\\" height=\\\"9\\\" fill=\\\"#00a4ef\\\" />\\n  <rect x=\\\"11\\\" y=\\\"1\\\" width=\\\"9\\\" height=\\\"9\\\" fill=\\\"#7fba00\\\" />\\n  <rect x=\\\"11\\\" y=\\\"11\\\" width=\\\"9\\\" height=\\\"9\\\" fill=\\\"#ffb900\\\" />\\n</svg>\", {\"contents\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 21 21\\\">\\n  <rect x=\\\"1\\\" y=\\\"1\\\" width=\\\"9\\\" height=\\\"9\\\" fill=\\\"#f25022\\\" />\\n  <rect x=\\\"1\\\" y=\\\"11\\\" width=\\\"9\\\" height=\\\"9\\\" fill=\\\"#00a4ef\\\" />\\n  <rect x=\\\"11\\\" y=\\\"1\\\" width=\\\"9\\\" height=\\\"9\\\" fill=\\\"#7fba00\\\" />\\n  <rect x=\\\"11\\\" y=\\\"11\\\" width=\\\"9\\\" height=\\\"9\\\" fill=\\\"#ffb900\\\" />\\n</svg>\",\"moduleName\":\"ln-liga-os/components/keycloak-login-button/microsoft-icon.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/keycloak-login-button/microsoft-icon.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#let\\n  \\\"LigaAgentQuickstarts\\\" this.ligaAgent.quickstarts\\n  as |scope quickstarts|\\n}}\\n  {{#if (and quickstarts.length (not this.isClosed))}}\\n    <div class={{scope}}>\\n      <button\\n        class=\\\"{{scope}}-close\\\"\\n        type=\\\"button\\\"\\n        {{on \\\"click\\\" this.close}}\\n        aria-label=\\\"Close Quickstarts\\\"\\n      >\\n        <Icons::Close />\\n      </button>\\n      <ul class=\\\"{{scope}}-list\\\">\\n        {{#each quickstarts as |message|}}\\n          <li>\\n            <label\\n              for={{this.ligaAgent.anchorElementId}}\\n              class=\\\"{{scope}}-label\\\"\\n              {{on \\\"click\\\" (fn this.handleMessageClick message)}}\\n            >\\n              {{message.body}}\\n            </label>\\n          </li>\\n        {{/each}}\\n      </ul>\\n    </div>\\n  {{/if}}\\n{{/let}}\", {\"contents\":\"{{#let\\n  \\\"LigaAgentQuickstarts\\\" this.ligaAgent.quickstarts\\n  as |scope quickstarts|\\n}}\\n  {{#if (and quickstarts.length (not this.isClosed))}}\\n    <div class={{scope}}>\\n      <button\\n        class=\\\"{{scope}}-close\\\"\\n        type=\\\"button\\\"\\n        {{on \\\"click\\\" this.close}}\\n        aria-label=\\\"Close Quickstarts\\\"\\n      >\\n        <Icons::Close />\\n      </button>\\n      <ul class=\\\"{{scope}}-list\\\">\\n        {{#each quickstarts as |message|}}\\n          <li>\\n            <label\\n              for={{this.ligaAgent.anchorElementId}}\\n              class=\\\"{{scope}}-label\\\"\\n              {{on \\\"click\\\" (fn this.handleMessageClick message)}}\\n            >\\n              {{message.body}}\\n            </label>\\n          </li>\\n        {{/each}}\\n      </ul>\\n    </div>\\n  {{/if}}\\n{{/let}}\",\"moduleName\":\"ln-liga-os/components/liga-agent/quickstarts.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/liga-agent/quickstarts.hbs\"}});\nimport { inject as service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class LigaAgentQuickstartsComponent extends Component {\n  @service ligaAgent;\n\n  @tracked isClosed = false;\n\n  @action handleMessageClick(message) {\n    if (!this.ligaAgent.isAvailable) {\n      throw new Error('Liga Agent is not available');\n    }\n\n    this.ligaAgent.startNewConversation(message.body);\n  }\n\n  @action close() {\n    this.isClosed = true;\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<chat-webcomponent\\n  class=\\\"{{@class}} LigaAgentTab\\\"\\n  ...attributes\\n  api-url={{this.ligaAgent.apiUrl}}\\n  onerror={{this.onWidgetError}}\\n/>\", {\"contents\":\"<chat-webcomponent\\n  class=\\\"{{@class}} LigaAgentTab\\\"\\n  ...attributes\\n  api-url={{this.ligaAgent.apiUrl}}\\n  onerror={{this.onWidgetError}}\\n/>\",\"moduleName\":\"ln-liga-os/components/liga-agent/tab.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/liga-agent/tab.hbs\"}});\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\n\nexport default class LigaAgentTabComponent extends Component {\n  @service ligaAgent;\n  @service lnFlashMessages;\n\n  @action onWidgetError(errorEvent) {\n    const errorMessage = errorEvent?.detail?.message;\n    if (errorMessage) {\n      this.lnFlashMessages.addMessage('error', errorMessage);\n    }\n  }\n}\n","import { setComponentTemplate } from '@ember/component';\nimport template from 'ln-ember-toolkit/templates/components/ln-flash-messages/default-message-layout';\nimport DefaultMessageLayoutComponent from 'ln-ember-toolkit/components/ln-flash-messages/default-message-layout';\n\nexport default setComponentTemplate(template, DefaultMessageLayoutComponent);\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class=\\\"loader-mask-component {{if @show 'show'}}\\\">\\n  {{#if @logo}}\\n    <object aria-label=\\\"\\\" type=\\\"image/svg+xml\\\" data={{@logo}}></object>\\n  {{else}}\\n    <div class=\\\"loader-dots\\\">\\n      <div class=\\\"dot\\\"></div>\\n      <div class=\\\"dot\\\"></div>\\n      <div class=\\\"dot\\\"></div>\\n    </div>\\n  {{/if}}\\n</div>\", {\"contents\":\"<div ...attributes class=\\\"loader-mask-component {{if @show 'show'}}\\\">\\n  {{#if @logo}}\\n    <object aria-label=\\\"\\\" type=\\\"image/svg+xml\\\" data={{@logo}}></object>\\n  {{else}}\\n    <div class=\\\"loader-dots\\\">\\n      <div class=\\\"dot\\\"></div>\\n      <div class=\\\"dot\\\"></div>\\n      <div class=\\\"dot\\\"></div>\\n    </div>\\n  {{/if}}\\n</div>\",\"moduleName\":\"ln-liga-os/components/loader-mask.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/loader-mask.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class=\\\"loading-spinner-component\\\">\\n  <div class=\\\"loader-dots\\\">\\n    <div class=\\\"dot\\\"></div>\\n    <div class=\\\"dot\\\"></div>\\n    <div class=\\\"dot\\\"></div>\\n  </div>\\n</div>\", {\"contents\":\"<div ...attributes class=\\\"loading-spinner-component\\\">\\n  <div class=\\\"loader-dots\\\">\\n    <div class=\\\"dot\\\"></div>\\n    <div class=\\\"dot\\\"></div>\\n    <div class=\\\"dot\\\"></div>\\n  </div>\\n</div>\",\"moduleName\":\"ln-liga-os/components/loading-spinner.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/loading-spinner.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<form\\n  ...attributes\\n  aria-label=\\\"Login form\\\"\\n  class=\\\"login-form\\\"\\n  autocomplete=\\\"on\\\"\\n  {{did-insert this.setupBackNavigationListener}}\\n  {{will-destroy this.teardownBackNavigationListener}}\\n>\\n  <div\\n    class=\\\"msg {{if this.invalid 'is-invalid' 'is-successfull'}}\\\"\\n  >{{this.message}}</div>\\n\\n  {{#if (and this.nespressoKeycloakLoginUrl this.isNespressoEmail)}}\\n    <div\\n      class=\\\"msg is-warn\\\"\\n      {{did-insert this.didShowNespressoLoginNotice}}\\n      {{will-destroy this.willHideNespressoLoginNotice}}\\n    >\\n      <p>\\n        {{t \\\"nespresso-login-attempt-notice\\\"}}\\n\\n        <a href={{this.nespressoKeycloakLoginUrl}}>Nespresso</a>.\\n\\n        <br />\\n\\n        {{#if this.nespressoLoginRedirectCountdown}}\\n          {{t\\n            \\\"nespresso-login-attempt-automatic-redirect-notice\\\"\\n            seconds=this.nespressoLoginRedirectCountdown\\n          }}\\n        {{else}}\\n          {{t \\\"redirecting-now\\\"}}...\\n        {{/if}}\\n      </p>\\n    </div>\\n  {{/if}}\\n\\n  {{!--\\n    Login form is supposed to be the main element of the page.\\n    It's ok for the first input of this form to have autofocus.\\n  --}}\\n  {{!-- template-lint-disable no-autofocus-attribute --}}\\n  <Input\\n    @type=\\\"text\\\"\\n    @value={{this.username}}\\n    autocomplete=\\\"on\\\"\\n    autofocus\\n    class=\\\"email\\\"\\n    id=\\\"username\\\"\\n    name=\\\"username\\\"\\n    placeholder={{t \\\"email\\\"}}\\n    spellcheck=\\\"false\\\"\\n  />\\n  {{!-- template-lint-enable no-autofocus-attribute --}}\\n\\n  <div class=\\\"password-container\\\">\\n    <Input\\n      @type={{this.passwordInputType}}\\n      @value={{this.password}}\\n      class=\\\"password\\\"\\n      id=\\\"password\\\"\\n      name=\\\"password\\\"\\n      placeholder={{t \\\"password\\\"}}\\n    />\\n\\n    {{#if this.password.length}}\\n      <span\\n        {{on \\\"click\\\" this.togglePasswordIcon passive=true}}\\n        class=\\\"password-icon {{if this.showPasswordInput 'hide-icon'}}\\\"\\n        role=\\\"button\\\"\\n      >\\n      </span>\\n    {{/if}}\\n  </div>\\n\\n  <div class=\\\"options\\\">\\n    <Form::Button\\n      @error={{this.invalid}}\\n      @onClick={{this.login}}\\n      @tabindex=\\\"0\\\"\\n      class=\\\"login-button\\\"\\n      data-has-error={{this.loginInvalid}}\\n      data-test-element=\\\"login-button\\\"\\n    >\\n      {{t \\\"login\\\"}}\\n    </Form::Button>\\n\\n    {{#if (has-block \\\"options\\\")}}\\n      {{yield to=\\\"options\\\"}}\\n    {{/if}}\\n  </div>\\n</form>\", {\"contents\":\"<form\\n  ...attributes\\n  aria-label=\\\"Login form\\\"\\n  class=\\\"login-form\\\"\\n  autocomplete=\\\"on\\\"\\n  {{did-insert this.setupBackNavigationListener}}\\n  {{will-destroy this.teardownBackNavigationListener}}\\n>\\n  <div\\n    class=\\\"msg {{if this.invalid 'is-invalid' 'is-successfull'}}\\\"\\n  >{{this.message}}</div>\\n\\n  {{#if (and this.nespressoKeycloakLoginUrl this.isNespressoEmail)}}\\n    <div\\n      class=\\\"msg is-warn\\\"\\n      {{did-insert this.didShowNespressoLoginNotice}}\\n      {{will-destroy this.willHideNespressoLoginNotice}}\\n    >\\n      <p>\\n        {{t \\\"nespresso-login-attempt-notice\\\"}}\\n\\n        <a href={{this.nespressoKeycloakLoginUrl}}>Nespresso</a>.\\n\\n        <br />\\n\\n        {{#if this.nespressoLoginRedirectCountdown}}\\n          {{t\\n            \\\"nespresso-login-attempt-automatic-redirect-notice\\\"\\n            seconds=this.nespressoLoginRedirectCountdown\\n          }}\\n        {{else}}\\n          {{t \\\"redirecting-now\\\"}}...\\n        {{/if}}\\n      </p>\\n    </div>\\n  {{/if}}\\n\\n  {{!--\\n    Login form is supposed to be the main element of the page.\\n    It's ok for the first input of this form to have autofocus.\\n  --}}\\n  {{!-- template-lint-disable no-autofocus-attribute --}}\\n  <Input\\n    @type=\\\"text\\\"\\n    @value={{this.username}}\\n    autocomplete=\\\"on\\\"\\n    autofocus\\n    class=\\\"email\\\"\\n    id=\\\"username\\\"\\n    name=\\\"username\\\"\\n    placeholder={{t \\\"email\\\"}}\\n    spellcheck=\\\"false\\\"\\n  />\\n  {{!-- template-lint-enable no-autofocus-attribute --}}\\n\\n  <div class=\\\"password-container\\\">\\n    <Input\\n      @type={{this.passwordInputType}}\\n      @value={{this.password}}\\n      class=\\\"password\\\"\\n      id=\\\"password\\\"\\n      name=\\\"password\\\"\\n      placeholder={{t \\\"password\\\"}}\\n    />\\n\\n    {{#if this.password.length}}\\n      <span\\n        {{on \\\"click\\\" this.togglePasswordIcon passive=true}}\\n        class=\\\"password-icon {{if this.showPasswordInput 'hide-icon'}}\\\"\\n        role=\\\"button\\\"\\n      >\\n      </span>\\n    {{/if}}\\n  </div>\\n\\n  <div class=\\\"options\\\">\\n    <Form::Button\\n      @error={{this.invalid}}\\n      @onClick={{this.login}}\\n      @tabindex=\\\"0\\\"\\n      class=\\\"login-button\\\"\\n      data-has-error={{this.loginInvalid}}\\n      data-test-element=\\\"login-button\\\"\\n    >\\n      {{t \\\"login\\\"}}\\n    </Form::Button>\\n\\n    {{#if (has-block \\\"options\\\")}}\\n      {{yield to=\\\"options\\\"}}\\n    {{/if}}\\n  </div>\\n</form>\",\"moduleName\":\"ln-liga-os/components/login-form.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/login-form.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport config from 'ln-liga-os/config/environment';\n\nconst REDIRECT_TO_NESPRESSO_AFTER_SECS = 5;\n\nexport default class LoginFormComponent extends Component {\n  @service session;\n  @service router;\n  @service clientTheme;\n\n  @tracked username;\n  @tracked password;\n  @tracked message;\n  @tracked invalid;\n  @tracked showPasswordInput = false;\n\n  @tracked nespressoLoginRedirectCountdown = 0;\n\n  _nespressoRedirectCountdownInterval = null;\n\n  get nespressoKeycloakLoginUrl() {\n    const { keycloakPerOrigin } = config.APP;\n    const nespressoKeycloakConfig = keycloakPerOrigin?.find((item) => {\n      return item.config.clientId === 'nespresso-web';\n    });\n\n    if (nespressoKeycloakConfig && nespressoKeycloakConfig.origins) {\n      return nespressoKeycloakConfig.origins[0];\n    }\n\n    return null;\n  }\n\n  get isNespressoEmail() {\n    if (!this.nespressoKeycloakLoginUrl) {\n      return undefined;\n    }\n\n    if (!this.username) {\n      return false;\n    }\n\n    return /\\w+@(nespresso|nestle)\\.com$/i.test(this.username);\n  }\n\n  get passwordInputType() {\n    return this.showPasswordInput ? 'text' : 'password';\n  }\n\n  @action\n  didShowNespressoLoginNotice() {\n    this.nespressoLoginRedirectCountdown = REDIRECT_TO_NESPRESSO_AFTER_SECS;\n\n    this._nespressoRedirectCountdownInterval = setInterval(() => {\n      this.nespressoLoginRedirectCountdown -= 1;\n\n      if (this.nespressoLoginRedirectCountdown <= 0) {\n        clearInterval(this._nespressoRedirectCountdownInterval);\n\n        location.href = this.nespressoKeycloakLoginUrl;\n      }\n    }, 1000);\n  }\n\n  @action\n  willHideNespressoLoginNotice() {\n    this.nespressoLoginRedirectCountdown = 0;\n    if (this._nespressoRedirectCountdownInterval) {\n      clearInterval(this._nespressoRedirectCountdownInterval);\n      this._nespressoRedirectCountdownInterval = null;\n    }\n  }\n\n  @action\n  didNavigateBack(event) {\n    if (event.persisted && this._nespressoRedirectCountdownInterval) {\n      this.willHideNespressoLoginNotice();\n      this.didShowNespressoLoginNotice();\n    }\n  }\n\n  @action\n  setupBackNavigationListener() {\n    window.addEventListener('pageshow', this.didNavigateBack);\n  }\n\n  @action\n  teardownBackNavigationListener() {\n    window.removeEventListener('pageshow', this.didNavigateBack);\n  }\n\n  @action\n  togglePasswordIcon() {\n    this.showPasswordInput = !this.showPasswordInput;\n  }\n\n  @action\n  login() {\n    this.resetMessage();\n\n    this.session\n      .auth({\n        legacy: true,\n        password: this.password || '',\n        username: this.username || '',\n      })\n      .then(() => {\n        this.resetMessage();\n\n        this.router.transitionTo('/!');\n      })\n      .catch((err) => {\n        const message = err.message || 'Login failed!';\n        this.setError(message);\n      });\n  }\n\n  setError(msg) {\n    this.invalid = true;\n    this.message = msg;\n  }\n\n  resetMessage() {\n    this.invalid = false;\n    this.message = null;\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes aria-label={{this.name}} class={{this.className}}>\\n  <div class=\\\"ring\\\" />\\n\\n  {{#if @item.icon_url}}\\n    <div class=\\\"icon\\\" {{css-props this.iconCssProps}} />\\n  {{else}}\\n    <div class=\\\"icon\\\">\\n      <span class=\\\"name\\\"><span class=\\\"centered\\\">{{@item.name}}</span></span>\\n    </div>\\n  {{/if}}\\n</div>\", {\"contents\":\"<div ...attributes aria-label={{this.name}} class={{this.className}}>\\n  <div class=\\\"ring\\\" />\\n\\n  {{#if @item.icon_url}}\\n    <div class=\\\"icon\\\" {{css-props this.iconCssProps}} />\\n  {{else}}\\n    <div class=\\\"icon\\\">\\n      <span class=\\\"name\\\"><span class=\\\"centered\\\">{{@item.name}}</span></span>\\n    </div>\\n  {{/if}}\\n</div>\",\"moduleName\":\"ln-liga-os/components/navigation-item.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/navigation-item.hbs\"}});\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\n\nexport default class NavigationItemComponent extends Component {\n  @service navigation;\n\n  get className() {\n    const result = ['navigation-item-component'];\n    if (this.isActive) {\n      result.push('is-active');\n    }\n    if (!this.args.item.icon_url) {\n      result.push('has-no-icon');\n    }\n    return result.join(' ');\n  }\n\n  get iconCssProps() {\n    return {\n      'background-image': `url(${this.args.item.icon_url})`,\n    };\n  }\n\n  get name() {\n    return this.args.item.name;\n  }\n\n  get isActive() {\n    return this.args.item.id === this.navigation.currentItem?.id;\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div class=\\\"password-reset-view {{if this.showResetDone \\\"show-reset-done\\\"}} {{this.clientTheme.className}}\\\">\\n  <div class=\\\"logo-wrapper {{this.clientTheme.className}}\\\">\\n    <div class=\\\"logo\\\"></div>\\n    {{#if (eq this.clientTheme.className \\\"theme-amg\\\")}}\\n      <div class=\\\"sub-logo\\\">\\n        <span></span>\\n      </div>\\n    {{/if}}\\n  </div>\\n  <div class=\\\"form-wrap\\\">\\n    <div class=\\\"password-resetted-info\\\">\\n      <div class=\\\"big-check-icon-container\\\"><CheckIcon /></div>\\n      <h2 class=\\\"title\\\">{{t \\\"password-reset-was-successful\\\"}}</h2>\\n      <h2 class=\\\"subtitle\\\">{{t \\\"your-password-has-been-changed-successfully\\\"}}</h2>\\n\\n      <Form::Button\\n        @onClick={{@goToLogin}}\\n        class=\\\"go-to-login-button\\\"\\n        data-test-element=\\\"go-to-login-button\\\"\\n      >\\n        {{t \\\"login-now\\\"}}\\n      </Form::Button>\\n    </div>\\n\\n    <form class=\\\"reset-password-form\\\" autocomplete=\\\"off\\\">\\n      <div class=\\\"title-container\\\">\\n        <h2>{{t \\\"choose-your-new-password\\\"}}</h2>\\n      </div>\\n\\n      <div class=\\\"password-container\\\">\\n        <Input\\n          @type=\\\"password\\\"\\n          @value={{this.password}}\\n          autocomplete=\\\"off\\\"\\n          class=\\\"password\\\"\\n          id=\\\"password1\\\"\\n          name=\\\"password1\\\"\\n          placeholder={{t \\\"new-password\\\"}}\\n        />\\n\\n        <CheckIcon @isCorrect={{this.isAllConditionsMet}} data-test-element=\\\"password-check-icon\\\" />\\n      </div>\\n      <div class=\\\"password-container\\\">\\n        <Input\\n          @type=\\\"password\\\"\\n          @value={{this.confirmPassword}}\\n          autocomplete=\\\"off\\\"\\n          class=\\\"password-confirm\\\"\\n          id=\\\"password2\\\"\\n          name=\\\"password2\\\"\\n          placeholder={{t \\\"confirm-password\\\"}}\\n        />\\n\\n        <CheckIcon @isCorrect={{this.isPasswordsMatch}} data-test-element=\\\"password-confirm-check-icon\\\" />\\n      </div>\\n\\n      <section class=\\\"conditions-container\\\">\\n        {{#each this.conditions as |condition|}}\\n          <FormCondition @label={{condition.label}} @isMet={{condition.isMet}} />\\n        {{/each}}\\n      </section>\\n\\n      <div class=\\\"options\\\">\\n        <Form::Button\\n          @disabled={{not this.canResetPassword}}\\n          @onClick={{this.resetPassword}}\\n          class=\\\"reset-password-button\\\"\\n          data-test-element=\\\"submit-button\\\"\\n        >\\n          {{t \\\"submit-new-password\\\"}}\\n        </Form::Button>\\n      </div>\\n    </form>\\n  </div>\\n</div>\\n\\n<ScrollButton @scrollingElementSelector=\\\".password-reset-view\\\" @theme={{this.clientTheme.className}} />\\n\", {\"contents\":\"<div class=\\\"password-reset-view {{if this.showResetDone \\\"show-reset-done\\\"}} {{this.clientTheme.className}}\\\">\\n  <div class=\\\"logo-wrapper {{this.clientTheme.className}}\\\">\\n    <div class=\\\"logo\\\"></div>\\n    {{#if (eq this.clientTheme.className \\\"theme-amg\\\")}}\\n      <div class=\\\"sub-logo\\\">\\n        <span></span>\\n      </div>\\n    {{/if}}\\n  </div>\\n  <div class=\\\"form-wrap\\\">\\n    <div class=\\\"password-resetted-info\\\">\\n      <div class=\\\"big-check-icon-container\\\"><CheckIcon /></div>\\n      <h2 class=\\\"title\\\">{{t \\\"password-reset-was-successful\\\"}}</h2>\\n      <h2 class=\\\"subtitle\\\">{{t \\\"your-password-has-been-changed-successfully\\\"}}</h2>\\n\\n      <Form::Button\\n        @onClick={{@goToLogin}}\\n        class=\\\"go-to-login-button\\\"\\n        data-test-element=\\\"go-to-login-button\\\"\\n      >\\n        {{t \\\"login-now\\\"}}\\n      </Form::Button>\\n    </div>\\n\\n    <form class=\\\"reset-password-form\\\" autocomplete=\\\"off\\\">\\n      <div class=\\\"title-container\\\">\\n        <h2>{{t \\\"choose-your-new-password\\\"}}</h2>\\n      </div>\\n\\n      <div class=\\\"password-container\\\">\\n        <Input\\n          @type=\\\"password\\\"\\n          @value={{this.password}}\\n          autocomplete=\\\"off\\\"\\n          class=\\\"password\\\"\\n          id=\\\"password1\\\"\\n          name=\\\"password1\\\"\\n          placeholder={{t \\\"new-password\\\"}}\\n        />\\n\\n        <CheckIcon @isCorrect={{this.isAllConditionsMet}} data-test-element=\\\"password-check-icon\\\" />\\n      </div>\\n      <div class=\\\"password-container\\\">\\n        <Input\\n          @type=\\\"password\\\"\\n          @value={{this.confirmPassword}}\\n          autocomplete=\\\"off\\\"\\n          class=\\\"password-confirm\\\"\\n          id=\\\"password2\\\"\\n          name=\\\"password2\\\"\\n          placeholder={{t \\\"confirm-password\\\"}}\\n        />\\n\\n        <CheckIcon @isCorrect={{this.isPasswordsMatch}} data-test-element=\\\"password-confirm-check-icon\\\" />\\n      </div>\\n\\n      <section class=\\\"conditions-container\\\">\\n        {{#each this.conditions as |condition|}}\\n          <FormCondition @label={{condition.label}} @isMet={{condition.isMet}} />\\n        {{/each}}\\n      </section>\\n\\n      <div class=\\\"options\\\">\\n        <Form::Button\\n          @disabled={{not this.canResetPassword}}\\n          @onClick={{this.resetPassword}}\\n          class=\\\"reset-password-button\\\"\\n          data-test-element=\\\"submit-button\\\"\\n        >\\n          {{t \\\"submit-new-password\\\"}}\\n        </Form::Button>\\n      </div>\\n    </form>\\n  </div>\\n</div>\\n\\n<ScrollButton @scrollingElementSelector=\\\".password-reset-view\\\" @theme={{this.clientTheme.className}} />\\n\",\"moduleName\":\"ln-liga-os/components/password-reset.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/password-reset.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\n\nexport default class PasswordResetComponent extends Component {\n  @service api;\n  @service clientTheme;\n  @service lnFlashMessages;\n  @service intl;\n\n  @tracked confirmPassword = null;\n\n  @tracked password = null;\n\n  @tracked showResetDone = false;\n\n  get conditions() {\n    const minLength = 8;\n    return [\n      {\n        isMet: (this.password || '').length >= minLength,\n        label: this.intl.t('at-least-n-characters', { n: minLength }),\n      },\n      {\n        isMet: /[A-Z]/.test(this.password || ''),\n        label: this.intl.t('one-uppercase-character'),\n      },\n      {\n        isMet: /[a-z]/.test(this.password || ''),\n        label: this.intl.t('one-lowercase-character'),\n      },\n      {\n        isMet: /[\\d#$()*+,-/:;=?@[\\]^_]/.test(this.password || ''),\n        label: this.intl.t('one-number-or-special-character'),\n      },\n    ];\n  }\n\n  get isAllConditionsMet() {\n    return this.conditions.every(({ isMet }) => isMet);\n  }\n\n  get isPasswordsMatch() {\n    return this.password && this.password === this.confirmPassword;\n  }\n\n  get canResetPassword() {\n    return !!(this.isAllConditionsMet && this.isPasswordsMatch);\n  }\n\n  @action\n  resetPassword() {\n    const data = { password: this.password, token: this.args.token };\n    this.api\n      .partialUpdate('myliga', ['security', 'password_resets'], data)\n      .then(() => {\n        this.showResetDone = true;\n      })\n      .catch((error) => {\n        this.lnFlashMessages.addErrorMessages(error);\n      });\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<button\\n  ...attributes\\n  class={{this.className}}\\n  type=\\\"button\\\"\\n  {{on \\\"click\\\" this.scrollToBottom passive=true}}\\n>\\n  <svg xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" width=\\\"20\\\" height=\\\"15\\\" viewBox=\\\"0 0 12 10\\\">\\n    <line x1=\\\"0\\\" y1=\\\"5\\\" x2=\\\"10\\\" y2=\\\"5\\\" stroke=\\\"#000\\\" strike-width=\\\"1px\\\" />\\n    <line x1=\\\"6\\\" y1=\\\"0\\\" x2=\\\"11\\\" y2=\\\"5\\\" stroke=\\\"#000\\\" strike-width=\\\"1px\\\" />\\n    <line x1=\\\"6\\\" y1=\\\"10\\\" x2=\\\"11\\\" y2=\\\"5\\\" stroke=\\\"#000\\\" strike-width=\\\"1px\\\" />\\n  </svg>\\n</button>\", {\"contents\":\"<button\\n  ...attributes\\n  class={{this.className}}\\n  type=\\\"button\\\"\\n  {{on \\\"click\\\" this.scrollToBottom passive=true}}\\n>\\n  <svg xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" width=\\\"20\\\" height=\\\"15\\\" viewBox=\\\"0 0 12 10\\\">\\n    <line x1=\\\"0\\\" y1=\\\"5\\\" x2=\\\"10\\\" y2=\\\"5\\\" stroke=\\\"#000\\\" strike-width=\\\"1px\\\" />\\n    <line x1=\\\"6\\\" y1=\\\"0\\\" x2=\\\"11\\\" y2=\\\"5\\\" stroke=\\\"#000\\\" strike-width=\\\"1px\\\" />\\n    <line x1=\\\"6\\\" y1=\\\"10\\\" x2=\\\"11\\\" y2=\\\"5\\\" stroke=\\\"#000\\\" strike-width=\\\"1px\\\" />\\n  </svg>\\n</button>\",\"moduleName\":\"ln-liga-os/components/scroll-button.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/scroll-button.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\n\nexport default class ScrollButton extends Component {\n  @tracked isVisible = false;\n\n  constructor(...args) {\n    super(...args);\n    this.setVisibility();\n    window.addEventListener(\n      'orientationchange',\n      this.handleWindowOrientationChange\n    );\n    schedule('afterRender', this, this.setupScrollingElementEvent);\n  }\n\n  get className() {\n    const result = ['scroll-button-component'];\n    if (this.args.theme) {\n      result.push(this.args.theme);\n    }\n    if (this.isVisible) {\n      result.push('is-visible');\n    }\n    return result.join(' ');\n  }\n\n  get scrollingElement() {\n    if (!this.args.scrollingElementSelector) {\n      return undefined;\n    }\n    return document.querySelector(this.args.scrollingElementSelector);\n  }\n\n  willDestroy() {\n    super.willDestroy(...arguments);\n    this.scrollingElement?.removeEventListener('scroll', this.setVisibility);\n    window.removeEventListener(\n      'orientationchange',\n      this.handleWindowOrientationChange\n    );\n  }\n\n  @action\n  handleWindowOrientationChange() {\n    schedule('afterRender', this, this.setVisibility);\n  }\n\n  @action\n  scrollToBottom() {\n    this.scrollingElement?.scrollTo({\n      behavior: 'smooth',\n      top: window.innerHeight,\n    });\n  }\n\n  @action\n  setupScrollingElementEvent() {\n    this.scrollingElement?.addEventListener('scroll', this.setVisibility);\n  }\n\n  @action\n  setVisibility() {\n    if (!this.scrollingElement) {\n      return;\n    }\n\n    this.isVisible =\n      window.innerHeight < this.scrollingElement.scrollHeight &&\n      this.scrollingElement.scrollTop + window.innerHeight <\n        this.scrollingElement.scrollHeight;\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div\\n  ...attributes\\n  class=\\\"search-input-component {{if this.hasValue 'has-value'}}\\\"\\n>\\n  <input id={{this.inputId}} type=\\\"text\\\" value={{@value}} {{on \\\"input\\\" this.handleInput passive=true}} />\\n  <button type=\\\"button\\\" {{on \\\"click\\\" this.clear passive=true}} />\\n</div>\", {\"contents\":\"<div\\n  ...attributes\\n  class=\\\"search-input-component {{if this.hasValue 'has-value'}}\\\"\\n>\\n  <input id={{this.inputId}} type=\\\"text\\\" value={{@value}} {{on \\\"input\\\" this.handleInput passive=true}} />\\n  <button type=\\\"button\\\" {{on \\\"click\\\" this.clear passive=true}} />\\n</div>\",\"moduleName\":\"ln-liga-os/components/search-input.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/search-input.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { debounce } from '@ember/runloop';\nimport { guidFor } from '@ember/object/internals';\n\nexport default class SearchInputComponent extends Component {\n  inputId = `input-${guidFor(this)}`;\n\n  get hasValue() {\n    return !!this.args.value;\n  }\n\n  @action\n  clear() {\n    const element = document.getElementById(this.inputId);\n    element.value = '';\n    element.dispatchEvent(new InputEvent('input'));\n    element.focus();\n  }\n\n  @action\n  handleInput(event) {\n    debounce(this, this.args.onChange, event.target.value, 250);\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<button\\n  type=\\\"button\\\"\\n  class=\\\"SentryFeedbackButton {{@class}}\\\"\\n  {{this.attachSentryFeedback this._submitCount}}\\n  ...attributes\\n>\\n  <SvgIcon @name=\\\"headset\\\" class=\\\"SentryFeedbackButton-icon\\\" />\\n</button>\", {\"contents\":\"<button\\n  type=\\\"button\\\"\\n  class=\\\"SentryFeedbackButton {{@class}}\\\"\\n  {{this.attachSentryFeedback this._submitCount}}\\n  ...attributes\\n>\\n  <SvgIcon @name=\\\"headset\\\" class=\\\"SentryFeedbackButton-icon\\\" />\\n</button>\",\"moduleName\":\"ln-liga-os/components/sentry-feedback-button.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/sentry-feedback-button.hbs\"}});\nimport Component from '@glimmer/component';\nimport { getFeedback } from '@sentry/ember';\nimport { tracked } from '@glimmer/tracking';\nimport { SUBMIT_SUCCESS_EVENT } from 'ln-liga-os/utils/sentry-feedback';\nimport { modifier } from 'ember-modifier';\n\nexport default class SentryFeedbackButton extends Component {\n  // We don't want Sentry built-in message appear after submit,\n  // so we remove and re-create the widget\n  //\n  // This props helps us to trigger re-creating the feedback widget on each submit\n  @tracked _submitCount = 0;\n\n  attachSentryFeedback = modifier((element, [submitCount]) => {\n    // we have to declare submitCount as a dependency here\n    // to make it tracked and re-run the modifier when it changes.\n    // However we don't actually use it in the function body,\n    // so we just reference it to avoid linting errors.\n    submitCount;\n\n    const feedback = getFeedback();\n    if (!feedback) {\n      console.warn(\n        '[sentry-feedback-button] Sentry Feedback is not initialized'\n      );\n      return;\n    }\n\n    const unsubscribe = feedback.attachTo(element);\n\n    window.addEventListener(SUBMIT_SUCCESS_EVENT, this.#didCreateTicket);\n\n    return () => {\n      unsubscribe();\n\n      window.removeEventListener(SUBMIT_SUCCESS_EVENT, this.#didCreateTicket);\n\n      feedback.remove();\n\n      // For some does not remove the shadow DOM element automatically\n      // It cleans up the most of internals but leaves the container div\n      // Let's clean it up manually, cause multiple same id elements feels wrong\n      document.querySelector('#sentry-feedback')?.remove();\n    };\n  });\n\n  #didCreateTicket = () => {\n    this._submitCount += 1;\n  };\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class={{this.className}}>\\n  <div class=\\\"startup-mask-component-footer\\\">\\n    <p>\\n      <a href={{this.clientTheme.support.url}} target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">\\n        <img class=\\\"help-icon\\\" src=\\\"assets/images/svg/help-white.svg\\\" alt=\\\"help-icon\\\">\\n      </a>\\n      <a href=\\\"mailto:{{this.clientTheme.support.email}}\\\">\\n        {{t \\\"help\\\"}}\\n      </a>\\n      <span class=\\\"divider\\\">|</span>\\n      <a href=\\\"mailto:{{this.clientTheme.support.email}}\\\">\\n        {{t \\\"contact\\\"}}\\n      </a>\\n      <span class=\\\"divider\\\">|</span>\\n      <span>&copy; <a href={{this.appConfig.homepage}} target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">LIGANOVA</a></span>\\n    </p>\\n  </div>\\n</div>\", {\"contents\":\"<div ...attributes class={{this.className}}>\\n  <div class=\\\"startup-mask-component-footer\\\">\\n    <p>\\n      <a href={{this.clientTheme.support.url}} target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">\\n        <img class=\\\"help-icon\\\" src=\\\"assets/images/svg/help-white.svg\\\" alt=\\\"help-icon\\\">\\n      </a>\\n      <a href=\\\"mailto:{{this.clientTheme.support.email}}\\\">\\n        {{t \\\"help\\\"}}\\n      </a>\\n      <span class=\\\"divider\\\">|</span>\\n      <a href=\\\"mailto:{{this.clientTheme.support.email}}\\\">\\n        {{t \\\"contact\\\"}}\\n      </a>\\n      <span class=\\\"divider\\\">|</span>\\n      <span>&copy; <a href={{this.appConfig.homepage}} target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">LIGANOVA</a></span>\\n    </p>\\n  </div>\\n</div>\",\"moduleName\":\"ln-liga-os/components/startup-mask.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/startup-mask.hbs\"}});\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport config from 'ln-liga-os/config/environment';\n\n/**\n * Startup Mask Component\n *\n * @todo Check if we need this component\n * The component seems to be outdated and has its content\n * always rendered with \"display: none\"\n * @see \"app/styles/components/_startup-mask.scss\"\n */\nexport default class StartupMaskComponent extends Component {\n  @service clientTheme;\n  @service session;\n  @service state;\n\n  appConfig = config.APP.config;\n\n  get className() {\n    const result = ['startup-mask-component', this.clientTheme.className];\n\n    const { appLoaded } = this.state;\n    result.push(appLoaded ? 'app-loaded' : 'app-not-loaded');\n\n    const { isLoggedIn } = this.session;\n    if (isLoggedIn) {\n      result.push('logged-in');\n    }\n\n    if (!isLoggedIn || !appLoaded) {\n      result.push('show');\n    }\n\n    return result.join(' ');\n  }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"<div ...attributes class={{this.className}}>\\n  {{#if @tasks}}\\n    <div class=\\\"list-legend\\\">{{@title}}</div>\\n\\n    {{#each @tasks as |task|}}\\n      <div\\n        class=\\\"list-item {{if (eq task this.taskWithPopup) \\\"has-open-popup\\\"}}\\\"\\n        {{on \\\"mouseleave\\\" (fn this.closeInfos task) passive=true}}\\n      >\\n        <div\\n          class=\\\"list-item-content\\\"\\n          role=\\\"button\\\"\\n          {{on \\\"click\\\" (fn this.openTask task) passive=true}}\\n        >\\n          <div class=\\\"date\\\">\\n            {{or task.end_date \\\"-\\\"}}\\n          </div>\\n\\n          <div class=\\\"infos\\\">\\n            <div class=\\\"name\\\">\\n              {{if task.isMilestone (t \\\"milestone\\\")}}\\n              <span>{{task.name}}</span>\\n            </div>\\n            <div class=\\\"project\\\">{{task.project_name}}</div>\\n          </div>\\n        </div>\\n\\n        <button {{on \\\"click\\\" (fn this.toggleInfos task)}} class=\\\"icon info\\\" type=\\\"button\\\" />\\n\\n        <div class=\\\"infos-popup\\\">\\n          {{#if task.start_date}}\\n            <span class=\\\"label\\\">{{t \\\"start\\\"}}</span>\\n            <span data-test-field=\\\"start-date\\\">{{task.start_date}}</span>\\n          {{/if}}\\n          {{#if task.end_date}}\\n            <span class=\\\"label\\\">{{t \\\"due\\\"}}</span>\\n            <span data-test-field=\\\"end-date\\\">{{task.end_date}}</span>\\n          {{/if}}\\n          <span class=\\\"label\\\">{{t \\\"assigned-from\\\"}}</span>\\n          <span data-test-field=\\\"assigned-from\\\">{{task.author.forename}} {{task.author.name}}</span>\\n        </div>\\n      </div>\\n    {{/each}}\\n  {{/if}}\\n</div>\", {\"contents\":\"<div ...attributes class={{this.className}}>\\n  {{#if @tasks}}\\n    <div class=\\\"list-legend\\\">{{@title}}</div>\\n\\n    {{#each @tasks as |task|}}\\n      <div\\n        class=\\\"list-item {{if (eq task this.taskWithPopup) \\\"has-open-popup\\\"}}\\\"\\n        {{on \\\"mouseleave\\\" (fn this.closeInfos task) passive=true}}\\n      >\\n        <div\\n          class=\\\"list-item-content\\\"\\n          role=\\\"button\\\"\\n          {{on \\\"click\\\" (fn this.openTask task) passive=true}}\\n        >\\n          <div class=\\\"date\\\">\\n            {{or task.end_date \\\"-\\\"}}\\n          </div>\\n\\n          <div class=\\\"infos\\\">\\n            <div class=\\\"name\\\">\\n              {{if task.isMilestone (t \\\"milestone\\\")}}\\n              <span>{{task.name}}</span>\\n            </div>\\n            <div class=\\\"project\\\">{{task.project_name}}</div>\\n          </div>\\n        </div>\\n\\n        <button {{on \\\"click\\\" (fn this.toggleInfos task)}} class=\\\"icon info\\\" type=\\\"button\\\" />\\n\\n        <div class=\\\"infos-popup\\\">\\n          {{#if task.start_date}}\\n            <span class=\\\"label\\\">{{t \\\"start\\\"}}</span>\\n            <span data-test-field=\\\"start-date\\\">{{task.start_date}}</span>\\n          {{/if}}\\n          {{#if task.end_date}}\\n            <span class=\\\"label\\\">{{t \\\"due\\\"}}</span>\\n            <span data-test-field=\\\"end-date\\\">{{task.end_date}}</span>\\n          {{/if}}\\n          <span class=\\\"label\\\">{{t \\\"assigned-from\\\"}}</span>\\n          <span data-test-field=\\\"assigned-from\\\">{{task.author.forename}} {{task.author.name}}</span>\\n        </div>\\n      </div>\\n    {{/each}}\\n  {{/if}}\\n</div>\",\"moduleName\":\"ln-liga-os/components/task-list.hbs\",\"parseOptions\":{\"srcName\":\"ln-liga-os/components/task-list.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\n\nexport default class TaskListComponent extends Component {\n  @service navigation;\n\n  @tracked taskWithPopup = null;\n\n  get className() {\n    const result = ['task-list-component'];\n    if (this.taskWithPopup) {\n      result.push('has-open-popup');\n    }\n    if (this.isEmpty) {\n      result.push('is-empty');\n    }\n    return result.join(' ');\n  }\n\n  get isEmpty() {\n    return !this.args.tasks || !this.args.tasks.length;\n  }\n\n  @action\n  closeInfos() {\n    this.taskWithPopup = null;\n    this.args.afterPopupVisibilityChange?.(false);\n  }\n\n  @action\n  openTask(task) {\n    const taskId = task.id;\n    const contextType = task.get('context_type');\n    const resourceName =\n      contextType === 'Project' ? 'ProjectTask' : 'EventTask';\n\n    if (this.navigation.canOpenResource(resourceName, taskId)) {\n      this.navigation.openResource(resourceName, taskId);\n      this.args.afterOpenTask?.();\n    }\n  }\n\n  @action\n  toggleInfos(task, event) {\n    event.stopPropagation();\n    const isPopupOpen = this.taskWithPopup === task;\n    if (isPopupOpen) {\n      this.taskWithPopup = null;\n    } else {\n      this.taskWithPopup = task;\n    }\n    this.args.afterPopupVisibilityChange?.(!isPopupOpen);\n  }\n}\n","import Controller from '@ember/controller';\nimport { inject as service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { bind } from '@ember/runloop';\nimport { isSupportedBrowser, formatSupportedBrowsers } from '../utils/browser';\nimport config from 'ln-liga-os/config/environment';\n\nexport default class ApplicationController extends Controller {\n  @service clientTheme;\n  @service microMenu;\n  @service state;\n\n  @tracked browserIsSupported;\n\n  @tracked browserSupportedMsg;\n\n  constructor(...args) {\n    super(...args);\n\n    // TODO is there a better solution for this?\n    // Set Class `resizing` to disable animations on resizing\n    let resizeTimer;\n    window.addEventListener(\n      'resize',\n      bind(this, () => {\n        clearTimeout(resizeTimer);\n        document.body.classList.add('resizing');\n        resizeTimer = setTimeout(\n          () => document.body.classList.remove('resizing'),\n          10\n        );\n      })\n    );\n\n    const onOrientationChange = () => {\n      // Set the body height, so that mobile browsers don't overlay content with\n      // their UI.\n      document.body.style.height = '100vh';\n      if (window.innerHeight !== document.body.offsetHeight) {\n        document.body.style.height = window.innerHeight;\n      }\n    };\n\n    window.addEventListener('resize', onOrientationChange);\n    window.addEventListener('orientationchange', onOrientationChange);\n    onOrientationChange();\n\n    const supportedBrowsers = config.APP.config.supportedBrowsers;\n    this.browserIsSupported =\n      !supportedBrowsers || isSupportedBrowser(supportedBrowsers);\n    this.browserSupportedMsg = formatSupportedBrowsers(supportedBrowsers ?? []);\n  }\n\n  get isAppLoaded() {\n    return this.state.appLoaded;\n  }\n}\n","import Controller from '@ember/controller';\nimport { inject as service } from '@ember/service';\n\nexport default class ErrorController extends Controller {\n  @service router;\n  @service session;\n  @service clientTheme;\n\n  backToLogin = () => {\n    return this.session.triggerLogout().then(() => {\n      this.router.transitionTo('login');\n    });\n  };\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\n\nexport default class LoginController extends Controller {\n  @service api;\n  @service clientTheme;\n  @service lnFlashMessages;\n  @service session;\n\n  @tracked showPasswordReset = false;\n\n  @tracked showPasswordResetRequested = false;\n\n  @tracked username = null;\n\n  @tracked isLegacyLoginFormActive = false;\n\n  get keycloakLoginOptionGroups() {\n    if (!this.session.isKeycloak) {\n      return [];\n    }\n\n    const groups = [];\n    this.session.adapter.loginOptions?.forEach((option) => {\n      const type = option.type || 'default';\n      let group = groups.find((g) => g.type === type);\n      if (!group) {\n        group = { type: type, options: [] };\n        groups.push(group);\n      }\n      group.options.push(option);\n    });\n\n    return groups;\n  }\n\n  get supportsExtraLegacyLogin() {\n    return (\n      this.session.isKeycloak &&\n      this.session.adapter.clientId === 'liganova-web'\n    );\n  }\n\n  get loggedIn() {\n    return this.session.isLoggedIn;\n  }\n\n  @action\n  goToLogin() {\n    this.username = '';\n    this.showPasswordReset = false;\n    this.showPasswordResetRequested = false;\n  }\n\n  @action\n  togglePasswordReset() {\n    this.showPasswordReset = !this.showPasswordReset;\n  }\n\n  @action\n  passwordReset() {\n    return this.api\n      .create('myliga', ['security', 'password_resets'], {\n        email_or_username: this.username,\n      })\n      .then(() => {\n        this.showPasswordReset = false;\n        this.showPasswordResetRequested = true;\n      })\n      .catch((error) => {\n        this.lnFlashMessages.addErrorMessages(error);\n      });\n  }\n}\n","import Controller from '@ember/controller';\nimport { inject as service } from '@ember/service';\n\nexport default class AppsController extends Controller {\n  @service navigation;\n  @service state;\n  @service communicator;\n  @service ligaAgent;\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\n\nexport default class PasswordResetController extends Controller {\n  @service router;\n\n  get token() {\n    return this.model.token;\n  }\n\n  @action\n  goToLogin() {\n    this.router.transitionTo('login');\n  }\n}\n","import setupDeprecationWorkflow from 'ember-cli-deprecation-workflow';\n\nsetupDeprecationWorkflow({\n  throwOnUnhandled: true,\n  workflow: [],\n});\n","export default {\n  time: {\n    hhmmss: {\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric',\n    },\n  },\n  date: {\n    hhmmss: {\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric',\n    },\n  },\n  number: {\n    compact: {\n      notation: 'compact',\n    },\n    EUR: {\n      style: 'currency',\n      currency: 'EUR',\n    },\n    USD: {\n      style: 'currency',\n      currency: 'USD',\n    },\n  },\n};\n","import { helper } from '@ember/component/helper';\nimport config from '../config/environment';\nimport {\n  shaRegExp,\n  versionRegExp,\n  versionExtendedRegExp,\n} from 'ember-cli-app-version/utils/regexp';\n\nexport function appVersion(_, hash = {}) {\n  const version = config.APP.version;\n  // e.g. 1.0.0-alpha.1+4jds75hf\n\n  // Allow use of 'hideSha' and 'hideVersion' For backwards compatibility\n  let versionOnly = hash.versionOnly || hash.hideSha;\n  let shaOnly = hash.shaOnly || hash.hideVersion;\n\n  let match = null;\n\n  if (versionOnly) {\n    if (hash.showExtended) {\n      match = version.match(versionExtendedRegExp); // 1.0.0-alpha.1\n    }\n    // Fallback to just version\n    if (!match) {\n      match = version.match(versionRegExp); // 1.0.0\n    }\n  }\n\n  if (shaOnly) {\n    match = version.match(shaRegExp); // 4jds75hf\n  }\n\n  return match ? match[0] : version;\n}\n\nexport default helper(appVersion);\n","import { helper } from '@ember/component/helper';\nimport { dasherize as _dasherize } from '@ember/string';\n\nexport default helper(function dasherize([string]) {\n  return _dasherize(string ?? '');\n});\n","import Helper from '@ember/component/helper';\nimport { inject as service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport moment from 'moment-timezone';\nimport config from 'ln-liga-os/config/environment';\n\nexport default class DateTimeHelper extends Helper {\n  @service state;\n\n  @tracked timeoutId = null;\n\n  compute([date], { relative = false }) {\n    this.timeoutId = null;\n    const momentDate = moment(date);\n    moment.locale(this.state.getLanguage());\n\n    if (date && momentDate.isValid()) {\n      if (relative) {\n        if (moment().diff(momentDate, 'days') < 1) {\n          let timeoutSec = 15;\n          if (moment().diff(momentDate, 'hours') > 0) {\n            timeoutSec = 300;\n          }\n\n          this.timeoutId = setTimeout(() => {\n            this.recompute();\n          }, timeoutSec * 1000);\n        }\n\n        if (moment().diff(momentDate, 'hours') < 24) {\n          return momentDate.fromNow();\n        }\n      }\n\n      return momentDate.format(this.getFormat());\n    }\n\n    return;\n  }\n\n  getFormat() {\n    const language = this.state.getLanguage();\n    return (\n      config.APP.config.formats?.[language]?.date_time ||\n      config.APP.config.format?.date_time ||\n      'DD-MM-YYYY - HH:mm'\n    );\n  }\n\n  willDestroy() {\n    if (this.timeoutId !== null) {\n      clearTimeout(this.timeoutId);\n    }\n  }\n}\n","import pageTitle from 'ember-page-title/helpers/page-title';\n\nexport default pageTitle;\n","import { helper } from '@ember/component/helper';\nimport sanitizeHtml from 'sanitize-html';\nimport { htmlSafe } from '@ember/template';\n\nexport function sanitize([text = ''], { allowedTags = '' }) {\n  allowedTags = allowedTags.split(' ').filter((tag) => tag);\n  return htmlSafe(sanitizeHtml(text, { allowedTags }));\n}\n\nexport default helper(sanitize);\n","import { helper } from '@ember/component/helper';\n\nexport function sum([first, second]) {\n  return first + second;\n}\n\nexport default helper(sum);\n","import initializerFactory from 'ember-cli-app-version/initializer-factory';\nimport config from '../config/environment';\n\nlet name, version;\nif (config.APP) {\n  name = config.APP.name;\n  version = config.APP.version;\n}\n\nexport default {\n  name: 'App Version',\n  initialize: initializerFactory(name, version),\n};\n","import ContainerDebugAdapter from 'ember-resolver/resolvers/classic/container-debug-adapter';\n\nexport default {\n  name: 'container-debug-adapter',\n\n  initialize() {\n    let app = arguments[1] || arguments[0];\n\n    app.register('container-debug-adapter:main', ContainerDebugAdapter);\n  }\n};\n","\n        export default {\n          name: 'ember-cli-mirage',\n          initialize() {}\n        };\n      ","import 'ember-data';\n\nimport setupContainer from 'ember-data/setup-container';\n\n/*\n  This code initializes EmberData in an Ember application.\n*/\nexport default {\n  name: 'ember-data',\n  initialize: setupContainer,\n};\n","function safeLoadScript(src) {\n  return new Promise((resolve) => {\n    let script = document.querySelector(`script[src=\"${src}\"]`);\n    if (script) {\n      resolve(undefined);\n    } else {\n      script = document.createElement('script');\n      script.src = src;\n      script.onload = () => resolve(undefined);\n      document.head.appendChild(script);\n    }\n  });\n}\n\nfunction initialize(application) {\n  const isEnabled = application.get('config.disable.googleAnalytics') !== true;\n  const tagManagerId = application.get('config.googleTagManagerId');\n\n  if (isEnabled && tagManagerId) {\n    const src = `https://www.googletagmanager.com/gtag/js?id=${tagManagerId}`;\n    safeLoadScript(src).then(() => {\n      window.dataLayer = window.dataLayer || [];\n      function gtag(...args) {\n        window.dataLayer.push(args);\n      }\n      gtag('js', new Date());\n      gtag('config', tagManagerId);\n    });\n  }\n}\n\nexport default {\n  name: 'google-analytics',\n  initialize,\n};\n","import { hash } from 'rsvp';\nimport { isNone } from '@ember/utils';\nimport ENV from '../config/environment';\n\nconst { BUILD_INFO } = ENV;\n\nfunction log(...parts) {\n  const colored = /(firefox|chrome)/i.test(navigator.userAgent);\n\n  parts = parts.reduce((parts, part) => {\n    if (Array.isArray(part)) {\n      if (colored && part.length >= 2) {\n        parts.push(`%c${part[0]}`);\n        parts.push(part[1]);\n      } else {\n        parts.push(part[0]);\n      }\n    } else {\n      parts.push(part);\n    }\n    return parts;\n  }, []);\n\n  // eslint-disable-next-line no-console\n  console.log(...parts);\n}\n\nfunction logInfos(infos) {\n  const length = Object.keys(infos).reduce(\n    (length, key) => Math.max(length, key.length),\n    0\n  );\n\n  Object.keys(infos)\n    .sort()\n    .forEach((key) => {\n      const pad = ' '.repeat(length - key.length);\n      log([`${key}${pad} :`, 'color: gray;'], infos[key]);\n    });\n}\n\nfunction add(target, key, source) {\n  target[key] = source[key];\n  return target;\n}\n\nfunction logSeparator() {\n  log('----------------------------------------------------------');\n}\n\nfunction logBuildInfo() {\n  logSeparator();\n  log(['[ LIGA OS ]', 'font-weight: bold;']);\n\n  logInfos(\n    Object.keys(BUILD_INFO)\n      .filter((key) => /^BUILD_.*/.test(key))\n      .filter((key) => !isNone(BUILD_INFO[key]))\n      .reduce((infos, key) => add(infos, key, BUILD_INFO), {})\n  );\n}\n\nfunction logResponseInfo(responses) {\n  logSeparator();\n  log(['[ API versions ]', 'font-weight: bold;']);\n  logInfos(\n    Object.keys(responses).reduce((versions, key) => {\n      if (typeof responses[key] === 'object') {\n        if (responses[key].name && responses[key].version) {\n          return { ...versions, [responses[key].name]: responses[key].version };\n        }\n        return Object.keys(responses[key]).reduce(\n          (versions, type) => add(versions, type, responses[key]),\n          versions\n        );\n      }\n      return versions;\n    }, {})\n  );\n}\n\nexport function initialize(application) {\n  const promises = {};\n\n  const apiVdc = application.get('config.api-vdc.url');\n  if (apiVdc) {\n    promises['api-vdc'] = getJSON(`${apiVdc}/v1/version_infos`);\n  }\n  const apiMyliga = application.get('config.api-myliga.url');\n  if (apiMyliga) {\n    promises['api-myliga'] = getJSON(`${apiMyliga}/v1/version_infos`);\n  }\n\n  hash(promises)\n    .then((responses) => {\n      logBuildInfo();\n      logResponseInfo(responses);\n      logSeparator();\n    })\n    .catch(() => {\n      logBuildInfo();\n      logSeparator();\n    });\n}\n\nfunction getJSON(url) {\n  return fetch(url).then((response) => {\n    if (!response.ok) {\n      throw new Error(response.statusText);\n    }\n    return response.json();\n  });\n}\n\nexport default {\n  name: 'version-info',\n  initialize,\n};\n","/* exists only for things that historically used \"after\" or \"before\" */\nexport default {\n  name: 'ember-data',\n  initialize() {},\n};\n","import Ember from 'ember';\nimport AdapterError, {\n  AbortError,\n  ForbiddenError,\n} from '@ember-data/adapter/error';\n\nlet getFlashMessagesService, getIntlService, getSessionService;\n\nexport function initialize(appInstance) {\n  getFlashMessagesService = () =>\n    appInstance.lookup('service:ln-flash-messages');\n  getIntlService = () => appInstance.lookup('service:intl');\n  getSessionService = () => appInstance.lookup('service:session');\n  Ember.onerror = (error) => handleError(error, true);\n  window.addEventListener('unhandledrejection', (event) => {\n    handleError(event.reason);\n  });\n}\n\nexport default {\n  initialize,\n  name: 'error-handler',\n};\n\nfunction handleError(error, rethrow = false) {\n  if (error instanceof AbortError) {\n    // Do nothing.\n    // It's not an error if request was aborted by client\n    return;\n  }\n  const statusCode = error.statusCode ?? error.status_code;\n  if (\n    getSessionService().isLoggedIn &&\n    (error instanceof ForbiddenError || statusCode === 401)\n  ) {\n    getSessionService().triggerLogout();\n  } else if (error instanceof AdapterError) {\n    if (isUnknownError(error)) {\n      getFlashMessagesService().addErrorMessage(\n        getIntlService().t('unknown-error')\n      );\n    } else {\n      getFlashMessagesService().addErrorMessages(error);\n    }\n  } else if (rethrow) {\n    throw error;\n  }\n}\n\nfunction isUnknownError(error) {\n  return (\n    !error.message &&\n    (!error.errors || error.errors.length === 0) &&\n    (!error.details || error.details.length === 0)\n  );\n}\n","import { SUBMIT_SUCCESS_EVENT } from 'ln-liga-os/utils/sentry-feedback';\n\nlet flashMessages;\nlet api;\n\nexport default {\n  name: 'sentry-feedback',\n\n  initialize(applicationInstance) {\n    flashMessages = applicationInstance.lookup('service:ln-flash-messages');\n    api = applicationInstance.lookup('service:api');\n\n    window.addEventListener(SUBMIT_SUCCESS_EVENT, handleFeedbackSubmit);\n  },\n};\n\n// Listen for the Sentry Feedback submission event\nfunction handleFeedbackSubmit(event) {\n  const { data } = event.detail || {};\n\n  if (data) {\n    const formData = new FormData();\n    const metadata = {\n      name: data.name || '',\n      email: data.email || '',\n      message: data.message || '',\n      url: window.location.href,\n    };\n    formData.append('data', JSON.stringify(metadata));\n\n    (data.attachments || []).forEach((attachment) => {\n      const blob = new Blob([attachment.data], {\n        type: attachment.contentType,\n      });\n      formData.append('file', blob, attachment.filename);\n    });\n\n    api.request({\n      method: 'POST',\n      url: api.buildUrl('vdc', ['feedback']),\n      data: formData,\n      contentType: false,\n      processData: false,\n    });\n  }\n\n  flashMessages.addSuccessMessage(\n    `Hey,\n\nJust confirming that we got your request. We're on it.\n\nKind regards,\nOperations`\n  );\n}\n","import HashLocation from '@ember/routing/hash-location';\nimport { set } from '@ember/object';\n\nexport default class CustomHashLocation extends HashLocation {\n  implementation = 'custom-hash';\n\n  replaceURL(path) {\n    const url = new URL(location.href);\n    url.hash = `#${path}`;\n\n    this.location.replace(url);\n    set(this, 'lastSetURL', path);\n  }\n}\n","import { modifier } from 'ember-modifier';\n\nexport default modifier(function cssProps(element, positionalArgs, namedArgs) {\n  const props = {\n    ...(positionalArgs ?? [])[0],\n    ...namedArgs,\n  };\n  Object.keys(props).forEach((key) => {\n    if (props[key] === undefined) {\n      return;\n    }\n    const value = props[key] === null ? null : `${props[key]}`;\n    element.style.setProperty(key, value);\n  });\n  for (let index = 0; index < element.style.length; index++) {\n    const key = element.style[index];\n    if (props[key] === undefined) {\n      element.style.removeProperty(key);\n    }\n  }\n});\n","import EmberRouter from '@ember/routing/router';\nimport config from 'ln-liga-os/config/environment';\n\nexport default class Router extends EmberRouter {\n  location = config.locationType;\n  rootURL = config.rootURL;\n}\n\nRouter.map(function () {\n  this.route('login');\n  this.route('password-reset', { path: '/password-reset/:token' });\n  this.route('main', { path: '/' }, function () {\n    this.route('apps', { path: '/*url' });\n  });\n});\n","import Route from '@ember/routing/route';\nimport { inject as service } from '@ember/service';\nimport config from 'ln-liga-os/config/environment';\nimport formatLocales from 'ln-liga-os/utils/format-locales';\n\nexport default class ApplicationRoute extends Route {\n  @service api;\n  @service apiEvents;\n  @service clientTheme;\n  @service intl;\n  @service ligaOsApi;\n  @service navigation;\n  @service state;\n\n  constructor(...args) {\n    super(...args);\n\n    this.apiEvents.triggerConfigChange(config.APP.config);\n\n    this.ligaOsApi.register();\n\n    if (config.APP.config.exposeLigaOSApi) {\n      window.LIGAOS_API = this.ligaOsApi;\n    }\n\n    if (config.APP.config.exposeApi) {\n      window.API = this.api;\n    }\n  }\n\n  beforeModel() {\n    this.intl.setLocale(formatLocales(this.state.getLanguage()));\n    return this.clientTheme.load().then(() => this.state.restore());\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class LoginRoute extends Route {\n  @service router;\n  @service session;\n  @service state;\n\n  beforeModel() {\n    return this.session\n      .checkAuth()\n      .then(() => {\n        if (this.session.isLoggedIn) {\n          return this.router.transitionTo('/!');\n        }\n      })\n      .catch(() => {\n        if (this.session.isLoggedIn) {\n          return this.router.transitionTo('/!');\n        }\n\n        // Otherwise, swallow the error.\n        // If the user is not logged in, they should be able to see the login screen.\n      });\n  }\n\n  activate() {\n    // In some very rare cases appLoaded is set to true when the user lands on the login screen\n    // That leads to a missing class name in the application view which messes up the login layout\n    // comes from login route, initially commited by JG\n    this.state.appLoaded = false;\n    this.state.appLocation = null;\n    this.state.resetTitle();\n    this.session.forceLegacyLogin = false;\n  }\n\n  setupController(controller) {\n    controller.showPasswordReset = false;\n    controller.showPasswordResetRequested = false;\n    controller.isLegacyLoginFormActive = false;\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport config from 'ln-liga-os/config/environment';\nimport { KEYCLOAK_REDIRECT_HASH } from 'ln-liga-os/services/session';\nimport { setPreviousUrl, setPreviousUserId } from 'ln-liga-os/utils/main-route';\nimport { getCurrentScope } from '@sentry/ember';\n\nexport default class MainRoute extends Route {\n  @service communicator;\n  @service microMenu;\n  @service navigation;\n  @service pubSub;\n  @service rights;\n  @service router;\n  @service session;\n  @service state;\n\n  get sentryScope() {\n    const currentScope = getCurrentScope();\n    if (!currentScope.getClient()) {\n      // Sentry is not initialized.\n      // Skip initializing user context\n      return null;\n    }\n    return currentScope;\n  }\n\n  model(_params, transition) {\n    const attemptedUrl = transition.to.params.url;\n    const currentURL = this.router.location.getURL();\n    if (\n      this.session.isKeycloak &&\n      !currentURL.includes(KEYCLOAK_REDIRECT_HASH)\n    ) {\n      setPreviousUrl(attemptedUrl);\n    }\n    return this.session\n      .checkAuth()\n      .catch((error) => {\n        if (error.status_code === 401) {\n          if (!this.session.isKeycloak) {\n            setPreviousUrl(attemptedUrl);\n          }\n          this.onDidLogout(this.session.content?.user_id);\n        }\n\n        throw error;\n      })\n      .then((sessionResponse) => {\n        const { sentryScope } = this;\n        if (sentryScope && sessionResponse.user_id) {\n          sentryScope.setUser({\n            id: `${sessionResponse.user_id}`,\n            ...(this.session.user\n              ? {\n                  name: this.session.user.name,\n                  email: this.session.user.email,\n                }\n              : {}),\n          });\n        }\n\n        return this.rights.rights.then((rights) => {\n          return { isPendingUser: rights.length === 0 };\n        });\n      })\n      .catch((error) => {\n        if (\n          this.session.adapter.clientId === 'nespresso-web' &&\n          this.session.isAnonymousUser\n        ) {\n          const ssoSignupApp = config.APP.config.apps.find(\n            (app) => app.slug === 'sso-signup'\n          );\n\n          if (ssoSignupApp) {\n            this.navigation.set('navigations', [\n              {\n                name: 'Sign up',\n                url: ssoSignupApp.url,\n              },\n            ]);\n\n            return { isPendingUser: false };\n          }\n        }\n\n        throw error;\n      });\n  }\n\n  activate() {\n    this.pubSub.subscribe();\n    this.session.on('did-logout', this, this.onDidLogout);\n    this.state.on('language-did-change', this, this.onLanguageDidChange);\n\n    if (!this.session.isAnonymousUser) {\n      this.communicator.subscribe();\n    }\n  }\n\n  setupController(...args) {\n    super.setupController(...args);\n\n    this.microMenu.enable();\n  }\n\n  deactivate() {\n    this.pubSub.unsubscribe();\n    this.communicator.unsubscribe();\n    this.session.off('did-logout', this, this.onDidLogout);\n    this.state.off('language-did-change', this, this.onLanguageDidChange);\n\n    document.body.classList.remove('supports-micro-menu');\n  }\n\n  onDidLogout(userId) {\n    setPreviousUserId(userId);\n\n    this.sentryScope?.clear();\n\n    this.state.reset();\n\n    this.router.transitionTo('login');\n  }\n\n  onLanguageDidChange() {\n    window.location.reload();\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport {\n  decodeHashPart,\n  encodeHashPart,\n  replaceLocationHash,\n} from 'ln-liga-os/utils/url';\nimport formatErrorMessage from 'ln-liga-os/utils/format-error-message';\nimport { setPreviousUrl, setPreviousUserId } from 'ln-liga-os/utils/main-route';\n\nexport default class AppsRoute extends Route {\n  @service lnFlashMessages;\n  @service intl;\n  @service navigation;\n  @service router;\n  @service session;\n  @service state;\n\n  model({ url }) {\n    const { isPendingUser } = this.modelFor('main');\n    const previousUrl = this.popPreviousUrl();\n    if (previousUrl) {\n      url = previousUrl;\n      // '!' means no app selected\n    } else if (!url || (url === '!' && !this.session.isAnonymousUser)) {\n      url = this.getLastVisitedUrl() || '!';\n    }\n\n    try {\n      // Replace encoded pipes.\n      replaceLocationHash(/%7C/g, '|');\n    } catch (error) {\n      // mute\n    }\n\n    if (isPendingUser) {\n      this.state.triggerAppError({\n        description: 'Please wait for your application to be reviewed',\n        title: 'User review pending',\n      });\n      return;\n    }\n\n    return Promise.resolve(\n      this.session.content ? this.state.loadUser() : undefined\n    )\n      .then(() => this.navigation.loadNavigations())\n      .then(() => {\n        const appUrl = this.decodeRoute(url);\n\n        const currentRouteUrl = this.encodeRoute(this.navigation.currentUrl);\n        if (\n          currentRouteUrl &&\n          currentRouteUrl !== '!' &&\n          currentRouteUrl !== url\n        ) {\n          this.navigation.openUrl(appUrl);\n        }\n\n        if (appUrl) {\n          if (!this.navigation.setUrl(appUrl)) {\n            return;\n          }\n\n          // upon the initial login into the app, the `activate` hook wasn't called yet\n          this.onUrlDidChange(appUrl);\n        } else {\n          this.navigation.openFirstItem();\n        }\n\n        this.navigation.loadedAppCheck();\n        this.state.setAppTitle(this.navigation.currentItem?.name);\n      })\n      .catch((error) => {\n        const errorMessage = formatErrorMessage(\n          error,\n          this.intl.t('unknown-error')\n        );\n        this.lnFlashMessages.addMessage('error', errorMessage);\n        console.error(error);\n      });\n  }\n\n  activate() {\n    this.navigation.on('url-did-change', this, this.onUrlDidChange);\n  }\n\n  deactivate() {\n    this.navigation.off('url-did-change', this, this.onUrlDidChange);\n  }\n\n  encodeRoute(url) {\n    url = encodeHashPart(url);\n    url = this.navigation.addSlug(url);\n\n    return url;\n  }\n\n  decodeRoute(url) {\n    if (!url) {\n      return null;\n    }\n\n    url = this.navigation.removeSlug(url);\n\n    return decodeHashPart(url);\n  }\n\n  onUrlDidChange(url) {\n    const encodedUrl = this.encodeRoute(url);\n\n    this.router.replaceWith(`/${encodedUrl}`);\n    this.saveLastVisitedUrl(encodedUrl);\n  }\n\n  popPreviousUrl() {\n    const url = window.sessionStorage.getItem('url-before-auth-check');\n    const userId = window.sessionStorage.getItem('user-id-before-auth-check');\n\n    setPreviousUrl(null);\n    setPreviousUserId(null);\n\n    // If previous request was without a session or from the same user.\n    if (url && (!userId || String(userId) === String(this.session.userId))) {\n      return url;\n    }\n  }\n\n  getLastVisitedUrl() {\n    const url = sessionStorage.getItem('last-app-url');\n    const userId = sessionStorage.getItem('last-app-user-id');\n\n    if (url && String(userId) === String(this.session.userId)) {\n      return url;\n    }\n\n    sessionStorage.removeItem('last-app-url');\n    sessionStorage.removeItem('last-app-user-id');\n\n    return null;\n  }\n\n  saveLastVisitedUrl(url) {\n    sessionStorage.setItem('last-app-url', url);\n    sessionStorage.setItem('last-app-user-id', this.session.userId);\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class MainIndexRoute extends Route {\n  @service router;\n\n  redirect() {\n    this.router.replaceWith('main.apps', '!');\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class PasswordResetRoute extends Route {\n  @service router;\n  @service session;\n  @service state;\n\n  beforeModel() {\n    if (this.session.isLoggedIn) {\n      return this.router.transitionTo('/!');\n    }\n  }\n\n  model({ token }) {\n    return {\n      token,\n    };\n  }\n\n  activate() {\n    // In some very rare cases appLoaded is set to true when the user lands on the this screen\n    // That leads to a missing class name in the application view which messes up the reset pass layout\n    this.state.appLoaded = false;\n    this.state.appLocation = null;\n    this.state.resetTitle();\n  }\n}\n","import BaseApiService from 'ln-ember-api-service/services/api';\nimport { inject as service } from '@ember/service';\n\nexport default class ApiService extends BaseApiService {\n  @service ligaOsApi;\n\n  loadToken() {\n    return this.ligaOsApi.getSession().then(({ token }) => token);\n  }\n}\n","import { isNone } from '@ember/utils';\nimport Service, { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport ENV from '../config/environment';\nimport config from 'ln-liga-os/config/environment';\nimport { tracked } from '@glimmer/tracking';\n\nfunction assetURL(path) {\n  const { protocol, host } = location;\n  const {\n    APP: { version: appVersion },\n    rootURL,\n  } = ENV;\n\n  return path\n    ? `${protocol}//${host}${rootURL}assets/${path}?v=${appVersion}`\n    : null;\n}\n\nexport default class ClientThemeService extends Service {\n  @service api;\n\n  @tracked defaultData = null;\n\n  @tracked themeData = null;\n\n  constructor(...args) {\n    super(...args);\n    this.defaultData = {\n      background_image: {\n        preview_url: null,\n      },\n      logo_image: {\n        preview_url: assetURL('images/svg/vdc-software-logo-white.svg'),\n      },\n      title: config.APP.config.clientTheme?.defaultTitle || 'LIGAOS',\n      type: config.APP.config.clientTheme?.defaultType || 'LIGANOVA',\n    };\n  }\n\n  get className() {\n    return `theme-${this.data.type.toLowerCase()}`;\n  }\n\n  get data() {\n    const defaultData = { ...this.defaultData };\n    if (!this.themeData) {\n      return defaultData;\n    }\n\n    const themeData = Object.keys(this.themeData).reduce((themeData, key) => {\n      const value = this.themeData?.[key];\n      if (!isNone(value)) {\n        themeData[key] = value;\n      }\n      return themeData;\n    }, {});\n\n    return { ...defaultData, ...themeData };\n  }\n\n  get favicon() {\n    const name = this.data.type.toLowerCase();\n    return ['Dark', 'Light'].includes(name) ? 'default' : name;\n  }\n\n  get isDefault() {\n    return ['Dark', 'Light', 'AMG'].includes(this.data.type);\n  }\n\n  get style() {\n    let {\n      background_image: { preview_url: bgURL },\n      logo_image: { preview_url: logoURL },\n    } = this.data || {};\n\n    if (this.data.type === 'LIGANOVA') {\n      logoURL = assetURL('themes/liganova/images/logo-ligaos.svg');\n    }\n\n    if (this.data.type === 'Dark') {\n      logoURL = assetURL('images/svg/vdc-software-logo-white.svg');\n    }\n\n    if (this.data.type === 'AMG') {\n      return undefined;\n    }\n\n    const styles = [];\n\n    if (bgURL) {\n      styles.push(`\n        .background-container, .startup-mask-component {\n          background-image: url('${bgURL}') !important;\n        }\n      `);\n    }\n\n    styles.push(`\n      .logo {\n        background-image: url('${logoURL}') !important;\n      }\n    `);\n\n    return htmlSafe(styles.join('\\n'));\n  }\n\n  get support() {\n    const type = this.data.type.toLowerCase();\n    return (\n      config.APP.config.support?.[type] ||\n      config.APP.config.support?.default ||\n      {}\n    );\n  }\n\n  load() {\n    const { search, hostname } = location;\n    const [, domain] = search.match(/domain=([^&]+)/) || [];\n\n    return this.api\n      .read('myliga', [\n        'themes',\n        { domain: domain || hostname, paging_limit: 1 },\n      ])\n      .then(({ result: [theme] }) => theme)\n      .catch((error) =>\n        console.error(\n          `GET /themes: ${error.message || error.responseText || error}`\n        )\n      )\n      .then((theme) => {\n        this.themeData = theme;\n      })\n      .then(() => this.setup());\n  }\n\n  setup() {\n    const faviconElement = document.querySelector('#favicon');\n    faviconElement &&\n      faviconElement.setAttribute(\n        'href',\n        assetURL(`images/favicons/${this.favicon}.ico`)\n      );\n  }\n}\n","import { cached, tracked } from '@glimmer/tracking';\nimport { isNone } from '@ember/utils';\nimport { scheduleOnce } from '@ember/runloop';\nimport Service, { inject as service } from '@ember/service';\nimport { TrackedAsyncData } from 'ember-async-data';\n\nconst tabsDefinitions = [\n  {\n    id: 'applications',\n    allowForAllUsers: true,\n  },\n  {\n    id: 'notifications',\n    filterOptions: [\n      { label: 'inbox', value: 'current' },\n      { label: 'flagged', value: 'flagged' },\n      { label: 'unread', value: 'unread' },\n      { label: 'archive', value: 'archive' },\n    ],\n    defaultFilterValue: 'current',\n  },\n  {\n    id: 'tasks',\n    filterOptions: [\n      { label: 'all', value: 'all' },\n      { label: 'urgent', value: 'urgent' },\n      { label: 'today', value: 'today' },\n      { label: 'upcoming', value: 'coming' },\n    ],\n    defaultFilterValue: 'all',\n  },\n  {\n    id: 'contacts',\n    filterOptions: [\n      { label: 'all', value: 'all' },\n      { label: 'projects', value: 'projects' },\n      {\n        label: 'lists',\n        requiredPermission: {\n          resource: 'EmailDistributor',\n          type: 'READ',\n        },\n        value: 'lists',\n      },\n    ],\n    defaultFilterValue: 'all',\n  },\n  {\n    id: 'absences',\n    filterOptions: [\n      { label: 'all', value: 'all' },\n      { class: 'absence', value: 'Sickness,Holiday' },\n      { class: 'travel', value: 'Travel' },\n    ],\n    defaultFilterValue: 'all',\n  },\n  {\n    id: 'birthdays',\n    filterOptions: [\n      { label: 'all', value: 'all' },\n      { label: 'today', value: 'today' },\n      { label: 'upcoming', value: 'coming' },\n    ],\n    defaultFilterValue: 'all',\n  },\n  {\n    id: 'settings',\n    hasTitle: true,\n    allowForAllUsers: true,\n  },\n];\n\nexport default class CommunicatorService extends Service {\n  @service api;\n  @service intl;\n  @service rights;\n  @service session;\n  @service state;\n\n  @tracked activeTabId = null;\n\n  @tracked badges = {};\n\n  @tracked isVisible = true;\n\n  @tracked tabsFilterValues = {};\n\n  pollingIntervalTime = 60000;\n\n  get badgeNumber() {\n    return this.tabs.reduce(\n      (number, { id }) => number + (this.badges[id] ?? 0),\n      0\n    );\n  }\n\n  get currentTab() {\n    if (!this.activeTabId) {\n      return null;\n    }\n\n    return (\n      this.tabs.find(({ id }) => id === this.activeTabId) ?? {\n        id: this.activeTabId,\n      }\n    );\n  }\n\n  @cached\n  get rightsRecordsAsync() {\n    if (!this.session.isLoggedIn || this.session.isAnonymousUser) {\n      return new TrackedAsyncData(Promise.resolve([]));\n    }\n    const promise = this.rights.rights.then((rights) => rights.slice());\n    return new TrackedAsyncData(promise);\n  }\n\n  get tabs() {\n    if (!this.session.isLoggedIn || this.session.isAnonymousUser) {\n      return [];\n    }\n\n    const rightsRecords = this.rightsRecordsAsync.isResolved\n      ? this.rightsRecordsAsync.value\n      : [];\n\n    return tabsDefinitions\n      .filter(({ allowForAllUsers, id }) => {\n        if (allowForAllUsers) {\n          return true;\n        }\n        return rightsRecords.some((right) => {\n          const type = 'OTHER';\n          const resource = `ligaos.communicator.${id}.read`;\n          return right.type === type && right.resource === resource;\n        });\n      })\n      .map((tabDefinition) => {\n        const { defaultFilterValue, hasTitle, id } = tabDefinition;\n        const filterValue = this.tabsFilterValues[id] ?? defaultFilterValue;\n        const filterOptions = (tabDefinition.filterOptions ?? [])\n          .filter(({ requiredPermission }) => {\n            return (\n              !requiredPermission ||\n              rightsRecords.some(\n                (right) =>\n                  right.type === requiredPermission.type &&\n                  right.resource === requiredPermission.resource\n              )\n            );\n          })\n          .map((option) => {\n            return {\n              ...option,\n              label: option.label && this.intl.t(option.label),\n            };\n          });\n\n        const name = this.intl.t(id);\n        const title =\n          id === 'settings' ? this.state.user?.get('fullName') : name;\n        return {\n          filterOptions,\n          filterValue,\n          hasTitle,\n          id,\n          name,\n          title,\n        };\n      });\n  }\n\n  handleNotificationOpened() {\n    if (this.badges.notifications > 0) {\n      this.api\n        .update('vdc', '/notifications/opened')\n        .then(() => this.updateBadges(false));\n    }\n  }\n\n  setCurrentTab(tab) {\n    if (!tab) {\n      this.activeTabId = null;\n    } else {\n      this.activeTabId = tab.id;\n      if (tab.id === 'notifications') {\n        this.handleNotificationOpened();\n      }\n    }\n  }\n\n  reset() {\n    this.badges = {};\n  }\n\n  setTabFilterValue(value) {\n    this.tabsFilterValues = {\n      ...this.tabsFilterValues,\n      [this.activeTabId]: value,\n    };\n  }\n\n  subscribe() {\n    // TODO switch to pubSub\n    this.startPolling();\n  }\n\n  unsubscribe() {\n    this.stopPolling();\n  }\n\n  // TODO remove polling add Pubsub!\n  startPolling() {\n    this.stopPolling();\n\n    this.updateBadges();\n    const interval = setInterval(\n      () => this.updateBadges(),\n      this.pollingIntervalTime\n    );\n    this.pollingInterval = interval;\n  }\n\n  stopPolling() {\n    const interval = this.pollingInterval;\n    if (interval) {\n      clearInterval(interval);\n      this.pollingInterval = null;\n    }\n  }\n\n  updateBadges(playSound = true) {\n    if (!this.session.isLoggedIn) {\n      return;\n    }\n\n    const currentBadges = Object.assign({}, this.badges);\n\n    return this.api\n      .read('myliga', '/communicator_badges')\n      .then((badges) => {\n        if (JSON.stringify(currentBadges) === JSON.stringify(badges)) {\n          return;\n        }\n\n        this.badges = badges;\n        this.state.updateTitle();\n      })\n      .then(() =>\n        scheduleOnce(\n          'afterRender',\n          this,\n          this._maybeTriggerNotificationSound,\n          playSound,\n          currentBadges\n        )\n      );\n  }\n\n  _maybeTriggerNotificationSound(playSound, currentBadges) {\n    // Trigger notification sound if one of the badges is greater that before.\n    const { badges } = this;\n    playSound =\n      playSound &&\n      Object.keys(badges).find(\n        (key) => !isNone(currentBadges[key]) && badges[key] > currentBadges[key]\n      );\n\n    if (playSound) {\n      this.state.triggerNotificationSound();\n    }\n  }\n}\n","import config from 'ln-liga-os/config/environment';\nimport Service, { inject as service } from '@ember/service';\nimport { guidFor } from '@ember/object/internals';\nimport { cached } from '@glimmer/tracking';\nimport { next } from '@ember/runloop';\n\nexport const localStorageKey = 'shownQuickstarts';\n\n// Define quickstarts with hardcoded unique IDs\nexport const allQuickstarts = [\n  {\n    id: '1a2b3c4d-0001',\n    body: 'What is the current turnover of my project?',\n  },\n  {\n    id: '1a2b3c4d-0002',\n    body: 'Create a project template for a window campaign',\n  },\n  {\n    id: '1a2b3c4d-0003',\n    body: 'Who is Matthias Gölz?',\n  },\n  {\n    id: '1a2b3c4d-0004',\n    body: 'What is the current status of my project?',\n  },\n  {\n    id: '1a2b3c4d-0005',\n    body: 'Create a project template for a social media campaign',\n  },\n];\n\nexport default class LigaAgentService extends Service {\n  @service('navigation') navigation;\n\n  anchorElementId = guidFor(this);\n\n  get shouldEnableQuickstarts() {\n    return config.APP['ligaagentQuickstarts'] && this.isAvailable;\n  }\n\n  get isAvailable() {\n    const appConfig = this.navigation.getApps().find((app) => {\n      return app.slug === 'liga-agent' && !app.disabled;\n    });\n    if (!appConfig) {\n      return false;\n    }\n\n    return !!this.navigation.getItemFor(appConfig.url.toString());\n  }\n\n  get apiUrl() {\n    return config.APP.config['api-ligaagent']?.url;\n  }\n\n  @cached\n  get quickstarts() {\n    // Retrieve already shown items from local storage\n    const shownItems = JSON.parse(\n      localStorage.getItem(localStorageKey) || '[]'\n    );\n\n    // Filter out already shown items\n    const remainingQuickstarts = allQuickstarts.filter(\n      (item) => !shownItems.includes(item.id)\n    );\n\n    // Rotate and select up to 3 items\n    const selectedQuickstarts = remainingQuickstarts.slice(0, 3);\n\n    // Update local storage with newly shown items\n    const updatedShownItems = [\n      ...shownItems,\n      ...selectedQuickstarts.map((item) => item.id),\n    ];\n    localStorage.setItem(localStorageKey, JSON.stringify(updatedShownItems));\n\n    return selectedQuickstarts;\n  }\n\n  startNewConversation(text) {\n    next(() => {\n      document.querySelector(`chat-webcomponent`).newConversation(text);\n    });\n  }\n}\n","import { assert, deprecate } from '@ember/debug';\nimport RSVP from 'rsvp';\nimport Service, { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { isNone } from '@ember/utils';\nimport { isSupportedBrowser, formatSupportedBrowsers } from '../utils/browser';\nimport config from 'ln-liga-os/config/environment';\n\nconst LOG_COLOR = 'green';\nconst LOG_GROUP_FUNC = 'group';\n\n/**\n * ## Events\n *\n * Apps can listen to events triggered by LIGA OS.\n *\n * **Example**\n *\n * ```JavaScript\n * window.addEventListener('message', (evt) => {\n *   if (evt.data.event === 'my-event-identifier') {\n *     // handle it\n *   }\n * }, false);\n * ```\n *\n * ### Pub Sub Events\n *\n * All Events coming in through the PubSubService are prefixed with `event:`. So if\n * you want to get notified, when the `my-event-identifier` occurs, you need to\n * listen to `event:my-event-identifier`.\n *\n *\n * ## Integration\n *\n * These methods can be called on LigaOsApi Service via `postMessage()` on the\n * parent window.\n *\n * For example:\n *\n * ```JavaScript\n * parent.window.postMessage({idx:'foo-1', method:'logout', args:[] }, '*');\n * ```\n *\n * ```JavaScript\n * window.addEventListener('message', function(evt) {\n *   if (evt.data.idx) {\n *     // data.idx will be the same as provided above\n *     // data.response contains the response.\n *   }\n * }, false);\n * ```\n *\n * See: [ln-subsystem-helper liga-os.js ](https://bitbucket.org/ligadigital/ln-subsystem-helper/src/master/js/liga-os.js)\n *\n * This can be used like this:\n *\n * ```JavaScript\n * ligaOS.call('getLanguage', [], function(token) {\n *   console.log('language:', token);\n * })\n *\n * ligaOS.call('getLanguage', ['en']);\n * ```\n *\n * @class LigaOsApi\n */\nexport default class LigaOsApiService extends Service {\n  @service clientTheme;\n  @service communicator;\n  @service intl;\n  @service navigation;\n  @service pubSub;\n  @service session;\n  @service settings;\n  @service state;\n\n  config = config.APP.config;\n\n  constructor(...args) {\n    super(...args);\n    this.pubSub.on('event', ({ name }) => {\n      this.triggerEvent(`event:${name}`);\n    });\n  }\n\n  // TODO: implement `path` and `queryParams` arguments\n  buildUrl(slug) {\n    const apps = this.navigation.getApps();\n    const app = apps.find((app) => {\n      return app.get('slug') === slug;\n    });\n    if (!app) {\n      return;\n    }\n    // TODO: Deal with \"//\" vs \"/\" somehow\n    return `${location.origin}/#/!//${slug}/`;\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @deprecated\n   * @method setUrlPath\n   * @param {string} url\n   */\n  setUrlPath(url) {\n    this._logDeprecatedCall(\n      ['setUrlPath', 'setUrl() or openUrl'],\n      '2.3.0',\n      ...arguments\n    );\n    this.navigation.setUrl(url);\n  }\n\n  // Navigation\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method openUrl\n   * @param  {String} url\n   */\n  openUrl(url) {\n    this._logCall('openUrl', ...arguments);\n    this.navigation.openUrl(url);\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method openResource\n   * @param  {String} resource\n   * @param  {Number} resourceId\n   */\n  openResource(resource, resourceId) {\n    this._logCall('openResource', ...arguments);\n    this.navigation.openResource(resource, resourceId);\n  }\n\n  /**\n   * This should be called by the App whenever the App's URL changes. It makes\n   * sure the URL hash in the browser is up-to-date.\n   *\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method setUrl\n   * @param  {String} url\n   */\n  setUrl(url) {\n    this._logCall('setUrl', ...arguments);\n    this.navigation.setUrl(url);\n  }\n\n  // Config\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method getConfig\n   * @return {Object}\n   */\n  getConfig() {\n    this._logCall('getConfig', ...arguments);\n    return this.config;\n  }\n\n  // Session\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method getSession\n   * @return {Promise<Object>}\n   */\n  getSession() {\n    this._logCall('getSession', ...arguments);\n\n    if (!this.session.isLoggedIn) {\n      return Promise.resolve({ ...this.session.content });\n    }\n\n    return this.session\n      .loadToken()\n      .then((token) => {\n        return { ...this.session.content, token };\n      })\n      .catch((e) => {\n        this.session.triggerLogout();\n\n        throw e;\n      });\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method validateSession\n   * @return {Promise<Boolean>}\n   */\n  validateSession() {\n    this._logCall('validateSession', ...arguments);\n    return this.session.validateSession();\n  }\n\n  /**\n   * Closes the current App and deletes the Session.\n   *\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method logout\n   */\n  logout() {\n    this._logCall('logout', ...arguments);\n    this.session.triggerLogout();\n  }\n\n  // App state\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method getLanguage\n   * @return {String}\n   */\n  getLanguage() {\n    this._logCall('getLanguage', ...arguments);\n    return this.state.getLanguage();\n  }\n\n  /**\n   * If the App switches the language this should be called. LIGA OS stores the\n   * language token and reloads the browser if needed. The App can than get the\n   * current language by calling `getLanguage()`.\n   *\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method setLanguage\n   * @param {String} languageCode\n   */\n  setLanguage(languageCode) {\n    this._logCall('setLanguage', ...arguments);\n    this.state.setLanguage(languageCode);\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method setTitle\n   * @param {String} title\n   */\n  setTitle(title) {\n    this._logCall('setTitle', ...arguments);\n    this.state.setAppTitle(title);\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @deprecated\n   *\n   * @method setTitlePrefix\n   * @param {String} prefix\n   */\n  setTitlePrefix(prefix = null) {\n    this._logDeprecatedCall(\n      ['setTitlePrefix', 'setTitleCount'],\n      '2.3.0',\n      ...arguments\n    );\n\n    if (/^\\d+$/.test(prefix)) {\n      this.state.setTitleCount(Number(prefix));\n    }\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method setTitleCount\n   * @param {Number} count\n   */\n  setTitleCount(count = 0) {\n    this._logCall('setTitleCount', ...arguments);\n    assert(\n      'setTitleCount(): count needs to be a number (integer, greater or equal 0).',\n      /^\\d+$/.test(count) && Number(count) >= 0\n    );\n    this.state.setTitleCount(Number(count) || 0);\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method hideCommunicator\n   * @private\n   */\n  hideCommunicator() {\n    this._logCall('hideCommunicator', ...arguments);\n    this.communicator.isVisible = false;\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method showCommunicator\n   * @private\n   */\n  showCommunicator() {\n    this._logCall('showCommunicator', ...arguments);\n    this.communicator.isVisible = true;\n  }\n\n  // App Events\n\n  /**\n   * This should be called by the App whenever a page finished loading. LIGA OS\n   * then removes the Overlay and makes the App visible.\n   *\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method notifyAppLoaded\n   */\n  notifyAppLoaded() {\n    this._logCall('notifyAppLoaded', ...arguments);\n    this.state.setAppLoaded(true);\n  }\n\n  /**\n   * Should be called by the app if the current user has no valid session. LIGA\n   * OS closes the app and shows the login screen.\n   *\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method notifyInvalidSession\n   */\n  notifyInvalidSession() {\n    this._logCall('notifyInvalidSession', ...arguments);\n    this.session.validateSession().then((valid) => {\n      if (!valid) {\n        this.session.triggerLogout();\n      } else {\n        this.state.triggerAppError({\n          title: this.intl.t('access-denied'),\n          description: this.intl.t('you-are-missing-rights-to-access-this-app'),\n        });\n      }\n    });\n  }\n\n  /**\n   * Should be called by the app if the current user has not the necessary\n   * rights to access the app. LIGA OS closes the app and shows an error.\n   *\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method notifyAccessDenied\n   */\n  notifyAccessDenied({ message } = {}) {\n    this._logCall('notifyAccessDenied', ...arguments);\n    this.state.triggerAppError({\n      title: this.intl.t('access-denied'),\n      description:\n        message || this.intl.t('you-are-missing-rights-to-access-this-app'),\n    });\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method setBlur\n   * @param {boolean} state\n   */\n  setBlur(state) {\n    this.state.isBlurred = state;\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method checkBrowserSupport\n   * @param {Array} supportedBrowsers\n   * @return {boolean}\n   */\n  checkBrowserSupport(supportedBrowsers) {\n    this._logCall('checkBrowserSupport', ...arguments);\n\n    if (!isSupportedBrowser(supportedBrowsers)) {\n      const description = formatSupportedBrowsers(supportedBrowsers);\n      this.state.triggerAppError({\n        title: this.intl.t('your-browser-is-not-supported'),\n        description: `${this.intl.t('supported-browsers-are')}: ${description}`,\n      });\n\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method confirm\n   * @param {sting} message\n   * @return {boolean}\n   */\n  confirm(message) {\n    return window.confirm(message);\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method getTheme\n   * @param {object} theme\n   * @return {object}\n   */\n  getTheme() {\n    this._logCall('getTheme', ...arguments);\n    return this.clientTheme.data;\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method getSetting\n   * @param {String} key\n   * @param {any} defaultValue\n   * @return {Promise<any>} value\n   */\n  getSetting(key, defaultValue) {\n    return this.settings\n      .getValue(key)\n      .then((value) => (isNone(value) ? defaultValue : value));\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @method getTheme\n   * @param {String} key\n   * @param {any} value\n   * @return {Promise<any>} value\n   */\n  setSetting(key, value) {\n    this._logCall('setSetting', ...arguments);\n\n    return this.settings\n      .setValue(key, value)\n      .then((setting) => this.settings.saveSetting(setting));\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @private\n   * @method triggerEvent\n   * @param {String} event\n   */\n  triggerEvent(event) {\n    const iframe = document.querySelector('.app-frame');\n    if (iframe) {\n      iframe.contentWindow.postMessage({ event }, '*');\n    }\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   * @private\n   *\n   * @method _validateMessageOrigin\n   * @param {String} origin\n   * @return {Boolean}\n   */\n  _validateMessageOrigin(origin) {\n    const allowedApps = this.navigation.getApps();\n\n    // Trust everything that runs on the same domain\n    if (origin === window.location.origin) {\n      return true;\n    }\n\n    const isAllowed = allowedApps.some((app) => {\n      return app.url.origin.indexOf(origin) === 0;\n    });\n\n    return isAllowed;\n  }\n\n  /**\n   * @memberof LigaOsApi\n   * @instance\n   *\n   * @private\n   * @method register\n   */\n  register() {\n    window.addEventListener('message', this.handleWindowMessage);\n  }\n\n  // Helper functions\n\n  _logCall(func, ...args) {\n    if (!this.config.log?.ligaOSApi?.call) {\n      return;\n    }\n\n    args = args.filter((arg) => typeof arg !== 'function');\n\n    if (args.length > 0) {\n      /* eslint-disable no-console */\n      console[LOG_GROUP_FUNC](\n        `%c[liga-os-api] ${func}()`,\n        `color:${LOG_COLOR};`\n      );\n      args.forEach((arg) => console.log(arg));\n      console.groupEnd('');\n    } else {\n      console.log(\n        `%c[liga-os-api] ${func}()`,\n        `color:${LOG_COLOR}; font-weight: bold;`\n      );\n      /* eslint-enable no-console */\n    }\n  }\n\n  _logResponse(response) {\n    if (!this.config.log?.ligaOSApi?.response) {\n      return;\n    }\n\n    if (response) {\n      /* eslint-disable no-console */\n      console[LOG_GROUP_FUNC](\n        '%c=>',\n        `color: ${LOG_COLOR}; font-weight: bold;`\n      );\n      console.log(response);\n      console.groupEnd();\n      /* eslint-enable no-console */\n    }\n  }\n\n  _logDeprecatedCall(funcArg, until, ...args) {\n    if (!this.config.log?.ligaOSApi?.deprecated) {\n      return;\n    }\n\n    if (typeof funcArg === 'string') {\n      funcArg = [funcArg];\n    }\n\n    const [func, funcReplace] = funcArg;\n\n    this._logCall(func, ...args);\n    deprecate(\n      `[liga-os-api] ${func}() is deprecated ${\n        funcReplace ? ` use ${funcReplace}() instead` : ''\n      }.`,\n      null,\n      {\n        id: `liga-os-api:${func\n          .replace(/([A-Z][a-z]+|[a-z]+)([A-Z])/g, '$1-$2')\n          .toLowerCase()}`,\n        until,\n      }\n    );\n  }\n\n  willDestroy() {\n    window.removeEventListener('message', this.handleWindowMessage);\n  }\n\n  @action\n  handleWindowMessage(event) {\n    const {\n      origin,\n      source,\n      data: { idx, method, args },\n    } = event;\n\n    const allowedOrigin = this._validateMessageOrigin(origin);\n    if (!allowedOrigin) {\n      console.error('Untrusted origin:', origin);\n    }\n\n    if (source && idx && method && allowedOrigin) {\n      if (typeof this[method] === 'function') {\n        RSVP.resolve(this[method](...(args || [])))\n          .then((response) => {\n            this._logResponse(response);\n            source.postMessage({ idx, response }, '*');\n          })\n          .catch((error) => console.error('[liga-os-api] error', error));\n      } else {\n        console.error('[liga-os-api] Invalid call', { idx, method, args });\n      }\n    }\n  }\n}\n","import { inject as service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport BaseMicroMenuService from 'ln-ember-contact-menu/services/micro-menu';\n\nexport default class MicroMenuService extends BaseMicroMenuService {\n  @service state;\n\n  @tracked horizontalAttachement = 'left';\n\n  get session() {\n    return this.state.session;\n  }\n}\n","import { assert } from '@ember/debug';\nimport Evented from '@ember/object/evented';\nimport EmberObject from '@ember/object';\nimport RSVP from 'rsvp';\nimport { later, cancel } from '@ember/runloop';\nimport Service, { inject as service } from '@ember/service';\nimport { classify } from '@ember/string';\nimport { typeOf, isNone } from '@ember/utils';\nimport { pluralize } from 'ember-inflector';\nimport { tracked } from '@glimmer/tracking';\n\nimport { replaceAll, escapeExpStr } from 'ln-liga-os/utils/regexp';\nimport { cleanUrl, cleanAppUrl, decodeHashPart } from '../utils/url';\nimport config from 'ln-liga-os/config/environment';\n\nfunction replaceUrlPlaceholders(url) {\n  return url.replace('{host}', window.location.hostname);\n}\n\nfunction stripFeatureBranchName(url) {\n  return url.replace(/(-[A-Z]+[A-Za-z0-9]+)(-\\d+)(\\/?)/, '$3');\n}\n\nexport default class NavigationService extends Service.extend(Evented) {\n  @service api;\n  @service intl;\n  @service session;\n  @service state;\n  @service store;\n\n  config = config.APP.config;\n\n  @tracked currentUrl = null;\n\n  @tracked navigations = null;\n\n  _placeholders = {};\n\n  lastLoadedAppCheck = undefined;\n\n  constructor(...args) {\n    super(...args);\n    this.session.on('did-logout', this, this.reset);\n  }\n\n  get currentItem() {\n    const appConfig = this.getAppFor(this.currentUrl);\n    if (!appConfig) {\n      return null;\n    }\n\n    const parentSlug = appConfig.parent;\n\n    if (!parentSlug) {\n      return this.getItemFor(this.currentUrl);\n    }\n\n    const parentItem = this.getApps().find((app) => {\n      return app.slug === parentSlug;\n    });\n\n    return this.getItemFor(parentItem.url.toString());\n  }\n\n  get currentApp() {\n    return this.getAppFor(this.currentUrl);\n  }\n\n  // This is supposed to be needed in the development only\n  // in order to map ln-test URLs provided by API to the locally served apps\n  get urlReplaces() {\n    const urlReplaces = this.config.urlReplaces || {};\n\n    Object.keys(urlReplaces).forEach((key) => {\n      urlReplaces[key] = replaceUrlPlaceholders(urlReplaces[key]);\n    });\n\n    return urlReplaces;\n  }\n\n  reset() {\n    this.navigations = null;\n    this.currentUrl = null;\n  }\n\n  loadNavigations(force = false) {\n    if (!force && this.navigations) {\n      return RSVP.resolve();\n    }\n\n    return this.api\n      .read('myliga', ['navigations']) // Should also use the Myliga API, but there is a problem on PI prod\n      .then((response) => {\n        this.navigations = this._cleanUpNavigations(response.result);\n        return RSVP.resolve();\n      });\n  }\n\n  isAllowedAppUrl(url) {\n    const app = this.getAppFor(url);\n\n    return Boolean(app && !app.get('disabled'));\n  }\n\n  loadedAppCheck() {\n    if (!this.state.appLoaded) {\n      if (this.config.disable.loadedAppCheck) {\n        return this.state.setAppLoaded(true);\n      }\n\n      cancel(this.lastLoadedAppCheck);\n\n      this.lastLoadedAppCheck = later(() => {\n        if (!this.session.isLoggedIn) {\n          return;\n        }\n        if (!this.state.appLoaded) {\n          if (this.config.disable.loadedAppCheckError) {\n            console.error(\n              'App not loaded: The App could not be loaded properly.'\n            );\n            return this.state.setAppLoaded(true);\n          }\n\n          this.state.triggerAppError({\n            title: this.intl.t('app-not-loaded'),\n            description: this.intl.t('the-app-could-not-be-loaded-properly'),\n          });\n        }\n      }, this.config.loadedAppCheckTime || 3000);\n    }\n  }\n\n  belongsToCurrentApp(url) {\n    return this.getItemFor(this._cleanUrl(url)) === this.currentItem;\n  }\n\n  belongsToExternalApp(url) {\n    const app = this.getAppFor(url);\n    return Boolean(app && !app.get('slug'));\n  }\n\n  getItemFor(url) {\n    if (!url || !this.navigations) {\n      return;\n    }\n\n    if (this.config.allow_feature_branches) {\n      url = stripFeatureBranchName(url.toString());\n    }\n\n    return this.navigations\n      .slice()\n      .sort((a, b) => b.url.length - a.url.length)\n      .find((nav) => {\n        const navUrl = nav.url.replace(new RegExp(/\\/?#?\\/$/), '');\n\n        return new RegExp(`${escapeExpStr(navUrl)}($|#|/|\\\\?)`).test(url);\n      });\n  }\n\n  getApps() {\n    const apps = (this.config.apps || [])\n      .filter((app) => app.url)\n      .map((app) => {\n        const urlString = replaceUrlPlaceholders(app.url);\n        // if the `urlString` is fully qualified URL\n        // the second argument is being ignored\n        const url = new URL(urlString, location.origin);\n        const path = urlString.startsWith('/')\n          ? `${url.pathname}`\n          : `${url.host}${url.pathname}`;\n        const search = url.search || '';\n        const hash = url.hash || '';\n\n        // matches incoming URL strings with a proper navigation item config\n        const urlMatcher = new RegExp(\n          `/?${escapeExpStr((path + search).replace(/\\/$/, ''))}(#|/|$)`\n        );\n\n        // @todo: `url_path` is some workaround mechanism\n        // let's make sure we don't have it on API and remove this codepath\n        const navItem = (this.navigations || []).find((item) => {\n          return urlMatcher.test(item.url);\n        });\n\n        const slug = navItem && navItem.url_path ? navItem.url_path : app.slug;\n\n        return EmberObject.create({\n          ...app,\n          urlMatcher,\n          url,\n          path: path.replace(/^\\//, '').replace(/\\/$/, ''),\n          search,\n          hash,\n          slug,\n        });\n      });\n\n    return apps;\n  }\n\n  getAppFor(url) {\n    url = this._cleanUrl(url);\n\n    if (this.config.allow_feature_branches) {\n      url = stripFeatureBranchName(url);\n    }\n\n    return this.getApps().find((app) => {\n      return app.urlMatcher.test(url);\n    });\n  }\n\n  openUrl(url) {\n    if (this.belongsToExternalApp(url)) {\n      this.state.applicationsError = null;\n      const newWindow = window.open(url, '_blank');\n\n      // detect popup blocker\n      if (!newWindow || newWindow.closed || isNone(newWindow.closed)) {\n        this.state.applicationsError = this.intl.t(\n          'popup-blocked-please-allow-popups'\n        );\n        return false;\n      }\n      return true;\n    }\n\n    if (!this.belongsToCurrentApp(url)) {\n      this.state.resetTitle();\n      this.state.setAppLoaded(false);\n    }\n\n    url = this._cleanUrl(url);\n\n    if (this.setUrl(url)) {\n      this.trigger('open-url', url);\n      return true;\n    }\n\n    return false;\n  }\n\n  setUrl(url) {\n    this.resetAppError();\n\n    url = this._cleanUrl(url);\n\n    const app = this.getAppFor(url);\n\n    const isAppAllowed = app && app.disabled !== true;\n    if (!isAppAllowed) {\n      // eslint-disable-next-line no-console\n      console.warn(`Is not an allowed app URL: ${url}`);\n\n      this.state.triggerAppError({\n        title: this.intl.t('access-denied'),\n        description: this.intl.t('the-app-is-not-a-valid-ligaos-app'),\n      });\n\n      return false;\n    }\n\n    // TODO: check if parent app is allowed by navigations\n    const isAllowedByNavigations = this.getItemFor(url) || app.parent;\n    if (!isAllowedByNavigations) {\n      this.state.triggerAppError({\n        title: this.intl.t('access-denied'),\n        description: 'You are missing necessary rights to access this app.',\n      });\n\n      return false;\n    }\n\n    this.currentUrl = url;\n    this.trigger('url-did-change', url);\n\n    return true;\n  }\n\n  resetAppError() {\n    if (this.state.appError) {\n      this.state.triggerAppErrorReset();\n    }\n  }\n\n  isCurrentUrl(url) {\n    return this.currentUrl === url;\n  }\n\n  isCurrentItem(item) {\n    return this.currentUrl === item.url;\n  }\n\n  findFirstItem(items) {\n    return items.find((item) => item.url);\n  }\n\n  openFirstItem() {\n    const { url } = this.findFirstItem(this.navigations) || {};\n    this.openUrl(url);\n  }\n\n  openResource(resource, resourceId) {\n    assert(\n      'Provide resource (string), resourceId (number)',\n      this.canOpenResource(resource, resourceId)\n    );\n    return this._buildResourceUrl(resource, resourceId).then((url) =>\n      this.openUrl(url)\n    );\n  }\n\n  canOpenResource(resource, resourceId) {\n    if (resource === 'Message') {\n      return true;\n    }\n\n    return Boolean(\n      !isNone(resourceId) &&\n        !isNaN(Number(resourceId)) &&\n        typeOf(resource) === 'string' &&\n        this._getResourceUrlTemplate(resource)\n    );\n  }\n\n  _buildResourceUrl(resource, resourceId) {\n    return this._loadSegments(resource, resourceId).then(\n      ({ resource, segments }) => {\n        const urlTemplate = this._getResourceUrlTemplate(resource);\n        let url = this._fillPlaceholders(urlTemplate, segments);\n        url = this.removeSlug(url);\n        url = decodeHashPart(url);\n        url = replaceAll(url, this.urlReplaces);\n\n        return RSVP.resolve(url);\n      }\n    );\n  }\n\n  removeSlug(url) {\n    const ticketId = this.config.allow_feature_branches\n      ? '((-\\\\w+)?(-\\\\d+))?'\n      : '';\n\n    this.getApps()\n      .filter(({ slug }) => slug)\n      .forEach((app) => {\n        const find = new RegExp(\n          `^(!//?)${escapeExpStr(app.slug)}(${ticketId})($|/(?<appPath>.*|$))`\n        );\n\n        const matches = url.match(find);\n        if (matches) {\n          const basePath = app.path;\n          const protocol = matches[1] || ''; // \"!//\" or \"!/\"\n          const ticketHandle = matches[2] || '';\n          const { appPath } = matches.groups;\n          url = `${protocol}${basePath}${ticketHandle}/${app.search}${app.hash}${appPath}`;\n        }\n      });\n\n    return url;\n  }\n\n  addSlug(url) {\n    const ticketId = this.config.allow_feature_branches\n      ? '((-\\\\w+)?(-\\\\d+))?'\n      : '';\n\n    this.getApps()\n      .filter(({ slug }) => slug)\n      .forEach((app) => {\n        const basePath = escapeExpStr(app.path);\n        const search = escapeExpStr(app.search.replace('?', '|'));\n        const find = new RegExp(\n          `^(!//?)${basePath}(${ticketId}/)${search}([|]{2})?/?(?<appPath>.*|$)`\n        );\n\n        const matches = url.match(find);\n        if (matches) {\n          const protocol = matches[1];\n          const ticketHandle = matches[2];\n          const { appPath } = matches.groups;\n\n          url = `${protocol}${app.slug}${ticketHandle}${appPath}`;\n        }\n      });\n\n    return url;\n  }\n\n  _fillPlaceholders(url, segments = null) {\n    url = url || '';\n\n    this._extractPlaceholders(url).forEach((placeholder) => {\n      const segment = segments[placeholder] || '';\n      url = url.replace(`:${placeholder}`, segment);\n    });\n\n    return url;\n  }\n\n  _extractPlaceholders(url) {\n    if (!this._placeholders[url]) {\n      this._placeholders[url] = (\n        String(url).match(/:([^/\\d][^/|&]*)/g) || []\n      ).map((placeholder) => placeholder.replace(/^:/, ''));\n    }\n\n    return this._placeholders[url];\n  }\n\n  _getResourceUrlTemplate(resource) {\n    return this.config.resourceUrlTemplates?.[classify(resource)];\n  }\n\n  _loadSegments(resource, resourceId) {\n    const func = `_load${classify(resource)}Segments`;\n\n    if (typeOf(this[func]) === 'function') {\n      return this[func](resourceId);\n    }\n\n    /*\n     * All the placeholders in config/targets (resourceUrlTemplates)\n     * are lowercase, and since we use 'context_type' (which comes from API capitalized) for\n     * segment/placeholder processing, there is an issue when trying to access the segment.\n     *\n     * API:\n     * {\n     *  ...\n     *  context_type: 'Pin'\n     *  context_id: 3147\n     *  ...\n     * }\n     *\n     * APP:\n     * segment object:\n     * {\n     *  pin: 3147\n     * }\n     */\n    const resourceVal = resource.toLowerCase();\n\n    return RSVP.resolve({\n      segments: { [resourceVal]: resourceId },\n      resource,\n    });\n  }\n\n  _loadArticleReviewSegments(articleReviewId) {\n    const resource = 'ArticleReview';\n\n    return this.api\n      .read('vdc', ['article_reviews', articleReviewId])\n      .then((articleReview) => {\n        const segments = {\n          project: articleReview.project_id,\n          country: articleReview.country_id,\n        };\n\n        return RSVP.resolve({ resource, segments });\n      });\n  }\n\n  _loadStoreSegments(storeId) {\n    const segments = {};\n    return this.api.read('vdc', ['stores', storeId]).then((store) => {\n      segments.store = store.id;\n      segments.client = store.client_id;\n\n      return RSVP.resolve({ segments, resource: 'Store' });\n    });\n  }\n\n  _loadOrderSegments(orderId) {\n    const segments = {};\n    return this.api\n      .read('vdc', ['orders', orderId])\n      .then((order) => {\n        segments.order = order.id;\n        return this.api.read('vdc', ['projects', order.project_id]);\n      })\n      .then((project) => {\n        segments.project = project.id;\n        return this.api.read('vdc', ['clients', project.client_id]);\n      })\n      .then((client) => {\n        segments.client = client.id;\n        return RSVP.resolve({ resource: 'Order', segments });\n      });\n  }\n\n  _loadAssemblySegments(assemblyId) {\n    const segments = {};\n    return this.api\n      .read('vdc', ['assemblies', assemblyId])\n      .then((assembly) => {\n        segments.assembly = assembly.id;\n        return this.api.read('vdc', ['projects', assembly.project_id]);\n      })\n      .then((project) => {\n        segments.project = project.id;\n        return this.api.read('vdc', ['clients', project.client_id]);\n      })\n      .then((client) => {\n        segments.client = client.id;\n        return RSVP.resolve({ resource: 'Assembly', segments });\n      });\n  }\n\n  _loadProjectSegments(projectId) {\n    return this.api\n      .read('vdc', ['projects', projectId])\n      .then(function (project) {\n        const segments = {\n          project: project.get('id'),\n          client: project.get('client_id'),\n        };\n\n        return RSVP.resolve({ resource: 'Project', segments });\n      });\n  }\n\n  _loadProjectTaskSegments(taskId) {\n    const segments = {};\n\n    return this.api\n      .read('vdc', ['tasks', taskId])\n      .then((task) => {\n        segments.task = task.id;\n\n        return this.api.read('vdc', ['projects', task.context_id]);\n      })\n      .then((project) => {\n        segments.project = project.id;\n        segments.client = project.client_id;\n\n        return RSVP.resolve({ resource: 'ProjectTask', segments });\n      });\n  }\n\n  _loadEventTaskSegments(taskId) {\n    const segments = {};\n\n    return this.api\n      .read('vdc', ['tasks', taskId])\n      .then((task) => {\n        segments.task = task.id;\n\n        return this.api.read('vdc', ['events', task.context_id]);\n      })\n      .then((event) => {\n        segments.event = event.id;\n        segments.client = event.client_id;\n\n        return RSVP.resolve({ resource: 'EventTask', segments });\n      });\n  }\n\n  _loadMessageSegments(messageId) {\n    const segments = {};\n\n    return this.api\n      .read('vdc', ['messages', messageId])\n      .then((message) => {\n        const contextType = message.context_type;\n\n        segments.message = message.id;\n\n        if (!['Project', 'Event'].includes(contextType)) {\n          return RSVP.reject();\n        }\n\n        const resource = pluralize(contextType.toLowerCase());\n\n        return this.api\n          .read('vdc', [resource, message.context_id])\n          .then((resource) => ({\n            resource,\n            resourceName: contextType,\n          }));\n      })\n      .then(({ resource, resourceName }) => {\n        segments[resourceName.toLowerCase()] = resource.id;\n        segments.client = resource.client_id;\n\n        return RSVP.resolve({\n          segments,\n          resource:\n            resourceName === 'Project' ? 'ProjectMessage' : 'EventMessage',\n        });\n      });\n  }\n\n  _cleanUrl(url) {\n    let _url = url || '';\n    _url = cleanUrl(_url);\n    _url = cleanAppUrl(_url);\n    _url = replaceAll(_url, this.urlReplaces);\n\n    return _url;\n  }\n\n  _cleanUpNavigations(navigations) {\n    if (!navigations) {\n      return [];\n    }\n\n    return navigations\n      .sort((n1, n2) => n1.position - n2.position)\n      .map((navigation) => this._cleanUpNavigation(navigation))\n      .filter((navigation) => {\n        const allowed = this.isAllowedAppUrl(navigation.url);\n\n        if (!allowed) {\n          // eslint-disable-next-line no-console\n          console.warn('Not an allowed navigation item', navigation);\n        }\n\n        return allowed;\n      });\n  }\n\n  _cleanUpNavigation(navigation) {\n    navigation.url = replaceAll(navigation.url, this.urlReplaces);\n\n    return navigation;\n  }\n}\n","import Evented from '@ember/object/evented';\nimport Service, { inject as service } from '@ember/service';\nimport io from 'socket.io-client';\nimport config from 'ln-liga-os/config/environment';\n\nexport default class PubSubService extends Service.extend(Evented) {\n  @service session;\n\n  config = config.APP.config;\n\n  subscribe() {\n    if (this.socket) {\n      this.unsubscribe();\n    }\n\n    const transports = this.config['ln-pub-sub-service']?.transports || [\n      'websocket',\n      'polling',\n    ];\n    const serviceUrl = this.config['ln-pub-sub-service']?.url;\n    if (!serviceUrl) {\n      console.error(\n        '[PubSub] Configuration for `ln-pub-sub-service.url` missing!'\n      );\n      return;\n    }\n\n    const token = this.session.token;\n\n    if (!token) {\n      console.error('[PubSub] Session missing!');\n      return;\n    }\n\n    const { url, path } = this.splitUrl(serviceUrl);\n\n    this.socket = io(url, {\n      path,\n      forceNew: true,\n      transports,\n    });\n\n    this.socket.on('connect', this._setToken);\n\n    this.session.on('didUpdateToken', this._setToken);\n\n    this.socket.on('event', (event) => {\n      this.trigger('event', event);\n      if (this.config.log?.pubSub?.events) {\n        console.log('[PubSub] event', JSON.stringify(event));\n      }\n    });\n\n    this.socket.on('error', (error) => console.error('[PubSub]', error));\n  }\n\n  unsubscribe() {\n    if (!this.socket) {\n      return;\n    }\n\n    this.socket.disconnect();\n    this.socket = null;\n\n    this.session.off('didUpdateToken', this._setToken);\n  }\n\n  splitUrl(serviceUrl) {\n    const url = new URL(serviceUrl);\n    const path =\n      url.pathname === '/'\n        ? '/socket.io'\n        : `${url.pathname.replace(/\\/$/, '')}/socket.io`;\n\n    url.pathname = '';\n\n    return { url: url.toString(), path };\n  }\n\n  _setToken = () => {\n    this.socket.emit('authentication', { token: this.session.token });\n  };\n}\n","import Service, { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\nimport Evented from '@ember/object/evented';\nimport Keycloak from 'ln-liga-os/utils/keycloak';\nimport config from 'ln-liga-os/config/environment';\n\nexport const KEYCLOAK_REDIRECT_HASH = '#keycloak-gateway';\nconst LEGACY_LOGIN_KEY = 'legacy-login';\n\nexport default class SessionService extends Service.extend(Evented) {\n  @service api;\n  @service state;\n\n  _keycloakAdapter = null;\n  _legacyAdapter = null;\n\n  constructor(...args) {\n    super(...args);\n    const keycloakConfigs = config.APP.keycloakPerOrigin ?? [];\n    const keycloakConfig =\n      keycloakConfigs.find((item) => {\n        return item.origins.includes(window.location.origin);\n      })?.config ?? null;\n\n    this._legacyAdapter = new LegacyAdapter({\n      api: this.api,\n      state: this.state,\n    });\n\n    if (keycloakConfig) {\n      this._keycloakAdapter = new KeycloakAdapter({\n        ...keycloakConfig,\n        url: config.APP.keycloakUrl,\n        legacyAdapter: this._legacyAdapter,\n        state: this.state,\n        didUpdateToken: () => {\n          this.trigger('didUpdateToken');\n        },\n      });\n    }\n  }\n\n  get content() {\n    return this.state.session;\n  }\n\n  get isKeycloak() {\n    return Boolean(this._keycloakAdapter && !this.forceLegacyLogin);\n  }\n\n  // true if the user is logged in (either via keycloak or legacy)\n  // it isn't supposed to encounter if the token is expired\n  // use validateSession to check if the session is still valid\n  //\n  // @returns {boolean}\n  get isLoggedIn() {\n    return this.adapter.isLoggedIn;\n  }\n\n  get isAnonymousUser() {\n    return !!this.isLoggedIn && !this.userId;\n  }\n\n  get token() {\n    return this.adapter.token;\n  }\n\n  get userId() {\n    return this.content?.user_id;\n  }\n\n  get adapter() {\n    return this.isKeycloak ? this._keycloakAdapter : this._legacyAdapter;\n  }\n\n  set forceLegacyLogin(value) {\n    if (value) {\n      localStorage.setItem(LEGACY_LOGIN_KEY, '1');\n    } else {\n      localStorage.removeItem(LEGACY_LOGIN_KEY);\n    }\n  }\n\n  get forceLegacyLogin() {\n    return Boolean(localStorage.getItem(LEGACY_LOGIN_KEY));\n  }\n\n  get user() {\n    return this.adapter.user;\n  }\n\n  checkAuth() {\n    return this.adapter.checkAuth();\n  }\n\n  auth(options = {}) {\n    this.forceLegacyLogin = !!options.legacy;\n\n    return this.adapter.auth(options).then((result) => {\n      this.state.setSession(result);\n\n      return result;\n    });\n  }\n\n  loadToken() {\n    return this.isLoggedIn ? this.adapter.loadToken() : Promise.resolve();\n  }\n\n  triggerLogout() {\n    const oldUserId = this.userId;\n\n    return this.adapter.logout().then(() => {\n      this.forceLegacyLogin = false;\n      this.state.setSession(null);\n      this.trigger('did-logout', oldUserId);\n    });\n  }\n\n  // returns a promise that resolves with true if the session is still valid, false otherwise\n  //\n  // @returns {Promise<boolean>}\n  validateSession() {\n    return Promise.resolve().then(() => {\n      if (!this.token) {\n        return false;\n      }\n\n      return this.adapter.validateSession();\n    });\n  }\n\n  willDestroy(...args) {\n    super.willDestroy(...args);\n    this._legacyAdapter = null;\n    if (this._keycloakAdapter) {\n      this._keycloakAdapter.destroy();\n      this._keycloakAdapter = null;\n    }\n  }\n}\n\nexport class AnonymousUserError extends Error {}\n\nclass KeycloakAdapter {\n  location = window.location;\n\n  _error = null;\n\n  _lastTokenRefreshPromise = null;\n\n  _lastTokenRefreshTimestamp = 0;\n\n  _clientId = null;\n\n  constructor(config) {\n    this._clientId = config.clientId;\n    this._keycloak = new Keycloak({\n      clientId: config.clientId,\n      realm: config.realm,\n      url: config.url,\n    });\n    this.state = config.state;\n    this.loginOptions = config.loginOptions?.map((typeData) => {\n      return typeof typeData === 'string' ? { name: typeData } : typeData;\n    });\n    this._legacyAdapter = config.legacyAdapter;\n    this._didUpdateToken = config.didUpdateToken;\n  }\n\n  destroy() {\n    clearInterval(this._intervalId);\n  }\n\n  get clientId() {\n    return this._clientId;\n  }\n\n  get isLoggedIn() {\n    return this._keycloak.authenticated;\n  }\n\n  get user() {\n    return this._legacyAdapter.user;\n  }\n\n  /**\n   * Checks if the user is authenticated and authorized.\n   * If Keycloak client config contains `loginOptions`, the check-sso flow is used.\n   * This allows the user to stay on the liga-os page and to choose the login button to use.\n   * Otherwise, the login-required flow is used, which redirects the user to the Keycloak login page.\n   *\n   * @returns {Promise} - resolves with the MyLiga session object + token\n   *\n   * @rejects {AnonymousUserError} - if the user is authenticated, but not authorized\n   * @rejects {Error} - when `loginRequired` is `false` and if the user is not authenticated. Error object has a `status_code` property set to 401.\n   */\n  checkAuth() {\n    const currentUrl = new URL(this.location.href);\n    const redirectUri = [\n      currentUrl.origin,\n      currentUrl.pathname,\n      KEYCLOAK_REDIRECT_HASH,\n    ].join('');\n\n    if (this._keycloak.didInitialize) {\n      if (this._error) {\n        const error = this._error;\n        return Promise.reject(error);\n      }\n\n      return Promise.resolve(this.state.session);\n    }\n\n    return this._keycloak\n      .init({\n        onLoad: !this.loginOptions?.length ? 'login-required' : 'check-sso',\n        checkLoginIframe: false,\n        flow: 'standard',\n        // This option is undocumented, but it works\n        // It is necessary because keycloak uses current uri as redirectUri\n        // by default, but it fails if redirectUri contains a pipe.\n        // To work around this issue we redirect to a \"valid\" (according to\n        // keycloak) url which in turn redirects to the url we need.\n        redirectUri,\n        // see: https://github.com/keycloak/keycloak/issues/26405#issuecomment-1907880982\n        responseMode: 'query',\n        // TODO: huh???\n        useNonce: false,\n      })\n      .then((authorized) => {\n        if (!authorized) {\n          throw new UnauthorizedError();\n        }\n\n        this._lastTokenRefreshTimestamp = Date.now();\n        this._intervalId = setInterval(\n          this.loadToken,\n          config.APP.keycloakRefreshInterval\n        );\n\n        return this._legacyAdapter\n          .checkAuth()\n          .then((result) => {\n            this.state.setSession(result);\n\n            return result;\n          })\n          .catch((error) => {\n            this.state.setSession(null);\n\n            if (error.status_code === 401) {\n              throw new AnonymousUserError();\n            }\n\n            throw error;\n          })\n          .catch((error) => {\n            // store the error to be able to reject the next checkAuth call with it\n            this._error = error;\n            throw error;\n          });\n      });\n  }\n\n  @action\n  loadToken() {\n    if (this._lastTokenRefreshPromise) {\n      return this._lastTokenRefreshPromise;\n    }\n    const timestamp = Date.now();\n    const duration = timestamp - this._lastTokenRefreshTimestamp;\n    const interval = config.APP.keycloakRefreshInterval;\n\n    let promise = Promise.resolve(this.token);\n    if (duration >= interval) {\n      this._lastTokenRefreshTimestamp = timestamp;\n      promise = this._keycloak.updateToken(-1).then(() => {\n        this._didUpdateToken?.();\n\n        return this.token;\n      });\n      this._lastTokenRefreshPromise = promise;\n    }\n    return promise.finally(() => {\n      this._lastTokenRefreshPromise = null;\n    });\n  }\n\n  validateSession() {\n    return this.isLoggedIn && !this._keycloak.isTokenExpired();\n  }\n\n  auth({ idpHint } = {}) {\n    if (!this._keycloak.didInitialize) {\n      throw new Error('Keycloak not initialized yet');\n    }\n\n    return this._keycloak.login({ idpHint });\n  }\n\n  logout() {\n    if (!this._keycloak.authenticated) {\n      return Promise.resolve();\n    }\n\n    this._error = null;\n    clearInterval(this._intervalId);\n\n    let redirectUri = this.location.href;\n    const pipeIndex = redirectUri.indexOf('|');\n    if (pipeIndex !== -1) {\n      redirectUri = redirectUri.substring(0, pipeIndex);\n    }\n    return this._keycloak.logout({ redirectUri });\n  }\n\n  get token() {\n    return this._keycloak.token;\n  }\n}\n\nclass LegacyAdapter {\n  constructor({ api, state }) {\n    this.api = api;\n    this.state = state;\n  }\n\n  checkAuth() {\n    return this._loadUser()\n      .catch((error) => {\n        if (error.status_code === 401) {\n          this.state.setSession(null);\n          throw new UnauthorizedError();\n        }\n\n        throw error;\n      })\n      .then((result) => {\n        return {\n          user_id: result.id,\n        };\n      });\n  }\n\n  user = null;\n\n  _loadUser() {\n    return this.api\n      .read('vdc', '/current_user')\n      .then((user) => {\n        this.user = {\n          id: user.id,\n          name: `${user.forename} ${user.name}`,\n          email: user.email,\n        };\n\n        return user;\n      })\n      .catch((error) => {\n        this.user = null;\n        throw error;\n      });\n  }\n\n  loadToken() {\n    return Promise.resolve(this.token);\n  }\n\n  validateSession() {\n    return this._loadUser()\n      .then(() => true)\n      .catch(() => false);\n  }\n\n  auth({ username, password }) {\n    return this.api\n      .create('myliga', '/sessions', {\n        password,\n        user_name: username,\n        app_key: this.api.get('config.api-myliga.app_key'),\n      })\n      .then(({ user_id, token }) => {\n        return {\n          user_id,\n          token,\n        };\n      });\n  }\n\n  logout() {\n    return this.validateSession().then((valid) => {\n      if (valid) {\n        return this.api.delete('myliga', 'sessions');\n      }\n    });\n  }\n\n  get token() {\n    return this.state.session?.token;\n  }\n\n  get isLoggedIn() {\n    return !!this.token;\n  }\n}\n\n// 401 error\nclass UnauthorizedError extends Error {\n  constructor(message) {\n    super(message);\n    this.status_code = 401;\n  }\n}\n","import Evented from '@ember/object/evented';\nimport RSVP from 'rsvp';\nimport { isNone } from '@ember/utils';\nimport Service, { inject as service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\n\nconst defaultValues = {\n  NotificationSound: false,\n  AlwaysShowCommunicator: false,\n};\n/**\n * @class SettingsService\n */\nexport default class SettingsService extends Service.extend(Evented) {\n  @service api;\n  @service lnFlashMessages;\n  @service session;\n\n  @tracked loadPromise;\n\n  @tracked settings = [];\n\n  /**\n   *\n   * @memberof SettingsService\n   * @instance\n   *\n   * @method getValue\n   * @param {String} name\n   * @returns {any}\n   */\n  getValue(name) {\n    return this.load().then((settings) => {\n      const { value } =\n        (settings || []).find((setting) => setting.name === name) || {};\n\n      if (isNone(value)) {\n        return defaultValues[name];\n      }\n\n      return value;\n    });\n  }\n\n  /**\n   * @memberof SettingsService\n   * @instance\n   *\n   * @method getValue\n   * @param {String[]} names\n   * @returns {array}\n   */\n  getValues(names) {\n    return RSVP.hash(\n      names.reduce((all, name) => {\n        all[name] = this.getValue(name);\n        return all;\n      }, {})\n    );\n  }\n\n  /**\n   * @memberof SettingsService\n   * @instance\n   *\n   * @method setValue\n   * @param {String} name\n   * @param {any} value\n   * @return {Promise<Object>} setting\n   */\n  setValue(name, value) {\n    return this.load().then((settings) => {\n      const index = settings.findIndex((setting) => setting.name === name);\n      if (index === -1) {\n        return this.createSetting(name, value);\n      }\n      const setting = { ...settings[index], _isDirty: true, value };\n      this.settings = [\n        ...this.settings.slice(0, index),\n        setting,\n        ...this.settings.slice(index + 1),\n      ];\n      return setting;\n    });\n  }\n\n  createSetting(name, value = null) {\n    const setting = {\n      id: null,\n      version: null,\n      name,\n      value,\n      _isDirty: true,\n    };\n\n    this.settings = [...this.settings, setting];\n\n    return setting;\n  }\n\n  /**\n   * @memberof SettingsService\n   * @instance\n   *\n   * @method saveAllSettings\n   * @param {String} name\n   * @return {Promise<Object[]>} settings\n   */\n  saveAllSettings() {\n    let hasChangedSettings = false;\n\n    return this.load()\n      .then((settings) => {\n        const changedSettings = (settings || []).filter(\n          ({ _isDirty }) => _isDirty\n        );\n        hasChangedSettings = changedSettings.length > 0;\n        const promises = changedSettings.map((setting) =>\n          this.saveSetting(setting)\n        );\n\n        return RSVP.all(promises);\n      })\n      .then(() => {\n        if (hasChangedSettings) {\n          this.trigger('settings-did-change');\n        }\n\n        return this.settings;\n      });\n  }\n\n  /**\n   * @memberof SettingsService\n   * @instance\n   *\n   * @method saveSetting\n   * @param {Object} setting\n   * @return {Promise<Object>} setting\n   */\n  saveSetting(setting) {\n    const userId = this.session.userId;\n\n    const savePromise = setting.id\n      ? this.api.update(\n          'myliga',\n          ['users', userId, 'settings', setting.id],\n          setting\n        )\n      : this.api.create('myliga', ['users', userId, 'settings'], setting);\n\n    return savePromise.then((savedSetting) => {\n      const idx = this.settings.findIndex((s) => s.name === savedSetting.name);\n      if (idx !== -1) {\n        this.settings = [\n          ...this.settings.slice(0, idx),\n          savedSetting,\n          ...this.settings.slice(idx + 1),\n        ];\n      } else {\n        this.settings = [...this.settings, savedSetting];\n      }\n\n      return savedSetting;\n    });\n  }\n\n  /**\n   * @memberof SettingsService\n   * @instance\n   *\n   * @method load\n   * @param {boolean} [refresh=false]\n   * @return {Promise<Object[]>} settings\n   */\n  load(refresh = false) {\n    if (this.session.isAnonymousUser) {\n      return Promise.resolve([]);\n    }\n\n    if (refresh || !this.loadPromise) {\n      this.loadPromise = this.api\n        .read('vdc', ['current_user', 'settings'])\n        .then((response) => {\n          this.settings = response.result;\n        })\n        .catch((error) => {\n          this.lnFlashMessages.addMessage('error', 'Settings not loaded.');\n          console.error(error);\n        });\n    }\n\n    return this.loadPromise.then(() => {\n      return this.settings;\n    });\n  }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { isNone } from '@ember/utils';\nimport Evented from '@ember/object/evented';\nimport { action } from '@ember/object';\nimport RSVP from 'rsvp';\nimport Service, { inject as service } from '@ember/service';\nimport setIfChanged from '../utils/set-if-changed';\nimport playAudio from 'ln-liga-os/utils/play-audio';\nimport formatLocales from 'ln-liga-os/utils/format-locales';\n\nconst notificationSoundSrc = 'assets/audio/notification.mp3';\n\nexport default class StateService extends Service.extend(Evented) {\n  @service apiEvents;\n  @service clientTheme;\n  @service communicator;\n  @service intl;\n  @service rights;\n  @service settings;\n  @service storage;\n  @service store;\n\n  @tracked appCount = 0;\n\n  @tracked appError = null;\n\n  @tracked appLoaded = false;\n\n  @tracked appTitle = null;\n\n  @tracked appLocation = false;\n\n  @tracked applicationsError = undefined;\n\n  /**\n   * Contains the \"open\" state of communicator - the drawer with active tab\n   *\n   * @todo Check if we can remove it. We can probably rely on presence of\n   * the `activeTabId` property in `communicator` service.\n   * We don't need one property to tell whether something is open\n   * and another to tell what exactly is open.\n   */\n  @tracked communicatorIsOpen = false;\n\n  @tracked isBlurred = undefined;\n\n  @tracked languages = [];\n\n  @tracked session = null;\n\n  @tracked showClickCatcherMask = false;\n\n  @tracked user = null;\n\n  get showLoaderMask() {\n    return !this.appLoaded;\n  }\n\n  get titleCount() {\n    return this.appCount + this.communicator.badgeNumber;\n  }\n\n  loadLanguages() {\n    if (!this.languagesPromise) {\n      this.languagesPromise = this.store\n        .query('myliga/language', {\n          active: true,\n          native_spelling: true,\n        })\n        .then((languages) => {\n          this.languages = languages.slice();\n        });\n    }\n    return this.languagesPromise.then(() => {\n      return this.languages;\n    });\n  }\n\n  reset() {\n    this.user = null;\n    this.appError = null;\n    this.appLoaded = false;\n    this.communicator.reset();\n    this.rights.reset();\n    this.resetTitle();\n  }\n\n  resetTitle() {\n    this.appCount = 0;\n    this.appTitle = null;\n    this.updateTitle();\n  }\n\n  // Called in application route\n  restore() {\n    this.setSession(this.storage.get('ln-liga-os:session', null));\n    this.apiEvents.triggerLanguageChange(this.getLanguage());\n    this.intl.setLocale(formatLocales(this.getLanguage()));\n    this.updateTitle();\n  }\n\n  loadUser(force = false) {\n    if (!force && Number(this.user?.id) === this.session?.user_id) {\n      return RSVP.resolve();\n    }\n\n    if (isNone(this.session?.user_id)) {\n      return RSVP.reject(new Error('session.user_id is not set'));\n    }\n\n    return this.store\n      .findRecord('myliga/user', this.session.user_id)\n      .then((user) => (this.user = user))\n      .then(() => this.loadLanguages())\n      .then((languages) => {\n        const language = languages.find(\n          ({ id }) => `${id}` === String(this.user.language_id)\n        );\n        if (language) {\n          this.setLanguage(language.get('code'), false);\n        }\n      });\n  }\n\n  setSession(session) {\n    if (setIfChanged(this, 'session', session)) {\n      this.storage.set('ln-liga-os:session', session);\n    }\n  }\n\n  setLanguage(code, reload = true) {\n    if (code !== this.getLanguage()) {\n      this.storage.set('ln-liga-os:language', code);\n      this.apiEvents.triggerLanguageChange(code);\n      this.intl.setLocale(formatLocales(code));\n\n      if (reload) {\n        this.trigger('language-did-change', code);\n      }\n    }\n  }\n\n  getLanguage() {\n    return this.storage.get('ln-liga-os:language') || this.detectLanguage();\n  }\n\n  setAppLoaded(appLoaded) {\n    setIfChanged(this, 'appLoaded', appLoaded);\n  }\n\n  setAppTitle(appTitle = null) {\n    // TODO remove appTitle on app switch!\n    if (setIfChanged(this, 'appTitle', appTitle)) {\n      this.updateTitle();\n    }\n  }\n\n  setTitleCount(count = 0) {\n    // TODO remove prefix on app switch!\n    if (setIfChanged(this, 'appCount', count)) {\n      this.updateTitle();\n    }\n  }\n\n  showClickCatcher() {\n    this.showClickCatcherMask = true;\n    this.trigger('show-click-catcher');\n  }\n\n  hideClickCatcher() {\n    if (this.showClickCatcherMask) {\n      this.showClickCatcherMask = false;\n      this.trigger('hide-click-catcher');\n    }\n  }\n\n  setNavigationIsOpen(open) {\n    if (setIfChanged(this, 'navigationIsOpen', open)) {\n      if (open) {\n        this.showClickCatcher();\n      } else {\n        this.hideClickCatcher();\n      }\n    }\n    // TODO trigger event?\n  }\n\n  setCommunicatorIsOpen(open) {\n    this.communicatorIsOpen = open;\n    if (open) {\n      this.showClickCatcher();\n    } else {\n      this.hideClickCatcher();\n    }\n    // TODO trigger event?\n  }\n\n  propertyHasChanged(key, value) {\n    return JSON.stringify(this[key]) !== JSON.stringify(value);\n  }\n\n  triggerNotificationSound() {\n    this.settings.getValue('NotificationSound').then((enabled) => {\n      if (enabled) {\n        playAudio(notificationSoundSrc);\n      }\n    });\n  }\n\n  triggerAppErrorReset() {\n    if (this.appError) {\n      this.appError = null;\n    }\n  }\n\n  triggerAppError(error) {\n    this.appError = error;\n    this.setAppLoaded(true);\n  }\n\n  detectLanguage() {\n    const { languages = [] } = window.navigator || {};\n    return languages.find((code) => this.intl.locales.includes(code));\n  }\n\n  @action\n  updateTitle() {\n    let title = this.clientTheme.data.title || 'LIGAOS';\n\n    if (this.appTitle) {\n      title = `${this.appTitle} - ${title}`;\n    }\n\n    if (this.titleCount) {\n      title = `(${this.titleCount}) ${title}`;\n    }\n\n    document.querySelector('title').innerHTML = title;\n    document.title = title;\n  }\n}\n","import Service from '@ember/service';\nimport { isNone } from '@ember/utils';\n\nfunction useCookies() {\n  if (typeof localStorage === 'object') {\n    if (localStorage.getItem('storage-supported-test:', true)) {\n      return false;\n    }\n\n    try {\n      localStorage.setItem('storage-supported-test', true);\n      return false;\n    } catch (e) {\n      // Mute error\n    }\n  }\n\n  return true;\n}\n\nfunction setCookie(key, value) {\n  const expires = new Date();\n  expires.setTime(expires.getTime() + 365 * 24 * 60 * 60 * 1000);\n\n  document.cookie = [\n    `${key}=${value}`,\n    `expires=${expires.toGMTString()}`,\n    'path=/',\n  ].join('; ');\n}\n\nfunction getCookie(key) {\n  const pre = `${key}=`;\n  const value = document.cookie\n    .split(';')\n    .map((c) => c.replace(/(^\\s+|\\s+$)/g, ''))\n    .find((c) => c.indexOf(pre) === 0);\n\n  if (typeof value === 'string') {\n    return value.substring(pre.length, value.length);\n  }\n\n  return null;\n}\n\nexport default class StorageService extends Service {\n  get(key, defaultValue) {\n    key = `storage:${key}`;\n\n    let value = null;\n\n    try {\n      value = JSON.parse(\n        useCookies() ? getCookie(key) : localStorage.getItem(key)\n      );\n    } catch (ex) {\n      /* console.error(ex) */\n    }\n\n    return isNone(value) ? defaultValue : value;\n  }\n\n  set(key, value) {\n    key = `storage:${key}`;\n    try {\n      value = JSON.stringify(value);\n    } catch (ex) {\n      value = null;\n    }\n\n    if (useCookies()) {\n      return setCookie(key, value);\n    }\n\n    localStorage.setItem(key, value);\n  }\n}\n","import FragmentStore from 'ember-data-model-fragments/store';\nimport FragmentCache from 'ember-data-model-fragments/cache/fragment-cache';\n\nexport default class Store extends FragmentStore {\n  // ember-data 5.x's Store.cache getter returns a debug-only CacheManager\n  // wrapper on the first call, then the raw FragmentCache on subsequent calls\n  // (because it stores the raw cache in _instanceCache.cache before wrapping).\n  // FragmentStore.cache passes results through installCacheManagerCompat,\n  // which tries to unwrap CacheManager via a ___cache property that does not\n  // exist on ember-data 5.x's CacheManager. So FragmentStore.cache also\n  // returns CacheManager on the first call and FragmentCache after. In\n  // ember-data 5.x, InstanceCache.getRecord() calls this.store.cache twice\n  // within a single invocation — once directly and once via instantiateRecord\n  // — passing both results to setCacheFor(). The two different cache objects\n  // for the same identifier trigger \"Assertion Failed: Illegal set of\n  // identifier\". This is a bug in ember-data-model-fragments: its\n  // installCacheManagerCompat was written against an older CacheManager shape.\n  get cache() {\n    const c = super.cache;\n    // If installCacheManagerCompat returned a raw FragmentCache we're done.\n    // If it returned CacheManager (first call in DEBUG), reach through to the\n    // underlying FragmentCache, which is always the createCache() result.\n    return c instanceof FragmentCache ? c : this._instanceCache.cache;\n  }\n}\n","import ArrayTransform from 'ember-data-model-fragments/transforms/array';\nexport default ArrayTransform;\n","import FragmentArrayTransform from 'ember-data-model-fragments/transforms/fragment-array';\nexport default FragmentArrayTransform;\n","import FragmentTransform from 'ember-data-model-fragments/transforms/fragment';\nexport default FragmentTransform;\n","export default function () {\n  this.transition(\n    this.hasClass('click-catcher-animation'),\n    this.use('fade', { duration: 3000 })\n  );\n}\n","/**\n * @see {@link https://github.com/ef4/ember-auto-import/issues/218#issuecomment-500539712}\n */\nwindow.global = window;\n\n/**\n * TODO: Check if we need this.\n * The list of supported browsers is ancient and probably irrelevant now\n * @see \"config/base.json\"\n */\nimport browser from 'bowser';\n\nexport function isSupportedBrowser(supportedBrowsers) {\n  if (!supportedBrowsers || supportedBrowsers.length === 0) {\n    return true;\n  }\n\n  return Boolean(\n    Object.keys(supportedBrowsers).find((key) => {\n      const version = supportedBrowsers[key];\n      return browser.name.toLowerCase() === key && browser.version >= version;\n    })\n  );\n}\n\nexport function formatBrowserName(key, version) {\n  let name = key;\n\n  if (key === 'internet explorer') {\n    name += ` ${version}`;\n  }\n\n  return name\n    .split(' ')\n    .map((word) => {\n      if (word === 'iphone' || word === 'ipad') {\n        return word.replace(/^ip/, 'iP');\n      }\n\n      return word.replace(/^./, (c) => c.toUpperCase());\n    })\n    .join(' ');\n}\n\nexport function formatSupportedBrowsers(supportedBrowsers) {\n  return Object.keys(supportedBrowsers)\n    .map((key) => formatBrowserName(key, supportedBrowsers[key]))\n    .sort((a, b) => a.localeCompare(b))\n    .join(', ')\n    .replace(/, ([^,]*)$/, ' and $1');\n}\n","export default function formatErrorMessage(error, defaultErrorMessage) {\n  let { message: errorMessage = defaultErrorMessage } = error;\n\n  (error.details || []).forEach(\n    ({ message }) => (errorMessage += `\\n${message}`)\n  );\n  return errorMessage;\n}\n","export default function formatLocales(localeString = 'en') {\n  const locale = localeString.toLowerCase();\n  const [languageCode, countryCode] = locale.split('-');\n  const locales = [locale];\n  if (countryCode) {\n    locales.push(languageCode);\n  }\n  if (!locales.includes('en')) {\n    locales.push('en');\n  }\n  return locales;\n}\n","import Ember from 'ember';\n\nexport default function isOffline() {\n  if (Ember.testing) {\n    return true;\n  }\n\n  return ['on', '1', 'true', 'yes'].includes(localStorage.getItem('offline'));\n}\n","import isOffline from './is-offline';\nimport Keycloak from 'keycloak-js';\n\nclass KeycloakFake {\n  constructor() {\n    this._nextToken = null;\n    this._isTokenExpired = false;\n    this.__reset();\n  }\n\n  // test helpers\n  __reset() {\n    this.authorized = true;\n    this.didInitialize = false;\n    this.log = [];\n  }\n\n  __setTokenExpired(expired) {\n    this._isTokenExpired = expired;\n  }\n\n  __setAuthorized(authorized) {\n    this.authorized = authorized;\n  }\n\n  __setToken(value) {\n    this._token = value;\n  }\n\n  // keycloak methods\n  init(args) {\n    if (this.didInitialize) {\n      throw new Error('Keycloak is already initialized');\n    }\n\n    this.didInitialize = true;\n    this._token = 'fake-keycloak-token';\n\n    this.log.push([\n      'init',\n      {\n        onLoad: args.onLoad,\n      },\n    ]);\n\n    return Promise.resolve(this.authorized);\n  }\n\n  logout(options = {}) {\n    this.log.push(['logout', options]);\n    this.authorized = false;\n\n    return Promise.resolve();\n  }\n\n  updateToken() {\n    this.log.push(['updateToken']);\n\n    const promise = this._nextToken\n      ? Promise.resolve()\n      : Promise.resolve().then(() => {\n          throw new Error('Failed to refresh token');\n        });\n\n    return promise\n      .then(() => {\n        this._token = this._nextToken;\n      })\n      .finally(() => {\n        this._nextToken = null;\n      });\n  }\n\n  login(options = {}) {\n    this.log.push(['login', options]);\n    this.authorized = true;\n\n    return Promise.resolve();\n  }\n\n  get authenticated() {\n    return this.log.length > 0 && this.authorized;\n  }\n\n  get token() {\n    return this.authorized ? this._token : null;\n  }\n\n  isTokenExpired() {\n    return this._isTokenExpired;\n  }\n}\n\nconst keycloak = isOffline() ? KeycloakFake : Keycloak;\n\nexport default keycloak;\n","export function setPreviousUrl(url) {\n  if (url) {\n    window.sessionStorage.setItem('url-before-auth-check', url);\n  } else {\n    window.sessionStorage.removeItem('url-before-auth-check');\n  }\n}\n\nexport function setPreviousUserId(userId) {\n  if (userId) {\n    window.sessionStorage.setItem('user-id-before-auth-check', userId);\n  } else {\n    window.sessionStorage.removeItem('user-id-before-auth-check');\n  }\n}\n","export default function normalizeErrorResponse(error) {\n  let message = null;\n  const details = (error.details || [])\n    .filter(({ reference }) => reference)\n    .reduce((errors, { message, reference }) => {\n      errors[reference.replace(/^obj\\./, '')] = message;\n      return errors;\n    }, {});\n\n  if (Object.keys(details).length === 0) {\n    const messages = (error.details || [])\n      .filter(({ reference, message }) => !reference && message)\n      .map(({ message }) => message);\n\n    message = [error.message].concat(messages).join('\\n');\n  }\n\n  return { message, details };\n}\n","export default function playAudio(src) {\n  const audioElement = window.document.createElement('audio');\n  audioElement.style.display = 'none';\n  audioElement.src = src;\n  audioElement.addEventListener('canplaythrough', onAudioReady, { once: true });\n  audioElement.addEventListener('ended', onPlaybackEnded, { once: true });\n  document.body.appendChild(audioElement);\n}\n\nfunction onAudioReady(event) {\n  event.target.currentTime = 0;\n  event.target.play();\n}\n\nfunction onPlaybackEnded(event) {\n  document.body.removeChild(event.target);\n}\n","/**\n * @module RegExp\n */\n\n/**\n * ```\n * import { replaceAll } from 'ln-liga-os/utils/regexp';\n *\n * const str = replaceAll('abc', {\n *   '^a': '1',\n *   'c$': '3'\n * });\n * // => \"1c3\"\n *\n * ```\n *\n * @function\n * @param  {string} str\n * @param  {object} replaces\n * @return {string}\n */\nexport function replaceAll(str, replaces) {\n  Object.keys(replaces).forEach((find) => {\n    str = str.replace(new RegExp(find, 'g'), replaces[find]);\n  });\n\n  return str;\n}\n\n/**\n * @function\n * @param  {string} str\n * @return {string}\n */\nexport function escapeExpStr(str) {\n  return str && str.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&');\n}\n","export const SUBMIT_SUCCESS_EVENT = 'support-ticket-created';\n","import { set, get } from '@ember/object';\n\nexport function propertyHasChanged(obj, key, value) {\n  return JSON.stringify(get(obj, key)) !== JSON.stringify(value);\n}\n\nexport default function setIfChanged(obj, key, value) {\n  if (propertyHasChanged(obj, key, value) && !obj.isDestroyed) {\n    set(obj, key, value);\n    return true;\n  }\n\n  return false;\n}\n","import { escapeExpStr } from 'ln-liga-os/utils/regexp';\nimport { PREFIX_QUERY_PARAM_NAME } from 'ln-ember-toolkit/utils/liga-os';\n\nexport function replaceLocationHash(search, replace) {\n  const urlObj = new URL(location.href);\n  urlObj.hash = location.hash.replace(search, replace);\n  history.replaceState(undefined, undefined, urlObj.toString());\n}\n\nexport function cleanAppUrl(url) {\n  // Escape special characters with slash \"foo[bar]-{baz}\" -> \"foo\\[bar\\]\\-\\{baz\\}\"\n  const host = escapeExpStr(location.host);\n  const { port } = location;\n  const hostExp = port\n    ? `^https?://${host}(:${port})?([^:]|$)`\n    : `^https?://${host}([^:]|$)`;\n  const replace = port ? '$2' : '$1';\n\n  const urlParsed = new URL(url, location.origin);\n  urlParsed.searchParams.delete(PREFIX_QUERY_PARAM_NAME);\n  url = urlParsed.toString();\n\n  return (\n    url\n      // Replace with relative url if origin matches.\n      // \"https://example.com/foo?bar=baz\" -> \"/foo?bar=baz\" if location.origin is \"https://example.com\"\n      .replace(new RegExp(hostExp), replace)\n      // Remove api-session-token query param.\n      .replace(/api-session-token=[a-z0-9-]+/, '')\n      // Remove question-mark if it’s not followed by a query param (if api-session-token from above was the only query param).\n      // \"http://example.com/foo?\" -> \"http://example.com/foo\" and \"http://example.com/foo?#bar\" -> \"http://example.com/foo#bar\"\n      .replace(/\\?(#|$)/, '$1')\n  );\n}\n\nexport function cleanUrl(url) {\n  return (\n    (url || '')\n      // Replace multiple slashes with one except the case when it’s after semicolon.\n      // \"http://example.com/////foo////bar///\" -> \"http://example.com/foo.bar/\"\n      .replace(/(^|[^:])\\/\\/+/g, '$1/')\n      // Replace urlencoded pipes with decoded pipes.\n      .replace(/%7C/g, '|')\n  );\n}\n\nexport function decodeHashPart(part) {\n  const pathRegExp = /^!\\/([a-z0-9-]+)([/#?])(.*)/i;\n  const hostRegExp = /^!(\\/\\/.+)$/;\n\n  if (part && part !== '!') {\n    part = part.replace(/(^\\s*|\\s*)$/g, '').replace(/^#/, '');\n\n    if (part.match(hostRegExp)) {\n      part = part.replace(hostRegExp, `${location.protocol}$1`);\n    } else if (part.match(pathRegExp)) {\n      part = part.replace(pathRegExp, '/$1$2$3');\n    } else if (part !== '!') {\n      console.error(`invalid url part \"${part}\"`);\n      part = '!';\n    }\n\n    part = cleanUrl(part);\n\n    part = part.replace(/\\|\\|/g, '#');\n    part = part.replace(/\\|/g, '?');\n\n    return part;\n  }\n\n  return '';\n}\n\nexport function encodeHashPart(url) {\n  url = cleanUrl(url);\n\n  const appRegExp = /^(\\/[a-z0-9-]+\\/?)(#\\/)?(.*)/i;\n  const hostRegExp = /^https?:(\\/\\/.+)$/;\n\n  if (url) {\n    if (url.match(hostRegExp)) {\n      url = url.replace(hostRegExp, '!$1');\n    } else {\n      const matches = url.match(appRegExp);\n      if (matches) {\n        url = `!${matches[1]}${matches[3] || ''}`;\n      } else {\n        url = '';\n      }\n    }\n\n    url = url.replace(/#/g, '||');\n    url = url.replace(/\\?/g, '|');\n\n    return url;\n  }\n\n  return '';\n}\n","define('ln-liga-os/config/environment', [], function() {\n  var prefix = 'ln-liga-os';\ntry {\n  var metaName = prefix + '/config/environment';\n  var rawConfig = document.querySelector('meta[name=\"' + metaName + '\"]').getAttribute('content');\n  var config = JSON.parse(decodeURIComponent(rawConfig));\n\n  var exports = { 'default': config };\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n}\ncatch(err) {\n  throw new Error('Could not read config from meta tag with name \"' + metaName + '\".');\n}\n\n});\n","\n          if (!runningTests) {\n            require(\"ln-liga-os/app\")[\"default\"].create({\"config\":{\"title\":{\"liga-os\":\"LIGAOS Test\",\"vdc\":\"BrandRetail OS Test\",\"amg\":\"BrandRetail OS Test\"},\"support\":{\"default\":{\"email\":\"support@brandretailos.com\",\"url\":\"http://brandretailos.com\"},\"liganova\":{\"email\":\"support@ligaos.com\",\"url\":\"http://brandretailos.com\"}},\"homepage\":\"http://brandretailos.com\",\"resourceLocations\":{\"^/absences\":\"api-myliga\",\"^/block_categories\":\"api-myliga\",\"^/blocks\":\"api-myliga\",\"^/calendar_weeks\":\"api-myliga\",\"^/comments\":\"api-myliga\",\"^/communicator_badges\":\"api-myliga\",\"^/contact_groups\":\"api-myliga\",\"^/departments\":\"api-myliga\",\"^/email_distributors\":\"api-myliga\",\"^/events\":\"api-myliga\",\"^/kpi\":\"api-myliga\",\"^/liga3000_contacts\":\"api-myliga\",\"^/liga3000_projects\":\"api-myliga\",\"^/offered_services\":\"api-myliga\",\"^/pins\":\"api-myliga\",\"^/planned_time_entries\":\"api-myliga\",\"^/themes\":\"api-myliga\",\"^/time_entries\":\"api-myliga\",\"^/transactions\":\"api-myliga\",\".*\":\"api\"},\"resourceUrlTemplates\":{\"ArticleReview\":\"!/translation-tool/projects/:project/countries/:country/reviews\",\"Project\":\"!/bros/projects/:project|clientId=:client\",\"ProjectMessage\":\"!/bros/projects/:project/messages/:message|clientId=:client\",\"EventMessage\":\"!/bros/events/events-list/:event/messages/:message|clientId=:client\",\"ProjectTask\":\"!/bros/projects/:project/timeline|clientId=:client&taskId=:task\",\"EventTask\":\"!/bros/events/events-list/:event/tasks/:task|clientId=:client\",\"Order\":\"!/bros/projects/:project/orders/:order|clientId=:client\",\"Store\":\"!/bros/stores/:store|clientId=:client\",\"Pin\":\"!/myliga/pin/:pin\",\"User\":\"!/myliga/|user=:user\",\"AbsenceRequest\":\"!/timeboard/calendar/week/list-absence-request|team=true\",\"CompensationRequest\":\"!/timeboard/calendar/week/list-compensation-request|team=true\",\"Clap\":\"!/ligafly/\",\"Talk\":\"!/ligafly/\"},\"format\":{\"date\":\"YYYY-MM-DD\",\"date_time\":\"YYYY-MM-DD  -  HH:mm\",\"time\":\"HH:mm\"},\"formats\":{\"en\":{\"chart_date\":\"%y-%mm-%dd\",\"date\":\"YYYY-MM-DD\",\"date_time\":\"YYYY-MM-DD - HH:mm\",\"time\":\"HH:mm\"},\"de\":{\"chart_date\":\"%dd-%mm-%y\",\"date\":\"DD-MM-YYYY\",\"date_time\":\"DD-MM-YYYY - HH:mm\",\"time\":\"HH:mm\"}},\"log\":{\"ligaOSApi\":{\"deprecated\":true,\"call\":false,\"response\":false},\"pubSub\":{\"events\":true}},\"loadedAppCheckTime\":30000,\"supportedBrowsers\":{\"chrome\":49,\"firefox\":43,\"internet explorer\":11,\"iphone\":9,\"ipad\":9,\"safari\":9},\"disable\":{\"googleAnalytics\":true,\"loadedAppCheckError\":true},\"theme\":\"liganova\",\"clientTheme\":{\"defaultType\":\"LIGANOVA\",\"defaultTitle\":\"LIGAOS\"},\"api\":{\"version\":\"v1\",\"app_key\":\"ln-liga-os\",\"url\":\"https://ln-api-vdc.ln-test.liga.cloud\"},\"api-vdc\":{\"version\":\"v1\",\"app_key\":\"ln-liga-os\",\"url\":\"https://ln-api-vdc.ln-test.liga.cloud\"},\"api-myliga\":{\"version\":\"v1\",\"app_key\":\"ln-liga-os\",\"url\":\"https://ln-api-myliga.ln-test.liga.cloud\"},\"api-contact\":{\"url\":\"https://ln-contacts-api.ln-test.liga.cloud\"},\"api-timeboard\":{\"app_key\":\"ln-liga-os\",\"version\":\"\",\"url\":\"https://ln-api-timeboard.ln-test.liga.cloud\"},\"api-ligaagent\":{\"version\":\"\",\"app_key\":\"ln-ligaagent\",\"url\":\"https://ln-ligadata-api.ln-test.liga.cloud/\"},\"api-ex3000\":{\"version\":\"\",\"app_key\":\"ln-ex3000\",\"url\":\"https://ln-api-ex3000.ln-test.liga.cloud\"},\"iframely\":{\"url\":\"https://iframely.ln-test.liga.cloud\"},\"resizer\":{\"url\":\"https://ln-image-resizer.ln-test.liga.cloud\"},\"image-service\":{\"url\":\"https://ln-preview-image-generator.ln-test.liga.cloud\"},\"fixture-export-service\":{\"url\":\"https://ln-fixture-zip-exporter.ln-test.liga.cloud\"},\"exporter\":{\"url\":\"https://ln-fixture-pdf-exporter.ln-test.liga.cloud\"},\"facade-pdf\":{\"url\":\"https://ln-facade-pdf-exporter.ln-test.liga.cloud\"},\"scrapper\":{\"url\":\"https://ln-meta-data-scraper.ln-test.liga.cloud\"},\"ln-pub-sub-service\":{\"url\":\"https://ln-pub-sub-service.ln-test.liga.cloud\",\"transports\":[\"polling\"]},\"google-calendar\":{\"url\":\"https://ln-google-calendar-service.ln-test.liga.cloud\"},\"login\":{\"username\":\"max.mustermann@ligadigital.com\",\"password\":\"@Liga3000\"},\"//\":\"Show dummy images\",\"dummy\":true,\"logging\":{\"enabled\":false,\"//\":\"levels: debug, info, warn, error\",\"level\":\"info\"},\"urlReplaces\":{\"^/myliga/#/\":\"/ln-myliga/#/\",\"/de/login.jsp$\":\"\"},\"allow_feature_branches\":true,\"apps\":[{\"url\":\"/ln-ligafly-app/#/\",\"slug\":\"ligafly\"},{\"url\":\"/ln-myliga/#/\",\"slug\":\"myliga\"},{\"url\":\"/ln-bros/#/\",\"slug\":\"bros\"},{\"url\":\"/ln-settings-tool/#/\",\"slug\":\"settings-tool\",\"background\":\"#ffffff\"},{\"url\":\"/ln-timeboard2/#/\",\"slug\":\"timeboard\"},{\"url\":\"/ln-timeboard/#/\",\"slug\":\"timeboard1\"},{\"url\":\"/ln-nes-material-shop/?ctl=1#/\",\"slug\":\"nes-trade-localization\",\"background\":\"#ffffff\"},{\"url\":\"/ln-nes-material-shop/#/\",\"slug\":\"bros-shop\"},{\"url\":\"https://ln-test.liga.cloud/ln-nes-material-shop/#/sso-signup\",\"slug\":\"sso-signup\"},{\"url\":\"/ln-tracking-tool/#/\",\"slug\":\"campaign-status\"},{\"url\":\"/ln-translation-tool/#/\",\"slug\":\"translation-tool\"},{\"url\":\"/ln-nes-trade-shop/#/\",\"slug\":\"trade-shop\"},{\"url\":\"https://psl18adm15-frontend-external-ln-test.ligaos.com\",\"slug\":\"contacts-old\",\"background\":\"#f7f7fa\"},{\"url\":\"https://ln-contacts.ln-test.liga.cloud\",\"slug\":\"contacts\",\"background\":\"#f7f7fa\"},{\"url\":\"https://ln-ligadata-app.ln-test.liga.cloud/#/\",\"slug\":\"liga-agent\"},{\"url\":\"https://n8n.ln-test.liga.cloud/webhook/59e2d158-3199-47d4-9ccf-380634f084c9/n8n-form\",\"parent\":\"liga-agent\",\"slug\":\"n8n-form\"},{\"url\":\"https://n8n.ln-test.liga.cloud/webhook/ligaos-test-entry\",\"parent\":\"liga-agent\",\"slug\":\"ligaos-test-entry-test\"},{\"url\":\"https://n8n.ln-test.liga.cloud/webhook/ligaos-staging-entry\",\"parent\":\"liga-agent\",\"slug\":\"ligaos-test-entry-staging\"},{\"url\":\"https://n8n.ln-test.liga.cloud/webhook/ligaos-production-entry\",\"parent\":\"liga-agent\",\"slug\":\"ligaos-test-entry-production\"},{\"url\":\"https://n8n.ln-production.liga.cloud/webhook/ligaos-test-entry\",\"parent\":\"liga-agent\",\"slug\":\"ligaos-prod-entry-test\"},{\"url\":\"https://n8n.ln-production.liga.cloud/webhook/ligaos-staging-entry\",\"parent\":\"liga-agent\",\"slug\":\"ligaos-prod-entry-staging\"},{\"url\":\"https://n8n.ln-production.liga.cloud/webhook/ligaos-production-entry\",\"parent\":\"liga-agent\",\"slug\":\"ligaos-prod-entry-production\"},{\"url\":\"https://iao.mercedes-amg.com\"},{\"url\":\"https://www.mercedes-amg.com\"},{\"url\":\"https://www.mercedes-amg.com/driving-academy/ada.php?lang=deu\"},{\"url\":\"https://www.mercedes-amg.com/privatelounge/registration/login?lang=de\"},{\"url\":\"https://www.mercedes-benz.de\"},{\"url\":\"/ln-ligafly-admin-app/#/\",\"slug\":\"ligafly-admin\"},{\"url\":\"https://liga3000-basic.ln-test.liga.cloud\",\"slug\":\"liga3000\",\"background\":\"#ffffff\"},{\"url\":\"https://127.0.0.1:8080/agencyweb\",\"slug\":\"liga3000-local\",\"background\":\"#ffffff\"},{\"url\":\"/ln-freelanceme-app/#/\",\"slug\":\"freelance-me\",\"background\":\"#ffffff\"},{\"url\":\"/ln-ex3000/#/\",\"slug\":\"ex3000\"},{\"url\":\"/ln-ai-check/\",\"slug\":\"ai-check\"},{\"url\":\"/ln-campaign-reporting/#/\",\"slug\":\"campaign-reporting\"},{\"url\":\"https://cd-staging.liganova.com\",\"slug\":\"corporate-design\"},{\"url\":\"https://dna-staging.liganova.com\",\"slug\":\"liga-dna\"},{\"url\":\"https://leaders-staging.liganova.com\",\"slug\":\"leaders\"},{\"url\":\"https://susble.liganova.com\",\"slug\":\"sustainability\"},{\"url\":\"https://ligaflycare.liganova.com/\"},{\"url\":\"https://liganova.lms.tutool.io/?lang=de\"},{\"url\":\"https://whistly.org/file_report/goingbeyond\"},{\"url\":\"https://sites.google.com/liganova.com/ggen-sustainability-hub\"}],\"googleTagManagerId\":null,\"exposeApi\":true,\"exposeLigaOSApi\":true,\"telephoneLinks\":\"callto\"},\"keycloakRefreshInterval\":180000,\"ligaagentQuickstarts\":false,\"keycloakUrl\":\"https://keycloak.ln-test.liga.cloud\",\"keycloakPerOrigin\":[{\"config\":{\"clientId\":\"nespresso-web\",\"loginOptions\":[\"microsoft\"],\"realm\":\"Nespresso\"},\"origins\":[\"https://nespresso.ln-test.liga.cloud\"]},{\"config\":{\"clientId\":\"liganova-web\",\"loginOptions\":[{\"name\":\"google\",\"idpHint\":\"liganova-google\"},{\"name\":\"microsoft\",\"idpHint\":\"oidc\",\"type\":\"extra\"}],\"realm\":\"Liganova\"},\"origins\":[\"https://ln-test.liga.cloud\"]},{\"config\":{\"clientId\":\"other-bros-web\",\"realm\":\"Other Bros\"},\"origins\":[\"https://no-sso.ln-test.liga.cloud\"]}],\"name\":\"ln-liga-os\",\"version\":\"2.73.0+99c105fa\"});\n          }\n        \n"],"mappings":"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","ignoreList":[]}