@opensite/ui 2.3.3 → 2.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/registry.js CHANGED
@@ -41901,9 +41901,24 @@ function FooterNewsletterContact({
41901
41901
  }
41902
41902
  );
41903
41903
  }
41904
+ var DEFAULT_STYLE_RULES41 = {
41905
+ formContainer: "flex items-stretch w-full",
41906
+ fieldsContainer: "",
41907
+ fieldClassName: "",
41908
+ formClassName: ""
41909
+ };
41910
+ var DEFAULT_FORM_FIELDS42 = [
41911
+ {
41912
+ name: "email",
41913
+ type: "email",
41914
+ label: "Email Address",
41915
+ placeholder: "Enter your email",
41916
+ required: true,
41917
+ columnSpan: 12
41918
+ }
41919
+ ];
41904
41920
  function FooterSplitImageAccordion({
41905
41921
  newsletterTitle,
41906
- emailPlaceholder,
41907
41922
  footerLinks,
41908
41923
  socialLinks,
41909
41924
  paymentPlatforms,
@@ -41912,7 +41927,7 @@ function FooterSplitImageAccordion({
41912
41927
  copyright,
41913
41928
  background,
41914
41929
  containerClassName = "w-screen px-0 sm:px-0 lg:px-0 max-w-screen relative z-10",
41915
- spacing = "py-6 md:py-0",
41930
+ spacing = "none",
41916
41931
  pattern,
41917
41932
  patternOpacity,
41918
41933
  className,
@@ -41934,51 +41949,46 @@ function FooterSplitImageAccordion({
41934
41949
  copyrightClassName,
41935
41950
  submenuLinksClassName,
41936
41951
  optixFlowConfig,
41937
- formConfig,
41938
- onSubmit,
41939
- onSuccess,
41940
- onError
41952
+ formEngineSetup,
41953
+ buttonAction,
41954
+ formSlot
41941
41955
  }) {
41942
- const form = useForm({
41943
- initialValues: {
41944
- email: ""
41945
- },
41946
- validationSchema: {
41947
- email: (value) => {
41948
- if (!value) return "Email is required";
41949
- if (!isValidEmail(value)) return "Please enter a valid email address";
41950
- return void 0;
41951
- }
41952
- },
41953
- onSubmit: async (values, helpers) => {
41954
- const shouldAutoSubmit = Boolean(formConfig?.endpoint);
41955
- if (!shouldAutoSubmit && !onSubmit) {
41956
- return;
41957
- }
41958
- try {
41959
- let result;
41960
- if (shouldAutoSubmit) {
41961
- result = await submitPageSpeedForm(values, formConfig);
41962
- }
41963
- if (onSubmit) {
41964
- await onSubmit(values.email);
41965
- }
41966
- if (shouldAutoSubmit || onSubmit) {
41967
- if (formConfig?.resetOnSuccess !== false) {
41968
- helpers.resetForm();
41956
+ const renderForm = React26.useMemo(() => {
41957
+ if (formSlot) return formSlot;
41958
+ if (!formEngineSetup) return null;
41959
+ const defaultButtonAction = {
41960
+ label: "",
41961
+ variant: "default",
41962
+ icon: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-right", size: 16 })
41963
+ };
41964
+ const action = buttonAction || defaultButtonAction;
41965
+ return /* @__PURE__ */ jsx(
41966
+ FormEngine,
41967
+ {
41968
+ formEngineSetup: {
41969
+ ...formEngineSetup,
41970
+ formLayoutSettings: {
41971
+ ...formEngineSetup.formLayoutSettings,
41972
+ formLayout: "button-group",
41973
+ buttonGroupSetup: {
41974
+ ...formEngineSetup.formLayoutSettings?.buttonGroupSetup,
41975
+ size: "default",
41976
+ submitLabel: action.icon || action.label,
41977
+ submitVariant: action.variant || "default"
41978
+ }
41969
41979
  }
41970
- onSuccess?.(result);
41971
- }
41972
- } catch (error) {
41973
- if (error instanceof PageSpeedFormSubmissionError && error.formErrors) {
41974
- helpers.setErrors(error.formErrors);
41980
+ },
41981
+ defaultFields: DEFAULT_FORM_FIELDS42,
41982
+ defaultStyleRules: {
41983
+ ...DEFAULT_STYLE_RULES41,
41984
+ formContainer: cn(
41985
+ DEFAULT_STYLE_RULES41.formContainer,
41986
+ newsletterFormClassName
41987
+ )
41975
41988
  }
41976
- onError?.(error);
41977
- throw error;
41978
41989
  }
41979
- }
41980
- });
41981
- const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
41990
+ );
41991
+ }, [formSlot, formEngineSetup, buttonAction, newsletterFormClassName]);
41982
41992
  return /* @__PURE__ */ jsx(
41983
41993
  Section,
41984
41994
  {
@@ -42019,40 +42029,7 @@ function FooterSplitImageAccordion({
42019
42029
  children: newsletterTitle
42020
42030
  }
42021
42031
  ),
42022
- /* @__PURE__ */ jsxs(
42023
- Form,
42024
- {
42025
- form,
42026
- action: formConfig?.endpoint,
42027
- method: formMethod,
42028
- className: cn("flex items-stretch", newsletterFormClassName),
42029
- children: [
42030
- /* @__PURE__ */ jsx(Field, { name: "email", className: "flex-1", children: ({ field }) => /* @__PURE__ */ jsx(
42031
- "input",
42032
- {
42033
- ...field,
42034
- type: "email",
42035
- placeholder: emailPlaceholder,
42036
- className: "flex h-10 w-full rounded-l-md rounded-r-none border border-r-0 border-input px-3 py-2 text-sm ring-offset-background placeholder:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
42037
- "aria-label": emailPlaceholder
42038
- }
42039
- ) }),
42040
- /* @__PURE__ */ jsx(
42041
- Pressable,
42042
- {
42043
- componentType: "button",
42044
- type: "submit",
42045
- variant: "default",
42046
- size: "icon",
42047
- asButton: true,
42048
- className: "rounded-l-none rounded-r-md shrink-0 h-10",
42049
- disabled: form.isSubmitting,
42050
- children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-right", size: 16 })
42051
- }
42052
- )
42053
- ]
42054
- }
42055
- ),
42032
+ renderForm,
42056
42033
  socialLinks && socialLinks.length > 0 && /* @__PURE__ */ jsx(
42057
42034
  "ul",
42058
42035
  {
@@ -42077,19 +42054,31 @@ function FooterSplitImageAccordion({
42077
42054
  footerData.logo && /* @__PURE__ */ jsx(
42078
42055
  FooterLogo,
42079
42056
  {
42080
- logo: { ...footerData.logo, url: footerData.logoUrl },
42057
+ logo: { ...footerData.logo, url: footerData.logo.url || "/" },
42081
42058
  logoClassName: cn("inline-block max-w-60", logoClassName),
42082
42059
  optixFlowConfig
42083
42060
  }
42084
42061
  ),
42085
- footerData.title && /* @__PURE__ */ jsx(
42062
+ footerData.heading && /* @__PURE__ */ jsx(
42086
42063
  "h4",
42087
42064
  {
42088
- className: cn("text-xl font-semibold", brandTitleClassName),
42089
- children: footerData.title
42065
+ className: cn(
42066
+ "text-xl font-semibold text-pretty",
42067
+ brandTitleClassName
42068
+ ),
42069
+ children: footerData.heading
42090
42070
  }
42091
42071
  ),
42092
- footerData.description && /* @__PURE__ */ jsx("p", { className: cn("opacity-80", brandDescriptionClassName), children: footerData.description })
42072
+ footerData.description && /* @__PURE__ */ jsx(
42073
+ "p",
42074
+ {
42075
+ className: cn(
42076
+ "opacity-80 text-balance",
42077
+ brandDescriptionClassName
42078
+ ),
42079
+ children: footerData.description
42080
+ }
42081
+ )
42093
42082
  ] }),
42094
42083
  footerLinks && footerLinks.length > 0 && /* @__PURE__ */ jsx(
42095
42084
  "div",
@@ -47763,13 +47752,13 @@ function HeroImageLeftContent({
47763
47752
  }
47764
47753
  );
47765
47754
  }
47766
- var DEFAULT_STYLE_RULES41 = {
47755
+ var DEFAULT_STYLE_RULES42 = {
47767
47756
  formContainer: "",
47768
47757
  fieldsContainer: "",
47769
47758
  fieldClassName: "",
47770
47759
  formClassName: "space-y-4"
47771
47760
  };
47772
- var DEFAULT_FORM_FIELDS42 = [
47761
+ var DEFAULT_FORM_FIELDS43 = [
47773
47762
  {
47774
47763
  name: "firstName",
47775
47764
  type: "text",
@@ -48006,8 +47995,8 @@ function HeroImageSlider({
48006
47995
  }
48007
47996
  }
48008
47997
  },
48009
- defaultFields: DEFAULT_FORM_FIELDS42,
48010
- defaultStyleRules: DEFAULT_STYLE_RULES41
47998
+ defaultFields: DEFAULT_FORM_FIELDS43,
47999
+ defaultStyleRules: DEFAULT_STYLE_RULES42
48011
48000
  }
48012
48001
  ),
48013
48002
  privacyNotice && /* @__PURE__ */ jsx(
@@ -53504,7 +53493,7 @@ function HeroHiringAnimatedText({
53504
53493
  }
53505
53494
  );
53506
53495
  }
53507
- var DEFAULT_FORM_FIELDS43 = [
53496
+ var DEFAULT_FORM_FIELDS44 = [
53508
53497
  {
53509
53498
  name: "email",
53510
53499
  type: "email",
@@ -53517,7 +53506,7 @@ var DEFAULT_FORM_FIELDS43 = [
53517
53506
  function HeroSplitImageNewsletter({
53518
53507
  heading,
53519
53508
  description,
53520
- formFields = DEFAULT_FORM_FIELDS43,
53509
+ formFields = DEFAULT_FORM_FIELDS44,
53521
53510
  formConfig,
53522
53511
  onSubmit,
53523
53512
  onSuccess,
@@ -55008,7 +54997,7 @@ function HeroProductShowcaseFloating({
55008
54997
  }
55009
54998
  );
55010
54999
  }
55011
- var DEFAULT_FORM_FIELDS44 = [
55000
+ var DEFAULT_FORM_FIELDS45 = [
55012
55001
  {
55013
55002
  name: "email",
55014
55003
  type: "email",
@@ -55024,7 +55013,7 @@ function HeroSaasDashboardPreview({
55024
55013
  badgeSlot,
55025
55014
  heading,
55026
55015
  description,
55027
- formFields = DEFAULT_FORM_FIELDS44,
55016
+ formFields = DEFAULT_FORM_FIELDS45,
55028
55017
  formConfig,
55029
55018
  onSubmit,
55030
55019
  onSuccess,
@@ -57813,13 +57802,13 @@ function HeroPricingComparison({
57813
57802
  }
57814
57803
  );
57815
57804
  }
57816
- var DEFAULT_STYLE_RULES42 = {
57805
+ var DEFAULT_STYLE_RULES43 = {
57817
57806
  formContainer: "mt-10 flex justify-center items-center w-full max-w-md flex-col gap-4 sm:flex-row",
57818
57807
  fieldsContainer: "",
57819
57808
  fieldClassName: "",
57820
57809
  formClassName: ""
57821
57810
  };
57822
- var DEFAULT_FORM_FIELDS45 = [
57811
+ var DEFAULT_FORM_FIELDS46 = [
57823
57812
  {
57824
57813
  name: "email",
57825
57814
  type: "email",
@@ -57905,8 +57894,8 @@ function HeroNewsletterMinimal({
57905
57894
  }
57906
57895
  }
57907
57896
  },
57908
- defaultFields: DEFAULT_FORM_FIELDS45,
57909
- defaultStyleRules: DEFAULT_STYLE_RULES42
57897
+ defaultFields: DEFAULT_FORM_FIELDS46,
57898
+ defaultStyleRules: DEFAULT_STYLE_RULES43
57910
57899
  }
57911
57900
  ),
57912
57901
  helperText && (typeof helperText === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm mt-2 text-center"), children: helperText }) : helperText)
@@ -57964,7 +57953,7 @@ function HeroNewsletterMinimal({
57964
57953
  }
57965
57954
  );
57966
57955
  }
57967
- var DEFAULT_FORM_FIELDS46 = [
57956
+ var DEFAULT_FORM_FIELDS47 = [
57968
57957
  {
57969
57958
  name: "email",
57970
57959
  type: "email",
@@ -58019,7 +58008,7 @@ function HeroComingSoonCountdown({
58019
58008
  description,
58020
58009
  countdownDate,
58021
58010
  countdownSlot,
58022
- formFields = DEFAULT_FORM_FIELDS46,
58011
+ formFields = DEFAULT_FORM_FIELDS47,
58023
58012
  formConfig,
58024
58013
  onSubmit,
58025
58014
  onSuccess,
@@ -81868,7 +81857,7 @@ function ListSearchableGrid({
81868
81857
  }
81869
81858
  );
81870
81859
  }
81871
- var { useMemo: useMemo412 } = React26;
81860
+ var { useMemo: useMemo413 } = React26;
81872
81861
  function OfferModalNewsletterDiscount({
81873
81862
  title,
81874
81863
  emailPlaceholder,
@@ -81936,7 +81925,7 @@ function OfferModalNewsletterDiscount({
81936
81925
  });
81937
81926
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
81938
81927
  const dialogProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
81939
- const renderCloseButton = useMemo412(() => {
81928
+ const renderCloseButton = useMemo413(() => {
81940
81929
  if (closeButtonSlot) return closeButtonSlot;
81941
81930
  if (!closeButtonText) return null;
81942
81931
  return /* @__PURE__ */ jsx("div", { className: "absolute end-1.5 top-1.5", children: /* @__PURE__ */ jsx(DialogClose, { asChild: true, children: /* @__PURE__ */ jsx(
@@ -81950,12 +81939,12 @@ function OfferModalNewsletterDiscount({
81950
81939
  }
81951
81940
  ) }) });
81952
81941
  }, [closeButtonSlot, closeButtonText, closeClassName]);
81953
- const renderHeader = useMemo412(() => {
81942
+ const renderHeader = useMemo413(() => {
81954
81943
  if (headerSlot) return headerSlot;
81955
81944
  if (!title) return null;
81956
81945
  return /* @__PURE__ */ jsx(DialogHeader, { className: headerClassName, children: typeof title === "string" ? /* @__PURE__ */ jsx(DialogTitle, { className: cn("text-start font-serif text-2xl font-normal leading-snug", titleClassName), children: title }) : /* @__PURE__ */ jsx(DialogTitle, { className: cn("text-start font-serif text-2xl font-normal leading-snug", titleClassName), children: title }) });
81957
81946
  }, [headerSlot, title, headerClassName, titleClassName]);
81958
- const renderForm = useMemo412(() => {
81947
+ const renderForm = useMemo413(() => {
81959
81948
  if (formSlot) return formSlot;
81960
81949
  return /* @__PURE__ */ jsxs(
81961
81950
  Form,
@@ -82017,7 +82006,7 @@ function OfferModalNewsletterDiscount({
82017
82006
  }
82018
82007
  ) });
82019
82008
  }
82020
- var { useMemo: useMemo413 } = React26;
82009
+ var { useMemo: useMemo414 } = React26;
82021
82010
  function OfferModalMembershipImage({
82022
82011
  overline,
82023
82012
  title,
@@ -82094,7 +82083,7 @@ function OfferModalMembershipImage({
82094
82083
  });
82095
82084
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
82096
82085
  const dialogProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
82097
- const renderImage = useMemo413(() => {
82086
+ const renderImage = useMemo414(() => {
82098
82087
  if (imageSlot) return imageSlot;
82099
82088
  if (!image) return null;
82100
82089
  return /* @__PURE__ */ jsx("div", { className: cn("max-h-[290px] h-full overflow-hidden max-lg:hidden", imageWrapperClassName), children: /* @__PURE__ */ jsx(
@@ -82107,7 +82096,7 @@ function OfferModalMembershipImage({
82107
82096
  }
82108
82097
  ) });
82109
82098
  }, [imageSlot, image, imageWrapperClassName, imageClassName, optixFlowConfig]);
82110
- const renderCloseButton = useMemo413(() => {
82099
+ const renderCloseButton = useMemo414(() => {
82111
82100
  if (closeButtonSlot) return closeButtonSlot;
82112
82101
  return /* @__PURE__ */ jsx("div", { className: "absolute -end-px -top-px z-10", children: /* @__PURE__ */ jsx(DialogClose, { asChild: true, children: /* @__PURE__ */ jsx(
82113
82102
  Pressable,
@@ -82123,7 +82112,7 @@ function OfferModalMembershipImage({
82123
82112
  }
82124
82113
  ) }) });
82125
82114
  }, [closeButtonSlot, closeClassName]);
82126
- const renderForm = useMemo413(() => {
82115
+ const renderForm = useMemo414(() => {
82127
82116
  if (formSlot) return formSlot;
82128
82117
  return /* @__PURE__ */ jsxs(
82129
82118
  Form,
@@ -82186,7 +82175,7 @@ function OfferModalMembershipImage({
82186
82175
  }
82187
82176
  );
82188
82177
  }, [formSlot, form, formConfig, formMethod, emailPlaceholder, inputClassName, submitClassName, buttonText, formClassName]);
82189
- const renderFooter = useMemo413(() => {
82178
+ const renderFooter = useMemo414(() => {
82190
82179
  if (footerSlot) return footerSlot;
82191
82180
  if (!description) return null;
82192
82181
  return /* @__PURE__ */ jsx(DialogFooter, { className: footerClassName, children: /* @__PURE__ */ jsx(DialogDescription, { className: cn("text-muted-foreground text-center text-xs leading-relaxed", descriptionClassName), children: description }) });
@@ -82306,7 +82295,7 @@ function SheetDescription({
82306
82295
  }
82307
82296
  );
82308
82297
  }
82309
- var { useMemo: useMemo414 } = React26;
82298
+ var { useMemo: useMemo415 } = React26;
82310
82299
  function OfferModalSheetNewsletter({
82311
82300
  logo,
82312
82301
  logoSlot,
@@ -82389,7 +82378,7 @@ function OfferModalSheetNewsletter({
82389
82378
  });
82390
82379
  const formMethod = formConfig?.method?.toLowerCase() === "get" ? "get" : "post";
82391
82380
  const sheetProps = open !== void 0 ? { open, onOpenChange } : { defaultOpen };
82392
- const renderLogo = useMemo414(() => {
82381
+ const renderLogo = useMemo415(() => {
82393
82382
  if (logoSlot) return logoSlot;
82394
82383
  if (!logo) return null;
82395
82384
  const logoSrc = typeof logo.src === "string" ? logo.src : logo.src.light;
@@ -82403,7 +82392,7 @@ function OfferModalSheetNewsletter({
82403
82392
  }
82404
82393
  );
82405
82394
  }, [logoSlot, logo, logoClassName, optixFlowConfig]);
82406
- const renderHeader = useMemo414(() => {
82395
+ const renderHeader = useMemo415(() => {
82407
82396
  if (headerSlot) return headerSlot;
82408
82397
  return /* @__PURE__ */ jsxs(SheetHeader, { className: cn("gap-8 p-0", headerClassName), children: [
82409
82398
  renderLogo,
@@ -82413,7 +82402,7 @@ function OfferModalSheetNewsletter({
82413
82402
  ] })
82414
82403
  ] });
82415
82404
  }, [headerSlot, renderLogo, headerClassName, title, titleClassName, description, descriptionClassName]);
82416
- const renderForm = useMemo414(() => {
82405
+ const renderForm = useMemo415(() => {
82417
82406
  if (formSlot) return formSlot;
82418
82407
  return /* @__PURE__ */ jsx(
82419
82408
  Form,
@@ -82461,7 +82450,7 @@ function OfferModalSheetNewsletter({
82461
82450
  }
82462
82451
  );
82463
82452
  }, [formSlot, form, formConfig, formMethod, emailPlaceholder, inputClassName, submitClassName, buttonText, formClassName]);
82464
- const renderLegal = useMemo414(() => {
82453
+ const renderLegal = useMemo415(() => {
82465
82454
  if (legalSlot) return legalSlot;
82466
82455
  if (!termsUrl || !termsText || !privacyUrl || !privacyText) return null;
82467
82456
  return /* @__PURE__ */ jsxs("p", { className: cn("text-muted-foreground text-xs", legalClassName), children: [
@@ -82475,7 +82464,7 @@ function OfferModalSheetNewsletter({
82475
82464
  "."
82476
82465
  ] });
82477
82466
  }, [legalSlot, termsUrl, termsText, privacyUrl, privacyText, legalClassName]);
82478
- const renderImage = useMemo414(() => {
82467
+ const renderImage = useMemo415(() => {
82479
82468
  if (imageSlot) return imageSlot;
82480
82469
  if (!image) return null;
82481
82470
  return /* @__PURE__ */ jsx("div", { className: cn("h-1/2 basis-1/2", imageWrapperClassName), children: /* @__PURE__ */ jsx(AspectRatio, { ratio: 1, className: "overflow-hidden", children: /* @__PURE__ */ jsx(
@@ -98661,32 +98650,20 @@ function LinkTreeBlock({
98661
98650
  "flex flex-wrap items-center justify-center gap-2",
98662
98651
  socialLinksClassName
98663
98652
  ),
98664
- children: socialLinks.map((social, index) => {
98665
- const { iconName, ...socialPressableProps } = social;
98666
- const icon = social.icon || (iconName ? /* @__PURE__ */ jsx(
98667
- DynamicIcon,
98668
- {
98669
- name: iconName,
98670
- size: 20,
98671
- className: socialIconClassName
98672
- }
98673
- ) : null);
98674
- const ariaLabel = social["aria-label"] || (typeof social.label === "string" ? social.label : void 0) || social.platform;
98675
- return /* @__PURE__ */ jsx(
98676
- Pressable,
98677
- {
98678
- ...socialPressableProps,
98679
- "aria-label": ariaLabel,
98680
- className: cn(
98681
- "flex h-12 w-12 items-center justify-center rounded-full p-2.5 transition-all duration-200",
98682
- socialLinkClassName,
98683
- social.className
98684
- ),
98685
- children: icon
98686
- },
98687
- social.id ?? index
98688
- );
98689
- })
98653
+ children: socialLinks.map((social, index) => /* @__PURE__ */ jsx(
98654
+ SocialLinkIcon,
98655
+ {
98656
+ href: social.href,
98657
+ label: social["aria-label"] || (typeof social.label === "string" ? social.label : void 0),
98658
+ className: cn(
98659
+ "flex h-12 w-12 items-center justify-center rounded-full p-2.5 transition-all duration-200",
98660
+ socialLinkClassName,
98661
+ social.className
98662
+ ),
98663
+ iconClassName: socialIconClassName
98664
+ },
98665
+ social.id ?? social.href ?? index
98666
+ ))
98690
98667
  }
98691
98668
  );
98692
98669
  }, [
@@ -98934,33 +98911,16 @@ function LinkPageMinimalProfile({
98934
98911
  "flex items-center justify-center gap-4 pt-4",
98935
98912
  socialLinksClassName
98936
98913
  ),
98937
- children: socialLinks.map((social, index) => {
98938
- const { iconName: socialIconName, ...socialRest } = social;
98939
- const icon = social.icon || (socialIconName ? /* @__PURE__ */ jsx(
98940
- DynamicIcon,
98941
- {
98942
- name: socialIconName,
98943
- size: 20,
98944
- className: socialIconClassName
98945
- }
98946
- ) : null);
98947
- const ariaLabel = social["aria-label"] || (typeof social.label === "string" ? social.label : void 0) || social.platform;
98948
- return /* @__PURE__ */ jsx(
98949
- Pressable,
98950
- {
98951
- href: social.href,
98952
- "aria-label": ariaLabel,
98953
- className: cn(
98954
- "rounded-full p-2 transition-colors",
98955
- "hover:opacity-80",
98956
- socialLinkClassName,
98957
- social.className
98958
- ),
98959
- children: icon
98960
- },
98961
- social.id ?? index
98962
- );
98963
- })
98914
+ children: socialLinks.map((social, index) => /* @__PURE__ */ jsx(
98915
+ SocialLinkIcon,
98916
+ {
98917
+ href: social.href,
98918
+ label: social["aria-label"] || (typeof social.label === "string" ? social.label : void 0),
98919
+ className: cn(socialLinkClassName, social.className),
98920
+ iconClassName: socialIconClassName
98921
+ },
98922
+ social.href || index
98923
+ ))
98964
98924
  }
98965
98925
  );
98966
98926
  }, [
@@ -99027,13 +98987,13 @@ function LinkPageMinimalProfile({
99027
98987
  }
99028
98988
  );
99029
98989
  }
99030
- var DEFAULT_STYLE_RULES43 = {
98990
+ var DEFAULT_STYLE_RULES44 = {
99031
98991
  formContainer: "w-full flex flex-col gap-3 justify-center items-center",
99032
98992
  fieldsContainer: "",
99033
98993
  fieldClassName: "",
99034
98994
  formClassName: ""
99035
98995
  };
99036
- var DEFAULT_FORM_FIELDS47 = [
98996
+ var DEFAULT_FORM_FIELDS48 = [
99037
98997
  {
99038
98998
  name: "email",
99039
98999
  type: "email",
@@ -99151,34 +99111,22 @@ function LinkPageNewsletterSocial({
99151
99111
  "flex items-center justify-center gap-3",
99152
99112
  socialLinksClassName
99153
99113
  ),
99154
- children: socialLinks.map((social, index) => {
99155
- const { iconName, ...socialPressableProps } = social;
99156
- const icon = social.icon || (iconName ? /* @__PURE__ */ jsx(
99157
- DynamicIcon,
99158
- {
99159
- name: iconName,
99160
- size: 20,
99161
- className: socialIconClassName
99162
- }
99163
- ) : null);
99164
- const ariaLabel = social["aria-label"] || (typeof social.label === "string" ? social.label : void 0) || social.platform;
99165
- return /* @__PURE__ */ jsx(
99166
- Pressable,
99167
- {
99168
- ...socialPressableProps,
99169
- "aria-label": ariaLabel,
99170
- asButton: true,
99171
- size: "icon-lg",
99172
- className: cn(
99173
- "rounded-full p-2.5 transition-all duration-200",
99174
- socialLinkClassName,
99175
- social.className
99176
- ),
99177
- children: icon
99178
- },
99179
- social.id ?? index
99180
- );
99181
- })
99114
+ children: socialLinks.map((social, index) => /* @__PURE__ */ jsx(
99115
+ SocialLinkIcon,
99116
+ {
99117
+ href: social.href,
99118
+ label: social["aria-label"] || (typeof social.label === "string" ? social.label : void 0),
99119
+ asButton: true,
99120
+ size: "icon-lg",
99121
+ className: cn(
99122
+ "rounded-full p-2.5 transition-all duration-200",
99123
+ socialLinkClassName,
99124
+ social.className
99125
+ ),
99126
+ iconClassName: socialIconClassName
99127
+ },
99128
+ social.id ?? social.href ?? index
99129
+ ))
99182
99130
  }
99183
99131
  );
99184
99132
  }, [
@@ -99216,8 +99164,8 @@ function LinkPageNewsletterSocial({
99216
99164
  }
99217
99165
  }
99218
99166
  },
99219
- defaultFields: DEFAULT_FORM_FIELDS47,
99220
- defaultStyleRules: DEFAULT_STYLE_RULES43
99167
+ defaultFields: DEFAULT_FORM_FIELDS48,
99168
+ defaultStyleRules: DEFAULT_STYLE_RULES44
99221
99169
  }
99222
99170
  ),
99223
99171
  helperText && (typeof helperText === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-sm mt-2 text-center"), children: helperText }) : helperText)
@@ -99485,34 +99433,22 @@ function LinkPageGridCards({
99485
99433
  "flex items-center justify-center gap-2",
99486
99434
  socialLinksClassName
99487
99435
  ),
99488
- children: socialLinks.map((social, index) => {
99489
- const { iconName, ...socialPressableProps } = social;
99490
- const icon = social.icon || (iconName ? /* @__PURE__ */ jsx(
99491
- DynamicIcon,
99492
- {
99493
- name: iconName,
99494
- size: 18,
99495
- className: socialIconClassName
99496
- }
99497
- ) : null);
99498
- const ariaLabel = social["aria-label"] || (typeof social.label === "string" ? social.label : void 0) || social.platform;
99499
- return /* @__PURE__ */ jsx(
99500
- Pressable,
99501
- {
99502
- ...socialPressableProps,
99503
- "aria-label": ariaLabel,
99504
- className: cn(
99505
- "rounded-lg p-2 transition-all duration-200",
99506
- "bg-card text-card-foreground hover:opacity-80",
99507
- "size-12 flex items-center justify-center",
99508
- socialLinkClassName,
99509
- social.className
99510
- ),
99511
- children: icon
99512
- },
99513
- social.id ?? index
99514
- );
99515
- })
99436
+ children: socialLinks.map((social, index) => /* @__PURE__ */ jsx(
99437
+ SocialLinkIcon,
99438
+ {
99439
+ href: social.href,
99440
+ label: social["aria-label"] || (typeof social.label === "string" ? social.label : void 0),
99441
+ className: cn(
99442
+ "rounded-lg p-2 transition-all duration-200",
99443
+ "bg-card text-card-foreground hover:opacity-80",
99444
+ "size-12 flex items-center justify-center",
99445
+ socialLinkClassName,
99446
+ social.className
99447
+ ),
99448
+ iconClassName: socialIconClassName
99449
+ },
99450
+ social.id ?? social.href ?? index
99451
+ ))
99516
99452
  }
99517
99453
  );
99518
99454
  }, [
@@ -99745,34 +99681,22 @@ function LinkPageBentoLayout({
99745
99681
  const renderSocialLinks = useMemo(() => {
99746
99682
  if (socialLinksSlot) return socialLinksSlot;
99747
99683
  if (!socialLinks || socialLinks.length === 0) return null;
99748
- return /* @__PURE__ */ jsx("div", { className: cn("flex items-center gap-2 pt-1", socialLinksClassName), children: socialLinks.map((social, index) => {
99749
- const { iconName, ...socialPressableProps } = social;
99750
- const icon = social.icon || (iconName ? /* @__PURE__ */ jsx(
99751
- DynamicIcon,
99752
- {
99753
- name: iconName,
99754
- size: 18,
99755
- className: socialIconClassName
99756
- }
99757
- ) : null);
99758
- const ariaLabel = social["aria-label"] || (typeof social.label === "string" ? social.label : void 0) || social.platform;
99759
- return /* @__PURE__ */ jsx(
99760
- Pressable,
99761
- {
99762
- ...socialPressableProps,
99763
- "aria-label": ariaLabel,
99764
- className: cn(
99765
- "rounded-full p-2 transition-all duration-200",
99766
- "hover:scale-110 active:scale-95",
99767
- "hover:opacity-80",
99768
- socialLinkClassName,
99769
- social.className
99770
- ),
99771
- children: icon
99772
- },
99773
- social.id ?? index
99774
- );
99775
- }) });
99684
+ return /* @__PURE__ */ jsx("div", { className: cn("flex items-center gap-2 pt-1", socialLinksClassName), children: socialLinks.map((social, index) => /* @__PURE__ */ jsx(
99685
+ SocialLinkIcon,
99686
+ {
99687
+ href: social.href,
99688
+ label: social["aria-label"] || (typeof social.label === "string" ? social.label : void 0),
99689
+ className: cn(
99690
+ "rounded-full p-2 transition-all duration-200",
99691
+ "hover:scale-110 active:scale-95",
99692
+ "hover:opacity-80",
99693
+ socialLinkClassName,
99694
+ social.className
99695
+ ),
99696
+ iconClassName: socialIconClassName
99697
+ },
99698
+ social.id ?? social.href ?? index
99699
+ )) });
99776
99700
  }, [
99777
99701
  socialLinksSlot,
99778
99702
  socialLinks,
@@ -116670,7 +116594,7 @@ var BLOCK_REGISTRY = {
116670
116594
  "footer-split-image-accordion": {
116671
116595
  id: "footer-split-image-accordion",
116672
116596
  name: "Footer Split Image Accordion",
116673
- description: "A split-layout footer with large image, newsletter signup, accordion navigation, and payment methods. Features a two-column split with image on left, content on right, and responsive accordion links for mobile. Best for e-commerce sites, fashion brands, and lifestyle businesses.",
116597
+ description: "A split-layout footer with large image, newsletter signup powered by FormEngine, accordion navigation, and payment methods. Features a two-column split with image on left, content on right, and responsive accordion links for mobile. Uses @page-speed/forms/integration for form handling. Best for e-commerce sites, fashion brands, and lifestyle businesses.",
116674
116598
  semanticTags: [
116675
116599
  "footer",
116676
116600
  "split",
@@ -116687,6 +116611,9 @@ var BLOCK_REGISTRY = {
116687
116611
  exampleUsage: `
116688
116612
  <FooterSplitImageAccordion
116689
116613
  newsletterTitle="Get updates and save 20%"
116614
+ formEngineSetup={{
116615
+ formConfig: { endpoint: "/api/subscribe", format: "json" },
116616
+ }}
116690
116617
  footerLinks={[
116691
116618
  { title: "Collections", id: "collections", items: [...] },
116692
116619
  ]}