@cyrilld/zestds 0.1.0 → 1.0.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.
package/dist/index.cjs CHANGED
@@ -37,17 +37,24 @@ __export(index_exports, {
37
37
  ArrowNarrowUpLeft: () => ArrowNarrowUpLeft,
38
38
  ArrowNarrowUpRight: () => ArrowNarrowUpRight,
39
39
  ArrowRight: () => ArrowRight,
40
+ Avatar: () => Avatar,
41
+ AvatarGroup: () => AvatarGroup,
42
+ AvatarLabelGroup: () => AvatarLabelGroup,
43
+ AvatarMask: () => AvatarMask,
44
+ Badge: () => Badge,
40
45
  BarChartSquare02: () => BarChartSquare02,
41
46
  Bell01: () => Bell01,
42
47
  BellOff01: () => BellOff01,
43
48
  Bookmark01: () => Bookmark01,
44
49
  Building07: () => Building07,
50
+ Button: () => Button,
45
51
  Calendar: () => Calendar,
46
52
  CalendarPlus01: () => CalendarPlus01,
47
53
  Check: () => Check,
48
54
  CheckCircle01: () => CheckCircle01,
49
55
  CheckCircle02: () => CheckCircle02,
50
56
  CheckDone01: () => CheckDone01,
57
+ Checkbox: () => Checkbox,
51
58
  ChevronDown: () => ChevronDown,
52
59
  ChevronDownDouble: () => ChevronDownDouble,
53
60
  ChevronLeft: () => ChevronLeft,
@@ -58,6 +65,8 @@ __export(index_exports, {
58
65
  ChevronUpDouble: () => ChevronUpDouble,
59
66
  Circle: () => Circle,
60
67
  Clock: () => Clock,
68
+ CloseButton: () => CloseButton,
69
+ DEBORD_FLECHE: () => DEBORD_FLECHE,
61
70
  DotsVertical: () => DotsVertical,
62
71
  Download01: () => Download01,
63
72
  Edit01: () => Edit01,
@@ -114,15 +123,18 @@ __export(index_exports, {
114
123
  FilterFunnel01: () => FilterFunnel01,
115
124
  FilterFunnel02: () => FilterFunnel02,
116
125
  Flag01: () => Flag01,
126
+ HAUTEUR_FLECHE: () => HAUTEUR_FLECHE,
117
127
  Heart01: () => Heart01,
118
128
  Heart02: () => Heart02,
119
129
  HelpCircle01: () => HelpCircle01,
120
130
  HelpCircle02: () => HelpCircle02,
131
+ HelpTooltip: () => HelpTooltip,
121
132
  Home01: () => Home01,
122
133
  Home02: () => Home02,
123
134
  Inbox01: () => Inbox01,
124
135
  InfoCircle01: () => InfoCircle01,
125
136
  InfoCircle02: () => InfoCircle02,
137
+ LARGEUR_FLECHE: () => LARGEUR_FLECHE,
126
138
  LOGO_BOITES: () => LOGO_BOITES,
127
139
  LOGO_ECART: () => LOGO_ECART,
128
140
  Link01: () => Link01,
@@ -135,6 +147,8 @@ __export(index_exports, {
135
147
  Mail01: () => Mail01,
136
148
  Mail02: () => Mail02,
137
149
  Menu01: () => Menu01,
150
+ MessageAlertSquare01: () => MessageAlertSquare01,
151
+ MessageAlertSquare02: () => MessageAlertSquare02,
138
152
  MessageBubble01: () => MessageBubble01,
139
153
  MessageBubble02: () => MessageBubble02,
140
154
  MessageChatSquare: () => MessageChatSquare,
@@ -147,6 +161,7 @@ __export(index_exports, {
147
161
  Plus: () => Plus,
148
162
  PlusCircle01: () => PlusCircle01,
149
163
  PlusCircle02: () => PlusCircle02,
164
+ Radio: () => Radio,
150
165
  RefreshCw01: () => RefreshCw01,
151
166
  STYLES_A_REVOIR: () => STYLES_A_REVOIR,
152
167
  Search01: () => Search01,
@@ -159,17 +174,22 @@ __export(index_exports, {
159
174
  SlashCircle01: () => SlashCircle01,
160
175
  SlashDivider: () => SlashDivider,
161
176
  SmartOrg: () => SmartOrg,
177
+ Spinner: () => Spinner,
162
178
  Star01: () => Star01,
163
179
  Target05: () => Target05,
164
180
  ThumbsDown: () => ThumbsDown,
165
181
  ThumbsUp: () => ThumbsUp,
166
182
  Tick: () => Tick,
183
+ Toggle: () => Toggle,
167
184
  Tool01: () => Tool01,
185
+ Tooltip: () => Tooltip,
186
+ TooltipArrow: () => TooltipArrow,
168
187
  Trash01: () => Trash01,
169
188
  Trash02: () => Trash02,
170
189
  Upload01: () => Upload01,
171
190
  User01: () => User01,
172
191
  Users01: () => Users01,
192
+ UtilityButton: () => UtilityButton,
173
193
  XCircle: () => XCircle,
174
194
  XClose: () => XClose,
175
195
  ZEST_FILE_ICONS: () => ZEST_FILE_ICONS,
@@ -211,7 +231,7 @@ var ZEST_ICONS = [
211
231
  { name: "trash-01", category: "G\xE9n\xE9ral", mode: "remplissage", style: "trait", paths: [{ d: "M19.6871 7L18.8681 20.11C18.8024 21.1702 17.8161 22 16.6215 22H7.3785C6.18393 22 5.19758 21.1702 5.13187 20.11L4.31288 7H4.125C3.50368 7 3 6.55228 3 6V3C3 2.44772 3.50368 2 4.125 2H19.875C20.4963 2 21 2.44772 21 3V6C21 6.55228 20.4963 7 19.875 7H19.6871ZM17.8583 7H6.67114L7.50728 20H17.0221L17.8583 7V7ZM5.31617 4.00002V5.00001H19.2132V4.00002H5.31617ZM9.94852 9C10.5881 9 11.1066 9.44771 11.1066 10V17C11.1066 17.5523 10.5881 18 9.94852 18C9.30893 18 8.79044 17.5523 8.79044 17V10C8.79044 9.44771 9.30893 9 9.94852 9ZM14.5809 9C15.2205 9 15.739 9.44771 15.739 10V17C15.739 17.5523 15.2205 18 14.5809 18C13.9413 18 13.4228 17.5523 13.4228 17V10C13.4228 9.44771 13.9413 9 14.5809 9Z", rule: "evenodd" }] },
212
232
  { name: "trash-02", category: "G\xE9n\xE9ral", mode: "remplissage", style: "trait", paths: [{ d: "M19.6253 7.99999L18.8681 20.11C18.8024 21.1702 17.8161 22 16.6215 22H7.37851C6.18393 22 5.19758 21.1702 5.13188 20.11L4.37476 7.99999H19.6253ZM4.125 2H19.875C20.4963 2 21 2.44772 21 3V5C21 5.55229 20.4963 6 19.875 6H4.125C3.50368 6 3 5.55229 3 5V3C3 2.44772 3.50368 2 4.125 2ZM9.75 10C9.12868 10 8.625 10.4477 8.625 11V18C8.625 18.5523 9.12868 19 9.75 19C10.3713 19 10.875 18.5523 10.875 18V11C10.875 10.4477 10.3713 10 9.75 10ZM14.25 10C13.6287 10 13.125 10.4477 13.125 11V18C13.125 18.5523 13.6287 19 14.25 19C14.8713 19 15.375 18.5523 15.375 18V11C15.375 10.4477 14.8713 10 14.25 10Z", rule: "evenodd" }] },
213
233
  { name: "check-circle-01", category: "G\xE9n\xE9ral", mode: "remplissage", style: "trait", paths: [{ d: "M12 22C6.477 22 2 17.523 2 12C2 6.477 6.477 2 12 2C17.523 2 22 6.477 22 12C22 17.523 17.523 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM10.0108 15.7425C10.1761 15.9078 10.4005 16.0005 10.6343 16C10.8681 16.0005 11.0925 15.9078 11.2578 15.7425L17.4947 9.50561C17.839 9.16101 17.8388 8.6025 17.4942 8.25814C17.1496 7.91379 16.5911 7.91398 16.2468 8.25858L10.6334 13.8702L7.51584 10.7526C7.29425 10.5235 6.96629 10.4318 6.65801 10.5128C6.34973 10.5937 6.1091 10.8346 6.02861 11.143C5.94812 11.4514 6.04029 11.7793 6.2697 12.0005L10.0108 15.7425Z", rule: "evenodd" }] },
214
- // check-circle-02 : aplat et forme blanche réunis en un tracé evenodd, pour que l icône suive la couleur du texte
234
+ // check-circle-02 : aplat et forme blanche réunis en un tracé evenodd, pour que l'icône suive la couleur du texte
215
235
  { name: "check-circle-02", category: "G\xE9n\xE9ral", mode: "remplissage", style: "plein", paths: [{ d: "M12 22C6.477 22 2 17.523 2 12C2 6.477 6.477 2 12 2C17.523 2 22 6.477 22 12C22 17.523 17.523 22 12 22Z M10.4489 16.08C10.2245 16.0805 10.0091 15.9915 9.85034 15.8328L6.25891 12.2405C6.03868 12.0281 5.95019 11.7134 6.02746 11.4173C6.10473 11.1213 6.33574 10.8899 6.63169 10.8122C6.92764 10.7345 7.24248 10.8226 7.45521 11.0425L10.4481 14.0354L15.8369 8.64824C16.1675 8.31742 16.7036 8.31723 17.0345 8.64781C17.3653 8.97839 17.3655 9.51456 17.0349 9.84538L11.0475 15.8328C10.8888 15.9915 10.6734 16.0805 10.4489 16.08Z", rule: "evenodd" }] },
216
236
  { name: "x-circle", category: "G\xE9n\xE9ral", mode: "contour", style: "trait", paths: [{ d: "M15 9L9 15M9 9L15 15M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z" }], keywords: ["x", "close", "exit", "remove", "cross", "delete", "circle"] },
217
237
  { name: "smart-org", category: "G\xE9n\xE9ral", mode: "remplissage", style: "trait", paths: [{ d: "M4 16V20H8V16H4ZM16 13H8C7.44772 13 7 13.4477 7 14H8C9.10457 14 10 14.8954 10 16V20C10 21.1046 9.10457 22 8 22H4C2.89543 22 2 21.1046 2 20V16C2 14.8954 2.89543 14 4 14H5C5 12.3431 6.34315 11 8 11H11V10H10C8.89543 10 8 9.10457 8 8V4C8 2.89543 8.89543 2 10 2H14C15.1046 2 16 2.89543 16 4V8C16 9.10457 15.1046 10 14 10H13V11H16C17.6569 11 19 12.3431 19 14H20C21.1046 14 22 14.8954 22 16V20C22 21.1046 21.1046 22 20 22H16C14.8954 22 14 21.1046 14 20V16C14 14.8954 14.8954 14 16 14H17C17 13.4477 16.5523 13 16 13ZM10 4V8H14V4H10ZM16 16V20H20V16H16Z", rule: "evenodd" }] },
@@ -290,6 +310,8 @@ var ZEST_ICONS = [
290
310
  { name: "message-chat-square", category: "Communication", mode: "contour", style: "trait", paths: [{ d: "M10 15L6.92474 18.1137C6.49579 18.548 6.28131 18.7652 6.09695 18.7805C5.93701 18.7938 5.78042 18.7295 5.67596 18.6076C5.55556 18.4672 5.55556 18.162 5.55556 17.5515V15.9916C5.55556 15.444 5.10707 15.0477 4.5652 14.9683C3.25374 14.7762 2.22378 13.7463 2.03168 12.4348C2 12.2186 2 11.9605 2 11.4444V6.8C2 5.11984 2 4.27976 2.32698 3.63803C2.6146 3.07354 3.07354 2.6146 3.63803 2.32698C4.27976 2 5.11984 2 6.8 2H14.2C15.8802 2 16.7202 2 17.362 2.32698C17.9265 2.6146 18.3854 3.07354 18.673 3.63803C19 4.27976 19 5.11984 19 6.8V11M19 22L16.8236 20.4869C16.5177 20.2742 16.3647 20.1678 16.1982 20.0924C16.0504 20.0255 15.8951 19.9768 15.7356 19.9474C15.5558 19.9143 15.3695 19.9143 14.9969 19.9143H13.2C12.0799 19.9143 11.5198 19.9143 11.092 19.6963C10.7157 19.5046 10.4097 19.1986 10.218 18.8223C10 18.3944 10 17.8344 10 16.7143V14.2C10 13.0799 10 12.5198 10.218 12.092C10.4097 11.7157 10.7157 11.4097 11.092 11.218C11.5198 11 12.0799 11 13.2 11H18.8C19.9201 11 20.4802 11 20.908 11.218C21.2843 11.4097 21.5903 11.7157 21.782 12.092C22 12.5198 22 13.0799 22 14.2V16.9143C22 17.8462 22 18.3121 21.8478 18.6797C21.6448 19.1697 21.2554 19.5591 20.7654 19.762C20.3978 19.9143 19.9319 19.9143 19 19.9143V22Z" }], keywords: ["message", "chat", "live chat"] },
291
311
  { name: "send-01", category: "Communication", mode: "contour", style: "trait", paths: [{ d: "M10.4995 13.5001L20.9995 3.00005M10.6271 13.8281L13.2552 20.5861C13.4867 21.1815 13.6025 21.4791 13.7693 21.566C13.9139 21.6414 14.0862 21.6415 14.2308 21.5663C14.3977 21.4796 14.5139 21.1821 14.7461 20.587L21.3364 3.69925C21.5461 3.16207 21.6509 2.89348 21.5935 2.72185C21.5437 2.5728 21.4268 2.45583 21.2777 2.40604C21.1061 2.34871 20.8375 2.45352 20.3003 2.66315L3.41258 9.25349C2.8175 9.48572 2.51997 9.60183 2.43326 9.76873C2.35809 9.91342 2.35819 10.0857 2.43353 10.2303C2.52043 10.3971 2.81811 10.5128 3.41345 10.7444L10.1715 13.3725C10.2923 13.4195 10.3527 13.443 10.4036 13.4793C10.4487 13.5114 10.4881 13.5509 10.5203 13.596C10.5566 13.6468 10.5801 13.7073 10.6271 13.8281Z" }], keywords: ["send", "mail", "message", "chat"] },
292
312
  { name: "inbox-01", category: "Communication", mode: "contour", style: "trait", paths: [{ d: "M2.5 12H5.88197C6.56717 12 7.19357 12.3871 7.5 13C7.80643 13.6129 8.43283 14 9.11803 14H14.882C15.5672 14 16.1936 13.6129 16.5 13C16.8064 12.3871 17.4328 12 18.118 12H21.5M8.96656 4H15.0334C16.1103 4 16.6487 4 17.1241 4.16396C17.5445 4.30896 17.9274 4.5456 18.2451 4.85675C18.6043 5.2086 18.8451 5.6902 19.3267 6.65337L21.4932 10.9865C21.6822 11.3645 21.7767 11.5535 21.8434 11.7515C21.9026 11.9275 21.9453 12.1085 21.971 12.2923C22 12.4992 22 12.7105 22 13.1331V15.2C22 16.8802 22 17.7202 21.673 18.362C21.3854 18.9265 20.9265 19.3854 20.362 19.673C19.7202 20 18.8802 20 17.2 20H6.8C5.11984 20 4.27976 20 3.63803 19.673C3.07354 19.3854 2.6146 18.9265 2.32698 18.362C2 17.7202 2 16.8802 2 15.2V13.1331C2 12.7105 2 12.4992 2.02897 12.2923C2.05471 12.1085 2.09744 11.9275 2.15662 11.7515C2.22326 11.5535 2.31776 11.3645 2.50675 10.9865L4.67331 6.65337C5.1549 5.69019 5.3957 5.2086 5.75495 4.85675C6.07263 4.5456 6.45551 4.30896 6.87589 4.16396C7.35125 4 7.88969 4 8.96656 4Z" }], keywords: ["inbox", "tray", "mailbox", "mail"] },
313
+ { name: "message-alert-square-01", category: "Communication", mode: "contour", style: "trait", paths: [{ d: "M12 10.5V7M12 14H12.01M7 18V20.3355C7 20.8684 7 21.1348 7.10923 21.2716C7.20422 21.3906 7.34827 21.4599 7.50054 21.4597C7.67563 21.4595 7.88367 21.2931 8.29976 20.9602L10.6852 19.0518C11.1725 18.662 11.4162 18.4671 11.6875 18.3285C11.9282 18.2055 12.1844 18.1156 12.4492 18.0613C12.7477 18 13.0597 18 13.6837 18H16.2C17.8802 18 18.7202 18 19.362 17.673C19.9265 17.3854 20.3854 16.9265 20.673 16.362C21 15.7202 21 14.8802 21 13.2V7.8C21 6.11984 21 5.27976 20.673 4.63803C20.3854 4.07354 19.9265 3.6146 19.362 3.32698C18.7202 3 17.8802 3 16.2 3H7.8C6.11984 3 5.27976 3 4.63803 3.32698C4.07354 3.6146 3.6146 4.07354 3.32698 4.63803C3 5.27976 3 6.11984 3 7.8V14C3 14.93 3 15.395 3.10222 15.7765C3.37962 16.8117 4.18827 17.6204 5.22354 17.8978C5.60504 18 6.07003 18 7 18Z" }], keywords: ["message", "alert", "chat", "notification"] },
314
+ { name: "message-alert-square-02", category: "Communication", mode: "remplissage", style: "plein", paths: [{ d: "M16.2414 2H7.7588C6.95383 1.99999 6.28946 1.99998 5.74827 2.04419C5.18617 2.09012 4.66947 2.18868 4.18413 2.43597C3.43149 2.81947 2.81956 3.43139 2.43607 4.18404C2.18878 4.66937 2.09022 5.18608 2.04429 5.74818C2.00007 6.28937 2.00008 6.95373 2.0001 7.7587L2.00005 14.1376C1.99962 14.933 1.9993 15.5236 2.13639 16.0353C2.50626 17.4156 3.58445 18.4938 4.96482 18.8637C5.27229 18.9461 5.60829 18.9789 6.0001 18.9918L6.00009 20.371C6.00005 20.6062 6 20.846 6.01785 21.0425C6.03492 21.2305 6.08012 21.5852 6.32778 21.8955C6.61276 22.2525 7.0449 22.4602 7.50172 22.4597C7.8987 22.4593 8.20394 22.273 8.36137 22.1689C8.52597 22.06 8.7132 21.9102 8.89688 21.7632L11.31 19.8327C11.8286 19.4178 11.9826 19.3007 12.1425 19.219C12.303 19.137 12.4738 19.0771 12.6504 19.0408C12.8263 19.0047 13.0197 19 13.6838 19H16.2414C17.0464 19 17.7107 19 18.2519 18.9558C18.814 18.9099 19.3307 18.8113 19.8161 18.564C20.5687 18.1805 21.1806 17.5686 21.5641 16.816C21.8114 16.3306 21.91 15.8139 21.9559 15.2518C22.0001 14.7106 22.0001 14.0463 22.0001 13.2413V7.75868C22.0001 6.95372 22.0001 6.28936 21.9559 5.74818C21.91 5.18608 21.8114 4.66937 21.5641 4.18404C21.1806 3.43139 20.5687 2.81947 19.8161 2.43597C19.3307 2.18868 18.814 2.09012 18.2519 2.04419C17.7107 1.99998 17.0464 1.99999 16.2414 2ZM13 7C13 6.44772 12.5523 6 12 6C11.4477 6 11 6.44772 11 7V10.5C11 11.0523 11.4477 11.5 12 11.5C12.5523 11.5 13 11.0523 13 10.5V7ZM12 13C11.4477 13 11 13.4477 11 14C11 14.5523 11.4477 15 12 15H12.01C12.5623 15 13.01 14.5523 13.01 14C13.01 13.4477 12.5623 13 12.01 13H12Z", rule: "evenodd" }], keywords: ["message", "alert", "chat", "notification"] },
293
315
  { name: "circle", category: "Forme", mode: "contour", style: "trait", paths: [{ d: "M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" }], keywords: ["circle", "shape"] },
294
316
  { name: "bar-chart-square-02", category: "Charts", mode: "contour", style: "trait", paths: [{ d: "M8 15V17M12 11V17M16 7V17M7.8 21H16.2C17.8802 21 18.7202 21 19.362 20.673C19.9265 20.3854 20.3854 19.9265 20.673 19.362C21 18.7202 21 17.8802 21 16.2V7.8C21 6.11984 21 5.27976 20.673 4.63803C20.3854 4.07354 19.9265 3.6146 19.362 3.32698C18.7202 3 17.8802 3 16.2 3H7.8C6.11984 3 5.27976 3 4.63803 3.32698C4.07354 3.6146 3.6146 4.07354 3.32698 4.63803C3 5.27976 3 6.11984 3 7.8V16.2C3 17.8802 3 18.7202 3.32698 19.362C3.6146 19.9265 4.07354 20.3854 4.63803 20.673C5.27976 21 6.11984 21 7.8 21Z" }], keywords: ["bar", "chart", "square", "barchart", "graph", "data"] },
295
317
  { name: "arrow-down", category: "Fl\xE8ches", mode: "contour", style: "trait", paths: [{ d: "M12 5V19M5 12L12 19L19 12" }], keywords: ["arrow", "down"] },
@@ -326,7 +348,8 @@ var STYLES_A_REVOIR = [
326
348
  { name: "plus", pourquoi: "une croix n'a ni creux ni plein" },
327
349
  { name: "tick", pourquoi: "une coche n'a ni creux ni plein" }
328
350
  ];
329
- var findIcon = (name) => ZEST_ICONS.find((i) => i.name === name);
351
+ var ZEST_ICON_BY_NAME = new Map(ZEST_ICONS.map((icon) => [icon.name, icon]));
352
+ var findIcon = (name) => ZEST_ICON_BY_NAME.get(name);
330
353
 
331
354
  // src/components/foundations/icons/index.tsx
332
355
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -453,6 +476,8 @@ var LockUnlocked01 = icone("lock-unlocked-01");
453
476
  var MessageChatSquare = icone("message-chat-square");
454
477
  var Send01 = icone("send-01");
455
478
  var Inbox01 = icone("inbox-01");
479
+ var MessageAlertSquare01 = icone("message-alert-square-01");
480
+ var MessageAlertSquare02 = icone("message-alert-square-02");
456
481
  var Circle = icone("circle");
457
482
  var BarChartSquare02 = icone("bar-chart-square-02");
458
483
  var ArrowDown = icone("arrow-down");
@@ -473,6 +498,657 @@ var ChevronLeft = icone("chevron-left");
473
498
  var ChevronRight = icone("chevron-right");
474
499
  var ChevronUp = icone("chevron-up");
475
500
 
501
+ // src/components/base/Button/Button.tsx
502
+ var import_react2 = require("react");
503
+
504
+ // src/components/base/Spinner/Spinner.tsx
505
+ var import_react = require("react");
506
+ var import_jsx_runtime2 = require("react/jsx-runtime");
507
+ var Spinner = (0, import_react.forwardRef)(
508
+ ({ size = "sm", label, className, ...rest }, ref) => {
509
+ const classes = ["zds-spinner", `zds-spinner--${size}`, className].filter(Boolean).join(" ");
510
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
511
+ "span",
512
+ {
513
+ ref,
514
+ className: classes,
515
+ role: label ? "status" : void 0,
516
+ "aria-hidden": label ? void 0 : true,
517
+ ...rest,
518
+ children: [
519
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("svg", { className: "zds-spinner__svg", viewBox: "0 0 24 24", fill: "none", children: [
520
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
521
+ "circle",
522
+ {
523
+ className: "zds-spinner__track",
524
+ cx: "12",
525
+ cy: "12",
526
+ r: "9",
527
+ stroke: "currentColor",
528
+ strokeWidth: "2.5"
529
+ }
530
+ ),
531
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
532
+ "path",
533
+ {
534
+ d: "M12 3a9 9 0 0 1 9 9",
535
+ stroke: "currentColor",
536
+ strokeWidth: "2.5",
537
+ strokeLinecap: "round"
538
+ }
539
+ )
540
+ ] }),
541
+ label ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "zds-spinner__label", children: label }) : null
542
+ ]
543
+ }
544
+ );
545
+ }
546
+ );
547
+ Spinner.displayName = "Spinner";
548
+
549
+ // src/components/base/Button/Button.tsx
550
+ var import_jsx_runtime3 = require("react/jsx-runtime");
551
+ var dejaAverti = false;
552
+ var avertirUneFois = () => {
553
+ if (dejaAverti) return;
554
+ dejaAverti = true;
555
+ console.warn(
556
+ "[zestds] <Button> \xE0 ic\xF4ne seule sans nom accessible : ajouter `aria-label`. Un lecteur d'\xE9cran n'annoncera que \xAB bouton \xBB."
557
+ );
558
+ };
559
+ var Button = (0, import_react2.forwardRef)(
560
+ ({
561
+ size = "md",
562
+ hierarchy = "primary",
563
+ iconLeading,
564
+ iconTrailing,
565
+ loading = false,
566
+ disabled = false,
567
+ className,
568
+ children,
569
+ onClick,
570
+ type = "button",
571
+ ...rest
572
+ }, ref) => {
573
+ const iconOnly = children === void 0 || children === null || children === false || children === "";
574
+ if (iconOnly) {
575
+ const nomme = Boolean(rest["aria-label"]) || Boolean(rest["aria-labelledby"]) || Boolean(rest.title);
576
+ if (!nomme) avertirUneFois();
577
+ }
578
+ const classes = [
579
+ "zds-button",
580
+ `zds-button--${size}`,
581
+ `zds-button--${hierarchy}`,
582
+ iconOnly ? "zds-button--icon-only" : null,
583
+ loading ? "zds-button--loading" : null,
584
+ className
585
+ ].filter(Boolean).join(" ");
586
+ const gererClic = (evenement) => {
587
+ if (loading) {
588
+ evenement.preventDefault();
589
+ evenement.stopPropagation();
590
+ return;
591
+ }
592
+ onClick?.(evenement);
593
+ };
594
+ const avant = loading ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Spinner, { size: "sm" }) : iconLeading;
595
+ return (
596
+ /* `{...rest}` passe AVANT les attributs que le composant possede.
597
+ Dans l autre ordre, un `aria-disabled={false}` recu de l appelant
598
+ ecrasait celui que `loading` vient de poser : le bouton se
599
+ declarait disponible pendant son envoi, et rien ne le signalait. */
600
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
601
+ "button",
602
+ {
603
+ ref,
604
+ ...rest,
605
+ type,
606
+ className: classes,
607
+ disabled,
608
+ "aria-busy": loading || void 0,
609
+ "aria-disabled": loading || void 0,
610
+ onClick: gererClic,
611
+ children: [
612
+ avant ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "zds-button__icon", children: avant }) : null,
613
+ iconOnly ? null : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "zds-button__label", children }),
614
+ iconTrailing && !loading ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "zds-button__icon", children: iconTrailing }) : null
615
+ ]
616
+ }
617
+ )
618
+ );
619
+ }
620
+ );
621
+ Button.displayName = "Button";
622
+
623
+ // src/components/base/CloseButton/CloseButton.tsx
624
+ var import_react3 = require("react");
625
+ var import_jsx_runtime4 = require("react/jsx-runtime");
626
+ var CloseButton = (0, import_react3.forwardRef)(
627
+ ({ size = "md", onDark = false, label = "Fermer", className, type = "button", ...rest }, ref) => {
628
+ const classes = [
629
+ "zds-close-button",
630
+ `zds-close-button--${size}`,
631
+ onDark ? "zds-close-button--on-dark" : null,
632
+ className
633
+ ].filter(Boolean).join(" ");
634
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { ref, type, className: classes, "aria-label": label, ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "zds-close-button__icon", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(XClose, {}) }) });
635
+ }
636
+ );
637
+ CloseButton.displayName = "CloseButton";
638
+
639
+ // src/components/base/UtilityButton/UtilityButton.tsx
640
+ var import_react4 = require("react");
641
+ var import_jsx_runtime5 = require("react/jsx-runtime");
642
+ var UtilityButton = (0, import_react4.forwardRef)(
643
+ ({ size = "sm", hierarchy = "secondary", icon, label, className, type = "button", ...rest }, ref) => {
644
+ const classes = [
645
+ "zds-utility-button",
646
+ `zds-utility-button--${size}`,
647
+ `zds-utility-button--${hierarchy}`,
648
+ className
649
+ ].filter(Boolean).join(" ");
650
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { ref, type, className: classes, "aria-label": label, ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "zds-utility-button__icon", children: icon }) });
651
+ }
652
+ );
653
+ UtilityButton.displayName = "UtilityButton";
654
+
655
+ // src/components/base/Badge/Badge.tsx
656
+ var import_react5 = require("react");
657
+ var import_jsx_runtime6 = require("react/jsx-runtime");
658
+ var dejaAverti2 = false;
659
+ var avertirUneFois2 = () => {
660
+ if (dejaAverti2) return;
661
+ dejaAverti2 = true;
662
+ console.warn(
663
+ "[zestds] <Badge onClose> sans nom accessible : passer `closeLabel`, ou un libell\xE9 textuel. Un lecteur d'\xE9cran n'annoncera que \xAB bouton \xBB."
664
+ );
665
+ };
666
+ var Badge = (0, import_react5.forwardRef)(
667
+ ({
668
+ size = "md",
669
+ type = "badge",
670
+ color = "gray",
671
+ dot = false,
672
+ iconLeading,
673
+ iconTrailing,
674
+ onClose,
675
+ closeLabel,
676
+ className,
677
+ children,
678
+ ...rest
679
+ }, ref) => {
680
+ const teteEstPoint = dot;
681
+ const teteEstIcone = !dot && Boolean(iconLeading);
682
+ const finEstCroix = Boolean(onClose);
683
+ const finEstIcone = !finEstCroix && Boolean(iconTrailing);
684
+ const classes = [
685
+ "zds-badge",
686
+ `zds-badge--${size}`,
687
+ `zds-badge--${type}`,
688
+ `zds-badge--${color}`,
689
+ teteEstPoint ? "zds-badge--lead-dot" : null,
690
+ teteEstIcone ? "zds-badge--lead-icon" : null,
691
+ finEstIcone ? "zds-badge--trail-icon" : null,
692
+ finEstCroix ? "zds-badge--trail-close" : null,
693
+ className
694
+ ].filter(Boolean).join(" ");
695
+ const libelleTexte = typeof children === "string" ? children : null;
696
+ const nomCroix = closeLabel ?? (libelleTexte ? `Retirer ${libelleTexte}` : null);
697
+ if (onClose && !nomCroix) avertirUneFois2();
698
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { ref, className: classes, ...rest, children: [
699
+ dot ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "zds-badge__dot", "aria-hidden": "true" }) : null,
700
+ iconLeading ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "zds-badge__icon zds-badge__icon--leading", "aria-hidden": "true", children: iconLeading }) : null,
701
+ children,
702
+ iconTrailing ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "zds-badge__icon zds-badge__icon--trailing", "aria-hidden": "true", children: iconTrailing }) : null,
703
+ onClose ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
704
+ "button",
705
+ {
706
+ type: "button",
707
+ className: "zds-badge__close",
708
+ "aria-label": nomCroix ?? "Retirer",
709
+ onClick: onClose,
710
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(XClose, {})
711
+ }
712
+ ) : null
713
+ ] });
714
+ }
715
+ );
716
+ Badge.displayName = "Badge";
717
+
718
+ // src/components/base/Avatar/Avatar.tsx
719
+ var import_react7 = require("react");
720
+
721
+ // src/components/base/Tooltip/Tooltip.tsx
722
+ var import_react6 = require("react");
723
+
724
+ // src/components/base/Tooltip/TooltipArrow.tsx
725
+ var import_jsx_runtime7 = require("react/jsx-runtime");
726
+ var HAUTEUR_FLECHE = 8.51471;
727
+ var DEBORD_FLECHE = 6;
728
+ var LARGEUR_FLECHE = 16;
729
+ var TooltipArrow = (props) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
730
+ "svg",
731
+ {
732
+ viewBox: `0 0 ${LARGEUR_FLECHE} ${HAUTEUR_FLECHE}`,
733
+ width: LARGEUR_FLECHE,
734
+ height: HAUTEUR_FLECHE,
735
+ fill: "currentColor",
736
+ "aria-hidden": "true",
737
+ ...props,
738
+ children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("path", { d: "M14.0711 0C14.962 0 15.4081 1.07714 14.7782 1.70711L8.70711 7.77818C8.31658 8.16871 7.68342 8.16871 7.29289 7.77818L1.22183 1.70711C0.591867 1.07714 1.03803 0 1.92894 0H14.0711Z" })
739
+ }
740
+ );
741
+
742
+ // src/components/base/Tooltip/Tooltip.tsx
743
+ var import_jsx_runtime8 = require("react/jsx-runtime");
744
+ var DEJA_FOCUSABLE = /* @__PURE__ */ new Set(["a", "button", "input", "select", "textarea", "summary"]);
745
+ var composer = (sien, notre) => (e) => {
746
+ sien?.(e);
747
+ notre(e);
748
+ };
749
+ var Tooltip = ({
750
+ title,
751
+ supportingText,
752
+ arrow = false,
753
+ placement = "top",
754
+ delay = 300,
755
+ closeDelay = 0,
756
+ isDisabled = false,
757
+ isOpen,
758
+ defaultOpen = false,
759
+ onOpenChange,
760
+ children
761
+ }) => {
762
+ const id = (0, import_react6.useId)();
763
+ const [ouverteInterne, setOuverteInterne] = (0, import_react6.useState)(defaultOpen);
764
+ const minuteur = (0, import_react6.useRef)(null);
765
+ const pilote = isOpen !== void 0;
766
+ const ouverte = !isDisabled && (pilote ? isOpen : ouverteInterne);
767
+ const annuler = () => {
768
+ if (minuteur.current) clearTimeout(minuteur.current);
769
+ minuteur.current = null;
770
+ };
771
+ const basculer = (versOuverte, apres) => {
772
+ if (isDisabled || pilote) return;
773
+ annuler();
774
+ const agir = () => {
775
+ minuteur.current = null;
776
+ setOuverteInterne(versOuverte);
777
+ onOpenChange?.(versOuverte);
778
+ };
779
+ if (apres <= 0) agir();
780
+ else minuteur.current = setTimeout(agir, apres);
781
+ };
782
+ (0, import_react6.useEffect)(() => annuler, []);
783
+ (0, import_react6.useEffect)(() => {
784
+ if (!ouverte) return;
785
+ const surTouche = (e) => {
786
+ if (e.key === "Escape") {
787
+ annuler();
788
+ if (!pilote) setOuverteInterne(false);
789
+ onOpenChange?.(false);
790
+ }
791
+ };
792
+ document.addEventListener("keydown", surTouche);
793
+ return () => document.removeEventListener("keydown", surTouche);
794
+ }, [ouverte, pilote, onOpenChange]);
795
+ if (!(0, import_react6.isValidElement)(children)) {
796
+ throw new Error("`Tooltip` attend UN \xE9l\xE9ment comme d\xE9clencheur, pas du texte ni plusieurs enfants.");
797
+ }
798
+ const propsEnfant = children.props;
799
+ const balise = typeof children.type === "string" ? children.type : null;
800
+ const doitRecevoirTabIndex = propsEnfant.tabIndex === void 0 && balise !== null && !DEJA_FOCUSABLE.has(balise);
801
+ const declencheur = (0, import_react6.cloneElement)(children, {
802
+ /* Le survol attend le délai ; le focus clavier n'attend pas. Quelqu'un
803
+ qui tabule a DEMANDÉ l'élément, il ne le traverse pas. */
804
+ onMouseEnter: composer(propsEnfant.onMouseEnter, () => basculer(true, delay)),
805
+ onMouseLeave: composer(propsEnfant.onMouseLeave, () => basculer(false, closeDelay)),
806
+ onFocus: composer(propsEnfant.onFocus, () => basculer(true, 0)),
807
+ onBlur: composer(propsEnfant.onBlur, () => basculer(false, 0)),
808
+ ...doitRecevoirTabIndex ? { tabIndex: 0 } : null,
809
+ /* ⚠️ `aria-describedby` NE DÉSIGNE LA BULLE QUE QUAND ELLE EXISTE. La
810
+ bulle n'est pas rendue au repos ; un `aria-describedby` qui pointerait
811
+ vers un identifiant absent est une référence morte, et les lecteurs
812
+ d'écran ne s'y comportent pas tous pareil. */
813
+ "aria-describedby": ouverte ? [propsEnfant["aria-describedby"], id].filter(Boolean).join(" ") : propsEnfant["aria-describedby"]
814
+ });
815
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { className: "zds-tooltip-ancre", children: [
816
+ declencheur,
817
+ ouverte ? /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
818
+ "span",
819
+ {
820
+ id,
821
+ role: "tooltip",
822
+ className: `zds-tooltip zds-tooltip--${placement}`,
823
+ "data-zds-placement": placement,
824
+ "data-zds-avec-soutien": supportingText ? "" : void 0,
825
+ children: [
826
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { className: "zds-tooltip__contenu", children: [
827
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "zds-tooltip__titre", children: title }),
828
+ supportingText ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "zds-tooltip__soutien", children: supportingText }) : null
829
+ ] }),
830
+ arrow ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "zds-tooltip__fleche", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(TooltipArrow, {}) }) : null
831
+ ]
832
+ }
833
+ ) : null
834
+ ] });
835
+ };
836
+ var NOEUD_ICONE_AIDE = "3167:12028";
837
+ var iconeAide = () => {
838
+ const ecartee = ZEST_ICONS_EN_CONFLIT.find((i) => i.node === NOEUD_ICONE_AIDE);
839
+ if (ecartee) return ecartee;
840
+ const publiee = findIcon("help-circle-01");
841
+ if (!publiee) throw new Error("`help-circle-01` est introuvable dans le catalogue : r\xE9g\xE9n\xE9rer depuis le Figma.");
842
+ return publiee;
843
+ };
844
+ var HelpTooltip = (0, import_react6.forwardRef)(({ label = "Aide", ...tooltip }, ref) => {
845
+ const entree = iconeAide();
846
+ const auContour = entree.mode === "contour";
847
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Tooltip, { ...tooltip, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("button", { ref, type: "button", className: "zds-tooltip-aide", "aria-label": label, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
848
+ "svg",
849
+ {
850
+ viewBox: "0 0 24 24",
851
+ fill: auContour ? "none" : "currentColor",
852
+ stroke: auContour ? "currentColor" : void 0,
853
+ strokeWidth: auContour ? 2 : void 0,
854
+ strokeLinecap: auContour ? "round" : void 0,
855
+ strokeLinejoin: auContour ? "round" : void 0,
856
+ "aria-hidden": "true",
857
+ children: entree.paths.map((p) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("path", { d: p.d, fillRule: p.rule, clipRule: p.rule }, p.d))
858
+ }
859
+ ) }) });
860
+ });
861
+ HelpTooltip.displayName = "HelpTooltip";
862
+
863
+ // src/components/base/Avatar/AvatarMask.tsx
864
+ var import_jsx_runtime9 = require("react/jsx-runtime");
865
+ var AvatarMask = (props) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("svg", { viewBox: "0 0 40 19", fill: "currentColor", "aria-hidden": "true", focusable: "false", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
866
+ "path",
867
+ {
868
+ fillRule: "evenodd",
869
+ clipRule: "evenodd",
870
+ d: "M39.16 1.4484C39.1431 1.23426 39.0815 1.02581 38.9789 0.835984C38.8763 0.646155 38.735 0.479003 38.5637 0.344908C38.3924 0.210813 38.1948 0.112637 37.9832 0.0564726C37.7715 0.000308574 37.5503 -0.0126441 37.3333 0.0184199C33.8467 0.560378 25.68 3.72071 20 3.72071C14.32 3.72071 6.16 0.560378 2.66667 0.0184199C2.44868 -0.0146067 2.22608 -0.00313176 2.01285 0.0521236C1.79961 0.107379 1.60034 0.20522 1.42755 0.339505C1.25476 0.47379 1.11219 0.641618 1.00878 0.832447C0.905377 1.02328 0.843374 1.23298 0.826667 1.4484C0.553333 4.4455 0 12.4377 0 13.6457C0 15.2716 6.94667 19 12 19C16.9067 19 17.9 13.6457 20 13.6457C22.1 13.6457 23.0933 19 28 19C33.0533 19 40 15.2716 40 13.6457C40 12.4377 39.4467 4.4455 39.16 1.4484ZM15.3333 11.0078C14.6267 11.6607 12.6667 13.1038 10.2733 12.6467C7.88 12.1896 6.43333 10.0348 5.94 9.20558C5.8732 9.10431 5.84524 8.98311 5.86111 8.86354C5.87698 8.74398 5.93565 8.6338 6.02667 8.55262C6.73333 7.89966 8.69333 6.45662 11.0933 6.91369C13.4933 7.37076 14.9333 9.52553 15.4267 10.3548C15.4927 10.4568 15.5195 10.5785 15.5024 10.6981C15.4853 10.8177 15.4254 10.9274 15.3333 11.0078ZM34.0867 9.19905C33.5933 10.0544 32.1467 12.1831 29.7533 12.6402C27.36 13.0972 25.3867 11.6281 24.6667 11.0078C24.5746 10.9274 24.5147 10.8177 24.4976 10.6981C24.4805 10.5785 24.5073 10.4568 24.5733 10.3548C25.0667 9.49942 26.5133 7.37076 28.9067 6.91369C31.3 6.45662 33.2667 7.92578 33.9667 8.55262C34.0603 8.63013 34.1226 8.73792 34.1422 8.8565C34.1617 8.97507 34.1373 9.09659 34.0733 9.19905H34.0867Z"
871
+ }
872
+ ) });
873
+
874
+ // src/components/base/Avatar/Avatar.tsx
875
+ var import_jsx_runtime10 = require("react/jsx-runtime");
876
+ var NOM_DU_STATUT = {
877
+ online: "En ligne",
878
+ offline: "Hors ligne",
879
+ "sensitive-comment": "Commentaire sensible d\xE9tect\xE9"
880
+ };
881
+ var dejaAverti3 = false;
882
+ var avertirUneFois3 = () => {
883
+ if (dejaAverti3) return;
884
+ dejaAverti3 = true;
885
+ console.warn(
886
+ "[zestds] <Avatar anonymous status=\u2026> : le statut n'est pas rendu sur un avatar anonyme. Un point de pr\xE9sence sur une r\xE9ponse anonymis\xE9e en dirait trop."
887
+ );
888
+ };
889
+ var normaliserEnfantsDuGroupe = (children) => import_react7.Children.toArray(children).flatMap(
890
+ (enfant) => (0, import_react7.isValidElement)(enfant) && enfant.type === import_react7.Fragment ? normaliserEnfantsDuGroupe(enfant.props.children) : [enfant]
891
+ );
892
+ var Avatar = (0, import_react7.forwardRef)(
893
+ ({
894
+ size = "md",
895
+ src,
896
+ alt = "",
897
+ initials,
898
+ anonymous = false,
899
+ border = false,
900
+ status,
901
+ statusLabel,
902
+ className,
903
+ ...rest
904
+ }, ref) => {
905
+ const [photoEnEchec, setPhotoEnEchec] = (0, import_react7.useState)(false);
906
+ (0, import_react7.useEffect)(() => {
907
+ setPhotoEnEchec(false);
908
+ }, [src]);
909
+ const photo = !anonymous && Boolean(src) && !photoEnEchec;
910
+ const lettres = !anonymous && !photo && Boolean(initials);
911
+ const picto = !anonymous && !photo && !lettres;
912
+ const statutRendu = anonymous ? void 0 : status;
913
+ if (anonymous && status) avertirUneFois3();
914
+ const classes = [
915
+ "zds-avatar",
916
+ `zds-avatar--${size}`,
917
+ photo ? "zds-avatar--photo" : "zds-avatar--placeholder",
918
+ border ? "zds-avatar--border" : null,
919
+ className
920
+ ].filter(Boolean).join(" ");
921
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { ref, className: classes, ...rest, children: [
922
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "zds-avatar__media", children: [
923
+ photo ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
924
+ "img",
925
+ {
926
+ className: "zds-avatar__image",
927
+ src,
928
+ alt,
929
+ onError: () => setPhotoEnEchec(true)
930
+ }
931
+ ) : null,
932
+ lettres ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "zds-avatar__initials", children: initials }) : null,
933
+ picto ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "zds-avatar__icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(User01, {}) }) : null,
934
+ anonymous ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "zds-avatar__mask", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AvatarMask, {}) }) : null
935
+ ] }),
936
+ statutRendu ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
937
+ "span",
938
+ {
939
+ className: `zds-avatar__status zds-avatar__status--${statutRendu}`,
940
+ role: "img",
941
+ "aria-label": statusLabel ?? NOM_DU_STATUT[statutRendu],
942
+ children: statutRendu === "sensitive-comment" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(MessageAlertSquare02, {}) : null
943
+ }
944
+ ) : null
945
+ ] });
946
+ }
947
+ );
948
+ Avatar.displayName = "Avatar";
949
+ var AvatarGroup = (0, import_react7.forwardRef)(
950
+ ({ size = "md", max, onAdd, addLabel = "Ajouter une personne", className, children, ...rest }, ref) => {
951
+ const tous = normaliserEnfantsDuGroupe(children);
952
+ const visibles = typeof max === "number" ? tous.slice(0, max) : tous;
953
+ const restants = tous.length - visibles.length;
954
+ const classes = ["zds-avatar-group", `zds-avatar-group--${size}`, className].filter(Boolean).join(" ");
955
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { ref, className: classes, ...rest, children: [
956
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "zds-avatar-group__avatars", children: [
957
+ visibles.map((enfant, i) => (
958
+ /* ⚠️ LA TAILLE EST IMPOSÉE PAR `cloneElement`, ET UNE
959
+ PREMIÈRE VERSION CROYAIT LA POSER EN CSS. Elle mettait
960
+ la classe de taille du groupe sur une enveloppe, en
961
+ pariant que l'avatar en hériterait — sauf que l'avatar
962
+ déclare les mêmes propriétés sur LUI-MÊME, donc sa
963
+ propre classe gagnait et un `lg` glissé dans un groupe
964
+ `xs` restait un `lg`. La promesse était fausse et rien
965
+ ne le disait.
966
+
967
+ Les fragments sont d'abord ouverts récursivement, pour
968
+ que leurs avatars reçoivent bien la taille imposée. */
969
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "zds-avatar-group__slot", children: (0, import_react7.isValidElement)(enfant) ? (0, import_react7.cloneElement)(enfant, { size }) : enfant }, i)
970
+ )),
971
+ restants > 0 ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "zds-avatar-group__slot", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
972
+ Avatar,
973
+ {
974
+ size,
975
+ initials: `+${restants}`,
976
+ "aria-label": `${restants} de plus`,
977
+ role: "img"
978
+ }
979
+ ) }) : null
980
+ ] }),
981
+ onAdd ? (
982
+ /* ⚠️ LA BULLE NATIVE A ÉTÉ RETIRÉE LE 2026-09-10, remplacée
983
+ par le vrai composant. Ce bouton portait un `title`, la
984
+ bulle du NAVIGATEUR : lente à apparaître, non stylée, et
985
+ jamais annoncée au clavier. C'était un provisoire assumé,
986
+ inscrit comme tel dans le tableau du CLAUDE.md, et c'est
987
+ la seconde moitié du travail que ce tableau promet — le
988
+ jour où le composant existe, la doc ET le code livré
989
+ basculent dessus.
990
+
991
+ ⚠️ L'`aria-label` RESTE, ET CE N'EST PAS UN DOUBLON. Une
992
+ info-bulle n'existe qu'au survol : un lecteur d'écran qui
993
+ parcourt la page hors survol ne la rencontre jamais. Un
994
+ bouton à icône seule a donc besoin des deux — le nom pour
995
+ être annoncé, la bulle pour être lu. */
996
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Tooltip, { title: addLabel, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
997
+ "button",
998
+ {
999
+ type: "button",
1000
+ className: `zds-avatar-add zds-avatar-add--${size}`,
1001
+ "aria-label": addLabel,
1002
+ onClick: onAdd,
1003
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Plus, {})
1004
+ }
1005
+ ) })
1006
+ ) : null
1007
+ ] });
1008
+ }
1009
+ );
1010
+ AvatarGroup.displayName = "AvatarGroup";
1011
+ var AvatarLabelGroup = (0, import_react7.forwardRef)(
1012
+ ({ size = "md", name, supportingText, src, initials, anonymous, status, statusLabel, className, ...rest }, ref) => {
1013
+ const classes = ["zds-avatar-label-group", `zds-avatar-label-group--${size}`, className].filter(Boolean).join(" ");
1014
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { ref, className: classes, ...rest, children: [
1015
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1016
+ Avatar,
1017
+ {
1018
+ size,
1019
+ border: true,
1020
+ src,
1021
+ initials,
1022
+ anonymous,
1023
+ status,
1024
+ statusLabel,
1025
+ alt: ""
1026
+ }
1027
+ ),
1028
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "zds-avatar-label-group__text", children: [
1029
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "zds-avatar-label-group__name", children: name }),
1030
+ supportingText ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "zds-avatar-label-group__support", children: supportingText }) : null
1031
+ ] })
1032
+ ] });
1033
+ }
1034
+ );
1035
+ AvatarLabelGroup.displayName = "AvatarLabelGroup";
1036
+
1037
+ // src/components/base/Checkbox/Checkbox.tsx
1038
+ var import_react8 = require("react");
1039
+ var import_jsx_runtime11 = require("react/jsx-runtime");
1040
+ var Controle = ({
1041
+ type,
1042
+ size,
1043
+ label,
1044
+ hint,
1045
+ className,
1046
+ marque,
1047
+ reference,
1048
+ id: idFourni,
1049
+ "aria-describedby": decritParFourni,
1050
+ ...rest
1051
+ }) => {
1052
+ const auto = (0, import_react8.useId)();
1053
+ const id = idFourni ?? `zds-${type}-${auto}`;
1054
+ const idAide = `${id}-aide`;
1055
+ const classes = [
1056
+ "zds-checkbox",
1057
+ `zds-checkbox--${size ?? "sm"}`,
1058
+ `zds-checkbox--${type}`,
1059
+ className
1060
+ ].filter(Boolean).join(" ");
1061
+ const decritPar = [decritParFourni, hint ? idAide : null].filter(Boolean).join(" ") || void 0;
1062
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: classes, children: [
1063
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { className: "zds-checkbox__controle", children: [
1064
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1065
+ "input",
1066
+ {
1067
+ ref: reference,
1068
+ id,
1069
+ type,
1070
+ className: "zds-checkbox__entree",
1071
+ "aria-describedby": decritPar,
1072
+ ...rest
1073
+ }
1074
+ ),
1075
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "zds-checkbox__marque", "aria-hidden": "true", children: marque })
1076
+ ] }),
1077
+ label || hint ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { className: "zds-checkbox__textes", children: [
1078
+ label ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("label", { className: "zds-checkbox__libelle", htmlFor: id, children: label }) : null,
1079
+ hint ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "zds-checkbox__aide", id: idAide, children: hint }) : null
1080
+ ] }) : null
1081
+ ] });
1082
+ };
1083
+ var Checkbox = (0, import_react8.forwardRef)(
1084
+ ({ indeterminate = false, ...rest }, ref) => {
1085
+ const interne = (0, import_react8.useRef)(null);
1086
+ (0, import_react8.useEffect)(() => {
1087
+ if (interne.current) interne.current.indeterminate = indeterminate;
1088
+ });
1089
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1090
+ Controle,
1091
+ {
1092
+ ...rest,
1093
+ type: "checkbox",
1094
+ marque: indeterminate ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Minus, {}) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Check, {}),
1095
+ reference: (noeud) => {
1096
+ interne.current = noeud;
1097
+ if (typeof ref === "function") ref(noeud);
1098
+ else if (ref) ref.current = noeud;
1099
+ }
1100
+ }
1101
+ );
1102
+ }
1103
+ );
1104
+ Checkbox.displayName = "Checkbox";
1105
+ var Radio = (0, import_react8.forwardRef)((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Controle, { ...props, type: "radio", marque: null, reference: ref }));
1106
+ Radio.displayName = "Radio";
1107
+
1108
+ // src/components/base/Toggle/Toggle.tsx
1109
+ var import_react9 = require("react");
1110
+ var import_jsx_runtime12 = require("react/jsx-runtime");
1111
+ var Toggle = (0, import_react9.forwardRef)(
1112
+ ({
1113
+ size = "sm",
1114
+ type = "default",
1115
+ label,
1116
+ hint,
1117
+ className,
1118
+ id: idFourni,
1119
+ "aria-describedby": decritParFourni,
1120
+ ...rest
1121
+ }, ref) => {
1122
+ const auto = (0, import_react9.useId)();
1123
+ const id = idFourni ?? `zds-toggle-${auto}`;
1124
+ const idAide = `${id}-aide`;
1125
+ const classes = ["zds-toggle", `zds-toggle--${size}`, `zds-toggle--${type}`, className].filter(Boolean).join(" ");
1126
+ const decritPar = [decritParFourni, hint ? idAide : null].filter(Boolean).join(" ") || void 0;
1127
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: classes, children: [
1128
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "zds-toggle__controle", children: [
1129
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1130
+ "input",
1131
+ {
1132
+ ref,
1133
+ id,
1134
+ type: "checkbox",
1135
+ role: "switch",
1136
+ className: "zds-toggle__piste",
1137
+ "aria-describedby": decritPar,
1138
+ ...rest
1139
+ }
1140
+ ),
1141
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "zds-toggle__bouton", "aria-hidden": "true" })
1142
+ ] }),
1143
+ label || hint ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { className: "zds-toggle__textes", children: [
1144
+ label ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("label", { className: "zds-toggle__libelle", htmlFor: id, children: label }) : null,
1145
+ hint ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "zds-toggle__aide", id: idAide, children: hint }) : null
1146
+ ] }) : null
1147
+ ] });
1148
+ }
1149
+ );
1150
+ Toggle.displayName = "Toggle";
1151
+
476
1152
  // src/components/foundations/file-icons/catalogue.ts
477
1153
  var ZEST_FILE_ICONS = [
478
1154
  {
@@ -746,14 +1422,15 @@ var ZEST_FILE_ICONS = [
746
1422
  }
747
1423
  }
748
1424
  ];
749
- var findFileIcon = (name) => ZEST_FILE_ICONS.find((i) => i.name === name);
1425
+ var ZEST_FILE_ICON_BY_NAME = new Map(ZEST_FILE_ICONS.map((icon) => [icon.name, icon]));
1426
+ var findFileIcon = (name) => ZEST_FILE_ICON_BY_NAME.get(name);
750
1427
 
751
1428
  // src/components/foundations/file-icons/index.tsx
752
- var import_jsx_runtime2 = require("react/jsx-runtime");
1429
+ var import_jsx_runtime13 = require("react/jsx-runtime");
753
1430
  var FileIcon = ({ name, variant = "default", size = 40, ...props }) => {
754
1431
  const entree = findFileIcon(name);
755
1432
  if (!entree) return null;
756
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
1433
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
757
1434
  "svg",
758
1435
  {
759
1436
  width: size,
@@ -825,8 +1502,8 @@ var ZEST_LOGO = {
825
1502
  };
826
1503
 
827
1504
  // src/components/foundations/logo/index.tsx
828
- var import_jsx_runtime3 = require("react/jsx-runtime");
829
- var rendre = (contenu, boite, { height, titre, style, ...props }, debord = false) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1505
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1506
+ var rendre = (contenu, boite, { height, titre, style, ...props }, debord = false) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
830
1507
  "svg",
831
1508
  {
832
1509
  height,
@@ -866,17 +1543,24 @@ ZestAiLogo.displayName = "ZestAiLogo";
866
1543
  ArrowNarrowUpLeft,
867
1544
  ArrowNarrowUpRight,
868
1545
  ArrowRight,
1546
+ Avatar,
1547
+ AvatarGroup,
1548
+ AvatarLabelGroup,
1549
+ AvatarMask,
1550
+ Badge,
869
1551
  BarChartSquare02,
870
1552
  Bell01,
871
1553
  BellOff01,
872
1554
  Bookmark01,
873
1555
  Building07,
1556
+ Button,
874
1557
  Calendar,
875
1558
  CalendarPlus01,
876
1559
  Check,
877
1560
  CheckCircle01,
878
1561
  CheckCircle02,
879
1562
  CheckDone01,
1563
+ Checkbox,
880
1564
  ChevronDown,
881
1565
  ChevronDownDouble,
882
1566
  ChevronLeft,
@@ -887,6 +1571,8 @@ ZestAiLogo.displayName = "ZestAiLogo";
887
1571
  ChevronUpDouble,
888
1572
  Circle,
889
1573
  Clock,
1574
+ CloseButton,
1575
+ DEBORD_FLECHE,
890
1576
  DotsVertical,
891
1577
  Download01,
892
1578
  Edit01,
@@ -943,15 +1629,18 @@ ZestAiLogo.displayName = "ZestAiLogo";
943
1629
  FilterFunnel01,
944
1630
  FilterFunnel02,
945
1631
  Flag01,
1632
+ HAUTEUR_FLECHE,
946
1633
  Heart01,
947
1634
  Heart02,
948
1635
  HelpCircle01,
949
1636
  HelpCircle02,
1637
+ HelpTooltip,
950
1638
  Home01,
951
1639
  Home02,
952
1640
  Inbox01,
953
1641
  InfoCircle01,
954
1642
  InfoCircle02,
1643
+ LARGEUR_FLECHE,
955
1644
  LOGO_BOITES,
956
1645
  LOGO_ECART,
957
1646
  Link01,
@@ -964,6 +1653,8 @@ ZestAiLogo.displayName = "ZestAiLogo";
964
1653
  Mail01,
965
1654
  Mail02,
966
1655
  Menu01,
1656
+ MessageAlertSquare01,
1657
+ MessageAlertSquare02,
967
1658
  MessageBubble01,
968
1659
  MessageBubble02,
969
1660
  MessageChatSquare,
@@ -976,6 +1667,7 @@ ZestAiLogo.displayName = "ZestAiLogo";
976
1667
  Plus,
977
1668
  PlusCircle01,
978
1669
  PlusCircle02,
1670
+ Radio,
979
1671
  RefreshCw01,
980
1672
  STYLES_A_REVOIR,
981
1673
  Search01,
@@ -988,17 +1680,22 @@ ZestAiLogo.displayName = "ZestAiLogo";
988
1680
  SlashCircle01,
989
1681
  SlashDivider,
990
1682
  SmartOrg,
1683
+ Spinner,
991
1684
  Star01,
992
1685
  Target05,
993
1686
  ThumbsDown,
994
1687
  ThumbsUp,
995
1688
  Tick,
1689
+ Toggle,
996
1690
  Tool01,
1691
+ Tooltip,
1692
+ TooltipArrow,
997
1693
  Trash01,
998
1694
  Trash02,
999
1695
  Upload01,
1000
1696
  User01,
1001
1697
  Users01,
1698
+ UtilityButton,
1002
1699
  XCircle,
1003
1700
  XClose,
1004
1701
  ZEST_FILE_ICONS,