@opensite/ui 1.2.0 → 1.2.2

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.
Files changed (33) hide show
  1. package/dist/auto-scroll-carousel.cjs +7 -9
  2. package/dist/auto-scroll-carousel.js +7 -9
  3. package/dist/blur-vignette-grid.cjs +19 -27
  4. package/dist/blur-vignette-grid.js +19 -27
  5. package/dist/carousel-badge-cards.cjs +1 -1
  6. package/dist/carousel-badge-cards.js +1 -1
  7. package/dist/carousel-gradient-overlay.cjs +1 -1
  8. package/dist/carousel-gradient-overlay.js +1 -1
  9. package/dist/carousel-gradient-text.cjs +6 -17
  10. package/dist/carousel-gradient-text.d.cts +4 -0
  11. package/dist/carousel-gradient-text.d.ts +4 -0
  12. package/dist/carousel-gradient-text.js +6 -17
  13. package/dist/carousel-icon-sidebar.cjs +49 -6
  14. package/dist/carousel-icon-sidebar.d.cts +19 -3
  15. package/dist/carousel-icon-sidebar.d.ts +19 -3
  16. package/dist/carousel-icon-sidebar.js +49 -6
  17. package/dist/carousel-icon-tabs.cjs +20 -6
  18. package/dist/carousel-icon-tabs.js +20 -6
  19. package/dist/carousel-scale-focus.cjs +4 -10
  20. package/dist/carousel-scale-focus.js +4 -10
  21. package/dist/carousel-tabs-content.cjs +6 -18
  22. package/dist/carousel-tabs-content.js +6 -18
  23. package/dist/expandable-case-study-cards.cjs +39 -80
  24. package/dist/expandable-case-study-cards.js +39 -80
  25. package/dist/interior-carousel.cjs +9 -12
  26. package/dist/interior-carousel.js +9 -12
  27. package/dist/masonry-motion-grid.cjs +5 -16
  28. package/dist/masonry-motion-grid.js +5 -16
  29. package/dist/registry.cjs +7660 -7687
  30. package/dist/registry.js +7658 -7685
  31. package/dist/testimonial-carousel-cards.cjs +10 -63
  32. package/dist/testimonial-carousel-cards.js +10 -63
  33. package/package.json +1 -1
@@ -1100,13 +1100,11 @@ function AutoScrollCarousel({
1100
1100
  className: actionClass,
1101
1101
  ...pressableProps
1102
1102
  } = action;
1103
- return /* @__PURE__ */ jsxRuntime.jsx(
1103
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex text-left", children: /* @__PURE__ */ jsxRuntime.jsx(
1104
1104
  Pressable,
1105
1105
  {
1106
- variant: "link",
1107
- asButton: true,
1108
1106
  className: cn(
1109
- "font-medium flex items-center",
1107
+ "font-medium flex items-center text-lg px-0",
1110
1108
  actionClass,
1111
1109
  actionClassName
1112
1110
  ),
@@ -1118,13 +1116,13 @@ function AutoScrollCarousel({
1118
1116
  DynamicIcon,
1119
1117
  {
1120
1118
  name: "lucide/move-right",
1121
- size: 20,
1119
+ size: 24,
1122
1120
  className: "ml-2 inline"
1123
1121
  }
1124
1122
  )
1125
1123
  ] })
1126
1124
  }
1127
- );
1125
+ ) });
1128
1126
  }, [actionSlot, action, actionClassName]);
1129
1127
  const imagesContent = React4.useMemo(() => {
1130
1128
  if (imagesSlot) return imagesSlot;
@@ -1159,15 +1157,15 @@ function AutoScrollCarousel({
1159
1157
  "div",
1160
1158
  {
1161
1159
  className: cn(
1162
- "mb-12 grid grid-cols-1 gap-x-12 gap-y-6 md:mb-16 md:grid-cols-2 md:gap-x-24",
1160
+ "mb-12 grid grid-cols-1 gap-x-12 gap-y-6 md:mb-16 md:grid-cols-2 md:gap-x-24 px-6 md:px-0",
1163
1161
  headerClassName
1164
1162
  ),
1165
1163
  children: [
1166
1164
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-8 md:gap-12", children: heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1167
- "h1",
1165
+ "h2",
1168
1166
  {
1169
1167
  className: cn(
1170
- "text-3xl font-bold md:text-4xl",
1168
+ "text-3xl font-bold md:text-4xl text-balance",
1171
1169
  headingClassName
1172
1170
  ),
1173
1171
  children: heading
@@ -1075,13 +1075,11 @@ function AutoScrollCarousel({
1075
1075
  className: actionClass,
1076
1076
  ...pressableProps
1077
1077
  } = action;
1078
- return /* @__PURE__ */ jsx(
1078
+ return /* @__PURE__ */ jsx("div", { className: "flex text-left", children: /* @__PURE__ */ jsx(
1079
1079
  Pressable,
1080
1080
  {
1081
- variant: "link",
1082
- asButton: true,
1083
1081
  className: cn(
1084
- "font-medium flex items-center",
1082
+ "font-medium flex items-center text-lg px-0",
1085
1083
  actionClass,
1086
1084
  actionClassName
1087
1085
  ),
@@ -1093,13 +1091,13 @@ function AutoScrollCarousel({
1093
1091
  DynamicIcon,
1094
1092
  {
1095
1093
  name: "lucide/move-right",
1096
- size: 20,
1094
+ size: 24,
1097
1095
  className: "ml-2 inline"
1098
1096
  }
1099
1097
  )
1100
1098
  ] })
1101
1099
  }
1102
- );
1100
+ ) });
1103
1101
  }, [actionSlot, action, actionClassName]);
1104
1102
  const imagesContent = useMemo(() => {
1105
1103
  if (imagesSlot) return imagesSlot;
@@ -1134,15 +1132,15 @@ function AutoScrollCarousel({
1134
1132
  "div",
1135
1133
  {
1136
1134
  className: cn(
1137
- "mb-12 grid grid-cols-1 gap-x-12 gap-y-6 md:mb-16 md:grid-cols-2 md:gap-x-24",
1135
+ "mb-12 grid grid-cols-1 gap-x-12 gap-y-6 md:mb-16 md:grid-cols-2 md:gap-x-24 px-6 md:px-0",
1138
1136
  headerClassName
1139
1137
  ),
1140
1138
  children: [
1141
1139
  /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-8 md:gap-12", children: heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
1142
- "h1",
1140
+ "h2",
1143
1141
  {
1144
1142
  className: cn(
1145
- "text-3xl font-bold md:text-4xl",
1143
+ "text-3xl font-bold md:text-4xl text-balance",
1146
1144
  headingClassName
1147
1145
  ),
1148
1146
  children: heading
@@ -428,9 +428,9 @@ function BlurVignette({
428
428
  --r: max(var(--transition-length), calc(var(--radius) - var(--inset)));
429
429
  --corner-size: calc(var(--r) + var(--inset)) calc(var(--r) + var(--inset));
430
430
  --corner-gradient: transparent 0px,
431
- transparent calc(var(--r) - var(--transition-length)),
431
+ transparent calc(var(--r) - var(--transition-length)),
432
432
  black var(--r);
433
- --fill-gradient: black,
433
+ --fill-gradient: black,
434
434
  black var(--inset),
435
435
  transparent calc(var(--inset) + var(--transition-length)),
436
436
  transparent calc(100% - var(--transition-length) - var(--inset)),
@@ -443,21 +443,21 @@ function BlurVignette({
443
443
  radial-gradient(at bottom left, var(--corner-gradient)),
444
444
  radial-gradient(at top left, var(--corner-gradient)),
445
445
  radial-gradient(at top right, var(--corner-gradient));
446
- -webkit-mask-size: 100% var(--fill-narrow-size),
446
+ -webkit-mask-size: 100% var(--fill-narrow-size),
447
447
  var(--fill-narrow-size) 100%,
448
- var(--corner-size),
449
- var(--corner-size),
448
+ var(--corner-size),
449
+ var(--corner-size),
450
450
  var(--corner-size),
451
451
  var(--corner-size);
452
- -webkit-mask-position: 0 var(--fill-farther-position),
452
+ -webkit-mask-position: 0 var(--fill-farther-position),
453
453
  var(--fill-farther-position) 0,
454
- 0 0,
455
- 100% 0,
456
- 100% 100%,
454
+ 0 0,
455
+ 100% 0,
456
+ 100% 100%,
457
457
  0 100%;
458
458
  -webkit-mask-repeat: no-repeat;
459
459
  opacity: 0;
460
- transition: opacity 0.3s ease;
460
+ transition: opacity 0.3s ease;
461
461
  }
462
462
 
463
463
  .blur-vignette.active {
@@ -556,33 +556,21 @@ function BlurVignetteGrid({
556
556
  patternClassName,
557
557
  className,
558
558
  children: [
559
- title || description ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4", children: [
559
+ title || description ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 mb-16", children: [
560
560
  title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
561
561
  "h2",
562
562
  {
563
563
  className: cn(
564
- "text-xl font-medium tracking-tight md:text-2xl lg:text-3xl",
564
+ "text-xl font-medium tracking-tight md:text-2xl lg:text-3xl text-balance",
565
565
  titleClassName
566
566
  ),
567
567
  children: title
568
568
  }
569
569
  ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: titleClassName, children: title })),
570
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
571
- "p",
572
- {
573
- className: cn(
574
- "max-w-lg text-muted-foreground",
575
- descriptionClassName
576
- ),
577
- children: description
578
- }
579
- ) : /* @__PURE__ */ jsxRuntime.jsx(
570
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("max-w-lg text-balance", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx(
580
571
  "div",
581
572
  {
582
- className: cn(
583
- "max-w-lg text-muted-foreground",
584
- descriptionClassName
585
- ),
573
+ className: cn("max-w-lg text-balance", descriptionClassName),
586
574
  children: description
587
575
  }
588
576
  ))
@@ -590,7 +578,11 @@ function BlurVignetteGrid({
590
578
  /* @__PURE__ */ jsxRuntime.jsx(
591
579
  "div",
592
580
  {
593
- className: cn(`grid grid-cols-1 md:grid-cols-${gridColumns}`, gridGap, gridClassName),
581
+ className: cn(
582
+ `grid grid-cols-1 md:grid-cols-${gridColumns}`,
583
+ gridGap,
584
+ gridClassName
585
+ ),
594
586
  children: imagesContent
595
587
  }
596
588
  )
@@ -422,9 +422,9 @@ function BlurVignette({
422
422
  --r: max(var(--transition-length), calc(var(--radius) - var(--inset)));
423
423
  --corner-size: calc(var(--r) + var(--inset)) calc(var(--r) + var(--inset));
424
424
  --corner-gradient: transparent 0px,
425
- transparent calc(var(--r) - var(--transition-length)),
425
+ transparent calc(var(--r) - var(--transition-length)),
426
426
  black var(--r);
427
- --fill-gradient: black,
427
+ --fill-gradient: black,
428
428
  black var(--inset),
429
429
  transparent calc(var(--inset) + var(--transition-length)),
430
430
  transparent calc(100% - var(--transition-length) - var(--inset)),
@@ -437,21 +437,21 @@ function BlurVignette({
437
437
  radial-gradient(at bottom left, var(--corner-gradient)),
438
438
  radial-gradient(at top left, var(--corner-gradient)),
439
439
  radial-gradient(at top right, var(--corner-gradient));
440
- -webkit-mask-size: 100% var(--fill-narrow-size),
440
+ -webkit-mask-size: 100% var(--fill-narrow-size),
441
441
  var(--fill-narrow-size) 100%,
442
- var(--corner-size),
443
- var(--corner-size),
442
+ var(--corner-size),
443
+ var(--corner-size),
444
444
  var(--corner-size),
445
445
  var(--corner-size);
446
- -webkit-mask-position: 0 var(--fill-farther-position),
446
+ -webkit-mask-position: 0 var(--fill-farther-position),
447
447
  var(--fill-farther-position) 0,
448
- 0 0,
449
- 100% 0,
450
- 100% 100%,
448
+ 0 0,
449
+ 100% 0,
450
+ 100% 100%,
451
451
  0 100%;
452
452
  -webkit-mask-repeat: no-repeat;
453
453
  opacity: 0;
454
- transition: opacity 0.3s ease;
454
+ transition: opacity 0.3s ease;
455
455
  }
456
456
 
457
457
  .blur-vignette.active {
@@ -550,33 +550,21 @@ function BlurVignetteGrid({
550
550
  patternClassName,
551
551
  className,
552
552
  children: [
553
- title || description ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
553
+ title || description ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 mb-16", children: [
554
554
  title && (typeof title === "string" ? /* @__PURE__ */ jsx(
555
555
  "h2",
556
556
  {
557
557
  className: cn(
558
- "text-xl font-medium tracking-tight md:text-2xl lg:text-3xl",
558
+ "text-xl font-medium tracking-tight md:text-2xl lg:text-3xl text-balance",
559
559
  titleClassName
560
560
  ),
561
561
  children: title
562
562
  }
563
563
  ) : /* @__PURE__ */ jsx("div", { className: titleClassName, children: title })),
564
- description && (typeof description === "string" ? /* @__PURE__ */ jsx(
565
- "p",
566
- {
567
- className: cn(
568
- "max-w-lg text-muted-foreground",
569
- descriptionClassName
570
- ),
571
- children: description
572
- }
573
- ) : /* @__PURE__ */ jsx(
564
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("max-w-lg text-balance", descriptionClassName), children: description }) : /* @__PURE__ */ jsx(
574
565
  "div",
575
566
  {
576
- className: cn(
577
- "max-w-lg text-muted-foreground",
578
- descriptionClassName
579
- ),
567
+ className: cn("max-w-lg text-balance", descriptionClassName),
580
568
  children: description
581
569
  }
582
570
  ))
@@ -584,7 +572,11 @@ function BlurVignetteGrid({
584
572
  /* @__PURE__ */ jsx(
585
573
  "div",
586
574
  {
587
- className: cn(`grid grid-cols-1 md:grid-cols-${gridColumns}`, gridGap, gridClassName),
575
+ className: cn(
576
+ `grid grid-cols-1 md:grid-cols-${gridColumns}`,
577
+ gridGap,
578
+ gridClassName
579
+ ),
588
580
  children: imagesContent
589
581
  }
590
582
  )
@@ -1243,7 +1243,7 @@ function CarouselBadgeCards({
1243
1243
  "div",
1244
1244
  {
1245
1245
  className: cn(
1246
- "mb-8 flex items-end justify-between md:mb-14 lg:mb-16",
1246
+ "mb-8 flex items-end justify-between md:mb-14 lg:mb-16 px-6 md:px-0",
1247
1247
  headerClassName
1248
1248
  ),
1249
1249
  children: [
@@ -1219,7 +1219,7 @@ function CarouselBadgeCards({
1219
1219
  "div",
1220
1220
  {
1221
1221
  className: cn(
1222
- "mb-8 flex items-end justify-between md:mb-14 lg:mb-16",
1222
+ "mb-8 flex items-end justify-between md:mb-14 lg:mb-16 px-6 md:px-0",
1223
1223
  headerClassName
1224
1224
  ),
1225
1225
  children: [
@@ -1254,7 +1254,7 @@ function CarouselGradientOverlay({
1254
1254
  ]
1255
1255
  }
1256
1256
  ),
1257
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full -mx-4 sm:-mx-6 lg:-mx-8", children: [
1257
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full -mx-4", children: [
1258
1258
  /* @__PURE__ */ jsxRuntime.jsx(
1259
1259
  Carousel,
1260
1260
  {
@@ -1230,7 +1230,7 @@ function CarouselGradientOverlay({
1230
1230
  ]
1231
1231
  }
1232
1232
  ),
1233
- /* @__PURE__ */ jsxs("div", { className: "w-full -mx-4 sm:-mx-6 lg:-mx-8", children: [
1233
+ /* @__PURE__ */ jsxs("div", { className: "w-full -mx-4", children: [
1234
1234
  /* @__PURE__ */ jsx(
1235
1235
  Carousel,
1236
1236
  {
@@ -1166,8 +1166,9 @@ function CarouselGradientText({
1166
1166
  if (itemsSlot) return itemsSlot;
1167
1167
  if (!items || items.length === 0) return null;
1168
1168
  return items.map((item, idx) => /* @__PURE__ */ jsxRuntime.jsx(CarouselItem, { className: cn("w-fit", itemClassName), children: /* @__PURE__ */ jsxRuntime.jsxs(
1169
- "div",
1169
+ Pressable,
1170
1170
  {
1171
+ href: item.href,
1171
1172
  className: cn(
1172
1173
  "relative aspect-4/5 max-h-[500px] rounded-2xl",
1173
1174
  item.className,
@@ -1196,12 +1197,12 @@ function CarouselGradientText({
1196
1197
  optixFlowConfig
1197
1198
  }
1198
1199
  ),
1199
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 p-8", children: /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm font-semibold text-background/50 dark:text-foreground/50", children: [
1200
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "mr-1 text-background dark:text-foreground", children: [
1200
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 p-8", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm font-semibold text-white/70", children: [
1201
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mr-1 text-white", children: [
1201
1202
  item.title,
1202
1203
  "."
1203
1204
  ] }),
1204
- item.description
1205
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: item.description })
1205
1206
  ] }) })
1206
1207
  ]
1207
1208
  }
@@ -1250,19 +1251,7 @@ function CarouselGradientText({
1250
1251
  ]
1251
1252
  }
1252
1253
  ),
1253
- tagline ? typeof tagline === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1254
- "p",
1255
- {
1256
- className: cn("mt-8 text-xl text-primary", taglineClassName),
1257
- children: tagline
1258
- }
1259
- ) : /* @__PURE__ */ jsxRuntime.jsx(
1260
- "div",
1261
- {
1262
- className: cn("mt-8 text-xl text-primary", taglineClassName),
1263
- children: tagline
1264
- }
1265
- ) : null,
1254
+ tagline ? typeof tagline === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-2 md:mt-8 text-xl", taglineClassName), children: tagline }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-2 md:mt-8 text-xl", taglineClassName), children: tagline }) : null,
1266
1255
  /* @__PURE__ */ jsxRuntime.jsxs(
1267
1256
  "div",
1268
1257
  {
@@ -30,6 +30,10 @@ interface CarouselGradientTextItem {
30
30
  * Additional CSS classes for the card
31
31
  */
32
32
  className?: string;
33
+ /**
34
+ * href for the card
35
+ */
36
+ href?: string;
33
37
  }
34
38
  interface CarouselGradientTextProps {
35
39
  /**
@@ -30,6 +30,10 @@ interface CarouselGradientTextItem {
30
30
  * Additional CSS classes for the card
31
31
  */
32
32
  className?: string;
33
+ /**
34
+ * href for the card
35
+ */
36
+ href?: string;
33
37
  }
34
38
  interface CarouselGradientTextProps {
35
39
  /**
@@ -1142,8 +1142,9 @@ function CarouselGradientText({
1142
1142
  if (itemsSlot) return itemsSlot;
1143
1143
  if (!items || items.length === 0) return null;
1144
1144
  return items.map((item, idx) => /* @__PURE__ */ jsx(CarouselItem, { className: cn("w-fit", itemClassName), children: /* @__PURE__ */ jsxs(
1145
- "div",
1145
+ Pressable,
1146
1146
  {
1147
+ href: item.href,
1147
1148
  className: cn(
1148
1149
  "relative aspect-4/5 max-h-[500px] rounded-2xl",
1149
1150
  item.className,
@@ -1172,12 +1173,12 @@ function CarouselGradientText({
1172
1173
  optixFlowConfig
1173
1174
  }
1174
1175
  ),
1175
- /* @__PURE__ */ jsx("div", { className: "absolute inset-0 p-8", children: /* @__PURE__ */ jsxs("p", { className: "text-sm font-semibold text-background/50 dark:text-foreground/50", children: [
1176
- /* @__PURE__ */ jsxs("span", { className: "mr-1 text-background dark:text-foreground", children: [
1176
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 p-8", children: /* @__PURE__ */ jsxs("div", { className: "text-sm font-semibold text-white/70", children: [
1177
+ /* @__PURE__ */ jsxs("div", { className: "mr-1 text-white", children: [
1177
1178
  item.title,
1178
1179
  "."
1179
1180
  ] }),
1180
- item.description
1181
+ /* @__PURE__ */ jsx("div", { children: item.description })
1181
1182
  ] }) })
1182
1183
  ]
1183
1184
  }
@@ -1226,19 +1227,7 @@ function CarouselGradientText({
1226
1227
  ]
1227
1228
  }
1228
1229
  ),
1229
- tagline ? typeof tagline === "string" ? /* @__PURE__ */ jsx(
1230
- "p",
1231
- {
1232
- className: cn("mt-8 text-xl text-primary", taglineClassName),
1233
- children: tagline
1234
- }
1235
- ) : /* @__PURE__ */ jsx(
1236
- "div",
1237
- {
1238
- className: cn("mt-8 text-xl text-primary", taglineClassName),
1239
- children: tagline
1240
- }
1241
- ) : null,
1230
+ tagline ? typeof tagline === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-2 md:mt-8 text-xl", taglineClassName), children: tagline }) : /* @__PURE__ */ jsx("div", { className: cn("mt-2 md:mt-8 text-xl", taglineClassName), children: tagline }) : null,
1242
1231
  /* @__PURE__ */ jsxs(
1243
1232
  "div",
1244
1233
  {
@@ -1153,10 +1153,14 @@ var Section = React4__namespace.default.forwardRef(
1153
1153
  );
1154
1154
  Section.displayName = "Section";
1155
1155
  function CarouselIconSidebar({
1156
+ title,
1157
+ description,
1156
1158
  items,
1157
1159
  itemsSlot,
1158
1160
  sidebarSlot,
1159
1161
  className,
1162
+ sectionTitleClassName,
1163
+ sectionDescriptionClassName,
1160
1164
  sidebarClassName,
1161
1165
  iconClassName,
1162
1166
  titleClassName,
@@ -1216,7 +1220,7 @@ function CarouselIconSidebar({
1216
1220
  "div",
1217
1221
  {
1218
1222
  className: cn(
1219
- "flex h-full flex-col gap-8 rounded-lg px-8 py-16",
1223
+ "flex h-full flex-col gap-8 rounded-lg p-8",
1220
1224
  getNestedCardBg(background),
1221
1225
  getNestedCardTextColor(background),
1222
1226
  sidebarClassName
@@ -1274,13 +1278,13 @@ function CarouselIconSidebar({
1274
1278
  const itemsContent = React4.useMemo(() => {
1275
1279
  if (itemsSlot) return itemsSlot;
1276
1280
  if (!items || items.length === 0) return null;
1277
- return items.map((image, index) => /* @__PURE__ */ jsxRuntime.jsx(CarouselItem, { className: cn("h-full", itemClassName), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("aspect-2/1 h-full w-full", image.className), children: /* @__PURE__ */ jsxRuntime.jsx(
1281
+ return items.map((image, index) => /* @__PURE__ */ jsxRuntime.jsx(CarouselItem, { className: cn("h-full", itemClassName), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("h-full w-full", image.className), children: /* @__PURE__ */ jsxRuntime.jsx(
1278
1282
  img.Img,
1279
1283
  {
1280
1284
  src: image.src,
1281
1285
  alt: typeof image.title === "string" ? image.title : image.alt || "Carousel image",
1282
1286
  className: cn(
1283
- "h-full w-full rounded-lg object-cover cursor-pointer transition-transform hover:scale-[1.02]",
1287
+ "h-full w-full rounded-lg object-cover cursor-pointer",
1284
1288
  imageClassName
1285
1289
  ),
1286
1290
  loading: "lazy",
@@ -1296,7 +1300,14 @@ function CarouselIconSidebar({
1296
1300
  }
1297
1301
  }
1298
1302
  ) }) }, index));
1299
- }, [itemsSlot, items, itemClassName, imageClassName, optixFlowConfig, handleImageClick]);
1303
+ }, [
1304
+ itemsSlot,
1305
+ items,
1306
+ itemClassName,
1307
+ imageClassName,
1308
+ optixFlowConfig,
1309
+ handleImageClick
1310
+ ]);
1300
1311
  return /* @__PURE__ */ jsxRuntime.jsxs(
1301
1312
  Section,
1302
1313
  {
@@ -1307,9 +1318,41 @@ function CarouselIconSidebar({
1307
1318
  patternClassName,
1308
1319
  className,
1309
1320
  children: [
1321
+ title || description ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 mb-6 md:mb-16", children: [
1322
+ title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1323
+ "h2",
1324
+ {
1325
+ className: cn(
1326
+ "text-xl font-medium tracking-tight md:text-2xl lg:text-3xl text-balance",
1327
+ sectionTitleClassName
1328
+ ),
1329
+ children: title
1330
+ }
1331
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: sectionTitleClassName, children: title })),
1332
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1333
+ "p",
1334
+ {
1335
+ className: cn(
1336
+ "max-w-lg text-balance",
1337
+ sectionDescriptionClassName
1338
+ ),
1339
+ children: description
1340
+ }
1341
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
1342
+ "div",
1343
+ {
1344
+ className: cn(
1345
+ "max-w-lg text-balance",
1346
+ sectionDescriptionClassName
1347
+ ),
1348
+ children: description
1349
+ }
1350
+ ))
1351
+ ] }) : null,
1310
1352
  /* @__PURE__ */ jsxRuntime.jsx(Carousel, { setApi, className: cn("w-full", carouselClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-6 md:grid-cols-5", children: [
1311
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "md:col-span-2", children: sidebarContent }),
1312
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full md:col-span-3", children: /* @__PURE__ */ jsxRuntime.jsx(CarouselContent, { className: carouselContentClassName, children: itemsContent }) })
1353
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "hidden md:visible md:col-span-2", children: sidebarContent }),
1354
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full md:col-span-3", children: /* @__PURE__ */ jsxRuntime.jsx(CarouselContent, { className: carouselContentClassName, children: itemsContent }) }),
1355
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "visible md:hidden md:col-span-2", children: sidebarContent })
1313
1356
  ] }) }),
1314
1357
  lightboxOpen && /* @__PURE__ */ jsxRuntime.jsx(
1315
1358
  lightbox.Lightbox,
@@ -36,6 +36,14 @@ interface CarouselIconSidebarItem {
36
36
  className?: string;
37
37
  }
38
38
  interface CarouselIconSidebarProps {
39
+ /**
40
+ * Section title (displayed above the carousel)
41
+ */
42
+ title?: React.ReactNode;
43
+ /**
44
+ * Section description (displayed above the carousel)
45
+ */
46
+ description?: React.ReactNode;
39
47
  /**
40
48
  * Array of items to display
41
49
  */
@@ -52,6 +60,14 @@ interface CarouselIconSidebarProps {
52
60
  * Additional CSS classes for the section
53
61
  */
54
62
  className?: string;
63
+ /**
64
+ * Additional CSS classes for the section title
65
+ */
66
+ sectionTitleClassName?: string;
67
+ /**
68
+ * Additional CSS classes for the section description
69
+ */
70
+ sectionDescriptionClassName?: string;
55
71
  /**
56
72
  * Additional CSS classes for the sidebar panel
57
73
  */
@@ -61,11 +77,11 @@ interface CarouselIconSidebarProps {
61
77
  */
62
78
  iconClassName?: string;
63
79
  /**
64
- * Additional CSS classes for the title
80
+ * Additional CSS classes for the sidebar item title
65
81
  */
66
82
  titleClassName?: string;
67
83
  /**
68
- * Additional CSS classes for the description
84
+ * Additional CSS classes for the sidebar item description
69
85
  */
70
86
  descriptionClassName?: string;
71
87
  /**
@@ -136,6 +152,6 @@ interface CarouselIconSidebarProps {
136
152
  * />
137
153
  * ```
138
154
  */
139
- declare function CarouselIconSidebar({ items, itemsSlot, sidebarSlot, className, sidebarClassName, iconClassName, titleClassName, descriptionClassName, controlsClassName, carouselClassName, carouselContentClassName, itemClassName, imageClassName, background, spacing, pattern, patternOpacity, patternClassName, optixFlowConfig, }: CarouselIconSidebarProps): React.JSX.Element;
155
+ declare function CarouselIconSidebar({ title, description, items, itemsSlot, sidebarSlot, className, sectionTitleClassName, sectionDescriptionClassName, sidebarClassName, iconClassName, titleClassName, descriptionClassName, controlsClassName, carouselClassName, carouselContentClassName, itemClassName, imageClassName, background, spacing, pattern, patternOpacity, patternClassName, optixFlowConfig, }: CarouselIconSidebarProps): React.JSX.Element;
140
156
 
141
157
  export { CarouselIconSidebar, type CarouselIconSidebarItem, type CarouselIconSidebarProps };
@@ -36,6 +36,14 @@ interface CarouselIconSidebarItem {
36
36
  className?: string;
37
37
  }
38
38
  interface CarouselIconSidebarProps {
39
+ /**
40
+ * Section title (displayed above the carousel)
41
+ */
42
+ title?: React.ReactNode;
43
+ /**
44
+ * Section description (displayed above the carousel)
45
+ */
46
+ description?: React.ReactNode;
39
47
  /**
40
48
  * Array of items to display
41
49
  */
@@ -52,6 +60,14 @@ interface CarouselIconSidebarProps {
52
60
  * Additional CSS classes for the section
53
61
  */
54
62
  className?: string;
63
+ /**
64
+ * Additional CSS classes for the section title
65
+ */
66
+ sectionTitleClassName?: string;
67
+ /**
68
+ * Additional CSS classes for the section description
69
+ */
70
+ sectionDescriptionClassName?: string;
55
71
  /**
56
72
  * Additional CSS classes for the sidebar panel
57
73
  */
@@ -61,11 +77,11 @@ interface CarouselIconSidebarProps {
61
77
  */
62
78
  iconClassName?: string;
63
79
  /**
64
- * Additional CSS classes for the title
80
+ * Additional CSS classes for the sidebar item title
65
81
  */
66
82
  titleClassName?: string;
67
83
  /**
68
- * Additional CSS classes for the description
84
+ * Additional CSS classes for the sidebar item description
69
85
  */
70
86
  descriptionClassName?: string;
71
87
  /**
@@ -136,6 +152,6 @@ interface CarouselIconSidebarProps {
136
152
  * />
137
153
  * ```
138
154
  */
139
- declare function CarouselIconSidebar({ items, itemsSlot, sidebarSlot, className, sidebarClassName, iconClassName, titleClassName, descriptionClassName, controlsClassName, carouselClassName, carouselContentClassName, itemClassName, imageClassName, background, spacing, pattern, patternOpacity, patternClassName, optixFlowConfig, }: CarouselIconSidebarProps): React.JSX.Element;
155
+ declare function CarouselIconSidebar({ title, description, items, itemsSlot, sidebarSlot, className, sectionTitleClassName, sectionDescriptionClassName, sidebarClassName, iconClassName, titleClassName, descriptionClassName, controlsClassName, carouselClassName, carouselContentClassName, itemClassName, imageClassName, background, spacing, pattern, patternOpacity, patternClassName, optixFlowConfig, }: CarouselIconSidebarProps): React.JSX.Element;
140
156
 
141
157
  export { CarouselIconSidebar, type CarouselIconSidebarItem, type CarouselIconSidebarProps };