@opensite/ui 1.6.2 → 1.6.3

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.
@@ -12,32 +12,6 @@ import { Img } from '@page-speed/img';
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
- }
41
15
  var badgeVariants = cva(
42
16
  "inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
43
17
  {
@@ -871,14 +845,13 @@ function HeroPatternBadgeLogos({
871
845
  actionsSlot,
872
846
  logos,
873
847
  logosSlot,
874
- logosTagline = "Powering the next generation of digital products",
875
- backgroundImageUrl = "https://cdn.ing/assets/files/record/286186/nbdflpgp4ostrno079hygibsflp3",
848
+ logosTagline,
876
849
  background,
877
- spacing,
850
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
851
+ spacing = "py-12 md:py-32",
878
852
  pattern,
879
853
  patternOpacity,
880
854
  className,
881
- containerClassName,
882
855
  contentClassName,
883
856
  headingClassName,
884
857
  descriptionClassName,
@@ -892,7 +865,14 @@ function HeroPatternBadgeLogos({
892
865
  if (actionsSlot) return actionsSlot;
893
866
  if (!actions || actions.length === 0) return null;
894
867
  return actions.map((action, index) => {
895
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
868
+ const {
869
+ label,
870
+ icon,
871
+ iconAfter,
872
+ children,
873
+ className: actionClassName,
874
+ ...pressableProps
875
+ } = action;
896
876
  return /* @__PURE__ */ jsx(
897
877
  Pressable,
898
878
  {
@@ -949,7 +929,7 @@ function HeroPatternBadgeLogos({
949
929
  return /* @__PURE__ */ jsx("div", { className: logoClassName, children: imgElement }, index);
950
930
  });
951
931
  }, [logosSlot, logos, optixFlowConfig]);
952
- return /* @__PURE__ */ jsxs(
932
+ return /* @__PURE__ */ jsx(
953
933
  Section,
954
934
  {
955
935
  background,
@@ -957,31 +937,61 @@ function HeroPatternBadgeLogos({
957
937
  pattern,
958
938
  patternOpacity,
959
939
  className: cn("relative p-0", className),
960
- children: [
961
- /* @__PURE__ */ jsx(
962
- "div",
963
- {
964
- className: cn(
965
- "absolute h-full w-full bg-contain bg-repeat opacity-100 lg:block",
966
- "mask-[linear-gradient(to_right,var(--color-border),transparent,transparent,var(--color-border))]",
967
- backgroundClassName
940
+ containerClassName,
941
+ children: /* @__PURE__ */ jsx("div", { className: cn("relative"), children: /* @__PURE__ */ jsx("div", { className: "mx-auto flex max-w-5xl flex-col items-center", children: /* @__PURE__ */ jsxs(
942
+ "div",
943
+ {
944
+ className: cn(
945
+ "z-10 mx-auto flex max-w-5xl flex-col items-center gap-6 text-center",
946
+ contentClassName
947
+ ),
948
+ children: [
949
+ badge && /* @__PURE__ */ jsx("div", { className: badgeClassName, children: typeof badge === "string" ? /* @__PURE__ */ jsx(Badge, { variant: "default", children: badge }) : badge }),
950
+ /* @__PURE__ */ jsxs("div", { children: [
951
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
952
+ "h1",
953
+ {
954
+ className: cn(
955
+ "mb-6 text-4xl font-bold tracking-tight text-balance md:text-5xl lg:text-7xl",
956
+ headingClassName
957
+ ),
958
+ children: heading
959
+ }
960
+ ) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
961
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
962
+ "p",
963
+ {
964
+ className: cn(
965
+ "mx-auto max-w-2xl md:text-lg lg:text-xl text-balance",
966
+ descriptionClassName
967
+ ),
968
+ children: description
969
+ }
970
+ ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
971
+ ] }),
972
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx(
973
+ "div",
974
+ {
975
+ className: cn("mt-6 flex items-center gap-4", actionsClassName),
976
+ children: renderActions
977
+ }
968
978
  ),
969
- style: { backgroundImage: `url('${backgroundImageUrl}')` }
970
- }
971
- ),
972
- /* @__PURE__ */ jsx("div", { className: cn("container py-28 md:py-32", containerClassName), children: /* @__PURE__ */ jsx("div", { className: "mx-auto flex max-w-5xl flex-col items-center", children: /* @__PURE__ */ jsxs("div", { className: cn("z-10 mx-auto flex max-w-5xl flex-col items-center gap-6 text-center", contentClassName), children: [
973
- badge && /* @__PURE__ */ jsx("div", { className: badgeClassName, children: typeof badge === "string" ? /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "transition-colors hover:bg-secondary/20", children: badge }) : badge }),
974
- /* @__PURE__ */ jsxs("div", { children: [
975
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("mb-6 text-4xl font-bold tracking-tight text-pretty md:text-5xl lg:text-7xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
976
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mx-auto max-w-2xl md:text-lg lg:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
977
- ] }),
978
- (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-6 flex items-center gap-4", actionsClassName), children: renderActions }),
979
- (logosSlot || logos && logos.length > 0 || logosTagline) && /* @__PURE__ */ jsxs("div", { className: cn("mt-12 flex flex-col items-center gap-4 lg:mt-16", logosClassName), children: [
980
- logosTagline && (typeof logosTagline === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-center text-sm", getTextColor(background, "muted")), children: logosTagline }) : logosTagline),
981
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 place-items-center items-center justify-center gap-6 opacity-80 sm:grid-cols-4 sm:gap-4", children: renderLogos })
982
- ] })
983
- ] }) }) })
984
- ]
979
+ (logosSlot || logos && logos.length > 0 || logosTagline) && /* @__PURE__ */ jsxs(
980
+ "div",
981
+ {
982
+ className: cn(
983
+ "mt-12 flex flex-col items-center gap-4 lg:mt-16",
984
+ logosClassName
985
+ ),
986
+ children: [
987
+ logosTagline && (typeof logosTagline === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-center text-sm"), children: logosTagline }) : logosTagline),
988
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 place-items-center items-center justify-center gap-6 opacity-80 sm:grid-cols-4 sm:gap-4", children: renderLogos })
989
+ ]
990
+ }
991
+ )
992
+ ]
993
+ }
994
+ ) }) })
985
995
  }
986
996
  );
987
997
  }
@@ -983,28 +983,22 @@ function HeroSplitIconCards({
983
983
  cardItems,
984
984
  cardsSlot,
985
985
  background,
986
- verticalSpacing,
987
986
  pattern,
988
987
  patternOpacity,
989
988
  className,
990
989
  contentClassName,
991
990
  headingClassName,
992
- descriptionClassName
991
+ descriptionClassName,
992
+ verticalSpacing,
993
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
994
+ spacing = "py-12 md:py-32"
993
995
  }) {
994
996
  const renderActions = React.useMemo(() => {
995
997
  if (actionsSlot) return actionsSlot;
996
998
  if (!primaryCta && !secondaryCta) return null;
997
999
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap gap-4", children: [
998
1000
  primaryCta && /* @__PURE__ */ jsxRuntime.jsx(Pressable, { href: primaryCta.href, size: "lg", variant: "default", children: primaryCta.label }),
999
- secondaryCta && /* @__PURE__ */ jsxRuntime.jsx(
1000
- Pressable,
1001
- {
1002
- href: secondaryCta.href,
1003
- size: "lg",
1004
- variant: "outline",
1005
- children: secondaryCta.label
1006
- }
1007
- )
1001
+ secondaryCta && /* @__PURE__ */ jsxRuntime.jsx(Pressable, { href: secondaryCta.href, size: "lg", variant: "outline", children: secondaryCta.label })
1008
1002
  ] });
1009
1003
  }, [actionsSlot, primaryCta, secondaryCta]);
1010
1004
  const renderCards = React.useMemo(() => {
@@ -1012,10 +1006,29 @@ function HeroSplitIconCards({
1012
1006
  if (!cardItems || cardItems.length === 0) return null;
1013
1007
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4", children: cardItems.map((item, idx) => {
1014
1008
  const card = /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "h-full border-border/60 px-0 py-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-4 p-6", children: [
1015
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex h-14 w-14 items-center justify-center rounded-xl", `${getAccentColor(background)}/10`, getAccentColor(background)), children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: item.icon, size: 24 }) }),
1009
+ /* @__PURE__ */ jsxRuntime.jsx(
1010
+ "div",
1011
+ {
1012
+ className: cn(
1013
+ "flex h-14 w-14 items-center justify-center rounded-xl",
1014
+ `${getAccentColor(background)}/10`,
1015
+ getAccentColor(background)
1016
+ ),
1017
+ children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: item.icon, size: 24 })
1018
+ }
1019
+ ),
1016
1020
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1017
1021
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-bold ", children: item.title }),
1018
- item.subtitle ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-2 text-sm", getTextColor(background, "muted")), children: item.subtitle }) : null
1022
+ item.subtitle ? /* @__PURE__ */ jsxRuntime.jsx(
1023
+ "p",
1024
+ {
1025
+ className: cn(
1026
+ "mt-2 text-sm",
1027
+ getTextColor(background, "muted")
1028
+ ),
1029
+ children: item.subtitle
1030
+ }
1031
+ ) : null
1019
1032
  ] })
1020
1033
  ] }) });
1021
1034
  return item.href ? /* @__PURE__ */ jsxRuntime.jsx(Pressable, { href: item.href, className: "block", children: card }, idx) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: card }, idx);
@@ -1025,15 +1038,53 @@ function HeroSplitIconCards({
1025
1038
  Section,
1026
1039
  {
1027
1040
  background,
1028
- spacing: verticalSpacing,
1041
+ spacing: verticalSpacing || spacing,
1029
1042
  pattern,
1030
1043
  patternOpacity,
1031
1044
  className: cn("overflow-hidden", className),
1045
+ containerClassName,
1032
1046
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 gap-10 lg:grid-cols-2 lg:items-center", children: [
1033
1047
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("space-y-6", contentClassName), children: children ? children : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1034
- eyebrow && (typeof eyebrow === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-xs font-semibold uppercase tracking-[0.25em]", getAccentColor(background)), children: eyebrow }) : eyebrow),
1035
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-3xl font-bold md:text-4xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-3xl font-bold md:text-4xl", headingClassName), children: heading })),
1036
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
1048
+ eyebrow && (typeof eyebrow === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1049
+ "p",
1050
+ {
1051
+ className: cn(
1052
+ "text-xs font-semibold uppercase tracking-[0.25em]",
1053
+ getAccentColor(background)
1054
+ ),
1055
+ children: eyebrow
1056
+ }
1057
+ ) : eyebrow),
1058
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1059
+ "h2",
1060
+ {
1061
+ className: cn(
1062
+ "text-3xl font-bold md:text-4xl",
1063
+ headingClassName
1064
+ ),
1065
+ children: heading
1066
+ }
1067
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
1068
+ "h2",
1069
+ {
1070
+ className: cn(
1071
+ "text-3xl font-bold md:text-4xl",
1072
+ headingClassName
1073
+ ),
1074
+ children: heading
1075
+ }
1076
+ )),
1077
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1078
+ "p",
1079
+ {
1080
+ className: cn(
1081
+ "text-lg",
1082
+ getTextColor(background, "muted"),
1083
+ descriptionClassName
1084
+ ),
1085
+ children: description
1086
+ }
1087
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
1037
1088
  renderActions
1038
1089
  ] }) }),
1039
1090
  renderCards
@@ -99,12 +99,18 @@ interface HeroSplitIconCardsProps {
99
99
  * Additional CSS classes for the description
100
100
  */
101
101
  descriptionClassName?: string;
102
+ /**
103
+ * Additional CSS classes for the container
104
+ */
105
+ containerClassName?: string;
106
+ /** Section spacing variant */
107
+ spacing?: SectionSpacing;
102
108
  }
103
109
  /**
104
110
  * HeroSplitIconCards - Two-column hero layout with text content on the left and
105
111
  * a stacked list of icon cards on the right. Ideal for service pages that need
106
112
  * an explanatory hero plus quick benefit callouts.
107
113
  */
108
- declare function HeroSplitIconCards({ eyebrow, heading, description, primaryCta, secondaryCta, actionsSlot, children, cardItems, cardsSlot, background, verticalSpacing, pattern, patternOpacity, className, contentClassName, headingClassName, descriptionClassName, }: HeroSplitIconCardsProps): React.JSX.Element;
114
+ declare function HeroSplitIconCards({ eyebrow, heading, description, primaryCta, secondaryCta, actionsSlot, children, cardItems, cardsSlot, background, pattern, patternOpacity, className, contentClassName, headingClassName, descriptionClassName, verticalSpacing, containerClassName, spacing, }: HeroSplitIconCardsProps): React.JSX.Element;
109
115
 
110
116
  export { HeroSplitIconCards, type HeroSplitIconCardsProps };
@@ -99,12 +99,18 @@ interface HeroSplitIconCardsProps {
99
99
  * Additional CSS classes for the description
100
100
  */
101
101
  descriptionClassName?: string;
102
+ /**
103
+ * Additional CSS classes for the container
104
+ */
105
+ containerClassName?: string;
106
+ /** Section spacing variant */
107
+ spacing?: SectionSpacing;
102
108
  }
103
109
  /**
104
110
  * HeroSplitIconCards - Two-column hero layout with text content on the left and
105
111
  * a stacked list of icon cards on the right. Ideal for service pages that need
106
112
  * an explanatory hero plus quick benefit callouts.
107
113
  */
108
- declare function HeroSplitIconCards({ eyebrow, heading, description, primaryCta, secondaryCta, actionsSlot, children, cardItems, cardsSlot, background, verticalSpacing, pattern, patternOpacity, className, contentClassName, headingClassName, descriptionClassName, }: HeroSplitIconCardsProps): React.JSX.Element;
114
+ declare function HeroSplitIconCards({ eyebrow, heading, description, primaryCta, secondaryCta, actionsSlot, children, cardItems, cardsSlot, background, pattern, patternOpacity, className, contentClassName, headingClassName, descriptionClassName, verticalSpacing, containerClassName, spacing, }: HeroSplitIconCardsProps): React.JSX.Element;
109
115
 
110
116
  export { HeroSplitIconCards, type HeroSplitIconCardsProps };
@@ -962,28 +962,22 @@ function HeroSplitIconCards({
962
962
  cardItems,
963
963
  cardsSlot,
964
964
  background,
965
- verticalSpacing,
966
965
  pattern,
967
966
  patternOpacity,
968
967
  className,
969
968
  contentClassName,
970
969
  headingClassName,
971
- descriptionClassName
970
+ descriptionClassName,
971
+ verticalSpacing,
972
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
973
+ spacing = "py-12 md:py-32"
972
974
  }) {
973
975
  const renderActions = useMemo(() => {
974
976
  if (actionsSlot) return actionsSlot;
975
977
  if (!primaryCta && !secondaryCta) return null;
976
978
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-4", children: [
977
979
  primaryCta && /* @__PURE__ */ jsx(Pressable, { href: primaryCta.href, size: "lg", variant: "default", children: primaryCta.label }),
978
- secondaryCta && /* @__PURE__ */ jsx(
979
- Pressable,
980
- {
981
- href: secondaryCta.href,
982
- size: "lg",
983
- variant: "outline",
984
- children: secondaryCta.label
985
- }
986
- )
980
+ secondaryCta && /* @__PURE__ */ jsx(Pressable, { href: secondaryCta.href, size: "lg", variant: "outline", children: secondaryCta.label })
987
981
  ] });
988
982
  }, [actionsSlot, primaryCta, secondaryCta]);
989
983
  const renderCards = useMemo(() => {
@@ -991,10 +985,29 @@ function HeroSplitIconCards({
991
985
  if (!cardItems || cardItems.length === 0) return null;
992
986
  return /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4", children: cardItems.map((item, idx) => {
993
987
  const card = /* @__PURE__ */ jsx(Card, { className: "h-full border-border/60 px-0 py-0", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-4 p-6", children: [
994
- /* @__PURE__ */ jsx("div", { className: cn("flex h-14 w-14 items-center justify-center rounded-xl", `${getAccentColor(background)}/10`, getAccentColor(background)), children: /* @__PURE__ */ jsx(DynamicIcon, { name: item.icon, size: 24 }) }),
988
+ /* @__PURE__ */ jsx(
989
+ "div",
990
+ {
991
+ className: cn(
992
+ "flex h-14 w-14 items-center justify-center rounded-xl",
993
+ `${getAccentColor(background)}/10`,
994
+ getAccentColor(background)
995
+ ),
996
+ children: /* @__PURE__ */ jsx(DynamicIcon, { name: item.icon, size: 24 })
997
+ }
998
+ ),
995
999
  /* @__PURE__ */ jsxs("div", { children: [
996
1000
  /* @__PURE__ */ jsx("h3", { className: "text-lg font-bold ", children: item.title }),
997
- item.subtitle ? /* @__PURE__ */ jsx("p", { className: cn("mt-2 text-sm", getTextColor(background, "muted")), children: item.subtitle }) : null
1001
+ item.subtitle ? /* @__PURE__ */ jsx(
1002
+ "p",
1003
+ {
1004
+ className: cn(
1005
+ "mt-2 text-sm",
1006
+ getTextColor(background, "muted")
1007
+ ),
1008
+ children: item.subtitle
1009
+ }
1010
+ ) : null
998
1011
  ] })
999
1012
  ] }) });
1000
1013
  return item.href ? /* @__PURE__ */ jsx(Pressable, { href: item.href, className: "block", children: card }, idx) : /* @__PURE__ */ jsx("div", { children: card }, idx);
@@ -1004,15 +1017,53 @@ function HeroSplitIconCards({
1004
1017
  Section,
1005
1018
  {
1006
1019
  background,
1007
- spacing: verticalSpacing,
1020
+ spacing: verticalSpacing || spacing,
1008
1021
  pattern,
1009
1022
  patternOpacity,
1010
1023
  className: cn("overflow-hidden", className),
1024
+ containerClassName,
1011
1025
  children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 gap-10 lg:grid-cols-2 lg:items-center", children: [
1012
1026
  /* @__PURE__ */ jsx("div", { className: cn("space-y-6", contentClassName), children: children ? children : /* @__PURE__ */ jsxs(Fragment, { children: [
1013
- eyebrow && (typeof eyebrow === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-xs font-semibold uppercase tracking-[0.25em]", getAccentColor(background)), children: eyebrow }) : eyebrow),
1014
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-bold md:text-4xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("h2", { className: cn("text-3xl font-bold md:text-4xl", headingClassName), children: heading })),
1015
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-lg", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
1027
+ eyebrow && (typeof eyebrow === "string" ? /* @__PURE__ */ jsx(
1028
+ "p",
1029
+ {
1030
+ className: cn(
1031
+ "text-xs font-semibold uppercase tracking-[0.25em]",
1032
+ getAccentColor(background)
1033
+ ),
1034
+ children: eyebrow
1035
+ }
1036
+ ) : eyebrow),
1037
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
1038
+ "h2",
1039
+ {
1040
+ className: cn(
1041
+ "text-3xl font-bold md:text-4xl",
1042
+ headingClassName
1043
+ ),
1044
+ children: heading
1045
+ }
1046
+ ) : /* @__PURE__ */ jsx(
1047
+ "h2",
1048
+ {
1049
+ className: cn(
1050
+ "text-3xl font-bold md:text-4xl",
1051
+ headingClassName
1052
+ ),
1053
+ children: heading
1054
+ }
1055
+ )),
1056
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
1057
+ "p",
1058
+ {
1059
+ className: cn(
1060
+ "text-lg",
1061
+ getTextColor(background, "muted"),
1062
+ descriptionClassName
1063
+ ),
1064
+ children: description
1065
+ }
1066
+ ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
1016
1067
  renderActions
1017
1068
  ] }) }),
1018
1069
  renderCards