@opensite/ui 1.4.4 → 1.4.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.
@@ -37,6 +37,32 @@ function getTextColor(parentBg, variant = "default", options) {
37
37
  }
38
38
  }
39
39
  }
40
+ function getAccentColor(parentBg, options) {
41
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
42
+ return isDark ? "text-accent-foreground" : "text-primary";
43
+ }
44
+ function getBorderColor(parentBg, variant = "default", options) {
45
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
46
+ if (isDark) {
47
+ switch (variant) {
48
+ case "default":
49
+ return "border-foreground/20";
50
+ case "muted":
51
+ return "border-foreground/10";
52
+ case "accent":
53
+ return "border-accent-foreground";
54
+ }
55
+ } else {
56
+ switch (variant) {
57
+ case "default":
58
+ return "border-border";
59
+ case "muted":
60
+ return "border-muted";
61
+ case "accent":
62
+ return "border-primary";
63
+ }
64
+ }
65
+ }
40
66
  var svgCache = /* @__PURE__ */ new Map();
41
67
  function DynamicIcon({
42
68
  name,
@@ -971,11 +997,22 @@ function FeatureIntegrationCards({
971
997
  const renderLinkLabel = useCallback((integration) => {
972
998
  if (integration.linkLabelSlot) return integration.linkLabelSlot;
973
999
  if (!integration.linkLabel) return null;
974
- return /* @__PURE__ */ jsxs("span", { className: cn("flex items-center gap-1 rounded-full border px-3 py-2.5 text-sm", integration.linkLabelClassName), children: [
975
- integration.linkLabel,
976
- /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-right", size: 16 })
977
- ] });
978
- }, []);
1000
+ return /* @__PURE__ */ jsxs(
1001
+ "span",
1002
+ {
1003
+ className: cn(
1004
+ "flex items-center gap-1.5 rounded-full border px-3 py-2 text-sm font-medium transition-colors",
1005
+ getBorderColor(background),
1006
+ getAccentColor(background),
1007
+ integration.linkLabelClassName
1008
+ ),
1009
+ children: [
1010
+ integration.linkLabel,
1011
+ /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-right", size: 14 })
1012
+ ]
1013
+ }
1014
+ );
1015
+ }, [background]);
979
1016
  const integrationsContent = useMemo(() => {
980
1017
  if (integrationsSlot) return integrationsSlot;
981
1018
  if (!integrations || integrations.length === 0) return null;
@@ -984,35 +1021,84 @@ function FeatureIntegrationCards({
984
1021
  const linkLabelContent = renderLinkLabel(integration);
985
1022
  const cardContent = /* @__PURE__ */ jsxs(Fragment, { children: [
986
1023
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
987
- iconContent && /* @__PURE__ */ jsx("span", { className: "grid size-12 shrink-0 place-content-center rounded-md border", children: iconContent }),
1024
+ iconContent && /* @__PURE__ */ jsx(
1025
+ "span",
1026
+ {
1027
+ className: cn(
1028
+ "grid size-12 shrink-0 place-content-center rounded-lg border bg-background/50",
1029
+ getBorderColor(background)
1030
+ ),
1031
+ children: iconContent
1032
+ }
1033
+ ),
988
1034
  linkLabelContent
989
1035
  ] }),
990
- /* @__PURE__ */ jsxs("div", { children: [
991
- integration.title && (typeof integration.title === "string" ? /* @__PURE__ */ jsx("h3", { className: cn("font-medium md:text-lg", integration.titleClassName), children: integration.title }) : /* @__PURE__ */ jsx("div", { className: cn("font-medium md:text-lg", integration.titleClassName), children: integration.title })),
992
- integration.description && (typeof integration.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm md:text-base", getTextColor(background, "muted"), integration.descriptionClassName), children: integration.description }) : /* @__PURE__ */ jsx("div", { className: cn("text-sm md:text-base", getTextColor(background, "muted"), integration.descriptionClassName), children: integration.description }))
1036
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
1037
+ integration.title && (typeof integration.title === "string" ? /* @__PURE__ */ jsx(
1038
+ "h3",
1039
+ {
1040
+ className: cn(
1041
+ "font-semibold md:text-lg",
1042
+ getTextColor(background),
1043
+ integration.titleClassName
1044
+ ),
1045
+ children: integration.title
1046
+ }
1047
+ ) : /* @__PURE__ */ jsx(
1048
+ "div",
1049
+ {
1050
+ className: cn(
1051
+ "font-semibold md:text-lg",
1052
+ getTextColor(background),
1053
+ integration.titleClassName
1054
+ ),
1055
+ children: integration.title
1056
+ }
1057
+ )),
1058
+ integration.description && (typeof integration.description === "string" ? /* @__PURE__ */ jsx(
1059
+ "p",
1060
+ {
1061
+ className: cn(
1062
+ "text-sm leading-relaxed md:text-base",
1063
+ getTextColor(background, "muted"),
1064
+ integration.descriptionClassName
1065
+ ),
1066
+ children: integration.description
1067
+ }
1068
+ ) : /* @__PURE__ */ jsx(
1069
+ "div",
1070
+ {
1071
+ className: cn(
1072
+ "text-sm leading-relaxed md:text-base",
1073
+ getTextColor(background, "muted"),
1074
+ integration.descriptionClassName
1075
+ ),
1076
+ children: integration.description
1077
+ }
1078
+ ))
993
1079
  ] })
994
1080
  ] });
1081
+ const cardClasses = cn(
1082
+ "flex flex-col gap-5 rounded-xl border p-6 transition-all duration-300",
1083
+ getBorderColor(background),
1084
+ "hover:shadow-lg",
1085
+ cardClassName,
1086
+ integration.className
1087
+ );
995
1088
  if (integration.link) {
996
1089
  return /* @__PURE__ */ jsx(
997
1090
  Pressable,
998
1091
  {
999
1092
  href: integration.link,
1000
- className: cn("flex flex-col gap-4 rounded-xl border p-6 transition-colors duration-300", cardClassName, integration.className),
1093
+ className: cardClasses,
1001
1094
  children: cardContent
1002
1095
  },
1003
1096
  index
1004
1097
  );
1005
1098
  }
1006
- return /* @__PURE__ */ jsx(
1007
- "div",
1008
- {
1009
- className: cn("flex flex-col gap-4 rounded-xl border p-6 transition-colors duration-300", cardClassName, integration.className),
1010
- children: cardContent
1011
- },
1012
- index
1013
- );
1099
+ return /* @__PURE__ */ jsx("div", { className: cardClasses, children: cardContent }, index);
1014
1100
  });
1015
- }, [integrationsSlot, integrations, cardClassName, renderIntegrationIcon, renderLinkLabel]);
1101
+ }, [integrationsSlot, integrations, cardClassName, renderIntegrationIcon, renderLinkLabel, background]);
1016
1102
  return /* @__PURE__ */ jsxs(
1017
1103
  Section,
1018
1104
  {
@@ -34,6 +34,32 @@ var SeparatorPrimitive__namespace = /*#__PURE__*/_interopNamespace(SeparatorPrim
34
34
  function cn(...inputs) {
35
35
  return tailwindMerge.twMerge(clsx.clsx(inputs));
36
36
  }
37
+ function getTextColor(parentBg, variant = "default", options) {
38
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
39
+ if (isDark) {
40
+ switch (variant) {
41
+ case "default":
42
+ return "text-foreground";
43
+ case "muted":
44
+ return "text-foreground/80";
45
+ case "subtle":
46
+ return "text-foreground/60";
47
+ case "accent":
48
+ return "text-accent-foreground";
49
+ }
50
+ } else {
51
+ switch (variant) {
52
+ case "default":
53
+ return "text-foreground";
54
+ case "muted":
55
+ return "text-muted-foreground";
56
+ case "subtle":
57
+ return "text-muted-foreground/70";
58
+ case "accent":
59
+ return "text-primary";
60
+ }
61
+ }
62
+ }
37
63
  function getAccentColor(parentBg, options) {
38
64
  const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
39
65
  return isDark ? "text-accent-foreground" : "text-primary";
@@ -1017,8 +1043,7 @@ function FeatureUtilityCardsGrid({
1017
1043
  href: learnMoreAction.href,
1018
1044
  onClick: learnMoreAction.onClick,
1019
1045
  className: cn(
1020
- "hover:underline",
1021
- `hover:${getAccentColor(background)}`,
1046
+ "font-medium transition-opacity hover:opacity-80",
1022
1047
  learnMoreAction.className
1023
1048
  ),
1024
1049
  "aria-label": learnMoreAction["aria-label"],
@@ -1031,7 +1056,10 @@ function FeatureUtilityCardsGrid({
1031
1056
  {
1032
1057
  href: learnMoreAction.href,
1033
1058
  onClick: learnMoreAction.onClick,
1034
- className: cn(learnMoreAction.className),
1059
+ className: cn(
1060
+ "flex items-center gap-1 font-medium transition-opacity hover:opacity-80",
1061
+ learnMoreAction.className
1062
+ ),
1035
1063
  "aria-label": learnMoreAction["aria-label"],
1036
1064
  children: [
1037
1065
  learnMoreAction.icon,
@@ -1069,18 +1097,60 @@ function FeatureUtilityCardsGrid({
1069
1097
  return utilities.map((utility, index) => /* @__PURE__ */ jsxRuntime.jsxs(
1070
1098
  Card,
1071
1099
  {
1072
- className: cn("overflow-hidden pt-0", cardClassName, utility.className),
1100
+ className: cn(
1101
+ "overflow-hidden pt-0 transition-shadow duration-300 hover:shadow-lg",
1102
+ cardClassName,
1103
+ utility.className
1104
+ ),
1073
1105
  children: [
1074
- renderUtilityImage(utility),
1075
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-5", children: [
1076
- utility.title && (typeof utility.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-1 font-medium", utility.titleClassName), children: utility.title }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-1 font-medium", utility.titleClassName), children: utility.title })),
1077
- utility.description && (typeof utility.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("", utility.descriptionClassName), children: utility.description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("", utility.descriptionClassName), children: utility.description }))
1106
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden", children: renderUtilityImage(utility) }),
1107
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-5 md:p-6", children: [
1108
+ utility.title && (typeof utility.title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1109
+ "h3",
1110
+ {
1111
+ className: cn(
1112
+ "mb-2 text-lg font-semibold",
1113
+ utility.titleClassName
1114
+ ),
1115
+ children: utility.title
1116
+ }
1117
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
1118
+ "div",
1119
+ {
1120
+ className: cn(
1121
+ "mb-2 text-lg font-semibold",
1122
+ utility.titleClassName
1123
+ ),
1124
+ children: utility.title
1125
+ }
1126
+ )),
1127
+ utility.description && (typeof utility.description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1128
+ "p",
1129
+ {
1130
+ className: cn(
1131
+ "text-sm leading-relaxed",
1132
+ getTextColor(background, "muted"),
1133
+ utility.descriptionClassName
1134
+ ),
1135
+ children: utility.description
1136
+ }
1137
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
1138
+ "div",
1139
+ {
1140
+ className: cn(
1141
+ "text-sm leading-relaxed",
1142
+ getTextColor(background, "muted"),
1143
+ utility.descriptionClassName
1144
+ ),
1145
+ children: utility.description
1146
+ }
1147
+ ))
1078
1148
  ] })
1079
1149
  ]
1080
1150
  },
1081
1151
  index
1082
1152
  ));
1083
- }, [utilitiesSlot, utilities, cardClassName, renderUtilityImage]);
1153
+ }, [utilitiesSlot, utilities, cardClassName, renderUtilityImage, background]);
1084
1154
  return /* @__PURE__ */ jsxRuntime.jsxs(
1085
1155
  Section,
1086
1156
  {
@@ -12,6 +12,32 @@ import * as SeparatorPrimitive from '@radix-ui/react-separator';
12
12
  function cn(...inputs) {
13
13
  return twMerge(clsx(inputs));
14
14
  }
15
+ function getTextColor(parentBg, variant = "default", options) {
16
+ const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
17
+ if (isDark) {
18
+ switch (variant) {
19
+ case "default":
20
+ return "text-foreground";
21
+ case "muted":
22
+ return "text-foreground/80";
23
+ case "subtle":
24
+ return "text-foreground/60";
25
+ case "accent":
26
+ return "text-accent-foreground";
27
+ }
28
+ } else {
29
+ switch (variant) {
30
+ case "default":
31
+ return "text-foreground";
32
+ case "muted":
33
+ return "text-muted-foreground";
34
+ case "subtle":
35
+ return "text-muted-foreground/70";
36
+ case "accent":
37
+ return "text-primary";
38
+ }
39
+ }
40
+ }
15
41
  function getAccentColor(parentBg, options) {
16
42
  const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
17
43
  return isDark ? "text-accent-foreground" : "text-primary";
@@ -995,8 +1021,7 @@ function FeatureUtilityCardsGrid({
995
1021
  href: learnMoreAction.href,
996
1022
  onClick: learnMoreAction.onClick,
997
1023
  className: cn(
998
- "hover:underline",
999
- `hover:${getAccentColor(background)}`,
1024
+ "font-medium transition-opacity hover:opacity-80",
1000
1025
  learnMoreAction.className
1001
1026
  ),
1002
1027
  "aria-label": learnMoreAction["aria-label"],
@@ -1009,7 +1034,10 @@ function FeatureUtilityCardsGrid({
1009
1034
  {
1010
1035
  href: learnMoreAction.href,
1011
1036
  onClick: learnMoreAction.onClick,
1012
- className: cn(learnMoreAction.className),
1037
+ className: cn(
1038
+ "flex items-center gap-1 font-medium transition-opacity hover:opacity-80",
1039
+ learnMoreAction.className
1040
+ ),
1013
1041
  "aria-label": learnMoreAction["aria-label"],
1014
1042
  children: [
1015
1043
  learnMoreAction.icon,
@@ -1047,18 +1075,60 @@ function FeatureUtilityCardsGrid({
1047
1075
  return utilities.map((utility, index) => /* @__PURE__ */ jsxs(
1048
1076
  Card,
1049
1077
  {
1050
- className: cn("overflow-hidden pt-0", cardClassName, utility.className),
1078
+ className: cn(
1079
+ "overflow-hidden pt-0 transition-shadow duration-300 hover:shadow-lg",
1080
+ cardClassName,
1081
+ utility.className
1082
+ ),
1051
1083
  children: [
1052
- renderUtilityImage(utility),
1053
- /* @__PURE__ */ jsxs("div", { className: "p-5", children: [
1054
- utility.title && (typeof utility.title === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mb-1 font-medium", utility.titleClassName), children: utility.title }) : /* @__PURE__ */ jsx("div", { className: cn("mb-1 font-medium", utility.titleClassName), children: utility.title })),
1055
- utility.description && (typeof utility.description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("", utility.descriptionClassName), children: utility.description }) : /* @__PURE__ */ jsx("div", { className: cn("", utility.descriptionClassName), children: utility.description }))
1084
+ /* @__PURE__ */ jsx("div", { className: "overflow-hidden", children: renderUtilityImage(utility) }),
1085
+ /* @__PURE__ */ jsxs("div", { className: "p-5 md:p-6", children: [
1086
+ utility.title && (typeof utility.title === "string" ? /* @__PURE__ */ jsx(
1087
+ "h3",
1088
+ {
1089
+ className: cn(
1090
+ "mb-2 text-lg font-semibold",
1091
+ utility.titleClassName
1092
+ ),
1093
+ children: utility.title
1094
+ }
1095
+ ) : /* @__PURE__ */ jsx(
1096
+ "div",
1097
+ {
1098
+ className: cn(
1099
+ "mb-2 text-lg font-semibold",
1100
+ utility.titleClassName
1101
+ ),
1102
+ children: utility.title
1103
+ }
1104
+ )),
1105
+ utility.description && (typeof utility.description === "string" ? /* @__PURE__ */ jsx(
1106
+ "p",
1107
+ {
1108
+ className: cn(
1109
+ "text-sm leading-relaxed",
1110
+ getTextColor(background, "muted"),
1111
+ utility.descriptionClassName
1112
+ ),
1113
+ children: utility.description
1114
+ }
1115
+ ) : /* @__PURE__ */ jsx(
1116
+ "div",
1117
+ {
1118
+ className: cn(
1119
+ "text-sm leading-relaxed",
1120
+ getTextColor(background, "muted"),
1121
+ utility.descriptionClassName
1122
+ ),
1123
+ children: utility.description
1124
+ }
1125
+ ))
1056
1126
  ] })
1057
1127
  ]
1058
1128
  },
1059
1129
  index
1060
1130
  ));
1061
- }, [utilitiesSlot, utilities, cardClassName, renderUtilityImage]);
1131
+ }, [utilitiesSlot, utilities, cardClassName, renderUtilityImage, background]);
1062
1132
  return /* @__PURE__ */ jsxs(
1063
1133
  Section,
1064
1134
  {
@@ -1581,7 +1581,8 @@ function FooterAnimatedSocial({
1581
1581
  separatorClassName,
1582
1582
  copyrightClassName,
1583
1583
  background,
1584
- spacing,
1584
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
1585
+ spacing = "py-6 md:py-32",
1585
1586
  pattern,
1586
1587
  patternOpacity
1587
1588
  }) {
@@ -1604,7 +1605,10 @@ function FooterAnimatedSocial({
1604
1605
  label: link.label,
1605
1606
  iconNameOverride: link.iconNameOverride,
1606
1607
  iconSize: 24,
1607
- className: cn("group flex items-center gap-2 py-2 transition-colors hover:opacity-70", socialLinkClassName)
1608
+ className: cn(
1609
+ "group flex items-center gap-2 py-2 transition-colors hover:opacity-70",
1610
+ socialLinkClassName
1611
+ )
1608
1612
  }
1609
1613
  )
1610
1614
  },
@@ -1619,6 +1623,7 @@ function FooterAnimatedSocial({
1619
1623
  pattern,
1620
1624
  patternOpacity,
1621
1625
  className: cn(className),
1626
+ containerClassName,
1622
1627
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(contentClassName), children: /* @__PURE__ */ jsxRuntime.jsx("footer", { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1623
1628
  /* @__PURE__ */ jsxRuntime.jsxs(
1624
1629
  framerMotion.motion.div,
@@ -1627,23 +1632,56 @@ function FooterAnimatedSocial({
1627
1632
  initial: "hidden",
1628
1633
  whileInView: "visible",
1629
1634
  viewport: { once: true },
1630
- className: cn("flex flex-col justify-between md:flex-row md:items-center", layoutClassName),
1635
+ className: cn(
1636
+ "flex flex-col justify-between md:flex-row md:items-center",
1637
+ layoutClassName
1638
+ ),
1631
1639
  children: [
1632
1640
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("space-y-8", leftColumnClassName), children: [
1633
1641
  /* @__PURE__ */ jsxRuntime.jsxs(framerMotion.motion.div, { variants: itemVariants, className: "space-y-6", children: [
1634
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-4xl leading-tight font-bold lg:text-5xl", headingClassName), children: heading }),
1635
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("max-w-md text-lg leading-relaxed opacity-80", descriptionClassName), children: description })
1642
+ /* @__PURE__ */ jsxRuntime.jsx(
1643
+ "h2",
1644
+ {
1645
+ className: cn(
1646
+ "text-4xl leading-tight font-bold lg:text-5xl",
1647
+ headingClassName
1648
+ ),
1649
+ children: heading
1650
+ }
1651
+ ),
1652
+ /* @__PURE__ */ jsxRuntime.jsx(
1653
+ "p",
1654
+ {
1655
+ className: cn(
1656
+ "max-w-md text-lg leading-relaxed opacity-80",
1657
+ descriptionClassName
1658
+ ),
1659
+ children: description
1660
+ }
1661
+ )
1636
1662
  ] }),
1637
1663
  ctaUrl && ctaText && /* @__PURE__ */ jsxRuntime.jsx(framerMotion.motion.div, { variants: itemVariants, children: /* @__PURE__ */ jsxRuntime.jsx(
1638
1664
  Pressable,
1639
1665
  {
1640
1666
  href: ctaUrl,
1641
- className: cn("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border h-11 px-8 hover:opacity-80", ctaClassName),
1667
+ className: cn(
1668
+ "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border h-11 px-8 hover:opacity-80",
1669
+ ctaClassName
1670
+ ),
1642
1671
  children: ctaText
1643
1672
  }
1644
1673
  ) })
1645
1674
  ] }),
1646
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-5 space-y-8 md:mt-0", rightColumnClassName), children: /* @__PURE__ */ jsxRuntime.jsx(framerMotion.motion.div, { variants: itemVariants, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("space-y-6", socialLinksClassName), children: socialLinksContent }) }) })
1675
+ /* @__PURE__ */ jsxRuntime.jsx(
1676
+ "div",
1677
+ {
1678
+ className: cn(
1679
+ "flex flex-row md:flex-col flex-wrap items-center justify-center gap-4 md:gap-2",
1680
+ rightColumnClassName
1681
+ ),
1682
+ children: /* @__PURE__ */ jsxRuntime.jsx(framerMotion.motion.div, { variants: itemVariants, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-row md:flex-col items-center gap-4 md:gap-6", socialLinksClassName), children: socialLinksContent }) })
1683
+ }
1684
+ )
1647
1685
  ]
1648
1686
  }
1649
1687
  ),
@@ -1656,14 +1694,32 @@ function FooterAnimatedSocial({
1656
1694
  viewport: { once: true },
1657
1695
  className: cn("mt-16", bottomClassName),
1658
1696
  children: [
1659
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.motion.div, { variants: itemVariants, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mb-8 h-px w-full opacity-20", separatorClassName), style: { backgroundColor: "currentColor" } }) }),
1697
+ /* @__PURE__ */ jsxRuntime.jsx(framerMotion.motion.div, { variants: itemVariants, children: /* @__PURE__ */ jsxRuntime.jsx(
1698
+ "div",
1699
+ {
1700
+ className: cn(
1701
+ "mb-8 h-px w-full opacity-20",
1702
+ separatorClassName
1703
+ ),
1704
+ style: { backgroundColor: "currentColor" }
1705
+ }
1706
+ ) }),
1660
1707
  /* @__PURE__ */ jsxRuntime.jsxs(
1661
1708
  framerMotion.motion.div,
1662
1709
  {
1663
1710
  variants: itemVariants,
1664
- className: cn("flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center", copyrightClassName),
1711
+ className: cn(
1712
+ "flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center",
1713
+ copyrightClassName
1714
+ ),
1665
1715
  children: [
1666
- /* @__PURE__ */ jsxRuntime.jsx(FooterCopyright, { copyright, className: "text-sm opacity-70" }),
1716
+ /* @__PURE__ */ jsxRuntime.jsx(
1717
+ FooterCopyright,
1718
+ {
1719
+ copyright,
1720
+ className: "text-sm opacity-70"
1721
+ }
1722
+ ),
1667
1723
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-6 text-sm opacity-70", children: /* @__PURE__ */ jsxRuntime.jsx(
1668
1724
  BrandAttribution,
1669
1725
  {
@@ -51,6 +51,10 @@ interface FooterAnimatedSocialProps {
51
51
  copyrightClassName?: string;
52
52
  /** Section background variant */
53
53
  background?: SectionBackground;
54
+ /**
55
+ * Additional CSS classes for the container
56
+ */
57
+ containerClassName?: string;
54
58
  /** Section spacing variant */
55
59
  spacing?: SectionSpacing;
56
60
  /** Optional background pattern */
@@ -66,6 +70,6 @@ interface FooterAnimatedSocialProps {
66
70
  * modern websites, portfolios, and creative projects that want to add visual
67
71
  * polish and interactivity to their footer.
68
72
  */
69
- declare function FooterAnimatedSocial({ heading, description, ctaText, ctaUrl, socialLinks, copyright, className, contentClassName, layoutClassName, leftColumnClassName, headingClassName, descriptionClassName, ctaClassName, rightColumnClassName, socialLinksClassName, socialLinkClassName, bottomClassName, separatorClassName, copyrightClassName, background, spacing, pattern, patternOpacity, }: FooterAnimatedSocialProps): React.JSX.Element;
73
+ declare function FooterAnimatedSocial({ heading, description, ctaText, ctaUrl, socialLinks, copyright, className, contentClassName, layoutClassName, leftColumnClassName, headingClassName, descriptionClassName, ctaClassName, rightColumnClassName, socialLinksClassName, socialLinkClassName, bottomClassName, separatorClassName, copyrightClassName, background, containerClassName, spacing, pattern, patternOpacity, }: FooterAnimatedSocialProps): React.JSX.Element;
70
74
 
71
75
  export { FooterAnimatedSocial, type FooterAnimatedSocialProps };
@@ -51,6 +51,10 @@ interface FooterAnimatedSocialProps {
51
51
  copyrightClassName?: string;
52
52
  /** Section background variant */
53
53
  background?: SectionBackground;
54
+ /**
55
+ * Additional CSS classes for the container
56
+ */
57
+ containerClassName?: string;
54
58
  /** Section spacing variant */
55
59
  spacing?: SectionSpacing;
56
60
  /** Optional background pattern */
@@ -66,6 +70,6 @@ interface FooterAnimatedSocialProps {
66
70
  * modern websites, portfolios, and creative projects that want to add visual
67
71
  * polish and interactivity to their footer.
68
72
  */
69
- declare function FooterAnimatedSocial({ heading, description, ctaText, ctaUrl, socialLinks, copyright, className, contentClassName, layoutClassName, leftColumnClassName, headingClassName, descriptionClassName, ctaClassName, rightColumnClassName, socialLinksClassName, socialLinkClassName, bottomClassName, separatorClassName, copyrightClassName, background, spacing, pattern, patternOpacity, }: FooterAnimatedSocialProps): React.JSX.Element;
73
+ declare function FooterAnimatedSocial({ heading, description, ctaText, ctaUrl, socialLinks, copyright, className, contentClassName, layoutClassName, leftColumnClassName, headingClassName, descriptionClassName, ctaClassName, rightColumnClassName, socialLinksClassName, socialLinkClassName, bottomClassName, separatorClassName, copyrightClassName, background, containerClassName, spacing, pattern, patternOpacity, }: FooterAnimatedSocialProps): React.JSX.Element;
70
74
 
71
75
  export { FooterAnimatedSocial, type FooterAnimatedSocialProps };