@opensite/ui 2.0.8 → 2.1.0

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 (43) hide show
  1. package/dist/hero-agency-animated-images.cjs +4 -4
  2. package/dist/hero-agency-animated-images.js +4 -4
  3. package/dist/hero-business-carousel-dots.cjs +46 -36
  4. package/dist/hero-business-carousel-dots.js +46 -36
  5. package/dist/hero-coming-soon-countdown.cjs +93 -54
  6. package/dist/hero-coming-soon-countdown.d.cts +31 -6
  7. package/dist/hero-coming-soon-countdown.d.ts +31 -6
  8. package/dist/hero-coming-soon-countdown.js +93 -54
  9. package/dist/hero-creative-studio-stacked.cjs +9 -6
  10. package/dist/hero-creative-studio-stacked.d.cts +5 -1
  11. package/dist/hero-creative-studio-stacked.d.ts +5 -1
  12. package/dist/hero-creative-studio-stacked.js +9 -6
  13. package/dist/hero-customer-support-layered.cjs +1 -1
  14. package/dist/hero-customer-support-layered.js +1 -1
  15. package/dist/hero-developer-tools-code.cjs +2 -2
  16. package/dist/hero-developer-tools-code.js +2 -2
  17. package/dist/hero-digital-agency-fullscreen.cjs +14 -12
  18. package/dist/hero-digital-agency-fullscreen.d.cts +1 -1
  19. package/dist/hero-digital-agency-fullscreen.d.ts +1 -1
  20. package/dist/hero-digital-agency-fullscreen.js +14 -12
  21. package/dist/hero-ecommerce-product-showcase.cjs +76 -57
  22. package/dist/hero-ecommerce-product-showcase.js +76 -57
  23. package/dist/hero-enterprise-security.cjs +81 -60
  24. package/dist/hero-enterprise-security.js +81 -60
  25. package/dist/hero-event-registration.cjs +43 -10
  26. package/dist/hero-event-registration.js +43 -10
  27. package/dist/hero-hiring-animated-text.cjs +661 -639
  28. package/dist/hero-hiring-animated-text.d.cts +1 -9
  29. package/dist/hero-hiring-animated-text.d.ts +1 -9
  30. package/dist/hero-hiring-animated-text.js +657 -635
  31. package/dist/hero-saas-dashboard-preview.cjs +88 -46
  32. package/dist/hero-saas-dashboard-preview.d.cts +34 -19
  33. package/dist/hero-saas-dashboard-preview.d.ts +34 -19
  34. package/dist/hero-saas-dashboard-preview.js +89 -47
  35. package/dist/hero-split-image-newsletter.cjs +91 -49
  36. package/dist/hero-split-image-newsletter.d.cts +33 -18
  37. package/dist/hero-split-image-newsletter.d.ts +33 -18
  38. package/dist/hero-split-image-newsletter.js +92 -50
  39. package/dist/hero-startup-launch-cta.cjs +2 -2
  40. package/dist/hero-startup-launch-cta.js +2 -2
  41. package/dist/registry.cjs +556 -345
  42. package/dist/registry.js +556 -345
  43. package/package.json +1 -1
package/dist/registry.js CHANGED
@@ -55833,15 +55833,13 @@ function HeroHiringAnimatedText({
55833
55833
  description,
55834
55834
  actions,
55835
55835
  actionsSlot,
55836
- scrollAction,
55837
- scrollActionSlot,
55838
55836
  backgroundImage,
55839
55837
  background,
55840
- spacing = "py-0 md:py-0",
55841
55838
  pattern,
55842
55839
  patternOpacity,
55843
55840
  className,
55844
- 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",
55841
+ spacing = "py-0 md:py-0",
55842
+ containerClassName = "sm:px-4 mx-auto h-screen w-full max-w-7xl relative z-10 px-6 pb-12 md:pb-18",
55845
55843
  contentClassName,
55846
55844
  headingClassName,
55847
55845
  descriptionClassName,
@@ -55889,51 +55887,6 @@ function HeroHiringAnimatedText({
55889
55887
  headingClassName,
55890
55888
  activeIndex
55891
55889
  ]);
55892
- const renderActions = useMemo(() => {
55893
- if (actionsSlot) return actionsSlot;
55894
- if (!actions || actions.length === 0) return null;
55895
- return /* @__PURE__ */ jsx("div", { className: cn("flex flex-col md:flex-row gap-4", actionsClassName), children: actions.map((action, index) => {
55896
- const {
55897
- label,
55898
- icon,
55899
- iconAfter,
55900
- children,
55901
- className: actionClassName,
55902
- ...pressableProps
55903
- } = action;
55904
- return /* @__PURE__ */ jsx(
55905
- Pressable,
55906
- {
55907
- asButton: true,
55908
- className: actionClassName,
55909
- ...pressableProps,
55910
- children: children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
55911
- icon,
55912
- label,
55913
- iconAfter
55914
- ] })
55915
- },
55916
- index
55917
- );
55918
- }) });
55919
- }, [actionsSlot, actions, actionsClassName]);
55920
- const renderScrollAction = useMemo(() => {
55921
- if (scrollActionSlot) return scrollActionSlot;
55922
- if (!scrollAction) return null;
55923
- const {
55924
- label,
55925
- icon,
55926
- iconAfter,
55927
- children,
55928
- className: actionClassName,
55929
- ...pressableProps
55930
- } = scrollAction;
55931
- return /* @__PURE__ */ jsx(Pressable, { asButton: true, className: actionClassName, ...pressableProps, children: children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
55932
- icon,
55933
- /* @__PURE__ */ jsx("div", { children: label }),
55934
- iconAfter
55935
- ] }) });
55936
- }, [scrollActionSlot, scrollAction]);
55937
55890
  return /* @__PURE__ */ jsx(
55938
55891
  Section,
55939
55892
  {
@@ -55956,7 +55909,7 @@ function HeroHiringAnimatedText({
55956
55909
  ),
55957
55910
  children: [
55958
55911
  renderHeading,
55959
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-8", children: [
55912
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center md:items-start flex-col gap-8", children: [
55960
55913
  description && (typeof description === "string" ? /* @__PURE__ */ jsx(
55961
55914
  "p",
55962
55915
  {
@@ -55967,10 +55920,15 @@ function HeroHiringAnimatedText({
55967
55920
  children: description
55968
55921
  }
55969
55922
  ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
55970
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4", children: [
55971
- renderActions,
55972
- renderScrollAction
55973
- ] })
55923
+ /* @__PURE__ */ jsx(
55924
+ BlockActions,
55925
+ {
55926
+ actions,
55927
+ actionsSlot,
55928
+ actionsClassName,
55929
+ mobileConfig: { width: "full", position: "center" }
55930
+ }
55931
+ )
55974
55932
  ] })
55975
55933
  ]
55976
55934
  }
@@ -55978,11 +55936,28 @@ function HeroHiringAnimatedText({
55978
55936
  }
55979
55937
  );
55980
55938
  }
55939
+ var DEFAULT_FORM_FIELDS41 = [
55940
+ {
55941
+ name: "email",
55942
+ type: "email",
55943
+ label: "Email Address",
55944
+ placeholder: "Enter your email",
55945
+ required: true,
55946
+ columnSpan: 12
55947
+ }
55948
+ ];
55981
55949
  function HeroSplitImageNewsletter({
55982
55950
  heading,
55983
55951
  description,
55984
- newsletterForm,
55985
- newsletterFormSlot,
55952
+ formFields = DEFAULT_FORM_FIELDS41,
55953
+ formConfig,
55954
+ onSubmit,
55955
+ onSuccess,
55956
+ onError,
55957
+ successMessage,
55958
+ buttonAction,
55959
+ helperText,
55960
+ formSlot,
55986
55961
  image,
55987
55962
  imageSlot,
55988
55963
  background,
@@ -55997,36 +55972,75 @@ function HeroSplitImageNewsletter({
55997
55972
  imageClassName,
55998
55973
  optixFlowConfig
55999
55974
  }) {
56000
- const renderNewsletterForm = useMemo(() => {
56001
- if (newsletterFormSlot) return newsletterFormSlot;
56002
- if (!newsletterForm) return null;
56003
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [
56004
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 sm:flex-row", children: [
56005
- /* @__PURE__ */ jsx(
56006
- Input,
56007
- {
56008
- type: "email",
56009
- placeholder: newsletterForm.placeholder,
56010
- className: "h-12 flex-1 rounded-full px-6"
56011
- }
56012
- ),
56013
- newsletterForm.action && /* @__PURE__ */ jsxs(
56014
- Pressable,
56015
- {
56016
- href: newsletterForm.action.href,
56017
- asButton: true,
56018
- variant: newsletterForm.action.variant,
56019
- className: newsletterForm.action.className,
56020
- children: [
56021
- newsletterForm.action.label,
56022
- newsletterForm.action.iconAfter
56023
- ]
56024
- }
56025
- )
56026
- ] }),
56027
- newsletterForm.helperText && (typeof newsletterForm.helperText === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm"), children: newsletterForm.helperText }) : newsletterForm.helperText)
56028
- ] });
56029
- }, [newsletterFormSlot, newsletterForm]);
55975
+ const { uploadTokens, uploadProgress, isUploading, uploadFiles, removeFile, resetUpload } = useFileUpload({ onError });
55976
+ const { form, submissionError, formMethod, resetSubmissionState } = useContactForm({
55977
+ formFields,
55978
+ formConfig,
55979
+ onSubmit,
55980
+ onSuccess: (data) => {
55981
+ resetUpload();
55982
+ onSuccess?.(data);
55983
+ },
55984
+ onError,
55985
+ uploadTokens
55986
+ });
55987
+ const renderForm = useMemo(() => {
55988
+ if (formSlot) return formSlot;
55989
+ const defaultButtonAction = {
55990
+ label: "Subscribe",
55991
+ variant: "default",
55992
+ className: "h-12"
55993
+ };
55994
+ const action = buttonAction || defaultButtonAction;
55995
+ return /* @__PURE__ */ jsxs(
55996
+ Form,
55997
+ {
55998
+ form,
55999
+ notificationConfig: {
56000
+ submissionError,
56001
+ successMessage
56002
+ },
56003
+ formConfig: {
56004
+ endpoint: formConfig?.endpoint,
56005
+ method: formMethod,
56006
+ submissionConfig: formConfig?.submissionConfig
56007
+ },
56008
+ onNewSubmission: () => {
56009
+ resetUpload();
56010
+ resetSubmissionState();
56011
+ },
56012
+ children: [
56013
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 sm:flex-row", children: [
56014
+ formFields.map((field) => /* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(
56015
+ DynamicFormField,
56016
+ {
56017
+ field,
56018
+ uploadProgress,
56019
+ onFileUpload: uploadFiles,
56020
+ onFileRemove: removeFile,
56021
+ isUploading
56022
+ }
56023
+ ) }, field.name)),
56024
+ /* @__PURE__ */ jsxs(
56025
+ Pressable,
56026
+ {
56027
+ onClick: form.handleSubmit,
56028
+ asButton: true,
56029
+ variant: action.variant,
56030
+ className: cn("h-12", action.className),
56031
+ disabled: form.isSubmitting,
56032
+ children: [
56033
+ action.label,
56034
+ action.iconAfter
56035
+ ]
56036
+ }
56037
+ )
56038
+ ] }),
56039
+ helperText && (typeof helperText === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm mt-2"), children: helperText }) : helperText)
56040
+ ]
56041
+ }
56042
+ );
56043
+ }, [formSlot, formFields, form, formConfig, formMethod, buttonAction, uploadProgress, uploadFiles, removeFile, isUploading, submissionError, successMessage, helperText, resetUpload, resetSubmissionState]);
56030
56044
  const renderImage = useMemo(() => {
56031
56045
  if (imageSlot) return imageSlot;
56032
56046
  if (!image) return null;
@@ -56091,7 +56105,7 @@ function HeroSplitImageNewsletter({
56091
56105
  children: description
56092
56106
  }
56093
56107
  ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
56094
- renderNewsletterForm
56108
+ renderForm
56095
56109
  ]
56096
56110
  }
56097
56111
  ),
@@ -57397,14 +57411,31 @@ function HeroProductShowcaseFloating({
57397
57411
  }
57398
57412
  );
57399
57413
  }
57414
+ var DEFAULT_FORM_FIELDS42 = [
57415
+ {
57416
+ name: "email",
57417
+ type: "email",
57418
+ label: "Email Address",
57419
+ placeholder: "Enter your email",
57420
+ required: true,
57421
+ columnSpan: 12
57422
+ }
57423
+ ];
57400
57424
  function HeroSaasDashboardPreview({
57401
57425
  badgeText,
57402
57426
  badgeIcon,
57403
57427
  badgeSlot,
57404
57428
  heading,
57405
57429
  description,
57406
- emailForm,
57407
- emailFormSlot,
57430
+ formFields = DEFAULT_FORM_FIELDS42,
57431
+ formConfig,
57432
+ onSubmit,
57433
+ onSuccess,
57434
+ onError,
57435
+ successMessage,
57436
+ buttonAction,
57437
+ helperText,
57438
+ formSlot,
57408
57439
  browserPreview,
57409
57440
  browserPreviewSlot,
57410
57441
  background,
@@ -57419,6 +57450,18 @@ function HeroSaasDashboardPreview({
57419
57450
  previewClassName,
57420
57451
  optixFlowConfig
57421
57452
  }) {
57453
+ const { uploadTokens, uploadProgress, isUploading, uploadFiles, removeFile, resetUpload } = useFileUpload({ onError });
57454
+ const { form, submissionError, formMethod, resetSubmissionState } = useContactForm({
57455
+ formFields,
57456
+ formConfig,
57457
+ onSubmit,
57458
+ onSuccess: (data) => {
57459
+ resetUpload();
57460
+ onSuccess?.(data);
57461
+ },
57462
+ onError,
57463
+ uploadTokens
57464
+ });
57422
57465
  const renderBadge = useMemo(() => {
57423
57466
  if (badgeSlot) return badgeSlot;
57424
57467
  return /* @__PURE__ */ jsxs(
@@ -57434,33 +57477,60 @@ function HeroSaasDashboardPreview({
57434
57477
  }
57435
57478
  );
57436
57479
  }, [badgeSlot, badgeIcon, badgeText]);
57437
- const renderEmailForm = useMemo(() => {
57438
- if (emailFormSlot) return emailFormSlot;
57439
- if (!emailForm) return null;
57440
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [
57441
- /* @__PURE__ */ jsx("div", { className: "mt-10 flex flex-col items-center gap-4 sm:flex-row sm:justify-center", children: /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-md items-center gap-2", children: [
57442
- /* @__PURE__ */ jsx(
57443
- Input,
57444
- {
57445
- type: "email",
57446
- placeholder: emailForm.placeholder,
57447
- className: "h-12 flex-1"
57448
- }
57449
- ),
57450
- emailForm.action && /* @__PURE__ */ jsx(
57451
- Pressable,
57452
- {
57453
- href: emailForm.action.href,
57454
- asButton: true,
57455
- variant: emailForm.action.variant,
57456
- className: emailForm.action.className,
57457
- children: emailForm.action.label
57458
- }
57459
- )
57460
- ] }) }),
57461
- emailForm.helperText && (typeof emailForm.helperText === "string" ? /* @__PURE__ */ jsx("p", { className: "mt-4 text-sm", children: emailForm.helperText }) : emailForm.helperText)
57462
- ] });
57463
- }, [emailFormSlot, emailForm]);
57480
+ const renderForm = useMemo(() => {
57481
+ if (formSlot) return formSlot;
57482
+ const defaultButtonAction = {
57483
+ label: "Start Free Trial",
57484
+ variant: "default",
57485
+ className: "h-12"
57486
+ };
57487
+ const action = buttonAction || defaultButtonAction;
57488
+ return /* @__PURE__ */ jsxs(
57489
+ Form,
57490
+ {
57491
+ form,
57492
+ notificationConfig: {
57493
+ submissionError,
57494
+ successMessage
57495
+ },
57496
+ formConfig: {
57497
+ endpoint: formConfig?.endpoint,
57498
+ method: formMethod,
57499
+ submissionConfig: formConfig?.submissionConfig
57500
+ },
57501
+ onNewSubmission: () => {
57502
+ resetUpload();
57503
+ resetSubmissionState();
57504
+ },
57505
+ children: [
57506
+ /* @__PURE__ */ jsx("div", { className: "mt-10 flex flex-col items-center gap-4 sm:flex-row sm:justify-center", children: /* @__PURE__ */ jsxs("div", { className: "flex w-full max-w-md items-center gap-2", children: [
57507
+ formFields.map((field) => /* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(
57508
+ DynamicFormField,
57509
+ {
57510
+ field,
57511
+ uploadProgress,
57512
+ onFileUpload: uploadFiles,
57513
+ onFileRemove: removeFile,
57514
+ isUploading
57515
+ }
57516
+ ) }, field.name)),
57517
+ /* @__PURE__ */ jsx(
57518
+ Pressable,
57519
+ {
57520
+ onClick: form.handleSubmit,
57521
+ asButton: true,
57522
+ variant: action.variant,
57523
+ className: cn("h-12", action.className),
57524
+ disabled: form.isSubmitting,
57525
+ children: action.label
57526
+ }
57527
+ )
57528
+ ] }) }),
57529
+ helperText && (typeof helperText === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm text-center mt-4"), children: helperText }) : helperText)
57530
+ ]
57531
+ }
57532
+ );
57533
+ }, [formSlot, formFields, form, formConfig, formMethod, buttonAction, uploadProgress, uploadFiles, removeFile, isUploading, submissionError, successMessage, helperText, resetUpload, resetSubmissionState]);
57464
57534
  const renderBrowserPreview = useMemo(() => {
57465
57535
  if (browserPreviewSlot) return browserPreviewSlot;
57466
57536
  if (!browserPreview) return null;
@@ -57544,7 +57614,7 @@ function HeroSaasDashboardPreview({
57544
57614
  children: description
57545
57615
  }
57546
57616
  ) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
57547
- renderEmailForm
57617
+ renderForm
57548
57618
  ] }),
57549
57619
  renderBrowserPreview
57550
57620
  ] })
@@ -58304,12 +58374,12 @@ function HeroAgencyAnimatedImages({
58304
58374
  patternOpacity,
58305
58375
  className,
58306
58376
  containerClassName,
58307
- children: /* @__PURE__ */ jsx("div", { className: "pt-10 md:pt-0", children: /* @__PURE__ */ jsxs("div", { className: "grid w-full grid-cols-1 items-center justify-between gap-14 lg:grid-cols-2", children: [
58377
+ children: /* @__PURE__ */ jsx("div", { className: "pt-10 md:pt-0", children: /* @__PURE__ */ jsxs("div", { className: "grid w-full gap-12 md:gap-20 grid-cols-1 lg:grid-cols-2", children: [
58308
58378
  /* @__PURE__ */ jsxs(
58309
58379
  "div",
58310
58380
  {
58311
58381
  className: cn(
58312
- "flex w-full max-w-125 flex-col gap-8 md:gap-14 lg:max-w-full",
58382
+ "flex w-full flex-col gap-4 items-start",
58313
58383
  contentClassName
58314
58384
  ),
58315
58385
  children: [
@@ -58317,12 +58387,12 @@ function HeroAgencyAnimatedImages({
58317
58387
  "h1",
58318
58388
  {
58319
58389
  className: cn(
58320
- "text-5xl md:text-6xl lg:text-7xl xl:text-[5rem] text-left text-pretty",
58390
+ "text-4xl md:text-5xl lg:text-7xl xl:text-[5rem] font-bold text-left text-pretty",
58321
58391
  headingClassName
58322
58392
  ),
58323
58393
  children: heading
58324
58394
  }
58325
- ) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
58395
+ ) : heading),
58326
58396
  description && (typeof description === "string" ? /* @__PURE__ */ jsx(
58327
58397
  "p",
58328
58398
  {
@@ -58556,7 +58626,7 @@ function HeroStartupLaunchCta({
58556
58626
  "h1",
58557
58627
  {
58558
58628
  className: cn(
58559
- "mb-8 text-4xl font-normal text-balance md:text-7xl",
58629
+ "text-4xl font-normal text-balance md:text-7xl",
58560
58630
  headingClassName
58561
58631
  ),
58562
58632
  children: heading
@@ -58566,7 +58636,7 @@ function HeroStartupLaunchCta({
58566
58636
  "p",
58567
58637
  {
58568
58638
  className: cn(
58569
- "mb-12 max-w-full md:max-w-[70%] text-lg md:text-xl font-normal text-balance",
58639
+ "max-w-full md:max-w-[70%] text-lg md:text-xl font-normal text-balance",
58570
58640
  descriptionClassName
58571
58641
  ),
58572
58642
  children: description
@@ -58645,35 +58715,47 @@ function HeroEnterpriseSecurity({
58645
58715
  const renderFeatures = useMemo(() => {
58646
58716
  if (featuresSlot) return featuresSlot;
58647
58717
  if (!features || features.length === 0) return null;
58648
- return /* @__PURE__ */ jsx("div", { className: cn("mt-20 grid gap-8 md:grid-cols-3", featuresClassName), children: features.map((feature, index) => /* @__PURE__ */ jsxs(
58649
- Pressable,
58718
+ return /* @__PURE__ */ jsx(
58719
+ "div",
58650
58720
  {
58651
- href: feature.href,
58652
- className: cn("rounded-2xl border border-border p-6 text-center"),
58653
- children: [
58654
- /* @__PURE__ */ jsx(
58655
- "div",
58656
- {
58657
- className: cn(
58658
- "mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full",
58659
- feature.iconBgClass
58660
- ),
58661
- children: feature.icon ?? /* @__PURE__ */ jsx(
58662
- DynamicIcon,
58721
+ className: cn(
58722
+ "mt-12 md:mt-20 grid gap-4 md:gap-8 grid-cols-1 md:grid-cols-3",
58723
+ featuresClassName
58724
+ ),
58725
+ children: features.map((feature, index) => /* @__PURE__ */ jsxs(
58726
+ Pressable,
58727
+ {
58728
+ href: feature.href,
58729
+ className: cn(
58730
+ "rounded-2xl border border-border p-6 text-center",
58731
+ "transition-all duration-500 hover:ring-2 hover:shadow-lg"
58732
+ ),
58733
+ children: [
58734
+ /* @__PURE__ */ jsx(
58735
+ "div",
58663
58736
  {
58664
- name: feature.iconName || "lucide/check",
58665
- size: 24,
58666
- className: feature.iconColorClass
58737
+ className: cn(
58738
+ "mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full",
58739
+ feature.iconBgClass
58740
+ ),
58741
+ children: feature.icon ?? /* @__PURE__ */ jsx(
58742
+ DynamicIcon,
58743
+ {
58744
+ name: feature.iconName || "lucide/check",
58745
+ size: 24,
58746
+ className: feature.iconColorClass
58747
+ }
58748
+ )
58667
58749
  }
58668
- )
58669
- }
58670
- ),
58671
- /* @__PURE__ */ jsx("h3", { className: "mb-2 text-lg font-semibold ", children: feature.title }),
58672
- feature.description && /* @__PURE__ */ jsx("p", { className: "text-sm", children: feature.description })
58673
- ]
58674
- },
58675
- index
58676
- )) });
58750
+ ),
58751
+ /* @__PURE__ */ jsx("h3", { className: "mb-2 text-lg font-semibold ", children: feature.title }),
58752
+ feature.description && /* @__PURE__ */ jsx("p", { className: "text-sm", children: feature.description })
58753
+ ]
58754
+ },
58755
+ index
58756
+ ))
58757
+ }
58758
+ );
58677
58759
  }, [featuresSlot, features, featuresClassName]);
58678
58760
  return /* @__PURE__ */ jsx(
58679
58761
  Section,
@@ -58686,40 +58768,49 @@ function HeroEnterpriseSecurity({
58686
58768
  className,
58687
58769
  containerClassName,
58688
58770
  children: /* @__PURE__ */ jsxs("div", { className: "pt-8 md:pt-0", children: [
58689
- /* @__PURE__ */ jsxs("div", { className: cn("mx-auto max-w-4xl text-center", contentClassName), children: [
58690
- badge && /* @__PURE__ */ jsxs(Badge, { className: cn("px-4", badgeClassName), children: [
58691
- badgeIcon,
58692
- typeof badge === "string" ? /* @__PURE__ */ jsx("span", { children: badge }) : badge
58693
- ] }),
58694
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
58695
- "h1",
58696
- {
58697
- className: cn(
58698
- "mb-8 text-4xl font-normal text-balance md:text-7xl",
58699
- headingClassName
58700
- ),
58701
- children: heading
58702
- }
58703
- ) : heading),
58704
- description && (typeof description === "string" ? /* @__PURE__ */ jsx(
58705
- "p",
58706
- {
58707
- className: cn(
58708
- "mb-12 max-w-full md:max-w-[70%] text-lg md:text-xl font-normal text-balance",
58709
- descriptionClassName
58710
- ),
58711
- children: description
58712
- }
58713
- ) : description),
58714
- /* @__PURE__ */ jsx(
58715
- BlockActions,
58716
- {
58717
- actions,
58718
- actionsSlot,
58719
- actionsClassName
58720
- }
58721
- )
58722
- ] }),
58771
+ /* @__PURE__ */ jsxs(
58772
+ "div",
58773
+ {
58774
+ className: cn(
58775
+ "mx-auto max-w-4xl text-center flex flex-col items-center gap-6",
58776
+ contentClassName
58777
+ ),
58778
+ children: [
58779
+ badge && /* @__PURE__ */ jsxs(Badge, { className: cn("px-4", badgeClassName), children: [
58780
+ badgeIcon,
58781
+ typeof badge === "string" ? /* @__PURE__ */ jsx("span", { children: badge }) : badge
58782
+ ] }),
58783
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
58784
+ "h1",
58785
+ {
58786
+ className: cn(
58787
+ "text-4xl font-bold text-balance md:text-7xl",
58788
+ headingClassName
58789
+ ),
58790
+ children: heading
58791
+ }
58792
+ ) : heading),
58793
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
58794
+ "p",
58795
+ {
58796
+ className: cn(
58797
+ "max-w-full md:max-w-[70%] text-lg md:text-xl font-normal text-balance",
58798
+ descriptionClassName
58799
+ ),
58800
+ children: description
58801
+ }
58802
+ ) : description),
58803
+ /* @__PURE__ */ jsx(
58804
+ BlockActions,
58805
+ {
58806
+ actions,
58807
+ actionsSlot,
58808
+ actionsClassName
58809
+ }
58810
+ )
58811
+ ]
58812
+ }
58813
+ ),
58723
58814
  renderFeatures
58724
58815
  ] })
58725
58816
  }
@@ -58731,17 +58822,18 @@ function HeroCreativeStudioStacked({
58731
58822
  heading,
58732
58823
  description,
58733
58824
  videoAction,
58825
+ patternClassName,
58734
58826
  actions,
58735
58827
  onVideoClick,
58736
58828
  videoDialog,
58737
58829
  images,
58738
58830
  imagesSlot,
58739
58831
  background,
58740
- spacing,
58832
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
58833
+ spacing = "xl",
58741
58834
  pattern,
58742
58835
  patternOpacity,
58743
58836
  className,
58744
- containerClassName,
58745
58837
  contentClassName,
58746
58838
  taglineClassName,
58747
58839
  headingClassName,
@@ -58839,8 +58931,10 @@ function HeroCreativeStudioStacked({
58839
58931
  spacing,
58840
58932
  pattern,
58841
58933
  patternOpacity,
58842
- className: cn(className),
58843
- children: /* @__PURE__ */ jsx("div", { className: cn("container", containerClassName), children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 items-center gap-10 lg:grid-cols-2", children: [
58934
+ patternClassName,
58935
+ className,
58936
+ containerClassName,
58937
+ children: /* @__PURE__ */ jsx("div", { className: "pt-8 md:pt-0", children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 items-center gap-10 lg:grid-cols-2", children: [
58844
58938
  /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-6", contentClassName), children: [
58845
58939
  tagline && (typeof tagline === "string" ? /* @__PURE__ */ jsx(
58846
58940
  "p",
@@ -58857,7 +58951,7 @@ function HeroCreativeStudioStacked({
58857
58951
  "h1",
58858
58952
  {
58859
58953
  className: cn(
58860
- "max-w-[920px] text-center text-4xl leading-tight font-semibold md:text-6xl lg:text-7xl text-balance",
58954
+ "max-w-[920px] text-left text-4xl leading-tight font-semibold md:text-6xl lg:text-7xl text-balance",
58861
58955
  headingClassName
58862
58956
  ),
58863
58957
  children: heading
@@ -58867,7 +58961,7 @@ function HeroCreativeStudioStacked({
58867
58961
  "p",
58868
58962
  {
58869
58963
  className: cn(
58870
- "max-w-[750px] text-center text-base leading-relaxed font-normal md:text-xl text-balance",
58964
+ "max-w-[750px] text-left text-base leading-relaxed font-normal md:text-xl text-balance",
58871
58965
  descriptionClassName
58872
58966
  ),
58873
58967
  children: description
@@ -58927,11 +59021,11 @@ function HeroDigitalAgencyFullscreen({
58927
59021
  actionsSlot,
58928
59022
  backgroundImage,
58929
59023
  background,
58930
- spacing = "none",
58931
59024
  pattern,
58932
59025
  patternOpacity,
58933
59026
  className,
58934
- containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
59027
+ spacing = "py-0 md:py-0",
59028
+ containerClassName = "w-screen max-w-full relative z-10 px-0 min-h-screen h-full",
58935
59029
  contentClassName,
58936
59030
  headingClassName,
58937
59031
  descriptionClassName,
@@ -58977,7 +59071,7 @@ function HeroDigitalAgencyFullscreen({
58977
59071
  Img,
58978
59072
  {
58979
59073
  src: backgroundImage,
58980
- alt: "",
59074
+ alt: "Hero Background Image",
58981
59075
  className: "h-full w-full brightness-50 object-cover object-center",
58982
59076
  eager: true,
58983
59077
  optixFlowConfig
@@ -58985,20 +59079,21 @@ function HeroDigitalAgencyFullscreen({
58985
59079
  )
58986
59080
  }
58987
59081
  ),
58988
- /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsx("div", { className: "flex w-full flex-col justify-between gap-10", children: /* @__PURE__ */ jsxs(
59082
+ /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsx(
58989
59083
  "div",
58990
59084
  {
58991
59085
  className: cn(
58992
- "mx-auto flex max-w-125 flex-1 flex-col items-center justify-center gap-7 sm:max-w-150 md:max-w-200",
59086
+ "flex min-h-screen h-full w-full flex-col items-center justify-end",
58993
59087
  contentClassName
58994
59088
  ),
58995
- children: [
59089
+ children: /* @__PURE__ */ jsxs("div", { className: "container flex flex-col gap-6 mb-6 md:mb-24 px-6 md:px-0", children: [
58996
59090
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
58997
59091
  "h1",
58998
59092
  {
58999
59093
  className: cn(
59000
- "mb-8 text-4xl font-normal text-balance md:text-7xl",
59001
- headingClassName
59094
+ "text-4xl font-bold text-balance md:text-7xl",
59095
+ headingClassName,
59096
+ backgroundImage ? "text-white text-shadow-2xl" : ""
59002
59097
  ),
59003
59098
  children: heading
59004
59099
  }
@@ -59007,8 +59102,9 @@ function HeroDigitalAgencyFullscreen({
59007
59102
  "p",
59008
59103
  {
59009
59104
  className: cn(
59010
- "mb-12 max-w-full md:max-w-[70%] text-lg md:text-xl font-normal text-balance",
59011
- descriptionClassName
59105
+ "max-w-full md:max-w-[70%] text-lg md:text-xl font-normal text-balance",
59106
+ descriptionClassName,
59107
+ backgroundImage ? "text-white text-shadow-2xl" : ""
59012
59108
  ),
59013
59109
  children: description
59014
59110
  }
@@ -59021,9 +59117,9 @@ function HeroDigitalAgencyFullscreen({
59021
59117
  actionsClassName
59022
59118
  }
59023
59119
  )
59024
- ]
59120
+ ] })
59025
59121
  }
59026
- ) }) })
59122
+ ) })
59027
59123
  ]
59028
59124
  }
59029
59125
  );
@@ -59103,7 +59199,7 @@ function HeroCustomerSupportLayered({
59103
59199
  patternClassName,
59104
59200
  className,
59105
59201
  containerClassName,
59106
- children: /* @__PURE__ */ jsx("div", { className: "pt-8 md:pt-0", children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 items-center gap-8 md:gap-20 md:grid-cols-2", children: [
59202
+ children: /* @__PURE__ */ jsx("div", { className: "pt-8 md:pt-0", children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 items-center gap-12 md:gap-20 md:grid-cols-2", children: [
59107
59203
  /* @__PURE__ */ jsxs(
59108
59204
  "div",
59109
59205
  {
@@ -59390,11 +59486,11 @@ var fadeVariants2 = {
59390
59486
  initial: { opacity: 0 },
59391
59487
  animate: {
59392
59488
  opacity: 1,
59393
- transition: { duration: 0.8, ease: [0.4, 0, 0.2, 1] }
59489
+ transition: { duration: 1, ease: [0.4, 0, 0.2, 1] }
59394
59490
  },
59395
59491
  exit: {
59396
59492
  opacity: 0,
59397
- transition: { duration: 0.8, ease: [0.4, 0, 0.2, 1] }
59493
+ transition: { duration: 1, ease: [0.4, 0, 0.2, 1] }
59398
59494
  }
59399
59495
  };
59400
59496
  function HeroBusinessCarouselDots({
@@ -59428,7 +59524,7 @@ function HeroBusinessCarouselDots({
59428
59524
  if (imageCount <= 1) return;
59429
59525
  timerRef.current = setInterval(() => {
59430
59526
  setCurrentIndex((prev) => (prev + 1) % imageCount);
59431
- }, 4e3);
59527
+ }, 7e3);
59432
59528
  }, [imageCount]);
59433
59529
  useEffect(() => {
59434
59530
  startTimer();
@@ -59448,42 +59544,52 @@ function HeroBusinessCarouselDots({
59448
59544
  className: cn("overflow-hidden", className),
59449
59545
  containerClassName,
59450
59546
  children: /* @__PURE__ */ jsxs("div", { className: "pt-8 md:pt-0", children: [
59451
- /* @__PURE__ */ jsxs("div", { className: cn("mx-auto max-w-5xl text-center", contentClassName), children: [
59452
- badge && /* @__PURE__ */ jsx(Badge, { variant: badgeVariant, className: badgeClassName, children: badge }),
59453
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
59454
- "h1",
59455
- {
59456
- className: cn(
59457
- "mt-6 text-4xl font-bold md:text-6xl text-balance",
59458
- headingClassName
59459
- ),
59460
- children: heading
59461
- }
59462
- ) : heading),
59463
- description && (typeof description === "string" ? /* @__PURE__ */ jsx(
59464
- "p",
59465
- {
59466
- className: cn(
59467
- "mt-5 text-lg md:text-xl lg:px-32 text-balance",
59468
- descriptionClassName
59469
- ),
59470
- children: description
59471
- }
59472
- ) : description),
59473
- /* @__PURE__ */ jsx(
59474
- BlockActions,
59475
- {
59476
- actions,
59477
- actionsSlot,
59478
- actionsClassName
59479
- }
59480
- )
59481
- ] }),
59482
59547
  /* @__PURE__ */ jsxs(
59483
59548
  "div",
59484
59549
  {
59485
59550
  className: cn(
59486
- "relative mx-4 mt-10 md:mx-10 md:mt-16",
59551
+ "mx-auto max-w-full md:max-w-5xl text-center flex flex-col items-center px-4",
59552
+ contentClassName
59553
+ ),
59554
+ children: [
59555
+ badge && /* @__PURE__ */ jsx(Badge, { variant: badgeVariant, className: badgeClassName, children: badge }),
59556
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
59557
+ "h1",
59558
+ {
59559
+ className: cn(
59560
+ "mt-6 text-4xl font-bold md:text-6xl text-balance",
59561
+ headingClassName
59562
+ ),
59563
+ children: heading
59564
+ }
59565
+ ) : heading),
59566
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx(
59567
+ "p",
59568
+ {
59569
+ className: cn(
59570
+ "mt-5 text-lg md:text-xl lg:px-32 text-balance",
59571
+ descriptionClassName
59572
+ ),
59573
+ children: description
59574
+ }
59575
+ ) : description),
59576
+ /* @__PURE__ */ jsx(
59577
+ BlockActions,
59578
+ {
59579
+ actions,
59580
+ actionsSlot,
59581
+ actionsClassName,
59582
+ mobileConfig: { width: "full", position: "center" }
59583
+ }
59584
+ )
59585
+ ]
59586
+ }
59587
+ ),
59588
+ /* @__PURE__ */ jsxs(
59589
+ "div",
59590
+ {
59591
+ className: cn(
59592
+ "relative mx-4 mt-18 md:mx-10 md:mt-32",
59487
59593
  carouselClassName
59488
59594
  ),
59489
59595
  children: [
@@ -59491,7 +59597,7 @@ function HeroBusinessCarouselDots({
59491
59597
  /* @__PURE__ */ jsx("div", { className: "absolute bottom-0 -right-4 -left-4 z-10 h-px bg-[linear-gradient(to_right,transparent,hsl(var(--border))_4%,hsl(var(--border))_96%,transparent)] md:-right-20 md:-left-20" }),
59492
59598
  /* @__PURE__ */ jsx("div", { className: "absolute -top-10 left-0 z-10 h-[calc(100%+80px)] w-px bg-[linear-gradient(to_bottom,transparent,hsl(var(--border))_4%,hsl(var(--border))_96%,transparent)] md:-top-20 md:h-[calc(100%+160px)]" }),
59493
59599
  /* @__PURE__ */ jsx("div", { className: "absolute -top-10 right-0 z-10 h-[calc(100%+80px)] w-px bg-[linear-gradient(to_bottom,transparent,hsl(var(--border))_4%,hsl(var(--border))_96%,transparent)] md:-top-20 md:h-[calc(100%+160px)]" }),
59494
- carouselSlot ? carouselSlot : activeImage ? /* @__PURE__ */ jsx("div", { className: "relative aspect-video w-full overflow-hidden", children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", initial: false, children: /* @__PURE__ */ jsx(
59600
+ carouselSlot ? carouselSlot : activeImage ? /* @__PURE__ */ jsx("div", { className: "relative aspect-video w-full overflow-hidden ", children: /* @__PURE__ */ jsx(AnimatePresence, { initial: false, children: /* @__PURE__ */ jsx(
59495
59601
  motion.div,
59496
59602
  {
59497
59603
  variants: fadeVariants2,
@@ -59548,7 +59654,7 @@ function HeroDeveloperToolsCode({
59548
59654
  const renderBadge = useMemo(() => {
59549
59655
  if (badgeSlot) return badgeSlot;
59550
59656
  if (!badgeText && !badgeIcon) return null;
59551
- return /* @__PURE__ */ jsxs(Badge, { className: "w-fit gap-2 mx-4", children: [
59657
+ return /* @__PURE__ */ jsxs(Badge, { className: "gap-2 px-4 py-1", children: [
59552
59658
  badgeIcon && /* @__PURE__ */ jsx(DynamicIcon, { name: badgeIcon, size: 14 }),
59553
59659
  badgeText
59554
59660
  ] });
@@ -59605,7 +59711,7 @@ function HeroDeveloperToolsCode({
59605
59711
  className,
59606
59712
  containerClassName,
59607
59713
  children: /* @__PURE__ */ jsx("div", { className: "pt-8 md:pt-0", children: /* @__PURE__ */ jsxs("div", { className: "grid items-center gap-12 lg:grid-cols-2 lg:gap-20", children: [
59608
- /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-8", contentClassName), children: [
59714
+ /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-4 md:gap-8", contentClassName), children: [
59609
59715
  renderBadge,
59610
59716
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
59611
59717
  "h1",
@@ -59669,41 +59775,51 @@ function HeroEcommerceProductShowcase({
59669
59775
  const renderStats = useMemo(() => {
59670
59776
  if (statsSlot) return statsSlot;
59671
59777
  if (!stats || stats.length === 0) return null;
59672
- return /* @__PURE__ */ jsx("div", { className: cn("flex items-center gap-6 pt-4", statsClassName), children: stats.map((stat, index) => /* @__PURE__ */ jsxs(React22.Fragment, { children: [
59673
- index > 0 && /* @__PURE__ */ jsx("div", { className: "h-12 w-px bg-border" }),
59674
- /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
59675
- /* @__PURE__ */ jsxs(
59676
- "div",
59677
- {
59678
- className: cn(
59679
- "flex items-center",
59680
- stat.icon ? "justify-between" : "justify-center"
59681
- ),
59682
- children: [
59683
- stat.icon,
59684
- /* @__PURE__ */ jsx(
59685
- "div",
59686
- {
59687
- className: cn(
59688
- "font-bold ",
59689
- stat.icon ? "text-xl" : "text-2xl"
59690
- ),
59691
- children: stat.value
59692
- }
59693
- )
59694
- ]
59695
- }
59778
+ return /* @__PURE__ */ jsx(
59779
+ "div",
59780
+ {
59781
+ className: cn(
59782
+ "flex flex-col md:flex-row items-center gap-4 md:gap-6 pt-8 md:pt-12",
59783
+ statsClassName
59696
59784
  ),
59697
- /* @__PURE__ */ jsx("div", { className: cn("text-sm"), children: stat.label })
59698
- ] })
59699
- ] }, index)) });
59785
+ children: stats.map((stat, index) => /* @__PURE__ */ jsxs(React22.Fragment, { children: [
59786
+ index > 0 && /* @__PURE__ */ jsx("div", { className: "h-12 w-px bg-border hidden md:flex" }),
59787
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 justify-between flex-row md:flex-col text-left md:text-center w-full md:w-fit border md:border-none rounded-xl md:rounded-none p-4 md:p-0", children: [
59788
+ /* @__PURE__ */ jsxs(
59789
+ "div",
59790
+ {
59791
+ className: cn(
59792
+ "flex items-center gap-2 w-fit md:w-full",
59793
+ stat.icon ? "justify-between" : "justify-center"
59794
+ ),
59795
+ children: [
59796
+ stat.icon,
59797
+ /* @__PURE__ */ jsx(
59798
+ "div",
59799
+ {
59800
+ className: cn(
59801
+ "font-bold ",
59802
+ stat.icon ? "text-xl" : "text-2xl"
59803
+ ),
59804
+ children: stat.value
59805
+ }
59806
+ )
59807
+ ]
59808
+ }
59809
+ ),
59810
+ /* @__PURE__ */ jsx("div", { className: cn("text-sm"), children: stat.label })
59811
+ ] })
59812
+ ] }, index))
59813
+ }
59814
+ );
59700
59815
  }, [statsSlot, stats, statsClassName]);
59701
59816
  const renderImages = useMemo(() => {
59702
59817
  if (imagesSlot) return imagesSlot;
59703
59818
  if (!images || images.length === 0) return null;
59704
- return /* @__PURE__ */ jsxs("div", { className: cn("grid grid-cols-2 gap-4", imagesClassName), children: [
59705
- /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
59706
- images[0] && /* @__PURE__ */ jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsx(
59819
+ const imgClassWrapper = "overflow-hidden rounded-3xl ring-4 ring-primary shadow-2xl";
59820
+ return /* @__PURE__ */ jsxs("div", { className: cn("grid grid-cols-2 gap-4 md:gap-8", imagesClassName), children: [
59821
+ /* @__PURE__ */ jsxs("div", { className: "space-y-4 md:space-y-8", children: [
59822
+ images[0] && /* @__PURE__ */ jsx("div", { className: imgClassWrapper, children: /* @__PURE__ */ jsx(
59707
59823
  Img,
59708
59824
  {
59709
59825
  src: images[0].src,
@@ -59715,7 +59831,7 @@ function HeroEcommerceProductShowcase({
59715
59831
  optixFlowConfig
59716
59832
  }
59717
59833
  ) }),
59718
- images[1] && /* @__PURE__ */ jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsx(
59834
+ images[1] && /* @__PURE__ */ jsx("div", { className: imgClassWrapper, children: /* @__PURE__ */ jsx(
59719
59835
  Img,
59720
59836
  {
59721
59837
  src: images[1].src,
@@ -59728,8 +59844,8 @@ function HeroEcommerceProductShowcase({
59728
59844
  }
59729
59845
  ) })
59730
59846
  ] }),
59731
- /* @__PURE__ */ jsxs("div", { className: "space-y-4 pt-8", children: [
59732
- images[2] && /* @__PURE__ */ jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsx(
59847
+ /* @__PURE__ */ jsxs("div", { className: "space-y-4 md:space-y-8 pt-12", children: [
59848
+ images[2] && /* @__PURE__ */ jsx("div", { className: imgClassWrapper, children: /* @__PURE__ */ jsx(
59733
59849
  Img,
59734
59850
  {
59735
59851
  src: images[2].src,
@@ -59741,7 +59857,7 @@ function HeroEcommerceProductShowcase({
59741
59857
  optixFlowConfig
59742
59858
  }
59743
59859
  ) }),
59744
- images[3] && /* @__PURE__ */ jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsx(
59860
+ images[3] && /* @__PURE__ */ jsx("div", { className: imgClassWrapper, children: /* @__PURE__ */ jsx(
59745
59861
  Img,
59746
59862
  {
59747
59863
  src: images[3].src,
@@ -59767,30 +59883,39 @@ function HeroEcommerceProductShowcase({
59767
59883
  className,
59768
59884
  containerClassName,
59769
59885
  children: /* @__PURE__ */ jsx("div", { className: "pt-8 md:pt-0", children: /* @__PURE__ */ jsxs("div", { className: "grid items-center gap-12 lg:grid-cols-2 lg:gap-20", children: [
59770
- /* @__PURE__ */ jsx("div", { className: "order-1", children: renderImages }),
59771
- /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-8 order-2", contentClassName), children: [
59772
- renderBadge,
59773
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
59774
- "h1",
59775
- {
59776
- className: cn(
59777
- "text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl text-balance",
59778
- headingClassName
59886
+ /* @__PURE__ */ jsx("div", { className: "order-2 md:order-1", children: renderImages }),
59887
+ /* @__PURE__ */ jsxs(
59888
+ "div",
59889
+ {
59890
+ className: cn(
59891
+ "flex flex-col gap-4 md:gap-6 order-1 md:order-2",
59892
+ contentClassName
59893
+ ),
59894
+ children: [
59895
+ renderBadge,
59896
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
59897
+ "h1",
59898
+ {
59899
+ className: cn(
59900
+ "text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl text-balance",
59901
+ headingClassName
59902
+ ),
59903
+ children: heading
59904
+ }
59905
+ ) : heading),
59906
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-lg text-balance", descriptionClassName), children: description }) : description),
59907
+ /* @__PURE__ */ jsx(
59908
+ BlockActions,
59909
+ {
59910
+ actions,
59911
+ actionsSlot,
59912
+ actionsClassName
59913
+ }
59779
59914
  ),
59780
- children: heading
59781
- }
59782
- ) : heading),
59783
- description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-lg text-balance", descriptionClassName), children: description }) : description),
59784
- /* @__PURE__ */ jsx(
59785
- BlockActions,
59786
- {
59787
- actions,
59788
- actionsSlot,
59789
- actionsClassName
59790
- }
59791
- ),
59792
- renderStats
59793
- ] })
59915
+ renderStats
59916
+ ]
59917
+ }
59918
+ )
59794
59919
  ] }) })
59795
59920
  }
59796
59921
  );
@@ -60204,6 +60329,16 @@ function HeroNewsletterMinimal({
60204
60329
  }
60205
60330
  );
60206
60331
  }
60332
+ var DEFAULT_FORM_FIELDS43 = [
60333
+ {
60334
+ name: "email",
60335
+ type: "email",
60336
+ label: "Email Address",
60337
+ placeholder: "Enter your email",
60338
+ required: true,
60339
+ columnSpan: 12
60340
+ }
60341
+ ];
60207
60342
  var digitVariants = {
60208
60343
  initial: { y: -20, opacity: 0 },
60209
60344
  animate: {
@@ -60219,7 +60354,7 @@ var digitVariants = {
60219
60354
  };
60220
60355
  function CountdownDigit({ value, label }) {
60221
60356
  const display = value.toString().padStart(2, "0");
60222
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center", children: [
60357
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center bg-card pt-2 pb-6 px-2 text-card-foreground rounded-xl md:rounded-2xl shadow-xl", children: [
60223
60358
  /* @__PURE__ */ jsx(
60224
60359
  "div",
60225
60360
  {
@@ -60239,7 +60374,7 @@ function CountdownDigit({ value, label }) {
60239
60374
  ) })
60240
60375
  }
60241
60376
  ),
60242
- /* @__PURE__ */ jsx("span", { className: cn("mt-2 text-sm"), children: label })
60377
+ /* @__PURE__ */ jsx("span", { className: cn("mt-2 text-xs md:text-sm"), children: label })
60243
60378
  ] });
60244
60379
  }
60245
60380
  function HeroComingSoonCountdown({
@@ -60249,8 +60384,14 @@ function HeroComingSoonCountdown({
60249
60384
  description,
60250
60385
  countdownDate,
60251
60386
  countdownSlot,
60252
- emailPlaceholder = "Enter your email",
60253
- submitAction,
60387
+ formFields = DEFAULT_FORM_FIELDS43,
60388
+ formConfig,
60389
+ onSubmit,
60390
+ onSuccess,
60391
+ onError,
60392
+ successMessage,
60393
+ buttonAction,
60394
+ helperText,
60254
60395
  formSlot,
60255
60396
  socialLinks,
60256
60397
  socialLinksSlot,
@@ -60269,6 +60410,18 @@ function HeroComingSoonCountdown({
60269
60410
  socialLinksClassName
60270
60411
  }) {
60271
60412
  const [timeLeft, setTimeLeft] = useState(null);
60413
+ const { uploadTokens, uploadProgress, isUploading, uploadFiles, removeFile, resetUpload } = useFileUpload({ onError });
60414
+ const { form, submissionError, formMethod, resetSubmissionState } = useContactForm({
60415
+ formFields,
60416
+ formConfig,
60417
+ onSubmit,
60418
+ onSuccess: (data) => {
60419
+ resetUpload();
60420
+ onSuccess?.(data);
60421
+ },
60422
+ onError,
60423
+ uploadTokens
60424
+ });
60272
60425
  const calculateTimeLeft = useCallback(() => {
60273
60426
  if (!countdownDate) return null;
60274
60427
  const now = Date.now();
@@ -60295,31 +60448,59 @@ function HeroComingSoonCountdown({
60295
60448
  const showCountdown = countdownSlot || timeLeft;
60296
60449
  const renderForm = useMemo(() => {
60297
60450
  if (formSlot) return formSlot;
60298
- if (!submitAction) return null;
60299
- const {
60300
- label,
60301
- icon,
60302
- iconAfter,
60303
- children,
60304
- className: actionClassName,
60305
- ...pressableProps
60306
- } = submitAction;
60307
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [
60308
- /* @__PURE__ */ jsx(
60309
- Input,
60310
- {
60311
- type: "email",
60312
- placeholder: emailPlaceholder,
60313
- className: cn("h-12 flex-1 border-border/50")
60314
- }
60315
- ),
60316
- /* @__PURE__ */ jsx(Pressable, { asButton: true, className: actionClassName, ...pressableProps, children: children ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
60317
- icon,
60318
- label,
60319
- iconAfter
60320
- ] }) })
60321
- ] });
60322
- }, [formSlot, submitAction, emailPlaceholder]);
60451
+ const defaultButtonAction = {
60452
+ label: "Notify Me",
60453
+ variant: "default",
60454
+ className: "h-12"
60455
+ };
60456
+ const action = buttonAction || defaultButtonAction;
60457
+ return /* @__PURE__ */ jsxs(
60458
+ Form,
60459
+ {
60460
+ form,
60461
+ notificationConfig: {
60462
+ submissionError,
60463
+ successMessage
60464
+ },
60465
+ formConfig: {
60466
+ endpoint: formConfig?.endpoint,
60467
+ method: formMethod,
60468
+ submissionConfig: formConfig?.submissionConfig
60469
+ },
60470
+ onNewSubmission: () => {
60471
+ resetUpload();
60472
+ resetSubmissionState();
60473
+ },
60474
+ children: [
60475
+ formFields.map((field) => /* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(
60476
+ DynamicFormField,
60477
+ {
60478
+ field,
60479
+ uploadProgress,
60480
+ onFileUpload: uploadFiles,
60481
+ onFileRemove: removeFile,
60482
+ isUploading
60483
+ }
60484
+ ) }, field.name)),
60485
+ /* @__PURE__ */ jsxs(
60486
+ Pressable,
60487
+ {
60488
+ onClick: form.handleSubmit,
60489
+ asButton: true,
60490
+ variant: action.variant,
60491
+ className: cn("h-12", action.className),
60492
+ disabled: form.isSubmitting,
60493
+ children: [
60494
+ action.label,
60495
+ action.iconAfter
60496
+ ]
60497
+ }
60498
+ ),
60499
+ helperText && (typeof helperText === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm mt-2 text-center"), children: helperText }) : helperText)
60500
+ ]
60501
+ }
60502
+ );
60503
+ }, [formSlot, formFields, form, formConfig, formMethod, buttonAction, uploadProgress, uploadFiles, removeFile, isUploading, submissionError, successMessage, helperText, resetUpload, resetSubmissionState]);
60323
60504
  const renderSocialLinks = useMemo(() => {
60324
60505
  if (socialLinksSlot) return socialLinksSlot;
60325
60506
  if (!socialLinks || socialLinks.length === 0) return null;
@@ -60345,7 +60526,7 @@ function HeroComingSoonCountdown({
60345
60526
  patternClassName,
60346
60527
  className,
60347
60528
  containerClassName,
60348
- children: /* @__PURE__ */ jsxs("div", { className: "pt-8 md:pt-0", children: [
60529
+ children: /* @__PURE__ */ jsxs("div", { className: "px-6 py-8 md:px-12 md:py-12 lg:py-16 lg:px-16 rounded-2xl flex flex-col items-center text-center bg-muted gap-4 md:gap-8", children: [
60349
60530
  (badgeText || badgeIcon) && /* @__PURE__ */ jsxs(Badge, { className: cn("gap-2 px-4 py-2", badgeClassName), children: [
60350
60531
  badgeIcon && /* @__PURE__ */ jsx(DynamicIcon, { name: badgeIcon, size: 16 }),
60351
60532
  /* @__PURE__ */ jsx("span", { children: badgeText })
@@ -60354,7 +60535,7 @@ function HeroComingSoonCountdown({
60354
60535
  "h1",
60355
60536
  {
60356
60537
  className: cn(
60357
- "mt-8 max-w-3xl text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl text-balance",
60538
+ "max-w-full md:max-w-lg text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl text-balance",
60358
60539
  headingClassName
60359
60540
  ),
60360
60541
  children: heading
@@ -60364,7 +60545,7 @@ function HeroComingSoonCountdown({
60364
60545
  "p",
60365
60546
  {
60366
60547
  className: cn(
60367
- "mt-6 max-w-xl text-lg md:text-xl text-balance",
60548
+ "max-w-full md:max-w-md text-lg md:text-xl text-balance",
60368
60549
  descriptionClassName
60369
60550
  ),
60370
60551
  children: description
@@ -60374,7 +60555,7 @@ function HeroComingSoonCountdown({
60374
60555
  "div",
60375
60556
  {
60376
60557
  className: cn(
60377
- "mt-12 grid grid-cols-4 gap-4 md:gap-8",
60558
+ "py-8 grid grid-cols-4 gap-2 md:gap-4 lg:gap-8",
60378
60559
  countdownClassName
60379
60560
  ),
60380
60561
  children: countdownSlot ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [
@@ -60389,7 +60570,7 @@ function HeroComingSoonCountdown({
60389
60570
  "div",
60390
60571
  {
60391
60572
  className: cn(
60392
- "mt-12 flex w-full max-w-md flex-col gap-4 sm:flex-row",
60573
+ "flex w-full max-w-md flex-col gap-4 sm:flex-row",
60393
60574
  formClassName
60394
60575
  ),
60395
60576
  children: renderForm
@@ -60398,10 +60579,7 @@ function HeroComingSoonCountdown({
60398
60579
  (socialLinksSlot || socialLinks && socialLinks.length > 0) && /* @__PURE__ */ jsx(
60399
60580
  "div",
60400
60581
  {
60401
- className: cn(
60402
- "mt-16 flex items-center gap-6",
60403
- socialLinksClassName
60404
- ),
60582
+ className: cn("mt-8 flex items-center gap-6", socialLinksClassName),
60405
60583
  children: renderSocialLinks
60406
60584
  }
60407
60585
  )
@@ -60440,23 +60618,56 @@ function HeroEventRegistration({
60440
60618
  }) {
60441
60619
  const renderBadge = useMemo(() => {
60442
60620
  if (badgeSlot) return badgeSlot;
60443
- return /* @__PURE__ */ jsxs(Badge, { className: "px-4 gap-2", children: [
60444
- badgeIcon && /* @__PURE__ */ jsx(DynamicIcon, { name: badgeIcon }),
60621
+ return /* @__PURE__ */ jsxs(Badge, { className: "px-4 py-1 gap-2", children: [
60622
+ badgeIcon && /* @__PURE__ */ jsx(DynamicIcon, { name: badgeIcon, size: 18 }),
60445
60623
  badgeText
60446
60624
  ] });
60447
60625
  }, [badgeSlot, badgeIcon, badgeText]);
60448
60626
  const renderStats = useMemo(() => {
60449
60627
  if (statsSlot) return statsSlot;
60450
60628
  if (!stats || stats.length === 0) return null;
60451
- return /* @__PURE__ */ jsx("div", { className: "flex justify-center w-full", children: /* @__PURE__ */ jsx("div", { className: cn("grid grid-cols-3 gap-4 pt-4", statsClassName), children: stats.map((stat, index) => /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
60452
- /* @__PURE__ */ jsx("div", { className: "text-2xl font-bold ", children: stat.value }),
60453
- /* @__PURE__ */ jsx("div", { className: cn("text-sm"), children: stat.label })
60454
- ] }, index)) }) });
60629
+ return /* @__PURE__ */ jsx(
60630
+ "div",
60631
+ {
60632
+ className: cn(
60633
+ "flex flex-col md:flex-row items-center gap-4 md:gap-6 pt-8 md:pt-12",
60634
+ statsClassName
60635
+ ),
60636
+ children: stats.map((stat, index) => /* @__PURE__ */ jsxs(React22.Fragment, { children: [
60637
+ index > 0 && /* @__PURE__ */ jsx("div", { className: "h-12 w-px bg-border hidden md:flex" }),
60638
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 justify-between flex-row md:flex-col text-left md:text-center w-full md:w-fit border md:border-none rounded-xl md:rounded-none p-4 md:p-0", children: [
60639
+ /* @__PURE__ */ jsxs(
60640
+ "div",
60641
+ {
60642
+ className: cn(
60643
+ "flex items-center gap-2 w-fit md:w-full",
60644
+ stat.icon ? "justify-between" : "justify-center"
60645
+ ),
60646
+ children: [
60647
+ stat.icon,
60648
+ /* @__PURE__ */ jsx(
60649
+ "div",
60650
+ {
60651
+ className: cn(
60652
+ "font-bold ",
60653
+ stat.icon ? "text-xl" : "text-2xl"
60654
+ ),
60655
+ children: stat.value
60656
+ }
60657
+ )
60658
+ ]
60659
+ }
60660
+ ),
60661
+ /* @__PURE__ */ jsx("div", { className: cn("text-sm"), children: stat.label })
60662
+ ] })
60663
+ ] }, index))
60664
+ }
60665
+ );
60455
60666
  }, [statsSlot, stats, statsClassName]);
60456
60667
  const renderLocation = useMemo(() => {
60457
60668
  if (locationSlot) return locationSlot;
60458
60669
  if (!locationLabel && !locationSublabel) return null;
60459
- return /* @__PURE__ */ jsx("div", { className: "absolute -bottom-4 -left-4 rounded-xl bg-card p-4 shadow-lg", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
60670
+ return /* @__PURE__ */ jsx("div", { className: "absolute -bottom-4 -left-4 rounded-xl bg-card text-card-foreground p-4 shadow-lg ring-4 ring-primary", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
60460
60671
  /* @__PURE__ */ jsx(
60461
60672
  "div",
60462
60673
  {
@@ -60467,8 +60678,8 @@ function HeroEventRegistration({
60467
60678
  }
60468
60679
  ),
60469
60680
  /* @__PURE__ */ jsxs("div", { children: [
60470
- locationLabel && (typeof locationLabel === "string" ? /* @__PURE__ */ jsx("div", { className: "font-semibold ", children: locationLabel }) : locationLabel),
60471
- locationSublabel && (typeof locationSublabel === "string" ? /* @__PURE__ */ jsx("div", { className: cn("text-sm"), children: locationSublabel }) : locationSublabel)
60681
+ locationLabel && (typeof locationLabel === "string" ? /* @__PURE__ */ jsx("div", { className: "font-semibold text-card-foreground", children: locationLabel }) : locationLabel),
60682
+ locationSublabel && (typeof locationSublabel === "string" ? /* @__PURE__ */ jsx("div", { className: cn("text-sm text-card-foreground"), children: locationSublabel }) : locationSublabel)
60472
60683
  ] })
60473
60684
  ] }) });
60474
60685
  }, [locationSlot, locationLabel, locationSublabel]);
@@ -60502,7 +60713,7 @@ function HeroEventRegistration({
60502
60713
  "div",
60503
60714
  {
60504
60715
  className: cn(
60505
- "flex flex-col items-start gap-6 md:gap-8",
60716
+ "flex flex-col items-start gap-4 md:gap-6",
60506
60717
  contentClassName
60507
60718
  ),
60508
60719
  children: [