@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.cjs CHANGED
@@ -55873,15 +55873,13 @@ function HeroHiringAnimatedText({
55873
55873
  description,
55874
55874
  actions,
55875
55875
  actionsSlot,
55876
- scrollAction,
55877
- scrollActionSlot,
55878
55876
  backgroundImage,
55879
55877
  background,
55880
- spacing = "py-0 md:py-0",
55881
55878
  pattern,
55882
55879
  patternOpacity,
55883
55880
  className,
55884
- 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",
55881
+ spacing = "py-0 md:py-0",
55882
+ containerClassName = "sm:px-4 mx-auto h-screen w-full max-w-7xl relative z-10 px-6 pb-12 md:pb-18",
55885
55883
  contentClassName,
55886
55884
  headingClassName,
55887
55885
  descriptionClassName,
@@ -55929,51 +55927,6 @@ function HeroHiringAnimatedText({
55929
55927
  headingClassName,
55930
55928
  activeIndex
55931
55929
  ]);
55932
- const renderActions = React22.useMemo(() => {
55933
- if (actionsSlot) return actionsSlot;
55934
- if (!actions || actions.length === 0) return null;
55935
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-col md:flex-row gap-4", actionsClassName), children: actions.map((action, index) => {
55936
- const {
55937
- label,
55938
- icon,
55939
- iconAfter,
55940
- children,
55941
- className: actionClassName,
55942
- ...pressableProps
55943
- } = action;
55944
- return /* @__PURE__ */ jsxRuntime.jsx(
55945
- Pressable,
55946
- {
55947
- asButton: true,
55948
- className: actionClassName,
55949
- ...pressableProps,
55950
- children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
55951
- icon,
55952
- label,
55953
- iconAfter
55954
- ] })
55955
- },
55956
- index
55957
- );
55958
- }) });
55959
- }, [actionsSlot, actions, actionsClassName]);
55960
- const renderScrollAction = React22.useMemo(() => {
55961
- if (scrollActionSlot) return scrollActionSlot;
55962
- if (!scrollAction) return null;
55963
- const {
55964
- label,
55965
- icon,
55966
- iconAfter,
55967
- children,
55968
- className: actionClassName,
55969
- ...pressableProps
55970
- } = scrollAction;
55971
- return /* @__PURE__ */ jsxRuntime.jsx(Pressable, { asButton: true, className: actionClassName, ...pressableProps, children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
55972
- icon,
55973
- /* @__PURE__ */ jsxRuntime.jsx("div", { children: label }),
55974
- iconAfter
55975
- ] }) });
55976
- }, [scrollActionSlot, scrollAction]);
55977
55930
  return /* @__PURE__ */ jsxRuntime.jsx(
55978
55931
  Section,
55979
55932
  {
@@ -55996,7 +55949,7 @@ function HeroHiringAnimatedText({
55996
55949
  ),
55997
55950
  children: [
55998
55951
  renderHeading,
55999
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-8", children: [
55952
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center md:items-start flex-col gap-8", children: [
56000
55953
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
56001
55954
  "p",
56002
55955
  {
@@ -56007,10 +55960,15 @@ function HeroHiringAnimatedText({
56007
55960
  children: description
56008
55961
  }
56009
55962
  ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
56010
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4", children: [
56011
- renderActions,
56012
- renderScrollAction
56013
- ] })
55963
+ /* @__PURE__ */ jsxRuntime.jsx(
55964
+ BlockActions,
55965
+ {
55966
+ actions,
55967
+ actionsSlot,
55968
+ actionsClassName,
55969
+ mobileConfig: { width: "full", position: "center" }
55970
+ }
55971
+ )
56014
55972
  ] })
56015
55973
  ]
56016
55974
  }
@@ -56018,11 +55976,28 @@ function HeroHiringAnimatedText({
56018
55976
  }
56019
55977
  );
56020
55978
  }
55979
+ var DEFAULT_FORM_FIELDS41 = [
55980
+ {
55981
+ name: "email",
55982
+ type: "email",
55983
+ label: "Email Address",
55984
+ placeholder: "Enter your email",
55985
+ required: true,
55986
+ columnSpan: 12
55987
+ }
55988
+ ];
56021
55989
  function HeroSplitImageNewsletter({
56022
55990
  heading,
56023
55991
  description,
56024
- newsletterForm,
56025
- newsletterFormSlot,
55992
+ formFields = DEFAULT_FORM_FIELDS41,
55993
+ formConfig,
55994
+ onSubmit,
55995
+ onSuccess,
55996
+ onError,
55997
+ successMessage,
55998
+ buttonAction,
55999
+ helperText,
56000
+ formSlot,
56026
56001
  image,
56027
56002
  imageSlot,
56028
56003
  background,
@@ -56037,36 +56012,75 @@ function HeroSplitImageNewsletter({
56037
56012
  imageClassName,
56038
56013
  optixFlowConfig
56039
56014
  }) {
56040
- const renderNewsletterForm = React22.useMemo(() => {
56041
- if (newsletterFormSlot) return newsletterFormSlot;
56042
- if (!newsletterForm) return null;
56043
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
56044
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 sm:flex-row", children: [
56045
- /* @__PURE__ */ jsxRuntime.jsx(
56046
- Input,
56047
- {
56048
- type: "email",
56049
- placeholder: newsletterForm.placeholder,
56050
- className: "h-12 flex-1 rounded-full px-6"
56051
- }
56052
- ),
56053
- newsletterForm.action && /* @__PURE__ */ jsxRuntime.jsxs(
56054
- Pressable,
56055
- {
56056
- href: newsletterForm.action.href,
56057
- asButton: true,
56058
- variant: newsletterForm.action.variant,
56059
- className: newsletterForm.action.className,
56060
- children: [
56061
- newsletterForm.action.label,
56062
- newsletterForm.action.iconAfter
56063
- ]
56064
- }
56065
- )
56066
- ] }),
56067
- newsletterForm.helperText && (typeof newsletterForm.helperText === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm"), children: newsletterForm.helperText }) : newsletterForm.helperText)
56068
- ] });
56069
- }, [newsletterFormSlot, newsletterForm]);
56015
+ const { uploadTokens, uploadProgress, isUploading, uploadFiles, removeFile, resetUpload } = integration.useFileUpload({ onError });
56016
+ const { form, submissionError, formMethod, resetSubmissionState } = integration.useContactForm({
56017
+ formFields,
56018
+ formConfig,
56019
+ onSubmit,
56020
+ onSuccess: (data) => {
56021
+ resetUpload();
56022
+ onSuccess?.(data);
56023
+ },
56024
+ onError,
56025
+ uploadTokens
56026
+ });
56027
+ const renderForm = React22.useMemo(() => {
56028
+ if (formSlot) return formSlot;
56029
+ const defaultButtonAction = {
56030
+ label: "Subscribe",
56031
+ variant: "default",
56032
+ className: "h-12"
56033
+ };
56034
+ const action = buttonAction || defaultButtonAction;
56035
+ return /* @__PURE__ */ jsxRuntime.jsxs(
56036
+ forms.Form,
56037
+ {
56038
+ form,
56039
+ notificationConfig: {
56040
+ submissionError,
56041
+ successMessage
56042
+ },
56043
+ formConfig: {
56044
+ endpoint: formConfig?.endpoint,
56045
+ method: formMethod,
56046
+ submissionConfig: formConfig?.submissionConfig
56047
+ },
56048
+ onNewSubmission: () => {
56049
+ resetUpload();
56050
+ resetSubmissionState();
56051
+ },
56052
+ children: [
56053
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 sm:flex-row", children: [
56054
+ formFields.map((field) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
56055
+ integration.DynamicFormField,
56056
+ {
56057
+ field,
56058
+ uploadProgress,
56059
+ onFileUpload: uploadFiles,
56060
+ onFileRemove: removeFile,
56061
+ isUploading
56062
+ }
56063
+ ) }, field.name)),
56064
+ /* @__PURE__ */ jsxRuntime.jsxs(
56065
+ Pressable,
56066
+ {
56067
+ onClick: form.handleSubmit,
56068
+ asButton: true,
56069
+ variant: action.variant,
56070
+ className: cn("h-12", action.className),
56071
+ disabled: form.isSubmitting,
56072
+ children: [
56073
+ action.label,
56074
+ action.iconAfter
56075
+ ]
56076
+ }
56077
+ )
56078
+ ] }),
56079
+ helperText && (typeof helperText === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm mt-2"), children: helperText }) : helperText)
56080
+ ]
56081
+ }
56082
+ );
56083
+ }, [formSlot, formFields, form, formConfig, formMethod, buttonAction, uploadProgress, uploadFiles, removeFile, isUploading, submissionError, successMessage, helperText, resetUpload, resetSubmissionState]);
56070
56084
  const renderImage = React22.useMemo(() => {
56071
56085
  if (imageSlot) return imageSlot;
56072
56086
  if (!image) return null;
@@ -56131,7 +56145,7 @@ function HeroSplitImageNewsletter({
56131
56145
  children: description
56132
56146
  }
56133
56147
  ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
56134
- renderNewsletterForm
56148
+ renderForm
56135
56149
  ]
56136
56150
  }
56137
56151
  ),
@@ -57437,14 +57451,31 @@ function HeroProductShowcaseFloating({
57437
57451
  }
57438
57452
  );
57439
57453
  }
57454
+ var DEFAULT_FORM_FIELDS42 = [
57455
+ {
57456
+ name: "email",
57457
+ type: "email",
57458
+ label: "Email Address",
57459
+ placeholder: "Enter your email",
57460
+ required: true,
57461
+ columnSpan: 12
57462
+ }
57463
+ ];
57440
57464
  function HeroSaasDashboardPreview({
57441
57465
  badgeText,
57442
57466
  badgeIcon,
57443
57467
  badgeSlot,
57444
57468
  heading,
57445
57469
  description,
57446
- emailForm,
57447
- emailFormSlot,
57470
+ formFields = DEFAULT_FORM_FIELDS42,
57471
+ formConfig,
57472
+ onSubmit,
57473
+ onSuccess,
57474
+ onError,
57475
+ successMessage,
57476
+ buttonAction,
57477
+ helperText,
57478
+ formSlot,
57448
57479
  browserPreview,
57449
57480
  browserPreviewSlot,
57450
57481
  background,
@@ -57459,6 +57490,18 @@ function HeroSaasDashboardPreview({
57459
57490
  previewClassName,
57460
57491
  optixFlowConfig
57461
57492
  }) {
57493
+ const { uploadTokens, uploadProgress, isUploading, uploadFiles, removeFile, resetUpload } = integration.useFileUpload({ onError });
57494
+ const { form, submissionError, formMethod, resetSubmissionState } = integration.useContactForm({
57495
+ formFields,
57496
+ formConfig,
57497
+ onSubmit,
57498
+ onSuccess: (data) => {
57499
+ resetUpload();
57500
+ onSuccess?.(data);
57501
+ },
57502
+ onError,
57503
+ uploadTokens
57504
+ });
57462
57505
  const renderBadge = React22.useMemo(() => {
57463
57506
  if (badgeSlot) return badgeSlot;
57464
57507
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -57474,33 +57517,60 @@ function HeroSaasDashboardPreview({
57474
57517
  }
57475
57518
  );
57476
57519
  }, [badgeSlot, badgeIcon, badgeText]);
57477
- const renderEmailForm = React22.useMemo(() => {
57478
- if (emailFormSlot) return emailFormSlot;
57479
- if (!emailForm) return null;
57480
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
57481
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-10 flex flex-col items-center gap-4 sm:flex-row sm:justify-center", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full max-w-md items-center gap-2", children: [
57482
- /* @__PURE__ */ jsxRuntime.jsx(
57483
- Input,
57484
- {
57485
- type: "email",
57486
- placeholder: emailForm.placeholder,
57487
- className: "h-12 flex-1"
57488
- }
57489
- ),
57490
- emailForm.action && /* @__PURE__ */ jsxRuntime.jsx(
57491
- Pressable,
57492
- {
57493
- href: emailForm.action.href,
57494
- asButton: true,
57495
- variant: emailForm.action.variant,
57496
- className: emailForm.action.className,
57497
- children: emailForm.action.label
57498
- }
57499
- )
57500
- ] }) }),
57501
- emailForm.helperText && (typeof emailForm.helperText === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-4 text-sm", children: emailForm.helperText }) : emailForm.helperText)
57502
- ] });
57503
- }, [emailFormSlot, emailForm]);
57520
+ const renderForm = React22.useMemo(() => {
57521
+ if (formSlot) return formSlot;
57522
+ const defaultButtonAction = {
57523
+ label: "Start Free Trial",
57524
+ variant: "default",
57525
+ className: "h-12"
57526
+ };
57527
+ const action = buttonAction || defaultButtonAction;
57528
+ return /* @__PURE__ */ jsxRuntime.jsxs(
57529
+ forms.Form,
57530
+ {
57531
+ form,
57532
+ notificationConfig: {
57533
+ submissionError,
57534
+ successMessage
57535
+ },
57536
+ formConfig: {
57537
+ endpoint: formConfig?.endpoint,
57538
+ method: formMethod,
57539
+ submissionConfig: formConfig?.submissionConfig
57540
+ },
57541
+ onNewSubmission: () => {
57542
+ resetUpload();
57543
+ resetSubmissionState();
57544
+ },
57545
+ children: [
57546
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-10 flex flex-col items-center gap-4 sm:flex-row sm:justify-center", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full max-w-md items-center gap-2", children: [
57547
+ formFields.map((field) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
57548
+ integration.DynamicFormField,
57549
+ {
57550
+ field,
57551
+ uploadProgress,
57552
+ onFileUpload: uploadFiles,
57553
+ onFileRemove: removeFile,
57554
+ isUploading
57555
+ }
57556
+ ) }, field.name)),
57557
+ /* @__PURE__ */ jsxRuntime.jsx(
57558
+ Pressable,
57559
+ {
57560
+ onClick: form.handleSubmit,
57561
+ asButton: true,
57562
+ variant: action.variant,
57563
+ className: cn("h-12", action.className),
57564
+ disabled: form.isSubmitting,
57565
+ children: action.label
57566
+ }
57567
+ )
57568
+ ] }) }),
57569
+ helperText && (typeof helperText === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm text-center mt-4"), children: helperText }) : helperText)
57570
+ ]
57571
+ }
57572
+ );
57573
+ }, [formSlot, formFields, form, formConfig, formMethod, buttonAction, uploadProgress, uploadFiles, removeFile, isUploading, submissionError, successMessage, helperText, resetUpload, resetSubmissionState]);
57504
57574
  const renderBrowserPreview = React22.useMemo(() => {
57505
57575
  if (browserPreviewSlot) return browserPreviewSlot;
57506
57576
  if (!browserPreview) return null;
@@ -57584,7 +57654,7 @@ function HeroSaasDashboardPreview({
57584
57654
  children: description
57585
57655
  }
57586
57656
  ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
57587
- renderEmailForm
57657
+ renderForm
57588
57658
  ] }),
57589
57659
  renderBrowserPreview
57590
57660
  ] })
@@ -58344,12 +58414,12 @@ function HeroAgencyAnimatedImages({
58344
58414
  patternOpacity,
58345
58415
  className,
58346
58416
  containerClassName,
58347
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-10 md:pt-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid w-full grid-cols-1 items-center justify-between gap-14 lg:grid-cols-2", children: [
58417
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-10 md:pt-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid w-full gap-12 md:gap-20 grid-cols-1 lg:grid-cols-2", children: [
58348
58418
  /* @__PURE__ */ jsxRuntime.jsxs(
58349
58419
  "div",
58350
58420
  {
58351
58421
  className: cn(
58352
- "flex w-full max-w-125 flex-col gap-8 md:gap-14 lg:max-w-full",
58422
+ "flex w-full flex-col gap-4 items-start",
58353
58423
  contentClassName
58354
58424
  ),
58355
58425
  children: [
@@ -58357,12 +58427,12 @@ function HeroAgencyAnimatedImages({
58357
58427
  "h1",
58358
58428
  {
58359
58429
  className: cn(
58360
- "text-5xl md:text-6xl lg:text-7xl xl:text-[5rem] text-left text-pretty",
58430
+ "text-4xl md:text-5xl lg:text-7xl xl:text-[5rem] font-bold text-left text-pretty",
58361
58431
  headingClassName
58362
58432
  ),
58363
58433
  children: heading
58364
58434
  }
58365
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
58435
+ ) : heading),
58366
58436
  description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
58367
58437
  "p",
58368
58438
  {
@@ -58596,7 +58666,7 @@ function HeroStartupLaunchCta({
58596
58666
  "h1",
58597
58667
  {
58598
58668
  className: cn(
58599
- "mb-8 text-4xl font-normal text-balance md:text-7xl",
58669
+ "text-4xl font-normal text-balance md:text-7xl",
58600
58670
  headingClassName
58601
58671
  ),
58602
58672
  children: heading
@@ -58606,7 +58676,7 @@ function HeroStartupLaunchCta({
58606
58676
  "p",
58607
58677
  {
58608
58678
  className: cn(
58609
- "mb-12 max-w-full md:max-w-[70%] text-lg md:text-xl font-normal text-balance",
58679
+ "max-w-full md:max-w-[70%] text-lg md:text-xl font-normal text-balance",
58610
58680
  descriptionClassName
58611
58681
  ),
58612
58682
  children: description
@@ -58685,35 +58755,47 @@ function HeroEnterpriseSecurity({
58685
58755
  const renderFeatures = React22.useMemo(() => {
58686
58756
  if (featuresSlot) return featuresSlot;
58687
58757
  if (!features || features.length === 0) return null;
58688
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("mt-20 grid gap-8 md:grid-cols-3", featuresClassName), children: features.map((feature, index) => /* @__PURE__ */ jsxRuntime.jsxs(
58689
- Pressable,
58758
+ return /* @__PURE__ */ jsxRuntime.jsx(
58759
+ "div",
58690
58760
  {
58691
- href: feature.href,
58692
- className: cn("rounded-2xl border border-border p-6 text-center"),
58693
- children: [
58694
- /* @__PURE__ */ jsxRuntime.jsx(
58695
- "div",
58696
- {
58697
- className: cn(
58698
- "mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full",
58699
- feature.iconBgClass
58700
- ),
58701
- children: feature.icon ?? /* @__PURE__ */ jsxRuntime.jsx(
58702
- DynamicIcon,
58761
+ className: cn(
58762
+ "mt-12 md:mt-20 grid gap-4 md:gap-8 grid-cols-1 md:grid-cols-3",
58763
+ featuresClassName
58764
+ ),
58765
+ children: features.map((feature, index) => /* @__PURE__ */ jsxRuntime.jsxs(
58766
+ Pressable,
58767
+ {
58768
+ href: feature.href,
58769
+ className: cn(
58770
+ "rounded-2xl border border-border p-6 text-center",
58771
+ "transition-all duration-500 hover:ring-2 hover:shadow-lg"
58772
+ ),
58773
+ children: [
58774
+ /* @__PURE__ */ jsxRuntime.jsx(
58775
+ "div",
58703
58776
  {
58704
- name: feature.iconName || "lucide/check",
58705
- size: 24,
58706
- className: feature.iconColorClass
58777
+ className: cn(
58778
+ "mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full",
58779
+ feature.iconBgClass
58780
+ ),
58781
+ children: feature.icon ?? /* @__PURE__ */ jsxRuntime.jsx(
58782
+ DynamicIcon,
58783
+ {
58784
+ name: feature.iconName || "lucide/check",
58785
+ size: 24,
58786
+ className: feature.iconColorClass
58787
+ }
58788
+ )
58707
58789
  }
58708
- )
58709
- }
58710
- ),
58711
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-2 text-lg font-semibold ", children: feature.title }),
58712
- feature.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm", children: feature.description })
58713
- ]
58714
- },
58715
- index
58716
- )) });
58790
+ ),
58791
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-2 text-lg font-semibold ", children: feature.title }),
58792
+ feature.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm", children: feature.description })
58793
+ ]
58794
+ },
58795
+ index
58796
+ ))
58797
+ }
58798
+ );
58717
58799
  }, [featuresSlot, features, featuresClassName]);
58718
58800
  return /* @__PURE__ */ jsxRuntime.jsx(
58719
58801
  Section,
@@ -58726,40 +58808,49 @@ function HeroEnterpriseSecurity({
58726
58808
  className,
58727
58809
  containerClassName,
58728
58810
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pt-8 md:pt-0", children: [
58729
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto max-w-4xl text-center", contentClassName), children: [
58730
- badge && /* @__PURE__ */ jsxRuntime.jsxs(Badge, { className: cn("px-4", badgeClassName), children: [
58731
- badgeIcon,
58732
- typeof badge === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { children: badge }) : badge
58733
- ] }),
58734
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
58735
- "h1",
58736
- {
58737
- className: cn(
58738
- "mb-8 text-4xl font-normal text-balance md:text-7xl",
58739
- headingClassName
58740
- ),
58741
- children: heading
58742
- }
58743
- ) : heading),
58744
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
58745
- "p",
58746
- {
58747
- className: cn(
58748
- "mb-12 max-w-full md:max-w-[70%] text-lg md:text-xl font-normal text-balance",
58749
- descriptionClassName
58750
- ),
58751
- children: description
58752
- }
58753
- ) : description),
58754
- /* @__PURE__ */ jsxRuntime.jsx(
58755
- BlockActions,
58756
- {
58757
- actions,
58758
- actionsSlot,
58759
- actionsClassName
58760
- }
58761
- )
58762
- ] }),
58811
+ /* @__PURE__ */ jsxRuntime.jsxs(
58812
+ "div",
58813
+ {
58814
+ className: cn(
58815
+ "mx-auto max-w-4xl text-center flex flex-col items-center gap-6",
58816
+ contentClassName
58817
+ ),
58818
+ children: [
58819
+ badge && /* @__PURE__ */ jsxRuntime.jsxs(Badge, { className: cn("px-4", badgeClassName), children: [
58820
+ badgeIcon,
58821
+ typeof badge === "string" ? /* @__PURE__ */ jsxRuntime.jsx("span", { children: badge }) : badge
58822
+ ] }),
58823
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
58824
+ "h1",
58825
+ {
58826
+ className: cn(
58827
+ "text-4xl font-bold text-balance md:text-7xl",
58828
+ headingClassName
58829
+ ),
58830
+ children: heading
58831
+ }
58832
+ ) : heading),
58833
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
58834
+ "p",
58835
+ {
58836
+ className: cn(
58837
+ "max-w-full md:max-w-[70%] text-lg md:text-xl font-normal text-balance",
58838
+ descriptionClassName
58839
+ ),
58840
+ children: description
58841
+ }
58842
+ ) : description),
58843
+ /* @__PURE__ */ jsxRuntime.jsx(
58844
+ BlockActions,
58845
+ {
58846
+ actions,
58847
+ actionsSlot,
58848
+ actionsClassName
58849
+ }
58850
+ )
58851
+ ]
58852
+ }
58853
+ ),
58763
58854
  renderFeatures
58764
58855
  ] })
58765
58856
  }
@@ -58771,17 +58862,18 @@ function HeroCreativeStudioStacked({
58771
58862
  heading,
58772
58863
  description,
58773
58864
  videoAction,
58865
+ patternClassName,
58774
58866
  actions,
58775
58867
  onVideoClick,
58776
58868
  videoDialog,
58777
58869
  images,
58778
58870
  imagesSlot,
58779
58871
  background,
58780
- spacing,
58872
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
58873
+ spacing = "xl",
58781
58874
  pattern,
58782
58875
  patternOpacity,
58783
58876
  className,
58784
- containerClassName,
58785
58877
  contentClassName,
58786
58878
  taglineClassName,
58787
58879
  headingClassName,
@@ -58879,8 +58971,10 @@ function HeroCreativeStudioStacked({
58879
58971
  spacing,
58880
58972
  pattern,
58881
58973
  patternOpacity,
58882
- className: cn(className),
58883
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("container", containerClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 items-center gap-10 lg:grid-cols-2", children: [
58974
+ patternClassName,
58975
+ className,
58976
+ containerClassName,
58977
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-8 md:pt-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 items-center gap-10 lg:grid-cols-2", children: [
58884
58978
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-6", contentClassName), children: [
58885
58979
  tagline && (typeof tagline === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
58886
58980
  "p",
@@ -58897,7 +58991,7 @@ function HeroCreativeStudioStacked({
58897
58991
  "h1",
58898
58992
  {
58899
58993
  className: cn(
58900
- "max-w-[920px] text-center text-4xl leading-tight font-semibold md:text-6xl lg:text-7xl text-balance",
58994
+ "max-w-[920px] text-left text-4xl leading-tight font-semibold md:text-6xl lg:text-7xl text-balance",
58901
58995
  headingClassName
58902
58996
  ),
58903
58997
  children: heading
@@ -58907,7 +59001,7 @@ function HeroCreativeStudioStacked({
58907
59001
  "p",
58908
59002
  {
58909
59003
  className: cn(
58910
- "max-w-[750px] text-center text-base leading-relaxed font-normal md:text-xl text-balance",
59004
+ "max-w-[750px] text-left text-base leading-relaxed font-normal md:text-xl text-balance",
58911
59005
  descriptionClassName
58912
59006
  ),
58913
59007
  children: description
@@ -58967,11 +59061,11 @@ function HeroDigitalAgencyFullscreen({
58967
59061
  actionsSlot,
58968
59062
  backgroundImage,
58969
59063
  background,
58970
- spacing = "none",
58971
59064
  pattern,
58972
59065
  patternOpacity,
58973
59066
  className,
58974
- containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
59067
+ spacing = "py-0 md:py-0",
59068
+ containerClassName = "w-screen max-w-full relative z-10 px-0 min-h-screen h-full",
58975
59069
  contentClassName,
58976
59070
  headingClassName,
58977
59071
  descriptionClassName,
@@ -59017,7 +59111,7 @@ function HeroDigitalAgencyFullscreen({
59017
59111
  img.Img,
59018
59112
  {
59019
59113
  src: backgroundImage,
59020
- alt: "",
59114
+ alt: "Hero Background Image",
59021
59115
  className: "h-full w-full brightness-50 object-cover object-center",
59022
59116
  eager: true,
59023
59117
  optixFlowConfig
@@ -59025,20 +59119,21 @@ function HeroDigitalAgencyFullscreen({
59025
59119
  )
59026
59120
  }
59027
59121
  ),
59028
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex w-full flex-col justify-between gap-10", children: /* @__PURE__ */ jsxRuntime.jsxs(
59122
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsx(
59029
59123
  "div",
59030
59124
  {
59031
59125
  className: cn(
59032
- "mx-auto flex max-w-125 flex-1 flex-col items-center justify-center gap-7 sm:max-w-150 md:max-w-200",
59126
+ "flex min-h-screen h-full w-full flex-col items-center justify-end",
59033
59127
  contentClassName
59034
59128
  ),
59035
- children: [
59129
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "container flex flex-col gap-6 mb-6 md:mb-24 px-6 md:px-0", children: [
59036
59130
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
59037
59131
  "h1",
59038
59132
  {
59039
59133
  className: cn(
59040
- "mb-8 text-4xl font-normal text-balance md:text-7xl",
59041
- headingClassName
59134
+ "text-4xl font-bold text-balance md:text-7xl",
59135
+ headingClassName,
59136
+ backgroundImage ? "text-white text-shadow-2xl" : ""
59042
59137
  ),
59043
59138
  children: heading
59044
59139
  }
@@ -59047,8 +59142,9 @@ function HeroDigitalAgencyFullscreen({
59047
59142
  "p",
59048
59143
  {
59049
59144
  className: cn(
59050
- "mb-12 max-w-full md:max-w-[70%] text-lg md:text-xl font-normal text-balance",
59051
- descriptionClassName
59145
+ "max-w-full md:max-w-[70%] text-lg md:text-xl font-normal text-balance",
59146
+ descriptionClassName,
59147
+ backgroundImage ? "text-white text-shadow-2xl" : ""
59052
59148
  ),
59053
59149
  children: description
59054
59150
  }
@@ -59061,9 +59157,9 @@ function HeroDigitalAgencyFullscreen({
59061
59157
  actionsClassName
59062
59158
  }
59063
59159
  )
59064
- ]
59160
+ ] })
59065
59161
  }
59066
- ) }) })
59162
+ ) })
59067
59163
  ]
59068
59164
  }
59069
59165
  );
@@ -59143,7 +59239,7 @@ function HeroCustomerSupportLayered({
59143
59239
  patternClassName,
59144
59240
  className,
59145
59241
  containerClassName,
59146
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-8 md:pt-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 items-center gap-8 md:gap-20 md:grid-cols-2", children: [
59242
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-8 md:pt-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 items-center gap-12 md:gap-20 md:grid-cols-2", children: [
59147
59243
  /* @__PURE__ */ jsxRuntime.jsxs(
59148
59244
  "div",
59149
59245
  {
@@ -59430,11 +59526,11 @@ var fadeVariants2 = {
59430
59526
  initial: { opacity: 0 },
59431
59527
  animate: {
59432
59528
  opacity: 1,
59433
- transition: { duration: 0.8, ease: [0.4, 0, 0.2, 1] }
59529
+ transition: { duration: 1, ease: [0.4, 0, 0.2, 1] }
59434
59530
  },
59435
59531
  exit: {
59436
59532
  opacity: 0,
59437
- transition: { duration: 0.8, ease: [0.4, 0, 0.2, 1] }
59533
+ transition: { duration: 1, ease: [0.4, 0, 0.2, 1] }
59438
59534
  }
59439
59535
  };
59440
59536
  function HeroBusinessCarouselDots({
@@ -59468,7 +59564,7 @@ function HeroBusinessCarouselDots({
59468
59564
  if (imageCount <= 1) return;
59469
59565
  timerRef.current = setInterval(() => {
59470
59566
  setCurrentIndex((prev) => (prev + 1) % imageCount);
59471
- }, 4e3);
59567
+ }, 7e3);
59472
59568
  }, [imageCount]);
59473
59569
  React22.useEffect(() => {
59474
59570
  startTimer();
@@ -59488,42 +59584,52 @@ function HeroBusinessCarouselDots({
59488
59584
  className: cn("overflow-hidden", className),
59489
59585
  containerClassName,
59490
59586
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pt-8 md:pt-0", children: [
59491
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto max-w-5xl text-center", contentClassName), children: [
59492
- badge && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: badgeVariant, className: badgeClassName, children: badge }),
59493
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
59494
- "h1",
59495
- {
59496
- className: cn(
59497
- "mt-6 text-4xl font-bold md:text-6xl text-balance",
59498
- headingClassName
59499
- ),
59500
- children: heading
59501
- }
59502
- ) : heading),
59503
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
59504
- "p",
59505
- {
59506
- className: cn(
59507
- "mt-5 text-lg md:text-xl lg:px-32 text-balance",
59508
- descriptionClassName
59509
- ),
59510
- children: description
59511
- }
59512
- ) : description),
59513
- /* @__PURE__ */ jsxRuntime.jsx(
59514
- BlockActions,
59515
- {
59516
- actions,
59517
- actionsSlot,
59518
- actionsClassName
59519
- }
59520
- )
59521
- ] }),
59522
59587
  /* @__PURE__ */ jsxRuntime.jsxs(
59523
59588
  "div",
59524
59589
  {
59525
59590
  className: cn(
59526
- "relative mx-4 mt-10 md:mx-10 md:mt-16",
59591
+ "mx-auto max-w-full md:max-w-5xl text-center flex flex-col items-center px-4",
59592
+ contentClassName
59593
+ ),
59594
+ children: [
59595
+ badge && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: badgeVariant, className: badgeClassName, children: badge }),
59596
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
59597
+ "h1",
59598
+ {
59599
+ className: cn(
59600
+ "mt-6 text-4xl font-bold md:text-6xl text-balance",
59601
+ headingClassName
59602
+ ),
59603
+ children: heading
59604
+ }
59605
+ ) : heading),
59606
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
59607
+ "p",
59608
+ {
59609
+ className: cn(
59610
+ "mt-5 text-lg md:text-xl lg:px-32 text-balance",
59611
+ descriptionClassName
59612
+ ),
59613
+ children: description
59614
+ }
59615
+ ) : description),
59616
+ /* @__PURE__ */ jsxRuntime.jsx(
59617
+ BlockActions,
59618
+ {
59619
+ actions,
59620
+ actionsSlot,
59621
+ actionsClassName,
59622
+ mobileConfig: { width: "full", position: "center" }
59623
+ }
59624
+ )
59625
+ ]
59626
+ }
59627
+ ),
59628
+ /* @__PURE__ */ jsxRuntime.jsxs(
59629
+ "div",
59630
+ {
59631
+ className: cn(
59632
+ "relative mx-4 mt-18 md:mx-10 md:mt-32",
59527
59633
  carouselClassName
59528
59634
  ),
59529
59635
  children: [
@@ -59531,7 +59637,7 @@ function HeroBusinessCarouselDots({
59531
59637
  /* @__PURE__ */ jsxRuntime.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" }),
59532
59638
  /* @__PURE__ */ jsxRuntime.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)]" }),
59533
59639
  /* @__PURE__ */ jsxRuntime.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)]" }),
59534
- carouselSlot ? carouselSlot : activeImage ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative aspect-video w-full overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", initial: false, children: /* @__PURE__ */ jsxRuntime.jsx(
59640
+ carouselSlot ? carouselSlot : activeImage ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative aspect-video w-full overflow-hidden ", children: /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { initial: false, children: /* @__PURE__ */ jsxRuntime.jsx(
59535
59641
  framerMotion.motion.div,
59536
59642
  {
59537
59643
  variants: fadeVariants2,
@@ -59588,7 +59694,7 @@ function HeroDeveloperToolsCode({
59588
59694
  const renderBadge = React22.useMemo(() => {
59589
59695
  if (badgeSlot) return badgeSlot;
59590
59696
  if (!badgeText && !badgeIcon) return null;
59591
- return /* @__PURE__ */ jsxRuntime.jsxs(Badge, { className: "w-fit gap-2 mx-4", children: [
59697
+ return /* @__PURE__ */ jsxRuntime.jsxs(Badge, { className: "gap-2 px-4 py-1", children: [
59592
59698
  badgeIcon && /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: badgeIcon, size: 14 }),
59593
59699
  badgeText
59594
59700
  ] });
@@ -59645,7 +59751,7 @@ function HeroDeveloperToolsCode({
59645
59751
  className,
59646
59752
  containerClassName,
59647
59753
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-8 md:pt-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid items-center gap-12 lg:grid-cols-2 lg:gap-20", children: [
59648
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-8", contentClassName), children: [
59754
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-4 md:gap-8", contentClassName), children: [
59649
59755
  renderBadge,
59650
59756
  heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
59651
59757
  "h1",
@@ -59709,41 +59815,51 @@ function HeroEcommerceProductShowcase({
59709
59815
  const renderStats = React22.useMemo(() => {
59710
59816
  if (statsSlot) return statsSlot;
59711
59817
  if (!stats || stats.length === 0) return null;
59712
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex items-center gap-6 pt-4", statsClassName), children: stats.map((stat, index) => /* @__PURE__ */ jsxRuntime.jsxs(React22__namespace.Fragment, { children: [
59713
- index > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-12 w-px bg-border" }),
59714
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
59715
- /* @__PURE__ */ jsxRuntime.jsxs(
59716
- "div",
59717
- {
59718
- className: cn(
59719
- "flex items-center",
59720
- stat.icon ? "justify-between" : "justify-center"
59721
- ),
59722
- children: [
59723
- stat.icon,
59724
- /* @__PURE__ */ jsxRuntime.jsx(
59725
- "div",
59726
- {
59727
- className: cn(
59728
- "font-bold ",
59729
- stat.icon ? "text-xl" : "text-2xl"
59730
- ),
59731
- children: stat.value
59732
- }
59733
- )
59734
- ]
59735
- }
59818
+ return /* @__PURE__ */ jsxRuntime.jsx(
59819
+ "div",
59820
+ {
59821
+ className: cn(
59822
+ "flex flex-col md:flex-row items-center gap-4 md:gap-6 pt-8 md:pt-12",
59823
+ statsClassName
59736
59824
  ),
59737
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm"), children: stat.label })
59738
- ] })
59739
- ] }, index)) });
59825
+ children: stats.map((stat, index) => /* @__PURE__ */ jsxRuntime.jsxs(React22__namespace.Fragment, { children: [
59826
+ index > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-12 w-px bg-border hidden md:flex" }),
59827
+ /* @__PURE__ */ jsxRuntime.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: [
59828
+ /* @__PURE__ */ jsxRuntime.jsxs(
59829
+ "div",
59830
+ {
59831
+ className: cn(
59832
+ "flex items-center gap-2 w-fit md:w-full",
59833
+ stat.icon ? "justify-between" : "justify-center"
59834
+ ),
59835
+ children: [
59836
+ stat.icon,
59837
+ /* @__PURE__ */ jsxRuntime.jsx(
59838
+ "div",
59839
+ {
59840
+ className: cn(
59841
+ "font-bold ",
59842
+ stat.icon ? "text-xl" : "text-2xl"
59843
+ ),
59844
+ children: stat.value
59845
+ }
59846
+ )
59847
+ ]
59848
+ }
59849
+ ),
59850
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm"), children: stat.label })
59851
+ ] })
59852
+ ] }, index))
59853
+ }
59854
+ );
59740
59855
  }, [statsSlot, stats, statsClassName]);
59741
59856
  const renderImages = React22.useMemo(() => {
59742
59857
  if (imagesSlot) return imagesSlot;
59743
59858
  if (!images || images.length === 0) return null;
59744
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid grid-cols-2 gap-4", imagesClassName), children: [
59745
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
59746
- images[0] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsxRuntime.jsx(
59859
+ const imgClassWrapper = "overflow-hidden rounded-3xl ring-4 ring-primary shadow-2xl";
59860
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid grid-cols-2 gap-4 md:gap-8", imagesClassName), children: [
59861
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 md:space-y-8", children: [
59862
+ images[0] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: imgClassWrapper, children: /* @__PURE__ */ jsxRuntime.jsx(
59747
59863
  img.Img,
59748
59864
  {
59749
59865
  src: images[0].src,
@@ -59755,7 +59871,7 @@ function HeroEcommerceProductShowcase({
59755
59871
  optixFlowConfig
59756
59872
  }
59757
59873
  ) }),
59758
- images[1] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsxRuntime.jsx(
59874
+ images[1] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: imgClassWrapper, children: /* @__PURE__ */ jsxRuntime.jsx(
59759
59875
  img.Img,
59760
59876
  {
59761
59877
  src: images[1].src,
@@ -59768,8 +59884,8 @@ function HeroEcommerceProductShowcase({
59768
59884
  }
59769
59885
  ) })
59770
59886
  ] }),
59771
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 pt-8", children: [
59772
- images[2] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsxRuntime.jsx(
59887
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 md:space-y-8 pt-12", children: [
59888
+ images[2] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: imgClassWrapper, children: /* @__PURE__ */ jsxRuntime.jsx(
59773
59889
  img.Img,
59774
59890
  {
59775
59891
  src: images[2].src,
@@ -59781,7 +59897,7 @@ function HeroEcommerceProductShowcase({
59781
59897
  optixFlowConfig
59782
59898
  }
59783
59899
  ) }),
59784
- images[3] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsxRuntime.jsx(
59900
+ images[3] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: imgClassWrapper, children: /* @__PURE__ */ jsxRuntime.jsx(
59785
59901
  img.Img,
59786
59902
  {
59787
59903
  src: images[3].src,
@@ -59807,30 +59923,39 @@ function HeroEcommerceProductShowcase({
59807
59923
  className,
59808
59924
  containerClassName,
59809
59925
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-8 md:pt-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid items-center gap-12 lg:grid-cols-2 lg:gap-20", children: [
59810
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "order-1", children: renderImages }),
59811
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-8 order-2", contentClassName), children: [
59812
- renderBadge,
59813
- heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
59814
- "h1",
59815
- {
59816
- className: cn(
59817
- "text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl text-balance",
59818
- headingClassName
59926
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "order-2 md:order-1", children: renderImages }),
59927
+ /* @__PURE__ */ jsxRuntime.jsxs(
59928
+ "div",
59929
+ {
59930
+ className: cn(
59931
+ "flex flex-col gap-4 md:gap-6 order-1 md:order-2",
59932
+ contentClassName
59933
+ ),
59934
+ children: [
59935
+ renderBadge,
59936
+ heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
59937
+ "h1",
59938
+ {
59939
+ className: cn(
59940
+ "text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl text-balance",
59941
+ headingClassName
59942
+ ),
59943
+ children: heading
59944
+ }
59945
+ ) : heading),
59946
+ description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg text-balance", descriptionClassName), children: description }) : description),
59947
+ /* @__PURE__ */ jsxRuntime.jsx(
59948
+ BlockActions,
59949
+ {
59950
+ actions,
59951
+ actionsSlot,
59952
+ actionsClassName
59953
+ }
59819
59954
  ),
59820
- children: heading
59821
- }
59822
- ) : heading),
59823
- description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg text-balance", descriptionClassName), children: description }) : description),
59824
- /* @__PURE__ */ jsxRuntime.jsx(
59825
- BlockActions,
59826
- {
59827
- actions,
59828
- actionsSlot,
59829
- actionsClassName
59830
- }
59831
- ),
59832
- renderStats
59833
- ] })
59955
+ renderStats
59956
+ ]
59957
+ }
59958
+ )
59834
59959
  ] }) })
59835
59960
  }
59836
59961
  );
@@ -60244,6 +60369,16 @@ function HeroNewsletterMinimal({
60244
60369
  }
60245
60370
  );
60246
60371
  }
60372
+ var DEFAULT_FORM_FIELDS43 = [
60373
+ {
60374
+ name: "email",
60375
+ type: "email",
60376
+ label: "Email Address",
60377
+ placeholder: "Enter your email",
60378
+ required: true,
60379
+ columnSpan: 12
60380
+ }
60381
+ ];
60247
60382
  var digitVariants = {
60248
60383
  initial: { y: -20, opacity: 0 },
60249
60384
  animate: {
@@ -60259,7 +60394,7 @@ var digitVariants = {
60259
60394
  };
60260
60395
  function CountdownDigit({ value, label }) {
60261
60396
  const display = value.toString().padStart(2, "0");
60262
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center", children: [
60397
+ return /* @__PURE__ */ jsxRuntime.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: [
60263
60398
  /* @__PURE__ */ jsxRuntime.jsx(
60264
60399
  "div",
60265
60400
  {
@@ -60279,7 +60414,7 @@ function CountdownDigit({ value, label }) {
60279
60414
  ) })
60280
60415
  }
60281
60416
  ),
60282
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("mt-2 text-sm"), children: label })
60417
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("mt-2 text-xs md:text-sm"), children: label })
60283
60418
  ] });
60284
60419
  }
60285
60420
  function HeroComingSoonCountdown({
@@ -60289,8 +60424,14 @@ function HeroComingSoonCountdown({
60289
60424
  description,
60290
60425
  countdownDate,
60291
60426
  countdownSlot,
60292
- emailPlaceholder = "Enter your email",
60293
- submitAction,
60427
+ formFields = DEFAULT_FORM_FIELDS43,
60428
+ formConfig,
60429
+ onSubmit,
60430
+ onSuccess,
60431
+ onError,
60432
+ successMessage,
60433
+ buttonAction,
60434
+ helperText,
60294
60435
  formSlot,
60295
60436
  socialLinks,
60296
60437
  socialLinksSlot,
@@ -60309,6 +60450,18 @@ function HeroComingSoonCountdown({
60309
60450
  socialLinksClassName
60310
60451
  }) {
60311
60452
  const [timeLeft, setTimeLeft] = React22.useState(null);
60453
+ const { uploadTokens, uploadProgress, isUploading, uploadFiles, removeFile, resetUpload } = integration.useFileUpload({ onError });
60454
+ const { form, submissionError, formMethod, resetSubmissionState } = integration.useContactForm({
60455
+ formFields,
60456
+ formConfig,
60457
+ onSubmit,
60458
+ onSuccess: (data) => {
60459
+ resetUpload();
60460
+ onSuccess?.(data);
60461
+ },
60462
+ onError,
60463
+ uploadTokens
60464
+ });
60312
60465
  const calculateTimeLeft = React22.useCallback(() => {
60313
60466
  if (!countdownDate) return null;
60314
60467
  const now = Date.now();
@@ -60335,31 +60488,59 @@ function HeroComingSoonCountdown({
60335
60488
  const showCountdown = countdownSlot || timeLeft;
60336
60489
  const renderForm = React22.useMemo(() => {
60337
60490
  if (formSlot) return formSlot;
60338
- if (!submitAction) return null;
60339
- const {
60340
- label,
60341
- icon,
60342
- iconAfter,
60343
- children,
60344
- className: actionClassName,
60345
- ...pressableProps
60346
- } = submitAction;
60347
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
60348
- /* @__PURE__ */ jsxRuntime.jsx(
60349
- Input,
60350
- {
60351
- type: "email",
60352
- placeholder: emailPlaceholder,
60353
- className: cn("h-12 flex-1 border-border/50")
60354
- }
60355
- ),
60356
- /* @__PURE__ */ jsxRuntime.jsx(Pressable, { asButton: true, className: actionClassName, ...pressableProps, children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
60357
- icon,
60358
- label,
60359
- iconAfter
60360
- ] }) })
60361
- ] });
60362
- }, [formSlot, submitAction, emailPlaceholder]);
60491
+ const defaultButtonAction = {
60492
+ label: "Notify Me",
60493
+ variant: "default",
60494
+ className: "h-12"
60495
+ };
60496
+ const action = buttonAction || defaultButtonAction;
60497
+ return /* @__PURE__ */ jsxRuntime.jsxs(
60498
+ forms.Form,
60499
+ {
60500
+ form,
60501
+ notificationConfig: {
60502
+ submissionError,
60503
+ successMessage
60504
+ },
60505
+ formConfig: {
60506
+ endpoint: formConfig?.endpoint,
60507
+ method: formMethod,
60508
+ submissionConfig: formConfig?.submissionConfig
60509
+ },
60510
+ onNewSubmission: () => {
60511
+ resetUpload();
60512
+ resetSubmissionState();
60513
+ },
60514
+ children: [
60515
+ formFields.map((field) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
60516
+ integration.DynamicFormField,
60517
+ {
60518
+ field,
60519
+ uploadProgress,
60520
+ onFileUpload: uploadFiles,
60521
+ onFileRemove: removeFile,
60522
+ isUploading
60523
+ }
60524
+ ) }, field.name)),
60525
+ /* @__PURE__ */ jsxRuntime.jsxs(
60526
+ Pressable,
60527
+ {
60528
+ onClick: form.handleSubmit,
60529
+ asButton: true,
60530
+ variant: action.variant,
60531
+ className: cn("h-12", action.className),
60532
+ disabled: form.isSubmitting,
60533
+ children: [
60534
+ action.label,
60535
+ action.iconAfter
60536
+ ]
60537
+ }
60538
+ ),
60539
+ helperText && (typeof helperText === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm mt-2 text-center"), children: helperText }) : helperText)
60540
+ ]
60541
+ }
60542
+ );
60543
+ }, [formSlot, formFields, form, formConfig, formMethod, buttonAction, uploadProgress, uploadFiles, removeFile, isUploading, submissionError, successMessage, helperText, resetUpload, resetSubmissionState]);
60363
60544
  const renderSocialLinks = React22.useMemo(() => {
60364
60545
  if (socialLinksSlot) return socialLinksSlot;
60365
60546
  if (!socialLinks || socialLinks.length === 0) return null;
@@ -60385,7 +60566,7 @@ function HeroComingSoonCountdown({
60385
60566
  patternClassName,
60386
60567
  className,
60387
60568
  containerClassName,
60388
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pt-8 md:pt-0", children: [
60569
+ children: /* @__PURE__ */ jsxRuntime.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: [
60389
60570
  (badgeText || badgeIcon) && /* @__PURE__ */ jsxRuntime.jsxs(Badge, { className: cn("gap-2 px-4 py-2", badgeClassName), children: [
60390
60571
  badgeIcon && /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: badgeIcon, size: 16 }),
60391
60572
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: badgeText })
@@ -60394,7 +60575,7 @@ function HeroComingSoonCountdown({
60394
60575
  "h1",
60395
60576
  {
60396
60577
  className: cn(
60397
- "mt-8 max-w-3xl text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl text-balance",
60578
+ "max-w-full md:max-w-lg text-5xl font-bold tracking-tight md:text-6xl lg:text-7xl text-balance",
60398
60579
  headingClassName
60399
60580
  ),
60400
60581
  children: heading
@@ -60404,7 +60585,7 @@ function HeroComingSoonCountdown({
60404
60585
  "p",
60405
60586
  {
60406
60587
  className: cn(
60407
- "mt-6 max-w-xl text-lg md:text-xl text-balance",
60588
+ "max-w-full md:max-w-md text-lg md:text-xl text-balance",
60408
60589
  descriptionClassName
60409
60590
  ),
60410
60591
  children: description
@@ -60414,7 +60595,7 @@ function HeroComingSoonCountdown({
60414
60595
  "div",
60415
60596
  {
60416
60597
  className: cn(
60417
- "mt-12 grid grid-cols-4 gap-4 md:gap-8",
60598
+ "py-8 grid grid-cols-4 gap-2 md:gap-4 lg:gap-8",
60418
60599
  countdownClassName
60419
60600
  ),
60420
60601
  children: countdownSlot ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -60429,7 +60610,7 @@ function HeroComingSoonCountdown({
60429
60610
  "div",
60430
60611
  {
60431
60612
  className: cn(
60432
- "mt-12 flex w-full max-w-md flex-col gap-4 sm:flex-row",
60613
+ "flex w-full max-w-md flex-col gap-4 sm:flex-row",
60433
60614
  formClassName
60434
60615
  ),
60435
60616
  children: renderForm
@@ -60438,10 +60619,7 @@ function HeroComingSoonCountdown({
60438
60619
  (socialLinksSlot || socialLinks && socialLinks.length > 0) && /* @__PURE__ */ jsxRuntime.jsx(
60439
60620
  "div",
60440
60621
  {
60441
- className: cn(
60442
- "mt-16 flex items-center gap-6",
60443
- socialLinksClassName
60444
- ),
60622
+ className: cn("mt-8 flex items-center gap-6", socialLinksClassName),
60445
60623
  children: renderSocialLinks
60446
60624
  }
60447
60625
  )
@@ -60480,23 +60658,56 @@ function HeroEventRegistration({
60480
60658
  }) {
60481
60659
  const renderBadge = React22.useMemo(() => {
60482
60660
  if (badgeSlot) return badgeSlot;
60483
- return /* @__PURE__ */ jsxRuntime.jsxs(Badge, { className: "px-4 gap-2", children: [
60484
- badgeIcon && /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: badgeIcon }),
60661
+ return /* @__PURE__ */ jsxRuntime.jsxs(Badge, { className: "px-4 py-1 gap-2", children: [
60662
+ badgeIcon && /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: badgeIcon, size: 18 }),
60485
60663
  badgeText
60486
60664
  ] });
60487
60665
  }, [badgeSlot, badgeIcon, badgeText]);
60488
60666
  const renderStats = React22.useMemo(() => {
60489
60667
  if (statsSlot) return statsSlot;
60490
60668
  if (!stats || stats.length === 0) return null;
60491
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center w-full", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("grid grid-cols-3 gap-4 pt-4", statsClassName), children: stats.map((stat, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
60492
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-2xl font-bold ", children: stat.value }),
60493
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm"), children: stat.label })
60494
- ] }, index)) }) });
60669
+ return /* @__PURE__ */ jsxRuntime.jsx(
60670
+ "div",
60671
+ {
60672
+ className: cn(
60673
+ "flex flex-col md:flex-row items-center gap-4 md:gap-6 pt-8 md:pt-12",
60674
+ statsClassName
60675
+ ),
60676
+ children: stats.map((stat, index) => /* @__PURE__ */ jsxRuntime.jsxs(React22__namespace.Fragment, { children: [
60677
+ index > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-12 w-px bg-border hidden md:flex" }),
60678
+ /* @__PURE__ */ jsxRuntime.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: [
60679
+ /* @__PURE__ */ jsxRuntime.jsxs(
60680
+ "div",
60681
+ {
60682
+ className: cn(
60683
+ "flex items-center gap-2 w-fit md:w-full",
60684
+ stat.icon ? "justify-between" : "justify-center"
60685
+ ),
60686
+ children: [
60687
+ stat.icon,
60688
+ /* @__PURE__ */ jsxRuntime.jsx(
60689
+ "div",
60690
+ {
60691
+ className: cn(
60692
+ "font-bold ",
60693
+ stat.icon ? "text-xl" : "text-2xl"
60694
+ ),
60695
+ children: stat.value
60696
+ }
60697
+ )
60698
+ ]
60699
+ }
60700
+ ),
60701
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm"), children: stat.label })
60702
+ ] })
60703
+ ] }, index))
60704
+ }
60705
+ );
60495
60706
  }, [statsSlot, stats, statsClassName]);
60496
60707
  const renderLocation = React22.useMemo(() => {
60497
60708
  if (locationSlot) return locationSlot;
60498
60709
  if (!locationLabel && !locationSublabel) return null;
60499
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -bottom-4 -left-4 rounded-xl bg-card p-4 shadow-lg", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
60710
+ return /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
60500
60711
  /* @__PURE__ */ jsxRuntime.jsx(
60501
60712
  "div",
60502
60713
  {
@@ -60507,8 +60718,8 @@ function HeroEventRegistration({
60507
60718
  }
60508
60719
  ),
60509
60720
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
60510
- locationLabel && (typeof locationLabel === "string" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold ", children: locationLabel }) : locationLabel),
60511
- locationSublabel && (typeof locationSublabel === "string" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm"), children: locationSublabel }) : locationSublabel)
60721
+ locationLabel && (typeof locationLabel === "string" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold text-card-foreground", children: locationLabel }) : locationLabel),
60722
+ locationSublabel && (typeof locationSublabel === "string" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm text-card-foreground"), children: locationSublabel }) : locationSublabel)
60512
60723
  ] })
60513
60724
  ] }) });
60514
60725
  }, [locationSlot, locationLabel, locationSublabel]);
@@ -60542,7 +60753,7 @@ function HeroEventRegistration({
60542
60753
  "div",
60543
60754
  {
60544
60755
  className: cn(
60545
- "flex flex-col items-start gap-6 md:gap-8",
60756
+ "flex flex-col items-start gap-4 md:gap-6",
60546
60757
  contentClassName
60547
60758
  ),
60548
60759
  children: [