design-zystem 1.0.415 → 1.0.417

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/ui/index.js CHANGED
@@ -173,6 +173,7 @@ __export(index_exports, {
173
173
  TagSelect: () => TagSelect,
174
174
  Text: () => Text,
175
175
  Textarea: () => Textarea,
176
+ Tile: () => Tile,
176
177
  Timeline: () => Timeline,
177
178
  Toaster: () => Toaster,
178
179
  Tooltip: () => Tooltip,
@@ -532,6 +533,7 @@ var Box = (0, import_react2.forwardRef)(
532
533
  hasShadow,
533
534
  accent = "none",
534
535
  width,
536
+ hexBackground,
535
537
  className,
536
538
  style
537
539
  } = _b, props = __objRest(_b, [
@@ -540,6 +542,7 @@ var Box = (0, import_react2.forwardRef)(
540
542
  "hasShadow",
541
543
  "accent",
542
544
  "width",
545
+ "hexBackground",
543
546
  "className",
544
547
  "style"
545
548
  ]);
@@ -552,7 +555,7 @@ var Box = (0, import_react2.forwardRef)(
552
555
  ACCENT_CLASS[accent],
553
556
  className
554
557
  ),
555
- style: width ? __spreadValues({ width }, style) : style
558
+ style: __spreadValues(__spreadValues(__spreadValues({}, width && { width }), hexBackground && { backgroundColor: hexBackground }), style)
556
559
  }, props)
557
560
  );
558
561
  }
@@ -1993,7 +1996,9 @@ var badgeVariants = (0, import_class_variance_authority10.cva)(
1993
1996
  variants: {
1994
1997
  size: {
1995
1998
  s: "px-1 py-0.5 text-[9px]",
1996
- m: "px-1.5 py-0.5 text-[11px]"
1999
+ m: "px-1.5 py-0.5 text-[11px]",
2000
+ /** Case de tableau : pastille de hauteur fixe, largeur minimale commune. */
2001
+ l: "h-[26px] min-w-[74px] gap-1.5 px-3 text-[11px] font-bold"
1997
2002
  },
1998
2003
  shape: {
1999
2004
  square: "rounded-[0.35em]",
@@ -2013,6 +2018,7 @@ var Badge = (0, import_react18.forwardRef)(
2013
2018
  theme = "blue-700",
2014
2019
  backgroundColor,
2015
2020
  textColor,
2021
+ borderColor,
2016
2022
  size,
2017
2023
  shape,
2018
2024
  pointer = false,
@@ -2027,6 +2033,7 @@ var Badge = (0, import_react18.forwardRef)(
2027
2033
  "theme",
2028
2034
  "backgroundColor",
2029
2035
  "textColor",
2036
+ "borderColor",
2030
2037
  "size",
2031
2038
  "shape",
2032
2039
  "pointer",
@@ -2046,13 +2053,15 @@ var Badge = (0, import_react18.forwardRef)(
2046
2053
  badgeVariants({ size, shape }),
2047
2054
  !backgroundColor && THEME_VARIANT_CLASSES[variant][theme],
2048
2055
  fullWidth && "w-full",
2056
+ borderColor && "border",
2049
2057
  pointer && "cursor-pointer",
2050
2058
  pulse && "animate-[badge-pulse_2s_ease-in-out_infinite] motion-reduce:animate-none",
2051
2059
  className
2052
2060
  ),
2053
2061
  style: __spreadValues(__spreadValues({
2054
2062
  backgroundColor,
2055
- color: textColor
2063
+ color: textColor,
2064
+ borderColor
2056
2065
  }, maxChars ? { maxWidth: `${maxChars}ch` } : {}), style)
2057
2066
  }, props)
2058
2067
  );
@@ -2070,6 +2079,7 @@ var Tabs = ({
2070
2079
  items,
2071
2080
  variant = "line",
2072
2081
  fullWidth = false,
2082
+ uppercase = false,
2073
2083
  className
2074
2084
  }) => {
2075
2085
  const listRef = (0, import_react19.useRef)(null);
@@ -2122,6 +2132,7 @@ var Tabs = ({
2122
2132
  "relative inline-flex select-none items-center justify-center gap-1.5 whitespace-nowrap border-0 text-center outline-none transition-colors",
2123
2133
  "disabled:cursor-not-allowed disabled:opacity-60",
2124
2134
  fullWidth && "flex-1",
2135
+ uppercase && "uppercase tracking-[0.01em]",
2125
2136
  isPills ? cn(
2126
2137
  "rounded-md px-4 py-2 text-sm",
2127
2138
  value === item.id ? "bg-white font-bold text-neutral-800" : "bg-transparent font-medium text-neutral-800"
@@ -4093,6 +4104,7 @@ var trackVariants2 = (0, import_class_variance_authority12.cva)(
4093
4104
  {
4094
4105
  variants: {
4095
4106
  height: {
4107
+ xs: "h-1",
4096
4108
  sm: "h-1.5",
4097
4109
  md: "h-2",
4098
4110
  lg: "h-3",
@@ -4133,15 +4145,18 @@ var THUMB_BORDER_CLASS = {
4133
4145
  "purple-700": "border-purple-700"
4134
4146
  };
4135
4147
  var ProgressBar = ({
4136
- value,
4148
+ value = 0,
4137
4149
  onChange,
4138
4150
  min = 0,
4139
4151
  max = 100,
4140
4152
  step = 1,
4141
4153
  disabled = false,
4142
4154
  color = "blue-700",
4155
+ hexColor,
4156
+ segments,
4143
4157
  height,
4144
4158
  label,
4159
+ "aria-label": ariaLabel,
4145
4160
  showLabel = false,
4146
4161
  formatValue,
4147
4162
  className
@@ -4150,6 +4165,32 @@ var ProgressBar = ({
4150
4165
  const percent = max !== min ? (current - min) / (max - min) * 100 : 0;
4151
4166
  const display = (v) => formatValue ? formatValue(v) : String(v);
4152
4167
  const editable = Boolean(onChange);
4168
+ if (segments) {
4169
+ const visible = segments.filter((segment) => segment.value > 0);
4170
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Layout, { column: true, fullWidth: true, gap: 1, className, children: [
4171
+ label && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "text-xs text-grey-600", children: label }),
4172
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4173
+ "div",
4174
+ {
4175
+ role: "img",
4176
+ "aria-label": ariaLabel != null ? ariaLabel : label,
4177
+ className: cn(trackVariants2({ height }), "flex gap-0.5"),
4178
+ children: visible.map((segment, index) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4179
+ "span",
4180
+ {
4181
+ className: "h-full",
4182
+ style: {
4183
+ flexGrow: segment.value,
4184
+ flexBasis: 0,
4185
+ backgroundColor: segment.hexColor
4186
+ }
4187
+ },
4188
+ index
4189
+ ))
4190
+ }
4191
+ )
4192
+ ] });
4193
+ }
4153
4194
  if (!editable) {
4154
4195
  const readOnlyPercent = Math.max(0, Math.min(100, percent));
4155
4196
  return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Layout, { column: true, fullWidth: true, gap: 1, className, children: [
@@ -4159,15 +4200,19 @@ var ProgressBar = ({
4159
4200
  RadixProgress.Root,
4160
4201
  {
4161
4202
  value: readOnlyPercent,
4203
+ "aria-label": ariaLabel != null ? ariaLabel : label,
4162
4204
  className: trackVariants2({ height }),
4163
4205
  children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4164
4206
  RadixProgress.Indicator,
4165
4207
  {
4166
4208
  className: cn(
4167
4209
  "h-full rounded-full transition-[width] duration-200",
4168
- FILL_CLASS[color]
4210
+ !hexColor && FILL_CLASS[color]
4169
4211
  ),
4170
- style: { width: `${readOnlyPercent}%` }
4212
+ style: {
4213
+ width: `${readOnlyPercent}%`,
4214
+ backgroundColor: hexColor
4215
+ }
4171
4216
  }
4172
4217
  )
4173
4218
  }
@@ -4208,7 +4253,11 @@ var ProgressBar = ({
4208
4253
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(RadixSlider.Track, { className: cn(trackVariants2({ height }), "grow"), children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4209
4254
  RadixSlider.Range,
4210
4255
  {
4211
- className: cn("absolute h-full rounded-full", FILL_CLASS[color])
4256
+ className: cn(
4257
+ "absolute h-full rounded-full",
4258
+ !hexColor && FILL_CLASS[color]
4259
+ ),
4260
+ style: { backgroundColor: hexColor }
4212
4261
  }
4213
4262
  ) }),
4214
4263
  /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
@@ -4217,8 +4266,9 @@ var ProgressBar = ({
4217
4266
  className: cn(
4218
4267
  "block h-5 w-5 rounded-full border-2 bg-white shadow-[0_2px_6px_rgba(15,23,42,0.2)] outline-none transition-transform",
4219
4268
  "hover:scale-110 focus-visible:ring-2 focus-visible:ring-blue-200",
4220
- THUMB_BORDER_CLASS[color]
4221
- )
4269
+ !hexColor && THUMB_BORDER_CLASS[color]
4270
+ ),
4271
+ style: { borderColor: hexColor }
4222
4272
  }
4223
4273
  )
4224
4274
  ]
@@ -6008,8 +6058,49 @@ var MetricCard = ({
6008
6058
  }
6009
6059
  );
6010
6060
 
6011
- // src/ui/components/ui/Skeleton.tsx
6061
+ // src/ui/components/ui/Tile.tsx
6012
6062
  var import_jsx_runtime72 = require("react/jsx-runtime");
6063
+ var Tile = ({
6064
+ children,
6065
+ onClick,
6066
+ selected = false,
6067
+ variant = "outline",
6068
+ expandedContent,
6069
+ className
6070
+ }) => {
6071
+ const isOutline = variant === "outline";
6072
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(
6073
+ "div",
6074
+ {
6075
+ className: cn(
6076
+ "w-full overflow-hidden rounded-[6px]",
6077
+ isOutline && "border bg-white",
6078
+ isOutline && (selected ? "border-blue-700 ring-1 ring-blue-700" : "border-grey-200"),
6079
+ !isOutline && selected && "bg-blue-50",
6080
+ className
6081
+ ),
6082
+ children: [
6083
+ onClick ? /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
6084
+ "button",
6085
+ {
6086
+ type: "button",
6087
+ "aria-pressed": selected,
6088
+ onClick,
6089
+ className: cn(
6090
+ "block w-full cursor-pointer border-0 bg-transparent p-0 text-left outline-none transition-colors",
6091
+ "hover:bg-black/[0.025] focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-blue-200"
6092
+ ),
6093
+ children
6094
+ }
6095
+ ) : children,
6096
+ expandedContent && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("div", { className: cn(isOutline && "border-t border-grey-300"), children: expandedContent })
6097
+ ]
6098
+ }
6099
+ );
6100
+ };
6101
+
6102
+ // src/ui/components/ui/Skeleton.tsx
6103
+ var import_jsx_runtime73 = require("react/jsx-runtime");
6013
6104
  var toCss = (value) => typeof value === "number" ? `${value}px` : value;
6014
6105
  var Skeleton = (_a) => {
6015
6106
  var _b = _a, {
@@ -6025,7 +6116,7 @@ var Skeleton = (_a) => {
6025
6116
  "className",
6026
6117
  "style"
6027
6118
  ]);
6028
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
6119
+ return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6029
6120
  "div",
6030
6121
  __spreadValues({
6031
6122
  className: cn(
@@ -6040,7 +6131,7 @@ var Skeleton = (_a) => {
6040
6131
 
6041
6132
  // src/ui/components/ui/TagBubble.tsx
6042
6133
  var RadixToggle = __toESM(require("@radix-ui/react-toggle"));
6043
- var import_jsx_runtime73 = require("react/jsx-runtime");
6134
+ var import_jsx_runtime74 = require("react/jsx-runtime");
6044
6135
  var DOT_CLASS = {
6045
6136
  "blue-700": "bg-blue-700",
6046
6137
  "blue-900": "bg-blue-900",
@@ -6132,7 +6223,7 @@ var TagBubble = (_a) => {
6132
6223
  const filled = activeFill && active;
6133
6224
  const dotColor = active ? activeColor : inactiveColor;
6134
6225
  const filledHexColor = filled && isHexColor(activeColor) ? activeColor : void 0;
6135
- return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(
6226
+ return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(
6136
6227
  RadixToggle.Root,
6137
6228
  __spreadProps(__spreadValues({}, rest), {
6138
6229
  type: "button",
@@ -6150,7 +6241,7 @@ var TagBubble = (_a) => {
6150
6241
  className
6151
6242
  ),
6152
6243
  children: [
6153
- !hideDot && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6244
+ !hideDot && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6154
6245
  "span",
6155
6246
  {
6156
6247
  className: cn(
@@ -6160,7 +6251,7 @@ var TagBubble = (_a) => {
6160
6251
  style: isHexColor(dotColor) ? { backgroundColor: dotColor } : void 0
6161
6252
  }
6162
6253
  ),
6163
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6254
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6164
6255
  "span",
6165
6256
  {
6166
6257
  className: cn(
@@ -6171,7 +6262,7 @@ var TagBubble = (_a) => {
6171
6262
  children: label
6172
6263
  }
6173
6264
  ),
6174
- showCount && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Badge, { theme: countColor, size: "s", children: count })
6265
+ showCount && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Badge, { theme: countColor, size: "s", children: count })
6175
6266
  ]
6176
6267
  })
6177
6268
  );
@@ -6318,16 +6409,16 @@ var formatName = (person, fallback = "") => {
6318
6409
  };
6319
6410
 
6320
6411
  // src/ui/components/ui/history/HistoryChangeRow.tsx
6321
- var import_jsx_runtime74 = require("react/jsx-runtime");
6412
+ var import_jsx_runtime75 = require("react/jsx-runtime");
6322
6413
  var HistoryChangeRow = ({ change }) => {
6323
6414
  const { label, previousValue, nextValue, href, onClick } = change;
6324
6415
  const hasValues = Boolean(previousValue || nextValue);
6325
- return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(Layout, { align: "center", gap: 1.5, wrap: true, children: [
6326
- /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Text, { size: "xs", weight: "semibold", color: "grey-600", children: hasValues ? `${label} :` : label }),
6327
- previousValue && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Text, { size: "xs", color: "grey-600", children: previousValue }),
6328
- previousValue && nextValue && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Icon, { name: "arrow-right", size: "xs", color: "grey-500" }),
6329
- nextValue && href && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Link, { href, newTab: true, size: "xs", children: nextValue }),
6330
- nextValue && onClick && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6416
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(Layout, { align: "center", gap: 1.5, wrap: true, children: [
6417
+ /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Text, { size: "xs", weight: "semibold", color: "grey-600", children: hasValues ? `${label} :` : label }),
6418
+ previousValue && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Text, { size: "xs", color: "grey-600", children: previousValue }),
6419
+ previousValue && nextValue && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Icon, { name: "arrow-right", size: "xs", color: "grey-500" }),
6420
+ nextValue && href && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Link, { href, newTab: true, size: "xs", children: nextValue }),
6421
+ nextValue && onClick && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6331
6422
  "button",
6332
6423
  {
6333
6424
  type: "button",
@@ -6339,27 +6430,27 @@ var HistoryChangeRow = ({ change }) => {
6339
6430
  children: nextValue
6340
6431
  }
6341
6432
  ),
6342
- nextValue && !href && !onClick && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Text, { size: "xs", weight: "semibold", children: nextValue })
6433
+ nextValue && !href && !onClick && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Text, { size: "xs", weight: "semibold", children: nextValue })
6343
6434
  ] });
6344
6435
  };
6345
6436
 
6346
6437
  // src/ui/components/ui/history/HistoryEntryCard.tsx
6347
- var import_jsx_runtime75 = require("react/jsx-runtime");
6438
+ var import_jsx_runtime76 = require("react/jsx-runtime");
6348
6439
  var CARD_CLASS = "group rounded-lg border border-grey-300 bg-white";
6349
6440
  var HistoryEntryCard = ({ entry }) => {
6350
6441
  const { title, date, author, badge, changes = [] } = entry;
6351
6442
  const hasChanges = changes.length > 0;
6352
- const summary = /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(Layout, { column: true, gap: 1, fullWidth: true, children: [
6353
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(Layout, { align: "center", justify: "between", gap: 2, fullWidth: true, children: [
6354
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(Layout, { align: "center", gap: 3, fullWidth: false, className: "min-w-0", children: [
6355
- author && /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(import_jsx_runtime75.Fragment, { children: [
6356
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Avatar, { name: author.name, src: author.avatarSrc, size: 40 }),
6357
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Text, { size: "xs", weight: "bold", className: "whitespace-nowrap", children: author.name })
6443
+ const summary = /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(Layout, { column: true, gap: 1, fullWidth: true, children: [
6444
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(Layout, { align: "center", justify: "between", gap: 2, fullWidth: true, children: [
6445
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(Layout, { align: "center", gap: 3, fullWidth: false, className: "min-w-0", children: [
6446
+ author && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment, { children: [
6447
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Avatar, { name: author.name, src: author.avatarSrc, size: 40 }),
6448
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Text, { size: "xs", weight: "bold", className: "whitespace-nowrap", children: author.name })
6358
6449
  ] }),
6359
- badge && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Badge, { theme: badge.theme, size: "s", children: badge.label })
6450
+ badge && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Badge, { theme: badge.theme, size: "s", children: badge.label })
6360
6451
  ] }),
6361
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(Layout, { align: "center", gap: 2, fullWidth: false, className: "shrink-0", children: [
6362
- date && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6452
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(Layout, { align: "center", gap: 2, fullWidth: false, className: "shrink-0", children: [
6453
+ date && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6363
6454
  Text,
6364
6455
  {
6365
6456
  size: "xxs",
@@ -6369,7 +6460,7 @@ var HistoryEntryCard = ({ entry }) => {
6369
6460
  children: formatDate(date, "dateTime", "fr")
6370
6461
  }
6371
6462
  ),
6372
- hasChanges && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6463
+ hasChanges && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6373
6464
  Icon,
6374
6465
  {
6375
6466
  name: "chevron-down",
@@ -6380,14 +6471,14 @@ var HistoryEntryCard = ({ entry }) => {
6380
6471
  )
6381
6472
  ] })
6382
6473
  ] }),
6383
- title && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Text, { size: "xs", className: author ? "pl-[52px]" : void 0, children: title })
6474
+ title && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Text, { size: "xs", className: author ? "pl-[52px]" : void 0, children: title })
6384
6475
  ] });
6385
6476
  if (!hasChanges) {
6386
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: `${CARD_CLASS} p-3`, children: summary });
6477
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: `${CARD_CLASS} p-3`, children: summary });
6387
6478
  }
6388
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(Collapsible, { className: CARD_CLASS, children: [
6389
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(CollapsibleTrigger, { className: "w-full cursor-pointer p-3 text-left outline-none focus-visible:ring-2 focus-visible:ring-blue-200", children: summary }),
6390
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(CollapsibleContent, { children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6479
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(Collapsible, { className: CARD_CLASS, children: [
6480
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(CollapsibleTrigger, { className: "w-full cursor-pointer p-3 text-left outline-none focus-visible:ring-2 focus-visible:ring-blue-200", children: summary }),
6481
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(CollapsibleContent, { children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6391
6482
  Layout,
6392
6483
  {
6393
6484
  column: true,
@@ -6395,7 +6486,7 @@ var HistoryEntryCard = ({ entry }) => {
6395
6486
  paddingX: 3,
6396
6487
  paddingBottom: 3,
6397
6488
  className: author ? "pl-[64px]" : void 0,
6398
- children: changes.map((change, index) => /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6489
+ children: changes.map((change, index) => /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6399
6490
  HistoryChangeRow,
6400
6491
  {
6401
6492
  change
@@ -6408,7 +6499,7 @@ var HistoryEntryCard = ({ entry }) => {
6408
6499
  };
6409
6500
 
6410
6501
  // src/ui/components/ui/history/HistoryList.tsx
6411
- var import_jsx_runtime76 = require("react/jsx-runtime");
6502
+ var import_jsx_runtime77 = require("react/jsx-runtime");
6412
6503
  var SKELETON_COUNT = 4;
6413
6504
  var HistoryList = ({
6414
6505
  entries,
@@ -6420,8 +6511,8 @@ var HistoryList = ({
6420
6511
  emptyLabel = "Aucun historique",
6421
6512
  emptyDescription = "Aucune action enregistr\xE9e pour le moment.",
6422
6513
  notice
6423
- }) => /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(Layout, { column: true, gap: 2, fullWidth: true, className: "flex-1", children: [
6424
- filters.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Layout, { gap: 2, wrap: true, fullWidth: true, justify: "center", children: filters.map((filter) => /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6514
+ }) => /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(Layout, { column: true, gap: 2, fullWidth: true, className: "flex-1", children: [
6515
+ filters.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Layout, { gap: 2, wrap: true, fullWidth: true, justify: "center", children: filters.map((filter) => /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
6425
6516
  TagBubble,
6426
6517
  {
6427
6518
  label: filter.label,
@@ -6432,22 +6523,22 @@ var HistoryList = ({
6432
6523
  },
6433
6524
  filter.value
6434
6525
  )) }),
6435
- isLoading && Array.from({ length: SKELETON_COUNT }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Skeleton, { height: "72px" }, index)),
6436
- !isLoading && isError && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Text, { size: "s", color: "red-900", align: "center", children: errorLabel }),
6437
- !isLoading && !isError && entries.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6526
+ isLoading && Array.from({ length: SKELETON_COUNT }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Skeleton, { height: "72px" }, index)),
6527
+ !isLoading && isError && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Text, { size: "s", color: "red-900", align: "center", children: errorLabel }),
6528
+ !isLoading && !isError && entries.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
6438
6529
  EmptyState,
6439
6530
  {
6440
- icon: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(FaIcon, { name: "clock-rotate-left", size: 20 }),
6531
+ icon: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(FaIcon, { name: "clock-rotate-left", size: 20 }),
6441
6532
  title: emptyLabel,
6442
6533
  description: emptyDescription
6443
6534
  }
6444
6535
  ),
6445
- !isLoading && !isError && entries.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(HistoryEntryCard, { entry }, entry.id)),
6446
- !isLoading && !isError && notice && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Text, { size: "xs", color: "grey-600", align: "center", children: notice })
6536
+ !isLoading && !isError && entries.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(HistoryEntryCard, { entry }, entry.id)),
6537
+ !isLoading && !isError && notice && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Text, { size: "xs", color: "grey-600", align: "center", children: notice })
6447
6538
  ] });
6448
6539
 
6449
6540
  // src/ui/components/ui/history/HistoryDrawer.tsx
6450
- var import_jsx_runtime77 = require("react/jsx-runtime");
6541
+ var import_jsx_runtime78 = require("react/jsx-runtime");
6451
6542
  var HistoryDrawer = (_a) => {
6452
6543
  var _b = _a, {
6453
6544
  open,
@@ -6458,7 +6549,7 @@ var HistoryDrawer = (_a) => {
6458
6549
  "onClose",
6459
6550
  "title"
6460
6551
  ]);
6461
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(
6552
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
6462
6553
  Drawer,
6463
6554
  {
6464
6555
  open,
@@ -6466,9 +6557,9 @@ var HistoryDrawer = (_a) => {
6466
6557
  className: "z-[1060]",
6467
6558
  overlayClassName: "z-[1050]",
6468
6559
  children: [
6469
- /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(DrawerHeader, { children: [
6470
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(DrawerTitle, { className: "uppercase", children: title }),
6471
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(DrawerClose, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
6560
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(DrawerHeader, { children: [
6561
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(DrawerTitle, { className: "uppercase", children: title }),
6562
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(DrawerClose, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
6472
6563
  Icon,
6473
6564
  {
6474
6565
  name: "xmark",
@@ -6478,7 +6569,7 @@ var HistoryDrawer = (_a) => {
6478
6569
  }
6479
6570
  ) })
6480
6571
  ] }),
6481
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(DrawerBody, { className: "flex flex-col", children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(HistoryList, __spreadValues({}, listProps)) })
6572
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(DrawerBody, { className: "flex flex-col", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(HistoryList, __spreadValues({}, listProps)) })
6482
6573
  ]
6483
6574
  }
6484
6575
  );
@@ -6486,7 +6577,7 @@ var HistoryDrawer = (_a) => {
6486
6577
 
6487
6578
  // src/ui/components/ui/history/HistoryButton.tsx
6488
6579
  var import_react46 = require("react");
6489
- var import_jsx_runtime78 = require("react/jsx-runtime");
6580
+ var import_jsx_runtime79 = require("react/jsx-runtime");
6490
6581
  var LABEL = "Historique";
6491
6582
  var SHORT_TOOLTIP = "Voir l\u2019historique des actions";
6492
6583
  var HistoryButton = (_a) => {
@@ -6507,10 +6598,10 @@ var HistoryButton = (_a) => {
6507
6598
  onOpenChange == null ? void 0 : onOpenChange(nextIsOpen);
6508
6599
  };
6509
6600
  const open = () => changeOpen(true);
6510
- const icon = /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(FaIcon, { name: "clock-rotate-left", size: 14 });
6511
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment, { children: [
6512
- variant === "icon" ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Tooltip, { content: tooltip, className: "z-[1100]", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Button, { iconLeft: icon, "aria-label": LABEL, onClick: open }) }) : /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Button, { label: LABEL, iconLeft: icon, onClick: open }),
6513
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
6601
+ const icon = /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(FaIcon, { name: "clock-rotate-left", size: 14 });
6602
+ return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(import_jsx_runtime79.Fragment, { children: [
6603
+ variant === "icon" ? /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Tooltip, { content: tooltip, className: "z-[1100]", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Button, { iconLeft: icon, "aria-label": LABEL, onClick: open }) }) : /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Button, { label: LABEL, iconLeft: icon, onClick: open }),
6604
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
6514
6605
  HistoryDrawer,
6515
6606
  __spreadValues({
6516
6607
  open: isOpen,
@@ -6522,7 +6613,7 @@ var HistoryButton = (_a) => {
6522
6613
  };
6523
6614
 
6524
6615
  // src/ui/components/ui/Gantt.tsx
6525
- var import_jsx_runtime79 = require("react/jsx-runtime");
6616
+ var import_jsx_runtime80 = require("react/jsx-runtime");
6526
6617
  var Gantt = ({
6527
6618
  days,
6528
6619
  rows,
@@ -6538,7 +6629,7 @@ var Gantt = ({
6538
6629
  const bodyHeight = rows.length * rowHeight;
6539
6630
  const clickable = Boolean(onRowClick);
6540
6631
  const gridCols = { gridTemplateColumns: `${labelWidth}px minmax(0, 1fr)` };
6541
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
6632
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
6542
6633
  "div",
6543
6634
  {
6544
6635
  className: cn(
@@ -6546,13 +6637,13 @@ var Gantt = ({
6546
6637
  className
6547
6638
  ),
6548
6639
  children: [
6549
- /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
6640
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
6550
6641
  "div",
6551
6642
  {
6552
6643
  className: "grid border-b border-grey-300 bg-grey-100",
6553
6644
  style: gridCols,
6554
6645
  children: [
6555
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
6646
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
6556
6647
  Layout,
6557
6648
  {
6558
6649
  align: "center",
@@ -6560,7 +6651,7 @@ var Gantt = ({
6560
6651
  children: labelHeader
6561
6652
  }
6562
6653
  ),
6563
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "relative h-[30px]", children: days.map((day) => /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
6654
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "relative h-[30px]", children: days.map((day) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
6564
6655
  Layout,
6565
6656
  {
6566
6657
  fullHeight: true,
@@ -6574,13 +6665,13 @@ var Gantt = ({
6574
6665
  ]
6575
6666
  }
6576
6667
  ),
6577
- /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
6668
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
6578
6669
  "div",
6579
6670
  {
6580
6671
  className: "grid overflow-y-auto overflow-x-hidden",
6581
6672
  style: __spreadProps(__spreadValues({}, gridCols), { maxHeight }),
6582
6673
  children: [
6583
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "min-w-0 border-r border-grey-300", children: rows.map((row, i) => /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
6674
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "min-w-0 border-r border-grey-300", children: rows.map((row, i) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
6584
6675
  Layout,
6585
6676
  {
6586
6677
  column: true,
@@ -6597,8 +6688,8 @@ var Gantt = ({
6597
6688
  },
6598
6689
  row.key
6599
6690
  )) }),
6600
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "min-w-0 overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "relative w-full", style: { height: bodyHeight }, children: [
6601
- days.map((day, i) => /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
6691
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "min-w-0 overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "relative w-full", style: { height: bodyHeight }, children: [
6692
+ days.map((day, i) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
6602
6693
  "div",
6603
6694
  {
6604
6695
  className: cn(
@@ -6609,7 +6700,7 @@ var Gantt = ({
6609
6700
  },
6610
6701
  day.key
6611
6702
  )),
6612
- bands.map((band) => /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
6703
+ bands.map((band) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
6613
6704
  "div",
6614
6705
  {
6615
6706
  title: band.title,
@@ -6620,7 +6711,7 @@ var Gantt = ({
6620
6711
  )),
6621
6712
  rows.map((row, i) => {
6622
6713
  var _a, _b, _c;
6623
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
6714
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
6624
6715
  "div",
6625
6716
  {
6626
6717
  className: cn(
@@ -6628,7 +6719,7 @@ var Gantt = ({
6628
6719
  i === 0 ? "border-t-0" : "border-t border-grey-200"
6629
6720
  ),
6630
6721
  style: { top: i * rowHeight, height: rowHeight },
6631
- children: row.bar && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
6722
+ children: row.bar && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
6632
6723
  Layout,
6633
6724
  {
6634
6725
  align: "center",
@@ -6643,7 +6734,7 @@ var Gantt = ({
6643
6734
  background: row.bar.color,
6644
6735
  borderColor: row.bar.color
6645
6736
  },
6646
- children: row.bar.label && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
6737
+ children: row.bar.label && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
6647
6738
  "span",
6648
6739
  {
6649
6740
  className: "overflow-hidden text-ellipsis whitespace-nowrap text-[10px] font-semibold",
@@ -6665,7 +6756,7 @@ var Gantt = ({
6665
6756
  }
6666
6757
  );
6667
6758
  };
6668
- var GanttDot = ({ color }) => /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
6759
+ var GanttDot = ({ color }) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
6669
6760
  "span",
6670
6761
  {
6671
6762
  className: "inline-block h-[9px] w-[9px] shrink-0 rounded-[3px]",
@@ -6675,7 +6766,7 @@ var GanttDot = ({ color }) => /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
6675
6766
  var GanttSwatch = ({
6676
6767
  color,
6677
6768
  filled = true
6678
- }) => /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
6769
+ }) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
6679
6770
  "span",
6680
6771
  {
6681
6772
  className: "box-border inline-block h-3 w-[18px] shrink-0 rounded-[3px] border-[1.5px]",
@@ -6684,7 +6775,7 @@ var GanttSwatch = ({
6684
6775
  );
6685
6776
 
6686
6777
  // src/ui/components/ui/Bulk.tsx
6687
- var import_jsx_runtime80 = require("react/jsx-runtime");
6778
+ var import_jsx_runtime81 = require("react/jsx-runtime");
6688
6779
  var BG_CLASS = {
6689
6780
  "blue-700": "bg-blue-700",
6690
6781
  "blue-900": "bg-blue-900",
@@ -6700,14 +6791,14 @@ var BG_CLASS = {
6700
6791
  "orange-600": "bg-orange-600",
6701
6792
  "purple-700": "bg-purple-700"
6702
6793
  };
6703
- var BulkActionSections = ({ sections }) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
6794
+ var BulkActionSections = ({ sections }) => /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
6704
6795
  Layout,
6705
6796
  {
6706
6797
  role: "group",
6707
6798
  fullHeight: true,
6708
6799
  align: "stretch",
6709
6800
  className: "[&>button:not(:last-child)]:rounded-r-none",
6710
- children: sections.map((section, index) => /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
6801
+ children: sections.map((section, index) => /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
6711
6802
  "button",
6712
6803
  {
6713
6804
  type: "button",
@@ -6726,9 +6817,9 @@ var BulkActionSections = ({ sections }) => /* @__PURE__ */ (0, import_jsx_runtim
6726
6817
  ))
6727
6818
  }
6728
6819
  );
6729
- var BulkDisplaySections = ({ sections }) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Layout, { align: "center", gap: 3, className: "px-4", children: sections.map((section, index) => /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Layout, { align: "center", gap: 3, children: [
6730
- index > 0 && (section.divider ? /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "h-11 w-px shrink-0 bg-white/40" }) : /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "h-0.5 w-4 shrink-0 rounded-full bg-white/50" })),
6731
- section.action ? /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
6820
+ var BulkDisplaySections = ({ sections }) => /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Layout, { align: "center", gap: 3, className: "px-4", children: sections.map((section, index) => /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(Layout, { align: "center", gap: 3, children: [
6821
+ index > 0 && (section.divider ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "h-11 w-px shrink-0 bg-white/40" }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "h-0.5 w-4 shrink-0 rounded-full bg-white/50" })),
6822
+ section.action ? /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
6732
6823
  "button",
6733
6824
  {
6734
6825
  type: "button",
@@ -6740,10 +6831,10 @@ var BulkDisplaySections = ({ sections }) => /* @__PURE__ */ (0, import_jsx_runti
6740
6831
  section.title
6741
6832
  ]
6742
6833
  }
6743
- ) : section.caption ? /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Layout, { column: true, fullWidth: false, className: "leading-tight text-white", children: [
6744
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "whitespace-nowrap text-[10px] font-bold uppercase tracking-wide opacity-70", children: section.caption }),
6745
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "whitespace-nowrap text-sm font-bold", children: section.title })
6746
- ] }) : section.badge ? /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "whitespace-nowrap rounded-full bg-white/15 px-2.5 py-1 text-xs font-bold text-white", children: section.title }) : /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("span", { className: "flex items-center gap-1.5 whitespace-nowrap text-sm font-bold text-white", children: [
6834
+ ) : section.caption ? /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(Layout, { column: true, fullWidth: false, className: "leading-tight text-white", children: [
6835
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "whitespace-nowrap text-[10px] font-bold uppercase tracking-wide opacity-70", children: section.caption }),
6836
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "whitespace-nowrap text-sm font-bold", children: section.title })
6837
+ ] }) : section.badge ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "whitespace-nowrap rounded-full bg-white/15 px-2.5 py-1 text-xs font-bold text-white", children: section.title }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("span", { className: "flex items-center gap-1.5 whitespace-nowrap text-sm font-bold text-white", children: [
6747
6838
  section.icon,
6748
6839
  section.title
6749
6840
  ] })
@@ -6755,7 +6846,7 @@ var Bulk = ({
6755
6846
  color = "blue-700",
6756
6847
  className,
6757
6848
  variant = "actions"
6758
- }) => /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
6849
+ }) => /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
6759
6850
  "div",
6760
6851
  {
6761
6852
  className: cn(
@@ -6764,27 +6855,27 @@ var Bulk = ({
6764
6855
  className
6765
6856
  ),
6766
6857
  children: [
6767
- leftTitle && /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(Layout, { align: "center", gap: 6, className: "pr-6", children: [
6768
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
6858
+ leftTitle && /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(Layout, { align: "center", gap: 6, className: "pr-6", children: [
6859
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
6769
6860
  "button",
6770
6861
  {
6771
6862
  type: "button",
6772
6863
  "aria-label": "Fermer",
6773
6864
  onClick: onClose,
6774
6865
  className: "text-white hover:opacity-80",
6775
- children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(FaIcon, { name: "xmark", size: 20 })
6866
+ children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(FaIcon, { name: "xmark", size: 20 })
6776
6867
  }
6777
6868
  ),
6778
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "whitespace-nowrap text-sm font-bold", children: leftTitle }),
6779
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "h-11 w-px bg-white/40" })
6869
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "whitespace-nowrap text-sm font-bold", children: leftTitle }),
6870
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "h-11 w-px bg-white/40" })
6780
6871
  ] }),
6781
- variant === "display" ? /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(BulkDisplaySections, { sections }) : /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(BulkActionSections, { sections })
6872
+ variant === "display" ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(BulkDisplaySections, { sections }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(BulkActionSections, { sections })
6782
6873
  ]
6783
6874
  }
6784
6875
  );
6785
6876
 
6786
6877
  // src/ui/components/ui/Timeline.tsx
6787
- var import_jsx_runtime81 = require("react/jsx-runtime");
6878
+ var import_jsx_runtime82 = require("react/jsx-runtime");
6788
6879
  var Timeline = ({
6789
6880
  items,
6790
6881
  lineColor = "#F1F5F9",
@@ -6792,22 +6883,22 @@ var Timeline = ({
6792
6883
  className
6793
6884
  }) => {
6794
6885
  if (items.length === 0) {
6795
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text, { size: "s", color: "grey-600", children: emptyLabel });
6886
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Text, { size: "s", color: "grey-600", children: emptyLabel });
6796
6887
  }
6797
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Layout, { column: true, className, children: items.map((item, index) => {
6888
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Layout, { column: true, className, children: items.map((item, index) => {
6798
6889
  var _a;
6799
6890
  const isLast = index === items.length - 1;
6800
6891
  const dotColor = (_a = item.color) != null ? _a : "#377EA1";
6801
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(Layout, { gap: 3, children: [
6802
- /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(Layout, { column: true, align: "center", className: "w-4", children: [
6803
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
6892
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(Layout, { gap: 3, children: [
6893
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(Layout, { column: true, align: "center", className: "w-4", children: [
6894
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
6804
6895
  "span",
6805
6896
  {
6806
6897
  className: "mt-1 h-2.5 w-2.5 shrink-0 rounded-full",
6807
6898
  style: { background: dotColor }
6808
6899
  }
6809
6900
  ),
6810
- !isLast && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
6901
+ !isLast && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
6811
6902
  "span",
6812
6903
  {
6813
6904
  className: "w-0.5 flex-1 min-h-[16px]",
@@ -6815,10 +6906,10 @@ var Timeline = ({
6815
6906
  }
6816
6907
  )
6817
6908
  ] }),
6818
- /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(Layout, { column: true, gap: 0.5, className: isLast ? void 0 : "pb-4", children: [
6819
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text, { size: "s", weight: item.highlighted ? "bold" : "semibold", children: item.title }),
6820
- item.subtitle && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Text, { size: "xs", color: "grey-600", children: item.subtitle }),
6821
- item.description && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "text-xs italic text-neutral-800", children: item.description })
6909
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(Layout, { column: true, gap: 0.5, className: isLast ? void 0 : "pb-4", children: [
6910
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Text, { size: "s", weight: item.highlighted ? "bold" : "semibold", children: item.title }),
6911
+ item.subtitle && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Text, { size: "xs", color: "grey-600", children: item.subtitle }),
6912
+ item.description && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "text-xs italic text-neutral-800", children: item.description })
6822
6913
  ] })
6823
6914
  ] }, item.id);
6824
6915
  }) });
@@ -6827,7 +6918,7 @@ var Timeline = ({
6827
6918
  // src/ui/components/ui/ColorPicker.tsx
6828
6919
  var import_react47 = require("react");
6829
6920
  var import_class_variance_authority15 = require("class-variance-authority");
6830
- var import_jsx_runtime82 = require("react/jsx-runtime");
6921
+ var import_jsx_runtime83 = require("react/jsx-runtime");
6831
6922
  var swatchVariants = (0, import_class_variance_authority15.cva)(
6832
6923
  "inline-flex shrink-0 overflow-hidden rounded-[6px] border border-grey-300",
6833
6924
  {
@@ -6871,7 +6962,7 @@ var ColorPicker = (0, import_react47.forwardRef)(
6871
6962
  if (value === void 0) setInternalColor(next);
6872
6963
  onChange == null ? void 0 : onChange(next);
6873
6964
  };
6874
- return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(
6965
+ return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(
6875
6966
  Layout,
6876
6967
  {
6877
6968
  column: true,
@@ -6879,21 +6970,21 @@ var ColorPicker = (0, import_react47.forwardRef)(
6879
6970
  gap: 1.5,
6880
6971
  className: cn(disabled && "opacity-60", className),
6881
6972
  children: [
6882
- label && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "text-xs font-semibold text-neutral-800", children: label }),
6883
- /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(Layout, { gap: 2, children: [
6884
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
6973
+ label && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "text-xs font-semibold text-neutral-800", children: label }),
6974
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(Layout, { gap: 2, children: [
6975
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
6885
6976
  "label",
6886
6977
  {
6887
6978
  className: cn(
6888
6979
  swatchVariants({ size }),
6889
6980
  disabled ? "cursor-not-allowed" : "cursor-pointer"
6890
6981
  ),
6891
- children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
6982
+ children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
6892
6983
  "span",
6893
6984
  {
6894
6985
  className: "relative block h-full w-full",
6895
6986
  style: { backgroundColor: currentColor },
6896
- children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
6987
+ children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
6897
6988
  "input",
6898
6989
  {
6899
6990
  ref,
@@ -6908,7 +6999,7 @@ var ColorPicker = (0, import_react47.forwardRef)(
6908
6999
  )
6909
7000
  }
6910
7001
  ),
6911
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
7002
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
6912
7003
  "input",
6913
7004
  __spreadProps(__spreadValues({
6914
7005
  type: "text",
@@ -6929,7 +7020,7 @@ ColorPicker.displayName = "ColorPicker";
6929
7020
 
6930
7021
  // src/ui/components/ui/FileUploadZone.tsx
6931
7022
  var import_react48 = require("react");
6932
- var import_jsx_runtime83 = require("react/jsx-runtime");
7023
+ var import_jsx_runtime84 = require("react/jsx-runtime");
6933
7024
  var ACCEPT_MAP = {
6934
7025
  png: "image/png",
6935
7026
  jpg: "image/jpeg",
@@ -7057,7 +7148,7 @@ var FileUploadZone = ({
7057
7148
  onRemove == null ? void 0 : onRemove();
7058
7149
  };
7059
7150
  if (previewUrl) {
7060
- return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(
7151
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(
7061
7152
  Layout,
7062
7153
  {
7063
7154
  column: true,
@@ -7069,14 +7160,14 @@ var FileUploadZone = ({
7069
7160
  className
7070
7161
  ),
7071
7162
  children: [
7072
- fileType && isPdf(fileType) ? /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
7163
+ fileType && isPdf(fileType) ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
7073
7164
  "embed",
7074
7165
  {
7075
7166
  src: previewUrl,
7076
7167
  type: "application/pdf",
7077
7168
  className: "h-[500px] w-full rounded"
7078
7169
  }
7079
- ) : /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
7170
+ ) : /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
7080
7171
  "img",
7081
7172
  {
7082
7173
  src: previewUrl,
@@ -7084,13 +7175,13 @@ var FileUploadZone = ({
7084
7175
  className: "max-h-[400px] max-w-full rounded object-contain"
7085
7176
  }
7086
7177
  ),
7087
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
7178
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
7088
7179
  Button,
7089
7180
  {
7090
7181
  label: "Supprimer",
7091
7182
  theme: "red-900",
7092
7183
  size: "s",
7093
- iconLeft: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(FaIcon, { name: "trash", size: 14 }),
7184
+ iconLeft: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(FaIcon, { name: "trash", size: 14 }),
7094
7185
  onClick: handleRemove
7095
7186
  }
7096
7187
  )
@@ -7099,14 +7190,14 @@ var FileUploadZone = ({
7099
7190
  );
7100
7191
  }
7101
7192
  const showBrowse = !compact && browseLabel !== false;
7102
- return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(
7193
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(
7103
7194
  Layout,
7104
7195
  {
7105
7196
  column: true,
7106
7197
  gap: 1,
7107
7198
  className: cn(fullWidth ? "w-full" : "w-fit", className),
7108
7199
  children: [
7109
- /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(
7200
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(
7110
7201
  "label",
7111
7202
  {
7112
7203
  onDragOver: handleDragOver,
@@ -7120,7 +7211,7 @@ var FileUploadZone = ({
7120
7211
  isDragging ? "border-solid border-blue-100 bg-blue-50" : cn(compact ? "border-grey-300" : "border-blue-50", "bg-grey-100")
7121
7212
  ),
7122
7213
  children: [
7123
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
7214
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
7124
7215
  "input",
7125
7216
  {
7126
7217
  ref: inputRef,
@@ -7132,11 +7223,11 @@ var FileUploadZone = ({
7132
7223
  className: "hidden"
7133
7224
  }
7134
7225
  ),
7135
- showIcon && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(FaIcon, { name: "cloud-arrow-up", size: 28, className: "text-blue-700" }),
7136
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "text-center text-sm text-grey-600", children: label }),
7137
- showBrowse && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(import_jsx_runtime83.Fragment, { children: [
7138
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "text-center text-xs text-grey-600", children: "ou" }),
7139
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
7226
+ showIcon && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(FaIcon, { name: "cloud-arrow-up", size: 28, className: "text-blue-700" }),
7227
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "text-center text-sm text-grey-600", children: label }),
7228
+ showBrowse && /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(import_jsx_runtime84.Fragment, { children: [
7229
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "text-center text-xs text-grey-600", children: "ou" }),
7230
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
7140
7231
  Button,
7141
7232
  {
7142
7233
  label: browseLabel,
@@ -7150,15 +7241,15 @@ var FileUploadZone = ({
7150
7241
  }
7151
7242
  )
7152
7243
  ] }),
7153
- sublabel && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "text-center text-xs text-grey-500", children: sublabel })
7244
+ sublabel && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "text-center text-xs text-grey-500", children: sublabel })
7154
7245
  ]
7155
7246
  }
7156
7247
  ),
7157
- showFileName && fileName && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(Layout, { align: "center", justify: "center", gap: 2, children: [
7158
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(FaIcon, { name: "file", size: 16, className: "text-green-700" }),
7159
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "text-sm text-green-700", children: fileName })
7248
+ showFileName && fileName && /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(Layout, { align: "center", justify: "center", gap: 2, children: [
7249
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(FaIcon, { name: "file", size: 16, className: "text-green-700" }),
7250
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "text-sm text-green-700", children: fileName })
7160
7251
  ] }),
7161
- inlineError && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "text-center text-sm text-red-900", children: inlineError })
7252
+ inlineError && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "text-center text-sm text-red-900", children: inlineError })
7162
7253
  ]
7163
7254
  }
7164
7255
  );
@@ -7166,7 +7257,7 @@ var FileUploadZone = ({
7166
7257
 
7167
7258
  // src/ui/components/ui/FilePicker.tsx
7168
7259
  var import_react49 = require("react");
7169
- var import_jsx_runtime84 = require("react/jsx-runtime");
7260
+ var import_jsx_runtime85 = require("react/jsx-runtime");
7170
7261
  var FilePicker = ({
7171
7262
  label,
7172
7263
  onSelect,
@@ -7180,8 +7271,8 @@ var FilePicker = ({
7180
7271
  className
7181
7272
  }) => {
7182
7273
  const inputRef = (0, import_react49.useRef)(null);
7183
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(import_jsx_runtime84.Fragment, { children: [
7184
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
7274
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(import_jsx_runtime85.Fragment, { children: [
7275
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
7185
7276
  "input",
7186
7277
  {
7187
7278
  ref: inputRef,
@@ -7197,7 +7288,7 @@ var FilePicker = ({
7197
7288
  }
7198
7289
  }
7199
7290
  ),
7200
- /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Tooltip, { content: label, children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
7291
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Tooltip, { content: label, children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
7201
7292
  Icon,
7202
7293
  {
7203
7294
  name: icon,
@@ -7219,7 +7310,7 @@ var FilePicker = ({
7219
7310
  // src/ui/components/ui/Item.tsx
7220
7311
  var import_react50 = require("react");
7221
7312
  var import_class_variance_authority16 = require("class-variance-authority");
7222
- var import_jsx_runtime85 = require("react/jsx-runtime");
7313
+ var import_jsx_runtime86 = require("react/jsx-runtime");
7223
7314
  var itemVariants = (0, import_class_variance_authority16.cva)(
7224
7315
  "group/item flex items-center rounded-[6px] border border-transparent transition-colors",
7225
7316
  {
@@ -7240,7 +7331,7 @@ var itemVariants = (0, import_class_variance_authority16.cva)(
7240
7331
  var Item4 = (0, import_react50.forwardRef)(
7241
7332
  (_a, ref) => {
7242
7333
  var _b = _a, { variant, size, className } = _b, props = __objRest(_b, ["variant", "size", "className"]);
7243
- return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
7334
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
7244
7335
  "div",
7245
7336
  __spreadValues({
7246
7337
  ref,
@@ -7265,7 +7356,7 @@ var itemMediaVariants = (0, import_class_variance_authority16.cva)(
7265
7356
  );
7266
7357
  var ItemMedia = (_a) => {
7267
7358
  var _b = _a, { variant, className } = _b, props = __objRest(_b, ["variant", "className"]);
7268
- return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", __spreadValues({ className: cn(itemMediaVariants({ variant }), className) }, props));
7359
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", __spreadValues({ className: cn(itemMediaVariants({ variant }), className) }, props));
7269
7360
  };
7270
7361
  var ItemContent = (_a) => {
7271
7362
  var _b = _a, {
@@ -7273,7 +7364,7 @@ var ItemContent = (_a) => {
7273
7364
  } = _b, props = __objRest(_b, [
7274
7365
  "className"
7275
7366
  ]);
7276
- return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
7367
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
7277
7368
  "div",
7278
7369
  __spreadValues({
7279
7370
  className: cn("flex min-w-0 flex-1 flex-col gap-1", className)
@@ -7286,7 +7377,7 @@ var ItemTitle = (_a) => {
7286
7377
  } = _b, props = __objRest(_b, [
7287
7378
  "className"
7288
7379
  ]);
7289
- return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
7380
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
7290
7381
  "div",
7291
7382
  __spreadValues({
7292
7383
  className: cn(
@@ -7302,7 +7393,7 @@ var ItemDescription = (_a) => {
7302
7393
  } = _b, props = __objRest(_b, [
7303
7394
  "className"
7304
7395
  ]);
7305
- return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", __spreadValues({ className: cn("text-sm text-grey-500", className) }, props));
7396
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", __spreadValues({ className: cn("text-sm text-grey-500", className) }, props));
7306
7397
  };
7307
7398
  var ItemActions = (_a) => {
7308
7399
  var _b = _a, {
@@ -7310,7 +7401,7 @@ var ItemActions = (_a) => {
7310
7401
  } = _b, props = __objRest(_b, [
7311
7402
  "className"
7312
7403
  ]);
7313
- return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
7404
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
7314
7405
  "div",
7315
7406
  __spreadValues({
7316
7407
  className: cn("flex shrink-0 items-center gap-2", className)
@@ -7319,7 +7410,7 @@ var ItemActions = (_a) => {
7319
7410
  };
7320
7411
 
7321
7412
  // src/ui/components/ui/Attachment.tsx
7322
- var import_jsx_runtime86 = require("react/jsx-runtime");
7413
+ var import_jsx_runtime87 = require("react/jsx-runtime");
7323
7414
  var Attachment = ({
7324
7415
  name,
7325
7416
  size,
@@ -7333,7 +7424,7 @@ var Attachment = ({
7333
7424
  }) => {
7334
7425
  const isUploading = status === "uploading";
7335
7426
  const isError = status === "error";
7336
- return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
7427
+ return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(
7337
7428
  Item4,
7338
7429
  {
7339
7430
  variant: "outline",
@@ -7345,12 +7436,12 @@ var Attachment = ({
7345
7436
  ),
7346
7437
  style: { width },
7347
7438
  children: [
7348
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
7439
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
7349
7440
  ItemMedia,
7350
7441
  {
7351
7442
  variant: "icon",
7352
7443
  className: cn(isError && "border-red-900 bg-red-50"),
7353
- children: isUploading ? /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(Spinner, { size: "s", color: "blue-700" }) : /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
7444
+ children: isUploading ? /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(Spinner, { size: "s", color: "blue-700" }) : /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
7354
7445
  FaIcon,
7355
7446
  {
7356
7447
  name: isError ? "triangle-exclamation" : "file",
@@ -7360,33 +7451,33 @@ var Attachment = ({
7360
7451
  )
7361
7452
  }
7362
7453
  ),
7363
- /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(ItemContent, { children: [
7364
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(ItemTitle, { children: name }),
7365
- isUploading ? /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(ItemDescription, { className: "text-xs", children: [
7454
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(ItemContent, { children: [
7455
+ /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(ItemTitle, { children: name }),
7456
+ isUploading ? /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(ItemDescription, { className: "text-xs", children: [
7366
7457
  "Uploading - ",
7367
7458
  progress,
7368
7459
  "%"
7369
- ] }) : isError ? /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(ItemDescription, { className: "text-xs text-red-900", children: errorMessage }) : size && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(ItemDescription, { className: "text-xs", children: size })
7460
+ ] }) : isError ? /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(ItemDescription, { className: "text-xs text-red-900", children: errorMessage }) : size && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(ItemDescription, { className: "text-xs", children: size })
7370
7461
  ] }),
7371
- (onRetry || onRemove) && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(ItemActions, { children: [
7372
- isError && onRetry && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
7462
+ (onRetry || onRemove) && /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(ItemActions, { children: [
7463
+ isError && onRetry && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
7373
7464
  "button",
7374
7465
  {
7375
7466
  type: "button",
7376
7467
  onClick: onRetry,
7377
7468
  "aria-label": `R\xE9essayer l'envoi de ${name}`,
7378
7469
  className: "text-grey-400 hover:text-grey-600",
7379
- children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(FaIcon, { name: "rotate-right", size: 12 })
7470
+ children: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(FaIcon, { name: "rotate-right", size: 12 })
7380
7471
  }
7381
7472
  ),
7382
- onRemove && /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
7473
+ onRemove && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
7383
7474
  "button",
7384
7475
  {
7385
7476
  type: "button",
7386
7477
  onClick: onRemove,
7387
7478
  "aria-label": `Retirer ${name}`,
7388
7479
  className: "text-grey-400 hover:text-grey-600",
7389
- children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(FaIcon, { name: "xmark", size: 12 })
7480
+ children: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(FaIcon, { name: "xmark", size: 12 })
7390
7481
  }
7391
7482
  )
7392
7483
  ] })
@@ -7398,7 +7489,7 @@ var Attachment = ({
7398
7489
  // src/ui/components/ui/PdfPreview.tsx
7399
7490
  var import_react51 = require("react");
7400
7491
  var import_react_pdf = require("react-pdf");
7401
- var import_jsx_runtime87 = require("react/jsx-runtime");
7492
+ var import_jsx_runtime88 = require("react/jsx-runtime");
7402
7493
  import_react_pdf.pdfjs.GlobalWorkerOptions.workerSrc = `https://unpkg.com/pdfjs-dist@${import_react_pdf.pdfjs.version}/build/pdf.worker.min.mjs`;
7403
7494
  var PdfPreview = ({
7404
7495
  file,
@@ -7409,9 +7500,9 @@ var PdfPreview = ({
7409
7500
  const [hasError, setHasError] = (0, import_react51.useState)(false);
7410
7501
  const [numPages, setNumPages] = (0, import_react51.useState)(0);
7411
7502
  const height = Math.round(width * 1.3);
7412
- const thumbnailSkeleton = /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(Skeleton, { width, height });
7503
+ const thumbnailSkeleton = /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(Skeleton, { width, height });
7413
7504
  if (hasError) {
7414
- return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(
7505
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(
7415
7506
  Layout,
7416
7507
  {
7417
7508
  column: true,
@@ -7424,13 +7515,13 @@ var PdfPreview = ({
7424
7515
  ),
7425
7516
  style: { width, height },
7426
7517
  children: [
7427
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(FaIcon, { name: "file-pdf", size: 24 }),
7428
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "text-xs", children: "Aper\xE7u indisponible" })
7518
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(FaIcon, { name: "file-pdf", size: 24 }),
7519
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "text-xs", children: "Aper\xE7u indisponible" })
7429
7520
  ]
7430
7521
  }
7431
7522
  );
7432
7523
  }
7433
- return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
7524
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
7434
7525
  "div",
7435
7526
  {
7436
7527
  className: cn(
@@ -7438,7 +7529,7 @@ var PdfPreview = ({
7438
7529
  className
7439
7530
  ),
7440
7531
  style: { width, maxHeight },
7441
- children: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
7532
+ children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
7442
7533
  import_react_pdf.Document,
7443
7534
  {
7444
7535
  file,
@@ -7446,7 +7537,7 @@ var PdfPreview = ({
7446
7537
  onLoadError: () => setHasError(true),
7447
7538
  loading: thumbnailSkeleton,
7448
7539
  error: thumbnailSkeleton,
7449
- children: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(Layout, { column: true, gap: 2, className: "p-2", children: Array.from({ length: numPages }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
7540
+ children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(Layout, { column: true, gap: 2, className: "p-2", children: Array.from({ length: numPages }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
7450
7541
  import_react_pdf.Page,
7451
7542
  {
7452
7543
  pageNumber: i + 1,
@@ -7464,7 +7555,7 @@ var PdfPreview = ({
7464
7555
 
7465
7556
  // src/ui/components/ui/VideoPlayer.tsx
7466
7557
  var import_react52 = require("react");
7467
- var import_jsx_runtime88 = require("react/jsx-runtime");
7558
+ var import_jsx_runtime89 = require("react/jsx-runtime");
7468
7559
  var formatVideoDuration = (seconds) => {
7469
7560
  if (seconds === void 0 || !Number.isFinite(seconds) || seconds < 0)
7470
7561
  return "";
@@ -7563,8 +7654,8 @@ var VideoPlayer = ({
7563
7654
  const stopBubbling = (e) => {
7564
7655
  e.stopPropagation();
7565
7656
  };
7566
- return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(import_jsx_runtime88.Fragment, { children: [
7567
- /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(
7657
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(import_jsx_runtime89.Fragment, { children: [
7658
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(
7568
7659
  Layout,
7569
7660
  {
7570
7661
  className: cn(
@@ -7575,7 +7666,7 @@ var VideoPlayer = ({
7575
7666
  onClick: stopBubbling,
7576
7667
  "data-testid": "video-player",
7577
7668
  children: [
7578
- isInlinePlaying ? /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
7669
+ isInlinePlaying ? /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
7579
7670
  "video",
7580
7671
  {
7581
7672
  ref: attachInlineVideo,
@@ -7587,7 +7678,7 @@ var VideoPlayer = ({
7587
7678
  className: "h-full w-full bg-black object-contain",
7588
7679
  "aria-label": title
7589
7680
  }
7590
- ) : /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(
7681
+ ) : /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(
7591
7682
  "button",
7592
7683
  {
7593
7684
  type: "button",
@@ -7595,7 +7686,7 @@ var VideoPlayer = ({
7595
7686
  "aria-label": `Lire la vid\xE9o ${title}`,
7596
7687
  className: "group relative flex h-full w-full items-center justify-center",
7597
7688
  children: [
7598
- visiblePoster ? /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
7689
+ visiblePoster ? /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
7599
7690
  "img",
7600
7691
  {
7601
7692
  src: visiblePoster,
@@ -7606,7 +7697,7 @@ var VideoPlayer = ({
7606
7697
  ) : (
7607
7698
  // Sans vignette : première image de la vidéo (métadonnées seulement,
7608
7699
  // `#t=0.1` force l'affichage d'une frame), tuile sombre si ça échoue.
7609
- !hasFramePreviewError && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
7700
+ !hasFramePreviewError && /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
7610
7701
  "video",
7611
7702
  {
7612
7703
  src: `${src}#t=0.1`,
@@ -7621,12 +7712,12 @@ var VideoPlayer = ({
7621
7712
  }
7622
7713
  )
7623
7714
  ),
7624
- /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "relative flex h-12 w-12 items-center justify-center rounded-full bg-blue-900 text-white transition-colors group-hover:bg-blue-950", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(FaIcon, { name: "play", family: "solid", size: 18 }) }),
7625
- formattedDuration && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "absolute bottom-2 left-2 rounded bg-black/60 px-1.5 py-0.5 text-xs font-medium text-white", children: formattedDuration })
7715
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("span", { className: "relative flex h-12 w-12 items-center justify-center rounded-full bg-blue-900 text-white transition-colors group-hover:bg-blue-950", children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(FaIcon, { name: "play", family: "solid", size: 18 }) }),
7716
+ formattedDuration && /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("span", { className: "absolute bottom-2 left-2 rounded bg-black/60 px-1.5 py-0.5 text-xs font-medium text-white", children: formattedDuration })
7626
7717
  ]
7627
7718
  }
7628
7719
  ),
7629
- label && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
7720
+ label && /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
7630
7721
  Layout,
7631
7722
  {
7632
7723
  width: "auto",
@@ -7634,14 +7725,14 @@ var VideoPlayer = ({
7634
7725
  children: label
7635
7726
  }
7636
7727
  ),
7637
- /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(
7728
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(
7638
7729
  Layout,
7639
7730
  {
7640
7731
  width: "auto",
7641
7732
  gap: 1,
7642
7733
  className: "absolute right-1 top-1 rounded-full bg-white/90",
7643
7734
  children: [
7644
- /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(Tooltip, { content: "Agrandir la vid\xE9o", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
7735
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(Tooltip, { content: "Agrandir la vid\xE9o", children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
7645
7736
  Icon,
7646
7737
  {
7647
7738
  name: "up-right-and-down-left-from-center",
@@ -7650,7 +7741,7 @@ var VideoPlayer = ({
7650
7741
  "aria-label": "Agrandir la vid\xE9o"
7651
7742
  }
7652
7743
  ) }),
7653
- /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(Tooltip, { content: "T\xE9l\xE9charger la vid\xE9o", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
7744
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(Tooltip, { content: "T\xE9l\xE9charger la vid\xE9o", children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
7654
7745
  Icon,
7655
7746
  {
7656
7747
  name: "download",
@@ -7662,7 +7753,7 @@ var VideoPlayer = ({
7662
7753
  ]
7663
7754
  }
7664
7755
  ),
7665
- meta && !isInlinePlaying && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
7756
+ meta && !isInlinePlaying && /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
7666
7757
  Layout,
7667
7758
  {
7668
7759
  width: "auto",
@@ -7673,7 +7764,7 @@ var VideoPlayer = ({
7673
7764
  ]
7674
7765
  }
7675
7766
  ),
7676
- /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(
7767
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(
7677
7768
  Modal,
7678
7769
  {
7679
7770
  open: isExpanded,
@@ -7681,9 +7772,9 @@ var VideoPlayer = ({
7681
7772
  onOpenAutoFocus: focusExpandedVideo,
7682
7773
  width: "70vw",
7683
7774
  children: [
7684
- /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(ModalHeader, { className: "items-start text-left", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(Layout, { align: "center", justify: "between", fullWidth: true, gap: 2, children: [
7685
- /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(Layout, { align: "center", gap: 2, className: "min-w-0", children: [
7686
- /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
7775
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(ModalHeader, { className: "items-start text-left", children: /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(Layout, { align: "center", justify: "between", fullWidth: true, gap: 2, children: [
7776
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(Layout, { align: "center", gap: 2, className: "min-w-0", children: [
7777
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
7687
7778
  IconBadge,
7688
7779
  {
7689
7780
  name: "video",
@@ -7692,10 +7783,10 @@ var VideoPlayer = ({
7692
7783
  iconColor: "blue_900"
7693
7784
  }
7694
7785
  ),
7695
- /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(ModalTitle, { className: "truncate", children: title })
7786
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(ModalTitle, { className: "truncate", children: title })
7696
7787
  ] }),
7697
- /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(Layout, { width: "auto", align: "center", gap: 1, children: [
7698
- /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(Tooltip, { content: "T\xE9l\xE9charger la vid\xE9o", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
7788
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(Layout, { width: "auto", align: "center", gap: 1, children: [
7789
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(Tooltip, { content: "T\xE9l\xE9charger la vid\xE9o", children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
7699
7790
  Icon,
7700
7791
  {
7701
7792
  name: "download",
@@ -7704,7 +7795,7 @@ var VideoPlayer = ({
7704
7795
  "aria-label": "T\xE9l\xE9charger la vid\xE9o"
7705
7796
  }
7706
7797
  ) }),
7707
- /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(ModalClose, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
7798
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(ModalClose, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
7708
7799
  Icon,
7709
7800
  {
7710
7801
  name: "xmark",
@@ -7716,7 +7807,7 @@ var VideoPlayer = ({
7716
7807
  ) })
7717
7808
  ] })
7718
7809
  ] }) }),
7719
- /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(ModalBody, { children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
7810
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(ModalBody, { children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
7720
7811
  "video",
7721
7812
  {
7722
7813
  ref: attachExpandedVideo,
@@ -7738,7 +7829,7 @@ var VideoPlayer = ({
7738
7829
 
7739
7830
  // src/ui/components/ui/ScrollArea.tsx
7740
7831
  var RadixScrollArea = __toESM(require("@radix-ui/react-scroll-area"));
7741
- var import_jsx_runtime89 = require("react/jsx-runtime");
7832
+ var import_jsx_runtime90 = require("react/jsx-runtime");
7742
7833
  var HIDDEN_SCROLLBAR_CLASSNAME = "w-0 h-0 opacity-0";
7743
7834
  var ScrollArea = (_a) => {
7744
7835
  var _b = _a, {
@@ -7752,13 +7843,13 @@ var ScrollArea = (_a) => {
7752
7843
  "orientation",
7753
7844
  "viewportRef"
7754
7845
  ]);
7755
- return /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)(
7846
+ return /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)(
7756
7847
  RadixScrollArea.Root,
7757
7848
  __spreadProps(__spreadValues({
7758
7849
  className: cn("relative overflow-hidden", className)
7759
7850
  }, props), {
7760
7851
  children: [
7761
- /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
7852
+ /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
7762
7853
  RadixScrollArea.Viewport,
7763
7854
  {
7764
7855
  ref: viewportRef,
@@ -7770,23 +7861,23 @@ var ScrollArea = (_a) => {
7770
7861
  children
7771
7862
  }
7772
7863
  ),
7773
- (orientation === "vertical" || orientation === "both") && /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
7864
+ (orientation === "vertical" || orientation === "both") && /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
7774
7865
  RadixScrollArea.Scrollbar,
7775
7866
  {
7776
7867
  orientation: "vertical",
7777
7868
  className: HIDDEN_SCROLLBAR_CLASSNAME,
7778
- children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(RadixScrollArea.Thumb, { className: "relative flex-1 rounded-full bg-grey-400" })
7869
+ children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(RadixScrollArea.Thumb, { className: "relative flex-1 rounded-full bg-grey-400" })
7779
7870
  }
7780
7871
  ),
7781
- (orientation === "horizontal" || orientation === "both") && /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
7872
+ (orientation === "horizontal" || orientation === "both") && /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
7782
7873
  RadixScrollArea.Scrollbar,
7783
7874
  {
7784
7875
  orientation: "horizontal",
7785
7876
  className: HIDDEN_SCROLLBAR_CLASSNAME,
7786
- children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(RadixScrollArea.Thumb, { className: "relative flex-1 rounded-full bg-grey-400" })
7877
+ children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(RadixScrollArea.Thumb, { className: "relative flex-1 rounded-full bg-grey-400" })
7787
7878
  }
7788
7879
  ),
7789
- /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(RadixScrollArea.Corner, {})
7880
+ /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(RadixScrollArea.Corner, {})
7790
7881
  ]
7791
7882
  })
7792
7883
  );
@@ -7794,7 +7885,7 @@ var ScrollArea = (_a) => {
7794
7885
 
7795
7886
  // src/ui/components/ui/Message.tsx
7796
7887
  var import_react53 = require("react");
7797
- var import_jsx_runtime90 = require("react/jsx-runtime");
7888
+ var import_jsx_runtime91 = require("react/jsx-runtime");
7798
7889
  var BUBBLE_BACKGROUND = {
7799
7890
  own: { solid: "bg-blue-700", pale: "bg-blue-50" },
7800
7891
  teammate: { solid: "bg-blue-100", pale: "bg-blue-100" },
@@ -7853,7 +7944,7 @@ var Message = (0, import_react53.forwardRef)(
7853
7944
  const isInverted = isOwn && variant === "solid";
7854
7945
  const contentColor = isInverted ? "white" : "neutral-800";
7855
7946
  const metaColor = isInverted ? "white" : "grey-500";
7856
- const avatar = showAuthor ? /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Avatar, { name: authorName, src: authorSrc, size: avatarSize }) : /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
7947
+ const avatar = showAuthor ? /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Avatar, { name: authorName, src: authorSrc, size: avatarSize }) : /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
7857
7948
  Layout,
7858
7949
  {
7859
7950
  width: `${avatarSize}px`,
@@ -7861,8 +7952,8 @@ var Message = (0, import_react53.forwardRef)(
7861
7952
  "aria-hidden": "true"
7862
7953
  }
7863
7954
  );
7864
- const actionsSlot = actions && !actionsOnHover ? /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Layout, { width: "auto", align: "center", className: "shrink-0", children: actions }) : null;
7865
- const cornerActions = actions && actionsOnHover ? /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
7955
+ const actionsSlot = actions && !actionsOnHover ? /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Layout, { width: "auto", align: "center", className: "shrink-0", children: actions }) : null;
7956
+ const cornerActions = actions && actionsOnHover ? /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
7866
7957
  Layout,
7867
7958
  {
7868
7959
  width: "auto",
@@ -7875,7 +7966,7 @@ var Message = (0, import_react53.forwardRef)(
7875
7966
  children: actions
7876
7967
  }
7877
7968
  ) : null;
7878
- return /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)(
7969
+ return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(
7879
7970
  Layout,
7880
7971
  __spreadProps(__spreadValues({
7881
7972
  ref,
@@ -7886,7 +7977,7 @@ var Message = (0, import_react53.forwardRef)(
7886
7977
  className
7887
7978
  }, props), {
7888
7979
  children: [
7889
- /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)(
7980
+ /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(
7890
7981
  Layout,
7891
7982
  {
7892
7983
  fullWidth: true,
@@ -7897,7 +7988,7 @@ var Message = (0, import_react53.forwardRef)(
7897
7988
  children: [
7898
7989
  !isRightAligned && avatar,
7899
7990
  isRightAligned && actionsSlot,
7900
- /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)(
7991
+ /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(
7901
7992
  Layout,
7902
7993
  {
7903
7994
  column: true,
@@ -7906,7 +7997,7 @@ var Message = (0, import_react53.forwardRef)(
7906
7997
  align: isRightAligned ? "end" : "start",
7907
7998
  style: { maxWidth },
7908
7999
  children: [
7909
- bubble ? /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)(
8000
+ bubble ? /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(
7910
8001
  Layout,
7911
8002
  {
7912
8003
  column: true,
@@ -7920,16 +8011,16 @@ var Message = (0, import_react53.forwardRef)(
7920
8011
  cornerActions && "pr-8"
7921
8012
  ),
7922
8013
  children: [
7923
- deleted ? /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Text, { size: "s", italic: true, color: metaColor, children: deletedLabel }) : /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Text, { size: "s", color: contentColor, children }),
7924
- time && /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Layout, { fullWidth: true, justify: "end", children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Text, { size: "xxs", color: metaColor, children: time }) }),
8014
+ deleted ? /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Text, { size: "s", italic: true, color: metaColor, children: deletedLabel }) : /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Text, { size: "s", color: contentColor, children }),
8015
+ time && /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Layout, { fullWidth: true, justify: "end", children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Text, { size: "xxs", color: metaColor, children: time }) }),
7925
8016
  cornerActions
7926
8017
  ]
7927
8018
  }
7928
- ) : cornerActions ? /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)(Layout, { width: "auto", className: "relative", children: [
8019
+ ) : cornerActions ? /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(Layout, { width: "auto", className: "relative", children: [
7929
8020
  children,
7930
8021
  cornerActions
7931
8022
  ] }) : children,
7932
- status && /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Layout, { fullWidth: true, justify: isRightAligned ? "end" : "start", children: status })
8023
+ status && /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Layout, { fullWidth: true, justify: isRightAligned ? "end" : "start", children: status })
7933
8024
  ]
7934
8025
  }
7935
8026
  ),
@@ -7938,7 +8029,7 @@ var Message = (0, import_react53.forwardRef)(
7938
8029
  ]
7939
8030
  }
7940
8031
  ),
7941
- showAuthor && showAuthorName && authorName && /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(Text, { size: "xs", color: "grey-600", children: authorName })
8032
+ showAuthor && showAuthorName && authorName && /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Text, { size: "xs", color: "grey-600", children: authorName })
7942
8033
  ]
7943
8034
  })
7944
8035
  );
@@ -7948,7 +8039,7 @@ Message.displayName = "Message";
7948
8039
 
7949
8040
  // src/ui/components/ui/MessageScroller.tsx
7950
8041
  var import_react54 = require("react");
7951
- var import_jsx_runtime91 = require("react/jsx-runtime");
8042
+ var import_jsx_runtime92 = require("react/jsx-runtime");
7952
8043
  var SEPARATOR_LINE = {
7953
8044
  neutral: "",
7954
8045
  alert: "bg-red-500"
@@ -7961,9 +8052,9 @@ var MessageDateSeparator = ({
7961
8052
  label,
7962
8053
  tone = "neutral",
7963
8054
  className
7964
- }) => /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(Layout, { fullWidth: true, gap: 2, align: "center", className, children: [
7965
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Layout, { flex: 1, children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Divider, { className: SEPARATOR_LINE[tone] }) }),
7966
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Layout, { width: "auto", className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
8055
+ }) => /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)(Layout, { fullWidth: true, gap: 2, align: "center", className, children: [
8056
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(Layout, { flex: 1, children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(Divider, { className: SEPARATOR_LINE[tone] }) }),
8057
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(Layout, { width: "auto", className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
7967
8058
  Text,
7968
8059
  {
7969
8060
  size: "xs",
@@ -7972,7 +8063,7 @@ var MessageDateSeparator = ({
7972
8063
  children: label
7973
8064
  }
7974
8065
  ) }),
7975
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Layout, { flex: 1, children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Divider, { className: SEPARATOR_LINE[tone] }) })
8066
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(Layout, { flex: 1, children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(Divider, { className: SEPARATOR_LINE[tone] }) })
7976
8067
  ] });
7977
8068
  var MessageScroller = ({
7978
8069
  children,
@@ -8012,13 +8103,13 @@ var MessageScroller = ({
8012
8103
  if (isEmpty && emptyState) return emptyState;
8013
8104
  return children;
8014
8105
  };
8015
- const scroller = /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
8106
+ const scroller = /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
8016
8107
  ScrollArea,
8017
8108
  {
8018
8109
  viewportRef: scrollerRef,
8019
8110
  className: cn("w-full", floatingFooter ? "min-h-0 flex-1" : className),
8020
8111
  style: typeof height === "number" ? { height: `${height}px` } : { height },
8021
- children: /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(
8112
+ children: /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)(
8022
8113
  Layout,
8023
8114
  {
8024
8115
  column: true,
@@ -8041,9 +8132,9 @@ var MessageScroller = ({
8041
8132
  }
8042
8133
  );
8043
8134
  if (!floatingFooter) return scroller;
8044
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(Layout, { column: true, fullWidth: true, className: cn("relative min-h-0", className), children: [
8135
+ return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)(Layout, { column: true, fullWidth: true, className: cn("relative min-h-0", className), children: [
8045
8136
  scroller,
8046
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
8137
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
8047
8138
  Layout,
8048
8139
  {
8049
8140
  width: "auto",
@@ -8056,13 +8147,13 @@ var MessageScroller = ({
8056
8147
 
8057
8148
  // src/ui/components/ui/Stepper.tsx
8058
8149
  var import_react55 = require("react");
8059
- var import_jsx_runtime92 = require("react/jsx-runtime");
8150
+ var import_jsx_runtime93 = require("react/jsx-runtime");
8060
8151
  var Stepper = ({
8061
8152
  numberOfSteps,
8062
8153
  current = 0,
8063
8154
  size = 28,
8064
8155
  className
8065
- }) => /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
8156
+ }) => /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
8066
8157
  "nav",
8067
8158
  {
8068
8159
  "aria-label": "progression",
@@ -8073,8 +8164,8 @@ var Stepper = ({
8073
8164
  children: Array.from({ length: numberOfSteps }, (_, i) => {
8074
8165
  const isActive = i === current;
8075
8166
  const isCompleted = i < current;
8076
- return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)(import_react55.Fragment, { children: [
8077
- /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
8167
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(import_react55.Fragment, { children: [
8168
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
8078
8169
  "div",
8079
8170
  {
8080
8171
  "aria-hidden": true,
@@ -8083,10 +8174,10 @@ var Stepper = ({
8083
8174
  isCompleted ? "border-blue-800 bg-blue-800 text-white" : isActive ? "border-blue-800 bg-white text-blue-800" : "border-grey-500 bg-white text-grey-500"
8084
8175
  ),
8085
8176
  style: { width: size, height: size },
8086
- children: isCompleted ? /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(FaIcon, { name: "check", family: "solid", size: 12 }) : i + 1
8177
+ children: isCompleted ? /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(FaIcon, { name: "check", family: "solid", size: 12 }) : i + 1
8087
8178
  }
8088
8179
  ),
8089
- i < numberOfSteps - 1 && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: "h-px min-w-[8px] flex-1 bg-grey-300" })
8180
+ i < numberOfSteps - 1 && /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "h-px min-w-[8px] flex-1 bg-grey-300" })
8090
8181
  ] }, i);
8091
8182
  })
8092
8183
  }
@@ -8100,12 +8191,12 @@ var import_style2 = require("react-day-picker/style.css");
8100
8191
  var import_date_fns = require("date-fns");
8101
8192
  var import_locale2 = require("date-fns/locale");
8102
8193
  var RadixPopover6 = __toESM(require("@radix-ui/react-popover"));
8103
- var import_jsx_runtime93 = require("react/jsx-runtime");
8194
+ var import_jsx_runtime94 = require("react/jsx-runtime");
8104
8195
  var formatMonthCaption = (month) => (0, import_date_fns.format)(month, "MMM yyyy", { locale: import_locale2.fr });
8105
8196
  var RANGE_PRESETS = [
8106
8197
  {
8107
8198
  label: "Mois pr\xE9c\xE9dent",
8108
- icon: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(FaIcon, { name: "calendar-arrow-up", size: 15 }),
8199
+ icon: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(FaIcon, { name: "calendar-arrow-up", size: 15 }),
8109
8200
  getValue: () => [
8110
8201
  (0, import_date_fns.startOfMonth)((0, import_date_fns.subMonths)(/* @__PURE__ */ new Date(), 1)),
8111
8202
  (0, import_date_fns.endOfMonth)((0, import_date_fns.subMonths)(/* @__PURE__ */ new Date(), 1))
@@ -8113,34 +8204,34 @@ var RANGE_PRESETS = [
8113
8204
  },
8114
8205
  {
8115
8206
  label: "Ce mois",
8116
- icon: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(FaIcon, { name: "calendar-days", size: 15 }),
8207
+ icon: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(FaIcon, { name: "calendar-days", size: 15 }),
8117
8208
  getValue: () => [(0, import_date_fns.startOfMonth)(/* @__PURE__ */ new Date()), (0, import_date_fns.endOfMonth)(/* @__PURE__ */ new Date())]
8118
8209
  },
8119
8210
  {
8120
8211
  label: "Ce trimestre",
8121
- icon: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(FaIcon, { name: "calendar-range", size: 15 }),
8212
+ icon: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(FaIcon, { name: "calendar-range", size: 15 }),
8122
8213
  getValue: () => [(0, import_date_fns.startOfQuarter)(/* @__PURE__ */ new Date()), (0, import_date_fns.endOfQuarter)(/* @__PURE__ */ new Date())]
8123
8214
  },
8124
8215
  {
8125
8216
  label: "Cette ann\xE9e",
8126
- icon: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(FaIcon, { name: "calendar-clock", size: 15 }),
8217
+ icon: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(FaIcon, { name: "calendar-clock", size: 15 }),
8127
8218
  getValue: () => [(0, import_date_fns.startOfYear)(/* @__PURE__ */ new Date()), (0, import_date_fns.endOfYear)(/* @__PURE__ */ new Date())]
8128
8219
  }
8129
8220
  ];
8130
8221
  var SINGLE_PRESETS = [
8131
8222
  {
8132
8223
  label: "Aujourd'hui",
8133
- icon: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(FaIcon, { name: "calendar-days", size: 15 }),
8224
+ icon: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(FaIcon, { name: "calendar-days", size: 15 }),
8134
8225
  getValue: () => /* @__PURE__ */ new Date()
8135
8226
  },
8136
8227
  {
8137
8228
  label: "Demain",
8138
- icon: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(FaIcon, { name: "calendar-plus", size: 15 }),
8229
+ icon: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(FaIcon, { name: "calendar-plus", size: 15 }),
8139
8230
  getValue: () => (0, import_date_fns.addDays)(/* @__PURE__ */ new Date(), 1)
8140
8231
  },
8141
8232
  {
8142
8233
  label: "Dans 7 jours",
8143
- icon: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(FaIcon, { name: "calendar-clock", size: 15 }),
8234
+ icon: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(FaIcon, { name: "calendar-clock", size: 15 }),
8144
8235
  getValue: () => (0, import_date_fns.addDays)(/* @__PURE__ */ new Date(), 7)
8145
8236
  }
8146
8237
  ];
@@ -8187,7 +8278,7 @@ var DatePicker = ({
8187
8278
  else onChange == null ? void 0 : onChange(null);
8188
8279
  setActivePreset(null);
8189
8280
  };
8190
- const calendar = /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(RadixPopover6.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
8281
+ const calendar = /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(RadixPopover6.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
8191
8282
  RadixPopover6.Content,
8192
8283
  {
8193
8284
  align,
@@ -8197,7 +8288,7 @@ var DatePicker = ({
8197
8288
  // Les deux mois côte à côte tiennent dans ce gabarit.
8198
8289
  isRange && "max-h-[260px] max-w-[423px] overflow-auto"
8199
8290
  ),
8200
- children: isRange ? /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
8291
+ children: isRange ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
8201
8292
  import_react_day_picker.DayPicker,
8202
8293
  {
8203
8294
  mode: "range",
@@ -8216,7 +8307,7 @@ var DatePicker = ({
8216
8307
  showOutsideDays: true,
8217
8308
  formatters: { formatCaption: formatMonthCaption }
8218
8309
  }
8219
- ) : /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
8310
+ ) : /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
8220
8311
  import_react_day_picker.DayPicker,
8221
8312
  {
8222
8313
  mode: "single",
@@ -8235,8 +8326,8 @@ var DatePicker = ({
8235
8326
  }
8236
8327
  ) });
8237
8328
  if (!showPresets) {
8238
- return /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(RadixPopover6.Root, { open, onOpenChange: setOpen, children: [
8239
- /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(RadixPopover6.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
8329
+ return /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(RadixPopover6.Root, { open, onOpenChange: setOpen, children: [
8330
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(RadixPopover6.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
8240
8331
  "button",
8241
8332
  {
8242
8333
  type: "button",
@@ -8255,10 +8346,10 @@ var DatePicker = ({
8255
8346
  calendar
8256
8347
  ] });
8257
8348
  }
8258
- return /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(RadixPopover6.Root, { open, onOpenChange: setOpen, children: [
8259
- /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(Layout, { column: true, gap: 1.5, className, children: [
8260
- /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(Layout, { align: "center", gap: 1.5, children: [
8261
- /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(RadixPopover6.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
8349
+ return /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(RadixPopover6.Root, { open, onOpenChange: setOpen, children: [
8350
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(Layout, { column: true, gap: 1.5, className, children: [
8351
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(Layout, { align: "center", gap: 1.5, children: [
8352
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(RadixPopover6.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
8262
8353
  "button",
8263
8354
  {
8264
8355
  type: "button",
@@ -8268,12 +8359,12 @@ var DatePicker = ({
8268
8359
  "flex h-9 w-9 items-center justify-center rounded-[6px] border border-grey-300 bg-white text-neutral-800 transition-colors",
8269
8360
  "hover:border-blue-700 disabled:cursor-not-allowed disabled:opacity-60"
8270
8361
  ),
8271
- children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(FaIcon, { name: "calendar", size: 16 })
8362
+ children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(FaIcon, { name: "calendar", size: 16 })
8272
8363
  }
8273
8364
  ) }),
8274
8365
  resolvedPresets.map((preset) => {
8275
8366
  const active = activePreset === preset.label;
8276
- return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(Tooltip, { content: preset.label, children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
8367
+ return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(Tooltip, { content: preset.label, children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
8277
8368
  "button",
8278
8369
  {
8279
8370
  type: "button",
@@ -8290,7 +8381,7 @@ var DatePicker = ({
8290
8381
  ) }, preset.label);
8291
8382
  })
8292
8383
  ] }),
8293
- hasValue && /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
8384
+ hasValue && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
8294
8385
  "button",
8295
8386
  {
8296
8387
  type: "button",
@@ -8775,7 +8866,7 @@ var optimizeImage = async (file, desiredBaseName, opts = {}) => {
8775
8866
  // src/ui/components/ui/Tour.tsx
8776
8867
  var import_react57 = require("react");
8777
8868
  var import_driver = require("driver.js");
8778
- var import_jsx_runtime94 = require("react/jsx-runtime");
8869
+ var import_jsx_runtime95 = require("react/jsx-runtime");
8779
8870
  var TOUR_TARGET_ATTRIBUTE = "data-tour-target";
8780
8871
  var DEFAULT_LABELS = {
8781
8872
  previous: "Pr\xE9c\xE9dent",
@@ -8787,7 +8878,7 @@ var DEFAULT_LABELS = {
8787
8878
  var STAGE_PADDING = 6;
8788
8879
  var GHOST_TRANSITION_MS = 200;
8789
8880
  var HIGHLIGHT_DURATION_MS = 400;
8790
- var TourTarget = ({ id, children }) => /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("div", __spreadProps(__spreadValues({}, { [TOUR_TARGET_ATTRIBUTE]: id }), { className: "contents", children }));
8881
+ var TourTarget = ({ id, children }) => /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("div", __spreadProps(__spreadValues({}, { [TOUR_TARGET_ATTRIBUTE]: id }), { className: "contents", children }));
8791
8882
  var isContents = (element) => getComputedStyle(element).display === "contents";
8792
8883
  var measure = (element) => {
8793
8884
  if (!isContents(element)) {
@@ -9105,6 +9196,7 @@ var Tour = ({
9105
9196
  TagSelect,
9106
9197
  Text,
9107
9198
  Textarea,
9199
+ Tile,
9108
9200
  Timeline,
9109
9201
  Toaster,
9110
9202
  Tooltip,