@opensite/ui 0.8.4 → 0.8.6
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-badge-support.cjs +18 -5
- package/dist/faq-badge-support.js +18 -5
- package/dist/faq-bordered-badge.cjs +23 -7
- package/dist/faq-bordered-badge.js +23 -7
- package/dist/faq-card-categories.cjs +20 -4
- package/dist/faq-card-categories.js +20 -4
- package/dist/faq-categorized-sections.cjs +19 -4
- package/dist/faq-categorized-sections.js +19 -4
- package/dist/faq-centered-accordion.cjs +18 -5
- package/dist/faq-centered-accordion.js +18 -5
- package/dist/faq-gradient-categories.cjs +19 -4
- package/dist/faq-gradient-categories.js +19 -4
- package/dist/faq-icon-benefits.cjs +11 -2
- package/dist/faq-icon-benefits.js +11 -2
- package/dist/faq-muted-cards.cjs +19 -6
- package/dist/faq-muted-cards.js +19 -6
- package/dist/faq-numbered-grid.cjs +11 -3
- package/dist/faq-numbered-grid.js +11 -3
- package/dist/faq-numbered-list.cjs +11 -3
- package/dist/faq-numbered-list.js +11 -3
- package/dist/faq-profile-sidebar.cjs +57 -20
- package/dist/faq-profile-sidebar.js +57 -20
- package/dist/faq-rounded-cards.cjs +26 -19
- package/dist/faq-rounded-cards.js +26 -19
- package/dist/faq-sidebar-navigation.cjs +48 -28
- package/dist/faq-sidebar-navigation.js +48 -28
- package/dist/faq-simple-accordion.cjs +17 -4
- package/dist/faq-simple-accordion.js +17 -4
- package/dist/faq-split-help.cjs +25 -6
- package/dist/faq-split-help.js +25 -6
- package/dist/faq-split-hero.cjs +604 -0
- package/dist/faq-split-hero.d.cts +116 -0
- package/dist/faq-split-hero.d.ts +116 -0
- package/dist/faq-split-hero.js +582 -0
- package/dist/faq-static-list.cjs +9 -2
- package/dist/faq-static-list.js +9 -2
- package/dist/feature-accordion-image.cjs +8 -2
- package/dist/feature-accordion-image.js +8 -2
- 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 +66 -71
- package/dist/feature-showcase.d.cts +1 -5
- package/dist/feature-showcase.d.ts +1 -5
- package/dist/feature-showcase.js +67 -72
- package/dist/feature-split-image-reverse.cjs +84 -15
- package/dist/feature-split-image-reverse.js +84 -15
- package/dist/feature-split-image.cjs +87 -15
- package/dist/feature-split-image.js +87 -15
- package/dist/feature-stats-highlight.cjs +50 -13
- package/dist/feature-stats-highlight.js +50 -13
- package/dist/feature-tabbed-content-image.cjs +198 -72
- package/dist/feature-tabbed-content-image.js +198 -72
- package/dist/feature-three-column-values.cjs +67 -14
- package/dist/feature-three-column-values.js +67 -14
- package/dist/feature-utility-cards-grid.cjs +83 -36
- package/dist/feature-utility-cards-grid.js +83 -36
- package/dist/navbar-animated-preview.cjs +8 -2
- package/dist/navbar-animated-preview.js +8 -2
- package/dist/navbar-centered-menu.cjs +8 -2
- package/dist/navbar-centered-menu.js +8 -2
- package/dist/navbar-dark-icons.cjs +8 -2
- package/dist/navbar-dark-icons.js +8 -2
- package/dist/navbar-dropdown-menu.cjs +8 -2
- package/dist/navbar-dropdown-menu.js +8 -2
- package/dist/navbar-education-platform.cjs +8 -2
- package/dist/navbar-education-platform.js +8 -2
- package/dist/navbar-enterprise-mega.cjs +8 -2
- package/dist/navbar-enterprise-mega.js +8 -2
- package/dist/navbar-feature-grid.cjs +8 -2
- package/dist/navbar-feature-grid.js +8 -2
- package/dist/navbar-multi-column-groups.cjs +8 -2
- package/dist/navbar-multi-column-groups.js +8 -2
- package/dist/navbar-platform-resources.cjs +8 -2
- package/dist/navbar-platform-resources.js +8 -2
- package/dist/navbar-sidebar-mobile.cjs +8 -2
- package/dist/navbar-sidebar-mobile.js +8 -2
- package/dist/registry.cjs +1873 -680
- package/dist/registry.js +1873 -680
- 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,7 @@ function FeatureTabbedContentImage({
|
|
|
1091
1110
|
TabsTrigger,
|
|
1092
1111
|
{
|
|
1093
1112
|
value: slide.id.toString(),
|
|
1094
|
-
className: cn("text-sm
|
|
1113
|
+
className: cn("text-sm md:text-base", tabTriggerClassName),
|
|
1095
1114
|
children: slide.tabName
|
|
1096
1115
|
},
|
|
1097
1116
|
slide.id
|
|
@@ -1101,20 +1120,79 @@ function FeatureTabbedContentImage({
|
|
|
1101
1120
|
{
|
|
1102
1121
|
value: slide.id.toString(),
|
|
1103
1122
|
className: cn("max-w-5xl", tabContentClassName),
|
|
1104
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1123
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1124
|
+
"div",
|
|
1125
|
+
{
|
|
1126
|
+
className: cn(
|
|
1127
|
+
"grid grid-cols-1 items-center gap-10 md:grid-cols-2",
|
|
1128
|
+
contentGridClassName,
|
|
1129
|
+
slide.className
|
|
1130
|
+
),
|
|
1131
|
+
children: [
|
|
1132
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1133
|
+
slide.title && (typeof slide.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1134
|
+
"h2",
|
|
1135
|
+
{
|
|
1136
|
+
className: cn(
|
|
1137
|
+
"mb-4 text-2xl font-semibold lg:text-4xl",
|
|
1138
|
+
slide.titleClassName
|
|
1139
|
+
),
|
|
1140
|
+
children: slide.title
|
|
1141
|
+
}
|
|
1142
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1143
|
+
"div",
|
|
1144
|
+
{
|
|
1145
|
+
className: cn(
|
|
1146
|
+
"mb-4 text-2xl font-semibold lg:text-4xl",
|
|
1147
|
+
slide.titleClassName
|
|
1148
|
+
),
|
|
1149
|
+
children: slide.title
|
|
1150
|
+
}
|
|
1151
|
+
)),
|
|
1152
|
+
slide.description && (typeof slide.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1153
|
+
"p",
|
|
1154
|
+
{
|
|
1155
|
+
className: cn(" lg:text-xl", slide.descriptionClassName),
|
|
1156
|
+
children: slide.description
|
|
1157
|
+
}
|
|
1158
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1159
|
+
"div",
|
|
1160
|
+
{
|
|
1161
|
+
className: cn("lg:text-xl", slide.descriptionClassName),
|
|
1162
|
+
children: slide.description
|
|
1163
|
+
}
|
|
1164
|
+
)),
|
|
1165
|
+
slide.features && slide.features.length > 0 || slide.featuresSlot ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1166
|
+
"ul",
|
|
1167
|
+
{
|
|
1168
|
+
className: cn(
|
|
1169
|
+
"mt-8 grid grid-cols-1 gap-2 lg:grid-cols-2",
|
|
1170
|
+
slide.featuresClassName
|
|
1171
|
+
),
|
|
1172
|
+
children: renderFeatures(slide)
|
|
1173
|
+
}
|
|
1174
|
+
) : null,
|
|
1175
|
+
renderActions(slide)
|
|
1176
|
+
] }),
|
|
1177
|
+
renderImage(slide)
|
|
1178
|
+
]
|
|
1179
|
+
}
|
|
1180
|
+
)
|
|
1113
1181
|
},
|
|
1114
1182
|
slide.id
|
|
1115
1183
|
))
|
|
1116
1184
|
] });
|
|
1117
|
-
}, [
|
|
1185
|
+
}, [
|
|
1186
|
+
slidesSlot,
|
|
1187
|
+
slides,
|
|
1188
|
+
tabsListClassName,
|
|
1189
|
+
tabTriggerClassName,
|
|
1190
|
+
tabContentClassName,
|
|
1191
|
+
contentGridClassName,
|
|
1192
|
+
renderFeatures,
|
|
1193
|
+
renderActions,
|
|
1194
|
+
renderImage
|
|
1195
|
+
]);
|
|
1118
1196
|
const effectiveDefaultTab = React.useMemo(() => {
|
|
1119
1197
|
if (defaultTab) return defaultTab;
|
|
1120
1198
|
if (slides && slides.length > 0) return slides[0].id.toString();
|
|
@@ -1131,15 +1209,63 @@ function FeatureTabbedContentImage({
|
|
|
1131
1209
|
className,
|
|
1132
1210
|
containerClassName,
|
|
1133
1211
|
children: [
|
|
1134
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1212
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1213
|
+
"div",
|
|
1214
|
+
{
|
|
1215
|
+
className: cn(
|
|
1216
|
+
"mx-auto flex max-w-3xl flex-col items-center gap-6",
|
|
1217
|
+
headerClassName
|
|
1218
|
+
),
|
|
1219
|
+
children: [
|
|
1220
|
+
title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1221
|
+
"h2",
|
|
1222
|
+
{
|
|
1223
|
+
className: cn(
|
|
1224
|
+
"text-center text-3xl font-semibold lg:text-5xl",
|
|
1225
|
+
titleClassName
|
|
1226
|
+
),
|
|
1227
|
+
children: title
|
|
1228
|
+
}
|
|
1229
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1230
|
+
"div",
|
|
1231
|
+
{
|
|
1232
|
+
className: cn(
|
|
1233
|
+
"text-center text-3xl font-semibold lg:text-5xl",
|
|
1234
|
+
titleClassName
|
|
1235
|
+
),
|
|
1236
|
+
children: title
|
|
1237
|
+
}
|
|
1238
|
+
)),
|
|
1239
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1240
|
+
"p",
|
|
1241
|
+
{
|
|
1242
|
+
className: cn(
|
|
1243
|
+
"text-center text-balance lg:text-xl",
|
|
1244
|
+
descriptionClassName
|
|
1245
|
+
),
|
|
1246
|
+
children: description
|
|
1247
|
+
}
|
|
1248
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1249
|
+
"div",
|
|
1250
|
+
{
|
|
1251
|
+
className: cn(
|
|
1252
|
+
"text-center text-balance lg:text-xl",
|
|
1253
|
+
descriptionClassName
|
|
1254
|
+
),
|
|
1255
|
+
children: description
|
|
1256
|
+
}
|
|
1257
|
+
))
|
|
1258
|
+
]
|
|
1259
|
+
}
|
|
1260
|
+
),
|
|
1138
1261
|
(slidesSlot || slides && slides.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-12", tabsWrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1139
1262
|
Tabs,
|
|
1140
1263
|
{
|
|
1141
1264
|
defaultValue: effectiveDefaultTab,
|
|
1142
|
-
className: cn(
|
|
1265
|
+
className: cn(
|
|
1266
|
+
"mx-auto flex w-fit flex-col items-center gap-8 md:gap-12",
|
|
1267
|
+
tabsClassName
|
|
1268
|
+
),
|
|
1143
1269
|
children: slidesContent
|
|
1144
1270
|
}
|
|
1145
1271
|
) })
|
|
@@ -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,7 @@ function FeatureTabbedContentImage({
|
|
|
1069
1088
|
TabsTrigger,
|
|
1070
1089
|
{
|
|
1071
1090
|
value: slide.id.toString(),
|
|
1072
|
-
className: cn("text-sm
|
|
1091
|
+
className: cn("text-sm md:text-base", tabTriggerClassName),
|
|
1073
1092
|
children: slide.tabName
|
|
1074
1093
|
},
|
|
1075
1094
|
slide.id
|
|
@@ -1079,20 +1098,79 @@ function FeatureTabbedContentImage({
|
|
|
1079
1098
|
{
|
|
1080
1099
|
value: slide.id.toString(),
|
|
1081
1100
|
className: cn("max-w-5xl", tabContentClassName),
|
|
1082
|
-
children: /* @__PURE__ */ jsxs(
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1101
|
+
children: /* @__PURE__ */ jsxs(
|
|
1102
|
+
"div",
|
|
1103
|
+
{
|
|
1104
|
+
className: cn(
|
|
1105
|
+
"grid grid-cols-1 items-center gap-10 md:grid-cols-2",
|
|
1106
|
+
contentGridClassName,
|
|
1107
|
+
slide.className
|
|
1108
|
+
),
|
|
1109
|
+
children: [
|
|
1110
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
1111
|
+
slide.title && (typeof slide.title === "string" ? /* @__PURE__ */ jsx(
|
|
1112
|
+
"h2",
|
|
1113
|
+
{
|
|
1114
|
+
className: cn(
|
|
1115
|
+
"mb-4 text-2xl font-semibold lg:text-4xl",
|
|
1116
|
+
slide.titleClassName
|
|
1117
|
+
),
|
|
1118
|
+
children: slide.title
|
|
1119
|
+
}
|
|
1120
|
+
) : /* @__PURE__ */ jsx(
|
|
1121
|
+
"div",
|
|
1122
|
+
{
|
|
1123
|
+
className: cn(
|
|
1124
|
+
"mb-4 text-2xl font-semibold lg:text-4xl",
|
|
1125
|
+
slide.titleClassName
|
|
1126
|
+
),
|
|
1127
|
+
children: slide.title
|
|
1128
|
+
}
|
|
1129
|
+
)),
|
|
1130
|
+
slide.description && (typeof slide.description === "string" ? /* @__PURE__ */ jsx(
|
|
1131
|
+
"p",
|
|
1132
|
+
{
|
|
1133
|
+
className: cn(" lg:text-xl", slide.descriptionClassName),
|
|
1134
|
+
children: slide.description
|
|
1135
|
+
}
|
|
1136
|
+
) : /* @__PURE__ */ jsx(
|
|
1137
|
+
"div",
|
|
1138
|
+
{
|
|
1139
|
+
className: cn("lg:text-xl", slide.descriptionClassName),
|
|
1140
|
+
children: slide.description
|
|
1141
|
+
}
|
|
1142
|
+
)),
|
|
1143
|
+
slide.features && slide.features.length > 0 || slide.featuresSlot ? /* @__PURE__ */ jsx(
|
|
1144
|
+
"ul",
|
|
1145
|
+
{
|
|
1146
|
+
className: cn(
|
|
1147
|
+
"mt-8 grid grid-cols-1 gap-2 lg:grid-cols-2",
|
|
1148
|
+
slide.featuresClassName
|
|
1149
|
+
),
|
|
1150
|
+
children: renderFeatures(slide)
|
|
1151
|
+
}
|
|
1152
|
+
) : null,
|
|
1153
|
+
renderActions(slide)
|
|
1154
|
+
] }),
|
|
1155
|
+
renderImage(slide)
|
|
1156
|
+
]
|
|
1157
|
+
}
|
|
1158
|
+
)
|
|
1091
1159
|
},
|
|
1092
1160
|
slide.id
|
|
1093
1161
|
))
|
|
1094
1162
|
] });
|
|
1095
|
-
}, [
|
|
1163
|
+
}, [
|
|
1164
|
+
slidesSlot,
|
|
1165
|
+
slides,
|
|
1166
|
+
tabsListClassName,
|
|
1167
|
+
tabTriggerClassName,
|
|
1168
|
+
tabContentClassName,
|
|
1169
|
+
contentGridClassName,
|
|
1170
|
+
renderFeatures,
|
|
1171
|
+
renderActions,
|
|
1172
|
+
renderImage
|
|
1173
|
+
]);
|
|
1096
1174
|
const effectiveDefaultTab = useMemo(() => {
|
|
1097
1175
|
if (defaultTab) return defaultTab;
|
|
1098
1176
|
if (slides && slides.length > 0) return slides[0].id.toString();
|
|
@@ -1109,15 +1187,63 @@ function FeatureTabbedContentImage({
|
|
|
1109
1187
|
className,
|
|
1110
1188
|
containerClassName,
|
|
1111
1189
|
children: [
|
|
1112
|
-
/* @__PURE__ */ jsxs(
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1190
|
+
/* @__PURE__ */ jsxs(
|
|
1191
|
+
"div",
|
|
1192
|
+
{
|
|
1193
|
+
className: cn(
|
|
1194
|
+
"mx-auto flex max-w-3xl flex-col items-center gap-6",
|
|
1195
|
+
headerClassName
|
|
1196
|
+
),
|
|
1197
|
+
children: [
|
|
1198
|
+
title && (typeof title === "string" ? /* @__PURE__ */ jsx(
|
|
1199
|
+
"h2",
|
|
1200
|
+
{
|
|
1201
|
+
className: cn(
|
|
1202
|
+
"text-center text-3xl font-semibold lg:text-5xl",
|
|
1203
|
+
titleClassName
|
|
1204
|
+
),
|
|
1205
|
+
children: title
|
|
1206
|
+
}
|
|
1207
|
+
) : /* @__PURE__ */ jsx(
|
|
1208
|
+
"div",
|
|
1209
|
+
{
|
|
1210
|
+
className: cn(
|
|
1211
|
+
"text-center text-3xl font-semibold lg:text-5xl",
|
|
1212
|
+
titleClassName
|
|
1213
|
+
),
|
|
1214
|
+
children: title
|
|
1215
|
+
}
|
|
1216
|
+
)),
|
|
1217
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsx(
|
|
1218
|
+
"p",
|
|
1219
|
+
{
|
|
1220
|
+
className: cn(
|
|
1221
|
+
"text-center text-balance lg:text-xl",
|
|
1222
|
+
descriptionClassName
|
|
1223
|
+
),
|
|
1224
|
+
children: description
|
|
1225
|
+
}
|
|
1226
|
+
) : /* @__PURE__ */ jsx(
|
|
1227
|
+
"div",
|
|
1228
|
+
{
|
|
1229
|
+
className: cn(
|
|
1230
|
+
"text-center text-balance lg:text-xl",
|
|
1231
|
+
descriptionClassName
|
|
1232
|
+
),
|
|
1233
|
+
children: description
|
|
1234
|
+
}
|
|
1235
|
+
))
|
|
1236
|
+
]
|
|
1237
|
+
}
|
|
1238
|
+
),
|
|
1116
1239
|
(slidesSlot || slides && slides.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-12", tabsWrapperClassName), children: /* @__PURE__ */ jsx(
|
|
1117
1240
|
Tabs,
|
|
1118
1241
|
{
|
|
1119
1242
|
defaultValue: effectiveDefaultTab,
|
|
1120
|
-
className: cn(
|
|
1243
|
+
className: cn(
|
|
1244
|
+
"mx-auto flex w-fit flex-col items-center gap-8 md:gap-12",
|
|
1245
|
+
tabsClassName
|
|
1246
|
+
),
|
|
1121
1247
|
children: slidesContent
|
|
1122
1248
|
}
|
|
1123
1249
|
) })
|