@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
@@ -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 { Slot } from '@radix-ui/react-slot';
8
9
 
9
10
  // components/blocks/hero/hero-centered-gradient-cta.tsx
10
11
  function cn(...inputs) {
@@ -803,6 +804,38 @@ var Section = React__default.forwardRef(
803
804
  }
804
805
  );
805
806
  Section.displayName = "Section";
807
+ var badgeVariants = cva(
808
+ "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",
809
+ {
810
+ variants: {
811
+ variant: {
812
+ default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
813
+ secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
814
+ 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",
815
+ outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
816
+ }
817
+ },
818
+ defaultVariants: {
819
+ variant: "default"
820
+ }
821
+ }
822
+ );
823
+ function Badge({
824
+ className,
825
+ variant,
826
+ asChild = false,
827
+ ...props
828
+ }) {
829
+ const Comp = asChild ? Slot : "span";
830
+ return /* @__PURE__ */ jsx(
831
+ Comp,
832
+ {
833
+ "data-slot": "badge",
834
+ className: cn(badgeVariants({ variant }), className),
835
+ ...props
836
+ }
837
+ );
838
+ }
806
839
  function HeroCenteredGradientCta({
807
840
  badge,
808
841
  badgeIcon,
@@ -814,7 +847,7 @@ function HeroCenteredGradientCta({
814
847
  features,
815
848
  featuresSlot,
816
849
  background,
817
- spacing = "py-32 md:py-32",
850
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
818
851
  pattern,
819
852
  patternOpacity,
820
853
  className,
@@ -829,8 +862,15 @@ function HeroCenteredGradientCta({
829
862
  const renderActions = useMemo(() => {
830
863
  if (actionsSlot) return actionsSlot;
831
864
  if (!actions || actions.length === 0) return null;
832
- return actions.map((action, index) => {
833
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
865
+ return /* @__PURE__ */ 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) => {
866
+ const {
867
+ label,
868
+ icon,
869
+ iconAfter,
870
+ children,
871
+ className: actionClassName,
872
+ ...pressableProps
873
+ } = action;
834
874
  return /* @__PURE__ */ jsx(
835
875
  Pressable,
836
876
  {
@@ -839,51 +879,94 @@ function HeroCenteredGradientCta({
839
879
  ...pressableProps,
840
880
  children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
841
881
  icon,
842
- label,
882
+ /* @__PURE__ */ jsx("span", { children: label }),
843
883
  iconAfter
844
884
  ] })
845
885
  },
846
886
  index
847
887
  );
848
- });
888
+ }) });
849
889
  }, [actionsSlot, actions]);
850
890
  const renderFeatures = useMemo(() => {
851
891
  if (featuresSlot) return featuresSlot;
852
892
  if (!features || features.length === 0) return null;
853
- return features.map((feature, index) => /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2", feature.className), children: [
854
- feature.icon,
855
- /* @__PURE__ */ jsx("span", { children: feature.title })
856
- ] }, index));
893
+ return features.map((feature, index) => /* @__PURE__ */ jsxs(
894
+ Pressable,
895
+ {
896
+ href: feature.href,
897
+ className: cn("flex items-center gap-2", feature.className),
898
+ children: [
899
+ feature.icon,
900
+ /* @__PURE__ */ jsx("span", { children: feature.title })
901
+ ]
902
+ },
903
+ index
904
+ ));
857
905
  }, [featuresSlot, features]);
858
- return /* @__PURE__ */ jsxs(
906
+ return /* @__PURE__ */ jsx(
859
907
  Section,
860
908
  {
861
909
  background,
862
910
  spacing,
863
911
  pattern,
864
912
  patternOpacity,
865
- className: cn("relative flex items-center justify-center min-h-screen overflow-hidden bg-background py-32", className),
913
+ className,
866
914
  containerClassName,
867
- children: [
868
- /* @__PURE__ */ 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) }),
869
- /* @__PURE__ */ jsxs("div", { className: "relative z-10 flex flex-col items-center text-center", children: [
870
- badge && /* @__PURE__ */ jsxs("div", { className: cn(
871
- "inline-flex items-center gap-2 rounded-full border border-border/50 bg-accent px-4 py-2 text-sm",
872
- badgeClassName
873
- ), children: [
874
- badgeIcon,
875
- typeof badge === "string" ? /* @__PURE__ */ jsx("span", { children: badge }) : badge
876
- ] }),
877
- (heading || headingHighlight) && (typeof heading === "string" ? /* @__PURE__ */ 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__ */ jsx("div", { className: headingClassName, children: heading }) : headingHighlight ? /* @__PURE__ */ jsxs("h1", { className: cn("mt-8 max-w-4xl text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl", headingClassName), children: [
878
- "Build something",
879
- " ",
880
- /* @__PURE__ */ jsx("span", { className: "bg-linear-to-r from-primary to-purple-600 bg-clip-text text-transparent", children: headingHighlight })
881
- ] }) : null),
882
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-6 max-w-2xl text-lg text-muted-foreground md:text-xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
883
- (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-10 flex flex-col gap-4 sm:flex-row", actionsClassName), children: renderActions }),
884
- (featuresSlot || features && features.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-16 flex items-center gap-8 text-sm text-muted-foreground", featuresClassName), children: renderFeatures })
885
- ] })
886
- ]
915
+ children: /* @__PURE__ */ jsxs("div", { className: "relative gap-6 z-10 flex flex-col items-center text-center", children: [
916
+ badge && /* @__PURE__ */ jsxs(Badge, { className: "px-3", children: [
917
+ badgeIcon,
918
+ typeof badge === "string" ? /* @__PURE__ */ jsx("span", { children: badge }) : badge
919
+ ] }),
920
+ (heading || headingHighlight) && (typeof heading === "string" ? /* @__PURE__ */ jsx(
921
+ "h1",
922
+ {
923
+ className: cn(
924
+ "max-w-full md:max-w-md text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl text-balance",
925
+ headingClassName
926
+ ),
927
+ children: heading
928
+ }
929
+ ) : heading ? /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading }) : headingHighlight ? /* @__PURE__ */ jsx(
930
+ "h1",
931
+ {
932
+ className: cn(
933
+ "max-w-full md:max-w-md text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl text-balance",
934
+ headingClassName
935
+ ),
936
+ children: /* @__PURE__ */ jsx("span", { className: "bg-linear-to-r from-primary to-purple-600 bg-clip-text text-transparent", children: headingHighlight })
937
+ }
938
+ ) : null),
939
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
940
+ "p",
941
+ {
942
+ className: cn(
943
+ "max-w-full md:max-w-md text-md md:text-xl text-balance",
944
+ descriptionClassName
945
+ ),
946
+ children: description
947
+ }
948
+ ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
949
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx(
950
+ "div",
951
+ {
952
+ className: cn(
953
+ "mt-0 md:mt-6 flex flex-col gap-4 sm:flex-row",
954
+ actionsClassName
955
+ ),
956
+ children: renderActions
957
+ }
958
+ ),
959
+ (featuresSlot || features && features.length > 0) && /* @__PURE__ */ jsx(
960
+ "div",
961
+ {
962
+ className: cn(
963
+ "mt-4 md:mt-6 flex flex-col md:flex-row items-center gap-4 md:gap-8 text-sm",
964
+ featuresClassName
965
+ ),
966
+ children: renderFeatures
967
+ }
968
+ )
969
+ ] })
887
970
  }
888
971
  );
889
972
  }
@@ -1163,7 +1163,7 @@ function HeroConversionVideoPlay({
1163
1163
  description,
1164
1164
  primaryAction,
1165
1165
  videoButtonLabel = "Play Video",
1166
- videoUrl = "https://www.youtube.com/embed/your-video-id",
1166
+ videoUrl,
1167
1167
  videoDialogTitle = "Presentation Video",
1168
1168
  actionsSlot,
1169
1169
  image,
@@ -1172,7 +1172,7 @@ function HeroConversionVideoPlay({
1172
1172
  logos,
1173
1173
  logosSlot,
1174
1174
  background,
1175
- spacing = "py-32 md:py-32",
1175
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
1176
1176
  pattern,
1177
1177
  patternOpacity,
1178
1178
  className,
@@ -1219,7 +1219,7 @@ function HeroConversionVideoPlay({
1219
1219
  asButton: true,
1220
1220
  variant: "link",
1221
1221
  children: [
1222
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-10 w-10 rounded-full bg-primary text-primary-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/play" }) }),
1222
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-10 w-10 rounded-full bg-primary text-primary-foreground justify-center items-center", children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/play" }) }),
1223
1223
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: videoButtonLabel })
1224
1224
  ]
1225
1225
  }
@@ -1272,7 +1272,7 @@ function HeroConversionVideoPlay({
1272
1272
  "div",
1273
1273
  {
1274
1274
  className: cn(
1275
- "flex flex-wrap items-center justify-center gap-8",
1275
+ "flex flex-wrap items-center justify-center gap-4",
1276
1276
  actionsClassName
1277
1277
  ),
1278
1278
  children: renderActions
@@ -1295,7 +1295,7 @@ function HeroConversionVideoPlay({
1295
1295
  ) }) }) }) : null })
1296
1296
  ] }) }),
1297
1297
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-16 py-20", children: [
1298
- logosTagline && (typeof logosTagline === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-center text-xl font-medium "), children: logosTagline }) : logosTagline),
1298
+ logosTagline && (typeof logosTagline === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-center font-medium "), children: logosTagline }) : logosTagline),
1299
1299
  logosSlot ? logosSlot : logos && logos.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
1300
1300
  Carousel,
1301
1301
  {
@@ -1136,7 +1136,7 @@ function HeroConversionVideoPlay({
1136
1136
  description,
1137
1137
  primaryAction,
1138
1138
  videoButtonLabel = "Play Video",
1139
- videoUrl = "https://www.youtube.com/embed/your-video-id",
1139
+ videoUrl,
1140
1140
  videoDialogTitle = "Presentation Video",
1141
1141
  actionsSlot,
1142
1142
  image,
@@ -1145,7 +1145,7 @@ function HeroConversionVideoPlay({
1145
1145
  logos,
1146
1146
  logosSlot,
1147
1147
  background,
1148
- spacing = "py-32 md:py-32",
1148
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
1149
1149
  pattern,
1150
1150
  patternOpacity,
1151
1151
  className,
@@ -1192,7 +1192,7 @@ function HeroConversionVideoPlay({
1192
1192
  asButton: true,
1193
1193
  variant: "link",
1194
1194
  children: [
1195
- /* @__PURE__ */ jsx("div", { className: "flex h-10 w-10 rounded-full bg-primary text-primary-foreground", children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/play" }) }),
1195
+ /* @__PURE__ */ jsx("div", { className: "flex h-10 w-10 rounded-full bg-primary text-primary-foreground justify-center items-center", children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/play" }) }),
1196
1196
  /* @__PURE__ */ jsx("div", { children: videoButtonLabel })
1197
1197
  ]
1198
1198
  }
@@ -1245,7 +1245,7 @@ function HeroConversionVideoPlay({
1245
1245
  "div",
1246
1246
  {
1247
1247
  className: cn(
1248
- "flex flex-wrap items-center justify-center gap-8",
1248
+ "flex flex-wrap items-center justify-center gap-4",
1249
1249
  actionsClassName
1250
1250
  ),
1251
1251
  children: renderActions
@@ -1268,7 +1268,7 @@ function HeroConversionVideoPlay({
1268
1268
  ) }) }) }) : null })
1269
1269
  ] }) }),
1270
1270
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-16 py-20", children: [
1271
- logosTagline && (typeof logosTagline === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-center text-xl font-medium "), children: logosTagline }) : logosTagline),
1271
+ logosTagline && (typeof logosTagline === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-center font-medium "), children: logosTagline }) : logosTagline),
1272
1272
  logosSlot ? logosSlot : logos && logos.length > 0 ? /* @__PURE__ */ jsx(
1273
1273
  Carousel,
1274
1274
  {
@@ -836,7 +836,7 @@ function HeroDesignShowcaseLogos({
836
836
  showcaseImage,
837
837
  showcaseSlot,
838
838
  background,
839
- spacing = "py-32 md:py-32",
839
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
840
840
  pattern,
841
841
  patternOpacity,
842
842
  className,
@@ -856,7 +856,7 @@ function HeroDesignShowcaseLogos({
856
856
  "div",
857
857
  {
858
858
  className: cn(
859
- "mt-6 md:mt-12 flex items-center justify-center gap-3",
859
+ "mt-6 md:mt-12 flex flex-col md:flex-row items-center justify-center gap-4",
860
860
  actionsClassName
861
861
  ),
862
862
  children: actions.map((action, index) => {
@@ -889,7 +889,7 @@ function HeroDesignShowcaseLogos({
889
889
  const renderLogos = React.useMemo(() => {
890
890
  if (logosSlot) return logosSlot;
891
891
  if (!logos || logos.length === 0) return null;
892
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "py-10 md:py-16", children: [
892
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "py-0 md:py-16", children: [
893
893
  logosLabel && (typeof logosLabel === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-center text-sm text-foreground/60", children: logosLabel }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center text-sm text-foreground/60", children: logosLabel })),
894
894
  /* @__PURE__ */ jsxRuntime.jsx(
895
895
  "div",
@@ -906,7 +906,7 @@ function HeroDesignShowcaseLogos({
906
906
  src: logoSrc,
907
907
  alt: logo.alt,
908
908
  className: cn(
909
- "block h-3.5 w-auto opacity-50 md:h-5",
909
+ "block w-auto opacity-50 h-5 object-contain",
910
910
  logo.className
911
911
  ),
912
912
  optixFlowConfig
@@ -815,7 +815,7 @@ function HeroDesignShowcaseLogos({
815
815
  showcaseImage,
816
816
  showcaseSlot,
817
817
  background,
818
- spacing = "py-32 md:py-32",
818
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
819
819
  pattern,
820
820
  patternOpacity,
821
821
  className,
@@ -835,7 +835,7 @@ function HeroDesignShowcaseLogos({
835
835
  "div",
836
836
  {
837
837
  className: cn(
838
- "mt-6 md:mt-12 flex items-center justify-center gap-3",
838
+ "mt-6 md:mt-12 flex flex-col md:flex-row items-center justify-center gap-4",
839
839
  actionsClassName
840
840
  ),
841
841
  children: actions.map((action, index) => {
@@ -868,7 +868,7 @@ function HeroDesignShowcaseLogos({
868
868
  const renderLogos = useMemo(() => {
869
869
  if (logosSlot) return logosSlot;
870
870
  if (!logos || logos.length === 0) return null;
871
- return /* @__PURE__ */ jsxs("div", { className: "py-10 md:py-16", children: [
871
+ return /* @__PURE__ */ jsxs("div", { className: "py-0 md:py-16", children: [
872
872
  logosLabel && (typeof logosLabel === "string" ? /* @__PURE__ */ jsx("p", { className: "text-center text-sm text-foreground/60", children: logosLabel }) : /* @__PURE__ */ jsx("div", { className: "text-center text-sm text-foreground/60", children: logosLabel })),
873
873
  /* @__PURE__ */ jsx(
874
874
  "div",
@@ -885,7 +885,7 @@ function HeroDesignShowcaseLogos({
885
885
  src: logoSrc,
886
886
  alt: logo.alt,
887
887
  className: cn(
888
- "block h-3.5 w-auto opacity-50 md:h-5",
888
+ "block w-auto opacity-50 h-5 object-contain",
889
889
  logo.className
890
890
  ),
891
891
  optixFlowConfig
@@ -975,7 +975,7 @@ function HeroGridPatternSolutions({
975
975
  images,
976
976
  imagesSlot,
977
977
  background,
978
- spacing = "py-32 md:py-32",
978
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
979
979
  pattern,
980
980
  patternOpacity,
981
981
  className,
@@ -1010,9 +1010,9 @@ function HeroGridPatternSolutions({
1010
1010
  const renderBadge = React.useMemo(() => {
1011
1011
  if (badgeSlot) return badgeSlot;
1012
1012
  if (!badgeText) return null;
1013
- return /* @__PURE__ */ jsxRuntime.jsx(Pressable, { href: badgeHref, children: /* @__PURE__ */ jsxRuntime.jsxs(Badge, { className: "px-2", children: [
1013
+ return /* @__PURE__ */ jsxRuntime.jsx(Pressable, { href: badgeHref, children: /* @__PURE__ */ jsxRuntime.jsxs(Badge, { className: "px-4", children: [
1014
1014
  badgeText,
1015
- /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/arrow-right" })
1015
+ /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/arrow-up-right", size: 16 })
1016
1016
  ] }) });
1017
1017
  }, [badgeSlot, badgeHref, badgeText]);
1018
1018
  const renderActions = React.useMemo(() => {
@@ -1105,7 +1105,7 @@ function HeroGridPatternSolutions({
1105
1105
  containerClassName,
1106
1106
  children: [
1107
1107
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
1108
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto max-w-4xl", contentClassName), children: [
1108
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col items-center", contentClassName), children: [
1109
1109
  renderBadge,
1110
1110
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
1111
1111
  "h1",
@@ -954,7 +954,7 @@ function HeroGridPatternSolutions({
954
954
  images,
955
955
  imagesSlot,
956
956
  background,
957
- spacing = "py-32 md:py-32",
957
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
958
958
  pattern,
959
959
  patternOpacity,
960
960
  className,
@@ -989,9 +989,9 @@ function HeroGridPatternSolutions({
989
989
  const renderBadge = useMemo(() => {
990
990
  if (badgeSlot) return badgeSlot;
991
991
  if (!badgeText) return null;
992
- return /* @__PURE__ */ jsx(Pressable, { href: badgeHref, children: /* @__PURE__ */ jsxs(Badge, { className: "px-2", children: [
992
+ return /* @__PURE__ */ jsx(Pressable, { href: badgeHref, children: /* @__PURE__ */ jsxs(Badge, { className: "px-4", children: [
993
993
  badgeText,
994
- /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-right" })
994
+ /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-up-right", size: 16 })
995
995
  ] }) });
996
996
  }, [badgeSlot, badgeHref, badgeText]);
997
997
  const renderActions = useMemo(() => {
@@ -1084,7 +1084,7 @@ function HeroGridPatternSolutions({
1084
1084
  containerClassName,
1085
1085
  children: [
1086
1086
  /* @__PURE__ */ jsxs("div", { className: "relative", children: [
1087
- /* @__PURE__ */ jsx("div", { className: "relative overflow-hidden", children: /* @__PURE__ */ jsxs("div", { className: cn("mx-auto max-w-4xl", contentClassName), children: [
1087
+ /* @__PURE__ */ jsx("div", { className: "relative overflow-hidden", children: /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col items-center", contentClassName), children: [
1088
1088
  renderBadge,
1089
1089
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
1090
1090
  "h1",
@@ -835,7 +835,7 @@ function HeroHiringAnimatedText({
835
835
  scrollActionSlot,
836
836
  backgroundImage,
837
837
  background,
838
- spacing = "py-32 md:py-32",
838
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
839
839
  pattern,
840
840
  patternOpacity,
841
841
  className,
@@ -845,32 +845,60 @@ function HeroHiringAnimatedText({
845
845
  descriptionClassName,
846
846
  actionsClassName
847
847
  }) {
848
+ const [activeIndex, setActiveIndex] = React.useState(0);
849
+ const cycleText = React.useCallback(() => {
850
+ if (!animatedTexts || animatedTexts.length <= 1) return;
851
+ setActiveIndex((prev) => (prev + 1) % animatedTexts.length);
852
+ }, [animatedTexts]);
853
+ React.useEffect(() => {
854
+ if (!animatedTexts || animatedTexts.length <= 1) return;
855
+ const interval = setInterval(cycleText, 2e3);
856
+ return () => clearInterval(interval);
857
+ }, [animatedTexts, cycleText]);
848
858
  const renderHeading = React.useMemo(() => {
849
859
  if (headingSlot) return headingSlot;
850
- return /* @__PURE__ */ jsxRuntime.jsxs("h1", { className: cn("text-4xl leading-9 font-bold lg:text-5xl lg:leading-12! xl:text-7xl xl:leading-22!", headingClassName), children: [
851
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2", children: headingPrefix }),
852
- animatedTexts && animatedTexts.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-[calc(2.25rem*3)] md:h-9 lg:h-12 xl:h-22", children: animatedTexts.map((text, index) => /* @__PURE__ */ jsxRuntime.jsx(
853
- "div",
854
- {
855
- className: cn(
856
- "absolute top-0 left-0 will-change-[opacity]",
857
- 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`
858
- ),
859
- style: {
860
- animation: `show-text ${animatedTexts.length * 2}s ease-in-out infinite ${index * 2}s`,
861
- opacity: index === 0 ? 1 : 0
862
- },
863
- children: text
864
- },
865
- index
866
- )) })
867
- ] });
868
- }, [headingSlot, headingPrefix, animatedTexts, headingClassName]);
860
+ return /* @__PURE__ */ jsxRuntime.jsxs(
861
+ "h1",
862
+ {
863
+ className: cn(
864
+ "text-4xl leading-9 font-bold lg:text-5xl lg:leading-12! xl:text-7xl xl:leading-22! text-white text-shadow-xl",
865
+ headingClassName
866
+ ),
867
+ children: [
868
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2", children: headingPrefix }),
869
+ animatedTexts && animatedTexts.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative h-9 lg:h-12 xl:h-22", children: animatedTexts.map((text, index) => /* @__PURE__ */ jsxRuntime.jsx(
870
+ "div",
871
+ {
872
+ className: "absolute top-0 left-0 text-white transition-opacity duration-1000 ease-in-out",
873
+ style: {
874
+ opacity: index === activeIndex ? 1 : 0
875
+ },
876
+ children: text
877
+ },
878
+ index
879
+ )) })
880
+ ]
881
+ }
882
+ );
883
+ }, [
884
+ headingSlot,
885
+ headingPrefix,
886
+ animatedTexts,
887
+ headingClassName,
888
+ activeIndex
889
+ ]);
869
890
  const renderActions = React.useMemo(() => {
870
891
  if (actionsSlot) return actionsSlot;
871
892
  if (!actions || actions.length === 0) return null;
872
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-wrap items-center gap-5", actionsClassName), children: actions.map((action, index) => {
873
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
893
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-col md:flex-row gap-4", actionsClassName), children: actions.map((action, index) => {
894
+ const {
895
+ label,
896
+ icon,
897
+ iconAfter,
898
+ children,
899
+ className: actionClassName,
900
+ ...pressableProps
901
+ } = action;
874
902
  return /* @__PURE__ */ jsxRuntime.jsx(
875
903
  Pressable,
876
904
  {
@@ -890,7 +918,14 @@ function HeroHiringAnimatedText({
890
918
  const renderScrollAction = React.useMemo(() => {
891
919
  if (scrollActionSlot) return scrollActionSlot;
892
920
  if (!scrollAction) return null;
893
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = scrollAction;
921
+ const {
922
+ label,
923
+ icon,
924
+ iconAfter,
925
+ children,
926
+ className: actionClassName,
927
+ ...pressableProps
928
+ } = scrollAction;
894
929
  return /* @__PURE__ */ jsxRuntime.jsx(Pressable, { asButton: true, className: actionClassName, ...pressableProps, children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
895
930
  icon,
896
931
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: label }),
@@ -905,21 +940,39 @@ function HeroHiringAnimatedText({
905
940
  pattern,
906
941
  patternOpacity,
907
942
  className: cn(
908
- "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-['']",
943
+ "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-['']",
909
944
  className
910
945
  ),
911
946
  containerClassName,
912
947
  style: { backgroundImage: `url('${backgroundImage}')` },
913
- children: /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.jsxs("div", { className: cn("flex h-full flex-col justify-between gap-6 md:justify-end", contentClassName), children: [
914
- renderHeading,
915
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-8", children: [
916
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg lg:text-2xl", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
917
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-5", children: [
918
- renderActions,
919
- renderScrollAction
920
- ] })
921
- ] })
922
- ] }) })
948
+ children: /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.jsxs(
949
+ "div",
950
+ {
951
+ className: cn(
952
+ "flex h-full flex-col justify-between gap-6 md:justify-end max-w-full md:max-w-md",
953
+ contentClassName
954
+ ),
955
+ children: [
956
+ renderHeading,
957
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-8", children: [
958
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
959
+ "p",
960
+ {
961
+ className: cn(
962
+ "text-lg lg:text-2xl text-white text-balance",
963
+ descriptionClassName
964
+ ),
965
+ children: description
966
+ }
967
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
968
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4", children: [
969
+ renderActions,
970
+ renderScrollAction
971
+ ] })
972
+ ] })
973
+ ]
974
+ }
975
+ ) })
923
976
  }
924
977
  );
925
978
  }