@olundot/ui 0.8.2 → 0.10.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/CHANGELOG.md +18 -0
- package/dist/index.d.ts +67 -26
- package/dist/index.js +789 -612
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4138,6 +4138,9 @@ function DataTableInner({
|
|
|
4138
4138
|
selectable = false,
|
|
4139
4139
|
selectedIds,
|
|
4140
4140
|
onSelectionChange,
|
|
4141
|
+
selectionBar = "top",
|
|
4142
|
+
activeRowId,
|
|
4143
|
+
onRowContextMenu,
|
|
4141
4144
|
sortBy,
|
|
4142
4145
|
onSortChange,
|
|
4143
4146
|
loading = false,
|
|
@@ -4185,7 +4188,7 @@ function DataTableInner({
|
|
|
4185
4188
|
className: cn(dataTableVariants({ density, surface, className })),
|
|
4186
4189
|
...props,
|
|
4187
4190
|
children: [
|
|
4188
|
-
selectable ? /* @__PURE__ */ jsx24(
|
|
4191
|
+
selectable && selectionBar === "top" ? /* @__PURE__ */ jsx24(
|
|
4189
4192
|
"div",
|
|
4190
4193
|
{
|
|
4191
4194
|
"data-slot": "data-table-selection-bar",
|
|
@@ -4299,16 +4302,19 @@ function DataTableInner({
|
|
|
4299
4302
|
) : data.length === 0 ? /* @__PURE__ */ jsx24("div", { "data-slot": "data-table-empty", className: "border-t border-[var(--border-subtle)] p-[var(--space-2)]", children: emptyState }) : /* @__PURE__ */ jsx24("div", { role: "rowgroup", children: data.map((row) => {
|
|
4300
4303
|
const rowId = getRowId(row, keyField);
|
|
4301
4304
|
const selected = resolvedSelectedIds.has(rowId);
|
|
4305
|
+
const visuallySelected = selected || rowId === activeRowId;
|
|
4302
4306
|
const href = rowHref?.(row);
|
|
4303
4307
|
return /* @__PURE__ */ jsxs23(
|
|
4304
4308
|
"div",
|
|
4305
4309
|
{
|
|
4306
4310
|
"data-slot": "data-table-row",
|
|
4311
|
+
"data-row-id": rowId,
|
|
4307
4312
|
"data-href": href,
|
|
4308
4313
|
role: "row",
|
|
4309
4314
|
tabIndex: href ? 0 : void 0,
|
|
4310
|
-
className: cn(dataTableRowVariants({ interactive: Boolean(href), selected })),
|
|
4315
|
+
className: cn(dataTableRowVariants({ interactive: Boolean(href), selected: visuallySelected })),
|
|
4311
4316
|
style: { gridTemplateColumns },
|
|
4317
|
+
onContextMenu: (event) => onRowContextMenu?.(rowId, event),
|
|
4312
4318
|
onClick: (event) => {
|
|
4313
4319
|
if (!href || isInteractiveTarget(event.target)) {
|
|
4314
4320
|
return;
|
|
@@ -4388,6 +4394,7 @@ function DataTableInner({
|
|
|
4388
4394
|
children: data.map((row) => {
|
|
4389
4395
|
const rowId = getRowId(row, keyField);
|
|
4390
4396
|
const selected = resolvedSelectedIds.has(rowId);
|
|
4397
|
+
const visuallySelected = selected || rowId === activeRowId;
|
|
4391
4398
|
const href = rowHref?.(row);
|
|
4392
4399
|
const primaryText = getAccessibleCellText(row, primaryColumn, rowId);
|
|
4393
4400
|
const primaryLabel = primaryColumn ? getHeaderLabel(primaryColumn) : "\uD589";
|
|
@@ -4395,6 +4402,7 @@ function DataTableInner({
|
|
|
4395
4402
|
"div",
|
|
4396
4403
|
{
|
|
4397
4404
|
"data-slot": "data-table-mobile-card",
|
|
4405
|
+
"data-row-id": rowId,
|
|
4398
4406
|
"data-href": href,
|
|
4399
4407
|
role: "listitem",
|
|
4400
4408
|
tabIndex: href ? 0 : void 0,
|
|
@@ -4403,8 +4411,9 @@ function DataTableInner({
|
|
|
4403
4411
|
"flex min-w-0 flex-col gap-[var(--space-1-5)] border-t border-[var(--border-subtle)] px-[var(--space-2)] py-[var(--space-2)]",
|
|
4404
4412
|
"text-body-sm leading-compact text-foreground transition-colors motion-reduce:transition-none",
|
|
4405
4413
|
href ? "cursor-pointer hover:bg-[var(--action-hover)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-[var(--focus-ring)]" : null,
|
|
4406
|
-
|
|
4414
|
+
visuallySelected ? "bg-[var(--action-selected)]" : null
|
|
4407
4415
|
),
|
|
4416
|
+
onContextMenu: (event) => onRowContextMenu?.(rowId, event),
|
|
4408
4417
|
onClick: (event) => {
|
|
4409
4418
|
if (!href || isInteractiveTarget(event.target)) {
|
|
4410
4419
|
return;
|
|
@@ -4482,220 +4491,24 @@ function DataTableInner({
|
|
|
4482
4491
|
var DataTable = React22.forwardRef(DataTableInner);
|
|
4483
4492
|
DataTable.displayName = "DataTable";
|
|
4484
4493
|
|
|
4485
|
-
// src/components/ui/confirm-dialog.tsx
|
|
4486
|
-
import * as React23 from "react";
|
|
4487
|
-
import { Fragment as Fragment7, jsx as jsx25, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
4488
|
-
var confirmDialogContentClassName = cn(
|
|
4489
|
-
"fixed left-1/2 top-1/2 z-[var(--z-modal)]",
|
|
4490
|
-
"-translate-x-1/2 -translate-y-1/2",
|
|
4491
|
-
"w-[calc(100vw-2rem)] max-w-[420px]",
|
|
4492
|
-
"flex flex-col gap-[var(--space-3)]",
|
|
4493
|
-
"bg-[var(--bg-raised)] border border-[var(--border-subtle)]",
|
|
4494
|
-
"rounded-[var(--radius-lg)] p-[var(--space-3)] shadow-[var(--elevation-4)]",
|
|
4495
|
-
"text-foreground"
|
|
4496
|
-
);
|
|
4497
|
-
var confirmDialogTitleClassName = cn(
|
|
4498
|
-
"text-[18px] font-bold leading-snug text-foreground"
|
|
4499
|
-
);
|
|
4500
|
-
var confirmDialogDescriptionClassName = cn(
|
|
4501
|
-
"break-keep text-[14px] leading-relaxed text-text-secondary"
|
|
4502
|
-
);
|
|
4503
|
-
var confirmDialogFooterClassName = "flex items-center justify-end gap-[var(--space-1-5)]";
|
|
4504
|
-
function ConfirmDialog({
|
|
4505
|
-
open,
|
|
4506
|
-
onOpenChange,
|
|
4507
|
-
title,
|
|
4508
|
-
description,
|
|
4509
|
-
tone = "default",
|
|
4510
|
-
confirmLabel,
|
|
4511
|
-
cancelLabel = "\uCDE8\uC18C",
|
|
4512
|
-
onConfirm,
|
|
4513
|
-
loading = false
|
|
4514
|
-
}) {
|
|
4515
|
-
const [pending, setPending] = React23.useState(false);
|
|
4516
|
-
const busyRef = React23.useRef(false);
|
|
4517
|
-
const isBusy = loading || pending;
|
|
4518
|
-
const handleOpenChange = React23.useCallback(
|
|
4519
|
-
(nextOpen) => {
|
|
4520
|
-
if (!nextOpen && isBusy) {
|
|
4521
|
-
return;
|
|
4522
|
-
}
|
|
4523
|
-
onOpenChange(nextOpen);
|
|
4524
|
-
},
|
|
4525
|
-
[isBusy, onOpenChange]
|
|
4526
|
-
);
|
|
4527
|
-
const handleConfirm = React23.useCallback(async () => {
|
|
4528
|
-
if (busyRef.current || loading) {
|
|
4529
|
-
return;
|
|
4530
|
-
}
|
|
4531
|
-
busyRef.current = true;
|
|
4532
|
-
setPending(true);
|
|
4533
|
-
try {
|
|
4534
|
-
await onConfirm();
|
|
4535
|
-
onOpenChange(false);
|
|
4536
|
-
} finally {
|
|
4537
|
-
busyRef.current = false;
|
|
4538
|
-
setPending(false);
|
|
4539
|
-
}
|
|
4540
|
-
}, [loading, onConfirm, onOpenChange]);
|
|
4541
|
-
const dialogBody = /* @__PURE__ */ jsxs24(Fragment7, { children: [
|
|
4542
|
-
/* @__PURE__ */ jsx25("div", { className: "flex items-start justify-between gap-[var(--space-2)]", children: /* @__PURE__ */ jsxs24("div", { className: "min-w-0 space-y-[var(--space-1)]", children: [
|
|
4543
|
-
/* @__PURE__ */ jsx25(
|
|
4544
|
-
DialogTitle,
|
|
4545
|
-
{
|
|
4546
|
-
"data-slot": "dialog-title",
|
|
4547
|
-
className: confirmDialogTitleClassName,
|
|
4548
|
-
children: title
|
|
4549
|
-
}
|
|
4550
|
-
),
|
|
4551
|
-
description ? /* @__PURE__ */ jsx25(
|
|
4552
|
-
DialogDescription,
|
|
4553
|
-
{
|
|
4554
|
-
"data-slot": "dialog-description",
|
|
4555
|
-
className: confirmDialogDescriptionClassName,
|
|
4556
|
-
children: description
|
|
4557
|
-
}
|
|
4558
|
-
) : null
|
|
4559
|
-
] }) }),
|
|
4560
|
-
/* @__PURE__ */ jsxs24(
|
|
4561
|
-
"div",
|
|
4562
|
-
{
|
|
4563
|
-
"data-slot": "dialog-footer",
|
|
4564
|
-
className: confirmDialogFooterClassName,
|
|
4565
|
-
children: [
|
|
4566
|
-
/* @__PURE__ */ jsx25(Button, { variant: "secondary", disabled: isBusy, onClick: () => handleOpenChange(false), children: cancelLabel }),
|
|
4567
|
-
/* @__PURE__ */ jsx25(
|
|
4568
|
-
Button,
|
|
4569
|
-
{
|
|
4570
|
-
variant: tone === "destructive" ? "destructive" : "primary",
|
|
4571
|
-
loading: isBusy,
|
|
4572
|
-
onClick: handleConfirm,
|
|
4573
|
-
children: confirmLabel
|
|
4574
|
-
}
|
|
4575
|
-
)
|
|
4576
|
-
]
|
|
4577
|
-
}
|
|
4578
|
-
)
|
|
4579
|
-
] });
|
|
4580
|
-
return /* @__PURE__ */ jsx25(Dialog, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsxs24(DialogPortal, { children: [
|
|
4581
|
-
/* @__PURE__ */ jsx25(DialogOverlay, {}),
|
|
4582
|
-
/* @__PURE__ */ jsx25(DialogRawContent, { "data-slot": "dialog-content", className: confirmDialogContentClassName, children: dialogBody })
|
|
4583
|
-
] }) });
|
|
4584
|
-
}
|
|
4585
|
-
|
|
4586
|
-
// src/components/ui/separator.tsx
|
|
4587
|
-
import { Separator as SeparatorPrimitive } from "radix-ui";
|
|
4588
|
-
import { jsx as jsx26 } from "react/jsx-runtime";
|
|
4589
|
-
function Separator({
|
|
4590
|
-
className,
|
|
4591
|
-
orientation = "horizontal",
|
|
4592
|
-
decorative = true,
|
|
4593
|
-
...props
|
|
4594
|
-
}) {
|
|
4595
|
-
return /* @__PURE__ */ jsx26(
|
|
4596
|
-
SeparatorPrimitive.Root,
|
|
4597
|
-
{
|
|
4598
|
-
"data-slot": "separator",
|
|
4599
|
-
decorative,
|
|
4600
|
-
orientation,
|
|
4601
|
-
className: cn(
|
|
4602
|
-
"shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
|
|
4603
|
-
className
|
|
4604
|
-
),
|
|
4605
|
-
...props
|
|
4606
|
-
}
|
|
4607
|
-
);
|
|
4608
|
-
}
|
|
4609
|
-
|
|
4610
|
-
// src/components/ui/avatar.tsx
|
|
4611
|
-
import { Avatar as AvatarPrimitive } from "radix-ui";
|
|
4612
|
-
import { jsx as jsx27 } from "react/jsx-runtime";
|
|
4613
|
-
function Avatar({
|
|
4614
|
-
className,
|
|
4615
|
-
size = "md",
|
|
4616
|
-
...props
|
|
4617
|
-
}) {
|
|
4618
|
-
return /* @__PURE__ */ jsx27(
|
|
4619
|
-
AvatarPrimitive.Root,
|
|
4620
|
-
{
|
|
4621
|
-
"data-slot": "avatar",
|
|
4622
|
-
"data-size": size,
|
|
4623
|
-
className: cn(
|
|
4624
|
-
"group/avatar relative flex shrink-0 overflow-hidden rounded-full select-none",
|
|
4625
|
-
"border border-[var(--border-subtle)] bg-[var(--bg-raised)] text-text-secondary",
|
|
4626
|
-
"h-9 w-9",
|
|
4627
|
-
"data-[size=sm]:h-8 data-[size=sm]:w-8",
|
|
4628
|
-
"data-[size=lg]:h-11 data-[size=lg]:w-11",
|
|
4629
|
-
className
|
|
4630
|
-
),
|
|
4631
|
-
...props
|
|
4632
|
-
}
|
|
4633
|
-
);
|
|
4634
|
-
}
|
|
4635
|
-
function AvatarImage({
|
|
4636
|
-
className,
|
|
4637
|
-
...props
|
|
4638
|
-
}) {
|
|
4639
|
-
return /* @__PURE__ */ jsx27(
|
|
4640
|
-
AvatarPrimitive.Image,
|
|
4641
|
-
{
|
|
4642
|
-
"data-slot": "avatar-image",
|
|
4643
|
-
className: cn("aspect-square h-full w-full object-cover", className),
|
|
4644
|
-
...props
|
|
4645
|
-
}
|
|
4646
|
-
);
|
|
4647
|
-
}
|
|
4648
|
-
function getAvatarFallbackText(name) {
|
|
4649
|
-
const trimmedName = name.trim();
|
|
4650
|
-
if (!trimmedName) return null;
|
|
4651
|
-
const segmenter = typeof Intl !== "undefined" && "Segmenter" in Intl ? new Intl.Segmenter("ko", { granularity: "grapheme" }) : null;
|
|
4652
|
-
if (segmenter) {
|
|
4653
|
-
return segmenter.segment(trimmedName)[Symbol.iterator]().next().value?.segment ?? null;
|
|
4654
|
-
}
|
|
4655
|
-
return Array.from(trimmedName)[0] ?? null;
|
|
4656
|
-
}
|
|
4657
|
-
function AvatarFallback({
|
|
4658
|
-
className,
|
|
4659
|
-
children,
|
|
4660
|
-
name,
|
|
4661
|
-
...props
|
|
4662
|
-
}) {
|
|
4663
|
-
const fallbackText = children ?? (name ? getAvatarFallbackText(name) : null);
|
|
4664
|
-
return /* @__PURE__ */ jsx27(
|
|
4665
|
-
AvatarPrimitive.Fallback,
|
|
4666
|
-
{
|
|
4667
|
-
"data-slot": "avatar-fallback",
|
|
4668
|
-
className: cn(
|
|
4669
|
-
"flex h-full w-full items-center justify-center rounded-full",
|
|
4670
|
-
"bg-[var(--bg-raised)] text-sm font-semibold text-text-secondary",
|
|
4671
|
-
"font-[family-name:var(--font-display)]",
|
|
4672
|
-
"group-data-[size=sm]/avatar:text-xs",
|
|
4673
|
-
className
|
|
4674
|
-
),
|
|
4675
|
-
...props,
|
|
4676
|
-
children: fallbackText
|
|
4677
|
-
}
|
|
4678
|
-
);
|
|
4679
|
-
}
|
|
4680
|
-
|
|
4681
4494
|
// src/components/ui/dropdown-menu.tsx
|
|
4682
4495
|
import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react";
|
|
4683
4496
|
import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
|
|
4684
|
-
import { jsx as
|
|
4497
|
+
import { jsx as jsx25, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
4685
4498
|
function DropdownMenu({
|
|
4686
4499
|
...props
|
|
4687
4500
|
}) {
|
|
4688
|
-
return /* @__PURE__ */
|
|
4501
|
+
return /* @__PURE__ */ jsx25(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
|
|
4689
4502
|
}
|
|
4690
4503
|
function DropdownMenuPortal({
|
|
4691
4504
|
...props
|
|
4692
4505
|
}) {
|
|
4693
|
-
return /* @__PURE__ */
|
|
4506
|
+
return /* @__PURE__ */ jsx25(DropdownMenuPrimitive.Portal, { "data-slot": "dropdown-menu-portal", ...props });
|
|
4694
4507
|
}
|
|
4695
4508
|
function DropdownMenuTrigger({
|
|
4696
4509
|
...props
|
|
4697
4510
|
}) {
|
|
4698
|
-
return /* @__PURE__ */
|
|
4511
|
+
return /* @__PURE__ */ jsx25(
|
|
4699
4512
|
DropdownMenuPrimitive.Trigger,
|
|
4700
4513
|
{
|
|
4701
4514
|
"data-slot": "dropdown-menu-trigger",
|
|
@@ -4708,7 +4521,7 @@ function DropdownMenuContent({
|
|
|
4708
4521
|
sideOffset = 4,
|
|
4709
4522
|
...props
|
|
4710
4523
|
}) {
|
|
4711
|
-
return /* @__PURE__ */
|
|
4524
|
+
return /* @__PURE__ */ jsx25(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx25(
|
|
4712
4525
|
DropdownMenuPrimitive.Content,
|
|
4713
4526
|
{
|
|
4714
4527
|
"data-slot": "dropdown-menu-content",
|
|
@@ -4731,7 +4544,7 @@ function DropdownMenuContent({
|
|
|
4731
4544
|
function DropdownMenuGroup({
|
|
4732
4545
|
...props
|
|
4733
4546
|
}) {
|
|
4734
|
-
return /* @__PURE__ */
|
|
4547
|
+
return /* @__PURE__ */ jsx25(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props });
|
|
4735
4548
|
}
|
|
4736
4549
|
function DropdownMenuItem({
|
|
4737
4550
|
className,
|
|
@@ -4739,7 +4552,7 @@ function DropdownMenuItem({
|
|
|
4739
4552
|
variant = "default",
|
|
4740
4553
|
...props
|
|
4741
4554
|
}) {
|
|
4742
|
-
return /* @__PURE__ */
|
|
4555
|
+
return /* @__PURE__ */ jsx25(
|
|
4743
4556
|
DropdownMenuPrimitive.Item,
|
|
4744
4557
|
{
|
|
4745
4558
|
"data-slot": "dropdown-menu-item",
|
|
@@ -4766,7 +4579,7 @@ function DropdownMenuCheckboxItem({
|
|
|
4766
4579
|
checked,
|
|
4767
4580
|
...props
|
|
4768
4581
|
}) {
|
|
4769
|
-
return /* @__PURE__ */
|
|
4582
|
+
return /* @__PURE__ */ jsxs24(
|
|
4770
4583
|
DropdownMenuPrimitive.CheckboxItem,
|
|
4771
4584
|
{
|
|
4772
4585
|
"data-slot": "dropdown-menu-checkbox-item",
|
|
@@ -4782,7 +4595,7 @@ function DropdownMenuCheckboxItem({
|
|
|
4782
4595
|
checked,
|
|
4783
4596
|
...props,
|
|
4784
4597
|
children: [
|
|
4785
|
-
/* @__PURE__ */
|
|
4598
|
+
/* @__PURE__ */ jsx25("span", { className: "pointer-events-none absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx25(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx25(CheckIcon, { size: 16 }) }) }),
|
|
4786
4599
|
children
|
|
4787
4600
|
]
|
|
4788
4601
|
}
|
|
@@ -4791,7 +4604,7 @@ function DropdownMenuCheckboxItem({
|
|
|
4791
4604
|
function DropdownMenuRadioGroup({
|
|
4792
4605
|
...props
|
|
4793
4606
|
}) {
|
|
4794
|
-
return /* @__PURE__ */
|
|
4607
|
+
return /* @__PURE__ */ jsx25(
|
|
4795
4608
|
DropdownMenuPrimitive.RadioGroup,
|
|
4796
4609
|
{
|
|
4797
4610
|
"data-slot": "dropdown-menu-radio-group",
|
|
@@ -4804,7 +4617,7 @@ function DropdownMenuRadioItem({
|
|
|
4804
4617
|
children,
|
|
4805
4618
|
...props
|
|
4806
4619
|
}) {
|
|
4807
|
-
return /* @__PURE__ */
|
|
4620
|
+
return /* @__PURE__ */ jsxs24(
|
|
4808
4621
|
DropdownMenuPrimitive.RadioItem,
|
|
4809
4622
|
{
|
|
4810
4623
|
"data-slot": "dropdown-menu-radio-item",
|
|
@@ -4819,7 +4632,7 @@ function DropdownMenuRadioItem({
|
|
|
4819
4632
|
),
|
|
4820
4633
|
...props,
|
|
4821
4634
|
children: [
|
|
4822
|
-
/* @__PURE__ */
|
|
4635
|
+
/* @__PURE__ */ jsx25("span", { className: "pointer-events-none absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx25(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx25(CircleIcon, { size: 8, className: "fill-current" }) }) }),
|
|
4823
4636
|
children
|
|
4824
4637
|
]
|
|
4825
4638
|
}
|
|
@@ -4830,7 +4643,7 @@ function DropdownMenuLabel({
|
|
|
4830
4643
|
inset,
|
|
4831
4644
|
...props
|
|
4832
4645
|
}) {
|
|
4833
|
-
return /* @__PURE__ */
|
|
4646
|
+
return /* @__PURE__ */ jsx25(
|
|
4834
4647
|
DropdownMenuPrimitive.Label,
|
|
4835
4648
|
{
|
|
4836
4649
|
"data-slot": "dropdown-menu-label",
|
|
@@ -4847,7 +4660,7 @@ function DropdownMenuSeparator({
|
|
|
4847
4660
|
className,
|
|
4848
4661
|
...props
|
|
4849
4662
|
}) {
|
|
4850
|
-
return /* @__PURE__ */
|
|
4663
|
+
return /* @__PURE__ */ jsx25(
|
|
4851
4664
|
DropdownMenuPrimitive.Separator,
|
|
4852
4665
|
{
|
|
4853
4666
|
"data-slot": "dropdown-menu-separator",
|
|
@@ -4860,7 +4673,7 @@ function DropdownMenuShortcut({
|
|
|
4860
4673
|
className,
|
|
4861
4674
|
...props
|
|
4862
4675
|
}) {
|
|
4863
|
-
return /* @__PURE__ */
|
|
4676
|
+
return /* @__PURE__ */ jsx25(
|
|
4864
4677
|
"span",
|
|
4865
4678
|
{
|
|
4866
4679
|
"data-slot": "dropdown-menu-shortcut",
|
|
@@ -4875,7 +4688,7 @@ function DropdownMenuShortcut({
|
|
|
4875
4688
|
function DropdownMenuSub({
|
|
4876
4689
|
...props
|
|
4877
4690
|
}) {
|
|
4878
|
-
return /* @__PURE__ */
|
|
4691
|
+
return /* @__PURE__ */ jsx25(DropdownMenuPrimitive.Sub, { "data-slot": "dropdown-menu-sub", ...props });
|
|
4879
4692
|
}
|
|
4880
4693
|
function DropdownMenuSubTrigger({
|
|
4881
4694
|
className,
|
|
@@ -4883,7 +4696,7 @@ function DropdownMenuSubTrigger({
|
|
|
4883
4696
|
children,
|
|
4884
4697
|
...props
|
|
4885
4698
|
}) {
|
|
4886
|
-
return /* @__PURE__ */
|
|
4699
|
+
return /* @__PURE__ */ jsxs24(
|
|
4887
4700
|
DropdownMenuPrimitive.SubTrigger,
|
|
4888
4701
|
{
|
|
4889
4702
|
"data-slot": "dropdown-menu-sub-trigger",
|
|
@@ -4900,7 +4713,7 @@ function DropdownMenuSubTrigger({
|
|
|
4900
4713
|
...props,
|
|
4901
4714
|
children: [
|
|
4902
4715
|
children,
|
|
4903
|
-
/* @__PURE__ */
|
|
4716
|
+
/* @__PURE__ */ jsx25(ChevronRightIcon, { className: "ml-auto", size: 16 })
|
|
4904
4717
|
]
|
|
4905
4718
|
}
|
|
4906
4719
|
);
|
|
@@ -4909,7 +4722,7 @@ function DropdownMenuSubContent({
|
|
|
4909
4722
|
className,
|
|
4910
4723
|
...props
|
|
4911
4724
|
}) {
|
|
4912
|
-
return /* @__PURE__ */
|
|
4725
|
+
return /* @__PURE__ */ jsx25(
|
|
4913
4726
|
DropdownMenuPrimitive.SubContent,
|
|
4914
4727
|
{
|
|
4915
4728
|
"data-slot": "dropdown-menu-sub-content",
|
|
@@ -4923,7 +4736,468 @@ function DropdownMenuSubContent({
|
|
|
4923
4736
|
"motion-reduce:transition-none",
|
|
4924
4737
|
className
|
|
4925
4738
|
),
|
|
4926
|
-
...props
|
|
4739
|
+
...props
|
|
4740
|
+
}
|
|
4741
|
+
);
|
|
4742
|
+
}
|
|
4743
|
+
|
|
4744
|
+
// src/components/ui/context-menu.tsx
|
|
4745
|
+
import { jsx as jsx26, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
4746
|
+
function ContextMenu({
|
|
4747
|
+
open,
|
|
4748
|
+
onOpenChange,
|
|
4749
|
+
position,
|
|
4750
|
+
children,
|
|
4751
|
+
contentProps
|
|
4752
|
+
}) {
|
|
4753
|
+
if (!position) {
|
|
4754
|
+
return null;
|
|
4755
|
+
}
|
|
4756
|
+
return /* @__PURE__ */ jsxs25(DropdownMenu, { open, onOpenChange, modal: false, children: [
|
|
4757
|
+
/* @__PURE__ */ jsx26(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx26(
|
|
4758
|
+
"span",
|
|
4759
|
+
{
|
|
4760
|
+
"aria-hidden": "true",
|
|
4761
|
+
"data-slot": "context-menu-anchor",
|
|
4762
|
+
style: {
|
|
4763
|
+
position: "fixed",
|
|
4764
|
+
left: position.x,
|
|
4765
|
+
top: position.y,
|
|
4766
|
+
width: 0,
|
|
4767
|
+
height: 0
|
|
4768
|
+
}
|
|
4769
|
+
}
|
|
4770
|
+
) }),
|
|
4771
|
+
/* @__PURE__ */ jsx26(DropdownMenuContent, { ...contentProps, children })
|
|
4772
|
+
] });
|
|
4773
|
+
}
|
|
4774
|
+
|
|
4775
|
+
// src/components/ui/bulk-action-bar.tsx
|
|
4776
|
+
import { X as X3 } from "lucide-react";
|
|
4777
|
+
|
|
4778
|
+
// src/components/ui/icon-button.tsx
|
|
4779
|
+
import * as React23 from "react";
|
|
4780
|
+
import { cva as cva12 } from "class-variance-authority";
|
|
4781
|
+
import { jsx as jsx27, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
4782
|
+
var iconButtonVariants = cva12(
|
|
4783
|
+
[
|
|
4784
|
+
"olun-icon-button relative inline-flex cursor-pointer shrink-0 items-center justify-center",
|
|
4785
|
+
"rounded-[var(--radius-sm)] border font-medium",
|
|
4786
|
+
"transition-colors motion-reduce:transition-none",
|
|
4787
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--focus-ring)]",
|
|
4788
|
+
"disabled:cursor-not-allowed disabled:bg-[var(--action-disabled-bg)] disabled:text-text-disabled",
|
|
4789
|
+
"[&_svg]:pointer-events-none [&_svg]:shrink-0"
|
|
4790
|
+
].join(" "),
|
|
4791
|
+
{
|
|
4792
|
+
variants: {
|
|
4793
|
+
variant: {
|
|
4794
|
+
ghost: "border-transparent bg-transparent text-text-secondary hover:bg-[var(--action-hover)] hover:text-foreground",
|
|
4795
|
+
outline: "border-[var(--border-subtle)] bg-[var(--bg-surface)] text-text-secondary hover:border-[var(--border-accent)] hover:bg-[var(--action-hover)] hover:text-foreground",
|
|
4796
|
+
subtle: "border-transparent bg-[var(--bg-raised)] text-text-secondary hover:bg-[var(--action-hover)] hover:text-foreground",
|
|
4797
|
+
danger: "border-transparent bg-[var(--error-bg)] text-[var(--error)] hover:bg-[var(--action-hover)]"
|
|
4798
|
+
},
|
|
4799
|
+
size: {
|
|
4800
|
+
sm: "size-[var(--space-4)]",
|
|
4801
|
+
md: "size-[var(--touch-target-min)]",
|
|
4802
|
+
lg: "size-[var(--space-6)]"
|
|
4803
|
+
},
|
|
4804
|
+
pressed: {
|
|
4805
|
+
true: "",
|
|
4806
|
+
false: ""
|
|
4807
|
+
}
|
|
4808
|
+
},
|
|
4809
|
+
compoundVariants: [
|
|
4810
|
+
{
|
|
4811
|
+
pressed: true,
|
|
4812
|
+
variant: ["ghost", "outline", "subtle"],
|
|
4813
|
+
className: "border-[var(--border-accent)] bg-[var(--action-selected)] text-foreground"
|
|
4814
|
+
},
|
|
4815
|
+
{
|
|
4816
|
+
pressed: true,
|
|
4817
|
+
variant: "danger",
|
|
4818
|
+
className: "border-[var(--error)] bg-[var(--error-bg)] text-[var(--error)]"
|
|
4819
|
+
}
|
|
4820
|
+
],
|
|
4821
|
+
defaultVariants: {
|
|
4822
|
+
variant: "ghost",
|
|
4823
|
+
size: "md",
|
|
4824
|
+
pressed: false
|
|
4825
|
+
}
|
|
4826
|
+
}
|
|
4827
|
+
);
|
|
4828
|
+
var iconButtonBadgeVariants = cva12(
|
|
4829
|
+
[
|
|
4830
|
+
"pointer-events-none absolute right-0 top-0 inline-flex",
|
|
4831
|
+
"olun-icon-button__badge",
|
|
4832
|
+
"min-h-[var(--space-1-5)] min-w-[var(--space-1-5)] translate-x-1/3 -translate-y-1/3",
|
|
4833
|
+
"items-center justify-center gap-[2px] rounded-[var(--radius-full)] px-[3px]",
|
|
4834
|
+
"font-[family-name:var(--font-display)] text-[10px] font-semibold leading-none",
|
|
4835
|
+
"[&:has(svg)]:size-[var(--space-1-5)] [&:has(svg)]:px-0 [&_svg]:size-[10px]"
|
|
4836
|
+
].join(" "),
|
|
4837
|
+
{
|
|
4838
|
+
variants: {
|
|
4839
|
+
tone: {
|
|
4840
|
+
info: "bg-[var(--accent-solid)] text-[var(--accent-on-solid)]",
|
|
4841
|
+
error: "bg-[var(--error)] text-[var(--error-contrast)]"
|
|
4842
|
+
}
|
|
4843
|
+
},
|
|
4844
|
+
defaultVariants: {
|
|
4845
|
+
tone: "info"
|
|
4846
|
+
}
|
|
4847
|
+
}
|
|
4848
|
+
);
|
|
4849
|
+
var iconSize2 = {
|
|
4850
|
+
sm: 14,
|
|
4851
|
+
md: 16,
|
|
4852
|
+
lg: 18
|
|
4853
|
+
};
|
|
4854
|
+
var iconStrokeWidth = {
|
|
4855
|
+
sm: 2.25,
|
|
4856
|
+
md: 2.25,
|
|
4857
|
+
lg: 1.75
|
|
4858
|
+
};
|
|
4859
|
+
var IconButton = React23.forwardRef(
|
|
4860
|
+
({
|
|
4861
|
+
className,
|
|
4862
|
+
variant = "ghost",
|
|
4863
|
+
size = "md",
|
|
4864
|
+
pressed = false,
|
|
4865
|
+
icon: Icon,
|
|
4866
|
+
badge,
|
|
4867
|
+
badgeTone = "info",
|
|
4868
|
+
type,
|
|
4869
|
+
title,
|
|
4870
|
+
"aria-label": ariaLabel,
|
|
4871
|
+
"aria-labelledby": ariaLabelledBy,
|
|
4872
|
+
...props
|
|
4873
|
+
}, ref) => {
|
|
4874
|
+
const resolvedSize = size ?? "md";
|
|
4875
|
+
const isToggle = pressed !== void 0;
|
|
4876
|
+
const isPressed = pressed === true;
|
|
4877
|
+
const hoverTitle = title ?? (typeof ariaLabel === "string" ? ariaLabel : void 0);
|
|
4878
|
+
return /* @__PURE__ */ jsxs26(
|
|
4879
|
+
"button",
|
|
4880
|
+
{
|
|
4881
|
+
ref,
|
|
4882
|
+
...props,
|
|
4883
|
+
"data-slot": "icon-button",
|
|
4884
|
+
"data-variant": variant,
|
|
4885
|
+
"data-size": resolvedSize,
|
|
4886
|
+
"data-pressed": isToggle ? String(isPressed) : void 0,
|
|
4887
|
+
"aria-label": ariaLabel,
|
|
4888
|
+
"aria-labelledby": ariaLabelledBy,
|
|
4889
|
+
"aria-pressed": isToggle ? isPressed : void 0,
|
|
4890
|
+
title: hoverTitle,
|
|
4891
|
+
className: cn(
|
|
4892
|
+
iconButtonVariants({ variant, size, pressed: isPressed, className })
|
|
4893
|
+
),
|
|
4894
|
+
type: type ?? "button",
|
|
4895
|
+
children: [
|
|
4896
|
+
/* @__PURE__ */ jsx27(
|
|
4897
|
+
Icon,
|
|
4898
|
+
{
|
|
4899
|
+
"aria-hidden": "true",
|
|
4900
|
+
"data-slot": "icon-button-icon",
|
|
4901
|
+
size: iconSize2[resolvedSize],
|
|
4902
|
+
strokeWidth: iconStrokeWidth[resolvedSize]
|
|
4903
|
+
}
|
|
4904
|
+
),
|
|
4905
|
+
badge !== void 0 ? /* @__PURE__ */ jsx27(
|
|
4906
|
+
"span",
|
|
4907
|
+
{
|
|
4908
|
+
"aria-hidden": "true",
|
|
4909
|
+
"data-slot": "icon-button-badge",
|
|
4910
|
+
"data-badge-tone": badgeTone,
|
|
4911
|
+
className: iconButtonBadgeVariants({ tone: badgeTone }),
|
|
4912
|
+
children: badge
|
|
4913
|
+
}
|
|
4914
|
+
) : null
|
|
4915
|
+
]
|
|
4916
|
+
}
|
|
4917
|
+
);
|
|
4918
|
+
}
|
|
4919
|
+
);
|
|
4920
|
+
IconButton.displayName = "IconButton";
|
|
4921
|
+
|
|
4922
|
+
// src/components/ui/bulk-action-bar.tsx
|
|
4923
|
+
import { jsx as jsx28, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
4924
|
+
function BulkActionBar({
|
|
4925
|
+
count,
|
|
4926
|
+
actions,
|
|
4927
|
+
onClear,
|
|
4928
|
+
emptyHint,
|
|
4929
|
+
className,
|
|
4930
|
+
...props
|
|
4931
|
+
}) {
|
|
4932
|
+
if (count === 0 && emptyHint === void 0) {
|
|
4933
|
+
return null;
|
|
4934
|
+
}
|
|
4935
|
+
return /* @__PURE__ */ jsxs27(
|
|
4936
|
+
"div",
|
|
4937
|
+
{
|
|
4938
|
+
role: "toolbar",
|
|
4939
|
+
"aria-label": "\uC120\uD0DD \uD56D\uBAA9 \uC77C\uAD04 \uC791\uC5C5",
|
|
4940
|
+
"data-slot": "bulk-action-bar",
|
|
4941
|
+
className: cn(
|
|
4942
|
+
"sticky bottom-[var(--space-2)] z-[var(--z-sticky)] mx-auto flex min-h-[var(--touch-target-min)] w-fit max-w-[calc(100%-var(--space-4))] items-center gap-[var(--space-1)]",
|
|
4943
|
+
"rounded-full border border-[var(--border)] bg-[var(--bg-raised)] px-[var(--space-1)] py-[var(--space-0-5)] shadow-elevation-2",
|
|
4944
|
+
className
|
|
4945
|
+
),
|
|
4946
|
+
...props,
|
|
4947
|
+
children: [
|
|
4948
|
+
/* @__PURE__ */ jsx28(
|
|
4949
|
+
"span",
|
|
4950
|
+
{
|
|
4951
|
+
"data-slot": "bulk-action-bar-count",
|
|
4952
|
+
className: "px-[var(--space-1)] text-sm font-medium tabular-nums text-foreground",
|
|
4953
|
+
children: count > 0 ? `${count.toLocaleString("ko-KR")}\uAC1C \uC120\uD0DD\uB428` : emptyHint
|
|
4954
|
+
}
|
|
4955
|
+
),
|
|
4956
|
+
/* @__PURE__ */ jsxs27(
|
|
4957
|
+
"div",
|
|
4958
|
+
{
|
|
4959
|
+
"data-slot": "bulk-action-bar-actions",
|
|
4960
|
+
className: "flex min-w-0 flex-wrap items-center justify-end gap-[var(--space-0-5)]",
|
|
4961
|
+
children: [
|
|
4962
|
+
actions.map((action) => {
|
|
4963
|
+
const Icon = action.icon;
|
|
4964
|
+
return /* @__PURE__ */ jsxs27(
|
|
4965
|
+
Button,
|
|
4966
|
+
{
|
|
4967
|
+
type: "button",
|
|
4968
|
+
"data-slot": "bulk-action-bar-action",
|
|
4969
|
+
"data-variant": action.variant ?? "default",
|
|
4970
|
+
size: "sm",
|
|
4971
|
+
variant: action.variant === "destructive" ? "destructive" : "secondary",
|
|
4972
|
+
disabled: action.disabled,
|
|
4973
|
+
title: action.title,
|
|
4974
|
+
className: "min-h-[var(--touch-target-min)]",
|
|
4975
|
+
onClick: action.onClick,
|
|
4976
|
+
children: [
|
|
4977
|
+
Icon ? /* @__PURE__ */ jsx28(
|
|
4978
|
+
Icon,
|
|
4979
|
+
{
|
|
4980
|
+
"aria-hidden": "true",
|
|
4981
|
+
"data-slot": "bulk-action-bar-action-icon",
|
|
4982
|
+
strokeWidth: 1.75
|
|
4983
|
+
}
|
|
4984
|
+
) : null,
|
|
4985
|
+
action.label
|
|
4986
|
+
]
|
|
4987
|
+
},
|
|
4988
|
+
action.key
|
|
4989
|
+
);
|
|
4990
|
+
}),
|
|
4991
|
+
/* @__PURE__ */ jsx28(
|
|
4992
|
+
IconButton,
|
|
4993
|
+
{
|
|
4994
|
+
"aria-label": "\uC120\uD0DD \uD574\uC81C",
|
|
4995
|
+
icon: X3,
|
|
4996
|
+
size: "lg",
|
|
4997
|
+
variant: "ghost",
|
|
4998
|
+
onClick: onClear
|
|
4999
|
+
}
|
|
5000
|
+
)
|
|
5001
|
+
]
|
|
5002
|
+
}
|
|
5003
|
+
)
|
|
5004
|
+
]
|
|
5005
|
+
}
|
|
5006
|
+
);
|
|
5007
|
+
}
|
|
5008
|
+
|
|
5009
|
+
// src/components/ui/confirm-dialog.tsx
|
|
5010
|
+
import * as React24 from "react";
|
|
5011
|
+
import { Fragment as Fragment7, jsx as jsx29, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
5012
|
+
var confirmDialogContentClassName = cn(
|
|
5013
|
+
"fixed left-1/2 top-1/2 z-[var(--z-modal)]",
|
|
5014
|
+
"-translate-x-1/2 -translate-y-1/2",
|
|
5015
|
+
"w-[calc(100vw-2rem)] max-w-[420px]",
|
|
5016
|
+
"flex flex-col gap-[var(--space-3)]",
|
|
5017
|
+
"bg-[var(--bg-raised)] border border-[var(--border-subtle)]",
|
|
5018
|
+
"rounded-[var(--radius-lg)] p-[var(--space-3)] shadow-[var(--elevation-4)]",
|
|
5019
|
+
"text-foreground"
|
|
5020
|
+
);
|
|
5021
|
+
var confirmDialogTitleClassName = cn(
|
|
5022
|
+
"text-[18px] font-bold leading-snug text-foreground"
|
|
5023
|
+
);
|
|
5024
|
+
var confirmDialogDescriptionClassName = cn(
|
|
5025
|
+
"break-keep text-[14px] leading-relaxed text-text-secondary"
|
|
5026
|
+
);
|
|
5027
|
+
var confirmDialogFooterClassName = "flex items-center justify-end gap-[var(--space-1-5)]";
|
|
5028
|
+
function ConfirmDialog({
|
|
5029
|
+
open,
|
|
5030
|
+
onOpenChange,
|
|
5031
|
+
title,
|
|
5032
|
+
description,
|
|
5033
|
+
tone = "default",
|
|
5034
|
+
confirmLabel,
|
|
5035
|
+
cancelLabel = "\uCDE8\uC18C",
|
|
5036
|
+
onConfirm,
|
|
5037
|
+
loading = false
|
|
5038
|
+
}) {
|
|
5039
|
+
const [pending, setPending] = React24.useState(false);
|
|
5040
|
+
const busyRef = React24.useRef(false);
|
|
5041
|
+
const isBusy = loading || pending;
|
|
5042
|
+
const handleOpenChange = React24.useCallback(
|
|
5043
|
+
(nextOpen) => {
|
|
5044
|
+
if (!nextOpen && isBusy) {
|
|
5045
|
+
return;
|
|
5046
|
+
}
|
|
5047
|
+
onOpenChange(nextOpen);
|
|
5048
|
+
},
|
|
5049
|
+
[isBusy, onOpenChange]
|
|
5050
|
+
);
|
|
5051
|
+
const handleConfirm = React24.useCallback(async () => {
|
|
5052
|
+
if (busyRef.current || loading) {
|
|
5053
|
+
return;
|
|
5054
|
+
}
|
|
5055
|
+
busyRef.current = true;
|
|
5056
|
+
setPending(true);
|
|
5057
|
+
try {
|
|
5058
|
+
await onConfirm();
|
|
5059
|
+
onOpenChange(false);
|
|
5060
|
+
} finally {
|
|
5061
|
+
busyRef.current = false;
|
|
5062
|
+
setPending(false);
|
|
5063
|
+
}
|
|
5064
|
+
}, [loading, onConfirm, onOpenChange]);
|
|
5065
|
+
const dialogBody = /* @__PURE__ */ jsxs28(Fragment7, { children: [
|
|
5066
|
+
/* @__PURE__ */ jsx29("div", { className: "flex items-start justify-between gap-[var(--space-2)]", children: /* @__PURE__ */ jsxs28("div", { className: "min-w-0 space-y-[var(--space-1)]", children: [
|
|
5067
|
+
/* @__PURE__ */ jsx29(
|
|
5068
|
+
DialogTitle,
|
|
5069
|
+
{
|
|
5070
|
+
"data-slot": "dialog-title",
|
|
5071
|
+
className: confirmDialogTitleClassName,
|
|
5072
|
+
children: title
|
|
5073
|
+
}
|
|
5074
|
+
),
|
|
5075
|
+
description ? /* @__PURE__ */ jsx29(
|
|
5076
|
+
DialogDescription,
|
|
5077
|
+
{
|
|
5078
|
+
"data-slot": "dialog-description",
|
|
5079
|
+
className: confirmDialogDescriptionClassName,
|
|
5080
|
+
children: description
|
|
5081
|
+
}
|
|
5082
|
+
) : null
|
|
5083
|
+
] }) }),
|
|
5084
|
+
/* @__PURE__ */ jsxs28(
|
|
5085
|
+
"div",
|
|
5086
|
+
{
|
|
5087
|
+
"data-slot": "dialog-footer",
|
|
5088
|
+
className: confirmDialogFooterClassName,
|
|
5089
|
+
children: [
|
|
5090
|
+
/* @__PURE__ */ jsx29(Button, { variant: "secondary", disabled: isBusy, onClick: () => handleOpenChange(false), children: cancelLabel }),
|
|
5091
|
+
/* @__PURE__ */ jsx29(
|
|
5092
|
+
Button,
|
|
5093
|
+
{
|
|
5094
|
+
variant: tone === "destructive" ? "destructive" : "primary",
|
|
5095
|
+
loading: isBusy,
|
|
5096
|
+
onClick: handleConfirm,
|
|
5097
|
+
children: confirmLabel
|
|
5098
|
+
}
|
|
5099
|
+
)
|
|
5100
|
+
]
|
|
5101
|
+
}
|
|
5102
|
+
)
|
|
5103
|
+
] });
|
|
5104
|
+
return /* @__PURE__ */ jsx29(Dialog, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsxs28(DialogPortal, { children: [
|
|
5105
|
+
/* @__PURE__ */ jsx29(DialogOverlay, {}),
|
|
5106
|
+
/* @__PURE__ */ jsx29(DialogRawContent, { "data-slot": "dialog-content", className: confirmDialogContentClassName, children: dialogBody })
|
|
5107
|
+
] }) });
|
|
5108
|
+
}
|
|
5109
|
+
|
|
5110
|
+
// src/components/ui/separator.tsx
|
|
5111
|
+
import { Separator as SeparatorPrimitive } from "radix-ui";
|
|
5112
|
+
import { jsx as jsx30 } from "react/jsx-runtime";
|
|
5113
|
+
function Separator({
|
|
5114
|
+
className,
|
|
5115
|
+
orientation = "horizontal",
|
|
5116
|
+
decorative = true,
|
|
5117
|
+
...props
|
|
5118
|
+
}) {
|
|
5119
|
+
return /* @__PURE__ */ jsx30(
|
|
5120
|
+
SeparatorPrimitive.Root,
|
|
5121
|
+
{
|
|
5122
|
+
"data-slot": "separator",
|
|
5123
|
+
decorative,
|
|
5124
|
+
orientation,
|
|
5125
|
+
className: cn(
|
|
5126
|
+
"shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
|
|
5127
|
+
className
|
|
5128
|
+
),
|
|
5129
|
+
...props
|
|
5130
|
+
}
|
|
5131
|
+
);
|
|
5132
|
+
}
|
|
5133
|
+
|
|
5134
|
+
// src/components/ui/avatar.tsx
|
|
5135
|
+
import { Avatar as AvatarPrimitive } from "radix-ui";
|
|
5136
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
5137
|
+
function Avatar({
|
|
5138
|
+
className,
|
|
5139
|
+
size = "md",
|
|
5140
|
+
...props
|
|
5141
|
+
}) {
|
|
5142
|
+
return /* @__PURE__ */ jsx31(
|
|
5143
|
+
AvatarPrimitive.Root,
|
|
5144
|
+
{
|
|
5145
|
+
"data-slot": "avatar",
|
|
5146
|
+
"data-size": size,
|
|
5147
|
+
className: cn(
|
|
5148
|
+
"group/avatar relative flex shrink-0 overflow-hidden rounded-full select-none",
|
|
5149
|
+
"border border-[var(--border-subtle)] bg-[var(--bg-raised)] text-text-secondary",
|
|
5150
|
+
"h-9 w-9",
|
|
5151
|
+
"data-[size=sm]:h-8 data-[size=sm]:w-8",
|
|
5152
|
+
"data-[size=lg]:h-11 data-[size=lg]:w-11",
|
|
5153
|
+
className
|
|
5154
|
+
),
|
|
5155
|
+
...props
|
|
5156
|
+
}
|
|
5157
|
+
);
|
|
5158
|
+
}
|
|
5159
|
+
function AvatarImage({
|
|
5160
|
+
className,
|
|
5161
|
+
...props
|
|
5162
|
+
}) {
|
|
5163
|
+
return /* @__PURE__ */ jsx31(
|
|
5164
|
+
AvatarPrimitive.Image,
|
|
5165
|
+
{
|
|
5166
|
+
"data-slot": "avatar-image",
|
|
5167
|
+
className: cn("aspect-square h-full w-full object-cover", className),
|
|
5168
|
+
...props
|
|
5169
|
+
}
|
|
5170
|
+
);
|
|
5171
|
+
}
|
|
5172
|
+
function getAvatarFallbackText(name) {
|
|
5173
|
+
const trimmedName = name.trim();
|
|
5174
|
+
if (!trimmedName) return null;
|
|
5175
|
+
const segmenter = typeof Intl !== "undefined" && "Segmenter" in Intl ? new Intl.Segmenter("ko", { granularity: "grapheme" }) : null;
|
|
5176
|
+
if (segmenter) {
|
|
5177
|
+
return segmenter.segment(trimmedName)[Symbol.iterator]().next().value?.segment ?? null;
|
|
5178
|
+
}
|
|
5179
|
+
return Array.from(trimmedName)[0] ?? null;
|
|
5180
|
+
}
|
|
5181
|
+
function AvatarFallback({
|
|
5182
|
+
className,
|
|
5183
|
+
children,
|
|
5184
|
+
name,
|
|
5185
|
+
...props
|
|
5186
|
+
}) {
|
|
5187
|
+
const fallbackText = children ?? (name ? getAvatarFallbackText(name) : null);
|
|
5188
|
+
return /* @__PURE__ */ jsx31(
|
|
5189
|
+
AvatarPrimitive.Fallback,
|
|
5190
|
+
{
|
|
5191
|
+
"data-slot": "avatar-fallback",
|
|
5192
|
+
className: cn(
|
|
5193
|
+
"flex h-full w-full items-center justify-center rounded-full",
|
|
5194
|
+
"bg-[var(--bg-raised)] text-sm font-semibold text-text-secondary",
|
|
5195
|
+
"font-[family-name:var(--font-display)]",
|
|
5196
|
+
"group-data-[size=sm]/avatar:text-xs",
|
|
5197
|
+
className
|
|
5198
|
+
),
|
|
5199
|
+
...props,
|
|
5200
|
+
children: fallbackText
|
|
4927
5201
|
}
|
|
4928
5202
|
);
|
|
4929
5203
|
}
|
|
@@ -4931,7 +5205,7 @@ function DropdownMenuSubContent({
|
|
|
4931
5205
|
// src/components/ui/sheet.tsx
|
|
4932
5206
|
import { XIcon } from "lucide-react";
|
|
4933
5207
|
import { Dialog as SheetPrimitive } from "radix-ui";
|
|
4934
|
-
import { jsx as
|
|
5208
|
+
import { jsx as jsx32, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
4935
5209
|
var defaultSheetMotionConfig = {
|
|
4936
5210
|
type: "slide",
|
|
4937
5211
|
duration: 300,
|
|
@@ -4963,22 +5237,22 @@ function getSheetMotionStyle(motionConfig, style) {
|
|
|
4963
5237
|
};
|
|
4964
5238
|
}
|
|
4965
5239
|
function Sheet({ ...props }) {
|
|
4966
|
-
return /* @__PURE__ */
|
|
5240
|
+
return /* @__PURE__ */ jsx32(SheetPrimitive.Root, { "data-slot": "sheet", ...props });
|
|
4967
5241
|
}
|
|
4968
5242
|
function SheetTrigger({
|
|
4969
5243
|
...props
|
|
4970
5244
|
}) {
|
|
4971
|
-
return /* @__PURE__ */
|
|
5245
|
+
return /* @__PURE__ */ jsx32(SheetPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
|
|
4972
5246
|
}
|
|
4973
5247
|
function SheetClose({
|
|
4974
5248
|
...props
|
|
4975
5249
|
}) {
|
|
4976
|
-
return /* @__PURE__ */
|
|
5250
|
+
return /* @__PURE__ */ jsx32(SheetPrimitive.Close, { "data-slot": "sheet-close", ...props });
|
|
4977
5251
|
}
|
|
4978
5252
|
function SheetPortal({
|
|
4979
5253
|
...props
|
|
4980
5254
|
}) {
|
|
4981
|
-
return /* @__PURE__ */
|
|
5255
|
+
return /* @__PURE__ */ jsx32(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
|
|
4982
5256
|
}
|
|
4983
5257
|
function SheetOverlay({
|
|
4984
5258
|
className,
|
|
@@ -4987,7 +5261,7 @@ function SheetOverlay({
|
|
|
4987
5261
|
...props
|
|
4988
5262
|
}) {
|
|
4989
5263
|
const motionConfig = resolveSheetMotionConfig(motion);
|
|
4990
|
-
return /* @__PURE__ */
|
|
5264
|
+
return /* @__PURE__ */ jsx32(
|
|
4991
5265
|
SheetPrimitive.Overlay,
|
|
4992
5266
|
{
|
|
4993
5267
|
"data-slot": "sheet-overlay",
|
|
@@ -5020,9 +5294,9 @@ function SheetContent({
|
|
|
5020
5294
|
}) {
|
|
5021
5295
|
const motionConfig = resolveSheetMotionConfig(motion);
|
|
5022
5296
|
const hasSlideMotion = motionConfig && motionConfig.type === "slide";
|
|
5023
|
-
return /* @__PURE__ */
|
|
5024
|
-
/* @__PURE__ */
|
|
5025
|
-
/* @__PURE__ */
|
|
5297
|
+
return /* @__PURE__ */ jsxs29(SheetPortal, { children: [
|
|
5298
|
+
/* @__PURE__ */ jsx32(SheetOverlay, { motion: motionConfig }),
|
|
5299
|
+
/* @__PURE__ */ jsxs29(
|
|
5026
5300
|
SheetPrimitive.Content,
|
|
5027
5301
|
{
|
|
5028
5302
|
"data-slot": "sheet-content",
|
|
@@ -5073,9 +5347,9 @@ function SheetContent({
|
|
|
5073
5347
|
...props,
|
|
5074
5348
|
children: [
|
|
5075
5349
|
children,
|
|
5076
|
-
showCloseButton && /* @__PURE__ */
|
|
5077
|
-
/* @__PURE__ */
|
|
5078
|
-
/* @__PURE__ */
|
|
5350
|
+
showCloseButton && /* @__PURE__ */ jsxs29(SheetPrimitive.Close, { className: "absolute top-4 right-4 cursor-pointer rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
|
|
5351
|
+
/* @__PURE__ */ jsx32(XIcon, { className: "size-[16px]" }),
|
|
5352
|
+
/* @__PURE__ */ jsx32("span", { className: "sr-only", children: "Close" })
|
|
5079
5353
|
] })
|
|
5080
5354
|
]
|
|
5081
5355
|
}
|
|
@@ -5083,7 +5357,7 @@ function SheetContent({
|
|
|
5083
5357
|
] });
|
|
5084
5358
|
}
|
|
5085
5359
|
function SheetHeader({ className, ...props }) {
|
|
5086
|
-
return /* @__PURE__ */
|
|
5360
|
+
return /* @__PURE__ */ jsx32(
|
|
5087
5361
|
"div",
|
|
5088
5362
|
{
|
|
5089
5363
|
"data-slot": "sheet-header",
|
|
@@ -5093,7 +5367,7 @@ function SheetHeader({ className, ...props }) {
|
|
|
5093
5367
|
);
|
|
5094
5368
|
}
|
|
5095
5369
|
function SheetFooter({ className, ...props }) {
|
|
5096
|
-
return /* @__PURE__ */
|
|
5370
|
+
return /* @__PURE__ */ jsx32(
|
|
5097
5371
|
"div",
|
|
5098
5372
|
{
|
|
5099
5373
|
"data-slot": "sheet-footer",
|
|
@@ -5106,7 +5380,7 @@ function SheetTitle({
|
|
|
5106
5380
|
className,
|
|
5107
5381
|
...props
|
|
5108
5382
|
}) {
|
|
5109
|
-
return /* @__PURE__ */
|
|
5383
|
+
return /* @__PURE__ */ jsx32(
|
|
5110
5384
|
SheetPrimitive.Title,
|
|
5111
5385
|
{
|
|
5112
5386
|
"data-slot": "sheet-title",
|
|
@@ -5119,7 +5393,7 @@ function SheetDescription({
|
|
|
5119
5393
|
className,
|
|
5120
5394
|
...props
|
|
5121
5395
|
}) {
|
|
5122
|
-
return /* @__PURE__ */
|
|
5396
|
+
return /* @__PURE__ */ jsx32(
|
|
5123
5397
|
SheetPrimitive.Description,
|
|
5124
5398
|
{
|
|
5125
5399
|
"data-slot": "sheet-description",
|
|
@@ -5131,7 +5405,7 @@ function SheetDescription({
|
|
|
5131
5405
|
|
|
5132
5406
|
// src/components/ui/sheet-drawer.tsx
|
|
5133
5407
|
import { Maximize2Icon, Minimize2Icon, XIcon as XIcon2 } from "lucide-react";
|
|
5134
|
-
import { jsx as
|
|
5408
|
+
import { jsx as jsx33, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
5135
5409
|
var sheetDrawerContentClassName = cn(
|
|
5136
5410
|
"gap-0 p-0",
|
|
5137
5411
|
"bg-[var(--bg-surface)] text-foreground",
|
|
@@ -5200,7 +5474,7 @@ function SheetDrawer({
|
|
|
5200
5474
|
const resolvedWidth = expanded ? "full" : width;
|
|
5201
5475
|
const resolvedExpandLabel = hasExpandedToggle && expanded ? collapseLabel : expandLabel;
|
|
5202
5476
|
const ExpandActionIcon = hasExpandedToggle && expanded ? Minimize2Icon : Maximize2Icon;
|
|
5203
|
-
return /* @__PURE__ */
|
|
5477
|
+
return /* @__PURE__ */ jsx33(Sheet, { open, onOpenChange, children: /* @__PURE__ */ jsxs30(
|
|
5204
5478
|
SheetContent,
|
|
5205
5479
|
{
|
|
5206
5480
|
"data-slot": "sheet-drawer-content",
|
|
@@ -5214,11 +5488,11 @@ function SheetDrawer({
|
|
|
5214
5488
|
resolvedWidth === "full" && sheetDrawerFullContentClassName
|
|
5215
5489
|
),
|
|
5216
5490
|
children: [
|
|
5217
|
-
/* @__PURE__ */
|
|
5218
|
-
/* @__PURE__ */
|
|
5219
|
-
caption ? /* @__PURE__ */
|
|
5220
|
-
/* @__PURE__ */
|
|
5221
|
-
description ? /* @__PURE__ */
|
|
5491
|
+
/* @__PURE__ */ jsxs30("div", { "data-slot": "sheet-drawer-header", className: sheetDrawerHeaderClassName, children: [
|
|
5492
|
+
/* @__PURE__ */ jsxs30("div", { className: sheetDrawerHeaderTextClassName, children: [
|
|
5493
|
+
caption ? /* @__PURE__ */ jsx33("div", { "data-slot": "sheet-drawer-caption", className: sheetDrawerCaptionClassName, children: caption }) : null,
|
|
5494
|
+
/* @__PURE__ */ jsx33(SheetTitle, { "data-slot": "sheet-drawer-title", className: sheetDrawerTitleClassName, children: title }),
|
|
5495
|
+
description ? /* @__PURE__ */ jsx33(
|
|
5222
5496
|
SheetDescription,
|
|
5223
5497
|
{
|
|
5224
5498
|
"data-slot": "sheet-drawer-description",
|
|
@@ -5227,8 +5501,8 @@ function SheetDrawer({
|
|
|
5227
5501
|
}
|
|
5228
5502
|
) : null
|
|
5229
5503
|
] }),
|
|
5230
|
-
/* @__PURE__ */
|
|
5231
|
-
showExpandAction ? hasExpandedToggle ? /* @__PURE__ */
|
|
5504
|
+
/* @__PURE__ */ jsxs30("div", { "data-slot": "sheet-drawer-header-actions", className: sheetDrawerHeaderActionsClassName, children: [
|
|
5505
|
+
showExpandAction ? hasExpandedToggle ? /* @__PURE__ */ jsxs30(
|
|
5232
5506
|
"button",
|
|
5233
5507
|
{
|
|
5234
5508
|
type: "button",
|
|
@@ -5239,11 +5513,11 @@ function SheetDrawer({
|
|
|
5239
5513
|
className: sheetDrawerExpandButtonClassName,
|
|
5240
5514
|
onClick: () => onExpandedChange(!expanded),
|
|
5241
5515
|
children: [
|
|
5242
|
-
/* @__PURE__ */
|
|
5243
|
-
/* @__PURE__ */
|
|
5516
|
+
/* @__PURE__ */ jsx33(ExpandActionIcon, { className: "size-[16px]" }),
|
|
5517
|
+
/* @__PURE__ */ jsx33("span", { className: "hidden text-sm font-medium leading-normal md:inline", children: resolvedExpandLabel })
|
|
5244
5518
|
]
|
|
5245
5519
|
}
|
|
5246
|
-
) : expandHref ? /* @__PURE__ */
|
|
5520
|
+
) : expandHref ? /* @__PURE__ */ jsxs30(
|
|
5247
5521
|
"a",
|
|
5248
5522
|
{
|
|
5249
5523
|
href: expandHref,
|
|
@@ -5251,11 +5525,11 @@ function SheetDrawer({
|
|
|
5251
5525
|
"data-slot": "sheet-drawer-expand",
|
|
5252
5526
|
className: sheetDrawerExpandButtonClassName,
|
|
5253
5527
|
children: [
|
|
5254
|
-
/* @__PURE__ */
|
|
5255
|
-
/* @__PURE__ */
|
|
5528
|
+
/* @__PURE__ */ jsx33(ExpandActionIcon, { className: "size-[16px]" }),
|
|
5529
|
+
/* @__PURE__ */ jsx33("span", { className: "hidden text-sm font-medium leading-normal md:inline", children: expandLabel })
|
|
5256
5530
|
]
|
|
5257
5531
|
}
|
|
5258
|
-
) : /* @__PURE__ */
|
|
5532
|
+
) : /* @__PURE__ */ jsxs30(
|
|
5259
5533
|
"button",
|
|
5260
5534
|
{
|
|
5261
5535
|
type: "button",
|
|
@@ -5264,40 +5538,40 @@ function SheetDrawer({
|
|
|
5264
5538
|
className: sheetDrawerExpandButtonClassName,
|
|
5265
5539
|
onClick: onExpand,
|
|
5266
5540
|
children: [
|
|
5267
|
-
/* @__PURE__ */
|
|
5268
|
-
/* @__PURE__ */
|
|
5541
|
+
/* @__PURE__ */ jsx33(ExpandActionIcon, { className: "size-[16px]" }),
|
|
5542
|
+
/* @__PURE__ */ jsx33("span", { className: "hidden text-sm font-medium leading-normal md:inline", children: expandLabel })
|
|
5269
5543
|
]
|
|
5270
5544
|
}
|
|
5271
5545
|
) : null,
|
|
5272
|
-
/* @__PURE__ */
|
|
5546
|
+
/* @__PURE__ */ jsx33(
|
|
5273
5547
|
SheetClose,
|
|
5274
5548
|
{
|
|
5275
5549
|
"aria-label": closeLabel,
|
|
5276
5550
|
"data-slot": "sheet-drawer-close",
|
|
5277
5551
|
className: sheetDrawerCloseButtonClassName,
|
|
5278
|
-
children: /* @__PURE__ */
|
|
5552
|
+
children: /* @__PURE__ */ jsx33(XIcon2, { className: "size-[16px]" })
|
|
5279
5553
|
}
|
|
5280
5554
|
)
|
|
5281
5555
|
] })
|
|
5282
5556
|
] }),
|
|
5283
|
-
/* @__PURE__ */
|
|
5284
|
-
footer ? /* @__PURE__ */
|
|
5557
|
+
/* @__PURE__ */ jsx33("div", { "data-slot": "sheet-drawer-body", className: sheetDrawerBodyClassName, children }),
|
|
5558
|
+
footer ? /* @__PURE__ */ jsx33("div", { "data-slot": "sheet-drawer-footer", className: sheetDrawerFooterClassName, children: footer }) : null
|
|
5285
5559
|
]
|
|
5286
5560
|
}
|
|
5287
5561
|
) });
|
|
5288
5562
|
}
|
|
5289
5563
|
|
|
5290
5564
|
// src/components/ui/popover.tsx
|
|
5291
|
-
import * as
|
|
5565
|
+
import * as React25 from "react";
|
|
5292
5566
|
import { Popover as PopoverPrimitive } from "radix-ui";
|
|
5293
|
-
import { jsx as
|
|
5567
|
+
import { jsx as jsx34, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
5294
5568
|
function Popover({ modal = false, ...props }) {
|
|
5295
|
-
return /* @__PURE__ */
|
|
5569
|
+
return /* @__PURE__ */ jsx34(PopoverPrimitive.Root, { modal, ...props });
|
|
5296
5570
|
}
|
|
5297
5571
|
var PopoverTrigger = PopoverPrimitive.Trigger;
|
|
5298
5572
|
var PopoverAnchor = PopoverPrimitive.Anchor;
|
|
5299
5573
|
var PopoverClose = PopoverPrimitive.Close;
|
|
5300
|
-
var PopoverContent =
|
|
5574
|
+
var PopoverContent = React25.forwardRef(({ className, align = "center", sideOffset = 8, collisionPadding = 8, showArrow = false, children, ...props }, ref) => /* @__PURE__ */ jsx34(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsxs31(
|
|
5301
5575
|
PopoverPrimitive.Content,
|
|
5302
5576
|
{
|
|
5303
5577
|
ref,
|
|
@@ -5321,7 +5595,7 @@ var PopoverContent = React24.forwardRef(({ className, align = "center", sideOffs
|
|
|
5321
5595
|
...props,
|
|
5322
5596
|
children: [
|
|
5323
5597
|
children,
|
|
5324
|
-
showArrow ? /* @__PURE__ */
|
|
5598
|
+
showArrow ? /* @__PURE__ */ jsx34(
|
|
5325
5599
|
PopoverPrimitive.Arrow,
|
|
5326
5600
|
{
|
|
5327
5601
|
"data-slot": "popover-arrow",
|
|
@@ -5334,7 +5608,7 @@ var PopoverContent = React24.forwardRef(({ className, align = "center", sideOffs
|
|
|
5334
5608
|
}
|
|
5335
5609
|
) }));
|
|
5336
5610
|
PopoverContent.displayName = PopoverPrimitive.Content.displayName;
|
|
5337
|
-
var PopoverArrow =
|
|
5611
|
+
var PopoverArrow = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx34(
|
|
5338
5612
|
PopoverPrimitive.Arrow,
|
|
5339
5613
|
{
|
|
5340
5614
|
ref,
|
|
@@ -5348,10 +5622,10 @@ var PopoverArrow = React24.forwardRef(({ className, ...props }, ref) => /* @__PU
|
|
|
5348
5622
|
PopoverArrow.displayName = PopoverPrimitive.Arrow.displayName;
|
|
5349
5623
|
|
|
5350
5624
|
// src/components/ui/badge.tsx
|
|
5351
|
-
import * as
|
|
5352
|
-
import { cva as
|
|
5353
|
-
import { jsx as
|
|
5354
|
-
var badgeVariants =
|
|
5625
|
+
import * as React26 from "react";
|
|
5626
|
+
import { cva as cva13 } from "class-variance-authority";
|
|
5627
|
+
import { jsx as jsx35, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
5628
|
+
var badgeVariants = cva13(
|
|
5355
5629
|
[
|
|
5356
5630
|
"inline-flex w-fit shrink-0 items-center whitespace-nowrap",
|
|
5357
5631
|
"rounded-[var(--radius-full)] border leading-none",
|
|
@@ -5410,10 +5684,10 @@ var badgeVariants = cva12(
|
|
|
5410
5684
|
}
|
|
5411
5685
|
}
|
|
5412
5686
|
);
|
|
5413
|
-
var badgeDotVariants =
|
|
5687
|
+
var badgeDotVariants = cva13(
|
|
5414
5688
|
"size-[var(--space-0-5)] shrink-0 rounded-[var(--radius-full)] bg-current"
|
|
5415
5689
|
);
|
|
5416
|
-
var Badge =
|
|
5690
|
+
var Badge = React26.forwardRef(
|
|
5417
5691
|
({
|
|
5418
5692
|
className,
|
|
5419
5693
|
variant = "neutral",
|
|
@@ -5425,7 +5699,7 @@ var Badge = React25.forwardRef(
|
|
|
5425
5699
|
...props
|
|
5426
5700
|
}, ref) => {
|
|
5427
5701
|
const resolvedShowDot = showDot ?? variant === "status";
|
|
5428
|
-
return /* @__PURE__ */
|
|
5702
|
+
return /* @__PURE__ */ jsxs32(
|
|
5429
5703
|
"span",
|
|
5430
5704
|
{
|
|
5431
5705
|
ref,
|
|
@@ -5438,7 +5712,7 @@ var Badge = React25.forwardRef(
|
|
|
5438
5712
|
className: cn(badgeVariants({ variant, tone, size, className })),
|
|
5439
5713
|
...props,
|
|
5440
5714
|
children: [
|
|
5441
|
-
resolvedShowDot ? /* @__PURE__ */
|
|
5715
|
+
resolvedShowDot ? /* @__PURE__ */ jsx35("span", { "aria-hidden": "true", "data-slot": "badge-dot", className: badgeDotVariants() }) : null,
|
|
5442
5716
|
children
|
|
5443
5717
|
]
|
|
5444
5718
|
}
|
|
@@ -5448,10 +5722,10 @@ var Badge = React25.forwardRef(
|
|
|
5448
5722
|
Badge.displayName = "Badge";
|
|
5449
5723
|
|
|
5450
5724
|
// src/components/ui/two-tier-badge.tsx
|
|
5451
|
-
import * as
|
|
5452
|
-
import { cva as
|
|
5453
|
-
import { jsx as
|
|
5454
|
-
var twoTierBadgeVariants =
|
|
5725
|
+
import * as React27 from "react";
|
|
5726
|
+
import { cva as cva14 } from "class-variance-authority";
|
|
5727
|
+
import { jsx as jsx36, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
5728
|
+
var twoTierBadgeVariants = cva14(
|
|
5455
5729
|
"inline-flex w-fit flex-col gap-[var(--space-0-5)]",
|
|
5456
5730
|
{
|
|
5457
5731
|
variants: {
|
|
@@ -5466,7 +5740,7 @@ var twoTierBadgeVariants = cva13(
|
|
|
5466
5740
|
}
|
|
5467
5741
|
}
|
|
5468
5742
|
);
|
|
5469
|
-
var twoTierBadgeLineVariants =
|
|
5743
|
+
var twoTierBadgeLineVariants = cva14(
|
|
5470
5744
|
[
|
|
5471
5745
|
"inline-flex w-fit shrink-0 items-center justify-center whitespace-nowrap",
|
|
5472
5746
|
"rounded-[var(--radius-xs)] border leading-none",
|
|
@@ -5493,7 +5767,7 @@ var twoTierBadgeLineVariants = cva13(
|
|
|
5493
5767
|
}
|
|
5494
5768
|
}
|
|
5495
5769
|
);
|
|
5496
|
-
var TwoTierBadge =
|
|
5770
|
+
var TwoTierBadge = React27.forwardRef(
|
|
5497
5771
|
({
|
|
5498
5772
|
className,
|
|
5499
5773
|
align,
|
|
@@ -5504,7 +5778,7 @@ var TwoTierBadge = React26.forwardRef(
|
|
|
5504
5778
|
primaryClassName,
|
|
5505
5779
|
secondaryClassName,
|
|
5506
5780
|
...props
|
|
5507
|
-
}, ref) => /* @__PURE__ */
|
|
5781
|
+
}, ref) => /* @__PURE__ */ jsxs33(
|
|
5508
5782
|
"div",
|
|
5509
5783
|
{
|
|
5510
5784
|
ref,
|
|
@@ -5512,7 +5786,7 @@ var TwoTierBadge = React26.forwardRef(
|
|
|
5512
5786
|
className: cn(twoTierBadgeVariants({ align, className })),
|
|
5513
5787
|
...props,
|
|
5514
5788
|
children: [
|
|
5515
|
-
/* @__PURE__ */
|
|
5789
|
+
/* @__PURE__ */ jsx36(
|
|
5516
5790
|
"span",
|
|
5517
5791
|
{
|
|
5518
5792
|
"data-slot": "two-tier-badge-primary",
|
|
@@ -5526,7 +5800,7 @@ var TwoTierBadge = React26.forwardRef(
|
|
|
5526
5800
|
children: primary
|
|
5527
5801
|
}
|
|
5528
5802
|
),
|
|
5529
|
-
secondary ? /* @__PURE__ */
|
|
5803
|
+
secondary ? /* @__PURE__ */ jsx36(
|
|
5530
5804
|
"span",
|
|
5531
5805
|
{
|
|
5532
5806
|
"data-slot": "two-tier-badge-secondary",
|
|
@@ -5547,10 +5821,10 @@ var TwoTierBadge = React26.forwardRef(
|
|
|
5547
5821
|
TwoTierBadge.displayName = "TwoTierBadge";
|
|
5548
5822
|
|
|
5549
5823
|
// src/components/ui/status-badge.tsx
|
|
5550
|
-
import * as
|
|
5551
|
-
import { cva as
|
|
5552
|
-
import { jsx as
|
|
5553
|
-
var statusBadgeVariants =
|
|
5824
|
+
import * as React28 from "react";
|
|
5825
|
+
import { cva as cva15 } from "class-variance-authority";
|
|
5826
|
+
import { jsx as jsx37, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
5827
|
+
var statusBadgeVariants = cva15(
|
|
5554
5828
|
[
|
|
5555
5829
|
"inline-flex w-fit shrink-0 items-center whitespace-nowrap",
|
|
5556
5830
|
"rounded-[var(--radius-full)] border leading-none",
|
|
@@ -5579,10 +5853,10 @@ var statusBadgeVariants = cva14(
|
|
|
5579
5853
|
}
|
|
5580
5854
|
}
|
|
5581
5855
|
);
|
|
5582
|
-
var statusBadgeDotVariants =
|
|
5856
|
+
var statusBadgeDotVariants = cva15(
|
|
5583
5857
|
"size-[var(--space-0-5)] shrink-0 rounded-[var(--radius-full)] bg-current"
|
|
5584
5858
|
);
|
|
5585
|
-
var StatusBadge =
|
|
5859
|
+
var StatusBadge = React28.forwardRef(
|
|
5586
5860
|
({
|
|
5587
5861
|
className,
|
|
5588
5862
|
status = "active",
|
|
@@ -5591,7 +5865,7 @@ var StatusBadge = React27.forwardRef(
|
|
|
5591
5865
|
pulse = true,
|
|
5592
5866
|
children,
|
|
5593
5867
|
...props
|
|
5594
|
-
}, ref) => /* @__PURE__ */
|
|
5868
|
+
}, ref) => /* @__PURE__ */ jsxs34(
|
|
5595
5869
|
"span",
|
|
5596
5870
|
{
|
|
5597
5871
|
ref,
|
|
@@ -5600,7 +5874,7 @@ var StatusBadge = React27.forwardRef(
|
|
|
5600
5874
|
className: cn(statusBadgeVariants({ status, size, className })),
|
|
5601
5875
|
...props,
|
|
5602
5876
|
children: [
|
|
5603
|
-
showDot ? /* @__PURE__ */
|
|
5877
|
+
showDot ? /* @__PURE__ */ jsx37(
|
|
5604
5878
|
"span",
|
|
5605
5879
|
{
|
|
5606
5880
|
"aria-hidden": "true",
|
|
@@ -5620,10 +5894,10 @@ var StatusBadge = React27.forwardRef(
|
|
|
5620
5894
|
StatusBadge.displayName = "StatusBadge";
|
|
5621
5895
|
|
|
5622
5896
|
// src/components/ui/notification-badge.tsx
|
|
5623
|
-
import * as
|
|
5624
|
-
import { cva as
|
|
5625
|
-
import { jsx as
|
|
5626
|
-
var notificationBadgeVariants =
|
|
5897
|
+
import * as React29 from "react";
|
|
5898
|
+
import { cva as cva16 } from "class-variance-authority";
|
|
5899
|
+
import { jsx as jsx38 } from "react/jsx-runtime";
|
|
5900
|
+
var notificationBadgeVariants = cva16(
|
|
5627
5901
|
[
|
|
5628
5902
|
"inline-flex shrink-0 items-center justify-center rounded-[var(--radius-full)]",
|
|
5629
5903
|
"bg-[var(--semantic-error,var(--error))] text-[var(--error-contrast)]",
|
|
@@ -5653,7 +5927,7 @@ function formatNotificationCount(count, max) {
|
|
|
5653
5927
|
}
|
|
5654
5928
|
return String(count);
|
|
5655
5929
|
}
|
|
5656
|
-
var NotificationBadge =
|
|
5930
|
+
var NotificationBadge = React29.forwardRef(
|
|
5657
5931
|
({
|
|
5658
5932
|
className,
|
|
5659
5933
|
count,
|
|
@@ -5668,7 +5942,7 @@ var NotificationBadge = React28.forwardRef(
|
|
|
5668
5942
|
}
|
|
5669
5943
|
const normalizedMax = Math.max(1, Math.floor(max));
|
|
5670
5944
|
const label = ariaLabel ?? (count > normalizedMax ? `\uC77D\uC9C0 \uC54A\uC740 \uC54C\uB9BC ${normalizedMax}\uAC1C \uC774\uC0C1` : `\uC77D\uC9C0 \uC54A\uC740 \uC54C\uB9BC ${count}\uAC1C`);
|
|
5671
|
-
return /* @__PURE__ */
|
|
5945
|
+
return /* @__PURE__ */ jsx38(
|
|
5672
5946
|
"span",
|
|
5673
5947
|
{
|
|
5674
5948
|
ref,
|
|
@@ -5686,12 +5960,12 @@ var NotificationBadge = React28.forwardRef(
|
|
|
5686
5960
|
NotificationBadge.displayName = "NotificationBadge";
|
|
5687
5961
|
|
|
5688
5962
|
// src/components/ui/chip.tsx
|
|
5689
|
-
import * as
|
|
5690
|
-
import { cva as
|
|
5691
|
-
import { X as
|
|
5963
|
+
import * as React30 from "react";
|
|
5964
|
+
import { cva as cva17 } from "class-variance-authority";
|
|
5965
|
+
import { X as X4 } from "lucide-react";
|
|
5692
5966
|
import { Slot as Slot2 } from "radix-ui";
|
|
5693
|
-
import { jsx as
|
|
5694
|
-
var chipVariants =
|
|
5967
|
+
import { jsx as jsx39, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
5968
|
+
var chipVariants = cva17(
|
|
5695
5969
|
[
|
|
5696
5970
|
"inline-flex w-fit shrink-0 items-center justify-center whitespace-nowrap",
|
|
5697
5971
|
"rounded-[var(--radius-full)] border leading-none",
|
|
@@ -5754,7 +6028,7 @@ var chipVariants = cva16(
|
|
|
5754
6028
|
}
|
|
5755
6029
|
}
|
|
5756
6030
|
);
|
|
5757
|
-
var chipCountVariants =
|
|
6031
|
+
var chipCountVariants = cva17(
|
|
5758
6032
|
[
|
|
5759
6033
|
"inline-flex min-w-[var(--space-2)] items-center justify-center",
|
|
5760
6034
|
"rounded-[var(--radius-full)] px-[var(--space-0-5)]",
|
|
@@ -5782,7 +6056,7 @@ var chipCountVariants = cva16(
|
|
|
5782
6056
|
}
|
|
5783
6057
|
}
|
|
5784
6058
|
);
|
|
5785
|
-
var Chip =
|
|
6059
|
+
var Chip = React30.forwardRef(
|
|
5786
6060
|
({
|
|
5787
6061
|
className,
|
|
5788
6062
|
variant = "filter",
|
|
@@ -5797,7 +6071,7 @@ var Chip = React29.forwardRef(
|
|
|
5797
6071
|
}, ref) => {
|
|
5798
6072
|
const Comp = asChild ? Slot2.Root : "button";
|
|
5799
6073
|
const removable = variant === "removable";
|
|
5800
|
-
return /* @__PURE__ */
|
|
6074
|
+
return /* @__PURE__ */ jsxs35(
|
|
5801
6075
|
Comp,
|
|
5802
6076
|
{
|
|
5803
6077
|
ref,
|
|
@@ -5812,7 +6086,7 @@ var Chip = React29.forwardRef(
|
|
|
5812
6086
|
...props,
|
|
5813
6087
|
children: [
|
|
5814
6088
|
children,
|
|
5815
|
-
count !== void 0 ? /* @__PURE__ */
|
|
6089
|
+
count !== void 0 ? /* @__PURE__ */ jsx39(
|
|
5816
6090
|
"span",
|
|
5817
6091
|
{
|
|
5818
6092
|
"aria-hidden": "true",
|
|
@@ -5822,13 +6096,13 @@ var Chip = React29.forwardRef(
|
|
|
5822
6096
|
children: count
|
|
5823
6097
|
}
|
|
5824
6098
|
) : null,
|
|
5825
|
-
removable ? /* @__PURE__ */
|
|
6099
|
+
removable ? /* @__PURE__ */ jsx39(
|
|
5826
6100
|
"span",
|
|
5827
6101
|
{
|
|
5828
6102
|
"aria-label": removeLabel,
|
|
5829
6103
|
"data-slot": "chip-remove",
|
|
5830
6104
|
className: "inline-flex size-[var(--space-2)] items-center justify-center rounded-[var(--radius-full)] text-text-tertiary",
|
|
5831
|
-
children: /* @__PURE__ */
|
|
6105
|
+
children: /* @__PURE__ */ jsx39(X4, { "aria-hidden": "true", size: 14, strokeWidth: 2.25 })
|
|
5832
6106
|
}
|
|
5833
6107
|
) : null
|
|
5834
6108
|
]
|
|
@@ -5839,13 +6113,12 @@ var Chip = React29.forwardRef(
|
|
|
5839
6113
|
Chip.displayName = "Chip";
|
|
5840
6114
|
|
|
5841
6115
|
// src/components/ui/empty-state.tsx
|
|
5842
|
-
import * as
|
|
5843
|
-
import { cva as
|
|
5844
|
-
import { jsx as
|
|
5845
|
-
var emptyStateBaseVariants =
|
|
6116
|
+
import * as React31 from "react";
|
|
6117
|
+
import { cva as cva18 } from "class-variance-authority";
|
|
6118
|
+
import { jsx as jsx40, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
6119
|
+
var emptyStateBaseVariants = cva18(
|
|
5846
6120
|
[
|
|
5847
6121
|
"flex flex-col items-center justify-center text-center",
|
|
5848
|
-
"rounded-[var(--radius-md)] border border-[var(--border-subtle)]",
|
|
5849
6122
|
"text-foreground"
|
|
5850
6123
|
].join(" "),
|
|
5851
6124
|
{
|
|
@@ -5854,10 +6127,15 @@ var emptyStateBaseVariants = cva17(
|
|
|
5854
6127
|
sm: "gap-[var(--space-1)] px-[var(--space-2)] py-[var(--space-3)]",
|
|
5855
6128
|
md: "gap-[var(--space-1-5)] px-[var(--space-3)] py-[var(--space-5)]",
|
|
5856
6129
|
lg: "gap-[var(--space-2)] px-[var(--space-4)] py-[var(--space-6)]"
|
|
6130
|
+
},
|
|
6131
|
+
bordered: {
|
|
6132
|
+
true: "rounded-[var(--radius-md)] border border-[var(--border-subtle)]",
|
|
6133
|
+
false: ""
|
|
5857
6134
|
}
|
|
5858
6135
|
},
|
|
5859
6136
|
defaultVariants: {
|
|
5860
|
-
size: "md"
|
|
6137
|
+
size: "md",
|
|
6138
|
+
bordered: true
|
|
5861
6139
|
}
|
|
5862
6140
|
}
|
|
5863
6141
|
);
|
|
@@ -5872,14 +6150,21 @@ function getEmptyStateToneSurface(tone) {
|
|
|
5872
6150
|
return surfaceClassNames.surface;
|
|
5873
6151
|
}
|
|
5874
6152
|
}
|
|
5875
|
-
function emptyStateVariants({
|
|
6153
|
+
function emptyStateVariants({
|
|
6154
|
+
size,
|
|
6155
|
+
tone = "neutral",
|
|
6156
|
+
surface,
|
|
6157
|
+
bordered = true,
|
|
6158
|
+
className
|
|
6159
|
+
} = {}) {
|
|
6160
|
+
const hasBorder = bordered !== false;
|
|
5876
6161
|
return cn(
|
|
5877
|
-
emptyStateBaseVariants({ size }),
|
|
5878
|
-
surface ? surfaceClassNames[surface] : getEmptyStateToneSurface(tone),
|
|
6162
|
+
emptyStateBaseVariants({ size, bordered: hasBorder }),
|
|
6163
|
+
hasBorder ? surface ? surfaceClassNames[surface] : getEmptyStateToneSurface(tone) : null,
|
|
5879
6164
|
className
|
|
5880
6165
|
);
|
|
5881
6166
|
}
|
|
5882
|
-
var emptyStateIconVariants =
|
|
6167
|
+
var emptyStateIconVariants = cva18(
|
|
5883
6168
|
[
|
|
5884
6169
|
"inline-flex items-center justify-center rounded-[var(--radius-full)]",
|
|
5885
6170
|
"border border-[var(--border-subtle)] bg-[var(--bg-raised)] text-text-tertiary"
|
|
@@ -5897,12 +6182,12 @@ var emptyStateIconVariants = cva17(
|
|
|
5897
6182
|
}
|
|
5898
6183
|
}
|
|
5899
6184
|
);
|
|
5900
|
-
var
|
|
6185
|
+
var iconSize3 = {
|
|
5901
6186
|
sm: 18,
|
|
5902
6187
|
md: 20,
|
|
5903
6188
|
lg: 24
|
|
5904
6189
|
};
|
|
5905
|
-
var EmptyState =
|
|
6190
|
+
var EmptyState = React31.forwardRef(
|
|
5906
6191
|
({
|
|
5907
6192
|
className,
|
|
5908
6193
|
size = "md",
|
|
@@ -5913,29 +6198,30 @@ var EmptyState = React30.forwardRef(
|
|
|
5913
6198
|
description,
|
|
5914
6199
|
hint,
|
|
5915
6200
|
action,
|
|
6201
|
+
bordered = true,
|
|
5916
6202
|
...props
|
|
5917
6203
|
}, ref) => {
|
|
5918
6204
|
const resolvedSize = size ?? "md";
|
|
5919
|
-
return /* @__PURE__ */
|
|
6205
|
+
return /* @__PURE__ */ jsxs36(
|
|
5920
6206
|
"div",
|
|
5921
6207
|
{
|
|
5922
6208
|
ref,
|
|
5923
6209
|
role: "status",
|
|
5924
6210
|
"data-slot": "empty-state",
|
|
5925
|
-
className: cn(emptyStateVariants({ size, tone, surface, className })),
|
|
6211
|
+
className: cn(emptyStateVariants({ size, tone, surface, bordered, className })),
|
|
5926
6212
|
...props,
|
|
5927
6213
|
children: [
|
|
5928
|
-
Icon ? /* @__PURE__ */
|
|
6214
|
+
Icon ? /* @__PURE__ */ jsx40(
|
|
5929
6215
|
"span",
|
|
5930
6216
|
{
|
|
5931
6217
|
"aria-hidden": "true",
|
|
5932
6218
|
"data-slot": "empty-state-icon",
|
|
5933
6219
|
className: emptyStateIconVariants({ size: resolvedSize }),
|
|
5934
|
-
children: /* @__PURE__ */
|
|
6220
|
+
children: /* @__PURE__ */ jsx40(Icon, { size: iconSize3[resolvedSize], strokeWidth: 1.75 })
|
|
5935
6221
|
}
|
|
5936
6222
|
) : null,
|
|
5937
|
-
/* @__PURE__ */
|
|
5938
|
-
/* @__PURE__ */
|
|
6223
|
+
/* @__PURE__ */ jsxs36("div", { className: "flex max-w-[420px] flex-col items-center gap-[var(--space-1)]", children: [
|
|
6224
|
+
/* @__PURE__ */ jsx40(
|
|
5939
6225
|
"h2",
|
|
5940
6226
|
{
|
|
5941
6227
|
"data-slot": "empty-state-title",
|
|
@@ -5943,7 +6229,7 @@ var EmptyState = React30.forwardRef(
|
|
|
5943
6229
|
children: title
|
|
5944
6230
|
}
|
|
5945
6231
|
),
|
|
5946
|
-
description ? /* @__PURE__ */
|
|
6232
|
+
description ? /* @__PURE__ */ jsx40(
|
|
5947
6233
|
"p",
|
|
5948
6234
|
{
|
|
5949
6235
|
"data-slot": "empty-state-description",
|
|
@@ -5951,7 +6237,7 @@ var EmptyState = React30.forwardRef(
|
|
|
5951
6237
|
children: description
|
|
5952
6238
|
}
|
|
5953
6239
|
) : null,
|
|
5954
|
-
hint ? /* @__PURE__ */
|
|
6240
|
+
hint ? /* @__PURE__ */ jsx40(
|
|
5955
6241
|
"p",
|
|
5956
6242
|
{
|
|
5957
6243
|
"data-slot": "empty-state-hint",
|
|
@@ -5960,7 +6246,7 @@ var EmptyState = React30.forwardRef(
|
|
|
5960
6246
|
}
|
|
5961
6247
|
) : null
|
|
5962
6248
|
] }),
|
|
5963
|
-
action ? /* @__PURE__ */
|
|
6249
|
+
action ? /* @__PURE__ */ jsx40("div", { "data-slot": "empty-state-action", className: "mt-[var(--space-1)]", children: action }) : null
|
|
5964
6250
|
]
|
|
5965
6251
|
}
|
|
5966
6252
|
);
|
|
@@ -5969,11 +6255,11 @@ var EmptyState = React30.forwardRef(
|
|
|
5969
6255
|
EmptyState.displayName = "EmptyState";
|
|
5970
6256
|
|
|
5971
6257
|
// src/components/ui/error-state.tsx
|
|
5972
|
-
import * as
|
|
6258
|
+
import * as React32 from "react";
|
|
5973
6259
|
import { AlertTriangle as AlertTriangle2 } from "lucide-react";
|
|
5974
|
-
import { cva as
|
|
5975
|
-
import { jsx as
|
|
5976
|
-
var errorStateVariants =
|
|
6260
|
+
import { cva as cva19 } from "class-variance-authority";
|
|
6261
|
+
import { jsx as jsx41, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
6262
|
+
var errorStateVariants = cva19(
|
|
5977
6263
|
[
|
|
5978
6264
|
"flex flex-col items-center justify-center text-center",
|
|
5979
6265
|
"rounded-[var(--radius-md)] border border-[var(--border-subtle)]",
|
|
@@ -5994,7 +6280,7 @@ var errorStateVariants = cva18(
|
|
|
5994
6280
|
}
|
|
5995
6281
|
}
|
|
5996
6282
|
);
|
|
5997
|
-
var ErrorState =
|
|
6283
|
+
var ErrorState = React32.forwardRef(
|
|
5998
6284
|
({
|
|
5999
6285
|
className,
|
|
6000
6286
|
size = "md",
|
|
@@ -6005,7 +6291,7 @@ var ErrorState = React31.forwardRef(
|
|
|
6005
6291
|
onRetry,
|
|
6006
6292
|
retryLabel = "\uB2E4\uC2DC \uC2DC\uB3C4",
|
|
6007
6293
|
...props
|
|
6008
|
-
}, ref) => /* @__PURE__ */
|
|
6294
|
+
}, ref) => /* @__PURE__ */ jsxs37(
|
|
6009
6295
|
"div",
|
|
6010
6296
|
{
|
|
6011
6297
|
ref,
|
|
@@ -6014,17 +6300,17 @@ var ErrorState = React31.forwardRef(
|
|
|
6014
6300
|
className: cn(errorStateVariants({ size, surface, className })),
|
|
6015
6301
|
...props,
|
|
6016
6302
|
children: [
|
|
6017
|
-
/* @__PURE__ */
|
|
6303
|
+
/* @__PURE__ */ jsx41(
|
|
6018
6304
|
"span",
|
|
6019
6305
|
{
|
|
6020
6306
|
"aria-hidden": "true",
|
|
6021
6307
|
"data-slot": "error-state-icon",
|
|
6022
6308
|
className: "inline-flex size-[48px] items-center justify-center rounded-[var(--radius-full)] bg-[var(--error-bg)] text-[var(--error)]",
|
|
6023
|
-
children: /* @__PURE__ */
|
|
6309
|
+
children: /* @__PURE__ */ jsx41(AlertTriangle2, { size: 24, strokeWidth: 1.75 })
|
|
6024
6310
|
}
|
|
6025
6311
|
),
|
|
6026
|
-
/* @__PURE__ */
|
|
6027
|
-
/* @__PURE__ */
|
|
6312
|
+
/* @__PURE__ */ jsxs37("div", { className: "flex max-w-[420px] flex-col items-center gap-[var(--space-1)]", children: [
|
|
6313
|
+
/* @__PURE__ */ jsx41(
|
|
6028
6314
|
"h2",
|
|
6029
6315
|
{
|
|
6030
6316
|
"data-slot": "error-state-title",
|
|
@@ -6032,7 +6318,7 @@ var ErrorState = React31.forwardRef(
|
|
|
6032
6318
|
children: title
|
|
6033
6319
|
}
|
|
6034
6320
|
),
|
|
6035
|
-
/* @__PURE__ */
|
|
6321
|
+
/* @__PURE__ */ jsx41(
|
|
6036
6322
|
"p",
|
|
6037
6323
|
{
|
|
6038
6324
|
"data-slot": "error-state-message",
|
|
@@ -6040,7 +6326,7 @@ var ErrorState = React31.forwardRef(
|
|
|
6040
6326
|
children: message
|
|
6041
6327
|
}
|
|
6042
6328
|
),
|
|
6043
|
-
errorCode ? /* @__PURE__ */
|
|
6329
|
+
errorCode ? /* @__PURE__ */ jsx41(
|
|
6044
6330
|
"p",
|
|
6045
6331
|
{
|
|
6046
6332
|
"data-slot": "error-state-code",
|
|
@@ -6049,7 +6335,7 @@ var ErrorState = React31.forwardRef(
|
|
|
6049
6335
|
}
|
|
6050
6336
|
) : null
|
|
6051
6337
|
] }),
|
|
6052
|
-
onRetry ? /* @__PURE__ */
|
|
6338
|
+
onRetry ? /* @__PURE__ */ jsx41(Button, { size: "sm", variant: "outline", onClick: onRetry, children: retryLabel }) : null
|
|
6053
6339
|
]
|
|
6054
6340
|
}
|
|
6055
6341
|
)
|
|
@@ -6057,10 +6343,10 @@ var ErrorState = React31.forwardRef(
|
|
|
6057
6343
|
ErrorState.displayName = "ErrorState";
|
|
6058
6344
|
|
|
6059
6345
|
// src/components/ui/skeleton.tsx
|
|
6060
|
-
import * as
|
|
6061
|
-
import { cva as
|
|
6062
|
-
import { jsx as
|
|
6063
|
-
var skeletonVariants =
|
|
6346
|
+
import * as React33 from "react";
|
|
6347
|
+
import { cva as cva20 } from "class-variance-authority";
|
|
6348
|
+
import { jsx as jsx42 } from "react/jsx-runtime";
|
|
6349
|
+
var skeletonVariants = cva20(
|
|
6064
6350
|
[
|
|
6065
6351
|
"animate-pulse rounded-[var(--radius-sm)] bg-[var(--bg-raised)]",
|
|
6066
6352
|
"motion-reduce:animate-none motion-reduce:opacity-80"
|
|
@@ -6078,7 +6364,7 @@ var skeletonVariants = cva19(
|
|
|
6078
6364
|
}
|
|
6079
6365
|
}
|
|
6080
6366
|
);
|
|
6081
|
-
var spinnerVariants =
|
|
6367
|
+
var spinnerVariants = cva20(
|
|
6082
6368
|
[
|
|
6083
6369
|
"inline-block shrink-0 animate-spin rounded-[var(--radius-full)] border-2",
|
|
6084
6370
|
"border-[var(--border-subtle)] border-t-[var(--accent-solid)]",
|
|
@@ -6101,8 +6387,8 @@ var spinnerVariants = cva19(
|
|
|
6101
6387
|
}
|
|
6102
6388
|
}
|
|
6103
6389
|
);
|
|
6104
|
-
var Skeleton =
|
|
6105
|
-
({ className, shape, style, ...props }, ref) => /* @__PURE__ */
|
|
6390
|
+
var Skeleton = React33.forwardRef(
|
|
6391
|
+
({ className, shape, style, ...props }, ref) => /* @__PURE__ */ jsx42(
|
|
6106
6392
|
"div",
|
|
6107
6393
|
{
|
|
6108
6394
|
ref,
|
|
@@ -6115,15 +6401,15 @@ var Skeleton = React32.forwardRef(
|
|
|
6115
6401
|
);
|
|
6116
6402
|
Skeleton.displayName = "Skeleton";
|
|
6117
6403
|
var defaultTextWidths = ["92%", "84%", "68%", "76%"];
|
|
6118
|
-
var SkeletonText =
|
|
6119
|
-
({ className, lines = 3, widths = defaultTextWidths, ...props }, ref) => /* @__PURE__ */
|
|
6404
|
+
var SkeletonText = React33.forwardRef(
|
|
6405
|
+
({ className, lines = 3, widths = defaultTextWidths, ...props }, ref) => /* @__PURE__ */ jsx42(
|
|
6120
6406
|
"div",
|
|
6121
6407
|
{
|
|
6122
6408
|
ref,
|
|
6123
6409
|
"data-slot": "skeleton-text",
|
|
6124
6410
|
className: cn("flex flex-col gap-[var(--space-1)]", className),
|
|
6125
6411
|
...props,
|
|
6126
|
-
children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */
|
|
6412
|
+
children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */ jsx42(
|
|
6127
6413
|
Skeleton,
|
|
6128
6414
|
{
|
|
6129
6415
|
shape: "text",
|
|
@@ -6135,7 +6421,7 @@ var SkeletonText = React32.forwardRef(
|
|
|
6135
6421
|
)
|
|
6136
6422
|
);
|
|
6137
6423
|
SkeletonText.displayName = "SkeletonText";
|
|
6138
|
-
var SkeletonRow =
|
|
6424
|
+
var SkeletonRow = React33.forwardRef(
|
|
6139
6425
|
({
|
|
6140
6426
|
className,
|
|
6141
6427
|
columns,
|
|
@@ -6146,7 +6432,7 @@ var SkeletonRow = React32.forwardRef(
|
|
|
6146
6432
|
}, ref) => {
|
|
6147
6433
|
const rowCount = Math.max(5, count);
|
|
6148
6434
|
const gridTemplateColumns = columns.map((column) => column.width ?? "1fr").join(" ");
|
|
6149
|
-
return /* @__PURE__ */
|
|
6435
|
+
return /* @__PURE__ */ jsx42(
|
|
6150
6436
|
"div",
|
|
6151
6437
|
{
|
|
6152
6438
|
ref,
|
|
@@ -6160,7 +6446,7 @@ var SkeletonRow = React32.forwardRef(
|
|
|
6160
6446
|
className
|
|
6161
6447
|
),
|
|
6162
6448
|
...props,
|
|
6163
|
-
children: Array.from({ length: rowCount }, (_, rowIndex) => /* @__PURE__ */
|
|
6449
|
+
children: Array.from({ length: rowCount }, (_, rowIndex) => /* @__PURE__ */ jsx42(
|
|
6164
6450
|
"div",
|
|
6165
6451
|
{
|
|
6166
6452
|
"data-slot": "skeleton-row",
|
|
@@ -6168,11 +6454,11 @@ var SkeletonRow = React32.forwardRef(
|
|
|
6168
6454
|
"grid min-h-[48px] items-center border-t border-[var(--border-subtle)] first:border-t-0"
|
|
6169
6455
|
),
|
|
6170
6456
|
style: { gridTemplateColumns },
|
|
6171
|
-
children: columns.map((column, columnIndex) => /* @__PURE__ */
|
|
6457
|
+
children: columns.map((column, columnIndex) => /* @__PURE__ */ jsx42(
|
|
6172
6458
|
"div",
|
|
6173
6459
|
{
|
|
6174
6460
|
className: "px-[var(--space-2)] py-[var(--space-1)]",
|
|
6175
|
-
children: /* @__PURE__ */
|
|
6461
|
+
children: /* @__PURE__ */ jsx42(
|
|
6176
6462
|
Skeleton,
|
|
6177
6463
|
{
|
|
6178
6464
|
shape: "text",
|
|
@@ -6192,8 +6478,8 @@ var SkeletonRow = React32.forwardRef(
|
|
|
6192
6478
|
}
|
|
6193
6479
|
);
|
|
6194
6480
|
SkeletonRow.displayName = "SkeletonRow";
|
|
6195
|
-
var Spinner =
|
|
6196
|
-
({ className, size, label = "\uB85C\uB529 \uC911", ...props }, ref) => /* @__PURE__ */
|
|
6481
|
+
var Spinner = React33.forwardRef(
|
|
6482
|
+
({ className, size, label = "\uB85C\uB529 \uC911", ...props }, ref) => /* @__PURE__ */ jsx42(
|
|
6197
6483
|
"span",
|
|
6198
6484
|
{
|
|
6199
6485
|
ref,
|
|
@@ -6207,155 +6493,11 @@ var Spinner = React32.forwardRef(
|
|
|
6207
6493
|
);
|
|
6208
6494
|
Spinner.displayName = "Spinner";
|
|
6209
6495
|
|
|
6210
|
-
// src/components/ui/icon-button.tsx
|
|
6211
|
-
import * as React33 from "react";
|
|
6212
|
-
import { cva as cva20 } from "class-variance-authority";
|
|
6213
|
-
import { jsx as jsx40, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
6214
|
-
var iconButtonVariants = cva20(
|
|
6215
|
-
[
|
|
6216
|
-
"olun-icon-button relative inline-flex cursor-pointer shrink-0 items-center justify-center",
|
|
6217
|
-
"rounded-[var(--radius-sm)] border font-medium",
|
|
6218
|
-
"transition-colors motion-reduce:transition-none",
|
|
6219
|
-
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--focus-ring)]",
|
|
6220
|
-
"disabled:cursor-not-allowed disabled:bg-[var(--action-disabled-bg)] disabled:text-text-disabled",
|
|
6221
|
-
"[&_svg]:pointer-events-none [&_svg]:shrink-0"
|
|
6222
|
-
].join(" "),
|
|
6223
|
-
{
|
|
6224
|
-
variants: {
|
|
6225
|
-
variant: {
|
|
6226
|
-
ghost: "border-transparent bg-transparent text-text-secondary hover:bg-[var(--action-hover)] hover:text-foreground",
|
|
6227
|
-
outline: "border-[var(--border-subtle)] bg-[var(--bg-surface)] text-text-secondary hover:border-[var(--border-accent)] hover:bg-[var(--action-hover)] hover:text-foreground",
|
|
6228
|
-
subtle: "border-transparent bg-[var(--bg-raised)] text-text-secondary hover:bg-[var(--action-hover)] hover:text-foreground",
|
|
6229
|
-
danger: "border-transparent bg-[var(--error-bg)] text-[var(--error)] hover:bg-[var(--action-hover)]"
|
|
6230
|
-
},
|
|
6231
|
-
size: {
|
|
6232
|
-
sm: "size-[var(--space-4)]",
|
|
6233
|
-
md: "size-[var(--touch-target-min)]",
|
|
6234
|
-
lg: "size-[var(--space-6)]"
|
|
6235
|
-
},
|
|
6236
|
-
pressed: {
|
|
6237
|
-
true: "",
|
|
6238
|
-
false: ""
|
|
6239
|
-
}
|
|
6240
|
-
},
|
|
6241
|
-
compoundVariants: [
|
|
6242
|
-
{
|
|
6243
|
-
pressed: true,
|
|
6244
|
-
variant: ["ghost", "outline", "subtle"],
|
|
6245
|
-
className: "border-[var(--border-accent)] bg-[var(--action-selected)] text-foreground"
|
|
6246
|
-
},
|
|
6247
|
-
{
|
|
6248
|
-
pressed: true,
|
|
6249
|
-
variant: "danger",
|
|
6250
|
-
className: "border-[var(--error)] bg-[var(--error-bg)] text-[var(--error)]"
|
|
6251
|
-
}
|
|
6252
|
-
],
|
|
6253
|
-
defaultVariants: {
|
|
6254
|
-
variant: "ghost",
|
|
6255
|
-
size: "md",
|
|
6256
|
-
pressed: false
|
|
6257
|
-
}
|
|
6258
|
-
}
|
|
6259
|
-
);
|
|
6260
|
-
var iconButtonBadgeVariants = cva20(
|
|
6261
|
-
[
|
|
6262
|
-
"pointer-events-none absolute right-0 top-0 inline-flex",
|
|
6263
|
-
"olun-icon-button__badge",
|
|
6264
|
-
"min-h-[var(--space-1-5)] min-w-[var(--space-1-5)] translate-x-1/3 -translate-y-1/3",
|
|
6265
|
-
"items-center justify-center gap-[2px] rounded-[var(--radius-full)] px-[3px]",
|
|
6266
|
-
"font-[family-name:var(--font-display)] text-[10px] font-semibold leading-none",
|
|
6267
|
-
"[&:has(svg)]:size-[var(--space-1-5)] [&:has(svg)]:px-0 [&_svg]:size-[10px]"
|
|
6268
|
-
].join(" "),
|
|
6269
|
-
{
|
|
6270
|
-
variants: {
|
|
6271
|
-
tone: {
|
|
6272
|
-
info: "bg-[var(--accent-solid)] text-[var(--accent-on-solid)]",
|
|
6273
|
-
error: "bg-[var(--error)] text-[var(--error-contrast)]"
|
|
6274
|
-
}
|
|
6275
|
-
},
|
|
6276
|
-
defaultVariants: {
|
|
6277
|
-
tone: "info"
|
|
6278
|
-
}
|
|
6279
|
-
}
|
|
6280
|
-
);
|
|
6281
|
-
var iconSize3 = {
|
|
6282
|
-
sm: 14,
|
|
6283
|
-
md: 16,
|
|
6284
|
-
lg: 18
|
|
6285
|
-
};
|
|
6286
|
-
var iconStrokeWidth = {
|
|
6287
|
-
sm: 2.25,
|
|
6288
|
-
md: 2.25,
|
|
6289
|
-
lg: 1.75
|
|
6290
|
-
};
|
|
6291
|
-
var IconButton = React33.forwardRef(
|
|
6292
|
-
({
|
|
6293
|
-
className,
|
|
6294
|
-
variant = "ghost",
|
|
6295
|
-
size = "md",
|
|
6296
|
-
pressed = false,
|
|
6297
|
-
icon: Icon,
|
|
6298
|
-
badge,
|
|
6299
|
-
badgeTone = "info",
|
|
6300
|
-
type,
|
|
6301
|
-
title,
|
|
6302
|
-
"aria-label": ariaLabel,
|
|
6303
|
-
"aria-labelledby": ariaLabelledBy,
|
|
6304
|
-
...props
|
|
6305
|
-
}, ref) => {
|
|
6306
|
-
const resolvedSize = size ?? "md";
|
|
6307
|
-
const isToggle = pressed !== void 0;
|
|
6308
|
-
const isPressed = pressed === true;
|
|
6309
|
-
const hoverTitle = title ?? (typeof ariaLabel === "string" ? ariaLabel : void 0);
|
|
6310
|
-
return /* @__PURE__ */ jsxs35(
|
|
6311
|
-
"button",
|
|
6312
|
-
{
|
|
6313
|
-
ref,
|
|
6314
|
-
...props,
|
|
6315
|
-
"data-slot": "icon-button",
|
|
6316
|
-
"data-variant": variant,
|
|
6317
|
-
"data-size": resolvedSize,
|
|
6318
|
-
"data-pressed": isToggle ? String(isPressed) : void 0,
|
|
6319
|
-
"aria-label": ariaLabel,
|
|
6320
|
-
"aria-labelledby": ariaLabelledBy,
|
|
6321
|
-
"aria-pressed": isToggle ? isPressed : void 0,
|
|
6322
|
-
title: hoverTitle,
|
|
6323
|
-
className: cn(
|
|
6324
|
-
iconButtonVariants({ variant, size, pressed: isPressed, className })
|
|
6325
|
-
),
|
|
6326
|
-
type: type ?? "button",
|
|
6327
|
-
children: [
|
|
6328
|
-
/* @__PURE__ */ jsx40(
|
|
6329
|
-
Icon,
|
|
6330
|
-
{
|
|
6331
|
-
"aria-hidden": "true",
|
|
6332
|
-
"data-slot": "icon-button-icon",
|
|
6333
|
-
size: iconSize3[resolvedSize],
|
|
6334
|
-
strokeWidth: iconStrokeWidth[resolvedSize]
|
|
6335
|
-
}
|
|
6336
|
-
),
|
|
6337
|
-
badge !== void 0 ? /* @__PURE__ */ jsx40(
|
|
6338
|
-
"span",
|
|
6339
|
-
{
|
|
6340
|
-
"aria-hidden": "true",
|
|
6341
|
-
"data-slot": "icon-button-badge",
|
|
6342
|
-
"data-badge-tone": badgeTone,
|
|
6343
|
-
className: iconButtonBadgeVariants({ tone: badgeTone }),
|
|
6344
|
-
children: badge
|
|
6345
|
-
}
|
|
6346
|
-
) : null
|
|
6347
|
-
]
|
|
6348
|
-
}
|
|
6349
|
-
);
|
|
6350
|
-
}
|
|
6351
|
-
);
|
|
6352
|
-
IconButton.displayName = "IconButton";
|
|
6353
|
-
|
|
6354
6496
|
// src/components/ui/pagination.tsx
|
|
6355
6497
|
import * as React34 from "react";
|
|
6356
6498
|
import { ChevronsLeft, ChevronLeft, ChevronRight, ChevronsRight } from "lucide-react";
|
|
6357
6499
|
import { cva as cva21 } from "class-variance-authority";
|
|
6358
|
-
import { jsx as
|
|
6500
|
+
import { jsx as jsx43, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
6359
6501
|
var paginationVariants = cva21(
|
|
6360
6502
|
[
|
|
6361
6503
|
"flex w-full flex-col gap-[var(--space-1-5)]",
|
|
@@ -6430,7 +6572,7 @@ function NavigationButton({
|
|
|
6430
6572
|
icon: Icon,
|
|
6431
6573
|
onPageChange
|
|
6432
6574
|
}) {
|
|
6433
|
-
return /* @__PURE__ */
|
|
6575
|
+
return /* @__PURE__ */ jsx43(
|
|
6434
6576
|
"button",
|
|
6435
6577
|
{
|
|
6436
6578
|
"aria-label": label,
|
|
@@ -6438,7 +6580,7 @@ function NavigationButton({
|
|
|
6438
6580
|
className: paginationControlVariants({ size }),
|
|
6439
6581
|
type: "button",
|
|
6440
6582
|
onClick: () => onPageChange?.(page),
|
|
6441
|
-
children: /* @__PURE__ */
|
|
6583
|
+
children: /* @__PURE__ */ jsx43(Icon, { "aria-hidden": "true", "data-slot": "pagination-icon" })
|
|
6442
6584
|
}
|
|
6443
6585
|
);
|
|
6444
6586
|
}
|
|
@@ -6470,7 +6612,7 @@ var Pagination = React34.forwardRef(
|
|
|
6470
6612
|
value: String(option),
|
|
6471
6613
|
label: option
|
|
6472
6614
|
}));
|
|
6473
|
-
return /* @__PURE__ */
|
|
6615
|
+
return /* @__PURE__ */ jsxs38(
|
|
6474
6616
|
"nav",
|
|
6475
6617
|
{
|
|
6476
6618
|
ref,
|
|
@@ -6480,16 +6622,16 @@ var Pagination = React34.forwardRef(
|
|
|
6480
6622
|
className: cn(paginationVariants({ size: resolvedSize, className })),
|
|
6481
6623
|
...props,
|
|
6482
6624
|
children: [
|
|
6483
|
-
/* @__PURE__ */
|
|
6484
|
-
/* @__PURE__ */
|
|
6485
|
-
/* @__PURE__ */
|
|
6625
|
+
/* @__PURE__ */ jsxs38("div", { className: "flex flex-wrap items-center gap-[var(--space-1-5)]", children: [
|
|
6626
|
+
/* @__PURE__ */ jsx43("span", { "data-slot": "pagination-total", className: "font-medium text-text-secondary", children: totalLabel(total) }),
|
|
6627
|
+
/* @__PURE__ */ jsxs38(
|
|
6486
6628
|
"div",
|
|
6487
6629
|
{
|
|
6488
6630
|
"data-slot": "pagination-size",
|
|
6489
6631
|
className: "inline-flex items-center gap-[var(--space-1)] text-xs text-text-tertiary",
|
|
6490
6632
|
children: [
|
|
6491
|
-
/* @__PURE__ */
|
|
6492
|
-
/* @__PURE__ */
|
|
6633
|
+
/* @__PURE__ */ jsx43("span", { children: pageSizeLabel }),
|
|
6634
|
+
/* @__PURE__ */ jsx43(
|
|
6493
6635
|
Select,
|
|
6494
6636
|
{
|
|
6495
6637
|
"aria-label": pageSizeLabel,
|
|
@@ -6505,13 +6647,13 @@ var Pagination = React34.forwardRef(
|
|
|
6505
6647
|
}
|
|
6506
6648
|
)
|
|
6507
6649
|
] }),
|
|
6508
|
-
/* @__PURE__ */
|
|
6650
|
+
/* @__PURE__ */ jsxs38(
|
|
6509
6651
|
"div",
|
|
6510
6652
|
{
|
|
6511
6653
|
"data-slot": "pagination-list",
|
|
6512
6654
|
className: "flex items-center justify-center gap-[var(--space-0-5)]",
|
|
6513
6655
|
children: [
|
|
6514
|
-
/* @__PURE__ */
|
|
6656
|
+
/* @__PURE__ */ jsx43(
|
|
6515
6657
|
NavigationButton,
|
|
6516
6658
|
{
|
|
6517
6659
|
label: "\uCCAB \uD398\uC774\uC9C0",
|
|
@@ -6522,7 +6664,7 @@ var Pagination = React34.forwardRef(
|
|
|
6522
6664
|
onPageChange
|
|
6523
6665
|
}
|
|
6524
6666
|
),
|
|
6525
|
-
/* @__PURE__ */
|
|
6667
|
+
/* @__PURE__ */ jsx43(
|
|
6526
6668
|
NavigationButton,
|
|
6527
6669
|
{
|
|
6528
6670
|
label: "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
@@ -6534,7 +6676,7 @@ var Pagination = React34.forwardRef(
|
|
|
6534
6676
|
}
|
|
6535
6677
|
),
|
|
6536
6678
|
items.map(
|
|
6537
|
-
(item, index) => item === "ellipsis" ? /* @__PURE__ */
|
|
6679
|
+
(item, index) => item === "ellipsis" ? /* @__PURE__ */ jsx43(
|
|
6538
6680
|
"span",
|
|
6539
6681
|
{
|
|
6540
6682
|
"data-slot": "pagination-ellipsis",
|
|
@@ -6546,7 +6688,7 @@ var Pagination = React34.forwardRef(
|
|
|
6546
6688
|
children: "..."
|
|
6547
6689
|
},
|
|
6548
6690
|
`ellipsis-${index}`
|
|
6549
|
-
) : /* @__PURE__ */
|
|
6691
|
+
) : /* @__PURE__ */ jsx43(
|
|
6550
6692
|
"button",
|
|
6551
6693
|
{
|
|
6552
6694
|
"aria-label": `${item} \uD398\uC774\uC9C0`,
|
|
@@ -6560,7 +6702,7 @@ var Pagination = React34.forwardRef(
|
|
|
6560
6702
|
item
|
|
6561
6703
|
)
|
|
6562
6704
|
),
|
|
6563
|
-
/* @__PURE__ */
|
|
6705
|
+
/* @__PURE__ */ jsx43(
|
|
6564
6706
|
NavigationButton,
|
|
6565
6707
|
{
|
|
6566
6708
|
label: "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
@@ -6571,7 +6713,7 @@ var Pagination = React34.forwardRef(
|
|
|
6571
6713
|
onPageChange
|
|
6572
6714
|
}
|
|
6573
6715
|
),
|
|
6574
|
-
/* @__PURE__ */
|
|
6716
|
+
/* @__PURE__ */ jsx43(
|
|
6575
6717
|
NavigationButton,
|
|
6576
6718
|
{
|
|
6577
6719
|
label: "\uB9C8\uC9C0\uB9C9 \uD398\uC774\uC9C0",
|
|
@@ -6594,7 +6736,7 @@ Pagination.displayName = "Pagination";
|
|
|
6594
6736
|
|
|
6595
6737
|
// src/components/ui/mode-toggle.tsx
|
|
6596
6738
|
import { cva as cva22 } from "class-variance-authority";
|
|
6597
|
-
import { jsx as
|
|
6739
|
+
import { jsx as jsx44, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
6598
6740
|
var modeToggleVariants = cva22(
|
|
6599
6741
|
[
|
|
6600
6742
|
"inline-flex items-center rounded-[var(--radius-sm)] border border-[var(--border-subtle)]",
|
|
@@ -6624,7 +6766,7 @@ function ModeToggle({
|
|
|
6624
6766
|
onChange,
|
|
6625
6767
|
...props
|
|
6626
6768
|
}) {
|
|
6627
|
-
return /* @__PURE__ */
|
|
6769
|
+
return /* @__PURE__ */ jsx44(
|
|
6628
6770
|
"div",
|
|
6629
6771
|
{
|
|
6630
6772
|
role: "group",
|
|
@@ -6634,7 +6776,7 @@ function ModeToggle({
|
|
|
6634
6776
|
children: options.map((option) => {
|
|
6635
6777
|
const Icon = option.icon;
|
|
6636
6778
|
const isActive = option.value === value;
|
|
6637
|
-
return /* @__PURE__ */
|
|
6779
|
+
return /* @__PURE__ */ jsxs39(
|
|
6638
6780
|
"button",
|
|
6639
6781
|
{
|
|
6640
6782
|
type: "button",
|
|
@@ -6650,8 +6792,8 @@ function ModeToggle({
|
|
|
6650
6792
|
}
|
|
6651
6793
|
},
|
|
6652
6794
|
children: [
|
|
6653
|
-
Icon ? /* @__PURE__ */
|
|
6654
|
-
/* @__PURE__ */
|
|
6795
|
+
Icon ? /* @__PURE__ */ jsx44(Icon, { "aria-hidden": "true", "data-slot": "mode-toggle-icon" }) : null,
|
|
6796
|
+
/* @__PURE__ */ jsx44("span", { children: option.label })
|
|
6655
6797
|
]
|
|
6656
6798
|
},
|
|
6657
6799
|
option.value
|
|
@@ -6664,7 +6806,7 @@ function ModeToggle({
|
|
|
6664
6806
|
// src/components/ui/action-footer.tsx
|
|
6665
6807
|
import * as React35 from "react";
|
|
6666
6808
|
import { cva as cva23 } from "class-variance-authority";
|
|
6667
|
-
import { jsx as
|
|
6809
|
+
import { jsx as jsx45, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
6668
6810
|
var actionFooterVariants = cva23(
|
|
6669
6811
|
[
|
|
6670
6812
|
"flex flex-wrap items-center gap-[var(--space-2)] border-t border-[var(--border-subtle)]",
|
|
@@ -6735,7 +6877,7 @@ function getStatusLabel(status) {
|
|
|
6735
6877
|
}
|
|
6736
6878
|
}
|
|
6737
6879
|
function renderAction(action) {
|
|
6738
|
-
return /* @__PURE__ */
|
|
6880
|
+
return /* @__PURE__ */ jsx45(
|
|
6739
6881
|
Button,
|
|
6740
6882
|
{
|
|
6741
6883
|
variant: action.variant,
|
|
@@ -6766,7 +6908,7 @@ var ActionFooter = React35.forwardRef(
|
|
|
6766
6908
|
const mainActions = sortMainActions(
|
|
6767
6909
|
visibleActions.filter((action) => !destructiveVariants.has(action.variant ?? "default"))
|
|
6768
6910
|
);
|
|
6769
|
-
return /* @__PURE__ */
|
|
6911
|
+
return /* @__PURE__ */ jsxs40(
|
|
6770
6912
|
"div",
|
|
6771
6913
|
{
|
|
6772
6914
|
ref,
|
|
@@ -6775,7 +6917,7 @@ var ActionFooter = React35.forwardRef(
|
|
|
6775
6917
|
className: cn(actionFooterVariants({ position, surface, className })),
|
|
6776
6918
|
...props,
|
|
6777
6919
|
children: [
|
|
6778
|
-
destructiveActions.length > 0 ? /* @__PURE__ */
|
|
6920
|
+
destructiveActions.length > 0 ? /* @__PURE__ */ jsx45(
|
|
6779
6921
|
"div",
|
|
6780
6922
|
{
|
|
6781
6923
|
"data-slot": "action-footer-destructive-actions",
|
|
@@ -6783,7 +6925,7 @@ var ActionFooter = React35.forwardRef(
|
|
|
6783
6925
|
children: destructiveActions.map(renderAction)
|
|
6784
6926
|
}
|
|
6785
6927
|
) : null,
|
|
6786
|
-
status ? /* @__PURE__ */
|
|
6928
|
+
status ? /* @__PURE__ */ jsxs40(
|
|
6787
6929
|
"div",
|
|
6788
6930
|
{
|
|
6789
6931
|
"data-slot": "action-footer-status",
|
|
@@ -6791,7 +6933,7 @@ var ActionFooter = React35.forwardRef(
|
|
|
6791
6933
|
"aria-live": "polite",
|
|
6792
6934
|
className: cn(actionFooterStatusVariants({ kind: status.kind })),
|
|
6793
6935
|
children: [
|
|
6794
|
-
/* @__PURE__ */
|
|
6936
|
+
/* @__PURE__ */ jsx45(
|
|
6795
6937
|
"span",
|
|
6796
6938
|
{
|
|
6797
6939
|
"aria-hidden": "true",
|
|
@@ -6799,11 +6941,11 @@ var ActionFooter = React35.forwardRef(
|
|
|
6799
6941
|
className: "size-[6px] shrink-0 rounded-[var(--radius-full)]"
|
|
6800
6942
|
}
|
|
6801
6943
|
),
|
|
6802
|
-
/* @__PURE__ */
|
|
6944
|
+
/* @__PURE__ */ jsx45("span", { className: "truncate", children: getStatusLabel(status) })
|
|
6803
6945
|
]
|
|
6804
6946
|
}
|
|
6805
6947
|
) : null,
|
|
6806
|
-
/* @__PURE__ */
|
|
6948
|
+
/* @__PURE__ */ jsx45(
|
|
6807
6949
|
"div",
|
|
6808
6950
|
{
|
|
6809
6951
|
"data-slot": "action-footer-main-actions",
|
|
@@ -6820,9 +6962,9 @@ ActionFooter.displayName = "ActionFooter";
|
|
|
6820
6962
|
|
|
6821
6963
|
// src/components/ui/toast.tsx
|
|
6822
6964
|
import * as React36 from "react";
|
|
6823
|
-
import { AlertCircle as AlertCircle5, AlertTriangle as AlertTriangle3, CheckCircle2 as CheckCircle25, Info as Info2, X as
|
|
6965
|
+
import { AlertCircle as AlertCircle5, AlertTriangle as AlertTriangle3, CheckCircle2 as CheckCircle25, Info as Info2, X as X5 } from "lucide-react";
|
|
6824
6966
|
import { cva as cva24 } from "class-variance-authority";
|
|
6825
|
-
import { jsx as
|
|
6967
|
+
import { jsx as jsx46, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
6826
6968
|
var toastVariants = cva24(
|
|
6827
6969
|
[
|
|
6828
6970
|
"grid min-w-[280px] max-w-[420px] grid-cols-[auto_1fr_auto] items-center",
|
|
@@ -6921,7 +7063,7 @@ var ToastRoot = React36.forwardRef(
|
|
|
6921
7063
|
}, ref) => {
|
|
6922
7064
|
const Icon = toastIcons[variant];
|
|
6923
7065
|
const hasIcon = Icon !== null;
|
|
6924
|
-
return /* @__PURE__ */
|
|
7066
|
+
return /* @__PURE__ */ jsxs41(
|
|
6925
7067
|
"div",
|
|
6926
7068
|
{
|
|
6927
7069
|
ref,
|
|
@@ -6937,7 +7079,7 @@ var ToastRoot = React36.forwardRef(
|
|
|
6937
7079
|
),
|
|
6938
7080
|
...props,
|
|
6939
7081
|
children: [
|
|
6940
|
-
Icon ? /* @__PURE__ */
|
|
7082
|
+
Icon ? /* @__PURE__ */ jsx46(
|
|
6941
7083
|
Icon,
|
|
6942
7084
|
{
|
|
6943
7085
|
"aria-hidden": "true",
|
|
@@ -6947,9 +7089,9 @@ var ToastRoot = React36.forwardRef(
|
|
|
6947
7089
|
className: "shrink-0"
|
|
6948
7090
|
}
|
|
6949
7091
|
) : null,
|
|
6950
|
-
/* @__PURE__ */
|
|
6951
|
-
/* @__PURE__ */
|
|
6952
|
-
action ? /* @__PURE__ */
|
|
7092
|
+
/* @__PURE__ */ jsxs41("div", { "data-slot": "toast-body", className: "min-w-0", children: [
|
|
7093
|
+
/* @__PURE__ */ jsx46("div", { "data-slot": "toast-message", className: "font-normal", children: message }),
|
|
7094
|
+
action ? /* @__PURE__ */ jsx46(
|
|
6953
7095
|
Button,
|
|
6954
7096
|
{
|
|
6955
7097
|
"data-slot": "toast-action",
|
|
@@ -6961,7 +7103,7 @@ var ToastRoot = React36.forwardRef(
|
|
|
6961
7103
|
}
|
|
6962
7104
|
) : null
|
|
6963
7105
|
] }),
|
|
6964
|
-
/* @__PURE__ */
|
|
7106
|
+
/* @__PURE__ */ jsx46(
|
|
6965
7107
|
"button",
|
|
6966
7108
|
{
|
|
6967
7109
|
type: "button",
|
|
@@ -6973,7 +7115,7 @@ var ToastRoot = React36.forwardRef(
|
|
|
6973
7115
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--focus-ring)]"
|
|
6974
7116
|
),
|
|
6975
7117
|
onClick: onClose,
|
|
6976
|
-
children: /* @__PURE__ */
|
|
7118
|
+
children: /* @__PURE__ */ jsx46(X5, { "aria-hidden": "true", size: 16, strokeWidth: 1.75 })
|
|
6977
7119
|
}
|
|
6978
7120
|
)
|
|
6979
7121
|
]
|
|
@@ -6982,7 +7124,7 @@ var ToastRoot = React36.forwardRef(
|
|
|
6982
7124
|
}
|
|
6983
7125
|
);
|
|
6984
7126
|
ToastRoot.displayName = "ToastRoot";
|
|
6985
|
-
var ToastViewport = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
7127
|
+
var ToastViewport = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx46(
|
|
6986
7128
|
"ol",
|
|
6987
7129
|
{
|
|
6988
7130
|
ref,
|
|
@@ -7000,9 +7142,9 @@ function ToastProvider({ children, maxToasts = 3, className, ...props }) {
|
|
|
7000
7142
|
}),
|
|
7001
7143
|
[maxToasts]
|
|
7002
7144
|
);
|
|
7003
|
-
return /* @__PURE__ */
|
|
7145
|
+
return /* @__PURE__ */ jsxs41("div", { "data-slot": "toast-provider", className, ...props, children: [
|
|
7004
7146
|
children,
|
|
7005
|
-
/* @__PURE__ */
|
|
7147
|
+
/* @__PURE__ */ jsx46(ToastViewport, { children: items.map((item) => /* @__PURE__ */ jsx46("li", { children: /* @__PURE__ */ jsx46(ToastRoot, { ...item, onClose: () => toast.dismiss(item.id) }) }, item.id)) })
|
|
7006
7148
|
] });
|
|
7007
7149
|
}
|
|
7008
7150
|
|
|
@@ -7010,7 +7152,7 @@ function ToastProvider({ children, maxToasts = 3, className, ...props }) {
|
|
|
7010
7152
|
import * as React37 from "react";
|
|
7011
7153
|
import { cva as cva25 } from "class-variance-authority";
|
|
7012
7154
|
import { AlertCircle as AlertCircle6 } from "lucide-react";
|
|
7013
|
-
import { Fragment as Fragment8, jsx as
|
|
7155
|
+
import { Fragment as Fragment8, jsx as jsx47, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
7014
7156
|
var otpFieldVariants = cva25("flex w-full flex-col gap-[var(--space-1-5)]", {
|
|
7015
7157
|
variants: {
|
|
7016
7158
|
size: {
|
|
@@ -7022,20 +7164,25 @@ var otpFieldVariants = cva25("flex w-full flex-col gap-[var(--space-1-5)]", {
|
|
|
7022
7164
|
size: "default"
|
|
7023
7165
|
}
|
|
7024
7166
|
});
|
|
7025
|
-
var otpFieldGroupVariants = cva25("flex
|
|
7167
|
+
var otpFieldGroupVariants = cva25("flex items-start gap-[var(--space-1)] pt-[var(--space-0-5)]", {
|
|
7026
7168
|
variants: {
|
|
7027
7169
|
size: {
|
|
7028
7170
|
default: "",
|
|
7029
7171
|
compact: ""
|
|
7172
|
+
},
|
|
7173
|
+
fluid: {
|
|
7174
|
+
true: "flex-nowrap justify-center",
|
|
7175
|
+
false: "flex-wrap"
|
|
7030
7176
|
}
|
|
7031
7177
|
},
|
|
7032
7178
|
defaultVariants: {
|
|
7033
|
-
size: "default"
|
|
7179
|
+
size: "default",
|
|
7180
|
+
fluid: false
|
|
7034
7181
|
}
|
|
7035
7182
|
});
|
|
7036
7183
|
var otpCellVariants = cva25(
|
|
7037
7184
|
[
|
|
7038
|
-
"flex
|
|
7185
|
+
"flex items-center justify-center rounded-[var(--radius-sm)] border",
|
|
7039
7186
|
"border-[var(--border)] text-foreground",
|
|
7040
7187
|
"font-[family-name:var(--font-display)] tabular-nums",
|
|
7041
7188
|
"text-center leading-none caret-[var(--accent-fg)]",
|
|
@@ -7050,13 +7197,40 @@ var otpCellVariants = cva25(
|
|
|
7050
7197
|
{
|
|
7051
7198
|
variants: {
|
|
7052
7199
|
size: {
|
|
7053
|
-
default: "h-[60px]
|
|
7054
|
-
compact: "h-[52px]
|
|
7200
|
+
default: "h-[60px] text-[24px]",
|
|
7201
|
+
compact: "h-[52px] text-[20px]"
|
|
7202
|
+
},
|
|
7203
|
+
fluid: {
|
|
7204
|
+
true: "min-w-0 flex-1",
|
|
7205
|
+
false: "shrink-0"
|
|
7055
7206
|
},
|
|
7056
7207
|
surface: fieldSurfaceClassNames
|
|
7057
7208
|
},
|
|
7209
|
+
compoundVariants: [
|
|
7210
|
+
{
|
|
7211
|
+
size: "default",
|
|
7212
|
+
fluid: false,
|
|
7213
|
+
className: "w-[52px]"
|
|
7214
|
+
},
|
|
7215
|
+
{
|
|
7216
|
+
size: "compact",
|
|
7217
|
+
fluid: false,
|
|
7218
|
+
className: "w-[44px]"
|
|
7219
|
+
},
|
|
7220
|
+
{
|
|
7221
|
+
size: "default",
|
|
7222
|
+
fluid: true,
|
|
7223
|
+
className: "max-w-[52px]"
|
|
7224
|
+
},
|
|
7225
|
+
{
|
|
7226
|
+
size: "compact",
|
|
7227
|
+
fluid: true,
|
|
7228
|
+
className: "max-w-[44px]"
|
|
7229
|
+
}
|
|
7230
|
+
],
|
|
7058
7231
|
defaultVariants: {
|
|
7059
7232
|
size: "default",
|
|
7233
|
+
fluid: false,
|
|
7060
7234
|
surface: "surface"
|
|
7061
7235
|
}
|
|
7062
7236
|
}
|
|
@@ -7114,6 +7288,7 @@ var OTPField = React37.forwardRef(
|
|
|
7114
7288
|
helperText,
|
|
7115
7289
|
id,
|
|
7116
7290
|
invalid,
|
|
7291
|
+
fluid = false,
|
|
7117
7292
|
label,
|
|
7118
7293
|
length = 6,
|
|
7119
7294
|
name,
|
|
@@ -7162,7 +7337,7 @@ var OTPField = React37.forwardRef(
|
|
|
7162
7337
|
},
|
|
7163
7338
|
[disabled, isControlled, length, onComplete, onValueChange]
|
|
7164
7339
|
);
|
|
7165
|
-
return /* @__PURE__ */
|
|
7340
|
+
return /* @__PURE__ */ jsxs42(
|
|
7166
7341
|
"fieldset",
|
|
7167
7342
|
{
|
|
7168
7343
|
ref,
|
|
@@ -7175,7 +7350,7 @@ var OTPField = React37.forwardRef(
|
|
|
7175
7350
|
className: cn(otpFieldVariants({ size, className })),
|
|
7176
7351
|
...props,
|
|
7177
7352
|
children: [
|
|
7178
|
-
/* @__PURE__ */
|
|
7353
|
+
/* @__PURE__ */ jsx47(
|
|
7179
7354
|
"legend",
|
|
7180
7355
|
{
|
|
7181
7356
|
id: labelId,
|
|
@@ -7184,17 +7359,17 @@ var OTPField = React37.forwardRef(
|
|
|
7184
7359
|
children: label
|
|
7185
7360
|
}
|
|
7186
7361
|
),
|
|
7187
|
-
/* @__PURE__ */
|
|
7362
|
+
/* @__PURE__ */ jsx47(
|
|
7188
7363
|
"div",
|
|
7189
7364
|
{
|
|
7190
7365
|
"data-slot": "otp-field-group",
|
|
7191
7366
|
"aria-labelledby": labelId,
|
|
7192
7367
|
"aria-describedby": groupDescribedBy,
|
|
7193
|
-
className: cn(otpFieldGroupVariants({ size })),
|
|
7368
|
+
className: cn(otpFieldGroupVariants({ size, fluid })),
|
|
7194
7369
|
children: Array.from({ length }, (_, index) => {
|
|
7195
7370
|
const digit = resolvedSlots[index] ?? "";
|
|
7196
7371
|
const inputId = `${fieldId}-cell-${index + 1}`;
|
|
7197
|
-
return /* @__PURE__ */
|
|
7372
|
+
return /* @__PURE__ */ jsx47(
|
|
7198
7373
|
"input",
|
|
7199
7374
|
{
|
|
7200
7375
|
ref: (node) => {
|
|
@@ -7282,22 +7457,22 @@ var OTPField = React37.forwardRef(
|
|
|
7282
7457
|
onFocus: (event) => {
|
|
7283
7458
|
event.currentTarget.select();
|
|
7284
7459
|
},
|
|
7285
|
-
className: cn(otpCellVariants({ size, surface }))
|
|
7460
|
+
className: cn(otpCellVariants({ size, surface, fluid }))
|
|
7286
7461
|
},
|
|
7287
7462
|
inputId
|
|
7288
7463
|
);
|
|
7289
7464
|
})
|
|
7290
7465
|
}
|
|
7291
7466
|
),
|
|
7292
|
-
helperText || errorText ? /* @__PURE__ */
|
|
7467
|
+
helperText || errorText ? /* @__PURE__ */ jsx47(
|
|
7293
7468
|
"p",
|
|
7294
7469
|
{
|
|
7295
7470
|
id: errorText ? errorId : helperId,
|
|
7296
7471
|
"data-slot": "otp-field-message",
|
|
7297
7472
|
"data-kind": errorText ? "error" : "helper",
|
|
7298
7473
|
className: otpFieldMessageVariants({ state: resolvedState }),
|
|
7299
|
-
children: errorText ? /* @__PURE__ */
|
|
7300
|
-
/* @__PURE__ */
|
|
7474
|
+
children: errorText ? /* @__PURE__ */ jsxs42(Fragment8, { children: [
|
|
7475
|
+
/* @__PURE__ */ jsx47(
|
|
7301
7476
|
AlertCircle6,
|
|
7302
7477
|
{
|
|
7303
7478
|
"aria-hidden": "true",
|
|
@@ -7305,11 +7480,11 @@ var OTPField = React37.forwardRef(
|
|
|
7305
7480
|
strokeWidth: 2
|
|
7306
7481
|
}
|
|
7307
7482
|
),
|
|
7308
|
-
/* @__PURE__ */
|
|
7309
|
-
] }) : /* @__PURE__ */
|
|
7483
|
+
/* @__PURE__ */ jsx47("span", { children: errorText })
|
|
7484
|
+
] }) : /* @__PURE__ */ jsx47("span", { children: helperText })
|
|
7310
7485
|
}
|
|
7311
7486
|
) : null,
|
|
7312
|
-
name ? /* @__PURE__ */
|
|
7487
|
+
name ? /* @__PURE__ */ jsx47(
|
|
7313
7488
|
"input",
|
|
7314
7489
|
{
|
|
7315
7490
|
"aria-hidden": "true",
|
|
@@ -7331,9 +7506,9 @@ OTPField.displayName = "OTPField";
|
|
|
7331
7506
|
|
|
7332
7507
|
// src/components/ui/search-field.tsx
|
|
7333
7508
|
import * as React38 from "react";
|
|
7334
|
-
import { Search, X as
|
|
7509
|
+
import { Search, X as X6 } from "lucide-react";
|
|
7335
7510
|
import { cva as cva26 } from "class-variance-authority";
|
|
7336
|
-
import { jsx as
|
|
7511
|
+
import { jsx as jsx48, jsxs as jsxs43 } from "react/jsx-runtime";
|
|
7337
7512
|
var searchFieldVariants = cva26("relative flex w-full items-center", {
|
|
7338
7513
|
variants: {
|
|
7339
7514
|
size: {
|
|
@@ -7432,14 +7607,14 @@ var SearchField = React38.forwardRef(
|
|
|
7432
7607
|
}
|
|
7433
7608
|
onClear?.();
|
|
7434
7609
|
};
|
|
7435
|
-
return /* @__PURE__ */
|
|
7610
|
+
return /* @__PURE__ */ jsxs43(
|
|
7436
7611
|
"div",
|
|
7437
7612
|
{
|
|
7438
7613
|
"data-slot": "search-field",
|
|
7439
7614
|
"data-size": resolvedSize,
|
|
7440
7615
|
className: cn(searchFieldVariants({ size, className })),
|
|
7441
7616
|
children: [
|
|
7442
|
-
/* @__PURE__ */
|
|
7617
|
+
/* @__PURE__ */ jsx48(
|
|
7443
7618
|
Search,
|
|
7444
7619
|
{
|
|
7445
7620
|
"aria-hidden": "true",
|
|
@@ -7449,7 +7624,7 @@ var SearchField = React38.forwardRef(
|
|
|
7449
7624
|
strokeWidth: resolvedSize === "sm" ? 2 : 1.75
|
|
7450
7625
|
}
|
|
7451
7626
|
),
|
|
7452
|
-
/* @__PURE__ */
|
|
7627
|
+
/* @__PURE__ */ jsx48(
|
|
7453
7628
|
"input",
|
|
7454
7629
|
{
|
|
7455
7630
|
ref: inputRef,
|
|
@@ -7470,7 +7645,7 @@ var SearchField = React38.forwardRef(
|
|
|
7470
7645
|
...props
|
|
7471
7646
|
}
|
|
7472
7647
|
),
|
|
7473
|
-
showClear ? /* @__PURE__ */
|
|
7648
|
+
showClear ? /* @__PURE__ */ jsx48(
|
|
7474
7649
|
"button",
|
|
7475
7650
|
{
|
|
7476
7651
|
type: "button",
|
|
@@ -7478,7 +7653,7 @@ var SearchField = React38.forwardRef(
|
|
|
7478
7653
|
"data-slot": "search-field-clear",
|
|
7479
7654
|
className: "absolute right-[8px] top-1/2 inline-flex size-[var(--space-2)] -translate-y-1/2 cursor-pointer items-center justify-center rounded-[var(--radius-full)] text-text-tertiary transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--focus-ring)]",
|
|
7480
7655
|
onClick: clearInput,
|
|
7481
|
-
children: /* @__PURE__ */
|
|
7656
|
+
children: /* @__PURE__ */ jsx48(X6, { "aria-hidden": "true", size: 16, strokeWidth: 1.75 })
|
|
7482
7657
|
}
|
|
7483
7658
|
) : null
|
|
7484
7659
|
]
|
|
@@ -7491,7 +7666,7 @@ SearchField.displayName = "SearchField";
|
|
|
7491
7666
|
// src/components/ui/checkbox-group.tsx
|
|
7492
7667
|
import * as React39 from "react";
|
|
7493
7668
|
import { cva as cva27 } from "class-variance-authority";
|
|
7494
|
-
import { jsx as
|
|
7669
|
+
import { jsx as jsx49 } from "react/jsx-runtime";
|
|
7495
7670
|
var checkboxGroupVariants = cva27("gap-[var(--space-1)]", {
|
|
7496
7671
|
variants: {
|
|
7497
7672
|
appearance: {
|
|
@@ -7567,7 +7742,7 @@ var CheckboxGroup = React39.forwardRef(
|
|
|
7567
7742
|
}),
|
|
7568
7743
|
[appearance, density, disabled, name, selectedValues, toggleValue]
|
|
7569
7744
|
);
|
|
7570
|
-
return /* @__PURE__ */
|
|
7745
|
+
return /* @__PURE__ */ jsx49(CheckboxGroupContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx49(
|
|
7571
7746
|
"div",
|
|
7572
7747
|
{
|
|
7573
7748
|
ref,
|
|
@@ -7595,7 +7770,7 @@ import * as React40 from "react";
|
|
|
7595
7770
|
import { cva as cva28 } from "class-variance-authority";
|
|
7596
7771
|
import { Circle } from "lucide-react";
|
|
7597
7772
|
import { RadioGroup as RadioGroupPrimitive } from "radix-ui";
|
|
7598
|
-
import { jsx as
|
|
7773
|
+
import { jsx as jsx50, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
7599
7774
|
var radioGroupVariants = cva28("gap-[var(--space-1)]", {
|
|
7600
7775
|
variants: {
|
|
7601
7776
|
appearance: {
|
|
@@ -7703,7 +7878,7 @@ var RadioGroup = React40.forwardRef(
|
|
|
7703
7878
|
() => ({ appearance, density }),
|
|
7704
7879
|
[appearance, density]
|
|
7705
7880
|
);
|
|
7706
|
-
return /* @__PURE__ */
|
|
7881
|
+
return /* @__PURE__ */ jsx50(RadioGroupContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx50(
|
|
7707
7882
|
RadioGroupPrimitive.Root,
|
|
7708
7883
|
{
|
|
7709
7884
|
ref,
|
|
@@ -7732,7 +7907,7 @@ var Radio = React40.forwardRef(({ className, children, description, id, ...props
|
|
|
7732
7907
|
const radioId = id ?? generatedId;
|
|
7733
7908
|
const labelId = `${radioId}-label`;
|
|
7734
7909
|
const descriptionId = description ? `${radioId}-description` : void 0;
|
|
7735
|
-
return /* @__PURE__ */
|
|
7910
|
+
return /* @__PURE__ */ jsxs44(
|
|
7736
7911
|
RadioGroupPrimitive.Item,
|
|
7737
7912
|
{
|
|
7738
7913
|
ref,
|
|
@@ -7743,24 +7918,24 @@ var Radio = React40.forwardRef(({ className, children, description, id, ...props
|
|
|
7743
7918
|
className: cn(radioVariants({ appearance, density }), className),
|
|
7744
7919
|
...props,
|
|
7745
7920
|
children: [
|
|
7746
|
-
/* @__PURE__ */
|
|
7921
|
+
/* @__PURE__ */ jsx50(
|
|
7747
7922
|
"span",
|
|
7748
7923
|
{
|
|
7749
7924
|
"aria-hidden": "true",
|
|
7750
7925
|
"data-slot": "radio-control",
|
|
7751
7926
|
className: radioControlVariants({ appearance }),
|
|
7752
|
-
children: /* @__PURE__ */
|
|
7927
|
+
children: /* @__PURE__ */ jsx50(
|
|
7753
7928
|
RadioGroupPrimitive.Indicator,
|
|
7754
7929
|
{
|
|
7755
7930
|
"data-slot": "radio-indicator",
|
|
7756
7931
|
className: "flex items-center justify-center",
|
|
7757
|
-
children: /* @__PURE__ */
|
|
7932
|
+
children: /* @__PURE__ */ jsx50(Circle, { "aria-hidden": "true", size: 8, fill: "currentColor" })
|
|
7758
7933
|
}
|
|
7759
7934
|
)
|
|
7760
7935
|
}
|
|
7761
7936
|
),
|
|
7762
|
-
/* @__PURE__ */
|
|
7763
|
-
/* @__PURE__ */
|
|
7937
|
+
/* @__PURE__ */ jsxs44("span", { className: "flex min-w-0 flex-col gap-[var(--space-0-5)]", children: [
|
|
7938
|
+
/* @__PURE__ */ jsx50(
|
|
7764
7939
|
"span",
|
|
7765
7940
|
{
|
|
7766
7941
|
id: labelId,
|
|
@@ -7772,7 +7947,7 @@ var Radio = React40.forwardRef(({ className, children, description, id, ...props
|
|
|
7772
7947
|
children
|
|
7773
7948
|
}
|
|
7774
7949
|
),
|
|
7775
|
-
description ? /* @__PURE__ */
|
|
7950
|
+
description ? /* @__PURE__ */ jsx50(
|
|
7776
7951
|
"span",
|
|
7777
7952
|
{
|
|
7778
7953
|
id: descriptionId,
|
|
@@ -7790,20 +7965,20 @@ Radio.displayName = "Radio";
|
|
|
7790
7965
|
|
|
7791
7966
|
// src/components/ui/scroll-area.tsx
|
|
7792
7967
|
import { ScrollArea as ScrollAreaPrimitive } from "radix-ui";
|
|
7793
|
-
import { jsx as
|
|
7968
|
+
import { jsx as jsx51, jsxs as jsxs45 } from "react/jsx-runtime";
|
|
7794
7969
|
function ScrollArea({
|
|
7795
7970
|
className,
|
|
7796
7971
|
children,
|
|
7797
7972
|
...props
|
|
7798
7973
|
}) {
|
|
7799
|
-
return /* @__PURE__ */
|
|
7974
|
+
return /* @__PURE__ */ jsxs45(
|
|
7800
7975
|
ScrollAreaPrimitive.Root,
|
|
7801
7976
|
{
|
|
7802
7977
|
"data-slot": "scroll-area",
|
|
7803
7978
|
className: cn("relative", className),
|
|
7804
7979
|
...props,
|
|
7805
7980
|
children: [
|
|
7806
|
-
/* @__PURE__ */
|
|
7981
|
+
/* @__PURE__ */ jsx51(
|
|
7807
7982
|
ScrollAreaPrimitive.Viewport,
|
|
7808
7983
|
{
|
|
7809
7984
|
"data-slot": "scroll-area-viewport",
|
|
@@ -7811,8 +7986,8 @@ function ScrollArea({
|
|
|
7811
7986
|
children
|
|
7812
7987
|
}
|
|
7813
7988
|
),
|
|
7814
|
-
/* @__PURE__ */
|
|
7815
|
-
/* @__PURE__ */
|
|
7989
|
+
/* @__PURE__ */ jsx51(ScrollBar, {}),
|
|
7990
|
+
/* @__PURE__ */ jsx51(ScrollAreaPrimitive.Corner, {})
|
|
7816
7991
|
]
|
|
7817
7992
|
}
|
|
7818
7993
|
);
|
|
@@ -7822,7 +7997,7 @@ function ScrollBar({
|
|
|
7822
7997
|
orientation = "vertical",
|
|
7823
7998
|
...props
|
|
7824
7999
|
}) {
|
|
7825
|
-
return /* @__PURE__ */
|
|
8000
|
+
return /* @__PURE__ */ jsx51(
|
|
7826
8001
|
ScrollAreaPrimitive.ScrollAreaScrollbar,
|
|
7827
8002
|
{
|
|
7828
8003
|
"data-slot": "scroll-area-scrollbar",
|
|
@@ -7834,7 +8009,7 @@ function ScrollBar({
|
|
|
7834
8009
|
className
|
|
7835
8010
|
),
|
|
7836
8011
|
...props,
|
|
7837
|
-
children: /* @__PURE__ */
|
|
8012
|
+
children: /* @__PURE__ */ jsx51(
|
|
7838
8013
|
ScrollAreaPrimitive.ScrollAreaThumb,
|
|
7839
8014
|
{
|
|
7840
8015
|
"data-slot": "scroll-area-thumb",
|
|
@@ -7846,7 +8021,7 @@ function ScrollBar({
|
|
|
7846
8021
|
}
|
|
7847
8022
|
|
|
7848
8023
|
// src/components/ui/progress.tsx
|
|
7849
|
-
import { jsx as
|
|
8024
|
+
import { jsx as jsx52 } from "react/jsx-runtime";
|
|
7850
8025
|
var progressFillByStatus = {
|
|
7851
8026
|
active: "bg-[var(--accent-solid)]",
|
|
7852
8027
|
success: "bg-[var(--success)]",
|
|
@@ -7867,7 +8042,7 @@ function Progress({
|
|
|
7867
8042
|
const clamped = Math.max(0, Math.min(safeMax, value));
|
|
7868
8043
|
const percent = clamped / safeMax * 100;
|
|
7869
8044
|
const w = typeof width === "number" ? `${width}px` : width;
|
|
7870
|
-
return /* @__PURE__ */
|
|
8045
|
+
return /* @__PURE__ */ jsx52(
|
|
7871
8046
|
"div",
|
|
7872
8047
|
{
|
|
7873
8048
|
role: "progressbar",
|
|
@@ -7881,7 +8056,7 @@ function Progress({
|
|
|
7881
8056
|
),
|
|
7882
8057
|
style: { width: w, height: `${height}px`, ...style },
|
|
7883
8058
|
...props,
|
|
7884
|
-
children: /* @__PURE__ */
|
|
8059
|
+
children: /* @__PURE__ */ jsx52(
|
|
7885
8060
|
"div",
|
|
7886
8061
|
{
|
|
7887
8062
|
className: cn(
|
|
@@ -7899,7 +8074,7 @@ function Progress({
|
|
|
7899
8074
|
import * as React41 from "react";
|
|
7900
8075
|
import { ChevronRight as ChevronRight2 } from "lucide-react";
|
|
7901
8076
|
import { cva as cva29 } from "class-variance-authority";
|
|
7902
|
-
import { jsx as
|
|
8077
|
+
import { jsx as jsx53, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
7903
8078
|
var treeViewVariants = cva29(
|
|
7904
8079
|
"m-0 list-none p-[var(--space-0-5)] text-body-sm text-foreground"
|
|
7905
8080
|
);
|
|
@@ -8069,7 +8244,7 @@ function TreeView({
|
|
|
8069
8244
|
const selected = node.id === selectedId;
|
|
8070
8245
|
const isActive = node.id === activeId;
|
|
8071
8246
|
const itemState = { expanded, selected, depth, hasChildren };
|
|
8072
|
-
return /* @__PURE__ */
|
|
8247
|
+
return /* @__PURE__ */ jsxs46(
|
|
8073
8248
|
"li",
|
|
8074
8249
|
{
|
|
8075
8250
|
ref: (element) => {
|
|
@@ -8094,7 +8269,7 @@ function TreeView({
|
|
|
8094
8269
|
onSelect?.(node.id, node);
|
|
8095
8270
|
},
|
|
8096
8271
|
children: [
|
|
8097
|
-
/* @__PURE__ */
|
|
8272
|
+
/* @__PURE__ */ jsxs46(
|
|
8098
8273
|
"span",
|
|
8099
8274
|
{
|
|
8100
8275
|
"data-slot": "treeitem-row",
|
|
@@ -8103,7 +8278,7 @@ function TreeView({
|
|
|
8103
8278
|
},
|
|
8104
8279
|
className: treeItemRowVariants({ selected }),
|
|
8105
8280
|
children: [
|
|
8106
|
-
hasChildren ? /* @__PURE__ */
|
|
8281
|
+
hasChildren ? /* @__PURE__ */ jsx53(
|
|
8107
8282
|
"span",
|
|
8108
8283
|
{
|
|
8109
8284
|
"data-slot": "treeitem-toggle",
|
|
@@ -8113,7 +8288,7 @@ function TreeView({
|
|
|
8113
8288
|
setExpanded(node.id, !expanded);
|
|
8114
8289
|
},
|
|
8115
8290
|
className: "flex size-[var(--space-2)] shrink-0 items-center justify-center text-text-tertiary",
|
|
8116
|
-
children: /* @__PURE__ */
|
|
8291
|
+
children: /* @__PURE__ */ jsx53(
|
|
8117
8292
|
ChevronRight2,
|
|
8118
8293
|
{
|
|
8119
8294
|
"aria-hidden": "true",
|
|
@@ -8126,7 +8301,7 @@ function TreeView({
|
|
|
8126
8301
|
}
|
|
8127
8302
|
)
|
|
8128
8303
|
}
|
|
8129
|
-
) : /* @__PURE__ */
|
|
8304
|
+
) : /* @__PURE__ */ jsx53(
|
|
8130
8305
|
"span",
|
|
8131
8306
|
{
|
|
8132
8307
|
"data-slot": "treeitem-spacer",
|
|
@@ -8134,18 +8309,18 @@ function TreeView({
|
|
|
8134
8309
|
className: "size-[var(--space-2)] shrink-0"
|
|
8135
8310
|
}
|
|
8136
8311
|
),
|
|
8137
|
-
/* @__PURE__ */
|
|
8312
|
+
/* @__PURE__ */ jsx53("span", { className: "flex min-w-0 flex-1 items-center gap-[var(--space-1)]", children: renderItem(node, itemState) })
|
|
8138
8313
|
]
|
|
8139
8314
|
}
|
|
8140
8315
|
),
|
|
8141
|
-
hasChildren && expanded && children ? /* @__PURE__ */
|
|
8316
|
+
hasChildren && expanded && children ? /* @__PURE__ */ jsx53("ul", { role: "group", "data-slot": "tree-group", className: "m-0 list-none p-0", children: renderLevel(children, depth + 1) }) : null
|
|
8142
8317
|
]
|
|
8143
8318
|
},
|
|
8144
8319
|
node.id
|
|
8145
8320
|
);
|
|
8146
8321
|
});
|
|
8147
8322
|
}
|
|
8148
|
-
return /* @__PURE__ */
|
|
8323
|
+
return /* @__PURE__ */ jsx53(
|
|
8149
8324
|
"ul",
|
|
8150
8325
|
{
|
|
8151
8326
|
role: "tree",
|
|
@@ -8161,9 +8336,9 @@ function TreeView({
|
|
|
8161
8336
|
}
|
|
8162
8337
|
|
|
8163
8338
|
// src/components/branding/olun-logo.tsx
|
|
8164
|
-
import { jsx as
|
|
8339
|
+
import { jsx as jsx54, jsxs as jsxs47 } from "react/jsx-runtime";
|
|
8165
8340
|
function OlunSymbol({ size = 28, className }) {
|
|
8166
|
-
return /* @__PURE__ */
|
|
8341
|
+
return /* @__PURE__ */ jsxs47(
|
|
8167
8342
|
"svg",
|
|
8168
8343
|
{
|
|
8169
8344
|
width: size,
|
|
@@ -8174,7 +8349,7 @@ function OlunSymbol({ size = 28, className }) {
|
|
|
8174
8349
|
className,
|
|
8175
8350
|
"aria-hidden": "true",
|
|
8176
8351
|
children: [
|
|
8177
|
-
/* @__PURE__ */
|
|
8352
|
+
/* @__PURE__ */ jsx54(
|
|
8178
8353
|
"circle",
|
|
8179
8354
|
{
|
|
8180
8355
|
cx: "108",
|
|
@@ -8186,7 +8361,7 @@ function OlunSymbol({ size = 28, className }) {
|
|
|
8186
8361
|
style: { color: "var(--text-primary)" }
|
|
8187
8362
|
}
|
|
8188
8363
|
),
|
|
8189
|
-
/* @__PURE__ */
|
|
8364
|
+
/* @__PURE__ */ jsx54("circle", { cx: "185", cy: "175", r: "22", fill: "var(--accent-solid)" })
|
|
8190
8365
|
]
|
|
8191
8366
|
}
|
|
8192
8367
|
);
|
|
@@ -8197,7 +8372,7 @@ function OlunLogo({
|
|
|
8197
8372
|
showSymbol = true,
|
|
8198
8373
|
className
|
|
8199
8374
|
}) {
|
|
8200
|
-
return /* @__PURE__ */
|
|
8375
|
+
return /* @__PURE__ */ jsxs47(
|
|
8201
8376
|
"div",
|
|
8202
8377
|
{
|
|
8203
8378
|
className,
|
|
@@ -8207,8 +8382,8 @@ function OlunLogo({
|
|
|
8207
8382
|
gap: "var(--space-1-5)"
|
|
8208
8383
|
},
|
|
8209
8384
|
children: [
|
|
8210
|
-
showSymbol && /* @__PURE__ */
|
|
8211
|
-
/* @__PURE__ */
|
|
8385
|
+
showSymbol && /* @__PURE__ */ jsx54(OlunSymbol, { size: symbolSize }),
|
|
8386
|
+
/* @__PURE__ */ jsxs47(
|
|
8212
8387
|
"span",
|
|
8213
8388
|
{
|
|
8214
8389
|
style: {
|
|
@@ -8220,7 +8395,7 @@ function OlunLogo({
|
|
|
8220
8395
|
},
|
|
8221
8396
|
children: [
|
|
8222
8397
|
"OLUN",
|
|
8223
|
-
/* @__PURE__ */
|
|
8398
|
+
/* @__PURE__ */ jsx54("span", { style: { color: "var(--accent-fg)" }, children: "." })
|
|
8224
8399
|
]
|
|
8225
8400
|
}
|
|
8226
8401
|
)
|
|
@@ -8231,11 +8406,11 @@ function OlunLogo({
|
|
|
8231
8406
|
|
|
8232
8407
|
// src/components/branding/theme-toggle.tsx
|
|
8233
8408
|
import { Sun, Moon } from "lucide-react";
|
|
8234
|
-
import { jsx as
|
|
8409
|
+
import { jsx as jsx55 } from "react/jsx-runtime";
|
|
8235
8410
|
function ThemeToggle({ className }) {
|
|
8236
8411
|
const { resolvedTheme, toggleTheme } = useOlunTheme();
|
|
8237
8412
|
const Icon = resolvedTheme === "dark" ? Moon : Sun;
|
|
8238
|
-
return /* @__PURE__ */
|
|
8413
|
+
return /* @__PURE__ */ jsx55(
|
|
8239
8414
|
"button",
|
|
8240
8415
|
{
|
|
8241
8416
|
onClick: () => toggleTheme(),
|
|
@@ -8247,14 +8422,14 @@ function ThemeToggle({ className }) {
|
|
|
8247
8422
|
),
|
|
8248
8423
|
"aria-label": "\uD14C\uB9C8 \uC804\uD658",
|
|
8249
8424
|
title: resolvedTheme === "dark" ? "\uB77C\uC774\uD2B8 \uBAA8\uB4DC\uB85C" : "\uB2E4\uD06C \uBAA8\uB4DC\uB85C",
|
|
8250
|
-
children: /* @__PURE__ */
|
|
8425
|
+
children: /* @__PURE__ */ jsx55(Icon, { className: "size-[18px]", strokeWidth: 1.75 })
|
|
8251
8426
|
}
|
|
8252
8427
|
);
|
|
8253
8428
|
}
|
|
8254
8429
|
|
|
8255
8430
|
// src/components/branding/theme-fab.tsx
|
|
8256
8431
|
import { Sun as Sun2, Moon as Moon2 } from "lucide-react";
|
|
8257
|
-
import { jsx as
|
|
8432
|
+
import { jsx as jsx56 } from "react/jsx-runtime";
|
|
8258
8433
|
function ThemeFab({ variant = "square" } = {}) {
|
|
8259
8434
|
const { mounted, resolvedTheme, toggleTheme } = useOlunTheme();
|
|
8260
8435
|
if (!mounted) {
|
|
@@ -8294,7 +8469,7 @@ function ThemeFab({ variant = "square" } = {}) {
|
|
|
8294
8469
|
WebkitBackdropFilter: "blur(16px)",
|
|
8295
8470
|
zIndex: 9999
|
|
8296
8471
|
};
|
|
8297
|
-
return /* @__PURE__ */
|
|
8472
|
+
return /* @__PURE__ */ jsx56(
|
|
8298
8473
|
"button",
|
|
8299
8474
|
{
|
|
8300
8475
|
onClick: () => toggleTheme(),
|
|
@@ -8319,7 +8494,7 @@ function ThemeFab({ variant = "square" } = {}) {
|
|
|
8319
8494
|
e.currentTarget.style.color = "var(--text-secondary)";
|
|
8320
8495
|
}
|
|
8321
8496
|
},
|
|
8322
|
-
children: /* @__PURE__ */
|
|
8497
|
+
children: /* @__PURE__ */ jsx56(
|
|
8323
8498
|
Icon,
|
|
8324
8499
|
{
|
|
8325
8500
|
size: isCircle ? 22 : 16,
|
|
@@ -8331,7 +8506,7 @@ function ThemeFab({ variant = "square" } = {}) {
|
|
|
8331
8506
|
}
|
|
8332
8507
|
|
|
8333
8508
|
// src/components/logos/organization-logo.tsx
|
|
8334
|
-
import { jsx as
|
|
8509
|
+
import { jsx as jsx57 } from "react/jsx-runtime";
|
|
8335
8510
|
var organizationLogoRegistry = {
|
|
8336
8511
|
jbnu: {
|
|
8337
8512
|
label: "\uC804\uBD81\uB300\uD559\uAD50 \uC5E0\uBE14\uB7FC",
|
|
@@ -8360,7 +8535,7 @@ function OrganizationLogo({
|
|
|
8360
8535
|
}) {
|
|
8361
8536
|
const asset = organizationLogoRegistry[organization];
|
|
8362
8537
|
const isDecorative = ariaHidden === true || ariaHidden === "true";
|
|
8363
|
-
return /* @__PURE__ */
|
|
8538
|
+
return /* @__PURE__ */ jsx57(
|
|
8364
8539
|
"svg",
|
|
8365
8540
|
{
|
|
8366
8541
|
viewBox: asset.viewBox,
|
|
@@ -8378,7 +8553,7 @@ function OrganizationLogo({
|
|
|
8378
8553
|
...style
|
|
8379
8554
|
},
|
|
8380
8555
|
...props,
|
|
8381
|
-
children: asset.paths.map((path) => /* @__PURE__ */
|
|
8556
|
+
children: asset.paths.map((path) => /* @__PURE__ */ jsx57("path", { d: path }, path))
|
|
8382
8557
|
}
|
|
8383
8558
|
);
|
|
8384
8559
|
}
|
|
@@ -8389,6 +8564,7 @@ export {
|
|
|
8389
8564
|
AvatarFallback,
|
|
8390
8565
|
AvatarImage,
|
|
8391
8566
|
Badge,
|
|
8567
|
+
BulkActionBar,
|
|
8392
8568
|
Button,
|
|
8393
8569
|
Card,
|
|
8394
8570
|
CardContent,
|
|
@@ -8402,6 +8578,7 @@ export {
|
|
|
8402
8578
|
CheckboxGroupContext,
|
|
8403
8579
|
Chip,
|
|
8404
8580
|
ConfirmDialog,
|
|
8581
|
+
ContextMenu,
|
|
8405
8582
|
CopyButton,
|
|
8406
8583
|
DataTable,
|
|
8407
8584
|
DetailLayout,
|