@opensite/ui 3.7.0 → 3.7.2

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.
@@ -447,7 +447,7 @@ function HeroLogoCenteredScreenshot({
447
447
  imageSlot,
448
448
  background,
449
449
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
450
- spacing = "pt-32 pb-8 md:pt-32 md:pb-32",
450
+ spacing = "hero",
451
451
  pattern,
452
452
  patternOpacity,
453
453
  className,
@@ -483,7 +483,7 @@ function HeroLogoCenteredScreenshot({
483
483
  src: image.src,
484
484
  alt: image.alt,
485
485
  className: cn(
486
- "mt-20 w-full rounded-xl object-cover h-auto shadow-xl",
486
+ "mt-10 md:mt-20 w-full rounded-xl object-cover h-auto shadow-xl",
487
487
  imageClassName,
488
488
  image.className
489
489
  ),
@@ -441,7 +441,7 @@ function HeroLogoCenteredScreenshot({
441
441
  imageSlot,
442
442
  background,
443
443
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
444
- spacing = "pt-32 pb-8 md:pt-32 md:pb-32",
444
+ spacing = "hero",
445
445
  pattern,
446
446
  patternOpacity,
447
447
  className,
@@ -477,7 +477,7 @@ function HeroLogoCenteredScreenshot({
477
477
  src: image.src,
478
478
  alt: image.alt,
479
479
  className: cn(
480
- "mt-20 w-full rounded-xl object-cover h-auto shadow-xl",
480
+ "mt-10 md:mt-20 w-full rounded-xl object-cover h-auto shadow-xl",
481
481
  imageClassName,
482
482
  image.className
483
483
  ),
@@ -422,10 +422,53 @@ var Section = React__namespace.default.forwardRef(
422
422
  }
423
423
  );
424
424
  Section.displayName = "Section";
425
+ var SIZE_CLASSES = {
426
+ sm: "max-h-6 sm:max-h-7",
427
+ md: "max-h-8 sm:max-h-9 lg:max-h-10",
428
+ lg: "max-h-10 sm:max-h-12 lg:max-h-14",
429
+ xl: "max-h-12 sm:max-h-14 lg:max-h-16"
430
+ };
431
+ var BrandLogo = ({
432
+ logo,
433
+ logoSlot,
434
+ logoClassName,
435
+ size = "md",
436
+ optixFlowConfig
437
+ }) => {
438
+ if (logoSlot) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: logoSlot });
439
+ if (!logo || !logo.src) return null;
440
+ const imgElement = /* @__PURE__ */ jsxRuntime.jsx(
441
+ img.Img,
442
+ {
443
+ src: logo.src,
444
+ className: cn(
445
+ "w-auto object-contain",
446
+ SIZE_CLASSES[size],
447
+ logo.className
448
+ ),
449
+ alt: logo.alt || "Logo",
450
+ optixFlowConfig,
451
+ loading: "eager"
452
+ }
453
+ );
454
+ if (logo.url) {
455
+ return /* @__PURE__ */ jsxRuntime.jsx(
456
+ pressable.Pressable,
457
+ {
458
+ href: logo.url,
459
+ className: cn("flex items-center", logoClassName),
460
+ children: imgElement
461
+ }
462
+ );
463
+ }
464
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex items-center", logoClassName), children: imgElement });
465
+ };
466
+ var brand_logo_default = BrandLogo;
425
467
  function HeroPlatformFeaturesGrid({
426
468
  sectionId = "hero-platform-features-grid",
427
469
  logo,
428
470
  logoSlot,
471
+ logoClassName,
429
472
  subtitle,
430
473
  description,
431
474
  heading,
@@ -444,23 +487,6 @@ function HeroPlatformFeaturesGrid({
444
487
  featuresClassName,
445
488
  optixFlowConfig
446
489
  }) {
447
- const renderLogo = React.useMemo(() => {
448
- if (logoSlot) return logoSlot;
449
- if (!logo) return null;
450
- const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
451
- return /* @__PURE__ */ jsxRuntime.jsx(
452
- img.Img,
453
- {
454
- src: logoSrc,
455
- alt: logo.alt,
456
- className: cn(
457
- "mx-auto mb-5 w-24 md:mb-6 md:w-28 lg:mb-7 lg:w-32",
458
- logo.imgClassName
459
- ),
460
- optixFlowConfig
461
- }
462
- );
463
- }, [logoSlot, logo, optixFlowConfig]);
464
490
  const renderAction = React.useMemo(() => {
465
491
  if (actionSlot) return actionSlot;
466
492
  if (!action) return null;
@@ -525,28 +551,35 @@ function HeroPlatformFeaturesGrid({
525
551
  headerClassName
526
552
  ),
527
553
  children: [
528
- renderLogo,
529
- subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("mb-3 text-sm tracking-widest md:text-base"), children: subtitle }) : subtitle),
554
+ logo || logoSlot ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex justify-center", logoClassName), children: /* @__PURE__ */ jsxRuntime.jsx(brand_logo_default, { logo, logoSlot, size: "lg" }) }) : null,
555
+ subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
556
+ "span",
557
+ {
558
+ className: cn(
559
+ "text-sm tracking-widest md:text-base opacity-50"
560
+ ),
561
+ children: subtitle
562
+ }
563
+ ) : subtitle),
530
564
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
531
565
  "h1",
532
566
  {
533
567
  className: cn(
534
- "mt-4 text-4xl font-semibold text-balance lg:text-6xl",
568
+ "text-4xl font-semibold text-balance lg:text-6xl",
535
569
  headingClassName
536
570
  ),
537
571
  children: heading
538
572
  }
539
- ) : /* @__PURE__ */ jsxRuntime.jsx(
540
- "h1",
573
+ ) : heading),
574
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
575
+ "p",
541
576
  {
542
577
  className: cn(
543
- "mt-4 text-4xl font-semibold text-balance lg:text-6xl",
544
- headingClassName
578
+ "mb-6 max-w-full md:max-w-md text-base md:text-lg text-balance"
545
579
  ),
546
- children: heading
580
+ children: description
547
581
  }
548
- )),
549
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-6 max-w-2xl md:text-lg text-balance"), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("max-w-2xl md:text-lg text-balance"), children: description })),
582
+ ) : description),
550
583
  renderAction
551
584
  ]
552
585
  }
@@ -1,20 +1,28 @@
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 LogoItem, A as ActionConfig, F as FeatureItem, O as OptixFlowConfig } from './blocks-DyouPohq.cjs';
3
+ import { L as LogoConfig } from './types-mWZcgKth.cjs';
4
+ import { A as ActionConfig, F as FeatureItem, 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';
8
11
 
9
12
  interface HeroPlatformFeaturesGridProps {
10
13
  /**
11
- * Logo configuration
14
+ * Brand logo configuration — renders above the announcement badge.
15
+ * LOGO MEDIA ONLY. Do not use photos, hero images, or video assets.
12
16
  */
13
- logo?: LogoItem;
17
+ logo?: LogoConfig;
14
18
  /**
15
19
  * Custom slot for logo (overrides logo prop)
16
20
  */
17
21
  logoSlot?: React.ReactNode;
22
+ /**
23
+ * Additional CSS classes for the logo container
24
+ */
25
+ logoClassName?: string;
18
26
  /**
19
27
  * Subtitle/label text above heading
20
28
  */
@@ -87,6 +95,6 @@ interface HeroPlatformFeaturesGridProps {
87
95
  /** Optional Section ID */
88
96
  sectionId?: string;
89
97
  }
90
- declare function HeroPlatformFeaturesGrid({ sectionId, logo, logoSlot, subtitle, description, heading, action, actionSlot, features, featuresSlot, background, containerClassName, spacing, pattern, patternOpacity, className, headerClassName, headingClassName, featuresClassName, optixFlowConfig, }: HeroPlatformFeaturesGridProps): React.JSX.Element;
98
+ declare function HeroPlatformFeaturesGrid({ sectionId, logo, logoSlot, logoClassName, subtitle, description, heading, action, actionSlot, features, featuresSlot, background, containerClassName, spacing, pattern, patternOpacity, className, headerClassName, headingClassName, featuresClassName, optixFlowConfig, }: HeroPlatformFeaturesGridProps): React.JSX.Element;
91
99
 
92
100
  export { HeroPlatformFeaturesGrid, type HeroPlatformFeaturesGridProps };
@@ -1,20 +1,28 @@
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 LogoItem, A as ActionConfig, F as FeatureItem, O as OptixFlowConfig } from './blocks-DyouPohq.js';
3
+ import { L as LogoConfig } from './types-hJ2R0GoH.js';
4
+ import { A as ActionConfig, F as FeatureItem, 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';
8
11
 
9
12
  interface HeroPlatformFeaturesGridProps {
10
13
  /**
11
- * Logo configuration
14
+ * Brand logo configuration — renders above the announcement badge.
15
+ * LOGO MEDIA ONLY. Do not use photos, hero images, or video assets.
12
16
  */
13
- logo?: LogoItem;
17
+ logo?: LogoConfig;
14
18
  /**
15
19
  * Custom slot for logo (overrides logo prop)
16
20
  */
17
21
  logoSlot?: React.ReactNode;
22
+ /**
23
+ * Additional CSS classes for the logo container
24
+ */
25
+ logoClassName?: string;
18
26
  /**
19
27
  * Subtitle/label text above heading
20
28
  */
@@ -87,6 +95,6 @@ interface HeroPlatformFeaturesGridProps {
87
95
  /** Optional Section ID */
88
96
  sectionId?: string;
89
97
  }
90
- declare function HeroPlatformFeaturesGrid({ sectionId, logo, logoSlot, subtitle, description, heading, action, actionSlot, features, featuresSlot, background, containerClassName, spacing, pattern, patternOpacity, className, headerClassName, headingClassName, featuresClassName, optixFlowConfig, }: HeroPlatformFeaturesGridProps): React.JSX.Element;
98
+ declare function HeroPlatformFeaturesGrid({ sectionId, logo, logoSlot, logoClassName, subtitle, description, heading, action, actionSlot, features, featuresSlot, background, containerClassName, spacing, pattern, patternOpacity, className, headerClassName, headingClassName, featuresClassName, optixFlowConfig, }: HeroPlatformFeaturesGridProps): React.JSX.Element;
91
99
 
92
100
  export { HeroPlatformFeaturesGrid, type HeroPlatformFeaturesGridProps };
@@ -401,10 +401,53 @@ var Section = React__default.forwardRef(
401
401
  }
402
402
  );
403
403
  Section.displayName = "Section";
404
+ var SIZE_CLASSES = {
405
+ sm: "max-h-6 sm:max-h-7",
406
+ md: "max-h-8 sm:max-h-9 lg:max-h-10",
407
+ lg: "max-h-10 sm:max-h-12 lg:max-h-14",
408
+ xl: "max-h-12 sm:max-h-14 lg:max-h-16"
409
+ };
410
+ var BrandLogo = ({
411
+ logo,
412
+ logoSlot,
413
+ logoClassName,
414
+ size = "md",
415
+ optixFlowConfig
416
+ }) => {
417
+ if (logoSlot) return /* @__PURE__ */ jsx(Fragment, { children: logoSlot });
418
+ if (!logo || !logo.src) return null;
419
+ const imgElement = /* @__PURE__ */ jsx(
420
+ Img,
421
+ {
422
+ src: logo.src,
423
+ className: cn(
424
+ "w-auto object-contain",
425
+ SIZE_CLASSES[size],
426
+ logo.className
427
+ ),
428
+ alt: logo.alt || "Logo",
429
+ optixFlowConfig,
430
+ loading: "eager"
431
+ }
432
+ );
433
+ if (logo.url) {
434
+ return /* @__PURE__ */ jsx(
435
+ Pressable,
436
+ {
437
+ href: logo.url,
438
+ className: cn("flex items-center", logoClassName),
439
+ children: imgElement
440
+ }
441
+ );
442
+ }
443
+ return /* @__PURE__ */ jsx("div", { className: cn("flex items-center", logoClassName), children: imgElement });
444
+ };
445
+ var brand_logo_default = BrandLogo;
404
446
  function HeroPlatformFeaturesGrid({
405
447
  sectionId = "hero-platform-features-grid",
406
448
  logo,
407
449
  logoSlot,
450
+ logoClassName,
408
451
  subtitle,
409
452
  description,
410
453
  heading,
@@ -423,23 +466,6 @@ function HeroPlatformFeaturesGrid({
423
466
  featuresClassName,
424
467
  optixFlowConfig
425
468
  }) {
426
- const renderLogo = useMemo(() => {
427
- if (logoSlot) return logoSlot;
428
- if (!logo) return null;
429
- const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
430
- return /* @__PURE__ */ jsx(
431
- Img,
432
- {
433
- src: logoSrc,
434
- alt: logo.alt,
435
- className: cn(
436
- "mx-auto mb-5 w-24 md:mb-6 md:w-28 lg:mb-7 lg:w-32",
437
- logo.imgClassName
438
- ),
439
- optixFlowConfig
440
- }
441
- );
442
- }, [logoSlot, logo, optixFlowConfig]);
443
469
  const renderAction = useMemo(() => {
444
470
  if (actionSlot) return actionSlot;
445
471
  if (!action) return null;
@@ -504,28 +530,35 @@ function HeroPlatformFeaturesGrid({
504
530
  headerClassName
505
531
  ),
506
532
  children: [
507
- renderLogo,
508
- subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsx("span", { className: cn("mb-3 text-sm tracking-widest md:text-base"), children: subtitle }) : subtitle),
533
+ logo || logoSlot ? /* @__PURE__ */ jsx("div", { className: cn("flex justify-center", logoClassName), children: /* @__PURE__ */ jsx(brand_logo_default, { logo, logoSlot, size: "lg" }) }) : null,
534
+ subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsx(
535
+ "span",
536
+ {
537
+ className: cn(
538
+ "text-sm tracking-widest md:text-base opacity-50"
539
+ ),
540
+ children: subtitle
541
+ }
542
+ ) : subtitle),
509
543
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
510
544
  "h1",
511
545
  {
512
546
  className: cn(
513
- "mt-4 text-4xl font-semibold text-balance lg:text-6xl",
547
+ "text-4xl font-semibold text-balance lg:text-6xl",
514
548
  headingClassName
515
549
  ),
516
550
  children: heading
517
551
  }
518
- ) : /* @__PURE__ */ jsx(
519
- "h1",
552
+ ) : heading),
553
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
554
+ "p",
520
555
  {
521
556
  className: cn(
522
- "mt-4 text-4xl font-semibold text-balance lg:text-6xl",
523
- headingClassName
557
+ "mb-6 max-w-full md:max-w-md text-base md:text-lg text-balance"
524
558
  ),
525
- children: heading
559
+ children: description
526
560
  }
527
- )),
528
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mb-6 max-w-2xl md:text-lg text-balance"), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("max-w-2xl md:text-lg text-balance"), children: description })),
561
+ ) : description),
529
562
  renderAction
530
563
  ]
531
564
  }
@@ -668,11 +668,49 @@ function ActionComponent({ action }) {
668
668
  }
669
669
  );
670
670
  }
671
+ var SIZE_CLASSES = {
672
+ sm: "max-h-6 sm:max-h-7",
673
+ md: "max-h-8 sm:max-h-9 lg:max-h-10",
674
+ lg: "max-h-10 sm:max-h-12 lg:max-h-14",
675
+ xl: "max-h-12 sm:max-h-14 lg:max-h-16"
676
+ };
677
+ var BrandLogo = ({
678
+ logo,
679
+ logoSlot,
680
+ logoClassName,
681
+ size = "md",
682
+ optixFlowConfig
683
+ }) => {
684
+ if (logoSlot) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: logoSlot });
685
+ if (!logo || !logo.src) return null;
686
+ const imgElement = /* @__PURE__ */ jsxRuntime.jsx(
687
+ img.Img,
688
+ {
689
+ src: logo.src,
690
+ className: cn(
691
+ "w-auto object-contain",
692
+ SIZE_CLASSES[size],
693
+ logo.className
694
+ ),
695
+ alt: logo.alt || "Logo",
696
+ optixFlowConfig,
697
+ loading: "eager"
698
+ }
699
+ );
700
+ if (logo.url) {
701
+ return /* @__PURE__ */ jsxRuntime.jsx(
702
+ pressable.Pressable,
703
+ {
704
+ href: logo.url,
705
+ className: cn("flex items-center", logoClassName),
706
+ children: imgElement
707
+ }
708
+ );
709
+ }
710
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex items-center", logoClassName), children: imgElement });
711
+ };
712
+ var brand_logo_default = BrandLogo;
671
713
  var HERO_TECH_CAROUSEL_MAX_ITEMS = 4;
672
- function resolveLogoSrc(logo) {
673
- if (typeof logo.src === "string") return logo.src;
674
- return logo.src?.light;
675
- }
676
714
  function HeroPanel({
677
715
  item,
678
716
  defaultAutoplayIntervalMs,
@@ -682,6 +720,7 @@ function HeroPanel({
682
720
  const {
683
721
  logo,
684
722
  logoSlot,
723
+ logoClassName,
685
724
  title,
686
725
  content,
687
726
  actions,
@@ -690,7 +729,6 @@ function HeroPanel({
690
729
  id,
691
730
  className,
692
731
  contentClassName,
693
- logoClassName,
694
732
  titleClassName,
695
733
  textClassName,
696
734
  actionsClassName,
@@ -762,24 +800,18 @@ function HeroPanel({
762
800
  ]);
763
801
  const hasBackground = !!backgroundMedia && backgroundMedia.length > 0;
764
802
  const renderLogo = React3.useMemo(() => {
765
- if (logoSlot) return logoSlot;
766
- if (!logo) return null;
767
- const src = resolveLogoSrc(logo);
768
- if (!src) return null;
769
- return /* @__PURE__ */ jsxRuntime.jsx(
770
- img.Img,
803
+ if (!logoSlot && !logo?.src) return null;
804
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex justify-center", logoClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
805
+ brand_logo_default,
771
806
  {
772
- src,
773
- alt: logo.alt,
774
- className: cn(
775
- "h-10 md:h-12 lg:h-14 w-auto object-contain",
776
- logo.imgClassName,
777
- logoClassName
778
- ),
807
+ logo,
808
+ logoSlot,
809
+ size: "md",
779
810
  optixFlowConfig: resolvedOptixFlow
780
811
  }
781
- );
812
+ ) });
782
813
  }, [logoSlot, logo, logoClassName, resolvedOptixFlow]);
814
+ const hasLogo = !!renderLogo;
783
815
  const renderTitle = React3.useMemo(() => {
784
816
  if (title === void 0 || title === null || title === "") return null;
785
817
  if (typeof title === "string") {
@@ -787,7 +819,8 @@ function HeroPanel({
787
819
  "h2",
788
820
  {
789
821
  className: cn(
790
- "text-2xl md:text-3xl lg:text-4xl font-semibold text-balance",
822
+ "font-semibold text-balance",
823
+ hasLogo ? "text-lg lg:text-xl" : "text-xl md:text-2xl lg:text-3xl",
791
824
  hasBackground && "text-white text-shadow-lg",
792
825
  titleClassName
793
826
  ),
@@ -796,7 +829,7 @@ function HeroPanel({
796
829
  );
797
830
  }
798
831
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: titleClassName, children: title });
799
- }, [title, titleClassName, hasBackground]);
832
+ }, [title, titleClassName, hasBackground, hasLogo]);
800
833
  const renderContent = React3.useMemo(() => {
801
834
  if (content === void 0 || content === null || content === "")
802
835
  return null;
@@ -836,7 +869,7 @@ function HeroPanel({
836
869
  "div",
837
870
  {
838
871
  className: cn(
839
- "relative z-10 flex h-full w-full flex-col items-center justify-center gap-4 md:gap-6",
872
+ "relative z-10 flex h-full w-full flex-col items-center justify-center gap-4",
840
873
  // Mobile padding keeps content readable when stacked.
841
874
  "px-6 py-12 md:px-8 md:py-12 lg:px-10",
842
875
  // Center content vertically; on desktop columns can be quite tall.
@@ -1,11 +1,14 @@
1
1
  import * as React from 'react';
2
2
  import { ImageSliderImage } from './image-slider.cjs';
3
3
  import { S as SectionBackground, s as SectionSpacing, t as PatternName } from './community-initiatives-Cgd-IXlI.cjs';
4
- import { L as LogoItem, A as ActionConfig, O as OptixFlowConfig } from './blocks-DyouPohq.cjs';
4
+ import { L as LogoConfig } from './types-mWZcgKth.cjs';
5
+ import { A as ActionConfig, O as OptixFlowConfig } from './blocks-DyouPohq.cjs';
5
6
  import 'react/jsx-runtime';
6
7
  import 'class-variance-authority';
7
8
  import '@page-speed/pressable';
8
9
  import '@opensite/hooks/usePlatformFromUrl';
10
+ import './dynamic-icon.cjs';
11
+ import '@page-speed/icon';
9
12
 
10
13
  /**
11
14
  * Configuration for a single panel in the {@link HeroTechCarousel} block.
@@ -31,15 +34,18 @@ import '@opensite/hooks/usePlatformFromUrl';
31
34
  */
32
35
  interface HeroPanelItem {
33
36
  /**
34
- * Optional logo rendered above the title.
35
- * Follows the standard {@link LogoItem} prop shape used across blocks.
36
- * Default styling applies `object-contain` so SVG/PNG logos preserve aspect ratio.
37
+ * Brand logo configuration — renders above the announcement badge.
38
+ * LOGO MEDIA ONLY. Do not use photos, hero images, or video assets.
37
39
  */
38
- logo?: LogoItem;
40
+ logo?: LogoConfig;
39
41
  /**
40
- * Custom slot for the logo (overrides the {@link logo} prop).
42
+ * Custom slot for logo (overrides logo prop)
41
43
  */
42
44
  logoSlot?: React.ReactNode;
45
+ /**
46
+ * Additional CSS classes for the logo container
47
+ */
48
+ logoClassName?: string;
43
49
  /**
44
50
  * Optional panel title.
45
51
  */
@@ -77,10 +83,6 @@ interface HeroPanelItem {
77
83
  * Additional CSS classes for the panel's content layer (above the background).
78
84
  */
79
85
  contentClassName?: string;
80
- /**
81
- * Additional CSS classes for the panel's logo element.
82
- */
83
- logoClassName?: string;
84
86
  /**
85
87
  * Additional CSS classes for the panel's title element.
86
88
  */
@@ -1,11 +1,14 @@
1
1
  import * as React from 'react';
2
2
  import { ImageSliderImage } from './image-slider.js';
3
3
  import { S as SectionBackground, s as SectionSpacing, t as PatternName } from './community-initiatives-Dud0DKXB.js';
4
- import { L as LogoItem, A as ActionConfig, O as OptixFlowConfig } from './blocks-DyouPohq.js';
4
+ import { L as LogoConfig } from './types-hJ2R0GoH.js';
5
+ import { A as ActionConfig, O as OptixFlowConfig } from './blocks-DyouPohq.js';
5
6
  import 'react/jsx-runtime';
6
7
  import 'class-variance-authority';
7
8
  import '@page-speed/pressable';
8
9
  import '@opensite/hooks/usePlatformFromUrl';
10
+ import './dynamic-icon.js';
11
+ import '@page-speed/icon';
9
12
 
10
13
  /**
11
14
  * Configuration for a single panel in the {@link HeroTechCarousel} block.
@@ -31,15 +34,18 @@ import '@opensite/hooks/usePlatformFromUrl';
31
34
  */
32
35
  interface HeroPanelItem {
33
36
  /**
34
- * Optional logo rendered above the title.
35
- * Follows the standard {@link LogoItem} prop shape used across blocks.
36
- * Default styling applies `object-contain` so SVG/PNG logos preserve aspect ratio.
37
+ * Brand logo configuration — renders above the announcement badge.
38
+ * LOGO MEDIA ONLY. Do not use photos, hero images, or video assets.
37
39
  */
38
- logo?: LogoItem;
40
+ logo?: LogoConfig;
39
41
  /**
40
- * Custom slot for the logo (overrides the {@link logo} prop).
42
+ * Custom slot for logo (overrides logo prop)
41
43
  */
42
44
  logoSlot?: React.ReactNode;
45
+ /**
46
+ * Additional CSS classes for the logo container
47
+ */
48
+ logoClassName?: string;
43
49
  /**
44
50
  * Optional panel title.
45
51
  */
@@ -77,10 +83,6 @@ interface HeroPanelItem {
77
83
  * Additional CSS classes for the panel's content layer (above the background).
78
84
  */
79
85
  contentClassName?: string;
80
- /**
81
- * Additional CSS classes for the panel's logo element.
82
- */
83
- logoClassName?: string;
84
86
  /**
85
87
  * Additional CSS classes for the panel's title element.
86
88
  */
@@ -647,11 +647,49 @@ function ActionComponent({ action }) {
647
647
  }
648
648
  );
649
649
  }
650
+ var SIZE_CLASSES = {
651
+ sm: "max-h-6 sm:max-h-7",
652
+ md: "max-h-8 sm:max-h-9 lg:max-h-10",
653
+ lg: "max-h-10 sm:max-h-12 lg:max-h-14",
654
+ xl: "max-h-12 sm:max-h-14 lg:max-h-16"
655
+ };
656
+ var BrandLogo = ({
657
+ logo,
658
+ logoSlot,
659
+ logoClassName,
660
+ size = "md",
661
+ optixFlowConfig
662
+ }) => {
663
+ if (logoSlot) return /* @__PURE__ */ jsx(Fragment, { children: logoSlot });
664
+ if (!logo || !logo.src) return null;
665
+ const imgElement = /* @__PURE__ */ jsx(
666
+ Img,
667
+ {
668
+ src: logo.src,
669
+ className: cn(
670
+ "w-auto object-contain",
671
+ SIZE_CLASSES[size],
672
+ logo.className
673
+ ),
674
+ alt: logo.alt || "Logo",
675
+ optixFlowConfig,
676
+ loading: "eager"
677
+ }
678
+ );
679
+ if (logo.url) {
680
+ return /* @__PURE__ */ jsx(
681
+ Pressable,
682
+ {
683
+ href: logo.url,
684
+ className: cn("flex items-center", logoClassName),
685
+ children: imgElement
686
+ }
687
+ );
688
+ }
689
+ return /* @__PURE__ */ jsx("div", { className: cn("flex items-center", logoClassName), children: imgElement });
690
+ };
691
+ var brand_logo_default = BrandLogo;
650
692
  var HERO_TECH_CAROUSEL_MAX_ITEMS = 4;
651
- function resolveLogoSrc(logo) {
652
- if (typeof logo.src === "string") return logo.src;
653
- return logo.src?.light;
654
- }
655
693
  function HeroPanel({
656
694
  item,
657
695
  defaultAutoplayIntervalMs,
@@ -661,6 +699,7 @@ function HeroPanel({
661
699
  const {
662
700
  logo,
663
701
  logoSlot,
702
+ logoClassName,
664
703
  title,
665
704
  content,
666
705
  actions,
@@ -669,7 +708,6 @@ function HeroPanel({
669
708
  id,
670
709
  className,
671
710
  contentClassName,
672
- logoClassName,
673
711
  titleClassName,
674
712
  textClassName,
675
713
  actionsClassName,
@@ -741,24 +779,18 @@ function HeroPanel({
741
779
  ]);
742
780
  const hasBackground = !!backgroundMedia && backgroundMedia.length > 0;
743
781
  const renderLogo = useMemo(() => {
744
- if (logoSlot) return logoSlot;
745
- if (!logo) return null;
746
- const src = resolveLogoSrc(logo);
747
- if (!src) return null;
748
- return /* @__PURE__ */ jsx(
749
- Img,
782
+ if (!logoSlot && !logo?.src) return null;
783
+ return /* @__PURE__ */ jsx("div", { className: cn("flex justify-center", logoClassName), children: /* @__PURE__ */ jsx(
784
+ brand_logo_default,
750
785
  {
751
- src,
752
- alt: logo.alt,
753
- className: cn(
754
- "h-10 md:h-12 lg:h-14 w-auto object-contain",
755
- logo.imgClassName,
756
- logoClassName
757
- ),
786
+ logo,
787
+ logoSlot,
788
+ size: "md",
758
789
  optixFlowConfig: resolvedOptixFlow
759
790
  }
760
- );
791
+ ) });
761
792
  }, [logoSlot, logo, logoClassName, resolvedOptixFlow]);
793
+ const hasLogo = !!renderLogo;
762
794
  const renderTitle = useMemo(() => {
763
795
  if (title === void 0 || title === null || title === "") return null;
764
796
  if (typeof title === "string") {
@@ -766,7 +798,8 @@ function HeroPanel({
766
798
  "h2",
767
799
  {
768
800
  className: cn(
769
- "text-2xl md:text-3xl lg:text-4xl font-semibold text-balance",
801
+ "font-semibold text-balance",
802
+ hasLogo ? "text-lg lg:text-xl" : "text-xl md:text-2xl lg:text-3xl",
770
803
  hasBackground && "text-white text-shadow-lg",
771
804
  titleClassName
772
805
  ),
@@ -775,7 +808,7 @@ function HeroPanel({
775
808
  );
776
809
  }
777
810
  return /* @__PURE__ */ jsx("div", { className: titleClassName, children: title });
778
- }, [title, titleClassName, hasBackground]);
811
+ }, [title, titleClassName, hasBackground, hasLogo]);
779
812
  const renderContent = useMemo(() => {
780
813
  if (content === void 0 || content === null || content === "")
781
814
  return null;
@@ -815,7 +848,7 @@ function HeroPanel({
815
848
  "div",
816
849
  {
817
850
  className: cn(
818
- "relative z-10 flex h-full w-full flex-col items-center justify-center gap-4 md:gap-6",
851
+ "relative z-10 flex h-full w-full flex-col items-center justify-center gap-4",
819
852
  // Mobile padding keeps content readable when stacked.
820
853
  "px-6 py-12 md:px-8 md:py-12 lg:px-10",
821
854
  // Center content vertically; on desktop columns can be quite tall.
package/dist/registry.cjs CHANGED
@@ -50995,7 +50995,7 @@ function HeroLogoCenteredScreenshot({
50995
50995
  imageSlot: imageSlot2,
50996
50996
  background,
50997
50997
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
50998
- spacing = "pt-32 pb-8 md:pt-32 md:pb-32",
50998
+ spacing = "hero",
50999
50999
  pattern,
51000
51000
  patternOpacity,
51001
51001
  className,
@@ -51031,7 +51031,7 @@ function HeroLogoCenteredScreenshot({
51031
51031
  src: image.src,
51032
51032
  alt: image.alt,
51033
51033
  className: cn(
51034
- "mt-20 w-full rounded-xl object-cover h-auto shadow-xl",
51034
+ "mt-10 md:mt-20 w-full rounded-xl object-cover h-auto shadow-xl",
51035
51035
  imageClassName,
51036
51036
  image.className
51037
51037
  ),
@@ -51351,10 +51351,6 @@ function HeroAnnouncementBadge({
51351
51351
  );
51352
51352
  }
51353
51353
  var HERO_TECH_CAROUSEL_MAX_ITEMS = 4;
51354
- function resolveLogoSrc(logo) {
51355
- if (typeof logo.src === "string") return logo.src;
51356
- return logo.src?.light;
51357
- }
51358
51354
  function HeroPanel({
51359
51355
  item,
51360
51356
  defaultAutoplayIntervalMs,
@@ -51364,6 +51360,7 @@ function HeroPanel({
51364
51360
  const {
51365
51361
  logo,
51366
51362
  logoSlot: logoSlot2,
51363
+ logoClassName,
51367
51364
  title,
51368
51365
  content,
51369
51366
  actions,
@@ -51372,7 +51369,6 @@ function HeroPanel({
51372
51369
  id,
51373
51370
  className,
51374
51371
  contentClassName,
51375
- logoClassName,
51376
51372
  titleClassName,
51377
51373
  textClassName,
51378
51374
  actionsClassName,
@@ -51444,24 +51440,18 @@ function HeroPanel({
51444
51440
  ]);
51445
51441
  const hasBackground = !!backgroundMedia && backgroundMedia.length > 0;
51446
51442
  const renderLogo = React30.useMemo(() => {
51447
- if (logoSlot2) return logoSlot2;
51448
- if (!logo) return null;
51449
- const src = resolveLogoSrc(logo);
51450
- if (!src) return null;
51451
- return /* @__PURE__ */ jsxRuntime.jsx(
51452
- img$1.Img,
51443
+ if (!logoSlot2 && !logo?.src) return null;
51444
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex justify-center", logoClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
51445
+ brand_logo_default,
51453
51446
  {
51454
- src,
51455
- alt: logo.alt,
51456
- className: cn(
51457
- "h-10 md:h-12 lg:h-14 w-auto object-contain",
51458
- logo.imgClassName,
51459
- logoClassName
51460
- ),
51447
+ logo,
51448
+ logoSlot: logoSlot2,
51449
+ size: "md",
51461
51450
  optixFlowConfig: resolvedOptixFlow
51462
51451
  }
51463
- );
51452
+ ) });
51464
51453
  }, [logoSlot2, logo, logoClassName, resolvedOptixFlow]);
51454
+ const hasLogo = !!renderLogo;
51465
51455
  const renderTitle = React30.useMemo(() => {
51466
51456
  if (title === void 0 || title === null || title === "") return null;
51467
51457
  if (typeof title === "string") {
@@ -51469,7 +51459,8 @@ function HeroPanel({
51469
51459
  "h2",
51470
51460
  {
51471
51461
  className: cn(
51472
- "text-2xl md:text-3xl lg:text-4xl font-semibold text-balance",
51462
+ "font-semibold text-balance",
51463
+ hasLogo ? "text-lg lg:text-xl" : "text-xl md:text-2xl lg:text-3xl",
51473
51464
  hasBackground && "text-white text-shadow-lg",
51474
51465
  titleClassName
51475
51466
  ),
@@ -51478,7 +51469,7 @@ function HeroPanel({
51478
51469
  );
51479
51470
  }
51480
51471
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: titleClassName, children: title });
51481
- }, [title, titleClassName, hasBackground]);
51472
+ }, [title, titleClassName, hasBackground, hasLogo]);
51482
51473
  const renderContent = React30.useMemo(() => {
51483
51474
  if (content === void 0 || content === null || content === "")
51484
51475
  return null;
@@ -51518,7 +51509,7 @@ function HeroPanel({
51518
51509
  "div",
51519
51510
  {
51520
51511
  className: cn(
51521
- "relative z-10 flex h-full w-full flex-col items-center justify-center gap-4 md:gap-6",
51512
+ "relative z-10 flex h-full w-full flex-col items-center justify-center gap-4",
51522
51513
  // Mobile padding keeps content readable when stacked.
51523
51514
  "px-6 py-12 md:px-8 md:py-12 lg:px-10",
51524
51515
  // Center content vertically; on desktop columns can be quite tall.
@@ -51736,6 +51727,7 @@ function HeroPlatformFeaturesGrid({
51736
51727
  sectionId = "hero-platform-features-grid",
51737
51728
  logo,
51738
51729
  logoSlot: logoSlot2,
51730
+ logoClassName,
51739
51731
  subtitle,
51740
51732
  description,
51741
51733
  heading,
@@ -51754,23 +51746,6 @@ function HeroPlatformFeaturesGrid({
51754
51746
  featuresClassName,
51755
51747
  optixFlowConfig
51756
51748
  }) {
51757
- const renderLogo = React30.useMemo(() => {
51758
- if (logoSlot2) return logoSlot2;
51759
- if (!logo) return null;
51760
- const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
51761
- return /* @__PURE__ */ jsxRuntime.jsx(
51762
- img$1.Img,
51763
- {
51764
- src: logoSrc,
51765
- alt: logo.alt,
51766
- className: cn(
51767
- "mx-auto mb-5 w-24 md:mb-6 md:w-28 lg:mb-7 lg:w-32",
51768
- logo.imgClassName
51769
- ),
51770
- optixFlowConfig
51771
- }
51772
- );
51773
- }, [logoSlot2, logo, optixFlowConfig]);
51774
51749
  const renderAction = React30.useMemo(() => {
51775
51750
  if (actionSlot) return actionSlot;
51776
51751
  if (!action) return null;
@@ -51835,28 +51810,35 @@ function HeroPlatformFeaturesGrid({
51835
51810
  headerClassName
51836
51811
  ),
51837
51812
  children: [
51838
- renderLogo,
51839
- subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("mb-3 text-sm tracking-widest md:text-base"), children: subtitle }) : subtitle),
51813
+ logo || logoSlot2 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex justify-center", logoClassName), children: /* @__PURE__ */ jsxRuntime.jsx(brand_logo_default, { logo, logoSlot: logoSlot2, size: "lg" }) }) : null,
51814
+ subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
51815
+ "span",
51816
+ {
51817
+ className: cn(
51818
+ "text-sm tracking-widest md:text-base opacity-50"
51819
+ ),
51820
+ children: subtitle
51821
+ }
51822
+ ) : subtitle),
51840
51823
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
51841
51824
  "h1",
51842
51825
  {
51843
51826
  className: cn(
51844
- "mt-4 text-4xl font-semibold text-balance lg:text-6xl",
51827
+ "text-4xl font-semibold text-balance lg:text-6xl",
51845
51828
  headingClassName
51846
51829
  ),
51847
51830
  children: heading
51848
51831
  }
51849
- ) : /* @__PURE__ */ jsxRuntime.jsx(
51850
- "h1",
51832
+ ) : heading),
51833
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
51834
+ "p",
51851
51835
  {
51852
51836
  className: cn(
51853
- "mt-4 text-4xl font-semibold text-balance lg:text-6xl",
51854
- headingClassName
51837
+ "mb-6 max-w-full md:max-w-md text-base md:text-lg text-balance"
51855
51838
  ),
51856
- children: heading
51839
+ children: description
51857
51840
  }
51858
- )),
51859
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-6 max-w-2xl md:text-lg text-balance"), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("max-w-2xl md:text-lg text-balance"), children: description })),
51841
+ ) : description),
51860
51842
  renderAction
51861
51843
  ]
51862
51844
  }
package/dist/registry.js CHANGED
@@ -50955,7 +50955,7 @@ function HeroLogoCenteredScreenshot({
50955
50955
  imageSlot: imageSlot2,
50956
50956
  background,
50957
50957
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
50958
- spacing = "pt-32 pb-8 md:pt-32 md:pb-32",
50958
+ spacing = "hero",
50959
50959
  pattern,
50960
50960
  patternOpacity,
50961
50961
  className,
@@ -50991,7 +50991,7 @@ function HeroLogoCenteredScreenshot({
50991
50991
  src: image.src,
50992
50992
  alt: image.alt,
50993
50993
  className: cn(
50994
- "mt-20 w-full rounded-xl object-cover h-auto shadow-xl",
50994
+ "mt-10 md:mt-20 w-full rounded-xl object-cover h-auto shadow-xl",
50995
50995
  imageClassName,
50996
50996
  image.className
50997
50997
  ),
@@ -51311,10 +51311,6 @@ function HeroAnnouncementBadge({
51311
51311
  );
51312
51312
  }
51313
51313
  var HERO_TECH_CAROUSEL_MAX_ITEMS = 4;
51314
- function resolveLogoSrc(logo) {
51315
- if (typeof logo.src === "string") return logo.src;
51316
- return logo.src?.light;
51317
- }
51318
51314
  function HeroPanel({
51319
51315
  item,
51320
51316
  defaultAutoplayIntervalMs,
@@ -51324,6 +51320,7 @@ function HeroPanel({
51324
51320
  const {
51325
51321
  logo,
51326
51322
  logoSlot: logoSlot2,
51323
+ logoClassName,
51327
51324
  title,
51328
51325
  content,
51329
51326
  actions,
@@ -51332,7 +51329,6 @@ function HeroPanel({
51332
51329
  id,
51333
51330
  className,
51334
51331
  contentClassName,
51335
- logoClassName,
51336
51332
  titleClassName,
51337
51333
  textClassName,
51338
51334
  actionsClassName,
@@ -51404,24 +51400,18 @@ function HeroPanel({
51404
51400
  ]);
51405
51401
  const hasBackground = !!backgroundMedia && backgroundMedia.length > 0;
51406
51402
  const renderLogo = useMemo(() => {
51407
- if (logoSlot2) return logoSlot2;
51408
- if (!logo) return null;
51409
- const src = resolveLogoSrc(logo);
51410
- if (!src) return null;
51411
- return /* @__PURE__ */ jsx(
51412
- Img,
51403
+ if (!logoSlot2 && !logo?.src) return null;
51404
+ return /* @__PURE__ */ jsx("div", { className: cn("flex justify-center", logoClassName), children: /* @__PURE__ */ jsx(
51405
+ brand_logo_default,
51413
51406
  {
51414
- src,
51415
- alt: logo.alt,
51416
- className: cn(
51417
- "h-10 md:h-12 lg:h-14 w-auto object-contain",
51418
- logo.imgClassName,
51419
- logoClassName
51420
- ),
51407
+ logo,
51408
+ logoSlot: logoSlot2,
51409
+ size: "md",
51421
51410
  optixFlowConfig: resolvedOptixFlow
51422
51411
  }
51423
- );
51412
+ ) });
51424
51413
  }, [logoSlot2, logo, logoClassName, resolvedOptixFlow]);
51414
+ const hasLogo = !!renderLogo;
51425
51415
  const renderTitle = useMemo(() => {
51426
51416
  if (title === void 0 || title === null || title === "") return null;
51427
51417
  if (typeof title === "string") {
@@ -51429,7 +51419,8 @@ function HeroPanel({
51429
51419
  "h2",
51430
51420
  {
51431
51421
  className: cn(
51432
- "text-2xl md:text-3xl lg:text-4xl font-semibold text-balance",
51422
+ "font-semibold text-balance",
51423
+ hasLogo ? "text-lg lg:text-xl" : "text-xl md:text-2xl lg:text-3xl",
51433
51424
  hasBackground && "text-white text-shadow-lg",
51434
51425
  titleClassName
51435
51426
  ),
@@ -51438,7 +51429,7 @@ function HeroPanel({
51438
51429
  );
51439
51430
  }
51440
51431
  return /* @__PURE__ */ jsx("div", { className: titleClassName, children: title });
51441
- }, [title, titleClassName, hasBackground]);
51432
+ }, [title, titleClassName, hasBackground, hasLogo]);
51442
51433
  const renderContent = useMemo(() => {
51443
51434
  if (content === void 0 || content === null || content === "")
51444
51435
  return null;
@@ -51478,7 +51469,7 @@ function HeroPanel({
51478
51469
  "div",
51479
51470
  {
51480
51471
  className: cn(
51481
- "relative z-10 flex h-full w-full flex-col items-center justify-center gap-4 md:gap-6",
51472
+ "relative z-10 flex h-full w-full flex-col items-center justify-center gap-4",
51482
51473
  // Mobile padding keeps content readable when stacked.
51483
51474
  "px-6 py-12 md:px-8 md:py-12 lg:px-10",
51484
51475
  // Center content vertically; on desktop columns can be quite tall.
@@ -51696,6 +51687,7 @@ function HeroPlatformFeaturesGrid({
51696
51687
  sectionId = "hero-platform-features-grid",
51697
51688
  logo,
51698
51689
  logoSlot: logoSlot2,
51690
+ logoClassName,
51699
51691
  subtitle,
51700
51692
  description,
51701
51693
  heading,
@@ -51714,23 +51706,6 @@ function HeroPlatformFeaturesGrid({
51714
51706
  featuresClassName,
51715
51707
  optixFlowConfig
51716
51708
  }) {
51717
- const renderLogo = useMemo(() => {
51718
- if (logoSlot2) return logoSlot2;
51719
- if (!logo) return null;
51720
- const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
51721
- return /* @__PURE__ */ jsx(
51722
- Img,
51723
- {
51724
- src: logoSrc,
51725
- alt: logo.alt,
51726
- className: cn(
51727
- "mx-auto mb-5 w-24 md:mb-6 md:w-28 lg:mb-7 lg:w-32",
51728
- logo.imgClassName
51729
- ),
51730
- optixFlowConfig
51731
- }
51732
- );
51733
- }, [logoSlot2, logo, optixFlowConfig]);
51734
51709
  const renderAction = useMemo(() => {
51735
51710
  if (actionSlot) return actionSlot;
51736
51711
  if (!action) return null;
@@ -51795,28 +51770,35 @@ function HeroPlatformFeaturesGrid({
51795
51770
  headerClassName
51796
51771
  ),
51797
51772
  children: [
51798
- renderLogo,
51799
- subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsx("span", { className: cn("mb-3 text-sm tracking-widest md:text-base"), children: subtitle }) : subtitle),
51773
+ logo || logoSlot2 ? /* @__PURE__ */ jsx("div", { className: cn("flex justify-center", logoClassName), children: /* @__PURE__ */ jsx(brand_logo_default, { logo, logoSlot: logoSlot2, size: "lg" }) }) : null,
51774
+ subtitle && (typeof subtitle === "string" ? /* @__PURE__ */ jsx(
51775
+ "span",
51776
+ {
51777
+ className: cn(
51778
+ "text-sm tracking-widest md:text-base opacity-50"
51779
+ ),
51780
+ children: subtitle
51781
+ }
51782
+ ) : subtitle),
51800
51783
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
51801
51784
  "h1",
51802
51785
  {
51803
51786
  className: cn(
51804
- "mt-4 text-4xl font-semibold text-balance lg:text-6xl",
51787
+ "text-4xl font-semibold text-balance lg:text-6xl",
51805
51788
  headingClassName
51806
51789
  ),
51807
51790
  children: heading
51808
51791
  }
51809
- ) : /* @__PURE__ */ jsx(
51810
- "h1",
51792
+ ) : heading),
51793
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
51794
+ "p",
51811
51795
  {
51812
51796
  className: cn(
51813
- "mt-4 text-4xl font-semibold text-balance lg:text-6xl",
51814
- headingClassName
51797
+ "mb-6 max-w-full md:max-w-md text-base md:text-lg text-balance"
51815
51798
  ),
51816
- children: heading
51799
+ children: description
51817
51800
  }
51818
- )),
51819
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mb-6 max-w-2xl md:text-lg text-balance"), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("max-w-2xl md:text-lg text-balance"), children: description })),
51801
+ ) : description),
51820
51802
  renderAction
51821
51803
  ]
51822
51804
  }
@@ -77,6 +77,6 @@ interface SocialLinkIconProps extends Omit<PressableProps, "children">, SocialLi
77
77
  * />
78
78
  * ```
79
79
  */
80
- declare const SocialLinkIcon: React.ForwardRefExoticComponent<SocialLinkIconProps & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement | HTMLSpanElement>>;
80
+ declare const SocialLinkIcon: React.ForwardRefExoticComponent<SocialLinkIconProps & React.RefAttributes<HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement>>;
81
81
 
82
82
  export { SocialLinkIcon, type SocialLinkIconDynamicIconProps, type SocialLinkIconProps };
@@ -77,6 +77,6 @@ interface SocialLinkIconProps extends Omit<PressableProps, "children">, SocialLi
77
77
  * />
78
78
  * ```
79
79
  */
80
- declare const SocialLinkIcon: React.ForwardRefExoticComponent<SocialLinkIconProps & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement | HTMLSpanElement>>;
80
+ declare const SocialLinkIcon: React.ForwardRefExoticComponent<SocialLinkIconProps & React.RefAttributes<HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement>>;
81
81
 
82
82
  export { SocialLinkIcon, type SocialLinkIconDynamicIconProps, type SocialLinkIconProps };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opensite/ui",
3
- "version": "3.7.0",
3
+ "version": "3.7.2",
4
4
  "description": "Foundational UI component library for OpenSite Semantic Site Builder with tree-shakable exports and abstract styling",
5
5
  "keywords": [
6
6
  "react",