@opensite/ui 2.0.6 → 2.0.8

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 (77) hide show
  1. package/dist/hero-adaptable-product-grid.cjs +1 -1
  2. package/dist/hero-adaptable-product-grid.js +1 -1
  3. package/dist/hero-agency-animated-images.cjs +795 -631
  4. package/dist/hero-agency-animated-images.d.cts +13 -9
  5. package/dist/hero-agency-animated-images.d.ts +13 -9
  6. package/dist/hero-agency-animated-images.js +794 -630
  7. package/dist/hero-business-carousel-dots.cjs +822 -911
  8. package/dist/hero-business-carousel-dots.d.cts +5 -1
  9. package/dist/hero-business-carousel-dots.d.ts +5 -1
  10. package/dist/hero-business-carousel-dots.js +824 -910
  11. package/dist/hero-coming-soon-countdown.cjs +267 -110
  12. package/dist/hero-coming-soon-countdown.d.cts +8 -11
  13. package/dist/hero-coming-soon-countdown.d.ts +8 -11
  14. package/dist/hero-coming-soon-countdown.js +268 -111
  15. package/dist/hero-conversation-intelligence.cjs +673 -639
  16. package/dist/hero-conversation-intelligence.js +663 -629
  17. package/dist/hero-creative-studio-stacked.cjs +899 -861
  18. package/dist/hero-creative-studio-stacked.d.cts +16 -15
  19. package/dist/hero-creative-studio-stacked.d.ts +16 -15
  20. package/dist/hero-creative-studio-stacked.js +897 -859
  21. package/dist/hero-customer-support-layered.cjs +89 -76
  22. package/dist/hero-customer-support-layered.js +89 -76
  23. package/dist/hero-developer-tools-code.cjs +721 -669
  24. package/dist/hero-developer-tools-code.d.cts +5 -1
  25. package/dist/hero-developer-tools-code.d.ts +5 -1
  26. package/dist/hero-developer-tools-code.js +719 -667
  27. package/dist/hero-digital-agency-fullscreen.cjs +722 -680
  28. package/dist/hero-digital-agency-fullscreen.d.cts +4 -20
  29. package/dist/hero-digital-agency-fullscreen.d.ts +4 -20
  30. package/dist/hero-digital-agency-fullscreen.js +722 -680
  31. package/dist/hero-ecommerce-product-showcase.cjs +892 -846
  32. package/dist/hero-ecommerce-product-showcase.js +889 -843
  33. package/dist/hero-enterprise-security.cjs +168 -132
  34. package/dist/hero-enterprise-security.d.cts +12 -19
  35. package/dist/hero-enterprise-security.d.ts +12 -19
  36. package/dist/hero-enterprise-security.js +168 -132
  37. package/dist/hero-event-registration.cjs +39 -39
  38. package/dist/hero-event-registration.js +39 -39
  39. package/dist/hero-fullscreen-background-image.cjs +3 -2
  40. package/dist/hero-fullscreen-background-image.js +3 -2
  41. package/dist/hero-fullscreen-logo-cta.cjs +4 -2
  42. package/dist/hero-fullscreen-logo-cta.js +4 -2
  43. package/dist/hero-innovation-image-grid.cjs +2 -2
  44. package/dist/hero-innovation-image-grid.js +2 -2
  45. package/dist/hero-mental-health-team.cjs +17 -17
  46. package/dist/hero-mental-health-team.d.cts +5 -5
  47. package/dist/hero-mental-health-team.d.ts +5 -5
  48. package/dist/hero-mental-health-team.js +17 -17
  49. package/dist/hero-mobile-app-download.cjs +2 -2
  50. package/dist/hero-mobile-app-download.js +2 -2
  51. package/dist/hero-newsletter-minimal.cjs +97 -57
  52. package/dist/hero-newsletter-minimal.d.cts +5 -1
  53. package/dist/hero-newsletter-minimal.d.ts +5 -1
  54. package/dist/hero-newsletter-minimal.js +97 -57
  55. package/dist/hero-shared-inbox-layered.cjs +522 -42
  56. package/dist/hero-shared-inbox-layered.d.cts +20 -4
  57. package/dist/hero-shared-inbox-layered.d.ts +20 -4
  58. package/dist/hero-shared-inbox-layered.js +505 -40
  59. package/dist/hero-startup-launch-cta.cjs +859 -816
  60. package/dist/hero-startup-launch-cta.d.cts +3 -2
  61. package/dist/hero-startup-launch-cta.d.ts +3 -2
  62. package/dist/hero-startup-launch-cta.js +858 -815
  63. package/dist/hero-therapy-testimonial-grid.cjs +1 -1
  64. package/dist/hero-therapy-testimonial-grid.js +1 -1
  65. package/dist/hero-video-dialog-gradient-BnCFFec0.d.ts +99 -0
  66. package/dist/hero-video-dialog-gradient-Dapebkzu.d.cts +99 -0
  67. package/dist/hero-video-dialog-gradient.cjs +24 -23
  68. package/dist/hero-video-dialog-gradient.d.cts +4 -94
  69. package/dist/hero-video-dialog-gradient.d.ts +4 -94
  70. package/dist/hero-video-dialog-gradient.js +24 -23
  71. package/dist/hero-welcome-asymmetric-images.cjs +652 -617
  72. package/dist/hero-welcome-asymmetric-images.d.cts +5 -1
  73. package/dist/hero-welcome-asymmetric-images.d.ts +5 -1
  74. package/dist/hero-welcome-asymmetric-images.js +651 -616
  75. package/dist/registry.cjs +1111 -848
  76. package/dist/registry.js +1111 -848
  77. package/package.json +1 -1
@@ -1,76 +1,19 @@
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
+ import { AnimatePresence, motion } from 'framer-motion';
4
5
  import { clsx } from 'clsx';
5
6
  import { twMerge } from 'tailwind-merge';
6
7
  import { cva } from 'class-variance-authority';
7
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
9
  import { Icon } from '@page-speed/icon';
10
+ import { Slot } from '@radix-ui/react-slot';
11
+ import { usePlatformFromUrl } from '@opensite/hooks/usePlatformFromUrl';
9
12
 
10
13
  // components/blocks/hero/hero-coming-soon-countdown.tsx
11
14
  function cn(...inputs) {
12
15
  return twMerge(clsx(inputs));
13
16
  }
14
- function getNestedCardBg(parentBg, variant = "muted", options) {
15
- const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
16
- if (isDark) {
17
- switch (variant) {
18
- case "muted":
19
- return "bg-background";
20
- case "card":
21
- return "bg-card";
22
- case "accent":
23
- return "bg-accent";
24
- case "subtle":
25
- return "bg-background/50";
26
- }
27
- } else {
28
- switch (variant) {
29
- case "muted":
30
- return "bg-muted";
31
- case "card":
32
- return "bg-card";
33
- case "accent":
34
- return "bg-accent";
35
- case "subtle":
36
- return "bg-muted/50";
37
- }
38
- }
39
- }
40
- function getNestedCardTextColor(parentBg, options) {
41
- const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
42
- return isDark ? "text-foreground" : "";
43
- }
44
- function getTextColor(parentBg, variant = "default", options) {
45
- const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
46
- if (isDark) {
47
- switch (variant) {
48
- case "default":
49
- return "text-foreground";
50
- case "muted":
51
- return "text-foreground/80";
52
- case "subtle":
53
- return "text-foreground/60";
54
- case "accent":
55
- return "text-accent-foreground";
56
- }
57
- } else {
58
- switch (variant) {
59
- case "default":
60
- return "text-foreground";
61
- case "muted":
62
- return "text-muted-foreground";
63
- case "subtle":
64
- return "text-muted-foreground/70";
65
- case "accent":
66
- return "text-primary";
67
- }
68
- }
69
- }
70
- function getAccentColor(parentBg, options) {
71
- const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
72
- return isDark ? "text-accent-foreground" : "text-primary";
73
- }
74
17
  function normalizePhoneNumber(input) {
75
18
  const trimmed = input.trim();
76
19
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -884,12 +827,163 @@ var Section = React__default.forwardRef(
884
827
  }
885
828
  );
886
829
  Section.displayName = "Section";
830
+ var badgeVariants = cva(
831
+ "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",
832
+ {
833
+ variants: {
834
+ variant: {
835
+ default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
836
+ secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
837
+ 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",
838
+ outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
839
+ }
840
+ },
841
+ defaultVariants: {
842
+ variant: "default"
843
+ }
844
+ }
845
+ );
846
+ function Badge({
847
+ className,
848
+ variant,
849
+ asChild = false,
850
+ ...props
851
+ }) {
852
+ const Comp = asChild ? Slot : "span";
853
+ return /* @__PURE__ */ jsx(
854
+ Comp,
855
+ {
856
+ "data-slot": "badge",
857
+ className: cn(badgeVariants({ variant }), className),
858
+ ...props
859
+ }
860
+ );
861
+ }
862
+ var platformIconMap = {
863
+ instagram: "cib/instagram",
864
+ linkedin: "cib/linkedin",
865
+ google: "cib/google",
866
+ facebook: "cib/facebook",
867
+ tiktok: "cib/tiktok",
868
+ youtube: "cib/youtube",
869
+ yelp: "cib/yelp",
870
+ spotify: "cib/spotify",
871
+ apple: "cib/apple",
872
+ x: "line-md/twitter-x-alt",
873
+ github: "cib/github",
874
+ snapchat: "cib/snapchat",
875
+ discord: "cib/discord",
876
+ dev: "simple-icons/devdotto",
877
+ substack: "simple-icons/substack",
878
+ reddit: "cib/reddit",
879
+ pinterest: "cib/pinterest",
880
+ threads: "simple-icons/threads",
881
+ twitch: "cib/twitch",
882
+ whatsapp: "cib/whatsapp",
883
+ telegram: "cib/telegram",
884
+ medium: "simple-icons/medium",
885
+ patreon: "cib/patreon",
886
+ onlyfans: "simple-icons/onlyfans",
887
+ eventbrite: "cib/eventbrite",
888
+ npmjs: "simple-icons/npm",
889
+ crates: "cib/rust",
890
+ rubygems: "cib/rubygems",
891
+ behance: "cib/behance",
892
+ dribbble: "cib/dribbble",
893
+ unknown: "icon-park-solid/circular-connection"
894
+ };
895
+ var SocialLinkIcon = React.forwardRef(
896
+ ({
897
+ platformName,
898
+ label,
899
+ iconSize = 20,
900
+ iconColor,
901
+ href,
902
+ iconClassName,
903
+ className,
904
+ iconNameOverride,
905
+ ...pressableProps
906
+ }, ref) => {
907
+ const platform = usePlatformFromUrl(href);
908
+ const smartPlatformName = React.useMemo(() => {
909
+ return platform || platformName;
910
+ }, [platform, platformName]);
911
+ const iconName = React.useMemo(() => {
912
+ return iconNameOverride || platformIconMap[smartPlatformName];
913
+ }, [iconNameOverride, smartPlatformName]);
914
+ const accessibleLabel = React.useMemo(() => {
915
+ return label || platformName;
916
+ }, [label, platformName]);
917
+ return /* @__PURE__ */ jsx(
918
+ Pressable,
919
+ {
920
+ ref,
921
+ href,
922
+ "aria-label": accessibleLabel,
923
+ className: cn(
924
+ "inline-flex items-center justify-center transition-colors",
925
+ className
926
+ ),
927
+ ...pressableProps,
928
+ children: /* @__PURE__ */ jsx(
929
+ DynamicIcon,
930
+ {
931
+ name: iconName,
932
+ size: iconSize,
933
+ color: iconColor,
934
+ className: iconClassName,
935
+ alt: accessibleLabel
936
+ }
937
+ )
938
+ }
939
+ );
940
+ }
941
+ );
942
+ SocialLinkIcon.displayName = "SocialLinkIcon";
943
+ var digitVariants = {
944
+ initial: { y: -20, opacity: 0 },
945
+ animate: {
946
+ y: 0,
947
+ opacity: 1,
948
+ transition: { type: "spring", stiffness: 300, damping: 25 }
949
+ },
950
+ exit: {
951
+ y: 20,
952
+ opacity: 0,
953
+ transition: { duration: 0.15 }
954
+ }
955
+ };
956
+ function CountdownDigit({ value, label }) {
957
+ const display = value.toString().padStart(2, "0");
958
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center", children: [
959
+ /* @__PURE__ */ jsx(
960
+ "div",
961
+ {
962
+ className: cn(
963
+ "flex h-16 w-16 items-center justify-center overflow-hidden rounded-xl text-3xl font-bold md:h-24 md:w-24 md:text-5xl"
964
+ ),
965
+ children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "popLayout", initial: false, children: /* @__PURE__ */ jsx(
966
+ motion.span,
967
+ {
968
+ variants: digitVariants,
969
+ initial: "initial",
970
+ animate: "animate",
971
+ exit: "exit",
972
+ children: display
973
+ },
974
+ display
975
+ ) })
976
+ }
977
+ ),
978
+ /* @__PURE__ */ jsx("span", { className: cn("mt-2 text-sm"), children: label })
979
+ ] });
980
+ }
887
981
  function HeroComingSoonCountdown({
888
982
  badgeIcon,
889
983
  badgeText,
890
984
  heading,
891
985
  description,
892
- countdownItems,
986
+ countdownDate,
893
987
  countdownSlot,
894
988
  emailPlaceholder = "Enter your email",
895
989
  submitAction,
@@ -897,11 +991,12 @@ function HeroComingSoonCountdown({
897
991
  socialLinks,
898
992
  socialLinksSlot,
899
993
  background,
900
- spacing,
994
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
995
+ spacing = "xl",
901
996
  pattern,
902
997
  patternOpacity,
998
+ patternClassName,
903
999
  className,
904
- containerClassName,
905
1000
  badgeClassName,
906
1001
  headingClassName,
907
1002
  descriptionClassName,
@@ -909,55 +1004,69 @@ function HeroComingSoonCountdown({
909
1004
  formClassName,
910
1005
  socialLinksClassName
911
1006
  }) {
912
- const renderCountdown = useMemo(() => {
913
- if (countdownSlot) return countdownSlot;
914
- if (!countdownItems || countdownItems.length === 0) return null;
915
- return countdownItems.map((item) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center", children: [
916
- /* @__PURE__ */ jsx("div", { className: cn(
917
- "flex h-16 w-16 items-center justify-center rounded-xl text-3xl font-bold md:h-24 md:w-24 md:text-5xl",
918
- getNestedCardBg(background, "muted"),
919
- getNestedCardTextColor(background)
920
- ), children: item.value }),
921
- /* @__PURE__ */ jsx("span", { className: cn("mt-2 text-sm", getTextColor(background, "muted")), children: item.label })
922
- ] }, item.label));
923
- }, [countdownSlot, countdownItems, background]);
1007
+ const [timeLeft, setTimeLeft] = useState(null);
1008
+ const calculateTimeLeft = useCallback(() => {
1009
+ if (!countdownDate) return null;
1010
+ const now = Date.now();
1011
+ const target = countdownDate.getTime();
1012
+ const diff = target - now;
1013
+ if (diff <= 0) return null;
1014
+ return {
1015
+ days: Math.floor(diff / (1e3 * 60 * 60 * 24)),
1016
+ hours: Math.floor(diff % (1e3 * 60 * 60 * 24) / (1e3 * 60 * 60)),
1017
+ minutes: Math.floor(diff % (1e3 * 60 * 60) / (1e3 * 60)),
1018
+ seconds: Math.floor(diff % (1e3 * 60) / 1e3)
1019
+ };
1020
+ }, [countdownDate]);
1021
+ useEffect(() => {
1022
+ setTimeLeft(calculateTimeLeft());
1023
+ if (!countdownDate) return;
1024
+ const timer = setInterval(() => {
1025
+ const remaining = calculateTimeLeft();
1026
+ setTimeLeft(remaining);
1027
+ if (!remaining) clearInterval(timer);
1028
+ }, 1e3);
1029
+ return () => clearInterval(timer);
1030
+ }, [countdownDate, calculateTimeLeft]);
1031
+ const showCountdown = countdownSlot || timeLeft;
924
1032
  const renderForm = useMemo(() => {
925
1033
  if (formSlot) return formSlot;
926
1034
  if (!submitAction) return null;
927
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = submitAction;
1035
+ const {
1036
+ label,
1037
+ icon,
1038
+ iconAfter,
1039
+ children,
1040
+ className: actionClassName,
1041
+ ...pressableProps
1042
+ } = submitAction;
928
1043
  return /* @__PURE__ */ jsxs(Fragment, { children: [
929
1044
  /* @__PURE__ */ jsx(
930
1045
  Input,
931
1046
  {
932
1047
  type: "email",
933
1048
  placeholder: emailPlaceholder,
934
- className: cn("h-12 flex-1 border-border/50", `${getNestedCardBg(background, "muted")}/30`)
1049
+ className: cn("h-12 flex-1 border-border/50")
935
1050
  }
936
1051
  ),
937
- /* @__PURE__ */ jsx(
938
- Pressable,
939
- {
940
- asButton: true,
941
- className: actionClassName,
942
- ...pressableProps,
943
- children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
944
- icon,
945
- label,
946
- iconAfter
947
- ] })
948
- }
949
- )
1052
+ /* @__PURE__ */ jsx(Pressable, { asButton: true, className: actionClassName, ...pressableProps, children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
1053
+ icon,
1054
+ label,
1055
+ iconAfter
1056
+ ] }) })
950
1057
  ] });
951
1058
  }, [formSlot, submitAction, emailPlaceholder]);
952
1059
  const renderSocialLinks = useMemo(() => {
953
1060
  if (socialLinksSlot) return socialLinksSlot;
954
1061
  if (!socialLinks || socialLinks.length === 0) return null;
955
1062
  return socialLinks.map((link, index) => /* @__PURE__ */ jsx(
956
- Pressable,
1063
+ SocialLinkIcon,
957
1064
  {
958
1065
  href: link.href,
959
- className: cn(getTextColor(background, "muted"), "hover:opacity-80", link.className),
960
- children: link.icon ?? (link.iconName && /* @__PURE__ */ jsx(DynamicIcon, { name: link.iconName, size: 20 }))
1066
+ className: cn("hover:opacity-80", link.className),
1067
+ asButton: true,
1068
+ variant: "outline",
1069
+ size: "icon"
961
1070
  },
962
1071
  index
963
1072
  ));
@@ -965,25 +1074,73 @@ function HeroComingSoonCountdown({
965
1074
  return /* @__PURE__ */ jsx(
966
1075
  Section,
967
1076
  {
968
- className: cn(
969
- "dark relative min-h-screen bg-background py-32",
970
- className
971
- ),
972
- children: /* @__PURE__ */ jsxs("div", { className: cn("container flex flex-col items-center justify-center text-center", containerClassName), children: [
973
- (badgeText || badgeIcon) && /* @__PURE__ */ jsxs("div", { className: cn(
974
- "inline-flex items-center gap-2 rounded-full border border-border/50 px-4 py-2 text-sm",
975
- getNestedCardBg(background, "muted"),
976
- getNestedCardTextColor(background),
977
- badgeClassName
978
- ), children: [
979
- badgeIcon && /* @__PURE__ */ jsx(DynamicIcon, { name: badgeIcon, size: 16, className: getAccentColor(background) }),
1077
+ background,
1078
+ spacing,
1079
+ pattern,
1080
+ patternOpacity,
1081
+ patternClassName,
1082
+ className,
1083
+ containerClassName,
1084
+ children: /* @__PURE__ */ jsxs("div", { className: "pt-8 md:pt-0", children: [
1085
+ (badgeText || badgeIcon) && /* @__PURE__ */ jsxs(Badge, { className: cn("gap-2 px-4 py-2", badgeClassName), children: [
1086
+ badgeIcon && /* @__PURE__ */ jsx(DynamicIcon, { name: badgeIcon, size: 16 }),
980
1087
  /* @__PURE__ */ jsx("span", { children: badgeText })
981
1088
  ] }),
982
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx("h1", { className: cn("mt-8 max-w-3xl text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl", headingClassName), children: heading }) : /* @__PURE__ */ jsx("div", { className: cn("mt-8", headingClassName), children: heading })),
983
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-6 max-w-xl text-lg md:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: cn("mt-6", descriptionClassName), children: description })),
984
- (countdownSlot || countdownItems && countdownItems.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-12 grid grid-cols-4 gap-4 md:gap-8", countdownClassName), children: renderCountdown }),
985
- /* @__PURE__ */ jsx("div", { className: cn("mt-12 flex w-full max-w-md flex-col gap-4 sm:flex-row", formClassName), children: renderForm }),
986
- (socialLinksSlot || socialLinks && socialLinks.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-16 flex items-center gap-6", socialLinksClassName), children: renderSocialLinks })
1089
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
1090
+ "h1",
1091
+ {
1092
+ className: cn(
1093
+ "mt-8 max-w-3xl text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl text-balance",
1094
+ headingClassName
1095
+ ),
1096
+ children: heading
1097
+ }
1098
+ ) : heading),
1099
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
1100
+ "p",
1101
+ {
1102
+ className: cn(
1103
+ "mt-6 max-w-xl text-lg md:text-xl text-balance",
1104
+ descriptionClassName
1105
+ ),
1106
+ children: description
1107
+ }
1108
+ ) : description),
1109
+ showCountdown && /* @__PURE__ */ jsx(
1110
+ "div",
1111
+ {
1112
+ className: cn(
1113
+ "mt-12 grid grid-cols-4 gap-4 md:gap-8",
1114
+ countdownClassName
1115
+ ),
1116
+ children: countdownSlot ?? /* @__PURE__ */ jsxs(Fragment, { children: [
1117
+ /* @__PURE__ */ jsx(CountdownDigit, { value: timeLeft.days, label: "Days" }),
1118
+ /* @__PURE__ */ jsx(CountdownDigit, { value: timeLeft.hours, label: "Hours" }),
1119
+ /* @__PURE__ */ jsx(CountdownDigit, { value: timeLeft.minutes, label: "Minutes" }),
1120
+ /* @__PURE__ */ jsx(CountdownDigit, { value: timeLeft.seconds, label: "Seconds" })
1121
+ ] })
1122
+ }
1123
+ ),
1124
+ /* @__PURE__ */ jsx(
1125
+ "div",
1126
+ {
1127
+ className: cn(
1128
+ "mt-12 flex w-full max-w-md flex-col gap-4 sm:flex-row",
1129
+ formClassName
1130
+ ),
1131
+ children: renderForm
1132
+ }
1133
+ ),
1134
+ (socialLinksSlot || socialLinks && socialLinks.length > 0) && /* @__PURE__ */ jsx(
1135
+ "div",
1136
+ {
1137
+ className: cn(
1138
+ "mt-16 flex items-center gap-6",
1139
+ socialLinksClassName
1140
+ ),
1141
+ children: renderSocialLinks
1142
+ }
1143
+ )
987
1144
  ] })
988
1145
  }
989
1146
  );