feat(v13-d): Carte O Option B rectangle central + bandeau sommaire + legende + TMIP relie
- YAML carte-o-source : label central -> 'Une medecine du corps social pour
ecrire un nouveau contrat social' (phrase pleine 3 lignes)
- YAML : projet TMIP gagne lien_central:true (edge explicite centre <-> projet)
- build-carte-o.js : addEdge accepte opts.central=true pour tagger les edges
rattachees au noeud central (permet tuning force-link cote Vue)
- carte-o.json regenere : 17 nodes, 20 edges (vs 19 V1.2-O), tous les edges
central->thematiques + central->tmip portent flag central:true
- CarteO.vue : noeud central rendu en RECT 300x64 fill encre (vs cercle r30),
label blanc multi-tspan 3 lignes 13px font-weight 500 line-height 1.35
- CarteO.vue : splitCentralLabel reecrit pour wrap intelligent (3 lignes
~30 chars), preserve compat ' + ' (V1.2)
- CarteO.vue : force tuning V1.3 -> alphaDecay 0.025, velocityDecay 0.4,
forceCollide +12 (CENTRAL_COLLIDE_RADIUS=160 pour le rect), forceX/Y
strength 0.05 rappel cadre, link distance/strength differencies
(central->projet = 90/0.6, central->essai = 200/0.3)
- CarteO.vue : hover handler selector etendu rect|circle
- CarteOWrapper.vue : CarteEdge gagne champ central?:boolean
- ColCentre.astro : tabs Chatbot retires (ChatbotV2 import retire aussi),
remplaces par header bandeau 'Sommaire editorial d'architecture
d'ecologie politique' (gauche, monospace 12px) + legende 3 symboles
(publie ● / a venir ○ / projet 🟠) en droite
Build SSR : 5 pages prerender, 0 warning, 4.35s.
This commit is contained in:
@@ -35,11 +35,15 @@ async function main() {
|
||||
const edges = []
|
||||
const edgeSet = new Set()
|
||||
|
||||
function addEdge(source, target) {
|
||||
function addEdge(source, target, opts = {}) {
|
||||
const key = source < target ? `${source}|${target}` : `${target}|${source}`
|
||||
if (edgeSet.has(key)) return
|
||||
edgeSet.add(key)
|
||||
edges.push({ source, target })
|
||||
const edge = { source, target }
|
||||
// V1.3-D : tag les edges au noeud central pour permettre tuning force-link
|
||||
// (TMIP relie au centre = link court/fort, autres essais = link standard)
|
||||
if (opts.central) edge.central = true
|
||||
edges.push(edge)
|
||||
}
|
||||
|
||||
function addNode(obj) {
|
||||
@@ -70,11 +74,15 @@ async function main() {
|
||||
// toutes les thematiques rattachees directement au noeud central
|
||||
for (const th of data.thematiques) {
|
||||
addNode(th)
|
||||
addEdge(centreId, th.id)
|
||||
addEdge(centreId, th.id, { central: true })
|
||||
}
|
||||
|
||||
for (const proj of data.projets) {
|
||||
addNode(proj)
|
||||
// V1.3-D : edge explicite projet -> central (pont vision <-> pratique)
|
||||
if (proj.lien_central) {
|
||||
addEdge(centreId, proj.id, { central: true })
|
||||
}
|
||||
for (const thId of (proj.liens_thematiques || [])) {
|
||||
addEdge(proj.id, thId)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user