@opensite/ui 1.6.9 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hero-billing-platform-logos.cjs +77 -52
- package/dist/hero-billing-platform-logos.js +77 -51
- package/dist/hero-conversion-video-play.cjs +240 -78
- package/dist/hero-conversion-video-play.js +233 -75
- package/dist/hero-customer-support-layered.cjs +1 -1
- package/dist/hero-customer-support-layered.js +1 -1
- package/dist/hero-dashed-border-features.cjs +33 -24
- package/dist/hero-dashed-border-features.js +33 -24
- package/dist/hero-design-showcase-logos.cjs +102 -38
- package/dist/hero-design-showcase-logos.js +102 -38
- package/dist/hero-grid-pattern-solutions.cjs +187 -49
- package/dist/hero-grid-pattern-solutions.d.cts +1 -4
- package/dist/hero-grid-pattern-solutions.d.ts +1 -4
- package/dist/hero-grid-pattern-solutions.js +188 -50
- package/dist/hero-marketplace-scattered-images.cjs +120 -79
- package/dist/hero-marketplace-scattered-images.js +120 -79
- package/dist/hero-mentorship-video-split.cjs +32 -13
- package/dist/hero-mentorship-video-split.js +32 -13
- package/dist/hero-premium-split-avatars.cjs +2 -2
- package/dist/hero-premium-split-avatars.js +2 -2
- package/dist/hero-productivity-launcher-video.cjs +45 -143
- package/dist/hero-productivity-launcher-video.d.cts +5 -23
- package/dist/hero-productivity-launcher-video.d.ts +5 -23
- package/dist/hero-productivity-launcher-video.js +45 -143
- package/dist/hero-split-spiral-shapes.cjs +47 -38
- package/dist/hero-split-spiral-shapes.js +47 -38
- package/dist/hero-task-timer-animated.cjs +59 -59
- package/dist/hero-task-timer-animated.js +59 -59
- package/dist/registry.cjs +772 -439
- package/dist/registry.js +772 -439
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import * as
|
|
3
|
-
import
|
|
2
|
+
import * as React4 from 'react';
|
|
3
|
+
import React4__default, { useState, useMemo, Fragment as Fragment$1 } from 'react';
|
|
4
|
+
import AutoScroll from 'embla-carousel-auto-scroll';
|
|
4
5
|
import { clsx } from 'clsx';
|
|
5
6
|
import { twMerge } from 'tailwind-merge';
|
|
6
7
|
import { cva } from 'class-variance-authority';
|
|
@@ -8,6 +9,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
|
8
9
|
import { Img } from '@page-speed/img';
|
|
9
10
|
import * as AspectRatioPrimitive from '@radix-ui/react-aspect-ratio';
|
|
10
11
|
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
12
|
+
import useEmblaCarousel from 'embla-carousel-react';
|
|
11
13
|
|
|
12
14
|
// components/blocks/hero/hero-conversion-video-play.tsx
|
|
13
15
|
function cn(...inputs) {
|
|
@@ -88,7 +90,7 @@ function useNavigation({
|
|
|
88
90
|
href,
|
|
89
91
|
onClick
|
|
90
92
|
} = {}) {
|
|
91
|
-
const linkType =
|
|
93
|
+
const linkType = React4.useMemo(() => {
|
|
92
94
|
if (!href || href.trim() === "") {
|
|
93
95
|
return onClick ? "none" : "none";
|
|
94
96
|
}
|
|
@@ -109,7 +111,7 @@ function useNavigation({
|
|
|
109
111
|
return "internal";
|
|
110
112
|
}
|
|
111
113
|
}, [href, onClick]);
|
|
112
|
-
const normalizedHref =
|
|
114
|
+
const normalizedHref = React4.useMemo(() => {
|
|
113
115
|
if (!href || href.trim() === "") {
|
|
114
116
|
return void 0;
|
|
115
117
|
}
|
|
@@ -127,7 +129,7 @@ function useNavigation({
|
|
|
127
129
|
return trimmed;
|
|
128
130
|
}
|
|
129
131
|
}, [href, linkType]);
|
|
130
|
-
const target =
|
|
132
|
+
const target = React4.useMemo(() => {
|
|
131
133
|
switch (linkType) {
|
|
132
134
|
case "external":
|
|
133
135
|
return "_blank";
|
|
@@ -140,7 +142,7 @@ function useNavigation({
|
|
|
140
142
|
return void 0;
|
|
141
143
|
}
|
|
142
144
|
}, [linkType]);
|
|
143
|
-
const rel =
|
|
145
|
+
const rel = React4.useMemo(() => {
|
|
144
146
|
if (linkType === "external") {
|
|
145
147
|
return "noopener noreferrer";
|
|
146
148
|
}
|
|
@@ -149,7 +151,7 @@ function useNavigation({
|
|
|
149
151
|
const isExternal = linkType === "external";
|
|
150
152
|
const isInternal = linkType === "internal";
|
|
151
153
|
const shouldUseRouter = isInternal && typeof normalizedHref === "string" && normalizedHref.startsWith("/");
|
|
152
|
-
const handleClick =
|
|
154
|
+
const handleClick = React4.useCallback(
|
|
153
155
|
(event) => {
|
|
154
156
|
if (onClick) {
|
|
155
157
|
try {
|
|
@@ -333,7 +335,7 @@ var buttonVariants = cva(baseStyles, {
|
|
|
333
335
|
size: "default"
|
|
334
336
|
}
|
|
335
337
|
});
|
|
336
|
-
var Pressable =
|
|
338
|
+
var Pressable = React4.forwardRef(
|
|
337
339
|
({
|
|
338
340
|
children,
|
|
339
341
|
className,
|
|
@@ -439,10 +441,10 @@ function DynamicIcon({
|
|
|
439
441
|
className,
|
|
440
442
|
alt
|
|
441
443
|
}) {
|
|
442
|
-
const [svgContent, setSvgContent] =
|
|
443
|
-
const [isLoading, setIsLoading] =
|
|
444
|
-
const [error, setError] =
|
|
445
|
-
const { url, iconName } =
|
|
444
|
+
const [svgContent, setSvgContent] = React4.useState(null);
|
|
445
|
+
const [isLoading, setIsLoading] = React4.useState(true);
|
|
446
|
+
const [error, setError] = React4.useState(null);
|
|
447
|
+
const { url, iconName } = React4.useMemo(() => {
|
|
446
448
|
const separator = name.includes("/") ? "/" : ":";
|
|
447
449
|
const [prefix, iconName2] = name.split(separator);
|
|
448
450
|
const baseUrl = `https://icons.opensite.ai/api/icon/${prefix}/${iconName2}?format=svg&width=${size}&height=${size}&key=au382bi7fsh96w9h9xlrnat2jglx`;
|
|
@@ -451,7 +453,7 @@ function DynamicIcon({
|
|
|
451
453
|
iconName: iconName2
|
|
452
454
|
};
|
|
453
455
|
}, [name, size]);
|
|
454
|
-
|
|
456
|
+
React4.useEffect(() => {
|
|
455
457
|
let isMounted = true;
|
|
456
458
|
const fetchSvg = async () => {
|
|
457
459
|
const cached = svgCache.get(url);
|
|
@@ -625,6 +627,135 @@ function DialogTitle({
|
|
|
625
627
|
}
|
|
626
628
|
);
|
|
627
629
|
}
|
|
630
|
+
var CarouselContext = React4.createContext(null);
|
|
631
|
+
function useCarousel() {
|
|
632
|
+
const context = React4.useContext(CarouselContext);
|
|
633
|
+
if (!context) {
|
|
634
|
+
throw new Error("useCarousel must be used within a <Carousel />");
|
|
635
|
+
}
|
|
636
|
+
return context;
|
|
637
|
+
}
|
|
638
|
+
function Carousel({
|
|
639
|
+
orientation = "horizontal",
|
|
640
|
+
opts,
|
|
641
|
+
setApi,
|
|
642
|
+
plugins,
|
|
643
|
+
className,
|
|
644
|
+
children,
|
|
645
|
+
...props
|
|
646
|
+
}) {
|
|
647
|
+
const [carouselRef, api] = useEmblaCarousel(
|
|
648
|
+
{
|
|
649
|
+
...opts,
|
|
650
|
+
axis: orientation === "horizontal" ? "x" : "y"
|
|
651
|
+
},
|
|
652
|
+
plugins
|
|
653
|
+
);
|
|
654
|
+
const [canScrollPrev, setCanScrollPrev] = React4.useState(false);
|
|
655
|
+
const [canScrollNext, setCanScrollNext] = React4.useState(false);
|
|
656
|
+
const onSelect = React4.useCallback((api2) => {
|
|
657
|
+
if (!api2) return;
|
|
658
|
+
setCanScrollPrev(api2.canScrollPrev());
|
|
659
|
+
setCanScrollNext(api2.canScrollNext());
|
|
660
|
+
}, []);
|
|
661
|
+
const scrollPrev = React4.useCallback(() => {
|
|
662
|
+
api?.scrollPrev();
|
|
663
|
+
}, [api]);
|
|
664
|
+
const scrollNext = React4.useCallback(() => {
|
|
665
|
+
api?.scrollNext();
|
|
666
|
+
}, [api]);
|
|
667
|
+
const handleKeyDown = React4.useCallback(
|
|
668
|
+
(event) => {
|
|
669
|
+
if (event.key === "ArrowLeft") {
|
|
670
|
+
event.preventDefault();
|
|
671
|
+
scrollPrev();
|
|
672
|
+
} else if (event.key === "ArrowRight") {
|
|
673
|
+
event.preventDefault();
|
|
674
|
+
scrollNext();
|
|
675
|
+
}
|
|
676
|
+
},
|
|
677
|
+
[scrollPrev, scrollNext]
|
|
678
|
+
);
|
|
679
|
+
React4.useEffect(() => {
|
|
680
|
+
if (!api || !setApi) return;
|
|
681
|
+
setApi(api);
|
|
682
|
+
}, [api, setApi]);
|
|
683
|
+
React4.useEffect(() => {
|
|
684
|
+
if (!api) return;
|
|
685
|
+
onSelect(api);
|
|
686
|
+
api.on("reInit", onSelect);
|
|
687
|
+
api.on("select", onSelect);
|
|
688
|
+
return () => {
|
|
689
|
+
api?.off("select", onSelect);
|
|
690
|
+
};
|
|
691
|
+
}, [api, onSelect]);
|
|
692
|
+
return /* @__PURE__ */ jsx(
|
|
693
|
+
CarouselContext.Provider,
|
|
694
|
+
{
|
|
695
|
+
value: {
|
|
696
|
+
carouselRef,
|
|
697
|
+
api,
|
|
698
|
+
opts,
|
|
699
|
+
orientation: orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
|
|
700
|
+
scrollPrev,
|
|
701
|
+
scrollNext,
|
|
702
|
+
canScrollPrev,
|
|
703
|
+
canScrollNext
|
|
704
|
+
},
|
|
705
|
+
children: /* @__PURE__ */ jsx(
|
|
706
|
+
"div",
|
|
707
|
+
{
|
|
708
|
+
onKeyDownCapture: handleKeyDown,
|
|
709
|
+
className: cn("relative", className),
|
|
710
|
+
role: "region",
|
|
711
|
+
"aria-roledescription": "carousel",
|
|
712
|
+
"data-slot": "carousel",
|
|
713
|
+
...props,
|
|
714
|
+
children
|
|
715
|
+
}
|
|
716
|
+
)
|
|
717
|
+
}
|
|
718
|
+
);
|
|
719
|
+
}
|
|
720
|
+
function CarouselContent({ className, ...props }) {
|
|
721
|
+
const { carouselRef, orientation } = useCarousel();
|
|
722
|
+
return /* @__PURE__ */ jsx(
|
|
723
|
+
"div",
|
|
724
|
+
{
|
|
725
|
+
ref: carouselRef,
|
|
726
|
+
className: "overflow-hidden",
|
|
727
|
+
"data-slot": "carousel-content",
|
|
728
|
+
children: /* @__PURE__ */ jsx(
|
|
729
|
+
"div",
|
|
730
|
+
{
|
|
731
|
+
className: cn(
|
|
732
|
+
"flex",
|
|
733
|
+
orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
|
|
734
|
+
className
|
|
735
|
+
),
|
|
736
|
+
...props
|
|
737
|
+
}
|
|
738
|
+
)
|
|
739
|
+
}
|
|
740
|
+
);
|
|
741
|
+
}
|
|
742
|
+
function CarouselItem({ className, ...props }) {
|
|
743
|
+
const { orientation } = useCarousel();
|
|
744
|
+
return /* @__PURE__ */ jsx(
|
|
745
|
+
"div",
|
|
746
|
+
{
|
|
747
|
+
role: "group",
|
|
748
|
+
"aria-roledescription": "slide",
|
|
749
|
+
"data-slot": "carousel-item",
|
|
750
|
+
className: cn(
|
|
751
|
+
"min-w-0 shrink-0 grow-0 basis-full",
|
|
752
|
+
orientation === "horizontal" ? "pl-4" : "pt-4",
|
|
753
|
+
className
|
|
754
|
+
),
|
|
755
|
+
...props
|
|
756
|
+
}
|
|
757
|
+
);
|
|
758
|
+
}
|
|
628
759
|
var maxWidthStyles = {
|
|
629
760
|
sm: "max-w-screen-sm",
|
|
630
761
|
md: "max-w-screen-md",
|
|
@@ -634,7 +765,7 @@ var maxWidthStyles = {
|
|
|
634
765
|
"4xl": "max-w-[1536px]",
|
|
635
766
|
full: "max-w-full"
|
|
636
767
|
};
|
|
637
|
-
var Container =
|
|
768
|
+
var Container = React4__default.forwardRef(
|
|
638
769
|
({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
|
|
639
770
|
const Component = as;
|
|
640
771
|
return /* @__PURE__ */ jsx(
|
|
@@ -939,7 +1070,7 @@ var spacingStyles = {
|
|
|
939
1070
|
};
|
|
940
1071
|
var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
|
|
941
1072
|
var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
|
|
942
|
-
var Section =
|
|
1073
|
+
var Section = React4__default.forwardRef(
|
|
943
1074
|
({
|
|
944
1075
|
id,
|
|
945
1076
|
title,
|
|
@@ -1032,64 +1163,42 @@ function HeroConversionVideoPlay({
|
|
|
1032
1163
|
if (actionsSlot) return actionsSlot;
|
|
1033
1164
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1034
1165
|
primaryAction && (() => {
|
|
1035
|
-
const {
|
|
1036
|
-
|
|
1166
|
+
const {
|
|
1167
|
+
label,
|
|
1168
|
+
icon,
|
|
1169
|
+
iconAfter,
|
|
1170
|
+
children,
|
|
1171
|
+
className: actionClassName,
|
|
1172
|
+
...pressableProps
|
|
1173
|
+
} = primaryAction;
|
|
1174
|
+
return /* @__PURE__ */ jsx(
|
|
1037
1175
|
Pressable,
|
|
1038
1176
|
{
|
|
1039
1177
|
asButton: true,
|
|
1040
1178
|
className: actionClassName,
|
|
1041
1179
|
...pressableProps,
|
|
1042
|
-
children: [
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
] }) }),
|
|
1048
|
-
/* @__PURE__ */ jsx("div", { className: "absolute bottom-16 -left-16 aspect-square w-16 rounded-full bg-pink-400 transition-all duration-300 group-hover:bottom-1/2 group-hover:-left-5 group-hover:w-[110%] group-hover:translate-y-1/2" })
|
|
1049
|
-
]
|
|
1180
|
+
children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1181
|
+
icon,
|
|
1182
|
+
/* @__PURE__ */ jsx("span", { children: label }),
|
|
1183
|
+
iconAfter
|
|
1184
|
+
] })
|
|
1050
1185
|
}
|
|
1051
1186
|
);
|
|
1052
1187
|
})(),
|
|
1053
|
-
/* @__PURE__ */ jsxs(
|
|
1188
|
+
videoUrl && /* @__PURE__ */ jsxs(
|
|
1054
1189
|
Pressable,
|
|
1055
1190
|
{
|
|
1056
|
-
href: "#",
|
|
1057
1191
|
onClick: () => setIsVideoOpen(true),
|
|
1058
1192
|
asButton: true,
|
|
1059
|
-
variant: "
|
|
1060
|
-
className: "flex h-fit w-fit items-center gap-2 text-lg font-semibold uppercase hover:bg-transparent",
|
|
1193
|
+
variant: "link",
|
|
1061
1194
|
children: [
|
|
1062
|
-
/* @__PURE__ */ jsx("div", { className: "flex h-10 w-10 rounded-full bg-primary", children: /* @__PURE__ */ jsx(
|
|
1063
|
-
DynamicIcon,
|
|
1064
|
-
{
|
|
1065
|
-
name: "lucide/play",
|
|
1066
|
-
size: 16,
|
|
1067
|
-
className: "m-auto fill-white stroke-white"
|
|
1068
|
-
}
|
|
1069
|
-
) }),
|
|
1195
|
+
/* @__PURE__ */ jsx("div", { className: "flex h-10 w-10 rounded-full bg-primary text-primary-foreground", children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/play" }) }),
|
|
1070
1196
|
/* @__PURE__ */ jsx("div", { children: videoButtonLabel })
|
|
1071
1197
|
]
|
|
1072
1198
|
}
|
|
1073
1199
|
)
|
|
1074
1200
|
] });
|
|
1075
1201
|
}, [actionsSlot, primaryAction, videoButtonLabel, setIsVideoOpen]);
|
|
1076
|
-
const renderLogos = useMemo(() => {
|
|
1077
|
-
if (logosSlot) return logosSlot;
|
|
1078
|
-
if (!logos || logos.length === 0) return null;
|
|
1079
|
-
return logos.map((logo, index) => {
|
|
1080
|
-
const src = typeof logo.src === "string" ? logo.src : logo.src.light;
|
|
1081
|
-
return /* @__PURE__ */ jsx(
|
|
1082
|
-
Img,
|
|
1083
|
-
{
|
|
1084
|
-
src,
|
|
1085
|
-
alt: logo.alt,
|
|
1086
|
-
className: logo.className,
|
|
1087
|
-
optixFlowConfig
|
|
1088
|
-
},
|
|
1089
|
-
index
|
|
1090
|
-
);
|
|
1091
|
-
});
|
|
1092
|
-
}, [logosSlot, logos, optixFlowConfig]);
|
|
1093
1202
|
return /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
1094
1203
|
/* @__PURE__ */ jsx(
|
|
1095
1204
|
Section,
|
|
@@ -1102,42 +1211,91 @@ function HeroConversionVideoPlay({
|
|
|
1102
1211
|
containerClassName,
|
|
1103
1212
|
children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
1104
1213
|
/* @__PURE__ */ jsx("div", { className: "overflow-hidden border-b border-border", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-16 md:gap-24", children: [
|
|
1105
|
-
/* @__PURE__ */ jsxs(
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1214
|
+
/* @__PURE__ */ jsxs(
|
|
1215
|
+
"div",
|
|
1216
|
+
{
|
|
1217
|
+
className: cn(
|
|
1218
|
+
"flex flex-col items-center gap-8",
|
|
1219
|
+
contentClassName
|
|
1220
|
+
),
|
|
1221
|
+
children: [
|
|
1222
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-7", children: [
|
|
1223
|
+
heading && (typeof heading === "string" ? /* @__PURE__ */ jsx(
|
|
1224
|
+
"h1",
|
|
1225
|
+
{
|
|
1226
|
+
className: cn(
|
|
1227
|
+
"max-w-[920px] text-center text-4xl leading-tight font-semibold md:text-6xl lg:text-7xl text-balance",
|
|
1228
|
+
headingClassName
|
|
1229
|
+
),
|
|
1230
|
+
children: heading
|
|
1231
|
+
}
|
|
1232
|
+
) : /* @__PURE__ */ jsx("div", { className: headingClassName, children: heading })),
|
|
1233
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsx(
|
|
1234
|
+
"p",
|
|
1235
|
+
{
|
|
1236
|
+
className: cn(
|
|
1237
|
+
"max-w-[750px] text-center text-base leading-relaxed font-normal md:text-xl text-balance",
|
|
1238
|
+
descriptionClassName
|
|
1239
|
+
),
|
|
1240
|
+
children: description
|
|
1241
|
+
}
|
|
1242
|
+
) : /* @__PURE__ */ jsx("div", { className: descriptionClassName, children: description }))
|
|
1243
|
+
] }),
|
|
1244
|
+
/* @__PURE__ */ jsx(
|
|
1245
|
+
"div",
|
|
1246
|
+
{
|
|
1247
|
+
className: cn(
|
|
1248
|
+
"flex flex-wrap items-center justify-center gap-8",
|
|
1249
|
+
actionsClassName
|
|
1250
|
+
),
|
|
1251
|
+
children: renderActions
|
|
1252
|
+
}
|
|
1253
|
+
)
|
|
1254
|
+
]
|
|
1255
|
+
}
|
|
1256
|
+
),
|
|
1112
1257
|
/* @__PURE__ */ jsx("div", { className: "w-full", children: imageSlot ? imageSlot : image ? /* @__PURE__ */ jsx("div", { className: cn("relative h-fit w-full", imageClassName), children: /* @__PURE__ */ jsx("div", { className: "relative z-20 w-full max-w-330 overflow-hidden rounded-t-xl md:rounded-t-3xl", children: /* @__PURE__ */ jsx(AspectRatio, { ratio: 2.095238095 / 1, children: /* @__PURE__ */ jsx(
|
|
1113
1258
|
Img,
|
|
1114
1259
|
{
|
|
1115
1260
|
src: image.src,
|
|
1116
1261
|
alt: image.alt,
|
|
1117
|
-
className: cn(
|
|
1262
|
+
className: cn(
|
|
1263
|
+
"size-full object-cover object-center",
|
|
1264
|
+
image.className
|
|
1265
|
+
),
|
|
1118
1266
|
optixFlowConfig
|
|
1119
1267
|
}
|
|
1120
1268
|
) }) }) }) : null })
|
|
1121
1269
|
] }) }),
|
|
1122
1270
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-16 py-20", children: [
|
|
1123
|
-
logosTagline && (typeof logosTagline === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-center text-xl font-medium
|
|
1124
|
-
|
|
1271
|
+
logosTagline && (typeof logosTagline === "string" ? /* @__PURE__ */ jsx("p", { className: cn("text-center text-xl font-medium "), children: logosTagline }) : logosTagline),
|
|
1272
|
+
logosSlot ? logosSlot : logos && logos.length > 0 ? /* @__PURE__ */ jsx(
|
|
1273
|
+
Carousel,
|
|
1274
|
+
{
|
|
1275
|
+
opts: { loop: true },
|
|
1276
|
+
plugins: [AutoScroll({ playOnInit: true, speed: 1 })],
|
|
1277
|
+
className: "relative w-full max-w-(--breakpoint-2xl) overflow-hidden",
|
|
1278
|
+
children: /* @__PURE__ */ jsx(CarouselContent, { className: "items-center", children: [...logos, ...logos].map((logo, index) => /* @__PURE__ */ jsx(CarouselItem, { className: "w-fit basis-auto px-7", children: /* @__PURE__ */ jsx(
|
|
1279
|
+
Img,
|
|
1280
|
+
{
|
|
1281
|
+
src: typeof logo.src === "string" ? logo.src : logo.src.light,
|
|
1282
|
+
alt: logo.alt,
|
|
1283
|
+
className: cn(
|
|
1284
|
+
"h-8 w-full object-fill",
|
|
1285
|
+
logo.imgClassName
|
|
1286
|
+
),
|
|
1287
|
+
optixFlowConfig
|
|
1288
|
+
}
|
|
1289
|
+
) }, index)) })
|
|
1290
|
+
}
|
|
1291
|
+
) : null
|
|
1125
1292
|
] })
|
|
1126
1293
|
] })
|
|
1127
1294
|
}
|
|
1128
1295
|
),
|
|
1129
|
-
/* @__PURE__ */ jsx(Dialog, { open: isVideoOpen, onOpenChange: setIsVideoOpen, children: /* @__PURE__ */ jsxs(DialogContent, { className: "sm:max-w-
|
|
1296
|
+
/* @__PURE__ */ jsx(Dialog, { open: isVideoOpen, onOpenChange: setIsVideoOpen, children: /* @__PURE__ */ jsxs(DialogContent, { className: "sm:max-w-200", children: [
|
|
1130
1297
|
/* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsx(DialogTitle, { children: videoDialogTitle }) }),
|
|
1131
|
-
/* @__PURE__ */ jsx("div", { className: "aspect-video", children: /* @__PURE__ */ jsx(
|
|
1132
|
-
"iframe",
|
|
1133
|
-
{
|
|
1134
|
-
className: "h-full w-full",
|
|
1135
|
-
src: videoUrl,
|
|
1136
|
-
title: videoDialogTitle,
|
|
1137
|
-
allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
|
|
1138
|
-
allowFullScreen: true
|
|
1139
|
-
}
|
|
1140
|
-
) })
|
|
1298
|
+
/* @__PURE__ */ jsx("div", { className: "aspect-video", children: /* @__PURE__ */ jsx("video", { controls: true, autoPlay: true, className: "h-full w-full rounded-lg", children: /* @__PURE__ */ jsx("source", { src: videoUrl, type: "video/mp4" }) }) })
|
|
1141
1299
|
] }) })
|
|
1142
1300
|
] });
|
|
1143
1301
|
}
|
|
@@ -961,7 +961,7 @@ function HeroCustomerSupportLayered({
|
|
|
961
961
|
patternClassName,
|
|
962
962
|
className,
|
|
963
963
|
containerClassName,
|
|
964
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 items-center gap-
|
|
964
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 items-center gap-8 md:gap-20 md:grid-cols-2", children: [
|
|
965
965
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
966
966
|
"div",
|
|
967
967
|
{
|
|
@@ -940,7 +940,7 @@ function HeroCustomerSupportLayered({
|
|
|
940
940
|
patternClassName,
|
|
941
941
|
className,
|
|
942
942
|
containerClassName,
|
|
943
|
-
children: /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 items-center gap-
|
|
943
|
+
children: /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 items-center gap-8 md:gap-20 md:grid-cols-2", children: [
|
|
944
944
|
/* @__PURE__ */ jsxs(
|
|
945
945
|
"div",
|
|
946
946
|
{
|
|
@@ -1006,30 +1006,39 @@ function HeroDashedBorderFeatures({
|
|
|
1006
1006
|
const renderActions = React.useMemo(() => {
|
|
1007
1007
|
if (actionsSlot) return actionsSlot;
|
|
1008
1008
|
if (!actions || actions.length === 0) return null;
|
|
1009
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1019
|
-
Pressable,
|
|
1020
|
-
{
|
|
1021
|
-
asButton: true,
|
|
1022
|
-
className: actionClassName,
|
|
1023
|
-
...pressableProps,
|
|
1024
|
-
children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1025
|
-
icon,
|
|
1009
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1010
|
+
"div",
|
|
1011
|
+
{
|
|
1012
|
+
className: cn(
|
|
1013
|
+
"flex flex-col items-center justify-center mt-4 md:flex-row gap-4",
|
|
1014
|
+
actionsClassName
|
|
1015
|
+
),
|
|
1016
|
+
children: actions.map((action, index) => {
|
|
1017
|
+
const {
|
|
1026
1018
|
label,
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1019
|
+
icon,
|
|
1020
|
+
iconAfter,
|
|
1021
|
+
children,
|
|
1022
|
+
className: actionClassName,
|
|
1023
|
+
...pressableProps
|
|
1024
|
+
} = action;
|
|
1025
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1026
|
+
Pressable,
|
|
1027
|
+
{
|
|
1028
|
+
asButton: true,
|
|
1029
|
+
className: actionClassName,
|
|
1030
|
+
...pressableProps,
|
|
1031
|
+
children: children ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1032
|
+
icon,
|
|
1033
|
+
label,
|
|
1034
|
+
iconAfter
|
|
1035
|
+
] })
|
|
1036
|
+
},
|
|
1037
|
+
index
|
|
1038
|
+
);
|
|
1039
|
+
})
|
|
1040
|
+
}
|
|
1041
|
+
);
|
|
1033
1042
|
}, [actionsSlot, actions, actionsClassName]);
|
|
1034
1043
|
const renderFeatures = React.useMemo(() => {
|
|
1035
1044
|
if (featuresSlot) return featuresSlot;
|
|
@@ -1084,7 +1093,7 @@ function HeroDashedBorderFeatures({
|
|
|
1084
1093
|
"p",
|
|
1085
1094
|
{
|
|
1086
1095
|
className: cn(
|
|
1087
|
-
"mx-auto mb-
|
|
1096
|
+
"mx-auto mb-8 max-w-2xl text-center lg:text-xl text-balance",
|
|
1088
1097
|
descriptionClassName
|
|
1089
1098
|
),
|
|
1090
1099
|
children: description
|
|
@@ -985,30 +985,39 @@ function HeroDashedBorderFeatures({
|
|
|
985
985
|
const renderActions = useMemo(() => {
|
|
986
986
|
if (actionsSlot) return actionsSlot;
|
|
987
987
|
if (!actions || actions.length === 0) return null;
|
|
988
|
-
return /* @__PURE__ */ jsx(
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
return /* @__PURE__ */ jsx(
|
|
998
|
-
Pressable,
|
|
999
|
-
{
|
|
1000
|
-
asButton: true,
|
|
1001
|
-
className: actionClassName,
|
|
1002
|
-
...pressableProps,
|
|
1003
|
-
children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1004
|
-
icon,
|
|
988
|
+
return /* @__PURE__ */ jsx(
|
|
989
|
+
"div",
|
|
990
|
+
{
|
|
991
|
+
className: cn(
|
|
992
|
+
"flex flex-col items-center justify-center mt-4 md:flex-row gap-4",
|
|
993
|
+
actionsClassName
|
|
994
|
+
),
|
|
995
|
+
children: actions.map((action, index) => {
|
|
996
|
+
const {
|
|
1005
997
|
label,
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
998
|
+
icon,
|
|
999
|
+
iconAfter,
|
|
1000
|
+
children,
|
|
1001
|
+
className: actionClassName,
|
|
1002
|
+
...pressableProps
|
|
1003
|
+
} = action;
|
|
1004
|
+
return /* @__PURE__ */ jsx(
|
|
1005
|
+
Pressable,
|
|
1006
|
+
{
|
|
1007
|
+
asButton: true,
|
|
1008
|
+
className: actionClassName,
|
|
1009
|
+
...pressableProps,
|
|
1010
|
+
children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1011
|
+
icon,
|
|
1012
|
+
label,
|
|
1013
|
+
iconAfter
|
|
1014
|
+
] })
|
|
1015
|
+
},
|
|
1016
|
+
index
|
|
1017
|
+
);
|
|
1018
|
+
})
|
|
1019
|
+
}
|
|
1020
|
+
);
|
|
1012
1021
|
}, [actionsSlot, actions, actionsClassName]);
|
|
1013
1022
|
const renderFeatures = useMemo(() => {
|
|
1014
1023
|
if (featuresSlot) return featuresSlot;
|
|
@@ -1063,7 +1072,7 @@ function HeroDashedBorderFeatures({
|
|
|
1063
1072
|
"p",
|
|
1064
1073
|
{
|
|
1065
1074
|
className: cn(
|
|
1066
|
-
"mx-auto mb-
|
|
1075
|
+
"mx-auto mb-8 max-w-2xl text-center lg:text-xl text-balance",
|
|
1067
1076
|
descriptionClassName
|
|
1068
1077
|
),
|
|
1069
1078
|
children: description
|