adminium 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2,19 +2,28 @@
2
2
  import { clsx } from 'clsx';
3
3
  import { twMerge } from 'tailwind-merge';
4
4
  import { cva } from 'class-variance-authority';
5
- import { Loader2Icon, ChevronDown, X, Check, Minus, ChevronRight, Circle, ChevronUp, ChevronLeftIcon, ChevronRightIcon, MoreHorizontal, ArrowDown, ArrowUp, ChevronsUpDown, ArrowLeftToLine, ArrowRightToLine, ArrowLeft, ArrowRight, Settings2, PinOff } from 'lucide-react';
5
+ import { Loader2Icon, ChevronDown, X, Search, Check, Minus, ChevronRight, Circle, ChevronUp, ChevronLeftIcon, ChevronRightIcon, Plus, MoreHorizontal, ChevronLeft, MinusIcon, ChevronDownIcon, Copy, ArrowDown, ArrowUp, ChevronsUpDown, ArrowLeftToLine, ArrowRightToLine, ArrowLeft, ArrowRight, Settings2, PinOff } from 'lucide-react';
6
6
  import * as SlotPrimitive2 from '@radix-ui/react-slot';
7
+ import { Slot } from '@radix-ui/react-slot';
7
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
- import { AlertDialog as AlertDialog$1, Dialog as Dialog$1, Popover as Popover$1, Avatar as Avatar$1, Select as Select$1, Slot, Tabs as Tabs$1, Label, Switch as Switch$1, ScrollArea as ScrollArea$1, AspectRatio as AspectRatio$1 } from 'radix-ui';
9
+ import { AlertDialog as AlertDialog$1, Dialog as Dialog$1, Popover as Popover$1, Avatar as Avatar$1, Select as Select$1, Accordion as Accordion$1, Slot as Slot$1, Collapsible as Collapsible$1, Tabs as Tabs$1, ContextMenu as ContextMenu$1, Label, RadioGroup, Slider as Slider$1, Switch as Switch$1, ScrollArea as ScrollArea$1, AspectRatio as AspectRatio$1, Progress as Progress$1, NavigationMenu as NavigationMenu$1 } from 'radix-ui';
9
10
  import { Drawer as Drawer$1 } from 'vaul';
10
11
  import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
11
- import * as React from 'react';
12
+ import { Command as Command$1 } from 'cmdk';
13
+ import * as React4 from 'react';
12
14
  import { createContext, useContext, Fragment as Fragment$1, isValidElement, useMemo, useRef, useCallback, useEffect } from 'react';
13
15
  import { useMotionValue, useSpring, useTransform, AnimatePresence, motion } from 'motion/react';
16
+ import * as RechartsPrimitive from 'recharts';
14
17
  import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
15
18
  import { flexRender } from '@tanstack/react-table';
16
19
  import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
20
+ import { defaultDropAnimationSideEffects, defaultDropAnimation, useSensors, useSensor, PointerSensor, KeyboardSensor, DndContext, DragOverlay } from '@dnd-kit/core';
21
+ import { sortableKeyboardCoordinates, arrayMove, SortableContext, rectSortingStrategy, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';
22
+ import { CSS as CSS$1 } from '@dnd-kit/utilities';
23
+ import { DayPicker } from 'react-day-picker';
24
+ import { DateField as DateField$1, composeRenderProps, TimeField as TimeField$1, DateSegment as DateSegment$1, DateInput as DateInput$1 } from 'react-aria-components';
17
25
  import * as SeparatorPrimitive from '@radix-ui/react-separator';
26
+ import { OTPInput, OTPInputContext } from 'input-otp';
18
27
 
19
28
  // src/lib/utils.ts
20
29
  function cn(...inputs) {
@@ -1197,6 +1206,156 @@ function SheetDescription({ className, ...props }) {
1197
1206
  }
1198
1207
  );
1199
1208
  }
1209
+ function Command({
1210
+ className,
1211
+ ...props
1212
+ }) {
1213
+ return /* @__PURE__ */ jsx(
1214
+ Command$1,
1215
+ {
1216
+ "data-slot": "command",
1217
+ className: cn(
1218
+ "flex size-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
1219
+ className
1220
+ ),
1221
+ ...props
1222
+ }
1223
+ );
1224
+ }
1225
+ function CommandDialog({ children, className, ...props }) {
1226
+ return /* @__PURE__ */ jsx(Dialog, { ...props, children: /* @__PURE__ */ jsxs(DialogContent, { className: cn("overflow-hidden p-0 shadow-lg", className), children: [
1227
+ /* @__PURE__ */ jsx(DialogTitle, { className: "hidden" }),
1228
+ /* @__PURE__ */ jsx(Command, { className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:size-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:size-5", children })
1229
+ ] }) });
1230
+ }
1231
+ function CommandInput({
1232
+ className,
1233
+ ...props
1234
+ }) {
1235
+ return /* @__PURE__ */ jsxs(
1236
+ "div",
1237
+ {
1238
+ className: "flex items-center border-b border-border px-3",
1239
+ "cmdk-input-wrapper": "",
1240
+ "data-slot": "command-input-wrapper",
1241
+ children: [
1242
+ /* @__PURE__ */ jsx(Search, { className: "me-2 size-4 shrink-0 opacity-50" }),
1243
+ /* @__PURE__ */ jsx(
1244
+ Command$1.Input,
1245
+ {
1246
+ "data-slot": "command-input",
1247
+ className: cn(
1248
+ "flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-hidden text-foreground placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
1249
+ className
1250
+ ),
1251
+ ...props
1252
+ }
1253
+ )
1254
+ ]
1255
+ }
1256
+ );
1257
+ }
1258
+ function CommandList({
1259
+ className,
1260
+ ...props
1261
+ }) {
1262
+ return /* @__PURE__ */ jsx(
1263
+ Command$1.List,
1264
+ {
1265
+ "data-slot": "command-list",
1266
+ className: cn("max-h-75 overflow-y-auto overflow-x-hidden", className),
1267
+ ...props
1268
+ }
1269
+ );
1270
+ }
1271
+ function CommandEmpty({
1272
+ ...props
1273
+ }) {
1274
+ return /* @__PURE__ */ jsx(
1275
+ Command$1.Empty,
1276
+ {
1277
+ "data-slot": "command-empty",
1278
+ className: "py-6 text-center text-sm",
1279
+ ...props
1280
+ }
1281
+ );
1282
+ }
1283
+ function CommandGroup({
1284
+ className,
1285
+ ...props
1286
+ }) {
1287
+ return /* @__PURE__ */ jsx(
1288
+ Command$1.Group,
1289
+ {
1290
+ "data-slot": "command-group",
1291
+ className: cn(
1292
+ "overflow-hidden p-1.5 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
1293
+ className
1294
+ ),
1295
+ ...props
1296
+ }
1297
+ );
1298
+ }
1299
+ function CommandSeparator({
1300
+ className,
1301
+ ...props
1302
+ }) {
1303
+ return /* @__PURE__ */ jsx(
1304
+ Command$1.Separator,
1305
+ {
1306
+ "data-slot": "command-separator",
1307
+ className: cn("-mx-1.5 h-px bg-border", className),
1308
+ ...props
1309
+ }
1310
+ );
1311
+ }
1312
+ function CommandItem({
1313
+ className,
1314
+ ...props
1315
+ }) {
1316
+ return /* @__PURE__ */ jsx(
1317
+ Command$1.Item,
1318
+ {
1319
+ "data-slot": "command-item",
1320
+ className: cn(
1321
+ "relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm text-foreground outline-hidden data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1322
+ className
1323
+ ),
1324
+ ...props
1325
+ }
1326
+ );
1327
+ }
1328
+ function CommandShortcut({
1329
+ className,
1330
+ ...props
1331
+ }) {
1332
+ return /* @__PURE__ */ jsx(
1333
+ "span",
1334
+ {
1335
+ "data-slot": "command-shortcut",
1336
+ className: cn(
1337
+ "ms-auto text-xs tracking-widest text-muted-foreground",
1338
+ className
1339
+ ),
1340
+ ...props
1341
+ }
1342
+ );
1343
+ }
1344
+ function CommandCheck({
1345
+ icon: Icon = Check,
1346
+ className,
1347
+ ...props
1348
+ }) {
1349
+ return /* @__PURE__ */ jsx(
1350
+ Icon,
1351
+ {
1352
+ "data-slot": "command-check",
1353
+ "data-check": "true",
1354
+ className: cn("ms-auto size-4 text-primary", className),
1355
+ ...props
1356
+ }
1357
+ );
1358
+ }
1200
1359
  var avatarStatusVariants = cva(
1201
1360
  "flex items-center rounded-full size-2 border-2 border-background",
1202
1361
  {
@@ -1285,11 +1444,11 @@ function AvatarStatus({
1285
1444
  }
1286
1445
  );
1287
1446
  }
1288
- var AvatarGroupContext = React.createContext(
1447
+ var AvatarGroupContext = React4.createContext(
1289
1448
  null
1290
1449
  );
1291
1450
  var StaggeredContent = ({ content }) => {
1292
- const children = React.Children.toArray(content);
1451
+ const children = React4.Children.toArray(content);
1293
1452
  return /* @__PURE__ */ jsx(
1294
1453
  motion.div,
1295
1454
  {
@@ -1332,7 +1491,14 @@ function AvatarGroup({
1332
1491
  tooltipClassName,
1333
1492
  animation
1334
1493
  };
1335
- return /* @__PURE__ */ jsx(AvatarGroupContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx("div", { className: cn("flex -space-x-2.5", className), children }) });
1494
+ return /* @__PURE__ */ jsx(AvatarGroupContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
1495
+ "div",
1496
+ {
1497
+ "data-slot": "avatar-group",
1498
+ className: cn("flex -space-x-2.5", className),
1499
+ children
1500
+ }
1501
+ ) });
1336
1502
  }
1337
1503
  function AvatarGroupItem({
1338
1504
  children,
@@ -1340,8 +1506,8 @@ function AvatarGroupItem({
1340
1506
  tooltipClassName,
1341
1507
  animation: itemAnimation
1342
1508
  }) {
1343
- const context = React.useContext(AvatarGroupContext);
1344
- const [hoveredIndex, setHoveredIndex] = React.useState(false);
1509
+ const context = React4.useContext(AvatarGroupContext);
1510
+ const [hoveredIndex, setHoveredIndex] = React4.useState(false);
1345
1511
  const springConfig = { stiffness: 100, damping: 5 };
1346
1512
  const x = useMotionValue(0);
1347
1513
  const animation = itemAnimation || context?.animation || "default";
@@ -1354,13 +1520,13 @@ function AvatarGroupItem({
1354
1520
  useTransform(x, [-100, 100], [-50, 50]),
1355
1521
  springConfig
1356
1522
  );
1357
- const tooltipChild = React.Children.toArray(children).find(
1358
- (child) => React.isValidElement(child) && child.type === AvatarGroupTooltip
1523
+ const tooltipChild = React4.Children.toArray(children).find(
1524
+ (child) => React4.isValidElement(child) && child.type === AvatarGroupTooltip
1359
1525
  );
1360
- const otherChildren = React.Children.toArray(children).filter(
1361
- (child) => !(React.isValidElement(child) && child.type === AvatarGroupTooltip)
1526
+ const otherChildren = React4.Children.toArray(children).filter(
1527
+ (child) => !(React4.isValidElement(child) && child.type === AvatarGroupTooltip)
1362
1528
  );
1363
- const tooltipContent = tooltipChild && React.isValidElement(tooltipChild) ? tooltipChild.props.children : null;
1529
+ const tooltipContent = tooltipChild && React4.isValidElement(tooltipChild) ? tooltipChild.props.children : null;
1364
1530
  const handleMouseMove = (event) => {
1365
1531
  const halfWidth = event.target.offsetWidth / 2;
1366
1532
  x.set(event.nativeEvent.offsetX - halfWidth);
@@ -1506,6 +1672,248 @@ function AvatarGroupTooltip({
1506
1672
  }
1507
1673
  );
1508
1674
  }
1675
+ var THEMES = { light: "", dark: ".dark" };
1676
+ var ChartContext = React4.createContext(null);
1677
+ var chartContainerClasses = [
1678
+ "[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground",
1679
+ "[&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50",
1680
+ "[&_.recharts-curve.recharts-tooltip-cursor]:stroke-border",
1681
+ "[&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border",
1682
+ "[&_.recharts-radial-bar-background-sector]:fill-muted",
1683
+ "[&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted",
1684
+ "[&_.recharts-reference-line_[stroke='#ccc']]:stroke-border",
1685
+ "flex aspect-video justify-center text-xs",
1686
+ "[&_.recharts-dot[stroke='#fff']]:stroke-transparent",
1687
+ "[&_.recharts-layer]:outline-hidden",
1688
+ "[&_.recharts-sector]:outline-hidden",
1689
+ "[&_.recharts-sector[stroke='#fff']]:stroke-transparent",
1690
+ "[&_.recharts-surface]:outline-hidden"
1691
+ ].join(" ");
1692
+ function useChart() {
1693
+ const context = React4.useContext(ChartContext);
1694
+ if (!context) {
1695
+ throw new Error("useChart must be used within a <ChartContainer />");
1696
+ }
1697
+ return context;
1698
+ }
1699
+ function ChartContainer({
1700
+ id,
1701
+ className,
1702
+ children,
1703
+ config,
1704
+ ...props
1705
+ }) {
1706
+ const uniqueId = React4.useId();
1707
+ const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
1708
+ return /* @__PURE__ */ jsx(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs(
1709
+ "div",
1710
+ {
1711
+ "data-slot": "chart",
1712
+ "data-chart": chartId,
1713
+ className: cn(chartContainerClasses, className),
1714
+ ...props,
1715
+ children: [
1716
+ /* @__PURE__ */ jsx(ChartStyle, { id: chartId, config }),
1717
+ /* @__PURE__ */ jsx(RechartsPrimitive.ResponsiveContainer, { children })
1718
+ ]
1719
+ }
1720
+ ) });
1721
+ }
1722
+ function ChartStyle({ id, config }) {
1723
+ const colorConfig = Object.entries(config).filter(
1724
+ ([, itemConfig]) => itemConfig.theme || itemConfig.color
1725
+ );
1726
+ if (!colorConfig.length) {
1727
+ return null;
1728
+ }
1729
+ return /* @__PURE__ */ jsx(
1730
+ "style",
1731
+ {
1732
+ dangerouslySetInnerHTML: {
1733
+ __html: Object.entries(THEMES).map(
1734
+ ([theme, prefix]) => `
1735
+ ${prefix} [data-chart=${id}] {
1736
+ ${colorConfig.map(([key, itemConfig]) => {
1737
+ const color = itemConfig.theme?.[theme] || itemConfig.color;
1738
+ return color ? ` --color-${key}: ${color};` : null;
1739
+ }).join("\n")}
1740
+ }
1741
+ `
1742
+ ).join("\n")
1743
+ }
1744
+ }
1745
+ );
1746
+ }
1747
+ var ChartTooltip = RechartsPrimitive.Tooltip;
1748
+ function ChartTooltipContent({
1749
+ active,
1750
+ payload,
1751
+ className,
1752
+ indicator = "dot",
1753
+ hideLabel = false,
1754
+ hideIndicator = false,
1755
+ label,
1756
+ labelFormatter,
1757
+ labelClassName,
1758
+ formatter,
1759
+ color,
1760
+ nameKey,
1761
+ labelKey
1762
+ }) {
1763
+ const { config } = useChart();
1764
+ const tooltipLabel = React4.useMemo(() => {
1765
+ if (hideLabel || !payload?.length) {
1766
+ return null;
1767
+ }
1768
+ const [item] = payload;
1769
+ const key = `${labelKey || item?.dataKey || item?.name || "value"}`;
1770
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
1771
+ const value = !labelKey && typeof label === "string" ? config[label]?.label || label : itemConfig?.label;
1772
+ if (labelFormatter) {
1773
+ return /* @__PURE__ */ jsx("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
1774
+ }
1775
+ if (!value) {
1776
+ return null;
1777
+ }
1778
+ return /* @__PURE__ */ jsx("div", { className: cn("font-medium", labelClassName), children: value });
1779
+ }, [
1780
+ label,
1781
+ labelFormatter,
1782
+ payload,
1783
+ hideLabel,
1784
+ labelClassName,
1785
+ config,
1786
+ labelKey
1787
+ ]);
1788
+ if (!active || !payload?.length) {
1789
+ return null;
1790
+ }
1791
+ const nestLabel = payload.length === 1 && indicator !== "dot";
1792
+ return /* @__PURE__ */ jsxs(
1793
+ "div",
1794
+ {
1795
+ className: cn(
1796
+ "border-border/50 bg-background grid min-w-32 items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl",
1797
+ className
1798
+ ),
1799
+ children: [
1800
+ !nestLabel ? tooltipLabel : null,
1801
+ /* @__PURE__ */ jsx("div", { className: "grid gap-1.5", children: payload.map((item, index) => {
1802
+ const key = `${nameKey || item.name || item.dataKey || "value"}`;
1803
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
1804
+ const indicatorColor = color || item.payload.fill || item.color;
1805
+ return /* @__PURE__ */ jsx(
1806
+ "div",
1807
+ {
1808
+ className: cn(
1809
+ "[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5",
1810
+ indicator === "dot" && "items-center"
1811
+ ),
1812
+ children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxs(Fragment, { children: [
1813
+ itemConfig?.icon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx(
1814
+ "div",
1815
+ {
1816
+ className: cn(
1817
+ "shrink-0 rounded-sm border-(--color-border) bg-(--color-bg)",
1818
+ {
1819
+ "size-2.5": indicator === "dot",
1820
+ "w-1": indicator === "line",
1821
+ "w-0 border-2 border-dashed bg-transparent": indicator === "dashed",
1822
+ "my-0.5": nestLabel && indicator === "dashed"
1823
+ }
1824
+ ),
1825
+ style: {
1826
+ "--color-bg": indicatorColor,
1827
+ "--color-border": indicatorColor
1828
+ }
1829
+ }
1830
+ ),
1831
+ /* @__PURE__ */ jsxs(
1832
+ "div",
1833
+ {
1834
+ className: cn(
1835
+ "flex flex-1 justify-between leading-none",
1836
+ nestLabel ? "items-end" : "items-center"
1837
+ ),
1838
+ children: [
1839
+ /* @__PURE__ */ jsxs("div", { className: "grid gap-1.5", children: [
1840
+ nestLabel ? tooltipLabel : null,
1841
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: itemConfig?.label || item.name })
1842
+ ] }),
1843
+ item.value != null && /* @__PURE__ */ jsx("span", { className: "text-foreground font-mono font-medium tabular-nums", children: item.value.toLocaleString() })
1844
+ ]
1845
+ }
1846
+ )
1847
+ ] })
1848
+ },
1849
+ item.dataKey
1850
+ );
1851
+ }) })
1852
+ ]
1853
+ }
1854
+ );
1855
+ }
1856
+ var ChartLegend = RechartsPrimitive.Legend;
1857
+ function ChartLegendContent({
1858
+ className,
1859
+ hideIcon = false,
1860
+ payload,
1861
+ verticalAlign = "bottom",
1862
+ nameKey
1863
+ }) {
1864
+ const { config } = useChart();
1865
+ if (!payload?.length) {
1866
+ return null;
1867
+ }
1868
+ return /* @__PURE__ */ jsx(
1869
+ "div",
1870
+ {
1871
+ className: cn(
1872
+ "flex items-center justify-center gap-4",
1873
+ verticalAlign === "top" ? "pb-3" : "pt-3",
1874
+ className
1875
+ ),
1876
+ children: payload.map((item) => {
1877
+ const key = `${nameKey || item.dataKey || "value"}`;
1878
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
1879
+ return /* @__PURE__ */ jsxs(
1880
+ "div",
1881
+ {
1882
+ className: cn(
1883
+ "[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:size-3"
1884
+ ),
1885
+ children: [
1886
+ itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : /* @__PURE__ */ jsx(
1887
+ "div",
1888
+ {
1889
+ className: "size-2 shrink-0 rounded-sm",
1890
+ style: {
1891
+ backgroundColor: item.color
1892
+ }
1893
+ }
1894
+ ),
1895
+ itemConfig?.label
1896
+ ]
1897
+ },
1898
+ item.value
1899
+ );
1900
+ })
1901
+ }
1902
+ );
1903
+ }
1904
+ function getPayloadConfigFromPayload(config, payload, key) {
1905
+ if (typeof payload !== "object" || payload === null) {
1906
+ return void 0;
1907
+ }
1908
+ const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
1909
+ let configLabelKey = key;
1910
+ if (key in payload && typeof payload[key] === "string") {
1911
+ configLabelKey = payload[key];
1912
+ } else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
1913
+ configLabelKey = payloadPayload[key];
1914
+ }
1915
+ return configLabelKey in config ? config[configLabelKey] : config[key];
1916
+ }
1509
1917
  var DataGridContext = createContext(void 0);
1510
1918
  function useDataGrid() {
1511
1919
  const context = useContext(DataGridContext);
@@ -2494,7 +2902,7 @@ function DataGridColumnHeader({
2494
2902
  }
2495
2903
  return headerLabel();
2496
2904
  }
2497
- var SelectContext = React.createContext({ indicatorPosition: "left", indicator: null, indicatorVisibility: true });
2905
+ var SelectContext = React4.createContext({ indicatorPosition: "left", indicator: null, indicatorVisibility: true });
2498
2906
  var Select = ({
2499
2907
  indicatorPosition = "left",
2500
2908
  indicatorVisibility = true,
@@ -2648,7 +3056,7 @@ function SelectItem({
2648
3056
  children,
2649
3057
  ...props
2650
3058
  }) {
2651
- const { indicatorPosition, indicatorVisibility, indicator } = React.useContext(SelectContext);
3059
+ const { indicatorPosition, indicatorVisibility, indicator } = React4.useContext(SelectContext);
2652
3060
  return /* @__PURE__ */ jsxs(
2653
3061
  Select$1.Item,
2654
3062
  {
@@ -2680,7 +3088,7 @@ function SelectIndicator({
2680
3088
  className,
2681
3089
  ...props
2682
3090
  }) {
2683
- const { indicatorPosition } = React.useContext(SelectContext);
3091
+ const { indicatorPosition } = React4.useContext(SelectContext);
2684
3092
  return /* @__PURE__ */ jsx(
2685
3093
  "span",
2686
3094
  {
@@ -2904,61 +3312,492 @@ function DataGridColumnVisibility({
2904
3312
  ] })
2905
3313
  ] });
2906
3314
  }
2907
- var badgeVariants = cva(
2908
- "inline-flex items-center justify-center border border-transparent font-medium focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 [&_svg]:-ms-px [&_svg]:shrink-0",
2909
- {
2910
- variants: {
2911
- variant: {
2912
- primary: "bg-primary text-primary-foreground",
2913
- secondary: "bg-secondary text-secondary-foreground",
2914
- success: "bg-[var(--color-success-accent,var(--color-green-500))] text-[var(--color-success-foreground,var(--color-white))]",
2915
- warning: "bg-[var(--color-warning-accent,var(--color-yellow-500))] text-[var(--color-warning-foreground,var(--color-white))]",
2916
- info: "bg-[var(--color-info-accent,var(--color-violet-500))] text-[var(--color-info-foreground,var(--color-white))]",
2917
- outline: "bg-transparent border border-border text-secondary-foreground",
2918
- destructive: "bg-destructive text-destructive-foreground"
2919
- },
2920
- appearance: {
2921
- default: "",
2922
- light: "",
2923
- outline: "",
2924
- ghost: "border-transparent bg-transparent"
2925
- },
2926
- disabled: {
2927
- true: "opacity-50 pointer-events-none"
2928
- },
2929
- size: {
2930
- lg: "rounded-md px-[0.5rem] h-7 min-w-7 gap-1.5 text-xs [&_svg]:size-3.5",
2931
- md: "rounded-md px-[0.45rem] h-6 min-w-6 gap-1.5 text-xs [&_svg]:size-3.5 ",
2932
- sm: "rounded-sm px-[0.325rem] h-5 min-w-5 gap-1 text-[0.6875rem] leading-[0.75rem] [&_svg]:size-3",
2933
- xs: "rounded-sm px-[0.25rem] h-4 min-w-4 gap-1 text-[0.625rem] leading-[0.5rem] [&_svg]:size-3"
2934
- },
2935
- shape: {
2936
- default: "",
2937
- circle: "rounded-full"
3315
+ var KanbanContext = React4.createContext({
3316
+ columns: {},
3317
+ setColumns: () => {
3318
+ },
3319
+ getItemId: () => "",
3320
+ columnIds: [],
3321
+ activeId: null,
3322
+ setActiveId: () => {
3323
+ },
3324
+ findContainer: () => void 0,
3325
+ isColumn: () => false
3326
+ });
3327
+ var ColumnContext = React4.createContext({
3328
+ attributes: {},
3329
+ listeners: void 0,
3330
+ isDragging: false,
3331
+ disabled: false
3332
+ });
3333
+ var ItemContext = React4.createContext({
3334
+ listeners: void 0,
3335
+ isDragging: false,
3336
+ disabled: false
3337
+ });
3338
+ var dropAnimationConfig = {
3339
+ ...defaultDropAnimation,
3340
+ sideEffects: defaultDropAnimationSideEffects({
3341
+ styles: {
3342
+ active: {
3343
+ opacity: "0.4"
3344
+ }
3345
+ }
3346
+ })
3347
+ };
3348
+ function Kanban({
3349
+ value,
3350
+ onValueChange,
3351
+ getItemValue,
3352
+ children,
3353
+ className,
3354
+ onMove
3355
+ }) {
3356
+ const columns = value;
3357
+ const setColumns = onValueChange;
3358
+ const [activeId, setActiveId] = React4.useState(null);
3359
+ const sensors = useSensors(
3360
+ useSensor(PointerSensor, {
3361
+ activationConstraint: {
3362
+ distance: 10
2938
3363
  }
3364
+ }),
3365
+ useSensor(KeyboardSensor, {
3366
+ coordinateGetter: sortableKeyboardCoordinates
3367
+ })
3368
+ );
3369
+ const columnIds = React4.useMemo(() => Object.keys(columns), [columns]);
3370
+ const isColumn = React4.useCallback(
3371
+ (id) => columnIds.includes(id),
3372
+ [columnIds]
3373
+ );
3374
+ const findContainer = React4.useCallback(
3375
+ (id) => {
3376
+ if (isColumn(id)) return id;
3377
+ return columnIds.find(
3378
+ (key) => columns[key].some((item) => getItemValue(item) === id)
3379
+ );
2939
3380
  },
2940
- compoundVariants: [
2941
- /* Light */
2942
- {
2943
- variant: "primary",
2944
- appearance: "light",
2945
- className: "text-[var(--color-primary-accent,var(--color-blue-700))] bg-[var(--color-primary-soft,var(--color-blue-50))] dark:bg-[var(--color-primary-soft,var(--color-blue-950))] dark:text-[var(--color-primary-soft,var(--color-blue-600))]"
2946
- },
2947
- {
2948
- variant: "secondary",
2949
- appearance: "light",
2950
- className: "bg-secondary dark:bg-secondary/50 text-secondary-foreground"
2951
- },
2952
- {
2953
- variant: "success",
2954
- appearance: "light",
2955
- className: "text-[var(--color-success-accent,var(--color-green-800))] bg-[var(--color-success-soft,var(--color-green-100))] dark:bg-[var(--color-success-soft,var(--color-green-950))] dark:text-[var(--color-success-soft,var(--color-green-600))]"
2956
- },
2957
- {
2958
- variant: "warning",
2959
- appearance: "light",
2960
- className: "text-[var(--color-warning-accent,var(--color-yellow-700))] bg-[var(--color-warning-soft,var(--color-yellow-100))] dark:bg-[var(--color-warning-soft,var(--color-yellow-950))] dark:text-[var(--color-warning-soft,var(--color-yellow-600))]"
2961
- },
3381
+ [columns, columnIds, getItemValue, isColumn]
3382
+ );
3383
+ const handleDragStart = React4.useCallback((event) => {
3384
+ setActiveId(event.active.id);
3385
+ }, []);
3386
+ const handleDragOver = React4.useCallback(
3387
+ (event) => {
3388
+ if (onMove) {
3389
+ return;
3390
+ }
3391
+ const { active, over } = event;
3392
+ if (!over) return;
3393
+ if (isColumn(active.id)) return;
3394
+ const activeContainer = findContainer(active.id);
3395
+ const overContainer = findContainer(over.id);
3396
+ if (!activeContainer || !overContainer || activeContainer === overContainer) {
3397
+ return;
3398
+ }
3399
+ const activeItems = [...columns[activeContainer]];
3400
+ const overItems = [...columns[overContainer]];
3401
+ const activeIndex = activeItems.findIndex(
3402
+ (item) => getItemValue(item) === active.id
3403
+ );
3404
+ const overIndex = isColumn(over.id) ? overItems.length : overItems.findIndex((item) => getItemValue(item) === over.id);
3405
+ const [movedItem] = activeItems.splice(activeIndex, 1);
3406
+ overItems.splice(overIndex, 0, movedItem);
3407
+ setColumns({
3408
+ ...columns,
3409
+ [activeContainer]: activeItems,
3410
+ [overContainer]: overItems
3411
+ });
3412
+ },
3413
+ [findContainer, getItemValue, isColumn, setColumns, columns, onMove]
3414
+ );
3415
+ const handleDragEnd = React4.useCallback(
3416
+ (event) => {
3417
+ const { active, over } = event;
3418
+ setActiveId(null);
3419
+ if (!over) return;
3420
+ if (onMove && !isColumn(active.id)) {
3421
+ const activeContainer2 = findContainer(active.id);
3422
+ const overContainer2 = findContainer(over.id);
3423
+ if (activeContainer2 && overContainer2) {
3424
+ const activeIndex = columns[activeContainer2].findIndex(
3425
+ (item) => getItemValue(item) === active.id
3426
+ );
3427
+ const overIndex = isColumn(over.id) ? columns[overContainer2].length : columns[overContainer2].findIndex(
3428
+ (item) => getItemValue(item) === over.id
3429
+ );
3430
+ onMove({
3431
+ event,
3432
+ activeContainer: activeContainer2,
3433
+ activeIndex,
3434
+ overContainer: overContainer2,
3435
+ overIndex
3436
+ });
3437
+ }
3438
+ return;
3439
+ }
3440
+ if (isColumn(active.id) && isColumn(over.id)) {
3441
+ const activeIndex = columnIds.indexOf(active.id);
3442
+ const overIndex = columnIds.indexOf(over.id);
3443
+ if (activeIndex !== overIndex) {
3444
+ const newOrder = arrayMove(
3445
+ Object.keys(columns),
3446
+ activeIndex,
3447
+ overIndex
3448
+ );
3449
+ const newColumns = {};
3450
+ newOrder.forEach((key) => {
3451
+ newColumns[key] = columns[key];
3452
+ });
3453
+ setColumns(newColumns);
3454
+ }
3455
+ return;
3456
+ }
3457
+ const activeContainer = findContainer(active.id);
3458
+ const overContainer = findContainer(over.id);
3459
+ if (activeContainer && overContainer && activeContainer === overContainer) {
3460
+ const container = activeContainer;
3461
+ const activeIndex = columns[container].findIndex(
3462
+ (item) => getItemValue(item) === active.id
3463
+ );
3464
+ const overIndex = columns[container].findIndex(
3465
+ (item) => getItemValue(item) === over.id
3466
+ );
3467
+ if (activeIndex !== overIndex) {
3468
+ setColumns({
3469
+ ...columns,
3470
+ [container]: arrayMove(columns[container], activeIndex, overIndex)
3471
+ });
3472
+ }
3473
+ }
3474
+ },
3475
+ [
3476
+ columnIds,
3477
+ columns,
3478
+ findContainer,
3479
+ getItemValue,
3480
+ isColumn,
3481
+ setColumns,
3482
+ onMove
3483
+ ]
3484
+ );
3485
+ const contextValue = React4.useMemo(
3486
+ () => ({
3487
+ columns,
3488
+ setColumns,
3489
+ getItemId: getItemValue,
3490
+ columnIds,
3491
+ activeId,
3492
+ setActiveId,
3493
+ findContainer,
3494
+ isColumn
3495
+ }),
3496
+ [
3497
+ columns,
3498
+ setColumns,
3499
+ getItemValue,
3500
+ columnIds,
3501
+ activeId,
3502
+ findContainer,
3503
+ isColumn
3504
+ ]
3505
+ );
3506
+ return /* @__PURE__ */ jsx(KanbanContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
3507
+ DndContext,
3508
+ {
3509
+ sensors,
3510
+ onDragStart: handleDragStart,
3511
+ onDragOver: handleDragOver,
3512
+ onDragEnd: handleDragEnd,
3513
+ children: /* @__PURE__ */ jsx(
3514
+ "div",
3515
+ {
3516
+ "data-slot": "kanban",
3517
+ "data-dragging": activeId !== null,
3518
+ className: cn(className),
3519
+ children
3520
+ }
3521
+ )
3522
+ }
3523
+ ) });
3524
+ }
3525
+ function KanbanBoard({ children, className }) {
3526
+ const { columnIds } = React4.useContext(KanbanContext);
3527
+ return /* @__PURE__ */ jsx(SortableContext, { items: columnIds, strategy: rectSortingStrategy, children: /* @__PURE__ */ jsx(
3528
+ "div",
3529
+ {
3530
+ "data-slot": "kanban-board",
3531
+ className: cn("grid auto-rows-fr gap-4", className),
3532
+ children
3533
+ }
3534
+ ) });
3535
+ }
3536
+ function KanbanColumn({
3537
+ value,
3538
+ className,
3539
+ children,
3540
+ disabled
3541
+ }) {
3542
+ const {
3543
+ setNodeRef,
3544
+ transform,
3545
+ transition,
3546
+ attributes,
3547
+ listeners,
3548
+ isDragging: isSortableDragging
3549
+ } = useSortable({
3550
+ id: value,
3551
+ disabled
3552
+ });
3553
+ const { activeId, isColumn } = React4.useContext(KanbanContext);
3554
+ const isColumnDragging = activeId ? isColumn(activeId) : false;
3555
+ const style = {
3556
+ transition,
3557
+ transform: CSS$1.Translate.toString(transform)
3558
+ };
3559
+ return /* @__PURE__ */ jsx(
3560
+ ColumnContext.Provider,
3561
+ {
3562
+ value: { attributes, listeners, isDragging: isColumnDragging, disabled },
3563
+ children: /* @__PURE__ */ jsx(
3564
+ "div",
3565
+ {
3566
+ "data-slot": "kanban-column",
3567
+ "data-value": value,
3568
+ "data-dragging": isSortableDragging,
3569
+ "data-disabled": disabled,
3570
+ ref: setNodeRef,
3571
+ style,
3572
+ className: cn(
3573
+ "group/kanban-column flex flex-col",
3574
+ isSortableDragging && "opacity-50",
3575
+ disabled && "opacity-50",
3576
+ className
3577
+ ),
3578
+ children
3579
+ }
3580
+ )
3581
+ }
3582
+ );
3583
+ }
3584
+ function KanbanColumnHandle({
3585
+ asChild,
3586
+ className,
3587
+ children,
3588
+ cursor = true
3589
+ }) {
3590
+ const { attributes, listeners, isDragging, disabled } = React4.useContext(ColumnContext);
3591
+ const Comp = asChild ? Slot : "div";
3592
+ return /* @__PURE__ */ jsx(
3593
+ Comp,
3594
+ {
3595
+ "data-slot": "kanban-column-handle",
3596
+ "data-dragging": isDragging,
3597
+ "data-disabled": disabled,
3598
+ ...attributes,
3599
+ ...listeners,
3600
+ className: cn(
3601
+ "opacity-0 transition-opacity group-hover/kanban-column:opacity-100",
3602
+ cursor && (isDragging ? "cursor-grabbing!" : "cursor-grab!"),
3603
+ className
3604
+ ),
3605
+ children
3606
+ }
3607
+ );
3608
+ }
3609
+ function KanbanItem({
3610
+ value,
3611
+ asChild = false,
3612
+ className,
3613
+ children,
3614
+ disabled
3615
+ }) {
3616
+ const {
3617
+ setNodeRef,
3618
+ transform,
3619
+ transition,
3620
+ attributes,
3621
+ listeners,
3622
+ isDragging: isSortableDragging
3623
+ } = useSortable({
3624
+ id: value,
3625
+ disabled
3626
+ });
3627
+ const { activeId, isColumn } = React4.useContext(KanbanContext);
3628
+ const isItemDragging = activeId ? !isColumn(activeId) : false;
3629
+ const style = {
3630
+ transition,
3631
+ transform: CSS$1.Translate.toString(transform)
3632
+ };
3633
+ const Comp = asChild ? Slot : "div";
3634
+ return /* @__PURE__ */ jsx(
3635
+ ItemContext.Provider,
3636
+ {
3637
+ value: { listeners, isDragging: isItemDragging, disabled },
3638
+ children: /* @__PURE__ */ jsx(
3639
+ Comp,
3640
+ {
3641
+ "data-slot": "kanban-item",
3642
+ "data-value": value,
3643
+ "data-dragging": isSortableDragging,
3644
+ "data-disabled": disabled,
3645
+ ref: setNodeRef,
3646
+ style,
3647
+ ...attributes,
3648
+ className: cn(
3649
+ isSortableDragging && "opacity-50",
3650
+ disabled && "opacity-50",
3651
+ className
3652
+ ),
3653
+ children
3654
+ }
3655
+ )
3656
+ }
3657
+ );
3658
+ }
3659
+ function KanbanItemHandle({
3660
+ asChild,
3661
+ className,
3662
+ children,
3663
+ cursor = true
3664
+ }) {
3665
+ const { listeners, isDragging, disabled } = React4.useContext(ItemContext);
3666
+ const Comp = asChild ? Slot : "div";
3667
+ return /* @__PURE__ */ jsx(
3668
+ Comp,
3669
+ {
3670
+ "data-slot": "kanban-item-handle",
3671
+ "data-dragging": isDragging,
3672
+ "data-disabled": disabled,
3673
+ ...listeners,
3674
+ className: cn(
3675
+ cursor && (isDragging ? "cursor-grabbing!" : "cursor-grab!"),
3676
+ className
3677
+ ),
3678
+ children
3679
+ }
3680
+ );
3681
+ }
3682
+ function KanbanColumnContent({
3683
+ value,
3684
+ className,
3685
+ children
3686
+ }) {
3687
+ const { columns, getItemId } = React4.useContext(KanbanContext);
3688
+ const itemIds = React4.useMemo(
3689
+ () => columns[value].map(getItemId),
3690
+ [columns, getItemId, value]
3691
+ );
3692
+ return /* @__PURE__ */ jsx(SortableContext, { items: itemIds, strategy: verticalListSortingStrategy, children: /* @__PURE__ */ jsx(
3693
+ "div",
3694
+ {
3695
+ "data-slot": "kanban-column-content",
3696
+ className: cn("flex flex-col gap-2", className),
3697
+ children
3698
+ }
3699
+ ) });
3700
+ }
3701
+ function KanbanOverlay({ children, className }) {
3702
+ const { activeId, isColumn } = React4.useContext(KanbanContext);
3703
+ const [dimensions, setDimensions] = React4.useState(null);
3704
+ React4.useEffect(() => {
3705
+ if (activeId) {
3706
+ const element = document.querySelector(
3707
+ `[data-slot="kanban-${isColumn(activeId) ? "column" : "item"}"][data-value="${activeId}"]`
3708
+ );
3709
+ if (element) {
3710
+ const rect = element.getBoundingClientRect();
3711
+ setDimensions({ width: rect.width, height: rect.height });
3712
+ }
3713
+ } else {
3714
+ setDimensions(null);
3715
+ }
3716
+ }, [activeId, isColumn]);
3717
+ const style = {
3718
+ width: dimensions?.width,
3719
+ height: dimensions?.height
3720
+ };
3721
+ const content = React4.useMemo(() => {
3722
+ if (!activeId) return null;
3723
+ if (typeof children === "function") {
3724
+ return children({
3725
+ value: activeId,
3726
+ variant: isColumn(activeId) ? "column" : "item"
3727
+ });
3728
+ }
3729
+ return children;
3730
+ }, [activeId, children, isColumn]);
3731
+ return /* @__PURE__ */ jsx(DragOverlay, { dropAnimation: dropAnimationConfig, children: /* @__PURE__ */ jsx(
3732
+ "div",
3733
+ {
3734
+ "data-slot": "kanban-overlay",
3735
+ "data-dragging": true,
3736
+ style,
3737
+ className: cn(
3738
+ "pointer-events-none",
3739
+ className,
3740
+ activeId ? "cursor-grabbing!" : ""
3741
+ ),
3742
+ children: content
3743
+ }
3744
+ ) });
3745
+ }
3746
+ var badgeVariants = cva(
3747
+ "inline-flex items-center justify-center border border-transparent font-medium focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 [&_svg]:-ms-px [&_svg]:shrink-0",
3748
+ {
3749
+ variants: {
3750
+ variant: {
3751
+ primary: "bg-primary text-primary-foreground",
3752
+ secondary: "bg-secondary text-secondary-foreground",
3753
+ success: "bg-[var(--color-success-accent,var(--color-green-500))] text-[var(--color-success-foreground,var(--color-white))]",
3754
+ warning: "bg-[var(--color-warning-accent,var(--color-yellow-500))] text-[var(--color-warning-foreground,var(--color-white))]",
3755
+ info: "bg-[var(--color-info-accent,var(--color-violet-500))] text-[var(--color-info-foreground,var(--color-white))]",
3756
+ outline: "bg-transparent border border-border text-secondary-foreground",
3757
+ destructive: "bg-destructive text-destructive-foreground"
3758
+ },
3759
+ appearance: {
3760
+ default: "",
3761
+ light: "",
3762
+ outline: "",
3763
+ ghost: "border-transparent bg-transparent"
3764
+ },
3765
+ disabled: {
3766
+ true: "opacity-50 pointer-events-none"
3767
+ },
3768
+ size: {
3769
+ lg: "rounded-md px-[0.5rem] h-7 min-w-7 gap-1.5 text-xs [&_svg]:size-3.5",
3770
+ md: "rounded-md px-[0.45rem] h-6 min-w-6 gap-1.5 text-xs [&_svg]:size-3.5 ",
3771
+ sm: "rounded-sm px-[0.325rem] h-5 min-w-5 gap-1 text-[0.6875rem] leading-[0.75rem] [&_svg]:size-3",
3772
+ xs: "rounded-sm px-[0.25rem] h-4 min-w-4 gap-1 text-[0.625rem] leading-[0.5rem] [&_svg]:size-3"
3773
+ },
3774
+ shape: {
3775
+ default: "",
3776
+ circle: "rounded-full"
3777
+ }
3778
+ },
3779
+ compoundVariants: [
3780
+ /* Light */
3781
+ {
3782
+ variant: "primary",
3783
+ appearance: "light",
3784
+ className: "text-[var(--color-primary-accent,var(--color-blue-700))] bg-[var(--color-primary-soft,var(--color-blue-50))] dark:bg-[var(--color-primary-soft,var(--color-blue-950))] dark:text-[var(--color-primary-soft,var(--color-blue-600))]"
3785
+ },
3786
+ {
3787
+ variant: "secondary",
3788
+ appearance: "light",
3789
+ className: "bg-secondary dark:bg-secondary/50 text-secondary-foreground"
3790
+ },
3791
+ {
3792
+ variant: "success",
3793
+ appearance: "light",
3794
+ className: "text-[var(--color-success-accent,var(--color-green-800))] bg-[var(--color-success-soft,var(--color-green-100))] dark:bg-[var(--color-success-soft,var(--color-green-950))] dark:text-[var(--color-success-soft,var(--color-green-600))]"
3795
+ },
3796
+ {
3797
+ variant: "warning",
3798
+ appearance: "light",
3799
+ className: "text-[var(--color-warning-accent,var(--color-yellow-700))] bg-[var(--color-warning-soft,var(--color-yellow-100))] dark:bg-[var(--color-warning-soft,var(--color-yellow-950))] dark:text-[var(--color-warning-soft,var(--color-yellow-600))]"
3800
+ },
2962
3801
  {
2963
3802
  variant: "info",
2964
3803
  appearance: "light",
@@ -3104,50 +3943,536 @@ function BadgeDot({ className, ...props }) {
3104
3943
  }
3105
3944
  );
3106
3945
  }
3107
- function Breadcrumb({
3108
- ...props
3109
- }) {
3110
- return /* @__PURE__ */ jsx("nav", { "data-slot": "breadcrumb", "aria-label": "breadcrumb", ...props });
3111
- }
3112
- function BreadcrumbList({ className, ...props }) {
3113
- return /* @__PURE__ */ jsx(
3114
- "ol",
3115
- {
3116
- "data-slot": "breadcrumb-list",
3117
- className: cn(
3118
- "flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground",
3119
- className
3120
- ),
3121
- ...props
3946
+ var accordionRootVariants = cva("", {
3947
+ variants: {
3948
+ variant: {
3949
+ default: "",
3950
+ outline: "space-y-2",
3951
+ solid: "space-y-2"
3122
3952
  }
3123
- );
3124
- }
3125
- function BreadcrumbItem({ className, ...props }) {
3953
+ },
3954
+ defaultVariants: {
3955
+ variant: "default"
3956
+ }
3957
+ });
3958
+ var accordionItemVariants = cva("", {
3959
+ variants: {
3960
+ variant: {
3961
+ default: "border-b border-border",
3962
+ outline: "border border-border rounded-lg px-4",
3963
+ solid: "rounded-lg bg-accent/70 px-4"
3964
+ }
3965
+ },
3966
+ defaultVariants: {
3967
+ variant: "default"
3968
+ }
3969
+ });
3970
+ var accordionTriggerVariants = cva(
3971
+ "flex flex-1 items-center justify-between py-4 gap-2.5 text-foreground font-medium transition-all [&[data-state=open]>svg]:rotate-180 cursor-pointer",
3972
+ {
3973
+ variants: {
3974
+ variant: {
3975
+ default: "",
3976
+ outline: "",
3977
+ solid: ""
3978
+ },
3979
+ indicator: {
3980
+ arrow: "",
3981
+ plus: "[&>svg>path:last-child]:origin-center [&>svg>path:last-child]:transition-all [&>svg>path:last-child]:duration-200 [&[data-state=open]>svg>path:last-child]:rotate-90 [&[data-state=open]>svg>path:last-child]:opacity-0 [&[data-state=open]>svg]:rotate-180",
3982
+ none: ""
3983
+ }
3984
+ },
3985
+ defaultVariants: {
3986
+ variant: "default",
3987
+ indicator: "arrow"
3988
+ }
3989
+ }
3990
+ );
3991
+ var accordionContentVariants = cva(
3992
+ "overflow-hidden text-sm text-accent-foreground transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
3993
+ {
3994
+ variants: {
3995
+ variant: {
3996
+ default: "",
3997
+ outline: "",
3998
+ solid: ""
3999
+ }
4000
+ },
4001
+ defaultVariants: {
4002
+ variant: "default"
4003
+ }
4004
+ }
4005
+ );
4006
+ var AccordionContext = React4.createContext({
4007
+ variant: "default",
4008
+ indicator: "arrow"
4009
+ });
4010
+ function Accordion(props) {
4011
+ const {
4012
+ className,
4013
+ variant = "default",
4014
+ indicator = "arrow",
4015
+ children,
4016
+ ...rest
4017
+ } = props;
3126
4018
  return /* @__PURE__ */ jsx(
3127
- "li",
4019
+ AccordionContext.Provider,
3128
4020
  {
3129
- "data-slot": "breadcrumb-item",
3130
- className: cn("inline-flex items-center gap-1.5", className),
3131
- ...props
4021
+ value: { variant: variant || "default", indicator },
4022
+ children: /* @__PURE__ */ jsx(
4023
+ Accordion$1.Root,
4024
+ {
4025
+ "data-slot": "accordion",
4026
+ className: cn(accordionRootVariants({ variant }), className),
4027
+ ...rest,
4028
+ children
4029
+ }
4030
+ )
3132
4031
  }
3133
4032
  );
3134
4033
  }
3135
- function BreadcrumbLink({
3136
- asChild,
3137
- className,
3138
- ...props
3139
- }) {
3140
- const Comp = asChild ? Slot.Slot : "a";
4034
+ function AccordionItem(props) {
4035
+ const { className, children, ...rest } = props;
4036
+ const { variant } = React4.useContext(AccordionContext);
3141
4037
  return /* @__PURE__ */ jsx(
3142
- Comp,
4038
+ Accordion$1.Item,
3143
4039
  {
3144
- "data-slot": "breadcrumb-link",
3145
- className: cn("transition-colors hover:text-foreground", className),
3146
- ...props
4040
+ "data-slot": "accordion-item",
4041
+ className: cn(accordionItemVariants({ variant }), className),
4042
+ ...rest,
4043
+ children
3147
4044
  }
3148
4045
  );
3149
4046
  }
3150
- function BreadcrumbPage({ className, ...props }) {
4047
+ function AccordionTrigger(props) {
4048
+ const { className, children, ...rest } = props;
4049
+ const { variant, indicator } = React4.useContext(AccordionContext);
4050
+ return /* @__PURE__ */ jsx(Accordion$1.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
4051
+ Accordion$1.Trigger,
4052
+ {
4053
+ "data-slot": "accordion-trigger",
4054
+ className: cn(
4055
+ accordionTriggerVariants({ variant, indicator }),
4056
+ className
4057
+ ),
4058
+ ...rest,
4059
+ children: [
4060
+ children,
4061
+ indicator === "plus" && /* @__PURE__ */ jsx(
4062
+ Plus,
4063
+ {
4064
+ className: "size-4 shrink-0 transition-transform duration-200",
4065
+ strokeWidth: 1
4066
+ }
4067
+ ),
4068
+ indicator === "arrow" && /* @__PURE__ */ jsx(
4069
+ ChevronDown,
4070
+ {
4071
+ className: "size-4 shrink-0 transition-transform duration-200",
4072
+ strokeWidth: 1
4073
+ }
4074
+ )
4075
+ ]
4076
+ }
4077
+ ) });
4078
+ }
4079
+ function AccordionContent(props) {
4080
+ const { className, children, ...rest } = props;
4081
+ const { variant } = React4.useContext(AccordionContext);
4082
+ return /* @__PURE__ */ jsx(
4083
+ Accordion$1.Content,
4084
+ {
4085
+ "data-slot": "accordion-content",
4086
+ className: cn(accordionContentVariants({ variant }), className),
4087
+ ...rest,
4088
+ children: /* @__PURE__ */ jsx("div", { className: "pb-5 pt-0", children })
4089
+ }
4090
+ );
4091
+ }
4092
+ var AccordionMenuContext = React4.createContext({
4093
+ matchPath: () => false,
4094
+ selectedValue: "",
4095
+ setSelectedValue: () => {
4096
+ },
4097
+ nestedStates: {},
4098
+ setNestedStates: () => {
4099
+ }
4100
+ });
4101
+ function AccordionMenu({
4102
+ className,
4103
+ matchPath = () => false,
4104
+ classNames,
4105
+ children,
4106
+ selectedValue,
4107
+ onItemClick,
4108
+ ...props
4109
+ }) {
4110
+ const [internalSelectedValue, setInternalSelectedValue] = React4.useState(selectedValue);
4111
+ React4.useEffect(() => {
4112
+ setInternalSelectedValue(selectedValue);
4113
+ }, [selectedValue]);
4114
+ const [nestedStates, setNestedStates] = React4.useState({});
4115
+ React4.useEffect(() => {
4116
+ const getActiveChain = (nodes, chain2 = []) => {
4117
+ let result = [];
4118
+ React4.Children.forEach(nodes, (node) => {
4119
+ if (React4.isValidElement(node)) {
4120
+ const { value, children: nodeChildren } = node.props;
4121
+ const newChain = value ? [...chain2, value] : chain2;
4122
+ if (value && (value === selectedValue || matchPath(value))) {
4123
+ result = newChain;
4124
+ } else if (nodeChildren) {
4125
+ const childChain = getActiveChain(nodeChildren, newChain);
4126
+ if (childChain.length > 0) {
4127
+ result = childChain;
4128
+ }
4129
+ }
4130
+ }
4131
+ });
4132
+ return result;
4133
+ };
4134
+ const chain = getActiveChain(children);
4135
+ const trimmedChain = chain.length > 1 ? chain.slice(0, chain.length - 1) : chain;
4136
+ const mapping = {};
4137
+ if (trimmedChain.length > 0) {
4138
+ if (props.type === "multiple") {
4139
+ mapping["root"] = trimmedChain;
4140
+ } else {
4141
+ mapping["root"] = trimmedChain[0];
4142
+ for (let i = 0; i < trimmedChain.length - 1; i++) {
4143
+ mapping[trimmedChain[i]] = trimmedChain[i + 1];
4144
+ }
4145
+ }
4146
+ }
4147
+ setNestedStates(mapping);
4148
+ }, [selectedValue]);
4149
+ const multipleValue = Array.isArray(nestedStates["root"]) ? nestedStates["root"] : typeof nestedStates["root"] === "string" ? [nestedStates["root"]] : [];
4150
+ const singleValue = nestedStates["root"] ?? "";
4151
+ return /* @__PURE__ */ jsx(
4152
+ AccordionMenuContext.Provider,
4153
+ {
4154
+ value: {
4155
+ matchPath,
4156
+ selectedValue: internalSelectedValue,
4157
+ setSelectedValue: setInternalSelectedValue,
4158
+ classNames,
4159
+ onItemClick,
4160
+ nestedStates,
4161
+ setNestedStates
4162
+ },
4163
+ children: props.type === "single" ? /* @__PURE__ */ jsx(
4164
+ Accordion$1.Root,
4165
+ {
4166
+ "data-slot": "accordion-menu",
4167
+ value: singleValue,
4168
+ className: cn("w-full", classNames?.root, className),
4169
+ onValueChange: (value) => setNestedStates((prev) => ({ ...prev, root: value })),
4170
+ ...props,
4171
+ role: "menu",
4172
+ children
4173
+ }
4174
+ ) : /* @__PURE__ */ jsx(
4175
+ Accordion$1.Root,
4176
+ {
4177
+ "data-slot": "accordion-menu",
4178
+ value: multipleValue,
4179
+ className: cn("w-full", classNames?.root, className),
4180
+ onValueChange: (value) => setNestedStates((prev) => ({ ...prev, root: value })),
4181
+ ...props,
4182
+ role: "menu",
4183
+ children
4184
+ }
4185
+ )
4186
+ }
4187
+ );
4188
+ }
4189
+ function AccordionMenuGroup({
4190
+ children,
4191
+ className,
4192
+ ...props
4193
+ }) {
4194
+ const { classNames } = React4.useContext(AccordionMenuContext);
4195
+ return /* @__PURE__ */ jsx(
4196
+ "div",
4197
+ {
4198
+ "data-slot": "accordion-menu-group",
4199
+ role: "group",
4200
+ className: cn("space-y-0.5", classNames?.group, className),
4201
+ ...props,
4202
+ children
4203
+ }
4204
+ );
4205
+ }
4206
+ function AccordionMenuLabel({
4207
+ children,
4208
+ className,
4209
+ ...props
4210
+ }) {
4211
+ const { classNames } = React4.useContext(AccordionMenuContext);
4212
+ return /* @__PURE__ */ jsx(
4213
+ "div",
4214
+ {
4215
+ "data-slot": "accordion-menu-label",
4216
+ role: "presentation",
4217
+ className: cn(
4218
+ "px-2 py-1.5 text-xs font-medium text-muted-foreground",
4219
+ classNames?.label,
4220
+ className
4221
+ ),
4222
+ ...props,
4223
+ children
4224
+ }
4225
+ );
4226
+ }
4227
+ function AccordionMenuSeparator({
4228
+ className,
4229
+ ...props
4230
+ }) {
4231
+ const { classNames } = React4.useContext(AccordionMenuContext);
4232
+ return /* @__PURE__ */ jsx(
4233
+ "div",
4234
+ {
4235
+ "data-slot": "accordion-menu-separator",
4236
+ role: "separator",
4237
+ className: cn("my-1 h-px bg-border", classNames?.separator, className),
4238
+ ...props
4239
+ }
4240
+ );
4241
+ }
4242
+ var itemVariants = cva(
4243
+ "relative cursor-pointer select-none flex w-full text-start items-center text-foreground rounded-lg gap-2 px-2 py-1.5 text-sm outline-hidden transition-colors hover:bg-accent hover:text-accent-foreground data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground disabled:opacity-50 disabled:bg-transparent focus-visible:bg-accent focus-visible:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:opacity-60 [&_svg:not([class*=size-])]:size-4 [&_svg]:shrink-0 [&_a]:flex [&>a]:w-full [&>a]:items-center [&>a]:gap-2",
4244
+ {
4245
+ variants: {
4246
+ variant: {
4247
+ default: "",
4248
+ destructive: "text-destructive hover:text-destructive focus:text-destructive hover:bg-destructive/5 focus:bg-destructive/5 data-[active=true]:bg-destructive/5"
4249
+ }
4250
+ },
4251
+ defaultVariants: {
4252
+ variant: "default"
4253
+ }
4254
+ }
4255
+ );
4256
+ function AccordionMenuItem({
4257
+ className,
4258
+ children,
4259
+ variant,
4260
+ asChild,
4261
+ onClick,
4262
+ ...props
4263
+ }) {
4264
+ const { classNames, selectedValue, matchPath, onItemClick } = React4.useContext(AccordionMenuContext);
4265
+ return /* @__PURE__ */ jsx(Accordion$1.Item, { className: "flex", ...props, children: /* @__PURE__ */ jsx(Accordion$1.Header, { asChild: true, children: /* @__PURE__ */ jsx("div", { className: "flex w-full", children: /* @__PURE__ */ jsx(
4266
+ Accordion$1.Trigger,
4267
+ {
4268
+ role: "menuitem",
4269
+ asChild,
4270
+ "data-slot": "accordion-menu-item",
4271
+ className: cn(
4272
+ itemVariants({ variant }),
4273
+ classNames?.item,
4274
+ className
4275
+ ),
4276
+ onClick: (e) => {
4277
+ if (onItemClick) {
4278
+ onItemClick(props.value, e);
4279
+ }
4280
+ if (onClick) {
4281
+ onClick(e);
4282
+ }
4283
+ e.preventDefault();
4284
+ },
4285
+ onKeyDown: (e) => {
4286
+ if (e.key === "Enter") {
4287
+ e.preventDefault();
4288
+ const target = e.currentTarget;
4289
+ const firstChild = target.firstElementChild;
4290
+ if (firstChild) {
4291
+ firstChild.click();
4292
+ }
4293
+ }
4294
+ },
4295
+ "data-selected": matchPath(props.value) || selectedValue === props.value ? "true" : void 0,
4296
+ children
4297
+ }
4298
+ ) }) }) });
4299
+ }
4300
+ function AccordionMenuSub({
4301
+ className,
4302
+ children,
4303
+ ...props
4304
+ }) {
4305
+ const { classNames } = React4.useContext(AccordionMenuContext);
4306
+ return /* @__PURE__ */ jsx(
4307
+ Accordion$1.Item,
4308
+ {
4309
+ "data-slot": "accordion-menu-sub",
4310
+ className: cn(classNames?.sub, className),
4311
+ ...props,
4312
+ children
4313
+ }
4314
+ );
4315
+ }
4316
+ function AccordionMenuSubTrigger({
4317
+ className,
4318
+ children
4319
+ }) {
4320
+ const { classNames } = React4.useContext(AccordionMenuContext);
4321
+ return /* @__PURE__ */ jsx(Accordion$1.Header, { asChild: true, children: /* @__PURE__ */ jsx("div", { className: "flex", children: /* @__PURE__ */ jsxs(
4322
+ Accordion$1.Trigger,
4323
+ {
4324
+ role: "menuitem",
4325
+ "aria-haspopup": "true",
4326
+ "data-slot": "accordion-menu-sub-trigger",
4327
+ className: cn(
4328
+ itemVariants({ variant: "default" }),
4329
+ classNames?.subTrigger,
4330
+ className
4331
+ ),
4332
+ children: [
4333
+ children,
4334
+ /* @__PURE__ */ jsx(
4335
+ ChevronDown,
4336
+ {
4337
+ "data-slot": "accordion-menu-sub-indicator",
4338
+ className: cn(
4339
+ "ms-auto size-3.5! shrink-0 text-muted-foreground transition-transform duration-200 [[data-state=open]>&]:-rotate-180"
4340
+ )
4341
+ }
4342
+ )
4343
+ ]
4344
+ }
4345
+ ) }) });
4346
+ }
4347
+ function AccordionMenuSubContent({
4348
+ className,
4349
+ children,
4350
+ type,
4351
+ collapsible,
4352
+ defaultValue,
4353
+ parentValue,
4354
+ ...props
4355
+ }) {
4356
+ const { nestedStates, setNestedStates, classNames } = React4.useContext(AccordionMenuContext);
4357
+ let currentValue;
4358
+ if (type === "multiple") {
4359
+ const stateValue = nestedStates[parentValue];
4360
+ if (Array.isArray(stateValue)) {
4361
+ currentValue = stateValue;
4362
+ } else if (typeof stateValue === "string") {
4363
+ currentValue = [stateValue];
4364
+ } else if (defaultValue) {
4365
+ currentValue = Array.isArray(defaultValue) ? defaultValue : [defaultValue];
4366
+ } else {
4367
+ currentValue = [];
4368
+ }
4369
+ } else {
4370
+ currentValue = nestedStates[parentValue] ?? defaultValue ?? "";
4371
+ }
4372
+ return /* @__PURE__ */ jsx(
4373
+ Accordion$1.Content,
4374
+ {
4375
+ "data-slot": "accordion-menu-sub-content",
4376
+ className: cn(
4377
+ "ps-5",
4378
+ "overflow-hidden transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
4379
+ classNames?.subContent,
4380
+ className
4381
+ ),
4382
+ ...props,
4383
+ children: type === "multiple" ? /* @__PURE__ */ jsx(
4384
+ Accordion$1.Root,
4385
+ {
4386
+ className: cn("w-full py-0.5", classNames?.subWrapper),
4387
+ type: "multiple",
4388
+ value: currentValue,
4389
+ role: "menu",
4390
+ "data-slot": "accordion-menu-sub-wrapper",
4391
+ onValueChange: (value) => {
4392
+ const newValue = Array.isArray(value) ? value : [value];
4393
+ setNestedStates((prev) => ({ ...prev, [parentValue]: newValue }));
4394
+ },
4395
+ children
4396
+ }
4397
+ ) : /* @__PURE__ */ jsx(
4398
+ Accordion$1.Root,
4399
+ {
4400
+ className: cn("w-full py-0.5", classNames?.subWrapper),
4401
+ type: "single",
4402
+ collapsible,
4403
+ value: currentValue,
4404
+ role: "menu",
4405
+ "data-slot": "accordion-menu-sub-wrapper",
4406
+ onValueChange: (value) => setNestedStates((prev) => ({ ...prev, [parentValue]: value })),
4407
+ children
4408
+ }
4409
+ )
4410
+ }
4411
+ );
4412
+ }
4413
+ function AccordionMenuIndicator({
4414
+ className,
4415
+ ...props
4416
+ }) {
4417
+ const { classNames } = React4.useContext(AccordionMenuContext);
4418
+ return /* @__PURE__ */ jsx(
4419
+ "span",
4420
+ {
4421
+ "aria-hidden": "true",
4422
+ "data-slot": "accordion-menu-indicator",
4423
+ className: cn(
4424
+ "ms-auto flex items-center font-medium",
4425
+ classNames?.indicator,
4426
+ className
4427
+ ),
4428
+ ...props
4429
+ }
4430
+ );
4431
+ }
4432
+ function Breadcrumb({
4433
+ ...props
4434
+ }) {
4435
+ return /* @__PURE__ */ jsx("nav", { "data-slot": "breadcrumb", "aria-label": "breadcrumb", ...props });
4436
+ }
4437
+ function BreadcrumbList({ className, ...props }) {
4438
+ return /* @__PURE__ */ jsx(
4439
+ "ol",
4440
+ {
4441
+ "data-slot": "breadcrumb-list",
4442
+ className: cn(
4443
+ "flex flex-wrap items-center gap-1.5 wrap-break-word text-sm text-muted-foreground",
4444
+ className
4445
+ ),
4446
+ ...props
4447
+ }
4448
+ );
4449
+ }
4450
+ function BreadcrumbItem({ className, ...props }) {
4451
+ return /* @__PURE__ */ jsx(
4452
+ "li",
4453
+ {
4454
+ "data-slot": "breadcrumb-item",
4455
+ className: cn("inline-flex items-center gap-1.5", className),
4456
+ ...props
4457
+ }
4458
+ );
4459
+ }
4460
+ function BreadcrumbLink({
4461
+ asChild,
4462
+ className,
4463
+ ...props
4464
+ }) {
4465
+ const Comp = asChild ? Slot$1.Slot : "a";
4466
+ return /* @__PURE__ */ jsx(
4467
+ Comp,
4468
+ {
4469
+ "data-slot": "breadcrumb-link",
4470
+ className: cn("transition-colors hover:text-foreground", className),
4471
+ ...props
4472
+ }
4473
+ );
4474
+ }
4475
+ function BreadcrumbPage({ className, ...props }) {
3151
4476
  return /* @__PURE__ */ jsx(
3152
4477
  "span",
3153
4478
  {
@@ -3192,6 +4517,40 @@ var BreadcrumbEllipsis = ({
3192
4517
  ]
3193
4518
  }
3194
4519
  );
4520
+ function Collapsible({
4521
+ ...props
4522
+ }) {
4523
+ return /* @__PURE__ */ jsx(Collapsible$1.Root, { "data-slot": "collapsible", ...props });
4524
+ }
4525
+ function CollapsibleTrigger({
4526
+ ...props
4527
+ }) {
4528
+ return /* @__PURE__ */ jsx(
4529
+ Collapsible$1.CollapsibleTrigger,
4530
+ {
4531
+ "data-slot": "collapsible-trigger",
4532
+ ...props
4533
+ }
4534
+ );
4535
+ }
4536
+ function CollapsibleContent({
4537
+ className,
4538
+ children,
4539
+ ...props
4540
+ }) {
4541
+ return /* @__PURE__ */ jsx(
4542
+ Collapsible$1.CollapsibleContent,
4543
+ {
4544
+ "data-slot": "collapsible-content",
4545
+ className: cn(
4546
+ "overflow-hidden transition-all data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down",
4547
+ className
4548
+ ),
4549
+ ...props,
4550
+ children
4551
+ }
4552
+ );
4553
+ }
3195
4554
  var tabsListVariantConfig = {
3196
4555
  variant: {
3197
4556
  default: "bg-accent p-1",
@@ -3309,7 +4668,7 @@ var tabsContentVariants = cva(
3309
4668
  }
3310
4669
  }
3311
4670
  );
3312
- var TabsContext = React.createContext({
4671
+ var TabsContext = React4.createContext({
3313
4672
  variant: "default",
3314
4673
  size: "md"
3315
4674
  });
@@ -3345,7 +4704,7 @@ function TabsTrigger({
3345
4704
  className,
3346
4705
  ...props
3347
4706
  }) {
3348
- const { variant, size } = React.useContext(TabsContext);
4707
+ const { variant, size } = React4.useContext(TabsContext);
3349
4708
  return /* @__PURE__ */ jsx(
3350
4709
  Tabs$1.Trigger,
3351
4710
  {
@@ -3369,12 +4728,12 @@ function TabsContent({
3369
4728
  }
3370
4729
  );
3371
4730
  }
3372
- var CardContext = React.createContext({
4731
+ var CardContext = React4.createContext({
3373
4732
  variant: "default"
3374
4733
  // Default value
3375
4734
  });
3376
4735
  var useCardContext = () => {
3377
- const context = React.useContext(CardContext);
4736
+ const context = React4.useContext(CardContext);
3378
4737
  return context;
3379
4738
  };
3380
4739
  var cardVariants = cva(
@@ -3982,10 +5341,356 @@ function InputWrapper({
3982
5341
  }
3983
5342
  );
3984
5343
  }
3985
- var labelVariants = cva(
3986
- "text-sm leading-none text-foreground peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
3987
- {
3988
- variants: {
5344
+ function ContextMenu({
5345
+ ...props
5346
+ }) {
5347
+ return /* @__PURE__ */ jsx(ContextMenu$1.Root, { "data-slot": "context-menu", ...props });
5348
+ }
5349
+ function ContextMenuTrigger({
5350
+ ...props
5351
+ }) {
5352
+ return /* @__PURE__ */ jsx(ContextMenu$1.Trigger, { "data-slot": "context-menu-trigger", ...props });
5353
+ }
5354
+ function ContextMenuGroup({
5355
+ ...props
5356
+ }) {
5357
+ return /* @__PURE__ */ jsx(ContextMenu$1.Group, { "data-slot": "context-menu-group", ...props });
5358
+ }
5359
+ function ContextMenuPortal({
5360
+ ...props
5361
+ }) {
5362
+ return /* @__PURE__ */ jsx(ContextMenu$1.Portal, { "data-slot": "context-menu-portal", ...props });
5363
+ }
5364
+ function ContextMenuSub({
5365
+ ...props
5366
+ }) {
5367
+ return /* @__PURE__ */ jsx(ContextMenu$1.Sub, { "data-slot": "context-menu-sub", ...props });
5368
+ }
5369
+ function ContextMenuRadioGroup({
5370
+ ...props
5371
+ }) {
5372
+ return /* @__PURE__ */ jsx(
5373
+ ContextMenu$1.RadioGroup,
5374
+ {
5375
+ "data-slot": "context-menu-radio-group",
5376
+ ...props
5377
+ }
5378
+ );
5379
+ }
5380
+ function ContextMenuSubTrigger({
5381
+ className,
5382
+ inset,
5383
+ children,
5384
+ ...props
5385
+ }) {
5386
+ return /* @__PURE__ */ jsxs(
5387
+ ContextMenu$1.SubTrigger,
5388
+ {
5389
+ "data-slot": "context-menu-sub-trigger",
5390
+ className: cn(
5391
+ "flex cursor-default gap-2 select-none items-center rounded-md px-2 py-1.5 text-sm outline-hidden",
5392
+ "focus:bg-accent focus:text-foreground",
5393
+ "data-[state=open]:bg-accent data-[state=open]:text-foreground",
5394
+ "[&>svg]:pointer-events-none [&_svg:not([role=img]):not([class*=text-])]:opacity-60 [&>svg]:size-4 [&>svg]:shrink-0",
5395
+ inset && "ps-8",
5396
+ className
5397
+ ),
5398
+ ...props,
5399
+ children: [
5400
+ children,
5401
+ /* @__PURE__ */ jsx(
5402
+ ChevronRight,
5403
+ {
5404
+ "data-slot": "context-menu-sub-trigger-indicator",
5405
+ className: "ms-auto size-3.5! rtl:rotate-180"
5406
+ }
5407
+ )
5408
+ ]
5409
+ }
5410
+ );
5411
+ }
5412
+ function ContextMenuSubContent({
5413
+ className,
5414
+ ...props
5415
+ }) {
5416
+ return /* @__PURE__ */ jsx(
5417
+ ContextMenu$1.SubContent,
5418
+ {
5419
+ "data-slot": "context-menu-sub-content",
5420
+ className: cn(
5421
+ "space-y-0.5 z-50 min-w-32 overflow-hidden shadow-md shadow-black/5 rounded-md border border-border bg-popover text-popover-foreground p-2 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",
5422
+ className
5423
+ ),
5424
+ ...props
5425
+ }
5426
+ );
5427
+ }
5428
+ function ContextMenuContent({
5429
+ className,
5430
+ ...props
5431
+ }) {
5432
+ return /* @__PURE__ */ jsx(ContextMenu$1.Portal, { children: /* @__PURE__ */ jsx(
5433
+ ContextMenu$1.Content,
5434
+ {
5435
+ "data-slot": "context-menu-content",
5436
+ className: cn(
5437
+ "space-y-0.5 z-50 min-w-32 overflow-hidden rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-md shadow-black/5 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",
5438
+ className
5439
+ ),
5440
+ ...props
5441
+ }
5442
+ ) });
5443
+ }
5444
+ function ContextMenuItem({
5445
+ className,
5446
+ inset,
5447
+ variant,
5448
+ ...props
5449
+ }) {
5450
+ return /* @__PURE__ */ jsx(
5451
+ ContextMenu$1.Item,
5452
+ {
5453
+ "data-slot": "context-menu-item",
5454
+ className: cn(
5455
+ "text-foreground relative flex cursor-default select-none items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-hidden transition-colors data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([role=img]):not([class*=text-])]:opacity-60 [&_svg:not([class*=size-])]:size-4 [&_svg]:shrink-0",
5456
+ "focus:bg-accent focus:text-foreground",
5457
+ "data-[active=true]:bg-accent data-[active=true]:text-accent-foreground",
5458
+ inset && "ps-8",
5459
+ variant === "destructive" && "text-destructive hover:text-destructive focus:text-destructive hover:bg-destructive/5 focus:bg-destructive/5 data-[active=true]:bg-destructive/5",
5460
+ className
5461
+ ),
5462
+ ...props
5463
+ }
5464
+ );
5465
+ }
5466
+ function ContextMenuCheckboxItem({
5467
+ className,
5468
+ children,
5469
+ checked,
5470
+ ...props
5471
+ }) {
5472
+ return /* @__PURE__ */ jsxs(
5473
+ ContextMenu$1.CheckboxItem,
5474
+ {
5475
+ "data-slot": "context-menu-checkbox-item",
5476
+ className: cn(
5477
+ "relative flex cursor-default select-none items-center rounded-md py-1.5 ps-8 pe-2 text-sm outline-hidden transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50",
5478
+ className
5479
+ ),
5480
+ checked,
5481
+ ...props,
5482
+ children: [
5483
+ /* @__PURE__ */ jsx("span", { className: "absolute start-2 flex size-3.5 items-center text-muted-foreground justify-center", children: /* @__PURE__ */ jsx(ContextMenu$1.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "size-4 text-primary" }) }) }),
5484
+ children
5485
+ ]
5486
+ }
5487
+ );
5488
+ }
5489
+ function ContextMenuRadioItem({
5490
+ className,
5491
+ children,
5492
+ ...props
5493
+ }) {
5494
+ return /* @__PURE__ */ jsxs(
5495
+ ContextMenu$1.RadioItem,
5496
+ {
5497
+ "data-slot": "context-menu-radio-item",
5498
+ className: cn(
5499
+ "relative flex cursor-default select-none items-center rounded-md py-1.5 ps-6 pe-2 text-sm outline-hidden transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50",
5500
+ className
5501
+ ),
5502
+ ...props,
5503
+ children: [
5504
+ /* @__PURE__ */ jsx("span", { className: "absolute start-1.5 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenu$1.ItemIndicator, { children: /* @__PURE__ */ jsx(Circle, { className: "size-1.5 fill-primary stroke-primary" }) }) }),
5505
+ children
5506
+ ]
5507
+ }
5508
+ );
5509
+ }
5510
+ function ContextMenuLabel({
5511
+ className,
5512
+ inset,
5513
+ ...props
5514
+ }) {
5515
+ return /* @__PURE__ */ jsx(
5516
+ ContextMenu$1.Label,
5517
+ {
5518
+ "data-slot": "context-menu-label",
5519
+ className: cn(
5520
+ "px-2 py-1.5 text-xs text-muted-foreground font-medium",
5521
+ inset && "ps-8",
5522
+ className
5523
+ ),
5524
+ ...props
5525
+ }
5526
+ );
5527
+ }
5528
+ function ContextMenuSeparator({
5529
+ className,
5530
+ ...props
5531
+ }) {
5532
+ return /* @__PURE__ */ jsx(
5533
+ ContextMenu$1.Separator,
5534
+ {
5535
+ "data-slot": "context-menu-separator",
5536
+ className: cn("-mx-2 my-1.5 h-px bg-muted", className),
5537
+ ...props
5538
+ }
5539
+ );
5540
+ }
5541
+ function ContextMenuShortcut({
5542
+ className,
5543
+ ...props
5544
+ }) {
5545
+ return /* @__PURE__ */ jsx(
5546
+ "span",
5547
+ {
5548
+ "data-slot": "context-menu-shortcut",
5549
+ className: cn("ms-auto text-xs tracking-widest opacity-60", className),
5550
+ ...props
5551
+ }
5552
+ );
5553
+ }
5554
+ var dayButtonClasses = [
5555
+ "cursor-pointer relative flex size-8 items-center justify-center",
5556
+ "whitespace-nowrap rounded-md p-0 text-foreground",
5557
+ "transition-colors duration-200",
5558
+ "group-[[data-selected]:not(.range-middle)]:[transition-property:color,background-color,border-radius,box-shadow]",
5559
+ "group-[[data-selected]:not(.range-middle)]:duration-150",
5560
+ "group-data-disabled:pointer-events-none",
5561
+ "focus-visible:z-10",
5562
+ "hover:not-in-data-selected:bg-accent",
5563
+ "group-data-selected:bg-primary",
5564
+ "hover:not-in-data-selected:text-foreground",
5565
+ "group-data-selected:text-primary-foreground",
5566
+ "group-data-disabled:text-foreground/30 group-data-disabled:line-through",
5567
+ "group-data-outside:text-foreground/30",
5568
+ "group-data-selected:group-data-outside:text-primary-foreground",
5569
+ "outline-none focus-visible:ring-ring/50 focus-visible:ring",
5570
+ "group-[.range-start:not(.range-end)]:rounded-e-none",
5571
+ "group-[.range-end:not(.range-start)]:rounded-s-none",
5572
+ "group-[.range-middle]:rounded-none",
5573
+ "group-[.range-middle]:group-data-selected:bg-accent",
5574
+ "group-[.range-middle]:group-data-selected:text-foreground"
5575
+ ].join(" ");
5576
+ function Calendar({
5577
+ className,
5578
+ classNames,
5579
+ showOutsideDays = true,
5580
+ ...props
5581
+ }) {
5582
+ return /* @__PURE__ */ jsx(
5583
+ DayPicker,
5584
+ {
5585
+ "data-slot": "calendar",
5586
+ showOutsideDays,
5587
+ className: cn("p-3", className),
5588
+ classNames: {
5589
+ months: "relative flex flex-col sm:flex-row gap-4",
5590
+ month: "w-full",
5591
+ month_caption: "relative mx-10 mb-1 flex h-8 items-center justify-center z-20",
5592
+ caption_label: "text-sm font-medium",
5593
+ nav: "absolute top-0 flex w-full justify-between z-10",
5594
+ button_previous: cn(
5595
+ buttonVariants({ variant: "ghost" }),
5596
+ "size-8 text-muted-foreground/80 hover:text-foreground p-0"
5597
+ ),
5598
+ button_next: cn(
5599
+ buttonVariants({ variant: "ghost" }),
5600
+ "size-8 text-muted-foreground/80 hover:text-foreground p-0"
5601
+ ),
5602
+ weekday: "size-8 p-0 text-xs font-medium text-muted-foreground/80",
5603
+ day_button: dayButtonClasses,
5604
+ day: "group size-8 px-0 py-px text-sm",
5605
+ range_start: "range-start",
5606
+ range_end: "range-end",
5607
+ range_middle: "range-middle",
5608
+ today: "*:after:pointer-events-none *:after:absolute *:after:bottom-1 *:after:start-1/2 *:after:z-10 *:after:size-0.75 *:after:-translate-x-1/2 rtl:*:after:translate-x-1/2 *:after:rounded-full *:after:bg-primary [&[data-selected]:not(.range-middle)>*]:after:bg-background [&[data-disabled]>*]:after:bg-foreground/30 *:after:transition-colors",
5609
+ outside: "text-muted-foreground data-selected:bg-accent/50 data-selected:text-muted-foreground",
5610
+ hidden: "invisible",
5611
+ week_number: "size-8 p-0 text-xs font-medium text-muted-foreground/80",
5612
+ ...classNames
5613
+ },
5614
+ components: {
5615
+ Chevron: (chevronProps) => {
5616
+ if (chevronProps.orientation === "left") {
5617
+ return /* @__PURE__ */ jsx(ChevronLeft, { className: "size-4 rtl:rotate-180" });
5618
+ }
5619
+ return /* @__PURE__ */ jsx(ChevronRight, { className: "size-4 rtl:rotate-180" });
5620
+ }
5621
+ },
5622
+ ...props
5623
+ }
5624
+ );
5625
+ }
5626
+ function DateField({
5627
+ className,
5628
+ children,
5629
+ ...props
5630
+ }) {
5631
+ return /* @__PURE__ */ jsx(
5632
+ DateField$1,
5633
+ {
5634
+ className: composeRenderProps(className, (className2) => cn(className2)),
5635
+ "data-slot": "datefield",
5636
+ ...props,
5637
+ children
5638
+ }
5639
+ );
5640
+ }
5641
+ function TimeField({
5642
+ className,
5643
+ children,
5644
+ ...props
5645
+ }) {
5646
+ return /* @__PURE__ */ jsx(
5647
+ TimeField$1,
5648
+ {
5649
+ className: composeRenderProps(className, (className2) => cn(className2)),
5650
+ "data-slot": "datefield",
5651
+ ...props,
5652
+ children
5653
+ }
5654
+ );
5655
+ }
5656
+ function DateSegment({ className, ...props }) {
5657
+ return /* @__PURE__ */ jsx(
5658
+ DateSegment$1,
5659
+ {
5660
+ className: composeRenderProps(
5661
+ className,
5662
+ (className2) => cn(
5663
+ "text-foreground inline-flex rounded px-0.5 caret-transparent outline-hidden data-[type=literal]:text-muted-foreground/70 data-[type=literal]:px-0 data-placeholder:text-muted-foreground/70 data-invalid:data-focused:bg-destructive data-invalid:data-placeholder:text-destructive data-invalid:text-destructive data-invalid:data-focused:data-placeholder:text-destructive-foreground data-invalid:data-focused:text-destructive-foreground data-focused:bg-accent data-focused:data-placeholder:text-foreground data-focused:text-foreground data-disabled:cursor-not-allowed data-disabled:opacity-50",
5664
+ className2
5665
+ )
5666
+ ),
5667
+ ...props
5668
+ }
5669
+ );
5670
+ }
5671
+ var dateInputStyles = "relative inline-flex items-center overflow-hidden whitespace-nowrap data-focus-within:ring-ring/30 data-focus-within:border-ring data-focus-within:outline-none data-focus-within:ring-[3px] data-focus-within:has-aria-invalid:ring-destructive/20 dark:data-focus-within:has-aria-invalid:ring-destructive/40 data-focus-within:has-aria-invalid:border-destructive";
5672
+ function DateInput({
5673
+ className,
5674
+ variant = "md",
5675
+ ...props
5676
+ }) {
5677
+ return /* @__PURE__ */ jsx(
5678
+ DateInput$1,
5679
+ {
5680
+ "data-slot": "input",
5681
+ className: composeRenderProps(
5682
+ className,
5683
+ (className2) => cn(inputVariants({ variant }), dateInputStyles, className2)
5684
+ ),
5685
+ ...props,
5686
+ children: (segment) => /* @__PURE__ */ jsx(DateSegment, { segment })
5687
+ }
5688
+ );
5689
+ }
5690
+ var labelVariants = cva(
5691
+ "text-sm leading-none text-foreground peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
5692
+ {
5693
+ variants: {
3989
5694
  variant: {
3990
5695
  primary: "font-medium",
3991
5696
  secondary: "font-normal"
@@ -4010,11 +5715,12 @@ function Label2({
4010
5715
  }
4011
5716
  );
4012
5717
  }
4013
- var Separator2 = React.forwardRef(
5718
+ var Separator2 = React4.forwardRef(
4014
5719
  ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx(
4015
5720
  SeparatorPrimitive.Root,
4016
5721
  {
4017
5722
  ref,
5723
+ "data-slot": "separator",
4018
5724
  decorative,
4019
5725
  orientation,
4020
5726
  className: cn(
@@ -4241,38 +5947,208 @@ function FieldError({
4241
5947
  }
4242
5948
  );
4243
5949
  }
4244
- var SwitchContext = React.createContext({
4245
- permanent: false
4246
- });
4247
- var useSwitchContext = () => {
4248
- const context = React.useContext(SwitchContext);
4249
- if (!context) {
4250
- throw new Error("SwitchIndicator must be used within a Switch component");
4251
- }
4252
- return context;
4253
- };
4254
- var switchShapes = {
4255
- pill: "rounded-full",
4256
- square: "rounded-md"
4257
- };
4258
- var switchSizes = {
4259
- xs: "h-4 w-7",
4260
- sm: "h-5 w-8",
4261
- md: "h-6 w-10",
4262
- lg: "h-8 w-14",
4263
- xl: "h-9 w-16"
4264
- };
4265
- var switchVariants = cva(
4266
- `
4267
- relative peer inline-flex shrink-0 cursor-pointer items-center rounded-full transition-colors
4268
- focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background
4269
- disabled:cursor-not-allowed disabled:opacity-50 data-[state=unchecked]:bg-input
4270
- aria-invalid:border aria-invalid:border-destructive/60 aria-invalid:ring-destructive/10 dark:aria-invalid:border-destructive dark:aria-invalid:ring-destructive/20
4271
- [[data-invalid=true]_&]:border [[data-invalid=true]_&]:border-destructive/60 [[data-invalid=true]_&]:ring-destructive/10 dark:[[data-invalid=true]_&]:border-destructive dark:[[data-invalid=true]_&]:ring-destructive/20
4272
- `,
4273
- {
4274
- variants: {
4275
- shape: switchShapes,
5950
+ function InputOTP({
5951
+ className,
5952
+ containerClassName,
5953
+ ...props
5954
+ }) {
5955
+ return /* @__PURE__ */ jsx(
5956
+ OTPInput,
5957
+ {
5958
+ "data-slot": "input-otp",
5959
+ containerClassName: cn(
5960
+ "flex items-center gap-2 has-disabled:opacity-50",
5961
+ containerClassName
5962
+ ),
5963
+ className: cn("disabled:cursor-not-allowed", className),
5964
+ ...props
5965
+ }
5966
+ );
5967
+ }
5968
+ function InputOTPGroup({ className, ...props }) {
5969
+ return /* @__PURE__ */ jsx(
5970
+ "div",
5971
+ {
5972
+ "data-slot": "input-otp-group",
5973
+ className: cn("flex items-center", className),
5974
+ ...props
5975
+ }
5976
+ );
5977
+ }
5978
+ function InputOTPSlot({
5979
+ index,
5980
+ className,
5981
+ ...props
5982
+ }) {
5983
+ const inputOTPContext = React4.useContext(OTPInputContext);
5984
+ const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
5985
+ return /* @__PURE__ */ jsxs(
5986
+ "div",
5987
+ {
5988
+ "data-slot": "input-otp-slot",
5989
+ "data-active": isActive,
5990
+ className: cn(
5991
+ "data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex size-9 items-center justify-center border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]",
5992
+ className
5993
+ ),
5994
+ ...props,
5995
+ children: [
5996
+ char,
5997
+ hasFakeCaret && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "animate-caret-blink bg-foreground h-4 w-px duration-1000" }) })
5998
+ ]
5999
+ }
6000
+ );
6001
+ }
6002
+ function InputOTPSeparator({ ...props }) {
6003
+ return /* @__PURE__ */ jsx("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: /* @__PURE__ */ jsx(MinusIcon, {}) });
6004
+ }
6005
+ var radioGroupVariants = cva("grid gap-2.5", {
6006
+ variants: {
6007
+ variant: {
6008
+ primary: "",
6009
+ mono: ""
6010
+ },
6011
+ size: {
6012
+ sm: "",
6013
+ md: "",
6014
+ lg: ""
6015
+ }
6016
+ },
6017
+ defaultVariants: {
6018
+ variant: "primary",
6019
+ size: "md"
6020
+ }
6021
+ });
6022
+ var RadioGroupContext = React4.createContext({ variant: "primary", size: "md" });
6023
+ function RadioGroup2({
6024
+ className,
6025
+ variant,
6026
+ size,
6027
+ ...props
6028
+ }) {
6029
+ return /* @__PURE__ */ jsx(
6030
+ RadioGroupContext.Provider,
6031
+ {
6032
+ value: { variant: variant ?? "primary", size: size ?? "md" },
6033
+ children: /* @__PURE__ */ jsx(
6034
+ RadioGroup.Root,
6035
+ {
6036
+ "data-slot": "radio-group",
6037
+ className: cn(radioGroupVariants({ variant, size }), className),
6038
+ ...props
6039
+ }
6040
+ )
6041
+ }
6042
+ );
6043
+ }
6044
+ var radioItemVariants = cva(
6045
+ "peer aspect-square rounded-full border outline-hidden ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive/60 aria-invalid:ring-destructive/10 dark:aria-invalid:border-destructive dark:aria-invalid:ring-destructive/20 [[data-invalid=true]_&]:border-destructive/60 [[data-invalid=true]_&]:ring-destructive/10 dark:[[data-invalid=true]_&]:border-destructive dark:[[data-invalid=true]_&]:ring-destructive/20 border-input text-primary data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=checked]:text-primary-foreground",
6046
+ {
6047
+ variants: {
6048
+ size: {
6049
+ sm: "size-4.5 [&_svg]:size-2",
6050
+ md: "size-5 [&_svg]:size-2.5",
6051
+ lg: "size-5.5 [&_svg]:size-3"
6052
+ }
6053
+ },
6054
+ defaultVariants: {
6055
+ size: "md"
6056
+ }
6057
+ }
6058
+ );
6059
+ function RadioGroupItem({
6060
+ className,
6061
+ size,
6062
+ ...props
6063
+ }) {
6064
+ const { size: contextSize } = React4.useContext(RadioGroupContext);
6065
+ const effectiveSize = size ?? contextSize;
6066
+ return /* @__PURE__ */ jsx(
6067
+ RadioGroup.Item,
6068
+ {
6069
+ "data-slot": "radio-group-item",
6070
+ className: cn(radioItemVariants({ size: effectiveSize }), className),
6071
+ ...props,
6072
+ children: /* @__PURE__ */ jsx(
6073
+ RadioGroup.Indicator,
6074
+ {
6075
+ "data-slot": "radio-group-indicator",
6076
+ className: "flex items-center justify-center",
6077
+ children: /* @__PURE__ */ jsx(Circle, { className: "fill-current text-current" })
6078
+ }
6079
+ )
6080
+ }
6081
+ );
6082
+ }
6083
+ function Slider({
6084
+ className,
6085
+ children,
6086
+ ...props
6087
+ }) {
6088
+ return /* @__PURE__ */ jsxs(
6089
+ Slider$1.Root,
6090
+ {
6091
+ "data-slot": "slider",
6092
+ className: cn(
6093
+ "relative flex h-4 w-full touch-none select-none items-center data-disabled:cursor-not-allowed data-disabled:opacity-50",
6094
+ className
6095
+ ),
6096
+ ...props,
6097
+ children: [
6098
+ /* @__PURE__ */ jsx(Slider$1.Track, { className: "relative h-1.5 w-full overflow-hidden rounded-full bg-accent", children: /* @__PURE__ */ jsx(Slider$1.Range, { className: "absolute h-full bg-primary" }) }),
6099
+ children
6100
+ ]
6101
+ }
6102
+ );
6103
+ }
6104
+ function SliderThumb({
6105
+ className,
6106
+ ...props
6107
+ }) {
6108
+ return /* @__PURE__ */ jsx(
6109
+ Slider$1.Thumb,
6110
+ {
6111
+ "data-slot": "slider-thumb",
6112
+ className: cn(
6113
+ "box-content block size-4 shrink-0 cursor-pointer rounded-full border-2 border-primary bg-primary-foreground shadow-xs shadow-black/5 outline-hidden",
6114
+ className
6115
+ ),
6116
+ ...props
6117
+ }
6118
+ );
6119
+ }
6120
+ var SwitchContext = React4.createContext({
6121
+ permanent: false
6122
+ });
6123
+ var useSwitchContext = () => {
6124
+ const context = React4.useContext(SwitchContext);
6125
+ if (!context) {
6126
+ throw new Error("SwitchIndicator must be used within a Switch component");
6127
+ }
6128
+ return context;
6129
+ };
6130
+ var switchShapes = {
6131
+ pill: "rounded-full",
6132
+ square: "rounded-md"
6133
+ };
6134
+ var switchSizes = {
6135
+ xs: "h-4 w-7",
6136
+ sm: "h-5 w-8",
6137
+ md: "h-6 w-10",
6138
+ lg: "h-8 w-14",
6139
+ xl: "h-9 w-16"
6140
+ };
6141
+ var switchVariants = cva(
6142
+ `
6143
+ relative peer inline-flex shrink-0 cursor-pointer items-center rounded-full transition-colors
6144
+ focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background
6145
+ disabled:cursor-not-allowed disabled:opacity-50 data-[state=unchecked]:bg-input
6146
+ aria-invalid:border aria-invalid:border-destructive/60 aria-invalid:ring-destructive/10 dark:aria-invalid:border-destructive dark:aria-invalid:ring-destructive/20
6147
+ [[data-invalid=true]_&]:border [[data-invalid=true]_&]:border-destructive/60 [[data-invalid=true]_&]:ring-destructive/10 dark:[[data-invalid=true]_&]:border-destructive dark:[[data-invalid=true]_&]:ring-destructive/20
6148
+ `,
6149
+ {
6150
+ variants: {
6151
+ shape: switchShapes,
4276
6152
  size: switchSizes,
4277
6153
  permanent: {
4278
6154
  true: "bg-input",
@@ -4412,6 +6288,43 @@ function SwitchIndicator({
4412
6288
  }
4413
6289
  );
4414
6290
  }
6291
+ var textareaVariants = cva(
6292
+ `
6293
+ w-full bg-background border border-input shadow-xs shadow-black/5 transition-[color,box-shadow]
6294
+ text-foreground placeholder:text-muted-foreground/80
6295
+ focus-visible:border-ring focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/30
6296
+ disabled:cursor-not-allowed disabled:opacity-50
6297
+ [&[readonly]]:bg-muted/80 [&[readonly]]:cursor-not-allowed
6298
+ aria-invalid:border-destructive/60 aria-invalid:ring-destructive/10
6299
+ dark:aria-invalid:border-destructive dark:aria-invalid:ring-destructive/20
6300
+ `,
6301
+ {
6302
+ variants: {
6303
+ variant: {
6304
+ sm: "px-2.5 py-2.5 text-xs rounded-md",
6305
+ md: "px-3 py-3 text-[0.8125rem] leading-[var(--text-sm--line-height)] rounded-md",
6306
+ lg: "px-4 py-4 text-sm rounded-md"
6307
+ }
6308
+ },
6309
+ defaultVariants: {
6310
+ variant: "md"
6311
+ }
6312
+ }
6313
+ );
6314
+ function Textarea({
6315
+ className,
6316
+ variant,
6317
+ ...props
6318
+ }) {
6319
+ return /* @__PURE__ */ jsx(
6320
+ "textarea",
6321
+ {
6322
+ "data-slot": "textarea",
6323
+ className: cn(textareaVariants({ variant }), className),
6324
+ ...props
6325
+ }
6326
+ );
6327
+ }
4415
6328
  function ScrollArea({
4416
6329
  className,
4417
6330
  viewportClassName,
@@ -4688,27 +6601,474 @@ function ToolbarActions({
4688
6601
  }
4689
6602
  );
4690
6603
  }
4691
- var MOBILE_BREAKPOINT = 992;
4692
- function useIsMobile() {
4693
- const [isMobile, setIsMobile] = React.useState(
4694
- void 0
6604
+ function Progress({
6605
+ className,
6606
+ indicatorClassName,
6607
+ value,
6608
+ ...props
6609
+ }) {
6610
+ return /* @__PURE__ */ jsx(
6611
+ Progress$1.Root,
6612
+ {
6613
+ "data-slot": "progress",
6614
+ className: cn(
6615
+ "relative h-1.5 w-full overflow-hidden rounded-full bg-secondary",
6616
+ className
6617
+ ),
6618
+ ...props,
6619
+ children: /* @__PURE__ */ jsx(
6620
+ Progress$1.Indicator,
6621
+ {
6622
+ "data-slot": "progress-indicator",
6623
+ className: cn(
6624
+ "h-full w-full flex-1 bg-primary transition-all",
6625
+ indicatorClassName
6626
+ ),
6627
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
6628
+ }
6629
+ )
6630
+ }
6631
+ );
6632
+ }
6633
+ function ProgressCircle({
6634
+ className,
6635
+ indicatorClassName,
6636
+ trackClassName,
6637
+ value = 0,
6638
+ size = 48,
6639
+ strokeWidth = 4,
6640
+ children,
6641
+ ...props
6642
+ }) {
6643
+ const radius = (size - strokeWidth) / 2;
6644
+ const circumference = radius * 2 * Math.PI;
6645
+ const offset = circumference - value / 100 * circumference;
6646
+ return /* @__PURE__ */ jsxs(
6647
+ "div",
6648
+ {
6649
+ "data-slot": "progress-circle",
6650
+ role: "progressbar",
6651
+ "aria-valuenow": value,
6652
+ "aria-valuemin": 0,
6653
+ "aria-valuemax": 100,
6654
+ className: cn(
6655
+ "relative inline-flex items-center justify-center",
6656
+ className
6657
+ ),
6658
+ style: { width: size, height: size },
6659
+ ...props,
6660
+ children: [
6661
+ /* @__PURE__ */ jsxs(
6662
+ "svg",
6663
+ {
6664
+ className: "absolute inset-0 -rotate-90",
6665
+ width: size,
6666
+ height: size,
6667
+ viewBox: `0 0 ${size} ${size}`,
6668
+ children: [
6669
+ /* @__PURE__ */ jsx(
6670
+ "circle",
6671
+ {
6672
+ "data-slot": "progress-circle-track",
6673
+ cx: size / 2,
6674
+ cy: size / 2,
6675
+ r: radius,
6676
+ stroke: "currentColor",
6677
+ strokeWidth,
6678
+ fill: "none",
6679
+ className: cn("text-secondary", trackClassName)
6680
+ }
6681
+ ),
6682
+ /* @__PURE__ */ jsx(
6683
+ "circle",
6684
+ {
6685
+ "data-slot": "progress-circle-indicator",
6686
+ cx: size / 2,
6687
+ cy: size / 2,
6688
+ r: radius,
6689
+ stroke: "currentColor",
6690
+ strokeWidth,
6691
+ fill: "none",
6692
+ strokeDasharray: circumference,
6693
+ strokeDashoffset: offset,
6694
+ strokeLinecap: "round",
6695
+ className: cn(
6696
+ "text-primary transition-all duration-300 ease-in-out",
6697
+ indicatorClassName
6698
+ )
6699
+ }
6700
+ )
6701
+ ]
6702
+ }
6703
+ ),
6704
+ children && /* @__PURE__ */ jsx(
6705
+ "div",
6706
+ {
6707
+ "data-slot": "progress-circle-content",
6708
+ className: "relative z-10 flex items-center justify-center text-sm font-medium",
6709
+ children
6710
+ }
6711
+ )
6712
+ ]
6713
+ }
6714
+ );
6715
+ }
6716
+ function ProgressRadial({
6717
+ className,
6718
+ value = 0,
6719
+ size = 120,
6720
+ strokeWidth = 8,
6721
+ startAngle = -90,
6722
+ endAngle = 90,
6723
+ showLabel = false,
6724
+ trackClassName,
6725
+ indicatorClassName,
6726
+ children,
6727
+ ...props
6728
+ }) {
6729
+ const radius = (size - strokeWidth) / 2;
6730
+ const angleRange = endAngle - startAngle;
6731
+ const progressAngle = value / 100 * angleRange;
6732
+ const toRadians = (degrees) => degrees * Math.PI / 180;
6733
+ const startX = size / 2 + radius * Math.cos(toRadians(startAngle));
6734
+ const startY = size / 2 + radius * Math.sin(toRadians(startAngle));
6735
+ const endX = size / 2 + radius * Math.cos(toRadians(startAngle + progressAngle));
6736
+ const endY = size / 2 + radius * Math.sin(toRadians(startAngle + progressAngle));
6737
+ const largeArc = progressAngle > 180 ? 1 : 0;
6738
+ const pathData = [
6739
+ "M",
6740
+ startX,
6741
+ startY,
6742
+ "A",
6743
+ radius,
6744
+ radius,
6745
+ 0,
6746
+ largeArc,
6747
+ 1,
6748
+ endX,
6749
+ endY
6750
+ ].join(" ");
6751
+ return /* @__PURE__ */ jsxs(
6752
+ "div",
6753
+ {
6754
+ "data-slot": "progress-radial",
6755
+ role: "progressbar",
6756
+ "aria-valuenow": value,
6757
+ "aria-valuemin": 0,
6758
+ "aria-valuemax": 100,
6759
+ className: cn(
6760
+ "relative inline-flex items-center justify-center",
6761
+ className
6762
+ ),
6763
+ style: { width: size, height: size },
6764
+ ...props,
6765
+ children: [
6766
+ /* @__PURE__ */ jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [
6767
+ /* @__PURE__ */ jsx(
6768
+ "path",
6769
+ {
6770
+ d: [
6771
+ "M",
6772
+ size / 2 + radius * Math.cos(toRadians(startAngle)),
6773
+ size / 2 + radius * Math.sin(toRadians(startAngle)),
6774
+ "A",
6775
+ radius,
6776
+ radius,
6777
+ 0,
6778
+ angleRange > 180 ? 1 : 0,
6779
+ 1,
6780
+ size / 2 + radius * Math.cos(toRadians(endAngle)),
6781
+ size / 2 + radius * Math.sin(toRadians(endAngle))
6782
+ ].join(" "),
6783
+ stroke: "currentColor",
6784
+ strokeWidth,
6785
+ fill: "none",
6786
+ strokeLinecap: "round",
6787
+ className: cn("text-secondary", trackClassName)
6788
+ }
6789
+ ),
6790
+ /* @__PURE__ */ jsx(
6791
+ "path",
6792
+ {
6793
+ d: pathData,
6794
+ stroke: "currentColor",
6795
+ strokeWidth,
6796
+ fill: "none",
6797
+ strokeLinecap: "round",
6798
+ className: cn(
6799
+ "text-primary transition-all duration-300 ease-in-out",
6800
+ indicatorClassName
6801
+ )
6802
+ }
6803
+ )
6804
+ ] }),
6805
+ (showLabel || children) && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: children || /* @__PURE__ */ jsxs("span", { className: "text-lg font-bold", children: [
6806
+ value,
6807
+ "%"
6808
+ ] }) })
6809
+ ]
6810
+ }
6811
+ );
6812
+ }
6813
+ function NavigationMenu({
6814
+ className,
6815
+ children,
6816
+ viewport = true,
6817
+ ...props
6818
+ }) {
6819
+ return /* @__PURE__ */ jsxs(
6820
+ NavigationMenu$1.Root,
6821
+ {
6822
+ "data-slot": "navigation-menu",
6823
+ "data-viewport": viewport,
6824
+ className: cn(
6825
+ "group/navigation-menu relative flex max-w-max flex-1 items-center justify-center",
6826
+ className
6827
+ ),
6828
+ ...props,
6829
+ children: [
6830
+ children,
6831
+ viewport && /* @__PURE__ */ jsx(NavigationMenuViewport, {})
6832
+ ]
6833
+ }
6834
+ );
6835
+ }
6836
+ function NavigationMenuList({
6837
+ className,
6838
+ ...props
6839
+ }) {
6840
+ return /* @__PURE__ */ jsx(
6841
+ NavigationMenu$1.List,
6842
+ {
6843
+ "data-slot": "navigation-menu-list",
6844
+ className: cn(
6845
+ "group flex flex-1 list-none items-center justify-center gap-1",
6846
+ className
6847
+ ),
6848
+ ...props
6849
+ }
6850
+ );
6851
+ }
6852
+ function NavigationMenuItem({
6853
+ className,
6854
+ ...props
6855
+ }) {
6856
+ return /* @__PURE__ */ jsx(
6857
+ NavigationMenu$1.Item,
6858
+ {
6859
+ "data-slot": "navigation-menu-item",
6860
+ className: cn("relative", className),
6861
+ ...props
6862
+ }
6863
+ );
6864
+ }
6865
+ var navigationMenuTriggerStyle = cva(
6866
+ "cursor-pointer group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[active=true]:bg-accent/50 data-[state=open]:bg-accent/50 data-[active=true]:text-accent-foreground ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-1"
6867
+ );
6868
+ function NavigationMenuTrigger({
6869
+ className,
6870
+ children,
6871
+ ...props
6872
+ }) {
6873
+ return /* @__PURE__ */ jsxs(
6874
+ NavigationMenu$1.Trigger,
6875
+ {
6876
+ "data-slot": "navigation-menu-trigger",
6877
+ className: cn(navigationMenuTriggerStyle(), className),
6878
+ ...props,
6879
+ children: [
6880
+ children,
6881
+ " ",
6882
+ /* @__PURE__ */ jsx(
6883
+ ChevronDownIcon,
6884
+ {
6885
+ className: "relative top-px ms-1 size-3.5 opacity-60 transition duration-300 group-data-[state=open]:rotate-180",
6886
+ "aria-hidden": "true"
6887
+ }
6888
+ )
6889
+ ]
6890
+ }
6891
+ );
6892
+ }
6893
+ function NavigationMenuContent({
6894
+ className,
6895
+ ...props
6896
+ }) {
6897
+ return /* @__PURE__ */ jsx(
6898
+ NavigationMenu$1.Content,
6899
+ {
6900
+ "data-slot": "navigation-menu-content",
6901
+ className: cn(
6902
+ "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52! data-[motion=from-start]:slide-in-from-left-52! data-[motion=to-end]:slide-out-to-right-52! data-[motion=to-start]:slide-out-to-left-52! top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto",
6903
+ "group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none",
6904
+ className
6905
+ ),
6906
+ ...props
6907
+ }
6908
+ );
6909
+ }
6910
+ function NavigationMenuViewport({
6911
+ className,
6912
+ ...props
6913
+ }) {
6914
+ return /* @__PURE__ */ jsx(
6915
+ "div",
6916
+ {
6917
+ className: cn(
6918
+ "absolute top-full right-0 isolate z-50 flex items-center justify-center"
6919
+ ),
6920
+ children: /* @__PURE__ */ jsx(
6921
+ NavigationMenu$1.Viewport,
6922
+ {
6923
+ "data-slot": "navigation-menu-viewport",
6924
+ className: cn(
6925
+ "shadow-md shadow-black/5 rounded-md border border-border bg-popover text-popover-foreground p-1.5 origin-top-center data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-(--radix-navigation-menu-viewport-height) w-full overflow-hidden md:w-(--radix-navigation-menu-viewport-width)",
6926
+ className
6927
+ ),
6928
+ ...props
6929
+ }
6930
+ )
6931
+ }
6932
+ );
6933
+ }
6934
+ function NavigationMenuLink({
6935
+ className,
6936
+ ...props
6937
+ }) {
6938
+ return /* @__PURE__ */ jsx(
6939
+ NavigationMenu$1.Link,
6940
+ {
6941
+ "data-slot": "navigation-menu-link",
6942
+ className: cn(
6943
+ "hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 flex flex-col gap-1 rounded-md p-2 text-sm transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-1",
6944
+ className
6945
+ ),
6946
+ ...props
6947
+ }
6948
+ );
6949
+ }
6950
+ function NavigationMenuIndicator({
6951
+ className,
6952
+ ...props
6953
+ }) {
6954
+ return /* @__PURE__ */ jsx(
6955
+ NavigationMenu$1.Indicator,
6956
+ {
6957
+ "data-slot": "navigation-menu-indicator",
6958
+ className: cn(
6959
+ "data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-10 flex h-1.5 items-end justify-center overflow-hidden",
6960
+ className
6961
+ ),
6962
+ ...props,
6963
+ children: /* @__PURE__ */ jsx("div", { className: "bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-ts-md shadow-md" })
6964
+ }
6965
+ );
6966
+ }
6967
+ function Pagination({ className, ...props }) {
6968
+ return /* @__PURE__ */ jsx(
6969
+ "nav",
6970
+ {
6971
+ "data-slot": "pagination",
6972
+ role: "navigation",
6973
+ "aria-label": "pagination",
6974
+ className: cn("mx-auto flex w-full justify-center", className),
6975
+ ...props
6976
+ }
6977
+ );
6978
+ }
6979
+ function PaginationContent({
6980
+ className,
6981
+ ...props
6982
+ }) {
6983
+ return /* @__PURE__ */ jsx(
6984
+ "ul",
6985
+ {
6986
+ "data-slot": "pagination-content",
6987
+ className: cn("flex flex-row items-center gap-1", className),
6988
+ ...props
6989
+ }
6990
+ );
6991
+ }
6992
+ function PaginationItem({ className, ...props }) {
6993
+ return /* @__PURE__ */ jsx("li", { "data-slot": "pagination-item", className, ...props });
6994
+ }
6995
+ function PaginationEllipsis({
6996
+ className,
6997
+ ...props
6998
+ }) {
6999
+ return /* @__PURE__ */ jsxs(
7000
+ "span",
7001
+ {
7002
+ "data-slot": "pagination-ellipsis",
7003
+ "aria-hidden": true,
7004
+ className: cn("flex size-9 items-center justify-center", className),
7005
+ ...props,
7006
+ children: [
7007
+ /* @__PURE__ */ jsx(MoreHorizontal, { className: "size-4" }),
7008
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "More pages" })
7009
+ ]
7010
+ }
7011
+ );
7012
+ }
7013
+ var TimelineItem = React4.forwardRef(
7014
+ ({ line, icon: Icon, children, removeSpace, className }, ref) => {
7015
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex items-start relative", className), children: [
7016
+ line && /* @__PURE__ */ jsx(
7017
+ "div",
7018
+ {
7019
+ className: cn(
7020
+ "w-9 start-0 top-9 absolute bottom-0",
7021
+ "translate-x-1/2 rtl:-translate-x-1/2",
7022
+ "border-s border-s-input"
7023
+ )
7024
+ }
7025
+ ),
7026
+ /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center shrink-0 rounded-full bg-accent/60 border border-input size-9 text-secondary-foreground", children: /* @__PURE__ */ jsx(Icon, { size: 16, className: "text-base" }) }),
7027
+ /* @__PURE__ */ jsx("div", { className: cn("ps-2.5 text-base grow", !removeSpace && "mb-7"), children })
7028
+ ] });
7029
+ }
7030
+ );
7031
+ TimelineItem.displayName = "TimelineItem";
7032
+ var kbdVariants = cva(
7033
+ "inline-flex items-center justify-center font-mono rounded-md",
7034
+ {
7035
+ variants: {
7036
+ variant: {
7037
+ default: "bg-accent border border-border text-accent-foreground",
7038
+ outline: "text-accent-foreground border border-input"
7039
+ },
7040
+ size: {
7041
+ md: "h-7 min-w-7 px-1.5 text-xs [&_svg]:size-3.5",
7042
+ sm: "h-6 min-w-6 px-1 text-xs leading-3 [&_svg]:size-3",
7043
+ xs: "h-5 min-w-5 px-1 text-xs leading-3 [&_svg]:size-3"
7044
+ }
7045
+ },
7046
+ defaultVariants: {
7047
+ variant: "default",
7048
+ size: "md"
7049
+ }
7050
+ }
7051
+ );
7052
+ function Kbd({
7053
+ className,
7054
+ variant,
7055
+ size,
7056
+ ...props
7057
+ }) {
7058
+ return /* @__PURE__ */ jsx(
7059
+ "kbd",
7060
+ {
7061
+ "data-slot": "kbd",
7062
+ className: cn(kbdVariants({ variant, size }), className),
7063
+ ...props
7064
+ }
4695
7065
  );
4696
- React.useEffect(() => {
4697
- const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
4698
- const onChange = () => {
4699
- setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
4700
- };
4701
- mql.addEventListener("change", onChange);
4702
- setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
4703
- return () => mql.removeEventListener("change", onChange);
4704
- }, []);
4705
- return !!isMobile;
4706
7066
  }
4707
7067
  function useCopyToClipboard({
4708
7068
  timeout = 2e3,
4709
7069
  onCopy
4710
7070
  } = {}) {
4711
- const [isCopied, setIsCopied] = React.useState(false);
7071
+ const [isCopied, setIsCopied] = React4.useState(false);
4712
7072
  const copyToClipboard = (value) => {
4713
7073
  if (typeof window === "undefined" || !navigator.clipboard.writeText) {
4714
7074
  return;
@@ -4726,14 +7086,92 @@ function useCopyToClipboard({
4726
7086
  };
4727
7087
  return { isCopied, copyToClipboard };
4728
7088
  }
7089
+ var codeVariants = cva("relative rounded-md font-mono font-medium", {
7090
+ variants: {
7091
+ variant: {
7092
+ default: "bg-muted text-muted-foreground",
7093
+ destructive: "bg-destructive/10 text-destructive",
7094
+ outline: "border border-border bg-background text-foreground"
7095
+ },
7096
+ size: {
7097
+ default: "text-sm px-2.5 py-1.5",
7098
+ sm: "text-xs px-2 py-1.5",
7099
+ lg: "text-base px-3 py-1.5"
7100
+ }
7101
+ },
7102
+ defaultVariants: {
7103
+ variant: "default",
7104
+ size: "default"
7105
+ }
7106
+ });
7107
+ function Code({
7108
+ className,
7109
+ variant,
7110
+ size,
7111
+ asChild = false,
7112
+ showCopyButton = false,
7113
+ copyText,
7114
+ children,
7115
+ ...props
7116
+ }) {
7117
+ const { isCopied, copyToClipboard } = useCopyToClipboard();
7118
+ const Comp = asChild ? Slot : "code";
7119
+ const textToCopy = copyText || (typeof children === "string" ? children : "");
7120
+ return /* @__PURE__ */ jsxs(
7121
+ "span",
7122
+ {
7123
+ className: cn("inline-flex items-center gap-2", className),
7124
+ "data-slot": "code",
7125
+ children: [
7126
+ /* @__PURE__ */ jsx(
7127
+ Comp,
7128
+ {
7129
+ "data-slot": "code-panel",
7130
+ className: cn(codeVariants({ variant, size })),
7131
+ ...props,
7132
+ children
7133
+ }
7134
+ ),
7135
+ showCopyButton && textToCopy && /* @__PURE__ */ jsx(
7136
+ Button,
7137
+ {
7138
+ mode: "icon",
7139
+ size: "sm",
7140
+ variant: "ghost",
7141
+ "aria-label": isCopied ? "Copied" : "Copy to clipboard",
7142
+ className: "size-4 p-0 opacity-60 hover:opacity-100",
7143
+ onClick: () => copyToClipboard(textToCopy),
7144
+ children: isCopied ? /* @__PURE__ */ jsx(Check, { className: "size-3" }) : /* @__PURE__ */ jsx(Copy, { className: "size-3" })
7145
+ }
7146
+ )
7147
+ ]
7148
+ }
7149
+ );
7150
+ }
7151
+ var MOBILE_BREAKPOINT = 992;
7152
+ function useIsMobile() {
7153
+ const [isMobile, setIsMobile] = React4.useState(
7154
+ void 0
7155
+ );
7156
+ React4.useEffect(() => {
7157
+ const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
7158
+ const onChange = () => {
7159
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
7160
+ };
7161
+ mql.addEventListener("change", onChange);
7162
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
7163
+ return () => mql.removeEventListener("change", onChange);
7164
+ }, []);
7165
+ return !!isMobile;
7166
+ }
4729
7167
  function useMounted() {
4730
- const [mounted, setMounted] = React.useState(false);
4731
- React.useEffect(() => {
7168
+ const [mounted, setMounted] = React4.useState(false);
7169
+ React4.useEffect(() => {
4732
7170
  setMounted(true);
4733
7171
  }, []);
4734
7172
  return mounted;
4735
7173
  }
4736
7174
 
4737
- export { Alert, AlertContent, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertIcon, AlertTitle, AlertToolbar, AspectRatio, Avatar, AvatarFallback, AvatarGroup, AvatarGroupItem, AvatarGroupTooltip, AvatarImage, AvatarIndicator, AvatarStatus, Badge, BadgeButton, BadgeDot, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonArrow, Card, CardContent, CardDescription, CardFooter, CardHeader, CardHeading, CardTable, CardTitle, CardToolbar, Checkbox, DataGrid, DataGridColumnHeader, DataGridColumnVisibility, DataGridContainer, DataGridPagination, DataGridProvider, DataGridTable, DataGridTableBase, DataGridTableBody, DataGridTableBodyRow, DataGridTableBodyRowCell, DataGridTableBodyRowExpanded, DataGridTableBodyRowSkeleton, DataGridTableBodyRowSkeletonCell, DataGridTableEmpty, DataGridTableHead, DataGridTableHeadRow, DataGridTableHeadRowCell, DataGridTableHeadRowCellResize, DataGridTableLoader, DataGridTableRowSelect, DataGridTableRowSelectAll, DataGridTableRowSpacer, Dialog, DialogBody, 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, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, HoverCard, HoverCardContent, HoverCardTrigger, Icons, Input, InputAddon, InputGroup, InputWrapper, Label2 as Label, Popover, PopoverContent, PopoverTrigger, ScrollArea, ScrollBar, Scrollspy, Select, SelectContent, SelectGroup, SelectIndicator, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator2 as Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Spinner, Switch, SwitchIndicator, SwitchWrapper, Tabs, TabsContent, TabsList, TabsTrigger, Toolbar, ToolbarActions, ToolbarDescription, ToolbarHeading, ToolbarTitle, avatarStatusVariants, badgeVariants, buttonVariantConfig, buttonVariants, cn, headings, inputAddonVariants, inputVariants, labelVariants, selectTriggerVariants, switchShapes, switchSizes, tabsListVariantConfig, useCopyToClipboard, useDataGrid, useIsMobile, useMounted };
7175
+ export { Accordion, AccordionContent, AccordionItem, AccordionMenu, AccordionMenuGroup, AccordionMenuIndicator, AccordionMenuItem, AccordionMenuLabel, AccordionMenuSeparator, AccordionMenuSub, AccordionMenuSubContent, AccordionMenuSubTrigger, AccordionTrigger, Alert, AlertContent, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertIcon, AlertTitle, AlertToolbar, AspectRatio, Avatar, AvatarFallback, AvatarGroup, AvatarGroupItem, AvatarGroupTooltip, AvatarImage, AvatarIndicator, AvatarStatus, Badge, BadgeButton, BadgeDot, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonArrow, Calendar, Card, CardContent, CardDescription, CardFooter, CardHeader, CardHeading, CardTable, CardTitle, CardToolbar, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Code, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandCheck, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DataGrid, DataGridColumnHeader, DataGridColumnVisibility, DataGridContainer, DataGridPagination, DataGridProvider, DataGridTable, DataGridTableBase, DataGridTableBody, DataGridTableBodyRow, DataGridTableBodyRowCell, DataGridTableBodyRowExpanded, DataGridTableBodyRowSkeleton, DataGridTableBodyRowSkeletonCell, DataGridTableEmpty, DataGridTableHead, DataGridTableHeadRow, DataGridTableHeadRowCell, DataGridTableHeadRowCellResize, DataGridTableLoader, DataGridTableRowSelect, DataGridTableRowSelectAll, DataGridTableRowSpacer, DateField, DateInput, DateSegment, Dialog, DialogBody, 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, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, HoverCard, HoverCardContent, HoverCardTrigger, Icons, Input, InputAddon, InputGroup, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InputWrapper, Kanban, KanbanBoard, KanbanColumn, KanbanColumnContent, KanbanColumnHandle, KanbanItem, KanbanItemHandle, KanbanOverlay, Kbd, Label2 as Label, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, Popover, PopoverContent, PopoverTrigger, Progress, ProgressCircle, ProgressRadial, RadioGroup2 as RadioGroup, RadioGroupItem, ScrollArea, ScrollBar, Scrollspy, Select, SelectContent, SelectGroup, SelectIndicator, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator2 as Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Slider, SliderThumb, Spinner, Switch, SwitchIndicator, SwitchWrapper, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, TimeField, TimelineItem, Toolbar, ToolbarActions, ToolbarDescription, ToolbarHeading, ToolbarTitle, avatarStatusVariants, badgeVariants, buttonVariantConfig, buttonVariants, cn, codeVariants, dateInputStyles, headings, inputAddonVariants, inputVariants, kbdVariants, labelVariants, navigationMenuTriggerStyle, radioGroupVariants, radioItemVariants, selectTriggerVariants, switchShapes, switchSizes, tabsListVariantConfig, textareaVariants, useChart, useCopyToClipboard, useDataGrid, useIsMobile, useMounted };
4738
7176
  //# sourceMappingURL=index.js.map
4739
7177
  //# sourceMappingURL=index.js.map