Audit complet de mise en forme — Liste à puces/numérotée (4e élément)

Implémente toutes les options manquantes identifiées pour les listes :
typographie complète, style/position/couleur/taille de puce (validés
selon le kind), puce personnalisée en SVG pour les listes à puces,
padding uniforme par élément (nouveau, il n'y en avait aucun), espacement
entre éléments réglable, et tous les attributs de boîte partagés sur la
liste entière. Bordure/fond/padding par élément individuel et sous-listes
imbriquées volontairement différés (portée actée avec l'utilisateur
avant implémentation : transformeraient le stockage des éléments en
objets structurés, chantier bien plus lourd).

Trois ajouts transversaux bénéficiant à plusieurs éléments : sections
"Contenu"/"Conteneur" dans tous les panneaux de propriétés, alignement
vertical du contenu dans son bloc (Titre/Paragraphe/Liste/Image
légendée), et une option pour retirer un thème appliqué ("Aucun modèle"
dans la modale, avec une nouvelle fonction db.remove_document_theme).

Quatre bugs réels trouvés et corrigés en chaîne pendant la validation
avec le thème "Sécurité incendie" : un badge de thème s'affichait
au-dessus du texte au lieu d'à côté ; le correctif a d'abord fait
disparaître les puces/numéros natifs de TOUTES les listes (bug plus
grave que celui corrigé) ; puis un marqueur natif redondant apparaissait
à côté du badge du thème ; puis une règle CSS site-large de spécificité
supérieure empêchait silencieusement ce dernier correctif. Chaque étape
vérifiée par navigateur automatisé sur un support jetable.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-09-26 15:13:14 +02:00
co-authored by Claude Sonnet 5
parent 8f879f6321
commit 4db1269348
17 changed files with 1080 additions and 34 deletions
+37 -1
View File
@@ -165,7 +165,43 @@ def element_default_attributes(kind: str) -> dict[str, Any]:
# "ordonnée ou non" se lit directement sur le kind au moment du
# rendu (voir render_document_element._render_list), jamais un
# attribut "ordered" redondant à tenir synchronisé avec le kind.
return {"items": ["Premier élément", "Deuxième élément"]}
#
# Audit du 26/09/2026 (réglages manquants — colonne "Liste à
# puces/numérotée") : portée actée avec l'utilisateur = style de
# la LISTE ENTIÈRE (typo/puces/boîte/bordure/fond), jamais un
# style par élément individuel ni de sous-listes (chantier bien
# plus lourd, transformerait `items` d'une liste de chaînes en
# objets structurés — différé à une demande séparée). Seule
# exception : `item_padding`, un padding UNIFORME appliqué à
# CHAQUE élément (retour utilisateur explicite : "il faut un
# padding de base par élément de liste car y en a pas
# aujourd'hui") — une valeur PARTAGÉE par tous les éléments,
# jamais réglable individuellement, voir _render_list.
# list_style_type : valide uniquement parmi les valeurs propres
# au kind (disc/circle/square/none pour puces,
# decimal/.../none pour numérotée) — vérifié au rendu, jamais ici.
# svg_markup (puce personnalisée) : ignoré au rendu pour
# liste_numerotee (une puce imagée n'a pas de sens sur une liste
# numérotée, voir _render_list).
return {
"items": ["Premier élément", "Deuxième élément"],
"bold": False,
"italic": False,
"underline": False,
"font_family": "",
"font_size": "",
"line_height": "",
"text_color": "",
"list_style_type": "",
"list_style_position": "outside",
"marker_color": "",
"marker_size": "",
"svg_markup": "",
"item_padding": "6px",
"item_spacing": "",
**BOX_DEFAULTS,
"border": default_border(),
}
if kind == "badge":
# Même esprit que titre/paragraphe (bold/align/color... déjà des
# attributs par élément, pas des choix figés par le moteur) :
+20 -5
View File
@@ -47,10 +47,14 @@ Attributs posés à la création d'un élément de ce type (voir
- **Retour** : un dict d'attributs par défaut, dépendant du `kind` (les
"attributs de boîte partagés" mentionnés ci-dessous — `padding/margin/
background_color/border_radius/width/max_width/height/min_height/
max_height/min_width/box_shadow/opacity/align_self/border` — sont
toujours les mêmes, voir `rendering/box_style.py` : tous vides,
`False` ou `"none"`/`"stretch"` par défaut = comportement historique
inchangé pour le kind qui les gagne) :
max_height/min_width/box_shadow/opacity/align_self/content_align/
border` — sont toujours les mêmes, voir `rendering/box_style.py` :
tous vides, `False` ou `"none"`/`"stretch"`/`"top"` par défaut =
comportement historique inchangé pour le kind qui les gagne ;
`content_align` — alignement vertical du CONTENU dans son bloc, retour
utilisateur du 26/09/2026 — n'est cependant appliqué au rendu QUE par
les kinds dont le conteneur est en colonne (texte, liste, figure d'une
image légendée), jamais par le Bouton, voir `rendering.md`) :
texte (`content/style` + `bold/italic/underline/strikethrough/align/
color/font_family/font_size/line_height/letter_spacing/
text_transform/text_shadow` + les attributs de boîte partagés),
@@ -70,7 +74,18 @@ Attributs posés à la création d'un élément de ce type (voir
(typo, jamais gérés par box_style.py) + `svg_markup/icon_position
("before"/"after")/icon_size` (icône optionnelle, voir rendering.md)
+ les attributs de boîte partagés), liste à
puces/numérotée (`items`, une liste de chaînes), badge
puces/numérotée (`items`, une liste de chaînes — style sur la LISTE
ENTIÈRE uniquement, jamais par élément individuel ni de sous-listes,
portée actée avec l'utilisateur le 26/09/2026 : `bold/italic/
underline/font_family/font_size/line_height/text_color` (typo) +
`list_style_type` (valide selon le kind, voir rendering.md)/
`list_style_position`/`marker_color`/`marker_size`/`svg_markup`
(puce personnalisée, liste à puces uniquement) + `item_padding`
(`"6px"` par défaut, PAS vide — retour utilisateur explicite : "il
faut un padding de base par élément de liste car y en a pas
aujourd'hui", UNIFORME sur tous les éléments, jamais réglable
individuellement) + `item_spacing` + les attributs de boîte
partagés), badge
(`content/svg_markup/width/border_radius/bold/uppercase` — tous vides
ou `False` par défaut = comportement historique inchangé, voir
rendering.md), carte (`label/title/description`, contenu pur sans