@opensite/ui 2.3.9 → 2.4.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
@@ -7927,7 +7927,7 @@ function AboutStreamlineTeam({
7927
7927
  }
7928
7928
  )
7929
7929
  ] }),
7930
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pl-0 md:pl-8", children: [
7930
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pl-0 md:pl-8 lg:pl-16", children: [
7931
7931
  title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
7932
7932
  "h1",
7933
7933
  {
@@ -7978,7 +7978,8 @@ function AboutStreamlineTeam({
7978
7978
  {
7979
7979
  actions,
7980
7980
  actionsSlot,
7981
- actionsClassName
7981
+ actionsClassName,
7982
+ verticalSpacing: "mt-4 md:mt-0"
7982
7983
  }
7983
7984
  )
7984
7985
  ]
@@ -8820,7 +8821,7 @@ function AboutMissionDualImage({
8820
8821
  if (!primaryHeading || !secondaryContent) {
8821
8822
  return null;
8822
8823
  }
8823
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-4 md:gap-6", children: [
8824
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-2 md:gap-4", children: [
8824
8825
  primaryHeading && (typeof primaryHeading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
8825
8826
  "h2",
8826
8827
  {
@@ -8831,7 +8832,7 @@ function AboutMissionDualImage({
8831
8832
  children: primaryHeading
8832
8833
  }
8833
8834
  ) : primaryHeading),
8834
- secondaryContent && (typeof secondaryContent === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-4 text-lg", secondaryClassname), children: secondaryContent }) : secondaryContent)
8835
+ secondaryContent && (typeof secondaryContent === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-base md:text-lg", secondaryClassname), children: secondaryContent }) : secondaryContent)
8835
8836
  ] });
8836
8837
  },
8837
8838
  []
@@ -26191,6 +26192,11 @@ function FeatureBentoImageGrid({
26191
26192
  }
26192
26193
  );
26193
26194
  }
26195
+ var ASPECT_RATIO_CLASSES = {
26196
+ square: "aspect-square",
26197
+ horizontal: "aspect-video",
26198
+ vertical: "aspect-[3/4]"
26199
+ };
26194
26200
  function FeatureImageCardsThreeColumn({
26195
26201
  title,
26196
26202
  description,
@@ -26208,7 +26214,8 @@ function FeatureImageCardsThreeColumn({
26208
26214
  background,
26209
26215
  pattern,
26210
26216
  patternOpacity,
26211
- patternClassName
26217
+ patternClassName,
26218
+ cardAspectRatios = { desktop: "vertical", mobile: "square" }
26212
26219
  }) {
26213
26220
  const renderImage = React27.useCallback(
26214
26221
  (card, imageAlt) => {
@@ -26219,7 +26226,7 @@ function FeatureImageCardsThreeColumn({
26219
26226
  {
26220
26227
  src: card.imageSrc,
26221
26228
  alt: imageAlt,
26222
- className: "h-full max-h-[450px] min-h-80 w-full rounded-xl object-cover object-center",
26229
+ className: "absolute inset-0 h-full w-full rounded-xl object-cover object-center",
26223
26230
  loading: "lazy",
26224
26231
  optixFlowConfig
26225
26232
  }
@@ -26238,77 +26245,149 @@ function FeatureImageCardsThreeColumn({
26238
26245
  },
26239
26246
  []
26240
26247
  );
26248
+ const renderCardBadge = React27.useCallback(
26249
+ (card) => {
26250
+ return card.badgeText || card.avatarSrc || card.icon || card.iconName ? /* @__PURE__ */ jsxRuntime.jsxs(
26251
+ Badge,
26252
+ {
26253
+ variant: "default",
26254
+ className: cn("py-1 px-3 gap-2", card.badgeClassName),
26255
+ children: [
26256
+ renderBadgeIcon(card),
26257
+ card.badgeText
26258
+ ]
26259
+ }
26260
+ ) : null;
26261
+ },
26262
+ [renderBadgeIcon]
26263
+ );
26264
+ const cardHasTextContent = React27.useCallback(
26265
+ (card) => {
26266
+ const hasBadge = !!(card.badgeText || card.avatarSrc || card.icon || card.iconName);
26267
+ return hasBadge || !!card.title || !!card.subtitle || !!card.linkText;
26268
+ },
26269
+ []
26270
+ );
26271
+ const renderCardText = React27.useCallback(
26272
+ (card) => {
26273
+ if (!cardHasTextContent(card)) {
26274
+ return null;
26275
+ }
26276
+ const cardBadge = renderCardBadge(card);
26277
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-4 md:p-6", children: [
26278
+ cardBadge || /* @__PURE__ */ jsxRuntime.jsx("div", {}),
26279
+ card.title || card.subtitle || card.linkText ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-4 md:gap-6 text-white", children: [
26280
+ card.title || card.subtitle ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-2 md:gap-4", children: [
26281
+ card.title && (typeof card.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
26282
+ "h3",
26283
+ {
26284
+ className: cn(
26285
+ "text-lg md:text-xl font-semibold",
26286
+ card.titleClassName
26287
+ ),
26288
+ children: card.title
26289
+ }
26290
+ ) : card.title),
26291
+ card.subtitle && (typeof card.subtitle === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
26292
+ "p",
26293
+ {
26294
+ className: cn(
26295
+ "text-base font-normal",
26296
+ card.subtitleClassName
26297
+ ),
26298
+ children: card.subtitle
26299
+ }
26300
+ ) : card.subtitle)
26301
+ ] }) : null,
26302
+ card.linkText && /* @__PURE__ */ jsxRuntime.jsxs(
26303
+ "div",
26304
+ {
26305
+ className: cn(
26306
+ "font-bold text-xs uppercase flex items-center gap-2",
26307
+ card.linkClassName
26308
+ ),
26309
+ children: [
26310
+ card.linkText,
26311
+ /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/arrow-up-right", size: 18 })
26312
+ ]
26313
+ }
26314
+ )
26315
+ ] }) : null
26316
+ ] });
26317
+ },
26318
+ [cardHasTextContent, renderCardBadge]
26319
+ );
26241
26320
  const cardsContent = React27.useMemo(() => {
26242
26321
  if (cardsSlot) return cardsSlot;
26243
26322
  if (!cards || cards.length === 0) return null;
26244
26323
  return cards.map((card, index) => {
26245
26324
  const imageAlt = card.imageAlt || (typeof card.title === "string" ? card.title : "Card image");
26325
+ const mobileAspectClass = ASPECT_RATIO_CLASSES[cardAspectRatios.mobile];
26326
+ const desktopAspectClass = `md:${ASPECT_RATIO_CLASSES[cardAspectRatios.desktop]}`;
26246
26327
  return /* @__PURE__ */ jsxRuntime.jsxs(
26247
26328
  Pressable,
26248
26329
  {
26249
26330
  href: card.link,
26250
26331
  onClick: card.onClick,
26251
26332
  className: cn(
26252
- "group relative overflow-hidden rounded-xl",
26333
+ "group relative overflow-hidden rounded-2xl shadow-xl",
26334
+ mobileAspectClass,
26335
+ desktopAspectClass,
26253
26336
  cardClassName,
26254
26337
  card.className
26255
26338
  ),
26256
26339
  children: [
26257
26340
  renderImage(card, imageAlt),
26258
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-0 right-0 bottom-0 left-0 translate-y-10 md:translate-y-20 rounded-xl bg-linear-to-t from-black to-transparent transition-transform duration-300 group-hover:translate-y-0" }),
26259
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-4 md:p-6", children: [
26260
- (card.badgeText || card.avatarSrc || card.icon || card.iconName) && /* @__PURE__ */ jsxRuntime.jsxs(
26261
- Badge,
26262
- {
26263
- variant: "default",
26264
- className: cn("py-1 px-4", card.badgeClassName),
26265
- children: [
26266
- renderBadgeIcon(card),
26267
- card.badgeText
26268
- ]
26269
- }
26270
- ),
26271
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2 md:gap-4", children: [
26272
- card.title && (typeof card.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
26273
- "h3",
26274
- {
26275
- className: cn(
26276
- "text-lg md:text-xl font-semibold",
26277
- card.titleClassName
26278
- ),
26279
- children: card.title
26280
- }
26281
- ) : /* @__PURE__ */ jsxRuntime.jsx(
26282
- "div",
26283
- {
26284
- className: cn(
26285
- "text-lg md:text-xl font-semibold",
26286
- card.titleClassName
26287
- ),
26288
- children: card.title
26289
- }
26290
- )),
26291
- card.linkText && card.link && /* @__PURE__ */ jsxRuntime.jsxs(
26292
- "div",
26293
- {
26294
- className: cn(
26295
- "font-bold text-xs uppercase flex items-center gap-2",
26296
- card.linkClassName
26297
- ),
26298
- children: [
26299
- card.linkText,
26300
- /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/arrow-up-right", size: 18 })
26301
- ]
26302
- }
26303
- )
26304
- ] })
26305
- ] })
26341
+ cardHasTextContent(card) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-0 right-0 bottom-0 left-0 translate-y-10 md:translate-y-20 rounded-xl bg-linear-to-t from-black to-transparent transition-transform duration-300 group-hover:translate-y-0" }),
26342
+ renderCardText(card)
26306
26343
  ]
26307
26344
  },
26308
26345
  index
26309
26346
  );
26310
26347
  });
26311
- }, [cardsSlot, cards, cardClassName, renderImage, renderBadgeIcon]);
26348
+ }, [
26349
+ cardsSlot,
26350
+ cards,
26351
+ cardClassName,
26352
+ cardAspectRatios,
26353
+ renderImage,
26354
+ cardHasTextContent,
26355
+ renderCardText
26356
+ ]);
26357
+ const contentItems = React27.useMemo(() => {
26358
+ const items = [];
26359
+ if (title) {
26360
+ if (typeof title === "string") {
26361
+ items.push({
26362
+ _type: "text",
26363
+ as: "h2",
26364
+ className: cn(
26365
+ "text-3xl font-semibold text-balance md:text-4xl lg:text-5xl max-w-full md:max-w-md",
26366
+ title
26367
+ ),
26368
+ children: title
26369
+ });
26370
+ } else {
26371
+ items.push(title);
26372
+ }
26373
+ }
26374
+ if (description) {
26375
+ if (typeof description === "string") {
26376
+ items.push({
26377
+ _type: "text",
26378
+ as: "p",
26379
+ className: cn(
26380
+ "text-xl max-w-full md:max-w-md text-balance",
26381
+ descriptionClassName
26382
+ ),
26383
+ children: description
26384
+ });
26385
+ } else {
26386
+ items.push(description);
26387
+ }
26388
+ }
26389
+ return items;
26390
+ }, [title, titleClassName, description, descriptionClassName]);
26312
26391
  return /* @__PURE__ */ jsxRuntime.jsx(
26313
26392
  Section,
26314
26393
  {
@@ -26320,34 +26399,16 @@ function FeatureImageCardsThreeColumn({
26320
26399
  className,
26321
26400
  containerClassName,
26322
26401
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col space-y-6 md:space-y-16", children: [
26323
- title || description ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-6 text-left", headerClassName), children: [
26324
- title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
26325
- "h2",
26326
- {
26327
- className: cn(
26328
- "text-2xl font-semibold text-balance md:text-3xl lg:text-4xl max-w-lg md:max-w-md",
26329
- titleClassName
26330
- ),
26331
- children: title
26332
- }
26333
- ) : /* @__PURE__ */ jsxRuntime.jsx(
26334
- "div",
26335
- {
26336
- className: cn(
26337
- "text-2xl font-semibold text-balance md:text-3xl lg:text-4xl max-w-lg md:max-w-md",
26338
- titleClassName
26339
- ),
26340
- children: title
26341
- }
26342
- )),
26343
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("max-w-lg md:max-w-md", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx(
26344
- "div",
26345
- {
26346
- className: cn("max-w-lg md:max-w-md", descriptionClassName),
26347
- children: description
26348
- }
26349
- ))
26350
- ] }) : null,
26402
+ /* @__PURE__ */ jsxRuntime.jsx(
26403
+ ContentGroup,
26404
+ {
26405
+ items: contentItems,
26406
+ className: cn(
26407
+ "flex flex-col gap-2 text-left items-start",
26408
+ headerClassName
26409
+ )
26410
+ }
26411
+ ),
26351
26412
  /* @__PURE__ */ jsxRuntime.jsx(
26352
26413
  "div",
26353
26414
  {
@@ -41497,6 +41558,40 @@ function FeatureAnimatedCarousel({
41497
41558
  );
41498
41559
  }
41499
41560
  const currentFeature = features[activeIndex];
41561
+ const contentItems = React27.useMemo(() => {
41562
+ const items = [];
41563
+ if (title) {
41564
+ if (typeof title === "string") {
41565
+ items.push({
41566
+ _type: "text",
41567
+ as: "h2",
41568
+ className: cn(
41569
+ "text-3xl font-semibold text-balance md:text-4xl lg:text-5xl max-w-full md:max-w-md",
41570
+ title
41571
+ ),
41572
+ children: title
41573
+ });
41574
+ } else {
41575
+ items.push(title);
41576
+ }
41577
+ }
41578
+ if (description) {
41579
+ if (typeof description === "string") {
41580
+ items.push({
41581
+ _type: "text",
41582
+ as: "p",
41583
+ className: cn(
41584
+ "text-xl max-w-full md:max-w-md text-balance",
41585
+ descriptionClassName
41586
+ ),
41587
+ children: description
41588
+ });
41589
+ } else {
41590
+ items.push(description);
41591
+ }
41592
+ }
41593
+ return items;
41594
+ }, [title, titleClassName, description, descriptionClassName]);
41500
41595
  return /* @__PURE__ */ jsxRuntime.jsx(
41501
41596
  Section,
41502
41597
  {
@@ -41508,43 +41603,16 @@ function FeatureAnimatedCarousel({
41508
41603
  className,
41509
41604
  containerClassName,
41510
41605
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col space-y-6 md:space-y-16", children: [
41511
- title || description ? /* @__PURE__ */ jsxRuntime.jsxs(
41512
- "div",
41606
+ /* @__PURE__ */ jsxRuntime.jsx(
41607
+ ContentGroup,
41513
41608
  {
41609
+ items: contentItems,
41514
41610
  className: cn(
41515
- "flex flex-col gap-4 md:gap-6 text-left",
41611
+ "flex flex-col gap-2 text-left items-start",
41516
41612
  headerClassName
41517
- ),
41518
- children: [
41519
- title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
41520
- "h2",
41521
- {
41522
- className: cn(
41523
- "text-xl font-semibold text-balance md:text-2xl lg:text-3xl max-w-lg md:max-w-md",
41524
- titleClassName
41525
- ),
41526
- children: title
41527
- }
41528
- ) : /* @__PURE__ */ jsxRuntime.jsx(
41529
- "div",
41530
- {
41531
- className: cn(
41532
- "text-xl font-semibold text-balance md:text-2xl lg:text-3xl max-w-lg md:max-w-md",
41533
- titleClassName
41534
- ),
41535
- children: title
41536
- }
41537
- )),
41538
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("max-w-lg md:max-w-md", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx(
41539
- "div",
41540
- {
41541
- className: cn("max-w-lg md:max-w-md", descriptionClassName),
41542
- children: description
41543
- }
41544
- ))
41545
- ]
41613
+ )
41546
41614
  }
41547
- ) : null,
41615
+ ),
41548
41616
  /* @__PURE__ */ jsxRuntime.jsxs(
41549
41617
  "div",
41550
41618
  {