@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
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import * as React from 'react';
3
- import React__default, { useMemo } from 'react';
3
+ import React__default, { useState, useCallback, useEffect, useMemo } from 'react';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { cva } from 'class-variance-authority';
@@ -814,7 +814,7 @@ function HeroHiringAnimatedText({
814
814
  scrollActionSlot,
815
815
  backgroundImage,
816
816
  background,
817
- spacing = "py-32 md:py-32",
817
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
818
818
  pattern,
819
819
  patternOpacity,
820
820
  className,
@@ -824,32 +824,60 @@ function HeroHiringAnimatedText({
824
824
  descriptionClassName,
825
825
  actionsClassName
826
826
  }) {
827
+ const [activeIndex, setActiveIndex] = useState(0);
828
+ const cycleText = useCallback(() => {
829
+ if (!animatedTexts || animatedTexts.length <= 1) return;
830
+ setActiveIndex((prev) => (prev + 1) % animatedTexts.length);
831
+ }, [animatedTexts]);
832
+ useEffect(() => {
833
+ if (!animatedTexts || animatedTexts.length <= 1) return;
834
+ const interval = setInterval(cycleText, 2e3);
835
+ return () => clearInterval(interval);
836
+ }, [animatedTexts, cycleText]);
827
837
  const renderHeading = useMemo(() => {
828
838
  if (headingSlot) return headingSlot;
829
- return /* @__PURE__ */ jsxs("h1", { className: cn("text-4xl leading-9 font-bold lg:text-5xl lg:leading-12! xl:text-7xl xl:leading-22!", headingClassName), children: [
830
- /* @__PURE__ */ jsx("div", { className: "mb-2", children: headingPrefix }),
831
- animatedTexts && animatedTexts.length > 0 && /* @__PURE__ */ jsx("div", { className: "relative h-[calc(2.25rem*3)] md:h-9 lg:h-12 xl:h-22", children: animatedTexts.map((text, index) => /* @__PURE__ */ jsx(
832
- "div",
833
- {
834
- className: cn(
835
- "absolute top-0 left-0 will-change-[opacity]",
836
- index === 0 ? `animate-[show-text_${animatedTexts.length * 2}s_ease-in-out_infinite_0s]` : `animate-[show-text_${animatedTexts.length * 2}s_ease-in-out_infinite_${index * 2}s] opacity-0`
837
- ),
838
- style: {
839
- animation: `show-text ${animatedTexts.length * 2}s ease-in-out infinite ${index * 2}s`,
840
- opacity: index === 0 ? 1 : 0
841
- },
842
- children: text
843
- },
844
- index
845
- )) })
846
- ] });
847
- }, [headingSlot, headingPrefix, animatedTexts, headingClassName]);
839
+ return /* @__PURE__ */ jsxs(
840
+ "h1",
841
+ {
842
+ className: cn(
843
+ "text-4xl leading-9 font-bold lg:text-5xl lg:leading-12! xl:text-7xl xl:leading-22! text-white text-shadow-xl",
844
+ headingClassName
845
+ ),
846
+ children: [
847
+ /* @__PURE__ */ jsx("div", { className: "mb-2", children: headingPrefix }),
848
+ animatedTexts && animatedTexts.length > 0 && /* @__PURE__ */ jsx("div", { className: "relative h-9 lg:h-12 xl:h-22", children: animatedTexts.map((text, index) => /* @__PURE__ */ jsx(
849
+ "div",
850
+ {
851
+ className: "absolute top-0 left-0 text-white transition-opacity duration-1000 ease-in-out",
852
+ style: {
853
+ opacity: index === activeIndex ? 1 : 0
854
+ },
855
+ children: text
856
+ },
857
+ index
858
+ )) })
859
+ ]
860
+ }
861
+ );
862
+ }, [
863
+ headingSlot,
864
+ headingPrefix,
865
+ animatedTexts,
866
+ headingClassName,
867
+ activeIndex
868
+ ]);
848
869
  const renderActions = useMemo(() => {
849
870
  if (actionsSlot) return actionsSlot;
850
871
  if (!actions || actions.length === 0) return null;
851
- return /* @__PURE__ */ jsx("div", { className: cn("flex flex-wrap items-center gap-5", actionsClassName), children: actions.map((action, index) => {
852
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
872
+ return /* @__PURE__ */ jsx("div", { className: cn("flex flex-col md:flex-row gap-4", actionsClassName), children: actions.map((action, index) => {
873
+ const {
874
+ label,
875
+ icon,
876
+ iconAfter,
877
+ children,
878
+ className: actionClassName,
879
+ ...pressableProps
880
+ } = action;
853
881
  return /* @__PURE__ */ jsx(
854
882
  Pressable,
855
883
  {
@@ -869,7 +897,14 @@ function HeroHiringAnimatedText({
869
897
  const renderScrollAction = useMemo(() => {
870
898
  if (scrollActionSlot) return scrollActionSlot;
871
899
  if (!scrollAction) return null;
872
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = scrollAction;
900
+ const {
901
+ label,
902
+ icon,
903
+ iconAfter,
904
+ children,
905
+ className: actionClassName,
906
+ ...pressableProps
907
+ } = scrollAction;
873
908
  return /* @__PURE__ */ jsx(Pressable, { asButton: true, className: actionClassName, ...pressableProps, children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
874
909
  icon,
875
910
  /* @__PURE__ */ jsx("div", { children: label }),
@@ -884,21 +919,39 @@ function HeroHiringAnimatedText({
884
919
  pattern,
885
920
  patternOpacity,
886
921
  className: cn(
887
- "relative flex items-center justify-center dark h-svh max-h-[1400px] w-full bg-cover bg-position-[100%] bg-no-repeat before:absolute before:top-0 before:left-0 before:size-full before:bg-[radial-gradient(circle_at_100%_-100%,transparent_40%,rgba(0,0,0,.75)_85%)] before:content-['']",
922
+ "relative flex items-center justify-center h-svh max-h-[1400px] w-full bg-cover bg-position-[100%] bg-no-repeat before:absolute before:top-0 before:left-0 before:size-full before:bg-[radial-gradient(circle_at_100%_-100%,transparent_40%,rgba(0,0,0,.75)_85%)] before:content-['']",
888
923
  className
889
924
  ),
890
925
  containerClassName,
891
926
  style: { backgroundImage: `url('${backgroundImage}')` },
892
- children: /* @__PURE__ */ jsx("div", { className: "relative z-10 flex size-full max-w-412.5 flex-col justify-between pt-24 pb-14 md:justify-end", children: /* @__PURE__ */ jsxs("div", { className: cn("flex h-full flex-col justify-between gap-6 md:justify-end", contentClassName), children: [
893
- renderHeading,
894
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-8", children: [
895
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-lg lg:text-2xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
896
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-5", children: [
897
- renderActions,
898
- renderScrollAction
899
- ] })
900
- ] })
901
- ] }) })
927
+ children: /* @__PURE__ */ jsx("div", { className: "relative z-10 flex size-full max-w-412.5 flex-col justify-between pt-24 pb-14 md:justify-end", children: /* @__PURE__ */ jsxs(
928
+ "div",
929
+ {
930
+ className: cn(
931
+ "flex h-full flex-col justify-between gap-6 md:justify-end max-w-full md:max-w-md",
932
+ contentClassName
933
+ ),
934
+ children: [
935
+ renderHeading,
936
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-8", children: [
937
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
938
+ "p",
939
+ {
940
+ className: cn(
941
+ "text-lg lg:text-2xl text-white text-balance",
942
+ descriptionClassName
943
+ ),
944
+ children: description
945
+ }
946
+ ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
947
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4", children: [
948
+ renderActions,
949
+ renderScrollAction
950
+ ] })
951
+ ] })
952
+ ]
953
+ }
954
+ ) })
902
955
  }
903
956
  );
904
957
  }
@@ -886,7 +886,7 @@ function HeroPremiumSplitAvatars({
886
886
  image,
887
887
  imageSlot,
888
888
  background,
889
- spacing = "py-32 md:py-32",
889
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
890
890
  pattern,
891
891
  patternOpacity,
892
892
  className,
@@ -864,7 +864,7 @@ function HeroPremiumSplitAvatars({
864
864
  image,
865
865
  imageSlot,
866
866
  background,
867
- spacing = "py-32 md:py-32",
867
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
868
868
  pattern,
869
869
  patternOpacity,
870
870
  className,
@@ -846,7 +846,7 @@ function HeroProductivityLauncherVideo({
846
846
  const renderActions = React.useMemo(() => {
847
847
  if (actionsSlot) return actionsSlot;
848
848
  if (!actions || actions.length === 0) return null;
849
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center justify-center gap-4", children: actions.map((action, index) => {
849
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col md:flex-row items-center justify-center gap-4", children: actions.map((action, index) => {
850
850
  const {
851
851
  label,
852
852
  icon,
@@ -904,8 +904,8 @@ function HeroProductivityLauncherVideo({
904
904
  className,
905
905
  containerClassName,
906
906
  children: [
907
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("relative z-20 max-w-204.5", contentClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center", children: [
908
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-8 px-4 pt-52 pb-32 md:pb-52", children: [
907
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("relative z-20 max-w-204.5", contentClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center pb-8", children: [
908
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-8 pb-16 pt-16", children: [
909
909
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-100 sm:max-w-135", children: heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
910
910
  "h1",
911
911
  {
@@ -825,7 +825,7 @@ function HeroProductivityLauncherVideo({
825
825
  const renderActions = useMemo(() => {
826
826
  if (actionsSlot) return actionsSlot;
827
827
  if (!actions || actions.length === 0) return null;
828
- return /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center justify-center gap-4", children: actions.map((action, index) => {
828
+ return /* @__PURE__ */ jsx("div", { className: "flex flex-col md:flex-row items-center justify-center gap-4", children: actions.map((action, index) => {
829
829
  const {
830
830
  label,
831
831
  icon,
@@ -883,8 +883,8 @@ function HeroProductivityLauncherVideo({
883
883
  className,
884
884
  containerClassName,
885
885
  children: [
886
- /* @__PURE__ */ jsx("div", { className: cn("relative z-20 max-w-204.5", contentClassName), children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center", children: [
887
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-8 px-4 pt-52 pb-32 md:pb-52", children: [
886
+ /* @__PURE__ */ jsx("div", { className: cn("relative z-20 max-w-204.5", contentClassName), children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center pb-8", children: [
887
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-8 pb-16 pt-16", children: [
888
888
  /* @__PURE__ */ jsx("div", { className: "max-w-100 sm:max-w-135", children: heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
889
889
  "h1",
890
890
  {
@@ -929,7 +929,7 @@ function HeroSplitSpiralShapes({
929
929
  optixFlowConfig
930
930
  }
931
931
  ) }) }),
932
- images[1] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-lg shadow-xl md:absolute md:top-[12%] md:right-[5%] md:w-[35%]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-square", children: /* @__PURE__ */ jsxRuntime.jsx(
932
+ images[1] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-lg shadow-xl md:absolute md:top-[12%] md:right-[5%] md:w-[35%]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-5/6", children: /* @__PURE__ */ jsxRuntime.jsx(
933
933
  img.Img,
934
934
  {
935
935
  src: images[1].src,
@@ -941,7 +941,7 @@ function HeroSplitSpiralShapes({
941
941
  optixFlowConfig
942
942
  }
943
943
  ) }) }),
944
- images[2] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-lg shadow-xl md:absolute md:right-[10%] md:bottom-[15%] md:w-[55%]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-video", children: /* @__PURE__ */ jsxRuntime.jsx(
944
+ images[2] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-lg shadow-xl md:absolute md:right-[10%] md:bottom-[15%] md:w-[55%]", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-5/6", children: /* @__PURE__ */ jsxRuntime.jsx(
945
945
  img.Img,
946
946
  {
947
947
  src: images[2].src,
@@ -908,7 +908,7 @@ function HeroSplitSpiralShapes({
908
908
  optixFlowConfig
909
909
  }
910
910
  ) }) }),
911
- images[1] && /* @__PURE__ */ jsx("div", { className: "overflow-hidden rounded-lg shadow-xl md:absolute md:top-[12%] md:right-[5%] md:w-[35%]", children: /* @__PURE__ */ jsx("div", { className: "aspect-square", children: /* @__PURE__ */ jsx(
911
+ images[1] && /* @__PURE__ */ jsx("div", { className: "overflow-hidden rounded-lg shadow-xl md:absolute md:top-[12%] md:right-[5%] md:w-[35%]", children: /* @__PURE__ */ jsx("div", { className: "aspect-5/6", children: /* @__PURE__ */ jsx(
912
912
  Img,
913
913
  {
914
914
  src: images[1].src,
@@ -920,7 +920,7 @@ function HeroSplitSpiralShapes({
920
920
  optixFlowConfig
921
921
  }
922
922
  ) }) }),
923
- images[2] && /* @__PURE__ */ jsx("div", { className: "overflow-hidden rounded-lg shadow-xl md:absolute md:right-[10%] md:bottom-[15%] md:w-[55%]", children: /* @__PURE__ */ jsx("div", { className: "aspect-video", children: /* @__PURE__ */ jsx(
923
+ images[2] && /* @__PURE__ */ jsx("div", { className: "overflow-hidden rounded-lg shadow-xl md:absolute md:right-[10%] md:bottom-[15%] md:w-[55%]", children: /* @__PURE__ */ jsx("div", { className: "aspect-5/6", children: /* @__PURE__ */ jsx(
924
924
  Img,
925
925
  {
926
926
  src: images[2].src,
@@ -841,7 +841,7 @@ function HeroTaskTimerAnimated({
841
841
  images,
842
842
  imagesSlot,
843
843
  background,
844
- spacing = "py-32 md:py-32",
844
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
845
845
  pattern,
846
846
  patternOpacity,
847
847
  className,
@@ -819,7 +819,7 @@ function HeroTaskTimerAnimated({
819
819
  images,
820
820
  imagesSlot,
821
821
  background,
822
- spacing = "py-32 md:py-32",
822
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
823
823
  pattern,
824
824
  patternOpacity,
825
825
  className,
@@ -907,29 +907,21 @@ function HeroTestimonialImageGrid({
907
907
  if (testimonialSlot) return testimonialSlot;
908
908
  if (!testimonial || !testimonial.avatars) return null;
909
909
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
910
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex -space-x-2", children: testimonial.avatars.map((avatar, index) => /* @__PURE__ */ jsxRuntime.jsxs(
911
- Avatar,
912
- {
913
- className: "size-10 border-2 border-border",
914
- children: [
915
- /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatar.image, alt: "" }),
916
- /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: avatar.fallback })
917
- ]
918
- },
919
- index
920
- )) }),
910
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex -space-x-2", children: testimonial.avatars.map((avatar, index) => /* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "size-10 border-2 border-border", children: [
911
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: avatar.image, alt: testimonial.author }),
912
+ /* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: avatar.fallback })
913
+ ] }, index)) }),
921
914
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
922
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mb-1 text-sm text-foreground/60 italic", children: [
915
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mb-1 text-sm italic", children: [
923
916
  '"',
924
917
  testimonial.quote,
925
918
  '"'
926
919
  ] }),
927
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm font-medium text-foreground/60", children: [
920
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm font-medium ", children: [
928
921
  testimonial.author,
929
922
  ", ",
930
923
  testimonial.role,
931
- " @",
932
- testimonial.company
924
+ testimonial.company?.length ? ` | ${testimonial.company}` : ""
933
925
  ] })
934
926
  ] })
935
927
  ] });
@@ -938,44 +930,22 @@ function HeroTestimonialImageGrid({
938
930
  if (imagesSlot) return imagesSlot;
939
931
  if (!gridImages || gridImages.length < 4) return null;
940
932
  const images = gridImages;
941
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full flex-1", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full max-w-200", children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 1 / 1, className: "h-full w-full", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid h-full w-full grid-cols-2 grid-rows-2 gap-[3.5%]", children: [
942
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-[5.2%] border border-border bg-card", children: /* @__PURE__ */ jsxRuntime.jsx(
943
- img.Img,
944
- {
945
- src: images[0].src,
946
- alt: images[0].alt || "",
947
- className: "object-fit h-full w-full object-center",
948
- optixFlowConfig
949
- }
950
- ) }),
951
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative overflow-hidden rounded-[5.2%] border border-border bg-card", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/2 left-[5%] w-[110%] max-w-100 -translate-y-1/2 overflow-hidden rounded-md", children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 1.739130435 / 1, children: /* @__PURE__ */ jsxRuntime.jsx(
952
- img.Img,
953
- {
954
- src: images[1].src,
955
- alt: images[1].alt || "",
956
- className: "size-full object-cover object-center",
957
- optixFlowConfig
958
- }
959
- ) }) }) }),
960
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative overflow-hidden rounded-[5.2%] border border-border bg-card", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-[9%] left-[9%] w-[200%] max-w-150 overflow-hidden rounded-md", children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 1.6 / 1, children: /* @__PURE__ */ jsxRuntime.jsx(
961
- img.Img,
962
- {
963
- src: images[2].src,
964
- alt: images[2].alt || "",
965
- className: "size-full object-cover object-center",
966
- optixFlowConfig
967
- }
968
- ) }) }) }),
969
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative overflow-hidden rounded-[5.2%] border border-border bg-card", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative top-[12%] left-[50%] w-[70%] max-w-70 -translate-x-[50%]", children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 0.52 / 1, children: /* @__PURE__ */ jsxRuntime.jsx(
970
- img.Img,
971
- {
972
- src: images[3].src,
973
- alt: images[3].alt || "",
974
- className: "absolute z-10 w-full rounded-[16%]",
975
- optixFlowConfig
976
- }
977
- ) }) }) })
978
- ] }) }) }) });
933
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full flex-1", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full max-w-full md:max-w-200", children: /* @__PURE__ */ jsxRuntime.jsx(AspectRatio, { ratio: 1 / 1, className: "h-full w-full", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid h-full w-full grid-cols-2 grid-rows-2 gap-4", children: images.slice(0, 4).map((image, index) => /* @__PURE__ */ jsxRuntime.jsx(
934
+ "div",
935
+ {
936
+ className: "overflow-hidden rounded-lg shadow-xl",
937
+ children: /* @__PURE__ */ jsxRuntime.jsx(
938
+ img.Img,
939
+ {
940
+ src: image.src,
941
+ alt: image.alt || "",
942
+ className: "size-full object-cover object-center",
943
+ optixFlowConfig
944
+ }
945
+ )
946
+ },
947
+ index
948
+ )) }) }) }) });
979
949
  }, [imagesSlot, gridImages, optixFlowConfig]);
980
950
  return /* @__PURE__ */ jsxRuntime.jsx(
981
951
  Section,
@@ -984,13 +954,49 @@ function HeroTestimonialImageGrid({
984
954
  spacing,
985
955
  pattern,
986
956
  patternOpacity,
987
- className: cn("relative flex items-center justify-center py-12 md:py-20", className),
957
+ className,
988
958
  containerClassName,
989
959
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-8 md:flex-row", children: [
990
960
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
991
961
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 lg:gap-8", children: [
992
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("leading-tighter max-w-[80%] text-4xl font-semibold tracking-tight lg:text-5xl xl:text-7xl", headingClassName), children: heading }) : /* @__PURE__ */ jsxRuntime.jsx("h1", { className: cn("leading-tighter max-w-[80%] text-4xl font-semibold tracking-tight lg:text-5xl xl:text-7xl", headingClassName), children: heading })),
993
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg leading-relaxed text-muted-foreground xl:text-2xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-lg leading-relaxed text-muted-foreground xl:text-2xl", descriptionClassName), children: description }))
962
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
963
+ "h1",
964
+ {
965
+ className: cn(
966
+ "leading-tighter max-w-[80%] text-4xl font-semibold tracking-tight lg:text-5xl xl:text-7xl",
967
+ headingClassName
968
+ ),
969
+ children: heading
970
+ }
971
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
972
+ "h1",
973
+ {
974
+ className: cn(
975
+ "leading-tighter max-w-[80%] text-4xl font-semibold tracking-tight lg:text-5xl xl:text-7xl",
976
+ headingClassName
977
+ ),
978
+ children: heading
979
+ }
980
+ )),
981
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
982
+ "p",
983
+ {
984
+ className: cn(
985
+ "text-lg leading-relaxed text-balance xl:text-2xl",
986
+ descriptionClassName
987
+ ),
988
+ children: description
989
+ }
990
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
991
+ "div",
992
+ {
993
+ className: cn(
994
+ "text-lg leading-relaxed text-balance xl:text-2xl",
995
+ descriptionClassName
996
+ ),
997
+ children: description
998
+ }
999
+ ))
994
1000
  ] }),
995
1001
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "my-6 lg:my-10", children: renderButton }),
996
1002
  renderTestimonial
@@ -884,29 +884,21 @@ function HeroTestimonialImageGrid({
884
884
  if (testimonialSlot) return testimonialSlot;
885
885
  if (!testimonial || !testimonial.avatars) return null;
886
886
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
887
- /* @__PURE__ */ jsx("div", { className: "flex -space-x-2", children: testimonial.avatars.map((avatar, index) => /* @__PURE__ */ jsxs(
888
- Avatar,
889
- {
890
- className: "size-10 border-2 border-border",
891
- children: [
892
- /* @__PURE__ */ jsx(AvatarImage, { src: avatar.image, alt: "" }),
893
- /* @__PURE__ */ jsx(AvatarFallback, { children: avatar.fallback })
894
- ]
895
- },
896
- index
897
- )) }),
887
+ /* @__PURE__ */ jsx("div", { className: "flex -space-x-2", children: testimonial.avatars.map((avatar, index) => /* @__PURE__ */ jsxs(Avatar, { className: "size-10 border-2 border-border", children: [
888
+ /* @__PURE__ */ jsx(AvatarImage, { src: avatar.image, alt: testimonial.author }),
889
+ /* @__PURE__ */ jsx(AvatarFallback, { children: avatar.fallback })
890
+ ] }, index)) }),
898
891
  /* @__PURE__ */ jsxs("div", { children: [
899
- /* @__PURE__ */ jsxs("p", { className: "mb-1 text-sm text-foreground/60 italic", children: [
892
+ /* @__PURE__ */ jsxs("p", { className: "mb-1 text-sm italic", children: [
900
893
  '"',
901
894
  testimonial.quote,
902
895
  '"'
903
896
  ] }),
904
- /* @__PURE__ */ jsxs("p", { className: "text-sm font-medium text-foreground/60", children: [
897
+ /* @__PURE__ */ jsxs("p", { className: "text-sm font-medium ", children: [
905
898
  testimonial.author,
906
899
  ", ",
907
900
  testimonial.role,
908
- " @",
909
- testimonial.company
901
+ testimonial.company?.length ? ` | ${testimonial.company}` : ""
910
902
  ] })
911
903
  ] })
912
904
  ] });
@@ -915,44 +907,22 @@ function HeroTestimonialImageGrid({
915
907
  if (imagesSlot) return imagesSlot;
916
908
  if (!gridImages || gridImages.length < 4) return null;
917
909
  const images = gridImages;
918
- return /* @__PURE__ */ jsx("div", { className: "w-full flex-1", children: /* @__PURE__ */ jsx("div", { className: "w-full max-w-200", children: /* @__PURE__ */ jsx(AspectRatio, { ratio: 1 / 1, className: "h-full w-full", children: /* @__PURE__ */ jsxs("div", { className: "grid h-full w-full grid-cols-2 grid-rows-2 gap-[3.5%]", children: [
919
- /* @__PURE__ */ jsx("div", { className: "overflow-hidden rounded-[5.2%] border border-border bg-card", children: /* @__PURE__ */ jsx(
920
- Img,
921
- {
922
- src: images[0].src,
923
- alt: images[0].alt || "",
924
- className: "object-fit h-full w-full object-center",
925
- optixFlowConfig
926
- }
927
- ) }),
928
- /* @__PURE__ */ jsx("div", { className: "relative overflow-hidden rounded-[5.2%] border border-border bg-card", children: /* @__PURE__ */ jsx("div", { className: "absolute top-1/2 left-[5%] w-[110%] max-w-100 -translate-y-1/2 overflow-hidden rounded-md", children: /* @__PURE__ */ jsx(AspectRatio, { ratio: 1.739130435 / 1, children: /* @__PURE__ */ jsx(
929
- Img,
930
- {
931
- src: images[1].src,
932
- alt: images[1].alt || "",
933
- className: "size-full object-cover object-center",
934
- optixFlowConfig
935
- }
936
- ) }) }) }),
937
- /* @__PURE__ */ jsx("div", { className: "relative overflow-hidden rounded-[5.2%] border border-border bg-card", children: /* @__PURE__ */ jsx("div", { className: "absolute top-[9%] left-[9%] w-[200%] max-w-150 overflow-hidden rounded-md", children: /* @__PURE__ */ jsx(AspectRatio, { ratio: 1.6 / 1, children: /* @__PURE__ */ jsx(
938
- Img,
939
- {
940
- src: images[2].src,
941
- alt: images[2].alt || "",
942
- className: "size-full object-cover object-center",
943
- optixFlowConfig
944
- }
945
- ) }) }) }),
946
- /* @__PURE__ */ jsx("div", { className: "relative overflow-hidden rounded-[5.2%] border border-border bg-card", children: /* @__PURE__ */ jsx("div", { className: "relative top-[12%] left-[50%] w-[70%] max-w-70 -translate-x-[50%]", children: /* @__PURE__ */ jsx(AspectRatio, { ratio: 0.52 / 1, children: /* @__PURE__ */ jsx(
947
- Img,
948
- {
949
- src: images[3].src,
950
- alt: images[3].alt || "",
951
- className: "absolute z-10 w-full rounded-[16%]",
952
- optixFlowConfig
953
- }
954
- ) }) }) })
955
- ] }) }) }) });
910
+ return /* @__PURE__ */ jsx("div", { className: "w-full flex-1", children: /* @__PURE__ */ jsx("div", { className: "w-full max-w-full md:max-w-200", children: /* @__PURE__ */ jsx(AspectRatio, { ratio: 1 / 1, className: "h-full w-full", children: /* @__PURE__ */ jsx("div", { className: "grid h-full w-full grid-cols-2 grid-rows-2 gap-4", children: images.slice(0, 4).map((image, index) => /* @__PURE__ */ jsx(
911
+ "div",
912
+ {
913
+ className: "overflow-hidden rounded-lg shadow-xl",
914
+ children: /* @__PURE__ */ jsx(
915
+ Img,
916
+ {
917
+ src: image.src,
918
+ alt: image.alt || "",
919
+ className: "size-full object-cover object-center",
920
+ optixFlowConfig
921
+ }
922
+ )
923
+ },
924
+ index
925
+ )) }) }) }) });
956
926
  }, [imagesSlot, gridImages, optixFlowConfig]);
957
927
  return /* @__PURE__ */ jsx(
958
928
  Section,
@@ -961,13 +931,49 @@ function HeroTestimonialImageGrid({
961
931
  spacing,
962
932
  pattern,
963
933
  patternOpacity,
964
- className: cn("relative flex items-center justify-center py-12 md:py-20", className),
934
+ className,
965
935
  containerClassName,
966
936
  children: /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-8 md:flex-row", children: [
967
937
  /* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
968
938
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 lg:gap-8", children: [
969
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("leading-tighter max-w-[80%] text-4xl font-semibold tracking-tight lg:text-5xl xl:text-7xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("h1", { className: cn("leading-tighter max-w-[80%] text-4xl font-semibold tracking-tight lg:text-5xl xl:text-7xl", headingClassName), children: heading })),
970
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-lg leading-relaxed text-muted-foreground xl:text-2xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("text-lg leading-relaxed text-muted-foreground xl:text-2xl", descriptionClassName), children: description }))
939
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
940
+ "h1",
941
+ {
942
+ className: cn(
943
+ "leading-tighter max-w-[80%] text-4xl font-semibold tracking-tight lg:text-5xl xl:text-7xl",
944
+ headingClassName
945
+ ),
946
+ children: heading
947
+ }
948
+ ) : /* @__PURE__ */ jsx(
949
+ "h1",
950
+ {
951
+ className: cn(
952
+ "leading-tighter max-w-[80%] text-4xl font-semibold tracking-tight lg:text-5xl xl:text-7xl",
953
+ headingClassName
954
+ ),
955
+ children: heading
956
+ }
957
+ )),
958
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
959
+ "p",
960
+ {
961
+ className: cn(
962
+ "text-lg leading-relaxed text-balance xl:text-2xl",
963
+ descriptionClassName
964
+ ),
965
+ children: description
966
+ }
967
+ ) : /* @__PURE__ */ jsx(
968
+ "div",
969
+ {
970
+ className: cn(
971
+ "text-lg leading-relaxed text-balance xl:text-2xl",
972
+ descriptionClassName
973
+ ),
974
+ children: description
975
+ }
976
+ ))
971
977
  ] }),
972
978
  /* @__PURE__ */ jsx("div", { className: "my-6 lg:my-10", children: renderButton }),
973
979
  renderTestimonial