@l3mpire/ui 3.2.1 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -202,7 +202,7 @@ function cn(...inputs) {
202
202
  }
203
203
 
204
204
  // src/components/ui/browser-tab.tsx
205
- var React3 = __toESM(require("react"));
205
+ var React4 = __toESM(require("react"));
206
206
  var DropdownMenuPrimitive = __toESM(require("@radix-ui/react-dropdown-menu"));
207
207
  var import_icons3 = require("@l3mpire/icons");
208
208
 
@@ -231,19 +231,19 @@ var badgeVariants = (0, import_class_variance_authority.cva)(
231
231
  warning: "",
232
232
  neutral: ""
233
233
  },
234
- // Categorical tones self-contained soft style (bg + text + border).
235
- // When `tone` is set it overrides variant/type (handled in the component).
234
+ // Categorical palette. Colors come from {variant, tone} compound variants below,
235
+ // so a tone combines with solid / light / outlined just like `type` does.
236
236
  tone: {
237
- indigo: "bg-badge-indigo-bg text-badge-indigo-text border-badge-indigo-border",
238
- rose: "bg-badge-rose-bg text-badge-rose-text border-badge-rose-border",
239
- lime: "bg-badge-lime-bg text-badge-lime-text border-badge-lime-border",
240
- violet: "bg-badge-violet-bg text-badge-violet-text border-badge-violet-border",
241
- cyan: "bg-badge-cyan-bg text-badge-cyan-text border-badge-cyan-border",
242
- orange: "bg-badge-orange-bg text-badge-orange-text border-badge-orange-border",
243
- emerald: "bg-badge-emerald-bg text-badge-emerald-text border-badge-emerald-border",
244
- fuchsia: "bg-badge-fuchsia-bg text-badge-fuchsia-text border-badge-fuchsia-border",
245
- amber: "bg-badge-amber-bg text-badge-amber-text border-badge-amber-border",
246
- slate: "bg-badge-slate-bg text-badge-slate-text border-badge-slate-border"
237
+ indigo: "",
238
+ rose: "",
239
+ lime: "",
240
+ violet: "",
241
+ cyan: "",
242
+ orange: "",
243
+ emerald: "",
244
+ fuchsia: "",
245
+ amber: "",
246
+ slate: ""
247
247
  },
248
248
  size: {
249
249
  sm: [
@@ -281,9 +281,40 @@ var badgeVariants = (0, import_class_variance_authority.cva)(
281
281
  { variant: "outlined", type: "success", class: "border-badge-outlined-success-border text-badge-outlined-success-text" },
282
282
  { variant: "outlined", type: "critical", class: "border-badge-outlined-critical-border text-badge-outlined-critical-text" },
283
283
  { variant: "outlined", type: "warning", class: "border-badge-outlined-warning-border text-badge-outlined-warning-text" },
284
- { variant: "outlined", type: "neutral", class: "border-badge-outlined-neutral-border text-badge-outlined-neutral-text" }
284
+ { variant: "outlined", type: "neutral", class: "border-badge-outlined-neutral-border text-badge-outlined-neutral-text" },
285
+ // ── Categorical tones × variant ──────────────────────────────────────
286
+ { variant: "solid", tone: "indigo", class: "bg-badge-solid-indigo-bg text-badge-solid-indigo-text" },
287
+ { variant: "solid", tone: "rose", class: "bg-badge-solid-rose-bg text-badge-solid-rose-text" },
288
+ { variant: "solid", tone: "lime", class: "bg-badge-solid-lime-bg text-badge-solid-lime-text" },
289
+ { variant: "solid", tone: "violet", class: "bg-badge-solid-violet-bg text-badge-solid-violet-text" },
290
+ { variant: "solid", tone: "cyan", class: "bg-badge-solid-cyan-bg text-badge-solid-cyan-text" },
291
+ { variant: "solid", tone: "orange", class: "bg-badge-solid-orange-bg text-badge-solid-orange-text" },
292
+ { variant: "solid", tone: "emerald", class: "bg-badge-solid-emerald-bg text-badge-solid-emerald-text" },
293
+ { variant: "solid", tone: "fuchsia", class: "bg-badge-solid-fuchsia-bg text-badge-solid-fuchsia-text" },
294
+ { variant: "solid", tone: "amber", class: "bg-badge-solid-amber-bg text-badge-solid-amber-text" },
295
+ { variant: "solid", tone: "slate", class: "bg-badge-solid-slate-bg text-badge-solid-slate-text" },
296
+ { variant: "light", tone: "indigo", class: "bg-badge-light-indigo-bg text-badge-light-indigo-text" },
297
+ { variant: "light", tone: "rose", class: "bg-badge-light-rose-bg text-badge-light-rose-text" },
298
+ { variant: "light", tone: "lime", class: "bg-badge-light-lime-bg text-badge-light-lime-text" },
299
+ { variant: "light", tone: "violet", class: "bg-badge-light-violet-bg text-badge-light-violet-text" },
300
+ { variant: "light", tone: "cyan", class: "bg-badge-light-cyan-bg text-badge-light-cyan-text" },
301
+ { variant: "light", tone: "orange", class: "bg-badge-light-orange-bg text-badge-light-orange-text" },
302
+ { variant: "light", tone: "emerald", class: "bg-badge-light-emerald-bg text-badge-light-emerald-text" },
303
+ { variant: "light", tone: "fuchsia", class: "bg-badge-light-fuchsia-bg text-badge-light-fuchsia-text" },
304
+ { variant: "light", tone: "amber", class: "bg-badge-light-amber-bg text-badge-light-amber-text" },
305
+ { variant: "light", tone: "slate", class: "bg-badge-light-slate-bg text-badge-light-slate-text" },
306
+ { variant: "outlined", tone: "indigo", class: "border-badge-outlined-indigo-border text-badge-outlined-indigo-text" },
307
+ { variant: "outlined", tone: "rose", class: "border-badge-outlined-rose-border text-badge-outlined-rose-text" },
308
+ { variant: "outlined", tone: "lime", class: "border-badge-outlined-lime-border text-badge-outlined-lime-text" },
309
+ { variant: "outlined", tone: "violet", class: "border-badge-outlined-violet-border text-badge-outlined-violet-text" },
310
+ { variant: "outlined", tone: "cyan", class: "border-badge-outlined-cyan-border text-badge-outlined-cyan-text" },
311
+ { variant: "outlined", tone: "orange", class: "border-badge-outlined-orange-border text-badge-outlined-orange-text" },
312
+ { variant: "outlined", tone: "emerald", class: "border-badge-outlined-emerald-border text-badge-outlined-emerald-text" },
313
+ { variant: "outlined", tone: "fuchsia", class: "border-badge-outlined-fuchsia-border text-badge-outlined-fuchsia-text" },
314
+ { variant: "outlined", tone: "amber", class: "border-badge-outlined-amber-border text-badge-outlined-amber-text" },
315
+ { variant: "outlined", tone: "slate", class: "border-badge-outlined-slate-border text-badge-outlined-slate-text" }
285
316
  ],
286
- // variant/type defaults are applied in the component so `tone` can suppress them.
317
+ // variant/type defaults are applied in the component so `tone` can suppress `type`.
287
318
  defaultVariants: {
288
319
  size: "md"
289
320
  }
@@ -291,16 +322,15 @@ var badgeVariants = (0, import_class_variance_authority.cva)(
291
322
  );
292
323
  var Badge = React.forwardRef(
293
324
  ({ className, variant, type, tone, size, icon, children, ...props }, ref) => {
294
- const tonal = tone != null;
295
325
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
296
326
  "span",
297
327
  {
298
328
  ref,
299
329
  className: cn(
300
330
  badgeVariants({
301
- // A categorical tone is self-contained and overrides variant/type.
302
- variant: tonal ? void 0 : variant ?? "solid",
303
- type: tonal ? void 0 : type ?? "primary",
331
+ variant: variant ?? "solid",
332
+ // `tone` and `type` share the color axis — when a tone is set it wins.
333
+ type: tone != null ? void 0 : type ?? "primary",
304
334
  tone,
305
335
  size
306
336
  }),
@@ -573,17 +603,78 @@ var Button = React2.forwardRef(
573
603
  );
574
604
  Button.displayName = "Button";
575
605
 
576
- // src/components/ui/browser-tab.tsx
606
+ // src/components/ui/tooltip.tsx
607
+ var React3 = __toESM(require("react"));
608
+ var TooltipPrimitive = __toESM(require("@radix-ui/react-tooltip"));
609
+ var import_class_variance_authority3 = require("class-variance-authority");
577
610
  var import_jsx_runtime3 = require("react/jsx-runtime");
578
- var BrowserTabContext = React3.createContext(null);
579
- var BrowserTabItem = React3.forwardRef(
580
- ({ className, icon, label, badge, isActive = false, onClose, onRename, ...props }, ref) => {
581
- const [isHovered, setIsHovered] = React3.useState(false);
582
- const [isEditing, setIsEditing] = React3.useState(false);
583
- const [editValue, setEditValue] = React3.useState(label);
584
- const inputRef = React3.useRef(null);
585
- const ctx = React3.useContext(BrowserTabContext);
586
- React3.useEffect(() => {
611
+ var tooltipContentVariants = (0, import_class_variance_authority3.cva)(
612
+ [
613
+ "inline-flex items-center z-50",
614
+ "gap-xs",
615
+ "px-base py-sm",
616
+ "rounded-lg",
617
+ "shadow-lg",
618
+ "text-sm",
619
+ "font-regular",
620
+ "leading-sm",
621
+ "data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out]",
622
+ "data-[state=instant-open]:animate-[tooltip-in_0ms]",
623
+ "data-[state=closed]:animate-[tooltip-out_100ms_ease-in]"
624
+ ],
625
+ {
626
+ variants: {
627
+ type: {
628
+ default: [
629
+ "bg-tooltip-default-bg",
630
+ "text-tooltip-default-text"
631
+ ],
632
+ invert: [
633
+ "bg-tooltip-invert-bg",
634
+ "text-tooltip-invert-text",
635
+ "border border-tooltip-invert-border"
636
+ ]
637
+ }
638
+ },
639
+ defaultVariants: {
640
+ type: "default"
641
+ }
642
+ }
643
+ );
644
+ var TooltipProvider = TooltipPrimitive.Provider;
645
+ var Tooltip = TooltipPrimitive.Root;
646
+ var TooltipTrigger = TooltipPrimitive.Trigger;
647
+ var TooltipContent = React3.forwardRef(({ className, type, hasArrow = true, sideOffset = 4, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(TooltipPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
648
+ TooltipPrimitive.Content,
649
+ {
650
+ ref,
651
+ sideOffset,
652
+ className: cn(tooltipContentVariants({ type, className })),
653
+ ...props,
654
+ children: [
655
+ children,
656
+ hasArrow && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
657
+ TooltipPrimitive.Arrow,
658
+ {
659
+ className: type === "default" ? "fill-tooltip-default-bg" : "fill-tooltip-invert-bg"
660
+ }
661
+ )
662
+ ]
663
+ }
664
+ ) }));
665
+ TooltipContent.displayName = "TooltipContent";
666
+
667
+ // src/components/ui/browser-tab.tsx
668
+ var import_jsx_runtime4 = require("react/jsx-runtime");
669
+ var BrowserTabContext = React4.createContext(null);
670
+ var BrowserTabItem = React4.forwardRef(
671
+ ({ className, icon, label, badge, isActive = false, pinned = false, isEditable = false, onEdit, onClose, onRename, ...props }, ref) => {
672
+ const [isHovered, setIsHovered] = React4.useState(false);
673
+ const [isEditing, setIsEditing] = React4.useState(false);
674
+ const [editValue, setEditValue] = React4.useState(label);
675
+ const inputRef = React4.useRef(null);
676
+ const ctx = React4.useContext(BrowserTabContext);
677
+ React4.useEffect(() => {
587
678
  if (isEditing && inputRef.current) {
588
679
  inputRef.current.focus();
589
680
  inputRef.current.select();
@@ -612,7 +703,7 @@ var BrowserTabItem = React3.forwardRef(
612
703
  const isDragged = ctx?.draggable && ctx.dragIndex === ctx.itemIndex;
613
704
  const isDropTarget = ctx?.draggable && ctx.dropIndex === ctx.itemIndex && ctx.dragIndex !== ctx.itemIndex;
614
705
  const showGrip = ctx?.draggable && isHovered;
615
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
706
+ const tab = /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
616
707
  "div",
617
708
  {
618
709
  ref,
@@ -629,15 +720,15 @@ var BrowserTabItem = React3.forwardRef(
629
720
  ...dragProps,
630
721
  ...props,
631
722
  children: [
632
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
723
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
633
724
  "div",
634
725
  {
635
726
  className: cn(
636
- "flex items-center gap-base px-xs py-2xs transition-[background-color,border-radius,box-shadow]",
727
+ "relative flex items-center gap-base px-xs py-2xs transition-[background-color,border-radius,box-shadow]",
637
728
  isHovered && !isActive ? "bg-browser-tab-item-hover-bg rounded-sm shadow-sm" : "bg-browser-tab-item-bg rounded-base"
638
729
  ),
639
730
  children: [
640
- icon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
731
+ icon && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
641
732
  import_icons3.Icon,
642
733
  {
643
734
  icon: showGrip ? import_icons3.faGripDotsVerticalSolid : icon,
@@ -647,7 +738,7 @@ var BrowserTabItem = React3.forwardRef(
647
738
  )
648
739
  }
649
740
  ) }),
650
- isEditing ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
741
+ isEditing ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
651
742
  "input",
652
743
  {
653
744
  ref: inputRef,
@@ -666,7 +757,7 @@ var BrowserTabItem = React3.forwardRef(
666
757
  ),
667
758
  style: { width: `${Math.max(editValue.length + 1, 2)}ch` }
668
759
  }
669
- ) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
760
+ ) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
670
761
  "span",
671
762
  {
672
763
  className: cn(
@@ -683,46 +774,86 @@ var BrowserTabItem = React3.forwardRef(
683
774
  children: label
684
775
  }
685
776
  ),
686
- badge && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Badge, { variant: "light", type: "neutral", size: "sm", children: badge }),
687
- onClose && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
688
- "button",
777
+ badge && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Badge, { variant: "light", type: "neutral", size: "sm", children: badge }),
778
+ !pinned && (isEditable || onClose) && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
779
+ "div",
689
780
  {
690
- onClick: (e) => {
691
- e.stopPropagation();
692
- onClose(e);
693
- },
781
+ "aria-hidden": !isHovered,
694
782
  className: cn(
695
- "shrink-0 flex items-center justify-center cursor-pointer",
696
- isActive ? "text-browser-tab-item-active-icon" : "text-browser-tab-item-inactive-icon"
783
+ "absolute right-0 top-0 bottom-0 flex items-center justify-end gap-2xs pl-2xl pr-2xs",
784
+ "transition-opacity duration-150 bg-gradient-to-l from-[72%] to-transparent",
785
+ isActive ? "from-browser-tab-item-bg rounded-r-base" : "from-browser-tab-item-hover-bg rounded-r-sm",
786
+ isHovered ? "opacity-100" : "opacity-0 pointer-events-none"
697
787
  ),
698
- "aria-label": `Close ${label}`,
699
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons3.Icon, { icon: import_icons3.faXmarkOutline, size: "xs" })
788
+ children: [
789
+ isEditable && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
790
+ "button",
791
+ {
792
+ onClick: (e) => {
793
+ e.stopPropagation();
794
+ onEdit?.(e);
795
+ },
796
+ tabIndex: isHovered ? 0 : -1,
797
+ className: cn(
798
+ "shrink-0 flex items-center justify-center cursor-pointer rounded-2xs p-2xs",
799
+ "hover:bg-black/5 transition-colors",
800
+ isActive ? "text-browser-tab-item-active-icon" : "text-browser-tab-item-inactive-icon"
801
+ ),
802
+ "aria-label": `Edit ${label}`,
803
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons3.Icon, { icon: import_icons3.faPenOutline, size: "xs" })
804
+ }
805
+ ),
806
+ onClose && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
807
+ "button",
808
+ {
809
+ onClick: (e) => {
810
+ e.stopPropagation();
811
+ onClose(e);
812
+ },
813
+ tabIndex: isHovered ? 0 : -1,
814
+ className: cn(
815
+ "shrink-0 flex items-center justify-center cursor-pointer rounded-2xs p-2xs",
816
+ "hover:bg-black/5 transition-colors",
817
+ isActive ? "text-browser-tab-item-active-icon" : "text-browser-tab-item-inactive-icon"
818
+ ),
819
+ "aria-label": `Close ${label}`,
820
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icons3.Icon, { icon: import_icons3.faXmarkOutline, size: "xs" })
821
+ }
822
+ )
823
+ ]
700
824
  }
701
825
  )
702
826
  ]
703
827
  }
704
828
  ),
705
- isActive && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
706
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { "aria-hidden": true, className: "pointer-events-none absolute bottom-0 left-[-1px] w-px h-[8px] bg-browser-tab-item-bg" }),
707
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { "aria-hidden": true, className: "pointer-events-none absolute bottom-0 right-[-1px] w-px h-[8px] bg-browser-tab-item-bg" }),
708
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { "aria-hidden": true, className: "pointer-events-none absolute bottom-0 left-[-8px] size-[8px]", children: [
709
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "absolute bottom-0 left-0 right-0 h-px bg-browser-tab-item-bg" }),
710
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "absolute inset-0 rounded-br-[8px] border-b border-r border-solid border-browser-tab-item-border" })
829
+ isActive && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
830
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "aria-hidden": true, className: "pointer-events-none absolute bottom-0 left-[-1px] w-px h-[8px] bg-browser-tab-item-bg" }),
831
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "aria-hidden": true, className: "pointer-events-none absolute bottom-0 right-[-1px] w-px h-[8px] bg-browser-tab-item-bg" }),
832
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { "aria-hidden": true, className: "pointer-events-none absolute bottom-0 left-[-8px] size-[8px]", children: [
833
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "absolute bottom-0 left-0 right-0 h-px bg-browser-tab-item-bg" }),
834
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "absolute inset-0 rounded-br-[8px] border-b border-r border-solid border-browser-tab-item-border" })
711
835
  ] }),
712
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { "aria-hidden": true, className: "pointer-events-none absolute bottom-0 right-[-8px] size-[8px]", children: [
713
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "absolute bottom-0 left-0 right-0 h-px bg-browser-tab-item-bg" }),
714
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "absolute inset-0 rounded-bl-[8px] border-b border-l border-solid border-browser-tab-item-border" })
836
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { "aria-hidden": true, className: "pointer-events-none absolute bottom-0 right-[-8px] size-[8px]", children: [
837
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "absolute bottom-0 left-0 right-0 h-px bg-browser-tab-item-bg" }),
838
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "absolute inset-0 rounded-bl-[8px] border-b border-l border-solid border-browser-tab-item-border" })
715
839
  ] })
716
840
  ] })
717
841
  ]
718
842
  }
719
843
  );
844
+ if (pinned) {
845
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(TooltipProvider, { delayDuration: 300, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(Tooltip, { children: [
846
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(TooltipTrigger, { asChild: true, children: tab }),
847
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(TooltipContent, { side: "bottom", hasArrow: false, children: "Pinned tab" })
848
+ ] }) });
849
+ }
850
+ return tab;
720
851
  }
721
852
  );
722
853
  BrowserTabItem.displayName = "BrowserTabItem";
723
854
  function useOverflowDetection(containerRef, childCount) {
724
- const [visibleCount, setVisibleCount] = React3.useState(childCount);
725
- React3.useEffect(() => {
855
+ const [visibleCount, setVisibleCount] = React4.useState(childCount);
856
+ React4.useEffect(() => {
726
857
  const container = containerRef.current;
727
858
  if (!container) return;
728
859
  const measure = () => {
@@ -750,12 +881,12 @@ function useOverflowDetection(containerRef, childCount) {
750
881
  }, [containerRef, childCount]);
751
882
  return visibleCount;
752
883
  }
753
- var BrowserTab = React3.forwardRef(
884
+ var BrowserTab = React4.forwardRef(
754
885
  ({ className, children, onAddTab, draggable = false, onReorder, onOverflowSelect, ...props }, ref) => {
755
- const [dragIndex, setDragIndex] = React3.useState(null);
756
- const [dropIndex, setDropIndex] = React3.useState(null);
757
- const tabsContainerRef = React3.useRef(null);
758
- const childArray = React3.Children.toArray(children).filter(React3.isValidElement);
886
+ const [dragIndex, setDragIndex] = React4.useState(null);
887
+ const [dropIndex, setDropIndex] = React4.useState(null);
888
+ const tabsContainerRef = React4.useRef(null);
889
+ const childArray = React4.Children.toArray(children).filter(React4.isValidElement);
759
890
  const visibleCount = useOverflowDetection(tabsContainerRef, childArray.length);
760
891
  const hasOverflow = visibleCount < childArray.length;
761
892
  const ctxBase = {
@@ -789,7 +920,7 @@ var BrowserTab = React3.forwardRef(
789
920
  isActive: childProps.isActive
790
921
  };
791
922
  });
792
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
923
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
793
924
  "div",
794
925
  {
795
926
  ref,
@@ -799,15 +930,15 @@ var BrowserTab = React3.forwardRef(
799
930
  ),
800
931
  ...props,
801
932
  children: [
802
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
933
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
803
934
  "div",
804
935
  {
805
936
  ref: tabsContainerRef,
806
937
  className: "flex items-center flex-1 min-w-0 pl-base",
807
938
  style: { overflowX: "clip", overflowY: "visible" },
808
939
  children: [
809
- childArray.map((child, index) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(BrowserTabContext.Provider, { value: { ...ctxBase, itemIndex: index }, children: child }, index)),
810
- onAddTab && !hasOverflow && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
940
+ childArray.map((child, index) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(BrowserTabContext.Provider, { value: { ...ctxBase, itemIndex: index }, children: child }, index)),
941
+ onAddTab && !hasOverflow && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
811
942
  Button,
812
943
  {
813
944
  className: "ml-base",
@@ -823,8 +954,8 @@ var BrowserTab = React3.forwardRef(
823
954
  ]
824
955
  }
825
956
  ),
826
- hasOverflow && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(DropdownMenuPrimitive.Root, { children: [
827
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DropdownMenuPrimitive.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
957
+ hasOverflow && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(DropdownMenuPrimitive.Root, { children: [
958
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DropdownMenuPrimitive.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
828
959
  Button,
829
960
  {
830
961
  className: "mb-sm",
@@ -836,7 +967,7 @@ var BrowserTab = React3.forwardRef(
836
967
  "aria-label": "Show more tabs"
837
968
  }
838
969
  ) }),
839
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
970
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
840
971
  DropdownMenuPrimitive.Content,
841
972
  {
842
973
  sideOffset: 4,
@@ -848,7 +979,7 @@ var BrowserTab = React3.forwardRef(
848
979
  "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
849
980
  "data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2"
850
981
  ),
851
- children: hiddenItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
982
+ children: hiddenItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
852
983
  DropdownMenuPrimitive.Item,
853
984
  {
854
985
  className: cn(
@@ -861,7 +992,7 @@ var BrowserTab = React3.forwardRef(
861
992
  }
862
993
  },
863
994
  children: [
864
- item.icon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
995
+ item.icon && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
865
996
  import_icons3.Icon,
866
997
  {
867
998
  icon: item.icon,
@@ -871,7 +1002,7 @@ var BrowserTab = React3.forwardRef(
871
1002
  )
872
1003
  }
873
1004
  ),
874
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1005
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
875
1006
  "span",
876
1007
  {
877
1008
  className: cn(
@@ -881,7 +1012,7 @@ var BrowserTab = React3.forwardRef(
881
1012
  children: item.label
882
1013
  }
883
1014
  ),
884
- item.badge && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Badge, { variant: "light", type: "neutral", size: "sm", children: item.badge })
1015
+ item.badge && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Badge, { variant: "light", type: "neutral", size: "sm", children: item.badge })
885
1016
  ]
886
1017
  },
887
1018
  item.index
@@ -889,7 +1020,7 @@ var BrowserTab = React3.forwardRef(
889
1020
  }
890
1021
  ) })
891
1022
  ] }),
892
- onAddTab && hasOverflow && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1023
+ onAddTab && hasOverflow && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
893
1024
  Button,
894
1025
  {
895
1026
  className: "mb-sm",
@@ -910,14 +1041,14 @@ var BrowserTab = React3.forwardRef(
910
1041
  BrowserTab.displayName = "BrowserTab";
911
1042
 
912
1043
  // src/components/ui/bulk-action.tsx
913
- var React5 = __toESM(require("react"));
1044
+ var React6 = __toESM(require("react"));
914
1045
  var import_icons5 = require("@l3mpire/icons");
915
1046
 
916
1047
  // src/components/ui/dropdown-menu.tsx
917
- var React4 = __toESM(require("react"));
1048
+ var React5 = __toESM(require("react"));
918
1049
  var DropdownMenuPrimitive2 = __toESM(require("@radix-ui/react-dropdown-menu"));
919
1050
  var import_icons4 = require("@l3mpire/icons");
920
- var import_jsx_runtime4 = require("react/jsx-runtime");
1051
+ var import_jsx_runtime5 = require("react/jsx-runtime");
921
1052
  var textSm = "text-sm font-regular leading-sm";
922
1053
  var textXs = "text-xs font-regular leading-xs";
923
1054
  var textXsMedium = "text-xs font-medium leading-xs";
@@ -930,13 +1061,13 @@ var containerStyle = [
930
1061
  "p-xs",
931
1062
  "shadow-lg"
932
1063
  ];
933
- var DropdownMenu = React4.forwardRef(
934
- ({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { ref, className: cn(containerStyle, className), ...props, children })
1064
+ var DropdownMenu = React5.forwardRef(
1065
+ ({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { ref, className: cn(containerStyle, className), ...props, children })
935
1066
  );
936
1067
  DropdownMenu.displayName = "DropdownMenu";
937
1068
  var DropdownMenuRoot = DropdownMenuPrimitive2.Root;
938
1069
  var DropdownMenuTrigger = DropdownMenuPrimitive2.Trigger;
939
- var DropdownMenuContent = React4.forwardRef(({ className, sideOffset = 4, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DropdownMenuPrimitive2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1070
+ var DropdownMenuContent = React5.forwardRef(({ className, sideOffset = 4, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DropdownMenuPrimitive2.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
940
1071
  DropdownMenuPrimitive2.Content,
941
1072
  {
942
1073
  ref,
@@ -955,12 +1086,12 @@ var DropdownMenuContent = React4.forwardRef(({ className, sideOffset = 4, childr
955
1086
  }
956
1087
  ) }));
957
1088
  DropdownMenuContent.displayName = "DropdownMenuContent";
958
- var DropdownMenuList = React4.forwardRef(
959
- ({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { ref, className: cn("flex flex-col", className), role: "listbox", ...props, children })
1089
+ var DropdownMenuList = React5.forwardRef(
1090
+ ({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { ref, className: cn("flex flex-col", className), role: "listbox", ...props, children })
960
1091
  );
961
1092
  DropdownMenuList.displayName = "DropdownMenuList";
962
1093
  var itemStyle = "flex items-center gap-base p-base rounded-base cursor-pointer hover:bg-dropdown-item-hover";
963
- var DropdownMenuItem = React4.forwardRef(
1094
+ var DropdownMenuItem = React5.forwardRef(
964
1095
  ({
965
1096
  className,
966
1097
  icon,
@@ -975,7 +1106,7 @@ var DropdownMenuItem = React4.forwardRef(
975
1106
  onClick,
976
1107
  ...props
977
1108
  }, ref) => {
978
- const handleClick = React4.useCallback(
1109
+ const handleClick = React5.useCallback(
979
1110
  (e) => {
980
1111
  const target = e.target;
981
1112
  if (!target.closest("button[role='checkbox']")) {
@@ -988,7 +1119,7 @@ var DropdownMenuItem = React4.forwardRef(
988
1119
  },
989
1120
  [onClick]
990
1121
  );
991
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1122
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
992
1123
  "div",
993
1124
  {
994
1125
  ref,
@@ -1005,7 +1136,7 @@ var DropdownMenuItem = React4.forwardRef(
1005
1136
  children,
1006
1137
  avatar,
1007
1138
  flag,
1008
- icon && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1139
+ icon && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1009
1140
  import_icons4.Icon,
1010
1141
  {
1011
1142
  icon,
@@ -1013,9 +1144,9 @@ var DropdownMenuItem = React4.forwardRef(
1013
1144
  className: "shrink-0 text-dropdown-item-icon"
1014
1145
  }
1015
1146
  ),
1016
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex flex-1 items-center gap-sm min-w-0", children: [
1017
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: cn("truncate shrink-0", textSm, "text-dropdown-item-text"), children: label }),
1018
- description && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: cn("truncate", textXs, "text-dropdown-item-secondary"), children: description })
1147
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex flex-1 items-center gap-sm min-w-0", children: [
1148
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: cn("truncate shrink-0", textSm, "text-dropdown-item-text"), children: label }),
1149
+ description && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: cn("truncate", textXs, "text-dropdown-item-secondary"), children: description })
1019
1150
  ] }),
1020
1151
  badge,
1021
1152
  action
@@ -1025,7 +1156,7 @@ var DropdownMenuItem = React4.forwardRef(
1025
1156
  }
1026
1157
  );
1027
1158
  DropdownMenuItem.displayName = "DropdownMenuItem";
1028
- var DropdownMenuRadixItem = React4.forwardRef(
1159
+ var DropdownMenuRadixItem = React5.forwardRef(
1029
1160
  ({
1030
1161
  className,
1031
1162
  icon,
@@ -1037,7 +1168,7 @@ var DropdownMenuRadixItem = React4.forwardRef(
1037
1168
  action,
1038
1169
  children,
1039
1170
  ...props
1040
- }, ref) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1171
+ }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1041
1172
  DropdownMenuPrimitive2.Item,
1042
1173
  {
1043
1174
  ref,
@@ -1051,7 +1182,7 @@ var DropdownMenuRadixItem = React4.forwardRef(
1051
1182
  children,
1052
1183
  avatar,
1053
1184
  flag,
1054
- icon && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1185
+ icon && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1055
1186
  import_icons4.Icon,
1056
1187
  {
1057
1188
  icon,
@@ -1059,9 +1190,9 @@ var DropdownMenuRadixItem = React4.forwardRef(
1059
1190
  className: "shrink-0 text-dropdown-item-icon"
1060
1191
  }
1061
1192
  ),
1062
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex flex-1 items-center gap-sm min-w-0", children: [
1063
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: cn("truncate shrink-0", textSm, "text-dropdown-item-text"), children: label }),
1064
- description && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: cn("truncate", textXs, "text-dropdown-item-secondary"), children: description })
1193
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex flex-1 items-center gap-sm min-w-0", children: [
1194
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: cn("truncate shrink-0", textSm, "text-dropdown-item-text"), children: label }),
1195
+ description && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: cn("truncate", textXs, "text-dropdown-item-secondary"), children: description })
1065
1196
  ] }),
1066
1197
  badge,
1067
1198
  action
@@ -1070,7 +1201,7 @@ var DropdownMenuRadixItem = React4.forwardRef(
1070
1201
  )
1071
1202
  );
1072
1203
  DropdownMenuRadixItem.displayName = "DropdownMenuRadixItem";
1073
- var DropdownMenuHeading = React4.forwardRef(({ className, action, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
1204
+ var DropdownMenuHeading = React5.forwardRef(({ className, action, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1074
1205
  "div",
1075
1206
  {
1076
1207
  ref,
@@ -1080,7 +1211,7 @@ var DropdownMenuHeading = React4.forwardRef(({ className, action, children, ...p
1080
1211
  ),
1081
1212
  ...props,
1082
1213
  children: [
1083
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: cn("flex-1 truncate uppercase", textXsMedium, "text-dropdown-heading-text"), children }),
1214
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: cn("flex-1 truncate uppercase", textXsMedium, "text-dropdown-heading-text"), children }),
1084
1215
  action
1085
1216
  ]
1086
1217
  }
@@ -1095,7 +1226,7 @@ var clearStyle = [
1095
1226
  "shadow-sm",
1096
1227
  "cursor-pointer"
1097
1228
  ];
1098
- var DropdownMenuClear = React4.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
1229
+ var DropdownMenuClear = React5.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1099
1230
  "button",
1100
1231
  {
1101
1232
  ref,
@@ -1108,10 +1239,10 @@ var DropdownMenuClear = React4.forwardRef(({ className, children, ...props }, re
1108
1239
  DropdownMenuClear.displayName = "DropdownMenuClear";
1109
1240
 
1110
1241
  // src/components/ui/bulk-action.tsx
1111
- var import_jsx_runtime5 = require("react/jsx-runtime");
1242
+ var import_jsx_runtime6 = require("react/jsx-runtime");
1112
1243
  var GAP_PX = 8;
1113
1244
  var MORE_BTN_FALLBACK = 36;
1114
- var BulkAction = React5.forwardRef(
1245
+ var BulkAction = React6.forwardRef(
1115
1246
  ({
1116
1247
  count,
1117
1248
  onClear,
@@ -1122,11 +1253,11 @@ var BulkAction = React5.forwardRef(
1122
1253
  className,
1123
1254
  ...props
1124
1255
  }, ref) => {
1125
- const slotRef = React5.useRef(null);
1126
- const measureRef = React5.useRef(null);
1127
- const moreBtnMeasureRef = React5.useRef(null);
1128
- const [visibleCount, setVisibleCount] = React5.useState(actions.length);
1129
- React5.useLayoutEffect(() => {
1256
+ const slotRef = React6.useRef(null);
1257
+ const measureRef = React6.useRef(null);
1258
+ const moreBtnMeasureRef = React6.useRef(null);
1259
+ const [visibleCount, setVisibleCount] = React6.useState(actions.length);
1260
+ React6.useLayoutEffect(() => {
1130
1261
  const slot = slotRef.current;
1131
1262
  const measure = measureRef.current;
1132
1263
  if (!slot || !measure) return;
@@ -1166,7 +1297,7 @@ var BulkAction = React5.forwardRef(
1166
1297
  }, [actions]);
1167
1298
  const visibleItems = actions.slice(0, visibleCount);
1168
1299
  const overflowItems = actions.slice(visibleCount);
1169
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1300
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1170
1301
  "div",
1171
1302
  {
1172
1303
  ref,
@@ -1182,20 +1313,20 @@ var BulkAction = React5.forwardRef(
1182
1313
  ),
1183
1314
  ...props,
1184
1315
  children: [
1185
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "text-sm font-regular leading-sm text-bulk-action-count whitespace-nowrap shrink-0", children: [
1316
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "text-sm font-regular leading-sm text-bulk-action-count whitespace-nowrap shrink-0", children: [
1186
1317
  count,
1187
1318
  " ",
1188
1319
  countLabel
1189
1320
  ] }),
1190
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
1321
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1191
1322
  "div",
1192
1323
  {
1193
1324
  ref: slotRef,
1194
1325
  className: "relative flex flex-1 items-center gap-base min-w-0 overflow-hidden",
1195
1326
  children: [
1196
- visibleItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ActionButton, { item }, item.id)),
1197
- overflowItems.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(DropdownMenuRoot, { children: [
1198
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1327
+ visibleItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ActionButton, { item }, item.id)),
1328
+ overflowItems.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(DropdownMenuRoot, { children: [
1329
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1199
1330
  Button,
1200
1331
  {
1201
1332
  type: "button",
@@ -1207,7 +1338,7 @@ var BulkAction = React5.forwardRef(
1207
1338
  "aria-label": "More actions"
1208
1339
  }
1209
1340
  ) }),
1210
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DropdownMenuContent, { align: "end", side: "top", sideOffset: 8, children: overflowItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1341
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DropdownMenuContent, { align: "end", side: "top", sideOffset: 8, children: overflowItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1211
1342
  DropdownMenuItem,
1212
1343
  {
1213
1344
  icon: item.icon,
@@ -1217,29 +1348,29 @@ var BulkAction = React5.forwardRef(
1217
1348
  item.id
1218
1349
  )) })
1219
1350
  ] }),
1220
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1351
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1221
1352
  "div",
1222
1353
  {
1223
1354
  ref: measureRef,
1224
1355
  "aria-hidden": true,
1225
1356
  className: "pointer-events-none absolute inset-0 flex items-center gap-base opacity-0 invisible",
1226
- children: actions.map((item) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ActionButton, { item, tabIndex: -1 }, `measure-${item.id}`))
1357
+ children: actions.map((item) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ActionButton, { item, tabIndex: -1 }, `measure-${item.id}`))
1227
1358
  }
1228
1359
  ),
1229
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1360
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1230
1361
  "button",
1231
1362
  {
1232
1363
  ref: moreBtnMeasureRef,
1233
1364
  "aria-hidden": true,
1234
1365
  tabIndex: -1,
1235
1366
  className: "pointer-events-none absolute opacity-0 invisible h-8 w-8 min-w-8",
1236
- children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_icons5.Icon, { icon: import_icons5.faEllipsisOutline, size: "sm" })
1367
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_icons5.Icon, { icon: import_icons5.faEllipsisOutline, size: "sm" })
1237
1368
  }
1238
1369
  )
1239
1370
  ]
1240
1371
  }
1241
1372
  ),
1242
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1373
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1243
1374
  Button,
1244
1375
  {
1245
1376
  type: "button",
@@ -1259,7 +1390,7 @@ var BulkAction = React5.forwardRef(
1259
1390
  }
1260
1391
  );
1261
1392
  BulkAction.displayName = "BulkAction";
1262
- var ActionButton = ({ item, tabIndex }) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1393
+ var ActionButton = ({ item, tabIndex }) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1263
1394
  Button,
1264
1395
  {
1265
1396
  type: "button",
@@ -1275,67 +1406,6 @@ var ActionButton = ({ item, tabIndex }) => /* @__PURE__ */ (0, import_jsx_runtim
1275
1406
  }
1276
1407
  );
1277
1408
 
1278
- // src/components/ui/tooltip.tsx
1279
- var React6 = __toESM(require("react"));
1280
- var TooltipPrimitive = __toESM(require("@radix-ui/react-tooltip"));
1281
- var import_class_variance_authority3 = require("class-variance-authority");
1282
- var import_jsx_runtime6 = require("react/jsx-runtime");
1283
- var tooltipContentVariants = (0, import_class_variance_authority3.cva)(
1284
- [
1285
- "inline-flex items-center z-50",
1286
- "gap-xs",
1287
- "px-base py-sm",
1288
- "rounded-lg",
1289
- "shadow-lg",
1290
- "text-sm",
1291
- "font-regular",
1292
- "leading-sm",
1293
- "data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out]",
1294
- "data-[state=instant-open]:animate-[tooltip-in_0ms]",
1295
- "data-[state=closed]:animate-[tooltip-out_100ms_ease-in]"
1296
- ],
1297
- {
1298
- variants: {
1299
- type: {
1300
- default: [
1301
- "bg-tooltip-default-bg",
1302
- "text-tooltip-default-text"
1303
- ],
1304
- invert: [
1305
- "bg-tooltip-invert-bg",
1306
- "text-tooltip-invert-text",
1307
- "border border-tooltip-invert-border"
1308
- ]
1309
- }
1310
- },
1311
- defaultVariants: {
1312
- type: "default"
1313
- }
1314
- }
1315
- );
1316
- var TooltipProvider = TooltipPrimitive.Provider;
1317
- var Tooltip = TooltipPrimitive.Root;
1318
- var TooltipTrigger = TooltipPrimitive.Trigger;
1319
- var TooltipContent = React6.forwardRef(({ className, type, hasArrow = true, sideOffset = 4, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(TooltipPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
1320
- TooltipPrimitive.Content,
1321
- {
1322
- ref,
1323
- sideOffset,
1324
- className: cn(tooltipContentVariants({ type, className })),
1325
- ...props,
1326
- children: [
1327
- children,
1328
- hasArrow && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1329
- TooltipPrimitive.Arrow,
1330
- {
1331
- className: type === "default" ? "fill-tooltip-default-bg" : "fill-tooltip-invert-bg"
1332
- }
1333
- )
1334
- ]
1335
- }
1336
- ) }));
1337
- TooltipContent.displayName = "TooltipContent";
1338
-
1339
1409
  // src/components/ui/truncated-text.tsx
1340
1410
  var React7 = __toESM(require("react"));
1341
1411
  var TooltipPrimitive2 = __toESM(require("@radix-ui/react-tooltip"));