@classytic/fluid 0.4.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -1
- package/dist/client/calendar.d.mts +1 -2
- package/dist/client/calendar.mjs +4 -4
- package/dist/client/color-picker.d.mts +41 -25
- package/dist/client/color-picker.mjs +121 -73
- package/dist/client/core.d.mts +243 -557
- package/dist/client/core.mjs +351 -1462
- package/dist/client/error.d.mts +41 -41
- package/dist/client/error.mjs +35 -35
- package/dist/client/gallery.d.mts +33 -33
- package/dist/client/gallery.mjs +128 -127
- package/dist/client/hooks.d.mts +57 -39
- package/dist/client/hooks.mjs +29 -7
- package/dist/client/spreadsheet.d.mts +28 -28
- package/dist/client/spreadsheet.mjs +77 -77
- package/dist/client/table.d.mts +66 -33
- package/dist/client/table.mjs +87 -54
- package/dist/client/theme.mjs +1 -1
- package/dist/command.d.mts +6 -4
- package/dist/command.mjs +3 -3
- package/dist/compact.d.mts +97 -95
- package/dist/compact.mjs +336 -322
- package/dist/dashboard.d.mts +614 -422
- package/dist/dashboard.mjs +1051 -762
- package/dist/{dropdown-wrapper-B86u9Fri.mjs → dropdown-wrapper-B9nRDUlz.mjs} +25 -35
- package/dist/forms.d.mts +1037 -972
- package/dist/forms.mjs +2849 -2721
- package/dist/index.d.mts +218 -152
- package/dist/index.mjs +357 -264
- package/dist/layouts.d.mts +94 -94
- package/dist/layouts.mjs +115 -110
- package/dist/phone-input-B9_XPNvv.mjs +429 -0
- package/dist/phone-input-CLH_UjQZ.d.mts +31 -0
- package/dist/{search-context-DR7DBs7S.mjs → search-context-1g3ZmOvx.mjs} +1 -1
- package/dist/search.d.mts +168 -164
- package/dist/search.mjs +305 -301
- package/dist/{sheet-wrapper-C13Y-Q6w.mjs → sheet-wrapper-B2uxookb.mjs} +1 -1
- package/dist/timeline-Bgu1mIe9.d.mts +373 -0
- package/dist/timeline-HJtWf4Op.mjs +804 -0
- package/dist/{use-base-search-BGgWnWaF.d.mts → use-base-search-DFC4QKYU.d.mts} +1 -1
- package/dist/{use-media-query-BnVNIKT4.mjs → use-media-query-ChLfFChU.mjs} +6 -7
- package/package.json +2 -2
- /package/dist/{api-pagination-CJ0vR_w6.d.mts → api-pagination-C30ser2L.d.mts} +0 -0
- /package/dist/{filter-utils-DqMmy_v-.mjs → filter-utils-BGIvtq1R.mjs} +0 -0
- /package/dist/{filter-utils-IZ0GtuPo.d.mts → filter-utils-DOFTBWm1.d.mts} +0 -0
- /package/dist/{use-debounce-xmZucz5e.mjs → use-debounce-BNoNiEon.mjs} +0 -0
- /package/dist/{use-keyboard-shortcut-Bl6YM5Q7.mjs → use-keyboard-shortcut-C_Vk-36P.mjs} +0 -0
- /package/dist/{use-keyboard-shortcut-_mRCh3QO.d.mts → use-keyboard-shortcut-Q4CSPzSI.d.mts} +0 -0
- /package/dist/{use-mobile-BX3SQVo2.mjs → use-mobile-CnEmFiQx.mjs} +0 -0
- /package/dist/{use-scroll-detection-CsgsQYvy.mjs → use-scroll-detection-BKfqkmEC.mjs} +0 -0
- /package/dist/{utils-CDue7cEt.d.mts → utils-rqvYP1by.d.mts} +0 -0
package/dist/dashboard.d.mts
CHANGED
|
@@ -1,9 +1,70 @@
|
|
|
1
|
-
import { t as cn } from "./utils-
|
|
2
|
-
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
1
|
+
import { t as cn } from "./utils-rqvYP1by.mjs";
|
|
3
2
|
import * as React$1 from "react";
|
|
4
3
|
import React, { ReactNode } from "react";
|
|
4
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
5
5
|
import { LucideIcon } from "lucide-react";
|
|
6
6
|
|
|
7
|
+
//#region src/components/client-only.d.ts
|
|
8
|
+
interface ClientOnlyProps {
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
fallback?: ReactNode;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Renders children only on the client after hydration.
|
|
14
|
+
* Use for components with Base UI auto-generated IDs that cause hydration mismatches.
|
|
15
|
+
*/
|
|
16
|
+
declare function ClientOnly({
|
|
17
|
+
children,
|
|
18
|
+
fallback
|
|
19
|
+
}: ClientOnlyProps): ReactNode;
|
|
20
|
+
//#endregion
|
|
21
|
+
//#region src/dashboard/dashboard-header.d.ts
|
|
22
|
+
interface BreadcrumbItem {
|
|
23
|
+
label: string;
|
|
24
|
+
href?: string;
|
|
25
|
+
current?: boolean;
|
|
26
|
+
}
|
|
27
|
+
interface DashboardHeaderProps {
|
|
28
|
+
/** Breadcrumb items */
|
|
29
|
+
breadcrumbs?: BreadcrumbItem[];
|
|
30
|
+
/** Content to show on the left (after breadcrumbs) */
|
|
31
|
+
leftContent?: React$1.ReactNode;
|
|
32
|
+
/** Content to show on the right (actions, mode toggle, etc.) */
|
|
33
|
+
rightContent?: React$1.ReactNode;
|
|
34
|
+
/** Whether to show sidebar trigger */
|
|
35
|
+
showSidebarTrigger?: boolean;
|
|
36
|
+
/** Custom trigger element (rendered before breadcrumbs, replaces SidebarTrigger) */
|
|
37
|
+
customTrigger?: React$1.ReactNode;
|
|
38
|
+
/** Additional className */
|
|
39
|
+
className?: string;
|
|
40
|
+
/** Custom content (replaces default breadcrumb) */
|
|
41
|
+
children?: React$1.ReactNode;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* DashboardHeader - Top header bar for dashboard pages.
|
|
45
|
+
* Includes sidebar trigger, breadcrumbs, and action slots.
|
|
46
|
+
*/
|
|
47
|
+
declare function DashboardHeader({
|
|
48
|
+
breadcrumbs,
|
|
49
|
+
leftContent,
|
|
50
|
+
rightContent,
|
|
51
|
+
showSidebarTrigger,
|
|
52
|
+
customTrigger,
|
|
53
|
+
className,
|
|
54
|
+
children
|
|
55
|
+
}: DashboardHeaderProps): react_jsx_runtime0.JSX.Element;
|
|
56
|
+
//#endregion
|
|
57
|
+
//#region src/hooks/use-dashboard-breadcrumbs.d.ts
|
|
58
|
+
interface UseDashboardBreadcrumbsOptions {
|
|
59
|
+
/** Label overrides keyed by slug segment. e.g., { "platform-config": "Settings" } */
|
|
60
|
+
labelOverrides?: Record<string, string>;
|
|
61
|
+
/** Segments to skip/hide from breadcrumbs */
|
|
62
|
+
hideSegments?: string[];
|
|
63
|
+
/** Custom base label. Default: "Home" */
|
|
64
|
+
baseLabel?: string;
|
|
65
|
+
}
|
|
66
|
+
declare function useDashboardBreadcrumbs(basePath: string, options?: UseDashboardBreadcrumbsOptions): BreadcrumbItem[];
|
|
67
|
+
//#endregion
|
|
7
68
|
//#region src/dashboard/nav-utils.d.ts
|
|
8
69
|
/**
|
|
9
70
|
* NavPermissions - Mixin applied to all nav item types.
|
|
@@ -95,6 +156,30 @@ interface MiniSidebarGroup {
|
|
|
95
156
|
title?: string;
|
|
96
157
|
items: MiniSidebarItem[];
|
|
97
158
|
}
|
|
159
|
+
interface RouteMatchable {
|
|
160
|
+
url: string;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* matchRoute — Check if a pathname matches a URL.
|
|
164
|
+
* Exact match or prefix match with trailing slash boundary.
|
|
165
|
+
*/
|
|
166
|
+
declare function matchRoute(pathname: string, url: string): boolean;
|
|
167
|
+
/**
|
|
168
|
+
* findActiveItem — Find the most specific matching item from a flat list.
|
|
169
|
+
* Returns the item with the longest matching URL (avoids `/settings` matching `/settings/users`).
|
|
170
|
+
*/
|
|
171
|
+
declare function findActiveItem<T extends RouteMatchable>(items: T[], pathname: string): T | null;
|
|
172
|
+
/**
|
|
173
|
+
* findActiveCategory — Find the category containing the best-matching item.
|
|
174
|
+
* Returns { category, item } or null.
|
|
175
|
+
*/
|
|
176
|
+
declare function findActiveCategory<TItem extends RouteMatchable, TCategory extends {
|
|
177
|
+
id: string;
|
|
178
|
+
items: TItem[];
|
|
179
|
+
}>(categories: TCategory[], pathname: string): {
|
|
180
|
+
category: TCategory;
|
|
181
|
+
item: TItem;
|
|
182
|
+
} | null;
|
|
98
183
|
/**
|
|
99
184
|
* resolveNavigation — Filter NavGroup[] by permissions and resolve dynamic badges.
|
|
100
185
|
* For InsetSidebar, FloatingSidebar, and any component using NavGroup[].
|
|
@@ -117,317 +202,164 @@ declare function resolveCategories<TItem extends NavPermissions & {
|
|
|
117
202
|
items: TItem[];
|
|
118
203
|
}>(categories: TCategory[], ctx?: unknown): TCategory[];
|
|
119
204
|
//#endregion
|
|
120
|
-
//#region src/dashboard/
|
|
121
|
-
interface
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link";
|
|
126
|
-
size?: "default" | "sm" | "lg" | "icon";
|
|
127
|
-
className?: string;
|
|
128
|
-
icon?: LucideIcon;
|
|
129
|
-
iconPosition?: "left" | "right";
|
|
130
|
-
loadingText?: string;
|
|
131
|
-
loading?: boolean;
|
|
132
|
-
}
|
|
133
|
-
interface HeaderBadge {
|
|
134
|
-
text: string;
|
|
135
|
-
variant?: "default" | "secondary" | "destructive" | "outline";
|
|
136
|
-
className?: string;
|
|
205
|
+
//#region src/dashboard/sidebar-user-menu.d.ts
|
|
206
|
+
interface UserData {
|
|
207
|
+
name: string;
|
|
208
|
+
email: string;
|
|
209
|
+
avatar?: string;
|
|
137
210
|
}
|
|
138
|
-
interface
|
|
139
|
-
|
|
211
|
+
interface UserMenuItem {
|
|
212
|
+
label: string;
|
|
140
213
|
icon?: LucideIcon;
|
|
214
|
+
href?: string;
|
|
215
|
+
onClick?: () => void;
|
|
216
|
+
separator?: boolean;
|
|
141
217
|
}
|
|
142
|
-
interface
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
218
|
+
interface SidebarUserMenuProps {
|
|
219
|
+
/** User data to display */
|
|
220
|
+
user: UserData;
|
|
221
|
+
/** Menu items (account, settings, etc.) */
|
|
222
|
+
menuItems?: UserMenuItem[];
|
|
223
|
+
/** Logout handler */
|
|
224
|
+
onLogout?: () => void;
|
|
225
|
+
/** Additional className */
|
|
150
226
|
className?: string;
|
|
151
|
-
badge?: HeaderBadge | ReactNode;
|
|
152
|
-
breadcrumbs?: ReactNode;
|
|
153
|
-
metadata?: HeaderMetadata[];
|
|
154
|
-
children?: ReactNode;
|
|
155
227
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
className
|
|
165
|
-
|
|
166
|
-
breadcrumbs,
|
|
167
|
-
metadata,
|
|
168
|
-
children
|
|
169
|
-
}: HeaderSectionProps): react_jsx_runtime0.JSX.Element;
|
|
228
|
+
/**
|
|
229
|
+
* SidebarUserMenu - User avatar and dropdown menu for sidebar footer.
|
|
230
|
+
* Accepts handlers for logout and custom menu items.
|
|
231
|
+
*/
|
|
232
|
+
declare function SidebarUserMenu({
|
|
233
|
+
user,
|
|
234
|
+
menuItems,
|
|
235
|
+
onLogout,
|
|
236
|
+
className
|
|
237
|
+
}: SidebarUserMenuProps): react_jsx_runtime0.JSX.Element;
|
|
170
238
|
//#endregion
|
|
171
|
-
//#region src/dashboard/
|
|
172
|
-
interface
|
|
173
|
-
|
|
239
|
+
//#region src/dashboard/presets/dual-sidebar/types.d.ts
|
|
240
|
+
interface DualSidebarBrand {
|
|
241
|
+
title: string;
|
|
242
|
+
icon: React$1.ReactNode;
|
|
174
243
|
href?: string;
|
|
175
|
-
current?: boolean;
|
|
176
244
|
}
|
|
177
|
-
interface
|
|
178
|
-
|
|
245
|
+
interface DualSidebarUser {
|
|
246
|
+
data: UserData;
|
|
247
|
+
menuItems?: UserMenuItem[];
|
|
248
|
+
onLogout?: () => void;
|
|
249
|
+
}
|
|
250
|
+
interface DualSidebarProps {
|
|
251
|
+
/** Brand configuration */
|
|
252
|
+
brand: DualSidebarBrand;
|
|
253
|
+
/** Main categories with their items */
|
|
254
|
+
categories: DualSidebarCategory[];
|
|
255
|
+
/** User menu configuration */
|
|
256
|
+
user?: DualSidebarUser;
|
|
257
|
+
/** Initially active category ID (uncontrolled) */
|
|
258
|
+
defaultCategoryId?: string;
|
|
259
|
+
/** Controlled active category ID. When provided, the component is controlled. */
|
|
260
|
+
activeCategoryId?: string;
|
|
261
|
+
/** Callback when category changes (works in both controlled and uncontrolled modes) */
|
|
262
|
+
onCategoryChange?: (categoryId: string) => void;
|
|
263
|
+
/** Whether the expanded panel starts collapsed (uncontrolled) */
|
|
264
|
+
defaultCollapsed?: boolean;
|
|
265
|
+
/** Controlled collapsed state. When provided, the component is controlled. */
|
|
266
|
+
collapsed?: boolean;
|
|
267
|
+
/** Callback when collapsed state changes (works in both controlled and uncontrolled modes) */
|
|
268
|
+
onCollapsedChange?: (collapsed: boolean) => void;
|
|
269
|
+
/** Controlled mobile sheet open state */
|
|
270
|
+
mobileOpen?: boolean;
|
|
271
|
+
/** Callback when mobile sheet state changes */
|
|
272
|
+
onMobileOpenChange?: (open: boolean) => void;
|
|
273
|
+
/** Custom content rendered in the expanded panel header (below brand, above nav items).
|
|
274
|
+
* Use for "Create" buttons, org/workspace switchers, etc. */
|
|
275
|
+
headerContent?: React$1.ReactNode;
|
|
276
|
+
/** Custom content rendered at the bottom of the expanded panel (above user menu) */
|
|
277
|
+
footerContent?: React$1.ReactNode;
|
|
278
|
+
/** Rail color variant */
|
|
279
|
+
railVariant?: "default" | "dark" | "primary" | "muted";
|
|
280
|
+
/** "inset" = rounded with padding (default). "flush" = edge-to-edge, no rounding. */
|
|
281
|
+
sidebarStyle?: "inset" | "flush";
|
|
282
|
+
/** Accessibility label */
|
|
283
|
+
ariaLabel?: string;
|
|
284
|
+
/** Additional className for outer container */
|
|
179
285
|
className?: string;
|
|
180
|
-
actions?: React.ReactNode;
|
|
181
286
|
}
|
|
182
|
-
declare function PageHeader({
|
|
183
|
-
items,
|
|
184
|
-
className,
|
|
185
|
-
actions
|
|
186
|
-
}: PageHeaderProps): react_jsx_runtime0.JSX.Element;
|
|
187
287
|
//#endregion
|
|
188
|
-
//#region src/dashboard/
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
288
|
+
//#region src/dashboard/presets/dual-sidebar/dual-sidebar.d.ts
|
|
289
|
+
/**
|
|
290
|
+
* DualSidebar - A sidebar with icon rail and collapsible expanded panel.
|
|
291
|
+
* Mimics the inset sidebar variant structure for consistent styling.
|
|
292
|
+
*/
|
|
293
|
+
declare function DualSidebar({
|
|
294
|
+
brand,
|
|
295
|
+
categories,
|
|
296
|
+
user,
|
|
297
|
+
defaultCategoryId,
|
|
298
|
+
activeCategoryId: controlledCategoryId,
|
|
299
|
+
onCategoryChange,
|
|
300
|
+
defaultCollapsed,
|
|
301
|
+
collapsed: controlledCollapsed,
|
|
302
|
+
onCollapsedChange,
|
|
303
|
+
mobileOpen: controlledMobileOpen,
|
|
304
|
+
onMobileOpenChange,
|
|
305
|
+
headerContent,
|
|
306
|
+
footerContent,
|
|
307
|
+
railVariant,
|
|
308
|
+
sidebarStyle,
|
|
309
|
+
ariaLabel,
|
|
310
|
+
className
|
|
311
|
+
}: DualSidebarProps): react_jsx_runtime0.JSX.Element;
|
|
312
|
+
//#endregion
|
|
313
|
+
//#region src/dashboard/project-switcher.d.ts
|
|
314
|
+
interface ProjectItem {
|
|
315
|
+
/** Unique identifier */
|
|
316
|
+
id: string;
|
|
317
|
+
/** Display name */
|
|
318
|
+
name: string;
|
|
319
|
+
/** Short code or identifier */
|
|
320
|
+
code?: string;
|
|
321
|
+
/** Optional type badge */
|
|
322
|
+
type?: string;
|
|
323
|
+
/** Is this the default project */
|
|
324
|
+
isDefault?: boolean;
|
|
325
|
+
/** Is this project active */
|
|
326
|
+
isActive?: boolean;
|
|
327
|
+
/** Optional subtitle/description */
|
|
328
|
+
subtitle?: string;
|
|
329
|
+
}
|
|
330
|
+
interface ProjectSwitcherProps {
|
|
331
|
+
/** List of available projects */
|
|
332
|
+
items: ProjectItem[];
|
|
333
|
+
/** Currently selected project */
|
|
334
|
+
selected?: ProjectItem;
|
|
335
|
+
/** Callback when a project is selected */
|
|
336
|
+
onSelect: (project: ProjectItem) => void;
|
|
337
|
+
/** Whether the data is loading */
|
|
338
|
+
isLoading?: boolean;
|
|
339
|
+
/** Label shown in dropdown header */
|
|
340
|
+
label?: string;
|
|
341
|
+
/** Icon to display (defaults to Building2) */
|
|
342
|
+
icon?: LucideIcon;
|
|
343
|
+
/** Additional className */
|
|
193
344
|
className?: string;
|
|
194
|
-
/**
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
|
|
345
|
+
/** Whether to show as disabled (single item) */
|
|
346
|
+
disabled?: boolean;
|
|
347
|
+
/**
|
|
348
|
+
* Render variant:
|
|
349
|
+
* - "sidebar": Uses SidebarMenu components, requires SidebarProvider context
|
|
350
|
+
* - "standalone": Uses Button, works anywhere (headers, toolbars, etc.)
|
|
351
|
+
*/
|
|
352
|
+
variant?: "sidebar" | "standalone";
|
|
353
|
+
/** Size for standalone variant (ignored in sidebar variant) */
|
|
354
|
+
size?: "sm" | "default";
|
|
355
|
+
/** Render custom item content */
|
|
356
|
+
renderItem?: (item: ProjectItem, isSelected: boolean) => React$1.ReactNode;
|
|
198
357
|
}
|
|
199
358
|
/**
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
* Prevents the classic flexbox overflow bug where children with
|
|
203
|
-
* `max-w-*` or grid layouts extend beyond the available space
|
|
204
|
-
* (behind the sidebar) by propagating `min-w-0` through the
|
|
205
|
-
* flex chain.
|
|
206
|
-
*
|
|
207
|
-
* **Important**: `SidebarInset` also needs `min-w-0` for the
|
|
208
|
-
* width constraint to propagate correctly from the flex parent.
|
|
209
|
-
* Pass `className="min-w-0"` to `SidebarInset`.
|
|
359
|
+
* ProjectSwitcher - Generic project/workspace/branch switcher.
|
|
360
|
+
* Works for any entity that needs switching functionality.
|
|
210
361
|
*
|
|
211
|
-
* @example
|
|
212
|
-
* ```tsx
|
|
213
|
-
* <SidebarProvider>
|
|
214
|
-
* <AppSidebar />
|
|
215
|
-
* <SidebarInset className="min-w-0">
|
|
216
|
-
* <DashboardContent>
|
|
217
|
-
* <PageHeader items={breadcrumbs} />
|
|
218
|
-
* <MyPageContent />
|
|
219
|
-
* </DashboardContent>
|
|
220
|
-
* </SidebarInset>
|
|
221
|
-
* </SidebarProvider>
|
|
222
|
-
* ```
|
|
223
|
-
*/
|
|
224
|
-
declare function DashboardContent({
|
|
225
|
-
children,
|
|
226
|
-
className,
|
|
227
|
-
container,
|
|
228
|
-
padding
|
|
229
|
-
}: DashboardContentProps): react_jsx_runtime0.JSX.Element;
|
|
230
|
-
//#endregion
|
|
231
|
-
//#region src/dashboard/dashboard-page-layout.d.ts
|
|
232
|
-
interface DashboardPageLayoutProps {
|
|
233
|
-
/** Breadcrumb items for the page header */
|
|
234
|
-
breadcrumbs: BreadcrumbItemData[];
|
|
235
|
-
/** Action buttons rendered in the page header */
|
|
236
|
-
actions?: ReactNode;
|
|
237
|
-
/** Whether to wrap children in Suspense (default: true) */
|
|
238
|
-
suspense?: boolean;
|
|
239
|
-
/** Custom Suspense fallback. Defaults to a spinner. */
|
|
240
|
-
fallback?: ReactNode;
|
|
241
|
-
/** Additional className for the content wrapper */
|
|
242
|
-
className?: string;
|
|
243
|
-
children: ReactNode;
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* DashboardPageLayout — Standard page shell for dashboard pages.
|
|
247
|
-
* Combines PageHeader (breadcrumbs + actions) with optional Suspense boundary.
|
|
248
|
-
*
|
|
249
|
-
* @example
|
|
250
|
-
* ```tsx
|
|
251
|
-
* <DashboardPageLayout
|
|
252
|
-
* breadcrumbs={[
|
|
253
|
-
* { label: "Dashboard", href: "/dashboard" },
|
|
254
|
-
* { label: "Posts", current: true },
|
|
255
|
-
* ]}
|
|
256
|
-
* actions={<Button>New Post</Button>}
|
|
257
|
-
* fallback={<SkeletonTable rows={5} />}
|
|
258
|
-
* >
|
|
259
|
-
* <PostsList />
|
|
260
|
-
* </DashboardPageLayout>
|
|
261
|
-
* ```
|
|
262
|
-
*/
|
|
263
|
-
declare function DashboardPageLayout({
|
|
264
|
-
breadcrumbs,
|
|
265
|
-
actions,
|
|
266
|
-
suspense,
|
|
267
|
-
fallback,
|
|
268
|
-
className,
|
|
269
|
-
children
|
|
270
|
-
}: DashboardPageLayoutProps): react_jsx_runtime0.JSX.Element;
|
|
271
|
-
//#endregion
|
|
272
|
-
//#region src/dashboard/sidebar-brand.d.ts
|
|
273
|
-
interface SidebarBrandProps {
|
|
274
|
-
/** Brand title text */
|
|
275
|
-
title: string;
|
|
276
|
-
/** Brand icon/logo element */
|
|
277
|
-
icon: React$1.ReactNode;
|
|
278
|
-
/** Link href (defaults to "/") */
|
|
279
|
-
href?: string;
|
|
280
|
-
/** Additional className */
|
|
281
|
-
className?: string;
|
|
282
|
-
/** Tooltip text when collapsed (defaults to title) */
|
|
283
|
-
tooltip?: string;
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* SidebarBrand - Logo and title section for dashboard sidebar.
|
|
287
|
-
* Automatically handles collapsed state styling.
|
|
288
|
-
*/
|
|
289
|
-
declare function SidebarBrand({
|
|
290
|
-
title,
|
|
291
|
-
icon,
|
|
292
|
-
href,
|
|
293
|
-
className,
|
|
294
|
-
tooltip
|
|
295
|
-
}: SidebarBrandProps): react_jsx_runtime0.JSX.Element;
|
|
296
|
-
//#endregion
|
|
297
|
-
//#region src/dashboard/sidebar-nav.d.ts
|
|
298
|
-
interface SidebarNavProps {
|
|
299
|
-
/** Navigation groups to render */
|
|
300
|
-
groups: NavGroup[];
|
|
301
|
-
/** Additional className */
|
|
302
|
-
className?: string;
|
|
303
|
-
/** Callback when a nav item is clicked */
|
|
304
|
-
onItemClick?: (item: NavItem) => void;
|
|
305
|
-
}
|
|
306
|
-
interface SidebarNavGroupProps {
|
|
307
|
-
/** Group title (optional) */
|
|
308
|
-
title?: string;
|
|
309
|
-
/** Navigation items in this group */
|
|
310
|
-
items: NavItem[];
|
|
311
|
-
/** Additional className */
|
|
312
|
-
className?: string;
|
|
313
|
-
/** Callback when an item is clicked */
|
|
314
|
-
onItemClick?: (item: NavItem) => void;
|
|
315
|
-
}
|
|
316
|
-
interface SidebarNavItemProps {
|
|
317
|
-
/** The navigation item data */
|
|
318
|
-
item: NavItem;
|
|
319
|
-
/** Callback when clicked */
|
|
320
|
-
onClick?: () => void;
|
|
321
|
-
}
|
|
322
|
-
/**
|
|
323
|
-
* SidebarNavItem - Single navigation item with optional sub-items.
|
|
324
|
-
*/
|
|
325
|
-
declare function SidebarNavItem({
|
|
326
|
-
item,
|
|
327
|
-
onClick
|
|
328
|
-
}: SidebarNavItemProps): react_jsx_runtime0.JSX.Element;
|
|
329
|
-
/**
|
|
330
|
-
* SidebarNavGroup - A group of navigation items with optional title.
|
|
331
|
-
*/
|
|
332
|
-
declare function SidebarNavGroup({
|
|
333
|
-
title,
|
|
334
|
-
items,
|
|
335
|
-
className,
|
|
336
|
-
onItemClick
|
|
337
|
-
}: SidebarNavGroupProps): react_jsx_runtime0.JSX.Element;
|
|
338
|
-
/**
|
|
339
|
-
* SidebarNav - Complete navigation section with multiple groups.
|
|
340
|
-
*/
|
|
341
|
-
declare function SidebarNav({
|
|
342
|
-
groups,
|
|
343
|
-
className,
|
|
344
|
-
onItemClick
|
|
345
|
-
}: SidebarNavProps): react_jsx_runtime0.JSX.Element;
|
|
346
|
-
//#endregion
|
|
347
|
-
//#region src/dashboard/sidebar-user-menu.d.ts
|
|
348
|
-
interface UserData {
|
|
349
|
-
name: string;
|
|
350
|
-
email: string;
|
|
351
|
-
avatar?: string;
|
|
352
|
-
}
|
|
353
|
-
interface UserMenuItem {
|
|
354
|
-
label: string;
|
|
355
|
-
icon?: LucideIcon;
|
|
356
|
-
href?: string;
|
|
357
|
-
onClick?: () => void;
|
|
358
|
-
separator?: boolean;
|
|
359
|
-
}
|
|
360
|
-
interface SidebarUserMenuProps {
|
|
361
|
-
/** User data to display */
|
|
362
|
-
user: UserData;
|
|
363
|
-
/** Menu items (account, settings, etc.) */
|
|
364
|
-
menuItems?: UserMenuItem[];
|
|
365
|
-
/** Logout handler */
|
|
366
|
-
onLogout?: () => void;
|
|
367
|
-
/** Additional className */
|
|
368
|
-
className?: string;
|
|
369
|
-
}
|
|
370
|
-
/**
|
|
371
|
-
* SidebarUserMenu - User avatar and dropdown menu for sidebar footer.
|
|
372
|
-
* Accepts handlers for logout and custom menu items.
|
|
373
|
-
*/
|
|
374
|
-
declare function SidebarUserMenu({
|
|
375
|
-
user,
|
|
376
|
-
menuItems,
|
|
377
|
-
onLogout,
|
|
378
|
-
className
|
|
379
|
-
}: SidebarUserMenuProps): react_jsx_runtime0.JSX.Element;
|
|
380
|
-
//#endregion
|
|
381
|
-
//#region src/dashboard/project-switcher.d.ts
|
|
382
|
-
interface ProjectItem {
|
|
383
|
-
/** Unique identifier */
|
|
384
|
-
id: string;
|
|
385
|
-
/** Display name */
|
|
386
|
-
name: string;
|
|
387
|
-
/** Short code or identifier */
|
|
388
|
-
code?: string;
|
|
389
|
-
/** Optional type badge */
|
|
390
|
-
type?: string;
|
|
391
|
-
/** Is this the default project */
|
|
392
|
-
isDefault?: boolean;
|
|
393
|
-
/** Is this project active */
|
|
394
|
-
isActive?: boolean;
|
|
395
|
-
/** Optional subtitle/description */
|
|
396
|
-
subtitle?: string;
|
|
397
|
-
}
|
|
398
|
-
interface ProjectSwitcherProps {
|
|
399
|
-
/** List of available projects */
|
|
400
|
-
items: ProjectItem[];
|
|
401
|
-
/** Currently selected project */
|
|
402
|
-
selected?: ProjectItem;
|
|
403
|
-
/** Callback when a project is selected */
|
|
404
|
-
onSelect: (project: ProjectItem) => void;
|
|
405
|
-
/** Whether the data is loading */
|
|
406
|
-
isLoading?: boolean;
|
|
407
|
-
/** Label shown in dropdown header */
|
|
408
|
-
label?: string;
|
|
409
|
-
/** Icon to display (defaults to Building2) */
|
|
410
|
-
icon?: LucideIcon;
|
|
411
|
-
/** Additional className */
|
|
412
|
-
className?: string;
|
|
413
|
-
/** Whether to show as disabled (single item) */
|
|
414
|
-
disabled?: boolean;
|
|
415
|
-
/**
|
|
416
|
-
* Render variant:
|
|
417
|
-
* - "sidebar": Uses SidebarMenu components, requires SidebarProvider context
|
|
418
|
-
* - "standalone": Uses Button, works anywhere (headers, toolbars, etc.)
|
|
419
|
-
*/
|
|
420
|
-
variant?: "sidebar" | "standalone";
|
|
421
|
-
/** Size for standalone variant (ignored in sidebar variant) */
|
|
422
|
-
size?: "sm" | "default";
|
|
423
|
-
/** Render custom item content */
|
|
424
|
-
renderItem?: (item: ProjectItem, isSelected: boolean) => React$1.ReactNode;
|
|
425
|
-
}
|
|
426
|
-
/**
|
|
427
|
-
* ProjectSwitcher - Generic project/workspace/branch switcher.
|
|
428
|
-
* Works for any entity that needs switching functionality.
|
|
429
|
-
*
|
|
430
|
-
* @example Sidebar usage (inside SidebarProvider)
|
|
362
|
+
* @example Sidebar usage (inside SidebarProvider)
|
|
431
363
|
* ```tsx
|
|
432
364
|
* <ProjectSwitcher
|
|
433
365
|
* items={projects}
|
|
@@ -461,74 +393,40 @@ declare function ProjectSwitcher({
|
|
|
461
393
|
renderItem
|
|
462
394
|
}: ProjectSwitcherProps): react_jsx_runtime0.JSX.Element | null;
|
|
463
395
|
//#endregion
|
|
464
|
-
//#region src/dashboard/
|
|
465
|
-
interface
|
|
466
|
-
|
|
396
|
+
//#region src/dashboard/presets/floating-sidebar.d.ts
|
|
397
|
+
interface FloatingSidebarBrand {
|
|
398
|
+
title: string;
|
|
399
|
+
icon: React$1.ReactNode;
|
|
467
400
|
href?: string;
|
|
468
|
-
current?: boolean;
|
|
469
401
|
}
|
|
470
|
-
interface
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
/** Whether to show sidebar trigger */
|
|
478
|
-
showSidebarTrigger?: boolean;
|
|
479
|
-
/** Custom trigger element (rendered before breadcrumbs, replaces SidebarTrigger) */
|
|
480
|
-
customTrigger?: React$1.ReactNode;
|
|
481
|
-
/** Additional className */
|
|
482
|
-
className?: string;
|
|
483
|
-
/** Custom content (replaces default breadcrumb) */
|
|
484
|
-
children?: React$1.ReactNode;
|
|
402
|
+
interface FloatingSidebarProject {
|
|
403
|
+
items: ProjectItem[];
|
|
404
|
+
selected?: ProjectItem;
|
|
405
|
+
onSelect: (project: ProjectItem) => void;
|
|
406
|
+
isLoading?: boolean;
|
|
407
|
+
label?: string;
|
|
408
|
+
icon?: LucideIcon;
|
|
485
409
|
}
|
|
486
|
-
|
|
487
|
-
* DashboardHeader - Top header bar for dashboard pages.
|
|
488
|
-
* Includes sidebar trigger, breadcrumbs, and action slots.
|
|
489
|
-
*/
|
|
490
|
-
declare function DashboardHeader({
|
|
491
|
-
breadcrumbs,
|
|
492
|
-
leftContent,
|
|
493
|
-
rightContent,
|
|
494
|
-
showSidebarTrigger,
|
|
495
|
-
customTrigger,
|
|
496
|
-
className,
|
|
497
|
-
children
|
|
498
|
-
}: DashboardHeaderProps): react_jsx_runtime0.JSX.Element;
|
|
499
|
-
//#endregion
|
|
500
|
-
//#region src/dashboard/presets/inset-sidebar.d.ts
|
|
501
|
-
interface InsetSidebarBrand {
|
|
502
|
-
title: string;
|
|
503
|
-
icon: React$1.ReactNode;
|
|
504
|
-
href?: string;
|
|
505
|
-
}
|
|
506
|
-
interface InsetSidebarProject {
|
|
507
|
-
items: ProjectItem[];
|
|
508
|
-
selected?: ProjectItem;
|
|
509
|
-
onSelect: (project: ProjectItem) => void;
|
|
510
|
-
isLoading?: boolean;
|
|
511
|
-
label?: string;
|
|
512
|
-
icon?: LucideIcon;
|
|
513
|
-
}
|
|
514
|
-
interface InsetSidebarUser {
|
|
410
|
+
interface FloatingSidebarUser {
|
|
515
411
|
data: UserData;
|
|
516
412
|
menuItems?: UserMenuItem[];
|
|
517
413
|
onLogout?: () => void;
|
|
518
414
|
}
|
|
519
|
-
interface
|
|
415
|
+
interface FloatingSidebarProps {
|
|
520
416
|
/** Brand configuration */
|
|
521
|
-
brand:
|
|
417
|
+
brand: FloatingSidebarBrand;
|
|
522
418
|
/** Navigation groups */
|
|
523
419
|
navigation: NavGroup[];
|
|
524
420
|
/** Secondary navigation (shown at bottom above user) */
|
|
525
421
|
secondaryNavigation?: NavGroup[];
|
|
526
422
|
/** Project/workspace switcher configuration */
|
|
527
|
-
project?:
|
|
423
|
+
project?: FloatingSidebarProject;
|
|
528
424
|
/** User menu configuration */
|
|
529
|
-
user?:
|
|
425
|
+
user?: FloatingSidebarUser;
|
|
530
426
|
/** Custom content to render in header (after brand/project switcher) */
|
|
531
427
|
headerContent?: React$1.ReactNode;
|
|
428
|
+
/** Side of the screen */
|
|
429
|
+
side?: "left" | "right";
|
|
532
430
|
/** Accessibility label for the sidebar */
|
|
533
431
|
ariaLabel?: string;
|
|
534
432
|
/** Additional className */
|
|
@@ -537,81 +435,30 @@ interface InsetSidebarProps {
|
|
|
537
435
|
children?: React$1.ReactNode;
|
|
538
436
|
}
|
|
539
437
|
/**
|
|
540
|
-
*
|
|
541
|
-
*
|
|
438
|
+
* FloatingSidebar - Floating variant sidebar with rounded corners and shadow.
|
|
439
|
+
* Hovers above the content area like Linear / Notion style.
|
|
440
|
+
* Collapses to icon-only rail on desktop.
|
|
542
441
|
*/
|
|
543
|
-
declare function
|
|
442
|
+
declare function FloatingSidebar({
|
|
544
443
|
brand,
|
|
545
444
|
navigation,
|
|
546
445
|
secondaryNavigation,
|
|
547
446
|
project,
|
|
548
447
|
user,
|
|
549
448
|
headerContent,
|
|
449
|
+
side,
|
|
550
450
|
ariaLabel,
|
|
551
451
|
className,
|
|
552
452
|
children
|
|
553
|
-
}:
|
|
554
|
-
//#endregion
|
|
555
|
-
//#region src/dashboard/presets/dual-sidebar.d.ts
|
|
556
|
-
interface DualSidebarBrand {
|
|
557
|
-
title: string;
|
|
558
|
-
icon: React$1.ReactNode;
|
|
559
|
-
href?: string;
|
|
560
|
-
}
|
|
561
|
-
interface DualSidebarUser {
|
|
562
|
-
data: UserData;
|
|
563
|
-
menuItems?: UserMenuItem[];
|
|
564
|
-
onLogout?: () => void;
|
|
565
|
-
}
|
|
566
|
-
interface DualSidebarProps {
|
|
567
|
-
/** Brand configuration */
|
|
568
|
-
brand: DualSidebarBrand;
|
|
569
|
-
/** Main categories with their items */
|
|
570
|
-
categories: DualSidebarCategory[];
|
|
571
|
-
/** User menu configuration */
|
|
572
|
-
user?: DualSidebarUser;
|
|
573
|
-
/** Initially active category ID */
|
|
574
|
-
defaultCategoryId?: string;
|
|
575
|
-
/** Callback when category changes */
|
|
576
|
-
onCategoryChange?: (categoryId: string) => void;
|
|
577
|
-
/** Whether the expanded panel starts collapsed */
|
|
578
|
-
defaultCollapsed?: boolean;
|
|
579
|
-
/** Controlled mobile sheet open state */
|
|
580
|
-
mobileOpen?: boolean;
|
|
581
|
-
/** Callback when mobile sheet state changes */
|
|
582
|
-
onMobileOpenChange?: (open: boolean) => void;
|
|
583
|
-
/** Rail color variant */
|
|
584
|
-
railVariant?: "default" | "dark" | "primary" | "muted";
|
|
585
|
-
/** Accessibility label */
|
|
586
|
-
ariaLabel?: string;
|
|
587
|
-
/** Additional className for outer container */
|
|
588
|
-
className?: string;
|
|
589
|
-
}
|
|
590
|
-
/**
|
|
591
|
-
* DualSidebar - A sidebar with icon rail and collapsible expanded panel.
|
|
592
|
-
* Mimics the inset sidebar variant structure for consistent styling.
|
|
593
|
-
*/
|
|
594
|
-
declare function DualSidebar({
|
|
595
|
-
brand,
|
|
596
|
-
categories,
|
|
597
|
-
user,
|
|
598
|
-
defaultCategoryId,
|
|
599
|
-
onCategoryChange,
|
|
600
|
-
defaultCollapsed,
|
|
601
|
-
mobileOpen: controlledMobileOpen,
|
|
602
|
-
onMobileOpenChange,
|
|
603
|
-
railVariant,
|
|
604
|
-
ariaLabel,
|
|
605
|
-
className
|
|
606
|
-
}: DualSidebarProps): react_jsx_runtime0.JSX.Element;
|
|
453
|
+
}: FloatingSidebarProps): react_jsx_runtime0.JSX.Element;
|
|
607
454
|
//#endregion
|
|
608
|
-
//#region src/dashboard/presets/
|
|
609
|
-
interface
|
|
455
|
+
//#region src/dashboard/presets/inset-sidebar.d.ts
|
|
456
|
+
interface InsetSidebarBrand {
|
|
610
457
|
title: string;
|
|
611
458
|
icon: React$1.ReactNode;
|
|
612
459
|
href?: string;
|
|
613
460
|
}
|
|
614
|
-
interface
|
|
461
|
+
interface InsetSidebarProject {
|
|
615
462
|
items: ProjectItem[];
|
|
616
463
|
selected?: ProjectItem;
|
|
617
464
|
onSelect: (project: ProjectItem) => void;
|
|
@@ -619,25 +466,29 @@ interface FloatingSidebarProject {
|
|
|
619
466
|
label?: string;
|
|
620
467
|
icon?: LucideIcon;
|
|
621
468
|
}
|
|
622
|
-
interface
|
|
469
|
+
interface InsetSidebarUser {
|
|
623
470
|
data: UserData;
|
|
624
471
|
menuItems?: UserMenuItem[];
|
|
625
472
|
onLogout?: () => void;
|
|
626
473
|
}
|
|
627
|
-
interface
|
|
474
|
+
interface InsetSidebarProps {
|
|
628
475
|
/** Brand configuration */
|
|
629
|
-
brand:
|
|
476
|
+
brand: InsetSidebarBrand;
|
|
630
477
|
/** Navigation groups */
|
|
631
478
|
navigation: NavGroup[];
|
|
632
479
|
/** Secondary navigation (shown at bottom above user) */
|
|
633
480
|
secondaryNavigation?: NavGroup[];
|
|
634
481
|
/** Project/workspace switcher configuration */
|
|
635
|
-
project?:
|
|
482
|
+
project?: InsetSidebarProject;
|
|
636
483
|
/** User menu configuration */
|
|
637
|
-
user?:
|
|
484
|
+
user?: InsetSidebarUser;
|
|
638
485
|
/** Custom content to render in header (after brand/project switcher) */
|
|
639
486
|
headerContent?: React$1.ReactNode;
|
|
640
|
-
/**
|
|
487
|
+
/** Sidebar visual style. "inset" = rounded with padding. "flush" = edge-to-edge, no rounding. Default: "inset" */
|
|
488
|
+
sidebarStyle?: "inset" | "flush";
|
|
489
|
+
/** Nav item height density. "comfortable" = taller items like KIE AI. Default: "default" */
|
|
490
|
+
density?: "compact" | "default" | "comfortable";
|
|
491
|
+
/** Sidebar position */
|
|
641
492
|
side?: "left" | "right";
|
|
642
493
|
/** Accessibility label for the sidebar */
|
|
643
494
|
ariaLabel?: string;
|
|
@@ -647,22 +498,23 @@ interface FloatingSidebarProps {
|
|
|
647
498
|
children?: React$1.ReactNode;
|
|
648
499
|
}
|
|
649
500
|
/**
|
|
650
|
-
*
|
|
651
|
-
*
|
|
652
|
-
* Collapses to icon-only rail on desktop.
|
|
501
|
+
* InsetSidebar - Complete sidebar preset with inset variant.
|
|
502
|
+
* The standard dashboard sidebar with collapsible to icons.
|
|
653
503
|
*/
|
|
654
|
-
declare function
|
|
504
|
+
declare function InsetSidebar({
|
|
655
505
|
brand,
|
|
656
506
|
navigation,
|
|
657
507
|
secondaryNavigation,
|
|
658
508
|
project,
|
|
659
509
|
user,
|
|
660
510
|
headerContent,
|
|
511
|
+
sidebarStyle,
|
|
512
|
+
density,
|
|
661
513
|
side,
|
|
662
514
|
ariaLabel,
|
|
663
515
|
className,
|
|
664
516
|
children
|
|
665
|
-
}:
|
|
517
|
+
}: InsetSidebarProps): react_jsx_runtime0.JSX.Element;
|
|
666
518
|
//#endregion
|
|
667
519
|
//#region src/dashboard/presets/mini-sidebar.d.ts
|
|
668
520
|
interface MiniSidebarBrand {
|
|
@@ -777,4 +629,344 @@ declare function TopbarRail({
|
|
|
777
629
|
children
|
|
778
630
|
}: TopbarRailProps): react_jsx_runtime0.JSX.Element;
|
|
779
631
|
//#endregion
|
|
780
|
-
|
|
632
|
+
//#region src/dashboard/dashboard-layout.d.ts
|
|
633
|
+
type RailVariant = "default" | "dark" | "primary" | "muted";
|
|
634
|
+
interface InsetSidebarConfig {
|
|
635
|
+
variant: "inset";
|
|
636
|
+
brand: InsetSidebarBrand;
|
|
637
|
+
navigation: NavGroup[];
|
|
638
|
+
secondaryNavigation?: NavGroup[];
|
|
639
|
+
project?: InsetSidebarProject;
|
|
640
|
+
user?: InsetSidebarUser;
|
|
641
|
+
/** Custom content below brand (e.g., "Create" button, org switcher) */
|
|
642
|
+
headerContent?: React$1.ReactNode;
|
|
643
|
+
/** "inset" = rounded with padding (default). "flush" = edge-to-edge, no rounding. */
|
|
644
|
+
sidebarStyle?: "inset" | "flush";
|
|
645
|
+
/** Nav item density. "comfortable" = taller items. */
|
|
646
|
+
density?: "compact" | "default" | "comfortable";
|
|
647
|
+
side?: "left" | "right";
|
|
648
|
+
}
|
|
649
|
+
interface FloatingSidebarConfig {
|
|
650
|
+
variant: "floating";
|
|
651
|
+
brand: FloatingSidebarBrand;
|
|
652
|
+
navigation: NavGroup[];
|
|
653
|
+
secondaryNavigation?: NavGroup[];
|
|
654
|
+
project?: FloatingSidebarProject;
|
|
655
|
+
user?: FloatingSidebarUser;
|
|
656
|
+
/** Custom content below brand (e.g., "Create" button, org switcher) */
|
|
657
|
+
headerContent?: React$1.ReactNode;
|
|
658
|
+
side?: "left" | "right";
|
|
659
|
+
}
|
|
660
|
+
interface MiniSidebarConfig {
|
|
661
|
+
variant: "mini";
|
|
662
|
+
brand: MiniSidebarBrand;
|
|
663
|
+
navigation: MiniSidebarGroup[];
|
|
664
|
+
secondaryNavigation?: MiniSidebarGroup[];
|
|
665
|
+
user?: MiniSidebarUser;
|
|
666
|
+
/** Custom content below brand */
|
|
667
|
+
headerContent?: React$1.ReactNode;
|
|
668
|
+
side?: "left" | "right";
|
|
669
|
+
showRail?: boolean;
|
|
670
|
+
}
|
|
671
|
+
interface DualSidebarConfig {
|
|
672
|
+
variant: "dual";
|
|
673
|
+
brand: DualSidebarBrand;
|
|
674
|
+
categories: DualSidebarCategory[];
|
|
675
|
+
user?: DualSidebarUser;
|
|
676
|
+
/** Custom content in expanded panel header (e.g., "Create" button, org switcher) */
|
|
677
|
+
headerContent?: React$1.ReactNode;
|
|
678
|
+
/** Custom content above user menu in expanded panel */
|
|
679
|
+
footerContent?: React$1.ReactNode;
|
|
680
|
+
railVariant?: RailVariant;
|
|
681
|
+
/** "inset" = rounded with padding (default). "flush" = edge-to-edge, no rounding. */
|
|
682
|
+
sidebarStyle?: "inset" | "flush";
|
|
683
|
+
defaultCategoryId?: string;
|
|
684
|
+
activeCategoryId?: string;
|
|
685
|
+
onCategoryChange?: (id: string) => void;
|
|
686
|
+
defaultCollapsed?: boolean;
|
|
687
|
+
collapsed?: boolean;
|
|
688
|
+
onCollapsedChange?: (collapsed: boolean) => void;
|
|
689
|
+
}
|
|
690
|
+
interface TopbarRailConfig {
|
|
691
|
+
variant: "topbar-rail";
|
|
692
|
+
brand: TopbarRailBrand;
|
|
693
|
+
categories: TopbarRailCategory[];
|
|
694
|
+
user?: TopbarRailUser;
|
|
695
|
+
railVariant?: RailVariant;
|
|
696
|
+
defaultCategoryId?: string;
|
|
697
|
+
defaultDrawerOpen?: boolean;
|
|
698
|
+
}
|
|
699
|
+
type SidebarConfig = InsetSidebarConfig | FloatingSidebarConfig | MiniSidebarConfig | DualSidebarConfig | TopbarRailConfig;
|
|
700
|
+
interface BreadcrumbsConfig extends UseDashboardBreadcrumbsOptions {
|
|
701
|
+
basePath: string;
|
|
702
|
+
}
|
|
703
|
+
interface DashboardLayoutProps {
|
|
704
|
+
/** Sidebar configuration — discriminated by `variant` */
|
|
705
|
+
sidebar: SidebarConfig;
|
|
706
|
+
/** Auto-generate breadcrumbs from pathname. Pass false to disable. */
|
|
707
|
+
breadcrumbs?: BreadcrumbsConfig | false;
|
|
708
|
+
/** Right-side header content (search triggers, mode toggle, etc.) */
|
|
709
|
+
headerRight?: React$1.ReactNode;
|
|
710
|
+
/** Left-side header content (after breadcrumbs) */
|
|
711
|
+
headerLeft?: React$1.ReactNode;
|
|
712
|
+
/** Override the entire header. Pass false to hide. */
|
|
713
|
+
header?: React$1.ReactNode | false;
|
|
714
|
+
/** Make the header stick to the top while content scrolls. Applies proper bg + border automatically. */
|
|
715
|
+
stickyHeader?: boolean;
|
|
716
|
+
/** Additional className for the auto-generated header */
|
|
717
|
+
headerClassName?: string;
|
|
718
|
+
/** Additional className */
|
|
719
|
+
className?: string;
|
|
720
|
+
/** Page content */
|
|
721
|
+
children: React$1.ReactNode;
|
|
722
|
+
}
|
|
723
|
+
declare function DashboardLayout({
|
|
724
|
+
sidebar,
|
|
725
|
+
breadcrumbs,
|
|
726
|
+
headerRight,
|
|
727
|
+
headerLeft,
|
|
728
|
+
header,
|
|
729
|
+
stickyHeader,
|
|
730
|
+
headerClassName,
|
|
731
|
+
className,
|
|
732
|
+
children
|
|
733
|
+
}: DashboardLayoutProps): react_jsx_runtime0.JSX.Element;
|
|
734
|
+
//#endregion
|
|
735
|
+
//#region src/dashboard/dashboard-content.d.ts
|
|
736
|
+
interface DashboardContentProps {
|
|
737
|
+
/** Content to render inside the dashboard area */
|
|
738
|
+
children: React$1.ReactNode;
|
|
739
|
+
/** Additional className for the outer wrapper */
|
|
740
|
+
className?: string;
|
|
741
|
+
/** Enable @container queries on the content area */
|
|
742
|
+
container?: boolean | string;
|
|
743
|
+
/** Horizontal padding — defaults to "md" */
|
|
744
|
+
padding?: "none" | "sm" | "md" | "lg";
|
|
745
|
+
}
|
|
746
|
+
/**
|
|
747
|
+
* DashboardContent — Safe content wrapper for sidebar layouts.
|
|
748
|
+
*
|
|
749
|
+
* Prevents the classic flexbox overflow bug where children with
|
|
750
|
+
* `max-w-*` or grid layouts extend beyond the available space
|
|
751
|
+
* (behind the sidebar) by propagating `min-w-0` through the
|
|
752
|
+
* flex chain.
|
|
753
|
+
*
|
|
754
|
+
* **Important**: `SidebarInset` also needs `min-w-0` for the
|
|
755
|
+
* width constraint to propagate correctly from the flex parent.
|
|
756
|
+
* Pass `className="min-w-0"` to `SidebarInset`.
|
|
757
|
+
*
|
|
758
|
+
* @example
|
|
759
|
+
* ```tsx
|
|
760
|
+
* <SidebarProvider>
|
|
761
|
+
* <AppSidebar />
|
|
762
|
+
* <SidebarInset className="min-w-0">
|
|
763
|
+
* <DashboardContent>
|
|
764
|
+
* <PageHeader items={breadcrumbs} />
|
|
765
|
+
* <MyPageContent />
|
|
766
|
+
* </DashboardContent>
|
|
767
|
+
* </SidebarInset>
|
|
768
|
+
* </SidebarProvider>
|
|
769
|
+
* ```
|
|
770
|
+
*/
|
|
771
|
+
declare function DashboardContent({
|
|
772
|
+
children,
|
|
773
|
+
className,
|
|
774
|
+
container,
|
|
775
|
+
padding
|
|
776
|
+
}: DashboardContentProps): react_jsx_runtime0.JSX.Element;
|
|
777
|
+
//#endregion
|
|
778
|
+
//#region src/dashboard/page-header.d.ts
|
|
779
|
+
interface BreadcrumbItemData {
|
|
780
|
+
label: string;
|
|
781
|
+
href?: string;
|
|
782
|
+
current?: boolean;
|
|
783
|
+
}
|
|
784
|
+
interface PageHeaderProps {
|
|
785
|
+
items: BreadcrumbItemData[];
|
|
786
|
+
className?: string;
|
|
787
|
+
actions?: React.ReactNode;
|
|
788
|
+
}
|
|
789
|
+
declare function PageHeader({
|
|
790
|
+
items,
|
|
791
|
+
className,
|
|
792
|
+
actions
|
|
793
|
+
}: PageHeaderProps): react_jsx_runtime0.JSX.Element;
|
|
794
|
+
//#endregion
|
|
795
|
+
//#region src/dashboard/dashboard-page-layout.d.ts
|
|
796
|
+
interface DashboardPageLayoutProps {
|
|
797
|
+
/** Breadcrumb items for the page header */
|
|
798
|
+
breadcrumbs: BreadcrumbItemData[];
|
|
799
|
+
/** Action buttons rendered in the page header */
|
|
800
|
+
actions?: ReactNode;
|
|
801
|
+
/** Whether to wrap children in Suspense (default: true) */
|
|
802
|
+
suspense?: boolean;
|
|
803
|
+
/** Custom Suspense fallback. Defaults to a spinner. */
|
|
804
|
+
fallback?: ReactNode;
|
|
805
|
+
/** Additional className for the content wrapper */
|
|
806
|
+
className?: string;
|
|
807
|
+
children: ReactNode;
|
|
808
|
+
}
|
|
809
|
+
/**
|
|
810
|
+
* DashboardPageLayout — Standard page shell for dashboard pages.
|
|
811
|
+
* Combines PageHeader (breadcrumbs + actions) with optional Suspense boundary.
|
|
812
|
+
*
|
|
813
|
+
* @example
|
|
814
|
+
* ```tsx
|
|
815
|
+
* <DashboardPageLayout
|
|
816
|
+
* breadcrumbs={[
|
|
817
|
+
* { label: "Dashboard", href: "/dashboard" },
|
|
818
|
+
* { label: "Posts", current: true },
|
|
819
|
+
* ]}
|
|
820
|
+
* actions={<Button>New Post</Button>}
|
|
821
|
+
* fallback={<SkeletonTable rows={5} />}
|
|
822
|
+
* >
|
|
823
|
+
* <PostsList />
|
|
824
|
+
* </DashboardPageLayout>
|
|
825
|
+
* ```
|
|
826
|
+
*/
|
|
827
|
+
declare function DashboardPageLayout({
|
|
828
|
+
breadcrumbs,
|
|
829
|
+
actions,
|
|
830
|
+
suspense,
|
|
831
|
+
fallback,
|
|
832
|
+
className,
|
|
833
|
+
children
|
|
834
|
+
}: DashboardPageLayoutProps): react_jsx_runtime0.JSX.Element;
|
|
835
|
+
//#endregion
|
|
836
|
+
//#region src/dashboard/header-section.d.ts
|
|
837
|
+
interface HeaderAction {
|
|
838
|
+
text: string;
|
|
839
|
+
onClick?: () => void;
|
|
840
|
+
disabled?: boolean;
|
|
841
|
+
variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link";
|
|
842
|
+
size?: "default" | "sm" | "lg" | "icon";
|
|
843
|
+
className?: string;
|
|
844
|
+
icon?: LucideIcon;
|
|
845
|
+
iconPosition?: "left" | "right";
|
|
846
|
+
loadingText?: string;
|
|
847
|
+
loading?: boolean;
|
|
848
|
+
}
|
|
849
|
+
interface HeaderBadge {
|
|
850
|
+
text: string;
|
|
851
|
+
variant?: "default" | "secondary" | "destructive" | "outline";
|
|
852
|
+
className?: string;
|
|
853
|
+
}
|
|
854
|
+
interface HeaderMetadata {
|
|
855
|
+
text: string;
|
|
856
|
+
icon?: LucideIcon;
|
|
857
|
+
}
|
|
858
|
+
interface HeaderSectionProps {
|
|
859
|
+
title?: string;
|
|
860
|
+
description?: string;
|
|
861
|
+
actions?: HeaderAction[] | null;
|
|
862
|
+
icon?: LucideIcon | null;
|
|
863
|
+
iconClassName?: string;
|
|
864
|
+
loading?: boolean;
|
|
865
|
+
variant?: "default" | "compact" | "hero" | "minimal";
|
|
866
|
+
className?: string;
|
|
867
|
+
badge?: HeaderBadge | ReactNode;
|
|
868
|
+
breadcrumbs?: ReactNode;
|
|
869
|
+
metadata?: HeaderMetadata[];
|
|
870
|
+
children?: ReactNode;
|
|
871
|
+
}
|
|
872
|
+
declare function HeaderSection({
|
|
873
|
+
title,
|
|
874
|
+
description,
|
|
875
|
+
actions,
|
|
876
|
+
icon: Icon,
|
|
877
|
+
iconClassName,
|
|
878
|
+
loading,
|
|
879
|
+
variant,
|
|
880
|
+
className,
|
|
881
|
+
badge,
|
|
882
|
+
breadcrumbs,
|
|
883
|
+
metadata,
|
|
884
|
+
children
|
|
885
|
+
}: HeaderSectionProps): react_jsx_runtime0.JSX.Element;
|
|
886
|
+
//#endregion
|
|
887
|
+
//#region src/dashboard/sidebar-brand.d.ts
|
|
888
|
+
interface SidebarBrandProps {
|
|
889
|
+
/** Brand title text */
|
|
890
|
+
title: string;
|
|
891
|
+
/** Brand icon/logo element */
|
|
892
|
+
icon: React$1.ReactNode;
|
|
893
|
+
/** Link href (defaults to "/") */
|
|
894
|
+
href?: string;
|
|
895
|
+
/** Additional className */
|
|
896
|
+
className?: string;
|
|
897
|
+
/** Tooltip text when collapsed (defaults to title) */
|
|
898
|
+
tooltip?: string;
|
|
899
|
+
}
|
|
900
|
+
/**
|
|
901
|
+
* SidebarBrand - Logo and title section for dashboard sidebar.
|
|
902
|
+
* Automatically handles collapsed state styling.
|
|
903
|
+
*/
|
|
904
|
+
declare function SidebarBrand({
|
|
905
|
+
title,
|
|
906
|
+
icon,
|
|
907
|
+
href,
|
|
908
|
+
className,
|
|
909
|
+
tooltip
|
|
910
|
+
}: SidebarBrandProps): react_jsx_runtime0.JSX.Element;
|
|
911
|
+
//#endregion
|
|
912
|
+
//#region src/dashboard/sidebar-nav.d.ts
|
|
913
|
+
type SidebarDensity = "compact" | "default" | "comfortable";
|
|
914
|
+
interface SidebarNavProps {
|
|
915
|
+
/** Navigation groups to render */
|
|
916
|
+
groups: NavGroup[];
|
|
917
|
+
/** Item height density. "compact" = h-7, "default" = h-8, "comfortable" = h-10 */
|
|
918
|
+
density?: SidebarDensity;
|
|
919
|
+
/** Additional className */
|
|
920
|
+
className?: string;
|
|
921
|
+
/** Callback when a nav item is clicked */
|
|
922
|
+
onItemClick?: (item: NavItem) => void;
|
|
923
|
+
}
|
|
924
|
+
interface SidebarNavGroupProps {
|
|
925
|
+
/** Group title (optional) */
|
|
926
|
+
title?: string;
|
|
927
|
+
/** Navigation items in this group */
|
|
928
|
+
items: NavItem[];
|
|
929
|
+
/** Item density */
|
|
930
|
+
density?: SidebarDensity;
|
|
931
|
+
/** Additional className */
|
|
932
|
+
className?: string;
|
|
933
|
+
/** Callback when an item is clicked */
|
|
934
|
+
onItemClick?: (item: NavItem) => void;
|
|
935
|
+
}
|
|
936
|
+
interface SidebarNavItemProps {
|
|
937
|
+
/** The navigation item data */
|
|
938
|
+
item: NavItem;
|
|
939
|
+
/** Item density */
|
|
940
|
+
density?: SidebarDensity;
|
|
941
|
+
/** Callback when clicked */
|
|
942
|
+
onClick?: () => void;
|
|
943
|
+
}
|
|
944
|
+
/**
|
|
945
|
+
* SidebarNavItem - Single navigation item with optional sub-items.
|
|
946
|
+
*/
|
|
947
|
+
declare function SidebarNavItem({
|
|
948
|
+
item,
|
|
949
|
+
density,
|
|
950
|
+
onClick
|
|
951
|
+
}: SidebarNavItemProps): react_jsx_runtime0.JSX.Element;
|
|
952
|
+
/**
|
|
953
|
+
* SidebarNavGroup - A group of navigation items with optional title.
|
|
954
|
+
*/
|
|
955
|
+
declare function SidebarNavGroup({
|
|
956
|
+
title,
|
|
957
|
+
items,
|
|
958
|
+
density,
|
|
959
|
+
className,
|
|
960
|
+
onItemClick
|
|
961
|
+
}: SidebarNavGroupProps): react_jsx_runtime0.JSX.Element;
|
|
962
|
+
/**
|
|
963
|
+
* SidebarNav - Complete navigation section with multiple groups.
|
|
964
|
+
*/
|
|
965
|
+
declare function SidebarNav({
|
|
966
|
+
groups,
|
|
967
|
+
density,
|
|
968
|
+
className,
|
|
969
|
+
onItemClick
|
|
970
|
+
}: SidebarNavProps): react_jsx_runtime0.JSX.Element;
|
|
971
|
+
//#endregion
|
|
972
|
+
export { type BreadcrumbItem, type BreadcrumbItemData, type BreadcrumbsConfig, ClientOnly, DashboardContent, type DashboardContentProps, DashboardHeader, type DashboardHeaderProps, DashboardLayout, type DashboardLayoutProps, DashboardPageLayout, type DashboardPageLayoutProps, DualSidebar, type DualSidebarBrand, type DualSidebarCategory, type DualSidebarItem, type DualSidebarProps, type DualSidebarUser, FloatingSidebar, type FloatingSidebarBrand, type FloatingSidebarProject, type FloatingSidebarProps, type FloatingSidebarUser, type HeaderAction, type HeaderBadge, type HeaderMetadata, HeaderSection, type HeaderSectionProps, InsetSidebar, type InsetSidebarBrand, type InsetSidebarProject, type InsetSidebarProps, type InsetSidebarUser, MiniSidebar, type MiniSidebarBrand, type MiniSidebarGroup, type MiniSidebarItem, type MiniSidebarProps, type MiniSidebarUser, type NavGroup, type NavItem, type NavPermissions, type NavSubItem, PageHeader, type PageHeaderProps, type ProjectItem, ProjectSwitcher, type ProjectSwitcherProps, SidebarBrand, type SidebarBrandProps, type SidebarConfig, SidebarNav, SidebarNavGroup, type SidebarNavGroupProps, SidebarNavItem, type SidebarNavItemProps, type SidebarNavProps, SidebarUserMenu, type SidebarUserMenuProps, TopbarRail, type TopbarRailBrand, type TopbarRailBreadcrumb, type TopbarRailCategory, type TopbarRailItem, type TopbarRailProps, type TopbarRailUser, type UseDashboardBreadcrumbsOptions, type UserData, type UserMenuItem, cn, findActiveCategory, findActiveItem, matchRoute, resolveCategories, resolveMiniNavigation, resolveNavigation, useDashboardBreadcrumbs };
|