@postxl/ui-components 1.5.0 → 1.5.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.js CHANGED
@@ -70,7 +70,7 @@ import * as AvatarPrimitive from "@radix-ui/react-avatar";
70
70
  import { DayPicker, getDefaultClassNames } from "react-day-picker";
71
71
  import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
72
72
  import useEmblaCarousel from "embla-carousel-react";
73
- import { BaselineIcon, BookmarkIcon, CalendarIcon as CalendarIcon$1, Check, CheckIcon as CheckIcon$1, CheckSquareIcon, ChevronDownIcon as ChevronDownIcon$1, ChevronRightIcon as ChevronRightIcon$1, ChevronUpIcon as ChevronUpIcon$1, CircleCheckIcon, CopyIcon, EraserIcon, EyeIcon, EyeOffIcon, FilterX, GlobeIcon, GripHorizontalIcon, HashIcon, ListChecksIcon, ListIcon, ListTreeIcon, MessageSquareIcon, MinusIcon, PanelLeftIcon, PanelRightIcon, PencilIcon, PinIcon, PinOffIcon, PlusIcon, SaveIcon, Settings2Icon, SquareIcon, TagIcon, TextInitialIcon, Trash2Icon, TrashIcon, XIcon } from "lucide-react";
73
+ import { BaselineIcon, BookmarkIcon, CalendarIcon as CalendarIcon$1, Check, CheckIcon as CheckIcon$1, CheckSquareIcon, ChevronDownIcon as ChevronDownIcon$1, ChevronRightIcon as ChevronRightIcon$1, ChevronUpIcon as ChevronUpIcon$1, CircleCheckIcon, CopyIcon, DownloadIcon, EraserIcon, EyeIcon, EyeOffIcon, FilterX, GlobeIcon, GripHorizontalIcon, HashIcon, ListChecksIcon, ListIcon, ListTreeIcon, MessageSquareIcon, MinusIcon, PanelLeftIcon, PanelRightIcon, PencilIcon, PinIcon, PinOffIcon, PlusIcon, SaveIcon, Settings2Icon, SquareIcon, TagIcon, TextInitialIcon, Trash2Icon, TrashIcon, XIcon } from "lucide-react";
74
74
  import * as CollapsePrimitive from "@radix-ui/react-collapsible";
75
75
  import { Command as Command$1 } from "cmdk";
76
76
  import * as DialogPrimitive from "@radix-ui/react-dialog";
@@ -2488,6 +2488,12 @@ function DataGridCellWrapper({ cell, table, rowIndex, columnId, isEditing, isFoc
2488
2488
  return typeof v === "function" ? v : () => v;
2489
2489
  }, [colCellMeta?.className]);
2490
2490
  const colCellClassName = classNameResolver(rowOriginal);
2491
+ const rowClassNameMeta = meta?.rowClassName;
2492
+ const rowCellClassName = React$44.useMemo(() => {
2493
+ if (!rowClassNameMeta) return void 0;
2494
+ if (typeof rowClassNameMeta === "function") return rowClassNameMeta(cell.row);
2495
+ return rowClassNameMeta;
2496
+ }, [rowClassNameMeta, cell.row]);
2491
2497
  const isSearchMatch = meta?.getIsSearchMatch?.(rowIndex, columnId) ?? false;
2492
2498
  const isActiveSearchMatch = meta?.getIsActiveSearchMatch?.(rowIndex, columnId) ?? false;
2493
2499
  const onClick = React$44.useCallback((event) => {
@@ -2588,7 +2594,7 @@ function DataGridCellWrapper({ cell, table, rowIndex, columnId, isEditing, isFoc
2588
2594
  "text-left": align === "left",
2589
2595
  "text-right": align === "right",
2590
2596
  "text-center": align === "center"
2591
- }, {
2597
+ }, rowCellClassName, colCellClassName, {
2592
2598
  "ring-1 ring-foreground ring-inset dark:ring-secondary-foreground": isFocused,
2593
2599
  "bg-yellow-100 dark:bg-yellow-900/30": isSearchMatch && !isActiveSearchMatch,
2594
2600
  "bg-orange-200 dark:bg-orange-900/50": isActiveSearchMatch,
@@ -2599,7 +2605,7 @@ function DataGridCellWrapper({ cell, table, rowIndex, columnId, isEditing, isFoc
2599
2605
  "**:data-[slot=grid-cell-content]:line-clamp-3": !isEditing && rowHeight === "tall",
2600
2606
  "**:data-[slot=grid-cell-content]:line-clamp-4": !isEditing && rowHeight === "extra-tall",
2601
2607
  "relative overflow-visible": !!overlayContent
2602
- }, colCellClassName, className),
2608
+ }, className),
2603
2609
  onClick,
2604
2610
  onContextMenu,
2605
2611
  onDoubleClick,
@@ -3445,6 +3451,10 @@ function getColumnVariant(variant) {
3445
3451
  icon: CalendarIcon$1,
3446
3452
  label: "Date"
3447
3453
  };
3454
+ case "download-file": return {
3455
+ icon: DownloadIcon,
3456
+ label: "File download"
3457
+ };
3448
3458
  default: return null;
3449
3459
  }
3450
3460
  }
@@ -4547,6 +4557,47 @@ function DateCell({ cell, table, rowIndex, columnId, isFocused, isEditing, isSel
4547
4557
  });
4548
4558
  }
4549
4559
 
4560
+ //#endregion
4561
+ //#region src/data-grid/cell-variants/download-file-cell.tsx
4562
+ function DownloadFileCell({ cell, table, rowIndex, columnId, isEditing, isFocused, isSelected }) {
4563
+ const cellOpts = cell.column.columnDef.meta?.cell;
4564
+ const downloadCellOpts = cellOpts?.variant === "download-file" ? cellOpts : void 0;
4565
+ const cellValue = cell.getValue();
4566
+ const row = cell.row.original;
4567
+ const resolvedUrl = downloadCellOpts?.getUrl?.(cellValue, row) ?? (typeof cellValue === "string" ? cellValue : void 0);
4568
+ const resolvedFileName = typeof downloadCellOpts?.fileName === "function" ? downloadCellOpts.fileName(row, cellValue) : downloadCellOpts?.fileName;
4569
+ const label = downloadCellOpts?.label ?? "Download";
4570
+ return /* @__PURE__ */ jsx(DataGridCellWrapper, {
4571
+ cell,
4572
+ table,
4573
+ rowIndex,
4574
+ columnId,
4575
+ isEditing,
4576
+ isFocused,
4577
+ isSelected,
4578
+ children: /* @__PURE__ */ jsx("div", {
4579
+ "data-slot": "grid-cell-content",
4580
+ className: "size-full overflow-hidden outline-none",
4581
+ children: resolvedUrl ? /* @__PURE__ */ jsx(Button, {
4582
+ asChild: true,
4583
+ variant: "ghost",
4584
+ size: "sm",
4585
+ className: "h-7 gap-1 px-2",
4586
+ children: /* @__PURE__ */ jsxs("a", {
4587
+ href: resolvedUrl,
4588
+ download: resolvedFileName,
4589
+ target: "_blank",
4590
+ rel: "noreferrer",
4591
+ children: [/* @__PURE__ */ jsx(DownloadIcon, { className: "size-3.5" }), label]
4592
+ })
4593
+ }) : /* @__PURE__ */ jsx("span", {
4594
+ className: "text-muted-foreground",
4595
+ children: "-"
4596
+ })
4597
+ })
4598
+ });
4599
+ }
4600
+
4550
4601
  //#endregion
4551
4602
  //#region src/data-grid/cell-variants/gantt-cell.tsx
4552
4603
  function GanttCell({ cell, table, rowIndex, columnId, isFocused, isEditing, isSelected }) {
@@ -5584,6 +5635,15 @@ function DataGridCell({ cell, table }) {
5584
5635
  isFocused,
5585
5636
  isSelected
5586
5637
  });
5638
+ case "download-file": return /* @__PURE__ */ jsx(DownloadFileCell, {
5639
+ cell,
5640
+ table,
5641
+ rowIndex,
5642
+ columnId,
5643
+ isEditing,
5644
+ isFocused,
5645
+ isSelected
5646
+ });
5587
5647
  case "react-node": return /* @__PURE__ */ jsx(ReactNodeCell, {
5588
5648
  cell,
5589
5649
  table,
@@ -6231,7 +6291,7 @@ function useStore$1(store, selector) {
6231
6291
  const getSnapshot = React$22.useCallback(() => selector(store.getState()), [store, selector]);
6232
6292
  return React$22.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);
6233
6293
  }
6234
- function useDataGrid({ columns, data, onDataChange, onRowAdd: onRowAddProp, onRowsDelete: onRowsDeleteProp, onCellFocus: onCellFocusProp, onRowClick: onRowClickProp, highlightedRowIndex, rowHeight: rowHeightProp = DEFAULT_ROW_HEIGHT, overscan = OVERSCAN, initialState, autoFocus = false, enableColumnSelection = false, enableSearch = false, manualSorting, sorting: externalSorting, onSortingChange: externalOnSortingChange, onLoadMore, loadMoreThreshold = 25, totalRowCount, persistColumnState = false,...dataGridProps }) {
6294
+ function useDataGrid({ columns, data, onDataChange, onRowAdd: onRowAddProp, onRowsDelete: onRowsDeleteProp, onCellFocus: onCellFocusProp, onRowClick: onRowClickProp, highlightedRowIndex, rowClassName, rowHeight: rowHeightProp = DEFAULT_ROW_HEIGHT, overscan = OVERSCAN, initialState, autoFocus = false, enableColumnSelection = false, enableSearch = false, manualSorting, sorting: externalSorting, onSortingChange: externalOnSortingChange, onLoadMore, loadMoreThreshold = 25, totalRowCount, persistColumnState = false,...dataGridProps }) {
6235
6295
  const dataGridRef = React$22.useRef(null);
6236
6296
  const tableRef = React$22.useRef(null);
6237
6297
  const rowVirtualizerRef = React$22.useRef(null);
@@ -6367,7 +6427,11 @@ function useDataGrid({ columns, data, onDataChange, onRowAdd: onRowAddProp, onRo
6367
6427
  }, [initialState, persistedState]);
6368
6428
  const getNavigableColumnIds = React$22.useCallback(() => {
6369
6429
  const t = tableRef.current;
6370
- if (t) return t.getVisibleLeafColumns().map((c) => c.id).filter((c) => !NON_NAVIGABLE_COLUMN_IDS.includes(c));
6430
+ if (t) return [
6431
+ ...t.getLeftVisibleLeafColumns(),
6432
+ ...t.getCenterVisibleLeafColumns(),
6433
+ ...t.getRightVisibleLeafColumns()
6434
+ ].map((c) => c.id).filter((c) => !NON_NAVIGABLE_COLUMN_IDS.includes(c));
6371
6435
  return columnIds.filter((c) => !NON_NAVIGABLE_COLUMN_IDS.includes(c));
6372
6436
  }, [columnIds]);
6373
6437
  const onDataUpdate = React$22.useCallback((updates) => {
@@ -7246,6 +7310,7 @@ function useDataGrid({ columns, data, onDataChange, onRowAdd: onRowAddProp, onRo
7246
7310
  rowHeight,
7247
7311
  isScrolling,
7248
7312
  highlightedRowIndex,
7313
+ rowClassName,
7249
7314
  columnDefsVersion,
7250
7315
  onRowClick: onRowClickProp,
7251
7316
  getIsCellSelected,
@@ -7284,6 +7349,7 @@ function useDataGrid({ columns, data, onDataChange, onRowAdd: onRowAddProp, onRo
7284
7349
  searchOpen,
7285
7350
  isScrolling,
7286
7351
  highlightedRowIndex,
7352
+ rowClassName,
7287
7353
  columnDefsVersion,
7288
7354
  onRowClickProp,
7289
7355
  getIsCellSelected,
@@ -9020,13 +9086,12 @@ const SIDEBAR_MAX_WIDTH = 600;
9020
9086
  * Internal store context. Exported for use by `Sidebar` component in the same
9021
9087
  * package to build per-sidebar resize contexts.
9022
9088
  */
9023
- const SidebarStoreContext = React$13.createContext(null);
9089
+ const SidebarContext = React$13.createContext(null);
9024
9090
  /**
9025
9091
  * Context that identifies which sidebar a component belongs to.
9026
9092
  * Set by `<Sidebar sidebarId="...">`, consumed by `useSidebar()`.
9027
9093
  */
9028
9094
  const SidebarIdContext = React$13.createContext("default");
9029
- const SidebarResizeContext = React$13.createContext(null);
9030
9095
  /**
9031
9096
  * Returns the state and controls for a specific sidebar.
9032
9097
  *
@@ -9034,7 +9099,7 @@ const SidebarResizeContext = React$13.createContext(null);
9034
9099
  * `SidebarIdContext` (set by the parent `<Sidebar>`), then to `"default"`.
9035
9100
  */
9036
9101
  function useSidebar(sidebarId) {
9037
- const store = React$13.useContext(SidebarStoreContext);
9102
+ const store = React$13.useContext(SidebarContext);
9038
9103
  const ctxId = React$13.useContext(SidebarIdContext);
9039
9104
  const id = sidebarId ?? ctxId;
9040
9105
  if (!store) throw new Error("useSidebar must be used within a SidebarProvider.");
@@ -9042,6 +9107,9 @@ function useSidebar(sidebarId) {
9042
9107
  const openMobile = store.mobileStates[id] ?? false;
9043
9108
  const width = store.widthStates[id];
9044
9109
  const { isMobile, isResizing } = store;
9110
+ const registry = store.sidebarRegistry[id];
9111
+ const minWidth = registry?.minWidth ?? store.providerMinWidth;
9112
+ const maxWidth = registry?.maxWidth ?? store.providerMaxWidth;
9045
9113
  const setOpen = React$13.useCallback((value) => store.setOpen(id, value), [store.setOpen, id]);
9046
9114
  const setOpenMobile = React$13.useCallback((value) => store.setOpenMobile(id, value), [store.setOpenMobile, id]);
9047
9115
  const setWidth = React$13.useCallback((value) => store.setWidth(id, value), [store.setWidth, id]);
@@ -9060,7 +9128,9 @@ function useSidebar(sidebarId) {
9060
9128
  toggleSidebar,
9061
9129
  width,
9062
9130
  setWidth,
9063
- isResizing
9131
+ isResizing,
9132
+ minWidth,
9133
+ maxWidth
9064
9134
  }), [
9065
9135
  state,
9066
9136
  open,
@@ -9071,9 +9141,22 @@ function useSidebar(sidebarId) {
9071
9141
  toggleSidebar,
9072
9142
  width,
9073
9143
  setWidth,
9074
- isResizing
9144
+ isResizing,
9145
+ minWidth,
9146
+ maxWidth
9075
9147
  ]);
9076
9148
  }
9149
+ /**
9150
+ * Returns a list of all registered sidebars with their IDs and sides.
9151
+ */
9152
+ function useRegisteredSidebars() {
9153
+ const store = React$13.useContext(SidebarContext);
9154
+ if (!store) throw new Error("useRegisteredSidebars must be used within a SidebarProvider.");
9155
+ return React$13.useMemo(() => Object.entries(store.sidebarRegistry).map(([sidebarId, entry]) => ({
9156
+ sidebarId,
9157
+ side: entry.side
9158
+ })), [store.sidebarRegistry]);
9159
+ }
9077
9160
  function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: setOpenProp, width: widthProp, onWidthChange, minWidth = SIDEBAR_MIN_WIDTH, maxWidth = SIDEBAR_MAX_WIDTH, storageKey, defaultOpenSidebars, defaultWidths, keyboardShortcuts, className, style, children,...props }) {
9078
9161
  const isMobile = useIsMobile();
9079
9162
  const [isResizing, setIsResizing] = React$13.useState(false);
@@ -9162,11 +9245,21 @@ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: set
9162
9245
  [id]: width
9163
9246
  }));
9164
9247
  }, [onWidthChange]);
9165
- const [sideMap, setSideMap] = React$13.useState({});
9166
- const registerSide = React$13.useCallback((id, side) => {
9167
- setSideMap((prev) => prev[id] === side ? prev : {
9168
- ...prev,
9169
- [id]: side
9248
+ const [sidebarRegistry, setSidebarRegistry] = React$13.useState({});
9249
+ const registerSidebar = React$13.useCallback((id, config) => {
9250
+ setSidebarRegistry((prev) => {
9251
+ const existing = prev[id];
9252
+ if (existing && existing.side === config.side && existing.minWidth === config.minWidth && existing.maxWidth === config.maxWidth) return prev;
9253
+ return {
9254
+ ...prev,
9255
+ [id]: config
9256
+ };
9257
+ });
9258
+ }, []);
9259
+ const unregisterSidebar = React$13.useCallback((id) => {
9260
+ setSidebarRegistry((prev) => {
9261
+ const { [id]: _,...rest } = prev;
9262
+ return rest;
9170
9263
  });
9171
9264
  }, []);
9172
9265
  const effectiveOpenStatesRef = React$13.useRef(effectiveOpenStates);
@@ -9205,11 +9298,12 @@ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: set
9205
9298
  openStates: effectiveOpenStates,
9206
9299
  mobileStates,
9207
9300
  widthStates: effectiveWidthStates,
9208
- sideMap,
9301
+ sidebarRegistry,
9209
9302
  setOpen,
9210
9303
  setOpenMobile,
9211
9304
  setWidth,
9212
- registerSide,
9305
+ registerSidebar,
9306
+ unregisterSidebar,
9213
9307
  isMobile,
9214
9308
  defaultOpen,
9215
9309
  isResizing,
@@ -9220,11 +9314,12 @@ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: set
9220
9314
  effectiveOpenStates,
9221
9315
  mobileStates,
9222
9316
  effectiveWidthStates,
9223
- sideMap,
9317
+ sidebarRegistry,
9224
9318
  setOpen,
9225
9319
  setOpenMobile,
9226
9320
  setWidth,
9227
- registerSide,
9321
+ registerSidebar,
9322
+ unregisterSidebar,
9228
9323
  isMobile,
9229
9324
  defaultOpen,
9230
9325
  isResizing,
@@ -9233,7 +9328,7 @@ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: set
9233
9328
  ]);
9234
9329
  const defaultWidth = effectiveWidthStates["default"];
9235
9330
  const sidebarWidthValue = defaultWidth ? `${defaultWidth}px` : SIDEBAR_WIDTH;
9236
- return /* @__PURE__ */ jsx(SidebarStoreContext.Provider, {
9331
+ return /* @__PURE__ */ jsx(SidebarContext.Provider, {
9237
9332
  value: storeValue,
9238
9333
  children: /* @__PURE__ */ jsx(TooltipProvider, {
9239
9334
  delayDuration: 0,
@@ -9255,29 +9350,24 @@ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: set
9255
9350
  //#endregion
9256
9351
  //#region src/sidebar/sidebar.tsx
9257
9352
  function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas", sidebarId = "default", minWidth, maxWidth, className, children,...props }) {
9258
- const { isMobile, state, openMobile, setOpenMobile, width, setWidth, isResizing } = useSidebar(sidebarId);
9259
- const store = React$12.useContext(SidebarStoreContext);
9353
+ const { isMobile, state, openMobile, setOpenMobile, width, isResizing } = useSidebar(sidebarId);
9354
+ const store = React$12.useContext(SidebarContext);
9355
+ const storeRef = React$12.useRef(store);
9356
+ storeRef.current = store;
9357
+ const effectiveMinWidth = minWidth ?? store?.providerMinWidth ?? SIDEBAR_MIN_WIDTH;
9358
+ const effectiveMaxWidth = maxWidth ?? store?.providerMaxWidth ?? SIDEBAR_MAX_WIDTH;
9260
9359
  React$12.useEffect(() => {
9261
- store?.registerSide(sidebarId, side);
9360
+ storeRef.current?.registerSidebar(sidebarId, {
9361
+ side,
9362
+ minWidth: effectiveMinWidth,
9363
+ maxWidth: effectiveMaxWidth
9364
+ });
9365
+ return () => storeRef.current?.unregisterSidebar(sidebarId);
9262
9366
  }, [
9263
- store,
9264
9367
  sidebarId,
9265
- side
9266
- ]);
9267
- const effectiveMinWidth = minWidth ?? store?.providerMinWidth ?? SIDEBAR_MIN_WIDTH;
9268
- const effectiveMaxWidth = maxWidth ?? store?.providerMaxWidth ?? SIDEBAR_MAX_WIDTH;
9269
- const resizeContextValue = React$12.useMemo(() => ({
9270
- onWidthChange: setWidth,
9271
- minWidth: effectiveMinWidth,
9272
- maxWidth: effectiveMaxWidth,
9273
- isResizing,
9274
- setIsResizing: store?.setIsResizing ?? (() => {})
9275
- }), [
9276
- setWidth,
9368
+ side,
9277
9369
  effectiveMinWidth,
9278
- effectiveMaxWidth,
9279
- isResizing,
9280
- store?.setIsResizing
9370
+ effectiveMaxWidth
9281
9371
  ]);
9282
9372
  const sidebarWidthValue = width ? `${width}px` : SIDEBAR_WIDTH;
9283
9373
  const sidebarStyle = {
@@ -9286,10 +9376,7 @@ function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas"
9286
9376
  };
9287
9377
  const wrappedChildren = /* @__PURE__ */ jsx(SidebarIdContext.Provider, {
9288
9378
  value: sidebarId,
9289
- children: /* @__PURE__ */ jsx(SidebarResizeContext.Provider, {
9290
- value: resizeContextValue,
9291
- children
9292
- })
9379
+ children
9293
9380
  });
9294
9381
  if (collapsible === "none") return /* @__PURE__ */ jsx("div", {
9295
9382
  "data-slot": "sidebar",
@@ -9351,10 +9438,10 @@ function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas"
9351
9438
  }
9352
9439
  function SidebarTrigger({ className, onClick, sidebarId, children,...props }) {
9353
9440
  const { toggleSidebar } = useSidebar(sidebarId);
9354
- const store = React$12.useContext(SidebarStoreContext);
9441
+ const store = React$12.useContext(SidebarContext);
9355
9442
  const ctxId = React$12.useContext(SidebarIdContext);
9356
9443
  const resolvedId = sidebarId ?? ctxId;
9357
- const side = store?.sideMap[resolvedId];
9444
+ const side = store?.sidebarRegistry[resolvedId]?.side;
9358
9445
  const Icon = side === "right" ? PanelRightIcon : PanelLeftIcon;
9359
9446
  return /* @__PURE__ */ jsx(Button, {
9360
9447
  "data-sidebar": "trigger",
@@ -9374,17 +9461,18 @@ function SidebarTrigger({ className, onClick, sidebarId, children,...props }) {
9374
9461
  });
9375
9462
  }
9376
9463
  function SidebarRail({ className,...props }) {
9377
- const { toggleSidebar } = useSidebar();
9378
- const resizeCtx = React$12.useContext(SidebarResizeContext);
9464
+ const { toggleSidebar, setWidth, minWidth, maxWidth } = useSidebar();
9465
+ const store = React$12.useContext(SidebarContext);
9379
9466
  const startXRef = React$12.useRef(0);
9380
9467
  const hasDraggedRef = React$12.useRef(false);
9381
- const isResizable = !!resizeCtx?.onWidthChange;
9468
+ const sidebarId = React$12.useContext(SidebarIdContext);
9469
+ const isResizable = !!store?.sidebarRegistry[sidebarId];
9382
9470
  const handleMouseDown = React$12.useCallback((e) => {
9383
- if (!isResizable || !resizeCtx) return;
9471
+ if (!isResizable) return;
9384
9472
  e.preventDefault();
9385
9473
  startXRef.current = e.clientX;
9386
9474
  hasDraggedRef.current = false;
9387
- resizeCtx.setIsResizing(true);
9475
+ store?.setIsResizing(true);
9388
9476
  const sidebarEl = e.target.closest("[data-slot=\"sidebar-container\"]");
9389
9477
  const sidebarLeft = sidebarEl?.getBoundingClientRect().left ?? 0;
9390
9478
  const side = e.target.closest("[data-side]")?.getAttribute("data-side");
@@ -9395,10 +9483,10 @@ function SidebarRail({ className,...props }) {
9395
9483
  const sidebarRight = sidebarEl?.getBoundingClientRect().right ?? globalThis.innerWidth;
9396
9484
  newWidth = sidebarRight - moveEvent.clientX;
9397
9485
  } else newWidth = moveEvent.clientX - sidebarLeft;
9398
- if (newWidth >= resizeCtx.minWidth && newWidth <= resizeCtx.maxWidth) resizeCtx.onWidthChange?.(newWidth);
9486
+ if (newWidth >= minWidth && newWidth <= maxWidth) setWidth(newWidth);
9399
9487
  };
9400
9488
  const handleMouseUp = () => {
9401
- resizeCtx.setIsResizing(false);
9489
+ store?.setIsResizing(false);
9402
9490
  document.removeEventListener("mousemove", handleMouseMove);
9403
9491
  document.removeEventListener("mouseup", handleMouseUp);
9404
9492
  document.body.style.cursor = "";
@@ -9408,7 +9496,13 @@ function SidebarRail({ className,...props }) {
9408
9496
  document.addEventListener("mouseup", handleMouseUp);
9409
9497
  document.body.style.cursor = "col-resize";
9410
9498
  document.body.style.userSelect = "none";
9411
- }, [isResizable, resizeCtx]);
9499
+ }, [
9500
+ isResizable,
9501
+ store,
9502
+ setWidth,
9503
+ minWidth,
9504
+ maxWidth
9505
+ ]);
9412
9506
  const handleClick = React$12.useCallback(() => {
9413
9507
  if (hasDraggedRef.current) return;
9414
9508
  toggleSidebar();
@@ -9648,14 +9742,8 @@ function SidebarMenuSubButton({ asChild = false, size = "md", isActive = false,
9648
9742
  //#region src/sidebar/sidebar-tab-context-provider.tsx
9649
9743
  const SidebarTabsContext = React$11.createContext(null);
9650
9744
  function SidebarTabsProvider({ children }) {
9651
- const [tabsMap, setTabsMap] = React$11.useState({
9652
- left: new Map(),
9653
- right: new Map()
9654
- });
9655
- const [activeTab, setActiveTabState] = React$11.useState({
9656
- left: null,
9657
- right: null
9658
- });
9745
+ const [tabsMap, setTabsMap] = React$11.useState({});
9746
+ const [activeTab, setActiveTabState] = React$11.useState({});
9659
9747
  const register = React$11.useCallback((side, tab) => {
9660
9748
  setTabsMap((prev) => {
9661
9749
  const next = new Map(prev[side]);
@@ -9666,7 +9754,7 @@ function SidebarTabsProvider({ children }) {
9666
9754
  };
9667
9755
  });
9668
9756
  setActiveTabState((prev) => {
9669
- if (prev[side] === null) return {
9757
+ if (prev[side] === void 0 || prev[side] === null) return {
9670
9758
  ...prev,
9671
9759
  [side]: tab.id
9672
9760
  };
@@ -9701,10 +9789,9 @@ function SidebarTabsProvider({ children }) {
9701
9789
  }, []);
9702
9790
  const sortedTabs = React$11.useMemo(() => {
9703
9791
  const sort = (map) => [...map.values()].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
9704
- return {
9705
- left: sort(tabsMap.left),
9706
- right: sort(tabsMap.right)
9707
- };
9792
+ const result = {};
9793
+ for (const [side, map] of Object.entries(tabsMap)) result[side] = sort(map);
9794
+ return result;
9708
9795
  }, [tabsMap]);
9709
9796
  const value = React$11.useMemo(() => ({
9710
9797
  tabs: sortedTabs,
@@ -9731,8 +9818,8 @@ function useSidebarTabs(side) {
9731
9818
  if (side) ctx.setActiveTab(side, tabId);
9732
9819
  }, [ctx.setActiveTab, side]);
9733
9820
  const boundResult = React$11.useMemo(() => side ? {
9734
- tabs: ctx.tabs[side],
9735
- activeTab: ctx.activeTab[side],
9821
+ tabs: ctx.tabs[side] ?? [],
9822
+ activeTab: ctx.activeTab[side] ?? null,
9736
9823
  setActiveTab: boundSetActiveTab
9737
9824
  } : null, [
9738
9825
  side,
@@ -9746,7 +9833,7 @@ function useSidebarTabs(side) {
9746
9833
 
9747
9834
  //#endregion
9748
9835
  //#region src/sidebar/sidebar-tab.tsx
9749
- function SidebarTab({ side, id, icon, label, render, order }) {
9836
+ function SidebarTab({ side, id, icon, label, render, order, badge }) {
9750
9837
  const ctx = React$10.useContext(SidebarTabsContext);
9751
9838
  if (!ctx) throw new Error("SidebarTab must be used within a SidebarTabsProvider.");
9752
9839
  const { register, unregister } = ctx;
@@ -9761,7 +9848,8 @@ function SidebarTab({ side, id, icon, label, render, order }) {
9761
9848
  icon: iconRef.current,
9762
9849
  label,
9763
9850
  render: stableRender,
9764
- order
9851
+ order,
9852
+ badge
9765
9853
  });
9766
9854
  return () => unregister(side, id);
9767
9855
  }, [
@@ -9769,18 +9857,19 @@ function SidebarTab({ side, id, icon, label, render, order }) {
9769
9857
  id,
9770
9858
  label,
9771
9859
  order,
9860
+ badge,
9772
9861
  register,
9773
9862
  unregister,
9774
9863
  stableRender
9775
9864
  ]);
9776
9865
  return null;
9777
9866
  }
9778
- function DynamicTabbedSidebar({ side, sidebarId, orientation = "horizontal", collapsible = "offcanvas", className,...sidebarProps }) {
9867
+ function DynamicTabbedSidebar({ side, orientation = "horizontal", collapsible = "offcanvas", className,...sidebarProps }) {
9779
9868
  const ctx = React$10.useContext(SidebarTabsContext);
9780
9869
  if (!ctx) throw new Error("DynamicTabbedSidebar must be used within a SidebarTabsProvider.");
9781
9870
  const { setActiveTab } = ctx;
9782
- const tabs = ctx.tabs[side];
9783
- const activeTabId = ctx.activeTab[side];
9871
+ const tabs = ctx.tabs[side] ?? [];
9872
+ const activeTabId = ctx.activeTab[side] ?? null;
9784
9873
  const activeTab = tabs.find((t) => t.id === activeTabId);
9785
9874
  React$10.useEffect(() => {
9786
9875
  if (tabs.length > 0 && tabs[0] && !activeTab) setActiveTab(side, tabs[0].id);
@@ -9790,12 +9879,11 @@ function DynamicTabbedSidebar({ side, sidebarId, orientation = "horizontal", col
9790
9879
  side,
9791
9880
  setActiveTab
9792
9881
  ]);
9793
- const effectiveSidebarId = sidebarId ?? side;
9794
9882
  const isVertical = orientation === "vertical";
9795
9883
  const effectiveCollapsible = isVertical && collapsible === "offcanvas" ? "icon" : collapsible;
9796
9884
  return /* @__PURE__ */ jsxs(Sidebar, {
9797
9885
  side,
9798
- sidebarId: effectiveSidebarId,
9886
+ sidebarId: side,
9799
9887
  collapsible: effectiveCollapsible,
9800
9888
  className,
9801
9889
  ...sidebarProps,
@@ -9805,13 +9893,12 @@ function DynamicTabbedSidebar({ side, sidebarId, orientation = "horizontal", col
9805
9893
  activeTabId,
9806
9894
  activeTab,
9807
9895
  isVertical,
9808
- sidebarId: effectiveSidebarId,
9809
9896
  collapsible: effectiveCollapsible
9810
9897
  }), /* @__PURE__ */ jsx(SidebarRail, {})]
9811
9898
  });
9812
9899
  }
9813
- function TabbedSidebarContent({ side, tabs, activeTabId, activeTab, isVertical, sidebarId, collapsible }) {
9814
- const { state } = useSidebar(sidebarId);
9900
+ function TabbedSidebarContent({ side, tabs, activeTabId, activeTab, isVertical, collapsible }) {
9901
+ const { state } = useSidebar(side);
9815
9902
  const isCollapsed = state === "collapsed";
9816
9903
  const isIconCollapsible = collapsible === "icon";
9817
9904
  if (isCollapsed && isIconCollapsible) return /* @__PURE__ */ jsx("div", {
@@ -9819,8 +9906,7 @@ function TabbedSidebarContent({ side, tabs, activeTabId, activeTab, isVertical,
9819
9906
  children: /* @__PURE__ */ jsx(VerticalTabBar, {
9820
9907
  side,
9821
9908
  tabs,
9822
- activeTabId,
9823
- sidebarId
9909
+ activeTabId
9824
9910
  })
9825
9911
  });
9826
9912
  if (isVertical) return /* @__PURE__ */ jsxs("div", {
@@ -9828,8 +9914,7 @@ function TabbedSidebarContent({ side, tabs, activeTabId, activeTab, isVertical,
9828
9914
  children: [/* @__PURE__ */ jsx(VerticalTabBar, {
9829
9915
  side,
9830
9916
  tabs,
9831
- activeTabId,
9832
- sidebarId
9917
+ activeTabId
9833
9918
  }), /* @__PURE__ */ jsx("div", {
9834
9919
  className: "flex min-w-0 flex-1 flex-col",
9835
9920
  children: /* @__PURE__ */ jsx(SidebarContent, { children: activeTab?.render() })
@@ -9841,8 +9926,7 @@ function TabbedSidebarContent({ side, tabs, activeTabId, activeTab, isVertical,
9841
9926
  /* @__PURE__ */ jsx(HorizontalTabBar, {
9842
9927
  side,
9843
9928
  tabs,
9844
- activeTabId,
9845
- sidebarId
9929
+ activeTabId
9846
9930
  }),
9847
9931
  tabs.length > 0 && /* @__PURE__ */ jsx(SidebarSeparator, {}),
9848
9932
  /* @__PURE__ */ jsx("div", {
@@ -9852,9 +9936,9 @@ function TabbedSidebarContent({ side, tabs, activeTabId, activeTab, isVertical,
9852
9936
  ]
9853
9937
  });
9854
9938
  }
9855
- function HorizontalTabBar({ side, tabs, activeTabId, sidebarId }) {
9939
+ function HorizontalTabBar({ side, tabs, activeTabId }) {
9856
9940
  const ctx = React$10.useContext(SidebarTabsContext);
9857
- const { state, toggleSidebar } = useSidebar(sidebarId ?? side);
9941
+ const { state, toggleSidebar } = useSidebar(side);
9858
9942
  if (tabs.length === 0) return null;
9859
9943
  const handleTabClick = (tabId) => {
9860
9944
  if (state === "collapsed") {
@@ -9869,14 +9953,20 @@ function HorizontalTabBar({ side, tabs, activeTabId, sidebarId }) {
9869
9953
  children: tabs.map((tab) => {
9870
9954
  const Icon = tab.icon;
9871
9955
  const isActive = tab.id === activeTabId;
9956
+ const badge = tab.badge;
9872
9957
  return /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
9873
9958
  asChild: true,
9874
- children: /* @__PURE__ */ jsx("button", {
9959
+ children: /* @__PURE__ */ jsxs("button", {
9875
9960
  role: "tab",
9876
9961
  "aria-selected": isActive,
9877
- className: cn("flex flex-1 items-center justify-center rounded-sm p-1.5 transition-colors", isActive ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"),
9962
+ className: cn("flex flex-1 items-center justify-center rounded-sm p-1.5 transition-colors cursor-pointer group/button", isActive ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground", badge && "pt-1"),
9878
9963
  onClick: () => handleTabClick(tab.id),
9879
- children: /* @__PURE__ */ jsx(Icon, { className: "size-4" })
9964
+ children: [/* @__PURE__ */ jsx(Icon, { className: "size-4" }), badge && /* @__PURE__ */ jsx(Badge, {
9965
+ size: "xs",
9966
+ variant: badge.variant,
9967
+ className: cn("ml-0.5 h-3.25 mb-1.25 px-1.5 group-hover/button:opacity-100 opacity-70 transition-opacity", isActive && "opacity-100", badge.className),
9968
+ children: badge.label
9969
+ })]
9880
9970
  })
9881
9971
  }), /* @__PURE__ */ jsx(TooltipContent, {
9882
9972
  side: "bottom",
@@ -9885,9 +9975,9 @@ function HorizontalTabBar({ side, tabs, activeTabId, sidebarId }) {
9885
9975
  })
9886
9976
  }) });
9887
9977
  }
9888
- function VerticalTabBar({ side, tabs, activeTabId, sidebarId }) {
9978
+ function VerticalTabBar({ side, tabs, activeTabId }) {
9889
9979
  const ctx = React$10.useContext(SidebarTabsContext);
9890
- const { state, toggleSidebar } = useSidebar(sidebarId ?? side);
9980
+ const { state, toggleSidebar } = useSidebar(side);
9891
9981
  const isCollapsed = state === "collapsed";
9892
9982
  if (tabs.length === 0) return null;
9893
9983
  const handleTabClick = (tabId) => {
@@ -9903,14 +9993,20 @@ function VerticalTabBar({ side, tabs, activeTabId, sidebarId }) {
9903
9993
  children: tabs.map((tab) => {
9904
9994
  const Icon = tab.icon;
9905
9995
  const isActive = tab.id === activeTabId;
9996
+ const badge = tab.badge;
9906
9997
  return /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
9907
9998
  asChild: true,
9908
- children: /* @__PURE__ */ jsx("button", {
9999
+ children: /* @__PURE__ */ jsxs("button", {
9909
10000
  role: "tab",
9910
10001
  "aria-selected": isActive,
9911
- className: cn("size-9 flex items-center justify-center rounded-md transition-colors", isActive ? "bg-sidebar-accent text-sidebar-accent-foreground" : "text-muted-foreground hover:text-foreground hover:bg-sidebar-accent/50"),
10002
+ className: cn("size-9 flex items-center justify-center rounded-md transition-colors cursor-pointer group/button", isActive ? "bg-sidebar-accent text-sidebar-accent-foreground" : "text-muted-foreground hover:text-foreground hover:bg-sidebar-accent/50"),
9912
10003
  onClick: () => handleTabClick(tab.id),
9913
- children: /* @__PURE__ */ jsx(Icon, { className: "size-4" })
10004
+ children: [/* @__PURE__ */ jsx(Icon, { className: "size-4" }), badge && /* @__PURE__ */ jsx(Badge, {
10005
+ size: "xs",
10006
+ variant: badge.variant,
10007
+ className: cn("ml-0.5 h-3.25 mb-1.25 px-1.5 group-hover/button:opacity-100 opacity-70 transition-opacity", isActive && "opacity-100", badge.className),
10008
+ children: badge.label
10009
+ })]
9914
10010
  })
9915
10011
  }), /* @__PURE__ */ jsx(TooltipContent, {
9916
10012
  side: side === "left" ? "right" : "left",
@@ -11195,7 +11291,7 @@ const TreeBranch = ({ node, level, onNodeSelect, onGroupSelect, onToggleGroup, i
11195
11291
  const hasChildren = node.children && node.children.length > 0;
11196
11292
  if (!isGroup) return /* @__PURE__ */ jsxs("div", {
11197
11293
  "data-test-id": `tree-node-${node.id}`,
11198
- className: cn("relative flex items-center gap-2 py-1.5 px-2 rounded-md cursor-pointer hover:bg-accent hover:text-accent-foreground transition-colors border border-transparent hover:border hover:border-(--discreet-border)", { "bg-primary text-primary-foreground hover:border hover:border-(--discreet-border)": selectedId === node.id }),
11294
+ className: cn("relative flex items-center gap-2 py-1.5 px-2 rounded-md cursor-pointer hover:bg-accent hover:text-accent-foreground transition-colors border border-transparent hover:border hover:border-(--discreet-border)", node.className, { "bg-primary text-primary-foreground hover:border hover:border-(--discreet-border)": selectedId === node.id }),
11199
11295
  style: { marginLeft: `${level * 24}px` },
11200
11296
  onClick: () => onNodeSelect?.(node),
11201
11297
  children: [
@@ -11213,7 +11309,7 @@ const TreeBranch = ({ node, level, onNodeSelect, onGroupSelect, onToggleGroup, i
11213
11309
  "data-test-id": `tree-group-${node.id}`,
11214
11310
  children: [/* @__PURE__ */ jsxs(AccordionTrigger, {
11215
11311
  style: { "--margin-left": `calc(${level * 24 + 16}px - 16px)` },
11216
- className: cn("flex flex-1 overflow-hidden items-center gap-2 py-1.5 px-2 rounded-md ml-(--margin-left) hover:bg-accent hover:text-accent-foreground hover:no-underline transition-colors border border-transparent hover:border hover:border-(--discreet-border)", "[&>svg:last-child]:hidden", { "bg-primary text-primary-foreground": selectedId === node.id }),
11312
+ className: cn("flex flex-1 overflow-hidden items-center gap-2 py-1.5 px-2 rounded-md ml-(--margin-left) hover:bg-accent hover:text-accent-foreground hover:no-underline transition-colors border border-transparent hover:border hover:border-(--discreet-border)", "[&>svg:last-child]:hidden", node.className, { "bg-primary text-primary-foreground": selectedId === node.id }),
11217
11313
  children: [
11218
11314
  /* @__PURE__ */ jsx(PlusIcon, {
11219
11315
  "data-test-id": `tree-expand-${node.id}`,
@@ -11299,5 +11395,5 @@ const TreeView = React$1.forwardRef(({ data, onNodeSelect, onGroupSelect, onTogg
11299
11395
  TreeView.displayName = "TreeView";
11300
11396
 
11301
11397
  //#endregion
11302
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, Avatar, AvatarFallback, AvatarImage, Badge, KanbanBoard as Board, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Calendar, CalendarDayButton, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, Checkbox, CheckboxCell, Collapse, CollapseContent, CollapseTrigger, KanbanColumn as Column, KanbanColumnHandle as ColumnHandle, ComboboxDemo, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandPalette, CommandPaletteDialog, CommandPaletteEmpty, CommandPaletteGroup, CommandPaletteInput, CommandPaletteItem, CommandPaletteList, CommandPaletteSeparator, CommandPaletteShortcut, CommandSeparator, CommandShortcut, CommentCreate, CommentList, CommentThread, ContentFrame, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DataGrid, DataGridCell, DataGridCellWrapper, DataGridColumnHeader, DataGridContextMenu, DataGridRow, DataGridSearch, DataGridViewMenu, DateCell, DatePickerDemo, DeferredInput, DeferredNumberInput, DeferredTextarea, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, DynamicTabbedSidebar, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, GanttCell, GanttTimeline, GanttTimerangePicker, HeaderComponents, HierarchyCell, HierarchyItem, HoverCard, HoverCardContent, HoverCardTrigger, InfoCard, Input, KanbanItem as Item, KanbanItemHandle as ItemHandle, KanbanRoot as Kanban, KanbanBoard, KanbanColumn, KanbanColumnHandle, KanbanItem, KanbanItemHandle, KanbanOverlay, Label, Loader, LongTextCell, MarkValueRenderer, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Modal, MultiSelectCell, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NumberCell, NumberInput, KanbanOverlay as Overlay, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, ReactNodeCell, ResizableHandle, ResizablePanel, ResizablePanelGroup, KanbanRoot as Root, SIDEBAR_KEYBOARD_SHORTCUT, SIDEBAR_KEYBOARD_SHORTCUT_RIGHT, SIDEBAR_MAX_WIDTH, SIDEBAR_MIN_WIDTH, SIDEBAR_WIDTH, SIDEBAR_WIDTH_ICON, SIDEBAR_WIDTH_MOBILE, ScrollArea, ScrollBar, Select, SelectCell, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, ShortTextCell, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarIdContext, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarResizeContext, SidebarSeparator, SidebarStoreContext, SidebarTab, SidebarTabsContext, SidebarTabsProvider, SidebarTrigger, Skeleton, Slicer, SlicerHierarchyItem, Slider, Spinner, Stepper, StepperContent, StepperDescription, StepperIndicator, StepperItem, StepperList, StepperNext, StepperPrev, StepperSeparator, StepperTitle, StepperTrigger, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TreeBranch, TreeView, badgeVariants, buildLabelMap, buttonVariants, checkboxVariants, cn, commandInputVariants, createSelectColumn, findOptionById, getAllDescendantIds, getAllDescendantValues, getAllIds, getAncestorIds, getCellKey, getCommonPinningStyles, getInitialExpandedIds, getLabelPath, getLineCount, getRowHeightValue, inputVariants, isoToLocalDate, knobVariants, matchesSearch, navigationMenuTriggerStyle, parseCellKey, sliderVariants, testId, toast, toggleVariants, useCallbackRef, useDataGrid, useDebouncedCallback, useIsMobile, useSidebar, useSidebarTabs, useStore as useStepper };
11398
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, Avatar, AvatarFallback, AvatarImage, Badge, KanbanBoard as Board, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Calendar, CalendarDayButton, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, Checkbox, CheckboxCell, Collapse, CollapseContent, CollapseTrigger, KanbanColumn as Column, KanbanColumnHandle as ColumnHandle, ComboboxDemo, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandPalette, CommandPaletteDialog, CommandPaletteEmpty, CommandPaletteGroup, CommandPaletteInput, CommandPaletteItem, CommandPaletteList, CommandPaletteSeparator, CommandPaletteShortcut, CommandSeparator, CommandShortcut, CommentCreate, CommentList, CommentThread, ContentFrame, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DataGrid, DataGridCell, DataGridCellWrapper, DataGridColumnHeader, DataGridContextMenu, DataGridRow, DataGridSearch, DataGridViewMenu, DateCell, DatePickerDemo, DeferredInput, DeferredNumberInput, DeferredTextarea, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, DynamicTabbedSidebar, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, GanttCell, GanttTimeline, GanttTimerangePicker, HeaderComponents, HierarchyCell, HierarchyItem, HoverCard, HoverCardContent, HoverCardTrigger, InfoCard, Input, KanbanItem as Item, KanbanItemHandle as ItemHandle, KanbanRoot as Kanban, KanbanBoard, KanbanColumn, KanbanColumnHandle, KanbanItem, KanbanItemHandle, KanbanOverlay, Label, Loader, LongTextCell, MarkValueRenderer, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Modal, MultiSelectCell, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NumberCell, NumberInput, KanbanOverlay as Overlay, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, ReactNodeCell, ResizableHandle, ResizablePanel, ResizablePanelGroup, KanbanRoot as Root, SIDEBAR_KEYBOARD_SHORTCUT, SIDEBAR_KEYBOARD_SHORTCUT_RIGHT, SIDEBAR_MAX_WIDTH, SIDEBAR_MIN_WIDTH, SIDEBAR_WIDTH, SIDEBAR_WIDTH_ICON, SIDEBAR_WIDTH_MOBILE, ScrollArea, ScrollBar, Select, SelectCell, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, ShortTextCell, Sidebar, SidebarContent, SidebarContext, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarIdContext, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTab, SidebarTabsContext, SidebarTabsProvider, SidebarTrigger, Skeleton, Slicer, SlicerHierarchyItem, Slider, Spinner, Stepper, StepperContent, StepperDescription, StepperIndicator, StepperItem, StepperList, StepperNext, StepperPrev, StepperSeparator, StepperTitle, StepperTrigger, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TreeBranch, TreeView, badgeVariants, buildLabelMap, buttonVariants, checkboxVariants, cn, commandInputVariants, createSelectColumn, findOptionById, getAllDescendantIds, getAllDescendantValues, getAllIds, getAncestorIds, getCellKey, getCommonPinningStyles, getInitialExpandedIds, getLabelPath, getLineCount, getRowHeightValue, inputVariants, isoToLocalDate, knobVariants, matchesSearch, navigationMenuTriggerStyle, parseCellKey, sliderVariants, testId, toast, toggleVariants, useCallbackRef, useDataGrid, useDebouncedCallback, useIsMobile, useRegisteredSidebars, useSidebar, useSidebarTabs, useStore as useStepper };
11303
11399
  //# sourceMappingURL=index.js.map