@opensite/ui 1.8.2 → 1.8.4

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 (171) hide show
  1. package/dist/about-story-gallery.cjs +3 -30
  2. package/dist/about-story-gallery.d.cts +1 -1
  3. package/dist/about-story-gallery.d.ts +1 -1
  4. package/dist/about-story-gallery.js +3 -30
  5. package/dist/components.d.cts +1 -1
  6. package/dist/components.d.ts +1 -1
  7. package/dist/contact-callback.cjs +526 -273
  8. package/dist/contact-callback.d.cts +39 -59
  9. package/dist/contact-callback.d.ts +39 -59
  10. package/dist/contact-callback.js +528 -274
  11. package/dist/contact-card.cjs +459 -183
  12. package/dist/contact-card.d.cts +26 -49
  13. package/dist/contact-card.d.ts +26 -49
  14. package/dist/contact-card.js +461 -183
  15. package/dist/contact-careers.cjs +614 -510
  16. package/dist/contact-careers.d.cts +32 -55
  17. package/dist/contact-careers.d.ts +32 -55
  18. package/dist/contact-careers.js +616 -510
  19. package/dist/contact-catering.cjs +507 -501
  20. package/dist/contact-catering.d.cts +27 -61
  21. package/dist/contact-catering.d.ts +27 -61
  22. package/dist/contact-catering.js +509 -500
  23. package/dist/contact-consultation.cjs +484 -253
  24. package/dist/contact-consultation.d.cts +29 -56
  25. package/dist/contact-consultation.d.ts +29 -56
  26. package/dist/contact-consultation.js +486 -253
  27. package/dist/contact-dark.cjs +296 -296
  28. package/dist/contact-dark.d.cts +1 -1
  29. package/dist/contact-dark.d.ts +1 -1
  30. package/dist/contact-dark.js +297 -296
  31. package/dist/contact-demo.d.cts +1 -1
  32. package/dist/contact-demo.d.ts +1 -1
  33. package/dist/contact-emergency.d.cts +1 -1
  34. package/dist/contact-emergency.d.ts +1 -1
  35. package/dist/contact-event.d.cts +1 -1
  36. package/dist/contact-event.d.ts +1 -1
  37. package/dist/contact-faq.cjs +247 -250
  38. package/dist/contact-faq.d.cts +1 -1
  39. package/dist/contact-faq.d.ts +1 -1
  40. package/dist/contact-faq.js +248 -250
  41. package/dist/contact-feedback.d.cts +1 -1
  42. package/dist/contact-feedback.d.ts +1 -1
  43. package/dist/contact-fitness.d.cts +1 -1
  44. package/dist/contact-fitness.d.ts +1 -1
  45. package/dist/contact-guest.d.cts +1 -1
  46. package/dist/contact-guest.d.ts +1 -1
  47. package/dist/contact-image.d.cts +1 -1
  48. package/dist/contact-image.d.ts +1 -1
  49. package/dist/contact-insurance.d.cts +1 -1
  50. package/dist/contact-insurance.d.ts +1 -1
  51. package/dist/contact-interview.d.cts +1 -1
  52. package/dist/contact-interview.d.ts +1 -1
  53. package/dist/contact-locations.d.cts +1 -1
  54. package/dist/contact-locations.d.ts +1 -1
  55. package/dist/contact-maintenance.d.cts +1 -1
  56. package/dist/contact-maintenance.d.ts +1 -1
  57. package/dist/contact-map.d.cts +1 -1
  58. package/dist/contact-map.d.ts +1 -1
  59. package/dist/contact-minimal.d.cts +1 -1
  60. package/dist/contact-minimal.d.ts +1 -1
  61. package/dist/contact-moving.d.cts +1 -1
  62. package/dist/contact-moving.d.ts +1 -1
  63. package/dist/contact-multistep.d.cts +1 -1
  64. package/dist/contact-multistep.d.ts +1 -1
  65. package/dist/contact-partnership.d.cts +1 -1
  66. package/dist/contact-partnership.d.ts +1 -1
  67. package/dist/contact-photography.cjs +247 -250
  68. package/dist/contact-photography.d.cts +1 -1
  69. package/dist/contact-photography.d.ts +1 -1
  70. package/dist/contact-photography.js +248 -250
  71. package/dist/contact-press.d.cts +1 -1
  72. package/dist/contact-press.d.ts +1 -1
  73. package/dist/contact-quote.d.cts +1 -1
  74. package/dist/contact-quote.d.ts +1 -1
  75. package/dist/contact-referral.d.cts +1 -1
  76. package/dist/contact-referral.d.ts +1 -1
  77. package/dist/contact-report.d.cts +1 -1
  78. package/dist/contact-report.d.ts +1 -1
  79. package/dist/contact-reservation.d.cts +1 -1
  80. package/dist/contact-reservation.d.ts +1 -1
  81. package/dist/contact-retreat.d.cts +1 -1
  82. package/dist/contact-retreat.d.ts +1 -1
  83. package/dist/contact-rsvp.d.cts +1 -1
  84. package/dist/contact-rsvp.d.ts +1 -1
  85. package/dist/contact-sales.d.cts +1 -1
  86. package/dist/contact-sales.d.ts +1 -1
  87. package/dist/contact-schedule.d.cts +1 -1
  88. package/dist/contact-schedule.d.ts +1 -1
  89. package/dist/contact-sponsorship.d.cts +1 -1
  90. package/dist/contact-sponsorship.d.ts +1 -1
  91. package/dist/contact-support.d.cts +1 -1
  92. package/dist/contact-support.d.ts +1 -1
  93. package/dist/contact-tenant.d.cts +1 -1
  94. package/dist/contact-tenant.d.ts +1 -1
  95. package/dist/contact-vendor.d.cts +1 -1
  96. package/dist/contact-vendor.d.ts +1 -1
  97. package/dist/contact-volunteer.d.cts +1 -1
  98. package/dist/contact-volunteer.d.ts +1 -1
  99. package/dist/contact-warranty.d.cts +1 -1
  100. package/dist/contact-warranty.d.ts +1 -1
  101. package/dist/contact-wedding.d.cts +1 -1
  102. package/dist/contact-wedding.d.ts +1 -1
  103. package/dist/cta-app-download-newsletter.d.cts +1 -1
  104. package/dist/cta-app-download-newsletter.d.ts +1 -1
  105. package/dist/cta-newsletter-features.d.cts +1 -1
  106. package/dist/cta-newsletter-features.d.ts +1 -1
  107. package/dist/footer-accordion-social.d.cts +1 -1
  108. package/dist/footer-accordion-social.d.ts +1 -1
  109. package/dist/footer-newsletter-contact.d.cts +1 -1
  110. package/dist/footer-newsletter-contact.d.ts +1 -1
  111. package/dist/footer-newsletter-minimal.d.cts +1 -1
  112. package/dist/footer-newsletter-minimal.d.ts +1 -1
  113. package/dist/footer-split-image-accordion.d.cts +1 -1
  114. package/dist/footer-split-image-accordion.d.ts +1 -1
  115. package/dist/{forms-nGgHUTBw.d.cts → forms-CStlFhnh.d.cts} +41 -0
  116. package/dist/{forms-nGgHUTBw.d.ts → forms-CStlFhnh.d.ts} +41 -0
  117. package/dist/hero-conversation-intelligence.cjs +1 -2
  118. package/dist/hero-conversation-intelligence.d.cts +1 -5
  119. package/dist/hero-conversation-intelligence.d.ts +1 -5
  120. package/dist/hero-conversation-intelligence.js +1 -2
  121. package/dist/hero-conversion-video-play.cjs +2 -2
  122. package/dist/hero-conversion-video-play.js +2 -2
  123. package/dist/hero-design-system-3d.cjs +162 -82
  124. package/dist/hero-design-system-3d.js +162 -82
  125. package/dist/hero-ecommerce-product-showcase.cjs +103 -81
  126. package/dist/hero-ecommerce-product-showcase.d.cts +5 -1
  127. package/dist/hero-ecommerce-product-showcase.d.ts +5 -1
  128. package/dist/hero-ecommerce-product-showcase.js +103 -81
  129. package/dist/hero-floating-images.cjs +1 -1
  130. package/dist/hero-floating-images.js +1 -1
  131. package/dist/hero-hiring-animated-text.cjs +4 -4
  132. package/dist/hero-hiring-animated-text.js +4 -4
  133. package/dist/hero-minimal-centered-dark.cjs +111 -82
  134. package/dist/hero-minimal-centered-dark.d.cts +1 -1
  135. package/dist/hero-minimal-centered-dark.d.ts +1 -1
  136. package/dist/hero-minimal-centered-dark.js +111 -82
  137. package/dist/hero-mobile-app-download.cjs +1 -1
  138. package/dist/hero-mobile-app-download.js +1 -1
  139. package/dist/hero-overlay-cta-grid.cjs +1 -1
  140. package/dist/hero-overlay-cta-grid.js +1 -1
  141. package/dist/hero-spiral-pattern-cards.cjs +1 -1
  142. package/dist/hero-spiral-pattern-cards.js +1 -1
  143. package/dist/hero-startup-launch-cta.cjs +1 -1
  144. package/dist/hero-startup-launch-cta.js +1 -1
  145. package/dist/hero-stats-social-proof.cjs +106 -90
  146. package/dist/hero-stats-social-proof.js +106 -90
  147. package/dist/hero-testimonial-image-grid.cjs +1 -1
  148. package/dist/hero-testimonial-image-grid.js +1 -1
  149. package/dist/hero-therapy-testimonial-grid.cjs +1 -1
  150. package/dist/hero-therapy-testimonial-grid.js +1 -1
  151. package/dist/hero-ui-library-showcase.cjs +63 -15
  152. package/dist/hero-ui-library-showcase.d.cts +5 -1
  153. package/dist/hero-ui-library-showcase.d.ts +5 -1
  154. package/dist/hero-ui-library-showcase.js +63 -15
  155. package/dist/index.cjs +44 -6
  156. package/dist/index.d.cts +3 -2
  157. package/dist/index.d.ts +3 -2
  158. package/dist/index.js +44 -6
  159. package/dist/link-page-newsletter-social.d.cts +1 -1
  160. package/dist/link-page-newsletter-social.d.ts +1 -1
  161. package/dist/offer-modal-membership-image.d.cts +1 -1
  162. package/dist/offer-modal-membership-image.d.ts +1 -1
  163. package/dist/offer-modal-newsletter-discount.d.cts +1 -1
  164. package/dist/offer-modal-newsletter-discount.d.ts +1 -1
  165. package/dist/offer-modal-sheet-newsletter.d.cts +1 -1
  166. package/dist/offer-modal-sheet-newsletter.d.ts +1 -1
  167. package/dist/registry.cjs +14465 -14767
  168. package/dist/registry.js +12664 -12966
  169. package/dist/resource-list-hero-filter.d.cts +1 -1
  170. package/dist/resource-list-hero-filter.d.ts +1 -1
  171. package/package.json +3 -3
@@ -814,11 +814,11 @@ function HeroHiringAnimatedText({
814
814
  scrollActionSlot,
815
815
  backgroundImage,
816
816
  background,
817
- spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
817
+ spacing = "py-0 md:py-0",
818
818
  pattern,
819
819
  patternOpacity,
820
820
  className,
821
- containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
821
+ containerClassName = "mx-auto h-screen w-full max-w-7xl relative z-10 px-6 md:px-16 lg:px-32 pb-12 md:pb-18",
822
822
  contentClassName,
823
823
  headingClassName,
824
824
  descriptionClassName,
@@ -924,11 +924,11 @@ function HeroHiringAnimatedText({
924
924
  ),
925
925
  containerClassName,
926
926
  style: { backgroundImage: `url('${backgroundImage}')` },
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(
927
+ children: /* @__PURE__ */ jsx("div", { className: "relative z-10 flex size-full max-w-md flex-col justify-between md:justify-end", children: /* @__PURE__ */ jsxs(
928
928
  "div",
929
929
  {
930
930
  className: cn(
931
- "flex h-full flex-col justify-between gap-6 md:justify-end max-w-full md:max-w-md",
931
+ "flex h-full flex-col gap-6 justify-end max-w-full md:max-w-md",
932
932
  contentClassName
933
933
  ),
934
934
  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;
@@ -31,58 +32,6 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
31
32
  function cn(...inputs) {
32
33
  return tailwindMerge.twMerge(clsx.clsx(inputs));
33
34
  }
34
- function getNestedCardBg(parentBg, variant = "muted", options) {
35
- const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
36
- if (isDark) {
37
- switch (variant) {
38
- case "muted":
39
- return "bg-background";
40
- case "card":
41
- return "bg-card";
42
- case "accent":
43
- return "bg-accent";
44
- case "subtle":
45
- return "bg-background/50";
46
- }
47
- } else {
48
- switch (variant) {
49
- case "muted":
50
- return "bg-muted";
51
- case "card":
52
- return "bg-card";
53
- case "accent":
54
- return "bg-accent";
55
- case "subtle":
56
- return "bg-muted/50";
57
- }
58
- }
59
- }
60
- function getTextColor(parentBg, variant = "default", options) {
61
- const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
62
- if (isDark) {
63
- switch (variant) {
64
- case "default":
65
- return "text-foreground";
66
- case "muted":
67
- return "text-foreground/80";
68
- case "subtle":
69
- return "text-foreground/60";
70
- case "accent":
71
- return "text-accent-foreground";
72
- }
73
- } else {
74
- switch (variant) {
75
- case "default":
76
- return "text-foreground";
77
- case "muted":
78
- return "text-muted-foreground";
79
- case "subtle":
80
- return "text-muted-foreground/70";
81
- case "accent":
82
- return "text-primary";
83
- }
84
- }
85
- }
86
35
  function normalizePhoneNumber(input) {
87
36
  const trimmed = input.trim();
88
37
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -876,9 +825,40 @@ var Section = React__namespace.default.forwardRef(
876
825
  }
877
826
  );
878
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
+ }
879
860
  function HeroMinimalCenteredDark({
880
861
  badge,
881
- showStatusDot = true,
882
862
  heading,
883
863
  headingHighlight,
884
864
  description,
@@ -887,11 +867,11 @@ function HeroMinimalCenteredDark({
887
867
  stats,
888
868
  statsSlot,
889
869
  background,
890
- spacing,
870
+ spacing = "pt-32 pb-8 md:pt-32 md:pb-32",
891
871
  pattern,
892
872
  patternOpacity,
893
873
  className,
894
- containerClassName,
874
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
895
875
  badgeClassName,
896
876
  headingClassName,
897
877
  descriptionClassName,
@@ -902,7 +882,14 @@ function HeroMinimalCenteredDark({
902
882
  if (actionsSlot) return actionsSlot;
903
883
  if (!actions || actions.length === 0) return null;
904
884
  return actions.map((action, index) => {
905
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
885
+ const {
886
+ label,
887
+ icon,
888
+ iconAfter,
889
+ children,
890
+ className: actionClassName,
891
+ ...pressableProps
892
+ } = action;
906
893
  return /* @__PURE__ */ jsxRuntime.jsx(
907
894
  Pressable,
908
895
  {
@@ -922,36 +909,78 @@ function HeroMinimalCenteredDark({
922
909
  const renderStats = React.useMemo(() => {
923
910
  if (statsSlot) return statsSlot;
924
911
  if (!stats || stats.length === 0) return null;
925
- return stats.map((stat, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-2", stat.className), children: [
926
- stat.icon,
927
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: stat.value })
928
- ] }, index));
912
+ return stats.map((stat, index) => /* @__PURE__ */ jsxRuntime.jsxs(
913
+ "div",
914
+ {
915
+ className: cn("flex items-center gap-2", stat.className),
916
+ children: [
917
+ stat.icon,
918
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: stat.value })
919
+ ]
920
+ },
921
+ index
922
+ ));
929
923
  }, [statsSlot, stats]);
930
924
  return /* @__PURE__ */ jsxRuntime.jsx(
931
925
  Section,
932
926
  {
933
- className: cn(
934
- "dark relative min-h-screen bg-background py-32",
935
- className
936
- ),
937
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("container flex flex-col items-center justify-center text-center", containerClassName), children: [
938
- badge && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("inline-flex items-center gap-2 rounded-full border border-border/50 px-4 py-2 text-sm", `${getNestedCardBg(background, "muted")}/30`, getTextColor(background, "muted"), badgeClassName), children: [
939
- showStatusDot && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "relative flex h-2 w-2", children: [
940
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute inline-flex h-full w-full animate-ping rounded-full bg-success opacity-75" }),
941
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "relative inline-flex h-2 w-2 rounded-full bg-success" })
942
- ] }),
943
- typeof badge === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { children: badge }) : badge
944
- ] }),
945
- (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: [
946
- "The future of",
947
- " ",
948
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "bg-linear-to-r from-blue-400 to-violet-400 bg-clip-text text-transparent", children: headingHighlight }),
949
- " ",
950
- "is here"
951
- ] }) : null),
952
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mt-6 max-w-2xl text-lg md:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
953
- (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-10 flex flex-col gap-4 sm:flex-row", actionsClassName), children: renderActions }),
954
- (statsSlot || stats && stats.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-16 flex items-center gap-8 text-sm", getTextColor(background, "muted"), statsClassName), children: renderStats })
927
+ background,
928
+ spacing,
929
+ pattern,
930
+ patternOpacity,
931
+ className,
932
+ containerClassName,
933
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
934
+ badge && /* @__PURE__ */ jsxRuntime.jsx(Badge, { className: cn("px-3 py-2", badgeClassName), children: typeof badge === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { children: badge }) : badge }),
935
+ (heading || headingHighlight) && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
936
+ "h1",
937
+ {
938
+ className: cn(
939
+ "mt-8 max-w-4xl text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl text-balance",
940
+ headingClassName
941
+ ),
942
+ children: heading
943
+ }
944
+ ) : heading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading }) : headingHighlight ? /* @__PURE__ */ jsxRuntime.jsx(
945
+ "h1",
946
+ {
947
+ className: cn(
948
+ "mt-8 max-w-4xl text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl text-balance",
949
+ headingClassName
950
+ ),
951
+ children: headingHighlight
952
+ }
953
+ ) : null),
954
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
955
+ "p",
956
+ {
957
+ className: cn(
958
+ "mt-6 max-w-2xl text-lg md:text-xl text-balance",
959
+ descriptionClassName
960
+ ),
961
+ children: description
962
+ }
963
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
964
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx(
965
+ "div",
966
+ {
967
+ className: cn(
968
+ "mt-6 md:mt-10 flex flex-col gap-4 md:flex-row",
969
+ actionsClassName
970
+ ),
971
+ children: renderActions
972
+ }
973
+ ),
974
+ (statsSlot || stats && stats.length > 0) && /* @__PURE__ */ jsxRuntime.jsx(
975
+ "div",
976
+ {
977
+ className: cn(
978
+ "mt-16 flex items-center gap-8 text-sm",
979
+ statsClassName
980
+ ),
981
+ children: renderStats
982
+ }
983
+ )
955
984
  ] })
956
985
  }
957
986
  );
@@ -87,6 +87,6 @@ interface HeroMinimalCenteredDarkProps {
87
87
  */
88
88
  statsClassName?: string;
89
89
  }
90
- declare function HeroMinimalCenteredDark({ badge, showStatusDot, heading, headingHighlight, description, actions, actionsSlot, stats, statsSlot, background, spacing, pattern, patternOpacity, className, containerClassName, badgeClassName, headingClassName, descriptionClassName, actionsClassName, statsClassName, }: HeroMinimalCenteredDarkProps): React.JSX.Element;
90
+ declare function HeroMinimalCenteredDark({ badge, heading, headingHighlight, description, actions, actionsSlot, stats, statsSlot, background, spacing, pattern, patternOpacity, className, containerClassName, badgeClassName, headingClassName, descriptionClassName, actionsClassName, statsClassName, }: HeroMinimalCenteredDarkProps): React.JSX.Element;
91
91
 
92
92
  export { HeroMinimalCenteredDark, type HeroMinimalCenteredDarkProps };
@@ -87,6 +87,6 @@ interface HeroMinimalCenteredDarkProps {
87
87
  */
88
88
  statsClassName?: string;
89
89
  }
90
- declare function HeroMinimalCenteredDark({ badge, showStatusDot, heading, headingHighlight, description, actions, actionsSlot, stats, statsSlot, background, spacing, pattern, patternOpacity, className, containerClassName, badgeClassName, headingClassName, descriptionClassName, actionsClassName, statsClassName, }: HeroMinimalCenteredDarkProps): React.JSX.Element;
90
+ declare function HeroMinimalCenteredDark({ badge, heading, headingHighlight, description, actions, actionsSlot, stats, statsSlot, background, spacing, pattern, patternOpacity, className, containerClassName, badgeClassName, headingClassName, descriptionClassName, actionsClassName, statsClassName, }: HeroMinimalCenteredDarkProps): React.JSX.Element;
91
91
 
92
92
  export { HeroMinimalCenteredDark, type HeroMinimalCenteredDarkProps };
@@ -5,63 +5,12 @@ 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-minimal-centered-dark.tsx
10
11
  function cn(...inputs) {
11
12
  return twMerge(clsx(inputs));
12
13
  }
13
- function getNestedCardBg(parentBg, variant = "muted", options) {
14
- const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
15
- if (isDark) {
16
- switch (variant) {
17
- case "muted":
18
- return "bg-background";
19
- case "card":
20
- return "bg-card";
21
- case "accent":
22
- return "bg-accent";
23
- case "subtle":
24
- return "bg-background/50";
25
- }
26
- } else {
27
- switch (variant) {
28
- case "muted":
29
- return "bg-muted";
30
- case "card":
31
- return "bg-card";
32
- case "accent":
33
- return "bg-accent";
34
- case "subtle":
35
- return "bg-muted/50";
36
- }
37
- }
38
- }
39
- function getTextColor(parentBg, variant = "default", options) {
40
- const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
41
- if (isDark) {
42
- switch (variant) {
43
- case "default":
44
- return "text-foreground";
45
- case "muted":
46
- return "text-foreground/80";
47
- case "subtle":
48
- return "text-foreground/60";
49
- case "accent":
50
- return "text-accent-foreground";
51
- }
52
- } else {
53
- switch (variant) {
54
- case "default":
55
- return "text-foreground";
56
- case "muted":
57
- return "text-muted-foreground";
58
- case "subtle":
59
- return "text-muted-foreground/70";
60
- case "accent":
61
- return "text-primary";
62
- }
63
- }
64
- }
65
14
  function normalizePhoneNumber(input) {
66
15
  const trimmed = input.trim();
67
16
  if (trimmed.toLowerCase().startsWith("tel:")) {
@@ -855,9 +804,40 @@ var Section = React__default.forwardRef(
855
804
  }
856
805
  );
857
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
+ }
858
839
  function HeroMinimalCenteredDark({
859
840
  badge,
860
- showStatusDot = true,
861
841
  heading,
862
842
  headingHighlight,
863
843
  description,
@@ -866,11 +846,11 @@ function HeroMinimalCenteredDark({
866
846
  stats,
867
847
  statsSlot,
868
848
  background,
869
- spacing,
849
+ spacing = "pt-32 pb-8 md:pt-32 md:pb-32",
870
850
  pattern,
871
851
  patternOpacity,
872
852
  className,
873
- containerClassName,
853
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
874
854
  badgeClassName,
875
855
  headingClassName,
876
856
  descriptionClassName,
@@ -881,7 +861,14 @@ function HeroMinimalCenteredDark({
881
861
  if (actionsSlot) return actionsSlot;
882
862
  if (!actions || actions.length === 0) return null;
883
863
  return actions.map((action, index) => {
884
- const { label, icon, iconAfter, children, className: actionClassName, ...pressableProps } = action;
864
+ const {
865
+ label,
866
+ icon,
867
+ iconAfter,
868
+ children,
869
+ className: actionClassName,
870
+ ...pressableProps
871
+ } = action;
885
872
  return /* @__PURE__ */ jsx(
886
873
  Pressable,
887
874
  {
@@ -901,36 +888,78 @@ function HeroMinimalCenteredDark({
901
888
  const renderStats = useMemo(() => {
902
889
  if (statsSlot) return statsSlot;
903
890
  if (!stats || stats.length === 0) return null;
904
- return stats.map((stat, index) => /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2", stat.className), children: [
905
- stat.icon,
906
- /* @__PURE__ */ jsx("span", { children: stat.value })
907
- ] }, index));
891
+ return stats.map((stat, index) => /* @__PURE__ */ jsxs(
892
+ "div",
893
+ {
894
+ className: cn("flex items-center gap-2", stat.className),
895
+ children: [
896
+ stat.icon,
897
+ /* @__PURE__ */ jsx("span", { children: stat.value })
898
+ ]
899
+ },
900
+ index
901
+ ));
908
902
  }, [statsSlot, stats]);
909
903
  return /* @__PURE__ */ jsx(
910
904
  Section,
911
905
  {
912
- className: cn(
913
- "dark relative min-h-screen bg-background py-32",
914
- className
915
- ),
916
- children: /* @__PURE__ */ jsxs("div", { className: cn("container flex flex-col items-center justify-center text-center", containerClassName), children: [
917
- badge && /* @__PURE__ */ jsxs("div", { className: cn("inline-flex items-center gap-2 rounded-full border border-border/50 px-4 py-2 text-sm", `${getNestedCardBg(background, "muted")}/30`, getTextColor(background, "muted"), badgeClassName), children: [
918
- showStatusDot && /* @__PURE__ */ jsxs("span", { className: "relative flex h-2 w-2", children: [
919
- /* @__PURE__ */ jsx("span", { className: "absolute inline-flex h-full w-full animate-ping rounded-full bg-success opacity-75" }),
920
- /* @__PURE__ */ jsx("span", { className: "relative inline-flex h-2 w-2 rounded-full bg-success" })
921
- ] }),
922
- typeof badge === "string" ? /* @__PURE__ */ jsx("span", { children: badge }) : badge
923
- ] }),
924
- (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: [
925
- "The future of",
926
- " ",
927
- /* @__PURE__ */ jsx("span", { className: "bg-linear-to-r from-blue-400 to-violet-400 bg-clip-text text-transparent", children: headingHighlight }),
928
- " ",
929
- "is here"
930
- ] }) : null),
931
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("mt-6 max-w-2xl text-lg md:text-xl", getTextColor(background, "muted"), descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
932
- (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-10 flex flex-col gap-4 sm:flex-row", actionsClassName), children: renderActions }),
933
- (statsSlot || stats && stats.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("mt-16 flex items-center gap-8 text-sm", getTextColor(background, "muted"), statsClassName), children: renderStats })
906
+ background,
907
+ spacing,
908
+ pattern,
909
+ patternOpacity,
910
+ className,
911
+ containerClassName,
912
+ children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
913
+ badge && /* @__PURE__ */ jsx(Badge, { className: cn("px-3 py-2", badgeClassName), children: typeof badge === "string" ? /* @__PURE__ */ jsx("span", { children: badge }) : badge }),
914
+ (heading || headingHighlight) && (typeof heading === "string" ? /* @__PURE__ */ jsx(
915
+ "h1",
916
+ {
917
+ className: cn(
918
+ "mt-8 max-w-4xl text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl text-balance",
919
+ headingClassName
920
+ ),
921
+ children: heading
922
+ }
923
+ ) : heading ? /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading }) : headingHighlight ? /* @__PURE__ */ jsx(
924
+ "h1",
925
+ {
926
+ className: cn(
927
+ "mt-8 max-w-4xl text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl text-balance",
928
+ headingClassName
929
+ ),
930
+ children: headingHighlight
931
+ }
932
+ ) : null),
933
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
934
+ "p",
935
+ {
936
+ className: cn(
937
+ "mt-6 max-w-2xl text-lg md:text-xl text-balance",
938
+ descriptionClassName
939
+ ),
940
+ children: description
941
+ }
942
+ ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
943
+ (actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx(
944
+ "div",
945
+ {
946
+ className: cn(
947
+ "mt-6 md:mt-10 flex flex-col gap-4 md:flex-row",
948
+ actionsClassName
949
+ ),
950
+ children: renderActions
951
+ }
952
+ ),
953
+ (statsSlot || stats && stats.length > 0) && /* @__PURE__ */ jsx(
954
+ "div",
955
+ {
956
+ className: cn(
957
+ "mt-16 flex items-center gap-8 text-sm",
958
+ statsClassName
959
+ ),
960
+ children: renderStats
961
+ }
962
+ )
934
963
  ] })
935
964
  }
936
965
  );
@@ -980,7 +980,7 @@ function HeroMobileAppDownload({
980
980
  notificationSlot,
981
981
  background,
982
982
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
983
- spacing = "py-32 md:py-32",
983
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
984
984
  pattern,
985
985
  patternOpacity,
986
986
  className,
@@ -959,7 +959,7 @@ function HeroMobileAppDownload({
959
959
  notificationSlot,
960
960
  background,
961
961
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
962
- spacing = "py-32 md:py-32",
962
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
963
963
  pattern,
964
964
  patternOpacity,
965
965
  className,
@@ -943,7 +943,7 @@ function HeroOverlayCtaGrid({
943
943
  cards,
944
944
  cardsSlot,
945
945
  backgroundImage,
946
- backgroundAlt = "OpenSite AI coverage advisory hero background",
946
+ backgroundAlt,
947
947
  backgroundSlot,
948
948
  background,
949
949
  spacing = "none",
@@ -922,7 +922,7 @@ function HeroOverlayCtaGrid({
922
922
  cards,
923
923
  cardsSlot,
924
924
  backgroundImage,
925
- backgroundAlt = "OpenSite AI coverage advisory hero background",
925
+ backgroundAlt,
926
926
  backgroundSlot,
927
927
  background,
928
928
  spacing = "none",
@@ -868,7 +868,7 @@ function HeroSpiralPatternCards({
868
868
  imagesSlot,
869
869
  optixFlowConfig,
870
870
  background,
871
- spacing = "py-32 md:py-32",
871
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
872
872
  pattern,
873
873
  patternOpacity,
874
874
  className,
@@ -847,7 +847,7 @@ function HeroSpiralPatternCards({
847
847
  imagesSlot,
848
848
  optixFlowConfig,
849
849
  background,
850
- spacing = "py-32 md:py-32",
850
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
851
851
  pattern,
852
852
  patternOpacity,
853
853
  className,
@@ -878,7 +878,7 @@ function HeroStartupLaunchCta({
878
878
  patternClassName,
879
879
  className,
880
880
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
881
- spacing = "py-12 md:py-32",
881
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
882
882
  contentClassName,
883
883
  badgeClassName,
884
884
  headingClassName,
@@ -857,7 +857,7 @@ function HeroStartupLaunchCta({
857
857
  patternClassName,
858
858
  className,
859
859
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
860
- spacing = "py-12 md:py-32",
860
+ spacing = "pt-28 pb-8 md:pt-32 md:pb-32",
861
861
  contentClassName,
862
862
  badgeClassName,
863
863
  headingClassName,