COMPONENT
IntentTree
Visualisation hiérarchique intent-first (SVG): zoom/pan, collapse, sélection, rendu nodes/links custom. Pensé pour Space Memoria.
datasince 0.2.0
DESIGN SYSTEM
mode
Dataset
Targaryen 🐉
Intent
Variant
Glow
Intensity
State
PLAYGROUND
Scope mode
fratrie = siblings (B)
Search
Match = intent “empowered” via nodeIntent (et/ou ton moteur interne).
Lineage highlight
Mini-map / Fullscreen / Toolbar
Toolbar actions
Layout
Orientation
Link style
Sizing
Interactions
Tree features
Grid
State (debug)
selectedId: null
collapsed: 0
PREVIEW
Aegon I Targaryen
The Conqueror🗓️ 27 BC → 37 AC
👑king🔥founder
Aenys I
Firstborn son
👑king🧬heir
Jaehaerys I
The Conciliator
👑king
Viserys I
Pre-Dance era
👑king
Rhaenyra
The Dance of the Dragons
🏷️princess🧬heir
Aegon III
After the Dance
👑king
Aegon II
The Dance rival
👑king
RESOLVED
{
  "mode": "dark",
  "intent": "informed",
  "variant": "elevated",
  "intensity": "medium",
  "toneEffective": "informed",
  "glowKey": null,
  "glowBackground": null,
  "style": {
    "--intent-bg": "rgb(var(--ids-informed))",
    "--intent-ring": "rgb(var(--ids-informed))",
    "--intent-text": "var(--ids-color-blue-200)",
    "--intent-bg-opacity": "0.16",
    "--intent-ring-opacity": "0.3045",
    "--intent-border": "rgb(var(--ids-informed))",
    "--intent-glow-bg": "",
    "--intent-glow-fill-opacity": "0",
    "--intent-glow-border-opacity": "0",
    "--intent-glow-filter": "none"
  },
  "classes": {
    "base": "intent-surface inline-flex items-center gap-2",
    "surface": "intent-bg",
    "border": "intent-ring",
    "text": "intent-text",
    "ring": "",
    "shadow": "intent-shadow-soft",
    "glow": "",
    "disabled": ""
  },
  "warnings": []
}
PROPS
PropTypeDefault
PROPS SYSTÈME
intent
Intent sémantique (informed/empowered/warned/threatened/themed/toned/glowed).
IntentNameDEFAULT_INTENT
variant
Variant visuel (flat/outlined/elevated/ghost).
VariantNameDEFAULT_VARIANT
tone
Override de tone (n’a d’effet que si intent='toned').
ToneNameDEFAULT_TONE (si toned)
glow
Glow normal (true/false) ou glow esthétique (uniquement si intent='glowed').
boolean | GlowNamefalse (ou DEFAULT_GLOW_BY_INTENT)
intensity
Intensité (soft/medium/strong).
Intensitymedium
mode
Mode colorimétrique (dark/light).
ModeNamedark
disabled
Désactive l’état visuel (hooks + styles).
booleanfalse
PROPS LOCALES
rootrequis
Racine de l’arbre.
T
getChildrenrequis
Accès aux enfants.
(node: T) => T[] | null | undefined
getIdrequis
Id stable par nœud.
(node: T) => string | number
getLabel
Label (renderer par défaut).
(node: T) => React.ReactNode
getSubtitle
Sous-label (renderer par défaut).
(node: T) => React.ReactNode
layout
Mode de layout: auto ou custom.
"auto" | "custom"auto
orientation
Orientation: vertical/horizontal.
"vertical" | "horizontal"vertical
linkStyle
Style des liens.
"curve" | "elbow" | "straight"curve
nodeWidth
Largeur node (default renderer + auto layout).
number220
nodeHeight
Hauteur node (default renderer + auto layout).
number64
levelGap
Distance entre niveaux.
number90
siblingGap
Distance entre siblings.
number28
padding
Padding autour du contenu.
number40
getNodePosition
Position custom (ex: D3 tree).
(args) => {x:number;y:number}
collapsible
Active collapse/expand.
booleantrue
collapsedIds
Ids collapsés (controlled).
string[]
defaultCollapsedIds
Ids collapsés init (uncontrolled).
string[][]
onCollapsedChange
Callback collapse.
(ids: string[]) => void
selectable
Active sélection.
booleantrue
selectedId
Sélection (controlled).
string | null
defaultSelectedId
Sélection init (uncontrolled).
string | nullnull
onSelectionChange
Callback sélection.
(id: string | null, node?: T) => void
nodeIntent
Override intent par node.
IntentInput | ((node:T)=>IntentInput|null)
renderNode
Renderer node custom.
(ctx) => React.ReactNode
renderLink
Renderer lien custom.
(ctx) => React.ReactNode
zoomable
Zoom (wheel/pinch).
booleantrue
pannable
Pan (drag).
booleantrue
minZoom
Zoom min.
number0.25
maxZoom
Zoom max.
number2.5
viewport
Viewport (controlled).
{x:number;y:number;k:number}
defaultViewport
Viewport init (uncontrolled).
{x:0,y:0,k:1}{x:0,y:0,k:1}
onViewportChange
Callback viewport.
(vp) => void
autoFit
Fit contenu au mount.
booleantrue
showGrid
Affiche grille de repère.
booleanfalse
gridSize
Taille grille.
number40
scopeMode
Mode scope: asc/desc/fratrie/full.
"asc" | "desc" | "siblings" | "full"full
scopeDepth
Limite de profondeur pour asc/desc.
numberInfinity
searchable
Active la recherche.
booleantrue
miniMap
Active la mini-map.
booleantrue
fullscreenable
Active le fullscreen.
booleantrue
emptyLabel
Label si arbre vide.
React.ReactNodeNo nodes
TYPES & CONSTANTES
APIValeur / Référence
TYPES
IntentNametype
Type union des intents sémantiques.
"informed" | "empowered" | "warned" | "threatened" | "themed" | "toned" | "glowed"
VariantNametype
Type union des variants visuels.
"flat" | "outlined" | "elevated" | "ghost"
ToneNametype
Type union des tones (familles Tailwind + theme + black).
("slate" | "gray" | ... | "theme" | "black")
GlowNametype
Type union des aesthetic glows (utilisable quand intent='glowed').
"aurora" | "ember" | "cosmic" | "mythic" | "royal" | "mono"
Intensitytype
Intensité des effets (glow/contraste).
"soft" | "medium" | "strong"
ModeNametype
Mode colorimétrique.
"dark" | "light"
CONSTANTES
DEFAULT_INTENTconst
Intent par défaut si aucun intent n’est fourni.
informed
DEFAULT_VARIANTconst
Variant par défaut si aucun variant n’est fourni.
elevated
DEFAULT_GLOW_BY_INTENTconst
Mapping intent → glow par défaut (quand glow est implicite).
DEFAULT_GLOW_BY_INTENT