design-zystem 1.0.316 → 1.0.317

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.
@@ -509,8 +509,15 @@ interface TableHeaderCellProps {
509
509
  /** Séparateur vertical entre colonnes. */
510
510
  borderLeft?: boolean;
511
511
  className?: string;
512
+ /** Rend la cellule triable — affiche `children` dans un bouton avec une icône
513
+ * de tri (neutre / chevron haut / chevron bas selon `isSort`+`sortOrder`). */
514
+ useSort?: boolean;
515
+ /** Cette colonne est la colonne de tri actuellement active. */
516
+ isSort?: boolean;
517
+ sortOrder?: 'asc' | 'desc' | null;
518
+ onClick?: () => void;
512
519
  }
513
- declare const TableHeaderCell: ({ children, width, sticky, stickyOffset, surface, borderLeft, className, }: TableHeaderCellProps) => react.JSX.Element;
520
+ declare const TableHeaderCell: ({ children, width, sticky, stickyOffset, surface, borderLeft, className, useSort, isSort, sortOrder, onClick, }: TableHeaderCellProps) => react.JSX.Element;
514
521
 
515
522
  interface TableRowProps {
516
523
  children?: ReactNode;
@@ -509,8 +509,15 @@ interface TableHeaderCellProps {
509
509
  /** Séparateur vertical entre colonnes. */
510
510
  borderLeft?: boolean;
511
511
  className?: string;
512
+ /** Rend la cellule triable — affiche `children` dans un bouton avec une icône
513
+ * de tri (neutre / chevron haut / chevron bas selon `isSort`+`sortOrder`). */
514
+ useSort?: boolean;
515
+ /** Cette colonne est la colonne de tri actuellement active. */
516
+ isSort?: boolean;
517
+ sortOrder?: 'asc' | 'desc' | null;
518
+ onClick?: () => void;
512
519
  }
513
- declare const TableHeaderCell: ({ children, width, sticky, stickyOffset, surface, borderLeft, className, }: TableHeaderCellProps) => react.JSX.Element;
520
+ declare const TableHeaderCell: ({ children, width, sticky, stickyOffset, surface, borderLeft, className, useSort, isSort, sortOrder, onClick, }: TableHeaderCellProps) => react.JSX.Element;
514
521
 
515
522
  interface TableRowProps {
516
523
  children?: ReactNode;
package/dist/ui/index.js CHANGED
@@ -2600,7 +2600,11 @@ var TableHeaderCell = ({
2600
2600
  stickyOffset = "0px",
2601
2601
  surface = "grey-100",
2602
2602
  borderLeft = false,
2603
- className
2603
+ className,
2604
+ useSort = false,
2605
+ isSort = false,
2606
+ sortOrder = null,
2607
+ onClick
2604
2608
  }) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
2605
2609
  "th",
2606
2610
  {
@@ -2618,7 +2622,25 @@ var TableHeaderCell = ({
2618
2622
  left: sticky === "left" ? stickyOffset : void 0,
2619
2623
  right: sticky === "right" ? stickyOffset : void 0
2620
2624
  },
2621
- children
2625
+ children: useSort ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
2626
+ "button",
2627
+ {
2628
+ type: "button",
2629
+ onClick,
2630
+ className: "inline-flex items-center gap-1",
2631
+ children: [
2632
+ children,
2633
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
2634
+ FaIcon,
2635
+ {
2636
+ name: isSort ? sortOrder === "asc" ? "chevron-up" : "chevron-down" : "sort",
2637
+ size: 10,
2638
+ className: isSort ? "text-neutral-800" : "text-grey-500"
2639
+ }
2640
+ )
2641
+ ]
2642
+ }
2643
+ ) : children
2622
2644
  }
2623
2645
  );
2624
2646
 
package/dist/ui/index.mjs CHANGED
@@ -2429,7 +2429,7 @@ import { jsx as jsx32 } from "react/jsx-runtime";
2429
2429
  var TableHeaderRow = ({ children }) => /* @__PURE__ */ jsx32("tr", { children });
2430
2430
 
2431
2431
  // src/ui/components/ui/table/TableHeaderCell.tsx
2432
- import { jsx as jsx33 } from "react/jsx-runtime";
2432
+ import { jsx as jsx33, jsxs as jsxs17 } from "react/jsx-runtime";
2433
2433
  var SURFACE_CLASS = {
2434
2434
  white: "bg-white",
2435
2435
  "grey-100": "bg-grey-100"
@@ -2441,7 +2441,11 @@ var TableHeaderCell = ({
2441
2441
  stickyOffset = "0px",
2442
2442
  surface = "grey-100",
2443
2443
  borderLeft = false,
2444
- className
2444
+ className,
2445
+ useSort = false,
2446
+ isSort = false,
2447
+ sortOrder = null,
2448
+ onClick
2445
2449
  }) => /* @__PURE__ */ jsx33(
2446
2450
  "th",
2447
2451
  {
@@ -2459,7 +2463,25 @@ var TableHeaderCell = ({
2459
2463
  left: sticky === "left" ? stickyOffset : void 0,
2460
2464
  right: sticky === "right" ? stickyOffset : void 0
2461
2465
  },
2462
- children
2466
+ children: useSort ? /* @__PURE__ */ jsxs17(
2467
+ "button",
2468
+ {
2469
+ type: "button",
2470
+ onClick,
2471
+ className: "inline-flex items-center gap-1",
2472
+ children: [
2473
+ children,
2474
+ /* @__PURE__ */ jsx33(
2475
+ FaIcon,
2476
+ {
2477
+ name: isSort ? sortOrder === "asc" ? "chevron-up" : "chevron-down" : "sort",
2478
+ size: 10,
2479
+ className: isSort ? "text-neutral-800" : "text-grey-500"
2480
+ }
2481
+ )
2482
+ ]
2483
+ }
2484
+ ) : children
2463
2485
  }
2464
2486
  );
2465
2487
 
@@ -2639,7 +2661,7 @@ var formatNameWithInitial = (firstname, lastname) => {
2639
2661
  };
2640
2662
 
2641
2663
  // src/ui/components/ui/Avatar.tsx
2642
- import { Fragment as Fragment2, jsx as jsx39, jsxs as jsxs17 } from "react/jsx-runtime";
2664
+ import { Fragment as Fragment2, jsx as jsx39, jsxs as jsxs18 } from "react/jsx-runtime";
2643
2665
  var AvatarSizeContext = createContext2(40);
2644
2666
  var useAvatarSize = () => useContext2(AvatarSizeContext);
2645
2667
  var BADGE_BG_CLASS = {
@@ -2693,7 +2715,7 @@ var Avatar = forwardRef16(
2693
2715
  ),
2694
2716
  style: __spreadValues({ width: size, height: size }, style)
2695
2717
  }, props), {
2696
- children: children != null ? children : /* @__PURE__ */ jsxs17(Fragment2, { children: [
2718
+ children: children != null ? children : /* @__PURE__ */ jsxs18(Fragment2, { children: [
2697
2719
  src && /* @__PURE__ */ jsx39(AvatarImage, { src, alt: name }),
2698
2720
  /* @__PURE__ */ jsx39(AvatarFallback, { color, children: getInitials({ name }) }),
2699
2721
  badge && /* @__PURE__ */ jsx39(AvatarBadge, { className: BADGE_BG_CLASS[badge.backgroundColor], children: /* @__PURE__ */ jsx39(
@@ -2783,7 +2805,7 @@ var AvatarGroup = (_a) => {
2783
2805
  );
2784
2806
  const visible = max ? items.slice(0, max) : items;
2785
2807
  const overflow = max ? items.length - max : 0;
2786
- return /* @__PURE__ */ jsxs17(Layout, __spreadProps(__spreadValues({ className: cn("-space-x-2", className) }, props), { children: [
2808
+ return /* @__PURE__ */ jsxs18(Layout, __spreadProps(__spreadValues({ className: cn("-space-x-2", className) }, props), { children: [
2787
2809
  visible.map(
2788
2810
  (child, index) => cloneElement(child, {
2789
2811
  key: index,
@@ -2791,7 +2813,7 @@ var AvatarGroup = (_a) => {
2791
2813
  className: cn("ring-2 ring-white", child.props.className)
2792
2814
  })
2793
2815
  ),
2794
- overflow > 0 && /* @__PURE__ */ jsxs17(
2816
+ overflow > 0 && /* @__PURE__ */ jsxs18(
2795
2817
  Layout,
2796
2818
  {
2797
2819
  align: "center",
@@ -2814,7 +2836,7 @@ var AvatarGroup = (_a) => {
2814
2836
  // src/ui/components/ui/Radio.tsx
2815
2837
  import * as RadixRadioGroup from "@radix-ui/react-radio-group";
2816
2838
  import { cva as cva11 } from "class-variance-authority";
2817
- import { jsx as jsx40, jsxs as jsxs18 } from "react/jsx-runtime";
2839
+ import { jsx as jsx40, jsxs as jsxs19 } from "react/jsx-runtime";
2818
2840
  var radioVariants = cva11(
2819
2841
  "relative h-[22px] w-[22px] shrink-0 rounded-full border-2 border-grey-300 outline-none transition-colors",
2820
2842
  {
@@ -2864,7 +2886,7 @@ var Radio = ({
2864
2886
  asChild: true,
2865
2887
  children: /* @__PURE__ */ jsx40(Layout, { column: true, gap: 2, className, width, children: items.map((item) => {
2866
2888
  const itemId = `radio-${item.value}`;
2867
- return /* @__PURE__ */ jsxs18(Layout, { row: true, gap: 2, align: "center", children: [
2889
+ return /* @__PURE__ */ jsxs19(Layout, { row: true, gap: 2, align: "center", children: [
2868
2890
  /* @__PURE__ */ jsx40(
2869
2891
  RadixRadioGroup.Item,
2870
2892
  {
@@ -2898,7 +2920,7 @@ var Radio = ({
2898
2920
  import * as RadixProgress from "@radix-ui/react-progress";
2899
2921
  import * as RadixSlider from "@radix-ui/react-slider";
2900
2922
  import { cva as cva12 } from "class-variance-authority";
2901
- import { jsx as jsx41, jsxs as jsxs19 } from "react/jsx-runtime";
2923
+ import { jsx as jsx41, jsxs as jsxs20 } from "react/jsx-runtime";
2902
2924
  var trackVariants2 = cva12(
2903
2925
  "relative w-full overflow-hidden rounded-full bg-grey-200",
2904
2926
  {
@@ -2948,9 +2970,9 @@ var ProgressBar = ({
2948
2970
  const editable = Boolean(onChange);
2949
2971
  if (!editable) {
2950
2972
  const readOnlyPercent = Math.max(0, Math.min(100, current));
2951
- return /* @__PURE__ */ jsxs19(Layout, { column: true, fullWidth: true, gap: 1, className, children: [
2973
+ return /* @__PURE__ */ jsxs20(Layout, { column: true, fullWidth: true, gap: 1, className, children: [
2952
2974
  label && /* @__PURE__ */ jsx41("span", { className: "text-xs text-grey-600", children: label }),
2953
- /* @__PURE__ */ jsxs19(Layout, { fullWidth: true, align: "center", gap: 2, children: [
2975
+ /* @__PURE__ */ jsxs20(Layout, { fullWidth: true, align: "center", gap: 2, children: [
2954
2976
  /* @__PURE__ */ jsx41(
2955
2977
  RadixProgress.Root,
2956
2978
  {
@@ -2972,7 +2994,7 @@ var ProgressBar = ({
2972
2994
  ] })
2973
2995
  ] });
2974
2996
  }
2975
- return /* @__PURE__ */ jsxs19(
2997
+ return /* @__PURE__ */ jsxs20(
2976
2998
  Layout,
2977
2999
  {
2978
3000
  column: true,
@@ -2981,7 +3003,7 @@ var ProgressBar = ({
2981
3003
  className: cn(disabled && "cursor-not-allowed opacity-60", className),
2982
3004
  children: [
2983
3005
  label && /* @__PURE__ */ jsx41("span", { className: "text-xs text-grey-600", children: label }),
2984
- /* @__PURE__ */ jsxs19("div", { className: "relative w-full pt-6", children: [
3006
+ /* @__PURE__ */ jsxs20("div", { className: "relative w-full pt-6", children: [
2985
3007
  showLabel && /* @__PURE__ */ jsx41(
2986
3008
  "span",
2987
3009
  {
@@ -2990,7 +3012,7 @@ var ProgressBar = ({
2990
3012
  children: display(current)
2991
3013
  }
2992
3014
  ),
2993
- /* @__PURE__ */ jsxs19(
3015
+ /* @__PURE__ */ jsxs20(
2994
3016
  RadixSlider.Root,
2995
3017
  {
2996
3018
  value: [current],
@@ -3021,7 +3043,7 @@ var ProgressBar = ({
3021
3043
  }
3022
3044
  )
3023
3045
  ] }),
3024
- showLabel && /* @__PURE__ */ jsxs19(Layout, { align: "center", justify: "between", children: [
3046
+ showLabel && /* @__PURE__ */ jsxs20(Layout, { align: "center", justify: "between", children: [
3025
3047
  /* @__PURE__ */ jsx41("span", { className: "text-xs text-grey-600", children: display(min) }),
3026
3048
  /* @__PURE__ */ jsx41("span", { className: "text-xs text-grey-600", children: display(max) })
3027
3049
  ] })
@@ -3051,7 +3073,7 @@ var CollapsibleContent = (_a) => {
3051
3073
 
3052
3074
  // src/ui/components/ui/Drawer.tsx
3053
3075
  import { Drawer as VaulDrawer } from "vaul";
3054
- import { jsx as jsx43, jsxs as jsxs20 } from "react/jsx-runtime";
3076
+ import { jsx as jsx43, jsxs as jsxs21 } from "react/jsx-runtime";
3055
3077
  var CONTENT_POSITION = {
3056
3078
  top: "inset-x-4 top-4 rounded-2xl",
3057
3079
  bottom: "inset-x-4 bottom-4 rounded-2xl",
@@ -3073,7 +3095,7 @@ var Drawer = ({
3073
3095
  direction,
3074
3096
  open,
3075
3097
  onOpenChange: (next) => !next && (onClose == null ? void 0 : onClose()),
3076
- children: /* @__PURE__ */ jsxs20(VaulDrawer.Portal, { children: [
3098
+ children: /* @__PURE__ */ jsxs21(VaulDrawer.Portal, { children: [
3077
3099
  /* @__PURE__ */ jsx43(VaulDrawer.Overlay, { className: "fixed inset-0 z-40 bg-black/35" }),
3078
3100
  /* @__PURE__ */ jsx43(
3079
3101
  VaulDrawer.Content,
@@ -3156,7 +3178,7 @@ var DrawerClose = VaulDrawer.Close;
3156
3178
 
3157
3179
  // src/ui/components/ui/Popover.tsx
3158
3180
  import * as RadixPopover3 from "@radix-ui/react-popover";
3159
- import { jsx as jsx44, jsxs as jsxs21 } from "react/jsx-runtime";
3181
+ import { jsx as jsx44, jsxs as jsxs22 } from "react/jsx-runtime";
3160
3182
  var Popover = ({
3161
3183
  trigger,
3162
3184
  items,
@@ -3164,7 +3186,7 @@ var Popover = ({
3164
3186
  align = "end",
3165
3187
  side = "bottom",
3166
3188
  className
3167
- }) => /* @__PURE__ */ jsxs21(RadixPopover3.Root, { children: [
3189
+ }) => /* @__PURE__ */ jsxs22(RadixPopover3.Root, { children: [
3168
3190
  /* @__PURE__ */ jsx44(RadixPopover3.Trigger, { asChild: true, children: trigger }),
3169
3191
  /* @__PURE__ */ jsx44(RadixPopover3.Portal, { children: /* @__PURE__ */ jsx44(
3170
3192
  RadixPopover3.Content,
@@ -3192,16 +3214,16 @@ var Popover = ({
3192
3214
 
3193
3215
  // src/ui/components/ui/Tooltip.tsx
3194
3216
  import * as RadixTooltip from "@radix-ui/react-tooltip";
3195
- import { jsx as jsx45, jsxs as jsxs22 } from "react/jsx-runtime";
3217
+ import { jsx as jsx45, jsxs as jsxs23 } from "react/jsx-runtime";
3196
3218
  var Tooltip = ({
3197
3219
  children,
3198
3220
  content,
3199
3221
  side = "top",
3200
3222
  align = "center",
3201
3223
  className
3202
- }) => /* @__PURE__ */ jsx45(RadixTooltip.Provider, { delayDuration: 200, children: /* @__PURE__ */ jsxs22(RadixTooltip.Root, { children: [
3224
+ }) => /* @__PURE__ */ jsx45(RadixTooltip.Provider, { delayDuration: 200, children: /* @__PURE__ */ jsxs23(RadixTooltip.Root, { children: [
3203
3225
  /* @__PURE__ */ jsx45(RadixTooltip.Trigger, { asChild: true, children }),
3204
- /* @__PURE__ */ jsx45(RadixTooltip.Portal, { children: /* @__PURE__ */ jsxs22(
3226
+ /* @__PURE__ */ jsx45(RadixTooltip.Portal, { children: /* @__PURE__ */ jsxs23(
3205
3227
  RadixTooltip.Content,
3206
3228
  {
3207
3229
  side,
@@ -3230,7 +3252,7 @@ import { toast as sonnerToast2 } from "sonner";
3230
3252
 
3231
3253
  // src/ui/components/ui/ToastCard.tsx
3232
3254
  import { toast as sonnerToast } from "sonner";
3233
- import { jsx as jsx47, jsxs as jsxs23 } from "react/jsx-runtime";
3255
+ import { jsx as jsx47, jsxs as jsxs24 } from "react/jsx-runtime";
3234
3256
  var ICON = {
3235
3257
  success: "circle-check",
3236
3258
  error: "circle-xmark",
@@ -3267,7 +3289,7 @@ var ToastCard = ({
3267
3289
  title,
3268
3290
  message,
3269
3291
  timeOut
3270
- }) => /* @__PURE__ */ jsxs23(
3292
+ }) => /* @__PURE__ */ jsxs24(
3271
3293
  Layout,
3272
3294
  {
3273
3295
  align: "start",
@@ -3296,7 +3318,7 @@ var ToastCard = ({
3296
3318
  )
3297
3319
  }
3298
3320
  ),
3299
- /* @__PURE__ */ jsxs23(Layout, { column: true, flex: 1, gap: 0.5, className: "min-w-0", children: [
3321
+ /* @__PURE__ */ jsxs24(Layout, { column: true, flex: 1, gap: 0.5, className: "min-w-0", children: [
3300
3322
  title && /* @__PURE__ */ jsx47("p", { className: "text-sm font-bold text-neutral-800", children: title }),
3301
3323
  /* @__PURE__ */ jsx47("p", { className: "text-sm text-neutral-800", children: message })
3302
3324
  ] }),
@@ -3387,7 +3409,7 @@ PageContainer.displayName = "PageContainer";
3387
3409
 
3388
3410
  // src/ui/components/ui/IconTabs.tsx
3389
3411
  import { useCallback as useCallback2, useEffect as useEffect5, useRef as useRef6, useState as useState6 } from "react";
3390
- import { jsx as jsx50, jsxs as jsxs24 } from "react/jsx-runtime";
3412
+ import { jsx as jsx50, jsxs as jsxs25 } from "react/jsx-runtime";
3391
3413
  var IconTabs = ({
3392
3414
  items,
3393
3415
  value,
@@ -3418,8 +3440,8 @@ var IconTabs = ({
3418
3440
  if (listRef.current) ro.observe(listRef.current);
3419
3441
  return () => ro.disconnect();
3420
3442
  }, [updateBar]);
3421
- return /* @__PURE__ */ jsxs24(Layout, { column: true, className, children: [
3422
- /* @__PURE__ */ jsxs24(
3443
+ return /* @__PURE__ */ jsxs25(Layout, { column: true, className, children: [
3444
+ /* @__PURE__ */ jsxs25(
3423
3445
  Layout,
3424
3446
  {
3425
3447
  ref: listRef,
@@ -3478,7 +3500,7 @@ var IconTabs = ({
3478
3500
 
3479
3501
  // src/ui/components/ui/Banner.tsx
3480
3502
  import { cva as cva14 } from "class-variance-authority";
3481
- import { jsx as jsx51, jsxs as jsxs25 } from "react/jsx-runtime";
3503
+ import { jsx as jsx51, jsxs as jsxs26 } from "react/jsx-runtime";
3482
3504
  var bannerVariants = cva14("rounded-[6px] border px-4 py-2", {
3483
3505
  variants: {
3484
3506
  tone: {
@@ -3504,7 +3526,7 @@ var Banner = ({
3504
3526
  fullWidth,
3505
3527
  width,
3506
3528
  className
3507
- }) => /* @__PURE__ */ jsxs25(
3529
+ }) => /* @__PURE__ */ jsxs26(
3508
3530
  Layout,
3509
3531
  {
3510
3532
  role: "alert",
@@ -3515,8 +3537,8 @@ var Banner = ({
3515
3537
  width,
3516
3538
  className: cn(bannerVariants({ tone }), className),
3517
3539
  children: [
3518
- children ? children : message ? /* @__PURE__ */ jsx51(Text, { size: "s", children: message }) : /* @__PURE__ */ jsxs25(Layout, { column: true, align: "start", gap: 1, children: [
3519
- /* @__PURE__ */ jsxs25(Layout, { align: "center", gap: 2, children: [
3540
+ children ? children : message ? /* @__PURE__ */ jsx51(Text, { size: "s", children: message }) : /* @__PURE__ */ jsxs26(Layout, { column: true, align: "start", gap: 1, children: [
3541
+ /* @__PURE__ */ jsxs26(Layout, { align: "center", gap: 2, children: [
3520
3542
  badge && /* @__PURE__ */ jsx51(Badge, { color: tone != null ? tone : "blue-700", size: "xs", children: badge }),
3521
3543
  title && /* @__PURE__ */ jsx51(
3522
3544
  Text,
@@ -3537,7 +3559,7 @@ var Banner = ({
3537
3559
  onChange: toggle.onChange,
3538
3560
  disabled: toggle.disabled
3539
3561
  }
3540
- ) : action && /* @__PURE__ */ jsxs25(
3562
+ ) : action && /* @__PURE__ */ jsxs26(
3541
3563
  Button,
3542
3564
  {
3543
3565
  look: "outline",
@@ -3560,7 +3582,7 @@ import {
3560
3582
  useRef as useRef7,
3561
3583
  useState as useState7
3562
3584
  } from "react";
3563
- import { jsx as jsx52, jsxs as jsxs26 } from "react/jsx-runtime";
3585
+ import { jsx as jsx52, jsxs as jsxs27 } from "react/jsx-runtime";
3564
3586
  var readStoredOffset = (key) => {
3565
3587
  if (!key || typeof window === "undefined") return { x: 0, y: 0 };
3566
3588
  try {
@@ -3663,7 +3685,7 @@ var FloatingButton = ({
3663
3685
  if (draggable && dragDistanceRef.current > DRAG_THRESHOLD) return;
3664
3686
  onToggle();
3665
3687
  };
3666
- return /* @__PURE__ */ jsxs26(
3688
+ return /* @__PURE__ */ jsxs27(
3667
3689
  "div",
3668
3690
  {
3669
3691
  className: "fixed bottom-8 right-8 z-[1000]",
@@ -3676,7 +3698,7 @@ var FloatingButton = ({
3676
3698
  children: [
3677
3699
  actions.map((action, index) => {
3678
3700
  var _a;
3679
- return /* @__PURE__ */ jsxs26(
3701
+ return /* @__PURE__ */ jsxs27(
3680
3702
  "button",
3681
3703
  {
3682
3704
  type: "button",
@@ -3701,7 +3723,7 @@ var FloatingButton = ({
3701
3723
  action.id
3702
3724
  );
3703
3725
  }),
3704
- /* @__PURE__ */ jsxs26(
3726
+ /* @__PURE__ */ jsxs27(
3705
3727
  "button",
3706
3728
  {
3707
3729
  type: "button",
@@ -3729,7 +3751,7 @@ var FloatingButton = ({
3729
3751
  };
3730
3752
 
3731
3753
  // src/ui/components/ui/MetricCard.tsx
3732
- import { jsx as jsx53, jsxs as jsxs27 } from "react/jsx-runtime";
3754
+ import { jsx as jsx53, jsxs as jsxs28 } from "react/jsx-runtime";
3733
3755
  var ICON_WRAP_CLASS = {
3734
3756
  "blue-700": "bg-blue-50 text-blue-700",
3735
3757
  "blue-900": "bg-blue-50 text-blue-900",
@@ -3761,7 +3783,7 @@ var MetricCard = ({
3761
3783
  selected && "border-blue-700",
3762
3784
  className
3763
3785
  ),
3764
- children: /* @__PURE__ */ jsxs27(Layout, { align: "center", gap: 3, fullWidth: true, children: [
3786
+ children: /* @__PURE__ */ jsxs28(Layout, { align: "center", gap: 3, fullWidth: true, children: [
3765
3787
  /* @__PURE__ */ jsx53(
3766
3788
  "span",
3767
3789
  {
@@ -3772,12 +3794,12 @@ var MetricCard = ({
3772
3794
  children: /* @__PURE__ */ jsx53("i", { className: `fa-${iconFamily} fa-${icon}`, style: { fontSize: 18 } })
3773
3795
  }
3774
3796
  ),
3775
- children ? children : layout === "row" ? /* @__PURE__ */ jsxs27(Layout, { align: "center", gap: 1, children: [
3797
+ children ? children : layout === "row" ? /* @__PURE__ */ jsxs28(Layout, { align: "center", gap: 1, children: [
3776
3798
  /* @__PURE__ */ jsx53(Text, { size: "s", weight: "bold", color: valueColor, children: value }),
3777
3799
  /* @__PURE__ */ jsx53(Text, { size: "s", color: "grey-600", children: title })
3778
- ] }) : /* @__PURE__ */ jsxs27(Layout, { column: true, gap: 1, children: [
3800
+ ] }) : /* @__PURE__ */ jsxs28(Layout, { column: true, gap: 1, children: [
3779
3801
  /* @__PURE__ */ jsx53(Text, { size: "s", color: "grey-600", children: title }),
3780
- /* @__PURE__ */ jsxs27(Layout, { align: "baseline", gap: 1, children: [
3802
+ /* @__PURE__ */ jsxs28(Layout, { align: "baseline", gap: 1, children: [
3781
3803
  /* @__PURE__ */ jsx53(Text, { size: "s", weight: "bold", color: valueColor, children: value }),
3782
3804
  subtitle && /* @__PURE__ */ jsx53(Text, { size: "xs", color: "grey-600", children: subtitle })
3783
3805
  ] })
@@ -3818,7 +3840,7 @@ var Skeleton = (_a) => {
3818
3840
 
3819
3841
  // src/ui/components/ui/TagBubble.tsx
3820
3842
  import * as RadixToggle from "@radix-ui/react-toggle";
3821
- import { jsx as jsx55, jsxs as jsxs28 } from "react/jsx-runtime";
3843
+ import { jsx as jsx55, jsxs as jsxs29 } from "react/jsx-runtime";
3822
3844
  var DOT_CLASS = {
3823
3845
  "blue-700": "bg-blue-700",
3824
3846
  "blue-900": "bg-blue-900",
@@ -3839,7 +3861,7 @@ var TagBubble = ({
3839
3861
  className
3840
3862
  }) => {
3841
3863
  const showCount = count !== void 0 && count !== null;
3842
- return /* @__PURE__ */ jsxs28(
3864
+ return /* @__PURE__ */ jsxs29(
3843
3865
  RadixToggle.Root,
3844
3866
  {
3845
3867
  type: "button",
@@ -3868,7 +3890,7 @@ var TagBubble = ({
3868
3890
  };
3869
3891
 
3870
3892
  // src/ui/components/ui/Gantt.tsx
3871
- import { jsx as jsx56, jsxs as jsxs29 } from "react/jsx-runtime";
3893
+ import { jsx as jsx56, jsxs as jsxs30 } from "react/jsx-runtime";
3872
3894
  var Gantt = ({
3873
3895
  days,
3874
3896
  rows,
@@ -3884,7 +3906,7 @@ var Gantt = ({
3884
3906
  const bodyHeight = rows.length * rowHeight;
3885
3907
  const clickable = Boolean(onRowClick);
3886
3908
  const gridCols = { gridTemplateColumns: `${labelWidth}px minmax(0, 1fr)` };
3887
- return /* @__PURE__ */ jsxs29(
3909
+ return /* @__PURE__ */ jsxs30(
3888
3910
  "div",
3889
3911
  {
3890
3912
  className: cn(
@@ -3892,7 +3914,7 @@ var Gantt = ({
3892
3914
  className
3893
3915
  ),
3894
3916
  children: [
3895
- /* @__PURE__ */ jsxs29(
3917
+ /* @__PURE__ */ jsxs30(
3896
3918
  "div",
3897
3919
  {
3898
3920
  className: "grid border-b border-grey-300 bg-grey-100",
@@ -3920,7 +3942,7 @@ var Gantt = ({
3920
3942
  ]
3921
3943
  }
3922
3944
  ),
3923
- /* @__PURE__ */ jsxs29(
3945
+ /* @__PURE__ */ jsxs30(
3924
3946
  "div",
3925
3947
  {
3926
3948
  className: "grid overflow-y-auto overflow-x-hidden",
@@ -3943,7 +3965,7 @@ var Gantt = ({
3943
3965
  },
3944
3966
  row.key
3945
3967
  )) }),
3946
- /* @__PURE__ */ jsx56("div", { className: "min-w-0 overflow-hidden", children: /* @__PURE__ */ jsxs29("div", { className: "relative w-full", style: { height: bodyHeight }, children: [
3968
+ /* @__PURE__ */ jsx56("div", { className: "min-w-0 overflow-hidden", children: /* @__PURE__ */ jsxs30("div", { className: "relative w-full", style: { height: bodyHeight }, children: [
3947
3969
  days.map((day, i) => /* @__PURE__ */ jsx56(
3948
3970
  "div",
3949
3971
  {
@@ -4030,7 +4052,7 @@ var GanttSwatch = ({
4030
4052
  );
4031
4053
 
4032
4054
  // src/ui/components/ui/Bulk.tsx
4033
- import { jsx as jsx57, jsxs as jsxs30 } from "react/jsx-runtime";
4055
+ import { jsx as jsx57, jsxs as jsxs31 } from "react/jsx-runtime";
4034
4056
  var BG_CLASS = {
4035
4057
  "blue-700": "bg-blue-700",
4036
4058
  "blue-900": "bg-blue-900",
@@ -4045,7 +4067,7 @@ var Bulk = ({
4045
4067
  sections,
4046
4068
  color = "blue-700",
4047
4069
  className
4048
- }) => /* @__PURE__ */ jsxs30(
4070
+ }) => /* @__PURE__ */ jsxs31(
4049
4071
  "div",
4050
4072
  {
4051
4073
  className: cn(
@@ -4054,7 +4076,7 @@ var Bulk = ({
4054
4076
  className
4055
4077
  ),
4056
4078
  children: [
4057
- leftTitle && /* @__PURE__ */ jsxs30(Layout, { align: "center", gap: 6, className: "pr-6", children: [
4079
+ leftTitle && /* @__PURE__ */ jsxs31(Layout, { align: "center", gap: 6, className: "pr-6", children: [
4058
4080
  /* @__PURE__ */ jsx57(
4059
4081
  "button",
4060
4082
  {
@@ -4075,7 +4097,7 @@ var Bulk = ({
4075
4097
  fullHeight: true,
4076
4098
  align: "stretch",
4077
4099
  className: "[&>button:not(:last-child)]:rounded-r-none",
4078
- children: sections.map((section) => /* @__PURE__ */ jsxs30(
4100
+ children: sections.map((section) => /* @__PURE__ */ jsxs31(
4079
4101
  "button",
4080
4102
  {
4081
4103
  type: "button",
@@ -4099,7 +4121,7 @@ var Bulk = ({
4099
4121
  );
4100
4122
 
4101
4123
  // src/ui/components/ui/Timeline.tsx
4102
- import { jsx as jsx58, jsxs as jsxs31 } from "react/jsx-runtime";
4124
+ import { jsx as jsx58, jsxs as jsxs32 } from "react/jsx-runtime";
4103
4125
  var Timeline = ({
4104
4126
  items,
4105
4127
  lineColor = "#F1F5F9",
@@ -4113,8 +4135,8 @@ var Timeline = ({
4113
4135
  var _a;
4114
4136
  const isLast = index === items.length - 1;
4115
4137
  const dotColor = (_a = item.color) != null ? _a : "#377EA1";
4116
- return /* @__PURE__ */ jsxs31(Layout, { gap: 3, children: [
4117
- /* @__PURE__ */ jsxs31(Layout, { column: true, align: "center", className: "w-4", children: [
4138
+ return /* @__PURE__ */ jsxs32(Layout, { gap: 3, children: [
4139
+ /* @__PURE__ */ jsxs32(Layout, { column: true, align: "center", className: "w-4", children: [
4118
4140
  /* @__PURE__ */ jsx58(
4119
4141
  "span",
4120
4142
  {
@@ -4130,7 +4152,7 @@ var Timeline = ({
4130
4152
  }
4131
4153
  )
4132
4154
  ] }),
4133
- /* @__PURE__ */ jsxs31(Layout, { column: true, gap: 0.5, className: isLast ? void 0 : "pb-4", children: [
4155
+ /* @__PURE__ */ jsxs32(Layout, { column: true, gap: 0.5, className: isLast ? void 0 : "pb-4", children: [
4134
4156
  /* @__PURE__ */ jsx58(Text, { size: "s", weight: item.highlighted ? "bold" : "semibold", children: item.title }),
4135
4157
  item.subtitle && /* @__PURE__ */ jsx58(Text, { size: "xs", color: "grey-600", children: item.subtitle }),
4136
4158
  item.description && /* @__PURE__ */ jsx58("span", { className: "text-xs italic text-neutral-800", children: item.description })
@@ -4142,7 +4164,7 @@ var Timeline = ({
4142
4164
  // src/ui/components/ui/ColorPicker.tsx
4143
4165
  import { forwardRef as forwardRef18, useState as useState8 } from "react";
4144
4166
  import { cva as cva15 } from "class-variance-authority";
4145
- import { jsx as jsx59, jsxs as jsxs32 } from "react/jsx-runtime";
4167
+ import { jsx as jsx59, jsxs as jsxs33 } from "react/jsx-runtime";
4146
4168
  var swatchVariants = cva15(
4147
4169
  "inline-flex shrink-0 overflow-hidden rounded-[6px] border border-grey-300",
4148
4170
  {
@@ -4186,7 +4208,7 @@ var ColorPicker = forwardRef18(
4186
4208
  if (value === void 0) setInternalColor(next);
4187
4209
  onChange == null ? void 0 : onChange(next);
4188
4210
  };
4189
- return /* @__PURE__ */ jsxs32(
4211
+ return /* @__PURE__ */ jsxs33(
4190
4212
  Layout,
4191
4213
  {
4192
4214
  column: true,
@@ -4195,7 +4217,7 @@ var ColorPicker = forwardRef18(
4195
4217
  className: cn(disabled && "opacity-60", className),
4196
4218
  children: [
4197
4219
  label && /* @__PURE__ */ jsx59("span", { className: "text-xs font-semibold text-neutral-800", children: label }),
4198
- /* @__PURE__ */ jsxs32(Layout, { gap: 2, children: [
4220
+ /* @__PURE__ */ jsxs33(Layout, { gap: 2, children: [
4199
4221
  /* @__PURE__ */ jsx59(
4200
4222
  "label",
4201
4223
  {
@@ -4244,7 +4266,7 @@ ColorPicker.displayName = "ColorPicker";
4244
4266
 
4245
4267
  // src/ui/components/ui/FileUploadZone.tsx
4246
4268
  import { useCallback as useCallback3, useRef as useRef8, useState as useState9 } from "react";
4247
- import { Fragment as Fragment3, jsx as jsx60, jsxs as jsxs33 } from "react/jsx-runtime";
4269
+ import { Fragment as Fragment3, jsx as jsx60, jsxs as jsxs34 } from "react/jsx-runtime";
4248
4270
  var ACCEPT_MAP = {
4249
4271
  png: "image/png",
4250
4272
  jpg: "image/jpeg",
@@ -4372,7 +4394,7 @@ var FileUploadZone = ({
4372
4394
  onRemove == null ? void 0 : onRemove();
4373
4395
  };
4374
4396
  if (previewUrl) {
4375
- return /* @__PURE__ */ jsxs33(
4397
+ return /* @__PURE__ */ jsxs34(
4376
4398
  Layout,
4377
4399
  {
4378
4400
  column: true,
@@ -4414,14 +4436,14 @@ var FileUploadZone = ({
4414
4436
  );
4415
4437
  }
4416
4438
  const showBrowse = !compact && browseLabel !== false;
4417
- return /* @__PURE__ */ jsxs33(
4439
+ return /* @__PURE__ */ jsxs34(
4418
4440
  Layout,
4419
4441
  {
4420
4442
  column: true,
4421
4443
  gap: 1,
4422
4444
  className: cn(fullWidth ? "w-full" : "w-fit", className),
4423
4445
  children: [
4424
- /* @__PURE__ */ jsxs33(
4446
+ /* @__PURE__ */ jsxs34(
4425
4447
  "label",
4426
4448
  {
4427
4449
  onDragOver: handleDragOver,
@@ -4449,7 +4471,7 @@ var FileUploadZone = ({
4449
4471
  ),
4450
4472
  showIcon && /* @__PURE__ */ jsx60(FaIcon, { name: "cloud-arrow-up", size: 28, className: "text-blue-700" }),
4451
4473
  /* @__PURE__ */ jsx60("span", { className: "text-center text-sm text-grey-600", children: label }),
4452
- showBrowse && /* @__PURE__ */ jsxs33(Fragment3, { children: [
4474
+ showBrowse && /* @__PURE__ */ jsxs34(Fragment3, { children: [
4453
4475
  /* @__PURE__ */ jsx60("span", { className: "text-center text-xs text-grey-600", children: "ou" }),
4454
4476
  /* @__PURE__ */ jsx60(
4455
4477
  Button,
@@ -4469,7 +4491,7 @@ var FileUploadZone = ({
4469
4491
  ]
4470
4492
  }
4471
4493
  ),
4472
- showFileName && fileName && /* @__PURE__ */ jsxs33(Layout, { align: "center", justify: "center", gap: 2, children: [
4494
+ showFileName && fileName && /* @__PURE__ */ jsxs34(Layout, { align: "center", justify: "center", gap: 2, children: [
4473
4495
  /* @__PURE__ */ jsx60(FaIcon, { name: "file", size: 16, className: "text-green-700" }),
4474
4496
  /* @__PURE__ */ jsx60("span", { className: "text-sm text-green-700", children: fileName })
4475
4497
  ] }),
@@ -4582,7 +4604,7 @@ var ItemActions = (_a) => {
4582
4604
  };
4583
4605
 
4584
4606
  // src/ui/components/ui/Attachment.tsx
4585
- import { jsx as jsx62, jsxs as jsxs34 } from "react/jsx-runtime";
4607
+ import { jsx as jsx62, jsxs as jsxs35 } from "react/jsx-runtime";
4586
4608
  var Attachment = ({
4587
4609
  name,
4588
4610
  size,
@@ -4596,7 +4618,7 @@ var Attachment = ({
4596
4618
  }) => {
4597
4619
  const isUploading = status === "uploading";
4598
4620
  const isError = status === "error";
4599
- return /* @__PURE__ */ jsxs34(
4621
+ return /* @__PURE__ */ jsxs35(
4600
4622
  Item3,
4601
4623
  {
4602
4624
  variant: "outline",
@@ -4623,15 +4645,15 @@ var Attachment = ({
4623
4645
  )
4624
4646
  }
4625
4647
  ),
4626
- /* @__PURE__ */ jsxs34(ItemContent, { children: [
4648
+ /* @__PURE__ */ jsxs35(ItemContent, { children: [
4627
4649
  /* @__PURE__ */ jsx62(ItemTitle, { children: name }),
4628
- isUploading ? /* @__PURE__ */ jsxs34(ItemDescription, { className: "text-xs", children: [
4650
+ isUploading ? /* @__PURE__ */ jsxs35(ItemDescription, { className: "text-xs", children: [
4629
4651
  "Uploading - ",
4630
4652
  progress,
4631
4653
  "%"
4632
4654
  ] }) : isError ? /* @__PURE__ */ jsx62(ItemDescription, { className: "text-xs text-red-900", children: errorMessage }) : size && /* @__PURE__ */ jsx62(ItemDescription, { className: "text-xs", children: size })
4633
4655
  ] }),
4634
- (onRetry || onRemove) && /* @__PURE__ */ jsxs34(ItemActions, { children: [
4656
+ (onRetry || onRemove) && /* @__PURE__ */ jsxs35(ItemActions, { children: [
4635
4657
  isError && onRetry && /* @__PURE__ */ jsx62(
4636
4658
  "button",
4637
4659
  {
@@ -4661,7 +4683,7 @@ var Attachment = ({
4661
4683
  // src/ui/components/ui/PdfPreview.tsx
4662
4684
  import { useState as useState10 } from "react";
4663
4685
  import { Document, Page, pdfjs } from "react-pdf";
4664
- import { jsx as jsx63, jsxs as jsxs35 } from "react/jsx-runtime";
4686
+ import { jsx as jsx63, jsxs as jsxs36 } from "react/jsx-runtime";
4665
4687
  pdfjs.GlobalWorkerOptions.workerSrc = `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;
4666
4688
  var PdfPreview = ({
4667
4689
  file,
@@ -4674,7 +4696,7 @@ var PdfPreview = ({
4674
4696
  const height = Math.round(width * 1.3);
4675
4697
  const thumbnailSkeleton = /* @__PURE__ */ jsx63(Skeleton, { width, height });
4676
4698
  if (hasError) {
4677
- return /* @__PURE__ */ jsxs35(
4699
+ return /* @__PURE__ */ jsxs36(
4678
4700
  Layout,
4679
4701
  {
4680
4702
  column: true,
@@ -4727,7 +4749,7 @@ var PdfPreview = ({
4727
4749
 
4728
4750
  // src/ui/components/ui/ScrollArea.tsx
4729
4751
  import * as RadixScrollArea from "@radix-ui/react-scroll-area";
4730
- import { jsx as jsx64, jsxs as jsxs36 } from "react/jsx-runtime";
4752
+ import { jsx as jsx64, jsxs as jsxs37 } from "react/jsx-runtime";
4731
4753
  var ScrollArea = (_a) => {
4732
4754
  var _b = _a, {
4733
4755
  children,
@@ -4738,7 +4760,7 @@ var ScrollArea = (_a) => {
4738
4760
  "className",
4739
4761
  "orientation"
4740
4762
  ]);
4741
- return /* @__PURE__ */ jsxs36(
4763
+ return /* @__PURE__ */ jsxs37(
4742
4764
  RadixScrollArea.Root,
4743
4765
  __spreadProps(__spreadValues({
4744
4766
  className: cn("relative overflow-hidden", className)
@@ -4769,7 +4791,7 @@ var ScrollArea = (_a) => {
4769
4791
 
4770
4792
  // src/ui/components/ui/Stepper.tsx
4771
4793
  import { Fragment as Fragment4 } from "react";
4772
- import { jsx as jsx65, jsxs as jsxs37 } from "react/jsx-runtime";
4794
+ import { jsx as jsx65, jsxs as jsxs38 } from "react/jsx-runtime";
4773
4795
  var Stepper = ({
4774
4796
  numberOfSteps,
4775
4797
  current = 0,
@@ -4786,7 +4808,7 @@ var Stepper = ({
4786
4808
  children: Array.from({ length: numberOfSteps }, (_, i) => {
4787
4809
  const isActive = i === current;
4788
4810
  const isCompleted = i < current;
4789
- return /* @__PURE__ */ jsxs37(Fragment4, { children: [
4811
+ return /* @__PURE__ */ jsxs38(Fragment4, { children: [
4790
4812
  /* @__PURE__ */ jsx65(
4791
4813
  "div",
4792
4814
  {
@@ -4822,7 +4844,7 @@ import {
4822
4844
  } from "date-fns";
4823
4845
  import { fr as dateFnsFr } from "date-fns/locale";
4824
4846
  import * as RadixPopover4 from "@radix-ui/react-popover";
4825
- import { jsx as jsx66, jsxs as jsxs38 } from "react/jsx-runtime";
4847
+ import { jsx as jsx66, jsxs as jsxs39 } from "react/jsx-runtime";
4826
4848
  var formatMonthCaption = (month) => format(month, "MMM yyyy", { locale: dateFnsFr });
4827
4849
  var RANGE_PRESETS = [
4828
4850
  {
@@ -4949,7 +4971,7 @@ var DatePicker = ({
4949
4971
  }
4950
4972
  ) });
4951
4973
  if (!showPresets) {
4952
- return /* @__PURE__ */ jsxs38(RadixPopover4.Root, { open, onOpenChange: setOpen, children: [
4974
+ return /* @__PURE__ */ jsxs39(RadixPopover4.Root, { open, onOpenChange: setOpen, children: [
4953
4975
  /* @__PURE__ */ jsx66(RadixPopover4.Trigger, { asChild: true, children: /* @__PURE__ */ jsx66(
4954
4976
  "button",
4955
4977
  {
@@ -4969,9 +4991,9 @@ var DatePicker = ({
4969
4991
  calendar
4970
4992
  ] });
4971
4993
  }
4972
- return /* @__PURE__ */ jsxs38(RadixPopover4.Root, { open, onOpenChange: setOpen, children: [
4973
- /* @__PURE__ */ jsxs38(Layout, { column: true, gap: 1.5, className, children: [
4974
- /* @__PURE__ */ jsxs38(Layout, { align: "center", gap: 1.5, children: [
4994
+ return /* @__PURE__ */ jsxs39(RadixPopover4.Root, { open, onOpenChange: setOpen, children: [
4995
+ /* @__PURE__ */ jsxs39(Layout, { column: true, gap: 1.5, className, children: [
4996
+ /* @__PURE__ */ jsxs39(Layout, { align: "center", gap: 1.5, children: [
4975
4997
  /* @__PURE__ */ jsx66(RadixPopover4.Trigger, { asChild: true, children: /* @__PURE__ */ jsx66(
4976
4998
  "button",
4977
4999
  {
@@ -5004,7 +5026,7 @@ var DatePicker = ({
5004
5026
  ) }, preset.label);
5005
5027
  })
5006
5028
  ] }),
5007
- hasValue && /* @__PURE__ */ jsxs38(
5029
+ hasValue && /* @__PURE__ */ jsxs39(
5008
5030
  "button",
5009
5031
  {
5010
5032
  type: "button",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "design-zystem",
3
- "version": "1.0.316",
3
+ "version": "1.0.317",
4
4
  "description": "A React design system of importable components",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",