@murumets-ee/ui 0.10.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +15 -65
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3 -7
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
package/dist/index.d.mts
CHANGED
|
@@ -3,7 +3,7 @@ import { ClassValue } from "clsx";
|
|
|
3
3
|
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
4
4
|
import * as _$_radix_ui_react_slot0 from "@radix-ui/react-slot";
|
|
5
5
|
import * as _$react from "react";
|
|
6
|
-
import { ButtonHTMLAttributes, HTMLAttributes, InputHTMLAttributes, SelectHTMLAttributes, TdHTMLAttributes, TextareaHTMLAttributes, ThHTMLAttributes } from "react";
|
|
6
|
+
import { ButtonHTMLAttributes, ComponentProps, HTMLAttributes, InputHTMLAttributes, SelectHTMLAttributes, TdHTMLAttributes, TextareaHTMLAttributes, ThHTMLAttributes } from "react";
|
|
7
7
|
import * as RechartsPrimitive from "recharts";
|
|
8
8
|
import { TooltipValueType } from "recharts";
|
|
9
9
|
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
@@ -14,7 +14,7 @@ import * as _$react_hook_form0 from "react-hook-form";
|
|
|
14
14
|
import { ControllerProps, FieldPath, FieldValues } from "react-hook-form";
|
|
15
15
|
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
16
16
|
import * as SeparatorPrimitive from "@radix-ui/react-separator";
|
|
17
|
-
import { toast } from "sonner";
|
|
17
|
+
import { Toaster as Toaster$1, toast } from "sonner";
|
|
18
18
|
|
|
19
19
|
//#region src/badge.d.ts
|
|
20
20
|
interface BadgeProps extends HTMLAttributes<HTMLDivElement> {
|
|
@@ -65,22 +65,17 @@ declare function ChartContainer({
|
|
|
65
65
|
children,
|
|
66
66
|
config,
|
|
67
67
|
initialDimension,
|
|
68
|
+
nonce,
|
|
68
69
|
...props
|
|
69
|
-
}: _$react.ComponentProps<
|
|
70
|
+
}: _$react.ComponentProps<'div'> & {
|
|
70
71
|
config: ChartConfig;
|
|
71
|
-
children: _$react.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>[
|
|
72
|
+
children: _$react.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];
|
|
72
73
|
initialDimension?: {
|
|
73
74
|
width: number;
|
|
74
75
|
height: number;
|
|
75
|
-
};
|
|
76
|
+
}; /** CSP nonce forwarded to the inline `<style>` element. */
|
|
77
|
+
nonce?: string;
|
|
76
78
|
}): _$react_jsx_runtime0.JSX.Element;
|
|
77
|
-
declare const ChartStyle: ({
|
|
78
|
-
id,
|
|
79
|
-
config
|
|
80
|
-
}: {
|
|
81
|
-
id: string;
|
|
82
|
-
config: ChartConfig;
|
|
83
|
-
}) => _$react_jsx_runtime0.JSX.Element | null;
|
|
84
79
|
declare const ChartTooltip: typeof RechartsPrimitive.Tooltip;
|
|
85
80
|
declare function ChartTooltipContent({
|
|
86
81
|
active,
|
|
@@ -96,24 +91,13 @@ declare function ChartTooltipContent({
|
|
|
96
91
|
color,
|
|
97
92
|
nameKey,
|
|
98
93
|
labelKey
|
|
99
|
-
}: _$react.ComponentProps<typeof RechartsPrimitive.Tooltip> & _$react.ComponentProps<
|
|
94
|
+
}: _$react.ComponentProps<typeof RechartsPrimitive.Tooltip> & _$react.ComponentProps<'div'> & {
|
|
100
95
|
hideLabel?: boolean;
|
|
101
96
|
hideIndicator?: boolean;
|
|
102
|
-
indicator?:
|
|
97
|
+
indicator?: 'line' | 'dot' | 'dashed';
|
|
103
98
|
nameKey?: string;
|
|
104
99
|
labelKey?: string;
|
|
105
|
-
} & Omit<RechartsPrimitive.DefaultTooltipContentProps<TooltipValueType, TooltipNameType>,
|
|
106
|
-
declare const ChartLegend: _$react.MemoExoticComponent<(outsideProps: RechartsPrimitive.LegendProps) => _$react.ReactPortal | null>;
|
|
107
|
-
declare function ChartLegendContent({
|
|
108
|
-
className,
|
|
109
|
-
hideIcon,
|
|
110
|
-
payload,
|
|
111
|
-
verticalAlign,
|
|
112
|
-
nameKey
|
|
113
|
-
}: _$react.ComponentProps<"div"> & {
|
|
114
|
-
hideIcon?: boolean;
|
|
115
|
-
nameKey?: string;
|
|
116
|
-
} & RechartsPrimitive.DefaultLegendContentProps): _$react_jsx_runtime0.JSX.Element | null;
|
|
100
|
+
} & Omit<RechartsPrimitive.DefaultTooltipContentProps<TooltipValueType, TooltipNameType>, 'accessibilityLayer'>): _$react_jsx_runtime0.JSX.Element | null;
|
|
117
101
|
//#endregion
|
|
118
102
|
//#region src/checkbox.d.ts
|
|
119
103
|
declare const Checkbox: _$react.ForwardRefExoticComponent<Omit<CheckboxPrimitive.CheckboxProps & _$react.RefAttributes<HTMLButtonElement>, "ref"> & _$react.RefAttributes<HTMLButtonElement>>;
|
|
@@ -156,16 +140,6 @@ declare function DataTableColumnHeader<TData, TValue>({
|
|
|
156
140
|
className
|
|
157
141
|
}: DataTableColumnHeaderProps<TData, TValue>): _$react_jsx_runtime0.JSX.Element;
|
|
158
142
|
//#endregion
|
|
159
|
-
//#region src/data-table/data-table-pagination.d.ts
|
|
160
|
-
interface DataTablePaginationProps<TData> {
|
|
161
|
-
table: Table$1<TData>;
|
|
162
|
-
className?: string;
|
|
163
|
-
}
|
|
164
|
-
declare function DataTablePagination<TData>({
|
|
165
|
-
table,
|
|
166
|
-
className
|
|
167
|
-
}: DataTablePaginationProps<TData>): _$react_jsx_runtime0.JSX.Element;
|
|
168
|
-
//#endregion
|
|
169
143
|
//#region src/data-table/data-table-view-options.d.ts
|
|
170
144
|
interface DataTableViewOptionsProps<TData> {
|
|
171
145
|
table: Table$1<TData>;
|
|
@@ -178,8 +152,6 @@ declare function DataTableViewOptions<TData>({
|
|
|
178
152
|
declare const Dialog: _$react.FC<DialogPrimitive.DialogProps>;
|
|
179
153
|
declare const DialogTrigger: _$react.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & _$react.RefAttributes<HTMLButtonElement>>;
|
|
180
154
|
declare const DialogClose: _$react.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & _$react.RefAttributes<HTMLButtonElement>>;
|
|
181
|
-
declare const DialogPortal: _$react.FC<DialogPrimitive.DialogPortalProps>;
|
|
182
|
-
declare const DialogOverlay: _$react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & _$react.RefAttributes<HTMLDivElement>, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
|
|
183
155
|
declare const DialogContent: _$react.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & _$react.RefAttributes<HTMLDivElement>, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
|
|
184
156
|
declare function DialogHeader({
|
|
185
157
|
className,
|
|
@@ -195,42 +167,19 @@ declare const DialogDescription: _$react.ForwardRefExoticComponent<Omit<DialogPr
|
|
|
195
167
|
//#region src/dropdown-menu.d.ts
|
|
196
168
|
declare const DropdownMenu: _$react.FC<DropdownMenuPrimitive.DropdownMenuProps>;
|
|
197
169
|
declare const DropdownMenuTrigger: _$react.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & _$react.RefAttributes<HTMLButtonElement>>;
|
|
198
|
-
declare const DropdownMenuGroup: _$react.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuGroupProps & _$react.RefAttributes<HTMLDivElement>>;
|
|
199
170
|
declare const DropdownMenuPortal: _$react.FC<DropdownMenuPrimitive.DropdownMenuPortalProps>;
|
|
200
|
-
declare const DropdownMenuSub: _$react.FC<DropdownMenuPrimitive.DropdownMenuSubProps>;
|
|
201
171
|
declare const DropdownMenuContent: _$react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & _$react.RefAttributes<HTMLDivElement>, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
|
|
202
172
|
declare const DropdownMenuItem: _$react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & _$react.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
203
173
|
inset?: boolean;
|
|
204
174
|
} & _$react.RefAttributes<HTMLDivElement>>;
|
|
205
|
-
declare const DropdownMenuCheckboxItem: _$react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuCheckboxItemProps & _$react.RefAttributes<HTMLDivElement>, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
|
|
206
175
|
declare const DropdownMenuLabel: _$react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & _$react.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
207
176
|
inset?: boolean;
|
|
208
177
|
} & _$react.RefAttributes<HTMLDivElement>>;
|
|
209
178
|
declare const DropdownMenuSeparator: _$react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & _$react.RefAttributes<HTMLDivElement>, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
|
|
210
|
-
declare const DropdownMenuSubTrigger: _$react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubTriggerProps & _$react.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
211
|
-
inset?: boolean;
|
|
212
|
-
} & _$react.RefAttributes<HTMLDivElement>>;
|
|
213
|
-
declare const DropdownMenuSubContent: _$react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubContentProps & _$react.RefAttributes<HTMLDivElement>, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
|
|
214
|
-
declare function DropdownMenuShortcut({
|
|
215
|
-
className,
|
|
216
|
-
...props
|
|
217
|
-
}: HTMLAttributes<HTMLSpanElement>): _$react_jsx_runtime0.JSX.Element;
|
|
218
179
|
//#endregion
|
|
219
180
|
//#region src/form.d.ts
|
|
220
181
|
declare const Form: <TFieldValues extends FieldValues, TContext = any, TTransformedValues = TFieldValues>(props: _$react_hook_form0.FormProviderProps<TFieldValues, TContext, TTransformedValues>) => React.JSX.Element;
|
|
221
182
|
declare function FormField<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>(props: ControllerProps<TFieldValues, TName>): _$react_jsx_runtime0.JSX.Element;
|
|
222
|
-
declare function useFormField(): {
|
|
223
|
-
invalid: boolean;
|
|
224
|
-
isDirty: boolean;
|
|
225
|
-
isTouched: boolean;
|
|
226
|
-
isValidating: boolean;
|
|
227
|
-
error?: _$react_hook_form0.FieldError;
|
|
228
|
-
id: string;
|
|
229
|
-
name: string;
|
|
230
|
-
formItemId: string;
|
|
231
|
-
formDescriptionId: string;
|
|
232
|
-
formMessageId: string;
|
|
233
|
-
};
|
|
234
183
|
declare const FormItem: _$react.ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & _$react.RefAttributes<HTMLDivElement>>;
|
|
235
184
|
declare const FormLabel: _$react.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & _$react.RefAttributes<HTMLLabelElement>, "ref"> & _$react.RefAttributes<HTMLLabelElement>>;
|
|
236
185
|
declare const FormControl: _$react.ForwardRefExoticComponent<Omit<_$_radix_ui_react_slot0.SlotProps & _$react.RefAttributes<HTMLElement>, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
|
|
@@ -259,20 +208,21 @@ declare function Skeleton({
|
|
|
259
208
|
}: HTMLAttributes<HTMLDivElement>): _$react_jsx_runtime0.JSX.Element;
|
|
260
209
|
//#endregion
|
|
261
210
|
//#region src/sonner.d.ts
|
|
262
|
-
declare function Toaster(
|
|
211
|
+
declare function Toaster({
|
|
212
|
+
toastOptions,
|
|
213
|
+
...props
|
|
214
|
+
}: ComponentProps<typeof Toaster$1>): _$react_jsx_runtime0.JSX.Element;
|
|
263
215
|
//#endregion
|
|
264
216
|
//#region src/table.d.ts
|
|
265
217
|
declare const Table: _$react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableElement> & _$react.RefAttributes<HTMLTableElement>>;
|
|
266
218
|
declare const TableHeader: _$react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & _$react.RefAttributes<HTMLTableSectionElement>>;
|
|
267
219
|
declare const TableBody: _$react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & _$react.RefAttributes<HTMLTableSectionElement>>;
|
|
268
|
-
declare const TableFooter: _$react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableSectionElement> & _$react.RefAttributes<HTMLTableSectionElement>>;
|
|
269
220
|
declare const TableRow: _$react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableRowElement> & _$react.RefAttributes<HTMLTableRowElement>>;
|
|
270
221
|
declare const TableHead: _$react.ForwardRefExoticComponent<ThHTMLAttributes<HTMLTableCellElement> & _$react.RefAttributes<HTMLTableCellElement>>;
|
|
271
222
|
declare const TableCell: _$react.ForwardRefExoticComponent<TdHTMLAttributes<HTMLTableCellElement> & _$react.RefAttributes<HTMLTableCellElement>>;
|
|
272
|
-
declare const TableCaption: _$react.ForwardRefExoticComponent<HTMLAttributes<HTMLTableCaptionElement> & _$react.RefAttributes<HTMLTableCaptionElement>>;
|
|
273
223
|
//#endregion
|
|
274
224
|
//#region src/textarea.d.ts
|
|
275
225
|
declare const Textarea: _$react.ForwardRefExoticComponent<TextareaHTMLAttributes<HTMLTextAreaElement> & _$react.RefAttributes<HTMLTextAreaElement>>;
|
|
276
226
|
//#endregion
|
|
277
|
-
export { Badge, type BadgeProps, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, type ChartConfig, ChartContainer,
|
|
227
|
+
export { Badge, type BadgeProps, Button, type ButtonProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent, Checkbox, DataTable, DataTableColumnHeader, DataTableViewOptions, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuSeparator, DropdownMenuTrigger, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Input, Label, Select, Separator, Skeleton, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Textarea, Toaster, cn, toast };
|
|
278
228
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/badge.tsx","../src/button.tsx","../src/card.tsx","../src/chart.tsx","../src/checkbox.tsx","../src/data-table/data-table.tsx","../src/data-table/data-table-column-header.tsx","../src/data-table/data-table-
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/badge.tsx","../src/button.tsx","../src/card.tsx","../src/chart.tsx","../src/checkbox.tsx","../src/data-table/data-table.tsx","../src/data-table/data-table-column-header.tsx","../src/data-table/data-table-view-options.tsx","../src/dialog.tsx","../src/dropdown-menu.tsx","../src/form.tsx","../src/input.tsx","../src/label.tsx","../src/lib/cn.ts","../src/select.tsx","../src/separator.tsx","../src/skeleton.tsx","../src/sonner.tsx","../src/table.tsx","../src/textarea.tsx"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{clsx as e}from"clsx";import{twMerge as t}from"tailwind-merge";import{Fragment as n,jsx as r,jsxs as i}from"react/jsx-runtime";import{Slot as a}from"@radix-ui/react-slot";import{ArrowDown as o,ArrowUp as s,Check as c,ChevronLeft as l,ChevronRight as u,ChevronsLeft as d,ChevronsRight as f,ChevronsUpDown as p,EyeOff as m,Loader2 as h,Settings2 as g,X as _}from"lucide-react";import*as v from"react";import{createContext as y,forwardRef as b,useContext as
|
|
3
|
-
|
|
4
|
-
${n.map(([e,n])=>{let r=n.theme?.[t]??n.color;return r?` --color-${e}: ${r};`:null}).join(`
|
|
5
|
-
`)}
|
|
6
|
-
}
|
|
7
|
-
`).join(`
|
|
8
|
-
`)}}):null},Ce=S.Tooltip;function we({active:e,payload:t,className:a,indicator:o=`dot`,hideLabel:s=!1,hideIndicator:c=!1,label:l,labelFormatter:u,labelClassName:d,formatter:f,color:p,nameKey:m,labelKey:h}){let{config:g}=P(),_=v.useMemo(()=>{if(s||!t?.length)return null;let[e]=t,n=I(g,e,`${h??e?.dataKey??e?.name??`value`}`),i=!h&&typeof l==`string`?g[l]?.label??l:n?.label;return u?r(`div`,{className:T(`font-medium`,d),children:u(i,t)}):i?r(`div`,{className:T(`font-medium`,d),children:i}):null},[l,u,t,s,d,g,h]);if(!e||!t?.length)return null;let y=t.length===1&&o!==`dot`;return i(`div`,{className:T(`grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl`,a),children:[y?null:_,r(`div`,{className:`grid gap-1.5`,children:t.filter(e=>e.type!==`none`).map((e,t)=>{let a=I(g,e,`${m??e.name??e.dataKey??`value`}`),s=p??e.payload?.fill??e.color;return r(`div`,{className:T(`flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground`,o===`dot`&&`items-center`),children:f&&e?.value!==void 0&&e.name?f(e.value,e.name,e,t,e.payload):i(n,{children:[a?.icon?r(a.icon,{}):!c&&r(`div`,{className:T(`shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)`,{"h-2.5 w-2.5":o===`dot`,"w-1":o===`line`,"w-0 border-[1.5px] border-dashed bg-transparent":o===`dashed`,"my-0.5":y&&o===`dashed`}),style:{"--color-bg":s,"--color-border":s}}),i(`div`,{className:T(`flex flex-1 justify-between leading-none`,y?`items-end`:`items-center`),children:[i(`div`,{className:`grid gap-1.5`,children:[y?_:null,r(`span`,{className:`text-muted-foreground`,children:a?.label??e.name})]}),e.value!=null&&r(`span`,{className:`font-mono font-medium text-foreground tabular-nums`,children:typeof e.value==`number`?e.value.toLocaleString():String(e.value)})]})]})},t)})})]})}const Te=S.Legend;function Ee({className:e,hideIcon:t=!1,payload:n,verticalAlign:a=`bottom`,nameKey:o}){let{config:s}=P();return n?.length?r(`div`,{className:T(`flex items-center justify-center gap-4`,a===`top`?`pb-3`:`pt-3`,e),children:n.filter(e=>e.type!==`none`).map((e,n)=>{let a=I(s,e,`${o??e.dataKey??`value`}`);return i(`div`,{className:T(`flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground`),children:[a?.icon&&!t?r(a.icon,{}):r(`div`,{className:`h-2 w-2 shrink-0 rounded-[2px]`,style:{backgroundColor:e.color}}),a?.label]},n)})}):null}function I(e,t,n){if(typeof t!=`object`||!t)return;let r=`payload`in t&&typeof t.payload==`object`&&t.payload!==null?t.payload:void 0,i=n;return n in t&&typeof t[n]==`string`?i=t[n]:r&&n in r&&typeof r[n]==`string`&&(i=r[n]),i in e?e[i]:e[n]}const De=b(({className:e,...t},n)=>r(ne.Root,{ref:n,className:T(`peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow-xs`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`disabled:cursor-not-allowed disabled:opacity-50`,`data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground`,e),...t,children:r(ne.Indicator,{className:`flex items-center justify-center text-current`,children:r(c,{className:`h-3.5 w-3.5`})})}));De.displayName=`Checkbox`;const L=b(({className:e,type:t,...n},i)=>r(`input`,{type:t,ref:i,className:T(`flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs`,`transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground`,`placeholder:text-muted-foreground`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`disabled:cursor-not-allowed disabled:opacity-50`,e),...n}));L.displayName=`Input`;const R=b(({className:e,...t},n)=>r(`div`,{className:`relative w-full overflow-auto`,children:r(`table`,{ref:n,className:T(`w-full caption-bottom text-sm`,e),...t})}));R.displayName=`Table`;const z=b(({className:e,...t},n)=>r(`thead`,{ref:n,className:T(`[&_tr]:border-b`,e),...t}));z.displayName=`TableHeader`;const B=b(({className:e,...t},n)=>r(`tbody`,{ref:n,className:T(`[&_tr:last-child]:border-0`,e),...t}));B.displayName=`TableBody`;const Oe=b(({className:e,...t},n)=>r(`tfoot`,{ref:n,className:T(`border-t bg-muted/50 font-medium [&>tr]:last:border-b-0`,e),...t}));Oe.displayName=`TableFooter`;const V=b(({className:e,...t},n)=>r(`tr`,{ref:n,className:T(`border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted`,e),...t}));V.displayName=`TableRow`;const H=b(({className:e,...t},n)=>r(`th`,{ref:n,className:T(`h-10 px-2 text-left align-middle font-medium text-muted-foreground`,`[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...t}));H.displayName=`TableHead`;const U=b(({className:e,...t},n)=>r(`td`,{ref:n,className:T(`p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...t}));U.displayName=`TableCell`;const ke=b(({className:e,...t},n)=>r(`caption`,{ref:n,className:T(`mt-4 text-sm text-muted-foreground`,e),...t}));ke.displayName=`TableCaption`;function Ae({table:e,className:t}){let n=e.getFilteredSelectedRowModel().rows.length,a=e.getFilteredRowModel().rows.length;return i(`div`,{className:T(`flex items-center justify-between px-2`,t),children:[r(`div`,{className:`flex-1 text-sm text-muted-foreground`,children:n>0&&i(`span`,{children:[n,` of `,a,` row(s) selected`]})}),i(`div`,{className:`flex items-center space-x-6 lg:space-x-8`,children:[r(`div`,{className:`flex items-center space-x-2`,children:i(`p`,{className:`text-sm font-medium`,children:[`Page `,e.getState().pagination.pageIndex+1,` of `,e.getPageCount()]})}),i(`div`,{className:`flex items-center space-x-2`,children:[i(E,{variant:`outline`,size:`icon`,className:`hidden h-8 w-8 lg:flex`,onClick:()=>e.setPageIndex(0),disabled:!e.getCanPreviousPage(),children:[r(`span`,{className:`sr-only`,children:`Go to first page`}),r(d,{className:`h-4 w-4`})]}),i(E,{variant:`outline`,size:`icon`,className:`h-8 w-8`,onClick:()=>e.previousPage(),disabled:!e.getCanPreviousPage(),children:[r(`span`,{className:`sr-only`,children:`Go to previous page`}),r(l,{className:`h-4 w-4`})]}),i(E,{variant:`outline`,size:`icon`,className:`h-8 w-8`,onClick:()=>e.nextPage(),disabled:!e.getCanNextPage(),children:[r(`span`,{className:`sr-only`,children:`Go to next page`}),r(u,{className:`h-4 w-4`})]}),i(E,{variant:`outline`,size:`icon`,className:`hidden h-8 w-8 lg:flex`,onClick:()=>e.setPageIndex(e.getPageCount()-1),disabled:!e.getCanNextPage(),children:[r(`span`,{className:`sr-only`,children:`Go to last page`}),r(f,{className:`h-4 w-4`})]})]})]})]})}const W=C.Root,G=C.Trigger,je=C.Group,Me=C.Portal,Ne=C.Sub,K=b(({className:e,sideOffset:t=4,...n},i)=>r(C.Portal,{children:r(C.Content,{ref:i,sideOffset:t,className:T(`z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md`,`data-[state=open]:animate-in data-[state=closed]:animate-out`,`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,`data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95`,`data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2`,`data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2`,e),...n})}));K.displayName=`DropdownMenuContent`;const q=b(({className:e,inset:t,...n},i)=>r(C.Item,{ref:i,className:T(`relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none`,`transition-colors focus:bg-accent focus:text-accent-foreground`,`data-[disabled]:pointer-events-none data-[disabled]:opacity-50`,`[&_svg]:pointer-events-none [&_svg]:shrink-0`,t&&`pl-8`,e),...n}));q.displayName=`DropdownMenuItem`;const J=b(({className:e,children:t,checked:n,...a},o)=>i(C.CheckboxItem,{ref:o,className:T(`relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none`,`transition-colors focus:bg-accent focus:text-accent-foreground`,`data-[disabled]:pointer-events-none data-[disabled]:opacity-50`,e),checked:n,...a,children:[r(`span`,{className:`absolute left-2 flex h-3.5 w-3.5 items-center justify-center`,children:r(C.ItemIndicator,{children:r(c,{className:`h-4 w-4`})})}),t]}));J.displayName=`DropdownMenuCheckboxItem`;const Y=b(({className:e,inset:t,...n},i)=>r(C.Label,{ref:i,className:T(`px-2 py-1.5 text-sm font-semibold`,t&&`pl-8`,e),...n}));Y.displayName=`DropdownMenuLabel`;const X=b(({className:e,...t},n)=>r(C.Separator,{ref:n,className:T(`-mx-1 my-1 h-px bg-muted`,e),...t}));X.displayName=`DropdownMenuSeparator`;const Pe=b(({className:e,inset:t,children:n,...a},o)=>i(C.SubTrigger,{ref:o,className:T(`flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none`,`focus:bg-accent data-[state=open]:bg-accent`,`[&_svg]:pointer-events-none [&_svg]:shrink-0`,t&&`pl-8`,e),...a,children:[n,r(u,{className:`ml-auto h-4 w-4`})]}));Pe.displayName=`DropdownMenuSubTrigger`;const Fe=b(({className:e,...t},n)=>r(C.SubContent,{ref:n,className:T(`z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg`,`data-[state=open]:animate-in data-[state=closed]:animate-out`,`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,`data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95`,`data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2`,`data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2`,e),...t}));Fe.displayName=`DropdownMenuSubContent`;function Ie({className:e,...t}){return r(`span`,{className:T(`ml-auto text-xs tracking-widest opacity-60`,e),...t})}function Le({table:e}){return i(W,{children:[r(G,{asChild:!0,children:i(E,{variant:`outline`,size:`sm`,className:`ml-auto hidden h-8 lg:flex`,children:[r(g,{className:`mr-2 h-4 w-4`}),`View`]})}),i(K,{align:`end`,className:`w-[150px]`,children:[r(Y,{children:`Toggle columns`}),r(X,{}),e.getAllColumns().filter(e=>e.accessorFn!==void 0&&e.getCanHide()).map(e=>r(J,{className:`capitalize`,checked:e.getIsVisible(),onCheckedChange:t=>e.toggleVisibility(!!t),children:e.id},e.id))]})]})}function Re({columns:e,data:t,searchKey:n,searchPlaceholder:a=`Filter...`,pageSize:o=10,emptyMessage:s=`No results.`,classNames:c}){let[l,u]=x([]),[d,f]=x([]),[p,m]=x({}),[h,g]=x({}),_=ce({data:t,columns:e,state:{sorting:l,columnFilters:d,columnVisibility:p,rowSelection:h},onSortingChange:u,onColumnFiltersChange:f,onColumnVisibilityChange:m,onRowSelectionChange:g,getCoreRowModel:ie(),getSortedRowModel:se(),getFilteredRowModel:ae(),getPaginationRowModel:oe(),initialState:{pagination:{pageSize:o}}});return i(`div`,{className:T(`space-y-4`,c?.root),children:[i(`div`,{className:T(`flex items-center justify-between`,c?.toolbar),children:[r(`div`,{className:`flex flex-1 items-center space-x-2`,children:n&&r(L,{placeholder:a,value:_.getColumn(n)?.getFilterValue()??``,onChange:e=>_.getColumn(n)?.setFilterValue(e.target.value),className:`h-8 w-[150px] lg:w-[250px]`})}),r(Le,{table:_})]}),r(`div`,{className:T(`rounded-md border`,c?.table),children:i(R,{children:[r(z,{children:_.getHeaderGroups().map(e=>r(V,{children:e.headers.map(e=>r(H,{colSpan:e.colSpan,children:e.isPlaceholder?null:re(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),r(B,{children:_.getRowModel().rows.length>0?_.getRowModel().rows.map(e=>r(V,{"data-state":e.getIsSelected()&&`selected`,children:e.getVisibleCells().map(e=>r(U,{children:re(e.column.columnDef.cell,e.getContext())},e.id))},e.id)):r(V,{children:r(U,{colSpan:e.length,className:`h-24 text-center`,children:s})})})]})}),r(Ae,{table:_,className:c?.pagination})]})}function ze({column:e,title:t,className:a}){return e.getCanSort()?r(`div`,{className:T(`flex items-center space-x-2`,a),children:i(W,{children:[r(G,{asChild:!0,children:i(E,{variant:`ghost`,size:`sm`,className:`-ml-3 h-8 data-[state=open]:bg-accent`,children:[r(`span`,{children:t}),e.getIsSorted()===`desc`?r(o,{className:`ml-2 h-4 w-4`}):e.getIsSorted()===`asc`?r(s,{className:`ml-2 h-4 w-4`}):r(p,{className:`ml-2 h-4 w-4`})]})}),i(K,{align:`start`,children:[i(q,{onClick:()=>e.toggleSorting(!1),children:[r(s,{className:`mr-2 h-3.5 w-3.5 text-muted-foreground/70`}),`Asc`]}),i(q,{onClick:()=>e.toggleSorting(!0),children:[r(o,{className:`mr-2 h-3.5 w-3.5 text-muted-foreground/70`}),`Desc`]}),e.getCanHide()&&i(n,{children:[r(X,{}),i(q,{onClick:()=>e.toggleVisibility(!1),children:[r(m,{className:`mr-2 h-3.5 w-3.5 text-muted-foreground/70`}),`Hide`]})]})]})]})}):r(`div`,{className:T(a),children:t})}const Be=w.Root,Ve=w.Trigger,He=w.Close,Ue=w.Portal,Z=b(({className:e,...t},n)=>r(w.Overlay,{ref:n,className:T(`fixed inset-0 z-50 bg-black/80`,`data-[state=open]:animate-in data-[state=closed]:animate-out`,`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,e),...t}));Z.displayName=`DialogOverlay`;const We=b(({className:e,children:t,...n},a)=>i(Ue,{children:[r(Z,{}),i(w.Content,{ref:a,className:T(`fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%]`,`gap-4 border bg-background p-6 shadow-lg sm:rounded-lg`,`data-[state=open]:animate-in data-[state=closed]:animate-out`,`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,`data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95`,`data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]`,`data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]`,e),...n,children:[t,i(w.Close,{className:T(`absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity`,`hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2`,`disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground`,`cursor-pointer`),children:[r(_,{className:`h-4 w-4`}),r(`span`,{className:`sr-only`,children:`Close`})]})]})]}));We.displayName=`DialogContent`;function Ge({className:e,...t}){return r(`div`,{className:T(`flex flex-col space-y-1.5 text-center sm:text-left`,e),...t})}function Ke({className:e,...t}){return r(`div`,{className:T(`flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2`,e),...t})}const qe=b(({className:e,...t},n)=>r(w.Title,{ref:n,className:T(`text-lg font-semibold leading-none tracking-tight`,e),...t}));qe.displayName=`DialogTitle`;const Je=b(({className:e,...t},n)=>r(w.Description,{ref:n,className:T(`text-sm text-muted-foreground`,e),...t}));Je.displayName=`DialogDescription`;const Q=b(({className:e,...t},n)=>r(fe.Root,{ref:n,className:T(`text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70`,e),...t}));Q.displayName=`Label`;const Ye=ue,Xe=y({});function Ze(e){return r(Xe.Provider,{value:{name:e.name},children:r(le,{...e})})}const Qe=y({});function $(){let e=ee(Xe),t=ee(Qe),{getFieldState:n,formState:r}=de(),i=n(e.name,r),{id:a}=t;return{id:a,name:e.name,formItemId:`${a}-form-item`,formDescriptionId:`${a}-form-item-description`,formMessageId:`${a}-form-item-message`,...i}}const $e=b(({className:e,...t},n)=>{let i=te();return r(Qe.Provider,{value:{id:i},children:r(`div`,{ref:n,className:T(`space-y-2`,e),...t})})});$e.displayName=`FormItem`;const et=b(({className:e,...t},n)=>{let{error:i,formItemId:a}=$();return r(Q,{ref:n,className:T(i&&`text-destructive`,e),htmlFor:a,...t})});et.displayName=`FormLabel`;const tt=b(({...e},t)=>{let{error:n,formItemId:i,formDescriptionId:o,formMessageId:s}=$();return r(a,{ref:t,id:i,"aria-describedby":n?`${o} ${s}`:o,"aria-invalid":!!n,...e})});tt.displayName=`FormControl`;const nt=b(({className:e,...t},n)=>{let{formDescriptionId:i}=$();return r(`p`,{ref:n,id:i,className:T(`text-[0.8rem] text-muted-foreground`,e),...t})});nt.displayName=`FormDescription`;const rt=b(({className:e,children:t,...n},i)=>{let{error:a,formMessageId:o}=$(),s=a?String(a.message):t;return s?r(`p`,{ref:i,id:o,className:T(`text-[0.8rem] font-medium text-destructive`,e),...n,children:s}):null});rt.displayName=`FormMessage`;const it=b(({className:e,children:t,...n},i)=>r(`select`,{ref:i,className:T(`flex h-9 w-full rounded-md border border-input bg-background text-foreground px-3 py-1 text-sm shadow-xs`,`transition-colors`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`disabled:cursor-not-allowed disabled:opacity-50`,e),...n,children:t}));it.displayName=`Select`;const at=b(({className:e,orientation:t=`horizontal`,decorative:n=!0,...i},a)=>r(pe.Root,{ref:a,decorative:n,orientation:t,className:T(`shrink-0 bg-border`,t===`horizontal`?`h-[1px] w-full`:`h-full w-[1px]`,e),...i}));at.displayName=`Separator`;function ot({className:e,...t}){return r(`div`,{className:T(`animate-pulse rounded-md bg-muted`,e),...t})}function st(){return r(me,{position:`bottom-right`,toastOptions:{style:{background:`var(--color-background)`,color:`var(--color-foreground)`,border:`1px solid var(--color-border)`},classNames:{error:`sonner-error`,success:`sonner-success`}}})}const ct=b(({className:e,...t},n)=>r(`textarea`,{ref:n,className:T(`flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs`,`placeholder:text-muted-foreground`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`disabled:cursor-not-allowed disabled:opacity-50`,e),...t}));ct.displayName=`Textarea`;export{_e as Badge,E as Button,D as Card,j as CardContent,A as CardDescription,M as CardFooter,O as CardHeader,k as CardTitle,Se as ChartContainer,Te as ChartLegend,Ee as ChartLegendContent,F as ChartStyle,Ce as ChartTooltip,we as ChartTooltipContent,De as Checkbox,Re as DataTable,ze as DataTableColumnHeader,Ae as DataTablePagination,Le as DataTableViewOptions,Be as Dialog,He as DialogClose,We as DialogContent,Je as DialogDescription,Ke as DialogFooter,Ge as DialogHeader,Z as DialogOverlay,Ue as DialogPortal,qe as DialogTitle,Ve as DialogTrigger,W as DropdownMenu,J as DropdownMenuCheckboxItem,K as DropdownMenuContent,je as DropdownMenuGroup,q as DropdownMenuItem,Y as DropdownMenuLabel,Me as DropdownMenuPortal,X as DropdownMenuSeparator,Ie as DropdownMenuShortcut,Ne as DropdownMenuSub,Fe as DropdownMenuSubContent,Pe as DropdownMenuSubTrigger,G as DropdownMenuTrigger,Ye as Form,tt as FormControl,nt as FormDescription,Ze as FormField,$e as FormItem,et as FormLabel,rt as FormMessage,L as Input,Q as Label,it as Select,at as Separator,ot as Skeleton,R as Table,B as TableBody,ke as TableCaption,U as TableCell,Oe as TableFooter,H as TableHead,z as TableHeader,V as TableRow,ct as Textarea,st as Toaster,T as cn,he as toast,$ as useFormField};
|
|
2
|
+
import{clsx as e}from"clsx";import{twMerge as t}from"tailwind-merge";import{Fragment as n,jsx as r,jsxs as i}from"react/jsx-runtime";import{Slot as a}from"@radix-ui/react-slot";import{ArrowDown as o,ArrowUp as s,Check as c,ChevronLeft as l,ChevronRight as u,ChevronsLeft as d,ChevronsRight as f,ChevronsUpDown as p,EyeOff as m,Loader2 as h,Settings2 as g,X as _}from"lucide-react";import*as v from"react";import{createContext as y,forwardRef as b,useContext as x,useId as ee,useState as S}from"react";import*as te from"recharts";import*as ne from"@radix-ui/react-checkbox";import{flexRender as re,getCoreRowModel as ie,getFilteredRowModel as ae,getPaginationRowModel as oe,getSortedRowModel as se,useReactTable as ce}from"@tanstack/react-table";import*as C from"@radix-ui/react-dropdown-menu";import*as w from"@radix-ui/react-dialog";import{Controller as le,FormProvider as ue,useFormContext as de}from"react-hook-form";import*as fe from"@radix-ui/react-label";import*as pe from"@radix-ui/react-separator";import{Toaster as me,toast as he}from"sonner";function T(...n){return t(e(n))}const ge={default:`border-transparent bg-primary text-primary-foreground shadow-xs`,secondary:`border-transparent bg-secondary text-secondary-foreground`,destructive:`border-transparent bg-destructive text-destructive-foreground shadow-xs`,outline:`text-foreground`};function _e({className:e,variant:t=`default`,...n}){return r(`div`,{className:T(`inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold`,`transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2`,ge[t],e),...n})}const ve={default:`bg-primary text-primary-foreground shadow-xs hover:bg-primary/90`,destructive:`bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90`,outline:`border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground`,secondary:`bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80`,ghost:`hover:bg-accent hover:text-accent-foreground`,link:`text-primary underline-offset-4 hover:underline`},ye={default:`h-9 px-4 py-2`,sm:`h-8 rounded-md px-3 text-xs`,lg:`h-10 rounded-md px-8`,icon:`h-9 w-9`},E=b(({className:e,variant:t=`default`,size:n=`default`,loading:o=!1,asChild:s=!1,disabled:c,children:l,type:u=`button`,...d},f)=>{let p=T(`inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium`,`transition-colors cursor-pointer`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`disabled:pointer-events-none disabled:opacity-50`,`[&_svg]:pointer-events-none [&_svg]:shrink-0`,ve[t],ye[n],e);return s?r(a,{ref:f,className:p,...d,children:l}):i(`button`,{ref:f,disabled:c||o,className:p,type:u,...d,children:[o&&r(h,{className:`h-4 w-4 animate-spin`}),l]})});E.displayName=`Button`;const be=b(({className:e,...t},n)=>r(`div`,{ref:n,className:T(`rounded-xl border bg-card text-card-foreground shadow-sm`,e),...t}));be.displayName=`Card`;const D=b(({className:e,...t},n)=>r(`div`,{ref:n,className:T(`flex flex-col space-y-1.5 p-6`,e),...t}));D.displayName=`CardHeader`;const O=b(({className:e,...t},n)=>r(`div`,{ref:n,className:T(`font-semibold leading-none tracking-tight`,e),...t}));O.displayName=`CardTitle`;const k=b(({className:e,...t},n)=>r(`div`,{ref:n,className:T(`text-sm text-muted-foreground`,e),...t}));k.displayName=`CardDescription`;const A=b(({className:e,...t},n)=>r(`div`,{ref:n,className:T(`p-6 pt-0`,e),...t}));A.displayName=`CardContent`;const j=b(({className:e,...t},n)=>r(`div`,{ref:n,className:T(`flex items-center p-6 pt-0`,e),...t}));j.displayName=`CardFooter`;const xe={light:``,dark:`.dark`},Se={width:320,height:200},M=/^[a-zA-Z0-9_-]+$/,Ce=/^[#a-zA-Z0-9 ,.()/%-]+$/,we=/\burl\s*\(/i,N=v.createContext(null);function Te(){let e=v.useContext(N);if(!e)throw Error(`useChart must be used within a <ChartContainer />`);return e}function Ee(e,t){if(!M.test(e))return null;let n=Object.entries(t).filter(([,e])=>e.theme??e.color);if(!n.length)return null;let r=Object.entries(xe).map(([t,r])=>{let i=n.map(([e,n])=>{if(!M.test(e))return null;let r=n.theme?.[t]??n.color;return!r||!Ce.test(r)||we.test(r)?null:` --color-${e}: ${r};`}).filter(e=>e!==null);return i.length?`${r} [data-chart=${e}] {\n${i.join(`
|
|
3
|
+
`)}\n}`:null}).filter(e=>e!==null);return r.length?r.join(`
|
|
4
|
+
`):null}function De(e){if(e&&typeof e==`object`&&`fill`in e&&typeof e.fill==`string`)return e.fill}function Oe({id:e,className:t,children:n,config:a,initialDimension:o=Se,nonce:s,...c}){let l=v.useId(),u=`chart-${(e&&M.test(e)?e:null)??l.replace(/:/g,``)}`;return r(N.Provider,{value:{config:a},children:i(`div`,{"data-slot":`chart`,"data-chart":u,className:T(`flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden`,t),...c,children:[r(ke,{id:u,config:a,nonce:s}),r(te.ResponsiveContainer,{initialDimension:o,children:n})]})})}const ke=({id:e,config:t,nonce:n})=>{let i=Ee(e,t);return i?r(`style`,{nonce:n,dangerouslySetInnerHTML:{__html:i}}):null},Ae=te.Tooltip;function je({active:e,payload:t,className:a,indicator:o=`dot`,hideLabel:s=!1,hideIndicator:c=!1,label:l,labelFormatter:u,labelClassName:d,formatter:f,color:p,nameKey:m,labelKey:h}){let{config:g}=Te(),_=v.useMemo(()=>{if(s||!t?.length)return null;let[e]=t,n=P(g,e,`${h??e?.dataKey??e?.name??`value`}`),i=!h&&typeof l==`string`?g[l]?.label??l:n?.label;return u?r(`div`,{className:T(`font-medium`,d),children:u(i,t)}):i?r(`div`,{className:T(`font-medium`,d),children:i}):null},[l,u,t,s,d,g,h]);if(!e||!t?.length)return null;let y=t.length===1&&o!==`dot`;return i(`div`,{className:T(`grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl`,a),children:[y?null:_,r(`div`,{className:`grid gap-1.5`,children:t.filter(e=>e.type!==`none`).map((e,t)=>{let a=`${m??e.name??e.dataKey??`value`}`,s=P(g,e,a),l=p??De(e.payload)??e.color;return r(`div`,{className:T(`flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground`,o===`dot`&&`items-center`),children:f&&e?.value!==void 0&&e.name?f(e.value,e.name,e,t,e.payload):i(n,{children:[s?.icon?r(s.icon,{}):!c&&r(`div`,{className:T(`shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)`,{"h-2.5 w-2.5":o===`dot`,"w-1":o===`line`,"w-0 border-[1.5px] border-dashed bg-transparent":o===`dashed`,"my-0.5":y&&o===`dashed`}),style:{"--color-bg":l,"--color-border":l}}),i(`div`,{className:T(`flex flex-1 justify-between leading-none`,y?`items-end`:`items-center`),children:[i(`div`,{className:`grid gap-1.5`,children:[y?_:null,r(`span`,{className:`text-muted-foreground`,children:s?.label??e.name})]}),e.value!=null&&r(`span`,{className:`font-mono font-medium text-foreground tabular-nums`,children:typeof e.value==`number`?e.value.toLocaleString():String(e.value)})]})]})},a)})})]})}function P(e,t,n){if(typeof t!=`object`||!t)return;let r=`payload`in t&&typeof t.payload==`object`&&t.payload!==null?t.payload:void 0,i=n;return n in t&&typeof t[n]==`string`?i=t[n]:r&&n in r&&typeof r[n]==`string`&&(i=r[n]),i in e?e[i]:e[n]}const F=b(({className:e,...t},n)=>r(ne.Root,{ref:n,className:T(`peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow-xs`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`disabled:cursor-not-allowed disabled:opacity-50`,`data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground`,e),...t,children:r(ne.Indicator,{className:`flex items-center justify-center text-current`,children:r(c,{className:`h-3.5 w-3.5`})})}));F.displayName=`Checkbox`;const I=b(({className:e,type:t,...n},i)=>r(`input`,{type:t,ref:i,className:T(`flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs`,`transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground`,`placeholder:text-muted-foreground`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`disabled:cursor-not-allowed disabled:opacity-50`,e),...n}));I.displayName=`Input`;const L=b(({className:e,...t},n)=>r(`div`,{className:`relative w-full overflow-auto`,children:r(`table`,{ref:n,className:T(`w-full caption-bottom text-sm`,e),...t})}));L.displayName=`Table`;const R=b(({className:e,...t},n)=>r(`thead`,{ref:n,className:T(`[&_tr]:border-b`,e),...t}));R.displayName=`TableHeader`;const z=b(({className:e,...t},n)=>r(`tbody`,{ref:n,className:T(`[&_tr:last-child]:border-0`,e),...t}));z.displayName=`TableBody`;const Me=b(({className:e,...t},n)=>r(`tfoot`,{ref:n,className:T(`border-t bg-muted/50 font-medium [&>tr]:last:border-b-0`,e),...t}));Me.displayName=`TableFooter`;const B=b(({className:e,...t},n)=>r(`tr`,{ref:n,className:T(`border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted`,e),...t}));B.displayName=`TableRow`;const V=b(({className:e,...t},n)=>r(`th`,{ref:n,className:T(`h-10 px-2 text-left align-middle font-medium text-muted-foreground`,`[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...t}));V.displayName=`TableHead`;const H=b(({className:e,...t},n)=>r(`td`,{ref:n,className:T(`p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,e),...t}));H.displayName=`TableCell`;const Ne=b(({className:e,...t},n)=>r(`caption`,{ref:n,className:T(`mt-4 text-sm text-muted-foreground`,e),...t}));Ne.displayName=`TableCaption`;function Pe({table:e,className:t}){let n=e.getFilteredSelectedRowModel().rows.length,a=e.getFilteredRowModel().rows.length;return i(`div`,{className:T(`flex items-center justify-between px-2`,t),children:[r(`div`,{className:`flex-1 text-sm text-muted-foreground`,children:n>0&&i(`span`,{children:[n,` of `,a,` row(s) selected`]})}),i(`div`,{className:`flex items-center space-x-6 lg:space-x-8`,children:[r(`div`,{className:`flex items-center space-x-2`,children:i(`p`,{className:`text-sm font-medium`,children:[`Page `,e.getState().pagination.pageIndex+1,` of `,e.getPageCount()]})}),i(`div`,{className:`flex items-center space-x-2`,children:[i(E,{variant:`outline`,size:`icon`,className:`hidden h-8 w-8 lg:flex`,onClick:()=>e.setPageIndex(0),disabled:!e.getCanPreviousPage(),children:[r(`span`,{className:`sr-only`,children:`Go to first page`}),r(d,{className:`h-4 w-4`})]}),i(E,{variant:`outline`,size:`icon`,className:`h-8 w-8`,onClick:()=>e.previousPage(),disabled:!e.getCanPreviousPage(),children:[r(`span`,{className:`sr-only`,children:`Go to previous page`}),r(l,{className:`h-4 w-4`})]}),i(E,{variant:`outline`,size:`icon`,className:`h-8 w-8`,onClick:()=>e.nextPage(),disabled:!e.getCanNextPage(),children:[r(`span`,{className:`sr-only`,children:`Go to next page`}),r(u,{className:`h-4 w-4`})]}),i(E,{variant:`outline`,size:`icon`,className:`hidden h-8 w-8 lg:flex`,onClick:()=>e.setPageIndex(e.getPageCount()-1),disabled:!e.getCanNextPage(),children:[r(`span`,{className:`sr-only`,children:`Go to last page`}),r(f,{className:`h-4 w-4`})]})]})]})]})}const U=C.Root,W=C.Trigger,Fe=C.Portal,G=b(({className:e,sideOffset:t=4,...n},i)=>r(C.Portal,{children:r(C.Content,{ref:i,sideOffset:t,className:T(`z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md`,`data-[state=open]:animate-in data-[state=closed]:animate-out`,`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,`data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95`,`data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2`,`data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2`,e),...n})}));G.displayName=`DropdownMenuContent`;const K=b(({className:e,inset:t,...n},i)=>r(C.Item,{ref:i,className:T(`relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none`,`transition-colors focus:bg-accent focus:text-accent-foreground`,`data-[disabled]:pointer-events-none data-[disabled]:opacity-50`,`[&_svg]:pointer-events-none [&_svg]:shrink-0`,t&&`pl-8`,e),...n}));K.displayName=`DropdownMenuItem`;const q=b(({className:e,children:t,checked:n,...a},o)=>i(C.CheckboxItem,{ref:o,className:T(`relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none`,`transition-colors focus:bg-accent focus:text-accent-foreground`,`data-[disabled]:pointer-events-none data-[disabled]:opacity-50`,e),...n!==void 0&&{checked:n},...a,children:[r(`span`,{className:`absolute left-2 flex h-3.5 w-3.5 items-center justify-center`,children:r(C.ItemIndicator,{children:r(c,{className:`h-4 w-4`})})}),t]}));q.displayName=`DropdownMenuCheckboxItem`;const J=b(({className:e,inset:t,...n},i)=>r(C.Label,{ref:i,className:T(`px-2 py-1.5 text-sm font-semibold`,t&&`pl-8`,e),...n}));J.displayName=`DropdownMenuLabel`;const Y=b(({className:e,...t},n)=>r(C.Separator,{ref:n,className:T(`-mx-1 my-1 h-px bg-muted`,e),...t}));Y.displayName=`DropdownMenuSeparator`;const Ie=b(({className:e,inset:t,children:n,...a},o)=>i(C.SubTrigger,{ref:o,className:T(`flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none`,`focus:bg-accent data-[state=open]:bg-accent`,`[&_svg]:pointer-events-none [&_svg]:shrink-0`,t&&`pl-8`,e),...a,children:[n,r(u,{className:`ml-auto h-4 w-4`})]}));Ie.displayName=`DropdownMenuSubTrigger`;const Le=b(({className:e,...t},n)=>r(C.SubContent,{ref:n,className:T(`z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg`,`data-[state=open]:animate-in data-[state=closed]:animate-out`,`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,`data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95`,`data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2`,`data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2`,e),...t}));Le.displayName=`DropdownMenuSubContent`;function X({table:e}){return i(U,{children:[r(W,{asChild:!0,children:i(E,{variant:`outline`,size:`sm`,className:`ml-auto hidden h-8 lg:flex`,children:[r(g,{className:`mr-2 h-4 w-4`}),`View`]})}),i(G,{align:`end`,className:`w-[150px]`,children:[r(J,{children:`Toggle columns`}),r(Y,{}),e.getAllColumns().filter(e=>e.accessorFn!==void 0&&e.getCanHide()).map(e=>r(q,{className:`capitalize`,checked:e.getIsVisible(),onCheckedChange:t=>e.toggleVisibility(!!t),children:e.id},e.id))]})]})}function Re({columns:e,data:t,searchKey:n,searchPlaceholder:a=`Filter...`,pageSize:o=10,emptyMessage:s=`No results.`,classNames:c}){let[l,u]=S([]),[d,f]=S([]),[p,m]=S({}),[h,g]=S({}),_=ce({data:t,columns:e,state:{sorting:l,columnFilters:d,columnVisibility:p,rowSelection:h},onSortingChange:u,onColumnFiltersChange:f,onColumnVisibilityChange:m,onRowSelectionChange:g,getCoreRowModel:ie(),getSortedRowModel:se(),getFilteredRowModel:ae(),getPaginationRowModel:oe(),initialState:{pagination:{pageSize:o}}});return i(`div`,{className:T(`space-y-4`,c?.root),children:[i(`div`,{className:T(`flex items-center justify-between`,c?.toolbar),children:[r(`div`,{className:`flex flex-1 items-center space-x-2`,children:n&&r(I,{placeholder:a,value:_.getColumn(n)?.getFilterValue()??``,onChange:e=>_.getColumn(n)?.setFilterValue(e.target.value),className:`h-8 w-[150px] lg:w-[250px]`})}),r(X,{table:_})]}),r(`div`,{className:T(`rounded-md border`,c?.table),children:i(L,{children:[r(R,{children:_.getHeaderGroups().map(e=>r(B,{children:e.headers.map(e=>r(V,{colSpan:e.colSpan,children:e.isPlaceholder?null:re(e.column.columnDef.header,e.getContext())},e.id))},e.id))}),r(z,{children:_.getRowModel().rows.length>0?_.getRowModel().rows.map(e=>r(B,{"data-state":e.getIsSelected()&&`selected`,children:e.getVisibleCells().map(e=>r(H,{children:re(e.column.columnDef.cell,e.getContext())},e.id))},e.id)):r(B,{children:r(H,{colSpan:e.length,className:`h-24 text-center`,children:s})})})]})}),r(Pe,{table:_,className:c?.pagination})]})}function ze({column:e,title:t,className:a}){return e.getCanSort()?r(`div`,{className:T(`flex items-center space-x-2`,a),children:i(U,{children:[r(W,{asChild:!0,children:i(E,{variant:`ghost`,size:`sm`,className:`-ml-3 h-8 data-[state=open]:bg-accent`,children:[r(`span`,{children:t}),e.getIsSorted()===`desc`?r(o,{className:`ml-2 h-4 w-4`}):e.getIsSorted()===`asc`?r(s,{className:`ml-2 h-4 w-4`}):r(p,{className:`ml-2 h-4 w-4`})]})}),i(G,{align:`start`,children:[i(K,{onClick:()=>e.toggleSorting(!1),children:[r(s,{className:`mr-2 h-3.5 w-3.5 text-muted-foreground/70`}),`Asc`]}),i(K,{onClick:()=>e.toggleSorting(!0),children:[r(o,{className:`mr-2 h-3.5 w-3.5 text-muted-foreground/70`}),`Desc`]}),e.getCanHide()&&i(n,{children:[r(Y,{}),i(K,{onClick:()=>e.toggleVisibility(!1),children:[r(m,{className:`mr-2 h-3.5 w-3.5 text-muted-foreground/70`}),`Hide`]})]})]})]})}):r(`div`,{className:T(a),children:t})}const Be=w.Root,Ve=w.Trigger,He=w.Close,Ue=w.Portal,We=b(({className:e,...t},n)=>r(w.Overlay,{ref:n,className:T(`fixed inset-0 z-50 bg-black/80`,`data-[state=open]:animate-in data-[state=closed]:animate-out`,`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,e),...t}));We.displayName=`DialogOverlay`;const Ge=b(({className:e,children:t,...n},a)=>i(Ue,{children:[r(We,{}),i(w.Content,{ref:a,className:T(`fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%]`,`gap-4 border bg-background p-6 shadow-lg sm:rounded-lg`,`data-[state=open]:animate-in data-[state=closed]:animate-out`,`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,`data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95`,`data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]`,`data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]`,e),...n,children:[t,i(w.Close,{className:T(`absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity`,`hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2`,`disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground`,`cursor-pointer`),children:[r(_,{className:`h-4 w-4`}),r(`span`,{className:`sr-only`,children:`Close`})]})]})]}));Ge.displayName=`DialogContent`;function Ke({className:e,...t}){return r(`div`,{className:T(`flex flex-col space-y-1.5 text-center sm:text-left`,e),...t})}function qe({className:e,...t}){return r(`div`,{className:T(`flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2`,e),...t})}const Je=b(({className:e,...t},n)=>r(w.Title,{ref:n,className:T(`text-lg font-semibold leading-none tracking-tight`,e),...t}));Je.displayName=`DialogTitle`;const Ye=b(({className:e,...t},n)=>r(w.Description,{ref:n,className:T(`text-sm text-muted-foreground`,e),...t}));Ye.displayName=`DialogDescription`;const Z=b(({className:e,...t},n)=>r(fe.Root,{ref:n,className:T(`text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70`,e),...t}));Z.displayName=`Label`;const Xe=ue,Q=y({});function Ze(e){return r(Q.Provider,{value:{name:e.name},children:r(le,{...e})})}const Qe=y({});function $(){let e=x(Q),t=x(Qe),{getFieldState:n,formState:r}=de(),i=n(e.name,r),{id:a}=t;return{id:a,name:e.name,formItemId:`${a}-form-item`,formDescriptionId:`${a}-form-item-description`,formMessageId:`${a}-form-item-message`,...i}}const $e=b(({className:e,...t},n)=>{let i=ee();return r(Qe.Provider,{value:{id:i},children:r(`div`,{ref:n,className:T(`space-y-2`,e),...t})})});$e.displayName=`FormItem`;const et=b(({className:e,...t},n)=>{let{error:i,formItemId:a}=$();return r(Z,{ref:n,className:T(i&&`text-destructive`,e),htmlFor:a,...t})});et.displayName=`FormLabel`;const tt=b(({...e},t)=>{let{error:n,formItemId:i,formDescriptionId:o,formMessageId:s}=$();return r(a,{ref:t,id:i,"aria-describedby":n?`${o} ${s}`:o,"aria-invalid":!!n,...e})});tt.displayName=`FormControl`;const nt=b(({className:e,...t},n)=>{let{formDescriptionId:i}=$();return r(`p`,{ref:n,id:i,className:T(`text-[0.8rem] text-muted-foreground`,e),...t})});nt.displayName=`FormDescription`;const rt=b(({className:e,children:t,...n},i)=>{let{error:a,formMessageId:o}=$(),s=a?String(a.message):t;return s?r(`p`,{ref:i,id:o,className:T(`text-[0.8rem] font-medium text-destructive`,e),...n,children:s}):null});rt.displayName=`FormMessage`;const it=b(({className:e,children:t,...n},i)=>r(`select`,{ref:i,className:T(`flex h-9 w-full rounded-md border border-input bg-background text-foreground px-3 py-1 text-sm shadow-xs`,`transition-colors`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`disabled:cursor-not-allowed disabled:opacity-50`,e),...n,children:t}));it.displayName=`Select`;const at=b(({className:e,orientation:t=`horizontal`,decorative:n=!0,...i},a)=>r(pe.Root,{ref:a,decorative:n,orientation:t,className:T(`shrink-0 bg-border`,t===`horizontal`?`h-[1px] w-full`:`h-full w-[1px]`,e),...i}));at.displayName=`Separator`;function ot({className:e,...t}){return r(`div`,{className:T(`animate-pulse rounded-md bg-muted`,e),...t})}const st={background:`var(--color-background)`,color:`var(--color-foreground)`,border:`1px solid var(--color-border)`},ct={error:`sonner-error`,success:`sonner-success`};function lt({toastOptions:e,...t}){return r(me,{position:`bottom-right`,...t,toastOptions:{...e,style:{...st,...e?.style},classNames:{...ct,...e?.classNames}}})}const ut=b(({className:e,...t},n)=>r(`textarea`,{ref:n,className:T(`flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs`,`placeholder:text-muted-foreground`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,`disabled:cursor-not-allowed disabled:opacity-50`,e),...t}));ut.displayName=`Textarea`;export{_e as Badge,E as Button,be as Card,A as CardContent,k as CardDescription,j as CardFooter,D as CardHeader,O as CardTitle,Oe as ChartContainer,Ae as ChartTooltip,je as ChartTooltipContent,F as Checkbox,Re as DataTable,ze as DataTableColumnHeader,X as DataTableViewOptions,Be as Dialog,He as DialogClose,Ge as DialogContent,Ye as DialogDescription,qe as DialogFooter,Ke as DialogHeader,Je as DialogTitle,Ve as DialogTrigger,U as DropdownMenu,G as DropdownMenuContent,K as DropdownMenuItem,J as DropdownMenuLabel,Fe as DropdownMenuPortal,Y as DropdownMenuSeparator,W as DropdownMenuTrigger,Xe as Form,tt as FormControl,nt as FormDescription,Ze as FormField,$e as FormItem,et as FormLabel,rt as FormMessage,I as Input,Z as Label,it as Select,at as Separator,ot as Skeleton,L as Table,z as TableBody,H as TableCell,V as TableHead,R as TableHeader,B as TableRow,ut as Textarea,lt as Toaster,T as cn,he as toast};
|
|
9
5
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["variantClasses","SonnerToaster"],"sources":["../src/lib/cn.ts","../src/badge.tsx","../src/button.tsx","../src/card.tsx","../src/chart.tsx","../src/checkbox.tsx","../src/input.tsx","../src/table.tsx","../src/data-table/data-table-pagination.tsx","../src/dropdown-menu.tsx","../src/data-table/data-table-view-options.tsx","../src/data-table/data-table.tsx","../src/data-table/data-table-column-header.tsx","../src/dialog.tsx","../src/label.tsx","../src/form.tsx","../src/select.tsx","../src/separator.tsx","../src/skeleton.tsx","../src/sonner.tsx","../src/textarea.tsx"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import type { HTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport interface BadgeProps extends HTMLAttributes<HTMLDivElement> {\n variant?: 'default' | 'secondary' | 'destructive' | 'outline'\n}\n\nconst variantClasses: Record<NonNullable<BadgeProps['variant']>, string> = {\n default: 'border-transparent bg-primary text-primary-foreground shadow-xs',\n secondary: 'border-transparent bg-secondary text-secondary-foreground',\n destructive: 'border-transparent bg-destructive text-destructive-foreground shadow-xs',\n outline: 'text-foreground',\n}\n\nexport function Badge({ className, variant = 'default', ...props }: BadgeProps) {\n return (\n <div\n className={cn(\n 'inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold',\n 'transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n variantClasses[variant],\n className,\n )}\n {...props}\n />\n )\n}\n","import { Slot } from '@radix-ui/react-slot'\nimport { Loader2 } from 'lucide-react'\nimport { type ButtonHTMLAttributes, forwardRef } from 'react'\nimport { cn } from './lib/cn'\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\n size?: 'default' | 'sm' | 'lg' | 'icon'\n loading?: boolean\n asChild?: boolean\n}\n\nconst variantClasses: Record<NonNullable<ButtonProps['variant']>, string> = {\n default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',\n destructive: 'bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90',\n outline:\n 'border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n}\n\nconst sizeClasses: Record<NonNullable<ButtonProps['size']>, string> = {\n default: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3 text-xs',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = 'default',\n size = 'default',\n loading = false,\n asChild = false,\n disabled,\n children,\n type = 'button',\n ...props\n },\n ref,\n ) => {\n const classes = cn(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium',\n 'transition-colors cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n 'disabled:pointer-events-none disabled:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n variantClasses[variant],\n sizeClasses[size],\n className,\n )\n\n if (asChild) {\n return (\n <Slot ref={ref} className={classes} {...props}>\n {children}\n </Slot>\n )\n }\n\n return (\n <button ref={ref} disabled={disabled || loading} className={classes} type={type} {...props}>\n {loading && <Loader2 className=\"h-4 w-4 animate-spin\" />}\n {children}\n </button>\n )\n },\n)\n\nButton.displayName = 'Button'\n","import { forwardRef, type HTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Card = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('rounded-xl border bg-card text-card-foreground shadow-sm', className)}\n {...props}\n />\n ),\n)\nCard.displayName = 'Card'\n\nexport const CardHeader = forwardRef<HTMLDivElement, 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\nexport const CardTitle = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n ),\n)\nCardTitle.displayName = 'CardTitle'\n\nexport const CardDescription = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n ),\n)\nCardDescription.displayName = 'CardDescription'\n\nexport const CardContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n ),\n)\nCardContent.displayName = 'CardContent'\n\nexport const CardFooter = forwardRef<HTMLDivElement, 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","\"use client\"\n\n/**\n * Chart primitives for dashboard widgets.\n *\n * Based on shadcn/ui chart component (Recharts under the hood).\n * Provides ChartContainer (responsive wrapper), ChartTooltip,\n * ChartTooltipContent, ChartLegend, ChartLegendContent.\n *\n * Usage: import Recharts components directly (Bar, BarChart, XAxis, etc.)\n * and wrap them in ChartContainer with a ChartConfig for theming.\n */\n\nimport * as React from \"react\"\nimport * as RechartsPrimitive from \"recharts\"\nimport type { TooltipValueType } from \"recharts\"\n\nimport { cn } from \"./lib/cn\"\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: \"\", dark: \".dark\" } as const\n\nconst INITIAL_DIMENSION = { width: 320, height: 200 } as const\ntype TooltipNameType = number | string\n\nexport type ChartConfig = Record<\n string,\n {\n label?: React.ReactNode\n icon?: React.ComponentType\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\n )\n>\n\ntype ChartContextProps = {\n config: ChartConfig\n}\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null)\n\nfunction useChart() {\n const context = React.useContext(ChartContext)\n\n if (!context) {\n throw new Error(\"useChart must be used within a <ChartContainer />\")\n }\n\n return context\n}\n\nfunction ChartContainer({\n id,\n className,\n children,\n config,\n initialDimension = INITIAL_DIMENSION,\n ...props\n}: React.ComponentProps<\"div\"> & {\n config: ChartConfig\n children: React.ComponentProps<\n typeof RechartsPrimitive.ResponsiveContainer\n >[\"children\"]\n initialDimension?: {\n width: number\n height: number\n }\n}) {\n const uniqueId = React.useId()\n const chartId = `chart-${id ?? uniqueId.replace(/:/g, \"\")}`\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(\n \"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n className\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer\n initialDimension={initialDimension}\n >\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n )\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, config]) => config.theme ?? config.color\n )\n\n if (!colorConfig.length) {\n return null\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color =\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ??\n itemConfig.color\n return color ? ` --color-${key}: ${color};` : null\n })\n .join(\"\\n\")}\n}\n`\n )\n .join(\"\\n\"),\n }}\n />\n )\n}\n\nconst ChartTooltip = RechartsPrimitive.Tooltip\n\nfunction ChartTooltipContent({\n active,\n payload,\n className,\n indicator = \"dot\",\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n React.ComponentProps<\"div\"> & {\n hideLabel?: boolean\n hideIndicator?: boolean\n indicator?: \"line\" | \"dot\" | \"dashed\"\n nameKey?: string\n labelKey?: string\n } & Omit<\n RechartsPrimitive.DefaultTooltipContentProps<\n TooltipValueType,\n TooltipNameType\n >,\n \"accessibilityLayer\"\n >) {\n const { config } = useChart()\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null\n }\n\n const [item] = payload\n const key = `${labelKey ?? item?.dataKey ?? item?.name ?? \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const value =\n !labelKey && typeof label === \"string\"\n ? (config[label]?.label ?? label)\n : itemConfig?.label\n\n if (labelFormatter) {\n return (\n <div className={cn(\"font-medium\", labelClassName)}>\n {labelFormatter(value, payload)}\n </div>\n )\n }\n\n if (!value) {\n return null\n }\n\n return <div className={cn(\"font-medium\", labelClassName)}>{value}</div>\n }, [\n label,\n labelFormatter,\n payload,\n hideLabel,\n labelClassName,\n config,\n labelKey,\n ])\n\n if (!active || !payload?.length) {\n return null\n }\n\n const nestLabel = payload.length === 1 && indicator !== \"dot\"\n\n return (\n <div\n className={cn(\n \"grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl\",\n className\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item, index) => {\n const key = `${nameKey ?? item.name ?? item.dataKey ?? \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const indicatorColor = color ?? item.payload?.fill ?? item.color\n\n return (\n <div\n key={index}\n className={cn(\n \"flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground\",\n indicator === \"dot\" && \"items-center\"\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n \"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\n {\n \"h-2.5 w-2.5\": indicator === \"dot\",\n \"w-1\": indicator === \"line\",\n \"w-0 border-[1.5px] border-dashed bg-transparent\":\n indicator === \"dashed\",\n \"my-0.5\": nestLabel && indicator === \"dashed\",\n }\n )}\n style={\n {\n \"--color-bg\": indicatorColor,\n \"--color-border\": indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n \"flex flex-1 justify-between leading-none\",\n nestLabel ? \"items-end\" : \"items-center\"\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">\n {itemConfig?.label ?? item.name}\n </span>\n </div>\n {item.value != null && (\n <span className=\"font-mono font-medium text-foreground tabular-nums\">\n {typeof item.value === \"number\"\n ? item.value.toLocaleString()\n : String(item.value)}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\nconst ChartLegend = RechartsPrimitive.Legend\n\nfunction ChartLegendContent({\n className,\n hideIcon = false,\n payload,\n verticalAlign = \"bottom\",\n nameKey,\n}: React.ComponentProps<\"div\"> & {\n hideIcon?: boolean\n nameKey?: string\n} & RechartsPrimitive.DefaultLegendContentProps) {\n const { config } = useChart()\n\n if (!payload?.length) {\n return null\n }\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center gap-4\",\n verticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n className\n )}\n >\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item, index) => {\n const key = `${nameKey ?? item.dataKey ?? \"value\"}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n\n return (\n <div\n key={index}\n className={cn(\n \"flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground\"\n )}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n )\n })}\n </div>\n )\n}\n\nfunction getPayloadConfigFromPayload(\n config: ChartConfig,\n payload: unknown,\n key: string\n) {\n if (typeof payload !== \"object\" || payload === null) {\n return undefined\n }\n\n const payloadPayload =\n \"payload\" in payload &&\n typeof payload.payload === \"object\" &&\n payload.payload !== null\n ? payload.payload\n : undefined\n\n let configLabelKey: string = key\n\n if (\n key in payload &&\n typeof payload[key as keyof typeof payload] === \"string\"\n ) {\n configLabelKey = payload[key as keyof typeof payload] as string\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n ) {\n configLabelKey = payloadPayload[\n key as keyof typeof payloadPayload\n ] as string\n }\n\n return configLabelKey in config ? config[configLabelKey] : config[key]\n}\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n}\n","import * as CheckboxPrimitive from '@radix-ui/react-checkbox'\nimport { Check } from 'lucide-react'\nimport { type ComponentPropsWithoutRef, forwardRef } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Checkbox = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n 'peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow-xs',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-current\">\n <Check className=\"h-3.5 w-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\n\nCheckbox.displayName = 'Checkbox'\n","import { forwardRef, type InputHTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Input = forwardRef<HTMLInputElement, InputHTMLAttributes<HTMLInputElement>>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n ref={ref}\n className={cn(\n 'flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs',\n 'transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n )\n },\n)\n\nInput.displayName = 'Input'\n","import {\n forwardRef,\n type HTMLAttributes,\n type TdHTMLAttributes,\n type ThHTMLAttributes,\n} from 'react'\nimport { cn } from './lib/cn'\n\nexport const Table = forwardRef<HTMLTableElement, 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\nexport const TableHeader = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />\n))\nTableHeader.displayName = 'TableHeader'\n\nexport const TableBody = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n))\nTableBody.displayName = 'TableBody'\n\nexport const TableFooter = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn('border-t bg-muted/50 font-medium [&>tr]:last:border-b-0', className)}\n {...props}\n />\n))\nTableFooter.displayName = 'TableFooter'\n\nexport const TableRow = forwardRef<HTMLTableRowElement, HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n 'border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted',\n className,\n )}\n {...props}\n />\n ),\n)\nTableRow.displayName = 'TableRow'\n\nexport const TableHead = forwardRef<HTMLTableCellElement, ThHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'h-10 px-2 text-left align-middle font-medium text-muted-foreground',\n '[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n ),\n)\nTableHead.displayName = 'TableHead'\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TdHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n 'p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n ),\n)\nTableCell.displayName = 'TableCell'\n\nexport const TableCaption = forwardRef<\n HTMLTableCaptionElement,\n HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption ref={ref} className={cn('mt-4 text-sm text-muted-foreground', className)} {...props} />\n))\nTableCaption.displayName = 'TableCaption'\n","import type { Table } from '@tanstack/react-table'\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react'\nimport { Button } from '../button'\nimport { cn } from '../lib/cn'\n\ninterface DataTablePaginationProps<TData> {\n table: Table<TData>\n className?: string\n}\n\nexport function DataTablePagination<TData>({ table, className }: DataTablePaginationProps<TData>) {\n const selectedCount = table.getFilteredSelectedRowModel().rows.length\n const totalCount = table.getFilteredRowModel().rows.length\n\n return (\n <div className={cn('flex items-center justify-between px-2', className)}>\n <div className=\"flex-1 text-sm text-muted-foreground\">\n {selectedCount > 0 && (\n <span>\n {selectedCount} of {totalCount} row(s) selected\n </span>\n )}\n </div>\n <div className=\"flex items-center space-x-6 lg:space-x-8\">\n <div className=\"flex items-center space-x-2\">\n <p className=\"text-sm font-medium\">\n Page {table.getState().pagination.pageIndex + 1} of {table.getPageCount()}\n </p>\n </div>\n <div className=\"flex items-center space-x-2\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"hidden h-8 w-8 lg:flex\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n >\n <span className=\"sr-only\">Go to first page</span>\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <span className=\"sr-only\">Go to previous page</span>\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n <span className=\"sr-only\">Go to next page</span>\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"hidden h-8 w-8 lg:flex\"\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\n disabled={!table.getCanNextPage()}\n >\n <span className=\"sr-only\">Go to last page</span>\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { Check, ChevronRight } from 'lucide-react'\nimport { type ComponentPropsWithoutRef, forwardRef, type HTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group\nexport const DropdownMenuPortal = DropdownMenuPrimitive.Portal\nexport const DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nexport const DropdownMenuContent = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = 'DropdownMenuContent'\n\nexport const DropdownMenuItem = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none',\n 'transition-colors focus:bg-accent focus:text-accent-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = 'DropdownMenuItem'\n\nexport const DropdownMenuCheckboxItem = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none',\n 'transition-colors focus:bg-accent focus:text-accent-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName = 'DropdownMenuCheckboxItem'\n\nexport const DropdownMenuLabel = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = 'DropdownMenuLabel'\n\nexport const DropdownMenuSeparator = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = 'DropdownMenuSeparator'\n\nexport const DropdownMenuSubTrigger = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & { inset?: boolean }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none',\n 'focus:bg-accent data-[state=open]:bg-accent',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n inset && 'pl-8',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger'\n\nexport const DropdownMenuSubContent = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className,\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName = 'DropdownMenuSubContent'\n\nexport function DropdownMenuShortcut({ className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn('ml-auto text-xs tracking-widest opacity-60', className)} {...props} />\n}\n","import type { Table } from '@tanstack/react-table'\nimport { Settings2 } from 'lucide-react'\nimport { Button } from '../button'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../dropdown-menu'\n\ninterface DataTableViewOptionsProps<TData> {\n table: Table<TData>\n}\n\nexport function DataTableViewOptions<TData>({ table }: DataTableViewOptionsProps<TData>) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"ml-auto hidden h-8 lg:flex\">\n <Settings2 className=\"mr-2 h-4 w-4\" />\n View\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-[150px]\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter((column) => typeof column.accessorFn !== 'undefined' && column.getCanHide())\n .map((column) => (\n <DropdownMenuCheckboxItem\n key={column.id}\n className=\"capitalize\"\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n >\n {column.id}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import {\n type ColumnDef,\n type ColumnFiltersState,\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n type RowSelectionState,\n type SortingState,\n useReactTable,\n type VisibilityState,\n} from '@tanstack/react-table'\nimport { useState } from 'react'\nimport { Input } from '../input'\nimport { cn } from '../lib/cn'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../table'\nimport { DataTablePagination } from './data-table-pagination'\nimport { DataTableViewOptions } from './data-table-view-options'\n\nexport interface DataTableClassNames {\n root?: string\n toolbar?: string\n table?: string\n pagination?: string\n}\n\nexport interface DataTableProps<TData, TValue> {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n searchKey?: string\n searchPlaceholder?: string\n pageSize?: number\n emptyMessage?: string\n classNames?: DataTableClassNames\n}\n\nexport function DataTable<TData, TValue>({\n columns,\n data,\n searchKey,\n searchPlaceholder = 'Filter...',\n pageSize = 10,\n emptyMessage = 'No results.',\n classNames,\n}: DataTableProps<TData, TValue>) {\n const [sorting, setSorting] = useState<SortingState>([])\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({})\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({})\n\n const table = useReactTable({\n data,\n columns,\n state: { sorting, columnFilters, columnVisibility, rowSelection },\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n initialState: { pagination: { pageSize } },\n })\n\n return (\n <div className={cn('space-y-4', classNames?.root)}>\n {/* Toolbar */}\n <div className={cn('flex items-center justify-between', classNames?.toolbar)}>\n <div className=\"flex flex-1 items-center space-x-2\">\n {searchKey && (\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=\"h-8 w-[150px] lg:w-[250px]\"\n />\n )}\n </div>\n <DataTableViewOptions table={table} />\n </div>\n\n {/* Table */}\n <div className={cn('rounded-md border', classNames?.table)}>\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id} colSpan={header.colSpan}>\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows.length > 0 ? (\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}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={columns.length} className=\"h-24 text-center\">\n {emptyMessage}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {/* Pagination */}\n <DataTablePagination table={table} className={classNames?.pagination} />\n </div>\n )\n}\n","import type { Column } from '@tanstack/react-table'\nimport { ArrowDown, ArrowUp, ChevronsUpDown, EyeOff } from 'lucide-react'\nimport { Button } from '../button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../dropdown-menu'\nimport { cn } from '../lib/cn'\n\ninterface DataTableColumnHeaderProps<TData, TValue> {\n column: Column<TData, TValue>\n title: string\n className?: string\n}\n\nexport function DataTableColumnHeader<TData, TValue>({\n column,\n title,\n className,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n if (!column.getCanSort()) {\n return <div className={cn(className)}>{title}</div>\n }\n\n return (\n <div className={cn('flex items-center space-x-2', className)}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" className=\"-ml-3 h-8 data-[state=open]:bg-accent\">\n <span>{title}</span>\n {column.getIsSorted() === 'desc' ? (\n <ArrowDown className=\"ml-2 h-4 w-4\" />\n ) : column.getIsSorted() === 'asc' ? (\n <ArrowUp className=\"ml-2 h-4 w-4\" />\n ) : (\n <ChevronsUpDown className=\"ml-2 h-4 w-4\" />\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n <DropdownMenuItem onClick={() => column.toggleSorting(false)}>\n <ArrowUp className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\" />\n Asc\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => column.toggleSorting(true)}>\n <ArrowDown className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\" />\n Desc\n </DropdownMenuItem>\n {column.getCanHide() && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={() => column.toggleVisibility(false)}>\n <EyeOff className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\" />\n Hide\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )\n}\n","import * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { X } from 'lucide-react'\nimport { type ComponentPropsWithoutRef, forwardRef, type HTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Dialog = DialogPrimitive.Root\nexport const DialogTrigger = DialogPrimitive.Trigger\nexport const DialogClose = DialogPrimitive.Close\nexport const DialogPortal = DialogPrimitive.Portal\n\nexport const DialogOverlay = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-black/80',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = 'DialogOverlay'\n\nexport const DialogContent = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%]',\n 'gap-4 border bg-background p-6 shadow-lg sm:rounded-lg',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]',\n 'data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className={cn(\n 'absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity',\n 'hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n 'disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground',\n 'cursor-pointer',\n )}\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = 'DialogContent'\n\nexport function DialogHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn('flex flex-col space-y-1.5 text-center sm:text-left', className)}\n {...props}\n />\n )\n}\n\nexport function DialogFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)}\n {...props}\n />\n )\n}\n\nexport const DialogTitle = forwardRef<\n HTMLHeadingElement,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n))\nDialogTitle.displayName = 'DialogTitle'\n\nexport const DialogDescription = forwardRef<\n HTMLParagraphElement,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n))\nDialogDescription.displayName = 'DialogDescription'\n","import * as LabelPrimitive from '@radix-ui/react-label'\nimport { type ComponentPropsWithoutRef, forwardRef } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Label = forwardRef<\n HTMLLabelElement,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n className,\n )}\n {...props}\n />\n))\n\nLabel.displayName = 'Label'\n","import type * as LabelPrimitive from '@radix-ui/react-label'\nimport { Slot } from '@radix-ui/react-slot'\nimport {\n type ComponentPropsWithoutRef,\n createContext,\n forwardRef,\n type HTMLAttributes,\n useContext,\n useId,\n} from 'react'\nimport {\n Controller,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n FormProvider,\n useFormContext,\n} from 'react-hook-form'\nimport { Label } from './label'\nimport { cn } from './lib/cn'\n\n/* ---------- Form (re-export of FormProvider) ---------- */\n\nexport const Form = FormProvider\n\n/* ---------- FormField context ---------- */\n\ninterface FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName\n}\n\nconst FormFieldContext = createContext<FormFieldContextValue>({} as FormFieldContextValue)\n\nexport function FormField<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>(props: ControllerProps<TFieldValues, TName>) {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\n/* ---------- FormItem context ---------- */\n\ninterface FormItemContextValue {\n id: string\n}\n\nconst FormItemContext = createContext<FormItemContextValue>({} as FormItemContextValue)\n\n/* ---------- useFormField hook ---------- */\n\nexport function useFormField() {\n const fieldContext = useContext(FormFieldContext)\n const itemContext = useContext(FormItemContext)\n const { getFieldState, formState } = useFormContext()\n\n const fieldState = getFieldState(fieldContext.name, formState)\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\n/* ---------- FormItem ---------- */\n\nexport const FormItem = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const id = useId()\n return (\n <FormItemContext.Provider value={{ id }}>\n <div ref={ref} className={cn('space-y-2', className)} {...props} />\n </FormItemContext.Provider>\n )\n },\n)\nFormItem.displayName = 'FormItem'\n\n/* ---------- FormLabel ---------- */\n\nexport const FormLabel = forwardRef<\n HTMLLabelElement,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n const { error, formItemId } = useFormField()\n return (\n <Label\n ref={ref}\n className={cn(error && 'text-destructive', className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n})\nFormLabel.displayName = 'FormLabel'\n\n/* ---------- FormControl ---------- */\n\nexport const FormControl = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<typeof Slot>>(\n ({ ...props }, ref) => {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n return (\n <Slot\n ref={ref}\n id={formItemId}\n aria-describedby={!error ? formDescriptionId : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n {...props}\n />\n )\n },\n)\nFormControl.displayName = 'FormControl'\n\n/* ---------- FormDescription ---------- */\n\nexport const FormDescription = forwardRef<\n HTMLParagraphElement,\n HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n const { formDescriptionId } = useFormField()\n return (\n <p\n ref={ref}\n id={formDescriptionId}\n className={cn('text-[0.8rem] text-muted-foreground', className)}\n {...props}\n />\n )\n})\nFormDescription.displayName = 'FormDescription'\n\n/* ---------- FormMessage ---------- */\n\nexport const FormMessage = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(\n ({ className, children, ...props }, ref) => {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error.message) : children\n\n if (!body) return null\n\n return (\n <p\n ref={ref}\n id={formMessageId}\n className={cn('text-[0.8rem] font-medium text-destructive', className)}\n {...props}\n >\n {body}\n </p>\n )\n },\n)\nFormMessage.displayName = 'FormMessage'\n","import { forwardRef, type SelectHTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Select = forwardRef<HTMLSelectElement, SelectHTMLAttributes<HTMLSelectElement>>(\n ({ className, children, ...props }, ref) => {\n return (\n <select\n ref={ref}\n className={cn(\n 'flex h-9 w-full rounded-md border border-input bg-background text-foreground px-3 py-1 text-sm shadow-xs',\n 'transition-colors',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n >\n {children}\n </select>\n )\n },\n)\n\nSelect.displayName = 'Select'\n","import * as SeparatorPrimitive from '@radix-ui/react-separator'\nimport { type ComponentPropsWithoutRef, forwardRef } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Separator = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = 'horizontal', decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]',\n className,\n )}\n {...props}\n />\n))\n\nSeparator.displayName = 'Separator'\n","import type { HTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('animate-pulse rounded-md bg-muted', className)} {...props} />\n}\n","/**\n * Toast notifications — wraps sonner with toolkit token styling.\n *\n * Usage:\n * import { Toaster, toast } from '@murumets-ee/ui'\n *\n * // In layout (once):\n * <Toaster />\n *\n * // Anywhere:\n * toast.success('Saved')\n * toast.error('Cannot delete: referenced by article')\n */\n\nimport { Toaster as SonnerToaster, toast } from 'sonner'\n\nfunction Toaster() {\n return (\n <SonnerToaster\n position=\"bottom-right\"\n toastOptions={{\n style: {\n background: 'var(--color-background)',\n color: 'var(--color-foreground)',\n border: '1px solid var(--color-border)',\n },\n classNames: {\n error: 'sonner-error',\n success: 'sonner-success',\n },\n }}\n />\n )\n}\n\nexport { Toaster, toast }\n","import { forwardRef, type TextareaHTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Textarea = forwardRef<\n HTMLTextAreaElement,\n TextareaHTMLAttributes<HTMLTextAreaElement>\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n ref={ref}\n className={cn(\n 'flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n )\n})\n\nTextarea.displayName = 'Textarea'\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["variantClasses","SonnerToaster"],"sources":["../src/lib/cn.ts","../src/badge.tsx","../src/button.tsx","../src/card.tsx","../src/chart.tsx","../src/checkbox.tsx","../src/input.tsx","../src/table.tsx","../src/data-table/data-table-pagination.tsx","../src/dropdown-menu.tsx","../src/data-table/data-table-view-options.tsx","../src/data-table/data-table.tsx","../src/data-table/data-table-column-header.tsx","../src/dialog.tsx","../src/label.tsx","../src/form.tsx","../src/select.tsx","../src/separator.tsx","../src/skeleton.tsx","../src/sonner.tsx","../src/textarea.tsx"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import type { HTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport interface BadgeProps extends HTMLAttributes<HTMLDivElement> {\n variant?: 'default' | 'secondary' | 'destructive' | 'outline'\n}\n\nconst variantClasses: Record<NonNullable<BadgeProps['variant']>, string> = {\n default: 'border-transparent bg-primary text-primary-foreground shadow-xs',\n secondary: 'border-transparent bg-secondary text-secondary-foreground',\n destructive: 'border-transparent bg-destructive text-destructive-foreground shadow-xs',\n outline: 'text-foreground',\n}\n\nexport function Badge({ className, variant = 'default', ...props }: BadgeProps) {\n return (\n <div\n className={cn(\n 'inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold',\n 'transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n variantClasses[variant],\n className,\n )}\n {...props}\n />\n )\n}\n","import { Slot } from '@radix-ui/react-slot'\nimport { Loader2 } from 'lucide-react'\nimport { type ButtonHTMLAttributes, forwardRef } from 'react'\nimport { cn } from './lib/cn'\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\n size?: 'default' | 'sm' | 'lg' | 'icon'\n loading?: boolean\n asChild?: boolean\n}\n\nconst variantClasses: Record<NonNullable<ButtonProps['variant']>, string> = {\n default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',\n destructive: 'bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90',\n outline:\n 'border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n}\n\nconst sizeClasses: Record<NonNullable<ButtonProps['size']>, string> = {\n default: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3 text-xs',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = 'default',\n size = 'default',\n loading = false,\n asChild = false,\n disabled,\n children,\n type = 'button',\n ...props\n },\n ref,\n ) => {\n const classes = cn(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium',\n 'transition-colors cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n 'disabled:pointer-events-none disabled:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n variantClasses[variant],\n sizeClasses[size],\n className,\n )\n\n if (asChild) {\n return (\n <Slot ref={ref} className={classes} {...props}>\n {children}\n </Slot>\n )\n }\n\n return (\n <button ref={ref} disabled={disabled || loading} className={classes} type={type} {...props}>\n {loading && <Loader2 className=\"h-4 w-4 animate-spin\" />}\n {children}\n </button>\n )\n },\n)\n\nButton.displayName = 'Button'\n","import { forwardRef, type HTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Card = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('rounded-xl border bg-card text-card-foreground shadow-sm', className)}\n {...props}\n />\n ),\n)\nCard.displayName = 'Card'\n\nexport const CardHeader = forwardRef<HTMLDivElement, 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\nexport const CardTitle = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n ),\n)\nCardTitle.displayName = 'CardTitle'\n\nexport const CardDescription = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n ),\n)\nCardDescription.displayName = 'CardDescription'\n\nexport const CardContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n ),\n)\nCardContent.displayName = 'CardContent'\n\nexport const CardFooter = forwardRef<HTMLDivElement, 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","'use client'\n\n/**\n * Chart primitives for dashboard widgets.\n *\n * Vendored from shadcn/ui chart component (Recharts under the hood).\n * Provides ChartContainer (responsive wrapper), ChartTooltip, ChartTooltipContent.\n *\n * Usage: import Recharts components directly (Bar, BarChart, XAxis, etc.)\n * and wrap them in ChartContainer with a ChartConfig for theming.\n *\n * Security: ChartContainer's `id` prop and ChartConfig keys/colors are\n * inlined into a `<style dangerouslySetInnerHTML>` block to publish per-chart\n * CSS variables. Inputs that don't match the strict allowlists below are\n * silently dropped — DO NOT pass user-controllable strings as `id`, config\n * keys, or color values without validating upstream first.\n */\n\nimport * as React from 'react'\nimport type { TooltipValueType } from 'recharts'\nimport * as RechartsPrimitive from 'recharts'\n\nimport { cn } from './lib/cn'\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: '', dark: '.dark' } as const\n\nconst INITIAL_DIMENSION = { width: 320, height: 200 } as const\ntype TooltipNameType = number | string\n\n/**\n * Allowlist for chart id prop and ChartConfig keys.\n * Inlined into both the [data-chart=...] attribute selector and the\n * --color-{key} CSS custom property name; deny anything that could break\n * out of the selector or property declaration.\n */\nconst SAFE_CHART_ID_OR_KEY = /^[a-zA-Z0-9_-]+$/\n\n/**\n * Allowlist for ChartConfig color values.\n * Permits hex/rgb/hsl/oklch/var()/keyword colors; denies `;`, `{`, `}`, `<`, `>`, `\"`, `\\`\n * and other characters that would let a value escape the rule body.\n */\nconst SAFE_CSS_COLOR_VALUE = /^[#a-zA-Z0-9 ,.()/%-]+$/\n\n/**\n * Bare `url(...)` values are also rejected — even though the per-chart custom\n * property is inert at the declaration site, it leaks into the cascade and is\n * fetched by any downstream rule that uses `var(--color-key)` in\n * `background-image` / `mask-image` / `cursor` / `border-image` / etc. That's\n * the fetch-on-attribute-selector exfil class the audit calls out, just laundered\n * through a custom property. `var()` is the consumer-intended escape hatch — it\n * doesn't trigger a network fetch on its own.\n */\nconst FORBIDDEN_COLOR_FUNCTION = /\\burl\\s*\\(/i\n\nexport type ChartConfig = Record<\n string,\n {\n label?: React.ReactNode\n icon?: React.ComponentType\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\n )\n>\n\ntype ChartContextProps = {\n config: ChartConfig\n}\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null)\n\nfunction useChart() {\n const context = React.useContext(ChartContext)\n\n if (!context) {\n throw new Error('useChart must be used within a <ChartContainer />')\n }\n\n return context\n}\n\n/**\n * Build the per-chart CSS rules emitted by `<ChartStyle>`.\n *\n * Returns `null` if there is nothing to emit. Drops individual config\n * entries whose key fails {@link SAFE_CHART_ID_OR_KEY} or whose color\n * value fails {@link SAFE_CSS_COLOR_VALUE} — silently, since those values\n * being present means a consumer is forwarding untrusted input.\n *\n * Exported for unit tests; not part of the package public API.\n */\nexport function buildChartCss(id: string, config: ChartConfig): string | null {\n if (!SAFE_CHART_ID_OR_KEY.test(id)) {\n return null\n }\n\n const colorConfig = Object.entries(config).filter(([, value]) => value.theme ?? value.color)\n if (!colorConfig.length) {\n return null\n }\n\n const blocks = Object.entries(THEMES)\n .map(([theme, prefix]) => {\n const lines = colorConfig\n .map(([key, itemConfig]) => {\n if (!SAFE_CHART_ID_OR_KEY.test(key)) {\n return null\n }\n const color =\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ?? itemConfig.color\n if (!color || !SAFE_CSS_COLOR_VALUE.test(color) || FORBIDDEN_COLOR_FUNCTION.test(color)) {\n return null\n }\n return ` --color-${key}: ${color};`\n })\n .filter((line): line is string => line !== null)\n\n if (!lines.length) {\n return null\n }\n return `${prefix} [data-chart=${id}] {\\n${lines.join('\\n')}\\n}`\n })\n .filter((block): block is string => block !== null)\n\n return blocks.length ? blocks.join('\\n') : null\n}\n\n/**\n * Recharts' `Payload.payload` is typed `any`, which cascades through\n * the indicator color resolution. Narrow once here so callers stay typed.\n */\nfunction getPayloadFill(payload: unknown): string | undefined {\n if (\n payload &&\n typeof payload === 'object' &&\n 'fill' in payload &&\n typeof (payload as { fill: unknown }).fill === 'string'\n ) {\n return (payload as { fill: string }).fill\n }\n return undefined\n}\n\nfunction ChartContainer({\n id,\n className,\n children,\n config,\n initialDimension = INITIAL_DIMENSION,\n nonce,\n ...props\n}: React.ComponentProps<'div'> & {\n config: ChartConfig\n children: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children']\n initialDimension?: {\n width: number\n height: number\n }\n /** CSP nonce forwarded to the inline `<style>` element. */\n nonce?: string\n}) {\n const uniqueId = React.useId()\n const safeProvidedId = id && SAFE_CHART_ID_OR_KEY.test(id) ? id : null\n const chartId = `chart-${safeProvidedId ?? uniqueId.replace(/:/g, '')}`\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(\n \"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n className,\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} nonce={nonce} />\n <RechartsPrimitive.ResponsiveContainer initialDimension={initialDimension}>\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n )\n}\n\nconst ChartStyle = ({\n id,\n config,\n nonce,\n}: {\n id: string\n config: ChartConfig\n nonce?: string | undefined\n}) => {\n const css = buildChartCss(id, config)\n if (!css) {\n return null\n }\n\n return (\n // biome-ignore lint/security/noDangerouslySetInnerHtml: id/keys/colors validated by buildChartCss against SAFE_CHART_ID_OR_KEY + SAFE_CSS_COLOR_VALUE allowlists.\n <style nonce={nonce} dangerouslySetInnerHTML={{ __html: css }} />\n )\n}\n\nconst ChartTooltip = RechartsPrimitive.Tooltip\n\nfunction ChartTooltipContent({\n active,\n payload,\n className,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n React.ComponentProps<'div'> & {\n hideLabel?: boolean\n hideIndicator?: boolean\n indicator?: 'line' | 'dot' | 'dashed'\n nameKey?: string\n labelKey?: string\n } & Omit<\n RechartsPrimitive.DefaultTooltipContentProps<TooltipValueType, TooltipNameType>,\n 'accessibilityLayer'\n >) {\n const { config } = useChart()\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null\n }\n\n const [item] = payload\n const key = `${labelKey ?? item?.dataKey ?? item?.name ?? 'value'}`\n const itemConfig = getPayloadConfigFromPayload(config, item, key)\n const value =\n !labelKey && typeof label === 'string' ? (config[label]?.label ?? label) : itemConfig?.label\n\n if (labelFormatter) {\n return (\n <div className={cn('font-medium', labelClassName)}>{labelFormatter(value, payload)}</div>\n )\n }\n\n if (!value) {\n return null\n }\n\n return <div className={cn('font-medium', labelClassName)}>{value}</div>\n }, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey])\n\n if (!active || !payload?.length) {\n return null\n }\n\n const nestLabel = payload.length === 1 && indicator !== 'dot'\n\n return (\n <div\n className={cn(\n 'grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl',\n className,\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item) => item.type !== 'none')\n .map((item, index) => {\n const lookupKey = `${nameKey ?? item.name ?? item.dataKey ?? 'value'}`\n const itemConfig = getPayloadConfigFromPayload(config, item, lookupKey)\n const indicatorColor = color ?? getPayloadFill(item.payload) ?? item.color\n\n return (\n <div\n key={lookupKey}\n className={cn(\n 'flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground',\n indicator === 'dot' && 'items-center',\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n 'shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)',\n {\n 'h-2.5 w-2.5': indicator === 'dot',\n 'w-1': indicator === 'line',\n 'w-0 border-[1.5px] border-dashed bg-transparent':\n indicator === 'dashed',\n 'my-0.5': nestLabel && indicator === 'dashed',\n },\n )}\n style={\n {\n '--color-bg': indicatorColor,\n '--color-border': indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n 'flex flex-1 justify-between leading-none',\n nestLabel ? 'items-end' : 'items-center',\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">\n {itemConfig?.label ?? item.name}\n </span>\n </div>\n {item.value != null && (\n <span className=\"font-mono font-medium text-foreground tabular-nums\">\n {typeof item.value === 'number'\n ? item.value.toLocaleString()\n : String(item.value)}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\nfunction getPayloadConfigFromPayload(config: ChartConfig, payload: unknown, key: string) {\n if (typeof payload !== 'object' || payload === null) {\n return undefined\n }\n\n const payloadPayload =\n 'payload' in payload && typeof payload.payload === 'object' && payload.payload !== null\n ? payload.payload\n : undefined\n\n let configLabelKey: string = key\n\n if (key in payload && typeof payload[key as keyof typeof payload] === 'string') {\n configLabelKey = payload[key as keyof typeof payload] as string\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === 'string'\n ) {\n configLabelKey = payloadPayload[key as keyof typeof payloadPayload] as string\n }\n\n return configLabelKey in config ? config[configLabelKey] : config[key]\n}\n\nexport { ChartContainer, ChartTooltip, ChartTooltipContent }\n","import * as CheckboxPrimitive from '@radix-ui/react-checkbox'\nimport { Check } from 'lucide-react'\nimport { type ComponentPropsWithoutRef, forwardRef } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Checkbox = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n 'peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow-xs',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-current\">\n <Check className=\"h-3.5 w-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\n\nCheckbox.displayName = 'Checkbox'\n","import { forwardRef, type InputHTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Input = forwardRef<HTMLInputElement, InputHTMLAttributes<HTMLInputElement>>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n ref={ref}\n className={cn(\n 'flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs',\n 'transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n )\n },\n)\n\nInput.displayName = 'Input'\n","import {\n forwardRef,\n type HTMLAttributes,\n type TdHTMLAttributes,\n type ThHTMLAttributes,\n} from 'react'\nimport { cn } from './lib/cn'\n\nexport const Table = forwardRef<HTMLTableElement, 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\nexport const TableHeader = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />\n))\nTableHeader.displayName = 'TableHeader'\n\nexport const TableBody = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n))\nTableBody.displayName = 'TableBody'\n\nexport const TableFooter = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn('border-t bg-muted/50 font-medium [&>tr]:last:border-b-0', className)}\n {...props}\n />\n))\nTableFooter.displayName = 'TableFooter'\n\nexport const TableRow = forwardRef<HTMLTableRowElement, HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n 'border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted',\n className,\n )}\n {...props}\n />\n ),\n)\nTableRow.displayName = 'TableRow'\n\nexport const TableHead = forwardRef<HTMLTableCellElement, ThHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'h-10 px-2 text-left align-middle font-medium text-muted-foreground',\n '[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n ),\n)\nTableHead.displayName = 'TableHead'\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TdHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n 'p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n ),\n)\nTableCell.displayName = 'TableCell'\n\nexport const TableCaption = forwardRef<\n HTMLTableCaptionElement,\n HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption ref={ref} className={cn('mt-4 text-sm text-muted-foreground', className)} {...props} />\n))\nTableCaption.displayName = 'TableCaption'\n","import type { Table } from '@tanstack/react-table'\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react'\nimport { Button } from '../button'\nimport { cn } from '../lib/cn'\n\ninterface DataTablePaginationProps<TData> {\n table: Table<TData>\n className?: string | undefined\n}\n\nexport function DataTablePagination<TData>({ table, className }: DataTablePaginationProps<TData>) {\n const selectedCount = table.getFilteredSelectedRowModel().rows.length\n const totalCount = table.getFilteredRowModel().rows.length\n\n return (\n <div className={cn('flex items-center justify-between px-2', className)}>\n <div className=\"flex-1 text-sm text-muted-foreground\">\n {selectedCount > 0 && (\n <span>\n {selectedCount} of {totalCount} row(s) selected\n </span>\n )}\n </div>\n <div className=\"flex items-center space-x-6 lg:space-x-8\">\n <div className=\"flex items-center space-x-2\">\n <p className=\"text-sm font-medium\">\n Page {table.getState().pagination.pageIndex + 1} of {table.getPageCount()}\n </p>\n </div>\n <div className=\"flex items-center space-x-2\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"hidden h-8 w-8 lg:flex\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n >\n <span className=\"sr-only\">Go to first page</span>\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <span className=\"sr-only\">Go to previous page</span>\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n <span className=\"sr-only\">Go to next page</span>\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"hidden h-8 w-8 lg:flex\"\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\n disabled={!table.getCanNextPage()}\n >\n <span className=\"sr-only\">Go to last page</span>\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { Check, ChevronRight } from 'lucide-react'\nimport { type ComponentPropsWithoutRef, forwardRef, type HTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport const DropdownMenu = DropdownMenuPrimitive.Root\nexport const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group\nexport const DropdownMenuPortal = DropdownMenuPrimitive.Portal\nexport const DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nexport const DropdownMenuContent = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = 'DropdownMenuContent'\n\nexport const DropdownMenuItem = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none',\n 'transition-colors focus:bg-accent focus:text-accent-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = 'DropdownMenuItem'\n\nexport const DropdownMenuCheckboxItem = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none',\n 'transition-colors focus:bg-accent focus:text-accent-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...(checked !== undefined && { checked })}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName = 'DropdownMenuCheckboxItem'\n\nexport const DropdownMenuLabel = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & { inset?: boolean }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = 'DropdownMenuLabel'\n\nexport const DropdownMenuSeparator = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = 'DropdownMenuSeparator'\n\nexport const DropdownMenuSubTrigger = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & { inset?: boolean }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none',\n 'focus:bg-accent data-[state=open]:bg-accent',\n '[&_svg]:pointer-events-none [&_svg]:shrink-0',\n inset && 'pl-8',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger'\n\nexport const DropdownMenuSubContent = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className,\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName = 'DropdownMenuSubContent'\n\nexport function DropdownMenuShortcut({ className, ...props }: HTMLAttributes<HTMLSpanElement>) {\n return <span className={cn('ml-auto text-xs tracking-widest opacity-60', className)} {...props} />\n}\n","import type { Table } from '@tanstack/react-table'\nimport { Settings2 } from 'lucide-react'\nimport { Button } from '../button'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../dropdown-menu'\n\ninterface DataTableViewOptionsProps<TData> {\n table: Table<TData>\n}\n\nexport function DataTableViewOptions<TData>({ table }: DataTableViewOptionsProps<TData>) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"ml-auto hidden h-8 lg:flex\">\n <Settings2 className=\"mr-2 h-4 w-4\" />\n View\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-[150px]\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter((column) => typeof column.accessorFn !== 'undefined' && column.getCanHide())\n .map((column) => (\n <DropdownMenuCheckboxItem\n key={column.id}\n className=\"capitalize\"\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n >\n {column.id}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import {\n type ColumnDef,\n type ColumnFiltersState,\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n type RowSelectionState,\n type SortingState,\n useReactTable,\n type VisibilityState,\n} from '@tanstack/react-table'\nimport { useState } from 'react'\nimport { Input } from '../input'\nimport { cn } from '../lib/cn'\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../table'\nimport { DataTablePagination } from './data-table-pagination'\nimport { DataTableViewOptions } from './data-table-view-options'\n\nexport interface DataTableClassNames {\n root?: string\n toolbar?: string\n table?: string\n pagination?: string\n}\n\nexport interface DataTableProps<TData, TValue> {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n searchKey?: string\n searchPlaceholder?: string\n pageSize?: number\n emptyMessage?: string\n classNames?: DataTableClassNames\n}\n\nexport function DataTable<TData, TValue>({\n columns,\n data,\n searchKey,\n searchPlaceholder = 'Filter...',\n pageSize = 10,\n emptyMessage = 'No results.',\n classNames,\n}: DataTableProps<TData, TValue>) {\n const [sorting, setSorting] = useState<SortingState>([])\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({})\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({})\n\n const table = useReactTable({\n data,\n columns,\n state: { sorting, columnFilters, columnVisibility, rowSelection },\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n initialState: { pagination: { pageSize } },\n })\n\n return (\n <div className={cn('space-y-4', classNames?.root)}>\n {/* Toolbar */}\n <div className={cn('flex items-center justify-between', classNames?.toolbar)}>\n <div className=\"flex flex-1 items-center space-x-2\">\n {searchKey && (\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=\"h-8 w-[150px] lg:w-[250px]\"\n />\n )}\n </div>\n <DataTableViewOptions table={table} />\n </div>\n\n {/* Table */}\n <div className={cn('rounded-md border', classNames?.table)}>\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id} colSpan={header.colSpan}>\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows.length > 0 ? (\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}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={columns.length} className=\"h-24 text-center\">\n {emptyMessage}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {/* Pagination */}\n <DataTablePagination table={table} className={classNames?.pagination} />\n </div>\n )\n}\n","import type { Column } from '@tanstack/react-table'\nimport { ArrowDown, ArrowUp, ChevronsUpDown, EyeOff } from 'lucide-react'\nimport { Button } from '../button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../dropdown-menu'\nimport { cn } from '../lib/cn'\n\ninterface DataTableColumnHeaderProps<TData, TValue> {\n column: Column<TData, TValue>\n title: string\n className?: string\n}\n\nexport function DataTableColumnHeader<TData, TValue>({\n column,\n title,\n className,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n if (!column.getCanSort()) {\n return <div className={cn(className)}>{title}</div>\n }\n\n return (\n <div className={cn('flex items-center space-x-2', className)}>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" className=\"-ml-3 h-8 data-[state=open]:bg-accent\">\n <span>{title}</span>\n {column.getIsSorted() === 'desc' ? (\n <ArrowDown className=\"ml-2 h-4 w-4\" />\n ) : column.getIsSorted() === 'asc' ? (\n <ArrowUp className=\"ml-2 h-4 w-4\" />\n ) : (\n <ChevronsUpDown className=\"ml-2 h-4 w-4\" />\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n <DropdownMenuItem onClick={() => column.toggleSorting(false)}>\n <ArrowUp className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\" />\n Asc\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => column.toggleSorting(true)}>\n <ArrowDown className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\" />\n Desc\n </DropdownMenuItem>\n {column.getCanHide() && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onClick={() => column.toggleVisibility(false)}>\n <EyeOff className=\"mr-2 h-3.5 w-3.5 text-muted-foreground/70\" />\n Hide\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )\n}\n","import * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { X } from 'lucide-react'\nimport { type ComponentPropsWithoutRef, forwardRef, type HTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Dialog = DialogPrimitive.Root\nexport const DialogTrigger = DialogPrimitive.Trigger\nexport const DialogClose = DialogPrimitive.Close\nexport const DialogPortal = DialogPrimitive.Portal\n\nexport const DialogOverlay = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-black/80',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = 'DialogOverlay'\n\nexport const DialogContent = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%]',\n 'gap-4 border bg-background p-6 shadow-lg sm:rounded-lg',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]',\n 'data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className={cn(\n 'absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity',\n 'hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n 'disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground',\n 'cursor-pointer',\n )}\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = 'DialogContent'\n\nexport function DialogHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn('flex flex-col space-y-1.5 text-center sm:text-left', className)}\n {...props}\n />\n )\n}\n\nexport function DialogFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)}\n {...props}\n />\n )\n}\n\nexport const DialogTitle = forwardRef<\n HTMLHeadingElement,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n))\nDialogTitle.displayName = 'DialogTitle'\n\nexport const DialogDescription = forwardRef<\n HTMLParagraphElement,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n))\nDialogDescription.displayName = 'DialogDescription'\n","import * as LabelPrimitive from '@radix-ui/react-label'\nimport { type ComponentPropsWithoutRef, forwardRef } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Label = forwardRef<\n HTMLLabelElement,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n className,\n )}\n {...props}\n />\n))\n\nLabel.displayName = 'Label'\n","import type * as LabelPrimitive from '@radix-ui/react-label'\nimport { Slot } from '@radix-ui/react-slot'\nimport {\n type ComponentPropsWithoutRef,\n createContext,\n forwardRef,\n type HTMLAttributes,\n useContext,\n useId,\n} from 'react'\nimport {\n Controller,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n FormProvider,\n useFormContext,\n} from 'react-hook-form'\nimport { Label } from './label'\nimport { cn } from './lib/cn'\n\n/* ---------- Form (re-export of FormProvider) ---------- */\n\nexport const Form = FormProvider\n\n/* ---------- FormField context ---------- */\n\ninterface FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> {\n name: TName\n}\n\nconst FormFieldContext = createContext<FormFieldContextValue>({} as FormFieldContextValue)\n\nexport function FormField<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>(props: ControllerProps<TFieldValues, TName>) {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\n/* ---------- FormItem context ---------- */\n\ninterface FormItemContextValue {\n id: string\n}\n\nconst FormItemContext = createContext<FormItemContextValue>({} as FormItemContextValue)\n\n/* ---------- useFormField hook ---------- */\n\nexport function useFormField() {\n const fieldContext = useContext(FormFieldContext)\n const itemContext = useContext(FormItemContext)\n const { getFieldState, formState } = useFormContext()\n\n const fieldState = getFieldState(fieldContext.name, formState)\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\n/* ---------- FormItem ---------- */\n\nexport const FormItem = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const id = useId()\n return (\n <FormItemContext.Provider value={{ id }}>\n <div ref={ref} className={cn('space-y-2', className)} {...props} />\n </FormItemContext.Provider>\n )\n },\n)\nFormItem.displayName = 'FormItem'\n\n/* ---------- FormLabel ---------- */\n\nexport const FormLabel = forwardRef<\n HTMLLabelElement,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n const { error, formItemId } = useFormField()\n return (\n <Label\n ref={ref}\n className={cn(error && 'text-destructive', className)}\n htmlFor={formItemId}\n {...props}\n />\n )\n})\nFormLabel.displayName = 'FormLabel'\n\n/* ---------- FormControl ---------- */\n\nexport const FormControl = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<typeof Slot>>(\n ({ ...props }, ref) => {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n return (\n <Slot\n ref={ref}\n id={formItemId}\n aria-describedby={!error ? formDescriptionId : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n {...props}\n />\n )\n },\n)\nFormControl.displayName = 'FormControl'\n\n/* ---------- FormDescription ---------- */\n\nexport const FormDescription = forwardRef<\n HTMLParagraphElement,\n HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n const { formDescriptionId } = useFormField()\n return (\n <p\n ref={ref}\n id={formDescriptionId}\n className={cn('text-[0.8rem] text-muted-foreground', className)}\n {...props}\n />\n )\n})\nFormDescription.displayName = 'FormDescription'\n\n/* ---------- FormMessage ---------- */\n\nexport const FormMessage = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(\n ({ className, children, ...props }, ref) => {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error.message) : children\n\n if (!body) return null\n\n return (\n <p\n ref={ref}\n id={formMessageId}\n className={cn('text-[0.8rem] font-medium text-destructive', className)}\n {...props}\n >\n {body}\n </p>\n )\n },\n)\nFormMessage.displayName = 'FormMessage'\n","import { forwardRef, type SelectHTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Select = forwardRef<HTMLSelectElement, SelectHTMLAttributes<HTMLSelectElement>>(\n ({ className, children, ...props }, ref) => {\n return (\n <select\n ref={ref}\n className={cn(\n 'flex h-9 w-full rounded-md border border-input bg-background text-foreground px-3 py-1 text-sm shadow-xs',\n 'transition-colors',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n >\n {children}\n </select>\n )\n },\n)\n\nSelect.displayName = 'Select'\n","import * as SeparatorPrimitive from '@radix-ui/react-separator'\nimport { type ComponentPropsWithoutRef, forwardRef } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Separator = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = 'horizontal', decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]',\n className,\n )}\n {...props}\n />\n))\n\nSeparator.displayName = 'Separator'\n","import type { HTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return <div className={cn('animate-pulse rounded-md bg-muted', className)} {...props} />\n}\n","/**\n * Toast notifications — wraps sonner with toolkit token styling.\n *\n * Usage:\n * import { Toaster, toast } from '@murumets-ee/ui'\n *\n * // In layout (once):\n * <Toaster />\n *\n * // Anywhere:\n * toast.success('Saved')\n * toast.error('Cannot delete: referenced by article')\n *\n * Consumer-provided `toastOptions.style` and `toastOptions.classNames` are\n * deep-merged with the toolkit defaults — overriding `error` doesn't drop\n * the `success` className, and overriding `background` doesn't drop the\n * border / color.\n */\n\nimport type { ComponentProps } from 'react'\nimport { Toaster as SonnerToaster, toast } from 'sonner'\n\nconst DEFAULT_STYLE = {\n background: 'var(--color-background)',\n color: 'var(--color-foreground)',\n border: '1px solid var(--color-border)',\n}\n\nconst DEFAULT_CLASS_NAMES = {\n error: 'sonner-error',\n success: 'sonner-success',\n}\n\nfunction Toaster({ toastOptions, ...props }: ComponentProps<typeof SonnerToaster>) {\n return (\n <SonnerToaster\n position=\"bottom-right\"\n {...props}\n toastOptions={{\n ...toastOptions,\n style: { ...DEFAULT_STYLE, ...toastOptions?.style },\n classNames: { ...DEFAULT_CLASS_NAMES, ...toastOptions?.classNames },\n }}\n />\n )\n}\n\nexport { Toaster, toast }\n","import { forwardRef, type TextareaHTMLAttributes } from 'react'\nimport { cn } from './lib/cn'\n\nexport const Textarea = forwardRef<\n HTMLTextAreaElement,\n TextareaHTMLAttributes<HTMLTextAreaElement>\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n ref={ref}\n className={cn(\n 'flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs',\n 'placeholder:text-muted-foreground',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n )\n})\n\nTextarea.displayName = 'Textarea'\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@murumets-ee/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"license": "Elastic-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -53,17 +53,17 @@
|
|
|
53
53
|
"@tanstack/react-table": "^8.21.3",
|
|
54
54
|
"@types/react": "^19",
|
|
55
55
|
"@types/react-dom": "^19",
|
|
56
|
-
"lucide-react": "^0.
|
|
56
|
+
"lucide-react": "^0.577.0",
|
|
57
57
|
"react": "19.2.5",
|
|
58
58
|
"react-dom": "19.2.5",
|
|
59
|
-
"react-hook-form": "^7.
|
|
60
|
-
"tsdown": "^0.21.
|
|
59
|
+
"react-hook-form": "^7.75.0",
|
|
60
|
+
"tsdown": "^0.21.10",
|
|
61
61
|
"typescript": "^5.7.3",
|
|
62
62
|
"vitest": "^2.1.8",
|
|
63
63
|
"zod": "^3.24.1"
|
|
64
64
|
},
|
|
65
65
|
"typeCoverage": {
|
|
66
|
-
"atLeast": 99.
|
|
66
|
+
"atLeast": 99.91
|
|
67
67
|
},
|
|
68
68
|
"scripts": {
|
|
69
69
|
"build": "tsdown",
|