@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.d.ts +382 -359
- package/dist/index.js +193 -97
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
-
},
|
|
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
|
|
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
|
|
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(
|
|
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 [
|
|
9166
|
-
const
|
|
9167
|
-
|
|
9168
|
-
|
|
9169
|
-
|
|
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
|
-
|
|
9301
|
+
sidebarRegistry,
|
|
9209
9302
|
setOpen,
|
|
9210
9303
|
setOpenMobile,
|
|
9211
9304
|
setWidth,
|
|
9212
|
-
|
|
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
|
-
|
|
9317
|
+
sidebarRegistry,
|
|
9224
9318
|
setOpen,
|
|
9225
9319
|
setOpenMobile,
|
|
9226
9320
|
setWidth,
|
|
9227
|
-
|
|
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(
|
|
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,
|
|
9259
|
-
const store = React$12.useContext(
|
|
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
|
-
|
|
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
|
|
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(
|
|
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?.
|
|
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
|
|
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
|
|
9468
|
+
const sidebarId = React$12.useContext(SidebarIdContext);
|
|
9469
|
+
const isResizable = !!store?.sidebarRegistry[sidebarId];
|
|
9382
9470
|
const handleMouseDown = React$12.useCallback((e) => {
|
|
9383
|
-
if (!isResizable
|
|
9471
|
+
if (!isResizable) return;
|
|
9384
9472
|
e.preventDefault();
|
|
9385
9473
|
startXRef.current = e.clientX;
|
|
9386
9474
|
hasDraggedRef.current = false;
|
|
9387
|
-
|
|
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 >=
|
|
9486
|
+
if (newWidth >= minWidth && newWidth <= maxWidth) setWidth(newWidth);
|
|
9399
9487
|
};
|
|
9400
9488
|
const handleMouseUp = () => {
|
|
9401
|
-
|
|
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
|
-
}, [
|
|
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
|
-
|
|
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
|
-
|
|
9705
|
-
|
|
9706
|
-
|
|
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,
|
|
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:
|
|
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,
|
|
9814
|
-
const { state } = useSidebar(
|
|
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
|
|
9939
|
+
function HorizontalTabBar({ side, tabs, activeTabId }) {
|
|
9856
9940
|
const ctx = React$10.useContext(SidebarTabsContext);
|
|
9857
|
-
const { state, toggleSidebar } = useSidebar(
|
|
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__ */
|
|
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
|
|
9978
|
+
function VerticalTabBar({ side, tabs, activeTabId }) {
|
|
9889
9979
|
const ctx = React$10.useContext(SidebarTabsContext);
|
|
9890
|
-
const { state, toggleSidebar } = useSidebar(
|
|
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__ */
|
|
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,
|
|
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
|