@olwiba/ui 0.0.28
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 +98 -0
- package/dist/index.d.ts +762 -0
- package/dist/index.js +2102 -0
- package/dist/index.js.map +1 -0
- package/package.json +88 -0
- package/src/app/AppShell.tsx +365 -0
- package/src/app/AuthSection.tsx +141 -0
- package/src/app/EmptyState.tsx +34 -0
- package/src/app/ErrorPage.tsx +78 -0
- package/src/app/UpgradePrompt.tsx +203 -0
- package/src/blog/PostCard.tsx +66 -0
- package/src/blog/PostList.tsx +27 -0
- package/src/components/ConfirmDialog.tsx +43 -0
- package/src/components/ContextMenu.tsx +86 -0
- package/src/components/DevBanner.tsx +22 -0
- package/src/components/Dock.tsx +94 -0
- package/src/components/FeatureCard.tsx +45 -0
- package/src/components/GlassCard.tsx +30 -0
- package/src/components/ImageCard.tsx +60 -0
- package/src/components/PageHeader.tsx +101 -0
- package/src/components/PricingCard.tsx +90 -0
- package/src/components/RegisterHotkeys.tsx +43 -0
- package/src/components/RootErrorFallback.tsx +29 -0
- package/src/components/Spinner.tsx +14 -0
- package/src/components/Spotlight.tsx +104 -0
- package/src/components/StatCard.tsx +44 -0
- package/src/components/Suspensed.tsx +17 -0
- package/src/components/TestimonialCard.tsx +64 -0
- package/src/components/ThemeColorUpdater.tsx +23 -0
- package/src/components/ThemeSwitchMinimal.tsx +28 -0
- package/src/components/VersionBanner.tsx +38 -0
- package/src/context/OlwibaUIContext.tsx +58 -0
- package/src/hooks/use-confirm.ts +64 -0
- package/src/hooks/use-controlled-open.ts +33 -0
- package/src/hooks/use-copy-to-clipboard.ts +20 -0
- package/src/hooks/use-debounce.ts +14 -0
- package/src/hooks/use-intersection-observer.ts +25 -0
- package/src/hooks/use-local-storage.ts +31 -0
- package/src/hooks/use-media-query.ts +21 -0
- package/src/hooks/use-mounted.ts +11 -0
- package/src/hooks/use-pagination.ts +31 -0
- package/src/hooks/use-scrolled-past.ts +27 -0
- package/src/index.ts +113 -0
- package/src/lib/utils.ts +6 -0
- package/src/marketing/ContactSection.tsx +110 -0
- package/src/marketing/CtaSection.tsx +74 -0
- package/src/marketing/FaqSection.tsx +44 -0
- package/src/marketing/FeaturesSection.tsx +42 -0
- package/src/marketing/Footer.tsx +87 -0
- package/src/marketing/HeroSection.tsx +112 -0
- package/src/marketing/LogoStrip.tsx +94 -0
- package/src/marketing/Navbar.tsx +142 -0
- package/src/marketing/NewsletterSection.tsx +64 -0
- package/src/marketing/PricingSection.tsx +120 -0
- package/src/marketing/SectionTitle.tsx +30 -0
- package/src/marketing/StatsSection.tsx +63 -0
- package/src/marketing/TeamSection.tsx +110 -0
- package/src/marketing/TestimonialsSection.tsx +56 -0
- package/src/motion/CountUp.tsx +64 -0
- package/src/motion/FadeIn.tsx +69 -0
- package/src/motion/PageTransition.tsx +49 -0
- package/src/motion/StaggerChildren.tsx +74 -0
- package/src/overlays/Overlay.tsx +88 -0
- package/src/overlays/Underlay.tsx +114 -0
- package/src/primitives/Badge.tsx +11 -0
- package/src/primitives/Button.tsx +16 -0
- package/src/primitives/Card.tsx +22 -0
- package/src/primitives/Checkbox.tsx +17 -0
- package/src/primitives/Input.tsx +16 -0
- package/src/primitives/Switch.tsx +16 -0
- package/src/primitives/Textarea.tsx +16 -0
- package/src/primitives/index.ts +7 -0
- package/src/types/external-packages.d.ts +79 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,762 @@
|
|
|
1
|
+
import { ClassValue } from 'clsx';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { ReactNode } from 'react';
|
|
5
|
+
import { ButtonProps as ButtonProps$1, CardProps as CardProps$1, BadgeProps as BadgeProps$1, InputProps as InputProps$1, TextareaProps as TextareaProps$1, CheckboxProps as CheckboxProps$1, SwitchProps as SwitchProps$1 } from '@olwiba/cn';
|
|
6
|
+
export { CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@olwiba/cn';
|
|
7
|
+
import { LucideIcon } from 'lucide-react';
|
|
8
|
+
|
|
9
|
+
declare function cn(...inputs: ClassValue[]): string;
|
|
10
|
+
|
|
11
|
+
type UIMode = 'default' | 'playful' | 'smooth';
|
|
12
|
+
interface OlwibaUIContextValue {
|
|
13
|
+
isMobile: boolean;
|
|
14
|
+
mode: UIMode;
|
|
15
|
+
}
|
|
16
|
+
interface OlwibaUIProviderProps {
|
|
17
|
+
children: React.ReactNode;
|
|
18
|
+
/**
|
|
19
|
+
* Override the mobile detection. If omitted, uses useIsMobile() from @olwiba/cn
|
|
20
|
+
* which detects based on a 768px viewport breakpoint.
|
|
21
|
+
*/
|
|
22
|
+
isMobile?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Global component mode. Primitives imported from @olwiba/ui will automatically
|
|
25
|
+
* apply this mode unless overridden at the component level.
|
|
26
|
+
*
|
|
27
|
+
* - `'default'` — standard square shadcn/Radix appearance
|
|
28
|
+
* - `'playful'` — slight rotation + offset drop shadow backdrop
|
|
29
|
+
* - `'smooth'` — softer, larger border-radius across all components
|
|
30
|
+
*/
|
|
31
|
+
mode?: UIMode;
|
|
32
|
+
}
|
|
33
|
+
declare function OlwibaUIProvider({ children, isMobile: isMobileProp, mode }: OlwibaUIProviderProps): react_jsx_runtime.JSX.Element;
|
|
34
|
+
declare function useOlwibaUI(): OlwibaUIContextValue;
|
|
35
|
+
/** Returns just the current UI mode from context. */
|
|
36
|
+
declare function useUIMode(): UIMode;
|
|
37
|
+
|
|
38
|
+
type ButtonProps = ButtonProps$1;
|
|
39
|
+
declare const Button: React.ForwardRefExoticComponent<ButtonProps$1 & React.RefAttributes<HTMLButtonElement>>;
|
|
40
|
+
|
|
41
|
+
type CardProps = CardProps$1;
|
|
42
|
+
declare const Card: React.ForwardRefExoticComponent<CardProps$1 & React.RefAttributes<HTMLDivElement>>;
|
|
43
|
+
|
|
44
|
+
type BadgeProps = BadgeProps$1;
|
|
45
|
+
declare function Badge(props: BadgeProps): react_jsx_runtime.JSX.Element;
|
|
46
|
+
|
|
47
|
+
type InputProps = InputProps$1;
|
|
48
|
+
declare const Input: React.ForwardRefExoticComponent<Omit<InputProps$1, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
49
|
+
|
|
50
|
+
type TextareaProps = TextareaProps$1;
|
|
51
|
+
declare const Textarea: React.ForwardRefExoticComponent<Omit<TextareaProps$1, "ref"> & React.RefAttributes<HTMLTextAreaElement>>;
|
|
52
|
+
|
|
53
|
+
type CheckboxProps = CheckboxProps$1;
|
|
54
|
+
declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps$1 & React.RefAttributes<HTMLButtonElement>>;
|
|
55
|
+
|
|
56
|
+
type SwitchProps = SwitchProps$1 & {
|
|
57
|
+
mode?: 'default' | 'playful' | 'smooth';
|
|
58
|
+
};
|
|
59
|
+
declare const Switch: React.ForwardRefExoticComponent<SwitchProps$1 & {
|
|
60
|
+
mode?: "default" | "playful" | "smooth";
|
|
61
|
+
} & React.RefAttributes<HTMLButtonElement>>;
|
|
62
|
+
|
|
63
|
+
interface AppNavItem {
|
|
64
|
+
icon: LucideIcon;
|
|
65
|
+
label: string;
|
|
66
|
+
href: string;
|
|
67
|
+
isActive?: boolean;
|
|
68
|
+
}
|
|
69
|
+
interface AppShellAction {
|
|
70
|
+
icon?: LucideIcon;
|
|
71
|
+
label: string;
|
|
72
|
+
href?: string;
|
|
73
|
+
onClick?: () => void;
|
|
74
|
+
}
|
|
75
|
+
interface AppShellUser {
|
|
76
|
+
email: string;
|
|
77
|
+
name?: string;
|
|
78
|
+
avatar?: string;
|
|
79
|
+
/** Displayed as a sub-label (e.g. plan tier). */
|
|
80
|
+
plan?: string;
|
|
81
|
+
onSignOut?: () => void;
|
|
82
|
+
onBilling?: () => void;
|
|
83
|
+
}
|
|
84
|
+
interface AppShellBrand {
|
|
85
|
+
name: ReactNode;
|
|
86
|
+
logo?: ReactNode;
|
|
87
|
+
href?: string;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Render a navigation link. Override to integrate your router's Link component.
|
|
91
|
+
* @example renderLink={({ href, children }) => <Link to={href}>{children}</Link>}
|
|
92
|
+
*/
|
|
93
|
+
type AppShellRenderLink = (props: {
|
|
94
|
+
href: string;
|
|
95
|
+
children: ReactNode;
|
|
96
|
+
className?: string;
|
|
97
|
+
}) => ReactNode;
|
|
98
|
+
interface AppShellProps {
|
|
99
|
+
brand?: AppShellBrand;
|
|
100
|
+
navItems?: AppNavItem[];
|
|
101
|
+
/** Primary CTA rendered above nav (e.g. "New project", "Quick create") */
|
|
102
|
+
action?: AppShellAction;
|
|
103
|
+
user?: AppShellUser;
|
|
104
|
+
/** Text shown in the top header bar */
|
|
105
|
+
pageTitle?: string;
|
|
106
|
+
/** Override link rendering for SPA navigation. Defaults to a native <a>. */
|
|
107
|
+
renderLink?: AppShellRenderLink;
|
|
108
|
+
children?: ReactNode;
|
|
109
|
+
/**
|
|
110
|
+
* Sidebar collapse behaviour.
|
|
111
|
+
* - `"icon"` — collapses to a narrow icon rail (default, recommended for desktop)
|
|
112
|
+
* - `"offcanvas"` — slides off-screen as a drawer overlay
|
|
113
|
+
* - `"none"` — always fully visible
|
|
114
|
+
*/
|
|
115
|
+
collapsible?: 'icon' | 'offcanvas' | 'none';
|
|
116
|
+
/**
|
|
117
|
+
* Layout scope.
|
|
118
|
+
* - `"viewport"` (default) — fills the full browser viewport; use for top-level app shells.
|
|
119
|
+
* - `"contained"` — fills its parent container; use in docs sandboxes, modals, or embedded previews.
|
|
120
|
+
*/
|
|
121
|
+
sidebarPosition?: 'viewport' | 'contained';
|
|
122
|
+
/** Which side the sidebar sits on. @default "left" */
|
|
123
|
+
side?: 'left' | 'right';
|
|
124
|
+
}
|
|
125
|
+
declare function AppShell({ brand, navItems, action, user, pageTitle, renderLink, collapsible, sidebarPosition, side, children, }?: AppShellProps): react_jsx_runtime.JSX.Element;
|
|
126
|
+
|
|
127
|
+
interface AuthFormProps {
|
|
128
|
+
onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;
|
|
129
|
+
onSso?: () => void;
|
|
130
|
+
signUpHref?: string;
|
|
131
|
+
forgotPasswordHref?: string;
|
|
132
|
+
brand?: React.ReactNode;
|
|
133
|
+
}
|
|
134
|
+
interface AuthSectionProps extends AuthFormProps {
|
|
135
|
+
/** Visual layout of the auth screen */
|
|
136
|
+
layout?: 'centered' | 'split';
|
|
137
|
+
/** Custom form/card content. Defaults to the built-in sign-in form. */
|
|
138
|
+
children?: React.ReactNode;
|
|
139
|
+
/** (split layout only) Custom content for the left decorative panel */
|
|
140
|
+
panel?: React.ReactNode;
|
|
141
|
+
className?: string;
|
|
142
|
+
}
|
|
143
|
+
declare function AuthSection({ layout, children, panel, className, ...formProps }: AuthSectionProps): react_jsx_runtime.JSX.Element;
|
|
144
|
+
|
|
145
|
+
interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
146
|
+
icon?: LucideIcon;
|
|
147
|
+
title: string;
|
|
148
|
+
description?: string;
|
|
149
|
+
action?: React.ReactNode;
|
|
150
|
+
}
|
|
151
|
+
declare function EmptyState({ icon: Icon, title, description, action, className, ...props }: EmptyStateProps): react_jsx_runtime.JSX.Element;
|
|
152
|
+
|
|
153
|
+
interface ErrorPageProps {
|
|
154
|
+
statusCode?: string;
|
|
155
|
+
title?: string;
|
|
156
|
+
description?: string;
|
|
157
|
+
action?: {
|
|
158
|
+
label: string;
|
|
159
|
+
href: string;
|
|
160
|
+
};
|
|
161
|
+
backAction?: {
|
|
162
|
+
label: string;
|
|
163
|
+
href?: string;
|
|
164
|
+
onClick?: () => void;
|
|
165
|
+
};
|
|
166
|
+
renderLink?: AppShellRenderLink;
|
|
167
|
+
}
|
|
168
|
+
declare function ErrorPage({ statusCode, title, description, action, backAction, renderLink, }: ErrorPageProps): react_jsx_runtime.JSX.Element;
|
|
169
|
+
|
|
170
|
+
interface UpgradeComparisonRow {
|
|
171
|
+
key?: React.Key;
|
|
172
|
+
label: React.ReactNode;
|
|
173
|
+
currentValue: React.ReactNode;
|
|
174
|
+
upgradedValue: React.ReactNode;
|
|
175
|
+
}
|
|
176
|
+
interface UpgradePromptProps {
|
|
177
|
+
/** Layout variant. `banner` is an inline strip; `comparison` is a full feature-table block. */
|
|
178
|
+
variant: 'banner' | 'comparison';
|
|
179
|
+
/** Primary heading shown in both variants. */
|
|
180
|
+
title: React.ReactNode;
|
|
181
|
+
/** Supporting copy shown below the title. */
|
|
182
|
+
description: React.ReactNode;
|
|
183
|
+
/** Label for the primary upgrade CTA. Include pricing here if relevant. */
|
|
184
|
+
primaryActionLabel: React.ReactNode;
|
|
185
|
+
/** Called when the primary upgrade CTA is clicked. */
|
|
186
|
+
onPrimaryAction: () => void;
|
|
187
|
+
/** Optional secondary action label, typically for "maybe later" or dismiss behavior. */
|
|
188
|
+
secondaryActionLabel?: React.ReactNode;
|
|
189
|
+
/** Called when the optional secondary action is clicked. */
|
|
190
|
+
onSecondaryAction?: () => void;
|
|
191
|
+
/** Small eyebrow label shown above the title in the comparison variant. */
|
|
192
|
+
eyebrow?: React.ReactNode;
|
|
193
|
+
/** Feature comparison rows for the comparison variant. */
|
|
194
|
+
rows?: UpgradeComparisonRow[];
|
|
195
|
+
/** Column header for the current plan. Defaults to "Current". */
|
|
196
|
+
currentPlanLabel?: React.ReactNode;
|
|
197
|
+
/** Column header for the upgraded plan. Defaults to "Upgrade". */
|
|
198
|
+
upgradedPlanLabel?: React.ReactNode;
|
|
199
|
+
/** Small body text shown below the comparison table, before the action buttons. */
|
|
200
|
+
footer?: React.ReactNode;
|
|
201
|
+
/** Optional close icon action for the comparison variant. */
|
|
202
|
+
onClose?: () => void;
|
|
203
|
+
/** Accessible label for the comparison close icon. Defaults to "Close". */
|
|
204
|
+
closeLabel?: string;
|
|
205
|
+
className?: string;
|
|
206
|
+
}
|
|
207
|
+
declare function UpgradePrompt({ variant, title, description, primaryActionLabel, onPrimaryAction, secondaryActionLabel, onSecondaryAction, eyebrow, rows, currentPlanLabel, upgradedPlanLabel, footer, onClose, closeLabel, className, }: UpgradePromptProps): react_jsx_runtime.JSX.Element;
|
|
208
|
+
|
|
209
|
+
interface SectionTitleProps {
|
|
210
|
+
title: string;
|
|
211
|
+
description?: string;
|
|
212
|
+
badge?: string;
|
|
213
|
+
className?: string;
|
|
214
|
+
}
|
|
215
|
+
declare function SectionTitle({ title, description, badge, className }: SectionTitleProps): react_jsx_runtime.JSX.Element;
|
|
216
|
+
|
|
217
|
+
interface HeroSectionProps {
|
|
218
|
+
heading: string;
|
|
219
|
+
badge?: string;
|
|
220
|
+
description: string;
|
|
221
|
+
primaryCta: {
|
|
222
|
+
label: string;
|
|
223
|
+
href: string;
|
|
224
|
+
};
|
|
225
|
+
secondaryCta?: {
|
|
226
|
+
label: string;
|
|
227
|
+
href: string;
|
|
228
|
+
};
|
|
229
|
+
heroImage: React.ReactNode;
|
|
230
|
+
avatarUrls?: string[];
|
|
231
|
+
socialProofText?: string;
|
|
232
|
+
renderLink?: AppShellRenderLink;
|
|
233
|
+
}
|
|
234
|
+
declare function HeroSection({ heading, badge, description, primaryCta, secondaryCta, heroImage, avatarUrls, socialProofText, renderLink, }: HeroSectionProps): react_jsx_runtime.JSX.Element;
|
|
235
|
+
|
|
236
|
+
interface FeaturesSectionProps {
|
|
237
|
+
title?: string;
|
|
238
|
+
description?: string;
|
|
239
|
+
badge?: string;
|
|
240
|
+
features: Array<{
|
|
241
|
+
icon: LucideIcon;
|
|
242
|
+
title: string;
|
|
243
|
+
description: string;
|
|
244
|
+
href?: string;
|
|
245
|
+
}>;
|
|
246
|
+
}
|
|
247
|
+
declare function FeaturesSection({ title, description, badge, features, }: FeaturesSectionProps): react_jsx_runtime.JSX.Element;
|
|
248
|
+
|
|
249
|
+
interface CtaSectionProps {
|
|
250
|
+
heading: string;
|
|
251
|
+
description: string;
|
|
252
|
+
primaryCta: {
|
|
253
|
+
label: string;
|
|
254
|
+
href: string;
|
|
255
|
+
};
|
|
256
|
+
secondaryCta?: {
|
|
257
|
+
label: string;
|
|
258
|
+
href: string;
|
|
259
|
+
};
|
|
260
|
+
footnote?: string;
|
|
261
|
+
renderLink?: AppShellRenderLink;
|
|
262
|
+
}
|
|
263
|
+
declare function CtaSection({ heading, description, primaryCta, secondaryCta, footnote, renderLink, }: CtaSectionProps): react_jsx_runtime.JSX.Element;
|
|
264
|
+
|
|
265
|
+
interface PricingFeature {
|
|
266
|
+
label: string;
|
|
267
|
+
included: boolean;
|
|
268
|
+
}
|
|
269
|
+
interface PricingCardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
270
|
+
name: string;
|
|
271
|
+
price: string;
|
|
272
|
+
period?: string;
|
|
273
|
+
description: string;
|
|
274
|
+
features: PricingFeature[];
|
|
275
|
+
cta: string;
|
|
276
|
+
highlighted?: boolean;
|
|
277
|
+
badge?: string;
|
|
278
|
+
onSelect?: () => void;
|
|
279
|
+
}
|
|
280
|
+
declare function PricingCard({ name, price, period, description, features, cta, highlighted, badge, onSelect, className, ...props }: PricingCardProps): react_jsx_runtime.JSX.Element;
|
|
281
|
+
|
|
282
|
+
interface PricingPlan {
|
|
283
|
+
name: string;
|
|
284
|
+
monthly: number;
|
|
285
|
+
annual: number;
|
|
286
|
+
description: string;
|
|
287
|
+
cta: string;
|
|
288
|
+
highlighted?: boolean;
|
|
289
|
+
features: PricingFeature[];
|
|
290
|
+
}
|
|
291
|
+
interface PricingSectionProps {
|
|
292
|
+
title?: string;
|
|
293
|
+
description?: string;
|
|
294
|
+
badge?: string;
|
|
295
|
+
plans: PricingPlan[];
|
|
296
|
+
saveBadge?: string;
|
|
297
|
+
isAuthenticated?: boolean;
|
|
298
|
+
renderLink?: AppShellRenderLink;
|
|
299
|
+
footnote?: string;
|
|
300
|
+
}
|
|
301
|
+
declare function PricingSection({ title, description, badge, plans, saveBadge, isAuthenticated, renderLink, footnote, }: PricingSectionProps): react_jsx_runtime.JSX.Element;
|
|
302
|
+
|
|
303
|
+
interface TestimonialsSectionProps {
|
|
304
|
+
title?: string;
|
|
305
|
+
description?: string;
|
|
306
|
+
badge?: string;
|
|
307
|
+
testimonials: Array<{
|
|
308
|
+
quote: string;
|
|
309
|
+
name: string;
|
|
310
|
+
role: string;
|
|
311
|
+
company?: string;
|
|
312
|
+
avatar?: string;
|
|
313
|
+
initials?: string;
|
|
314
|
+
rating?: number;
|
|
315
|
+
}>;
|
|
316
|
+
}
|
|
317
|
+
declare function TestimonialsSection({ title, description, badge, testimonials, }: TestimonialsSectionProps): react_jsx_runtime.JSX.Element;
|
|
318
|
+
|
|
319
|
+
declare function TeamSection(): react_jsx_runtime.JSX.Element;
|
|
320
|
+
|
|
321
|
+
interface FaqSectionProps {
|
|
322
|
+
title?: string;
|
|
323
|
+
description?: string;
|
|
324
|
+
badge?: string;
|
|
325
|
+
items: Array<{
|
|
326
|
+
question: string;
|
|
327
|
+
answer: string;
|
|
328
|
+
}>;
|
|
329
|
+
}
|
|
330
|
+
declare function FaqSection({ title, description, badge, items, }: FaqSectionProps): react_jsx_runtime.JSX.Element;
|
|
331
|
+
|
|
332
|
+
interface StatsSectionProps {
|
|
333
|
+
title?: string;
|
|
334
|
+
description?: string;
|
|
335
|
+
badge?: string;
|
|
336
|
+
stats: Array<{
|
|
337
|
+
value: string;
|
|
338
|
+
label: string;
|
|
339
|
+
description?: string;
|
|
340
|
+
}>;
|
|
341
|
+
}
|
|
342
|
+
declare function StatsSection({ title, description, badge, stats, }: StatsSectionProps): react_jsx_runtime.JSX.Element;
|
|
343
|
+
|
|
344
|
+
declare function NewsletterSection(): react_jsx_runtime.JSX.Element;
|
|
345
|
+
|
|
346
|
+
declare function ContactSection(): react_jsx_runtime.JSX.Element;
|
|
347
|
+
|
|
348
|
+
interface NavbarProps {
|
|
349
|
+
brand: {
|
|
350
|
+
name: string;
|
|
351
|
+
logo?: React.ReactNode;
|
|
352
|
+
href?: string;
|
|
353
|
+
};
|
|
354
|
+
navLinks: Array<{
|
|
355
|
+
label: string;
|
|
356
|
+
href: string;
|
|
357
|
+
}>;
|
|
358
|
+
cta?: {
|
|
359
|
+
primary?: {
|
|
360
|
+
label: string;
|
|
361
|
+
href: string;
|
|
362
|
+
};
|
|
363
|
+
secondary?: {
|
|
364
|
+
label: string;
|
|
365
|
+
href: string;
|
|
366
|
+
};
|
|
367
|
+
};
|
|
368
|
+
showThemeToggle?: boolean;
|
|
369
|
+
renderLink?: AppShellRenderLink;
|
|
370
|
+
}
|
|
371
|
+
declare function Navbar({ brand, navLinks, cta, showThemeToggle, renderLink, }: NavbarProps): react_jsx_runtime.JSX.Element;
|
|
372
|
+
|
|
373
|
+
interface FooterProps {
|
|
374
|
+
brand: {
|
|
375
|
+
name: string;
|
|
376
|
+
logo?: ReactNode;
|
|
377
|
+
href?: string;
|
|
378
|
+
};
|
|
379
|
+
navLinks?: Array<{
|
|
380
|
+
label: string;
|
|
381
|
+
href: string;
|
|
382
|
+
}>;
|
|
383
|
+
socialLinks?: Array<{
|
|
384
|
+
label: string;
|
|
385
|
+
href: string;
|
|
386
|
+
icon: ReactNode;
|
|
387
|
+
}>;
|
|
388
|
+
legal?: string;
|
|
389
|
+
renderLink?: AppShellRenderLink;
|
|
390
|
+
}
|
|
391
|
+
declare function Footer({ brand, navLinks, socialLinks, legal, renderLink, }: FooterProps): react_jsx_runtime.JSX.Element;
|
|
392
|
+
|
|
393
|
+
interface LogoStripProps {
|
|
394
|
+
logos: Array<{
|
|
395
|
+
src: string;
|
|
396
|
+
darkSrc?: string;
|
|
397
|
+
alt: string;
|
|
398
|
+
href?: string;
|
|
399
|
+
}>;
|
|
400
|
+
label?: string;
|
|
401
|
+
speed?: 'slow' | 'normal' | 'fast';
|
|
402
|
+
}
|
|
403
|
+
declare function LogoStrip({ logos, label, speed, }: LogoStripProps): react_jsx_runtime.JSX.Element;
|
|
404
|
+
|
|
405
|
+
interface GridUnderlayProps extends React.SVGAttributes<SVGElement> {
|
|
406
|
+
variant: 'dots' | 'lines' | 'cross';
|
|
407
|
+
size?: number;
|
|
408
|
+
className?: string;
|
|
409
|
+
}
|
|
410
|
+
declare const blurClass: {
|
|
411
|
+
readonly sm: "blur-xl";
|
|
412
|
+
readonly md: "blur-2xl";
|
|
413
|
+
readonly lg: "blur-3xl";
|
|
414
|
+
readonly xl: "blur-[80px]";
|
|
415
|
+
};
|
|
416
|
+
interface GlowUnderlayProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
417
|
+
size?: number;
|
|
418
|
+
color?: string;
|
|
419
|
+
followCursor?: boolean;
|
|
420
|
+
blur?: keyof typeof blurClass;
|
|
421
|
+
}
|
|
422
|
+
type UnderlayVariant = 'dots' | 'lines' | 'cross' | 'glow';
|
|
423
|
+
type UnderlayProps = ({
|
|
424
|
+
variant: 'dots' | 'lines' | 'cross';
|
|
425
|
+
} & Omit<GridUnderlayProps, 'variant'>) | ({
|
|
426
|
+
variant: 'glow';
|
|
427
|
+
} & Omit<GlowUnderlayProps, 'variant'>);
|
|
428
|
+
declare function Underlay(props: UnderlayProps): react_jsx_runtime.JSX.Element;
|
|
429
|
+
|
|
430
|
+
interface DimOverlayProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
431
|
+
opacity?: number;
|
|
432
|
+
}
|
|
433
|
+
type ScrimDirection = 'top' | 'bottom' | 'left' | 'right';
|
|
434
|
+
interface ScrimOverlayProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
435
|
+
direction?: ScrimDirection;
|
|
436
|
+
color?: string;
|
|
437
|
+
}
|
|
438
|
+
interface LoadingOverlayProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
439
|
+
label?: string;
|
|
440
|
+
}
|
|
441
|
+
type OverlayVariant = 'dim' | 'scrim' | 'loading';
|
|
442
|
+
type OverlayProps = ({
|
|
443
|
+
variant: 'dim';
|
|
444
|
+
} & DimOverlayProps) | ({
|
|
445
|
+
variant: 'scrim';
|
|
446
|
+
} & ScrimOverlayProps) | ({
|
|
447
|
+
variant: 'loading';
|
|
448
|
+
} & LoadingOverlayProps);
|
|
449
|
+
declare function Overlay(props: OverlayProps): react_jsx_runtime.JSX.Element;
|
|
450
|
+
|
|
451
|
+
interface FadeInProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
452
|
+
delay?: number;
|
|
453
|
+
duration?: number;
|
|
454
|
+
direction?: 'up' | 'down' | 'left' | 'right' | 'none';
|
|
455
|
+
once?: boolean;
|
|
456
|
+
children: React.ReactNode;
|
|
457
|
+
}
|
|
458
|
+
declare function FadeIn({ delay, duration, direction, once, children, className, style, ...props }: FadeInProps): react_jsx_runtime.JSX.Element;
|
|
459
|
+
|
|
460
|
+
interface StaggerChildrenProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
461
|
+
stagger?: number;
|
|
462
|
+
delay?: number;
|
|
463
|
+
duration?: number;
|
|
464
|
+
direction?: 'up' | 'down' | 'left' | 'right' | 'none';
|
|
465
|
+
once?: boolean;
|
|
466
|
+
children: React.ReactNode;
|
|
467
|
+
}
|
|
468
|
+
declare function StaggerChildren({ stagger, delay, duration, direction, once, children, className, ...props }: StaggerChildrenProps): react_jsx_runtime.JSX.Element;
|
|
469
|
+
|
|
470
|
+
interface CountUpProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
471
|
+
from?: number;
|
|
472
|
+
to: number;
|
|
473
|
+
duration?: number;
|
|
474
|
+
decimals?: number;
|
|
475
|
+
prefix?: string;
|
|
476
|
+
suffix?: string;
|
|
477
|
+
once?: boolean;
|
|
478
|
+
}
|
|
479
|
+
declare function CountUp({ from, to, duration, decimals, prefix, suffix, once, className, ...props }: CountUpProps): react_jsx_runtime.JSX.Element;
|
|
480
|
+
|
|
481
|
+
interface PageTransitionProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
482
|
+
variant?: 'fade' | 'slide-up' | 'slide-down';
|
|
483
|
+
duration?: number;
|
|
484
|
+
children: React.ReactNode;
|
|
485
|
+
}
|
|
486
|
+
declare function PageTransition({ variant, duration, children, className, style, ...props }: PageTransitionProps): react_jsx_runtime.JSX.Element;
|
|
487
|
+
|
|
488
|
+
interface SpotlightItem {
|
|
489
|
+
id: string;
|
|
490
|
+
label: string;
|
|
491
|
+
description?: string;
|
|
492
|
+
icon?: React.ReactNode;
|
|
493
|
+
onSelect: () => void;
|
|
494
|
+
}
|
|
495
|
+
interface SpotlightGroup {
|
|
496
|
+
heading: string;
|
|
497
|
+
items: SpotlightItem[];
|
|
498
|
+
}
|
|
499
|
+
interface SpotlightProps {
|
|
500
|
+
groups: SpotlightGroup[];
|
|
501
|
+
placeholder?: string;
|
|
502
|
+
trigger?: React.ReactNode;
|
|
503
|
+
triggerClassName?: string;
|
|
504
|
+
shortcut?: string;
|
|
505
|
+
}
|
|
506
|
+
declare function Spotlight({ groups, placeholder, trigger, triggerClassName, shortcut, }: SpotlightProps): react_jsx_runtime.JSX.Element;
|
|
507
|
+
|
|
508
|
+
interface DockItem {
|
|
509
|
+
icon: LucideIcon;
|
|
510
|
+
label: string;
|
|
511
|
+
href?: string;
|
|
512
|
+
onClick?: () => void;
|
|
513
|
+
}
|
|
514
|
+
interface DockProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
515
|
+
items: DockItem[];
|
|
516
|
+
iconSize?: number;
|
|
517
|
+
magnification?: number;
|
|
518
|
+
}
|
|
519
|
+
declare function Dock({ items, iconSize, magnification, className, ...props }: DockProps): react_jsx_runtime.JSX.Element;
|
|
520
|
+
|
|
521
|
+
interface ContextMenuAction {
|
|
522
|
+
type: 'item';
|
|
523
|
+
label: string;
|
|
524
|
+
shortcut?: string;
|
|
525
|
+
disabled?: boolean;
|
|
526
|
+
onSelect?: () => void;
|
|
527
|
+
}
|
|
528
|
+
interface ContextMenuSeparatorDef {
|
|
529
|
+
type: 'separator';
|
|
530
|
+
}
|
|
531
|
+
interface ContextMenuLabelDef {
|
|
532
|
+
type: 'label';
|
|
533
|
+
label: string;
|
|
534
|
+
}
|
|
535
|
+
interface ContextMenuSubDef {
|
|
536
|
+
type: 'sub';
|
|
537
|
+
label: string;
|
|
538
|
+
items: ContextMenuDef[];
|
|
539
|
+
}
|
|
540
|
+
type ContextMenuDef = ContextMenuAction | ContextMenuSeparatorDef | ContextMenuLabelDef | ContextMenuSubDef;
|
|
541
|
+
interface ContextMenuProps {
|
|
542
|
+
items: ContextMenuDef[];
|
|
543
|
+
children: React.ReactNode;
|
|
544
|
+
}
|
|
545
|
+
declare function ContextMenu({ items, children }: ContextMenuProps): react_jsx_runtime.JSX.Element;
|
|
546
|
+
|
|
547
|
+
interface ConfirmOptions {
|
|
548
|
+
title?: string;
|
|
549
|
+
description?: string;
|
|
550
|
+
confirmLabel?: string;
|
|
551
|
+
cancelLabel?: string;
|
|
552
|
+
}
|
|
553
|
+
interface UseConfirmReturn {
|
|
554
|
+
confirm: (options?: ConfirmOptions) => Promise<boolean>;
|
|
555
|
+
isOpen: boolean;
|
|
556
|
+
options: ConfirmOptions;
|
|
557
|
+
handleConfirm: () => void;
|
|
558
|
+
handleCancel: () => void;
|
|
559
|
+
}
|
|
560
|
+
/**
|
|
561
|
+
* Headless confirmation hook. Returns state and handlers for building a confirm dialog.
|
|
562
|
+
*
|
|
563
|
+
* @example
|
|
564
|
+
* const { confirm, isOpen, options, handleConfirm, handleCancel } = useConfirm();
|
|
565
|
+
*
|
|
566
|
+
* // Trigger confirmation
|
|
567
|
+
* const ok = await confirm({ title: 'Delete item?', description: 'This cannot be undone.' });
|
|
568
|
+
*
|
|
569
|
+
* // Wire up your dialog
|
|
570
|
+
* <AlertDialog open={isOpen}>
|
|
571
|
+
* <AlertDialogContent>
|
|
572
|
+
* <AlertDialogTitle>{options.title}</AlertDialogTitle>
|
|
573
|
+
* <AlertDialogFooter>
|
|
574
|
+
* <AlertDialogCancel onClick={handleCancel} />
|
|
575
|
+
* <AlertDialogAction onClick={handleConfirm} />
|
|
576
|
+
* </AlertDialogFooter>
|
|
577
|
+
* </AlertDialogContent>
|
|
578
|
+
* </AlertDialog>
|
|
579
|
+
*/
|
|
580
|
+
declare function useConfirm(): UseConfirmReturn;
|
|
581
|
+
|
|
582
|
+
interface ConfirmDialogProps extends Pick<UseConfirmReturn, 'isOpen' | 'options' | 'handleConfirm' | 'handleCancel'> {
|
|
583
|
+
destructive?: boolean;
|
|
584
|
+
}
|
|
585
|
+
declare function ConfirmDialog({ isOpen, options, handleConfirm, handleCancel, destructive }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
|
|
586
|
+
|
|
587
|
+
interface GlassCardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
588
|
+
blur?: 'sm' | 'md' | 'lg';
|
|
589
|
+
children: React.ReactNode;
|
|
590
|
+
}
|
|
591
|
+
declare function GlassCard({ blur, className, children, ...props }: GlassCardProps): react_jsx_runtime.JSX.Element;
|
|
592
|
+
|
|
593
|
+
interface FeatureCardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
594
|
+
icon: LucideIcon;
|
|
595
|
+
title: string;
|
|
596
|
+
description: string;
|
|
597
|
+
href?: string;
|
|
598
|
+
}
|
|
599
|
+
declare function FeatureCard({ icon: Icon, title, description, href, className, ...props }: FeatureCardProps): react_jsx_runtime.JSX.Element;
|
|
600
|
+
|
|
601
|
+
interface StatCardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
602
|
+
value: string;
|
|
603
|
+
label: string;
|
|
604
|
+
delta?: string;
|
|
605
|
+
trend?: 'up' | 'down' | 'neutral';
|
|
606
|
+
description?: string;
|
|
607
|
+
}
|
|
608
|
+
declare function StatCard({ value, label, delta, trend, description, className, ...props }: StatCardProps): react_jsx_runtime.JSX.Element;
|
|
609
|
+
|
|
610
|
+
interface TestimonialCardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
611
|
+
quote: string;
|
|
612
|
+
name: string;
|
|
613
|
+
role: string;
|
|
614
|
+
company?: string;
|
|
615
|
+
avatar?: string;
|
|
616
|
+
initials?: string;
|
|
617
|
+
rating?: number;
|
|
618
|
+
}
|
|
619
|
+
declare function TestimonialCard({ quote, name, role, company, avatar, initials, rating, className, ...props }: TestimonialCardProps): react_jsx_runtime.JSX.Element;
|
|
620
|
+
|
|
621
|
+
interface ImageCardProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
622
|
+
src: string;
|
|
623
|
+
alt?: string;
|
|
624
|
+
overlay?: 'none' | 'subtle' | 'strong';
|
|
625
|
+
aspectRatio?: 'video' | 'square' | 'portrait' | 'auto';
|
|
626
|
+
children?: React.ReactNode;
|
|
627
|
+
}
|
|
628
|
+
declare function ImageCard({ src, alt, overlay, aspectRatio, children, className, ...props }: ImageCardProps): react_jsx_runtime.JSX.Element;
|
|
629
|
+
|
|
630
|
+
interface FullPageSpinnerProps {
|
|
631
|
+
message?: string;
|
|
632
|
+
}
|
|
633
|
+
declare function FullPageSpinner({ message }: FullPageSpinnerProps): react_jsx_runtime.JSX.Element;
|
|
634
|
+
|
|
635
|
+
interface PageHeaderBreadcrumb {
|
|
636
|
+
label: string;
|
|
637
|
+
href?: string;
|
|
638
|
+
}
|
|
639
|
+
interface PageHeaderBackButton {
|
|
640
|
+
label?: string;
|
|
641
|
+
href?: string;
|
|
642
|
+
onClick?: () => void;
|
|
643
|
+
}
|
|
644
|
+
interface PageHeaderProps {
|
|
645
|
+
title: string;
|
|
646
|
+
description?: string;
|
|
647
|
+
breadcrumbs?: PageHeaderBreadcrumb[];
|
|
648
|
+
backButton?: PageHeaderBackButton;
|
|
649
|
+
renderLink?: AppShellRenderLink;
|
|
650
|
+
className?: string;
|
|
651
|
+
children?: React.ReactNode;
|
|
652
|
+
}
|
|
653
|
+
declare function PageHeader({ title, description, breadcrumbs, backButton, renderLink, className, children, }: PageHeaderProps): react_jsx_runtime.JSX.Element;
|
|
654
|
+
|
|
655
|
+
interface SuspensedProps {
|
|
656
|
+
children: React.ReactNode;
|
|
657
|
+
fallback?: React.ReactNode;
|
|
658
|
+
}
|
|
659
|
+
declare function Suspensed({ children, fallback }: SuspensedProps): react_jsx_runtime.JSX.Element;
|
|
660
|
+
|
|
661
|
+
declare function ThemeSwitchMinimal(): react_jsx_runtime.JSX.Element;
|
|
662
|
+
|
|
663
|
+
interface ThemeColorUpdaterProps {
|
|
664
|
+
colorTheme?: string;
|
|
665
|
+
}
|
|
666
|
+
/**
|
|
667
|
+
* Applies a data-theme attribute to the document root when a color theme is selected.
|
|
668
|
+
* Use CSS selectors like `[data-theme="blue"] { --primary: ... }` to apply theme colors.
|
|
669
|
+
*/
|
|
670
|
+
declare function ThemeColorUpdater({ colorTheme }: ThemeColorUpdaterProps): null;
|
|
671
|
+
|
|
672
|
+
interface VersionBannerProps {
|
|
673
|
+
version: string;
|
|
674
|
+
message?: string;
|
|
675
|
+
className?: string;
|
|
676
|
+
onDismiss?: () => void;
|
|
677
|
+
}
|
|
678
|
+
declare function VersionBanner({ version, message, className, onDismiss }: VersionBannerProps): react_jsx_runtime.JSX.Element | null;
|
|
679
|
+
|
|
680
|
+
interface DevBannerProps {
|
|
681
|
+
environment?: string;
|
|
682
|
+
className?: string;
|
|
683
|
+
}
|
|
684
|
+
declare function DevBanner({ environment, className }: DevBannerProps): react_jsx_runtime.JSX.Element;
|
|
685
|
+
|
|
686
|
+
interface Hotkey {
|
|
687
|
+
key: string;
|
|
688
|
+
ctrl?: boolean;
|
|
689
|
+
meta?: boolean;
|
|
690
|
+
shift?: boolean;
|
|
691
|
+
alt?: boolean;
|
|
692
|
+
handler: () => void;
|
|
693
|
+
description?: string;
|
|
694
|
+
}
|
|
695
|
+
interface RegisterHotkeysProps {
|
|
696
|
+
hotkeys: Hotkey[];
|
|
697
|
+
}
|
|
698
|
+
declare function RegisterHotkeys({ hotkeys }: RegisterHotkeysProps): null;
|
|
699
|
+
|
|
700
|
+
interface RootErrorFallbackProps {
|
|
701
|
+
error: Error;
|
|
702
|
+
resetErrorBoundary?: () => void;
|
|
703
|
+
}
|
|
704
|
+
declare function RootErrorFallback({ error, resetErrorBoundary }: RootErrorFallbackProps): react_jsx_runtime.JSX.Element;
|
|
705
|
+
|
|
706
|
+
declare function useMounted(): boolean;
|
|
707
|
+
|
|
708
|
+
interface UseControlledOpenReturn {
|
|
709
|
+
isOpen: boolean;
|
|
710
|
+
open: () => void;
|
|
711
|
+
close: () => void;
|
|
712
|
+
toggle: () => void;
|
|
713
|
+
setIsOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
714
|
+
}
|
|
715
|
+
/**
|
|
716
|
+
* Simple open/close state hook for modals, drawers, dropdowns, and any toggleable UI.
|
|
717
|
+
*
|
|
718
|
+
* @example
|
|
719
|
+
* const { isOpen, open, close } = useControlledOpen();
|
|
720
|
+
* return (
|
|
721
|
+
* <>
|
|
722
|
+
* <Button onClick={open}>Open</Button>
|
|
723
|
+
* <Dialog open={isOpen} onOpenChange={setIsOpen}>...</Dialog>
|
|
724
|
+
* </>
|
|
725
|
+
* );
|
|
726
|
+
*/
|
|
727
|
+
declare function useControlledOpen(defaultOpen?: boolean): UseControlledOpenReturn;
|
|
728
|
+
|
|
729
|
+
/**
|
|
730
|
+
* Returns true when the page has scrolled past a given Y threshold in pixels.
|
|
731
|
+
* Useful for showing/hiding sticky headers, back-to-top buttons, etc.
|
|
732
|
+
*
|
|
733
|
+
* @example
|
|
734
|
+
* const scrolledPast = useScrolledPast(100);
|
|
735
|
+
* return <header className={scrolledPast ? 'shadow-md' : ''}>...</header>;
|
|
736
|
+
*/
|
|
737
|
+
declare function useScrolledPast(threshold: number): boolean;
|
|
738
|
+
|
|
739
|
+
declare function useCopyToClipboard(): [boolean, (text: string) => void];
|
|
740
|
+
|
|
741
|
+
declare function useDebounce<T>(value: T, delay: number): T;
|
|
742
|
+
|
|
743
|
+
declare function useIntersectionObserver(options?: IntersectionObserverInit): [React.RefObject<Element | null>, boolean];
|
|
744
|
+
|
|
745
|
+
declare function useLocalStorage<T>(key: string, initialValue: T): [T, (value: T) => void];
|
|
746
|
+
|
|
747
|
+
declare function useMediaQuery(query: string): boolean;
|
|
748
|
+
|
|
749
|
+
interface UsePaginationReturn {
|
|
750
|
+
page: number;
|
|
751
|
+
pageSize: number;
|
|
752
|
+
totalPages: number;
|
|
753
|
+
offset: number;
|
|
754
|
+
hasPrev: boolean;
|
|
755
|
+
hasNext: boolean;
|
|
756
|
+
goTo: (page: number) => void;
|
|
757
|
+
next: () => void;
|
|
758
|
+
prev: () => void;
|
|
759
|
+
}
|
|
760
|
+
declare function usePagination(total: number, pageSize: number): UsePaginationReturn;
|
|
761
|
+
|
|
762
|
+
export { type AppNavItem, AppShell, type AppShellAction, type AppShellBrand, type AppShellProps, type AppShellRenderLink, type AppShellUser, type AuthFormProps, AuthSection, type AuthSectionProps, Badge, type BadgeProps, Button, type ButtonProps, Card, type CardProps, Checkbox, type CheckboxProps, ConfirmDialog, type ConfirmDialogProps, type ConfirmOptions, ContactSection, ContextMenu, type ContextMenuDef, type ContextMenuProps, CountUp, type CountUpProps, CtaSection, type CtaSectionProps, DevBanner, type DevBannerProps, Dock, type DockItem, type DockProps, EmptyState, type EmptyStateProps, ErrorPage, type ErrorPageProps, FadeIn, type FadeInProps, FaqSection, type FaqSectionProps, FeatureCard, type FeatureCardProps, FeaturesSection, type FeaturesSectionProps, Footer, type FooterProps, FullPageSpinner, GlassCard, type GlassCardProps, HeroSection, type HeroSectionProps, type Hotkey, ImageCard, type ImageCardProps, Input, type InputProps, LogoStrip, type LogoStripProps, Navbar, type NavbarProps, NewsletterSection, OlwibaUIProvider, type OlwibaUIProviderProps, Overlay, type OverlayProps, type OverlayVariant, PageHeader, type PageHeaderBackButton, type PageHeaderBreadcrumb, type PageHeaderProps, PageTransition, type PageTransitionProps, PricingCard, type PricingCardProps, type PricingFeature, type PricingPlan, PricingSection, type PricingSectionProps, RegisterHotkeys, RootErrorFallback, SectionTitle, type SectionTitleProps, Spotlight, type SpotlightGroup, type SpotlightItem, type SpotlightProps, StaggerChildren, type StaggerChildrenProps, StatCard, type StatCardProps, StatsSection, type StatsSectionProps, Suspensed, Switch, type SwitchProps, TeamSection, TestimonialCard, type TestimonialCardProps, TestimonialsSection, type TestimonialsSectionProps, Textarea, type TextareaProps, ThemeColorUpdater, ThemeSwitchMinimal, type UIMode, Underlay, type UnderlayProps, type UnderlayVariant, type UpgradeComparisonRow, UpgradePrompt, type UpgradePromptProps, type UseConfirmReturn, type UseControlledOpenReturn, type UsePaginationReturn, VersionBanner, cn, useConfirm, useControlledOpen, useCopyToClipboard, useDebounce, useIntersectionObserver, useLocalStorage, useMediaQuery, useMounted, useOlwibaUI, usePagination, useScrolledPast, useUIMode };
|