feat(frontend): layout header + drawer + router (9 routes)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,16 @@
|
||||
<template>
|
||||
<RouterView />
|
||||
<AppHeader @toggle-drawer="drawerOpen = !drawerOpen" />
|
||||
<AppDrawer :open="drawerOpen" @close="drawerOpen = false" />
|
||||
<main class="pt-14 min-h-screen">
|
||||
<RouterView />
|
||||
</main>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
import { RouterView } from 'vue-router'
|
||||
import AppHeader from '@/components/AppHeader.vue'
|
||||
import AppDrawer from '@/components/AppDrawer.vue'
|
||||
|
||||
const drawerOpen = ref(false)
|
||||
</script>
|
||||
|
||||
73
frontend/src/App.vue.js
Normal file
73
frontend/src/App.vue.js
Normal file
@@ -0,0 +1,73 @@
|
||||
/// <reference types="../node_modules/.vue-global-types/vue_3.5_0_0_0.d.ts" />
|
||||
import { ref } from 'vue';
|
||||
import { RouterView } from 'vue-router';
|
||||
import AppHeader from '@/components/AppHeader.vue';
|
||||
import AppDrawer from '@/components/AppDrawer.vue';
|
||||
const drawerOpen = ref(false);
|
||||
debugger; /* PartiallyEnd: #3632/scriptSetup.vue */
|
||||
const __VLS_ctx = {};
|
||||
let __VLS_components;
|
||||
let __VLS_directives;
|
||||
/** @type {[typeof AppHeader, ]} */ ;
|
||||
// @ts-ignore
|
||||
const __VLS_0 = __VLS_asFunctionalComponent(AppHeader, new AppHeader({
|
||||
...{ 'onToggleDrawer': {} },
|
||||
}));
|
||||
const __VLS_1 = __VLS_0({
|
||||
...{ 'onToggleDrawer': {} },
|
||||
}, ...__VLS_functionalComponentArgsRest(__VLS_0));
|
||||
let __VLS_3;
|
||||
let __VLS_4;
|
||||
let __VLS_5;
|
||||
const __VLS_6 = {
|
||||
onToggleDrawer: (...[$event]) => {
|
||||
__VLS_ctx.drawerOpen = !__VLS_ctx.drawerOpen;
|
||||
}
|
||||
};
|
||||
var __VLS_2;
|
||||
/** @type {[typeof AppDrawer, ]} */ ;
|
||||
// @ts-ignore
|
||||
const __VLS_7 = __VLS_asFunctionalComponent(AppDrawer, new AppDrawer({
|
||||
...{ 'onClose': {} },
|
||||
open: (__VLS_ctx.drawerOpen),
|
||||
}));
|
||||
const __VLS_8 = __VLS_7({
|
||||
...{ 'onClose': {} },
|
||||
open: (__VLS_ctx.drawerOpen),
|
||||
}, ...__VLS_functionalComponentArgsRest(__VLS_7));
|
||||
let __VLS_10;
|
||||
let __VLS_11;
|
||||
let __VLS_12;
|
||||
const __VLS_13 = {
|
||||
onClose: (...[$event]) => {
|
||||
__VLS_ctx.drawerOpen = false;
|
||||
}
|
||||
};
|
||||
var __VLS_9;
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.main, __VLS_intrinsicElements.main)({
|
||||
...{ class: "pt-14 min-h-screen" },
|
||||
});
|
||||
const __VLS_14 = {}.RouterView;
|
||||
/** @type {[typeof __VLS_components.RouterView, ]} */ ;
|
||||
// @ts-ignore
|
||||
const __VLS_15 = __VLS_asFunctionalComponent(__VLS_14, new __VLS_14({}));
|
||||
const __VLS_16 = __VLS_15({}, ...__VLS_functionalComponentArgsRest(__VLS_15));
|
||||
/** @type {__VLS_StyleScopedClasses['pt-14']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['min-h-screen']} */ ;
|
||||
var __VLS_dollars;
|
||||
const __VLS_self = (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {
|
||||
RouterView: RouterView,
|
||||
AppHeader: AppHeader,
|
||||
AppDrawer: AppDrawer,
|
||||
drawerOpen: drawerOpen,
|
||||
};
|
||||
},
|
||||
});
|
||||
export default (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
; /* PartiallyEnd: #4569/main.vue */
|
||||
4
frontend/src/api/client.js
Normal file
4
frontend/src/api/client.js
Normal file
@@ -0,0 +1,4 @@
|
||||
import axios from 'axios';
|
||||
export default axios.create({
|
||||
baseURL: import.meta.env.VITE_API_URL ?? '',
|
||||
});
|
||||
11
frontend/src/api/gardens.js
Normal file
11
frontend/src/api/gardens.js
Normal file
@@ -0,0 +1,11 @@
|
||||
import client from './client';
|
||||
export const gardensApi = {
|
||||
list: () => client.get('/api/gardens').then(r => r.data),
|
||||
get: (id) => client.get(`/api/gardens/${id}`).then(r => r.data),
|
||||
create: (g) => client.post('/api/gardens', g).then(r => r.data),
|
||||
update: (id, g) => client.put(`/api/gardens/${id}`, g).then(r => r.data),
|
||||
delete: (id) => client.delete(`/api/gardens/${id}`),
|
||||
cells: (id) => client.get(`/api/gardens/${id}/cells`).then(r => r.data),
|
||||
measurements: (id) => client.get(`/api/gardens/${id}/measurements`).then(r => r.data),
|
||||
addMeasurement: (id, m) => client.post(`/api/gardens/${id}/measurements`, m).then(r => r.data),
|
||||
};
|
||||
10
frontend/src/api/plantings.js
Normal file
10
frontend/src/api/plantings.js
Normal file
@@ -0,0 +1,10 @@
|
||||
import client from './client';
|
||||
export const plantingsApi = {
|
||||
list: () => client.get('/api/plantings').then(r => r.data),
|
||||
get: (id) => client.get(`/api/plantings/${id}`).then(r => r.data),
|
||||
create: (p) => client.post('/api/plantings', p).then(r => r.data),
|
||||
update: (id, p) => client.put(`/api/plantings/${id}`, p).then(r => r.data),
|
||||
delete: (id) => client.delete(`/api/plantings/${id}`),
|
||||
events: (id) => client.get(`/api/plantings/${id}/events`).then(r => r.data),
|
||||
addEvent: (id, e) => client.post(`/api/plantings/${id}/events`, e).then(r => r.data),
|
||||
};
|
||||
8
frontend/src/api/tasks.js
Normal file
8
frontend/src/api/tasks.js
Normal file
@@ -0,0 +1,8 @@
|
||||
import client from './client';
|
||||
export const tasksApi = {
|
||||
list: (params) => client.get('/api/tasks', { params }).then(r => r.data),
|
||||
get: (id) => client.get(`/api/tasks/${id}`).then(r => r.data),
|
||||
create: (t) => client.post('/api/tasks', t).then(r => r.data),
|
||||
update: (id, t) => client.put(`/api/tasks/${id}`, t).then(r => r.data),
|
||||
delete: (id) => client.delete(`/api/tasks/${id}`),
|
||||
};
|
||||
8
frontend/src/api/varieties.js
Normal file
8
frontend/src/api/varieties.js
Normal file
@@ -0,0 +1,8 @@
|
||||
import client from './client';
|
||||
export const varietiesApi = {
|
||||
list: () => client.get('/api/varieties').then(r => r.data),
|
||||
get: (id) => client.get(`/api/varieties/${id}`).then(r => r.data),
|
||||
create: (v) => client.post('/api/varieties', v).then(r => r.data),
|
||||
update: (id, v) => client.put(`/api/varieties/${id}`, v).then(r => r.data),
|
||||
delete: (id) => client.delete(`/api/varieties/${id}`),
|
||||
};
|
||||
36
frontend/src/components/AppDrawer.vue
Normal file
36
frontend/src/components/AppDrawer.vue
Normal file
@@ -0,0 +1,36 @@
|
||||
<template>
|
||||
<Transition name="slide">
|
||||
<div v-if="open" class="fixed inset-0 z-40 flex md:hidden" @click.self="$emit('close')">
|
||||
<nav class="bg-bg-hard w-64 h-full p-6 flex flex-col gap-1 border-r border-bg-soft shadow-2xl">
|
||||
<span class="text-green font-bold text-xl mb-6">🌿 Jardin</span>
|
||||
<RouterLink
|
||||
v-for="l in links" :key="l.to" :to="l.to"
|
||||
class="text-text-muted hover:text-text py-2 px-3 rounded-lg text-sm transition-colors"
|
||||
active-class="bg-bg-soft text-green"
|
||||
@click="$emit('close')"
|
||||
>{{ l.label }}</RouterLink>
|
||||
</nav>
|
||||
</div>
|
||||
</Transition>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { RouterLink } from 'vue-router'
|
||||
defineProps<{ open: boolean }>()
|
||||
defineEmits(['close'])
|
||||
const links = [
|
||||
{ to: '/', label: 'Dashboard' },
|
||||
{ to: '/jardins', label: 'Jardins' },
|
||||
{ to: '/varietes', label: 'Variétés' },
|
||||
{ to: '/plantations', label: 'Plantations' },
|
||||
{ to: '/taches', label: 'Tâches' },
|
||||
{ to: '/planning', label: 'Planning' },
|
||||
{ to: '/lunaire', label: 'Calendrier lunaire' },
|
||||
{ to: '/reglages', label: 'Réglages' },
|
||||
]
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.slide-enter-active, .slide-leave-active { transition: opacity 0.2s; }
|
||||
.slide-enter-from, .slide-leave-to { opacity: 0; }
|
||||
</style>
|
||||
123
frontend/src/components/AppDrawer.vue.js
Normal file
123
frontend/src/components/AppDrawer.vue.js
Normal file
@@ -0,0 +1,123 @@
|
||||
import { RouterLink } from 'vue-router';
|
||||
const __VLS_props = defineProps();
|
||||
const __VLS_emit = defineEmits(['close']);
|
||||
const links = [
|
||||
{ to: '/', label: 'Dashboard' },
|
||||
{ to: '/jardins', label: 'Jardins' },
|
||||
{ to: '/varietes', label: 'Variétés' },
|
||||
{ to: '/plantations', label: 'Plantations' },
|
||||
{ to: '/taches', label: 'Tâches' },
|
||||
{ to: '/planning', label: 'Planning' },
|
||||
{ to: '/lunaire', label: 'Calendrier lunaire' },
|
||||
{ to: '/reglages', label: 'Réglages' },
|
||||
];
|
||||
debugger; /* PartiallyEnd: #3632/scriptSetup.vue */
|
||||
const __VLS_ctx = {};
|
||||
let __VLS_components;
|
||||
let __VLS_directives;
|
||||
// CSS variable injection
|
||||
// CSS variable injection end
|
||||
const __VLS_0 = {}.Transition;
|
||||
/** @type {[typeof __VLS_components.Transition, typeof __VLS_components.Transition, ]} */ ;
|
||||
// @ts-ignore
|
||||
const __VLS_1 = __VLS_asFunctionalComponent(__VLS_0, new __VLS_0({
|
||||
name: "slide",
|
||||
}));
|
||||
const __VLS_2 = __VLS_1({
|
||||
name: "slide",
|
||||
}, ...__VLS_functionalComponentArgsRest(__VLS_1));
|
||||
__VLS_3.slots.default;
|
||||
if (__VLS_ctx.open) {
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({
|
||||
...{ onClick: (...[$event]) => {
|
||||
if (!(__VLS_ctx.open))
|
||||
return;
|
||||
__VLS_ctx.$emit('close');
|
||||
} },
|
||||
...{ class: "fixed inset-0 z-40 flex md:hidden" },
|
||||
});
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.nav, __VLS_intrinsicElements.nav)({
|
||||
...{ class: "bg-bg-hard w-64 h-full p-6 flex flex-col gap-1 border-r border-bg-soft shadow-2xl" },
|
||||
});
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({
|
||||
...{ class: "text-green font-bold text-xl mb-6" },
|
||||
});
|
||||
for (const [l] of __VLS_getVForSourceType((__VLS_ctx.links))) {
|
||||
const __VLS_4 = {}.RouterLink;
|
||||
/** @type {[typeof __VLS_components.RouterLink, typeof __VLS_components.RouterLink, ]} */ ;
|
||||
// @ts-ignore
|
||||
const __VLS_5 = __VLS_asFunctionalComponent(__VLS_4, new __VLS_4({
|
||||
...{ 'onClick': {} },
|
||||
key: (l.to),
|
||||
to: (l.to),
|
||||
...{ class: "text-text-muted hover:text-text py-2 px-3 rounded-lg text-sm transition-colors" },
|
||||
activeClass: "bg-bg-soft text-green",
|
||||
}));
|
||||
const __VLS_6 = __VLS_5({
|
||||
...{ 'onClick': {} },
|
||||
key: (l.to),
|
||||
to: (l.to),
|
||||
...{ class: "text-text-muted hover:text-text py-2 px-3 rounded-lg text-sm transition-colors" },
|
||||
activeClass: "bg-bg-soft text-green",
|
||||
}, ...__VLS_functionalComponentArgsRest(__VLS_5));
|
||||
let __VLS_8;
|
||||
let __VLS_9;
|
||||
let __VLS_10;
|
||||
const __VLS_11 = {
|
||||
onClick: (...[$event]) => {
|
||||
if (!(__VLS_ctx.open))
|
||||
return;
|
||||
__VLS_ctx.$emit('close');
|
||||
}
|
||||
};
|
||||
__VLS_7.slots.default;
|
||||
(l.label);
|
||||
var __VLS_7;
|
||||
}
|
||||
}
|
||||
var __VLS_3;
|
||||
/** @type {__VLS_StyleScopedClasses['fixed']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['inset-0']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['z-40']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['flex']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['md:hidden']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['bg-bg-hard']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['w-64']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['h-full']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['p-6']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['flex']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['flex-col']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['gap-1']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['border-r']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['shadow-2xl']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-green']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['font-bold']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-xl']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['mb-6']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['hover:text-text']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['py-2']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['px-3']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['rounded-lg']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-sm']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['transition-colors']} */ ;
|
||||
var __VLS_dollars;
|
||||
const __VLS_self = (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {
|
||||
RouterLink: RouterLink,
|
||||
links: links,
|
||||
};
|
||||
},
|
||||
emits: {},
|
||||
__typeProps: {},
|
||||
});
|
||||
export default (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
emits: {},
|
||||
__typeProps: {},
|
||||
});
|
||||
; /* PartiallyEnd: #4569/main.vue */
|
||||
28
frontend/src/components/AppHeader.vue
Normal file
28
frontend/src/components/AppHeader.vue
Normal file
@@ -0,0 +1,28 @@
|
||||
<template>
|
||||
<header class="fixed top-0 left-0 right-0 z-50 bg-bg-hard border-b border-bg-soft h-14 flex items-center px-4 gap-4">
|
||||
<button class="md:hidden text-text-muted hover:text-text text-xl leading-none" @click="$emit('toggle-drawer')">☰</button>
|
||||
<RouterLink to="/" class="text-green font-bold text-lg tracking-wide">🌿 Jardin</RouterLink>
|
||||
<nav class="hidden md:flex gap-5 ml-4">
|
||||
<RouterLink
|
||||
v-for="l in links" :key="l.to" :to="l.to"
|
||||
class="text-text-muted hover:text-text transition-colors text-sm"
|
||||
active-class="text-green font-semibold"
|
||||
>{{ l.label }}</RouterLink>
|
||||
</nav>
|
||||
</header>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { RouterLink } from 'vue-router'
|
||||
defineEmits(['toggle-drawer'])
|
||||
const links = [
|
||||
{ to: '/', label: 'Dashboard' },
|
||||
{ to: '/jardins', label: 'Jardins' },
|
||||
{ to: '/varietes', label: 'Variétés' },
|
||||
{ to: '/plantations', label: 'Plantations' },
|
||||
{ to: '/taches', label: 'Tâches' },
|
||||
{ to: '/planning', label: 'Planning' },
|
||||
{ to: '/lunaire', label: 'Lunaire' },
|
||||
{ to: '/reglages', label: 'Réglages' },
|
||||
]
|
||||
</script>
|
||||
109
frontend/src/components/AppHeader.vue.js
Normal file
109
frontend/src/components/AppHeader.vue.js
Normal file
@@ -0,0 +1,109 @@
|
||||
/// <reference types="../../node_modules/.vue-global-types/vue_3.5_0_0_0.d.ts" />
|
||||
import { RouterLink } from 'vue-router';
|
||||
const __VLS_emit = defineEmits(['toggle-drawer']);
|
||||
const links = [
|
||||
{ to: '/', label: 'Dashboard' },
|
||||
{ to: '/jardins', label: 'Jardins' },
|
||||
{ to: '/varietes', label: 'Variétés' },
|
||||
{ to: '/plantations', label: 'Plantations' },
|
||||
{ to: '/taches', label: 'Tâches' },
|
||||
{ to: '/planning', label: 'Planning' },
|
||||
{ to: '/lunaire', label: 'Lunaire' },
|
||||
{ to: '/reglages', label: 'Réglages' },
|
||||
];
|
||||
debugger; /* PartiallyEnd: #3632/scriptSetup.vue */
|
||||
const __VLS_ctx = {};
|
||||
let __VLS_components;
|
||||
let __VLS_directives;
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.header, __VLS_intrinsicElements.header)({
|
||||
...{ class: "fixed top-0 left-0 right-0 z-50 bg-bg-hard border-b border-bg-soft h-14 flex items-center px-4 gap-4" },
|
||||
});
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({
|
||||
...{ onClick: (...[$event]) => {
|
||||
__VLS_ctx.$emit('toggle-drawer');
|
||||
} },
|
||||
...{ class: "md:hidden text-text-muted hover:text-text text-xl leading-none" },
|
||||
});
|
||||
const __VLS_0 = {}.RouterLink;
|
||||
/** @type {[typeof __VLS_components.RouterLink, typeof __VLS_components.RouterLink, ]} */ ;
|
||||
// @ts-ignore
|
||||
const __VLS_1 = __VLS_asFunctionalComponent(__VLS_0, new __VLS_0({
|
||||
to: "/",
|
||||
...{ class: "text-green font-bold text-lg tracking-wide" },
|
||||
}));
|
||||
const __VLS_2 = __VLS_1({
|
||||
to: "/",
|
||||
...{ class: "text-green font-bold text-lg tracking-wide" },
|
||||
}, ...__VLS_functionalComponentArgsRest(__VLS_1));
|
||||
__VLS_3.slots.default;
|
||||
var __VLS_3;
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.nav, __VLS_intrinsicElements.nav)({
|
||||
...{ class: "hidden md:flex gap-5 ml-4" },
|
||||
});
|
||||
for (const [l] of __VLS_getVForSourceType((__VLS_ctx.links))) {
|
||||
const __VLS_4 = {}.RouterLink;
|
||||
/** @type {[typeof __VLS_components.RouterLink, typeof __VLS_components.RouterLink, ]} */ ;
|
||||
// @ts-ignore
|
||||
const __VLS_5 = __VLS_asFunctionalComponent(__VLS_4, new __VLS_4({
|
||||
key: (l.to),
|
||||
to: (l.to),
|
||||
...{ class: "text-text-muted hover:text-text transition-colors text-sm" },
|
||||
activeClass: "text-green font-semibold",
|
||||
}));
|
||||
const __VLS_6 = __VLS_5({
|
||||
key: (l.to),
|
||||
to: (l.to),
|
||||
...{ class: "text-text-muted hover:text-text transition-colors text-sm" },
|
||||
activeClass: "text-green font-semibold",
|
||||
}, ...__VLS_functionalComponentArgsRest(__VLS_5));
|
||||
__VLS_7.slots.default;
|
||||
(l.label);
|
||||
var __VLS_7;
|
||||
}
|
||||
/** @type {__VLS_StyleScopedClasses['fixed']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['top-0']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['left-0']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['right-0']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['z-50']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['bg-bg-hard']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['border-b']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['h-14']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['flex']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['items-center']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['px-4']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['gap-4']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['md:hidden']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['hover:text-text']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-xl']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['leading-none']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-green']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['font-bold']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-lg']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['tracking-wide']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['hidden']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['md:flex']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['gap-5']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['ml-4']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['hover:text-text']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['transition-colors']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-sm']} */ ;
|
||||
var __VLS_dollars;
|
||||
const __VLS_self = (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {
|
||||
RouterLink: RouterLink,
|
||||
links: links,
|
||||
};
|
||||
},
|
||||
emits: {},
|
||||
});
|
||||
export default (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
emits: {},
|
||||
});
|
||||
; /* PartiallyEnd: #4569/main.vue */
|
||||
6
frontend/src/main.js
Normal file
6
frontend/src/main.js
Normal file
@@ -0,0 +1,6 @@
|
||||
import { createApp } from 'vue';
|
||||
import { createPinia } from 'pinia';
|
||||
import App from './App.vue';
|
||||
import router from './router';
|
||||
import './style.css';
|
||||
createApp(App).use(createPinia()).use(router).mount('#app');
|
||||
15
frontend/src/router/index.js
Normal file
15
frontend/src/router/index.js
Normal file
@@ -0,0 +1,15 @@
|
||||
import { createRouter, createWebHistory } from 'vue-router';
|
||||
export default createRouter({
|
||||
history: createWebHistory(),
|
||||
routes: [
|
||||
{ path: '/', component: () => import('@/views/DashboardView.vue') },
|
||||
{ path: '/jardins', component: () => import('@/views/JardinsView.vue') },
|
||||
{ path: '/jardins/:id', component: () => import('@/views/JardinDetailView.vue') },
|
||||
{ path: '/varietes', component: () => import('@/views/VarietesView.vue') },
|
||||
{ path: '/plantations', component: () => import('@/views/PlantationsView.vue') },
|
||||
{ path: '/planning', component: () => import('@/views/PlanningView.vue') },
|
||||
{ path: '/taches', component: () => import('@/views/TachesView.vue') },
|
||||
{ path: '/lunaire', component: () => import('@/views/LunaireView.vue') },
|
||||
{ path: '/reglages', component: () => import('@/views/ReglagesView.vue') },
|
||||
],
|
||||
});
|
||||
@@ -2,5 +2,15 @@ import { createRouter, createWebHistory } from 'vue-router'
|
||||
|
||||
export default createRouter({
|
||||
history: createWebHistory(),
|
||||
routes: [],
|
||||
routes: [
|
||||
{ path: '/', component: () => import('@/views/DashboardView.vue') },
|
||||
{ path: '/jardins', component: () => import('@/views/JardinsView.vue') },
|
||||
{ path: '/jardins/:id', component: () => import('@/views/JardinDetailView.vue') },
|
||||
{ path: '/varietes', component: () => import('@/views/VarietesView.vue') },
|
||||
{ path: '/plantations', component: () => import('@/views/PlantationsView.vue') },
|
||||
{ path: '/planning', component: () => import('@/views/PlanningView.vue') },
|
||||
{ path: '/taches', component: () => import('@/views/TachesView.vue') },
|
||||
{ path: '/lunaire', component: () => import('@/views/LunaireView.vue') },
|
||||
{ path: '/reglages', component: () => import('@/views/ReglagesView.vue') },
|
||||
],
|
||||
})
|
||||
|
||||
22
frontend/src/stores/gardens.js
Normal file
22
frontend/src/stores/gardens.js
Normal file
@@ -0,0 +1,22 @@
|
||||
import { defineStore } from 'pinia';
|
||||
import { ref } from 'vue';
|
||||
import { gardensApi } from '@/api/gardens';
|
||||
export const useGardensStore = defineStore('gardens', () => {
|
||||
const gardens = ref([]);
|
||||
const loading = ref(false);
|
||||
async function fetchAll() {
|
||||
loading.value = true;
|
||||
gardens.value = await gardensApi.list();
|
||||
loading.value = false;
|
||||
}
|
||||
async function create(g) {
|
||||
const created = await gardensApi.create(g);
|
||||
gardens.value.push(created);
|
||||
return created;
|
||||
}
|
||||
async function remove(id) {
|
||||
await gardensApi.delete(id);
|
||||
gardens.value = gardens.value.filter(g => g.id !== id);
|
||||
}
|
||||
return { gardens, loading, fetchAll, create, remove };
|
||||
});
|
||||
22
frontend/src/stores/plantings.js
Normal file
22
frontend/src/stores/plantings.js
Normal file
@@ -0,0 +1,22 @@
|
||||
import { defineStore } from 'pinia';
|
||||
import { ref } from 'vue';
|
||||
import { plantingsApi } from '@/api/plantings';
|
||||
export const usePlantingsStore = defineStore('plantings', () => {
|
||||
const plantings = ref([]);
|
||||
const loading = ref(false);
|
||||
async function fetchAll() {
|
||||
loading.value = true;
|
||||
plantings.value = await plantingsApi.list();
|
||||
loading.value = false;
|
||||
}
|
||||
async function create(p) {
|
||||
const created = await plantingsApi.create(p);
|
||||
plantings.value.push(created);
|
||||
return created;
|
||||
}
|
||||
async function remove(id) {
|
||||
await plantingsApi.delete(id);
|
||||
plantings.value = plantings.value.filter(p => p.id !== id);
|
||||
}
|
||||
return { plantings, loading, fetchAll, create, remove };
|
||||
});
|
||||
29
frontend/src/stores/tasks.js
Normal file
29
frontend/src/stores/tasks.js
Normal file
@@ -0,0 +1,29 @@
|
||||
import { defineStore } from 'pinia';
|
||||
import { ref } from 'vue';
|
||||
import { tasksApi } from '@/api/tasks';
|
||||
export const useTasksStore = defineStore('tasks', () => {
|
||||
const tasks = ref([]);
|
||||
const loading = ref(false);
|
||||
async function fetchAll(params) {
|
||||
loading.value = true;
|
||||
tasks.value = await tasksApi.list(params);
|
||||
loading.value = false;
|
||||
}
|
||||
async function create(t) {
|
||||
const created = await tasksApi.create(t);
|
||||
tasks.value.push(created);
|
||||
return created;
|
||||
}
|
||||
async function updateStatut(id, statut) {
|
||||
const t = tasks.value.find(t => t.id === id);
|
||||
if (!t)
|
||||
return;
|
||||
const updated = await tasksApi.update(id, { ...t, statut });
|
||||
Object.assign(t, updated);
|
||||
}
|
||||
async function remove(id) {
|
||||
await tasksApi.delete(id);
|
||||
tasks.value = tasks.value.filter(t => t.id !== id);
|
||||
}
|
||||
return { tasks, loading, fetchAll, create, updateStatut, remove };
|
||||
});
|
||||
22
frontend/src/stores/varieties.js
Normal file
22
frontend/src/stores/varieties.js
Normal file
@@ -0,0 +1,22 @@
|
||||
import { defineStore } from 'pinia';
|
||||
import { ref } from 'vue';
|
||||
import { varietiesApi } from '@/api/varieties';
|
||||
export const useVarietiesStore = defineStore('varieties', () => {
|
||||
const varieties = ref([]);
|
||||
const loading = ref(false);
|
||||
async function fetchAll() {
|
||||
loading.value = true;
|
||||
varieties.value = await varietiesApi.list();
|
||||
loading.value = false;
|
||||
}
|
||||
async function create(v) {
|
||||
const created = await varietiesApi.create(v);
|
||||
varieties.value.push(created);
|
||||
return created;
|
||||
}
|
||||
async function remove(id) {
|
||||
await varietiesApi.delete(id);
|
||||
varieties.value = varieties.value.filter(v => v.id !== id);
|
||||
}
|
||||
return { varieties, loading, fetchAll, create, remove };
|
||||
});
|
||||
5
frontend/src/views/DashboardView.vue
Normal file
5
frontend/src/views/DashboardView.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div class="p-4">
|
||||
<h1 class="text-2xl font-bold text-green">Dashboard</h1>
|
||||
</div>
|
||||
</template>
|
||||
27
frontend/src/views/DashboardView.vue.js
Normal file
27
frontend/src/views/DashboardView.vue.js
Normal file
@@ -0,0 +1,27 @@
|
||||
/// <reference types="../../node_modules/.vue-global-types/vue_3.5_0_0_0.d.ts" />
|
||||
debugger; /* PartiallyEnd: #3632/scriptSetup.vue */
|
||||
const __VLS_ctx = {};
|
||||
let __VLS_components;
|
||||
let __VLS_directives;
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({
|
||||
...{ class: "p-4" },
|
||||
});
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.h1, __VLS_intrinsicElements.h1)({
|
||||
...{ class: "text-2xl font-bold text-green" },
|
||||
});
|
||||
/** @type {__VLS_StyleScopedClasses['p-4']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['font-bold']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-green']} */ ;
|
||||
var __VLS_dollars;
|
||||
const __VLS_self = (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
export default (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
; /* PartiallyEnd: #4569/main.vue */
|
||||
5
frontend/src/views/JardinDetailView.vue
Normal file
5
frontend/src/views/JardinDetailView.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div class="p-4">
|
||||
<h1 class="text-2xl font-bold text-green">Détail jardin</h1>
|
||||
</div>
|
||||
</template>
|
||||
27
frontend/src/views/JardinDetailView.vue.js
Normal file
27
frontend/src/views/JardinDetailView.vue.js
Normal file
@@ -0,0 +1,27 @@
|
||||
/// <reference types="../../node_modules/.vue-global-types/vue_3.5_0_0_0.d.ts" />
|
||||
debugger; /* PartiallyEnd: #3632/scriptSetup.vue */
|
||||
const __VLS_ctx = {};
|
||||
let __VLS_components;
|
||||
let __VLS_directives;
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({
|
||||
...{ class: "p-4" },
|
||||
});
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.h1, __VLS_intrinsicElements.h1)({
|
||||
...{ class: "text-2xl font-bold text-green" },
|
||||
});
|
||||
/** @type {__VLS_StyleScopedClasses['p-4']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['font-bold']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-green']} */ ;
|
||||
var __VLS_dollars;
|
||||
const __VLS_self = (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
export default (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
; /* PartiallyEnd: #4569/main.vue */
|
||||
5
frontend/src/views/JardinsView.vue
Normal file
5
frontend/src/views/JardinsView.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div class="p-4">
|
||||
<h1 class="text-2xl font-bold text-green">Jardins</h1>
|
||||
</div>
|
||||
</template>
|
||||
27
frontend/src/views/JardinsView.vue.js
Normal file
27
frontend/src/views/JardinsView.vue.js
Normal file
@@ -0,0 +1,27 @@
|
||||
/// <reference types="../../node_modules/.vue-global-types/vue_3.5_0_0_0.d.ts" />
|
||||
debugger; /* PartiallyEnd: #3632/scriptSetup.vue */
|
||||
const __VLS_ctx = {};
|
||||
let __VLS_components;
|
||||
let __VLS_directives;
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({
|
||||
...{ class: "p-4" },
|
||||
});
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.h1, __VLS_intrinsicElements.h1)({
|
||||
...{ class: "text-2xl font-bold text-green" },
|
||||
});
|
||||
/** @type {__VLS_StyleScopedClasses['p-4']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['font-bold']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-green']} */ ;
|
||||
var __VLS_dollars;
|
||||
const __VLS_self = (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
export default (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
; /* PartiallyEnd: #4569/main.vue */
|
||||
5
frontend/src/views/LunaireView.vue
Normal file
5
frontend/src/views/LunaireView.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div class="p-4">
|
||||
<h1 class="text-2xl font-bold text-green">Calendrier lunaire</h1>
|
||||
</div>
|
||||
</template>
|
||||
27
frontend/src/views/LunaireView.vue.js
Normal file
27
frontend/src/views/LunaireView.vue.js
Normal file
@@ -0,0 +1,27 @@
|
||||
/// <reference types="../../node_modules/.vue-global-types/vue_3.5_0_0_0.d.ts" />
|
||||
debugger; /* PartiallyEnd: #3632/scriptSetup.vue */
|
||||
const __VLS_ctx = {};
|
||||
let __VLS_components;
|
||||
let __VLS_directives;
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({
|
||||
...{ class: "p-4" },
|
||||
});
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.h1, __VLS_intrinsicElements.h1)({
|
||||
...{ class: "text-2xl font-bold text-green" },
|
||||
});
|
||||
/** @type {__VLS_StyleScopedClasses['p-4']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['font-bold']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-green']} */ ;
|
||||
var __VLS_dollars;
|
||||
const __VLS_self = (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
export default (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
; /* PartiallyEnd: #4569/main.vue */
|
||||
5
frontend/src/views/PlanningView.vue
Normal file
5
frontend/src/views/PlanningView.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div class="p-4">
|
||||
<h1 class="text-2xl font-bold text-green">Planning</h1>
|
||||
</div>
|
||||
</template>
|
||||
27
frontend/src/views/PlanningView.vue.js
Normal file
27
frontend/src/views/PlanningView.vue.js
Normal file
@@ -0,0 +1,27 @@
|
||||
/// <reference types="../../node_modules/.vue-global-types/vue_3.5_0_0_0.d.ts" />
|
||||
debugger; /* PartiallyEnd: #3632/scriptSetup.vue */
|
||||
const __VLS_ctx = {};
|
||||
let __VLS_components;
|
||||
let __VLS_directives;
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({
|
||||
...{ class: "p-4" },
|
||||
});
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.h1, __VLS_intrinsicElements.h1)({
|
||||
...{ class: "text-2xl font-bold text-green" },
|
||||
});
|
||||
/** @type {__VLS_StyleScopedClasses['p-4']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['font-bold']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-green']} */ ;
|
||||
var __VLS_dollars;
|
||||
const __VLS_self = (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
export default (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
; /* PartiallyEnd: #4569/main.vue */
|
||||
5
frontend/src/views/PlantationsView.vue
Normal file
5
frontend/src/views/PlantationsView.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div class="p-4">
|
||||
<h1 class="text-2xl font-bold text-green">Plantations</h1>
|
||||
</div>
|
||||
</template>
|
||||
27
frontend/src/views/PlantationsView.vue.js
Normal file
27
frontend/src/views/PlantationsView.vue.js
Normal file
@@ -0,0 +1,27 @@
|
||||
/// <reference types="../../node_modules/.vue-global-types/vue_3.5_0_0_0.d.ts" />
|
||||
debugger; /* PartiallyEnd: #3632/scriptSetup.vue */
|
||||
const __VLS_ctx = {};
|
||||
let __VLS_components;
|
||||
let __VLS_directives;
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({
|
||||
...{ class: "p-4" },
|
||||
});
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.h1, __VLS_intrinsicElements.h1)({
|
||||
...{ class: "text-2xl font-bold text-green" },
|
||||
});
|
||||
/** @type {__VLS_StyleScopedClasses['p-4']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['font-bold']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-green']} */ ;
|
||||
var __VLS_dollars;
|
||||
const __VLS_self = (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
export default (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
; /* PartiallyEnd: #4569/main.vue */
|
||||
5
frontend/src/views/ReglagesView.vue
Normal file
5
frontend/src/views/ReglagesView.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div class="p-4">
|
||||
<h1 class="text-2xl font-bold text-green">Réglages</h1>
|
||||
</div>
|
||||
</template>
|
||||
27
frontend/src/views/ReglagesView.vue.js
Normal file
27
frontend/src/views/ReglagesView.vue.js
Normal file
@@ -0,0 +1,27 @@
|
||||
/// <reference types="../../node_modules/.vue-global-types/vue_3.5_0_0_0.d.ts" />
|
||||
debugger; /* PartiallyEnd: #3632/scriptSetup.vue */
|
||||
const __VLS_ctx = {};
|
||||
let __VLS_components;
|
||||
let __VLS_directives;
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({
|
||||
...{ class: "p-4" },
|
||||
});
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.h1, __VLS_intrinsicElements.h1)({
|
||||
...{ class: "text-2xl font-bold text-green" },
|
||||
});
|
||||
/** @type {__VLS_StyleScopedClasses['p-4']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['font-bold']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-green']} */ ;
|
||||
var __VLS_dollars;
|
||||
const __VLS_self = (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
export default (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
; /* PartiallyEnd: #4569/main.vue */
|
||||
5
frontend/src/views/TachesView.vue
Normal file
5
frontend/src/views/TachesView.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div class="p-4">
|
||||
<h1 class="text-2xl font-bold text-green">Tâches</h1>
|
||||
</div>
|
||||
</template>
|
||||
27
frontend/src/views/TachesView.vue.js
Normal file
27
frontend/src/views/TachesView.vue.js
Normal file
@@ -0,0 +1,27 @@
|
||||
/// <reference types="../../node_modules/.vue-global-types/vue_3.5_0_0_0.d.ts" />
|
||||
debugger; /* PartiallyEnd: #3632/scriptSetup.vue */
|
||||
const __VLS_ctx = {};
|
||||
let __VLS_components;
|
||||
let __VLS_directives;
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({
|
||||
...{ class: "p-4" },
|
||||
});
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.h1, __VLS_intrinsicElements.h1)({
|
||||
...{ class: "text-2xl font-bold text-green" },
|
||||
});
|
||||
/** @type {__VLS_StyleScopedClasses['p-4']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['font-bold']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-green']} */ ;
|
||||
var __VLS_dollars;
|
||||
const __VLS_self = (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
export default (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
; /* PartiallyEnd: #4569/main.vue */
|
||||
5
frontend/src/views/VarietesView.vue
Normal file
5
frontend/src/views/VarietesView.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div class="p-4">
|
||||
<h1 class="text-2xl font-bold text-green">Variétés</h1>
|
||||
</div>
|
||||
</template>
|
||||
27
frontend/src/views/VarietesView.vue.js
Normal file
27
frontend/src/views/VarietesView.vue.js
Normal file
@@ -0,0 +1,27 @@
|
||||
/// <reference types="../../node_modules/.vue-global-types/vue_3.5_0_0_0.d.ts" />
|
||||
debugger; /* PartiallyEnd: #3632/scriptSetup.vue */
|
||||
const __VLS_ctx = {};
|
||||
let __VLS_components;
|
||||
let __VLS_directives;
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({
|
||||
...{ class: "p-4" },
|
||||
});
|
||||
__VLS_asFunctionalElement(__VLS_intrinsicElements.h1, __VLS_intrinsicElements.h1)({
|
||||
...{ class: "text-2xl font-bold text-green" },
|
||||
});
|
||||
/** @type {__VLS_StyleScopedClasses['p-4']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['font-bold']} */ ;
|
||||
/** @type {__VLS_StyleScopedClasses['text-green']} */ ;
|
||||
var __VLS_dollars;
|
||||
const __VLS_self = (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
export default (await import('vue')).defineComponent({
|
||||
setup() {
|
||||
return {};
|
||||
},
|
||||
});
|
||||
; /* PartiallyEnd: #4569/main.vue */
|
||||
Reference in New Issue
Block a user