Audit complet de mise en forme — Bouton (3e élément du tableau)

Implémente toutes les options manquantes identifiées pour l'élément
Bouton : typographie (gras/italique/transformation/police/taille/
espacement des lettres/couleur), icône SVG optionnelle avec position
(avant/après le texte) et taille réglables — au-delà de l'Étiquette,
qui n'a qu'une icône fixe —, tous les attributs de boîte partagés déjà
créés pour Titre/Paragraphe/Image, et un effet visuel universel au
survol/clic.

Deux ajouts transversaux demandés pendant le test : un réglage "les 4
côtés de la bordure à la fois" dans le module de boîte partagé
(bénéficie automatiquement à tous les éléments qui l'utilisent), et le
glisser-déposer d'un élément du canevas vers une autre page via le
panneau Pages (le mécanisme serveur existait déjà pour la pagination
automatique, seule l'interaction manuelle manquait).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-09-26 12:47:46 +02:00
co-authored by Claude Sonnet 5
parent 9ad50c58b8
commit 8f879f6321
8 changed files with 529 additions and 16 deletions
+29 -1
View File
@@ -131,7 +131,35 @@ def element_default_attributes(kind: str) -> dict[str, Any]:
# qui reste réservé à la navigation (URL/ancre). Jamais les deux
# à la fois côté UI (voir document-editor.js), mais rien ne
# l'empêche structurellement ici.
return {"label": "Bouton", "target": "", "attachment_stored_name": "", "attachment_filename": ""}
#
# Audit du 26/09/2026 (réglages manquants — colonne "Bouton") :
# bold/italic/text_transform/font_family/font_size/letter_spacing/
# text_color (typo, jamais gérés par box_style.py) + svg_markup/
# icon_position/icon_size (icône avant/après le texte, absente
# même de l'étiquette qui n'a qu'un SVG fixe sans position ni
# taille réglables) + les attributs de boîte partagés. bold=False
# PAR DÉFAUT (le CSS de base garde son font-weight:700 tel quel
# tant que "bold" n'est pas explicitement activé — voir
# _render_button, qui ne pousse à 800 QUE si bold=True — aucune
# régression visuelle sur les boutons déjà créés).
return {
"label": "Bouton",
"target": "",
"attachment_stored_name": "",
"attachment_filename": "",
"bold": False,
"italic": False,
"text_transform": "none",
"font_family": "",
"font_size": "",
"letter_spacing": "",
"text_color": "",
"svg_markup": "",
"icon_position": "before",
"icon_size": "",
**BOX_DEFAULTS,
"border": default_border(),
}
if kind in ("liste_puces", "liste_numerotee"):
# Une seule et même structure d'attributs pour les deux kinds —
# "ordonnée ou non" se lit directement sur le kind au moment du
+5 -1
View File
@@ -65,7 +65,11 @@ Attributs posés à la création d'un élément de ce type (voir
`link_url` + `lazy_load` + `caption` : comportement/contenu, pas du
style + les attributs de boîte partagés), bouton (`label/target/
attachment_stored_name/attachment_filename` — la pièce jointe est
indépendante de `target`, réservé à la navigation), liste à
indépendante de `target`, réservé à la navigation — + `bold/italic/
text_transform/font_family/font_size/letter_spacing/text_color`
(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
(`content/svg_markup/width/border_radius/bold/uppercase` — tous vides
ou `False` par défaut = comportement historique inchangé, voir