@opensite/ui 3.6.9 → 3.7.1

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.
package/dist/badge.d.cts CHANGED
@@ -4,7 +4,7 @@ import * as React from 'react';
4
4
  import { VariantProps } from 'class-variance-authority';
5
5
 
6
6
  declare const badgeVariants: (props?: ({
7
- variant?: "default" | "secondary" | "destructive" | "outline" | null | undefined;
7
+ variant?: "outline" | "default" | "secondary" | "destructive" | null | undefined;
8
8
  } & class_variance_authority_types.ClassProp) | undefined) => string;
9
9
  declare function Badge({ className, variant, asChild, ...props }: React.ComponentProps<"span"> & VariantProps<typeof badgeVariants> & {
10
10
  asChild?: boolean;
package/dist/badge.d.ts CHANGED
@@ -4,7 +4,7 @@ import * as React from 'react';
4
4
  import { VariantProps } from 'class-variance-authority';
5
5
 
6
6
  declare const badgeVariants: (props?: ({
7
- variant?: "default" | "secondary" | "destructive" | "outline" | null | undefined;
7
+ variant?: "outline" | "default" | "secondary" | "destructive" | null | undefined;
8
8
  } & class_variance_authority_types.ClassProp) | undefined) => string;
9
9
  declare function Badge({ className, variant, asChild, ...props }: React.ComponentProps<"span"> & VariantProps<typeof badgeVariants> & {
10
10
  asChild?: boolean;
@@ -623,7 +623,16 @@ function HeroDashedBorderFeatures({
623
623
  ),
624
624
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-3xl", children: [
625
625
  renderAnnouncement,
626
- (logo || logoSlot) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("my-6 flex justify-center", logoClassName), children: /* @__PURE__ */ jsxRuntime.jsx(BrandLogo, { logo, logoSlot, size: "lg" }) }),
626
+ (logo || logoSlot) && /* @__PURE__ */ jsxRuntime.jsx(
627
+ "div",
628
+ {
629
+ className: cn(
630
+ "mt-8 md:mt-16 mb-0 flex justify-center",
631
+ logoClassName
632
+ ),
633
+ children: /* @__PURE__ */ jsxRuntime.jsx(BrandLogo, { logo, logoSlot, size: "lg" })
634
+ }
635
+ ),
627
636
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
628
637
  "h1",
629
638
  {
@@ -602,7 +602,16 @@ function HeroDashedBorderFeatures({
602
602
  ),
603
603
  children: /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-3xl", children: [
604
604
  renderAnnouncement,
605
- (logo || logoSlot) && /* @__PURE__ */ jsx("div", { className: cn("my-6 flex justify-center", logoClassName), children: /* @__PURE__ */ jsx(BrandLogo, { logo, logoSlot, size: "lg" }) }),
605
+ (logo || logoSlot) && /* @__PURE__ */ jsx(
606
+ "div",
607
+ {
608
+ className: cn(
609
+ "mt-8 md:mt-16 mb-0 flex justify-center",
610
+ logoClassName
611
+ ),
612
+ children: /* @__PURE__ */ jsx(BrandLogo, { logo, logoSlot, size: "lg" })
613
+ }
614
+ ),
606
615
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
607
616
  "h1",
608
617
  {
@@ -794,7 +794,7 @@ function HeroDesignCarouselPortfolio({
794
794
  "div",
795
795
  {
796
796
  className: cn(
797
- "flex flex-col gap-10 pt-12 pb-8 lg:pt-24 lg:pb-12",
797
+ "flex flex-col gap-10 pt-12 pb-8 lg:pt-12 lg:pb-12",
798
798
  contentClassName
799
799
  ),
800
800
  children: [
@@ -768,7 +768,7 @@ function HeroDesignCarouselPortfolio({
768
768
  "div",
769
769
  {
770
770
  className: cn(
771
- "flex flex-col gap-10 pt-12 pb-8 lg:pt-24 lg:pb-12",
771
+ "flex flex-col gap-10 pt-12 pb-8 lg:pt-12 lg:pb-12",
772
772
  contentClassName
773
773
  ),
774
774
  children: [
@@ -392,10 +392,53 @@ var Section = React__default.default.forwardRef(
392
392
  }
393
393
  );
394
394
  Section.displayName = "Section";
395
+ var SIZE_CLASSES = {
396
+ sm: "max-h-6 sm:max-h-7",
397
+ md: "max-h-8 sm:max-h-9 lg:max-h-10",
398
+ lg: "max-h-10 sm:max-h-12 lg:max-h-14",
399
+ xl: "max-h-12 sm:max-h-14 lg:max-h-16"
400
+ };
401
+ var BrandLogo = ({
402
+ logo,
403
+ logoSlot,
404
+ logoClassName,
405
+ size = "md",
406
+ optixFlowConfig
407
+ }) => {
408
+ if (logoSlot) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: logoSlot });
409
+ if (!logo || !logo.src) return null;
410
+ const imgElement = /* @__PURE__ */ jsxRuntime.jsx(
411
+ img.Img,
412
+ {
413
+ src: logo.src,
414
+ className: cn(
415
+ "w-auto object-contain",
416
+ SIZE_CLASSES[size],
417
+ logo.className
418
+ ),
419
+ alt: logo.alt || "Logo",
420
+ optixFlowConfig,
421
+ loading: "eager"
422
+ }
423
+ );
424
+ if (logo.url) {
425
+ return /* @__PURE__ */ jsxRuntime.jsx(
426
+ pressable.Pressable,
427
+ {
428
+ href: logo.url,
429
+ className: cn("flex items-center", logoClassName),
430
+ children: imgElement
431
+ }
432
+ );
433
+ }
434
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex items-center", logoClassName), children: imgElement });
435
+ };
436
+ var brand_logo_default = BrandLogo;
395
437
  function HeroLogoCenteredScreenshot({
396
438
  sectionId = "hero-logo-centered-screenshot",
397
439
  logo,
398
440
  logoSlot,
441
+ logoClassName,
399
442
  heading,
400
443
  description,
401
444
  action,
@@ -414,20 +457,6 @@ function HeroLogoCenteredScreenshot({
414
457
  imageClassName,
415
458
  optixFlowConfig
416
459
  }) {
417
- const renderLogo = React.useMemo(() => {
418
- if (logoSlot) return logoSlot;
419
- if (!logo) return null;
420
- const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
421
- return /* @__PURE__ */ jsxRuntime.jsx(
422
- img.Img,
423
- {
424
- src: logoSrc,
425
- alt: logo.alt,
426
- className: cn("h-10 md:h-16 object-contain", logo.className),
427
- optixFlowConfig
428
- }
429
- );
430
- }, [logoSlot, logo, optixFlowConfig]);
431
460
  const renderAction = React.useMemo(() => {
432
461
  if (actionSlot) return actionSlot;
433
462
  if (!action) return null;
@@ -470,9 +499,10 @@ function HeroLogoCenteredScreenshot({
470
499
  spacing,
471
500
  pattern,
472
501
  patternOpacity,
473
- className: cn(className),
474
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("container max-w-7xl", containerClassName), children: [
475
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto flex max-w-5xl flex-col items-center", children: /* @__PURE__ */ jsxRuntime.jsxs(
502
+ className,
503
+ containerClassName,
504
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
505
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto flex max-w-full md:max-w-5xl flex-col items-center", children: /* @__PURE__ */ jsxRuntime.jsxs(
476
506
  "div",
477
507
  {
478
508
  className: cn(
@@ -480,7 +510,7 @@ function HeroLogoCenteredScreenshot({
480
510
  contentClassName
481
511
  ),
482
512
  children: [
483
- renderLogo,
513
+ (logo || logoSlot) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex justify-center", logoClassName), children: /* @__PURE__ */ jsxRuntime.jsx(brand_logo_default, { logo, logoSlot, size: "lg" }) }),
484
514
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col justify-center items-center w-full text-balance", children: [
485
515
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
486
516
  "h1",
@@ -491,33 +521,24 @@ function HeroLogoCenteredScreenshot({
491
521
  ),
492
522
  children: heading
493
523
  }
494
- ) : /* @__PURE__ */ jsxRuntime.jsx(
495
- "h1",
496
- {
497
- className: cn(
498
- "mb-4 text-3xl font-medium lg:text-5xl",
499
- headingClassName
500
- ),
501
- children: heading
502
- }
503
- )),
524
+ ) : heading),
504
525
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
505
526
  "p",
506
527
  {
507
528
  className: cn(
508
- "max-w-3xl lg:text-xl",
529
+ "max-w-full md:max-w-3xl lg:text-xl",
509
530
  descriptionClassName
510
531
  ),
511
532
  children: description
512
533
  }
513
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description }))
534
+ ) : description)
514
535
  ] }),
515
536
  renderAction
516
537
  ]
517
538
  }
518
539
  ) }),
519
540
  renderImage
520
- ] }) })
541
+ ] })
521
542
  }
522
543
  );
523
544
  }
@@ -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, I as ImageItem, O as OptixFlowConfig } from './blocks-DyouPohq.cjs';
3
+ import { L as LogoConfig } from './types-mWZcgKth.cjs';
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';
8
11
 
9
12
  interface HeroLogoCenteredScreenshotProps {
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
  * Main heading content
20
28
  */
@@ -85,6 +93,6 @@ interface HeroLogoCenteredScreenshotProps {
85
93
  /** Optional Section ID */
86
94
  sectionId?: string;
87
95
  }
88
- declare function HeroLogoCenteredScreenshot({ sectionId, logo, logoSlot, heading, description, action, actionSlot, image, imageSlot, background, containerClassName, spacing, pattern, patternOpacity, className, contentClassName, headingClassName, descriptionClassName, imageClassName, optixFlowConfig, }: HeroLogoCenteredScreenshotProps): React.JSX.Element;
96
+ declare function HeroLogoCenteredScreenshot({ sectionId, logo, logoSlot, logoClassName, heading, description, action, actionSlot, image, imageSlot, background, containerClassName, spacing, pattern, patternOpacity, className, contentClassName, headingClassName, descriptionClassName, imageClassName, optixFlowConfig, }: HeroLogoCenteredScreenshotProps): React.JSX.Element;
89
97
 
90
98
  export { HeroLogoCenteredScreenshot, type HeroLogoCenteredScreenshotProps };
@@ -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, I as ImageItem, O as OptixFlowConfig } from './blocks-DyouPohq.js';
3
+ import { L as LogoConfig } from './types-hJ2R0GoH.js';
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';
8
11
 
9
12
  interface HeroLogoCenteredScreenshotProps {
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
  * Main heading content
20
28
  */
@@ -85,6 +93,6 @@ interface HeroLogoCenteredScreenshotProps {
85
93
  /** Optional Section ID */
86
94
  sectionId?: string;
87
95
  }
88
- declare function HeroLogoCenteredScreenshot({ sectionId, logo, logoSlot, heading, description, action, actionSlot, image, imageSlot, background, containerClassName, spacing, pattern, patternOpacity, className, contentClassName, headingClassName, descriptionClassName, imageClassName, optixFlowConfig, }: HeroLogoCenteredScreenshotProps): React.JSX.Element;
96
+ declare function HeroLogoCenteredScreenshot({ sectionId, logo, logoSlot, logoClassName, heading, description, action, actionSlot, image, imageSlot, background, containerClassName, spacing, pattern, patternOpacity, className, contentClassName, headingClassName, descriptionClassName, imageClassName, optixFlowConfig, }: HeroLogoCenteredScreenshotProps): React.JSX.Element;
89
97
 
90
98
  export { HeroLogoCenteredScreenshot, type HeroLogoCenteredScreenshotProps };
@@ -386,10 +386,53 @@ var Section = React.forwardRef(
386
386
  }
387
387
  );
388
388
  Section.displayName = "Section";
389
+ var SIZE_CLASSES = {
390
+ sm: "max-h-6 sm:max-h-7",
391
+ md: "max-h-8 sm:max-h-9 lg:max-h-10",
392
+ lg: "max-h-10 sm:max-h-12 lg:max-h-14",
393
+ xl: "max-h-12 sm:max-h-14 lg:max-h-16"
394
+ };
395
+ var BrandLogo = ({
396
+ logo,
397
+ logoSlot,
398
+ logoClassName,
399
+ size = "md",
400
+ optixFlowConfig
401
+ }) => {
402
+ if (logoSlot) return /* @__PURE__ */ jsx(Fragment, { children: logoSlot });
403
+ if (!logo || !logo.src) return null;
404
+ const imgElement = /* @__PURE__ */ jsx(
405
+ Img,
406
+ {
407
+ src: logo.src,
408
+ className: cn(
409
+ "w-auto object-contain",
410
+ SIZE_CLASSES[size],
411
+ logo.className
412
+ ),
413
+ alt: logo.alt || "Logo",
414
+ optixFlowConfig,
415
+ loading: "eager"
416
+ }
417
+ );
418
+ if (logo.url) {
419
+ return /* @__PURE__ */ jsx(
420
+ Pressable,
421
+ {
422
+ href: logo.url,
423
+ className: cn("flex items-center", logoClassName),
424
+ children: imgElement
425
+ }
426
+ );
427
+ }
428
+ return /* @__PURE__ */ jsx("div", { className: cn("flex items-center", logoClassName), children: imgElement });
429
+ };
430
+ var brand_logo_default = BrandLogo;
389
431
  function HeroLogoCenteredScreenshot({
390
432
  sectionId = "hero-logo-centered-screenshot",
391
433
  logo,
392
434
  logoSlot,
435
+ logoClassName,
393
436
  heading,
394
437
  description,
395
438
  action,
@@ -408,20 +451,6 @@ function HeroLogoCenteredScreenshot({
408
451
  imageClassName,
409
452
  optixFlowConfig
410
453
  }) {
411
- const renderLogo = useMemo(() => {
412
- if (logoSlot) return logoSlot;
413
- if (!logo) return null;
414
- const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
415
- return /* @__PURE__ */ jsx(
416
- Img,
417
- {
418
- src: logoSrc,
419
- alt: logo.alt,
420
- className: cn("h-10 md:h-16 object-contain", logo.className),
421
- optixFlowConfig
422
- }
423
- );
424
- }, [logoSlot, logo, optixFlowConfig]);
425
454
  const renderAction = useMemo(() => {
426
455
  if (actionSlot) return actionSlot;
427
456
  if (!action) return null;
@@ -464,9 +493,10 @@ function HeroLogoCenteredScreenshot({
464
493
  spacing,
465
494
  pattern,
466
495
  patternOpacity,
467
- className: cn(className),
468
- children: /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs("div", { className: cn("container max-w-7xl", containerClassName), children: [
469
- /* @__PURE__ */ jsx("div", { className: "mx-auto flex max-w-5xl flex-col items-center", children: /* @__PURE__ */ jsxs(
496
+ className,
497
+ containerClassName,
498
+ children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
499
+ /* @__PURE__ */ jsx("div", { className: "mx-auto flex max-w-full md:max-w-5xl flex-col items-center", children: /* @__PURE__ */ jsxs(
470
500
  "div",
471
501
  {
472
502
  className: cn(
@@ -474,7 +504,7 @@ function HeroLogoCenteredScreenshot({
474
504
  contentClassName
475
505
  ),
476
506
  children: [
477
- renderLogo,
507
+ (logo || logoSlot) && /* @__PURE__ */ jsx("div", { className: cn("flex justify-center", logoClassName), children: /* @__PURE__ */ jsx(brand_logo_default, { logo, logoSlot, size: "lg" }) }),
478
508
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col justify-center items-center w-full text-balance", children: [
479
509
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
480
510
  "h1",
@@ -485,33 +515,24 @@ function HeroLogoCenteredScreenshot({
485
515
  ),
486
516
  children: heading
487
517
  }
488
- ) : /* @__PURE__ */ jsx(
489
- "h1",
490
- {
491
- className: cn(
492
- "mb-4 text-3xl font-medium lg:text-5xl",
493
- headingClassName
494
- ),
495
- children: heading
496
- }
497
- )),
518
+ ) : heading),
498
519
  description && (typeof description === "string" ? /* @__PURE__ */ jsx(
499
520
  "p",
500
521
  {
501
522
  className: cn(
502
- "max-w-3xl lg:text-xl",
523
+ "max-w-full md:max-w-3xl lg:text-xl",
503
524
  descriptionClassName
504
525
  ),
505
526
  children: description
506
527
  }
507
- ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
528
+ ) : description)
508
529
  ] }),
509
530
  renderAction
510
531
  ]
511
532
  }
512
533
  ) }),
513
534
  renderImage
514
- ] }) })
535
+ ] })
515
536
  }
516
537
  );
517
538
  }
@@ -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 };