@opensite/ui 1.8.2 → 1.8.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/about-story-gallery.cjs +3 -30
- package/dist/about-story-gallery.d.cts +1 -1
- package/dist/about-story-gallery.d.ts +1 -1
- package/dist/about-story-gallery.js +3 -30
- package/dist/components.d.cts +1 -1
- package/dist/components.d.ts +1 -1
- package/dist/contact-callback.cjs +526 -273
- package/dist/contact-callback.d.cts +39 -59
- package/dist/contact-callback.d.ts +39 -59
- package/dist/contact-callback.js +528 -274
- package/dist/contact-card.cjs +459 -183
- package/dist/contact-card.d.cts +26 -49
- package/dist/contact-card.d.ts +26 -49
- package/dist/contact-card.js +461 -183
- package/dist/contact-careers.cjs +614 -510
- package/dist/contact-careers.d.cts +32 -55
- package/dist/contact-careers.d.ts +32 -55
- package/dist/contact-careers.js +616 -510
- package/dist/contact-catering.cjs +507 -501
- package/dist/contact-catering.d.cts +27 -61
- package/dist/contact-catering.d.ts +27 -61
- package/dist/contact-catering.js +509 -500
- package/dist/contact-consultation.cjs +484 -253
- package/dist/contact-consultation.d.cts +29 -56
- package/dist/contact-consultation.d.ts +29 -56
- package/dist/contact-consultation.js +486 -253
- package/dist/contact-dark.cjs +296 -296
- package/dist/contact-dark.d.cts +1 -1
- package/dist/contact-dark.d.ts +1 -1
- package/dist/contact-dark.js +297 -296
- package/dist/contact-demo.d.cts +1 -1
- package/dist/contact-demo.d.ts +1 -1
- package/dist/contact-emergency.d.cts +1 -1
- package/dist/contact-emergency.d.ts +1 -1
- package/dist/contact-event.d.cts +1 -1
- package/dist/contact-event.d.ts +1 -1
- package/dist/contact-faq.cjs +247 -250
- package/dist/contact-faq.d.cts +1 -1
- package/dist/contact-faq.d.ts +1 -1
- package/dist/contact-faq.js +248 -250
- package/dist/contact-feedback.d.cts +1 -1
- package/dist/contact-feedback.d.ts +1 -1
- package/dist/contact-fitness.d.cts +1 -1
- package/dist/contact-fitness.d.ts +1 -1
- package/dist/contact-guest.d.cts +1 -1
- package/dist/contact-guest.d.ts +1 -1
- package/dist/contact-image.d.cts +1 -1
- package/dist/contact-image.d.ts +1 -1
- package/dist/contact-insurance.d.cts +1 -1
- package/dist/contact-insurance.d.ts +1 -1
- package/dist/contact-interview.d.cts +1 -1
- package/dist/contact-interview.d.ts +1 -1
- package/dist/contact-locations.d.cts +1 -1
- package/dist/contact-locations.d.ts +1 -1
- package/dist/contact-maintenance.d.cts +1 -1
- package/dist/contact-maintenance.d.ts +1 -1
- package/dist/contact-map.d.cts +1 -1
- package/dist/contact-map.d.ts +1 -1
- package/dist/contact-minimal.d.cts +1 -1
- package/dist/contact-minimal.d.ts +1 -1
- package/dist/contact-moving.d.cts +1 -1
- package/dist/contact-moving.d.ts +1 -1
- package/dist/contact-multistep.d.cts +1 -1
- package/dist/contact-multistep.d.ts +1 -1
- package/dist/contact-partnership.d.cts +1 -1
- package/dist/contact-partnership.d.ts +1 -1
- package/dist/contact-photography.cjs +247 -250
- package/dist/contact-photography.d.cts +1 -1
- package/dist/contact-photography.d.ts +1 -1
- package/dist/contact-photography.js +248 -250
- package/dist/contact-press.d.cts +1 -1
- package/dist/contact-press.d.ts +1 -1
- package/dist/contact-quote.d.cts +1 -1
- package/dist/contact-quote.d.ts +1 -1
- package/dist/contact-referral.d.cts +1 -1
- package/dist/contact-referral.d.ts +1 -1
- package/dist/contact-report.d.cts +1 -1
- package/dist/contact-report.d.ts +1 -1
- package/dist/contact-reservation.d.cts +1 -1
- package/dist/contact-reservation.d.ts +1 -1
- package/dist/contact-retreat.d.cts +1 -1
- package/dist/contact-retreat.d.ts +1 -1
- package/dist/contact-rsvp.d.cts +1 -1
- package/dist/contact-rsvp.d.ts +1 -1
- package/dist/contact-sales.d.cts +1 -1
- package/dist/contact-sales.d.ts +1 -1
- package/dist/contact-schedule.d.cts +1 -1
- package/dist/contact-schedule.d.ts +1 -1
- package/dist/contact-sponsorship.d.cts +1 -1
- package/dist/contact-sponsorship.d.ts +1 -1
- package/dist/contact-support.d.cts +1 -1
- package/dist/contact-support.d.ts +1 -1
- package/dist/contact-tenant.d.cts +1 -1
- package/dist/contact-tenant.d.ts +1 -1
- package/dist/contact-vendor.d.cts +1 -1
- package/dist/contact-vendor.d.ts +1 -1
- package/dist/contact-volunteer.d.cts +1 -1
- package/dist/contact-volunteer.d.ts +1 -1
- package/dist/contact-warranty.d.cts +1 -1
- package/dist/contact-warranty.d.ts +1 -1
- package/dist/contact-wedding.d.cts +1 -1
- package/dist/contact-wedding.d.ts +1 -1
- package/dist/cta-app-download-newsletter.d.cts +1 -1
- package/dist/cta-app-download-newsletter.d.ts +1 -1
- package/dist/cta-newsletter-features.d.cts +1 -1
- package/dist/cta-newsletter-features.d.ts +1 -1
- package/dist/footer-accordion-social.d.cts +1 -1
- package/dist/footer-accordion-social.d.ts +1 -1
- package/dist/footer-newsletter-contact.d.cts +1 -1
- package/dist/footer-newsletter-contact.d.ts +1 -1
- package/dist/footer-newsletter-minimal.d.cts +1 -1
- package/dist/footer-newsletter-minimal.d.ts +1 -1
- package/dist/footer-split-image-accordion.d.cts +1 -1
- package/dist/footer-split-image-accordion.d.ts +1 -1
- package/dist/{forms-nGgHUTBw.d.cts → forms-CStlFhnh.d.cts} +41 -0
- package/dist/{forms-nGgHUTBw.d.ts → forms-CStlFhnh.d.ts} +41 -0
- package/dist/hero-conversation-intelligence.cjs +1 -2
- package/dist/hero-conversation-intelligence.d.cts +1 -5
- package/dist/hero-conversation-intelligence.d.ts +1 -5
- package/dist/hero-conversation-intelligence.js +1 -2
- package/dist/hero-conversion-video-play.cjs +2 -2
- package/dist/hero-conversion-video-play.js +2 -2
- package/dist/hero-design-system-3d.cjs +162 -82
- package/dist/hero-design-system-3d.js +162 -82
- package/dist/hero-ecommerce-product-showcase.cjs +103 -81
- package/dist/hero-ecommerce-product-showcase.d.cts +5 -1
- package/dist/hero-ecommerce-product-showcase.d.ts +5 -1
- package/dist/hero-ecommerce-product-showcase.js +103 -81
- package/dist/hero-floating-images.cjs +1 -1
- package/dist/hero-floating-images.js +1 -1
- package/dist/hero-hiring-animated-text.cjs +4 -4
- package/dist/hero-hiring-animated-text.js +4 -4
- package/dist/hero-minimal-centered-dark.cjs +111 -82
- package/dist/hero-minimal-centered-dark.d.cts +1 -1
- package/dist/hero-minimal-centered-dark.d.ts +1 -1
- package/dist/hero-minimal-centered-dark.js +111 -82
- package/dist/hero-mobile-app-download.cjs +1 -1
- package/dist/hero-mobile-app-download.js +1 -1
- package/dist/hero-overlay-cta-grid.cjs +1 -1
- package/dist/hero-overlay-cta-grid.js +1 -1
- package/dist/hero-spiral-pattern-cards.cjs +1 -1
- package/dist/hero-spiral-pattern-cards.js +1 -1
- package/dist/hero-startup-launch-cta.cjs +1 -1
- package/dist/hero-startup-launch-cta.js +1 -1
- package/dist/hero-stats-social-proof.cjs +106 -90
- package/dist/hero-stats-social-proof.js +106 -90
- package/dist/hero-testimonial-image-grid.cjs +1 -1
- package/dist/hero-testimonial-image-grid.js +1 -1
- package/dist/hero-therapy-testimonial-grid.cjs +1 -1
- package/dist/hero-therapy-testimonial-grid.js +1 -1
- package/dist/hero-ui-library-showcase.cjs +63 -15
- package/dist/hero-ui-library-showcase.d.cts +5 -1
- package/dist/hero-ui-library-showcase.d.ts +5 -1
- package/dist/hero-ui-library-showcase.js +63 -15
- package/dist/index.cjs +44 -6
- package/dist/index.d.cts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +44 -6
- package/dist/link-page-newsletter-social.d.cts +1 -1
- package/dist/link-page-newsletter-social.d.ts +1 -1
- package/dist/offer-modal-membership-image.d.cts +1 -1
- package/dist/offer-modal-membership-image.d.ts +1 -1
- package/dist/offer-modal-newsletter-discount.d.cts +1 -1
- package/dist/offer-modal-newsletter-discount.d.ts +1 -1
- package/dist/offer-modal-sheet-newsletter.d.cts +1 -1
- package/dist/offer-modal-sheet-newsletter.d.ts +1 -1
- package/dist/registry.cjs +14465 -14767
- package/dist/registry.js +12664 -12966
- package/dist/resource-list-hero-filter.d.cts +1 -1
- package/dist/resource-list-hero-filter.d.ts +1 -1
- package/package.json +3 -3
|
@@ -7,6 +7,7 @@ var tailwindMerge = require('tailwind-merge');
|
|
|
7
7
|
var classVarianceAuthority = require('class-variance-authority');
|
|
8
8
|
var jsxRuntime = require('react/jsx-runtime');
|
|
9
9
|
var img = require('@page-speed/img');
|
|
10
|
+
var reactSlot = require('@radix-ui/react-slot');
|
|
10
11
|
|
|
11
12
|
function _interopNamespace(e) {
|
|
12
13
|
if (e && e.__esModule) return e;
|
|
@@ -32,62 +33,6 @@ var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
|
32
33
|
function cn(...inputs) {
|
|
33
34
|
return tailwindMerge.twMerge(clsx.clsx(inputs));
|
|
34
35
|
}
|
|
35
|
-
function getNestedCardBg(parentBg, variant = "muted", options) {
|
|
36
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
37
|
-
if (isDark) {
|
|
38
|
-
switch (variant) {
|
|
39
|
-
case "muted":
|
|
40
|
-
return "bg-background";
|
|
41
|
-
case "card":
|
|
42
|
-
return "bg-card";
|
|
43
|
-
case "accent":
|
|
44
|
-
return "bg-accent";
|
|
45
|
-
case "subtle":
|
|
46
|
-
return "bg-background/50";
|
|
47
|
-
}
|
|
48
|
-
} else {
|
|
49
|
-
switch (variant) {
|
|
50
|
-
case "muted":
|
|
51
|
-
return "bg-muted";
|
|
52
|
-
case "card":
|
|
53
|
-
return "bg-card";
|
|
54
|
-
case "accent":
|
|
55
|
-
return "bg-accent";
|
|
56
|
-
case "subtle":
|
|
57
|
-
return "bg-muted/50";
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
function getNestedCardTextColor(parentBg, options) {
|
|
62
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
63
|
-
return isDark ? "text-foreground" : "";
|
|
64
|
-
}
|
|
65
|
-
function getTextColor(parentBg, variant = "default", options) {
|
|
66
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
67
|
-
if (isDark) {
|
|
68
|
-
switch (variant) {
|
|
69
|
-
case "default":
|
|
70
|
-
return "text-foreground";
|
|
71
|
-
case "muted":
|
|
72
|
-
return "text-foreground/80";
|
|
73
|
-
case "subtle":
|
|
74
|
-
return "text-foreground/60";
|
|
75
|
-
case "accent":
|
|
76
|
-
return "text-accent-foreground";
|
|
77
|
-
}
|
|
78
|
-
} else {
|
|
79
|
-
switch (variant) {
|
|
80
|
-
case "default":
|
|
81
|
-
return "text-foreground";
|
|
82
|
-
case "muted":
|
|
83
|
-
return "text-muted-foreground";
|
|
84
|
-
case "subtle":
|
|
85
|
-
return "text-muted-foreground/70";
|
|
86
|
-
case "accent":
|
|
87
|
-
return "text-primary";
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
36
|
function normalizePhoneNumber(input) {
|
|
92
37
|
const trimmed = input.trim();
|
|
93
38
|
if (trimmed.toLowerCase().startsWith("tel:")) {
|
|
@@ -986,6 +931,38 @@ var Section = React__namespace.default.forwardRef(
|
|
|
986
931
|
}
|
|
987
932
|
);
|
|
988
933
|
Section.displayName = "Section";
|
|
934
|
+
var badgeVariants = classVarianceAuthority.cva(
|
|
935
|
+
"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
|
|
936
|
+
{
|
|
937
|
+
variants: {
|
|
938
|
+
variant: {
|
|
939
|
+
default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
|
|
940
|
+
secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
|
|
941
|
+
destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
|
|
942
|
+
outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
|
|
943
|
+
}
|
|
944
|
+
},
|
|
945
|
+
defaultVariants: {
|
|
946
|
+
variant: "default"
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
);
|
|
950
|
+
function Badge({
|
|
951
|
+
className,
|
|
952
|
+
variant,
|
|
953
|
+
asChild = false,
|
|
954
|
+
...props
|
|
955
|
+
}) {
|
|
956
|
+
const Comp = asChild ? reactSlot.Slot : "span";
|
|
957
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
958
|
+
Comp,
|
|
959
|
+
{
|
|
960
|
+
"data-slot": "badge",
|
|
961
|
+
className: cn(badgeVariants({ variant }), className),
|
|
962
|
+
...props
|
|
963
|
+
}
|
|
964
|
+
);
|
|
965
|
+
}
|
|
989
966
|
function HeroEcommerceProductShowcase({
|
|
990
967
|
badgeText,
|
|
991
968
|
badgeIcon,
|
|
@@ -999,11 +976,12 @@ function HeroEcommerceProductShowcase({
|
|
|
999
976
|
images,
|
|
1000
977
|
imagesSlot,
|
|
1001
978
|
background,
|
|
1002
|
-
|
|
979
|
+
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
980
|
+
spacing = "py-32 md:py-32",
|
|
1003
981
|
pattern,
|
|
1004
982
|
patternOpacity,
|
|
983
|
+
patternClassName,
|
|
1005
984
|
className,
|
|
1006
|
-
containerClassName,
|
|
1007
985
|
contentClassName,
|
|
1008
986
|
headingClassName,
|
|
1009
987
|
descriptionClassName,
|
|
@@ -1014,11 +992,7 @@ function HeroEcommerceProductShowcase({
|
|
|
1014
992
|
}) {
|
|
1015
993
|
const renderBadge = React.useMemo(() => {
|
|
1016
994
|
if (badgeSlot) return badgeSlot;
|
|
1017
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1018
|
-
"inline-flex w-fit items-center gap-2 rounded-full px-4 py-2 text-sm font-medium",
|
|
1019
|
-
getNestedCardBg(background, "accent"),
|
|
1020
|
-
getNestedCardTextColor(background)
|
|
1021
|
-
), children: [
|
|
995
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Badge, { className: cn("px-4 py-2"), children: [
|
|
1022
996
|
badgeIcon && /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: badgeIcon, size: 16 }),
|
|
1023
997
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: badgeText })
|
|
1024
998
|
] });
|
|
@@ -1027,7 +1001,14 @@ function HeroEcommerceProductShowcase({
|
|
|
1027
1001
|
if (actionsSlot) return actionsSlot;
|
|
1028
1002
|
if (!actions || actions.length === 0) return null;
|
|
1029
1003
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-col gap-4 sm:flex-row", actionsClassName), children: actions.map((action, index) => {
|
|
1030
|
-
const {
|
|
1004
|
+
const {
|
|
1005
|
+
label,
|
|
1006
|
+
icon,
|
|
1007
|
+
iconAfter,
|
|
1008
|
+
children,
|
|
1009
|
+
className: actionClassName,
|
|
1010
|
+
...pressableProps
|
|
1011
|
+
} = action;
|
|
1031
1012
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1032
1013
|
Pressable,
|
|
1033
1014
|
{
|
|
@@ -1051,7 +1032,7 @@ function HeroEcommerceProductShowcase({
|
|
|
1051
1032
|
index > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-12 w-px bg-border" }),
|
|
1052
1033
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
1053
1034
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-2xl font-bold ", children: stat.value }),
|
|
1054
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm"
|
|
1035
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm"), children: stat.label })
|
|
1055
1036
|
] })
|
|
1056
1037
|
] }, index)) });
|
|
1057
1038
|
}, [statsSlot, stats, statsClassName]);
|
|
@@ -1060,41 +1041,53 @@ function HeroEcommerceProductShowcase({
|
|
|
1060
1041
|
if (!images || images.length === 0) return null;
|
|
1061
1042
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid grid-cols-2 gap-4", imagesClassName), children: [
|
|
1062
1043
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
1063
|
-
images[0] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden rounded-2xl"
|
|
1044
|
+
images[0] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1064
1045
|
img.Img,
|
|
1065
1046
|
{
|
|
1066
1047
|
src: images[0].src,
|
|
1067
1048
|
alt: images[0].alt,
|
|
1068
|
-
className: cn(
|
|
1049
|
+
className: cn(
|
|
1050
|
+
"aspect-3/4 w-full object-cover",
|
|
1051
|
+
images[0].className
|
|
1052
|
+
),
|
|
1069
1053
|
optixFlowConfig
|
|
1070
1054
|
}
|
|
1071
1055
|
) }),
|
|
1072
|
-
images[1] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden rounded-2xl"
|
|
1056
|
+
images[1] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1073
1057
|
img.Img,
|
|
1074
1058
|
{
|
|
1075
1059
|
src: images[1].src,
|
|
1076
1060
|
alt: images[1].alt,
|
|
1077
|
-
className: cn(
|
|
1061
|
+
className: cn(
|
|
1062
|
+
"aspect-square w-full object-cover",
|
|
1063
|
+
images[1].className
|
|
1064
|
+
),
|
|
1078
1065
|
optixFlowConfig
|
|
1079
1066
|
}
|
|
1080
1067
|
) })
|
|
1081
1068
|
] }),
|
|
1082
1069
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 pt-8", children: [
|
|
1083
|
-
images[2] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden rounded-2xl"
|
|
1070
|
+
images[2] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1084
1071
|
img.Img,
|
|
1085
1072
|
{
|
|
1086
1073
|
src: images[2].src,
|
|
1087
1074
|
alt: images[2].alt,
|
|
1088
|
-
className: cn(
|
|
1075
|
+
className: cn(
|
|
1076
|
+
"aspect-square w-full object-cover",
|
|
1077
|
+
images[2].className
|
|
1078
|
+
),
|
|
1089
1079
|
optixFlowConfig
|
|
1090
1080
|
}
|
|
1091
1081
|
) }),
|
|
1092
|
-
images[3] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden rounded-2xl"
|
|
1082
|
+
images[3] && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1093
1083
|
img.Img,
|
|
1094
1084
|
{
|
|
1095
1085
|
src: images[3].src,
|
|
1096
1086
|
alt: images[3].alt,
|
|
1097
|
-
className: cn(
|
|
1087
|
+
className: cn(
|
|
1088
|
+
"aspect-3/4 w-full object-cover",
|
|
1089
|
+
images[3].className
|
|
1090
|
+
),
|
|
1098
1091
|
optixFlowConfig
|
|
1099
1092
|
}
|
|
1100
1093
|
) })
|
|
@@ -1108,16 +1101,45 @@ function HeroEcommerceProductShowcase({
|
|
|
1108
1101
|
spacing,
|
|
1109
1102
|
pattern,
|
|
1110
1103
|
patternOpacity,
|
|
1104
|
+
patternClassName,
|
|
1111
1105
|
className,
|
|
1112
|
-
|
|
1106
|
+
containerClassName,
|
|
1107
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid items-center gap-12 lg:grid-cols-2 lg:gap-20", children: [
|
|
1113
1108
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "order-2 lg:order-1", children: renderImages }),
|
|
1114
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1109
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1110
|
+
"div",
|
|
1111
|
+
{
|
|
1112
|
+
className: cn(
|
|
1113
|
+
"order-1 flex flex-col gap-8 lg:order-2",
|
|
1114
|
+
contentClassName
|
|
1115
|
+
),
|
|
1116
|
+
children: [
|
|
1117
|
+
renderBadge,
|
|
1118
|
+
heading && (typeof heading === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1119
|
+
"h1",
|
|
1120
|
+
{
|
|
1121
|
+
className: cn(
|
|
1122
|
+
"text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl text-balance",
|
|
1123
|
+
headingClassName
|
|
1124
|
+
),
|
|
1125
|
+
children: heading
|
|
1126
|
+
}
|
|
1127
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1128
|
+
"h1",
|
|
1129
|
+
{
|
|
1130
|
+
className: cn(
|
|
1131
|
+
"text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl text-balance",
|
|
1132
|
+
headingClassName
|
|
1133
|
+
),
|
|
1134
|
+
children: heading
|
|
1135
|
+
}
|
|
1136
|
+
)),
|
|
1137
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-lg text-balance", descriptionClassName), children: description }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: descriptionClassName, children: description })),
|
|
1138
|
+
renderActions,
|
|
1139
|
+
renderStats
|
|
1140
|
+
]
|
|
1141
|
+
}
|
|
1142
|
+
)
|
|
1121
1143
|
] }) })
|
|
1122
1144
|
}
|
|
1123
1145
|
);
|
|
@@ -67,6 +67,10 @@ interface HeroEcommerceProductShowcaseProps {
|
|
|
67
67
|
* Pattern overlay opacity (0-1)
|
|
68
68
|
*/
|
|
69
69
|
patternOpacity?: number;
|
|
70
|
+
/**
|
|
71
|
+
* Additional CSS classes for the pattern overlay
|
|
72
|
+
*/
|
|
73
|
+
patternClassName?: string;
|
|
70
74
|
/**
|
|
71
75
|
* Additional CSS classes for the section
|
|
72
76
|
*/
|
|
@@ -104,6 +108,6 @@ interface HeroEcommerceProductShowcaseProps {
|
|
|
104
108
|
*/
|
|
105
109
|
optixFlowConfig?: OptixFlowConfig;
|
|
106
110
|
}
|
|
107
|
-
declare function HeroEcommerceProductShowcase({ badgeText, badgeIcon, badgeSlot, heading, description, actions, actionsSlot, stats, statsSlot, images, imagesSlot, background, spacing, pattern, patternOpacity,
|
|
111
|
+
declare function HeroEcommerceProductShowcase({ badgeText, badgeIcon, badgeSlot, heading, description, actions, actionsSlot, stats, statsSlot, images, imagesSlot, background, containerClassName, spacing, pattern, patternOpacity, patternClassName, className, contentClassName, headingClassName, descriptionClassName, actionsClassName, statsClassName, imagesClassName, optixFlowConfig, }: HeroEcommerceProductShowcaseProps): React.JSX.Element;
|
|
108
112
|
|
|
109
113
|
export { HeroEcommerceProductShowcase, type HeroEcommerceProductShowcaseProps };
|
|
@@ -67,6 +67,10 @@ interface HeroEcommerceProductShowcaseProps {
|
|
|
67
67
|
* Pattern overlay opacity (0-1)
|
|
68
68
|
*/
|
|
69
69
|
patternOpacity?: number;
|
|
70
|
+
/**
|
|
71
|
+
* Additional CSS classes for the pattern overlay
|
|
72
|
+
*/
|
|
73
|
+
patternClassName?: string;
|
|
70
74
|
/**
|
|
71
75
|
* Additional CSS classes for the section
|
|
72
76
|
*/
|
|
@@ -104,6 +108,6 @@ interface HeroEcommerceProductShowcaseProps {
|
|
|
104
108
|
*/
|
|
105
109
|
optixFlowConfig?: OptixFlowConfig;
|
|
106
110
|
}
|
|
107
|
-
declare function HeroEcommerceProductShowcase({ badgeText, badgeIcon, badgeSlot, heading, description, actions, actionsSlot, stats, statsSlot, images, imagesSlot, background, spacing, pattern, patternOpacity,
|
|
111
|
+
declare function HeroEcommerceProductShowcase({ badgeText, badgeIcon, badgeSlot, heading, description, actions, actionsSlot, stats, statsSlot, images, imagesSlot, background, containerClassName, spacing, pattern, patternOpacity, patternClassName, className, contentClassName, headingClassName, descriptionClassName, actionsClassName, statsClassName, imagesClassName, optixFlowConfig, }: HeroEcommerceProductShowcaseProps): React.JSX.Element;
|
|
108
112
|
|
|
109
113
|
export { HeroEcommerceProductShowcase, type HeroEcommerceProductShowcaseProps };
|
|
@@ -6,67 +6,12 @@ import { twMerge } from 'tailwind-merge';
|
|
|
6
6
|
import { cva } from 'class-variance-authority';
|
|
7
7
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
8
8
|
import { Img } from '@page-speed/img';
|
|
9
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
9
10
|
|
|
10
11
|
// components/blocks/hero/hero-ecommerce-product-showcase.tsx
|
|
11
12
|
function cn(...inputs) {
|
|
12
13
|
return twMerge(clsx(inputs));
|
|
13
14
|
}
|
|
14
|
-
function getNestedCardBg(parentBg, variant = "muted", options) {
|
|
15
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
16
|
-
if (isDark) {
|
|
17
|
-
switch (variant) {
|
|
18
|
-
case "muted":
|
|
19
|
-
return "bg-background";
|
|
20
|
-
case "card":
|
|
21
|
-
return "bg-card";
|
|
22
|
-
case "accent":
|
|
23
|
-
return "bg-accent";
|
|
24
|
-
case "subtle":
|
|
25
|
-
return "bg-background/50";
|
|
26
|
-
}
|
|
27
|
-
} else {
|
|
28
|
-
switch (variant) {
|
|
29
|
-
case "muted":
|
|
30
|
-
return "bg-muted";
|
|
31
|
-
case "card":
|
|
32
|
-
return "bg-card";
|
|
33
|
-
case "accent":
|
|
34
|
-
return "bg-accent";
|
|
35
|
-
case "subtle":
|
|
36
|
-
return "bg-muted/50";
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
function getNestedCardTextColor(parentBg, options) {
|
|
41
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
42
|
-
return isDark ? "text-foreground" : "";
|
|
43
|
-
}
|
|
44
|
-
function getTextColor(parentBg, variant = "default", options) {
|
|
45
|
-
const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
|
|
46
|
-
if (isDark) {
|
|
47
|
-
switch (variant) {
|
|
48
|
-
case "default":
|
|
49
|
-
return "text-foreground";
|
|
50
|
-
case "muted":
|
|
51
|
-
return "text-foreground/80";
|
|
52
|
-
case "subtle":
|
|
53
|
-
return "text-foreground/60";
|
|
54
|
-
case "accent":
|
|
55
|
-
return "text-accent-foreground";
|
|
56
|
-
}
|
|
57
|
-
} else {
|
|
58
|
-
switch (variant) {
|
|
59
|
-
case "default":
|
|
60
|
-
return "text-foreground";
|
|
61
|
-
case "muted":
|
|
62
|
-
return "text-muted-foreground";
|
|
63
|
-
case "subtle":
|
|
64
|
-
return "text-muted-foreground/70";
|
|
65
|
-
case "accent":
|
|
66
|
-
return "text-primary";
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
15
|
function normalizePhoneNumber(input) {
|
|
71
16
|
const trimmed = input.trim();
|
|
72
17
|
if (trimmed.toLowerCase().startsWith("tel:")) {
|
|
@@ -965,6 +910,38 @@ var Section = React__default.forwardRef(
|
|
|
965
910
|
}
|
|
966
911
|
);
|
|
967
912
|
Section.displayName = "Section";
|
|
913
|
+
var badgeVariants = cva(
|
|
914
|
+
"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
|
|
915
|
+
{
|
|
916
|
+
variants: {
|
|
917
|
+
variant: {
|
|
918
|
+
default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
|
|
919
|
+
secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
|
|
920
|
+
destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
|
|
921
|
+
outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
|
|
922
|
+
}
|
|
923
|
+
},
|
|
924
|
+
defaultVariants: {
|
|
925
|
+
variant: "default"
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
);
|
|
929
|
+
function Badge({
|
|
930
|
+
className,
|
|
931
|
+
variant,
|
|
932
|
+
asChild = false,
|
|
933
|
+
...props
|
|
934
|
+
}) {
|
|
935
|
+
const Comp = asChild ? Slot : "span";
|
|
936
|
+
return /* @__PURE__ */ jsx(
|
|
937
|
+
Comp,
|
|
938
|
+
{
|
|
939
|
+
"data-slot": "badge",
|
|
940
|
+
className: cn(badgeVariants({ variant }), className),
|
|
941
|
+
...props
|
|
942
|
+
}
|
|
943
|
+
);
|
|
944
|
+
}
|
|
968
945
|
function HeroEcommerceProductShowcase({
|
|
969
946
|
badgeText,
|
|
970
947
|
badgeIcon,
|
|
@@ -978,11 +955,12 @@ function HeroEcommerceProductShowcase({
|
|
|
978
955
|
images,
|
|
979
956
|
imagesSlot,
|
|
980
957
|
background,
|
|
981
|
-
|
|
958
|
+
containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
|
|
959
|
+
spacing = "py-32 md:py-32",
|
|
982
960
|
pattern,
|
|
983
961
|
patternOpacity,
|
|
962
|
+
patternClassName,
|
|
984
963
|
className,
|
|
985
|
-
containerClassName,
|
|
986
964
|
contentClassName,
|
|
987
965
|
headingClassName,
|
|
988
966
|
descriptionClassName,
|
|
@@ -993,11 +971,7 @@ function HeroEcommerceProductShowcase({
|
|
|
993
971
|
}) {
|
|
994
972
|
const renderBadge = useMemo(() => {
|
|
995
973
|
if (badgeSlot) return badgeSlot;
|
|
996
|
-
return /* @__PURE__ */ jsxs(
|
|
997
|
-
"inline-flex w-fit items-center gap-2 rounded-full px-4 py-2 text-sm font-medium",
|
|
998
|
-
getNestedCardBg(background, "accent"),
|
|
999
|
-
getNestedCardTextColor(background)
|
|
1000
|
-
), children: [
|
|
974
|
+
return /* @__PURE__ */ jsxs(Badge, { className: cn("px-4 py-2"), children: [
|
|
1001
975
|
badgeIcon && /* @__PURE__ */ jsx(DynamicIcon, { name: badgeIcon, size: 16 }),
|
|
1002
976
|
/* @__PURE__ */ jsx("span", { children: badgeText })
|
|
1003
977
|
] });
|
|
@@ -1006,7 +980,14 @@ function HeroEcommerceProductShowcase({
|
|
|
1006
980
|
if (actionsSlot) return actionsSlot;
|
|
1007
981
|
if (!actions || actions.length === 0) return null;
|
|
1008
982
|
return /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-4 sm:flex-row", actionsClassName), children: actions.map((action, index) => {
|
|
1009
|
-
const {
|
|
983
|
+
const {
|
|
984
|
+
label,
|
|
985
|
+
icon,
|
|
986
|
+
iconAfter,
|
|
987
|
+
children,
|
|
988
|
+
className: actionClassName,
|
|
989
|
+
...pressableProps
|
|
990
|
+
} = action;
|
|
1010
991
|
return /* @__PURE__ */ jsx(
|
|
1011
992
|
Pressable,
|
|
1012
993
|
{
|
|
@@ -1030,7 +1011,7 @@ function HeroEcommerceProductShowcase({
|
|
|
1030
1011
|
index > 0 && /* @__PURE__ */ jsx("div", { className: "h-12 w-px bg-border" }),
|
|
1031
1012
|
/* @__PURE__ */ jsxs("div", { className: "text-center", children: [
|
|
1032
1013
|
/* @__PURE__ */ jsx("div", { className: "text-2xl font-bold ", children: stat.value }),
|
|
1033
|
-
/* @__PURE__ */ jsx("div", { className: cn("text-sm"
|
|
1014
|
+
/* @__PURE__ */ jsx("div", { className: cn("text-sm"), children: stat.label })
|
|
1034
1015
|
] })
|
|
1035
1016
|
] }, index)) });
|
|
1036
1017
|
}, [statsSlot, stats, statsClassName]);
|
|
@@ -1039,41 +1020,53 @@ function HeroEcommerceProductShowcase({
|
|
|
1039
1020
|
if (!images || images.length === 0) return null;
|
|
1040
1021
|
return /* @__PURE__ */ jsxs("div", { className: cn("grid grid-cols-2 gap-4", imagesClassName), children: [
|
|
1041
1022
|
/* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
|
|
1042
|
-
images[0] && /* @__PURE__ */ jsx("div", { className: cn("overflow-hidden rounded-2xl"
|
|
1023
|
+
images[0] && /* @__PURE__ */ jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsx(
|
|
1043
1024
|
Img,
|
|
1044
1025
|
{
|
|
1045
1026
|
src: images[0].src,
|
|
1046
1027
|
alt: images[0].alt,
|
|
1047
|
-
className: cn(
|
|
1028
|
+
className: cn(
|
|
1029
|
+
"aspect-3/4 w-full object-cover",
|
|
1030
|
+
images[0].className
|
|
1031
|
+
),
|
|
1048
1032
|
optixFlowConfig
|
|
1049
1033
|
}
|
|
1050
1034
|
) }),
|
|
1051
|
-
images[1] && /* @__PURE__ */ jsx("div", { className: cn("overflow-hidden rounded-2xl"
|
|
1035
|
+
images[1] && /* @__PURE__ */ jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsx(
|
|
1052
1036
|
Img,
|
|
1053
1037
|
{
|
|
1054
1038
|
src: images[1].src,
|
|
1055
1039
|
alt: images[1].alt,
|
|
1056
|
-
className: cn(
|
|
1040
|
+
className: cn(
|
|
1041
|
+
"aspect-square w-full object-cover",
|
|
1042
|
+
images[1].className
|
|
1043
|
+
),
|
|
1057
1044
|
optixFlowConfig
|
|
1058
1045
|
}
|
|
1059
1046
|
) })
|
|
1060
1047
|
] }),
|
|
1061
1048
|
/* @__PURE__ */ jsxs("div", { className: "space-y-4 pt-8", children: [
|
|
1062
|
-
images[2] && /* @__PURE__ */ jsx("div", { className: cn("overflow-hidden rounded-2xl"
|
|
1049
|
+
images[2] && /* @__PURE__ */ jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsx(
|
|
1063
1050
|
Img,
|
|
1064
1051
|
{
|
|
1065
1052
|
src: images[2].src,
|
|
1066
1053
|
alt: images[2].alt,
|
|
1067
|
-
className: cn(
|
|
1054
|
+
className: cn(
|
|
1055
|
+
"aspect-square w-full object-cover",
|
|
1056
|
+
images[2].className
|
|
1057
|
+
),
|
|
1068
1058
|
optixFlowConfig
|
|
1069
1059
|
}
|
|
1070
1060
|
) }),
|
|
1071
|
-
images[3] && /* @__PURE__ */ jsx("div", { className: cn("overflow-hidden rounded-2xl"
|
|
1061
|
+
images[3] && /* @__PURE__ */ jsx("div", { className: cn("overflow-hidden rounded-2xl"), children: /* @__PURE__ */ jsx(
|
|
1072
1062
|
Img,
|
|
1073
1063
|
{
|
|
1074
1064
|
src: images[3].src,
|
|
1075
1065
|
alt: images[3].alt,
|
|
1076
|
-
className: cn(
|
|
1066
|
+
className: cn(
|
|
1067
|
+
"aspect-3/4 w-full object-cover",
|
|
1068
|
+
images[3].className
|
|
1069
|
+
),
|
|
1077
1070
|
optixFlowConfig
|
|
1078
1071
|
}
|
|
1079
1072
|
) })
|
|
@@ -1087,16 +1080,45 @@ function HeroEcommerceProductShowcase({
|
|
|
1087
1080
|
spacing,
|
|
1088
1081
|
pattern,
|
|
1089
1082
|
patternOpacity,
|
|
1083
|
+
patternClassName,
|
|
1090
1084
|
className,
|
|
1091
|
-
|
|
1085
|
+
containerClassName,
|
|
1086
|
+
children: /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs("div", { className: "grid items-center gap-12 lg:grid-cols-2 lg:gap-20", children: [
|
|
1092
1087
|
/* @__PURE__ */ jsx("div", { className: "order-2 lg:order-1", children: renderImages }),
|
|
1093
|
-
/* @__PURE__ */ jsxs(
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1088
|
+
/* @__PURE__ */ jsxs(
|
|
1089
|
+
"div",
|
|
1090
|
+
{
|
|
1091
|
+
className: cn(
|
|
1092
|
+
"order-1 flex flex-col gap-8 lg:order-2",
|
|
1093
|
+
contentClassName
|
|
1094
|
+
),
|
|
1095
|
+
children: [
|
|
1096
|
+
renderBadge,
|
|
1097
|
+
heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
|
|
1098
|
+
"h1",
|
|
1099
|
+
{
|
|
1100
|
+
className: cn(
|
|
1101
|
+
"text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl text-balance",
|
|
1102
|
+
headingClassName
|
|
1103
|
+
),
|
|
1104
|
+
children: heading
|
|
1105
|
+
}
|
|
1106
|
+
) : /* @__PURE__ */ jsx(
|
|
1107
|
+
"h1",
|
|
1108
|
+
{
|
|
1109
|
+
className: cn(
|
|
1110
|
+
"text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl text-balance",
|
|
1111
|
+
headingClassName
|
|
1112
|
+
),
|
|
1113
|
+
children: heading
|
|
1114
|
+
}
|
|
1115
|
+
)),
|
|
1116
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-lg text-balance", descriptionClassName), children: description }) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description })),
|
|
1117
|
+
renderActions,
|
|
1118
|
+
renderStats
|
|
1119
|
+
]
|
|
1120
|
+
}
|
|
1121
|
+
)
|
|
1100
1122
|
] }) })
|
|
1101
1123
|
}
|
|
1102
1124
|
);
|
|
@@ -593,7 +593,7 @@ function HeroFloatingImages({
|
|
|
593
593
|
{
|
|
594
594
|
type: "button",
|
|
595
595
|
className: cn(
|
|
596
|
-
"group relative col-span-2 aspect-
|
|
596
|
+
"group relative col-span-2 aspect-4/3 overflow-hidden rounded-2xl sm:col-span-1 sm:row-span-2 sm:aspect-auto sm:h-full",
|
|
597
597
|
featuredImageClassName
|
|
598
598
|
),
|
|
599
599
|
onClick: () => handleImageClick(0),
|
|
@@ -572,7 +572,7 @@ function HeroFloatingImages({
|
|
|
572
572
|
{
|
|
573
573
|
type: "button",
|
|
574
574
|
className: cn(
|
|
575
|
-
"group relative col-span-2 aspect-
|
|
575
|
+
"group relative col-span-2 aspect-4/3 overflow-hidden rounded-2xl sm:col-span-1 sm:row-span-2 sm:aspect-auto sm:h-full",
|
|
576
576
|
featuredImageClassName
|
|
577
577
|
),
|
|
578
578
|
onClick: () => handleImageClick(0),
|
|
@@ -835,11 +835,11 @@ function HeroHiringAnimatedText({
|
|
|
835
835
|
scrollActionSlot,
|
|
836
836
|
backgroundImage,
|
|
837
837
|
background,
|
|
838
|
-
spacing = "
|
|
838
|
+
spacing = "py-0 md:py-0",
|
|
839
839
|
pattern,
|
|
840
840
|
patternOpacity,
|
|
841
841
|
className,
|
|
842
|
-
containerClassName = "
|
|
842
|
+
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",
|
|
843
843
|
contentClassName,
|
|
844
844
|
headingClassName,
|
|
845
845
|
descriptionClassName,
|
|
@@ -945,11 +945,11 @@ function HeroHiringAnimatedText({
|
|
|
945
945
|
),
|
|
946
946
|
containerClassName,
|
|
947
947
|
style: { backgroundImage: `url('${backgroundImage}')` },
|
|
948
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-10 flex size-full max-w-
|
|
948
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-10 flex size-full max-w-md flex-col justify-between md:justify-end", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
949
949
|
"div",
|
|
950
950
|
{
|
|
951
951
|
className: cn(
|
|
952
|
-
"flex h-full flex-col
|
|
952
|
+
"flex h-full flex-col gap-6 justify-end max-w-full md:max-w-md",
|
|
953
953
|
contentClassName
|
|
954
954
|
),
|
|
955
955
|
children: [
|