@opensite/ui 3.5.0 → 3.5.3

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
@@ -51238,105 +51238,220 @@ function HeroAnnouncementBadge({
51238
51238
  }
51239
51239
  );
51240
51240
  }
51241
+ var HERO_TECH_CAROUSEL_MAX_ITEMS = 4;
51242
+ function resolveLogoSrc(logo) {
51243
+ if (typeof logo.src === "string") return logo.src;
51244
+ return logo.src?.light;
51245
+ }
51246
+ function HeroPanel({
51247
+ item,
51248
+ defaultAutoplayIntervalMs,
51249
+ optixFlowConfig,
51250
+ panelContentClassName
51251
+ }) {
51252
+ const {
51253
+ logo,
51254
+ logoSlot,
51255
+ title,
51256
+ content,
51257
+ actions,
51258
+ backgroundMedia,
51259
+ backgroundAutoplayIntervalMs,
51260
+ id,
51261
+ className,
51262
+ contentClassName,
51263
+ logoClassName,
51264
+ titleClassName,
51265
+ textClassName,
51266
+ actionsClassName,
51267
+ overlayClassName,
51268
+ optixFlowConfig: itemOptixFlowConfig
51269
+ } = item;
51270
+ const resolvedOptixFlow = itemOptixFlowConfig ?? optixFlowConfig;
51271
+ const renderBackground = React30.useMemo(() => {
51272
+ if (!backgroundMedia || backgroundMedia.length === 0) return null;
51273
+ if (backgroundMedia.length === 1) {
51274
+ const image = backgroundMedia[0];
51275
+ if (!image?.src) return null;
51276
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0 z-0", children: [
51277
+ /* @__PURE__ */ jsxRuntime.jsx(
51278
+ img.Img,
51279
+ {
51280
+ src: image.src,
51281
+ alt: image.alt ?? "",
51282
+ className: cn(
51283
+ "h-full w-full object-cover object-center",
51284
+ image.className
51285
+ ),
51286
+ optixFlowConfig: image.optixFlowConfig ?? resolvedOptixFlow,
51287
+ loading: "eager"
51288
+ }
51289
+ ),
51290
+ /* @__PURE__ */ jsxRuntime.jsx(
51291
+ "div",
51292
+ {
51293
+ className: cn(
51294
+ "absolute inset-0 bg-linear-to-b from-black/55 via-black/45 to-black/65",
51295
+ overlayClassName
51296
+ )
51297
+ }
51298
+ )
51299
+ ] });
51300
+ }
51301
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0 z-0", children: [
51302
+ /* @__PURE__ */ jsxRuntime.jsx(
51303
+ ImageSlider,
51304
+ {
51305
+ images: backgroundMedia,
51306
+ className: "h-full w-full rounded-none border-0 shadow-none",
51307
+ imageClassName: "object-cover object-center",
51308
+ transition: "fade",
51309
+ autoplay: true,
51310
+ autoplayIntervalMs: backgroundAutoplayIntervalMs ?? defaultAutoplayIntervalMs,
51311
+ enableKeyboard: false,
51312
+ overlay: false,
51313
+ optixFlowConfig: resolvedOptixFlow
51314
+ }
51315
+ ),
51316
+ /* @__PURE__ */ jsxRuntime.jsx(
51317
+ "div",
51318
+ {
51319
+ className: cn(
51320
+ "absolute inset-0 bg-linear-to-b from-black/55 via-black/45 to-black/65",
51321
+ overlayClassName
51322
+ )
51323
+ }
51324
+ )
51325
+ ] });
51326
+ }, [
51327
+ backgroundMedia,
51328
+ backgroundAutoplayIntervalMs,
51329
+ defaultAutoplayIntervalMs,
51330
+ resolvedOptixFlow,
51331
+ overlayClassName
51332
+ ]);
51333
+ const hasBackground = !!backgroundMedia && backgroundMedia.length > 0;
51334
+ const renderLogo = React30.useMemo(() => {
51335
+ if (logoSlot) return logoSlot;
51336
+ if (!logo) return null;
51337
+ const src = resolveLogoSrc(logo);
51338
+ if (!src) return null;
51339
+ return /* @__PURE__ */ jsxRuntime.jsx(
51340
+ img.Img,
51341
+ {
51342
+ src,
51343
+ alt: logo.alt,
51344
+ className: cn(
51345
+ "h-10 md:h-12 lg:h-14 w-auto max-w-[70%] object-contain",
51346
+ logo.imgClassName,
51347
+ logoClassName
51348
+ ),
51349
+ optixFlowConfig: resolvedOptixFlow
51350
+ }
51351
+ );
51352
+ }, [logoSlot, logo, logoClassName, resolvedOptixFlow]);
51353
+ const renderTitle = React30.useMemo(() => {
51354
+ if (title === void 0 || title === null || title === "") return null;
51355
+ if (typeof title === "string") {
51356
+ return /* @__PURE__ */ jsxRuntime.jsx(
51357
+ "h2",
51358
+ {
51359
+ className: cn(
51360
+ "text-2xl md:text-3xl lg:text-4xl font-semibold text-balance",
51361
+ hasBackground && "text-white text-shadow-lg",
51362
+ titleClassName
51363
+ ),
51364
+ children: title
51365
+ }
51366
+ );
51367
+ }
51368
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: titleClassName, children: title });
51369
+ }, [title, titleClassName, hasBackground]);
51370
+ const renderContent = React30.useMemo(() => {
51371
+ if (content === void 0 || content === null || content === "")
51372
+ return null;
51373
+ if (typeof content === "string") {
51374
+ return /* @__PURE__ */ jsxRuntime.jsx(
51375
+ "p",
51376
+ {
51377
+ className: cn(
51378
+ "text-sm md:text-base leading-snug text-balance",
51379
+ hasBackground ? "text-white text-shadow-lg" : "",
51380
+ textClassName
51381
+ ),
51382
+ children: content
51383
+ }
51384
+ );
51385
+ }
51386
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: textClassName, children: content });
51387
+ }, [content, textClassName, hasBackground]);
51388
+ return /* @__PURE__ */ jsxRuntime.jsxs(
51389
+ "div",
51390
+ {
51391
+ id,
51392
+ "data-slot": "hero-tech-carousel-panel",
51393
+ className: cn(
51394
+ // Mobile: stack vertically with content-fit height + padding.
51395
+ "relative w-full overflow-hidden",
51396
+ // Desktop: flex children share the row equally and fill height.
51397
+ "md:h-full md:flex-1 md:basis-0 md:min-w-0",
51398
+ // Provide a default panel background when no media is supplied so
51399
+ // separators between panels remain visible.
51400
+ !hasBackground && "bg-muted/30",
51401
+ className
51402
+ ),
51403
+ children: [
51404
+ renderBackground,
51405
+ /* @__PURE__ */ jsxRuntime.jsxs(
51406
+ "div",
51407
+ {
51408
+ className: cn(
51409
+ "relative z-10 flex h-full w-full flex-col items-center justify-center gap-4 md:gap-6",
51410
+ // Mobile padding keeps content readable when stacked.
51411
+ "px-6 py-12 md:px-8 md:py-12 lg:px-10",
51412
+ // Center content vertically; on desktop columns can be quite tall.
51413
+ "text-center",
51414
+ panelContentClassName,
51415
+ contentClassName
51416
+ ),
51417
+ children: [
51418
+ renderLogo,
51419
+ renderTitle,
51420
+ renderContent,
51421
+ /* @__PURE__ */ jsxRuntime.jsx(
51422
+ BlockActions,
51423
+ {
51424
+ actions,
51425
+ actionsClassName,
51426
+ verticalSpacing: "mt-2 md:mt-4",
51427
+ mobileConfig: { width: "fit", position: "center" }
51428
+ }
51429
+ )
51430
+ ]
51431
+ }
51432
+ )
51433
+ ]
51434
+ }
51435
+ );
51436
+ }
51241
51437
  function HeroTechCarousel({
51242
51438
  sectionId = "hero-tech-carousel",
51243
- heading,
51244
- description,
51245
- technologies,
51246
- carouselSlot,
51247
- autoplayDelay = 5e3,
51439
+ items,
51440
+ backgroundAutoplayIntervalMs = 5e3,
51248
51441
  background,
51442
+ spacing = "none",
51249
51443
  pattern,
51250
51444
  patternOpacity,
51251
51445
  className,
51252
- containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
51253
- spacing = "py-32",
51254
- headingClassName,
51255
- descriptionClassName,
51446
+ containerClassName = "px-0 sm:px-0 lg:px-0 max-w-full relative z-10 h-auto md:h-dvh w-screen flex items-stretch",
51447
+ panelsClassName,
51448
+ panelContentClassName,
51256
51449
  optixFlowConfig
51257
51450
  }) {
51258
- const plugin = React30.useRef(
51259
- Autoplay__default.default({ delay: autoplayDelay, stopOnInteraction: false })
51260
- );
51261
- const [api, setApi] = React30.useState();
51262
- const [current, setCurrent] = React30.useState(0);
51263
- const [fadeIn, setFadeIn] = React30.useState(true);
51264
- React30.useEffect(() => {
51265
- if (!api) return;
51266
- setCurrent(api.selectedScrollSnap());
51267
- const updateCurrent = () => {
51268
- setFadeIn(false);
51269
- setTimeout(() => {
51270
- setCurrent(api.selectedScrollSnap());
51271
- setFadeIn(true);
51272
- }, 200);
51273
- };
51274
- api.on("select", updateCurrent);
51275
- api.on("settle", updateCurrent);
51276
- return () => {
51277
- api.off("select", updateCurrent);
51278
- api.off("settle", updateCurrent);
51279
- };
51280
- }, [api]);
51281
- const selectTechnology = (index) => {
51282
- if (api) {
51283
- api.scrollTo(index);
51284
- }
51285
- };
51286
- const renderCarousel = React30.useMemo(() => {
51287
- if (carouselSlot) return carouselSlot;
51288
- if (!technologies || technologies.length === 0) return null;
51289
- return /* @__PURE__ */ jsxRuntime.jsx(
51290
- Carousel,
51291
- {
51292
- setApi,
51293
- plugins: [plugin.current],
51294
- opts: {
51295
- loop: true
51296
- },
51297
- className: "relative mx-auto w-full max-w-3xl before:absolute before:top-0 before:bottom-0 before:left-0 before:z-10 before:w-36 before:bg-linear-to-r before:from-background before:to-transparent after:absolute after:top-0 after:right-0 after:bottom-0 after:z-10 after:w-36 after:bg-linear-to-l after:from-background after:to-transparent",
51298
- onMouseEnter: plugin.current.stop,
51299
- onMouseLeave: plugin.current.reset,
51300
- children: /* @__PURE__ */ jsxRuntime.jsx(CarouselContent, { children: technologies.map((technology, idx) => /* @__PURE__ */ jsxRuntime.jsx(
51301
- CarouselItem,
51302
- {
51303
- className: "basis-1/3 select-none sm:basis-1/4 md:basis-1/6",
51304
- children: /* @__PURE__ */ jsxRuntime.jsxs(
51305
- "div",
51306
- {
51307
- className: cn(
51308
- "flex cursor-pointer items-center justify-center gap-2 rounded-md border px-4 py-2",
51309
- idx === current ? "border-input" : "border-transparent"
51310
- ),
51311
- onClick: () => selectTechnology(idx),
51312
- children: [
51313
- technology.logo && /* @__PURE__ */ jsxRuntime.jsx(
51314
- img.Img,
51315
- {
51316
- className: "h-4 shrink-0 md:h-7",
51317
- src: technology.logo,
51318
- alt: technology.name,
51319
- optixFlowConfig
51320
- }
51321
- ),
51322
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-nowrap", children: technology.name })
51323
- ]
51324
- }
51325
- )
51326
- },
51327
- idx
51328
- )) })
51329
- }
51330
- );
51331
- }, [
51332
- carouselSlot,
51333
- technologies,
51334
- setApi,
51335
- plugin,
51336
- current,
51337
- selectTechnology,
51338
- optixFlowConfig
51339
- ]);
51451
+ const visibleItems = React30.useMemo(() => {
51452
+ if (!items || items.length === 0) return [];
51453
+ return items.slice(0, HERO_TECH_CAROUSEL_MAX_ITEMS);
51454
+ }, [items]);
51340
51455
  return /* @__PURE__ */ jsxRuntime.jsx(
51341
51456
  Section,
51342
51457
  {
@@ -51345,80 +51460,37 @@ function HeroTechCarousel({
51345
51460
  spacing,
51346
51461
  pattern,
51347
51462
  patternOpacity,
51348
- className,
51463
+ className: cn(
51464
+ "relative w-screen overflow-hidden",
51465
+ // Desktop fills the viewport; on mobile content drives the height.
51466
+ "h-auto md:h-dvh",
51467
+ "px-0 pt-0 pb-0",
51468
+ className
51469
+ ),
51349
51470
  containerClassName,
51350
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
51351
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col justify-center", children: [
51352
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
51353
- "h1",
51354
- {
51355
- className: cn(
51356
- "mx-auto mb-4 max-w-2xl text-center text-4xl font-bold md:text-6xl text-balance",
51357
- headingClassName
51358
- ),
51359
- children: heading
51360
- }
51361
- ) : /* @__PURE__ */ jsxRuntime.jsx(
51362
- "h1",
51363
- {
51364
- className: cn(
51365
- "mx-auto mb-4 max-w-2xl text-center text-4xl font-bold md:text-6xl text-balance",
51366
- headingClassName
51367
- ),
51368
- children: heading
51369
- }
51370
- )),
51371
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
51372
- "p",
51373
- {
51374
- className: cn(
51375
- "mx-auto mt-4 max-w-xl text-center text-lg text-balance",
51376
- descriptionClassName
51377
- ),
51378
- children: description
51379
- }
51380
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
51381
- technologies && technologies.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
51382
- "div",
51471
+ children: visibleItems.length === 0 ? null : /* @__PURE__ */ jsxRuntime.jsx(
51472
+ "div",
51473
+ {
51474
+ "data-slot": "hero-tech-carousel-panels",
51475
+ className: cn(
51476
+ // Mobile: vertical stack with auto height per panel.
51477
+ "flex w-full flex-col",
51478
+ // Desktop: equal-width row that fills section height.
51479
+ "md:h-full md:flex-row md:items-stretch",
51480
+ panelsClassName
51481
+ ),
51482
+ children: visibleItems.map((item, idx) => /* @__PURE__ */ jsxRuntime.jsx(
51483
+ HeroPanel,
51383
51484
  {
51384
- className: cn(
51385
- "mx-auto bg-muted mt-8 mb-12 flex h-[60px] w-fit items-center gap-2 rounded-md px-4 py-2 text-center"
51386
- ),
51387
- children: /* @__PURE__ */ jsxRuntime.jsxs(
51388
- "div",
51389
- {
51390
- className: cn(
51391
- "flex items-center gap-2 transition-opacity duration-300",
51392
- fadeIn ? "opacity-100" : "opacity-0"
51393
- ),
51394
- children: [
51395
- technologies && current && technologies[current] && technologies[current].logo ? /* @__PURE__ */ jsxRuntime.jsx(
51396
- img.Img,
51397
- {
51398
- src: technologies[current]?.logo,
51399
- alt: technologies[current]?.name,
51400
- className: "h-4 md:h-7",
51401
- optixFlowConfig
51402
- }
51403
- ) : null,
51404
- /* @__PURE__ */ jsxRuntime.jsx(
51405
- "p",
51406
- {
51407
- className: cn(
51408
- "px-2 font-mono text-sm",
51409
- technologies && technologies[current] && technologies[current].logo ? "border-l" : ""
51410
- ),
51411
- children: technologies[current]?.command
51412
- }
51413
- )
51414
- ]
51415
- }
51416
- )
51417
- }
51418
- )
51419
- ] }),
51420
- renderCarousel
51421
- ] })
51485
+ item,
51486
+ defaultAutoplayIntervalMs: backgroundAutoplayIntervalMs,
51487
+ optixFlowConfig,
51488
+ panelContentClassName
51489
+ },
51490
+ item.id ?? idx
51491
+ ))
51492
+ }
51493
+ )
51422
51494
  }
51423
51495
  );
51424
51496
  }
@@ -65351,8 +65423,8 @@ var NavbarPlatformResources = ({
65351
65423
  }
65352
65424
  ) }),
65353
65425
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1 overflow-hidden", children: [
65354
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "break-words text-sm font-medium text-foreground", children: item.label }),
65355
- item.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "break-words text-sm font-normal text-muted-foreground", children: item.description })
65426
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm font-medium truncate", children: item.label }),
65427
+ item.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: item.description })
65356
65428
  ] })
65357
65429
  ]
65358
65430
  },
@@ -65379,8 +65451,8 @@ var NavbarPlatformResources = ({
65379
65451
  }
65380
65452
  ) }),
65381
65453
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
65382
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm font-medium", children: item.label }),
65383
- item.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "break-words text-xs text-muted-foreground group-hover/link:text-foreground", children: item.description })
65454
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm font-medium truncate", children: item.label }),
65455
+ item.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-xs text-muted-foreground group-hover/link:text-foreground", children: item.description })
65384
65456
  ] })
65385
65457
  ]
65386
65458
  }
@@ -65409,8 +65481,8 @@ var NavbarPlatformResources = ({
65409
65481
  }
65410
65482
  ) }),
65411
65483
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-5 xl:p-8", children: [
65412
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 text-base", children: featuredItem.label }),
65413
- featuredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm font-normal text-muted-foreground", children: featuredItem.description })
65484
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 text-base truncate", children: featuredItem.label }),
65485
+ featuredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: featuredItem.description })
65414
65486
  ] })
65415
65487
  ] })
65416
65488
  }
@@ -65430,8 +65502,8 @@ var NavbarPlatformResources = ({
65430
65502
  size: 20
65431
65503
  }
65432
65504
  ) }),
65433
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-1 break-words text-base", children: item.label }),
65434
- item.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "break-words text-sm font-normal text-muted-foreground", children: item.description })
65505
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-1 truncate text-base", children: item.label }),
65506
+ item.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: item.description })
65435
65507
  ]
65436
65508
  },
65437
65509
  `${typeof item.label === "string" ? item.label : "item"}-${itemIndex}`
@@ -65457,7 +65529,7 @@ var NavbarPlatformResources = ({
65457
65529
  size: 16
65458
65530
  }
65459
65531
  ) }),
65460
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 break-words text-base", children: item.label })
65532
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 truncate text-base", children: item.label })
65461
65533
  ]
65462
65534
  },
65463
65535
  `${typeof item.label === "string" ? item.label : "item"}-${itemIndex}`
@@ -65481,8 +65553,8 @@ var NavbarPlatformResources = ({
65481
65553
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-col p-5 xl:p-8", children: [
65482
65554
  ctaItem.background && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-8 text-xs tracking-widest text-muted-foreground uppercase", children: ctaItem.background }),
65483
65555
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-auto", children: [
65484
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4 break-words text-xl", children: ctaItem.label }),
65485
- ctaItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "break-words text-sm font-normal text-muted-foreground", children: ctaItem.description })
65556
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4 truncate text-xl", children: ctaItem.label }),
65557
+ ctaItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: ctaItem.description })
65486
65558
  ] })
65487
65559
  ] })
65488
65560
  ] })
@@ -65510,7 +65582,7 @@ var NavbarPlatformResources = ({
65510
65582
  size: 16
65511
65583
  }
65512
65584
  ),
65513
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 break-words text-base", children: item.label })
65585
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 truncate text-base", children: item.label })
65514
65586
  ]
65515
65587
  },
65516
65588
  `${typeof item.label === "string" ? item.label : "item"}-${itemIndex}`
@@ -65523,8 +65595,8 @@ var NavbarPlatformResources = ({
65523
65595
  className: "!flex !w-full min-w-0 flex-row items-center overflow-clip rounded-lg border border-input bg-background p-0 hover:bg-transparent",
65524
65596
  children: [
65525
65597
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1 p-5 xl:p-8", children: [
65526
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 break-words text-base", children: showcase.label }),
65527
- showcase.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "break-words text-sm font-normal text-muted-foreground", children: showcase.description })
65598
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 truncate text-base", children: showcase.label }),
65599
+ showcase.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: showcase.description })
65528
65600
  ] }),
65529
65601
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-[154px] max-w-[264px] shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(
65530
65602
  img.Img,
@@ -65556,8 +65628,8 @@ var NavbarPlatformResources = ({
65556
65628
  href: getLinkUrl(item),
65557
65629
  className: "!flex h-full w-full min-w-0 flex-col overflow-clip rounded-lg border border-input bg-background p-5 hover:bg-accent hover:text-accent-foreground xl:p-8",
65558
65630
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-auto", children: [
65559
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 break-words text-base", children: item.label }),
65560
- item.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "break-words text-sm font-normal text-muted-foreground", children: item.description })
65631
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 truncate text-base", children: item.label }),
65632
+ item.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: item.description })
65561
65633
  ] })
65562
65634
  },
65563
65635
  `${typeof item.label === "string" ? item.label : "item"}-${itemIndex}`
@@ -65574,8 +65646,8 @@ var NavbarPlatformResources = ({
65574
65646
  className: "mb-6 !flex !w-full min-w-0 flex-row overflow-clip rounded-lg border border-input bg-background p-0 hover:bg-transparent",
65575
65647
  children: [
65576
65648
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1 p-5 xl:p-8", children: [
65577
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 break-words text-base", children: ctaItem.label }),
65578
- ctaItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "break-words text-sm font-normal text-muted-foreground", children: ctaItem.description })
65649
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 truncate text-base", children: ctaItem.label }),
65650
+ ctaItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: ctaItem.description })
65579
65651
  ] }),
65580
65652
  ctaItem.image && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-1/3 max-w-[130px] shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(
65581
65653
  img.Img,
@@ -65591,7 +65663,7 @@ var NavbarPlatformResources = ({
65591
65663
  ),
65592
65664
  ctaItem.background && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-row items-center gap-3 rounded-lg bg-secondary/30 p-3 hover:bg-secondary/80 focus:bg-secondary/80", children: [
65593
65665
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-md bg-secondary px-2 py-1 text-xs font-semibold text-secondary-foreground", children: ctaItem.background }),
65594
- ctaItem.description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-ellipsis text-secondary-foreground", children: ctaItem.description })
65666
+ ctaItem.description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-sm text-secondary-foreground", children: ctaItem.description })
65595
65667
  ] })
65596
65668
  ] })
65597
65669
  ] }) });
@@ -65613,8 +65685,8 @@ var NavbarPlatformResources = ({
65613
65685
  ) }),
65614
65686
  !item.image && (item.icon || item.iconName) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-12 w-12 shrink-0 items-center justify-center rounded-md border border-border bg-muted/40 text-muted-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: item.icon || item.iconName, size: 18 }) }),
65615
65687
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
65616
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "break-words text-sm font-medium text-foreground", children: item.label }),
65617
- item.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "break-words text-sm font-normal text-muted-foreground", children: item.description })
65688
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-medium text-foreground", children: item.label }),
65689
+ item.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: item.description })
65618
65690
  ] })
65619
65691
  ]
65620
65692
  },
@@ -111009,22 +111081,59 @@ var BLOCK_REGISTRY = {
111009
111081
  },
111010
111082
  "hero-tech-carousel": {
111011
111083
  id: "hero-tech-carousel",
111012
- name: "Tech Carousel Hero",
111013
- description: "A hero section with a carousel of technology logos or partner brands. Features headline, description, and auto-scrolling logo carousel. Perfect for showcasing integrations.",
111084
+ name: "Multi-Panel Hero",
111085
+ description: "A full-bleed hero with up to four side-by-side panels on desktop that stack vertically on mobile. Each panel supports an optional logo, title, content, action buttons, and an optional background image or autoplaying image carousel.",
111014
111086
  semanticTags: [
111015
111087
  "hero",
111016
- "carousel",
111017
- "tech",
111018
- "logos",
111019
- "partners",
111020
- "integrations",
111088
+ "multi-panel",
111089
+ "split",
111090
+ "full-bleed",
111091
+ "fullscreen",
111092
+ "background-image",
111093
+ "image-carousel",
111021
111094
  "brands",
111022
- "auto-scroll"
111095
+ "showcase",
111096
+ "cta"
111023
111097
  ],
111024
111098
  category: "hero",
111025
111099
  component: HeroTechCarousel,
111026
111100
  props: "HeroTechCarouselProps",
111027
- exampleUsage: `<HeroTechCarousel />`.trim()
111101
+ exampleUsage: `
111102
+ <HeroTechCarousel
111103
+ items={[
111104
+ {
111105
+ logo: { src: "/logos/insurance.svg", alt: "InsuranceSite" },
111106
+ title: "InsuranceSite",
111107
+ content: "Built for modern brokers",
111108
+ actions: [{ label: "Get Started", href: "/insurance" }],
111109
+ backgroundMedia: [
111110
+ { src: "/img/insurance-1.jpg", alt: "" },
111111
+ { src: "/img/insurance-2.jpg", alt: "" },
111112
+ ],
111113
+ },
111114
+ {
111115
+ logo: { src: "/logos/realtor.svg", alt: "RealtorSite" },
111116
+ title: "RealtorSite",
111117
+ content: "For high-volume listing agents",
111118
+ actions: [{ label: "Get Started", href: "/realtor" }],
111119
+ backgroundMedia: [{ src: "/img/realtor.jpg", alt: "" }],
111120
+ },
111121
+ {
111122
+ logo: { src: "/logos/castkit.svg", alt: "CastKit" },
111123
+ title: "CastKit",
111124
+ content: "AI-powered podcast production",
111125
+ actions: [{ label: "Get Started", href: "/castkit" }],
111126
+ },
111127
+ {
111128
+ logo: { src: "/logos/opensite.svg", alt: "OpenSite" },
111129
+ title: "OpenSite",
111130
+ content: "The platform behind it all",
111131
+ actions: [{ label: "Get Started", href: "/opensite" }],
111132
+ backgroundMedia: [{ src: "/img/opensite.jpg", alt: "" }],
111133
+ },
111134
+ ]}
111135
+ />
111136
+ `.trim()
111028
111137
  },
111029
111138
  "hero-simple-centered-image": {
111030
111139
  id: "hero-simple-centered-image",