Audit complet de mise en forme — Titre/Paragraphe (1er élément du tableau)

Nouveau module partagé document_engine/rendering/box_style.py
(padding/margin/background_color/border_radius/border par côté/height/
min-height/max-height/min-width/box-shadow/opacity/align_self) —
réutilisable tel quel par tous les kinds suivants du tableau d'audit.

Titre/Paragraphe gagnent : barré, police de caractère, taille de
police, hauteur de ligne, espacement des lettres, majuscules/
minuscules/capitales, ombre du texte, et tous les attributs de boîte
partagés ci-dessus. Interface entièrement à base de curseurs/cases à
cocher/listes déroulantes/sélecteurs de couleur natifs — plus aucun
champ de texte libre pour une valeur CSS (retour utilisateur).

Deux bugs transversaux corrigés au passage (concernent tout
l'éditeur) :
- Le panneau Propriétés n'était jamais reconstruit après un clic sur un
  bouton (gras/alignement/segments...) — il fallait recharger la page
  pour voir l'état réel. Corrigé dans forgeDocUpdateAttributes, point
  d'entrée unique de toute mise à jour d'attribut.
- Les cases à cocher et curseurs héritaient à tort le style d'un champ
  de texte (padding/bordure/fond/largeur 100%) via la règle générique
  .docField input.

Ajoute docs/plan/AUDIT_MISE_EN_FORME.md : suivi de l'audit élément par
élément (Titre/Paragraphe traité, Image ensuite).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-09-26 09:25:30 +02:00
co-authored by Claude Sonnet 5
parent e03bea39c5
commit 6c7675fad0
10 changed files with 942 additions and 25 deletions
+25 -2
View File
@@ -5,6 +5,7 @@ défaut posés à la création de chaque type."""
from typing import Any
from ..rendering.box_style import BOX_DEFAULTS, default_border
from .association_config import DEFAULT_ASSOCIATION_CONFIG
from .memory_config import DEFAULT_MEMORY_CONFIG
from .mots_config import DEFAULT_MOTS_CONFIG
@@ -44,12 +45,26 @@ _TEXT_DEFAULTS = {
"bold": False,
"italic": False,
"underline": False,
"strikethrough": False,
"align": "left",
"color": "var(--forge-text)",
# Vide par défaut = pleine largeur de .docPageContent (comportement
# historique) ; une valeur CSS libre (ex. "60ch", "480px") restreint
# la largeur du bloc — voir render_document_element._render_text.
"max_width": "",
# Vides par défaut = valeurs du préréglage `style` inchangées (voir
# _STYLE_PRESETS dans render_document_element.py) — une valeur
# explicite les remplace (retour utilisateur du 26/09/2026, audit des
# réglages manquants).
"font_family": "",
"font_size": "",
"line_height": "",
"letter_spacing": "",
"text_transform": "none",
"text_shadow": "",
# Attributs de boîte partagés avec d'autres kinds (padding/margin/
# background_color/border_radius/align_self) — voir rendering/box_style.py.
**BOX_DEFAULTS,
}
@@ -58,9 +73,17 @@ def element_default_attributes(kind: str) -> dict[str, Any]:
docs/plan/PLAN.md §3.3/§3.4/§3.5 pour la liste des propriétés
éditables par panneau, ici juste leur valeur de départ."""
if kind == "titre":
return {"content": "Nouveau titre", "style": "titre1", **_TEXT_DEFAULTS}
# "border" copié à chaque appel (jamais un dict partagé/muté par
# référence entre plusieurs éléments — même raison que la copie
# de "questions" pour le quiz plus bas).
return {"content": "Nouveau titre", "style": "titre1", **_TEXT_DEFAULTS, "border": default_border()}
if kind == "paragraphe":
return {"content": "Nouveau paragraphe de texte.", "style": "paragraphe", **_TEXT_DEFAULTS}
return {
"content": "Nouveau paragraphe de texte.",
"style": "paragraphe",
**_TEXT_DEFAULTS,
"border": default_border(),
}
if kind == "image":
# svg_markup (optionnel) prend le pas sur src au rendu (voir
# render_document_element._render_image) — un contenu vectoriel