@dimaan/ui 0.0.30 → 0.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +219 -180
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -6
- package/dist/index.d.ts +16 -6
- package/dist/index.js +219 -180
- package/dist/index.js.map +1 -1
- package/dist/preset.css +29 -5
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -877,7 +877,7 @@ var badgeDotSizeClass = {
|
|
|
877
877
|
md: "size-2"
|
|
878
878
|
};
|
|
879
879
|
var badgeBaseClass = "inline-flex shrink-0 items-center rounded-full border font-medium leading-none whitespace-nowrap select-none transition-colors";
|
|
880
|
-
var Badge = forwardRef(function Badge2({ variant = "default", size = "md", tone = "
|
|
880
|
+
var Badge = forwardRef(function Badge2({ variant = "default", size = "md", tone = "soft", dot = false, className, children, ...props }, ref) {
|
|
881
881
|
const variantClass = tone === "soft" ? badgeSoftVariantClass[variant] : badgeVariantClass[variant];
|
|
882
882
|
return /* @__PURE__ */ jsxs(
|
|
883
883
|
"span",
|
|
@@ -1038,16 +1038,16 @@ var Checkbox = forwardRef(function Checkbox2({
|
|
|
1038
1038
|
|
|
1039
1039
|
// src/components/date-picker/datePickerVariants.ts
|
|
1040
1040
|
var datePickerTriggerVariantClass = {
|
|
1041
|
-
default: "border border-input bg-background hover:border-ring",
|
|
1041
|
+
default: "border border-input bg-background shadow-xs hover:border-ring",
|
|
1042
1042
|
filled: "border border-transparent bg-muted hover:bg-muted/80",
|
|
1043
1043
|
ghost: "border border-transparent bg-transparent hover:bg-accent"
|
|
1044
1044
|
};
|
|
1045
1045
|
var datePickerTriggerSizeClass = {
|
|
1046
|
-
sm: "h-8 rounded-
|
|
1047
|
-
md: "h-
|
|
1048
|
-
lg: "h-11 rounded-
|
|
1046
|
+
sm: "h-8 rounded-lg ps-2.5 pe-8 text-sm gap-1.5",
|
|
1047
|
+
md: "h-10 rounded-lg ps-3 pe-9 text-sm gap-2",
|
|
1048
|
+
lg: "h-11 rounded-lg ps-4 pe-10 text-base gap-2"
|
|
1049
1049
|
};
|
|
1050
|
-
var datePickerTriggerBaseClass = "group/datepicker relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-visible:ring-[3px] focus-visible:ring-primary-glow aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-visible:ring-destructive/40 disabled:pointer-events-none disabled:opacity-50 cursor-pointer";
|
|
1050
|
+
var datePickerTriggerBaseClass = "group/datepicker relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary-glow aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-visible:border-destructive aria-[invalid=true]:focus-visible:ring-destructive/40 disabled:pointer-events-none disabled:opacity-50 cursor-pointer";
|
|
1051
1051
|
var datePickerPlaceholderClass = "truncate text-muted-foreground";
|
|
1052
1052
|
var datePickerValueClass = "truncate text-foreground";
|
|
1053
1053
|
var datePickerContentClass = "z-50 overflow-hidden rounded-md border border-border bg-popover p-3 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95";
|
|
@@ -2102,16 +2102,16 @@ function FormPageSkeleton({ rowCount }) {
|
|
|
2102
2102
|
|
|
2103
2103
|
// src/components/input/inputVariants.ts
|
|
2104
2104
|
var inputVariantClass = {
|
|
2105
|
-
default: "border border-input bg-background hover:border-ring",
|
|
2105
|
+
default: "border border-input bg-background shadow-xs hover:border-ring",
|
|
2106
2106
|
filled: "border border-transparent bg-muted hover:bg-muted/80",
|
|
2107
2107
|
ghost: "border border-transparent bg-transparent hover:bg-accent"
|
|
2108
2108
|
};
|
|
2109
2109
|
var inputSizeClass = {
|
|
2110
|
-
sm: "h-8 rounded-
|
|
2111
|
-
md: "h-
|
|
2112
|
-
lg: "h-11 rounded-
|
|
2110
|
+
sm: "h-8 rounded-lg px-2.5 text-sm gap-1.5",
|
|
2111
|
+
md: "h-10 rounded-lg px-3 text-sm gap-2",
|
|
2112
|
+
lg: "h-11 rounded-lg px-4 text-base gap-2.5"
|
|
2113
2113
|
};
|
|
2114
|
-
var inputBaseClass = "group/input relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-within:ring-[3px] focus-within:ring-primary-glow aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-within:ring-destructive/40 has-[input:disabled]:pointer-events-none has-[input:disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0";
|
|
2114
|
+
var inputBaseClass = "group/input relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-within:border-primary focus-within:ring-[3px] focus-within:ring-primary-glow aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-within:border-destructive aria-[invalid=true]:focus-within:ring-destructive/40 has-[input:disabled]:pointer-events-none has-[input:disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0";
|
|
2115
2115
|
var Input = forwardRef(function Input2({
|
|
2116
2116
|
variant = "default",
|
|
2117
2117
|
inputSize = "md",
|
|
@@ -2293,9 +2293,9 @@ function Pagination({
|
|
|
2293
2293
|
children: isRtl ? /* @__PURE__ */ jsx(ChevronRight, { "aria-hidden": "true", className: "size-3.5" }) : /* @__PURE__ */ jsx(ChevronLeft, { "aria-hidden": "true", className: "size-3.5" })
|
|
2294
2294
|
}
|
|
2295
2295
|
),
|
|
2296
|
-
/* @__PURE__ */
|
|
2297
|
-
|
|
2298
|
-
"
|
|
2296
|
+
/* @__PURE__ */ jsx("span", { className: "inline-flex min-w-7 items-center justify-center rounded-lg bg-gradient-table px-2.5 py-0.5 text-xs font-semibold text-white", children: pageIndex + 1 }),
|
|
2297
|
+
/* @__PURE__ */ jsxs("span", { className: "px-0.5 text-muted-foreground", children: [
|
|
2298
|
+
"/ ",
|
|
2299
2299
|
pageCount
|
|
2300
2300
|
] }),
|
|
2301
2301
|
/* @__PURE__ */ jsx(
|
|
@@ -2320,7 +2320,7 @@ function Toolbar({ count, onClear, renderLabel, clearLabel, children }) {
|
|
|
2320
2320
|
{
|
|
2321
2321
|
role: "toolbar",
|
|
2322
2322
|
"aria-label": "Bulk actions",
|
|
2323
|
-
className: "flex flex-wrap items-center gap-3 rounded-
|
|
2323
|
+
className: "flex flex-wrap items-center gap-3 rounded-xl border border-border bg-muted/50 px-3.5 py-2.5 text-sm shadow-[var(--shadow-xs)]",
|
|
2324
2324
|
children: [
|
|
2325
2325
|
/* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: renderLabel ? renderLabel(count) : `${count} selected` }),
|
|
2326
2326
|
/* @__PURE__ */ jsxs("div", { className: "ms-auto flex flex-wrap items-center gap-2", children: [
|
|
@@ -2336,18 +2336,18 @@ function Toolbar({ count, onClear, renderLabel, clearLabel, children }) {
|
|
|
2336
2336
|
var tableSizeClass = {
|
|
2337
2337
|
sm: {
|
|
2338
2338
|
row: "",
|
|
2339
|
-
cell: "px-3 py-
|
|
2340
|
-
head: "whitespace-nowrap px-3 py-
|
|
2339
|
+
cell: "px-3 py-2 text-xs tabular-nums",
|
|
2340
|
+
head: "whitespace-nowrap px-3 py-3 text-[11px] font-semibold uppercase tracking-wider"
|
|
2341
2341
|
},
|
|
2342
2342
|
md: {
|
|
2343
2343
|
row: "",
|
|
2344
|
-
cell: "px-4 py-
|
|
2345
|
-
head: "whitespace-nowrap px-4 py-
|
|
2344
|
+
cell: "px-4 py-3.5 text-sm tabular-nums",
|
|
2345
|
+
head: "whitespace-nowrap px-4 py-4 text-xs font-semibold uppercase tracking-wider"
|
|
2346
2346
|
},
|
|
2347
2347
|
lg: {
|
|
2348
2348
|
row: "",
|
|
2349
|
-
cell: "px-
|
|
2350
|
-
head: "whitespace-nowrap px-
|
|
2349
|
+
cell: "px-6 py-4 text-sm tabular-nums",
|
|
2350
|
+
head: "whitespace-nowrap px-6 py-5 text-[13px] font-semibold uppercase tracking-wider"
|
|
2351
2351
|
}
|
|
2352
2352
|
};
|
|
2353
2353
|
var tableBaseClass = "w-full caption-bottom border-collapse";
|
|
@@ -2404,6 +2404,7 @@ function Table(props) {
|
|
|
2404
2404
|
maxHeight,
|
|
2405
2405
|
striped = false,
|
|
2406
2406
|
onRowClick,
|
|
2407
|
+
getRowAccent,
|
|
2407
2408
|
tableRef,
|
|
2408
2409
|
pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,
|
|
2409
2410
|
showPagination,
|
|
@@ -2475,166 +2476,196 @@ function Table(props) {
|
|
|
2475
2476
|
children: bulkActions(selectedRowsInData)
|
|
2476
2477
|
}
|
|
2477
2478
|
),
|
|
2478
|
-
/* @__PURE__ */
|
|
2479
|
+
/* @__PURE__ */ jsxs(
|
|
2479
2480
|
"div",
|
|
2480
2481
|
{
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
"aria-labelledby": ariaLabelledBy,
|
|
2492
|
-
"aria-rowcount": totalRowCount,
|
|
2493
|
-
className: cn(tableBaseClass, "text-sm text-foreground", tableClassName),
|
|
2494
|
-
children: [
|
|
2495
|
-
caption ? /* @__PURE__ */ jsx("caption", { className: "sr-only", children: caption }) : null,
|
|
2496
|
-
/* @__PURE__ */ jsx(
|
|
2497
|
-
"thead",
|
|
2482
|
+
"data-testid": "table-card",
|
|
2483
|
+
className: "overflow-hidden rounded-xl border border-border bg-card shadow-[var(--shadow-card)]",
|
|
2484
|
+
children: [
|
|
2485
|
+
/* @__PURE__ */ jsx(
|
|
2486
|
+
"div",
|
|
2487
|
+
{
|
|
2488
|
+
className: cn("overflow-x-auto", maxHeight !== void 0 && "overflow-y-auto"),
|
|
2489
|
+
style: maxHeight !== void 0 ? { maxHeight } : void 0,
|
|
2490
|
+
children: /* @__PURE__ */ jsxs(
|
|
2491
|
+
"table",
|
|
2498
2492
|
{
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
enableRowSelection ? /* @__PURE__ */ jsx("th", { scope: "col", className: cn("w-10", sizeClasses.head), children: /* @__PURE__ */ jsx(
|
|
2509
|
-
Checkbox,
|
|
2493
|
+
ref: tableRef,
|
|
2494
|
+
"aria-label": ariaLabel,
|
|
2495
|
+
"aria-labelledby": ariaLabelledBy,
|
|
2496
|
+
"aria-rowcount": totalRowCount,
|
|
2497
|
+
className: cn(tableBaseClass, "text-sm text-foreground", tableClassName),
|
|
2498
|
+
children: [
|
|
2499
|
+
caption ? /* @__PURE__ */ jsx("caption", { className: "sr-only", children: caption }) : null,
|
|
2500
|
+
/* @__PURE__ */ jsx(
|
|
2501
|
+
"thead",
|
|
2510
2502
|
{
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
{
|
|
2524
|
-
scope: "col",
|
|
2525
|
-
"aria-sort": column.sortable ? ariaSort : void 0,
|
|
2526
|
-
className: cn(
|
|
2527
|
-
sizeClasses.head,
|
|
2528
|
-
alignClass[column.align ?? "start"],
|
|
2529
|
-
column.className
|
|
2530
|
-
),
|
|
2531
|
-
children: column.sortable ? /* @__PURE__ */ jsxs(
|
|
2532
|
-
"button",
|
|
2503
|
+
className: cn(
|
|
2504
|
+
// Faint opaque teal header tint (--color-panel-header, shared with the
|
|
2505
|
+
// list-page filter panel) + a 2px teal bottom rule. The rule is an inset
|
|
2506
|
+
// shadow so it stays attached to a sticky header instead of collapsing
|
|
2507
|
+
// into the first row's border; the tint is opaque (mixed into
|
|
2508
|
+
// --color-card) so a sticky header fully hides the rows underneath.
|
|
2509
|
+
"bg-panel-header text-muted-foreground shadow-[inset_0_-2px_0_var(--color-primary)]",
|
|
2510
|
+
maxHeight !== void 0 && "sticky top-0 z-10"
|
|
2511
|
+
),
|
|
2512
|
+
children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
2513
|
+
enableRowSelection ? /* @__PURE__ */ jsx("th", { scope: "col", className: cn("w-10", sizeClasses.head), children: /* @__PURE__ */ jsx(
|
|
2514
|
+
Checkbox,
|
|
2533
2515
|
{
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
|
|
2541
|
-
|
|
2516
|
+
"aria-label": "Select all rows on this page",
|
|
2517
|
+
checked: allOnPageSelected,
|
|
2518
|
+
indeterminate: someOnPageSelected,
|
|
2519
|
+
disabled: selectableRowIds.length === 0,
|
|
2520
|
+
onCheckedChange: toggleHeader
|
|
2521
|
+
}
|
|
2522
|
+
) }) : null,
|
|
2523
|
+
columns.map((column) => {
|
|
2524
|
+
const isSorted = effectiveSort.columnId === column.id;
|
|
2525
|
+
const ariaSort = isSorted ? effectiveSort.direction === "asc" ? "ascending" : "descending" : "none";
|
|
2526
|
+
return /* @__PURE__ */ jsx(
|
|
2527
|
+
"th",
|
|
2528
|
+
{
|
|
2529
|
+
scope: "col",
|
|
2530
|
+
"aria-sort": column.sortable ? ariaSort : void 0,
|
|
2531
|
+
className: cn(
|
|
2532
|
+
sizeClasses.head,
|
|
2533
|
+
alignClass[column.align ?? "start"],
|
|
2534
|
+
column.className,
|
|
2535
|
+
isSorted && "text-primary"
|
|
2536
|
+
),
|
|
2537
|
+
children: column.sortable ? /* @__PURE__ */ jsxs(
|
|
2538
|
+
"button",
|
|
2542
2539
|
{
|
|
2543
|
-
|
|
2544
|
-
|
|
2540
|
+
type: "button",
|
|
2541
|
+
onClick: () => handleSortClick(column.id),
|
|
2542
|
+
className: "inline-flex items-center gap-1.5 font-inherit uppercase tracking-inherit text-inherit hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background",
|
|
2543
|
+
"aria-label": sortAriaLabel(column, effectiveSort),
|
|
2544
|
+
children: [
|
|
2545
|
+
/* @__PURE__ */ jsx("span", { children: renderHeader(column.header) }),
|
|
2546
|
+
/* @__PURE__ */ jsx(
|
|
2547
|
+
SortIndicator,
|
|
2548
|
+
{
|
|
2549
|
+
active: isSorted,
|
|
2550
|
+
direction: isSorted ? effectiveSort.direction : null
|
|
2551
|
+
}
|
|
2552
|
+
)
|
|
2553
|
+
]
|
|
2545
2554
|
}
|
|
2546
|
-
)
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
})
|
|
2554
|
-
] })
|
|
2555
|
-
}
|
|
2556
|
-
),
|
|
2557
|
-
/* @__PURE__ */ jsx("tbody", { children: loading ? /* @__PURE__ */ jsx(
|
|
2558
|
-
SkeletonRows,
|
|
2559
|
-
{
|
|
2560
|
-
rowCount: skeletonCount,
|
|
2561
|
-
columnCount: totalColumnCount,
|
|
2562
|
-
cellClassName: sizeClasses.cell
|
|
2563
|
-
}
|
|
2564
|
-
) : data.length === 0 ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx(
|
|
2565
|
-
"td",
|
|
2566
|
-
{
|
|
2567
|
-
colSpan: totalColumnCount,
|
|
2568
|
-
className: cn(sizeClasses.cell, "py-10 text-center text-muted-foreground"),
|
|
2569
|
-
children: emptyState ?? "No data"
|
|
2570
|
-
}
|
|
2571
|
-
) }) : data.map((row, rowIndex) => {
|
|
2572
|
-
const id = getRowId(row, rowIndex);
|
|
2573
|
-
const isSelected = selected.has(id);
|
|
2574
|
-
const rowSelectable = isRowSelectable ? isRowSelectable(row) : true;
|
|
2575
|
-
return /* @__PURE__ */ jsxs(
|
|
2576
|
-
"tr",
|
|
2577
|
-
{
|
|
2578
|
-
"data-selected": isSelected ? "true" : void 0,
|
|
2579
|
-
"aria-selected": enableRowSelection ? isSelected : void 0,
|
|
2580
|
-
className: cn(
|
|
2581
|
-
"border-t border-border/60 first:border-t-0 transition-colors",
|
|
2582
|
-
"hover:bg-primary/5",
|
|
2583
|
-
striped && rowIndex % 2 === 1 && "bg-muted/20",
|
|
2584
|
-
isSelected && selectedRowClass,
|
|
2585
|
-
onRowClick && "cursor-pointer"
|
|
2555
|
+
) : renderHeader(column.header)
|
|
2556
|
+
},
|
|
2557
|
+
column.id
|
|
2558
|
+
);
|
|
2559
|
+
})
|
|
2560
|
+
] })
|
|
2561
|
+
}
|
|
2586
2562
|
),
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2563
|
+
/* @__PURE__ */ jsx("tbody", { children: loading ? /* @__PURE__ */ jsx(
|
|
2564
|
+
SkeletonRows,
|
|
2565
|
+
{
|
|
2566
|
+
rowCount: skeletonCount,
|
|
2567
|
+
columnCount: totalColumnCount,
|
|
2568
|
+
cellClassName: sizeClasses.cell
|
|
2569
|
+
}
|
|
2570
|
+
) : data.length === 0 ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx(
|
|
2571
|
+
"td",
|
|
2572
|
+
{
|
|
2573
|
+
colSpan: totalColumnCount,
|
|
2574
|
+
className: cn(sizeClasses.cell, "py-10 text-center text-muted-foreground"),
|
|
2575
|
+
children: emptyState ?? "No data"
|
|
2576
|
+
}
|
|
2577
|
+
) }) : data.map((row, rowIndex) => {
|
|
2578
|
+
const id = getRowId(row, rowIndex);
|
|
2579
|
+
const isSelected = selected.has(id);
|
|
2580
|
+
const rowSelectable = isRowSelectable ? isRowSelectable(row) : true;
|
|
2581
|
+
const accent = getRowAccent?.(row, rowIndex);
|
|
2582
|
+
return /* @__PURE__ */ jsxs(
|
|
2583
|
+
"tr",
|
|
2601
2584
|
{
|
|
2585
|
+
"data-selected": isSelected ? "true" : void 0,
|
|
2586
|
+
"aria-selected": enableRowSelection ? isSelected : void 0,
|
|
2602
2587
|
className: cn(
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2588
|
+
"border-b border-border/60 last:border-b-0 transition-colors",
|
|
2589
|
+
"hover:bg-muted/60",
|
|
2590
|
+
striped && rowIndex % 2 === 1 && "bg-muted/20",
|
|
2591
|
+
isSelected && selectedRowClass,
|
|
2592
|
+
onRowClick && "cursor-pointer"
|
|
2606
2593
|
),
|
|
2607
|
-
|
|
2594
|
+
onClick: onRowClick ? () => onRowClick(row, rowIndex) : void 0,
|
|
2595
|
+
children: [
|
|
2596
|
+
enableRowSelection ? /* @__PURE__ */ jsxs("td", { className: cn(sizeClasses.cell, "relative w-10"), children: [
|
|
2597
|
+
accent ? /* @__PURE__ */ jsx(RowAccent, { color: accent }) : null,
|
|
2598
|
+
/* @__PURE__ */ jsx(
|
|
2599
|
+
Checkbox,
|
|
2600
|
+
{
|
|
2601
|
+
"aria-label": `Select row ${rowIndex + 1}`,
|
|
2602
|
+
checked: isSelected,
|
|
2603
|
+
disabled: !rowSelectable,
|
|
2604
|
+
onCheckedChange: (next) => toggleRow(id, next),
|
|
2605
|
+
onClick: stopRowClickPropagation
|
|
2606
|
+
}
|
|
2607
|
+
)
|
|
2608
|
+
] }) : null,
|
|
2609
|
+
columns.map((column, colIndex) => {
|
|
2610
|
+
const isFirst = colIndex === 0 && !enableRowSelection;
|
|
2611
|
+
return /* @__PURE__ */ jsxs(
|
|
2612
|
+
"td",
|
|
2613
|
+
{
|
|
2614
|
+
className: cn(
|
|
2615
|
+
sizeClasses.cell,
|
|
2616
|
+
alignClass[column.align ?? "start"],
|
|
2617
|
+
column.className,
|
|
2618
|
+
isFirst && "relative"
|
|
2619
|
+
),
|
|
2620
|
+
children: [
|
|
2621
|
+
isFirst && accent ? /* @__PURE__ */ jsx(RowAccent, { color: accent }) : null,
|
|
2622
|
+
renderCell(column, row, rowIndex)
|
|
2623
|
+
]
|
|
2624
|
+
},
|
|
2625
|
+
column.id
|
|
2626
|
+
);
|
|
2627
|
+
})
|
|
2628
|
+
]
|
|
2608
2629
|
},
|
|
2609
|
-
|
|
2610
|
-
)
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
labels
|
|
2630
|
+
id
|
|
2631
|
+
);
|
|
2632
|
+
}) })
|
|
2633
|
+
]
|
|
2634
|
+
}
|
|
2635
|
+
)
|
|
2636
|
+
}
|
|
2637
|
+
),
|
|
2638
|
+
paginationVisible ? /* @__PURE__ */ jsx("div", { className: "border-t border-border px-4 py-3", children: /* @__PURE__ */ jsx(
|
|
2639
|
+
Pagination,
|
|
2640
|
+
{
|
|
2641
|
+
pageIndex,
|
|
2642
|
+
pageSize,
|
|
2643
|
+
pageCount,
|
|
2644
|
+
totalRowCount,
|
|
2645
|
+
pageSizeOptions,
|
|
2646
|
+
onChange: handlePaginationChange,
|
|
2647
|
+
labels
|
|
2648
|
+
}
|
|
2649
|
+
) }) : null
|
|
2650
|
+
]
|
|
2631
2651
|
}
|
|
2632
|
-
)
|
|
2652
|
+
)
|
|
2633
2653
|
] });
|
|
2634
2654
|
}
|
|
2635
2655
|
function renderHeader(header) {
|
|
2636
2656
|
return typeof header === "function" ? header() : header;
|
|
2637
2657
|
}
|
|
2658
|
+
function RowAccent({ color }) {
|
|
2659
|
+
return /* @__PURE__ */ jsx(
|
|
2660
|
+
"span",
|
|
2661
|
+
{
|
|
2662
|
+
"aria-hidden": "true",
|
|
2663
|
+
"data-testid": "row-accent",
|
|
2664
|
+
className: "pointer-events-none absolute inset-y-1 start-0 w-[3px] rounded-full",
|
|
2665
|
+
style: { background: color }
|
|
2666
|
+
}
|
|
2667
|
+
);
|
|
2668
|
+
}
|
|
2638
2669
|
function renderCell(column, row, rowIndex) {
|
|
2639
2670
|
if (column.render) return column.render(row, rowIndex);
|
|
2640
2671
|
if (column.accessor !== void 0) {
|
|
@@ -2659,26 +2690,34 @@ function stopRowClickPropagation(event) {
|
|
|
2659
2690
|
function SkeletonRows({ rowCount, columnCount, cellClassName }) {
|
|
2660
2691
|
const rowKeys = Array.from({ length: Math.max(0, rowCount) }, (_, i) => `skeleton-row-${i}`);
|
|
2661
2692
|
const colKeys = Array.from({ length: Math.max(1, columnCount) }, (_, i) => `skeleton-col-${i}`);
|
|
2662
|
-
return /* @__PURE__ */ jsx(Fragment, { children: rowKeys.map((rowKey) => /* @__PURE__ */ jsx(
|
|
2693
|
+
return /* @__PURE__ */ jsx(Fragment, { children: rowKeys.map((rowKey) => /* @__PURE__ */ jsx(
|
|
2694
|
+
"tr",
|
|
2695
|
+
{
|
|
2696
|
+
className: "border-b border-border/60 last:border-b-0",
|
|
2697
|
+
"data-testid": "table-skeleton-row",
|
|
2698
|
+
children: colKeys.map((colKey) => /* @__PURE__ */ jsx("td", { className: cellClassName, children: /* @__PURE__ */ jsx("span", { className: "block h-3 w-full animate-pulse rounded bg-muted" }) }, `${rowKey}-${colKey}`))
|
|
2699
|
+
},
|
|
2700
|
+
rowKey
|
|
2701
|
+
)) });
|
|
2663
2702
|
}
|
|
2664
2703
|
function SortIndicator({ active, direction }) {
|
|
2665
|
-
const className = cn("size-3.5 shrink-0", active ? "text-
|
|
2704
|
+
const className = cn("size-3.5 shrink-0", active ? "text-primary" : "text-muted-foreground");
|
|
2666
2705
|
if (!active) return /* @__PURE__ */ jsx(ChevronsUpDown, { "aria-hidden": "true", className });
|
|
2667
2706
|
return direction === "asc" ? /* @__PURE__ */ jsx(ChevronUp, { "aria-hidden": "true", className }) : /* @__PURE__ */ jsx(ChevronDown, { "aria-hidden": "true", className });
|
|
2668
2707
|
}
|
|
2669
2708
|
|
|
2670
2709
|
// src/components/select/selectVariants.ts
|
|
2671
2710
|
var selectVariantClass = {
|
|
2672
|
-
default: "border border-input bg-background hover:border-ring",
|
|
2711
|
+
default: "border border-input bg-background shadow-xs hover:border-ring",
|
|
2673
2712
|
filled: "border border-transparent bg-muted hover:bg-muted/80",
|
|
2674
2713
|
ghost: "border border-transparent bg-transparent hover:bg-accent"
|
|
2675
2714
|
};
|
|
2676
2715
|
var selectSizeClass = {
|
|
2677
|
-
sm: "h-8 rounded-
|
|
2678
|
-
md: "h-
|
|
2679
|
-
lg: "h-11 rounded-
|
|
2716
|
+
sm: "h-8 rounded-lg ps-2.5 pe-8 text-sm",
|
|
2717
|
+
md: "h-10 rounded-lg ps-3 pe-9 text-sm",
|
|
2718
|
+
lg: "h-11 rounded-lg ps-4 pe-10 text-base"
|
|
2680
2719
|
};
|
|
2681
|
-
var selectBaseClass = "group/select relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus:ring-[3px] focus:ring-primary-glow aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-destructive/40 disabled:pointer-events-none disabled:opacity-50 cursor-pointer data-[placeholder]:text-muted-foreground";
|
|
2720
|
+
var selectBaseClass = "group/select relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus:border-primary focus:ring-[3px] focus:ring-primary-glow aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:border-destructive aria-[invalid=true]:focus:ring-destructive/40 disabled:pointer-events-none disabled:opacity-50 cursor-pointer data-[placeholder]:text-muted-foreground";
|
|
2682
2721
|
var selectContentClass = "z-50 max-h-(--radix-select-content-available-height) min-w-(--radix-select-trigger-width) overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95";
|
|
2683
2722
|
var selectViewportClass = "p-1";
|
|
2684
2723
|
var selectItemClass = "relative flex w-full cursor-pointer select-none items-center rounded-sm py-1.5 ps-8 pe-2 text-sm outline-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50";
|
|
@@ -2689,9 +2728,9 @@ var selectStatusClass = "flex items-center justify-center gap-2 px-2 py-6 text-c
|
|
|
2689
2728
|
|
|
2690
2729
|
// src/components/multi-select/multiSelectVariants.ts
|
|
2691
2730
|
var multiSelectTriggerSizeClass = {
|
|
2692
|
-
sm: "min-h-8 rounded-
|
|
2693
|
-
md: "min-h-
|
|
2694
|
-
lg: "min-h-11 rounded-
|
|
2731
|
+
sm: "min-h-8 rounded-lg ps-2.5 pe-8 py-1 text-sm",
|
|
2732
|
+
md: "min-h-10 rounded-lg ps-3 pe-9 py-1 text-sm",
|
|
2733
|
+
lg: "min-h-11 rounded-lg ps-4 pe-10 py-1.5 text-base"
|
|
2695
2734
|
};
|
|
2696
2735
|
var multiSelectValueRowClass = "flex min-w-0 flex-1 flex-wrap items-center gap-1";
|
|
2697
2736
|
var multiSelectChipClass = "max-w-full gap-1 pe-1";
|
|
@@ -3164,7 +3203,7 @@ function ListPageFilterBar({
|
|
|
3164
3203
|
},
|
|
3165
3204
|
filter.key
|
|
3166
3205
|
)) });
|
|
3167
|
-
const header = /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 border-b border-
|
|
3206
|
+
const header = /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 border-b-2 border-primary bg-panel-header px-4 py-3", children: [
|
|
3168
3207
|
/* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground", children: labels.title ?? "Filters" }),
|
|
3169
3208
|
activeCount > 0 ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center rounded-full bg-primary/10 px-2 py-0.5 text-xs font-semibold text-primary", children: [
|
|
3170
3209
|
activeCount,
|
|
@@ -3176,7 +3215,7 @@ function ListPageFilterBar({
|
|
|
3176
3215
|
labels.reset
|
|
3177
3216
|
] }) : null
|
|
3178
3217
|
] });
|
|
3179
|
-
const cardClass = "overflow-hidden rounded-xl border border-border bg-card";
|
|
3218
|
+
const cardClass = "overflow-hidden rounded-xl border border-border bg-card shadow-[var(--shadow-card)]";
|
|
3180
3219
|
if (manual) {
|
|
3181
3220
|
return /* @__PURE__ */ jsxs("form", { "data-slot": "list-page-filter-bar", className: cardClass, onSubmit: apply, children: [
|
|
3182
3221
|
header,
|
|
@@ -3660,14 +3699,14 @@ var Switch = forwardRef(function Switch2({
|
|
|
3660
3699
|
|
|
3661
3700
|
// src/components/textarea/textareaVariants.ts
|
|
3662
3701
|
var textareaVariantClass = {
|
|
3663
|
-
default: "border border-input bg-background hover:border-ring",
|
|
3702
|
+
default: "border border-input bg-background shadow-xs hover:border-ring",
|
|
3664
3703
|
filled: "border border-transparent bg-muted hover:bg-muted/80",
|
|
3665
3704
|
ghost: "border border-transparent bg-transparent hover:bg-accent"
|
|
3666
3705
|
};
|
|
3667
3706
|
var textareaSizeClass = {
|
|
3668
|
-
sm: "rounded-
|
|
3669
|
-
md: "rounded-
|
|
3670
|
-
lg: "rounded-
|
|
3707
|
+
sm: "rounded-lg px-2.5 py-1.5 text-sm",
|
|
3708
|
+
md: "rounded-lg px-3 py-2 text-sm",
|
|
3709
|
+
lg: "rounded-lg px-4 py-2.5 text-base"
|
|
3671
3710
|
};
|
|
3672
3711
|
var textareaResizeClass = {
|
|
3673
3712
|
none: "resize-none",
|
|
@@ -3675,7 +3714,7 @@ var textareaResizeClass = {
|
|
|
3675
3714
|
horizontal: "resize-x",
|
|
3676
3715
|
both: "resize"
|
|
3677
3716
|
};
|
|
3678
|
-
var textareaBaseClass = "group/textarea relative flex w-full text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-within:ring-[3px] focus-within:ring-primary-glow aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-within:ring-destructive/40 has-[textarea:disabled]:pointer-events-none has-[textarea:disabled]:opacity-50";
|
|
3717
|
+
var textareaBaseClass = "group/textarea relative flex w-full text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-within:border-primary focus-within:ring-[3px] focus-within:ring-primary-glow aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-within:border-destructive aria-[invalid=true]:focus-within:ring-destructive/40 has-[textarea:disabled]:pointer-events-none has-[textarea:disabled]:opacity-50";
|
|
3679
3718
|
var Textarea = forwardRef(function Textarea2({
|
|
3680
3719
|
variant = "default",
|
|
3681
3720
|
textareaSize = "md",
|