@caffeinebounce/ui 0.62.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/LICENSE +21 -0
- package/README.md +39 -0
- package/dist/FinancialStatementTable-BNUrdTU4.d.cts +249 -0
- package/dist/FinancialStatementTable-BNUrdTU4.d.ts +249 -0
- package/dist/NewsletterSignup-BPreFi5W.d.cts +37 -0
- package/dist/NewsletterSignup-BPreFi5W.d.ts +37 -0
- package/dist/TestimonialsSection-DtPu2OeR.d.ts +736 -0
- package/dist/TestimonialsSection-z-yotRfv.d.cts +736 -0
- package/dist/UnifiedTableControls-CG299y9h.d.ts +1233 -0
- package/dist/UnifiedTableControls-CIjRpNhy.d.cts +1233 -0
- package/dist/blog.d.cts +99 -0
- package/dist/blog.d.ts +99 -0
- package/dist/blog.js +292 -0
- package/dist/blog.mjs +279 -0
- package/dist/button-BHnoRUkF.d.cts +34 -0
- package/dist/button-BHnoRUkF.d.ts +34 -0
- package/dist/charts.d.cts +80 -0
- package/dist/charts.d.ts +80 -0
- package/dist/charts.js +19 -0
- package/dist/charts.mjs +2 -0
- package/dist/chunk-33JR5SYE.js +44 -0
- package/dist/chunk-3NDB4YPC.js +247 -0
- package/dist/chunk-5RW4PYZ6.js +1504 -0
- package/dist/chunk-5THF4YP6.mjs +155 -0
- package/dist/chunk-6BUBNZPG.mjs +164 -0
- package/dist/chunk-6DVWMJ3H.mjs +7029 -0
- package/dist/chunk-6TGV2DNP.js +120 -0
- package/dist/chunk-72JGQ7IJ.mjs +1498 -0
- package/dist/chunk-7DHKQODW.mjs +2932 -0
- package/dist/chunk-7IKHZKAC.js +160 -0
- package/dist/chunk-ADIDI7AJ.js +11 -0
- package/dist/chunk-BFWX5GJZ.mjs +940 -0
- package/dist/chunk-BMFQG6RA.mjs +5537 -0
- package/dist/chunk-C4UT5V3P.js +65 -0
- package/dist/chunk-CC4KUIKC.js +2004 -0
- package/dist/chunk-D3QXPL47.mjs +1814 -0
- package/dist/chunk-DQWHYBV2.js +36 -0
- package/dist/chunk-E42B4GSB.js +993 -0
- package/dist/chunk-ESZ7CBA2.js +1007 -0
- package/dist/chunk-EYJJQVV4.js +111 -0
- package/dist/chunk-FRRS2YZH.mjs +129 -0
- package/dist/chunk-G5TQWWQA.mjs +37 -0
- package/dist/chunk-GAIQJCAZ.js +5612 -0
- package/dist/chunk-GMBGWOCR.mjs +48 -0
- package/dist/chunk-GUSTCU2W.mjs +105 -0
- package/dist/chunk-HBLKVQIQ.mjs +23 -0
- package/dist/chunk-HMAMMC72.js +26 -0
- package/dist/chunk-IMKLN273.mjs +9 -0
- package/dist/chunk-J6OLBSZR.js +250 -0
- package/dist/chunk-JAE45W2T.js +28 -0
- package/dist/chunk-JORVSG52.js +606 -0
- package/dist/chunk-KB7UXIQZ.mjs +984 -0
- package/dist/chunk-KGGQ5NZV.js +186 -0
- package/dist/chunk-KHCC5UKW.mjs +22 -0
- package/dist/chunk-KRRIRS6A.mjs +1945 -0
- package/dist/chunk-LQCVRWVF.js +48 -0
- package/dist/chunk-MHZXUOGN.mjs +168 -0
- package/dist/chunk-MPZFPU4X.js +349 -0
- package/dist/chunk-MVYRNJA6.js +74 -0
- package/dist/chunk-N6AFNFZR.mjs +565 -0
- package/dist/chunk-OFQLWSUR.mjs +214 -0
- package/dist/chunk-OLAAXLXY.mjs +219 -0
- package/dist/chunk-OZZWDIOY.js +1859 -0
- package/dist/chunk-PZRI43EZ.js +111 -0
- package/dist/chunk-Q256HRYD.js +176 -0
- package/dist/chunk-Q52ZEL62.mjs +223 -0
- package/dist/chunk-R26Y7LGJ.js +142 -0
- package/dist/chunk-RBUYW6QQ.js +39 -0
- package/dist/chunk-RVEFPVZF.mjs +43 -0
- package/dist/chunk-SORWLKOK.js +96 -0
- package/dist/chunk-STEP6C4C.mjs +33 -0
- package/dist/chunk-T5R6HUDG.mjs +22 -0
- package/dist/chunk-T6ZBA6VJ.js +7109 -0
- package/dist/chunk-UM7WMXIU.js +2995 -0
- package/dist/chunk-VBD4Q5LL.mjs +117 -0
- package/dist/chunk-WOITB4JL.js +195 -0
- package/dist/chunk-YKZEKJMZ.mjs +71 -0
- package/dist/chunk-YL7RZRHM.mjs +103 -0
- package/dist/chunk-YSLD2HLP.mjs +346 -0
- package/dist/chunk-ZFLZA7UP.mjs +140 -0
- package/dist/chunk-ZKUIUE7W.mjs +26 -0
- package/dist/chunk-ZOA7B32D.js +248 -0
- package/dist/data-table.d.cts +46 -0
- package/dist/data-table.d.ts +46 -0
- package/dist/data-table.js +270 -0
- package/dist/data-table.mjs +13 -0
- package/dist/editor.d.cts +89 -0
- package/dist/editor.d.ts +89 -0
- package/dist/editor.js +10 -0
- package/dist/editor.mjs +1 -0
- package/dist/forms.d.cts +142 -0
- package/dist/forms.d.ts +142 -0
- package/dist/forms.js +24 -0
- package/dist/forms.mjs +11 -0
- package/dist/hooks-8ORd7T1A.d.cts +751 -0
- package/dist/hooks-B2jU1GVT.d.ts +751 -0
- package/dist/hooks.d.cts +6 -0
- package/dist/hooks.d.ts +6 -0
- package/dist/hooks.js +99 -0
- package/dist/hooks.mjs +10 -0
- package/dist/index.d.cts +3141 -0
- package/dist/index.d.ts +3141 -0
- package/dist/index.js +7332 -0
- package/dist/index.mjs +5876 -0
- package/dist/layouts-DPfDDF53.d.cts +1001 -0
- package/dist/layouts-DPfDDF53.d.ts +1001 -0
- package/dist/layouts.d.cts +4 -0
- package/dist/layouts.d.ts +4 -0
- package/dist/layouts.js +100 -0
- package/dist/layouts.mjs +11 -0
- package/dist/marketing-3d.d.cts +51 -0
- package/dist/marketing-3d.d.ts +51 -0
- package/dist/marketing-3d.js +553 -0
- package/dist/marketing-3d.mjs +526 -0
- package/dist/marketing.d.cts +583 -0
- package/dist/marketing.d.ts +583 -0
- package/dist/marketing.js +299 -0
- package/dist/marketing.mjs +10 -0
- package/dist/media.d.cts +29 -0
- package/dist/media.d.ts +29 -0
- package/dist/media.js +189 -0
- package/dist/media.mjs +182 -0
- package/dist/navigation.d.cts +591 -0
- package/dist/navigation.d.ts +591 -0
- package/dist/navigation.js +108 -0
- package/dist/navigation.mjs +15 -0
- package/dist/portal.d.cts +58 -0
- package/dist/portal.d.ts +58 -0
- package/dist/portal.js +403 -0
- package/dist/portal.mjs +395 -0
- package/dist/primitives.d.cts +508 -0
- package/dist/primitives.d.ts +508 -0
- package/dist/primitives.js +295 -0
- package/dist/primitives.mjs +14 -0
- package/dist/settings.d.cts +216 -0
- package/dist/settings.d.ts +216 -0
- package/dist/settings.js +34 -0
- package/dist/settings.mjs +9 -0
- package/dist/shared-Dqn36QHZ.d.cts +4 -0
- package/dist/shared-Dqn36QHZ.d.ts +4 -0
- package/dist/styles.css +1213 -0
- package/package.json +189 -0
- package/styles.css +1 -0
|
@@ -0,0 +1,591 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
|
|
3
|
+
export { NavigationMenuPrimitive };
|
|
4
|
+
import * as React$1 from 'react';
|
|
5
|
+
import { ReactNode, ComponentType, MouseEventHandler } from 'react';
|
|
6
|
+
import { a as NewsletterSignupProps } from './NewsletterSignup-BPreFi5W.cjs';
|
|
7
|
+
import { LucideIcon } from 'lucide-react';
|
|
8
|
+
|
|
9
|
+
declare function NavigationMenu({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Root>): react_jsx_runtime.JSX.Element;
|
|
10
|
+
declare function NavigationMenuList({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.List>): react_jsx_runtime.JSX.Element;
|
|
11
|
+
declare function NavigationMenuItem({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Item>): react_jsx_runtime.JSX.Element;
|
|
12
|
+
declare function NavigationMenuTrigger({ className, children, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
|
|
13
|
+
declare function NavigationMenuContent({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Content>): react_jsx_runtime.JSX.Element;
|
|
14
|
+
declare function NavigationMenuLink({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Link>): react_jsx_runtime.JSX.Element;
|
|
15
|
+
declare function NavigationMenuIndicator({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Indicator>): react_jsx_runtime.JSX.Element;
|
|
16
|
+
declare function NavigationMenuViewport({ className, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Viewport>): react_jsx_runtime.JSX.Element;
|
|
17
|
+
declare function navigationMenuTriggerStyle(): string;
|
|
18
|
+
declare const NavigationMenuViewportPrimitive: React$1.ForwardRefExoticComponent<NavigationMenuPrimitive.NavigationMenuViewportProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Application definition for the AppSwitcher.
|
|
22
|
+
*/
|
|
23
|
+
interface AppDefinition {
|
|
24
|
+
/** Unique identifier */
|
|
25
|
+
id: string;
|
|
26
|
+
/** Full display name for the dropdown */
|
|
27
|
+
name: string;
|
|
28
|
+
/** Short display name shown in the header badge */
|
|
29
|
+
shortName: string;
|
|
30
|
+
/** Route to navigate to when selected */
|
|
31
|
+
route: string;
|
|
32
|
+
/** Color class for the app indicator badge */
|
|
33
|
+
colorClass: string;
|
|
34
|
+
/** Optional icon component shown in dropdown */
|
|
35
|
+
icon?: ReactNode;
|
|
36
|
+
}
|
|
37
|
+
interface AppSwitcherProps {
|
|
38
|
+
/** List of available apps */
|
|
39
|
+
apps: AppDefinition[];
|
|
40
|
+
/** Brand name to display (e.g., "Capital Compass") */
|
|
41
|
+
brandName?: string;
|
|
42
|
+
/** Brand logo URL */
|
|
43
|
+
brandLogoUrl?: string;
|
|
44
|
+
/** Function to determine active app from pathname */
|
|
45
|
+
getActiveAppId?: (pathname: string) => string;
|
|
46
|
+
/** Custom keyboard shortcut component */
|
|
47
|
+
ShortcutComponent?: ComponentType<{
|
|
48
|
+
className?: string;
|
|
49
|
+
children: ReactNode;
|
|
50
|
+
}>;
|
|
51
|
+
/** Additional className for the container */
|
|
52
|
+
className?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* AppSwitcher Component
|
|
56
|
+
*
|
|
57
|
+
* A branded header with dropdown for switching between different apps/modules.
|
|
58
|
+
* Styled like AdminBrandedHeader but with app selection capability.
|
|
59
|
+
*
|
|
60
|
+
* Visual design:
|
|
61
|
+
* - Logo on the left (32x32, rounded)
|
|
62
|
+
* - Brand name as main title (font-semibold)
|
|
63
|
+
* - Colored app badge underneath (uppercase, tracking-wider)
|
|
64
|
+
* - Subtle dropdown indicator
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```tsx
|
|
68
|
+
* const apps: AppDefinition[] = [
|
|
69
|
+
* {
|
|
70
|
+
* id: "admin",
|
|
71
|
+
* name: "Admin Console",
|
|
72
|
+
* shortName: "Admin",
|
|
73
|
+
* route: "/admin/dashboard",
|
|
74
|
+
* colorClass: "text-orange-600 dark:text-orange-400",
|
|
75
|
+
* icon: <Compass className="h-4 w-4" />,
|
|
76
|
+
* },
|
|
77
|
+
* {
|
|
78
|
+
* id: "finance",
|
|
79
|
+
* name: "Finance",
|
|
80
|
+
* shortName: "Finance",
|
|
81
|
+
* route: "/finance",
|
|
82
|
+
* colorClass: "text-emerald-600 dark:text-emerald-400",
|
|
83
|
+
* icon: <DollarSign className="h-4 w-4" />,
|
|
84
|
+
* },
|
|
85
|
+
* ];
|
|
86
|
+
*
|
|
87
|
+
* <AppSwitcher
|
|
88
|
+
* apps={apps}
|
|
89
|
+
* brandName="Capital Compass"
|
|
90
|
+
* brandLogoUrl="/logo.png"
|
|
91
|
+
* getActiveAppId={(pathname) => pathname.startsWith("/finance") ? "finance" : "admin"}
|
|
92
|
+
* />
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
declare function AppSwitcher({ apps, brandName, brandLogoUrl, getActiveAppId, ShortcutComponent, className, }: AppSwitcherProps): react_jsx_runtime.JSX.Element | null;
|
|
96
|
+
|
|
97
|
+
interface ComingSoonButtonProps {
|
|
98
|
+
/** Button label */
|
|
99
|
+
label: string;
|
|
100
|
+
/** Icon to display before the label */
|
|
101
|
+
icon?: ReactNode;
|
|
102
|
+
/** Keyboard shortcut key to display (e.g., "F") */
|
|
103
|
+
shortcutKey?: string;
|
|
104
|
+
/** Whether keyboard shortcuts are visible */
|
|
105
|
+
shortcutsVisible?: boolean;
|
|
106
|
+
/** Tooltip message */
|
|
107
|
+
tooltip?: string;
|
|
108
|
+
/** Additional className */
|
|
109
|
+
className?: string;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* A disabled button that shows a "Coming Soon" tooltip.
|
|
113
|
+
* Useful for placeholder features in navigation or sidebars.
|
|
114
|
+
*/
|
|
115
|
+
declare function ComingSoonButton({ label, icon, shortcutKey, shortcutsVisible, tooltip, className, }: ComingSoonButtonProps): react_jsx_runtime.JSX.Element;
|
|
116
|
+
|
|
117
|
+
/** Base entity interface - extend this for your specific entity types */
|
|
118
|
+
interface Entity {
|
|
119
|
+
/** Unique identifier */
|
|
120
|
+
id: string;
|
|
121
|
+
/** Display name */
|
|
122
|
+
name: string;
|
|
123
|
+
/** Optional logo URL */
|
|
124
|
+
logoUrl?: string | null;
|
|
125
|
+
/** Whether this is the primary/default entity */
|
|
126
|
+
isPrimary?: boolean;
|
|
127
|
+
}
|
|
128
|
+
interface EntitySwitcherShortcut {
|
|
129
|
+
/** Key to press */
|
|
130
|
+
key: string;
|
|
131
|
+
/** Require Ctrl key */
|
|
132
|
+
ctrl?: boolean;
|
|
133
|
+
/** Require Shift key */
|
|
134
|
+
shift?: boolean;
|
|
135
|
+
/** Require Alt key */
|
|
136
|
+
alt?: boolean;
|
|
137
|
+
/** Require Meta key */
|
|
138
|
+
meta?: boolean;
|
|
139
|
+
}
|
|
140
|
+
interface EntitySwitcherProps<T extends Entity> {
|
|
141
|
+
/** List of entities to display */
|
|
142
|
+
entities: T[];
|
|
143
|
+
/** Currently active entity */
|
|
144
|
+
activeEntity: T | null;
|
|
145
|
+
/** Callback when an entity is selected */
|
|
146
|
+
onSelect: (entity: T) => void;
|
|
147
|
+
/** Callback when "Add new" is clicked */
|
|
148
|
+
onAddNew?: () => void;
|
|
149
|
+
/** Whether entities are loading */
|
|
150
|
+
loading?: boolean;
|
|
151
|
+
/** User ID for gradient generation when no entities */
|
|
152
|
+
userId?: string;
|
|
153
|
+
/** Label shown in dropdown header */
|
|
154
|
+
label?: string;
|
|
155
|
+
/** Text for add new button */
|
|
156
|
+
addNewLabel?: string;
|
|
157
|
+
/** Placeholder text when no entities exist */
|
|
158
|
+
emptyTitle?: string;
|
|
159
|
+
/** Subtitle for empty state */
|
|
160
|
+
emptySubtitle?: string;
|
|
161
|
+
/** Custom render function for entity display name */
|
|
162
|
+
getDisplayName?: (entity: T) => string;
|
|
163
|
+
/** Custom render function for entity initials */
|
|
164
|
+
getInitials?: (entity: T) => string;
|
|
165
|
+
/** Enable keyboard shortcuts (Ctrl+1-9 for quick switch) */
|
|
166
|
+
enableKeyboardShortcuts?: boolean;
|
|
167
|
+
/** Keyboard shortcut to open switcher */
|
|
168
|
+
openShortcut?: EntitySwitcherShortcut;
|
|
169
|
+
/** Display string for open shortcut */
|
|
170
|
+
openShortcutDisplay?: string;
|
|
171
|
+
/** Dropdown side position */
|
|
172
|
+
side?: "top" | "bottom" | "left" | "right";
|
|
173
|
+
/** Dropdown alignment */
|
|
174
|
+
align?: "start" | "center" | "end";
|
|
175
|
+
/** Custom class name */
|
|
176
|
+
className?: string;
|
|
177
|
+
/** Custom keyboard shortcut component (for user preference integration) */
|
|
178
|
+
ShortcutComponent?: ComponentType<{
|
|
179
|
+
className?: string;
|
|
180
|
+
children: ReactNode;
|
|
181
|
+
}>;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Generic entity switcher component for switching between teams, companies, workspaces, etc.
|
|
185
|
+
* Renders within a sidebar menu structure.
|
|
186
|
+
*/
|
|
187
|
+
declare function EntitySwitcher<T extends Entity>({ entities, activeEntity, onSelect, onAddNew, loading, userId, label, addNewLabel, emptyTitle, emptySubtitle, getDisplayName, getInitials, enableKeyboardShortcuts, openShortcut, openShortcutDisplay, side, align, className, ShortcutComponent, }: EntitySwitcherProps<T>): ReactNode;
|
|
188
|
+
|
|
189
|
+
interface FooterLinkGroup {
|
|
190
|
+
/** Title of the link group */
|
|
191
|
+
title: string;
|
|
192
|
+
/** Links in this group */
|
|
193
|
+
links: {
|
|
194
|
+
label: string;
|
|
195
|
+
href: string;
|
|
196
|
+
external?: boolean;
|
|
197
|
+
}[];
|
|
198
|
+
}
|
|
199
|
+
interface FooterProps {
|
|
200
|
+
/** Logo/brand element */
|
|
201
|
+
logo?: ReactNode;
|
|
202
|
+
/** Link groups for columns */
|
|
203
|
+
linkGroups?: FooterLinkGroup[];
|
|
204
|
+
/** Social media links */
|
|
205
|
+
socialLinks?: {
|
|
206
|
+
icon: ReactNode;
|
|
207
|
+
href: string;
|
|
208
|
+
label: string;
|
|
209
|
+
}[];
|
|
210
|
+
/** Copyright text */
|
|
211
|
+
copyright?: string;
|
|
212
|
+
/** Additional bottom content */
|
|
213
|
+
bottomContent?: ReactNode;
|
|
214
|
+
className?: string;
|
|
215
|
+
/** Additional classes layered onto the shared container width/padding system. */
|
|
216
|
+
containerClassName?: string;
|
|
217
|
+
/** Footer variant */
|
|
218
|
+
variant?: "default" | "brand" | "minimal";
|
|
219
|
+
/** Tagline text (brand variant) */
|
|
220
|
+
tagline?: string | ReactNode;
|
|
221
|
+
/** Newsletter CTA config (brand variant) */
|
|
222
|
+
newsletter?: false | ({
|
|
223
|
+
placeholder?: string;
|
|
224
|
+
buttonText?: string;
|
|
225
|
+
onSubmit?: (email: string) => void;
|
|
226
|
+
} & Pick<NewsletterSignupProps, "buttonClassName" | "endpoint" | "errorMessage" | "inputClassName" | "inputLabel" | "source" | "submittingLabel" | "successClassName" | "successDescription" | "successTitle">);
|
|
227
|
+
}
|
|
228
|
+
declare function Footer({ logo, linkGroups, socialLinks, copyright, bottomContent, className, containerClassName, variant, tagline, newsletter, }: FooterProps): react_jsx_runtime.JSX.Element;
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Navigation link definition
|
|
232
|
+
*/
|
|
233
|
+
interface NavLink {
|
|
234
|
+
/** Display label */
|
|
235
|
+
label: string;
|
|
236
|
+
/** Optional supporting copy rendered under the label in grouped menus */
|
|
237
|
+
description?: ReactNode;
|
|
238
|
+
/** Link destination */
|
|
239
|
+
href: string;
|
|
240
|
+
/** Whether link opens in new tab */
|
|
241
|
+
external?: boolean;
|
|
242
|
+
/** Optional icon to display */
|
|
243
|
+
icon?: ReactNode;
|
|
244
|
+
}
|
|
245
|
+
interface NavbarMenuGroup {
|
|
246
|
+
/** Trigger label for the grouped desktop menu */
|
|
247
|
+
label: string;
|
|
248
|
+
/** Navigation links rendered in the menu content */
|
|
249
|
+
links: NavLink[];
|
|
250
|
+
/** Accessible label for the menu content */
|
|
251
|
+
ariaLabel?: string;
|
|
252
|
+
/** Whether to render the menu label inside the content panel */
|
|
253
|
+
showHeading?: boolean;
|
|
254
|
+
}
|
|
255
|
+
interface NavbarMenuClassNames {
|
|
256
|
+
/** Classes for the shared navigation menu root */
|
|
257
|
+
root?: string;
|
|
258
|
+
/** Classes for the navigation menu list */
|
|
259
|
+
list?: string;
|
|
260
|
+
/** Classes for each navigation menu item wrapper */
|
|
261
|
+
menuItem?: string;
|
|
262
|
+
/** Classes for each menu trigger button */
|
|
263
|
+
trigger?: string;
|
|
264
|
+
/** Classes for the trigger chevron icon */
|
|
265
|
+
triggerIcon?: string;
|
|
266
|
+
/** Classes for each content panel */
|
|
267
|
+
content?: string;
|
|
268
|
+
/** Classes for the optional content heading */
|
|
269
|
+
heading?: string;
|
|
270
|
+
/** Classes for each link inside a content panel */
|
|
271
|
+
item?: string;
|
|
272
|
+
/** Classes for each content-panel link label */
|
|
273
|
+
itemLabel?: string;
|
|
274
|
+
/** Classes for each content-panel link description */
|
|
275
|
+
itemDescription?: string;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Props for the Navbar component
|
|
279
|
+
*/
|
|
280
|
+
interface NavbarProps {
|
|
281
|
+
/** Logo/brand element (typically an image with text) */
|
|
282
|
+
logo: ReactNode;
|
|
283
|
+
/** Optional named styling preset for site-specific chrome */
|
|
284
|
+
preset?: "default" | "keenan";
|
|
285
|
+
/** Navigation links to display in desktop view */
|
|
286
|
+
links?: NavLink[];
|
|
287
|
+
/** Grouped desktop menus rendered with the shared navigation menu primitive */
|
|
288
|
+
menuGroups?: NavbarMenuGroup[];
|
|
289
|
+
/** Slot class hooks for restyling grouped desktop menus */
|
|
290
|
+
menuClassNames?: NavbarMenuClassNames;
|
|
291
|
+
/** Right side content (user menu, theme toggle, etc.) */
|
|
292
|
+
rightContent?: ReactNode;
|
|
293
|
+
/** Content to render in mobile menu (replaces default link rendering) */
|
|
294
|
+
mobileContent?: ReactNode;
|
|
295
|
+
/** Whether navbar should stick to top on scroll */
|
|
296
|
+
sticky?: boolean;
|
|
297
|
+
/**
|
|
298
|
+
* Hide navbar when scrolling down, show when scrolling up.
|
|
299
|
+
* Only applies when sticky is true.
|
|
300
|
+
* Common pattern for marketing pages to maximize content area.
|
|
301
|
+
*/
|
|
302
|
+
hideOnScrollDown?: boolean;
|
|
303
|
+
/** Background style variant */
|
|
304
|
+
variant?: "transparent" | "solid" | "blur";
|
|
305
|
+
/** Additional className for the header element */
|
|
306
|
+
className?: string;
|
|
307
|
+
/** Link component for client-side navigation (e.g., Next.js Link) */
|
|
308
|
+
LinkComponent?: React.ComponentType<{
|
|
309
|
+
href: string;
|
|
310
|
+
className?: string;
|
|
311
|
+
children: ReactNode;
|
|
312
|
+
onClick?: () => void;
|
|
313
|
+
}>;
|
|
314
|
+
/** Whether to show mobile menu button */
|
|
315
|
+
showMobileMenu?: boolean;
|
|
316
|
+
/** Custom mobile menu button content when open */
|
|
317
|
+
mobileMenuOpenIcon?: ReactNode;
|
|
318
|
+
/** Custom mobile menu button content when closed */
|
|
319
|
+
mobileMenuClosedIcon?: ReactNode;
|
|
320
|
+
/** Mobile menu height behavior */
|
|
321
|
+
mobileMenuHeight?: "content" | "screen";
|
|
322
|
+
/** Additional classes layered onto the shared container width/padding system. */
|
|
323
|
+
containerClassName?: string;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* A configurable navigation bar component with responsive mobile menu.
|
|
327
|
+
*
|
|
328
|
+
* @example
|
|
329
|
+
* ```tsx
|
|
330
|
+
* <Navbar
|
|
331
|
+
* logo={<Image src="/logo.png" alt="Brand" />}
|
|
332
|
+
* links={[
|
|
333
|
+
* { label: "Home", href: "/" },
|
|
334
|
+
* { label: "About", href: "/about" },
|
|
335
|
+
* { label: "Docs", href: "https://docs.example.com", external: true },
|
|
336
|
+
* ]}
|
|
337
|
+
* rightContent={<ThemeToggle />}
|
|
338
|
+
* sticky
|
|
339
|
+
* variant="blur"
|
|
340
|
+
* />
|
|
341
|
+
* ```
|
|
342
|
+
*/
|
|
343
|
+
declare function Navbar({ logo, preset, links, menuGroups, menuClassNames, rightContent, mobileContent, sticky, hideOnScrollDown, variant, className, LinkComponent, showMobileMenu, mobileMenuOpenIcon, mobileMenuClosedIcon, mobileMenuHeight, containerClassName, }: NavbarProps): react_jsx_runtime.JSX.Element;
|
|
344
|
+
|
|
345
|
+
interface MarketingHeaderPresetCta {
|
|
346
|
+
href: string;
|
|
347
|
+
label: string;
|
|
348
|
+
external?: boolean;
|
|
349
|
+
variant?: "default" | "outline" | "secondary" | "link";
|
|
350
|
+
}
|
|
351
|
+
interface MarketingHeaderPresetProps {
|
|
352
|
+
logo: ReactNode;
|
|
353
|
+
links?: NavLink[];
|
|
354
|
+
primaryCta?: MarketingHeaderPresetCta;
|
|
355
|
+
secondaryCta?: MarketingHeaderPresetCta;
|
|
356
|
+
rightContent?: ReactNode;
|
|
357
|
+
mobileContent?: ReactNode;
|
|
358
|
+
className?: string;
|
|
359
|
+
containerClassName?: string;
|
|
360
|
+
variant?: NavbarProps["variant"];
|
|
361
|
+
preset?: NavbarProps["preset"];
|
|
362
|
+
sticky?: boolean;
|
|
363
|
+
hideOnScrollDown?: boolean;
|
|
364
|
+
showMobileMenu?: boolean;
|
|
365
|
+
LinkComponent?: NavbarProps["LinkComponent"];
|
|
366
|
+
}
|
|
367
|
+
declare function MarketingHeaderPreset({ logo, links, primaryCta, secondaryCta, rightContent, mobileContent, className, containerClassName, variant, preset, sticky, hideOnScrollDown, showMobileMenu, LinkComponent, }: MarketingHeaderPresetProps): react_jsx_runtime.JSX.Element;
|
|
368
|
+
|
|
369
|
+
interface NavbarLogoProps {
|
|
370
|
+
/** Link destination (typically "/") */
|
|
371
|
+
href?: string;
|
|
372
|
+
/** Image source URL */
|
|
373
|
+
imageSrc: string;
|
|
374
|
+
/** Image alt text */
|
|
375
|
+
imageAlt: string;
|
|
376
|
+
/** Brand text to display next to image */
|
|
377
|
+
text?: string;
|
|
378
|
+
/** Image width in pixels */
|
|
379
|
+
imageWidth?: number;
|
|
380
|
+
/** Image height in pixels */
|
|
381
|
+
imageHeight?: number;
|
|
382
|
+
/** Whether to invert the image in dark mode */
|
|
383
|
+
invertInDarkMode?: boolean;
|
|
384
|
+
/** Additional className for the container */
|
|
385
|
+
className?: string;
|
|
386
|
+
/** Additional className for the image */
|
|
387
|
+
imageClassName?: string;
|
|
388
|
+
/** Additional className for the text */
|
|
389
|
+
textClassName?: string;
|
|
390
|
+
/** Link component for client-side navigation */
|
|
391
|
+
LinkComponent?: ComponentType<{
|
|
392
|
+
href: string;
|
|
393
|
+
className?: string;
|
|
394
|
+
children: ReactNode;
|
|
395
|
+
}>;
|
|
396
|
+
/** Image component (e.g., Next.js Image) */
|
|
397
|
+
ImageComponent?: ComponentType<{
|
|
398
|
+
src: string;
|
|
399
|
+
alt: string;
|
|
400
|
+
width: number;
|
|
401
|
+
height: number;
|
|
402
|
+
className?: string;
|
|
403
|
+
}>;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Navbar logo component with image and optional text.
|
|
407
|
+
* Supports dark mode image inversion and custom Link/Image components.
|
|
408
|
+
*
|
|
409
|
+
* @example
|
|
410
|
+
* ```tsx
|
|
411
|
+
* // With Next.js
|
|
412
|
+
* <NavbarLogo
|
|
413
|
+
* href="/"
|
|
414
|
+
* imageSrc="/logo.png"
|
|
415
|
+
* imageAlt="My Brand"
|
|
416
|
+
* text="My Brand"
|
|
417
|
+
* invertInDarkMode
|
|
418
|
+
* LinkComponent={Link}
|
|
419
|
+
* ImageComponent={Image}
|
|
420
|
+
* />
|
|
421
|
+
*
|
|
422
|
+
* // Without framework components
|
|
423
|
+
* <NavbarLogo
|
|
424
|
+
* href="/"
|
|
425
|
+
* imageSrc="/logo.png"
|
|
426
|
+
* imageAlt="My Brand"
|
|
427
|
+
* text="My Brand"
|
|
428
|
+
* />
|
|
429
|
+
* ```
|
|
430
|
+
*/
|
|
431
|
+
declare function NavbarLogo({ href, imageSrc, imageAlt, text, imageWidth, imageHeight, invertInDarkMode, className, imageClassName, textClassName, LinkComponent, ImageComponent, }: NavbarLogoProps): react_jsx_runtime.JSX.Element;
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* User data for the navbar menu
|
|
435
|
+
*/
|
|
436
|
+
interface NavbarUser {
|
|
437
|
+
/** User ID (used for avatar gradient) */
|
|
438
|
+
id: string;
|
|
439
|
+
/** User email */
|
|
440
|
+
email?: string | null;
|
|
441
|
+
/** User metadata from OAuth provider */
|
|
442
|
+
metadata?: {
|
|
443
|
+
full_name?: string;
|
|
444
|
+
name?: string;
|
|
445
|
+
picture?: string;
|
|
446
|
+
avatar_url?: string;
|
|
447
|
+
[key: string]: unknown;
|
|
448
|
+
};
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Profile data that overrides OAuth metadata
|
|
452
|
+
*/
|
|
453
|
+
interface NavbarUserProfile {
|
|
454
|
+
firstName?: string | null;
|
|
455
|
+
lastName?: string | null;
|
|
456
|
+
first_name?: string | null;
|
|
457
|
+
last_name?: string | null;
|
|
458
|
+
avatarUrl?: string | null;
|
|
459
|
+
avatar_url?: string | null;
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Menu item for the user dropdown
|
|
463
|
+
*/
|
|
464
|
+
interface NavbarUserMenuItem {
|
|
465
|
+
/** Display label */
|
|
466
|
+
label: string;
|
|
467
|
+
/** Icon component */
|
|
468
|
+
icon?: LucideIcon;
|
|
469
|
+
/** Link destination (mutually exclusive with onClick) */
|
|
470
|
+
href?: string;
|
|
471
|
+
/** Click handler (mutually exclusive with href) */
|
|
472
|
+
onClick?: () => void;
|
|
473
|
+
/** Whether this is a destructive action (shown in red) */
|
|
474
|
+
destructive?: boolean;
|
|
475
|
+
/** Whether to show a separator before this item */
|
|
476
|
+
separatorBefore?: boolean;
|
|
477
|
+
}
|
|
478
|
+
interface NavbarUserMenuProps {
|
|
479
|
+
/** User data */
|
|
480
|
+
user: NavbarUser;
|
|
481
|
+
/** Profile data (overrides OAuth metadata) */
|
|
482
|
+
profile?: NavbarUserProfile | null;
|
|
483
|
+
/** Whether profile is loading */
|
|
484
|
+
loading?: boolean;
|
|
485
|
+
/** Sign out handler */
|
|
486
|
+
onSignOut: () => void | Promise<void>;
|
|
487
|
+
/** Additional menu items (sign out is always added at the end) */
|
|
488
|
+
additionalItems?: NavbarUserMenuItem[];
|
|
489
|
+
/** Avatar size */
|
|
490
|
+
size?: "sm" | "md" | "lg";
|
|
491
|
+
/** Menu alignment */
|
|
492
|
+
align?: "start" | "center" | "end";
|
|
493
|
+
/** Link component for client-side navigation */
|
|
494
|
+
LinkComponent?: ComponentType<{
|
|
495
|
+
href: string;
|
|
496
|
+
className?: string;
|
|
497
|
+
children: ReactNode;
|
|
498
|
+
}>;
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Navbar user menu with avatar, loading state, and OAuth metadata handling.
|
|
502
|
+
* Automatically parses user metadata from various OAuth providers (Google, GitHub, etc.)
|
|
503
|
+
* and shows a dropdown menu with configurable items.
|
|
504
|
+
*
|
|
505
|
+
* @example
|
|
506
|
+
* ```tsx
|
|
507
|
+
* <NavbarUserMenu
|
|
508
|
+
* user={{ id: user.id, email: user.email, metadata: user.user_metadata }}
|
|
509
|
+
* profile={profile}
|
|
510
|
+
* loading={profileLoading}
|
|
511
|
+
* onSignOut={handleSignOut}
|
|
512
|
+
* additionalItems={[
|
|
513
|
+
* { label: "Settings", icon: Settings, href: "/settings" },
|
|
514
|
+
* ]}
|
|
515
|
+
* LinkComponent={Link}
|
|
516
|
+
* />
|
|
517
|
+
* ```
|
|
518
|
+
*/
|
|
519
|
+
declare function NavbarUserMenu({ user, profile, loading, onSignOut, additionalItems, size, align, LinkComponent, }: NavbarUserMenuProps): react_jsx_runtime.JSX.Element;
|
|
520
|
+
|
|
521
|
+
interface NonprofitFooterPresetLink {
|
|
522
|
+
href: string;
|
|
523
|
+
label: string;
|
|
524
|
+
external?: boolean;
|
|
525
|
+
}
|
|
526
|
+
interface NonprofitFooterPresetProps {
|
|
527
|
+
logo?: ReactNode;
|
|
528
|
+
tagline?: ReactNode;
|
|
529
|
+
supportTitle?: string;
|
|
530
|
+
supportLinks?: NonprofitFooterPresetLink[];
|
|
531
|
+
legalTitle?: string;
|
|
532
|
+
legalLinks?: NonprofitFooterPresetLink[];
|
|
533
|
+
socialLinks?: FooterProps["socialLinks"];
|
|
534
|
+
newsletter?: FooterProps["newsletter"];
|
|
535
|
+
copyright?: string;
|
|
536
|
+
bottomContent?: ReactNode;
|
|
537
|
+
className?: string;
|
|
538
|
+
containerClassName?: string;
|
|
539
|
+
}
|
|
540
|
+
declare function NonprofitFooterPreset({ logo, tagline, supportTitle, supportLinks, legalTitle, legalLinks, socialLinks, newsletter, copyright, bottomContent, className, containerClassName, }: NonprofitFooterPresetProps): react_jsx_runtime.JSX.Element;
|
|
541
|
+
|
|
542
|
+
type SegmentedSwitcherMatchMode = "exact" | "prefix";
|
|
543
|
+
interface SegmentedSwitcherItem {
|
|
544
|
+
id: string;
|
|
545
|
+
label: ReactNode;
|
|
546
|
+
disabled?: boolean;
|
|
547
|
+
href?: string;
|
|
548
|
+
match?: SegmentedSwitcherMatchMode;
|
|
549
|
+
}
|
|
550
|
+
interface SegmentedSwitcherProps {
|
|
551
|
+
items: SegmentedSwitcherItem[];
|
|
552
|
+
value?: string;
|
|
553
|
+
defaultValue?: string;
|
|
554
|
+
onValueChange?: (id: string) => void;
|
|
555
|
+
variant?: "investor" | "admin";
|
|
556
|
+
showTrackBorder?: boolean;
|
|
557
|
+
showTrackBackground?: boolean;
|
|
558
|
+
ariaLabel?: string;
|
|
559
|
+
className?: string;
|
|
560
|
+
}
|
|
561
|
+
interface RouteSegmentedSwitcherItem extends SegmentedSwitcherItem {
|
|
562
|
+
href: string;
|
|
563
|
+
enabled?: boolean;
|
|
564
|
+
}
|
|
565
|
+
interface RouteSegmentedSwitcherProps {
|
|
566
|
+
items: RouteSegmentedSwitcherItem[];
|
|
567
|
+
pathname?: string;
|
|
568
|
+
value?: string;
|
|
569
|
+
onValueChange?: (id: string) => void;
|
|
570
|
+
LinkComponent?: ComponentType<{
|
|
571
|
+
href: string;
|
|
572
|
+
className?: string;
|
|
573
|
+
children: ReactNode;
|
|
574
|
+
onClick?: MouseEventHandler<HTMLAnchorElement>;
|
|
575
|
+
"aria-current"?: "page";
|
|
576
|
+
"aria-disabled"?: boolean;
|
|
577
|
+
tabIndex?: number;
|
|
578
|
+
"data-slot"?: string;
|
|
579
|
+
"data-active"?: "true";
|
|
580
|
+
"data-disabled"?: "true";
|
|
581
|
+
}>;
|
|
582
|
+
variant?: "investor" | "admin";
|
|
583
|
+
showTrackBorder?: boolean;
|
|
584
|
+
showTrackBackground?: boolean;
|
|
585
|
+
ariaLabel?: string;
|
|
586
|
+
className?: string;
|
|
587
|
+
}
|
|
588
|
+
declare function SegmentedSwitcher({ items, value, defaultValue, onValueChange, variant, showTrackBorder, showTrackBackground, ariaLabel, className, }: SegmentedSwitcherProps): react_jsx_runtime.JSX.Element | null;
|
|
589
|
+
declare function RouteSegmentedSwitcher({ pathname, ...props }: RouteSegmentedSwitcherProps): react_jsx_runtime.JSX.Element;
|
|
590
|
+
|
|
591
|
+
export { type AppDefinition, AppSwitcher, type AppSwitcherProps, ComingSoonButton, type ComingSoonButtonProps, type Entity, EntitySwitcher, type EntitySwitcherProps, type EntitySwitcherShortcut, Footer, type FooterLinkGroup, type FooterProps, MarketingHeaderPreset, type MarketingHeaderPresetCta, type MarketingHeaderPresetProps, type NavLink, Navbar, NavbarLogo, type NavbarLogoProps, type NavbarMenuClassNames, type NavbarMenuGroup, type NavbarProps, type NavbarUser, NavbarUserMenu, type NavbarUserMenuItem, type NavbarUserMenuProps, type NavbarUserProfile, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NavigationMenuViewportPrimitive, NonprofitFooterPreset, type NonprofitFooterPresetLink, type NonprofitFooterPresetProps, RouteSegmentedSwitcher, type RouteSegmentedSwitcherItem, type RouteSegmentedSwitcherProps, SegmentedSwitcher, type SegmentedSwitcherItem, type SegmentedSwitcherMatchMode, type SegmentedSwitcherProps, navigationMenuTriggerStyle };
|