diff --git a/components/MediaTabBackend.vue b/components/MediaTabBackend.vue
index 94cf0fa..782677e 100644
--- a/components/MediaTabBackend.vue
+++ b/components/MediaTabBackend.vue
@@ -8,16 +8,6 @@
-
-
-
⏳ Backend en cours d'exposition publique — bientôt accessible.
-
L'interface LightRAG sera disponible ici dès la mise en place du sous-domaine lightrag.trans-former.fr.
-
-
-
diff --git a/components/MediaTabVisuel.vue b/components/MediaTabVisuel.vue
index d06b873..63188da 100644
--- a/components/MediaTabVisuel.vue
+++ b/components/MediaTabVisuel.vue
@@ -10,7 +10,7 @@
:class="[
layoutMode === 'split' ? 'carte-split' : '',
layoutMode === 'carte-full' ? 'carte-full' : '',
- layoutMode === 'chatbot-full' ? 'carte-hidden' : '',
+ (layoutMode === 'chatbot-full' || layoutMode === 'bonpote' || layoutMode === 'rag-backend') ? 'carte-hidden' : '',
]"
:style="layoutMode === 'split' ? { flexBasis: carteFlexBasis } : {}"
style="position: relative;"
@@ -80,33 +80,46 @@
Chatbot plein ecran
-
-
-
-
+
+
@@ -125,7 +138,7 @@
:class="[
layoutMode === 'split' ? 'chatbot-split' : '',
layoutMode === 'chatbot-full' ? 'chatbot-full-mode' : '',
- layoutMode === 'carte-full' ? 'chatbot-hidden' : '',
+ (layoutMode === 'carte-full' || layoutMode === 'bonpote' || layoutMode === 'rag-backend') ? 'chatbot-hidden' : '',
]"
:style="layoutMode === 'split' ? { flexBasis: chatbotFlexBasis } : {}"
>
@@ -189,6 +202,14 @@
+
+
+
+
+
@@ -264,7 +285,7 @@ interface LivreRag { slug: string; titre: string; annee: number; couches: string
interface AuteurData { id: string; nom: string; dates: string; ecoles: string[]; ecole_principale: string; livres_rag: LivreRag[]; theses_cles: string[]; bio_courte: string }
interface PenseesData { meta: any; ecoles: EcoleData[]; auteurs: AuteurData[] }
-type LayoutMode = 'split' | 'carte-full' | 'chatbot-full' | 'bonpote'
+type LayoutMode = 'split' | 'carte-full' | 'chatbot-full' | 'bonpote' | 'rag-backend'
const STORAGE_KEY = 'media-layout-mode'
const SPLIT_RATIO_KEY = 'media-split-ratio'
@@ -279,19 +300,15 @@ const chatbotAuteur = ref(null)
const layoutMode = ref('split')
const cartePenseesRef = ref<{ triggerResize: () => void } | null>(null)
-// Toggle PDF FRACAS
const showFracasPdf = ref(false)
const fracasOpacity = ref(60)
-// Props injectées depuis le parent (penseesData)
-const props = defineProps<{ penseesData: PenseesData | null }>()
+const penseesData = ref(null)
-// Ratio de la carte vs chatbot en mode split (0.2 a 0.8)
const splitRatio = ref(DEFAULT_SPLIT_RATIO)
const carteFlexBasis = computed(() => `${splitRatio.value * 100}%`)
const chatbotFlexBasis = computed(() => `${(1 - splitRatio.value) * 100}%`)
-// Logique poignee draggable
let dragStartY = 0
let dragStartRatio = DEFAULT_SPLIT_RATIO
let containerHeight = 0
@@ -321,10 +338,10 @@ function onHandleMouseup() {
cartePenseesRef.value?.triggerResize()
}
-onMounted(() => {
+onMounted(async () => {
if (typeof window !== 'undefined') {
const saved = localStorage.getItem(STORAGE_KEY) as LayoutMode | null
- if (saved && ['split', 'carte-full', 'chatbot-full', 'bonpote'].includes(saved)) {
+ if (saved && (['split', 'carte-full', 'chatbot-full', 'bonpote', 'rag-backend'] as string[]).includes(saved)) {
layoutMode.value = saved
}
const savedRatio = parseFloat(localStorage.getItem(SPLIT_RATIO_KEY) ?? '')
@@ -336,6 +353,11 @@ onMounted(() => {
localStorage.setItem('rag-fracas-info-seen', '1')
}
}
+ try {
+ penseesData.value = await $fetch('/data/auteurs-pensees.json?v=4.2')
+ } catch (e) {
+ console.error('Erreur chargement auteurs-pensees.json', e)
+ }
})
function setLayoutMode(mode: LayoutMode) {
@@ -343,7 +365,7 @@ function setLayoutMode(mode: LayoutMode) {
if (typeof window !== 'undefined') {
localStorage.setItem(STORAGE_KEY, mode)
}
- if (mode !== 'chatbot-full') {
+ if (mode === 'split' || mode === 'carte-full') {
setTimeout(() => {
cartePenseesRef.value?.triggerResize()
}, 350)
@@ -374,14 +396,14 @@ function onSelectAuteurFromEcole(auteurId: string) {
function onInterrogerEcole(ecoleId: string) {
ficheEcoleOpen.value = false
- const ecole = props.penseesData?.ecoles.find(e => e.id === ecoleId)
+ const ecole = penseesData.value?.ecoles.find(e => e.id === ecoleId)
chatbotAuteur.value = ecole?.label ?? null
if (layoutMode.value === 'carte-full') setLayoutMode('split')
}
function onInterrogerRag(auteurId: string) {
ficheOpen.value = false
- const auteur = props.penseesData?.auteurs.find(a => a.id === auteurId)
+ const auteur = penseesData.value?.auteurs.find(a => a.id === auteurId)
chatbotAuteur.value = auteur?.nom ?? null
if (layoutMode.value === 'carte-full') {
setLayoutMode('split')
@@ -481,28 +503,28 @@ function onInterrogerRag(auteurId: string) {
border-color: var(--nav-primary);
}
-/* --- Toggle layer PDF FRACAS --- */
-.layer-toggle {
+/* --- Contrôle fusionné carte des pensées + tickbox --- */
+.carte-pensees-ctrl {
display: inline-flex;
align-items: center;
- gap: 5px;
- padding: 4px 10px;
+ gap: 0;
border-radius: 6px;
- font-size: 0.75rem;
- font-weight: 500;
- cursor: pointer;
- background: var(--nav-bg-alt);
- color: var(--nav-text-muted);
- border: 1px solid transparent;
- user-select: none;
- margin-left: 4px;
+ overflow: hidden;
+ border: 1px solid rgba(180, 170, 160, 0.3);
}
-.layer-toggle input[type="checkbox"] {
- margin: 0;
+.fracas-check {
+ margin: 0 2px 0 7px;
cursor: pointer;
+ accent-color: var(--nav-primary, #3b6ea5);
}
+.carte-pensees-btn {
+ border-radius: 0;
+ border: none;
+}
+
+/* --- Slider opacité PDF --- */
.opacity-slider {
width: 80px;
cursor: pointer;
diff --git a/pages/media.vue b/pages/media.vue
index df39ccd..02591b9 100644
--- a/pages/media.vue
+++ b/pages/media.vue
@@ -5,24 +5,17 @@
:class="['subtab-btn', { active: tab === 'visuel' }]"
@click="tab = 'visuel'"
>
- 🌳 RAG visuel
-
-
-
@@ -31,9 +24,9 @@
const route = useRoute()
const router = useRouter()
-const tab = ref<'visuel' | 'backend' | 'projets'>(
- (['visuel', 'backend', 'projets'].includes(route.query.tab as string)
- ? route.query.tab as 'visuel' | 'backend' | 'projets'
+const tab = ref<'visuel' | 'projets'>(
+ (['visuel', 'projets'].includes(route.query.tab as string)
+ ? route.query.tab as 'visuel' | 'projets'
: 'visuel')
)