acai-ui-library 0.1.13 → 0.1.14
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/components/alert.cjs +3 -2
- package/dist/components/alert.cjs.map +1 -1
- package/dist/components/alert.js +3 -2
- package/dist/components/alert.js.map +1 -1
- package/dist/components/card.cjs +1 -1
- package/dist/components/card.cjs.map +1 -1
- package/dist/components/card.js +1 -1
- package/dist/components/card.js.map +1 -1
- package/dist/components/checkbox.cjs +2 -1
- package/dist/components/checkbox.cjs.map +1 -1
- package/dist/components/checkbox.js +2 -1
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/data-table.cjs +2 -1
- package/dist/components/data-table.cjs.map +1 -1
- package/dist/components/data-table.js +2 -1
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-picker.cjs.map +1 -1
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/impersonation-banner.cjs +137 -0
- package/dist/components/impersonation-banner.cjs.map +1 -0
- package/dist/components/impersonation-banner.d.cts +36 -0
- package/dist/components/impersonation-banner.d.ts +36 -0
- package/dist/components/impersonation-banner.js +101 -0
- package/dist/components/impersonation-banner.js.map +1 -0
- package/dist/components/input.cjs +2 -1
- package/dist/components/input.cjs.map +1 -1
- package/dist/components/input.js +2 -1
- package/dist/components/input.js.map +1 -1
- package/dist/components/item.cjs +1 -2
- package/dist/components/item.cjs.map +1 -1
- package/dist/components/item.js +1 -2
- package/dist/components/item.js.map +1 -1
- package/dist/components/pagination.cjs +3 -1
- package/dist/components/pagination.cjs.map +1 -1
- package/dist/components/pagination.d.cts +1 -1
- package/dist/components/pagination.d.ts +1 -1
- package/dist/components/pagination.js +3 -1
- package/dist/components/pagination.js.map +1 -1
- package/dist/components/read-only-guard.cjs +103 -0
- package/dist/components/read-only-guard.cjs.map +1 -0
- package/dist/components/read-only-guard.d.cts +40 -0
- package/dist/components/read-only-guard.d.ts +40 -0
- package/dist/components/read-only-guard.js +64 -0
- package/dist/components/read-only-guard.js.map +1 -0
- package/dist/components/stepper.cjs.map +1 -1
- package/dist/components/stepper.js.map +1 -1
- package/dist/components/typography.cjs +4 -4
- package/dist/components/typography.cjs.map +1 -1
- package/dist/components/typography.js +4 -4
- package/dist/components/typography.js.map +1 -1
- package/dist/index.cjs +236 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +224 -12
- package/dist/index.js.map +1 -1
- package/dist/lib/impersonation.cjs +127 -0
- package/dist/lib/impersonation.cjs.map +1 -0
- package/dist/lib/impersonation.d.cts +45 -0
- package/dist/lib/impersonation.d.ts +45 -0
- package/dist/lib/impersonation.js +86 -0
- package/dist/lib/impersonation.js.map +1 -0
- package/package.json +1 -1
|
@@ -76,12 +76,13 @@ var Alert = React.forwardRef(({ className, variant, ...props }, ref) => /* @__PU
|
|
|
76
76
|
}
|
|
77
77
|
));
|
|
78
78
|
Alert.displayName = "Alert";
|
|
79
|
-
var AlertTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
79
|
+
var AlertTitle = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
80
80
|
"h5",
|
|
81
81
|
{
|
|
82
82
|
ref,
|
|
83
83
|
className: cn("mb-1 font-medium leading-none tracking-tight", className),
|
|
84
|
-
...props
|
|
84
|
+
...props,
|
|
85
|
+
children
|
|
85
86
|
}
|
|
86
87
|
));
|
|
87
88
|
AlertTitle.displayName = "AlertTitle";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/alert.tsx","../../src/lib/utils.ts"],"sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border p-4 [&>svg~*]:ps-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:start-4 [&>svg]:top-4 [&>svg]:text-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive: \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n success: \"border-success/50 text-success [&>svg]:text-success\",\n warning: \"border-warning/50 text-warning-foreground bg-warning/10 [&>svg]:text-warning\",\n info: \"border-primary/50 text-primary [&>svg]:text-primary\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n))\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n
|
|
1
|
+
{"version":3,"sources":["../../src/components/alert.tsx","../../src/lib/utils.ts"],"sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border p-4 [&>svg~*]:ps-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:start-4 [&>svg]:top-4 [&>svg]:text-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive: \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n success: \"border-success/50 text-success [&>svg]:text-success\",\n warning: \"border-warning/50 text-warning-foreground bg-warning/10 [&>svg]:text-warning\",\n info: \"border-primary/50 text-primary [&>svg]:text-primary\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n))\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, children, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n >\n {children}\n </h5>\n))\nAlertTitle.displayName = \"AlertTitle\"\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm [&_p]:leading-relaxed\", className)}\n {...props}\n />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\nconst AlertAction = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"mt-3 flex flex-wrap items-center gap-2 [&>button]:h-8 [&>button]:px-3 [&>button]:text-xs\",\n className\n )}\n {...props}\n />\n))\nAlertAction.displayName = \"AlertAction\"\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction, alertVariants }\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAuB;AACvB,sCAAuC;;;ACDvC,kBAAsC;AACtC,4BAAwB;AAEjB,SAAS,MAAM,QAAsB;AAC1C,aAAO,mCAAQ,kBAAK,MAAM,CAAC;AAC7B;;;ADqBE;AAtBF,IAAM,oBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,IAAM,QAAc,iBAGlB,CAAC,EAAE,WAAW,SAAS,GAAG,MAAM,GAAG,QACnC;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,MAAK;AAAA,IACL,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;AAAA,IAClD,GAAG;AAAA;AACN,CACD;AACD,MAAM,cAAc;AAEpB,IAAM,aAAmB,iBAGvB,CAAC,EAAE,WAAW,UAAU,GAAG,MAAM,GAAG,QACpC;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW,GAAG,gDAAgD,SAAS;AAAA,IACtE,GAAG;AAAA,IAEH;AAAA;AACH,CACD;AACD,WAAW,cAAc;AAEzB,IAAM,mBAAyB,iBAG7B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW,GAAG,iCAAiC,SAAS;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AACD,iBAAiB,cAAc;AAE/B,IAAM,cAAoB,iBAGxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,YAAY,cAAc;","names":[]}
|
package/dist/components/alert.js
CHANGED
|
@@ -38,12 +38,13 @@ var Alert = React.forwardRef(({ className, variant, ...props }, ref) => /* @__PU
|
|
|
38
38
|
}
|
|
39
39
|
));
|
|
40
40
|
Alert.displayName = "Alert";
|
|
41
|
-
var AlertTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
41
|
+
var AlertTitle = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
42
42
|
"h5",
|
|
43
43
|
{
|
|
44
44
|
ref,
|
|
45
45
|
className: cn("mb-1 font-medium leading-none tracking-tight", className),
|
|
46
|
-
...props
|
|
46
|
+
...props,
|
|
47
|
+
children
|
|
47
48
|
}
|
|
48
49
|
));
|
|
49
50
|
AlertTitle.displayName = "AlertTitle";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/alert.tsx","../../src/lib/utils.ts"],"sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border p-4 [&>svg~*]:ps-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:start-4 [&>svg]:top-4 [&>svg]:text-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive: \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n success: \"border-success/50 text-success [&>svg]:text-success\",\n warning: \"border-warning/50 text-warning-foreground bg-warning/10 [&>svg]:text-warning\",\n info: \"border-primary/50 text-primary [&>svg]:text-primary\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n))\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n
|
|
1
|
+
{"version":3,"sources":["../../src/components/alert.tsx","../../src/lib/utils.ts"],"sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border p-4 [&>svg~*]:ps-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:start-4 [&>svg]:top-4 [&>svg]:text-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive: \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n success: \"border-success/50 text-success [&>svg]:text-success\",\n warning: \"border-warning/50 text-warning-foreground bg-warning/10 [&>svg]:text-warning\",\n info: \"border-primary/50 text-primary [&>svg]:text-primary\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n))\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, children, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n >\n {children}\n </h5>\n))\nAlertTitle.displayName = \"AlertTitle\"\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm [&_p]:leading-relaxed\", className)}\n {...props}\n />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\nconst AlertAction = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"mt-3 flex flex-wrap items-center gap-2 [&>button]:h-8 [&>button]:px-3 [&>button]:text-xs\",\n className\n )}\n {...props}\n />\n))\nAlertAction.displayName = \"AlertAction\"\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction, alertVariants }\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"],"mappings":";AAAA,YAAY,WAAW;AACvB,SAAS,WAA8B;;;ACDvC,SAA0B,YAAY;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;ADqBE;AAtBF,IAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,IAAM,QAAc,iBAGlB,CAAC,EAAE,WAAW,SAAS,GAAG,MAAM,GAAG,QACnC;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,MAAK;AAAA,IACL,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;AAAA,IAClD,GAAG;AAAA;AACN,CACD;AACD,MAAM,cAAc;AAEpB,IAAM,aAAmB,iBAGvB,CAAC,EAAE,WAAW,UAAU,GAAG,MAAM,GAAG,QACpC;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW,GAAG,gDAAgD,SAAS;AAAA,IACtE,GAAG;AAAA,IAEH;AAAA;AACH,CACD;AACD,WAAW,cAAc;AAEzB,IAAM,mBAAyB,iBAG7B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW,GAAG,iCAAiC,SAAS;AAAA,IACvD,GAAG;AAAA;AACN,CACD;AACD,iBAAiB,cAAc;AAE/B,IAAM,cAAoB,iBAGxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN,CACD;AACD,YAAY,cAAc;","names":[]}
|
package/dist/components/card.cjs
CHANGED
|
@@ -78,7 +78,7 @@ var CardHeader = React.forwardRef(
|
|
|
78
78
|
);
|
|
79
79
|
CardHeader.displayName = "CardHeader";
|
|
80
80
|
var CardTitle = React.forwardRef(
|
|
81
|
-
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", { ref, className: cn("text-2xl font-semibold leading-none tracking-tight", className), ...props })
|
|
81
|
+
({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", { ref, className: cn("text-2xl font-semibold leading-none tracking-tight", className), ...props, children })
|
|
82
82
|
);
|
|
83
83
|
CardTitle.displayName = "CardTitle";
|
|
84
84
|
var CardDescription = React.forwardRef(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/card.tsx","../../src/lib/utils.ts"],"sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\nconst cardVariants = cva(\"rounded-lg text-card-foreground\", {\n variants: {\n variant: {\n default: \"border bg-card shadow-sm\",\n outline: \"border bg-transparent\",\n elevated: \"bg-card shadow-md hover:shadow-lg transition-shadow\",\n ghost: \"bg-transparent\",\n warning: \"border border-[var(--hc-color-warning)] bg-card shadow-sm\",\n info: \"border border-[var(--hc-color-primary)] bg-card shadow-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n})\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {\n /** Optional image/media slot rendered above the CardHeader with rounded top corners */\n image?: React.ReactNode\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, image, children, ...props }, ref) => (\n <div ref={ref} className={cn(cardVariants({ variant }), image && \"overflow-hidden\", className)} {...props}>\n {image && (\n <div className=\"rounded-t-lg overflow-hidden\">\n {image}\n </div>\n )}\n {children}\n </div>\n )\n)\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n )\n)\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)} {...props}
|
|
1
|
+
{"version":3,"sources":["../../src/components/card.tsx","../../src/lib/utils.ts"],"sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\nconst cardVariants = cva(\"rounded-lg text-card-foreground\", {\n variants: {\n variant: {\n default: \"border bg-card shadow-sm\",\n outline: \"border bg-transparent\",\n elevated: \"bg-card shadow-md hover:shadow-lg transition-shadow\",\n ghost: \"bg-transparent\",\n warning: \"border border-[var(--hc-color-warning)] bg-card shadow-sm\",\n info: \"border border-[var(--hc-color-primary)] bg-card shadow-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n})\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {\n /** Optional image/media slot rendered above the CardHeader with rounded top corners */\n image?: React.ReactNode\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, image, children, ...props }, ref) => (\n <div ref={ref} className={cn(cardVariants({ variant }), image && \"overflow-hidden\", className)} {...props}>\n {image && (\n <div className=\"rounded-t-lg overflow-hidden\">\n {image}\n </div>\n )}\n {children}\n </div>\n )\n)\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n )\n)\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, children, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)} {...props}>\n {children}\n </h3>\n )\n)\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n )\n)\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n )\n)\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center p-6 pt-0\", className)} {...props} />\n )\n)\nCardFooter.displayName = \"CardFooter\"\n\nexport interface CardKPIProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Icon element rendered inside the icon box */\n icon?: React.ReactNode\n /** Background color for the icon box. Defaults to var(--hc-banner-success-bg). */\n iconBg?: string\n /** KPI label text (e.g. \"Open Cases\") */\n label: string\n /** KPI number value */\n value: string | number\n /** Change / trend text (e.g. \"+6 from last week\") */\n changeText?: string\n /** Color for the change text (e.g. var(--hc-color-success), var(--hc-color-destructive)) */\n changeColor?: string\n}\n\nconst CardKPI = React.forwardRef<HTMLDivElement, CardKPIProps>(\n ({ icon, iconBg = \"var(--hc-banner-success-bg)\", label, value, changeText, changeColor, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"grid min-h-[140px] grid-rows-[auto_1fr_auto] gap-4 rounded-lg border border-[var(--hc-color-border-subtle)] bg-background p-5\",\n className\n )}\n {...props}\n >\n {/* Top row: label + icon — icon stays put even when changeText is missing */}\n <div className=\"flex items-start justify-between gap-3\">\n <span className=\"text-sm leading-5 font-medium text-muted-foreground\">{label}</span>\n {icon && (\n <div\n className=\"flex size-10 shrink-0 items-center justify-center rounded-md [&>svg]:size-5\"\n style={{ backgroundColor: iconBg }}\n >\n {icon}\n </div>\n )}\n </div>\n {/* Middle: value (anchored to bottom via grid-row) */}\n <div className=\"flex items-end\">\n <span className=\"text-3xl leading-none font-semibold text-foreground tracking-tight\">{value}</span>\n </div>\n {/* Bottom: change text — always rendered (as spacer when missing) to keep layout stable */}\n <div className=\"min-h-[20px]\">\n {changeText && (\n <span\n className=\"text-sm leading-5 font-medium\"\n style={changeColor ? { color: changeColor } : undefined}\n >\n {changeText}\n </span>\n )}\n </div>\n </div>\n )\n)\nCardKPI.displayName = \"CardKPI\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent, CardKPI }\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAuB;AACvB,sCAAuC;;;ACDvC,kBAAsC;AACtC,4BAAwB;AAEjB,SAAS,MAAM,QAAsB;AAC1C,aAAO,mCAAQ,kBAAK,MAAM,CAAC;AAC7B;;;ADwBI;AAzBJ,IAAM,mBAAe,qCAAI,mCAAmC;AAAA,EAC1D,UAAU;AAAA,IACR,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO;AAAA,MACP,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,EACX;AACF,CAAC;AASD,IAAM,OAAa;AAAA,EACjB,CAAC,EAAE,WAAW,SAAS,OAAO,UAAU,GAAG,MAAM,GAAG,QAClD,6CAAC,SAAI,KAAU,WAAW,GAAG,aAAa,EAAE,QAAQ,CAAC,GAAG,SAAS,mBAAmB,SAAS,GAAI,GAAG,OACjG;AAAA,aACC,4CAAC,SAAI,WAAU,gCACZ,iBACH;AAAA,IAED;AAAA,KACH;AAEJ;AACA,KAAK,cAAc;AAEnB,IAAM,aAAmB;AAAA,EACvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,4CAAC,SAAI,KAAU,WAAW,GAAG,iCAAiC,SAAS,GAAI,GAAG,OAAO;AAEzF;AACA,WAAW,cAAc;AAEzB,IAAM,YAAkB;AAAA,EACtB,CAAC,EAAE,WAAW,UAAU,GAAG,MAAM,GAAG,QAClC,4CAAC,QAAG,KAAU,WAAW,GAAG,sDAAsD,SAAS,GAAI,GAAG,OAC/F,UACH;AAEJ;AACA,UAAU,cAAc;AAExB,IAAM,kBAAwB;AAAA,EAC5B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,4CAAC,OAAE,KAAU,WAAW,GAAG,iCAAiC,SAAS,GAAI,GAAG,OAAO;AAEvF;AACA,gBAAgB,cAAc;AAE9B,IAAM,cAAoB;AAAA,EACxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,4CAAC,SAAI,KAAU,WAAW,GAAG,YAAY,SAAS,GAAI,GAAG,OAAO;AAEpE;AACA,YAAY,cAAc;AAE1B,IAAM,aAAmB;AAAA,EACvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,4CAAC,SAAI,KAAU,WAAW,GAAG,8BAA8B,SAAS,GAAI,GAAG,OAAO;AAEtF;AACA,WAAW,cAAc;AAiBzB,IAAM,UAAgB;AAAA,EACpB,CAAC,EAAE,MAAM,SAAS,+BAA+B,OAAO,OAAO,YAAY,aAAa,WAAW,GAAG,MAAM,GAAG,QAC7G;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAGJ;AAAA,qDAAC,SAAI,WAAU,0CACb;AAAA,sDAAC,UAAK,WAAU,uDAAuD,iBAAM;AAAA,UAC5E,QACC;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,iBAAiB,OAAO;AAAA,cAEhC;AAAA;AAAA,UACH;AAAA,WAEJ;AAAA,QAEA,4CAAC,SAAI,WAAU,kBACb,sDAAC,UAAK,WAAU,sEAAsE,iBAAM,GAC9F;AAAA,QAEA,4CAAC,SAAI,WAAU,gBACZ,wBACC;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,cAAc,EAAE,OAAO,YAAY,IAAI;AAAA,YAE7C;AAAA;AAAA,QACH,GAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AACA,QAAQ,cAAc;","names":[]}
|
package/dist/components/card.js
CHANGED
|
@@ -38,7 +38,7 @@ var CardHeader = React.forwardRef(
|
|
|
38
38
|
);
|
|
39
39
|
CardHeader.displayName = "CardHeader";
|
|
40
40
|
var CardTitle = React.forwardRef(
|
|
41
|
-
({ className, ...props }, ref) => /* @__PURE__ */ jsx("h3", { ref, className: cn("text-2xl font-semibold leading-none tracking-tight", className), ...props })
|
|
41
|
+
({ className, children, ...props }, ref) => /* @__PURE__ */ jsx("h3", { ref, className: cn("text-2xl font-semibold leading-none tracking-tight", className), ...props, children })
|
|
42
42
|
);
|
|
43
43
|
CardTitle.displayName = "CardTitle";
|
|
44
44
|
var CardDescription = React.forwardRef(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/card.tsx","../../src/lib/utils.ts"],"sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\nconst cardVariants = cva(\"rounded-lg text-card-foreground\", {\n variants: {\n variant: {\n default: \"border bg-card shadow-sm\",\n outline: \"border bg-transparent\",\n elevated: \"bg-card shadow-md hover:shadow-lg transition-shadow\",\n ghost: \"bg-transparent\",\n warning: \"border border-[var(--hc-color-warning)] bg-card shadow-sm\",\n info: \"border border-[var(--hc-color-primary)] bg-card shadow-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n})\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {\n /** Optional image/media slot rendered above the CardHeader with rounded top corners */\n image?: React.ReactNode\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, image, children, ...props }, ref) => (\n <div ref={ref} className={cn(cardVariants({ variant }), image && \"overflow-hidden\", className)} {...props}>\n {image && (\n <div className=\"rounded-t-lg overflow-hidden\">\n {image}\n </div>\n )}\n {children}\n </div>\n )\n)\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n )\n)\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)} {...props}
|
|
1
|
+
{"version":3,"sources":["../../src/components/card.tsx","../../src/lib/utils.ts"],"sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\nconst cardVariants = cva(\"rounded-lg text-card-foreground\", {\n variants: {\n variant: {\n default: \"border bg-card shadow-sm\",\n outline: \"border bg-transparent\",\n elevated: \"bg-card shadow-md hover:shadow-lg transition-shadow\",\n ghost: \"bg-transparent\",\n warning: \"border border-[var(--hc-color-warning)] bg-card shadow-sm\",\n info: \"border border-[var(--hc-color-primary)] bg-card shadow-sm\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n})\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof cardVariants> {\n /** Optional image/media slot rendered above the CardHeader with rounded top corners */\n image?: React.ReactNode\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, image, children, ...props }, ref) => (\n <div ref={ref} className={cn(cardVariants({ variant }), image && \"overflow-hidden\", className)} {...props}>\n {image && (\n <div className=\"rounded-t-lg overflow-hidden\">\n {image}\n </div>\n )}\n {children}\n </div>\n )\n)\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n )\n)\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, children, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)} {...props}>\n {children}\n </h3>\n )\n)\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n )\n)\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n )\n)\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center p-6 pt-0\", className)} {...props} />\n )\n)\nCardFooter.displayName = \"CardFooter\"\n\nexport interface CardKPIProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Icon element rendered inside the icon box */\n icon?: React.ReactNode\n /** Background color for the icon box. Defaults to var(--hc-banner-success-bg). */\n iconBg?: string\n /** KPI label text (e.g. \"Open Cases\") */\n label: string\n /** KPI number value */\n value: string | number\n /** Change / trend text (e.g. \"+6 from last week\") */\n changeText?: string\n /** Color for the change text (e.g. var(--hc-color-success), var(--hc-color-destructive)) */\n changeColor?: string\n}\n\nconst CardKPI = React.forwardRef<HTMLDivElement, CardKPIProps>(\n ({ icon, iconBg = \"var(--hc-banner-success-bg)\", label, value, changeText, changeColor, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"grid min-h-[140px] grid-rows-[auto_1fr_auto] gap-4 rounded-lg border border-[var(--hc-color-border-subtle)] bg-background p-5\",\n className\n )}\n {...props}\n >\n {/* Top row: label + icon — icon stays put even when changeText is missing */}\n <div className=\"flex items-start justify-between gap-3\">\n <span className=\"text-sm leading-5 font-medium text-muted-foreground\">{label}</span>\n {icon && (\n <div\n className=\"flex size-10 shrink-0 items-center justify-center rounded-md [&>svg]:size-5\"\n style={{ backgroundColor: iconBg }}\n >\n {icon}\n </div>\n )}\n </div>\n {/* Middle: value (anchored to bottom via grid-row) */}\n <div className=\"flex items-end\">\n <span className=\"text-3xl leading-none font-semibold text-foreground tracking-tight\">{value}</span>\n </div>\n {/* Bottom: change text — always rendered (as spacer when missing) to keep layout stable */}\n <div className=\"min-h-[20px]\">\n {changeText && (\n <span\n className=\"text-sm leading-5 font-medium\"\n style={changeColor ? { color: changeColor } : undefined}\n >\n {changeText}\n </span>\n )}\n </div>\n </div>\n )\n)\nCardKPI.displayName = \"CardKPI\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent, CardKPI }\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"],"mappings":";AAAA,YAAY,WAAW;AACvB,SAAS,WAA8B;;;ACDvC,SAA0B,YAAY;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;ADwBI,SAEI,KAFJ;AAzBJ,IAAM,eAAe,IAAI,mCAAmC;AAAA,EAC1D,UAAU;AAAA,IACR,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,OAAO;AAAA,MACP,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,EACX;AACF,CAAC;AASD,IAAM,OAAa;AAAA,EACjB,CAAC,EAAE,WAAW,SAAS,OAAO,UAAU,GAAG,MAAM,GAAG,QAClD,qBAAC,SAAI,KAAU,WAAW,GAAG,aAAa,EAAE,QAAQ,CAAC,GAAG,SAAS,mBAAmB,SAAS,GAAI,GAAG,OACjG;AAAA,aACC,oBAAC,SAAI,WAAU,gCACZ,iBACH;AAAA,IAED;AAAA,KACH;AAEJ;AACA,KAAK,cAAc;AAEnB,IAAM,aAAmB;AAAA,EACvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,oBAAC,SAAI,KAAU,WAAW,GAAG,iCAAiC,SAAS,GAAI,GAAG,OAAO;AAEzF;AACA,WAAW,cAAc;AAEzB,IAAM,YAAkB;AAAA,EACtB,CAAC,EAAE,WAAW,UAAU,GAAG,MAAM,GAAG,QAClC,oBAAC,QAAG,KAAU,WAAW,GAAG,sDAAsD,SAAS,GAAI,GAAG,OAC/F,UACH;AAEJ;AACA,UAAU,cAAc;AAExB,IAAM,kBAAwB;AAAA,EAC5B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,oBAAC,OAAE,KAAU,WAAW,GAAG,iCAAiC,SAAS,GAAI,GAAG,OAAO;AAEvF;AACA,gBAAgB,cAAc;AAE9B,IAAM,cAAoB;AAAA,EACxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,oBAAC,SAAI,KAAU,WAAW,GAAG,YAAY,SAAS,GAAI,GAAG,OAAO;AAEpE;AACA,YAAY,cAAc;AAE1B,IAAM,aAAmB;AAAA,EACvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,oBAAC,SAAI,KAAU,WAAW,GAAG,8BAA8B,SAAS,GAAI,GAAG,OAAO;AAEtF;AACA,WAAW,cAAc;AAiBzB,IAAM,UAAgB;AAAA,EACpB,CAAC,EAAE,MAAM,SAAS,+BAA+B,OAAO,OAAO,YAAY,aAAa,WAAW,GAAG,MAAM,GAAG,QAC7G;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAGJ;AAAA,6BAAC,SAAI,WAAU,0CACb;AAAA,8BAAC,UAAK,WAAU,uDAAuD,iBAAM;AAAA,UAC5E,QACC;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,iBAAiB,OAAO;AAAA,cAEhC;AAAA;AAAA,UACH;AAAA,WAEJ;AAAA,QAEA,oBAAC,SAAI,WAAU,kBACb,8BAAC,UAAK,WAAU,sEAAsE,iBAAM,GAC9F;AAAA,QAEA,oBAAC,SAAI,WAAU,gBACZ,wBACC;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,cAAc,EAAE,OAAO,YAAY,IAAI;AAAA,YAE7C;AAAA;AAAA,QACH,GAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AACA,QAAQ,cAAc;","names":[]}
|
|
@@ -75,7 +75,8 @@ var checkboxIconSize = {
|
|
|
75
75
|
lg: "size-4"
|
|
76
76
|
};
|
|
77
77
|
var Checkbox = React.forwardRef(({ className, label, id, variant, size = "default", ...props }, ref) => {
|
|
78
|
-
const
|
|
78
|
+
const generatedId = React.useId();
|
|
79
|
+
const checkboxId = id || generatedId;
|
|
79
80
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "inline-flex items-center gap-2", children: [
|
|
80
81
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
81
82
|
CheckboxPrimitive.Root,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/checkbox.tsx","../../src/lib/utils.ts"],"sourcesContent":["import * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\nconst checkboxVariants = cva(\n \"peer shrink-0 border ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-0 data-[state=indeterminate]:border-0\",\n {\n variants: {\n variant: {\n default:\n \"border-input hover:border-muted-foreground data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground\",\n destructive:\n \"border-input hover:border-muted-foreground data-[state=checked]:bg-destructive data-[state=checked]:text-destructive-foreground data-[state=indeterminate]:bg-destructive data-[state=indeterminate]:text-destructive-foreground\",\n success:\n \"border-input hover:border-muted-foreground data-[state=checked]:bg-success data-[state=checked]:text-success-foreground data-[state=indeterminate]:bg-success data-[state=indeterminate]:text-success-foreground\",\n },\n size: {\n sm: \"size-3.5 rounded-sm\",\n default: \"size-4 rounded-sm\",\n lg: \"size-5 rounded\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst checkboxIconSize = {\n sm: \"size-2.5\",\n default: \"size-3\",\n lg: \"size-4\",\n} as const\n\nexport interface CheckboxProps\n extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>,\n VariantProps<typeof checkboxVariants> {\n label?: string\n}\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, label, id, variant, size = \"default\", ...props }, ref) => {\n const
|
|
1
|
+
{"version":3,"sources":["../../src/components/checkbox.tsx","../../src/lib/utils.ts"],"sourcesContent":["import * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\nconst checkboxVariants = cva(\n \"peer shrink-0 border ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-0 data-[state=indeterminate]:border-0\",\n {\n variants: {\n variant: {\n default:\n \"border-input hover:border-muted-foreground data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground\",\n destructive:\n \"border-input hover:border-muted-foreground data-[state=checked]:bg-destructive data-[state=checked]:text-destructive-foreground data-[state=indeterminate]:bg-destructive data-[state=indeterminate]:text-destructive-foreground\",\n success:\n \"border-input hover:border-muted-foreground data-[state=checked]:bg-success data-[state=checked]:text-success-foreground data-[state=indeterminate]:bg-success data-[state=indeterminate]:text-success-foreground\",\n },\n size: {\n sm: \"size-3.5 rounded-sm\",\n default: \"size-4 rounded-sm\",\n lg: \"size-5 rounded\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst checkboxIconSize = {\n sm: \"size-2.5\",\n default: \"size-3\",\n lg: \"size-4\",\n} as const\n\nexport interface CheckboxProps\n extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>,\n VariantProps<typeof checkboxVariants> {\n label?: string\n}\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, label, id, variant, size = \"default\", ...props }, ref) => {\n const generatedId = React.useId()\n const checkboxId = id || generatedId\n return (\n <div className=\"inline-flex items-center gap-2\">\n <CheckboxPrimitive.Root\n ref={ref}\n id={checkboxId}\n className={cn(checkboxVariants({ variant, size, className }))}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-current\">\n <Check className={checkboxIconSize[size ?? \"default\"]} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label && (\n <label\n htmlFor={checkboxId}\n className=\"text-sm leading-none text-foreground select-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50\"\n >\n {label}\n </label>\n )}\n </div>\n )\n})\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox, checkboxVariants }\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAuB;AACvB,wBAAmC;AACnC,0BAAsB;AACtB,sCAAuC;;;ACHvC,kBAAsC;AACtC,4BAAwB;AAEjB,SAAS,MAAM,QAAsB;AAC1C,aAAO,mCAAQ,kBAAK,MAAM,CAAC;AAC7B;;;AD6CI;AA5CJ,IAAM,uBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SACE;AAAA,QACF,aACE;AAAA,QACF,SACE;AAAA,MACJ;AAAA,MACA,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,IAAM,mBAAmB;AAAA,EACvB,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,IAAI;AACN;AAQA,IAAM,WAAiB,iBAGrB,CAAC,EAAE,WAAW,OAAO,IAAI,SAAS,OAAO,WAAW,GAAG,MAAM,GAAG,QAAQ;AACxE,QAAM,cAAoB,YAAM;AAChC,QAAM,aAAa,MAAM;AACzB,SACE,6CAAC,SAAI,WAAU,kCACb;AAAA;AAAA,MAAmB;AAAA,MAAlB;AAAA,QACC;AAAA,QACA,IAAI;AAAA,QACJ,WAAW,GAAG,iBAAiB,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC;AAAA,QAC3D,GAAG;AAAA,QAEJ,sDAAmB,6BAAlB,EAA4B,WAAU,iDACrC,sDAAC,6BAAM,WAAW,iBAAiB,QAAQ,SAAS,GAAG,GACzD;AAAA;AAAA,IACF;AAAA,IACC,SACC;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAU;AAAA,QAET;AAAA;AAAA,IACH;AAAA,KAEJ;AAEJ,CAAC;AACD,SAAS,cAAgC,uBAAK;","names":[]}
|
|
@@ -40,7 +40,8 @@ var checkboxIconSize = {
|
|
|
40
40
|
lg: "size-4"
|
|
41
41
|
};
|
|
42
42
|
var Checkbox = React.forwardRef(({ className, label, id, variant, size = "default", ...props }, ref) => {
|
|
43
|
-
const
|
|
43
|
+
const generatedId = React.useId();
|
|
44
|
+
const checkboxId = id || generatedId;
|
|
44
45
|
return /* @__PURE__ */ jsxs("div", { className: "inline-flex items-center gap-2", children: [
|
|
45
46
|
/* @__PURE__ */ jsx(
|
|
46
47
|
CheckboxPrimitive.Root,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/checkbox.tsx","../../src/lib/utils.ts"],"sourcesContent":["import * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\nconst checkboxVariants = cva(\n \"peer shrink-0 border ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-0 data-[state=indeterminate]:border-0\",\n {\n variants: {\n variant: {\n default:\n \"border-input hover:border-muted-foreground data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground\",\n destructive:\n \"border-input hover:border-muted-foreground data-[state=checked]:bg-destructive data-[state=checked]:text-destructive-foreground data-[state=indeterminate]:bg-destructive data-[state=indeterminate]:text-destructive-foreground\",\n success:\n \"border-input hover:border-muted-foreground data-[state=checked]:bg-success data-[state=checked]:text-success-foreground data-[state=indeterminate]:bg-success data-[state=indeterminate]:text-success-foreground\",\n },\n size: {\n sm: \"size-3.5 rounded-sm\",\n default: \"size-4 rounded-sm\",\n lg: \"size-5 rounded\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst checkboxIconSize = {\n sm: \"size-2.5\",\n default: \"size-3\",\n lg: \"size-4\",\n} as const\n\nexport interface CheckboxProps\n extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>,\n VariantProps<typeof checkboxVariants> {\n label?: string\n}\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, label, id, variant, size = \"default\", ...props }, ref) => {\n const
|
|
1
|
+
{"version":3,"sources":["../../src/components/checkbox.tsx","../../src/lib/utils.ts"],"sourcesContent":["import * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { cn } from \"../lib/utils\"\n\nconst checkboxVariants = cva(\n \"peer shrink-0 border ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-0 data-[state=indeterminate]:border-0\",\n {\n variants: {\n variant: {\n default:\n \"border-input hover:border-muted-foreground data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground\",\n destructive:\n \"border-input hover:border-muted-foreground data-[state=checked]:bg-destructive data-[state=checked]:text-destructive-foreground data-[state=indeterminate]:bg-destructive data-[state=indeterminate]:text-destructive-foreground\",\n success:\n \"border-input hover:border-muted-foreground data-[state=checked]:bg-success data-[state=checked]:text-success-foreground data-[state=indeterminate]:bg-success data-[state=indeterminate]:text-success-foreground\",\n },\n size: {\n sm: \"size-3.5 rounded-sm\",\n default: \"size-4 rounded-sm\",\n lg: \"size-5 rounded\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst checkboxIconSize = {\n sm: \"size-2.5\",\n default: \"size-3\",\n lg: \"size-4\",\n} as const\n\nexport interface CheckboxProps\n extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>,\n VariantProps<typeof checkboxVariants> {\n label?: string\n}\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxProps\n>(({ className, label, id, variant, size = \"default\", ...props }, ref) => {\n const generatedId = React.useId()\n const checkboxId = id || generatedId\n return (\n <div className=\"inline-flex items-center gap-2\">\n <CheckboxPrimitive.Root\n ref={ref}\n id={checkboxId}\n className={cn(checkboxVariants({ variant, size, className }))}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-current\">\n <Check className={checkboxIconSize[size ?? \"default\"]} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n {label && (\n <label\n htmlFor={checkboxId}\n className=\"text-sm leading-none text-foreground select-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50\"\n >\n {label}\n </label>\n )}\n </div>\n )\n})\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox, checkboxVariants }\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"],"mappings":";AAAA,YAAY,WAAW;AACvB,YAAY,uBAAuB;AACnC,SAAS,aAAa;AACtB,SAAS,WAA8B;;;ACHvC,SAA0B,YAAY;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;AD6CI,SAQM,KARN;AA5CJ,IAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SACE;AAAA,QACF,aACE;AAAA,QACF,SACE;AAAA,MACJ;AAAA,MACA,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,IAAM,mBAAmB;AAAA,EACvB,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,IAAI;AACN;AAQA,IAAM,WAAiB,iBAGrB,CAAC,EAAE,WAAW,OAAO,IAAI,SAAS,OAAO,WAAW,GAAG,MAAM,GAAG,QAAQ;AACxE,QAAM,cAAoB,YAAM;AAChC,QAAM,aAAa,MAAM;AACzB,SACE,qBAAC,SAAI,WAAU,kCACb;AAAA;AAAA,MAAmB;AAAA,MAAlB;AAAA,QACC;AAAA,QACA,IAAI;AAAA,QACJ,WAAW,GAAG,iBAAiB,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC;AAAA,QAC3D,GAAG;AAAA,QAEJ,8BAAmB,6BAAlB,EAA4B,WAAU,iDACrC,8BAAC,SAAM,WAAW,iBAAiB,QAAQ,SAAS,GAAG,GACzD;AAAA;AAAA,IACF;AAAA,IACC,SACC;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,WAAU;AAAA,QAET;AAAA;AAAA,IACH;AAAA,KAEJ;AAEJ,CAAC;AACD,SAAS,cAAgC,uBAAK;","names":[]}
|
|
@@ -202,7 +202,8 @@ var Input = React3.forwardRef(
|
|
|
202
202
|
onChange,
|
|
203
203
|
...props
|
|
204
204
|
}, ref) => {
|
|
205
|
-
const
|
|
205
|
+
const generatedId = React3.useId();
|
|
206
|
+
const inputId = id || generatedId;
|
|
206
207
|
const isControlled = value !== void 0;
|
|
207
208
|
const [internalValue, setInternalValue] = React3.useState(defaultValue);
|
|
208
209
|
const innerRef = React3.useRef(null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/data-table.tsx","../../src/components/table.tsx","../../src/lib/utils.ts","../../src/components/button.tsx","../../src/components/input.tsx","../../src/components/skeleton.tsx"],"sourcesContent":["import * as React from \"react\"\nimport {\n type ColumnDef,\n type ColumnFiltersState,\n type SortingState,\n type VisibilityState,\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"./table\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Skeleton } from \"./skeleton\"\n\ninterface DataTableProps<TData, TValue> {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n searchKey?: string\n searchPlaceholder?: string\n loading?: boolean\n emptyState?: React.ReactNode\n pageSize?: number\n}\n\nfunction DataTable<TData, TValue>({\n columns,\n data,\n searchKey,\n searchPlaceholder = \"Filter...\",\n loading = false,\n emptyState,\n pageSize,\n}: DataTableProps<TData, TValue>) {\n const [sorting, setSorting] = React.useState<SortingState>([])\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({})\n const [rowSelection, setRowSelection] = React.useState({})\n\n const table = useReactTable({\n data,\n columns,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n state: { sorting, columnFilters, columnVisibility, rowSelection },\n ...(pageSize ? { initialState: { pagination: { pageSize, pageIndex: 0 } } } : {}),\n })\n\n const skeletonRowCount = pageSize ?? 5\n\n return (\n <div className=\"w-full\">\n {searchKey && (\n <div className=\"flex items-center py-4\">\n <Input\n placeholder={searchPlaceholder}\n value={(table.getColumn(searchKey)?.getFilterValue() as string) ?? \"\"}\n onChange={(event) => table.getColumn(searchKey)?.setFilterValue(event.target.value)}\n className=\"max-w-sm\"\n />\n </div>\n )}\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id}>\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {loading ? (\n Array.from({ length: skeletonRowCount }).map((_, rowIdx) => (\n <TableRow key={`skeleton-${rowIdx}`}>\n {columns.map((_col, colIdx) => (\n <TableCell key={`skeleton-cell-${rowIdx}-${colIdx}`}>\n <Skeleton className=\"h-4 w-full\" />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id} data-state={row.getIsSelected() && \"selected\"}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={columns.length} className=\"text-center\">\n {emptyState ?? (\n <div className=\"flex flex-col items-center justify-center gap-1 py-10 text-muted-foreground\">\n <span className=\"text-sm font-medium\">No results found.</span>\n <span className=\"text-xs\">Try adjusting your filters or search.</span>\n </div>\n )}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n <div className=\"flex items-center justify-end space-x-2 py-4\">\n <div className=\"flex-1 text-sm text-muted-foreground\">\n {table.getFilteredSelectedRowModel().rows.length} of{\" \"}\n {table.getFilteredRowModel().rows.length} row(s) selected.\n </div>\n <div className=\"space-x-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => table.previousPage()} disabled={!table.getCanPreviousPage()}>\n Previous\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={() => table.nextPage()} disabled={!table.getCanNextPage()}>\n Next\n </Button>\n </div>\n </div>\n </div>\n )\n}\n\nexport { DataTable, type DataTableProps }\n","import * as React from \"react\"\nimport { cn } from \"../lib/utils\"\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table ref={ref} className={cn(\"w-full caption-bottom text-sm\", className)} {...props} />\n </div>\n )\n)\nTable.displayName = \"Table\"\n\nconst TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b [&_tr]:border-[var(--hc-color-border-subtle)] [&_tr:hover]:bg-transparent\", className)} {...props} />\n )\n)\nTableHeader.displayName = \"TableHeader\"\n\nconst TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />\n )\n)\nTableBody.displayName = \"TableBody\"\n\nconst TableFooter = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tfoot ref={ref} className={cn(\"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\", className)} {...props} />\n )\n)\nTableFooter.displayName = \"TableFooter\"\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr ref={ref} className={cn(\"border-b border-[var(--hc-color-border-subtle)] transition-colors hover:bg-muted/60 data-[state=selected]:bg-muted\", className)} {...props} />\n )\n)\nTableRow.displayName = \"TableRow\"\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <th ref={ref} className={cn(\"h-12 px-4 text-xs font-semibold uppercase tracking-wider text-muted-foreground text-start align-middle [&:has([role=checkbox])]:pe-0\", className)} {...props} />\n )\n)\nTableHead.displayName = \"TableHead\"\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <td ref={ref} className={cn(\"px-4 py-3 text-sm text-foreground align-middle [&:has([role=checkbox])]:pe-0\", className)} {...props} />\n )\n)\nTableCell.displayName = \"TableCell\"\n\nconst TableCaption = React.forwardRef<HTMLTableCaptionElement, React.HTMLAttributes<HTMLTableCaptionElement>>(\n ({ className, ...props }, ref) => (\n <caption ref={ref} className={cn(\"mt-4 text-sm text-muted-foreground\", className)} {...props} />\n )\n)\nTableCaption.displayName = \"TableCaption\"\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption }\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\nimport * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Loader2 } from \"lucide-react\"\nimport { cn } from \"../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-4\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground hover:bg-primary-hover\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive-hover\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary-hover\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground\",\n link:\n \"text-primary underline-offset-4 hover:underline\",\n success:\n \"bg-success text-success-foreground hover:bg-success-hover\",\n },\n size: {\n xs: \"h-7 px-2.5 text-xs\",\n sm: \"h-9 px-3\",\n default: \"h-10 px-4 py-2\",\n lg: \"h-11 px-8\",\n icon: \"h-10 w-10\",\n \"icon-sm\": \"h-8 w-8\",\n },\n shape: {\n default: \"rounded-md\",\n rounded: \"rounded-lg\",\n pill: \"rounded-full\",\n square: \"rounded-none\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n shape: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n loading?: boolean\n prefixIcon?: React.ReactNode\n suffixIcon?: React.ReactNode\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n shape,\n asChild = false,\n loading = false,\n prefixIcon,\n suffixIcon,\n children,\n disabled,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\"\n const isDisabled = disabled || loading\n\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, shape, className }))}\n ref={ref}\n disabled={isDisabled}\n {...props}\n >\n {loading && <Loader2 className=\"animate-spin\" />}\n {!loading && prefixIcon}\n {children}\n {suffixIcon}\n </Comp>\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Eye, EyeOff, X } from \"lucide-react\"\nimport { cn } from \"../lib/utils\"\n\nconst inputVariants = cva(\n \"flex w-full rounded-md border bg-background transition-[color,border-color,box-shadow] duration-150 file:border-0 file:bg-transparent file:font-medium file:text-foreground placeholder:text-muted-foreground focus-within:outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n variant: {\n default:\n \"border-input hover:border-muted-foreground focus-within:border-[var(--hc-primary-500)] focus-within:ring-[3px] focus-within:ring-[color-mix(in_srgb,var(--hc-primary-500)_22%,transparent)]\",\n error:\n \"border-[var(--hc-color-destructive)] focus-within:border-[var(--hc-color-destructive)] focus-within:ring-[3px] focus-within:ring-[color-mix(in_srgb,var(--hc-color-destructive)_22%,transparent)]\",\n success:\n \"border-[var(--hc-color-success)] focus-within:border-[var(--hc-color-success)] focus-within:ring-[3px] focus-within:ring-[color-mix(in_srgb,var(--hc-color-success)_22%,transparent)]\",\n },\n inputSize: {\n default: \"h-10 px-3 py-2 text-sm\",\n sm: \"h-8 px-2.5 py-1.5 text-xs\",\n lg: \"h-12 px-4 py-3 text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n inputSize: \"default\",\n },\n }\n)\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n VariantProps<typeof inputVariants> {\n label?: string\n hint?: string\n leadingIcon?: React.ReactNode\n trailingIcon?: React.ReactNode\n clearable?: boolean\n onClear?: () => void\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n type,\n label,\n hint,\n variant = \"default\",\n inputSize = \"default\",\n leadingIcon,\n trailingIcon,\n clearable,\n onClear,\n disabled,\n id,\n value,\n defaultValue,\n onChange,\n ...props\n },\n ref\n ) => {\n const inputId = id || React.useId()\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = React.useState<\n string | number | readonly string[] | undefined\n >(defaultValue)\n const innerRef = React.useRef<HTMLInputElement | null>(null)\n\n React.useImperativeHandle(\n ref,\n () => innerRef.current as HTMLInputElement,\n []\n )\n\n const currentValue = isControlled ? value : internalValue\n const hasValue =\n currentValue !== undefined &&\n currentValue !== null &&\n String(currentValue).length > 0\n\n const isPassword = type === \"password\"\n const [showPassword, setShowPassword] = React.useState(false)\n const resolvedType = isPassword ? (showPassword ? \"text\" : \"password\") : type\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalValue(e.target.value)\n }\n onChange?.(e)\n }\n\n const handleClear = () => {\n if (!isControlled) {\n setInternalValue(\"\")\n }\n // Fire a synthetic input event so consumers relying on onChange receive it.\n const input = innerRef.current\n if (input) {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n \"value\"\n )?.set\n nativeInputValueSetter?.call(input, \"\")\n const event = new Event(\"input\", { bubbles: true })\n input.dispatchEvent(event)\n input.focus()\n }\n onClear?.()\n }\n\n const showClearButton = clearable && hasValue && !isPassword && !disabled\n const showPasswordToggle = isPassword && !disabled\n\n const trailingSlots = [\n showClearButton ? 1 : 0,\n showPasswordToggle ? 1 : 0,\n trailingIcon ? 1 : 0,\n ].reduce((a, b) => a + b, 0)\n\n const inputPaddingEnd =\n trailingSlots >= 2 ? \"pe-14\" : trailingSlots === 1 ? \"pe-8\" : undefined\n\n return (\n <div className=\"flex flex-col gap-1.5\" data-slot=\"input-root\">\n {label && (\n <label\n htmlFor={inputId}\n className={cn(\n \"text-sm font-medium text-foreground\",\n disabled && \"text-muted-foreground\"\n )}\n >\n {label}\n </label>\n )}\n <div\n data-slot=\"input-wrapper\"\n className={cn(\n inputVariants({ variant, inputSize }),\n \"relative flex items-center gap-2\",\n disabled && \"cursor-not-allowed opacity-50\",\n className\n )}\n >\n {leadingIcon && (\n <span className=\"shrink-0 text-muted-foreground\">\n {leadingIcon}\n </span>\n )}\n <input\n id={inputId}\n type={resolvedType}\n disabled={disabled}\n className={cn(\n \"flex-1 min-w-0 bg-transparent outline-none text-inherit placeholder:text-muted-foreground disabled:cursor-not-allowed\",\n inputPaddingEnd\n )}\n ref={innerRef}\n value={isControlled ? value : internalValue}\n defaultValue={isControlled ? undefined : undefined}\n onChange={handleChange}\n {...props}\n />\n {(showClearButton || showPasswordToggle) && (\n <span\n className=\"pointer-events-none absolute end-2 top-1/2 -translate-y-1/2 flex items-center gap-1\"\n >\n {showClearButton && (\n <button\n type=\"button\"\n aria-label=\"Clear\"\n onClick={handleClear}\n tabIndex={-1}\n className=\"pointer-events-auto inline-flex size-4 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--hc-primary-500)] focus-visible:ring-offset-1 focus-visible:ring-offset-background\"\n >\n <X className=\"size-4\" aria-hidden=\"true\" />\n </button>\n )}\n {showPasswordToggle && (\n <button\n type=\"button\"\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\n onClick={() => setShowPassword((s) => !s)}\n tabIndex={-1}\n className=\"pointer-events-auto inline-flex size-4 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--hc-primary-500)] focus-visible:ring-offset-1 focus-visible:ring-offset-background\"\n >\n {showPassword ? (\n <EyeOff className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <Eye className=\"size-4\" aria-hidden=\"true\" />\n )}\n </button>\n )}\n </span>\n )}\n {trailingIcon && !showClearButton && !showPasswordToggle && (\n <span className=\"shrink-0 text-muted-foreground\">\n {trailingIcon}\n </span>\n )}\n </div>\n {hint && (\n <p\n className={cn(\n \"text-xs\",\n variant === \"default\" && \"text-muted-foreground\",\n variant === \"error\" && \"text-destructive\",\n variant === \"success\" && \"text-success\"\n )}\n >\n {hint}\n </p>\n )}\n </div>\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input, inputVariants }\n","import * as React from \"react\"\nimport { cn } from \"../lib/utils\"\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n shape?: \"text\" | \"circle\" | \"rect\"\n}\n\nfunction Skeleton({ className, shape = \"rect\", ...props }: SkeletonProps) {\n return (\n <div\n className={cn(\n \"animate-pulse bg-muted\",\n shape === \"circle\" && \"rounded-full\",\n shape === \"text\" && \"h-4 w-full rounded-md\",\n shape === \"rect\" && \"rounded-md\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n"],"mappings":"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","names":["React","React","import_jsx_runtime","React","import_class_variance_authority","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/data-table.tsx","../../src/components/table.tsx","../../src/lib/utils.ts","../../src/components/button.tsx","../../src/components/input.tsx","../../src/components/skeleton.tsx"],"sourcesContent":["import * as React from \"react\"\nimport {\n type ColumnDef,\n type ColumnFiltersState,\n type SortingState,\n type VisibilityState,\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"./table\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Skeleton } from \"./skeleton\"\n\ninterface DataTableProps<TData, TValue> {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n searchKey?: string\n searchPlaceholder?: string\n loading?: boolean\n emptyState?: React.ReactNode\n pageSize?: number\n}\n\nfunction DataTable<TData, TValue>({\n columns,\n data,\n searchKey,\n searchPlaceholder = \"Filter...\",\n loading = false,\n emptyState,\n pageSize,\n}: DataTableProps<TData, TValue>) {\n const [sorting, setSorting] = React.useState<SortingState>([])\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({})\n const [rowSelection, setRowSelection] = React.useState({})\n\n const table = useReactTable({\n data,\n columns,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n state: { sorting, columnFilters, columnVisibility, rowSelection },\n ...(pageSize ? { initialState: { pagination: { pageSize, pageIndex: 0 } } } : {}),\n })\n\n const skeletonRowCount = pageSize ?? 5\n\n return (\n <div className=\"w-full\">\n {searchKey && (\n <div className=\"flex items-center py-4\">\n <Input\n placeholder={searchPlaceholder}\n value={(table.getColumn(searchKey)?.getFilterValue() as string) ?? \"\"}\n onChange={(event) => table.getColumn(searchKey)?.setFilterValue(event.target.value)}\n className=\"max-w-sm\"\n />\n </div>\n )}\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id}>\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {loading ? (\n Array.from({ length: skeletonRowCount }).map((_, rowIdx) => (\n <TableRow key={`skeleton-${rowIdx}`}>\n {columns.map((_col, colIdx) => (\n <TableCell key={`skeleton-cell-${rowIdx}-${colIdx}`}>\n <Skeleton className=\"h-4 w-full\" />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id} data-state={row.getIsSelected() && \"selected\"}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={columns.length} className=\"text-center\">\n {emptyState ?? (\n <div className=\"flex flex-col items-center justify-center gap-1 py-10 text-muted-foreground\">\n <span className=\"text-sm font-medium\">No results found.</span>\n <span className=\"text-xs\">Try adjusting your filters or search.</span>\n </div>\n )}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n <div className=\"flex items-center justify-end space-x-2 py-4\">\n <div className=\"flex-1 text-sm text-muted-foreground\">\n {table.getFilteredSelectedRowModel().rows.length} of{\" \"}\n {table.getFilteredRowModel().rows.length} row(s) selected.\n </div>\n <div className=\"space-x-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => table.previousPage()} disabled={!table.getCanPreviousPage()}>\n Previous\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={() => table.nextPage()} disabled={!table.getCanNextPage()}>\n Next\n </Button>\n </div>\n </div>\n </div>\n )\n}\n\nexport { DataTable, type DataTableProps }\n","import * as React from \"react\"\nimport { cn } from \"../lib/utils\"\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table ref={ref} className={cn(\"w-full caption-bottom text-sm\", className)} {...props} />\n </div>\n )\n)\nTable.displayName = \"Table\"\n\nconst TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b [&_tr]:border-[var(--hc-color-border-subtle)] [&_tr:hover]:bg-transparent\", className)} {...props} />\n )\n)\nTableHeader.displayName = \"TableHeader\"\n\nconst TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />\n )\n)\nTableBody.displayName = \"TableBody\"\n\nconst TableFooter = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tfoot ref={ref} className={cn(\"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\", className)} {...props} />\n )\n)\nTableFooter.displayName = \"TableFooter\"\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr ref={ref} className={cn(\"border-b border-[var(--hc-color-border-subtle)] transition-colors hover:bg-muted/60 data-[state=selected]:bg-muted\", className)} {...props} />\n )\n)\nTableRow.displayName = \"TableRow\"\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <th ref={ref} className={cn(\"h-12 px-4 text-xs font-semibold uppercase tracking-wider text-muted-foreground text-start align-middle [&:has([role=checkbox])]:pe-0\", className)} {...props} />\n )\n)\nTableHead.displayName = \"TableHead\"\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <td ref={ref} className={cn(\"px-4 py-3 text-sm text-foreground align-middle [&:has([role=checkbox])]:pe-0\", className)} {...props} />\n )\n)\nTableCell.displayName = \"TableCell\"\n\nconst TableCaption = React.forwardRef<HTMLTableCaptionElement, React.HTMLAttributes<HTMLTableCaptionElement>>(\n ({ className, ...props }, ref) => (\n <caption ref={ref} className={cn(\"mt-4 text-sm text-muted-foreground\", className)} {...props} />\n )\n)\nTableCaption.displayName = \"TableCaption\"\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption }\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\nimport * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Loader2 } from \"lucide-react\"\nimport { cn } from \"../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-4\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground hover:bg-primary-hover\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive-hover\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary-hover\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground\",\n link:\n \"text-primary underline-offset-4 hover:underline\",\n success:\n \"bg-success text-success-foreground hover:bg-success-hover\",\n },\n size: {\n xs: \"h-7 px-2.5 text-xs\",\n sm: \"h-9 px-3\",\n default: \"h-10 px-4 py-2\",\n lg: \"h-11 px-8\",\n icon: \"h-10 w-10\",\n \"icon-sm\": \"h-8 w-8\",\n },\n shape: {\n default: \"rounded-md\",\n rounded: \"rounded-lg\",\n pill: \"rounded-full\",\n square: \"rounded-none\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n shape: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n loading?: boolean\n prefixIcon?: React.ReactNode\n suffixIcon?: React.ReactNode\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n shape,\n asChild = false,\n loading = false,\n prefixIcon,\n suffixIcon,\n children,\n disabled,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\"\n const isDisabled = disabled || loading\n\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, shape, className }))}\n ref={ref}\n disabled={isDisabled}\n {...props}\n >\n {loading && <Loader2 className=\"animate-spin\" />}\n {!loading && prefixIcon}\n {children}\n {suffixIcon}\n </Comp>\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Eye, EyeOff, X } from \"lucide-react\"\nimport { cn } from \"../lib/utils\"\n\nconst inputVariants = cva(\n \"flex w-full rounded-md border bg-background transition-[color,border-color,box-shadow] duration-150 file:border-0 file:bg-transparent file:font-medium file:text-foreground placeholder:text-muted-foreground focus-within:outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n variant: {\n default:\n \"border-input hover:border-muted-foreground focus-within:border-[var(--hc-primary-500)] focus-within:ring-[3px] focus-within:ring-[color-mix(in_srgb,var(--hc-primary-500)_22%,transparent)]\",\n error:\n \"border-[var(--hc-color-destructive)] focus-within:border-[var(--hc-color-destructive)] focus-within:ring-[3px] focus-within:ring-[color-mix(in_srgb,var(--hc-color-destructive)_22%,transparent)]\",\n success:\n \"border-[var(--hc-color-success)] focus-within:border-[var(--hc-color-success)] focus-within:ring-[3px] focus-within:ring-[color-mix(in_srgb,var(--hc-color-success)_22%,transparent)]\",\n },\n inputSize: {\n default: \"h-10 px-3 py-2 text-sm\",\n sm: \"h-8 px-2.5 py-1.5 text-xs\",\n lg: \"h-12 px-4 py-3 text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n inputSize: \"default\",\n },\n }\n)\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n VariantProps<typeof inputVariants> {\n label?: string\n hint?: string\n leadingIcon?: React.ReactNode\n trailingIcon?: React.ReactNode\n clearable?: boolean\n onClear?: () => void\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n type,\n label,\n hint,\n variant = \"default\",\n inputSize = \"default\",\n leadingIcon,\n trailingIcon,\n clearable,\n onClear,\n disabled,\n id,\n value,\n defaultValue,\n onChange,\n ...props\n },\n ref\n ) => {\n const generatedId = React.useId()\n const inputId = id || generatedId\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = React.useState<\n string | number | readonly string[] | undefined\n >(defaultValue)\n const innerRef = React.useRef<HTMLInputElement | null>(null)\n\n React.useImperativeHandle(\n ref,\n () => innerRef.current as HTMLInputElement,\n []\n )\n\n const currentValue = isControlled ? value : internalValue\n const hasValue =\n currentValue !== undefined &&\n currentValue !== null &&\n String(currentValue).length > 0\n\n const isPassword = type === \"password\"\n const [showPassword, setShowPassword] = React.useState(false)\n const resolvedType = isPassword ? (showPassword ? \"text\" : \"password\") : type\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalValue(e.target.value)\n }\n onChange?.(e)\n }\n\n const handleClear = () => {\n if (!isControlled) {\n setInternalValue(\"\")\n }\n // Fire a synthetic input event so consumers relying on onChange receive it.\n const input = innerRef.current\n if (input) {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n \"value\"\n )?.set\n nativeInputValueSetter?.call(input, \"\")\n const event = new Event(\"input\", { bubbles: true })\n input.dispatchEvent(event)\n input.focus()\n }\n onClear?.()\n }\n\n const showClearButton = clearable && hasValue && !isPassword && !disabled\n const showPasswordToggle = isPassword && !disabled\n\n const trailingSlots = [\n showClearButton ? 1 : 0,\n showPasswordToggle ? 1 : 0,\n trailingIcon ? 1 : 0,\n ].reduce((a, b) => a + b, 0)\n\n const inputPaddingEnd =\n trailingSlots >= 2 ? \"pe-14\" : trailingSlots === 1 ? \"pe-8\" : undefined\n\n return (\n <div className=\"flex flex-col gap-1.5\" data-slot=\"input-root\">\n {label && (\n <label\n htmlFor={inputId}\n className={cn(\n \"text-sm font-medium text-foreground\",\n disabled && \"text-muted-foreground\"\n )}\n >\n {label}\n </label>\n )}\n <div\n data-slot=\"input-wrapper\"\n className={cn(\n inputVariants({ variant, inputSize }),\n \"relative flex items-center gap-2\",\n disabled && \"cursor-not-allowed opacity-50\",\n className\n )}\n >\n {leadingIcon && (\n <span className=\"shrink-0 text-muted-foreground\">\n {leadingIcon}\n </span>\n )}\n <input\n id={inputId}\n type={resolvedType}\n disabled={disabled}\n className={cn(\n \"flex-1 min-w-0 bg-transparent outline-none text-inherit placeholder:text-muted-foreground disabled:cursor-not-allowed\",\n inputPaddingEnd\n )}\n ref={innerRef}\n value={isControlled ? value : internalValue}\n defaultValue={isControlled ? undefined : undefined}\n onChange={handleChange}\n {...props}\n />\n {(showClearButton || showPasswordToggle) && (\n <span\n className=\"pointer-events-none absolute end-2 top-1/2 -translate-y-1/2 flex items-center gap-1\"\n >\n {showClearButton && (\n <button\n type=\"button\"\n aria-label=\"Clear\"\n onClick={handleClear}\n tabIndex={-1}\n className=\"pointer-events-auto inline-flex size-4 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--hc-primary-500)] focus-visible:ring-offset-1 focus-visible:ring-offset-background\"\n >\n <X className=\"size-4\" aria-hidden=\"true\" />\n </button>\n )}\n {showPasswordToggle && (\n <button\n type=\"button\"\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\n onClick={() => setShowPassword((s) => !s)}\n tabIndex={-1}\n className=\"pointer-events-auto inline-flex size-4 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--hc-primary-500)] focus-visible:ring-offset-1 focus-visible:ring-offset-background\"\n >\n {showPassword ? (\n <EyeOff className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <Eye className=\"size-4\" aria-hidden=\"true\" />\n )}\n </button>\n )}\n </span>\n )}\n {trailingIcon && !showClearButton && !showPasswordToggle && (\n <span className=\"shrink-0 text-muted-foreground\">\n {trailingIcon}\n </span>\n )}\n </div>\n {hint && (\n <p\n className={cn(\n \"text-xs\",\n variant === \"default\" && \"text-muted-foreground\",\n variant === \"error\" && \"text-destructive\",\n variant === \"success\" && \"text-success\"\n )}\n >\n {hint}\n </p>\n )}\n </div>\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input, inputVariants }\n","import * as React from \"react\"\nimport { cn } from \"../lib/utils\"\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n shape?: \"text\" | \"circle\" | \"rect\"\n}\n\nfunction Skeleton({ className, shape = \"rect\", ...props }: SkeletonProps) {\n return (\n <div\n className={cn(\n \"animate-pulse bg-muted\",\n shape === \"circle\" && \"rounded-full\",\n shape === \"text\" && \"h-4 w-full rounded-md\",\n shape === \"rect\" && \"rounded-md\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n"],"mappings":"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","names":["React","React","import_jsx_runtime","React","import_class_variance_authority","import_lucide_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
|
|
@@ -175,7 +175,8 @@ var Input = React3.forwardRef(
|
|
|
175
175
|
onChange,
|
|
176
176
|
...props
|
|
177
177
|
}, ref) => {
|
|
178
|
-
const
|
|
178
|
+
const generatedId = React3.useId();
|
|
179
|
+
const inputId = id || generatedId;
|
|
179
180
|
const isControlled = value !== void 0;
|
|
180
181
|
const [internalValue, setInternalValue] = React3.useState(defaultValue);
|
|
181
182
|
const innerRef = React3.useRef(null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/data-table.tsx","../../src/components/table.tsx","../../src/lib/utils.ts","../../src/components/button.tsx","../../src/components/input.tsx","../../src/components/skeleton.tsx"],"sourcesContent":["import * as React from \"react\"\nimport {\n type ColumnDef,\n type ColumnFiltersState,\n type SortingState,\n type VisibilityState,\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"./table\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Skeleton } from \"./skeleton\"\n\ninterface DataTableProps<TData, TValue> {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n searchKey?: string\n searchPlaceholder?: string\n loading?: boolean\n emptyState?: React.ReactNode\n pageSize?: number\n}\n\nfunction DataTable<TData, TValue>({\n columns,\n data,\n searchKey,\n searchPlaceholder = \"Filter...\",\n loading = false,\n emptyState,\n pageSize,\n}: DataTableProps<TData, TValue>) {\n const [sorting, setSorting] = React.useState<SortingState>([])\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({})\n const [rowSelection, setRowSelection] = React.useState({})\n\n const table = useReactTable({\n data,\n columns,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n state: { sorting, columnFilters, columnVisibility, rowSelection },\n ...(pageSize ? { initialState: { pagination: { pageSize, pageIndex: 0 } } } : {}),\n })\n\n const skeletonRowCount = pageSize ?? 5\n\n return (\n <div className=\"w-full\">\n {searchKey && (\n <div className=\"flex items-center py-4\">\n <Input\n placeholder={searchPlaceholder}\n value={(table.getColumn(searchKey)?.getFilterValue() as string) ?? \"\"}\n onChange={(event) => table.getColumn(searchKey)?.setFilterValue(event.target.value)}\n className=\"max-w-sm\"\n />\n </div>\n )}\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id}>\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {loading ? (\n Array.from({ length: skeletonRowCount }).map((_, rowIdx) => (\n <TableRow key={`skeleton-${rowIdx}`}>\n {columns.map((_col, colIdx) => (\n <TableCell key={`skeleton-cell-${rowIdx}-${colIdx}`}>\n <Skeleton className=\"h-4 w-full\" />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id} data-state={row.getIsSelected() && \"selected\"}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={columns.length} className=\"text-center\">\n {emptyState ?? (\n <div className=\"flex flex-col items-center justify-center gap-1 py-10 text-muted-foreground\">\n <span className=\"text-sm font-medium\">No results found.</span>\n <span className=\"text-xs\">Try adjusting your filters or search.</span>\n </div>\n )}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n <div className=\"flex items-center justify-end space-x-2 py-4\">\n <div className=\"flex-1 text-sm text-muted-foreground\">\n {table.getFilteredSelectedRowModel().rows.length} of{\" \"}\n {table.getFilteredRowModel().rows.length} row(s) selected.\n </div>\n <div className=\"space-x-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => table.previousPage()} disabled={!table.getCanPreviousPage()}>\n Previous\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={() => table.nextPage()} disabled={!table.getCanNextPage()}>\n Next\n </Button>\n </div>\n </div>\n </div>\n )\n}\n\nexport { DataTable, type DataTableProps }\n","import * as React from \"react\"\nimport { cn } from \"../lib/utils\"\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table ref={ref} className={cn(\"w-full caption-bottom text-sm\", className)} {...props} />\n </div>\n )\n)\nTable.displayName = \"Table\"\n\nconst TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b [&_tr]:border-[var(--hc-color-border-subtle)] [&_tr:hover]:bg-transparent\", className)} {...props} />\n )\n)\nTableHeader.displayName = \"TableHeader\"\n\nconst TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />\n )\n)\nTableBody.displayName = \"TableBody\"\n\nconst TableFooter = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tfoot ref={ref} className={cn(\"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\", className)} {...props} />\n )\n)\nTableFooter.displayName = \"TableFooter\"\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr ref={ref} className={cn(\"border-b border-[var(--hc-color-border-subtle)] transition-colors hover:bg-muted/60 data-[state=selected]:bg-muted\", className)} {...props} />\n )\n)\nTableRow.displayName = \"TableRow\"\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <th ref={ref} className={cn(\"h-12 px-4 text-xs font-semibold uppercase tracking-wider text-muted-foreground text-start align-middle [&:has([role=checkbox])]:pe-0\", className)} {...props} />\n )\n)\nTableHead.displayName = \"TableHead\"\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <td ref={ref} className={cn(\"px-4 py-3 text-sm text-foreground align-middle [&:has([role=checkbox])]:pe-0\", className)} {...props} />\n )\n)\nTableCell.displayName = \"TableCell\"\n\nconst TableCaption = React.forwardRef<HTMLTableCaptionElement, React.HTMLAttributes<HTMLTableCaptionElement>>(\n ({ className, ...props }, ref) => (\n <caption ref={ref} className={cn(\"mt-4 text-sm text-muted-foreground\", className)} {...props} />\n )\n)\nTableCaption.displayName = \"TableCaption\"\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption }\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\nimport * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Loader2 } from \"lucide-react\"\nimport { cn } from \"../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-4\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground hover:bg-primary-hover\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive-hover\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary-hover\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground\",\n link:\n \"text-primary underline-offset-4 hover:underline\",\n success:\n \"bg-success text-success-foreground hover:bg-success-hover\",\n },\n size: {\n xs: \"h-7 px-2.5 text-xs\",\n sm: \"h-9 px-3\",\n default: \"h-10 px-4 py-2\",\n lg: \"h-11 px-8\",\n icon: \"h-10 w-10\",\n \"icon-sm\": \"h-8 w-8\",\n },\n shape: {\n default: \"rounded-md\",\n rounded: \"rounded-lg\",\n pill: \"rounded-full\",\n square: \"rounded-none\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n shape: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n loading?: boolean\n prefixIcon?: React.ReactNode\n suffixIcon?: React.ReactNode\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n shape,\n asChild = false,\n loading = false,\n prefixIcon,\n suffixIcon,\n children,\n disabled,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\"\n const isDisabled = disabled || loading\n\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, shape, className }))}\n ref={ref}\n disabled={isDisabled}\n {...props}\n >\n {loading && <Loader2 className=\"animate-spin\" />}\n {!loading && prefixIcon}\n {children}\n {suffixIcon}\n </Comp>\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Eye, EyeOff, X } from \"lucide-react\"\nimport { cn } from \"../lib/utils\"\n\nconst inputVariants = cva(\n \"flex w-full rounded-md border bg-background transition-[color,border-color,box-shadow] duration-150 file:border-0 file:bg-transparent file:font-medium file:text-foreground placeholder:text-muted-foreground focus-within:outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n variant: {\n default:\n \"border-input hover:border-muted-foreground focus-within:border-[var(--hc-primary-500)] focus-within:ring-[3px] focus-within:ring-[color-mix(in_srgb,var(--hc-primary-500)_22%,transparent)]\",\n error:\n \"border-[var(--hc-color-destructive)] focus-within:border-[var(--hc-color-destructive)] focus-within:ring-[3px] focus-within:ring-[color-mix(in_srgb,var(--hc-color-destructive)_22%,transparent)]\",\n success:\n \"border-[var(--hc-color-success)] focus-within:border-[var(--hc-color-success)] focus-within:ring-[3px] focus-within:ring-[color-mix(in_srgb,var(--hc-color-success)_22%,transparent)]\",\n },\n inputSize: {\n default: \"h-10 px-3 py-2 text-sm\",\n sm: \"h-8 px-2.5 py-1.5 text-xs\",\n lg: \"h-12 px-4 py-3 text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n inputSize: \"default\",\n },\n }\n)\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n VariantProps<typeof inputVariants> {\n label?: string\n hint?: string\n leadingIcon?: React.ReactNode\n trailingIcon?: React.ReactNode\n clearable?: boolean\n onClear?: () => void\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n type,\n label,\n hint,\n variant = \"default\",\n inputSize = \"default\",\n leadingIcon,\n trailingIcon,\n clearable,\n onClear,\n disabled,\n id,\n value,\n defaultValue,\n onChange,\n ...props\n },\n ref\n ) => {\n const inputId = id || React.useId()\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = React.useState<\n string | number | readonly string[] | undefined\n >(defaultValue)\n const innerRef = React.useRef<HTMLInputElement | null>(null)\n\n React.useImperativeHandle(\n ref,\n () => innerRef.current as HTMLInputElement,\n []\n )\n\n const currentValue = isControlled ? value : internalValue\n const hasValue =\n currentValue !== undefined &&\n currentValue !== null &&\n String(currentValue).length > 0\n\n const isPassword = type === \"password\"\n const [showPassword, setShowPassword] = React.useState(false)\n const resolvedType = isPassword ? (showPassword ? \"text\" : \"password\") : type\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalValue(e.target.value)\n }\n onChange?.(e)\n }\n\n const handleClear = () => {\n if (!isControlled) {\n setInternalValue(\"\")\n }\n // Fire a synthetic input event so consumers relying on onChange receive it.\n const input = innerRef.current\n if (input) {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n \"value\"\n )?.set\n nativeInputValueSetter?.call(input, \"\")\n const event = new Event(\"input\", { bubbles: true })\n input.dispatchEvent(event)\n input.focus()\n }\n onClear?.()\n }\n\n const showClearButton = clearable && hasValue && !isPassword && !disabled\n const showPasswordToggle = isPassword && !disabled\n\n const trailingSlots = [\n showClearButton ? 1 : 0,\n showPasswordToggle ? 1 : 0,\n trailingIcon ? 1 : 0,\n ].reduce((a, b) => a + b, 0)\n\n const inputPaddingEnd =\n trailingSlots >= 2 ? \"pe-14\" : trailingSlots === 1 ? \"pe-8\" : undefined\n\n return (\n <div className=\"flex flex-col gap-1.5\" data-slot=\"input-root\">\n {label && (\n <label\n htmlFor={inputId}\n className={cn(\n \"text-sm font-medium text-foreground\",\n disabled && \"text-muted-foreground\"\n )}\n >\n {label}\n </label>\n )}\n <div\n data-slot=\"input-wrapper\"\n className={cn(\n inputVariants({ variant, inputSize }),\n \"relative flex items-center gap-2\",\n disabled && \"cursor-not-allowed opacity-50\",\n className\n )}\n >\n {leadingIcon && (\n <span className=\"shrink-0 text-muted-foreground\">\n {leadingIcon}\n </span>\n )}\n <input\n id={inputId}\n type={resolvedType}\n disabled={disabled}\n className={cn(\n \"flex-1 min-w-0 bg-transparent outline-none text-inherit placeholder:text-muted-foreground disabled:cursor-not-allowed\",\n inputPaddingEnd\n )}\n ref={innerRef}\n value={isControlled ? value : internalValue}\n defaultValue={isControlled ? undefined : undefined}\n onChange={handleChange}\n {...props}\n />\n {(showClearButton || showPasswordToggle) && (\n <span\n className=\"pointer-events-none absolute end-2 top-1/2 -translate-y-1/2 flex items-center gap-1\"\n >\n {showClearButton && (\n <button\n type=\"button\"\n aria-label=\"Clear\"\n onClick={handleClear}\n tabIndex={-1}\n className=\"pointer-events-auto inline-flex size-4 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--hc-primary-500)] focus-visible:ring-offset-1 focus-visible:ring-offset-background\"\n >\n <X className=\"size-4\" aria-hidden=\"true\" />\n </button>\n )}\n {showPasswordToggle && (\n <button\n type=\"button\"\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\n onClick={() => setShowPassword((s) => !s)}\n tabIndex={-1}\n className=\"pointer-events-auto inline-flex size-4 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--hc-primary-500)] focus-visible:ring-offset-1 focus-visible:ring-offset-background\"\n >\n {showPassword ? (\n <EyeOff className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <Eye className=\"size-4\" aria-hidden=\"true\" />\n )}\n </button>\n )}\n </span>\n )}\n {trailingIcon && !showClearButton && !showPasswordToggle && (\n <span className=\"shrink-0 text-muted-foreground\">\n {trailingIcon}\n </span>\n )}\n </div>\n {hint && (\n <p\n className={cn(\n \"text-xs\",\n variant === \"default\" && \"text-muted-foreground\",\n variant === \"error\" && \"text-destructive\",\n variant === \"success\" && \"text-success\"\n )}\n >\n {hint}\n </p>\n )}\n </div>\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input, inputVariants }\n","import * as React from \"react\"\nimport { cn } from \"../lib/utils\"\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n shape?: \"text\" | \"circle\" | \"rect\"\n}\n\nfunction Skeleton({ className, shape = \"rect\", ...props }: SkeletonProps) {\n return (\n <div\n className={cn(\n \"animate-pulse bg-muted\",\n shape === \"circle\" && \"rounded-full\",\n shape === \"text\" && \"h-4 w-full rounded-md\",\n shape === \"rect\" && \"rounded-md\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n"],"mappings":";AAAA,YAAYA,YAAW;AACvB;AAAA,EAKE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACZP,YAAY,WAAW;;;ACAvB,SAA0B,YAAY;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;ADCM;AAHN,IAAM,QAAc;AAAA,EAClB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,oBAAC,SAAI,WAAU,iCACb,8BAAC,WAAM,KAAU,WAAW,GAAG,iCAAiC,SAAS,GAAI,GAAG,OAAO,GACzF;AAEJ;AACA,MAAM,cAAc;AAEpB,IAAM,cAAoB;AAAA,EACxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,oBAAC,WAAM,KAAU,WAAW,GAAG,6FAA6F,SAAS,GAAI,GAAG,OAAO;AAEvJ;AACA,YAAY,cAAc;AAE1B,IAAM,YAAkB;AAAA,EACtB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,oBAAC,WAAM,KAAU,WAAW,GAAG,8BAA8B,SAAS,GAAI,GAAG,OAAO;AAExF;AACA,UAAU,cAAc;AAExB,IAAM,cAAoB;AAAA,EACxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,oBAAC,WAAM,KAAU,WAAW,GAAG,2DAA2D,SAAS,GAAI,GAAG,OAAO;AAErH;AACA,YAAY,cAAc;AAE1B,IAAM,WAAiB;AAAA,EACrB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,oBAAC,QAAG,KAAU,WAAW,GAAG,sHAAsH,SAAS,GAAI,GAAG,OAAO;AAE7K;AACA,SAAS,cAAc;AAEvB,IAAM,YAAkB;AAAA,EACtB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,oBAAC,QAAG,KAAU,WAAW,GAAG,wIAAwI,SAAS,GAAI,GAAG,OAAO;AAE/L;AACA,UAAU,cAAc;AAExB,IAAM,YAAkB;AAAA,EACtB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,oBAAC,QAAG,KAAU,WAAW,GAAG,gFAAgF,SAAS,GAAI,GAAG,OAAO;AAEvI;AACA,UAAU,cAAc;AAExB,IAAM,eAAqB;AAAA,EACzB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QACxB,oBAAC,aAAQ,KAAU,WAAW,GAAG,sCAAsC,SAAS,GAAI,GAAG,OAAO;AAElG;AACA,aAAa,cAAc;;;AE1D3B,YAAYC,YAAW;AACvB,SAAS,YAAY;AACrB,SAAS,WAA8B;AACvC,SAAS,eAAe;AA4ElB,SAMc,OAAAC,MANd;AAzEN,IAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SACE;AAAA,QACF,aACE;AAAA,QACF,SACE;AAAA,QACF,WACE;AAAA,QACF,OACE;AAAA,QACF,MACE;AAAA,QACF,SACE;AAAA,MACJ;AAAA,MACA,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,MACA,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,EACF;AACF;AAWA,IAAM,SAAe;AAAA,EACnB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,OAAO,UAAU,OAAO;AAC9B,UAAM,aAAa,YAAY;AAE/B,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,eAAe,EAAE,SAAS,MAAM,OAAO,UAAU,CAAC,CAAC;AAAA,QACjE;AAAA,QACA,UAAU;AAAA,QACT,GAAG;AAAA,QAEH;AAAA,qBAAW,gBAAAA,KAAC,WAAQ,WAAU,gBAAe;AAAA,UAC7C,CAAC,WAAW;AAAA,UACZ;AAAA,UACA;AAAA;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AACA,OAAO,cAAc;;;AC9FrB,YAAYC,YAAW;AACvB,SAAS,OAAAC,YAA8B;AACvC,SAAS,KAAK,QAAQ,SAAS;AA6HrB,gBAAAC,MAuCE,QAAAC,aAvCF;AA1HV,IAAM,gBAAgBC;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SACE;AAAA,QACF,OACE;AAAA,QACF,SACE;AAAA,MACJ;AAAA,MACA,WAAW;AAAA,QACT,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,EACF;AACF;AAaA,IAAM,QAAc;AAAA,EAClB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,UAAU,MAAY,aAAM;AAClC,UAAM,eAAe,UAAU;AAC/B,UAAM,CAAC,eAAe,gBAAgB,IAAU,gBAE9C,YAAY;AACd,UAAM,WAAiB,cAAgC,IAAI;AAE3D,IAAM;AAAA,MACJ;AAAA,MACA,MAAM,SAAS;AAAA,MACf,CAAC;AAAA,IACH;AAEA,UAAM,eAAe,eAAe,QAAQ;AAC5C,UAAM,WACJ,iBAAiB,UACjB,iBAAiB,QACjB,OAAO,YAAY,EAAE,SAAS;AAEhC,UAAM,aAAa,SAAS;AAC5B,UAAM,CAAC,cAAc,eAAe,IAAU,gBAAS,KAAK;AAC5D,UAAM,eAAe,aAAc,eAAe,SAAS,aAAc;AAEzE,UAAM,eAAe,CAAC,MAA2C;AAC/D,UAAI,CAAC,cAAc;AACjB,yBAAiB,EAAE,OAAO,KAAK;AAAA,MACjC;AACA,iBAAW,CAAC;AAAA,IACd;AAEA,UAAM,cAAc,MAAM;AACxB,UAAI,CAAC,cAAc;AACjB,yBAAiB,EAAE;AAAA,MACrB;AAEA,YAAM,QAAQ,SAAS;AACvB,UAAI,OAAO;AACT,cAAM,yBAAyB,OAAO;AAAA,UACpC,OAAO,iBAAiB;AAAA,UACxB;AAAA,QACF,GAAG;AACH,gCAAwB,KAAK,OAAO,EAAE;AACtC,cAAM,QAAQ,IAAI,MAAM,SAAS,EAAE,SAAS,KAAK,CAAC;AAClD,cAAM,cAAc,KAAK;AACzB,cAAM,MAAM;AAAA,MACd;AACA,gBAAU;AAAA,IACZ;AAEA,UAAM,kBAAkB,aAAa,YAAY,CAAC,cAAc,CAAC;AACjE,UAAM,qBAAqB,cAAc,CAAC;AAE1C,UAAM,gBAAgB;AAAA,MACpB,kBAAkB,IAAI;AAAA,MACtB,qBAAqB,IAAI;AAAA,MACzB,eAAe,IAAI;AAAA,IACrB,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;AAE3B,UAAM,kBACJ,iBAAiB,IAAI,UAAU,kBAAkB,IAAI,SAAS;AAEhE,WACE,gBAAAD,MAAC,SAAI,WAAU,yBAAwB,aAAU,cAC9C;AAAA,eACC,gBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,SAAS;AAAA,UACT,WAAW;AAAA,YACT;AAAA,YACA,YAAY;AAAA,UACd;AAAA,UAEC;AAAA;AAAA,MACH;AAAA,MAEF,gBAAAC;AAAA,QAAC;AAAA;AAAA,UACC,aAAU;AAAA,UACV,WAAW;AAAA,YACT,cAAc,EAAE,SAAS,UAAU,CAAC;AAAA,YACpC;AAAA,YACA,YAAY;AAAA,YACZ;AAAA,UACF;AAAA,UAEC;AAAA,2BACC,gBAAAD,KAAC,UAAK,WAAU,kCACb,uBACH;AAAA,YAEF,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,IAAI;AAAA,gBACJ,MAAM;AAAA,gBACN;AAAA,gBACA,WAAW;AAAA,kBACT;AAAA,kBACA;AAAA,gBACF;AAAA,gBACA,KAAK;AAAA,gBACL,OAAO,eAAe,QAAQ;AAAA,gBAC9B,cAAc,eAAe,SAAY;AAAA,gBACzC,UAAU;AAAA,gBACT,GAAG;AAAA;AAAA,YACN;AAAA,aACE,mBAAmB,uBACnB,gBAAAC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBAET;AAAA,qCACC,gBAAAD;AAAA,oBAAC;AAAA;AAAA,sBACC,MAAK;AAAA,sBACL,cAAW;AAAA,sBACX,SAAS;AAAA,sBACT,UAAU;AAAA,sBACV,WAAU;AAAA,sBAEV,0BAAAA,KAAC,KAAE,WAAU,UAAS,eAAY,QAAO;AAAA;AAAA,kBAC3C;AAAA,kBAED,sBACC,gBAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,MAAK;AAAA,sBACL,cAAY,eAAe,kBAAkB;AAAA,sBAC7C,SAAS,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAAA,sBACxC,UAAU;AAAA,sBACV,WAAU;AAAA,sBAET,yBACC,gBAAAA,KAAC,UAAO,WAAU,UAAS,eAAY,QAAO,IAE9C,gBAAAA,KAAC,OAAI,WAAU,UAAS,eAAY,QAAO;AAAA;AAAA,kBAE/C;AAAA;AAAA;AAAA,YAEJ;AAAA,YAED,gBAAgB,CAAC,mBAAmB,CAAC,sBACpC,gBAAAA,KAAC,UAAK,WAAU,kCACb,wBACH;AAAA;AAAA;AAAA,MAEJ;AAAA,MACC,QACC,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA,YAAY,aAAa;AAAA,YACzB,YAAY,WAAW;AAAA,YACvB,YAAY,aAAa;AAAA,UAC3B;AAAA,UAEC;AAAA;AAAA,MACH;AAAA,OAEJ;AAAA,EAEJ;AACF;AACA,MAAM,cAAc;;;AClNhB,gBAAAG,YAAA;AAFJ,SAAS,SAAS,EAAE,WAAW,QAAQ,QAAQ,GAAG,MAAM,GAAkB;AACxE,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,UAAU,YAAY;AAAA,QACtB,UAAU,UAAU;AAAA,QACpB,UAAU,UAAU;AAAA,QACpB;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;;;AL2CU,gBAAAC,MA4CU,QAAAC,aA5CV;AAnCV,SAAS,UAAyB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA,oBAAoB;AAAA,EACpB,UAAU;AAAA,EACV;AAAA,EACA;AACF,GAAkC;AAChC,QAAM,CAAC,SAAS,UAAU,IAAU,gBAAuB,CAAC,CAAC;AAC7D,QAAM,CAAC,eAAe,gBAAgB,IAAU,gBAA6B,CAAC,CAAC;AAC/E,QAAM,CAAC,kBAAkB,mBAAmB,IAAU,gBAA0B,CAAC,CAAC;AAClF,QAAM,CAAC,cAAc,eAAe,IAAU,gBAAS,CAAC,CAAC;AAEzD,QAAM,QAAQ,cAAc;AAAA,IAC1B;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB,uBAAuB;AAAA,IACvB,iBAAiB,gBAAgB;AAAA,IACjC,uBAAuB,sBAAsB;AAAA,IAC7C,mBAAmB,kBAAkB;AAAA,IACrC,qBAAqB,oBAAoB;AAAA,IACzC,0BAA0B;AAAA,IAC1B,sBAAsB;AAAA,IACtB,OAAO,EAAE,SAAS,eAAe,kBAAkB,aAAa;AAAA,IAChE,GAAI,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC;AAAA,EACjF,CAAC;AAED,QAAM,mBAAmB,YAAY;AAErC,SACE,gBAAAA,MAAC,SAAI,WAAU,UACZ;AAAA,iBACC,gBAAAD,KAAC,SAAI,WAAU,0BACb,0BAAAA;AAAA,MAAC;AAAA;AAAA,QACC,aAAa;AAAA,QACb,OAAQ,MAAM,UAAU,SAAS,GAAG,eAAe,KAAgB;AAAA,QACnE,UAAU,CAAC,UAAU,MAAM,UAAU,SAAS,GAAG,eAAe,MAAM,OAAO,KAAK;AAAA,QAClF,WAAU;AAAA;AAAA,IACZ,GACF;AAAA,IAEF,gBAAAA,KAAC,SAAI,WAAU,qBACb,0BAAAC,MAAC,SACC;AAAA,sBAAAD,KAAC,eACE,gBAAM,gBAAgB,EAAE,IAAI,CAAC,gBAC5B,gBAAAA,KAAC,YACE,sBAAY,QAAQ,IAAI,CAAC,WACxB,gBAAAA,KAAC,aACE,iBAAO,gBAAgB,OAAO,WAAW,OAAO,OAAO,UAAU,QAAQ,OAAO,WAAW,CAAC,KAD/E,OAAO,EAEvB,CACD,KALY,YAAY,EAM3B,CACD,GACH;AAAA,MACA,gBAAAA,KAAC,aACE,oBACC,MAAM,KAAK,EAAE,QAAQ,iBAAiB,CAAC,EAAE,IAAI,CAAC,GAAG,WAC/C,gBAAAA,KAAC,YACE,kBAAQ,IAAI,CAAC,MAAM,WAClB,gBAAAA,KAAC,aACC,0BAAAA,KAAC,YAAS,WAAU,cAAa,KADnB,iBAAiB,MAAM,IAAI,MAAM,EAEjD,CACD,KALY,YAAY,MAAM,EAMjC,CACD,IACC,MAAM,YAAY,EAAE,MAAM,SAC5B,MAAM,YAAY,EAAE,KAAK,IAAI,CAAC,QAC5B,gBAAAA,KAAC,YAAsB,cAAY,IAAI,cAAc,KAAK,YACvD,cAAI,gBAAgB,EAAE,IAAI,CAAC,SAC1B,gBAAAA,KAAC,aAAyB,qBAAW,KAAK,OAAO,UAAU,MAAM,KAAK,WAAW,CAAC,KAAlE,KAAK,EAA+D,CACrF,KAHY,IAAI,EAInB,CACD,IAED,gBAAAA,KAAC,YACC,0BAAAA,KAAC,aAAU,SAAS,QAAQ,QAAQ,WAAU,eAC3C,wBACC,gBAAAC,MAAC,SAAI,WAAU,+EACb;AAAA,wBAAAD,KAAC,UAAK,WAAU,uBAAsB,+BAAiB;AAAA,QACvD,gBAAAA,KAAC,UAAK,WAAU,WAAU,mDAAqC;AAAA,SACjE,GAEJ,GACF,GAEJ;AAAA,OACF,GACF;AAAA,IACA,gBAAAC,MAAC,SAAI,WAAU,gDACb;AAAA,sBAAAA,MAAC,SAAI,WAAU,wCACZ;AAAA,cAAM,4BAA4B,EAAE,KAAK;AAAA,QAAO;AAAA,QAAI;AAAA,QACpD,MAAM,oBAAoB,EAAE,KAAK;AAAA,QAAO;AAAA,SAC3C;AAAA,MACA,gBAAAA,MAAC,SAAI,WAAU,aACb;AAAA,wBAAAD,KAAC,UAAO,SAAQ,WAAU,MAAK,MAAK,SAAS,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,mBAAmB,GAAG,sBAEhH;AAAA,QACA,gBAAAA,KAAC,UAAO,SAAQ,WAAU,MAAK,MAAK,SAAS,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,eAAe,GAAG,kBAExG;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAEJ;","names":["React","React","jsx","React","cva","jsx","jsxs","cva","jsx","jsx","jsxs"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/data-table.tsx","../../src/components/table.tsx","../../src/lib/utils.ts","../../src/components/button.tsx","../../src/components/input.tsx","../../src/components/skeleton.tsx"],"sourcesContent":["import * as React from \"react\"\nimport {\n type ColumnDef,\n type ColumnFiltersState,\n type SortingState,\n type VisibilityState,\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from \"@tanstack/react-table\"\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"./table\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Skeleton } from \"./skeleton\"\n\ninterface DataTableProps<TData, TValue> {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n searchKey?: string\n searchPlaceholder?: string\n loading?: boolean\n emptyState?: React.ReactNode\n pageSize?: number\n}\n\nfunction DataTable<TData, TValue>({\n columns,\n data,\n searchKey,\n searchPlaceholder = \"Filter...\",\n loading = false,\n emptyState,\n pageSize,\n}: DataTableProps<TData, TValue>) {\n const [sorting, setSorting] = React.useState<SortingState>([])\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({})\n const [rowSelection, setRowSelection] = React.useState({})\n\n const table = useReactTable({\n data,\n columns,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n state: { sorting, columnFilters, columnVisibility, rowSelection },\n ...(pageSize ? { initialState: { pagination: { pageSize, pageIndex: 0 } } } : {}),\n })\n\n const skeletonRowCount = pageSize ?? 5\n\n return (\n <div className=\"w-full\">\n {searchKey && (\n <div className=\"flex items-center py-4\">\n <Input\n placeholder={searchPlaceholder}\n value={(table.getColumn(searchKey)?.getFilterValue() as string) ?? \"\"}\n onChange={(event) => table.getColumn(searchKey)?.setFilterValue(event.target.value)}\n className=\"max-w-sm\"\n />\n </div>\n )}\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id}>\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {loading ? (\n Array.from({ length: skeletonRowCount }).map((_, rowIdx) => (\n <TableRow key={`skeleton-${rowIdx}`}>\n {columns.map((_col, colIdx) => (\n <TableCell key={`skeleton-cell-${rowIdx}-${colIdx}`}>\n <Skeleton className=\"h-4 w-full\" />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id} data-state={row.getIsSelected() && \"selected\"}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={columns.length} className=\"text-center\">\n {emptyState ?? (\n <div className=\"flex flex-col items-center justify-center gap-1 py-10 text-muted-foreground\">\n <span className=\"text-sm font-medium\">No results found.</span>\n <span className=\"text-xs\">Try adjusting your filters or search.</span>\n </div>\n )}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n <div className=\"flex items-center justify-end space-x-2 py-4\">\n <div className=\"flex-1 text-sm text-muted-foreground\">\n {table.getFilteredSelectedRowModel().rows.length} of{\" \"}\n {table.getFilteredRowModel().rows.length} row(s) selected.\n </div>\n <div className=\"space-x-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => table.previousPage()} disabled={!table.getCanPreviousPage()}>\n Previous\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={() => table.nextPage()} disabled={!table.getCanNextPage()}>\n Next\n </Button>\n </div>\n </div>\n </div>\n )\n}\n\nexport { DataTable, type DataTableProps }\n","import * as React from \"react\"\nimport { cn } from \"../lib/utils\"\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table ref={ref} className={cn(\"w-full caption-bottom text-sm\", className)} {...props} />\n </div>\n )\n)\nTable.displayName = \"Table\"\n\nconst TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b [&_tr]:border-[var(--hc-color-border-subtle)] [&_tr:hover]:bg-transparent\", className)} {...props} />\n )\n)\nTableHeader.displayName = \"TableHeader\"\n\nconst TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />\n )\n)\nTableBody.displayName = \"TableBody\"\n\nconst TableFooter = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tfoot ref={ref} className={cn(\"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\", className)} {...props} />\n )\n)\nTableFooter.displayName = \"TableFooter\"\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr ref={ref} className={cn(\"border-b border-[var(--hc-color-border-subtle)] transition-colors hover:bg-muted/60 data-[state=selected]:bg-muted\", className)} {...props} />\n )\n)\nTableRow.displayName = \"TableRow\"\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <th ref={ref} className={cn(\"h-12 px-4 text-xs font-semibold uppercase tracking-wider text-muted-foreground text-start align-middle [&:has([role=checkbox])]:pe-0\", className)} {...props} />\n )\n)\nTableHead.displayName = \"TableHead\"\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <td ref={ref} className={cn(\"px-4 py-3 text-sm text-foreground align-middle [&:has([role=checkbox])]:pe-0\", className)} {...props} />\n )\n)\nTableCell.displayName = \"TableCell\"\n\nconst TableCaption = React.forwardRef<HTMLTableCaptionElement, React.HTMLAttributes<HTMLTableCaptionElement>>(\n ({ className, ...props }, ref) => (\n <caption ref={ref} className={cn(\"mt-4 text-sm text-muted-foreground\", className)} {...props} />\n )\n)\nTableCaption.displayName = \"TableCaption\"\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption }\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\nimport * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Loader2 } from \"lucide-react\"\nimport { cn } from \"../lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-4\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground hover:bg-primary-hover\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive-hover\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary-hover\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground\",\n link:\n \"text-primary underline-offset-4 hover:underline\",\n success:\n \"bg-success text-success-foreground hover:bg-success-hover\",\n },\n size: {\n xs: \"h-7 px-2.5 text-xs\",\n sm: \"h-9 px-3\",\n default: \"h-10 px-4 py-2\",\n lg: \"h-11 px-8\",\n icon: \"h-10 w-10\",\n \"icon-sm\": \"h-8 w-8\",\n },\n shape: {\n default: \"rounded-md\",\n rounded: \"rounded-lg\",\n pill: \"rounded-full\",\n square: \"rounded-none\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n shape: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n loading?: boolean\n prefixIcon?: React.ReactNode\n suffixIcon?: React.ReactNode\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n shape,\n asChild = false,\n loading = false,\n prefixIcon,\n suffixIcon,\n children,\n disabled,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : \"button\"\n const isDisabled = disabled || loading\n\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, shape, className }))}\n ref={ref}\n disabled={isDisabled}\n {...props}\n >\n {loading && <Loader2 className=\"animate-spin\" />}\n {!loading && prefixIcon}\n {children}\n {suffixIcon}\n </Comp>\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Eye, EyeOff, X } from \"lucide-react\"\nimport { cn } from \"../lib/utils\"\n\nconst inputVariants = cva(\n \"flex w-full rounded-md border bg-background transition-[color,border-color,box-shadow] duration-150 file:border-0 file:bg-transparent file:font-medium file:text-foreground placeholder:text-muted-foreground focus-within:outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n variant: {\n default:\n \"border-input hover:border-muted-foreground focus-within:border-[var(--hc-primary-500)] focus-within:ring-[3px] focus-within:ring-[color-mix(in_srgb,var(--hc-primary-500)_22%,transparent)]\",\n error:\n \"border-[var(--hc-color-destructive)] focus-within:border-[var(--hc-color-destructive)] focus-within:ring-[3px] focus-within:ring-[color-mix(in_srgb,var(--hc-color-destructive)_22%,transparent)]\",\n success:\n \"border-[var(--hc-color-success)] focus-within:border-[var(--hc-color-success)] focus-within:ring-[3px] focus-within:ring-[color-mix(in_srgb,var(--hc-color-success)_22%,transparent)]\",\n },\n inputSize: {\n default: \"h-10 px-3 py-2 text-sm\",\n sm: \"h-8 px-2.5 py-1.5 text-xs\",\n lg: \"h-12 px-4 py-3 text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n inputSize: \"default\",\n },\n }\n)\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">,\n VariantProps<typeof inputVariants> {\n label?: string\n hint?: string\n leadingIcon?: React.ReactNode\n trailingIcon?: React.ReactNode\n clearable?: boolean\n onClear?: () => void\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n type,\n label,\n hint,\n variant = \"default\",\n inputSize = \"default\",\n leadingIcon,\n trailingIcon,\n clearable,\n onClear,\n disabled,\n id,\n value,\n defaultValue,\n onChange,\n ...props\n },\n ref\n ) => {\n const generatedId = React.useId()\n const inputId = id || generatedId\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = React.useState<\n string | number | readonly string[] | undefined\n >(defaultValue)\n const innerRef = React.useRef<HTMLInputElement | null>(null)\n\n React.useImperativeHandle(\n ref,\n () => innerRef.current as HTMLInputElement,\n []\n )\n\n const currentValue = isControlled ? value : internalValue\n const hasValue =\n currentValue !== undefined &&\n currentValue !== null &&\n String(currentValue).length > 0\n\n const isPassword = type === \"password\"\n const [showPassword, setShowPassword] = React.useState(false)\n const resolvedType = isPassword ? (showPassword ? \"text\" : \"password\") : type\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalValue(e.target.value)\n }\n onChange?.(e)\n }\n\n const handleClear = () => {\n if (!isControlled) {\n setInternalValue(\"\")\n }\n // Fire a synthetic input event so consumers relying on onChange receive it.\n const input = innerRef.current\n if (input) {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n \"value\"\n )?.set\n nativeInputValueSetter?.call(input, \"\")\n const event = new Event(\"input\", { bubbles: true })\n input.dispatchEvent(event)\n input.focus()\n }\n onClear?.()\n }\n\n const showClearButton = clearable && hasValue && !isPassword && !disabled\n const showPasswordToggle = isPassword && !disabled\n\n const trailingSlots = [\n showClearButton ? 1 : 0,\n showPasswordToggle ? 1 : 0,\n trailingIcon ? 1 : 0,\n ].reduce((a, b) => a + b, 0)\n\n const inputPaddingEnd =\n trailingSlots >= 2 ? \"pe-14\" : trailingSlots === 1 ? \"pe-8\" : undefined\n\n return (\n <div className=\"flex flex-col gap-1.5\" data-slot=\"input-root\">\n {label && (\n <label\n htmlFor={inputId}\n className={cn(\n \"text-sm font-medium text-foreground\",\n disabled && \"text-muted-foreground\"\n )}\n >\n {label}\n </label>\n )}\n <div\n data-slot=\"input-wrapper\"\n className={cn(\n inputVariants({ variant, inputSize }),\n \"relative flex items-center gap-2\",\n disabled && \"cursor-not-allowed opacity-50\",\n className\n )}\n >\n {leadingIcon && (\n <span className=\"shrink-0 text-muted-foreground\">\n {leadingIcon}\n </span>\n )}\n <input\n id={inputId}\n type={resolvedType}\n disabled={disabled}\n className={cn(\n \"flex-1 min-w-0 bg-transparent outline-none text-inherit placeholder:text-muted-foreground disabled:cursor-not-allowed\",\n inputPaddingEnd\n )}\n ref={innerRef}\n value={isControlled ? value : internalValue}\n defaultValue={isControlled ? undefined : undefined}\n onChange={handleChange}\n {...props}\n />\n {(showClearButton || showPasswordToggle) && (\n <span\n className=\"pointer-events-none absolute end-2 top-1/2 -translate-y-1/2 flex items-center gap-1\"\n >\n {showClearButton && (\n <button\n type=\"button\"\n aria-label=\"Clear\"\n onClick={handleClear}\n tabIndex={-1}\n className=\"pointer-events-auto inline-flex size-4 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--hc-primary-500)] focus-visible:ring-offset-1 focus-visible:ring-offset-background\"\n >\n <X className=\"size-4\" aria-hidden=\"true\" />\n </button>\n )}\n {showPasswordToggle && (\n <button\n type=\"button\"\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\n onClick={() => setShowPassword((s) => !s)}\n tabIndex={-1}\n className=\"pointer-events-auto inline-flex size-4 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--hc-primary-500)] focus-visible:ring-offset-1 focus-visible:ring-offset-background\"\n >\n {showPassword ? (\n <EyeOff className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <Eye className=\"size-4\" aria-hidden=\"true\" />\n )}\n </button>\n )}\n </span>\n )}\n {trailingIcon && !showClearButton && !showPasswordToggle && (\n <span className=\"shrink-0 text-muted-foreground\">\n {trailingIcon}\n </span>\n )}\n </div>\n {hint && (\n <p\n className={cn(\n \"text-xs\",\n variant === \"default\" && \"text-muted-foreground\",\n variant === \"error\" && \"text-destructive\",\n variant === \"success\" && \"text-success\"\n )}\n >\n {hint}\n </p>\n )}\n </div>\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input, inputVariants }\n","import * as React from \"react\"\nimport { cn } from \"../lib/utils\"\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n shape?: \"text\" | \"circle\" | \"rect\"\n}\n\nfunction Skeleton({ className, shape = \"rect\", ...props }: SkeletonProps) {\n return (\n <div\n className={cn(\n \"animate-pulse bg-muted\",\n shape === \"circle\" && \"rounded-full\",\n shape === \"text\" && \"h-4 w-full rounded-md\",\n shape === \"rect\" && \"rounded-md\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Skeleton }\n"],"mappings":"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","names":["React","React","jsx","React","cva","jsx","jsxs","cva","jsx","jsx","jsxs"]}
|