@ekkolyth/ui 0.1.19 → 0.2.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/base.css +6 -0
- package/dist/blocks.d.ts +2 -2
- package/dist/blocks.js +3 -3
- package/dist/convex.js +1 -1
- package/dist/hooks.d.ts +2 -2
- package/dist/hooks.js +3 -2
- package/dist/{icon-picker-ByfHyJ7i.js → icon-picker-CwavOWKf.js} +1075 -186
- package/dist/{index-DHF8OR1R.d.ts → index-BJs5qfKG.d.ts} +65 -1
- package/dist/index-CxGQ12zb.d.ts +17 -0
- package/dist/index.d.ts +129 -74
- package/dist/index.js +525 -537
- package/dist/layout.d.ts +2 -2
- package/dist/layout.js +2 -2
- package/dist/shiki-code-CLD9RZfj.js +46 -0
- package/dist/text.d.ts +8 -1
- package/dist/text.js +49 -12
- package/dist/themes/provider.d.ts +2 -1
- package/dist/themes/provider.js +4 -4
- package/dist/{toggle-B2PFPImC.js → toggle-Bpm-ggNe.js} +2 -1
- package/dist/{use-mobile-CqHXB_Nc.js → use-mobile-C-Ak14Ip.js} +5 -5
- package/dist/use-window-scroll-margin-BQMpLEeT.js +22 -0
- package/dist/use-window-scroll-margin-BeVjX6Le.d.ts +11 -0
- package/dist/virtual-grid-BNWXDxO1.js +72 -0
- package/package.json +3 -1
- package/dist/container-BBg21poC.js +0 -10
- package/dist/index-Bwp0YMmG.d.ts +0 -5
- package/dist/shiki-code-Bg__Vnt1.js +0 -29
- package/dist/use-mobile-BVGje-2e.d.ts +0 -4
- package/dist/{loading-screen-DB3youyT.js → loading-screen-DilmTJ3J.js} +1 -1
package/dist/index.js
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
import { A as
|
|
1
|
+
import { $ as InputGroupText, A as FieldSet, B as ComboboxInput, C as FieldContent, D as FieldLabel, E as FieldGroup, F as ComboboxChipsInput, G as ComboboxTrigger, H as ComboboxLabel, I as ComboboxCollection, J as PortalContainerContext, K as ComboboxValue, L as ComboboxContent, M as Combobox, N as ComboboxChip, O as FieldLegend, P as ComboboxChips, Q as InputGroupInput, R as ComboboxEmpty, S as BasicField, T as FieldError, U as ComboboxList, V as ComboboxItem, W as ComboboxSeparator, X as InputGroupAddon, Y as InputGroup, Z as InputGroupButton, _ as validate, a as Tabs, at as ColorPicker, b as ComboboxField, c as TabsTrigger, ct as colorPalette, d as Popover, et as InputGroupTextarea, f as PopoverAnchor, g as CalendarDayButton, h as Calendar, i as getIconCategories, it as buttonVariants, j as FieldTitle, k as FieldSeparator, l as Label, lt as getContrastForeground, m as PopoverTrigger, n as getStaticIcon, nt as Input, o as TabsContent, ot as THEME_COLORS, p as PopoverContent, q as useComboboxAnchor, r as PICKER_ICON_NAMES, rt as Button, s as TabsList, st as coerceThemeColor, t as IconPicker, tt as Textarea, u as Field, ut as resolveColorHex, v as Dropzone, w as FieldDescription, x as Spinner, y as Progress, z as ComboboxGroup } from "./icon-picker-CwavOWKf.js";
|
|
2
2
|
import { t as cn } from "./utils-C_uf36nf.js";
|
|
3
|
-
import { t as LoadingScreen } from "./loading-screen-
|
|
3
|
+
import { t as LoadingScreen } from "./loading-screen-DilmTJ3J.js";
|
|
4
4
|
import { a as CardDescription, c as CardTitle, i as CardContent, n as Card, o as CardFooter, r as CardAction, s as CardHeader, t as Widget } from "./widget-C2vjxQms.js";
|
|
5
|
-
import { t as useIsMobile } from "./use-mobile-
|
|
6
|
-
import { t as
|
|
7
|
-
import {
|
|
5
|
+
import { t as useIsMobile } from "./use-mobile-C-Ak14Ip.js";
|
|
6
|
+
import { t as useWindowScrollMargin } from "./use-window-scroll-margin-BQMpLEeT.js";
|
|
7
|
+
import { n as Container, t as VirtualGrid } from "./virtual-grid-BNWXDxO1.js";
|
|
8
|
+
import { _ as SelectTrigger, d as SelectGroup, f as SelectItem, g as SelectSeparator, h as SelectScrollUpButton, l as Select, m as SelectScrollDownButton, n as toggleVariants, p as SelectLabel, r as Toaster, t as Toggle, u as SelectContent, v as SelectValue } from "./toggle-Bpm-ggNe.js";
|
|
8
9
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9
10
|
import { Slot } from "@radix-ui/react-slot";
|
|
10
11
|
import { cva } from "class-variance-authority";
|
|
11
|
-
import { ArrowDownIcon, ArrowLeft, ArrowRight, ArrowUpIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRight, ChevronRightIcon, ChevronsLeftIcon, ChevronsRightIcon, ChevronsUpDownIcon, CircleIcon, EyeOffIcon, FilterIcon, GripVerticalIcon, LayoutGrid, List, Loader2Icon, MinusIcon, MoreHorizontal, MoreHorizontalIcon, PanelLeftIcon, PlusCircleIcon, SearchIcon, Settings2Icon, StretchHorizontal, XIcon } from "lucide-react";
|
|
12
12
|
import * as React from "react";
|
|
13
13
|
import { createContext, useContext, useEffect, useState } from "react";
|
|
14
|
+
import { ArrowDownIcon, ArrowLeft, ArrowRight, ArrowUpIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRight, ChevronRightIcon, ChevronsLeftIcon, ChevronsRightIcon, ChevronsUpDownIcon, CircleIcon, EyeOffIcon, FilterIcon, GripVerticalIcon, LayoutGrid, List, MinusIcon, MoreHorizontal, MoreHorizontalIcon, PanelLeftIcon, PlusCircleIcon, SearchIcon, Settings2Icon, StretchHorizontal, XIcon } from "lucide-react";
|
|
15
|
+
import { useWindowVirtualizer } from "@tanstack/react-virtual";
|
|
14
16
|
import * as AccordionPrimitive from "@radix-ui/react-accordion";
|
|
17
|
+
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
|
|
15
18
|
import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
|
|
16
19
|
import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio";
|
|
17
20
|
import * as AvatarPrimitive from "@radix-ui/react-avatar";
|
|
@@ -20,12 +23,10 @@ import useEmblaCarousel from "embla-carousel-react";
|
|
|
20
23
|
import * as RechartsPrimitive from "recharts";
|
|
21
24
|
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
22
25
|
import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
|
|
23
|
-
import { Combobox as Combobox$1 } from "@base-ui/react";
|
|
24
26
|
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
25
|
-
import { Command as Command$
|
|
27
|
+
import { Command as Command$2 } from "cmdk";
|
|
26
28
|
import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
|
|
27
29
|
import { flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from "@tanstack/react-table";
|
|
28
|
-
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
|
|
29
30
|
import { Drawer as Drawer$1 } from "vaul";
|
|
30
31
|
import { Controller, FormProvider, useFormContext, useFormState } from "react-hook-form";
|
|
31
32
|
import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
|
|
@@ -39,6 +40,7 @@ import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
|
|
|
39
40
|
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
|
40
41
|
import * as SliderPrimitive from "@radix-ui/react-slider";
|
|
41
42
|
import * as SwitchPrimitive from "@radix-ui/react-switch";
|
|
43
|
+
import { Chart as TanStackChart } from "@tanstack/charts/react";
|
|
42
44
|
import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
|
|
43
45
|
//#region src/components/ui/accordion/index.tsx
|
|
44
46
|
function Accordion({ ...props }) {
|
|
@@ -61,7 +63,7 @@ function AccordionTrigger({ className, children, ...props }) {
|
|
|
61
63
|
className: cn("focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 cursor-pointer items-center justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180", className),
|
|
62
64
|
"data-slot": "accordion-trigger",
|
|
63
65
|
...props,
|
|
64
|
-
children: [children, /* @__PURE__ */ jsx(ChevronDownIcon, { className: "text-muted-foreground pointer-events-none size-
|
|
66
|
+
children: [children, /* @__PURE__ */ jsx(ChevronDownIcon, { className: "text-muted-foreground pointer-events-none size-4 shrink-0 transition-transform duration-200" })]
|
|
65
67
|
})
|
|
66
68
|
});
|
|
67
69
|
}
|
|
@@ -77,6 +79,198 @@ function AccordionContent({ className, children, ...props }) {
|
|
|
77
79
|
});
|
|
78
80
|
}
|
|
79
81
|
//#endregion
|
|
82
|
+
//#region src/components/ui/dropdown-menu/index.tsx
|
|
83
|
+
function DropdownMenu({ ...props }) {
|
|
84
|
+
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Root, {
|
|
85
|
+
"data-slot": "dropdown-menu",
|
|
86
|
+
...props
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
function DropdownMenuPortal({ ...props }) {
|
|
90
|
+
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, {
|
|
91
|
+
"data-slot": "dropdown-menu-portal",
|
|
92
|
+
...props
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function DropdownMenuTrigger({ ...props }) {
|
|
96
|
+
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Trigger, {
|
|
97
|
+
"data-slot": "dropdown-menu-trigger",
|
|
98
|
+
...props
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function DropdownMenuContent({ className, sideOffset = 4, ...props }) {
|
|
102
|
+
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.Content, {
|
|
103
|
+
className: cn("bg-popover text-popover-foreground 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 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md", className),
|
|
104
|
+
"data-slot": "dropdown-menu-content",
|
|
105
|
+
sideOffset,
|
|
106
|
+
...props
|
|
107
|
+
}) });
|
|
108
|
+
}
|
|
109
|
+
function DropdownMenuGroup({ ...props }) {
|
|
110
|
+
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Group, {
|
|
111
|
+
"data-slot": "dropdown-menu-group",
|
|
112
|
+
...props
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
function DropdownMenuItem({ className, inset, variant = "default", ...props }) {
|
|
116
|
+
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Item, {
|
|
117
|
+
className: cn("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
118
|
+
"data-inset": inset,
|
|
119
|
+
"data-slot": "dropdown-menu-item",
|
|
120
|
+
"data-variant": variant,
|
|
121
|
+
...props
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function DropdownMenuCheckboxItem({ className, children, checked, ...props }) {
|
|
125
|
+
return /* @__PURE__ */ jsxs(DropdownMenuPrimitive.CheckboxItem, {
|
|
126
|
+
checked,
|
|
127
|
+
className: cn("focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
128
|
+
"data-slot": "dropdown-menu-checkbox-item",
|
|
129
|
+
...props,
|
|
130
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
131
|
+
className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center",
|
|
132
|
+
children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) })
|
|
133
|
+
}), children]
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
function DropdownMenuRadioGroup({ ...props }) {
|
|
137
|
+
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.RadioGroup, {
|
|
138
|
+
"data-slot": "dropdown-menu-radio-group",
|
|
139
|
+
...props
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
function DropdownMenuRadioItem({ className, children, ...props }) {
|
|
143
|
+
return /* @__PURE__ */ jsxs(DropdownMenuPrimitive.RadioItem, {
|
|
144
|
+
className: cn("focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
145
|
+
"data-slot": "dropdown-menu-radio-item",
|
|
146
|
+
...props,
|
|
147
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
148
|
+
className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center",
|
|
149
|
+
children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }) })
|
|
150
|
+
}), children]
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
function DropdownMenuLabel({ className, inset, ...props }) {
|
|
154
|
+
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Label, {
|
|
155
|
+
className: cn("px-2 py-1.5 text-sm font-medium data-[inset]:pl-8", className),
|
|
156
|
+
"data-inset": inset,
|
|
157
|
+
"data-slot": "dropdown-menu-label",
|
|
158
|
+
...props
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
function DropdownMenuSeparator({ className, ...props }) {
|
|
162
|
+
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Separator, {
|
|
163
|
+
className: cn("bg-border -mx-1 my-1 h-px", className),
|
|
164
|
+
"data-slot": "dropdown-menu-separator",
|
|
165
|
+
...props
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
function DropdownMenuShortcut({ className, ...props }) {
|
|
169
|
+
return /* @__PURE__ */ jsx("span", {
|
|
170
|
+
className: cn("text-muted-foreground ml-auto text-xs tracking-widest", className),
|
|
171
|
+
"data-slot": "dropdown-menu-shortcut",
|
|
172
|
+
...props
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
function DropdownMenuSub({ ...props }) {
|
|
176
|
+
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Sub, {
|
|
177
|
+
"data-slot": "dropdown-menu-sub",
|
|
178
|
+
...props
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
|
|
182
|
+
return /* @__PURE__ */ jsxs(DropdownMenuPrimitive.SubTrigger, {
|
|
183
|
+
className: cn("focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8", className),
|
|
184
|
+
"data-inset": inset,
|
|
185
|
+
"data-slot": "dropdown-menu-sub-trigger",
|
|
186
|
+
...props,
|
|
187
|
+
children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto size-4" })]
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
function DropdownMenuSubContent({ className, ...props }) {
|
|
191
|
+
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.SubContent, {
|
|
192
|
+
className: cn("bg-popover text-popover-foreground 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 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg", className),
|
|
193
|
+
"data-slot": "dropdown-menu-sub-content",
|
|
194
|
+
...props
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
//#endregion
|
|
198
|
+
//#region src/components/ui/action-menu-button/index.tsx
|
|
199
|
+
function renderIcon(icon) {
|
|
200
|
+
if (!icon) return null;
|
|
201
|
+
if (React.isValidElement(icon)) return icon;
|
|
202
|
+
return /* @__PURE__ */ jsx(icon, {});
|
|
203
|
+
}
|
|
204
|
+
const triggerVariant = {
|
|
205
|
+
primary: "default",
|
|
206
|
+
outline: "outline",
|
|
207
|
+
ghost: "ghost"
|
|
208
|
+
};
|
|
209
|
+
function ActionMenuButton({ "aria-label": ariaLabel, align = "end", children, className, disabled, onOpenChange, open, size = "icon", variant = "ghost" }) {
|
|
210
|
+
return /* @__PURE__ */ jsxs(DropdownMenu, {
|
|
211
|
+
onOpenChange,
|
|
212
|
+
open,
|
|
213
|
+
children: [/* @__PURE__ */ jsx(DropdownMenuTrigger, {
|
|
214
|
+
asChild: true,
|
|
215
|
+
disabled,
|
|
216
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
217
|
+
"aria-label": ariaLabel,
|
|
218
|
+
className,
|
|
219
|
+
onClick: (event) => {
|
|
220
|
+
event.stopPropagation();
|
|
221
|
+
event.preventDefault();
|
|
222
|
+
},
|
|
223
|
+
onPointerDown: (event) => event.stopPropagation(),
|
|
224
|
+
size,
|
|
225
|
+
type: "button",
|
|
226
|
+
variant: triggerVariant[variant],
|
|
227
|
+
children: /* @__PURE__ */ jsx(MoreHorizontal, {})
|
|
228
|
+
})
|
|
229
|
+
}), /* @__PURE__ */ jsx(DropdownMenuContent, {
|
|
230
|
+
align,
|
|
231
|
+
onClick: (event) => event.stopPropagation(),
|
|
232
|
+
children
|
|
233
|
+
})]
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
function ActionMenuItem({ description, destructive = false, disabled, icon, label, loading = false, onSelect, trailing }) {
|
|
237
|
+
return /* @__PURE__ */ jsxs(DropdownMenuItem, {
|
|
238
|
+
disabled,
|
|
239
|
+
onSelect,
|
|
240
|
+
variant: destructive ? "destructive" : "default",
|
|
241
|
+
children: [
|
|
242
|
+
loading ? /* @__PURE__ */ jsx(Spinner, {
|
|
243
|
+
"aria-hidden": true,
|
|
244
|
+
"aria-label": void 0,
|
|
245
|
+
role: void 0
|
|
246
|
+
}) : renderIcon(icon),
|
|
247
|
+
description ? /* @__PURE__ */ jsxs("span", {
|
|
248
|
+
className: "flex flex-col",
|
|
249
|
+
children: [label, /* @__PURE__ */ jsx("span", {
|
|
250
|
+
className: "text-muted-foreground",
|
|
251
|
+
children: description
|
|
252
|
+
})]
|
|
253
|
+
}) : label,
|
|
254
|
+
trailing ? /* @__PURE__ */ jsx("span", {
|
|
255
|
+
className: "ml-auto",
|
|
256
|
+
children: trailing
|
|
257
|
+
}) : null
|
|
258
|
+
]
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
function ActionMenuSeparator() {
|
|
262
|
+
return /* @__PURE__ */ jsx(DropdownMenuSeparator, {});
|
|
263
|
+
}
|
|
264
|
+
function ActionMenuSub({ children }) {
|
|
265
|
+
return /* @__PURE__ */ jsx(DropdownMenuSub, { children });
|
|
266
|
+
}
|
|
267
|
+
function ActionMenuSubTrigger({ icon, label }) {
|
|
268
|
+
return /* @__PURE__ */ jsxs(DropdownMenuSubTrigger, { children: [renderIcon(icon), label] });
|
|
269
|
+
}
|
|
270
|
+
function ActionMenuSubContent({ children }) {
|
|
271
|
+
return /* @__PURE__ */ jsx(DropdownMenuSubContent, { children });
|
|
272
|
+
}
|
|
273
|
+
//#endregion
|
|
80
274
|
//#region src/components/ui/alert/index.tsx
|
|
81
275
|
const alertVariants = cva("relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", {
|
|
82
276
|
variants: { variant: {
|
|
@@ -214,12 +408,14 @@ function AvatarFallback({ className, ...props }) {
|
|
|
214
408
|
}
|
|
215
409
|
//#endregion
|
|
216
410
|
//#region src/components/ui/badge/index.tsx
|
|
217
|
-
const badgeVariants = cva("inline-flex items-center justify-center rounded-
|
|
411
|
+
const badgeVariants = cva("inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden", {
|
|
218
412
|
variants: { variant: {
|
|
219
413
|
default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
|
|
220
414
|
secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
|
|
221
415
|
destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
|
|
222
|
-
outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
|
|
416
|
+
outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
|
417
|
+
quest: "uppercase tracking-wide",
|
|
418
|
+
recipe: "border-transparent bg-primary/10 text-primary underline decoration-dotted underline-offset-2"
|
|
223
419
|
} },
|
|
224
420
|
defaultVariants: { variant: "default" }
|
|
225
421
|
});
|
|
@@ -631,164 +827,6 @@ function CollapsibleContent({ ...props }) {
|
|
|
631
827
|
});
|
|
632
828
|
}
|
|
633
829
|
//#endregion
|
|
634
|
-
//#region src/components/ui/combobox/index.tsx
|
|
635
|
-
const Combobox = Combobox$1.Root;
|
|
636
|
-
function ComboboxValue({ ...props }) {
|
|
637
|
-
return /* @__PURE__ */ jsx(Combobox$1.Value, {
|
|
638
|
-
"data-slot": "combobox-value",
|
|
639
|
-
...props
|
|
640
|
-
});
|
|
641
|
-
}
|
|
642
|
-
function ComboboxTrigger({ className, children, ...props }) {
|
|
643
|
-
return /* @__PURE__ */ jsxs(Combobox$1.Trigger, {
|
|
644
|
-
className: cn("[&_svg:not([class*='size-'])]:size-4", className),
|
|
645
|
-
"data-slot": "combobox-trigger",
|
|
646
|
-
...props,
|
|
647
|
-
children: [children, /* @__PURE__ */ jsx(ChevronDownIcon, {
|
|
648
|
-
className: "pointer-events-none size-4 text-muted-foreground",
|
|
649
|
-
"data-slot": "combobox-trigger-icon"
|
|
650
|
-
})]
|
|
651
|
-
});
|
|
652
|
-
}
|
|
653
|
-
function ComboboxClear({ className, ...props }) {
|
|
654
|
-
return /* @__PURE__ */ jsx(Combobox$1.Clear, {
|
|
655
|
-
className: cn(className),
|
|
656
|
-
"data-slot": "combobox-clear",
|
|
657
|
-
render: /* @__PURE__ */ jsx(InputGroupButton, {
|
|
658
|
-
size: "icon-xs",
|
|
659
|
-
variant: "ghost"
|
|
660
|
-
}),
|
|
661
|
-
...props,
|
|
662
|
-
children: /* @__PURE__ */ jsx(XIcon, { className: "pointer-events-none" })
|
|
663
|
-
});
|
|
664
|
-
}
|
|
665
|
-
function ComboboxInput({ className, children, disabled = false, showTrigger = true, showClear = false, ...props }) {
|
|
666
|
-
return /* @__PURE__ */ jsxs(InputGroup, {
|
|
667
|
-
className: cn("w-auto", className),
|
|
668
|
-
children: [
|
|
669
|
-
/* @__PURE__ */ jsx(Combobox$1.Input, {
|
|
670
|
-
render: /* @__PURE__ */ jsx(InputGroupInput, { disabled }),
|
|
671
|
-
...props
|
|
672
|
-
}),
|
|
673
|
-
/* @__PURE__ */ jsxs(InputGroupAddon, {
|
|
674
|
-
align: "inline-end",
|
|
675
|
-
children: [showTrigger && /* @__PURE__ */ jsx(InputGroupButton, {
|
|
676
|
-
asChild: true,
|
|
677
|
-
className: "group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent",
|
|
678
|
-
"data-slot": "input-group-button",
|
|
679
|
-
disabled,
|
|
680
|
-
size: "icon-xs",
|
|
681
|
-
variant: "ghost",
|
|
682
|
-
children: /* @__PURE__ */ jsx(ComboboxTrigger, {})
|
|
683
|
-
}), showClear && /* @__PURE__ */ jsx(ComboboxClear, { disabled })]
|
|
684
|
-
}),
|
|
685
|
-
children
|
|
686
|
-
]
|
|
687
|
-
});
|
|
688
|
-
}
|
|
689
|
-
function ComboboxContent({ className, side = "bottom", sideOffset = 6, align = "start", alignOffset = 0, anchor, ...props }) {
|
|
690
|
-
return /* @__PURE__ */ jsx(Combobox$1.Portal, { children: /* @__PURE__ */ jsx(Combobox$1.Positioner, {
|
|
691
|
-
align,
|
|
692
|
-
alignOffset,
|
|
693
|
-
anchor,
|
|
694
|
-
className: "isolate z-50",
|
|
695
|
-
side,
|
|
696
|
-
sideOffset,
|
|
697
|
-
children: /* @__PURE__ */ jsx(Combobox$1.Popup, {
|
|
698
|
-
className: cn("group/combobox-content relative max-h-96 w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[chips=true]:min-w-(--anchor-width) 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 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
|
|
699
|
-
"data-chips": !!anchor,
|
|
700
|
-
"data-slot": "combobox-content",
|
|
701
|
-
...props
|
|
702
|
-
})
|
|
703
|
-
}) });
|
|
704
|
-
}
|
|
705
|
-
function ComboboxList({ className, ...props }) {
|
|
706
|
-
return /* @__PURE__ */ jsx(Combobox$1.List, {
|
|
707
|
-
className: cn("max-h-[min(calc(--spacing(96)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto p-1 data-empty:p-0", className),
|
|
708
|
-
"data-slot": "combobox-list",
|
|
709
|
-
...props
|
|
710
|
-
});
|
|
711
|
-
}
|
|
712
|
-
function ComboboxItem({ className, children, ...props }) {
|
|
713
|
-
return /* @__PURE__ */ jsxs(Combobox$1.Item, {
|
|
714
|
-
className: cn("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
715
|
-
"data-slot": "combobox-item",
|
|
716
|
-
...props,
|
|
717
|
-
children: [children, /* @__PURE__ */ jsx(Combobox$1.ItemIndicator, {
|
|
718
|
-
"data-slot": "combobox-item-indicator",
|
|
719
|
-
render: /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
|
|
720
|
-
children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none size-4 pointer-coarse:size-5" })
|
|
721
|
-
})]
|
|
722
|
-
});
|
|
723
|
-
}
|
|
724
|
-
function ComboboxGroup({ className, ...props }) {
|
|
725
|
-
return /* @__PURE__ */ jsx(Combobox$1.Group, {
|
|
726
|
-
className: cn(className),
|
|
727
|
-
"data-slot": "combobox-group",
|
|
728
|
-
...props
|
|
729
|
-
});
|
|
730
|
-
}
|
|
731
|
-
function ComboboxLabel({ className, ...props }) {
|
|
732
|
-
return /* @__PURE__ */ jsx(Combobox$1.GroupLabel, {
|
|
733
|
-
className: cn("px-2 py-1.5 text-xs text-muted-foreground pointer-coarse:px-3 pointer-coarse:py-2 pointer-coarse:text-sm", className),
|
|
734
|
-
"data-slot": "combobox-label",
|
|
735
|
-
...props
|
|
736
|
-
});
|
|
737
|
-
}
|
|
738
|
-
function ComboboxCollection({ ...props }) {
|
|
739
|
-
return /* @__PURE__ */ jsx(Combobox$1.Collection, {
|
|
740
|
-
"data-slot": "combobox-collection",
|
|
741
|
-
...props
|
|
742
|
-
});
|
|
743
|
-
}
|
|
744
|
-
function ComboboxEmpty({ className, ...props }) {
|
|
745
|
-
return /* @__PURE__ */ jsx(Combobox$1.Empty, {
|
|
746
|
-
className: cn("hidden w-full justify-center py-2 text-center text-sm text-muted-foreground group-data-empty/combobox-content:flex", className),
|
|
747
|
-
"data-slot": "combobox-empty",
|
|
748
|
-
...props
|
|
749
|
-
});
|
|
750
|
-
}
|
|
751
|
-
function ComboboxSeparator({ className, ...props }) {
|
|
752
|
-
return /* @__PURE__ */ jsx(Combobox$1.Separator, {
|
|
753
|
-
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
754
|
-
"data-slot": "combobox-separator",
|
|
755
|
-
...props
|
|
756
|
-
});
|
|
757
|
-
}
|
|
758
|
-
function ComboboxChips({ className, ...props }) {
|
|
759
|
-
return /* @__PURE__ */ jsx(Combobox$1.Chips, {
|
|
760
|
-
className: cn("flex min-h-9 flex-wrap items-center gap-1.5 rounded-md border border-transparent bg-input bg-clip-padding px-2.5 py-1.5 text-sm shadow-xs transition-[color,box-shadow] focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/50 has-aria-invalid:border-destructive has-aria-invalid:ring-[3px] has-aria-invalid:ring-destructive/20 has-data-[slot=combobox-chip]:px-1.5 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:ring-destructive/40", className),
|
|
761
|
-
"data-slot": "combobox-chips",
|
|
762
|
-
...props
|
|
763
|
-
});
|
|
764
|
-
}
|
|
765
|
-
function ComboboxChip({ className, children, showRemove = true, ...props }) {
|
|
766
|
-
return /* @__PURE__ */ jsxs(Combobox$1.Chip, {
|
|
767
|
-
className: cn("flex h-[calc(--spacing(5.5))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0", className),
|
|
768
|
-
"data-slot": "combobox-chip",
|
|
769
|
-
...props,
|
|
770
|
-
children: [children, showRemove && /* @__PURE__ */ jsx(Combobox$1.ChipRemove, {
|
|
771
|
-
className: "-ml-1 opacity-50 hover:opacity-100",
|
|
772
|
-
"data-slot": "combobox-chip-remove",
|
|
773
|
-
render: /* @__PURE__ */ jsx(Button, {
|
|
774
|
-
size: "icon-xs",
|
|
775
|
-
variant: "ghost"
|
|
776
|
-
}),
|
|
777
|
-
children: /* @__PURE__ */ jsx(XIcon, { className: "pointer-events-none" })
|
|
778
|
-
})]
|
|
779
|
-
});
|
|
780
|
-
}
|
|
781
|
-
function ComboboxChipsInput({ className, children, ...props }) {
|
|
782
|
-
return /* @__PURE__ */ jsx(Combobox$1.Input, {
|
|
783
|
-
className: cn("min-w-16 flex-1 outline-none", className),
|
|
784
|
-
"data-slot": "combobox-chip-input",
|
|
785
|
-
...props
|
|
786
|
-
});
|
|
787
|
-
}
|
|
788
|
-
function useComboboxAnchor() {
|
|
789
|
-
return React.useRef(null);
|
|
790
|
-
}
|
|
791
|
-
//#endregion
|
|
792
830
|
//#region src/components/ui/dialog/index.tsx
|
|
793
831
|
function Dialog({ ...props }) {
|
|
794
832
|
return /* @__PURE__ */ jsx(DialogPrimitive.Root, {
|
|
@@ -821,14 +859,32 @@ function DialogOverlay({ className, ...props }) {
|
|
|
821
859
|
...props
|
|
822
860
|
});
|
|
823
861
|
}
|
|
824
|
-
function DialogContent({ className, children, showCloseButton = true, ...props }) {
|
|
862
|
+
function DialogContent({ className, children, onInteractOutside, ref, showCloseButton = true, ...props }) {
|
|
863
|
+
const [content, setContent] = React.useState(null);
|
|
864
|
+
const attach = React.useCallback((node) => {
|
|
865
|
+
setContent(node);
|
|
866
|
+
if (typeof ref === "function") ref(node);
|
|
867
|
+
else if (ref) ref.current = node;
|
|
868
|
+
}, [ref]);
|
|
825
869
|
return /* @__PURE__ */ jsxs(DialogPortal, {
|
|
826
870
|
"data-slot": "dialog-portal",
|
|
827
871
|
children: [/* @__PURE__ */ jsx(DialogOverlay, {}), /* @__PURE__ */ jsxs(DialogPrimitive.Content, {
|
|
828
872
|
className: cn("bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg", className),
|
|
829
873
|
"data-slot": "dialog-content",
|
|
874
|
+
onInteractOutside: (event) => {
|
|
875
|
+
const target = event.target;
|
|
876
|
+
if (target instanceof Element && target.closest("[data-slot=\"combobox-content\"]")) {
|
|
877
|
+
event.preventDefault();
|
|
878
|
+
return;
|
|
879
|
+
}
|
|
880
|
+
onInteractOutside?.(event);
|
|
881
|
+
},
|
|
882
|
+
ref: attach,
|
|
830
883
|
...props,
|
|
831
|
-
children: [
|
|
884
|
+
children: [/* @__PURE__ */ jsx(PortalContainerContext.Provider, {
|
|
885
|
+
value: content,
|
|
886
|
+
children
|
|
887
|
+
}), showCloseButton && /* @__PURE__ */ jsxs(DialogPrimitive.Close, {
|
|
832
888
|
className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
833
889
|
"data-slot": "dialog-close",
|
|
834
890
|
children: [/* @__PURE__ */ jsx(XIcon, {}), /* @__PURE__ */ jsx("span", {
|
|
@@ -870,7 +926,7 @@ function DialogDescription({ className, ...props }) {
|
|
|
870
926
|
//#endregion
|
|
871
927
|
//#region src/components/ui/command/index.tsx
|
|
872
928
|
function Command({ className, ...props }) {
|
|
873
|
-
return /* @__PURE__ */ jsx(Command$
|
|
929
|
+
return /* @__PURE__ */ jsx(Command$2, {
|
|
874
930
|
className: cn("bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md", className),
|
|
875
931
|
"data-slot": "command",
|
|
876
932
|
...props
|
|
@@ -896,7 +952,7 @@ function CommandInput({ className, ...props }) {
|
|
|
896
952
|
return /* @__PURE__ */ jsxs("div", {
|
|
897
953
|
className: "flex h-9 items-center gap-2 border-b px-3",
|
|
898
954
|
"data-slot": "command-input-wrapper",
|
|
899
|
-
children: [/* @__PURE__ */ jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }), /* @__PURE__ */ jsx(Command$
|
|
955
|
+
children: [/* @__PURE__ */ jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }), /* @__PURE__ */ jsx(Command$2.Input, {
|
|
900
956
|
className: cn("placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50", className),
|
|
901
957
|
"data-slot": "command-input",
|
|
902
958
|
...props
|
|
@@ -904,35 +960,35 @@ function CommandInput({ className, ...props }) {
|
|
|
904
960
|
});
|
|
905
961
|
}
|
|
906
962
|
function CommandList({ className, ...props }) {
|
|
907
|
-
return /* @__PURE__ */ jsx(Command$
|
|
963
|
+
return /* @__PURE__ */ jsx(Command$2.List, {
|
|
908
964
|
className: cn("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto", className),
|
|
909
965
|
"data-slot": "command-list",
|
|
910
966
|
...props
|
|
911
967
|
});
|
|
912
968
|
}
|
|
913
969
|
function CommandEmpty({ ...props }) {
|
|
914
|
-
return /* @__PURE__ */ jsx(Command$
|
|
970
|
+
return /* @__PURE__ */ jsx(Command$2.Empty, {
|
|
915
971
|
className: "py-6 text-center text-sm",
|
|
916
972
|
"data-slot": "command-empty",
|
|
917
973
|
...props
|
|
918
974
|
});
|
|
919
975
|
}
|
|
920
976
|
function CommandGroup({ className, ...props }) {
|
|
921
|
-
return /* @__PURE__ */ jsx(Command$
|
|
977
|
+
return /* @__PURE__ */ jsx(Command$2.Group, {
|
|
922
978
|
className: cn("text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium", className),
|
|
923
979
|
"data-slot": "command-group",
|
|
924
980
|
...props
|
|
925
981
|
});
|
|
926
982
|
}
|
|
927
983
|
function CommandSeparator({ className, ...props }) {
|
|
928
|
-
return /* @__PURE__ */ jsx(Command$
|
|
984
|
+
return /* @__PURE__ */ jsx(Command$2.Separator, {
|
|
929
985
|
className: cn("bg-border -mx-1 h-px", className),
|
|
930
986
|
"data-slot": "command-separator",
|
|
931
987
|
...props
|
|
932
988
|
});
|
|
933
989
|
}
|
|
934
990
|
function CommandItem({ className, ...props }) {
|
|
935
|
-
return /* @__PURE__ */ jsx(Command$
|
|
991
|
+
return /* @__PURE__ */ jsx(Command$2.Item, {
|
|
936
992
|
className: cn("data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
937
993
|
"data-slot": "command-item",
|
|
938
994
|
...props
|
|
@@ -1114,6 +1170,96 @@ function DataTable({ data, columns, tableId, bulkActions, filters, initialPageSi
|
|
|
1114
1170
|
});
|
|
1115
1171
|
}
|
|
1116
1172
|
//#endregion
|
|
1173
|
+
//#region src/components/ui/data-table/data-table-bulk-bar.tsx
|
|
1174
|
+
function DataTableBulkBar() {
|
|
1175
|
+
const { table, bulkActions } = useDataTable();
|
|
1176
|
+
const [confirming, setConfirming] = useState(null);
|
|
1177
|
+
const selectedRows = table.getFilteredSelectedRowModel().rows;
|
|
1178
|
+
const selectedCount = selectedRows.length;
|
|
1179
|
+
if (!bulkActions?.length) return null;
|
|
1180
|
+
if (selectedCount === 0) return null;
|
|
1181
|
+
const runAction = async (action) => {
|
|
1182
|
+
const rows = selectedRows.map((r) => r.original);
|
|
1183
|
+
if (action.confirm) {
|
|
1184
|
+
setConfirming(action);
|
|
1185
|
+
return;
|
|
1186
|
+
}
|
|
1187
|
+
if (await action.onRun(rows)) table.resetRowSelection();
|
|
1188
|
+
};
|
|
1189
|
+
const runConfirmed = async () => {
|
|
1190
|
+
if (!confirming) return;
|
|
1191
|
+
const action = confirming;
|
|
1192
|
+
const rows = selectedRows.map((r) => r.original);
|
|
1193
|
+
setConfirming(null);
|
|
1194
|
+
if (await action.onRun(rows)) table.resetRowSelection();
|
|
1195
|
+
};
|
|
1196
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
|
|
1197
|
+
className: "fixed inset-x-0 bottom-4 z-40 mx-auto flex w-fit max-w-[calc(100%-2rem)] items-center gap-2 rounded-xl border border-border bg-card px-3 py-2 shadow-lg",
|
|
1198
|
+
children: [
|
|
1199
|
+
/* @__PURE__ */ jsx(Button, {
|
|
1200
|
+
className: "size-7",
|
|
1201
|
+
onClick: () => table.resetRowSelection(),
|
|
1202
|
+
size: "icon",
|
|
1203
|
+
variant: "ghost",
|
|
1204
|
+
children: /* @__PURE__ */ jsx(XIcon, { className: "size-4" })
|
|
1205
|
+
}),
|
|
1206
|
+
/* @__PURE__ */ jsxs("span", {
|
|
1207
|
+
className: "text-sm font-medium",
|
|
1208
|
+
children: [selectedCount, " selected"]
|
|
1209
|
+
}),
|
|
1210
|
+
/* @__PURE__ */ jsx("div", {
|
|
1211
|
+
className: "ml-2 flex items-center gap-1",
|
|
1212
|
+
children: bulkActions.map((action) => /* @__PURE__ */ jsxs(Button, {
|
|
1213
|
+
onClick: () => runAction(action),
|
|
1214
|
+
size: "sm",
|
|
1215
|
+
variant: action.variant === "destructive" ? "destructive" : "outline",
|
|
1216
|
+
children: [action.icon && /* @__PURE__ */ jsx(action.icon, { className: "size-4" }), action.label]
|
|
1217
|
+
}, action.id))
|
|
1218
|
+
})
|
|
1219
|
+
]
|
|
1220
|
+
}), /* @__PURE__ */ jsx(AlertDialog, {
|
|
1221
|
+
onOpenChange: (open) => !open && setConfirming(null),
|
|
1222
|
+
open: confirming !== null,
|
|
1223
|
+
children: /* @__PURE__ */ jsxs(AlertDialogContent, { children: [/* @__PURE__ */ jsxs(AlertDialogHeader, { children: [/* @__PURE__ */ jsx(AlertDialogTitle, { children: confirming?.confirm?.title }), /* @__PURE__ */ jsx(AlertDialogDescription, { children: confirming?.confirm?.description })] }), /* @__PURE__ */ jsxs(AlertDialogFooter, { children: [/* @__PURE__ */ jsx(AlertDialogCancel, { children: "Cancel" }), /* @__PURE__ */ jsx(AlertDialogAction, {
|
|
1224
|
+
onClick: runConfirmed,
|
|
1225
|
+
children: "Continue"
|
|
1226
|
+
})] })] })
|
|
1227
|
+
})] });
|
|
1228
|
+
}
|
|
1229
|
+
//#endregion
|
|
1230
|
+
//#region src/components/ui/data-table/data-table-column-header.tsx
|
|
1231
|
+
function DataTableColumnHeader({ column, title, align = "left" }) {
|
|
1232
|
+
if (!column.getCanSort()) return /* @__PURE__ */ jsx("span", {
|
|
1233
|
+
className: align === "right" ? "block text-right text-sm font-medium" : "text-sm font-medium",
|
|
1234
|
+
children: title
|
|
1235
|
+
});
|
|
1236
|
+
return /* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsx(DropdownMenuTrigger, {
|
|
1237
|
+
asChild: true,
|
|
1238
|
+
children: /* @__PURE__ */ jsxs(Button, {
|
|
1239
|
+
className: align === "right" ? "-mr-3 ml-auto flex h-8 data-[state=open]:bg-accent" : "-ml-3 h-8 data-[state=open]:bg-accent",
|
|
1240
|
+
size: "sm",
|
|
1241
|
+
variant: "ghost",
|
|
1242
|
+
children: [/* @__PURE__ */ jsx("span", { children: title }), column.getIsSorted() === "desc" ? /* @__PURE__ */ jsx(ArrowDownIcon, { className: "ml-2 size-4" }) : column.getIsSorted() === "asc" ? /* @__PURE__ */ jsx(ArrowUpIcon, { className: "ml-2 size-4" }) : /* @__PURE__ */ jsx(ChevronsUpDownIcon, { className: "ml-2 size-4" })]
|
|
1243
|
+
})
|
|
1244
|
+
}), /* @__PURE__ */ jsxs(DropdownMenuContent, {
|
|
1245
|
+
align: align === "right" ? "end" : "start",
|
|
1246
|
+
children: [
|
|
1247
|
+
/* @__PURE__ */ jsxs(DropdownMenuItem, {
|
|
1248
|
+
onClick: () => column.toggleSorting(false),
|
|
1249
|
+
children: [/* @__PURE__ */ jsx(ArrowUpIcon, { className: "size-4" }), " Asc"]
|
|
1250
|
+
}),
|
|
1251
|
+
/* @__PURE__ */ jsxs(DropdownMenuItem, {
|
|
1252
|
+
onClick: () => column.toggleSorting(true),
|
|
1253
|
+
children: [/* @__PURE__ */ jsx(ArrowDownIcon, { className: "size-4" }), " Desc"]
|
|
1254
|
+
}),
|
|
1255
|
+
column.getCanHide() && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(DropdownMenuSeparator, {}), /* @__PURE__ */ jsxs(DropdownMenuItem, {
|
|
1256
|
+
onClick: () => column.toggleVisibility(false),
|
|
1257
|
+
children: [/* @__PURE__ */ jsx(EyeOffIcon, { className: "size-4" }), " Hide"]
|
|
1258
|
+
})] })
|
|
1259
|
+
]
|
|
1260
|
+
})] });
|
|
1261
|
+
}
|
|
1262
|
+
//#endregion
|
|
1117
1263
|
//#region src/components/ui/table/index.tsx
|
|
1118
1264
|
function Table({ className, ...props }) {
|
|
1119
1265
|
return /* @__PURE__ */ jsx("div", {
|
|
@@ -1177,10 +1323,62 @@ function TableCaption({ className, ...props }) {
|
|
|
1177
1323
|
}
|
|
1178
1324
|
//#endregion
|
|
1179
1325
|
//#region src/components/ui/data-table/data-table-content.tsx
|
|
1180
|
-
function
|
|
1326
|
+
function VirtualTableBody({ rows, columns, estimateRowHeight, renderRow }) {
|
|
1327
|
+
const { ref, margin } = useWindowScrollMargin();
|
|
1328
|
+
const virtualizer = useWindowVirtualizer({
|
|
1329
|
+
count: rows.length,
|
|
1330
|
+
estimateSize: () => estimateRowHeight,
|
|
1331
|
+
overscan: 8,
|
|
1332
|
+
scrollMargin: margin
|
|
1333
|
+
});
|
|
1334
|
+
const items = virtualizer.getVirtualItems();
|
|
1335
|
+
const offset = virtualizer.options.scrollMargin;
|
|
1336
|
+
const before = items.length ? items[0].start - offset : 0;
|
|
1337
|
+
const after = items.length ? virtualizer.getTotalSize() - (items[items.length - 1].end - offset) : 0;
|
|
1338
|
+
return /* @__PURE__ */ jsxs(TableBody, {
|
|
1339
|
+
ref,
|
|
1340
|
+
children: [
|
|
1341
|
+
before > 0 && /* @__PURE__ */ jsx("tr", {
|
|
1342
|
+
"aria-hidden": "true",
|
|
1343
|
+
children: /* @__PURE__ */ jsx("td", {
|
|
1344
|
+
className: "p-0",
|
|
1345
|
+
colSpan: columns,
|
|
1346
|
+
style: { height: before }
|
|
1347
|
+
})
|
|
1348
|
+
}),
|
|
1349
|
+
items.map((item) => renderRow(rows[item.index], item.index, virtualizer.measureElement)),
|
|
1350
|
+
after > 0 && /* @__PURE__ */ jsx("tr", {
|
|
1351
|
+
"aria-hidden": "true",
|
|
1352
|
+
children: /* @__PURE__ */ jsx("td", {
|
|
1353
|
+
className: "p-0",
|
|
1354
|
+
colSpan: columns,
|
|
1355
|
+
style: { height: after }
|
|
1356
|
+
})
|
|
1357
|
+
})
|
|
1358
|
+
]
|
|
1359
|
+
});
|
|
1360
|
+
}
|
|
1361
|
+
function DataTableContent({ onRowClick, emptyMessage = "No results.", isLoading, loadingRowCount = 10, virtualize = false, estimateRowHeight = 48 }) {
|
|
1181
1362
|
const { table } = useDataTable();
|
|
1182
1363
|
const visibleColumns = table.getVisibleLeafColumns().length;
|
|
1183
1364
|
const selectMode = table.getIsSomeRowsSelected() || table.getIsAllRowsSelected();
|
|
1365
|
+
const rows = table.getRowModel().rows;
|
|
1366
|
+
function renderRow(row, index, measureRef) {
|
|
1367
|
+
return /* @__PURE__ */ jsx(TableRow, {
|
|
1368
|
+
className: cn("group/row", onRowClick && "cursor-pointer"),
|
|
1369
|
+
"data-index": index,
|
|
1370
|
+
"data-state": row.getIsSelected() ? "selected" : void 0,
|
|
1371
|
+
onClick: onRowClick ? () => onRowClick(row.original) : void 0,
|
|
1372
|
+
ref: measureRef,
|
|
1373
|
+
children: row.getVisibleCells().map((cell) => {
|
|
1374
|
+
const meta = cell.column.columnDef.meta;
|
|
1375
|
+
return /* @__PURE__ */ jsx(TableCell, {
|
|
1376
|
+
className: cn(meta?.cellClassName),
|
|
1377
|
+
children: flexRender(cell.column.columnDef.cell, cell.getContext())
|
|
1378
|
+
}, cell.id);
|
|
1379
|
+
})
|
|
1380
|
+
}, row.id);
|
|
1381
|
+
}
|
|
1184
1382
|
return /* @__PURE__ */ jsx(Card, {
|
|
1185
1383
|
className: "group/table gap-0 py-0 overflow-hidden",
|
|
1186
1384
|
"data-select-mode": selectMode ? "" : void 0,
|
|
@@ -1193,44 +1391,16 @@ function DataTableContent({ onRowClick, emptyMessage = "No results.", isLoading,
|
|
|
1193
1391
|
children: header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())
|
|
1194
1392
|
}, header.id);
|
|
1195
1393
|
}) }, headerGroup.id))
|
|
1196
|
-
}),
|
|
1197
|
-
|
|
1394
|
+
}), virtualize && !isLoading && rows.length > 0 ? /* @__PURE__ */ jsx(VirtualTableBody, {
|
|
1395
|
+
columns: visibleColumns,
|
|
1396
|
+
estimateRowHeight,
|
|
1397
|
+
renderRow,
|
|
1398
|
+
rows
|
|
1399
|
+
}) : /* @__PURE__ */ jsx(TableBody, { children: isLoading ? Array.from({ length: loadingRowCount }, (_, n) => /* @__PURE__ */ jsx(TableRow, { children: Array.from({ length: visibleColumns }, (_, c) => /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx("div", { className: "h-4 w-24 rounded bg-muted" }) }, c)) }, `skel-${n}`)) : rows.length === 0 ? /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, {
|
|
1198
1400
|
className: "h-24 text-center text-muted-foreground",
|
|
1401
|
+
colSpan: visibleColumns,
|
|
1199
1402
|
children: emptyMessage
|
|
1200
|
-
}) }) :
|
|
1201
|
-
"data-state": row.getIsSelected() ? "selected" : void 0,
|
|
1202
|
-
className: cn("group/row", onRowClick && "cursor-pointer"),
|
|
1203
|
-
onClick: onRowClick ? () => onRowClick(row.original) : void 0,
|
|
1204
|
-
children: row.getVisibleCells().map((cell) => {
|
|
1205
|
-
const meta = cell.column.columnDef.meta;
|
|
1206
|
-
return /* @__PURE__ */ jsx(TableCell, {
|
|
1207
|
-
className: cn(meta?.cellClassName),
|
|
1208
|
-
children: flexRender(cell.column.columnDef.cell, cell.getContext())
|
|
1209
|
-
}, cell.id);
|
|
1210
|
-
})
|
|
1211
|
-
}, row.id)) })] })
|
|
1212
|
-
});
|
|
1213
|
-
}
|
|
1214
|
-
//#endregion
|
|
1215
|
-
//#region src/components/ui/data-table/data-table-toolbar.tsx
|
|
1216
|
-
function DataTableToolbar({ children }) {
|
|
1217
|
-
return /* @__PURE__ */ jsx("div", {
|
|
1218
|
-
className: "flex flex-wrap items-center gap-2 pb-2",
|
|
1219
|
-
children
|
|
1220
|
-
});
|
|
1221
|
-
}
|
|
1222
|
-
//#endregion
|
|
1223
|
-
//#region src/components/ui/data-table/data-table-search.tsx
|
|
1224
|
-
function DataTableSearch({ placeholder = "Search…" }) {
|
|
1225
|
-
const { table } = useDataTable();
|
|
1226
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
1227
|
-
className: "relative flex-1 min-w-[180px] max-w-sm",
|
|
1228
|
-
children: [/* @__PURE__ */ jsx(SearchIcon, { className: "absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground" }), /* @__PURE__ */ jsx(Input, {
|
|
1229
|
-
value: table.getState().globalFilter ?? "",
|
|
1230
|
-
onChange: (e) => table.setGlobalFilter(e.target.value),
|
|
1231
|
-
placeholder,
|
|
1232
|
-
className: "pl-9"
|
|
1233
|
-
})]
|
|
1403
|
+
}) }) : rows.map((row) => renderRow(row)) })] })
|
|
1234
1404
|
});
|
|
1235
1405
|
}
|
|
1236
1406
|
//#endregion
|
|
@@ -1243,169 +1413,53 @@ function DataTableFilter({ column, title, options }) {
|
|
|
1243
1413
|
return /* @__PURE__ */ jsxs(Popover, { children: [/* @__PURE__ */ jsx(PopoverTrigger, {
|
|
1244
1414
|
asChild: true,
|
|
1245
1415
|
children: /* @__PURE__ */ jsxs(Button, {
|
|
1246
|
-
variant: "outline",
|
|
1247
|
-
size: "sm",
|
|
1248
1416
|
className: "h-8 border-dashed",
|
|
1417
|
+
size: "sm",
|
|
1418
|
+
variant: "outline",
|
|
1249
1419
|
children: [
|
|
1250
1420
|
/* @__PURE__ */ jsx(PlusCircleIcon, { className: "size-4" }),
|
|
1251
1421
|
title,
|
|
1252
1422
|
selected.size > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Separator, {
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
}), /* @__PURE__ */ jsx(Badge, {
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
children: selected.size
|
|
1259
|
-
})] })
|
|
1260
|
-
]
|
|
1261
|
-
})
|
|
1262
|
-
}), /* @__PURE__ */ jsx(PopoverContent, {
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
children: /* @__PURE__ */ jsxs(Command, { children: [/* @__PURE__ */ jsx(CommandInput, { placeholder: title }), /* @__PURE__ */ jsxs(CommandList, { children: [
|
|
1266
|
-
/* @__PURE__ */ jsx(CommandEmpty, { children: "No results." }),
|
|
1267
|
-
/* @__PURE__ */ jsx(CommandGroup, { children: options.map((opt) => {
|
|
1268
|
-
const isSelected = selected.has(opt.value);
|
|
1269
|
-
return /* @__PURE__ */ jsxs(CommandItem, {
|
|
1270
|
-
onSelect: () => {
|
|
1271
|
-
const next = new Set(selected);
|
|
1272
|
-
if (isSelected) next.delete(opt.value);
|
|
1273
|
-
else next.add(opt.value);
|
|
1274
|
-
col.setFilterValue(next.size === 0 ? void 0 : Array.from(next));
|
|
1275
|
-
},
|
|
1276
|
-
children: [
|
|
1277
|
-
/* @__PURE__ */ jsx("div", {
|
|
1278
|
-
className: `mr-2 flex size-4 items-center justify-center rounded-sm border ${isSelected ? "border-primary bg-primary text-primary-foreground" : "border-muted-foreground/40"}`,
|
|
1279
|
-
children: isSelected && /* @__PURE__ */ jsx(CheckIcon, { className: "size-3" })
|
|
1280
|
-
}),
|
|
1281
|
-
opt.icon && /* @__PURE__ */ jsx(opt.icon, { className: "mr-2 size-4 text-muted-foreground" }),
|
|
1282
|
-
/* @__PURE__ */ jsx("span", { children: opt.label })
|
|
1283
|
-
]
|
|
1284
|
-
}, opt.value);
|
|
1285
|
-
}) }),
|
|
1286
|
-
selected.size > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(CommandSeparator, {}), /* @__PURE__ */ jsx(CommandGroup, { children: /* @__PURE__ */ jsx(CommandItem, {
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
children: "Clear filters"
|
|
1290
|
-
}) })] })
|
|
1291
|
-
] })] })
|
|
1292
|
-
})] });
|
|
1293
|
-
}
|
|
1294
|
-
//#endregion
|
|
1295
|
-
//#region src/components/ui/dropdown-menu/index.tsx
|
|
1296
|
-
function DropdownMenu({ ...props }) {
|
|
1297
|
-
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Root, {
|
|
1298
|
-
"data-slot": "dropdown-menu",
|
|
1299
|
-
...props
|
|
1300
|
-
});
|
|
1301
|
-
}
|
|
1302
|
-
function DropdownMenuPortal({ ...props }) {
|
|
1303
|
-
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, {
|
|
1304
|
-
"data-slot": "dropdown-menu-portal",
|
|
1305
|
-
...props
|
|
1306
|
-
});
|
|
1307
|
-
}
|
|
1308
|
-
function DropdownMenuTrigger({ ...props }) {
|
|
1309
|
-
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Trigger, {
|
|
1310
|
-
"data-slot": "dropdown-menu-trigger",
|
|
1311
|
-
...props
|
|
1312
|
-
});
|
|
1313
|
-
}
|
|
1314
|
-
function DropdownMenuContent({ className, sideOffset = 4, ...props }) {
|
|
1315
|
-
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.Content, {
|
|
1316
|
-
className: cn("bg-popover text-popover-foreground 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 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md", className),
|
|
1317
|
-
"data-slot": "dropdown-menu-content",
|
|
1318
|
-
sideOffset,
|
|
1319
|
-
...props
|
|
1320
|
-
}) });
|
|
1321
|
-
}
|
|
1322
|
-
function DropdownMenuGroup({ ...props }) {
|
|
1323
|
-
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Group, {
|
|
1324
|
-
"data-slot": "dropdown-menu-group",
|
|
1325
|
-
...props
|
|
1326
|
-
});
|
|
1327
|
-
}
|
|
1328
|
-
function DropdownMenuItem({ className, inset, variant = "default", ...props }) {
|
|
1329
|
-
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Item, {
|
|
1330
|
-
className: cn("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
1331
|
-
"data-inset": inset,
|
|
1332
|
-
"data-slot": "dropdown-menu-item",
|
|
1333
|
-
"data-variant": variant,
|
|
1334
|
-
...props
|
|
1335
|
-
});
|
|
1336
|
-
}
|
|
1337
|
-
function DropdownMenuCheckboxItem({ className, children, checked, ...props }) {
|
|
1338
|
-
return /* @__PURE__ */ jsxs(DropdownMenuPrimitive.CheckboxItem, {
|
|
1339
|
-
checked,
|
|
1340
|
-
className: cn("focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
1341
|
-
"data-slot": "dropdown-menu-checkbox-item",
|
|
1342
|
-
...props,
|
|
1343
|
-
children: [/* @__PURE__ */ jsx("span", {
|
|
1344
|
-
className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center",
|
|
1345
|
-
children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) })
|
|
1346
|
-
}), children]
|
|
1347
|
-
});
|
|
1348
|
-
}
|
|
1349
|
-
function DropdownMenuRadioGroup({ ...props }) {
|
|
1350
|
-
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.RadioGroup, {
|
|
1351
|
-
"data-slot": "dropdown-menu-radio-group",
|
|
1352
|
-
...props
|
|
1353
|
-
});
|
|
1354
|
-
}
|
|
1355
|
-
function DropdownMenuRadioItem({ className, children, ...props }) {
|
|
1356
|
-
return /* @__PURE__ */ jsxs(DropdownMenuPrimitive.RadioItem, {
|
|
1357
|
-
className: cn("focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
|
|
1358
|
-
"data-slot": "dropdown-menu-radio-item",
|
|
1359
|
-
...props,
|
|
1360
|
-
children: [/* @__PURE__ */ jsx("span", {
|
|
1361
|
-
className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center",
|
|
1362
|
-
children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }) })
|
|
1363
|
-
}), children]
|
|
1364
|
-
});
|
|
1365
|
-
}
|
|
1366
|
-
function DropdownMenuLabel({ className, inset, ...props }) {
|
|
1367
|
-
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Label, {
|
|
1368
|
-
className: cn("px-2 py-1.5 text-sm font-medium data-[inset]:pl-8", className),
|
|
1369
|
-
"data-inset": inset,
|
|
1370
|
-
"data-slot": "dropdown-menu-label",
|
|
1371
|
-
...props
|
|
1372
|
-
});
|
|
1373
|
-
}
|
|
1374
|
-
function DropdownMenuSeparator({ className, ...props }) {
|
|
1375
|
-
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Separator, {
|
|
1376
|
-
className: cn("bg-border -mx-1 my-1 h-px", className),
|
|
1377
|
-
"data-slot": "dropdown-menu-separator",
|
|
1378
|
-
...props
|
|
1379
|
-
});
|
|
1380
|
-
}
|
|
1381
|
-
function DropdownMenuShortcut({ className, ...props }) {
|
|
1382
|
-
return /* @__PURE__ */ jsx("span", {
|
|
1383
|
-
className: cn("text-muted-foreground ml-auto text-xs tracking-widest", className),
|
|
1384
|
-
"data-slot": "dropdown-menu-shortcut",
|
|
1385
|
-
...props
|
|
1386
|
-
});
|
|
1387
|
-
}
|
|
1388
|
-
function DropdownMenuSub({ ...props }) {
|
|
1389
|
-
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Sub, {
|
|
1390
|
-
"data-slot": "dropdown-menu-sub",
|
|
1391
|
-
...props
|
|
1392
|
-
});
|
|
1393
|
-
}
|
|
1394
|
-
function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
|
|
1395
|
-
return /* @__PURE__ */ jsxs(DropdownMenuPrimitive.SubTrigger, {
|
|
1396
|
-
className: cn("focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8", className),
|
|
1397
|
-
"data-inset": inset,
|
|
1398
|
-
"data-slot": "dropdown-menu-sub-trigger",
|
|
1399
|
-
...props,
|
|
1400
|
-
children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto size-4" })]
|
|
1401
|
-
});
|
|
1402
|
-
}
|
|
1403
|
-
function DropdownMenuSubContent({ className, ...props }) {
|
|
1404
|
-
return /* @__PURE__ */ jsx(DropdownMenuPrimitive.SubContent, {
|
|
1405
|
-
className: cn("bg-popover text-popover-foreground 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 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg", className),
|
|
1406
|
-
"data-slot": "dropdown-menu-sub-content",
|
|
1407
|
-
...props
|
|
1408
|
-
});
|
|
1423
|
+
className: "mx-2 h-4",
|
|
1424
|
+
orientation: "vertical"
|
|
1425
|
+
}), /* @__PURE__ */ jsx(Badge, {
|
|
1426
|
+
className: "rounded-sm px-1 font-normal",
|
|
1427
|
+
variant: "secondary",
|
|
1428
|
+
children: selected.size
|
|
1429
|
+
})] })
|
|
1430
|
+
]
|
|
1431
|
+
})
|
|
1432
|
+
}), /* @__PURE__ */ jsx(PopoverContent, {
|
|
1433
|
+
align: "start",
|
|
1434
|
+
className: "w-[200px] p-0",
|
|
1435
|
+
children: /* @__PURE__ */ jsxs(Command, { children: [/* @__PURE__ */ jsx(CommandInput, { placeholder: title }), /* @__PURE__ */ jsxs(CommandList, { children: [
|
|
1436
|
+
/* @__PURE__ */ jsx(CommandEmpty, { children: "No results." }),
|
|
1437
|
+
/* @__PURE__ */ jsx(CommandGroup, { children: options.map((opt) => {
|
|
1438
|
+
const isSelected = selected.has(opt.value);
|
|
1439
|
+
return /* @__PURE__ */ jsxs(CommandItem, {
|
|
1440
|
+
onSelect: () => {
|
|
1441
|
+
const next = new Set(selected);
|
|
1442
|
+
if (isSelected) next.delete(opt.value);
|
|
1443
|
+
else next.add(opt.value);
|
|
1444
|
+
col.setFilterValue(next.size === 0 ? void 0 : Array.from(next));
|
|
1445
|
+
},
|
|
1446
|
+
children: [
|
|
1447
|
+
/* @__PURE__ */ jsx("div", {
|
|
1448
|
+
className: `mr-2 flex size-4 items-center justify-center rounded-sm border ${isSelected ? "border-primary bg-primary text-primary-foreground" : "border-muted-foreground/40"}`,
|
|
1449
|
+
children: isSelected && /* @__PURE__ */ jsx(CheckIcon, { className: "size-3" })
|
|
1450
|
+
}),
|
|
1451
|
+
opt.icon && /* @__PURE__ */ jsx(opt.icon, { className: "mr-2 size-4 text-muted-foreground" }),
|
|
1452
|
+
/* @__PURE__ */ jsx("span", { children: opt.label })
|
|
1453
|
+
]
|
|
1454
|
+
}, opt.value);
|
|
1455
|
+
}) }),
|
|
1456
|
+
selected.size > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(CommandSeparator, {}), /* @__PURE__ */ jsx(CommandGroup, { children: /* @__PURE__ */ jsx(CommandItem, {
|
|
1457
|
+
className: "justify-center text-center",
|
|
1458
|
+
onSelect: () => col.setFilterValue(void 0),
|
|
1459
|
+
children: "Clear filters"
|
|
1460
|
+
}) })] })
|
|
1461
|
+
] })] })
|
|
1462
|
+
})] });
|
|
1409
1463
|
}
|
|
1410
1464
|
//#endregion
|
|
1411
1465
|
//#region src/components/ui/data-table/data-table-filter-menu.tsx
|
|
@@ -1416,14 +1470,14 @@ function DataTableFilterMenu() {
|
|
|
1416
1470
|
return /* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsx(DropdownMenuTrigger, {
|
|
1417
1471
|
asChild: true,
|
|
1418
1472
|
children: /* @__PURE__ */ jsxs(Button, {
|
|
1419
|
-
type: "button",
|
|
1420
|
-
variant: "ghost",
|
|
1421
|
-
size: "icon",
|
|
1422
1473
|
"aria-label": "Filter",
|
|
1423
1474
|
className: "relative",
|
|
1475
|
+
size: "icon",
|
|
1476
|
+
type: "button",
|
|
1477
|
+
variant: "ghost",
|
|
1424
1478
|
children: [/* @__PURE__ */ jsx(FilterIcon, { className: "size-4" }), activeCount > 0 ? /* @__PURE__ */ jsx("span", {
|
|
1425
|
-
"data-testid": "filter-count",
|
|
1426
1479
|
className: "absolute -top-1 -right-1 flex h-4 min-w-4 items-center justify-center rounded-full bg-foreground px-1 text-[10px] font-semibold text-background",
|
|
1480
|
+
"data-testid": "filter-count",
|
|
1427
1481
|
children: activeCount
|
|
1428
1482
|
}) : null]
|
|
1429
1483
|
})
|
|
@@ -1467,8 +1521,8 @@ function DataTableFilterMenu() {
|
|
|
1467
1521
|
})] }, filter.column);
|
|
1468
1522
|
}),
|
|
1469
1523
|
activeCount > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(DropdownMenuSeparator, {}), /* @__PURE__ */ jsx(DropdownMenuItem, {
|
|
1470
|
-
onSelect: () => table.resetColumnFilters(),
|
|
1471
1524
|
className: "text-muted-foreground",
|
|
1525
|
+
onSelect: () => table.resetColumnFilters(),
|
|
1472
1526
|
children: "Clear filters"
|
|
1473
1527
|
})] }) : null
|
|
1474
1528
|
]
|
|
@@ -1498,46 +1552,15 @@ function nextLayout(current) {
|
|
|
1498
1552
|
function DataTableLayoutToggle({ value, onChange }) {
|
|
1499
1553
|
const Icon = ICONS[value];
|
|
1500
1554
|
return /* @__PURE__ */ jsx(Button, {
|
|
1555
|
+
"aria-label": `${LABELS[value]} — tap to switch`,
|
|
1556
|
+
onClick: () => onChange(nextLayout(value)),
|
|
1557
|
+
size: "icon",
|
|
1501
1558
|
type: "button",
|
|
1502
1559
|
variant: "ghost",
|
|
1503
|
-
size: "icon",
|
|
1504
|
-
onClick: () => onChange(nextLayout(value)),
|
|
1505
|
-
"aria-label": `${LABELS[value]} — tap to switch`,
|
|
1506
1560
|
children: /* @__PURE__ */ jsx(Icon, { className: "size-4" })
|
|
1507
1561
|
});
|
|
1508
1562
|
}
|
|
1509
1563
|
//#endregion
|
|
1510
|
-
//#region src/components/ui/data-table/data-table-view-options.tsx
|
|
1511
|
-
function DataTableViewOptions() {
|
|
1512
|
-
const { table } = useDataTable();
|
|
1513
|
-
return /* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsx(DropdownMenuTrigger, {
|
|
1514
|
-
asChild: true,
|
|
1515
|
-
children: /* @__PURE__ */ jsx(Button, {
|
|
1516
|
-
type: "button",
|
|
1517
|
-
variant: "ghost",
|
|
1518
|
-
size: "icon",
|
|
1519
|
-
"aria-label": "Column visibility",
|
|
1520
|
-
children: /* @__PURE__ */ jsx(Settings2Icon, { className: "size-4" })
|
|
1521
|
-
})
|
|
1522
|
-
}), /* @__PURE__ */ jsxs(DropdownMenuContent, {
|
|
1523
|
-
align: "end",
|
|
1524
|
-
className: "w-[180px]",
|
|
1525
|
-
children: [
|
|
1526
|
-
/* @__PURE__ */ jsx(DropdownMenuLabel, {
|
|
1527
|
-
className: "text-muted-foreground text-[11px] uppercase tracking-wide",
|
|
1528
|
-
children: "Columns"
|
|
1529
|
-
}),
|
|
1530
|
-
/* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
|
|
1531
|
-
table.getAllColumns().filter((c) => c.getCanHide()).map((c) => /* @__PURE__ */ jsx(DropdownMenuCheckboxItem, {
|
|
1532
|
-
className: "capitalize",
|
|
1533
|
-
checked: c.getIsVisible(),
|
|
1534
|
-
onCheckedChange: (v) => c.toggleVisibility(!!v),
|
|
1535
|
-
children: c.id
|
|
1536
|
-
}, c.id))
|
|
1537
|
-
]
|
|
1538
|
-
})] });
|
|
1539
|
-
}
|
|
1540
|
-
//#endregion
|
|
1541
1564
|
//#region src/components/ui/data-table/data-table-pagination.tsx
|
|
1542
1565
|
function DataTablePagination({ pageSizes = [
|
|
1543
1566
|
10,
|
|
@@ -1565,8 +1588,8 @@ function DataTablePagination({ pageSizes = [
|
|
|
1565
1588
|
className: "text-sm font-medium",
|
|
1566
1589
|
children: "Rows per page"
|
|
1567
1590
|
}), /* @__PURE__ */ jsxs(Select, {
|
|
1568
|
-
value: `${table.getState().pagination.pageSize}`,
|
|
1569
1591
|
onValueChange: (value) => table.setPageSize(Number(value)),
|
|
1592
|
+
value: `${table.getState().pagination.pageSize}`,
|
|
1570
1593
|
children: [/* @__PURE__ */ jsx(SelectTrigger, {
|
|
1571
1594
|
className: "h-8 w-[70px]",
|
|
1572
1595
|
children: /* @__PURE__ */ jsx(SelectValue, { placeholder: table.getState().pagination.pageSize })
|
|
@@ -1592,35 +1615,35 @@ function DataTablePagination({ pageSizes = [
|
|
|
1592
1615
|
className: "flex items-center gap-1",
|
|
1593
1616
|
children: [
|
|
1594
1617
|
/* @__PURE__ */ jsx(Button, {
|
|
1595
|
-
variant: "outline",
|
|
1596
|
-
size: "icon",
|
|
1597
1618
|
className: "size-8",
|
|
1598
|
-
onClick: () => table.setPageIndex(0),
|
|
1599
1619
|
disabled: !table.getCanPreviousPage(),
|
|
1620
|
+
onClick: () => table.setPageIndex(0),
|
|
1621
|
+
size: "icon",
|
|
1622
|
+
variant: "outline",
|
|
1600
1623
|
children: /* @__PURE__ */ jsx(ChevronsLeftIcon, { className: "size-4" })
|
|
1601
1624
|
}),
|
|
1602
1625
|
/* @__PURE__ */ jsx(Button, {
|
|
1603
|
-
variant: "outline",
|
|
1604
|
-
size: "icon",
|
|
1605
1626
|
className: "size-8",
|
|
1606
|
-
onClick: () => table.previousPage(),
|
|
1607
1627
|
disabled: !table.getCanPreviousPage(),
|
|
1628
|
+
onClick: () => table.previousPage(),
|
|
1629
|
+
size: "icon",
|
|
1630
|
+
variant: "outline",
|
|
1608
1631
|
children: /* @__PURE__ */ jsx(ChevronLeftIcon, { className: "size-4" })
|
|
1609
1632
|
}),
|
|
1610
1633
|
/* @__PURE__ */ jsx(Button, {
|
|
1611
|
-
variant: "outline",
|
|
1612
|
-
size: "icon",
|
|
1613
1634
|
className: "size-8",
|
|
1614
|
-
onClick: () => table.nextPage(),
|
|
1615
1635
|
disabled: !table.getCanNextPage(),
|
|
1636
|
+
onClick: () => table.nextPage(),
|
|
1637
|
+
size: "icon",
|
|
1638
|
+
variant: "outline",
|
|
1616
1639
|
children: /* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-4" })
|
|
1617
1640
|
}),
|
|
1618
1641
|
/* @__PURE__ */ jsx(Button, {
|
|
1619
|
-
variant: "outline",
|
|
1620
|
-
size: "icon",
|
|
1621
1642
|
className: "size-8",
|
|
1622
|
-
onClick: () => table.setPageIndex(pageCount - 1),
|
|
1623
1643
|
disabled: !table.getCanNextPage(),
|
|
1644
|
+
onClick: () => table.setPageIndex(pageCount - 1),
|
|
1645
|
+
size: "icon",
|
|
1646
|
+
variant: "outline",
|
|
1624
1647
|
children: /* @__PURE__ */ jsx(ChevronsRightIcon, { className: "size-4" })
|
|
1625
1648
|
})
|
|
1626
1649
|
]
|
|
@@ -1630,94 +1653,18 @@ function DataTablePagination({ pageSizes = [
|
|
|
1630
1653
|
});
|
|
1631
1654
|
}
|
|
1632
1655
|
//#endregion
|
|
1633
|
-
//#region src/components/ui/data-table/data-table-
|
|
1634
|
-
function
|
|
1635
|
-
const { table
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
setConfirming(action);
|
|
1645
|
-
return;
|
|
1646
|
-
}
|
|
1647
|
-
if (await action.onRun(rows)) table.resetRowSelection();
|
|
1648
|
-
};
|
|
1649
|
-
const runConfirmed = async () => {
|
|
1650
|
-
if (!confirming) return;
|
|
1651
|
-
const action = confirming;
|
|
1652
|
-
const rows = selectedRows.map((r) => r.original);
|
|
1653
|
-
setConfirming(null);
|
|
1654
|
-
if (await action.onRun(rows)) table.resetRowSelection();
|
|
1655
|
-
};
|
|
1656
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
|
|
1657
|
-
className: "fixed inset-x-0 bottom-4 z-40 mx-auto flex w-fit max-w-[calc(100%-2rem)] items-center gap-2 rounded-xl border border-border bg-card px-3 py-2 shadow-lg",
|
|
1658
|
-
children: [
|
|
1659
|
-
/* @__PURE__ */ jsx(Button, {
|
|
1660
|
-
variant: "ghost",
|
|
1661
|
-
size: "icon",
|
|
1662
|
-
className: "size-7",
|
|
1663
|
-
onClick: () => table.resetRowSelection(),
|
|
1664
|
-
children: /* @__PURE__ */ jsx(XIcon, { className: "size-4" })
|
|
1665
|
-
}),
|
|
1666
|
-
/* @__PURE__ */ jsxs("span", {
|
|
1667
|
-
className: "text-sm font-medium",
|
|
1668
|
-
children: [selectedCount, " selected"]
|
|
1669
|
-
}),
|
|
1670
|
-
/* @__PURE__ */ jsx("div", {
|
|
1671
|
-
className: "ml-2 flex items-center gap-1",
|
|
1672
|
-
children: bulkActions.map((action) => /* @__PURE__ */ jsxs(Button, {
|
|
1673
|
-
variant: action.variant === "destructive" ? "destructive" : "outline",
|
|
1674
|
-
size: "sm",
|
|
1675
|
-
onClick: () => runAction(action),
|
|
1676
|
-
children: [action.icon && /* @__PURE__ */ jsx(action.icon, { className: "size-4" }), action.label]
|
|
1677
|
-
}, action.id))
|
|
1678
|
-
})
|
|
1679
|
-
]
|
|
1680
|
-
}), /* @__PURE__ */ jsx(AlertDialog, {
|
|
1681
|
-
open: confirming !== null,
|
|
1682
|
-
onOpenChange: (open) => !open && setConfirming(null),
|
|
1683
|
-
children: /* @__PURE__ */ jsxs(AlertDialogContent, { children: [/* @__PURE__ */ jsxs(AlertDialogHeader, { children: [/* @__PURE__ */ jsx(AlertDialogTitle, { children: confirming?.confirm?.title }), /* @__PURE__ */ jsx(AlertDialogDescription, { children: confirming?.confirm?.description })] }), /* @__PURE__ */ jsxs(AlertDialogFooter, { children: [/* @__PURE__ */ jsx(AlertDialogCancel, { children: "Cancel" }), /* @__PURE__ */ jsx(AlertDialogAction, {
|
|
1684
|
-
onClick: runConfirmed,
|
|
1685
|
-
children: "Continue"
|
|
1686
|
-
})] })] })
|
|
1687
|
-
})] });
|
|
1688
|
-
}
|
|
1689
|
-
//#endregion
|
|
1690
|
-
//#region src/components/ui/data-table/data-table-column-header.tsx
|
|
1691
|
-
function DataTableColumnHeader({ column, title, align = "left" }) {
|
|
1692
|
-
if (!column.getCanSort()) return /* @__PURE__ */ jsx("span", {
|
|
1693
|
-
className: align === "right" ? "block text-right text-sm font-medium" : "text-sm font-medium",
|
|
1694
|
-
children: title
|
|
1656
|
+
//#region src/components/ui/data-table/data-table-search.tsx
|
|
1657
|
+
function DataTableSearch({ placeholder = "Search…" }) {
|
|
1658
|
+
const { table } = useDataTable();
|
|
1659
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
1660
|
+
className: "relative flex-1 min-w-[180px] max-w-sm",
|
|
1661
|
+
children: [/* @__PURE__ */ jsx(SearchIcon, { className: "absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground" }), /* @__PURE__ */ jsx(Input, {
|
|
1662
|
+
className: "pl-9",
|
|
1663
|
+
onChange: (e) => table.setGlobalFilter(e.target.value),
|
|
1664
|
+
placeholder,
|
|
1665
|
+
value: table.getState().globalFilter ?? ""
|
|
1666
|
+
})]
|
|
1695
1667
|
});
|
|
1696
|
-
return /* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsx(DropdownMenuTrigger, {
|
|
1697
|
-
asChild: true,
|
|
1698
|
-
children: /* @__PURE__ */ jsxs(Button, {
|
|
1699
|
-
variant: "ghost",
|
|
1700
|
-
size: "sm",
|
|
1701
|
-
className: align === "right" ? "-mr-3 ml-auto flex h-8 data-[state=open]:bg-accent" : "-ml-3 h-8 data-[state=open]:bg-accent",
|
|
1702
|
-
children: [/* @__PURE__ */ jsx("span", { children: title }), column.getIsSorted() === "desc" ? /* @__PURE__ */ jsx(ArrowDownIcon, { className: "ml-2 size-4" }) : column.getIsSorted() === "asc" ? /* @__PURE__ */ jsx(ArrowUpIcon, { className: "ml-2 size-4" }) : /* @__PURE__ */ jsx(ChevronsUpDownIcon, { className: "ml-2 size-4" })]
|
|
1703
|
-
})
|
|
1704
|
-
}), /* @__PURE__ */ jsxs(DropdownMenuContent, {
|
|
1705
|
-
align: align === "right" ? "end" : "start",
|
|
1706
|
-
children: [
|
|
1707
|
-
/* @__PURE__ */ jsxs(DropdownMenuItem, {
|
|
1708
|
-
onClick: () => column.toggleSorting(false),
|
|
1709
|
-
children: [/* @__PURE__ */ jsx(ArrowUpIcon, { className: "size-4" }), " Asc"]
|
|
1710
|
-
}),
|
|
1711
|
-
/* @__PURE__ */ jsxs(DropdownMenuItem, {
|
|
1712
|
-
onClick: () => column.toggleSorting(true),
|
|
1713
|
-
children: [/* @__PURE__ */ jsx(ArrowDownIcon, { className: "size-4" }), " Desc"]
|
|
1714
|
-
}),
|
|
1715
|
-
column.getCanHide() && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(DropdownMenuSeparator, {}), /* @__PURE__ */ jsxs(DropdownMenuItem, {
|
|
1716
|
-
onClick: () => column.toggleVisibility(false),
|
|
1717
|
-
children: [/* @__PURE__ */ jsx(EyeOffIcon, { className: "size-4" }), " Hide"]
|
|
1718
|
-
})] })
|
|
1719
|
-
]
|
|
1720
|
-
})] });
|
|
1721
1668
|
}
|
|
1722
1669
|
//#endregion
|
|
1723
1670
|
//#region src/components/ui/data-table/data-table-select-column.tsx
|
|
@@ -1731,23 +1678,62 @@ function createSelectColumn() {
|
|
|
1731
1678
|
cellClassName: "pl-3 !pr-3 w-px"
|
|
1732
1679
|
},
|
|
1733
1680
|
header: ({ table }) => /* @__PURE__ */ jsx(Checkbox, {
|
|
1734
|
-
|
|
1681
|
+
"aria-label": "Select all",
|
|
1735
1682
|
checked: table.getIsAllPageRowsSelected() || table.getIsSomePageRowsSelected() && "indeterminate",
|
|
1736
|
-
|
|
1737
|
-
|
|
1683
|
+
className: HEADER_CHECKBOX_CLASS,
|
|
1684
|
+
onCheckedChange: (v) => table.toggleAllPageRowsSelected(!!v)
|
|
1738
1685
|
}),
|
|
1739
1686
|
cell: ({ row }) => /* @__PURE__ */ jsx(Checkbox, {
|
|
1740
|
-
|
|
1687
|
+
"aria-label": "Select row",
|
|
1741
1688
|
checked: row.getIsSelected(),
|
|
1689
|
+
className: ROW_CHECKBOX_CLASS,
|
|
1742
1690
|
onCheckedChange: (v) => row.toggleSelected(!!v),
|
|
1743
|
-
onClick: (e) => e.stopPropagation()
|
|
1744
|
-
"aria-label": "Select row"
|
|
1691
|
+
onClick: (e) => e.stopPropagation()
|
|
1745
1692
|
}),
|
|
1746
1693
|
enableSorting: false,
|
|
1747
1694
|
enableHiding: false
|
|
1748
1695
|
};
|
|
1749
1696
|
}
|
|
1750
1697
|
//#endregion
|
|
1698
|
+
//#region src/components/ui/data-table/data-table-toolbar.tsx
|
|
1699
|
+
function DataTableToolbar({ children }) {
|
|
1700
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1701
|
+
className: "flex flex-wrap items-center gap-2 pb-2",
|
|
1702
|
+
children
|
|
1703
|
+
});
|
|
1704
|
+
}
|
|
1705
|
+
//#endregion
|
|
1706
|
+
//#region src/components/ui/data-table/data-table-view-options.tsx
|
|
1707
|
+
function DataTableViewOptions() {
|
|
1708
|
+
const { table } = useDataTable();
|
|
1709
|
+
return /* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsx(DropdownMenuTrigger, {
|
|
1710
|
+
asChild: true,
|
|
1711
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
1712
|
+
"aria-label": "Column visibility",
|
|
1713
|
+
size: "icon",
|
|
1714
|
+
type: "button",
|
|
1715
|
+
variant: "ghost",
|
|
1716
|
+
children: /* @__PURE__ */ jsx(Settings2Icon, { className: "size-4" })
|
|
1717
|
+
})
|
|
1718
|
+
}), /* @__PURE__ */ jsxs(DropdownMenuContent, {
|
|
1719
|
+
align: "end",
|
|
1720
|
+
className: "w-[180px]",
|
|
1721
|
+
children: [
|
|
1722
|
+
/* @__PURE__ */ jsx(DropdownMenuLabel, {
|
|
1723
|
+
className: "text-muted-foreground text-[11px] uppercase tracking-wide",
|
|
1724
|
+
children: "Columns"
|
|
1725
|
+
}),
|
|
1726
|
+
/* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
|
|
1727
|
+
table.getAllColumns().filter((c) => c.getCanHide()).map((c) => /* @__PURE__ */ jsx(DropdownMenuCheckboxItem, {
|
|
1728
|
+
checked: c.getIsVisible(),
|
|
1729
|
+
className: "capitalize",
|
|
1730
|
+
onCheckedChange: (v) => c.toggleVisibility(!!v),
|
|
1731
|
+
children: c.id
|
|
1732
|
+
}, c.id))
|
|
1733
|
+
]
|
|
1734
|
+
})] });
|
|
1735
|
+
}
|
|
1736
|
+
//#endregion
|
|
1751
1737
|
//#region src/components/ui/data-table/use-data-table-url-state.ts
|
|
1752
1738
|
function readUrlState(prefix) {
|
|
1753
1739
|
if (typeof window === "undefined") return {};
|
|
@@ -2704,8 +2690,8 @@ function useSidebar() {
|
|
|
2704
2690
|
if (!context) throw new Error("useSidebar must be used within a SidebarProvider.");
|
|
2705
2691
|
return context;
|
|
2706
2692
|
}
|
|
2707
|
-
function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }) {
|
|
2708
|
-
const isMobile = useIsMobile();
|
|
2693
|
+
function SidebarProvider({ defaultOpen = true, mobileBreakpoint = 768, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }) {
|
|
2694
|
+
const isMobile = useIsMobile(mobileBreakpoint);
|
|
2709
2695
|
const [openMobile, setOpenMobile] = React.useState(false);
|
|
2710
2696
|
const [_open, _setOpen] = React.useState(defaultOpen);
|
|
2711
2697
|
const open = openProp ?? _open;
|
|
@@ -2763,7 +2749,7 @@ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: set
|
|
|
2763
2749
|
})
|
|
2764
2750
|
});
|
|
2765
2751
|
}
|
|
2766
|
-
function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas", className, children, ...props }) {
|
|
2752
|
+
function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas", mobileWidth = SIDEBAR_WIDTH_MOBILE, className, children, ...props }) {
|
|
2767
2753
|
const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
|
|
2768
2754
|
if (collapsible === "none") return /* @__PURE__ */ jsx("div", {
|
|
2769
2755
|
className: cn("bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col", className),
|
|
@@ -2776,12 +2762,12 @@ function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas"
|
|
|
2776
2762
|
open: openMobile,
|
|
2777
2763
|
...props,
|
|
2778
2764
|
children: /* @__PURE__ */ jsxs(SheetContent, {
|
|
2779
|
-
className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden",
|
|
2765
|
+
className: cn("bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden", mobileWidth !== SIDEBAR_WIDTH_MOBILE && "sm:max-w-none"),
|
|
2780
2766
|
"data-mobile": "true",
|
|
2781
2767
|
"data-sidebar": "sidebar",
|
|
2782
2768
|
"data-slot": "sidebar",
|
|
2783
2769
|
side,
|
|
2784
|
-
style: { "--sidebar-width":
|
|
2770
|
+
style: { "--sidebar-width": mobileWidth },
|
|
2785
2771
|
children: [/* @__PURE__ */ jsxs(SheetHeader, {
|
|
2786
2772
|
className: "sr-only",
|
|
2787
2773
|
children: [/* @__PURE__ */ jsx(SheetTitle, { children: "Sidebar" }), /* @__PURE__ */ jsx(SheetDescription, { children: "Displays the mobile sidebar." })]
|
|
@@ -2799,10 +2785,10 @@ function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas"
|
|
|
2799
2785
|
"data-state": state,
|
|
2800
2786
|
"data-variant": variant,
|
|
2801
2787
|
children: [/* @__PURE__ */ jsx("div", {
|
|
2802
|
-
className: cn("relative w-(--sidebar-width)
|
|
2788
|
+
className: cn("relative w-(--sidebar-width) transition-[width] duration-200 ease-in-out", "group-data-[collapsible=offcanvas]:w-0", "group-data-[side=right]:rotate-180", variant === "floating" ? "bg-transparent" : "bg-sidebar", variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)"),
|
|
2803
2789
|
"data-slot": "sidebar-gap"
|
|
2804
2790
|
}), /* @__PURE__ */ jsx("div", {
|
|
2805
|
-
className: cn("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-in-out md:flex bg-sidebar", side === "left" ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]" : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]", variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l", className),
|
|
2791
|
+
className: cn("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-in-out md:flex", variant === "floating" ? "bg-transparent" : "bg-sidebar", side === "left" ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]" : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]", variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l", className),
|
|
2806
2792
|
"data-slot": "sidebar-container",
|
|
2807
2793
|
...props,
|
|
2808
2794
|
children: /* @__PURE__ */ jsx("div", {
|
|
@@ -3083,16 +3069,6 @@ function Slider({ className, defaultValue, value, min = 0, max = 100, ...props }
|
|
|
3083
3069
|
});
|
|
3084
3070
|
}
|
|
3085
3071
|
//#endregion
|
|
3086
|
-
//#region src/components/ui/spinner/index.tsx
|
|
3087
|
-
function Spinner({ className, ...props }) {
|
|
3088
|
-
return /* @__PURE__ */ jsx(Loader2Icon, {
|
|
3089
|
-
"aria-label": "Loading",
|
|
3090
|
-
className: cn("size-4 animate-spin", className),
|
|
3091
|
-
role: "status",
|
|
3092
|
-
...props
|
|
3093
|
-
});
|
|
3094
|
-
}
|
|
3095
|
-
//#endregion
|
|
3096
3072
|
//#region src/components/ui/switch/index.tsx
|
|
3097
3073
|
function Switch({ className, ...props }) {
|
|
3098
3074
|
return /* @__PURE__ */ jsx(SwitchPrimitive.Root, {
|
|
@@ -3106,6 +3082,18 @@ function Switch({ className, ...props }) {
|
|
|
3106
3082
|
});
|
|
3107
3083
|
}
|
|
3108
3084
|
//#endregion
|
|
3085
|
+
//#region src/components/ui/tanstack-chart/index.tsx
|
|
3086
|
+
function chartColor(index) {
|
|
3087
|
+
return `var(--chart-${index % 5 + 1})`;
|
|
3088
|
+
}
|
|
3089
|
+
const tanstackChartTheme = {
|
|
3090
|
+
foreground: "var(--foreground)",
|
|
3091
|
+
muted: "var(--muted-foreground)",
|
|
3092
|
+
grid: "var(--border)",
|
|
3093
|
+
background: "var(--card)",
|
|
3094
|
+
palette: Array.from({ length: 5 }, (_, index) => chartColor(index))
|
|
3095
|
+
};
|
|
3096
|
+
//#endregion
|
|
3109
3097
|
//#region src/components/ui/toggle-group/index.tsx
|
|
3110
3098
|
const ToggleGroupContext = React.createContext({
|
|
3111
3099
|
size: "default",
|
|
@@ -3246,4 +3234,4 @@ function UserLevel({ value, variant = "inline", className }) {
|
|
|
3246
3234
|
});
|
|
3247
3235
|
}
|
|
3248
3236
|
//#endregion
|
|
3249
|
-
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, BasicField, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, ColorPicker, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Container, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DataTable, DataTableBulkBar, DataTableColumnHeader, DataTableContent, DataTableContext, DataTableFilter, DataTableFilterMenu, DataTableLayoutToggle, DataTablePagination, DataTableSearch, DataTableToolbar, DataTableViewOptions, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, IconPicker, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label, LoadingScreen, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, PICKER_ICON_NAMES, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PhoneInput, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Spinner, Switch, THEME_COLORS, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, User, UserAvatar, UserAvatarFallback, UserAvatarImage, UserInfo, UserLevel, UserMeta, UserName, Widget, badgeVariants, buttonGroupVariants, buttonVariants, cn, coerceThemeColor, colorPalette, createSelectColumn, formatPhoneInput, getContrastForeground, getIconCategories, getStaticIcon, navigationMenuTriggerStyle, normalizePhoneInput, phoneSchema, resolveColorHex, toggleVariants, useComboboxAnchor, useDataTable, useDataTableUrlState, useFormField, useIsMobile, useSidebar, validate };
|
|
3237
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActionMenuButton, ActionMenuItem, ActionMenuSeparator, ActionMenuSub, ActionMenuSubContent, ActionMenuSubTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, BasicField, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, ColorPicker, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxField, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Container, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DataTable, DataTableBulkBar, DataTableColumnHeader, DataTableContent, DataTableContext, DataTableFilter, DataTableFilterMenu, DataTableLayoutToggle, DataTablePagination, DataTableSearch, DataTableToolbar, DataTableViewOptions, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Dropzone, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, IconPicker, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label, LoadingScreen, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, PICKER_ICON_NAMES, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PhoneInput, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Spinner, Switch, THEME_COLORS, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TanStackChart, Textarea, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, User, UserAvatar, UserAvatarFallback, UserAvatarImage, UserInfo, UserLevel, UserMeta, UserName, VirtualGrid, Widget, badgeVariants, buttonGroupVariants, buttonVariants, chartColor, cn, coerceThemeColor, colorPalette, createSelectColumn, formatPhoneInput, getContrastForeground, getIconCategories, getStaticIcon, navigationMenuTriggerStyle, normalizePhoneInput, phoneSchema, resolveColorHex, tanstackChartTheme, toggleVariants, useComboboxAnchor, useDataTable, useDataTableUrlState, useFormField, useIsMobile, useSidebar, useWindowScrollMargin, validate };
|