{"version":3,"sources":["webpack:///src/var/www/virtualhost/client.tk.salome.ee/www/develop/src/main.ts","webpack:///src/var/www/virtualhost/client.tk.salome.ee/www/develop/src/main-router.ts","webpack:///./src/main-router.html"],"names":["configure","aurelia","window","location","pathname","replace","use","standardConfiguration","feature","plugin","config","init","attach","logging","enabled","pageTracking","ignore","fragments","routes","routeNames","getTitle","payload","document","title","getUrl","href","clickTracking","filter","element","HTMLElement","nodeName","toLowerCase","exceptionTracking","instance","aliases","configureAliases","i18next","with","loader","setup","backend","loadPath","attributes","lng","fallbackLng","debug","setEnvironments","local","dev","stage","prod","start","then","setRoot","addAppender","setLevel","logLevel","warn","warnings","wForgottenReturn","log","getLogger","appConfig","eventAggregator","cartService","userService","warehouseService","transportService","i18n","authInterceptor","currentYear","Date","getFullYear","currentLocaleClass","cartBadge","this","register","delimiters","thousands","decimal","abbreviations","thousand","million","billion","trillion","ordinal","currency","symbol","locale","subscribe","localeChanged","getLocaleClass","cartProductsChanged","updateTotal","cartBadgeChanged","value","push","subscribeOnce","userSettingsLoaded","loadNames","event","currentRoute","instruction","name","isLoggedIn","activate","loadSettings","warningForOldBrowsers","configureRouter","router","transformTitle","tr","pageTitle","addAuthorizeStep","AuthorizeStep","options","pushState","root","map","route","moduleId","settings","auth","mapUnknownRoutes","fallbackRoute","getSettings","result","setSettings","setLocale","userSettings","warehouseId","contractSettings","contract","getWarehouseTransportOptions","setTransportOptions","getWarehouses","setAllowedWarehouses","changeLocale","saveLocale","updateSettings","logout","token","beginFetch","fetchCurrent","cartPreview","acceptFetch","products","Wholesale","catch","error","handleRequestNoise","showErrorToast","getErrorMessage","browser","navigator","userAgent","indexOf","body","textContent","getBrowser","tem","ua","M","match","test","exec","slice","join","appName","appVersion","splice","MainRouter","navigate","run","next","getAllInstructions","some","i","saveNextRoute","cancel","redirectUri","tryReturnTo","module","exports"],"mappings":"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","file":"app~bae3a95e.4cd42419410cd0024cac.chunk.js","sourcesContent":["import { Aurelia } from \"aurelia-framework\";\nimport { PLATFORM } from \"aurelia-pal\";\nimport * as Bluebird from \"bluebird\";\nimport { LogManager } from \"aurelia-framework\";\nimport { ConsoleAppender } from \"aurelia-logging-console\";\nimport { I18N, Backend, TCustomAttribute } from \"aurelia-i18n\";\nimport { isErrorPageBoot } from \"pages/error/boot\";\n\nLogManager.addAppender(new ConsoleAppender());\nLogManager.setLevel(LogManager.logLevel.warn);\n\n// remove out if you don't want a Promise polyfill (remove also from webpack.config.js)\nBluebird.config({ warnings: { wForgottenReturn: false } });\n\nexport async function configure(aurelia: Aurelia) {\n  // A real browser load of /error never goes through in-session fallback.\n  // Redirect before the router starts so the error page is not shown.\n  if (isErrorPageBoot(window.location.pathname)) {\n    window.location.replace(\"/\");\n    return;\n  }\n\n  aurelia.use.standardConfiguration().feature(PLATFORM.moduleName(\"resources/index\"));\n\n  // Added plugins\n  aurelia.use.plugin(PLATFORM.moduleName(\"aurelia-google-analytics\"), (config: any) => {\n    config.init(\"UA-2779760-6\");\n    config.attach({\n      logging: {\n        // Set to `true` to have some log messages appear in the browser console.\n        enabled: true,\n      },\n      pageTracking: {\n        // Set to `false` to disable in non-production environments.\n        enabled: true,\n        // Configure fragments/routes/route names to ignore page tracking for\n        ignore: {\n          fragments: [], // Ignore a route fragment, login fragment for example: ['/login']\n          routes: [], // Ignore a route, login route for example: ['login']\n          routeNames: [], // Ignore a route name, login route name for example: ['login-route']\n        },\n        // Optional. By default it gets the title from payload.instruction.config.title.\n        getTitle: (payload: any) => {\n          // For example, if you want to retrieve the tile from the document instead override with the following.\n          return document.title;\n        },\n        // Optional. By default it gets the URL fragment from payload.instruction.fragment.\n        getUrl: (payload: any) => {\n          // For example, if you want to get full URL each time override with the following.\n          return window.location.href;\n        },\n      },\n      clickTracking: {\n        // Set to `false` to disable in non-production environments.\n        enabled: true,\n        // Optional. By default it tracks clicks on anchors and buttons.\n        filter: (element: any) => {\n          // For example, if you want to also track clicks on span elements override with the following.\n          return (\n            element instanceof HTMLElement &&\n            (element.nodeName.toLowerCase() === \"a\" ||\n              element.nodeName.toLowerCase() === \"button\" ||\n              element.nodeName.toLowerCase() === \"span\")\n          );\n        },\n      },\n      exceptionTracking: {\n        // Set to `false` to disable in non-production environments.\n        enabled: true,\n      },\n    });\n  });\n\n  aurelia.use.plugin(PLATFORM.moduleName(\"aurelia-i18n\"), (instance: I18N) => {\n    const aliases = [\"t\", \"i18n\"];\n\n    TCustomAttribute.configureAliases(aliases);\n    instance.i18next.use(Backend.with(aurelia.loader));\n\n    // adapt options to your needs (see http://i18next.com/docs/options/)\n    return instance.setup({\n      backend: {\n        // this doesn't like dashes and will lose everything after \"-\" from \"lng\"\n        // even though loads default \"lng\" just fine and second attempt of other languages too\n        loadPath: \"locales/{{lng}}.json\",\n      },\n      attributes: aliases,\n      lng: \"et_EE\",\n      fallbackLng: \"et_EE\",\n      debug: false,\n    });\n  });\n\n  aurelia.use.plugin(PLATFORM.moduleName(\"aurelia-cookie\"));\n  aurelia.use.plugin(PLATFORM.moduleName(\"aurelia-configuration\"), (config: any) => {\n    config.setEnvironments({\n      local: [\"localhost:8080\"],\n      dev: [\"develop.client.tk.salome.ee.nuhvel.eu\"],\n      stage: [\"staging.client.tk.salome.ee.nuhvel.eu\"],\n      prod: [\"client.tk.salome.ee.nuhvel.eu\", \"tk.salome.ee\"],\n    });\n  });\n\n  // Uncomment the line below to enable animation.\n  // aurelia.use.plugin(PLATFORM.moduleName('aurelia-animator-css'));\n  // if the css animator is enabled, add swap-order=\"after\" to all router-view elements\n\n  // Anyone wanting to use HTMLImports to load views, will need to install the following plugin.\n  // aurelia.use.plugin(PLATFORM.moduleName('aurelia-html-import-template-loader'));\n\n  //aurelia.use.developmentLogging('debug');\n\n  /*if (environment.testing)\n    aurelia.use.plugin(PLATFORM.moduleName('aurelia-testing'));*/\n\n  return aurelia.start().then(() => aurelia.setRoot(PLATFORM.moduleName(\"main-router\")));\n}\n","import { I18N } from \"aurelia-i18n\";\nimport { TransportService } from \"services/client/transport-service\";\nimport { WarehouseService } from \"services/client/warehouse-service\";\nimport { UserService } from \"services/identity/user-service\";\nimport { Utils } from \"utils/helpers/utils\";\nimport { isRequestNoise } from \"utils/helpers/request-errors\";\nimport { TKEvent } from \"utils/enums/TKEvent\";\nimport { CartService } from \"services/cart/cart-service\";\nimport { ICart } from \"domain/Cart/ICart\";\nimport { LogManager, autoinject, PLATFORM } from \"aurelia-framework\";\nimport {\n  RouterConfiguration,\n  Router,\n  NavigationInstruction,\n  Next,\n  Redirect,\n  PipelineResult,\n} from \"aurelia-router\";\nimport { AppConfig } from \"app-config\";\nimport numeral from \"numeral\";\nimport { EventAggregator } from \"aurelia-event-aggregator\";\nimport { NotAuthorizedRedirect } from \"utils/classes/NotAuthorizedRedirect\";\nimport { AuthInterceptor } from \"utils/classes/AuthInterceptor\";\nimport { unknownRouteFallback } from \"pages/error/boot\";\n\nimport { CartBadgeState, CartBadgeValue } from \"domain/Cart/CartBadge\";\nimport { PriceType } from \"utils/enums/PriceType\";\n\nexport const log = LogManager.getLogger(\"app.main-router\");\n\n@autoinject\nexport class MainRouter {\n  router: Router;\n\n  cartPreview: ICart;\n\n  currentYear = new Date().getFullYear();\n  currentLocaleClass = \"flag-icon-ee\";\n\n  constructor(\n    private appConfig: AppConfig,\n    private eventAggregator: EventAggregator,\n    private cartService: CartService,\n    private userService: UserService,\n    private warehouseService: WarehouseService,\n    private transportService: TransportService,\n    private i18n: I18N,\n    private authInterceptor: AuthInterceptor,\n  ) {\n    this.authInterceptor = authInterceptor;\n\n    numeral.register(\"locale\", \"et\", {\n      delimiters: { thousands: \" \", decimal: \",\" },\n      abbreviations: {\n        thousand: \" tuh\",\n        million: \" mln\",\n        billion: \" mld\",\n        trillion: \" trl\",\n      },\n      ordinal: () => \".\",\n      currency: { symbol: \"€\" },\n    });\n    numeral.locale(\"et\");\n\n    this.eventAggregator.subscribe(TKEvent.localeChanged, (locale: string) => {\n      // this.i18n.getLocale() returns wrong data here for some reason\n      this.currentLocaleClass = Utils.getLocaleClass(locale);\n    });\n    this.eventAggregator.subscribe(TKEvent.cartProductsChanged, () => {\n      this.updateTotal();\n    });\n    this.eventAggregator.subscribe(TKEvent.cartBadgeChanged, (value: CartBadgeValue) => {\n      this.cartBadge.push(value);\n    });\n    this.eventAggregator.subscribeOnce(TKEvent.userSettingsLoaded, () => {\n      this.loadNames();\n    });\n    this.eventAggregator.subscribe(\n      \"router:navigation:success\",\n      (event: { instruction: NavigationInstruction; result: PipelineResult }) => {\n        const currentRoute = event.instruction.config.name;\n        if (currentRoute === undefined || currentRoute === null) return;\n\n        // Run only when user is logged in\n        if (this.appConfig.isLoggedIn) this.updateTotal();\n      },\n    );\n  }\n\n  // called only once: when the site is opened or refreshed\n  activate() {\n    // The VAT rate arrives with the user's settings, see AppConfig.setSettings\n\n    // If user is already logged in (refreshed the page)\n    if (this.appConfig.isLoggedIn) {\n      this.updateTotal();\n      this.loadSettings();\n    }\n\n    this.warningForOldBrowsers();\n  }\n\n  configureRouter(config: RouterConfiguration, router: Router) {\n    this.router = router;\n\n    this.router.transformTitle = title => this.i18n.tr(\"general.title\", { pageTitle: title });\n\n    config.addAuthorizeStep(AuthorizeStep);\n\n    config.options.pushState = true;\n    config.options.root = \"/\";\n\n    config.map([\n      {\n        route: \"\",\n        name: \"home\",\n        title: this.i18n.tr(\"pages.home.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/home\"),\n        settings: { auth: true },\n      },\n\n      {\n        route: \"error\",\n        name: \"errorIndex\",\n        title: this.i18n.tr(\"pages.error.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/error/index\"),\n        settings: { auth: false },\n      },\n      {\n        route: \"privacy\",\n        name: \"privacyIndex\",\n        title: this.i18n.tr(\"pages.privacy.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/privacy/index\"),\n        settings: { auth: false },\n      },\n\n      {\n        route: \"search/:query/:page?/:type?/:extendedSearch?\",\n        name: \"searchResult\",\n        title: this.i18n.tr(\"pages.search.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/search/index\"),\n        settings: { auth: true },\n      },\n\n      {\n        route: \"car/manufacturers\",\n        name: \"carManufacturers\",\n        title: this.i18n.tr(\"pages.manufacturers.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/car/manufacturers\"),\n        settings: { auth: true },\n      },\n      {\n        route: \"car/models/:id/:name/:query?\",\n        name: \"carModels\",\n        title: this.i18n.tr(\"pages.models.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/car/models\"),\n        settings: { auth: true },\n      },\n      {\n        route: \"car/vehicles/:query\",\n        name: \"carVehiclesQuery\",\n        title: this.i18n.tr(\"pages.vehicles.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/car/vehicles\"),\n        settings: { auth: true },\n      },\n      {\n        route: \"car/vehicles/:manuId/:modelId/:query?\",\n        name: \"carVehicles\",\n        title: this.i18n.tr(\"pages.vehicles.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/car/vehicles\"),\n        settings: { auth: true },\n      },\n\n      {\n        route: \"catalogue/list/:vehicleId/:query?\",\n        name: \"catalogueList\",\n        title: this.i18n.tr(\"pages.car.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/catalogue/list\"),\n        settings: { auth: true },\n      },\n      {\n        route: \"catalogue/products/:vehicleId/:catalogueId/:catalogueName/:page?\",\n        name: \"catalogueProducts\",\n        title: this.i18n.tr(\"pages.catalogue.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/catalogue/products\"),\n        settings: { auth: true },\n      },\n\n      {\n        route: \"category/manufacturers/:categoryId\",\n        name: \"categoryManufacturers\",\n        title: this.i18n.tr(\"pages.manufacturers.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/category/manufacturers\"),\n        settings: { auth: true },\n      },\n      {\n        route: \"category/models/:categoryId/:manufacturer\",\n        name: \"categoryModels\",\n        title: this.i18n.tr(\"pages.models.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/category/models\"),\n        settings: { auth: true },\n      },\n      {\n        route: \"category/vehicles/:categoryId/:manufacturer/:model\",\n        name: \"categoryVehicles\",\n        title: this.i18n.tr(\"pages.vehicles.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/category/vehicles\"),\n        settings: { auth: true },\n      },\n      {\n        route: \"category/products/:categoryId/:page/:vehicleId?\",\n        name: \"categoryProducts\",\n        title: this.i18n.tr(\"pages.category.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/category/products\"),\n        settings: { auth: true },\n      },\n\n      {\n        route: \"cart\",\n        name: \"cartIndex\",\n        title: this.i18n.tr(\"pages.cart.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/cart/index\"),\n        settings: { auth: true },\n      },\n      /* {\n        route: 'cart/:id', name: 'cartInfo', title: 'Ostukorv',\n        moduleId: PLATFORM.moduleName('pages/cart/info'), settings: { auth: true }\n      },*/\n\n      {\n        route: \"order/:page?\",\n        name: \"orderIndex\",\n        title: this.i18n.tr(\"pages.orders.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/order/index\"),\n        settings: { auth: true },\n      },\n      {\n        route: \"invoice/:page?\",\n        name: \"invoiceIndex\",\n        title: this.i18n.tr(\"pages.invoices.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/invoice/index\"),\n        settings: { auth: true },\n      },\n\n      {\n        route: \"return/:page?\",\n        name: \"returnIndex\",\n        title: this.i18n.tr(\"pages.returns.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/return/index\"),\n        settings: { auth: true },\n      },\n\n      {\n        route: \"contact\",\n        name: \"contactIndex\",\n        title: this.i18n.tr(\"pages.contact.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/contact/index\"),\n        settings: { auth: true },\n      },\n\n      {\n        route: \"user\",\n        name: \"userAccount\",\n        title: this.i18n.tr(\"pages.user.settings.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/user/index\"),\n        settings: { auth: true },\n      },\n      {\n        route: \"user/login\",\n        name: \"userLogin\",\n        title: this.i18n.tr(\"pages.user.login.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/user/login\"),\n        settings: { auth: false },\n      },\n      {\n        route: \"user/admin/:email/:token\",\n        name: \"userAdmin\",\n        moduleId: PLATFORM.moduleName(\"pages/user/admin\"),\n        settings: { auth: false },\n      },\n      {\n        route: \"user/reset/:locale/:email/:token\",\n        name: \"userReset\",\n        title: this.i18n.tr(\"pages.user.reset.title\"),\n        moduleId: PLATFORM.moduleName(\"pages/user/reset\"),\n        settings: { auth: false },\n      },\n    ]);\n\n    // fallbackRoute only restores a cancelled nav when there is no previous\n    // location. In-session unknown URLs would otherwise replace back to home.\n    config.mapUnknownRoutes(unknownRouteFallback);\n    config.fallbackRoute(\"error\");\n  }\n\n  // #region LOAD\n\n  loadSettings() {\n    this.userService.getSettings().then(result => {\n      if (!result) {\n        log.warn(\"User settings were not returned\");\n        return;\n      }\n\n      this.appConfig.setSettings(result);\n    });\n  }\n\n  loadNames() {\n    this.setLocale(this.appConfig.userSettings.locale);\n\n    const warehouseId = this.appConfig.contractSettings.contract.warehouseId;\n    this.transportService.getWarehouseTransportOptions(warehouseId).then(result => {\n      this.appConfig.setTransportOptions(result);\n    });\n\n    this.warehouseService.getWarehouses().then(result => {\n      this.appConfig.setAllowedWarehouses(result);\n    });\n  }\n\n  // #endregion\n\n  // #region ACTIONS\n\n  setLocale(locale: string) {\n    Utils.setLocale(this.eventAggregator, this.i18n, locale);\n  }\n\n  changeLocale(locale: string) {\n    this.setLocale(locale);\n    this.saveLocale(locale);\n  }\n\n  saveLocale(locale: string) {\n    if (!this.appConfig.userSettings) return;\n\n    this.appConfig.userSettings.locale = locale;\n\n    this.userService.updateSettings();\n  }\n\n  logout() {\n    this.authInterceptor.logout();\n  }\n\n  // #endregion\n\n  // #region HELPERS\n\n  /** SAL-283 QA r5: one badge total (see domain/Cart/CartBadge); the cart page pushes it directly. */\n  cartBadge = new CartBadgeState();\n\n  updateTotal() {\n    const token = this.cartBadge.beginFetch();\n    this.cartService\n      .fetchCurrent()\n      .then(result => {\n        this.cartPreview = result;\n        this.cartBadge.acceptFetch(token, result?.products as any, PriceType.Wholesale);\n      })\n      .catch(error => {\n        if (isRequestNoise(error)) return Utils.handleRequestNoise(log, error, this.i18n);\n        Utils.showErrorToast(log, Utils.getErrorMessage(error, this.i18n));\n      });\n  }\n\n  // Use pure JS to display a warning for users of old browsers that aren't supported\n  warningForOldBrowsers() {\n    const browser = window.navigator.userAgent;\n\n    document.title = this.i18n.tr(\"general.title\", {\n      pageTitle: this.i18n.tr(\"pages.home.title\"),\n    });\n\n    // Internet Explorer\n    if (browser.indexOf(\"Trident\") > -1 || browser.indexOf(\"MSIE\") > -1) {\n      document.body.textContent = this.i18n.tr(\"general.errors.old-browser\", {\n        browser: this.getBrowser(),\n      });\n    }\n  }\n\n  // (c) https://stackoverflow.com/a/5918791/\n  getBrowser() {\n    const ua = navigator.userAgent;\n    let tem;\n    let M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n\n    // IE\n    if (/trident/i.test(M[1])) {\n      tem = /\\brv[ :]+(\\d+)/.exec(ua) || [];\n      return \"IE \" + (tem[1] || \"\");\n    }\n\n    // Chromium\n    if (M[1] === \"Chrome\") {\n      tem = ua.match(/\\b(OPR|Edge)\\/(\\d+)/);\n      if (tem != null) return tem.slice(1).join(\" \").replace(\"OPR\", \"Opera\");\n    }\n\n    M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, \"-?\"];\n\n    if ((tem = ua.match(/version\\/(\\d+)/i)) != null) M.splice(1, 1, tem[1]);\n\n    return M.join(\" \");\n  }\n\n  // #endregion\n}\n\n// (c) https://aurelia.io/docs/routing/configuration#pipelines\n@autoinject\nclass AuthorizeStep {\n  constructor(\n    private appConfig: AppConfig,\n    private navigate: NotAuthorizedRedirect,\n    private authInterceptor: AuthInterceptor,\n  ) {}\n\n  run(instruction: NavigationInstruction, next: Next): Promise<any> {\n    const requiresAuth = instruction.getAllInstructions().some(i => i.config.settings.auth);\n    if (!requiresAuth) {\n      return next();\n    }\n\n    if (!this.appConfig.isLoggedIn) {\n      this.navigate.saveNextRoute(instruction);\n      this.authInterceptor.logout();\n      return next.cancel(new Redirect(\"user/login\"));\n    }\n\n    const redirectUri = this.navigate.tryReturnTo();\n    if (redirectUri) {\n      return next.cancel(new Redirect(redirectUri));\n    }\n\n    return next();\n  }\n}\n","module.exports = \"<template>\\n  <require from=\\\"utils/classes/value-converters\\\"></require>\\n  <require from=\\\"components/general/toast\\\"></require>\\n  <require from=\\\"bootstrap/dist/css/bootstrap.min.css\\\"></require>\\n  <require from=\\\"flag-icon-css/css/flag-icon.min.css\\\"></require>\\n  <require from=\\\"resources/style.css\\\"></require>\\n  <require from=\\\"resources/mobile.css\\\"></require>\\n  <require from=\\\"/node_modules/bootstrap-icons/font/bootstrap-icons.css\\\"></require>\\n\\n  <toast\\n    toast-class=\\\"success-toast\\\"\\n    message-class=\\\"text-success\\\"\\n    position=\\\"end-0 top-0\\\"\\n    message=\\\"${'components.toast.titles.success' & t}\\\"></toast>\\n  <toast\\n    toast-class=\\\"error-toast\\\"\\n    message-class=\\\"text-danger\\\"\\n    position=\\\"start-0 top-0\\\"\\n    message=\\\"${'components.toast.titles.error' & t}\\\"></toast>\\n  <toast\\n    toast-class=\\\"info-toast\\\"\\n    message-class=\\\"text-info\\\"\\n    position=\\\"start-0 top-0\\\"\\n    message=\\\"${'components.toast.titles.info' & t}\\\"></toast>\\n\\n  <div class=\\\"container-xl\\\">\\n    <nav class=\\\"navbar navbar-expand-lg navbar-light\\\">\\n      <a class=\\\"navbar-brand py-0\\\" href=\\\"#\\\">\\n        <img src=\\\"/salome-group-small.png\\\" class=\\\"img-fluid logo-image\\\" />\\n      </a>\\n\\n      <button\\n        if.bind=\\\"appConfig.isLoggedIn\\\"\\n        type=\\\"button\\\"\\n        class=\\\"navbar-toggler\\\"\\n        data-bs-toggle=\\\"collapse\\\"\\n        data-bs-target=\\\"#navbar-menu\\\">\\n        <span class=\\\"navbar-toggler-icon\\\"></span>\\n      </button>\\n\\n      <div if.bind=\\\"appConfig.isLoggedIn\\\" class=\\\"collapse navbar-collapse\\\" id=\\\"navbar-menu\\\">\\n        <div class=\\\"navbar-nav ms-auto\\\">\\n          <div class=\\\"dropdown\\\">\\n            <a\\n              class=\\\"nav-item nav-link dropdown-toggle\\\"\\n              href=\\\"\\\"\\n              role=\\\"button\\\"\\n              data-bs-toggle=\\\"dropdown\\\">\\n              ${'menu.help.title' & t}\\n            </a>\\n            <div class=\\\"dropdown-menu\\\">\\n              <a class=\\\"dropdown-item\\\" href=\\\"${'menu.help.children.pricing.link' & t}\\\">\\n                ${'menu.help.children.pricing.title' & t}\\n              </a>\\n              <a class=\\\"dropdown-item\\\" route-href=\\\"route: returnIndex\\\">\\n                ${'menu.help.children.returns.title' & t}\\n              </a>\\n              <a\\n                class=\\\"dropdown-item\\\"\\n                href=\\\"${'menu.help.children.warranty.link' & t}\\\"\\n                target=\\\"_blank\\\">\\n                ${'menu.help.children.warranty.title' & t}\\n              </a>\\n              <a class=\\\"dropdown-item\\\" route-href=\\\"route: privacyIndex\\\">\\n                ${'menu.help.children.privacy.title' & t}\\n              </a>\\n              <a class=\\\"dropdown-item\\\" route-href=\\\"route: contactIndex\\\">\\n                ${'menu.help.children.contact.title' & t}\\n              </a>\\n            </div>\\n          </div>\\n\\n          <a class=\\\"nav-item nav-link\\\" route-href=\\\"route: userAccount\\\">\\n            ${'menu.settings.title' & t}\\n          </a>\\n          <a class=\\\"nav-item nav-link\\\" route-href=\\\"route: invoiceIndex\\\">\\n            ${'menu.invoices.title' & t}\\n          </a>\\n          <a class=\\\"nav-item nav-link\\\" route-href=\\\"route: orderIndex\\\">\\n            ${'menu.orders.title' & t}\\n          </a>\\n\\n          <a class=\\\"nav-item nav-link\\\" route-href=\\\"route: cartIndex\\\">\\n            ${'menu.cart.title' & t}\\n            <template\\n              if.bind=\\\"cartBadge.count > 0\\\">\\n              <span class=\\\"badge rounded-pill badge-outline-secondary\\\"> ${cartBadge.count} </span>\\n              <span class=\\\"badge rounded-pill badge-outline-secondary\\\"> ${cartBadge.totalWithoutVat | currencyFormat} </span>\\n            </template>\\n          </a>\\n        </div>\\n      </div>\\n    </nav>\\n\\n    <compose\\n      if.bind=\\\"appConfig.isLoggedIn\\\"\\n      view-model=\\\"components/product/search/search-bar\\\"></compose>\\n\\n    <main class=\\\"mt-3 mb-3\\\">\\n      <router-view></router-view>\\n    </main>\\n  </div>\\n\\n  <footer class=\\\"footer mt-auto\\\">\\n    <div class=\\\"container-xl\\\">\\n      <nav class=\\\"navbar navbar-expand-lg navbar-light\\\">\\n        <span class=\\\"text-muted text-nowrap\\\">${'footer.copyright' & t: {'year': currentYear}}</span>\\n\\n        <button\\n          type=\\\"button\\\"\\n          class=\\\"navbar-toggler\\\"\\n          data-bs-toggle=\\\"collapse\\\"\\n          data-bs-target=\\\"#navbar-footer\\\">\\n          <span class=\\\"navbar-toggler-icon\\\"></span>\\n        </button>\\n\\n        <div class=\\\"collapse navbar-collapse\\\" id=\\\"navbar-footer\\\">\\n          <div class=\\\"navbar-nav ms-auto\\\">\\n            <div class=\\\"dropup\\\">\\n              <a\\n                class=\\\"nav-item nav-link dropdown-toggle\\\"\\n                href=\\\"\\\"\\n                role=\\\"button\\\"\\n                data-bs-toggle=\\\"dropdown\\\">\\n                <span class=\\\"flag-icon ${currentLocaleClass}\\\"></span>\\n              </a>\\n              <div class=\\\"dropdown-menu\\\">\\n                <a class=\\\"dropdown-item\\\" href=\\\"#\\\" click.delegate=\\\"changeLocale('et_EE')\\\">\\n                  <span class=\\\"flag-icon flag-icon-ee\\\"></span> Eesti\\n                </a>\\n                <a class=\\\"dropdown-item\\\" href=\\\"#\\\" click.delegate=\\\"changeLocale('en_GB')\\\">\\n                  <span class=\\\"flag-icon flag-icon-gb\\\"></span> English\\n                </a>\\n                <a class=\\\"dropdown-item\\\" href=\\\"#\\\" click.delegate=\\\"changeLocale('ru_RU')\\\">\\n                  <span class=\\\"flag-icon flag-icon-ru\\\"></span> Pусский\\n                </a>\\n                <a class=\\\"dropdown-item\\\" href=\\\"#\\\" click.delegate=\\\"changeLocale('fi_FI')\\\">\\n                  <span class=\\\"flag-icon flag-icon-fi\\\"></span> Suomi\\n                </a>\\n              </div>\\n            </div>\\n\\n            <a class=\\\"nav-item nav-link\\\" href=\\\"mailto:${'footer.contact' & t}\\\">\\n              ${'footer.contact' & t}\\n            </a>\\n\\n            <a\\n              if.bind=\\\"appConfig.isLoggedIn\\\"\\n              class=\\\"nav-item nav-link\\\"\\n              href=\\\"#\\\"\\n              click.delegate=\\\"logout()\\\">\\n              ${'footer.logout' & t}\\n            </a>\\n          </div>\\n        </div>\\n      </nav>\\n    </div>\\n  </footer>\\n</template>\\n\";"],"sourceRoot":""}