17 changed files with 1228 additions and 2903 deletions
@ -1,7 +1,42 @@
|
||||
/*----------------------------------------*/ |
||||
/* General */ |
||||
|
||||
body { |
||||
html { |
||||
font-family: "Segoe UI", "DejaVu Sans", sans-serif; |
||||
scroll-behavior: smooth; |
||||
} |
||||
|
||||
body { |
||||
background-color: #f4f4f4; |
||||
} |
||||
|
||||
nav { |
||||
box-shadow: 0 .25rem .5rem rgba(0,0,0,.28) !important; |
||||
} |
||||
|
||||
/* Main content */ |
||||
/*----------------------------------------*/ |
||||
|
||||
.container { |
||||
margin: 56px auto 0 auto; |
||||
} |
||||
|
||||
.content { |
||||
position: relative; |
||||
min-height: calc(100vh - 104px - .5rem); |
||||
padding: 20px 20px 50px 20px; |
||||
|
||||
background-color: #fff; |
||||
} |
||||
|
||||
a:hover { |
||||
color: #818080 !important; |
||||
} |
||||
|
||||
/* Footer */ |
||||
/*----------------------------------------*/ |
||||
|
||||
footer { |
||||
text-align: center; |
||||
color: #909090; |
||||
} |
||||
|
@ -0,0 +1,28 @@
|
||||
/* eslint-disable */ |
||||
// @ts-nocheck
|
||||
// Generated by unplugin-vue-components
|
||||
// Read more: https://github.com/vuejs/core/pull/3399
|
||||
// biome-ignore lint: disable
|
||||
export {} |
||||
|
||||
/* prettier-ignore */ |
||||
declare module 'vue' { |
||||
export interface GlobalComponents { |
||||
IBi0Circle: typeof import('~icons/bi/0-circle')['default'] |
||||
IBiActivity: typeof import('~icons/bi/activity')['default'] |
||||
IFaAngellist: typeof import('~icons/fa/angellist')['default'] |
||||
IFaCheck: typeof import('~icons/fa/check')['default'] |
||||
IFaClone: typeof import('~icons/fa/clone')['default'] |
||||
IFaCoffee: typeof import('~icons/fa/coffee')['default'] |
||||
IFaCope: typeof import('~icons/fa/cope')['default'] |
||||
IFaCopy: typeof import('~icons/fa/copy')['default'] |
||||
IFaGithub: typeof import('~icons/fa/github')['default'] |
||||
IFaGitlab: typeof import('~icons/fa/gitlab')['default'] |
||||
IFaHome: typeof import('~icons/fa/home')['default'] |
||||
IFaLink: typeof import('~icons/fa/link')['default'] |
||||
IFaLinkedinSquare: typeof import('~icons/fa/linkedin-square')['default'] |
||||
IMdiAccountBox: typeof import('~icons/mdi/account-box')['default'] |
||||
RouterLink: typeof import('vue-router')['RouterLink'] |
||||
RouterView: typeof import('vue-router')['RouterView'] |
||||
} |
||||
} |
@ -1,16 +1,18 @@
|
||||
<template> |
||||
<div> |
||||
<h2 v-if="$slots.namedslot"> |
||||
<strong v-if="$slots.namedslot"> |
||||
<slot name="namedslot" mdc-unwrap="p" /> |
||||
</h2> |
||||
</strong> |
||||
<h2 v-else>Broken Slot</h2> |
||||
|
||||
<slot mdc-unwrap="p" /> |
||||
<p> |
||||
<slot mdc-unwrap="p" /> |
||||
</p> |
||||
</div> |
||||
</template> |
||||
|
||||
<script setup lang="ts"> |
||||
defineProps({ |
||||
namedslot: String, |
||||
}); |
||||
defineProps({ |
||||
namedslot: String, |
||||
}); |
||||
</script> |
||||
|
@ -1,2 +1,11 @@
|
||||
<template> |
||||
<footer class="row mb-2"> |
||||
<div class="col-12"> |
||||
© {{ year }} Rick van Vonderen |
||||
</div> |
||||
</footer> |
||||
</template> |
||||
|
||||
<script setup lang="ts"> |
||||
const year = new Date().getFullYear(); |
||||
</script> |
||||
|
@ -1,18 +0,0 @@
|
||||
<template> |
||||
adasda |
||||
<Column field="title"> |
||||
<template #header> |
||||
<span @click="toggleSorting('title')" class="p-datatable-column-title">Title |
||||
<span :class="['pi', sorting.title === 'asc' ? 'pi-arrow-circle-down' : 'pi-arrow-circle-up']"></span> |
||||
</span> |
||||
</template> |
||||
</Column> |
||||
</template> |
||||
|
||||
<script setup lang="ts"> |
||||
const sorting = defineModel<Record<string, string>>({ required: true }); |
||||
|
||||
function toggleSorting(key: string) { |
||||
sorting.value[key] = sorting.value[key] === 'asc' ? 'desc' : 'asc'; |
||||
}; |
||||
</script> |
@ -1,59 +0,0 @@
|
||||
<template> |
||||
<Form v-slot="$form" ref="formRef" :initialValues :resolver @submit="onFormSubmit" |
||||
class="flex flex-col gap-4 w-full sm:w-56"> |
||||
<!-- {{ $form }} --> |
||||
<div class="flex flex-col gap-1"> |
||||
<InputText @input="initial = false;" v-model="formData.title" name="title" type="text" placeholder="Title" |
||||
autocomplete="off" fluid /> |
||||
<Message v-if="$form.title?.invalid" severity="error" size="small" variant="simple"> |
||||
{{ $form.title.error?.message }} |
||||
</Message> |
||||
</div> |
||||
<Button :disabled="initial || !$form.valid" class="fr" type="submit" severity="secondary" label="Submit" /> |
||||
</Form> |
||||
</template> |
||||
|
||||
<script setup lang="ts"> |
||||
import { useTodoStore } from "@/stores/todoStore"; |
||||
import { todoSchema } from "@/schemas/todo"; |
||||
import { zodResolver } from '@primevue/forms/resolvers/zod'; |
||||
import { v4 as uuidv4 } from "uuid"; |
||||
|
||||
import { type FormSubmitEvent } from "@primevue/forms/form"; |
||||
|
||||
const store = useTodoStore(); |
||||
const toast = useToast(); |
||||
const resolver = zodResolver(todoSchema); |
||||
|
||||
const initial = ref(true); // makes submit button disabled |
||||
const initialValues = ref({ |
||||
title: "" |
||||
}); |
||||
const formRef = ref<HTMLElement | null>(null); |
||||
const formData = ref({ ...initialValues.value }); // copy data from initialValues |
||||
|
||||
async function onFormSubmit(e: FormSubmitEvent) { |
||||
if (e.valid) { |
||||
toast.add({ severity: "success", summary: "Todo added", life: 3000 }); |
||||
|
||||
store.todos.push({ |
||||
id: uuidv4(), |
||||
title: e.values?.title || e.states?.title.value |
||||
}); |
||||
|
||||
// Reset the form |
||||
initial.value = true; |
||||
formData.value = { ...initialValues.value }; // copy data from initialValues |
||||
} |
||||
else { |
||||
toast.add({ severity: "error", summary: "Invalid request", life: 3000 }); |
||||
} |
||||
}; |
||||
|
||||
</script> |
||||
|
||||
<style scoped> |
||||
.fr { |
||||
float: right; |
||||
} |
||||
</style> |
@ -1,94 +0,0 @@
|
||||
<template> |
||||
<div class="card"> |
||||
<ConfirmDialog></ConfirmDialog> |
||||
<DataTable :value="computedTodos" :lazy="true" tableStyle="min-width: 50rem" removableSort |
||||
:sortMode="'multiple'" v-model:multiSortMeta="multiSortMeta"> |
||||
<Column field="number" header="#" /> |
||||
<Column field="id" header="ID" sortable /> |
||||
<Column field="title" header="Title" sortable /> |
||||
<Column header="Modifier"> |
||||
<template #body="slotProps"> |
||||
<a @click="removeTodo(slotProps.data.id)" v-tooltip.top="'Delete'" class="pointer"> |
||||
<span class="pi pi-trash" style="color: var(--p-red-600);"></span> |
||||
</a> |
||||
</template> |
||||
</Column> |
||||
</DataTable> |
||||
</div> |
||||
</template> |
||||
|
||||
<script setup lang="ts"> |
||||
import { useConfirm } from "primevue/useconfirm"; |
||||
import { useToast } from "primevue/usetoast"; |
||||
import { useTodoStore } from "@/stores/todoStore"; |
||||
|
||||
import type { DataTableSortMeta } from "primevue/datatable"; |
||||
import type { Todo } from "@/schemas/todo"; |
||||
|
||||
const confirm = useConfirm(); |
||||
const store = useTodoStore(); |
||||
const toast = useToast(); |
||||
|
||||
// Reactive bindings for sorting |
||||
const multiSortMeta = ref<DataTableSortMeta[]>([]); |
||||
|
||||
function sortTodos(): Todo[] { |
||||
let todos: Todo[] = JSON.parse(JSON.stringify(store.todos)); // deep copy |
||||
|
||||
// Loop in reverse order to apply the sorting correctly |
||||
for (let i = multiSortMeta.value.length - 1; i >= 0; i--) { |
||||
|
||||
const sort: DataTableSortMeta = multiSortMeta.value[i]; |
||||
const value = (item: Todo): string => { |
||||
if (typeof sort.field === "string") { |
||||
return item[sort.field as keyof Todo] || ""; |
||||
} |
||||
else if (typeof sort.field === "function") { |
||||
return sort.field(item) || ""; |
||||
} |
||||
|
||||
return ""; |
||||
}; |
||||
|
||||
todos.sort((a, b) => sort.order! * value(a).localeCompare(value(b))); |
||||
} |
||||
|
||||
return todos; |
||||
} |
||||
|
||||
const computedTodos = computed(() => { |
||||
return sortTodos().map((todo, index) => ({ |
||||
number: index + 1, |
||||
...todo |
||||
})); |
||||
}); |
||||
|
||||
const removeTodo = (id: String) => { |
||||
confirm.require({ |
||||
message: "Do you want to delete this todo?", |
||||
header: "Confirmation", |
||||
icon: "pi pi-info-circle", |
||||
rejectLabel: "Cancel", |
||||
rejectProps: { |
||||
label: "Cancel", |
||||
severity: "secondary", |
||||
outlined: true |
||||
}, |
||||
acceptProps: { |
||||
label: "Delete", |
||||
severity: "danger" |
||||
}, |
||||
accept: () => { |
||||
toast.add({ severity: "info", summary: "Confirmed", detail: "Todo deleted", life: 3000 }); |
||||
store.todos = store.todos.filter(todo => todo.id !== id); |
||||
}, |
||||
reject: () => {} |
||||
}); |
||||
}; |
||||
</script> |
||||
|
||||
<style scoped> |
||||
.pointer { |
||||
cursor: pointer; |
||||
} |
||||
</style> |
@ -1,5 +1,13 @@
|
||||
<template> |
||||
<SharedHeader /> |
||||
<slot /> |
||||
<SharedFooter /> |
||||
<div class="container"> |
||||
<div class="row"> |
||||
<div class="col-12"> |
||||
<div class="content shadow p-4 mb-4"> |
||||
<slot /> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<SharedFooter /> |
||||
</div> |
||||
</template> |
||||
|
@ -1,18 +1,185 @@
|
||||
<template> |
||||
<TodoBrowse /> |
||||
<br> |
||||
<TodoAdd /> |
||||
<br> |
||||
<Button @click="showToast()" type="button">Toast</Button> |
||||
</template> |
||||
<ExampleComponent> |
||||
<template v-slot:namedslot> |
||||
<h1>named slot</h1> |
||||
</template> |
||||
default slot goes here |
||||
</ExampleComponent> |
||||
|
||||
<ExampleComponent> |
||||
<template #namedslot> |
||||
<h1>named slot</h1> |
||||
</template> |
||||
default slot goes here |
||||
</ExampleComponent> |
||||
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris eget |
||||
nibh eget mi interdum porta eu at eros. Integer nec magna ligula. |
||||
Nulla turpis turpis, vulputate in gravida ac, euismod ullamcorper |
||||
mi. Pellentesque ornare leo lorem, eu mollis nisi congue feugiat. |
||||
Vestibulum eget interdum sem, ut eleifend quam. Sed cursus consequat |
||||
ex, quis sodales nunc gravida faucibus. Fusce et velit sed turpis |
||||
accumsan interdum sed ut enim. Suspendisse vehicula mi ac tellus |
||||
fermentum feugiat. Nullam volutpat tempor nunc, ac tincidunt nisi. |
||||
Sed varius est a nisi lobortis, vel gravida dui efficitur. Vivamus |
||||
in ipsum quis mi bibendum venenatis ac sed erat. Pellentesque id |
||||
ligula sapien. Vivamus elit mauris, volutpat eu venenatis ac, |
||||
condimentum et velit. Morbi ullamcorper tellus non magna faucibus, |
||||
et molestie erat euismod. |
||||
|
||||
Ut posuere libero sed finibus bibendum. Integer non est eu sapien |
||||
gravida fringilla. Aliquam lobortis, ipsum in volutpat ullamcorper, |
||||
nunc augue consequat risus, id ultrices diam erat eu enim. Cras at |
||||
nibh turpis. Donec facilisis massa ante, et volutpat ante faucibus |
||||
nec. Nullam at dictum erat, eu iaculis nibh. Integer ac velit eget |
||||
dolor consequat tristique. Praesent interdum nisi eget libero |
||||
euismod congue ac vitae mi. Aliquam in ex quam. Sed id nisi in diam |
||||
lacinia dignissim a dapibus magna. Vivamus vestibulum suscipit |
||||
sapien. Aenean luctus orci at hendrerit rhoncus. Nam nec ligula nec |
||||
justo pellentesque finibus vitae id elit. |
||||
|
||||
Cras posuere neque at pharetra lacinia. Etiam id suscipit dolor, |
||||
quis ullamcorper diam. Donec semper feugiat risus, sit amet maximus |
||||
risus lacinia in. Aenean auctor iaculis dui, et commodo ex |
||||
consectetur ac. Morbi elementum, est eget condimentum placerat, |
||||
sapien felis molestie neque, cursus tempus purus lectus at eros. Nam |
||||
in lorem eu magna elementum viverra ut nec lorem. Fusce auctor arcu |
||||
sodales nibh iaculis ultrices. Nunc mi elit, pulvinar ut quam eu, |
||||
iaculis gravida mauris. Sed ultrices, orci vitae pretium |
||||
condimentum, felis dolor auctor velit, vel viverra nulla lacus vel |
||||
lectus. Cras eros turpis, dignissim sit amet rutrum gravida, |
||||
placerat non nulla. |
||||
|
||||
Curabitur at sodales lectus, vulputate accumsan tortor. Duis in |
||||
efficitur ex. Mauris imperdiet nibh urna, eu elementum erat |
||||
elementum a. Curabitur id magna ac risus euismod aliquet. Nullam |
||||
hendrerit gravida nisl, ac sodales nibh tempor mattis. Orci varius |
||||
natoque penatibus et magnis dis parturient montes, nascetur |
||||
ridiculus mus. Aenean viverra semper sapien. Nulla finibus nec metus |
||||
id molestie. Proin scelerisque venenatis enim, et maximus velit |
||||
imperdiet vel. Vestibulum sit amet nisi vel justo pharetra efficitur |
||||
sit amet ac elit. Donec feugiat id ante sit amet fermentum. |
||||
Pellentesque rhoncus ultricies erat, sit amet ultrices magna |
||||
condimentum ut. Donec vulputate efficitur augue a placerat. |
||||
|
||||
Integer pulvinar erat ut ipsum ultrices, in posuere urna rhoncus. |
||||
Sed vestibulum nisl a magna volutpat, quis sodales leo vehicula. |
||||
Morbi tincidunt urna sed nisl feugiat, vel commodo nulla tincidunt. |
||||
Cras gravida massa et rutrum imperdiet. Proin eget iaculis urna. In |
||||
hac habitasse platea dictumst. Nullam consectetur ante sit amet |
||||
tortor ornare porttitor. Duis quis eros lorem. Morbi pulvinar |
||||
elementum purus, eget eleifend felis eleifend luctus. Sed iaculis |
||||
feugiat ligula, a hendrerit dui aliquet at. Aliquam erat volutpat. |
||||
Suspendisse id volutpat nisl, id iaculis ex. Morbi vehicula tellus a |
||||
arcu efficitur, et vehicula lectus vestibulum. Praesent sed |
||||
imperdiet dolor. |
||||
|
||||
<script setup lang="ts"> |
||||
import { useToast } from "primevue/usetoast"; |
||||
Nunc condimentum odio nec placerat auctor. Nam posuere condimentum |
||||
velit quis porttitor. Phasellus vitae enim et ex sodales lobortis |
||||
vel quis sapien. Maecenas at venenatis ante, sit amet elementum |
||||
risus. In lorem magna, fringilla fermentum diam sit amet, imperdiet |
||||
sollicitudin dui. Quisque eros magna, auctor ac hendrerit venenatis, |
||||
porta a lacus. Donec neque ligula, euismod nec mauris et, varius |
||||
commodo dolor. Etiam pharetra libero massa, eu congue metus |
||||
venenatis et. Nullam eu efficitur ligula. Suspendisse at scelerisque |
||||
libero, nec consequat nisl. In dignissim finibus nisl, volutpat |
||||
efficitur tellus scelerisque vitae. Phasellus quam mauris, bibendum |
||||
ac pretium nec, venenatis eget ipsum. |
||||
|
||||
const toast = useToast(); |
||||
Fusce eu risus porttitor eros venenatis ornare vel nec dui. Integer |
||||
feugiat non diam a molestie. Donec convallis turpis at orci |
||||
lobortis, id bibendum turpis posuere. Aenean quis lacus elementum, |
||||
condimentum elit ut, eleifend tortor. Ut dapibus ut nibh nec |
||||
pharetra. Suspendisse quis pulvinar tortor, in congue sapien. In hac |
||||
habitasse platea dictumst. Pellentesque tincidunt blandit tellus, in |
||||
mattis nulla luctus sit amet. Aliquam erat volutpat. Nunc elit |
||||
tortor, sagittis ut porta eleifend, congue quis orci. Nam a turpis |
||||
eu nulla sagittis ullamcorper eu vitae lectus. Vestibulum bibendum |
||||
vel mi vel gravida. |
||||
|
||||
async function showToast() { |
||||
toast.add({ severity: "success", summary: "This is a toast", detail: "Wow!", life: 3000 }); |
||||
} |
||||
Curabitur non maximus tortor. Aliquam ac est et enim vestibulum |
||||
cursus ut et magna. Class aptent taciti sociosqu ad litora torquent |
||||
per conubia nostra, per inceptos himenaeos. Sed nec nulla non ex |
||||
fringilla fringilla. Praesent accumsan eros tellus, ac venenatis |
||||
eros maximus in. Etiam ipsum felis, congue ut risus in, feugiat |
||||
ornare ante. Aliquam sed fringilla lectus. Aenean semper, odio vel |
||||
ultricies laoreet, est erat faucibus mi, sit amet tincidunt nunc dui |
||||
sit amet arcu. Proin feugiat augue diam, sed rutrum dui congue ac. |
||||
Nullam laoreet neque nunc, sed volutpat justo maximus ac. Sed eu |
||||
turpis aliquam, laoreet orci vitae, dictum ipsum. Quisque at |
||||
placerat orci. Suspendisse vulputate, erat eget pretium placerat, |
||||
metus magna consectetur metus, id rutrum neque est sed turpis. Nulla |
||||
pretium et lacus vel cursus. |
||||
|
||||
</script> |
||||
Maecenas quis libero mollis, commodo mi id, placerat nisl. Sed a |
||||
neque vel dui faucibus semper. Duis ullamcorper, libero at porta |
||||
convallis, lectus odio malesuada nunc, a tempus turpis ipsum at ex. |
||||
Nullam enim leo, hendrerit a quam vel, finibus auctor dui. Mauris |
||||
quis sem in nulla ornare pharetra vitae ut augue. Vivamus quis |
||||
tincidunt tortor, at imperdiet augue. Mauris augue augue, varius |
||||
vitae sapien et, efficitur rhoncus mi. Orci varius natoque penatibus |
||||
et magnis dis parturient montes, nascetur ridiculus mus. Cras ac |
||||
enim at est molestie elementum. |
||||
|
||||
Duis viverra quam ut nibh sodales accumsan. In hac habitasse platea |
||||
dictumst. Sed a eros id elit malesuada ultrices. Quisque et diam |
||||
justo. Pellentesque eu placerat ante, sit amet sagittis sapien. Nam |
||||
sed sollicitudin urna. Proin non libero ut metus eleifend tempus. |
||||
Sed in augue ligula. Suspendisse potenti. In eu fermentum augue. |
||||
Aliquam sem ex, congue a condimentum ac, maximus a est. Integer in |
||||
dui non lectus molestie auctor. Nullam mollis pellentesque semper. |
||||
Etiam id neque facilisis, tristique sem et, porttitor purus. |
||||
Praesent aliquam, nisi vel porttitor blandit, risus felis lobortis |
||||
arcu, eu porttitor orci enim nec tortor. Maecenas id ante eget nisl |
||||
pulvinar feugiat ac vel ante. |
||||
|
||||
Nam porttitor eleifend nisl. Vivamus ac aliquam lacus. Suspendisse |
||||
facilisis arcu vel consectetur efficitur. Fusce sodales mollis |
||||
auctor. Aenean nec sem a elit lobortis maximus tincidunt ac lorem. |
||||
Proin dolor quam, volutpat id aliquet eu, faucibus ut urna. Quisque |
||||
orci eros, blandit ut consequat vitae, convallis egestas libero. |
||||
Nunc interdum elit id dui congue consequat. Maecenas volutpat odio |
||||
diam. In tincidunt efficitur ultrices. Orci varius natoque penatibus |
||||
et magnis dis parturient montes, nascetur ridiculus mus. Mauris eget |
||||
faucibus leo. Cras rhoncus accumsan ante nec tempor. Class aptent |
||||
taciti sociosqu ad litora torquent per conubia nostra, per inceptos |
||||
himenaeos. |
||||
|
||||
Cras sit amet blandit mi. Cras ac mi pulvinar, aliquet ex quis, |
||||
mollis nisi. Duis a interdum libero. Vivamus sit amet felis in ante |
||||
cursus gravida eget quis lectus. Praesent vehicula tortor accumsan |
||||
lectus pellentesque, in facilisis nisi fermentum. Mauris faucibus |
||||
vulputate sapien non semper. Vestibulum tristique interdum dolor, id |
||||
accumsan dolor malesuada et. Donec a porta augue. |
||||
|
||||
Nunc eu urna quis nulla consequat sagittis. Nullam eleifend |
||||
tincidunt sapien in mattis. Praesent faucibus nibh at tortor |
||||
malesuada, ut lobortis nisi pulvinar. Morbi congue ullamcorper |
||||
ipsum, nec accumsan est imperdiet eu. Aenean sit amet finibus erat, |
||||
quis porta felis. Sed sollicitudin erat nec consequat faucibus. Nam |
||||
eleifend rutrum orci at commodo. Quisque est mi, gravida ut ultrices |
||||
sit amet, hendrerit quis velit. Aenean dignissim consequat magna, |
||||
non ornare lectus facilisis eu. |
||||
|
||||
Maecenas vel risus fringilla, fermentum lacus vel, laoreet leo. Sed |
||||
ultricies, odio id ullamcorper consectetur, elit massa maximus |
||||
ligula, vitae lacinia libero est sed justo. Integer eget lectus eu |
||||
augue iaculis egestas. Nullam feugiat nisl metus, quis mollis dolor |
||||
suscipit at. Nulla ac nulla ultricies, fermentum turpis sit amet, |
||||
aliquam augue. Nulla quis vulputate nisi. Morbi dolor lectus, |
||||
lacinia vitae leo id, fringilla porttitor sapien. |
||||
|
||||
Donec vestibulum, est sit amet auctor vestibulum, eros orci iaculis |
||||
lacus, a efficitur lectus odio non mi. Nullam cursus purus vitae |
||||
ante cursus, sed pulvinar magna condimentum. Suspendisse dignissim |
||||
lorem non lacus cursus, quis lacinia eros semper. Integer aliquam |
||||
felis iaculis sollicitudin vestibulum. Pellentesque ornare mi quam, |
||||
ac pellentesque mi molestie vel. Mauris vel sapien ultricies mauris |
||||
hendrerit vestibulum in at ligula. Morbi id velit vitae libero |
||||
molestie elementum. Vivamus maximus orci vel ante sodales, ut |
||||
pharetra erat egestas. Vivamus lacinia congue purus, nec volutpat |
||||
felis pulvinar egestas. Nam blandit venenatis aliquam. Nullam a |
||||
lorem et est sollicitudin pretium sed eget ex. Vivamus a quam est. |
||||
Aliquam tristique volutpat magna, aliquet volutpat lorem fermentum |
||||
sagittis. |
||||
</template> |
||||
|
@ -1,4 +1,8 @@
|
||||
{ |
||||
// https://nuxt.com/docs/guide/concepts/typescript |
||||
"extends": "./.nuxt/tsconfig.json" |
||||
// https://nuxt.com/docs/guide/concepts/typescript |
||||
"extends": "./.nuxt/tsconfig.json", |
||||
"include": ["components.d.ts"], |
||||
"compilerOptions": { |
||||
"types": ["unplugin-icons/types/vue"] |
||||
} |
||||
} |
||||
|
Loading…
Reference in new issue