@olundot/ui 0.8.2 → 0.9.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 +10 -0
- package/dist/index.d.ts +62 -25
- package/dist/index.js +741 -609
- 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,30 +4713,491 @@ 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
|
);
|
|
4907
4720
|
}
|
|
4908
|
-
function DropdownMenuSubContent({
|
|
4721
|
+
function DropdownMenuSubContent({
|
|
4722
|
+
className,
|
|
4723
|
+
...props
|
|
4724
|
+
}) {
|
|
4725
|
+
return /* @__PURE__ */ jsx25(
|
|
4726
|
+
DropdownMenuPrimitive.SubContent,
|
|
4727
|
+
{
|
|
4728
|
+
"data-slot": "dropdown-menu-sub-content",
|
|
4729
|
+
className: cn(
|
|
4730
|
+
"z-[var(--z-popover)] min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden",
|
|
4731
|
+
"rounded-sm border border-[var(--border)] bg-canvas p-[var(--space-0-5)] text-text-primary shadow-elevation-2",
|
|
4732
|
+
"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2",
|
|
4733
|
+
"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
4734
|
+
"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
|
|
4735
|
+
"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
|
|
4736
|
+
"motion-reduce:transition-none",
|
|
4737
|
+
className
|
|
4738
|
+
),
|
|
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({
|
|
4909
5182
|
className,
|
|
5183
|
+
children,
|
|
5184
|
+
name,
|
|
4910
5185
|
...props
|
|
4911
5186
|
}) {
|
|
4912
|
-
|
|
4913
|
-
|
|
5187
|
+
const fallbackText = children ?? (name ? getAvatarFallbackText(name) : null);
|
|
5188
|
+
return /* @__PURE__ */ jsx31(
|
|
5189
|
+
AvatarPrimitive.Fallback,
|
|
4914
5190
|
{
|
|
4915
|
-
"data-slot": "
|
|
5191
|
+
"data-slot": "avatar-fallback",
|
|
4916
5192
|
className: cn(
|
|
4917
|
-
"
|
|
4918
|
-
"
|
|
4919
|
-
"
|
|
4920
|
-
"
|
|
4921
|
-
"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
|
|
4922
|
-
"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
|
|
4923
|
-
"motion-reduce:transition-none",
|
|
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",
|
|
4924
5197
|
className
|
|
4925
5198
|
),
|
|
4926
|
-
...props
|
|
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,10 +6113,10 @@ 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
6122
|
"rounded-[var(--radius-md)] border border-[var(--border-subtle)]",
|
|
@@ -5879,7 +6153,7 @@ function emptyStateVariants({ size, tone = "neutral", surface, className } = {})
|
|
|
5879
6153
|
className
|
|
5880
6154
|
);
|
|
5881
6155
|
}
|
|
5882
|
-
var emptyStateIconVariants =
|
|
6156
|
+
var emptyStateIconVariants = cva18(
|
|
5883
6157
|
[
|
|
5884
6158
|
"inline-flex items-center justify-center rounded-[var(--radius-full)]",
|
|
5885
6159
|
"border border-[var(--border-subtle)] bg-[var(--bg-raised)] text-text-tertiary"
|
|
@@ -5897,12 +6171,12 @@ var emptyStateIconVariants = cva17(
|
|
|
5897
6171
|
}
|
|
5898
6172
|
}
|
|
5899
6173
|
);
|
|
5900
|
-
var
|
|
6174
|
+
var iconSize3 = {
|
|
5901
6175
|
sm: 18,
|
|
5902
6176
|
md: 20,
|
|
5903
6177
|
lg: 24
|
|
5904
6178
|
};
|
|
5905
|
-
var EmptyState =
|
|
6179
|
+
var EmptyState = React31.forwardRef(
|
|
5906
6180
|
({
|
|
5907
6181
|
className,
|
|
5908
6182
|
size = "md",
|
|
@@ -5916,7 +6190,7 @@ var EmptyState = React30.forwardRef(
|
|
|
5916
6190
|
...props
|
|
5917
6191
|
}, ref) => {
|
|
5918
6192
|
const resolvedSize = size ?? "md";
|
|
5919
|
-
return /* @__PURE__ */
|
|
6193
|
+
return /* @__PURE__ */ jsxs36(
|
|
5920
6194
|
"div",
|
|
5921
6195
|
{
|
|
5922
6196
|
ref,
|
|
@@ -5925,17 +6199,17 @@ var EmptyState = React30.forwardRef(
|
|
|
5925
6199
|
className: cn(emptyStateVariants({ size, tone, surface, className })),
|
|
5926
6200
|
...props,
|
|
5927
6201
|
children: [
|
|
5928
|
-
Icon ? /* @__PURE__ */
|
|
6202
|
+
Icon ? /* @__PURE__ */ jsx40(
|
|
5929
6203
|
"span",
|
|
5930
6204
|
{
|
|
5931
6205
|
"aria-hidden": "true",
|
|
5932
6206
|
"data-slot": "empty-state-icon",
|
|
5933
6207
|
className: emptyStateIconVariants({ size: resolvedSize }),
|
|
5934
|
-
children: /* @__PURE__ */
|
|
6208
|
+
children: /* @__PURE__ */ jsx40(Icon, { size: iconSize3[resolvedSize], strokeWidth: 1.75 })
|
|
5935
6209
|
}
|
|
5936
6210
|
) : null,
|
|
5937
|
-
/* @__PURE__ */
|
|
5938
|
-
/* @__PURE__ */
|
|
6211
|
+
/* @__PURE__ */ jsxs36("div", { className: "flex max-w-[420px] flex-col items-center gap-[var(--space-1)]", children: [
|
|
6212
|
+
/* @__PURE__ */ jsx40(
|
|
5939
6213
|
"h2",
|
|
5940
6214
|
{
|
|
5941
6215
|
"data-slot": "empty-state-title",
|
|
@@ -5943,7 +6217,7 @@ var EmptyState = React30.forwardRef(
|
|
|
5943
6217
|
children: title
|
|
5944
6218
|
}
|
|
5945
6219
|
),
|
|
5946
|
-
description ? /* @__PURE__ */
|
|
6220
|
+
description ? /* @__PURE__ */ jsx40(
|
|
5947
6221
|
"p",
|
|
5948
6222
|
{
|
|
5949
6223
|
"data-slot": "empty-state-description",
|
|
@@ -5951,7 +6225,7 @@ var EmptyState = React30.forwardRef(
|
|
|
5951
6225
|
children: description
|
|
5952
6226
|
}
|
|
5953
6227
|
) : null,
|
|
5954
|
-
hint ? /* @__PURE__ */
|
|
6228
|
+
hint ? /* @__PURE__ */ jsx40(
|
|
5955
6229
|
"p",
|
|
5956
6230
|
{
|
|
5957
6231
|
"data-slot": "empty-state-hint",
|
|
@@ -5960,7 +6234,7 @@ var EmptyState = React30.forwardRef(
|
|
|
5960
6234
|
}
|
|
5961
6235
|
) : null
|
|
5962
6236
|
] }),
|
|
5963
|
-
action ? /* @__PURE__ */
|
|
6237
|
+
action ? /* @__PURE__ */ jsx40("div", { "data-slot": "empty-state-action", className: "mt-[var(--space-1)]", children: action }) : null
|
|
5964
6238
|
]
|
|
5965
6239
|
}
|
|
5966
6240
|
);
|
|
@@ -5969,11 +6243,11 @@ var EmptyState = React30.forwardRef(
|
|
|
5969
6243
|
EmptyState.displayName = "EmptyState";
|
|
5970
6244
|
|
|
5971
6245
|
// src/components/ui/error-state.tsx
|
|
5972
|
-
import * as
|
|
6246
|
+
import * as React32 from "react";
|
|
5973
6247
|
import { AlertTriangle as AlertTriangle2 } from "lucide-react";
|
|
5974
|
-
import { cva as
|
|
5975
|
-
import { jsx as
|
|
5976
|
-
var errorStateVariants =
|
|
6248
|
+
import { cva as cva19 } from "class-variance-authority";
|
|
6249
|
+
import { jsx as jsx41, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
6250
|
+
var errorStateVariants = cva19(
|
|
5977
6251
|
[
|
|
5978
6252
|
"flex flex-col items-center justify-center text-center",
|
|
5979
6253
|
"rounded-[var(--radius-md)] border border-[var(--border-subtle)]",
|
|
@@ -5994,7 +6268,7 @@ var errorStateVariants = cva18(
|
|
|
5994
6268
|
}
|
|
5995
6269
|
}
|
|
5996
6270
|
);
|
|
5997
|
-
var ErrorState =
|
|
6271
|
+
var ErrorState = React32.forwardRef(
|
|
5998
6272
|
({
|
|
5999
6273
|
className,
|
|
6000
6274
|
size = "md",
|
|
@@ -6005,7 +6279,7 @@ var ErrorState = React31.forwardRef(
|
|
|
6005
6279
|
onRetry,
|
|
6006
6280
|
retryLabel = "\uB2E4\uC2DC \uC2DC\uB3C4",
|
|
6007
6281
|
...props
|
|
6008
|
-
}, ref) => /* @__PURE__ */
|
|
6282
|
+
}, ref) => /* @__PURE__ */ jsxs37(
|
|
6009
6283
|
"div",
|
|
6010
6284
|
{
|
|
6011
6285
|
ref,
|
|
@@ -6014,17 +6288,17 @@ var ErrorState = React31.forwardRef(
|
|
|
6014
6288
|
className: cn(errorStateVariants({ size, surface, className })),
|
|
6015
6289
|
...props,
|
|
6016
6290
|
children: [
|
|
6017
|
-
/* @__PURE__ */
|
|
6291
|
+
/* @__PURE__ */ jsx41(
|
|
6018
6292
|
"span",
|
|
6019
6293
|
{
|
|
6020
6294
|
"aria-hidden": "true",
|
|
6021
6295
|
"data-slot": "error-state-icon",
|
|
6022
6296
|
className: "inline-flex size-[48px] items-center justify-center rounded-[var(--radius-full)] bg-[var(--error-bg)] text-[var(--error)]",
|
|
6023
|
-
children: /* @__PURE__ */
|
|
6297
|
+
children: /* @__PURE__ */ jsx41(AlertTriangle2, { size: 24, strokeWidth: 1.75 })
|
|
6024
6298
|
}
|
|
6025
6299
|
),
|
|
6026
|
-
/* @__PURE__ */
|
|
6027
|
-
/* @__PURE__ */
|
|
6300
|
+
/* @__PURE__ */ jsxs37("div", { className: "flex max-w-[420px] flex-col items-center gap-[var(--space-1)]", children: [
|
|
6301
|
+
/* @__PURE__ */ jsx41(
|
|
6028
6302
|
"h2",
|
|
6029
6303
|
{
|
|
6030
6304
|
"data-slot": "error-state-title",
|
|
@@ -6032,7 +6306,7 @@ var ErrorState = React31.forwardRef(
|
|
|
6032
6306
|
children: title
|
|
6033
6307
|
}
|
|
6034
6308
|
),
|
|
6035
|
-
/* @__PURE__ */
|
|
6309
|
+
/* @__PURE__ */ jsx41(
|
|
6036
6310
|
"p",
|
|
6037
6311
|
{
|
|
6038
6312
|
"data-slot": "error-state-message",
|
|
@@ -6040,7 +6314,7 @@ var ErrorState = React31.forwardRef(
|
|
|
6040
6314
|
children: message
|
|
6041
6315
|
}
|
|
6042
6316
|
),
|
|
6043
|
-
errorCode ? /* @__PURE__ */
|
|
6317
|
+
errorCode ? /* @__PURE__ */ jsx41(
|
|
6044
6318
|
"p",
|
|
6045
6319
|
{
|
|
6046
6320
|
"data-slot": "error-state-code",
|
|
@@ -6049,7 +6323,7 @@ var ErrorState = React31.forwardRef(
|
|
|
6049
6323
|
}
|
|
6050
6324
|
) : null
|
|
6051
6325
|
] }),
|
|
6052
|
-
onRetry ? /* @__PURE__ */
|
|
6326
|
+
onRetry ? /* @__PURE__ */ jsx41(Button, { size: "sm", variant: "outline", onClick: onRetry, children: retryLabel }) : null
|
|
6053
6327
|
]
|
|
6054
6328
|
}
|
|
6055
6329
|
)
|
|
@@ -6057,10 +6331,10 @@ var ErrorState = React31.forwardRef(
|
|
|
6057
6331
|
ErrorState.displayName = "ErrorState";
|
|
6058
6332
|
|
|
6059
6333
|
// src/components/ui/skeleton.tsx
|
|
6060
|
-
import * as
|
|
6061
|
-
import { cva as
|
|
6062
|
-
import { jsx as
|
|
6063
|
-
var skeletonVariants =
|
|
6334
|
+
import * as React33 from "react";
|
|
6335
|
+
import { cva as cva20 } from "class-variance-authority";
|
|
6336
|
+
import { jsx as jsx42 } from "react/jsx-runtime";
|
|
6337
|
+
var skeletonVariants = cva20(
|
|
6064
6338
|
[
|
|
6065
6339
|
"animate-pulse rounded-[var(--radius-sm)] bg-[var(--bg-raised)]",
|
|
6066
6340
|
"motion-reduce:animate-none motion-reduce:opacity-80"
|
|
@@ -6078,7 +6352,7 @@ var skeletonVariants = cva19(
|
|
|
6078
6352
|
}
|
|
6079
6353
|
}
|
|
6080
6354
|
);
|
|
6081
|
-
var spinnerVariants =
|
|
6355
|
+
var spinnerVariants = cva20(
|
|
6082
6356
|
[
|
|
6083
6357
|
"inline-block shrink-0 animate-spin rounded-[var(--radius-full)] border-2",
|
|
6084
6358
|
"border-[var(--border-subtle)] border-t-[var(--accent-solid)]",
|
|
@@ -6101,8 +6375,8 @@ var spinnerVariants = cva19(
|
|
|
6101
6375
|
}
|
|
6102
6376
|
}
|
|
6103
6377
|
);
|
|
6104
|
-
var Skeleton =
|
|
6105
|
-
({ className, shape, style, ...props }, ref) => /* @__PURE__ */
|
|
6378
|
+
var Skeleton = React33.forwardRef(
|
|
6379
|
+
({ className, shape, style, ...props }, ref) => /* @__PURE__ */ jsx42(
|
|
6106
6380
|
"div",
|
|
6107
6381
|
{
|
|
6108
6382
|
ref,
|
|
@@ -6115,15 +6389,15 @@ var Skeleton = React32.forwardRef(
|
|
|
6115
6389
|
);
|
|
6116
6390
|
Skeleton.displayName = "Skeleton";
|
|
6117
6391
|
var defaultTextWidths = ["92%", "84%", "68%", "76%"];
|
|
6118
|
-
var SkeletonText =
|
|
6119
|
-
({ className, lines = 3, widths = defaultTextWidths, ...props }, ref) => /* @__PURE__ */
|
|
6392
|
+
var SkeletonText = React33.forwardRef(
|
|
6393
|
+
({ className, lines = 3, widths = defaultTextWidths, ...props }, ref) => /* @__PURE__ */ jsx42(
|
|
6120
6394
|
"div",
|
|
6121
6395
|
{
|
|
6122
6396
|
ref,
|
|
6123
6397
|
"data-slot": "skeleton-text",
|
|
6124
6398
|
className: cn("flex flex-col gap-[var(--space-1)]", className),
|
|
6125
6399
|
...props,
|
|
6126
|
-
children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */
|
|
6400
|
+
children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */ jsx42(
|
|
6127
6401
|
Skeleton,
|
|
6128
6402
|
{
|
|
6129
6403
|
shape: "text",
|
|
@@ -6135,7 +6409,7 @@ var SkeletonText = React32.forwardRef(
|
|
|
6135
6409
|
)
|
|
6136
6410
|
);
|
|
6137
6411
|
SkeletonText.displayName = "SkeletonText";
|
|
6138
|
-
var SkeletonRow =
|
|
6412
|
+
var SkeletonRow = React33.forwardRef(
|
|
6139
6413
|
({
|
|
6140
6414
|
className,
|
|
6141
6415
|
columns,
|
|
@@ -6146,7 +6420,7 @@ var SkeletonRow = React32.forwardRef(
|
|
|
6146
6420
|
}, ref) => {
|
|
6147
6421
|
const rowCount = Math.max(5, count);
|
|
6148
6422
|
const gridTemplateColumns = columns.map((column) => column.width ?? "1fr").join(" ");
|
|
6149
|
-
return /* @__PURE__ */
|
|
6423
|
+
return /* @__PURE__ */ jsx42(
|
|
6150
6424
|
"div",
|
|
6151
6425
|
{
|
|
6152
6426
|
ref,
|
|
@@ -6160,7 +6434,7 @@ var SkeletonRow = React32.forwardRef(
|
|
|
6160
6434
|
className
|
|
6161
6435
|
),
|
|
6162
6436
|
...props,
|
|
6163
|
-
children: Array.from({ length: rowCount }, (_, rowIndex) => /* @__PURE__ */
|
|
6437
|
+
children: Array.from({ length: rowCount }, (_, rowIndex) => /* @__PURE__ */ jsx42(
|
|
6164
6438
|
"div",
|
|
6165
6439
|
{
|
|
6166
6440
|
"data-slot": "skeleton-row",
|
|
@@ -6168,11 +6442,11 @@ var SkeletonRow = React32.forwardRef(
|
|
|
6168
6442
|
"grid min-h-[48px] items-center border-t border-[var(--border-subtle)] first:border-t-0"
|
|
6169
6443
|
),
|
|
6170
6444
|
style: { gridTemplateColumns },
|
|
6171
|
-
children: columns.map((column, columnIndex) => /* @__PURE__ */
|
|
6445
|
+
children: columns.map((column, columnIndex) => /* @__PURE__ */ jsx42(
|
|
6172
6446
|
"div",
|
|
6173
6447
|
{
|
|
6174
6448
|
className: "px-[var(--space-2)] py-[var(--space-1)]",
|
|
6175
|
-
children: /* @__PURE__ */
|
|
6449
|
+
children: /* @__PURE__ */ jsx42(
|
|
6176
6450
|
Skeleton,
|
|
6177
6451
|
{
|
|
6178
6452
|
shape: "text",
|
|
@@ -6192,8 +6466,8 @@ var SkeletonRow = React32.forwardRef(
|
|
|
6192
6466
|
}
|
|
6193
6467
|
);
|
|
6194
6468
|
SkeletonRow.displayName = "SkeletonRow";
|
|
6195
|
-
var Spinner =
|
|
6196
|
-
({ className, size, label = "\uB85C\uB529 \uC911", ...props }, ref) => /* @__PURE__ */
|
|
6469
|
+
var Spinner = React33.forwardRef(
|
|
6470
|
+
({ className, size, label = "\uB85C\uB529 \uC911", ...props }, ref) => /* @__PURE__ */ jsx42(
|
|
6197
6471
|
"span",
|
|
6198
6472
|
{
|
|
6199
6473
|
ref,
|
|
@@ -6207,155 +6481,11 @@ var Spinner = React32.forwardRef(
|
|
|
6207
6481
|
);
|
|
6208
6482
|
Spinner.displayName = "Spinner";
|
|
6209
6483
|
|
|
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
6484
|
// src/components/ui/pagination.tsx
|
|
6355
6485
|
import * as React34 from "react";
|
|
6356
6486
|
import { ChevronsLeft, ChevronLeft, ChevronRight, ChevronsRight } from "lucide-react";
|
|
6357
6487
|
import { cva as cva21 } from "class-variance-authority";
|
|
6358
|
-
import { jsx as
|
|
6488
|
+
import { jsx as jsx43, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
6359
6489
|
var paginationVariants = cva21(
|
|
6360
6490
|
[
|
|
6361
6491
|
"flex w-full flex-col gap-[var(--space-1-5)]",
|
|
@@ -6430,7 +6560,7 @@ function NavigationButton({
|
|
|
6430
6560
|
icon: Icon,
|
|
6431
6561
|
onPageChange
|
|
6432
6562
|
}) {
|
|
6433
|
-
return /* @__PURE__ */
|
|
6563
|
+
return /* @__PURE__ */ jsx43(
|
|
6434
6564
|
"button",
|
|
6435
6565
|
{
|
|
6436
6566
|
"aria-label": label,
|
|
@@ -6438,7 +6568,7 @@ function NavigationButton({
|
|
|
6438
6568
|
className: paginationControlVariants({ size }),
|
|
6439
6569
|
type: "button",
|
|
6440
6570
|
onClick: () => onPageChange?.(page),
|
|
6441
|
-
children: /* @__PURE__ */
|
|
6571
|
+
children: /* @__PURE__ */ jsx43(Icon, { "aria-hidden": "true", "data-slot": "pagination-icon" })
|
|
6442
6572
|
}
|
|
6443
6573
|
);
|
|
6444
6574
|
}
|
|
@@ -6470,7 +6600,7 @@ var Pagination = React34.forwardRef(
|
|
|
6470
6600
|
value: String(option),
|
|
6471
6601
|
label: option
|
|
6472
6602
|
}));
|
|
6473
|
-
return /* @__PURE__ */
|
|
6603
|
+
return /* @__PURE__ */ jsxs38(
|
|
6474
6604
|
"nav",
|
|
6475
6605
|
{
|
|
6476
6606
|
ref,
|
|
@@ -6480,16 +6610,16 @@ var Pagination = React34.forwardRef(
|
|
|
6480
6610
|
className: cn(paginationVariants({ size: resolvedSize, className })),
|
|
6481
6611
|
...props,
|
|
6482
6612
|
children: [
|
|
6483
|
-
/* @__PURE__ */
|
|
6484
|
-
/* @__PURE__ */
|
|
6485
|
-
/* @__PURE__ */
|
|
6613
|
+
/* @__PURE__ */ jsxs38("div", { className: "flex flex-wrap items-center gap-[var(--space-1-5)]", children: [
|
|
6614
|
+
/* @__PURE__ */ jsx43("span", { "data-slot": "pagination-total", className: "font-medium text-text-secondary", children: totalLabel(total) }),
|
|
6615
|
+
/* @__PURE__ */ jsxs38(
|
|
6486
6616
|
"div",
|
|
6487
6617
|
{
|
|
6488
6618
|
"data-slot": "pagination-size",
|
|
6489
6619
|
className: "inline-flex items-center gap-[var(--space-1)] text-xs text-text-tertiary",
|
|
6490
6620
|
children: [
|
|
6491
|
-
/* @__PURE__ */
|
|
6492
|
-
/* @__PURE__ */
|
|
6621
|
+
/* @__PURE__ */ jsx43("span", { children: pageSizeLabel }),
|
|
6622
|
+
/* @__PURE__ */ jsx43(
|
|
6493
6623
|
Select,
|
|
6494
6624
|
{
|
|
6495
6625
|
"aria-label": pageSizeLabel,
|
|
@@ -6505,13 +6635,13 @@ var Pagination = React34.forwardRef(
|
|
|
6505
6635
|
}
|
|
6506
6636
|
)
|
|
6507
6637
|
] }),
|
|
6508
|
-
/* @__PURE__ */
|
|
6638
|
+
/* @__PURE__ */ jsxs38(
|
|
6509
6639
|
"div",
|
|
6510
6640
|
{
|
|
6511
6641
|
"data-slot": "pagination-list",
|
|
6512
6642
|
className: "flex items-center justify-center gap-[var(--space-0-5)]",
|
|
6513
6643
|
children: [
|
|
6514
|
-
/* @__PURE__ */
|
|
6644
|
+
/* @__PURE__ */ jsx43(
|
|
6515
6645
|
NavigationButton,
|
|
6516
6646
|
{
|
|
6517
6647
|
label: "\uCCAB \uD398\uC774\uC9C0",
|
|
@@ -6522,7 +6652,7 @@ var Pagination = React34.forwardRef(
|
|
|
6522
6652
|
onPageChange
|
|
6523
6653
|
}
|
|
6524
6654
|
),
|
|
6525
|
-
/* @__PURE__ */
|
|
6655
|
+
/* @__PURE__ */ jsx43(
|
|
6526
6656
|
NavigationButton,
|
|
6527
6657
|
{
|
|
6528
6658
|
label: "\uC774\uC804 \uD398\uC774\uC9C0",
|
|
@@ -6534,7 +6664,7 @@ var Pagination = React34.forwardRef(
|
|
|
6534
6664
|
}
|
|
6535
6665
|
),
|
|
6536
6666
|
items.map(
|
|
6537
|
-
(item, index) => item === "ellipsis" ? /* @__PURE__ */
|
|
6667
|
+
(item, index) => item === "ellipsis" ? /* @__PURE__ */ jsx43(
|
|
6538
6668
|
"span",
|
|
6539
6669
|
{
|
|
6540
6670
|
"data-slot": "pagination-ellipsis",
|
|
@@ -6546,7 +6676,7 @@ var Pagination = React34.forwardRef(
|
|
|
6546
6676
|
children: "..."
|
|
6547
6677
|
},
|
|
6548
6678
|
`ellipsis-${index}`
|
|
6549
|
-
) : /* @__PURE__ */
|
|
6679
|
+
) : /* @__PURE__ */ jsx43(
|
|
6550
6680
|
"button",
|
|
6551
6681
|
{
|
|
6552
6682
|
"aria-label": `${item} \uD398\uC774\uC9C0`,
|
|
@@ -6560,7 +6690,7 @@ var Pagination = React34.forwardRef(
|
|
|
6560
6690
|
item
|
|
6561
6691
|
)
|
|
6562
6692
|
),
|
|
6563
|
-
/* @__PURE__ */
|
|
6693
|
+
/* @__PURE__ */ jsx43(
|
|
6564
6694
|
NavigationButton,
|
|
6565
6695
|
{
|
|
6566
6696
|
label: "\uB2E4\uC74C \uD398\uC774\uC9C0",
|
|
@@ -6571,7 +6701,7 @@ var Pagination = React34.forwardRef(
|
|
|
6571
6701
|
onPageChange
|
|
6572
6702
|
}
|
|
6573
6703
|
),
|
|
6574
|
-
/* @__PURE__ */
|
|
6704
|
+
/* @__PURE__ */ jsx43(
|
|
6575
6705
|
NavigationButton,
|
|
6576
6706
|
{
|
|
6577
6707
|
label: "\uB9C8\uC9C0\uB9C9 \uD398\uC774\uC9C0",
|
|
@@ -6594,7 +6724,7 @@ Pagination.displayName = "Pagination";
|
|
|
6594
6724
|
|
|
6595
6725
|
// src/components/ui/mode-toggle.tsx
|
|
6596
6726
|
import { cva as cva22 } from "class-variance-authority";
|
|
6597
|
-
import { jsx as
|
|
6727
|
+
import { jsx as jsx44, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
6598
6728
|
var modeToggleVariants = cva22(
|
|
6599
6729
|
[
|
|
6600
6730
|
"inline-flex items-center rounded-[var(--radius-sm)] border border-[var(--border-subtle)]",
|
|
@@ -6624,7 +6754,7 @@ function ModeToggle({
|
|
|
6624
6754
|
onChange,
|
|
6625
6755
|
...props
|
|
6626
6756
|
}) {
|
|
6627
|
-
return /* @__PURE__ */
|
|
6757
|
+
return /* @__PURE__ */ jsx44(
|
|
6628
6758
|
"div",
|
|
6629
6759
|
{
|
|
6630
6760
|
role: "group",
|
|
@@ -6634,7 +6764,7 @@ function ModeToggle({
|
|
|
6634
6764
|
children: options.map((option) => {
|
|
6635
6765
|
const Icon = option.icon;
|
|
6636
6766
|
const isActive = option.value === value;
|
|
6637
|
-
return /* @__PURE__ */
|
|
6767
|
+
return /* @__PURE__ */ jsxs39(
|
|
6638
6768
|
"button",
|
|
6639
6769
|
{
|
|
6640
6770
|
type: "button",
|
|
@@ -6650,8 +6780,8 @@ function ModeToggle({
|
|
|
6650
6780
|
}
|
|
6651
6781
|
},
|
|
6652
6782
|
children: [
|
|
6653
|
-
Icon ? /* @__PURE__ */
|
|
6654
|
-
/* @__PURE__ */
|
|
6783
|
+
Icon ? /* @__PURE__ */ jsx44(Icon, { "aria-hidden": "true", "data-slot": "mode-toggle-icon" }) : null,
|
|
6784
|
+
/* @__PURE__ */ jsx44("span", { children: option.label })
|
|
6655
6785
|
]
|
|
6656
6786
|
},
|
|
6657
6787
|
option.value
|
|
@@ -6664,7 +6794,7 @@ function ModeToggle({
|
|
|
6664
6794
|
// src/components/ui/action-footer.tsx
|
|
6665
6795
|
import * as React35 from "react";
|
|
6666
6796
|
import { cva as cva23 } from "class-variance-authority";
|
|
6667
|
-
import { jsx as
|
|
6797
|
+
import { jsx as jsx45, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
6668
6798
|
var actionFooterVariants = cva23(
|
|
6669
6799
|
[
|
|
6670
6800
|
"flex flex-wrap items-center gap-[var(--space-2)] border-t border-[var(--border-subtle)]",
|
|
@@ -6735,7 +6865,7 @@ function getStatusLabel(status) {
|
|
|
6735
6865
|
}
|
|
6736
6866
|
}
|
|
6737
6867
|
function renderAction(action) {
|
|
6738
|
-
return /* @__PURE__ */
|
|
6868
|
+
return /* @__PURE__ */ jsx45(
|
|
6739
6869
|
Button,
|
|
6740
6870
|
{
|
|
6741
6871
|
variant: action.variant,
|
|
@@ -6766,7 +6896,7 @@ var ActionFooter = React35.forwardRef(
|
|
|
6766
6896
|
const mainActions = sortMainActions(
|
|
6767
6897
|
visibleActions.filter((action) => !destructiveVariants.has(action.variant ?? "default"))
|
|
6768
6898
|
);
|
|
6769
|
-
return /* @__PURE__ */
|
|
6899
|
+
return /* @__PURE__ */ jsxs40(
|
|
6770
6900
|
"div",
|
|
6771
6901
|
{
|
|
6772
6902
|
ref,
|
|
@@ -6775,7 +6905,7 @@ var ActionFooter = React35.forwardRef(
|
|
|
6775
6905
|
className: cn(actionFooterVariants({ position, surface, className })),
|
|
6776
6906
|
...props,
|
|
6777
6907
|
children: [
|
|
6778
|
-
destructiveActions.length > 0 ? /* @__PURE__ */
|
|
6908
|
+
destructiveActions.length > 0 ? /* @__PURE__ */ jsx45(
|
|
6779
6909
|
"div",
|
|
6780
6910
|
{
|
|
6781
6911
|
"data-slot": "action-footer-destructive-actions",
|
|
@@ -6783,7 +6913,7 @@ var ActionFooter = React35.forwardRef(
|
|
|
6783
6913
|
children: destructiveActions.map(renderAction)
|
|
6784
6914
|
}
|
|
6785
6915
|
) : null,
|
|
6786
|
-
status ? /* @__PURE__ */
|
|
6916
|
+
status ? /* @__PURE__ */ jsxs40(
|
|
6787
6917
|
"div",
|
|
6788
6918
|
{
|
|
6789
6919
|
"data-slot": "action-footer-status",
|
|
@@ -6791,7 +6921,7 @@ var ActionFooter = React35.forwardRef(
|
|
|
6791
6921
|
"aria-live": "polite",
|
|
6792
6922
|
className: cn(actionFooterStatusVariants({ kind: status.kind })),
|
|
6793
6923
|
children: [
|
|
6794
|
-
/* @__PURE__ */
|
|
6924
|
+
/* @__PURE__ */ jsx45(
|
|
6795
6925
|
"span",
|
|
6796
6926
|
{
|
|
6797
6927
|
"aria-hidden": "true",
|
|
@@ -6799,11 +6929,11 @@ var ActionFooter = React35.forwardRef(
|
|
|
6799
6929
|
className: "size-[6px] shrink-0 rounded-[var(--radius-full)]"
|
|
6800
6930
|
}
|
|
6801
6931
|
),
|
|
6802
|
-
/* @__PURE__ */
|
|
6932
|
+
/* @__PURE__ */ jsx45("span", { className: "truncate", children: getStatusLabel(status) })
|
|
6803
6933
|
]
|
|
6804
6934
|
}
|
|
6805
6935
|
) : null,
|
|
6806
|
-
/* @__PURE__ */
|
|
6936
|
+
/* @__PURE__ */ jsx45(
|
|
6807
6937
|
"div",
|
|
6808
6938
|
{
|
|
6809
6939
|
"data-slot": "action-footer-main-actions",
|
|
@@ -6820,9 +6950,9 @@ ActionFooter.displayName = "ActionFooter";
|
|
|
6820
6950
|
|
|
6821
6951
|
// src/components/ui/toast.tsx
|
|
6822
6952
|
import * as React36 from "react";
|
|
6823
|
-
import { AlertCircle as AlertCircle5, AlertTriangle as AlertTriangle3, CheckCircle2 as CheckCircle25, Info as Info2, X as
|
|
6953
|
+
import { AlertCircle as AlertCircle5, AlertTriangle as AlertTriangle3, CheckCircle2 as CheckCircle25, Info as Info2, X as X5 } from "lucide-react";
|
|
6824
6954
|
import { cva as cva24 } from "class-variance-authority";
|
|
6825
|
-
import { jsx as
|
|
6955
|
+
import { jsx as jsx46, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
6826
6956
|
var toastVariants = cva24(
|
|
6827
6957
|
[
|
|
6828
6958
|
"grid min-w-[280px] max-w-[420px] grid-cols-[auto_1fr_auto] items-center",
|
|
@@ -6921,7 +7051,7 @@ var ToastRoot = React36.forwardRef(
|
|
|
6921
7051
|
}, ref) => {
|
|
6922
7052
|
const Icon = toastIcons[variant];
|
|
6923
7053
|
const hasIcon = Icon !== null;
|
|
6924
|
-
return /* @__PURE__ */
|
|
7054
|
+
return /* @__PURE__ */ jsxs41(
|
|
6925
7055
|
"div",
|
|
6926
7056
|
{
|
|
6927
7057
|
ref,
|
|
@@ -6937,7 +7067,7 @@ var ToastRoot = React36.forwardRef(
|
|
|
6937
7067
|
),
|
|
6938
7068
|
...props,
|
|
6939
7069
|
children: [
|
|
6940
|
-
Icon ? /* @__PURE__ */
|
|
7070
|
+
Icon ? /* @__PURE__ */ jsx46(
|
|
6941
7071
|
Icon,
|
|
6942
7072
|
{
|
|
6943
7073
|
"aria-hidden": "true",
|
|
@@ -6947,9 +7077,9 @@ var ToastRoot = React36.forwardRef(
|
|
|
6947
7077
|
className: "shrink-0"
|
|
6948
7078
|
}
|
|
6949
7079
|
) : null,
|
|
6950
|
-
/* @__PURE__ */
|
|
6951
|
-
/* @__PURE__ */
|
|
6952
|
-
action ? /* @__PURE__ */
|
|
7080
|
+
/* @__PURE__ */ jsxs41("div", { "data-slot": "toast-body", className: "min-w-0", children: [
|
|
7081
|
+
/* @__PURE__ */ jsx46("div", { "data-slot": "toast-message", className: "font-normal", children: message }),
|
|
7082
|
+
action ? /* @__PURE__ */ jsx46(
|
|
6953
7083
|
Button,
|
|
6954
7084
|
{
|
|
6955
7085
|
"data-slot": "toast-action",
|
|
@@ -6961,7 +7091,7 @@ var ToastRoot = React36.forwardRef(
|
|
|
6961
7091
|
}
|
|
6962
7092
|
) : null
|
|
6963
7093
|
] }),
|
|
6964
|
-
/* @__PURE__ */
|
|
7094
|
+
/* @__PURE__ */ jsx46(
|
|
6965
7095
|
"button",
|
|
6966
7096
|
{
|
|
6967
7097
|
type: "button",
|
|
@@ -6973,7 +7103,7 @@ var ToastRoot = React36.forwardRef(
|
|
|
6973
7103
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--focus-ring)]"
|
|
6974
7104
|
),
|
|
6975
7105
|
onClick: onClose,
|
|
6976
|
-
children: /* @__PURE__ */
|
|
7106
|
+
children: /* @__PURE__ */ jsx46(X5, { "aria-hidden": "true", size: 16, strokeWidth: 1.75 })
|
|
6977
7107
|
}
|
|
6978
7108
|
)
|
|
6979
7109
|
]
|
|
@@ -6982,7 +7112,7 @@ var ToastRoot = React36.forwardRef(
|
|
|
6982
7112
|
}
|
|
6983
7113
|
);
|
|
6984
7114
|
ToastRoot.displayName = "ToastRoot";
|
|
6985
|
-
var ToastViewport = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
7115
|
+
var ToastViewport = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx46(
|
|
6986
7116
|
"ol",
|
|
6987
7117
|
{
|
|
6988
7118
|
ref,
|
|
@@ -7000,9 +7130,9 @@ function ToastProvider({ children, maxToasts = 3, className, ...props }) {
|
|
|
7000
7130
|
}),
|
|
7001
7131
|
[maxToasts]
|
|
7002
7132
|
);
|
|
7003
|
-
return /* @__PURE__ */
|
|
7133
|
+
return /* @__PURE__ */ jsxs41("div", { "data-slot": "toast-provider", className, ...props, children: [
|
|
7004
7134
|
children,
|
|
7005
|
-
/* @__PURE__ */
|
|
7135
|
+
/* @__PURE__ */ jsx46(ToastViewport, { children: items.map((item) => /* @__PURE__ */ jsx46("li", { children: /* @__PURE__ */ jsx46(ToastRoot, { ...item, onClose: () => toast.dismiss(item.id) }) }, item.id)) })
|
|
7006
7136
|
] });
|
|
7007
7137
|
}
|
|
7008
7138
|
|
|
@@ -7010,7 +7140,7 @@ function ToastProvider({ children, maxToasts = 3, className, ...props }) {
|
|
|
7010
7140
|
import * as React37 from "react";
|
|
7011
7141
|
import { cva as cva25 } from "class-variance-authority";
|
|
7012
7142
|
import { AlertCircle as AlertCircle6 } from "lucide-react";
|
|
7013
|
-
import { Fragment as Fragment8, jsx as
|
|
7143
|
+
import { Fragment as Fragment8, jsx as jsx47, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
7014
7144
|
var otpFieldVariants = cva25("flex w-full flex-col gap-[var(--space-1-5)]", {
|
|
7015
7145
|
variants: {
|
|
7016
7146
|
size: {
|
|
@@ -7162,7 +7292,7 @@ var OTPField = React37.forwardRef(
|
|
|
7162
7292
|
},
|
|
7163
7293
|
[disabled, isControlled, length, onComplete, onValueChange]
|
|
7164
7294
|
);
|
|
7165
|
-
return /* @__PURE__ */
|
|
7295
|
+
return /* @__PURE__ */ jsxs42(
|
|
7166
7296
|
"fieldset",
|
|
7167
7297
|
{
|
|
7168
7298
|
ref,
|
|
@@ -7175,7 +7305,7 @@ var OTPField = React37.forwardRef(
|
|
|
7175
7305
|
className: cn(otpFieldVariants({ size, className })),
|
|
7176
7306
|
...props,
|
|
7177
7307
|
children: [
|
|
7178
|
-
/* @__PURE__ */
|
|
7308
|
+
/* @__PURE__ */ jsx47(
|
|
7179
7309
|
"legend",
|
|
7180
7310
|
{
|
|
7181
7311
|
id: labelId,
|
|
@@ -7184,7 +7314,7 @@ var OTPField = React37.forwardRef(
|
|
|
7184
7314
|
children: label
|
|
7185
7315
|
}
|
|
7186
7316
|
),
|
|
7187
|
-
/* @__PURE__ */
|
|
7317
|
+
/* @__PURE__ */ jsx47(
|
|
7188
7318
|
"div",
|
|
7189
7319
|
{
|
|
7190
7320
|
"data-slot": "otp-field-group",
|
|
@@ -7194,7 +7324,7 @@ var OTPField = React37.forwardRef(
|
|
|
7194
7324
|
children: Array.from({ length }, (_, index) => {
|
|
7195
7325
|
const digit = resolvedSlots[index] ?? "";
|
|
7196
7326
|
const inputId = `${fieldId}-cell-${index + 1}`;
|
|
7197
|
-
return /* @__PURE__ */
|
|
7327
|
+
return /* @__PURE__ */ jsx47(
|
|
7198
7328
|
"input",
|
|
7199
7329
|
{
|
|
7200
7330
|
ref: (node) => {
|
|
@@ -7289,15 +7419,15 @@ var OTPField = React37.forwardRef(
|
|
|
7289
7419
|
})
|
|
7290
7420
|
}
|
|
7291
7421
|
),
|
|
7292
|
-
helperText || errorText ? /* @__PURE__ */
|
|
7422
|
+
helperText || errorText ? /* @__PURE__ */ jsx47(
|
|
7293
7423
|
"p",
|
|
7294
7424
|
{
|
|
7295
7425
|
id: errorText ? errorId : helperId,
|
|
7296
7426
|
"data-slot": "otp-field-message",
|
|
7297
7427
|
"data-kind": errorText ? "error" : "helper",
|
|
7298
7428
|
className: otpFieldMessageVariants({ state: resolvedState }),
|
|
7299
|
-
children: errorText ? /* @__PURE__ */
|
|
7300
|
-
/* @__PURE__ */
|
|
7429
|
+
children: errorText ? /* @__PURE__ */ jsxs42(Fragment8, { children: [
|
|
7430
|
+
/* @__PURE__ */ jsx47(
|
|
7301
7431
|
AlertCircle6,
|
|
7302
7432
|
{
|
|
7303
7433
|
"aria-hidden": "true",
|
|
@@ -7305,11 +7435,11 @@ var OTPField = React37.forwardRef(
|
|
|
7305
7435
|
strokeWidth: 2
|
|
7306
7436
|
}
|
|
7307
7437
|
),
|
|
7308
|
-
/* @__PURE__ */
|
|
7309
|
-
] }) : /* @__PURE__ */
|
|
7438
|
+
/* @__PURE__ */ jsx47("span", { children: errorText })
|
|
7439
|
+
] }) : /* @__PURE__ */ jsx47("span", { children: helperText })
|
|
7310
7440
|
}
|
|
7311
7441
|
) : null,
|
|
7312
|
-
name ? /* @__PURE__ */
|
|
7442
|
+
name ? /* @__PURE__ */ jsx47(
|
|
7313
7443
|
"input",
|
|
7314
7444
|
{
|
|
7315
7445
|
"aria-hidden": "true",
|
|
@@ -7331,9 +7461,9 @@ OTPField.displayName = "OTPField";
|
|
|
7331
7461
|
|
|
7332
7462
|
// src/components/ui/search-field.tsx
|
|
7333
7463
|
import * as React38 from "react";
|
|
7334
|
-
import { Search, X as
|
|
7464
|
+
import { Search, X as X6 } from "lucide-react";
|
|
7335
7465
|
import { cva as cva26 } from "class-variance-authority";
|
|
7336
|
-
import { jsx as
|
|
7466
|
+
import { jsx as jsx48, jsxs as jsxs43 } from "react/jsx-runtime";
|
|
7337
7467
|
var searchFieldVariants = cva26("relative flex w-full items-center", {
|
|
7338
7468
|
variants: {
|
|
7339
7469
|
size: {
|
|
@@ -7432,14 +7562,14 @@ var SearchField = React38.forwardRef(
|
|
|
7432
7562
|
}
|
|
7433
7563
|
onClear?.();
|
|
7434
7564
|
};
|
|
7435
|
-
return /* @__PURE__ */
|
|
7565
|
+
return /* @__PURE__ */ jsxs43(
|
|
7436
7566
|
"div",
|
|
7437
7567
|
{
|
|
7438
7568
|
"data-slot": "search-field",
|
|
7439
7569
|
"data-size": resolvedSize,
|
|
7440
7570
|
className: cn(searchFieldVariants({ size, className })),
|
|
7441
7571
|
children: [
|
|
7442
|
-
/* @__PURE__ */
|
|
7572
|
+
/* @__PURE__ */ jsx48(
|
|
7443
7573
|
Search,
|
|
7444
7574
|
{
|
|
7445
7575
|
"aria-hidden": "true",
|
|
@@ -7449,7 +7579,7 @@ var SearchField = React38.forwardRef(
|
|
|
7449
7579
|
strokeWidth: resolvedSize === "sm" ? 2 : 1.75
|
|
7450
7580
|
}
|
|
7451
7581
|
),
|
|
7452
|
-
/* @__PURE__ */
|
|
7582
|
+
/* @__PURE__ */ jsx48(
|
|
7453
7583
|
"input",
|
|
7454
7584
|
{
|
|
7455
7585
|
ref: inputRef,
|
|
@@ -7470,7 +7600,7 @@ var SearchField = React38.forwardRef(
|
|
|
7470
7600
|
...props
|
|
7471
7601
|
}
|
|
7472
7602
|
),
|
|
7473
|
-
showClear ? /* @__PURE__ */
|
|
7603
|
+
showClear ? /* @__PURE__ */ jsx48(
|
|
7474
7604
|
"button",
|
|
7475
7605
|
{
|
|
7476
7606
|
type: "button",
|
|
@@ -7478,7 +7608,7 @@ var SearchField = React38.forwardRef(
|
|
|
7478
7608
|
"data-slot": "search-field-clear",
|
|
7479
7609
|
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
7610
|
onClick: clearInput,
|
|
7481
|
-
children: /* @__PURE__ */
|
|
7611
|
+
children: /* @__PURE__ */ jsx48(X6, { "aria-hidden": "true", size: 16, strokeWidth: 1.75 })
|
|
7482
7612
|
}
|
|
7483
7613
|
) : null
|
|
7484
7614
|
]
|
|
@@ -7491,7 +7621,7 @@ SearchField.displayName = "SearchField";
|
|
|
7491
7621
|
// src/components/ui/checkbox-group.tsx
|
|
7492
7622
|
import * as React39 from "react";
|
|
7493
7623
|
import { cva as cva27 } from "class-variance-authority";
|
|
7494
|
-
import { jsx as
|
|
7624
|
+
import { jsx as jsx49 } from "react/jsx-runtime";
|
|
7495
7625
|
var checkboxGroupVariants = cva27("gap-[var(--space-1)]", {
|
|
7496
7626
|
variants: {
|
|
7497
7627
|
appearance: {
|
|
@@ -7567,7 +7697,7 @@ var CheckboxGroup = React39.forwardRef(
|
|
|
7567
7697
|
}),
|
|
7568
7698
|
[appearance, density, disabled, name, selectedValues, toggleValue]
|
|
7569
7699
|
);
|
|
7570
|
-
return /* @__PURE__ */
|
|
7700
|
+
return /* @__PURE__ */ jsx49(CheckboxGroupContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx49(
|
|
7571
7701
|
"div",
|
|
7572
7702
|
{
|
|
7573
7703
|
ref,
|
|
@@ -7595,7 +7725,7 @@ import * as React40 from "react";
|
|
|
7595
7725
|
import { cva as cva28 } from "class-variance-authority";
|
|
7596
7726
|
import { Circle } from "lucide-react";
|
|
7597
7727
|
import { RadioGroup as RadioGroupPrimitive } from "radix-ui";
|
|
7598
|
-
import { jsx as
|
|
7728
|
+
import { jsx as jsx50, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
7599
7729
|
var radioGroupVariants = cva28("gap-[var(--space-1)]", {
|
|
7600
7730
|
variants: {
|
|
7601
7731
|
appearance: {
|
|
@@ -7703,7 +7833,7 @@ var RadioGroup = React40.forwardRef(
|
|
|
7703
7833
|
() => ({ appearance, density }),
|
|
7704
7834
|
[appearance, density]
|
|
7705
7835
|
);
|
|
7706
|
-
return /* @__PURE__ */
|
|
7836
|
+
return /* @__PURE__ */ jsx50(RadioGroupContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx50(
|
|
7707
7837
|
RadioGroupPrimitive.Root,
|
|
7708
7838
|
{
|
|
7709
7839
|
ref,
|
|
@@ -7732,7 +7862,7 @@ var Radio = React40.forwardRef(({ className, children, description, id, ...props
|
|
|
7732
7862
|
const radioId = id ?? generatedId;
|
|
7733
7863
|
const labelId = `${radioId}-label`;
|
|
7734
7864
|
const descriptionId = description ? `${radioId}-description` : void 0;
|
|
7735
|
-
return /* @__PURE__ */
|
|
7865
|
+
return /* @__PURE__ */ jsxs44(
|
|
7736
7866
|
RadioGroupPrimitive.Item,
|
|
7737
7867
|
{
|
|
7738
7868
|
ref,
|
|
@@ -7743,24 +7873,24 @@ var Radio = React40.forwardRef(({ className, children, description, id, ...props
|
|
|
7743
7873
|
className: cn(radioVariants({ appearance, density }), className),
|
|
7744
7874
|
...props,
|
|
7745
7875
|
children: [
|
|
7746
|
-
/* @__PURE__ */
|
|
7876
|
+
/* @__PURE__ */ jsx50(
|
|
7747
7877
|
"span",
|
|
7748
7878
|
{
|
|
7749
7879
|
"aria-hidden": "true",
|
|
7750
7880
|
"data-slot": "radio-control",
|
|
7751
7881
|
className: radioControlVariants({ appearance }),
|
|
7752
|
-
children: /* @__PURE__ */
|
|
7882
|
+
children: /* @__PURE__ */ jsx50(
|
|
7753
7883
|
RadioGroupPrimitive.Indicator,
|
|
7754
7884
|
{
|
|
7755
7885
|
"data-slot": "radio-indicator",
|
|
7756
7886
|
className: "flex items-center justify-center",
|
|
7757
|
-
children: /* @__PURE__ */
|
|
7887
|
+
children: /* @__PURE__ */ jsx50(Circle, { "aria-hidden": "true", size: 8, fill: "currentColor" })
|
|
7758
7888
|
}
|
|
7759
7889
|
)
|
|
7760
7890
|
}
|
|
7761
7891
|
),
|
|
7762
|
-
/* @__PURE__ */
|
|
7763
|
-
/* @__PURE__ */
|
|
7892
|
+
/* @__PURE__ */ jsxs44("span", { className: "flex min-w-0 flex-col gap-[var(--space-0-5)]", children: [
|
|
7893
|
+
/* @__PURE__ */ jsx50(
|
|
7764
7894
|
"span",
|
|
7765
7895
|
{
|
|
7766
7896
|
id: labelId,
|
|
@@ -7772,7 +7902,7 @@ var Radio = React40.forwardRef(({ className, children, description, id, ...props
|
|
|
7772
7902
|
children
|
|
7773
7903
|
}
|
|
7774
7904
|
),
|
|
7775
|
-
description ? /* @__PURE__ */
|
|
7905
|
+
description ? /* @__PURE__ */ jsx50(
|
|
7776
7906
|
"span",
|
|
7777
7907
|
{
|
|
7778
7908
|
id: descriptionId,
|
|
@@ -7790,20 +7920,20 @@ Radio.displayName = "Radio";
|
|
|
7790
7920
|
|
|
7791
7921
|
// src/components/ui/scroll-area.tsx
|
|
7792
7922
|
import { ScrollArea as ScrollAreaPrimitive } from "radix-ui";
|
|
7793
|
-
import { jsx as
|
|
7923
|
+
import { jsx as jsx51, jsxs as jsxs45 } from "react/jsx-runtime";
|
|
7794
7924
|
function ScrollArea({
|
|
7795
7925
|
className,
|
|
7796
7926
|
children,
|
|
7797
7927
|
...props
|
|
7798
7928
|
}) {
|
|
7799
|
-
return /* @__PURE__ */
|
|
7929
|
+
return /* @__PURE__ */ jsxs45(
|
|
7800
7930
|
ScrollAreaPrimitive.Root,
|
|
7801
7931
|
{
|
|
7802
7932
|
"data-slot": "scroll-area",
|
|
7803
7933
|
className: cn("relative", className),
|
|
7804
7934
|
...props,
|
|
7805
7935
|
children: [
|
|
7806
|
-
/* @__PURE__ */
|
|
7936
|
+
/* @__PURE__ */ jsx51(
|
|
7807
7937
|
ScrollAreaPrimitive.Viewport,
|
|
7808
7938
|
{
|
|
7809
7939
|
"data-slot": "scroll-area-viewport",
|
|
@@ -7811,8 +7941,8 @@ function ScrollArea({
|
|
|
7811
7941
|
children
|
|
7812
7942
|
}
|
|
7813
7943
|
),
|
|
7814
|
-
/* @__PURE__ */
|
|
7815
|
-
/* @__PURE__ */
|
|
7944
|
+
/* @__PURE__ */ jsx51(ScrollBar, {}),
|
|
7945
|
+
/* @__PURE__ */ jsx51(ScrollAreaPrimitive.Corner, {})
|
|
7816
7946
|
]
|
|
7817
7947
|
}
|
|
7818
7948
|
);
|
|
@@ -7822,7 +7952,7 @@ function ScrollBar({
|
|
|
7822
7952
|
orientation = "vertical",
|
|
7823
7953
|
...props
|
|
7824
7954
|
}) {
|
|
7825
|
-
return /* @__PURE__ */
|
|
7955
|
+
return /* @__PURE__ */ jsx51(
|
|
7826
7956
|
ScrollAreaPrimitive.ScrollAreaScrollbar,
|
|
7827
7957
|
{
|
|
7828
7958
|
"data-slot": "scroll-area-scrollbar",
|
|
@@ -7834,7 +7964,7 @@ function ScrollBar({
|
|
|
7834
7964
|
className
|
|
7835
7965
|
),
|
|
7836
7966
|
...props,
|
|
7837
|
-
children: /* @__PURE__ */
|
|
7967
|
+
children: /* @__PURE__ */ jsx51(
|
|
7838
7968
|
ScrollAreaPrimitive.ScrollAreaThumb,
|
|
7839
7969
|
{
|
|
7840
7970
|
"data-slot": "scroll-area-thumb",
|
|
@@ -7846,7 +7976,7 @@ function ScrollBar({
|
|
|
7846
7976
|
}
|
|
7847
7977
|
|
|
7848
7978
|
// src/components/ui/progress.tsx
|
|
7849
|
-
import { jsx as
|
|
7979
|
+
import { jsx as jsx52 } from "react/jsx-runtime";
|
|
7850
7980
|
var progressFillByStatus = {
|
|
7851
7981
|
active: "bg-[var(--accent-solid)]",
|
|
7852
7982
|
success: "bg-[var(--success)]",
|
|
@@ -7867,7 +7997,7 @@ function Progress({
|
|
|
7867
7997
|
const clamped = Math.max(0, Math.min(safeMax, value));
|
|
7868
7998
|
const percent = clamped / safeMax * 100;
|
|
7869
7999
|
const w = typeof width === "number" ? `${width}px` : width;
|
|
7870
|
-
return /* @__PURE__ */
|
|
8000
|
+
return /* @__PURE__ */ jsx52(
|
|
7871
8001
|
"div",
|
|
7872
8002
|
{
|
|
7873
8003
|
role: "progressbar",
|
|
@@ -7881,7 +8011,7 @@ function Progress({
|
|
|
7881
8011
|
),
|
|
7882
8012
|
style: { width: w, height: `${height}px`, ...style },
|
|
7883
8013
|
...props,
|
|
7884
|
-
children: /* @__PURE__ */
|
|
8014
|
+
children: /* @__PURE__ */ jsx52(
|
|
7885
8015
|
"div",
|
|
7886
8016
|
{
|
|
7887
8017
|
className: cn(
|
|
@@ -7899,7 +8029,7 @@ function Progress({
|
|
|
7899
8029
|
import * as React41 from "react";
|
|
7900
8030
|
import { ChevronRight as ChevronRight2 } from "lucide-react";
|
|
7901
8031
|
import { cva as cva29 } from "class-variance-authority";
|
|
7902
|
-
import { jsx as
|
|
8032
|
+
import { jsx as jsx53, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
7903
8033
|
var treeViewVariants = cva29(
|
|
7904
8034
|
"m-0 list-none p-[var(--space-0-5)] text-body-sm text-foreground"
|
|
7905
8035
|
);
|
|
@@ -8069,7 +8199,7 @@ function TreeView({
|
|
|
8069
8199
|
const selected = node.id === selectedId;
|
|
8070
8200
|
const isActive = node.id === activeId;
|
|
8071
8201
|
const itemState = { expanded, selected, depth, hasChildren };
|
|
8072
|
-
return /* @__PURE__ */
|
|
8202
|
+
return /* @__PURE__ */ jsxs46(
|
|
8073
8203
|
"li",
|
|
8074
8204
|
{
|
|
8075
8205
|
ref: (element) => {
|
|
@@ -8094,7 +8224,7 @@ function TreeView({
|
|
|
8094
8224
|
onSelect?.(node.id, node);
|
|
8095
8225
|
},
|
|
8096
8226
|
children: [
|
|
8097
|
-
/* @__PURE__ */
|
|
8227
|
+
/* @__PURE__ */ jsxs46(
|
|
8098
8228
|
"span",
|
|
8099
8229
|
{
|
|
8100
8230
|
"data-slot": "treeitem-row",
|
|
@@ -8103,7 +8233,7 @@ function TreeView({
|
|
|
8103
8233
|
},
|
|
8104
8234
|
className: treeItemRowVariants({ selected }),
|
|
8105
8235
|
children: [
|
|
8106
|
-
hasChildren ? /* @__PURE__ */
|
|
8236
|
+
hasChildren ? /* @__PURE__ */ jsx53(
|
|
8107
8237
|
"span",
|
|
8108
8238
|
{
|
|
8109
8239
|
"data-slot": "treeitem-toggle",
|
|
@@ -8113,7 +8243,7 @@ function TreeView({
|
|
|
8113
8243
|
setExpanded(node.id, !expanded);
|
|
8114
8244
|
},
|
|
8115
8245
|
className: "flex size-[var(--space-2)] shrink-0 items-center justify-center text-text-tertiary",
|
|
8116
|
-
children: /* @__PURE__ */
|
|
8246
|
+
children: /* @__PURE__ */ jsx53(
|
|
8117
8247
|
ChevronRight2,
|
|
8118
8248
|
{
|
|
8119
8249
|
"aria-hidden": "true",
|
|
@@ -8126,7 +8256,7 @@ function TreeView({
|
|
|
8126
8256
|
}
|
|
8127
8257
|
)
|
|
8128
8258
|
}
|
|
8129
|
-
) : /* @__PURE__ */
|
|
8259
|
+
) : /* @__PURE__ */ jsx53(
|
|
8130
8260
|
"span",
|
|
8131
8261
|
{
|
|
8132
8262
|
"data-slot": "treeitem-spacer",
|
|
@@ -8134,18 +8264,18 @@ function TreeView({
|
|
|
8134
8264
|
className: "size-[var(--space-2)] shrink-0"
|
|
8135
8265
|
}
|
|
8136
8266
|
),
|
|
8137
|
-
/* @__PURE__ */
|
|
8267
|
+
/* @__PURE__ */ jsx53("span", { className: "flex min-w-0 flex-1 items-center gap-[var(--space-1)]", children: renderItem(node, itemState) })
|
|
8138
8268
|
]
|
|
8139
8269
|
}
|
|
8140
8270
|
),
|
|
8141
|
-
hasChildren && expanded && children ? /* @__PURE__ */
|
|
8271
|
+
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
8272
|
]
|
|
8143
8273
|
},
|
|
8144
8274
|
node.id
|
|
8145
8275
|
);
|
|
8146
8276
|
});
|
|
8147
8277
|
}
|
|
8148
|
-
return /* @__PURE__ */
|
|
8278
|
+
return /* @__PURE__ */ jsx53(
|
|
8149
8279
|
"ul",
|
|
8150
8280
|
{
|
|
8151
8281
|
role: "tree",
|
|
@@ -8161,9 +8291,9 @@ function TreeView({
|
|
|
8161
8291
|
}
|
|
8162
8292
|
|
|
8163
8293
|
// src/components/branding/olun-logo.tsx
|
|
8164
|
-
import { jsx as
|
|
8294
|
+
import { jsx as jsx54, jsxs as jsxs47 } from "react/jsx-runtime";
|
|
8165
8295
|
function OlunSymbol({ size = 28, className }) {
|
|
8166
|
-
return /* @__PURE__ */
|
|
8296
|
+
return /* @__PURE__ */ jsxs47(
|
|
8167
8297
|
"svg",
|
|
8168
8298
|
{
|
|
8169
8299
|
width: size,
|
|
@@ -8174,7 +8304,7 @@ function OlunSymbol({ size = 28, className }) {
|
|
|
8174
8304
|
className,
|
|
8175
8305
|
"aria-hidden": "true",
|
|
8176
8306
|
children: [
|
|
8177
|
-
/* @__PURE__ */
|
|
8307
|
+
/* @__PURE__ */ jsx54(
|
|
8178
8308
|
"circle",
|
|
8179
8309
|
{
|
|
8180
8310
|
cx: "108",
|
|
@@ -8186,7 +8316,7 @@ function OlunSymbol({ size = 28, className }) {
|
|
|
8186
8316
|
style: { color: "var(--text-primary)" }
|
|
8187
8317
|
}
|
|
8188
8318
|
),
|
|
8189
|
-
/* @__PURE__ */
|
|
8319
|
+
/* @__PURE__ */ jsx54("circle", { cx: "185", cy: "175", r: "22", fill: "var(--accent-solid)" })
|
|
8190
8320
|
]
|
|
8191
8321
|
}
|
|
8192
8322
|
);
|
|
@@ -8197,7 +8327,7 @@ function OlunLogo({
|
|
|
8197
8327
|
showSymbol = true,
|
|
8198
8328
|
className
|
|
8199
8329
|
}) {
|
|
8200
|
-
return /* @__PURE__ */
|
|
8330
|
+
return /* @__PURE__ */ jsxs47(
|
|
8201
8331
|
"div",
|
|
8202
8332
|
{
|
|
8203
8333
|
className,
|
|
@@ -8207,8 +8337,8 @@ function OlunLogo({
|
|
|
8207
8337
|
gap: "var(--space-1-5)"
|
|
8208
8338
|
},
|
|
8209
8339
|
children: [
|
|
8210
|
-
showSymbol && /* @__PURE__ */
|
|
8211
|
-
/* @__PURE__ */
|
|
8340
|
+
showSymbol && /* @__PURE__ */ jsx54(OlunSymbol, { size: symbolSize }),
|
|
8341
|
+
/* @__PURE__ */ jsxs47(
|
|
8212
8342
|
"span",
|
|
8213
8343
|
{
|
|
8214
8344
|
style: {
|
|
@@ -8220,7 +8350,7 @@ function OlunLogo({
|
|
|
8220
8350
|
},
|
|
8221
8351
|
children: [
|
|
8222
8352
|
"OLUN",
|
|
8223
|
-
/* @__PURE__ */
|
|
8353
|
+
/* @__PURE__ */ jsx54("span", { style: { color: "var(--accent-fg)" }, children: "." })
|
|
8224
8354
|
]
|
|
8225
8355
|
}
|
|
8226
8356
|
)
|
|
@@ -8231,11 +8361,11 @@ function OlunLogo({
|
|
|
8231
8361
|
|
|
8232
8362
|
// src/components/branding/theme-toggle.tsx
|
|
8233
8363
|
import { Sun, Moon } from "lucide-react";
|
|
8234
|
-
import { jsx as
|
|
8364
|
+
import { jsx as jsx55 } from "react/jsx-runtime";
|
|
8235
8365
|
function ThemeToggle({ className }) {
|
|
8236
8366
|
const { resolvedTheme, toggleTheme } = useOlunTheme();
|
|
8237
8367
|
const Icon = resolvedTheme === "dark" ? Moon : Sun;
|
|
8238
|
-
return /* @__PURE__ */
|
|
8368
|
+
return /* @__PURE__ */ jsx55(
|
|
8239
8369
|
"button",
|
|
8240
8370
|
{
|
|
8241
8371
|
onClick: () => toggleTheme(),
|
|
@@ -8247,14 +8377,14 @@ function ThemeToggle({ className }) {
|
|
|
8247
8377
|
),
|
|
8248
8378
|
"aria-label": "\uD14C\uB9C8 \uC804\uD658",
|
|
8249
8379
|
title: resolvedTheme === "dark" ? "\uB77C\uC774\uD2B8 \uBAA8\uB4DC\uB85C" : "\uB2E4\uD06C \uBAA8\uB4DC\uB85C",
|
|
8250
|
-
children: /* @__PURE__ */
|
|
8380
|
+
children: /* @__PURE__ */ jsx55(Icon, { className: "size-[18px]", strokeWidth: 1.75 })
|
|
8251
8381
|
}
|
|
8252
8382
|
);
|
|
8253
8383
|
}
|
|
8254
8384
|
|
|
8255
8385
|
// src/components/branding/theme-fab.tsx
|
|
8256
8386
|
import { Sun as Sun2, Moon as Moon2 } from "lucide-react";
|
|
8257
|
-
import { jsx as
|
|
8387
|
+
import { jsx as jsx56 } from "react/jsx-runtime";
|
|
8258
8388
|
function ThemeFab({ variant = "square" } = {}) {
|
|
8259
8389
|
const { mounted, resolvedTheme, toggleTheme } = useOlunTheme();
|
|
8260
8390
|
if (!mounted) {
|
|
@@ -8294,7 +8424,7 @@ function ThemeFab({ variant = "square" } = {}) {
|
|
|
8294
8424
|
WebkitBackdropFilter: "blur(16px)",
|
|
8295
8425
|
zIndex: 9999
|
|
8296
8426
|
};
|
|
8297
|
-
return /* @__PURE__ */
|
|
8427
|
+
return /* @__PURE__ */ jsx56(
|
|
8298
8428
|
"button",
|
|
8299
8429
|
{
|
|
8300
8430
|
onClick: () => toggleTheme(),
|
|
@@ -8319,7 +8449,7 @@ function ThemeFab({ variant = "square" } = {}) {
|
|
|
8319
8449
|
e.currentTarget.style.color = "var(--text-secondary)";
|
|
8320
8450
|
}
|
|
8321
8451
|
},
|
|
8322
|
-
children: /* @__PURE__ */
|
|
8452
|
+
children: /* @__PURE__ */ jsx56(
|
|
8323
8453
|
Icon,
|
|
8324
8454
|
{
|
|
8325
8455
|
size: isCircle ? 22 : 16,
|
|
@@ -8331,7 +8461,7 @@ function ThemeFab({ variant = "square" } = {}) {
|
|
|
8331
8461
|
}
|
|
8332
8462
|
|
|
8333
8463
|
// src/components/logos/organization-logo.tsx
|
|
8334
|
-
import { jsx as
|
|
8464
|
+
import { jsx as jsx57 } from "react/jsx-runtime";
|
|
8335
8465
|
var organizationLogoRegistry = {
|
|
8336
8466
|
jbnu: {
|
|
8337
8467
|
label: "\uC804\uBD81\uB300\uD559\uAD50 \uC5E0\uBE14\uB7FC",
|
|
@@ -8360,7 +8490,7 @@ function OrganizationLogo({
|
|
|
8360
8490
|
}) {
|
|
8361
8491
|
const asset = organizationLogoRegistry[organization];
|
|
8362
8492
|
const isDecorative = ariaHidden === true || ariaHidden === "true";
|
|
8363
|
-
return /* @__PURE__ */
|
|
8493
|
+
return /* @__PURE__ */ jsx57(
|
|
8364
8494
|
"svg",
|
|
8365
8495
|
{
|
|
8366
8496
|
viewBox: asset.viewBox,
|
|
@@ -8378,7 +8508,7 @@ function OrganizationLogo({
|
|
|
8378
8508
|
...style
|
|
8379
8509
|
},
|
|
8380
8510
|
...props,
|
|
8381
|
-
children: asset.paths.map((path) => /* @__PURE__ */
|
|
8511
|
+
children: asset.paths.map((path) => /* @__PURE__ */ jsx57("path", { d: path }, path))
|
|
8382
8512
|
}
|
|
8383
8513
|
);
|
|
8384
8514
|
}
|
|
@@ -8389,6 +8519,7 @@ export {
|
|
|
8389
8519
|
AvatarFallback,
|
|
8390
8520
|
AvatarImage,
|
|
8391
8521
|
Badge,
|
|
8522
|
+
BulkActionBar,
|
|
8392
8523
|
Button,
|
|
8393
8524
|
Card,
|
|
8394
8525
|
CardContent,
|
|
@@ -8402,6 +8533,7 @@ export {
|
|
|
8402
8533
|
CheckboxGroupContext,
|
|
8403
8534
|
Chip,
|
|
8404
8535
|
ConfirmDialog,
|
|
8536
|
+
ContextMenu,
|
|
8405
8537
|
CopyButton,
|
|
8406
8538
|
DataTable,
|
|
8407
8539
|
DetailLayout,
|