@opensite/ui 1.5.2 → 1.5.3

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.
@@ -5,7 +5,7 @@ import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { Img } from '@page-speed/img';
7
7
  import { cva } from 'class-variance-authority';
8
- import { jsx, jsxs } from 'react/jsx-runtime';
8
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
9
 
10
10
  // components/blocks/footers/footer-background-card.tsx
11
11
  function cn(...inputs) {
@@ -1336,6 +1336,78 @@ var Section = React__default.forwardRef(
1336
1336
  }
1337
1337
  );
1338
1338
  Section.displayName = "Section";
1339
+ function isThemedLogo(logo) {
1340
+ return "light" in logo || "dark" in logo;
1341
+ }
1342
+ var FooterLogo = ({
1343
+ logo,
1344
+ logoSlot,
1345
+ logoClassName,
1346
+ logoImageClassName,
1347
+ logoTitleClassName,
1348
+ optixFlowConfig
1349
+ }) => {
1350
+ if (logoSlot) return /* @__PURE__ */ jsx(Fragment, { children: logoSlot });
1351
+ if (!logo) return null;
1352
+ const hasThemedSources = isThemedLogo(logo) && (logo.light || logo.dark);
1353
+ const hasStandardSource = !isThemedLogo(logo) && logo.src;
1354
+ const logoContent = hasThemedSources ? (
1355
+ // Themed logo with light/dark mode sources
1356
+ /* @__PURE__ */ jsxs(Fragment, { children: [
1357
+ logo.light && /* @__PURE__ */ jsx(
1358
+ Img,
1359
+ {
1360
+ src: logo.light,
1361
+ alt: logo.alt || "Logo",
1362
+ className: cn(
1363
+ "h-8 w-auto object-contain dark:hidden md:h-10",
1364
+ logoImageClassName
1365
+ ),
1366
+ optixFlowConfig
1367
+ }
1368
+ ),
1369
+ logo.dark && /* @__PURE__ */ jsx(
1370
+ Img,
1371
+ {
1372
+ src: logo.dark,
1373
+ alt: logo.alt || "Logo",
1374
+ className: cn(
1375
+ "hidden h-8 w-auto object-contain dark:block md:h-10",
1376
+ logoImageClassName
1377
+ ),
1378
+ optixFlowConfig
1379
+ }
1380
+ )
1381
+ ] })
1382
+ ) : hasStandardSource ? (
1383
+ // Standard single logo image
1384
+ /* @__PURE__ */ jsx(
1385
+ Img,
1386
+ {
1387
+ src: logo.src,
1388
+ alt: logo.alt || "Logo",
1389
+ className: cn("h-8 w-auto object-contain md:h-10", logoImageClassName),
1390
+ optixFlowConfig
1391
+ }
1392
+ )
1393
+ ) : logo.title ? (
1394
+ // Text-based logo fallback
1395
+ /* @__PURE__ */ jsx("span", { className: cn("text-lg font-semibold md:text-xl", logoTitleClassName), children: logo.title })
1396
+ ) : null;
1397
+ if (!logoContent) return null;
1398
+ if (logo.url) {
1399
+ return /* @__PURE__ */ jsx(
1400
+ Pressable,
1401
+ {
1402
+ href: logo.url,
1403
+ className: cn("inline-flex items-center", logoClassName),
1404
+ children: logoContent
1405
+ }
1406
+ );
1407
+ }
1408
+ return /* @__PURE__ */ jsx("div", { className: cn("inline-flex items-center", logoClassName), children: logoContent });
1409
+ };
1410
+ var footer_logo_default = FooterLogo;
1339
1411
  function FooterBackgroundCard({
1340
1412
  logo,
1341
1413
  backgroundImage,
@@ -1349,6 +1421,8 @@ function FooterBackgroundCard({
1349
1421
  menuItems,
1350
1422
  copyright,
1351
1423
  bottomLinks,
1424
+ logoWrapperClassName,
1425
+ logoClassName,
1352
1426
  className,
1353
1427
  cardClassName,
1354
1428
  gridClassName,
@@ -1367,7 +1441,8 @@ function FooterBackgroundCard({
1367
1441
  copyrightClassName,
1368
1442
  bottomLinksClassName,
1369
1443
  background,
1370
- spacing,
1444
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
1445
+ spacing = "py-6 md:py-32",
1371
1446
  pattern,
1372
1447
  patternOpacity,
1373
1448
  optixFlowConfig
@@ -1385,79 +1460,174 @@ function FooterBackgroundCard({
1385
1460
  patternOpacity,
1386
1461
  className: cn("bg-cover bg-center bg-no-repeat", className),
1387
1462
  style: sectionStyle,
1388
- children: /* @__PURE__ */ jsxs("div", { className: cn("mx-auto max-w-7xl rounded-lg p-8 shadow-lg md:p-12", cardClassName), children: [
1389
- /* @__PURE__ */ jsxs("div", { className: cn("grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-4 lg:gap-12", gridClassName), children: [
1390
- (profileImage || tagline || personalMessage || ctaText) && /* @__PURE__ */ jsxs("div", { className: cn("lg:col-span-1", profileSectionClassName), children: [
1391
- (profileImage || tagline) && /* @__PURE__ */ jsxs("div", { className: "mb-4 flex items-center gap-4", children: [
1392
- profileImage && /* @__PURE__ */ jsx(
1393
- Img,
1394
- {
1395
- src: profileImage,
1396
- alt: "Profile",
1397
- className: cn("h-16 w-16 rounded-full object-cover", profileImageClassName),
1398
- optixFlowConfig
1399
- }
1400
- ),
1401
- tagline && /* @__PURE__ */ jsx("h3", { className: cn("text-2xl font-medium", taglineClassName), children: tagline })
1402
- ] }),
1403
- personalMessage && /* @__PURE__ */ jsx("p", { className: cn("mb-6 text-sm leading-relaxed opacity-80", messageClassName), children: personalMessage }),
1404
- ctaText && /* @__PURE__ */ jsx(
1405
- Pressable,
1406
- {
1407
- href: ctaUrl || "#",
1408
- className: cn("inline-flex items-center justify-center whitespace-nowrap rounded-md border text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 hover:opacity-80 h-10 px-4 py-2", ctaClassName),
1409
- children: ctaText
1410
- }
1411
- )
1412
- ] }),
1413
- menuItems && menuItems.length > 0 && menuItems.map((menu, idx) => /* @__PURE__ */ jsxs("div", { className: cn(menuSectionClassName), children: [
1414
- /* @__PURE__ */ jsx("h3", { className: cn("mb-4 text-sm font-medium tracking-wider uppercase", menuTitleClassName), children: menu.title }),
1415
- /* @__PURE__ */ jsx("ul", { className: "space-y-3", children: menu.links.map((link, index) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
1416
- Pressable,
1463
+ containerClassName,
1464
+ children: /* @__PURE__ */ jsxs(
1465
+ "div",
1466
+ {
1467
+ className: cn(
1468
+ "mx-auto max-w-7xl rounded-2xl p-12 shadow-xl md:p-16 bg-card text-card-foreground",
1469
+ cardClassName
1470
+ ),
1471
+ children: [
1472
+ /* @__PURE__ */ jsxs(
1473
+ "div",
1417
1474
  {
1418
- href: link.url,
1419
- className: cn("border-b border-transparent opacity-80 transition-all duration-300 ease-in-out hover:opacity-100", menuLinkClassName),
1420
- children: link.text
1475
+ className: cn(
1476
+ "grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-4 lg:gap-12",
1477
+ gridClassName
1478
+ ),
1479
+ children: [
1480
+ (profileImage || tagline || personalMessage || ctaText || logo) && /* @__PURE__ */ jsxs("div", { className: cn("lg:col-span-1", profileSectionClassName), children: [
1481
+ /* @__PURE__ */ jsx(
1482
+ footer_logo_default,
1483
+ {
1484
+ logo,
1485
+ logoClassName: cn("mb-12", logoWrapperClassName),
1486
+ logoImageClassName: logoClassName,
1487
+ optixFlowConfig
1488
+ }
1489
+ ),
1490
+ (profileImage || tagline) && /* @__PURE__ */ jsxs("div", { className: "mb-4 flex items-center gap-4", children: [
1491
+ profileImage && /* @__PURE__ */ jsx(
1492
+ Img,
1493
+ {
1494
+ src: profileImage,
1495
+ alt: "Profile",
1496
+ className: cn(
1497
+ "h-16 w-16 rounded-full object-cover",
1498
+ profileImageClassName
1499
+ ),
1500
+ optixFlowConfig
1501
+ }
1502
+ ),
1503
+ tagline && /* @__PURE__ */ jsx(
1504
+ "h3",
1505
+ {
1506
+ className: cn("text-2xl font-medium", taglineClassName),
1507
+ children: tagline
1508
+ }
1509
+ )
1510
+ ] }),
1511
+ personalMessage && /* @__PURE__ */ jsx(
1512
+ "p",
1513
+ {
1514
+ className: cn(
1515
+ "mb-6 text-sm leading-relaxed opacity-80",
1516
+ messageClassName
1517
+ ),
1518
+ children: personalMessage
1519
+ }
1520
+ ),
1521
+ ctaText && /* @__PURE__ */ jsx(
1522
+ Pressable,
1523
+ {
1524
+ href: ctaUrl || "#",
1525
+ className: cn(
1526
+ "inline-flex items-center justify-center whitespace-nowrap rounded-md border text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 hover:opacity-80 h-10 px-4 py-2",
1527
+ ctaClassName
1528
+ ),
1529
+ children: ctaText
1530
+ }
1531
+ )
1532
+ ] }),
1533
+ menuItems && menuItems.length > 0 && menuItems.map((menu, idx) => /* @__PURE__ */ jsxs(
1534
+ "div",
1535
+ {
1536
+ className: cn("pl-0 md:pl-8", menuSectionClassName),
1537
+ children: [
1538
+ /* @__PURE__ */ jsx(
1539
+ "h3",
1540
+ {
1541
+ className: cn(
1542
+ "mb-4 text-sm font-medium tracking-wider uppercase",
1543
+ menuTitleClassName
1544
+ ),
1545
+ children: menu.title
1546
+ }
1547
+ ),
1548
+ /* @__PURE__ */ jsx("ul", { className: "space-y-3", children: menu.links.map((link, index) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
1549
+ Pressable,
1550
+ {
1551
+ href: link.url,
1552
+ className: cn(
1553
+ "border-b border-transparent opacity-80 transition-all duration-300 ease-in-out hover:opacity-100",
1554
+ menuLinkClassName
1555
+ ),
1556
+ children: link.text
1557
+ }
1558
+ ) }, index)) })
1559
+ ]
1560
+ },
1561
+ idx
1562
+ )),
1563
+ (contactTitle || contact) && /* @__PURE__ */ jsxs("div", { className: cn("pl-0 md:pl-8", contactSectionClassName), children: [
1564
+ contactTitle && /* @__PURE__ */ jsx(
1565
+ "h3",
1566
+ {
1567
+ className: cn(
1568
+ "mb-4 text-sm font-medium tracking-wider uppercase",
1569
+ contactTitleClassName
1570
+ ),
1571
+ children: contactTitle
1572
+ }
1573
+ ),
1574
+ contact && /* @__PURE__ */ jsxs("ul", { className: "space-y-3", children: [
1575
+ contact.phone && /* @__PURE__ */ jsx("li", { className: cn("opacity-80", contactItemClassName), children: contact.phone }),
1576
+ contact.email && /* @__PURE__ */ jsx("li", { className: cn("opacity-80", contactItemClassName), children: contact.email }),
1577
+ (contact.location || contact.timezone) && /* @__PURE__ */ jsxs("li", { className: cn("opacity-80", contactItemClassName), children: [
1578
+ contact.location,
1579
+ contact.location && contact.timezone && " \u2022 ",
1580
+ contact.timezone
1581
+ ] })
1582
+ ] })
1583
+ ] })
1584
+ ]
1421
1585
  }
1422
- ) }, index)) })
1423
- ] }, idx)),
1424
- (contactTitle || contact) && /* @__PURE__ */ jsxs("div", { className: cn(contactSectionClassName), children: [
1425
- contactTitle && /* @__PURE__ */ jsx("h3", { className: cn("mb-4 text-sm font-medium tracking-wider uppercase", contactTitleClassName), children: contactTitle }),
1426
- contact && /* @__PURE__ */ jsxs("ul", { className: "space-y-3", children: [
1427
- contact.phone && /* @__PURE__ */ jsx("li", { className: cn("opacity-80", contactItemClassName), children: contact.phone }),
1428
- contact.email && /* @__PURE__ */ jsx("li", { className: cn("opacity-80", contactItemClassName), children: contact.email }),
1429
- (contact.location || contact.timezone) && /* @__PURE__ */ jsxs("li", { className: cn("opacity-80", contactItemClassName), children: [
1430
- contact.location,
1431
- contact.location && contact.timezone && " \u2022 ",
1432
- contact.timezone
1433
- ] })
1434
- ] })
1435
- ] })
1436
- ] }),
1437
- /* @__PURE__ */ jsxs("div", { className: cn("mt-12 flex flex-col items-center justify-between gap-4 border-t pt-8 md:flex-row", bottomClassName), children: [
1438
- /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-2 text-sm opacity-80 md:flex-row md:items-center md:gap-4", copyrightClassName), children: [
1439
- /* @__PURE__ */ jsx(FooterCopyright, { copyright }),
1440
- /* @__PURE__ */ jsx(
1441
- BrandAttribution,
1586
+ ),
1587
+ /* @__PURE__ */ jsxs(
1588
+ "div",
1442
1589
  {
1443
- internalBrandSlug: "open_site_ai",
1444
- optionIndex: 3,
1445
- variant: "span",
1446
- linkClassName: "hover:opacity-100"
1590
+ className: cn(
1591
+ "mt-12 flex flex-col items-center justify-between gap-4 border-t pt-8 md:flex-row",
1592
+ bottomClassName
1593
+ ),
1594
+ children: [
1595
+ /* @__PURE__ */ jsxs(
1596
+ "div",
1597
+ {
1598
+ className: cn(
1599
+ "flex flex-col gap-2 text-sm opacity-80 md:flex-row md:items-center md:gap-4",
1600
+ copyrightClassName
1601
+ ),
1602
+ children: [
1603
+ /* @__PURE__ */ jsx(FooterCopyright, { copyright }),
1604
+ /* @__PURE__ */ jsx(
1605
+ BrandAttribution,
1606
+ {
1607
+ internalBrandSlug: "open_site_ai",
1608
+ optionIndex: 3,
1609
+ variant: "span",
1610
+ linkClassName: "hover:opacity-100"
1611
+ }
1612
+ )
1613
+ ]
1614
+ }
1615
+ ),
1616
+ bottomLinks && bottomLinks.length > 0 && /* @__PURE__ */ jsx("div", { className: cn("flex gap-4", bottomLinksClassName), children: bottomLinks.map((link, idx) => /* @__PURE__ */ jsx(
1617
+ Pressable,
1618
+ {
1619
+ href: link.url,
1620
+ className: "text-sm opacity-80 transition-colors hover:opacity-100",
1621
+ children: link.text
1622
+ },
1623
+ idx
1624
+ )) })
1625
+ ]
1447
1626
  }
1448
1627
  )
1449
- ] }),
1450
- bottomLinks && bottomLinks.length > 0 && /* @__PURE__ */ jsx("div", { className: cn("flex gap-4", bottomLinksClassName), children: bottomLinks.map((link, idx) => /* @__PURE__ */ jsx(
1451
- Pressable,
1452
- {
1453
- href: link.url,
1454
- className: "text-sm opacity-80 transition-colors hover:opacity-100",
1455
- children: link.text
1456
- },
1457
- idx
1458
- )) })
1459
- ] })
1460
- ] })
1628
+ ]
1629
+ }
1630
+ )
1461
1631
  }
1462
1632
  );
1463
1633
  }
@@ -1631,6 +1631,7 @@ function FooterNavSocial({
1631
1631
  gridClassName,
1632
1632
  leftColumnClassName,
1633
1633
  logoWrapperClassName,
1634
+ formConfig,
1634
1635
  logoClassName,
1635
1636
  navGridClassName,
1636
1637
  navSectionClassName,
@@ -1651,7 +1652,8 @@ function FooterNavSocial({
1651
1652
  legalLinksClassName,
1652
1653
  legalLinkClassName,
1653
1654
  background,
1654
- spacing,
1655
+ containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
1656
+ spacing = "py-12 md:py-40",
1655
1657
  pattern,
1656
1658
  patternOpacity,
1657
1659
  optixFlowConfig
@@ -1660,16 +1662,15 @@ function FooterNavSocial({
1660
1662
  if (!sections || sections.length === 0) return null;
1661
1663
  return sections.map((section, sectionIdx) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(navSectionClassName), children: [
1662
1664
  /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("mb-4 font-semibold", navTitleClassName), children: section.title }),
1663
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: cn("space-y-3 text-sm opacity-80", navLinksClassName), children: section.links.map((link, linkIdx) => /* @__PURE__ */ jsxRuntime.jsx("li", { className: cn(navLinkClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
1664
- Pressable,
1665
- {
1666
- href: link.href,
1667
- className: "hover:opacity-100",
1668
- children: link.name
1669
- }
1670
- ) }, linkIdx)) })
1665
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: cn("space-y-3 text-sm opacity-80", navLinksClassName), children: section.links.map((link, linkIdx) => /* @__PURE__ */ jsxRuntime.jsx("li", { className: cn(navLinkClassName), children: /* @__PURE__ */ jsxRuntime.jsx(Pressable, { href: link.href, className: "hover:opacity-100", children: link.name }) }, linkIdx)) })
1671
1666
  ] }, sectionIdx));
1672
- }, [sections, navSectionClassName, navTitleClassName, navLinksClassName, navLinkClassName]);
1667
+ }, [
1668
+ sections,
1669
+ navSectionClassName,
1670
+ navTitleClassName,
1671
+ navLinksClassName,
1672
+ navLinkClassName
1673
+ ]);
1673
1674
  const socialLinksContent = React.useMemo(() => {
1674
1675
  if (!socialLinks || socialLinks.length === 0) return null;
1675
1676
  return socialLinks.map((social, idx) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -1678,7 +1679,10 @@ function FooterNavSocial({
1678
1679
  href: social.href,
1679
1680
  label: social.label,
1680
1681
  iconNameOverride: social.iconNameOverride,
1681
- className: cn("opacity-80 transition-colors hover:opacity-100", socialLinkClassName)
1682
+ className: cn(
1683
+ "opacity-80 transition-colors hover:opacity-100",
1684
+ socialLinkClassName
1685
+ )
1682
1686
  }
1683
1687
  ) }, idx));
1684
1688
  }, [socialLinks, socialLinkClassName]);
@@ -1694,64 +1698,155 @@ function FooterNavSocial({
1694
1698
  pattern,
1695
1699
  patternOpacity,
1696
1700
  className: cn(className),
1701
+ containerClassName,
1697
1702
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(contentClassName), children: /* @__PURE__ */ jsxRuntime.jsxs("footer", { children: [
1698
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid gap-10 lg:grid-cols-2", gridClassName), children: [
1699
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(leftColumnClassName), children: [
1700
- logo && /* @__PURE__ */ jsxRuntime.jsx(
1701
- FooterLogo,
1702
- {
1703
- logo,
1704
- logoClassName: cn("mb-8", logoWrapperClassName),
1705
- logoImageClassName: logoClassName,
1706
- optixFlowConfig
1707
- }
1703
+ /* @__PURE__ */ jsxRuntime.jsxs(
1704
+ "div",
1705
+ {
1706
+ className: cn(
1707
+ "grid gap-12 md:gap-24 lg:grid-cols-2",
1708
+ gridClassName
1708
1709
  ),
1709
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("grid gap-8 sm:grid-cols-3", navGridClassName), children: sectionsContent })
1710
- ] }),
1711
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col justify-between", rightColumnClassName), children: [
1712
- (newsletterHeading || newsletterDescription) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mb-8", newsletterClassName), children: [
1713
- newsletterHeading && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: cn("mb-2 text-lg font-semibold", newsletterHeadingClassName), children: newsletterHeading }),
1714
- newsletterDescription && /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-4 text-sm opacity-80", newsletterDescriptionClassName), children: newsletterDescription }),
1715
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex max-w-md gap-2", newsletterFormClassName), children: [
1716
- /* @__PURE__ */ jsxRuntime.jsx(
1717
- "input",
1710
+ children: [
1711
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(leftColumnClassName), children: [
1712
+ logo && /* @__PURE__ */ jsxRuntime.jsx(
1713
+ FooterLogo,
1718
1714
  {
1719
- type: "email",
1720
- placeholder: newsletterPlaceholder,
1721
- className: "flex h-10 w-full rounded-md border border-input px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium 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"
1715
+ logo,
1716
+ logoClassName: cn("mb-8", logoWrapperClassName),
1717
+ logoImageClassName: logoClassName,
1718
+ optixFlowConfig
1722
1719
  }
1723
1720
  ),
1724
- newsletterButtonText && /* @__PURE__ */ jsxRuntime.jsx(
1725
- "button",
1721
+ /* @__PURE__ */ jsxRuntime.jsx(
1722
+ "div",
1726
1723
  {
1727
- type: "submit",
1728
- className: "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2",
1729
- children: newsletterButtonText
1724
+ className: cn(
1725
+ "grid md:flex w-full gap-8 md:gap-6 lg:gap-12 md:flex-wrap md:justify-between grid-cols-2",
1726
+ navGridClassName
1727
+ ),
1728
+ children: sectionsContent
1730
1729
  }
1731
1730
  )
1732
- ] })
1733
- ] }),
1734
- (socialTitle || socialLinksContent) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(socialSectionClassName), children: [
1735
- socialTitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-4 font-medium", socialTitleClassName), children: socialTitle }),
1736
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: cn("flex items-center gap-4", socialLinksClassName), children: socialLinksContent })
1737
- ] })
1738
- ] })
1739
- ] }),
1740
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mt-16 flex flex-col justify-between gap-4 border-t pt-8 text-sm opacity-80 md:flex-row md:items-center", bottomClassName), children: [
1741
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-2 md:flex-row md:items-center md:gap-4", copyrightClassName), children: [
1742
- /* @__PURE__ */ jsxRuntime.jsx(FooterCopyright, { copyright }),
1743
- /* @__PURE__ */ jsxRuntime.jsx(
1744
- BrandAttribution,
1745
- {
1746
- internalBrandSlug: "open_site_ai",
1747
- optionIndex: 1,
1748
- variant: "span",
1749
- linkClassName: "underline underline-offset-4 transition-colors hover:opacity-100"
1750
- }
1751
- )
1752
- ] }),
1753
- legalLinksContent && /* @__PURE__ */ jsxRuntime.jsx("ul", { className: cn("flex gap-4", legalLinksClassName), children: legalLinksContent })
1754
- ] })
1731
+ ] }),
1732
+ /* @__PURE__ */ jsxRuntime.jsxs(
1733
+ "div",
1734
+ {
1735
+ className: cn(
1736
+ "flex flex-col justify-between mt-0 md:mt-16 space-y-8 md:space-y-12",
1737
+ rightColumnClassName
1738
+ ),
1739
+ children: [
1740
+ formConfig && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("", newsletterClassName), children: [
1741
+ newsletterHeading && /* @__PURE__ */ jsxRuntime.jsx(
1742
+ "h3",
1743
+ {
1744
+ className: cn(
1745
+ "mb-4 font-medium",
1746
+ newsletterHeadingClassName
1747
+ ),
1748
+ children: newsletterHeading
1749
+ }
1750
+ ),
1751
+ newsletterDescription && /* @__PURE__ */ jsxRuntime.jsx(
1752
+ "p",
1753
+ {
1754
+ className: cn(
1755
+ "mb-4 text-sm opacity-80",
1756
+ newsletterDescriptionClassName
1757
+ ),
1758
+ children: newsletterDescription
1759
+ }
1760
+ ),
1761
+ /* @__PURE__ */ jsxRuntime.jsxs(
1762
+ "div",
1763
+ {
1764
+ className: cn(
1765
+ "flex max-w-md gap-2",
1766
+ newsletterFormClassName
1767
+ ),
1768
+ children: [
1769
+ /* @__PURE__ */ jsxRuntime.jsx(
1770
+ "input",
1771
+ {
1772
+ type: "email",
1773
+ placeholder: newsletterPlaceholder,
1774
+ className: "flex h-10 w-full rounded-md border border-input px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium 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"
1775
+ }
1776
+ ),
1777
+ newsletterButtonText && /* @__PURE__ */ jsxRuntime.jsx(
1778
+ "button",
1779
+ {
1780
+ type: "submit",
1781
+ className: "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-10 px-4 py-2",
1782
+ children: newsletterButtonText
1783
+ }
1784
+ )
1785
+ ]
1786
+ }
1787
+ )
1788
+ ] }),
1789
+ (socialTitle || socialLinksContent) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(socialSectionClassName), children: [
1790
+ socialTitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("mb-4 font-medium", socialTitleClassName), children: socialTitle }),
1791
+ /* @__PURE__ */ jsxRuntime.jsx(
1792
+ "ul",
1793
+ {
1794
+ className: cn(
1795
+ "flex items-center gap-4",
1796
+ socialLinksClassName
1797
+ ),
1798
+ children: socialLinksContent
1799
+ }
1800
+ )
1801
+ ] })
1802
+ ]
1803
+ }
1804
+ )
1805
+ ]
1806
+ }
1807
+ ),
1808
+ /* @__PURE__ */ jsxRuntime.jsxs(
1809
+ "div",
1810
+ {
1811
+ className: cn(
1812
+ "mt-16 flex flex-col justify-between gap-4 border-t pt-8 text-sm opacity-80 md:flex-row md:items-center",
1813
+ bottomClassName
1814
+ ),
1815
+ children: [
1816
+ /* @__PURE__ */ jsxRuntime.jsxs(
1817
+ "div",
1818
+ {
1819
+ className: cn(
1820
+ "flex flex-col gap-2 md:flex-row md:items-center md:gap-4",
1821
+ copyrightClassName
1822
+ ),
1823
+ children: [
1824
+ /* @__PURE__ */ jsxRuntime.jsx(FooterCopyright, { copyright }),
1825
+ /* @__PURE__ */ jsxRuntime.jsx(
1826
+ BrandAttribution,
1827
+ {
1828
+ internalBrandSlug: "open_site_ai",
1829
+ optionIndex: 1,
1830
+ variant: "span",
1831
+ linkClassName: "underline underline-offset-4 transition-colors hover:opacity-100"
1832
+ }
1833
+ )
1834
+ ]
1835
+ }
1836
+ ),
1837
+ legalLinksContent && /* @__PURE__ */ jsxRuntime.jsx(
1838
+ "ul",
1839
+ {
1840
+ className: cn(
1841
+ "pt-4 md:pt-0 gap-4 grid md:flex grid-cols-2 items-center w-full md:w-fit",
1842
+ legalLinksClassName
1843
+ ),
1844
+ children: legalLinksContent
1845
+ }
1846
+ )
1847
+ ]
1848
+ }
1849
+ )
1755
1850
  ] }) })
1756
1851
  }
1757
1852
  );
@@ -86,6 +86,10 @@ interface FooterNavSocialProps {
86
86
  navLinkClassName?: string;
87
87
  /** Additional CSS classes for the right column */
88
88
  rightColumnClassName?: string;
89
+ /** Config for submitting forms to server */
90
+ formConfig?: {
91
+ token: string;
92
+ };
89
93
  /** Additional CSS classes for the newsletter section */
90
94
  newsletterClassName?: string;
91
95
  /** Additional CSS classes for the newsletter heading */
@@ -112,6 +116,10 @@ interface FooterNavSocialProps {
112
116
  legalLinkClassName?: string;
113
117
  /** Section background variant */
114
118
  background?: SectionBackground;
119
+ /**
120
+ * Additional CSS classes for the container
121
+ */
122
+ containerClassName?: string;
115
123
  /** Section spacing variant */
116
124
  spacing?: SectionSpacing;
117
125
  /** Optional background pattern */
@@ -129,6 +137,6 @@ interface FooterNavSocialProps {
129
137
  * websites, and businesses that want a complete footer with all essential elements
130
138
  * organized in a clean, professional layout.
131
139
  */
132
- declare function FooterNavSocial({ logo, sections, socialLinks, newsletterHeading, newsletterDescription, newsletterPlaceholder, newsletterButtonText, socialTitle, copyright, legalLinks, className, contentClassName, gridClassName, leftColumnClassName, logoWrapperClassName, logoClassName, navGridClassName, navSectionClassName, navTitleClassName, navLinksClassName, navLinkClassName, rightColumnClassName, newsletterClassName, newsletterHeadingClassName, newsletterDescriptionClassName, newsletterFormClassName, socialSectionClassName, socialTitleClassName, socialLinksClassName, socialLinkClassName, bottomClassName, copyrightClassName, legalLinksClassName, legalLinkClassName, background, spacing, pattern, patternOpacity, optixFlowConfig, }: FooterNavSocialProps): React.JSX.Element;
140
+ declare function FooterNavSocial({ logo, sections, socialLinks, newsletterHeading, newsletterDescription, newsletterPlaceholder, newsletterButtonText, socialTitle, copyright, legalLinks, className, contentClassName, gridClassName, leftColumnClassName, logoWrapperClassName, formConfig, logoClassName, navGridClassName, navSectionClassName, navTitleClassName, navLinksClassName, navLinkClassName, rightColumnClassName, newsletterClassName, newsletterHeadingClassName, newsletterDescriptionClassName, newsletterFormClassName, socialSectionClassName, socialTitleClassName, socialLinksClassName, socialLinkClassName, bottomClassName, copyrightClassName, legalLinksClassName, legalLinkClassName, background, containerClassName, spacing, pattern, patternOpacity, optixFlowConfig, }: FooterNavSocialProps): React.JSX.Element;
133
141
 
134
142
  export { FooterNavSocial, type FooterNavSocialProps, type FooterNavSocialSection };