@ekoru/ui 0.1.2 → 0.1.4

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/dist/index.d.mts CHANGED
@@ -1,28 +1,866 @@
1
1
  import * as class_variance_authority_types from 'class-variance-authority/types';
2
- import * as React from 'react';
2
+ import * as React$1 from 'react';
3
+ import React__default, { ComponentType } from 'react';
3
4
  import { VariantProps } from 'class-variance-authority';
5
+ import { LucideIcon } from 'lucide-react';
6
+ import * as react_jsx_runtime from 'react/jsx-runtime';
4
7
  import { ClassValue } from 'clsx';
5
8
 
9
+ declare const adBannerVariants: (props?: ({
10
+ variant?: "primary" | "secondary" | "outlined" | "ghost" | null | undefined;
11
+ animated?: boolean | null | undefined;
12
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
13
+ interface AdBannerProps extends Omit<React$1.HTMLAttributes<HTMLElement>, 'onDrag' | 'onDragEnd' | 'onDragStart' | 'onAnimationStart' | 'onAnimationEnd'>, VariantProps<typeof adBannerVariants> {
14
+ icon?: LucideIcon;
15
+ title?: string;
16
+ description?: string;
17
+ cta: React$1.ReactNode;
18
+ }
19
+ declare const AdBanner: React$1.ForwardRefExoticComponent<AdBannerProps & React$1.RefAttributes<HTMLDivElement>>;
20
+
21
+ declare const bannerVariants: (props?: ({
22
+ variant?: "primary" | "secondary" | "outlined" | "ghost" | null | undefined;
23
+ animated?: boolean | null | undefined;
24
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
25
+ interface BannerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'onDrag' | 'onDragEnd' | 'onDragStart' | 'onAnimationStart' | 'onAnimationEnd'>, VariantProps<typeof bannerVariants> {
26
+ /**
27
+ * The main title text of the banner
28
+ */
29
+ title: string;
30
+ /**
31
+ * The description text of the banner
32
+ */
33
+ description: string;
34
+ /**
35
+ * Whether to show decorative dots around the title
36
+ */
37
+ showDots?: boolean;
38
+ }
39
+ declare const Banner: React$1.ForwardRefExoticComponent<BannerProps & React$1.RefAttributes<HTMLDivElement>>;
40
+
6
41
  declare const buttonVariants: (props?: ({
7
- variant?: "primary" | "secondary" | "outline" | "ghost" | "success" | "warning" | "error" | null | undefined;
42
+ variant?: "primary" | "secondary" | "ghost" | "outline" | "secondary_outline" | "success" | "warning" | "error" | null | undefined;
8
43
  size?: "sm" | "md" | "lg" | null | undefined;
9
44
  fullWidth?: boolean | null | undefined;
10
45
  } & class_variance_authority_types.ClassProp) | undefined) => string;
11
- interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onDrag' | 'onDragEnd' | 'onDragStart' | 'onAnimationStart' | 'onAnimationEnd'>, VariantProps<typeof buttonVariants> {
46
+ interface ButtonProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, 'onDrag' | 'onDragEnd' | 'onDragStart' | 'onAnimationStart' | 'onAnimationEnd'>, VariantProps<typeof buttonVariants> {
12
47
  /**
13
48
  * If true, the button will show a loading spinner
14
49
  */
15
50
  isLoading?: boolean;
51
+ loadingText?: string;
16
52
  /**
17
53
  * Icon to display before the button text (can be a lucide-react component or JSX element)
18
54
  */
19
- leftIcon?: React.ElementType | React.ReactElement;
55
+ leftIcon?: React$1.ElementType | React$1.ReactElement;
20
56
  /**
21
57
  * Icon to display after the button text (can be a lucide-react component or JSX element)
22
58
  */
23
- rightIcon?: React.ElementType | React.ReactElement;
59
+ rightIcon?: React$1.ElementType | React$1.ReactElement;
60
+ }
61
+ declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
62
+
63
+ interface CardProps {
64
+ title: string;
65
+ description?: string;
66
+ cta?: React.ReactNode;
67
+ image?: React.ReactNode;
68
+ hasBadge?: boolean;
69
+ badgeText?: string;
70
+ badgeColor?: string;
71
+ textColor?: string;
72
+ }
73
+ declare function Card({ image, title, description, cta, hasBadge, badgeText, badgeColor, textColor, }: CardProps): react_jsx_runtime.JSX.Element;
74
+
75
+ declare const containerVariants: (props?: ({
76
+ variant?: "default" | "compact" | "centered" | null | undefined;
77
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
78
+ interface CarouselProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>, 'children'>, VariantProps<typeof containerVariants> {
79
+ header?: React__default.ReactNode;
80
+ description?: React__default.ReactNode;
81
+ link?: React__default.ReactNode;
82
+ items?: React__default.ReactNode[];
83
+ children?: React__default.ReactNode;
84
+ }
85
+ declare function Carousel({ header, description, link, items, children, variant, className, ...props }: CarouselProps): react_jsx_runtime.JSX.Element;
86
+
87
+ declare const checkboxVariants: (props?: ({
88
+ variant?: "outline" | "default" | "filled" | null | undefined;
89
+ size?: "sm" | "md" | "lg" | null | undefined;
90
+ checked?: boolean | null | undefined;
91
+ disabled?: boolean | null | undefined;
92
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
93
+ type CheckboxVariantProps = VariantProps<typeof checkboxVariants>;
94
+ interface CheckboxProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, 'size'>, Omit<CheckboxVariantProps, 'checked' | 'disabled'> {
95
+ /**
96
+ * Checkbox label text
97
+ */
98
+ label?: string;
99
+ /**
100
+ * Optional description text below the label
101
+ */
102
+ description?: string;
103
+ /**
104
+ * Error message to display
105
+ */
106
+ errorMessage?: string;
107
+ /**
108
+ * Whether the checkbox is checked
109
+ */
110
+ checked?: boolean;
111
+ /**
112
+ * Callback when checkbox state changes
113
+ */
114
+ onCheckedChange?: (checked: boolean) => void;
115
+ }
116
+ declare const Checkbox: React$1.ForwardRefExoticComponent<CheckboxProps & React$1.RefAttributes<HTMLInputElement>>;
117
+
118
+ interface EnvironmentalImpactModalProps {
119
+ isOpen?: boolean;
120
+ onClose?: () => void;
121
+ environmentalImpact: {
122
+ totalCo2SavingsKG: number;
123
+ totalWaterSavingsLT: number;
124
+ materialBreakdown: Array<{
125
+ materialType: string;
126
+ percentage: number;
127
+ weightKG: number;
128
+ co2SavingsKG: number;
129
+ waterSavingsLT: number;
130
+ }>;
131
+ };
132
+ co2SavingsTitle?: string;
133
+ waterSavingsTitle?: string;
134
+ weightLabel?: string;
135
+ co2SavingsLabel?: string;
136
+ waterSavingsLabel?: string;
137
+ materialBreakdownLabel?: string;
138
+ co2EquivalenceLabel?: string;
139
+ waterEquivalenceLabel?: string;
140
+ infoText?: string;
141
+ carDistanceLabel?: string;
142
+ showerCountLabel?: string;
143
+ }
144
+ declare function EnvironmentalImpactModal({ isOpen, onClose, environmentalImpact, co2SavingsTitle, waterSavingsTitle, weightLabel, co2SavingsLabel, waterSavingsLabel, materialBreakdownLabel, carDistanceLabel, showerCountLabel, co2EquivalenceLabel, waterEquivalenceLabel, infoText, }: EnvironmentalImpactModalProps): react_jsx_runtime.JSX.Element;
145
+
146
+ interface FooterProps {
147
+ brand?: React.ReactNode;
148
+ socialLinks?: Array<React.ReactNode>;
149
+ description?: string;
150
+ exploreLabel?: string;
151
+ communityLabel?: string;
152
+ legalLabel?: string;
153
+ exploreItems?: Array<React.ReactNode>;
154
+ communityItems?: Array<React.ReactNode>;
155
+ legalItems?: Array<React.ReactNode>;
156
+ copyRightText?: string;
157
+ }
158
+ declare function Footer({ brand, socialLinks, description, exploreItems, exploreLabel, communityItems, communityLabel, legalItems, legalLabel, copyRightText, }: FooterProps): react_jsx_runtime.JSX.Element;
159
+
160
+ interface HeroCarouselProps {
161
+ banners: {
162
+ id: string;
163
+ title: string;
164
+ subtitle: string;
165
+ description: string;
166
+ image: string;
167
+ bgColor: string;
168
+ }[];
169
+ ImageComponent?: ComponentType<{
170
+ src: string;
171
+ alt: string;
172
+ width?: number;
173
+ height?: number;
174
+ priority?: boolean;
175
+ className?: string;
176
+ }>;
177
+ autoScrollInterval?: number;
178
+ }
179
+ declare function HeroCarousel({ banners, ImageComponent, autoScrollInterval, }: HeroCarouselProps): react_jsx_runtime.JSX.Element;
180
+
181
+ declare const modalVariants: (props?: ({
182
+ size?: "sm" | "md" | "lg" | "xl" | "full" | null | undefined;
183
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
184
+ interface ModalProps extends VariantProps<typeof modalVariants> {
185
+ isOpen?: boolean;
186
+ onClose?: () => void;
187
+ children: React.ReactNode;
188
+ title?: string;
189
+ showCloseButton?: boolean;
190
+ closeOnOverlayClick?: boolean;
191
+ closeOnEscape?: boolean;
192
+ className?: string;
193
+ }
194
+ declare function Modal({ isOpen, onClose, children, title, size, showCloseButton, closeOnOverlayClick, closeOnEscape, className, }: ModalProps): React$1.ReactPortal | null;
195
+
196
+ interface NavbarProps {
197
+ brand?: React__default.ReactNode;
198
+ navigationIcons?: Array<React__default.ReactNode>;
199
+ navigationLinks?: Array<React__default.ReactNode>;
200
+ searchPlaceholder?: string;
201
+ onSearch?: (query: string) => void;
202
+ mobileMenuContent?: React__default.ReactNode;
203
+ className?: string;
204
+ searchEnabled?: boolean;
205
+ sideMenuTitle?: string;
206
+ navbarAriaLabel?: string;
207
+ userActionsAriaLabel?: string;
208
+ toggleMobileMenuAriaLabel?: string;
209
+ closeMobileMenuAriaLabel?: string;
210
+ mobileMenuTitleAriaLabel?: string;
211
+ }
212
+ declare function Navbar({ navigationIcons, navigationLinks, brand, searchPlaceholder, onSearch, mobileMenuContent, className, searchEnabled, sideMenuTitle, navbarAriaLabel, userActionsAriaLabel, toggleMobileMenuAriaLabel, closeMobileMenuAriaLabel, mobileMenuTitleAriaLabel, }: NavbarProps): react_jsx_runtime.JSX.Element;
213
+
214
+ declare const paginationButtonVariants: (props?: ({
215
+ variant?: "primary" | "outline" | "default" | null | undefined;
216
+ size?: "sm" | "md" | "lg" | null | undefined;
217
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
218
+ type PaginationVariantProps = VariantProps<typeof paginationButtonVariants>;
219
+ interface PaginationProps extends PaginationVariantProps {
220
+ /**
221
+ * Current active page (1-indexed)
222
+ */
223
+ currentPage: number;
224
+ /**
225
+ * Total number of pages
226
+ */
227
+ totalPages: number;
228
+ /**
229
+ * Callback when page changes
230
+ */
231
+ onPageChange: (page: number) => void;
232
+ /**
233
+ * Items per page value
234
+ */
235
+ itemsPerPage?: number;
236
+ /**
237
+ * Callback when items per page changes
238
+ */
239
+ onItemsPerPageChange?: (pageSize: number) => void;
240
+ /**
241
+ * Label for the previous button
242
+ */
243
+ previousLabel?: string;
244
+ /**
245
+ * Label for the next button
246
+ */
247
+ nextLabel?: string;
248
+ /**
249
+ * Show items per page selector
250
+ */
251
+ showItemsPerPage?: boolean;
252
+ /**
253
+ * Available items per page options
254
+ */
255
+ itemsPerPageOptions?: number[];
256
+ /**
257
+ * Show page info text
258
+ */
259
+ showPageInfo?: boolean;
260
+ /**
261
+ * Custom page info text template
262
+ */
263
+ pageInfoTemplate?: string;
264
+ /**
265
+ * Show icons in buttons
266
+ */
267
+ showIcons?: boolean;
268
+ /**
269
+ * Additional CSS classes
270
+ */
271
+ className?: string;
272
+ rowsLabel?: string;
273
+ previousAriaLabel?: string;
274
+ nextAriaLabel?: string;
275
+ }
276
+ declare const Pagination: React$1.ForwardRefExoticComponent<PaginationProps & React$1.RefAttributes<HTMLDivElement>>;
277
+
278
+ declare enum PersonSubscriptionPlan {
279
+ FREEMIUM = "FREEMIUM",
280
+ BASIC = "BASIC",
281
+ ADVANCED = "ADVANCED"
282
+ }
283
+ type BusinessSubscriptionPlan = 'FREEMIUM' | 'STARTUP' | 'BASIC' | 'ADVANCED' | 'EXPERT';
284
+ declare enum SellerType {
285
+ PERSON = "PERSON",
286
+ STARTUP = "STARTUP",
287
+ COMPANY = "COMPANY"
288
+ }
289
+ declare enum BusinessType {
290
+ RETAIL = "RETAIL",
291
+ SERVICES = "SERVICES",
292
+ MIXED = "MIXED"
293
+ }
294
+ declare enum ProductCondition {
295
+ NEW = "NEW",
296
+ OPEN_BOX = "OPEN_BOX",
297
+ LIKE_NEW = "LIKE_NEW",
298
+ FAIR = "FAIR",
299
+ POOR = "POOR",
300
+ FOR_PARTS = "FOR_PARTS",
301
+ REFURBISHED = "REFURBISHED"
302
+ }
303
+ declare enum ProductSize {
304
+ XS = "XS",
305
+ S = "S",
306
+ M = "M",
307
+ L = "L",
308
+ XL = "XL"
309
+ }
310
+ declare enum Badge {
311
+ POPULAR = "POPULAR",
312
+ DISCOUNTED = "DISCOUNTED",
313
+ WOMAN_OWNED = "WOMAN_OWNED",
314
+ BEST_SELLER = "BEST_SELLER",
315
+ TOP_RATED = "TOP_RATED",
316
+ COMMUNITY_FAVORITE = "COMMUNITY_FAVORITE",
317
+ LIMITED_TIME_OFFER = "LIMITED_TIME_OFFER",
318
+ FLASH_SALE = "FLASH_SALE",
319
+ BEST_VALUE = "BEST_VALUE",
320
+ HANDMADE = "HANDMADE",
321
+ SUSTAINABLE = "SUSTAINABLE",
322
+ SUPPORTS_CAUSE = "SUPPORTS_CAUSE",
323
+ FAMILY_BUSINESS = "FAMILY_BUSINESS",
324
+ CHARITY_SUPPORT = "CHARITY_SUPPORT",
325
+ LIMITED_STOCK = "LIMITED_STOCK",
326
+ SEASONAL = "SEASONAL",
327
+ FREE_SHIPPING = "FREE_SHIPPING",
328
+ FOR_REPAIR = "FOR_REPAIR",
329
+ REFURBISHED = "REFURBISHED",
330
+ EXCHANGEABLE = "EXCHANGEABLE",
331
+ LAST_PRICE = "LAST_PRICE",
332
+ FOR_GIFT = "FOR_GIFT",
333
+ OPEN_TO_OFFERS = "OPEN_TO_OFFERS",
334
+ OPEN_BOX = "OPEN_BOX",
335
+ CRUELTY_FREE = "CRUELTY_FREE",
336
+ DELIVERED_TO_HOME = "DELIVERED_TO_HOME",
337
+ IN_HOUSE_PICKUP = "IN_HOUSE_PICKUP",
338
+ IN_MID_POINT_PICKUP = "IN_MID_POINT_PICKUP"
339
+ }
340
+ declare enum ContactMethod {
341
+ EMAIL = "EMAIL",
342
+ WHATSAPP = "WHATSAPP",
343
+ PHONE = "PHONE",
344
+ INSTAGRAM = "INSTAGRAM",
345
+ FACEBOOK = "FACEBOOK",
346
+ WEBSITE = "WEBSITE",
347
+ TIKTOK = "TIKTOK"
348
+ }
349
+ declare enum WeightUnit {
350
+ KG = "KG",
351
+ LB = "LB",
352
+ OZ = "OZ",
353
+ G = "G"
354
+ }
355
+
356
+ type Country = {
357
+ id: number;
358
+ country: string;
359
+ countryConfig?: CountryConfig;
360
+ };
361
+ type Region = {
362
+ id: number;
363
+ region: string;
364
+ countryId: number;
365
+ };
366
+ type City = {
367
+ id: number;
368
+ city: string;
369
+ regionId: number;
370
+ };
371
+ type County = {
372
+ id: number;
373
+ county: string;
374
+ cityId: number;
375
+ };
376
+ type CountryConfig = {
377
+ id: number;
378
+ countryId: number;
379
+ countryCode: string;
380
+ currencyCode: string;
381
+ currencySymbol: string;
382
+ taxIdLabel: string;
383
+ taxIdFormat?: string;
384
+ defaultTimezone: string;
385
+ defaultLocale: string;
386
+ isActive: boolean;
387
+ phonePrefix: string;
388
+ availablePaymentProviders: Record<string, unknown>;
389
+ createdAt: string;
390
+ updatedAt: string;
391
+ };
392
+
393
+ type Seller = {
394
+ id: string;
395
+ email: string;
396
+ password?: string;
397
+ sellerType: SellerType;
398
+ isActive: boolean;
399
+ isVerified: boolean;
400
+ createdAt: string;
401
+ updatedAt: string;
402
+ profile: PersonProfile | BusinessProfile;
403
+ address?: string;
404
+ cityId?: number;
405
+ countryId?: number;
406
+ countyId?: number;
407
+ regionId?: number;
408
+ county?: County;
409
+ region?: Region;
410
+ country?: Country;
411
+ city?: City;
412
+ phone?: string;
413
+ website?: string;
414
+ preferredContactMethod?: ContactMethod;
415
+ socialMediaLinks?: Record<string, string>;
416
+ points: number;
417
+ sellerLevelId?: number;
418
+ sellerLevel?: SellerLevel;
419
+ sellerCategoryId?: number;
420
+ sellerCategory?: SellerCategory;
421
+ };
422
+ type PersonProfile = {
423
+ __typename: 'PersonProfile';
424
+ id: string;
425
+ sellerId: string;
426
+ firstName: string;
427
+ lastName?: string;
428
+ displayName?: string;
429
+ bio?: string;
430
+ birthday?: string;
431
+ profileImage?: string;
432
+ coverImage?: string;
433
+ allowExchanges: boolean;
434
+ personSubscriptionPlan: PersonSubscriptionPlan;
435
+ };
436
+ type BusinessProfile = {
437
+ __typename: 'BusinessProfile';
438
+ id: string;
439
+ sellerId: string;
440
+ businessName: string;
441
+ description?: string;
442
+ logo?: string;
443
+ coverImage?: string;
444
+ businessType: BusinessType;
445
+ legalBusinessName?: string;
446
+ taxId?: string;
447
+ businessStartDate?: string;
448
+ legalRepresentative?: string;
449
+ legalRepresentativeTaxId?: string;
450
+ shippingPolicy?: string;
451
+ returnPolicy?: string;
452
+ serviceArea?: string;
453
+ yearsOfExperience?: number;
454
+ certifications?: string[];
455
+ travelRadius?: number;
456
+ businessHours?: Record<string, unknown>;
457
+ businessSubscriptionPlan: BusinessSubscriptionPlan;
458
+ createdAt: string;
459
+ updatedAt: string;
460
+ };
461
+ type SellerCategory = {
462
+ id: number;
463
+ name: string;
464
+ categoryDiscountAmount: number;
465
+ pointsThreshold: number;
466
+ level: number;
467
+ };
468
+ type SellerLevel = {
469
+ id: number;
470
+ levelName: string;
471
+ minPoints: number;
472
+ maxPoints?: number;
473
+ benefits?: Record<string, unknown>;
474
+ badgeIcon?: string;
475
+ createdAt: string;
476
+ updatedAt: string;
477
+ };
478
+
479
+ interface MaterialImpactEstimate {
480
+ id: number;
481
+ materialType: string;
482
+ estimatedCo2SavingsKG: number;
483
+ estimatedWaterSavingsLT: number;
484
+ }
485
+ interface ProductCategoryMaterial {
486
+ id: number;
487
+ productCategoryId: number;
488
+ materialTypeId: number;
489
+ quantity: number;
490
+ unit: string;
491
+ isPrimary: boolean;
492
+ createdAt: string;
493
+ updatedAt: string;
494
+ material: MaterialImpactEstimate;
495
+ }
496
+ interface ProductCategory {
497
+ id: number;
498
+ departmentCategoryId: number;
499
+ keywords: string[];
500
+ productCategoryName: string;
501
+ size?: ProductSize;
502
+ averageWeight?: number;
503
+ weightUnit?: WeightUnit;
504
+ products?: MarketplaceProduct[];
505
+ materials?: ProductCategoryMaterial[];
506
+ href: string;
507
+ }
508
+ interface MarketplaceProduct {
509
+ id: number;
510
+ name: string;
511
+ description: string;
512
+ price: number;
513
+ sellerId: string;
514
+ badges: Badge[];
515
+ brand: string;
516
+ color?: string;
517
+ createdAt: string;
518
+ images: string[];
519
+ interests: string[];
520
+ isActive: boolean;
521
+ isExchangeable: boolean;
522
+ productCategoryId: number;
523
+ updatedAt: string;
524
+ condition: ProductCondition;
525
+ conditionDescription?: string;
526
+ deletedAt?: string;
527
+ seller?: Partial<Seller>;
528
+ /** Environmental impact summary, may come from product category or store category */
529
+ environmentalImpact?: EnvironmentalImpact | undefined;
530
+ productCategory?: ProductCategory;
531
+ }
532
+ type StoreProduct = {
533
+ id: number;
534
+ name: string;
535
+ description: string;
536
+ stock: number;
537
+ barcode?: string;
538
+ sku?: string;
539
+ price: number;
540
+ hasOffer: boolean;
541
+ offerPrice?: number;
542
+ sellerId: string;
543
+ seller: Partial<Seller>;
544
+ createdAt: string;
545
+ images: string[];
546
+ isActive: boolean;
547
+ updatedAt: string;
548
+ badges: Badge[];
549
+ brand?: string;
550
+ color?: string;
551
+ ratingCount: number;
552
+ averageRating: number;
553
+ reviewsNumber: number;
554
+ storeSubCategoryId: number;
555
+ storeSubCategory: StoreSubCategory;
556
+ /** Environmental impact summary, may come from product category or store category */
557
+ environmentalImpact?: EnvironmentalImpact | undefined;
558
+ deletedAt?: string;
559
+ };
560
+ interface MaterialBreakdown {
561
+ materialType: string;
562
+ percentage: number;
563
+ weightKG?: number;
564
+ co2SavingsKG?: number;
565
+ waterSavingsLT?: number;
566
+ }
567
+ interface EnvironmentalImpact {
568
+ totalCo2SavingsKG: number;
569
+ totalWaterSavingsLT: number;
570
+ materialBreakdown: MaterialBreakdown[];
571
+ }
572
+ type StoreProductMaterial = {
573
+ id: number;
574
+ storeProductId: number;
575
+ materialTypeId: number;
576
+ quantity: number;
577
+ unit: string;
578
+ isPrimary: boolean;
579
+ createdAt: string;
580
+ updatedAt: string;
581
+ };
582
+ type StoreCategory = {
583
+ id: number;
584
+ category: string;
585
+ subcategories: StoreSubCategory[];
586
+ href: string;
587
+ };
588
+ type StoreSubCategory = {
589
+ id: number;
590
+ storeCategoryId: number;
591
+ subCategory: string;
592
+ storeCategory: StoreCategory;
593
+ products: StoreProduct[];
594
+ href: string;
595
+ materials: StoreProductMaterial[];
596
+ };
597
+
598
+ interface ProductCardProps {
599
+ product: Partial<MarketplaceProduct> | Partial<StoreProduct>;
600
+ }
601
+ declare function ProductCard({ product }: ProductCardProps): react_jsx_runtime.JSX.Element;
602
+
603
+ interface FrontSideProps {
604
+ isFlipped: boolean;
605
+ setIsFlipped: (flipped: boolean) => void;
606
+ onCardClick: () => void;
607
+ productImage?: React.ReactNode;
608
+ fallbackImage?: React.ReactNode;
609
+ productCondition?: string;
610
+ brand?: string;
611
+ name?: string;
612
+ description?: string;
613
+ price?: number;
614
+ color?: string;
615
+ isExchangeable?: boolean;
616
+ isStoreProduct?: boolean;
617
+ interests?: string[];
618
+ hasOffer?: boolean;
619
+ offerLabel?: string;
620
+ offerPrice?: number;
621
+ localeString?: string;
622
+ onAddToCart?: () => void;
623
+ onExchange?: () => void;
624
+ addToCartAriaLabel?: string;
625
+ exchangeAriaLabel?: string;
626
+ addToCartLabel?: string;
627
+ exchangeLabel?: string;
628
+ }
629
+ declare function CardFrontSide({ isFlipped, setIsFlipped, onCardClick, productImage, fallbackImage, productCondition, brand, name, description, price, color, isExchangeable, isStoreProduct, hasOffer, offerPrice, onAddToCart, onExchange, addToCartAriaLabel, exchangeAriaLabel, offerLabel, localeString, addToCartLabel, exchangeLabel, interests, }: FrontSideProps): react_jsx_runtime.JSX.Element;
630
+
631
+ interface BackSideProps {
632
+ isFlipped: boolean;
633
+ setIsFlipped: (flipped: boolean) => void;
634
+ setShowImpactModal: (show: boolean) => void;
635
+ sellerName?: string;
636
+ sellerPhone?: string;
637
+ sellerAddress?: string;
638
+ environmentalImpact?: ProductCategoryMaterial[] | StoreProductMaterial[] | EnvironmentalImpactModalProps['environmentalImpact'];
639
+ impactLabel?: string;
640
+ materialsLabel?: string;
641
+ viewMoreLabel?: string;
642
+ sellerLabel?: string;
643
+ co2Label?: string;
644
+ waterLabel?: string;
645
+ }
646
+ declare function CardBackSide({ isFlipped, setIsFlipped, setShowImpactModal, environmentalImpact, sellerName, sellerPhone, sellerAddress, impactLabel, materialsLabel, viewMoreLabel, sellerLabel, co2Label, waterLabel, }: BackSideProps): react_jsx_runtime.JSX.Element;
647
+
648
+ declare const selectVariants: (props?: ({
649
+ variant?: "outline" | "default" | "filled" | null | undefined;
650
+ size?: "sm" | "md" | "lg" | null | undefined;
651
+ hasError?: boolean | null | undefined;
652
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
653
+ type SelectVariantProps = VariantProps<typeof selectVariants>;
654
+ type Option = {
655
+ label: string;
656
+ value: string | number;
657
+ iconColor?: string;
658
+ };
659
+ interface SelectProps extends Omit<SelectVariantProps, 'hasError'> {
660
+ /**
661
+ * Array of options to display in the dropdown
662
+ */
663
+ options?: Option[];
664
+ /**
665
+ * Label text displayed above the select
666
+ */
667
+ label?: string;
668
+ /**
669
+ * Icon component to display on the left side
670
+ */
671
+ leftIcon?: LucideIcon;
672
+ /**
673
+ * Error message to display below the select
674
+ */
675
+ errorMessage?: string;
676
+ /**
677
+ * Selected value
678
+ */
679
+ value?: string | number;
680
+ /**
681
+ * Name attribute for form handling
682
+ */
683
+ name?: string;
684
+ /**
685
+ * Placeholder text when no value is selected
686
+ */
687
+ placeholder?: string;
688
+ /**
689
+ * Callback when selection changes
690
+ */
691
+ onChange?: (value: string | number) => void;
692
+ /**
693
+ * Width variant of the select container
694
+ */
695
+ width?: 'sm' | 'md' | 'lg' | 'full';
696
+ /**
697
+ * Whether the select is disabled
698
+ */
699
+ disabled?: boolean;
700
+ /**
701
+ * Whether the select is read-only
702
+ */
703
+ readOnly?: boolean;
704
+ /**
705
+ * Whether to show color circles for options
706
+ */
707
+ showColorIcon?: boolean;
708
+ /**
709
+ * Custom render function for options
710
+ */
711
+ renderOption?: (option: Option, selected: boolean) => React$1.ReactNode;
712
+ /**
713
+ * Whether to enable search/filter functionality
714
+ */
715
+ searchEnabled?: boolean;
716
+ /**
717
+ * Direction for dropdown expansion
718
+ */
719
+ dropdownDirection?: 'up' | 'down';
720
+ /**
721
+ * Additional CSS classes
722
+ */
723
+ className?: string;
724
+ /**
725
+ * No results text
726
+ */
727
+ noResultsText?: string;
728
+ }
729
+ declare const Select: React$1.ForwardRefExoticComponent<SelectProps & React$1.RefAttributes<HTMLButtonElement>>;
730
+
731
+ interface StatsCardProps {
732
+ icon: LucideIcon;
733
+ mainText: string | number;
734
+ description: string;
735
+ }
736
+ declare function StatsCard({ icon: Icon, mainText, description, }: StatsCardProps): react_jsx_runtime.JSX.Element;
737
+
738
+ declare const tableVariants: (props?: ({
739
+ variant?: "outlined" | "default" | null | undefined;
740
+ size?: "sm" | "md" | "lg" | null | undefined;
741
+ striped?: boolean | null | undefined;
742
+ hover?: boolean | null | undefined;
743
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
744
+ type Column<T> = {
745
+ key: string;
746
+ header: React$1.ReactNode;
747
+ /** optional custom cell renderer (value, row) */
748
+ render?: (value: unknown, row: T) => React$1.ReactNode;
749
+ className?: string;
750
+ };
751
+ interface TableProps<T> extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'children'>, VariantProps<typeof tableVariants> {
752
+ columns: Column<T>[];
753
+ data: T[];
754
+ rowKey?: (row: T) => string | number;
755
+ emptyMessage?: React$1.ReactNode;
756
+ }
757
+ declare const Table: React$1.ForwardRefExoticComponent<TableProps<Record<string, unknown>> & React$1.RefAttributes<HTMLDivElement>>;
758
+
759
+ declare const textVariants: (props?: ({
760
+ variant?: "blockquote" | "code" | "label" | "p" | "small" | "span" | null | undefined;
761
+ size?: "base" | "sm" | "lg" | "xl" | "xs" | null | undefined;
762
+ weight?: "bold" | "normal" | "medium" | "semibold" | null | undefined;
763
+ color?: "primary" | "secondary" | "default" | "success" | "warning" | "error" | "tertiary" | "muted" | null | undefined;
764
+ align?: "center" | "left" | "right" | "justify" | null | undefined;
765
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
766
+ type TextVariantProps = VariantProps<typeof textVariants>;
767
+ interface TextProps extends Omit<React$1.HTMLAttributes<HTMLElement>, 'color'>, TextVariantProps {
768
+ /**
769
+ * The HTML element to render
770
+ */
771
+ variant?: 'p' | 'span' | 'label' | 'blockquote' | 'small' | 'code';
772
+ /**
773
+ * Content to display
774
+ */
775
+ children: React$1.ReactNode;
776
+ /**
777
+ * For label variant - associates label with input
778
+ */
779
+ htmlFor?: string;
780
+ /**
781
+ * Render as a different element while maintaining variant styling
782
+ */
783
+ as?: 'p' | 'span' | 'label' | 'blockquote' | 'small' | 'div' | 'code';
784
+ }
785
+ declare const Text: React$1.ForwardRefExoticComponent<TextProps & React$1.RefAttributes<HTMLElement>>;
786
+
787
+ declare const textareaVariants: (props?: ({
788
+ variant?: "outline" | "default" | "filled" | null | undefined;
789
+ textSize?: "sm" | "md" | "lg" | null | undefined;
790
+ hasError?: boolean | null | undefined;
791
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
792
+ type TextareaVariantProps = VariantProps<typeof textareaVariants>;
793
+ interface TextareaProps extends Omit<React$1.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'>, Omit<TextareaVariantProps, 'hasError'> {
794
+ /**
795
+ * Label text displayed above the textarea
796
+ */
797
+ label?: string;
798
+ /**
799
+ * Error message to display below the textarea
800
+ */
801
+ errorMessage?: string;
802
+ /**
803
+ * Whether to show character count
804
+ */
805
+ showCharCount?: boolean;
806
+ /**
807
+ * Width variant of the textarea container
808
+ */
809
+ width?: 'sm' | 'md' | 'lg' | 'full';
810
+ }
811
+ declare const Textarea: React$1.ForwardRefExoticComponent<TextareaProps & React$1.RefAttributes<HTMLTextAreaElement>>;
812
+
813
+ declare const inputVariants: (props?: ({
814
+ variant?: "outline" | "default" | "filled" | null | undefined;
815
+ size?: "sm" | "md" | "lg" | null | undefined;
816
+ hasError?: boolean | null | undefined;
817
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
818
+ interface TextInputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, 'size' | 'onChange'>, VariantProps<typeof inputVariants> {
819
+ /**
820
+ * Label text displayed above the input
821
+ */
822
+ label?: string;
823
+ /**
824
+ * Icon component to display on the left side
825
+ */
826
+ leftIcon?: LucideIcon;
827
+ /**
828
+ * Error message to display below the input
829
+ */
830
+ errorMessage?: string;
831
+ /**
832
+ * Callback function when input value changes
833
+ */
834
+ onChange?: (e: React$1.ChangeEvent<HTMLInputElement>) => void;
835
+ /**
836
+ * Width variant of the input container
837
+ */
838
+ width?: 'sm' | 'md' | 'lg' | 'full';
839
+ }
840
+ declare const TextInput: React$1.ForwardRefExoticComponent<TextInputProps & React$1.RefAttributes<HTMLInputElement>>;
841
+
842
+ declare const titleVariants: (props?: ({
843
+ level?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | null | undefined;
844
+ weight?: "bold" | "normal" | "medium" | "semibold" | "extrabold" | null | undefined;
845
+ color?: "primary" | "secondary" | "default" | "success" | "warning" | "error" | "tertiary" | null | undefined;
846
+ align?: "center" | "left" | "right" | null | undefined;
847
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
848
+ type TitleVariantProps = VariantProps<typeof titleVariants>;
849
+ interface TitleProps extends Omit<React$1.HTMLAttributes<HTMLHeadingElement>, 'color'>, TitleVariantProps {
850
+ /**
851
+ * The semantic heading level to render
852
+ */
853
+ level?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
854
+ /**
855
+ * Content to display
856
+ */
857
+ children: React$1.ReactNode;
858
+ /**
859
+ * Whether to render as a different heading level for styling while maintaining semantic meaning
860
+ */
861
+ as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
24
862
  }
25
- declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
863
+ declare const Title: React$1.ForwardRefExoticComponent<TitleProps & React$1.RefAttributes<HTMLHeadingElement>>;
26
864
 
27
865
  /**
28
866
  * Utility function to merge Tailwind CSS classes
@@ -33,4 +871,4 @@ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAtt
33
871
  */
34
872
  declare function cn(...inputs: ClassValue[]): string;
35
873
 
36
- export { Button, type ButtonProps, buttonVariants, cn };
874
+ export { AdBanner, type AdBannerProps, type BackSideProps, Banner, type BannerProps, Button, type ButtonProps, Card, CardBackSide, CardFrontSide, type CardProps, Carousel, type CarouselProps, Checkbox, type CheckboxProps, type Column, EnvironmentalImpactModal, type EnvironmentalImpactModalProps, Footer, type FooterProps, type FrontSideProps, HeroCarousel, type HeroCarouselProps, Modal, type ModalProps, Navbar, type NavbarProps, type Option, Pagination, type PaginationProps, ProductCard, type ProductCardProps, Select, type SelectProps, StatsCard, type StatsCardProps, Table, type TableProps, Text, TextInput, type TextInputProps, type TextProps, Textarea, type TextareaProps, Title, type TitleProps, bannerVariants, buttonVariants, checkboxVariants, cn, inputVariants, paginationButtonVariants, selectVariants, tableVariants, textVariants, textareaVariants, titleVariants };