@opensite/ui 1.7.0 → 1.7.2

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.
Files changed (33) hide show
  1. package/dist/hero-architecture-fullscreen.cjs +65 -29
  2. package/dist/hero-architecture-fullscreen.d.cts +8 -1
  3. package/dist/hero-architecture-fullscreen.d.ts +8 -1
  4. package/dist/hero-architecture-fullscreen.js +65 -29
  5. package/dist/hero-billing-platform-logos.cjs +5 -5
  6. package/dist/hero-billing-platform-logos.js +5 -5
  7. package/dist/hero-centered-gradient-cta.cjs +114 -31
  8. package/dist/hero-centered-gradient-cta.js +114 -31
  9. package/dist/hero-conversion-video-play.cjs +5 -5
  10. package/dist/hero-conversion-video-play.js +5 -5
  11. package/dist/hero-design-showcase-logos.cjs +4 -4
  12. package/dist/hero-design-showcase-logos.js +4 -4
  13. package/dist/hero-grid-pattern-solutions.cjs +4 -4
  14. package/dist/hero-grid-pattern-solutions.js +4 -4
  15. package/dist/hero-hiring-animated-text.cjs +87 -34
  16. package/dist/hero-hiring-animated-text.js +88 -35
  17. package/dist/hero-premium-split-avatars.cjs +1 -1
  18. package/dist/hero-premium-split-avatars.js +1 -1
  19. package/dist/hero-productivity-launcher-video.cjs +3 -3
  20. package/dist/hero-productivity-launcher-video.js +3 -3
  21. package/dist/hero-split-spiral-shapes.cjs +2 -2
  22. package/dist/hero-split-spiral-shapes.js +2 -2
  23. package/dist/hero-task-timer-animated.cjs +1 -1
  24. package/dist/hero-task-timer-animated.js +1 -1
  25. package/dist/hero-testimonial-image-grid.cjs +62 -56
  26. package/dist/hero-testimonial-image-grid.js +62 -56
  27. package/dist/hero-therapy-testimonial-grid.cjs +72 -17
  28. package/dist/hero-therapy-testimonial-grid.js +72 -17
  29. package/dist/process-roadmap-timeline.cjs +12 -8
  30. package/dist/process-roadmap-timeline.js +12 -8
  31. package/dist/registry.cjs +403 -200
  32. package/dist/registry.js +403 -200
  33. package/package.json +1 -1
@@ -6,6 +6,7 @@ var clsx = require('clsx');
6
6
  var tailwindMerge = require('tailwind-merge');
7
7
  var classVarianceAuthority = require('class-variance-authority');
8
8
  var jsxRuntime = require('react/jsx-runtime');
9
+ var img = require('@page-speed/img');
9
10
 
10
11
  function _interopNamespace(e) {
11
12
  if (e && e.__esModule) return e;
@@ -832,34 +833,34 @@ function HeroArchitectureFullscreen({
832
833
  actionSlot,
833
834
  backgroundImage,
834
835
  background,
835
- spacing = "py-32 md:py-32",
836
+ spacing = "py-0 md:py-0",
836
837
  pattern,
837
838
  patternOpacity,
838
839
  className,
839
- containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
840
+ containerClassName = "mx-0 min-h-screen h-full w-screen max-w-full relative z-10 px-0 sm:px-0 md:px-0 lg:px-0 flex items-end",
840
841
  taglineClassName,
841
842
  headingClassName,
842
- descriptionClassName
843
+ descriptionClassName,
844
+ optixFlowConfig
843
845
  }) {
844
846
  const renderAction = React.useMemo(() => {
845
847
  if (actionSlot) return actionSlot;
846
848
  if (!action) return null;
847
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
848
- return /* @__PURE__ */ jsxRuntime.jsx(
849
- Pressable,
850
- {
851
- asButton: true,
852
- className: actionClassName,
853
- ...pressableProps,
854
- children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
855
- icon,
856
- typeof label === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "group-hover:underline", children: label }) : label,
857
- iconAfter
858
- ] })
859
- }
860
- );
849
+ const {
850
+ label,
851
+ icon,
852
+ iconAfter,
853
+ children,
854
+ className: actionClassName,
855
+ ...pressableProps
856
+ } = action;
857
+ return /* @__PURE__ */ jsxRuntime.jsx(Pressable, { asButton: true, className: actionClassName, ...pressableProps, children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
858
+ icon,
859
+ typeof label === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "group-hover:underline", children: label }) : label,
860
+ iconAfter
861
+ ] }) });
861
862
  }, [actionSlot, action]);
862
- return /* @__PURE__ */ jsxRuntime.jsx(
863
+ return /* @__PURE__ */ jsxRuntime.jsxs(
863
864
  Section,
864
865
  {
865
866
  background,
@@ -867,21 +868,56 @@ function HeroArchitectureFullscreen({
867
868
  pattern,
868
869
  patternOpacity,
869
870
  className: cn(
870
- "relative flex items-center justify-center dark h-svh max-h-[1400px] w-full overflow-hidden bg-cover bg-center bg-no-repeat font-poppins after:absolute after:top-0 after:left-0 after:block after:h-full after:w-full after:bg-foreground/65 after:content-['']",
871
+ "relative flex min-h-screen min-w-screen items-center justify-center dark w-full overflow-hidden font-poppins",
871
872
  className
872
873
  ),
873
874
  containerClassName,
874
- style: { backgroundImage: backgroundImage ? `url('${backgroundImage}')` : void 0 },
875
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-20 h-full w-full max-w-340", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full w-full flex-col justify-end gap-12", children: [
876
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex max-w-245.5 flex-col gap-1", children: [
877
- tagline && (typeof tagline === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm leading-none uppercase text-muted-foreground", taglineClassName), children: tagline }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: taglineClassName, children: tagline })),
878
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("text-3xl leading-snug! md:text-4xl lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading }))
879
- ] }),
880
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full flex-col justify-between gap-5 sm:flex-row sm:items-center", children: [
881
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("max-w-81 border-l border-border pl-6 text-base text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
875
+ children: [
876
+ backgroundImage && /* @__PURE__ */ jsxRuntime.jsx(
877
+ img.Img,
878
+ {
879
+ src: backgroundImage,
880
+ alt: "",
881
+ className: "absolute inset-0 min-h-screen min-w-screen object-cover object-center brightness-50",
882
+ optixFlowConfig
883
+ }
884
+ ),
885
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-20 h-full w-full max-w-340 p-8 md:p-24", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col justify-end gap-6 md:gap-12", children: [
886
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
887
+ tagline && (typeof tagline === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
888
+ "p",
889
+ {
890
+ className: cn(
891
+ "text-sm leading-none uppercase text-balance text-white text-shadow-xl",
892
+ taglineClassName
893
+ ),
894
+ children: tagline
895
+ }
896
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: taglineClassName, children: tagline })),
897
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
898
+ "h1",
899
+ {
900
+ className: cn(
901
+ "text-3xl leading-snug! md:text-4xl lg:text-6xl text-white text-balance text-shadow-xl",
902
+ headingClassName
903
+ ),
904
+ children: heading
905
+ }
906
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading }))
907
+ ] }),
908
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col justify-between gap-5 sm:flex-row sm:items-center", children: description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
909
+ "p",
910
+ {
911
+ className: cn(
912
+ "text-base text-balance text-white text-shadow-xl",
913
+ descriptionClassName
914
+ ),
915
+ children: description
916
+ }
917
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })) }),
882
918
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: renderAction })
883
- ] })
884
- ] }) })
919
+ ] }) })
920
+ ]
885
921
  }
886
922
  );
887
923
  }
@@ -67,7 +67,14 @@ interface HeroArchitectureFullscreenProps {
67
67
  * Additional CSS classes for the description
68
68
  */
69
69
  descriptionClassName?: string;
70
+ /**
71
+ * Optional Optix Flow configuration for image optimization
72
+ */
73
+ optixFlowConfig?: {
74
+ apiKey: string;
75
+ compression?: number;
76
+ };
70
77
  }
71
- declare function HeroArchitectureFullscreen({ tagline, heading, description, action, actionSlot, backgroundImage, background, spacing, pattern, patternOpacity, className, containerClassName, taglineClassName, headingClassName, descriptionClassName, }: HeroArchitectureFullscreenProps): React.JSX.Element;
78
+ declare function HeroArchitectureFullscreen({ tagline, heading, description, action, actionSlot, backgroundImage, background, spacing, pattern, patternOpacity, className, containerClassName, taglineClassName, headingClassName, descriptionClassName, optixFlowConfig, }: HeroArchitectureFullscreenProps): React.JSX.Element;
72
79
 
73
80
  export { HeroArchitectureFullscreen, type HeroArchitectureFullscreenProps };
@@ -67,7 +67,14 @@ interface HeroArchitectureFullscreenProps {
67
67
  * Additional CSS classes for the description
68
68
  */
69
69
  descriptionClassName?: string;
70
+ /**
71
+ * Optional Optix Flow configuration for image optimization
72
+ */
73
+ optixFlowConfig?: {
74
+ apiKey: string;
75
+ compression?: number;
76
+ };
70
77
  }
71
- declare function HeroArchitectureFullscreen({ tagline, heading, description, action, actionSlot, backgroundImage, background, spacing, pattern, patternOpacity, className, containerClassName, taglineClassName, headingClassName, descriptionClassName, }: HeroArchitectureFullscreenProps): React.JSX.Element;
78
+ declare function HeroArchitectureFullscreen({ tagline, heading, description, action, actionSlot, backgroundImage, background, spacing, pattern, patternOpacity, className, containerClassName, taglineClassName, headingClassName, descriptionClassName, optixFlowConfig, }: HeroArchitectureFullscreenProps): React.JSX.Element;
72
79
 
73
80
  export { HeroArchitectureFullscreen, type HeroArchitectureFullscreenProps };
@@ -5,6 +5,7 @@ import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { cva } from 'class-variance-authority';
7
7
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
+ import { Img } from '@page-speed/img';
8
9
 
9
10
  // components/blocks/hero/hero-architecture-fullscreen.tsx
10
11
  function cn(...inputs) {
@@ -811,34 +812,34 @@ function HeroArchitectureFullscreen({
811
812
  actionSlot,
812
813
  backgroundImage,
813
814
  background,
814
- spacing = "py-32 md:py-32",
815
+ spacing = "py-0 md:py-0",
815
816
  pattern,
816
817
  patternOpacity,
817
818
  className,
818
- containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
819
+ containerClassName = "mx-0 min-h-screen h-full w-screen max-w-full relative z-10 px-0 sm:px-0 md:px-0 lg:px-0 flex items-end",
819
820
  taglineClassName,
820
821
  headingClassName,
821
- descriptionClassName
822
+ descriptionClassName,
823
+ optixFlowConfig
822
824
  }) {
823
825
  const renderAction = useMemo(() => {
824
826
  if (actionSlot) return actionSlot;
825
827
  if (!action) return null;
826
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
827
- return /* @__PURE__ */ jsx(
828
- Pressable,
829
- {
830
- asButton: true,
831
- className: actionClassName,
832
- ...pressableProps,
833
- children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
834
- icon,
835
- typeof label === "string" ? /* @__PURE__ */ jsx("p", { className: "group-hover:underline", children: label }) : label,
836
- iconAfter
837
- ] })
838
- }
839
- );
828
+ const {
829
+ label,
830
+ icon,
831
+ iconAfter,
832
+ children,
833
+ className: actionClassName,
834
+ ...pressableProps
835
+ } = action;
836
+ return /* @__PURE__ */ jsx(Pressable, { asButton: true, className: actionClassName, ...pressableProps, children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
837
+ icon,
838
+ typeof label === "string" ? /* @__PURE__ */ jsx("p", { className: "group-hover:underline", children: label }) : label,
839
+ iconAfter
840
+ ] }) });
840
841
  }, [actionSlot, action]);
841
- return /* @__PURE__ */ jsx(
842
+ return /* @__PURE__ */ jsxs(
842
843
  Section,
843
844
  {
844
845
  background,
@@ -846,21 +847,56 @@ function HeroArchitectureFullscreen({
846
847
  pattern,
847
848
  patternOpacity,
848
849
  className: cn(
849
- "relative flex items-center justify-center dark h-svh max-h-[1400px] w-full overflow-hidden bg-cover bg-center bg-no-repeat font-poppins after:absolute after:top-0 after:left-0 after:block after:h-full after:w-full after:bg-foreground/65 after:content-['']",
850
+ "relative flex min-h-screen min-w-screen items-center justify-center dark w-full overflow-hidden font-poppins",
850
851
  className
851
852
  ),
852
853
  containerClassName,
853
- style: { backgroundImage: backgroundImage ? `url('${backgroundImage}')` : void 0 },
854
- children: /* @__PURE__ */ jsx("div", { className: "relative z-20 h-full w-full max-w-340", children: /* @__PURE__ */ jsxs("div", { className: "flex h-full w-full flex-col justify-end gap-12", children: [
855
- /* @__PURE__ */ jsxs("div", { className: "flex max-w-245.5 flex-col gap-1", children: [
856
- tagline && (typeof tagline === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm leading-none uppercase text-muted-foreground", taglineClassName), children: tagline }) : /* @__PURE__ */ jsx("div", { className: taglineClassName, children: tagline })),
857
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("text-3xl leading-snug! md:text-4xl lg:text-6xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading }))
858
- ] }),
859
- /* @__PURE__ */ jsxs("div", { className: "flex w-full flex-col justify-between gap-5 sm:flex-row sm:items-center", children: [
860
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("max-w-81 border-l border-border pl-6 text-base text-muted-foreground", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
854
+ children: [
855
+ backgroundImage && /* @__PURE__ */ jsx(
856
+ Img,
857
+ {
858
+ src: backgroundImage,
859
+ alt: "",
860
+ className: "absolute inset-0 min-h-screen min-w-screen object-cover object-center brightness-50",
861
+ optixFlowConfig
862
+ }
863
+ ),
864
+ /* @__PURE__ */ jsx("div", { className: "relative z-20 h-full w-full max-w-340 p-8 md:p-24", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col justify-end gap-6 md:gap-12", children: [
865
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
866
+ tagline && (typeof tagline === "string" ? /* @__PURE__ */ jsx(
867
+ "p",
868
+ {
869
+ className: cn(
870
+ "text-sm leading-none uppercase text-balance text-white text-shadow-xl",
871
+ taglineClassName
872
+ ),
873
+ children: tagline
874
+ }
875
+ ) : /* @__PURE__ */ jsx("div", { className: taglineClassName, children: tagline })),
876
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
877
+ "h1",
878
+ {
879
+ className: cn(
880
+ "text-3xl leading-snug! md:text-4xl lg:text-6xl text-white text-balance text-shadow-xl",
881
+ headingClassName
882
+ ),
883
+ children: heading
884
+ }
885
+ ) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading }))
886
+ ] }),
887
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col justify-between gap-5 sm:flex-row sm:items-center", children: description && (typeof description === "string" ? /* @__PURE__ */ jsx(
888
+ "p",
889
+ {
890
+ className: cn(
891
+ "text-base text-balance text-white text-shadow-xl",
892
+ descriptionClassName
893
+ ),
894
+ children: description
895
+ }
896
+ ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })) }),
861
897
  /* @__PURE__ */ jsx("div", { className: "shrink-0", children: renderAction })
862
- ] })
863
- ] }) })
898
+ ] }) })
899
+ ]
864
900
  }
865
901
  );
866
902
  }
@@ -972,7 +972,7 @@ function HeroBillingPlatformLogos({
972
972
  logos,
973
973
  logosSlot,
974
974
  background,
975
- spacing = "py-32 md:py-32",
975
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
976
976
  pattern,
977
977
  patternOpacity,
978
978
  className,
@@ -1046,15 +1046,15 @@ function HeroBillingPlatformLogos({
1046
1046
  "div",
1047
1047
  {
1048
1048
  className: cn(
1049
- "flex flex-col items-center gap-4 lg:flex-row",
1049
+ "flex flex-col items-start md:items-center gap-4 lg:flex-row",
1050
1050
  actionsClassName
1051
1051
  ),
1052
1052
  children: renderActions
1053
1053
  }
1054
1054
  ) })
1055
1055
  ] }) }),
1056
- imagesSlot ? imagesSlot : mainImage ? /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative mr-auto ml-auto aspect-[1.28581291/1] w-full max-w-149 lg:mr-0 lg:ml-auto", children: [
1057
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative mx-auto aspect-[1.020365896/1] h-full w-[79.35%] max-w-118.25 overflow-hidden rounded-3xl", children: /* @__PURE__ */ jsxRuntime.jsx(
1056
+ imagesSlot ? imagesSlot : mainImage ? /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative mr-auto ml-auto md:aspect-[1.28581291/1] w-full max-w-full md:max-w-149 lg:mr-0 lg:ml-auto", children: [
1057
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative mx-auto md:aspect-[1.020365896/1] h-full w-full md:w-[79.35%] max-w-full md:max-w-118.25 overflow-hidden rounded-3xl", children: /* @__PURE__ */ jsxRuntime.jsx(
1058
1058
  img.Img,
1059
1059
  {
1060
1060
  src: mainImage.src,
@@ -1108,7 +1108,7 @@ function HeroBillingPlatformLogos({
1108
1108
  "div",
1109
1109
  {
1110
1110
  className: cn(
1111
- "flex flex-col items-center justify-center gap-8 pt-28",
1111
+ "flex flex-col items-center justify-center gap-8 pt-8 md:pt-28",
1112
1112
  logosClassName
1113
1113
  ),
1114
1114
  children: [
@@ -947,7 +947,7 @@ function HeroBillingPlatformLogos({
947
947
  logos,
948
948
  logosSlot,
949
949
  background,
950
- spacing = "py-32 md:py-32",
950
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
951
951
  pattern,
952
952
  patternOpacity,
953
953
  className,
@@ -1021,15 +1021,15 @@ function HeroBillingPlatformLogos({
1021
1021
  "div",
1022
1022
  {
1023
1023
  className: cn(
1024
- "flex flex-col items-center gap-4 lg:flex-row",
1024
+ "flex flex-col items-start md:items-center gap-4 lg:flex-row",
1025
1025
  actionsClassName
1026
1026
  ),
1027
1027
  children: renderActions
1028
1028
  }
1029
1029
  ) })
1030
1030
  ] }) }),
1031
- imagesSlot ? imagesSlot : mainImage ? /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs("div", { className: "relative mr-auto ml-auto aspect-[1.28581291/1] w-full max-w-149 lg:mr-0 lg:ml-auto", children: [
1032
- /* @__PURE__ */ jsx("div", { className: "relative mx-auto aspect-[1.020365896/1] h-full w-[79.35%] max-w-118.25 overflow-hidden rounded-3xl", children: /* @__PURE__ */ jsx(
1031
+ imagesSlot ? imagesSlot : mainImage ? /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs("div", { className: "relative mr-auto ml-auto md:aspect-[1.28581291/1] w-full max-w-full md:max-w-149 lg:mr-0 lg:ml-auto", children: [
1032
+ /* @__PURE__ */ jsx("div", { className: "relative mx-auto md:aspect-[1.020365896/1] h-full w-full md:w-[79.35%] max-w-full md:max-w-118.25 overflow-hidden rounded-3xl", children: /* @__PURE__ */ jsx(
1033
1033
  Img,
1034
1034
  {
1035
1035
  src: mainImage.src,
@@ -1083,7 +1083,7 @@ function HeroBillingPlatformLogos({
1083
1083
  "div",
1084
1084
  {
1085
1085
  className: cn(
1086
- "flex flex-col items-center justify-center gap-8 pt-28",
1086
+ "flex flex-col items-center justify-center gap-8 pt-8 md:pt-28",
1087
1087
  logosClassName
1088
1088
  ),
1089
1089
  children: [
@@ -6,6 +6,7 @@ var clsx = require('clsx');
6
6
  var tailwindMerge = require('tailwind-merge');
7
7
  var classVarianceAuthority = require('class-variance-authority');
8
8
  var jsxRuntime = require('react/jsx-runtime');
9
+ var reactSlot = require('@radix-ui/react-slot');
9
10
 
10
11
  function _interopNamespace(e) {
11
12
  if (e && e.__esModule) return e;
@@ -824,6 +825,38 @@ var Section = React__namespace.default.forwardRef(
824
825
  }
825
826
  );
826
827
  Section.displayName = "Section";
828
+ var badgeVariants = classVarianceAuthority.cva(
829
+ "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",
830
+ {
831
+ variants: {
832
+ variant: {
833
+ default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
834
+ secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
835
+ destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
836
+ outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
837
+ }
838
+ },
839
+ defaultVariants: {
840
+ variant: "default"
841
+ }
842
+ }
843
+ );
844
+ function Badge({
845
+ className,
846
+ variant,
847
+ asChild = false,
848
+ ...props
849
+ }) {
850
+ const Comp = asChild ? reactSlot.Slot : "span";
851
+ return /* @__PURE__ */ jsxRuntime.jsx(
852
+ Comp,
853
+ {
854
+ "data-slot": "badge",
855
+ className: cn(badgeVariants({ variant }), className),
856
+ ...props
857
+ }
858
+ );
859
+ }
827
860
  function HeroCenteredGradientCta({
828
861
  badge,
829
862
  badgeIcon,
@@ -835,7 +868,7 @@ function HeroCenteredGradientCta({
835
868
  features,
836
869
  featuresSlot,
837
870
  background,
838
- spacing = "py-32 md:py-32",
871
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
839
872
  pattern,
840
873
  patternOpacity,
841
874
  className,
@@ -850,8 +883,15 @@ function HeroCenteredGradientCta({
850
883
  const renderActions = React.useMemo(() => {
851
884
  if (actionsSlot) return actionsSlot;
852
885
  if (!actions || actions.length === 0) return null;
853
- return actions.map((action, index) => {
854
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
886
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col items-start mt-6 md:mt-8 gap-4 sm:flex-row sm:items-center", children: actions.map((action, index) => {
887
+ const {
888
+ label,
889
+ icon,
890
+ iconAfter,
891
+ children,
892
+ className: actionClassName,
893
+ ...pressableProps
894
+ } = action;
855
895
  return /* @__PURE__ */ jsxRuntime.jsx(
856
896
  Pressable,
857
897
  {
@@ -860,51 +900,94 @@ function HeroCenteredGradientCta({
860
900
  ...pressableProps,
861
901
  children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
862
902
  icon,
863
- label,
903
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: label }),
864
904
  iconAfter
865
905
  ] })
866
906
  },
867
907
  index
868
908
  );
869
- });
909
+ }) });
870
910
  }, [actionsSlot, actions]);
871
911
  const renderFeatures = React.useMemo(() => {
872
912
  if (featuresSlot) return featuresSlot;
873
913
  if (!features || features.length === 0) return null;
874
- return features.map((feature, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-2", feature.className), children: [
875
- feature.icon,
876
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: feature.title })
877
- ] }, index));
914
+ return features.map((feature, index) => /* @__PURE__ */ jsxRuntime.jsxs(
915
+ Pressable,
916
+ {
917
+ href: feature.href,
918
+ className: cn("flex items-center gap-2", feature.className),
919
+ children: [
920
+ feature.icon,
921
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: feature.title })
922
+ ]
923
+ },
924
+ index
925
+ ));
878
926
  }, [featuresSlot, features]);
879
- return /* @__PURE__ */ jsxRuntime.jsxs(
927
+ return /* @__PURE__ */ jsxRuntime.jsx(
880
928
  Section,
881
929
  {
882
930
  background,
883
931
  spacing,
884
932
  pattern,
885
933
  patternOpacity,
886
- className: cn("relative flex items-center justify-center min-h-screen overflow-hidden bg-background py-32", className),
934
+ className,
887
935
  containerClassName,
888
- children: [
889
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("pointer-events-none absolute inset-0 bg-[radial-gradient(ellipse_80%_50%_at_50%_-20%,rgba(120,119,198,0.3),transparent)]", gradientClassName) }),
890
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative z-10 flex flex-col items-center text-center", children: [
891
- badge && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(
892
- "inline-flex items-center gap-2 rounded-full border border-border/50 bg-accent px-4 py-2 text-sm",
893
- badgeClassName
894
- ), children: [
895
- badgeIcon,
896
- typeof badge === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { children: badge }) : badge
897
- ] }),
898
- (heading || headingHighlight) && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("mt-8 max-w-4xl text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl", headingClassName), children: heading }) : heading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading }) : headingHighlight ? /* @__PURE__ */ jsxRuntime.jsxs("h1", { className: cn("mt-8 max-w-4xl text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl", headingClassName), children: [
899
- "Build something",
900
- " ",
901
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "bg-linear-to-r from-primary to-purple-600 bg-clip-text text-transparent", children: headingHighlight })
902
- ] }) : null),
903
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-6 max-w-2xl text-lg text-muted-foreground md:text-xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
904
- (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-10 flex flex-col gap-4 sm:flex-row", actionsClassName), children: renderActions }),
905
- (featuresSlot || features && features.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-16 flex items-center gap-8 text-sm text-muted-foreground", featuresClassName), children: renderFeatures })
906
- ] })
907
- ]
936
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative gap-6 z-10 flex flex-col items-center text-center", children: [
937
+ badge && /* @__PURE__ */ jsxRuntime.jsxs(Badge, { className: "px-3", children: [
938
+ badgeIcon,
939
+ typeof badge === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { children: badge }) : badge
940
+ ] }),
941
+ (heading || headingHighlight) && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
942
+ "h1",
943
+ {
944
+ className: cn(
945
+ "max-w-full md:max-w-md text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl text-balance",
946
+ headingClassName
947
+ ),
948
+ children: heading
949
+ }
950
+ ) : heading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading }) : headingHighlight ? /* @__PURE__ */ jsxRuntime.jsx(
951
+ "h1",
952
+ {
953
+ className: cn(
954
+ "max-w-full md:max-w-md text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl text-balance",
955
+ headingClassName
956
+ ),
957
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "bg-linear-to-r from-primary to-purple-600 bg-clip-text text-transparent", children: headingHighlight })
958
+ }
959
+ ) : null),
960
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
961
+ "p",
962
+ {
963
+ className: cn(
964
+ "max-w-full md:max-w-md text-md md:text-xl text-balance",
965
+ descriptionClassName
966
+ ),
967
+ children: description
968
+ }
969
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
970
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx(
971
+ "div",
972
+ {
973
+ className: cn(
974
+ "mt-0 md:mt-6 flex flex-col gap-4 sm:flex-row",
975
+ actionsClassName
976
+ ),
977
+ children: renderActions
978
+ }
979
+ ),
980
+ (featuresSlot || features && features.length > 0) && /* @__PURE__ */ jsxRuntime.jsx(
981
+ "div",
982
+ {
983
+ className: cn(
984
+ "mt-4 md:mt-6 flex flex-col md:flex-row items-center gap-4 md:gap-8 text-sm",
985
+ featuresClassName
986
+ ),
987
+ children: renderFeatures
988
+ }
989
+ )
990
+ ] })
908
991
  }
909
992
  );
910
993
  }