@opensite/ui 3.5.8 → 3.6.0

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/registry.cjs CHANGED
@@ -3610,13 +3610,13 @@ function isThemedLogo(logo) {
3610
3610
  }
3611
3611
  var FooterLogo = ({
3612
3612
  logo,
3613
- logoSlot,
3613
+ logoSlot: logoSlot2,
3614
3614
  logoClassName,
3615
3615
  logoImageClassName,
3616
3616
  logoTitleClassName,
3617
3617
  optixFlowConfig
3618
3618
  }) => {
3619
- if (logoSlot) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: logoSlot });
3619
+ if (logoSlot2) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: logoSlot2 });
3620
3620
  if (!logo) return null;
3621
3621
  const hasThemedSources = isThemedLogo(logo) && (logo.light || logo.dark);
3622
3622
  const hasStandardSource = !isThemedLogo(logo) && logo.src;
@@ -22462,7 +22462,7 @@ function FeatureSplitImage({
22462
22462
  description,
22463
22463
  imageSrc,
22464
22464
  imageAlt,
22465
- imageSlot,
22465
+ imageSlot: imageSlot2,
22466
22466
  actions,
22467
22467
  actionsSlot,
22468
22468
  className,
@@ -22509,7 +22509,7 @@ function FeatureSplitImage({
22509
22509
  });
22510
22510
  }, [actionsSlot, actions]);
22511
22511
  const imageContent = React30.useMemo(() => {
22512
- if (imageSlot) return imageSlot;
22512
+ if (imageSlot2) return imageSlot2;
22513
22513
  if (!imageSrc) return null;
22514
22514
  return /* @__PURE__ */ jsxRuntime.jsx(
22515
22515
  img.Img,
@@ -22524,7 +22524,7 @@ function FeatureSplitImage({
22524
22524
  optixFlowConfig
22525
22525
  }
22526
22526
  );
22527
- }, [imageSlot, imageSrc, imageAlt, imageClassName, optixFlowConfig]);
22527
+ }, [imageSlot2, imageSrc, imageAlt, imageClassName, optixFlowConfig]);
22528
22528
  return /* @__PURE__ */ jsxRuntime.jsx(
22529
22529
  Section,
22530
22530
  {
@@ -22613,7 +22613,7 @@ function FeatureSplitImageReverse({
22613
22613
  description,
22614
22614
  imageSrc,
22615
22615
  imageAlt,
22616
- imageSlot,
22616
+ imageSlot: imageSlot2,
22617
22617
  actions,
22618
22618
  actionsSlot,
22619
22619
  className,
@@ -22660,7 +22660,7 @@ function FeatureSplitImageReverse({
22660
22660
  });
22661
22661
  }, [actionsSlot, actions]);
22662
22662
  const imageContent = React30.useMemo(() => {
22663
- if (imageSlot) return imageSlot;
22663
+ if (imageSlot2) return imageSlot2;
22664
22664
  if (!imageSrc) return null;
22665
22665
  return /* @__PURE__ */ jsxRuntime.jsx(
22666
22666
  img.Img,
@@ -22675,7 +22675,7 @@ function FeatureSplitImageReverse({
22675
22675
  optixFlowConfig
22676
22676
  }
22677
22677
  );
22678
- }, [imageSlot, imageSrc, imageAlt, imageClassName, optixFlowConfig]);
22678
+ }, [imageSlot2, imageSrc, imageAlt, imageClassName, optixFlowConfig]);
22679
22679
  return /* @__PURE__ */ jsxRuntime.jsx(
22680
22680
  Section,
22681
22681
  {
@@ -22910,7 +22910,7 @@ function FeatureChecklistImage({
22910
22910
  descriptionClassName,
22911
22911
  imageSrc,
22912
22912
  imageAlt,
22913
- imageSlot,
22913
+ imageSlot: imageSlot2,
22914
22914
  actions,
22915
22915
  actionsSlot,
22916
22916
  checklistItems,
@@ -22971,7 +22971,7 @@ function FeatureChecklistImage({
22971
22971
  });
22972
22972
  }, [actionsSlot, actions]);
22973
22973
  const imageContent = React30.useMemo(() => {
22974
- if (imageSlot) return imageSlot;
22974
+ if (imageSlot2) return imageSlot2;
22975
22975
  if (!imageSrc) return null;
22976
22976
  return /* @__PURE__ */ jsxRuntime.jsx(
22977
22977
  "div",
@@ -22995,7 +22995,7 @@ function FeatureChecklistImage({
22995
22995
  )
22996
22996
  }
22997
22997
  );
22998
- }, [imageSlot, imageSrc, imageAlt, imageClassName, optixFlowConfig]);
22998
+ }, [imageSlot2, imageSrc, imageAlt, imageClassName, optixFlowConfig]);
22999
22999
  const checklistContent = React30.useMemo(() => {
23000
23000
  if (checklistSlot) return checklistSlot;
23001
23001
  const items = checklistItems ?? benefits;
@@ -25968,7 +25968,7 @@ function FeatureImageOverlayBadge({
25968
25968
  actionsSlot,
25969
25969
  imageSrc,
25970
25970
  imageAlt,
25971
- imageSlot,
25971
+ imageSlot: imageSlot2,
25972
25972
  avatarSrc,
25973
25973
  avatarBadgeText,
25974
25974
  overlayTitle,
@@ -26036,7 +26036,7 @@ function FeatureImageOverlayBadge({
26036
26036
  });
26037
26037
  }, [actionsSlot, actions]);
26038
26038
  const imageContent = React30.useMemo(() => {
26039
- if (imageSlot) return imageSlot;
26039
+ if (imageSlot2) return imageSlot2;
26040
26040
  if (imageSrc) {
26041
26041
  return /* @__PURE__ */ jsxRuntime.jsx(
26042
26042
  img.Img,
@@ -26053,7 +26053,7 @@ function FeatureImageOverlayBadge({
26053
26053
  );
26054
26054
  }
26055
26055
  return null;
26056
- }, [imageSlot, imageSrc, imageAlt, imageClassName, optixFlowConfig]);
26056
+ }, [imageSlot2, imageSrc, imageAlt, imageClassName, optixFlowConfig]);
26057
26057
  return /* @__PURE__ */ jsxRuntime.jsx(
26058
26058
  Section,
26059
26059
  {
@@ -50909,13 +50909,13 @@ function HeroPatternBadgeLogos({
50909
50909
  function HeroLogoCenteredScreenshot({
50910
50910
  sectionId = "hero-logo-centered-screenshot",
50911
50911
  logo,
50912
- logoSlot,
50912
+ logoSlot: logoSlot2,
50913
50913
  heading,
50914
50914
  description,
50915
50915
  action,
50916
50916
  actionSlot,
50917
50917
  image,
50918
- imageSlot,
50918
+ imageSlot: imageSlot2,
50919
50919
  background,
50920
50920
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
50921
50921
  spacing = "pt-32 pb-8 md:pt-32 md:pb-32",
@@ -50929,7 +50929,7 @@ function HeroLogoCenteredScreenshot({
50929
50929
  optixFlowConfig
50930
50930
  }) {
50931
50931
  const renderLogo = React30.useMemo(() => {
50932
- if (logoSlot) return logoSlot;
50932
+ if (logoSlot2) return logoSlot2;
50933
50933
  if (!logo) return null;
50934
50934
  const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
50935
50935
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -50941,7 +50941,7 @@ function HeroLogoCenteredScreenshot({
50941
50941
  optixFlowConfig
50942
50942
  }
50943
50943
  );
50944
- }, [logoSlot, logo, optixFlowConfig]);
50944
+ }, [logoSlot2, logo, optixFlowConfig]);
50945
50945
  const renderAction = React30.useMemo(() => {
50946
50946
  if (actionSlot) return actionSlot;
50947
50947
  if (!action) return null;
@@ -50960,7 +50960,7 @@ function HeroLogoCenteredScreenshot({
50960
50960
  ] }) });
50961
50961
  }, [actionSlot, action]);
50962
50962
  const renderImage = React30.useMemo(() => {
50963
- if (imageSlot) return imageSlot;
50963
+ if (imageSlot2) return imageSlot2;
50964
50964
  if (!image) return null;
50965
50965
  return /* @__PURE__ */ jsxRuntime.jsx(
50966
50966
  img.Img,
@@ -50975,7 +50975,7 @@ function HeroLogoCenteredScreenshot({
50975
50975
  optixFlowConfig
50976
50976
  }
50977
50977
  );
50978
- }, [imageSlot, image, imageClassName, optixFlowConfig]);
50978
+ }, [imageSlot2, image, imageClassName, optixFlowConfig]);
50979
50979
  return /* @__PURE__ */ jsxRuntime.jsx(
50980
50980
  Section,
50981
50981
  {
@@ -51038,7 +51038,7 @@ function HeroLogoCenteredScreenshot({
51038
51038
  function HeroPatternLogoTechStack({
51039
51039
  sectionId = "hero-pattern-logo-tech-stack",
51040
51040
  logo,
51041
- logoSlot,
51041
+ logoSlot: logoSlot2,
51042
51042
  heading,
51043
51043
  highlightedWord,
51044
51044
  description,
@@ -51061,7 +51061,7 @@ function HeroPatternLogoTechStack({
51061
51061
  optixFlowConfig
51062
51062
  }) {
51063
51063
  const renderLogo = React30.useMemo(() => {
51064
- if (logoSlot) return logoSlot;
51064
+ if (logoSlot2) return logoSlot2;
51065
51065
  if (!logo) return null;
51066
51066
  const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
51067
51067
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -51073,7 +51073,7 @@ function HeroPatternLogoTechStack({
51073
51073
  optixFlowConfig
51074
51074
  }
51075
51075
  ) });
51076
- }, [logoSlot, logo, optixFlowConfig]);
51076
+ }, [logoSlot2, logo, optixFlowConfig]);
51077
51077
  const renderActions = React30.useMemo(() => {
51078
51078
  if (actionsSlot) return actionsSlot;
51079
51079
  if (!actions || actions.length === 0) return null;
@@ -51308,7 +51308,7 @@ function HeroPanel({
51308
51308
  }) {
51309
51309
  const {
51310
51310
  logo,
51311
- logoSlot,
51311
+ logoSlot: logoSlot2,
51312
51312
  title,
51313
51313
  content,
51314
51314
  actions,
@@ -51389,7 +51389,7 @@ function HeroPanel({
51389
51389
  ]);
51390
51390
  const hasBackground = !!backgroundMedia && backgroundMedia.length > 0;
51391
51391
  const renderLogo = React30.useMemo(() => {
51392
- if (logoSlot) return logoSlot;
51392
+ if (logoSlot2) return logoSlot2;
51393
51393
  if (!logo) return null;
51394
51394
  const src = resolveLogoSrc(logo);
51395
51395
  if (!src) return null;
@@ -51406,7 +51406,7 @@ function HeroPanel({
51406
51406
  optixFlowConfig: resolvedOptixFlow
51407
51407
  }
51408
51408
  );
51409
- }, [logoSlot, logo, logoClassName, resolvedOptixFlow]);
51409
+ }, [logoSlot2, logo, logoClassName, resolvedOptixFlow]);
51410
51410
  const renderTitle = React30.useMemo(() => {
51411
51411
  if (title === void 0 || title === null || title === "") return null;
51412
51412
  if (typeof title === "string") {
@@ -51680,7 +51680,7 @@ function HeroSimpleCenteredImage({
51680
51680
  function HeroPlatformFeaturesGrid({
51681
51681
  sectionId = "hero-platform-features-grid",
51682
51682
  logo,
51683
- logoSlot,
51683
+ logoSlot: logoSlot2,
51684
51684
  subtitle,
51685
51685
  description,
51686
51686
  heading,
@@ -51700,7 +51700,7 @@ function HeroPlatformFeaturesGrid({
51700
51700
  optixFlowConfig
51701
51701
  }) {
51702
51702
  const renderLogo = React30.useMemo(() => {
51703
- if (logoSlot) return logoSlot;
51703
+ if (logoSlot2) return logoSlot2;
51704
51704
  if (!logo) return null;
51705
51705
  const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
51706
51706
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -51715,7 +51715,7 @@ function HeroPlatformFeaturesGrid({
51715
51715
  optixFlowConfig
51716
51716
  }
51717
51717
  );
51718
- }, [logoSlot, logo, optixFlowConfig]);
51718
+ }, [logoSlot2, logo, optixFlowConfig]);
51719
51719
  const renderAction = React30.useMemo(() => {
51720
51720
  if (actionSlot) return actionSlot;
51721
51721
  if (!action) return null;
@@ -53178,7 +53178,7 @@ function HeroDashedBorderFeatures({
53178
53178
  function HeroDesignCarouselPortfolio({
53179
53179
  sectionId = "hero-design-carousel-portfolio",
53180
53180
  logo,
53181
- logoSlot,
53181
+ logoSlot: logoSlot2,
53182
53182
  features,
53183
53183
  featuresSlot,
53184
53184
  heading,
@@ -53202,7 +53202,7 @@ function HeroDesignCarouselPortfolio({
53202
53202
  optixFlowConfig
53203
53203
  }) {
53204
53204
  const renderLogo = React30.useMemo(() => {
53205
- if (logoSlot) return logoSlot;
53205
+ if (logoSlot2) return logoSlot2;
53206
53206
  if (!logo) return null;
53207
53207
  const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
53208
53208
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -53214,7 +53214,7 @@ function HeroDesignCarouselPortfolio({
53214
53214
  optixFlowConfig
53215
53215
  }
53216
53216
  );
53217
- }, [logoSlot, logo, optixFlowConfig]);
53217
+ }, [logoSlot2, logo, optixFlowConfig]);
53218
53218
  const renderFeatures = React30.useMemo(() => {
53219
53219
  if (featuresSlot) return featuresSlot;
53220
53220
  if (!features || features.length === 0) return null;
@@ -53338,7 +53338,7 @@ function HeroGradientClientFocused({
53338
53338
  actions,
53339
53339
  actionsSlot,
53340
53340
  image,
53341
- imageSlot,
53341
+ imageSlot: imageSlot2,
53342
53342
  background,
53343
53343
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
53344
53344
  spacing = "xl",
@@ -53352,7 +53352,7 @@ function HeroGradientClientFocused({
53352
53352
  optixFlowConfig
53353
53353
  }) {
53354
53354
  const renderImage = React30.useMemo(() => {
53355
- if (imageSlot) return imageSlot;
53355
+ if (imageSlot2) return imageSlot2;
53356
53356
  if (!image) return null;
53357
53357
  return /* @__PURE__ */ jsxRuntime.jsx(
53358
53358
  img.Img,
@@ -53367,7 +53367,7 @@ function HeroGradientClientFocused({
53367
53367
  optixFlowConfig
53368
53368
  }
53369
53369
  );
53370
- }, [imageSlot, image, imageClassName, optixFlowConfig]);
53370
+ }, [imageSlot2, image, imageClassName, optixFlowConfig]);
53371
53371
  return /* @__PURE__ */ jsxRuntime.jsx(
53372
53372
  Section,
53373
53373
  {
@@ -53434,7 +53434,7 @@ function HeroPremiumSplitAvatars({
53434
53434
  avatarsSlot,
53435
53435
  socialProofText,
53436
53436
  image,
53437
- imageSlot,
53437
+ imageSlot: imageSlot2,
53438
53438
  className,
53439
53439
  spacing = "hero",
53440
53440
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
@@ -53498,7 +53498,7 @@ function HeroPremiumSplitAvatars({
53498
53498
  ] });
53499
53499
  }, [avatarsSlot, avatars, socialProofText]);
53500
53500
  const renderImage = React30.useMemo(() => {
53501
- if (imageSlot) return imageSlot;
53501
+ if (imageSlot2) return imageSlot2;
53502
53502
  if (!image) return null;
53503
53503
  return /* @__PURE__ */ jsxRuntime.jsx(
53504
53504
  MediaAspectRatio,
@@ -53520,7 +53520,7 @@ function HeroPremiumSplitAvatars({
53520
53520
  }
53521
53521
  );
53522
53522
  }, [
53523
- imageSlot,
53523
+ imageSlot2,
53524
53524
  image,
53525
53525
  imageClassName,
53526
53526
  optixFlowConfig,
@@ -53572,14 +53572,14 @@ function HeroPremiumSplitAvatars({
53572
53572
  function HeroUiLibraryShowcase({
53573
53573
  sectionId = "hero-ui-library-showcase",
53574
53574
  logo,
53575
- logoSlot,
53575
+ logoSlot: logoSlot2,
53576
53576
  heading,
53577
53577
  description,
53578
53578
  actions,
53579
53579
  actionsSlot,
53580
53580
  actionsClassName,
53581
53581
  image,
53582
- imageSlot,
53582
+ imageSlot: imageSlot2,
53583
53583
  background,
53584
53584
  pattern,
53585
53585
  patternOpacity,
@@ -53593,7 +53593,7 @@ function HeroUiLibraryShowcase({
53593
53593
  optixFlowConfig
53594
53594
  }) {
53595
53595
  const renderLogo = React30.useMemo(() => {
53596
- if (logoSlot) return logoSlot;
53596
+ if (logoSlot2) return logoSlot2;
53597
53597
  if (!logo) return null;
53598
53598
  return /* @__PURE__ */ jsxRuntime.jsx(
53599
53599
  img.Img,
@@ -53604,9 +53604,9 @@ function HeroUiLibraryShowcase({
53604
53604
  optixFlowConfig
53605
53605
  }
53606
53606
  );
53607
- }, [logoSlot, logo, optixFlowConfig]);
53607
+ }, [logoSlot2, logo, optixFlowConfig]);
53608
53608
  const renderImage = React30.useMemo(() => {
53609
- if (imageSlot) return imageSlot;
53609
+ if (imageSlot2) return imageSlot2;
53610
53610
  if (!image) return null;
53611
53611
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full overflow-hidden rounded-2xl shadow-xl mt-12 md:mt-20", children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 1.916786227 / 1, children: /* @__PURE__ */ jsxRuntime.jsx(
53612
53612
  img.Img,
@@ -53621,7 +53621,7 @@ function HeroUiLibraryShowcase({
53621
53621
  optixFlowConfig
53622
53622
  }
53623
53623
  ) }) });
53624
- }, [imageSlot, image, imageClassName, optixFlowConfig]);
53624
+ }, [imageSlot2, image, imageClassName, optixFlowConfig]);
53625
53625
  return /* @__PURE__ */ jsxRuntime.jsxs(
53626
53626
  Section,
53627
53627
  {
@@ -53786,7 +53786,7 @@ function HeroFullscreenBackgroundImage({
53786
53786
  function HeroFullscreenLogoCta({
53787
53787
  sectionId = "hero-fullscreen-logo-cta",
53788
53788
  logo,
53789
- logoSlot,
53789
+ logoSlot: logoSlot2,
53790
53790
  heading,
53791
53791
  description,
53792
53792
  action,
@@ -53820,7 +53820,7 @@ function HeroFullscreenLogoCta({
53820
53820
  ] });
53821
53821
  }, [backgroundImage, optixFlowConfig]);
53822
53822
  const renderLogo = React30.useMemo(() => {
53823
- if (logoSlot) return logoSlot;
53823
+ if (logoSlot2) return logoSlot2;
53824
53824
  if (!logo) return null;
53825
53825
  const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
53826
53826
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -53832,7 +53832,7 @@ function HeroFullscreenLogoCta({
53832
53832
  optixFlowConfig
53833
53833
  }
53834
53834
  );
53835
- }, [logoSlot, logo, optixFlowConfig]);
53835
+ }, [logoSlot2, logo, optixFlowConfig]);
53836
53836
  const renderAction = React30.useMemo(() => {
53837
53837
  if (actionSlot) return actionSlot;
53838
53838
  if (!action) return null;
@@ -54938,7 +54938,7 @@ function HeroCrmStreamlined({
54938
54938
  actionsSlot,
54939
54939
  actionsClassName,
54940
54940
  image,
54941
- imageSlot,
54941
+ imageSlot: imageSlot2,
54942
54942
  background,
54943
54943
  pattern,
54944
54944
  patternOpacity,
@@ -55004,7 +55004,7 @@ function HeroCrmStreamlined({
55004
55004
  "div",
55005
55005
  {
55006
55006
  className: cn("relative basis-[42%] py-9 md:py-16", imageClassName),
55007
- children: imageSlot ? imageSlot : image ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "aspect-square w-full overflow-hidden rounded-xl shadow-xl", children: [
55007
+ children: imageSlot2 ? imageSlot2 : image ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "aspect-square w-full overflow-hidden rounded-xl shadow-xl", children: [
55008
55008
  /* @__PURE__ */ jsxRuntime.jsx(
55009
55009
  img.Img,
55010
55010
  {
@@ -55522,7 +55522,7 @@ function HeroConversionVideoPlay({
55522
55522
  videoDialogTitle,
55523
55523
  actionsSlot,
55524
55524
  image,
55525
- imageSlot,
55525
+ imageSlot: imageSlot2,
55526
55526
  logosTagline,
55527
55527
  logos,
55528
55528
  logosSlot,
@@ -55653,7 +55653,7 @@ function HeroConversionVideoPlay({
55653
55653
  ]
55654
55654
  }
55655
55655
  ),
55656
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full", children: imageSlot ? imageSlot : image ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("relative h-fit w-full", imageClassName), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-20 w-full max-w-330 overflow-hidden rounded-t-xl md:rounded-t-3xl", children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 2.095238095 / 1, children: /* @__PURE__ */ jsxRuntime.jsx(
55656
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full", children: imageSlot2 ? imageSlot2 : image ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("relative h-fit w-full", imageClassName), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-20 w-full max-w-330 overflow-hidden rounded-t-xl md:rounded-t-3xl", children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 2.095238095 / 1, children: /* @__PURE__ */ jsxRuntime.jsx(
55657
55657
  img.Img,
55658
55658
  {
55659
55659
  src: image.src,
@@ -56229,7 +56229,7 @@ function HeroSplitImageNewsletter({
56229
56229
  helperText,
56230
56230
  formSlot,
56231
56231
  image,
56232
- imageSlot,
56232
+ imageSlot: imageSlot2,
56233
56233
  background,
56234
56234
  spacing = "xl",
56235
56235
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
@@ -56341,7 +56341,7 @@ function HeroSplitImageNewsletter({
56341
56341
  resetSubmissionState
56342
56342
  ]);
56343
56343
  const renderImage = React30__namespace.useMemo(() => {
56344
- if (imageSlot) return imageSlot;
56344
+ if (imageSlot2) return imageSlot2;
56345
56345
  if (!image) return null;
56346
56346
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative lg:w-1/2", children: /* @__PURE__ */ jsxRuntime.jsx(
56347
56347
  img.Img,
@@ -56356,7 +56356,7 @@ function HeroSplitImageNewsletter({
56356
56356
  optixFlowConfig
56357
56357
  }
56358
56358
  ) });
56359
- }, [imageSlot, image, imageClassName, optixFlowConfig]);
56359
+ }, [imageSlot2, image, imageClassName, optixFlowConfig]);
56360
56360
  return /* @__PURE__ */ jsxRuntime.jsx(
56361
56361
  Section,
56362
56362
  {
@@ -57339,7 +57339,7 @@ function HeroVideoDialogGradient({
57339
57339
  actions,
57340
57340
  videoAction,
57341
57341
  image,
57342
- imageSlot,
57342
+ imageSlot: imageSlot2,
57343
57343
  modalVideo,
57344
57344
  videoDialogTitle,
57345
57345
  videoDialog,
@@ -57382,7 +57382,7 @@ function HeroVideoDialogGradient({
57382
57382
  }
57383
57383
  };
57384
57384
  const renderImage = React30.useMemo(() => {
57385
- if (imageSlot) return imageSlot;
57385
+ if (imageSlot2) return imageSlot2;
57386
57386
  if (!image) return null;
57387
57387
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto mt-16 w-full max-w-[1000px] overflow-hidden rounded-xl shadow-[4px_2px_3.123rem_rgba(0,0,0,.15)]", children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 1.406469761 / 1, children: /* @__PURE__ */ jsxRuntime.jsx(
57388
57388
  img.Img,
@@ -57397,7 +57397,7 @@ function HeroVideoDialogGradient({
57397
57397
  optixFlowConfig
57398
57398
  }
57399
57399
  ) }) });
57400
- }, [imageSlot, image, imageClassName, optixFlowConfig]);
57400
+ }, [imageSlot2, image, imageClassName, optixFlowConfig]);
57401
57401
  return /* @__PURE__ */ jsxRuntime.jsxs(React30.Fragment, { children: [
57402
57402
  /* @__PURE__ */ jsxRuntime.jsx(
57403
57403
  Section,
@@ -58346,7 +58346,7 @@ function HeroMentorshipVideoSplit({
58346
58346
  videoTitle,
58347
58347
  videoSlot,
58348
58348
  image,
58349
- imageSlot,
58349
+ imageSlot: imageSlot2,
58350
58350
  background,
58351
58351
  spacing = "py-32 md:py-32",
58352
58352
  pattern,
@@ -58446,7 +58446,7 @@ function HeroMentorshipVideoSplit({
58446
58446
  setIsVideoOpen
58447
58447
  ]);
58448
58448
  const renderImage = React30.useMemo(() => {
58449
- if (imageSlot) return imageSlot;
58449
+ if (imageSlot2) return imageSlot2;
58450
58450
  if (!image) return null;
58451
58451
  return /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
58452
58452
  img.Img,
@@ -58461,7 +58461,7 @@ function HeroMentorshipVideoSplit({
58461
58461
  optixFlowConfig
58462
58462
  }
58463
58463
  ) });
58464
- }, [imageSlot, image, imageClassName, optixFlowConfig]);
58464
+ }, [imageSlot2, image, imageClassName, optixFlowConfig]);
58465
58465
  return /* @__PURE__ */ jsxRuntime.jsxs(React30.Fragment, { children: [
58466
58466
  /* @__PURE__ */ jsxRuntime.jsx(
58467
58467
  Section,
@@ -59852,7 +59852,7 @@ function HeroConversationIntelligence({
59852
59852
  actions,
59853
59853
  actionsSlot,
59854
59854
  image,
59855
- imageSlot,
59855
+ imageSlot: imageSlot2,
59856
59856
  background,
59857
59857
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
59858
59858
  spacing = "hero",
@@ -59868,7 +59868,7 @@ function HeroConversationIntelligence({
59868
59868
  optixFlowConfig
59869
59869
  }) {
59870
59870
  const renderImage = React30.useMemo(() => {
59871
- if (imageSlot) return imageSlot;
59871
+ if (imageSlot2) return imageSlot2;
59872
59872
  if (!image) return null;
59873
59873
  return /* @__PURE__ */ jsxRuntime.jsx(
59874
59874
  "div",
@@ -59891,7 +59891,7 @@ function HeroConversationIntelligence({
59891
59891
  )
59892
59892
  }
59893
59893
  );
59894
- }, [imageSlot, image, imageClassName, optixFlowConfig]);
59894
+ }, [imageSlot2, image, imageClassName, optixFlowConfig]);
59895
59895
  return /* @__PURE__ */ jsxRuntime.jsx(
59896
59896
  Section,
59897
59897
  {
@@ -60405,7 +60405,7 @@ function HeroMobileAppDownload({
60405
60405
  starCount,
60406
60406
  ratingSlot,
60407
60407
  image,
60408
- imageSlot,
60408
+ imageSlot: imageSlot2,
60409
60409
  notification,
60410
60410
  notificationSlot,
60411
60411
  background,
@@ -60513,7 +60513,7 @@ function HeroMobileAppDownload({
60513
60513
  );
60514
60514
  }, [notificationSlot, notification]);
60515
60515
  const renderImage = React30.useMemo(() => {
60516
- if (imageSlot) return imageSlot;
60516
+ if (imageSlot2) return imageSlot2;
60517
60517
  if (!image) return null;
60518
60518
  return /* @__PURE__ */ jsxRuntime.jsx(
60519
60519
  "div",
@@ -60539,7 +60539,7 @@ function HeroMobileAppDownload({
60539
60539
  ] })
60540
60540
  }
60541
60541
  );
60542
- }, [imageSlot, image, imageClassName, optixFlowConfig, renderNotification]);
60542
+ }, [imageSlot2, image, imageClassName, optixFlowConfig, renderNotification]);
60543
60543
  return /* @__PURE__ */ jsxRuntime.jsx(
60544
60544
  Section,
60545
60545
  {
@@ -61117,7 +61117,7 @@ function HeroEventRegistration({
61117
61117
  stats,
61118
61118
  statsSlot,
61119
61119
  image,
61120
- imageSlot,
61120
+ imageSlot: imageSlot2,
61121
61121
  locationLabel,
61122
61122
  locationSublabel,
61123
61123
  locationSlot,
@@ -61236,7 +61236,7 @@ function HeroEventRegistration({
61236
61236
  );
61237
61237
  }, [locationSlot, locationLabel, locationSublabel]);
61238
61238
  const renderImage = React30.useMemo(() => {
61239
- if (imageSlot) return imageSlot;
61239
+ if (imageSlot2) return imageSlot2;
61240
61240
  if (!image) return null;
61241
61241
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative w-full md:w-[50%]", children: [
61242
61242
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -61259,7 +61259,7 @@ function HeroEventRegistration({
61259
61259
  ),
61260
61260
  renderLocation
61261
61261
  ] });
61262
- }, [imageSlot, image, imageClassName, optixFlowConfig, renderLocation]);
61262
+ }, [imageSlot2, image, imageClassName, optixFlowConfig, renderLocation]);
61263
61263
  const desktopOrder = directionConfig.desktop === "mediaRight" ? "md:flex-row" : "md:flex-row-reverse";
61264
61264
  const mobileOrder = directionConfig.mobile === "mediaTop" ? "flex-col-reverse" : "flex-col";
61265
61265
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -63151,11 +63151,11 @@ var NavbarMobileMenu = ({
63151
63151
  };
63152
63152
  var NavbarLogo = ({
63153
63153
  logo,
63154
- logoSlot,
63154
+ logoSlot: logoSlot2,
63155
63155
  logoClassName,
63156
63156
  optixFlowConfig
63157
63157
  }) => {
63158
- if (logoSlot) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: logoSlot });
63158
+ if (logoSlot2) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: logoSlot2 });
63159
63159
  if (!logo) return null;
63160
63160
  return /* @__PURE__ */ jsxRuntime.jsx(
63161
63161
  pressable.Pressable,
@@ -63272,7 +63272,7 @@ var renderMobileMenuItem = (item, optixFlowConfig) => {
63272
63272
  var NavbarDropdownMenu = ({
63273
63273
  sectionId = "navbar-dropdown-menu",
63274
63274
  logo,
63275
- logoSlot,
63275
+ logoSlot: logoSlot2,
63276
63276
  logoClassName,
63277
63277
  menu,
63278
63278
  menuSlot,
@@ -63364,7 +63364,7 @@ var NavbarDropdownMenu = ({
63364
63364
  NavbarLogo,
63365
63365
  {
63366
63366
  logo,
63367
- logoSlot,
63367
+ logoSlot: logoSlot2,
63368
63368
  logoClassName,
63369
63369
  optixFlowConfig
63370
63370
  }
@@ -63380,7 +63380,7 @@ var NavbarDropdownMenu = ({
63380
63380
  NavbarLogo,
63381
63381
  {
63382
63382
  logo,
63383
- logoSlot,
63383
+ logoSlot: logoSlot2,
63384
63384
  logoClassName,
63385
63385
  optixFlowConfig
63386
63386
  }
@@ -63500,7 +63500,7 @@ var renderMobileMenuItem2 = (item) => {
63500
63500
  var NavbarCenteredMenu = ({
63501
63501
  sectionId = "navbar-centered-menu",
63502
63502
  logo,
63503
- logoSlot,
63503
+ logoSlot: logoSlot2,
63504
63504
  logoClassName,
63505
63505
  menu,
63506
63506
  menuSlot,
@@ -63591,7 +63591,7 @@ var NavbarCenteredMenu = ({
63591
63591
  NavbarLogo,
63592
63592
  {
63593
63593
  logo,
63594
- logoSlot,
63594
+ logoSlot: logoSlot2,
63595
63595
  logoClassName,
63596
63596
  optixFlowConfig
63597
63597
  }
@@ -63612,7 +63612,7 @@ var NavbarCenteredMenu = ({
63612
63612
  NavbarLogo,
63613
63613
  {
63614
63614
  logo,
63615
- logoSlot,
63615
+ logoSlot: logoSlot2,
63616
63616
  logoClassName,
63617
63617
  optixFlowConfig
63618
63618
  }
@@ -63890,7 +63890,7 @@ var NavbarMegaMenu = ({
63890
63890
  logoClassName,
63891
63891
  mobileMenuClassName,
63892
63892
  logo,
63893
- logoSlot,
63893
+ logoSlot: logoSlot2,
63894
63894
  menuLinks,
63895
63895
  actions,
63896
63896
  layoutVariant = "fullScreenContainerizedLinks",
@@ -63968,7 +63968,7 @@ var NavbarMegaMenu = ({
63968
63968
  NavbarLogo,
63969
63969
  {
63970
63970
  logo,
63971
- logoSlot,
63971
+ logoSlot: logoSlot2,
63972
63972
  logoClassName,
63973
63973
  optixFlowConfig
63974
63974
  }
@@ -64619,7 +64619,7 @@ var NavbarEnterpriseMega = ({
64619
64619
  actionsClassName,
64620
64620
  logoClassName,
64621
64621
  logo,
64622
- logoSlot,
64622
+ logoSlot: logoSlot2,
64623
64623
  menuLinks,
64624
64624
  actions,
64625
64625
  actionsSlot,
@@ -64702,7 +64702,7 @@ var NavbarEnterpriseMega = ({
64702
64702
  NavbarLogo,
64703
64703
  {
64704
64704
  logo,
64705
- logoSlot,
64705
+ logoSlot: logoSlot2,
64706
64706
  logoClassName,
64707
64707
  optixFlowConfig
64708
64708
  }
@@ -65002,7 +65002,7 @@ var NavbarFeatureGrid = ({
65002
65002
  actionsClassName,
65003
65003
  logoClassName,
65004
65004
  logo,
65005
- logoSlot,
65005
+ logoSlot: logoSlot2,
65006
65006
  features,
65007
65007
  menu,
65008
65008
  authActions,
@@ -65063,7 +65063,7 @@ var NavbarFeatureGrid = ({
65063
65063
  NavbarLogo,
65064
65064
  {
65065
65065
  logo,
65066
- logoSlot,
65066
+ logoSlot: logoSlot2,
65067
65067
  logoClassName,
65068
65068
  optixFlowConfig
65069
65069
  }
@@ -65172,7 +65172,7 @@ var NavbarFeatureGrid = ({
65172
65172
  var NavbarFloatingPill = ({
65173
65173
  sectionId = "navbar-floating-pill",
65174
65174
  logo,
65175
- logoSlot,
65175
+ logoSlot: logoSlot2,
65176
65176
  logoClassName,
65177
65177
  items,
65178
65178
  menuSlot,
@@ -65265,7 +65265,7 @@ var NavbarFloatingPill = ({
65265
65265
  NavbarLogo,
65266
65266
  {
65267
65267
  logo,
65268
- logoSlot,
65268
+ logoSlot: logoSlot2,
65269
65269
  logoClassName,
65270
65270
  optixFlowConfig
65271
65271
  }
@@ -65441,7 +65441,7 @@ var NavbarPlatformResources = ({
65441
65441
  logoClassName,
65442
65442
  mobileMenuClassName,
65443
65443
  logo,
65444
- logoSlot,
65444
+ logoSlot: logoSlot2,
65445
65445
  menuLinks,
65446
65446
  actions,
65447
65447
  layoutVariant = "fullScreenContainerizedLinks",
@@ -65799,7 +65799,7 @@ var NavbarPlatformResources = ({
65799
65799
  NavbarLogo,
65800
65800
  {
65801
65801
  logo,
65802
- logoSlot,
65802
+ logoSlot: logoSlot2,
65803
65803
  logoClassName,
65804
65804
  optixFlowConfig
65805
65805
  }
@@ -65943,7 +65943,7 @@ var NavbarImagePreview = ({
65943
65943
  navigationMenuClassName,
65944
65944
  actionsClassName,
65945
65945
  logo,
65946
- logoSlot,
65946
+ logoSlot: logoSlot2,
65947
65947
  logoClassName,
65948
65948
  navigation,
65949
65949
  navigationSlot,
@@ -66069,7 +66069,7 @@ var NavbarImagePreview = ({
66069
66069
  NavbarLogo,
66070
66070
  {
66071
66071
  logo,
66072
- logoSlot,
66072
+ logoSlot: logoSlot2,
66073
66073
  logoClassName,
66074
66074
  optixFlowConfig
66075
66075
  }
@@ -66337,7 +66337,7 @@ var NavbarDarkIcons = ({
66337
66337
  navigationMenuClassName,
66338
66338
  actionsClassName,
66339
66339
  logo,
66340
- logoSlot,
66340
+ logoSlot: logoSlot2,
66341
66341
  logoClassName,
66342
66342
  navigation,
66343
66343
  navigationSlot,
@@ -66452,7 +66452,7 @@ var NavbarDarkIcons = ({
66452
66452
  NavbarLogo,
66453
66453
  {
66454
66454
  logo,
66455
- logoSlot,
66455
+ logoSlot: logoSlot2,
66456
66456
  logoClassName,
66457
66457
  optixFlowConfig
66458
66458
  }
@@ -66681,7 +66681,7 @@ var NavbarAnimatedPreview = ({
66681
66681
  navigationMenuClassName,
66682
66682
  actionsClassName,
66683
66683
  logo,
66684
- logoSlot,
66684
+ logoSlot: logoSlot2,
66685
66685
  logoClassName,
66686
66686
  menuLinks,
66687
66687
  navigationSlot,
@@ -66803,7 +66803,7 @@ var NavbarAnimatedPreview = ({
66803
66803
  NavbarLogo,
66804
66804
  {
66805
66805
  logo,
66806
- logoSlot,
66806
+ logoSlot: logoSlot2,
66807
66807
  logoClassName,
66808
66808
  optixFlowConfig
66809
66809
  }
@@ -67073,35 +67073,35 @@ var FeaturedImageLink = ({
67073
67073
  ) }) });
67074
67074
  };
67075
67075
  var FeaturedLink = ({ link, optixFlowConfig }) => {
67076
+ const hasBgImg = !!link.background;
67076
67077
  return /* @__PURE__ */ jsxRuntime.jsxs(
67077
67078
  pressable.Pressable,
67078
67079
  {
67079
67080
  href: getLinkUrl(link),
67080
- className: "group relative flex w-full overflow-hidden rounded-xl bg-muted px-4 pt-24 pb-4",
67081
+ className: `group relative flex w-full overflow-hidden rounded-xl px-4 pt-24 pb-4 ${hasBgImg ? "" : "bg-primary"}`,
67081
67082
  children: [
67082
67083
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative z-10 flex w-full items-center gap-6", children: [
67083
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-12 shrink-0 rounded-lg border bg-background shadow-lg", children: /* @__PURE__ */ jsxRuntime.jsx(
67084
- DynamicIcon,
67084
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-12 shrink-0 rounded-lg border bg-card text-card-foreground shadow-lg", children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: link.icon || link.iconName, size: 20 }) }),
67085
+ /* @__PURE__ */ jsxRuntime.jsxs(
67086
+ "div",
67085
67087
  {
67086
- name: link.icon || link.iconName,
67087
- size: 20,
67088
- className: "m-auto stroke-white"
67088
+ className: `flex flex-col ${hasBgImg ? "text-white text-shadow-lg" : "text-primary-foreground"}`,
67089
+ children: [
67090
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-lg font-semibold", children: link.label }),
67091
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-medium", children: link.description })
67092
+ ]
67089
67093
  }
67090
- ) }),
67091
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col text-white text-shadow-lg", children: [
67092
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-lg font-semibold", children: link.label }),
67093
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-medium", children: link.description })
67094
- ] })
67094
+ )
67095
67095
  ] }),
67096
- /* @__PURE__ */ jsxRuntime.jsx(
67096
+ link.background && link.background?.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
67097
67097
  img.Img,
67098
67098
  {
67099
67099
  src: link.background,
67100
- alt: typeof link.label === "string" ? link.label : "",
67100
+ alt: link.label && typeof link.label === "string" ? link.label : "Featured link background image",
67101
67101
  className: "absolute top-0 left-0 size-full brightness-50 object-cover object-center opacity-90 transition-opacity duration-300 ease-in-out group-hover:opacity-100",
67102
67102
  optixFlowConfig
67103
67103
  }
67104
- )
67104
+ ) : null
67105
67105
  ]
67106
67106
  }
67107
67107
  );
@@ -67117,17 +67117,17 @@ var NavLink = React30.forwardRef(
67117
67117
  onMouseEnter,
67118
67118
  onMouseLeave,
67119
67119
  children: [
67120
- (link.icon || link.iconName) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-6 shrink-0 rounded-md border shadow", children: /* @__PURE__ */ jsxRuntime.jsx(
67120
+ link.icon || link.iconName ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-6 shrink-0 rounded-md border shadow", children: /* @__PURE__ */ jsxRuntime.jsx(
67121
67121
  DynamicIcon,
67122
67122
  {
67123
67123
  name: link.icon || link.iconName,
67124
67124
  size: 14,
67125
67125
  className: "m-auto"
67126
67126
  }
67127
- ) }),
67128
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-2", children: [
67127
+ ) }) : null,
67128
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-1", children: [
67129
67129
  link.label && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm leading-normal", children: link.label }),
67130
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs leading-normal text-muted-foreground", children: link.description })
67130
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs leading-normal opacity-70", children: link.description })
67131
67131
  ] })
67132
67132
  ]
67133
67133
  }
@@ -67223,7 +67223,7 @@ var NavbarMultiColumnGroups = ({
67223
67223
  navigationMenuClassName,
67224
67224
  actionsClassName,
67225
67225
  logo,
67226
- logoSlot,
67226
+ logoSlot: logoSlot2,
67227
67227
  logoClassName,
67228
67228
  navigation,
67229
67229
  navigationSlot,
@@ -67334,7 +67334,7 @@ var NavbarMultiColumnGroups = ({
67334
67334
  NavbarLogo,
67335
67335
  {
67336
67336
  logo,
67337
- logoSlot,
67337
+ logoSlot: logoSlot2,
67338
67338
  logoClassName,
67339
67339
  optixFlowConfig
67340
67340
  }
@@ -67538,7 +67538,7 @@ var MobileNavigationMenu5 = ({
67538
67538
  };
67539
67539
  var NavbarSidebarMobile = ({
67540
67540
  logo,
67541
- logoSlot,
67541
+ logoSlot: logoSlot2,
67542
67542
  logoClassName,
67543
67543
  menu,
67544
67544
  menuSlot,
@@ -67648,7 +67648,7 @@ var NavbarSidebarMobile = ({
67648
67648
  NavbarLogo,
67649
67649
  {
67650
67650
  logo,
67651
- logoSlot,
67651
+ logoSlot: logoSlot2,
67652
67652
  logoClassName,
67653
67653
  optixFlowConfig
67654
67654
  }
@@ -67854,7 +67854,7 @@ var NavbarTransparentOverlay = ({
67854
67854
  mobileMenuClassName,
67855
67855
  socialLinksClassName,
67856
67856
  logo,
67857
- logoSlot,
67857
+ logoSlot: logoSlot2,
67858
67858
  logoClassName,
67859
67859
  navItems,
67860
67860
  navigationSlot,
@@ -67972,7 +67972,7 @@ var NavbarTransparentOverlay = ({
67972
67972
  NavbarLogo,
67973
67973
  {
67974
67974
  logo,
67975
- logoSlot,
67975
+ logoSlot: logoSlot2,
67976
67976
  logoClassName: cn(
67977
67977
  "z-50",
67978
67978
  !isScrolled && !isOpen && "[&_img]:brightness-0 [&_img]:invert [&_span]:text-background",
@@ -68139,7 +68139,7 @@ var NavbarEducationPlatform = ({
68139
68139
  logoClassName,
68140
68140
  mobileMenuClassName,
68141
68141
  logo,
68142
- logoSlot,
68142
+ logoSlot: logoSlot2,
68143
68143
  menu,
68144
68144
  menuSlot,
68145
68145
  authActions,
@@ -68234,7 +68234,7 @@ var NavbarEducationPlatform = ({
68234
68234
  NavbarLogo,
68235
68235
  {
68236
68236
  logo,
68237
- logoSlot,
68237
+ logoSlot: logoSlot2,
68238
68238
  logoClassName,
68239
68239
  optixFlowConfig
68240
68240
  }
@@ -68468,7 +68468,7 @@ var MobileNavigationMenu8 = ({
68468
68468
  };
68469
68469
  var NavbarStickyCompact = ({
68470
68470
  logo,
68471
- logoSlot,
68471
+ logoSlot: logoSlot2,
68472
68472
  logoClassName,
68473
68473
  menu,
68474
68474
  menuSlot,
@@ -68603,7 +68603,7 @@ var NavbarStickyCompact = ({
68603
68603
  NavbarLogo,
68604
68604
  {
68605
68605
  logo,
68606
- logoSlot,
68606
+ logoSlot: logoSlot2,
68607
68607
  logoClassName,
68608
68608
  optixFlowConfig
68609
68609
  }
@@ -68748,7 +68748,7 @@ var NavbarSearchFocused = ({
68748
68748
  navigationMenuClassName,
68749
68749
  actionsClassName,
68750
68750
  logo,
68751
- logoSlot,
68751
+ logoSlot: logoSlot2,
68752
68752
  logoClassName,
68753
68753
  navItems,
68754
68754
  navigationSlot,
@@ -68870,7 +68870,7 @@ var NavbarSearchFocused = ({
68870
68870
  NavbarLogo,
68871
68871
  {
68872
68872
  logo,
68873
- logoSlot,
68873
+ logoSlot: logoSlot2,
68874
68874
  logoClassName,
68875
68875
  optixFlowConfig
68876
68876
  }
@@ -69009,7 +69009,7 @@ var NavbarSimpleLinks = ({
69009
69009
  actionsClassName,
69010
69010
  mobileMenuClassName,
69011
69011
  logo,
69012
- logoSlot,
69012
+ logoSlot: logoSlot2,
69013
69013
  logoClassName,
69014
69014
  navItems,
69015
69015
  navItemsSlot,
@@ -69135,7 +69135,7 @@ var NavbarSimpleLinks = ({
69135
69135
  NavbarLogo,
69136
69136
  {
69137
69137
  logo,
69138
- logoSlot,
69138
+ logoSlot: logoSlot2,
69139
69139
  logoClassName,
69140
69140
  optixFlowConfig
69141
69141
  }
@@ -69276,7 +69276,7 @@ var MobileNavigationMenu11 = ({
69276
69276
  var NavbarSplitCta = ({
69277
69277
  sectionId = "navbar-split-cta",
69278
69278
  logo,
69279
- logoSlot,
69279
+ logoSlot: logoSlot2,
69280
69280
  logoClassName,
69281
69281
  menu,
69282
69282
  menuSlot,
@@ -69361,7 +69361,7 @@ var NavbarSplitCta = ({
69361
69361
  NavbarLogo,
69362
69362
  {
69363
69363
  logo,
69364
- logoSlot,
69364
+ logoSlot: logoSlot2,
69365
69365
  logoClassName,
69366
69366
  optixFlowConfig
69367
69367
  }
@@ -69481,7 +69481,7 @@ var NavbarSplitCta = ({
69481
69481
  var NavbarIconLinks = ({
69482
69482
  sectionId = "navbar-icon-links",
69483
69483
  logo,
69484
- logoSlot,
69484
+ logoSlot: logoSlot2,
69485
69485
  logoClassName,
69486
69486
  navItems,
69487
69487
  navItemsSlot,
@@ -69581,7 +69581,7 @@ var NavbarIconLinks = ({
69581
69581
  NavbarLogo,
69582
69582
  {
69583
69583
  logo,
69584
- logoSlot,
69584
+ logoSlot: logoSlot2,
69585
69585
  logoClassName,
69586
69586
  optixFlowConfig
69587
69587
  }
@@ -69620,7 +69620,7 @@ var NavbarIconLinks = ({
69620
69620
  NavbarLogo,
69621
69621
  {
69622
69622
  logo,
69623
- logoSlot,
69623
+ logoSlot: logoSlot2,
69624
69624
  logoClassName,
69625
69625
  optixFlowConfig
69626
69626
  }
@@ -69692,7 +69692,7 @@ var NavbarIconLinks = ({
69692
69692
  var NavbarTabbedSections = ({
69693
69693
  sectionId = "navbar-tabbed-sections",
69694
69694
  logo,
69695
- logoSlot,
69695
+ logoSlot: logoSlot2,
69696
69696
  logoClassName,
69697
69697
  menu,
69698
69698
  menuSlot,
@@ -69903,7 +69903,7 @@ var NavbarTabbedSections = ({
69903
69903
  NavbarLogo,
69904
69904
  {
69905
69905
  logo,
69906
- logoSlot,
69906
+ logoSlot: logoSlot2,
69907
69907
  logoClassName,
69908
69908
  optixFlowConfig
69909
69909
  }
@@ -69962,7 +69962,7 @@ var NavbarTabbedSections = ({
69962
69962
  };
69963
69963
  var NavbarFullscreenMenu = ({
69964
69964
  logo,
69965
- logoSlot,
69965
+ logoSlot: logoSlot2,
69966
69966
  logoClassName,
69967
69967
  menuItems,
69968
69968
  menuSlot,
@@ -70050,7 +70050,7 @@ var NavbarFullscreenMenu = ({
70050
70050
  NavbarLogo,
70051
70051
  {
70052
70052
  logo,
70053
- logoSlot,
70053
+ logoSlot: logoSlot2,
70054
70054
  logoClassName,
70055
70055
  optixFlowConfig
70056
70056
  }
@@ -70082,7 +70082,7 @@ var NavbarFullscreenMenu = ({
70082
70082
  NavbarLogo,
70083
70083
  {
70084
70084
  logo,
70085
- logoSlot,
70085
+ logoSlot: logoSlot2,
70086
70086
  logoClassName,
70087
70087
  optixFlowConfig
70088
70088
  }
@@ -85312,7 +85312,7 @@ function OfferModalMembershipImage({
85312
85312
  title,
85313
85313
  description,
85314
85314
  image,
85315
- imageSlot,
85315
+ imageSlot: imageSlot2,
85316
85316
  closeButtonSlot,
85317
85317
  formSlot,
85318
85318
  footerSlot,
@@ -85336,7 +85336,7 @@ function OfferModalMembershipImage({
85336
85336
  }) {
85337
85337
  const dialogProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
85338
85338
  const renderImage = React30__namespace.useMemo(() => {
85339
- if (imageSlot) return imageSlot;
85339
+ if (imageSlot2) return imageSlot2;
85340
85340
  if (!image) return null;
85341
85341
  return /* @__PURE__ */ jsxRuntime.jsx(
85342
85342
  "div",
@@ -85360,7 +85360,7 @@ function OfferModalMembershipImage({
85360
85360
  }
85361
85361
  );
85362
85362
  }, [
85363
- imageSlot,
85363
+ imageSlot2,
85364
85364
  image,
85365
85365
  imageWrapperClassName,
85366
85366
  imageClassName,
@@ -85589,11 +85589,11 @@ var DEFAULT_FORM_FIELDS55 = [
85589
85589
  ];
85590
85590
  function OfferModalSheetNewsletter({
85591
85591
  logo,
85592
- logoSlot,
85592
+ logoSlot: logoSlot2,
85593
85593
  title,
85594
85594
  description,
85595
85595
  image,
85596
- imageSlot,
85596
+ imageSlot: imageSlot2,
85597
85597
  termsUrl,
85598
85598
  termsText,
85599
85599
  privacyUrl,
@@ -85622,7 +85622,7 @@ function OfferModalSheetNewsletter({
85622
85622
  }) {
85623
85623
  const sheetProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
85624
85624
  const renderLogo = React30__namespace.useMemo(() => {
85625
- if (logoSlot) return logoSlot;
85625
+ if (logoSlot2) return logoSlot2;
85626
85626
  if (!logo) return null;
85627
85627
  const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
85628
85628
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -85634,7 +85634,7 @@ function OfferModalSheetNewsletter({
85634
85634
  optixFlowConfig
85635
85635
  }
85636
85636
  );
85637
- }, [logoSlot, logo, logoClassName, optixFlowConfig]);
85637
+ }, [logoSlot2, logo, logoClassName, optixFlowConfig]);
85638
85638
  const renderHeader = React30__namespace.useMemo(() => {
85639
85639
  if (headerSlot) return headerSlot;
85640
85640
  return /* @__PURE__ */ jsxRuntime.jsxs(SheetHeader, { className: cn("gap-8 p-0", headerClassName), children: [
@@ -85716,7 +85716,7 @@ function OfferModalSheetNewsletter({
85716
85716
  ] });
85717
85717
  }, [legalSlot, termsUrl, termsText, privacyUrl, privacyText, legalClassName]);
85718
85718
  const renderImage = React30__namespace.useMemo(() => {
85719
- if (imageSlot) return imageSlot;
85719
+ if (imageSlot2) return imageSlot2;
85720
85720
  if (!image) return null;
85721
85721
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("h-1/2 basis-1/2", imageWrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 1, className: "overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
85722
85722
  img.Img,
@@ -85731,7 +85731,7 @@ function OfferModalSheetNewsletter({
85731
85731
  }
85732
85732
  ) }) });
85733
85733
  }, [
85734
- imageSlot,
85734
+ imageSlot2,
85735
85735
  image,
85736
85736
  imageWrapperClassName,
85737
85737
  imageClassName,
@@ -103500,6 +103500,1586 @@ function LinkPageBentoLayout({
103500
103500
  }
103501
103501
 
103502
103502
  // src/registry/blocks.ts
103503
+ var ABOUT_EXAMPLE_IMAGE_URL = "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp";
103504
+ var ABOUT_MEDIA_NOTE = "All media src values must be absolute URLs to real assets; relative paths and placeholder media variables are not allowed.";
103505
+ var aboutImage = (alt) => ({
103506
+ src: ABOUT_EXAMPLE_IMAGE_URL,
103507
+ alt
103508
+ });
103509
+ var imageSlot = (path, note, roles = ["feature"], minPixelClass = "large", required = true, preferredAspect) => ({
103510
+ path,
103511
+ roles,
103512
+ disallowedRoles: ["logo", "favicon", "video-thumbnail"],
103513
+ minPixelClass,
103514
+ required,
103515
+ ...preferredAspect ? { preferredAspect } : {},
103516
+ note: `${note} IMAGE MEDIA ONLY. Do not use logos, favicons, or video assets.`
103517
+ });
103518
+ var logoSlot = (path, note, required = false) => ({
103519
+ path,
103520
+ roles: ["logo"],
103521
+ disallowedRoles: ["favicon", "video-thumbnail"],
103522
+ minPixelClass: "small",
103523
+ required,
103524
+ note: `${note} LOGO IMAGE ONLY. Do not use photos, favicons, or video assets.`
103525
+ });
103526
+ var aboutCapabilities = (...capabilities) => capabilities;
103527
+ var ABOUT_BLOCK_CONTRACTS = {
103528
+ "alternating-blocks": {
103529
+ exampleUsage: `
103530
+ <AlternatingBlocks
103531
+ title="How We Got Here"
103532
+ subtitle="A practical timeline of the decisions that shaped our company."
103533
+ sections={[
103534
+ {
103535
+ content: "We started by replacing disconnected tools with one focused workflow.",
103536
+ media: <img src="${ABOUT_EXAMPLE_IMAGE_URL}" alt="Team planning in a cafe workspace" />,
103537
+ mediaLeft: false,
103538
+ },
103539
+ {
103540
+ content: "Today our team helps operators launch better customer experiences faster.",
103541
+ media: <img src="${ABOUT_EXAMPLE_IMAGE_URL}" alt="Collaborative team workspace" />,
103542
+ mediaLeft: true,
103543
+ },
103544
+ ]}
103545
+ />
103546
+ `.trim(),
103547
+ importantUsageNotes: "Use for two or more narrative sections with alternating visual rhythm. The sections[].content and sections[].media props are ReactNode slots; authoring tools should render concrete text and image elements, not placeholder fragments. Keep each section focused on one milestone, value, or proof point.",
103548
+ usageRequirements: {
103549
+ requiredProps: ["sections"],
103550
+ propConstraints: {
103551
+ sections: { required: true, minItems: 2, maxItems: 5 },
103552
+ "sections[].content": {
103553
+ required: true,
103554
+ note: "ReactNode content slot. Use concise, source-backed story copy."
103555
+ },
103556
+ "sections[].media": {
103557
+ required: true,
103558
+ note: "ReactNode media slot. Provide an image element with an absolute src."
103559
+ }
103560
+ },
103561
+ mediaSlots: {
103562
+ "sections[].media": imageSlot(
103563
+ "sections[].media",
103564
+ "Alternating section visual.",
103565
+ ["feature", "hero"]
103566
+ )
103567
+ },
103568
+ requiresSiteCapabilities: aboutCapabilities("media_library"),
103569
+ notes: [ABOUT_MEDIA_NOTE]
103570
+ },
103571
+ exampleProps: {
103572
+ title: "How We Got Here",
103573
+ subtitle: "A practical timeline of the decisions that shaped our company.",
103574
+ sections: [
103575
+ {
103576
+ content: "We started by replacing disconnected tools with one focused workflow.",
103577
+ media: ABOUT_EXAMPLE_IMAGE_URL,
103578
+ mediaLeft: false
103579
+ },
103580
+ {
103581
+ content: "Today our team helps operators launch better customer experiences faster.",
103582
+ media: ABOUT_EXAMPLE_IMAGE_URL,
103583
+ mediaLeft: true
103584
+ }
103585
+ ]
103586
+ }
103587
+ },
103588
+ "about-mission-features": {
103589
+ exampleUsage: `
103590
+ <AboutMissionFeatures
103591
+ title="About OpenSite"
103592
+ description="We help service teams turn daily operations into polished digital experiences."
103593
+ missionLabel="Our Mission"
103594
+ missionText="Make professional site building faster, clearer, and easier to maintain."
103595
+ mainImage={{ src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Team working together in a cafe" }}
103596
+ missionBackgroundImage={{ src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Workspace background for mission statement" }}
103597
+ features={[
103598
+ { icon: "lucide/files", title: "Reusable systems", description: "Blocks stay consistent across every page." },
103599
+ { icon: "lucide/settings", title: "Operational clarity", description: "Teams can update content without redesigning layouts." },
103600
+ { icon: "lucide/shield", title: "Reliable delivery", description: "Contracts protect AI-generated pages from unsafe content." },
103601
+ ]}
103602
+ />
103603
+ `.trim(),
103604
+ importantUsageNotes: "Use when a page needs a mission statement plus feature proof points. Supply both image objects when visual impact matters, and keep feature cards limited to short, concrete benefits. Do not use logos, favicons, or video URLs in image props.",
103605
+ usageRequirements: {
103606
+ requiredProps: ["title", "missionText", "features"],
103607
+ propConstraints: {
103608
+ title: { required: true, maxLength: 70 },
103609
+ description: { maxLength: 180 },
103610
+ missionLabel: { maxLength: 35 },
103611
+ missionText: { required: true, maxLength: 180 },
103612
+ features: { required: true, minItems: 3, maxItems: 3 },
103613
+ mainImage: { required: true },
103614
+ missionBackgroundImage: { required: true }
103615
+ },
103616
+ mediaSlots: {
103617
+ mainImage: imageSlot(
103618
+ "mainImage",
103619
+ "Primary about image beside the mission card.",
103620
+ ["feature", "hero"]
103621
+ ),
103622
+ missionBackgroundImage: imageSlot(
103623
+ "missionBackgroundImage",
103624
+ "Background photo behind the mission statement.",
103625
+ ["background", "feature"]
103626
+ )
103627
+ },
103628
+ requiresSiteCapabilities: aboutCapabilities("media_library"),
103629
+ notes: [ABOUT_MEDIA_NOTE]
103630
+ },
103631
+ exampleProps: {
103632
+ title: "About OpenSite",
103633
+ description: "We help service teams turn daily operations into polished digital experiences.",
103634
+ missionLabel: "Our Mission",
103635
+ missionText: "Make professional site building faster, clearer, and easier to maintain.",
103636
+ mainImage: aboutImage("Team working together in a cafe"),
103637
+ missionBackgroundImage: aboutImage(
103638
+ "Workspace background for mission statement"
103639
+ ),
103640
+ features: [
103641
+ {
103642
+ icon: "lucide/files",
103643
+ title: "Reusable systems",
103644
+ description: "Blocks stay consistent across every page."
103645
+ },
103646
+ {
103647
+ icon: "lucide/settings",
103648
+ title: "Operational clarity",
103649
+ description: "Teams can update content without redesigning layouts."
103650
+ },
103651
+ {
103652
+ icon: "lucide/shield",
103653
+ title: "Reliable delivery",
103654
+ description: "Contracts protect AI-generated pages from unsafe content."
103655
+ }
103656
+ ]
103657
+ }
103658
+ },
103659
+ "about-stats-showcase": {
103660
+ exampleUsage: `
103661
+ <AboutStatsShowcase
103662
+ title="Our Background"
103663
+ description="We help teams launch reliable digital experiences at scale."
103664
+ images={[
103665
+ { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Team workspace" },
103666
+ { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Planning session" },
103667
+ ]}
103668
+ stats={[
103669
+ { value: "21M", label: "Audience reach" },
103670
+ { value: "12+", label: "Years of expertise" },
103671
+ ]}
103672
+ benefits={[
103673
+ {
103674
+ image: { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Customer operations team" },
103675
+ stat: { value: "98%", label: "Retention", description: "Measured across supported accounts" },
103676
+ },
103677
+ ]}
103678
+ />
103679
+ `.trim(),
103680
+ importantUsageNotes: "Only use when metrics, social proof, and any testimonial-style content are sourced. Do not fabricate stats, company logos, testimonial quotes, authors, or roles. Image props must use absolute image URLs and must not receive video assets.",
103681
+ usageRequirements: {
103682
+ requiredProps: ["title", "stats"],
103683
+ propConstraints: {
103684
+ title: { required: true, maxLength: 70 },
103685
+ description: { maxLength: 180 },
103686
+ images: { minItems: 2, maxItems: 4 },
103687
+ stats: {
103688
+ required: true,
103689
+ minItems: 2,
103690
+ maxItems: 4,
103691
+ note: "Metrics must be sourced from the site or client data."
103692
+ },
103693
+ logos: {
103694
+ maxItems: 8,
103695
+ note: "Only include real customer or partner logos."
103696
+ },
103697
+ benefits: { maxItems: 3 },
103698
+ "benefits[].testimonial": {
103699
+ note: "Must be a real testimonial. Do not fabricate."
103700
+ }
103701
+ },
103702
+ mediaSlots: {
103703
+ "images[]": imageSlot(
103704
+ "images[]",
103705
+ "Hero showcase images.",
103706
+ ["feature", "gallery"]
103707
+ ),
103708
+ "logos[]": logoSlot("logos[]", "Trusted company logo."),
103709
+ "benefits[].image": imageSlot(
103710
+ "benefits[].image",
103711
+ "Benefit card image.",
103712
+ ["feature", "thumbnail"],
103713
+ "medium",
103714
+ false
103715
+ ),
103716
+ "benefits[].testimonial.logo": logoSlot(
103717
+ "benefits[].testimonial.logo",
103718
+ "Logo shown inside testimonial card."
103719
+ )
103720
+ },
103721
+ requiresSiteCapabilities: aboutCapabilities(
103722
+ "metrics_or_stats",
103723
+ "reviews_or_testimonials",
103724
+ "media_library"
103725
+ ),
103726
+ notes: [ABOUT_MEDIA_NOTE]
103727
+ },
103728
+ exampleProps: {
103729
+ title: "Our Background",
103730
+ description: "We help teams launch reliable digital experiences at scale.",
103731
+ images: [
103732
+ aboutImage("Team workspace"),
103733
+ aboutImage("Planning session")
103734
+ ],
103735
+ stats: [
103736
+ { value: "21M", label: "Audience reach" },
103737
+ { value: "12+", label: "Years of expertise" }
103738
+ ],
103739
+ benefits: [
103740
+ {
103741
+ image: aboutImage("Customer operations team"),
103742
+ stat: {
103743
+ value: "98%",
103744
+ label: "Retention",
103745
+ description: "Measured across supported accounts"
103746
+ }
103747
+ }
103748
+ ]
103749
+ }
103750
+ },
103751
+ "about-company-profile": {
103752
+ exampleUsage: `
103753
+ <AboutCompanyProfile
103754
+ title="A Team Built for Operational Clarity"
103755
+ description="We combine product craft and service operations experience to help brands move faster."
103756
+ mainImage={{ src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Team strategy session" }}
103757
+ secondaryImage={{ src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Workspace detail" }}
103758
+ breakout={{
103759
+ title: "Built for growing operators",
103760
+ description: "Reusable systems keep every location and campaign aligned.",
103761
+ action: { label: "Discover more", href: "/about", variant: "default" },
103762
+ }}
103763
+ achievements={[
103764
+ { label: "Customer sites launched", value: "300+" },
103765
+ { label: "Average satisfaction", value: "99%" },
103766
+ ]}
103767
+ />
103768
+ `.trim(),
103769
+ importantUsageNotes: "Use for credibility-oriented company profiles with sourced metrics and optional brand logos. Breakout actions must use the ActionConfig shape with label and href, not buttonText or buttonUrl. Image props must be image assets only.",
103770
+ usageRequirements: {
103771
+ requiredProps: ["title", "description", "mainImage"],
103772
+ propConstraints: {
103773
+ title: { required: true, maxLength: 80 },
103774
+ description: { required: true, maxLength: 220 },
103775
+ mainImage: { required: true },
103776
+ achievements: {
103777
+ minItems: 2,
103778
+ maxItems: 4,
103779
+ note: "Achievement metrics must be sourced."
103780
+ },
103781
+ companies: {
103782
+ maxItems: 8,
103783
+ note: "Only include real customer or partner logos."
103784
+ }
103785
+ },
103786
+ mediaSlots: {
103787
+ mainImage: imageSlot(
103788
+ "mainImage",
103789
+ "Primary company profile image.",
103790
+ ["feature", "hero"]
103791
+ ),
103792
+ secondaryImage: imageSlot(
103793
+ "secondaryImage",
103794
+ "Secondary supporting image.",
103795
+ ["feature", "thumbnail"],
103796
+ "medium",
103797
+ false
103798
+ ),
103799
+ "breakout.logo": logoSlot("breakout.logo", "Breakout card logo."),
103800
+ "companies[]": logoSlot("companies[]", "Customer or partner logo.")
103801
+ },
103802
+ requiresSiteCapabilities: aboutCapabilities(
103803
+ "metrics_or_stats",
103804
+ "media_library"
103805
+ ),
103806
+ notes: [ABOUT_MEDIA_NOTE]
103807
+ },
103808
+ exampleProps: {
103809
+ title: "A Team Built for Operational Clarity",
103810
+ description: "We combine product craft and service operations experience to help brands move faster.",
103811
+ mainImage: aboutImage("Team strategy session"),
103812
+ secondaryImage: aboutImage("Workspace detail"),
103813
+ breakout: {
103814
+ title: "Built for growing operators",
103815
+ description: "Reusable systems keep every location and campaign aligned.",
103816
+ action: { label: "Discover more", href: "/about", variant: "default" }
103817
+ },
103818
+ achievements: [
103819
+ { label: "Customer sites launched", value: "300+" },
103820
+ { label: "Average satisfaction", value: "99%" }
103821
+ ]
103822
+ }
103823
+ },
103824
+ "about-vision-gallery": {
103825
+ exampleUsage: `
103826
+ <AboutVisionGallery
103827
+ title="The Vision Behind Our Work"
103828
+ subtitle="We believe great digital systems should feel simple to run."
103829
+ images={[
103830
+ { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Collaborative product session" },
103831
+ { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Team reviewing site designs" },
103832
+ { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Customer experience planning" },
103833
+ ]}
103834
+ primarySectionTitle="Our Vision"
103835
+ primarySectionContent="Give every operator the ability to publish excellent customer experiences without technical bottlenecks."
103836
+ secondarySectionTitle="How We Build"
103837
+ secondarySectionContent="We turn reusable components, semantic contracts, and real content into maintainable sites."
103838
+ ctaTitle="Part of Our Global Team"
103839
+ ctaAction={{ label: "Get to know the team", href: "/team", variant: "default" }}
103840
+ />
103841
+ `.trim(),
103842
+ importantUsageNotes: "Use when a brand has a clear vision story and enough supporting imagery for a gallery. Keep gallery images cohesive and source-backed. Do not use logo, favicon, or video assets in the gallery image props.",
103843
+ usageRequirements: {
103844
+ requiredProps: ["title", "images"],
103845
+ propConstraints: {
103846
+ title: { required: true, maxLength: 80 },
103847
+ subtitle: { maxLength: 160 },
103848
+ images: { required: true, minItems: 3, maxItems: 5 },
103849
+ primarySectionContent: { maxLength: 260 },
103850
+ secondarySectionContent: { maxLength: 260 }
103851
+ },
103852
+ mediaSlots: {
103853
+ "images[]": imageSlot(
103854
+ "images[]",
103855
+ "Vision gallery image.",
103856
+ ["gallery", "feature"]
103857
+ )
103858
+ },
103859
+ requiresSiteCapabilities: aboutCapabilities("media_library"),
103860
+ notes: [ABOUT_MEDIA_NOTE]
103861
+ },
103862
+ exampleProps: {
103863
+ title: "The Vision Behind Our Work",
103864
+ subtitle: "We believe great digital systems should feel simple to run.",
103865
+ images: [
103866
+ aboutImage("Collaborative product session"),
103867
+ aboutImage("Team reviewing site designs"),
103868
+ aboutImage("Customer experience planning")
103869
+ ],
103870
+ primarySectionTitle: "Our Vision",
103871
+ primarySectionContent: "Give every operator the ability to publish excellent customer experiences without technical bottlenecks.",
103872
+ secondarySectionTitle: "How We Build",
103873
+ secondarySectionContent: "We turn reusable components, semantic contracts, and real content into maintainable sites.",
103874
+ ctaTitle: "Part of Our Global Team",
103875
+ ctaAction: {
103876
+ label: "Get to know the team",
103877
+ href: "/team",
103878
+ variant: "default"
103879
+ }
103880
+ }
103881
+ },
103882
+ "about-developer-story": {
103883
+ exampleUsage: `
103884
+ <AboutDeveloperStory
103885
+ title="Developer-Focused Solutions for Modern Teams"
103886
+ description="We build tools that developers and operators can both trust."
103887
+ actions={[
103888
+ { label: "Get Started", href: "/contact", variant: "default" },
103889
+ { label: "View Docs", href: "/docs", variant: "outline" },
103890
+ ]}
103891
+ stats={[
103892
+ { value: "200+", label: "Projects completed" },
103893
+ { value: "50+", label: "Integrated workflows" },
103894
+ ]}
103895
+ storyTitle="Built from the work itself"
103896
+ storyContent="Our platform grew from years of solving the same operational problems for real teams."
103897
+ storyImage={{ src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Developer workspace" }}
103898
+ />
103899
+ `.trim(),
103900
+ importantUsageNotes: "Use for technical about pages with real metrics and a credible product story. Actions must use ActionConfig objects. Any stats or logos must come from sourced site data, and storyImage must be an image asset only.",
103901
+ usageRequirements: {
103902
+ requiredProps: ["title", "description", "storyImage"],
103903
+ propConstraints: {
103904
+ title: { required: true, maxLength: 80 },
103905
+ description: { required: true, maxLength: 190 },
103906
+ actions: { maxItems: 2 },
103907
+ stats: {
103908
+ minItems: 2,
103909
+ maxItems: 4,
103910
+ note: "Stats must be sourced."
103911
+ },
103912
+ logos: {
103913
+ maxItems: 8,
103914
+ note: "Only include real customer or partner logos."
103915
+ },
103916
+ storyImage: { required: true }
103917
+ },
103918
+ mediaSlots: {
103919
+ storyImage: imageSlot(
103920
+ "storyImage",
103921
+ "Story section image.",
103922
+ ["feature", "hero"]
103923
+ ),
103924
+ "logos[]": logoSlot("logos[]", "Customer or partner logo.")
103925
+ },
103926
+ requiresSiteCapabilities: aboutCapabilities(
103927
+ "metrics_or_stats",
103928
+ "media_library"
103929
+ ),
103930
+ notes: [ABOUT_MEDIA_NOTE]
103931
+ },
103932
+ exampleProps: {
103933
+ title: "Developer-Focused Solutions for Modern Teams",
103934
+ description: "We build tools that developers and operators can both trust.",
103935
+ actions: [
103936
+ { label: "Get Started", href: "/contact", variant: "default" },
103937
+ { label: "View Docs", href: "/docs", variant: "outline" }
103938
+ ],
103939
+ stats: [
103940
+ { value: "200+", label: "Projects completed" },
103941
+ { value: "50+", label: "Integrated workflows" }
103942
+ ],
103943
+ storyTitle: "Built from the work itself",
103944
+ storyContent: "Our platform grew from years of solving the same operational problems for real teams.",
103945
+ storyImage: aboutImage("Developer workspace")
103946
+ }
103947
+ },
103948
+ "about-story-gallery": {
103949
+ exampleUsage: `
103950
+ <AboutStoryGallery
103951
+ title="Our Story"
103952
+ description="We started with a simple idea: make high-quality site operations easier for every team."
103953
+ images={[
103954
+ { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Early team workspace" },
103955
+ { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Team collaborating on product direction" },
103956
+ { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Operations planning board" },
103957
+ ]}
103958
+ />
103959
+ `.trim(),
103960
+ importantUsageNotes: "Use for concise origin stories with a small image gallery. Provide real, relevant gallery images with descriptive alt text. Do not use logos, favicons, or video URLs in images[].",
103961
+ usageRequirements: {
103962
+ requiredProps: ["title", "description", "images"],
103963
+ propConstraints: {
103964
+ title: { required: true, maxLength: 70 },
103965
+ description: { required: true, maxLength: 220 },
103966
+ images: { required: true, minItems: 3, maxItems: 5 }
103967
+ },
103968
+ mediaSlots: {
103969
+ "images[]": imageSlot(
103970
+ "images[]",
103971
+ "Story gallery image.",
103972
+ ["gallery", "feature"]
103973
+ )
103974
+ },
103975
+ requiresSiteCapabilities: aboutCapabilities("media_library"),
103976
+ notes: [ABOUT_MEDIA_NOTE]
103977
+ },
103978
+ exampleProps: {
103979
+ title: "Our Story",
103980
+ description: "We started with a simple idea: make high-quality site operations easier for every team.",
103981
+ images: [
103982
+ aboutImage("Early team workspace"),
103983
+ aboutImage("Team collaborating on product direction"),
103984
+ aboutImage("Operations planning board")
103985
+ ]
103986
+ }
103987
+ },
103988
+ "about-streamline-team": {
103989
+ exampleUsage: `
103990
+ <AboutStreamlineTeam
103991
+ title="Streamline Your Workflow"
103992
+ description="Our platform helps teams work smarter without losing creative control."
103993
+ primaryImage={{ src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Team workflow planning" }}
103994
+ secondaryImage={{ src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Detailed product planning session" }}
103995
+ teamTitle="Join the team building simpler operations"
103996
+ teamDescription="We look for pragmatic builders who care about durable systems."
103997
+ actions={[{ label: "View Open Roles", href: "/careers", variant: "default" }]}
103998
+ features={[
103999
+ { icon: "lucide/zap", title: "Faster launches", description: "Ship polished pages in less time." },
104000
+ { icon: "lucide/shield", title: "Reliable systems", description: "Keep content aligned as sites grow." },
104001
+ ]}
104002
+ />
104003
+ `.trim(),
104004
+ importantUsageNotes: "Use for workflow-focused about or recruiting sections with two supporting images and a concise team CTA. The team CTA should not imply open roles unless the site has that content. Image props must be image assets only.",
104005
+ usageRequirements: {
104006
+ requiredProps: ["title", "description", "primaryImage"],
104007
+ propConstraints: {
104008
+ title: { required: true, maxLength: 70 },
104009
+ description: { required: true, maxLength: 180 },
104010
+ primaryImage: { required: true },
104011
+ features: { minItems: 2, maxItems: 4 },
104012
+ actions: { maxItems: 2 }
104013
+ },
104014
+ mediaSlots: {
104015
+ primaryImage: imageSlot(
104016
+ "primaryImage",
104017
+ "Primary overlapping team/workflow image.",
104018
+ ["feature", "hero"]
104019
+ ),
104020
+ secondaryImage: imageSlot(
104021
+ "secondaryImage",
104022
+ "Secondary overlapping team/workflow image.",
104023
+ ["feature", "thumbnail"],
104024
+ "medium",
104025
+ false
104026
+ )
104027
+ },
104028
+ requiresSiteCapabilities: aboutCapabilities("media_library"),
104029
+ notes: [ABOUT_MEDIA_NOTE]
104030
+ },
104031
+ exampleProps: {
104032
+ title: "Streamline Your Workflow",
104033
+ description: "Our platform helps teams work smarter without losing creative control.",
104034
+ primaryImage: aboutImage("Team workflow planning"),
104035
+ secondaryImage: aboutImage("Detailed product planning session"),
104036
+ teamTitle: "Join the team building simpler operations",
104037
+ teamDescription: "We look for pragmatic builders who care about durable systems.",
104038
+ actions: [
104039
+ { label: "View Open Roles", href: "/careers", variant: "default" }
104040
+ ],
104041
+ features: [
104042
+ {
104043
+ icon: "lucide/zap",
104044
+ title: "Faster launches",
104045
+ description: "Ship polished pages in less time."
104046
+ },
104047
+ {
104048
+ icon: "lucide/shield",
104049
+ title: "Reliable systems",
104050
+ description: "Keep content aligned as sites grow."
104051
+ }
104052
+ ]
104053
+ }
104054
+ },
104055
+ "about-developer-profile": {
104056
+ exampleUsage: `
104057
+ <AboutDeveloperProfile
104058
+ name="Alex Johnson"
104059
+ role="Full-Stack Developer"
104060
+ bio="Alex builds maintainable product systems for growing service teams."
104061
+ avatar={{ src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Alex Johnson profile portrait" }}
104062
+ skills={["React", "TypeScript", "Rails", "PostgreSQL"]}
104063
+ skillsTitle="Core Skills"
104064
+ socialLinks={[{ href: "https://github.com/opensite-ai", label: "GitHub" }]}
104065
+ actions={[{ label: "Contact Alex", href: "/contact", variant: "default" }]}
104066
+ />
104067
+ `.trim(),
104068
+ importantUsageNotes: "Use only when the site has a real person, founder, or team member profile. Do not invent a person's name, role, bio, skills, or social links. Avatar must be a profile image, not a logo, favicon, or video URL.",
104069
+ usageRequirements: {
104070
+ requiredProps: ["name", "role", "bio", "avatar"],
104071
+ propConstraints: {
104072
+ name: { required: true, maxLength: 60 },
104073
+ role: { required: true, maxLength: 80 },
104074
+ bio: { required: true, maxLength: 260 },
104075
+ avatar: { required: true },
104076
+ skills: { minItems: 3, maxItems: 8 },
104077
+ socialLinks: { maxItems: 4 },
104078
+ actions: { maxItems: 2 }
104079
+ },
104080
+ mediaSlots: {
104081
+ avatar: imageSlot(
104082
+ "avatar",
104083
+ "Profile portrait for the person.",
104084
+ ["profile", "avatar"],
104085
+ "medium",
104086
+ true,
104087
+ "1:1"
104088
+ )
104089
+ },
104090
+ requiresSiteCapabilities: aboutCapabilities("team_members", "media_library"),
104091
+ notes: [ABOUT_MEDIA_NOTE]
104092
+ },
104093
+ exampleProps: {
104094
+ name: "Alex Johnson",
104095
+ role: "Full-Stack Developer",
104096
+ bio: "Alex builds maintainable product systems for growing service teams.",
104097
+ avatar: aboutImage("Alex Johnson profile portrait"),
104098
+ skills: ["React", "TypeScript", "Rails", "PostgreSQL"],
104099
+ skillsTitle: "Core Skills",
104100
+ socialLinks: [
104101
+ { href: "https://github.com/opensite-ai", label: "GitHub" }
104102
+ ],
104103
+ actions: [
104104
+ { label: "Contact Alex", href: "/contact", variant: "default" }
104105
+ ]
104106
+ }
104107
+ },
104108
+ "about-startup-team": {
104109
+ exampleUsage: `
104110
+ <AboutStartupTeam
104111
+ title="Building the Future of Site Operations"
104112
+ description="We are a team of product builders, operators, and customer experience specialists."
104113
+ sidebarLinks={[
104114
+ { label: "Leadership", value: "leadership" },
104115
+ { label: "Product", value: "product" },
104116
+ ]}
104117
+ teamTitle="Meet the Team"
104118
+ teamMembers={[
104119
+ {
104120
+ name: "Sarah Chen",
104121
+ role: "CEO and Co-Founder",
104122
+ avatar: { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Sarah Chen portrait" },
104123
+ tab: "leadership",
104124
+ },
104125
+ {
104126
+ name: "Marcus Johnson",
104127
+ role: "Product Lead",
104128
+ avatar: { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Marcus Johnson portrait" },
104129
+ tab: "product",
104130
+ },
104131
+ ]}
104132
+ />
104133
+ `.trim(),
104134
+ importantUsageNotes: "Use only when real team member data is available. Do not fabricate names, roles, avatars, or social links. Sidebar link values must match teamMembers[].tab values. Avatars must be profile images only.",
104135
+ usageRequirements: {
104136
+ requiredProps: ["title", "teamMembers"],
104137
+ propConstraints: {
104138
+ title: { required: true, maxLength: 80 },
104139
+ description: { maxLength: 220 },
104140
+ sidebarLinks: { minItems: 1, maxItems: 6 },
104141
+ teamMembers: {
104142
+ required: true,
104143
+ minItems: 2,
104144
+ maxItems: 12,
104145
+ note: "Must come from real team member data."
104146
+ },
104147
+ "teamMembers[].tab": {
104148
+ note: "When present, must match a sidebarLinks[].value."
104149
+ }
104150
+ },
104151
+ mediaSlots: {
104152
+ "teamMembers[].avatar": imageSlot(
104153
+ "teamMembers[].avatar",
104154
+ "Team member portrait.",
104155
+ ["profile", "avatar"],
104156
+ "medium",
104157
+ true,
104158
+ "1:1"
104159
+ )
104160
+ },
104161
+ requiresSiteCapabilities: aboutCapabilities("team_members", "media_library"),
104162
+ notes: [ABOUT_MEDIA_NOTE]
104163
+ },
104164
+ exampleProps: {
104165
+ title: "Building the Future of Site Operations",
104166
+ description: "We are a team of product builders, operators, and customer experience specialists.",
104167
+ sidebarLinks: [
104168
+ { label: "Leadership", value: "leadership" },
104169
+ { label: "Product", value: "product" }
104170
+ ],
104171
+ teamTitle: "Meet the Team",
104172
+ teamMembers: [
104173
+ {
104174
+ name: "Sarah Chen",
104175
+ role: "CEO and Co-Founder",
104176
+ avatar: aboutImage("Sarah Chen portrait"),
104177
+ tab: "leadership"
104178
+ },
104179
+ {
104180
+ name: "Marcus Johnson",
104181
+ role: "Product Lead",
104182
+ avatar: aboutImage("Marcus Johnson portrait"),
104183
+ tab: "product"
104184
+ }
104185
+ ]
104186
+ }
104187
+ },
104188
+ "about-minimal-story": {
104189
+ exampleUsage: `
104190
+ <AboutMinimalStory
104191
+ title="Our Story"
104192
+ content="Every durable product starts with a clear operational problem and a team willing to solve it carefully."
104193
+ author={{
104194
+ name: "Jordan Mitchell",
104195
+ role: "Founder and CEO",
104196
+ avatar: { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Jordan Mitchell portrait" },
104197
+ }}
104198
+ featuredImage={{ src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Founder working with the team" }}
104199
+ />
104200
+ `.trim(),
104201
+ importantUsageNotes: "Use for sourced founder, author, or origin stories. Do not invent author identity or biographical details. Author avatars and featured images must use absolute image URLs and must not be logos, favicons, or video assets.",
104202
+ usageRequirements: {
104203
+ requiredProps: ["title", "content", "author"],
104204
+ propConstraints: {
104205
+ title: { required: true, maxLength: 80 },
104206
+ content: { required: true, maxLength: 360 },
104207
+ author: {
104208
+ required: true,
104209
+ note: "Author identity must be source-backed."
104210
+ }
104211
+ },
104212
+ mediaSlots: {
104213
+ "author.avatar": imageSlot(
104214
+ "author.avatar",
104215
+ "Author or founder profile image.",
104216
+ ["profile", "avatar"],
104217
+ "small",
104218
+ false,
104219
+ "1:1"
104220
+ ),
104221
+ featuredImage: imageSlot(
104222
+ "featuredImage",
104223
+ "Optional featured story image.",
104224
+ ["feature", "hero"],
104225
+ "large",
104226
+ false
104227
+ )
104228
+ },
104229
+ requiresSiteCapabilities: aboutCapabilities("team_members", "media_library"),
104230
+ notes: [ABOUT_MEDIA_NOTE]
104231
+ },
104232
+ exampleProps: {
104233
+ title: "Our Story",
104234
+ content: "Every durable product starts with a clear operational problem and a team willing to solve it carefully.",
104235
+ author: {
104236
+ name: "Jordan Mitchell",
104237
+ role: "Founder and CEO",
104238
+ avatar: aboutImage("Jordan Mitchell portrait")
104239
+ },
104240
+ featuredImage: aboutImage("Founder working with the team")
104241
+ }
104242
+ },
104243
+ "about-story-hero": {
104244
+ exampleUsage: `
104245
+ <AboutStoryHero
104246
+ title="Our Story"
104247
+ subtitle="Building the future, one practical system at a time"
104248
+ content="We started with a bold idea: customer-facing sites should be easier to operate after launch."
104249
+ heroImage={{ src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Team collaborating in a workspace" }}
104250
+ teamInfo={{
104251
+ title: "50+ Team Members",
104252
+ description: "Working across product, support, and customer operations",
104253
+ }}
104254
+ />
104255
+ `.trim(),
104256
+ importantUsageNotes: "Use for about-page hero storytelling with a real image and source-backed team information. Do not fabricate team size or geographic claims. heroImage must be an image asset only.",
104257
+ usageRequirements: {
104258
+ requiredProps: ["title", "content", "heroImage"],
104259
+ propConstraints: {
104260
+ title: { required: true, maxLength: 80 },
104261
+ subtitle: { maxLength: 120 },
104262
+ content: { required: true, maxLength: 320 },
104263
+ heroImage: { required: true },
104264
+ teamInfo: {
104265
+ note: "Team facts must be source-backed if provided."
104266
+ }
104267
+ },
104268
+ mediaSlots: {
104269
+ heroImage: imageSlot(
104270
+ "heroImage",
104271
+ "Large story hero image.",
104272
+ ["hero", "feature"]
104273
+ )
104274
+ },
104275
+ requiresSiteCapabilities: aboutCapabilities("team_members", "media_library"),
104276
+ notes: [ABOUT_MEDIA_NOTE]
104277
+ },
104278
+ exampleProps: {
104279
+ title: "Our Story",
104280
+ subtitle: "Building the future, one practical system at a time",
104281
+ content: "We started with a bold idea: customer-facing sites should be easier to operate after launch.",
104282
+ heroImage: aboutImage("Team collaborating in a workspace"),
104283
+ teamInfo: {
104284
+ title: "50+ Team Members",
104285
+ description: "Working across product, support, and customer operations"
104286
+ }
104287
+ }
104288
+ },
104289
+ "about-stats-sidebar": {
104290
+ exampleUsage: `
104291
+ <AboutStatsSidebar
104292
+ title="Why Choose Us"
104293
+ description="We have built a platform that scales with your operational needs."
104294
+ stats={[
104295
+ { icon: "lucide/users", value: "10M+", label: "Visitors supported" },
104296
+ { icon: "lucide/globe", value: "150+", label: "Markets served" },
104297
+ ]}
104298
+ features={[
104299
+ { icon: "lucide/zap", title: "Fast launch cycles", description: "Teams publish updates without waiting on engineering." },
104300
+ { icon: "lucide/lock", title: "Managed consistency", description: "Shared blocks keep every page aligned." },
104301
+ ]}
104302
+ />
104303
+ `.trim(),
104304
+ importantUsageNotes: "Use only when stats are real and source-backed. Do not invent large numbers, geographic reach, or performance claims. Feature cards should explain the metrics rather than introduce unrelated benefits.",
104305
+ usageRequirements: {
104306
+ requiredProps: ["title", "stats"],
104307
+ propConstraints: {
104308
+ title: { required: true, maxLength: 70 },
104309
+ description: { maxLength: 180 },
104310
+ stats: {
104311
+ required: true,
104312
+ minItems: 2,
104313
+ maxItems: 6,
104314
+ note: "Stats must be sourced."
104315
+ },
104316
+ features: { minItems: 2, maxItems: 4 }
104317
+ },
104318
+ mediaSlots: {},
104319
+ requiresSiteCapabilities: aboutCapabilities("metrics_or_stats"),
104320
+ notes: ["Do not fabricate metrics or quantified claims."]
104321
+ },
104322
+ exampleProps: {
104323
+ title: "Why Choose Us",
104324
+ description: "We have built a platform that scales with your operational needs.",
104325
+ stats: [
104326
+ { icon: "lucide/users", value: "10M+", label: "Visitors supported" },
104327
+ { icon: "lucide/globe", value: "150+", label: "Markets served" }
104328
+ ],
104329
+ features: [
104330
+ {
104331
+ icon: "lucide/zap",
104332
+ title: "Fast launch cycles",
104333
+ description: "Teams publish updates without waiting on engineering."
104334
+ },
104335
+ {
104336
+ icon: "lucide/lock",
104337
+ title: "Managed consistency",
104338
+ description: "Shared blocks keep every page aligned."
104339
+ }
104340
+ ]
104341
+ }
104342
+ },
104343
+ "about-interactive-tabs": {
104344
+ exampleUsage: `
104345
+ <AboutInteractiveTabs
104346
+ title="Discover Our Story"
104347
+ subtitle="Learn more about how we work and what we value."
104348
+ tabs={[
104349
+ {
104350
+ id: "work",
104351
+ label: "Our Work",
104352
+ content: {
104353
+ title: "Crafting Digital Experiences",
104354
+ description: "We create maintainable, high-performing customer experiences.",
104355
+ image: { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Team reviewing digital experience work" },
104356
+ },
104357
+ },
104358
+ {
104359
+ id: "process",
104360
+ label: "Our Process",
104361
+ content: {
104362
+ title: "Built Around Real Operations",
104363
+ description: "Every workflow starts from the way teams already work.",
104364
+ image: { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Team process planning session" },
104365
+ },
104366
+ },
104367
+ ]}
104368
+ />
104369
+ `.trim(),
104370
+ importantUsageNotes: "Use for two to five distinct company aspects such as work, process, values, or culture. Each tab id must be unique and stable. Tab images must be image assets only and should match the tab content.",
104371
+ usageRequirements: {
104372
+ requiredProps: ["title", "tabs"],
104373
+ propConstraints: {
104374
+ title: { required: true, maxLength: 70 },
104375
+ subtitle: { maxLength: 150 },
104376
+ tabs: { required: true, minItems: 2, maxItems: 5 },
104377
+ "tabs[].id": {
104378
+ required: true,
104379
+ note: "Must be unique within the tabs array."
104380
+ },
104381
+ "tabs[].content.title": { required: true, maxLength: 80 },
104382
+ "tabs[].content.description": { required: true, maxLength: 220 }
104383
+ },
104384
+ mediaSlots: {
104385
+ "tabs[].content.image": imageSlot(
104386
+ "tabs[].content.image",
104387
+ "Tab content image.",
104388
+ ["feature", "gallery"],
104389
+ "medium",
104390
+ false
104391
+ )
104392
+ },
104393
+ requiresSiteCapabilities: aboutCapabilities("media_library"),
104394
+ notes: [ABOUT_MEDIA_NOTE]
104395
+ },
104396
+ exampleProps: {
104397
+ title: "Discover Our Story",
104398
+ subtitle: "Learn more about how we work and what we value.",
104399
+ tabs: [
104400
+ {
104401
+ id: "work",
104402
+ label: "Our Work",
104403
+ content: {
104404
+ title: "Crafting Digital Experiences",
104405
+ description: "We create maintainable, high-performing customer experiences.",
104406
+ image: aboutImage("Team reviewing digital experience work")
104407
+ }
104408
+ },
104409
+ {
104410
+ id: "process",
104411
+ label: "Our Process",
104412
+ content: {
104413
+ title: "Built Around Real Operations",
104414
+ description: "Every workflow starts from the way teams already work.",
104415
+ image: aboutImage("Team process planning session")
104416
+ }
104417
+ }
104418
+ ]
104419
+ }
104420
+ },
104421
+ "about-mission-dual-image": {
104422
+ exampleUsage: `
104423
+ <AboutMissionDualImage
104424
+ missionTitle="Our Mission"
104425
+ missionContent="To make professional digital operations easier for every growing team."
104426
+ visionTitle="Our Vision"
104427
+ visionContent="A world where every business can keep its customer experience current."
104428
+ primaryImage={{ src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Team mission planning" }}
104429
+ secondaryImage={{ src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Product workshop" }}
104430
+ actions={[{ label: "Join Our Journey", href: "/careers", variant: "default" }]}
104431
+ />
104432
+ `.trim(),
104433
+ importantUsageNotes: "Use when both mission and vision copy are available. Avoid vague mission statements; keep each content block specific. primaryImage and secondaryImage must be image assets only.",
104434
+ usageRequirements: {
104435
+ requiredProps: ["missionTitle", "missionContent", "visionTitle", "visionContent"],
104436
+ propConstraints: {
104437
+ missionTitle: { required: true, maxLength: 70 },
104438
+ missionContent: { required: true, maxLength: 240 },
104439
+ visionTitle: { required: true, maxLength: 70 },
104440
+ visionContent: { required: true, maxLength: 240 },
104441
+ actions: { maxItems: 2 }
104442
+ },
104443
+ mediaSlots: {
104444
+ primaryImage: imageSlot(
104445
+ "primaryImage",
104446
+ "Primary mission/vision image.",
104447
+ ["feature", "hero"],
104448
+ "large",
104449
+ false
104450
+ ),
104451
+ secondaryImage: imageSlot(
104452
+ "secondaryImage",
104453
+ "Secondary mission/vision image.",
104454
+ ["feature", "thumbnail"],
104455
+ "medium",
104456
+ false
104457
+ )
104458
+ },
104459
+ requiresSiteCapabilities: aboutCapabilities("media_library"),
104460
+ notes: [ABOUT_MEDIA_NOTE]
104461
+ },
104462
+ exampleProps: {
104463
+ missionTitle: "Our Mission",
104464
+ missionContent: "To make professional digital operations easier for every growing team.",
104465
+ visionTitle: "Our Vision",
104466
+ visionContent: "A world where every business can keep its customer experience current.",
104467
+ primaryImage: aboutImage("Team mission planning"),
104468
+ secondaryImage: aboutImage("Product workshop"),
104469
+ actions: [
104470
+ { label: "Join Our Journey", href: "/careers", variant: "default" }
104471
+ ]
104472
+ }
104473
+ },
104474
+ "about-story-expertise": {
104475
+ exampleUsage: `
104476
+ <AboutStoryExpertise
104477
+ eyebrow="About Our Practice"
104478
+ heading="We turn operating complexity into clear digital systems."
104479
+ storyParagraphs={[
104480
+ "Our team works where brand, operations, and customer experience meet.",
104481
+ "Every engagement starts with the source material that makes a business distinct.",
104482
+ ]}
104483
+ actions={[
104484
+ { label: "Start a Project", href: "/contact", variant: "default" },
104485
+ { label: "See Our Work", href: "/work", variant: "outline" },
104486
+ ]}
104487
+ image={{ src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Team reviewing customer experience systems" }}
104488
+ highlight={{ label: "Trusted process", title: "Built around source-backed content", description: "Contracts keep generated pages accurate." }}
104489
+ expertiseAreas={[
104490
+ { title: "Content systems", description: "Reusable structures for every page." },
104491
+ { title: "AI workflows", description: "Guided generation with clear guardrails." },
104492
+ ]}
104493
+ />
104494
+ `.trim(),
104495
+ importantUsageNotes: "Use for trust-building story sections that combine narrative, a single supporting image, and capability tiles. Do not fabricate capabilities the business does not offer. The image prop must be an image asset only.",
104496
+ usageRequirements: {
104497
+ requiredProps: ["heading", "storyParagraphs", "image"],
104498
+ propConstraints: {
104499
+ eyebrow: { maxLength: 40 },
104500
+ heading: { required: true, maxLength: 90 },
104501
+ storyParagraphs: { required: true, minItems: 2, maxItems: 3 },
104502
+ actions: { maxItems: 2 },
104503
+ image: { required: true },
104504
+ expertiseAreas: { minItems: 2, maxItems: 4 }
104505
+ },
104506
+ mediaSlots: {
104507
+ image: imageSlot(
104508
+ "image",
104509
+ "Story and expertise image card.",
104510
+ ["feature", "hero"]
104511
+ )
104512
+ },
104513
+ requiresSiteCapabilities: aboutCapabilities("media_library"),
104514
+ notes: [ABOUT_MEDIA_NOTE]
104515
+ },
104516
+ exampleProps: {
104517
+ eyebrow: "About Our Practice",
104518
+ heading: "We turn operating complexity into clear digital systems.",
104519
+ storyParagraphs: [
104520
+ "Our team works where brand, operations, and customer experience meet.",
104521
+ "Every engagement starts with the source material that makes a business distinct."
104522
+ ],
104523
+ actions: [
104524
+ { label: "Start a Project", href: "/contact", variant: "default" },
104525
+ { label: "See Our Work", href: "/work", variant: "outline" }
104526
+ ],
104527
+ image: aboutImage("Team reviewing customer experience systems"),
104528
+ highlight: {
104529
+ label: "Trusted process",
104530
+ title: "Built around source-backed content",
104531
+ description: "Contracts keep generated pages accurate."
104532
+ },
104533
+ expertiseAreas: [
104534
+ {
104535
+ title: "Content systems",
104536
+ description: "Reusable structures for every page."
104537
+ },
104538
+ {
104539
+ title: "AI workflows",
104540
+ description: "Guided generation with clear guardrails."
104541
+ }
104542
+ ]
104543
+ }
104544
+ },
104545
+ "about-network-spotlight": {
104546
+ exampleUsage: `
104547
+ <AboutNetworkSpotlight
104548
+ eyebrow="Partner Network"
104549
+ heading="A practical network for teams building better customer experiences."
104550
+ description="We work with operators, designers, and implementation partners who care about durable systems."
104551
+ highlights={[
104552
+ "Shared delivery standards across every project",
104553
+ "Practical support for ongoing site operations",
104554
+ "Source-backed content and measurable outcomes",
104555
+ ]}
104556
+ actions={[
104557
+ { label: "Become a Partner", href: "/partners", variant: "default" },
104558
+ { label: "Explore the Network", href: "/network", variant: "outline" },
104559
+ ]}
104560
+ image={{ src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Partner team workshop" }}
104561
+ spotlightCard={{ icon: "lucide/network", label: "Partner reach", title: "Built for collaboration", description: "A shared system keeps every project aligned." }}
104562
+ />
104563
+ `.trim(),
104564
+ importantUsageNotes: "Use for partner, alliance, or community program spotlights with clear source-backed claims. Avoid implying a partner network exists unless the business has one. The image prop must be an image asset only.",
104565
+ usageRequirements: {
104566
+ requiredProps: ["heading", "description", "image"],
104567
+ propConstraints: {
104568
+ eyebrow: { maxLength: 40 },
104569
+ heading: { required: true, maxLength: 90 },
104570
+ description: { required: true, maxLength: 220 },
104571
+ highlights: { minItems: 2, maxItems: 4 },
104572
+ actions: { maxItems: 2 },
104573
+ image: { required: true }
104574
+ },
104575
+ mediaSlots: {
104576
+ image: imageSlot(
104577
+ "image",
104578
+ "Network spotlight image.",
104579
+ ["feature", "hero"]
104580
+ )
104581
+ },
104582
+ requiresSiteCapabilities: aboutCapabilities("media_library"),
104583
+ notes: [ABOUT_MEDIA_NOTE]
104584
+ },
104585
+ exampleProps: {
104586
+ eyebrow: "Partner Network",
104587
+ heading: "A practical network for teams building better customer experiences.",
104588
+ description: "We work with operators, designers, and implementation partners who care about durable systems.",
104589
+ highlights: [
104590
+ "Shared delivery standards across every project",
104591
+ "Practical support for ongoing site operations",
104592
+ "Source-backed content and measurable outcomes"
104593
+ ],
104594
+ actions: [
104595
+ { label: "Become a Partner", href: "/partners", variant: "default" },
104596
+ { label: "Explore the Network", href: "/network", variant: "outline" }
104597
+ ],
104598
+ image: aboutImage("Partner team workshop"),
104599
+ spotlightCard: {
104600
+ icon: "lucide/network",
104601
+ label: "Partner reach",
104602
+ title: "Built for collaboration",
104603
+ description: "A shared system keeps every project aligned."
104604
+ }
104605
+ }
104606
+ },
104607
+ "about-location-info-hero": {
104608
+ exampleUsage: `
104609
+ <AboutLocationInfoHero
104610
+ headline="Visit Our Flagship Workspace"
104611
+ address="123 Market Street, Phoenix, AZ"
104612
+ addressHref="https://maps.google.com/?q=123+Market+Street+Phoenix+AZ"
104613
+ phone="(555) 014-8821"
104614
+ phoneHref="tel:+15550148821"
104615
+ actions={[{ label: "Get Directions", href: "/locations", variant: "default" }]}
104616
+ hoursSections={[
104617
+ { label: "Weekdays", hours: [{ day: "Mon-Fri", time: "9:00 AM - 6:00 PM" }] },
104618
+ { label: "Weekend", hours: [{ day: "Sat", time: "10:00 AM - 2:00 PM" }] },
104619
+ ]}
104620
+ images={[
104621
+ { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Flagship workspace interior" },
104622
+ { src: "${ABOUT_EXAMPLE_IMAGE_URL}", alt: "Team meeting area" },
104623
+ ]}
104624
+ />
104625
+ `.trim(),
104626
+ importantUsageNotes: "Use only when contact details, hours, and location facts are source-backed. Do not fabricate addresses, phone numbers, or business hours. images[] must contain image assets only, never logos, favicons, or videos.",
104627
+ usageRequirements: {
104628
+ requiredProps: ["headline", "address", "phone", "hoursSections", "images"],
104629
+ propConstraints: {
104630
+ headline: { required: true, maxLength: 80 },
104631
+ address: {
104632
+ required: true,
104633
+ note: "Must be source-backed contact information."
104634
+ },
104635
+ phone: {
104636
+ required: true,
104637
+ note: "Must be source-backed contact information."
104638
+ },
104639
+ hoursSections: { required: true, minItems: 1, maxItems: 4 },
104640
+ images: { required: true, minItems: 1, maxItems: 2 },
104641
+ actions: { maxItems: 2 }
104642
+ },
104643
+ mediaSlots: {
104644
+ "images[]": imageSlot(
104645
+ "images[]",
104646
+ "Location showcase image.",
104647
+ ["feature", "hero"]
104648
+ )
104649
+ },
104650
+ requiresSiteCapabilities: aboutCapabilities("contact_info", "media_library"),
104651
+ notes: [ABOUT_MEDIA_NOTE, "Location and hours data must be sourced."]
104652
+ },
104653
+ exampleProps: {
104654
+ headline: "Visit Our Flagship Workspace",
104655
+ address: "123 Market Street, Phoenix, AZ",
104656
+ addressHref: "https://maps.google.com/?q=123+Market+Street+Phoenix+AZ",
104657
+ phone: "(555) 014-8821",
104658
+ phoneHref: "tel:+15550148821",
104659
+ actions: [
104660
+ { label: "Get Directions", href: "/locations", variant: "default" }
104661
+ ],
104662
+ hoursSections: [
104663
+ {
104664
+ label: "Weekdays",
104665
+ hours: [{ day: "Mon-Fri", time: "9:00 AM - 6:00 PM" }]
104666
+ },
104667
+ {
104668
+ label: "Weekend",
104669
+ hours: [{ day: "Sat", time: "10:00 AM - 2:00 PM" }]
104670
+ }
104671
+ ],
104672
+ images: [
104673
+ aboutImage("Flagship workspace interior"),
104674
+ aboutImage("Team meeting area")
104675
+ ]
104676
+ }
104677
+ },
104678
+ "about-split-hero": {
104679
+ exampleUsage: `
104680
+ <AboutSplitHero
104681
+ brandText="Business"
104682
+ brandHighlight="PRO"
104683
+ heading="Achieve More with Elite Access"
104684
+ description="Give your team a polished about experience with clear positioning and a strong visual."
104685
+ ctaAction={{ label: "Upgrade to premium", href: "/upgrade", variant: "default" }}
104686
+ imageSrc="${ABOUT_EXAMPLE_IMAGE_URL}"
104687
+ imageAlt="Premium team workspace"
104688
+ />
104689
+ `.trim(),
104690
+ importantUsageNotes: "Use for premium, launch, or upgrade-oriented about hero sections. Use ctaAction, not ctaText or ctaUrl. imageSrc must be an absolute image URL and must not be a logo, favicon, or video asset.",
104691
+ usageRequirements: {
104692
+ requiredProps: ["heading", "description", "imageSrc"],
104693
+ propConstraints: {
104694
+ brandText: { maxLength: 30 },
104695
+ brandHighlight: { maxLength: 20 },
104696
+ heading: { required: true, maxLength: 70 },
104697
+ description: { required: true, maxLength: 180 },
104698
+ ctaAction: {
104699
+ note: "Use ActionConfig with label and href."
104700
+ },
104701
+ imageSrc: { required: true },
104702
+ imageAlt: { required: true, maxLength: 120 }
104703
+ },
104704
+ mediaSlots: {
104705
+ imageSrc: imageSlot(
104706
+ "imageSrc",
104707
+ "Split hero image.",
104708
+ ["hero", "feature"]
104709
+ )
104710
+ },
104711
+ requiresSiteCapabilities: aboutCapabilities("media_library"),
104712
+ notes: [ABOUT_MEDIA_NOTE]
104713
+ },
104714
+ exampleProps: {
104715
+ brandText: "Business",
104716
+ brandHighlight: "PRO",
104717
+ heading: "Achieve More with Elite Access",
104718
+ description: "Give your team a polished about experience with clear positioning and a strong visual.",
104719
+ ctaAction: {
104720
+ label: "Upgrade to premium",
104721
+ href: "/upgrade",
104722
+ variant: "default"
104723
+ },
104724
+ imageSrc: ABOUT_EXAMPLE_IMAGE_URL,
104725
+ imageAlt: "Premium team workspace"
104726
+ }
104727
+ },
104728
+ "about-mission-principles": {
104729
+ exampleUsage: `
104730
+ <AboutMissionPrinciples
104731
+ badgeText="Our Mission"
104732
+ missionHeading="To empower teams through practical technology"
104733
+ missionDescription="We believe digital systems should make daily operations clearer, not more complicated."
104734
+ missionAction={{ label: "Learn More", href: "/about", variant: "default" }}
104735
+ principles={[
104736
+ { number: "01", title: "Customer-Centric", description: "Start from the real work customers need to complete." },
104737
+ { number: "02", title: "Durable Systems", description: "Build patterns that stay maintainable as teams grow." },
104738
+ ]}
104739
+ visionHeading="Our Vision"
104740
+ visionDescription="A world where every team can keep its digital presence current."
104741
+ visionAction={{ label: "Join Us", href: "/careers", variant: "outline" }}
104742
+ />
104743
+ `.trim(),
104744
+ importantUsageNotes: "Use for mission, values, and vision content that the business can support with real messaging. Do not invent principles that contradict the brand. Keep principle cards concise and numbered.",
104745
+ usageRequirements: {
104746
+ requiredProps: ["missionHeading", "missionDescription", "principles"],
104747
+ propConstraints: {
104748
+ badgeText: { maxLength: 35 },
104749
+ missionHeading: { required: true, maxLength: 80 },
104750
+ missionDescription: { required: true, maxLength: 240 },
104751
+ principles: { required: true, minItems: 2, maxItems: 4 },
104752
+ visionHeading: { maxLength: 80 },
104753
+ visionDescription: { maxLength: 220 }
104754
+ },
104755
+ mediaSlots: {},
104756
+ requiresSiteCapabilities: aboutCapabilities(),
104757
+ notes: ["Mission and principle copy should come from brand source material."]
104758
+ },
104759
+ exampleProps: {
104760
+ badgeText: "Our Mission",
104761
+ missionHeading: "To empower teams through practical technology",
104762
+ missionDescription: "We believe digital systems should make daily operations clearer, not more complicated.",
104763
+ missionAction: { label: "Learn More", href: "/about", variant: "default" },
104764
+ principles: [
104765
+ {
104766
+ number: "01",
104767
+ title: "Customer-Centric",
104768
+ description: "Start from the real work customers need to complete."
104769
+ },
104770
+ {
104771
+ number: "02",
104772
+ title: "Durable Systems",
104773
+ description: "Build patterns that stay maintainable as teams grow."
104774
+ }
104775
+ ],
104776
+ visionHeading: "Our Vision",
104777
+ visionDescription: "A world where every team can keep its digital presence current.",
104778
+ visionAction: { label: "Join Us", href: "/careers", variant: "outline" }
104779
+ }
104780
+ },
104781
+ "about-expandable-values": {
104782
+ exampleUsage: `
104783
+ <AboutExpandableValues
104784
+ badgeText="Our Core Values"
104785
+ heading="The Principles That Guide Us"
104786
+ description="These values shape how we build, support, and improve every customer experience."
104787
+ values={[
104788
+ {
104789
+ id: "integrity",
104790
+ icon: "lucide/shield",
104791
+ title: "Integrity",
104792
+ shortDescription: "Do the right work the right way.",
104793
+ longDescription: "We make decisions that stay clear when the site grows and the team changes.",
104794
+ examples: ["Transparent tradeoffs", "Source-backed claims"],
104795
+ },
104796
+ {
104797
+ id: "momentum",
104798
+ icon: "lucide/zap",
104799
+ title: "Momentum",
104800
+ shortDescription: "Move quickly without losing quality.",
104801
+ longDescription: "We prefer reusable systems that make every future update easier.",
104802
+ examples: ["Reusable blocks", "Fast publishing workflows"],
104803
+ },
104804
+ ]}
104805
+ ctaHeading="Build With These Values"
104806
+ ctaDescription="Turn brand principles into a maintainable digital experience."
104807
+ actions={[{ label: "Start a Project", href: "/contact", variant: "default" }]}
104808
+ />
104809
+ `.trim(),
104810
+ importantUsageNotes: "Use for source-backed company values with enough detail for expandable cards. Do not invent values or examples. Each value id must be unique and stable.",
104811
+ usageRequirements: {
104812
+ requiredProps: ["heading", "values"],
104813
+ propConstraints: {
104814
+ badgeText: { maxLength: 35 },
104815
+ heading: { required: true, maxLength: 80 },
104816
+ description: { maxLength: 200 },
104817
+ values: { required: true, minItems: 2, maxItems: 6 },
104818
+ "values[].id": {
104819
+ required: true,
104820
+ note: "Must be unique within the values array."
104821
+ },
104822
+ "values[].shortDescription": { maxLength: 90 },
104823
+ "values[].longDescription": { maxLength: 260 },
104824
+ "values[].examples": { maxItems: 4 },
104825
+ actions: { maxItems: 2 }
104826
+ },
104827
+ mediaSlots: {},
104828
+ requiresSiteCapabilities: aboutCapabilities(),
104829
+ notes: ["Values and examples should come from brand source material."]
104830
+ },
104831
+ exampleProps: {
104832
+ badgeText: "Our Core Values",
104833
+ heading: "The Principles That Guide Us",
104834
+ description: "These values shape how we build, support, and improve every customer experience.",
104835
+ values: [
104836
+ {
104837
+ id: "integrity",
104838
+ icon: "lucide/shield",
104839
+ title: "Integrity",
104840
+ shortDescription: "Do the right work the right way.",
104841
+ longDescription: "We make decisions that stay clear when the site grows and the team changes.",
104842
+ examples: ["Transparent tradeoffs", "Source-backed claims"]
104843
+ },
104844
+ {
104845
+ id: "momentum",
104846
+ icon: "lucide/zap",
104847
+ title: "Momentum",
104848
+ shortDescription: "Move quickly without losing quality.",
104849
+ longDescription: "We prefer reusable systems that make every future update easier.",
104850
+ examples: ["Reusable blocks", "Fast publishing workflows"]
104851
+ }
104852
+ ],
104853
+ ctaHeading: "Build With These Values",
104854
+ ctaDescription: "Turn brand principles into a maintainable digital experience.",
104855
+ actions: [
104856
+ { label: "Start a Project", href: "/contact", variant: "default" }
104857
+ ]
104858
+ }
104859
+ },
104860
+ "community-initiatives": {
104861
+ exampleUsage: `
104862
+ <CommunityInitiatives
104863
+ badgeText="Community Impact"
104864
+ heading="Supporting the Communities We Serve"
104865
+ description="Our programs connect practical service with measurable local outcomes."
104866
+ categories={[
104867
+ {
104868
+ id: "food-drive",
104869
+ title: "Food Drive",
104870
+ description: "Supporting local families through coordinated food donations.",
104871
+ initiatives: [
104872
+ {
104873
+ id: "monthly-pantry",
104874
+ title: "Monthly Pantry Support",
104875
+ description: "A recurring program with neighborhood partners.",
104876
+ icon: "lucide/heart-handshake",
104877
+ metrics: [{ value: "2,400", label: "Meals donated" }],
104878
+ image: "${ABOUT_EXAMPLE_IMAGE_URL}",
104879
+ },
104880
+ ],
104881
+ },
104882
+ ]}
104883
+ ctaHeading="Partner With Us"
104884
+ ctaDescription="Help expand practical community programs in your area."
104885
+ actions={[{ label: "Get Involved", href: "/community", variant: "default" }]}
104886
+ />
104887
+ `.trim(),
104888
+ importantUsageNotes: "Use only when community program details and impact metrics are sourced. Do not fabricate initiatives, donation totals, partner names, or impact claims. Initiative images must be image assets only.",
104889
+ usageRequirements: {
104890
+ requiredProps: ["heading", "categories"],
104891
+ propConstraints: {
104892
+ badgeText: { maxLength: 35 },
104893
+ heading: { required: true, maxLength: 90 },
104894
+ description: { maxLength: 220 },
104895
+ categories: { required: true, minItems: 1, maxItems: 5 },
104896
+ "categories[].initiatives": { required: true, minItems: 1, maxItems: 6 },
104897
+ "categories[].initiatives[].metrics": {
104898
+ note: "Metrics must be sourced."
104899
+ },
104900
+ actions: { maxItems: 2 }
104901
+ },
104902
+ mediaSlots: {
104903
+ "categories[].initiatives[].image": imageSlot(
104904
+ "categories[].initiatives[].image",
104905
+ "Community initiative image.",
104906
+ ["feature", "thumbnail"],
104907
+ "medium",
104908
+ false
104909
+ )
104910
+ },
104911
+ requiresSiteCapabilities: aboutCapabilities(
104912
+ "metrics_or_stats",
104913
+ "media_library"
104914
+ ),
104915
+ notes: [ABOUT_MEDIA_NOTE, "Community impact claims must be sourced."]
104916
+ },
104917
+ exampleProps: {
104918
+ badgeText: "Community Impact",
104919
+ heading: "Supporting the Communities We Serve",
104920
+ description: "Our programs connect practical service with measurable local outcomes.",
104921
+ categories: [
104922
+ {
104923
+ id: "food-drive",
104924
+ title: "Food Drive",
104925
+ description: "Supporting local families through coordinated food donations.",
104926
+ initiatives: [
104927
+ {
104928
+ id: "monthly-pantry",
104929
+ title: "Monthly Pantry Support",
104930
+ description: "A recurring program with neighborhood partners.",
104931
+ icon: "lucide/heart-handshake",
104932
+ metrics: [{ value: "2,400", label: "Meals donated" }],
104933
+ image: ABOUT_EXAMPLE_IMAGE_URL
104934
+ }
104935
+ ]
104936
+ }
104937
+ ],
104938
+ ctaHeading: "Partner With Us",
104939
+ ctaDescription: "Help expand practical community programs in your area.",
104940
+ actions: [
104941
+ { label: "Get Involved", href: "/community", variant: "default" }
104942
+ ]
104943
+ }
104944
+ },
104945
+ "about-culture-tabs": {
104946
+ exampleUsage: `
104947
+ <AboutCultureTabs
104948
+ badgeText="Our Culture"
104949
+ heading="What Makes Us Different"
104950
+ description="We have built a workplace where practical innovation and clear communication matter."
104951
+ aspects={[
104952
+ {
104953
+ id: "innovation",
104954
+ title: "Innovation First",
104955
+ description: "Teams have room to test better ways to serve customers.",
104956
+ images: ["${ABOUT_EXAMPLE_IMAGE_URL}", "${ABOUT_EXAMPLE_IMAGE_URL}", "${ABOUT_EXAMPLE_IMAGE_URL}"],
104957
+ testimonial: {
104958
+ quote: "The freedom to improve the work is matched by real support from the team.",
104959
+ author: "Sarah Chen",
104960
+ role: "Senior Product Designer",
104961
+ avatar: "${ABOUT_EXAMPLE_IMAGE_URL}",
104962
+ },
104963
+ },
104964
+ {
104965
+ id: "collaboration",
104966
+ title: "Collaborative Spirit",
104967
+ description: "Cross-functional teams share context early and often.",
104968
+ images: ["${ABOUT_EXAMPLE_IMAGE_URL}", "${ABOUT_EXAMPLE_IMAGE_URL}", "${ABOUT_EXAMPLE_IMAGE_URL}"],
104969
+ testimonial: {
104970
+ quote: "People here are genuinely invested in helping each other succeed.",
104971
+ author: "Marcus Johnson",
104972
+ role: "Engineering Lead",
104973
+ avatar: "${ABOUT_EXAMPLE_IMAGE_URL}",
104974
+ },
104975
+ },
104976
+ ]}
104977
+ ctaHeading="Ready to Join Our Team?"
104978
+ ctaDescription="We are looking for people who share these values."
104979
+ actions={[{ label: "View Open Positions", href: "/careers", variant: "default" }]}
104980
+ ctaImages={["${ABOUT_EXAMPLE_IMAGE_URL}", "${ABOUT_EXAMPLE_IMAGE_URL}", "${ABOUT_EXAMPLE_IMAGE_URL}"]}
104981
+ />
104982
+ `.trim(),
104983
+ importantUsageNotes: "Use only when real culture aspects, employee testimonials, and team imagery are available. Do not fabricate quotes, authors, roles, or workplace claims. aspects[].images, testimonial.avatar, and ctaImages must be image media only.",
104984
+ usageRequirements: {
104985
+ requiredProps: ["heading", "aspects"],
104986
+ propConstraints: {
104987
+ badgeText: { maxLength: 35 },
104988
+ heading: { required: true, maxLength: 90 },
104989
+ description: { maxLength: 220 },
104990
+ aspects: { required: true, minItems: 2, maxItems: 5 },
104991
+ "aspects[].id": {
104992
+ required: true,
104993
+ note: "Must be unique within the aspects array."
104994
+ },
104995
+ "aspects[].images": { required: true, minItems: 2, maxItems: 4 },
104996
+ "aspects[].testimonial": {
104997
+ required: true,
104998
+ note: "Must be a real sourced employee or team testimonial."
104999
+ },
105000
+ ctaImages: { minItems: 3, maxItems: 6 },
105001
+ actions: { maxItems: 2 }
105002
+ },
105003
+ mediaSlots: {
105004
+ "aspects[].images[]": imageSlot(
105005
+ "aspects[].images[]",
105006
+ "Culture aspect gallery image.",
105007
+ ["gallery", "feature"]
105008
+ ),
105009
+ "aspects[].testimonial.avatar": imageSlot(
105010
+ "aspects[].testimonial.avatar",
105011
+ "Culture testimonial author avatar.",
105012
+ ["profile", "avatar"],
105013
+ "small",
105014
+ true,
105015
+ "1:1"
105016
+ ),
105017
+ "ctaImages[]": imageSlot(
105018
+ "ctaImages[]",
105019
+ "Careers CTA supporting image.",
105020
+ ["thumbnail", "gallery"],
105021
+ "small",
105022
+ false
105023
+ )
105024
+ },
105025
+ requiresSiteCapabilities: aboutCapabilities(
105026
+ "reviews_or_testimonials",
105027
+ "team_members",
105028
+ "media_library"
105029
+ ),
105030
+ notes: [ABOUT_MEDIA_NOTE, "Culture testimonials and team claims must be sourced."]
105031
+ },
105032
+ exampleProps: {
105033
+ badgeText: "Our Culture",
105034
+ heading: "What Makes Us Different",
105035
+ description: "We have built a workplace where practical innovation and clear communication matter.",
105036
+ aspects: [
105037
+ {
105038
+ id: "innovation",
105039
+ title: "Innovation First",
105040
+ description: "Teams have room to test better ways to serve customers.",
105041
+ images: [
105042
+ ABOUT_EXAMPLE_IMAGE_URL,
105043
+ ABOUT_EXAMPLE_IMAGE_URL,
105044
+ ABOUT_EXAMPLE_IMAGE_URL
105045
+ ],
105046
+ testimonial: {
105047
+ quote: "The freedom to improve the work is matched by real support from the team.",
105048
+ author: "Sarah Chen",
105049
+ role: "Senior Product Designer",
105050
+ avatar: ABOUT_EXAMPLE_IMAGE_URL
105051
+ }
105052
+ },
105053
+ {
105054
+ id: "collaboration",
105055
+ title: "Collaborative Spirit",
105056
+ description: "Cross-functional teams share context early and often.",
105057
+ images: [
105058
+ ABOUT_EXAMPLE_IMAGE_URL,
105059
+ ABOUT_EXAMPLE_IMAGE_URL,
105060
+ ABOUT_EXAMPLE_IMAGE_URL
105061
+ ],
105062
+ testimonial: {
105063
+ quote: "People here are genuinely invested in helping each other succeed.",
105064
+ author: "Marcus Johnson",
105065
+ role: "Engineering Lead",
105066
+ avatar: ABOUT_EXAMPLE_IMAGE_URL
105067
+ }
105068
+ }
105069
+ ],
105070
+ ctaHeading: "Ready to Join Our Team?",
105071
+ ctaDescription: "We are looking for people who share these values.",
105072
+ actions: [
105073
+ { label: "View Open Positions", href: "/careers", variant: "default" }
105074
+ ],
105075
+ ctaImages: [
105076
+ ABOUT_EXAMPLE_IMAGE_URL,
105077
+ ABOUT_EXAMPLE_IMAGE_URL,
105078
+ ABOUT_EXAMPLE_IMAGE_URL
105079
+ ]
105080
+ }
105081
+ }
105082
+ };
103503
105083
  var BLOCK_REGISTRY = {
103504
105084
  "alternating-blocks": {
103505
105085
  id: "alternating-blocks",
@@ -103519,38 +105099,7 @@ var BLOCK_REGISTRY = {
103519
105099
  category: "about",
103520
105100
  component: AlternatingBlocks,
103521
105101
  props: "AlternatingBlocksProps",
103522
- exampleUsage: `
103523
- <AlternatingBlocks
103524
- sections={[
103525
- {
103526
- content: (
103527
- <div>
103528
- <div className="flex items-center gap-2 mb-3">
103529
- <Lightbulb className="h-4 w-4 text-primary" />
103530
- <span className="text-sm font-medium text-muted-foreground">
103531
- The Origin
103532
- </span>
103533
- </div>
103534
- <h3 className="mb-3 text-2xl font-semibold tracking-tight">
103535
- It started with frustration
103536
- </h3>
103537
- <p className="text-muted-foreground leading-relaxed">
103538
- We spent years watching teams drown in tools that promised to help
103539
- but only added complexity. In 2018, we decided to build something better.
103540
- </p>
103541
- </div>
103542
- ),
103543
- media: <img src="..." alt="..." />,
103544
- mediaLeft: false
103545
- },
103546
- {
103547
- content: <div>...</div>,
103548
- media: <img src="..." alt="..." />,
103549
- mediaLeft: true
103550
- }
103551
- ]}
103552
- />
103553
- `.trim()
105102
+ ...ABOUT_BLOCK_CONTRACTS["alternating-blocks"]
103554
105103
  },
103555
105104
  "about-mission-features": {
103556
105105
  id: "about-mission-features",
@@ -103570,19 +105119,7 @@ var BLOCK_REGISTRY = {
103570
105119
  category: "about",
103571
105120
  component: AboutMissionFeatures,
103572
105121
  props: "AboutMissionFeaturesProps",
103573
- exampleUsage: `
103574
- <AboutMissionFeatures
103575
- title="About Us"
103576
- description="We make it easy to build customer portals and internal tools."
103577
- missionLabel="OUR MISSION"
103578
- missionText="We believe building software should be insanely easy."
103579
- mainImage={{ src: "/images/team.jpg", alt: "Our team" }}
103580
- features={[
103581
- { icon: "lucide/files", title: "Being radically open", description: "..." },
103582
- { icon: "lucide/settings", title: "Optimizing for empowerment", description: "..." }
103583
- ]}
103584
- />
103585
- `.trim()
105122
+ ...ABOUT_BLOCK_CONTRACTS["about-mission-features"]
103586
105123
  },
103587
105124
  "about-stats-showcase": {
103588
105125
  id: "about-stats-showcase",
@@ -103602,17 +105139,7 @@ var BLOCK_REGISTRY = {
103602
105139
  category: "about",
103603
105140
  component: AboutStatsShowcase,
103604
105141
  props: "AboutStatsShowcaseProps",
103605
- exampleUsage: `
103606
- <AboutStatsShowcase
103607
- title="Our Background"
103608
- description="Discover how our solution simplifies complex processes."
103609
- stats={[
103610
- { value: "21M", label: "Global Reach of Users" },
103611
- { value: "12+", label: "Years of Expertise" }
103612
- ]}
103613
- logosTitle="Trusted by leading product teams worldwide."
103614
- />
103615
- `.trim()
105142
+ ...ABOUT_BLOCK_CONTRACTS["about-stats-showcase"]
103616
105143
  },
103617
105144
  "about-company-profile": {
103618
105145
  id: "about-company-profile",
@@ -103632,22 +105159,7 @@ var BLOCK_REGISTRY = {
103632
105159
  category: "about",
103633
105160
  component: AboutCompanyProfile,
103634
105161
  props: "AboutCompanyProfileProps",
103635
- exampleUsage: `
103636
- <AboutCompanyProfile
103637
- title="About Us"
103638
- description="A passionate team dedicated to creating innovative solutions."
103639
- breakout={{
103640
- title: "Hundreds of blocks at Opensite AI",
103641
- description: "Providing businesses with effective tools.",
103642
- buttonText: "Discover more",
103643
- buttonUrl: "#"
103644
- }}
103645
- achievements={[
103646
- { label: "Companies", value: "300+" },
103647
- { label: "Happy Customers", value: "99%" }
103648
- ]}
103649
- />
103650
- `.trim()
105162
+ ...ABOUT_BLOCK_CONTRACTS["about-company-profile"]
103651
105163
  },
103652
105164
  "about-vision-gallery": {
103653
105165
  id: "about-vision-gallery",
@@ -103667,16 +105179,7 @@ var BLOCK_REGISTRY = {
103667
105179
  category: "about",
103668
105180
  component: AboutVisionGallery,
103669
105181
  props: "AboutVisionGalleryProps",
103670
- exampleUsage: `
103671
- <AboutVisionGallery
103672
- title="About Us"
103673
- subtitle="Meet our team and discover our values."
103674
- visionTitle="Our Vision"
103675
- visionContent="What if you could create custom software without code?"
103676
- ctaTitle="Part of Our Global Team"
103677
- ctaButtonText="Get to know the team"
103678
- />
103679
- `.trim()
105182
+ ...ABOUT_BLOCK_CONTRACTS["about-vision-gallery"]
103680
105183
  },
103681
105184
  "about-developer-story": {
103682
105185
  id: "about-developer-story",
@@ -103696,17 +105199,7 @@ var BLOCK_REGISTRY = {
103696
105199
  category: "about",
103697
105200
  component: AboutDeveloperStory,
103698
105201
  props: "AboutDeveloperStoryProps",
103699
- exampleUsage: `
103700
- <AboutDeveloperStory
103701
- title="Developer-Focused Solutions for Modern Teams"
103702
- description="We build tools that developers love."
103703
- primaryCta={{ text: "Get Started", url: "#" }}
103704
- stats={[
103705
- { value: "200+", label: "Projects Completed" },
103706
- { value: "50+", label: "Happy Clients" }
103707
- ]}
103708
- />
103709
- `.trim()
105202
+ ...ABOUT_BLOCK_CONTRACTS["about-developer-story"]
103710
105203
  },
103711
105204
  "about-story-gallery": {
103712
105205
  id: "about-story-gallery",
@@ -103725,16 +105218,7 @@ var BLOCK_REGISTRY = {
103725
105218
  category: "about",
103726
105219
  component: AboutStoryGallery,
103727
105220
  props: "AboutStoryGalleryProps",
103728
- exampleUsage: `
103729
- <AboutStoryGallery
103730
- title="Our Story"
103731
- description="We started with a vision to transform how businesses build software."
103732
- images={[
103733
- { src: "/images/story1.jpg", alt: "Our beginning" },
103734
- { src: "/images/story2.jpg", alt: "Growth phase" }
103735
- ]}
103736
- />
103737
- `.trim()
105221
+ ...ABOUT_BLOCK_CONTRACTS["about-story-gallery"]
103738
105222
  },
103739
105223
  "about-streamline-team": {
103740
105224
  id: "about-streamline-team",
@@ -103754,17 +105238,7 @@ var BLOCK_REGISTRY = {
103754
105238
  category: "about",
103755
105239
  component: AboutStreamlineTeam,
103756
105240
  props: "AboutStreamlineTeamProps",
103757
- exampleUsage: `
103758
- <AboutStreamlineTeam
103759
- title="Streamline Your Workflow"
103760
- description="Our platform helps teams work smarter, not harder."
103761
- features={[
103762
- { icon: "lucide/zap", title: "Lightning Fast", description: "Build in minutes." },
103763
- { icon: "lucide/shield", title: "Enterprise Security", description: "Bank-grade security." }
103764
- ]}
103765
- teamCta={{ text: "Join Our Team", url: "#" }}
103766
- />
103767
- `.trim()
105241
+ ...ABOUT_BLOCK_CONTRACTS["about-streamline-team"]
103768
105242
  },
103769
105243
  "about-developer-profile": {
103770
105244
  id: "about-developer-profile",
@@ -103784,17 +105258,7 @@ var BLOCK_REGISTRY = {
103784
105258
  category: "about",
103785
105259
  component: AboutDeveloperProfile,
103786
105260
  props: "AboutDeveloperProfileProps",
103787
- exampleUsage: `
103788
- <AboutDeveloperProfile
103789
- name="Alex Johnson"
103790
- role="Full-Stack Developer"
103791
- bio="I'm a passionate developer with 8+ years of experience."
103792
- skills={["React", "TypeScript", "Node.js", "Python"]}
103793
- socialLinks={[
103794
- { icon: "lucide/github", url: "#", label: "GitHub" }
103795
- ]}
103796
- />
103797
- `.trim()
105261
+ ...ABOUT_BLOCK_CONTRACTS["about-developer-profile"]
103798
105262
  },
103799
105263
  "about-startup-team": {
103800
105264
  id: "about-startup-team",
@@ -103814,19 +105278,7 @@ var BLOCK_REGISTRY = {
103814
105278
  category: "about",
103815
105279
  component: AboutStartupTeam,
103816
105280
  props: "AboutStartupTeamProps",
103817
- exampleUsage: `
103818
- <AboutStartupTeam
103819
- title="Building the Future of Software Development"
103820
- description="We're a team of passionate builders."
103821
- sidebarLinks={[
103822
- { label: "About Us", href: "#about", isActive: true },
103823
- { label: "Our Team", href: "#team" }
103824
- ]}
103825
- teamMembers={[
103826
- { name: "Sarah Chen", role: "CEO & Co-Founder" }
103827
- ]}
103828
- />
103829
- `.trim()
105281
+ ...ABOUT_BLOCK_CONTRACTS["about-startup-team"]
103830
105282
  },
103831
105283
  "about-minimal-story": {
103832
105284
  id: "about-minimal-story",
@@ -103845,16 +105297,7 @@ var BLOCK_REGISTRY = {
103845
105297
  category: "about",
103846
105298
  component: AboutMinimalStory,
103847
105299
  props: "AboutMinimalStoryProps",
103848
- exampleUsage: `
103849
- <AboutMinimalStory
103850
- title="Our Story"
103851
- content="Every great company starts with a simple idea."
103852
- author={{
103853
- name: "Jordan Mitchell",
103854
- role: "Founder & CEO"
103855
- }}
103856
- />
103857
- `.trim()
105300
+ ...ABOUT_BLOCK_CONTRACTS["about-minimal-story"]
103858
105301
  },
103859
105302
  "about-story-hero": {
103860
105303
  id: "about-story-hero",
@@ -103873,17 +105316,7 @@ var BLOCK_REGISTRY = {
103873
105316
  category: "about",
103874
105317
  component: AboutStoryHero,
103875
105318
  props: "AboutStoryHeroProps",
103876
- exampleUsage: `
103877
- <AboutStoryHero
103878
- title="Our Story"
103879
- subtitle="Building the future, one line of code at a time"
103880
- content="We started with a bold idea..."
103881
- teamInfo={{
103882
- title: "50+ Team Members",
103883
- description: "Working across 12 countries"
103884
- }}
103885
- />
103886
- `.trim()
105319
+ ...ABOUT_BLOCK_CONTRACTS["about-story-hero"]
103887
105320
  },
103888
105321
  "about-stats-sidebar": {
103889
105322
  id: "about-stats-sidebar",
@@ -103902,16 +105335,7 @@ var BLOCK_REGISTRY = {
103902
105335
  category: "about",
103903
105336
  component: AboutStatsSidebar,
103904
105337
  props: "AboutStatsSidebarProps",
103905
- exampleUsage: `
103906
- <AboutStatsSidebar
103907
- title="Why Choose Us"
103908
- description="We've built a platform that scales with your needs."
103909
- stats={[
103910
- { icon: "lucide/users", value: "10M+", label: "Active Users" },
103911
- { icon: "lucide/globe", value: "150+", label: "Countries" }
103912
- ]}
103913
- />
103914
- `.trim()
105338
+ ...ABOUT_BLOCK_CONTRACTS["about-stats-sidebar"]
103915
105339
  },
103916
105340
  "about-interactive-tabs": {
103917
105341
  id: "about-interactive-tabs",
@@ -103930,22 +105354,7 @@ var BLOCK_REGISTRY = {
103930
105354
  category: "about",
103931
105355
  component: AboutInteractiveTabs,
103932
105356
  props: "AboutInteractiveTabsProps",
103933
- exampleUsage: `
103934
- <AboutInteractiveTabs
103935
- title="Discover Our Story"
103936
- subtitle="Learn more about who we are"
103937
- tabs={[
103938
- {
103939
- id: "work",
103940
- label: "Our Work",
103941
- content: {
103942
- title: "Crafting Digital Experiences",
103943
- description: "We create beautiful, functional products."
103944
- }
103945
- }
103946
- ]}
103947
- />
103948
- `.trim()
105357
+ ...ABOUT_BLOCK_CONTRACTS["about-interactive-tabs"]
103949
105358
  },
103950
105359
  "about-mission-dual-image": {
103951
105360
  id: "about-mission-dual-image",
@@ -103964,15 +105373,7 @@ var BLOCK_REGISTRY = {
103964
105373
  category: "about",
103965
105374
  component: AboutMissionDualImage,
103966
105375
  props: "AboutMissionDualImageProps",
103967
- exampleUsage: `
103968
- <AboutMissionDualImage
103969
- missionTitle="Our Mission"
103970
- missionContent="To democratize software development."
103971
- visionTitle="Our Vision"
103972
- visionContent="A world where every idea can become reality."
103973
- cta={{ text: "Join Our Journey", url: "#" }}
103974
- />
103975
- `.trim()
105376
+ ...ABOUT_BLOCK_CONTRACTS["about-mission-dual-image"]
103976
105377
  },
103977
105378
  "about-story-expertise": {
103978
105379
  id: "about-story-expertise",
@@ -103993,7 +105394,7 @@ var BLOCK_REGISTRY = {
103993
105394
  category: "about",
103994
105395
  component: AboutStoryExpertise,
103995
105396
  props: "AboutStoryExpertiseProps",
103996
- exampleUsage: `<AboutStoryExpertise />`.trim()
105397
+ ...ABOUT_BLOCK_CONTRACTS["about-story-expertise"]
103997
105398
  },
103998
105399
  "about-network-spotlight": {
103999
105400
  id: "about-network-spotlight",
@@ -104014,7 +105415,7 @@ var BLOCK_REGISTRY = {
104014
105415
  category: "about",
104015
105416
  component: AboutNetworkSpotlight,
104016
105417
  props: "AboutNetworkSpotlightProps",
104017
- exampleUsage: `<AboutNetworkSpotlight />`.trim()
105418
+ ...ABOUT_BLOCK_CONTRACTS["about-network-spotlight"]
104018
105419
  },
104019
105420
  "about-location-info-hero": {
104020
105421
  id: "about-location-info-hero",
@@ -104035,7 +105436,7 @@ var BLOCK_REGISTRY = {
104035
105436
  category: "about",
104036
105437
  component: AboutLocationInfoHero,
104037
105438
  props: "AboutLocationInfoHeroProps",
104038
- exampleUsage: `<AboutLocationInfoHero />`.trim()
105439
+ ...ABOUT_BLOCK_CONTRACTS["about-location-info-hero"]
104039
105440
  },
104040
105441
  "media-hover-ctas": {
104041
105442
  id: "media-hover-ctas",
@@ -112071,17 +113472,27 @@ var BLOCK_REGISTRY = {
112071
113472
  heading="Compassionate care for your mental wellbeing"
112072
113473
  description="Our team of experienced mental health professionals is dedicated to providing compassionate care and support to individuals in need."
112073
113474
  smallImages={[
112074
- { src: "/images/team-1.jpg", alt: "Dr. Smith" },
112075
- { src: "/images/team-2.jpg", alt: "Dr. Johnson" },
113475
+ {
113476
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
113477
+ alt: "Dr. Smith",
113478
+ },
113479
+ {
113480
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
113481
+ alt: "Dr. Johnson",
113482
+ },
112076
113483
  ]}
112077
113484
  testimonial={{
112078
113485
  quote:
112079
113486
  "The support I received changed my life. I'm so grateful for the compassionate care.",
112080
113487
  author: "Sarah M.",
112081
113488
  role: "Client",
112082
- avatarSrc: "/images/avatar.jpg",
113489
+ avatarSrc:
113490
+ "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
113491
+ }}
113492
+ featureImage={{
113493
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
113494
+ alt: "Mental health support",
112083
113495
  }}
112084
- featureImage={{ src: "/images/feature.jpg", alt: "Mental health support" }}
112085
113496
  actions={[
112086
113497
  { label: "Get Started", href: "#", variant: "default" },
112087
113498
  { label: "Talk to Sales", href: "#", variant: "outline" },
@@ -112089,7 +113500,7 @@ var BLOCK_REGISTRY = {
112089
113500
  background="gray"
112090
113501
  />
112091
113502
  `.trim(),
112092
- importantUsageNotes: "Only use if you have a valid testimonial - DO NOT MAKE UP A TESTIMONIAL/REVIEW. Supply exactly 2 images to the 'smallImages' prop and ensure you supply a 'featureImage' prop object. Do not exceed 40 characters for the 'heading' prop. Do not exceed 130 characters for the 'description' prop. If you supply multiple 'actions', ensure to use a variant of 'default' for the first action, and 'outline' for the second action to ensure proper visual distinction between the two CTAs. Follow the example props closely for this block.",
113503
+ importantUsageNotes: "Only use if you have a valid testimonial - DO NOT MAKE UP A TESTIMONIAL/REVIEW. Supply exactly 2 images to the 'smallImages' prop and ensure you supply a 'featureImage' prop object. Do not exceed 40 characters for the 'heading' prop. Do not exceed 130 characters for the 'description' prop. If you supply multiple 'actions', ensure to use a variant of 'default' for the first action, and 'outline' for the second action to ensure proper visual distinction between the two CTAs. All media src values must be absolute URLs to real CDN assets \u2014 never relative paths (e.g. '/images/...') or placeholder strings. Follow the example props closely for this block.",
112093
113504
  usageRequirements: {
112094
113505
  requiredProps: ["heading", "smallImages", "featureImage", "testimonial"],
112095
113506
  propConstraints: {
@@ -120129,15 +121540,7 @@ var BLOCK_REGISTRY = {
120129
121540
  category: "about",
120130
121541
  component: AboutSplitHero,
120131
121542
  props: "AboutSplitHeroProps",
120132
- exampleUsage: `
120133
- <AboutSplitHero
120134
- brandText="Business"
120135
- brandHighlight="PRO"
120136
- heading="Achieve More with Elite Access Pro"
120137
- description="Enhance your career hunt with increased visibility."
120138
- ctaText="Upgrade to premium"
120139
- ctaUrl="/upgrade"
120140
- />`.trim()
121543
+ ...ABOUT_BLOCK_CONTRACTS["about-split-hero"]
120141
121544
  },
120142
121545
  "about-mission-principles": {
120143
121546
  id: "about-mission-principles",
@@ -120157,15 +121560,7 @@ var BLOCK_REGISTRY = {
120157
121560
  category: "about",
120158
121561
  component: AboutMissionPrinciples,
120159
121562
  props: "AboutMissionPrinciplesProps",
120160
- exampleUsage: `
120161
- <AboutMissionPrinciples
120162
- badgeText="Our Mission"
120163
- missionHeading="To empower people through technology"
120164
- missionDescription="We believe technology should serve humanity."
120165
- principles={[
120166
- { number: "01", title: "Customer-Centric", description: "..." },
120167
- ]}
120168
- />`.trim()
121563
+ ...ABOUT_BLOCK_CONTRACTS["about-mission-principles"]
120169
121564
  },
120170
121565
  "about-expandable-values": {
120171
121566
  id: "about-expandable-values",
@@ -120185,21 +121580,7 @@ var BLOCK_REGISTRY = {
120185
121580
  category: "about",
120186
121581
  component: AboutExpandableValues,
120187
121582
  props: "AboutExpandableValuesProps",
120188
- exampleUsage: `
120189
- <AboutExpandableValues
120190
- badgeText="Our Core Values"
120191
- heading="The Principles That Guide Us"
120192
- values={[
120193
- {
120194
- id: "integrity",
120195
- icon: "lucide/shield",
120196
- title: "Integrity",
120197
- shortDescription: "Doing what's right.",
120198
- longDescription: "We believe in honesty...",
120199
- examples: ["Transparent pricing", "Honest communication"],
120200
- },
120201
- ]}
120202
- />`.trim()
121583
+ ...ABOUT_BLOCK_CONTRACTS["about-expandable-values"]
120203
121584
  },
120204
121585
  "community-initiatives": {
120205
121586
  id: "community-initiatives",
@@ -120218,19 +121599,7 @@ var BLOCK_REGISTRY = {
120218
121599
  category: "about",
120219
121600
  component: CommunityInitiatives,
120220
121601
  props: "CommunityInitiativesProps",
120221
- exampleUsage: `
120222
- <CommunityInitiatives
120223
- badgeText="Food Drive"
120224
- heading="Supporting Our Community"
120225
- categories={[
120226
- {
120227
- id: "food-drive",
120228
- title: "Food Drive",
120229
- description: "Supporting our community through food donations.",
120230
- initiatives: [...]
120231
- },
120232
- ]}
120233
- />`.trim()
121602
+ ...ABOUT_BLOCK_CONTRACTS["community-initiatives"]
120234
121603
  },
120235
121604
  "about-culture-tabs": {
120236
121605
  id: "about-culture-tabs",
@@ -120250,20 +121619,7 @@ var BLOCK_REGISTRY = {
120250
121619
  category: "about",
120251
121620
  component: AboutCultureTabs,
120252
121621
  props: "AboutCultureTabsProps",
120253
- exampleUsage: `
120254
- <AboutCultureTabs
120255
- badgeText="Our Culture"
120256
- heading="What Makes Us Different"
120257
- aspects={[
120258
- {
120259
- id: "innovation",
120260
- title: "Innovation First",
120261
- description: "We believe in challenging the status quo.",
120262
- images: [...],
120263
- testimonial: { quote: "...", author: "...", role: "...", avatar: "..." },
120264
- },
120265
- ]}
120266
- />`.trim()
121622
+ ...ABOUT_BLOCK_CONTRACTS["about-culture-tabs"]
120267
121623
  },
120268
121624
  // New Feature components
120269
121625
  "feature-animated-carousel": {