@dimaan/ui 0.0.31 → 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 +194 -196
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +194 -196
- package/dist/index.js.map +1 -1
- package/dist/preset.css +6 -0
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -535,7 +535,7 @@ declare const datePickerTriggerVariantClass: Record<DatePickerVariant, string>;
|
|
|
535
535
|
* Logical properties keep RTL working free.
|
|
536
536
|
*/
|
|
537
537
|
declare const datePickerTriggerSizeClass: Record<DatePickerSize, string>;
|
|
538
|
-
declare const 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";
|
|
538
|
+
declare const 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";
|
|
539
539
|
/** Empty-state trigger text (placeholder color). */
|
|
540
540
|
declare const datePickerPlaceholderClass = "truncate text-muted-foreground";
|
|
541
541
|
/** Filled-state trigger text. */
|
|
@@ -1374,7 +1374,7 @@ type InputVariant = 'default' | 'filled' | 'ghost';
|
|
|
1374
1374
|
type InputSize = 'sm' | 'md' | 'lg';
|
|
1375
1375
|
declare const inputVariantClass: Record<InputVariant, string>;
|
|
1376
1376
|
declare const inputSizeClass: Record<InputSize, string>;
|
|
1377
|
-
declare const 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";
|
|
1377
|
+
declare const 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";
|
|
1378
1378
|
|
|
1379
1379
|
interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {
|
|
1380
1380
|
variant?: InputVariant;
|
|
@@ -1602,7 +1602,7 @@ declare const selectVariantClass: Record<SelectVariant, string>;
|
|
|
1602
1602
|
* properties keep RTL working free.
|
|
1603
1603
|
*/
|
|
1604
1604
|
declare const selectSizeClass: Record<SelectSize, string>;
|
|
1605
|
-
declare const 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";
|
|
1605
|
+
declare const 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";
|
|
1606
1606
|
|
|
1607
1607
|
interface SelectOption {
|
|
1608
1608
|
value: string;
|
|
@@ -2431,7 +2431,7 @@ type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';
|
|
|
2431
2431
|
declare const textareaVariantClass: Record<TextareaVariant, string>;
|
|
2432
2432
|
declare const textareaSizeClass: Record<TextareaSize, string>;
|
|
2433
2433
|
declare const textareaResizeClass: Record<TextareaResize, string>;
|
|
2434
|
-
declare const 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";
|
|
2434
|
+
declare const 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";
|
|
2435
2435
|
|
|
2436
2436
|
interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {
|
|
2437
2437
|
variant?: TextareaVariant;
|
package/dist/index.d.ts
CHANGED
|
@@ -535,7 +535,7 @@ declare const datePickerTriggerVariantClass: Record<DatePickerVariant, string>;
|
|
|
535
535
|
* Logical properties keep RTL working free.
|
|
536
536
|
*/
|
|
537
537
|
declare const datePickerTriggerSizeClass: Record<DatePickerSize, string>;
|
|
538
|
-
declare const 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";
|
|
538
|
+
declare const 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";
|
|
539
539
|
/** Empty-state trigger text (placeholder color). */
|
|
540
540
|
declare const datePickerPlaceholderClass = "truncate text-muted-foreground";
|
|
541
541
|
/** Filled-state trigger text. */
|
|
@@ -1374,7 +1374,7 @@ type InputVariant = 'default' | 'filled' | 'ghost';
|
|
|
1374
1374
|
type InputSize = 'sm' | 'md' | 'lg';
|
|
1375
1375
|
declare const inputVariantClass: Record<InputVariant, string>;
|
|
1376
1376
|
declare const inputSizeClass: Record<InputSize, string>;
|
|
1377
|
-
declare const 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";
|
|
1377
|
+
declare const 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";
|
|
1378
1378
|
|
|
1379
1379
|
interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {
|
|
1380
1380
|
variant?: InputVariant;
|
|
@@ -1602,7 +1602,7 @@ declare const selectVariantClass: Record<SelectVariant, string>;
|
|
|
1602
1602
|
* properties keep RTL working free.
|
|
1603
1603
|
*/
|
|
1604
1604
|
declare const selectSizeClass: Record<SelectSize, string>;
|
|
1605
|
-
declare const 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";
|
|
1605
|
+
declare const 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";
|
|
1606
1606
|
|
|
1607
1607
|
interface SelectOption {
|
|
1608
1608
|
value: string;
|
|
@@ -2431,7 +2431,7 @@ type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';
|
|
|
2431
2431
|
declare const textareaVariantClass: Record<TextareaVariant, string>;
|
|
2432
2432
|
declare const textareaSizeClass: Record<TextareaSize, string>;
|
|
2433
2433
|
declare const textareaResizeClass: Record<TextareaResize, string>;
|
|
2434
|
-
declare const 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";
|
|
2434
|
+
declare const 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";
|
|
2435
2435
|
|
|
2436
2436
|
interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {
|
|
2437
2437
|
variant?: TextareaVariant;
|
package/dist/index.js
CHANGED
|
@@ -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",
|
|
@@ -2476,182 +2476,180 @@ function Table(props) {
|
|
|
2476
2476
|
children: bulkActions(selectedRowsInData)
|
|
2477
2477
|
}
|
|
2478
2478
|
),
|
|
2479
|
-
/* @__PURE__ */ jsxs(
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
),
|
|
2488
|
-
/* @__PURE__ */ jsx(
|
|
2489
|
-
"div",
|
|
2490
|
-
{
|
|
2491
|
-
className: cn("overflow-x-auto", maxHeight !== void 0 && "overflow-y-auto"),
|
|
2492
|
-
style: maxHeight !== void 0 ? { maxHeight } : void 0,
|
|
2493
|
-
children: /* @__PURE__ */ jsxs(
|
|
2494
|
-
"table",
|
|
2479
|
+
/* @__PURE__ */ jsxs(
|
|
2480
|
+
"div",
|
|
2481
|
+
{
|
|
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",
|
|
2495
2487
|
{
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
"
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
indeterminate: someOnPageSelected,
|
|
2523
|
-
disabled: selectableRowIds.length === 0,
|
|
2524
|
-
onCheckedChange: toggleHeader
|
|
2525
|
-
}
|
|
2526
|
-
) }) : null,
|
|
2527
|
-
columns.map((column) => {
|
|
2528
|
-
const isSorted = effectiveSort.columnId === column.id;
|
|
2529
|
-
const ariaSort = isSorted ? effectiveSort.direction === "asc" ? "ascending" : "descending" : "none";
|
|
2530
|
-
return /* @__PURE__ */ jsx(
|
|
2531
|
-
"th",
|
|
2532
|
-
{
|
|
2533
|
-
scope: "col",
|
|
2534
|
-
"aria-sort": column.sortable ? ariaSort : void 0,
|
|
2535
|
-
className: cn(
|
|
2536
|
-
sizeClasses.head,
|
|
2537
|
-
alignClass[column.align ?? "start"],
|
|
2538
|
-
column.className,
|
|
2539
|
-
isSorted && "text-primary"
|
|
2540
|
-
),
|
|
2541
|
-
children: column.sortable ? /* @__PURE__ */ jsxs(
|
|
2542
|
-
"button",
|
|
2543
|
-
{
|
|
2544
|
-
type: "button",
|
|
2545
|
-
onClick: () => handleSortClick(column.id),
|
|
2546
|
-
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",
|
|
2547
|
-
"aria-label": sortAriaLabel(column, effectiveSort),
|
|
2548
|
-
children: [
|
|
2549
|
-
/* @__PURE__ */ jsx("span", { children: renderHeader(column.header) }),
|
|
2550
|
-
/* @__PURE__ */ jsx(
|
|
2551
|
-
SortIndicator,
|
|
2552
|
-
{
|
|
2553
|
-
active: isSorted,
|
|
2554
|
-
direction: isSorted ? effectiveSort.direction : null
|
|
2555
|
-
}
|
|
2556
|
-
)
|
|
2557
|
-
]
|
|
2558
|
-
}
|
|
2559
|
-
) : renderHeader(column.header)
|
|
2560
|
-
},
|
|
2561
|
-
column.id
|
|
2562
|
-
);
|
|
2563
|
-
})
|
|
2564
|
-
] })
|
|
2565
|
-
}
|
|
2566
|
-
),
|
|
2567
|
-
/* @__PURE__ */ jsx("tbody", { children: loading ? /* @__PURE__ */ jsx(
|
|
2568
|
-
SkeletonRows,
|
|
2569
|
-
{
|
|
2570
|
-
rowCount: skeletonCount,
|
|
2571
|
-
columnCount: totalColumnCount,
|
|
2572
|
-
cellClassName: sizeClasses.cell
|
|
2573
|
-
}
|
|
2574
|
-
) : data.length === 0 ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx(
|
|
2575
|
-
"td",
|
|
2576
|
-
{
|
|
2577
|
-
colSpan: totalColumnCount,
|
|
2578
|
-
className: cn(sizeClasses.cell, "py-10 text-center text-muted-foreground"),
|
|
2579
|
-
children: emptyState ?? "No data"
|
|
2580
|
-
}
|
|
2581
|
-
) }) : data.map((row, rowIndex) => {
|
|
2582
|
-
const id = getRowId(row, rowIndex);
|
|
2583
|
-
const isSelected = selected.has(id);
|
|
2584
|
-
const rowSelectable = isRowSelectable ? isRowSelectable(row) : true;
|
|
2585
|
-
const accent = getRowAccent?.(row, rowIndex);
|
|
2586
|
-
return /* @__PURE__ */ jsxs(
|
|
2587
|
-
"tr",
|
|
2588
|
-
{
|
|
2589
|
-
"data-selected": isSelected ? "true" : void 0,
|
|
2590
|
-
"aria-selected": enableRowSelection ? isSelected : void 0,
|
|
2591
|
-
className: cn(
|
|
2592
|
-
"border-b border-border/60 last:border-b-0 transition-colors",
|
|
2593
|
-
"hover:bg-muted/60",
|
|
2594
|
-
striped && rowIndex % 2 === 1 && "bg-muted/20",
|
|
2595
|
-
isSelected && selectedRowClass,
|
|
2596
|
-
onRowClick && "cursor-pointer"
|
|
2597
|
-
),
|
|
2598
|
-
onClick: onRowClick ? () => onRowClick(row, rowIndex) : void 0,
|
|
2599
|
-
children: [
|
|
2600
|
-
enableRowSelection ? /* @__PURE__ */ jsxs("td", { className: cn(sizeClasses.cell, "relative w-10"), children: [
|
|
2601
|
-
accent ? /* @__PURE__ */ jsx(RowAccent, { color: accent }) : null,
|
|
2602
|
-
/* @__PURE__ */ jsx(
|
|
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",
|
|
2492
|
+
{
|
|
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",
|
|
2502
|
+
{
|
|
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(
|
|
2603
2514
|
Checkbox,
|
|
2604
2515
|
{
|
|
2605
|
-
"aria-label":
|
|
2606
|
-
checked:
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2516
|
+
"aria-label": "Select all rows on this page",
|
|
2517
|
+
checked: allOnPageSelected,
|
|
2518
|
+
indeterminate: someOnPageSelected,
|
|
2519
|
+
disabled: selectableRowIds.length === 0,
|
|
2520
|
+
onCheckedChange: toggleHeader
|
|
2610
2521
|
}
|
|
2611
|
-
)
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
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",
|
|
2539
|
+
{
|
|
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
|
+
]
|
|
2554
|
+
}
|
|
2555
|
+
) : renderHeader(column.header)
|
|
2556
|
+
},
|
|
2557
|
+
column.id
|
|
2558
|
+
);
|
|
2559
|
+
})
|
|
2560
|
+
] })
|
|
2561
|
+
}
|
|
2562
|
+
),
|
|
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",
|
|
2584
|
+
{
|
|
2585
|
+
"data-selected": isSelected ? "true" : void 0,
|
|
2586
|
+
"aria-selected": enableRowSelection ? isSelected : void 0,
|
|
2587
|
+
className: cn(
|
|
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"
|
|
2593
|
+
),
|
|
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
|
+
]
|
|
2629
|
+
},
|
|
2630
|
+
id
|
|
2631
|
+
);
|
|
2632
|
+
}) })
|
|
2633
|
+
]
|
|
2634
|
+
}
|
|
2635
|
+
)
|
|
2638
2636
|
}
|
|
2639
|
-
)
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
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
|
+
]
|
|
2651
|
+
}
|
|
2652
|
+
)
|
|
2655
2653
|
] });
|
|
2656
2654
|
}
|
|
2657
2655
|
function renderHeader(header) {
|
|
@@ -2710,16 +2708,16 @@ function SortIndicator({ active, direction }) {
|
|
|
2710
2708
|
|
|
2711
2709
|
// src/components/select/selectVariants.ts
|
|
2712
2710
|
var selectVariantClass = {
|
|
2713
|
-
default: "border border-input bg-background hover:border-ring",
|
|
2711
|
+
default: "border border-input bg-background shadow-xs hover:border-ring",
|
|
2714
2712
|
filled: "border border-transparent bg-muted hover:bg-muted/80",
|
|
2715
2713
|
ghost: "border border-transparent bg-transparent hover:bg-accent"
|
|
2716
2714
|
};
|
|
2717
2715
|
var selectSizeClass = {
|
|
2718
|
-
sm: "h-8 rounded-
|
|
2719
|
-
md: "h-
|
|
2720
|
-
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"
|
|
2721
2719
|
};
|
|
2722
|
-
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";
|
|
2723
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";
|
|
2724
2722
|
var selectViewportClass = "p-1";
|
|
2725
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";
|
|
@@ -2730,9 +2728,9 @@ var selectStatusClass = "flex items-center justify-center gap-2 px-2 py-6 text-c
|
|
|
2730
2728
|
|
|
2731
2729
|
// src/components/multi-select/multiSelectVariants.ts
|
|
2732
2730
|
var multiSelectTriggerSizeClass = {
|
|
2733
|
-
sm: "min-h-8 rounded-
|
|
2734
|
-
md: "min-h-
|
|
2735
|
-
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"
|
|
2736
2734
|
};
|
|
2737
2735
|
var multiSelectValueRowClass = "flex min-w-0 flex-1 flex-wrap items-center gap-1";
|
|
2738
2736
|
var multiSelectChipClass = "max-w-full gap-1 pe-1";
|
|
@@ -3205,7 +3203,7 @@ function ListPageFilterBar({
|
|
|
3205
3203
|
},
|
|
3206
3204
|
filter.key
|
|
3207
3205
|
)) });
|
|
3208
|
-
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: [
|
|
3209
3207
|
/* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground", children: labels.title ?? "Filters" }),
|
|
3210
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: [
|
|
3211
3209
|
activeCount,
|
|
@@ -3217,7 +3215,7 @@ function ListPageFilterBar({
|
|
|
3217
3215
|
labels.reset
|
|
3218
3216
|
] }) : null
|
|
3219
3217
|
] });
|
|
3220
|
-
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)]";
|
|
3221
3219
|
if (manual) {
|
|
3222
3220
|
return /* @__PURE__ */ jsxs("form", { "data-slot": "list-page-filter-bar", className: cardClass, onSubmit: apply, children: [
|
|
3223
3221
|
header,
|
|
@@ -3701,14 +3699,14 @@ var Switch = forwardRef(function Switch2({
|
|
|
3701
3699
|
|
|
3702
3700
|
// src/components/textarea/textareaVariants.ts
|
|
3703
3701
|
var textareaVariantClass = {
|
|
3704
|
-
default: "border border-input bg-background hover:border-ring",
|
|
3702
|
+
default: "border border-input bg-background shadow-xs hover:border-ring",
|
|
3705
3703
|
filled: "border border-transparent bg-muted hover:bg-muted/80",
|
|
3706
3704
|
ghost: "border border-transparent bg-transparent hover:bg-accent"
|
|
3707
3705
|
};
|
|
3708
3706
|
var textareaSizeClass = {
|
|
3709
|
-
sm: "rounded-
|
|
3710
|
-
md: "rounded-
|
|
3711
|
-
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"
|
|
3712
3710
|
};
|
|
3713
3711
|
var textareaResizeClass = {
|
|
3714
3712
|
none: "resize-none",
|
|
@@ -3716,7 +3714,7 @@ var textareaResizeClass = {
|
|
|
3716
3714
|
horizontal: "resize-x",
|
|
3717
3715
|
both: "resize"
|
|
3718
3716
|
};
|
|
3719
|
-
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";
|
|
3720
3718
|
var Textarea = forwardRef(function Textarea2({
|
|
3721
3719
|
variant = "default",
|
|
3722
3720
|
textareaSize = "md",
|