@opensite/ui 3.7.2 → 3.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/dist/hero-ad-campaign-expert.cjs +46 -1
  2. package/dist/hero-ad-campaign-expert.d.cts +16 -1
  3. package/dist/hero-ad-campaign-expert.d.ts +16 -1
  4. package/dist/hero-ad-campaign-expert.js +46 -1
  5. package/dist/hero-adaptable-product-grid.cjs +46 -1
  6. package/dist/hero-adaptable-product-grid.d.cts +16 -1
  7. package/dist/hero-adaptable-product-grid.d.ts +16 -1
  8. package/dist/hero-adaptable-product-grid.js +46 -1
  9. package/dist/hero-agency-animated-images.cjs +46 -1
  10. package/dist/hero-agency-animated-images.d.cts +16 -1
  11. package/dist/hero-agency-animated-images.d.ts +16 -1
  12. package/dist/hero-agency-animated-images.js +46 -1
  13. package/dist/hero-ai-powered-carousel.cjs +56 -8
  14. package/dist/hero-ai-powered-carousel.d.cts +16 -1
  15. package/dist/hero-ai-powered-carousel.d.ts +16 -1
  16. package/dist/hero-ai-powered-carousel.js +56 -8
  17. package/dist/hero-announcement-badge.cjs +47 -1
  18. package/dist/hero-announcement-badge.d.cts +16 -1
  19. package/dist/hero-announcement-badge.d.ts +16 -1
  20. package/dist/hero-announcement-badge.js +47 -1
  21. package/dist/hero-architecture-fullscreen.cjs +46 -1
  22. package/dist/hero-architecture-fullscreen.d.cts +16 -1
  23. package/dist/hero-architecture-fullscreen.d.ts +16 -1
  24. package/dist/hero-architecture-fullscreen.js +46 -1
  25. package/dist/hero-badge-image-split.cjs +46 -1
  26. package/dist/hero-badge-image-split.d.cts +16 -1
  27. package/dist/hero-badge-image-split.d.ts +16 -1
  28. package/dist/hero-badge-image-split.js +46 -1
  29. package/dist/hero-badge-shadow-overlay.cjs +54 -3
  30. package/dist/hero-badge-shadow-overlay.d.cts +16 -1
  31. package/dist/hero-badge-shadow-overlay.d.ts +16 -1
  32. package/dist/hero-badge-shadow-overlay.js +54 -3
  33. package/dist/hero-business-carousel-dots.cjs +46 -1
  34. package/dist/hero-business-carousel-dots.d.cts +16 -1
  35. package/dist/hero-business-carousel-dots.d.ts +16 -1
  36. package/dist/hero-business-carousel-dots.js +46 -1
  37. package/dist/hero-business-operations-mosaic.cjs +46 -1
  38. package/dist/hero-business-operations-mosaic.d.cts +16 -1
  39. package/dist/hero-business-operations-mosaic.d.ts +16 -1
  40. package/dist/hero-business-operations-mosaic.js +46 -1
  41. package/dist/hero-centered-gradient-cta.cjs +47 -1
  42. package/dist/hero-centered-gradient-cta.d.cts +16 -1
  43. package/dist/hero-centered-gradient-cta.d.ts +16 -1
  44. package/dist/hero-centered-gradient-cta.js +47 -1
  45. package/dist/hero-centered-image-grid.cjs +46 -1
  46. package/dist/hero-centered-image-grid.d.cts +16 -1
  47. package/dist/hero-centered-image-grid.d.ts +16 -1
  48. package/dist/hero-centered-image-grid.js +46 -1
  49. package/dist/hero-centered-screenshot.cjs +46 -1
  50. package/dist/hero-centered-screenshot.d.cts +16 -1
  51. package/dist/hero-centered-screenshot.d.ts +16 -1
  52. package/dist/hero-centered-screenshot.js +46 -1
  53. package/dist/hero-coming-soon-countdown.cjs +47 -1
  54. package/dist/hero-coming-soon-countdown.d.cts +16 -1
  55. package/dist/hero-coming-soon-countdown.d.ts +16 -1
  56. package/dist/hero-coming-soon-countdown.js +47 -1
  57. package/dist/hero-community-survey-cta.cjs +46 -1
  58. package/dist/hero-community-survey-cta.d.cts +16 -1
  59. package/dist/hero-community-survey-cta.d.ts +16 -1
  60. package/dist/hero-community-survey-cta.js +46 -1
  61. package/dist/hero-conversation-intelligence.cjs +46 -1
  62. package/dist/hero-conversation-intelligence.d.cts +16 -1
  63. package/dist/hero-conversation-intelligence.d.ts +16 -1
  64. package/dist/hero-conversation-intelligence.js +46 -1
  65. package/dist/hero-creative-studio-stacked.cjs +46 -1
  66. package/dist/hero-creative-studio-stacked.d.cts +17 -2
  67. package/dist/hero-creative-studio-stacked.d.ts +17 -2
  68. package/dist/hero-creative-studio-stacked.js +46 -1
  69. package/dist/hero-crm-streamlined.cjs +58 -9
  70. package/dist/hero-crm-streamlined.d.cts +16 -1
  71. package/dist/hero-crm-streamlined.d.ts +16 -1
  72. package/dist/hero-crm-streamlined.js +58 -9
  73. package/dist/hero-customer-support-layered.cjs +46 -1
  74. package/dist/hero-customer-support-layered.d.cts +16 -1
  75. package/dist/hero-customer-support-layered.d.ts +16 -1
  76. package/dist/hero-customer-support-layered.js +46 -1
  77. package/dist/hero-design-system-3d.cjs +67 -20
  78. package/dist/hero-design-system-3d.d.cts +16 -1
  79. package/dist/hero-design-system-3d.d.ts +16 -1
  80. package/dist/hero-design-system-3d.js +67 -20
  81. package/dist/hero-developer-tools-code.cjs +47 -1
  82. package/dist/hero-developer-tools-code.d.cts +16 -1
  83. package/dist/hero-developer-tools-code.d.ts +16 -1
  84. package/dist/hero-developer-tools-code.js +47 -1
  85. package/dist/hero-digital-agency-fullscreen.cjs +46 -1
  86. package/dist/hero-digital-agency-fullscreen.d.cts +16 -1
  87. package/dist/hero-digital-agency-fullscreen.d.ts +16 -1
  88. package/dist/hero-digital-agency-fullscreen.js +46 -1
  89. package/dist/hero-ecommerce-product-showcase.cjs +46 -1
  90. package/dist/hero-ecommerce-product-showcase.d.cts +16 -1
  91. package/dist/hero-ecommerce-product-showcase.d.ts +16 -1
  92. package/dist/hero-ecommerce-product-showcase.js +46 -1
  93. package/dist/hero-enterprise-security.cjs +47 -1
  94. package/dist/hero-enterprise-security.d.cts +16 -1
  95. package/dist/hero-enterprise-security.d.ts +16 -1
  96. package/dist/hero-enterprise-security.js +47 -1
  97. package/dist/hero-feature-cards-grid.cjs +47 -1
  98. package/dist/hero-feature-cards-grid.d.cts +16 -1
  99. package/dist/hero-feature-cards-grid.d.ts +16 -1
  100. package/dist/hero-feature-cards-grid.js +47 -1
  101. package/dist/hero-fullscreen-background-image.cjs +46 -1
  102. package/dist/hero-fullscreen-background-image.d.cts +16 -1
  103. package/dist/hero-fullscreen-background-image.d.ts +16 -1
  104. package/dist/hero-fullscreen-background-image.js +46 -1
  105. package/dist/hero-gradient-avatars-rating.cjs +46 -1
  106. package/dist/hero-gradient-avatars-rating.d.cts +16 -1
  107. package/dist/hero-gradient-avatars-rating.d.ts +16 -1
  108. package/dist/hero-gradient-avatars-rating.js +46 -1
  109. package/dist/hero-gradient-client-focused.cjs +46 -1
  110. package/dist/hero-gradient-client-focused.d.cts +16 -1
  111. package/dist/hero-gradient-client-focused.d.ts +16 -1
  112. package/dist/hero-gradient-client-focused.js +46 -1
  113. package/dist/hero-grid-pattern-efficiency.cjs +47 -1
  114. package/dist/hero-grid-pattern-efficiency.d.cts +16 -1
  115. package/dist/hero-grid-pattern-efficiency.d.ts +16 -1
  116. package/dist/hero-grid-pattern-efficiency.js +47 -1
  117. package/dist/hero-grid-pattern-solutions.cjs +46 -1
  118. package/dist/hero-grid-pattern-solutions.d.cts +16 -1
  119. package/dist/hero-grid-pattern-solutions.d.ts +16 -1
  120. package/dist/hero-grid-pattern-solutions.js +46 -1
  121. package/dist/hero-hiring-animated-text.cjs +47 -1
  122. package/dist/hero-hiring-animated-text.d.cts +16 -1
  123. package/dist/hero-hiring-animated-text.d.ts +16 -1
  124. package/dist/hero-hiring-animated-text.js +47 -1
  125. package/dist/hero-image-left-content.cjs +46 -1
  126. package/dist/hero-image-left-content.d.cts +16 -1
  127. package/dist/hero-image-left-content.d.ts +16 -1
  128. package/dist/hero-image-left-content.js +46 -1
  129. package/dist/hero-image-slider.cjs +46 -1
  130. package/dist/hero-image-slider.d.cts +16 -1
  131. package/dist/hero-image-slider.d.ts +16 -1
  132. package/dist/hero-image-slider.js +46 -1
  133. package/dist/hero-innovation-image-grid.cjs +46 -1
  134. package/dist/hero-innovation-image-grid.d.cts +16 -1
  135. package/dist/hero-innovation-image-grid.d.ts +16 -1
  136. package/dist/hero-innovation-image-grid.js +46 -1
  137. package/dist/hero-marketplace-scattered-images.cjs +46 -1
  138. package/dist/hero-marketplace-scattered-images.d.cts +16 -1
  139. package/dist/hero-marketplace-scattered-images.d.ts +16 -1
  140. package/dist/hero-marketplace-scattered-images.js +46 -1
  141. package/dist/hero-minimal-centered-dark.cjs +47 -1
  142. package/dist/hero-minimal-centered-dark.d.cts +16 -1
  143. package/dist/hero-minimal-centered-dark.d.ts +16 -1
  144. package/dist/hero-minimal-centered-dark.js +47 -1
  145. package/dist/hero-mobile-app-download.cjs +46 -1
  146. package/dist/hero-mobile-app-download.d.cts +16 -1
  147. package/dist/hero-mobile-app-download.d.ts +16 -1
  148. package/dist/hero-mobile-app-download.js +46 -1
  149. package/dist/hero-newsletter-minimal.cjs +48 -1
  150. package/dist/hero-newsletter-minimal.d.cts +16 -1
  151. package/dist/hero-newsletter-minimal.d.ts +16 -1
  152. package/dist/hero-newsletter-minimal.js +48 -1
  153. package/dist/hero-overlay-cta-grid.cjs +46 -1
  154. package/dist/hero-overlay-cta-grid.d.cts +16 -1
  155. package/dist/hero-overlay-cta-grid.d.ts +16 -1
  156. package/dist/hero-overlay-cta-grid.js +46 -1
  157. package/dist/hero-portfolio-creative.cjs +46 -1
  158. package/dist/hero-portfolio-creative.d.cts +16 -1
  159. package/dist/hero-portfolio-creative.d.ts +16 -1
  160. package/dist/hero-portfolio-creative.js +46 -1
  161. package/dist/hero-premium-split-avatars.cjs +46 -1
  162. package/dist/hero-premium-split-avatars.d.cts +16 -1
  163. package/dist/hero-premium-split-avatars.d.ts +16 -1
  164. package/dist/hero-premium-split-avatars.js +46 -1
  165. package/dist/hero-presentation-platform-video.cjs +47 -1
  166. package/dist/hero-presentation-platform-video.d.cts +16 -1
  167. package/dist/hero-presentation-platform-video.d.ts +16 -1
  168. package/dist/hero-presentation-platform-video.js +47 -1
  169. package/dist/hero-pricing-comparison.cjs +47 -1
  170. package/dist/hero-pricing-comparison.d.cts +16 -1
  171. package/dist/hero-pricing-comparison.d.ts +16 -1
  172. package/dist/hero-pricing-comparison.js +47 -1
  173. package/dist/hero-product-showcase-floating.cjs +46 -1
  174. package/dist/hero-product-showcase-floating.d.cts +16 -1
  175. package/dist/hero-product-showcase-floating.d.ts +16 -1
  176. package/dist/hero-product-showcase-floating.js +46 -1
  177. package/dist/hero-productivity-launcher-video.cjs +68 -20
  178. package/dist/hero-productivity-launcher-video.d.cts +16 -1
  179. package/dist/hero-productivity-launcher-video.d.ts +16 -1
  180. package/dist/hero-productivity-launcher-video.js +68 -20
  181. package/dist/hero-saas-dashboard-preview.cjs +46 -1
  182. package/dist/hero-saas-dashboard-preview.d.cts +16 -1
  183. package/dist/hero-saas-dashboard-preview.d.ts +16 -1
  184. package/dist/hero-saas-dashboard-preview.js +46 -1
  185. package/dist/hero-shared-inbox-layered.cjs +46 -1
  186. package/dist/hero-shared-inbox-layered.d.cts +16 -1
  187. package/dist/hero-shared-inbox-layered.d.ts +16 -1
  188. package/dist/hero-shared-inbox-layered.js +46 -1
  189. package/dist/hero-simple-centered-image.cjs +46 -1
  190. package/dist/hero-simple-centered-image.d.cts +16 -1
  191. package/dist/hero-simple-centered-image.d.ts +16 -1
  192. package/dist/hero-simple-centered-image.js +46 -1
  193. package/dist/hero-software-growth-video-dialog.cjs +46 -1
  194. package/dist/hero-software-growth-video-dialog.d.cts +16 -1
  195. package/dist/hero-software-growth-video-dialog.d.ts +16 -1
  196. package/dist/hero-software-growth-video-dialog.js +46 -1
  197. package/dist/hero-spiral-pattern-cards.cjs +46 -1
  198. package/dist/hero-spiral-pattern-cards.d.cts +16 -1
  199. package/dist/hero-spiral-pattern-cards.d.ts +16 -1
  200. package/dist/hero-spiral-pattern-cards.js +46 -1
  201. package/dist/hero-split-geometric-shapes.cjs +46 -1
  202. package/dist/hero-split-geometric-shapes.d.cts +16 -1
  203. package/dist/hero-split-geometric-shapes.d.ts +16 -1
  204. package/dist/hero-split-geometric-shapes.js +46 -1
  205. package/dist/hero-split-icon-cards.cjs +47 -1
  206. package/dist/hero-split-icon-cards.d.cts +16 -1
  207. package/dist/hero-split-icon-cards.d.ts +16 -1
  208. package/dist/hero-split-icon-cards.js +47 -1
  209. package/dist/hero-split-image-newsletter.cjs +46 -1
  210. package/dist/hero-split-image-newsletter.d.cts +16 -1
  211. package/dist/hero-split-image-newsletter.d.ts +16 -1
  212. package/dist/hero-split-image-newsletter.js +47 -2
  213. package/dist/hero-split-spiral-shapes.cjs +46 -1
  214. package/dist/hero-split-spiral-shapes.d.cts +16 -1
  215. package/dist/hero-split-spiral-shapes.d.ts +16 -1
  216. package/dist/hero-split-spiral-shapes.js +46 -1
  217. package/dist/hero-startup-launch-cta.cjs +46 -1
  218. package/dist/hero-startup-launch-cta.d.cts +16 -1
  219. package/dist/hero-startup-launch-cta.d.ts +16 -1
  220. package/dist/hero-startup-launch-cta.js +46 -1
  221. package/dist/hero-stats-social-proof.cjs +46 -1
  222. package/dist/hero-stats-social-proof.d.cts +16 -1
  223. package/dist/hero-stats-social-proof.d.ts +16 -1
  224. package/dist/hero-stats-social-proof.js +46 -1
  225. package/dist/hero-task-timer-animated.cjs +46 -1
  226. package/dist/hero-task-timer-animated.d.cts +16 -1
  227. package/dist/hero-task-timer-animated.d.ts +16 -1
  228. package/dist/hero-task-timer-animated.js +46 -1
  229. package/dist/hero-testimonial-image-grid.cjs +46 -1
  230. package/dist/hero-testimonial-image-grid.d.cts +16 -1
  231. package/dist/hero-testimonial-image-grid.d.ts +16 -1
  232. package/dist/hero-testimonial-image-grid.js +46 -1
  233. package/dist/hero-therapy-testimonial-grid.cjs +46 -1
  234. package/dist/hero-therapy-testimonial-grid.d.cts +16 -1
  235. package/dist/hero-therapy-testimonial-grid.d.ts +16 -1
  236. package/dist/hero-therapy-testimonial-grid.js +46 -1
  237. package/dist/hero-ui-library-showcase.cjs +3 -2
  238. package/dist/hero-ui-library-showcase.d.cts +13 -5
  239. package/dist/hero-ui-library-showcase.d.ts +13 -5
  240. package/dist/hero-ui-library-showcase.js +3 -2
  241. package/dist/hero-video-background-dark.cjs +47 -1
  242. package/dist/hero-video-background-dark.d.cts +16 -1
  243. package/dist/hero-video-background-dark.d.ts +16 -1
  244. package/dist/hero-video-background-dark.js +47 -1
  245. package/dist/{hero-video-dialog-gradient-Cr96k01H.d.ts → hero-video-dialog-gradient-B6-kFIvZ.d.ts} +14 -1
  246. package/dist/{hero-video-dialog-gradient-Dc0wRYdW.d.cts → hero-video-dialog-gradient-DPnh6Vn-.d.cts} +14 -1
  247. package/dist/hero-video-dialog-gradient.cjs +46 -1
  248. package/dist/hero-video-dialog-gradient.d.cts +4 -1
  249. package/dist/hero-video-dialog-gradient.d.ts +4 -1
  250. package/dist/hero-video-dialog-gradient.js +46 -1
  251. package/dist/hero-welcome-asymmetric-images.cjs +46 -1
  252. package/dist/hero-welcome-asymmetric-images.d.cts +16 -1
  253. package/dist/hero-welcome-asymmetric-images.d.ts +16 -1
  254. package/dist/hero-welcome-asymmetric-images.js +46 -1
  255. package/dist/link-page-bento-layout.cjs +59 -3
  256. package/dist/link-page-bento-layout.d.cts +16 -1
  257. package/dist/link-page-bento-layout.d.ts +16 -1
  258. package/dist/link-page-bento-layout.js +59 -3
  259. package/dist/link-page-grid-cards.cjs +59 -3
  260. package/dist/link-page-grid-cards.d.cts +16 -1
  261. package/dist/link-page-grid-cards.d.ts +16 -1
  262. package/dist/link-page-grid-cards.js +59 -3
  263. package/dist/link-page-minimal-profile.cjs +59 -3
  264. package/dist/link-page-minimal-profile.d.cts +16 -1
  265. package/dist/link-page-minimal-profile.d.ts +16 -1
  266. package/dist/link-page-minimal-profile.js +59 -3
  267. package/dist/link-page-newsletter-social.cjs +59 -3
  268. package/dist/link-page-newsletter-social.d.cts +16 -1
  269. package/dist/link-page-newsletter-social.d.ts +16 -1
  270. package/dist/link-page-newsletter-social.js +59 -3
  271. package/dist/link-tree-block.cjs +58 -2
  272. package/dist/link-tree-block.d.cts +16 -1
  273. package/dist/link-tree-block.d.ts +16 -1
  274. package/dist/link-tree-block.js +58 -2
  275. package/dist/registry.cjs +734 -199
  276. package/dist/registry.js +734 -199
  277. package/dist/social-link-icon.d.cts +1 -1
  278. package/dist/social-link-icon.d.ts +1 -1
  279. package/package.json +1 -1
@@ -8,6 +8,7 @@ var jsxRuntime = require('react/jsx-runtime');
8
8
  var pressable = require('@page-speed/pressable');
9
9
  var reactSlot = require('@radix-ui/react-slot');
10
10
  var classVarianceAuthority = require('class-variance-authority');
11
+ var img = require('@page-speed/img');
11
12
 
12
13
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
14
 
@@ -503,6 +504,47 @@ function ActionComponent({ action }) {
503
504
  }
504
505
  );
505
506
  }
507
+ var SIZE_CLASSES = {
508
+ sm: "max-h-6 sm:max-h-7",
509
+ md: "max-h-8 sm:max-h-9 lg:max-h-10",
510
+ lg: "max-h-10 sm:max-h-12 lg:max-h-14",
511
+ xl: "max-h-12 sm:max-h-14 lg:max-h-16"
512
+ };
513
+ var BrandLogo = ({
514
+ logo,
515
+ logoSlot,
516
+ logoClassName,
517
+ size = "md",
518
+ optixFlowConfig
519
+ }) => {
520
+ if (logoSlot) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: logoSlot });
521
+ if (!logo || !logo.src) return null;
522
+ const imgElement = /* @__PURE__ */ jsxRuntime.jsx(
523
+ img.Img,
524
+ {
525
+ src: logo.src,
526
+ className: cn(
527
+ "w-auto object-contain",
528
+ SIZE_CLASSES[size],
529
+ logo.className
530
+ ),
531
+ alt: logo.alt || "Logo",
532
+ optixFlowConfig,
533
+ loading: "eager"
534
+ }
535
+ );
536
+ if (logo.url) {
537
+ return /* @__PURE__ */ jsxRuntime.jsx(
538
+ pressable.Pressable,
539
+ {
540
+ href: logo.url,
541
+ className: cn("flex items-center", logoClassName),
542
+ children: imgElement
543
+ }
544
+ );
545
+ }
546
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex items-center", logoClassName), children: imgElement });
547
+ };
506
548
  function HeroMinimalCenteredDark({
507
549
  sectionId = "hero-minimal-centered-dark",
508
550
  badge,
@@ -523,7 +565,10 @@ function HeroMinimalCenteredDark({
523
565
  headingClassName,
524
566
  descriptionClassName,
525
567
  actionsClassName,
526
- statsClassName
568
+ statsClassName,
569
+ logo,
570
+ logoSlot,
571
+ logoClassName
527
572
  }) {
528
573
  const renderStats = React.useMemo(() => {
529
574
  if (statsSlot) return statsSlot;
@@ -552,6 +597,7 @@ function HeroMinimalCenteredDark({
552
597
  containerClassName,
553
598
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
554
599
  badge && /* @__PURE__ */ jsxRuntime.jsx(Badge, { className: cn("px-4 py-1", badgeClassName), children: typeof badge === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { children: badge }) : badge }),
600
+ (logo || logoSlot) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-4 flex justify-center", logoClassName), children: /* @__PURE__ */ jsxRuntime.jsx(BrandLogo, { logo, logoSlot, size: "xl" }) }),
555
601
  (heading || headingHighlight) && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
556
602
  "h1",
557
603
  {
@@ -1,7 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import { S as SectionBackground, s as SectionSpacing, t as PatternName } from './community-initiatives-Cgd-IXlI.cjs';
3
+ import { L as LogoConfig } from './types-mWZcgKth.cjs';
3
4
  import { A as ActionConfig, k as StatItem } from './blocks-DyouPohq.cjs';
4
5
  import 'react/jsx-runtime';
6
+ import './dynamic-icon.cjs';
7
+ import '@page-speed/icon';
5
8
  import 'class-variance-authority';
6
9
  import '@page-speed/pressable';
7
10
  import '@opensite/hooks/usePlatformFromUrl';
@@ -86,9 +89,21 @@ interface HeroMinimalCenteredDarkProps {
86
89
  * Additional CSS classes for the stats container
87
90
  */
88
91
  statsClassName?: string;
92
+ /**
93
+ * Brand logo configuration. LOGO MEDIA ONLY — do not use photos or hero images.
94
+ */
95
+ logo?: LogoConfig;
96
+ /**
97
+ * Custom slot for logo (overrides logo prop)
98
+ */
99
+ logoSlot?: React.ReactNode;
100
+ /**
101
+ * Additional CSS classes for the logo container
102
+ */
103
+ logoClassName?: string;
89
104
  /** Optional Section ID */
90
105
  sectionId?: string;
91
106
  }
92
- declare function HeroMinimalCenteredDark({ sectionId, badge, heading, headingHighlight, description, actions, actionsSlot, stats, statsSlot, background, containerClassName, spacing, pattern, patternOpacity, className, badgeClassName, headingClassName, descriptionClassName, actionsClassName, statsClassName, }: HeroMinimalCenteredDarkProps): React.JSX.Element;
107
+ declare function HeroMinimalCenteredDark({ sectionId, badge, heading, headingHighlight, description, actions, actionsSlot, stats, statsSlot, background, containerClassName, spacing, pattern, patternOpacity, className, badgeClassName, headingClassName, descriptionClassName, actionsClassName, statsClassName, logo, logoSlot, logoClassName, }: HeroMinimalCenteredDarkProps): React.JSX.Element;
93
108
 
94
109
  export { HeroMinimalCenteredDark, type HeroMinimalCenteredDarkProps };
@@ -1,7 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import { S as SectionBackground, s as SectionSpacing, t as PatternName } from './community-initiatives-Dud0DKXB.js';
3
+ import { L as LogoConfig } from './types-hJ2R0GoH.js';
3
4
  import { A as ActionConfig, k as StatItem } from './blocks-DyouPohq.js';
4
5
  import 'react/jsx-runtime';
6
+ import './dynamic-icon.js';
7
+ import '@page-speed/icon';
5
8
  import 'class-variance-authority';
6
9
  import '@page-speed/pressable';
7
10
  import '@opensite/hooks/usePlatformFromUrl';
@@ -86,9 +89,21 @@ interface HeroMinimalCenteredDarkProps {
86
89
  * Additional CSS classes for the stats container
87
90
  */
88
91
  statsClassName?: string;
92
+ /**
93
+ * Brand logo configuration. LOGO MEDIA ONLY — do not use photos or hero images.
94
+ */
95
+ logo?: LogoConfig;
96
+ /**
97
+ * Custom slot for logo (overrides logo prop)
98
+ */
99
+ logoSlot?: React.ReactNode;
100
+ /**
101
+ * Additional CSS classes for the logo container
102
+ */
103
+ logoClassName?: string;
89
104
  /** Optional Section ID */
90
105
  sectionId?: string;
91
106
  }
92
- declare function HeroMinimalCenteredDark({ sectionId, badge, heading, headingHighlight, description, actions, actionsSlot, stats, statsSlot, background, containerClassName, spacing, pattern, patternOpacity, className, badgeClassName, headingClassName, descriptionClassName, actionsClassName, statsClassName, }: HeroMinimalCenteredDarkProps): React.JSX.Element;
107
+ declare function HeroMinimalCenteredDark({ sectionId, badge, heading, headingHighlight, description, actions, actionsSlot, stats, statsSlot, background, containerClassName, spacing, pattern, patternOpacity, className, badgeClassName, headingClassName, descriptionClassName, actionsClassName, statsClassName, logo, logoSlot, logoClassName, }: HeroMinimalCenteredDarkProps): React.JSX.Element;
93
108
 
94
109
  export { HeroMinimalCenteredDark, type HeroMinimalCenteredDarkProps };
@@ -6,6 +6,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
6
  import { Pressable, buttonVariants } from '@page-speed/pressable';
7
7
  import { Slot } from '@radix-ui/react-slot';
8
8
  import { cva } from 'class-variance-authority';
9
+ import { Img } from '@page-speed/img';
9
10
 
10
11
  // components/blocks/hero/hero-minimal-centered-dark.tsx
11
12
  function cn(...inputs) {
@@ -497,6 +498,47 @@ function ActionComponent({ action }) {
497
498
  }
498
499
  );
499
500
  }
501
+ var SIZE_CLASSES = {
502
+ sm: "max-h-6 sm:max-h-7",
503
+ md: "max-h-8 sm:max-h-9 lg:max-h-10",
504
+ lg: "max-h-10 sm:max-h-12 lg:max-h-14",
505
+ xl: "max-h-12 sm:max-h-14 lg:max-h-16"
506
+ };
507
+ var BrandLogo = ({
508
+ logo,
509
+ logoSlot,
510
+ logoClassName,
511
+ size = "md",
512
+ optixFlowConfig
513
+ }) => {
514
+ if (logoSlot) return /* @__PURE__ */ jsx(Fragment, { children: logoSlot });
515
+ if (!logo || !logo.src) return null;
516
+ const imgElement = /* @__PURE__ */ jsx(
517
+ Img,
518
+ {
519
+ src: logo.src,
520
+ className: cn(
521
+ "w-auto object-contain",
522
+ SIZE_CLASSES[size],
523
+ logo.className
524
+ ),
525
+ alt: logo.alt || "Logo",
526
+ optixFlowConfig,
527
+ loading: "eager"
528
+ }
529
+ );
530
+ if (logo.url) {
531
+ return /* @__PURE__ */ jsx(
532
+ Pressable,
533
+ {
534
+ href: logo.url,
535
+ className: cn("flex items-center", logoClassName),
536
+ children: imgElement
537
+ }
538
+ );
539
+ }
540
+ return /* @__PURE__ */ jsx("div", { className: cn("flex items-center", logoClassName), children: imgElement });
541
+ };
500
542
  function HeroMinimalCenteredDark({
501
543
  sectionId = "hero-minimal-centered-dark",
502
544
  badge,
@@ -517,7 +559,10 @@ function HeroMinimalCenteredDark({
517
559
  headingClassName,
518
560
  descriptionClassName,
519
561
  actionsClassName,
520
- statsClassName
562
+ statsClassName,
563
+ logo,
564
+ logoSlot,
565
+ logoClassName
521
566
  }) {
522
567
  const renderStats = useMemo(() => {
523
568
  if (statsSlot) return statsSlot;
@@ -546,6 +591,7 @@ function HeroMinimalCenteredDark({
546
591
  containerClassName,
547
592
  children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
548
593
  badge && /* @__PURE__ */ jsx(Badge, { className: cn("px-4 py-1", badgeClassName), children: typeof badge === "string" ? /* @__PURE__ */ jsx("span", { children: badge }) : badge }),
594
+ (logo || logoSlot) && /* @__PURE__ */ jsx("div", { className: cn("mb-4 flex justify-center", logoClassName), children: /* @__PURE__ */ jsx(BrandLogo, { logo, logoSlot, size: "xl" }) }),
549
595
  (heading || headingHighlight) && (typeof heading === "string" ? /* @__PURE__ */ jsx(
550
596
  "h1",
551
597
  {
@@ -456,6 +456,47 @@ function Badge({
456
456
  }
457
457
  );
458
458
  }
459
+ var SIZE_CLASSES = {
460
+ sm: "max-h-6 sm:max-h-7",
461
+ md: "max-h-8 sm:max-h-9 lg:max-h-10",
462
+ lg: "max-h-10 sm:max-h-12 lg:max-h-14",
463
+ xl: "max-h-12 sm:max-h-14 lg:max-h-16"
464
+ };
465
+ var BrandLogo = ({
466
+ logo,
467
+ logoSlot,
468
+ logoClassName,
469
+ size = "md",
470
+ optixFlowConfig
471
+ }) => {
472
+ if (logoSlot) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: logoSlot });
473
+ if (!logo || !logo.src) return null;
474
+ const imgElement = /* @__PURE__ */ jsxRuntime.jsx(
475
+ img.Img,
476
+ {
477
+ src: logo.src,
478
+ className: cn(
479
+ "w-auto object-contain",
480
+ SIZE_CLASSES[size],
481
+ logo.className
482
+ ),
483
+ alt: logo.alt || "Logo",
484
+ optixFlowConfig,
485
+ loading: "eager"
486
+ }
487
+ );
488
+ if (logo.url) {
489
+ return /* @__PURE__ */ jsxRuntime.jsx(
490
+ pressable.Pressable,
491
+ {
492
+ href: logo.url,
493
+ className: cn("flex items-center", logoClassName),
494
+ children: imgElement
495
+ }
496
+ );
497
+ }
498
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex items-center", logoClassName), children: imgElement });
499
+ };
459
500
  function HeroMobileAppDownload({
460
501
  sectionId = "hero-mobile-app-download",
461
502
  badgeText,
@@ -483,7 +524,10 @@ function HeroMobileAppDownload({
483
524
  description,
484
525
  descriptionClassName,
485
526
  imageClassName,
486
- optixFlowConfig
527
+ optixFlowConfig,
528
+ logo,
529
+ logoSlot,
530
+ logoClassName
487
531
  }) {
488
532
  const renderBadge = React.useMemo(() => {
489
533
  if (badgeSlot) return badgeSlot;
@@ -617,6 +661,7 @@ function HeroMobileAppDownload({
617
661
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-8 md:pt-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid items-center gap-12 grid-cols-1 md:grid-cols-2 md:gap-20", children: [
618
662
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-8", contentClassName), children: [
619
663
  renderBadge,
664
+ (logo || logoSlot) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-4", logoClassName), children: /* @__PURE__ */ jsxRuntime.jsx(BrandLogo, { logo, logoSlot, size: "lg" }) }),
620
665
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
621
666
  "h1",
622
667
  {
@@ -1,7 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import { S as SectionBackground, s as SectionSpacing, t as PatternName } from './community-initiatives-Cgd-IXlI.cjs';
3
+ import { L as LogoConfig } from './types-mWZcgKth.cjs';
3
4
  import { A as ActionConfig, I as ImageItem, O as OptixFlowConfig } from './blocks-DyouPohq.cjs';
4
5
  import 'react/jsx-runtime';
6
+ import './dynamic-icon.cjs';
7
+ import '@page-speed/icon';
5
8
  import 'class-variance-authority';
6
9
  import '@page-speed/pressable';
7
10
  import '@opensite/hooks/usePlatformFromUrl';
@@ -146,9 +149,21 @@ interface HeroMobileAppDownloadProps {
146
149
  * OptixFlow image optimization configuration
147
150
  */
148
151
  optixFlowConfig?: OptixFlowConfig;
152
+ /**
153
+ * Brand logo configuration. LOGO MEDIA ONLY — do not use photos or hero images.
154
+ */
155
+ logo?: LogoConfig;
156
+ /**
157
+ * Custom slot for logo (overrides logo prop)
158
+ */
159
+ logoSlot?: React.ReactNode;
160
+ /**
161
+ * Additional CSS classes for the logo container
162
+ */
163
+ logoClassName?: string;
149
164
  /** Optional Section ID */
150
165
  sectionId?: string;
151
166
  }
152
- declare function HeroMobileAppDownload({ sectionId, badgeText, badgeIcon, badgeSlot, heading, storeActions, storeActionsSlot, ratingValue, ratingLabel, starCount, ratingSlot, image, imageSlot, notification, notificationSlot, background, containerClassName, spacing, pattern, patternOpacity, className, contentClassName, headingClassName, description, descriptionClassName, imageClassName, optixFlowConfig, }: HeroMobileAppDownloadProps): React.JSX.Element;
167
+ declare function HeroMobileAppDownload({ sectionId, badgeText, badgeIcon, badgeSlot, heading, storeActions, storeActionsSlot, ratingValue, ratingLabel, starCount, ratingSlot, image, imageSlot, notification, notificationSlot, background, containerClassName, spacing, pattern, patternOpacity, className, contentClassName, headingClassName, description, descriptionClassName, imageClassName, optixFlowConfig, logo, logoSlot, logoClassName, }: HeroMobileAppDownloadProps): React.JSX.Element;
153
168
 
154
169
  export { HeroMobileAppDownload, type HeroMobileAppDownloadProps };
@@ -1,7 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import { S as SectionBackground, s as SectionSpacing, t as PatternName } from './community-initiatives-Dud0DKXB.js';
3
+ import { L as LogoConfig } from './types-hJ2R0GoH.js';
3
4
  import { A as ActionConfig, I as ImageItem, O as OptixFlowConfig } from './blocks-DyouPohq.js';
4
5
  import 'react/jsx-runtime';
6
+ import './dynamic-icon.js';
7
+ import '@page-speed/icon';
5
8
  import 'class-variance-authority';
6
9
  import '@page-speed/pressable';
7
10
  import '@opensite/hooks/usePlatformFromUrl';
@@ -146,9 +149,21 @@ interface HeroMobileAppDownloadProps {
146
149
  * OptixFlow image optimization configuration
147
150
  */
148
151
  optixFlowConfig?: OptixFlowConfig;
152
+ /**
153
+ * Brand logo configuration. LOGO MEDIA ONLY — do not use photos or hero images.
154
+ */
155
+ logo?: LogoConfig;
156
+ /**
157
+ * Custom slot for logo (overrides logo prop)
158
+ */
159
+ logoSlot?: React.ReactNode;
160
+ /**
161
+ * Additional CSS classes for the logo container
162
+ */
163
+ logoClassName?: string;
149
164
  /** Optional Section ID */
150
165
  sectionId?: string;
151
166
  }
152
- declare function HeroMobileAppDownload({ sectionId, badgeText, badgeIcon, badgeSlot, heading, storeActions, storeActionsSlot, ratingValue, ratingLabel, starCount, ratingSlot, image, imageSlot, notification, notificationSlot, background, containerClassName, spacing, pattern, patternOpacity, className, contentClassName, headingClassName, description, descriptionClassName, imageClassName, optixFlowConfig, }: HeroMobileAppDownloadProps): React.JSX.Element;
167
+ declare function HeroMobileAppDownload({ sectionId, badgeText, badgeIcon, badgeSlot, heading, storeActions, storeActionsSlot, ratingValue, ratingLabel, starCount, ratingSlot, image, imageSlot, notification, notificationSlot, background, containerClassName, spacing, pattern, patternOpacity, className, contentClassName, headingClassName, description, descriptionClassName, imageClassName, optixFlowConfig, logo, logoSlot, logoClassName, }: HeroMobileAppDownloadProps): React.JSX.Element;
153
168
 
154
169
  export { HeroMobileAppDownload, type HeroMobileAppDownloadProps };
@@ -435,6 +435,47 @@ function Badge({
435
435
  }
436
436
  );
437
437
  }
438
+ var SIZE_CLASSES = {
439
+ sm: "max-h-6 sm:max-h-7",
440
+ md: "max-h-8 sm:max-h-9 lg:max-h-10",
441
+ lg: "max-h-10 sm:max-h-12 lg:max-h-14",
442
+ xl: "max-h-12 sm:max-h-14 lg:max-h-16"
443
+ };
444
+ var BrandLogo = ({
445
+ logo,
446
+ logoSlot,
447
+ logoClassName,
448
+ size = "md",
449
+ optixFlowConfig
450
+ }) => {
451
+ if (logoSlot) return /* @__PURE__ */ jsx(Fragment, { children: logoSlot });
452
+ if (!logo || !logo.src) return null;
453
+ const imgElement = /* @__PURE__ */ jsx(
454
+ Img,
455
+ {
456
+ src: logo.src,
457
+ className: cn(
458
+ "w-auto object-contain",
459
+ SIZE_CLASSES[size],
460
+ logo.className
461
+ ),
462
+ alt: logo.alt || "Logo",
463
+ optixFlowConfig,
464
+ loading: "eager"
465
+ }
466
+ );
467
+ if (logo.url) {
468
+ return /* @__PURE__ */ jsx(
469
+ Pressable,
470
+ {
471
+ href: logo.url,
472
+ className: cn("flex items-center", logoClassName),
473
+ children: imgElement
474
+ }
475
+ );
476
+ }
477
+ return /* @__PURE__ */ jsx("div", { className: cn("flex items-center", logoClassName), children: imgElement });
478
+ };
438
479
  function HeroMobileAppDownload({
439
480
  sectionId = "hero-mobile-app-download",
440
481
  badgeText,
@@ -462,7 +503,10 @@ function HeroMobileAppDownload({
462
503
  description,
463
504
  descriptionClassName,
464
505
  imageClassName,
465
- optixFlowConfig
506
+ optixFlowConfig,
507
+ logo,
508
+ logoSlot,
509
+ logoClassName
466
510
  }) {
467
511
  const renderBadge = useMemo(() => {
468
512
  if (badgeSlot) return badgeSlot;
@@ -596,6 +640,7 @@ function HeroMobileAppDownload({
596
640
  children: /* @__PURE__ */ jsx("div", { className: "pt-8 md:pt-0", children: /* @__PURE__ */ jsxs("div", { className: "grid items-center gap-12 grid-cols-1 md:grid-cols-2 md:gap-20", children: [
597
641
  /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-8", contentClassName), children: [
598
642
  renderBadge,
643
+ (logo || logoSlot) && /* @__PURE__ */ jsx("div", { className: cn("mb-4", logoClassName), children: /* @__PURE__ */ jsx(BrandLogo, { logo, logoSlot, size: "lg" }) }),
599
644
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
600
645
  "h1",
601
646
  {
@@ -6,6 +6,8 @@ var clsx = require('clsx');
6
6
  var tailwindMerge = require('tailwind-merge');
7
7
  var jsxRuntime = require('react/jsx-runtime');
8
8
  var integration = require('@page-speed/forms/integration');
9
+ var pressable = require('@page-speed/pressable');
10
+ var img = require('@page-speed/img');
9
11
 
10
12
  function _interopNamespace(e) {
11
13
  if (e && e.__esModule) return e;
@@ -407,6 +409,47 @@ var Section = React3__namespace.default.forwardRef(
407
409
  }
408
410
  );
409
411
  Section.displayName = "Section";
412
+ var SIZE_CLASSES = {
413
+ sm: "max-h-6 sm:max-h-7",
414
+ md: "max-h-8 sm:max-h-9 lg:max-h-10",
415
+ lg: "max-h-10 sm:max-h-12 lg:max-h-14",
416
+ xl: "max-h-12 sm:max-h-14 lg:max-h-16"
417
+ };
418
+ var BrandLogo = ({
419
+ logo,
420
+ logoSlot,
421
+ logoClassName,
422
+ size = "md",
423
+ optixFlowConfig
424
+ }) => {
425
+ if (logoSlot) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: logoSlot });
426
+ if (!logo || !logo.src) return null;
427
+ const imgElement = /* @__PURE__ */ jsxRuntime.jsx(
428
+ img.Img,
429
+ {
430
+ src: logo.src,
431
+ className: cn(
432
+ "w-auto object-contain",
433
+ SIZE_CLASSES[size],
434
+ logo.className
435
+ ),
436
+ alt: logo.alt || "Logo",
437
+ optixFlowConfig,
438
+ loading: "eager"
439
+ }
440
+ );
441
+ if (logo.url) {
442
+ return /* @__PURE__ */ jsxRuntime.jsx(
443
+ pressable.Pressable,
444
+ {
445
+ href: logo.url,
446
+ className: cn("flex items-center", logoClassName),
447
+ children: imgElement
448
+ }
449
+ );
450
+ }
451
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex items-center", logoClassName), children: imgElement });
452
+ };
410
453
  var DEFAULT_STYLE_RULES = {
411
454
  formContainer: "mt-10 flex justify-center items-center w-full max-w-md flex-col gap-4 sm:flex-row",
412
455
  fieldsContainer: "",
@@ -444,7 +487,10 @@ function HeroNewsletterMinimal({
444
487
  headingClassName,
445
488
  descriptionClassName,
446
489
  disclaimerClassName,
447
- statsClassName
490
+ statsClassName,
491
+ logo,
492
+ logoSlot,
493
+ logoClassName
448
494
  }) {
449
495
  const renderStats = React3__namespace.useMemo(() => {
450
496
  if (statsSlot) return statsSlot;
@@ -524,6 +570,7 @@ function HeroNewsletterMinimal({
524
570
  className,
525
571
  containerClassName,
526
572
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center", children: [
573
+ (logo || logoSlot) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-4 flex justify-center", logoClassName), children: /* @__PURE__ */ jsxRuntime.jsx(BrandLogo, { logo, logoSlot, size: "lg" }) }),
527
574
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
528
575
  "h1",
529
576
  {
@@ -1,8 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import { S as SectionBackground, s as SectionSpacing, t as PatternName } from './community-initiatives-Cgd-IXlI.cjs';
3
3
  import { FormEngineProps } from '@page-speed/forms/integration';
4
+ import { L as LogoConfig } from './types-mWZcgKth.cjs';
4
5
  import { A as ActionConfig, k as StatItem } from './blocks-DyouPohq.cjs';
5
6
  import 'react/jsx-runtime';
7
+ import './dynamic-icon.cjs';
8
+ import '@page-speed/icon';
6
9
  import 'class-variance-authority';
7
10
  import '@page-speed/pressable';
8
11
  import '@opensite/hooks/usePlatformFromUrl';
@@ -91,9 +94,21 @@ interface HeroNewsletterMinimalProps {
91
94
  * Additional CSS classes for the pattern overlay
92
95
  */
93
96
  patternClassName?: string;
97
+ /**
98
+ * Brand logo configuration. LOGO MEDIA ONLY — do not use photos or hero images.
99
+ */
100
+ logo?: LogoConfig;
101
+ /**
102
+ * Custom slot for logo (overrides logo prop)
103
+ */
104
+ logoSlot?: React.ReactNode;
105
+ /**
106
+ * Additional CSS classes for the logo container
107
+ */
108
+ logoClassName?: string;
94
109
  /** Optional Section ID */
95
110
  sectionId?: string;
96
111
  }
97
- declare function HeroNewsletterMinimal({ sectionId, heading, description, formEngineSetup, buttonAction, helperText, formSlot, disclaimer, stats, patternClassName, statsSlot, background, containerClassName, spacing, pattern, patternOpacity, className, headingClassName, descriptionClassName, disclaimerClassName, statsClassName, }: HeroNewsletterMinimalProps): React.JSX.Element;
112
+ declare function HeroNewsletterMinimal({ sectionId, heading, description, formEngineSetup, buttonAction, helperText, formSlot, disclaimer, stats, patternClassName, statsSlot, background, containerClassName, spacing, pattern, patternOpacity, className, headingClassName, descriptionClassName, disclaimerClassName, statsClassName, logo, logoSlot, logoClassName, }: HeroNewsletterMinimalProps): React.JSX.Element;
98
113
 
99
114
  export { HeroNewsletterMinimal, type HeroNewsletterMinimalProps };
@@ -1,8 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import { S as SectionBackground, s as SectionSpacing, t as PatternName } from './community-initiatives-Dud0DKXB.js';
3
3
  import { FormEngineProps } from '@page-speed/forms/integration';
4
+ import { L as LogoConfig } from './types-hJ2R0GoH.js';
4
5
  import { A as ActionConfig, k as StatItem } from './blocks-DyouPohq.js';
5
6
  import 'react/jsx-runtime';
7
+ import './dynamic-icon.js';
8
+ import '@page-speed/icon';
6
9
  import 'class-variance-authority';
7
10
  import '@page-speed/pressable';
8
11
  import '@opensite/hooks/usePlatformFromUrl';
@@ -91,9 +94,21 @@ interface HeroNewsletterMinimalProps {
91
94
  * Additional CSS classes for the pattern overlay
92
95
  */
93
96
  patternClassName?: string;
97
+ /**
98
+ * Brand logo configuration. LOGO MEDIA ONLY — do not use photos or hero images.
99
+ */
100
+ logo?: LogoConfig;
101
+ /**
102
+ * Custom slot for logo (overrides logo prop)
103
+ */
104
+ logoSlot?: React.ReactNode;
105
+ /**
106
+ * Additional CSS classes for the logo container
107
+ */
108
+ logoClassName?: string;
94
109
  /** Optional Section ID */
95
110
  sectionId?: string;
96
111
  }
97
- declare function HeroNewsletterMinimal({ sectionId, heading, description, formEngineSetup, buttonAction, helperText, formSlot, disclaimer, stats, patternClassName, statsSlot, background, containerClassName, spacing, pattern, patternOpacity, className, headingClassName, descriptionClassName, disclaimerClassName, statsClassName, }: HeroNewsletterMinimalProps): React.JSX.Element;
112
+ declare function HeroNewsletterMinimal({ sectionId, heading, description, formEngineSetup, buttonAction, helperText, formSlot, disclaimer, stats, patternClassName, statsSlot, background, containerClassName, spacing, pattern, patternOpacity, className, headingClassName, descriptionClassName, disclaimerClassName, statsClassName, logo, logoSlot, logoClassName, }: HeroNewsletterMinimalProps): React.JSX.Element;
98
113
 
99
114
  export { HeroNewsletterMinimal, type HeroNewsletterMinimalProps };
@@ -5,6 +5,8 @@ import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
7
  import { FormEngine } from '@page-speed/forms/integration';
8
+ import { Pressable } from '@page-speed/pressable';
9
+ import { Img } from '@page-speed/img';
8
10
 
9
11
  // components/blocks/hero/hero-newsletter-minimal.tsx
10
12
  function cn(...inputs) {
@@ -386,6 +388,47 @@ var Section = React3__default.forwardRef(
386
388
  }
387
389
  );
388
390
  Section.displayName = "Section";
391
+ var SIZE_CLASSES = {
392
+ sm: "max-h-6 sm:max-h-7",
393
+ md: "max-h-8 sm:max-h-9 lg:max-h-10",
394
+ lg: "max-h-10 sm:max-h-12 lg:max-h-14",
395
+ xl: "max-h-12 sm:max-h-14 lg:max-h-16"
396
+ };
397
+ var BrandLogo = ({
398
+ logo,
399
+ logoSlot,
400
+ logoClassName,
401
+ size = "md",
402
+ optixFlowConfig
403
+ }) => {
404
+ if (logoSlot) return /* @__PURE__ */ jsx(Fragment, { children: logoSlot });
405
+ if (!logo || !logo.src) return null;
406
+ const imgElement = /* @__PURE__ */ jsx(
407
+ Img,
408
+ {
409
+ src: logo.src,
410
+ className: cn(
411
+ "w-auto object-contain",
412
+ SIZE_CLASSES[size],
413
+ logo.className
414
+ ),
415
+ alt: logo.alt || "Logo",
416
+ optixFlowConfig,
417
+ loading: "eager"
418
+ }
419
+ );
420
+ if (logo.url) {
421
+ return /* @__PURE__ */ jsx(
422
+ Pressable,
423
+ {
424
+ href: logo.url,
425
+ className: cn("flex items-center", logoClassName),
426
+ children: imgElement
427
+ }
428
+ );
429
+ }
430
+ return /* @__PURE__ */ jsx("div", { className: cn("flex items-center", logoClassName), children: imgElement });
431
+ };
389
432
  var DEFAULT_STYLE_RULES = {
390
433
  formContainer: "mt-10 flex justify-center items-center w-full max-w-md flex-col gap-4 sm:flex-row",
391
434
  fieldsContainer: "",
@@ -423,7 +466,10 @@ function HeroNewsletterMinimal({
423
466
  headingClassName,
424
467
  descriptionClassName,
425
468
  disclaimerClassName,
426
- statsClassName
469
+ statsClassName,
470
+ logo,
471
+ logoSlot,
472
+ logoClassName
427
473
  }) {
428
474
  const renderStats = React3.useMemo(() => {
429
475
  if (statsSlot) return statsSlot;
@@ -503,6 +549,7 @@ function HeroNewsletterMinimal({
503
549
  className,
504
550
  containerClassName,
505
551
  children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center", children: [
552
+ (logo || logoSlot) && /* @__PURE__ */ jsx("div", { className: cn("mb-4 flex justify-center", logoClassName), children: /* @__PURE__ */ jsx(BrandLogo, { logo, logoSlot, size: "lg" }) }),
506
553
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
507
554
  "h1",
508
555
  {