diff --git a/amelioration.md b/amelioration.md index 2540334..fd3fb1f 100644 --- a/amelioration.md +++ b/amelioration.md @@ -12,6 +12,9 @@ plante : - [x] plante du potager, fleur, arbre ou arbuste - [x] liste de plantes courantes seedée : carotte, tomate, ail, oignon, haricot, petits pois, poireaux, pomme de terre, salade, fraise, framboise, persil, échalote, courgette, chou-fleur, chou boule, ... - [x] association des plantes (favorables / défavorables) : tags noms communs, validation croisée, édition depuis popup plante + - [ ] ajouter un bouton "ajouter varieté" a gauche de modifier ce qui affiche un popup speciifque variété ou je peut saisir les champ specifique a une varieté et/ou modifier le contenu de champs de la plante "nom commun" ne supprime pas les champs et contenu de nom commun, mais se substitue. possibilite d'inserer les capture d'image du sachet de graine ( 2 photo avant et arriere) optimisiation de la taille de l'image + - [ ] analyse le dossier doc/graine et arbustre ( json et image) et ingrer une seule foisdans la bdd les élement, attention il y aura necessité de créer de nouvelle varité en fonction du nom commun. fait une selection intelligente des champ json utile dans ma base de donnée et qui concerne les caracteristiique de la varité . il y aura certainement la nencessité de rajoter des champ. verifie que les champ date de semis, repiquage, resolte soit bien present ( date => mois a cocher), verifie ensoleillement, arrosage, conseils, t° de germination, maladies, distance de semis, temps de levée. ces champs doivent aussi apparaire dans le poptup plante " nom commun" . brainstorming general pour la gestion des plantes pour une structure de donnée coherente, evolutive et efficace + - [ ] dans la base de donnée actuelle des plantes y a t il dans plan qui peuvent etre fusionner en créeant des vatiété ( ex haricot et haricot grimpant ?) analyse et propose une modiifcation de la bdd qui créer ainsi les nouvelles varietés taches: - [x] liste des tâches courantes au jardin pré-remplie (seed) @@ -25,6 +28,7 @@ outils: planning: - [x] PlanningView : calendrier 4 semaines, tâches et plantations par jour + - [] une vue calendrier et une vue gantt 2 bouton dans le hedader pour selectionner ou calendrier ou gantt calendrier: - [x] renommer le header lunaire en calendrier (Météo + Lunaire + Dictons + navigation) diff --git a/backend/data/jardin.db b/backend/data/jardin.db new file mode 100644 index 0000000..e69de29 diff --git a/backend/jardin.db b/backend/jardin.db index 40b0d49..8234481 100644 Binary files a/backend/jardin.db and b/backend/jardin.db differ diff --git a/data/jardin.db b/data/jardin.db index a56884c..eafb4c9 100755 Binary files a/data/jardin.db and b/data/jardin.db differ diff --git a/data/jardin.db-shm b/data/jardin.db-shm index 457ff98..258a8b8 100755 Binary files a/data/jardin.db-shm and b/data/jardin.db-shm differ diff --git a/data/jardin.db-wal b/data/jardin.db-wal index bf8eb17..b61c08e 100755 Binary files a/data/jardin.db-wal and b/data/jardin.db-wal differ diff --git a/data/uploads/01c05aed-27a4-4902-b99d-9a1a27957b91.jpg b/data/uploads/01c05aed-27a4-4902-b99d-9a1a27957b91.jpg new file mode 100644 index 0000000..d832148 Binary files /dev/null and b/data/uploads/01c05aed-27a4-4902-b99d-9a1a27957b91.jpg differ diff --git a/data/uploads/0cf928a2-4e1e-4f80-b808-aa066ce3f174.jpg b/data/uploads/0cf928a2-4e1e-4f80-b808-aa066ce3f174.jpg new file mode 100644 index 0000000..ccb5427 Binary files /dev/null and b/data/uploads/0cf928a2-4e1e-4f80-b808-aa066ce3f174.jpg differ diff --git a/data/uploads/119cd18a-50a6-40df-8c72-b5711c6ea7f2.jpg b/data/uploads/119cd18a-50a6-40df-8c72-b5711c6ea7f2.jpg new file mode 100644 index 0000000..119356d Binary files /dev/null and b/data/uploads/119cd18a-50a6-40df-8c72-b5711c6ea7f2.jpg differ diff --git a/data/uploads/14cb5845-82fb-412e-82e8-16eeed8e920b.jpg b/data/uploads/14cb5845-82fb-412e-82e8-16eeed8e920b.jpg new file mode 100644 index 0000000..fff1422 Binary files /dev/null and b/data/uploads/14cb5845-82fb-412e-82e8-16eeed8e920b.jpg differ diff --git a/data/uploads/185159c5-d396-4d1a-aa5b-9c2a6c6267d6.jpg b/data/uploads/185159c5-d396-4d1a-aa5b-9c2a6c6267d6.jpg new file mode 100644 index 0000000..0629041 Binary files /dev/null and b/data/uploads/185159c5-d396-4d1a-aa5b-9c2a6c6267d6.jpg differ diff --git a/data/uploads/2826ce60-929c-447b-82cd-d95166d1a364.jpg b/data/uploads/2826ce60-929c-447b-82cd-d95166d1a364.jpg new file mode 100644 index 0000000..0392233 Binary files /dev/null and b/data/uploads/2826ce60-929c-447b-82cd-d95166d1a364.jpg differ diff --git a/data/uploads/2e670eec-bf29-4c9e-8634-87dcea54274e.jpg b/data/uploads/2e670eec-bf29-4c9e-8634-87dcea54274e.jpg new file mode 100644 index 0000000..6388d8b Binary files /dev/null and b/data/uploads/2e670eec-bf29-4c9e-8634-87dcea54274e.jpg differ diff --git a/data/uploads/456fc305-c22b-4a69-bcb5-bc418ed7d982.jpg b/data/uploads/456fc305-c22b-4a69-bcb5-bc418ed7d982.jpg new file mode 100644 index 0000000..f6d770f Binary files /dev/null and b/data/uploads/456fc305-c22b-4a69-bcb5-bc418ed7d982.jpg differ diff --git a/data/uploads/4b00ab47-1577-476b-9e83-cdc3cc96af0c.jpg b/data/uploads/4b00ab47-1577-476b-9e83-cdc3cc96af0c.jpg new file mode 100644 index 0000000..667d403 Binary files /dev/null and b/data/uploads/4b00ab47-1577-476b-9e83-cdc3cc96af0c.jpg differ diff --git a/data/uploads/53ac30ee-108e-42f2-b61b-cd810dcbeeb5.jpg b/data/uploads/53ac30ee-108e-42f2-b61b-cd810dcbeeb5.jpg new file mode 100644 index 0000000..297fc5b Binary files /dev/null and b/data/uploads/53ac30ee-108e-42f2-b61b-cd810dcbeeb5.jpg differ diff --git a/data/uploads/72bc5fc7-a3eb-49e9-8bb1-4e0f54d5e4c2.jpg b/data/uploads/72bc5fc7-a3eb-49e9-8bb1-4e0f54d5e4c2.jpg new file mode 100644 index 0000000..dc24e21 Binary files /dev/null and b/data/uploads/72bc5fc7-a3eb-49e9-8bb1-4e0f54d5e4c2.jpg differ diff --git a/data/uploads/8c108c64-f513-427b-bd16-a7b8fb99245e.jpg b/data/uploads/8c108c64-f513-427b-bd16-a7b8fb99245e.jpg new file mode 100644 index 0000000..c8749a5 Binary files /dev/null and b/data/uploads/8c108c64-f513-427b-bd16-a7b8fb99245e.jpg differ diff --git a/data/uploads/92819523-a2dc-476f-8770-f8615d4a5cfe.jpg b/data/uploads/92819523-a2dc-476f-8770-f8615d4a5cfe.jpg new file mode 100644 index 0000000..9ace76e Binary files /dev/null and b/data/uploads/92819523-a2dc-476f-8770-f8615d4a5cfe.jpg differ diff --git a/data/uploads/945c2aa1-896d-4979-bb3c-2a74571b3050.jpg b/data/uploads/945c2aa1-896d-4979-bb3c-2a74571b3050.jpg new file mode 100644 index 0000000..b54f821 Binary files /dev/null and b/data/uploads/945c2aa1-896d-4979-bb3c-2a74571b3050.jpg differ diff --git a/data/uploads/a8641f29-f7ab-465c-a739-a1a3367f6628.jpg b/data/uploads/a8641f29-f7ab-465c-a739-a1a3367f6628.jpg new file mode 100644 index 0000000..a07ad35 Binary files /dev/null and b/data/uploads/a8641f29-f7ab-465c-a739-a1a3367f6628.jpg differ diff --git a/data/uploads/a9ebb40f-5402-4409-9d0a-5de42eacfba6.jpg b/data/uploads/a9ebb40f-5402-4409-9d0a-5de42eacfba6.jpg new file mode 100644 index 0000000..02fcb5c Binary files /dev/null and b/data/uploads/a9ebb40f-5402-4409-9d0a-5de42eacfba6.jpg differ diff --git a/data/uploads/accdf642-36b5-4d9c-b9be-465ea65afb17.jpg b/data/uploads/accdf642-36b5-4d9c-b9be-465ea65afb17.jpg new file mode 100644 index 0000000..d550466 Binary files /dev/null and b/data/uploads/accdf642-36b5-4d9c-b9be-465ea65afb17.jpg differ diff --git a/data/uploads/b2b098f7-1c09-410c-a440-e95de836bd5f.jpg b/data/uploads/b2b098f7-1c09-410c-a440-e95de836bd5f.jpg new file mode 100644 index 0000000..0d7c7a9 Binary files /dev/null and b/data/uploads/b2b098f7-1c09-410c-a440-e95de836bd5f.jpg differ diff --git a/data/uploads/b5320f20-2d59-47e2-9c92-b48878890bb9.jpg b/data/uploads/b5320f20-2d59-47e2-9c92-b48878890bb9.jpg new file mode 100644 index 0000000..55a7c31 Binary files /dev/null and b/data/uploads/b5320f20-2d59-47e2-9c92-b48878890bb9.jpg differ diff --git a/data/uploads/bc3fe54e-b894-4ca8-8be8-1b065afaf918.jpg b/data/uploads/bc3fe54e-b894-4ca8-8be8-1b065afaf918.jpg new file mode 100644 index 0000000..25656b9 Binary files /dev/null and b/data/uploads/bc3fe54e-b894-4ca8-8be8-1b065afaf918.jpg differ diff --git a/data/uploads/be350e09-2e7e-4c22-ab3e-c2f248a750cd.jpg b/data/uploads/be350e09-2e7e-4c22-ab3e-c2f248a750cd.jpg new file mode 100644 index 0000000..462bb61 Binary files /dev/null and b/data/uploads/be350e09-2e7e-4c22-ab3e-c2f248a750cd.jpg differ diff --git a/data/uploads/bfb03b30-ef05-4710-ab46-0c4cde2f7366.jpg b/data/uploads/bfb03b30-ef05-4710-ab46-0c4cde2f7366.jpg new file mode 100644 index 0000000..d7c64e8 Binary files /dev/null and b/data/uploads/bfb03b30-ef05-4710-ab46-0c4cde2f7366.jpg differ diff --git a/data/uploads/bfdf7863-16e5-4151-95aa-087d0aa920bd.jpg b/data/uploads/bfdf7863-16e5-4151-95aa-087d0aa920bd.jpg new file mode 100644 index 0000000..52acdf2 Binary files /dev/null and b/data/uploads/bfdf7863-16e5-4151-95aa-087d0aa920bd.jpg differ diff --git a/data/uploads/c1414164-b276-43c5-ab08-229baef76c2b.jpg b/data/uploads/c1414164-b276-43c5-ab08-229baef76c2b.jpg new file mode 100644 index 0000000..31d5467 Binary files /dev/null and b/data/uploads/c1414164-b276-43c5-ab08-229baef76c2b.jpg differ diff --git a/data/uploads/c14d8348-815f-4ebf-9ea1-bef89d122324.jpg b/data/uploads/c14d8348-815f-4ebf-9ea1-bef89d122324.jpg new file mode 100644 index 0000000..d8fa650 Binary files /dev/null and b/data/uploads/c14d8348-815f-4ebf-9ea1-bef89d122324.jpg differ diff --git a/data/uploads/c1e27615-b167-4513-910b-e3fa2017fe42.jpg b/data/uploads/c1e27615-b167-4513-910b-e3fa2017fe42.jpg new file mode 100644 index 0000000..effddab Binary files /dev/null and b/data/uploads/c1e27615-b167-4513-910b-e3fa2017fe42.jpg differ diff --git a/data/uploads/c2d2c0bc-3994-431a-8e33-2a8e42903040.jpg b/data/uploads/c2d2c0bc-3994-431a-8e33-2a8e42903040.jpg new file mode 100644 index 0000000..f2d276d Binary files /dev/null and b/data/uploads/c2d2c0bc-3994-431a-8e33-2a8e42903040.jpg differ diff --git a/data/uploads/c52790ff-fe48-45d5-baff-2367b9667916.jpg b/data/uploads/c52790ff-fe48-45d5-baff-2367b9667916.jpg new file mode 100644 index 0000000..3e1bad0 Binary files /dev/null and b/data/uploads/c52790ff-fe48-45d5-baff-2367b9667916.jpg differ diff --git a/data/uploads/cef0474e-73f2-4da8-b513-847488d04955.jpg b/data/uploads/cef0474e-73f2-4da8-b513-847488d04955.jpg new file mode 100644 index 0000000..d1bd323 Binary files /dev/null and b/data/uploads/cef0474e-73f2-4da8-b513-847488d04955.jpg differ diff --git a/data/uploads/d45599ca-1ffd-41fb-b5db-a65d3740a145.jpg b/data/uploads/d45599ca-1ffd-41fb-b5db-a65d3740a145.jpg new file mode 100644 index 0000000..868b08b Binary files /dev/null and b/data/uploads/d45599ca-1ffd-41fb-b5db-a65d3740a145.jpg differ diff --git a/data/uploads/dbcb37c5-65fd-412e-9e40-d2667b7f7548.jpg b/data/uploads/dbcb37c5-65fd-412e-9e40-d2667b7f7548.jpg new file mode 100644 index 0000000..fe10ab7 Binary files /dev/null and b/data/uploads/dbcb37c5-65fd-412e-9e40-d2667b7f7548.jpg differ diff --git a/data/uploads/e8e0a754-64a3-4e23-8bbe-c2fbd667bf51.jpg b/data/uploads/e8e0a754-64a3-4e23-8bbe-c2fbd667bf51.jpg new file mode 100644 index 0000000..3f7bef8 Binary files /dev/null and b/data/uploads/e8e0a754-64a3-4e23-8bbe-c2fbd667bf51.jpg differ diff --git a/data/uploads/f1d55c5c-ab04-4ab7-8661-d1b23afd6832.jpg b/data/uploads/f1d55c5c-ab04-4ab7-8661-d1b23afd6832.jpg new file mode 100644 index 0000000..4715d2f Binary files /dev/null and b/data/uploads/f1d55c5c-ab04-4ab7-8661-d1b23afd6832.jpg differ diff --git a/data/uploads/f303b7ce-46c2-48da-b22c-f563970fb75b.jpg b/data/uploads/f303b7ce-46c2-48da-b22c-f563970fb75b.jpg new file mode 100644 index 0000000..6a4263d Binary files /dev/null and b/data/uploads/f303b7ce-46c2-48da-b22c-f563970fb75b.jpg differ diff --git a/data/uploads/f7fba076-625a-431c-a21d-8359cdea9a40.jpg b/data/uploads/f7fba076-625a-431c-a21d-8359cdea9a40.jpg new file mode 100644 index 0000000..0284a0e Binary files /dev/null and b/data/uploads/f7fba076-625a-431c-a21d-8359cdea9a40.jpg differ diff --git a/data/uploads/fa43b43d-80e6-4bea-bf45-8c91f1bdb073.jpg b/data/uploads/fa43b43d-80e6-4bea-bf45-8c91f1bdb073.jpg new file mode 100644 index 0000000..ef0c30b Binary files /dev/null and b/data/uploads/fa43b43d-80e6-4bea-bf45-8c91f1bdb073.jpg differ diff --git a/docs/terreau/IMG_4817.jpg b/docs/terreau/IMG_4817.jpg index e740865..b501624 100644 Binary files a/docs/terreau/IMG_4817.jpg and b/docs/terreau/IMG_4817.jpg differ diff --git a/docs/terreau/IMG_4818.jpg b/docs/terreau/IMG_4818.jpg index 4cfd92d..d6846dd 100644 Binary files a/docs/terreau/IMG_4818.jpg and b/docs/terreau/IMG_4818.jpg differ diff --git a/frontend/src/App.vue.js b/frontend/src/App.vue.js index df806bf..a772e78 100644 --- a/frontend/src/App.vue.js +++ b/frontend/src/App.vue.js @@ -130,6 +130,7 @@ const links = [ { to: '/plantes', label: 'Plantes', icon: '🌱' }, { to: '/bibliotheque', label: 'Bibliothèque', icon: '📷' }, { to: '/outils', label: 'Outils', icon: '🔧' }, + { to: '/intrants', label: 'Intrants', icon: '🧪' }, { to: '/plantations', label: 'Plantations', icon: '🥕' }, { to: '/taches', label: 'Tâches', icon: '✅' }, { to: '/planning', label: 'Planning', icon: '📆' }, diff --git a/frontend/src/api/achats.js b/frontend/src/api/achats.js new file mode 100644 index 0000000..17e556e --- /dev/null +++ b/frontend/src/api/achats.js @@ -0,0 +1,9 @@ +// frontend/src/api/achats.ts +import client from './client'; +export const achatsApi = { + list: (params) => client.get('/api/achats', { params }).then(r => r.data), + get: (id) => client.get(`/api/achats/${id}`).then(r => r.data), + create: (a) => client.post('/api/achats', a).then(r => r.data), + update: (id, a) => client.put(`/api/achats/${id}`, a).then(r => r.data), + delete: (id) => client.delete(`/api/achats/${id}`), +}; diff --git a/frontend/src/api/fabrications.js b/frontend/src/api/fabrications.js new file mode 100644 index 0000000..aaefab8 --- /dev/null +++ b/frontend/src/api/fabrications.js @@ -0,0 +1,10 @@ +// frontend/src/api/fabrications.ts +import client from './client'; +export const fabricationsApi = { + list: (params) => client.get('/api/fabrications', { params }).then(r => r.data), + get: (id) => client.get(`/api/fabrications/${id}`).then(r => r.data), + create: (f) => client.post('/api/fabrications', f).then(r => r.data), + update: (id, f) => client.put(`/api/fabrications/${id}`, f).then(r => r.data), + updateStatut: (id, statut) => client.patch(`/api/fabrications/${id}/statut`, { statut }).then(r => r.data), + delete: (id) => client.delete(`/api/fabrications/${id}`), +}; diff --git a/frontend/src/api/plants.js b/frontend/src/api/plants.js index b280c35..4084b14 100644 --- a/frontend/src/api/plants.js +++ b/frontend/src/api/plants.js @@ -1,3 +1,4 @@ +// frontend/src/api/plants.ts import client from './client'; export const plantsApi = { list: (categorie) => client.get('/api/plants', { params: categorie ? { categorie } : {} }).then(r => r.data), @@ -5,4 +6,8 @@ export const plantsApi = { create: (p) => client.post('/api/plants', p).then(r => r.data), update: (id, p) => client.put(`/api/plants/${id}`, p).then(r => r.data), delete: (id) => client.delete(`/api/plants/${id}`), + // Variétés + createVariety: (plantId, v) => client.post(`/api/plants/${plantId}/varieties`, v).then(r => r.data), + updateVariety: (plantId, vid, v) => client.put(`/api/plants/${plantId}/varieties/${vid}`, v).then(r => r.data), + deleteVariety: (plantId, vid) => client.delete(`/api/plants/${plantId}/varieties/${vid}`), }; diff --git a/frontend/src/components/AppDrawer.vue.js b/frontend/src/components/AppDrawer.vue.js index 2b688ae..d2f109b 100644 --- a/frontend/src/components/AppDrawer.vue.js +++ b/frontend/src/components/AppDrawer.vue.js @@ -7,6 +7,7 @@ const links = [ { to: '/plantes', label: 'Plantes' }, { to: '/bibliotheque', label: '📷 Bibliothèque' }, { to: '/outils', label: 'Outils' }, + { to: '/intrants', label: '🧪 Intrants' }, { to: '/plantations', label: 'Plantations' }, { to: '/taches', label: 'Tâches' }, { to: '/planning', label: 'Planning' }, diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index 0f0b4fd..a7dcdb9 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -8,6 +8,7 @@ export default createRouter({ { path: '/plantes', component: () => import('@/views/PlantesView.vue') }, { path: '/bibliotheque', component: () => import('@/views/BibliothequeView.vue') }, { path: '/outils', component: () => import('@/views/OutilsView.vue') }, + { path: '/intrants', component: () => import('@/views/IntratsView.vue') }, { path: '/plantations', component: () => import('@/views/PlantationsView.vue') }, { path: '/planning', component: () => import('@/views/PlanningView.vue') }, { path: '/taches', component: () => import('@/views/TachesView.vue') }, diff --git a/frontend/src/stores/achats.js b/frontend/src/stores/achats.js new file mode 100644 index 0000000..dd97bc8 --- /dev/null +++ b/frontend/src/stores/achats.js @@ -0,0 +1,27 @@ +// frontend/src/stores/achats.ts +import { defineStore } from 'pinia'; +import { ref } from 'vue'; +import { achatsApi } from '@/api/achats'; +export const useAchatsStore = defineStore('achats', () => { + const achats = ref([]); + const loading = ref(false); + async function fetchAll(params) { + loading.value = true; + try { + achats.value = await achatsApi.list(params); + } + finally { + loading.value = false; + } + } + async function create(a) { + const created = await achatsApi.create(a); + achats.value.unshift(created); + return created; + } + async function remove(id) { + await achatsApi.delete(id); + achats.value = achats.value.filter(a => a.id !== id); + } + return { achats, loading, fetchAll, create, remove }; +}); diff --git a/frontend/src/stores/fabrications.js b/frontend/src/stores/fabrications.js new file mode 100644 index 0000000..af60b45 --- /dev/null +++ b/frontend/src/stores/fabrications.js @@ -0,0 +1,34 @@ +// frontend/src/stores/fabrications.ts +import { defineStore } from 'pinia'; +import { ref } from 'vue'; +import { fabricationsApi } from '@/api/fabrications'; +export const useFabricationsStore = defineStore('fabrications', () => { + const fabrications = ref([]); + const loading = ref(false); + async function fetchAll(params) { + loading.value = true; + try { + fabrications.value = await fabricationsApi.list(params); + } + finally { + loading.value = false; + } + } + async function create(f) { + const created = await fabricationsApi.create(f); + fabrications.value.unshift(created); + return created; + } + async function updateStatut(id, statut) { + const updated = await fabricationsApi.updateStatut(id, statut); + const idx = fabrications.value.findIndex(f => f.id === id); + if (idx !== -1) + fabrications.value[idx] = updated; + return updated; + } + async function remove(id) { + await fabricationsApi.delete(id); + fabrications.value = fabrications.value.filter(f => f.id !== id); + } + return { fabrications, loading, fetchAll, create, updateStatut, remove }; +}); diff --git a/frontend/src/stores/plants.js b/frontend/src/stores/plants.js index 064a95c..cc60324 100644 --- a/frontend/src/stores/plants.js +++ b/frontend/src/stores/plants.js @@ -1,3 +1,4 @@ +// frontend/src/stores/plants.ts import { defineStore } from 'pinia'; import { ref } from 'vue'; import { plantsApi } from '@/api/plants'; @@ -18,9 +19,43 @@ export const usePlantsStore = defineStore('plants', () => { plants.value.push(created); return created; } + async function update(id, p) { + const updated = await plantsApi.update(id, p); + const idx = plants.value.findIndex(x => x.id === id); + if (idx !== -1) + plants.value[idx] = updated; + return updated; + } async function remove(id) { await plantsApi.delete(id); plants.value = plants.value.filter(p => p.id !== id); } - return { plants, loading, fetchAll, create, remove }; + async function createVariety(plantId, v) { + const created = await plantsApi.createVariety(plantId, v); + const plant = plants.value.find(p => p.id === plantId); + if (plant) { + if (!plant.varieties) + plant.varieties = []; + plant.varieties.push(created); + } + return created; + } + async function updateVariety(plantId, vid, v) { + const updated = await plantsApi.updateVariety(plantId, vid, v); + const plant = plants.value.find(p => p.id === plantId); + if (plant?.varieties) { + const idx = plant.varieties.findIndex(x => x.id === vid); + if (idx !== -1) + plant.varieties[idx] = updated; + } + return updated; + } + async function removeVariety(plantId, vid) { + await plantsApi.deleteVariety(plantId, vid); + const plant = plants.value.find(p => p.id === plantId); + if (plant?.varieties) { + plant.varieties = plant.varieties.filter(v => v.id !== vid); + } + } + return { plants, loading, fetchAll, create, update, remove, createVariety, updateVariety, removeVariety }; }); diff --git a/frontend/src/views/IntratsView.vue.js b/frontend/src/views/IntratsView.vue.js new file mode 100644 index 0000000..210c115 --- /dev/null +++ b/frontend/src/views/IntratsView.vue.js @@ -0,0 +1,2141 @@ +/// +import { computed, onMounted, reactive, ref } from 'vue'; +import axios from 'axios'; +import { useAchatsStore } from '@/stores/achats'; +import { useFabricationsStore } from '@/stores/fabrications'; +import { useToast } from '@/composables/useToast'; +const achatsStore = useAchatsStore(); +const fabricationsStore = useFabricationsStore(); +const toast = useToast(); +const activeTab = ref('achats'); +const filterCat = ref(''); +const filterType = ref(''); +const filterStatut = ref(''); +const submitting = ref(false); +// Détails +const detailAchat = ref(null); +const detailFabrication = ref(null); +// Formulaire achat +const showFormAchat = ref(false); +const editAchat = ref(null); +const formAchat = reactive({ + categorie: 'terreau', nom: '', marque: '', boutique_nom: '', + boutique_url: '', prix: undefined, poids: '', date_achat: '', dluo: '', notes: '', +}); +// Formulaire fabrication +const showFormFab = ref(false); +const editFab = ref(null); +const formFab = reactive({ + type: 'purin', nom: '', date_debut: '', date_fin_prevue: '', + statut: 'en_cours', quantite_produite: '', notes: '', + ingredients: [], +}); +const tabs = [ + { key: 'achats', label: '🛒 Achats' }, + { key: 'fabrications', label: '🌿 Fabrications' }, +]; +const BOUTIQUES = [ + 'Gamm Vert', 'Lidl', 'Super U', 'Intermarché', 'Truffaut', 'Botanic', + 'Amazon', 'Graines Baumaux', 'Vilmorin', 'Germinance', 'Direct producteur', + 'Marché local', 'Autre', +]; +const categoriesAchat = [ + { val: '', label: 'Tous' }, + { val: 'terreau', label: '🪨 Terreau' }, + { val: 'engrais', label: '🌿 Engrais' }, + { val: 'traitement', label: '💊 Traitement' }, + { val: 'autre', label: 'Autre' }, +]; +const typesFabrication = [ + { val: '', label: 'Tous', bgClass: 'bg-yellow' }, + { val: 'compost', label: '♻️ Compost', bgClass: 'bg-orange' }, + { val: 'decoction', label: '🫖 Décoction', bgClass: 'bg-blue' }, + { val: 'purin', label: '🌱 Purin', bgClass: 'bg-green' }, + { val: 'autre', label: 'Autre', bgClass: 'bg-text-muted' }, +]; +const statutsFabrication = [ + { val: '', label: 'Tous', bgClass: 'bg-yellow' }, + { val: 'en_cours', label: '⏳ En cours', bgClass: 'bg-orange' }, + { val: 'pret', label: '✓ Prêt', bgClass: 'bg-green' }, + { val: 'utilise', label: '✓ Utilisé', bgClass: 'bg-bg-soft' }, + { val: 'echec', label: '✗ Échec', bgClass: 'bg-red' }, +]; +const filteredAchats = computed(() => { + let list = achatsStore.achats; + if (filterCat.value) + list = list.filter(a => a.categorie === filterCat.value); + return list; +}); +const filteredFabricatons = computed(() => { + let list = fabricationsStore.fabrications; + if (filterType.value) + list = list.filter(f => f.type === filterType.value); + if (filterStatut.value) + list = list.filter(f => f.statut === filterStatut.value); + return list; +}); +function isDluoExpired(dluo) { + return !!dluo && new Date(dluo) < new Date(); +} +function catAchatColor(cat) { + return { terreau: '#fe8019', engrais: '#b8bb26', traitement: '#83a598', autre: '#928374' }[cat] || '#928374'; +} +function catAchatTextClass(cat) { + return { terreau: 'text-orange', engrais: 'text-green', traitement: 'text-blue', autre: 'text-text-muted' }[cat] || 'text-text-muted'; +} +function statutColor(statut) { + return { en_cours: '#fe8019', pret: '#b8bb26', utilise: '#928374', echec: '#fb4934' }[statut] || '#928374'; +} +function statutBadgeClass(statut) { + return { + en_cours: 'bg-orange/10 border-orange/40 text-orange', + pret: 'bg-green/10 border-green/40 text-green', + utilise: 'bg-bg-soft border-bg-soft text-text-muted', + echec: 'bg-red/10 border-red/40 text-red', + }[statut] || ''; +} +function statutLabel(statut) { + return { en_cours: '⏳ En cours', pret: '✓ Prêt', utilise: '✓ Utilisé', echec: '✗ Échec' }[statut] || statut; +} +function typeFabTextClass(type) { + return { compost: 'text-orange', decoction: 'text-blue', purin: 'text-green', autre: 'text-text-muted' }[type] || 'text-text-muted'; +} +// ---- Achats ---- +function openCreateForm() { + if (activeTab.value === 'achats') { + editAchat.value = null; + Object.assign(formAchat, { categorie: 'terreau', nom: '', marque: '', boutique_nom: '', boutique_url: '', prix: undefined, poids: '', date_achat: '', dluo: '', notes: '' }); + showFormAchat.value = true; + } + else { + editFab.value = null; + Object.assign(formFab, { type: 'purin', nom: '', date_debut: '', date_fin_prevue: '', statut: 'en_cours', quantite_produite: '', notes: '', ingredients: [] }); + showFormFab.value = true; + } +} +function openDetailAchat(a) { detailAchat.value = a; } +function startEditAchat(a) { + detailAchat.value = null; + editAchat.value = a; + Object.assign(formAchat, { ...a }); + showFormAchat.value = true; +} +function closeFormAchat() { showFormAchat.value = false; editAchat.value = null; } +async function submitAchat() { + if (submitting.value) + return; + submitting.value = true; + try { + const payload = { ...formAchat, prix: formAchat.prix ?? undefined }; + if (editAchat.value) { + await axios.put(`/api/achats/${editAchat.value.id}`, payload); + await achatsStore.fetchAll(); + toast.success('Achat modifié'); + } + else { + await achatsStore.create(payload); + toast.success('Achat enregistré'); + } + closeFormAchat(); + } + catch { /* intercepteur */ } + finally { + submitting.value = false; + } +} +async function deleteAchat(id) { + if (!confirm('Supprimer cet achat ?')) + return; + await achatsStore.remove(id); + detailAchat.value = null; + toast.success('Achat supprimé'); +} +// ---- Fabrications ---- +function openDetailFabrication(f) { detailFabrication.value = f; } +function startEditFabrication(f) { + detailFabrication.value = null; + editFab.value = f; + Object.assign(formFab, { + ...f, + ingredients: f.ingredients ? [...f.ingredients.map(i => ({ ...i }))] : [], + }); + showFormFab.value = true; +} +function closeFormFab() { showFormFab.value = false; editFab.value = null; } +function addIngredient() { formFab.ingredients.push({ nom: '', quantite: '' }); } +function removeIngredient(i) { formFab.ingredients.splice(i, 1); } +async function submitFab() { + if (submitting.value) + return; + submitting.value = true; + try { + const payload = { ...formFab, ingredients: formFab.ingredients.filter(i => i.nom) }; + if (editFab.value) { + await axios.put(`/api/fabrications/${editFab.value.id}`, payload); + await fabricationsStore.fetchAll(); + toast.success('Fabrication modifiée'); + } + else { + await fabricationsStore.create(payload); + toast.success('Fabrication créée'); + } + closeFormFab(); + } + catch { /* intercepteur */ } + finally { + submitting.value = false; + } +} +async function quickStatut(f, statut) { + await fabricationsStore.updateStatut(f.id, statut); + toast.success(`Statut → ${statutLabel(statut)}`); +} +async function changeStatut(f, statut) { + await fabricationsStore.updateStatut(f.id, statut); + detailFabrication.value = fabricationsStore.fabrications.find(x => x.id === f.id) ?? detailFabrication.value; + toast.success(`Statut → ${statutLabel(statut)}`); +} +async function deleteFabrication(id) { + if (!confirm('Supprimer cette fabrication ?')) + return; + await fabricationsStore.remove(id); + detailFabrication.value = null; + toast.success('Fabrication supprimée'); +} +onMounted(async () => { + await Promise.all([achatsStore.fetchAll(), fabricationsStore.fetchAll()]); +}); +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 max-w-[1800px] mx-auto space-y-6" }, +}); +__VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex flex-col md:flex-row md:items-center justify-between gap-4" }, +}); +__VLS_asFunctionalElement(__VLS_intrinsicElements.h1, __VLS_intrinsicElements.h1)({ + ...{ class: "text-3xl font-bold text-yellow tracking-tight" }, +}); +__VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex items-center gap-2 bg-bg-hard rounded-xl p-1 border border-bg-soft" }, +}); +for (const [tab] of __VLS_getVForSourceType((__VLS_ctx.tabs))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + __VLS_ctx.activeTab = tab.key; + } }, + key: (tab.key), + ...{ class: (['px-4 py-2 rounded-lg text-sm font-bold transition-all', + __VLS_ctx.activeTab === tab.key ? 'bg-yellow text-bg' : 'text-text-muted hover:text-text']) }, + }); + (tab.label); +} +__VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (__VLS_ctx.openCreateForm) }, + ...{ class: "btn-primary !bg-yellow !text-bg flex items-center gap-2 rounded-lg py-2 px-4 shadow-lg hover:scale-105 transition-all font-bold" }, +}); +__VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-lg" }, +}); +(__VLS_ctx.activeTab === 'achats' ? 'Ajouter un achat' : 'Nouvelle fabrication'); +if (__VLS_ctx.activeTab === 'achats') { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex flex-wrap gap-2 mb-4" }, + }); + for (const [cat] of __VLS_getVForSourceType((__VLS_ctx.categoriesAchat))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.activeTab === 'achats')) + return; + __VLS_ctx.filterCat = cat.val; + } }, + key: (cat.val), + ...{ class: (['px-3 py-1 rounded-full text-[10px] font-black uppercase tracking-widest transition-all border', + __VLS_ctx.filterCat === cat.val ? 'bg-yellow text-bg border-yellow' : 'bg-bg-hard text-text-muted border-bg-soft hover:text-text']) }, + }); + (cat.label); + } + if (__VLS_ctx.achatsStore.loading) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4" }, + }); + for (const [i] of __VLS_getVForSourceType((6))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + key: (i), + ...{ class: "card-jardin h-32 animate-pulse opacity-20" }, + }); + } + } + else if (__VLS_ctx.filteredAchats.length) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4" }, + }); + for (const [a] of __VLS_getVForSourceType((__VLS_ctx.filteredAchats))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.activeTab === 'achats')) + return; + if (!!(__VLS_ctx.achatsStore.loading)) + return; + if (!(__VLS_ctx.filteredAchats.length)) + return; + __VLS_ctx.openDetailAchat(a); + } }, + key: (a.id), + ...{ class: "card-jardin !p-0 overflow-hidden flex flex-col hover:border-yellow/40 transition-all border-l-[6px] cursor-pointer" }, + ...{ style: ({ borderLeftColor: __VLS_ctx.catAchatColor(a.categorie) }) }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "p-4 flex-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex items-start justify-between gap-2 mb-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: (['text-[8px] font-black uppercase tracking-widest px-1.5 py-0.5 rounded', __VLS_ctx.catAchatTextClass(a.categorie)]) }, + }); + (a.categorie); + __VLS_asFunctionalElement(__VLS_intrinsicElements.h3, __VLS_intrinsicElements.h3)({ + ...{ class: "text-text font-bold text-lg mt-1 leading-tight" }, + }); + (a.nom); + if (a.marque) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.p, __VLS_intrinsicElements.p)({ + ...{ class: "text-text-muted text-xs" }, + }); + (a.marque); + } + if (a.prix) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-yellow font-black text-lg shrink-0" }, + }); + (a.prix.toFixed(2)); + } + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex flex-wrap gap-2 mt-3" }, + }); + if (a.boutique_nom) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-[10px] bg-bg/40 px-2 py-0.5 rounded border border-bg-soft text-text-muted" }, + }); + (a.boutique_nom); + } + if (a.poids) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-[10px] bg-bg/40 px-2 py-0.5 rounded border border-bg-soft text-text-muted" }, + }); + (a.poids); + } + if (a.dluo) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: (['text-[10px] px-2 py-0.5 rounded border', + __VLS_ctx.isDluoExpired(a.dluo) ? 'bg-red/10 border-red/40 text-red' : 'bg-bg/40 border-bg-soft text-text-muted']) }, + }); + (a.dluo); + (__VLS_ctx.isDluoExpired(a.dluo) ? ' ⚠️' : ''); + } + } + } + else { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "text-center py-16 text-text-muted/40 italic" }, + }); + } +} +if (__VLS_ctx.activeTab === 'fabrications') { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex flex-wrap gap-2 mb-4" }, + }); + for (const [t] of __VLS_getVForSourceType((__VLS_ctx.typesFabrication))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.activeTab === 'fabrications')) + return; + __VLS_ctx.filterType = t.val; + } }, + key: (t.val), + ...{ class: (['px-3 py-1 rounded-full text-[10px] font-black uppercase tracking-widest transition-all border', + __VLS_ctx.filterType === t.val ? 'bg-yellow text-bg border-yellow' : 'bg-bg-hard text-text-muted border-bg-soft hover:text-text']) }, + }); + (t.label); + } + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "w-px bg-bg-soft mx-1" }, + }); + for (const [s] of __VLS_getVForSourceType((__VLS_ctx.statutsFabrication))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.activeTab === 'fabrications')) + return; + __VLS_ctx.filterStatut = s.val; + } }, + key: (s.val), + ...{ class: (['px-3 py-1 rounded-full text-[10px] font-black uppercase tracking-widest transition-all border', + __VLS_ctx.filterStatut === s.val ? `${s.bgClass} text-bg border-transparent` : 'bg-bg-hard text-text-muted border-bg-soft hover:text-text']) }, + }); + (s.label); + } + if (__VLS_ctx.fabricationsStore.loading) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4" }, + }); + for (const [i] of __VLS_getVForSourceType((4))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + key: (i), + ...{ class: "card-jardin h-40 animate-pulse opacity-20" }, + }); + } + } + else if (__VLS_ctx.filteredFabricatons.length) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4" }, + }); + for (const [f] of __VLS_getVForSourceType((__VLS_ctx.filteredFabricatons))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.activeTab === 'fabrications')) + return; + if (!!(__VLS_ctx.fabricationsStore.loading)) + return; + if (!(__VLS_ctx.filteredFabricatons.length)) + return; + __VLS_ctx.openDetailFabrication(f); + } }, + key: (f.id), + ...{ class: "card-jardin !p-0 overflow-hidden flex flex-col hover:border-yellow/40 transition-all border-l-[6px] cursor-pointer" }, + ...{ style: ({ borderLeftColor: __VLS_ctx.statutColor(f.statut || 'en_cours') }) }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "p-4 flex-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex items-start justify-between gap-2 mb-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex-1 min-w-0" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: (['text-[8px] font-black uppercase tracking-widest px-1.5 py-0.5 rounded', __VLS_ctx.typeFabTextClass(f.type)]) }, + }); + (f.type); + __VLS_asFunctionalElement(__VLS_intrinsicElements.h3, __VLS_intrinsicElements.h3)({ + ...{ class: "text-text font-bold text-lg mt-1 leading-tight" }, + }); + (f.nom); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: (['text-[9px] font-black px-2 py-0.5 rounded-full border shrink-0', __VLS_ctx.statutBadgeClass(f.statut || 'en_cours')]) }, + }); + (__VLS_ctx.statutLabel(f.statut || 'en_cours')); + if (f.ingredients?.length) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.p, __VLS_intrinsicElements.p)({ + ...{ class: "text-text-muted text-[10px] mb-2 truncate" }, + }); + (f.ingredients.map(i => i.nom).join(', ')); + } + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex flex-wrap gap-2" }, + }); + if (f.date_fin_prevue) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-[10px] bg-bg/40 px-2 py-0.5 rounded border border-bg-soft text-text-muted" }, + }); + (f.date_fin_prevue); + } + if (f.quantite_produite) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-[10px] bg-bg/40 px-2 py-0.5 rounded border border-bg-soft text-text-muted" }, + }); + (f.quantite_produite); + } + if (f.statut === 'en_cours') { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex border-t border-bg-soft" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.activeTab === 'fabrications')) + return; + if (!!(__VLS_ctx.fabricationsStore.loading)) + return; + if (!(__VLS_ctx.filteredFabricatons.length)) + return; + if (!(f.statut === 'en_cours')) + return; + __VLS_ctx.quickStatut(f, 'pret'); + } }, + ...{ class: "flex-1 py-2 text-[10px] font-black text-green hover:bg-green/10 transition-colors" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "w-px bg-bg-soft" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.activeTab === 'fabrications')) + return; + if (!!(__VLS_ctx.fabricationsStore.loading)) + return; + if (!(__VLS_ctx.filteredFabricatons.length)) + return; + if (!(f.statut === 'en_cours')) + return; + __VLS_ctx.quickStatut(f, 'echec'); + } }, + ...{ class: "flex-1 py-2 text-[10px] font-black text-red hover:bg-red/10 transition-colors" }, + }); + } + } + } + else { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "text-center py-16 text-text-muted/40 italic" }, + }); + } +} +if (__VLS_ctx.detailAchat) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.detailAchat)) + return; + __VLS_ctx.detailAchat = null; + } }, + ...{ class: "fixed inset-0 bg-black/80 backdrop-blur-sm z-50 flex items-center justify-center p-4" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg-hard rounded-3xl w-full max-w-lg border border-bg-soft shadow-2xl overflow-hidden flex flex-col max-h-[85vh]" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "p-5 border-b border-bg-soft flex justify-between items-start" }, + ...{ style: ({ borderLeft: `8px solid ${__VLS_ctx.catAchatColor(__VLS_ctx.detailAchat.categorie)}` }) }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: (['text-[9px] font-black uppercase tracking-widest px-2 py-0.5 rounded bg-bg/50', __VLS_ctx.catAchatTextClass(__VLS_ctx.detailAchat.categorie)]) }, + }); + (__VLS_ctx.detailAchat.categorie); + __VLS_asFunctionalElement(__VLS_intrinsicElements.h2, __VLS_intrinsicElements.h2)({ + ...{ class: "text-text font-black text-2xl mt-1" }, + }); + (__VLS_ctx.detailAchat.nom); + if (__VLS_ctx.detailAchat.marque) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.p, __VLS_intrinsicElements.p)({ + ...{ class: "text-text-muted text-sm" }, + }); + (__VLS_ctx.detailAchat.marque); + } + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.detailAchat)) + return; + __VLS_ctx.detailAchat = null; + } }, + ...{ class: "text-text-muted hover:text-red text-2xl" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "p-5 overflow-y-auto space-y-4" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "grid grid-cols-2 gap-3" }, + }); + if (__VLS_ctx.detailAchat.prix) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-[9px] font-black text-text-muted uppercase block mb-0.5" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-yellow font-black text-lg" }, + }); + (__VLS_ctx.detailAchat.prix.toFixed(2)); + } + if (__VLS_ctx.detailAchat.poids) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-[9px] font-black text-text-muted uppercase block mb-0.5" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-text font-bold" }, + }); + (__VLS_ctx.detailAchat.poids); + } + if (__VLS_ctx.detailAchat.boutique_nom) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-[9px] font-black text-text-muted uppercase block mb-0.5" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-text font-bold" }, + }); + (__VLS_ctx.detailAchat.boutique_nom); + } + if (__VLS_ctx.detailAchat.date_achat) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-[9px] font-black text-text-muted uppercase block mb-0.5" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-text text-sm" }, + }); + (__VLS_ctx.detailAchat.date_achat); + } + if (__VLS_ctx.detailAchat.dluo) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft col-span-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-[9px] font-black text-text-muted uppercase block mb-0.5" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: (['font-bold', __VLS_ctx.isDluoExpired(__VLS_ctx.detailAchat.dluo) ? 'text-red' : 'text-green']) }, + }); + (__VLS_ctx.detailAchat.dluo); + (__VLS_ctx.isDluoExpired(__VLS_ctx.detailAchat.dluo) ? ' ⚠️ Dépassée' : ' ✓ Valide'); + } + if (__VLS_ctx.detailAchat.boutique_url) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.a, __VLS_intrinsicElements.a)({ + href: (__VLS_ctx.detailAchat.boutique_url), + target: "_blank", + rel: "noopener", + ...{ class: "text-blue text-sm hover:underline" }, + }); + } + if (__VLS_ctx.detailAchat.notes) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg/40 p-4 rounded-2xl border-l-4 border-yellow/30 text-text/90 text-sm italic whitespace-pre-line" }, + }); + (__VLS_ctx.detailAchat.notes); + } + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "p-4 border-t border-bg-soft flex gap-3" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.detailAchat)) + return; + __VLS_ctx.startEditAchat(__VLS_ctx.detailAchat); + } }, + ...{ class: "btn-primary !bg-yellow !text-bg flex-1 py-2 font-black uppercase text-xs" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.detailAchat)) + return; + __VLS_ctx.deleteAchat(__VLS_ctx.detailAchat.id); + } }, + ...{ class: "btn-outline !border-red/20 !text-red hover:bg-red/10 px-4 py-2 font-black uppercase text-xs" }, + }); +} +if (__VLS_ctx.detailFabrication) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.detailFabrication)) + return; + __VLS_ctx.detailFabrication = null; + } }, + ...{ class: "fixed inset-0 bg-black/80 backdrop-blur-sm z-50 flex items-center justify-center p-4" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg-hard rounded-3xl w-full max-w-lg border border-bg-soft shadow-2xl overflow-hidden flex flex-col max-h-[85vh]" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "p-5 border-b border-bg-soft flex justify-between items-start" }, + ...{ style: ({ borderLeft: `8px solid ${__VLS_ctx.statutColor(__VLS_ctx.detailFabrication.statut || 'en_cours')}` }) }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex items-center gap-2 mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: (['text-[9px] font-black uppercase px-1.5 py-0.5 rounded', __VLS_ctx.typeFabTextClass(__VLS_ctx.detailFabrication.type)]) }, + }); + (__VLS_ctx.detailFabrication.type); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: (['text-[9px] font-black px-2 py-0.5 rounded-full border', __VLS_ctx.statutBadgeClass(__VLS_ctx.detailFabrication.statut || 'en_cours')]) }, + }); + (__VLS_ctx.statutLabel(__VLS_ctx.detailFabrication.statut || 'en_cours')); + __VLS_asFunctionalElement(__VLS_intrinsicElements.h2, __VLS_intrinsicElements.h2)({ + ...{ class: "text-text font-black text-2xl" }, + }); + (__VLS_ctx.detailFabrication.nom); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.detailFabrication)) + return; + __VLS_ctx.detailFabrication = null; + } }, + ...{ class: "text-text-muted hover:text-red text-2xl" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "p-5 overflow-y-auto space-y-4" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "grid grid-cols-2 gap-3" }, + }); + if (__VLS_ctx.detailFabrication.date_debut) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-[9px] font-black text-text-muted uppercase block mb-0.5" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-text text-sm" }, + }); + (__VLS_ctx.detailFabrication.date_debut); + } + if (__VLS_ctx.detailFabrication.date_fin_prevue) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-[9px] font-black text-text-muted uppercase block mb-0.5" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-text text-sm" }, + }); + (__VLS_ctx.detailFabrication.date_fin_prevue); + } + if (__VLS_ctx.detailFabrication.quantite_produite) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft col-span-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-[9px] font-black text-text-muted uppercase block mb-0.5" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-text font-bold" }, + }); + (__VLS_ctx.detailFabrication.quantite_produite); + } + if (__VLS_ctx.detailFabrication.ingredients?.length) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "space-y-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.h3, __VLS_intrinsicElements.h3)({ + ...{ class: "text-[9px] font-black text-text-muted uppercase tracking-widest" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "space-y-1" }, + }); + for (const [ing, i] of __VLS_getVForSourceType((__VLS_ctx.detailFabrication.ingredients))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + key: (i), + ...{ class: "flex justify-between items-center bg-bg/30 px-3 py-2 rounded-lg border border-bg-soft" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-text text-sm" }, + }); + (ing.nom); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-yellow font-bold text-sm" }, + }); + (ing.quantite); + } + } + if (__VLS_ctx.detailFabrication.notes) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg/40 p-4 rounded-2xl border-l-4 border-yellow/30 text-text/90 text-sm italic whitespace-pre-line" }, + }); + (__VLS_ctx.detailFabrication.notes); + } + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "space-y-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.h3, __VLS_intrinsicElements.h3)({ + ...{ class: "text-[9px] font-black text-text-muted uppercase tracking-widest" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex gap-2 flex-wrap" }, + }); + for (const [s] of __VLS_getVForSourceType((__VLS_ctx.statutsFabrication.slice(1)))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.detailFabrication)) + return; + __VLS_ctx.changeStatut(__VLS_ctx.detailFabrication, s.val); + } }, + key: (s.val), + disabled: (__VLS_ctx.detailFabrication.statut === s.val), + ...{ class: (['px-3 py-1 rounded-lg text-[10px] font-black uppercase border transition-all', + __VLS_ctx.detailFabrication.statut === s.val + ? `${s.bgClass} text-bg border-transparent cursor-default` + : 'border-bg-soft text-text-muted hover:text-text']) }, + }); + (s.label); + } + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "p-4 border-t border-bg-soft flex gap-3" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.detailFabrication)) + return; + __VLS_ctx.startEditFabrication(__VLS_ctx.detailFabrication); + } }, + ...{ class: "btn-primary !bg-yellow !text-bg flex-1 py-2 font-black uppercase text-xs" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.detailFabrication)) + return; + __VLS_ctx.deleteFabrication(__VLS_ctx.detailFabrication.id); + } }, + ...{ class: "btn-outline !border-red/20 !text-red hover:bg-red/10 px-4 py-2 font-black uppercase text-xs" }, + }); +} +if (__VLS_ctx.showFormAchat) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ onClick: (__VLS_ctx.closeFormAchat) }, + ...{ class: "fixed inset-0 bg-black/80 backdrop-blur-sm z-[60] flex items-center justify-center p-4" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg-hard rounded-3xl p-6 w-full max-w-2xl border border-bg-soft shadow-2xl max-h-[90vh] overflow-y-auto" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex items-center justify-between mb-6 border-b border-bg-soft pb-4" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.h2, __VLS_intrinsicElements.h2)({ + ...{ class: "text-text font-black text-xl uppercase" }, + }); + (__VLS_ctx.editAchat ? 'Modifier l\'achat' : 'Nouvel achat'); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (__VLS_ctx.closeFormAchat) }, + ...{ class: "text-text-muted hover:text-red text-2xl" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.form, __VLS_intrinsicElements.form)({ + ...{ onSubmit: (__VLS_ctx.submitAchat) }, + ...{ class: "grid grid-cols-1 md:grid-cols-2 gap-4" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "md:col-span-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex gap-2 flex-wrap" }, + }); + for (const [cat] of __VLS_getVForSourceType((__VLS_ctx.categoriesAchat.slice(1)))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.showFormAchat)) + return; + __VLS_ctx.formAchat.categorie = cat.val; + } }, + key: (cat.val), + type: "button", + ...{ class: (['px-3 py-1 rounded-full text-[10px] font-black uppercase border transition-all', + __VLS_ctx.formAchat.categorie === cat.val ? 'border-transparent text-bg' : 'border-bg-soft text-text-muted hover:text-text']) }, + ...{ style: (__VLS_ctx.formAchat.categorie === cat.val ? { background: __VLS_ctx.catAchatColor(cat.val) } : {}) }, + }); + (cat.label); + } + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "md:col-span-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + required: true, + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + placeholder: "Ex: Terreau universel Floragard", + }); + (__VLS_ctx.formAchat.nom); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + }); + (__VLS_ctx.formAchat.marque); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.select, __VLS_intrinsicElements.select)({ + value: (__VLS_ctx.formAchat.boutique_nom), + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm outline-none focus:border-yellow appearance-none" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.option, __VLS_intrinsicElements.option)({ + value: "", + }); + for (const [b] of __VLS_getVForSourceType((__VLS_ctx.BOUTIQUES))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.option, __VLS_intrinsicElements.option)({ + key: (b), + value: (b), + }); + (b); + } + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + type: "number", + step: "0.01", + min: "0", + placeholder: "0.00", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + }); + (__VLS_ctx.formAchat.prix); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + placeholder: "ex: 20L, 1kg, 500ml", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + }); + (__VLS_ctx.formAchat.poids); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + type: "date", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + }); + (__VLS_ctx.formAchat.date_achat); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + type: "date", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + }); + (__VLS_ctx.formAchat.dluo); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "md:col-span-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + type: "url", + placeholder: "https://...", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + }); + (__VLS_ctx.formAchat.boutique_url); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "md:col-span-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.textarea)({ + value: (__VLS_ctx.formAchat.notes), + rows: "2", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none resize-none" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "md:col-span-2 flex justify-between pt-4 border-t border-bg-soft" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (__VLS_ctx.closeFormAchat) }, + type: "button", + ...{ class: "text-text-muted hover:text-red uppercase text-xs font-bold px-6" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + type: "submit", + disabled: (__VLS_ctx.submitting), + ...{ class: "btn-primary px-8 py-3 !bg-yellow !text-bg font-black" }, + }); + (__VLS_ctx.editAchat ? 'Sauvegarder' : 'Enregistrer'); +} +if (__VLS_ctx.showFormFab) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ onClick: (__VLS_ctx.closeFormFab) }, + ...{ class: "fixed inset-0 bg-black/80 backdrop-blur-sm z-[60] flex items-center justify-center p-4" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg-hard rounded-3xl p-6 w-full max-w-2xl border border-bg-soft shadow-2xl max-h-[90vh] overflow-y-auto" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex items-center justify-between mb-6 border-b border-bg-soft pb-4" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.h2, __VLS_intrinsicElements.h2)({ + ...{ class: "text-text font-black text-xl uppercase" }, + }); + (__VLS_ctx.editFab ? 'Modifier' : 'Nouvelle fabrication'); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (__VLS_ctx.closeFormFab) }, + ...{ class: "text-text-muted hover:text-red text-2xl" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.form, __VLS_intrinsicElements.form)({ + ...{ onSubmit: (__VLS_ctx.submitFab) }, + ...{ class: "grid grid-cols-1 md:grid-cols-2 gap-4" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "md:col-span-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex gap-2 flex-wrap" }, + }); + for (const [t] of __VLS_getVForSourceType((__VLS_ctx.typesFabrication.slice(1)))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.showFormFab)) + return; + __VLS_ctx.formFab.type = t.val; + } }, + key: (t.val), + type: "button", + ...{ class: (['px-3 py-1 rounded-full text-[10px] font-black uppercase border transition-all', + __VLS_ctx.formFab.type === t.val ? `${t.bgClass} text-bg border-transparent` : 'border-bg-soft text-text-muted hover:text-text']) }, + }); + (t.label); + } + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "md:col-span-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + required: true, + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + placeholder: "Ex: Purin d'ortie mai 2026", + }); + (__VLS_ctx.formFab.nom); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + type: "date", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + }); + (__VLS_ctx.formFab.date_debut); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + type: "date", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + }); + (__VLS_ctx.formFab.date_fin_prevue); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.select, __VLS_intrinsicElements.select)({ + value: (__VLS_ctx.formFab.statut), + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm outline-none focus:border-yellow appearance-none" }, + }); + for (const [s] of __VLS_getVForSourceType((__VLS_ctx.statutsFabrication.slice(1)))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.option, __VLS_intrinsicElements.option)({ + key: (s.val), + value: (s.val), + }); + (s.label); + } + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + placeholder: "ex: 8L, 50kg", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + }); + (__VLS_ctx.formFab.quantite_produite); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "md:col-span-2 bg-bg/40 border border-bg-soft rounded-2xl p-4" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex items-center justify-between mb-3" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-[10px] font-black text-text-muted uppercase tracking-widest" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (__VLS_ctx.addIngredient) }, + type: "button", + ...{ class: "px-2 py-0.5 rounded-full text-[10px] font-bold border border-green/40 text-green hover:bg-green/10 transition-all" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "space-y-2" }, + }); + for (const [ing, i] of __VLS_getVForSourceType((__VLS_ctx.formFab.ingredients))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + key: (i), + ...{ class: "flex gap-2 items-center" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + placeholder: "Ingrédient", + ...{ class: "flex-1 bg-bg border border-bg-soft rounded-lg px-3 py-2 text-text text-sm focus:border-yellow outline-none" }, + }); + (ing.nom); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + placeholder: "Qté", + ...{ class: "w-24 bg-bg border border-bg-soft rounded-lg px-3 py-2 text-text text-sm focus:border-yellow outline-none" }, + }); + (ing.quantite); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.showFormFab)) + return; + __VLS_ctx.removeIngredient(i); + } }, + type: "button", + ...{ class: "text-red/60 hover:text-red text-lg leading-none" }, + }); + } + if (!__VLS_ctx.formFab.ingredients.length) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.p, __VLS_intrinsicElements.p)({ + ...{ class: "text-text-muted/40 text-xs italic" }, + }); + } + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "md:col-span-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.textarea)({ + value: (__VLS_ctx.formFab.notes), + rows: "3", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none resize-none" }, + placeholder: "Instructions, observations, recette...", + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "md:col-span-2 flex justify-between pt-4 border-t border-bg-soft" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (__VLS_ctx.closeFormFab) }, + type: "button", + ...{ class: "text-text-muted hover:text-red uppercase text-xs font-bold px-6" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + type: "submit", + disabled: (__VLS_ctx.submitting), + ...{ class: "btn-primary px-8 py-3 !bg-yellow !text-bg font-black" }, + }); + (__VLS_ctx.editFab ? 'Sauvegarder' : 'Créer'); +} +/** @type {__VLS_StyleScopedClasses['p-4']} */ ; +/** @type {__VLS_StyleScopedClasses['max-w-[1800px]']} */ ; +/** @type {__VLS_StyleScopedClasses['mx-auto']} */ ; +/** @type {__VLS_StyleScopedClasses['space-y-6']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-col']} */ ; +/** @type {__VLS_StyleScopedClasses['md:flex-row']} */ ; +/** @type {__VLS_StyleScopedClasses['md:items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-between']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-4']} */ ; +/** @type {__VLS_StyleScopedClasses['text-3xl']} */ ; +/** @type {__VLS_StyleScopedClasses['font-bold']} */ ; +/** @type {__VLS_StyleScopedClasses['text-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-tight']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-2']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg-hard']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['p-1']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['btn-primary']} */ ; +/** @type {__VLS_StyleScopedClasses['!bg-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['!text-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-2']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-lg']} */ ; +/** @type {__VLS_StyleScopedClasses['py-2']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['shadow-lg']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:scale-105']} */ ; +/** @type {__VLS_StyleScopedClasses['transition-all']} */ ; +/** @type {__VLS_StyleScopedClasses['font-bold']} */ ; +/** @type {__VLS_StyleScopedClasses['text-lg']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-wrap']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-2']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-4']} */ ; +/** @type {__VLS_StyleScopedClasses['grid']} */ ; +/** @type {__VLS_StyleScopedClasses['grid-cols-1']} */ ; +/** @type {__VLS_StyleScopedClasses['sm:grid-cols-2']} */ ; +/** @type {__VLS_StyleScopedClasses['lg:grid-cols-3']} */ ; +/** @type {__VLS_StyleScopedClasses['xl:grid-cols-4']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-4']} */ ; +/** @type {__VLS_StyleScopedClasses['card-jardin']} */ ; +/** @type {__VLS_StyleScopedClasses['h-32']} */ ; +/** @type {__VLS_StyleScopedClasses['animate-pulse']} */ ; +/** @type {__VLS_StyleScopedClasses['opacity-20']} */ ; +/** @type {__VLS_StyleScopedClasses['grid']} */ ; +/** @type {__VLS_StyleScopedClasses['grid-cols-1']} */ ; +/** @type {__VLS_StyleScopedClasses['sm:grid-cols-2']} */ ; +/** @type {__VLS_StyleScopedClasses['lg:grid-cols-3']} */ ; +/** @type {__VLS_StyleScopedClasses['xl:grid-cols-4']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-4']} */ ; +/** @type {__VLS_StyleScopedClasses['card-jardin']} */ ; +/** @type {__VLS_StyleScopedClasses['!p-0']} */ ; +/** @type {__VLS_StyleScopedClasses['overflow-hidden']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-col']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:border-yellow/40']} */ ; +/** @type {__VLS_StyleScopedClasses['transition-all']} */ ; +/** @type {__VLS_StyleScopedClasses['border-l-[6px]']} */ ; +/** @type {__VLS_StyleScopedClasses['cursor-pointer']} */ ; +/** @type {__VLS_StyleScopedClasses['p-4']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-1']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-start']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-between']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-2']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['font-bold']} */ ; +/** @type {__VLS_StyleScopedClasses['text-lg']} */ ; +/** @type {__VLS_StyleScopedClasses['mt-1']} */ ; +/** @type {__VLS_StyleScopedClasses['leading-tight']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['text-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-lg']} */ ; +/** @type {__VLS_StyleScopedClasses['shrink-0']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-wrap']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-2']} */ ; +/** @type {__VLS_StyleScopedClasses['mt-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/40']} */ ; +/** @type {__VLS_StyleScopedClasses['px-2']} */ ; +/** @type {__VLS_StyleScopedClasses['py-0.5']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/40']} */ ; +/** @type {__VLS_StyleScopedClasses['px-2']} */ ; +/** @type {__VLS_StyleScopedClasses['py-0.5']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-center']} */ ; +/** @type {__VLS_StyleScopedClasses['py-16']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted/40']} */ ; +/** @type {__VLS_StyleScopedClasses['italic']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-wrap']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-2']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-4']} */ ; +/** @type {__VLS_StyleScopedClasses['w-px']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['mx-1']} */ ; +/** @type {__VLS_StyleScopedClasses['grid']} */ ; +/** @type {__VLS_StyleScopedClasses['grid-cols-1']} */ ; +/** @type {__VLS_StyleScopedClasses['sm:grid-cols-2']} */ ; +/** @type {__VLS_StyleScopedClasses['lg:grid-cols-3']} */ ; +/** @type {__VLS_StyleScopedClasses['xl:grid-cols-4']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-4']} */ ; +/** @type {__VLS_StyleScopedClasses['card-jardin']} */ ; +/** @type {__VLS_StyleScopedClasses['h-40']} */ ; +/** @type {__VLS_StyleScopedClasses['animate-pulse']} */ ; +/** @type {__VLS_StyleScopedClasses['opacity-20']} */ ; +/** @type {__VLS_StyleScopedClasses['grid']} */ ; +/** @type {__VLS_StyleScopedClasses['grid-cols-1']} */ ; +/** @type {__VLS_StyleScopedClasses['sm:grid-cols-2']} */ ; +/** @type {__VLS_StyleScopedClasses['lg:grid-cols-3']} */ ; +/** @type {__VLS_StyleScopedClasses['xl:grid-cols-4']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-4']} */ ; +/** @type {__VLS_StyleScopedClasses['card-jardin']} */ ; +/** @type {__VLS_StyleScopedClasses['!p-0']} */ ; +/** @type {__VLS_StyleScopedClasses['overflow-hidden']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-col']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:border-yellow/40']} */ ; +/** @type {__VLS_StyleScopedClasses['transition-all']} */ ; +/** @type {__VLS_StyleScopedClasses['border-l-[6px]']} */ ; +/** @type {__VLS_StyleScopedClasses['cursor-pointer']} */ ; +/** @type {__VLS_StyleScopedClasses['p-4']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-1']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-start']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-between']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-2']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-2']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-1']} */ ; +/** @type {__VLS_StyleScopedClasses['min-w-0']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['font-bold']} */ ; +/** @type {__VLS_StyleScopedClasses['text-lg']} */ ; +/** @type {__VLS_StyleScopedClasses['mt-1']} */ ; +/** @type {__VLS_StyleScopedClasses['leading-tight']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-2']} */ ; +/** @type {__VLS_StyleScopedClasses['truncate']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-wrap']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/40']} */ ; +/** @type {__VLS_StyleScopedClasses['px-2']} */ ; +/** @type {__VLS_StyleScopedClasses['py-0.5']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/40']} */ ; +/** @type {__VLS_StyleScopedClasses['px-2']} */ ; +/** @type {__VLS_StyleScopedClasses['py-0.5']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['border-t']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-1']} */ ; +/** @type {__VLS_StyleScopedClasses['py-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-green']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:bg-green/10']} */ ; +/** @type {__VLS_StyleScopedClasses['transition-colors']} */ ; +/** @type {__VLS_StyleScopedClasses['w-px']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-1']} */ ; +/** @type {__VLS_StyleScopedClasses['py-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-red']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:bg-red/10']} */ ; +/** @type {__VLS_StyleScopedClasses['transition-colors']} */ ; +/** @type {__VLS_StyleScopedClasses['text-center']} */ ; +/** @type {__VLS_StyleScopedClasses['py-16']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted/40']} */ ; +/** @type {__VLS_StyleScopedClasses['italic']} */ ; +/** @type {__VLS_StyleScopedClasses['fixed']} */ ; +/** @type {__VLS_StyleScopedClasses['inset-0']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-black/80']} */ ; +/** @type {__VLS_StyleScopedClasses['backdrop-blur-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['z-50']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-center']} */ ; +/** @type {__VLS_StyleScopedClasses['p-4']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg-hard']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-3xl']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['max-w-lg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['shadow-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['overflow-hidden']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-col']} */ ; +/** @type {__VLS_StyleScopedClasses['max-h-[85vh]']} */ ; +/** @type {__VLS_StyleScopedClasses['p-5']} */ ; +/** @type {__VLS_StyleScopedClasses['border-b']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-between']} */ ; +/** @type {__VLS_StyleScopedClasses['items-start']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['mt-1']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:text-red']} */ ; +/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['p-5']} */ ; +/** @type {__VLS_StyleScopedClasses['overflow-y-auto']} */ ; +/** @type {__VLS_StyleScopedClasses['space-y-4']} */ ; +/** @type {__VLS_StyleScopedClasses['grid']} */ ; +/** @type {__VLS_StyleScopedClasses['grid-cols-2']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-3']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/30']} */ ; +/** @type {__VLS_StyleScopedClasses['p-3']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[9px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-0.5']} */ ; +/** @type {__VLS_StyleScopedClasses['text-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-lg']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/30']} */ ; +/** @type {__VLS_StyleScopedClasses['p-3']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[9px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-0.5']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['font-bold']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/30']} */ ; +/** @type {__VLS_StyleScopedClasses['p-3']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[9px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-0.5']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['font-bold']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/30']} */ ; +/** @type {__VLS_StyleScopedClasses['p-3']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[9px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-0.5']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/30']} */ ; +/** @type {__VLS_StyleScopedClasses['p-3']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[9px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-0.5']} */ ; +/** @type {__VLS_StyleScopedClasses['text-blue']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:underline']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/40']} */ ; +/** @type {__VLS_StyleScopedClasses['p-4']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['border-l-4']} */ ; +/** @type {__VLS_StyleScopedClasses['border-yellow/30']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text/90']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['italic']} */ ; +/** @type {__VLS_StyleScopedClasses['whitespace-pre-line']} */ ; +/** @type {__VLS_StyleScopedClasses['p-4']} */ ; +/** @type {__VLS_StyleScopedClasses['border-t']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-3']} */ ; +/** @type {__VLS_StyleScopedClasses['btn-primary']} */ ; +/** @type {__VLS_StyleScopedClasses['!bg-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['!text-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-1']} */ ; +/** @type {__VLS_StyleScopedClasses['py-2']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['btn-outline']} */ ; +/** @type {__VLS_StyleScopedClasses['!border-red/20']} */ ; +/** @type {__VLS_StyleScopedClasses['!text-red']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:bg-red/10']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-2']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['fixed']} */ ; +/** @type {__VLS_StyleScopedClasses['inset-0']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-black/80']} */ ; +/** @type {__VLS_StyleScopedClasses['backdrop-blur-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['z-50']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-center']} */ ; +/** @type {__VLS_StyleScopedClasses['p-4']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg-hard']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-3xl']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['max-w-lg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['shadow-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['overflow-hidden']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-col']} */ ; +/** @type {__VLS_StyleScopedClasses['max-h-[85vh]']} */ ; +/** @type {__VLS_StyleScopedClasses['p-5']} */ ; +/** @type {__VLS_StyleScopedClasses['border-b']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-between']} */ ; +/** @type {__VLS_StyleScopedClasses['items-start']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-2']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:text-red']} */ ; +/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['p-5']} */ ; +/** @type {__VLS_StyleScopedClasses['overflow-y-auto']} */ ; +/** @type {__VLS_StyleScopedClasses['space-y-4']} */ ; +/** @type {__VLS_StyleScopedClasses['grid']} */ ; +/** @type {__VLS_StyleScopedClasses['grid-cols-2']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-3']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/30']} */ ; +/** @type {__VLS_StyleScopedClasses['p-3']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[9px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-0.5']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/30']} */ ; +/** @type {__VLS_StyleScopedClasses['p-3']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[9px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-0.5']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/30']} */ ; +/** @type {__VLS_StyleScopedClasses['p-3']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[9px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-0.5']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['font-bold']} */ ; +/** @type {__VLS_StyleScopedClasses['space-y-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[9px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['space-y-1']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-between']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/30']} */ ; +/** @type {__VLS_StyleScopedClasses['px-3']} */ ; +/** @type {__VLS_StyleScopedClasses['py-2']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-lg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['text-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['font-bold']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/40']} */ ; +/** @type {__VLS_StyleScopedClasses['p-4']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['border-l-4']} */ ; +/** @type {__VLS_StyleScopedClasses['border-yellow/30']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text/90']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['italic']} */ ; +/** @type {__VLS_StyleScopedClasses['whitespace-pre-line']} */ ; +/** @type {__VLS_StyleScopedClasses['space-y-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[9px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-2']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-wrap']} */ ; +/** @type {__VLS_StyleScopedClasses['p-4']} */ ; +/** @type {__VLS_StyleScopedClasses['border-t']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-3']} */ ; +/** @type {__VLS_StyleScopedClasses['btn-primary']} */ ; +/** @type {__VLS_StyleScopedClasses['!bg-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['!text-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-1']} */ ; +/** @type {__VLS_StyleScopedClasses['py-2']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['btn-outline']} */ ; +/** @type {__VLS_StyleScopedClasses['!border-red/20']} */ ; +/** @type {__VLS_StyleScopedClasses['!text-red']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:bg-red/10']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-2']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['fixed']} */ ; +/** @type {__VLS_StyleScopedClasses['inset-0']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-black/80']} */ ; +/** @type {__VLS_StyleScopedClasses['backdrop-blur-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['z-[60]']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-center']} */ ; +/** @type {__VLS_StyleScopedClasses['p-4']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg-hard']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-3xl']} */ ; +/** @type {__VLS_StyleScopedClasses['p-6']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['max-w-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['shadow-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['max-h-[90vh]']} */ ; +/** @type {__VLS_StyleScopedClasses['overflow-y-auto']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-between']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-6']} */ ; +/** @type {__VLS_StyleScopedClasses['border-b']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['pb-4']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:text-red']} */ ; +/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['grid']} */ ; +/** @type {__VLS_StyleScopedClasses['grid-cols-1']} */ ; +/** @type {__VLS_StyleScopedClasses['md:grid-cols-2']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-4']} */ ; +/** @type {__VLS_StyleScopedClasses['md:col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-2']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-wrap']} */ ; +/** @type {__VLS_StyleScopedClasses['md:col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['appearance-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['md:col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['md:col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['resize-none']} */ ; +/** @type {__VLS_StyleScopedClasses['md:col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-between']} */ ; +/** @type {__VLS_StyleScopedClasses['pt-4']} */ ; +/** @type {__VLS_StyleScopedClasses['border-t']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:text-red']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['font-bold']} */ ; +/** @type {__VLS_StyleScopedClasses['px-6']} */ ; +/** @type {__VLS_StyleScopedClasses['btn-primary']} */ ; +/** @type {__VLS_StyleScopedClasses['px-8']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['!bg-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['!text-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['fixed']} */ ; +/** @type {__VLS_StyleScopedClasses['inset-0']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-black/80']} */ ; +/** @type {__VLS_StyleScopedClasses['backdrop-blur-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['z-[60]']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-center']} */ ; +/** @type {__VLS_StyleScopedClasses['p-4']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg-hard']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-3xl']} */ ; +/** @type {__VLS_StyleScopedClasses['p-6']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['max-w-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['shadow-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['max-h-[90vh]']} */ ; +/** @type {__VLS_StyleScopedClasses['overflow-y-auto']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-between']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-6']} */ ; +/** @type {__VLS_StyleScopedClasses['border-b']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['pb-4']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:text-red']} */ ; +/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['grid']} */ ; +/** @type {__VLS_StyleScopedClasses['grid-cols-1']} */ ; +/** @type {__VLS_StyleScopedClasses['md:grid-cols-2']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-4']} */ ; +/** @type {__VLS_StyleScopedClasses['md:col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-2']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-wrap']} */ ; +/** @type {__VLS_StyleScopedClasses['md:col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['appearance-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['md:col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/40']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['p-4']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-between']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['px-2']} */ ; +/** @type {__VLS_StyleScopedClasses['py-0.5']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-full']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-bold']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-green/40']} */ ; +/** @type {__VLS_StyleScopedClasses['text-green']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:bg-green/10']} */ ; +/** @type {__VLS_StyleScopedClasses['transition-all']} */ ; +/** @type {__VLS_StyleScopedClasses['space-y-2']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-2']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['flex-1']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-lg']} */ ; +/** @type {__VLS_StyleScopedClasses['px-3']} */ ; +/** @type {__VLS_StyleScopedClasses['py-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['w-24']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-lg']} */ ; +/** @type {__VLS_StyleScopedClasses['px-3']} */ ; +/** @type {__VLS_StyleScopedClasses['py-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-red/60']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:text-red']} */ ; +/** @type {__VLS_StyleScopedClasses['text-lg']} */ ; +/** @type {__VLS_StyleScopedClasses['leading-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted/40']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['italic']} */ ; +/** @type {__VLS_StyleScopedClasses['md:col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['resize-none']} */ ; +/** @type {__VLS_StyleScopedClasses['md:col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-between']} */ ; +/** @type {__VLS_StyleScopedClasses['pt-4']} */ ; +/** @type {__VLS_StyleScopedClasses['border-t']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:text-red']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['font-bold']} */ ; +/** @type {__VLS_StyleScopedClasses['px-6']} */ ; +/** @type {__VLS_StyleScopedClasses['btn-primary']} */ ; +/** @type {__VLS_StyleScopedClasses['px-8']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['!bg-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['!text-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +var __VLS_dollars; +const __VLS_self = (await import('vue')).defineComponent({ + setup() { + return { + achatsStore: achatsStore, + fabricationsStore: fabricationsStore, + activeTab: activeTab, + filterCat: filterCat, + filterType: filterType, + filterStatut: filterStatut, + submitting: submitting, + detailAchat: detailAchat, + detailFabrication: detailFabrication, + showFormAchat: showFormAchat, + editAchat: editAchat, + formAchat: formAchat, + showFormFab: showFormFab, + editFab: editFab, + formFab: formFab, + tabs: tabs, + BOUTIQUES: BOUTIQUES, + categoriesAchat: categoriesAchat, + typesFabrication: typesFabrication, + statutsFabrication: statutsFabrication, + filteredAchats: filteredAchats, + filteredFabricatons: filteredFabricatons, + isDluoExpired: isDluoExpired, + catAchatColor: catAchatColor, + catAchatTextClass: catAchatTextClass, + statutColor: statutColor, + statutBadgeClass: statutBadgeClass, + statutLabel: statutLabel, + typeFabTextClass: typeFabTextClass, + openCreateForm: openCreateForm, + openDetailAchat: openDetailAchat, + startEditAchat: startEditAchat, + closeFormAchat: closeFormAchat, + submitAchat: submitAchat, + deleteAchat: deleteAchat, + openDetailFabrication: openDetailFabrication, + startEditFabrication: startEditFabrication, + closeFormFab: closeFormFab, + addIngredient: addIngredient, + removeIngredient: removeIngredient, + submitFab: submitFab, + quickStatut: quickStatut, + changeStatut: changeStatut, + deleteFabrication: deleteFabrication, + }; + }, +}); +export default (await import('vue')).defineComponent({ + setup() { + return {}; + }, +}); +; /* PartiallyEnd: #4569/main.vue */ diff --git a/frontend/src/views/PlantesView.vue.js b/frontend/src/views/PlantesView.vue.js index f593697..73f1d2e 100644 --- a/frontend/src/views/PlantesView.vue.js +++ b/frontend/src/views/PlantesView.vue.js @@ -15,13 +15,29 @@ const loadingPhotos = ref(false); const lightbox = ref(null); const fileInput = ref(null); const uploadTarget = ref(null); -// Navigation variétés -const detailVarieties = ref([]); +// Navigation variétés (groupe de Plant par nom_commun) +const detailPlantGroup = ref([]); const detailVarietyIdx = ref(0); -const detailPlant = computed(() => detailVarieties.value[detailVarietyIdx.value] ?? null); +const detailPlant = computed(() => detailPlantGroup.value[detailVarietyIdx.value] ?? null); +// detailPlantObj : ref sur la plante ouverte en détail (Plant complet) +const detailPlantObj = ref(null); +// detailVarieties : variétés (PlantVariety) de la plante affichée +const detailVarieties = computed(() => { + if (!detailPlantObj.value) + return []; + return detailPlantObj.value.varieties ?? []; +}); // Associations au niveau nom_commun (première variété ayant des données) -const detailAssociations = computed(() => detailVarieties.value.find(v => v.associations_favorables?.length || v.associations_defavorables?.length) +const detailAssociations = computed(() => detailPlantGroup.value.find(v => v.associations_favorables?.length || v.associations_defavorables?.length) ?? detailPlant.value); +// Refs pour le formulaire variété +const showFormVariety = ref(false); +const editVariety = ref(null); +const formVariety = reactive({ + variete: '', tags: '', notes_variete: '', + boutique_nom: '', boutique_url: '', prix_achat: undefined, + date_achat: '', poids: '', dluo: '', +}); const categories = [ { val: '', label: 'TOUTES' }, { val: 'potager', label: '🥕 POTAGER' }, @@ -84,7 +100,7 @@ const filteredPlants = computed(() => { const q = searchQuery.value.toLowerCase(); result = result.filter(p => { const group = plantGroups.value.get((p.nom_commun || '').toLowerCase()) || []; - return group.some(v => v.nom_commun?.toLowerCase().includes(q) || v.variete?.toLowerCase().includes(q)); + return group.some(v => v.nom_commun?.toLowerCase().includes(q) || v.varieties?.[0]?.variete?.toLowerCase().includes(q)); }); } return result.sort((a, b) => (a.nom_commun || '').localeCompare(b.nom_commun || '', 'fr')); @@ -144,26 +160,30 @@ function catTextClass(cat) { }[cat] || 'text-text-muted'; } function closeDetail() { - detailVarieties.value = []; + detailPlantGroup.value = []; + detailPlantObj.value = null; detailVarietyIdx.value = 0; plantPhotos.value = []; } async function openDetails(p) { const key = (p.nom_commun || '').toLowerCase(); const group = plantGroups.value.get(key) || [p]; - detailVarieties.value = [...group].sort((a, b) => (a.id || 0) - (b.id || 0)); + detailPlantGroup.value = [...group].sort((a, b) => (a.id || 0) - (b.id || 0)); detailVarietyIdx.value = 0; - await fetchPhotos(detailVarieties.value[0].id); + detailPlantObj.value = detailPlantGroup.value[0]; + await fetchPhotos(detailPlantGroup.value[0].id); } async function prevVariety() { if (detailVarietyIdx.value > 0) { detailVarietyIdx.value--; + detailPlantObj.value = detailPlant.value; await fetchPhotos(detailPlant.value.id); } } async function nextVariety() { - if (detailVarietyIdx.value < detailVarieties.value.length - 1) { + if (detailVarietyIdx.value < detailPlantGroup.value.length - 1) { detailVarietyIdx.value++; + detailPlantObj.value = detailPlant.value; await fetchPhotos(detailPlant.value.id); } } @@ -186,15 +206,16 @@ function startEdit(p) { const withAssoc = group.find(v => v.associations_favorables?.length || v.associations_defavorables?.length) ?? p; closeDetail(); editPlant.value = p; + const v0 = p.varieties?.[0]; Object.assign(form, { - nom_commun: p.nom_commun || '', variete: p.variete || '', famille: p.famille || '', + nom_commun: p.nom_commun || '', variete: v0?.variete || '', famille: p.famille || '', categorie: p.categorie || 'potager', besoin_eau: p.besoin_eau || 'moyen', besoin_soleil: p.besoin_soleil || 'plein soleil', plantation_mois: p.plantation_mois || '', notes: p.notes || '', associations_favorables: [...(withAssoc.associations_favorables ?? [])], associations_defavorables: [...(withAssoc.associations_defavorables ?? [])], - boutique_nom: p.boutique_nom || '', boutique_url: p.boutique_url || '', - prix_achat: p.prix_achat ?? null, date_achat: p.date_achat || '', - poids: p.poids || '', dluo: p.dluo || '', + boutique_nom: v0?.boutique_nom || '', boutique_url: v0?.boutique_url || '', + prix_achat: v0?.prix_achat ?? null, date_achat: v0?.date_achat || '', + poids: v0?.poids || '', dluo: v0?.dluo || '', }); assocFilter.value = ''; showAssocModal.value = false; @@ -211,15 +232,87 @@ function closeForm() { date_achat: '', poids: '', dluo: '', }); } +function openAddVariety() { + if (!detailPlantObj.value) + return; + editVariety.value = null; + Object.assign(formVariety, { + variete: '', tags: '', notes_variete: '', + boutique_nom: '', boutique_url: '', prix_achat: undefined, + date_achat: '', poids: '', dluo: '', + }); + showFormVariety.value = true; +} +function openEditVariety(v) { + editVariety.value = v; + Object.assign(formVariety, { ...v }); + showFormVariety.value = true; +} +function closeFormVariety() { + showFormVariety.value = false; + editVariety.value = null; +} +async function submitVariety() { + if (!detailPlantObj.value?.id) + return; + const payload = { ...formVariety, prix_achat: formVariety.prix_achat ?? undefined }; + try { + if (editVariety.value?.id) { + await plantsStore.updateVariety(detailPlantObj.value.id, editVariety.value.id, payload); + toast.success('Variété modifiée'); + } + else { + await plantsStore.createVariety(detailPlantObj.value.id, payload); + toast.success('Variété ajoutée'); + } + // Refresh plant data so detailPlantObj reflects updated varieties + await plantsStore.fetchAll(); + const updatedPlant = plantsStore.plants.find(p => p.id === detailPlantObj.value?.id); + if (updatedPlant) + detailPlantObj.value = updatedPlant; + closeFormVariety(); + } + catch { + // L'intercepteur Axios affiche le message d'erreur + } +} +async function deleteVariety(vid) { + if (!detailPlantObj.value?.id) + return; + if (!confirm('Supprimer cette variété ?')) + return; + try { + await plantsStore.removeVariety(detailPlantObj.value.id, vid); + await plantsStore.fetchAll(); + const updatedPlant = plantsStore.plants.find(p => p.id === detailPlantObj.value?.id); + if (updatedPlant) + detailPlantObj.value = updatedPlant; + toast.success('Variété supprimée'); + } + catch { + // L'intercepteur Axios affiche le message d'erreur + } +} async function submitPlant() { if (submitting.value) return; submitting.value = true; try { - const payload = { ...form, prix_achat: form.prix_achat ?? undefined }; + // Extraire les champs variété du form (non envoyés dans Plant) + const varietyPayload = { + variete: form.variete || undefined, + boutique_nom: form.boutique_nom || undefined, + boutique_url: form.boutique_url || undefined, + prix_achat: form.prix_achat ?? undefined, + date_achat: form.date_achat || undefined, + poids: form.poids || undefined, + dluo: form.dluo || undefined, + }; + // Payload Plant pur (sans champs variété) + const { variete: _v, boutique_nom: _bn, boutique_url: _bu, prix_achat: _pa, date_achat: _da, poids: _po, dluo: _d, ...plantPayload } = { ...form }; if (editPlant.value) { - await axios.put(`/api/plants/${editPlant.value.id}`, payload); - // Synchroniser les associations à toutes les variétés du même nom commun + await axios.put(`/api/plants/${editPlant.value.id}`, plantPayload); + // Synchroniser associations aux plantes du même nom commun const nomKey = form.nom_commun.toLowerCase(); const siblings = plantsStore.plants.filter(p => p.id !== editPlant.value.id && (p.nom_commun || '').toLowerCase() === nomKey); for (const sibling of siblings) { @@ -228,11 +321,27 @@ async function submitPlant() { associations_defavorables: form.associations_defavorables, }); } + // Mettre à jour ou créer la variété + const existingVariety = editPlant.value.varieties?.[0]; + const hasVarietyData = Object.values(varietyPayload).some(v => v !== undefined); + const plantId = editPlant.value.id; + if (existingVariety?.id) { + await plantsStore.updateVariety(plantId, existingVariety.id, varietyPayload); + } + else if (hasVarietyData) { + await plantsStore.createVariety(plantId, varietyPayload); + } await plantsStore.fetchAll(); toast.success('Plante modifiée'); } else { - await plantsStore.create(payload); + const created = await plantsStore.create(plantPayload); + // Créer la variété si des données variété sont présentes + const hasVarietyData = Object.values(varietyPayload).some(v => v !== undefined); + if (created.id && hasVarietyData) { + await plantsStore.createVariety(created.id, varietyPayload); + } + await plantsStore.fetchAll(); toast.success('Plante créée'); } closeForm(); @@ -470,7 +579,7 @@ if (__VLS_ctx.detailPlant) { __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ ...{ class: "flex items-center gap-3 mt-3" }, }); - if (__VLS_ctx.detailVarieties.length > 1) { + if (__VLS_ctx.detailPlantGroup.length > 1) { __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ ...{ class: "flex items-center gap-2" }, }); @@ -484,19 +593,19 @@ if (__VLS_ctx.detailPlant) { ...{ class: "text-text-muted text-xs font-bold" }, }); (__VLS_ctx.detailVarietyIdx + 1); - (__VLS_ctx.detailVarieties.length); + (__VLS_ctx.detailPlantGroup.length); __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ ...{ onClick: (__VLS_ctx.nextVariety) }, - disabled: (__VLS_ctx.detailVarietyIdx === __VLS_ctx.detailVarieties.length - 1), + disabled: (__VLS_ctx.detailVarietyIdx === __VLS_ctx.detailPlantGroup.length - 1), ...{ class: (['w-7 h-7 rounded-full border flex items-center justify-center text-sm font-bold transition-all', - __VLS_ctx.detailVarietyIdx === __VLS_ctx.detailVarieties.length - 1 ? 'border-bg-soft text-text-muted/30 cursor-not-allowed' : 'border-yellow/50 text-yellow hover:bg-yellow/10']) }, + __VLS_ctx.detailVarietyIdx === __VLS_ctx.detailPlantGroup.length - 1 ? 'border-bg-soft text-text-muted/30 cursor-not-allowed' : 'border-yellow/50 text-yellow hover:bg-yellow/10']) }, }); } - if (__VLS_ctx.detailPlant.variete) { + if (__VLS_ctx.detailPlant.varieties?.[0]?.variete) { __VLS_asFunctionalElement(__VLS_intrinsicElements.p, __VLS_intrinsicElements.p)({ ...{ class: "text-yellow font-bold uppercase tracking-widest text-sm" }, }); - (__VLS_ctx.detailPlant.variete); + (__VLS_ctx.detailPlant.varieties?.[0]?.variete); } __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ ...{ onClick: (__VLS_ctx.closeDetail) }, @@ -550,7 +659,31 @@ if (__VLS_ctx.detailPlant) { ...{ class: "font-bold" }, }); (__VLS_ctx.detailPlant.plantation_mois); - if (__VLS_ctx.detailPlant.boutique_nom || __VLS_ctx.detailPlant.prix_achat || __VLS_ctx.detailPlant.poids || __VLS_ctx.detailPlant.dluo) { + if (__VLS_ctx.detailPlantObj?.temp_germination) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-[9px] font-black text-text-muted uppercase block mb-0.5" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-text text-sm" }, + }); + (__VLS_ctx.detailPlantObj.temp_germination); + } + if (__VLS_ctx.detailPlantObj?.temps_levee_j) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-[9px] font-black text-text-muted uppercase block mb-0.5" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-text text-sm" }, + }); + (__VLS_ctx.detailPlantObj.temps_levee_j); + } + if (__VLS_ctx.detailPlant.varieties?.[0]?.boutique_nom || __VLS_ctx.detailPlant.varieties?.[0]?.prix_achat || __VLS_ctx.detailPlant.varieties?.[0]?.poids || __VLS_ctx.detailPlant.varieties?.[0]?.dluo) { __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ ...{ class: "space-y-2" }, }); @@ -560,7 +693,7 @@ if (__VLS_ctx.detailPlant) { __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ ...{ class: "grid grid-cols-2 sm:grid-cols-3 gap-3" }, }); - if (__VLS_ctx.detailPlant.boutique_nom) { + if (__VLS_ctx.detailPlant.varieties?.[0]?.boutique_nom) { __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft" }, }); @@ -570,9 +703,9 @@ if (__VLS_ctx.detailPlant) { __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ ...{ class: "text-text text-sm font-bold" }, }); - (__VLS_ctx.detailPlant.boutique_nom); + (__VLS_ctx.detailPlant.varieties?.[0]?.boutique_nom); } - if (__VLS_ctx.detailPlant.prix_achat) { + if (__VLS_ctx.detailPlant.varieties?.[0]?.prix_achat) { __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft" }, }); @@ -582,9 +715,9 @@ if (__VLS_ctx.detailPlant) { __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ ...{ class: "text-yellow font-bold" }, }); - (__VLS_ctx.detailPlant.prix_achat.toFixed(2)); + (__VLS_ctx.detailPlant.varieties?.[0]?.prix_achat?.toFixed(2)); } - if (__VLS_ctx.detailPlant.date_achat) { + if (__VLS_ctx.detailPlant.varieties?.[0]?.date_achat) { __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft" }, }); @@ -594,9 +727,9 @@ if (__VLS_ctx.detailPlant) { __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ ...{ class: "text-text text-sm" }, }); - (__VLS_ctx.detailPlant.date_achat); + (__VLS_ctx.detailPlant.varieties?.[0]?.date_achat); } - if (__VLS_ctx.detailPlant.poids) { + if (__VLS_ctx.detailPlant.varieties?.[0]?.poids) { __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft" }, }); @@ -606,9 +739,9 @@ if (__VLS_ctx.detailPlant) { __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ ...{ class: "text-text text-sm font-bold" }, }); - (__VLS_ctx.detailPlant.poids); + (__VLS_ctx.detailPlant.varieties?.[0]?.poids); } - if (__VLS_ctx.detailPlant.dluo) { + if (__VLS_ctx.detailPlant.varieties?.[0]?.dluo) { __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft" }, }); @@ -616,12 +749,12 @@ if (__VLS_ctx.detailPlant) { ...{ class: "text-[9px] font-black text-text-muted uppercase block mb-0.5" }, }); __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ - ...{ class: (['text-sm font-bold', __VLS_ctx.isDluoExpired(__VLS_ctx.detailPlant.dluo) ? 'text-red' : 'text-green']) }, + ...{ class: (['text-sm font-bold', __VLS_ctx.isDluoExpired(__VLS_ctx.detailPlant.varieties?.[0]?.dluo ?? '') ? 'text-red' : 'text-green']) }, }); - (__VLS_ctx.detailPlant.dluo); - (__VLS_ctx.isDluoExpired(__VLS_ctx.detailPlant.dluo) ? ' ⚠️' : ''); + (__VLS_ctx.detailPlant.varieties?.[0]?.dluo); + (__VLS_ctx.isDluoExpired(__VLS_ctx.detailPlant.varieties?.[0]?.dluo ?? '') ? ' ⚠️' : ''); } - if (__VLS_ctx.detailPlant.boutique_url) { + if (__VLS_ctx.detailPlant.varieties?.[0]?.boutique_url) { __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ ...{ class: "bg-bg/30 p-3 rounded-xl border border-bg-soft" }, }); @@ -629,7 +762,7 @@ if (__VLS_ctx.detailPlant) { ...{ class: "text-[9px] font-black text-text-muted uppercase block mb-0.5" }, }); __VLS_asFunctionalElement(__VLS_intrinsicElements.a, __VLS_intrinsicElements.a)({ - href: (__VLS_ctx.detailPlant.boutique_url), + href: (__VLS_ctx.detailPlant.varieties?.[0]?.boutique_url), target: "_blank", rel: "noopener", ...{ class: "text-blue text-xs hover:underline truncate block" }, @@ -691,6 +824,69 @@ if (__VLS_ctx.detailPlant) { } } } + if (__VLS_ctx.detailVarieties.length) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "space-y-2 mt-4" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.h3, __VLS_intrinsicElements.h3)({ + ...{ class: "text-[9px] font-black text-text-muted uppercase tracking-widest" }, + }); + (__VLS_ctx.detailVarieties.length); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "space-y-1" }, + }); + for (const [v] of __VLS_getVForSourceType((__VLS_ctx.detailVarieties))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + key: (v.id), + ...{ class: "flex items-center justify-between bg-bg/30 px-3 py-2 rounded-lg border border-bg-soft" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-text text-sm font-bold" }, + }); + (v.variete || '(sans nom)'); + if (v.boutique_nom) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-text-muted text-xs ml-2" }, + }); + (v.boutique_nom); + } + if (v.prix_achat) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-yellow text-xs ml-2" }, + }); + (v.prix_achat.toFixed(2)); + } + if (v.dluo && __VLS_ctx.isDluoExpired(v.dluo)) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-red text-xs ml-1" }, + }); + } + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex gap-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.detailPlant)) + return; + if (!(__VLS_ctx.detailVarieties.length)) + return; + __VLS_ctx.openEditVariety(v); + } }, + ...{ class: "text-text-muted hover:text-yellow text-xs px-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (...[$event]) => { + if (!(__VLS_ctx.detailPlant)) + return; + if (!(__VLS_ctx.detailVarieties.length)) + return; + __VLS_ctx.deleteVariety(v.id); + } }, + ...{ class: "text-text-muted hover:text-red text-xs px-2" }, + }); + } + } __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ ...{ class: "space-y-3" }, }); @@ -766,6 +962,10 @@ if (__VLS_ctx.detailPlant) { __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ ...{ class: "p-4 bg-bg-hard border-t border-bg-soft flex gap-3" }, }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (__VLS_ctx.openAddVariety) }, + ...{ class: "btn-primary !bg-green !text-bg py-2 px-4 font-black uppercase text-xs flex items-center gap-1" }, + }); __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ ...{ onClick: (...[$event]) => { if (!(__VLS_ctx.detailPlant)) @@ -1249,6 +1449,152 @@ __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ ...{ class: "hidden" }, }); /** @type {typeof __VLS_ctx.fileInput} */ ; +if (__VLS_ctx.showFormVariety) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ onClick: (__VLS_ctx.closeFormVariety) }, + ...{ class: "fixed inset-0 bg-black/80 backdrop-blur-sm z-[70] flex items-center justify-center p-4" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "bg-bg-hard rounded-3xl p-6 w-full max-w-xl border border-bg-soft shadow-2xl max-h-[90vh] overflow-y-auto" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "flex items-center justify-between mb-5 border-b border-bg-soft pb-4" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.h2, __VLS_intrinsicElements.h2)({ + ...{ class: "text-text font-black text-xl uppercase" }, + }); + (__VLS_ctx.editVariety ? 'Modifier la variété' : '➕ Nouvelle variété'); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (__VLS_ctx.closeFormVariety) }, + ...{ class: "text-text-muted hover:text-red text-2xl" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.p, __VLS_intrinsicElements.p)({ + ...{ class: "text-text-muted text-xs mb-4 italic" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.span, __VLS_intrinsicElements.span)({ + ...{ class: "text-yellow font-bold" }, + }); + (__VLS_ctx.detailPlantObj?.nom_commun); + __VLS_asFunctionalElement(__VLS_intrinsicElements.form, __VLS_intrinsicElements.form)({ + ...{ onSubmit: (__VLS_ctx.submitVariety) }, + ...{ class: "grid grid-cols-1 md:grid-cols-2 gap-4" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "md:col-span-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + required: true, + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + placeholder: "Ex: Nantaise, Cornue des Andes, Moneymaker…", + }); + (__VLS_ctx.formVariety.variete); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "md:col-span-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + placeholder: "bio, f1, ancien, résistant…", + }); + (__VLS_ctx.formVariety.tags); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.select, __VLS_intrinsicElements.select)({ + value: (__VLS_ctx.formVariety.boutique_nom), + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm outline-none focus:border-yellow appearance-none" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.option, __VLS_intrinsicElements.option)({ + value: "", + }); + for (const [b] of __VLS_getVForSourceType((__VLS_ctx.BOUTIQUES))) { + __VLS_asFunctionalElement(__VLS_intrinsicElements.option, __VLS_intrinsicElements.option)({ + key: (b), + value: (b), + }); + (b); + } + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + type: "number", + step: "0.01", + min: "0", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + }); + (__VLS_ctx.formVariety.prix_achat); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + placeholder: "ex: 5g, 100 graines", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + }); + (__VLS_ctx.formVariety.poids); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + type: "date", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + }); + (__VLS_ctx.formVariety.date_achat); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({}); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + type: "date", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + }); + (__VLS_ctx.formVariety.dluo); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "md:col-span-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ + type: "url", + placeholder: "https://…", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none" }, + }); + (__VLS_ctx.formVariety.boutique_url); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "md:col-span-2" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.label, __VLS_intrinsicElements.label)({ + ...{ class: "text-text-muted text-[10px] font-black uppercase tracking-widest block mb-1" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.textarea)({ + value: (__VLS_ctx.formVariety.notes_variete), + rows: "3", + ...{ class: "w-full bg-bg border border-bg-soft rounded-xl px-4 py-3 text-text text-sm focus:border-yellow outline-none resize-none" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.div, __VLS_intrinsicElements.div)({ + ...{ class: "md:col-span-2 flex justify-between pt-4 border-t border-bg-soft" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + ...{ onClick: (__VLS_ctx.closeFormVariety) }, + type: "button", + ...{ class: "text-text-muted hover:text-red uppercase text-xs font-bold px-6" }, + }); + __VLS_asFunctionalElement(__VLS_intrinsicElements.button, __VLS_intrinsicElements.button)({ + type: "submit", + ...{ class: "btn-primary px-8 py-3 !bg-green !text-bg font-black" }, + }); + (__VLS_ctx.editVariety ? 'Sauvegarder' : 'Ajouter'); +} /** @type {__VLS_StyleScopedClasses['p-4']} */ ; /** @type {__VLS_StyleScopedClasses['max-w-[1800px]']} */ ; /** @type {__VLS_StyleScopedClasses['mx-auto']} */ ; @@ -1503,6 +1849,32 @@ __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ /** @type {__VLS_StyleScopedClasses['gap-2']} */ ; /** @type {__VLS_StyleScopedClasses['text-green']} */ ; /** @type {__VLS_StyleScopedClasses['font-bold']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/30']} */ ; +/** @type {__VLS_StyleScopedClasses['p-3']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[9px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-0.5']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/30']} */ ; +/** @type {__VLS_StyleScopedClasses['p-3']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[9px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-0.5']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; /** @type {__VLS_StyleScopedClasses['space-y-2']} */ ; /** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; /** @type {__VLS_StyleScopedClasses['font-black']} */ ; @@ -1653,6 +2025,45 @@ __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ /** @type {__VLS_StyleScopedClasses['py-0.5']} */ ; /** @type {__VLS_StyleScopedClasses['rounded-full']} */ ; /** @type {__VLS_StyleScopedClasses['capitalize']} */ ; +/** @type {__VLS_StyleScopedClasses['space-y-2']} */ ; +/** @type {__VLS_StyleScopedClasses['mt-4']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[9px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['space-y-1']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-between']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg/30']} */ ; +/** @type {__VLS_StyleScopedClasses['px-3']} */ ; +/** @type {__VLS_StyleScopedClasses['py-2']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-lg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['font-bold']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['ml-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['ml-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-red']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['ml-1']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-1']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:text-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['px-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:text-red']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['px-2']} */ ; /** @type {__VLS_StyleScopedClasses['space-y-3']} */ ; /** @type {__VLS_StyleScopedClasses['flex']} */ ; /** @type {__VLS_StyleScopedClasses['justify-between']} */ ; @@ -1722,6 +2133,17 @@ __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ /** @type {__VLS_StyleScopedClasses['flex']} */ ; /** @type {__VLS_StyleScopedClasses['gap-3']} */ ; /** @type {__VLS_StyleScopedClasses['btn-primary']} */ ; +/** @type {__VLS_StyleScopedClasses['!bg-green']} */ ; +/** @type {__VLS_StyleScopedClasses['!text-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['py-2']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-1']} */ ; +/** @type {__VLS_StyleScopedClasses['btn-primary']} */ ; /** @type {__VLS_StyleScopedClasses['!bg-yellow']} */ ; /** @type {__VLS_StyleScopedClasses['!text-bg']} */ ; /** @type {__VLS_StyleScopedClasses['flex-1']} */ ; @@ -2333,6 +2755,235 @@ __VLS_asFunctionalElement(__VLS_intrinsicElements.input)({ /** @type {__VLS_StyleScopedClasses['hover:opacity-90']} */ ; /** @type {__VLS_StyleScopedClasses['transition-opacity']} */ ; /** @type {__VLS_StyleScopedClasses['hidden']} */ ; +/** @type {__VLS_StyleScopedClasses['fixed']} */ ; +/** @type {__VLS_StyleScopedClasses['inset-0']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-black/80']} */ ; +/** @type {__VLS_StyleScopedClasses['backdrop-blur-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['z-[70]']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-center']} */ ; +/** @type {__VLS_StyleScopedClasses['p-4']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg-hard']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-3xl']} */ ; +/** @type {__VLS_StyleScopedClasses['p-6']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['max-w-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['shadow-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['max-h-[90vh]']} */ ; +/** @type {__VLS_StyleScopedClasses['overflow-y-auto']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['items-center']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-between']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-5']} */ ; +/** @type {__VLS_StyleScopedClasses['border-b']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['pb-4']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:text-red']} */ ; +/** @type {__VLS_StyleScopedClasses['text-2xl']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-4']} */ ; +/** @type {__VLS_StyleScopedClasses['italic']} */ ; +/** @type {__VLS_StyleScopedClasses['text-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['font-bold']} */ ; +/** @type {__VLS_StyleScopedClasses['grid']} */ ; +/** @type {__VLS_StyleScopedClasses['grid-cols-1']} */ ; +/** @type {__VLS_StyleScopedClasses['md:grid-cols-2']} */ ; +/** @type {__VLS_StyleScopedClasses['gap-4']} */ ; +/** @type {__VLS_StyleScopedClasses['md:col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['md:col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['appearance-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['md:col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['md:col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['text-[10px]']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['tracking-widest']} */ ; +/** @type {__VLS_StyleScopedClasses['block']} */ ; +/** @type {__VLS_StyleScopedClasses['mb-1']} */ ; +/** @type {__VLS_StyleScopedClasses['w-full']} */ ; +/** @type {__VLS_StyleScopedClasses['bg-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['border']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['rounded-xl']} */ ; +/** @type {__VLS_StyleScopedClasses['px-4']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text']} */ ; +/** @type {__VLS_StyleScopedClasses['text-sm']} */ ; +/** @type {__VLS_StyleScopedClasses['focus:border-yellow']} */ ; +/** @type {__VLS_StyleScopedClasses['outline-none']} */ ; +/** @type {__VLS_StyleScopedClasses['resize-none']} */ ; +/** @type {__VLS_StyleScopedClasses['md:col-span-2']} */ ; +/** @type {__VLS_StyleScopedClasses['flex']} */ ; +/** @type {__VLS_StyleScopedClasses['justify-between']} */ ; +/** @type {__VLS_StyleScopedClasses['pt-4']} */ ; +/** @type {__VLS_StyleScopedClasses['border-t']} */ ; +/** @type {__VLS_StyleScopedClasses['border-bg-soft']} */ ; +/** @type {__VLS_StyleScopedClasses['text-text-muted']} */ ; +/** @type {__VLS_StyleScopedClasses['hover:text-red']} */ ; +/** @type {__VLS_StyleScopedClasses['uppercase']} */ ; +/** @type {__VLS_StyleScopedClasses['text-xs']} */ ; +/** @type {__VLS_StyleScopedClasses['font-bold']} */ ; +/** @type {__VLS_StyleScopedClasses['px-6']} */ ; +/** @type {__VLS_StyleScopedClasses['btn-primary']} */ ; +/** @type {__VLS_StyleScopedClasses['px-8']} */ ; +/** @type {__VLS_StyleScopedClasses['py-3']} */ ; +/** @type {__VLS_StyleScopedClasses['!bg-green']} */ ; +/** @type {__VLS_StyleScopedClasses['!text-bg']} */ ; +/** @type {__VLS_StyleScopedClasses['font-black']} */ ; var __VLS_dollars; const __VLS_self = (await import('vue')).defineComponent({ setup() { @@ -2346,10 +2997,15 @@ const __VLS_self = (await import('vue')).defineComponent({ loadingPhotos: loadingPhotos, lightbox: lightbox, fileInput: fileInput, - detailVarieties: detailVarieties, + detailPlantGroup: detailPlantGroup, detailVarietyIdx: detailVarietyIdx, detailPlant: detailPlant, + detailPlantObj: detailPlantObj, + detailVarieties: detailVarieties, detailAssociations: detailAssociations, + showFormVariety: showFormVariety, + editVariety: editVariety, + formVariety: formVariety, categories: categories, BOUTIQUES: BOUTIQUES, form: form, @@ -2373,6 +3029,11 @@ const __VLS_self = (await import('vue')).defineComponent({ nextVariety: nextVariety, startEdit: startEdit, closeForm: closeForm, + openAddVariety: openAddVariety, + openEditVariety: openEditVariety, + closeFormVariety: closeFormVariety, + submitVariety: submitVariety, + deleteVariety: deleteVariety, submitPlant: submitPlant, removePlant: removePlant, openUpload: openUpload, diff --git a/frontend/src/views/TachesView.vue.js b/frontend/src/views/TachesView.vue.js index 43cf9b0..68290ca 100644 --- a/frontend/src/views/TachesView.vue.js +++ b/frontend/src/views/TachesView.vue.js @@ -99,7 +99,7 @@ const plantingsByGarden = computed(() => { function plantingLabel(p) { const plant = plantsStore.plants.find(pl => pl.id === p.variety_id); const nom = plant - ? [plant.nom_commun, plant.variete].filter(Boolean).join(' — ') + ? [plant.nom_commun, plant.varieties?.[0]?.variete].filter(Boolean).join(' — ') : `Variété #${p.variety_id}`; const date = p.date_plantation ? ` (${fmtDate(p.date_plantation)})` : ''; return `${nom}${date}`;