@opensite/ui 3.5.0 → 3.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/registry.cjs CHANGED
@@ -51238,105 +51238,219 @@ 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-3xl md:text-4xl lg:text-5xl 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 === "") return null;
51372
+ if (typeof content === "string") {
51373
+ return /* @__PURE__ */ jsxRuntime.jsx(
51374
+ "p",
51375
+ {
51376
+ className: cn(
51377
+ "text-base md:text-lg leading-relaxed text-balance",
51378
+ hasBackground ? "text-white/90 text-shadow" : "text-muted-foreground",
51379
+ textClassName
51380
+ ),
51381
+ children: content
51382
+ }
51383
+ );
51384
+ }
51385
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: textClassName, children: content });
51386
+ }, [content, textClassName, hasBackground]);
51387
+ return /* @__PURE__ */ jsxRuntime.jsxs(
51388
+ "div",
51389
+ {
51390
+ id,
51391
+ "data-slot": "hero-tech-carousel-panel",
51392
+ className: cn(
51393
+ // Mobile: stack vertically with content-fit height + padding.
51394
+ "relative w-full overflow-hidden",
51395
+ // Desktop: flex children share the row equally and fill height.
51396
+ "md:h-full md:flex-1 md:basis-0 md:min-w-0",
51397
+ // Provide a default panel background when no media is supplied so
51398
+ // separators between panels remain visible.
51399
+ !hasBackground && "bg-muted/30",
51400
+ className
51401
+ ),
51402
+ children: [
51403
+ renderBackground,
51404
+ /* @__PURE__ */ jsxRuntime.jsxs(
51405
+ "div",
51406
+ {
51407
+ className: cn(
51408
+ "relative z-10 flex h-full w-full flex-col items-center justify-center gap-4 md:gap-6",
51409
+ // Mobile padding keeps content readable when stacked.
51410
+ "px-6 py-12 md:px-8 md:py-12 lg:px-10",
51411
+ // Center content vertically; on desktop columns can be quite tall.
51412
+ "text-center",
51413
+ panelContentClassName,
51414
+ contentClassName
51415
+ ),
51416
+ children: [
51417
+ renderLogo,
51418
+ renderTitle,
51419
+ renderContent,
51420
+ /* @__PURE__ */ jsxRuntime.jsx(
51421
+ BlockActions,
51422
+ {
51423
+ actions,
51424
+ actionsClassName,
51425
+ verticalSpacing: "mt-2 md:mt-4",
51426
+ mobileConfig: { width: "fit", position: "center" }
51427
+ }
51428
+ )
51429
+ ]
51430
+ }
51431
+ )
51432
+ ]
51433
+ }
51434
+ );
51435
+ }
51241
51436
  function HeroTechCarousel({
51242
51437
  sectionId = "hero-tech-carousel",
51243
- heading,
51244
- description,
51245
- technologies,
51246
- carouselSlot,
51247
- autoplayDelay = 5e3,
51438
+ items,
51439
+ backgroundAutoplayIntervalMs = 5e3,
51248
51440
  background,
51441
+ spacing = "none",
51249
51442
  pattern,
51250
51443
  patternOpacity,
51251
51444
  className,
51252
- containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
51253
- spacing = "py-32",
51254
- headingClassName,
51255
- descriptionClassName,
51445
+ 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",
51446
+ panelsClassName,
51447
+ panelContentClassName,
51256
51448
  optixFlowConfig
51257
51449
  }) {
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
- ]);
51450
+ const visibleItems = React30.useMemo(() => {
51451
+ if (!items || items.length === 0) return [];
51452
+ return items.slice(0, HERO_TECH_CAROUSEL_MAX_ITEMS);
51453
+ }, [items]);
51340
51454
  return /* @__PURE__ */ jsxRuntime.jsx(
51341
51455
  Section,
51342
51456
  {
@@ -51345,80 +51459,37 @@ function HeroTechCarousel({
51345
51459
  spacing,
51346
51460
  pattern,
51347
51461
  patternOpacity,
51348
- className,
51462
+ className: cn(
51463
+ "relative w-screen overflow-hidden",
51464
+ // Desktop fills the viewport; on mobile content drives the height.
51465
+ "h-auto md:h-dvh",
51466
+ "px-0 pt-0 pb-0",
51467
+ className
51468
+ ),
51349
51469
  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",
51470
+ children: visibleItems.length === 0 ? null : /* @__PURE__ */ jsxRuntime.jsx(
51471
+ "div",
51472
+ {
51473
+ "data-slot": "hero-tech-carousel-panels",
51474
+ className: cn(
51475
+ // Mobile: vertical stack with auto height per panel.
51476
+ "flex w-full flex-col",
51477
+ // Desktop: equal-width row that fills section height.
51478
+ "md:h-full md:flex-row md:items-stretch",
51479
+ panelsClassName
51480
+ ),
51481
+ children: visibleItems.map((item, idx) => /* @__PURE__ */ jsxRuntime.jsx(
51482
+ HeroPanel,
51383
51483
  {
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
- ] })
51484
+ item,
51485
+ defaultAutoplayIntervalMs: backgroundAutoplayIntervalMs,
51486
+ optixFlowConfig,
51487
+ panelContentClassName
51488
+ },
51489
+ item.id ?? idx
51490
+ ))
51491
+ }
51492
+ )
51422
51493
  }
51423
51494
  );
51424
51495
  }
@@ -65351,8 +65422,8 @@ var NavbarPlatformResources = ({
65351
65422
  }
65352
65423
  ) }),
65353
65424
  /* @__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 })
65425
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm font-medium truncate", children: item.label }),
65426
+ item.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: item.description })
65356
65427
  ] })
65357
65428
  ]
65358
65429
  },
@@ -65379,8 +65450,8 @@ var NavbarPlatformResources = ({
65379
65450
  }
65380
65451
  ) }),
65381
65452
  /* @__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 })
65453
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm font-medium truncate", children: item.label }),
65454
+ item.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-xs text-muted-foreground group-hover/link:text-foreground", children: item.description })
65384
65455
  ] })
65385
65456
  ]
65386
65457
  }
@@ -65409,8 +65480,8 @@ var NavbarPlatformResources = ({
65409
65480
  }
65410
65481
  ) }),
65411
65482
  /* @__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 })
65483
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 text-base truncate", children: featuredItem.label }),
65484
+ featuredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: featuredItem.description })
65414
65485
  ] })
65415
65486
  ] })
65416
65487
  }
@@ -65430,8 +65501,8 @@ var NavbarPlatformResources = ({
65430
65501
  size: 20
65431
65502
  }
65432
65503
  ) }),
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 })
65504
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-1 truncate text-base", children: item.label }),
65505
+ item.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: item.description })
65435
65506
  ]
65436
65507
  },
65437
65508
  `${typeof item.label === "string" ? item.label : "item"}-${itemIndex}`
@@ -65457,7 +65528,7 @@ var NavbarPlatformResources = ({
65457
65528
  size: 16
65458
65529
  }
65459
65530
  ) }),
65460
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 break-words text-base", children: item.label })
65531
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 truncate text-base", children: item.label })
65461
65532
  ]
65462
65533
  },
65463
65534
  `${typeof item.label === "string" ? item.label : "item"}-${itemIndex}`
@@ -65481,8 +65552,8 @@ var NavbarPlatformResources = ({
65481
65552
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-col p-5 xl:p-8", children: [
65482
65553
  ctaItem.background && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-8 text-xs tracking-widest text-muted-foreground uppercase", children: ctaItem.background }),
65483
65554
  /* @__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 })
65555
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-4 truncate text-xl", children: ctaItem.label }),
65556
+ ctaItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: ctaItem.description })
65486
65557
  ] })
65487
65558
  ] })
65488
65559
  ] })
@@ -65510,7 +65581,7 @@ var NavbarPlatformResources = ({
65510
65581
  size: 16
65511
65582
  }
65512
65583
  ),
65513
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 break-words text-base", children: item.label })
65584
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 truncate text-base", children: item.label })
65514
65585
  ]
65515
65586
  },
65516
65587
  `${typeof item.label === "string" ? item.label : "item"}-${itemIndex}`
@@ -65523,8 +65594,8 @@ var NavbarPlatformResources = ({
65523
65594
  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
65595
  children: [
65525
65596
  /* @__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 })
65597
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 truncate text-base", children: showcase.label }),
65598
+ showcase.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: showcase.description })
65528
65599
  ] }),
65529
65600
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-[154px] max-w-[264px] shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(
65530
65601
  img.Img,
@@ -65556,8 +65627,8 @@ var NavbarPlatformResources = ({
65556
65627
  href: getLinkUrl(item),
65557
65628
  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
65629
  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 })
65630
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 truncate text-base", children: item.label }),
65631
+ item.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: item.description })
65561
65632
  ] })
65562
65633
  },
65563
65634
  `${typeof item.label === "string" ? item.label : "item"}-${itemIndex}`
@@ -65574,8 +65645,8 @@ var NavbarPlatformResources = ({
65574
65645
  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
65646
  children: [
65576
65647
  /* @__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 })
65648
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 truncate text-base", children: ctaItem.label }),
65649
+ ctaItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: ctaItem.description })
65579
65650
  ] }),
65580
65651
  ctaItem.image && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-1/3 max-w-[130px] shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(
65581
65652
  img.Img,
@@ -65591,7 +65662,7 @@ var NavbarPlatformResources = ({
65591
65662
  ),
65592
65663
  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
65664
  /* @__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 })
65665
+ ctaItem.description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-sm text-secondary-foreground", children: ctaItem.description })
65595
65666
  ] })
65596
65667
  ] })
65597
65668
  ] }) });
@@ -65613,8 +65684,8 @@ var NavbarPlatformResources = ({
65613
65684
  ) }),
65614
65685
  !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
65686
  /* @__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 })
65687
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-medium text-foreground", children: item.label }),
65688
+ item.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-normal text-muted-foreground", children: item.description })
65618
65689
  ] })
65619
65690
  ]
65620
65691
  },
@@ -111009,22 +111080,59 @@ var BLOCK_REGISTRY = {
111009
111080
  },
111010
111081
  "hero-tech-carousel": {
111011
111082
  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.",
111083
+ name: "Multi-Panel Hero",
111084
+ 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
111085
  semanticTags: [
111015
111086
  "hero",
111016
- "carousel",
111017
- "tech",
111018
- "logos",
111019
- "partners",
111020
- "integrations",
111087
+ "multi-panel",
111088
+ "split",
111089
+ "full-bleed",
111090
+ "fullscreen",
111091
+ "background-image",
111092
+ "image-carousel",
111021
111093
  "brands",
111022
- "auto-scroll"
111094
+ "showcase",
111095
+ "cta"
111023
111096
  ],
111024
111097
  category: "hero",
111025
111098
  component: HeroTechCarousel,
111026
111099
  props: "HeroTechCarouselProps",
111027
- exampleUsage: `<HeroTechCarousel />`.trim()
111100
+ exampleUsage: `
111101
+ <HeroTechCarousel
111102
+ items={[
111103
+ {
111104
+ logo: { src: "/logos/insurance.svg", alt: "InsuranceSite" },
111105
+ title: "InsuranceSite",
111106
+ content: "Built for modern brokers",
111107
+ actions: [{ label: "Get Started", href: "/insurance" }],
111108
+ backgroundMedia: [
111109
+ { src: "/img/insurance-1.jpg", alt: "" },
111110
+ { src: "/img/insurance-2.jpg", alt: "" },
111111
+ ],
111112
+ },
111113
+ {
111114
+ logo: { src: "/logos/realtor.svg", alt: "RealtorSite" },
111115
+ title: "RealtorSite",
111116
+ content: "For high-volume listing agents",
111117
+ actions: [{ label: "Get Started", href: "/realtor" }],
111118
+ backgroundMedia: [{ src: "/img/realtor.jpg", alt: "" }],
111119
+ },
111120
+ {
111121
+ logo: { src: "/logos/castkit.svg", alt: "CastKit" },
111122
+ title: "CastKit",
111123
+ content: "AI-powered podcast production",
111124
+ actions: [{ label: "Get Started", href: "/castkit" }],
111125
+ },
111126
+ {
111127
+ logo: { src: "/logos/opensite.svg", alt: "OpenSite" },
111128
+ title: "OpenSite",
111129
+ content: "The platform behind it all",
111130
+ actions: [{ label: "Get Started", href: "/opensite" }],
111131
+ backgroundMedia: [{ src: "/img/opensite.jpg", alt: "" }],
111132
+ },
111133
+ ]}
111134
+ />
111135
+ `.trim()
111028
111136
  },
111029
111137
  "hero-simple-centered-image": {
111030
111138
  id: "hero-simple-centered-image",