@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
@@ -450,7 +450,8 @@ function TestimonialsLargeQuote({
450
450
  authorClassName,
451
451
  avatarClassName,
452
452
  background,
453
- spacing,
453
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
454
+ spacing = "xl",
454
455
  pattern,
455
456
  patternOpacity
456
457
  }) {
@@ -469,49 +470,78 @@ function TestimonialsLargeQuote({
469
470
  if (!testimonial) return null;
470
471
  const authorName = getAuthorName();
471
472
  const avatarSrc = getAvatarSrc();
472
- return /* @__PURE__ */ jsxs("div", { className: cn("mx-auto max-w-4xl text-center", contentClassName), children: [
473
- /* @__PURE__ */ jsx(
474
- DynamicIcon,
475
- {
476
- name: "lucide/quote",
477
- size: 64,
478
- className: cn("mx-auto mb-8 text-primary/20", quoteIconClassName)
479
- }
480
- ),
481
- testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsx(
482
- "blockquote",
483
- {
484
- className: cn(
485
- "text-2xl font-medium leading-relaxed md:text-3xl lg:text-4xl",
486
- quoteClassName
487
- ),
488
- children: testimonial.quote
489
- }
490
- ) : /* @__PURE__ */ jsx("div", { className: quoteClassName, children: testimonial.quote })),
491
- /* @__PURE__ */ jsxs(
492
- "div",
493
- {
494
- className: cn(
495
- "mt-10 flex flex-col items-center gap-4",
496
- authorClassName
473
+ return /* @__PURE__ */ jsxs(
474
+ "div",
475
+ {
476
+ className: cn(
477
+ "mx-auto max-full md:max-w-lg text-center",
478
+ contentClassName
479
+ ),
480
+ children: [
481
+ /* @__PURE__ */ jsx(
482
+ DynamicIcon,
483
+ {
484
+ name: "mdi/comment-quote-outline",
485
+ size: 48,
486
+ className: cn("mx-auto mb-8 ", quoteIconClassName)
487
+ }
497
488
  ),
498
- children: [
499
- /* @__PURE__ */ jsxs(Avatar, { className: cn("size-16", avatarClassName), children: [
500
- /* @__PURE__ */ jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
501
- /* @__PURE__ */ jsx(AvatarFallback, { className: "text-lg", children: getInitials(authorName) })
502
- ] }),
503
- /* @__PURE__ */ jsxs("div", { children: [
504
- testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsx("p", { className: "text-lg font-semibold", children: testimonial.author }) : testimonial.author),
505
- (testimonial.role || testimonial.company) && /* @__PURE__ */ jsxs("p", { className: "text-muted-foreground", children: [
506
- testimonial.role && (typeof testimonial.role === "string" ? testimonial.role : testimonial.role),
507
- testimonial.company && (typeof testimonial.company === "string" ? ` at ${testimonial.company}` : testimonial.company)
508
- ] })
509
- ] })
510
- ]
511
- }
512
- )
513
- ] });
514
- }, [testimonialSlot, contentClassName, quoteIconClassName, testimonial, quoteClassName, authorClassName, avatarClassName, getAuthorName, getAvatarSrc, getInitials]);
489
+ testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsx(
490
+ "blockquote",
491
+ {
492
+ className: cn(
493
+ "text-2xl font-light leading-relaxed md:text-3xl lg:text-4xl text-balance",
494
+ quoteClassName
495
+ ),
496
+ children: testimonial.quote
497
+ }
498
+ ) : /* @__PURE__ */ jsx("div", { className: quoteClassName, children: testimonial.quote })),
499
+ /* @__PURE__ */ jsxs(
500
+ "div",
501
+ {
502
+ className: cn(
503
+ "mt-10 md:mt-16 flex flex-col items-center gap-4 md:gap-8",
504
+ authorClassName
505
+ ),
506
+ children: [
507
+ /* @__PURE__ */ jsxs(
508
+ Avatar,
509
+ {
510
+ className: cn(
511
+ "relative flex shrink-0 overflow-hidden rounded-full size-16 ring-4 ring-primary shadow-lg",
512
+ avatarClassName
513
+ ),
514
+ children: [
515
+ /* @__PURE__ */ jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
516
+ /* @__PURE__ */ jsx(AvatarFallback, { className: "text-lg", children: getInitials(authorName) })
517
+ ]
518
+ }
519
+ ),
520
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-4", children: [
521
+ testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsx("p", { className: "text-lg font-semibold", children: testimonial.author }) : testimonial.author),
522
+ (testimonial.role || testimonial.company) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-2", children: [
523
+ /* @__PURE__ */ jsx("div", { className: "text-base font-normal opacity-75", children: testimonial.role && (typeof testimonial.role === "string" ? testimonial.role : testimonial.role) }),
524
+ /* @__PURE__ */ jsx("div", { className: "text-sm uppercase font-semibold opacity-75", children: testimonial.company && (typeof testimonial.company === "string" ? ` at ${testimonial.company}` : testimonial.company) })
525
+ ] })
526
+ ] })
527
+ ]
528
+ }
529
+ )
530
+ ]
531
+ }
532
+ );
533
+ }, [
534
+ testimonialSlot,
535
+ contentClassName,
536
+ quoteIconClassName,
537
+ testimonial,
538
+ quoteClassName,
539
+ authorClassName,
540
+ avatarClassName,
541
+ getAuthorName,
542
+ getAvatarSrc,
543
+ getInitials
544
+ ]);
515
545
  return /* @__PURE__ */ jsx(
516
546
  Section,
517
547
  {
@@ -520,6 +550,7 @@ function TestimonialsLargeQuote({
520
550
  pattern,
521
551
  patternOpacity,
522
552
  className,
553
+ containerClassName,
523
554
  children: renderedTestimonial
524
555
  }
525
556
  );
@@ -43,6 +43,23 @@ var DynamicIcon = React__namespace.memo(function DynamicIcon2({
43
43
  return /* @__PURE__ */ jsxRuntime.jsx(icon.Icon, { ...props, apiKey: apiKey ?? DEFAULT_ICON_API_KEY });
44
44
  });
45
45
  DynamicIcon.displayName = "DynamicIcon";
46
+ function StarRating({
47
+ rating,
48
+ size = 18,
49
+ className
50
+ }) {
51
+ 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(
52
+ DynamicIcon,
53
+ {
54
+ name: "icon-park-solid/star",
55
+ size,
56
+ className: cn(
57
+ star <= rating ? "fill-primary text-primary" : "fill-muted text-muted"
58
+ )
59
+ },
60
+ star
61
+ )) });
62
+ }
46
63
  function Avatar({
47
64
  className,
48
65
  ...props
@@ -484,19 +501,6 @@ var Section = React__namespace.default.forwardRef(
484
501
  }
485
502
  );
486
503
  Section.displayName = "Section";
487
- function StarRating({ rating, size = 16 }) {
488
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-0.5", children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsxRuntime.jsx(
489
- DynamicIcon,
490
- {
491
- name: "lucide/star",
492
- size,
493
- className: cn(
494
- star <= rating ? "fill-primary text-primary" : "fill-muted text-muted"
495
- )
496
- },
497
- star
498
- )) });
499
- }
500
504
  function TestimonialsListVerified({
501
505
  reviews,
502
506
  reviewsSlot,
@@ -509,7 +513,8 @@ function TestimonialsListVerified({
509
513
  contentClassName,
510
514
  authorClassName,
511
515
  background,
512
- spacing,
516
+ spacing = "lg",
517
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
513
518
  pattern,
514
519
  patternOpacity
515
520
  }) {
@@ -528,35 +533,49 @@ function TestimonialsListVerified({
528
533
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0", children: reviews.map((review, index) => {
529
534
  const authorName = getAuthorName(review);
530
535
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: reviewClassName, children: [
531
- index > 0 && /* @__PURE__ */ jsxRuntime.jsx(Separator, { className: "my-6" }),
532
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("space-y-3", contentClassName), children: [
533
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
534
- /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: review.rating, size: 16 }),
535
- review.title && (typeof review.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mt-2 font-medium", children: review.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2", children: review.title }))
536
+ index > 0 && /* @__PURE__ */ jsxRuntime.jsx(Separator, { className: "bg-border/50 shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px my-12 md:my-16" }),
537
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("space-y-6 md:space-y-12", contentClassName), children: [
538
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
539
+ /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: review.rating, size: 22 }),
540
+ review.title && (typeof review.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-medium", children: review.title }) : review.title)
536
541
  ] }),
537
- review.content && (typeof review.content === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm leading-relaxed text-muted-foreground", children: review.content }) : review.content),
538
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-3", authorClassName), children: [
539
- /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-8", children: [
540
- /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: review.avatarSrc, alt: authorName }),
541
- /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "text-xs", children: getInitials(authorName) })
542
- ] }),
543
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-sm", children: [
544
- review.author && (typeof review.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: review.author }) : review.author),
545
- review.verified && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1 text-emerald-600", children: [
546
- /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/badge-check", size: 16 }),
547
- verifiedPurchaseLabel && (typeof verifiedPurchaseLabel === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs", children: verifiedPurchaseLabel }) : verifiedPurchaseLabel),
548
- !verifiedPurchaseLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs", children: "Verified Purchase" })
549
- ] }),
550
- review.date && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
551
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "\xB7" }),
552
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: review.date })
553
- ] })
554
- ] })
542
+ review.content && (typeof review.content === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base md:text-lg leading-relaxed font-light", children: review.content }) : review.content),
543
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center justify-between w-full"), children: [
544
+ /* @__PURE__ */ jsxRuntime.jsxs(
545
+ "div",
546
+ {
547
+ className: cn("flex items-center gap-5", authorClassName),
548
+ children: [
549
+ /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-12 ring-4 ring-primary shadow-lg", children: [
550
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: review.avatarSrc, alt: authorName }),
551
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { className: "text-md", children: getInitials(authorName) })
552
+ ] }),
553
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1 text-base flex-col items-start", children: [
554
+ review.author && (typeof review.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: review.author }) : review.author),
555
+ review.verified && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1", children: [
556
+ /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/badge-check", size: 18 }),
557
+ verifiedPurchaseLabel && (typeof verifiedPurchaseLabel === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: verifiedPurchaseLabel }) : verifiedPurchaseLabel),
558
+ !verifiedPurchaseLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: "Verified Purchase" })
559
+ ] })
560
+ ] })
561
+ ]
562
+ }
563
+ ),
564
+ review.date && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "relative", children: review.date })
555
565
  ] })
556
566
  ] })
557
567
  ] }, index);
558
568
  }) });
559
- }, [reviewsSlot, reviews, reviewClassName, contentClassName, authorClassName, verifiedPurchaseLabel, getAuthorName, getInitials]);
569
+ }, [
570
+ reviewsSlot,
571
+ reviews,
572
+ reviewClassName,
573
+ contentClassName,
574
+ authorClassName,
575
+ verifiedPurchaseLabel,
576
+ getAuthorName,
577
+ getInitials
578
+ ]);
560
579
  return /* @__PURE__ */ jsxRuntime.jsx(
561
580
  Section,
562
581
  {
@@ -565,21 +584,21 @@ function TestimonialsListVerified({
565
584
  pattern,
566
585
  patternOpacity,
567
586
  className,
568
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-3xl", children: [
569
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mb-8", headerClassName), children: [
587
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-full md:max-w-3xl", children: [
588
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mb-12 md:mb-24 space-y-6", headerClassName), children: [
570
589
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
571
590
  "h2",
572
591
  {
573
592
  className: cn(
574
- "text-2xl font-semibold tracking-tight md:text-3xl",
593
+ "text-2xl font-semibold tracking-tight md:text-3xl lg:text-4xl",
575
594
  headingClassName
576
595
  ),
577
596
  children: heading
578
597
  }
579
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
598
+ ) : heading),
580
599
  totalReviews > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 flex items-center gap-3", children: [
581
- /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: Math.round(averageRating), size: 20 }),
582
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm text-muted-foreground", children: [
600
+ /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: Math.round(averageRating), size: 22 }),
601
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm", children: [
583
602
  averageRating.toFixed(1),
584
603
  " out of 5 \xB7 ",
585
604
  totalReviews,
@@ -97,6 +97,10 @@ interface TestimonialsListVerifiedProps {
97
97
  * Pattern overlay opacity (0-1)
98
98
  */
99
99
  patternOpacity?: number;
100
+ /**
101
+ * Additional CSS classes for the container
102
+ */
103
+ containerClassName?: string;
100
104
  }
101
105
  /**
102
106
  * TestimonialsListVerified - A clean, vertical list of customer reviews with rating summary,
@@ -124,6 +128,6 @@ interface TestimonialsListVerifiedProps {
124
128
  * />
125
129
  * ```
126
130
  */
127
- declare function TestimonialsListVerified({ reviews, reviewsSlot, heading, verifiedPurchaseLabel, className, headerClassName, headingClassName, reviewClassName, contentClassName, authorClassName, background, spacing, pattern, patternOpacity, }: TestimonialsListVerifiedProps): React.JSX.Element;
131
+ declare function TestimonialsListVerified({ reviews, reviewsSlot, heading, verifiedPurchaseLabel, className, headerClassName, headingClassName, reviewClassName, contentClassName, authorClassName, background, spacing, containerClassName, pattern, patternOpacity, }: TestimonialsListVerifiedProps): React.JSX.Element;
128
132
 
129
133
  export { type ReviewItem, TestimonialsListVerified, type TestimonialsListVerifiedProps };
@@ -97,6 +97,10 @@ interface TestimonialsListVerifiedProps {
97
97
  * Pattern overlay opacity (0-1)
98
98
  */
99
99
  patternOpacity?: number;
100
+ /**
101
+ * Additional CSS classes for the container
102
+ */
103
+ containerClassName?: string;
100
104
  }
101
105
  /**
102
106
  * TestimonialsListVerified - A clean, vertical list of customer reviews with rating summary,
@@ -124,6 +128,6 @@ interface TestimonialsListVerifiedProps {
124
128
  * />
125
129
  * ```
126
130
  */
127
- declare function TestimonialsListVerified({ reviews, reviewsSlot, heading, verifiedPurchaseLabel, className, headerClassName, headingClassName, reviewClassName, contentClassName, authorClassName, background, spacing, pattern, patternOpacity, }: TestimonialsListVerifiedProps): React.JSX.Element;
131
+ declare function TestimonialsListVerified({ reviews, reviewsSlot, heading, verifiedPurchaseLabel, className, headerClassName, headingClassName, reviewClassName, contentClassName, authorClassName, background, spacing, containerClassName, pattern, patternOpacity, }: TestimonialsListVerifiedProps): React.JSX.Element;
128
132
 
129
133
  export { type ReviewItem, TestimonialsListVerified, type TestimonialsListVerifiedProps };
@@ -4,7 +4,7 @@ import React__default, { useCallback, useMemo } from 'react';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { Icon } from '@page-speed/icon';
7
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
+ import { jsx, jsxs } from 'react/jsx-runtime';
8
8
  import * as AvatarPrimitive from '@radix-ui/react-avatar';
9
9
  import * as SeparatorPrimitive from '@radix-ui/react-separator';
10
10
 
@@ -20,6 +20,23 @@ var DynamicIcon = React.memo(function DynamicIcon2({
20
20
  return /* @__PURE__ */ jsx(Icon, { ...props, apiKey: apiKey ?? DEFAULT_ICON_API_KEY });
21
21
  });
22
22
  DynamicIcon.displayName = "DynamicIcon";
23
+ function StarRating({
24
+ rating,
25
+ size = 18,
26
+ className
27
+ }) {
28
+ return /* @__PURE__ */ jsx("div", { className: cn("flex items-center gap-0.5", className), children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsx(
29
+ DynamicIcon,
30
+ {
31
+ name: "icon-park-solid/star",
32
+ size,
33
+ className: cn(
34
+ star <= rating ? "fill-primary text-primary" : "fill-muted text-muted"
35
+ )
36
+ },
37
+ star
38
+ )) });
39
+ }
23
40
  function Avatar({
24
41
  className,
25
42
  ...props
@@ -461,19 +478,6 @@ var Section = React__default.forwardRef(
461
478
  }
462
479
  );
463
480
  Section.displayName = "Section";
464
- function StarRating({ rating, size = 16 }) {
465
- return /* @__PURE__ */ jsx("div", { className: "flex items-center gap-0.5", children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsx(
466
- DynamicIcon,
467
- {
468
- name: "lucide/star",
469
- size,
470
- className: cn(
471
- star <= rating ? "fill-primary text-primary" : "fill-muted text-muted"
472
- )
473
- },
474
- star
475
- )) });
476
- }
477
481
  function TestimonialsListVerified({
478
482
  reviews,
479
483
  reviewsSlot,
@@ -486,7 +490,8 @@ function TestimonialsListVerified({
486
490
  contentClassName,
487
491
  authorClassName,
488
492
  background,
489
- spacing,
493
+ spacing = "lg",
494
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
490
495
  pattern,
491
496
  patternOpacity
492
497
  }) {
@@ -505,35 +510,49 @@ function TestimonialsListVerified({
505
510
  return /* @__PURE__ */ jsx("div", { className: "space-y-0", children: reviews.map((review, index) => {
506
511
  const authorName = getAuthorName(review);
507
512
  return /* @__PURE__ */ jsxs("div", { className: reviewClassName, children: [
508
- index > 0 && /* @__PURE__ */ jsx(Separator, { className: "my-6" }),
509
- /* @__PURE__ */ jsxs("div", { className: cn("space-y-3", contentClassName), children: [
510
- /* @__PURE__ */ jsxs("div", { children: [
511
- /* @__PURE__ */ jsx(StarRating, { rating: review.rating, size: 16 }),
512
- review.title && (typeof review.title === "string" ? /* @__PURE__ */ jsx("h3", { className: "mt-2 font-medium", children: review.title }) : /* @__PURE__ */ jsx("div", { className: "mt-2", children: review.title }))
513
+ index > 0 && /* @__PURE__ */ jsx(Separator, { className: "bg-border/50 shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px my-12 md:my-16" }),
514
+ /* @__PURE__ */ jsxs("div", { className: cn("space-y-6 md:space-y-12", contentClassName), children: [
515
+ /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
516
+ /* @__PURE__ */ jsx(StarRating, { rating: review.rating, size: 22 }),
517
+ review.title && (typeof review.title === "string" ? /* @__PURE__ */ jsx("h3", { className: "font-medium", children: review.title }) : review.title)
513
518
  ] }),
514
- review.content && (typeof review.content === "string" ? /* @__PURE__ */ jsx("p", { className: "text-sm leading-relaxed text-muted-foreground", children: review.content }) : review.content),
515
- /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-3", authorClassName), children: [
516
- /* @__PURE__ */ jsxs(Avatar, { className: "size-8", children: [
517
- /* @__PURE__ */ jsx(AvatarImage, { src: review.avatarSrc, alt: authorName }),
518
- /* @__PURE__ */ jsx(AvatarFallback, { className: "text-xs", children: getInitials(authorName) })
519
- ] }),
520
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm", children: [
521
- review.author && (typeof review.author === "string" ? /* @__PURE__ */ jsx("span", { className: "font-medium", children: review.author }) : review.author),
522
- review.verified && /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1 text-emerald-600", children: [
523
- /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/badge-check", size: 16 }),
524
- verifiedPurchaseLabel && (typeof verifiedPurchaseLabel === "string" ? /* @__PURE__ */ jsx("span", { className: "text-xs", children: verifiedPurchaseLabel }) : verifiedPurchaseLabel),
525
- !verifiedPurchaseLabel && /* @__PURE__ */ jsx("span", { className: "text-xs", children: "Verified Purchase" })
526
- ] }),
527
- review.date && /* @__PURE__ */ jsxs(Fragment, { children: [
528
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "\xB7" }),
529
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: review.date })
530
- ] })
531
- ] })
519
+ review.content && (typeof review.content === "string" ? /* @__PURE__ */ jsx("p", { className: "text-base md:text-lg leading-relaxed font-light", children: review.content }) : review.content),
520
+ /* @__PURE__ */ jsxs("div", { className: cn("flex items-center justify-between w-full"), children: [
521
+ /* @__PURE__ */ jsxs(
522
+ "div",
523
+ {
524
+ className: cn("flex items-center gap-5", authorClassName),
525
+ children: [
526
+ /* @__PURE__ */ jsxs(Avatar, { className: "size-12 ring-4 ring-primary shadow-lg", children: [
527
+ /* @__PURE__ */ jsx(AvatarImage, { src: review.avatarSrc, alt: authorName }),
528
+ /* @__PURE__ */ jsx(AvatarFallback, { className: "text-md", children: getInitials(authorName) })
529
+ ] }),
530
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 text-base flex-col items-start", children: [
531
+ review.author && (typeof review.author === "string" ? /* @__PURE__ */ jsx("span", { className: "font-medium", children: review.author }) : review.author),
532
+ review.verified && /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1", children: [
533
+ /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/badge-check", size: 18 }),
534
+ verifiedPurchaseLabel && (typeof verifiedPurchaseLabel === "string" ? /* @__PURE__ */ jsx("span", { className: "text-sm", children: verifiedPurchaseLabel }) : verifiedPurchaseLabel),
535
+ !verifiedPurchaseLabel && /* @__PURE__ */ jsx("span", { className: "text-sm", children: "Verified Purchase" })
536
+ ] })
537
+ ] })
538
+ ]
539
+ }
540
+ ),
541
+ review.date && /* @__PURE__ */ jsx("span", { className: "relative", children: review.date })
532
542
  ] })
533
543
  ] })
534
544
  ] }, index);
535
545
  }) });
536
- }, [reviewsSlot, reviews, reviewClassName, contentClassName, authorClassName, verifiedPurchaseLabel, getAuthorName, getInitials]);
546
+ }, [
547
+ reviewsSlot,
548
+ reviews,
549
+ reviewClassName,
550
+ contentClassName,
551
+ authorClassName,
552
+ verifiedPurchaseLabel,
553
+ getAuthorName,
554
+ getInitials
555
+ ]);
537
556
  return /* @__PURE__ */ jsx(
538
557
  Section,
539
558
  {
@@ -542,21 +561,21 @@ function TestimonialsListVerified({
542
561
  pattern,
543
562
  patternOpacity,
544
563
  className,
545
- children: /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-3xl", children: [
546
- /* @__PURE__ */ jsxs("div", { className: cn("mb-8", headerClassName), children: [
564
+ children: /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-full md:max-w-3xl", children: [
565
+ /* @__PURE__ */ jsxs("div", { className: cn("mb-12 md:mb-24 space-y-6", headerClassName), children: [
547
566
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
548
567
  "h2",
549
568
  {
550
569
  className: cn(
551
- "text-2xl font-semibold tracking-tight md:text-3xl",
570
+ "text-2xl font-semibold tracking-tight md:text-3xl lg:text-4xl",
552
571
  headingClassName
553
572
  ),
554
573
  children: heading
555
574
  }
556
- ) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
575
+ ) : heading),
557
576
  totalReviews > 0 && /* @__PURE__ */ jsxs("div", { className: "mt-2 flex items-center gap-3", children: [
558
- /* @__PURE__ */ jsx(StarRating, { rating: Math.round(averageRating), size: 20 }),
559
- /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground", children: [
577
+ /* @__PURE__ */ jsx(StarRating, { rating: Math.round(averageRating), size: 22 }),
578
+ /* @__PURE__ */ jsxs("span", { className: "text-sm", children: [
560
579
  averageRating.toFixed(1),
561
580
  " out of 5 \xB7 ",
562
581
  totalReviews,
@@ -508,18 +508,25 @@ function TestimonialsLogoCards({
508
508
  quoteClassName,
509
509
  authorClassName,
510
510
  background,
511
- spacing,
511
+ spacing = "lg",
512
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
512
513
  pattern,
513
514
  patternOpacity,
514
515
  optixFlowConfig
515
516
  }) {
516
- const getAuthorName = React.useCallback((testimonial) => {
517
- if (typeof testimonial.author === "string") return testimonial.author;
518
- return "";
519
- }, []);
520
- const getAvatarSrc = React.useCallback((testimonial) => {
521
- return testimonial.avatarSrc || testimonial.avatar?.src;
522
- }, []);
517
+ const getAuthorName = React.useCallback(
518
+ (testimonial) => {
519
+ if (typeof testimonial.author === "string") return testimonial.author;
520
+ return "";
521
+ },
522
+ []
523
+ );
524
+ const getAvatarSrc = React.useCallback(
525
+ (testimonial) => {
526
+ return testimonial.avatarSrc || testimonial.avatar?.src;
527
+ },
528
+ []
529
+ );
523
530
  const getInitials = React.useCallback((name) => {
524
531
  return name.split(" ").map((n) => n[0]).join("");
525
532
  }, []);
@@ -550,7 +557,10 @@ function TestimonialsLogoCards({
550
557
  {
551
558
  src: testimonial.companyLogo,
552
559
  alt: testimonial.companyLogoAlt || "Company logo",
553
- className: "h-6 w-auto object-contain dark:invert",
560
+ className: cn(
561
+ index === 0 ? "h-10" : "h-5",
562
+ "w-auto object-contain"
563
+ ),
554
564
  optixFlowConfig
555
565
  }
556
566
  ) }),
@@ -567,20 +577,29 @@ function TestimonialsLogoCards({
567
577
  {
568
578
  className: cn(
569
579
  "leading-relaxed",
570
- index === 0 ? "text-xl font-medium" : "text-sm",
580
+ index === 0 ? "text-lg md:text-xl font-light" : "text-sm md:text-base",
571
581
  quoteClassName
572
582
  ),
573
583
  children: testimonial.quote
574
584
  }
575
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: quoteClassName, children: testimonial.quote })),
585
+ ) : testimonial.quote),
576
586
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-3", authorClassName), children: [
577
- /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: cn(index === 0 ? "size-12" : "size-10"), children: [
578
- /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
579
- /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: getInitials(authorName) })
580
- ] }),
587
+ /* @__PURE__ */ jsxRuntime.jsxs(
588
+ Avatar,
589
+ {
590
+ className: cn(
591
+ index === 0 ? "size-12" : "size-10",
592
+ "ring-4 ring-primary"
593
+ ),
594
+ children: [
595
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
596
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: getInitials(authorName) })
597
+ ]
598
+ }
599
+ ),
581
600
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
582
- testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("cite", { className: "text-sm font-medium not-italic", children: testimonial.author }) : testimonial.author),
583
- testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: testimonial.role }) : testimonial.role)
601
+ testimonial.author && (typeof testimonial.author === "string" ? /* @__PURE__ */ jsxRuntime.jsx("cite", { className: "text-sm md:text-base font-medium", children: testimonial.author }) : testimonial.author),
602
+ testimonial.role && (typeof testimonial.role === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs md:text-sm", children: testimonial.role }) : testimonial.role)
584
603
  ] })
585
604
  ] })
586
605
  ]
@@ -593,7 +612,20 @@ function TestimonialsLogoCards({
593
612
  })
594
613
  }
595
614
  );
596
- }, [testimonialsSlot, gridClassName, testimonials, cardClassName, cardHeaderClassName, optixFlowConfig, cardContentClassName, quoteClassName, authorClassName, getAuthorName, getAvatarSrc, getInitials]);
615
+ }, [
616
+ testimonialsSlot,
617
+ gridClassName,
618
+ testimonials,
619
+ cardClassName,
620
+ cardHeaderClassName,
621
+ optixFlowConfig,
622
+ cardContentClassName,
623
+ quoteClassName,
624
+ authorClassName,
625
+ getAuthorName,
626
+ getAvatarSrc,
627
+ getInitials
628
+ ]);
597
629
  return /* @__PURE__ */ jsxRuntime.jsxs(
598
630
  Section,
599
631
  {
@@ -602,6 +634,7 @@ function TestimonialsLogoCards({
602
634
  pattern,
603
635
  patternOpacity,
604
636
  className,
637
+ containerClassName,
605
638
  children: [
606
639
  /* @__PURE__ */ jsxRuntime.jsxs(
607
640
  "div",
@@ -612,22 +645,19 @@ function TestimonialsLogoCards({
612
645
  "h2",
613
646
  {
614
647
  className: cn(
615
- "text-3xl font-semibold tracking-tight md:text-4xl",
648
+ "text-3xl font-semibold tracking-tight md:text-4xl text-balance",
616
649
  headingClassName
617
650
  ),
618
651
  children: heading
619
652
  }
620
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
653
+ ) : heading),
621
654
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
622
655
  "p",
623
656
  {
624
- className: cn(
625
- "mt-4 text-lg text-muted-foreground",
626
- descriptionClassName
627
- ),
657
+ className: cn("mt-4 text-lg text-balance", descriptionClassName),
628
658
  children: description
629
659
  }
630
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-4", descriptionClassName), children: description }))
660
+ ) : description)
631
661
  ]
632
662
  }
633
663
  ),