@ea-lab/reactive-json-docs 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/README-npm.md +49 -0
  2. package/README.md +86 -0
  3. package/package.json +79 -0
  4. package/public/rjbuild/component-doc/chartjs/components.yaml +252 -0
  5. package/public/rjbuild/component-doc/chartjs/overview.yaml +51 -0
  6. package/public/rjbuild/component-doc/core/action/HashChangeListener.md +90 -0
  7. package/public/rjbuild/component-doc/core/action/HashChangeListener.yaml +124 -0
  8. package/public/rjbuild/component-doc/core/action/Hide.md +22 -0
  9. package/public/rjbuild/component-doc/core/action/Hide.yaml +60 -0
  10. package/public/rjbuild/component-doc/core/action/MessageListener.md +93 -0
  11. package/public/rjbuild/component-doc/core/action/MessageListener.yaml +153 -0
  12. package/public/rjbuild/component-doc/core/action/Popover.md +26 -0
  13. package/public/rjbuild/component-doc/core/action/Popover.yaml +100 -0
  14. package/public/rjbuild/component-doc/core/action/ReactOnEvent.md +81 -0
  15. package/public/rjbuild/component-doc/core/action/ReactOnEvent.yaml +133 -0
  16. package/public/rjbuild/component-doc/core/action/Redirect.md +20 -0
  17. package/public/rjbuild/component-doc/core/action/Redirect.yaml +68 -0
  18. package/public/rjbuild/component-doc/core/action/Tooltip.md +22 -0
  19. package/public/rjbuild/component-doc/core/action/Tooltip.yaml +90 -0
  20. package/public/rjbuild/component-doc/core/action/VisuallyHide.md +21 -0
  21. package/public/rjbuild/component-doc/core/action/VisuallyHide.yaml +62 -0
  22. package/public/rjbuild/component-doc/core/action/index.md +214 -0
  23. package/public/rjbuild/component-doc/core/action/index.yaml +278 -0
  24. package/public/rjbuild/component-doc/core/element/form/CheckBoxField.md +276 -0
  25. package/public/rjbuild/component-doc/core/element/form/CheckBoxField.yaml +338 -0
  26. package/public/rjbuild/component-doc/core/element/form/DateField.md +189 -0
  27. package/public/rjbuild/component-doc/core/element/form/DateField.yaml +264 -0
  28. package/public/rjbuild/component-doc/core/element/form/NumberField.md +136 -0
  29. package/public/rjbuild/component-doc/core/element/form/NumberField.yaml +103 -0
  30. package/public/rjbuild/component-doc/core/element/form/SelectField.md +304 -0
  31. package/public/rjbuild/component-doc/core/element/form/SelectField.yaml +360 -0
  32. package/public/rjbuild/component-doc/core/element/form/TextAreaField.md +134 -0
  33. package/public/rjbuild/component-doc/core/element/form/TextAreaField.yaml +146 -0
  34. package/public/rjbuild/component-doc/core/element/form/TextField.md +129 -0
  35. package/public/rjbuild/component-doc/core/element/form/TextField.yaml +147 -0
  36. package/public/rjbuild/component-doc/core/element/form/formElementsCommon.md +106 -0
  37. package/public/rjbuild/component-doc/core/element/form/index.md +50 -0
  38. package/public/rjbuild/component-doc/core/element/form/index.yaml +96 -0
  39. package/public/rjbuild/component-doc/core/element/html/AccordionItem.yaml +47 -0
  40. package/public/rjbuild/component-doc/core/element/html/FolderSortableTree.yaml +81 -0
  41. package/public/rjbuild/component-doc/core/element/html/FormatNumeral.yaml +58 -0
  42. package/public/rjbuild/component-doc/core/element/html/Html.yaml +67 -0
  43. package/public/rjbuild/component-doc/core/element/html/LabelFromValue.yaml +54 -0
  44. package/public/rjbuild/component-doc/core/element/html/Modal.yaml +93 -0
  45. package/public/rjbuild/component-doc/core/element/html/PreformattedMarkup.yaml +37 -0
  46. package/public/rjbuild/component-doc/core/element/html/SortableTreeItemCollapseButton.yaml +92 -0
  47. package/public/rjbuild/component-doc/core/element/html/Tabs.yaml +57 -0
  48. package/public/rjbuild/component-doc/core/element/special/BootstrapElement.md +17 -0
  49. package/public/rjbuild/component-doc/core/element/special/BootstrapElement.yaml +18 -0
  50. package/public/rjbuild/component-doc/core/element/special/Count.md +37 -0
  51. package/public/rjbuild/component-doc/core/element/special/Count.yaml +325 -0
  52. package/public/rjbuild/component-doc/core/element/special/DataFilter.md +149 -0
  53. package/public/rjbuild/component-doc/core/element/special/DataFilter.yaml +315 -0
  54. package/public/rjbuild/component-doc/core/element/special/DelayedActions.md +51 -0
  55. package/public/rjbuild/component-doc/core/element/special/DelayedActions.yaml +55 -0
  56. package/public/rjbuild/component-doc/core/element/special/PageControls.md +126 -0
  57. package/public/rjbuild/component-doc/core/element/special/PageControls.yaml +133 -0
  58. package/public/rjbuild/component-doc/core/element/special/Phantom.md +31 -0
  59. package/public/rjbuild/component-doc/core/element/special/Phantom.yaml +34 -0
  60. package/public/rjbuild/component-doc/core/element/special/ReactiveJsonSubroot.md +27 -0
  61. package/public/rjbuild/component-doc/core/element/special/ReactiveJsonSubroot.yaml +51 -0
  62. package/public/rjbuild/component-doc/core/element/special/Switch.md +262 -0
  63. package/public/rjbuild/component-doc/core/element/special/Switch.yaml +348 -0
  64. package/public/rjbuild/component-doc/core/example/accordion.md +96 -0
  65. package/public/rjbuild/component-doc/core/example/accordion.yaml +64 -0
  66. package/public/rjbuild/component-doc/core/example/dynamic-content.md +197 -0
  67. package/public/rjbuild/component-doc/core/example/dynamic-content.yaml +237 -0
  68. package/public/rjbuild/component-doc/core/example/html.md +66 -0
  69. package/public/rjbuild/component-doc/core/example/html.yaml +83 -0
  70. package/public/rjbuild/component-doc/core/example/website.yaml +1663 -0
  71. package/public/rjbuild/component-doc/core/reaction/addData.md +96 -0
  72. package/public/rjbuild/component-doc/core/reaction/addData.yaml +133 -0
  73. package/public/rjbuild/component-doc/core/reaction/fetchData.md +60 -0
  74. package/public/rjbuild/component-doc/core/reaction/fetchData.yaml +156 -0
  75. package/public/rjbuild/component-doc/core/reaction/index.md +236 -0
  76. package/public/rjbuild/component-doc/core/reaction/index.yaml +254 -0
  77. package/public/rjbuild/component-doc/core/reaction/moveData.md +68 -0
  78. package/public/rjbuild/component-doc/core/reaction/moveData.yaml +71 -0
  79. package/public/rjbuild/component-doc/core/reaction/postMessage.md +63 -0
  80. package/public/rjbuild/component-doc/core/reaction/postMessage.yaml +68 -0
  81. package/public/rjbuild/component-doc/core/reaction/redirectNow.md +37 -0
  82. package/public/rjbuild/component-doc/core/reaction/redirectNow.yaml +37 -0
  83. package/public/rjbuild/component-doc/core/reaction/removeData.md +78 -0
  84. package/public/rjbuild/component-doc/core/reaction/removeData.yaml +56 -0
  85. package/public/rjbuild/component-doc/core/reaction/setClipboardData.md +44 -0
  86. package/public/rjbuild/component-doc/core/reaction/setClipboardData.yaml +41 -0
  87. package/public/rjbuild/component-doc/core/reaction/setData.md +93 -0
  88. package/public/rjbuild/component-doc/core/reaction/setData.yaml +85 -0
  89. package/public/rjbuild/component-doc/core/reaction/submitData.md +138 -0
  90. package/public/rjbuild/component-doc/core/reaction/submitData.yaml +141 -0
  91. package/public/rjbuild/component-doc/core/reaction/triggerEvent.md +59 -0
  92. package/public/rjbuild/component-doc/core/reaction/triggerEvent.yaml +59 -0
  93. package/public/rjbuild/component-doc/index.yaml +13 -0
@@ -0,0 +1,1663 @@
1
+ renderView:
2
+ - type: div
3
+ attributes:
4
+ style:
5
+ minHeight: 100vh
6
+ display: flex
7
+ flexDirection: column
8
+ backgroundColor: "#faf7f0"
9
+ fontFamily: "'Crimson Text', 'Times New Roman', serif"
10
+ content:
11
+ # Header élégant avec logo centré
12
+ - type: header
13
+ attributes:
14
+ style:
15
+ background: "linear-gradient(135deg, #1a0f0a 0%, #2d1b14 50%, #3d2818 100%)"
16
+ color: "#f4ead5"
17
+ padding: 1.5rem 0
18
+ position: relative
19
+ boxShadow: "0 4px 20px rgba(45, 27, 20, 0.5), inset 0 1px 0 rgba(184, 134, 11, 0.3)"
20
+ borderBottom: "1px solid #b8860b"
21
+ content:
22
+ # Ornement décoratif supérieur
23
+ - type: div
24
+ attributes:
25
+ style:
26
+ position: absolute
27
+ top: 0
28
+ left: 0
29
+ right: 0
30
+ height: 4px
31
+ background: "linear-gradient(90deg, transparent 0%, #b8860b 20%, #d4af37 50%, #b8860b 80%, transparent 100%)"
32
+
33
+ # Motif décoratif de fond
34
+ - type: div
35
+ attributes:
36
+ style:
37
+ position: absolute
38
+ top: 0
39
+ left: 0
40
+ right: 0
41
+ bottom: 0
42
+ opacity: 0.05
43
+ backgroundImage: "radial-gradient(circle at 20% 50%, #b8860b 2px, transparent 2px), radial-gradient(circle at 80% 50%, #b8860b 1px, transparent 1px)"
44
+ backgroundSize: "60px 30px, 40px 20px"
45
+
46
+ - type: div
47
+ attributes:
48
+ style:
49
+ maxWidth: 1200px
50
+ margin: 0 auto
51
+ padding: 0 2rem
52
+ display: flex
53
+ justifyContent: space-between
54
+ alignItems: center
55
+ position: relative
56
+ zIndex: 2
57
+ content:
58
+ # Navigation gauche
59
+ - type: nav
60
+ attributes:
61
+ style:
62
+ display: flex
63
+ gap: 2.5rem
64
+ alignItems: center
65
+ content:
66
+ - type: a
67
+ attributes:
68
+ href: "#accueil"
69
+ style:
70
+ color: "#f4ead5"
71
+ textDecoration: none
72
+ fontWeight: 300
73
+ fontSize: 1.1rem
74
+ fontFamily: "'Crimson Text', serif"
75
+ letterSpacing: 1px
76
+ padding: 0.5rem 1rem
77
+ borderRadius: 3px
78
+ transition: "all 0.3s ease"
79
+ content: "Accueil"
80
+
81
+ - type: div
82
+ attributes:
83
+ style:
84
+ color: "#b8860b"
85
+ fontSize: 0.8rem
86
+ content: "❖"
87
+
88
+ - type: a
89
+ attributes:
90
+ href: "#services"
91
+ style:
92
+ color: "#f4ead5"
93
+ textDecoration: none
94
+ fontWeight: 300
95
+ fontSize: 1.1rem
96
+ fontFamily: "'Crimson Text', serif"
97
+ letterSpacing: 1px
98
+ padding: 0.5rem 1rem
99
+ borderRadius: 3px
100
+ transition: "all 0.3s ease"
101
+ content: "Collections"
102
+
103
+ # Logo central
104
+ - type: div
105
+ attributes:
106
+ style:
107
+ display: flex
108
+ flexDirection: column
109
+ alignItems: center
110
+ textAlign: center
111
+ content:
112
+ # Ornement supérieur
113
+ - type: div
114
+ attributes:
115
+ style:
116
+ fontSize: 0.6rem
117
+ color: "#b8860b"
118
+ marginBottom: 0.2rem
119
+ fontFamily: "'Crimson Text', serif"
120
+ letterSpacing: 2px
121
+ content: "◊ ◊ ◊"
122
+
123
+ # Titre principal
124
+ - type: h1
125
+ attributes:
126
+ style:
127
+ margin: 0
128
+ fontSize: 1.4rem
129
+ fontWeight: 300
130
+ fontFamily: "'Playfair Display', 'Times New Roman', serif"
131
+ color: "#f4ead5"
132
+ letterSpacing: 2px
133
+ textShadow: "2px 2px 4px rgba(0,0,0,0.5)"
134
+ lineHeight: 1
135
+ content: "Bibliothèque"
136
+
137
+ # Sous-titre doré
138
+ - type: div
139
+ attributes:
140
+ style:
141
+ fontSize: 0.8rem
142
+ color: "#b8860b"
143
+ fontFamily: "'Playfair Display', serif"
144
+ fontWeight: 400
145
+ letterSpacing: 3px
146
+ marginTop: 0.1rem
147
+ textShadow: "1px 1px 2px rgba(0,0,0,0.3)"
148
+ content: "DORÉE"
149
+
150
+ # Navigation droite
151
+ - type: nav
152
+ attributes:
153
+ style:
154
+ display: flex
155
+ gap: 2.5rem
156
+ alignItems: center
157
+ content:
158
+ - type: a
159
+ attributes:
160
+ href: "#about"
161
+ style:
162
+ color: "#f4ead5"
163
+ textDecoration: none
164
+ fontWeight: 300
165
+ fontSize: 1.1rem
166
+ fontFamily: "'Crimson Text', serif"
167
+ letterSpacing: 1px
168
+ padding: 0.5rem 1rem
169
+ borderRadius: 3px
170
+ transition: "all 0.3s ease"
171
+ content: "À Propos"
172
+
173
+ - type: div
174
+ attributes:
175
+ style:
176
+ color: "#b8860b"
177
+ fontSize: 0.8rem
178
+ content: "❖"
179
+
180
+ - type: a
181
+ attributes:
182
+ href: "#correspondance"
183
+ style:
184
+ color: "#f4ead5"
185
+ textDecoration: none
186
+ fontWeight: 300
187
+ fontSize: 1.1rem
188
+ fontFamily: "'Crimson Text', serif"
189
+ letterSpacing: 1px
190
+ padding: 0.5rem 1rem
191
+ borderRadius: 3px
192
+ transition: "all 0.3s ease"
193
+ content: "Correspondance"
194
+
195
+ # Corps principal élégant
196
+ - type: main
197
+ attributes:
198
+ style:
199
+ flex: 1
200
+ padding: 4rem 0 4rem 0
201
+ position: relative
202
+ zIndex: 1
203
+ content:
204
+ - type: div
205
+ attributes:
206
+ style:
207
+ maxWidth: 1000px
208
+ margin: 0 auto
209
+ padding: 0 2rem
210
+ content:
211
+ # Section héro littéraire avec vidéo
212
+ - type: section
213
+ attributes:
214
+ id: accueil
215
+ style:
216
+ textAlign: center
217
+ marginBottom: 6rem
218
+ position: relative
219
+ padding: 8rem 3rem
220
+ overflow: hidden
221
+ borderRadius: 20px
222
+ border: "4px solid #b8860b"
223
+ boxShadow: "0 12px 24px rgba(45, 27, 20, 0.4)"
224
+ content:
225
+ # Vidéo d'arrière-plan
226
+ - type: video
227
+ attributes:
228
+ autoPlay: true
229
+ muted: true
230
+ loop: true
231
+ playsInline: true
232
+ style:
233
+ position: absolute
234
+ top: 0
235
+ left: 0
236
+ width: 100%
237
+ height: 100%
238
+ objectFit: cover
239
+ zIndex: 1
240
+ content:
241
+ - type: source
242
+ attributes:
243
+ src: "https://archive.org/download/BigBuckBunny_124/Content/big_buck_bunny_720p_surround.mp4"
244
+ type: "video/mp4"
245
+
246
+ # Overlay littéraire
247
+ - type: div
248
+ attributes:
249
+ style:
250
+ position: absolute
251
+ top: 0
252
+ left: 0
253
+ width: 100%
254
+ height: 100%
255
+ background: "linear-gradient(135deg, rgba(45, 27, 20, 0.8), rgba(139, 69, 19, 0.7))"
256
+ zIndex: 2
257
+
258
+ # Contenu héro raffiné
259
+ - type: div
260
+ attributes:
261
+ style:
262
+ position: relative
263
+ zIndex: 3
264
+ color: "#f4ead5"
265
+ content:
266
+ - type: div
267
+ attributes:
268
+ style:
269
+ fontSize: 1.5rem
270
+ marginBottom: 1rem
271
+ color: "#b8860b"
272
+ fontStyle: italic
273
+ content: "« L'art de l'écriture »"
274
+ - type: h2
275
+ attributes:
276
+ style:
277
+ fontSize: 4rem
278
+ marginBottom: 1.5rem
279
+ color: "#f4ead5"
280
+ textShadow: "3px 3px 6px rgba(0,0,0,0.8)"
281
+ fontWeight: 300
282
+ fontFamily: "'Playfair Display', serif"
283
+ letterSpacing: 3px
284
+ lineHeight: 1.2
285
+ content: "Bibliothèque Dorée"
286
+ - type: p
287
+ attributes:
288
+ style:
289
+ fontSize: 1.3rem
290
+ color: "#f4ead5"
291
+ maxWidth: 600px
292
+ margin: 0 auto 2.5rem
293
+ lineHeight: 1.8
294
+ textShadow: "1px 1px 3px rgba(0,0,0,0.8)"
295
+ fontStyle: italic
296
+ 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."
297
+ - type: button
298
+ attributes:
299
+ style:
300
+ backgroundColor: "rgba(184, 134, 11, 0.9)"
301
+ color: "#f4ead5"
302
+ border: "2px solid #b8860b"
303
+ padding: 1.5rem 3rem
304
+ fontSize: 1.1rem
305
+ borderRadius: 50px
306
+ cursor: pointer
307
+ fontWeight: 400
308
+ fontFamily: "'Crimson Text', serif"
309
+ letterSpacing: 1px
310
+ boxShadow: "0 6px 12px rgba(0,0,0,0.4)"
311
+ transition: "all 0.3s ease"
312
+ textTransform: uppercase
313
+ content: "Explorer nos Trésors"
314
+
315
+ # Section collections raffinée
316
+ - type: section
317
+ attributes:
318
+ id: services
319
+ style:
320
+ marginBottom: 6rem
321
+ backgroundColor: "rgba(244, 234, 213, 0.3)"
322
+ padding: 4rem 3rem
323
+ borderRadius: 15px
324
+ border: "1px solid rgba(184, 134, 11, 0.3)"
325
+ content:
326
+ - type: div
327
+ attributes:
328
+ style:
329
+ textAlign: center
330
+ marginBottom: 1rem
331
+ fontSize: 1rem
332
+ color: "#8b4513"
333
+ letterSpacing: 2px
334
+ textTransform: uppercase
335
+ content: "Nos Collections"
336
+ - type: h3
337
+ attributes:
338
+ style:
339
+ fontSize: 3rem
340
+ textAlign: center
341
+ marginBottom: 3rem
342
+ color: "#2d1b14"
343
+ fontFamily: "'Playfair Display', serif"
344
+ fontWeight: 300
345
+ letterSpacing: 2px
346
+ content: "Œuvres d'Exception"
347
+ - type: div
348
+ attributes:
349
+ style:
350
+ display: grid
351
+ gridTemplateColumns: repeat(auto-fit, minmax(320px, 1fr))
352
+ gap: 2.5rem
353
+ content:
354
+ # Utilisation du composant Switch pour itérer sur les services
355
+ - type: Switch
356
+ content: ~.services
357
+ singleOption:
358
+ load: service-card
359
+
360
+ # Section À Propos littéraire
361
+ - type: section
362
+ attributes:
363
+ id: about
364
+ style:
365
+ marginBottom: 6rem
366
+ padding: 5rem 3rem
367
+ 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%)"
368
+ borderRadius: 20px
369
+ border: "2px solid rgba(184, 134, 11, 0.3)"
370
+ position: relative
371
+ overflow: hidden
372
+ content:
373
+ # Ornement décoratif
374
+ - type: div
375
+ attributes:
376
+ style:
377
+ position: absolute
378
+ top: -50px
379
+ right: -50px
380
+ width: 200px
381
+ height: 200px
382
+ background: "radial-gradient(circle, rgba(184, 134, 11, 0.1) 0%, transparent 70%)"
383
+ borderRadius: 50%
384
+
385
+ - type: div
386
+ attributes:
387
+ style:
388
+ position: relative
389
+ zIndex: 2
390
+ maxWidth: 800px
391
+ margin: 0 auto
392
+ textAlign: center
393
+ content:
394
+ # En-tête de section
395
+ - type: div
396
+ attributes:
397
+ style:
398
+ marginBottom: 1.5rem
399
+ fontSize: 1rem
400
+ color: "#8b4513"
401
+ letterSpacing: 3px
402
+ textTransform: uppercase
403
+ fontFamily: "'Crimson Text', serif"
404
+ content: "Notre Histoire"
405
+
406
+ - type: h3
407
+ attributes:
408
+ style:
409
+ fontSize: 3.5rem
410
+ marginBottom: 3rem
411
+ color: "#2d1b14"
412
+ fontFamily: "'Playfair Display', serif"
413
+ fontWeight: 300
414
+ letterSpacing: 2px
415
+ lineHeight: 1.2
416
+ content: "L'Art des Lettres"
417
+
418
+ # Contenu principal en deux colonnes
419
+ - type: div
420
+ attributes:
421
+ style:
422
+ display: grid
423
+ gridTemplateColumns: "1fr 1fr"
424
+ gap: 4rem
425
+ marginBottom: 3rem
426
+ textAlign: left
427
+ content:
428
+ # Première colonne
429
+ - type: div
430
+ content:
431
+ - type: p
432
+ attributes:
433
+ style:
434
+ fontSize: 1.2rem
435
+ lineHeight: 1.8
436
+ color: "#2d1b14"
437
+ marginBottom: 2rem
438
+ fontFamily: "'Crimson Text', serif"
439
+ fontStyle: italic
440
+ 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."
441
+
442
+ - type: p
443
+ attributes:
444
+ style:
445
+ fontSize: 1.1rem
446
+ lineHeight: 1.7
447
+ color: "#3d2818"
448
+ fontFamily: "'Crimson Text', serif"
449
+ 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."
450
+
451
+ # Deuxième colonne
452
+ - type: div
453
+ content:
454
+ - type: p
455
+ attributes:
456
+ style:
457
+ fontSize: 1.1rem
458
+ lineHeight: 1.7
459
+ color: "#3d2818"
460
+ marginBottom: 2rem
461
+ fontFamily: "'Crimson Text', serif"
462
+ 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."
463
+
464
+ - type: p
465
+ attributes:
466
+ style:
467
+ fontSize: 1.2rem
468
+ lineHeight: 1.8
469
+ color: "#2d1b14"
470
+ fontFamily: "'Crimson Text', serif"
471
+ fontStyle: italic
472
+ 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. »"
473
+
474
+ # Citation ornementée
475
+ - type: div
476
+ attributes:
477
+ style:
478
+ backgroundColor: "rgba(184, 134, 11, 0.1)"
479
+ padding: 2.5rem
480
+ borderRadius: 15px
481
+ border: "1px solid rgba(184, 134, 11, 0.3)"
482
+ marginBottom: 3rem
483
+ position: relative
484
+ content:
485
+ # Guillemets décoratifs
486
+ - type: div
487
+ attributes:
488
+ style:
489
+ position: absolute
490
+ top: -10px
491
+ left: 20px
492
+ fontSize: 4rem
493
+ color: "#b8860b"
494
+ fontFamily: "'Playfair Display', serif"
495
+ lineHeight: 1
496
+ opacity: 0.7
497
+ content: "\""
498
+
499
+ - type: blockquote
500
+ attributes:
501
+ style:
502
+ fontSize: 1.3rem
503
+ fontStyle: italic
504
+ color: "#2d1b14"
505
+ textAlign: center
506
+ margin: 0
507
+ fontFamily: "'Playfair Display', serif"
508
+ letterSpacing: 1px
509
+ lineHeight: 1.6
510
+ 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é."
511
+
512
+ - type: cite
513
+ attributes:
514
+ style:
515
+ display: block
516
+ marginTop: 1.5rem
517
+ fontSize: 1rem
518
+ color: "#8b4513"
519
+ fontFamily: "'Crimson Text', serif"
520
+ letterSpacing: 2px
521
+ textTransform: uppercase
522
+ content: "— Fondateur de la Bibliothèque, MDCCCXII"
523
+
524
+ # Statistiques élégantes
525
+ - type: div
526
+ attributes:
527
+ style:
528
+ display: grid
529
+ gridTemplateColumns: repeat(3, 1fr)
530
+ gap: 2rem
531
+ marginTop: 2rem
532
+ content:
533
+ - type: div
534
+ attributes:
535
+ style:
536
+ textAlign: center
537
+ padding: 1.5rem
538
+ content:
539
+ - type: div
540
+ attributes:
541
+ style:
542
+ fontSize: 2.5rem
543
+ fontWeight: bold
544
+ color: "#b8860b"
545
+ fontFamily: "'Playfair Display', serif"
546
+ marginBottom: 0.5rem
547
+ content: "12,847"
548
+ - type: div
549
+ attributes:
550
+ style:
551
+ fontSize: 0.9rem
552
+ color: "#8b4513"
553
+ letterSpacing: 1px
554
+ textTransform: uppercase
555
+ fontFamily: "'Crimson Text', serif"
556
+ content: "Manuscrits Précieux"
557
+
558
+ - type: div
559
+ attributes:
560
+ style:
561
+ textAlign: center
562
+ padding: 1.5rem
563
+ content:
564
+ - type: div
565
+ attributes:
566
+ style:
567
+ fontSize: 2.5rem
568
+ fontWeight: bold
569
+ color: "#b8860b"
570
+ fontFamily: "'Playfair Display', serif"
571
+ marginBottom: 0.5rem
572
+ content: "214"
573
+ - type: div
574
+ attributes:
575
+ style:
576
+ fontSize: 0.9rem
577
+ color: "#8b4513"
578
+ letterSpacing: 1px
579
+ textTransform: uppercase
580
+ fontFamily: "'Crimson Text', serif"
581
+ content: "Années d'Histoire"
582
+
583
+ - type: div
584
+ attributes:
585
+ style:
586
+ textAlign: center
587
+ padding: 1.5rem
588
+ content:
589
+ - type: div
590
+ attributes:
591
+ style:
592
+ fontSize: 2.5rem
593
+ fontWeight: bold
594
+ color: "#b8860b"
595
+ fontFamily: "'Playfair Display', serif"
596
+ marginBottom: 0.5rem
597
+ content: "∞"
598
+ - type: div
599
+ attributes:
600
+ style:
601
+ fontSize: 0.9rem
602
+ color: "#8b4513"
603
+ letterSpacing: 1px
604
+ textTransform: uppercase
605
+ fontFamily: "'Crimson Text', serif"
606
+ content: "Sagesse Préservée"
607
+
608
+ # Section Catalogue d'ouvrages
609
+ - type: section
610
+ attributes:
611
+ id: catalogue
612
+ style:
613
+ marginBottom: 6rem
614
+ padding: 5rem 3rem
615
+ 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%)"
616
+ borderRadius: 20px
617
+ border: "2px solid rgba(184, 134, 11, 0.2)"
618
+ position: relative
619
+ content:
620
+ # Titre de section
621
+ - type: div
622
+ attributes:
623
+ style:
624
+ textAlign: center
625
+ marginBottom: 1rem
626
+ fontSize: 1rem
627
+ color: "#8b4513"
628
+ letterSpacing: 2px
629
+ textTransform: uppercase
630
+ content: "Catalogue Littéraire"
631
+
632
+ - type: h3
633
+ attributes:
634
+ style:
635
+ fontSize: 3rem
636
+ textAlign: center
637
+ marginBottom: 4rem
638
+ color: "#2d1b14"
639
+ fontFamily: "'Playfair Display', serif"
640
+ fontWeight: 300
641
+ letterSpacing: 2px
642
+ content: "Trésors Bibliographiques"
643
+
644
+ # Interface de filtrage
645
+ - type: div
646
+ attributes:
647
+ style:
648
+ backgroundColor: "rgba(255, 255, 255, 0.7)"
649
+ padding: 2rem
650
+ borderRadius: 15px
651
+ marginBottom: 3rem
652
+ border: "1px solid rgba(184, 134, 11, 0.3)"
653
+ boxShadow: "0 4px 8px rgba(45, 27, 20, 0.1)"
654
+ content:
655
+ - type: h4
656
+ attributes:
657
+ style:
658
+ fontSize: 1.4rem
659
+ marginBottom: 1.5rem
660
+ color: "#2d1b14"
661
+ fontFamily: "'Playfair Display', serif"
662
+ fontWeight: 400
663
+ letterSpacing: 1px
664
+ content: "Filtres de Recherche"
665
+
666
+ - type: div
667
+ attributes:
668
+ style:
669
+ display: grid
670
+ gridTemplateColumns: "1fr 1fr 1fr"
671
+ gap: 1.5rem
672
+ marginBottom: 1.5rem
673
+ content:
674
+ # Recherche textuelle
675
+ - type: TextField
676
+ dataLocation: ~.livre_filters.recherche
677
+ label: "Recherche :"
678
+ placeholder: "Titre, auteur, résumé..."
679
+ inputAttributes:
680
+ style:
681
+ fontFamily: "'Crimson Text', serif"
682
+ border: "2px solid rgba(184, 134, 11, 0.3)"
683
+ borderRadius: 8px
684
+ padding: 0.7rem
685
+
686
+ # Date de début
687
+ - type: TextField
688
+ dataLocation: ~.livre_filters.publie_apres
689
+ label: "Publié après :"
690
+ inputType: "date"
691
+ inputAttributes:
692
+ style:
693
+ fontFamily: "'Crimson Text', serif"
694
+ border: "2px solid rgba(184, 134, 11, 0.3)"
695
+ borderRadius: 8px
696
+ padding: 0.7rem
697
+
698
+ # Date de fin
699
+ - type: TextField
700
+ dataLocation: ~.livre_filters.publie_avant
701
+ label: "Publié avant :"
702
+ inputType: "date"
703
+ inputAttributes:
704
+ style:
705
+ fontFamily: "'Crimson Text', serif"
706
+ border: "2px solid rgba(184, 134, 11, 0.3)"
707
+ borderRadius: 8px
708
+ padding: 0.7rem
709
+
710
+ # Filtres par statut (checkboxes)
711
+ - type: div
712
+ content:
713
+ - type: div
714
+ attributes:
715
+ style:
716
+ fontSize: 1rem
717
+ marginBottom: 1rem
718
+ color: "#8b4513"
719
+ fontFamily: "'Crimson Text', serif"
720
+ fontWeight: 500
721
+ content: "Statut de publication :"
722
+
723
+ - type: div
724
+ attributes:
725
+ style:
726
+ display: flex
727
+ gap: 2rem
728
+ flexWrap: wrap
729
+ content:
730
+ - type: CheckBoxField
731
+ dataLocation: ~.livre_filters.statuts.precommande
732
+ options:
733
+ - value: true
734
+ label: "Précommande"
735
+ attributes:
736
+ style:
737
+ fontFamily: "'Crimson Text', serif"
738
+
739
+ - type: CheckBoxField
740
+ dataLocation: ~.livre_filters.statuts.disponible
741
+ options:
742
+ - value: true
743
+ label: "Disponible"
744
+ attributes:
745
+ style:
746
+ fontFamily: "'Crimson Text', serif"
747
+
748
+ - type: CheckBoxField
749
+ dataLocation: ~.livre_filters.statuts.fin_commercialisation
750
+ options:
751
+ - value: true
752
+ label: "Fin de commercialisation"
753
+ attributes:
754
+ style:
755
+ fontFamily: "'Crimson Text', serif"
756
+
757
+ # Liste filtrée des ouvrages
758
+ - type: DataFilter
759
+ context: global
760
+ filters:
761
+ - subjectsWithProperty: ouvrage
762
+ andConditions:
763
+ # Filtre recherche textuelle
764
+ - orConditions:
765
+ - when: ~.livre_filters.recherche
766
+ isEmpty: true
767
+ - whenFilterableData: ouvrage.contenu_recherchable
768
+ contains: ~.livre_filters.recherche
769
+
770
+ # Filtre date après
771
+ - orConditions:
772
+ - when: ~.livre_filters.publie_apres
773
+ isEmpty: true
774
+ - whenFilterableData: ouvrage.date_publication
775
+ ">=": ~.livre_filters.publie_apres
776
+ compareAsDates: true
777
+
778
+ # Filtre date avant
779
+ - orConditions:
780
+ - when: ~.livre_filters.publie_avant
781
+ isEmpty: true
782
+ - whenFilterableData: ouvrage.date_publication
783
+ "<=": ~.livre_filters.publie_avant
784
+ compareAsDates: true
785
+
786
+ # Filtre statuts (logique OR entre les statuts cochés)
787
+ - orConditions:
788
+ # Si aucun statut n'est coché, on affiche tout
789
+ - andConditions:
790
+ - when: ~.livre_filters.statuts.precommande
791
+ isNot: true
792
+ - when: ~.livre_filters.statuts.disponible
793
+ isNot: true
794
+ - when: ~.livre_filters.statuts.fin_commercialisation
795
+ isNot: true
796
+
797
+ # Si précommande est coché
798
+ - andConditions:
799
+ - when: ~.livre_filters.statuts.precommande
800
+ is: true
801
+ - whenFilterableData: ouvrage.statut
802
+ is: "precommande"
803
+
804
+ # Si disponible est coché
805
+ - andConditions:
806
+ - when: ~.livre_filters.statuts.disponible
807
+ is: true
808
+ - whenFilterableData: ouvrage.statut
809
+ is: "disponible"
810
+
811
+ # Si fin de commercialisation est coché
812
+ - andConditions:
813
+ - when: ~.livre_filters.statuts.fin_commercialisation
814
+ is: true
815
+ - whenFilterableData: ouvrage.statut
816
+ is: "fin_commercialisation"
817
+
818
+ content:
819
+ - type: Switch
820
+ contentWrapper:
821
+ tag: section
822
+ attributes:
823
+ style:
824
+ display: grid
825
+ gridTemplateColumns: "repeat(auto-fill, minmax(350px, 1fr))"
826
+ gap: 2rem
827
+ content: ~~.ouvrages
828
+ singleOption:
829
+ load: carte-ouvrage
830
+ paginated: true
831
+ paginationProps:
832
+ pageMaxItemCount: 4
833
+ maxPageButtonsCount: 5
834
+ after:
835
+ type: div
836
+ attributes:
837
+ style:
838
+ display: flex
839
+ justifyContent: center
840
+ marginTop: 2rem
841
+ padding: 1rem
842
+ backgroundColor: "rgba(255, 255, 255, 0.5)"
843
+ borderRadius: 10px
844
+ border: "1px solid rgba(184, 134, 11, 0.2)"
845
+ content:
846
+ type: PageControls
847
+ # Footer élégant
848
+ - type: footer
849
+ attributes:
850
+ id: correspondance
851
+ style:
852
+ backgroundColor: "#2d1b14"
853
+ color: "#f4ead5"
854
+ padding: 3rem 0
855
+ marginTop: auto
856
+ borderTop: "3px solid #b8860b"
857
+ content:
858
+ - type: div
859
+ attributes:
860
+ style:
861
+ maxWidth: 1000px
862
+ margin: 0 auto
863
+ padding: 0 2rem
864
+ textAlign: center
865
+ content:
866
+ - type: div
867
+ attributes:
868
+ style:
869
+ marginBottom: 2rem
870
+ content:
871
+ - type: h4
872
+ attributes:
873
+ style:
874
+ marginBottom: 1.5rem
875
+ fontSize: 1.8rem
876
+ fontFamily: "'Playfair Display', serif"
877
+ color: "#b8860b"
878
+ letterSpacing: 1px
879
+ content: "Correspondance"
880
+ - type: p
881
+ attributes:
882
+ style:
883
+ margin: 0.8rem 0
884
+ fontSize: 1.1rem
885
+ fontFamily: "'Crimson Text', serif"
886
+ content: "Missive : contact@bibliotheque-doree.fr"
887
+ - type: p
888
+ attributes:
889
+ style:
890
+ margin: 0.8rem 0
891
+ fontSize: 1.1rem
892
+ fontFamily: "'Crimson Text', serif"
893
+ content: "Télégraphe : 01 23 45 67 89"
894
+
895
+ # Bouton pour ouvrir le modal de contact
896
+ - type: button
897
+ attributes:
898
+ style:
899
+ backgroundColor: "#b8860b"
900
+ color: "#f4ead5"
901
+ border: "2px solid #d4af37"
902
+ padding: 1rem 2.5rem
903
+ fontSize: 1.1rem
904
+ borderRadius: 50px
905
+ cursor: pointer
906
+ fontWeight: 400
907
+ fontFamily: "'Crimson Text', serif"
908
+ letterSpacing: 1px
909
+ marginTop: 1.5rem
910
+ boxShadow: "0 4px 8px rgba(0,0,0,0.3)"
911
+ transition: "all 0.3s ease"
912
+ actions:
913
+ - what: setData
914
+ on: click
915
+ path: ~.show_contact_modal
916
+ value: true
917
+ when: ~.message_sent
918
+ isEmpty: true
919
+ - what: setData
920
+ on: click
921
+ path: ~.contact_form_step
922
+ value: 1
923
+ when: ~.message_sent
924
+ isEmpty: true
925
+ - what: hide
926
+ when: ~.message_sent
927
+ is: true
928
+ content: "Contactez-nous"
929
+
930
+ # Message de confirmation après envoi
931
+ - type: div
932
+ attributes:
933
+ style:
934
+ marginTop: 2.5rem
935
+ padding: 1rem 1.5rem
936
+ backgroundColor: "rgba(184, 134, 11, 0.1)"
937
+ border: "1px solid rgba(184, 134, 11, 0.3)"
938
+ borderRadius: 8px
939
+ textAlign: center
940
+ fontFamily: "'Crimson Text', serif"
941
+ fontSize: 1rem
942
+ color: "#8b4513"
943
+ fontStyle: italic
944
+ actions:
945
+ - what: hide
946
+ when: ~.message_sent
947
+ isEmpty: true
948
+ content: "✉️ Merci pour votre envoi, nous allons regarder bientôt votre missive avec attention."
949
+
950
+ - type: div
951
+ attributes:
952
+ style:
953
+ borderTop: "1px solid rgba(184, 134, 11, 0.5)"
954
+ marginTop: 3rem
955
+ paddingTop: 2rem
956
+ fontSize: 0.95rem
957
+ color: "rgba(244, 234, 213, 0.8)"
958
+ fontStyle: italic
959
+ content: "© MMXXIV Bibliothèque Dorée • Tous droits réservés avec déférence"
960
+
961
+ # Modal de contact
962
+ - type: Modal
963
+ showBoolPath: ~.show_contact_modal
964
+ closeButton: true
965
+ headerTitle:
966
+ type: div
967
+ attributes:
968
+ style:
969
+ textAlign: center
970
+ color: "#2d1b14"
971
+ fontFamily: "'Playfair Display', serif"
972
+ fontSize: 1.8rem
973
+ fontWeight: 300
974
+ letterSpacing: 1px
975
+ content: "Correspondance Distinguée"
976
+ body:
977
+ type: div
978
+ attributes:
979
+ style:
980
+ padding: 2rem
981
+ fontFamily: "'Crimson Text', serif"
982
+ content:
983
+ - type: div
984
+ attributes:
985
+ style:
986
+ marginBottom: 2rem
987
+ textAlign: center
988
+ color: "#8b4513"
989
+ fontStyle: italic
990
+ content: "Adressez-nous votre missive avec déférence"
991
+
992
+ # Indicateur d'étape
993
+ - type: div
994
+ attributes:
995
+ style:
996
+ display: flex
997
+ justifyContent: center
998
+ alignItems: center
999
+ marginBottom: 2rem
1000
+ gap: 1rem
1001
+ content:
1002
+ - type: div
1003
+ attributes:
1004
+ style:
1005
+ display: flex
1006
+ alignItems: center
1007
+ gap: 0.5rem
1008
+ padding: 0.5rem 1rem
1009
+ borderRadius: 20px
1010
+ backgroundColor: "#b8860b"
1011
+ color: "#f4ead5"
1012
+ fontSize: 0.9rem
1013
+ fontFamily: "'Crimson Text', serif"
1014
+ fontWeight: 500
1015
+ actions:
1016
+ - what: hide
1017
+ when: ~.contact_form_step
1018
+ is: 2
1019
+ content:
1020
+ - "1"
1021
+ - type: span
1022
+ attributes:
1023
+ style:
1024
+ marginLeft: 0.5rem
1025
+ content: "Informations"
1026
+
1027
+ - type: div
1028
+ attributes:
1029
+ style:
1030
+ display: flex
1031
+ alignItems: center
1032
+ gap: 0.5rem
1033
+ padding: 0.5rem 1rem
1034
+ borderRadius: 20px
1035
+ backgroundColor: "rgba(184, 134, 11, 0.3)"
1036
+ color: "#8b4513"
1037
+ fontSize: 0.9rem
1038
+ fontFamily: "'Crimson Text', serif"
1039
+ fontWeight: 500
1040
+ actions:
1041
+ - what: hide
1042
+ when: ~.contact_form_step
1043
+ is: 1
1044
+ content:
1045
+ - "1"
1046
+ - type: span
1047
+ attributes:
1048
+ style:
1049
+ marginLeft: 0.5rem
1050
+ content: "Informations ✓"
1051
+
1052
+ - type: div
1053
+ attributes:
1054
+ style:
1055
+ fontSize: 1.5rem
1056
+ color: "#b8860b"
1057
+ content: "→"
1058
+
1059
+ - type: div
1060
+ attributes:
1061
+ style:
1062
+ display: flex
1063
+ alignItems: center
1064
+ gap: 0.5rem
1065
+ padding: 0.5rem 1rem
1066
+ borderRadius: 20px
1067
+ backgroundColor: "rgba(184, 134, 11, 0.3)"
1068
+ color: "#8b4513"
1069
+ fontSize: 0.9rem
1070
+ fontFamily: "'Crimson Text', serif"
1071
+ fontWeight: 500
1072
+ actions:
1073
+ - what: hide
1074
+ when: ~.contact_form_step
1075
+ is: 2
1076
+ content:
1077
+ - "2"
1078
+ - type: span
1079
+ attributes:
1080
+ style:
1081
+ marginLeft: 0.5rem
1082
+ content: "Message"
1083
+
1084
+ - type: div
1085
+ attributes:
1086
+ style:
1087
+ display: flex
1088
+ alignItems: center
1089
+ gap: 0.5rem
1090
+ padding: 0.5rem 1rem
1091
+ borderRadius: 20px
1092
+ backgroundColor: "#b8860b"
1093
+ color: "#f4ead5"
1094
+ fontSize: 0.9rem
1095
+ fontFamily: "'Crimson Text', serif"
1096
+ fontWeight: 500
1097
+ actions:
1098
+ - what: hide
1099
+ when: ~.contact_form_step
1100
+ is: 1
1101
+ content:
1102
+ - "2"
1103
+ - type: span
1104
+ attributes:
1105
+ style:
1106
+ marginLeft: 0.5rem
1107
+ content: "Message"
1108
+
1109
+ # Formulaire de contact multistep
1110
+ - type: div
1111
+ attributes:
1112
+ style:
1113
+ maxWidth: 500px
1114
+ margin: 0 auto
1115
+ content:
1116
+ # ÉTAPE 1 : Informations personnelles
1117
+ - type: div
1118
+ attributes:
1119
+ style:
1120
+ display: block
1121
+ actions:
1122
+ - what: hide
1123
+ when: ~.contact_form_step
1124
+ is: 2
1125
+ content:
1126
+ - type: TextField
1127
+ dataLocation: ~.contact_form.nom
1128
+ label: "Nom & Titre :"
1129
+ placeholder: "Monsieur le Comte de..."
1130
+ inputAttributes:
1131
+ style:
1132
+ fontFamily: "'Crimson Text', serif"
1133
+ border: "2px solid rgba(184, 134, 11, 0.3)"
1134
+ borderRadius: 8px
1135
+ padding: 0.8rem
1136
+
1137
+ - type: TextField
1138
+ dataLocation: ~.contact_form.email
1139
+ label: "Missive électronique :"
1140
+ placeholder: "votre.missive@domaine.fr"
1141
+ inputType: "email"
1142
+ inputAttributes:
1143
+ style:
1144
+ fontFamily: "'Crimson Text', serif"
1145
+ border: "2px solid rgba(184, 134, 11, 0.3)"
1146
+ borderRadius: 8px
1147
+ padding: 0.8rem
1148
+
1149
+ - type: SelectField
1150
+ dataLocation: ~.contact_form.sujet
1151
+ label: "Objet de la correspondance :"
1152
+ options:
1153
+ - label: "Veuillez choisir l'objet de votre missive..."
1154
+ value: ""
1155
+ - label: "Consultation littéraire & expertise"
1156
+ value: "consultation"
1157
+ - label: "Acquisition d'ouvrages précieux"
1158
+ value: "acquisition"
1159
+ - label: "Restauration de manuscrits"
1160
+ value: "restauration"
1161
+ - label: "Reliure d'exception"
1162
+ value: "reliure"
1163
+ - label: "Évaluation & estimation"
1164
+ value: "evaluation"
1165
+ - label: "Donation & legs littéraires"
1166
+ value: "donation"
1167
+ - label: "Visite privée de la bibliothèque"
1168
+ value: "visite"
1169
+ - label: "Autre correspondance"
1170
+ value: "autre"
1171
+ inputAttributes:
1172
+ style:
1173
+ fontFamily: "'Crimson Text', serif"
1174
+ border: "2px solid rgba(184, 134, 11, 0.3)"
1175
+ borderRadius: 8px
1176
+ padding: 0.8rem
1177
+
1178
+ # ÉTAPE 2 : Message
1179
+ - type: div
1180
+ attributes:
1181
+ style:
1182
+ display: block
1183
+ actions:
1184
+ - what: hide
1185
+ when: ~.contact_form_step
1186
+ is: 1
1187
+ content:
1188
+ - type: TextAreaField
1189
+ dataLocation: ~.contact_form.message
1190
+ label: "Votre message :"
1191
+ placeholder: "Honoré Bibliothécaire,\n\nJ'ai l'honneur de vous écrire concernant..."
1192
+ rows: 8
1193
+ inputAttributes:
1194
+ style:
1195
+ fontFamily: "'Crimson Text', serif"
1196
+ border: "2px solid rgba(184, 134, 11, 0.3)"
1197
+ borderRadius: 8px
1198
+ padding: 0.8rem
1199
+ resize: "vertical"
1200
+
1201
+ # Boutons de navigation - ÉTAPE 1
1202
+ - type: div
1203
+ attributes:
1204
+ style:
1205
+ display: flex
1206
+ justifyContent: space-between
1207
+ marginTop: 2rem
1208
+ gap: 1rem
1209
+ actions:
1210
+ - what: hide
1211
+ when: ~.contact_form_step
1212
+ is: 2
1213
+ content:
1214
+ - type: button
1215
+ attributes:
1216
+ style:
1217
+ backgroundColor: "transparent"
1218
+ color: "#8b4513"
1219
+ border: "2px solid #8b4513"
1220
+ padding: 0.8rem 2rem
1221
+ borderRadius: 25px
1222
+ cursor: pointer
1223
+ fontFamily: "'Crimson Text', serif"
1224
+ fontSize: 1rem
1225
+ transition: "all 0.3s ease"
1226
+ actions:
1227
+ - what: setData
1228
+ on: click
1229
+ path: ~.show_contact_modal
1230
+ value: false
1231
+ - what: setData
1232
+ on: click
1233
+ path: ~.contact_form_step
1234
+ value: 1
1235
+ content: "Annuler"
1236
+
1237
+ # Bouton Suivant désactivé si champs étape 1 vides
1238
+ - type: button
1239
+ attributes:
1240
+ style:
1241
+ backgroundColor: "#8b7355"
1242
+ color: "#d3c7b8"
1243
+ border: "2px solid #8b7355"
1244
+ padding: 0.8rem 2rem
1245
+ borderRadius: 25px
1246
+ cursor: "not-allowed"
1247
+ fontFamily: "'Crimson Text', serif"
1248
+ fontSize: 1rem
1249
+ transition: "all 0.3s ease"
1250
+ opacity: 0.6
1251
+ actions:
1252
+ - what: hide
1253
+ andConditions:
1254
+ - when: ~.contact_form.nom
1255
+ isEmpty: "not"
1256
+ - when: ~.contact_form.email
1257
+ isEmpty: "not"
1258
+ - when: ~.contact_form.sujet
1259
+ isEmpty: "not"
1260
+ content: "Complétez tous les champs"
1261
+
1262
+ # Bouton Suivant actif
1263
+ - type: button
1264
+ attributes:
1265
+ style:
1266
+ backgroundColor: "#b8860b"
1267
+ color: "#f4ead5"
1268
+ border: "2px solid #b8860b"
1269
+ padding: 0.8rem 2rem
1270
+ borderRadius: 25px
1271
+ cursor: pointer
1272
+ fontFamily: "'Crimson Text', serif"
1273
+ fontSize: 1rem
1274
+ boxShadow: "0 4px 8px rgba(0,0,0,0.2)"
1275
+ transition: "all 0.3s ease"
1276
+ actions:
1277
+ - what: hide
1278
+ when: ~.contact_form.nom
1279
+ isEmpty: true
1280
+ - what: hide
1281
+ when: ~.contact_form.email
1282
+ isEmpty: true
1283
+ - what: hide
1284
+ when: ~.contact_form.sujet
1285
+ isEmpty: true
1286
+ - what: setData
1287
+ on: click
1288
+ path: ~.contact_form_step
1289
+ value: 2
1290
+ andConditions:
1291
+ - when: ~.contact_form.nom
1292
+ isEmpty: "not"
1293
+ - when: ~.contact_form.email
1294
+ isEmpty: "not"
1295
+ - when: ~.contact_form.sujet
1296
+ isEmpty: "not"
1297
+ content: "Suivant →"
1298
+
1299
+ # Boutons de navigation - ÉTAPE 2
1300
+ - type: div
1301
+ attributes:
1302
+ style:
1303
+ display: flex
1304
+ justifyContent: space-between
1305
+ marginTop: 2rem
1306
+ gap: 1rem
1307
+ actions:
1308
+ - what: hide
1309
+ when: ~.contact_form_step
1310
+ is: 1
1311
+ content:
1312
+ - type: button
1313
+ attributes:
1314
+ style:
1315
+ backgroundColor: "transparent"
1316
+ color: "#8b4513"
1317
+ border: "2px solid #8b4513"
1318
+ padding: 0.8rem 2rem
1319
+ borderRadius: 25px
1320
+ cursor: pointer
1321
+ fontFamily: "'Crimson Text', serif"
1322
+ fontSize: 1rem
1323
+ transition: "all 0.3s ease"
1324
+ actions:
1325
+ - what: setData
1326
+ on: click
1327
+ path: ~.contact_form_step
1328
+ value: 1
1329
+ content: "← Précédent"
1330
+
1331
+ # Bouton Envoyer désactivé si message vide
1332
+ - type: button
1333
+ attributes:
1334
+ style:
1335
+ backgroundColor: "#8b7355"
1336
+ color: "#d3c7b8"
1337
+ border: "2px solid #8b7355"
1338
+ padding: 0.8rem 2rem
1339
+ borderRadius: 25px
1340
+ cursor: "not-allowed"
1341
+ fontFamily: "'Crimson Text', serif"
1342
+ fontSize: 1rem
1343
+ transition: "all 0.3s ease"
1344
+ opacity: 0.6
1345
+ actions:
1346
+ - what: hide
1347
+ when: ~.contact_form.message
1348
+ isEmpty: "not"
1349
+ content: "Veuillez saisir votre message"
1350
+
1351
+ # Bouton Envoyer actif
1352
+ - type: button
1353
+ attributes:
1354
+ style:
1355
+ backgroundColor: "#b8860b"
1356
+ color: "#f4ead5"
1357
+ border: "2px solid #b8860b"
1358
+ padding: 0.8rem 2rem
1359
+ borderRadius: 25px
1360
+ cursor: pointer
1361
+ fontFamily: "'Crimson Text', serif"
1362
+ fontSize: 1rem
1363
+ boxShadow: "0 4px 8px rgba(0,0,0,0.2)"
1364
+ transition: "all 0.3s ease"
1365
+ actions:
1366
+ - what: hide
1367
+ when: ~.contact_form.message
1368
+ isEmpty: true
1369
+ - what: setData
1370
+ on: click
1371
+ path: ~.show_contact_modal
1372
+ value: false
1373
+ when: ~.contact_form.message
1374
+ isEmpty: "not"
1375
+ - what: setData
1376
+ on: click
1377
+ path: ~.message_sent
1378
+ value: true
1379
+ when: ~.contact_form.message
1380
+ isEmpty: "not"
1381
+ - what: setData
1382
+ on: click
1383
+ path: ~.contact_form_step
1384
+ value: 1
1385
+ when: ~.contact_form.message
1386
+ isEmpty: "not"
1387
+ content: "Envoyer la Missive"
1388
+
1389
+ templates:
1390
+ service-card:
1391
+ type: div
1392
+ attributes:
1393
+ style:
1394
+ padding: 2.5rem
1395
+ backgroundColor: "rgba(255, 255, 255, 0.9)"
1396
+ borderRadius: 15px
1397
+ textAlign: center
1398
+ boxShadow: "0 8px 16px rgba(45, 27, 20, 0.2)"
1399
+ border: "1px solid rgba(184, 134, 11, 0.3)"
1400
+ transition: "all 0.3s ease"
1401
+ position: relative
1402
+ content:
1403
+ # Image d'illustration
1404
+ - type: img
1405
+ attributes:
1406
+ src: ~.image
1407
+ alt: ~.title
1408
+ style:
1409
+ width: 80px
1410
+ height: 80px
1411
+ objectFit: cover
1412
+ borderRadius: 50%
1413
+ margin: 0 auto 1.5rem
1414
+ border: "3px solid #b8860b"
1415
+ filter: "sepia(20%) saturate(1.2)"
1416
+
1417
+ - type: div
1418
+ attributes:
1419
+ style:
1420
+ width: 60px
1421
+ height: 2px
1422
+ backgroundColor: "#b8860b"
1423
+ margin: 0 auto 1.5rem
1424
+ - type: h4
1425
+ attributes:
1426
+ style:
1427
+ marginBottom: 1.5rem
1428
+ color: "#2d1b14"
1429
+ fontSize: 1.6rem
1430
+ fontFamily: "'Playfair Display', serif"
1431
+ fontWeight: 400
1432
+ letterSpacing: 1px
1433
+ content: ~.title
1434
+ - type: p
1435
+ attributes:
1436
+ style:
1437
+ color: "#8b4513"
1438
+ lineHeight: 1.7
1439
+ fontSize: 1.05rem
1440
+ fontFamily: "'Crimson Text', serif"
1441
+ fontStyle: italic
1442
+ content: ~.description
1443
+
1444
+ carte-ouvrage:
1445
+ type: div
1446
+ attributes:
1447
+ style:
1448
+ backgroundColor: "rgba(255, 255, 255, 0.95)"
1449
+ borderRadius: 15px
1450
+ overflow: hidden
1451
+ boxShadow: "0 6px 12px rgba(45, 27, 20, 0.15)"
1452
+ border: "1px solid rgba(184, 134, 11, 0.2)"
1453
+ transition: "all 0.3s ease"
1454
+ cursor: pointer
1455
+ content:
1456
+ # Image de couverture
1457
+ - type: img
1458
+ attributes:
1459
+ src: ~.ouvrage.couverture
1460
+ alt: ~.ouvrage.titre
1461
+ style:
1462
+ width: 100%
1463
+ height: 200px
1464
+ objectFit: cover
1465
+ borderBottom: "2px solid rgba(184, 134, 11, 0.3)"
1466
+
1467
+ # Contenu de la carte
1468
+ - type: div
1469
+ attributes:
1470
+ style:
1471
+ padding: 1.5rem
1472
+ content:
1473
+ # Badge de statut
1474
+ - type: div
1475
+ attributes:
1476
+ style:
1477
+ marginBottom: 1rem
1478
+ display: flex
1479
+ justifyContent: flex-start
1480
+ content:
1481
+ # Badge Précommande
1482
+ - type: span
1483
+ attributes:
1484
+ style:
1485
+ backgroundColor: "#ffc107"
1486
+ color: "#000"
1487
+ padding: 0.3rem 0.8rem
1488
+ borderRadius: 12px
1489
+ fontSize: 0.8rem
1490
+ fontWeight: 500
1491
+ fontFamily: "'Crimson Text', serif"
1492
+ textTransform: uppercase
1493
+ letterSpacing: 0.5px
1494
+ actions:
1495
+ - what: hide
1496
+ when: ~.ouvrage.statut
1497
+ isNot: "precommande"
1498
+ content: "Précommande"
1499
+
1500
+ # Badge Disponible
1501
+ - type: span
1502
+ attributes:
1503
+ style:
1504
+ backgroundColor: "#28a745"
1505
+ color: "#fff"
1506
+ padding: 0.3rem 0.8rem
1507
+ borderRadius: 12px
1508
+ fontSize: 0.8rem
1509
+ fontWeight: 500
1510
+ fontFamily: "'Crimson Text', serif"
1511
+ textTransform: uppercase
1512
+ letterSpacing: 0.5px
1513
+ actions:
1514
+ - what: hide
1515
+ when: ~.ouvrage.statut
1516
+ isNot: "disponible"
1517
+ content: "Disponible"
1518
+
1519
+ # Badge Fin de commercialisation
1520
+ - type: span
1521
+ attributes:
1522
+ style:
1523
+ backgroundColor: "#dc3545"
1524
+ color: "#fff"
1525
+ padding: 0.3rem 0.8rem
1526
+ borderRadius: 12px
1527
+ fontSize: 0.8rem
1528
+ fontWeight: 500
1529
+ fontFamily: "'Crimson Text', serif"
1530
+ textTransform: uppercase
1531
+ letterSpacing: 0.5px
1532
+ actions:
1533
+ - what: hide
1534
+ when: ~.ouvrage.statut
1535
+ isNot: "fin_commercialisation"
1536
+ content: "Fin de commercialisation"
1537
+
1538
+ # Titre
1539
+ - type: h5
1540
+ attributes:
1541
+ style:
1542
+ fontSize: 1.3rem
1543
+ marginBottom: 0.5rem
1544
+ color: "#2d1b14"
1545
+ fontFamily: "'Playfair Display', serif"
1546
+ fontWeight: 500
1547
+ letterSpacing: 0.5px
1548
+ lineHeight: 1.3
1549
+ content: ~.ouvrage.titre
1550
+
1551
+ # Auteur
1552
+ - type: p
1553
+ attributes:
1554
+ style:
1555
+ fontSize: 1rem
1556
+ marginBottom: 0.8rem
1557
+ color: "#8b4513"
1558
+ fontFamily: "'Crimson Text', serif"
1559
+ fontStyle: italic
1560
+ fontWeight: 400
1561
+ content: ~.ouvrage.auteur
1562
+
1563
+ # Date de publication formatée
1564
+ - type: div
1565
+ attributes:
1566
+ style:
1567
+ fontSize: 0.9rem
1568
+ color: "#6c5ce7"
1569
+ fontFamily: "'Crimson Text', serif"
1570
+ marginBottom: 0.5rem
1571
+ fontWeight: 400
1572
+ content:
1573
+ - "Publié le "
1574
+ # Format personnalisé de la date (approximatif pour l'instant)
1575
+ - ~.ouvrage.date_publication_formatee
1576
+
1577
+ data:
1578
+ show_contact_modal: false
1579
+ message_sent: false
1580
+ contact_form_step: 1
1581
+ contact_form:
1582
+ nom: ""
1583
+ email: ""
1584
+ sujet: ""
1585
+ message: ""
1586
+ livre_filters:
1587
+ recherche: ""
1588
+ publie_apres: ""
1589
+ publie_avant: ""
1590
+ statuts:
1591
+ precommande: false
1592
+ disponible: false
1593
+ fin_commercialisation: false
1594
+ services:
1595
+ - title: "Écriture & Style"
1596
+ description: "L'art subtil de manier la plume avec élégance, où chaque phrase devient une symphonie de mots soigneusement orchestrée."
1597
+ image: "https://images.unsplash.com/photo-1455390582262-044cdead277a?w=200&h=200&fit=crop&crop=center"
1598
+ - title: "Reliure Précieuse"
1599
+ description: "Des ouvrages magnifiquement reliés, témoins d'un savoir-faire ancestral et gardiens de la beauté littéraire."
1600
+ image: "https://images.unsplash.com/photo-1481627834876-b7833e8f5570?w=200&h=200&fit=crop&crop=center"
1601
+ - title: "Manuscrits Rares"
1602
+ description: "Conservation et restauration de documents précieux, préservant l'héritage culturel pour les générations futures."
1603
+ image: "https://images.unsplash.com/photo-1544716278-ca5e3f4abd8c?w=200&h=200&fit=crop&crop=center"
1604
+ ouvrages:
1605
+ - ouvrage:
1606
+ couverture: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=300&h=400&fit=crop&crop=center"
1607
+ titre: "Les Mystères de la Rose Noire"
1608
+ auteur: "Marguerite de Beaumont"
1609
+ date_publication: "2023-03-15"
1610
+ date_publication_formatee: "15 Mars 2023"
1611
+ statut: "disponible"
1612
+ resume_court: "Un roman gothique plein de mystères et de passion, situé dans un château du XVIII siècle."
1613
+ contenu_recherchable: "Les Mystères de la Rose Noire Marguerite de Beaumont roman gothique mystères passion château XVIII siècle"
1614
+
1615
+ - ouvrage:
1616
+ couverture: "https://images.unsplash.com/photo-1544947950-fa07a98d237f?w=300&h=400&fit=crop&crop=center"
1617
+ titre: "Chroniques des Temps Perdus"
1618
+ auteur: "Alexandre Dufresne"
1619
+ date_publication: "2024-01-20"
1620
+ date_publication_formatee: "20 Janvier 2024"
1621
+ statut: "precommande"
1622
+ resume_court: "Une épopée fantastique retraçant les légendes oubliées d'un royaume perdu."
1623
+ contenu_recherchable: "Chroniques des Temps Perdus Alexandre Dufresne épopée fantastique légendes oubliées royaume perdu"
1624
+
1625
+ - ouvrage:
1626
+ couverture: "https://images.unsplash.com/photo-1512820790803-83ca734da794?w=300&h=400&fit=crop&crop=center"
1627
+ titre: "L'Art de la Calligraphie Ancienne"
1628
+ auteur: "Professeur Henri Lavoisier"
1629
+ date_publication: "2022-09-10"
1630
+ date_publication_formatee: "10 Septembre 2022"
1631
+ statut: "fin_commercialisation"
1632
+ resume_court: "Guide pratique sur les techniques ancestrales de calligraphie européenne."
1633
+ contenu_recherchable: "L'Art de la Calligraphie Ancienne Professeur Henri Lavoisier guide pratique techniques ancestrales calligraphie européenne"
1634
+
1635
+ - ouvrage:
1636
+ couverture: "https://images.unsplash.com/photo-1481627834876-b7833e8f5570?w=300&h=400&fit=crop&crop=center"
1637
+ titre: "Mémoires d'un Bibliothécaire"
1638
+ auteur: "Jean-Baptiste Rousseau"
1639
+ date_publication: "2023-11-05"
1640
+ date_publication_formatee: "5 Novembre 2023"
1641
+ statut: "disponible"
1642
+ resume_court: "Récit autobiographique d'un garde des manuscrits parisien."
1643
+ contenu_recherchable: "Mémoires d'un Bibliothécaire Jean-Baptiste Rousseau récit autobiographique garde manuscrits parisien"
1644
+
1645
+ - ouvrage:
1646
+ couverture: "https://images.unsplash.com/photo-1524995997946-a1c2e315a42f?w=300&h=400&fit=crop&crop=center"
1647
+ titre: "La Poésie de l'Âme"
1648
+ auteur: "Céleste de Montclair"
1649
+ date_publication: "2024-06-30"
1650
+ date_publication_formatee: "30 Juin 2024"
1651
+ statut: "precommande"
1652
+ resume_court: "Recueil de vers romantiques inspirés par la nature et l'amour."
1653
+ contenu_recherchable: "La Poésie de l'Âme Céleste de Montclair recueil vers romantiques inspirés nature amour"
1654
+
1655
+ - ouvrage:
1656
+ couverture: "https://images.unsplash.com/photo-1532012197267-da84d127e765?w=300&h=400&fit=crop&crop=center"
1657
+ titre: "Histoire des Manuscrits Enluminés"
1658
+ auteur: "Dr. Marie-Claire Dubois"
1659
+ date_publication: "2021-12-03"
1660
+ date_publication_formatee: "3 Décembre 2021"
1661
+ statut: "fin_commercialisation"
1662
+ resume_court: "Étude approfondie de l'art de l'enluminure du Moyen Âge."
1663
+ contenu_recherchable: "Histoire des Manuscrits Enluminés Dr. Marie-Claire Dubois étude approfondie art enluminure Moyen Âge"