@ea-lab/reactive-json-docs
Version:
Complete documentation for Reactive-JSON - Components, examples and LLM-parsable guides
1,203 lines (1,143 loc) • 68.3 kB
YAML
renderView:
- type: div
attributes:
style:
minHeight: 100vh
display: flex
flexDirection: column
backgroundColor: "#faf7f0"
fontFamily: "'Crimson Text', 'Times New Roman', serif"
content:
# Header élégant avec logo centré
- type: header
attributes:
style:
background: "linear-gradient(135deg, #1a0f0a 0%, #2d1b14 50%, #3d2818 100%)"
color: "#f4ead5"
padding: 1.5rem 0
position: relative
boxShadow: "0 4px 20px rgba(45, 27, 20, 0.5), inset 0 1px 0 rgba(184, 134, 11, 0.3)"
borderBottom: "1px solid #b8860b"
content:
# Ornement décoratif supérieur
- type: div
attributes:
style:
position: absolute
top: 0
left: 0
right: 0
height: 4px
background: "linear-gradient(90deg, transparent 0%, #b8860b 20%, #d4af37 50%, #b8860b 80%, transparent 100%)"
# Motif décoratif de fond
- type: div
attributes:
style:
position: absolute
top: 0
left: 0
right: 0
bottom: 0
opacity: 0.05
backgroundImage: "radial-gradient(circle at 20% 50%, #b8860b 2px, transparent 2px), radial-gradient(circle at 80% 50%, #b8860b 1px, transparent 1px)"
backgroundSize: "60px 30px, 40px 20px"
- type: div
attributes:
style:
maxWidth: 1200px
margin: 0 auto
padding: 0 2rem
display: flex
justifyContent: space-between
alignItems: center
position: relative
zIndex: 2
content:
# Navigation gauche
- type: nav
attributes:
style:
display: flex
gap: 2.5rem
alignItems: center
content:
- type: a
attributes:
href: "#accueil"
style:
color: "#f4ead5"
textDecoration: none
fontWeight: 300
fontSize: 1.1rem
fontFamily: "'Crimson Text', serif"
letterSpacing: 1px
padding: 0.5rem 1rem
borderRadius: 3px
transition: "all 0.3s ease"
content: "Accueil"
- type: div
attributes:
style:
color: "#b8860b"
fontSize: 0.8rem
content: "❖"
- type: a
attributes:
href: "#services"
style:
color: "#f4ead5"
textDecoration: none
fontWeight: 300
fontSize: 1.1rem
fontFamily: "'Crimson Text', serif"
letterSpacing: 1px
padding: 0.5rem 1rem
borderRadius: 3px
transition: "all 0.3s ease"
content: "Collections"
# Logo central
- type: div
attributes:
style:
display: flex
flexDirection: column
alignItems: center
textAlign: center
content:
# Ornement supérieur
- type: div
attributes:
style:
fontSize: 0.6rem
color: "#b8860b"
marginBottom: 0.2rem
fontFamily: "'Crimson Text', serif"
letterSpacing: 2px
content: "◊ ◊ ◊"
# Titre principal
- type: h1
attributes:
style:
margin: 0
fontSize: 1.4rem
fontWeight: 300
fontFamily: "'Playfair Display', 'Times New Roman', serif"
color: "#f4ead5"
letterSpacing: 2px
textShadow: "2px 2px 4px rgba(0,0,0,0.5)"
lineHeight: 1
content: "Bibliothèque"
# Sous-titre doré
- type: div
attributes:
style:
fontSize: 0.8rem
color: "#b8860b"
fontFamily: "'Playfair Display', serif"
fontWeight: 400
letterSpacing: 3px
marginTop: 0.1rem
textShadow: "1px 1px 2px rgba(0,0,0,0.3)"
content: "DORÉE"
# Navigation droite
- type: nav
attributes:
style:
display: flex
gap: 2.5rem
alignItems: center
content:
- type: a
attributes:
href: "#about"
style:
color: "#f4ead5"
textDecoration: none
fontWeight: 300
fontSize: 1.1rem
fontFamily: "'Crimson Text', serif"
letterSpacing: 1px
padding: 0.5rem 1rem
borderRadius: 3px
transition: "all 0.3s ease"
content: "À Propos"
- type: div
attributes:
style:
color: "#b8860b"
fontSize: 0.8rem
content: "❖"
- type: a
attributes:
href: "#correspondance"
style:
color: "#f4ead5"
textDecoration: none
fontWeight: 300
fontSize: 1.1rem
fontFamily: "'Crimson Text', serif"
letterSpacing: 1px
padding: 0.5rem 1rem
borderRadius: 3px
transition: "all 0.3s ease"
content: "Correspondance"
# Corps principal élégant
- type: main
attributes:
style:
flex: 1
padding: 4rem 0 4rem 0
position: relative
zIndex: 1
content:
- type: div
attributes:
style:
maxWidth: 1000px
margin: 0 auto
padding: 0 2rem
content:
# Section héro littéraire avec vidéo
- type: section
attributes:
id: accueil
style:
textAlign: center
marginBottom: 6rem
position: relative
padding: 8rem 3rem
overflow: hidden
borderRadius: 20px
border: "4px solid #b8860b"
boxShadow: "0 12px 24px rgba(45, 27, 20, 0.4)"
content:
# Vidéo d'arrière-plan
- type: video
attributes:
autoPlay: true
muted: true
loop: true
playsInline: true
style:
position: absolute
top: 0
left: 0
width: 100%
height: 100%
objectFit: cover
zIndex: 1
content:
- type: source
attributes:
src: "https://archive.org/download/BigBuckBunny_124/Content/big_buck_bunny_720p_surround.mp4"
type: "video/mp4"
# Overlay littéraire
- type: div
attributes:
style:
position: absolute
top: 0
left: 0
width: 100%
height: 100%
background: "linear-gradient(135deg, rgba(45, 27, 20, 0.8), rgba(139, 69, 19, 0.7))"
zIndex: 2
# Contenu héro raffiné
- type: div
attributes:
style:
position: relative
zIndex: 3
color: "#f4ead5"
content:
- type: div
attributes:
style:
fontSize: 1.5rem
marginBottom: 1rem
color: "#b8860b"
fontStyle: italic
content: "« L'art de l'écriture »"
- type: h2
attributes:
style:
fontSize: 4rem
marginBottom: 1.5rem
color: "#f4ead5"
textShadow: "3px 3px 6px rgba(0,0,0,0.8)"
fontWeight: 300
fontFamily: "'Playfair Display', serif"
letterSpacing: 3px
lineHeight: 1.2
content: "Bibliothèque Dorée"
- type: p
attributes:
style:
fontSize: 1.3rem
color: "#f4ead5"
maxWidth: 600px
margin: 0 auto 2.5rem
lineHeight: 1.8
textShadow: "1px 1px 3px rgba(0,0,0,0.8)"
fontStyle: italic
content: "Découvrez un univers littéraire raffiné où chaque mot résonne comme une mélodie, où chaque page révèle les secrets de l'art d'écrire."
- type: button
attributes:
style:
backgroundColor: "rgba(184, 134, 11, 0.9)"
color: "#f4ead5"
border: "2px solid #b8860b"
padding: 1.5rem 3rem
fontSize: 1.1rem
borderRadius: 50px
cursor: pointer
fontWeight: 400
fontFamily: "'Crimson Text', serif"
letterSpacing: 1px
boxShadow: "0 6px 12px rgba(0,0,0,0.4)"
transition: "all 0.3s ease"
textTransform: uppercase
content: "Explorer nos Trésors"
# Section collections raffinée
- type: section
attributes:
id: services
style:
marginBottom: 6rem
backgroundColor: "rgba(244, 234, 213, 0.3)"
padding: 4rem 3rem
borderRadius: 15px
border: "1px solid rgba(184, 134, 11, 0.3)"
content:
- type: div
attributes:
style:
textAlign: center
marginBottom: 1rem
fontSize: 1rem
color: "#8b4513"
letterSpacing: 2px
textTransform: uppercase
content: "Nos Collections"
- type: h3
attributes:
style:
fontSize: 3rem
textAlign: center
marginBottom: 3rem
color: "#2d1b14"
fontFamily: "'Playfair Display', serif"
fontWeight: 300
letterSpacing: 2px
content: "Œuvres d'Exception"
- type: div
attributes:
style:
display: grid
gridTemplateColumns: repeat(auto-fit, minmax(320px, 1fr))
gap: 2.5rem
content:
# Utilisation du composant Switch pour itérer sur les services
- type: Switch
content: ~.services
singleOption:
load: service-card
# Section À Propos littéraire
- type: section
attributes:
id: about
style:
marginBottom: 6rem
padding: 5rem 3rem
background: "linear-gradient(135deg, rgba(45, 27, 20, 0.05) 0%, rgba(184, 134, 11, 0.1) 50%, rgba(45, 27, 20, 0.05) 100%)"
borderRadius: 20px
border: "2px solid rgba(184, 134, 11, 0.3)"
position: relative
overflow: hidden
content:
# Ornement décoratif
- type: div
attributes:
style:
position: absolute
top: -50px
right: -50px
width: 200px
height: 200px
background: "radial-gradient(circle, rgba(184, 134, 11, 0.1) 0%, transparent 70%)"
borderRadius: 50%
- type: div
attributes:
style:
position: relative
zIndex: 2
maxWidth: 800px
margin: 0 auto
textAlign: center
content:
# En-tête de section
- type: div
attributes:
style:
marginBottom: 1.5rem
fontSize: 1rem
color: "#8b4513"
letterSpacing: 3px
textTransform: uppercase
fontFamily: "'Crimson Text', serif"
content: "Notre Histoire"
- type: h3
attributes:
style:
fontSize: 3.5rem
marginBottom: 3rem
color: "#2d1b14"
fontFamily: "'Playfair Display', serif"
fontWeight: 300
letterSpacing: 2px
lineHeight: 1.2
content: "L'Art des Lettres"
# Contenu principal en deux colonnes
- type: div
attributes:
style:
display: grid
gridTemplateColumns: "1fr 1fr"
gap: 4rem
marginBottom: 3rem
textAlign: left
content:
# Première colonne
- type: div
content:
- type: p
attributes:
style:
fontSize: 1.2rem
lineHeight: 1.8
color: "#2d1b14"
marginBottom: 2rem
fontFamily: "'Crimson Text', serif"
fontStyle: italic
content: "Depuis les premiers manuscrits enluminés jusqu'aux éditions contemporaines les plus raffinées, la Bibliothèque Dorée perpétue une tradition millénaire de préservation et de transmission du savoir littéraire."
- type: p
attributes:
style:
fontSize: 1.1rem
lineHeight: 1.7
color: "#3d2818"
fontFamily: "'Crimson Text', serif"
content: "Notre collection, constituée au fil des siècles par des bibliophiles passionnés, rassemble des trésors uniques : manuscrits médiévaux, éditions princeps, reliures précieuses et correspondances d'auteurs illustres."
# Deuxième colonne
- type: div
content:
- type: p
attributes:
style:
fontSize: 1.1rem
lineHeight: 1.7
color: "#3d2818"
marginBottom: 2rem
fontFamily: "'Crimson Text', serif"
content: "Chaque ouvrage qui compose notre fonds témoigne d'un art consommé de l'écriture et de l'édition. Nos artisans relieurs perpétuent des techniques ancestrales, créant des écrins dignes des plus beaux textes."
- type: p
attributes:
style:
fontSize: 1.2rem
lineHeight: 1.8
color: "#2d1b14"
fontFamily: "'Crimson Text', serif"
fontStyle: italic
content: "« Dans chaque livre réside une âme, dans chaque page bat un cœur, dans chaque mot vibre l'éternité de la pensée humaine. »"
# Citation ornementée
- type: div
attributes:
style:
backgroundColor: "rgba(184, 134, 11, 0.1)"
padding: 2.5rem
borderRadius: 15px
border: "1px solid rgba(184, 134, 11, 0.3)"
marginBottom: 3rem
position: relative
content:
# Guillemets décoratifs
- type: div
attributes:
style:
position: absolute
top: -10px
left: 20px
fontSize: 4rem
color: "#b8860b"
fontFamily: "'Playfair Display', serif"
lineHeight: 1
opacity: 0.7
content: "\""
- type: blockquote
attributes:
style:
fontSize: 1.3rem
fontStyle: italic
color: "#2d1b14"
textAlign: center
margin: 0
fontFamily: "'Playfair Display', serif"
letterSpacing: 1px
lineHeight: 1.6
content: "La vraie bibliothèque n'est pas un simple dépôt de livres, mais un temple où l'esprit humain dialogue avec l'éternité."
- type: cite
attributes:
style:
display: block
marginTop: 1.5rem
fontSize: 1rem
color: "#8b4513"
fontFamily: "'Crimson Text', serif"
letterSpacing: 2px
textTransform: uppercase
content: "— Fondateur de la Bibliothèque, MDCCCXII"
# Statistiques élégantes
- type: div
attributes:
style:
display: grid
gridTemplateColumns: repeat(3, 1fr)
gap: 2rem
marginTop: 2rem
content:
- type: div
attributes:
style:
textAlign: center
padding: 1.5rem
content:
- type: div
attributes:
style:
fontSize: 2.5rem
fontWeight: bold
color: "#b8860b"
fontFamily: "'Playfair Display', serif"
marginBottom: 0.5rem
content: "12,847"
- type: div
attributes:
style:
fontSize: 0.9rem
color: "#8b4513"
letterSpacing: 1px
textTransform: uppercase
fontFamily: "'Crimson Text', serif"
content: "Manuscrits Précieux"
- type: div
attributes:
style:
textAlign: center
padding: 1.5rem
content:
- type: div
attributes:
style:
fontSize: 2.5rem
fontWeight: bold
color: "#b8860b"
fontFamily: "'Playfair Display', serif"
marginBottom: 0.5rem
content: "214"
- type: div
attributes:
style:
fontSize: 0.9rem
color: "#8b4513"
letterSpacing: 1px
textTransform: uppercase
fontFamily: "'Crimson Text', serif"
content: "Années d'Histoire"
- type: div
attributes:
style:
textAlign: center
padding: 1.5rem
content:
- type: div
attributes:
style:
fontSize: 2.5rem
fontWeight: bold
color: "#b8860b"
fontFamily: "'Playfair Display', serif"
marginBottom: 0.5rem
content: "∞"
- type: div
attributes:
style:
fontSize: 0.9rem
color: "#8b4513"
letterSpacing: 1px
textTransform: uppercase
fontFamily: "'Crimson Text', serif"
content: "Sagesse Préservée"
# Section Catalogue d'ouvrages
- type: section
attributes:
id: catalogue
style:
marginBottom: 6rem
padding: 5rem 3rem
background: "linear-gradient(135deg, rgba(184, 134, 11, 0.08) 0%, rgba(45, 27, 20, 0.05) 50%, rgba(184, 134, 11, 0.08) 100%)"
borderRadius: 20px
border: "2px solid rgba(184, 134, 11, 0.2)"
position: relative
content:
# Titre de section
- type: div
attributes:
style:
textAlign: center
marginBottom: 1rem
fontSize: 1rem
color: "#8b4513"
letterSpacing: 2px
textTransform: uppercase
content: "Catalogue Littéraire"
- type: h3
attributes:
style:
fontSize: 3rem
textAlign: center
marginBottom: 4rem
color: "#2d1b14"
fontFamily: "'Playfair Display', serif"
fontWeight: 300
letterSpacing: 2px
content: "Trésors Bibliographiques"
# Interface de filtrage
- type: div
attributes:
style:
backgroundColor: "rgba(255, 255, 255, 0.7)"
padding: 2rem
borderRadius: 15px
marginBottom: 3rem
border: "1px solid rgba(184, 134, 11, 0.3)"
boxShadow: "0 4px 8px rgba(45, 27, 20, 0.1)"
content:
- type: h4
attributes:
style:
fontSize: 1.4rem
marginBottom: 1.5rem
color: "#2d1b14"
fontFamily: "'Playfair Display', serif"
fontWeight: 400
letterSpacing: 1px
content: "Filtres de Recherche"
- type: div
attributes:
style:
display: grid
gridTemplateColumns: "1fr 1fr 1fr"
gap: 1.5rem
marginBottom: 1.5rem
content:
# Recherche textuelle
- type: TextField
dataLocation: ~.livre_filters.recherche
label: "Recherche :"
placeholder: "Titre, auteur, résumé..."
inputAttributes:
style:
fontFamily: "'Crimson Text', serif"
border: "2px solid rgba(184, 134, 11, 0.3)"
borderRadius: 8px
padding: 0.7rem
# Date de début
- type: TextField
dataLocation: ~.livre_filters.publie_apres
label: "Publié après :"
inputType: "date"
inputAttributes:
style:
fontFamily: "'Crimson Text', serif"
border: "2px solid rgba(184, 134, 11, 0.3)"
borderRadius: 8px
padding: 0.7rem
# Date de fin
- type: TextField
dataLocation: ~.livre_filters.publie_avant
label: "Publié avant :"
inputType: "date"
inputAttributes:
style:
fontFamily: "'Crimson Text', serif"
border: "2px solid rgba(184, 134, 11, 0.3)"
borderRadius: 8px
padding: 0.7rem
# Filtres par statut (checkboxes)
- type: div
content:
- type: div
attributes:
style:
fontSize: 1rem
marginBottom: 1rem
color: "#8b4513"
fontFamily: "'Crimson Text', serif"
fontWeight: 500
content: "Statut de publication :"
- type: div
attributes:
style:
display: flex
gap: 2rem
flexWrap: wrap
content:
- type: CheckBoxField
dataLocation: ~.livre_filters.statuts.precommande
options:
- value: true
label: "Précommande"
attributes:
style:
fontFamily: "'Crimson Text', serif"
- type: CheckBoxField
dataLocation: ~.livre_filters.statuts.disponible
options:
- value: true
label: "Disponible"
attributes:
style:
fontFamily: "'Crimson Text', serif"
- type: CheckBoxField
dataLocation: ~.livre_filters.statuts.fin_commercialisation
options:
- value: true
label: "Fin de commercialisation"
attributes:
style:
fontFamily: "'Crimson Text', serif"
# Liste filtrée des ouvrages
- type: DataFilter
context: global
filters:
- subjectsWithProperty: ouvrage
andConditions:
# Filtre recherche textuelle
- orConditions:
- when: ~.livre_filters.recherche
isEmpty: true
- whenFilterableData: ouvrage.contenu_recherchable
contains: ~.livre_filters.recherche
# Filtre date après
- orConditions:
- when: ~.livre_filters.publie_apres
isEmpty: true
- whenFilterableData: ouvrage.date_publication
">=": ~.livre_filters.publie_apres
compareAsDates: true
# Filtre date avant
- orConditions:
- when: ~.livre_filters.publie_avant
isEmpty: true
- whenFilterableData: ouvrage.date_publication
"<=": ~.livre_filters.publie_avant
compareAsDates: true
# Filtre statuts (logique OR entre les statuts cochés)
- orConditions:
# Si aucun statut n'est coché, on affiche tout
- andConditions:
- when: ~.livre_filters.statuts.precommande
isNot: true
- when: ~.livre_filters.statuts.disponible
isNot: true
- when: ~.livre_filters.statuts.fin_commercialisation
isNot: true
# Si précommande est coché
- andConditions:
- when: ~.livre_filters.statuts.precommande
is: true
- whenFilterableData: ouvrage.statut
is: "precommande"
# Si disponible est coché
- andConditions:
- when: ~.livre_filters.statuts.disponible
is: true
- whenFilterableData: ouvrage.statut
is: "disponible"
# Si fin de commercialisation est coché
- andConditions:
- when: ~.livre_filters.statuts.fin_commercialisation
is: true
- whenFilterableData: ouvrage.statut
is: "fin_commercialisation"
content:
- type: Switch
contentWrapper:
tag: section
attributes:
style:
display: grid
gridTemplateColumns: "repeat(auto-fill, minmax(350px, 1fr))"
gap: 2rem
content: ~~.ouvrages
singleOption:
load: carte-ouvrage
paginated: true
paginationProps:
pageMaxItemCount: 4
maxPageButtonsCount: 5
after:
type: div
attributes:
style:
display: flex
justifyContent: center
marginTop: 2rem
padding: 1rem
backgroundColor: "rgba(255, 255, 255, 0.5)"
borderRadius: 10px
border: "1px solid rgba(184, 134, 11, 0.2)"
content:
type: PageControls
# Footer élégant
- type: footer
attributes:
id: correspondance
style:
backgroundColor: "#2d1b14"
color: "#f4ead5"
padding: 3rem 0
marginTop: auto
borderTop: "3px solid #b8860b"
content:
- type: div
attributes:
style:
maxWidth: 1000px
margin: 0 auto
padding: 0 2rem
textAlign: center
content:
- type: div
attributes:
style:
marginBottom: 2rem
content:
- type: h4
attributes:
style:
marginBottom: 1.5rem
fontSize: 1.8rem
fontFamily: "'Playfair Display', serif"
color: "#b8860b"
letterSpacing: 1px
content: "Correspondance"
- type: p
attributes:
style:
margin: 0.8rem 0
fontSize: 1.1rem
fontFamily: "'Crimson Text', serif"
content: "Missive : contact@bibliotheque-doree.fr"
- type: p
attributes:
style:
margin: 0.8rem 0
fontSize: 1.1rem
fontFamily: "'Crimson Text', serif"
content: "Télégraphe : 01 23 45 67 89"
# Bouton pour ouvrir le modal de contact
- type: button
attributes:
style:
backgroundColor: "#b8860b"
color: "#f4ead5"
border: "2px solid #d4af37"
padding: 1rem 2.5rem
fontSize: 1.1rem
borderRadius: 50px
cursor: pointer
fontWeight: 400
fontFamily: "'Crimson Text', serif"
letterSpacing: 1px
marginTop: 1.5rem
boxShadow: "0 4px 8px rgba(0,0,0,0.3)"
transition: "all 0.3s ease"
actions:
- what: setData
on: click
path: ~.show_contact_modal
value: true
when: ~.message_sent
isEmpty: true
- what: setData
on: click
path: ~.contact_form_step
value: 1
when: ~.message_sent
isEmpty: true
- what: hide
when: ~.message_sent
is: true
content: "Contactez-nous"
# Message de confirmation après envoi
- type: div
attributes:
style:
marginTop: 2.5rem
padding: 1rem 1.5rem
backgroundColor: "rgba(184, 134, 11, 0.1)"
border: "1px solid rgba(184, 134, 11, 0.3)"
borderRadius: 8px
textAlign: center
fontFamily: "'Crimson Text', serif"
fontSize: 1rem
color: "#8b4513"
fontStyle: italic
actions:
- what: hide
when: ~.message_sent
isEmpty: true
content: "✉️ Merci pour votre envoi, nous allons regarder bientôt votre missive avec attention."
- type: div
attributes:
style:
borderTop: "1px solid rgba(184, 134, 11, 0.5)"
marginTop: 3rem
paddingTop: 2rem
fontSize: 0.95rem
color: "rgba(244, 234, 213, 0.8)"
fontStyle: italic
content: "© MMXXIV Bibliothèque Dorée • Tous droits réservés avec déférence"
# Modal de contact
- type: Modal
showBoolPath: ~.show_contact_modal
closeButton: true
headerTitle:
type: div
attributes:
style:
textAlign: center
color: "#2d1b14"
fontFamily: "'Playfair Display', serif"
fontSize: 1.8rem
fontWeight: 300
letterSpacing: 1px
content: "Correspondance Distinguée"
body:
type: div
attributes:
style:
padding: 2rem
fontFamily: "'Crimson Text', serif"
content:
- type: div
attributes:
style:
marginBottom: 2rem
textAlign: center
color: "#8b4513"
fontStyle: italic
content: "Adressez-nous votre missive avec déférence"
# Indicateur d'étape
- type: div
attributes:
style:
display: flex
justifyContent: center
alignItems: center
marginBottom: 2rem
gap: 1rem
content:
- type: div
attributes:
style:
display: flex
alignItems: center
gap: 0.5rem
padding: 0.5rem 1rem
borderRadius: 20px
backgroundColor: "#b8860b"
color: "#f4ead5"
fontSize: 0.9rem
fontFamily: "'Crimson Text', serif"
fontWeight: 500
actions:
- what: hide
when: ~.contact_form_step
is: 2
content:
- "1"
- type: span
attributes:
style:
marginLeft: 0.5rem
content: "Informations"
- type: div
attributes:
style:
display: flex
alignItems: center
gap: 0.5rem
padding: 0.5rem 1rem
borderRadius: 20px
backgroundColor: "rgba(184, 134, 11, 0.3)"
color: "#8b4513"
fontSize: 0.9rem
fontFamily: "'Crimson Text', serif"
fontWeight: 500
actions:
- what: hide
when: ~.contact_form_step
is: 1
content:
- "1"
- type: span
attributes:
style:
marginLeft: 0.5rem
content: "Informations ✓"
- type: div
attributes:
style:
fontSize: 1.5rem
color: "#b8860b"
content: "→"
- type: div
attributes:
style:
display: flex
alignItems: center
gap: 0.5rem
padding: 0.5rem 1rem
borderRadius: 20px
backgroundColor: "rgba(184, 134, 11, 0.3)"
color: "#8b4513"
fontSize: 0.9rem
fontFamily: "'Crimson Text', serif"
fontWeight: 500
actions:
- what: hide
when: ~.contact_form_step
is: 2
content:
- "2"
- type: span
attributes:
style:
marginLeft: 0.5rem
content: "Message"
- type: div
attributes:
style:
display: flex
alignItems: center
gap: 0.5rem
padding: 0.5rem 1rem
borderRadius: 20px
backgroundColor: "#b8860b"
color: "#f4ead5"
fontSize: 0.9rem
fontFamily: "'Crimson Text', serif"
fontWeight: 500
actions:
- what: hide
when: ~.contact_form_step
is: 1
content:
- "2"
- type: span
attributes:
style:
marginLeft: 0.5rem
content: "Message"
# Formulaire de contact multistep
- type: div
attributes:
style:
maxWidth: 500px
margin: 0 auto
content:
# ÉTAPE 1 : Informations personnelles
- type: div
attributes:
style:
display: block
actions:
- what: hide
when: ~.contact_form_step
is: 2
content:
- type: TextField
dataLocation: ~.contact_form.nom
label: "Nom & Titre :"
placeholder: "Monsieur le Comte de..."
inputAttributes:
style:
fontFamily: "'Crimson Text', serif"
border: "2px solid rgba(184, 134, 11, 0.3)"
borderRadius: 8px
padding: 0.8rem
- type: TextField
dataLocation: ~.contact_form.email
label: "Missive électronique :"
placeholder: "votre.missive@domaine.fr"
inputType: "email"
inputAttributes:
style:
fontFamily: "'Crimson Text', serif"
border: "2px solid rgba(184, 134, 11, 0.3)"
borderRadius: 8px
padding: 0.8rem
- type: SelectField
dataLocation: ~.contact_form.sujet
label: "Objet de la correspondance :"
options:
- label: "Veuillez choisir l'objet de votre missive..."
value: ""
- label: "Consultation littéraire & expertise"
value: "consultation"
- label: "Acquisition d'ouvrages précieux"
value: "acquisition"
- label: "Restauration de manuscrits"
value: "restauration"
- label: "Reliure d'exception"
value: "reliure"
- label: "Évaluation & estimation"
value: "evaluation"
- label: "Donation & legs littéraires"
value: "donation"
- label: "Visite privée de la bibliothèque"
value: "visite"
- label: "Autre correspondance"
value: "autre"
inputAttributes:
style:
fontFamily: "'Crimson Text', serif"
border: "2px solid rgba(184, 134, 11, 0.3)"
borderRadius: 8px
padding: 0.8rem
# ÉTAPE 2 : Message
- type: div
attributes:
style:
display: block
actions:
- what: hide
when: ~.contact_form_step
is: 1
content:
- type: TextAreaField
dataLocation: ~.contact_form.message
label: "Votre message :"
placeholder: "Honoré Bibliothécaire,\n\nJ'ai l'honneur de vous écrire concernant..."
rows: 8
inputAttributes:
style:
fontFamily: "'Crimson Text', serif"
border: "2px solid rgba(184, 134, 11, 0.3)"
borderRadius: 8px
padding: 0.8rem
resize: "vertical"
# Boutons de navigation - ÉTAPE 1
- type: div