{"version":3,"sources":["webpack:///./src/state.ts","webpack:///./src/base/base-actions.ts","webpack:///./src/global.ts","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/components/icon/template.ts","webpack:///./src/components/icon/styles.ts","webpack:///./src/components/icon/index.ts","webpack:///./src/routes.ts","webpack:///./src/fast-icons.ts","webpack:///./src/app.ts","webpack:///./src/base/base-app.ts","webpack:///./src/app.css","webpack:///./src/app.html","webpack:///./src/pages/account.ts?df75","webpack:///./src/pages/account-credentials.ts?83e6","webpack:///./src/pages/account-profile.ts?8b20","webpack:///./src/pages/login-page.ts?f763","webpack:///./src/pages/manager.ts?9dab","webpack:///./src/aurelia-components/index.ts","webpack:///./src/base/app-base.css","webpack:///./src/base/dark-base.css","webpack:///./src/components/index.ts","webpack:///./src/components/login.ts","webpack:///./src/components/login.css","webpack:///./src/components/login.html","webpack:///./src/components/menu.ts","webpack:///./src/components/menu.css","webpack:///./src/components/menu.html","webpack:///./src/components/qr-code-reader.ts","webpack:///./src/components/qr-code-reader.css","webpack:///./src/components/qr-code-reader.html","webpack:///./src/components/user-preview.css","webpack:///./src/components/user-preview.html","webpack:///./src/dark.css","webpack:///./src/settings.js","webpack:///./src/base/base-main.ts","webpack:///./src/components/text-field-login/index.ts","webpack:///./src/components/text-field-login/template.ts","webpack:///./src/components/dialogs/dialog-styles.ts","webpack:///./src/components/dialogs/base.ts","webpack:///./src/components/dialogs/confirm.ts","webpack:///./src/components/dialogs/select.ts","webpack:///./src/components/dialogs/prompt-text.ts","webpack:///./src/components/stack/styles.ts","webpack:///./src/components/stack/template.ts","webpack:///./src/components/stack/index.ts","webpack:///./src/components/next/styles.ts","webpack:///./src/components/next/template.ts","webpack:///./src/components/next/index.ts","webpack:///./src/components/form-row/styles.ts","webpack:///./src/components/form-row/template.ts","webpack:///./src/components/form-row/index.ts","webpack:///./src/components/form/styles.ts","webpack:///./src/components/form/template.ts","webpack:///./src/components/form/index.ts","webpack:///./src/import-fast.ts","webpack:///./src/main.ts","webpack:///./src/pages/home.ts","webpack:///./src/pages/home.css","webpack:///./src/pages/home.html","webpack:///./src/pages/qr.ts","webpack:///./src/pages/qr.css","webpack:///./src/pages/qr.html","webpack:///./src/resources/fast-menu-item-value-attribute.ts","webpack:///./src/resources/fast-menu-value-attribute.ts","webpack:///./src/resources/index.ts","webpack:///./src/typography.css","webpack:///./src/utilities.css"],"names":["initialState","stateVersion","sdlogin","swissdata","authenticated","publicKey","apiKey","user","undefined","accessToken","loginStep","h","bcf","language","languages","country","countries","currentRoute","name","defaultRoutes","unauthenticated","surpriseHidden","initAppState","state","newState","Object","assign","supriseHidden","setFullState","fullState","clearState","accounts","host","store","signal","super","ready","this","registerAction","log","debug","bootstrap","stateStorageKey","dynamicModelSlugsForAutoLoading","then","subscribe","info","moment","sdLogin","logout","error","navigateToRoute","registerActions","roles","indexOf","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","resolve","module","exports","IconTemplate","IconStyles","lightweight","accent","type","weight","defaultWeight","size","defaultSize","connectedCallback","getNotifier","disconnectedCallback","unsubscribe","_source","prop","setIcon","window","requestAnimationFrame","shadowRoot","querySelector","iconSvgContent","solid","icon","outline","innerHTML","svg","SVGElement","setAttribute","style","width","sizeInPx","height","paths","querySelectorAll","index","length","item","parseInt","toString","mode","template","styles","route","moduleId","settings","auth","outlineModule","solidModule","Array","isArray","i","load","iconName","loadIn","variant","mod","default","notify","catch","console","warn","ux","instance","get","design","key","global","router","styleEngine","modalService","iconLoader","toolbarTopOpened","handleResize","containerSelector","applyTheme","themeKey","borderRadius","document","body","documentElement","setProperty","three","canvasBackground","initIcons","addEventListener","withDefault","fast","designTokens","baseLayerLuminance","fill","fillColor","create","r","g","b","base","accentPalette","swatch","controlCornerRadius","removeEventListener","config","redirectUnauthenticatedTo","cordova","options","pushState","addAuthorizeStep","open","viewModel","position","openingCallback","contentWrapperElement","overlayElement","contentElement","HTMLElement","maxHeight","event","firstPath","composedPath","classList","contains","element","target","left","scrollLeft","top","scrollTop","display","elementUnderneath","elementFromPoint","pageX","pageY","Element","closest","CustomEvent","bubbles","dispatchEvent","___CSS_LOADER_API_IMPORT___","push","cb","require","configure","globalResources","Login","bindingEngine","eventAggregator","routeNext","routeParams","loginWith","countriesList","step","mobile","mobilePlaceholder","regionCode","isMobileValid","email","emailPlaceholder","isEmailValid","password","isPasswordValid","validationCode","isValidationCodeValid","resetPasswordCode","isResetPasswordCodeValid","suggestAccountCreation","invalidCode","firstname","lastname","loading","subscriptions","validating","validated","createAccountMemory","publish","toLowerCase","countryChanged","fetchQueryStringData","listenForAutoFill","fields","field","f","value","input","add","search","location","substr","searchParts","split","token","tokenExpiry","part","keyValue","setTimeout","startCreatingAnAccount","decodeURIComponent","extraData","JSON","parse","atob","replace","clearCreateAccountMemory","dispatch","validateCode","fetchCreateAccountMemory","continueFromCreateAccountMemory","elementOrElementId","detail","getElementById","scrollTo","behavior","scrollingElement","countryCode","getCountryCodeForRegionCode","getExample","getNumber","mobileChanged","toUpperCase","isValid","isEmail","performValidation","preventAutoValidation","validateAccount","sub","dispose","manuallyRequested","preventDefault","trim","username","exists","checkIfUsernameExists","nextElement","goToId","HTMLInputElement","focus","emptyUsername","stopPropagation","shadowedInput","saveCreateAccountMemory","passwordStrengthRequired","createAccount","createAccountValidationToken","createAccountValidationTokenExpiry","login","afterLogin","processIdentity","requestResetPassword","resetPassword","backToLogin","string","btoa","stringify","localStorage","setItem","cam","getItem","isAfter","keepIdentity","removeItem","emailChanged","match","Menu","cancel","params","QrCodeReader","startScanning","hasVideoAccess","hasQrCodeFound","qrValid","lastCodeData","initQrReader","disableCamera","startScanningUpdate","newValue","reqAnim","drawVideoFrame","bind","cancelAnimationFrame","canvasElement","canvasContext","getContext","navigator","mediaDevices","video","createElement","getUserMedia","facingMode","stream","srcObject","play","playbackRate","begin","end","color","beginPath","moveTo","x","y","lineTo","lineWidth","strokeStyle","stroke","readyState","HAVE_ENOUGH_DATA","videoHeight","videoWidth","drawImage","imageData","getImageData","data","drawLine","topLeftCorner","topRightCorner","bottomRightCorner","bottomLeftCorner","codedata","validate","result","pause","src","getTracks","forEach","track","stop","defaultBindingMode","twoWay","title","description","keywords","author","stateLog","dispatchedActions","performanceLog","devToolsStatus","primary","primaryForeground","accentForeground","primaryLight","primaryLightForeground","primaryDark","primaryDarkForeground","accentLight","accentLightForeground","accentDark","accentDarkForeground","appBackground","appForeground","surfaceBackground","surfaceForeground","disabledBackground","disabledForeground","errorForeground","userLang","userLanguage","defineProperty","version","environment","values","join","registerInstance","autocomplete","fastTextFieldLogin","compose","baseName","context","definition","readOnly","defaultSlottedNodes","slotted","property","filter","handleTextInput","handleChange","autofocus","disabled","list","maxlength","minlength","pattern","placeholder","required","spellcheck","ariaAtomic","ariaBusy","ariaControls","ariaCurrent","ariaDescribedby","ariaDetails","ariaDisabled","ariaErrormessage","ariaFlowto","ariaHaspopup","ariaHidden","ariaInvalid","ariaKeyshortcuts","ariaLabel","ariaLabelledby","ariaLive","ariaOwns","ariaRelevant","ariaRoledescription","ref","shadowOptions","dialogStyles","dialogTag","tagFor","buttonTag","css","dialogHeadTemplate","when","defaultTitleContent","dialogFootTemplate","cancelButtonText","defaultCancelButtonText","ok","okButtonText","defaultOKButtonText","dismissable","dialogElement","promise","Promise","initialValue","currentValue","remove","wasDismissed","once","appendChild","$emit","text","renderBaseModal","confirmDialog","defaultTextContent","autoclose","splice","option","findIndex","label","selectDialog","menuTag","menuItemTag","repeat","c","parent","toggleOption","ctx","textFieldInput","promptTextDialog","textFieldTag","StackStyles","StackTemplate","foundOne","nodes","node","observable","NextStyles","withBehaviors","NextTemplate","pushStateId","hasHistory","autodetectback","items","nextItems","previousOperations","changing","activeitem","changed","moving","queuedOperations","pushStateIdChanged","fastNextId","fastNextElementId","lastOperation","fastNextDirection","direction","back","url","URL","href","searchParams","activeid","queueUpdate","ensureIdInUrl","$fastController","isConnected","setItems","itemIds","activeIndex","nextIndex","itemId","getAttribute","setPositions","nextid","previd","fromPushState","previousOperation","pop","trackOperation","goToIndex","goToElement","ensureCurrentState","isPreviousId","oppositeDirection","setState","nextOperation","shift","history","replaceState","hash","set","attribute","FormStyles","FormTemplate","iconButtonStyles","register","def","aurelia","use","standardConfiguration","plugin","translationMemoryApiKey","translationMemoryHost","defaultLanguage","icons","logDispatchedActions","logPerformanceLog","logDevToolsStatus","logDefinitions","stripe","api","ipStack","registerMissingTranslationKeys","feature","registerCorePlugins","extendEndpoint","ignoreDebugs","developmentLogging","start","setRoot","tags","Home","link","Qr","na","urlId","nbScan","showQrReader","getLinks","links","getAll","modelId","buildingName","roomNb","urlTarget","redirect","force","toggleShowQrReader","qrCodeReader","startQrReader","StopQrReader","toLocaleLowerCase","includes","qrCode","FastMenuItemValueAttribute","container","registerMenuItem","disposeMenuItem","computeValueFromItems","of","FastMenuValueAttribute","taskQueue","isMultiple","isQueued","applyValueToItems","valueChanged","queueMicroTask","requestProcessValue","setRolesAccordingToValueType","itemsLength","toggleAttribute","hasAttribute","role"],"mappings":"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","file":"app~f075b844.c4b7183c745d765b34e1.chunk.js","sourcesContent":["import { SwissdataState, AppState as SwissdataAppState, DynamicDataModel } from 'aurelia-deco';\nimport * as environment from '../config/environment.json';\nimport settings from 'settings';\nimport { State as BcfState, initialState as bcfInitialState } from 'aurelia-bcf';\n\n// DECLARE A \"AppState\" INTERFACE, EXTENDING \"SwissdataAppState\"\n// This interface must include any new key for the state of this specific app\nexport interface AppState extends SwissdataAppState, BcfState {\n  swissdata: SwissdataState;\n  surpriseHidden: boolean;\n}\n\n// DEFINE THE \"initalState\" BASED ON THE \"AppState\" INTERFACE\nexport const initialState: AppState = {\n  stateVersion: settings.stateVersion,\n  sdlogin: {},\n  swissdata: {\n    authenticated: false,\n    publicKey: environment.swissdata.apiKey,\n    user: undefined,\n    accessToken: undefined,\n    loginStep: 'login',\n    h: ''\n  },\n  bcf: bcfInitialState.bcf,\n  language: 'fr',\n  languages: ['fr', 'en'],\n  country: 'CH',\n  countries: ['CH'],\n  currentRoute: {\n    name: settings.defaultRoutes.unauthenticated\n  },\n  surpriseHidden: false\n}\n\n// DEFINE AN ACTION CALLED \"initAppState\" THAT TAKE ANY KIND OF STATE\n// AND RETURN A VALID STATE ACCORDING TO CURRENT DEFINITION (ABOVE)\n// IT MUST CHECK THE VALIDITY OF EACH KEY AND CORRECT ITS VALUE IF NECESSARY\nexport function initAppState(state: AppState) {\n  const newState = Object.assign({}, state);\n  if (typeof newState.currentRoute !== 'object') newState.currentRoute = initialState.currentRoute;\n  if (newState.supriseHidden === undefined) newState.supriseHidden = false;\n  if (newState.bcf === undefined) newState.bcf = bcfInitialState.bcf;\n  return newState;\n}\n\n","import { AppState, initialState } from 'state';\n\nexport function setFullState(state: AppState, fullState: AppState) {\n  const newState = Object.assign({}, fullState);\n  return newState;\n}\n\nexport function clearState(state: AppState) {\n  const accounts = state.sdlogin.accounts;\n  const host = state.swissdata.h;\n  const newState = Object.assign({}, initialState);\n  newState.sdlogin.accounts = accounts;\n  newState.swissdata.h = host;\n  return newState;\n}\n","import { inject, computedFrom } from 'aurelia-framework';\nimport { AppState, initAppState, initialState } from 'state';\nimport { setFullState, clearState } from 'base/base-actions';\nimport { SwissdataGlobal, ProfileHelper } from 'aurelia-deco';\nimport { errorify } from 'aurelia-resources';\nimport { Store } from 'aurelia-store';\nimport settings from 'settings';\nimport { BindingSignaler } from 'aurelia-templating-resources';\nimport * as moment from 'moment';\nimport 'moment/locale/fr'\n\n@inject(Store, BindingSignaler)\nexport class Global extends SwissdataGlobal {\n\n  public ready = false;\n\n  constructor(public store: Store<AppState>, private signal: BindingSignaler) {\n    super();\n    //let store = Container.instance.get(Store);\n    this.store.registerAction('initAppState', initAppState);\n    this.store.registerAction('setFullState', setFullState);\n    this.store.registerAction('clearState', clearState);\n    this.log.debug('bootstrap');\n    this.bootstrap({\n      stateStorageKey: settings.stateStorageKey,\n      language: settings.language,\n      languages: settings.languages,\n      dynamicModelSlugsForAutoLoading: [],\n      initialState: initialState,\n      stateVersion: settings.stateVersion\n    }).then(() => {\n      this.subscribe('language:changed', (language) => {\n        this.log.info('language:changed');\n        moment.locale(language);\n        this.signal.signal('language-changed');\n      });\n      moment.locale(this.state.language);\n      this.ready = true;\n    });\n  }\n\n  public async logout() {\n    try {\n      await this.sdLogin.logout();\n    } catch (error) {\n      errorify(error);\n    }\n    //this.swissdataApi.logout();\n    this.navigateToRoute(settings.defaultRoutes.unauthenticated);\n  }\n\n  registerActions() {\n    super.registerActions();\n    ProfileHelper.registerActions();\n  }\n\n  @computedFrom('state.swissdata.authenticated', 'state.swissdata.user.roles')\n  get hasAdminRole() {\n    if (!this.state.swissdata?.authenticated) {\n      return false;\n    }\n    if (!this.state.swissdata?.user?.roles) {\n      return false;\n    }\n    return this.state.swissdata.user.roles.indexOf('admin') !== -1;\n  }\n\n  @computedFrom('state.swissdata.authenticated', 'state.swissdata.user.roles')\n  get hasUserRole() {\n    if (!this.state.swissdata?.authenticated) {\n      return false;\n    }\n    if (!this.state.swissdata?.user?.roles) {\n      return false;\n    }\n    return this.state.swissdata.user.roles.indexOf('user') !== -1;\n  }\n\n  //\n  // Possible methods to overwrite\n  // * start() - called before anything else in the bootstrap method\n  // * beforeEnsuringAuthentication()\n  // * afterEnsuringAuthentication()\n  // * onAnyLoad() - by default: if config.useDynamicModels is true => \n  //    => load the dynamic models settings and \n  //    => autload dynamic data from dynamicModelSlugsForAutoLoading\n  // * onAuthenticatedLoad() - calls onAnyLoad by default\n  // * onUnauthenticatedLoad - calls onAnyLoad by default\n  // * onLogin() - calls onAuthenticatedLoad by default\n  // * onLogout()\n  // * registerActions() - make sure to call super.registerActions() inside\n  // \n\n}\n\n","var map = {\n\t\"./af\": \"K/tc\",\n\t\"./af.js\": \"K/tc\",\n\t\"./ar\": \"jnO4\",\n\t\"./ar-dz\": \"o1bE\",\n\t\"./ar-dz.js\": \"o1bE\",\n\t\"./ar-kw\": \"Qj4J\",\n\t\"./ar-kw.js\": \"Qj4J\",\n\t\"./ar-ly\": \"HP3h\",\n\t\"./ar-ly.js\": \"HP3h\",\n\t\"./ar-ma\": \"CoRJ\",\n\t\"./ar-ma.js\": \"CoRJ\",\n\t\"./ar-sa\": \"gjCT\",\n\t\"./ar-sa.js\": \"gjCT\",\n\t\"./ar-tn\": \"bYM6\",\n\t\"./ar-tn.js\": \"bYM6\",\n\t\"./ar.js\": \"jnO4\",\n\t\"./az\": \"SFxW\",\n\t\"./az.js\": \"SFxW\",\n\t\"./be\": \"H8ED\",\n\t\"./be.js\": \"H8ED\",\n\t\"./bg\": \"hKrs\",\n\t\"./bg.js\": \"hKrs\",\n\t\"./bm\": \"p/rL\",\n\t\"./bm.js\": \"p/rL\",\n\t\"./bn\": \"kEOa\",\n\t\"./bn-bd\": \"loYQ\",\n\t\"./bn-bd.js\": \"loYQ\",\n\t\"./bn.js\": \"kEOa\",\n\t\"./bo\": \"0mo+\",\n\t\"./bo.js\": \"0mo+\",\n\t\"./br\": \"aIdf\",\n\t\"./br.js\": \"aIdf\",\n\t\"./bs\": \"JVSJ\",\n\t\"./bs.js\": \"JVSJ\",\n\t\"./ca\": \"1xZ4\",\n\t\"./ca.js\": \"1xZ4\",\n\t\"./cs\": \"PA2r\",\n\t\"./cs.js\": \"PA2r\",\n\t\"./cv\": \"A+xa\",\n\t\"./cv.js\": \"A+xa\",\n\t\"./cy\": \"l5ep\",\n\t\"./cy.js\": \"l5ep\",\n\t\"./da\": \"DxQv\",\n\t\"./da.js\": \"DxQv\",\n\t\"./de\": \"tGlX\",\n\t\"./de-at\": \"s+uk\",\n\t\"./de-at.js\": \"s+uk\",\n\t\"./de-ch\": \"u3GI\",\n\t\"./de-ch.js\": \"u3GI\",\n\t\"./de.js\": \"tGlX\",\n\t\"./dv\": \"WYrj\",\n\t\"./dv.js\": \"WYrj\",\n\t\"./el\": \"jUeY\",\n\t\"./el.js\": \"jUeY\",\n\t\"./en-au\": \"Dmvi\",\n\t\"./en-au.js\": \"Dmvi\",\n\t\"./en-ca\": \"OIYi\",\n\t\"./en-ca.js\": \"OIYi\",\n\t\"./en-gb\": \"Oaa7\",\n\t\"./en-gb.js\": \"Oaa7\",\n\t\"./en-ie\": \"4dOw\",\n\t\"./en-ie.js\": \"4dOw\",\n\t\"./en-il\": \"czMo\",\n\t\"./en-il.js\": \"czMo\",\n\t\"./en-in\": \"7C5Q\",\n\t\"./en-in.js\": \"7C5Q\",\n\t\"./en-nz\": \"b1Dy\",\n\t\"./en-nz.js\": \"b1Dy\",\n\t\"./en-sg\": \"t+mt\",\n\t\"./en-sg.js\": \"t+mt\",\n\t\"./eo\": \"Zduo\",\n\t\"./eo.js\": \"Zduo\",\n\t\"./es\": \"iYuL\",\n\t\"./es-do\": \"CjzT\",\n\t\"./es-do.js\": \"CjzT\",\n\t\"./es-mx\": \"tbfe\",\n\t\"./es-mx.js\": \"tbfe\",\n\t\"./es-us\": \"Vclq\",\n\t\"./es-us.js\": \"Vclq\",\n\t\"./es.js\": \"iYuL\",\n\t\"./et\": \"7BjC\",\n\t\"./et.js\": \"7BjC\",\n\t\"./eu\": \"D/JM\",\n\t\"./eu.js\": \"D/JM\",\n\t\"./fa\": \"jfSC\",\n\t\"./fa.js\": \"jfSC\",\n\t\"./fi\": \"gekB\",\n\t\"./fi.js\": \"gekB\",\n\t\"./fil\": \"1ppg\",\n\t\"./fil.js\": \"1ppg\",\n\t\"./fo\": \"ByF4\",\n\t\"./fo.js\": \"ByF4\",\n\t\"./fr\": \"nyYc\",\n\t\"./fr-ca\": \"2fjn\",\n\t\"./fr-ca.js\": \"2fjn\",\n\t\"./fr-ch\": \"Dkky\",\n\t\"./fr-ch.js\": \"Dkky\",\n\t\"./fr.js\": \"nyYc\",\n\t\"./fy\": \"cRix\",\n\t\"./fy.js\": \"cRix\",\n\t\"./ga\": \"USCx\",\n\t\"./ga.js\": \"USCx\",\n\t\"./gd\": \"9rRi\",\n\t\"./gd.js\": \"9rRi\",\n\t\"./gl\": \"iEDd\",\n\t\"./gl.js\": \"iEDd\",\n\t\"./gom-deva\": \"qvJo\",\n\t\"./gom-deva.js\": \"qvJo\",\n\t\"./gom-latn\": \"DKr+\",\n\t\"./gom-latn.js\": \"DKr+\",\n\t\"./gu\": \"4MV3\",\n\t\"./gu.js\": \"4MV3\",\n\t\"./he\": \"x6pH\",\n\t\"./he.js\": \"x6pH\",\n\t\"./hi\": \"3E1r\",\n\t\"./hi.js\": \"3E1r\",\n\t\"./hr\": \"S6ln\",\n\t\"./hr.js\": \"S6ln\",\n\t\"./hu\": \"WxRl\",\n\t\"./hu.js\": \"WxRl\",\n\t\"./hy-am\": \"1rYy\",\n\t\"./hy-am.js\": \"1rYy\",\n\t\"./id\": \"UDhR\",\n\t\"./id.js\": \"UDhR\",\n\t\"./is\": \"BVg3\",\n\t\"./is.js\": \"BVg3\",\n\t\"./it\": \"bpih\",\n\t\"./it-ch\": \"bxKX\",\n\t\"./it-ch.js\": \"bxKX\",\n\t\"./it.js\": \"bpih\",\n\t\"./ja\": \"B55N\",\n\t\"./ja.js\": \"B55N\",\n\t\"./jv\": \"tUCv\",\n\t\"./jv.js\": \"tUCv\",\n\t\"./ka\": \"IBtZ\",\n\t\"./ka.js\": \"IBtZ\",\n\t\"./kk\": \"bXm7\",\n\t\"./kk.js\": \"bXm7\",\n\t\"./km\": \"6B0Y\",\n\t\"./km.js\": \"6B0Y\",\n\t\"./kn\": \"PpIw\",\n\t\"./kn.js\": \"PpIw\",\n\t\"./ko\": \"Ivi+\",\n\t\"./ko.js\": \"Ivi+\",\n\t\"./ku\": \"JCF/\",\n\t\"./ku.js\": \"JCF/\",\n\t\"./ky\": \"lgnt\",\n\t\"./ky.js\": \"lgnt\",\n\t\"./lb\": \"RAwQ\",\n\t\"./lb.js\": \"RAwQ\",\n\t\"./lo\": \"sp3z\",\n\t\"./lo.js\": \"sp3z\",\n\t\"./lt\": \"JvlW\",\n\t\"./lt.js\": \"JvlW\",\n\t\"./lv\": \"uXwI\",\n\t\"./lv.js\": \"uXwI\",\n\t\"./me\": \"KTz0\",\n\t\"./me.js\": \"KTz0\",\n\t\"./mi\": \"aIsn\",\n\t\"./mi.js\": \"aIsn\",\n\t\"./mk\": \"aQkU\",\n\t\"./mk.js\": \"aQkU\",\n\t\"./ml\": \"AvvY\",\n\t\"./ml.js\": \"AvvY\",\n\t\"./mn\": \"lYtQ\",\n\t\"./mn.js\": \"lYtQ\",\n\t\"./mr\": \"Ob0Z\",\n\t\"./mr.js\": \"Ob0Z\",\n\t\"./ms\": \"6+QB\",\n\t\"./ms-my\": \"ZAMP\",\n\t\"./ms-my.js\": \"ZAMP\",\n\t\"./ms.js\": \"6+QB\",\n\t\"./mt\": \"G0Uy\",\n\t\"./mt.js\": \"G0Uy\",\n\t\"./my\": \"honF\",\n\t\"./my.js\": \"honF\",\n\t\"./nb\": \"bOMt\",\n\t\"./nb.js\": \"bOMt\",\n\t\"./ne\": \"OjkT\",\n\t\"./ne.js\": \"OjkT\",\n\t\"./nl\": \"+s0g\",\n\t\"./nl-be\": \"2ykv\",\n\t\"./nl-be.js\": \"2ykv\",\n\t\"./nl.js\": \"+s0g\",\n\t\"./nn\": \"uEye\",\n\t\"./nn.js\": \"uEye\",\n\t\"./oc-lnc\": \"Fnuy\",\n\t\"./oc-lnc.js\": \"Fnuy\",\n\t\"./pa-in\": \"8/+R\",\n\t\"./pa-in.js\": \"8/+R\",\n\t\"./pl\": \"jVdC\",\n\t\"./pl.js\": \"jVdC\",\n\t\"./pt\": \"8mBD\",\n\t\"./pt-br\": \"0tRk\",\n\t\"./pt-br.js\": \"0tRk\",\n\t\"./pt.js\": \"8mBD\",\n\t\"./ro\": \"lyxo\",\n\t\"./ro.js\": \"lyxo\",\n\t\"./ru\": \"lXzo\",\n\t\"./ru.js\": \"lXzo\",\n\t\"./sd\": \"Z4QM\",\n\t\"./sd.js\": \"Z4QM\",\n\t\"./se\": \"//9w\",\n\t\"./se.js\": \"//9w\",\n\t\"./si\": \"7aV9\",\n\t\"./si.js\": \"7aV9\",\n\t\"./sk\": \"e+ae\",\n\t\"./sk.js\": \"e+ae\",\n\t\"./sl\": \"gVVK\",\n\t\"./sl.js\": \"gVVK\",\n\t\"./sq\": \"yPMs\",\n\t\"./sq.js\": \"yPMs\",\n\t\"./sr\": \"zx6S\",\n\t\"./sr-cyrl\": \"E+lV\",\n\t\"./sr-cyrl.js\": \"E+lV\",\n\t\"./sr.js\": \"zx6S\",\n\t\"./ss\": \"Ur1D\",\n\t\"./ss.js\": \"Ur1D\",\n\t\"./sv\": \"X709\",\n\t\"./sv.js\": \"X709\",\n\t\"./sw\": \"dNwA\",\n\t\"./sw.js\": \"dNwA\",\n\t\"./ta\": \"PeUW\",\n\t\"./ta.js\": \"PeUW\",\n\t\"./te\": \"XLvN\",\n\t\"./te.js\": \"XLvN\",\n\t\"./tet\": \"V2x9\",\n\t\"./tet.js\": \"V2x9\",\n\t\"./tg\": \"Oxv6\",\n\t\"./tg.js\": \"Oxv6\",\n\t\"./th\": \"EOgW\",\n\t\"./th.js\": \"EOgW\",\n\t\"./tk\": \"Wv91\",\n\t\"./tk.js\": \"Wv91\",\n\t\"./tl-ph\": \"Dzi0\",\n\t\"./tl-ph.js\": \"Dzi0\",\n\t\"./tlh\": \"z3Vd\",\n\t\"./tlh.js\": \"z3Vd\",\n\t\"./tr\": \"DoHr\",\n\t\"./tr.js\": \"DoHr\",\n\t\"./tzl\": \"z1FC\",\n\t\"./tzl.js\": \"z1FC\",\n\t\"./tzm\": \"wQk9\",\n\t\"./tzm-latn\": \"tT3J\",\n\t\"./tzm-latn.js\": \"tT3J\",\n\t\"./tzm.js\": \"wQk9\",\n\t\"./ug-cn\": \"YRex\",\n\t\"./ug-cn.js\": \"YRex\",\n\t\"./uk\": \"raLr\",\n\t\"./uk.js\": \"raLr\",\n\t\"./ur\": \"UpQW\",\n\t\"./ur.js\": \"UpQW\",\n\t\"./uz\": \"Loxo\",\n\t\"./uz-latn\": \"AQ68\",\n\t\"./uz-latn.js\": \"AQ68\",\n\t\"./uz.js\": \"Loxo\",\n\t\"./vi\": \"KSF8\",\n\t\"./vi.js\": \"KSF8\",\n\t\"./x-pseudo\": \"/X5v\",\n\t\"./x-pseudo.js\": \"/X5v\",\n\t\"./yo\": \"fzPg\",\n\t\"./yo.js\": \"fzPg\",\n\t\"./zh-cn\": \"XDpg\",\n\t\"./zh-cn.js\": \"XDpg\",\n\t\"./zh-hk\": \"SatO\",\n\t\"./zh-hk.js\": \"SatO\",\n\t\"./zh-mo\": \"OmwH\",\n\t\"./zh-mo.js\": \"OmwH\",\n\t\"./zh-tw\": \"kOpN\",\n\t\"./zh-tw.js\": \"kOpN\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"RnhZ\";","import { html } from '@microsoft/fast-element';\nimport { FastIcon } from './index';\n\nexport const IconTemplate = html<FastIcon>`<span></span>`;\n","import { css } from '@microsoft/fast-element';\n\nexport const IconStyles = css`\n  :host {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    contain: content;\n    stroke-width: 1px;\n  }\n  span {\n    display:inline-flex;\n    align-items: center;\n    justify-content: center;\n    contain: content;\n    stroke-width: 1px;\n  }\n`;","import { attr } from \"@microsoft/fast-element\";\nimport { FASTElement, customElement, Observable } from '@microsoft/fast-element';\nimport { IconTemplate as template } from './template';\nimport { IconStyles as styles } from './styles';\n\n@customElement({name: 'fast-icon', template, styles})\nexport class FastIcon extends FASTElement {\n\n  public static defaultWeight = 1;\n  public static defaultSize = 'lg';\n\n  public connectedCallback(): void {\n    super.connectedCallback();\n    Observable.getNotifier(FastIcon).subscribe(this, 'solid');\n    Observable.getNotifier(FastIcon).subscribe(this, 'outline');\n  }\n\n  public disconnectedCallback(): void {\n    super.disconnectedCallback();\n    Observable.getNotifier(FastIcon).unsubscribe(this, 'solid');\n    Observable.getNotifier(FastIcon).unsubscribe(this, 'outline');\n  }\n\n  public handleChange(_source: typeof FastIcon, prop: string): void {\n    if (prop === this.type) {\n      this.setIcon();\n    }\n  }\n\n  @attr({ mode: 'boolean' })\n  public lightweight = false;\n\n  public lightweightChanged(): void {\n    this.setIcon();\n  }\n\n  @attr({ mode: 'boolean' })\n  public accent = false;\n\n  public accentChanged(): void {\n    this.setIcon();\n  }\n\n  @attr()\n  public icon: string;\n\n  public iconChanged(): void {\n    this.setIcon();\n  }\n\n  private setIcon(): void {\n    window.requestAnimationFrame(() => {\n      if (!this.shadowRoot ||!this.shadowRoot.querySelector('span')) {\n        this.setIcon();\n        return;\n      }\n      const iconSvgContent = this.type === 'solid'\n      ? FastIcon.solid[this.icon] || ''\n      : FastIcon.outline[this.icon] || '';\n      this.shadowRoot.querySelector('span').innerHTML = iconSvgContent;\n      const svg = this.shadowRoot.querySelector('svg');\n      if (svg instanceof SVGElement) {\n        svg.setAttribute('part', 'svg');\n        svg.style.width = `${this.sizeInPx()}px`;\n        svg.style.height = `${this.sizeInPx()}px`;\n      }\n      const paths = this.shadowRoot.querySelectorAll('path');\n\n      for (let index = 0; index < paths.length; index++) {\n        const path = paths.item(index);\n        path.setAttribute('stroke-width', `${this.weight}`);\n      }\n    });\n  }\n\n  @attr()\n  public type: 'outline' | 'solid' = 'outline';\n\n  public typeChanged(): void {\n    if (this.type !== 'solid' && this.type !== 'outline') {\n      this.type = 'outline';\n    }\n    this.setIcon();\n  }\n\n  @attr()\n  public weight = FastIcon.defaultWeight;\n\n  public weightChanged(): void {\n    this.setIcon();\n  }\n\n  @attr()\n  public size = FastIcon.defaultSize;\n\n  public sizeChanged(): void {\n    this.setIcon();\n  }\n\n  // TODO: apply density / design-unit to the size value ??\n  private sizeInPx(): number {\n    if (parseInt(this.size, 10).toString() === this.size) {\n      return parseInt(this.size, 10);\n    }\n    if (this.size === 'sm' || this.size === 'small') {\n      return 16;\n    }\n    if (this.size === 'md' || this.size === 'medium') {\n      return 20;\n    }\n    if (this.size === 'lg' || this.size === 'large') {\n      return 24;\n    }\n    if (this.size === 'xl' || this.size === 'extra-large') {\n      return 28;\n    }\n    return 24;\n  }\n\n  public static solid: {[key: string]: string} = {};\n  public static outline: {[key: string]: string} = {};\n}\n","import {PLATFORM} from 'aurelia-pal';\nimport {RouteConfig} from 'aurelia-router';\n\nexport let routes: Array<RouteConfig> = [\n  { route: '',       name: 'home',       moduleId: PLATFORM.moduleName('pages/home') },\n  { route: 'home',       name: 'start',       moduleId: PLATFORM.moduleName('pages/home') },\n  { route: 'qr',       name: 'qr',       moduleId: PLATFORM.moduleName('pages/qr'), settings: {auth: false} },\n  { route: 'qr/:urlId',       name: 'urlId',       moduleId: PLATFORM.moduleName('pages/qr'), settings: {auth: false} },\n  { route: 'login',       name: 'login',       moduleId: PLATFORM.moduleName('pages/login-page', 'login'), settings: {auth: false} },\n  { route: 'account',       name: 'account',       moduleId: PLATFORM.moduleName('pages/account', 'account'), settings: {auth: true} },\n  { route: 'profile',       name: 'profile',       moduleId: PLATFORM.moduleName('pages/account-profile', 'account'), settings: {auth: true} },\n  { route: 'credentials',       name: 'credentials',       moduleId: PLATFORM.moduleName('pages/account-credentials', 'account'), settings: {auth: true} },\n  { route: 'manager',       name: 'manager',       moduleId: PLATFORM.moduleName('pages/manager', 'manager'), settings: {auth: true} },\n  { route: 'dico',       name: 'dico',       moduleId: PLATFORM.moduleName('aurelia-deco/components/dico2/dico', 'dico'), settings: { auth: true } },\n];\n\nexport default routes;\n","import { FastIcon } from './components/icon';\nimport { Observable } from '@microsoft/fast-element';\n\nFastIcon.defaultSize = 'xl';\nFastIcon.defaultWeight = 1.6;\n\nexport interface AureliaFastIconLoaderElement {\n  iconName: string;\n  outlineModule: Promise<any>,\n  solidModule: Promise<any>,\n}\n\nexport class AureliaFastIconLoader {\n  public constructor() {\n  }\n\n  //public async load(icon: AureliaFastIconLoaderElement): Promise<void>\n  //public async load(icon: AureliaFastIconLoaderElement[]): Promise<void>\n  public async load(icon: string | AureliaFastIconLoaderElement | AureliaFastIconLoaderElement[], outlineModule?: Promise<any>, solidModule?: Promise<any>): Promise<void>  {\n    if (Array.isArray(icon)) {\n      for (const i of icon) {\n        this.load(i);\n      }\n      return;\n    }\n    if (typeof icon === 'string') {\n      icon = {\n        iconName: icon,\n        outlineModule: outlineModule,\n        solidModule: solidModule\n      }\n    }\n    if (icon.outlineModule) {\n      this.loadIn(icon.iconName, icon.outlineModule, 'outline');\n    }\n    if (icon.solidModule) {\n      this.loadIn(icon.iconName, icon.solidModule, 'solid');\n    }\n  \n  }\n\n  private async loadIn(iconName: string, module: Promise<any>, variant: 'outline' | 'solid'): Promise<void> {\n    return module.then((mod) => {\n      if (typeof mod.default === 'string') {\n        FastIcon[variant][iconName] = mod.default;\n        Observable.notify(FastIcon, variant);\n      } else {\n        throw new Error('Invalid icon module');\n      }\n    }).catch((error) => {\n      console.warn('Error while loading icon', iconName, variant);\n      console.error(error);\n    });\n  }\n}\n","import { Global } from './global';\nimport { inject } from 'aurelia-framework';\nimport { Router, RouterConfiguration } from 'aurelia-router';\nimport { ArDrawer, addNotifyContainerAlias, setNotifyDefaults } from 'aurelia-resources';\nimport { DynamicDataModel } from 'aurelia-deco';\nimport routes from './routes';\nimport settings from './settings';\nimport { AuthorizeStep } from 'aurelia-deco';\nimport { BaseApp } from 'base/base-app';\nimport { UxModalService } from '@aurelia-ux/modal';\n// import * as FastClick from 'fastclick';\nimport { StyleEngine } from '@aurelia-ux/core';\nimport { UxInputTheme } from '@aurelia-ux/input';\nimport { AureliaFastIconLoader } from './fast-icons';\nimport { accentPalette, baseLayerLuminance, fillColor, controlCornerRadius, SwatchRGB, PaletteRGB, typeRampBaseFontSize } from '@microsoft/fast-components';\nimport { parseColor } from '@microsoft/fast-colors';\nimport { Menu } from './components/menu';\n\n@inject(Global, Router, StyleEngine, UxModalService, AureliaFastIconLoader)\nexport class App extends BaseApp {\n\n  menuDrawer: ArDrawer;\n  bottomDrawerExempleDrawer: ArDrawer;\n  \n  public toolbarTopOpened: boolean = false;\n\n  private handleResize: EventListener;\n\n  constructor(private global: Global, private router: Router, private styleEngine: StyleEngine, private modalService: UxModalService, public iconLoader: AureliaFastIconLoader) {\n    super();\n    this.handleResize = e => {\n    };\n    addNotifyContainerAlias('top', '.notify-top-host');\n    addNotifyContainerAlias('bottom', '.notify-bottom-host');\n    setNotifyDefaults({\n      containerSelector: '.notify-top-host'\n    });\n    const inputTheme: UxInputTheme = {\n      themeKey: \"input\",\n      borderRadius: '0px'\n    };\n    this.styleEngine.applyTheme(inputTheme, document.body);\n    document.documentElement.style.setProperty('--three-canvas-background', settings.three.canvasBackground);\n    this.initIcons();\n  }\n\n  public attached() {\n    this.handleResize(null);\n    window.addEventListener('resize', this.handleResize);\n    // (FastClick as any).attach(document.body);\n\n    baseLayerLuminance.withDefault(settings.fast.designTokens.baseLayerLuminance);\n    typeRampBaseFontSize.withDefault('16px');\n    // lineHeightRatio.withDefault(1.5);\n\n    const fill = parseColor(settings.fast.designTokens.fillColor);\n    fillColor.withDefault(SwatchRGB.create(fill.r, fill.g, fill.b));\n\n    const base = parseColor(settings.fast.designTokens.accentPalette);\n    const swatch = SwatchRGB.create(base.r, base.g, base.b);\n    accentPalette.withDefault(PaletteRGB.create(swatch));\n    controlCornerRadius.withDefault(settings.fast.designTokens.controlCornerRadius);\n\n  }\n\n  public detached() {\n    window.removeEventListener('resize', this.handleResize);\n  }\n\n  configureRouter(config: RouterConfiguration) {\n    AuthorizeStep.redirectUnauthenticatedTo = settings.defaultRoutes.unauthenticated;\n    if (!(window as any).cordova) config.options.pushState = true;\n    config.addAuthorizeStep(AuthorizeStep);\n    config.map(routes);\n  }\n\n  public openMenu() {\n    this.modalService.open({\n      viewModel: Menu,\n//      host: 'ecos-design-system-provider',\n      position: 'left',\n      openingCallback: ((contentWrapperElement, overlayElement) => {\n        const contentElement = contentWrapperElement.querySelector('.ux-modal__content');\n        if (contentElement instanceof HTMLElement) {\n          contentElement.style.maxHeight = 'none';\n        }\n      })\n    });\n  }\n\n  public transferClick(event: MouseEvent) {\n    const firstPath = event.composedPath()[0];\n    if (firstPath instanceof HTMLElement) {\n      if (!firstPath.classList.contains('abs-from-toolbar-top')) {\n        return true;\n      }\n    }\n    const element = event.target;\n    if (element instanceof HTMLElement) {\n      const left = element.scrollLeft;\n      const top = element.scrollTop;\n  \n      //hide the overlay for now so the document can find the underlying elements\n      element.style.display = 'none';\n      //use the current scroll position to deduct from the click position\n      const elementUnderneath = document.elementFromPoint(event.pageX - left, event.pageY - top);\n      if (elementUnderneath instanceof Element && elementUnderneath.closest('.abs-toolbar-top')) {\n        // elementUnderneath.dispatchEvent(event);\n        const event = new CustomEvent('click', {bubbles: true});\n        elementUnderneath.dispatchEvent(event);\n      }\n      //show the overlay again\n      element.style.display = 'block';\n    }\n    return true;\n  }\n\n  private async initIcons(): Promise<void> {\n    \n    this.iconLoader.load('Adjustments', import('./icons/outline/Adjustments'), import('./icons/solid/Adjustments'));\n    // this.iconLoader.load('ArrowCircleRight', import('./icons/outline/ArrowCircleRight'), import('./icons/solid/ArrowCircleRight'));\n    // this.iconLoader.load('ArrowNarrowLeft', import('./icons/outline/ArrowNarrowLeft'), import('./icons/solid/ArrowNarrowLeft'));\n    // this.iconLoader.load('ArrowNarrowRight', import('./icons/outline/ArrowNarrowRight'), import('./icons/solid/ArrowNarrowRight'));\n    // this.iconLoader.load('ArrowsCondense', import('./icons/custom/arrowsCondense'), import('./icons/custom/arrowsCondense'));\n    // this.iconLoader.load('ArrowsExpand', import('./icons/outline/ArrowsExpand'), import('./icons/solid/ArrowsExpand'));\n    this.iconLoader.load('AtSymbol', import('./icons/outline/AtSymbol'), import('./icons/solid/AtSymbol'));\n    // this.iconLoader.load('Ban', import('./icons/outline/Ban'), import('./icons/solid/Ban'));\n    // this.iconLoader.load('Calendar', import('./icons/outline/Calendar'), import('./icons/solid/Calendar'));\n    this.iconLoader.load('Check', import('./icons/outline/Check'), import('./icons/solid/Check'));\n    // this.iconLoader.load('ChevronDown', import('./icons/outline/ChevronDown'), import('./icons/solid/ChevronDown'));\n    this.iconLoader.load('ChevronLeft', import('./icons/outline/ChevronLeft'), import('./icons/solid/ChevronLeft'));\n    this.iconLoader.load('ChevronRight', import('./icons/outline/ChevronRight'), import('./icons/solid/ChevronRight'));\n    // this.iconLoader.load('ChevronUp', import('./icons/outline/ChevronUp'), import('./icons/solid/ChevronUp'));\n    // this.iconLoader.load('CloudDownload', import('./icons/outline/CloudDownload'), import('./icons/solid/CloudDownload'));\n    // this.iconLoader.load('cog', import('./icons/outline/Cog'), import('./icons/solid/Cog'));\n    // this.iconLoader.load('Cog', import('./icons/outline/Cog'), import('./icons/solid/Cog'));\n    // this.iconLoader.load('ColorSwatch', import('./icons/outline/ColorSwatch'), import('./icons/solid/ColorSwatch'));\n    // this.iconLoader.load('CubeTransparent', import('./icons/outline/CubeTransparent'), import('./icons/solid/CubeTransparent'));\n    this.iconLoader.load('CursorClick', import('./icons/outline/CursorClick'), import('./icons/solid/CursorClick'));\n    // this.iconLoader.load('DotsCircleHorizontal', import('./icons/outline/DotsCircleHorizontal'), import('./icons/solid/DotsCircleHorizontal'));\n    // this.iconLoader.load('DotsHorizontal', import('./icons/outline/DotsHorizontal'), import('./icons/solid/DotsHorizontal'));\n    // this.iconLoader.load('Download', import('./icons/outline/Download'), import('./icons/solid/Download'));\n    // this.iconLoader.load('Eye', import('./icons/outline/Eye'), import('./icons/solid/Eye'));\n    // this.iconLoader.load('Filter', import('./icons/outline/Filter'), import('./icons/solid/Filter'));\n    // this.iconLoader.load('Flag', import('./icons/outline/Flag'), import('./icons/solid/Flag'));\n    // this.iconLoader.load('Folder', import('./icons/outline/Folder'), import('./icons/solid/Folder'));\n    // this.iconLoader.load('FolderOpen', import('./icons/outline/FolderOpen'), import('./icons/solid/FolderOpen'));\n    // this.iconLoader.load('Home', import('./icons/outline/Home'), import('./icons/solid/Home'));\n    // this.iconLoader.load('InformationCircle', import('./icons/outline/InformationCircle'), import('./icons/solid/InformationCircle'));\n    // this.iconLoader.load('LocationMarker', import('./icons/outline/LocationMarker'), import('./icons/solid/LocationMarker'));\n    this.iconLoader.load('Logout', import('./icons/outline/Logout'), import('./icons/solid/Logout'));\n    this.iconLoader.load('Menu', import('./icons/outline/Menu'), import('./icons/solid/Menu'));\n    // this.iconLoader.load('MenuAlt4', import('./icons/outline/MenuAlt4'), import('./icons/solid/MenuAlt4'));\n    // this.iconLoader.load('Minus', import('./icons/outline/Minus'), import('./icons/solid/Minus'));\n    // this.iconLoader.load('Pause', import('./icons/outline/Pause'), import('./icons/solid/Pause'));\n    // this.iconLoader.load('Pencil', import('./icons/outline/Pencil'), import('./icons/solid/Pencil'));\n    // this.iconLoader.load('Play', import('./icons/outline/Play'), import('./icons/solid/Play'));\n    // this.iconLoader.load('Plus', import('./icons/outline/Plus'), import('./icons/solid/Plus'));\n    this.iconLoader.load('Qrcode', import('./icons/outline/Qrcode'), import('./icons/solid/Qrcode'));\n    // this.iconLoader.load('Scissors', import('./icons/outline/Scissors'), import('./icons/solid/Scissors'));\n    // this.iconLoader.load('Search', import('./icons/outline/Search'), import('./icons/solid/Search'));\n    // this.iconLoader.load('Selector', import('./icons/outline/Selector'), import('./icons/solid/Selector'));\n    // this.iconLoader.load('Sparkles', import('./icons/outline/Sparkles'), import('./icons/solid/Sparkles'));\n    // this.iconLoader.load('Trash', import('./icons/outline/Trash'), import('./icons/solid/Trash'));\n    this.iconLoader.load('User', import('./icons/outline/User'), import('./icons/solid/User'));\n    // this.iconLoader.load('UserGroup', import('./icons/outline/UserGroup'), import('./icons/solid/UserGroup'));\n    // this.iconLoader.load('VideoCamera', import('./icons/outline/VideoCamera'), import('./icons/solid/VideoCamera'));\n    // this.iconLoader.load('Walking', import('./icons/custom/walking'), import('./icons/custom/walking'));\n    this.iconLoader.load('X', import('./icons/outline/X'), import('./icons/solid/X'));\n  }\n\n}\n\nexport class Link extends DynamicDataModel {\n  id: string;\n  urlId: string;\n  urlTarget: string;\n  urlType: 'occurrences'|'rooms'|'items'|'systems'|'other' | undefined;\n  name?: string;\n  buildingName?: string;\n  roomNb?: string;\n}\n\n","import { Container } from 'aurelia-framework';\nimport { AureliaUX } from '@aurelia-ux/core';\nimport { settings } from 'settings';\n\nexport class BaseApp {\n\n  private ux: AureliaUX;\n\n  constructor() {\n    this.ux = Container.instance.get(AureliaUX);\n    if (settings && settings.ux) {\n      if (settings.ux.design) {\n        for (let key in settings.ux.design) {\n          this.ux.design[key] = settings.ux.design[key];\n        }\n      }\n    }\n  }\n}\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".requesting-indicator {\\n  position: absolute;\\n  top: 0px;\\n  left: 0;\\n  right: 0;\\n  z-index: 3;\\n  display: flex;\\n}\\n\\n\\n/* Fix for Safari-mobile in gettingStarted.Email */\\nbody, button, input, optgroup, select, textarea {\\n  -webkit-overflow-scrolling: auto !important;\\n  }\\n/* Fix for Old Getting-started module */\\ngetting-started .ux-button--raised,getting-started .ux-button--flat,getting-started .ux-button--fab {\\n    background-color: var(--aurelia-ux--design-primary-dark) !important;\\n}\\n\\nbody {\\n  background-color: var(--fill-color);\\n  color: var(--neutral-foreground-rest);\\n}\\n\\n/* Fix Style ux-button */\\n.ux-button--accent > .ux-button--outline {\\n  border-color: var(--aurelia-ux--design-accent);\\n  color: var(--aurelia-ux--design-accent);\\n}\\n\\n:root {\\n  --spacing-unit: calc(var(--design-unit) * 2);\\n  --spacing-unit-lg: calc(var(--spacing-unit) * 2);\\n  --three-canvas-background: #000;\\n}\\n\\n\\n.abs-from-toolbar-top {\\n  padding-bottom: 100px;\\n}\\nar-smart-toolbar > div {\\n  box-shadow: none;\\n  border-bottom: 1px solid var(--neutral-stroke-divider-rest);\\n  background-color: #303030;\\n}\\nar-smart-toolbar > div > span.right {\\n  margin-right: 10px;\\n}\\n\\n.menu {\\n  height: 100%;\\n  position: relative;\\n  padding-top: 80px;\\n  overflow-y: auto;\\n}\\n\\n.menu > fast-card-row:first-of-type {\\n  position: fixed;\\n  top: 0;\\n  width: 100%;\\n  z-index: 1;\\n}\\n\\nfast-collection {\\n  display: block;\\n  box-sizing: border-box;\\n}\\n\\nfast-collection-row {\\n  display: flex;\\n  flex-wrap: wrap;\\n  margin: 0 calc(var(--ifm-spacing-horizontal)*-1);\\n}\\n\\n.col[class*=col--] {\\n  padding: 8px;\\n  flex: auto;\\n}\\n.margin-bottom--lg, .margin-vert--lg {\\n  margin-bottom: 2rem!important;\\n}\\n.col--6 {\\n  --ifm-col-width: 50%;\\n}\\n\\nfast-dialog {\\n  --dialog-height: auto;\\n  --dialog-width: auto;\\n  color: var(--neutral-foreground-rest);\\n}\\n\\nfast-dialog::part(control) {\\n  min-width: 300px;\\n}\\n\\nfast-dialog .dialog-head {\\n  display: grid;\\n  grid-gap: calc(var(--spacing-unit-lg) * 1px);\\n  grid-template-columns: min-content 1fr min-content;\\n  align-items: center;\\n  padding: 0 calc(var(--spacing-unit) * 1px);\\n}\\n\\nfast-dialog .dialog-foot {\\n  display: grid;\\n  grid-gap: calc(var(--spacing-unit-lg) * 1px);\\n  grid-template-columns: 1fr min-content;\\n  align-items: center;\\n  padding: calc(var(--spacing-unit) * 1px);\\n}\\n\\nfast-dialog .dialog-foot > * {\\n  display: flex;\\n  gap: calc(var(--spacing-unit) * 1px);\\n}\\n\\nfast-dialog .dialog-content {\\n  padding: calc(var(--spacing-unit) * 1px);\\n  max-height: calc(100vh - 200px);\\n  overflow-y: auto;\\n}\\n\\nfast-badge {\\n  --badge-fill-primary: var(--accent-fill-rest);\\n  --badge-fill-secondary: var(--accent-foreground-rest);\\n  --badge-fill-transparent: transparent;\\n  --badge-color-secondary: var(--foreground-on-accent-rest);\\n  --badge-color-primary: var(--foreground-on-accent-rest);\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","module.exports = \"<template>\\n  <require from=\\\"aurelia-resources/animate.css\\\"></require>\\n  <require from=\\\"aurelia-resources/basics.css\\\"></require>\\n  <require from=\\\"aurelia-resources/dialog-card.css\\\"></require>\\n  <require from=\\\"./typography.css\\\"></require>\\n  <require from=\\\"./base/app-base.css\\\"></require>\\n  <require from=\\\"./app.css\\\"></require>\\n  <require from=\\\"./base/dark-base.css\\\"></require>\\n  <require from=\\\"./dark.css\\\"></require>\\n  <require from=\\\"./utilities.css\\\"></require>\\n\\n  <noie></noie>\\n  <div class=\\\"notify-top-host\\\"></div>\\n  <div class=\\\"notify-bottom-host\\\"></div>\\n\\n  <div class=\\\"requesting-indicator\\\" if.bind=\\\"global.swissdataApi.http.isRequesting & debounce:150\\\">\\n    <ar-spinner-line height=\\\"3px\\\" active.bind=\\\"true\\\"></ar-spinner-line>\\n  </div>\\n\\n  <!-- Smart toolbar displayed in all application, on top of router view -->\\n  <ar-smart-toolbar class=\\\"abs-toolbar-top\\\" style=\\\"background: white; z-index: 2;\\\">\\n    <!-- Left part of the toolbar -->\\n    <fast-button icon slot=\\\"left\\\" appearance=\\\"lightweight\\\" click.trigger=\\\"openMenu()\\\">\\n      <fast-icon icon=\\\"Menu\\\"></fast-icon>\\n    </fast-button>\\n    \\n    <!-- Center part of the toolbar -->\\n    <span slot=\\\"center\\\" class=\\\"click\\\" click.delegate=\\\"global.navigateToRoute('home')\\\"><img src=\\\"/images/logo-ge.svg\\\" alt=\\\"UNIGE\\\" height=\\\"45px\\\"></span>\\n    <fast-button icon slot=\\\"right\\\" appearance=\\\"lightweight\\\" click.trigger=\\\"global.navigateToRoute('account')\\\">\\n      <fast-icon icon=\\\"User\\\"></fast-icon>\\n    </fast-button>\\n  </ar-smart-toolbar>\\n\\n\\n  <div class=\\\"abs-from-toolbar-top vscroll\\\" if.bind=\\\"global.ready\\\" click.delegate=\\\"transferClick($event)\\\">\\n    <router-view></router-view>\\n  </div>\\n\\n</template>\\n\";","module.exports = function(cb) {\n\trequire.ensure([], function(require) {\n\t\tcb(require(\"!!../../node_modules/ts-loader/index.js!./account.ts\"));\n\t}, \"account\");\n}","module.exports = function(cb) {\n\trequire.ensure([], function(require) {\n\t\tcb(require(\"!!../../node_modules/ts-loader/index.js!./account-credentials.ts\"));\n\t}, \"account\");\n}","module.exports = function(cb) {\n\trequire.ensure([], function(require) {\n\t\tcb(require(\"!!../../node_modules/ts-loader/index.js!./account-profile.ts\"));\n\t}, \"account\");\n}","module.exports = function(cb) {\n\trequire.ensure([], function(require) {\n\t\tcb(require(\"!!../../node_modules/ts-loader/index.js!./login-page.ts\"));\n\t}, \"login\");\n}","module.exports = function(cb) {\n\trequire.ensure([], function(require) {\n\t\tcb(require(\"!!../../node_modules/ts-loader/index.js!./manager.ts\"));\n\t}, \"manager\");\n}","\nimport { FrameworkConfiguration } from 'aurelia-framework';\nimport { PLATFORM } from 'aurelia-pal';\n\nexport function configure(config: FrameworkConfiguration) {\n  config.globalResources([\n  ]);\n}\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"/* normalize all ar-drawer to same z-index position */\\nbody ar-drawer {\\n  z-index: 10;\\n}\\nbody .drawer-overlay {\\n  z-index: 9;\\n}\\n\\n\\nux-list-item {\\n  justify-content: space-between;\\n}\\n\\nux-list-item .ux-list-item__list-content {\\n  width: 100%;\\n  margin-left: 16px;\\n}\\n\\n.requesting-indicator {\\n  position: absolute;\\n  top: 49px;\\n  left: 0;\\n  right: 0;\\n  z-index: 3;\\n  display: flex;\\n}\\n\\nbody > .notify-top-host,\\nbody > .notify-bottom-host {\\n  position: absolute;\\n  width: 100%;\\n  z-index: 400;\\n  pointer-events: none;\\n}\\nbody > .notify-top-host {\\n  top: 0;\\n}\\n\\nbody > .notify-bottom-host {\\n  bottom: 0;\\n}\\nbody > .notify-top-host .ar-notification .ar-notification__message,\\nbody > .notify-bottom-host .ar-notification .ar-notification__message {\\n  pointer-events: auto;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".dark {\\n  background: var(--aurelia-ux--design-primary);\\n  --aurelia-ux--button-background: #01DF9B;\\n  --aurelia-ux--button-foreground: #fff;\\n  --aurelia-ux--input-background: rgba(0, 0, 0, 0.2);\\n  --aurelia-ux--input-foreground: #fff;\\n  --aurelia-ux--input-foreground-label: #dadada;\\n  --aurelia-ux--input-active-color: #7BE0DD;\\n  --aurelia-ux--input-background-hover: rgba(0, 0, 0, 0.3);\\n}\\n\\n.dark .ux-button--text {\\n  --aurelia-ux--button-background: #fff;\\n}\\n\\n.dark,\\n.dark h1,\\n.dark h2,\\n.dark h3,\\n.dark h4,\\n.dark h5,\\n.dark h6,\\n.dark p {\\n  color: var(--aurelia-ux--design-primary-foreground);\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import {FrameworkConfiguration} from 'aurelia-framework';\nimport {PLATFORM} from 'aurelia-pal';\n\nexport function configure(config: FrameworkConfiguration) {\n  config.globalResources([\n    PLATFORM.moduleName('./login'),\n    PLATFORM.moduleName('./user-preview.html'),\n    PLATFORM.moduleName('./menu'),\n    PLATFORM.moduleName('./qr-code-reader')\n  ]);\n}\n","import { FastNext } from './next/index';\n// Detect auto-fill: https://medium.com/@brunn/detecting-autofilled-fields-in-javascript-aed598d25da7\nimport { inject, BindingEngine, bindable } from 'aurelia-framework'\nimport { Global } from 'global';\nimport { getLogger } from 'aurelia-logging';\nimport { Subscription } from 'aurelia-event-aggregator';\nimport PhoneNumber from 'awesome-phonenumber';\nimport { errorify, notify } from 'aurelia-resources';\nimport { SdLogin } from 'aurelia-deco';\nimport settings from '../settings';\nimport { EventAggregator } from 'aurelia-event-aggregator';\nimport { TextField } from '@microsoft/fast-foundation';\nimport * as moment from 'moment';\nconst log = getLogger('login');\n\n@inject(Element, Global, BindingEngine, SdLogin, EventAggregator)\nexport class Login {\n\n  @bindable public routeNext: string = 'account';\n  @bindable public routeParams: any = {};\n\n  public loginWith: 'email' | 'mobile' = 'email';\n\n  public countriesList = settings.countries;\n  public nextElement: FastNext;\n  private step: 'welcome' | 'mobile' | 'validation' | 'identity' | 'finish' = 'welcome';\n  private mobile = '';\n  public mobilePlaceholder = '';\n  private regionCode = 'ch';\n  private isMobileValid = false;\n  private email = '';\n  public emailPlaceholder = 'example@domain.com';\n  private isEmailValid = false;\n  private password = '';\n  private isPasswordValid = false;\n  private countryCode: number;\n  private validationCode = '';\n  public isValidationCodeValid = false;\n  private resetPasswordCode = '';\n  public isResetPasswordCodeValid = false;\n  public suggestAccountCreation = false;\n  \n  private invalidCode = false;\n  private firstname = '';\n  private lastname = '';\n  public preview: string;\n  private extraData: any;\n\n  private token: string;\n  private userId: string;\n  \n  private loading = false;\n\n\n  private subscriptions: Subscription[] = [];\n\n  constructor(private element: Element, private global: Global, private bindingEngine: BindingEngine, private sdLogin: SdLogin, private eventAggregator: EventAggregator) {\n    this.eventAggregator.publish('request-icon-loading', 'AtSymbol');\n    this.eventAggregator.publish('request-icon-loading', 'Key');\n    this.eventAggregator.publish('request-icon-loading', 'Check');\n  }\n\n  public attached(): void {\n    this.regionCode = this.global.state?.country?.toLowerCase() || 'ch';\n    this.countryChanged();\n    this.fetchQueryStringData();\n    this.listenForAutoFill();\n  }\n\n  public listenForAutoFill(): void {\n    const fields = this.element.querySelectorAll('ecos-text-field-login:not(.autofill-listener-ready)');\n    for (let index = 0; index < fields.length; index++) {\n      const field = fields.item(index);\n      field.addEventListener('animationstart', () => {\n        const f: any = field;\n        field.setAttribute('value', f.value);\n        const input = field.querySelector('input');\n        if (input) {\n          input.value = f.value;\n          input.dispatchEvent(new CustomEvent('keyup', {bubbles: true}));\n        }\n      });\n      field.classList.add('autofill-listener-ready');\n    }\n  }\n\n  public async fetchQueryStringData(): Promise<void> {\n    const search = location.search;\n    if (search && search.substr(0, 1) === '?') {\n      const searchParts = search.substr(1).split('&');\n      let token = '';\n      let code = '';\n      let tokenExpiry = '';\n      for (const part of searchParts) {\n        const keyValue = part.split('=');\n        const key = keyValue[0];\n        const value = keyValue[1];\n        if (key === 'step' && value === 'create-account') {\n          setTimeout(() => {\n            this.startCreatingAnAccount();\n          }, 350);\n        }\n        if (key === 'f') {\n          this.firstname = decodeURIComponent(value);\n        }\n        if (key === 'l') {\n          this.lastname = decodeURIComponent(value);\n        }\n        if (key === 'e' && value) {\n          this.email = decodeURIComponent(value);\n        }\n        if (key === 'm' && value) {\n          this.mobile = decodeURIComponent(value);\n        }\n        if (key === 'tk' && value) {\n          token = decodeURIComponent(value);\n        }\n        if (key === 'exp' && value) {\n          tokenExpiry = decodeURIComponent(value);\n        }\n        if (key === 'c' && value) {\n          code = decodeURIComponent(value);\n        }\n        if (key === 'extra') {\n          try {\n            this.extraData = JSON.parse(atob(value));\n          } catch (error) {\n            this.extraData = value;\n          }\n        }\n        location.search.replace(part, '');\n        if (token && tokenExpiry && code) {\n\n          this.clearCreateAccountMemory();\n          // check if token is valid\n          await this.global.store.dispatch('sd-login-validateAccountStep', token, tokenExpiry);\n          try {\n            await this.sdLogin.validateCode(code, this.loginWith);\n            notify('login.Your account has been validated');\n            return;\n          } catch (error) {\n            errorify(error);\n          }\n        }\n      }\n    }\n    this.fetchCreateAccountMemory();\n    this.continueFromCreateAccountMemory();\n  }\n\n  public scrollNextContentToTop(event: CustomEvent): void {\n    const elementOrElementId = event.detail as string | HTMLElement;\n    const element: HTMLElement = typeof elementOrElementId === 'string' ? document.getElementById(elementOrElementId) : elementOrElementId;\n    element.scrollTo({top: 0, behavior: 'smooth'});\n    document.scrollingElement.scrollTo({top: 0, behavior: 'smooth'});\n  }\n\n  public async countryChanged(): Promise<void> {\n    this.countryCode = PhoneNumber.getCountryCodeForRegionCode(this.regionCode);\n    this.mobilePlaceholder = PhoneNumber.getExample(this.regionCode).getNumber('national');\n    this.mobileChanged();\n    await this.global.store.dispatch('setCountry', this.regionCode.toUpperCase());\n  }\n\n  public countryCodeNumber(regionCode: string): number {\n    return PhoneNumber.getCountryCodeForRegionCode(regionCode);\n  }\n\n  public mobileChanged(): void {\n    this.isMobileValid = new PhoneNumber(this.mobile, this.regionCode).isValid();\n  }\n\n  public emailChanged(): void {\n    this.isEmailValid = isEmail(this.email);\n  }\n  \n  public passwordChanged(performValidation: boolean): void {\n    this.isPasswordValid = this.password.length >= 8 || !performValidation;\n  }\n  \n  public validationCodeChanged(preventAutoValidation = false): void {\n    if (this.validationCode.length === 6 && !preventAutoValidation) {\n      this.validateAccount(null, false);\n    }\n    this.isValidationCodeValid = this.validationCode.length === 6;\n  }\n\n  public resetPasswordCodeChanged(): void {\n    this.isResetPasswordCodeValid = this.resetPasswordCode.length === 6;\n  }\n\n  public detached(): void {\n    for (const sub of this.subscriptions) {\n      sub.dispose();\n    }\n    this.subscriptions = [];\n  }\n\n\n  public async processIdentity(event: Event | null, manuallyRequested = true): Promise<void> {\n    if (event) {\n      event.preventDefault();\n    }\n    this.email = this.email.trim();\n    this.mobile = this.mobile.trim();\n    if (this.loginWith === 'mobile' && !this.isMobileValid) {\n      errorify(new Error('Invalid mobile number'));\n      return;\n    }\n\n    if (this.loginWith === 'email' && !this.isEmailValid) {\n      errorify(new Error('Invalid email'));\n      return;\n    }\n\n    if (this.loading) {\n      return;\n    }\n\n    const username = this.loginWith === 'mobile' ? new PhoneNumber(this.mobile, this.regionCode)?.getNumber() : this.email;\n    this.loading = true;\n    try {\n      const exists = await this.sdLogin.checkIfUsernameExists(username);\n      \n      if (!exists) {\n        if (manuallyRequested) {\n          this.suggestAccountCreation = true;\n        }\n      } else if (exists === this.loginWith) {\n        this.suggestAccountCreation = false;\n        this.nextElement.goToId('login-with-password');\n        setTimeout(() => {\n          const input = document.querySelector('ecos-next-item#login-with-password ecos-text-field-login input');\n          if (input instanceof HTMLInputElement) {\n            input.focus();\n          }\n        }, 600);\n        this.clearCreateAccountMemory();\n      }\n      this.listenForAutoFill();\n    } catch (error) {\n      errorify(error);\n    }\n    this.loading = false;\n  }\n\n  public startCreatingAnAccount(emptyUsername = true, event?: Event): void | false {\n    if (event) {\n      event.stopPropagation();\n    }\n    if (emptyUsername) {\n      this.email = '';\n      this.mobile = '';\n    }\n    this.nextElement.goToId('name');\n    setTimeout(() => {\n      const input = document.querySelector('ecos-next-item#name ecos-text-field');\n      if (input instanceof TextField) {\n        const shadowedInput = input.shadowRoot.querySelector('input');\n        if (input) {\n          shadowedInput.focus();\n        }\n      }\n    }, 600)\n    this.suggestAccountCreation = false;\n    if (event) {\n      return false;\n    }\n  }\n\n  public continueCreatingAnAccount(event: Event | null): void {\n    if (event) {\n      event.preventDefault();\n    }\n    this.nextElement.goToId('create-account');\n    setTimeout(() => {\n      const input = document.querySelector('ecos-next-item#create-account ecos-text-field-login input');\n      if (input instanceof HTMLInputElement) {\n        input.focus();\n      }\n    }, 600);\n    this.saveCreateAccountMemory();\n  }\n\n  public async requestValidationCode(event: Event | null): Promise<void> {\n    if (event) {\n      event.preventDefault();\n    }\n\n    if (this.loading) {\n      return;\n    }\n\n    const username = this.loginWith === 'mobile' ? new PhoneNumber(this.mobile, this.regionCode)?.getNumber() : this.email;\n    this.loading = true;\n    try {\n      this.sdLogin.passwordStrengthRequired = 'weak';\n      const createAccountToken = await this.sdLogin.createAccount(\n        this.firstname || '-', \n        this.lastname || '-',\n        this.loginWith === 'email' ? username : '',\n        this.loginWith === 'mobile' ? username : '',\n        this.password,\n        this.loginWith === 'email', this.loginWith === 'mobile',\n        this.extraData);\n      this.validationCode = '';\n      this.nextElement.goToId('validate-account');\n      setTimeout(() => {\n        const input = document.querySelector('ecos-next-item#validate-account ecos-text-field-login input');\n        if (input instanceof HTMLInputElement) {\n          input.focus();\n        }\n      }, 600);\n      this.saveCreateAccountMemory(this.sdLogin.state.sdlogin.createAccountValidationToken, this.sdLogin.state.sdlogin.createAccountValidationTokenExpiry);\n    } catch  (error) {\n      errorify(error);\n    }\n    this.loading = false;\n  }\n\n  private validating = false;\n  private validated = false;\n  public async validateAccount(event: Event | null, manuallyRequested = true): Promise<void> {\n    if (event) {\n      event.preventDefault();\n    }\n    if (this.loading || this.validating) {\n      return;\n    }\n\n    if (manuallyRequested) {\n      this.loading = true;\n    }\n    this.validating = true;\n    try {\n      await this.sdLogin.validateCode(this.validationCode, this.loginWith);\n      this.validated = true;\n      notify('login.Your account has been validated');\n      \n      if (this.password) {\n        // if the user did not refresh, we have the password in memory and can login\n        const username = this.loginWith === 'mobile' ? new PhoneNumber(this.mobile, this.regionCode)?.getNumber() : this.email;\n        await this.sdLogin.login(username, this.password);\n        setTimeout(() => {\n          this.afterLogin();\n        }, 500);\n      } else {\n        notify('login.You can now login with the password you choose earlier');\n        await this.processIdentity(null, false);\n      }\n      this.clearCreateAccountMemory();\n\n    } catch  (error) {\n      if (manuallyRequested) {\n        this.invalidCode = true;\n        errorify(error);\n      }\n    }\n    this.loading = false;\n    this.validating = false;\n  }\n\n  public async loginWithPassword(event: Event | null): Promise<void> {\n    if (event) {\n      event.preventDefault();\n    }\n\n    if (this.loading) {\n      return;\n    }\n\n    this.loading = true;\n    try {\n      const username = this.loginWith === 'mobile' ? new PhoneNumber(this.mobile, this.regionCode)?.getNumber() : this.email;\n      await this.sdLogin.login(username, this.password);\n      this.afterLogin();\n    } catch  (error) {\n      errorify(error);\n    }\n    this.loading = false;\n  }\n\n  public async forgotPassword(): Promise<void> {\n\n    if (this.loading) {\n      return;\n    }\n\n    this.loading = true;\n    try {\n      const username = this.loginWith === 'mobile' ? new PhoneNumber(this.mobile, this.regionCode)?.getNumber() : this.email;\n      await this.sdLogin.requestResetPassword(username);\n      this.nextElement.goToId('reset-password');\n      setTimeout(() => {\n        const input = document.querySelector('ecos-next-item#reset-password ecos-text-field-login input');\n        if (input instanceof HTMLInputElement) {\n          input.focus();\n        }\n      }, 600);\n      this.resetPasswordCode = '';\n    } catch  (error) {\n      errorify(error);\n    }\n    this.loading = false;\n  }\n\n  public async resetPassword(event: Event | null): Promise<void> {\n    if (event) {\n      event.preventDefault();\n    }\n\n    if (this.loading) {\n      return;\n    }\n\n    this.loading = true;\n    try {\n      await this.sdLogin.resetPassword(this.resetPasswordCode, this.password);\n      this.password = '';\n      this.backToLogin();\n    } catch  (error) {\n      errorify(error);\n    }\n    this.loading = false;\n  }\n\n  public backToLogin(): void {\n    this.nextElement.goToId('identity');\n    setTimeout(() => {\n      const input = document.querySelector('ecos-next-item#identity ecos-text-field-login input');\n      if (input instanceof HTMLInputElement) {\n        input.focus();\n      }\n    }, 600);\n  }\n\n  public afterLogin(): void {\n    setTimeout(() => {\n      this.global.navigateToRoute(this.routeNext, this.routeParams);\n    }, 150);\n  }\n\n  private createAccountMemory: {\n    firstname?: string;\n    lastname?: string;\n    username?: string;\n    regionCode?: string;\n    token?: string;\n    tokenExpiry?: string;\n    extraData?: any\n  } = {};\n  private saveCreateAccountMemory(token?: string, tokenExpiry?: string) {\n    this.createAccountMemory.firstname = this.firstname;\n    this.createAccountMemory.lastname = this.lastname;\n    this.createAccountMemory.username = this.loginWith === 'mobile' ? this.mobile : this.email;\n    this.createAccountMemory.regionCode = this.regionCode;\n    this.createAccountMemory.token = token || undefined;\n    this.createAccountMemory.tokenExpiry = tokenExpiry ? moment(tokenExpiry).toString() : undefined;\n    this.createAccountMemory.extraData = this.extraData;\n    const string = btoa(JSON.stringify(this.createAccountMemory));\n    localStorage.setItem('gs-cam', string);\n  }\n\n  private fetchCreateAccountMemory() {\n    const cam = localStorage.getItem('gs-cam');\n    if (cam) {\n      try {\n        this.createAccountMemory = JSON.parse(atob(cam));\n        if (this.createAccountMemory.tokenExpiry) {\n          const expires = moment(this.createAccountMemory.tokenExpiry);\n          if (expires.isAfter(moment())) {\n            this.createAccountMemory.token = undefined;\n            this.createAccountMemory.tokenExpiry = undefined;\n          }\n        }\n      } catch (error) {}\n    }\n  }\n\n  private clearCreateAccountMemory(keepIdentity = true) {\n    this.createAccountMemory = {};\n    this.firstname = '';\n    this.lastname = '';\n    if (!keepIdentity) {\n      this.email = '';\n      this.mobile = '';\n    }\n    this.password = '';\n    this.token = '';\n    this.sdLogin.store.dispatch('sd-login-validateAccountStep', '', '');\n    if (keepIdentity) {\n      this.saveCreateAccountMemory('', '');\n    } else {\n      localStorage.removeItem('gs-cam');\n    }\n  }\n\n  private async continueFromCreateAccountMemory() {\n    if (!this.createAccountMemory.username) {\n      return;\n    }\n    if (this.createAccountMemory.regionCode) {\n      this.regionCode = this.createAccountMemory.regionCode;\n    }\n    if (this.loginWith === 'email' && isEmail(this.createAccountMemory.username)) {\n      this.email = this.createAccountMemory.username;\n      this.emailChanged();\n    } else if (this.loginWith === 'mobile' && new PhoneNumber(this.mobile, this.regionCode)?.isValid()) {\n      this.mobile === this.createAccountMemory.username;\n      this.mobileChanged();\n    } else {\n      return false;\n    }\n\n    if (this.createAccountMemory.firstname) {\n      this.firstname = this.createAccountMemory.firstname;\n    }\n    if (this.createAccountMemory.lastname) {\n      this.lastname = this.createAccountMemory.lastname;\n    }\n    if (this.createAccountMemory.extraData) {\n      this.extraData = this.createAccountMemory.extraData;\n    }\n\n    if (this.createAccountMemory.token) {\n      await this.sdLogin.store.dispatch('sd-login-validateAccountStep', this.createAccountMemory.token, this.createAccountMemory.tokenExpiry);\n      this.nextElement.goToId('validate-account');\n      setTimeout(() => {\n        const input = document.querySelector('ecos-next-item#validate-account ecos-text-field-login input');\n        if (input instanceof HTMLInputElement) {\n          input.focus();\n        }\n      }, 600);\n    } else if (this.firstname || this.lastname) {\n      await this.processIdentity(new CustomEvent('none'), false);\n    }\n  }\n\n  \n}\n\nfunction isEmail(value: string): boolean {\n  if (typeof value === 'string') {\n    if (value.match(/^[a-zA-Z](.*)/g)) {\n      // username starts with a letter\n      return true;\n    }\n    if (value.indexOf('@') !== -1) {\n      // username contains the @ symbol\n      return true;\n    }\n    return false;\n  }\n  return false;\n}\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"login fast-button fast-progress-ring {\\n  margin: 0;\\n  width: 20px;\\n  height: 20px;\\n}\\n/* FIX CONFLICTS WITH AURELIA-UX */\\nlogin fast-button[type=submit] {\\n  -webkit-appearance: none;\\n}\\nlogin fast-anchor.accent:not(:hover):not(:active) {\\n  color: var(--foreground-on-accent-rest);\\n  background-color: var(--accent-fill-rest)\\n}\\nlogin fast-anchor.accent:hover {\\n  color: var(--foreground-on-accent-hover);\\n  background-color: var(--accent-fill-hover)\\n}\\nlogin fast-anchor.accent:active {\\n  color: var(--foreground-on-accent-active);\\n  background-color: var(--accent-fill-active)\\n}\\nlogin fast-text-field-login {\\n  display: inline-block;\\n  outline: none;\\n  user-select: none;\\n}\\nlogin fast-text-field-login fast-icon[slot=\\\"start\\\"] {\\n  display: none;\\n}\\n\\n@keyframes onAutoFillStart {  from {/**/}  to {/**/}}\\n@keyframes onAutoFillCancel {  from {/**/}  to {/**/}}\\nlogin input:-webkit-autofill {\\n    animation-name: onAutoFillStart;\\n    transition: background-color 50000s ease-in-out 0s;\\n}\\nlogin input:not(:-webkit-autofill) {\\n    animation-name: onAutoFillCancel;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","module.exports = \"<template>\\n  <require from=\\\"./login.css\\\"></require>\\n  <fast-next ref=\\\"nextElement\\\" changed.trigger=\\\"scrollNextContentToTop($event)\\\">\\n    <fast-next-item id=\\\"identity\\\">\\n      <form submit.trigger=\\\"processIdentity($event)\\\" novalidate>\\n        <fast-stack small>\\n          <h1 t=\\\"login.Welcome\\\"></h1>\\n          <h4 t=\\\"login.Login or create an account\\\"></h4>\\n\\n          <fast-stack style=\\\"max-width: 400px; margin-top: 32px;\\\">\\n            <template if.bind=\\\"loginWith === 'mobile'\\\">\\n              <p>\\n                <fast-select t=\\\"[placeholder]login.Your country\\\" placeholder=\\\"\\\" value.bind=\\\"regionCode\\\" change.trigger=\\\"countryChanged()\\\" style=\\\"width: 100%;\\\">\\n                  <fast-option value=\\\"${countryCode}\\\" repeat.for=\\\"countryCode of global.state.countries\\\">${countryCode | countryName | t}</fast-option>\\n                </fast-select>\\n              </p>\\n              <p if.bind=\\\"true\\\">\\n                <fast-text-field-login name=\\\"username\\\" value.bind=\\\"mobile\\\" pattern=\\\"[0-9]*\\\" placeholder=\\\"${mobilePlaceholder}\\\" change.trigger=\\\"mobileChanged()\\\" keyup.trigger=\\\"mobileChanged()\\\" style=\\\"width: 100%;\\\" autocomplete=\\\"username\\\" autofocus>\\n                  <span class=\\\"start__region-code\\\" slot=\\\"start\\\">+${countryCode}</span>\\n                </fast-text-field-login>\\n              </p>\\n            </template>\\n            <template if.bind=\\\"loginWith === 'email'\\\">\\n              <p if.bind=\\\"true\\\">\\n                <fast-text-field-login name=\\\"username\\\" value.bind=\\\"email\\\" placeholder=\\\"${emailPlaceholder}\\\" change.trigger=\\\"emailChanged()\\\" keyup.trigger=\\\"emailChanged()\\\" style=\\\"width: 100%;\\\" autocomplete=\\\"username\\\" autofocus>\\n                  <fast-icon slot=\\\"start\\\" icon=\\\"AtSymbol\\\"></fast-icon>\\n                </fast-text-field-login>\\n              </p>\\n            </template>\\n            <input type=\\\"password\\\" autocomplete=\\\"current-password\\\" style=\\\"display:none;\\\">\\n            <p style=\\\"display: grid; grid-template-columns: 1fr min-content;\\\">\\n              <fast-button appearance=\\\"lightweight\\\" style=\\\"justify-self: start;\\\" click.trigger=\\\"startCreatingAnAccount()\\\">\\n                <span t=\\\"login.Create an account\\\"></span>\\n              </fast-button>\\n              <fast-button disabled.bind=\\\"login || (loginWith === 'mobile' && !isMobileValid) || (loginWith === 'email' && !isEmailValid)\\\" appearance=\\\"accent\\\" type=\\\"submit\\\">\\n                <fast-progress-ring slot=\\\"start\\\" if.bind=\\\"loading\\\"></fast-progress-ring>\\n                <span t=\\\"login.Continue\\\"></span>\\n              </fast-button>\\n            </p>\\n            <p if.bind=\\\"suggestAccountCreation && ((loginWith === 'mobile' && isMobileValid) || (loginWith === 'email' && isEmailValid))\\\">\\n              <span t=\\\"login.We couldn't find any account for {{ username }} go ahead and\\\" t-params.bind=\\\"{username: loginWith === 'email' ? email : mobile }\\\"></span>\\n              <fast-anchor t=\\\"login.Create one\\\" appearance=\\\"hypertext\\\" href=\\\"#\\\" click.trigger=\\\"startCreatingAnAccount(false, $event)\\\"></fast-anchor>\\n            </p>\\n          </fast-stack>\\n        </fast-stack>\\n      </form>\\n    </fast-next-item>\\n    <fast-next-item id=\\\"name\\\">\\n      <form submit.trigger=\\\"continueCreatingAnAccount($event)\\\" novalidate>\\n        <fast-stack small>\\n          <h1 t=\\\"login.Create an account\\\"></h1>\\n          <h4 t=\\\"login.Whats your name\\\"></h4>\\n\\n          <fast-stack style=\\\"max-width: 400px; margin-top: 32px;\\\">\\n            <p if.bind=\\\"true\\\">\\n              <fast-text-field name=\\\"firstname\\\" type=\\\"text\\\" value.bind=\\\"firstname\\\" t=\\\"[placeholder]login.Firstname\\\" style=\\\"width: 100%;\\\" autocomplete=\\\"given-name\\\">\\n                \\n              </fast-text-field>\\n            </p>\\n            <p if.bind=\\\"true\\\">\\n              <fast-text-field name=\\\"firstname\\\" type=\\\"text\\\" value.bind=\\\"lastname\\\" t=\\\"[placeholder]login.Lastname\\\" style=\\\"width: 100%;\\\" autocomplete=\\\"family-name\\\">\\n                \\n              </fast-text-field>\\n            </p>\\n            <p style=\\\"display: grid; grid-template-columns: 1fr min-content;\\\">\\n              <fast-button appearance=\\\"lightweight\\\" style=\\\"justify-self: start;\\\" click.trigger=\\\"backToLogin()\\\" t=\\\"login.Back to login\\\"></fast-button>\\n              <fast-button appearance=\\\"accent\\\" type=\\\"submit\\\">\\n                <span t=\\\"login.Continue\\\"></span>\\n              </fast-button>\\n            </p>\\n          </fast-stack>\\n        </fast-stack>\\n\\n      </form>\\n    </fast-next-item>\\n    <fast-next-item id=\\\"create-account\\\">\\n      <form submit.trigger=\\\"requestValidationCode($event)\\\" novalidate>\\n        <fast-stack small>\\n          <h1 if.bind=\\\"loginWith === 'mobile'\\\" t=\\\"login.Enter your mobile and set a password\\\"></h1>\\n          <h1 if.bind=\\\"loginWith === 'email'\\\" t=\\\"login.Enter your email and set a password\\\"></h1>\\n\\n          <fast-stack style=\\\"max-width: 400px; margin-top: 32px;\\\">\\n            <template if.bind=\\\"loginWith === 'mobile'\\\">\\n              <p>\\n                <fast-select t=\\\"[placeholder]login.Your country\\\" placeholder=\\\"\\\" value.bind=\\\"regionCode\\\" change.trigger=\\\"countryChanged()\\\" style=\\\"width: 100%;\\\">\\n                  <fast-option value=\\\"${countryCode}\\\" repeat.for=\\\"countryCode of global.state.countries\\\">\\n                    ${countryCode | countryName | t}\\n                    +${countryCodeNumber(countryCode)}\\n                  </fast-option>\\n                </fast-select>\\n              </p>\\n              <p if.bind=\\\"true\\\">\\n                <fast-text-field-login name=\\\"username\\\" value.bind=\\\"mobile\\\" pattern=\\\"[0-9]*\\\" placeholder=\\\"${mobilePlaceholder}\\\" change.trigger=\\\"mobileChanged()\\\" keyup.trigger=\\\"mobileChanged()\\\" style=\\\"width: 100%;\\\" autocomplete=\\\"username\\\"></fast-text-field-login>\\n              </p>\\n            </template>\\n            <template if.bind=\\\"loginWith === 'email'\\\">\\n              <p if.bind=\\\"true\\\">\\n                <fast-text-field-login name=\\\"username\\\" value.bind=\\\"email\\\" placeholder=\\\"${emailPlaceholder}\\\" change.trigger=\\\"emailChanged()\\\" keyup.trigger=\\\"emailChanged()\\\" style=\\\"width: 100%;\\\" autocomplete=\\\"username\\\">\\n                  <fast-icon slot=\\\"start\\\" icon=\\\"AtSymbol\\\"></fast-icon>\\n                </fast-text-field-login>\\n              </p>\\n            </template>\\n            <p if.bind=\\\"true\\\">\\n              <fast-text-field-login type=\\\"password\\\" value.bind=\\\"password\\\" t=\\\"[placeholder]login.Min 8 characters\\\" change.trigger=\\\"passwordChanged()\\\" keyup.trigger=\\\"passwordChanged()\\\" style=\\\"width: 100%;\\\" autocomplete=\\\"new-password\\\">\\n                <fast-icon slot=\\\"start\\\" icon=\\\"Key\\\"></fast-icon>\\n              </fast-text-field-login>\\n            </p>\\n\\n            <p style=\\\"display: grid; grid-template-columns: 1fr min-content;\\\">\\n              <fast-button appearance=\\\"lightweight\\\" style=\\\"justify-self: start;\\\" click.trigger=\\\"backToLogin()\\\" t=\\\"login.Back to login\\\"></fast-button>\\n              <fast-button disabled.bind=\\\"!isPasswordValid || loading\\\" appearance=\\\"accent\\\" type=\\\"submit\\\">\\n                <fast-progress-ring slot=\\\"start\\\" if.bind=\\\"loading\\\"></fast-progress-ring>\\n                <span t=\\\"login.Continue\\\"></span>\\n              </fast-button>\\n            </p>\\n\\n          </fast-stack>\\n        </fast-stack>\\n\\n      </form>\\n    </fast-next-item>\\n    <fast-next-item id=\\\"validate-account\\\">\\n      <form submit.trigger=\\\"validateAccount($event)\\\" novalidate>\\n        <fast-stack small>\\n          <h1 t=\\\"login.Validate your account\\\"></h1>\\n\\n          <fast-stack style=\\\"max-width: 400px; margin-top: 32px;\\\">\\n            <p>\\n              <label t=\\\"login.We just sent you a code to the mobile number {{ mobile }} it can take several minutes to arrive\\\" if.bind=\\\"loginWith === 'mobile'\\\" t-params.bind=\\\"{mobile: mobile}\\\"></label>\\n              <label t=\\\"login.We just sent you a code to the email {{ email }} it can take several minutes to arrive\\\" if.bind=\\\"loginWith === 'email'\\\" t-params.bind=\\\"{email: email}\\\"></label>\\n            </p>\\n            <p if.bind=\\\"true\\\">\\n              <fast-text-field-login value.bind=\\\"validationCode\\\" placeholder=\\\"1234\\\" change.trigger=\\\"validationCodeChanged()\\\" keyup.trigger=\\\"validationCodeChanged()\\\" style=\\\"width: 100%;\\\" autocomplete=\\\"one-time-code\\\" ignore-dico>\\n                <fast-icon slot=\\\"start\\\" icon=\\\"Key\\\"></fast-icon>\\n              </fast-text-field-login>\\n            </p>\\n            \\n            <p style=\\\"display: grid; grid-template-columns: 1fr min-content;\\\">\\n              <fast-button appearance=\\\"lightweight\\\" style=\\\"justify-self: start;\\\" click.trigger=\\\"backToLogin()\\\" t=\\\"login.Back to login\\\"></fast-button>\\n              <fast-button disabled.bind=\\\"!isValidationCodeValid || validated || validating\\\" appearance=\\\"accent\\\" type=\\\"submit\\\">\\n                <fast-progress-ring slot=\\\"start\\\" if.bind=\\\"loading\\\"></fast-progress-ring>\\n                <fast-icon icon=\\\"Check\\\" slot=\\\"start\\\" if.bind=\\\"validated\\\"></fast-icon>\\n                <span t=\\\"login.Validate my account\\\"></span>\\n              </fast-button>\\n            </p>\\n\\n            <p if.bind=\\\"invalidCode\\\">\\n              <fast-button appearance=\\\"accent\\\" important click.delegate=\\\"resentValidationCode()\\\"><span t=\\\"login.Resend code\\\"></span></fast-button>\\n            </p>\\n\\n          </fast-stack>\\n        </fast-stack>\\n\\n      </form>\\n    </fast-next-item>\\n    <fast-next-item id=\\\"login-with-password\\\">\\n      <form submit.trigger=\\\"loginWithPassword($event)\\\" novalidate>\\n        <fast-stack small>\\n          <h1 t=\\\"login.We are happy to see you again\\\"></h1>\\n          <h4 if.bind=\\\"loginWith === 'mobile'\\\" t=\\\"login.You are logging in with {{ mobile }}\\\" t-params.bind=\\\"{mobile: mobile}\\\"></h4>\\n          <h4 if.bind=\\\"loginWith === 'email'\\\" t=\\\"login.You are logging in with {{ email }}\\\" t-params.bind=\\\"{email: email}\\\"></h4>\\n\\n          <fast-stack style=\\\"max-width: 400px; margin-top: 32px;\\\">\\n            <input type=\\\"text\\\" name=\\\"username\\\" value=\\\"${email || mobile}\\\" autocomplete=\\\"username\\\" style=\\\"display: none;\\\">\\n            <p if.bind=\\\"true\\\">\\n              <fast-text-field-login name=\\\"password\\\" type=\\\"password\\\" value.bind=\\\"password\\\" placeholder=\\\"********\\\" change.trigger=\\\"passwordChanged()\\\" keyup.trigger=\\\"passwordChanged()\\\" style=\\\"width: 100%;\\\" autocomplete=\\\"current-password\\\" ignore-dico>\\n                <fast-icon slot=\\\"start\\\" icon=\\\"Key\\\"></fast-icon>\\n              </fast-text-field-login>\\n            </p>\\n\\n            <p style=\\\"display: grid; grid-template-columns: 1fr min-content;\\\">\\n              <fast-button appearance=\\\"lightweight\\\" style=\\\"justify-self: start;\\\" click.trigger=\\\"backToLogin()\\\" t=\\\"login.Back to login\\\"></fast-button>\\n              <fast-button disabled.bind=\\\"loading || !isPasswordValid\\\" appearance=\\\"accent\\\" type=\\\"submit\\\">\\n                <fast-progress-ring slot=\\\"start\\\" if.bind=\\\"loading\\\"></fast-progress-ring>\\n                <span t=\\\"login.Login\\\"></span>\\n              </fast-button>\\n            </p>\\n\\n            <p>\\n              <fast-button appearance=\\\"lightweight\\\" click.trigger=\\\"forgotPassword()\\\" t=\\\"login.I forgot my password\\\"></fast-button>\\n            </p>\\n\\n          </fast-stack>\\n        </fast-stack>\\n\\n      </form>\\n    </fast-next-item>\\n    <fast-next-item id=\\\"reset-password\\\">\\n      <form submit.trigger=\\\"resetPassword($event)\\\" novalidate>\\n        <fast-stack small>\\n          <h1 t=\\\"login.Fill in the code and choose a new password\\\"></h1>\\n\\n          <fast-stack style=\\\"max-width: 400px; margin-top: 32px;\\\">\\n            <p>\\n              <label t=\\\"login.We sent you a code to the mobile number {{ mobile }} it can take several minutes to arrive\\\" if.bind=\\\"loginWith === 'mobile'\\\" t-params.bind=\\\"{mobile: mobile}\\\"></label>\\n              <label t=\\\"login.We sent you a code to the email {{ email }} it can take several minutes to arrive\\\" if.bind=\\\"loginWith === 'email'\\\" t-params.bind=\\\"{email: email}\\\"></label>\\n            </p>\\n            <p if.bind=\\\"true\\\">\\n              <fast-text-field-login value.bind=\\\"resetPasswordCode\\\" placeholder=\\\"1234\\\" change.trigger=\\\"resetPasswordCodeChanged()\\\" keyup.trigger=\\\"resetPasswordCodeChanged()\\\" style=\\\"width: 100%;\\\" autocomplete=\\\"one-time-code\\\" ignore-dico >\\n                <fast-icon slot=\\\"start\\\" icon=\\\"Key\\\"></fast-icon>\\n              </fast-text-field-login>\\n            </p>\\n            <p>\\n              <label t=\\\"login.Choose a new password\\\"></label>\\n            </p>\\n            <p if.bind=\\\"true\\\">\\n              <fast-text-field-login type=\\\"password\\\" value.bind=\\\"password\\\" placeholder=\\\"****\\\" change.trigger=\\\"passwordChanged()\\\" keyup.trigger=\\\"passwordChanged()\\\" style=\\\"width: 100%;\\\" autocomplete=\\\"new-password\\\" ignore-dico >\\n                <fast-icon slot=\\\"start\\\" icon=\\\"Key\\\"></fast-icon>\\n              </fast-text-field-login>\\n            </p>\\n\\n            <p style=\\\"display: grid; grid-template-columns: 1fr min-content;\\\">\\n              <fast-button appearance=\\\"lightweight\\\" style=\\\"justify-self: start;\\\" click.trigger=\\\"backToLogin()\\\" t=\\\"login.Back to login\\\"></fast-button>\\n              <fast-button disabled.bind=\\\"loading || !isPasswordValid || !isResetPasswordCodeValid\\\" appearance=\\\"accent\\\" type=\\\"submit\\\">\\n                <fast-progress-ring slot=\\\"start\\\" show.bind=\\\"loading\\\"></fast-progress-ring>\\n                <span t=\\\"login.Change my password\\\"></span>\\n              </fast-button>\\n            </p>\\n\\n          </fast-stack>\\n        </fast-stack>\\n\\n      </form>\\n    </fast-next-item>\\n\\n  </fast-next>\\n\\n</template>\\n\";","import { Global } from '../global';\nimport { inject } from 'aurelia-framework';\nimport { UxModalService } from '@aurelia-ux/modal';\n\n@inject(Global, UxModalService)\nexport class Menu {\n  public constructor(private global: Global, private modalService: UxModalService) {\n\n  }\n\n  public logout(): void {\n    this.modalService.cancel();\n    this.global.logout();\n  }\n\n  public gotoRoute(route, params?, replace = false): void {\n    this.modalService.cancel();\n    this.global.navigateToRoute(route, params, {replace});\n  }\n\n\n}\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\", \"\"]);\n// Exports\nmodule.exports = exports;\n","module.exports = \"<template>\\n  <require from=\\\"./menu.css\\\"></require>\\n  <fast-card separator fill-color=\\\"#f5f5f5\\\" class=\\\"mobile-full-bleed menu\\\" nocontain>\\n    <fast-card-row style=\\\"padding-top: 4px; padding-bottom: 4px; background-color: #ffffff; text-align: right;\\\">\\n      <label  t=\\\"Menu\\\"></label>\\n      <fast-button style=\\\"padding: 0 4px 0 8px;\\\" appearance=\\\"lightweight\\\" neutral hover-fill dismiss-modal><span t=\\\"Close\\\"></span><fast-icon icon=\\\"X\\\" slot=\\\"end\\\"></fast-icon>\\n      </fast-button>\\n    </fast-card-row>\\n    <fast-content>\\n      <fast-stack large>\\n        <fast-menu style=\\\"width: 100%; max-width: none;\\\" separated>\\n          <fast-menu-item click.trigger=\\\"gotoRoute('qr')\\\">\\n            <fast-icon icon=\\\"Qrcode\\\" slot=\\\"start\\\"></fast-icon>\\n            Read QR code\\n            <fast-icon icon=\\\"ChevronRight\\\" slot=\\\"end\\\"></fast-icon>\\n          </fast-menu-item>\\n        </fast-menu>\\n        <div>\\n          <fast-stack small>\\n            <p><label  t=\\\"profile.My Profile\\\"></label></p>\\n            <fast-menu style=\\\"width: 100%; max-width: none;\\\" separated>\\n              <fast-menu-item if.bind=\\\"global.hasUserRole || global.hasAdminRole\\\" click.delegate=\\\"gotoRoute('manager')\\\">\\n                <fast-icon icon=\\\"Adjustments\\\" slot=\\\"start\\\"></fast-icon><span t=\\\"menu.QR Manager\\\"></span>\\n                <fast-icon icon=\\\"ChevronRight\\\" slot=\\\"end\\\"></fast-icon></fast-menu-item>\\n              <fast-menu-item if.bind=\\\"global.state.swissdata.authenticated\\\" click.trigger=\\\"gotoRoute('account', {na: 'main'}, true)\\\">\\n                <fast-icon icon=\\\"User\\\" slot=\\\"start\\\"></fast-icon>\\n                <span t=\\\"profile.My Account\\\"></span>\\n                <fast-icon icon=\\\"ChevronRight\\\" slot=\\\"end\\\"></fast-icon>\\n              </fast-menu-item>\\n              <fast-menu-item if.bind=\\\"!global.state.swissdata.authenticated\\\" click.trigger=\\\"gotoRoute('login')\\\">\\n                <fast-icon icon=\\\"User\\\" slot=\\\"start\\\"></fast-icon>\\n                Se connecter\\n                <fast-icon icon=\\\"ChevronRight\\\" slot=\\\"end\\\"></fast-icon>\\n              </fast-menu-item>\\n              <fast-menu-item if.bind=\\\"global.state.swissdata.authenticated\\\" click.trigger=\\\"logout()\\\">\\n                <fast-icon icon=\\\"Logout\\\" slot=\\\"start\\\"></fast-icon><span t=\\\"Logout\\\"></span>\\n                <fast-icon icon=\\\"ChevronRight\\\" slot=\\\"end\\\"></fast-icon></fast-menu-item>\\n            </fast-menu>\\n          </fast-stack>\\n        </div>\\n      </fast-stack>\\n    </fast-content>\\n  </fast-card>\\n</template>\\n\";","import { bindingMode, bindable, customElement } from 'aurelia-framework';\nimport { Global } from '../global';\nimport jsQR, { QRCode } from 'jsqr'\nimport { Point } from 'jsqr/dist/locator'\n\n@customElement('qr-code-reader')\nexport class QrCodeReader {\n  @bindable({ defaultBindingMode: bindingMode.twoWay }) public codedata: string;\n  @bindable public validate: (params: IValidateParams) => Promise<boolean>;\n  private startScanning: boolean = false;\n  public hasVideoAccess: boolean = true;\n  public hasQrCodeFound: boolean = false;\n  public qrValid: boolean = false;\n  private canvasElement: HTMLCanvasElement;\n  private canvasContext: CanvasRenderingContext2D | null;\n  private video: HTMLVideoElement;\n  private reqAnim: any;\n  private lastCodeData: string = undefined;\n\n  constructor(public global: Global) {\n\n  }\n  \n  public async attached () {\n    this.initQrReader()\n  }\n  public async detached () {\n      this.disableCamera()\n  }\n\n  public startQrReader() {\n    this.startScanningUpdate(true);\n  }\n  public StopQrReader() {\n    this.startScanningUpdate(false);\n  }\n  \n  startScanningUpdate(newValue) {\n    if (newValue) { \n      this.startScanning = true;\n      this.reqAnim = requestAnimationFrame(this.drawVideoFrame.bind(this));\n    } else {\n      this.startScanning = false;\n      window.cancelAnimationFrame(this.reqAnim);\n    }\n  }\n\n  private initQrReader () {\n    this.hasVideoAccess = true\n    this.hasQrCodeFound = false\n    this.canvasElement = document.getElementById('qr-reader-canvas') as HTMLCanvasElement\n    this.canvasContext = this.canvasElement.getContext('2d')\n    if (this.canvasContext && navigator.mediaDevices) {\n      this.video = document.createElement('video')\n      navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment' } })\n        .then(async (stream: MediaStream) => {\n          this.video.srcObject = stream\n          // no full screen for iOS\n          this.video.setAttribute('playsinline', 'true')\n          await this.video.play()\n          this.video.playbackRate = 0.5\n          this.reqAnim = requestAnimationFrame(this.drawVideoFrame.bind(this))\n        }).catch(async () => {\n          this.hasVideoAccess = false\n        })\n    } else {\n      this.hasVideoAccess = false\n    }\n  }\n  private drawLine (begin: Point, end: Point, color: string): void {\n    if (this.canvasContext) {\n      this.canvasContext.beginPath()\n      this.canvasContext.moveTo(begin.x, begin.y)\n      this.canvasContext.lineTo(end.x, end.y)\n      this.canvasContext.lineWidth = 3\n      this.canvasContext.strokeStyle = color\n      this.canvasContext.stroke()\n    }\n  }\n  private drawVideoFrame (): void {\n    if (!this.canvasContext) {\n      // we can't draw video frame\n      return\n    }\n    if (this.video.readyState === this.video.HAVE_ENOUGH_DATA) {\n      // draw video frame from camera and mark found QR code in frame\n      this.canvasElement.height = this.video.videoHeight\n      this.canvasElement.width = this.video.videoWidth\n      this.canvasContext.drawImage(this.video, 0, 0, this.canvasElement.width, this.canvasElement.height)\n      const imageData: ImageData = this.canvasContext.getImageData(0, 0,\n        this.canvasElement.width, this.canvasElement.height)\n      const code: QRCode | null = jsQR(imageData.data, imageData.width, imageData.height)\n      if (code) {\n        if (this.lastCodeData != code.data) { // check if already scanned\n          // draw rectangle around found code in video frame\n          const color = this.qrValid ? '#409e26' : '#FF3B58'\n          this.drawLine(code.location.topLeftCorner, code.location.topRightCorner, color)\n          this.drawLine(code.location.topRightCorner, code.location.bottomRightCorner, color)\n          this.drawLine(code.location.bottomRightCorner, code.location.bottomLeftCorner, color)\n          this.drawLine(code.location.bottomLeftCorner, code.location.topLeftCorner, color)\n          // QR code found\n          this.codedata = code.data;\n          this.lastCodeData = code.data;\n          this.hasQrCodeFound = true;\n          this.validate({ data: this.codedata }).then(async (result: boolean) => {\n              this.qrValid = result\n              this.startScanning = false;\n              // this.qrValid = true;\n          }).catch(() => undefined)\n            // if (this.codedata){\n            //   this.qrValid = true;\n            // }\n        } else {\n          setTimeout(() => {\n            this.lastCodeData = undefined;\n            // this.codedata = '';\n          }, 10000);\n        }\n      } else {\n        // no QR code found\n        this.hasQrCodeFound = false\n        this.codedata = ''\n      }\n    }\n\n    if (this.startScanning) {\n      setTimeout(() => {\n        console.log('qrDataChanged');\n        this.reqAnim = requestAnimationFrame(this.drawVideoFrame.bind(this))\n      }, 50);\n    }\n\n  }\n\n  disableCamera() {\n    if (this.video) {\n      window.cancelAnimationFrame(this.reqAnim);\n      this.video.pause()\n      this.video.src = ''\n      const stream = this.video.srcObject as any;\n      const tracks = stream.getTracks();\n      tracks.forEach(function(track) {\n      track.stop();\n      });\n      this.video.srcObject = null;\n    }\n  }\n\n}\n\ninterface IValidateParams {\n  data: string\n}\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.qr-reader-canvas {\\n    width: 100%;\\n  }\\n\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","module.exports = \"<template >\\n  <require from=\\\"./qr-code-reader.css\\\"></require>\\n  <div>\\n    <div id=\\\"qr-error-message\\\" class=\\\"section info-box warning\\\"  if.bind=\\\"!hasVideoAccess\\\">\\n      <i class=\\\"material-icons icon\\\">warning</i>\\n      No access to video stream! (Please make shure that the camera is working)\\n    </div>\\n    <canvas class=\\\"qr-reader-canvas\\\" id=\\\"qr-reader-canvas\\\" if.bind=\\\"hasVideoAccess\\\"></canvas>\\n    <div id=\\\"qr-reader-output\\\" if.bind=\\\"hasVideoAccess\\\">\\n      <span class=\\\"info-text\\\" if.bind=\\\"qrValid\\\">Found valid URL from QR code. <small>${codedata}</small></span>\\n      <span class=\\\"info-text\\\" else>No valid URL found.</span>\\n      <p if.bind=\\\"false\\\">\\n        <fast-button appearance.bind=\\\"neutral\\\" click.trigger=\\\"startQrReader()\\\">\\n          <span t=\\\"cmu.Activate QR scanning\\\"></span>\\n        </fast-button>\\n      </p>\\n    </div>\\n  </div>\\n</template>\\n\";","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"/* USER PREVIEW */\\n.user-preview ux-icon {\\n  color: var(--aurelia-ux--design-primary);\\n}\\nux-icon.user-icon {\\n  background: var(--aurelia-ux--design-primary);\\n  color: var(--aurelia-ux--design-primary-foreground);\\n  border-radius: 100%;\\n  --aurelia-ux--icon-size: 32px;\\n  display: inline-flex;\\n  align-items: center;\\n  justify-content: center;\\n}\\nux-icon.user-icon > svg {\\n  --aurelia-ux--icon-size: 24px;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","module.exports = \"<template bindable=\\\"name,title\\\">\\n  <require from=\\\"./user-preview.css\\\"></require>\\n  <ux-list style=\\\"max-width: 300px;margin:auto;\\\" class=\\\"user-preview\\\">\\n    <ux-list-item>\\n      <div class=\\\"ux-list-item__detail\\\">\\n        <ux-icon icon=\\\"person\\\" class=\\\"user-icon\\\"></ux-icon>\\n      </div>\\n      <div class=\\\"ux-list-item__content\\\">\\n        ${name}\\n        <div class=\\\"ux-list-item__secondary-content\\\">\\n          ${title}\\n        </div>\\n      </div>\\n      <div class=\\\"ux-list-item__action-item\\\">\\n        <ux-icon icon=\\\"keyboard_arrow_down\\\"></ux-icon>\\n      </div>\\n    </ux-list-item>\\n  </ux-list>\\n</template>\\n\";","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var settings = {\n  title: 'CMU-FM',\n  description: 'Project description',\n  keywords: \"Project keywords\",\n  author: \"Project Author\",\n  stateVersion: '2.0',\n  stateLog: {\n    dispatchedActions: 'debug',\n    performanceLog: 'debug',\n    devToolsStatus: 'debug'\n  },\n  language: 'fr',\n  languages: ['fr'],\n  country: 'CH',\n  countries: ['CH'],\n  stateStorageKey: 'cmu-fm-state',\n  defaultRoutes: {\n    unauthenticated: 'login',\n    authenticated: 'home'\n  },\n  three: {\n    canvasBackground: 'linear-gradient(#8A8A8A,#FFFFFF,#FFFFFF,#8A8A8A)'\n    //                'linear-gradient(#8bd5e3,#FFFFFF,#FFFFFF,#8A8A8A)'\n  },\n  fast: {\n    designTokens: {\n      fillColor: '#303030', // background\n      accentPalette: '#00c8cb', // primary\n      controlCornerRadius: 8, // Corner Radius\n      baseLayerLuminance: 0, // Dark mode = 0\n    },\n  },\n  ux: {\n    design: {\n      primary: '#00c8cb',\n      primaryForeground: '#fff',\n      accent:  '#4CB8D4',\n      accentForeground: '#fff',\n\n      primaryLight: '#7BE0DD',\n      primaryLightForeground: '#000',\n      primaryDark: '#00989B',\n      primaryDarkForeground: '#fff',\n\n      accentLight: '#8bd5e3',\n      accentLightForeground: '#000',\n      accentDark: '#258CB1',\n      accentDarkForeground: '#fff',\n\n      appBackground: '#fff',\n      appForeground: '#000',\n\n      surfaceBackground: '#FFFFFF',\n      surfaceForeground: '212121',\n\n      disabledBackground: '#EFEFEF',\n      disabledForeground: '#BBBBBB',\n      error: '#F44336',\n      errorForeground: '#FFFFFF'\n\n    }\n  }\n};\n\n// auto detection of locale\nif (typeof window !== `undefined`) {\n  var userLang = navigator.language || navigator.userLanguage; \n  var userLang = navigator.language || navigator.userLanguage; \n  for (var index in settings.languages) {\n    var language = settings.languages[index];\n    if (userLang.substr(0, 2) === language) {\n      settings.language = language;\n      break;\n    }  \n  }\n}\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.settings = settings;\nexports.default = settings;\n\n","import { Aurelia, Container } from 'aurelia-framework'\nimport { PLATFORM } from 'aurelia-pal';\nimport { initialState } from 'state';\nimport { settings} from 'settings';\nimport * as environment from '../../config/environment.json';\nimport { i18nSetup } from 'aurelia-deco';\n// import * as icons from '@aurelia-ux/icons/sets/full.json';\n\nconst version = environment.version ? Object.values(environment.version).join('') : '';\n\nContainer.instance.registerInstance('sd-settings', settings);\n\nexport function registerCorePlugins(aurelia: Aurelia) {\n  aurelia.use\n    .plugin(PLATFORM.moduleName('aurelia-validation'))\n    .plugin(PLATFORM.moduleName('aurelia-dialog'))\n    .plugin(PLATFORM.moduleName('aurelia-i18n'),  i18nSetup({\n      aurelia: aurelia as any, // we pass as any here because otherwise we get a TS error when running in SRC mode\n      host: environment.swissdata.host, \n      apiKey: environment.swissdata.apiKey, \n      translationMemoryApiKey: environment.swissdata.translationMemoryApiKey,\n      translationMemoryHost: environment.swissdata.translationMemoryHost,\n      defaultLanguage: settings.language\n    }))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/core'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/button'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/card'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/checkbox'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/chip-input'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/datepicker'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/form'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/grid'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/icons'), {icons: []})\n    .plugin(PLATFORM.moduleName('@aurelia-ux/input'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/input-info'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/list'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/lookup'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/modal'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/positioning'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/radio'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/select'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/slider'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/switch'))\n    .plugin(PLATFORM.moduleName('@aurelia-ux/textarea'))\n    .plugin(PLATFORM.moduleName('aurelia-notify'))\n    .plugin(PLATFORM.moduleName('aurelia-store'), {\n      initialState: initialState,\n      logDispatchedActions: settings.stateLog.dispatchedActions,\n      logPerformanceLog: settings.stateLog.performanceLog,\n      logDevToolsStatus: settings.stateLog.devToolsStatus,\n      logDefinitions: {\n        dispatchedActions: settings.stateLog.dispatchedActions,\n        performanceLog: settings.stateLog.performanceLog,\n        devToolsStatus: settings.stateLog.devToolsStatus\n      }\n    })\n\n    .plugin(PLATFORM.moduleName('bcx-aurelia-reorderable-repeat'))\n    .plugin(PLATFORM.moduleName('aurelia-ui-virtualization'))\n    .plugin(PLATFORM.moduleName('aurelia-resources'), {stripe: {apiKey: environment.stripe.apiKey}})\n    .plugin(PLATFORM.moduleName('aurelia-deco'), {\n      api: {\n        ipStack: {apiKey: environment.ipstack.apiKey},\n        version,\n        host: environment.swissdata.host,\n        publicKey: environment.swissdata.apiKey\n      },\n      registerMissingTranslationKeys: true\n    })\n    .feature(PLATFORM.moduleName('components/index'));\n}\n","import { TextField, textFieldStyles } from '@microsoft/fast-components';\nimport { attr } from '@microsoft/fast-element';\nimport { textFieldTemplate as template } from './template';\n\nexport class TextFieldLogin extends TextField {\n\n  @attr() public autocomplete = '';\n  @attr() public name = '';\n\n}\n\nexport const fastTextFieldLogin = TextField.compose({\n  baseName: 'text-field-login',\n  template,\n  styles: textFieldStyles,\n  shadowOptions: null\n});\n","import { html, ref, slotted } from \"@microsoft/fast-element\";\nimport type { ViewTemplate } from \"@microsoft/fast-element\";\nimport { endSlotTemplate, startSlotTemplate } from \"@microsoft/fast-foundation\";\nimport { whitespaceFilter, ElementDefinitionContext, TextFieldOptions } from \"@microsoft/fast-foundation\";\nimport { TextFieldLogin } from './index';\n\n/**\n * The template for the {@link @microsoft/fast-foundation#(TextFieldLogin:class)} component.\n * @public\n */\nexport const textFieldTemplate: (\n    context: ElementDefinitionContext,\n    definition: TextFieldOptions\n) => ViewTemplate<TextFieldLogin> = (\n    context: ElementDefinitionContext,\n    definition: TextFieldOptions\n) => html`\n    <template\n        class=\"\n            ${x => (x.readOnly ? \"readonly\" : \"\")}\n        \"\n    >\n        <label\n            part=\"label\"\n            for=\"control\"\n            class=\"${x =>\n                x.defaultSlottedNodes && x.defaultSlottedNodes.length\n                    ? \"label\"\n                    : \"label label__hidden\"}\"\n        >\n            <slot\n                ${slotted({ property: \"defaultSlottedNodes\", filter: whitespaceFilter })}\n            ></slot>\n        </label>\n        <div class=\"root\" part=\"root\">\n            ${startSlotTemplate(context, definition)}\n            <input\n                class=\"control test\"\n                part=\"control\"\n                id=\"control\"\n                @input=\"${x => x.handleTextInput()}\"\n                @change=\"${x => x.handleChange()}\"\n                autocomplete=\"${x => x.autocomplete}\"\n                name=\"${x => x.name}\"\n                ?autofocus=\"${x => x.autofocus}\"\n                ?disabled=\"${x => x.disabled}\"\n                list=\"${x => x.list}\"\n                maxlength=\"${x => x.maxlength}\"\n                minlength=\"${x => x.minlength}\"\n                pattern=\"${x => x.pattern}\"\n                placeholder=\"${x => x.placeholder}\"\n                ?readonly=\"${x => x.readOnly}\"\n                ?required=\"${x => x.required}\"\n                size=\"${x => x.size}\"\n                ?spellcheck=\"${x => x.spellcheck}\"\n                :value=\"${x => x.value}\"\n                type=\"${x => x.type}\"\n                aria-atomic=\"${x => x.ariaAtomic}\"\n                aria-busy=\"${x => x.ariaBusy}\"\n                aria-controls=\"${x => x.ariaControls}\"\n                aria-current=\"${x => x.ariaCurrent}\"\n                aria-describedby=\"${x => x.ariaDescribedby}\"\n                aria-details=\"${x => x.ariaDetails}\"\n                aria-disabled=\"${x => x.ariaDisabled}\"\n                aria-errormessage=\"${x => x.ariaErrormessage}\"\n                aria-flowto=\"${x => x.ariaFlowto}\"\n                aria-haspopup=\"${x => x.ariaHaspopup}\"\n                aria-hidden=\"${x => x.ariaHidden}\"\n                aria-invalid=\"${x => x.ariaInvalid}\"\n                aria-keyshortcuts=\"${x => x.ariaKeyshortcuts}\"\n                aria-label=\"${x => x.ariaLabel}\"\n                aria-labelledby=\"${x => x.ariaLabelledby}\"\n                aria-live=\"${x => x.ariaLive}\"\n                aria-owns=\"${x => x.ariaOwns}\"\n                aria-relevant=\"${x => x.ariaRelevant}\"\n                aria-roledescription=\"${x => x.ariaRoledescription}\"\n                ${ref(\"control\")}\n            />\n            ${endSlotTemplate(context, definition)}\n        </div>\n    </template>\n`;\n","import { Dialog, Button, ElementDefinitionContext } from \"@microsoft/fast-foundation\";\nimport { css  } from \"@microsoft/fast-element\";\nimport { designUnit, accentFillFocus, accentFillHover, foregroundOnAccentFocus, foregroundOnAccentHover, neutralForegroundRest, neutralLayerFloating, neutralStrokeRest, strokeWidth, typeRampBaseFontSize, typeRampPlus2FontSize } from \"@microsoft/fast-components\";\n\nexport const dialogStyles = (context: ElementDefinitionContext) => {\n  const dialogTag = context.tagFor(Dialog);\n  const buttonTag = context.tagFor(Button);\n\n  return css`\n\n      :host {\n        --spacing-unit: calc(${designUnit} * 2);\n        --spacing-unit-lg: calc(var(--spacing-unit) * 2);\n      }\n\n      ${dialogTag} {\n        --dialog-width: auto;\n        --dialog-height: auto;\n      }\n\n      ${dialogTag}[prompt]::part(control) {\n        max-width: 500px;\n      }\n\n      ${dialogTag}::part(control) {\n        min-width: 300px;\n        background: ${neutralLayerFloating};\n        color: ${neutralForegroundRest};\n        font-size: ${typeRampBaseFontSize};\n      }\n      \n      ${dialogTag} .dialog-head {\n        display: grid;\n        grid-gap: calc(var(--spacing-unit-lg) * 1px);\n        grid-template-columns: 1fr min-content;\n        align-items: center;\n        padding: 0 calc(var(--spacing-unit) * 1px);\n        font-size: ${typeRampPlus2FontSize};\n        border-bottom: calc(${strokeWidth} * 1px) ${neutralStrokeRest} solid;\n        padding: calc(var(--spacing-unit) * 1px) calc(var(--spacing-unit) * 2px);\n      }\n\n      ${dialogTag} .dialog-head ${buttonTag} {\n        width: 40px;\n        height: 40px;\n      }\n      /*\n      */\n      ${dialogTag} .dialog-head ${buttonTag}::part(control) {\n        padding: 0;\n      }\n      ${dialogTag} .dialog-head ${buttonTag}::part(content) {\n        display: flex;\n      }\n      ${dialogTag} .dialog-head ${buttonTag}::part(content)::before {\n        background: transparent;\n      }\n      ${dialogTag} .dialog-head ${buttonTag}:hover {\n        background: ${accentFillHover};\n        color: ${foregroundOnAccentHover};\n      }\n      ${dialogTag} .dialog-head ${buttonTag}:focus {\n        background: ${accentFillFocus};\n        color: ${foregroundOnAccentFocus};\n      }\n      \n      ${dialogTag} .dialog-foot {\n        display: grid;\n        grid-gap: calc(var(--spacing-unit-lg) * 1px);\n        grid-template-columns: 1fr min-content;\n        align-items: center;\n        padding: calc(var(--spacing-unit) * 1px) calc(var(--spacing-unit) * 2px);\n        border-top: calc(${strokeWidth} * 1px) ${neutralStrokeRest} solid;\n      }\n      \n      ${dialogTag} .dialog-foot > * {\n        gap: calc(var(--spacing-unit) * 1px);\n      }\n      \n      ${dialogTag} .dialog-content {\n        padding: calc(var(--spacing-unit) * 3px) calc(var(--spacing-unit) * 2px);\n        max-height: calc(100vh - 200px);\n        overflow-y: auto;\n      }\n\n  `;\n}\n","import { FoundationElement, Dialog, Button, ElementDefinitionContext, FoundationElementDefinition, DesignSystem } from \"@microsoft/fast-foundation\";\nimport { html, when  } from \"@microsoft/fast-element\";\nimport { attr } from \"@microsoft/fast-element\";\n\n// Extend the configuration with custom properties\nexport interface BaseDialogDefinition extends FoundationElementDefinition {\n  defaultTitleContent?: string;\n  defaultOKButtonText?: string;\n  defaultCancelButtonText?: string;\n}\n\nexport const dialogHeadTemplate = (context: ElementDefinitionContext, definition: BaseDialogDefinition) => {\n  // const dialogTag = context.tagFor(Dialog);\n  const buttonTag = context.tagFor(Button);\n\n  return html<BaseDialog>`\n    ${when(x => x.title?.length > 0, html<BaseDialog>`\n      <div class=\"dialog-head\" part=\"dialog-head\">\n        <slot name=\"title\">${x => x.title || definition.defaultTitleContent}</slot>\n        <${buttonTag} appearance=\"lightweight\" @click=\"${x => x.cancel()}\" tabindex=\"3\">\n          <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\n          </svg>\n        </${buttonTag}>\n      </div>\n    `)}\n  `;\n};\n\nexport const dialogFootTemplate = (context: ElementDefinitionContext, definition: BaseDialogDefinition) => {\n  const dialogTag = context.tagFor(Dialog);\n  const buttonTag = context.tagFor(Button);\n\n  return html<BaseDialog>`\n    <div class=\"dialog-foot\" part=\"dialog-foot\">\n      <span>\n        <${buttonTag} tabindex=\"2\" appearance=\"lightweight\" @click=\"${x => x.cancel()}\">${x => x.cancelButtonText || definition.defaultCancelButtonText}</${buttonTag}>\n      </span>\n      <span>\n        <${buttonTag} tabindex=\"1\" appearance=\"accent\" @click=\"${x => x.ok()}\">${x => x.okButtonText || definition.defaultOKButtonText}</${buttonTag}>\n      </span>\n    </div>\n  `;\n}\n\nexport interface BaseOptions<T = any> {\n  title?: string;\n  okButtonText?: string;\n  cancelButtonText?: string;\n  dismissable?: boolean;\n  initialValue?: T;\n}\n\nexport interface BaseDialogResponse<T = any> {\n  wasDismissed: boolean;\n  value?: T;\n}\n\nexport class BaseDialog extends FoundationElement {\n\n  public currentValue: any;\n\n  protected static renderBaseModal<T extends BaseDialog = BaseDialog, R = any>(options?: BaseOptions<R>): {dialogElement: T, promise: Promise<BaseDialogResponse<R>>} {\n    const dialogTag = DesignSystem.tagFor(this);\n    const dialogElement = document.createElement(dialogTag) as T;\n    const promise = new Promise<BaseDialogResponse<R>>((resolve) => {\n\n      if (options.initialValue) {\n        dialogElement.currentValue = options.initialValue;\n      }\n\n      if (options?.title) {\n        dialogElement.title = options.title;\n      }\n\n      if (options?.okButtonText) {\n        dialogElement.okButtonText = options.okButtonText;\n      }\n\n      if (options?.cancelButtonText) {\n        dialogElement.cancelButtonText = options.cancelButtonText;\n      }\n\n      if (typeof options?.dismissable === 'boolean') {\n        dialogElement.dismissable = options.dismissable;\n      }\n\n      dialogElement.addEventListener('ok', (event: CustomEvent) => {\n        dialogElement.remove();\n        resolve({\n          wasDismissed: false,\n          value: dialogElement.currentValue\n        });\n      }, {once: true});\n\n      dialogElement.addEventListener('cancel', () => {\n        dialogElement.remove();\n        resolve({\n          wasDismissed: true,\n          value: undefined\n        });\n      }, {once: true});\n\n      if (options.dismissable) {\n        dialogElement.addEventListener('dismiss', () => {\n          dialogElement.remove();\n          resolve({\n            wasDismissed: true,\n            value: undefined\n          });\n        }, {once: true});\n      }\n      document.body.appendChild(dialogElement);\n    });\n    return {\n      dialogElement,\n      promise\n    };\n  }\n\n  @attr({ mode: \"boolean\" })\n  public dismissable = false;\n\n  @attr\n  public title = '';\n\n  @attr\n  public okButtonText = '';\n\n  @attr\n  public cancelButtonText = '';\n\n  public cancel(): void {\n    this.$emit('cancel', undefined, {bubbles: false});\n  }\n\n  public ok(): void {\n    this.$emit('ok', true, {bubbles: false});\n  }\n  \n}\n","import { Dialog, ElementDefinitionContext } from \"@microsoft/fast-foundation\";\nimport { html, when  } from \"@microsoft/fast-element\";\nimport { attr } from \"@microsoft/fast-element\";\nimport { dialogStyles } from './dialog-styles';\nimport { dialogHeadTemplate, dialogFootTemplate, BaseDialog, BaseOptions, BaseDialogDefinition, BaseDialogResponse } from './base'; \n\n// Extend the configuration with custom properties\ninterface ConfirmDialogDefinition extends BaseDialogDefinition {\n  defaultTextContent?: string;\n}\n\nconst confirmDialogTemplate = (context: ElementDefinitionContext, definition: ConfirmDialogDefinition) => {\n  const dialogTag = context.tagFor(Dialog);\n\n  return html<ConfirmDialog>`\n    <${dialogTag} prompt>\n      ${dialogHeadTemplate(context, definition)}\n      ${when(x => x.text?.length > 0 || definition.defaultTextContent?.length > 0, html<ConfirmDialog>`\n        <div class=\"dialog-content\" part=\"dialog-content\">\n          <slot name=\"text\">${x => x.text || definition.defaultTextContent}</slot>\n        </div>\n      `)}\n      ${dialogFootTemplate(context, definition)}\n    </${dialogTag}>\n  `;\n}\n\ninterface ConfirmOptions extends BaseOptions<boolean> {\n  text?: string;\n}\n\nexport class ConfirmDialog extends BaseDialog {\n\n  public static async renderModal(options: ConfirmOptions): Promise<BaseDialogResponse<boolean>> {\n    options.initialValue = true;\n    const { dialogElement, promise } = this.renderBaseModal<ConfirmDialog, boolean>(options);\n    if (options.text) {\n      dialogElement.text = options.text;\n    }\n    return promise;\n  }\n\n  @attr\n  public text = '';\n  \n}\n\nexport const confirmDialog = ConfirmDialog.compose<ConfirmDialogDefinition>({\n  baseName: 'confirm-dialog',\n  template: confirmDialogTemplate,\n  styles: dialogStyles,\n  defaultTitleContent: \"Confirm\",\n  defaultTextContent: \"\",\n  defaultOKButtonText: \"OK\",\n  defaultCancelButtonText: \"Cancel\"\n});\n","import { Dialog, Menu, MenuItem, ElementDefinitionContext } from \"@microsoft/fast-foundation\";\nimport { html, repeat, css  } from \"@microsoft/fast-element\";\nimport { attr, when } from \"@microsoft/fast-element\";\nimport { dialogStyles } from './dialog-styles';\nimport { dialogHeadTemplate, dialogFootTemplate, BaseDialog, BaseOptions, BaseDialogDefinition, BaseDialogResponse } from './base'; \n\n// Extend the configuration with custom properties\ninterface SelectDialogDefinition extends BaseDialogDefinition {\n\n}\n\nconst selectDialogStyles = (ctx: ElementDefinitionContext) => css`\n  ${dialogStyles(ctx)}\n  :host .dialog-content {\n    padding: 0;\n  }\n`;\n\nconst selectDialogTemplate = (context: ElementDefinitionContext, definition: SelectDialogDefinition) => {\n  const dialogTag = context.tagFor(Dialog);\n  const menuTag = context.tagFor(Menu);\n  const menuItemTag = context.tagFor(MenuItem);\n\n  return html<SelectDialog>`\n    <${dialogTag} prompt>\n      ${dialogHeadTemplate(context, definition)}\n      <div class=\"dialog-content\" part=\"dialog-content\">\n        <${menuTag}>\n          ${repeat((x) => x.options, html<SelectOption, SelectDialog>`\n            <${menuItemTag} @click=\"${(x, c) => c.parent.toggleOption(x)}\" class=\"${(x, c) => x.value === c.parent.currentValue ? 'expanded' : ''}\">\n              ${x => x.label}\n            </${menuItemTag}>\n          `)}\n        </${menuTag}>\n      </div>\n\n      ${dialogFootTemplate(context, definition)}\n    </${dialogTag} prompt>\n  `;\n}\n\ninterface SelectOptions extends BaseOptions<string> {\n  options: SelectOption[];\n  autoclose?: boolean;\n}\n\nexport interface SelectOption {\n  value: string;\n  label: string;\n}\n\nexport class SelectDialog extends BaseDialog {\n\n  public static async renderModal(options: SelectOptions): Promise<BaseDialogResponse<string>> {\n    const {dialogElement, promise} = this.renderBaseModal<SelectDialog, string>(options);\n    dialogElement.options.splice(0, dialogElement.options.length);\n    dialogElement.options.push(...options.options);\n    \n    if (typeof options?.autoclose === 'boolean') {\n      dialogElement.autoclose = options.autoclose;\n    }\n    return promise;\n  }\n\n  @attr({ mode: \"boolean\" })\n  public autoclose = true;\n\n  public currentValue: string = '';\n  public options: SelectOption[] = [];\n\n  public toggleOption(option: SelectOption): void {\n    if (option.value === this.currentValue) {\n      // the lines below are a way to update the item in the options list\n      // and letting fast template know that the item has changed\n      const index = this.options.findIndex(o => o.value === option.value);\n      if (index !== -1) {\n        this.options.splice(index, 1, {value: option.value, label: option.label});\n      }\n      \n      this.currentValue = '';\n    } else {\n      this.currentValue = option.value;\n    }\n    if (this.currentValue && this.autoclose) {\n      this.ok();\n    }\n  }\n\n}\n\nexport const selectDialog = SelectDialog.compose<SelectDialogDefinition>({\n  baseName: 'select-dialog',\n  template: selectDialogTemplate,\n  styles: selectDialogStyles,\n  defaultTitleContent: \"Select\",\n  defaultOKButtonText: \"OK\",\n  defaultCancelButtonText: \"Cancel\"\n});\n","import { Dialog, Menu, MenuItem, ElementDefinitionContext, TextField } from \"@microsoft/fast-foundation\";\nimport { html, repeat, css  } from \"@microsoft/fast-element\";\nimport { attr, ref } from \"@microsoft/fast-element\";\nimport { dialogStyles } from './dialog-styles';\nimport { dialogHeadTemplate, dialogFootTemplate, BaseDialog, BaseOptions, BaseDialogDefinition, BaseDialogResponse } from './base'; \n\n// Extend the configuration with custom properties\ninterface PromptTextDialogDefinition extends BaseDialogDefinition {\n\n}\n\nconst promptTextDialogStyles = (ctx: ElementDefinitionContext) => {\n  const textFieldTag = ctx.tagFor(TextField);\n\n  return css`\n    ${dialogStyles(ctx)}\n    :host .dialog-content {\n      padding: 8px;\n    }\n\n    ${textFieldTag} {\n      width: 100%;\n    }\n  }`\n};\n\nconst promptTextDialogTemplate = (context: ElementDefinitionContext, definition: PromptTextDialogDefinition) => {\n  const dialogTag = context.tagFor(Dialog);\n  const textFieldTag = context.tagFor(TextField);\n\n  return html<PromptTextDialog>`\n    <${dialogTag} prompt>\n      ${dialogHeadTemplate(context, definition)}\n      <div class=\"dialog-content\" part=\"dialog-content\">\n        <${textFieldTag} :value=\"${x => x.currentValue}\" ${ref('textFieldInput')}></${textFieldTag}>\n      </div>\n\n      ${dialogFootTemplate(context, definition)}\n    </${dialogTag} prompt>\n  `;\n}\n\ninterface PromptTextOptions extends BaseOptions<string> {\n}\n\nexport class PromptTextDialog extends BaseDialog {\n\n  public static async renderModal(options: PromptTextOptions): Promise<BaseDialogResponse<string>> {\n    const {dialogElement, promise} = this.renderBaseModal<PromptTextDialog, string>(options);\n    return promise;\n  }\n\n  @attr({ mode: \"boolean\" })\n  public autoclose = true;\n\n  public currentValue: string = '';\n\n  public textFieldInput: TextField;\n\n  public ok(): void {\n    this.currentValue = this.textFieldInput.value;\n    this.$emit('ok', true, {bubbles: false});\n  }\n}\n\nexport const promptTextDialog = PromptTextDialog.compose<PromptTextDialogDefinition>({\n  baseName: 'prompt-text-dialog',\n  template: promptTextDialogTemplate,\n  styles: promptTextDialogStyles,\n  defaultTitleContent: \"\",\n  defaultOKButtonText: \"OK\",\n  defaultCancelButtonText: \"Cancel\"\n});\n","import { css } from '@microsoft/fast-element';\n\nexport const StackStyles = css`\n  :host {\n    display: block;\n    contain: style;\n    --stack-margin-top: calc(var(--type-ramp-base-font-size) + ((var(--design-unit) * 2 * max(0, var(--density))) * 1px));\n  }\n  :host([large]) {\n    --stack-margin-top: calc((var(--type-ramp-base-font-size) * 2) + ((var(--design-unit) * 2 * max(0, var(--density))) * 1px));\n  }\n  :host([small]) {\n    --stack-margin-top: calc((var(--type-ramp-base-font-size) * 0.5) + ((var(--design-unit) * 2 * max(0, var(--density))) * 1px));  \n  }\n`;","import { html, slotted } from '@microsoft/fast-element';\nimport { FastStack } from './index';\n\nexport const StackTemplate = html<FastStack>`\n<template>\n  <slot ${slotted('nodes')}></slot>\n</template>`;\n","import { customElement, FASTElement, observable } from '@microsoft/fast-element';\nimport { StackStyles as styles } from './styles';\nimport { StackTemplate as template } from './template';\nimport './stack-item.css';\n\n@customElement({\n  name: 'fast-stack',\n  template,\n  styles,\n  shadowOptions: {\n    mode: 'open'\n  }\n})\nexport class FastStack extends FASTElement {\n\n  @observable nodes: Node[];\n\n  public nodesChanged(): void {\n    let foundOne = false;\n    this.nodes.forEach((node) => {\n      if (node instanceof HTMLElement) {\n        if (foundOne) {\n          node.classList.add('stack-item');\n        }\n        foundOne = true;\n      }\n    });\n  }\n\n}\n","import { css } from '@microsoft/fast-element';\nimport { display } from \"@microsoft/fast-foundation\";\n\nexport const NextStyles = css`\n  ${display(\"grid\")}\n\n  :host {\n    display: grid;\n    grid-template-columns: 1fr;\n    overflow: hidden;\n  }\n\n  :host([fixed]) {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    display: block\n  }\n\n  ::slotted(.next-item) {\n    grid-row: 1;\n    grid-column: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  :host([fixed]) ::slotted(.next-item) {\n    display: block;\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n    z-index: 1;\n  }\n\n  ::slotted(.next-item.animate) {\n    -webkit-transition: transform var(--next-animation-duration, 400ms) var(--next-animation-leave-function, ease-in);\n    transition: transform var(--next-animation-duration, 400ms) var(--next-animation-leave-function, ease-in);\n  }\n  \n  ::slotted(.next-item.prev) {\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n  }\n  \n  ::slotted(.next-item.next) {\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n  }\n  \n  ::slotted(.next-item.animate.current) {\n    z-index: 2;\n    transition-timing-function: var(---next-animation-enter-function, ease-in)\n  }\n`.withBehaviors(\n  \n);","import { html, slotted } from '@microsoft/fast-element';\nimport { FastNext } from './index';\n\nexport const NextTemplate = html<FastNext>`\n<template>\n  <slot part=\"next-items\" ${slotted(\"items\")}></slot>\n</template>`;\n","import { customElement, FASTElement, attr, DOM, observable } from '@microsoft/fast-element';\nimport { NextStyles as styles } from './styles';\nimport { NextTemplate as template } from './template';\n\n/**\n * @internal\n * \n * All slotted items receive either the 'prev' or 'next' class\n * according to their position compared to the activeid\n * \n * The activeid has no class\n * \n * When an animation start, the next/prev/current are set\n * before to start animation by setting the animate class\n * \n * Once the animation is finished, the current class is removed\n * as the current item is now in position\n*/\n\n@customElement({\n  name: 'fast-next',\n  template,\n  styles\n})\nexport class FastNext extends FASTElement {\n\n  public connectedCallback(): void {\n    super.connectedCallback();\n    window.addEventListener('popstate', this);\n    this.pushStateIdChanged();\n  }\n\n  public disconnectedCallback(): void {\n    super.disconnectedCallback();\n    window.removeEventListener('popstate', this);\n  }\n\n  public handleEvent(event: PopStateEvent): void {\n    if (this.pushStateId && event.state?.fastNextId === this.pushStateId && event.state?.fastNextElementId) {\n      const lastOperation = this.previousOperations[this.previousOperations.length - 1];\n      if (lastOperation && event.state?.fastNextElementId === lastOperation?.id && event.state?.fastNextDirection === lastOperation?.direction) {\n        this.back(true);\n        return;\n      }\n      this.goToId(event.state?.fastNextElementId, event.state?.fastNextDirection === 'next' ? 'next' : 'prev', true);\n    }\n  }\n\n  @attr({attribute: 'push-state-id'})\n  public pushStateId = '';\n  public pushStateIdChanged(): void {\n    if (this.pushStateId) {\n      const url = new URL(location.href);\n      if (url.searchParams.get(this.pushStateId)) {\n        this.activeid = url.searchParams.get(this.pushStateId);\n        DOM.queueUpdate(() => {\n          this.ensureIdInUrl();\n        });\n      }\n    }\n  }\n\n  public hasHistory = false;\n\n  @attr\n  public autodetectback = true;\n\n  /**\n   * The id of the active item\n   *\n   * @public\n   * @remarks\n   * HTML Attribute: activeid\n   */\n  @attr\n  public activeid: string;\n\n  /**\n   * @internal\n   */\n  public activeidChanged(): void {\n    if (\n      this.$fastController.isConnected\n    ) {\n      if (this.activeitem) {\n        this.goToId(this.activeid);\n      }\n    }\n  }\n\n  /**\n   * @internal\n   */\n  @observable\n  public items: (HTMLElement | Node)[] = [];\n  /**\n   * @internal\n   */\n  public itemsChanged(): void {\n    if (this.$fastController.isConnected) {\n      this.setItems();\n    }\n  }\n  public nextItems: HTMLElement[] = [];\n\n  /**\n   * A reference to the active item\n   * @public\n   */\n  public activeitem: HTMLElement;\n\n  private activeIndex: number;\n  private itemIds: Array<string | null>;\n  private previousOperations: Array<{id: string, direction: 'prev' | 'next'}> = [];\n\n  private changing = (): void => {\n    this.$emit(\"changing\", this.activeitem);\n  };\n\n  private changed = (): void => {\n    this.$emit(\"changed\", this.activeitem);\n  };\n\n  private setItems(): void {\n    this.itemIds = [];\n    this.nextItems = [];\n    this.activeIndex = -1;\n    let nextIndex = 0;\n    this.items.forEach((item) => {\n      if (item instanceof HTMLElement) {\n        item.classList.add('next-item');\n        this.nextItems.push(item);\n        const itemId = item.getAttribute('id') || `next-item-${nextIndex + 1}`;\n        item.setAttribute('id', itemId);\n        this.itemIds.push(itemId);\n        if (itemId === this.activeid) {\n          this.activeIndex = nextIndex;\n          this.activeitem = item;\n        }\n        nextIndex++;\n      }\n    });\n\n    if (this.activeIndex === -1) {\n      this.activeIndex = 0;\n      this.activeid = this.itemIds[0];\n      this.activeitem = this.nextItems[0];\n    }\n\n    this.setPositions();\n  }\n\n  private setPositions(): void {\n    this.nextItems.forEach((item, index) => {\n      if (index < this.activeIndex) {\n        item.classList.remove('next');\n        item.classList.remove('current');\n        item.classList.add('prev');\n      } else if (index > this.activeIndex) {\n        item.classList.remove('prev');\n        item.classList.remove('current');\n        item.classList.add('next');\n      } else {\n        item.classList.remove('prev');\n        item.classList.remove('next');\n      }\n    });\n  }\n\n  public next(): void {\n    if (this.activeIndex < this.nextItems.length - 1) {\n      const nextid = this.itemIds[this.activeIndex + 1];\n      this.goToId(nextid);\n    }\n  }\n\n  public prev(): void {\n    if (this.activeIndex > 0) {\n      const previd = this.itemIds[this.activeIndex - 1];\n      this.goToId(previd);\n    }\n  }\n\n  public back(fromPushState = false): void {\n    if (this.previousOperations.length > 0) {\n      const previousOperation = this.previousOperations.pop();\n      this.goToId(previousOperation.id, previousOperation.direction === 'prev' ? 'next' : 'prev', false, fromPushState);\n    }\n  }\n\n  private moving = false;\n  private queuedOperations: {id: string, direction: 'prev' | 'next' | 'auto', trackOperation: boolean, fromPushState: boolean}[] = [];\n  public goToId(id: string, direction: 'prev' | 'next' | 'auto' = 'auto', trackOperation = true, fromPushState = false): void {\n    // Validate the move\n    const goToIndex = this.itemIds.indexOf(id);\n    if (goToIndex === -1) {\n      return;\n    }\n    const goToElement = this.nextItems[goToIndex];\n    if (goToElement.classList.contains('current')) {\n      return;\n    }\n\n    // Once the move is validated, queue the move if one is already being processed\n    if (this.moving) {\n      this.queuedOperations.push({id, direction, trackOperation, fromPushState});\n      return;\n    }\n    this.moving = true;\n\n    if (!fromPushState) {\n      this.ensureCurrentState();\n    }\n    if (direction === 'auto') {\n      direction = goToIndex > this.activeIndex ? 'next' : 'prev';\n    }\n\n    const isPreviousId = this.previousOperations.length > 0 && id === this.previousOperations[this.previousOperations.length - 1].id;\n\n    if (direction === 'next' || !isPreviousId) {\n      // if the direction is \"next\" => we consider that it's not a \"back\" operation that should\n      // be auto detected\n      if (trackOperation && this.activeid) {\n        this.previousOperations.push({id: this.activeid, direction});\n      }\n    } else if (this.autodetectback) {\n      // here we know that we are calling gotoid with the id of the previously \n      // displayed element. Then, we can autodetect a back operation\n      this.previousOperations.pop();\n    }\n\n    this.hasHistory = this.previousOperations.length > 0;\n\n    const oppositeDirection = direction === 'next' ? 'prev' : 'next';\n\n    goToElement.classList.add(direction);\n    goToElement.classList.remove(oppositeDirection);\n\n    this.changing();\n\n    DOM.queueUpdate(() => {\n      // start animating\n      this.activeitem.classList.add('animate');\n      goToElement.classList.add('animate');\n      // start animation\n      this.activeitem.classList.add(oppositeDirection);\n      this.activeitem.classList.remove('current');\n      goToElement.classList.remove(direction);\n      goToElement.classList.add('current');\n\n      goToElement.addEventListener(\"transitionend\", () => {\n        if (this.activeitem) {\n          this.activeitem.classList.remove('animate');\n        }\n        if (goToElement) {\n          goToElement.classList.remove('animate');\n        }\n        this.activeid = id;\n        this.activeIndex = this.itemIds.indexOf(id);\n        this.activeitem = goToElement;\n        this.changed();\n        if (!fromPushState) {\n          this.setState(direction);\n        }\n        this.ensureIdInUrl();\n\n        this.moving = false;\n        if (this.queuedOperations.length > 0) {\n          const nextOperation = this.queuedOperations.shift();\n          this.goToId(nextOperation.id, nextOperation.direction, nextOperation.trackOperation, nextOperation.fromPushState);\n        }\n      }, {once: true});\n    });\n  }\n\n  private ensureCurrentState(): void {\n    if (!this.pushStateId) {\n      return;\n    }\n    if (!history.state.fastNextId || !history.state.fastNextElementId) {\n      history.replaceState(Object.assign({}, history.state, {fastNextId: this.pushStateId, fastNextElementId: this.activeid, fastNextDirection: 'auto'}), document.title);\n    } \n  }\n\n  private setState(direction: string): void {\n    if (!this.pushStateId) {\n      return;\n    }\n    history.pushState(Object.assign({}, history.state, {fastNextId: this.pushStateId, fastNextElementId: this.activeid, fastNextDirection: direction}), document.title);\n  }\n\n  private ensureIdInUrl() {\n    if (!this.pushStateId) {\n      return;\n    }\n    const url = new URL('', location.href);\n    url.hash = location.hash;\n    url.searchParams.set(this.pushStateId, this.activeid);\n    history.replaceState(history.state, document.title, url.toString());  \n  }\n}\n","import { css } from '@microsoft/fast-element';\nimport { display } from \"@microsoft/fast-foundation\";\n\nexport const FormStyles = css`\n  ${display(\"flex\")}\n\n  :host {\n    contain: style;\n    flex-direction: column;\n  }\n  ::slotted(label) {\n    margin-bottom: 4px;\n  }\n`;","import { html } from '@microsoft/fast-element';\nimport { FastFormRow } from './index';\n\nexport const FormTemplate = html<FastFormRow>`<slot></slot>`;\n","import { customElement, FASTElement } from '@microsoft/fast-element';\nimport { FormStyles as styles } from './styles';\nimport { FormTemplate as template } from './template';\n\n@customElement({\n  name: 'fast-form-row',\n  template,\n  styles\n})\nexport class FastFormRow extends FASTElement {\n  \n}\n","import { css } from '@microsoft/fast-element';\nimport { display } from \"@microsoft/fast-foundation\";\n\nexport const FormStyles = css`\n  ${display(\"grid\")}\n\n  :host {\n    contain: style;\n    grid-gap: var(--spacing-unit);\n  }\n`;","import { html } from '@microsoft/fast-element';\nimport { FastForm } from './index';\n\nexport const FormTemplate = html<FastForm>`<slot></slot>`;\n","import { customElement, FASTElement } from '@microsoft/fast-element';\nimport { FormStyles as styles } from './styles';\nimport { FormTemplate as template } from './template';\n\n@customElement({\n  name: 'fast-form',\n  template,\n  styles\n})\nexport class FastForm extends FASTElement {\n  \n}\n","import { \n  provideFASTDesignSystem, \n  fastAccordion,\n  fastAccordionItem,\n  fastAnchoredRegion,\n  fastButton,\n  fastCard, \n  fastCheckbox,\n  fastMenu,\n  fastMenuItem,\n  fastTextField,\n  fastBreadcrumb,\n  fastBreadcrumbItem,\n  fastSelect,\n  fastSlider,\n  buttonStyles,\n  accentFillHover,\n  foregroundOnAccentHover,\n  accentFillFocus,\n  foregroundOnAccentFocus,\n  fastOption,\n  fastDialog,\n  fastTab,\n  fastTabs,\n  fastTabPanel,\n  fastSwitch,\n  fastBadge,\n  fastProgressRing,\n  fastAnchor,\n} from '@microsoft/fast-components';\nimport { css } from '@microsoft/fast-element';\nimport { focusVisible } from '@microsoft/fast-foundation';\nimport { FastIcon } from './components/icon';\n\nexport const iconButtonStyles = css`\n:host([icon]) {\n  width: 40px;\n  height: 40px;\n}\n/*\n:host([appearance=lightweight][hover-fill]) .control {\n  padding: 0 calc((10 + max(0, calc(var(--control-corner-radius) - 10)) + (var(--design-unit) * 2 * max(var(--density), 0))) * 1px);\n}\n*/\n:host([icon]) .control {\n  padding: 0;\n}\n:host([icon]) .content {\n  display: flex;\n}\n:host([appearance=lightweight][icon]) span.content::before,\n:host([appearance=lightweight][hover-fill]) span.content::before,\n:host([appearance=lightweight][icon]) .control:${focusVisible} span.content::before,\n:host([appearance=lightweight][hover-fill]) .control:${focusVisible} span.content::before {\n  background: transparent;\n}\n:host([appearance=lightweight][icon]:hover),\n:host([appearance=lightweight][hover-fill]:hover) {\n  background: ${accentFillHover};\n  color: ${foregroundOnAccentHover};\n}\n:host([appearance=lightweight][icon]:focus),\n:host([appearance=lightweight][hover-fill]:focus) {\n  background: ${accentFillFocus};\n  color: ${foregroundOnAccentFocus};\n}\n`;\n\nprovideFASTDesignSystem()\n    .register(\n        fastAccordion(),\n        fastAccordionItem(),\n        fastAnchor(),\n        fastAnchoredRegion(),\n        fastBadge(),\n        fastBreadcrumb(),\n        fastBreadcrumbItem(),\n        fastButton({\n          styles: (ctx, def) => css`\n            ${buttonStyles(ctx, def as any)}\n            ${iconButtonStyles}\n          `\n        }),\n        fastCard(),\n        fastCheckbox(),\n        fastDialog(),\n        fastMenu(),\n        fastMenuItem(),\n        fastOption(),\n        fastProgressRing(),\n        fastSelect(),\n        fastSlider(),\n        fastSwitch(),\n        fastTab(),\n        fastTabs(),\n        fastTabPanel(),\n        fastTextField()\n    );\n\nFastIcon;\n\n// import global custom components\nimport { fastTextFieldLogin } from './components/text-field-login';\nimport { confirmDialog } from './components/dialogs/confirm';\nimport { selectDialog } from './components/dialogs/select';\nimport { promptTextDialog } from './components/dialogs/prompt-text';\nprovideFASTDesignSystem()\n    .register(\n      fastTextFieldLogin(),\n      confirmDialog({}),\n      selectDialog({}),\n      promptTextDialog({}),\n    );\n\n\n\n// import components with the old syntax\nimport { FastStack } from './components/stack';\nimport { FastNext } from './components/next';\nimport { FastFormRow } from './components/form-row/index';\nimport { FastForm } from './components/form/index';\n\nFastStack;\nFastNext;\nFastForm;\nFastFormRow;\n","import {Aurelia} from 'aurelia-framework'\nimport * as environment from '../config/environment.json';\nimport {PLATFORM} from 'aurelia-pal';\nimport { registerCorePlugins } from 'base/base-main';\nimport './import-fast';\nimport { Aurelia1FASTAdapter } from 'aurelia1-fast-adapter';\nAurelia1FASTAdapter.tags['CALENDAR'] = ['date', 'dates', 'from', 'end'];\nAurelia1FASTAdapter.tags['DATE-FIELD'] = ['value'];\nAurelia1FASTAdapter.tags['TEXT-FIELD-LOGIN'] = ['value'];\n\nexport function configure(aurelia: Aurelia) {\n  aurelia.use\n    .standardConfiguration()\n  registerCorePlugins(aurelia);\n  aurelia.use\n    .plugin(PLATFORM.moduleName('aurelia-bcf'), {\n      host: `${environment.swissdata.host}/bcf/2.1`, // 'http://localhost:3000/bcf/2.1',\n      extendEndpoint: (url) => {\n        if (url.indexOf('?') === -1) return url + `?apiKey=${environment.swissdata.apiKey}`;\n        return url + `&apiKey=${environment.swissdata.apiKey}`;\n      },\n      ignoreDebugs: false\n    })\n    .plugin(PLATFORM.moduleName('aurelia1-fast-adapter'), 'fast')\n    .feature(PLATFORM.moduleName('aurelia-components/index'))\n    .feature(PLATFORM.moduleName('resources/index'));\n\n  aurelia.use.developmentLogging(environment.debug ? 'debug' : 'warn');\n\n  if (environment.testing) {\n    aurelia.use.plugin(PLATFORM.moduleName('aurelia-testing'));\n  }\n\n  aurelia.start().then(() => aurelia.setRoot(PLATFORM.moduleName('app')));\n}\n\n","import { inject} from 'aurelia-framework';\nimport { Global } from 'global';\nimport { getLogger } from 'aurelia-logging';\nimport { Link } from 'app';\n\nconst log = getLogger('account');\n\n@inject(Global)\nexport class Home {    \n\n  public link: Link = undefined;\n\n  constructor(private global: Global) {\n  }\n\n  \n  public activate() {\n    console.log('Start home');\n  }\n\n \n\n}\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"/* Styles for page Home */\\n\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","module.exports = \"<template>\\n  <require from=\\\"./home.css\\\"></require>\\n  \\n  <section class=\\\"center\\\">\\n    <h3>Welcome</h3>\\n    <h4>CMU - FM</h4>\\n    <p>\\n      Plateforme permettant la gestion des identifiants de pièces et l'accès aux données FM.\\n    </p>\\n    <p>\\n      <fast-button slot=\\\"left\\\" appearance=\\\"neutral\\\"  style=\\\"justify-self: start;\\\" click.trigger=\\\"global.navigateToRoute('qr')\\\">\\n        <fast-icon icon=\\\"Qrcode\\\"></fast-icon><span t=\\\"cmu.Start Scan QR\\\" style=\\\"vertical-align: super; margin-left: 10px;\\\"></span>\\n      </fast-button>\\n    </p>\\n  </section>\\n\\n</template>\\n\";","import { inject, observable } from 'aurelia-framework';\nimport { errorify } from 'aurelia-resources';\nimport { Global } from 'global';\nimport { getLogger } from 'aurelia-logging';\nimport { DynamicDataModel } from 'aurelia-deco';\nimport * as environment from '../../config/environment.json';\nimport { QrCodeReader } from './../components/qr-code-reader';\nimport { Link } from 'app';\n\nconst log = getLogger('qr');\n\n@inject(Global)\nexport class Qr {\n\n  public routeNext: string = 'qrcode';\n  public routeParams: any = { na: 'qr' };\n  public urlId: string = undefined;\n  public link = {} as Link;\n  public nbScan: number = 0;\n\n  public showQrReader: boolean = false;\n  @observable public qrData: string;\n  private qrCodeReader: QrCodeReader;\n\n  constructor(private global: Global) {\n    console.log('Start constructor', this.urlId, this.link);\n  }\n\n  public activate(params: { urlId: string }) {\n    if (params) {\n      this.urlId = params.urlId;\n      this.getLinks(this.urlId);\n    }\n  }\n\n  public async getLinks(urlId: string) {\n    if (urlId && urlId != '') {\n      let links: Link[] = [];\n      links = await DynamicDataModel.use('link').getAll(`?urlId=${urlId}`) as Link[];\n      if (links && links.length > 0) {\n        let link: Link = links[0];\n        console.log('link', link);\n        this.link.id = link.id;\n        this.link.modelId = link.modelId;\n        this.link.name = link.name ? link.name : '';\n        this.link.buildingName = link.buildingName ? link.buildingName : '';\n        this.link.roomNb = link.roomNb ? link.roomNb : '';\n        this.link.urlId = link.urlId ? link.urlId : '';\n        this.link.urlTarget = link.urlTarget ? link.urlTarget : '';\n        if (this.link.urlTarget && this.link.urlTarget != '') {\n          this.redirect(false);\n        }\n      }\n    }\n  }\n\n  public async redirect(force: boolean) {\n    if (force) {\n      window.open(this.link.urlTarget, \"_self\");\n    } else {\n      setTimeout(() => {\n        window.open(this.link.urlTarget, \"_self\");\n        // this.global.navigateToRoute('qr',{urlId:'kjhbjkhb'}); // Go to page with parameter\n      }, 5000);\n    }\n  }\n\n\n\n  public startScan() {\n    if (environment.qrCodeBase) {\n      this.toggleShowQrReader();\n    }\n    else {\n      errorify(new Error(\"QR code base settings is empty\"));\n    }\n  }\n  public toggleShowQrReader() {\n    this.showQrReader = !this.showQrReader\n    if (this.showQrReader) {\n      this.qrCodeReader.startQrReader();\n    } else {\n      this.qrCodeReader.StopQrReader();\n    }\n  }\n  \n  private qrDataChanged(newValue: string) {\n    if (environment.qrCodeBase && newValue?.toLocaleLowerCase().includes(environment.qrCodeBase.toLocaleLowerCase())) {\n      let qrCode = newValue.replace(environment.qrCodeBase, '');\n      this.toggleShowQrReader();\n       this.getLinks(qrCode);\n      this.nbScan += 1;\n      // setTimeout(() => {\n      //   this.toggleShowQrReader(); // TEST ONLY\n      // }, 500);\n    }\n  }\n\n}\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"/* Styles for page Qr */\\n\\n.item-listing {\\n  margin-top: 1em;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","module.exports = \"<template>\\n  <require from=\\\"./qr.css\\\"></require>\\n\\n  <section class=\\\"center\\\">\\n    <fast-icon size=\\\"100\\\" icon=\\\"Qrcode\\\" slot=\\\"start\\\"></fast-icon>\\n    <h3>Scan QR</h3>\\n    <p if.bind=\\\"!urlId\\\">Aucun code</p>\\n    <p if.bind=\\\"urlId\\\">\\n      Code : ${urlId} <br>\\n      <span if.bind=\\\"link.name\\\">${link.name} <br></span>\\n    </p>\\n    <p if.bind=\\\"link.urlTarget\\\">\\n      <small t=\\\"cmu.Redirect in progress\\\"></small><br><br>\\n      <fast-button appearance=\\\"accent\\\" click.trigger=\\\"redirect(true)\\\" style=\\\"max-width: 100%; overflow: hidden;\\\">${link.urlTarget}</fast-button>\\n    </p>\\n    <p if.bind=\\\"!link.urlTarget\\\">\\n      Lien cible non trouvé.\\n    </p>\\n  </section>\\n  \\n  <section class=\\\"center\\\">\\n    <p>\\n      <fast-button appearance.bind=\\\"link.urlTarget ? 'neutral' : 'accent'\\\" click.trigger=\\\"startScan()\\\">\\n        <span if.bind=\\\"!showQrReader\\\" t=\\\"cmu.Start scan\\\"></span>\\n        <span if.bind=\\\"showQrReader\\\" t=\\\"cmu.Stop scan\\\"></span>\\n      </fast-button>\\n    </p>\\n    <div id=\\\"qrcodedemo\\\">\\n      <qr-code-reader class=\\\"full\\\" show.bind=\\\"showQrReader\\\" codedata.bind=\\\"qrData\\\" view-model.ref=\\\"qrCodeReader\\\" validate.call=\\\"checkQrCode(data)\\\"></qr-code-reader>\\n      <p if.bind=\\\"nbScan\\\"><small style=\\\"color: grey;\\\">${nbScan}</small></p>\\n    </div>\\n  </section>\\n\\n</template>\\n\";","import { FastMenuValueAttribute } from './fast-menu-value-attribute';\nimport { customAttribute, inject, observable, Optional } from 'aurelia-framework';\nimport { MenuItem } from '@microsoft/fast-components';\n\n@customAttribute('fast-menu-item-value', undefined, ['fast-menu-option'])\n@inject(Element, Optional.of(FastMenuValueAttribute))\nexport class FastMenuItemValueAttribute {\n\n  public value: any;\n\n  constructor(private element: MenuItem & {value?: any}, private container: FastMenuValueAttribute) {}\n\n  public bind() {\n    this.container.registerMenuItem(this.element);\n    this.element.value = this.value;\n  }\n\n  public detached() {\n    this.container.disposeMenuItem(this.element);\n  }\n\n  public valueChanged(newValue: any) {\n    this.element.value = newValue;\n    this.container.computeValueFromItems();\n  }\n}\n","import { customAttribute, bindingMode, bindable, inject, TaskQueue } from 'aurelia-framework';\nimport { MenuItem } from '@microsoft/fast-components';\n\n\n/*\nThis custom attribute is designed to work with <fast-menu> and <fast-menu-item> elements. It will automatically\nadd the right role (\"menuitemcheckbox\" or \"menuitemradio\") according to the bound value type in the menu element\n\nUsage for multiple selection (checkbox)\n\nViewModel:\n- The ViewModel must hold a property (exemple `value` which is in an array form: this.value = [])\n\nView:\n<fast-menu fast-menu-value.bind=\"value\">\n  <fast-menu-item fast-menu-item-value=\"value1\">Value 1</fast-menu-item>\n  <fast-menu-item fast-menu-item-value=\"value2\">Value 2</fast-menu-item>\n  <fast-menu-item fast-menu-item-value=\"value3\">Value 3</fast-menu-item>\n</fast-menu>\n\nUsage for single selection (radio)\n\nViewModel:\n- The ViewModel must hold a property (exemple `value` which is not an array: this.value = 'default_value')\n\nView:\n<fast-menu fast-menu-value.bind=\"value\">\n  <fast-menu-item fast-menu-item-value=\"default_value\">Default value</fast-menu-item>\n  <fast-menu-item fast-menu-item-value=\"other_value\">Other value</fast-menu-item>\n  <fast-menu-item fast-menu-item-value=\"another_value\">Another value</fast-menu-item>\n</fast-menu>\n\n*/\n\n@customAttribute('fast-menu-value', bindingMode.twoWay, ['fast-menu-container'])\n@inject(Element, TaskQueue)\nexport class FastMenuValueAttribute {\n\n  public value: any | any[];\n\n  private isMultiple: boolean = false;\n  private items: Array<MenuItem & {value?: any}> = [];\n\n  private isQueued: boolean = false;\n\n  constructor(private element: Element, private taskQueue: TaskQueue) {\n  }\n\n  /* Event passed on the click eventListener */\n  public handleEvent(event: Event) {\n    if (event.type === 'change') {\n      setTimeout(() => {\n        this.computeValueFromItems();\n      }, 50)\n    }\n  }\n\n  /* Callback passed on the TaskQueue when registering child items */\n  public call() {\n    this.isQueued = false;\n    this.applyValueToItems();\n  }\n\n  public bind() {\n    this.valueChanged(this.value);\n  }\n\n  private requestProcessValue() {\n    if (!this.isQueued) {\n      this.isQueued = true;\n      this.taskQueue.queueMicroTask(this);\n    }\n  }\n\n  public registerMenuItem(option: MenuItem) {\n    this.items.push(option);\n    option.addEventListener('change', this);\n    this.requestProcessValue();\n  }\n\n  public disposeMenuItem(option: MenuItem) {\n    const index = this.items.indexOf(option);\n    if (index !== -1) {\n      option.removeEventListener('change', this);\n      this.items.splice(index, 1);\n      this.requestProcessValue();\n    }\n  }\n\n  public valueChanged(newValue: string | string[]) {\n    this.isMultiple = Array.isArray(newValue);\n    // By using requestProcessValue we avoid too many\n    // process in case the value changes quickly\n    // This can happen if the value type must be fixed (above)\n    // or if there are several choice registration in a row\n    this.requestProcessValue();\n  }\n\n\n  public applyValueToItems() {\n    this.setRolesAccordingToValueType();\n    const itemsLength = this.items.length;\n    if (this.isMultiple && Array.isArray(this.value)) {\n      for (let index = 0; index < itemsLength; index++) {\n        const item = this.items[index];\n        item.toggleAttribute('checked', this.value.indexOf(item.value) !== -1);\n      }\n    } else if (!this.isMultiple && typeof this.value === 'string') {\n      for (let index = 0; index < itemsLength; index++) {\n        const item = this.items[index];\n        item.toggleAttribute('checked', this.value === item.value);\n      }\n    }\n  }\n\n  public computeValueFromItems() {\n    const itemsLength = this.items.length;\n    const newValue: any[] = [];\n    for (let index = 0; index < itemsLength; index++) {\n      const checked = this.items[index].hasAttribute('checked');\n      if (!checked) {\n        continue;\n      }\n      if (!this.isMultiple) {\n        this.value = this.items[index].value;\n        return;\n      } else {\n        newValue.push(this.items[index].value);\n      }\n    }\n    if (this.isMultiple) {\n      this.value.splice(0, this.value.length);\n      this.value.push(...newValue);\n    } else {\n      this.value = undefined;\n    }\n  }\n\n  private setRolesAccordingToValueType(): void {\n    const role = this.isMultiple ? \"menuitemcheckbox\" : \"menuitemradio\";\n    for (const item of this.items) {\n      item.setAttribute('role', role);\n    }\n  }\n\n}\n","import {FrameworkConfiguration} from 'aurelia-framework';\nimport { PLATFORM } from 'aurelia-pal';\n\nexport function configure(config: FrameworkConfiguration) {\n  config.globalResources([\n    PLATFORM.moduleName('./fast-menu-item-value-attribute'),\n    PLATFORM.moduleName('./fast-menu-value-attribute')\n  ]);\n}\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.push([module.id, \"@import url(https://fonts.googleapis.com/css?family=Titillium+Web:200,400);\"]);\n// Module\nexports.push([module.id, \"body {\\n  font-family: 'Titillium Web', sans-serif;\\n  font-size: 16px;\\n}\\n\\nh1, h2, h3, h4, h5, h6 {\\n  font-family: 'Titillium Web', sans-serif;\\n}\\n\\nh1 {\\n  font-size: 2.5rem;\\n}\\nh2 {\\n  font-size: 2rem;\\n}\\nh3 {\\n  font-size: 1.75rem;\\n}\\nh4 {\\n  font-size: 1.5rem;\\n}\\nh5 {\\n  font-size: 1.25rem;\\n}\\nh6 {\\n  font-size: 1rem;\\n}\\n\\n.light {\\n  font-weight: 200;\\n}\\n\\np {\\n  line-height: 1.5em;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".text-button {\\n  display: grid;\\n  grid-gap: var(--responsive-spacing-unit-lg);\\n  grid-template-columns: 1fr min-content;\\n  align-items: center;\\n}\\n.button-text {\\n  display: grid;\\n  grid-gap: var(--responsive-spacing-unit-lg);\\n  grid-template-columns: min-content 1fr;\\n  align-items: center;\\n}\\n.button-text-button {\\n  display: grid;\\n  grid-gap: var(--responsive-spacing-unit-lg);\\n  grid-template-columns: min-content 1fr min-content;\\n  align-items: center;\\n}\\n.text-hint {\\n  color: var(--neutral-foreground-hint);\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n"],"sourceRoot":""}