@opensite/ui 1.3.0 → 1.3.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.
@@ -972,8 +972,8 @@ function FeatureCapabilitiesGrid({
972
972
  items,
973
973
  itemsSlot,
974
974
  className,
975
- containerClassName = "px-4 sm:px-4 md:px-6 lg:px-8",
976
- spacing = "py-6 md:py-32",
975
+ containerClassName = "mx-auto w-full max-w-screen-lg md:max-w-screen-4xl relative z-10 px-6 sm:px-2 md:px-2 lg:px-2",
976
+ spacing = "py-12 md:py-32",
977
977
  eyebrowClassName,
978
978
  headingClassName,
979
979
  gridClassName,
@@ -1000,7 +1000,7 @@ function FeatureCapabilitiesGrid({
1000
1000
  Card,
1001
1001
  {
1002
1002
  className: cn(
1003
- "group relative rounded-md overflow-visible border-border/10 bg-background/5 p-0 transition-colors duration-300 hover:border-border/20",
1003
+ "group relative rounded-md overflow-visible border-border/10 bg-card text-card-foreground p-0 transition-colors duration-300 hover:border-border/20",
1004
1004
  cardClassName,
1005
1005
  item.className
1006
1006
  ),
@@ -1018,7 +1018,7 @@ function FeatureCapabilitiesGrid({
1018
1018
  "div",
1019
1019
  {
1020
1020
  className: cn(
1021
- "flex h-10 w-10 items-center justify-center rounded-xl border border-border/15 bg-background/5",
1021
+ "flex h-10 w-10 items-center justify-center rounded-xl border ",
1022
1022
  item.iconClassName
1023
1023
  ),
1024
1024
  children: iconContent
@@ -1047,7 +1047,7 @@ function FeatureCapabilitiesGrid({
1047
1047
  "span",
1048
1048
  {
1049
1049
  className: cn(
1050
- "rounded-full border border-border/20 px-2 py-0.5 text-[10px] leading-none",
1050
+ "rounded-full border px-2 py-0.5 text-[10px] leading-none",
1051
1051
  item.badgeClassName
1052
1052
  ),
1053
1053
  children: item.badge
@@ -1092,7 +1092,6 @@ function FeatureCapabilitiesGrid({
1092
1092
  patternClassName,
1093
1093
  className,
1094
1094
  containerClassName,
1095
- containerMaxWidth: "lg",
1096
1095
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col space-y-6 md:space-y-16", children: [
1097
1096
  eyebrow || heading ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col space-y-4 md:space-y-6", children: [
1098
1097
  eyebrow && (typeof eyebrow === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm tracking-widest", eyebrowClassName), children: eyebrow }) : /* @__PURE__ */ jsxRuntime.jsx(
@@ -951,8 +951,8 @@ function FeatureCapabilitiesGrid({
951
951
  items,
952
952
  itemsSlot,
953
953
  className,
954
- containerClassName = "px-4 sm:px-4 md:px-6 lg:px-8",
955
- spacing = "py-6 md:py-32",
954
+ containerClassName = "mx-auto w-full max-w-screen-lg md:max-w-screen-4xl relative z-10 px-6 sm:px-2 md:px-2 lg:px-2",
955
+ spacing = "py-12 md:py-32",
956
956
  eyebrowClassName,
957
957
  headingClassName,
958
958
  gridClassName,
@@ -979,7 +979,7 @@ function FeatureCapabilitiesGrid({
979
979
  Card,
980
980
  {
981
981
  className: cn(
982
- "group relative rounded-md overflow-visible border-border/10 bg-background/5 p-0 transition-colors duration-300 hover:border-border/20",
982
+ "group relative rounded-md overflow-visible border-border/10 bg-card text-card-foreground p-0 transition-colors duration-300 hover:border-border/20",
983
983
  cardClassName,
984
984
  item.className
985
985
  ),
@@ -997,7 +997,7 @@ function FeatureCapabilitiesGrid({
997
997
  "div",
998
998
  {
999
999
  className: cn(
1000
- "flex h-10 w-10 items-center justify-center rounded-xl border border-border/15 bg-background/5",
1000
+ "flex h-10 w-10 items-center justify-center rounded-xl border ",
1001
1001
  item.iconClassName
1002
1002
  ),
1003
1003
  children: iconContent
@@ -1026,7 +1026,7 @@ function FeatureCapabilitiesGrid({
1026
1026
  "span",
1027
1027
  {
1028
1028
  className: cn(
1029
- "rounded-full border border-border/20 px-2 py-0.5 text-[10px] leading-none",
1029
+ "rounded-full border px-2 py-0.5 text-[10px] leading-none",
1030
1030
  item.badgeClassName
1031
1031
  ),
1032
1032
  children: item.badge
@@ -1071,7 +1071,6 @@ function FeatureCapabilitiesGrid({
1071
1071
  patternClassName,
1072
1072
  className,
1073
1073
  containerClassName,
1074
- containerMaxWidth: "lg",
1075
1074
  children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col space-y-6 md:space-y-16", children: [
1076
1075
  eyebrow || heading ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col space-y-4 md:space-y-6", children: [
1077
1076
  eyebrow && (typeof eyebrow === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm tracking-widest", eyebrowClassName), children: eyebrow }) : /* @__PURE__ */ jsx(
@@ -960,7 +960,7 @@ function FeatureIconGridBordered({
960
960
  "div",
961
961
  {
962
962
  className: cn(
963
- "relative flex h-full flex-col justify-between gap-6 rounded-none border-dashed px-3 md:border-l md:px-5",
963
+ "relative flex h-full flex-col justify-between gap-6 rounded-none border-dashed px-0 md:border-l md:px-5",
964
964
  cardClassName,
965
965
  feature.className
966
966
  ),
@@ -939,7 +939,7 @@ function FeatureIconGridBordered({
939
939
  "div",
940
940
  {
941
941
  className: cn(
942
- "relative flex h-full flex-col justify-between gap-6 rounded-none border-dashed px-3 md:border-l md:px-5",
942
+ "relative flex h-full flex-col justify-between gap-6 rounded-none border-dashed px-0 md:border-l md:px-5",
943
943
  cardClassName,
944
944
  feature.className
945
945
  ),
@@ -1090,7 +1090,7 @@ function FeatureIconTabsContent({
1090
1090
  tabContentClassName,
1091
1091
  optixFlowConfig,
1092
1092
  background,
1093
- spacing = "py-6 md:py-32",
1093
+ spacing = "pt-14 pb-12 md:pt-32 md:pb-32",
1094
1094
  pattern,
1095
1095
  patternOpacity,
1096
1096
  patternClassName
@@ -1182,7 +1182,7 @@ function FeatureIconTabsContent({
1182
1182
  {
1183
1183
  value: tab.value,
1184
1184
  className: cn(
1185
- "flex h-auto! w-auto! flex-none items-center gap-2 rounded-lg border border-border px-4 py-2.5 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground data-[state=active]:bg-primary data-[state=active]:text-primary-foreground",
1185
+ "flex h-auto! w-auto! flex-none items-center gap-2 rounded-lg border border-border pl-0 pr-4 md:pl-4 md:pr-4 py-2.5 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground data-[state=active]:bg-primary data-[state=active]:text-primary-foreground",
1186
1186
  `data-[state=active]:${getBorderColor(background, "accent")}`,
1187
1187
  tabTriggerClassName,
1188
1188
  tab.className
@@ -1196,7 +1196,7 @@ function FeatureIconTabsContent({
1196
1196
  ))
1197
1197
  }
1198
1198
  ) }),
1199
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("py-6 lg:py-16", contentWrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: tabs.map((tab) => {
1199
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("py-6 md:py-10", contentWrapperClassName), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4 md:p-8 bg-muted/50 rounded-2xl shadow-lg", children: tabs.map((tab) => {
1200
1200
  if (tab.contentSlot) {
1201
1201
  return /* @__PURE__ */ jsxRuntime.jsx(
1202
1202
  TabsContent,
@@ -1233,7 +1233,7 @@ function FeatureIconTabsContent({
1233
1233
  "h3",
1234
1234
  {
1235
1235
  className: cn(
1236
- "text-3xl font-semibold lg:text-5xl",
1236
+ "text-2xl font-semibold",
1237
1237
  content.titleClassName
1238
1238
  ),
1239
1239
  children: content.title
@@ -1242,7 +1242,7 @@ function FeatureIconTabsContent({
1242
1242
  "div",
1243
1243
  {
1244
1244
  className: cn(
1245
- "text-3xl font-semibold lg:text-5xl",
1245
+ "text-2xl font-semibold",
1246
1246
  content.titleClassName
1247
1247
  ),
1248
1248
  children: content.title
@@ -1314,7 +1314,7 @@ function FeatureIconTabsContent({
1314
1314
  "h1",
1315
1315
  {
1316
1316
  className: cn(
1317
- "max-w-2xl text-3xl font-semibold md:text-4xl text-balance",
1317
+ "max-w-4xl text-3xl font-semibold md:text-6xl text-balance",
1318
1318
  headingClassName
1319
1319
  ),
1320
1320
  children: heading
@@ -1323,7 +1323,7 @@ function FeatureIconTabsContent({
1323
1323
  "div",
1324
1324
  {
1325
1325
  className: cn(
1326
- "max-w-2xl text-3xl font-semibold md:text-4xl text-balance",
1326
+ "max-w-4xl text-3xl font-semibold md:text-6xl text-balance",
1327
1327
  headingClassName
1328
1328
  ),
1329
1329
  children: heading
@@ -1068,7 +1068,7 @@ function FeatureIconTabsContent({
1068
1068
  tabContentClassName,
1069
1069
  optixFlowConfig,
1070
1070
  background,
1071
- spacing = "py-6 md:py-32",
1071
+ spacing = "pt-14 pb-12 md:pt-32 md:pb-32",
1072
1072
  pattern,
1073
1073
  patternOpacity,
1074
1074
  patternClassName
@@ -1160,7 +1160,7 @@ function FeatureIconTabsContent({
1160
1160
  {
1161
1161
  value: tab.value,
1162
1162
  className: cn(
1163
- "flex h-auto! w-auto! flex-none items-center gap-2 rounded-lg border border-border px-4 py-2.5 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground data-[state=active]:bg-primary data-[state=active]:text-primary-foreground",
1163
+ "flex h-auto! w-auto! flex-none items-center gap-2 rounded-lg border border-border pl-0 pr-4 md:pl-4 md:pr-4 py-2.5 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground data-[state=active]:bg-primary data-[state=active]:text-primary-foreground",
1164
1164
  `data-[state=active]:${getBorderColor(background, "accent")}`,
1165
1165
  tabTriggerClassName,
1166
1166
  tab.className
@@ -1174,7 +1174,7 @@ function FeatureIconTabsContent({
1174
1174
  ))
1175
1175
  }
1176
1176
  ) }),
1177
- /* @__PURE__ */ jsx("div", { className: cn("py-6 lg:py-16", contentWrapperClassName), children: /* @__PURE__ */ jsx("div", { className: "relative", children: tabs.map((tab) => {
1177
+ /* @__PURE__ */ jsx("div", { className: cn("py-6 md:py-10", contentWrapperClassName), children: /* @__PURE__ */ jsx("div", { className: "p-4 md:p-8 bg-muted/50 rounded-2xl shadow-lg", children: tabs.map((tab) => {
1178
1178
  if (tab.contentSlot) {
1179
1179
  return /* @__PURE__ */ jsx(
1180
1180
  TabsContent,
@@ -1211,7 +1211,7 @@ function FeatureIconTabsContent({
1211
1211
  "h3",
1212
1212
  {
1213
1213
  className: cn(
1214
- "text-3xl font-semibold lg:text-5xl",
1214
+ "text-2xl font-semibold",
1215
1215
  content.titleClassName
1216
1216
  ),
1217
1217
  children: content.title
@@ -1220,7 +1220,7 @@ function FeatureIconTabsContent({
1220
1220
  "div",
1221
1221
  {
1222
1222
  className: cn(
1223
- "text-3xl font-semibold lg:text-5xl",
1223
+ "text-2xl font-semibold",
1224
1224
  content.titleClassName
1225
1225
  ),
1226
1226
  children: content.title
@@ -1292,7 +1292,7 @@ function FeatureIconTabsContent({
1292
1292
  "h1",
1293
1293
  {
1294
1294
  className: cn(
1295
- "max-w-2xl text-3xl font-semibold md:text-4xl text-balance",
1295
+ "max-w-4xl text-3xl font-semibold md:text-6xl text-balance",
1296
1296
  headingClassName
1297
1297
  ),
1298
1298
  children: heading
@@ -1301,7 +1301,7 @@ function FeatureIconTabsContent({
1301
1301
  "div",
1302
1302
  {
1303
1303
  className: cn(
1304
- "max-w-2xl text-3xl font-semibold md:text-4xl text-balance",
1304
+ "max-w-4xl text-3xl font-semibold md:text-6xl text-balance",
1305
1305
  headingClassName
1306
1306
  ),
1307
1307
  children: heading
@@ -1002,7 +1002,7 @@ function FeatureImageCardsThreeColumn({
1002
1002
  cardsSlot,
1003
1003
  className,
1004
1004
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
1005
- spacing = "py-6 md:py-32",
1005
+ spacing = "py-12 md:py-32",
1006
1006
  titleClassName,
1007
1007
  descriptionClassName,
1008
1008
  gridClassName,
@@ -1058,7 +1058,7 @@ function FeatureImageCardsThreeColumn({
1058
1058
  ),
1059
1059
  children: [
1060
1060
  renderImage(card, imageAlt),
1061
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-0 right-0 bottom-0 left-0 translate-y-0 md:translate-y-20 rounded-xl bg-linear-to-t from-black to-transparent transition-transform duration-300 group-hover:translate-y-0" }),
1061
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-0 right-0 bottom-0 left-0 translate-y-10 md:translate-y-20 rounded-xl bg-linear-to-t from-black to-transparent transition-transform duration-300 group-hover:translate-y-0" }),
1062
1062
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-4 md:p-6", children: [
1063
1063
  (card.badgeText || card.avatarSrc || card.icon || card.iconName) && /* @__PURE__ */ jsxRuntime.jsxs(
1064
1064
  Badge,
@@ -1128,7 +1128,7 @@ function FeatureImageCardsThreeColumn({
1128
1128
  "h2",
1129
1129
  {
1130
1130
  className: cn(
1131
- "text-xl font-semibold text-balance md:text-2xl lg:text-3xl max-w-lg md:max-w-md",
1131
+ "text-2xl font-semibold text-balance md:text-3xl lg:text-4xl max-w-lg md:max-w-md",
1132
1132
  titleClassName
1133
1133
  ),
1134
1134
  children: title
@@ -1137,7 +1137,7 @@ function FeatureImageCardsThreeColumn({
1137
1137
  "div",
1138
1138
  {
1139
1139
  className: cn(
1140
- "text-xl font-semibold text-balance md:text-2xl lg:text-3xl max-w-lg md:max-w-md",
1140
+ "text-2xl font-semibold text-balance md:text-3xl lg:text-4xl max-w-lg md:max-w-md",
1141
1141
  titleClassName
1142
1142
  ),
1143
1143
  children: title
@@ -980,7 +980,7 @@ function FeatureImageCardsThreeColumn({
980
980
  cardsSlot,
981
981
  className,
982
982
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
983
- spacing = "py-6 md:py-32",
983
+ spacing = "py-12 md:py-32",
984
984
  titleClassName,
985
985
  descriptionClassName,
986
986
  gridClassName,
@@ -1036,7 +1036,7 @@ function FeatureImageCardsThreeColumn({
1036
1036
  ),
1037
1037
  children: [
1038
1038
  renderImage(card, imageAlt),
1039
- /* @__PURE__ */ jsx("div", { className: "absolute top-0 right-0 bottom-0 left-0 translate-y-0 md:translate-y-20 rounded-xl bg-linear-to-t from-black to-transparent transition-transform duration-300 group-hover:translate-y-0" }),
1039
+ /* @__PURE__ */ jsx("div", { className: "absolute top-0 right-0 bottom-0 left-0 translate-y-10 md:translate-y-20 rounded-xl bg-linear-to-t from-black to-transparent transition-transform duration-300 group-hover:translate-y-0" }),
1040
1040
  /* @__PURE__ */ jsxs("div", { className: "absolute top-0 flex h-full w-full flex-col justify-between p-4 md:p-6", children: [
1041
1041
  (card.badgeText || card.avatarSrc || card.icon || card.iconName) && /* @__PURE__ */ jsxs(
1042
1042
  Badge,
@@ -1106,7 +1106,7 @@ function FeatureImageCardsThreeColumn({
1106
1106
  "h2",
1107
1107
  {
1108
1108
  className: cn(
1109
- "text-xl font-semibold text-balance md:text-2xl lg:text-3xl max-w-lg md:max-w-md",
1109
+ "text-2xl font-semibold text-balance md:text-3xl lg:text-4xl max-w-lg md:max-w-md",
1110
1110
  titleClassName
1111
1111
  ),
1112
1112
  children: title
@@ -1115,7 +1115,7 @@ function FeatureImageCardsThreeColumn({
1115
1115
  "div",
1116
1116
  {
1117
1117
  className: cn(
1118
- "text-xl font-semibold text-balance md:text-2xl lg:text-3xl max-w-lg md:max-w-md",
1118
+ "text-2xl font-semibold text-balance md:text-3xl lg:text-4xl max-w-lg md:max-w-md",
1119
1119
  titleClassName
1120
1120
  ),
1121
1121
  children: title
@@ -1127,7 +1127,7 @@ function FeatureNumberedCards({
1127
1127
  "span",
1128
1128
  {
1129
1129
  className: cn(
1130
- "absolute top-5 left-5 flex size-6 items-center justify-center rounded-sm bg-primary font-mono text-xs text-primary-foreground md:top-10 md:left-10",
1130
+ "absolute top-2 md:top-5 left-2 md:left-5 flex size-10 md:size-12 items-center justify-center rounded-md shadow-lg bg-primary text-sm md:text-md text-primary-foreground lg:top-10 lg:left-10 font-semibold",
1131
1131
  badgeClassName
1132
1132
  ),
1133
1133
  children: String(index + 1).padStart(2, "0")
@@ -1106,7 +1106,7 @@ function FeatureNumberedCards({
1106
1106
  "span",
1107
1107
  {
1108
1108
  className: cn(
1109
- "absolute top-5 left-5 flex size-6 items-center justify-center rounded-sm bg-primary font-mono text-xs text-primary-foreground md:top-10 md:left-10",
1109
+ "absolute top-2 md:top-5 left-2 md:left-5 flex size-10 md:size-12 items-center justify-center rounded-md shadow-lg bg-primary text-sm md:text-md text-primary-foreground lg:top-10 lg:left-10 font-semibold",
1110
1110
  badgeClassName
1111
1111
  ),
1112
1112
  children: String(index + 1).padStart(2, "0")
@@ -956,59 +956,124 @@ var Section = React__namespace.default.forwardRef(
956
956
  );
957
957
  Section.displayName = "Section";
958
958
  function FeaturePatternGridLinks({
959
+ title,
960
+ description,
961
+ titleClassName,
962
+ descriptionClassName,
963
+ headerClassName,
959
964
  features,
960
965
  featuresSlot,
961
966
  className,
962
- containerClassName,
967
+ spacing = "py-12 md:py-32",
968
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
963
969
  gridClassName,
964
970
  cardClassName,
965
971
  background,
966
- spacing,
967
972
  pattern,
968
973
  patternOpacity,
969
974
  patternClassName
970
975
  }) {
971
- const renderFeatureIcon = React.useCallback((feature) => {
972
- if (feature.icon) return feature.icon;
973
- if (feature.iconName) return /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: feature.iconName, size: 24, className: feature.iconClassName });
974
- return null;
975
- }, []);
976
- const renderFeatureLink = React.useCallback((feature) => {
977
- if (feature.linkSlot) return feature.linkSlot;
978
- if (!feature.link && !feature.linkLabel) return null;
979
- const label = feature.linkLabel || (feature.link ? "Learn more" : null);
980
- if (!label) return null;
981
- return /* @__PURE__ */ jsxRuntime.jsxs(
982
- Pressable,
983
- {
984
- href: feature.link,
985
- className: cn("flex items-center gap-2 text-sm font-medium", feature.linkClassName),
986
- children: [
987
- label,
988
- /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 16 })
989
- ]
990
- }
991
- );
992
- }, []);
976
+ const renderFeatureIcon = React.useCallback(
977
+ (feature) => {
978
+ if (feature.icon) return feature.icon;
979
+ if (feature.iconName)
980
+ return /* @__PURE__ */ jsxRuntime.jsx(
981
+ DynamicIcon,
982
+ {
983
+ name: feature.iconName,
984
+ size: 24,
985
+ className: feature.iconClassName
986
+ }
987
+ );
988
+ return null;
989
+ },
990
+ []
991
+ );
992
+ const renderFeatureLink = React.useCallback(
993
+ (feature) => {
994
+ if (feature.linkSlot) return feature.linkSlot;
995
+ if (!feature.link && !feature.linkLabel) return null;
996
+ const label = feature.linkLabel || (feature.link ? "Learn more" : null);
997
+ if (!label) return null;
998
+ return /* @__PURE__ */ jsxRuntime.jsxs(
999
+ Pressable,
1000
+ {
1001
+ href: feature.link,
1002
+ className: cn(
1003
+ "flex items-center gap-2 text-sm font-medium",
1004
+ feature.linkClassName
1005
+ ),
1006
+ children: [
1007
+ label,
1008
+ /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-right", size: 16 })
1009
+ ]
1010
+ }
1011
+ );
1012
+ },
1013
+ []
1014
+ );
993
1015
  const featuresContent = React.useMemo(() => {
994
1016
  if (featuresSlot) return featuresSlot;
995
1017
  if (!features || features.length === 0) return null;
996
1018
  return features.map((feature, index) => /* @__PURE__ */ jsxRuntime.jsxs(
997
1019
  "div",
998
1020
  {
999
- className: cn("flex flex-col gap-10 rounded-lg border p-8", cardClassName, feature.className),
1021
+ className: cn(
1022
+ "flex flex-col gap-10 rounded-lg border p-8",
1023
+ cardClassName,
1024
+ feature.className
1025
+ ),
1000
1026
  children: [
1001
1027
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1002
1028
  renderFeatureIcon(feature),
1003
- feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("mt-6 mb-2 font-medium", feature.titleClassName), children: feature.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-6 mb-2 font-medium", feature.titleClassName), children: feature.title })),
1004
- feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm", getTextColor(background, "muted"), feature.descriptionClassName), children: feature.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm", getTextColor(background, "muted"), feature.descriptionClassName), children: feature.description }))
1029
+ feature.title && (typeof feature.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1030
+ "h3",
1031
+ {
1032
+ className: cn("mt-6 mb-2 font-medium", feature.titleClassName),
1033
+ children: feature.title
1034
+ }
1035
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
1036
+ "div",
1037
+ {
1038
+ className: cn("mt-6 mb-2 font-medium", feature.titleClassName),
1039
+ children: feature.title
1040
+ }
1041
+ )),
1042
+ feature.description && (typeof feature.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1043
+ "p",
1044
+ {
1045
+ className: cn(
1046
+ "text-sm",
1047
+ getTextColor(background, "muted"),
1048
+ feature.descriptionClassName
1049
+ ),
1050
+ children: feature.description
1051
+ }
1052
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
1053
+ "div",
1054
+ {
1055
+ className: cn(
1056
+ "text-sm",
1057
+ getTextColor(background, "muted"),
1058
+ feature.descriptionClassName
1059
+ ),
1060
+ children: feature.description
1061
+ }
1062
+ ))
1005
1063
  ] }),
1006
1064
  renderFeatureLink(feature)
1007
1065
  ]
1008
1066
  },
1009
1067
  index
1010
1068
  ));
1011
- }, [featuresSlot, features, cardClassName, renderFeatureIcon, renderFeatureLink, background]);
1069
+ }, [
1070
+ featuresSlot,
1071
+ features,
1072
+ cardClassName,
1073
+ renderFeatureIcon,
1074
+ renderFeatureLink,
1075
+ background
1076
+ ]);
1012
1077
  return /* @__PURE__ */ jsxRuntime.jsx(
1013
1078
  Section,
1014
1079
  {
@@ -1019,7 +1084,55 @@ function FeaturePatternGridLinks({
1019
1084
  patternClassName,
1020
1085
  className,
1021
1086
  containerClassName,
1022
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("grid gap-6 md:grid-cols-2 lg:grid-cols-3", gridClassName), children: featuresContent })
1087
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col space-y-6 md:space-y-16", children: [
1088
+ title || description ? /* @__PURE__ */ jsxRuntime.jsxs(
1089
+ "div",
1090
+ {
1091
+ className: cn(
1092
+ "flex flex-col gap-4 md:gap-6 text-left",
1093
+ headerClassName
1094
+ ),
1095
+ children: [
1096
+ title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1097
+ "h2",
1098
+ {
1099
+ className: cn(
1100
+ "text-xl font-semibold text-balance md:text-2xl lg:text-3xl max-w-lg md:max-w-md",
1101
+ titleClassName
1102
+ ),
1103
+ children: title
1104
+ }
1105
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
1106
+ "div",
1107
+ {
1108
+ className: cn(
1109
+ "text-xl font-semibold text-balance md:text-2xl lg:text-3xl max-w-lg md:max-w-md",
1110
+ titleClassName
1111
+ ),
1112
+ children: title
1113
+ }
1114
+ )),
1115
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("max-w-lg md:max-w-md", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx(
1116
+ "div",
1117
+ {
1118
+ className: cn("max-w-lg md:max-w-md", descriptionClassName),
1119
+ children: description
1120
+ }
1121
+ ))
1122
+ ]
1123
+ }
1124
+ ) : null,
1125
+ /* @__PURE__ */ jsxRuntime.jsx(
1126
+ "div",
1127
+ {
1128
+ className: cn(
1129
+ "grid gap-6 md:grid-cols-2 lg:grid-cols-3",
1130
+ gridClassName
1131
+ ),
1132
+ children: featuresContent
1133
+ }
1134
+ )
1135
+ ] })
1023
1136
  }
1024
1137
  );
1025
1138
  }
@@ -57,6 +57,26 @@ interface FeaturePatternGridLinksItem {
57
57
  linkClassName?: string;
58
58
  }
59
59
  interface FeaturePatternGridLinksProps {
60
+ /**
61
+ * Main heading content
62
+ */
63
+ title?: React.ReactNode;
64
+ /**
65
+ * Supporting description content
66
+ */
67
+ description?: React.ReactNode;
68
+ /**
69
+ * Additional CSS classes for the title
70
+ */
71
+ titleClassName?: string;
72
+ /**
73
+ * Additional CSS classes for the description
74
+ */
75
+ descriptionClassName?: string;
76
+ /**
77
+ * Additional CSS classes for the header
78
+ */
79
+ headerClassName?: string;
60
80
  /**
61
81
  * Array of feature items
62
82
  */
@@ -119,6 +139,6 @@ interface FeaturePatternGridLinksProps {
119
139
  * />
120
140
  * ```
121
141
  */
122
- declare function FeaturePatternGridLinks({ features, featuresSlot, className, containerClassName, gridClassName, cardClassName, background, spacing, pattern, patternOpacity, patternClassName, }: FeaturePatternGridLinksProps): React.JSX.Element;
142
+ declare function FeaturePatternGridLinks({ title, description, titleClassName, descriptionClassName, headerClassName, features, featuresSlot, className, spacing, containerClassName, gridClassName, cardClassName, background, pattern, patternOpacity, patternClassName, }: FeaturePatternGridLinksProps): React.JSX.Element;
123
143
 
124
144
  export { FeaturePatternGridLinks, type FeaturePatternGridLinksProps };
@@ -57,6 +57,26 @@ interface FeaturePatternGridLinksItem {
57
57
  linkClassName?: string;
58
58
  }
59
59
  interface FeaturePatternGridLinksProps {
60
+ /**
61
+ * Main heading content
62
+ */
63
+ title?: React.ReactNode;
64
+ /**
65
+ * Supporting description content
66
+ */
67
+ description?: React.ReactNode;
68
+ /**
69
+ * Additional CSS classes for the title
70
+ */
71
+ titleClassName?: string;
72
+ /**
73
+ * Additional CSS classes for the description
74
+ */
75
+ descriptionClassName?: string;
76
+ /**
77
+ * Additional CSS classes for the header
78
+ */
79
+ headerClassName?: string;
60
80
  /**
61
81
  * Array of feature items
62
82
  */
@@ -119,6 +139,6 @@ interface FeaturePatternGridLinksProps {
119
139
  * />
120
140
  * ```
121
141
  */
122
- declare function FeaturePatternGridLinks({ features, featuresSlot, className, containerClassName, gridClassName, cardClassName, background, spacing, pattern, patternOpacity, patternClassName, }: FeaturePatternGridLinksProps): React.JSX.Element;
142
+ declare function FeaturePatternGridLinks({ title, description, titleClassName, descriptionClassName, headerClassName, features, featuresSlot, className, spacing, containerClassName, gridClassName, cardClassName, background, pattern, patternOpacity, patternClassName, }: FeaturePatternGridLinksProps): React.JSX.Element;
123
143
 
124
144
  export { FeaturePatternGridLinks, type FeaturePatternGridLinksProps };