@opensite/ui 0.8.4 → 0.8.5
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/article-breadcrumb-social.cjs +57 -73
- package/dist/article-breadcrumb-social.d.cts +2 -24
- package/dist/article-breadcrumb-social.d.ts +2 -24
- package/dist/article-breadcrumb-social.js +57 -73
- package/dist/article-compact-toc.cjs +1 -1
- package/dist/article-compact-toc.js +1 -1
- package/dist/article-sidebar-sticky.cjs +73 -26
- package/dist/article-sidebar-sticky.js +73 -26
- package/dist/blog-horizontal-timeline.cjs +7 -4
- package/dist/blog-horizontal-timeline.js +7 -4
- package/dist/faq-split-hero.cjs +704 -0
- package/dist/faq-split-hero.d.cts +118 -0
- package/dist/faq-split-hero.d.ts +118 -0
- package/dist/faq-split-hero.js +682 -0
- package/dist/feature-badge-grid-six.cjs +1 -1
- package/dist/feature-badge-grid-six.js +1 -1
- package/dist/feature-card-grid-linked.cjs +92 -22
- package/dist/feature-card-grid-linked.js +92 -22
- package/dist/feature-carousel-progress.cjs +1 -1
- package/dist/feature-carousel-progress.js +1 -1
- package/dist/feature-checklist-image.cjs +88 -15
- package/dist/feature-checklist-image.js +88 -15
- package/dist/feature-checklist-three-column.cjs +1 -1
- package/dist/feature-checklist-three-column.js +1 -1
- package/dist/feature-icon-grid-accent.cjs +50 -8
- package/dist/feature-icon-grid-accent.js +50 -8
- package/dist/feature-icon-grid-bordered.cjs +84 -14
- package/dist/feature-icon-grid-bordered.js +84 -14
- package/dist/feature-icon-tabs-content.cjs +217 -84
- package/dist/feature-icon-tabs-content.js +217 -84
- package/dist/feature-image-overlay-badge.cjs +106 -33
- package/dist/feature-image-overlay-badge.js +106 -33
- package/dist/feature-numbered-cards.cjs +154 -35
- package/dist/feature-numbered-cards.js +154 -35
- package/dist/feature-showcase.cjs +67 -71
- package/dist/feature-showcase.d.cts +1 -5
- package/dist/feature-showcase.d.ts +1 -5
- package/dist/feature-showcase.js +68 -72
- package/dist/feature-split-image-reverse.cjs +90 -15
- package/dist/feature-split-image-reverse.js +90 -15
- package/dist/feature-split-image.cjs +87 -15
- package/dist/feature-split-image.js +87 -15
- package/dist/feature-stats-highlight.cjs +2 -2
- package/dist/feature-stats-highlight.js +2 -2
- package/dist/feature-tabbed-content-image.cjs +207 -72
- package/dist/feature-tabbed-content-image.js +207 -72
- package/dist/feature-three-column-values.cjs +107 -14
- package/dist/feature-three-column-values.js +107 -14
- package/dist/registry.cjs +1460 -461
- package/dist/registry.js +1460 -461
- package/package.json +1 -1
|
@@ -1009,31 +1009,57 @@ function FeatureTabbedContentImage({
|
|
|
1009
1009
|
contentGridClassName,
|
|
1010
1010
|
optixFlowConfig,
|
|
1011
1011
|
background,
|
|
1012
|
-
spacing,
|
|
1012
|
+
spacing = "py-6 md:py-32",
|
|
1013
1013
|
pattern,
|
|
1014
1014
|
patternOpacity,
|
|
1015
1015
|
patternClassName
|
|
1016
1016
|
}) {
|
|
1017
|
-
const renderFeatures = React__namespace.useCallback(
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1017
|
+
const renderFeatures = React__namespace.useCallback(
|
|
1018
|
+
(slide) => {
|
|
1019
|
+
if (slide.featuresSlot) return slide.featuresSlot;
|
|
1020
|
+
if (!slide.features || slide.features.length === 0) return null;
|
|
1021
|
+
return slide.features.map((feature, index) => {
|
|
1022
|
+
const isString = typeof feature === "string";
|
|
1023
|
+
const content = isString ? feature : feature.content;
|
|
1024
|
+
const iconElement = isString ? /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/check-circle-2", size: 16 }) : feature.icon ?? (feature.iconName ? /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: feature.iconName, size: 16 }) : /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/check-circle-2", size: 16 }));
|
|
1025
|
+
const itemClassName = isString ? void 0 : feature.className;
|
|
1026
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1027
|
+
"li",
|
|
1028
|
+
{
|
|
1029
|
+
className: cn("flex items-center gap-2", itemClassName),
|
|
1030
|
+
children: [
|
|
1031
|
+
iconElement,
|
|
1032
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: content })
|
|
1033
|
+
]
|
|
1034
|
+
},
|
|
1035
|
+
index
|
|
1036
|
+
);
|
|
1037
|
+
});
|
|
1038
|
+
},
|
|
1039
|
+
[]
|
|
1040
|
+
);
|
|
1041
|
+
const renderActions = React__namespace.useCallback(
|
|
1042
|
+
(slide) => {
|
|
1043
|
+
if (slide.actionsSlot) return slide.actionsSlot;
|
|
1044
|
+
if (!slide.actions || slide.actions.length === 0) return null;
|
|
1045
|
+
return slide.actions.map((action, index) => {
|
|
1046
|
+
if (action.children) {
|
|
1047
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1048
|
+
Pressable,
|
|
1049
|
+
{
|
|
1050
|
+
href: action.href,
|
|
1051
|
+
onClick: action.onClick,
|
|
1052
|
+
variant: action.variant,
|
|
1053
|
+
size: action.size,
|
|
1054
|
+
className: cn("mt-8", action.className),
|
|
1055
|
+
"aria-label": action["aria-label"],
|
|
1056
|
+
asButton: true,
|
|
1057
|
+
children: action.children
|
|
1058
|
+
},
|
|
1059
|
+
index
|
|
1060
|
+
);
|
|
1061
|
+
}
|
|
1062
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1037
1063
|
Pressable,
|
|
1038
1064
|
{
|
|
1039
1065
|
href: action.href,
|
|
@@ -1043,46 +1069,39 @@ function FeatureTabbedContentImage({
|
|
|
1043
1069
|
className: cn("mt-8", action.className),
|
|
1044
1070
|
"aria-label": action["aria-label"],
|
|
1045
1071
|
asButton: true,
|
|
1046
|
-
children:
|
|
1072
|
+
children: [
|
|
1073
|
+
action.icon,
|
|
1074
|
+
action.label,
|
|
1075
|
+
action.iconAfter
|
|
1076
|
+
]
|
|
1047
1077
|
},
|
|
1048
1078
|
index
|
|
1049
1079
|
);
|
|
1050
|
-
}
|
|
1051
|
-
|
|
1052
|
-
|
|
1080
|
+
});
|
|
1081
|
+
},
|
|
1082
|
+
[]
|
|
1083
|
+
);
|
|
1084
|
+
const renderImage = React__namespace.useCallback(
|
|
1085
|
+
(slide) => {
|
|
1086
|
+
if (slide.imageSlot) return slide.imageSlot;
|
|
1087
|
+
if (!slide.image) return null;
|
|
1088
|
+
const imageAlt = slide.imageAlt || (typeof slide.title === "string" ? slide.title : "Tab content image");
|
|
1089
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1090
|
+
img.Img,
|
|
1053
1091
|
{
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
action.label,
|
|
1064
|
-
action.iconAfter
|
|
1065
|
-
]
|
|
1066
|
-
},
|
|
1067
|
-
index
|
|
1092
|
+
src: slide.image,
|
|
1093
|
+
alt: imageAlt,
|
|
1094
|
+
className: cn(
|
|
1095
|
+
"order-first max-h-[400px] w-full rounded-lg object-cover md:order-last",
|
|
1096
|
+
slide.imageClassName
|
|
1097
|
+
),
|
|
1098
|
+
loading: "lazy",
|
|
1099
|
+
optixFlowConfig
|
|
1100
|
+
}
|
|
1068
1101
|
);
|
|
1069
|
-
}
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
if (slide.imageSlot) return slide.imageSlot;
|
|
1073
|
-
if (!slide.image) return null;
|
|
1074
|
-
const imageAlt = slide.imageAlt || (typeof slide.title === "string" ? slide.title : "Tab content image");
|
|
1075
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1076
|
-
img.Img,
|
|
1077
|
-
{
|
|
1078
|
-
src: slide.image,
|
|
1079
|
-
alt: imageAlt,
|
|
1080
|
-
className: cn("order-first max-h-[400px] w-full rounded-lg object-cover md:order-last", slide.imageClassName),
|
|
1081
|
-
loading: "lazy",
|
|
1082
|
-
optixFlowConfig
|
|
1083
|
-
}
|
|
1084
|
-
);
|
|
1085
|
-
}, [optixFlowConfig]);
|
|
1102
|
+
},
|
|
1103
|
+
[optixFlowConfig]
|
|
1104
|
+
);
|
|
1086
1105
|
const slidesContent = React.useMemo(() => {
|
|
1087
1106
|
if (slidesSlot) return slidesSlot;
|
|
1088
1107
|
if (!slides || slides.length === 0) return null;
|
|
@@ -1091,7 +1110,10 @@ function FeatureTabbedContentImage({
|
|
|
1091
1110
|
TabsTrigger,
|
|
1092
1111
|
{
|
|
1093
1112
|
value: slide.id.toString(),
|
|
1094
|
-
className: cn(
|
|
1113
|
+
className: cn(
|
|
1114
|
+
"text-sm hover:bg-background md:text-base",
|
|
1115
|
+
tabTriggerClassName
|
|
1116
|
+
),
|
|
1095
1117
|
children: slide.tabName
|
|
1096
1118
|
},
|
|
1097
1119
|
slide.id
|
|
@@ -1101,20 +1123,85 @@ function FeatureTabbedContentImage({
|
|
|
1101
1123
|
{
|
|
1102
1124
|
value: slide.id.toString(),
|
|
1103
1125
|
className: cn("max-w-5xl", tabContentClassName),
|
|
1104
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1126
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1127
|
+
"div",
|
|
1128
|
+
{
|
|
1129
|
+
className: cn(
|
|
1130
|
+
"grid grid-cols-1 items-center gap-10 md:grid-cols-2",
|
|
1131
|
+
contentGridClassName,
|
|
1132
|
+
slide.className
|
|
1133
|
+
),
|
|
1134
|
+
children: [
|
|
1135
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1136
|
+
slide.title && (typeof slide.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1137
|
+
"h2",
|
|
1138
|
+
{
|
|
1139
|
+
className: cn(
|
|
1140
|
+
"mb-4 text-2xl font-semibold lg:text-4xl",
|
|
1141
|
+
slide.titleClassName
|
|
1142
|
+
),
|
|
1143
|
+
children: slide.title
|
|
1144
|
+
}
|
|
1145
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1146
|
+
"div",
|
|
1147
|
+
{
|
|
1148
|
+
className: cn(
|
|
1149
|
+
"mb-4 text-2xl font-semibold lg:text-4xl",
|
|
1150
|
+
slide.titleClassName
|
|
1151
|
+
),
|
|
1152
|
+
children: slide.title
|
|
1153
|
+
}
|
|
1154
|
+
)),
|
|
1155
|
+
slide.description && (typeof slide.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1156
|
+
"p",
|
|
1157
|
+
{
|
|
1158
|
+
className: cn(
|
|
1159
|
+
"text-muted-foreground lg:text-xl",
|
|
1160
|
+
slide.descriptionClassName
|
|
1161
|
+
),
|
|
1162
|
+
children: slide.description
|
|
1163
|
+
}
|
|
1164
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1165
|
+
"div",
|
|
1166
|
+
{
|
|
1167
|
+
className: cn(
|
|
1168
|
+
"text-muted-foreground lg:text-xl",
|
|
1169
|
+
slide.descriptionClassName
|
|
1170
|
+
),
|
|
1171
|
+
children: slide.description
|
|
1172
|
+
}
|
|
1173
|
+
)),
|
|
1174
|
+
slide.features && slide.features.length > 0 || slide.featuresSlot ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1175
|
+
"ul",
|
|
1176
|
+
{
|
|
1177
|
+
className: cn(
|
|
1178
|
+
"mt-8 grid grid-cols-1 gap-2 lg:grid-cols-2",
|
|
1179
|
+
slide.featuresClassName
|
|
1180
|
+
),
|
|
1181
|
+
children: renderFeatures(slide)
|
|
1182
|
+
}
|
|
1183
|
+
) : null,
|
|
1184
|
+
renderActions(slide)
|
|
1185
|
+
] }),
|
|
1186
|
+
renderImage(slide)
|
|
1187
|
+
]
|
|
1188
|
+
}
|
|
1189
|
+
)
|
|
1113
1190
|
},
|
|
1114
1191
|
slide.id
|
|
1115
1192
|
))
|
|
1116
1193
|
] });
|
|
1117
|
-
}, [
|
|
1194
|
+
}, [
|
|
1195
|
+
slidesSlot,
|
|
1196
|
+
slides,
|
|
1197
|
+
tabsListClassName,
|
|
1198
|
+
tabTriggerClassName,
|
|
1199
|
+
tabContentClassName,
|
|
1200
|
+
contentGridClassName,
|
|
1201
|
+
renderFeatures,
|
|
1202
|
+
renderActions,
|
|
1203
|
+
renderImage
|
|
1204
|
+
]);
|
|
1118
1205
|
const effectiveDefaultTab = React.useMemo(() => {
|
|
1119
1206
|
if (defaultTab) return defaultTab;
|
|
1120
1207
|
if (slides && slides.length > 0) return slides[0].id.toString();
|
|
@@ -1131,15 +1218,63 @@ function FeatureTabbedContentImage({
|
|
|
1131
1218
|
className,
|
|
1132
1219
|
containerClassName,
|
|
1133
1220
|
children: [
|
|
1134
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1221
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1222
|
+
"div",
|
|
1223
|
+
{
|
|
1224
|
+
className: cn(
|
|
1225
|
+
"mx-auto flex max-w-3xl flex-col items-center gap-6",
|
|
1226
|
+
headerClassName
|
|
1227
|
+
),
|
|
1228
|
+
children: [
|
|
1229
|
+
title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1230
|
+
"h2",
|
|
1231
|
+
{
|
|
1232
|
+
className: cn(
|
|
1233
|
+
"text-center text-3xl font-semibold lg:text-5xl",
|
|
1234
|
+
titleClassName
|
|
1235
|
+
),
|
|
1236
|
+
children: title
|
|
1237
|
+
}
|
|
1238
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1239
|
+
"div",
|
|
1240
|
+
{
|
|
1241
|
+
className: cn(
|
|
1242
|
+
"text-center text-3xl font-semibold lg:text-5xl",
|
|
1243
|
+
titleClassName
|
|
1244
|
+
),
|
|
1245
|
+
children: title
|
|
1246
|
+
}
|
|
1247
|
+
)),
|
|
1248
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1249
|
+
"p",
|
|
1250
|
+
{
|
|
1251
|
+
className: cn(
|
|
1252
|
+
"text-center text-balance text-muted-foreground lg:text-xl",
|
|
1253
|
+
descriptionClassName
|
|
1254
|
+
),
|
|
1255
|
+
children: description
|
|
1256
|
+
}
|
|
1257
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1258
|
+
"div",
|
|
1259
|
+
{
|
|
1260
|
+
className: cn(
|
|
1261
|
+
"text-center text-balance text-muted-foreground lg:text-xl",
|
|
1262
|
+
descriptionClassName
|
|
1263
|
+
),
|
|
1264
|
+
children: description
|
|
1265
|
+
}
|
|
1266
|
+
))
|
|
1267
|
+
]
|
|
1268
|
+
}
|
|
1269
|
+
),
|
|
1138
1270
|
(slidesSlot || slides && slides.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-12", tabsWrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1139
1271
|
Tabs,
|
|
1140
1272
|
{
|
|
1141
1273
|
defaultValue: effectiveDefaultTab,
|
|
1142
|
-
className: cn(
|
|
1274
|
+
className: cn(
|
|
1275
|
+
"mx-auto flex w-fit flex-col items-center gap-8 md:gap-12",
|
|
1276
|
+
tabsClassName
|
|
1277
|
+
),
|
|
1143
1278
|
children: slidesContent
|
|
1144
1279
|
}
|
|
1145
1280
|
) })
|
|
@@ -987,31 +987,57 @@ function FeatureTabbedContentImage({
|
|
|
987
987
|
contentGridClassName,
|
|
988
988
|
optixFlowConfig,
|
|
989
989
|
background,
|
|
990
|
-
spacing,
|
|
990
|
+
spacing = "py-6 md:py-32",
|
|
991
991
|
pattern,
|
|
992
992
|
patternOpacity,
|
|
993
993
|
patternClassName
|
|
994
994
|
}) {
|
|
995
|
-
const renderFeatures = React.useCallback(
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
995
|
+
const renderFeatures = React.useCallback(
|
|
996
|
+
(slide) => {
|
|
997
|
+
if (slide.featuresSlot) return slide.featuresSlot;
|
|
998
|
+
if (!slide.features || slide.features.length === 0) return null;
|
|
999
|
+
return slide.features.map((feature, index) => {
|
|
1000
|
+
const isString = typeof feature === "string";
|
|
1001
|
+
const content = isString ? feature : feature.content;
|
|
1002
|
+
const iconElement = isString ? /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/check-circle-2", size: 16 }) : feature.icon ?? (feature.iconName ? /* @__PURE__ */ jsx(DynamicIcon, { name: feature.iconName, size: 16 }) : /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/check-circle-2", size: 16 }));
|
|
1003
|
+
const itemClassName = isString ? void 0 : feature.className;
|
|
1004
|
+
return /* @__PURE__ */ jsxs(
|
|
1005
|
+
"li",
|
|
1006
|
+
{
|
|
1007
|
+
className: cn("flex items-center gap-2", itemClassName),
|
|
1008
|
+
children: [
|
|
1009
|
+
iconElement,
|
|
1010
|
+
/* @__PURE__ */ jsx("span", { className: "font-medium", children: content })
|
|
1011
|
+
]
|
|
1012
|
+
},
|
|
1013
|
+
index
|
|
1014
|
+
);
|
|
1015
|
+
});
|
|
1016
|
+
},
|
|
1017
|
+
[]
|
|
1018
|
+
);
|
|
1019
|
+
const renderActions = React.useCallback(
|
|
1020
|
+
(slide) => {
|
|
1021
|
+
if (slide.actionsSlot) return slide.actionsSlot;
|
|
1022
|
+
if (!slide.actions || slide.actions.length === 0) return null;
|
|
1023
|
+
return slide.actions.map((action, index) => {
|
|
1024
|
+
if (action.children) {
|
|
1025
|
+
return /* @__PURE__ */ jsx(
|
|
1026
|
+
Pressable,
|
|
1027
|
+
{
|
|
1028
|
+
href: action.href,
|
|
1029
|
+
onClick: action.onClick,
|
|
1030
|
+
variant: action.variant,
|
|
1031
|
+
size: action.size,
|
|
1032
|
+
className: cn("mt-8", action.className),
|
|
1033
|
+
"aria-label": action["aria-label"],
|
|
1034
|
+
asButton: true,
|
|
1035
|
+
children: action.children
|
|
1036
|
+
},
|
|
1037
|
+
index
|
|
1038
|
+
);
|
|
1039
|
+
}
|
|
1040
|
+
return /* @__PURE__ */ jsxs(
|
|
1015
1041
|
Pressable,
|
|
1016
1042
|
{
|
|
1017
1043
|
href: action.href,
|
|
@@ -1021,46 +1047,39 @@ function FeatureTabbedContentImage({
|
|
|
1021
1047
|
className: cn("mt-8", action.className),
|
|
1022
1048
|
"aria-label": action["aria-label"],
|
|
1023
1049
|
asButton: true,
|
|
1024
|
-
children:
|
|
1050
|
+
children: [
|
|
1051
|
+
action.icon,
|
|
1052
|
+
action.label,
|
|
1053
|
+
action.iconAfter
|
|
1054
|
+
]
|
|
1025
1055
|
},
|
|
1026
1056
|
index
|
|
1027
1057
|
);
|
|
1028
|
-
}
|
|
1029
|
-
|
|
1030
|
-
|
|
1058
|
+
});
|
|
1059
|
+
},
|
|
1060
|
+
[]
|
|
1061
|
+
);
|
|
1062
|
+
const renderImage = React.useCallback(
|
|
1063
|
+
(slide) => {
|
|
1064
|
+
if (slide.imageSlot) return slide.imageSlot;
|
|
1065
|
+
if (!slide.image) return null;
|
|
1066
|
+
const imageAlt = slide.imageAlt || (typeof slide.title === "string" ? slide.title : "Tab content image");
|
|
1067
|
+
return /* @__PURE__ */ jsx(
|
|
1068
|
+
Img,
|
|
1031
1069
|
{
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
action.label,
|
|
1042
|
-
action.iconAfter
|
|
1043
|
-
]
|
|
1044
|
-
},
|
|
1045
|
-
index
|
|
1070
|
+
src: slide.image,
|
|
1071
|
+
alt: imageAlt,
|
|
1072
|
+
className: cn(
|
|
1073
|
+
"order-first max-h-[400px] w-full rounded-lg object-cover md:order-last",
|
|
1074
|
+
slide.imageClassName
|
|
1075
|
+
),
|
|
1076
|
+
loading: "lazy",
|
|
1077
|
+
optixFlowConfig
|
|
1078
|
+
}
|
|
1046
1079
|
);
|
|
1047
|
-
}
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
if (slide.imageSlot) return slide.imageSlot;
|
|
1051
|
-
if (!slide.image) return null;
|
|
1052
|
-
const imageAlt = slide.imageAlt || (typeof slide.title === "string" ? slide.title : "Tab content image");
|
|
1053
|
-
return /* @__PURE__ */ jsx(
|
|
1054
|
-
Img,
|
|
1055
|
-
{
|
|
1056
|
-
src: slide.image,
|
|
1057
|
-
alt: imageAlt,
|
|
1058
|
-
className: cn("order-first max-h-[400px] w-full rounded-lg object-cover md:order-last", slide.imageClassName),
|
|
1059
|
-
loading: "lazy",
|
|
1060
|
-
optixFlowConfig
|
|
1061
|
-
}
|
|
1062
|
-
);
|
|
1063
|
-
}, [optixFlowConfig]);
|
|
1080
|
+
},
|
|
1081
|
+
[optixFlowConfig]
|
|
1082
|
+
);
|
|
1064
1083
|
const slidesContent = useMemo(() => {
|
|
1065
1084
|
if (slidesSlot) return slidesSlot;
|
|
1066
1085
|
if (!slides || slides.length === 0) return null;
|
|
@@ -1069,7 +1088,10 @@ function FeatureTabbedContentImage({
|
|
|
1069
1088
|
TabsTrigger,
|
|
1070
1089
|
{
|
|
1071
1090
|
value: slide.id.toString(),
|
|
1072
|
-
className: cn(
|
|
1091
|
+
className: cn(
|
|
1092
|
+
"text-sm hover:bg-background md:text-base",
|
|
1093
|
+
tabTriggerClassName
|
|
1094
|
+
),
|
|
1073
1095
|
children: slide.tabName
|
|
1074
1096
|
},
|
|
1075
1097
|
slide.id
|
|
@@ -1079,20 +1101,85 @@ function FeatureTabbedContentImage({
|
|
|
1079
1101
|
{
|
|
1080
1102
|
value: slide.id.toString(),
|
|
1081
1103
|
className: cn("max-w-5xl", tabContentClassName),
|
|
1082
|
-
children: /* @__PURE__ */ jsxs(
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1104
|
+
children: /* @__PURE__ */ jsxs(
|
|
1105
|
+
"div",
|
|
1106
|
+
{
|
|
1107
|
+
className: cn(
|
|
1108
|
+
"grid grid-cols-1 items-center gap-10 md:grid-cols-2",
|
|
1109
|
+
contentGridClassName,
|
|
1110
|
+
slide.className
|
|
1111
|
+
),
|
|
1112
|
+
children: [
|
|
1113
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
1114
|
+
slide.title && (typeof slide.title === "string" ? /* @__PURE__ */ jsx(
|
|
1115
|
+
"h2",
|
|
1116
|
+
{
|
|
1117
|
+
className: cn(
|
|
1118
|
+
"mb-4 text-2xl font-semibold lg:text-4xl",
|
|
1119
|
+
slide.titleClassName
|
|
1120
|
+
),
|
|
1121
|
+
children: slide.title
|
|
1122
|
+
}
|
|
1123
|
+
) : /* @__PURE__ */ jsx(
|
|
1124
|
+
"div",
|
|
1125
|
+
{
|
|
1126
|
+
className: cn(
|
|
1127
|
+
"mb-4 text-2xl font-semibold lg:text-4xl",
|
|
1128
|
+
slide.titleClassName
|
|
1129
|
+
),
|
|
1130
|
+
children: slide.title
|
|
1131
|
+
}
|
|
1132
|
+
)),
|
|
1133
|
+
slide.description && (typeof slide.description === "string" ? /* @__PURE__ */ jsx(
|
|
1134
|
+
"p",
|
|
1135
|
+
{
|
|
1136
|
+
className: cn(
|
|
1137
|
+
"text-muted-foreground lg:text-xl",
|
|
1138
|
+
slide.descriptionClassName
|
|
1139
|
+
),
|
|
1140
|
+
children: slide.description
|
|
1141
|
+
}
|
|
1142
|
+
) : /* @__PURE__ */ jsx(
|
|
1143
|
+
"div",
|
|
1144
|
+
{
|
|
1145
|
+
className: cn(
|
|
1146
|
+
"text-muted-foreground lg:text-xl",
|
|
1147
|
+
slide.descriptionClassName
|
|
1148
|
+
),
|
|
1149
|
+
children: slide.description
|
|
1150
|
+
}
|
|
1151
|
+
)),
|
|
1152
|
+
slide.features && slide.features.length > 0 || slide.featuresSlot ? /* @__PURE__ */ jsx(
|
|
1153
|
+
"ul",
|
|
1154
|
+
{
|
|
1155
|
+
className: cn(
|
|
1156
|
+
"mt-8 grid grid-cols-1 gap-2 lg:grid-cols-2",
|
|
1157
|
+
slide.featuresClassName
|
|
1158
|
+
),
|
|
1159
|
+
children: renderFeatures(slide)
|
|
1160
|
+
}
|
|
1161
|
+
) : null,
|
|
1162
|
+
renderActions(slide)
|
|
1163
|
+
] }),
|
|
1164
|
+
renderImage(slide)
|
|
1165
|
+
]
|
|
1166
|
+
}
|
|
1167
|
+
)
|
|
1091
1168
|
},
|
|
1092
1169
|
slide.id
|
|
1093
1170
|
))
|
|
1094
1171
|
] });
|
|
1095
|
-
}, [
|
|
1172
|
+
}, [
|
|
1173
|
+
slidesSlot,
|
|
1174
|
+
slides,
|
|
1175
|
+
tabsListClassName,
|
|
1176
|
+
tabTriggerClassName,
|
|
1177
|
+
tabContentClassName,
|
|
1178
|
+
contentGridClassName,
|
|
1179
|
+
renderFeatures,
|
|
1180
|
+
renderActions,
|
|
1181
|
+
renderImage
|
|
1182
|
+
]);
|
|
1096
1183
|
const effectiveDefaultTab = useMemo(() => {
|
|
1097
1184
|
if (defaultTab) return defaultTab;
|
|
1098
1185
|
if (slides && slides.length > 0) return slides[0].id.toString();
|
|
@@ -1109,15 +1196,63 @@ function FeatureTabbedContentImage({
|
|
|
1109
1196
|
className,
|
|
1110
1197
|
containerClassName,
|
|
1111
1198
|
children: [
|
|
1112
|
-
/* @__PURE__ */ jsxs(
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1199
|
+
/* @__PURE__ */ jsxs(
|
|
1200
|
+
"div",
|
|
1201
|
+
{
|
|
1202
|
+
className: cn(
|
|
1203
|
+
"mx-auto flex max-w-3xl flex-col items-center gap-6",
|
|
1204
|
+
headerClassName
|
|
1205
|
+
),
|
|
1206
|
+
children: [
|
|
1207
|
+
title && (typeof title === "string" ? /* @__PURE__ */ jsx(
|
|
1208
|
+
"h2",
|
|
1209
|
+
{
|
|
1210
|
+
className: cn(
|
|
1211
|
+
"text-center text-3xl font-semibold lg:text-5xl",
|
|
1212
|
+
titleClassName
|
|
1213
|
+
),
|
|
1214
|
+
children: title
|
|
1215
|
+
}
|
|
1216
|
+
) : /* @__PURE__ */ jsx(
|
|
1217
|
+
"div",
|
|
1218
|
+
{
|
|
1219
|
+
className: cn(
|
|
1220
|
+
"text-center text-3xl font-semibold lg:text-5xl",
|
|
1221
|
+
titleClassName
|
|
1222
|
+
),
|
|
1223
|
+
children: title
|
|
1224
|
+
}
|
|
1225
|
+
)),
|
|
1226
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsx(
|
|
1227
|
+
"p",
|
|
1228
|
+
{
|
|
1229
|
+
className: cn(
|
|
1230
|
+
"text-center text-balance text-muted-foreground lg:text-xl",
|
|
1231
|
+
descriptionClassName
|
|
1232
|
+
),
|
|
1233
|
+
children: description
|
|
1234
|
+
}
|
|
1235
|
+
) : /* @__PURE__ */ jsx(
|
|
1236
|
+
"div",
|
|
1237
|
+
{
|
|
1238
|
+
className: cn(
|
|
1239
|
+
"text-center text-balance text-muted-foreground lg:text-xl",
|
|
1240
|
+
descriptionClassName
|
|
1241
|
+
),
|
|
1242
|
+
children: description
|
|
1243
|
+
}
|
|
1244
|
+
))
|
|
1245
|
+
]
|
|
1246
|
+
}
|
|
1247
|
+
),
|
|
1116
1248
|
(slidesSlot || slides && slides.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-12", tabsWrapperClassName), children: /* @__PURE__ */ jsx(
|
|
1117
1249
|
Tabs,
|
|
1118
1250
|
{
|
|
1119
1251
|
defaultValue: effectiveDefaultTab,
|
|
1120
|
-
className: cn(
|
|
1252
|
+
className: cn(
|
|
1253
|
+
"mx-auto flex w-fit flex-col items-center gap-8 md:gap-12",
|
|
1254
|
+
tabsClassName
|
|
1255
|
+
),
|
|
1121
1256
|
children: slidesContent
|
|
1122
1257
|
}
|
|
1123
1258
|
) })
|