@opensite/ui 0.8.5 → 0.8.7

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 (501) hide show
  1. package/dist/about-developer-profile.cjs +1 -1
  2. package/dist/about-developer-profile.js +1 -1
  3. package/dist/about-interactive-tabs.cjs +1 -1
  4. package/dist/about-interactive-tabs.js +1 -1
  5. package/dist/about-location-info-hero.cjs +5 -5
  6. package/dist/about-location-info-hero.js +5 -5
  7. package/dist/about-mission-features.cjs +3 -3
  8. package/dist/about-mission-features.js +3 -3
  9. package/dist/about-mission-principles.cjs +1 -1
  10. package/dist/about-mission-principles.js +1 -1
  11. package/dist/about-network-spotlight.cjs +6 -6
  12. package/dist/about-network-spotlight.js +6 -6
  13. package/dist/about-split-hero.cjs +4 -4
  14. package/dist/about-split-hero.js +4 -4
  15. package/dist/about-startup-team.cjs +3 -3
  16. package/dist/about-startup-team.js +3 -3
  17. package/dist/about-story-expertise.cjs +4 -4
  18. package/dist/about-story-expertise.js +4 -4
  19. package/dist/article-breadcrumb-social.cjs +1 -1
  20. package/dist/article-breadcrumb-social.js +1 -1
  21. package/dist/article-chapters-author.cjs +1 -1
  22. package/dist/article-chapters-author.js +1 -1
  23. package/dist/article-compact-toc.cjs +1 -1
  24. package/dist/article-compact-toc.js +1 -1
  25. package/dist/article-split-animated.cjs +1 -1
  26. package/dist/article-split-animated.js +1 -1
  27. package/dist/article-toc-sidebar.cjs +1 -1
  28. package/dist/article-toc-sidebar.js +1 -1
  29. package/dist/banner-countdown-sale.cjs +1 -1
  30. package/dist/banner-countdown-sale.js +1 -1
  31. package/dist/banner-social-follow.cjs +1 -1
  32. package/dist/banner-social-follow.js +1 -1
  33. package/dist/blog-cards-tagline-cta.cjs +1 -1
  34. package/dist/blog-cards-tagline-cta.js +1 -1
  35. package/dist/blog-horizontal-timeline.cjs +2 -2
  36. package/dist/blog-horizontal-timeline.js +2 -2
  37. package/dist/blog-tech-insights.cjs +6 -6
  38. package/dist/blog-tech-insights.js +6 -6
  39. package/dist/carousel-animated-sections.cjs +7 -8
  40. package/dist/carousel-animated-sections.js +7 -8
  41. package/dist/carousel-auto-progress-slides.cjs +7 -7
  42. package/dist/carousel-auto-progress-slides.js +7 -7
  43. package/dist/carousel-autoplay-progress.cjs +3 -3
  44. package/dist/carousel-autoplay-progress.js +3 -3
  45. package/dist/carousel-fullscreen-scroll-fx.cjs +7 -7
  46. package/dist/carousel-fullscreen-scroll-fx.js +7 -7
  47. package/dist/carousel-horizontal-cards.cjs +1 -1
  48. package/dist/carousel-horizontal-cards.js +1 -1
  49. package/dist/carousel-icon-sidebar.cjs +3 -3
  50. package/dist/carousel-icon-sidebar.js +3 -3
  51. package/dist/carousel-image-hero.cjs +2 -2
  52. package/dist/carousel-image-hero.js +2 -2
  53. package/dist/carousel-multi-step-showcase.cjs +1 -1
  54. package/dist/carousel-multi-step-showcase.js +1 -1
  55. package/dist/carousel-portfolio-hero.cjs +5 -5
  56. package/dist/carousel-portfolio-hero.js +5 -5
  57. package/dist/carousel-progress-slider.cjs +1 -1
  58. package/dist/carousel-progress-slider.js +1 -1
  59. package/dist/case-studies-image-grid.cjs +2 -2
  60. package/dist/case-studies-image-grid.js +2 -2
  61. package/dist/case-studies-stats-card.cjs +1 -1
  62. package/dist/case-studies-stats-card.js +1 -1
  63. package/dist/case-study-prose-sidebar.cjs +1 -1
  64. package/dist/case-study-prose-sidebar.js +1 -1
  65. package/dist/case-study-toc-social-sidebar.cjs +1 -1
  66. package/dist/case-study-toc-social-sidebar.js +1 -1
  67. package/dist/comparison-ai-models.cjs +15 -15
  68. package/dist/comparison-ai-models.js +15 -15
  69. package/dist/comparison-feature-cards.cjs +1 -1
  70. package/dist/comparison-feature-cards.js +1 -1
  71. package/dist/comparison-feature-grid.cjs +1 -1
  72. package/dist/comparison-feature-grid.js +1 -1
  73. package/dist/comparison-metrics-rows.cjs +6 -6
  74. package/dist/comparison-metrics-rows.js +6 -6
  75. package/dist/comparison-table-tabs.cjs +5 -5
  76. package/dist/comparison-table-tabs.js +5 -5
  77. package/dist/comparison-table-tooltips.cjs +1 -1
  78. package/dist/comparison-table-tooltips.js +1 -1
  79. package/dist/comparison-table-two-column.cjs +2 -2
  80. package/dist/comparison-table-two-column.js +2 -2
  81. package/dist/components.cjs +22 -23
  82. package/dist/components.js +22 -23
  83. package/dist/contact-emergency.cjs +1 -1
  84. package/dist/contact-emergency.js +1 -1
  85. package/dist/contact-help-center.cjs +3 -3
  86. package/dist/contact-help-center.js +3 -3
  87. package/dist/cta-background-icon-badge.cjs +1 -1
  88. package/dist/cta-background-icon-badge.js +1 -1
  89. package/dist/cta-enterprise-dark-features.cjs +5 -5
  90. package/dist/cta-enterprise-dark-features.js +5 -5
  91. package/dist/cta-fullwidth-background.cjs +1 -1
  92. package/dist/cta-fullwidth-background.js +1 -1
  93. package/dist/cta-hero-feature-cards.cjs +3 -3
  94. package/dist/cta-hero-feature-cards.js +3 -3
  95. package/dist/cta-image-overlay-arrow.cjs +1 -1
  96. package/dist/cta-image-overlay-arrow.js +1 -1
  97. package/dist/cta-image-overlay-centered.cjs +2 -2
  98. package/dist/cta-image-overlay-centered.js +2 -2
  99. package/dist/cta-split-gradient-image.cjs +1 -1
  100. package/dist/cta-split-gradient-image.js +1 -1
  101. package/dist/cta-video-background-hero.cjs +3 -3
  102. package/dist/cta-video-background-hero.js +3 -3
  103. package/dist/cta-workflow-tabs.cjs +1 -1
  104. package/dist/cta-workflow-tabs.js +1 -1
  105. package/dist/faq-badge-support.cjs +26 -8
  106. package/dist/faq-badge-support.js +26 -8
  107. package/dist/faq-bordered-badge.cjs +26 -10
  108. package/dist/faq-bordered-badge.js +26 -10
  109. package/dist/faq-card-categories.cjs +21 -5
  110. package/dist/faq-card-categories.js +21 -5
  111. package/dist/faq-categorized-sections.cjs +20 -5
  112. package/dist/faq-categorized-sections.js +20 -5
  113. package/dist/faq-centered-accordion.cjs +19 -6
  114. package/dist/faq-centered-accordion.js +19 -6
  115. package/dist/faq-gradient-categories.cjs +20 -5
  116. package/dist/faq-gradient-categories.js +20 -5
  117. package/dist/faq-icon-benefits.cjs +11 -2
  118. package/dist/faq-icon-benefits.js +11 -2
  119. package/dist/faq-muted-cards.cjs +20 -7
  120. package/dist/faq-muted-cards.js +20 -7
  121. package/dist/faq-numbered-grid.cjs +11 -3
  122. package/dist/faq-numbered-grid.js +11 -3
  123. package/dist/faq-numbered-list.cjs +11 -3
  124. package/dist/faq-numbered-list.js +11 -3
  125. package/dist/faq-profile-sidebar.cjs +60 -23
  126. package/dist/faq-profile-sidebar.js +60 -23
  127. package/dist/faq-rounded-cards.cjs +24 -29
  128. package/dist/faq-rounded-cards.js +24 -29
  129. package/dist/faq-sidebar-navigation.cjs +49 -29
  130. package/dist/faq-sidebar-navigation.js +49 -29
  131. package/dist/faq-simple-accordion.cjs +18 -5
  132. package/dist/faq-simple-accordion.js +18 -5
  133. package/dist/faq-split-help.cjs +36 -21
  134. package/dist/faq-split-help.js +36 -21
  135. package/dist/faq-split-hero.cjs +86 -186
  136. package/dist/faq-split-hero.d.cts +16 -18
  137. package/dist/faq-split-hero.d.ts +16 -18
  138. package/dist/faq-split-hero.js +87 -187
  139. package/dist/faq-static-list.cjs +10 -3
  140. package/dist/faq-static-list.js +10 -3
  141. package/dist/feature-accordion-image.cjs +9 -3
  142. package/dist/feature-accordion-image.js +9 -3
  143. package/dist/feature-bento-utilities.cjs +1 -1
  144. package/dist/feature-bento-utilities.js +1 -1
  145. package/dist/feature-capabilities-grid.cjs +13 -13
  146. package/dist/feature-capabilities-grid.js +13 -13
  147. package/dist/feature-icon-grid-muted.cjs +2 -2
  148. package/dist/feature-icon-grid-muted.js +2 -2
  149. package/dist/feature-icon-tabs-content.cjs +3 -3
  150. package/dist/feature-icon-tabs-content.js +3 -3
  151. package/dist/feature-image-cards-three-column.cjs +2 -2
  152. package/dist/feature-image-cards-three-column.js +2 -2
  153. package/dist/feature-image-overlay-badge.cjs +2 -2
  154. package/dist/feature-image-overlay-badge.js +2 -2
  155. package/dist/feature-integration-cards.cjs +2 -2
  156. package/dist/feature-integration-cards.js +2 -2
  157. package/dist/feature-numbered-cards.cjs +1 -1
  158. package/dist/feature-numbered-cards.js +1 -1
  159. package/dist/feature-pattern-grid-links.cjs +1 -1
  160. package/dist/feature-pattern-grid-links.js +1 -1
  161. package/dist/feature-showcase.cjs +1 -2
  162. package/dist/feature-showcase.js +1 -2
  163. package/dist/feature-split-image-reverse.cjs +2 -8
  164. package/dist/feature-split-image-reverse.js +2 -8
  165. package/dist/feature-split-image.cjs +2 -2
  166. package/dist/feature-split-image.js +2 -2
  167. package/dist/feature-stats-highlight.cjs +50 -13
  168. package/dist/feature-stats-highlight.js +50 -13
  169. package/dist/feature-tabbed-content-image.cjs +5 -14
  170. package/dist/feature-tabbed-content-image.js +5 -14
  171. package/dist/feature-three-column-values.cjs +4 -44
  172. package/dist/feature-three-column-values.js +4 -44
  173. package/dist/feature-utility-cards-grid.cjs +83 -36
  174. package/dist/feature-utility-cards-grid.js +83 -36
  175. package/dist/footer-animated-social.cjs +3 -3
  176. package/dist/footer-animated-social.js +3 -3
  177. package/dist/footer-brand-links-contact.cjs +10 -10
  178. package/dist/footer-brand-links-contact.js +10 -10
  179. package/dist/footer-comprehensive-links.cjs +20 -20
  180. package/dist/footer-comprehensive-links.js +20 -20
  181. package/dist/footer-cta-banner.cjs +4 -4
  182. package/dist/footer-cta-banner.js +4 -4
  183. package/dist/footer-cta-social.cjs +2 -2
  184. package/dist/footer-cta-social.js +2 -2
  185. package/dist/footer-newsletter-minimal.cjs +5 -5
  186. package/dist/footer-newsletter-minimal.js +5 -5
  187. package/dist/footer-simple-centered.cjs +2 -2
  188. package/dist/footer-simple-centered.js +2 -2
  189. package/dist/hero-ad-campaign-expert.cjs +2 -2
  190. package/dist/hero-ad-campaign-expert.js +2 -2
  191. package/dist/hero-agency-animated-images.cjs +2 -2
  192. package/dist/hero-agency-animated-images.js +2 -2
  193. package/dist/hero-architecture-fullscreen.cjs +2 -2
  194. package/dist/hero-architecture-fullscreen.js +2 -2
  195. package/dist/hero-billing-platform-logos.cjs +4 -4
  196. package/dist/hero-billing-platform-logos.js +4 -4
  197. package/dist/hero-business-operations-mosaic.cjs +2 -2
  198. package/dist/hero-business-operations-mosaic.js +2 -2
  199. package/dist/hero-centered-gradient-cta.cjs +1 -1
  200. package/dist/hero-centered-gradient-cta.js +1 -1
  201. package/dist/hero-coming-soon-countdown.cjs +3 -3
  202. package/dist/hero-coming-soon-countdown.js +3 -3
  203. package/dist/hero-conversation-intelligence.cjs +1 -1
  204. package/dist/hero-conversation-intelligence.js +1 -1
  205. package/dist/hero-conversion-video-play.cjs +1 -1
  206. package/dist/hero-conversion-video-play.js +1 -1
  207. package/dist/hero-crm-streamlined.cjs +2 -2
  208. package/dist/hero-crm-streamlined.js +2 -2
  209. package/dist/hero-customer-support-layered.cjs +1 -1
  210. package/dist/hero-customer-support-layered.js +1 -1
  211. package/dist/hero-design-carousel-portfolio.cjs +3 -3
  212. package/dist/hero-design-carousel-portfolio.js +3 -3
  213. package/dist/hero-design-showcase-logos.cjs +1 -1
  214. package/dist/hero-design-showcase-logos.js +1 -1
  215. package/dist/hero-developer-tools-code.cjs +1 -1
  216. package/dist/hero-developer-tools-code.js +1 -1
  217. package/dist/hero-digital-agency-fullscreen.cjs +3 -3
  218. package/dist/hero-digital-agency-fullscreen.js +3 -3
  219. package/dist/hero-ecommerce-product-showcase.cjs +2 -2
  220. package/dist/hero-ecommerce-product-showcase.js +2 -2
  221. package/dist/hero-enterprise-security.cjs +2 -2
  222. package/dist/hero-enterprise-security.js +2 -2
  223. package/dist/hero-event-registration.cjs +3 -3
  224. package/dist/hero-event-registration.js +3 -3
  225. package/dist/hero-feature-cards-grid.cjs +2 -2
  226. package/dist/hero-feature-cards-grid.js +2 -2
  227. package/dist/hero-floating-images.cjs +6 -8
  228. package/dist/hero-floating-images.js +6 -8
  229. package/dist/hero-fullscreen-background-image.cjs +3 -3
  230. package/dist/hero-fullscreen-background-image.js +3 -3
  231. package/dist/hero-fullscreen-logo-cta.cjs +2 -2
  232. package/dist/hero-fullscreen-logo-cta.js +2 -2
  233. package/dist/hero-gradient-client-focused.cjs +1 -1
  234. package/dist/hero-gradient-client-focused.js +1 -1
  235. package/dist/hero-hiring-animated-text.cjs +2 -2
  236. package/dist/hero-hiring-animated-text.js +2 -2
  237. package/dist/hero-image-slider.cjs +1 -2
  238. package/dist/hero-image-slider.js +1 -2
  239. package/dist/hero-innovation-image-grid.cjs +3 -3
  240. package/dist/hero-innovation-image-grid.js +3 -3
  241. package/dist/hero-mental-health-team.cjs +4 -4
  242. package/dist/hero-mental-health-team.js +4 -4
  243. package/dist/hero-minimal-centered-dark.cjs +1 -1
  244. package/dist/hero-minimal-centered-dark.js +1 -1
  245. package/dist/hero-mobile-app-download.cjs +2 -2
  246. package/dist/hero-mobile-app-download.js +2 -2
  247. package/dist/hero-newsletter-minimal.cjs +1 -1
  248. package/dist/hero-newsletter-minimal.js +1 -1
  249. package/dist/hero-overlay-cta-grid.cjs +5 -5
  250. package/dist/hero-overlay-cta-grid.js +5 -5
  251. package/dist/hero-portfolio-creative.cjs +3 -3
  252. package/dist/hero-portfolio-creative.js +3 -3
  253. package/dist/hero-premium-split-avatars.cjs +4 -4
  254. package/dist/hero-premium-split-avatars.js +4 -4
  255. package/dist/hero-presentation-platform-video.cjs +4 -4
  256. package/dist/hero-presentation-platform-video.js +4 -4
  257. package/dist/hero-pricing-comparison.cjs +3 -3
  258. package/dist/hero-pricing-comparison.js +3 -3
  259. package/dist/hero-product-showcase-floating.cjs +3 -3
  260. package/dist/hero-product-showcase-floating.js +3 -3
  261. package/dist/hero-productivity-launcher-video.cjs +2 -2
  262. package/dist/hero-productivity-launcher-video.js +2 -2
  263. package/dist/hero-saas-dashboard-preview.cjs +1 -1
  264. package/dist/hero-saas-dashboard-preview.js +1 -1
  265. package/dist/hero-shared-inbox-layered.cjs +1 -1
  266. package/dist/hero-shared-inbox-layered.js +1 -1
  267. package/dist/hero-software-growth-video-dialog.cjs +2 -2
  268. package/dist/hero-software-growth-video-dialog.js +2 -2
  269. package/dist/hero-split-geometric-shapes.cjs +177 -23
  270. package/dist/hero-split-geometric-shapes.d.cts +38 -5
  271. package/dist/hero-split-geometric-shapes.d.ts +38 -5
  272. package/dist/hero-split-geometric-shapes.js +178 -24
  273. package/dist/hero-split-icon-cards.cjs +2 -2
  274. package/dist/hero-split-icon-cards.js +2 -2
  275. package/dist/hero-split-image-newsletter.cjs +1 -1
  276. package/dist/hero-split-image-newsletter.js +1 -1
  277. package/dist/hero-startup-launch-cta.cjs +2 -2
  278. package/dist/hero-startup-launch-cta.js +2 -2
  279. package/dist/hero-stats-social-proof.cjs +3 -3
  280. package/dist/hero-stats-social-proof.js +3 -3
  281. package/dist/hero-task-timer-animated.cjs +2 -2
  282. package/dist/hero-task-timer-animated.js +2 -2
  283. package/dist/hero-testimonial-image-grid.cjs +1 -1
  284. package/dist/hero-testimonial-image-grid.js +1 -1
  285. package/dist/hero-therapy-testimonial-grid.cjs +3 -3
  286. package/dist/hero-therapy-testimonial-grid.js +3 -3
  287. package/dist/hero-ui-library-showcase.cjs +1 -1
  288. package/dist/hero-ui-library-showcase.js +1 -1
  289. package/dist/hero-video-background-dark.cjs +1 -1
  290. package/dist/hero-video-background-dark.js +1 -1
  291. package/dist/hero-video-dialog-gradient.cjs +1 -1
  292. package/dist/hero-video-dialog-gradient.js +1 -1
  293. package/dist/hero-welcome-asymmetric-images.cjs +38 -2
  294. package/dist/hero-welcome-asymmetric-images.js +38 -2
  295. package/dist/image-slider.cjs +1 -2
  296. package/dist/image-slider.d.cts +0 -4
  297. package/dist/image-slider.d.ts +0 -4
  298. package/dist/image-slider.js +1 -2
  299. package/dist/index.cjs +22 -23
  300. package/dist/index.js +22 -23
  301. package/dist/industries-badge-list-bordered.cjs +12 -6
  302. package/dist/industries-badge-list-bordered.js +12 -6
  303. package/dist/industries-expandable-showcase.cjs +15 -7
  304. package/dist/industries-expandable-showcase.js +15 -7
  305. package/dist/industries-hover-reveal-grid.cjs +13 -6
  306. package/dist/industries-hover-reveal-grid.js +13 -6
  307. package/dist/industries-timeline-table.cjs +11 -5
  308. package/dist/industries-timeline-table.js +11 -5
  309. package/dist/interior-carousel.cjs +2 -2
  310. package/dist/interior-carousel.js +2 -2
  311. package/dist/link-page-bento-layout.cjs +11 -14
  312. package/dist/link-page-bento-layout.js +11 -14
  313. package/dist/link-page-grid-cards.cjs +8 -12
  314. package/dist/link-page-grid-cards.js +8 -12
  315. package/dist/link-page-minimal-profile.cjs +6 -8
  316. package/dist/link-page-minimal-profile.js +6 -8
  317. package/dist/link-page-newsletter-social.cjs +10 -14
  318. package/dist/link-page-newsletter-social.js +10 -14
  319. package/dist/link-tree-block.cjs +10 -13
  320. package/dist/link-tree-block.js +10 -13
  321. package/dist/list-searchable-grid.cjs +3 -3
  322. package/dist/list-searchable-grid.js +3 -3
  323. package/dist/navbar-animated-preview.cjs +13 -7
  324. package/dist/navbar-animated-preview.js +13 -7
  325. package/dist/navbar-centered-menu.cjs +9 -3
  326. package/dist/navbar-centered-menu.js +9 -3
  327. package/dist/navbar-dark-icons.cjs +14 -8
  328. package/dist/navbar-dark-icons.js +14 -8
  329. package/dist/navbar-dropdown-menu.cjs +11 -5
  330. package/dist/navbar-dropdown-menu.js +11 -5
  331. package/dist/navbar-education-platform.cjs +9 -3
  332. package/dist/navbar-education-platform.js +9 -3
  333. package/dist/navbar-enterprise-mega.cjs +20 -14
  334. package/dist/navbar-enterprise-mega.js +20 -14
  335. package/dist/navbar-feature-grid.cjs +11 -5
  336. package/dist/navbar-feature-grid.js +11 -5
  337. package/dist/navbar-image-preview.cjs +4 -4
  338. package/dist/navbar-image-preview.js +4 -4
  339. package/dist/navbar-mega-menu.cjs +3 -3
  340. package/dist/navbar-mega-menu.js +3 -3
  341. package/dist/navbar-multi-column-groups.cjs +9 -3
  342. package/dist/navbar-multi-column-groups.js +9 -3
  343. package/dist/navbar-platform-resources.cjs +10 -4
  344. package/dist/navbar-platform-resources.js +10 -4
  345. package/dist/navbar-sidebar-mobile.cjs +9 -3
  346. package/dist/navbar-sidebar-mobile.js +9 -3
  347. package/dist/navbar-transparent-overlay.cjs +3 -3
  348. package/dist/navbar-transparent-overlay.js +3 -3
  349. package/dist/process-expandable-timeline.cjs +3 -3
  350. package/dist/process-expandable-timeline.js +3 -3
  351. package/dist/process-hover-cards.cjs +2 -2
  352. package/dist/process-hover-cards.js +2 -2
  353. package/dist/process-icon-timeline.cjs +3 -3
  354. package/dist/process-icon-timeline.js +3 -3
  355. package/dist/process-mission-principles.cjs +2 -2
  356. package/dist/process-mission-principles.js +2 -2
  357. package/dist/process-numbered-services.cjs +2 -2
  358. package/dist/process-numbered-services.js +2 -2
  359. package/dist/process-roadmap-timeline.cjs +6 -6
  360. package/dist/process-roadmap-timeline.js +6 -6
  361. package/dist/process-scroll-image.cjs +2 -2
  362. package/dist/process-scroll-image.js +2 -2
  363. package/dist/process-steps-grid.cjs +2 -2
  364. package/dist/process-steps-grid.js +2 -2
  365. package/dist/process-sticky-steps.cjs +2 -2
  366. package/dist/process-sticky-steps.js +2 -2
  367. package/dist/project-alternating-motion.cjs +1 -1
  368. package/dist/project-alternating-motion.js +1 -1
  369. package/dist/project-background-reveal.cjs +2 -2
  370. package/dist/project-background-reveal.js +2 -2
  371. package/dist/project-card-overlay.cjs +7 -7
  372. package/dist/project-card-overlay.js +7 -7
  373. package/dist/project-carousel-cinematic.cjs +2 -2
  374. package/dist/project-carousel-cinematic.js +2 -2
  375. package/dist/project-carousel-detail-cards.cjs +2 -2
  376. package/dist/project-carousel-detail-cards.js +2 -2
  377. package/dist/project-carousel-minimal.cjs +2 -2
  378. package/dist/project-carousel-minimal.js +2 -2
  379. package/dist/project-detail-architecture-carousel.cjs +4 -4
  380. package/dist/project-detail-architecture-carousel.js +4 -4
  381. package/dist/project-featured-carousel.cjs +1 -1
  382. package/dist/project-featured-carousel.js +1 -1
  383. package/dist/project-filterable-gallery.cjs +5 -5
  384. package/dist/project-filterable-gallery.js +5 -5
  385. package/dist/project-filterable-three-column.cjs +5 -5
  386. package/dist/project-filterable-three-column.js +5 -5
  387. package/dist/project-interactive-hover-reveal.cjs +7 -7
  388. package/dist/project-interactive-hover-reveal.js +7 -7
  389. package/dist/project-masonry-columns.cjs +1 -1
  390. package/dist/project-masonry-columns.js +1 -1
  391. package/dist/project-scroll-reveal.cjs +4 -4
  392. package/dist/project-scroll-reveal.js +4 -4
  393. package/dist/project-showcase-alternating.cjs +1 -1
  394. package/dist/project-showcase-alternating.js +1 -1
  395. package/dist/project-sticky-scroll.cjs +3 -3
  396. package/dist/project-sticky-scroll.js +3 -3
  397. package/dist/project-studio-hover-preview.cjs +7 -7
  398. package/dist/project-studio-hover-preview.js +7 -7
  399. package/dist/project-video-carousel.cjs +2 -2
  400. package/dist/project-video-carousel.js +2 -2
  401. package/dist/project-video-hover-bento.cjs +2 -2
  402. package/dist/project-video-hover-bento.js +2 -2
  403. package/dist/project-video-hover-grid.cjs +2 -2
  404. package/dist/project-video-hover-grid.js +2 -2
  405. package/dist/project-video-hover-rounded.cjs +3 -3
  406. package/dist/project-video-hover-rounded.js +3 -3
  407. package/dist/project-video-hover-stack.cjs +3 -3
  408. package/dist/project-video-hover-stack.js +3 -3
  409. package/dist/project-video-hover-two-by-two.cjs +3 -3
  410. package/dist/project-video-hover-two-by-two.js +3 -3
  411. package/dist/project-zigzag-layout.cjs +1 -1
  412. package/dist/project-zigzag-layout.js +1 -1
  413. package/dist/registry.cjs +1825 -2131
  414. package/dist/registry.js +1825 -2131
  415. package/dist/resource-detail-whitepaper-sidebar.cjs +6 -4
  416. package/dist/resource-detail-whitepaper-sidebar.js +6 -4
  417. package/dist/resource-list-course-cards.cjs +1 -1
  418. package/dist/resource-list-course-cards.js +1 -1
  419. package/dist/resource-list-featured-articles.cjs +6 -6
  420. package/dist/resource-list-featured-articles.js +6 -6
  421. package/dist/resource-list-hero-filter.cjs +2 -2
  422. package/dist/resource-list-hero-filter.js +2 -2
  423. package/dist/resource-list-news-updates.cjs +1 -1
  424. package/dist/resource-list-news-updates.js +1 -1
  425. package/dist/reviews-images-helpful.cjs +27 -197
  426. package/dist/reviews-images-helpful.js +28 -198
  427. package/dist/reviews-list-verified.cjs +11 -62
  428. package/dist/reviews-list-verified.js +12 -63
  429. package/dist/service-detail-image-hero.cjs +2 -2
  430. package/dist/service-detail-image-hero.js +2 -2
  431. package/dist/service-detail-stats-hero.cjs +2 -2
  432. package/dist/service-detail-stats-hero.js +2 -2
  433. package/dist/service-hover-carousel.cjs +2 -2
  434. package/dist/service-hover-carousel.js +2 -2
  435. package/dist/services-list-feature-spotlight.cjs +3 -3
  436. package/dist/services-list-feature-spotlight.js +3 -3
  437. package/dist/stats-circular-progress.cjs +1 -1
  438. package/dist/stats-circular-progress.js +1 -1
  439. package/dist/stats-icon-cards.cjs +1 -1
  440. package/dist/stats-icon-cards.js +1 -1
  441. package/dist/stats-timeline-tabs.cjs +1 -1
  442. package/dist/stats-timeline-tabs.js +1 -1
  443. package/dist/team-media-showcase.cjs +4 -4
  444. package/dist/team-media-showcase.js +4 -4
  445. package/dist/testimonial-carousel-cards.cjs +2 -2
  446. package/dist/testimonial-carousel-cards.js +2 -2
  447. package/dist/testimonials-animated-split.cjs +19 -166
  448. package/dist/testimonials-animated-split.js +19 -166
  449. package/dist/testimonials-bento-grid.cjs +11 -56
  450. package/dist/testimonials-bento-grid.js +12 -57
  451. package/dist/testimonials-carousel-image.cjs +15 -153
  452. package/dist/testimonials-carousel-image.js +15 -153
  453. package/dist/testimonials-centered-avatars.cjs +9 -37
  454. package/dist/testimonials-centered-avatars.js +10 -38
  455. package/dist/testimonials-company-logo.cjs +4 -8
  456. package/dist/testimonials-company-logo.js +4 -8
  457. package/dist/testimonials-grid-add-review.cjs +7 -47
  458. package/dist/testimonials-grid-add-review.js +8 -48
  459. package/dist/testimonials-large-quote.cjs +11 -21
  460. package/dist/testimonials-large-quote.js +12 -22
  461. package/dist/testimonials-logo-cards.cjs +9 -53
  462. package/dist/testimonials-logo-cards.js +10 -54
  463. package/dist/testimonials-marquee.cjs +15 -60
  464. package/dist/testimonials-marquee.js +16 -61
  465. package/dist/testimonials-masonry-grid.cjs +11 -71
  466. package/dist/testimonials-masonry-grid.js +12 -72
  467. package/dist/testimonials-mini-dividers.cjs +9 -61
  468. package/dist/testimonials-mini-dividers.js +10 -62
  469. package/dist/testimonials-minimal-numbered.cjs +48 -57
  470. package/dist/testimonials-minimal-numbered.js +48 -57
  471. package/dist/testimonials-parallax-number.cjs +29 -44
  472. package/dist/testimonials-parallax-number.js +29 -44
  473. package/dist/testimonials-quote-carousel.cjs +9 -48
  474. package/dist/testimonials-quote-carousel.js +10 -49
  475. package/dist/testimonials-scrolling-columns.cjs +9 -165
  476. package/dist/testimonials-scrolling-columns.js +10 -166
  477. package/dist/testimonials-simple-grid.cjs +12 -63
  478. package/dist/testimonials-simple-grid.js +13 -64
  479. package/dist/testimonials-slider-minimal.cjs +18 -41
  480. package/dist/testimonials-slider-minimal.js +18 -41
  481. package/dist/testimonials-split-image.cjs +15 -24
  482. package/dist/testimonials-split-image.js +16 -25
  483. package/dist/testimonials-stats-header.cjs +10 -35
  484. package/dist/testimonials-stats-header.js +11 -36
  485. package/dist/testimonials-twitter-cards.cjs +7 -59
  486. package/dist/testimonials-twitter-cards.js +8 -60
  487. package/dist/testimonials-wall-compact.cjs +9 -94
  488. package/dist/testimonials-wall-compact.js +10 -95
  489. package/dist/timeline-changelog-badges.cjs +4 -4
  490. package/dist/timeline-changelog-badges.js +4 -4
  491. package/dist/timeline-history-prose.cjs +4 -4
  492. package/dist/timeline-history-prose.js +4 -4
  493. package/dist/timeline-horizontal-icons.cjs +3 -3
  494. package/dist/timeline-horizontal-icons.js +3 -3
  495. package/dist/timeline-horizontal-phases.cjs +3 -3
  496. package/dist/timeline-horizontal-phases.js +3 -3
  497. package/dist/timeline-stepper-animated.cjs +3 -3
  498. package/dist/timeline-stepper-animated.js +3 -3
  499. package/dist/timeline-tabbed-phases.cjs +4 -4
  500. package/dist/timeline-tabbed-phases.js +4 -4
  501. package/package.json +1 -1
@@ -535,39 +535,10 @@ var Section = React__default.forwardRef(
535
535
  }
536
536
  );
537
537
  Section.displayName = "Section";
538
-
539
- // lib/blockBrandedIconsAndPlaceholders.ts
540
- var blockBrandedIconsAndPlaceholders = {
541
- avatar1: "https://cdn.ing/assets/i/r/286239/ebm7o3j2kx48vw98emnwjaf5qvl6/avatar-1.webp",
542
- avatar2: "https://cdn.ing/assets/i/r/286240/vgf3rrkwn0769pfdtpal60uo5vpw/avatar-2.webp",
543
- avatar3: "https://cdn.ing/assets/i/r/286241/05vbqt3lls0q974r8fv4zn0njllq/avatar-3.webp"};
544
- var DEFAULT_TESTIMONIALS = [
545
- {
546
- quote: "This platform has completely transformed how we approach our daily operations. The intuitive design and powerful features have made our team significantly more productive.",
547
- author: "Sarah Chen",
548
- role: "Design Director",
549
- company: "Linear",
550
- avatarSrc: blockBrandedIconsAndPlaceholders.avatar1
551
- },
552
- {
553
- quote: "The most elegant solution we've ever implemented. Every detail has been thoughtfully considered, and the results speak for themselves.",
554
- author: "Marcus Webb",
555
- role: "Creative Lead",
556
- company: "Vercel",
557
- avatarSrc: blockBrandedIconsAndPlaceholders.avatar2
558
- },
559
- {
560
- quote: "Pure craftsmanship in every single detail. The attention to quality is evident throughout the entire experience.",
561
- author: "Elena Frost",
562
- role: "Head of Product",
563
- company: "Stripe",
564
- avatarSrc: blockBrandedIconsAndPlaceholders.avatar3
565
- }
566
- ];
567
538
  function TestimonialsMinimalNumbered({
568
- testimonials = DEFAULT_TESTIMONIALS,
539
+ testimonials,
569
540
  testimonialsSlot,
570
- autoPlayInterval = 5e3,
541
+ autoPlayInterval,
571
542
  className,
572
543
  contentClassName,
573
544
  numberClassName,
@@ -581,6 +552,8 @@ function TestimonialsMinimalNumbered({
581
552
  }) {
582
553
  const [active, setActive] = useState(0);
583
554
  const [isTransitioning, setIsTransitioning] = useState(false);
555
+ const totalTestimonials = testimonials?.length ?? 0;
556
+ const effectiveAutoPlayInterval = autoPlayInterval ?? 5e3;
584
557
  const handleChange = useCallback(
585
558
  (index) => {
586
559
  if (index === active || isTransitioning) return;
@@ -593,31 +566,37 @@ function TestimonialsMinimalNumbered({
593
566
  [active, isTransitioning]
594
567
  );
595
568
  const handlePrev = useCallback(() => {
596
- const newIndex = (active - 1 + testimonials.length) % testimonials.length;
569
+ if (totalTestimonials === 0) return;
570
+ const newIndex = (active - 1 + totalTestimonials) % totalTestimonials;
597
571
  handleChange(newIndex);
598
- }, [active, testimonials.length, handleChange]);
572
+ }, [active, totalTestimonials, handleChange]);
599
573
  const handleNext = useCallback(() => {
600
- const newIndex = (active + 1) % testimonials.length;
574
+ if (totalTestimonials === 0) return;
575
+ const newIndex = (active + 1) % totalTestimonials;
601
576
  handleChange(newIndex);
602
- }, [active, testimonials.length, handleChange]);
577
+ }, [active, totalTestimonials, handleChange]);
603
578
  useEffect(() => {
604
- if (autoPlayInterval <= 0) return;
605
- const interval = setInterval(handleNext, autoPlayInterval);
579
+ if (effectiveAutoPlayInterval <= 0 || totalTestimonials === 0) return;
580
+ const interval = setInterval(handleNext, effectiveAutoPlayInterval);
606
581
  return () => clearInterval(interval);
607
- }, [autoPlayInterval, handleNext]);
608
- const current = testimonials[active];
609
- const getAuthorName = (testimonial) => {
582
+ }, [effectiveAutoPlayInterval, handleNext, totalTestimonials]);
583
+ const current = testimonials?.[active];
584
+ const getAuthorName = useCallback((testimonial) => {
610
585
  if (typeof testimonial.author === "string") return testimonial.author;
611
586
  return "";
612
- };
613
- const getAvatarSrc = (testimonial) => {
614
- return testimonial.avatarSrc || testimonial.avatar?.src;
615
- };
616
- const getInitials = (name) => {
587
+ }, []);
588
+ const getAvatarSrc = useCallback(
589
+ (testimonial) => {
590
+ return testimonial.avatarSrc || testimonial.avatar?.src;
591
+ },
592
+ []
593
+ );
594
+ const getInitials = useCallback((name) => {
617
595
  return name.split(" ").map((n) => n[0]).join("");
618
- };
596
+ }, []);
619
597
  const renderedTestimonial = useMemo(() => {
620
598
  if (testimonialsSlot) return testimonialsSlot;
599
+ if (!current) return null;
621
600
  const authorName = getAuthorName(current);
622
601
  const avatarSrc = getAvatarSrc(current);
623
602
  return /* @__PURE__ */ jsxs("div", { className: cn("flex items-start gap-8", contentClassName), children: [
@@ -625,7 +604,7 @@ function TestimonialsMinimalNumbered({
625
604
  "span",
626
605
  {
627
606
  className: cn(
628
- "text-8xl font-light leading-none text-foreground/10 select-none transition-all duration-500 md:text-9xl",
607
+ "text-8xl font-light leading-none select-none transition-all duration-500 md:text-9xl",
629
608
  numberClassName
630
609
  ),
631
610
  style: { fontFeatureSettings: '"tnum"' },
@@ -663,16 +642,16 @@ function TestimonialsMinimalNumbered({
663
642
  authorClassName
664
643
  ),
665
644
  children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
666
- /* @__PURE__ */ jsxs(Avatar, { className: "size-12 ring-2 ring-foreground/10", children: [
645
+ /* @__PURE__ */ jsxs(Avatar, { className: "size-12 ring-2", children: [
667
646
  /* @__PURE__ */ jsx(AvatarImage, { src: avatarSrc, alt: authorName }),
668
647
  /* @__PURE__ */ jsx(AvatarFallback, { children: getInitials(authorName) })
669
648
  ] }),
670
649
  /* @__PURE__ */ jsxs("div", { children: [
671
650
  current.author && (typeof current.author === "string" ? /* @__PURE__ */ jsx("p", { className: "font-medium", children: current.author }) : current.author),
672
- /* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground", children: [
651
+ /* @__PURE__ */ jsxs("p", { className: "text-sm", children: [
673
652
  current.role && (typeof current.role === "string" ? current.role : null),
674
653
  current.company && (typeof current.company === "string" ? /* @__PURE__ */ jsxs(Fragment, { children: [
675
- /* @__PURE__ */ jsx("span", { className: "mx-2 text-foreground/20", children: "/" }),
654
+ /* @__PURE__ */ jsx("span", { className: "mx-2 ", children: "/" }),
676
655
  /* @__PURE__ */ jsx("span", { children: current.company })
677
656
  ] }) : null)
678
657
  ] })
@@ -682,7 +661,19 @@ function TestimonialsMinimalNumbered({
682
661
  )
683
662
  ] })
684
663
  ] });
685
- }, [testimonialsSlot, contentClassName, numberClassName, active, current, isTransitioning, quoteClassName, authorClassName]);
664
+ }, [
665
+ testimonialsSlot,
666
+ contentClassName,
667
+ numberClassName,
668
+ active,
669
+ current,
670
+ isTransitioning,
671
+ quoteClassName,
672
+ authorClassName,
673
+ getAuthorName,
674
+ getAvatarSrc,
675
+ getInitials
676
+ ]);
686
677
  return /* @__PURE__ */ jsx(
687
678
  Section,
688
679
  {
@@ -701,7 +692,7 @@ function TestimonialsMinimalNumbered({
701
692
  navigationClassName
702
693
  ),
703
694
  children: [
704
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-6", children: [
695
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-6", children: testimonials && testimonials.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
705
696
  /* @__PURE__ */ jsx("div", { className: "flex items-center gap-3", children: testimonials.map((_, index) => /* @__PURE__ */ jsx(
706
697
  "button",
707
698
  {
@@ -712,26 +703,26 @@ function TestimonialsMinimalNumbered({
712
703
  {
713
704
  className: cn(
714
705
  "block h-px transition-all duration-500 ease-out",
715
- index === active ? "w-12 bg-foreground" : "w-6 bg-foreground/20 group-hover:w-8 group-hover:bg-foreground/40"
706
+ index === active ? "w-12 " : "w-6 group-hover:w-8 "
716
707
  )
717
708
  }
718
709
  )
719
710
  },
720
711
  index
721
712
  )) }),
722
- /* @__PURE__ */ jsxs("span", { className: "text-xs tracking-widest text-muted-foreground uppercase", children: [
713
+ /* @__PURE__ */ jsxs("span", { className: "text-xs tracking-widest uppercase", children: [
723
714
  String(active + 1).padStart(2, "0"),
724
715
  " /",
725
716
  " ",
726
717
  String(testimonials.length).padStart(2, "0")
727
718
  ] })
728
- ] }),
719
+ ] }) }),
729
720
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
730
721
  /* @__PURE__ */ jsx(
731
722
  "button",
732
723
  {
733
724
  onClick: handlePrev,
734
- className: "rounded-full p-2 text-foreground/40 transition-all duration-300 hover:bg-foreground/5 hover:text-foreground",
725
+ className: "rounded-full p-2 transition-all duration-300 ",
735
726
  children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-left", size: 20 })
736
727
  }
737
728
  ),
@@ -739,7 +730,7 @@ function TestimonialsMinimalNumbered({
739
730
  "button",
740
731
  {
741
732
  onClick: handleNext,
742
- className: "rounded-full p-2 text-foreground/40 transition-all duration-300 hover:bg-foreground/5 hover:text-foreground",
733
+ className: "rounded-full p-2 transition-all duration-300 ",
743
734
  children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/chevron-right", size: 20 })
744
735
  }
745
736
  )
@@ -390,30 +390,10 @@ var Section = React__default.default.forwardRef(
390
390
  }
391
391
  );
392
392
  Section.displayName = "Section";
393
- var DEFAULT_TESTIMONIALS = [
394
- {
395
- quote: "Transformed our entire creative process overnight.",
396
- author: "Sarah Chen",
397
- role: "Design Director",
398
- company: "Linear"
399
- },
400
- {
401
- quote: "The most elegant solution we've ever implemented.",
402
- author: "Marcus Webb",
403
- role: "Creative Lead",
404
- company: "Vercel"
405
- },
406
- {
407
- quote: "Pure craftsmanship in every single detail.",
408
- author: "Elena Frost",
409
- role: "Head of Product",
410
- company: "Stripe"
411
- }
412
- ];
413
393
  function TestimonialsParallaxNumber({
414
- testimonials = DEFAULT_TESTIMONIALS,
394
+ testimonials,
415
395
  testimonialsSlot,
416
- autoPlayInterval = 6e3,
396
+ autoPlayInterval,
417
397
  verticalLabel,
418
398
  className,
419
399
  contentClassName,
@@ -428,6 +408,8 @@ function TestimonialsParallaxNumber({
428
408
  }) {
429
409
  const [activeIndex, setActiveIndex] = React.useState(0);
430
410
  const containerRef = React.useRef(null);
411
+ const totalTestimonials = testimonials?.length ?? 0;
412
+ const effectiveAutoPlayInterval = autoPlayInterval ?? 6e3;
431
413
  const mouseX = framerMotion.useMotionValue(0);
432
414
  const mouseY = framerMotion.useMotionValue(0);
433
415
  const springConfig = { damping: 25, stiffness: 200 };
@@ -435,7 +417,7 @@ function TestimonialsParallaxNumber({
435
417
  const y = framerMotion.useSpring(mouseY, springConfig);
436
418
  const numberX = framerMotion.useTransform(x, [-200, 200], [-20, 20]);
437
419
  const numberY = framerMotion.useTransform(y, [-200, 200], [-10, 10]);
438
- const handleMouseMove = (e) => {
420
+ const handleMouseMove = React.useCallback((e) => {
439
421
  const rect = containerRef.current?.getBoundingClientRect();
440
422
  if (rect) {
441
423
  const centerX = rect.left + rect.width / 2;
@@ -443,35 +425,38 @@ function TestimonialsParallaxNumber({
443
425
  mouseX.set(e.clientX - centerX);
444
426
  mouseY.set(e.clientY - centerY);
445
427
  }
446
- };
428
+ }, [mouseX, mouseY]);
447
429
  const goNext = React.useCallback(() => {
448
- setActiveIndex((prev) => (prev + 1) % testimonials.length);
449
- }, [testimonials.length]);
430
+ if (totalTestimonials === 0) return;
431
+ setActiveIndex((prev) => (prev + 1) % totalTestimonials);
432
+ }, [totalTestimonials]);
450
433
  const goPrev = React.useCallback(() => {
434
+ if (totalTestimonials === 0) return;
451
435
  setActiveIndex(
452
- (prev) => (prev - 1 + testimonials.length) % testimonials.length
436
+ (prev) => (prev - 1 + totalTestimonials) % totalTestimonials
453
437
  );
454
- }, [testimonials.length]);
438
+ }, [totalTestimonials]);
455
439
  React.useEffect(() => {
456
- if (autoPlayInterval <= 0) return;
457
- const timer = setInterval(goNext, autoPlayInterval);
440
+ if (effectiveAutoPlayInterval <= 0 || totalTestimonials === 0) return;
441
+ const timer = setInterval(goNext, effectiveAutoPlayInterval);
458
442
  return () => clearInterval(timer);
459
- }, [autoPlayInterval, goNext]);
460
- const current = testimonials[activeIndex];
461
- const getAuthorName = (testimonial) => {
443
+ }, [effectiveAutoPlayInterval, goNext, totalTestimonials]);
444
+ const current = testimonials?.[activeIndex];
445
+ const getAuthorName = React.useCallback((testimonial) => {
462
446
  if (typeof testimonial.author === "string") return testimonial.author;
463
447
  return "";
464
- };
465
- const getQuoteText = (testimonial) => {
448
+ }, []);
449
+ const getQuoteText = React.useCallback((testimonial) => {
466
450
  if (typeof testimonial.quote === "string") return testimonial.quote;
467
451
  return "";
468
- };
469
- const getCompanyName = (testimonial) => {
452
+ }, []);
453
+ const getCompanyName = React.useCallback((testimonial) => {
470
454
  if (typeof testimonial.company === "string") return testimonial.company;
471
455
  return "";
472
- };
456
+ }, []);
473
457
  const renderedTestimonial = React.useMemo(() => {
474
458
  if (testimonialsSlot) return testimonialsSlot;
459
+ if (!current) return null;
475
460
  getAuthorName(current);
476
461
  const quoteText = getQuoteText(current);
477
462
  const companyName = getCompanyName(current);
@@ -486,7 +471,7 @@ function TestimonialsParallaxNumber({
486
471
  framerMotion.motion.div,
487
472
  {
488
473
  className: cn(
489
- "pointer-events-none absolute -left-8 top-1/2 -translate-y-1/2 select-none text-[20rem] font-bold leading-none tracking-tighter text-foreground/[0.03]",
474
+ "pointer-events-none absolute -left-8 top-1/2 -translate-y-1/2 select-none text-[20rem] font-bold leading-none tracking-tighter text-muted-foreground/[0.05]",
490
475
  numberClassName
491
476
  ),
492
477
  style: { x: numberX, y: numberY },
@@ -523,7 +508,7 @@ function TestimonialsParallaxNumber({
523
508
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative mt-8 h-32 w-px bg-border", children: /* @__PURE__ */ jsxRuntime.jsx(
524
509
  framerMotion.motion.div,
525
510
  {
526
- className: "absolute left-0 top-0 w-full origin-top bg-foreground",
511
+ className: "absolute left-0 top-0 w-full origin-top bg-primary",
527
512
  animate: {
528
513
  height: `${(activeIndex + 1) / testimonials.length * 100}%`
529
514
  },
@@ -599,7 +584,7 @@ function TestimonialsParallaxNumber({
599
584
  /* @__PURE__ */ jsxRuntime.jsx(
600
585
  framerMotion.motion.div,
601
586
  {
602
- className: "h-px w-8 bg-foreground",
587
+ className: "h-px w-8 bg-primary",
603
588
  initial: { scaleX: 0 },
604
589
  animate: { scaleX: 1 },
605
590
  transition: { duration: 0.6, delay: 0.3 },
@@ -632,7 +617,7 @@ function TestimonialsParallaxNumber({
632
617
  height: "18",
633
618
  viewBox: "0 0 16 16",
634
619
  fill: "none",
635
- className: "relative z-10 text-foreground transition-colors group-hover:text-foreground/70",
620
+ className: "relative z-10 text-muted-foreground transition-colors group-hover:text-foreground",
636
621
  children: /* @__PURE__ */ jsxRuntime.jsx(
637
622
  "path",
638
623
  {
@@ -660,7 +645,7 @@ function TestimonialsParallaxNumber({
660
645
  height: "18",
661
646
  viewBox: "0 0 16 16",
662
647
  fill: "none",
663
- className: "relative z-10 text-foreground transition-colors group-hover:text-foreground/70",
648
+ className: "relative z-10 text-muted-foreground transition-colors group-hover:text-foreground",
664
649
  children: /* @__PURE__ */ jsxRuntime.jsx(
665
650
  "path",
666
651
  {
@@ -700,7 +685,7 @@ function TestimonialsParallaxNumber({
700
685
  ]
701
686
  }
702
687
  );
703
- }, [testimonialsSlot, contentClassName, numberX, numberY, numberClassName, activeIndex, testimonials, verticalLabel, quoteClassName, authorClassName, current, navigationClassName, containerRef, handleMouseMove, goPrev, goNext]);
688
+ }, [testimonialsSlot, contentClassName, numberX, numberY, numberClassName, activeIndex, testimonials, verticalLabel, quoteClassName, authorClassName, current, navigationClassName, handleMouseMove, goPrev, goNext, totalTestimonials, getAuthorName, getQuoteText, getCompanyName]);
704
689
  return /* @__PURE__ */ jsxRuntime.jsx(
705
690
  Section,
706
691
  {
@@ -384,30 +384,10 @@ var Section = React.forwardRef(
384
384
  }
385
385
  );
386
386
  Section.displayName = "Section";
387
- var DEFAULT_TESTIMONIALS = [
388
- {
389
- quote: "Transformed our entire creative process overnight.",
390
- author: "Sarah Chen",
391
- role: "Design Director",
392
- company: "Linear"
393
- },
394
- {
395
- quote: "The most elegant solution we've ever implemented.",
396
- author: "Marcus Webb",
397
- role: "Creative Lead",
398
- company: "Vercel"
399
- },
400
- {
401
- quote: "Pure craftsmanship in every single detail.",
402
- author: "Elena Frost",
403
- role: "Head of Product",
404
- company: "Stripe"
405
- }
406
- ];
407
387
  function TestimonialsParallaxNumber({
408
- testimonials = DEFAULT_TESTIMONIALS,
388
+ testimonials,
409
389
  testimonialsSlot,
410
- autoPlayInterval = 6e3,
390
+ autoPlayInterval,
411
391
  verticalLabel,
412
392
  className,
413
393
  contentClassName,
@@ -422,6 +402,8 @@ function TestimonialsParallaxNumber({
422
402
  }) {
423
403
  const [activeIndex, setActiveIndex] = useState(0);
424
404
  const containerRef = useRef(null);
405
+ const totalTestimonials = testimonials?.length ?? 0;
406
+ const effectiveAutoPlayInterval = autoPlayInterval ?? 6e3;
425
407
  const mouseX = useMotionValue(0);
426
408
  const mouseY = useMotionValue(0);
427
409
  const springConfig = { damping: 25, stiffness: 200 };
@@ -429,7 +411,7 @@ function TestimonialsParallaxNumber({
429
411
  const y = useSpring(mouseY, springConfig);
430
412
  const numberX = useTransform(x, [-200, 200], [-20, 20]);
431
413
  const numberY = useTransform(y, [-200, 200], [-10, 10]);
432
- const handleMouseMove = (e) => {
414
+ const handleMouseMove = useCallback((e) => {
433
415
  const rect = containerRef.current?.getBoundingClientRect();
434
416
  if (rect) {
435
417
  const centerX = rect.left + rect.width / 2;
@@ -437,35 +419,38 @@ function TestimonialsParallaxNumber({
437
419
  mouseX.set(e.clientX - centerX);
438
420
  mouseY.set(e.clientY - centerY);
439
421
  }
440
- };
422
+ }, [mouseX, mouseY]);
441
423
  const goNext = useCallback(() => {
442
- setActiveIndex((prev) => (prev + 1) % testimonials.length);
443
- }, [testimonials.length]);
424
+ if (totalTestimonials === 0) return;
425
+ setActiveIndex((prev) => (prev + 1) % totalTestimonials);
426
+ }, [totalTestimonials]);
444
427
  const goPrev = useCallback(() => {
428
+ if (totalTestimonials === 0) return;
445
429
  setActiveIndex(
446
- (prev) => (prev - 1 + testimonials.length) % testimonials.length
430
+ (prev) => (prev - 1 + totalTestimonials) % totalTestimonials
447
431
  );
448
- }, [testimonials.length]);
432
+ }, [totalTestimonials]);
449
433
  useEffect(() => {
450
- if (autoPlayInterval <= 0) return;
451
- const timer = setInterval(goNext, autoPlayInterval);
434
+ if (effectiveAutoPlayInterval <= 0 || totalTestimonials === 0) return;
435
+ const timer = setInterval(goNext, effectiveAutoPlayInterval);
452
436
  return () => clearInterval(timer);
453
- }, [autoPlayInterval, goNext]);
454
- const current = testimonials[activeIndex];
455
- const getAuthorName = (testimonial) => {
437
+ }, [effectiveAutoPlayInterval, goNext, totalTestimonials]);
438
+ const current = testimonials?.[activeIndex];
439
+ const getAuthorName = useCallback((testimonial) => {
456
440
  if (typeof testimonial.author === "string") return testimonial.author;
457
441
  return "";
458
- };
459
- const getQuoteText = (testimonial) => {
442
+ }, []);
443
+ const getQuoteText = useCallback((testimonial) => {
460
444
  if (typeof testimonial.quote === "string") return testimonial.quote;
461
445
  return "";
462
- };
463
- const getCompanyName = (testimonial) => {
446
+ }, []);
447
+ const getCompanyName = useCallback((testimonial) => {
464
448
  if (typeof testimonial.company === "string") return testimonial.company;
465
449
  return "";
466
- };
450
+ }, []);
467
451
  const renderedTestimonial = useMemo(() => {
468
452
  if (testimonialsSlot) return testimonialsSlot;
453
+ if (!current) return null;
469
454
  getAuthorName(current);
470
455
  const quoteText = getQuoteText(current);
471
456
  const companyName = getCompanyName(current);
@@ -480,7 +465,7 @@ function TestimonialsParallaxNumber({
480
465
  motion.div,
481
466
  {
482
467
  className: cn(
483
- "pointer-events-none absolute -left-8 top-1/2 -translate-y-1/2 select-none text-[20rem] font-bold leading-none tracking-tighter text-foreground/[0.03]",
468
+ "pointer-events-none absolute -left-8 top-1/2 -translate-y-1/2 select-none text-[20rem] font-bold leading-none tracking-tighter text-muted-foreground/[0.05]",
484
469
  numberClassName
485
470
  ),
486
471
  style: { x: numberX, y: numberY },
@@ -517,7 +502,7 @@ function TestimonialsParallaxNumber({
517
502
  /* @__PURE__ */ jsx("div", { className: "relative mt-8 h-32 w-px bg-border", children: /* @__PURE__ */ jsx(
518
503
  motion.div,
519
504
  {
520
- className: "absolute left-0 top-0 w-full origin-top bg-foreground",
505
+ className: "absolute left-0 top-0 w-full origin-top bg-primary",
521
506
  animate: {
522
507
  height: `${(activeIndex + 1) / testimonials.length * 100}%`
523
508
  },
@@ -593,7 +578,7 @@ function TestimonialsParallaxNumber({
593
578
  /* @__PURE__ */ jsx(
594
579
  motion.div,
595
580
  {
596
- className: "h-px w-8 bg-foreground",
581
+ className: "h-px w-8 bg-primary",
597
582
  initial: { scaleX: 0 },
598
583
  animate: { scaleX: 1 },
599
584
  transition: { duration: 0.6, delay: 0.3 },
@@ -626,7 +611,7 @@ function TestimonialsParallaxNumber({
626
611
  height: "18",
627
612
  viewBox: "0 0 16 16",
628
613
  fill: "none",
629
- className: "relative z-10 text-foreground transition-colors group-hover:text-foreground/70",
614
+ className: "relative z-10 text-muted-foreground transition-colors group-hover:text-foreground",
630
615
  children: /* @__PURE__ */ jsx(
631
616
  "path",
632
617
  {
@@ -654,7 +639,7 @@ function TestimonialsParallaxNumber({
654
639
  height: "18",
655
640
  viewBox: "0 0 16 16",
656
641
  fill: "none",
657
- className: "relative z-10 text-foreground transition-colors group-hover:text-foreground/70",
642
+ className: "relative z-10 text-muted-foreground transition-colors group-hover:text-foreground",
658
643
  children: /* @__PURE__ */ jsx(
659
644
  "path",
660
645
  {
@@ -694,7 +679,7 @@ function TestimonialsParallaxNumber({
694
679
  ]
695
680
  }
696
681
  );
697
- }, [testimonialsSlot, contentClassName, numberX, numberY, numberClassName, activeIndex, testimonials, verticalLabel, quoteClassName, authorClassName, current, navigationClassName, containerRef, handleMouseMove, goPrev, goNext]);
682
+ }, [testimonialsSlot, contentClassName, numberX, numberY, numberClassName, activeIndex, testimonials, verticalLabel, quoteClassName, authorClassName, current, navigationClassName, handleMouseMove, goPrev, goNext, totalTestimonials, getAuthorName, getQuoteText, getCompanyName]);
698
683
  return /* @__PURE__ */ jsx(
699
684
  Section,
700
685
  {
@@ -1167,48 +1167,8 @@ var Section = React4__namespace.default.forwardRef(
1167
1167
  }
1168
1168
  );
1169
1169
  Section.displayName = "Section";
1170
-
1171
- // lib/blockBrandedIconsAndPlaceholders.ts
1172
- var blockBrandedIconsAndPlaceholders = {
1173
- avatar1: "https://cdn.ing/assets/i/r/286239/ebm7o3j2kx48vw98emnwjaf5qvl6/avatar-1.webp",
1174
- avatar2: "https://cdn.ing/assets/i/r/286240/vgf3rrkwn0769pfdtpal60uo5vpw/avatar-2.webp",
1175
- avatar3: "https://cdn.ing/assets/i/r/286241/05vbqt3lls0q974r8fv4zn0njllq/avatar-3.webp",
1176
- avatar4: "https://cdn.ing/assets/i/r/286242/y0zkazxawxrl3twwkw63twf04pdt/avatar-4.webp",
1177
- avatar5: "https://cdn.ing/assets/i/r/286243/alziyfoo570m3vade3usufzlzj6x/avatar-5.webp"};
1178
- var DEFAULT_TESTIMONIALS = [
1179
- {
1180
- quote: "Their collaborative approach and deep understanding of our industry resulted in a design that not only looks exceptional but performs brilliantly.",
1181
- author: "Daniel Ramirez",
1182
- role: "Product Director, NexGen",
1183
- avatarSrc: blockBrandedIconsAndPlaceholders.avatar1
1184
- },
1185
- {
1186
- quote: "The team's ability to translate complex requirements into clean, intuitive interfaces is remarkable. They're truly masters of their craft.",
1187
- author: "Sophia Chen",
1188
- role: "UX Director, Innovate AI",
1189
- avatarSrc: blockBrandedIconsAndPlaceholders.avatar2
1190
- },
1191
- {
1192
- quote: "Working with them was effortless. They brought fresh perspectives to challenges we'd been struggling with for months.",
1193
- author: "Marcus Johnson",
1194
- role: "CEO, Horizon Media",
1195
- avatarSrc: blockBrandedIconsAndPlaceholders.avatar3
1196
- },
1197
- {
1198
- quote: "They didn't just meet our expectations - they redefined what we thought was possible. I cannot recommend them highly enough.",
1199
- author: "Olivia Thompson",
1200
- role: "Brand Manager, Elevate",
1201
- avatarSrc: blockBrandedIconsAndPlaceholders.avatar4
1202
- },
1203
- {
1204
- quote: "The strategic thinking behind their design decisions transformed our product. We saw immediate improvements in user engagement.",
1205
- author: "James Wilson",
1206
- role: "CTO, TechSphere",
1207
- avatarSrc: blockBrandedIconsAndPlaceholders.avatar5
1208
- }
1209
- ];
1210
1170
  function TestimonialsQuoteCarousel({
1211
- testimonials = DEFAULT_TESTIMONIALS,
1171
+ testimonials,
1212
1172
  testimonialsSlot,
1213
1173
  heading,
1214
1174
  description,
@@ -1226,16 +1186,16 @@ function TestimonialsQuoteCarousel({
1226
1186
  pattern,
1227
1187
  patternOpacity
1228
1188
  }) {
1229
- const getAuthorName = (testimonial) => {
1189
+ const getAuthorName = React4.useCallback((testimonial) => {
1230
1190
  if (typeof testimonial.author === "string") return testimonial.author;
1231
1191
  return "";
1232
- };
1233
- const getAvatarSrc = (testimonial) => {
1192
+ }, []);
1193
+ const getAvatarSrc = React4.useCallback((testimonial) => {
1234
1194
  return testimonial.avatarSrc || testimonial.avatar?.src;
1235
- };
1236
- const getInitials = (name) => {
1195
+ }, []);
1196
+ const getInitials = React4.useCallback((name) => {
1237
1197
  return name.split(" ").map((n) => n[0]).join("");
1238
- };
1198
+ }, []);
1239
1199
  const renderedHeading = React4.useMemo(() => {
1240
1200
  if (typeof heading === "string") {
1241
1201
  return heading.split(" ").map(
@@ -1252,6 +1212,7 @@ function TestimonialsQuoteCarousel({
1252
1212
  }, [heading]);
1253
1213
  const renderedTestimonials = React4.useMemo(() => {
1254
1214
  if (testimonialsSlot) return testimonialsSlot;
1215
+ if (!testimonials || testimonials.length === 0) return null;
1255
1216
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mx-auto max-w-5xl", carouselClassName), children: /* @__PURE__ */ jsxRuntime.jsxs(
1256
1217
  Carousel,
1257
1218
  {
@@ -1329,7 +1290,7 @@ function TestimonialsQuoteCarousel({
1329
1290
  ]
1330
1291
  }
1331
1292
  ) });
1332
- }, [testimonialsSlot, carouselClassName, testimonials, cardClassName, quoteClassName, authorClassName, navigationClassName]);
1293
+ }, [testimonialsSlot, carouselClassName, testimonials, cardClassName, quoteClassName, authorClassName, navigationClassName, getAuthorName, getAvatarSrc, getInitials]);
1333
1294
  return /* @__PURE__ */ jsxRuntime.jsxs(
1334
1295
  Section,
1335
1296
  {