@opensite/ui 0.5.3 → 0.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (585) hide show
  1. package/dist/about-company-profile.cjs +11 -11
  2. package/dist/about-company-profile.js +12 -11
  3. package/dist/about-developer-profile.cjs +11 -11
  4. package/dist/about-developer-profile.js +12 -11
  5. package/dist/about-developer-story.cjs +11 -11
  6. package/dist/about-developer-story.js +12 -11
  7. package/dist/about-interactive-tabs.cjs +10 -5
  8. package/dist/about-interactive-tabs.js +12 -6
  9. package/dist/about-location-info-hero.cjs +14 -14
  10. package/dist/about-location-info-hero.js +15 -15
  11. package/dist/about-minimal-story.cjs +5 -4
  12. package/dist/about-minimal-story.js +6 -5
  13. package/dist/about-mission-dual-image.cjs +5 -5
  14. package/dist/about-mission-dual-image.js +6 -5
  15. package/dist/about-mission-features.cjs +5 -4
  16. package/dist/about-mission-features.js +6 -5
  17. package/dist/about-network-spotlight.cjs +12 -134
  18. package/dist/about-network-spotlight.js +13 -135
  19. package/dist/about-startup-team.cjs +10 -12
  20. package/dist/about-startup-team.js +11 -12
  21. package/dist/about-stats-showcase.cjs +17 -16
  22. package/dist/about-stats-showcase.js +17 -16
  23. package/dist/about-stats-sidebar.cjs +8 -7
  24. package/dist/about-stats-sidebar.js +8 -7
  25. package/dist/about-story-expertise.cjs +17 -139
  26. package/dist/about-story-expertise.js +18 -140
  27. package/dist/about-story-gallery.cjs +6 -9
  28. package/dist/about-story-gallery.js +6 -9
  29. package/dist/about-story-hero.cjs +6 -9
  30. package/dist/about-story-hero.js +7 -10
  31. package/dist/about-streamline-team.cjs +10 -10
  32. package/dist/about-streamline-team.js +11 -10
  33. package/dist/about-vision-gallery.cjs +33 -40
  34. package/dist/about-vision-gallery.d.cts +44 -24
  35. package/dist/about-vision-gallery.d.ts +44 -24
  36. package/dist/about-vision-gallery.js +34 -40
  37. package/dist/alternating-blocks.cjs +5 -5
  38. package/dist/alternating-blocks.js +5 -5
  39. package/dist/article-breadcrumb-social.cjs +35 -41
  40. package/dist/article-breadcrumb-social.d.cts +0 -2
  41. package/dist/article-breadcrumb-social.d.ts +0 -2
  42. package/dist/article-breadcrumb-social.js +35 -41
  43. package/dist/article-chapters-author.cjs +80 -80
  44. package/dist/article-chapters-author.js +79 -79
  45. package/dist/article-compact-toc.cjs +31 -30
  46. package/dist/article-compact-toc.js +30 -29
  47. package/dist/article-hero-prose.cjs +9 -9
  48. package/dist/article-hero-prose.d.cts +5 -5
  49. package/dist/article-hero-prose.d.ts +5 -5
  50. package/dist/article-hero-prose.js +9 -9
  51. package/dist/article-sidebar-sticky.cjs +12 -11
  52. package/dist/article-sidebar-sticky.js +12 -11
  53. package/dist/article-split-animated.cjs +23 -142
  54. package/dist/article-split-animated.js +23 -142
  55. package/dist/article-toc-sidebar.cjs +31 -31
  56. package/dist/article-toc-sidebar.js +30 -30
  57. package/dist/banner-announcement-dismissible.cjs +37 -17
  58. package/dist/banner-announcement-dismissible.d.cts +0 -2
  59. package/dist/banner-announcement-dismissible.d.ts +0 -2
  60. package/dist/banner-announcement-dismissible.js +38 -18
  61. package/dist/banner-countdown-sale.cjs +19 -11
  62. package/dist/banner-countdown-sale.d.cts +0 -1
  63. package/dist/banner-countdown-sale.d.ts +0 -1
  64. package/dist/banner-countdown-sale.js +21 -13
  65. package/dist/banner-delivery-countdown.cjs +29 -24
  66. package/dist/banner-delivery-countdown.d.cts +0 -2
  67. package/dist/banner-delivery-countdown.d.ts +0 -2
  68. package/dist/banner-delivery-countdown.js +30 -25
  69. package/dist/banner-event-promo.cjs +28 -13
  70. package/dist/banner-event-promo.js +29 -13
  71. package/dist/banner-floating-offer.cjs +42 -24
  72. package/dist/banner-floating-offer.d.cts +0 -3
  73. package/dist/banner-floating-offer.d.ts +0 -3
  74. package/dist/banner-floating-offer.js +43 -25
  75. package/dist/banner-gdpr-rights.cjs +36 -19
  76. package/dist/banner-gdpr-rights.d.cts +3 -5
  77. package/dist/banner-gdpr-rights.d.ts +3 -5
  78. package/dist/banner-gdpr-rights.js +37 -20
  79. package/dist/banner-privacy-notice.cjs +34 -17
  80. package/dist/banner-privacy-notice.d.cts +0 -2
  81. package/dist/banner-privacy-notice.d.ts +0 -2
  82. package/dist/banner-privacy-notice.js +35 -18
  83. package/dist/banner-promo-cta.cjs +27 -12
  84. package/dist/banner-promo-cta.js +28 -12
  85. package/dist/banner-social-follow.cjs +37 -17
  86. package/dist/banner-social-follow.d.cts +0 -2
  87. package/dist/banner-social-follow.d.ts +0 -2
  88. package/dist/banner-social-follow.js +38 -18
  89. package/dist/banner-survey-incentive.cjs +34 -17
  90. package/dist/banner-survey-incentive.d.cts +0 -2
  91. package/dist/banner-survey-incentive.d.ts +0 -2
  92. package/dist/banner-survey-incentive.js +35 -18
  93. package/dist/blog-cards-read-time.cjs +408 -24
  94. package/dist/blog-cards-read-time.d.cts +20 -1
  95. package/dist/blog-cards-read-time.d.ts +20 -1
  96. package/dist/blog-cards-read-time.js +409 -24
  97. package/dist/blog-cards-tagline-cta.cjs +406 -19
  98. package/dist/blog-cards-tagline-cta.d.cts +20 -1
  99. package/dist/blog-cards-tagline-cta.d.ts +20 -1
  100. package/dist/blog-cards-tagline-cta.js +407 -19
  101. package/dist/blog-category-overlay.cjs +407 -20
  102. package/dist/blog-category-overlay.d.cts +27 -8
  103. package/dist/blog-category-overlay.d.ts +27 -8
  104. package/dist/blog-category-overlay.js +408 -20
  105. package/dist/blog-featured-popular.cjs +406 -19
  106. package/dist/blog-featured-popular.d.cts +20 -1
  107. package/dist/blog-featured-popular.d.ts +20 -1
  108. package/dist/blog-featured-popular.js +407 -19
  109. package/dist/blog-filtered-results.cjs +457 -71
  110. package/dist/blog-filtered-results.d.cts +38 -19
  111. package/dist/blog-filtered-results.d.ts +38 -19
  112. package/dist/blog-filtered-results.js +455 -69
  113. package/dist/blog-grid-author-cards.cjs +408 -20
  114. package/dist/blog-grid-author-cards.d.cts +28 -9
  115. package/dist/blog-grid-author-cards.d.ts +28 -9
  116. package/dist/blog-grid-author-cards.js +409 -20
  117. package/dist/blog-grid-nine-posts.cjs +403 -16
  118. package/dist/blog-grid-nine-posts.d.cts +24 -5
  119. package/dist/blog-grid-nine-posts.d.ts +24 -5
  120. package/dist/blog-grid-nine-posts.js +404 -16
  121. package/dist/blog-horizontal-cards.cjs +407 -20
  122. package/dist/blog-horizontal-cards.d.cts +21 -2
  123. package/dist/blog-horizontal-cards.d.ts +21 -2
  124. package/dist/blog-horizontal-cards.js +408 -20
  125. package/dist/blog-horizontal-timeline.cjs +401 -14
  126. package/dist/blog-horizontal-timeline.d.cts +28 -9
  127. package/dist/blog-horizontal-timeline.d.ts +28 -9
  128. package/dist/blog-horizontal-timeline.js +402 -14
  129. package/dist/blog-masonry-featured.cjs +405 -18
  130. package/dist/blog-masonry-featured.d.cts +28 -9
  131. package/dist/blog-masonry-featured.d.ts +28 -9
  132. package/dist/blog-masonry-featured.js +406 -18
  133. package/dist/blog-related-articles.cjs +401 -14
  134. package/dist/blog-related-articles.d.cts +20 -1
  135. package/dist/blog-related-articles.d.ts +20 -1
  136. package/dist/blog-related-articles.js +402 -14
  137. package/dist/blog-tech-insights.cjs +410 -23
  138. package/dist/blog-tech-insights.d.cts +31 -12
  139. package/dist/blog-tech-insights.d.ts +31 -12
  140. package/dist/blog-tech-insights.js +411 -23
  141. package/dist/case-studies-featured-border.cjs +423 -14
  142. package/dist/case-studies-featured-border.d.cts +20 -1
  143. package/dist/case-studies-featured-border.d.ts +20 -1
  144. package/dist/case-studies-featured-border.js +424 -14
  145. package/dist/case-studies-image-grid.cjs +404 -7
  146. package/dist/case-studies-image-grid.d.cts +20 -1
  147. package/dist/case-studies-image-grid.d.ts +20 -1
  148. package/dist/case-studies-image-grid.js +405 -7
  149. package/dist/case-studies-stats-card.cjs +416 -29
  150. package/dist/case-studies-stats-card.d.cts +20 -1
  151. package/dist/case-studies-stats-card.d.ts +20 -1
  152. package/dist/case-studies-stats-card.js +417 -29
  153. package/dist/case-studies-testimonial-stats.cjs +409 -10
  154. package/dist/case-studies-testimonial-stats.d.cts +20 -1
  155. package/dist/case-studies-testimonial-stats.d.ts +20 -1
  156. package/dist/case-studies-testimonial-stats.js +409 -10
  157. package/dist/case-study-prose-sidebar.cjs +414 -23
  158. package/dist/case-study-prose-sidebar.d.cts +34 -15
  159. package/dist/case-study-prose-sidebar.d.ts +34 -15
  160. package/dist/case-study-prose-sidebar.js +415 -23
  161. package/dist/case-study-stats-metrics.cjs +443 -43
  162. package/dist/case-study-stats-metrics.d.cts +39 -20
  163. package/dist/case-study-stats-metrics.d.ts +39 -20
  164. package/dist/case-study-stats-metrics.js +444 -43
  165. package/dist/case-study-toc-social-sidebar.cjs +436 -46
  166. package/dist/case-study-toc-social-sidebar.d.cts +36 -17
  167. package/dist/case-study-toc-social-sidebar.d.ts +36 -17
  168. package/dist/case-study-toc-social-sidebar.js +437 -47
  169. package/dist/comparison-ai-models.cjs +498 -77
  170. package/dist/comparison-ai-models.d.cts +25 -7
  171. package/dist/comparison-ai-models.d.ts +25 -7
  172. package/dist/comparison-ai-models.js +497 -76
  173. package/dist/comparison-feature-cards.cjs +492 -80
  174. package/dist/comparison-feature-cards.d.cts +25 -6
  175. package/dist/comparison-feature-cards.d.ts +25 -6
  176. package/dist/comparison-feature-cards.js +492 -79
  177. package/dist/comparison-feature-grid.cjs +475 -47
  178. package/dist/comparison-feature-grid.d.cts +24 -1
  179. package/dist/comparison-feature-grid.d.ts +24 -1
  180. package/dist/comparison-feature-grid.js +476 -47
  181. package/dist/comparison-grid-badges.cjs +422 -25
  182. package/dist/comparison-grid-badges.d.cts +26 -3
  183. package/dist/comparison-grid-badges.d.ts +26 -3
  184. package/dist/comparison-grid-badges.js +423 -25
  185. package/dist/comparison-image-cards.cjs +450 -36
  186. package/dist/comparison-image-cards.d.cts +23 -4
  187. package/dist/comparison-image-cards.d.ts +23 -4
  188. package/dist/comparison-image-cards.js +451 -36
  189. package/dist/comparison-legacy-modern.cjs +442 -41
  190. package/dist/comparison-legacy-modern.d.cts +29 -6
  191. package/dist/comparison-legacy-modern.d.ts +29 -6
  192. package/dist/comparison-legacy-modern.js +443 -41
  193. package/dist/comparison-metrics-rows.cjs +478 -47
  194. package/dist/comparison-metrics-rows.d.cts +20 -1
  195. package/dist/comparison-metrics-rows.d.ts +20 -1
  196. package/dist/comparison-metrics-rows.js +479 -47
  197. package/dist/comparison-table-tabs.cjs +423 -13
  198. package/dist/comparison-table-tabs.d.cts +25 -2
  199. package/dist/comparison-table-tabs.d.ts +25 -2
  200. package/dist/comparison-table-tabs.js +424 -14
  201. package/dist/comparison-table-tooltips.cjs +443 -37
  202. package/dist/comparison-table-tooltips.d.cts +24 -1
  203. package/dist/comparison-table-tooltips.d.ts +24 -1
  204. package/dist/comparison-table-tooltips.js +443 -37
  205. package/dist/comparison-table-two-column.cjs +463 -53
  206. package/dist/comparison-table-two-column.d.cts +24 -6
  207. package/dist/comparison-table-two-column.d.ts +24 -6
  208. package/dist/comparison-table-two-column.js +464 -53
  209. package/dist/components.cjs +8 -8
  210. package/dist/components.js +9 -9
  211. package/dist/contact-callback.cjs +577 -190
  212. package/dist/contact-callback.d.cts +35 -1
  213. package/dist/contact-callback.d.ts +35 -1
  214. package/dist/contact-callback.js +578 -190
  215. package/dist/contact-card.cjs +502 -115
  216. package/dist/contact-card.d.cts +20 -1
  217. package/dist/contact-card.d.ts +20 -1
  218. package/dist/contact-card.js +503 -115
  219. package/dist/contact-careers.cjs +628 -241
  220. package/dist/contact-careers.d.cts +20 -2
  221. package/dist/contact-careers.d.ts +20 -2
  222. package/dist/contact-careers.js +629 -242
  223. package/dist/contact-catering.cjs +664 -277
  224. package/dist/contact-catering.d.cts +20 -1
  225. package/dist/contact-catering.d.ts +20 -1
  226. package/dist/contact-catering.js +665 -277
  227. package/dist/contact-consultation.cjs +567 -180
  228. package/dist/contact-consultation.d.cts +20 -2
  229. package/dist/contact-consultation.d.ts +20 -2
  230. package/dist/contact-consultation.js +568 -180
  231. package/dist/contact-dark.cjs +486 -99
  232. package/dist/contact-dark.d.cts +20 -2
  233. package/dist/contact-dark.d.ts +20 -2
  234. package/dist/contact-dark.js +487 -99
  235. package/dist/contact-demo.cjs +558 -171
  236. package/dist/contact-demo.d.cts +20 -2
  237. package/dist/contact-demo.d.ts +20 -2
  238. package/dist/contact-demo.js +559 -171
  239. package/dist/contact-emergency.cjs +571 -184
  240. package/dist/contact-emergency.d.cts +20 -2
  241. package/dist/contact-emergency.d.ts +20 -2
  242. package/dist/contact-emergency.js +572 -184
  243. package/dist/contact-event.cjs +489 -102
  244. package/dist/contact-event.d.cts +20 -2
  245. package/dist/contact-event.d.ts +20 -2
  246. package/dist/contact-event.js +490 -102
  247. package/dist/contact-faq.cjs +478 -91
  248. package/dist/contact-faq.d.cts +20 -2
  249. package/dist/contact-faq.d.ts +20 -2
  250. package/dist/contact-faq.js +479 -91
  251. package/dist/contact-feedback.cjs +450 -63
  252. package/dist/contact-feedback.d.cts +20 -2
  253. package/dist/contact-feedback.d.ts +20 -2
  254. package/dist/contact-feedback.js +451 -63
  255. package/dist/contact-fitness.cjs +489 -102
  256. package/dist/contact-fitness.d.cts +20 -2
  257. package/dist/contact-fitness.d.ts +20 -2
  258. package/dist/contact-fitness.js +490 -102
  259. package/dist/contact-floating-banner.cjs +5 -5
  260. package/dist/contact-floating-banner.js +5 -5
  261. package/dist/contact-guest.cjs +489 -102
  262. package/dist/contact-guest.d.cts +20 -2
  263. package/dist/contact-guest.d.ts +20 -2
  264. package/dist/contact-guest.js +490 -102
  265. package/dist/contact-image.cjs +489 -102
  266. package/dist/contact-image.d.cts +20 -2
  267. package/dist/contact-image.d.ts +20 -2
  268. package/dist/contact-image.js +490 -102
  269. package/dist/contact-insurance.cjs +489 -102
  270. package/dist/contact-insurance.d.cts +20 -2
  271. package/dist/contact-insurance.d.ts +20 -2
  272. package/dist/contact-insurance.js +490 -102
  273. package/dist/contact-interview.cjs +489 -102
  274. package/dist/contact-interview.d.cts +20 -2
  275. package/dist/contact-interview.d.ts +20 -2
  276. package/dist/contact-interview.js +490 -102
  277. package/dist/contact-locations.cjs +489 -102
  278. package/dist/contact-locations.d.cts +20 -2
  279. package/dist/contact-locations.d.ts +20 -2
  280. package/dist/contact-locations.js +490 -102
  281. package/dist/contact-maintenance.cjs +489 -102
  282. package/dist/contact-maintenance.d.cts +20 -2
  283. package/dist/contact-maintenance.d.ts +20 -2
  284. package/dist/contact-maintenance.js +490 -102
  285. package/dist/contact-map.cjs +489 -102
  286. package/dist/contact-map.d.cts +20 -2
  287. package/dist/contact-map.d.ts +20 -2
  288. package/dist/contact-map.js +490 -102
  289. package/dist/contact-minimal.cjs +466 -79
  290. package/dist/contact-minimal.d.cts +32 -1
  291. package/dist/contact-minimal.d.ts +32 -1
  292. package/dist/contact-minimal.js +467 -79
  293. package/dist/contact-moving.cjs +489 -102
  294. package/dist/contact-moving.d.cts +20 -2
  295. package/dist/contact-moving.d.ts +20 -2
  296. package/dist/contact-moving.js +490 -102
  297. package/dist/contact-multistep.cjs +489 -102
  298. package/dist/contact-multistep.d.cts +20 -2
  299. package/dist/contact-multistep.d.ts +20 -2
  300. package/dist/contact-multistep.js +490 -102
  301. package/dist/contact-partnership.cjs +489 -102
  302. package/dist/contact-partnership.d.cts +20 -2
  303. package/dist/contact-partnership.d.ts +20 -2
  304. package/dist/contact-partnership.js +490 -102
  305. package/dist/contact-photography.cjs +489 -102
  306. package/dist/contact-photography.d.cts +20 -2
  307. package/dist/contact-photography.d.ts +20 -2
  308. package/dist/contact-photography.js +490 -102
  309. package/dist/contact-press.cjs +489 -102
  310. package/dist/contact-press.d.cts +20 -2
  311. package/dist/contact-press.d.ts +20 -2
  312. package/dist/contact-press.js +490 -102
  313. package/dist/contact-quote.cjs +489 -102
  314. package/dist/contact-quote.d.cts +20 -2
  315. package/dist/contact-quote.d.ts +20 -2
  316. package/dist/contact-quote.js +490 -102
  317. package/dist/contact-referral.cjs +489 -102
  318. package/dist/contact-referral.d.cts +20 -2
  319. package/dist/contact-referral.d.ts +20 -2
  320. package/dist/contact-referral.js +490 -102
  321. package/dist/contact-report.cjs +489 -102
  322. package/dist/contact-report.d.cts +20 -2
  323. package/dist/contact-report.d.ts +20 -2
  324. package/dist/contact-report.js +490 -102
  325. package/dist/contact-reservation.cjs +489 -102
  326. package/dist/contact-reservation.d.cts +20 -2
  327. package/dist/contact-reservation.d.ts +20 -2
  328. package/dist/contact-reservation.js +490 -102
  329. package/dist/contact-retreat.cjs +489 -102
  330. package/dist/contact-retreat.d.cts +20 -2
  331. package/dist/contact-retreat.d.ts +20 -2
  332. package/dist/contact-retreat.js +490 -102
  333. package/dist/contact-rsvp.cjs +489 -102
  334. package/dist/contact-rsvp.d.cts +20 -2
  335. package/dist/contact-rsvp.d.ts +20 -2
  336. package/dist/contact-rsvp.js +490 -102
  337. package/dist/contact-sales.cjs +489 -102
  338. package/dist/contact-sales.d.cts +20 -1
  339. package/dist/contact-sales.d.ts +20 -1
  340. package/dist/contact-sales.js +490 -102
  341. package/dist/contact-schedule.cjs +489 -102
  342. package/dist/contact-schedule.d.cts +20 -2
  343. package/dist/contact-schedule.d.ts +20 -2
  344. package/dist/contact-schedule.js +490 -102
  345. package/dist/contact-sponsorship.cjs +489 -102
  346. package/dist/contact-sponsorship.d.cts +20 -2
  347. package/dist/contact-sponsorship.d.ts +20 -2
  348. package/dist/contact-sponsorship.js +490 -102
  349. package/dist/contact-support.cjs +463 -76
  350. package/dist/contact-support.d.cts +20 -2
  351. package/dist/contact-support.d.ts +20 -2
  352. package/dist/contact-support.js +464 -76
  353. package/dist/contact-tenant.cjs +489 -102
  354. package/dist/contact-tenant.d.cts +20 -2
  355. package/dist/contact-tenant.d.ts +20 -2
  356. package/dist/contact-tenant.js +490 -102
  357. package/dist/contact-vendor.cjs +489 -102
  358. package/dist/contact-vendor.d.cts +20 -2
  359. package/dist/contact-vendor.d.ts +20 -2
  360. package/dist/contact-vendor.js +490 -102
  361. package/dist/contact-volunteer.cjs +489 -102
  362. package/dist/contact-volunteer.d.cts +20 -2
  363. package/dist/contact-volunteer.d.ts +20 -2
  364. package/dist/contact-volunteer.js +490 -102
  365. package/dist/contact-warranty.cjs +489 -102
  366. package/dist/contact-warranty.d.cts +20 -2
  367. package/dist/contact-warranty.d.ts +20 -2
  368. package/dist/contact-warranty.js +490 -102
  369. package/dist/contact-wedding.cjs +489 -102
  370. package/dist/contact-wedding.d.cts +20 -2
  371. package/dist/contact-wedding.d.ts +20 -2
  372. package/dist/contact-wedding.js +490 -102
  373. package/dist/cta-accent-background.cjs +11 -11
  374. package/dist/cta-accent-background.js +12 -12
  375. package/dist/cta-app-download-newsletter.cjs +16 -135
  376. package/dist/cta-app-download-newsletter.js +17 -136
  377. package/dist/cta-background-icon-badge.cjs +12 -131
  378. package/dist/cta-background-icon-badge.js +13 -132
  379. package/dist/cta-case-study-testimonial.cjs +31 -154
  380. package/dist/cta-case-study-testimonial.js +32 -155
  381. package/dist/cta-documentation-links.cjs +15 -15
  382. package/dist/cta-documentation-links.js +16 -16
  383. package/dist/cta-enterprise-dark-features.cjs +21 -21
  384. package/dist/cta-enterprise-dark-features.js +22 -22
  385. package/dist/cta-enterprise-split.cjs +14 -14
  386. package/dist/cta-enterprise-split.js +15 -15
  387. package/dist/cta-feature-cards-grid.cjs +16 -16
  388. package/dist/cta-feature-cards-grid.js +17 -17
  389. package/dist/cta-feature-checklist.cjs +14 -14
  390. package/dist/cta-feature-checklist.js +15 -15
  391. package/dist/cta-feature-list.cjs +16 -135
  392. package/dist/cta-feature-list.js +17 -136
  393. package/dist/cta-fullwidth-background.cjs +14 -133
  394. package/dist/cta-fullwidth-background.js +15 -134
  395. package/dist/cta-gradient-logos-floating.cjs +17 -17
  396. package/dist/cta-gradient-logos-floating.js +18 -18
  397. package/dist/cta-gradient-stats-hero.cjs +16 -16
  398. package/dist/cta-gradient-stats-hero.js +17 -17
  399. package/dist/cta-hero-feature-cards.cjs +36 -136
  400. package/dist/cta-hero-feature-cards.js +37 -137
  401. package/dist/cta-image-overlay-arrow.cjs +12 -131
  402. package/dist/cta-image-overlay-arrow.js +13 -132
  403. package/dist/cta-image-overlay-centered.cjs +12 -131
  404. package/dist/cta-image-overlay-centered.js +13 -132
  405. package/dist/cta-minimal-separator.cjs +8 -8
  406. package/dist/cta-minimal-separator.js +9 -9
  407. package/dist/cta-newsletter-features.cjs +14 -14
  408. package/dist/cta-newsletter-features.js +15 -15
  409. package/dist/cta-pattern-background.cjs +11 -11
  410. package/dist/cta-pattern-background.js +12 -12
  411. package/dist/cta-platform-demo.cjs +16 -139
  412. package/dist/cta-platform-demo.js +17 -140
  413. package/dist/cta-simple-centered.cjs +11 -11
  414. package/dist/cta-simple-centered.js +12 -12
  415. package/dist/cta-split-gradient-image.cjs +14 -133
  416. package/dist/cta-split-gradient-image.js +15 -134
  417. package/dist/cta-split-image-logos.cjs +17 -136
  418. package/dist/cta-split-image-logos.js +18 -137
  419. package/dist/cta-split-image.cjs +60 -174
  420. package/dist/cta-split-image.js +61 -175
  421. package/dist/cta-stacked-cards.cjs +11 -11
  422. package/dist/cta-stacked-cards.js +12 -12
  423. package/dist/cta-video-background-hero.cjs +16 -100
  424. package/dist/cta-video-background-hero.js +17 -101
  425. package/dist/cta-workflow-tabs.cjs +18 -137
  426. package/dist/cta-workflow-tabs.js +19 -138
  427. package/dist/hero-ad-campaign-expert.cjs +2 -2
  428. package/dist/hero-ad-campaign-expert.js +2 -2
  429. package/dist/hero-adaptable-product-grid.cjs +2 -2
  430. package/dist/hero-adaptable-product-grid.js +2 -2
  431. package/dist/hero-agency-animated-images.cjs +2 -2
  432. package/dist/hero-agency-animated-images.js +2 -2
  433. package/dist/hero-ai-powered-carousel.cjs +2 -2
  434. package/dist/hero-ai-powered-carousel.js +2 -2
  435. package/dist/hero-announcement-badge.cjs +2 -2
  436. package/dist/hero-announcement-badge.js +2 -2
  437. package/dist/hero-architecture-fullscreen.cjs +2 -2
  438. package/dist/hero-architecture-fullscreen.js +2 -2
  439. package/dist/hero-badge-image-split.cjs +2 -2
  440. package/dist/hero-badge-image-split.js +2 -2
  441. package/dist/hero-badge-shadow-overlay.cjs +2 -2
  442. package/dist/hero-badge-shadow-overlay.js +2 -2
  443. package/dist/hero-billing-platform-logos.cjs +2 -2
  444. package/dist/hero-billing-platform-logos.js +2 -2
  445. package/dist/hero-business-carousel-dots.cjs +2 -2
  446. package/dist/hero-business-carousel-dots.js +2 -2
  447. package/dist/hero-business-operations-mosaic.cjs +2 -2
  448. package/dist/hero-business-operations-mosaic.js +2 -2
  449. package/dist/hero-centered-gradient-cta.cjs +2 -2
  450. package/dist/hero-centered-gradient-cta.js +2 -2
  451. package/dist/hero-centered-image-grid.cjs +2 -2
  452. package/dist/hero-centered-image-grid.js +2 -2
  453. package/dist/hero-centered-screenshot.cjs +2 -2
  454. package/dist/hero-centered-screenshot.js +2 -2
  455. package/dist/hero-coming-soon-countdown.cjs +2 -2
  456. package/dist/hero-coming-soon-countdown.js +2 -2
  457. package/dist/hero-community-survey-cta.cjs +2 -2
  458. package/dist/hero-community-survey-cta.js +2 -2
  459. package/dist/hero-conversation-intelligence.cjs +2 -2
  460. package/dist/hero-conversation-intelligence.js +2 -2
  461. package/dist/hero-conversion-video-play.cjs +2 -2
  462. package/dist/hero-conversion-video-play.js +2 -2
  463. package/dist/hero-creative-studio-stacked.cjs +2 -2
  464. package/dist/hero-creative-studio-stacked.js +2 -2
  465. package/dist/hero-crm-streamlined.cjs +2 -2
  466. package/dist/hero-crm-streamlined.js +2 -2
  467. package/dist/hero-customer-support-layered.cjs +2 -2
  468. package/dist/hero-customer-support-layered.js +2 -2
  469. package/dist/hero-dashed-border-features.cjs +2 -2
  470. package/dist/hero-dashed-border-features.js +2 -2
  471. package/dist/hero-design-carousel-portfolio.cjs +2 -2
  472. package/dist/hero-design-carousel-portfolio.js +2 -2
  473. package/dist/hero-design-showcase-logos.cjs +2 -2
  474. package/dist/hero-design-showcase-logos.js +2 -2
  475. package/dist/hero-design-system-3d.cjs +2 -2
  476. package/dist/hero-design-system-3d.js +2 -2
  477. package/dist/hero-developer-tools-code.cjs +2 -2
  478. package/dist/hero-developer-tools-code.js +2 -2
  479. package/dist/hero-digital-agency-fullscreen.cjs +2 -2
  480. package/dist/hero-digital-agency-fullscreen.js +2 -2
  481. package/dist/hero-ecommerce-product-showcase.cjs +2 -2
  482. package/dist/hero-ecommerce-product-showcase.js +2 -2
  483. package/dist/hero-enterprise-security.cjs +2 -2
  484. package/dist/hero-enterprise-security.js +2 -2
  485. package/dist/hero-event-registration.cjs +2 -2
  486. package/dist/hero-event-registration.js +2 -2
  487. package/dist/hero-feature-cards-grid.cjs +2 -2
  488. package/dist/hero-feature-cards-grid.js +2 -2
  489. package/dist/hero-fullscreen-background-image.cjs +2 -2
  490. package/dist/hero-fullscreen-background-image.js +2 -2
  491. package/dist/hero-fullscreen-logo-cta.cjs +2 -2
  492. package/dist/hero-fullscreen-logo-cta.js +2 -2
  493. package/dist/hero-gradient-avatars-rating.cjs +2 -2
  494. package/dist/hero-gradient-avatars-rating.js +2 -2
  495. package/dist/hero-gradient-client-focused.cjs +2 -2
  496. package/dist/hero-gradient-client-focused.js +2 -2
  497. package/dist/hero-grid-pattern-efficiency.cjs +2 -2
  498. package/dist/hero-grid-pattern-efficiency.js +2 -2
  499. package/dist/hero-grid-pattern-solutions.cjs +2 -2
  500. package/dist/hero-grid-pattern-solutions.js +2 -2
  501. package/dist/hero-hiring-animated-text.cjs +2 -2
  502. package/dist/hero-hiring-animated-text.js +2 -2
  503. package/dist/hero-image-left-content.cjs +2 -2
  504. package/dist/hero-image-left-content.js +2 -2
  505. package/dist/hero-image-slider.cjs +2 -2
  506. package/dist/hero-image-slider.js +2 -2
  507. package/dist/hero-innovation-image-grid.cjs +2 -2
  508. package/dist/hero-innovation-image-grid.js +2 -2
  509. package/dist/hero-logo-centered-screenshot.cjs +2 -2
  510. package/dist/hero-logo-centered-screenshot.js +2 -2
  511. package/dist/hero-marketplace-scattered-images.cjs +2 -2
  512. package/dist/hero-marketplace-scattered-images.js +2 -2
  513. package/dist/hero-mental-health-team.cjs +2 -2
  514. package/dist/hero-mental-health-team.js +2 -2
  515. package/dist/hero-mentorship-video-split.cjs +2 -2
  516. package/dist/hero-mentorship-video-split.js +2 -2
  517. package/dist/hero-minimal-centered-dark.cjs +2 -2
  518. package/dist/hero-minimal-centered-dark.js +2 -2
  519. package/dist/hero-mobile-app-download.cjs +2 -2
  520. package/dist/hero-mobile-app-download.js +2 -2
  521. package/dist/hero-newsletter-minimal.cjs +2 -2
  522. package/dist/hero-newsletter-minimal.js +2 -2
  523. package/dist/hero-pattern-badge-logos.cjs +2 -2
  524. package/dist/hero-pattern-badge-logos.js +2 -2
  525. package/dist/hero-pattern-logo-tech-stack.cjs +2 -2
  526. package/dist/hero-pattern-logo-tech-stack.js +2 -2
  527. package/dist/hero-platform-features-grid.cjs +2 -2
  528. package/dist/hero-platform-features-grid.js +2 -2
  529. package/dist/hero-portfolio-creative.cjs +2 -2
  530. package/dist/hero-portfolio-creative.js +2 -2
  531. package/dist/hero-premium-split-avatars.cjs +2 -2
  532. package/dist/hero-premium-split-avatars.js +2 -2
  533. package/dist/hero-presentation-platform-video.cjs +2 -2
  534. package/dist/hero-presentation-platform-video.js +2 -2
  535. package/dist/hero-pricing-comparison.cjs +2 -2
  536. package/dist/hero-pricing-comparison.js +2 -2
  537. package/dist/hero-product-showcase-floating.cjs +2 -2
  538. package/dist/hero-product-showcase-floating.js +2 -2
  539. package/dist/hero-productivity-launcher-video.cjs +2 -2
  540. package/dist/hero-productivity-launcher-video.js +2 -2
  541. package/dist/hero-saas-dashboard-preview.cjs +2 -2
  542. package/dist/hero-saas-dashboard-preview.js +2 -2
  543. package/dist/hero-shared-inbox-layered.cjs +2 -2
  544. package/dist/hero-shared-inbox-layered.js +2 -2
  545. package/dist/hero-simple-centered-image.cjs +2 -2
  546. package/dist/hero-simple-centered-image.js +2 -2
  547. package/dist/hero-software-growth-video-dialog.cjs +2 -2
  548. package/dist/hero-software-growth-video-dialog.js +2 -2
  549. package/dist/hero-spiral-pattern-cards.cjs +2 -2
  550. package/dist/hero-spiral-pattern-cards.js +2 -2
  551. package/dist/hero-split-geometric-shapes.cjs +2 -2
  552. package/dist/hero-split-geometric-shapes.js +2 -2
  553. package/dist/hero-split-icon-cards.cjs +1 -1
  554. package/dist/hero-split-icon-cards.js +1 -1
  555. package/dist/hero-split-image-newsletter.cjs +2 -2
  556. package/dist/hero-split-image-newsletter.js +2 -2
  557. package/dist/hero-split-spiral-shapes.cjs +2 -2
  558. package/dist/hero-split-spiral-shapes.js +2 -2
  559. package/dist/hero-startup-launch-cta.cjs +2 -2
  560. package/dist/hero-startup-launch-cta.js +2 -2
  561. package/dist/hero-stats-social-proof.cjs +2 -2
  562. package/dist/hero-stats-social-proof.js +2 -2
  563. package/dist/hero-task-timer-animated.cjs +2 -2
  564. package/dist/hero-task-timer-animated.js +2 -2
  565. package/dist/hero-tech-carousel.cjs +2 -2
  566. package/dist/hero-tech-carousel.js +2 -2
  567. package/dist/hero-therapy-testimonial-grid.cjs +2 -2
  568. package/dist/hero-therapy-testimonial-grid.js +2 -2
  569. package/dist/hero-ui-library-showcase.cjs +2 -2
  570. package/dist/hero-ui-library-showcase.js +2 -2
  571. package/dist/hero-video-background-dark.cjs +2 -2
  572. package/dist/hero-video-background-dark.js +2 -2
  573. package/dist/hero-video-dialog-gradient.cjs +2 -2
  574. package/dist/hero-video-dialog-gradient.js +2 -2
  575. package/dist/hero-video-overlay-stars.cjs +2 -2
  576. package/dist/hero-video-overlay-stars.js +2 -2
  577. package/dist/hero-welcome-asymmetric-images.cjs +2 -2
  578. package/dist/hero-welcome-asymmetric-images.js +2 -2
  579. package/dist/index.cjs +8 -8
  580. package/dist/index.js +9 -9
  581. package/dist/media-hover-ctas.cjs +7 -7
  582. package/dist/media-hover-ctas.js +7 -7
  583. package/dist/registry.cjs +10071 -8111
  584. package/dist/registry.js +10033 -8073
  585. package/package.json +2 -2
@@ -556,13 +556,13 @@ function processSvgForCurrentColor(svg) {
556
556
  }
557
557
  function BannerAnnouncementDismissible({
558
558
  icon,
559
- iconName = "mynaui/boat",
559
+ iconName,
560
560
  message,
561
561
  actions,
562
562
  actionsSlot,
563
563
  onDismiss,
564
564
  dismissIcon,
565
- dismissAriaLabel = "Dismiss banner",
565
+ dismissAriaLabel,
566
566
  className,
567
567
  containerClassName,
568
568
  contentClassName,
@@ -572,15 +572,23 @@ function BannerAnnouncementDismissible({
572
572
  dismissButtonClassName
573
573
  }) {
574
574
  const [isVisible, setIsVisible] = React.useState(true);
575
- const handleDismiss = () => {
575
+ const dismissLabel = dismissAriaLabel ?? "Dismiss banner";
576
+ const handleDismiss = React.useCallback(() => {
576
577
  setIsVisible(false);
577
578
  onDismiss?.();
578
- };
579
- const renderActions = () => {
579
+ }, [onDismiss]);
580
+ const actionsContent = React.useMemo(() => {
580
581
  if (actionsSlot) return actionsSlot;
581
582
  if (!actions || actions.length === 0) return null;
582
583
  return actions.map((action, index) => {
583
- const { label, icon: actionIcon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
584
+ const {
585
+ label,
586
+ icon: actionIcon,
587
+ iconAfter,
588
+ children,
589
+ className: actionClassName,
590
+ ...pressableProps
591
+ } = action;
584
592
  return /* @__PURE__ */ jsxRuntime.jsx(
585
593
  Pressable,
586
594
  {
@@ -596,23 +604,35 @@ function BannerAnnouncementDismissible({
596
604
  index
597
605
  );
598
606
  });
599
- };
600
- const renderIcon = () => {
607
+ }, [actions, actionsSlot]);
608
+ const iconContent = React.useMemo(() => {
601
609
  if (icon) return icon;
602
- return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: iconName, size: 20, className: cn("shrink-0", iconClassName) });
603
- };
604
- const renderDismissIcon = () => {
610
+ if (!iconName) return null;
611
+ return /* @__PURE__ */ jsxRuntime.jsx(
612
+ DynamicIcon,
613
+ {
614
+ name: iconName,
615
+ size: 20,
616
+ className: cn("shrink-0", iconClassName)
617
+ }
618
+ );
619
+ }, [icon, iconName, iconClassName]);
620
+ const dismissIconContent = React.useMemo(() => {
605
621
  if (dismissIcon) return dismissIcon;
606
622
  return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "mynaui/x", size: 16 });
607
- };
623
+ }, [dismissIcon]);
624
+ const messageContent = React.useMemo(() => {
625
+ if (!message) return null;
626
+ return typeof message === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-medium text-sm", messageClassName), children: message }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: messageClassName, children: message });
627
+ }, [message, messageClassName]);
608
628
  if (!isVisible) {
609
629
  return null;
610
630
  }
611
631
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("bg-background border-b", className), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("max-w-7xl mx-auto px-4 py-3 flex items-center justify-between gap-2", containerClassName), children: [
612
632
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-4", contentClassName), children: [
613
- renderIcon(),
614
- message && (typeof message === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-medium text-sm", messageClassName), children: message }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: messageClassName, children: message })),
615
- (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: actionsClassName, children: renderActions() })
633
+ iconContent,
634
+ messageContent,
635
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: actionsClassName, children: actionsContent })
616
636
  ] }),
617
637
  /* @__PURE__ */ jsxRuntime.jsxs(
618
638
  Pressable,
@@ -623,8 +643,8 @@ function BannerAnnouncementDismissible({
623
643
  asButton: true,
624
644
  className: cn("size-8", dismissButtonClassName),
625
645
  children: [
626
- renderDismissIcon(),
627
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: dismissAriaLabel })
646
+ dismissIconContent,
647
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: dismissLabel })
628
648
  ]
629
649
  }
630
650
  )
@@ -15,7 +15,6 @@ interface BannerAnnouncementDismissibleProps {
15
15
  icon?: React.ReactNode;
16
16
  /**
17
17
  * Icon name for DynamicIcon (used if icon prop is not provided)
18
- * @default "mynaui/boat"
19
18
  */
20
19
  iconName?: string;
21
20
  /**
@@ -40,7 +39,6 @@ interface BannerAnnouncementDismissibleProps {
40
39
  dismissIcon?: React.ReactNode;
41
40
  /**
42
41
  * ARIA label for dismiss button
43
- * @default "Dismiss banner"
44
42
  */
45
43
  dismissAriaLabel?: string;
46
44
  /**
@@ -15,7 +15,6 @@ interface BannerAnnouncementDismissibleProps {
15
15
  icon?: React.ReactNode;
16
16
  /**
17
17
  * Icon name for DynamicIcon (used if icon prop is not provided)
18
- * @default "mynaui/boat"
19
18
  */
20
19
  iconName?: string;
21
20
  /**
@@ -40,7 +39,6 @@ interface BannerAnnouncementDismissibleProps {
40
39
  dismissIcon?: React.ReactNode;
41
40
  /**
42
41
  * ARIA label for dismiss button
43
- * @default "Dismiss banner"
44
42
  */
45
43
  dismissAriaLabel?: string;
46
44
  /**
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import * as React from 'react';
3
- import { useState } from 'react';
3
+ import { useState, useCallback, useMemo } from 'react';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { cva } from 'class-variance-authority';
@@ -535,13 +535,13 @@ function processSvgForCurrentColor(svg) {
535
535
  }
536
536
  function BannerAnnouncementDismissible({
537
537
  icon,
538
- iconName = "mynaui/boat",
538
+ iconName,
539
539
  message,
540
540
  actions,
541
541
  actionsSlot,
542
542
  onDismiss,
543
543
  dismissIcon,
544
- dismissAriaLabel = "Dismiss banner",
544
+ dismissAriaLabel,
545
545
  className,
546
546
  containerClassName,
547
547
  contentClassName,
@@ -551,15 +551,23 @@ function BannerAnnouncementDismissible({
551
551
  dismissButtonClassName
552
552
  }) {
553
553
  const [isVisible, setIsVisible] = useState(true);
554
- const handleDismiss = () => {
554
+ const dismissLabel = dismissAriaLabel ?? "Dismiss banner";
555
+ const handleDismiss = useCallback(() => {
555
556
  setIsVisible(false);
556
557
  onDismiss?.();
557
- };
558
- const renderActions = () => {
558
+ }, [onDismiss]);
559
+ const actionsContent = useMemo(() => {
559
560
  if (actionsSlot) return actionsSlot;
560
561
  if (!actions || actions.length === 0) return null;
561
562
  return actions.map((action, index) => {
562
- const { label, icon: actionIcon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
563
+ const {
564
+ label,
565
+ icon: actionIcon,
566
+ iconAfter,
567
+ children,
568
+ className: actionClassName,
569
+ ...pressableProps
570
+ } = action;
563
571
  return /* @__PURE__ */ jsx(
564
572
  Pressable,
565
573
  {
@@ -575,23 +583,35 @@ function BannerAnnouncementDismissible({
575
583
  index
576
584
  );
577
585
  });
578
- };
579
- const renderIcon = () => {
586
+ }, [actions, actionsSlot]);
587
+ const iconContent = useMemo(() => {
580
588
  if (icon) return icon;
581
- return /* @__PURE__ */ jsx(DynamicIcon, { name: iconName, size: 20, className: cn("shrink-0", iconClassName) });
582
- };
583
- const renderDismissIcon = () => {
589
+ if (!iconName) return null;
590
+ return /* @__PURE__ */ jsx(
591
+ DynamicIcon,
592
+ {
593
+ name: iconName,
594
+ size: 20,
595
+ className: cn("shrink-0", iconClassName)
596
+ }
597
+ );
598
+ }, [icon, iconName, iconClassName]);
599
+ const dismissIconContent = useMemo(() => {
584
600
  if (dismissIcon) return dismissIcon;
585
601
  return /* @__PURE__ */ jsx(DynamicIcon, { name: "mynaui/x", size: 16 });
586
- };
602
+ }, [dismissIcon]);
603
+ const messageContent = useMemo(() => {
604
+ if (!message) return null;
605
+ return typeof message === "string" ? /* @__PURE__ */ jsx("span", { className: cn("font-medium text-sm", messageClassName), children: message }) : /* @__PURE__ */ jsx("div", { className: messageClassName, children: message });
606
+ }, [message, messageClassName]);
587
607
  if (!isVisible) {
588
608
  return null;
589
609
  }
590
610
  return /* @__PURE__ */ jsx("div", { className: cn("bg-background border-b", className), children: /* @__PURE__ */ jsxs("div", { className: cn("max-w-7xl mx-auto px-4 py-3 flex items-center justify-between gap-2", containerClassName), children: [
591
611
  /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-4", contentClassName), children: [
592
- renderIcon(),
593
- message && (typeof message === "string" ? /* @__PURE__ */ jsx("span", { className: cn("font-medium text-sm", messageClassName), children: message }) : /* @__PURE__ */ jsx("div", { className: messageClassName, children: message })),
594
- (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx("div", { className: actionsClassName, children: renderActions() })
612
+ iconContent,
613
+ messageContent,
614
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx("div", { className: actionsClassName, children: actionsContent })
595
615
  ] }),
596
616
  /* @__PURE__ */ jsxs(
597
617
  Pressable,
@@ -602,8 +622,8 @@ function BannerAnnouncementDismissible({
602
622
  asButton: true,
603
623
  className: cn("size-8", dismissButtonClassName),
604
624
  children: [
605
- renderDismissIcon(),
606
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: dismissAriaLabel })
625
+ dismissIconContent,
626
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: dismissLabel })
607
627
  ]
608
628
  }
609
629
  )
@@ -25,17 +25,16 @@ function BannerCountdownSale({
25
25
  timeUnitClassName,
26
26
  separatorClassName
27
27
  }) {
28
- const defaultEndTime = react.useMemo(
29
- () => new Date(Date.now() + 24 * 60 * 60 * 1e3),
30
- []
31
- );
32
- const targetTime = endTime ?? defaultEndTime;
28
+ const targetTime = endTime;
33
29
  const [timeLeft, setTimeLeft] = react.useState({
34
30
  hours: 0,
35
31
  minutes: 0,
36
32
  seconds: 0
37
33
  });
38
34
  react.useEffect(() => {
35
+ if (!targetTime) {
36
+ return;
37
+ }
39
38
  const calculateTimeLeft = () => {
40
39
  const now = (/* @__PURE__ */ new Date()).getTime();
41
40
  const target = targetTime.getTime();
@@ -55,10 +54,11 @@ function BannerCountdownSale({
55
54
  }, 1e3);
56
55
  return () => clearInterval(timer);
57
56
  }, [targetTime]);
58
- const pad = (n) => n.toString().padStart(2, "0");
59
- const renderDefaultTimer = () => {
57
+ const pad = react.useCallback((n) => n.toString().padStart(2, "0"), []);
58
+ const timerContent = react.useMemo(() => {
60
59
  if (timerSlot) return timerSlot;
61
60
  if (renderTimer) return renderTimer(timeLeft);
61
+ if (!targetTime) return null;
62
62
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-1 font-mono text-lg font-bold", timerClassName), children: [
63
63
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded bg-destructive px-2 py-0.5", timeUnitClassName), children: pad(timeLeft.hours) }),
64
64
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: separatorClassName, children: ":" }),
@@ -66,11 +66,19 @@ function BannerCountdownSale({
66
66
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: separatorClassName, children: ":" }),
67
67
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded bg-destructive px-2 py-0.5", timeUnitClassName), children: pad(timeLeft.seconds) })
68
68
  ] });
69
- };
69
+ }, [timerSlot, renderTimer, timeLeft, timerClassName, timeUnitClassName, separatorClassName, pad, targetTime]);
70
+ const messageContent = react.useMemo(() => {
71
+ if (!message) return null;
72
+ return typeof message === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-medium", messageClassName), children: message }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: messageClassName, children: message });
73
+ }, [message, messageClassName]);
74
+ const descriptionContent = react.useMemo(() => {
75
+ if (!description) return null;
76
+ return typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-destructive-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description });
77
+ }, [description, descriptionClassName]);
70
78
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-full bg-destructive text-white", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("container py-2.5", containerClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-wrap items-center justify-center gap-x-4 gap-y-1 text-sm", contentClassName), children: [
71
- message && (typeof message === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-medium", messageClassName), children: message }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: messageClassName, children: message })),
72
- renderDefaultTimer(),
73
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("text-destructive-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
79
+ messageContent,
80
+ timerContent,
81
+ descriptionContent
74
82
  ] }) }) });
75
83
  }
76
84
 
@@ -15,7 +15,6 @@ interface CountdownTimeLeft {
15
15
  interface BannerCountdownSaleProps {
16
16
  /**
17
17
  * End time for the countdown
18
- * @default 24 hours from now
19
18
  */
20
19
  endTime?: Date;
21
20
  /**
@@ -15,7 +15,6 @@ interface CountdownTimeLeft {
15
15
  interface BannerCountdownSaleProps {
16
16
  /**
17
17
  * End time for the countdown
18
- * @default 24 hours from now
19
18
  */
20
19
  endTime?: Date;
21
20
  /**
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { useMemo, useState, useEffect } from 'react';
2
+ import { useState, useEffect, useCallback, useMemo } from 'react';
3
3
  import { clsx } from 'clsx';
4
4
  import { twMerge } from 'tailwind-merge';
5
- import { jsx, jsxs } from 'react/jsx-runtime';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
6
 
7
7
  // components/blocks/banner/banner-countdown-sale.tsx
8
8
  function cn(...inputs) {
@@ -23,17 +23,16 @@ function BannerCountdownSale({
23
23
  timeUnitClassName,
24
24
  separatorClassName
25
25
  }) {
26
- const defaultEndTime = useMemo(
27
- () => new Date(Date.now() + 24 * 60 * 60 * 1e3),
28
- []
29
- );
30
- const targetTime = endTime ?? defaultEndTime;
26
+ const targetTime = endTime;
31
27
  const [timeLeft, setTimeLeft] = useState({
32
28
  hours: 0,
33
29
  minutes: 0,
34
30
  seconds: 0
35
31
  });
36
32
  useEffect(() => {
33
+ if (!targetTime) {
34
+ return;
35
+ }
37
36
  const calculateTimeLeft = () => {
38
37
  const now = (/* @__PURE__ */ new Date()).getTime();
39
38
  const target = targetTime.getTime();
@@ -53,10 +52,11 @@ function BannerCountdownSale({
53
52
  }, 1e3);
54
53
  return () => clearInterval(timer);
55
54
  }, [targetTime]);
56
- const pad = (n) => n.toString().padStart(2, "0");
57
- const renderDefaultTimer = () => {
55
+ const pad = useCallback((n) => n.toString().padStart(2, "0"), []);
56
+ const timerContent = useMemo(() => {
58
57
  if (timerSlot) return timerSlot;
59
58
  if (renderTimer) return renderTimer(timeLeft);
59
+ if (!targetTime) return null;
60
60
  return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-1 font-mono text-lg font-bold", timerClassName), children: [
61
61
  /* @__PURE__ */ jsx("span", { className: cn("rounded bg-destructive px-2 py-0.5", timeUnitClassName), children: pad(timeLeft.hours) }),
62
62
  /* @__PURE__ */ jsx("span", { className: separatorClassName, children: ":" }),
@@ -64,11 +64,19 @@ function BannerCountdownSale({
64
64
  /* @__PURE__ */ jsx("span", { className: separatorClassName, children: ":" }),
65
65
  /* @__PURE__ */ jsx("span", { className: cn("rounded bg-destructive px-2 py-0.5", timeUnitClassName), children: pad(timeLeft.seconds) })
66
66
  ] });
67
- };
67
+ }, [timerSlot, renderTimer, timeLeft, timerClassName, timeUnitClassName, separatorClassName, pad, targetTime]);
68
+ const messageContent = useMemo(() => {
69
+ if (!message) return null;
70
+ return typeof message === "string" ? /* @__PURE__ */ jsx("span", { className: cn("font-medium", messageClassName), children: message }) : /* @__PURE__ */ jsx("div", { className: messageClassName, children: message });
71
+ }, [message, messageClassName]);
72
+ const descriptionContent = useMemo(() => {
73
+ if (!description) return null;
74
+ return typeof description === "string" ? /* @__PURE__ */ jsx("span", { className: cn("text-destructive-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description });
75
+ }, [description, descriptionClassName]);
68
76
  return /* @__PURE__ */ jsx("div", { className: cn("w-full bg-destructive text-white", className), children: /* @__PURE__ */ jsx("div", { className: cn("container py-2.5", containerClassName), children: /* @__PURE__ */ jsxs("div", { className: cn("flex flex-wrap items-center justify-center gap-x-4 gap-y-1 text-sm", contentClassName), children: [
69
- message && (typeof message === "string" ? /* @__PURE__ */ jsx("span", { className: cn("font-medium", messageClassName), children: message }) : /* @__PURE__ */ jsx("div", { className: messageClassName, children: message })),
70
- renderDefaultTimer(),
71
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("span", { className: cn("text-destructive-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
77
+ messageContent,
78
+ timerContent,
79
+ descriptionContent
72
80
  ] }) }) });
73
81
  }
74
82
 
@@ -137,11 +137,11 @@ function processSvgForCurrentColor(svg) {
137
137
  }
138
138
  function BannerDeliveryCountdown({
139
139
  icon,
140
- iconName = "lucide/gift",
141
- deliveryDate = "Dec 24",
140
+ iconName,
141
+ deliveryDate,
142
142
  cutoffTime,
143
- prefixText = "Order within",
144
- middleText = "for delivery by",
143
+ prefixText,
144
+ middleText,
145
145
  timerSlot,
146
146
  renderTimer,
147
147
  className,
@@ -152,17 +152,16 @@ function BannerDeliveryCountdown({
152
152
  timerClassName,
153
153
  deliveryDateClassName
154
154
  }) {
155
- const defaultCutoffTime = React.useMemo(
156
- () => new Date(Date.now() + 4 * 60 * 60 * 1e3),
157
- []
158
- );
159
- const targetTime = cutoffTime ?? defaultCutoffTime;
155
+ const targetTime = cutoffTime;
160
156
  const [timeLeft, setTimeLeft] = React.useState({
161
157
  hours: 0,
162
158
  minutes: 0,
163
159
  seconds: 0
164
160
  });
165
161
  React.useEffect(() => {
162
+ if (!targetTime) {
163
+ return;
164
+ }
166
165
  const calculateTimeLeft = () => {
167
166
  const now = (/* @__PURE__ */ new Date()).getTime();
168
167
  const target = targetTime.getTime();
@@ -182,14 +181,16 @@ function BannerDeliveryCountdown({
182
181
  }, 1e3);
183
182
  return () => clearInterval(timer);
184
183
  }, [targetTime]);
185
- const pad = (n) => n.toString().padStart(2, "0");
186
- const renderIcon = () => {
184
+ const pad = React.useCallback((n) => n.toString().padStart(2, "0"), []);
185
+ const iconContent = React.useMemo(() => {
187
186
  if (icon) return icon;
187
+ if (!iconName) return null;
188
188
  return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: iconName, size: 16, className: iconClassName });
189
- };
190
- const renderDefaultTimer = () => {
189
+ }, [icon, iconName, iconClassName]);
190
+ const timerContent = React.useMemo(() => {
191
191
  if (timerSlot) return timerSlot;
192
192
  if (renderTimer) return renderTimer(timeLeft);
193
+ if (!targetTime) return null;
193
194
  return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-mono font-bold", timerClassName), children: [
194
195
  pad(timeLeft.hours),
195
196
  ":",
@@ -197,18 +198,22 @@ function BannerDeliveryCountdown({
197
198
  ":",
198
199
  pad(timeLeft.seconds)
199
200
  ] });
200
- };
201
+ }, [timerSlot, renderTimer, timeLeft, timerClassName, pad, targetTime]);
202
+ const deliveryDateContent = React.useMemo(() => {
203
+ if (!deliveryDate) return null;
204
+ return typeof deliveryDate === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-semibold", deliveryDateClassName), children: deliveryDate }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: deliveryDateClassName, children: deliveryDate });
205
+ }, [deliveryDate, deliveryDateClassName]);
206
+ const messageParts = React.useMemo(() => {
207
+ return [prefixText, timerContent, middleText, deliveryDateContent].filter(
208
+ (part) => part !== null && part !== void 0
209
+ );
210
+ }, [prefixText, timerContent, middleText, deliveryDateContent]);
201
211
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-full bg-accent text-accent-foreground", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("container py-2.5", containerClassName), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-wrap items-center justify-center gap-3 text-sm", contentClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-2", messageClassName), children: [
202
- renderIcon(),
203
- /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
204
- prefixText,
205
- " ",
206
- renderDefaultTimer(),
207
- " ",
208
- middleText,
209
- " ",
210
- deliveryDate && (typeof deliveryDate === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-semibold", deliveryDateClassName), children: deliveryDate }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: deliveryDateClassName, children: deliveryDate }))
211
- ] })
212
+ iconContent,
213
+ messageParts.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { children: messageParts.map((part, index) => /* @__PURE__ */ jsxRuntime.jsxs(React__namespace.Fragment, { children: [
214
+ index > 0 ? " " : null,
215
+ part
216
+ ] }, index)) })
212
217
  ] }) }) }) });
213
218
  }
214
219
 
@@ -19,7 +19,6 @@ interface BannerDeliveryCountdownProps {
19
19
  icon?: React.ReactNode;
20
20
  /**
21
21
  * Icon name for DynamicIcon (used if icon prop is not provided)
22
- * @default "lucide/gift"
23
22
  */
24
23
  iconName?: string;
25
24
  /**
@@ -28,7 +27,6 @@ interface BannerDeliveryCountdownProps {
28
27
  deliveryDate?: React.ReactNode;
29
28
  /**
30
29
  * Cutoff time for orders
31
- * @default 4 hours from now
32
30
  */
33
31
  cutoffTime?: Date;
34
32
  /**
@@ -19,7 +19,6 @@ interface BannerDeliveryCountdownProps {
19
19
  icon?: React.ReactNode;
20
20
  /**
21
21
  * Icon name for DynamicIcon (used if icon prop is not provided)
22
- * @default "lucide/gift"
23
22
  */
24
23
  iconName?: string;
25
24
  /**
@@ -28,7 +27,6 @@ interface BannerDeliveryCountdownProps {
28
27
  deliveryDate?: React.ReactNode;
29
28
  /**
30
29
  * Cutoff time for orders
31
- * @default 4 hours from now
32
30
  */
33
31
  cutoffTime?: Date;
34
32
  /**
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import * as React from 'react';
3
- import { useMemo, useState, useEffect } from 'react';
3
+ import { useState, useEffect, useCallback, useMemo } from 'react';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -116,11 +116,11 @@ function processSvgForCurrentColor(svg) {
116
116
  }
117
117
  function BannerDeliveryCountdown({
118
118
  icon,
119
- iconName = "lucide/gift",
120
- deliveryDate = "Dec 24",
119
+ iconName,
120
+ deliveryDate,
121
121
  cutoffTime,
122
- prefixText = "Order within",
123
- middleText = "for delivery by",
122
+ prefixText,
123
+ middleText,
124
124
  timerSlot,
125
125
  renderTimer,
126
126
  className,
@@ -131,17 +131,16 @@ function BannerDeliveryCountdown({
131
131
  timerClassName,
132
132
  deliveryDateClassName
133
133
  }) {
134
- const defaultCutoffTime = useMemo(
135
- () => new Date(Date.now() + 4 * 60 * 60 * 1e3),
136
- []
137
- );
138
- const targetTime = cutoffTime ?? defaultCutoffTime;
134
+ const targetTime = cutoffTime;
139
135
  const [timeLeft, setTimeLeft] = useState({
140
136
  hours: 0,
141
137
  minutes: 0,
142
138
  seconds: 0
143
139
  });
144
140
  useEffect(() => {
141
+ if (!targetTime) {
142
+ return;
143
+ }
145
144
  const calculateTimeLeft = () => {
146
145
  const now = (/* @__PURE__ */ new Date()).getTime();
147
146
  const target = targetTime.getTime();
@@ -161,14 +160,16 @@ function BannerDeliveryCountdown({
161
160
  }, 1e3);
162
161
  return () => clearInterval(timer);
163
162
  }, [targetTime]);
164
- const pad = (n) => n.toString().padStart(2, "0");
165
- const renderIcon = () => {
163
+ const pad = useCallback((n) => n.toString().padStart(2, "0"), []);
164
+ const iconContent = useMemo(() => {
166
165
  if (icon) return icon;
166
+ if (!iconName) return null;
167
167
  return /* @__PURE__ */ jsx(DynamicIcon, { name: iconName, size: 16, className: iconClassName });
168
- };
169
- const renderDefaultTimer = () => {
168
+ }, [icon, iconName, iconClassName]);
169
+ const timerContent = useMemo(() => {
170
170
  if (timerSlot) return timerSlot;
171
171
  if (renderTimer) return renderTimer(timeLeft);
172
+ if (!targetTime) return null;
172
173
  return /* @__PURE__ */ jsxs("span", { className: cn("font-mono font-bold", timerClassName), children: [
173
174
  pad(timeLeft.hours),
174
175
  ":",
@@ -176,18 +177,22 @@ function BannerDeliveryCountdown({
176
177
  ":",
177
178
  pad(timeLeft.seconds)
178
179
  ] });
179
- };
180
+ }, [timerSlot, renderTimer, timeLeft, timerClassName, pad, targetTime]);
181
+ const deliveryDateContent = useMemo(() => {
182
+ if (!deliveryDate) return null;
183
+ return typeof deliveryDate === "string" ? /* @__PURE__ */ jsx("span", { className: cn("font-semibold", deliveryDateClassName), children: deliveryDate }) : /* @__PURE__ */ jsx("span", { className: deliveryDateClassName, children: deliveryDate });
184
+ }, [deliveryDate, deliveryDateClassName]);
185
+ const messageParts = useMemo(() => {
186
+ return [prefixText, timerContent, middleText, deliveryDateContent].filter(
187
+ (part) => part !== null && part !== void 0
188
+ );
189
+ }, [prefixText, timerContent, middleText, deliveryDateContent]);
180
190
  return /* @__PURE__ */ jsx("div", { className: cn("w-full bg-accent text-accent-foreground", className), children: /* @__PURE__ */ jsx("div", { className: cn("container py-2.5", containerClassName), children: /* @__PURE__ */ jsx("div", { className: cn("flex flex-wrap items-center justify-center gap-3 text-sm", contentClassName), children: /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2", messageClassName), children: [
181
- renderIcon(),
182
- /* @__PURE__ */ jsxs("span", { children: [
183
- prefixText,
184
- " ",
185
- renderDefaultTimer(),
186
- " ",
187
- middleText,
188
- " ",
189
- deliveryDate && (typeof deliveryDate === "string" ? /* @__PURE__ */ jsx("span", { className: cn("font-semibold", deliveryDateClassName), children: deliveryDate }) : /* @__PURE__ */ jsx("span", { className: deliveryDateClassName, children: deliveryDate }))
190
- ] })
191
+ iconContent,
192
+ messageParts.length > 0 && /* @__PURE__ */ jsx("span", { children: messageParts.map((part, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
193
+ index > 0 ? " " : null,
194
+ part
195
+ ] }, index)) })
191
196
  ] }) }) }) });
192
197
  }
193
198