@l3mpire/ui 3.0.0 → 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/USAGE.md +25 -4
- package/dist/index.d.mts +11 -3
- package/dist/index.d.ts +11 -3
- package/dist/index.js +302 -189
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +303 -190
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
- package/src/styles/globals.css +92 -0
package/dist/index.mjs
CHANGED
|
@@ -15,9 +15,9 @@ function cn(...inputs) {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
// src/components/ui/browser-tab.tsx
|
|
18
|
-
import * as
|
|
18
|
+
import * as React4 from "react";
|
|
19
19
|
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
|
|
20
|
-
import { Icon as Icon3, faXmarkOutline, faGripDotsVerticalSolid, faPlusSolid, faChevronDownSolid } from "@l3mpire/icons";
|
|
20
|
+
import { Icon as Icon3, faXmarkOutline, faPenOutline, faGripDotsVerticalSolid, faPlusSolid, faChevronDownSolid } from "@l3mpire/icons";
|
|
21
21
|
|
|
22
22
|
// src/components/ui/badge.tsx
|
|
23
23
|
import * as React from "react";
|
|
@@ -44,6 +44,20 @@ var badgeVariants = cva(
|
|
|
44
44
|
warning: "",
|
|
45
45
|
neutral: ""
|
|
46
46
|
},
|
|
47
|
+
// Categorical palette. Colors come from {variant, tone} compound variants below,
|
|
48
|
+
// so a tone combines with solid / light / outlined just like `type` does.
|
|
49
|
+
tone: {
|
|
50
|
+
indigo: "",
|
|
51
|
+
rose: "",
|
|
52
|
+
lime: "",
|
|
53
|
+
violet: "",
|
|
54
|
+
cyan: "",
|
|
55
|
+
orange: "",
|
|
56
|
+
emerald: "",
|
|
57
|
+
fuchsia: "",
|
|
58
|
+
amber: "",
|
|
59
|
+
slate: ""
|
|
60
|
+
},
|
|
47
61
|
size: {
|
|
48
62
|
sm: [
|
|
49
63
|
"p-2xs gap-2xs",
|
|
@@ -80,22 +94,61 @@ var badgeVariants = cva(
|
|
|
80
94
|
{ variant: "outlined", type: "success", class: "border-badge-outlined-success-border text-badge-outlined-success-text" },
|
|
81
95
|
{ variant: "outlined", type: "critical", class: "border-badge-outlined-critical-border text-badge-outlined-critical-text" },
|
|
82
96
|
{ variant: "outlined", type: "warning", class: "border-badge-outlined-warning-border text-badge-outlined-warning-text" },
|
|
83
|
-
{ variant: "outlined", type: "neutral", class: "border-badge-outlined-neutral-border text-badge-outlined-neutral-text" }
|
|
97
|
+
{ variant: "outlined", type: "neutral", class: "border-badge-outlined-neutral-border text-badge-outlined-neutral-text" },
|
|
98
|
+
// ── Categorical tones × variant ──────────────────────────────────────
|
|
99
|
+
{ variant: "solid", tone: "indigo", class: "bg-badge-solid-indigo-bg text-badge-solid-indigo-text" },
|
|
100
|
+
{ variant: "solid", tone: "rose", class: "bg-badge-solid-rose-bg text-badge-solid-rose-text" },
|
|
101
|
+
{ variant: "solid", tone: "lime", class: "bg-badge-solid-lime-bg text-badge-solid-lime-text" },
|
|
102
|
+
{ variant: "solid", tone: "violet", class: "bg-badge-solid-violet-bg text-badge-solid-violet-text" },
|
|
103
|
+
{ variant: "solid", tone: "cyan", class: "bg-badge-solid-cyan-bg text-badge-solid-cyan-text" },
|
|
104
|
+
{ variant: "solid", tone: "orange", class: "bg-badge-solid-orange-bg text-badge-solid-orange-text" },
|
|
105
|
+
{ variant: "solid", tone: "emerald", class: "bg-badge-solid-emerald-bg text-badge-solid-emerald-text" },
|
|
106
|
+
{ variant: "solid", tone: "fuchsia", class: "bg-badge-solid-fuchsia-bg text-badge-solid-fuchsia-text" },
|
|
107
|
+
{ variant: "solid", tone: "amber", class: "bg-badge-solid-amber-bg text-badge-solid-amber-text" },
|
|
108
|
+
{ variant: "solid", tone: "slate", class: "bg-badge-solid-slate-bg text-badge-solid-slate-text" },
|
|
109
|
+
{ variant: "light", tone: "indigo", class: "bg-badge-light-indigo-bg text-badge-light-indigo-text" },
|
|
110
|
+
{ variant: "light", tone: "rose", class: "bg-badge-light-rose-bg text-badge-light-rose-text" },
|
|
111
|
+
{ variant: "light", tone: "lime", class: "bg-badge-light-lime-bg text-badge-light-lime-text" },
|
|
112
|
+
{ variant: "light", tone: "violet", class: "bg-badge-light-violet-bg text-badge-light-violet-text" },
|
|
113
|
+
{ variant: "light", tone: "cyan", class: "bg-badge-light-cyan-bg text-badge-light-cyan-text" },
|
|
114
|
+
{ variant: "light", tone: "orange", class: "bg-badge-light-orange-bg text-badge-light-orange-text" },
|
|
115
|
+
{ variant: "light", tone: "emerald", class: "bg-badge-light-emerald-bg text-badge-light-emerald-text" },
|
|
116
|
+
{ variant: "light", tone: "fuchsia", class: "bg-badge-light-fuchsia-bg text-badge-light-fuchsia-text" },
|
|
117
|
+
{ variant: "light", tone: "amber", class: "bg-badge-light-amber-bg text-badge-light-amber-text" },
|
|
118
|
+
{ variant: "light", tone: "slate", class: "bg-badge-light-slate-bg text-badge-light-slate-text" },
|
|
119
|
+
{ variant: "outlined", tone: "indigo", class: "border-badge-outlined-indigo-border text-badge-outlined-indigo-text" },
|
|
120
|
+
{ variant: "outlined", tone: "rose", class: "border-badge-outlined-rose-border text-badge-outlined-rose-text" },
|
|
121
|
+
{ variant: "outlined", tone: "lime", class: "border-badge-outlined-lime-border text-badge-outlined-lime-text" },
|
|
122
|
+
{ variant: "outlined", tone: "violet", class: "border-badge-outlined-violet-border text-badge-outlined-violet-text" },
|
|
123
|
+
{ variant: "outlined", tone: "cyan", class: "border-badge-outlined-cyan-border text-badge-outlined-cyan-text" },
|
|
124
|
+
{ variant: "outlined", tone: "orange", class: "border-badge-outlined-orange-border text-badge-outlined-orange-text" },
|
|
125
|
+
{ variant: "outlined", tone: "emerald", class: "border-badge-outlined-emerald-border text-badge-outlined-emerald-text" },
|
|
126
|
+
{ variant: "outlined", tone: "fuchsia", class: "border-badge-outlined-fuchsia-border text-badge-outlined-fuchsia-text" },
|
|
127
|
+
{ variant: "outlined", tone: "amber", class: "border-badge-outlined-amber-border text-badge-outlined-amber-text" },
|
|
128
|
+
{ variant: "outlined", tone: "slate", class: "border-badge-outlined-slate-border text-badge-outlined-slate-text" }
|
|
84
129
|
],
|
|
130
|
+
// variant/type defaults are applied in the component so `tone` can suppress `type`.
|
|
85
131
|
defaultVariants: {
|
|
86
|
-
variant: "solid",
|
|
87
|
-
type: "primary",
|
|
88
132
|
size: "md"
|
|
89
133
|
}
|
|
90
134
|
}
|
|
91
135
|
);
|
|
92
136
|
var Badge = React.forwardRef(
|
|
93
|
-
({ className, variant, type, size, icon, children, ...props }, ref) => {
|
|
137
|
+
({ className, variant, type, tone, size, icon, children, ...props }, ref) => {
|
|
94
138
|
return /* @__PURE__ */ jsxs(
|
|
95
139
|
"span",
|
|
96
140
|
{
|
|
97
141
|
ref,
|
|
98
|
-
className: cn(
|
|
142
|
+
className: cn(
|
|
143
|
+
badgeVariants({
|
|
144
|
+
variant: variant ?? "solid",
|
|
145
|
+
// `tone` and `type` share the color axis — when a tone is set it wins.
|
|
146
|
+
type: tone != null ? void 0 : type ?? "primary",
|
|
147
|
+
tone,
|
|
148
|
+
size
|
|
149
|
+
}),
|
|
150
|
+
className
|
|
151
|
+
),
|
|
99
152
|
...props,
|
|
100
153
|
children: [
|
|
101
154
|
icon && /* @__PURE__ */ jsx(Icon, { icon, size: "xs" }),
|
|
@@ -363,17 +416,78 @@ var Button = React2.forwardRef(
|
|
|
363
416
|
);
|
|
364
417
|
Button.displayName = "Button";
|
|
365
418
|
|
|
419
|
+
// src/components/ui/tooltip.tsx
|
|
420
|
+
import * as React3 from "react";
|
|
421
|
+
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
422
|
+
import { cva as cva3 } from "class-variance-authority";
|
|
423
|
+
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
424
|
+
var tooltipContentVariants = cva3(
|
|
425
|
+
[
|
|
426
|
+
"inline-flex items-center z-50",
|
|
427
|
+
"gap-xs",
|
|
428
|
+
"px-base py-sm",
|
|
429
|
+
"rounded-lg",
|
|
430
|
+
"shadow-lg",
|
|
431
|
+
"text-sm",
|
|
432
|
+
"font-regular",
|
|
433
|
+
"leading-sm",
|
|
434
|
+
"data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out]",
|
|
435
|
+
"data-[state=instant-open]:animate-[tooltip-in_0ms]",
|
|
436
|
+
"data-[state=closed]:animate-[tooltip-out_100ms_ease-in]"
|
|
437
|
+
],
|
|
438
|
+
{
|
|
439
|
+
variants: {
|
|
440
|
+
type: {
|
|
441
|
+
default: [
|
|
442
|
+
"bg-tooltip-default-bg",
|
|
443
|
+
"text-tooltip-default-text"
|
|
444
|
+
],
|
|
445
|
+
invert: [
|
|
446
|
+
"bg-tooltip-invert-bg",
|
|
447
|
+
"text-tooltip-invert-text",
|
|
448
|
+
"border border-tooltip-invert-border"
|
|
449
|
+
]
|
|
450
|
+
}
|
|
451
|
+
},
|
|
452
|
+
defaultVariants: {
|
|
453
|
+
type: "default"
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
);
|
|
457
|
+
var TooltipProvider = TooltipPrimitive.Provider;
|
|
458
|
+
var Tooltip = TooltipPrimitive.Root;
|
|
459
|
+
var TooltipTrigger = TooltipPrimitive.Trigger;
|
|
460
|
+
var TooltipContent = React3.forwardRef(({ className, type, hasArrow = true, sideOffset = 4, children, ...props }, ref) => /* @__PURE__ */ jsx3(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs3(
|
|
461
|
+
TooltipPrimitive.Content,
|
|
462
|
+
{
|
|
463
|
+
ref,
|
|
464
|
+
sideOffset,
|
|
465
|
+
className: cn(tooltipContentVariants({ type, className })),
|
|
466
|
+
...props,
|
|
467
|
+
children: [
|
|
468
|
+
children,
|
|
469
|
+
hasArrow && /* @__PURE__ */ jsx3(
|
|
470
|
+
TooltipPrimitive.Arrow,
|
|
471
|
+
{
|
|
472
|
+
className: type === "default" ? "fill-tooltip-default-bg" : "fill-tooltip-invert-bg"
|
|
473
|
+
}
|
|
474
|
+
)
|
|
475
|
+
]
|
|
476
|
+
}
|
|
477
|
+
) }));
|
|
478
|
+
TooltipContent.displayName = "TooltipContent";
|
|
479
|
+
|
|
366
480
|
// src/components/ui/browser-tab.tsx
|
|
367
|
-
import { Fragment, jsx as
|
|
368
|
-
var BrowserTabContext =
|
|
369
|
-
var BrowserTabItem =
|
|
370
|
-
({ className, icon, label, badge, isActive = false, onClose, onRename, ...props }, ref) => {
|
|
371
|
-
const [isHovered, setIsHovered] =
|
|
372
|
-
const [isEditing, setIsEditing] =
|
|
373
|
-
const [editValue, setEditValue] =
|
|
374
|
-
const inputRef =
|
|
375
|
-
const ctx =
|
|
376
|
-
|
|
481
|
+
import { Fragment, jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
482
|
+
var BrowserTabContext = React4.createContext(null);
|
|
483
|
+
var BrowserTabItem = React4.forwardRef(
|
|
484
|
+
({ className, icon, label, badge, isActive = false, pinned = false, isEditable = false, onEdit, onClose, onRename, ...props }, ref) => {
|
|
485
|
+
const [isHovered, setIsHovered] = React4.useState(false);
|
|
486
|
+
const [isEditing, setIsEditing] = React4.useState(false);
|
|
487
|
+
const [editValue, setEditValue] = React4.useState(label);
|
|
488
|
+
const inputRef = React4.useRef(null);
|
|
489
|
+
const ctx = React4.useContext(BrowserTabContext);
|
|
490
|
+
React4.useEffect(() => {
|
|
377
491
|
if (isEditing && inputRef.current) {
|
|
378
492
|
inputRef.current.focus();
|
|
379
493
|
inputRef.current.select();
|
|
@@ -402,7 +516,7 @@ var BrowserTabItem = React3.forwardRef(
|
|
|
402
516
|
const isDragged = ctx?.draggable && ctx.dragIndex === ctx.itemIndex;
|
|
403
517
|
const isDropTarget = ctx?.draggable && ctx.dropIndex === ctx.itemIndex && ctx.dragIndex !== ctx.itemIndex;
|
|
404
518
|
const showGrip = ctx?.draggable && isHovered;
|
|
405
|
-
|
|
519
|
+
const tab = /* @__PURE__ */ jsxs4(
|
|
406
520
|
"div",
|
|
407
521
|
{
|
|
408
522
|
ref,
|
|
@@ -419,15 +533,15 @@ var BrowserTabItem = React3.forwardRef(
|
|
|
419
533
|
...dragProps,
|
|
420
534
|
...props,
|
|
421
535
|
children: [
|
|
422
|
-
/* @__PURE__ */
|
|
536
|
+
/* @__PURE__ */ jsxs4(
|
|
423
537
|
"div",
|
|
424
538
|
{
|
|
425
539
|
className: cn(
|
|
426
|
-
"flex items-center gap-base px-xs py-2xs transition-[background-color,border-radius,box-shadow]",
|
|
540
|
+
"relative flex items-center gap-base px-xs py-2xs transition-[background-color,border-radius,box-shadow]",
|
|
427
541
|
isHovered && !isActive ? "bg-browser-tab-item-hover-bg rounded-sm shadow-sm" : "bg-browser-tab-item-bg rounded-base"
|
|
428
542
|
),
|
|
429
543
|
children: [
|
|
430
|
-
icon && /* @__PURE__ */
|
|
544
|
+
icon && /* @__PURE__ */ jsx4("div", { className: "shrink-0", children: /* @__PURE__ */ jsx4(
|
|
431
545
|
Icon3,
|
|
432
546
|
{
|
|
433
547
|
icon: showGrip ? faGripDotsVerticalSolid : icon,
|
|
@@ -437,7 +551,7 @@ var BrowserTabItem = React3.forwardRef(
|
|
|
437
551
|
)
|
|
438
552
|
}
|
|
439
553
|
) }),
|
|
440
|
-
isEditing ? /* @__PURE__ */
|
|
554
|
+
isEditing ? /* @__PURE__ */ jsx4(
|
|
441
555
|
"input",
|
|
442
556
|
{
|
|
443
557
|
ref: inputRef,
|
|
@@ -456,7 +570,7 @@ var BrowserTabItem = React3.forwardRef(
|
|
|
456
570
|
),
|
|
457
571
|
style: { width: `${Math.max(editValue.length + 1, 2)}ch` }
|
|
458
572
|
}
|
|
459
|
-
) : /* @__PURE__ */
|
|
573
|
+
) : /* @__PURE__ */ jsx4(
|
|
460
574
|
"span",
|
|
461
575
|
{
|
|
462
576
|
className: cn(
|
|
@@ -473,46 +587,86 @@ var BrowserTabItem = React3.forwardRef(
|
|
|
473
587
|
children: label
|
|
474
588
|
}
|
|
475
589
|
),
|
|
476
|
-
badge && /* @__PURE__ */
|
|
477
|
-
onClose && /* @__PURE__ */
|
|
478
|
-
"
|
|
590
|
+
badge && /* @__PURE__ */ jsx4(Badge, { variant: "light", type: "neutral", size: "sm", children: badge }),
|
|
591
|
+
!pinned && (isEditable || onClose) && /* @__PURE__ */ jsxs4(
|
|
592
|
+
"div",
|
|
479
593
|
{
|
|
480
|
-
|
|
481
|
-
e.stopPropagation();
|
|
482
|
-
onClose(e);
|
|
483
|
-
},
|
|
594
|
+
"aria-hidden": !isHovered,
|
|
484
595
|
className: cn(
|
|
485
|
-
"
|
|
486
|
-
|
|
596
|
+
"absolute right-0 top-0 bottom-0 flex items-center justify-end gap-2xs pl-2xl pr-2xs",
|
|
597
|
+
"transition-opacity duration-150 bg-gradient-to-l from-[72%] to-transparent",
|
|
598
|
+
isActive ? "from-browser-tab-item-bg rounded-r-base" : "from-browser-tab-item-hover-bg rounded-r-sm",
|
|
599
|
+
isHovered ? "opacity-100" : "opacity-0 pointer-events-none"
|
|
487
600
|
),
|
|
488
|
-
|
|
489
|
-
|
|
601
|
+
children: [
|
|
602
|
+
isEditable && /* @__PURE__ */ jsx4(
|
|
603
|
+
"button",
|
|
604
|
+
{
|
|
605
|
+
onClick: (e) => {
|
|
606
|
+
e.stopPropagation();
|
|
607
|
+
onEdit?.(e);
|
|
608
|
+
},
|
|
609
|
+
tabIndex: isHovered ? 0 : -1,
|
|
610
|
+
className: cn(
|
|
611
|
+
"shrink-0 flex items-center justify-center cursor-pointer rounded-2xs p-2xs",
|
|
612
|
+
"hover:bg-black/5 transition-colors",
|
|
613
|
+
isActive ? "text-browser-tab-item-active-icon" : "text-browser-tab-item-inactive-icon"
|
|
614
|
+
),
|
|
615
|
+
"aria-label": `Edit ${label}`,
|
|
616
|
+
children: /* @__PURE__ */ jsx4(Icon3, { icon: faPenOutline, size: "xs" })
|
|
617
|
+
}
|
|
618
|
+
),
|
|
619
|
+
onClose && /* @__PURE__ */ jsx4(
|
|
620
|
+
"button",
|
|
621
|
+
{
|
|
622
|
+
onClick: (e) => {
|
|
623
|
+
e.stopPropagation();
|
|
624
|
+
onClose(e);
|
|
625
|
+
},
|
|
626
|
+
tabIndex: isHovered ? 0 : -1,
|
|
627
|
+
className: cn(
|
|
628
|
+
"shrink-0 flex items-center justify-center cursor-pointer rounded-2xs p-2xs",
|
|
629
|
+
"hover:bg-black/5 transition-colors",
|
|
630
|
+
isActive ? "text-browser-tab-item-active-icon" : "text-browser-tab-item-inactive-icon"
|
|
631
|
+
),
|
|
632
|
+
"aria-label": `Close ${label}`,
|
|
633
|
+
children: /* @__PURE__ */ jsx4(Icon3, { icon: faXmarkOutline, size: "xs" })
|
|
634
|
+
}
|
|
635
|
+
)
|
|
636
|
+
]
|
|
490
637
|
}
|
|
491
638
|
)
|
|
492
639
|
]
|
|
493
640
|
}
|
|
494
641
|
),
|
|
495
|
-
isActive && /* @__PURE__ */
|
|
496
|
-
/* @__PURE__ */
|
|
497
|
-
/* @__PURE__ */
|
|
498
|
-
/* @__PURE__ */
|
|
499
|
-
/* @__PURE__ */
|
|
500
|
-
/* @__PURE__ */
|
|
642
|
+
isActive && /* @__PURE__ */ jsxs4(Fragment, { children: [
|
|
643
|
+
/* @__PURE__ */ jsx4("span", { "aria-hidden": true, className: "pointer-events-none absolute bottom-0 left-[-1px] w-px h-[8px] bg-browser-tab-item-bg" }),
|
|
644
|
+
/* @__PURE__ */ jsx4("span", { "aria-hidden": true, className: "pointer-events-none absolute bottom-0 right-[-1px] w-px h-[8px] bg-browser-tab-item-bg" }),
|
|
645
|
+
/* @__PURE__ */ jsxs4("span", { "aria-hidden": true, className: "pointer-events-none absolute bottom-0 left-[-8px] size-[8px]", children: [
|
|
646
|
+
/* @__PURE__ */ jsx4("span", { className: "absolute bottom-0 left-0 right-0 h-px bg-browser-tab-item-bg" }),
|
|
647
|
+
/* @__PURE__ */ jsx4("span", { className: "absolute inset-0 rounded-br-[8px] border-b border-r border-solid border-browser-tab-item-border" })
|
|
501
648
|
] }),
|
|
502
|
-
/* @__PURE__ */
|
|
503
|
-
/* @__PURE__ */
|
|
504
|
-
/* @__PURE__ */
|
|
649
|
+
/* @__PURE__ */ jsxs4("span", { "aria-hidden": true, className: "pointer-events-none absolute bottom-0 right-[-8px] size-[8px]", children: [
|
|
650
|
+
/* @__PURE__ */ jsx4("span", { className: "absolute bottom-0 left-0 right-0 h-px bg-browser-tab-item-bg" }),
|
|
651
|
+
/* @__PURE__ */ jsx4("span", { className: "absolute inset-0 rounded-bl-[8px] border-b border-l border-solid border-browser-tab-item-border" })
|
|
505
652
|
] })
|
|
506
653
|
] })
|
|
507
654
|
]
|
|
508
655
|
}
|
|
509
656
|
);
|
|
657
|
+
if (pinned) {
|
|
658
|
+
return /* @__PURE__ */ jsx4(TooltipProvider, { delayDuration: 300, children: /* @__PURE__ */ jsxs4(Tooltip, { children: [
|
|
659
|
+
/* @__PURE__ */ jsx4(TooltipTrigger, { asChild: true, children: tab }),
|
|
660
|
+
/* @__PURE__ */ jsx4(TooltipContent, { side: "bottom", hasArrow: false, children: "Pinned tab" })
|
|
661
|
+
] }) });
|
|
662
|
+
}
|
|
663
|
+
return tab;
|
|
510
664
|
}
|
|
511
665
|
);
|
|
512
666
|
BrowserTabItem.displayName = "BrowserTabItem";
|
|
513
667
|
function useOverflowDetection(containerRef, childCount) {
|
|
514
|
-
const [visibleCount, setVisibleCount] =
|
|
515
|
-
|
|
668
|
+
const [visibleCount, setVisibleCount] = React4.useState(childCount);
|
|
669
|
+
React4.useEffect(() => {
|
|
516
670
|
const container = containerRef.current;
|
|
517
671
|
if (!container) return;
|
|
518
672
|
const measure = () => {
|
|
@@ -540,12 +694,12 @@ function useOverflowDetection(containerRef, childCount) {
|
|
|
540
694
|
}, [containerRef, childCount]);
|
|
541
695
|
return visibleCount;
|
|
542
696
|
}
|
|
543
|
-
var BrowserTab =
|
|
697
|
+
var BrowserTab = React4.forwardRef(
|
|
544
698
|
({ className, children, onAddTab, draggable = false, onReorder, onOverflowSelect, ...props }, ref) => {
|
|
545
|
-
const [dragIndex, setDragIndex] =
|
|
546
|
-
const [dropIndex, setDropIndex] =
|
|
547
|
-
const tabsContainerRef =
|
|
548
|
-
const childArray =
|
|
699
|
+
const [dragIndex, setDragIndex] = React4.useState(null);
|
|
700
|
+
const [dropIndex, setDropIndex] = React4.useState(null);
|
|
701
|
+
const tabsContainerRef = React4.useRef(null);
|
|
702
|
+
const childArray = React4.Children.toArray(children).filter(React4.isValidElement);
|
|
549
703
|
const visibleCount = useOverflowDetection(tabsContainerRef, childArray.length);
|
|
550
704
|
const hasOverflow = visibleCount < childArray.length;
|
|
551
705
|
const ctxBase = {
|
|
@@ -579,7 +733,7 @@ var BrowserTab = React3.forwardRef(
|
|
|
579
733
|
isActive: childProps.isActive
|
|
580
734
|
};
|
|
581
735
|
});
|
|
582
|
-
return /* @__PURE__ */
|
|
736
|
+
return /* @__PURE__ */ jsxs4(
|
|
583
737
|
"div",
|
|
584
738
|
{
|
|
585
739
|
ref,
|
|
@@ -589,15 +743,15 @@ var BrowserTab = React3.forwardRef(
|
|
|
589
743
|
),
|
|
590
744
|
...props,
|
|
591
745
|
children: [
|
|
592
|
-
/* @__PURE__ */
|
|
746
|
+
/* @__PURE__ */ jsxs4(
|
|
593
747
|
"div",
|
|
594
748
|
{
|
|
595
749
|
ref: tabsContainerRef,
|
|
596
750
|
className: "flex items-center flex-1 min-w-0 pl-base",
|
|
597
751
|
style: { overflowX: "clip", overflowY: "visible" },
|
|
598
752
|
children: [
|
|
599
|
-
childArray.map((child, index) => /* @__PURE__ */
|
|
600
|
-
onAddTab && !hasOverflow && /* @__PURE__ */
|
|
753
|
+
childArray.map((child, index) => /* @__PURE__ */ jsx4(BrowserTabContext.Provider, { value: { ...ctxBase, itemIndex: index }, children: child }, index)),
|
|
754
|
+
onAddTab && !hasOverflow && /* @__PURE__ */ jsx4(
|
|
601
755
|
Button,
|
|
602
756
|
{
|
|
603
757
|
className: "ml-base",
|
|
@@ -613,10 +767,11 @@ var BrowserTab = React3.forwardRef(
|
|
|
613
767
|
]
|
|
614
768
|
}
|
|
615
769
|
),
|
|
616
|
-
hasOverflow && /* @__PURE__ */
|
|
617
|
-
/* @__PURE__ */
|
|
770
|
+
hasOverflow && /* @__PURE__ */ jsxs4(DropdownMenuPrimitive.Root, { children: [
|
|
771
|
+
/* @__PURE__ */ jsx4(DropdownMenuPrimitive.Trigger, { asChild: true, children: /* @__PURE__ */ jsx4(
|
|
618
772
|
Button,
|
|
619
773
|
{
|
|
774
|
+
className: "mb-sm",
|
|
620
775
|
appearance: "ghost",
|
|
621
776
|
intent: "brand",
|
|
622
777
|
size: "sm",
|
|
@@ -625,7 +780,7 @@ var BrowserTab = React3.forwardRef(
|
|
|
625
780
|
"aria-label": "Show more tabs"
|
|
626
781
|
}
|
|
627
782
|
) }),
|
|
628
|
-
/* @__PURE__ */
|
|
783
|
+
/* @__PURE__ */ jsx4(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx4(
|
|
629
784
|
DropdownMenuPrimitive.Content,
|
|
630
785
|
{
|
|
631
786
|
sideOffset: 4,
|
|
@@ -637,7 +792,7 @@ var BrowserTab = React3.forwardRef(
|
|
|
637
792
|
"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
|
|
638
793
|
"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2"
|
|
639
794
|
),
|
|
640
|
-
children: hiddenItems.map((item) => /* @__PURE__ */
|
|
795
|
+
children: hiddenItems.map((item) => /* @__PURE__ */ jsxs4(
|
|
641
796
|
DropdownMenuPrimitive.Item,
|
|
642
797
|
{
|
|
643
798
|
className: cn(
|
|
@@ -650,7 +805,7 @@ var BrowserTab = React3.forwardRef(
|
|
|
650
805
|
}
|
|
651
806
|
},
|
|
652
807
|
children: [
|
|
653
|
-
item.icon && /* @__PURE__ */
|
|
808
|
+
item.icon && /* @__PURE__ */ jsx4(
|
|
654
809
|
Icon3,
|
|
655
810
|
{
|
|
656
811
|
icon: item.icon,
|
|
@@ -660,7 +815,7 @@ var BrowserTab = React3.forwardRef(
|
|
|
660
815
|
)
|
|
661
816
|
}
|
|
662
817
|
),
|
|
663
|
-
/* @__PURE__ */
|
|
818
|
+
/* @__PURE__ */ jsx4(
|
|
664
819
|
"span",
|
|
665
820
|
{
|
|
666
821
|
className: cn(
|
|
@@ -670,7 +825,7 @@ var BrowserTab = React3.forwardRef(
|
|
|
670
825
|
children: item.label
|
|
671
826
|
}
|
|
672
827
|
),
|
|
673
|
-
item.badge && /* @__PURE__ */
|
|
828
|
+
item.badge && /* @__PURE__ */ jsx4(Badge, { variant: "light", type: "neutral", size: "sm", children: item.badge })
|
|
674
829
|
]
|
|
675
830
|
},
|
|
676
831
|
item.index
|
|
@@ -678,9 +833,10 @@ var BrowserTab = React3.forwardRef(
|
|
|
678
833
|
}
|
|
679
834
|
) })
|
|
680
835
|
] }),
|
|
681
|
-
onAddTab && hasOverflow && /* @__PURE__ */
|
|
836
|
+
onAddTab && hasOverflow && /* @__PURE__ */ jsx4(
|
|
682
837
|
Button,
|
|
683
838
|
{
|
|
839
|
+
className: "mb-sm",
|
|
684
840
|
appearance: "ghost",
|
|
685
841
|
intent: "brand",
|
|
686
842
|
size: "sm",
|
|
@@ -698,7 +854,7 @@ var BrowserTab = React3.forwardRef(
|
|
|
698
854
|
BrowserTab.displayName = "BrowserTab";
|
|
699
855
|
|
|
700
856
|
// src/components/ui/bulk-action.tsx
|
|
701
|
-
import * as
|
|
857
|
+
import * as React6 from "react";
|
|
702
858
|
import {
|
|
703
859
|
Icon as Icon5,
|
|
704
860
|
faXmarkOutline as faXmarkOutline2,
|
|
@@ -706,10 +862,10 @@ import {
|
|
|
706
862
|
} from "@l3mpire/icons";
|
|
707
863
|
|
|
708
864
|
// src/components/ui/dropdown-menu.tsx
|
|
709
|
-
import * as
|
|
865
|
+
import * as React5 from "react";
|
|
710
866
|
import * as DropdownMenuPrimitive2 from "@radix-ui/react-dropdown-menu";
|
|
711
867
|
import { Icon as Icon4 } from "@l3mpire/icons";
|
|
712
|
-
import { jsx as
|
|
868
|
+
import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
713
869
|
var textSm = "text-sm font-regular leading-sm";
|
|
714
870
|
var textXs = "text-xs font-regular leading-xs";
|
|
715
871
|
var textXsMedium = "text-xs font-medium leading-xs";
|
|
@@ -722,13 +878,13 @@ var containerStyle = [
|
|
|
722
878
|
"p-xs",
|
|
723
879
|
"shadow-lg"
|
|
724
880
|
];
|
|
725
|
-
var DropdownMenu =
|
|
726
|
-
({ className, children, ...props }, ref) => /* @__PURE__ */
|
|
881
|
+
var DropdownMenu = React5.forwardRef(
|
|
882
|
+
({ className, children, ...props }, ref) => /* @__PURE__ */ jsx5("div", { ref, className: cn(containerStyle, className), ...props, children })
|
|
727
883
|
);
|
|
728
884
|
DropdownMenu.displayName = "DropdownMenu";
|
|
729
885
|
var DropdownMenuRoot = DropdownMenuPrimitive2.Root;
|
|
730
886
|
var DropdownMenuTrigger = DropdownMenuPrimitive2.Trigger;
|
|
731
|
-
var DropdownMenuContent =
|
|
887
|
+
var DropdownMenuContent = React5.forwardRef(({ className, sideOffset = 4, children, ...props }, ref) => /* @__PURE__ */ jsx5(DropdownMenuPrimitive2.Portal, { children: /* @__PURE__ */ jsx5(
|
|
732
888
|
DropdownMenuPrimitive2.Content,
|
|
733
889
|
{
|
|
734
890
|
ref,
|
|
@@ -747,12 +903,12 @@ var DropdownMenuContent = React4.forwardRef(({ className, sideOffset = 4, childr
|
|
|
747
903
|
}
|
|
748
904
|
) }));
|
|
749
905
|
DropdownMenuContent.displayName = "DropdownMenuContent";
|
|
750
|
-
var DropdownMenuList =
|
|
751
|
-
({ className, children, ...props }, ref) => /* @__PURE__ */
|
|
906
|
+
var DropdownMenuList = React5.forwardRef(
|
|
907
|
+
({ className, children, ...props }, ref) => /* @__PURE__ */ jsx5("div", { ref, className: cn("flex flex-col", className), role: "listbox", ...props, children })
|
|
752
908
|
);
|
|
753
909
|
DropdownMenuList.displayName = "DropdownMenuList";
|
|
754
910
|
var itemStyle = "flex items-center gap-base p-base rounded-base cursor-pointer hover:bg-dropdown-item-hover";
|
|
755
|
-
var DropdownMenuItem =
|
|
911
|
+
var DropdownMenuItem = React5.forwardRef(
|
|
756
912
|
({
|
|
757
913
|
className,
|
|
758
914
|
icon,
|
|
@@ -767,7 +923,7 @@ var DropdownMenuItem = React4.forwardRef(
|
|
|
767
923
|
onClick,
|
|
768
924
|
...props
|
|
769
925
|
}, ref) => {
|
|
770
|
-
const handleClick =
|
|
926
|
+
const handleClick = React5.useCallback(
|
|
771
927
|
(e) => {
|
|
772
928
|
const target = e.target;
|
|
773
929
|
if (!target.closest("button[role='checkbox']")) {
|
|
@@ -780,7 +936,7 @@ var DropdownMenuItem = React4.forwardRef(
|
|
|
780
936
|
},
|
|
781
937
|
[onClick]
|
|
782
938
|
);
|
|
783
|
-
return /* @__PURE__ */
|
|
939
|
+
return /* @__PURE__ */ jsxs5(
|
|
784
940
|
"div",
|
|
785
941
|
{
|
|
786
942
|
ref,
|
|
@@ -797,7 +953,7 @@ var DropdownMenuItem = React4.forwardRef(
|
|
|
797
953
|
children,
|
|
798
954
|
avatar,
|
|
799
955
|
flag,
|
|
800
|
-
icon && /* @__PURE__ */
|
|
956
|
+
icon && /* @__PURE__ */ jsx5(
|
|
801
957
|
Icon4,
|
|
802
958
|
{
|
|
803
959
|
icon,
|
|
@@ -805,9 +961,9 @@ var DropdownMenuItem = React4.forwardRef(
|
|
|
805
961
|
className: "shrink-0 text-dropdown-item-icon"
|
|
806
962
|
}
|
|
807
963
|
),
|
|
808
|
-
/* @__PURE__ */
|
|
809
|
-
/* @__PURE__ */
|
|
810
|
-
description && /* @__PURE__ */
|
|
964
|
+
/* @__PURE__ */ jsxs5("div", { className: "flex flex-1 items-center gap-sm min-w-0", children: [
|
|
965
|
+
/* @__PURE__ */ jsx5("span", { className: cn("truncate shrink-0", textSm, "text-dropdown-item-text"), children: label }),
|
|
966
|
+
description && /* @__PURE__ */ jsx5("span", { className: cn("truncate", textXs, "text-dropdown-item-secondary"), children: description })
|
|
811
967
|
] }),
|
|
812
968
|
badge,
|
|
813
969
|
action
|
|
@@ -817,7 +973,7 @@ var DropdownMenuItem = React4.forwardRef(
|
|
|
817
973
|
}
|
|
818
974
|
);
|
|
819
975
|
DropdownMenuItem.displayName = "DropdownMenuItem";
|
|
820
|
-
var DropdownMenuRadixItem =
|
|
976
|
+
var DropdownMenuRadixItem = React5.forwardRef(
|
|
821
977
|
({
|
|
822
978
|
className,
|
|
823
979
|
icon,
|
|
@@ -829,7 +985,7 @@ var DropdownMenuRadixItem = React4.forwardRef(
|
|
|
829
985
|
action,
|
|
830
986
|
children,
|
|
831
987
|
...props
|
|
832
|
-
}, ref) => /* @__PURE__ */
|
|
988
|
+
}, ref) => /* @__PURE__ */ jsxs5(
|
|
833
989
|
DropdownMenuPrimitive2.Item,
|
|
834
990
|
{
|
|
835
991
|
ref,
|
|
@@ -843,7 +999,7 @@ var DropdownMenuRadixItem = React4.forwardRef(
|
|
|
843
999
|
children,
|
|
844
1000
|
avatar,
|
|
845
1001
|
flag,
|
|
846
|
-
icon && /* @__PURE__ */
|
|
1002
|
+
icon && /* @__PURE__ */ jsx5(
|
|
847
1003
|
Icon4,
|
|
848
1004
|
{
|
|
849
1005
|
icon,
|
|
@@ -851,9 +1007,9 @@ var DropdownMenuRadixItem = React4.forwardRef(
|
|
|
851
1007
|
className: "shrink-0 text-dropdown-item-icon"
|
|
852
1008
|
}
|
|
853
1009
|
),
|
|
854
|
-
/* @__PURE__ */
|
|
855
|
-
/* @__PURE__ */
|
|
856
|
-
description && /* @__PURE__ */
|
|
1010
|
+
/* @__PURE__ */ jsxs5("div", { className: "flex flex-1 items-center gap-sm min-w-0", children: [
|
|
1011
|
+
/* @__PURE__ */ jsx5("span", { className: cn("truncate shrink-0", textSm, "text-dropdown-item-text"), children: label }),
|
|
1012
|
+
description && /* @__PURE__ */ jsx5("span", { className: cn("truncate", textXs, "text-dropdown-item-secondary"), children: description })
|
|
857
1013
|
] }),
|
|
858
1014
|
badge,
|
|
859
1015
|
action
|
|
@@ -862,7 +1018,7 @@ var DropdownMenuRadixItem = React4.forwardRef(
|
|
|
862
1018
|
)
|
|
863
1019
|
);
|
|
864
1020
|
DropdownMenuRadixItem.displayName = "DropdownMenuRadixItem";
|
|
865
|
-
var DropdownMenuHeading =
|
|
1021
|
+
var DropdownMenuHeading = React5.forwardRef(({ className, action, children, ...props }, ref) => /* @__PURE__ */ jsxs5(
|
|
866
1022
|
"div",
|
|
867
1023
|
{
|
|
868
1024
|
ref,
|
|
@@ -872,7 +1028,7 @@ var DropdownMenuHeading = React4.forwardRef(({ className, action, children, ...p
|
|
|
872
1028
|
),
|
|
873
1029
|
...props,
|
|
874
1030
|
children: [
|
|
875
|
-
/* @__PURE__ */
|
|
1031
|
+
/* @__PURE__ */ jsx5("span", { className: cn("flex-1 truncate uppercase", textXsMedium, "text-dropdown-heading-text"), children }),
|
|
876
1032
|
action
|
|
877
1033
|
]
|
|
878
1034
|
}
|
|
@@ -887,7 +1043,7 @@ var clearStyle = [
|
|
|
887
1043
|
"shadow-sm",
|
|
888
1044
|
"cursor-pointer"
|
|
889
1045
|
];
|
|
890
|
-
var DropdownMenuClear =
|
|
1046
|
+
var DropdownMenuClear = React5.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx5(
|
|
891
1047
|
"button",
|
|
892
1048
|
{
|
|
893
1049
|
ref,
|
|
@@ -900,10 +1056,10 @@ var DropdownMenuClear = React4.forwardRef(({ className, children, ...props }, re
|
|
|
900
1056
|
DropdownMenuClear.displayName = "DropdownMenuClear";
|
|
901
1057
|
|
|
902
1058
|
// src/components/ui/bulk-action.tsx
|
|
903
|
-
import { jsx as
|
|
1059
|
+
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
904
1060
|
var GAP_PX = 8;
|
|
905
1061
|
var MORE_BTN_FALLBACK = 36;
|
|
906
|
-
var BulkAction =
|
|
1062
|
+
var BulkAction = React6.forwardRef(
|
|
907
1063
|
({
|
|
908
1064
|
count,
|
|
909
1065
|
onClear,
|
|
@@ -914,11 +1070,11 @@ var BulkAction = React5.forwardRef(
|
|
|
914
1070
|
className,
|
|
915
1071
|
...props
|
|
916
1072
|
}, ref) => {
|
|
917
|
-
const slotRef =
|
|
918
|
-
const measureRef =
|
|
919
|
-
const moreBtnMeasureRef =
|
|
920
|
-
const [visibleCount, setVisibleCount] =
|
|
921
|
-
|
|
1073
|
+
const slotRef = React6.useRef(null);
|
|
1074
|
+
const measureRef = React6.useRef(null);
|
|
1075
|
+
const moreBtnMeasureRef = React6.useRef(null);
|
|
1076
|
+
const [visibleCount, setVisibleCount] = React6.useState(actions.length);
|
|
1077
|
+
React6.useLayoutEffect(() => {
|
|
922
1078
|
const slot = slotRef.current;
|
|
923
1079
|
const measure = measureRef.current;
|
|
924
1080
|
if (!slot || !measure) return;
|
|
@@ -958,7 +1114,7 @@ var BulkAction = React5.forwardRef(
|
|
|
958
1114
|
}, [actions]);
|
|
959
1115
|
const visibleItems = actions.slice(0, visibleCount);
|
|
960
1116
|
const overflowItems = actions.slice(visibleCount);
|
|
961
|
-
return /* @__PURE__ */
|
|
1117
|
+
return /* @__PURE__ */ jsxs6(
|
|
962
1118
|
"div",
|
|
963
1119
|
{
|
|
964
1120
|
ref,
|
|
@@ -974,20 +1130,20 @@ var BulkAction = React5.forwardRef(
|
|
|
974
1130
|
),
|
|
975
1131
|
...props,
|
|
976
1132
|
children: [
|
|
977
|
-
/* @__PURE__ */
|
|
1133
|
+
/* @__PURE__ */ jsxs6("span", { className: "text-sm font-regular leading-sm text-bulk-action-count whitespace-nowrap shrink-0", children: [
|
|
978
1134
|
count,
|
|
979
1135
|
" ",
|
|
980
1136
|
countLabel
|
|
981
1137
|
] }),
|
|
982
|
-
/* @__PURE__ */
|
|
1138
|
+
/* @__PURE__ */ jsxs6(
|
|
983
1139
|
"div",
|
|
984
1140
|
{
|
|
985
1141
|
ref: slotRef,
|
|
986
1142
|
className: "relative flex flex-1 items-center gap-base min-w-0 overflow-hidden",
|
|
987
1143
|
children: [
|
|
988
|
-
visibleItems.map((item) => /* @__PURE__ */
|
|
989
|
-
overflowItems.length > 0 && /* @__PURE__ */
|
|
990
|
-
/* @__PURE__ */
|
|
1144
|
+
visibleItems.map((item) => /* @__PURE__ */ jsx6(ActionButton, { item }, item.id)),
|
|
1145
|
+
overflowItems.length > 0 && /* @__PURE__ */ jsxs6(DropdownMenuRoot, { children: [
|
|
1146
|
+
/* @__PURE__ */ jsx6(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx6(
|
|
991
1147
|
Button,
|
|
992
1148
|
{
|
|
993
1149
|
type: "button",
|
|
@@ -999,7 +1155,7 @@ var BulkAction = React5.forwardRef(
|
|
|
999
1155
|
"aria-label": "More actions"
|
|
1000
1156
|
}
|
|
1001
1157
|
) }),
|
|
1002
|
-
/* @__PURE__ */
|
|
1158
|
+
/* @__PURE__ */ jsx6(DropdownMenuContent, { align: "end", side: "top", sideOffset: 8, children: overflowItems.map((item) => /* @__PURE__ */ jsx6(
|
|
1003
1159
|
DropdownMenuItem,
|
|
1004
1160
|
{
|
|
1005
1161
|
icon: item.icon,
|
|
@@ -1009,29 +1165,29 @@ var BulkAction = React5.forwardRef(
|
|
|
1009
1165
|
item.id
|
|
1010
1166
|
)) })
|
|
1011
1167
|
] }),
|
|
1012
|
-
/* @__PURE__ */
|
|
1168
|
+
/* @__PURE__ */ jsx6(
|
|
1013
1169
|
"div",
|
|
1014
1170
|
{
|
|
1015
1171
|
ref: measureRef,
|
|
1016
1172
|
"aria-hidden": true,
|
|
1017
1173
|
className: "pointer-events-none absolute inset-0 flex items-center gap-base opacity-0 invisible",
|
|
1018
|
-
children: actions.map((item) => /* @__PURE__ */
|
|
1174
|
+
children: actions.map((item) => /* @__PURE__ */ jsx6(ActionButton, { item, tabIndex: -1 }, `measure-${item.id}`))
|
|
1019
1175
|
}
|
|
1020
1176
|
),
|
|
1021
|
-
/* @__PURE__ */
|
|
1177
|
+
/* @__PURE__ */ jsx6(
|
|
1022
1178
|
"button",
|
|
1023
1179
|
{
|
|
1024
1180
|
ref: moreBtnMeasureRef,
|
|
1025
1181
|
"aria-hidden": true,
|
|
1026
1182
|
tabIndex: -1,
|
|
1027
1183
|
className: "pointer-events-none absolute opacity-0 invisible h-8 w-8 min-w-8",
|
|
1028
|
-
children: /* @__PURE__ */
|
|
1184
|
+
children: /* @__PURE__ */ jsx6(Icon5, { icon: faEllipsisOutline, size: "sm" })
|
|
1029
1185
|
}
|
|
1030
1186
|
)
|
|
1031
1187
|
]
|
|
1032
1188
|
}
|
|
1033
1189
|
),
|
|
1034
|
-
/* @__PURE__ */
|
|
1190
|
+
/* @__PURE__ */ jsx6(
|
|
1035
1191
|
Button,
|
|
1036
1192
|
{
|
|
1037
1193
|
type: "button",
|
|
@@ -1051,7 +1207,7 @@ var BulkAction = React5.forwardRef(
|
|
|
1051
1207
|
}
|
|
1052
1208
|
);
|
|
1053
1209
|
BulkAction.displayName = "BulkAction";
|
|
1054
|
-
var ActionButton = ({ item, tabIndex }) => /* @__PURE__ */
|
|
1210
|
+
var ActionButton = ({ item, tabIndex }) => /* @__PURE__ */ jsx6(
|
|
1055
1211
|
Button,
|
|
1056
1212
|
{
|
|
1057
1213
|
type: "button",
|
|
@@ -1067,67 +1223,6 @@ var ActionButton = ({ item, tabIndex }) => /* @__PURE__ */ jsx5(
|
|
|
1067
1223
|
}
|
|
1068
1224
|
);
|
|
1069
1225
|
|
|
1070
|
-
// src/components/ui/tooltip.tsx
|
|
1071
|
-
import * as React6 from "react";
|
|
1072
|
-
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
1073
|
-
import { cva as cva3 } from "class-variance-authority";
|
|
1074
|
-
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1075
|
-
var tooltipContentVariants = cva3(
|
|
1076
|
-
[
|
|
1077
|
-
"inline-flex items-center z-50",
|
|
1078
|
-
"gap-xs",
|
|
1079
|
-
"px-base py-sm",
|
|
1080
|
-
"rounded-lg",
|
|
1081
|
-
"shadow-lg",
|
|
1082
|
-
"text-sm",
|
|
1083
|
-
"font-regular",
|
|
1084
|
-
"leading-sm",
|
|
1085
|
-
"data-[state=delayed-open]:animate-[tooltip-in_150ms_ease-out]",
|
|
1086
|
-
"data-[state=instant-open]:animate-[tooltip-in_0ms]",
|
|
1087
|
-
"data-[state=closed]:animate-[tooltip-out_100ms_ease-in]"
|
|
1088
|
-
],
|
|
1089
|
-
{
|
|
1090
|
-
variants: {
|
|
1091
|
-
type: {
|
|
1092
|
-
default: [
|
|
1093
|
-
"bg-tooltip-default-bg",
|
|
1094
|
-
"text-tooltip-default-text"
|
|
1095
|
-
],
|
|
1096
|
-
invert: [
|
|
1097
|
-
"bg-tooltip-invert-bg",
|
|
1098
|
-
"text-tooltip-invert-text",
|
|
1099
|
-
"border border-tooltip-invert-border"
|
|
1100
|
-
]
|
|
1101
|
-
}
|
|
1102
|
-
},
|
|
1103
|
-
defaultVariants: {
|
|
1104
|
-
type: "default"
|
|
1105
|
-
}
|
|
1106
|
-
}
|
|
1107
|
-
);
|
|
1108
|
-
var TooltipProvider = TooltipPrimitive.Provider;
|
|
1109
|
-
var Tooltip = TooltipPrimitive.Root;
|
|
1110
|
-
var TooltipTrigger = TooltipPrimitive.Trigger;
|
|
1111
|
-
var TooltipContent = React6.forwardRef(({ className, type, hasArrow = true, sideOffset = 4, children, ...props }, ref) => /* @__PURE__ */ jsx6(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs6(
|
|
1112
|
-
TooltipPrimitive.Content,
|
|
1113
|
-
{
|
|
1114
|
-
ref,
|
|
1115
|
-
sideOffset,
|
|
1116
|
-
className: cn(tooltipContentVariants({ type, className })),
|
|
1117
|
-
...props,
|
|
1118
|
-
children: [
|
|
1119
|
-
children,
|
|
1120
|
-
hasArrow && /* @__PURE__ */ jsx6(
|
|
1121
|
-
TooltipPrimitive.Arrow,
|
|
1122
|
-
{
|
|
1123
|
-
className: type === "default" ? "fill-tooltip-default-bg" : "fill-tooltip-invert-bg"
|
|
1124
|
-
}
|
|
1125
|
-
)
|
|
1126
|
-
]
|
|
1127
|
-
}
|
|
1128
|
-
) }));
|
|
1129
|
-
TooltipContent.displayName = "TooltipContent";
|
|
1130
|
-
|
|
1131
1226
|
// src/components/ui/truncated-text.tsx
|
|
1132
1227
|
import * as React7 from "react";
|
|
1133
1228
|
import * as TooltipPrimitive2 from "@radix-ui/react-tooltip";
|
|
@@ -3173,6 +3268,20 @@ var tagVariants = cva12(
|
|
|
3173
3268
|
"text-tag-neutral-text"
|
|
3174
3269
|
]
|
|
3175
3270
|
},
|
|
3271
|
+
// Categorical tones — soft style with a subtle border.
|
|
3272
|
+
// When `tone` is set it overrides `variant` (handled in the component).
|
|
3273
|
+
tone: {
|
|
3274
|
+
indigo: "bg-tag-indigo-bg text-tag-indigo-text border border-tag-indigo-border",
|
|
3275
|
+
rose: "bg-tag-rose-bg text-tag-rose-text border border-tag-rose-border",
|
|
3276
|
+
lime: "bg-tag-lime-bg text-tag-lime-text border border-tag-lime-border",
|
|
3277
|
+
violet: "bg-tag-violet-bg text-tag-violet-text border border-tag-violet-border",
|
|
3278
|
+
cyan: "bg-tag-cyan-bg text-tag-cyan-text border border-tag-cyan-border",
|
|
3279
|
+
orange: "bg-tag-orange-bg text-tag-orange-text border border-tag-orange-border",
|
|
3280
|
+
emerald: "bg-tag-emerald-bg text-tag-emerald-text border border-tag-emerald-border",
|
|
3281
|
+
fuchsia: "bg-tag-fuchsia-bg text-tag-fuchsia-text border border-tag-fuchsia-border",
|
|
3282
|
+
amber: "bg-tag-amber-bg text-tag-amber-text border border-tag-amber-border",
|
|
3283
|
+
slate: "bg-tag-slate-bg text-tag-slate-text border border-tag-slate-border"
|
|
3284
|
+
},
|
|
3176
3285
|
size: {
|
|
3177
3286
|
sm: [
|
|
3178
3287
|
"p-xs",
|
|
@@ -3186,21 +3295,29 @@ var tagVariants = cva12(
|
|
|
3186
3295
|
]
|
|
3187
3296
|
}
|
|
3188
3297
|
},
|
|
3298
|
+
// variant default is applied in the component so `tone` can suppress it.
|
|
3189
3299
|
defaultVariants: {
|
|
3190
|
-
variant: "brand",
|
|
3191
3300
|
size: "sm"
|
|
3192
3301
|
}
|
|
3193
3302
|
}
|
|
3194
3303
|
);
|
|
3195
3304
|
var iconSizeMap3 = { sm: "xs", md: "sm" };
|
|
3196
3305
|
var Tag = React26.forwardRef(
|
|
3197
|
-
({ className, variant, size, icon, onClose, children, ...props }, ref) => {
|
|
3306
|
+
({ className, variant, tone, size, icon, onClose, children, ...props }, ref) => {
|
|
3198
3307
|
const iconSize = iconSizeMap3[size ?? "sm"];
|
|
3199
3308
|
return /* @__PURE__ */ jsxs24(
|
|
3200
3309
|
"span",
|
|
3201
3310
|
{
|
|
3202
3311
|
ref,
|
|
3203
|
-
className: cn(
|
|
3312
|
+
className: cn(
|
|
3313
|
+
tagVariants({
|
|
3314
|
+
// A categorical tone is self-contained and overrides variant.
|
|
3315
|
+
variant: tone != null ? void 0 : variant ?? "brand",
|
|
3316
|
+
tone,
|
|
3317
|
+
size
|
|
3318
|
+
}),
|
|
3319
|
+
className
|
|
3320
|
+
),
|
|
3204
3321
|
...props,
|
|
3205
3322
|
children: [
|
|
3206
3323
|
icon && /* @__PURE__ */ jsx26(Icon17, { icon, size: iconSize, className: "shrink-0" }),
|
|
@@ -6348,10 +6465,11 @@ var SaveViewButton = React46.forwardRef(
|
|
|
6348
6465
|
const sharedStyle = [
|
|
6349
6466
|
"relative flex items-center justify-center",
|
|
6350
6467
|
"min-h-[32px] max-h-[32px]",
|
|
6351
|
-
"bg-gradient-to-t from-btn-
|
|
6352
|
-
"border border-btn-
|
|
6468
|
+
"bg-gradient-to-t from-btn-outlined-neutral-bg-default from-[10%] to-btn-outlined-neutral-bg-gradient-to-default",
|
|
6469
|
+
"border border-btn-outlined-neutral-border-default",
|
|
6353
6470
|
"shadow-sm cursor-pointer transition-colors",
|
|
6354
|
-
"hover:from-btn-
|
|
6471
|
+
"hover:from-btn-outlined-neutral-bg-hover hover:from-[0%] hover:to-btn-outlined-neutral-bg-gradient-to-hover",
|
|
6472
|
+
"hover:border-btn-outlined-neutral-border-hover"
|
|
6355
6473
|
];
|
|
6356
6474
|
return /* @__PURE__ */ jsxs41(
|
|
6357
6475
|
"div",
|
|
@@ -6360,7 +6478,7 @@ var SaveViewButton = React46.forwardRef(
|
|
|
6360
6478
|
className: cn("flex items-center", className),
|
|
6361
6479
|
...props,
|
|
6362
6480
|
children: [
|
|
6363
|
-
/* @__PURE__ */
|
|
6481
|
+
/* @__PURE__ */ jsx46(
|
|
6364
6482
|
"button",
|
|
6365
6483
|
{
|
|
6366
6484
|
type: "button",
|
|
@@ -6370,33 +6488,28 @@ var SaveViewButton = React46.forwardRef(
|
|
|
6370
6488
|
"gap-sm px-base py-sm min-w-[80px]",
|
|
6371
6489
|
"rounded-l-md -mr-px"
|
|
6372
6490
|
),
|
|
6373
|
-
children:
|
|
6374
|
-
/* @__PURE__ */ jsx46("span", { className: "text-sm font-medium leading-sm whitespace-nowrap text-btn-solid-brand-text-default", children: label }),
|
|
6375
|
-
/* @__PURE__ */ jsx46("span", { className: "absolute inset-0 rounded-l-[9px] border border-btn-solid-brand-inner-border-default shadow-sm pointer-events-none" })
|
|
6376
|
-
]
|
|
6491
|
+
children: /* @__PURE__ */ jsx46("span", { className: "text-sm font-medium leading-sm whitespace-nowrap text-btn-outlined-neutral-text-default", children: label })
|
|
6377
6492
|
}
|
|
6378
6493
|
),
|
|
6379
|
-
/* @__PURE__ */
|
|
6494
|
+
/* @__PURE__ */ jsx46(
|
|
6380
6495
|
"button",
|
|
6381
6496
|
{
|
|
6382
6497
|
type: "button",
|
|
6383
6498
|
onClick: onDropdown,
|
|
6499
|
+
"aria-label": "More save options",
|
|
6384
6500
|
className: cn(
|
|
6385
6501
|
sharedStyle,
|
|
6386
6502
|
"p-sm",
|
|
6387
6503
|
"rounded-r-md -ml-px"
|
|
6388
6504
|
),
|
|
6389
|
-
children:
|
|
6390
|
-
|
|
6391
|
-
|
|
6392
|
-
|
|
6393
|
-
|
|
6394
|
-
|
|
6395
|
-
|
|
6396
|
-
|
|
6397
|
-
),
|
|
6398
|
-
/* @__PURE__ */ jsx46("span", { className: "absolute inset-0 rounded-r-[9px] border border-btn-solid-brand-inner-border-default shadow-sm pointer-events-none" })
|
|
6399
|
-
]
|
|
6505
|
+
children: /* @__PURE__ */ jsx46(
|
|
6506
|
+
Icon28,
|
|
6507
|
+
{
|
|
6508
|
+
icon: faChevronDownOutline,
|
|
6509
|
+
size: "sm",
|
|
6510
|
+
className: "text-btn-outlined-neutral-text-default"
|
|
6511
|
+
}
|
|
6512
|
+
)
|
|
6400
6513
|
}
|
|
6401
6514
|
)
|
|
6402
6515
|
]
|