{"version":3,"sources":["webpack:///./src/services/file.service.ts","webpack:///./src/components/Categories.vue","webpack:///./src/components/Categories.vue?e2a7","webpack:///./src/composables/meta.ts","webpack:///./src/components/Video.vue?bebd","webpack:///./src/composables/canonical.ts","webpack:///./src/components/AboutUs.vue","webpack:///./src/components/AboutUs.vue?ff39","webpack:///./src/components/Video.vue","webpack:///./src/components/Video.vue?9621","webpack:///./src/views/Start.vue","webpack:///./src/views/Start.vue?d972"],"names":["FileService","Api","constructor","apiConfig","super","this","getAll","bind","remove","entityType","entityId","get","then","result","data","fileId","delete","fileApi","_hoisted_1","class","_hoisted_3","_createElementVNode","xmlns","role","preserveAspectRatio","focusable","width","height","fill","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_defineComponent","__name","props","excludeIds","type","Array","default","setup","__props","rootStore","useRootStore","categories","computed","length","filter","category","includes","id","_ctx","_cache","_component_router_link","_resolveComponent","_openBlock","_createElementBlock","_unref","isLoading","_Fragment","key","_renderList","index","_createVNode","to","path","urlSlug","custom","_withCtx","navigate","onClick","_withModifiers","srcset","file","name","src","alt","_toDisplayString","description","_","__exports__","setMeta","title","document","metaDescription","querySelector","setAttribute","newMetaDescription","createElement","head","appendChild","useMeta","titleRef","ref","descriptionRef","onMounted","value","watchEffect","setCanonical","href","address","canonical","metaCanonicalValue","useCanonical","hrefRef","dontUseCanonical","removeCanonical","_hoisted_2","isShowing","toggle","_createTextVNode","_withDirectives","_vShow","_withScopeId","n","_pushScopeId","_popScopeId","files","activeIndex","videoRefs","playNextVideo","goToNextSlide","goToPreviousSlide","getComponentName","getFileSource","getVideoRef","async","res","watch","newValue","oldValue","oldVideoRef","pause","currentTime","nextTick","newVideoRef","play","_createBlock","_resolveDynamicComponent","_normalizeClass","ref_for","autoplay","muted","controls","onEnded","prefix","_createCommentVNode","Video","AboutUs","Categories"],"mappings":"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","file":"js/Start.4e70e64f.js","sourcesContent":["import { AxiosRequestConfig, AxiosResponse } from 'axios';\r\nimport { FileItem } from '../types/FileItem';\r\n\r\nimport { Api } from '../utils/api/api';\r\nimport { apiConfig } from '../utils/constants';\r\n\r\nclass FileService extends Api {\r\n public constructor(apiConfig: AxiosRequestConfig) {\r\n super(apiConfig);\r\n\r\n this.getAll = this.getAll.bind(this);\r\n this.remove = this.remove.bind(this);\r\n }\r\n\r\n public getAll(entityType: number, entityId: number): Promise> {\r\n return this.get>(`file/get/${entityType}/${entityId}`)\r\n .then((result: AxiosResponse>) => {\r\n return result.data\r\n });\r\n }\r\n\r\n public remove(entityType: number, entityId: number, fileId: number): Promise> {\r\n return this.delete(`admin/file/${entityType}/${entityId}/${fileId}`)\r\n .then((result: AxiosResponse) => {\r\n return result.data\r\n });\r\n }\r\n}\r\n\r\nexport const fileApi = new FileService(apiConfig);","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"mt-4 row gx-4 gx-lg-4 row-cols-1 row-cols-md-2 row-cols-xl-4 justify-content-center cursor-pointer\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"card h-100 shadow\" }, [\n /*#__PURE__*/_createElementVNode(\"svg\", {\n class: \"bd-placeholder-img card-img-top h-100\",\n xmlns: \"http://www.w3.org/2000/svg\",\n role: \"img\",\n \"aria-label\": \"Placeholder\",\n preserveAspectRatio: \"xMidYMid slice\",\n focusable: \"false\"\n }, [\n /*#__PURE__*/_createElementVNode(\"title\", null, \"Placeholder\"),\n /*#__PURE__*/_createElementVNode(\"rect\", {\n width: \"100%\",\n height: \"100%\",\n fill: \"#8d8f91\"\n })\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"card-body p-4 text-center\" }, [\n /*#__PURE__*/_createElementVNode(\"h4\", { class: \"card-title placeholder-glow mb-4\" }, [\n /*#__PURE__*/_createElementVNode(\"span\", { class: \"placeholder col-6 p-3\" })\n ]),\n /*#__PURE__*/_createElementVNode(\"p\", { class: \"card-text placeholder col-12 mb-2\" }),\n /*#__PURE__*/_createElementVNode(\"p\", { class: \"card-text placeholder col-10 mb-2\" }),\n /*#__PURE__*/_createElementVNode(\"p\", { class: \"card-text placeholder col-11 mb-2\" }),\n /*#__PURE__*/_createElementVNode(\"p\", { class: \"card-text placeholder col-7\" })\n ])\n], -1)\nconst _hoisted_3 = [\n _hoisted_2\n]\nconst _hoisted_4 = [\"onClick\"]\nconst _hoisted_5 = [\"srcset\"]\nconst _hoisted_6 = [\"src\", \"alt\"]\nconst _hoisted_7 = { class: \"card-body p-4\" }\nconst _hoisted_8 = { class: \"text-center\" }\nconst _hoisted_9 = { class: \"card-title\" }\nconst _hoisted_10 = { class: \"card-text\" }\n\nimport { computed, PropType } from 'vue';\r\n import { CategoryViewModel } from '@/types/CategoryViewModel';\r\n import { useRootStore } from '@/store/root.store';\r\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Categories',\n props: {\r\n excludeIds: {\r\n type: Array as PropType,\r\n default: () => [] as number[],\r\n },\r\n },\n setup(__props) {\n\nconst props = __props\n\r\n const rootStore = useRootStore();\r\n\r\n \r\n\r\n const categories = computed(() => {\r\n if (!rootStore.categories.length) {\r\n return [];\r\n }\r\n\r\n if (props.excludeIds.length) {\r\n return rootStore.categories.filter(category => !props.excludeIds.includes(category.id));\r\n }\r\n\r\n return rootStore.categories;\r\n });\r\n\r\n\nreturn (_ctx: any,_cache: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_unref(rootStore).isLoading)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, _renderList(3, (index) => {\n return _createElementVNode(\"div\", {\n class: \"col mb-5\",\n key: index\n }, _hoisted_3)\n }), 64))\n : (_openBlock(true), _createElementBlock(_Fragment, { key: 1 }, _renderList(_unref(categories), (category) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"col mb-5\",\n key: category.id\n }, [\n _createVNode(_component_router_link, {\n to: { path: category.urlSlug },\n custom: \"\"\n }, {\n default: _withCtx(({ navigate }) => [\n _createElementVNode(\"div\", {\n class: \"card h-100 shadow\",\n onClick: _withModifiers(navigate, [\"stop\"])\n }, [\n _createElementVNode(\"picture\", null, [\n _createElementVNode(\"source\", {\n srcset: `/images/${category.file.name}.webp`,\n type: \"image/webp\"\n }, null, 8, _hoisted_5),\n _createElementVNode(\"img\", {\n src: `/images/${category.file.name}.png`,\n class: \"card-img-top w-100\",\n alt: `Bild för kategori ${category.name}`\n }, null, 8, _hoisted_6)\n ]),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"h4\", _hoisted_9, _toDisplayString(category.name), 1),\n _createElementVNode(\"p\", _hoisted_10, _toDisplayString(category.description), 1)\n ])\n ])\n ], 8, _hoisted_4)\n ]),\n _: 2\n }, 1032, [\"to\"])\n ]))\n }), 128))\n ]))\n}\n}\n\n})","import script from \"./Categories.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Categories.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { ref, onMounted, watchEffect } from 'vue';\r\n\r\nexport function setMeta(title: string, description: string) {\r\n document.title = `${title}${(title.length ? ' - ' : '')}NG Hantverk - Upplev äventyret med våra handgjorda och exklusiva knivar och fodral`;\r\n const metaDescription = document.querySelector('meta[name=\"description\"]');\r\n if (metaDescription) {\r\n metaDescription.setAttribute('content', description);\r\n } else {\r\n const newMetaDescription = document.createElement('meta');\r\n newMetaDescription.setAttribute('name', 'description');\r\n newMetaDescription.setAttribute('content', description);\r\n document.head.appendChild(newMetaDescription);\r\n }\r\n}\r\n\r\nexport function useMeta(title: string, description: string) {\r\n const titleRef = ref(title);\r\n const descriptionRef = ref(description);\r\n\r\n onMounted(() => {\r\n setMeta(titleRef.value, descriptionRef.value);\r\n });\r\n\r\n watchEffect(() => {\r\n setMeta(titleRef.value, descriptionRef.value);\r\n });\r\n\r\n return {\r\n title: titleRef,\r\n description: descriptionRef,\r\n };\r\n}","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Video.vue?vue&type=style&index=0&id=019cdcbc&scoped=true&lang=css\"","import { ref, onMounted, watchEffect } from 'vue';\r\n\r\nexport function setCanonical(href: string) {\r\n const address = 'https://www.nghantverk.se' + (href.length > 0 ? `/${href}` : href);\r\n const canonical = document.querySelector('link[rel=\"canonical\"]');\r\n\r\n if (canonical) {\r\n canonical.setAttribute('href', address);\r\n } else {\r\n const metaCanonicalValue = document.createElement('link');\r\n metaCanonicalValue.setAttribute('rel', 'canonical');\r\n metaCanonicalValue.setAttribute('href', address);\r\n document.head.appendChild(metaCanonicalValue);\r\n }\r\n}\r\n\r\nexport function removeCanonical() {\r\n const canonical = document.querySelector('link[rel=\"canonical\"]');\r\n if (canonical)\r\n canonical.remove();\r\n}\r\n\r\nexport function useCanonical(href: string) {\r\n const hrefRef = ref(href);\r\n\r\n onMounted(() => {\r\n setCanonical(hrefRef.value);\r\n });\r\n\r\n watchEffect(() => {\r\n setCanonical(hrefRef.value);\r\n });\r\n\r\n return {\r\n href: hrefRef\r\n };\r\n}\r\n\r\nexport function dontUseCanonical() {\r\n removeCanonical();\r\n}","import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, withModifiers as _withModifiers, vShow as _vShow, withDirectives as _withDirectives, createTextVNode as _createTextVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"col-12 col-lg-4 mb-3\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"h1\", null, \"NG Hantverk\", -1)\nconst _hoisted_3 = { class: \"lead\" }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_5 = [\"onClick\"]\nconst _hoisted_6 = { class: \"row justify-content-center align-items-center\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"col-12 col-lg-4 mb-3\" }, [\n /*#__PURE__*/_createElementVNode(\"h4\", null, \"Jimmy\"),\n /*#__PURE__*/_createElementVNode(\"p\", { class: \"lead-sm\" }, \" Jimmy är en hängiven kniventusiast sedan barnsben. Han är passionerad för unika knivmodeller och har en djup förståelse för ergonomi, bladgeometri, stål och hur dessa faktorer påverkar knivbladens prestanda. Jimmy använder alltid en kniv i sitt arbete, vid fiske och under sina ibland extrema vildmarksäventyr. Hans kunskap och erfarenhet gör honom till en pålitlig expert när det kommer till knivars användning i olika sammanhang \")\n], -1)\nconst _hoisted_8 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"col-12 col-lg-4 mb-3\" }, [\n /*#__PURE__*/_createElementVNode(\"h4\", null, \"Micke\"),\n /*#__PURE__*/_createElementVNode(\"p\", { class: \"lead-sm\" }, \" Micke är en skicklig verktygsmakare med en gedigen bakgrund som scout och scoutledare i många år. Han är även ordförande i en skytteklubb och hans passion för friluftsliv är uppenbar. Micke är känd för att vara den första personen någonsin som vandrade runt Sverige, vilket visar på hans styrka och uthållighet. Med sin breda erfarenhet och expertis är Micke en pålitlig resurs när det gäller verktyg och utrustning för olika äventyr och aktiviteter i naturen. \")\n], -1)\nconst _hoisted_9 = [\n _hoisted_7,\n _hoisted_8\n]\n\nimport { ref, Ref } from 'vue';\r\n\r\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'AboutUs',\n setup(__props) {\n\r\n const isShowing: Ref = ref(false);\r\n\r\n function toggle(): void {\r\n isShowing.value = !isShowing.value;\r\n }\r\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"div\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"p\", _hoisted_3, [\n _createTextVNode(\" Vid Tabergs fot, i skuggan av drygt 500 års gruvdrift, finner du NG Hantverk. Det är en plats som passar oss perfekt eftersom vi jobbar lika mycket med tradition som med nytänkande. Vi tror att kombinationen av gediget hantverk och toppmoderna material kan ge våra köpare samma glädje som äldre tiders pistolsmeder i Paris när de utropade ”C'est fer de Takaberg!” (Det är järn från Taberg!). Varmt välkommen att upptäcka vad vår smedja kan göra för dig. \"),\n _hoisted_4,\n _withDirectives(_createElementVNode(\"button\", {\n type: \"button\",\n class: \"btn btn-sm btn-outline-secondary mt-3\",\n onClick: _withModifiers(toggle, [\"prevent\"])\n }, \"Läs mer\", 8, _hoisted_5), [\n [_vShow, !isShowing.value]\n ])\n ])\n ]),\n _withDirectives(_createElementVNode(\"div\", _hoisted_6, _hoisted_9, 512), [\n [_vShow, isShowing.value]\n ])\n ], 64))\n}\n}\n\n})","import script from \"./AboutUs.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AboutUs.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-019cdcbc\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n id: \"about-us--carousel\",\n class: \"carousel slide\"\n}\nconst _hoisted_2 = { class: \"carousel-inner\" }\nconst _hoisted_3 = [\"src\"]\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", {\n class: \"carousel-control-prev-icon\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"visually-hidden\" }, \"Föregående\", -1))\nconst _hoisted_7 = [\n _hoisted_5,\n _hoisted_6\n]\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", {\n class: \"carousel-control-next-icon\",\n \"aria-hidden\": \"true\"\n}, null, -1))\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"visually-hidden\" }, \"Nästa\", -1))\nconst _hoisted_10 = [\n _hoisted_8,\n _hoisted_9\n]\n\nimport { onMounted, ref, watch, nextTick } from 'vue';\r\n import { fileApi } from '@/services/file.service';\r\n import { FileItem } from '@/types/FileItem';\r\n\r\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Video',\n setup(__props) {\n\r\n const files = ref([]);\r\n const activeIndex = ref(0);\r\n const videoRefs = ref>([]);\r\n\r\n onMounted(async () => {\r\n const res = await fileApi.getAll(2, 0);\r\n files.value = res;\r\n });\r\n\r\n function playNextVideo() {\r\n activeIndex.value = (activeIndex.value + 1) % files.value.length;\r\n }\r\n\r\n function goToNextSlide() {\r\n activeIndex.value = (activeIndex.value + 1) % files.value.length;\r\n }\r\n\r\n function goToPreviousSlide() {\r\n activeIndex.value = (activeIndex.value - 1 + files.value.length) % files.value.length;\r\n }\r\n\r\n function getComponentName(index: number): string {\r\n return index === activeIndex.value ? 'video-component' : 'placeholder-component';\r\n }\r\n\r\n function getFileSource(file: FileItem): string {\r\n return `/images/${file.name}`;\r\n }\r\n\r\n function getVideoRef(index: number): string {\r\n return `videoRef-${index}`;\r\n }\r\n\r\n // Lyssna på förändringar av activeIndex och spela upp nästa video automatiskt\r\n watch(activeIndex, async (newValue, oldValue) => {\r\n const oldVideoRef = videoRefs.value[oldValue];\r\n if (oldVideoRef) {\r\n oldVideoRef.pause();\r\n oldVideoRef.currentTime = 0;\r\n }\r\n\r\n await nextTick(); // Vänta tills DOM-uppdatering är klar\r\n\r\n const newVideoRef = videoRefs.value[newValue];\r\n if (newVideoRef) {\r\n newVideoRef.play();\r\n }\r\n });\r\n\nreturn (_ctx: any,_cache: any) => {\n return (files.value.length)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n (_openBlock(), _createBlock(_resolveDynamicComponent(getComponentName(activeIndex.value)), { key: activeIndex.value }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(files.value, (file, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: index,\n class: _normalizeClass({ 'carousel-item': true, 'active': index === activeIndex.value })\n }, [\n (index === activeIndex.value)\n ? (_openBlock(), _createElementBlock(\"video\", {\n key: 0,\n ref_for: true,\n ref: getVideoRef(index),\n class: \"card-img-top mb-5 mb-md-0 rounded big-image\",\n autoplay: \"\",\n muted: \"\",\n controls: \"\",\n onEnded: playNextVideo,\n prefix: \"none\"\n }, [\n _createElementVNode(\"source\", {\n src: getFileSource(file),\n type: \"video/mp4\"\n }, null, 8, _hoisted_3)\n ], 544))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_4))\n ], 2))\n }), 128))\n ]),\n _: 1\n }))\n ]),\n _createElementVNode(\"div\", { class: \"d-flex justify-content-between\" }, [\n _createElementVNode(\"button\", {\n class: \"carousel-control-prev\",\n onClick: goToPreviousSlide\n }, _hoisted_7),\n _createElementVNode(\"button\", {\n class: \"carousel-control-next\",\n onClick: goToNextSlide\n }, _hoisted_10)\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}\n}\n\n})","import script from \"./Video.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Video.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./Video.vue?vue&type=style&index=0&id=019cdcbc&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\dev\\\\priv\\\\NGHantverk.Store\\\\NGHantverk.Store.App\\\\node_modules\\\\vue-loader-v16\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-019cdcbc\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"row\" }\nconst _hoisted_2 = { class: \"col-12 col-lg-8 mb-0 mb-md-4\" }\nconst _hoisted_3 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"row\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"col-12\" }, [\n /*#__PURE__*/_createElementVNode(\"h2\", { class: \"text-center\" }, \"Produkter\"),\n /*#__PURE__*/_createElementVNode(\"p\", { class: \"lead text-center\" }, \"Vårt fokus ligger på hållbara bruksknivar med smarta fodral, utrustade med de senaste fäst- och bärsystemen. Vi säkerställer kvalitet och exklusivitet genom att skapa egna designer och göra alla arbeten omsorgsfullt för hand. På så vis vet vi att våra produkter både motsvarar dina förväntningar och håller en livstid. För dig som söker det verkligt speciella erbjuder vi möjligheten att skapa en kniv helt efter din ide och på dina villkor, med vår kvalitetsstämpel.\")\n ])\n], -1)\n\nimport { onMounted } from 'vue';\r\n import AboutUs from '@/components/AboutUs.vue';\r\n import Video from '@/components/Video.vue';\r\n import Categories from '@/components/Categories.vue';\r\n import { useMeta } from '@/composables/meta';\r\n import { useCanonical } from '@/composables/canonical';\r\n\r\n \nexport default /*#__PURE__*/_defineComponent({\n __name: 'Start',\n setup(__props) {\n\r\n onMounted(async () => {\r\n useMeta('', 'Upptäck vårt handgjorda sortiment av knivar och skräddarsydda knivfodral. Köp unika och pålitliga verktyg för dina äventyr direkt från vår hemsida.');\r\n useCanonical('');\r\n });\r\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"section\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(Video)\n ]),\n _createVNode(AboutUs),\n _hoisted_3,\n _createVNode(Categories)\n ]))\n}\n}\n\n})","import script from \"./Start.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./Start.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__"],"sourceRoot":""}