@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.
- package/dist/about-location-info-hero.cjs +26 -48
- package/dist/about-location-info-hero.d.cts +1 -1
- package/dist/about-location-info-hero.d.ts +1 -1
- package/dist/about-location-info-hero.js +26 -48
- package/dist/components.cjs +335 -132
- package/dist/components.js +335 -132
- package/dist/footer-animated-social.cjs +10 -1
- package/dist/footer-animated-social.js +10 -1
- package/dist/footer-background-card.cjs +239 -69
- package/dist/footer-background-card.d.cts +9 -1
- package/dist/footer-background-card.d.ts +9 -1
- package/dist/footer-background-card.js +240 -70
- package/dist/footer-nav-social.cjs +156 -61
- package/dist/footer-nav-social.d.cts +9 -1
- package/dist/footer-nav-social.d.ts +9 -1
- package/dist/footer-nav-social.js +156 -61
- package/dist/footer-simple-centered.cjs +1 -1
- package/dist/footer-simple-centered.d.cts +1 -1
- package/dist/footer-simple-centered.d.ts +1 -1
- package/dist/footer-simple-centered.js +1 -1
- package/dist/hero-centered-screenshot.cjs +46 -59
- package/dist/hero-centered-screenshot.d.cts +1 -1
- package/dist/hero-centered-screenshot.d.ts +1 -1
- package/dist/hero-centered-screenshot.js +46 -59
- package/dist/index.cjs +335 -132
- package/dist/index.js +335 -132
- package/dist/registry.cjs +407 -165
- package/dist/registry.js +407 -165
- package/package.json +1 -1
|
@@ -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 };
|
|
@@ -1610,6 +1610,7 @@ function FooterNavSocial({
|
|
|
1610
1610
|
gridClassName,
|
|
1611
1611
|
leftColumnClassName,
|
|
1612
1612
|
logoWrapperClassName,
|
|
1613
|
+
formConfig,
|
|
1613
1614
|
logoClassName,
|
|
1614
1615
|
navGridClassName,
|
|
1615
1616
|
navSectionClassName,
|
|
@@ -1630,7 +1631,8 @@ function FooterNavSocial({
|
|
|
1630
1631
|
legalLinksClassName,
|
|
1631
1632
|
legalLinkClassName,
|
|
1632
1633
|
background,
|
|
1633
|
-
|
|
1634
|
+
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
1635
|
+
spacing = "py-12 md:py-40",
|
|
1634
1636
|
pattern,
|
|
1635
1637
|
patternOpacity,
|
|
1636
1638
|
optixFlowConfig
|
|
@@ -1639,16 +1641,15 @@ function FooterNavSocial({
|
|
|
1639
1641
|
if (!sections || sections.length === 0) return null;
|
|
1640
1642
|
return sections.map((section, sectionIdx) => /* @__PURE__ */ jsxs("div", { className: cn(navSectionClassName), children: [
|
|
1641
1643
|
/* @__PURE__ */ jsx("h3", { className: cn("mb-4 font-semibold", navTitleClassName), children: section.title }),
|
|
1642
|
-
/* @__PURE__ */ jsx("ul", { className: cn("space-y-3 text-sm opacity-80", navLinksClassName), children: section.links.map((link, linkIdx) => /* @__PURE__ */ jsx("li", { className: cn(navLinkClassName), children: /* @__PURE__ */ jsx(
|
|
1643
|
-
Pressable,
|
|
1644
|
-
{
|
|
1645
|
-
href: link.href,
|
|
1646
|
-
className: "hover:opacity-100",
|
|
1647
|
-
children: link.name
|
|
1648
|
-
}
|
|
1649
|
-
) }, linkIdx)) })
|
|
1644
|
+
/* @__PURE__ */ jsx("ul", { className: cn("space-y-3 text-sm opacity-80", navLinksClassName), children: section.links.map((link, linkIdx) => /* @__PURE__ */ jsx("li", { className: cn(navLinkClassName), children: /* @__PURE__ */ jsx(Pressable, { href: link.href, className: "hover:opacity-100", children: link.name }) }, linkIdx)) })
|
|
1650
1645
|
] }, sectionIdx));
|
|
1651
|
-
}, [
|
|
1646
|
+
}, [
|
|
1647
|
+
sections,
|
|
1648
|
+
navSectionClassName,
|
|
1649
|
+
navTitleClassName,
|
|
1650
|
+
navLinksClassName,
|
|
1651
|
+
navLinkClassName
|
|
1652
|
+
]);
|
|
1652
1653
|
const socialLinksContent = useMemo(() => {
|
|
1653
1654
|
if (!socialLinks || socialLinks.length === 0) return null;
|
|
1654
1655
|
return socialLinks.map((social, idx) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
|
|
@@ -1657,7 +1658,10 @@ function FooterNavSocial({
|
|
|
1657
1658
|
href: social.href,
|
|
1658
1659
|
label: social.label,
|
|
1659
1660
|
iconNameOverride: social.iconNameOverride,
|
|
1660
|
-
className: cn(
|
|
1661
|
+
className: cn(
|
|
1662
|
+
"opacity-80 transition-colors hover:opacity-100",
|
|
1663
|
+
socialLinkClassName
|
|
1664
|
+
)
|
|
1661
1665
|
}
|
|
1662
1666
|
) }, idx));
|
|
1663
1667
|
}, [socialLinks, socialLinkClassName]);
|
|
@@ -1673,64 +1677,155 @@ function FooterNavSocial({
|
|
|
1673
1677
|
pattern,
|
|
1674
1678
|
patternOpacity,
|
|
1675
1679
|
className: cn(className),
|
|
1680
|
+
containerClassName,
|
|
1676
1681
|
children: /* @__PURE__ */ jsx("div", { className: cn(contentClassName), children: /* @__PURE__ */ jsxs("footer", { children: [
|
|
1677
|
-
/* @__PURE__ */ jsxs(
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
logoClassName: cn("mb-8", logoWrapperClassName),
|
|
1684
|
-
logoImageClassName: logoClassName,
|
|
1685
|
-
optixFlowConfig
|
|
1686
|
-
}
|
|
1682
|
+
/* @__PURE__ */ jsxs(
|
|
1683
|
+
"div",
|
|
1684
|
+
{
|
|
1685
|
+
className: cn(
|
|
1686
|
+
"grid gap-12 md:gap-24 lg:grid-cols-2",
|
|
1687
|
+
gridClassName
|
|
1687
1688
|
),
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
newsletterHeading && /* @__PURE__ */ jsx("h3", { className: cn("mb-2 text-lg font-semibold", newsletterHeadingClassName), children: newsletterHeading }),
|
|
1693
|
-
newsletterDescription && /* @__PURE__ */ jsx("p", { className: cn("mb-4 text-sm opacity-80", newsletterDescriptionClassName), children: newsletterDescription }),
|
|
1694
|
-
/* @__PURE__ */ jsxs("div", { className: cn("flex max-w-md gap-2", newsletterFormClassName), children: [
|
|
1695
|
-
/* @__PURE__ */ jsx(
|
|
1696
|
-
"input",
|
|
1689
|
+
children: [
|
|
1690
|
+
/* @__PURE__ */ jsxs("div", { className: cn(leftColumnClassName), children: [
|
|
1691
|
+
logo && /* @__PURE__ */ jsx(
|
|
1692
|
+
FooterLogo,
|
|
1697
1693
|
{
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1694
|
+
logo,
|
|
1695
|
+
logoClassName: cn("mb-8", logoWrapperClassName),
|
|
1696
|
+
logoImageClassName: logoClassName,
|
|
1697
|
+
optixFlowConfig
|
|
1701
1698
|
}
|
|
1702
1699
|
),
|
|
1703
|
-
|
|
1704
|
-
"
|
|
1700
|
+
/* @__PURE__ */ jsx(
|
|
1701
|
+
"div",
|
|
1705
1702
|
{
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1703
|
+
className: cn(
|
|
1704
|
+
"grid md:flex w-full gap-8 md:gap-6 lg:gap-12 md:flex-wrap md:justify-between grid-cols-2",
|
|
1705
|
+
navGridClassName
|
|
1706
|
+
),
|
|
1707
|
+
children: sectionsContent
|
|
1709
1708
|
}
|
|
1710
1709
|
)
|
|
1711
|
-
] })
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1710
|
+
] }),
|
|
1711
|
+
/* @__PURE__ */ jsxs(
|
|
1712
|
+
"div",
|
|
1713
|
+
{
|
|
1714
|
+
className: cn(
|
|
1715
|
+
"flex flex-col justify-between mt-0 md:mt-16 space-y-8 md:space-y-12",
|
|
1716
|
+
rightColumnClassName
|
|
1717
|
+
),
|
|
1718
|
+
children: [
|
|
1719
|
+
formConfig && /* @__PURE__ */ jsxs("div", { className: cn("", newsletterClassName), children: [
|
|
1720
|
+
newsletterHeading && /* @__PURE__ */ jsx(
|
|
1721
|
+
"h3",
|
|
1722
|
+
{
|
|
1723
|
+
className: cn(
|
|
1724
|
+
"mb-4 font-medium",
|
|
1725
|
+
newsletterHeadingClassName
|
|
1726
|
+
),
|
|
1727
|
+
children: newsletterHeading
|
|
1728
|
+
}
|
|
1729
|
+
),
|
|
1730
|
+
newsletterDescription && /* @__PURE__ */ jsx(
|
|
1731
|
+
"p",
|
|
1732
|
+
{
|
|
1733
|
+
className: cn(
|
|
1734
|
+
"mb-4 text-sm opacity-80",
|
|
1735
|
+
newsletterDescriptionClassName
|
|
1736
|
+
),
|
|
1737
|
+
children: newsletterDescription
|
|
1738
|
+
}
|
|
1739
|
+
),
|
|
1740
|
+
/* @__PURE__ */ jsxs(
|
|
1741
|
+
"div",
|
|
1742
|
+
{
|
|
1743
|
+
className: cn(
|
|
1744
|
+
"flex max-w-md gap-2",
|
|
1745
|
+
newsletterFormClassName
|
|
1746
|
+
),
|
|
1747
|
+
children: [
|
|
1748
|
+
/* @__PURE__ */ jsx(
|
|
1749
|
+
"input",
|
|
1750
|
+
{
|
|
1751
|
+
type: "email",
|
|
1752
|
+
placeholder: newsletterPlaceholder,
|
|
1753
|
+
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"
|
|
1754
|
+
}
|
|
1755
|
+
),
|
|
1756
|
+
newsletterButtonText && /* @__PURE__ */ jsx(
|
|
1757
|
+
"button",
|
|
1758
|
+
{
|
|
1759
|
+
type: "submit",
|
|
1760
|
+
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",
|
|
1761
|
+
children: newsletterButtonText
|
|
1762
|
+
}
|
|
1763
|
+
)
|
|
1764
|
+
]
|
|
1765
|
+
}
|
|
1766
|
+
)
|
|
1767
|
+
] }),
|
|
1768
|
+
(socialTitle || socialLinksContent) && /* @__PURE__ */ jsxs("div", { className: cn(socialSectionClassName), children: [
|
|
1769
|
+
socialTitle && /* @__PURE__ */ jsx("p", { className: cn("mb-4 font-medium", socialTitleClassName), children: socialTitle }),
|
|
1770
|
+
/* @__PURE__ */ jsx(
|
|
1771
|
+
"ul",
|
|
1772
|
+
{
|
|
1773
|
+
className: cn(
|
|
1774
|
+
"flex items-center gap-4",
|
|
1775
|
+
socialLinksClassName
|
|
1776
|
+
),
|
|
1777
|
+
children: socialLinksContent
|
|
1778
|
+
}
|
|
1779
|
+
)
|
|
1780
|
+
] })
|
|
1781
|
+
]
|
|
1782
|
+
}
|
|
1783
|
+
)
|
|
1784
|
+
]
|
|
1785
|
+
}
|
|
1786
|
+
),
|
|
1787
|
+
/* @__PURE__ */ jsxs(
|
|
1788
|
+
"div",
|
|
1789
|
+
{
|
|
1790
|
+
className: cn(
|
|
1791
|
+
"mt-16 flex flex-col justify-between gap-4 border-t pt-8 text-sm opacity-80 md:flex-row md:items-center",
|
|
1792
|
+
bottomClassName
|
|
1793
|
+
),
|
|
1794
|
+
children: [
|
|
1795
|
+
/* @__PURE__ */ jsxs(
|
|
1796
|
+
"div",
|
|
1797
|
+
{
|
|
1798
|
+
className: cn(
|
|
1799
|
+
"flex flex-col gap-2 md:flex-row md:items-center md:gap-4",
|
|
1800
|
+
copyrightClassName
|
|
1801
|
+
),
|
|
1802
|
+
children: [
|
|
1803
|
+
/* @__PURE__ */ jsx(FooterCopyright, { copyright }),
|
|
1804
|
+
/* @__PURE__ */ jsx(
|
|
1805
|
+
BrandAttribution,
|
|
1806
|
+
{
|
|
1807
|
+
internalBrandSlug: "open_site_ai",
|
|
1808
|
+
optionIndex: 1,
|
|
1809
|
+
variant: "span",
|
|
1810
|
+
linkClassName: "underline underline-offset-4 transition-colors hover:opacity-100"
|
|
1811
|
+
}
|
|
1812
|
+
)
|
|
1813
|
+
]
|
|
1814
|
+
}
|
|
1815
|
+
),
|
|
1816
|
+
legalLinksContent && /* @__PURE__ */ jsx(
|
|
1817
|
+
"ul",
|
|
1818
|
+
{
|
|
1819
|
+
className: cn(
|
|
1820
|
+
"pt-4 md:pt-0 gap-4 grid md:flex grid-cols-2 items-center w-full md:w-fit",
|
|
1821
|
+
legalLinksClassName
|
|
1822
|
+
),
|
|
1823
|
+
children: legalLinksContent
|
|
1824
|
+
}
|
|
1825
|
+
)
|
|
1826
|
+
]
|
|
1827
|
+
}
|
|
1828
|
+
)
|
|
1734
1829
|
] }) })
|
|
1735
1830
|
}
|
|
1736
1831
|
);
|
|
@@ -1436,8 +1436,8 @@ function FooterSimpleCentered({
|
|
|
1436
1436
|
bottomLinks,
|
|
1437
1437
|
className,
|
|
1438
1438
|
footerClassName,
|
|
1439
|
-
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
1440
1439
|
contentClassName,
|
|
1440
|
+
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
1441
1441
|
spacing = "py-12 md:py-32",
|
|
1442
1442
|
brandClassName,
|
|
1443
1443
|
logoWrapperClassName,
|
|
@@ -105,6 +105,6 @@ interface FooterSimpleCenteredProps {
|
|
|
105
105
|
* Ideal for corporate websites, landing pages, and products that prefer a clean,
|
|
106
106
|
* uncluttered footer design without social media or newsletter elements.
|
|
107
107
|
*/
|
|
108
|
-
declare function FooterSimpleCentered({ logo, tagline, sitemap, copyright, bottomLinks, className, footerClassName,
|
|
108
|
+
declare function FooterSimpleCentered({ logo, tagline, sitemap, copyright, bottomLinks, className, footerClassName, contentClassName, containerClassName, spacing, brandClassName, logoWrapperClassName, logoClassName, taglineClassName, sitemapWrapperClassName, sitemapSectionClassName, sitemapTitleClassName, sitemapLinksClassName, sitemapLinkClassName, bottomBarClassName, copyrightClassName, bottomLinksClassName, bottomLinkClassName, background, pattern, patternOpacity, optixFlowConfig, }: FooterSimpleCenteredProps): React.JSX.Element;
|
|
109
109
|
|
|
110
110
|
export { FooterSimpleCentered, type FooterSimpleCenteredProps, type FooterSimpleCenteredSection };
|
|
@@ -105,6 +105,6 @@ interface FooterSimpleCenteredProps {
|
|
|
105
105
|
* Ideal for corporate websites, landing pages, and products that prefer a clean,
|
|
106
106
|
* uncluttered footer design without social media or newsletter elements.
|
|
107
107
|
*/
|
|
108
|
-
declare function FooterSimpleCentered({ logo, tagline, sitemap, copyright, bottomLinks, className, footerClassName,
|
|
108
|
+
declare function FooterSimpleCentered({ logo, tagline, sitemap, copyright, bottomLinks, className, footerClassName, contentClassName, containerClassName, spacing, brandClassName, logoWrapperClassName, logoClassName, taglineClassName, sitemapWrapperClassName, sitemapSectionClassName, sitemapTitleClassName, sitemapLinksClassName, sitemapLinkClassName, bottomBarClassName, copyrightClassName, bottomLinksClassName, bottomLinkClassName, background, pattern, patternOpacity, optixFlowConfig, }: FooterSimpleCenteredProps): React.JSX.Element;
|
|
109
109
|
|
|
110
110
|
export { FooterSimpleCentered, type FooterSimpleCenteredProps, type FooterSimpleCenteredSection };
|
|
@@ -1415,8 +1415,8 @@ function FooterSimpleCentered({
|
|
|
1415
1415
|
bottomLinks,
|
|
1416
1416
|
className,
|
|
1417
1417
|
footerClassName,
|
|
1418
|
-
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
1419
1418
|
contentClassName,
|
|
1419
|
+
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
1420
1420
|
spacing = "py-12 md:py-32",
|
|
1421
1421
|
brandClassName,
|
|
1422
1422
|
logoWrapperClassName,
|
|
@@ -32,54 +32,6 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
|
32
32
|
function cn(...inputs) {
|
|
33
33
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
34
34
|
}
|
|
35
|
-
function getTextColor(parentBg, variant = "default", options) {
|
|
36
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
37
|
-
if (isDark) {
|
|
38
|
-
switch (variant) {
|
|
39
|
-
case "default":
|
|
40
|
-
return "text-foreground";
|
|
41
|
-
case "muted":
|
|
42
|
-
return "text-foreground/80";
|
|
43
|
-
case "subtle":
|
|
44
|
-
return "text-foreground/60";
|
|
45
|
-
case "accent":
|
|
46
|
-
return "text-accent-foreground";
|
|
47
|
-
}
|
|
48
|
-
} else {
|
|
49
|
-
switch (variant) {
|
|
50
|
-
case "default":
|
|
51
|
-
return "text-foreground";
|
|
52
|
-
case "muted":
|
|
53
|
-
return "text-muted-foreground";
|
|
54
|
-
case "subtle":
|
|
55
|
-
return "text-muted-foreground/70";
|
|
56
|
-
case "accent":
|
|
57
|
-
return "text-primary";
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
function getBorderColor(parentBg, variant = "default", options) {
|
|
62
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
63
|
-
if (isDark) {
|
|
64
|
-
switch (variant) {
|
|
65
|
-
case "default":
|
|
66
|
-
return "border-foreground/20";
|
|
67
|
-
case "muted":
|
|
68
|
-
return "border-foreground/10";
|
|
69
|
-
case "accent":
|
|
70
|
-
return "border-accent-foreground";
|
|
71
|
-
}
|
|
72
|
-
} else {
|
|
73
|
-
switch (variant) {
|
|
74
|
-
case "default":
|
|
75
|
-
return "border-border";
|
|
76
|
-
case "muted":
|
|
77
|
-
return "border-muted";
|
|
78
|
-
case "accent":
|
|
79
|
-
return "border-primary";
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
35
|
function normalizePhoneNumber(input) {
|
|
84
36
|
const trimmed = input.trim();
|
|
85
37
|
if (trimmed.toLowerCase().startsWith("tel:")) {
|
|
@@ -881,11 +833,11 @@ function HeroCenteredScreenshot({
|
|
|
881
833
|
imageSrc,
|
|
882
834
|
imageAlt = "placeholder",
|
|
883
835
|
background,
|
|
884
|
-
|
|
836
|
+
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
837
|
+
spacing = "py-12 md:py-32",
|
|
885
838
|
pattern,
|
|
886
839
|
patternOpacity,
|
|
887
840
|
className,
|
|
888
|
-
containerClassName,
|
|
889
841
|
contentClassName,
|
|
890
842
|
headingClassName,
|
|
891
843
|
descriptionClassName,
|
|
@@ -897,7 +849,14 @@ function HeroCenteredScreenshot({
|
|
|
897
849
|
if (actionsSlot) return actionsSlot;
|
|
898
850
|
if (!actions || actions.length === 0) return null;
|
|
899
851
|
return actions.map((action, index) => {
|
|
900
|
-
const {
|
|
852
|
+
const {
|
|
853
|
+
label,
|
|
854
|
+
icon,
|
|
855
|
+
iconAfter,
|
|
856
|
+
children,
|
|
857
|
+
className: actionClassName,
|
|
858
|
+
...pressableProps
|
|
859
|
+
} = action;
|
|
901
860
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
902
861
|
Pressable,
|
|
903
862
|
{
|
|
@@ -922,22 +881,50 @@ function HeroCenteredScreenshot({
|
|
|
922
881
|
pattern,
|
|
923
882
|
patternOpacity,
|
|
924
883
|
className: cn(className),
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
884
|
+
containerClassName,
|
|
885
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(""), children: [
|
|
886
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
887
|
+
"div",
|
|
888
|
+
{
|
|
889
|
+
className: cn("z-10 items-center text-center", contentClassName),
|
|
890
|
+
children: [
|
|
891
|
+
heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
892
|
+
"h1",
|
|
893
|
+
{
|
|
894
|
+
className: cn(
|
|
895
|
+
"mb-8 text-4xl font-bold text-balance lg:text-7xl",
|
|
896
|
+
headingClassName
|
|
897
|
+
),
|
|
898
|
+
children: heading
|
|
899
|
+
}
|
|
900
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: headingClassName, children: heading })),
|
|
901
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
902
|
+
"p",
|
|
903
|
+
{
|
|
904
|
+
className: cn(
|
|
905
|
+
"mx-auto max-w-3xl lg:text-xl text-balance opacity-80",
|
|
906
|
+
descriptionClassName
|
|
907
|
+
),
|
|
908
|
+
children: description
|
|
909
|
+
}
|
|
910
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
|
|
911
|
+
(actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("lazy", actionsClassName), children: renderActions })
|
|
912
|
+
]
|
|
913
|
+
}
|
|
914
|
+
) }),
|
|
931
915
|
imageSrc && /* @__PURE__ */ jsxRuntime.jsx(
|
|
932
916
|
img.Img,
|
|
933
917
|
{
|
|
934
918
|
src: imageSrc,
|
|
935
919
|
alt: imageAlt,
|
|
936
|
-
className: cn(
|
|
920
|
+
className: cn(
|
|
921
|
+
"mx-auto mt-24 max-h-[700px] w-full max-w-7xl rounded-2xl object-cover shadow-lg",
|
|
922
|
+
imageClassName
|
|
923
|
+
),
|
|
937
924
|
optixFlowConfig
|
|
938
925
|
}
|
|
939
926
|
)
|
|
940
|
-
] })
|
|
927
|
+
] })
|
|
941
928
|
}
|
|
942
929
|
);
|
|
943
930
|
}
|
|
@@ -80,6 +80,6 @@ interface HeroCenteredScreenshotProps {
|
|
|
80
80
|
*/
|
|
81
81
|
optixFlowConfig?: OptixFlowConfig;
|
|
82
82
|
}
|
|
83
|
-
declare function HeroCenteredScreenshot({ heading, description, actions, actionsSlot, imageSrc, imageAlt, background, spacing, pattern, patternOpacity, className,
|
|
83
|
+
declare function HeroCenteredScreenshot({ heading, description, actions, actionsSlot, imageSrc, imageAlt, background, containerClassName, spacing, pattern, patternOpacity, className, contentClassName, headingClassName, descriptionClassName, actionsClassName, imageClassName, optixFlowConfig, }: HeroCenteredScreenshotProps): React.JSX.Element;
|
|
84
84
|
|
|
85
85
|
export { HeroCenteredScreenshot, type HeroCenteredScreenshotProps };
|
|
@@ -80,6 +80,6 @@ interface HeroCenteredScreenshotProps {
|
|
|
80
80
|
*/
|
|
81
81
|
optixFlowConfig?: OptixFlowConfig;
|
|
82
82
|
}
|
|
83
|
-
declare function HeroCenteredScreenshot({ heading, description, actions, actionsSlot, imageSrc, imageAlt, background, spacing, pattern, patternOpacity, className,
|
|
83
|
+
declare function HeroCenteredScreenshot({ heading, description, actions, actionsSlot, imageSrc, imageAlt, background, containerClassName, spacing, pattern, patternOpacity, className, contentClassName, headingClassName, descriptionClassName, actionsClassName, imageClassName, optixFlowConfig, }: HeroCenteredScreenshotProps): React.JSX.Element;
|
|
84
84
|
|
|
85
85
|
export { HeroCenteredScreenshot, type HeroCenteredScreenshotProps };
|
|
@@ -11,54 +11,6 @@ import { Img } from '@page-speed/img';
|
|
|
11
11
|
function cn(...inputs) {
|
|
12
12
|
return twMerge(clsx(inputs));
|
|
13
13
|
}
|
|
14
|
-
function getTextColor(parentBg, variant = "default", options) {
|
|
15
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
16
|
-
if (isDark) {
|
|
17
|
-
switch (variant) {
|
|
18
|
-
case "default":
|
|
19
|
-
return "text-foreground";
|
|
20
|
-
case "muted":
|
|
21
|
-
return "text-foreground/80";
|
|
22
|
-
case "subtle":
|
|
23
|
-
return "text-foreground/60";
|
|
24
|
-
case "accent":
|
|
25
|
-
return "text-accent-foreground";
|
|
26
|
-
}
|
|
27
|
-
} else {
|
|
28
|
-
switch (variant) {
|
|
29
|
-
case "default":
|
|
30
|
-
return "text-foreground";
|
|
31
|
-
case "muted":
|
|
32
|
-
return "text-muted-foreground";
|
|
33
|
-
case "subtle":
|
|
34
|
-
return "text-muted-foreground/70";
|
|
35
|
-
case "accent":
|
|
36
|
-
return "text-primary";
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
function getBorderColor(parentBg, variant = "default", options) {
|
|
41
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
42
|
-
if (isDark) {
|
|
43
|
-
switch (variant) {
|
|
44
|
-
case "default":
|
|
45
|
-
return "border-foreground/20";
|
|
46
|
-
case "muted":
|
|
47
|
-
return "border-foreground/10";
|
|
48
|
-
case "accent":
|
|
49
|
-
return "border-accent-foreground";
|
|
50
|
-
}
|
|
51
|
-
} else {
|
|
52
|
-
switch (variant) {
|
|
53
|
-
case "default":
|
|
54
|
-
return "border-border";
|
|
55
|
-
case "muted":
|
|
56
|
-
return "border-muted";
|
|
57
|
-
case "accent":
|
|
58
|
-
return "border-primary";
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
14
|
function normalizePhoneNumber(input) {
|
|
63
15
|
const trimmed = input.trim();
|
|
64
16
|
if (trimmed.toLowerCase().startsWith("tel:")) {
|
|
@@ -860,11 +812,11 @@ function HeroCenteredScreenshot({
|
|
|
860
812
|
imageSrc,
|
|
861
813
|
imageAlt = "placeholder",
|
|
862
814
|
background,
|
|
863
|
-
|
|
815
|
+
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
816
|
+
spacing = "py-12 md:py-32",
|
|
864
817
|
pattern,
|
|
865
818
|
patternOpacity,
|
|
866
819
|
className,
|
|
867
|
-
containerClassName,
|
|
868
820
|
contentClassName,
|
|
869
821
|
headingClassName,
|
|
870
822
|
descriptionClassName,
|
|
@@ -876,7 +828,14 @@ function HeroCenteredScreenshot({
|
|
|
876
828
|
if (actionsSlot) return actionsSlot;
|
|
877
829
|
if (!actions || actions.length === 0) return null;
|
|
878
830
|
return actions.map((action, index) => {
|
|
879
|
-
const {
|
|
831
|
+
const {
|
|
832
|
+
label,
|
|
833
|
+
icon,
|
|
834
|
+
iconAfter,
|
|
835
|
+
children,
|
|
836
|
+
className: actionClassName,
|
|
837
|
+
...pressableProps
|
|
838
|
+
} = action;
|
|
880
839
|
return /* @__PURE__ */ jsx(
|
|
881
840
|
Pressable,
|
|
882
841
|
{
|
|
@@ -901,22 +860,50 @@ function HeroCenteredScreenshot({
|
|
|
901
860
|
pattern,
|
|
902
861
|
patternOpacity,
|
|
903
862
|
className: cn(className),
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
863
|
+
containerClassName,
|
|
864
|
+
children: /* @__PURE__ */ jsxs("div", { className: cn(""), children: [
|
|
865
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-col", children: /* @__PURE__ */ jsxs(
|
|
866
|
+
"div",
|
|
867
|
+
{
|
|
868
|
+
className: cn("z-10 items-center text-center", contentClassName),
|
|
869
|
+
children: [
|
|
870
|
+
heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
|
|
871
|
+
"h1",
|
|
872
|
+
{
|
|
873
|
+
className: cn(
|
|
874
|
+
"mb-8 text-4xl font-bold text-balance lg:text-7xl",
|
|
875
|
+
headingClassName
|
|
876
|
+
),
|
|
877
|
+
children: heading
|
|
878
|
+
}
|
|
879
|
+
) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
|
|
880
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsx(
|
|
881
|
+
"p",
|
|
882
|
+
{
|
|
883
|
+
className: cn(
|
|
884
|
+
"mx-auto max-w-3xl lg:text-xl text-balance opacity-80",
|
|
885
|
+
descriptionClassName
|
|
886
|
+
),
|
|
887
|
+
children: description
|
|
888
|
+
}
|
|
889
|
+
) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
|
|
890
|
+
(actionsSlot || actions && actions.length > 0) && /* @__PURE__ */ jsx("div", { className: cn("lazy", actionsClassName), children: renderActions })
|
|
891
|
+
]
|
|
892
|
+
}
|
|
893
|
+
) }),
|
|
910
894
|
imageSrc && /* @__PURE__ */ jsx(
|
|
911
895
|
Img,
|
|
912
896
|
{
|
|
913
897
|
src: imageSrc,
|
|
914
898
|
alt: imageAlt,
|
|
915
|
-
className: cn(
|
|
899
|
+
className: cn(
|
|
900
|
+
"mx-auto mt-24 max-h-[700px] w-full max-w-7xl rounded-2xl object-cover shadow-lg",
|
|
901
|
+
imageClassName
|
|
902
|
+
),
|
|
916
903
|
optixFlowConfig
|
|
917
904
|
}
|
|
918
905
|
)
|
|
919
|
-
] })
|
|
906
|
+
] })
|
|
920
907
|
}
|
|
921
908
|
);
|
|
922
909
|
}
|