Accents FR, architecture modulaire, protocoles opérationnels

- Fix accents manquants dans 7 pages UI (décisions, boîte à outils, etc.)
- Titres accueil enrichis : Décisions structurantes, Documents de référence,
  Mandats et nominations, Protocoles et fonctionnement
- Retrait Embarquement Forgeron du seed (n'est pas une Decision)
- 2 protocoles opérationnels dans Protocoles : Embarquement Forgeron
  (lié à l'Acte d'engagement) + Soumission Runtime Upgrade (lié à la
  Décision Runtime Upgrade) avec timeline et liens croisés signalétiques
- Décision Runtime Upgrade : badge on-chain + lien protocole + contexte
- Document [slug] : lien protocole dans la section Qualification

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-03-03 07:05:55 +01:00
parent c19c1aa55e
commit 8201e73d7c
8 changed files with 328 additions and 221 deletions

View File

@@ -3,7 +3,7 @@
* Documents de reference — page index.
*
* Utilise SectionLayout avec status filters, recherche, tri,
* et sidebar "Boite a outils" affichant les protocoles de vote.
* et sidebar "Boîte à outils" affichant les protocoles de vote.
*/
import type { DocumentCreate } from '~/stores/documents'
@@ -29,7 +29,7 @@ const creating = ref(false)
const newDocTypeOptions = [
{ label: 'Licence', value: 'licence' },
{ label: 'Engagement', value: 'engagement' },
{ label: 'Reglement', value: 'reglement' },
{ label: 'Règlement', value: 'reglement' },
{ label: 'Constitution', value: 'constitution' },
]
@@ -48,7 +48,7 @@ onMounted(async () => {
/** Status filter pills with counts. */
const statuses = computed(() => [
{ id: 'draft', label: 'En prepa', count: documents.list.filter(d => d.status === 'draft').length },
{ id: 'draft', label: 'En prépa', count: documents.list.filter(d => d.status === 'draft').length },
{ id: 'voting', label: 'En vote', count: documents.list.filter(d => d.status === 'voting').length },
{ id: 'active', label: 'En vigueur', count: documents.list.filter(d => d.status === 'active').length },
{ id: 'archived', label: 'Clos', count: documents.list.filter(d => d.status === 'archived').length },
@@ -92,7 +92,7 @@ const typeLabel = (docType: string): string => {
switch (docType) {
case 'licence': return 'Licence'
case 'engagement': return 'Engagement'
case 'reglement': return 'Reglement'
case 'reglement': return 'Règlement'
case 'constitution': return 'Constitution'
default: return docType
}
@@ -154,8 +154,8 @@ async function createDocument() {
<template>
<SectionLayout
title="Documents de reference"
subtitle="Textes fondateurs sous vote permanent de la communaute"
title="Documents de référence"
subtitle="Textes fondateurs sous vote permanent de la communauté"
:statuses="statuses"
:active-status="activeStatus"
@update:active-status="activeStatus = $event"
@@ -206,7 +206,7 @@ async function createDocument() {
style="color: var(--mood-text-muted);"
>
<UIcon name="i-lucide-book-open" class="text-4xl mb-3 block mx-auto" />
<p>Aucun document trouve</p>
<p>Aucun document trouvé</p>
<p v-if="searchQuery || activeStatus" class="text-sm mt-1">
Essayez de modifier vos filtres
</p>
@@ -253,7 +253,7 @@ async function createDocument() {
<template #toolbox>
<ToolboxVignette
title="Modules"
:bullets="['Structurer en sections et clauses', 'Vote independant par clause']"
:bullets="['Structurer en sections et clauses', 'Vote indépendant par clause']"
:actions="[
{ label: 'Voir', icon: 'i-lucide-puzzle', emit: 'modules' },
]"
@@ -267,7 +267,7 @@ async function createDocument() {
/>
<ToolboxVignette
title="Inertie de remplacement"
:bullets="['4 niveaux de difficulte', 'Protege les textes fondamentaux']"
:bullets="['4 niveaux de difficulté', 'Protège les textes fondamentaux']"
:actions="[
{ label: 'Simuler', icon: 'i-lucide-sliders-horizontal', to: '/protocols/formulas', primary: true },
]"
@@ -280,7 +280,7 @@ async function createDocument() {
<template #content>
<div class="p-4 sm:p-6 space-y-4">
<h3 class="text-base sm:text-lg font-semibold" style="color: var(--mood-text);">
Nouveau document de reference
Nouveau document de référence
</h3>
<div class="space-y-4">
@@ -335,7 +335,7 @@ async function createDocument() {
<UTextarea
v-model="newDoc.description"
:rows="3"
placeholder="Decrivez brievement ce document..."
placeholder="Décrivez brièvement ce document..."
class="w-full"
/>
</div>
@@ -349,7 +349,7 @@ async function createDocument() {
@click="showNewDocModal = false"
/>
<UButton
label="Creer le document"
label="Créer le document"
icon="i-lucide-plus"
color="primary"
:loading="creating"