@aws505/sheetsite 1.0.3 → 1.0.5

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.
@@ -0,0 +1,683 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { z } from 'zod';
3
+ import React from 'react';
4
+
5
+ /**
6
+ * SheetSite Data Types
7
+ *
8
+ * These types define the structure of data fetched from Google Sheets.
9
+ * All data flows through these types, providing type safety across the entire site.
10
+ */
11
+
12
+ declare const BusinessInfoSchema: z.ZodObject<{
13
+ name: z.ZodString;
14
+ tagline: z.ZodOptional<z.ZodString>;
15
+ description: z.ZodOptional<z.ZodString>;
16
+ aboutShort: z.ZodOptional<z.ZodString>;
17
+ aboutLong: z.ZodOptional<z.ZodString>;
18
+ phone: z.ZodOptional<z.ZodString>;
19
+ phoneAlt: z.ZodOptional<z.ZodString>;
20
+ email: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
21
+ addressLine1: z.ZodOptional<z.ZodString>;
22
+ addressLine2: z.ZodOptional<z.ZodString>;
23
+ city: z.ZodOptional<z.ZodString>;
24
+ state: z.ZodOptional<z.ZodString>;
25
+ zip: z.ZodOptional<z.ZodString>;
26
+ country: z.ZodDefault<z.ZodString>;
27
+ googleMapsUrl: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
28
+ mapsEmbedUrl: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
29
+ timezone: z.ZodDefault<z.ZodString>;
30
+ logoUrl: z.ZodOptional<z.ZodString>;
31
+ heroImageUrl: z.ZodOptional<z.ZodString>;
32
+ ogImageUrl: z.ZodOptional<z.ZodString>;
33
+ socialYelp: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
34
+ socialInstagram: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
35
+ socialFacebook: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
36
+ socialTwitter: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
37
+ socialLinkedIn: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
38
+ socialYoutube: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
39
+ socialTiktok: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
40
+ primaryCtaText: z.ZodOptional<z.ZodString>;
41
+ primaryCtaUrl: z.ZodOptional<z.ZodString>;
42
+ secondaryCtaText: z.ZodOptional<z.ZodString>;
43
+ secondaryCtaUrl: z.ZodOptional<z.ZodString>;
44
+ bookingUrl: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
45
+ bannerEnabled: z.ZodDefault<z.ZodBoolean>;
46
+ bannerText: z.ZodOptional<z.ZodString>;
47
+ bannerUrl: z.ZodOptional<z.ZodString>;
48
+ priceRange: z.ZodOptional<z.ZodEnum<["$", "$$", "$$$", "$$$$"]>>;
49
+ yearEstablished: z.ZodOptional<z.ZodNumber>;
50
+ licenseNumber: z.ZodOptional<z.ZodString>;
51
+ }, "strip", z.ZodTypeAny, {
52
+ name: string;
53
+ country: string;
54
+ timezone: string;
55
+ bannerEnabled: boolean;
56
+ tagline?: string | undefined;
57
+ description?: string | undefined;
58
+ aboutShort?: string | undefined;
59
+ aboutLong?: string | undefined;
60
+ phone?: string | undefined;
61
+ phoneAlt?: string | undefined;
62
+ email?: string | undefined;
63
+ addressLine1?: string | undefined;
64
+ addressLine2?: string | undefined;
65
+ city?: string | undefined;
66
+ state?: string | undefined;
67
+ zip?: string | undefined;
68
+ googleMapsUrl?: string | undefined;
69
+ mapsEmbedUrl?: string | undefined;
70
+ logoUrl?: string | undefined;
71
+ heroImageUrl?: string | undefined;
72
+ ogImageUrl?: string | undefined;
73
+ socialYelp?: string | undefined;
74
+ socialInstagram?: string | undefined;
75
+ socialFacebook?: string | undefined;
76
+ socialTwitter?: string | undefined;
77
+ socialLinkedIn?: string | undefined;
78
+ socialYoutube?: string | undefined;
79
+ socialTiktok?: string | undefined;
80
+ primaryCtaText?: string | undefined;
81
+ primaryCtaUrl?: string | undefined;
82
+ secondaryCtaText?: string | undefined;
83
+ secondaryCtaUrl?: string | undefined;
84
+ bookingUrl?: string | undefined;
85
+ bannerText?: string | undefined;
86
+ bannerUrl?: string | undefined;
87
+ priceRange?: "$" | "$$" | "$$$" | "$$$$" | undefined;
88
+ yearEstablished?: number | undefined;
89
+ licenseNumber?: string | undefined;
90
+ }, {
91
+ name: string;
92
+ tagline?: string | undefined;
93
+ description?: string | undefined;
94
+ aboutShort?: string | undefined;
95
+ aboutLong?: string | undefined;
96
+ phone?: string | undefined;
97
+ phoneAlt?: string | undefined;
98
+ email?: string | undefined;
99
+ addressLine1?: string | undefined;
100
+ addressLine2?: string | undefined;
101
+ city?: string | undefined;
102
+ state?: string | undefined;
103
+ zip?: string | undefined;
104
+ country?: string | undefined;
105
+ googleMapsUrl?: string | undefined;
106
+ mapsEmbedUrl?: string | undefined;
107
+ timezone?: string | undefined;
108
+ logoUrl?: string | undefined;
109
+ heroImageUrl?: string | undefined;
110
+ ogImageUrl?: string | undefined;
111
+ socialYelp?: string | undefined;
112
+ socialInstagram?: string | undefined;
113
+ socialFacebook?: string | undefined;
114
+ socialTwitter?: string | undefined;
115
+ socialLinkedIn?: string | undefined;
116
+ socialYoutube?: string | undefined;
117
+ socialTiktok?: string | undefined;
118
+ primaryCtaText?: string | undefined;
119
+ primaryCtaUrl?: string | undefined;
120
+ secondaryCtaText?: string | undefined;
121
+ secondaryCtaUrl?: string | undefined;
122
+ bookingUrl?: string | undefined;
123
+ bannerEnabled?: boolean | undefined;
124
+ bannerText?: string | undefined;
125
+ bannerUrl?: string | undefined;
126
+ priceRange?: "$" | "$$" | "$$$" | "$$$$" | undefined;
127
+ yearEstablished?: number | undefined;
128
+ licenseNumber?: string | undefined;
129
+ }>;
130
+ type BusinessInfo = z.infer<typeof BusinessInfoSchema>;
131
+ declare const HoursEntrySchema: z.ZodObject<{
132
+ day: z.ZodEnum<["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]>;
133
+ open: z.ZodOptional<z.ZodString>;
134
+ close: z.ZodOptional<z.ZodString>;
135
+ closed: z.ZodDefault<z.ZodBoolean>;
136
+ }, "strip", z.ZodTypeAny, {
137
+ day: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday";
138
+ closed: boolean;
139
+ open?: string | undefined;
140
+ close?: string | undefined;
141
+ }, {
142
+ day: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday";
143
+ open?: string | undefined;
144
+ close?: string | undefined;
145
+ closed?: boolean | undefined;
146
+ }>;
147
+ type HoursEntry = z.infer<typeof HoursEntrySchema>;
148
+ declare const ServiceSchema: z.ZodObject<{
149
+ id: z.ZodOptional<z.ZodString>;
150
+ title: z.ZodString;
151
+ description: z.ZodOptional<z.ZodString>;
152
+ priceNote: z.ZodOptional<z.ZodString>;
153
+ price: z.ZodOptional<z.ZodNumber>;
154
+ duration: z.ZodOptional<z.ZodString>;
155
+ icon: z.ZodOptional<z.ZodString>;
156
+ imageUrl: z.ZodOptional<z.ZodString>;
157
+ featured: z.ZodDefault<z.ZodBoolean>;
158
+ sortOrder: z.ZodDefault<z.ZodNumber>;
159
+ category: z.ZodOptional<z.ZodString>;
160
+ }, "strip", z.ZodTypeAny, {
161
+ title: string;
162
+ featured: boolean;
163
+ sortOrder: number;
164
+ description?: string | undefined;
165
+ id?: string | undefined;
166
+ priceNote?: string | undefined;
167
+ price?: number | undefined;
168
+ duration?: string | undefined;
169
+ icon?: string | undefined;
170
+ imageUrl?: string | undefined;
171
+ category?: string | undefined;
172
+ }, {
173
+ title: string;
174
+ description?: string | undefined;
175
+ id?: string | undefined;
176
+ priceNote?: string | undefined;
177
+ price?: number | undefined;
178
+ duration?: string | undefined;
179
+ icon?: string | undefined;
180
+ imageUrl?: string | undefined;
181
+ featured?: boolean | undefined;
182
+ sortOrder?: number | undefined;
183
+ category?: string | undefined;
184
+ }>;
185
+ type Service = z.infer<typeof ServiceSchema>;
186
+ declare const GalleryItemSchema: z.ZodObject<{
187
+ id: z.ZodOptional<z.ZodString>;
188
+ imageUrl: z.ZodString;
189
+ alt: z.ZodOptional<z.ZodString>;
190
+ caption: z.ZodOptional<z.ZodString>;
191
+ featured: z.ZodDefault<z.ZodBoolean>;
192
+ sortOrder: z.ZodDefault<z.ZodNumber>;
193
+ category: z.ZodOptional<z.ZodString>;
194
+ }, "strip", z.ZodTypeAny, {
195
+ imageUrl: string;
196
+ featured: boolean;
197
+ sortOrder: number;
198
+ id?: string | undefined;
199
+ category?: string | undefined;
200
+ alt?: string | undefined;
201
+ caption?: string | undefined;
202
+ }, {
203
+ imageUrl: string;
204
+ id?: string | undefined;
205
+ featured?: boolean | undefined;
206
+ sortOrder?: number | undefined;
207
+ category?: string | undefined;
208
+ alt?: string | undefined;
209
+ caption?: string | undefined;
210
+ }>;
211
+ type GalleryItem = z.infer<typeof GalleryItemSchema>;
212
+ declare const TestimonialSchema: z.ZodObject<{
213
+ id: z.ZodOptional<z.ZodString>;
214
+ quote: z.ZodString;
215
+ name: z.ZodString;
216
+ context: z.ZodOptional<z.ZodString>;
217
+ rating: z.ZodOptional<z.ZodNumber>;
218
+ source: z.ZodOptional<z.ZodString>;
219
+ date: z.ZodOptional<z.ZodString>;
220
+ imageUrl: z.ZodOptional<z.ZodString>;
221
+ featured: z.ZodDefault<z.ZodBoolean>;
222
+ sortOrder: z.ZodDefault<z.ZodNumber>;
223
+ }, "strip", z.ZodTypeAny, {
224
+ name: string;
225
+ featured: boolean;
226
+ sortOrder: number;
227
+ quote: string;
228
+ date?: string | undefined;
229
+ id?: string | undefined;
230
+ imageUrl?: string | undefined;
231
+ context?: string | undefined;
232
+ rating?: number | undefined;
233
+ source?: string | undefined;
234
+ }, {
235
+ name: string;
236
+ quote: string;
237
+ date?: string | undefined;
238
+ id?: string | undefined;
239
+ imageUrl?: string | undefined;
240
+ featured?: boolean | undefined;
241
+ sortOrder?: number | undefined;
242
+ context?: string | undefined;
243
+ rating?: number | undefined;
244
+ source?: string | undefined;
245
+ }>;
246
+ type Testimonial = z.infer<typeof TestimonialSchema>;
247
+ declare const FAQItemSchema: z.ZodObject<{
248
+ id: z.ZodOptional<z.ZodString>;
249
+ question: z.ZodString;
250
+ answer: z.ZodString;
251
+ category: z.ZodOptional<z.ZodString>;
252
+ sortOrder: z.ZodDefault<z.ZodNumber>;
253
+ }, "strip", z.ZodTypeAny, {
254
+ sortOrder: number;
255
+ question: string;
256
+ answer: string;
257
+ id?: string | undefined;
258
+ category?: string | undefined;
259
+ }, {
260
+ question: string;
261
+ answer: string;
262
+ id?: string | undefined;
263
+ sortOrder?: number | undefined;
264
+ category?: string | undefined;
265
+ }>;
266
+ type FAQItem = z.infer<typeof FAQItemSchema>;
267
+ declare const MenuItemSchema: z.ZodObject<{
268
+ id: z.ZodOptional<z.ZodString>;
269
+ name: z.ZodString;
270
+ description: z.ZodOptional<z.ZodString>;
271
+ price: z.ZodOptional<z.ZodNumber>;
272
+ priceNote: z.ZodOptional<z.ZodString>;
273
+ category: z.ZodOptional<z.ZodString>;
274
+ imageUrl: z.ZodOptional<z.ZodString>;
275
+ dietary: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
276
+ featured: z.ZodDefault<z.ZodBoolean>;
277
+ available: z.ZodDefault<z.ZodBoolean>;
278
+ sortOrder: z.ZodDefault<z.ZodNumber>;
279
+ }, "strip", z.ZodTypeAny, {
280
+ name: string;
281
+ featured: boolean;
282
+ sortOrder: number;
283
+ available: boolean;
284
+ description?: string | undefined;
285
+ id?: string | undefined;
286
+ priceNote?: string | undefined;
287
+ price?: number | undefined;
288
+ imageUrl?: string | undefined;
289
+ category?: string | undefined;
290
+ dietary?: string[] | undefined;
291
+ }, {
292
+ name: string;
293
+ description?: string | undefined;
294
+ id?: string | undefined;
295
+ priceNote?: string | undefined;
296
+ price?: number | undefined;
297
+ imageUrl?: string | undefined;
298
+ featured?: boolean | undefined;
299
+ sortOrder?: number | undefined;
300
+ category?: string | undefined;
301
+ dietary?: string[] | undefined;
302
+ available?: boolean | undefined;
303
+ }>;
304
+ type MenuItem = z.infer<typeof MenuItemSchema>;
305
+
306
+ interface NavItem {
307
+ label: string;
308
+ href: string;
309
+ }
310
+ interface HeaderProps {
311
+ business: BusinessInfo;
312
+ navigation?: NavItem[];
313
+ sticky?: boolean;
314
+ transparent?: boolean;
315
+ showPhone?: boolean;
316
+ className?: string;
317
+ }
318
+ /**
319
+ * Header component.
320
+ */
321
+ declare function Header({ business, navigation, sticky, transparent, showPhone, className, }: HeaderProps): react_jsx_runtime.JSX.Element;
322
+
323
+ interface FooterLink {
324
+ label: string;
325
+ href: string;
326
+ }
327
+ interface FooterProps {
328
+ business: BusinessInfo;
329
+ hours?: HoursEntry[];
330
+ quickLinks?: FooterLink[];
331
+ showHours?: boolean;
332
+ showSocial?: boolean;
333
+ variant?: 'simple' | 'columns' | 'centered';
334
+ className?: string;
335
+ }
336
+ /**
337
+ * Footer component.
338
+ */
339
+ declare function Footer({ business, hours, quickLinks, showHours, showSocial, variant, className, }: FooterProps): react_jsx_runtime.JSX.Element;
340
+
341
+ interface HeroProps {
342
+ business: BusinessInfo;
343
+ variant?: 'centered' | 'left' | 'split';
344
+ showOpenStatus?: boolean;
345
+ isOpen?: boolean;
346
+ todayHours?: string;
347
+ backgroundImage?: string;
348
+ overlay?: boolean;
349
+ className?: string;
350
+ /** Custom trust signals/selling points. Defaults based on business type if not provided. */
351
+ trustSignals?: string[];
352
+ }
353
+ declare function Hero({ business, variant, showOpenStatus, isOpen, todayHours, backgroundImage, overlay, className, trustSignals, }: HeroProps): react_jsx_runtime.JSX.Element;
354
+
355
+ interface ServicesProps {
356
+ services: Service[];
357
+ title?: string;
358
+ subtitle?: string;
359
+ columns?: 2 | 3 | 4;
360
+ showPrices?: boolean;
361
+ showIcons?: boolean;
362
+ variant?: 'cards' | 'list' | 'minimal';
363
+ limit?: number;
364
+ className?: string;
365
+ id?: string;
366
+ }
367
+ /**
368
+ * Services section component.
369
+ */
370
+ declare function Services({ services, title, subtitle, columns, showPrices, showIcons, variant, limit, className, id, }: ServicesProps): react_jsx_runtime.JSX.Element;
371
+
372
+ interface TestimonialsProps {
373
+ testimonials: Testimonial[];
374
+ title?: string;
375
+ subtitle?: string;
376
+ columns?: 1 | 2 | 3;
377
+ showRatings?: boolean;
378
+ variant?: 'cards' | 'quotes' | 'minimal';
379
+ limit?: number;
380
+ className?: string;
381
+ id?: string;
382
+ }
383
+ /**
384
+ * Testimonials section component.
385
+ */
386
+ declare function Testimonials({ testimonials, title, subtitle, columns, showRatings, variant, limit, className, id, }: TestimonialsProps): react_jsx_runtime.JSX.Element;
387
+
388
+ interface FAQProps {
389
+ items: FAQItem[];
390
+ title?: string;
391
+ subtitle?: string;
392
+ variant?: 'accordion' | 'cards' | 'simple';
393
+ defaultOpen?: number | number[];
394
+ allowMultiple?: boolean;
395
+ className?: string;
396
+ id?: string;
397
+ }
398
+ /**
399
+ * FAQ section component.
400
+ */
401
+ declare function FAQ({ items, title, subtitle, variant, defaultOpen, allowMultiple, className, id, }: FAQProps): react_jsx_runtime.JSX.Element;
402
+
403
+ interface HoursProps {
404
+ hours: HoursEntry[];
405
+ title?: string;
406
+ highlightToday?: boolean;
407
+ variant?: 'card' | 'inline' | 'minimal';
408
+ timezone?: string;
409
+ className?: string;
410
+ id?: string;
411
+ }
412
+ /**
413
+ * Hours section component.
414
+ */
415
+ declare function Hours({ hours, title, highlightToday, variant, timezone, className, id, }: HoursProps): react_jsx_runtime.JSX.Element;
416
+ /**
417
+ * Get today's hours text.
418
+ */
419
+ declare function getTodayHours(hours: HoursEntry[], timezone?: string): string | null;
420
+ /**
421
+ * Check if currently open.
422
+ */
423
+ declare function isCurrentlyOpen(hours: HoursEntry[], timezone?: string): boolean;
424
+
425
+ interface GalleryProps {
426
+ items: GalleryItem[];
427
+ title?: string;
428
+ subtitle?: string;
429
+ columns?: 2 | 3 | 4;
430
+ variant?: 'grid' | 'masonry' | 'carousel';
431
+ showCaptions?: boolean;
432
+ enableLightbox?: boolean;
433
+ limit?: number;
434
+ className?: string;
435
+ id?: string;
436
+ }
437
+ /**
438
+ * Gallery section component.
439
+ */
440
+ declare function Gallery({ items, title, subtitle, columns, variant, showCaptions, enableLightbox, limit, className, id, }: GalleryProps): react_jsx_runtime.JSX.Element;
441
+
442
+ interface MenuProps {
443
+ items: MenuItem[];
444
+ title?: string;
445
+ subtitle?: string;
446
+ showCategories?: boolean;
447
+ showImages?: boolean;
448
+ showDietary?: boolean;
449
+ variant?: 'cards' | 'list' | 'compact';
450
+ columns?: 1 | 2 | 3;
451
+ className?: string;
452
+ id?: string;
453
+ }
454
+ /**
455
+ * Menu section component.
456
+ */
457
+ declare function Menu({ items, title, subtitle, showCategories, showImages, showDietary, variant, columns, className, id, }: MenuProps): react_jsx_runtime.JSX.Element;
458
+
459
+ /**
460
+ * Trust Badges Section Component
461
+ *
462
+ * Displays certifications, awards, affiliations, and trust indicators.
463
+ */
464
+ interface TrustBadge {
465
+ id?: string;
466
+ name: string;
467
+ description?: string;
468
+ imageUrl?: string;
469
+ icon?: string;
470
+ year?: string;
471
+ link?: string;
472
+ featured?: boolean;
473
+ sortOrder?: number;
474
+ }
475
+ interface TrustBadgesProps {
476
+ badges: TrustBadge[];
477
+ title?: string;
478
+ subtitle?: string;
479
+ variant?: 'grid' | 'inline' | 'cards';
480
+ columns?: 3 | 4 | 5 | 6;
481
+ showDescriptions?: boolean;
482
+ className?: string;
483
+ id?: string;
484
+ }
485
+ /**
486
+ * Trust badges section component.
487
+ */
488
+ declare function TrustBadges({ badges, title, subtitle, variant, columns, showDescriptions, className, id, }: TrustBadgesProps): react_jsx_runtime.JSX.Element;
489
+
490
+ /**
491
+ * Before/After Gallery Section Component
492
+ *
493
+ * Displays before and after images with an interactive slider.
494
+ * Perfect for tailors, home services, beauty services, etc.
495
+ */
496
+ interface BeforeAfterItem {
497
+ id?: string;
498
+ beforeImageUrl: string;
499
+ afterImageUrl: string;
500
+ beforeAlt?: string;
501
+ afterAlt?: string;
502
+ title?: string;
503
+ description?: string;
504
+ category?: string;
505
+ featured?: boolean;
506
+ sortOrder?: number;
507
+ }
508
+ interface BeforeAfterProps {
509
+ items: BeforeAfterItem[];
510
+ title?: string;
511
+ subtitle?: string;
512
+ columns?: 1 | 2 | 3;
513
+ variant?: 'slider' | 'side-by-side' | 'stacked';
514
+ showCategories?: boolean;
515
+ className?: string;
516
+ id?: string;
517
+ }
518
+ /**
519
+ * Before/After gallery section component.
520
+ */
521
+ declare function BeforeAfter({ items, title, subtitle, columns, variant, showCategories, className, id, }: BeforeAfterProps): react_jsx_runtime.JSX.Element;
522
+
523
+ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
524
+ variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'link';
525
+ size?: 'sm' | 'md' | 'lg';
526
+ fullWidth?: boolean;
527
+ loading?: boolean;
528
+ leftIcon?: React.ReactNode;
529
+ rightIcon?: React.ReactNode;
530
+ }
531
+ /**
532
+ * Button component with multiple variants and sizes.
533
+ */
534
+ declare function Button({ variant, size, fullWidth, loading, leftIcon, rightIcon, children, disabled, className, ...props }: ButtonProps): react_jsx_runtime.JSX.Element;
535
+ /**
536
+ * Link styled as a button.
537
+ */
538
+ interface ButtonLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
539
+ variant?: ButtonProps['variant'];
540
+ size?: ButtonProps['size'];
541
+ fullWidth?: boolean;
542
+ leftIcon?: React.ReactNode;
543
+ rightIcon?: React.ReactNode;
544
+ }
545
+ declare function ButtonLink({ variant, size, fullWidth, leftIcon, rightIcon, children, className, ...props }: ButtonLinkProps): react_jsx_runtime.JSX.Element;
546
+
547
+ interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
548
+ variant?: 'default' | 'elevated' | 'outlined' | 'filled';
549
+ padding?: 'none' | 'sm' | 'md' | 'lg';
550
+ hover?: boolean;
551
+ }
552
+ /**
553
+ * Card component for containing content.
554
+ */
555
+ declare function Card({ variant, padding, hover, children, className, ...props }: CardProps): react_jsx_runtime.JSX.Element;
556
+ /**
557
+ * Card header section.
558
+ */
559
+ interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
560
+ title?: string;
561
+ subtitle?: string;
562
+ action?: React.ReactNode;
563
+ }
564
+ declare function CardHeader({ title, subtitle, action, children, className, ...props }: CardHeaderProps): react_jsx_runtime.JSX.Element;
565
+ /**
566
+ * Card body section.
567
+ */
568
+ declare function CardBody({ children, className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
569
+ /**
570
+ * Card footer section.
571
+ */
572
+ declare function CardFooter({ children, className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
573
+ /**
574
+ * Card image section.
575
+ */
576
+ interface CardImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {
577
+ aspectRatio?: 'square' | 'video' | 'wide' | 'auto';
578
+ }
579
+ declare function CardImage({ aspectRatio, className, alt, ...props }: CardImageProps): react_jsx_runtime.JSX.Element;
580
+
581
+ interface IconProps {
582
+ className?: string;
583
+ size?: number;
584
+ 'aria-hidden'?: boolean;
585
+ }
586
+ declare function PhoneIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
587
+ declare function MailIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
588
+ declare function MapPinIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
589
+ declare function ClockIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
590
+ declare function StarIcon({ className, size, filled, ...props }: IconProps & {
591
+ filled?: boolean;
592
+ }): react_jsx_runtime.JSX.Element;
593
+ declare function ChevronDownIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
594
+ declare function ChevronRightIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
595
+ declare function MenuIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
596
+ declare function XIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
597
+ declare function CheckIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
598
+ declare function ScissorsIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
599
+ declare function WrenchIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
600
+ declare function SparklesIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
601
+ declare function HeartIcon({ className, size, filled, ...props }: IconProps & {
602
+ filled?: boolean;
603
+ }): react_jsx_runtime.JSX.Element;
604
+ declare function UtensilsIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
605
+ declare function CakeIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
606
+ declare function BriefcaseIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
607
+ declare function YelpIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
608
+ declare function InstagramIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
609
+ declare function FacebookIcon({ className, size, ...props }: IconProps): react_jsx_runtime.JSX.Element;
610
+ /**
611
+ * Map of icon names to components.
612
+ * Use this to render icons dynamically based on string names.
613
+ */
614
+ declare const iconMap: Record<string, React.FC<IconProps>>;
615
+ /**
616
+ * Get an icon component by name.
617
+ */
618
+ declare function getIcon(name: string): React.FC<IconProps> | null;
619
+ /**
620
+ * Render an icon by name.
621
+ */
622
+ declare function Icon({ name, ...props }: IconProps & {
623
+ name: string;
624
+ }): react_jsx_runtime.JSX.Element | null;
625
+
626
+ interface AnimatedSectionProps {
627
+ children: React.ReactNode;
628
+ animation?: 'fade-up' | 'fade-down' | 'fade-left' | 'fade-right' | 'zoom' | 'none';
629
+ delay?: number;
630
+ duration?: number;
631
+ threshold?: number;
632
+ once?: boolean;
633
+ className?: string;
634
+ as?: React.ElementType;
635
+ }
636
+ /**
637
+ * Animated section wrapper with scroll-triggered animations.
638
+ */
639
+ declare function AnimatedSection({ children, animation, delay, duration, threshold, once, className, as: Component, }: AnimatedSectionProps): react_jsx_runtime.JSX.Element;
640
+ /**
641
+ * Stagger animation container - animates children with increasing delays.
642
+ */
643
+ interface StaggerContainerProps {
644
+ children: React.ReactNode;
645
+ staggerDelay?: number;
646
+ animation?: AnimatedSectionProps['animation'];
647
+ duration?: number;
648
+ className?: string;
649
+ }
650
+ declare function StaggerContainer({ children, staggerDelay, animation, duration, className, }: StaggerContainerProps): react_jsx_runtime.JSX.Element;
651
+
652
+ /**
653
+ * Floating Claim Banner Component
654
+ *
655
+ * A floating notification banner for business owners to claim their website.
656
+ * Used for sales outreach purposes.
657
+ */
658
+ interface FloatingClaimBannerProps {
659
+ /** The email address to send claim requests to */
660
+ contactEmail?: string;
661
+ /** The site URL to include in the email subject (defaults to window.location.hostname) */
662
+ siteUrl?: string;
663
+ /** Business name for the email */
664
+ businessName?: string;
665
+ /** Position of the banner */
666
+ position?: 'bottom-right' | 'bottom-left' | 'bottom-center';
667
+ /** Delay before showing the banner (ms) */
668
+ showDelay?: number;
669
+ /** Whether the banner can be dismissed */
670
+ dismissible?: boolean;
671
+ /** Custom message text */
672
+ message?: string;
673
+ /** Custom button text */
674
+ buttonText?: string;
675
+ /** Custom class name */
676
+ className?: string;
677
+ }
678
+ /**
679
+ * Floating banner for business owners to claim their site.
680
+ */
681
+ declare function FloatingClaimBanner({ contactEmail, siteUrl, businessName, position, showDelay, dismissible, message, buttonText, className, }: FloatingClaimBannerProps): react_jsx_runtime.JSX.Element | null;
682
+
683
+ export { AnimatedSection, type AnimatedSectionProps, BeforeAfter, type BeforeAfterItem, type BeforeAfterProps, BriefcaseIcon, Button, ButtonLink, type ButtonLinkProps, type ButtonProps, CakeIcon, Card, CardBody, CardFooter, CardHeader, type CardHeaderProps, CardImage, type CardImageProps, type CardProps, CheckIcon, ChevronDownIcon, ChevronRightIcon, ClockIcon, FAQ, type FAQProps, FacebookIcon, FloatingClaimBanner, type FloatingClaimBannerProps, Footer, type FooterLink, type FooterProps, Gallery, type GalleryProps, Header, type HeaderProps, HeartIcon, Hero, type HeroProps, Hours, type HoursProps, Icon, type IconProps, InstagramIcon, MailIcon, MapPinIcon, Menu, MenuIcon, type MenuProps, type NavItem, PhoneIcon, ScissorsIcon, Services, type ServicesProps, SparklesIcon, StaggerContainer, type StaggerContainerProps, StarIcon, Testimonials, type TestimonialsProps, type TrustBadge, TrustBadges, type TrustBadgesProps, UtensilsIcon, WrenchIcon, XIcon, YelpIcon, getIcon, getTodayHours, iconMap, isCurrentlyOpen };