@opensite/ui 2.8.6 → 2.8.8

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.
Files changed (143) hide show
  1. package/dist/about-developer-profile.cjs +17 -10
  2. package/dist/about-developer-profile.js +17 -10
  3. package/dist/article-chapters-author.cjs +17 -10
  4. package/dist/article-chapters-author.js +17 -10
  5. package/dist/carousel-animated-sections.cjs +79 -25
  6. package/dist/carousel-animated-sections.d.cts +7 -2
  7. package/dist/carousel-animated-sections.d.ts +7 -2
  8. package/dist/carousel-animated-sections.js +79 -25
  9. package/dist/carousel-gallery-thumbnails.cjs +79 -25
  10. package/dist/carousel-gallery-thumbnails.d.cts +7 -2
  11. package/dist/carousel-gallery-thumbnails.d.ts +7 -2
  12. package/dist/carousel-gallery-thumbnails.js +79 -25
  13. package/dist/carousel-icon-sidebar.cjs +5 -4
  14. package/dist/carousel-icon-sidebar.js +5 -4
  15. package/dist/carousel-portfolio-hero.cjs +79 -25
  16. package/dist/carousel-portfolio-hero.d.cts +7 -2
  17. package/dist/carousel-portfolio-hero.d.ts +7 -2
  18. package/dist/carousel-portfolio-hero.js +79 -25
  19. package/dist/components.cjs +81 -42
  20. package/dist/components.d.cts +29 -2
  21. package/dist/components.d.ts +29 -2
  22. package/dist/components.js +81 -43
  23. package/dist/contact-map.cjs +46 -32
  24. package/dist/contact-map.js +46 -32
  25. package/dist/footer-accordion-social.cjs +17 -10
  26. package/dist/footer-accordion-social.js +17 -10
  27. package/dist/footer-animated-social.cjs +17 -10
  28. package/dist/footer-animated-social.js +17 -10
  29. package/dist/footer-brand-description.cjs +17 -10
  30. package/dist/footer-brand-description.js +17 -10
  31. package/dist/footer-brand-links-contact.cjs +17 -10
  32. package/dist/footer-brand-links-contact.js +17 -10
  33. package/dist/footer-comprehensive-links.cjs +17 -10
  34. package/dist/footer-comprehensive-links.js +17 -10
  35. package/dist/footer-contact-card.cjs +17 -10
  36. package/dist/footer-contact-card.js +17 -10
  37. package/dist/footer-cta-banner.cjs +17 -10
  38. package/dist/footer-cta-banner.js +17 -10
  39. package/dist/footer-cta-social.cjs +17 -10
  40. package/dist/footer-cta-social.js +17 -10
  41. package/dist/footer-info-cards-accordion.cjs +17 -10
  42. package/dist/footer-info-cards-accordion.js +17 -10
  43. package/dist/footer-nav-social.cjs +17 -10
  44. package/dist/footer-nav-social.js +17 -10
  45. package/dist/footer-newsletter-contact.cjs +17 -10
  46. package/dist/footer-newsletter-contact.js +17 -10
  47. package/dist/footer-newsletter-grid.cjs +17 -10
  48. package/dist/footer-newsletter-grid.js +17 -10
  49. package/dist/footer-newsletter-minimal.cjs +17 -10
  50. package/dist/footer-newsletter-minimal.js +17 -10
  51. package/dist/footer-social-apps.cjs +17 -10
  52. package/dist/footer-social-apps.js +17 -10
  53. package/dist/footer-social-newsletter.cjs +17 -10
  54. package/dist/footer-social-newsletter.js +17 -10
  55. package/dist/footer-split-image-accordion.cjs +17 -10
  56. package/dist/footer-split-image-accordion.js +17 -10
  57. package/dist/geo-map.cjs +46 -32
  58. package/dist/geo-map.js +46 -32
  59. package/dist/hero-coming-soon-countdown.cjs +17 -10
  60. package/dist/hero-coming-soon-countdown.js +17 -10
  61. package/dist/hero-video-background-dark.cjs +78 -16
  62. package/dist/hero-video-background-dark.d.cts +7 -2
  63. package/dist/hero-video-background-dark.d.ts +7 -2
  64. package/dist/hero-video-background-dark.js +78 -16
  65. package/dist/index.cjs +81 -42
  66. package/dist/index.d.cts +1 -0
  67. package/dist/index.d.ts +1 -0
  68. package/dist/index.js +81 -43
  69. package/dist/link-page-bento-layout.cjs +17 -10
  70. package/dist/link-page-bento-layout.js +17 -10
  71. package/dist/link-page-grid-cards.cjs +17 -10
  72. package/dist/link-page-grid-cards.js +17 -10
  73. package/dist/link-page-minimal-profile.cjs +17 -10
  74. package/dist/link-page-minimal-profile.js +17 -10
  75. package/dist/link-page-newsletter-social.cjs +17 -10
  76. package/dist/link-page-newsletter-social.js +17 -10
  77. package/dist/link-tree-block.cjs +17 -10
  78. package/dist/link-tree-block.js +17 -10
  79. package/dist/navbar-fullscreen-menu.cjs +17 -10
  80. package/dist/navbar-fullscreen-menu.js +17 -10
  81. package/dist/navbar-transparent-overlay.cjs +17 -10
  82. package/dist/navbar-transparent-overlay.js +17 -10
  83. package/dist/registry.cjs +967 -620
  84. package/dist/registry.js +967 -620
  85. package/dist/social-link-icon.cjs +17 -10
  86. package/dist/social-link-icon.d.cts +5 -0
  87. package/dist/social-link-icon.d.ts +5 -0
  88. package/dist/social-link-icon.js +17 -10
  89. package/dist/testimonials-bento-grid.cjs +1 -1
  90. package/dist/testimonials-bento-grid.js +1 -1
  91. package/dist/testimonials-carousel-image.cjs +16 -2
  92. package/dist/testimonials-carousel-image.d.cts +5 -1
  93. package/dist/testimonials-carousel-image.d.ts +5 -1
  94. package/dist/testimonials-carousel-image.js +16 -2
  95. package/dist/testimonials-centered-avatars.cjs +1 -1
  96. package/dist/testimonials-centered-avatars.js +1 -1
  97. package/dist/testimonials-grid-add-review.cjs +51 -29
  98. package/dist/testimonials-grid-add-review.js +51 -29
  99. package/dist/testimonials-images-helpful.cjs +181 -160
  100. package/dist/testimonials-images-helpful.d.cts +9 -1
  101. package/dist/testimonials-images-helpful.d.ts +9 -1
  102. package/dist/testimonials-images-helpful.js +181 -159
  103. package/dist/testimonials-large-quote.cjs +74 -43
  104. package/dist/testimonials-large-quote.d.cts +5 -1
  105. package/dist/testimonials-large-quote.d.ts +5 -1
  106. package/dist/testimonials-large-quote.js +74 -43
  107. package/dist/testimonials-list-verified.cjs +63 -44
  108. package/dist/testimonials-list-verified.d.cts +5 -1
  109. package/dist/testimonials-list-verified.d.ts +5 -1
  110. package/dist/testimonials-list-verified.js +64 -45
  111. package/dist/testimonials-logo-cards.cjs +55 -25
  112. package/dist/testimonials-logo-cards.d.cts +5 -1
  113. package/dist/testimonials-logo-cards.d.ts +5 -1
  114. package/dist/testimonials-logo-cards.js +55 -25
  115. package/dist/testimonials-marquee.cjs +440 -28
  116. package/dist/testimonials-marquee.js +441 -26
  117. package/dist/testimonials-masonry-grid.cjs +486 -69
  118. package/dist/testimonials-masonry-grid.d.cts +5 -1
  119. package/dist/testimonials-masonry-grid.d.ts +5 -1
  120. package/dist/testimonials-masonry-grid.js +483 -63
  121. package/dist/testimonials-mini-dividers.cjs +119 -83
  122. package/dist/testimonials-mini-dividers.d.cts +10 -6
  123. package/dist/testimonials-mini-dividers.d.ts +10 -6
  124. package/dist/testimonials-mini-dividers.js +119 -83
  125. package/dist/testimonials-minimal-numbered.cjs +9 -7
  126. package/dist/testimonials-minimal-numbered.d.cts +5 -1
  127. package/dist/testimonials-minimal-numbered.d.ts +5 -1
  128. package/dist/testimonials-minimal-numbered.js +9 -7
  129. package/dist/testimonials-parallax-number.cjs +14 -9
  130. package/dist/testimonials-parallax-number.js +14 -9
  131. package/dist/testimonials-scrolling-columns.cjs +100 -21
  132. package/dist/testimonials-scrolling-columns.js +100 -21
  133. package/dist/testimonials-simple-grid.cjs +22 -5
  134. package/dist/testimonials-simple-grid.js +22 -5
  135. package/dist/testimonials-slider-minimal.cjs +1 -1
  136. package/dist/testimonials-slider-minimal.js +1 -1
  137. package/dist/testimonials-stats-header.cjs +528 -87
  138. package/dist/testimonials-stats-header.d.cts +39 -3
  139. package/dist/testimonials-stats-header.d.ts +39 -3
  140. package/dist/testimonials-stats-header.js +523 -82
  141. package/dist/testimonials-twitter-cards.cjs +20 -12
  142. package/dist/testimonials-twitter-cards.js +20 -12
  143. package/package.json +11 -1
@@ -41,6 +41,23 @@ var DynamicIcon = React__namespace.memo(function DynamicIcon2({
41
41
  return /* @__PURE__ */ jsxRuntime.jsx(icon.Icon, { ...props, apiKey: apiKey ?? DEFAULT_ICON_API_KEY });
42
42
  });
43
43
  DynamicIcon.displayName = "DynamicIcon";
44
+ function StarRating({
45
+ rating,
46
+ size = 18,
47
+ className
48
+ }) {
49
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex items-center gap-0.5", className), children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsxRuntime.jsx(
50
+ DynamicIcon,
51
+ {
52
+ name: "icon-park-solid/star",
53
+ size,
54
+ className: cn(
55
+ star <= rating ? "fill-primary text-primary" : "fill-muted text-muted"
56
+ )
57
+ },
58
+ star
59
+ )) });
60
+ }
44
61
  function Avatar({
45
62
  className,
46
63
  ...props
@@ -462,19 +479,6 @@ var Section = React__namespace.default.forwardRef(
462
479
  }
463
480
  );
464
481
  Section.displayName = "Section";
465
- function StarRating({ rating, size = 14 }) {
466
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-0.5", children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsxRuntime.jsx(
467
- DynamicIcon,
468
- {
469
- name: "lucide/star",
470
- size,
471
- className: cn(
472
- star <= rating ? "fill-primary text-primary" : "fill-muted text-muted"
473
- )
474
- },
475
- star
476
- )) });
477
- }
478
482
  function TestimonialsMiniDividers({
479
483
  testimonials,
480
484
  testimonialsSlot,
@@ -489,101 +493,133 @@ function TestimonialsMiniDividers({
489
493
  quoteClassName,
490
494
  authorClassName,
491
495
  background,
492
- spacing,
496
+ spacing = "lg",
497
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
493
498
  pattern,
494
499
  patternOpacity
495
500
  }) {
496
- const getAuthorName = React.useCallback((testimonial) => {
497
- if (typeof testimonial.author === "string") return testimonial.author;
498
- return "";
499
- }, []);
500
- const getAvatarSrc = React.useCallback((testimonial) => {
501
- return testimonial.avatarSrc || testimonial.avatar?.src;
502
- }, []);
501
+ const getAuthorName = React.useCallback(
502
+ (testimonial) => {
503
+ if (typeof testimonial.author === "string") return testimonial.author;
504
+ return "";
505
+ },
506
+ []
507
+ );
508
+ const getAvatarSrc = React.useCallback(
509
+ (testimonial) => {
510
+ return testimonial.avatarSrc || testimonial.avatar?.src;
511
+ },
512
+ []
513
+ );
503
514
  const getInitials = React.useCallback((name) => {
504
515
  return name.split(" ").map((n) => n[0]).join("");
505
516
  }, []);
506
517
  const renderedTestimonials = React.useMemo(() => {
507
518
  if (testimonialsSlot) return testimonialsSlot;
508
519
  if (!testimonials || testimonials.length === 0) return null;
509
- return /* @__PURE__ */ jsxRuntime.jsx(
520
+ return /* @__PURE__ */ jsxRuntime.jsxs(
510
521
  "div",
511
522
  {
512
523
  className: cn(
513
- "grid divide-y sm:grid-cols-2 sm:divide-x sm:divide-y-0 lg:grid-cols-3 lg:divide-x",
524
+ "relative grid border-x border-b border-dashed md:grid-cols-3",
514
525
  gridClassName
515
526
  ),
516
- children: testimonials.map((testimonial, index) => {
517
- const authorName = getAuthorName(testimonial);
518
- const avatarSrc = getAvatarSrc(testimonial);
519
- return /* @__PURE__ */ jsxRuntime.jsxs(
520
- "div",
527
+ children: [
528
+ /* @__PURE__ */ jsxRuntime.jsx(
529
+ DynamicIcon,
521
530
  {
522
- className: cn(
523
- "p-6",
524
- index >= 2 && "lg:border-t-0",
525
- index >= 3 && "sm:border-t lg:border-t-0",
526
- itemClassName
527
- ),
528
- children: [
529
- testimonial.rating && /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: testimonial.rating }),
530
- testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
531
- "p",
532
- {
533
- className: cn(
534
- "mt-3 text-sm leading-relaxed",
535
- quoteClassName
536
- ),
537
- children: [
538
- "\u201C",
539
- testimonial.quote,
540
- "\u201D"
541
- ]
542
- }
543
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-3", quoteClassName), children: testimonial.quote })),
544
- /* @__PURE__ */ jsxRuntime.jsxs(
545
- "div",
546
- {
547
- className: cn("mt-4 flex items-center gap-3", authorClassName),
548
- children: [
549
- /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-8", children: [
550
- /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
551
- /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "text-xs", children: getInitials(authorName) })
552
- ] }),
553
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
554
- testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium", children: testimonial.author }) : testimonial.author),
555
- testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: testimonial.role }) : testimonial.role)
556
- ] })
557
- ]
558
- }
559
- )
560
- ]
561
- },
562
- index
563
- );
564
- })
531
+ name: "lucide/sparkle",
532
+ size: 20,
533
+ className: "absolute top-0 right-0 translate-x-2.5 -translate-y-2.5 fill-primary"
534
+ }
535
+ ),
536
+ /* @__PURE__ */ jsxRuntime.jsx(
537
+ DynamicIcon,
538
+ {
539
+ name: "lucide/sparkle",
540
+ size: 20,
541
+ className: "absolute top-0 left-0 -translate-x-2.5 -translate-y-2.5 fill-primary"
542
+ }
543
+ ),
544
+ testimonials.map((testimonial, index) => {
545
+ const authorName = getAuthorName(testimonial);
546
+ const avatarSrc = getAvatarSrc(testimonial);
547
+ return /* @__PURE__ */ jsxRuntime.jsxs(
548
+ "div",
549
+ {
550
+ className: cn(
551
+ "group flex flex-col gap-4 border-t border-dashed p-4 transition-colors duration-300 hover:bg-muted/50 lg:p-8",
552
+ index % 3 === 1 && "md:border-x md:border-dashed",
553
+ itemClassName
554
+ ),
555
+ children: [
556
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [
557
+ /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-10 shrink-0 rounded-md bg-card shadow-sm lg:size-12", children: [
558
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
559
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "rounded-md bg-card text-card-foreground text-sm", children: getInitials(authorName) })
560
+ ] }),
561
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("min-w-0", authorClassName), children: [
562
+ testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate font-medium", children: testimonial.author }) : testimonial.author),
563
+ testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-sm text-muted-foreground", children: testimonial.role }) : testimonial.role)
564
+ ] })
565
+ ] }),
566
+ testimonial.rating != null && /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: testimonial.rating }),
567
+ testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
568
+ "p",
569
+ {
570
+ className: cn(
571
+ "text-sm leading-relaxed text-muted-foreground",
572
+ quoteClassName
573
+ ),
574
+ children: [
575
+ "\u201C",
576
+ testimonial.quote,
577
+ "\u201D"
578
+ ]
579
+ }
580
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm", quoteClassName), children: testimonial.quote }))
581
+ ]
582
+ },
583
+ index
584
+ );
585
+ })
586
+ ]
565
587
  }
566
588
  );
567
- }, [testimonialsSlot, gridClassName, testimonials, itemClassName, quoteClassName, authorClassName, getAuthorName, getAvatarSrc, getInitials]);
568
- return /* @__PURE__ */ jsxRuntime.jsxs(
589
+ }, [
590
+ testimonialsSlot,
591
+ gridClassName,
592
+ testimonials,
593
+ itemClassName,
594
+ quoteClassName,
595
+ authorClassName,
596
+ getAuthorName,
597
+ getAvatarSrc,
598
+ getInitials
599
+ ]);
600
+ return /* @__PURE__ */ jsxRuntime.jsx(
569
601
  Section,
570
602
  {
571
603
  background,
572
604
  spacing,
573
605
  pattern,
574
606
  patternOpacity,
575
- className,
576
- children: [
577
- /* @__PURE__ */ jsxRuntime.jsxs(
607
+ className: cn("relative flex items-center justify-center", className),
608
+ containerClassName,
609
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
610
+ /* @__PURE__ */ jsxRuntime.jsx(
578
611
  "div",
579
612
  {
580
- className: cn("mx-auto mb-12 max-w-2xl text-center", headerClassName),
581
- children: [
613
+ className: cn(
614
+ "border-x border-t border-dashed px-4 py-6 md:py-16 md:px-16",
615
+ headerClassName
616
+ ),
617
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-3xl", children: [
582
618
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
583
619
  "h2",
584
620
  {
585
621
  className: cn(
586
- "text-3xl font-semibold tracking-tight md:text-4xl",
622
+ "text-center text-3xl font-semibold tracking-tight md:text-4xl",
587
623
  headingClassName
588
624
  ),
589
625
  children: heading
@@ -593,17 +629,17 @@ function TestimonialsMiniDividers({
593
629
  "p",
594
630
  {
595
631
  className: cn(
596
- "mt-4 text-lg text-muted-foreground",
632
+ "mx-auto mt-4 max-w-2xl text-center text-lg text-balance",
597
633
  descriptionClassName
598
634
  ),
599
635
  children: description
600
636
  }
601
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-4", descriptionClassName), children: description }))
602
- ]
637
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
638
+ ] })
603
639
  }
604
640
  ),
605
641
  renderedTestimonials
606
- ]
642
+ ] })
607
643
  }
608
644
  );
609
645
  }
@@ -81,13 +81,17 @@ interface TestimonialsMiniDividersProps {
81
81
  * Pattern overlay opacity (0-1)
82
82
  */
83
83
  patternOpacity?: number;
84
+ /**
85
+ * Additional CSS classes for the container
86
+ */
87
+ containerClassName?: string;
84
88
  }
85
89
  /**
86
- * TestimonialsMiniDividers - A grid of compact testimonial cards separated by subtle
87
- * dividers. Each card displays a short quote, star rating, author avatar, name, and
88
- * role. The divider pattern creates visual separation while maintaining a cohesive
89
- * layout. Ideal for displaying multiple brief testimonials in a structured, scannable
90
- * format.
90
+ * TestimonialsMiniDividers - A grid of compact testimonial cards with dashed border
91
+ * styling and sparkle decorations. Each card displays a short quote, star rating,
92
+ * author avatar, name, and role inside a structured dashed-border layout inspired
93
+ * by the hero-dashed-border-features pattern. Ideal for displaying multiple brief
94
+ * testimonials in a visually distinctive, scannable format.
91
95
  *
92
96
  * @example
93
97
  * ```tsx
@@ -108,6 +112,6 @@ interface TestimonialsMiniDividersProps {
108
112
  * />
109
113
  * ```
110
114
  */
111
- declare function TestimonialsMiniDividers({ testimonials, testimonialsSlot, heading, description, className, headerClassName, headingClassName, descriptionClassName, gridClassName, itemClassName, quoteClassName, authorClassName, background, spacing, pattern, patternOpacity, }: TestimonialsMiniDividersProps): React.JSX.Element;
115
+ declare function TestimonialsMiniDividers({ testimonials, testimonialsSlot, heading, description, className, headerClassName, headingClassName, descriptionClassName, gridClassName, itemClassName, quoteClassName, authorClassName, background, spacing, containerClassName, pattern, patternOpacity, }: TestimonialsMiniDividersProps): React.JSX.Element;
112
116
 
113
117
  export { type MiniTestimonialItem, TestimonialsMiniDividers, type TestimonialsMiniDividersProps };
@@ -81,13 +81,17 @@ interface TestimonialsMiniDividersProps {
81
81
  * Pattern overlay opacity (0-1)
82
82
  */
83
83
  patternOpacity?: number;
84
+ /**
85
+ * Additional CSS classes for the container
86
+ */
87
+ containerClassName?: string;
84
88
  }
85
89
  /**
86
- * TestimonialsMiniDividers - A grid of compact testimonial cards separated by subtle
87
- * dividers. Each card displays a short quote, star rating, author avatar, name, and
88
- * role. The divider pattern creates visual separation while maintaining a cohesive
89
- * layout. Ideal for displaying multiple brief testimonials in a structured, scannable
90
- * format.
90
+ * TestimonialsMiniDividers - A grid of compact testimonial cards with dashed border
91
+ * styling and sparkle decorations. Each card displays a short quote, star rating,
92
+ * author avatar, name, and role inside a structured dashed-border layout inspired
93
+ * by the hero-dashed-border-features pattern. Ideal for displaying multiple brief
94
+ * testimonials in a visually distinctive, scannable format.
91
95
  *
92
96
  * @example
93
97
  * ```tsx
@@ -108,6 +112,6 @@ interface TestimonialsMiniDividersProps {
108
112
  * />
109
113
  * ```
110
114
  */
111
- declare function TestimonialsMiniDividers({ testimonials, testimonialsSlot, heading, description, className, headerClassName, headingClassName, descriptionClassName, gridClassName, itemClassName, quoteClassName, authorClassName, background, spacing, pattern, patternOpacity, }: TestimonialsMiniDividersProps): React.JSX.Element;
115
+ declare function TestimonialsMiniDividers({ testimonials, testimonialsSlot, heading, description, className, headerClassName, headingClassName, descriptionClassName, gridClassName, itemClassName, quoteClassName, authorClassName, background, spacing, containerClassName, pattern, patternOpacity, }: TestimonialsMiniDividersProps): React.JSX.Element;
112
116
 
113
117
  export { type MiniTestimonialItem, TestimonialsMiniDividers, type TestimonialsMiniDividersProps };
@@ -19,6 +19,23 @@ var DynamicIcon = React.memo(function DynamicIcon2({
19
19
  return /* @__PURE__ */ jsx(Icon, { ...props, apiKey: apiKey ?? DEFAULT_ICON_API_KEY });
20
20
  });
21
21
  DynamicIcon.displayName = "DynamicIcon";
22
+ function StarRating({
23
+ rating,
24
+ size = 18,
25
+ className
26
+ }) {
27
+ return /* @__PURE__ */ jsx("div", { className: cn("flex items-center gap-0.5", className), children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsx(
28
+ DynamicIcon,
29
+ {
30
+ name: "icon-park-solid/star",
31
+ size,
32
+ className: cn(
33
+ star <= rating ? "fill-primary text-primary" : "fill-muted text-muted"
34
+ )
35
+ },
36
+ star
37
+ )) });
38
+ }
22
39
  function Avatar({
23
40
  className,
24
41
  ...props
@@ -440,19 +457,6 @@ var Section = React__default.forwardRef(
440
457
  }
441
458
  );
442
459
  Section.displayName = "Section";
443
- function StarRating({ rating, size = 14 }) {
444
- return /* @__PURE__ */ jsx("div", { className: "flex items-center gap-0.5", children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsx(
445
- DynamicIcon,
446
- {
447
- name: "lucide/star",
448
- size,
449
- className: cn(
450
- star <= rating ? "fill-primary text-primary" : "fill-muted text-muted"
451
- )
452
- },
453
- star
454
- )) });
455
- }
456
460
  function TestimonialsMiniDividers({
457
461
  testimonials,
458
462
  testimonialsSlot,
@@ -467,101 +471,133 @@ function TestimonialsMiniDividers({
467
471
  quoteClassName,
468
472
  authorClassName,
469
473
  background,
470
- spacing,
474
+ spacing = "lg",
475
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
471
476
  pattern,
472
477
  patternOpacity
473
478
  }) {
474
- const getAuthorName = useCallback((testimonial) => {
475
- if (typeof testimonial.author === "string") return testimonial.author;
476
- return "";
477
- }, []);
478
- const getAvatarSrc = useCallback((testimonial) => {
479
- return testimonial.avatarSrc || testimonial.avatar?.src;
480
- }, []);
479
+ const getAuthorName = useCallback(
480
+ (testimonial) => {
481
+ if (typeof testimonial.author === "string") return testimonial.author;
482
+ return "";
483
+ },
484
+ []
485
+ );
486
+ const getAvatarSrc = useCallback(
487
+ (testimonial) => {
488
+ return testimonial.avatarSrc || testimonial.avatar?.src;
489
+ },
490
+ []
491
+ );
481
492
  const getInitials = useCallback((name) => {
482
493
  return name.split(" ").map((n) => n[0]).join("");
483
494
  }, []);
484
495
  const renderedTestimonials = useMemo(() => {
485
496
  if (testimonialsSlot) return testimonialsSlot;
486
497
  if (!testimonials || testimonials.length === 0) return null;
487
- return /* @__PURE__ */ jsx(
498
+ return /* @__PURE__ */ jsxs(
488
499
  "div",
489
500
  {
490
501
  className: cn(
491
- "grid divide-y sm:grid-cols-2 sm:divide-x sm:divide-y-0 lg:grid-cols-3 lg:divide-x",
502
+ "relative grid border-x border-b border-dashed md:grid-cols-3",
492
503
  gridClassName
493
504
  ),
494
- children: testimonials.map((testimonial, index) => {
495
- const authorName = getAuthorName(testimonial);
496
- const avatarSrc = getAvatarSrc(testimonial);
497
- return /* @__PURE__ */ jsxs(
498
- "div",
505
+ children: [
506
+ /* @__PURE__ */ jsx(
507
+ DynamicIcon,
499
508
  {
500
- className: cn(
501
- "p-6",
502
- index >= 2 && "lg:border-t-0",
503
- index >= 3 && "sm:border-t lg:border-t-0",
504
- itemClassName
505
- ),
506
- children: [
507
- testimonial.rating && /* @__PURE__ */ jsx(StarRating, { rating: testimonial.rating }),
508
- testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxs(
509
- "p",
510
- {
511
- className: cn(
512
- "mt-3 text-sm leading-relaxed",
513
- quoteClassName
514
- ),
515
- children: [
516
- "\u201C",
517
- testimonial.quote,
518
- "\u201D"
519
- ]
520
- }
521
- ) : /* @__PURE__ */ jsx("div", { className: cn("mt-3", quoteClassName), children: testimonial.quote })),
522
- /* @__PURE__ */ jsxs(
523
- "div",
524
- {
525
- className: cn("mt-4 flex items-center gap-3", authorClassName),
526
- children: [
527
- /* @__PURE__ */ jsxs(Avatar, { className: "size-8", children: [
528
- /* @__PURE__ */ jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
529
- /* @__PURE__ */ jsx(AvatarFallback, { className: "text-xs", children: getInitials(authorName) })
530
- ] }),
531
- /* @__PURE__ */ jsxs("div", { children: [
532
- testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: testimonial.author }) : testimonial.author),
533
- testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: testimonial.role }) : testimonial.role)
534
- ] })
535
- ]
536
- }
537
- )
538
- ]
539
- },
540
- index
541
- );
542
- })
509
+ name: "lucide/sparkle",
510
+ size: 20,
511
+ className: "absolute top-0 right-0 translate-x-2.5 -translate-y-2.5 fill-primary"
512
+ }
513
+ ),
514
+ /* @__PURE__ */ jsx(
515
+ DynamicIcon,
516
+ {
517
+ name: "lucide/sparkle",
518
+ size: 20,
519
+ className: "absolute top-0 left-0 -translate-x-2.5 -translate-y-2.5 fill-primary"
520
+ }
521
+ ),
522
+ testimonials.map((testimonial, index) => {
523
+ const authorName = getAuthorName(testimonial);
524
+ const avatarSrc = getAvatarSrc(testimonial);
525
+ return /* @__PURE__ */ jsxs(
526
+ "div",
527
+ {
528
+ className: cn(
529
+ "group flex flex-col gap-4 border-t border-dashed p-4 transition-colors duration-300 hover:bg-muted/50 lg:p-8",
530
+ index % 3 === 1 && "md:border-x md:border-dashed",
531
+ itemClassName
532
+ ),
533
+ children: [
534
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
535
+ /* @__PURE__ */ jsxs(Avatar, { className: "size-10 shrink-0 rounded-md bg-card shadow-sm lg:size-12", children: [
536
+ /* @__PURE__ */ jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
537
+ /* @__PURE__ */ jsx(AvatarFallback, { className: "rounded-md bg-card text-card-foreground text-sm", children: getInitials(authorName) })
538
+ ] }),
539
+ /* @__PURE__ */ jsxs("div", { className: cn("min-w-0", authorClassName), children: [
540
+ testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsx("p", { className: "truncate font-medium", children: testimonial.author }) : testimonial.author),
541
+ testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsx("p", { className: "truncate text-sm text-muted-foreground", children: testimonial.role }) : testimonial.role)
542
+ ] })
543
+ ] }),
544
+ testimonial.rating != null && /* @__PURE__ */ jsx(StarRating, { rating: testimonial.rating }),
545
+ testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxs(
546
+ "p",
547
+ {
548
+ className: cn(
549
+ "text-sm leading-relaxed text-muted-foreground",
550
+ quoteClassName
551
+ ),
552
+ children: [
553
+ "\u201C",
554
+ testimonial.quote,
555
+ "\u201D"
556
+ ]
557
+ }
558
+ ) : /* @__PURE__ */ jsx("div", { className: cn("text-sm", quoteClassName), children: testimonial.quote }))
559
+ ]
560
+ },
561
+ index
562
+ );
563
+ })
564
+ ]
543
565
  }
544
566
  );
545
- }, [testimonialsSlot, gridClassName, testimonials, itemClassName, quoteClassName, authorClassName, getAuthorName, getAvatarSrc, getInitials]);
546
- return /* @__PURE__ */ jsxs(
567
+ }, [
568
+ testimonialsSlot,
569
+ gridClassName,
570
+ testimonials,
571
+ itemClassName,
572
+ quoteClassName,
573
+ authorClassName,
574
+ getAuthorName,
575
+ getAvatarSrc,
576
+ getInitials
577
+ ]);
578
+ return /* @__PURE__ */ jsx(
547
579
  Section,
548
580
  {
549
581
  background,
550
582
  spacing,
551
583
  pattern,
552
584
  patternOpacity,
553
- className,
554
- children: [
555
- /* @__PURE__ */ jsxs(
585
+ className: cn("relative flex items-center justify-center", className),
586
+ containerClassName,
587
+ children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
588
+ /* @__PURE__ */ jsx(
556
589
  "div",
557
590
  {
558
- className: cn("mx-auto mb-12 max-w-2xl text-center", headerClassName),
559
- children: [
591
+ className: cn(
592
+ "border-x border-t border-dashed px-4 py-6 md:py-16 md:px-16",
593
+ headerClassName
594
+ ),
595
+ children: /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-3xl", children: [
560
596
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
561
597
  "h2",
562
598
  {
563
599
  className: cn(
564
- "text-3xl font-semibold tracking-tight md:text-4xl",
600
+ "text-center text-3xl font-semibold tracking-tight md:text-4xl",
565
601
  headingClassName
566
602
  ),
567
603
  children: heading
@@ -571,17 +607,17 @@ function TestimonialsMiniDividers({
571
607
  "p",
572
608
  {
573
609
  className: cn(
574
- "mt-4 text-lg text-muted-foreground",
610
+ "mx-auto mt-4 max-w-2xl text-center text-lg text-balance",
575
611
  descriptionClassName
576
612
  ),
577
613
  children: description
578
614
  }
579
- ) : /* @__PURE__ */ jsx("div", { className: cn("mt-4", descriptionClassName), children: description }))
580
- ]
615
+ ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
616
+ ] })
581
617
  }
582
618
  ),
583
619
  renderedTestimonials
584
- ]
620
+ ] })
585
621
  }
586
622
  );
587
623
  }