@mvn-ui/react 0.1.1 → 0.1.2

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.mjs CHANGED
@@ -5,7 +5,7 @@ import React49__default, { createContext, forwardRef, useRef, useState, useEffec
5
5
  import { cva } from 'class-variance-authority';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
7
  import { Slot } from '@radix-ui/react-slot';
8
- import { Loader2Icon, XIcon, EyeOffIcon, EyeIcon, ChevronDownIcon, ChevronUpIcon, CheckIcon, MinusIcon, CircleIcon, X, InboxIcon, ChevronRightIcon, ChevronsUpDownIcon, PanelLeftIcon, CalendarIcon, ArrowLeft, ArrowRight, Calendar as Calendar$1, ChevronLeft, ChevronRight, ChevronDown, Star, RotateCcw, MoreHorizontalIcon, ChevronLeftIcon, ChevronsLeftIcon, ChevronsRightIcon, GripVerticalIcon, FileDown, SearchIcon, TextAlignJustify, Scaling, Pin, ListFilter, Minus, Plus } from 'lucide-react';
8
+ import { Loader2Icon, XIcon, EyeOffIcon, EyeIcon, ChevronDownIcon, ChevronUpIcon, CheckIcon, MinusIcon, CircleIcon, X, InboxIcon, ChevronRightIcon, ChevronsUpDownIcon, CalendarIcon, ArrowLeft, ArrowRight, Calendar as Calendar$1, ChevronLeft, ChevronRight, ChevronDown, Star, RotateCcw, MoreHorizontalIcon, ChevronLeftIcon, ChevronsLeftIcon, ChevronsRightIcon, GripVerticalIcon, PanelLeftIcon, FileDown, SearchIcon, TextAlignJustify, Scaling, Pin, ListFilter, Minus, Plus } from 'lucide-react';
9
9
  import * as LabelPrimitive from '@radix-ui/react-label';
10
10
  import * as SelectPrimitive from '@radix-ui/react-select';
11
11
  import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
@@ -795,7 +795,28 @@ Textarea.displayName = "Textarea";
795
795
 
796
796
  // src/components/ui/select/index.tsx
797
797
  init_utils();
798
- var Select = SelectPrimitive.Root;
798
+ var Select = React49.forwardRef(
799
+ ({ children, value, onValueChange, ...props }, _ref) => {
800
+ const [internalValue, setInternalValue] = React49.useState(value ?? "");
801
+ React49.useEffect(() => {
802
+ setInternalValue(value ?? "");
803
+ }, [value]);
804
+ const handleValueChange = (newValue) => {
805
+ setInternalValue(newValue);
806
+ onValueChange?.(newValue);
807
+ };
808
+ return /* @__PURE__ */ jsx(
809
+ SelectPrimitive.Root,
810
+ {
811
+ value: internalValue,
812
+ onValueChange: handleValueChange,
813
+ ...props,
814
+ children
815
+ }
816
+ );
817
+ }
818
+ );
819
+ Select.displayName = "Select";
799
820
  var SelectGroup = SelectPrimitive.Group;
800
821
  var SelectValue = SelectPrimitive.Value;
801
822
  var triggerVariants = cva(
@@ -1157,7 +1178,7 @@ var toggleGroupVariants = cva(
1157
1178
  }
1158
1179
  );
1159
1180
  var toggleGroupItemVariants = cva(
1160
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-background data-[state=on]:text-foreground data-[state=on]:shadow-sm hover:bg-surface-3 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1181
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md border-b border-line-strong font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:border-primary data-[state=on]:text-primary hover:bg-surface-3 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1161
1182
  {
1162
1183
  variants: {
1163
1184
  size: {
@@ -1172,15 +1193,7 @@ var toggleGroupItemVariants = cva(
1172
1193
  }
1173
1194
  );
1174
1195
  var ToggleGroup = React49.forwardRef(
1175
- ({
1176
- className,
1177
- size,
1178
- items,
1179
- itemClassName,
1180
- renderItem,
1181
- children,
1182
- ...props
1183
- }, ref) => {
1196
+ ({ className, size, items, itemClassName, renderItem, children, ...props }, ref) => {
1184
1197
  const defaultRenderItem = React49.useCallback(
1185
1198
  (item) => /* @__PURE__ */ jsxs(
1186
1199
  ToggleGroupPrimitive.Item,
@@ -1273,21 +1286,18 @@ Slider.displayName = SliderPrimitive.Root.displayName;
1273
1286
 
1274
1287
  // src/components/ui/input-group/index.tsx
1275
1288
  init_utils();
1276
- var inputGroupVariants = cva(
1277
- "flex items-stretch w-full",
1278
- {
1279
- variants: {
1280
- size: {
1281
- sm: "h-8 text-sm",
1282
- default: "h-10 text-[0.9375rem]",
1283
- lg: "h-12 text-base"
1284
- }
1285
- },
1286
- defaultVariants: {
1287
- size: "default"
1289
+ var inputGroupVariants = cva("flex items-stretch w-full", {
1290
+ variants: {
1291
+ size: {
1292
+ sm: "h-8 text-sm",
1293
+ default: "h-10 text-[0.9375rem]",
1294
+ lg: "h-12 text-base"
1288
1295
  }
1296
+ },
1297
+ defaultVariants: {
1298
+ size: "default"
1289
1299
  }
1290
- );
1300
+ });
1291
1301
  var InputGroup = React49.forwardRef(
1292
1302
  ({
1293
1303
  className,
@@ -1329,9 +1339,8 @@ var InputGroup = React49.forwardRef(
1329
1339
  return React49.cloneElement(child, {
1330
1340
  className: cn(
1331
1341
  child.props.className,
1332
- leftAddon && "rounded-l-none border-l-0",
1333
- rightAddon && "rounded-r-none border-r-0",
1334
- (leftElement || rightElement) && "rounded-none"
1342
+ (leftAddon || leftElement) && "rounded-l-none border-l-0",
1343
+ (rightAddon || rightElement) && "rounded-r-none border-r-0"
1335
1344
  )
1336
1345
  });
1337
1346
  }
@@ -1459,7 +1468,7 @@ function deleteValueByPath(obj, path) {
1459
1468
 
1460
1469
  // src/components/ui/form/form-instance.ts
1461
1470
  var externalMounts = /* @__PURE__ */ new WeakMap();
1462
- function createFormInstance() {
1471
+ function createFormInstance(name) {
1463
1472
  const store = {
1464
1473
  values: {},
1465
1474
  errors: {}
@@ -1484,7 +1493,10 @@ function createFormInstance() {
1484
1493
  };
1485
1494
  subscribers.forEach((fn) => fn && fn(snapshot));
1486
1495
  fieldMeta.forEach((meta) => meta.onStoreChange && meta.onStoreChange());
1487
- if (ext) ext.forEach((handler) => handler.onStoreChange && handler.onStoreChange());
1496
+ if (ext)
1497
+ ext.forEach(
1498
+ (handler) => handler.onStoreChange && handler.onStoreChange()
1499
+ );
1488
1500
  }
1489
1501
  function scheduleNotify() {
1490
1502
  if (pendingNotify) return;
@@ -1515,8 +1527,8 @@ function createFormInstance() {
1515
1527
  if (options && options.clone === false) return store.values;
1516
1528
  return cloneDeep(store.values);
1517
1529
  },
1518
- getFieldValue(name) {
1519
- const path = toNamePath(name);
1530
+ getFieldValue(name2) {
1531
+ const path = toNamePath(name2);
1520
1532
  return getValueByPath(store.values, path);
1521
1533
  },
1522
1534
  setFieldsValue(vals, options) {
@@ -1582,24 +1594,27 @@ function createFormInstance() {
1582
1594
  instance.validateFields(names).catch((validationError) => {
1583
1595
  if (validationError && validationError.errorFields) {
1584
1596
  mounts.forEach((handler) => {
1585
- if (handler.onFieldsChange) handler.onFieldsChange(validationError.errorFields);
1597
+ if (handler.onFieldsChange)
1598
+ handler.onFieldsChange(validationError.errorFields);
1586
1599
  });
1587
1600
  try {
1588
1601
  const ext = externalMounts.get(instance);
1589
1602
  if (ext) {
1590
1603
  ext.forEach((handler) => {
1591
- if (handler.onFieldsChange) handler.onFieldsChange(validationError.errorFields);
1604
+ if (handler.onFieldsChange)
1605
+ handler.onFieldsChange(validationError.errorFields);
1592
1606
  });
1593
1607
  }
1594
1608
  } catch (error) {
1595
1609
  }
1596
- if (instance.onFieldsChange) instance.onFieldsChange(validationError.errorFields);
1610
+ if (instance.onFieldsChange)
1611
+ instance.onFieldsChange(validationError.errorFields);
1597
1612
  }
1598
1613
  });
1599
1614
  }
1600
1615
  },
1601
- setFieldValue(name, value) {
1602
- const path = toNamePath(name);
1616
+ setFieldValue(name2, value) {
1617
+ const path = toNamePath(name2);
1603
1618
  setValueByPath(store.values, path, value);
1604
1619
  const key = namePathToString(path);
1605
1620
  delete store.errors[key];
@@ -1724,16 +1739,21 @@ function createFormInstance() {
1724
1739
  return Promise.resolve({ ...store.values });
1725
1740
  });
1726
1741
  },
1727
- submit() {
1728
- instance.validateFields().then(() => {
1742
+ async submit() {
1743
+ try {
1744
+ await instance.validateFields();
1729
1745
  mounts.forEach((handler) => handler.onSubmit && handler.onSubmit());
1730
1746
  try {
1731
1747
  const ext = externalMounts.get(instance);
1732
- if (ext) ext.forEach((handler) => handler.onSubmit && handler.onSubmit());
1748
+ if (ext)
1749
+ ext.forEach(
1750
+ (external_handler) => external_handler.onSubmit && external_handler.onSubmit()
1751
+ );
1733
1752
  } catch (error) {
1734
1753
  }
1735
- }).catch(() => {
1736
- });
1754
+ } catch (validate_error) {
1755
+ return await Promise.reject(validate_error);
1756
+ }
1737
1757
  },
1738
1758
  resetFields(names) {
1739
1759
  let changed = false;
@@ -1747,8 +1767,8 @@ function createFormInstance() {
1747
1767
  scheduleNotify();
1748
1768
  return;
1749
1769
  }
1750
- names.forEach((name) => {
1751
- const path = toNamePath(name);
1770
+ names.forEach((name2) => {
1771
+ const path = toNamePath(name2);
1752
1772
  const key = namePathToString(path);
1753
1773
  if (getValueByPath(store.values, path) !== void 0) {
1754
1774
  changed = true;
@@ -1762,8 +1782,8 @@ function createFormInstance() {
1762
1782
  if (changed) version += 1;
1763
1783
  scheduleNotify();
1764
1784
  },
1765
- getFieldError(name) {
1766
- const path = toNamePath(name);
1785
+ getFieldError(name2) {
1786
+ const path = toNamePath(name2);
1767
1787
  const key = namePathToString(path);
1768
1788
  return store.errors[key] || [];
1769
1789
  },
@@ -1773,8 +1793,8 @@ function createFormInstance() {
1773
1793
  return { name: meta.namePath, errors: store.errors[key] || [] };
1774
1794
  });
1775
1795
  },
1776
- registerField(name, meta) {
1777
- const path = toNamePath(name);
1796
+ registerField(name2, meta) {
1797
+ const path = toNamePath(name2);
1778
1798
  const key = namePathToString(path);
1779
1799
  fieldMeta.set(key, {
1780
1800
  namePath: path,
@@ -1785,8 +1805,8 @@ function createFormInstance() {
1785
1805
  getValueFromEvent: meta.getValueFromEvent
1786
1806
  });
1787
1807
  },
1788
- unregisterField(name) {
1789
- const path = toNamePath(name);
1808
+ unregisterField(name2) {
1809
+ const path = toNamePath(name2);
1790
1810
  const key = namePathToString(path);
1791
1811
  fieldMeta.delete(key);
1792
1812
  if (!preserveOnUnmount) {
@@ -1810,15 +1830,15 @@ function createFormInstance() {
1810
1830
  return () => subscribers.delete(fn);
1811
1831
  },
1812
1832
  INTERNAL: {
1813
- name: void 0,
1833
+ name,
1814
1834
  itemRef: (nameArr) => (node) => {
1815
1835
  const key = namePathToString(nameArr);
1816
1836
  if (node) itemsRef[key] = node;
1817
1837
  else delete itemsRef[key];
1818
1838
  }
1819
1839
  },
1820
- getFieldInstance(name) {
1821
- const key = namePathToString(toNamePath(name));
1840
+ getFieldInstance(name2) {
1841
+ const key = namePathToString(toNamePath(name2));
1822
1842
  return itemsRef[key];
1823
1843
  }
1824
1844
  };
@@ -1827,16 +1847,19 @@ function createFormInstance() {
1827
1847
  instance.preserveOnUnmount = preserveOnUnmount;
1828
1848
  };
1829
1849
  instance.preserveOnUnmount = preserveOnUnmount;
1850
+ if (name && instance.INTERNAL) instance.INTERNAL.name = name;
1830
1851
  return instance;
1831
1852
  }
1832
1853
 
1833
1854
  // src/components/ui/form/form-context.tsx
1834
1855
  var FormContext = createContext(null);
1835
- function useForm() {
1856
+ function useForm(name) {
1836
1857
  const ref = useRef();
1837
1858
  if (!ref.current) {
1838
- const instance = createFormInstance();
1859
+ const instance = createFormInstance(name);
1839
1860
  ref.current = instance;
1861
+ } else if (name && ref.current.INTERNAL) {
1862
+ ref.current.INTERNAL.name = name;
1840
1863
  }
1841
1864
  return ref.current;
1842
1865
  }
@@ -1998,7 +2021,7 @@ var Form = forwardRef(function Form2(props, ref) {
1998
2021
  };
1999
2022
  let unregisterMount;
2000
2023
  if (form.registerMount) {
2001
- const mountId = Math.random().toString(36).slice(2);
2024
+ const mountId = form.INTERNAL?.name ?? Math.random().toString(36).slice(2);
2002
2025
  if (preserve !== void 0) {
2003
2026
  if (form.setPreserve) form.setPreserve(!!preserve);
2004
2027
  else form.preserveOnUnmount = !!preserve;
@@ -2010,7 +2033,7 @@ var Form = forwardRef(function Form2(props, ref) {
2010
2033
  map = /* @__PURE__ */ new Map();
2011
2034
  externalMounts.set(form, map);
2012
2035
  }
2013
- const mountId = Math.random().toString(36).slice(2);
2036
+ const mountId = form.INTERNAL?.name ?? Math.random().toString(36).slice(2);
2014
2037
  map.set(mountId, mountHandlers);
2015
2038
  if (preserve !== void 0) {
2016
2039
  if (form.setPreserve) form.setPreserve(!!preserve);
@@ -2085,7 +2108,7 @@ var FormItem = (props) => {
2085
2108
  const requiredIndicator = requiredMark === void 0 ? /* @__PURE__ */ jsx("span", { className: "text-destructive mr-1", "aria-hidden": "true", children: "*" }) : /* @__PURE__ */ jsx("span", { className: "mr-1", "aria-hidden": "true", children: requiredMark });
2086
2109
  if (!children || !React49__default.isValidElement(children)) return null;
2087
2110
  const childProps = {};
2088
- if (fieldValue !== void 0) childProps[valuePropName] = fieldValue;
2111
+ childProps[valuePropName] = fieldValue;
2089
2112
  const childClass = children.props.className;
2090
2113
  if (childClass || props.className) {
2091
2114
  childProps.className = [childClass, props.className].filter(Boolean).join(" ");
@@ -4291,13 +4314,20 @@ PaginationEllipsis.displayName = "PaginationEllipsis";
4291
4314
 
4292
4315
  // src/components/ui/tabs/index.tsx
4293
4316
  init_utils();
4294
- var Tabs = TabsPrimitive.Root;
4317
+ var TabsContext = React49.createContext({
4318
+ destroyInactiveTabs: true
4319
+ });
4320
+ var Tabs = React49.forwardRef(({ destroyInactiveTabs = true, ...props }, ref) => /* @__PURE__ */ jsx(TabsContext.Provider, { value: { destroyInactiveTabs }, children: /* @__PURE__ */ jsx(TabsPrimitive.Root, { ref, ...props }) }));
4321
+ Tabs.displayName = TabsPrimitive.Root.displayName;
4295
4322
  var TabsList = React49.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
4296
4323
  TabsPrimitive.List,
4297
4324
  {
4298
4325
  ref,
4299
4326
  className: cn(
4300
- "inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",
4327
+ "flex items-stretch gap-0 text-muted-foreground",
4328
+ "data-[orientation=horizontal]:w-full data-[orientation=horizontal]:border-b data-[orientation=vertical]:border-border",
4329
+ "data-[orientation=vertical]:w-56 data-[orientation=vertical]:border-r data-[orientation=vertical]:border-border",
4330
+ "data-[orientation=vertical]:flex-col data-[orientation=vertical]:shrink-0",
4301
4331
  className
4302
4332
  ),
4303
4333
  ...props
@@ -4309,27 +4339,34 @@ var TabsTrigger = React49.forwardRef(({ className, ...props }, ref) => /* @__PUR
4309
4339
  {
4310
4340
  ref,
4311
4341
  className: cn(
4312
- "inline-flex items-center justify-center whitespace-nowrap rounded-sm px-4 py-2 text-sm font-medium ring-offset-background transition-all",
4313
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
4314
- "disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",
4315
- className
4316
- ),
4317
- ...props
4318
- }
4319
- ));
4320
- TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
4321
- var TabsContent = React49.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
4322
- TabsPrimitive.Content,
4323
- {
4324
- ref,
4325
- className: cn(
4342
+ "inline-flex min-w-0 items-center justify-center whitespace-nowrap text-sm font-medium",
4343
+ "transition-all duration-150 text-muted-foreground hover:text-primary",
4326
4344
  "ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
4327
- "p-4 rounded-md border bg-card",
4345
+ "data-[orientation=horizontal]:flex-1 data-[orientation=horizontal]:px-4 data-[orientation=horizontal]:py-3 data-[orientation=horizontal]:border-b-2 data-[orientation=horizontal]:border-border",
4346
+ "data-[orientation=vertical]:w-full data-[orientation=vertical]:justify-start data-[orientation=vertical]:px-3 data-[orientation=vertical]:py-2 data-[orientation=vertical]:border-l-2 data-[orientation=vertical]:border-border",
4347
+ "data-[state=active]:text-primary data-[state=active]:font-semibold data-[state=active]:bg-muted/60 data-[state=active]:border-primary",
4348
+ "disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed",
4328
4349
  className
4329
4350
  ),
4330
4351
  ...props
4331
4352
  }
4332
4353
  ));
4354
+ TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
4355
+ var TabsContent = React49.forwardRef(({ className, ...props }, ref) => {
4356
+ const { destroyInactiveTabs } = React49.useContext(TabsContext);
4357
+ return /* @__PURE__ */ jsx(
4358
+ TabsPrimitive.Content,
4359
+ {
4360
+ ref,
4361
+ forceMount: destroyInactiveTabs ? void 0 : true,
4362
+ className: cn(
4363
+ "ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 data-[state=inactive]:hidden",
4364
+ className
4365
+ ),
4366
+ ...props
4367
+ }
4368
+ );
4369
+ });
4333
4370
  TabsContent.displayName = TabsPrimitive.Content.displayName;
4334
4371
  function SimpleTabs({
4335
4372
  items,
@@ -4340,10 +4377,12 @@ function SimpleTabs({
4340
4377
  tabsListClassName,
4341
4378
  tabsTriggerClassName,
4342
4379
  tabsContentClassName,
4343
- orientation = "horizontal"
4380
+ orientation = "horizontal",
4381
+ destroyInactiveTabs = true
4344
4382
  }) {
4345
- const defaultTabsListClassName = orientation === "vertical" ? "flex-col h-auto w-auto p-2 mr-4" : "mb-4";
4346
- const defaultTabsContentClassName = orientation === "vertical" ? "mt-0 ml-4" : "";
4383
+ const defaultTabsListClassName = orientation === "vertical" ? "bg-background/60 p-2" : "w-full";
4384
+ const defaultTabsContentClassName = orientation === "vertical" ? "ml-0 flex-1 min-w-0" : "w-full";
4385
+ const rootLayoutClassName = orientation === "vertical" ? "flex flex-row w-full max-w-full items-start gap-6" : "flex w-full flex-col gap-6";
4347
4386
  return /* @__PURE__ */ jsxs(
4348
4387
  Tabs,
4349
4388
  {
@@ -4351,20 +4390,15 @@ function SimpleTabs({
4351
4390
  value,
4352
4391
  onValueChange,
4353
4392
  orientation,
4354
- className: cn(
4355
- orientation === "vertical" ? "flex flex-row" : "",
4356
- className
4357
- ),
4393
+ destroyInactiveTabs,
4394
+ className: cn(rootLayoutClassName, className),
4358
4395
  children: [
4359
4396
  /* @__PURE__ */ jsx(TabsList, { className: cn(defaultTabsListClassName, tabsListClassName), children: items.map((item) => /* @__PURE__ */ jsx(
4360
4397
  TabsTrigger,
4361
4398
  {
4362
4399
  value: item.value,
4363
4400
  disabled: item.disabled,
4364
- className: cn(
4365
- orientation === "vertical" && "mb-1 w-full justify-start",
4366
- tabsTriggerClassName
4367
- ),
4401
+ className: cn(tabsTriggerClassName),
4368
4402
  children: item.label
4369
4403
  },
4370
4404
  item.value
@@ -4667,6 +4701,8 @@ ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
4667
4701
 
4668
4702
  // src/components/ui/sidebar/index.tsx
4669
4703
  init_utils();
4704
+ var SIDEBAR_COOKIE_NAME = "sidebar_state";
4705
+ var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
4670
4706
  var SIDEBAR_WIDTH = "16rem";
4671
4707
  var SIDEBAR_WIDTH_ICON = "3rem";
4672
4708
  var SIDEBAR_KEYBOARD_SHORTCUT = "b";
@@ -4678,395 +4714,601 @@ function useSidebar() {
4678
4714
  }
4679
4715
  return context;
4680
4716
  }
4681
- var SidebarProvider = React49.forwardRef(
4682
- ({
4683
- defaultOpen = true,
4684
- open: openProp,
4685
- onOpenChange: setOpenProp,
4686
- className,
4687
- style,
4688
- children,
4689
- ...props
4690
- }, ref) => {
4691
- const [openMobile, setOpenMobile] = React49.useState(false);
4692
- const [_open, _setOpen] = React49.useState(defaultOpen);
4693
- const open = openProp ?? _open;
4694
- const setOpen = React49.useCallback(
4695
- (value) => {
4696
- const openState = typeof value === "function" ? value(open) : value;
4697
- if (setOpenProp) {
4698
- setOpenProp(openState);
4699
- } else {
4700
- _setOpen(openState);
4701
- }
4717
+ function SidebarProvider({
4718
+ defaultOpen = true,
4719
+ open: openProp,
4720
+ onOpenChange: setOpenProp,
4721
+ className,
4722
+ style,
4723
+ children,
4724
+ ...props
4725
+ }) {
4726
+ const [_open, _setOpen] = React49.useState(defaultOpen);
4727
+ const open = openProp ?? _open;
4728
+ const setOpen = React49.useCallback(
4729
+ (value) => {
4730
+ const openState = typeof value === "function" ? value(open) : value;
4731
+ if (setOpenProp) {
4732
+ setOpenProp(openState);
4733
+ } else {
4734
+ _setOpen(openState);
4735
+ }
4736
+ document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
4737
+ },
4738
+ [setOpenProp, open]
4739
+ );
4740
+ const toggleSidebar = React49.useCallback(() => {
4741
+ return setOpen((open2) => !open2);
4742
+ }, [setOpen]);
4743
+ React49.useEffect(() => {
4744
+ const handleKeyDown = (event) => {
4745
+ if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
4746
+ event.preventDefault();
4747
+ toggleSidebar();
4748
+ }
4749
+ };
4750
+ window.addEventListener("keydown", handleKeyDown);
4751
+ return () => window.removeEventListener("keydown", handleKeyDown);
4752
+ }, [toggleSidebar]);
4753
+ const state = open ? "expanded" : "collapsed";
4754
+ const contextValue = React49.useMemo(
4755
+ () => ({
4756
+ state,
4757
+ open,
4758
+ setOpen,
4759
+ toggleSidebar
4760
+ }),
4761
+ [state, open, setOpen, toggleSidebar]
4762
+ );
4763
+ return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx(
4764
+ "div",
4765
+ {
4766
+ "data-slot": "sidebar-wrapper",
4767
+ style: {
4768
+ "--sidebar-width": SIDEBAR_WIDTH,
4769
+ "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
4770
+ ...style
4702
4771
  },
4703
- [setOpenProp, open]
4704
- );
4705
- const [isMobile, setIsMobile] = React49.useState(false);
4706
- React49.useEffect(() => {
4707
- const checkMobile = () => {
4708
- setIsMobile(window.innerWidth < 768);
4709
- };
4710
- checkMobile();
4711
- window.addEventListener("resize", checkMobile);
4712
- return () => window.removeEventListener("resize", checkMobile);
4713
- }, []);
4714
- const toggleSidebar = React49.useCallback(() => {
4715
- return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
4716
- }, [isMobile, setOpen, setOpenMobile]);
4717
- React49.useEffect(() => {
4718
- const handleKeyDown = (event) => {
4719
- if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
4720
- event.preventDefault();
4721
- toggleSidebar();
4722
- }
4723
- };
4724
- window.addEventListener("keydown", handleKeyDown);
4725
- return () => window.removeEventListener("keydown", handleKeyDown);
4726
- }, [toggleSidebar]);
4727
- const state = open ? "expanded" : "collapsed";
4728
- const contextValue = React49.useMemo(
4729
- () => ({
4730
- state,
4731
- open,
4732
- setOpen,
4733
- isMobile,
4734
- openMobile,
4735
- setOpenMobile,
4736
- toggleSidebar
4737
- }),
4738
- [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
4739
- );
4740
- return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
4772
+ className: cn(
4773
+ "group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-full w-full",
4774
+ className
4775
+ ),
4776
+ ...props,
4777
+ children
4778
+ }
4779
+ ) }) });
4780
+ }
4781
+ function Sidebar({
4782
+ side = "left",
4783
+ variant = "sidebar",
4784
+ collapsible = "offcanvas",
4785
+ className,
4786
+ children,
4787
+ ...props
4788
+ }) {
4789
+ const { state } = useSidebar();
4790
+ if (collapsible === "none") {
4791
+ return /* @__PURE__ */ jsx(
4741
4792
  "div",
4742
4793
  {
4743
- style: {
4744
- "--sidebar-width": SIDEBAR_WIDTH,
4745
- "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
4746
- ...style
4747
- },
4794
+ "data-slot": "sidebar",
4748
4795
  className: cn(
4749
- "group/sidebar-wrapper flex min-h-svh w-full has-[[data-variant=inset]]:bg-surface-1",
4796
+ "bg-sidebar text-sidebar-foreground flex h-full w-[var(--sidebar-width)] flex-col",
4750
4797
  className
4751
4798
  ),
4752
- ref,
4753
4799
  ...props,
4754
4800
  children
4755
4801
  }
4756
- ) });
4802
+ );
4757
4803
  }
4758
- );
4759
- SidebarProvider.displayName = "SidebarProvider";
4760
- var Sidebar = React49.forwardRef(
4761
- ({
4762
- side = "left",
4763
- variant = "sidebar",
4764
- collapsible = "offcanvas",
4765
- className,
4766
- children,
4767
- ...props
4768
- }, ref) => {
4769
- const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
4770
- if (collapsible === "none") {
4771
- return /* @__PURE__ */ jsx(
4804
+ const isCollapsed = state === "collapsed";
4805
+ const isIconMode = collapsible === "icon";
4806
+ const isCollapsedIcon = isCollapsed && isIconMode;
4807
+ return /* @__PURE__ */ jsx(
4808
+ "div",
4809
+ {
4810
+ className: "group peer text-sidebar-foreground hidden md:block relative",
4811
+ "data-state": state,
4812
+ "data-collapsible": isCollapsed ? collapsible : "",
4813
+ "data-variant": variant,
4814
+ "data-side": side,
4815
+ "data-slot": "sidebar",
4816
+ children: /* @__PURE__ */ jsx(
4772
4817
  "div",
4773
4818
  {
4819
+ "data-slot": "sidebar-container",
4774
4820
  className: cn(
4775
- "flex h-full w-[--sidebar-width] flex-col bg-surface-1 text-foreground border-r border-line-soft",
4821
+ "relative z-10 h-full transition-[width] duration-200 ease-linear flex flex-col",
4822
+ // Width handling
4823
+ isCollapsed && collapsible === "offcanvas" && "w-0 overflow-hidden",
4824
+ isCollapsedIcon && "w-[var(--sidebar-width-icon)]",
4825
+ !isCollapsed && "w-[var(--sidebar-width)]",
4826
+ // Border/padding for variants
4827
+ variant === "floating" || variant === "inset" ? "p-2" : "border-r border-sidebar-border",
4776
4828
  className
4777
4829
  ),
4778
- ref,
4779
4830
  ...props,
4780
- children
4831
+ children: /* @__PURE__ */ jsx(
4832
+ "div",
4833
+ {
4834
+ "data-sidebar": "sidebar",
4835
+ "data-slot": "sidebar-inner",
4836
+ "data-collapsible": isCollapsedIcon ? "icon" : void 0,
4837
+ className: cn(
4838
+ "bg-sidebar flex h-full w-full flex-col",
4839
+ variant === "floating" && "rounded-lg border border-sidebar-border shadow-sm",
4840
+ // When in icon mode, center content and add consistent padding
4841
+ isCollapsedIcon && "overflow-hidden items-center py-2"
4842
+ ),
4843
+ children
4844
+ }
4845
+ )
4781
4846
  }
4782
- );
4783
- }
4784
- if (isMobile) {
4785
- return /* @__PURE__ */ jsxs(Fragment, { children: [
4786
- openMobile && /* @__PURE__ */ jsx(
4787
- "div",
4788
- {
4789
- className: "fixed inset-0 z-40 bg-overlay-heavy",
4790
- onClick: () => setOpenMobile(false)
4791
- }
4792
- ),
4793
- /* @__PURE__ */ jsx(
4794
- "div",
4795
- {
4796
- ref,
4797
- className: cn(
4798
- "fixed inset-y-0 z-50 hidden w-[--sidebar-width] flex-col bg-surface-1 text-foreground border-r border-line-soft transition-transform duration-200",
4799
- side === "left" ? "left-0" : "right-0",
4800
- openMobile && "flex translate-x-0",
4801
- !openMobile && (side === "left" ? "-translate-x-full" : "translate-x-full"),
4802
- className
4803
- ),
4804
- ...props,
4805
- children
4806
- }
4807
- )
4808
- ] });
4847
+ )
4809
4848
  }
4810
- return /* @__PURE__ */ jsx(
4811
- "div",
4812
- {
4813
- ref,
4814
- "data-state": state,
4815
- "data-collapsible": collapsible,
4816
- "data-variant": variant,
4817
- "data-side": side,
4818
- className: cn(
4819
- "group/sidebar relative flex h-full w-[--sidebar-width] flex-col bg-surface-1 text-foreground border-r border-line-soft transition-all duration-200",
4820
- state === "collapsed" && collapsible === "icon" && "w-[--sidebar-width-icon]",
4821
- variant === "floating" && "m-2 rounded-lg border border-line-soft shadow-md",
4822
- variant === "inset" && "m-2 mr-0 rounded-l-lg border border-line-soft shadow-sm",
4823
- className
4824
- ),
4825
- ...props,
4826
- children
4827
- }
4828
- );
4829
- }
4830
- );
4831
- Sidebar.displayName = "Sidebar";
4832
- var SidebarTrigger = React49.forwardRef(({ className, onClick, ...props }, ref) => {
4849
+ );
4850
+ }
4851
+ function SidebarTrigger({
4852
+ className,
4853
+ onClick,
4854
+ ...props
4855
+ }) {
4833
4856
  const { toggleSidebar } = useSidebar();
4834
4857
  return /* @__PURE__ */ jsxs(
4835
4858
  Button,
4836
4859
  {
4837
- ref,
4860
+ "data-sidebar": "trigger",
4861
+ "data-slot": "sidebar-trigger",
4838
4862
  variant: "ghost",
4839
4863
  size: "icon",
4840
- className: cn("h-9 w-9", className),
4864
+ className: cn("size-7", className),
4841
4865
  onClick: (event) => {
4842
4866
  onClick?.(event);
4843
4867
  toggleSidebar();
4844
4868
  },
4845
4869
  ...props,
4846
4870
  children: [
4847
- /* @__PURE__ */ jsx(PanelLeftIcon, { className: "h-4 w-4" }),
4871
+ /* @__PURE__ */ jsx(PanelLeftIcon, {}),
4848
4872
  /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Toggle Sidebar" })
4849
4873
  ]
4850
4874
  }
4851
4875
  );
4852
- });
4853
- SidebarTrigger.displayName = "SidebarTrigger";
4854
- var SidebarRail = React49.forwardRef(({ className, ...props }, ref) => {
4876
+ }
4877
+ function SidebarRail({ className, ...props }) {
4855
4878
  const { toggleSidebar } = useSidebar();
4856
4879
  return /* @__PURE__ */ jsx(
4857
4880
  "button",
4858
4881
  {
4859
- ref,
4882
+ "data-sidebar": "rail",
4883
+ "data-slot": "sidebar-rail",
4860
4884
  "aria-label": "Toggle Sidebar",
4861
4885
  tabIndex: -1,
4862
4886
  onClick: toggleSidebar,
4863
4887
  title: "Toggle Sidebar",
4864
4888
  className: cn(
4865
- "absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-line-strong group-data-[side=left]:right-0 group-data-[side=right]:left-0 [[data-side=left]_&]:cursor-w-resize [[data-side=right]_&]:cursor-e-resize [[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-surface-2 [[data-side=left][data-collapsible=offcanvas]_&]:-right-2 [[data-side=right][data-collapsible=offcanvas]_&]:-left-2 sm:flex",
4889
+ "hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex",
4890
+ "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize",
4891
+ "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
4892
+ "hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full",
4893
+ "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2",
4894
+ "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",
4866
4895
  className
4867
4896
  ),
4868
4897
  ...props
4869
4898
  }
4870
4899
  );
4871
- });
4872
- SidebarRail.displayName = "SidebarRail";
4873
- var SidebarInset = React49.forwardRef(
4874
- ({ className, ...props }, ref) => {
4875
- return /* @__PURE__ */ jsx(
4876
- "main",
4877
- {
4878
- ref,
4879
- className: cn(
4880
- "relative flex min-h-svh flex-1 flex-col bg-background peer-data-[variant=inset]:min-h-[calc(100svh-theme(spacing.4))] md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-r-lg md:peer-data-[variant=inset]:border md:peer-data-[variant=inset]:border-line-soft md:peer-data-[variant=inset]:shadow-sm",
4881
- className
4882
- ),
4883
- ...props
4884
- }
4885
- );
4886
- }
4887
- );
4888
- SidebarInset.displayName = "SidebarInset";
4889
- var SidebarHeader = React49.forwardRef(
4890
- ({ className, ...props }, ref) => {
4891
- return /* @__PURE__ */ jsx(
4892
- "div",
4893
- {
4894
- ref,
4895
- className: cn("flex flex-col gap-2 p-4 border-b border-line-soft", className),
4896
- ...props
4897
- }
4898
- );
4899
- }
4900
- );
4901
- SidebarHeader.displayName = "SidebarHeader";
4902
- var SidebarFooter = React49.forwardRef(
4903
- ({ className, ...props }, ref) => {
4904
- return /* @__PURE__ */ jsx(
4905
- "div",
4906
- {
4907
- ref,
4908
- className: cn("flex flex-col gap-2 p-4 border-t border-line-soft", className),
4909
- ...props
4910
- }
4911
- );
4912
- }
4913
- );
4914
- SidebarFooter.displayName = "SidebarFooter";
4915
- var SidebarContent = React49.forwardRef(
4916
- ({ className, ...props }, ref) => {
4917
- return /* @__PURE__ */ jsx(
4918
- "div",
4919
- {
4920
- ref,
4921
- className: cn("flex flex-1 flex-col gap-4 overflow-auto p-4", className),
4922
- ...props
4923
- }
4924
- );
4925
- }
4926
- );
4927
- SidebarContent.displayName = "SidebarContent";
4928
- var SidebarGroup = React49.forwardRef(
4929
- ({ className, ...props }, ref) => {
4930
- return /* @__PURE__ */ jsx(
4931
- "div",
4932
- {
4933
- ref,
4934
- className: cn("flex flex-col gap-2", className),
4935
- ...props
4936
- }
4937
- );
4938
- }
4939
- );
4940
- SidebarGroup.displayName = "SidebarGroup";
4941
- var SidebarGroupLabel = React49.forwardRef(({ className, ...props }, ref) => {
4900
+ }
4901
+ function SidebarInset({ className, ...props }) {
4902
+ return /* @__PURE__ */ jsx(
4903
+ "main",
4904
+ {
4905
+ "data-slot": "sidebar-inset",
4906
+ className: cn(
4907
+ "bg-background relative flex w-full flex-1 flex-col",
4908
+ "md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",
4909
+ className
4910
+ ),
4911
+ ...props
4912
+ }
4913
+ );
4914
+ }
4915
+ function SidebarInput({
4916
+ className,
4917
+ ...props
4918
+ }) {
4919
+ return /* @__PURE__ */ jsx(
4920
+ Input,
4921
+ {
4922
+ "data-slot": "sidebar-input",
4923
+ "data-sidebar": "input",
4924
+ className: cn("bg-background h-8 w-full shadow-none", className),
4925
+ ...props
4926
+ }
4927
+ );
4928
+ }
4929
+ function SidebarHeader({ className, ...props }) {
4930
+ const { state } = useSidebar();
4931
+ const isCollapsed = state === "collapsed";
4942
4932
  return /* @__PURE__ */ jsx(
4943
4933
  "div",
4944
4934
  {
4945
- ref,
4935
+ "data-slot": "sidebar-header",
4936
+ "data-sidebar": "header",
4946
4937
  className: cn(
4947
- "px-2 text-xs font-semibold text-muted-foreground uppercase tracking-wider",
4938
+ "flex flex-col gap-2 p-2",
4939
+ isCollapsed && "items-center",
4948
4940
  className
4949
4941
  ),
4950
4942
  ...props
4951
4943
  }
4952
4944
  );
4953
- });
4954
- SidebarGroupLabel.displayName = "SidebarGroupLabel";
4955
- var SidebarGroupContent = React49.forwardRef(({ className, ...props }, ref) => {
4956
- return /* @__PURE__ */ jsx("div", { ref, className: cn("flex flex-col gap-1", className), ...props });
4957
- });
4958
- SidebarGroupContent.displayName = "SidebarGroupContent";
4959
- var SidebarMenu = React49.forwardRef(
4960
- ({ className, ...props }, ref) => {
4961
- return /* @__PURE__ */ jsx(
4962
- "ul",
4963
- {
4964
- ref,
4965
- className: cn("flex flex-col gap-1", className),
4966
- ...props
4967
- }
4968
- );
4969
- }
4970
- );
4971
- SidebarMenu.displayName = "SidebarMenu";
4972
- var SidebarMenuItem = React49.forwardRef(
4973
- ({ className, ...props }, ref) => {
4974
- return /* @__PURE__ */ jsx("li", { ref, className: cn("list-none", className), ...props });
4945
+ }
4946
+ function SidebarFooter({ className, ...props }) {
4947
+ const { state } = useSidebar();
4948
+ const isCollapsed = state === "collapsed";
4949
+ return /* @__PURE__ */ jsx(
4950
+ "div",
4951
+ {
4952
+ "data-slot": "sidebar-footer",
4953
+ "data-sidebar": "footer",
4954
+ className: cn(
4955
+ "flex flex-col gap-2 p-2 mt-auto",
4956
+ isCollapsed && "items-center",
4957
+ className
4958
+ ),
4959
+ ...props
4960
+ }
4961
+ );
4962
+ }
4963
+ function SidebarSeparator({
4964
+ className,
4965
+ ...props
4966
+ }) {
4967
+ return /* @__PURE__ */ jsx(
4968
+ Separator5,
4969
+ {
4970
+ "data-slot": "sidebar-separator",
4971
+ "data-sidebar": "separator",
4972
+ className: cn("bg-sidebar-border mx-2 w-auto", className),
4973
+ ...props
4974
+ }
4975
+ );
4976
+ }
4977
+ function SidebarContent({ className, ...props }) {
4978
+ const { state } = useSidebar();
4979
+ const isCollapsed = state === "collapsed";
4980
+ return /* @__PURE__ */ jsx(
4981
+ "div",
4982
+ {
4983
+ "data-slot": "sidebar-content",
4984
+ "data-sidebar": "content",
4985
+ className: cn(
4986
+ "flex min-h-0 flex-1 flex-col gap-2 overflow-auto",
4987
+ isCollapsed && "items-center",
4988
+ className
4989
+ ),
4990
+ ...props
4991
+ }
4992
+ );
4993
+ }
4994
+ function SidebarGroup({ className, ...props }) {
4995
+ const { state } = useSidebar();
4996
+ const isCollapsed = state === "collapsed";
4997
+ return /* @__PURE__ */ jsx(
4998
+ "div",
4999
+ {
5000
+ "data-slot": "sidebar-group",
5001
+ "data-sidebar": "group",
5002
+ className: cn(
5003
+ "relative flex w-full min-w-0 flex-col p-2",
5004
+ isCollapsed && "items-center",
5005
+ className
5006
+ ),
5007
+ ...props
5008
+ }
5009
+ );
5010
+ }
5011
+ function SidebarGroupLabel({
5012
+ className,
5013
+ asChild = false,
5014
+ ...props
5015
+ }) {
5016
+ const Comp = asChild ? Slot : "div";
5017
+ const { state } = useSidebar();
5018
+ const isCollapsed = state === "collapsed";
5019
+ return /* @__PURE__ */ jsx(
5020
+ Comp,
5021
+ {
5022
+ "data-slot": "sidebar-group-label",
5023
+ "data-sidebar": "group-label",
5024
+ className: cn(
5025
+ "text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
5026
+ isCollapsed && "h-0 opacity-0 overflow-hidden -mt-2",
5027
+ className
5028
+ ),
5029
+ ...props
5030
+ }
5031
+ );
5032
+ }
5033
+ function SidebarGroupAction({
5034
+ className,
5035
+ asChild = false,
5036
+ ...props
5037
+ }) {
5038
+ const Comp = asChild ? Slot : "button";
5039
+ const { state } = useSidebar();
5040
+ const isCollapsed = state === "collapsed";
5041
+ if (isCollapsed) {
5042
+ return null;
4975
5043
  }
5044
+ return /* @__PURE__ */ jsx(
5045
+ Comp,
5046
+ {
5047
+ "data-slot": "sidebar-group-action",
5048
+ "data-sidebar": "group-action",
5049
+ className: cn(
5050
+ "text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
5051
+ // Increases the hit area of the button on mobile.
5052
+ "after:absolute after:-inset-2 md:after:hidden",
5053
+ className
5054
+ ),
5055
+ ...props
5056
+ }
5057
+ );
5058
+ }
5059
+ function SidebarGroupContent({
5060
+ className,
5061
+ ...props
5062
+ }) {
5063
+ return /* @__PURE__ */ jsx(
5064
+ "div",
5065
+ {
5066
+ "data-slot": "sidebar-group-content",
5067
+ "data-sidebar": "group-content",
5068
+ className: cn("w-full text-sm", className),
5069
+ ...props
5070
+ }
5071
+ );
5072
+ }
5073
+ function SidebarMenu({ className, ...props }) {
5074
+ const { state } = useSidebar();
5075
+ const isCollapsed = state === "collapsed";
5076
+ return /* @__PURE__ */ jsx(
5077
+ "ul",
5078
+ {
5079
+ "data-slot": "sidebar-menu",
5080
+ "data-sidebar": "menu",
5081
+ className: cn(
5082
+ "flex w-full min-w-0 flex-col gap-2 p-2",
5083
+ isCollapsed && "items-center",
5084
+ className
5085
+ ),
5086
+ ...props
5087
+ }
5088
+ );
5089
+ }
5090
+ function SidebarMenuItem({ className, ...props }) {
5091
+ return /* @__PURE__ */ jsx(
5092
+ "li",
5093
+ {
5094
+ "data-slot": "sidebar-menu-item",
5095
+ "data-sidebar": "menu-item",
5096
+ className: cn("group/menu-item relative", className),
5097
+ ...props
5098
+ }
5099
+ );
5100
+ }
5101
+ var sidebarMenuButtonStyle = cn(
5102
+ "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-all duration-150",
5103
+ "hover:bg-muted focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50",
5104
+ "data-[active=true]:bg-muted data-[active=true]:text-primary [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0"
4976
5105
  );
4977
- SidebarMenuItem.displayName = "SidebarMenuItem";
4978
- var sidebarMenuButtonVariants = cva(
4979
- "group/menu-button flex w-full items-center gap-3 rounded-md px-3 py-2 text-sm font-medium transition-colors hover:bg-surface-2 active:bg-surface-3 disabled:pointer-events-none disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0",
4980
- {
4981
- variants: {
4982
- variant: {
4983
- default: "text-foreground hover:text-foreground",
4984
- outline: "border border-line-soft bg-background shadow-sm hover:bg-surface-2"
4985
- },
4986
- size: {
4987
- default: "h-10",
4988
- sm: "h-8 text-xs",
4989
- lg: "h-12"
4990
- },
4991
- isActive: {
4992
- true: "bg-surface-2 text-foreground font-semibold"
4993
- }
5106
+ var sidebarMenuButtonVariants = cva(sidebarMenuButtonStyle, {
5107
+ variants: {
5108
+ variant: {
5109
+ default: "hover:bg-muted hover:text-foreground",
5110
+ outline: "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-muted hover:text-foreground hover:shadow-[0_0_0_1px_hsl(var(--border))]"
4994
5111
  },
4995
- defaultVariants: {
4996
- variant: "default",
4997
- size: "default"
5112
+ size: {
5113
+ default: "h-8 text-sm",
5114
+ sm: "h-7 text-xs",
5115
+ lg: "h-12 text-sm"
4998
5116
  }
5117
+ },
5118
+ defaultVariants: {
5119
+ variant: "default",
5120
+ size: "default"
4999
5121
  }
5000
- );
5001
- var SidebarMenuButton = React49.forwardRef(
5002
- ({
5003
- asChild = false,
5004
- isActive = false,
5005
- variant,
5006
- size,
5007
- className,
5008
- ...props
5009
- }, ref) => {
5010
- const Comp = asChild ? "span" : "button";
5011
- return /* @__PURE__ */ jsx(
5012
- Comp,
5013
- {
5014
- ref,
5015
- className: cn(sidebarMenuButtonVariants({ variant, size, isActive }), className),
5016
- ...props
5017
- }
5018
- );
5122
+ });
5123
+ function SidebarMenuButton({
5124
+ asChild = false,
5125
+ isActive = false,
5126
+ variant = "default",
5127
+ size = "default",
5128
+ tooltip,
5129
+ className,
5130
+ children,
5131
+ ...props
5132
+ }) {
5133
+ const Comp = asChild ? Slot : "button";
5134
+ const { state } = useSidebar();
5135
+ const isCollapsed = state === "collapsed";
5136
+ const button = /* @__PURE__ */ jsx(
5137
+ Comp,
5138
+ {
5139
+ "data-slot": "sidebar-menu-button",
5140
+ "data-sidebar": "menu-button",
5141
+ "data-size": size,
5142
+ "data-active": isActive,
5143
+ className: cn(
5144
+ sidebarMenuButtonVariants({ variant, size }),
5145
+ // When collapsed in icon mode, make button square and center icon
5146
+ isCollapsed && "w-8 h-8 p-2 justify-center [&>span]:hidden [&>:not(svg)]:hidden [&>svg:not(:first-child)]:hidden",
5147
+ className
5148
+ ),
5149
+ ...props,
5150
+ children
5151
+ }
5152
+ );
5153
+ if (!isCollapsed || !tooltip) {
5154
+ return button;
5155
+ }
5156
+ return /* @__PURE__ */ jsx(SimpleTooltip, { content: tooltip, side: "right", delayDuration: 0, children: button });
5157
+ }
5158
+ function SidebarMenuAction({
5159
+ className,
5160
+ asChild = false,
5161
+ showOnHover = false,
5162
+ ...props
5163
+ }) {
5164
+ const Comp = asChild ? Slot : "button";
5165
+ const { state } = useSidebar();
5166
+ const isCollapsed = state === "collapsed";
5167
+ if (isCollapsed) {
5168
+ return null;
5019
5169
  }
5020
- );
5021
- SidebarMenuButton.displayName = "SidebarMenuButton";
5022
- var SidebarMenuAction = React49.forwardRef(({ className, ...props }, ref) => {
5023
5170
  return /* @__PURE__ */ jsx(
5024
- "button",
5171
+ Comp,
5025
5172
  {
5026
- ref,
5173
+ "data-slot": "sidebar-menu-action",
5174
+ "data-sidebar": "menu-action",
5027
5175
  className: cn(
5028
- "flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:bg-surface-2 hover:text-foreground",
5176
+ "text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
5177
+ // Increases the hit area of the button on mobile.
5178
+ "after:absolute after:-inset-2 md:after:hidden",
5179
+ "peer-data-[size=sm]/menu-button:top-1",
5180
+ "peer-data-[size=default]/menu-button:top-1.5",
5181
+ "peer-data-[size=lg]/menu-button:top-2.5",
5182
+ showOnHover && "peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0",
5029
5183
  className
5030
5184
  ),
5031
5185
  ...props
5032
5186
  }
5033
5187
  );
5034
- });
5035
- SidebarMenuAction.displayName = "SidebarMenuAction";
5036
- var SidebarMenuSub = React49.forwardRef(
5037
- ({ className, ...props }, ref) => {
5038
- return /* @__PURE__ */ jsx(
5039
- "ul",
5040
- {
5041
- ref,
5042
- className: cn("ml-3 flex flex-col gap-1 border-l border-line-soft pl-3", className),
5043
- ...props
5044
- }
5045
- );
5188
+ }
5189
+ function SidebarMenuBadge({
5190
+ className,
5191
+ ...props
5192
+ }) {
5193
+ const { state } = useSidebar();
5194
+ const isCollapsed = state === "collapsed";
5195
+ if (isCollapsed) {
5196
+ return null;
5046
5197
  }
5047
- );
5048
- SidebarMenuSub.displayName = "SidebarMenuSub";
5049
- var SidebarMenuSubItem = React49.forwardRef(
5050
- ({ className, ...props }, ref) => {
5051
- return /* @__PURE__ */ jsx("li", { ref, className: cn("list-none", className), ...props });
5198
+ return /* @__PURE__ */ jsx(
5199
+ "div",
5200
+ {
5201
+ "data-slot": "sidebar-menu-badge",
5202
+ "data-sidebar": "menu-badge",
5203
+ className: cn(
5204
+ "text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none",
5205
+ "peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground",
5206
+ "peer-data-[size=sm]/menu-button:top-1",
5207
+ "peer-data-[size=default]/menu-button:top-1.5",
5208
+ "peer-data-[size=lg]/menu-button:top-2.5",
5209
+ className
5210
+ ),
5211
+ ...props
5212
+ }
5213
+ );
5214
+ }
5215
+ function SidebarMenuSkeleton({
5216
+ className,
5217
+ showIcon = false,
5218
+ ...props
5219
+ }) {
5220
+ const width = React49.useMemo(() => {
5221
+ return `${Math.floor(Math.random() * 40) + 50}%`;
5222
+ }, []);
5223
+ return /* @__PURE__ */ jsxs(
5224
+ "div",
5225
+ {
5226
+ "data-slot": "sidebar-menu-skeleton",
5227
+ "data-sidebar": "menu-skeleton",
5228
+ className: cn("flex h-8 items-center gap-2 rounded-md px-2", className),
5229
+ ...props,
5230
+ children: [
5231
+ showIcon && /* @__PURE__ */ jsx(
5232
+ Skeleton,
5233
+ {
5234
+ className: "size-4 rounded-md",
5235
+ "data-sidebar": "menu-skeleton-icon"
5236
+ }
5237
+ ),
5238
+ /* @__PURE__ */ jsx(
5239
+ Skeleton,
5240
+ {
5241
+ className: "h-4 max-w-(--skeleton-width) flex-1",
5242
+ "data-sidebar": "menu-skeleton-text",
5243
+ style: {
5244
+ "--skeleton-width": width
5245
+ }
5246
+ }
5247
+ )
5248
+ ]
5249
+ }
5250
+ );
5251
+ }
5252
+ function SidebarMenuSub({ className, ...props }) {
5253
+ const { state } = useSidebar();
5254
+ const isCollapsed = state === "collapsed";
5255
+ if (isCollapsed) {
5256
+ return null;
5052
5257
  }
5053
- );
5054
- SidebarMenuSubItem.displayName = "SidebarMenuSubItem";
5055
- var SidebarMenuSubButton = React49.forwardRef(({ className, isActive, ...props }, ref) => {
5056
5258
  return /* @__PURE__ */ jsx(
5057
- "button",
5259
+ "ul",
5058
5260
  {
5059
- ref,
5261
+ "data-slot": "sidebar-menu-sub",
5262
+ "data-sidebar": "menu-sub",
5060
5263
  className: cn(
5061
- "flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm hover:bg-surface-2 active:bg-surface-3",
5062
- isActive && "bg-surface-2 font-medium",
5264
+ "border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-2 border-l p-2",
5063
5265
  className
5064
5266
  ),
5065
5267
  ...props
5066
5268
  }
5067
5269
  );
5068
- });
5069
- SidebarMenuSubButton.displayName = "SidebarMenuSubButton";
5270
+ }
5271
+ function SidebarMenuSubItem({
5272
+ className,
5273
+ ...props
5274
+ }) {
5275
+ return /* @__PURE__ */ jsx(
5276
+ "li",
5277
+ {
5278
+ "data-slot": "sidebar-menu-sub-item",
5279
+ "data-sidebar": "menu-sub-item",
5280
+ className: cn("group/menu-sub-item relative", className),
5281
+ ...props
5282
+ }
5283
+ );
5284
+ }
5285
+ function SidebarMenuSubButton({
5286
+ asChild = false,
5287
+ size = "md",
5288
+ isActive = false,
5289
+ className,
5290
+ ...props
5291
+ }) {
5292
+ const Comp = asChild ? Slot : "a";
5293
+ return /* @__PURE__ */ jsx(
5294
+ Comp,
5295
+ {
5296
+ "data-slot": "sidebar-menu-sub-button",
5297
+ "data-sidebar": "menu-sub-button",
5298
+ "data-size": size,
5299
+ "data-active": isActive,
5300
+ className: cn(
5301
+ "text-sidebar-foreground ring-sidebar-ring hover:bg-muted hover:text-foreground active:bg-muted [&>svg]:text-muted-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden ",
5302
+ "transition-all duration-150 focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
5303
+ "data-[active=true]:bg-muted data-[active=true]:text-primary",
5304
+ size === "sm" && "text-xs",
5305
+ size === "md" && "text-sm",
5306
+ className
5307
+ ),
5308
+ ...props
5309
+ }
5310
+ );
5311
+ }
5070
5312
 
5071
5313
  // src/components/ui/table/index.tsx
5072
5314
  init_utils();
@@ -6577,7 +6819,7 @@ function SimpleTable({
6577
6819
  manualFiltering = false,
6578
6820
  lazyLoadIndicatorType = "overlay",
6579
6821
  maxHeight = 500,
6580
- maxWidth = 900,
6822
+ maxWidth,
6581
6823
  maxRecords,
6582
6824
  loadingText,
6583
6825
  pagingPosition = "right",
@@ -10261,6 +10503,6 @@ var TypographyGroup = {
10261
10503
  // src/index.ts
10262
10504
  init_utils();
10263
10505
 
10264
- export { Accordion, Alert, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AspectRatio, Avatar, AvatarFallback, AvatarGroup, AvatarImage, Badge, Blockquote, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, Checkbox, Collapsible, CollapsibleContent, CollapsibleItem, CollapsibleTrigger, Combobox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DataTable, DatePicker, DateRangePicker, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DotsSpinner, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, Field, Form, FormItem, FormList, H1, H2, H3, H4, HoverCard, HoverCardContent, HoverCardTrigger, IconButton, InlineCode, Input, InputGroup, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item9 as Item, ItemGroup, ItemList, ItemSeparator, Label, Lead, List3 as List, ListItem, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Muted, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, P, Pagination, PaginationContent, PaginationEllipsis, PaginationFirst, PaginationItem, PaginationLast, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, ProductCard, ProfileCard, Progress, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator5 as Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarTrigger, SimpleAvatar, SimpleCard, SimpleCarousel, SimpleTable, SimpleTabs, SimpleTooltip, Skeleton, SkeletonCard, Slider, Small, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastProvider, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Typography, TypographyGroup, alertVariants, avatarVariants, badgeVariants, buttonVariants, cardVariants, checkboxVariants, cn, composeRules, emailRule, emptyVariants, fieldVariants, getInitials, inputGroupVariants, inputVariants, itemVariants, labelVariants, maxLengthRule, maxValueRule, minLengthRule, minValueRule, navigationMenuTriggerStyle, numberRule, patternRule, progressVariants, radioGroupVariants, requiredRule, separatorVariants, skeletonVariants, spinnerVariants, tableVariants, textareaVariants, toastVariants, toggleGroupVariants, toggleVariants, urlRule, useCarousel, useForm, useSidebar, useToast, useWatch };
10506
+ export { Accordion, Alert, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AspectRatio, Avatar, AvatarFallback, AvatarGroup, AvatarImage, Badge, Blockquote, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, Checkbox, Collapsible, CollapsibleContent, CollapsibleItem, CollapsibleTrigger, Combobox, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DataTable, DatePicker, DateRangePicker, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DotsSpinner, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, Field, Form, FormItem, FormList, H1, H2, H3, H4, HoverCard, HoverCardContent, HoverCardTrigger, IconButton, InlineCode, Input, InputGroup, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item9 as Item, ItemGroup, ItemList, ItemSeparator, Label, Lead, List3 as List, ListItem, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Muted, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, P, Pagination, PaginationContent, PaginationEllipsis, PaginationFirst, PaginationItem, PaginationLast, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, ProductCard, ProfileCard, Progress, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator5 as Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, SimpleAvatar, SimpleCard, SimpleCarousel, SimpleTable, SimpleTabs, SimpleTooltip, Skeleton, SkeletonCard, Slider, Small, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastProvider, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Typography, TypographyGroup, alertVariants, avatarVariants, badgeVariants, buttonVariants, cardVariants, checkboxVariants, cn, composeRules, emailRule, emptyVariants, fieldVariants, getInitials, inputGroupVariants, inputVariants, itemVariants, labelVariants, maxLengthRule, maxValueRule, minLengthRule, minValueRule, navigationMenuTriggerStyle, numberRule, patternRule, progressVariants, radioGroupVariants, requiredRule, separatorVariants, skeletonVariants, spinnerVariants, tableVariants, textareaVariants, toastVariants, toggleGroupVariants, toggleVariants, urlRule, useCarousel, useForm, useSidebar, useToast, useWatch };
10265
10507
  //# sourceMappingURL=index.mjs.map
10266
10508
  //# sourceMappingURL=index.mjs.map