@opensite/ui 1.2.0 → 1.2.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.
@@ -1100,13 +1100,13 @@ 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
1106
  variant: "link",
1107
1107
  asButton: true,
1108
1108
  className: cn(
1109
- "font-medium flex items-center",
1109
+ "font-medium flex items-center text-xl",
1110
1110
  actionClass,
1111
1111
  actionClassName
1112
1112
  ),
@@ -1124,7 +1124,7 @@ function AutoScrollCarousel({
1124
1124
  )
1125
1125
  ] })
1126
1126
  }
1127
- );
1127
+ ) });
1128
1128
  }, [actionSlot, action, actionClassName]);
1129
1129
  const imagesContent = React4.useMemo(() => {
1130
1130
  if (imagesSlot) return imagesSlot;
@@ -1164,7 +1164,7 @@ function AutoScrollCarousel({
1164
1164
  ),
1165
1165
  children: [
1166
1166
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-8 md:gap-12", children: heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1167
- "h1",
1167
+ "h2",
1168
1168
  {
1169
1169
  className: cn(
1170
1170
  "text-3xl font-bold md:text-4xl",
@@ -1075,13 +1075,13 @@ 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
1081
  variant: "link",
1082
1082
  asButton: true,
1083
1083
  className: cn(
1084
- "font-medium flex items-center",
1084
+ "font-medium flex items-center text-xl",
1085
1085
  actionClass,
1086
1086
  actionClassName
1087
1087
  ),
@@ -1099,7 +1099,7 @@ function AutoScrollCarousel({
1099
1099
  )
1100
1100
  ] })
1101
1101
  }
1102
- );
1102
+ ) });
1103
1103
  }, [actionSlot, action, actionClassName]);
1104
1104
  const imagesContent = useMemo(() => {
1105
1105
  if (imagesSlot) return imagesSlot;
@@ -1139,7 +1139,7 @@ function AutoScrollCarousel({
1139
1139
  ),
1140
1140
  children: [
1141
1141
  /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-8 md:gap-12", children: heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
1142
- "h1",
1142
+ "h2",
1143
1143
  {
1144
1144
  className: cn(
1145
1145
  "text-3xl font-bold md:text-4xl",
@@ -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
  {
@@ -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,
@@ -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,6 +1318,25 @@ 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-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("p", { className: cn("max-w-lg text-balance", sectionDescriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx(
1333
+ "div",
1334
+ {
1335
+ className: cn("max-w-lg text-balance", sectionDescriptionClassName),
1336
+ children: description
1337
+ }
1338
+ ))
1339
+ ] }) : null,
1310
1340
  /* @__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
1341
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "md:col-span-2", children: sidebarContent }),
1312
1342
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full md:col-span-3", children: /* @__PURE__ */ jsxRuntime.jsx(CarouselContent, { className: carouselContentClassName, children: itemsContent }) })
@@ -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 };
@@ -1129,10 +1129,14 @@ var Section = React4__default.forwardRef(
1129
1129
  );
1130
1130
  Section.displayName = "Section";
1131
1131
  function CarouselIconSidebar({
1132
+ title,
1133
+ description,
1132
1134
  items,
1133
1135
  itemsSlot,
1134
1136
  sidebarSlot,
1135
1137
  className,
1138
+ sectionTitleClassName,
1139
+ sectionDescriptionClassName,
1136
1140
  sidebarClassName,
1137
1141
  iconClassName,
1138
1142
  titleClassName,
@@ -1250,13 +1254,13 @@ function CarouselIconSidebar({
1250
1254
  const itemsContent = useMemo(() => {
1251
1255
  if (itemsSlot) return itemsSlot;
1252
1256
  if (!items || items.length === 0) return null;
1253
- return items.map((image, index) => /* @__PURE__ */ jsx(CarouselItem, { className: cn("h-full", itemClassName), children: /* @__PURE__ */ jsx("div", { className: cn("aspect-2/1 h-full w-full", image.className), children: /* @__PURE__ */ jsx(
1257
+ return items.map((image, index) => /* @__PURE__ */ jsx(CarouselItem, { className: cn("h-full", itemClassName), children: /* @__PURE__ */ jsx("div", { className: cn("h-full w-full", image.className), children: /* @__PURE__ */ jsx(
1254
1258
  Img,
1255
1259
  {
1256
1260
  src: image.src,
1257
1261
  alt: typeof image.title === "string" ? image.title : image.alt || "Carousel image",
1258
1262
  className: cn(
1259
- "h-full w-full rounded-lg object-cover cursor-pointer transition-transform hover:scale-[1.02]",
1263
+ "h-full w-full rounded-lg object-cover cursor-pointer",
1260
1264
  imageClassName
1261
1265
  ),
1262
1266
  loading: "lazy",
@@ -1272,7 +1276,14 @@ function CarouselIconSidebar({
1272
1276
  }
1273
1277
  }
1274
1278
  ) }) }, index));
1275
- }, [itemsSlot, items, itemClassName, imageClassName, optixFlowConfig, handleImageClick]);
1279
+ }, [
1280
+ itemsSlot,
1281
+ items,
1282
+ itemClassName,
1283
+ imageClassName,
1284
+ optixFlowConfig,
1285
+ handleImageClick
1286
+ ]);
1276
1287
  return /* @__PURE__ */ jsxs(
1277
1288
  Section,
1278
1289
  {
@@ -1283,6 +1294,25 @@ function CarouselIconSidebar({
1283
1294
  patternClassName,
1284
1295
  className,
1285
1296
  children: [
1297
+ title || description ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 mb-16", children: [
1298
+ title && (typeof title === "string" ? /* @__PURE__ */ jsx(
1299
+ "h2",
1300
+ {
1301
+ className: cn(
1302
+ "text-xl font-medium tracking-tight md:text-2xl lg:text-3xl text-balance",
1303
+ sectionTitleClassName
1304
+ ),
1305
+ children: title
1306
+ }
1307
+ ) : /* @__PURE__ */ jsx("div", { className: sectionTitleClassName, children: title })),
1308
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("max-w-lg text-balance", sectionDescriptionClassName), children: description }) : /* @__PURE__ */ jsx(
1309
+ "div",
1310
+ {
1311
+ className: cn("max-w-lg text-balance", sectionDescriptionClassName),
1312
+ children: description
1313
+ }
1314
+ ))
1315
+ ] }) : null,
1286
1316
  /* @__PURE__ */ jsx(Carousel, { setApi, className: cn("w-full", carouselClassName), children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 gap-6 md:grid-cols-5", children: [
1287
1317
  /* @__PURE__ */ jsx("div", { className: "md:col-span-2", children: sidebarContent }),
1288
1318
  /* @__PURE__ */ jsx("div", { className: "h-full md:col-span-3", children: /* @__PURE__ */ jsx(CarouselContent, { className: carouselContentClassName, children: itemsContent }) })
@@ -1222,11 +1222,11 @@ function CarouselIconTabs({
1222
1222
  "div",
1223
1223
  {
1224
1224
  className: cn(
1225
- "mb-20 flex flex-col items-center justify-center gap-8",
1225
+ "mb-8 md:mb-20 flex flex-col items-center justify-center gap-8",
1226
1226
  headerClassName
1227
1227
  ),
1228
1228
  children: [
1229
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-4xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-4xl", headingClassName), children: heading })),
1229
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-4xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-4xl", headingClassName), children: heading })),
1230
1230
  badge && /* @__PURE__ */ jsxRuntime.jsx(
1231
1231
  Badge,
1232
1232
  {
@@ -1238,7 +1238,14 @@ function CarouselIconTabs({
1238
1238
  ]
1239
1239
  }
1240
1240
  );
1241
- }, [headerSlot, headerClassName, heading, headingClassName, badge, badgeClassName]);
1241
+ }, [
1242
+ headerSlot,
1243
+ headerClassName,
1244
+ heading,
1245
+ headingClassName,
1246
+ badge,
1247
+ badgeClassName
1248
+ ]);
1242
1249
  const sectionsContent = React4.useMemo(() => {
1243
1250
  if (sectionsSlot) return sectionsSlot;
1244
1251
  if (!sections || sections.length === 0) return null;
@@ -1253,7 +1260,7 @@ function CarouselIconTabs({
1253
1260
  src: item.img,
1254
1261
  alt: typeof item.title === "string" ? item.title : item.alt || "Tab image",
1255
1262
  className: cn(
1256
- "aspect-square h-full w-full object-cover md:aspect-2/1 cursor-pointer transition-transform hover:scale-[1.02]",
1263
+ "aspect-square h-full w-full object-cover md:aspect-2/1 cursor-pointer rounded-xl shadow-xl",
1257
1264
  imageClassName
1258
1265
  ),
1259
1266
  loading: "lazy",
@@ -1278,7 +1285,14 @@ function CarouselIconTabs({
1278
1285
  },
1279
1286
  index
1280
1287
  ));
1281
- }, [sectionsSlot, sections, itemClassName, imageClassName, optixFlowConfig, handleImageClick]);
1288
+ }, [
1289
+ sectionsSlot,
1290
+ sections,
1291
+ itemClassName,
1292
+ imageClassName,
1293
+ optixFlowConfig,
1294
+ handleImageClick
1295
+ ]);
1282
1296
  const tabsContent = React4.useMemo(() => {
1283
1297
  if (!sections || sections.length === 0) return null;
1284
1298
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -1198,11 +1198,11 @@ function CarouselIconTabs({
1198
1198
  "div",
1199
1199
  {
1200
1200
  className: cn(
1201
- "mb-20 flex flex-col items-center justify-center gap-8",
1201
+ "mb-8 md:mb-20 flex flex-col items-center justify-center gap-8",
1202
1202
  headerClassName
1203
1203
  ),
1204
1204
  children: [
1205
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("text-4xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("div", { className: cn("text-4xl", headingClassName), children: heading })),
1205
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h2", { className: cn("text-4xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("div", { className: cn("text-4xl", headingClassName), children: heading })),
1206
1206
  badge && /* @__PURE__ */ jsx(
1207
1207
  Badge,
1208
1208
  {
@@ -1214,7 +1214,14 @@ function CarouselIconTabs({
1214
1214
  ]
1215
1215
  }
1216
1216
  );
1217
- }, [headerSlot, headerClassName, heading, headingClassName, badge, badgeClassName]);
1217
+ }, [
1218
+ headerSlot,
1219
+ headerClassName,
1220
+ heading,
1221
+ headingClassName,
1222
+ badge,
1223
+ badgeClassName
1224
+ ]);
1218
1225
  const sectionsContent = useMemo(() => {
1219
1226
  if (sectionsSlot) return sectionsSlot;
1220
1227
  if (!sections || sections.length === 0) return null;
@@ -1229,7 +1236,7 @@ function CarouselIconTabs({
1229
1236
  src: item.img,
1230
1237
  alt: typeof item.title === "string" ? item.title : item.alt || "Tab image",
1231
1238
  className: cn(
1232
- "aspect-square h-full w-full object-cover md:aspect-2/1 cursor-pointer transition-transform hover:scale-[1.02]",
1239
+ "aspect-square h-full w-full object-cover md:aspect-2/1 cursor-pointer rounded-xl shadow-xl",
1233
1240
  imageClassName
1234
1241
  ),
1235
1242
  loading: "lazy",
@@ -1254,7 +1261,14 @@ function CarouselIconTabs({
1254
1261
  },
1255
1262
  index
1256
1263
  ));
1257
- }, [sectionsSlot, sections, itemClassName, imageClassName, optixFlowConfig, handleImageClick]);
1264
+ }, [
1265
+ sectionsSlot,
1266
+ sections,
1267
+ itemClassName,
1268
+ imageClassName,
1269
+ optixFlowConfig,
1270
+ handleImageClick
1271
+ ]);
1258
1272
  const tabsContent = useMemo(() => {
1259
1273
  if (!sections || sections.length === 0) return null;
1260
1274
  return /* @__PURE__ */ jsx(