pelatform-ui 1.3.0 → 1.4.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/css/styles/style-lyra.css +16 -7
- package/css/styles/style-maia.css +15 -10
- package/css/styles/style-mira.css +16 -7
- package/css/styles/style-nova.css +11 -6
- package/css/styles/style-vega.css +11 -6
- package/css/theme.css +5 -0
- package/dist/animation.js +102 -287
- package/dist/badge-CnQznr5B.d.ts +16 -0
- package/dist/base.d.ts +111 -24
- package/dist/base.js +2176 -1254
- package/dist/button-Bc3N6jWT.d.ts +22 -0
- package/dist/chunk-4Z3DBWB6.js +193 -0
- package/dist/chunk-V3ET2B55.js +53 -0
- package/dist/chunk-Z4CHIWTI.js +863 -0
- package/dist/components.d.ts +1014 -2
- package/dist/components.js +930 -1
- package/dist/hooks.js +14 -59
- package/dist/index.d.ts +48 -1
- package/dist/radix.d.ts +125 -50
- package/dist/radix.js +2822 -2635
- package/package.json +12 -10
package/dist/components.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import
|
|
2
|
+
import * as React$1 from 'react';
|
|
3
|
+
import React__default, { ReactNode, ComponentProps } from 'react';
|
|
4
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
5
|
+
import { ThemeProvider as ThemeProvider$1 } from 'next-themes';
|
|
6
|
+
import { A as Alert, B as Button } from './button-Bc3N6jWT.js';
|
|
7
|
+
import { B as Badge } from './badge-CnQznr5B.js';
|
|
8
|
+
import { ThemeMode } from '@pelatform/utils';
|
|
9
|
+
import 'class-variance-authority/types';
|
|
10
|
+
import 'class-variance-authority';
|
|
3
11
|
|
|
4
12
|
/**
|
|
5
13
|
* Props interface for icon components
|
|
@@ -127,4 +135,1008 @@ declare function Logo({ className }: {
|
|
|
127
135
|
className?: string;
|
|
128
136
|
}): react_jsx_runtime.JSX.Element;
|
|
129
137
|
|
|
130
|
-
|
|
138
|
+
/**
|
|
139
|
+
* Main Navigation Component
|
|
140
|
+
* Provides a responsive navigation menu with dropdown support, active state detection,
|
|
141
|
+
* and analytics tracking for user interactions
|
|
142
|
+
*/
|
|
143
|
+
/**
|
|
144
|
+
* Interface defining the structure of a navigation item
|
|
145
|
+
*/
|
|
146
|
+
interface NavItem {
|
|
147
|
+
/** Display text for the navigation item */
|
|
148
|
+
title: string;
|
|
149
|
+
/** URL path for the navigation item */
|
|
150
|
+
href?: string;
|
|
151
|
+
/** Whether the link opens in a new tab */
|
|
152
|
+
external?: boolean;
|
|
153
|
+
/** Optional icon to display alongside the title */
|
|
154
|
+
icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;
|
|
155
|
+
/** Child navigation items for dropdown menus */
|
|
156
|
+
children?: NavItem[];
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Props interface for the MainNav component
|
|
160
|
+
*/
|
|
161
|
+
interface NavigationProps {
|
|
162
|
+
/** Current pathname */
|
|
163
|
+
pathname: string;
|
|
164
|
+
/** Array of navigation items to display */
|
|
165
|
+
items: NavItem[];
|
|
166
|
+
/** Additional CSS classes for the navigation container */
|
|
167
|
+
className?: string;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* MainNav Component
|
|
171
|
+
*
|
|
172
|
+
* A responsive navigation component that supports multi-level dropdown menus,
|
|
173
|
+
* active state detection, and analytics tracking. Hidden on mobile devices
|
|
174
|
+
* and typically used in the site header.
|
|
175
|
+
*
|
|
176
|
+
* Features:
|
|
177
|
+
* - Multi-level dropdown menus (up to 3 levels)
|
|
178
|
+
* - Active state detection for current page
|
|
179
|
+
* - External link indicators
|
|
180
|
+
* - Analytics tracking for menu interactions
|
|
181
|
+
* - Responsive design (hidden on mobile)
|
|
182
|
+
* - Keyboard navigation support
|
|
183
|
+
*
|
|
184
|
+
* @param props - Component props
|
|
185
|
+
* @returns JSX element containing the navigation menu
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* ```tsx
|
|
189
|
+
* const navItems: NavItem[] = [
|
|
190
|
+
* {
|
|
191
|
+
* title: 'Home',
|
|
192
|
+
* href: '/',
|
|
193
|
+
* },
|
|
194
|
+
* {
|
|
195
|
+
* title: 'Products',
|
|
196
|
+
* children: [
|
|
197
|
+
* { title: 'Web Apps', href: '/products/web' },
|
|
198
|
+
* { title: 'Mobile Apps', href: '/products/mobile' },
|
|
199
|
+
* {
|
|
200
|
+
* title: 'Enterprise',
|
|
201
|
+
* children: [
|
|
202
|
+
* { title: 'SaaS Solutions', href: '/products/enterprise/saas' },
|
|
203
|
+
* { title: 'Custom Development', href: '/products/enterprise/custom' }
|
|
204
|
+
* ]
|
|
205
|
+
* }
|
|
206
|
+
* ]
|
|
207
|
+
* },
|
|
208
|
+
* {
|
|
209
|
+
* title: 'Documentation',
|
|
210
|
+
* href: 'https://docs.example.com',
|
|
211
|
+
* external: true,
|
|
212
|
+
* icon: <IconBook className="w-4 h-4" />
|
|
213
|
+
* }
|
|
214
|
+
* ];
|
|
215
|
+
*
|
|
216
|
+
* <MainNav items={navItems} />
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
219
|
+
declare function MainNav({ pathname, items, className }: NavigationProps): react_jsx_runtime.JSX.Element;
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* MobileNav Component
|
|
223
|
+
*
|
|
224
|
+
* A mobile-optimized navigation component that uses a drawer interface
|
|
225
|
+
* for space-efficient menu display on small screens. Automatically
|
|
226
|
+
* manages meta theme color changes when the drawer opens/closes.
|
|
227
|
+
*
|
|
228
|
+
* Features:
|
|
229
|
+
* - Drawer-based interface for mobile screens
|
|
230
|
+
* - Meta theme color management
|
|
231
|
+
* - Responsive design (hidden on desktop)
|
|
232
|
+
* - Accessible with proper ARIA labels
|
|
233
|
+
* - Smooth open/close animations
|
|
234
|
+
* - Scrollable content area
|
|
235
|
+
*
|
|
236
|
+
* @param props - Component props
|
|
237
|
+
* @returns JSX element containing the mobile navigation drawer
|
|
238
|
+
*
|
|
239
|
+
* @example
|
|
240
|
+
* ```tsx
|
|
241
|
+
* // Basic usage with navigation items
|
|
242
|
+
* <MobileNav>
|
|
243
|
+
* <div className="space-y-4">
|
|
244
|
+
* <MobileNavItemRenderer
|
|
245
|
+
* item={{ title: 'Home', href: '/' }}
|
|
246
|
+
* onOpenChange={setOpen}
|
|
247
|
+
* level={1}
|
|
248
|
+
* />
|
|
249
|
+
* <MobileNavItemRenderer
|
|
250
|
+
* item={{
|
|
251
|
+
* title: 'Products',
|
|
252
|
+
* children: [
|
|
253
|
+
* { title: 'Web Apps', href: '/products/web' },
|
|
254
|
+
* { title: 'Mobile Apps', href: '/products/mobile' }
|
|
255
|
+
* ]
|
|
256
|
+
* }}
|
|
257
|
+
* onOpenChange={setOpen}
|
|
258
|
+
* level={1}
|
|
259
|
+
* />
|
|
260
|
+
* </div>
|
|
261
|
+
* </MobileNav>
|
|
262
|
+
*
|
|
263
|
+
* // With custom content
|
|
264
|
+
* <MobileNav className="border-l border-gray-200">
|
|
265
|
+
* <div className="space-y-6">
|
|
266
|
+
* <NavigationItems />
|
|
267
|
+
* <UserProfile />
|
|
268
|
+
* <ThemeToggle />
|
|
269
|
+
* </div>
|
|
270
|
+
* </MobileNav>
|
|
271
|
+
* ```
|
|
272
|
+
*/
|
|
273
|
+
declare function MobileNav({ children, className }: {
|
|
274
|
+
children: ReactNode;
|
|
275
|
+
className?: string;
|
|
276
|
+
}): react_jsx_runtime.JSX.Element;
|
|
277
|
+
interface MobileNavItemRendererProps {
|
|
278
|
+
item: NavItem;
|
|
279
|
+
pathname: string | null;
|
|
280
|
+
level: number;
|
|
281
|
+
onOpenChange: (open: boolean) => void;
|
|
282
|
+
}
|
|
283
|
+
declare function MobileNavItemRenderer({ item, pathname, level, onOpenChange, }: MobileNavItemRendererProps): react_jsx_runtime.JSX.Element;
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* SiteFooter Component
|
|
287
|
+
*
|
|
288
|
+
* A responsive footer component that provides consistent styling
|
|
289
|
+
* and layout for site-wide footer content. Features a top border,
|
|
290
|
+
* responsive padding, and flexible content arrangement.
|
|
291
|
+
*
|
|
292
|
+
* Features:
|
|
293
|
+
* - Responsive design (stacked on mobile, horizontal on desktop)
|
|
294
|
+
* - Consistent container width and padding
|
|
295
|
+
* - Top border for visual separation
|
|
296
|
+
* - Flexible content arrangement
|
|
297
|
+
* - Semantic footer element
|
|
298
|
+
*
|
|
299
|
+
* @param props - Component props
|
|
300
|
+
* @returns JSX element containing the site footer
|
|
301
|
+
*
|
|
302
|
+
* @example
|
|
303
|
+
* ```tsx
|
|
304
|
+
* // Basic usage with copyright and links
|
|
305
|
+
* <SiteFooter>
|
|
306
|
+
* <div className="flex flex-col items-center gap-4 md:flex-row">
|
|
307
|
+
* <p className="text-sm text-muted-foreground">
|
|
308
|
+
* © 2024 Your Company. All rights reserved.
|
|
309
|
+
* </p>
|
|
310
|
+
* <nav className="flex gap-4">
|
|
311
|
+
* <Link href="/privacy" className="text-sm hover:underline">
|
|
312
|
+
* Privacy Policy
|
|
313
|
+
* </Link>
|
|
314
|
+
* <Link href="/terms" className="text-sm hover:underline">
|
|
315
|
+
* Terms of Service
|
|
316
|
+
* </Link>
|
|
317
|
+
* </nav>
|
|
318
|
+
* </div>
|
|
319
|
+
* </SiteFooter>
|
|
320
|
+
*
|
|
321
|
+
* // With social links and newsletter
|
|
322
|
+
* <SiteFooter>
|
|
323
|
+
* <div className="text-sm text-muted-foreground">
|
|
324
|
+
* © 2024 Your Company
|
|
325
|
+
* </div>
|
|
326
|
+
* <div className="flex items-center gap-4">
|
|
327
|
+
* <SocialLinks />
|
|
328
|
+
* <NewsletterSignup />
|
|
329
|
+
* </div>
|
|
330
|
+
* </SiteFooter>
|
|
331
|
+
*
|
|
332
|
+
* // Custom styling
|
|
333
|
+
* <SiteFooter className="bg-gray-50 dark:bg-gray-900">
|
|
334
|
+
* <FooterContent />
|
|
335
|
+
* </SiteFooter>
|
|
336
|
+
* ```
|
|
337
|
+
*/
|
|
338
|
+
declare function SiteFooter({ children, className }: {
|
|
339
|
+
children: ReactNode;
|
|
340
|
+
className?: string;
|
|
341
|
+
}): react_jsx_runtime.JSX.Element;
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* SiteHeader Component
|
|
345
|
+
*
|
|
346
|
+
* A sticky header component with modern styling including backdrop blur,
|
|
347
|
+
* semi-transparent background, and responsive design. Positioned at the
|
|
348
|
+
* top of the viewport with high z-index for proper layering.
|
|
349
|
+
*
|
|
350
|
+
* Features:
|
|
351
|
+
* - Sticky positioning at top of viewport
|
|
352
|
+
* - Backdrop blur effect for modern appearance
|
|
353
|
+
* - Semi-transparent background with fallback
|
|
354
|
+
* - Bottom border for visual separation
|
|
355
|
+
* - Responsive container with consistent spacing
|
|
356
|
+
* - High z-index for proper layering
|
|
357
|
+
* - Dark mode support
|
|
358
|
+
*
|
|
359
|
+
* @param props - Component props
|
|
360
|
+
* @returns JSX element containing the site header
|
|
361
|
+
*
|
|
362
|
+
* @example
|
|
363
|
+
* ```tsx
|
|
364
|
+
* // Basic usage with logo and navigation
|
|
365
|
+
* <SiteHeader>
|
|
366
|
+
* <div className="flex items-center gap-4">
|
|
367
|
+
* <Logo />
|
|
368
|
+
* <MainNav items={navItems} />
|
|
369
|
+
* </div>
|
|
370
|
+
* <div className="flex items-center gap-2">
|
|
371
|
+
* <ThemeToggle />
|
|
372
|
+
* <UserMenu />
|
|
373
|
+
* </div>
|
|
374
|
+
* </SiteHeader>
|
|
375
|
+
*
|
|
376
|
+
* // With mobile navigation
|
|
377
|
+
* <SiteHeader>
|
|
378
|
+
* <div className="flex items-center gap-4">
|
|
379
|
+
* <MobileNav>
|
|
380
|
+
* <MobileNavItems />
|
|
381
|
+
* </MobileNav>
|
|
382
|
+
* <Logo />
|
|
383
|
+
* <MainNav items={navItems} className="hidden md:flex" />
|
|
384
|
+
* </div>
|
|
385
|
+
* <HeaderActions />
|
|
386
|
+
* </SiteHeader>
|
|
387
|
+
*
|
|
388
|
+
* // Custom styling
|
|
389
|
+
* <SiteHeader className="bg-white/80 border-gray-200">
|
|
390
|
+
* <HeaderContent />
|
|
391
|
+
* </SiteHeader>
|
|
392
|
+
* ```
|
|
393
|
+
*/
|
|
394
|
+
declare function SiteHeader({ children, className }: {
|
|
395
|
+
children: ReactNode;
|
|
396
|
+
className?: string;
|
|
397
|
+
}): react_jsx_runtime.JSX.Element;
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* React Query provider component with optimized configuration
|
|
401
|
+
*
|
|
402
|
+
* This provider sets up TanStack Query with:
|
|
403
|
+
* - Global error handling with toast notifications
|
|
404
|
+
* - Optimized caching and retry strategies
|
|
405
|
+
* - Background refetching configuration
|
|
406
|
+
* - Stale time and garbage collection settings
|
|
407
|
+
*
|
|
408
|
+
* @param props - Component props containing children
|
|
409
|
+
* @returns JSX element wrapping children with QueryClient context
|
|
410
|
+
*
|
|
411
|
+
* @example
|
|
412
|
+
* ```tsx
|
|
413
|
+
* // Wrap your app with QueryProvider
|
|
414
|
+
* function App() {
|
|
415
|
+
* return (
|
|
416
|
+
* <QueryProvider>
|
|
417
|
+
* <YourAppComponents />
|
|
418
|
+
* </QueryProvider>
|
|
419
|
+
* );
|
|
420
|
+
* }
|
|
421
|
+
*
|
|
422
|
+
* // Use React Query hooks in child components
|
|
423
|
+
* function UserProfile() {
|
|
424
|
+
* const { data, isLoading, error } = useQuery({
|
|
425
|
+
* queryKey: ['user', userId],
|
|
426
|
+
* queryFn: () => fetchUser(userId)
|
|
427
|
+
* });
|
|
428
|
+
*
|
|
429
|
+
* if (isLoading) return <div>Loading...</div>;
|
|
430
|
+
* if (error) return <div>Error occurred</div>; // Error toast will show automatically
|
|
431
|
+
*
|
|
432
|
+
* return <div>{data.name}</div>;
|
|
433
|
+
* }
|
|
434
|
+
* ```
|
|
435
|
+
*/
|
|
436
|
+
declare const QueryProvider: ({ client: clientProps, children, }: {
|
|
437
|
+
client?: QueryClient;
|
|
438
|
+
children: ReactNode;
|
|
439
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
440
|
+
|
|
441
|
+
/**
|
|
442
|
+
* Props interface for ThemeProvider component
|
|
443
|
+
* Extends NextThemesProvider props for full compatibility
|
|
444
|
+
*/
|
|
445
|
+
interface ThemeProviderProps extends React$1.ComponentProps<typeof ThemeProvider$1> {
|
|
446
|
+
/** Child components that will have access to theme context */
|
|
447
|
+
children: React$1.ReactNode;
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Application theme provider component
|
|
451
|
+
*
|
|
452
|
+
* This provider sets up theme management with:
|
|
453
|
+
* - Light, dark, and system theme support
|
|
454
|
+
* - Automatic system preference detection
|
|
455
|
+
* - Smooth theme transitions
|
|
456
|
+
* - Integration with tooltip provider
|
|
457
|
+
* - CSS class-based theme switching
|
|
458
|
+
*
|
|
459
|
+
* The provider integrates with the application's theme configuration
|
|
460
|
+
* and provides a consistent theming experience across all components.
|
|
461
|
+
*
|
|
462
|
+
* @param props - Component props extending NextThemesProvider props
|
|
463
|
+
* @returns JSX element wrapping children with theme and tooltip context
|
|
464
|
+
*
|
|
465
|
+
* @example
|
|
466
|
+
* ```tsx
|
|
467
|
+
* // Basic usage - wrap your app root
|
|
468
|
+
* function App() {
|
|
469
|
+
* return (
|
|
470
|
+
* <ThemeProvider>
|
|
471
|
+
* <YourAppComponents />
|
|
472
|
+
* </ThemeProvider>
|
|
473
|
+
* );
|
|
474
|
+
* }
|
|
475
|
+
*
|
|
476
|
+
* // With custom configuration
|
|
477
|
+
* function App() {
|
|
478
|
+
* return (
|
|
479
|
+
* <ThemeProvider
|
|
480
|
+
* defaultTheme="dark"
|
|
481
|
+
* storageKey="custom-theme"
|
|
482
|
+
* >
|
|
483
|
+
* <YourAppComponents />
|
|
484
|
+
* </ThemeProvider>
|
|
485
|
+
* );
|
|
486
|
+
* }
|
|
487
|
+
*
|
|
488
|
+
* // Use theme in child components
|
|
489
|
+
* function ThemeToggle() {
|
|
490
|
+
* const { theme, setTheme } = useTheme();
|
|
491
|
+
*
|
|
492
|
+
* return (
|
|
493
|
+
* <select value={theme} onChange={(e) => setTheme(e.target.value)}>
|
|
494
|
+
* <option value="light">Light</option>
|
|
495
|
+
* <option value="dark">Dark</option>
|
|
496
|
+
* <option value="system">System</option>
|
|
497
|
+
* </select>
|
|
498
|
+
* );
|
|
499
|
+
* }
|
|
500
|
+
* ```
|
|
501
|
+
*/
|
|
502
|
+
declare function ThemeProvider({ children, ...props }: ThemeProviderProps): react_jsx_runtime.JSX.Element;
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
* Configuration options for the alert toast notification
|
|
506
|
+
*/
|
|
507
|
+
interface AlertToastOptions {
|
|
508
|
+
/** Custom message to display in the toast */
|
|
509
|
+
message?: string;
|
|
510
|
+
/** Icon variant to display in the alert - determines which icon is shown */
|
|
511
|
+
icon?: "primary" | "destructive" | "success" | "info" | "warning";
|
|
512
|
+
/** Visual variant of the alert component - affects styling and colors */
|
|
513
|
+
variant?: ComponentProps<typeof Alert>["variant"];
|
|
514
|
+
}
|
|
515
|
+
/**
|
|
516
|
+
* Creates and displays a customizable alert toast notification
|
|
517
|
+
*
|
|
518
|
+
* @param options - Configuration options for the toast
|
|
519
|
+
* @param options.message - The message to display (default: 'This is a toast')
|
|
520
|
+
* @param options.icon - The icon variant to show (default: 'success')
|
|
521
|
+
* @param options.variant - The visual style variant (default: 'default')
|
|
522
|
+
*
|
|
523
|
+
* @example
|
|
524
|
+
* ```tsx
|
|
525
|
+
* // Show a success message
|
|
526
|
+
* AlertToast({ message: 'Data saved successfully!' });
|
|
527
|
+
*
|
|
528
|
+
* // Show an error message
|
|
529
|
+
* AlertToast({
|
|
530
|
+
* message: 'Failed to save data',
|
|
531
|
+
* icon: 'destructive',
|
|
532
|
+
* variant: 'destructive'
|
|
533
|
+
* });
|
|
534
|
+
* ```
|
|
535
|
+
*/
|
|
536
|
+
declare function AlertToast({ message, icon, variant, }: AlertToastOptions): void;
|
|
537
|
+
/**
|
|
538
|
+
* Alert Notification Component
|
|
539
|
+
*
|
|
540
|
+
* Renders a static alert notification with appropriate icon and styling
|
|
541
|
+
* based on the variant. This component is used for displaying persistent
|
|
542
|
+
* alerts that don't auto-dismiss like toast notifications.
|
|
543
|
+
*
|
|
544
|
+
* @param props - Component props
|
|
545
|
+
* @param props.message - The message to display in the alert
|
|
546
|
+
* @param props.variant - The visual style variant (default: 'info')
|
|
547
|
+
*
|
|
548
|
+
* @returns JSX element or null if no message is provided
|
|
549
|
+
*
|
|
550
|
+
* @example
|
|
551
|
+
* ```tsx
|
|
552
|
+
* // Basic info alert
|
|
553
|
+
* <AlertNotification message="Please verify your email address" />
|
|
554
|
+
*
|
|
555
|
+
* // Error alert
|
|
556
|
+
* <AlertNotification
|
|
557
|
+
* message="Failed to load data"
|
|
558
|
+
* variant="destructive"
|
|
559
|
+
* />
|
|
560
|
+
*
|
|
561
|
+
* // Success alert
|
|
562
|
+
* <AlertNotification
|
|
563
|
+
* message="Profile updated successfully"
|
|
564
|
+
* variant="success"
|
|
565
|
+
* />
|
|
566
|
+
*
|
|
567
|
+
* // Warning alert
|
|
568
|
+
* <AlertNotification
|
|
569
|
+
* message="Your session will expire soon"
|
|
570
|
+
* variant="warning"
|
|
571
|
+
* />
|
|
572
|
+
* ```
|
|
573
|
+
*/
|
|
574
|
+
declare function AlertNotification({ message, variant }: AlertToastOptions): react_jsx_runtime.JSX.Element | null;
|
|
575
|
+
/**
|
|
576
|
+
* Displays a standardized "coming soon" toast notification
|
|
577
|
+
*
|
|
578
|
+
* This function creates a consistent user experience for features that are
|
|
579
|
+
* not yet implemented. It uses a custom toast with alert styling to inform
|
|
580
|
+
* users that the feature they're trying to access is under development.
|
|
581
|
+
*
|
|
582
|
+
* @param options - Configuration options for the toast appearance and message
|
|
583
|
+
*
|
|
584
|
+
* @example
|
|
585
|
+
* ```tsx
|
|
586
|
+
* // Basic usage with default message
|
|
587
|
+
* AlertComingsoon();
|
|
588
|
+
*
|
|
589
|
+
* // Custom message with warning variant
|
|
590
|
+
* AlertComingsoon({
|
|
591
|
+
* message: 'Advanced analytics coming in Q2 2024',
|
|
592
|
+
* icon: 'warning',
|
|
593
|
+
* variant: 'warning'
|
|
594
|
+
* });
|
|
595
|
+
*
|
|
596
|
+
* // Success variant for positive messaging
|
|
597
|
+
* AlertComingsoon({
|
|
598
|
+
* message: 'New dashboard features are on the way!',
|
|
599
|
+
* icon: 'success',
|
|
600
|
+
* variant: 'success'
|
|
601
|
+
* });
|
|
602
|
+
*
|
|
603
|
+
* // Use in event handlers
|
|
604
|
+
* const handlePremiumFeature = () => {
|
|
605
|
+
* AlertComingsoon({
|
|
606
|
+
* message: 'Premium features available soon',
|
|
607
|
+
* icon: 'info',
|
|
608
|
+
* variant: 'info'
|
|
609
|
+
* });
|
|
610
|
+
* };
|
|
611
|
+
* ```
|
|
612
|
+
*/
|
|
613
|
+
declare const AlertComingsoon: ({ message, variant, }?: AlertToastOptions) => void;
|
|
614
|
+
|
|
615
|
+
/**
|
|
616
|
+
* Coming Soon Component
|
|
617
|
+
* Displays a full-height section with an animated hover background and
|
|
618
|
+
* optional title and description. Ideal for placeholder pages or upcoming
|
|
619
|
+
* feature announcements.
|
|
620
|
+
*/
|
|
621
|
+
/**
|
|
622
|
+
* Props interface for the `ComingSoon` component
|
|
623
|
+
*/
|
|
624
|
+
interface ComingSoonProps {
|
|
625
|
+
/** Additional CSS classes for the wrapper */
|
|
626
|
+
className?: string;
|
|
627
|
+
/** Optional highlighted title text */
|
|
628
|
+
title?: string;
|
|
629
|
+
/** Optional descriptive text below the title */
|
|
630
|
+
description?: string;
|
|
631
|
+
}
|
|
632
|
+
/**
|
|
633
|
+
* ComingSoon Component
|
|
634
|
+
*
|
|
635
|
+
* Renders a full-height container with animated hover background objects
|
|
636
|
+
* and optional title/description content centered on the screen.
|
|
637
|
+
*
|
|
638
|
+
* @param props - Component props
|
|
639
|
+
* @returns JSX element containing the coming soon layout
|
|
640
|
+
*
|
|
641
|
+
* @example
|
|
642
|
+
* ```tsx
|
|
643
|
+
* <ComingSoon title="Coming Soon" description="We are cooking something nice." />
|
|
644
|
+
* ```
|
|
645
|
+
*/
|
|
646
|
+
declare function ComingSoon({ className, title, description }: ComingSoonProps): react_jsx_runtime.JSX.Element;
|
|
647
|
+
|
|
648
|
+
/**
|
|
649
|
+
* Confirm Dismiss Dialog Component
|
|
650
|
+
* Provides a reusable confirmation dialog for destructive actions like discarding changes
|
|
651
|
+
* Built on top of AlertDialog with customizable content and actions
|
|
652
|
+
*/
|
|
653
|
+
/**
|
|
654
|
+
* Props interface for the ConfirmDismissDialog component
|
|
655
|
+
*/
|
|
656
|
+
interface ConfirmDismissDialogProps {
|
|
657
|
+
/** Whether the dialog is open */
|
|
658
|
+
open: boolean;
|
|
659
|
+
/** Callback to handle dialog open state changes */
|
|
660
|
+
onOpenChange: (open: boolean) => void;
|
|
661
|
+
/** Callback executed when user confirms the action */
|
|
662
|
+
onConfirm: () => void;
|
|
663
|
+
/** Optional callback executed when user cancels (defaults to closing dialog) */
|
|
664
|
+
onCancel?: () => void;
|
|
665
|
+
/** Dialog title text (defaults to "Discard changes?") */
|
|
666
|
+
title?: string;
|
|
667
|
+
/** Dialog description text (defaults to unsaved changes message) */
|
|
668
|
+
description?: string;
|
|
669
|
+
/** Confirm button text (defaults to "Discard changes") */
|
|
670
|
+
confirmText?: string;
|
|
671
|
+
/** Cancel button text (defaults to "Cancel") */
|
|
672
|
+
cancelText?: string;
|
|
673
|
+
/** CSS class for maximum width (defaults to "md:max-w-[375px]") */
|
|
674
|
+
maxWidth?: string;
|
|
675
|
+
}
|
|
676
|
+
/**
|
|
677
|
+
* Reusable confirmation dialog for destructive actions
|
|
678
|
+
*
|
|
679
|
+
* This component provides a standardized way to confirm destructive actions
|
|
680
|
+
* like discarding unsaved changes, deleting items, or leaving forms.
|
|
681
|
+
* It includes customizable text and handles both confirm and cancel actions.
|
|
682
|
+
*
|
|
683
|
+
* @param props - Component props for dialog configuration
|
|
684
|
+
* @returns JSX element containing the confirmation dialog
|
|
685
|
+
*
|
|
686
|
+
* @example
|
|
687
|
+
* ```tsx
|
|
688
|
+
* // Basic usage for form dismissal
|
|
689
|
+
* function FormComponent() {
|
|
690
|
+
* const [showDialog, setShowDialog] = useState(false);
|
|
691
|
+
* const [hasChanges, setHasChanges] = useState(false);
|
|
692
|
+
*
|
|
693
|
+
* const handleClose = () => {
|
|
694
|
+
* if (hasChanges) {
|
|
695
|
+
* setShowDialog(true);
|
|
696
|
+
* } else {
|
|
697
|
+
* // Close form directly
|
|
698
|
+
* onClose();
|
|
699
|
+
* }
|
|
700
|
+
* };
|
|
701
|
+
*
|
|
702
|
+
* return (
|
|
703
|
+
* <>
|
|
704
|
+
* <form>
|
|
705
|
+
* <button type="button" onClick={handleClose}>Close</button>
|
|
706
|
+
* </form>
|
|
707
|
+
*
|
|
708
|
+
* <ConfirmDismissDialog
|
|
709
|
+
* open={showDialog}
|
|
710
|
+
* onOpenChange={setShowDialog}
|
|
711
|
+
* onConfirm={() => {
|
|
712
|
+
* setShowDialog(false);
|
|
713
|
+
* onClose(); // Actually close the form
|
|
714
|
+
* }}
|
|
715
|
+
* />
|
|
716
|
+
* </>
|
|
717
|
+
* );
|
|
718
|
+
* }
|
|
719
|
+
*
|
|
720
|
+
* // Custom dialog for deletion
|
|
721
|
+
* <ConfirmDismissDialog
|
|
722
|
+
* open={showDeleteDialog}
|
|
723
|
+
* onOpenChange={setShowDeleteDialog}
|
|
724
|
+
* title="Delete item?"
|
|
725
|
+
* description="This action cannot be undone. Are you sure you want to delete this item?"
|
|
726
|
+
* confirmText="Delete"
|
|
727
|
+
* cancelText="Keep"
|
|
728
|
+
* onConfirm={handleDelete}
|
|
729
|
+
* />
|
|
730
|
+
* ```
|
|
731
|
+
*/
|
|
732
|
+
declare const ConfirmDismissDialog: ({ open, onOpenChange, onConfirm, onCancel, title, description, confirmText, cancelText, maxWidth, }: ConfirmDismissDialogProps) => react_jsx_runtime.JSX.Element;
|
|
733
|
+
|
|
734
|
+
/**
|
|
735
|
+
* Locale option used by the LanguageSwitcher
|
|
736
|
+
*/
|
|
737
|
+
interface LocaleOption {
|
|
738
|
+
/** Locale code, e.g. 'en', 'id' */
|
|
739
|
+
code: string;
|
|
740
|
+
/** Human readable language name */
|
|
741
|
+
name: string;
|
|
742
|
+
/** Optional flag code to render, e.g. 'us', 'id' */
|
|
743
|
+
flag?: string;
|
|
744
|
+
/** Optional currency code associated with the locale */
|
|
745
|
+
currency?: string;
|
|
746
|
+
}
|
|
747
|
+
/**
|
|
748
|
+
* Props for the LanguageSwitcher component (prop-driven)
|
|
749
|
+
*/
|
|
750
|
+
interface LanguageSwitcherProps {
|
|
751
|
+
/** Additional CSS classes */
|
|
752
|
+
className?: string;
|
|
753
|
+
/** UI type: standalone dropdown or submenu dropdown */
|
|
754
|
+
type?: "dropdown" | "sub-dropdown";
|
|
755
|
+
/** Button variant style (for toggle type) */
|
|
756
|
+
variant?: ComponentProps<typeof Button>["variant"];
|
|
757
|
+
/** Button size (for toggle type) */
|
|
758
|
+
size?: ComponentProps<typeof Button>["size"];
|
|
759
|
+
/** Whether to show language names */
|
|
760
|
+
showNames?: boolean;
|
|
761
|
+
/** Whether to show flag icons */
|
|
762
|
+
showFlags?: boolean;
|
|
763
|
+
/** Label text for the dropdown trigger; defaults to 'Language' */
|
|
764
|
+
label?: string;
|
|
765
|
+
/** Whether i18n is enabled; if false and <=1 locales, render null */
|
|
766
|
+
i18nEnabled?: boolean;
|
|
767
|
+
/** Current active locale code */
|
|
768
|
+
currentLocale: string;
|
|
769
|
+
/** Available locales to render */
|
|
770
|
+
locales: LocaleOption[];
|
|
771
|
+
/** Handler called when a new locale is selected */
|
|
772
|
+
onLocaleChange: (newLocale: string) => void | Promise<void>;
|
|
773
|
+
/** Custom flags asset url */
|
|
774
|
+
customFlagUrl?: boolean;
|
|
775
|
+
/** Badge variant style */
|
|
776
|
+
badgeVariant?: ComponentProps<typeof Badge>["variant"];
|
|
777
|
+
}
|
|
778
|
+
declare function LanguageSwitcher({ className, type, variant, size, showNames, showFlags, label, i18nEnabled, currentLocale, locales, onLocaleChange, customFlagUrl, badgeVariant, }: LanguageSwitcherProps): react_jsx_runtime.JSX.Element | null;
|
|
779
|
+
|
|
780
|
+
/**
|
|
781
|
+
* Props interface for the ModeSwitcher component
|
|
782
|
+
*/
|
|
783
|
+
interface ModeSwitcherProps {
|
|
784
|
+
/** Additional CSS classes for the button */
|
|
785
|
+
className?: string;
|
|
786
|
+
/** Button variant style */
|
|
787
|
+
variant?: React$1.ComponentProps<typeof Button>["variant"];
|
|
788
|
+
/** Button size */
|
|
789
|
+
size?: React$1.ComponentProps<typeof Button>["size"];
|
|
790
|
+
/** Custom cycle order for themes (defaults to system -> light -> dark) */
|
|
791
|
+
cycleOrder?: ThemeMode[];
|
|
792
|
+
/** Button type: 'toggle' for a single button or 'dropdown' and 'sub-dropdown' for a menu with options */
|
|
793
|
+
type?: "toogle" | "dropdown" | "sub-dropdown";
|
|
794
|
+
/** Labels for each theme mode (optional) */
|
|
795
|
+
label?: {
|
|
796
|
+
system?: string;
|
|
797
|
+
dark?: string;
|
|
798
|
+
light?: string;
|
|
799
|
+
};
|
|
800
|
+
}
|
|
801
|
+
/**
|
|
802
|
+
* ModeSwitcher Component
|
|
803
|
+
*
|
|
804
|
+
* A button component that cycles through available theme modes (light, dark, system).
|
|
805
|
+
* Automatically updates the meta theme color and displays appropriate icons
|
|
806
|
+
* for each theme state. Integrates with next-themes for theme persistence.
|
|
807
|
+
*
|
|
808
|
+
* Features:
|
|
809
|
+
* - Cycles through light, dark, and system themes
|
|
810
|
+
* - Updates meta theme color automatically
|
|
811
|
+
* - Shows appropriate icons for each theme
|
|
812
|
+
* - Accessible with screen reader support
|
|
813
|
+
* - Customizable appearance and cycle order
|
|
814
|
+
* - Integrates with application color configuration
|
|
815
|
+
*
|
|
816
|
+
* @param props - Component props
|
|
817
|
+
* @returns JSX element containing the theme switcher button
|
|
818
|
+
*
|
|
819
|
+
* @example
|
|
820
|
+
* ```tsx
|
|
821
|
+
* // Basic usage
|
|
822
|
+
* <ModeSwitcher />
|
|
823
|
+
*
|
|
824
|
+
* // Custom styling
|
|
825
|
+
* <ModeSwitcher
|
|
826
|
+
* className="border border-gray-300"
|
|
827
|
+
* variant="outline"
|
|
828
|
+
* size="lg"
|
|
829
|
+
* />
|
|
830
|
+
*
|
|
831
|
+
* // Custom cycle order
|
|
832
|
+
* <ModeSwitcher
|
|
833
|
+
* cycleOrder={['light', 'dark']} // Skip system mode
|
|
834
|
+
* />
|
|
835
|
+
* ```
|
|
836
|
+
*/
|
|
837
|
+
declare function ModeSwitcher({ className, variant, size, cycleOrder, type, label, }: ModeSwitcherProps): react_jsx_runtime.JSX.Element;
|
|
838
|
+
|
|
839
|
+
/**
|
|
840
|
+
* Screen Loader Component
|
|
841
|
+
* Provides a full-screen loading overlay with spinner and customizable text
|
|
842
|
+
* Perfect for page transitions, data loading, and async operations
|
|
843
|
+
*/
|
|
844
|
+
/**
|
|
845
|
+
* Props interface for the ScreenLoader component
|
|
846
|
+
*/
|
|
847
|
+
interface ScreenLoaderProps {
|
|
848
|
+
/** Loading text to display below the spinner */
|
|
849
|
+
loadingText?: string;
|
|
850
|
+
/** Additional CSS classes for the container */
|
|
851
|
+
className?: string;
|
|
852
|
+
/** Additional CSS classes for the spinner icon */
|
|
853
|
+
spinnerClassName?: string;
|
|
854
|
+
/** Additional CSS classes for the loading text */
|
|
855
|
+
textClassName?: string;
|
|
856
|
+
/** Display loader for content */
|
|
857
|
+
contentLoader?: boolean;
|
|
858
|
+
}
|
|
859
|
+
/**
|
|
860
|
+
* ScreenLoader Component
|
|
861
|
+
*
|
|
862
|
+
* A full-screen loading overlay that covers the entire viewport.
|
|
863
|
+
* Features a spinning icon and customizable loading text with
|
|
864
|
+
* smooth fade transitions. Positioned with high z-index to
|
|
865
|
+
* appear above all other content.
|
|
866
|
+
*
|
|
867
|
+
* @param props - Component props
|
|
868
|
+
* @returns JSX element containing the full-screen loader
|
|
869
|
+
*
|
|
870
|
+
* @example
|
|
871
|
+
* ```tsx
|
|
872
|
+
* // Basic usage
|
|
873
|
+
* function App() {
|
|
874
|
+
* const [isLoading, setIsLoading] = useState(true);
|
|
875
|
+
*
|
|
876
|
+
* useEffect(() => {
|
|
877
|
+
* // Simulate loading
|
|
878
|
+
* setTimeout(() => setIsLoading(false), 2000);
|
|
879
|
+
* }, []);
|
|
880
|
+
*
|
|
881
|
+
* return (
|
|
882
|
+
* <div>
|
|
883
|
+
* {isLoading && <ScreenLoader />}
|
|
884
|
+
* <main>Your app content</main>
|
|
885
|
+
* </div>
|
|
886
|
+
* );
|
|
887
|
+
* }
|
|
888
|
+
*
|
|
889
|
+
* // Custom loading text
|
|
890
|
+
* <ScreenLoader loadingText="Preparing your dashboard..." />
|
|
891
|
+
*
|
|
892
|
+
* // Custom styling
|
|
893
|
+
* <ScreenLoader
|
|
894
|
+
* loadingText="Please wait"
|
|
895
|
+
* className="bg-black/80 backdrop-blur-sm"
|
|
896
|
+
* spinnerClassName="size-8 animate-spin text-blue-500"
|
|
897
|
+
* textClassName="text-white text-lg font-semibold"
|
|
898
|
+
* />
|
|
899
|
+
*
|
|
900
|
+
* // With conditional rendering
|
|
901
|
+
* {isSubmitting && (
|
|
902
|
+
* <ScreenLoader
|
|
903
|
+
* loadingText="Submitting form..."
|
|
904
|
+
* className="bg-white/90"
|
|
905
|
+
* />
|
|
906
|
+
* )}
|
|
907
|
+
*
|
|
908
|
+
* // Different spinner sizes
|
|
909
|
+
* <ScreenLoader
|
|
910
|
+
* spinnerClassName="size-12 animate-spin text-purple-600"
|
|
911
|
+
* textClassName="text-purple-600 font-bold"
|
|
912
|
+
* />
|
|
913
|
+
* ```
|
|
914
|
+
*/
|
|
915
|
+
declare function ScreenLoader({ loadingText, className, spinnerClassName, textClassName, contentLoader, }?: ScreenLoaderProps): react_jsx_runtime.JSX.Element;
|
|
916
|
+
|
|
917
|
+
/**
|
|
918
|
+
* Main Toolbar Component
|
|
919
|
+
*
|
|
920
|
+
* Creates a horizontal layout with space between heading and actions.
|
|
921
|
+
* Typically used at the top of pages or sections to display titles
|
|
922
|
+
* and related action buttons.
|
|
923
|
+
*
|
|
924
|
+
* @param props - Component props
|
|
925
|
+
* @returns JSX element containing the toolbar layout
|
|
926
|
+
*
|
|
927
|
+
* @example
|
|
928
|
+
* ```tsx
|
|
929
|
+
* <Toolbar>
|
|
930
|
+
* <ToolbarHeading>
|
|
931
|
+
* <ToolbarTitle>Dashboard</ToolbarTitle>
|
|
932
|
+
* <p className="text-sm text-muted-foreground">
|
|
933
|
+
* Welcome back! Here's what's happening.
|
|
934
|
+
* </p>
|
|
935
|
+
* </ToolbarHeading>
|
|
936
|
+
* <ToolbarActions>
|
|
937
|
+
* <Button variant="outline">Export</Button>
|
|
938
|
+
* <Button>Create New</Button>
|
|
939
|
+
* </ToolbarActions>
|
|
940
|
+
* </Toolbar>
|
|
941
|
+
* ```
|
|
942
|
+
*/
|
|
943
|
+
declare const Toolbar: ({ children }: {
|
|
944
|
+
children: ReactNode;
|
|
945
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
946
|
+
/**
|
|
947
|
+
* ToolbarHeading Component
|
|
948
|
+
*
|
|
949
|
+
* Container for the left side of the toolbar, typically containing
|
|
950
|
+
* the title and optional subtitle or description text.
|
|
951
|
+
*
|
|
952
|
+
* @param props - Component props
|
|
953
|
+
* @returns JSX element containing the heading section
|
|
954
|
+
*
|
|
955
|
+
* @example
|
|
956
|
+
* ```tsx
|
|
957
|
+
* <ToolbarHeading>
|
|
958
|
+
* <ToolbarTitle>User Management</ToolbarTitle>
|
|
959
|
+
* <p className="text-sm text-muted-foreground">
|
|
960
|
+
* Manage user accounts and permissions
|
|
961
|
+
* </p>
|
|
962
|
+
* </ToolbarHeading>
|
|
963
|
+
* ```
|
|
964
|
+
*/
|
|
965
|
+
declare const ToolbarHeading: ({ children, className, }: {
|
|
966
|
+
children: ReactNode;
|
|
967
|
+
className?: string;
|
|
968
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
969
|
+
/**
|
|
970
|
+
* ToolbarTitle Component
|
|
971
|
+
*
|
|
972
|
+
* Displays the main title text with consistent typography.
|
|
973
|
+
* Renders as an h1 element for proper semantic structure.
|
|
974
|
+
*
|
|
975
|
+
* @param props - Component props
|
|
976
|
+
* @returns JSX element containing the title
|
|
977
|
+
*
|
|
978
|
+
* @example
|
|
979
|
+
* ```tsx
|
|
980
|
+
* <ToolbarTitle>Analytics Dashboard</ToolbarTitle>
|
|
981
|
+
*
|
|
982
|
+
* // With custom styling
|
|
983
|
+
* <ToolbarTitle className="text-2xl text-blue-600">
|
|
984
|
+
* Premium Features
|
|
985
|
+
* </ToolbarTitle>
|
|
986
|
+
* ```
|
|
987
|
+
*/
|
|
988
|
+
declare const ToolbarTitle: ({ children, className, }: {
|
|
989
|
+
children: ReactNode;
|
|
990
|
+
className?: string;
|
|
991
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
992
|
+
/**
|
|
993
|
+
* ToolbarActions Component
|
|
994
|
+
*
|
|
995
|
+
* Container for the right side of the toolbar, typically containing
|
|
996
|
+
* action buttons, dropdowns, or other interactive elements.
|
|
997
|
+
* Responsive design with different gaps on mobile vs desktop.
|
|
998
|
+
*
|
|
999
|
+
* @param props - Component props
|
|
1000
|
+
* @returns JSX element containing the actions section
|
|
1001
|
+
*
|
|
1002
|
+
* @example
|
|
1003
|
+
* ```tsx
|
|
1004
|
+
* <ToolbarActions>
|
|
1005
|
+
* <Button variant="outline" size="sm">
|
|
1006
|
+
* <IconDownload className="w-4 h-4 mr-2" />
|
|
1007
|
+
* Export
|
|
1008
|
+
* </Button>
|
|
1009
|
+
* <Button size="sm">
|
|
1010
|
+
* <IconPlus className="w-4 h-4 mr-2" />
|
|
1011
|
+
* Add Item
|
|
1012
|
+
* </Button>
|
|
1013
|
+
* </ToolbarActions>
|
|
1014
|
+
*
|
|
1015
|
+
* // With dropdown menu
|
|
1016
|
+
* <ToolbarActions>
|
|
1017
|
+
* <DropdownMenu>
|
|
1018
|
+
* <DropdownMenuTrigger asChild>
|
|
1019
|
+
* <Button variant="outline">Options</Button>
|
|
1020
|
+
* </DropdownMenuTrigger>
|
|
1021
|
+
* <DropdownMenuContent>
|
|
1022
|
+
* <DropdownMenuItem>Edit</DropdownMenuItem>
|
|
1023
|
+
* <DropdownMenuItem>Delete</DropdownMenuItem>
|
|
1024
|
+
* </DropdownMenuContent>
|
|
1025
|
+
* </DropdownMenu>
|
|
1026
|
+
* </ToolbarActions>
|
|
1027
|
+
* ```
|
|
1028
|
+
*/
|
|
1029
|
+
declare const ToolbarActions: ({ children }: {
|
|
1030
|
+
children: ReactNode;
|
|
1031
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
1032
|
+
|
|
1033
|
+
/**
|
|
1034
|
+
* User Avatar Component
|
|
1035
|
+
* Displays user profile pictures with fallback initials and optional status indicators
|
|
1036
|
+
* Built on top of the base Avatar component with enhanced user-specific features
|
|
1037
|
+
*/
|
|
1038
|
+
/**
|
|
1039
|
+
* Props interface for the UserAvatar component
|
|
1040
|
+
*/
|
|
1041
|
+
interface UserAvatarProps {
|
|
1042
|
+
/** Additional CSS classes for styling */
|
|
1043
|
+
className?: string;
|
|
1044
|
+
/** Whether to show online status indicator */
|
|
1045
|
+
indicator?: boolean;
|
|
1046
|
+
/** Source URL for the user's profile image */
|
|
1047
|
+
src?: string | null | undefined;
|
|
1048
|
+
/** Alt text for the image, also used to generate initials */
|
|
1049
|
+
alt?: string | null;
|
|
1050
|
+
}
|
|
1051
|
+
/**
|
|
1052
|
+
* UserAvatar Component
|
|
1053
|
+
*
|
|
1054
|
+
* Displays a user's profile picture with automatic fallback to initials
|
|
1055
|
+
* when no image is available. Supports optional online status indicators
|
|
1056
|
+
* and follows accessibility best practices.
|
|
1057
|
+
*
|
|
1058
|
+
* Features:
|
|
1059
|
+
* - Automatic initials generation from name
|
|
1060
|
+
* - Fallback handling for missing images
|
|
1061
|
+
* - Optional online status indicator
|
|
1062
|
+
* - Accessible alt text support
|
|
1063
|
+
* - Customizable styling
|
|
1064
|
+
*
|
|
1065
|
+
* @param props - Component props
|
|
1066
|
+
* @param props.className - Additional CSS classes for styling
|
|
1067
|
+
* @param props.indicator - Whether to show online status indicator (default: false)
|
|
1068
|
+
* @param props.src - Source URL for the user's profile image
|
|
1069
|
+
* @param props.alt - Alt text for the image, also used to generate initials
|
|
1070
|
+
* @returns JSX element containing the user avatar
|
|
1071
|
+
*
|
|
1072
|
+
* @example
|
|
1073
|
+
* ```tsx
|
|
1074
|
+
* // Basic user avatar with image
|
|
1075
|
+
* <UserAvatar
|
|
1076
|
+
* src="https://example.com/avatar.jpg"
|
|
1077
|
+
* alt="John Doe"
|
|
1078
|
+
* />
|
|
1079
|
+
*
|
|
1080
|
+
* // Avatar with online indicator
|
|
1081
|
+
* <UserAvatar
|
|
1082
|
+
* src="https://example.com/avatar.jpg"
|
|
1083
|
+
* alt="Jane Smith"
|
|
1084
|
+
* indicator={true}
|
|
1085
|
+
* />
|
|
1086
|
+
*
|
|
1087
|
+
* // Avatar with fallback initials (no image)
|
|
1088
|
+
* <UserAvatar
|
|
1089
|
+
* alt="Bob Johnson"
|
|
1090
|
+
* className="w-12 h-12"
|
|
1091
|
+
* />
|
|
1092
|
+
*
|
|
1093
|
+
* // User list with avatars
|
|
1094
|
+
* <div className="flex space-x-2">
|
|
1095
|
+
* {users.map(user => (
|
|
1096
|
+
* <UserAvatar
|
|
1097
|
+
* key={user.id}
|
|
1098
|
+
* src={user.avatar}
|
|
1099
|
+
* alt={user.name}
|
|
1100
|
+
* indicator={user.isOnline}
|
|
1101
|
+
* className="w-8 h-8"
|
|
1102
|
+
* />
|
|
1103
|
+
* ))}
|
|
1104
|
+
* </div>
|
|
1105
|
+
*
|
|
1106
|
+
* // Profile header
|
|
1107
|
+
* <div className="flex items-center space-x-4">
|
|
1108
|
+
* <UserAvatar
|
|
1109
|
+
* src={currentUser.avatar}
|
|
1110
|
+
* alt={currentUser.name}
|
|
1111
|
+
* indicator={true}
|
|
1112
|
+
* className="w-16 h-16"
|
|
1113
|
+
* />
|
|
1114
|
+
* <div>
|
|
1115
|
+
* <h2>{currentUser.name}</h2>
|
|
1116
|
+
* <p className="text-gray-600">{currentUser.email}</p>
|
|
1117
|
+
* </div>
|
|
1118
|
+
* </div>
|
|
1119
|
+
* ```
|
|
1120
|
+
*/
|
|
1121
|
+
declare function UserAvatar({ className, indicator, src, alt }: UserAvatarProps): react_jsx_runtime.JSX.Element;
|
|
1122
|
+
/**
|
|
1123
|
+
* Utility function to generate initials from a name
|
|
1124
|
+
*
|
|
1125
|
+
* Extracts the first letter of each word in a name and converts
|
|
1126
|
+
* them to uppercase to create user initials for avatar fallbacks.
|
|
1127
|
+
*
|
|
1128
|
+
* @param name - The full name to extract initials from
|
|
1129
|
+
* @param count - Maximum number of initials to return (optional)
|
|
1130
|
+
* @returns String containing the initials
|
|
1131
|
+
*
|
|
1132
|
+
* @example
|
|
1133
|
+
* ```tsx
|
|
1134
|
+
* getInitials("John Doe") // Returns "JD"
|
|
1135
|
+
* getInitials("Jane Mary Smith", 2) // Returns "JM"
|
|
1136
|
+
* getInitials("") // Returns ""
|
|
1137
|
+
* getInitials(null) // Returns ""
|
|
1138
|
+
* ```
|
|
1139
|
+
*/
|
|
1140
|
+
declare const getInitials: (name: string | null | undefined, count?: number) => string;
|
|
1141
|
+
|
|
1142
|
+
export { AlertComingsoon, AlertNotification, AlertToast, type AlertToastOptions, ComingSoon, type ComingSoonProps, ConfirmDismissDialog, type ConfirmDismissDialogProps, Icons, LanguageSwitcher, type LanguageSwitcherProps, type LocaleOption, Logo, MainNav, MobileNav, MobileNavItemRenderer, ModeSwitcher, type ModeSwitcherProps, type NavItem, type NavigationProps, QueryProvider, ScreenLoader, type ScreenLoaderProps, SiteFooter, SiteHeader, ThemeProvider, Toolbar, ToolbarActions, ToolbarHeading, ToolbarTitle, UserAvatar, getInitials };
|