@zevra/ui 0.7.0 → 0.9.0

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 (70) hide show
  1. package/DECISIONS.md +227 -0
  2. package/dist/actions.d.ts +13 -3
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +9 -2
  5. package/dist/actions.js.map +1 -1
  6. package/dist/catalogue.d.ts.map +1 -1
  7. package/dist/catalogue.js +160 -11
  8. package/dist/catalogue.js.map +1 -1
  9. package/dist/css-inline.d.ts.map +1 -1
  10. package/dist/css-inline.js +1 -1
  11. package/dist/css-inline.js.map +1 -1
  12. package/dist/data-table.d.ts +30 -0
  13. package/dist/data-table.d.ts.map +1 -0
  14. package/dist/data-table.js +35 -0
  15. package/dist/data-table.js.map +1 -0
  16. package/dist/data.d.ts +34 -1
  17. package/dist/data.d.ts.map +1 -1
  18. package/dist/data.js +27 -0
  19. package/dist/data.js.map +1 -1
  20. package/dist/feedback.d.ts +49 -0
  21. package/dist/feedback.d.ts.map +1 -1
  22. package/dist/feedback.js +24 -0
  23. package/dist/feedback.js.map +1 -1
  24. package/dist/forms.d.ts +36 -0
  25. package/dist/forms.d.ts.map +1 -1
  26. package/dist/forms.js +24 -0
  27. package/dist/forms.js.map +1 -1
  28. package/dist/icon-data.d.ts +1 -1
  29. package/dist/icon-data.d.ts.map +1 -1
  30. package/dist/icon-data.js +42 -0
  31. package/dist/icon-data.js.map +1 -1
  32. package/dist/icon.d.ts +1 -1
  33. package/dist/icon.js +1 -1
  34. package/dist/layout.d.ts +21 -0
  35. package/dist/layout.d.ts.map +1 -1
  36. package/dist/layout.js +18 -0
  37. package/dist/layout.js.map +1 -1
  38. package/dist/navigation.d.ts +45 -7
  39. package/dist/navigation.d.ts.map +1 -1
  40. package/dist/navigation.js +54 -7
  41. package/dist/navigation.js.map +1 -1
  42. package/dist/surfaces.d.ts +18 -0
  43. package/dist/surfaces.d.ts.map +1 -1
  44. package/dist/surfaces.js +6 -0
  45. package/dist/surfaces.js.map +1 -1
  46. package/icons/index.json +126 -0
  47. package/icons/sprite.svg +21 -0
  48. package/package.json +18 -2
  49. package/react/actions.tsx +28 -2
  50. package/react/catalogue.tsx +343 -17
  51. package/react/css-inline.ts +1 -1
  52. package/react/data-table.tsx +153 -0
  53. package/react/data.tsx +87 -1
  54. package/react/feedback.tsx +98 -0
  55. package/react/forms.tsx +90 -0
  56. package/react/icon-data.ts +63 -0
  57. package/react/icon.tsx +2 -2
  58. package/react/layout.tsx +39 -0
  59. package/react/navigation.tsx +108 -6
  60. package/react/surfaces.tsx +45 -0
  61. package/src/base.css +16 -0
  62. package/src/components.css +135 -3
  63. package/src/data.css +188 -1
  64. package/src/feedback.css +196 -37
  65. package/src/forms.css +137 -1
  66. package/src/layout.css +72 -0
  67. package/src/navigation.css +207 -12
  68. package/src/surfaces.css +76 -7
  69. package/src/tokens.css +6 -0
  70. package/tokens/index.js +2 -0
package/icons/index.json CHANGED
@@ -14,6 +14,12 @@
14
14
  "viewBox": "0 0 24 24",
15
15
  "corps": "<path d=\"M3.33 12 H8 L10.67 5.33 L14 18.67 L16 12 H20.67\" />"
16
16
  },
17
+ {
18
+ "id": "aide",
19
+ "nom": "Aide",
20
+ "viewBox": "0 0 24 24",
21
+ "corps": "<circle cx=\"12\" cy=\"12\" r=\"8.67\" /><path d=\"M9.33 9.33 A2.67 2.67 0 0 1 14.53 10.13 C14.53 11.87 12 12.27 12 14\" /><circle cx=\"12\" cy=\"17.07\" r=\"0.8\" fill=\"currentColor\" stroke=\"none\" />"
22
+ },
17
23
  {
18
24
  "id": "app-couches",
19
25
  "nom": "Application (couches)",
@@ -26,6 +32,18 @@
26
32
  "viewBox": "0 0 24 24",
27
33
  "corps": "<rect x=\"3.33\" y=\"4\" width=\"17.33\" height=\"4.67\" rx=\"1.07\" /><path d=\"M5.33 8.67 V18.93 A1.07 1.07 0 0 0 6.4 20 H17.6 A1.07 1.07 0 0 0 18.67 18.93 V8.67\" /><path d=\"M9.33 12.67 H14.67\" />"
28
34
  },
35
+ {
36
+ "id": "attention",
37
+ "nom": "Attention (avertissement)",
38
+ "viewBox": "0 0 24 24",
39
+ "corps": "<path d=\"M10.67 3.87 L2.53 17.87 A1.55 1.55 0 0 0 3.87 20.19 H20.13 A1.55 1.55 0 0 0 21.47 17.87 L13.33 3.87 A1.54 1.54 0 0 0 10.67 3.87 Z\" /><path d=\"M12 9.33 V13.33\" /><circle cx=\"12\" cy=\"16.53\" r=\"0.8\" fill=\"currentColor\" stroke=\"none\" />"
40
+ },
41
+ {
42
+ "id": "balance",
43
+ "nom": "Balance (justice)",
44
+ "viewBox": "0 0 24 24",
45
+ "corps": "<path d=\"M12 3.33 V20.67\" /><path d=\"M8.67 20.67 H15.33\" /><path d=\"M5.33 6 H18.67\" /><path d=\"M6.67 6 L3.33 13.33\" /><path d=\"M6.67 6 L10 13.33\" /><path d=\"M3.33 13.33 A3.33 3.33 0 0 0 10 13.33\" /><path d=\"M17.33 6 L14 13.33\" /><path d=\"M17.33 6 L20.67 13.33\" /><path d=\"M14 13.33 A3.33 3.33 0 0 0 20.67 13.33\" />"
46
+ },
29
47
  {
30
48
  "id": "base-de-donnees",
31
49
  "nom": "Base de données",
@@ -50,6 +68,12 @@
50
68
  "viewBox": "0 0 24 24",
51
69
  "corps": "<path d=\"M4 8 V4 H8\" /><path d=\"M20 8 V4 H16\" /><path d=\"M4 16 V20 H8\" /><path d=\"M20 16 V20 H16\" />"
52
70
  },
71
+ {
72
+ "id": "calendrier",
73
+ "nom": "Calendrier",
74
+ "viewBox": "0 0 24 24",
75
+ "corps": "<rect x=\"3.33\" y=\"4.67\" width=\"17.33\" height=\"16\" rx=\"1.33\" /><path d=\"M3.33 9.33 H20.67\" /><path d=\"M8 2.67 V6.67\" /><path d=\"M16 2.67 V6.67\" />"
76
+ },
53
77
  {
54
78
  "id": "chevron-bas",
55
79
  "nom": "Chevron bas",
@@ -68,6 +92,12 @@
68
92
  "viewBox": "0 0 24 24",
69
93
  "corps": "<path d=\"M14.67 4 L6.67 12 L14.67 20\" />"
70
94
  },
95
+ {
96
+ "id": "chevron-haut",
97
+ "nom": "Chevron haut",
98
+ "viewBox": "0 0 24 24",
99
+ "corps": "<path d=\"M6.67 14.67 L12 9.33 L17.33 14.67\" />"
100
+ },
71
101
  {
72
102
  "id": "coche",
73
103
  "nom": "Coche",
@@ -86,6 +116,12 @@
86
116
  "viewBox": "0 0 24 24",
87
117
  "corps": "<path d=\"M4 6.67 H20\" /><path d=\"M9.33 6.67 V4.67 A1.33 1.33 0 0 1 10.67 3.33 H13.33 A1.33 1.33 0 0 1 14.67 4.67 V6.67\" /><path d=\"M6 6.67 L6.93 18.93 A1.33 1.33 0 0 0 8.27 20 H15.73 A1.33 1.33 0 0 0 17.07 18.93 L18 6.67\" /><path d=\"M10 10.67 V16.67\" /><path d=\"M14 10.67 V16.67\" />"
88
118
  },
119
+ {
120
+ "id": "courriel",
121
+ "nom": "Courriel",
122
+ "viewBox": "0 0 24 24",
123
+ "corps": "<rect x=\"2.67\" y=\"5.33\" width=\"18.67\" height=\"13.33\" rx=\"1.33\" /><path d=\"M2.67 7.33 L12 13.33 L21.33 7.33\" />"
124
+ },
89
125
  {
90
126
  "id": "cube",
91
127
  "nom": "Cube (stockage objet)",
@@ -104,6 +140,12 @@
104
140
  "viewBox": "0 0 24 24",
105
141
  "corps": "<path d=\"M12 3.2 V14.4\" /><polyline points=\"7.6,10 12,14.4 16.4,10\" /><path d=\"M4 16.8 v2.4 a1.6 1.6 0 0 0 1.6 1.6 h12.8 a1.6 1.6 0 0 0 1.6-1.6 v-2.4\" />"
106
142
  },
143
+ {
144
+ "id": "diplome",
145
+ "nom": "Diplôme (Campus)",
146
+ "viewBox": "0 0 24 24",
147
+ "corps": "<path d=\"M2.67 9.33 L12 4.67 L21.33 9.33 L12 14 Z\" /><path d=\"M6.67 11.6 V16 C6.67 17.47 9.07 18.67 12 18.67 C14.93 18.67 17.33 17.47 17.33 16 V11.6\" /><path d=\"M21.33 9.33 V14.67\" />"
148
+ },
107
149
  {
108
150
  "id": "dossier",
109
151
  "nom": "Dossier",
@@ -116,6 +158,18 @@
116
158
  "viewBox": "0 0 24 24",
117
159
  "corps": "<path d=\"M13.33 2.67 L5.33 13.33 H12 L10.67 21.33 L18.67 10.67 H12 Z\" />"
118
160
  },
161
+ {
162
+ "id": "envoyer",
163
+ "nom": "Envoyer",
164
+ "viewBox": "0 0 24 24",
165
+ "corps": "<path d=\"M21.33 2.67 L10.67 13.33\" /><path d=\"M21.33 2.67 L14.67 21.33 L10.67 13.33 L2.67 9.33 Z\" />"
166
+ },
167
+ {
168
+ "id": "epingle",
169
+ "nom": "Épingle (lieu)",
170
+ "viewBox": "0 0 24 24",
171
+ "corps": "<path d=\"M12 21.33 C7.56 16.89 5.33 13.42 5.33 10.67 A6.67 6.67 0 0 1 18.67 10.67 C18.67 13.42 16.44 16.89 12 21.33 Z\" /><circle cx=\"12\" cy=\"10.67\" r=\"2.4\" />"
172
+ },
119
173
  {
120
174
  "id": "equipe",
121
175
  "nom": "Équipe (membres)",
@@ -128,24 +182,72 @@
128
182
  "viewBox": "0 0 24 24",
129
183
  "corps": "<path d=\"M12 2.67 L13.87 8.8 L20 10.67 L13.87 12.53 L12 18.67 L10.13 12.53 L4 10.67 L10.13 8.8 Z\" /><path d=\"M19.33 16.67 L20 18.67 L22 19.33 L20 20 L19.33 22 L18.67 20 L16.67 19.33 L18.67 18.67 Z\" />"
130
184
  },
185
+ {
186
+ "id": "etoile",
187
+ "nom": "Étoile (favori)",
188
+ "viewBox": "0 0 24 24",
189
+ "corps": "<path d=\"M12 3.33 L14.67 8.53 L20.4 9.37 L16.2 13.4 L17.2 19.07 L12 16.4 L6.8 19.07 L7.8 13.4 L3.6 9.37 L9.33 8.53 Z\" />"
190
+ },
131
191
  {
132
192
  "id": "fermer",
133
193
  "nom": "Fermer",
134
194
  "viewBox": "0 0 24 24",
135
195
  "corps": "<path d=\"M5.33 5.33 L18.67 18.67\" /><path d=\"M18.67 5.33 L5.33 18.67\" />"
136
196
  },
197
+ {
198
+ "id": "fichier",
199
+ "nom": "Fichier (document)",
200
+ "viewBox": "0 0 24 24",
201
+ "corps": "<path d=\"M13.33 2.67 H6.67 A1.33 1.33 0 0 0 5.33 4 V20 A1.33 1.33 0 0 0 6.67 21.33 H17.33 A1.33 1.33 0 0 0 18.67 20 V8 Z\" /><path d=\"M13.33 2.67 V8 H18.67\" />"
202
+ },
203
+ {
204
+ "id": "filtre",
205
+ "nom": "Filtre",
206
+ "viewBox": "0 0 24 24",
207
+ "corps": "<path d=\"M2.67 4 H21.33 L14.67 12.27 V18.67 L9.33 21.33 V12.27 Z\" />"
208
+ },
209
+ {
210
+ "id": "globe",
211
+ "nom": "Globe (international)",
212
+ "viewBox": "0 0 24 24",
213
+ "corps": "<circle cx=\"12\" cy=\"12\" r=\"8.67\" /><path d=\"M3.33 12 H20.67\" /><path d=\"M12 3.33 C14.22 5.64 15.47 8.71 15.47 12 C15.47 15.29 14.22 18.36 12 20.67 C9.78 18.36 8.53 15.29 8.53 12 C8.53 8.71 9.78 5.64 12 3.33 Z\" />"
214
+ },
215
+ {
216
+ "id": "graphique",
217
+ "nom": "Graphique (barres)",
218
+ "viewBox": "0 0 24 24",
219
+ "corps": "<path d=\"M4 4 V20 H20\" /><path d=\"M8.67 20 V12.67\" /><path d=\"M12.67 20 V8\" /><path d=\"M16.67 20 V15.33\" />"
220
+ },
137
221
  {
138
222
  "id": "horloge",
139
223
  "nom": "Horloge (intégration continue)",
140
224
  "viewBox": "0 0 24 24",
141
225
  "corps": "<circle cx=\"12\" cy=\"12\" r=\"8\" /><path d=\"M12 6.67 V12 L15.33 14\" />"
142
226
  },
227
+ {
228
+ "id": "imprimante",
229
+ "nom": "Imprimante",
230
+ "viewBox": "0 0 24 24",
231
+ "corps": "<path d=\"M6.67 8 V3.33 H17.33 V8\" /><path d=\"M6.67 17.33 H4.67 A1.33 1.33 0 0 1 3.33 16 V10.67 A1.33 1.33 0 0 1 4.67 9.33 H19.33 A1.33 1.33 0 0 1 20.67 10.67 V16 A1.33 1.33 0 0 1 19.33 17.33 H17.33\" /><rect x=\"6.67\" y=\"13.33\" width=\"10.67\" height=\"7.33\" rx=\"0.8\" />"
232
+ },
233
+ {
234
+ "id": "info",
235
+ "nom": "Information",
236
+ "viewBox": "0 0 24 24",
237
+ "corps": "<circle cx=\"12\" cy=\"12\" r=\"8.67\" /><path d=\"M12 11.33 V16\" /><circle cx=\"12\" cy=\"8\" r=\"0.8\" fill=\"currentColor\" stroke=\"none\" />"
238
+ },
143
239
  {
144
240
  "id": "lien-externe",
145
241
  "nom": "Lien externe",
146
242
  "viewBox": "0 0 24 24",
147
243
  "corps": "<path d=\"M10.67 4 H4 V20 H20 V13.33\" /><path d=\"M14.67 4 H20 V9.33\" /><path d=\"M20 4 L12 12\" />"
148
244
  },
245
+ {
246
+ "id": "livre-ouvert",
247
+ "nom": "Livre ouvert (formation)",
248
+ "viewBox": "0 0 24 24",
249
+ "corps": "<path d=\"M2.67 5.33 C5.33 4.67 7.78 4.89 12 6.67 C16.22 4.89 18.67 4.67 21.33 5.33 V18 C18.67 17.33 16.22 17.56 12 19.33 C7.78 17.56 5.33 17.33 2.67 18 Z\" /><path d=\"M12 6.67 V19.33\" />"
250
+ },
149
251
  {
150
252
  "id": "menu",
151
253
  "nom": "Menu (hamburger)",
@@ -200,11 +302,35 @@
200
302
  "viewBox": "0 0 24 24",
201
303
  "corps": "<path d=\"M4.67 6.67 L6.67 8.67 L10 5.33\" /><path d=\"M4.67 16 L6.67 18 L10 14.67\" /><path d=\"M13.33 7.33 H20\" /><path d=\"M13.33 16.67 H20\" />"
202
304
  },
305
+ {
306
+ "id": "telecharger",
307
+ "nom": "Télécharger",
308
+ "viewBox": "0 0 24 24",
309
+ "corps": "<path d=\"M12 3.33 V15.33\" /><polyline points=\"6.67,10 12,15.33 17.33,10\" /><path d=\"M4.67 20.67 H19.33\" />"
310
+ },
311
+ {
312
+ "id": "telephone",
313
+ "nom": "Téléphone",
314
+ "viewBox": "0 0 24 24",
315
+ "corps": "<path d=\"M20.67 16.93 V19.33 A1.6 1.6 0 0 1 18.93 20.93 C16.13 20.67 13.47 19.67 11.2 18.13 C9.09 16.71 7.29 14.91 5.87 12.8 C4.33 10.52 3.33 7.85 3.07 5.05 A1.6 1.6 0 0 1 4.67 3.33 H7.07 A1.6 1.6 0 0 1 8.67 4.71 C8.79 5.83 9.04 6.93 9.4 7.97 A1.6 1.6 0 0 1 9.04 9.65 L8 10.69 C9.32 13.01 11.03 14.71 13.33 16 L14.37 14.96 A1.6 1.6 0 0 1 16.05 14.6 C17.09 14.96 18.19 15.21 19.31 15.33 A1.6 1.6 0 0 1 20.67 16.93 Z\" />"
316
+ },
317
+ {
318
+ "id": "tri",
319
+ "nom": "Tri",
320
+ "viewBox": "0 0 24 24",
321
+ "corps": "<path d=\"M8 4 V20\" /><path d=\"M4.67 7.33 L8 4 L11.33 7.33\" /><path d=\"M16 20 V4\" /><path d=\"M12.67 16.67 L16 20 L19.33 16.67\" />"
322
+ },
203
323
  {
204
324
  "id": "trois-points",
205
325
  "nom": "Trois points (menu contextuel)",
206
326
  "viewBox": "0 0 24 24",
207
327
  "corps": "<circle cx=\"5.33\" cy=\"12\" r=\"1.33\" fill=\"currentColor\" stroke=\"none\" /><circle cx=\"12\" cy=\"12\" r=\"1.33\" fill=\"currentColor\" stroke=\"none\" /><circle cx=\"18.67\" cy=\"12\" r=\"1.33\" fill=\"currentColor\" stroke=\"none\" />"
328
+ },
329
+ {
330
+ "id": "utilisateur",
331
+ "nom": "Utilisateur",
332
+ "viewBox": "0 0 24 24",
333
+ "corps": "<circle cx=\"12\" cy=\"8\" r=\"3.33\" /><path d=\"M5.33 20 C5.33 15.33 8.33 13.33 12 13.33 C15.67 13.33 18.67 15.33 18.67 20\" />"
208
334
  }
209
335
  ]
210
336
  }
package/icons/sprite.svg CHANGED
@@ -1,28 +1,45 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
2
2
  <symbol id="zv-accueil" viewBox="0 0 24 24"><path d="M4 10.67 L12 4 L20 10.67 V20 H4 Z" /><path d="M9.33 20 V13.33 H14.67 V20" /></symbol>
3
3
  <symbol id="zv-activite" viewBox="0 0 24 24"><path d="M3.33 12 H8 L10.67 5.33 L14 18.67 L16 12 H20.67" /></symbol>
4
+ <symbol id="zv-aide" viewBox="0 0 24 24"><circle cx="12" cy="12" r="8.67" /><path d="M9.33 9.33 A2.67 2.67 0 0 1 14.53 10.13 C14.53 11.87 12 12.27 12 14" /><circle cx="12" cy="17.07" r="0.8" fill="currentColor" stroke="none" /></symbol>
4
5
  <symbol id="zv-app-couches" viewBox="0 0 24 24"><path d="M12 2.67 L20 6.67 L12 10.67 L4 6.67 Z" /><path d="M4 12 L12 16 L20 12" /><path d="M4 17.33 L12 21.33 L20 17.33" /></symbol>
5
6
  <symbol id="zv-archiver" viewBox="0 0 24 24"><rect x="3.33" y="4" width="17.33" height="4.67" rx="1.07" /><path d="M5.33 8.67 V18.93 A1.07 1.07 0 0 0 6.4 20 H17.6 A1.07 1.07 0 0 0 18.67 18.93 V8.67" /><path d="M9.33 12.67 H14.67" /></symbol>
7
+ <symbol id="zv-attention" viewBox="0 0 24 24"><path d="M10.67 3.87 L2.53 17.87 A1.55 1.55 0 0 0 3.87 20.19 H20.13 A1.55 1.55 0 0 0 21.47 17.87 L13.33 3.87 A1.54 1.54 0 0 0 10.67 3.87 Z" /><path d="M12 9.33 V13.33" /><circle cx="12" cy="16.53" r="0.8" fill="currentColor" stroke="none" /></symbol>
8
+ <symbol id="zv-balance" viewBox="0 0 24 24"><path d="M12 3.33 V20.67" /><path d="M8.67 20.67 H15.33" /><path d="M5.33 6 H18.67" /><path d="M6.67 6 L3.33 13.33" /><path d="M6.67 6 L10 13.33" /><path d="M3.33 13.33 A3.33 3.33 0 0 0 10 13.33" /><path d="M17.33 6 L14 13.33" /><path d="M17.33 6 L20.67 13.33" /><path d="M14 13.33 A3.33 3.33 0 0 0 20.67 13.33" /></symbol>
6
9
  <symbol id="zv-base-de-donnees" viewBox="0 0 24 24"><ellipse cx="12" cy="6" rx="7.33" ry="2.67" /><path d="M4.67 6 V12 C4.67 13.47 7.87 14.67 12 14.67 C16.13 14.67 19.33 13.47 19.33 12 V6" /><path d="M4.67 12 V18 C4.67 19.47 7.87 20.67 12 20.67 C16.13 20.67 19.33 19.47 19.33 18 V12" /></symbol>
7
10
  <symbol id="zv-bouclier-verifie" viewBox="0 0 24 24"><path d="M12 2.67 L20 6 V12 C20 16.67 16.67 19.73 12 21.33 C7.33 19.73 4 16.67 4 12 V6 Z" /><path d="M8.67 12 L11.07 14.4 L15.33 10" /></symbol>
8
11
  <symbol id="zv-cadenas" viewBox="0 0 24 24"><rect x="4.67" y="10.67" width="14.67" height="9.33" rx="1.6" /><path d="M8 10.67 V7.33 A4 4 0 0 1 16 7.33 V10.67" /><circle cx="12" cy="15.33" r="1.33" /></symbol>
9
12
  <symbol id="zv-cadrer" viewBox="0 0 24 24"><path d="M4 8 V4 H8" /><path d="M20 8 V4 H16" /><path d="M4 16 V20 H8" /><path d="M20 16 V20 H16" /></symbol>
13
+ <symbol id="zv-calendrier" viewBox="0 0 24 24"><rect x="3.33" y="4.67" width="17.33" height="16" rx="1.33" /><path d="M3.33 9.33 H20.67" /><path d="M8 2.67 V6.67" /><path d="M16 2.67 V6.67" /></symbol>
10
14
  <symbol id="zv-chevron-bas" viewBox="0 0 24 24"><path d="M6.67 9.33 L12 14.67 L17.33 9.33" /></symbol>
11
15
  <symbol id="zv-chevron-droit" viewBox="0 0 24 24"><path d="M9.33 4 L17.33 12 L9.33 20" /></symbol>
12
16
  <symbol id="zv-chevron-gauche" viewBox="0 0 24 24"><path d="M14.67 4 L6.67 12 L14.67 20" /></symbol>
17
+ <symbol id="zv-chevron-haut" viewBox="0 0 24 24"><path d="M6.67 14.67 L12 9.33 L17.33 14.67" /></symbol>
13
18
  <symbol id="zv-coche" viewBox="0 0 24 24"><path d="M5 12.4 L9.4 16.8 L19 6.8" /></symbol>
14
19
  <symbol id="zv-copier" viewBox="0 0 24 24"><rect x="4" y="4" width="12" height="12" rx="1.6" /><path d="M8 16 V18.93 A1.07 1.07 0 0 0 9.07 20 H18.93 A1.07 1.07 0 0 0 20 18.93 V9.07 A1.07 1.07 0 0 0 18.93 8 H16" /></symbol>
15
20
  <symbol id="zv-corbeille" viewBox="0 0 24 24"><path d="M4 6.67 H20" /><path d="M9.33 6.67 V4.67 A1.33 1.33 0 0 1 10.67 3.33 H13.33 A1.33 1.33 0 0 1 14.67 4.67 V6.67" /><path d="M6 6.67 L6.93 18.93 A1.33 1.33 0 0 0 8.27 20 H15.73 A1.33 1.33 0 0 0 17.07 18.93 L18 6.67" /><path d="M10 10.67 V16.67" /><path d="M14 10.67 V16.67" /></symbol>
21
+ <symbol id="zv-courriel" viewBox="0 0 24 24"><rect x="2.67" y="5.33" width="18.67" height="13.33" rx="1.33" /><path d="M2.67 7.33 L12 13.33 L21.33 7.33" /></symbol>
16
22
  <symbol id="zv-cube" viewBox="0 0 24 24"><path d="M3.33 8 L12 4 L20.67 8 V16 L12 20 L3.33 16 Z" /><path d="M3.33 8 L12 12 L20.67 8" /><path d="M12 12 V20" /></symbol>
17
23
  <symbol id="zv-deconnexion" viewBox="0 0 24 24"><path d="M14.67 4 H5.33 V20 H14.67" /><path d="M10.67 12 H20" /><path d="M16.67 8 L20.67 12 L16.67 16" /></symbol>
18
24
  <symbol id="zv-depot-fichier" viewBox="0 0 24 24"><path d="M12 3.2 V14.4" /><polyline points="7.6,10 12,14.4 16.4,10" /><path d="M4 16.8 v2.4 a1.6 1.6 0 0 0 1.6 1.6 h12.8 a1.6 1.6 0 0 0 1.6-1.6 v-2.4" /></symbol>
25
+ <symbol id="zv-diplome" viewBox="0 0 24 24"><path d="M2.67 9.33 L12 4.67 L21.33 9.33 L12 14 Z" /><path d="M6.67 11.6 V16 C6.67 17.47 9.07 18.67 12 18.67 C14.93 18.67 17.33 17.47 17.33 16 V11.6" /><path d="M21.33 9.33 V14.67" /></symbol>
19
26
  <symbol id="zv-dossier" viewBox="0 0 24 24"><path d="M1.41 6.64a1.69 1.69 0 0 1 1.69-1.69h4.8l2.12 2.4h10.87a1.69 1.69 0 0 1 1.69 1.69v9.88a1.69 1.69 0 0 1-1.69 1.69H3.11A1.69 1.69 0 0 1 1.41 20.33V6.64Z" /></symbol>
20
27
  <symbol id="zv-eclair" viewBox="0 0 24 24"><path d="M13.33 2.67 L5.33 13.33 H12 L10.67 21.33 L18.67 10.67 H12 Z" /></symbol>
28
+ <symbol id="zv-envoyer" viewBox="0 0 24 24"><path d="M21.33 2.67 L10.67 13.33" /><path d="M21.33 2.67 L14.67 21.33 L10.67 13.33 L2.67 9.33 Z" /></symbol>
29
+ <symbol id="zv-epingle" viewBox="0 0 24 24"><path d="M12 21.33 C7.56 16.89 5.33 13.42 5.33 10.67 A6.67 6.67 0 0 1 18.67 10.67 C18.67 13.42 16.44 16.89 12 21.33 Z" /><circle cx="12" cy="10.67" r="2.4" /></symbol>
21
30
  <symbol id="zv-equipe" viewBox="0 0 24 24"><circle cx="9.33" cy="8" r="3.33" /><path d="M3.33 20 C3.33 15.33 6 13.33 9.33 13.33 C12.67 13.33 15.33 15.33 15.33 20" /><path d="M16 5.33 A2.93 2.93 0 0 1 16 11.07" /><path d="M17.33 13.6 C19.73 14.27 20.67 16.4 20.67 20" /></symbol>
22
31
  <symbol id="zv-etincelles" viewBox="0 0 24 24"><path d="M12 2.67 L13.87 8.8 L20 10.67 L13.87 12.53 L12 18.67 L10.13 12.53 L4 10.67 L10.13 8.8 Z" /><path d="M19.33 16.67 L20 18.67 L22 19.33 L20 20 L19.33 22 L18.67 20 L16.67 19.33 L18.67 18.67 Z" /></symbol>
32
+ <symbol id="zv-etoile" viewBox="0 0 24 24"><path d="M12 3.33 L14.67 8.53 L20.4 9.37 L16.2 13.4 L17.2 19.07 L12 16.4 L6.8 19.07 L7.8 13.4 L3.6 9.37 L9.33 8.53 Z" /></symbol>
23
33
  <symbol id="zv-fermer" viewBox="0 0 24 24"><path d="M5.33 5.33 L18.67 18.67" /><path d="M18.67 5.33 L5.33 18.67" /></symbol>
34
+ <symbol id="zv-fichier" viewBox="0 0 24 24"><path d="M13.33 2.67 H6.67 A1.33 1.33 0 0 0 5.33 4 V20 A1.33 1.33 0 0 0 6.67 21.33 H17.33 A1.33 1.33 0 0 0 18.67 20 V8 Z" /><path d="M13.33 2.67 V8 H18.67" /></symbol>
35
+ <symbol id="zv-filtre" viewBox="0 0 24 24"><path d="M2.67 4 H21.33 L14.67 12.27 V18.67 L9.33 21.33 V12.27 Z" /></symbol>
36
+ <symbol id="zv-globe" viewBox="0 0 24 24"><circle cx="12" cy="12" r="8.67" /><path d="M3.33 12 H20.67" /><path d="M12 3.33 C14.22 5.64 15.47 8.71 15.47 12 C15.47 15.29 14.22 18.36 12 20.67 C9.78 18.36 8.53 15.29 8.53 12 C8.53 8.71 9.78 5.64 12 3.33 Z" /></symbol>
37
+ <symbol id="zv-graphique" viewBox="0 0 24 24"><path d="M4 4 V20 H20" /><path d="M8.67 20 V12.67" /><path d="M12.67 20 V8" /><path d="M16.67 20 V15.33" /></symbol>
24
38
  <symbol id="zv-horloge" viewBox="0 0 24 24"><circle cx="12" cy="12" r="8" /><path d="M12 6.67 V12 L15.33 14" /></symbol>
39
+ <symbol id="zv-imprimante" viewBox="0 0 24 24"><path d="M6.67 8 V3.33 H17.33 V8" /><path d="M6.67 17.33 H4.67 A1.33 1.33 0 0 1 3.33 16 V10.67 A1.33 1.33 0 0 1 4.67 9.33 H19.33 A1.33 1.33 0 0 1 20.67 10.67 V16 A1.33 1.33 0 0 1 19.33 17.33 H17.33" /><rect x="6.67" y="13.33" width="10.67" height="7.33" rx="0.8" /></symbol>
40
+ <symbol id="zv-info" viewBox="0 0 24 24"><circle cx="12" cy="12" r="8.67" /><path d="M12 11.33 V16" /><circle cx="12" cy="8" r="0.8" fill="currentColor" stroke="none" /></symbol>
25
41
  <symbol id="zv-lien-externe" viewBox="0 0 24 24"><path d="M10.67 4 H4 V20 H20 V13.33" /><path d="M14.67 4 H20 V9.33" /><path d="M20 4 L12 12" /></symbol>
42
+ <symbol id="zv-livre-ouvert" viewBox="0 0 24 24"><path d="M2.67 5.33 C5.33 4.67 7.78 4.89 12 6.67 C16.22 4.89 18.67 4.67 21.33 5.33 V18 C18.67 17.33 16.22 17.56 12 19.33 C7.78 17.56 5.33 17.33 2.67 18 Z" /><path d="M12 6.67 V19.33" /></symbol>
26
43
  <symbol id="zv-menu" viewBox="0 0 24 24"><path d="M0 5.33 H24" /><path d="M0 12 H24" /><path d="M0 18.67 H24" /></symbol>
27
44
  <symbol id="zv-moins" viewBox="0 0 24 24"><path d="M4 12 H20" /></symbol>
28
45
  <symbol id="zv-oeil" viewBox="0 0 24 24"><path d="M2 12 C5.33 6.67 8.67 4.67 12 4.67 C15.33 4.67 18.67 6.67 22 12 C18.67 17.33 15.33 19.33 12 19.33 C8.67 19.33 5.33 17.33 2 12 Z" /><circle cx="12" cy="12" r="2.67" /></symbol>
@@ -32,5 +49,9 @@
32
49
  <symbol id="zv-reglages" viewBox="0 0 24 24"><circle cx="12" cy="12" r="2.93" /><path d="M12 2 V4.67 M12 19.33 V22 M2 12 H4.67 M19.33 12 H22 M4.8 4.8 L6.67 6.67 M17.33 17.33 L19.2 19.2 M19.2 4.8 L17.33 6.67 M6.67 17.33 L4.8 19.2" /></symbol>
33
50
  <symbol id="zv-reseau" viewBox="0 0 24 24"><circle cx="12" cy="12" r="8" /><path d="M4 12 H20" /><path d="M12 4 C14.67 8 14.67 16 12 20" /><path d="M12 4 C9.33 8 9.33 16 12 20" /></symbol>
34
51
  <symbol id="zv-taches" viewBox="0 0 24 24"><path d="M4.67 6.67 L6.67 8.67 L10 5.33" /><path d="M4.67 16 L6.67 18 L10 14.67" /><path d="M13.33 7.33 H20" /><path d="M13.33 16.67 H20" /></symbol>
52
+ <symbol id="zv-telecharger" viewBox="0 0 24 24"><path d="M12 3.33 V15.33" /><polyline points="6.67,10 12,15.33 17.33,10" /><path d="M4.67 20.67 H19.33" /></symbol>
53
+ <symbol id="zv-telephone" viewBox="0 0 24 24"><path d="M20.67 16.93 V19.33 A1.6 1.6 0 0 1 18.93 20.93 C16.13 20.67 13.47 19.67 11.2 18.13 C9.09 16.71 7.29 14.91 5.87 12.8 C4.33 10.52 3.33 7.85 3.07 5.05 A1.6 1.6 0 0 1 4.67 3.33 H7.07 A1.6 1.6 0 0 1 8.67 4.71 C8.79 5.83 9.04 6.93 9.4 7.97 A1.6 1.6 0 0 1 9.04 9.65 L8 10.69 C9.32 13.01 11.03 14.71 13.33 16 L14.37 14.96 A1.6 1.6 0 0 1 16.05 14.6 C17.09 14.96 18.19 15.21 19.31 15.33 A1.6 1.6 0 0 1 20.67 16.93 Z" /></symbol>
54
+ <symbol id="zv-tri" viewBox="0 0 24 24"><path d="M8 4 V20" /><path d="M4.67 7.33 L8 4 L11.33 7.33" /><path d="M16 20 V4" /><path d="M12.67 16.67 L16 20 L19.33 16.67" /></symbol>
35
55
  <symbol id="zv-trois-points" viewBox="0 0 24 24"><circle cx="5.33" cy="12" r="1.33" fill="currentColor" stroke="none" /><circle cx="12" cy="12" r="1.33" fill="currentColor" stroke="none" /><circle cx="18.67" cy="12" r="1.33" fill="currentColor" stroke="none" /></symbol>
56
+ <symbol id="zv-utilisateur" viewBox="0 0 24 24"><circle cx="12" cy="8" r="3.33" /><path d="M5.33 20 C5.33 15.33 8.33 13.33 12 13.33 C15.67 13.33 18.67 15.33 18.67 20" /></symbol>
36
57
  </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zevra/ui",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "Design system Zevra « Encre & Papier » — tokens, CSS des composants et logos officiels.",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,
@@ -34,6 +34,10 @@
34
34
  "types": "./dist/css-inline.d.ts",
35
35
  "default": "./dist/css-inline.js"
36
36
  },
37
+ "./react/table": {
38
+ "types": "./dist/data-table.d.ts",
39
+ "default": "./dist/data-table.js"
40
+ },
37
41
  "./css": "./src/index.css",
38
42
  "./tokens.css": "./src/tokens.css",
39
43
  "./fonts.css": "./src/fonts.css",
@@ -66,14 +70,22 @@
66
70
  "scripts": {
67
71
  "build": "node scripts/build-icon-react.mjs && node scripts/build-css-bundle.mjs && tsc -p tsconfig.json",
68
72
  "test": "npm run build && vitest run",
69
- "prepublishOnly": "npm run build"
73
+ "prepublishOnly": "npm run build",
74
+ "storybook": "npm run build && node scripts/build-stories.mjs && storybook dev -p 6006 --no-open",
75
+ "build:storybook": "npm run build && node scripts/build-stories.mjs && storybook build -o storybook-static"
70
76
  },
71
77
  "devDependencies": {
78
+ "@storybook/addon-docs": "^10.5.10",
79
+ "@storybook/addon-mcp": "^0.7.0",
80
+ "@storybook/react-vite": "^10.5.10",
81
+ "@tanstack/react-table": "^8.21.3",
72
82
  "@types/react": "^19.2.18",
73
83
  "@types/react-dom": "^19.2.5",
74
84
  "react": "^19.2.8",
75
85
  "react-dom": "^19.2.8",
86
+ "storybook": "^10.5.10",
76
87
  "typescript": "^7.0.2",
88
+ "vite": "^7.3.6",
77
89
  "vitest": "^3.2.4"
78
90
  },
79
91
  "keywords": [
@@ -84,11 +96,15 @@
84
96
  "components"
85
97
  ],
86
98
  "peerDependencies": {
99
+ "@tanstack/react-table": ">=8",
87
100
  "react": ">=18"
88
101
  },
89
102
  "peerDependenciesMeta": {
90
103
  "react": {
91
104
  "optional": true
105
+ },
106
+ "@tanstack/react-table": {
107
+ "optional": true
92
108
  }
93
109
  }
94
110
  }
package/react/actions.tsx CHANGED
@@ -12,13 +12,18 @@ import type {
12
12
  } from 'react'
13
13
  import { cx } from './cx.js'
14
14
 
15
- /** Variantes de bouton. Une seule pleine par écran — c'est la règle de charte. */
16
- export type BoutonVariante = 'plein' | 'fantome' | 'encre'
15
+ /** Variantes de bouton. Une seule pleine par écran — c'est la règle de
16
+ * charte, et « danger » COMPTE comme la pleine : la règle compte les
17
+ * aplats, pas les couleurs. « danger » est réservée à l'action destructive
18
+ * (la confirmation d'une modale de suppression), jamais à une action
19
+ * simplement importante. */
20
+ export type BoutonVariante = 'plein' | 'fantome' | 'encre' | 'danger'
17
21
 
18
22
  const VARIANTE_BOUTON: Record<BoutonVariante, string> = {
19
23
  plein: 'zv-btn',
20
24
  fantome: 'zv-btn--ghost',
21
25
  encre: 'zv-btn--ink',
26
+ danger: 'zv-btn--danger',
22
27
  }
23
28
 
24
29
  export interface ButtonProps
@@ -28,6 +33,12 @@ export interface ButtonProps
28
33
  compact?: boolean
29
34
  /** Pleine largeur — l'appel à l'action d'un écran mobile. */
30
35
  bloc?: boolean
36
+ /** Attente pendant l'action : pose aria-busy et aria-disabled, et AVALE
37
+ * le clic — sans poser `disabled`, qui sortirait le bouton du parcours
38
+ * clavier au moment précis où l'attente doit s'annoncer.
39
+ * ⚠️ Le LIBELLÉ doit changer avec elle (« Connexion… ») — c'est le motif
40
+ * relevé de Mémoire : l'estompement seul ne dit pas ce qu'on attend. */
41
+ occupe?: boolean
31
42
  /** Échappatoire assumée. À employer pour un ajustement de position, jamais
32
43
  * pour redéfinir une couleur ou une taille : c'est par là que les apps
33
44
  * recommencent à écrire leur propre charte. */
@@ -39,13 +50,28 @@ export function Button({
39
50
  variante = 'plein',
40
51
  compact,
41
52
  bloc,
53
+ occupe,
42
54
  className,
43
55
  type = 'button',
56
+ disabled,
57
+ onClick,
44
58
  ...reste
45
59
  }: ButtonProps) {
46
60
  return (
47
61
  <button
48
62
  type={type}
63
+ aria-busy={occupe || undefined}
64
+ aria-disabled={occupe || undefined}
65
+ disabled={disabled}
66
+ onClick={
67
+ occupe
68
+ ? (e) => {
69
+ // Le clic est avalé, pas interdit : un `disabled` sortirait le
70
+ // bouton du parcours clavier pendant l'annonce de l'attente.
71
+ e.preventDefault()
72
+ }
73
+ : onClick
74
+ }
49
75
  className={cx(
50
76
  VARIANTE_BOUTON[variante],
51
77
  compact && 'zv-btn--sm',